diff --git a/.gitattributes b/.gitattributes index a6344aac8c09253b3b630fb776ae94478aa0275b..8b6b860a16bbf81b8a2a6f735f8babcef9884268 100644 --- a/.gitattributes +++ b/.gitattributes @@ -33,3 +33,11 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text *.zip filter=lfs diff=lfs merge=lfs -text *.zst filter=lfs diff=lfs merge=lfs -text *tfevents* filter=lfs diff=lfs merge=lfs -text +pyro/source/tutorial/source/_static/img/first_embedding.png filter=lfs diff=lfs merge=lfs -text +pyro/source/tutorial/source/_static/img/gpr-fit.gif filter=lfs diff=lfs merge=lfs -text +pyro/source/tutorial/source/_static/img/guide.png filter=lfs diff=lfs merge=lfs -text +pyro/source/tutorial/source/_static/img/model.png filter=lfs diff=lfs merge=lfs -text +pyro/source/tutorial/source/_static/img/sir_hmc/forecast.png filter=lfs diff=lfs merge=lfs -text +pyro/source/tutorial/source/_static/img/ss_vae_zoo.png filter=lfs diff=lfs merge=lfs -text +pyro/source/tutorial/source/_static/img/svgpr-fit.gif filter=lfs diff=lfs merge=lfs -text +pyro/source/tutorial/source/_static/img/third_embedding.png filter=lfs diff=lfs merge=lfs -text diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..08440fd26f1df9d334ef5a7cef875789fb461102 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,18 @@ +FROM python:3.10 + +RUN useradd -m -u 1000 user && python -m pip install --upgrade pip +USER user +ENV PATH="/home/user/.local/bin:$PATH" + +WORKDIR /app + +COPY --chown=user ./requirements.txt requirements.txt +RUN pip install --no-cache-dir --upgrade -r requirements.txt + +COPY --chown=user . /app +ENV MCP_TRANSPORT=http +ENV MCP_PORT=7860 + +EXPOSE 7860 + +CMD ["python", "pyro/mcp_output/start_mcp.py"] diff --git a/README.md b/README.md index dca4d9cadb9171bccc8d91d89056388d72944fd7..4b75dbf7e497fc2fc0f14b039b6c08adffa6e255 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,32 @@ --- -title: Pyro -emoji: 🌍 -colorFrom: indigo -colorTo: indigo +title: Pyro MCP +emoji: 🤖 +colorFrom: blue +colorTo: purple sdk: docker +sdk_version: "4.26.0" +app_file: app.py pinned: false --- -Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference +# Pyro MCP Service + +Auto-generated MCP service for pyro. + +## Usage + +``` +https://None-pyro-mcp.hf.space/mcp +``` + +## Connect with Cursor + +```json +{ + "mcpServers": { + "pyro": { + "url": "https://None-pyro-mcp.hf.space/mcp" + } + } +} +``` diff --git a/app.py b/app.py new file mode 100644 index 0000000000000000000000000000000000000000..bbee8bf756e3398e0459c550ecf76bb9d422e40b --- /dev/null +++ b/app.py @@ -0,0 +1,45 @@ +from fastapi import FastAPI +import os +import sys + +mcp_plugin_path = os.path.join(os.path.dirname(__file__), "pyro", "mcp_output", "mcp_plugin") +sys.path.insert(0, mcp_plugin_path) + +app = FastAPI( + title="Pyro MCP Service", + description="Auto-generated MCP service for pyro", + version="1.0.0" +) + +@app.get("/") +def root(): + return { + "service": "Pyro MCP Service", + "version": "1.0.0", + "status": "running", + "transport": os.environ.get("MCP_TRANSPORT", "http") + } + +@app.get("/health") +def health_check(): + return {"status": "healthy", "service": "pyro MCP"} + +@app.get("/tools") +def list_tools(): + try: + from mcp_service import create_app + mcp_app = create_app() + tools = [] + for tool_name, tool_func in mcp_app.tools.items(): + tools.append({ + "name": tool_name, + "description": tool_func.__doc__ or "No description available" + }) + return {"tools": tools} + except Exception as e: + return {"error": f"Failed to load tools: {str(e)}"} + +if __name__ == "__main__": + import uvicorn + port = int(os.environ.get("PORT", 7860)) + uvicorn.run(app, host="0.0.0.0", port=port) diff --git a/pyro/mcp_output/README_MCP.md b/pyro/mcp_output/README_MCP.md new file mode 100644 index 0000000000000000000000000000000000000000..fe262f0b89f50631014b21756b9c0a90c32b1912 --- /dev/null +++ b/pyro/mcp_output/README_MCP.md @@ -0,0 +1,59 @@ +# Pyro: Probabilistic Programming with PyTorch + +## Project Introduction + +Pyro is a universal probabilistic programming language (PPL) built on PyTorch. It allows developers to write generative models as Python programs and perform inference over them using a variety of algorithms, including Stochastic Variational Inference (SVI) and Markov Chain Monte Carlo (MCMC). Pyro is designed to be flexible, scalable, and minimal, providing powerful abstractions for probabilistic modeling and inference. + +## Installation Method + +To install Pyro, ensure you have Python 3.8 or higher. You can install Pyro and its core dependencies using pip: + +``` +pip install pyro-ppl +``` + +Pyro requires `torch` and `numpy` as core dependencies. Optional dependencies include `matplotlib` and `scipy` for enhanced functionality. + +## Quick Start + +Here's a simple example to get you started with Pyro: + +1. Import Pyro and necessary modules. +2. Define a model using Pyro's primitives like `sample` and `param`. +3. Perform inference using SVI or MCMC. + +Example: + +``` +import pyro +import pyro.distributions as dist + +def model(data): + alpha = pyro.param("alpha", torch.tensor(1.0)) + beta = pyro.param("beta", torch.tensor(1.0)) + with pyro.plate("data", len(data)): + pyro.sample("obs", dist.Beta(alpha, beta), obs=data) + +# Perform inference using SVI or MCMC +``` + +## Available Tools and Endpoints List + +- **Core Primitives**: Functions like `sample`, `param`, `plate`, `factor`, and `deterministic` for building probabilistic models. +- **Effect Handlers (Poutine)**: Tools like `trace`, `replay`, `condition`, `block`, `scale`, and `enum` for intercepting and transforming probabilistic primitives. +- **Inference Algorithms**: Includes `SVI`, `MCMC`, and `Importance` for performing inference on models. +- **Distributions**: Extensions to PyTorch's distribution library with additional distributions like `Delta`, `HiddenMarkovModel`, and `Empirical`. + +## Common Issues and Notes + +- **Dependencies**: Ensure that `torch` and `numpy` are installed. Optional dependencies like `matplotlib` and `scipy` can enhance functionality but are not required. +- **Environment**: Pyro requires Python 3.8 or higher. Ensure your environment is set up accordingly. +- **Performance**: Pyro is designed to scale with minimal overhead. However, performance can be affected by the complexity of the model and the size of the data. + +## Reference Links or Documentation + +- [Pyro GitHub Repository](https://github.com/pyro-ppl/pyro) +- [Pyro Documentation](https://pyro.ai/) +- [Pyro Tutorials](https://pyro.ai/examples/) + +For more detailed information on Pyro's architecture, design philosophy, and core components, please refer to the official documentation and tutorials. \ No newline at end of file diff --git a/pyro/mcp_output/analysis.json b/pyro/mcp_output/analysis.json new file mode 100644 index 0000000000000000000000000000000000000000..e2a91a4710a3765ce2f3c6ef16a4e14e8756d271 --- /dev/null +++ b/pyro/mcp_output/analysis.json @@ -0,0 +1,2110 @@ +{ + "summary": { + "repository_url": "https://github.com/pyro-ppl/pyro", + "summary": "Imported via zip fallback, file count: 655", + "file_tree": { + ".codecov.yml": { + "size": 126 + }, + ".github/FUNDING.yml": { + "size": 812 + }, + ".github/issue_template.md": { + "size": 975 + }, + ".github/workflows/ci.yml": { + "size": 10372 + }, + ".github/workflows/publish.yml": { + "size": 990 + }, + ".readthedocs.yml": { + "size": 413 + }, + "CODE_OF_CONDUCT.md": { + "size": 3212 + }, + "CONTRIBUTING.md": { + "size": 3956 + }, + "LICENSE.md": { + "size": 11358 + }, + "README.md": { + "size": 4538 + }, + "RELEASE-MANAGEMENT.md": { + "size": 1628 + }, + "docker/README.md": { + "size": 2649 + }, + "docs/README.md": { + "size": 545 + }, + "docs/requirements.txt": { + "size": 153 + }, + "docs/source/_static/img/favicon/manifest.json": { + "size": 720 + }, + "docs/source/conf.py": { + "size": 6997 + }, + "docs/source/pyro.infer.mcmc.txt": { + "size": 1053 + }, + "docs/source/pyro.optim.txt": { + "size": 1181 + }, + "docs/source/pyro.poutine.txt": { + "size": 3375 + }, + "examples/__init__.py": { + "size": 0 + }, + "examples/air/air.py": { + "size": 14031 + }, + "examples/air/main.py": { + "size": 14628 + }, + "examples/air/modules.py": { + "size": 2991 + }, + "examples/air/viz.py": { + "size": 2528 + }, + "examples/baseball.py": { + "size": 16383 + }, + "examples/capture_recapture/cjs.py": { + "size": 14374 + }, + "examples/contrib/__init__.py": { + "size": 0 + }, + "examples/contrib/autoname/mixture.py": { + "size": 2572 + }, + "examples/contrib/autoname/scoping_mixture.py": { + "size": 2239 + }, + "examples/contrib/autoname/tree_data.py": { + "size": 3560 + }, + "examples/contrib/cevae/synthetic.py": { + "size": 3802 + }, + "examples/contrib/epidemiology/regional.py": { + "size": 7900 + }, + "examples/contrib/epidemiology/sir.py": { + "size": 15144 + }, + "examples/contrib/forecast/bart.py": { + "size": 7530 + }, + "examples/contrib/funsor/__init__.py": { + "size": 0 + }, + "examples/contrib/funsor/hmm.py": { + "size": 35805 + }, + "examples/contrib/gp/sv-dkl.py": { + "size": 8529 + }, + "examples/contrib/mue/FactorMuE.py": { + "size": 13776 + }, + "examples/contrib/mue/ProfileHMM.py": { + "size": 10356 + }, + "examples/contrib/oed/ab_test.py": { + "size": 4658 + }, + "examples/contrib/oed/gp_bayes_opt.py": { + "size": 5456 + }, + "examples/contrib/timeseries/gp_models.py": { + "size": 7165 + }, + "examples/cvae/__init__.py": { + "size": 0 + }, + "examples/cvae/baseline.py": { + "size": 3456 + }, + "examples/cvae/cvae.py": { + "size": 6875 + }, + "examples/cvae/main.py": { + "size": 4147 + }, + "examples/cvae/mnist.py": { + "size": 3204 + }, + "examples/cvae/util.py": { + "size": 4845 + }, + "examples/dmm.py": { + "size": 25355 + }, + "examples/eight_schools/README.md": { + "size": 672 + }, + "examples/eight_schools/data.py": { + "size": 249 + }, + "examples/eight_schools/mcmc.py": { + "size": 1818 + }, + "examples/eight_schools/svi.py": { + "size": 3025 + }, + "examples/einsum.py": { + "size": 7580 + }, + "examples/hmm.py": { + "size": 32364 + }, + "examples/inclined_plane.py": { + "size": 5455 + }, + "examples/lda.py": { + "size": 6708 + }, + "examples/lkj.py": { + "size": 2735 + }, + "examples/minipyro.py": { + "size": 2971 + }, + "examples/mixed_hmm/README.md": { + "size": 4517 + }, + "examples/mixed_hmm/__init__.py": { + "size": 0 + }, + "examples/mixed_hmm/experiment.py": { + "size": 5959 + }, + "examples/mixed_hmm/model.py": { + "size": 9884 + }, + "examples/mixed_hmm/seal_data.py": { + "size": 2549 + }, + "examples/neutra.py": { + "size": 9381 + }, + "examples/rsa/README.md": { + "size": 972 + }, + "examples/rsa/generics.py": { + "size": 5389 + }, + "examples/rsa/hyperbole.py": { + "size": 6737 + }, + "examples/rsa/schelling.py": { + "size": 2839 + }, + "examples/rsa/schelling_false.py": { + "size": 3334 + }, + "examples/rsa/search_inference.py": { + "size": 7562 + }, + "examples/rsa/semantic_parsing.py": { + "size": 8669 + }, + "examples/scanvi/__init__.py": { + "size": 0 + }, + "examples/scanvi/scanvi.py": { + "size": 16796 + }, + "examples/sir_hmc.py": { + "size": 24193 + }, + "examples/smcfilter.py": { + "size": 3358 + }, + "examples/sparse_gamma_def.py": { + "size": 12095 + }, + "examples/sparse_regression.py": { + "size": 13613 + }, + "examples/svi_horovod.py": { + "size": 6668 + }, + "examples/svi_lightning.py": { + "size": 4919 + }, + "examples/svi_torch.py": { + "size": 5054 + }, + "examples/toy_mixture_model_discrete_enumeration.py": { + "size": 5197 + }, + "examples/vae/ss_vae_M2.py": { + "size": 20428 + }, + "examples/vae/utils/__init__.py": { + "size": 0 + }, + "examples/vae/utils/custom_mlp.py": { + "size": 6871 + }, + "examples/vae/utils/mnist_cached.py": { + "size": 8857 + }, + "examples/vae/utils/vae_plots.py": { + "size": 3678 + }, + "examples/vae/vae.py": { + "size": 9201 + }, + "examples/vae/vae_comparison.py": { + "size": 9094 + }, + "profiler/__init__.py": { + "size": 0 + }, + "profiler/distributions.py": { + "size": 5360 + }, + "profiler/gaussianhmm.py": { + "size": 2678 + }, + "profiler/hmm.py": { + "size": 2834 + }, + "profiler/profiling_utils.py": { + "size": 4006 + }, + "pyproject.toml": { + "size": 100 + }, + "pyro/__init__.py": { + "size": 1324 + }, + "pyro/contrib/README.md": { + "size": 608 + }, + "pyro/contrib/__init__.py": { + "size": 693 + }, + "pyro/contrib/autoguide.py": { + "size": 317 + }, + "pyro/contrib/autoname/__init__.py": { + "size": 486 + }, + "pyro/contrib/autoname/autoname.py": { + "size": 5100 + }, + "pyro/contrib/autoname/named.py": { + "size": 8618 + }, + "pyro/contrib/autoname/scoping.py": { + "size": 6482 + }, + "pyro/contrib/bnn/__init__.py": { + "size": 177 + }, + "pyro/contrib/bnn/hidden_layer.py": { + "size": 5384 + }, + "pyro/contrib/bnn/utils.py": { + "size": 490 + }, + "pyro/contrib/cevae/__init__.py": { + "size": 23079 + }, + "pyro/contrib/conjugate/__init__.py": { + "size": 0 + }, + "pyro/contrib/conjugate/infer.py": { + "size": 9073 + }, + "pyro/contrib/easyguide/__init__.py": { + "size": 206 + }, + "pyro/contrib/easyguide/easyguide.py": { + "size": 12912 + }, + "pyro/contrib/epidemiology/__init__.py": { + "size": 406 + }, + "pyro/contrib/epidemiology/compartmental.py": { + "size": 49835 + }, + "pyro/contrib/epidemiology/distributions.py": { + "size": 13525 + }, + "pyro/contrib/epidemiology/models.py": { + "size": 51215 + }, + "pyro/contrib/epidemiology/util.py": { + "size": 10993 + }, + "pyro/contrib/examples/__init__.py": { + "size": 0 + }, + "pyro/contrib/examples/bart.py": { + "size": 6760 + }, + "pyro/contrib/examples/finance.py": { + "size": 694 + }, + "pyro/contrib/examples/multi_mnist.py": { + "size": 2920 + }, + "pyro/contrib/examples/nextstrain.py": { + "size": 1547 + }, + "pyro/contrib/examples/polyphonic_data_loader.py": { + "size": 6875 + }, + "pyro/contrib/examples/scanvi_data.py": { + "size": 7442 + }, + "pyro/contrib/examples/util.py": { + "size": 1556 + }, + "pyro/contrib/forecast/__init__.py": { + "size": 360 + }, + "pyro/contrib/forecast/evaluate.py": { + "size": 8823 + }, + "pyro/contrib/forecast/forecaster.py": { + "size": 23353 + }, + "pyro/contrib/forecast/util.py": { + "size": 16054 + }, + "pyro/contrib/funsor/__init__.py": { + "size": 1223 + }, + "pyro/contrib/funsor/handlers/__init__.py": { + "size": 1408 + }, + "pyro/contrib/funsor/handlers/enum_messenger.py": { + "size": 9727 + }, + "pyro/contrib/funsor/handlers/named_messenger.py": { + "size": 7623 + }, + "pyro/contrib/funsor/handlers/plate_messenger.py": { + "size": 15224 + }, + "pyro/contrib/funsor/handlers/primitives.py": { + "size": 1076 + }, + "pyro/contrib/funsor/handlers/replay_messenger.py": { + "size": 1806 + }, + "pyro/contrib/funsor/handlers/runtime.py": { + "size": 8558 + }, + "pyro/contrib/funsor/handlers/trace_messenger.py": { + "size": 3632 + }, + "pyro/contrib/funsor/infer/__init__.py": { + "size": 514 + }, + "pyro/contrib/funsor/infer/discrete.py": { + "size": 2921 + }, + "pyro/contrib/funsor/infer/elbo.py": { + "size": 1652 + }, + "pyro/contrib/funsor/infer/trace_elbo.py": { + "size": 1724 + }, + "pyro/contrib/funsor/infer/traceenum_elbo.py": { + "size": 12731 + }, + "pyro/contrib/funsor/infer/tracetmc_elbo.py": { + "size": 1916 + }, + "pyro/contrib/gp/__init__.py": { + "size": 340 + }, + "pyro/contrib/gp/kernels/__init__.py": { + "size": 1533 + }, + "pyro/contrib/gp/kernels/brownian.py": { + "size": 1577 + }, + "pyro/contrib/gp/kernels/coregionalize.py": { + "size": 3699 + }, + "pyro/contrib/gp/kernels/dot_product.py": { + "size": 2646 + }, + "pyro/contrib/gp/kernels/isotropic.py": { + "size": 5740 + }, + "pyro/contrib/gp/kernels/kernel.py": { + "size": 8446 + }, + "pyro/contrib/gp/kernels/periodic.py": { + "size": 2424 + }, + "pyro/contrib/gp/kernels/static.py": { + "size": 1536 + }, + "pyro/contrib/gp/likelihoods/__init__.py": { + "size": 897 + }, + "pyro/contrib/gp/likelihoods/binary.py": { + "size": 1988 + }, + "pyro/contrib/gp/likelihoods/gaussian.py": { + "size": 1677 + }, + "pyro/contrib/gp/likelihoods/likelihood.py": { + "size": 875 + }, + "pyro/contrib/gp/likelihoods/multi_class.py": { + "size": 2859 + }, + "pyro/contrib/gp/likelihoods/poisson.py": { + "size": 1884 + }, + "pyro/contrib/gp/models/__init__.py": { + "size": 546 + }, + "pyro/contrib/gp/models/gplvm.py": { + "size": 3897 + }, + "pyro/contrib/gp/models/gpr.py": { + "size": 8932 + }, + "pyro/contrib/gp/models/model.py": { + "size": 9145 + }, + "pyro/contrib/gp/models/sgpr.py": { + "size": 11001 + }, + "pyro/contrib/gp/models/vgp.py": { + "size": 6859 + }, + "pyro/contrib/gp/models/vsgp.py": { + "size": 8417 + }, + "pyro/contrib/gp/parameterized.py": { + "size": 8052 + }, + "pyro/contrib/gp/util.py": { + "size": 7152 + }, + "pyro/contrib/minipyro.py": { + "size": 15591 + }, + "pyro/contrib/mue/__init__.py": { + "size": 0 + }, + "pyro/contrib/mue/dataloaders.py": { + "size": 6063 + }, + "pyro/contrib/mue/missingdatahmm.py": { + "size": 13358 + }, + "pyro/contrib/mue/models.py": { + "size": 34329 + }, + "pyro/contrib/mue/statearrangers.py": { + "size": 9017 + }, + "pyro/contrib/oed/__init__.py": { + "size": 3786 + }, + "pyro/contrib/oed/eig.py": { + "size": 44795 + }, + "pyro/contrib/oed/glmm/__init__.py": { + "size": 1551 + }, + "pyro/contrib/oed/glmm/glmm.py": { + "size": 16376 + }, + "pyro/contrib/oed/glmm/guides.py": { + "size": 11368 + }, + "pyro/contrib/oed/search.py": { + "size": 867 + }, + "pyro/contrib/oed/util.py": { + "size": 1230 + }, + "pyro/contrib/randomvariable/__init__.py": { + "size": 193 + }, + "pyro/contrib/randomvariable/random_variable.py": { + "size": 5424 + }, + "pyro/contrib/timeseries/__init__.py": { + "size": 711 + }, + "pyro/contrib/timeseries/base.py": { + "size": 2211 + }, + "pyro/contrib/timeseries/gp.py": { + "size": 23486 + }, + "pyro/contrib/timeseries/lgssm.py": { + "size": 6439 + }, + "pyro/contrib/timeseries/lgssmgp.py": { + "size": 11260 + }, + "pyro/contrib/tracking/__init__.py": { + "size": 167 + }, + "pyro/contrib/tracking/assignment.py": { + "size": 19243 + }, + "pyro/contrib/tracking/distributions.py": { + "size": 3577 + }, + "pyro/contrib/tracking/dynamic_models.py": { + "size": 16560 + }, + "pyro/contrib/tracking/extended_kalman_filter.py": { + "size": 7796 + }, + "pyro/contrib/tracking/hashing.py": { + "size": 7266 + }, + "pyro/contrib/tracking/measurements.py": { + "size": 4544 + }, + "pyro/contrib/util.py": { + "size": 2800 + }, + "pyro/contrib/zuko.py": { + "size": 2230 + }, + "pyro/distributions/__init__.py": { + "size": 7555 + }, + "pyro/distributions/affine_beta.py": { + "size": 3985 + }, + "pyro/distributions/asymmetriclaplace.py": { + "size": 7367 + }, + "pyro/distributions/avf_mvn.py": { + "size": 4062 + }, + "pyro/distributions/coalescent.py": { + "size": 20914 + }, + "pyro/distributions/conditional.py": { + "size": 4895 + }, + "pyro/distributions/conjugate.py": { + "size": 10898 + }, + "pyro/distributions/constraints.py": { + "size": 5739 + }, + "pyro/distributions/delta.py": { + "size": 3066 + }, + "pyro/distributions/diag_normal_mixture.py": { + "size": 10433 + }, + "pyro/distributions/diag_normal_mixture_shared_cov.py": { + "size": 9139 + }, + "pyro/distributions/distribution.py": { + "size": 8481 + }, + "pyro/distributions/empirical.py": { + "size": 6765 + }, + "pyro/distributions/extended.py": { + "size": 1885 + }, + "pyro/distributions/folded.py": { + "size": 1290 + }, + "pyro/distributions/gaussian_scale_mixture.py": { + "size": 7983 + }, + "pyro/distributions/grouped_normal_normal.py": { + "size": 6572 + }, + "pyro/distributions/hmm.py": { + "size": 54251 + }, + "pyro/distributions/improper_uniform.py": { + "size": 2448 + }, + "pyro/distributions/inverse_gamma.py": { + "size": 1489 + }, + "pyro/distributions/kl.py": { + "size": 1661 + }, + "pyro/distributions/lkj.py": { + "size": 2534 + }, + "pyro/distributions/log_normal_negative_binomial.py": { + "size": 5720 + }, + "pyro/distributions/logistic.py": { + "size": 5473 + }, + "pyro/distributions/mixture.py": { + "size": 6150 + }, + "pyro/distributions/multivariate_studentt.py": { + "size": 5193 + }, + "pyro/distributions/nanmasked.py": { + "size": 3381 + }, + "pyro/distributions/omt_mvn.py": { + "size": 3176 + }, + "pyro/distributions/one_one_matching.py": { + "size": 6714 + }, + "pyro/distributions/one_two_matching.py": { + "size": 8193 + }, + "pyro/distributions/ordered_logistic.py": { + "size": 2874 + }, + "pyro/distributions/polya_gamma.py": { + "size": 3090 + }, + "pyro/distributions/projected_normal.py": { + "size": 7441 + }, + "pyro/distributions/rejector.py": { + "size": 2933 + }, + "pyro/distributions/relaxed_straight_through.py": { + "size": 3637 + }, + "pyro/distributions/score_parts.py": { + "size": 1282 + }, + "pyro/distributions/sine_bivariate_von_mises.py": { + "size": 11562 + }, + "pyro/distributions/sine_skewed.py": { + "size": 7372 + }, + "pyro/distributions/softlaplace.py": { + "size": 2471 + }, + "pyro/distributions/spanning_tree.py": { + "size": 22257 + }, + "pyro/distributions/stable.py": { + "size": 9997 + }, + "pyro/distributions/stable_log_prob.py": { + "size": 6573 + }, + "pyro/distributions/testing/__init__.py": { + "size": 215 + }, + "pyro/distributions/testing/fakes.py": { + "size": 421 + }, + "pyro/distributions/testing/gof.py": { + "size": 10761 + }, + "pyro/distributions/testing/naive_dirichlet.py": { + "size": 1598 + }, + "pyro/distributions/testing/rejection_exponential.py": { + "size": 1167 + }, + "pyro/distributions/testing/rejection_gamma.py": { + "size": 8842 + }, + "pyro/distributions/testing/special.py": { + "size": 3610 + }, + "pyro/distributions/torch.py": { + "size": 15147 + }, + "pyro/distributions/torch_distribution.py": { + "size": 20865 + }, + "pyro/distributions/torch_patch.py": { + "size": 3044 + }, + "pyro/distributions/torch_transform.py": { + "size": 1452 + }, + "pyro/distributions/transforms/__init__.py": { + "size": 8118 + }, + "pyro/distributions/transforms/affine_autoregressive.py": { + "size": 16342 + }, + "pyro/distributions/transforms/affine_coupling.py": { + "size": 15805 + }, + "pyro/distributions/transforms/basic.py": { + "size": 2073 + }, + "pyro/distributions/transforms/batchnorm.py": { + "size": 6147 + }, + "pyro/distributions/transforms/block_autoregressive.py": { + "size": 11703 + }, + "pyro/distributions/transforms/cholesky.py": { + "size": 2117 + }, + "pyro/distributions/transforms/discrete_cosine.py": { + "size": 3383 + }, + "pyro/distributions/transforms/generalized_channel_permute.py": { + "size": 11680 + }, + "pyro/distributions/transforms/haar.py": { + "size": 2883 + }, + "pyro/distributions/transforms/householder.py": { + "size": 10536 + }, + "pyro/distributions/transforms/lower_cholesky_affine.py": { + "size": 2479 + }, + "pyro/distributions/transforms/matrix_exponential.py": { + "size": 13725 + }, + "pyro/distributions/transforms/neural_autoregressive.py": { + "size": 9794 + }, + "pyro/distributions/transforms/normalize.py": { + "size": 1072 + }, + "pyro/distributions/transforms/ordered.py": { + "size": 921 + }, + "pyro/distributions/transforms/permute.py": { + "size": 5300 + }, + "pyro/distributions/transforms/planar.py": { + "size": 8881 + }, + "pyro/distributions/transforms/polynomial.py": { + "size": 7076 + }, + "pyro/distributions/transforms/power.py": { + "size": 2139 + }, + "pyro/distributions/transforms/radial.py": { + "size": 8711 + }, + "pyro/distributions/transforms/simplex_to_ordered.py": { + "size": 2527 + }, + "pyro/distributions/transforms/softplus.py": { + "size": 1665 + }, + "pyro/distributions/transforms/spline.py": { + "size": 24458 + }, + "pyro/distributions/transforms/spline_autoregressive.py": { + "size": 11370 + }, + "pyro/distributions/transforms/spline_coupling.py": { + "size": 6917 + }, + "pyro/distributions/transforms/sylvester.py": { + "size": 6318 + }, + "pyro/distributions/transforms/unit_cholesky.py": { + "size": 809 + }, + "pyro/distributions/transforms/utils.py": { + "size": 282 + }, + "pyro/distributions/unit.py": { + "size": 1886 + }, + "pyro/distributions/util.py": { + "size": 11913 + }, + "pyro/distributions/von_mises_3d.py": { + "size": 2694 + }, + "pyro/distributions/zero_inflated.py": { + "size": 6893 + }, + "pyro/generic.py": { + "size": 266 + }, + "pyro/infer/__init__.py": { + "size": 2195 + }, + "pyro/infer/abstract_infer.py": { + "size": 15986 + }, + "pyro/infer/autoguide/__init__.py": { + "size": 1618 + }, + "pyro/infer/autoguide/effect.py": { + "size": 19652 + }, + "pyro/infer/autoguide/gaussian.py": { + "size": 26015 + }, + "pyro/infer/autoguide/guides.py": { + "size": 49204 + }, + "pyro/infer/autoguide/initialization.py": { + "size": 8270 + }, + "pyro/infer/autoguide/structured.py": { + "size": 16327 + }, + "pyro/infer/autoguide/utils.py": { + "size": 3089 + }, + "pyro/infer/csis.py": { + "size": 7251 + }, + "pyro/infer/discrete.py": { + "size": 11547 + }, + "pyro/infer/elbo.py": { + "size": 9535 + }, + "pyro/infer/energy_distance.py": { + "size": 10044 + }, + "pyro/infer/enum.py": { + "size": 8063 + }, + "pyro/infer/importance.py": { + "size": 9786 + }, + "pyro/infer/inspect.py": { + "size": 23989 + }, + "pyro/infer/mcmc/__init__.py": { + "size": 490 + }, + "pyro/infer/mcmc/adaptation.py": { + "size": 23000 + }, + "pyro/infer/mcmc/api.py": { + "size": 29278 + }, + "pyro/infer/mcmc/hmc.py": { + "size": 18825 + }, + "pyro/infer/mcmc/logger.py": { + "size": 9270 + }, + "pyro/infer/mcmc/mcmc_kernel.py": { + "size": 2347 + }, + "pyro/infer/mcmc/nuts.py": { + "size": 21893 + }, + "pyro/infer/mcmc/rwkernel.py": { + "size": 4827 + }, + "pyro/infer/mcmc/util.py": { + "size": 33005 + }, + "pyro/infer/predictive.py": { + "size": 25794 + }, + "pyro/infer/renyi_elbo.py": { + "size": 9418 + }, + "pyro/infer/reparam/__init__.py": { + "size": 1239 + }, + "pyro/infer/reparam/conjugate.py": { + "size": 4315 + }, + "pyro/infer/reparam/discrete_cosine.py": { + "size": 2076 + }, + "pyro/infer/reparam/haar.py": { + "size": 1594 + }, + "pyro/infer/reparam/hmm.py": { + "size": 6406 + }, + "pyro/infer/reparam/loc_scale.py": { + "size": 3812 + }, + "pyro/infer/reparam/neutra.py": { + "size": 5549 + }, + "pyro/infer/reparam/projected_normal.py": { + "size": 1697 + }, + "pyro/infer/reparam/reparam.py": { + "size": 2505 + }, + "pyro/infer/reparam/softmax.py": { + "size": 1869 + }, + "pyro/infer/reparam/split.py": { + "size": 2642 + }, + "pyro/infer/reparam/stable.py": { + "size": 10548 + }, + "pyro/infer/reparam/strategies.py": { + "size": 7528 + }, + "pyro/infer/reparam/structured.py": { + "size": 4312 + }, + "pyro/infer/reparam/studentt.py": { + "size": 1477 + }, + "pyro/infer/reparam/transform.py": { + "size": 1789 + }, + "pyro/infer/reparam/unit_jacobian.py": { + "size": 3913 + }, + "pyro/infer/resampler.py": { + "size": 5720 + }, + "pyro/infer/rws.py": { + "size": 11139 + }, + "pyro/infer/smcfilter.py": { + "size": 8713 + }, + "pyro/infer/svgd.py": { + "size": 12959 + }, + "pyro/infer/svi.py": { + "size": 5947 + }, + "pyro/infer/trace_elbo.py": { + "size": 10334 + }, + "pyro/infer/trace_mean_field_elbo.py": { + "size": 8302 + }, + "pyro/infer/trace_mmd.py": { + "size": 10876 + }, + "pyro/infer/trace_tail_adaptive_elbo.py": { + "size": 3367 + }, + "pyro/infer/traceenum_elbo.py": { + "size": 23531 + }, + "pyro/infer/tracegraph_elbo.py": { + "size": 16978 + }, + "pyro/infer/tracetmc_elbo.py": { + "size": 8714 + }, + "pyro/infer/util.py": { + "size": 13697 + }, + "pyro/logger.py": { + "size": 463 + }, + "pyro/nn/__init__.py": { + "size": 665 + }, + "pyro/nn/auto_reg_nn.py": { + "size": 14482 + }, + "pyro/nn/dense_nn.py": { + "size": 5553 + }, + "pyro/nn/module.py": { + "size": 40033 + }, + "pyro/ops/__init__.py": { + "size": 0 + }, + "pyro/ops/arrowhead.py": { + "size": 4306 + }, + "pyro/ops/contract.py": { + "size": 22550 + }, + "pyro/ops/dual_averaging.py": { + "size": 3402 + }, + "pyro/ops/einsum/__init__.py": { + "size": 1486 + }, + "pyro/ops/einsum/adjoint.py": { + "size": 4971 + }, + "pyro/ops/einsum/torch_log.py": { + "size": 2010 + }, + "pyro/ops/einsum/torch_map.py": { + "size": 1952 + }, + "pyro/ops/einsum/torch_marginal.py": { + "size": 2234 + }, + "pyro/ops/einsum/torch_sample.py": { + "size": 2736 + }, + "pyro/ops/einsum/util.py": { + "size": 1901 + }, + "pyro/ops/gamma_gaussian.py": { + "size": 17941 + }, + "pyro/ops/gaussian.py": { + "size": 28119 + }, + "pyro/ops/hessian.py": { + "size": 673 + }, + "pyro/ops/indexing.py": { + "size": 7458 + }, + "pyro/ops/integrator.py": { + "size": 5119 + }, + "pyro/ops/jit.py": { + "size": 5970 + }, + "pyro/ops/linalg.py": { + "size": 3577 + }, + "pyro/ops/newton.py": { + "size": 9520 + }, + "pyro/ops/packed.py": { + "size": 6350 + }, + "pyro/ops/provenance.py": { + "size": 5764 + }, + "pyro/ops/rings.py": { + "size": 11388 + }, + "pyro/ops/special.py": { + "size": 7046 + }, + "pyro/ops/ssm_gp.py": { + "size": 6648 + }, + "pyro/ops/stats.py": { + "size": 22039 + }, + "pyro/ops/streaming.py": { + "size": 8903 + }, + "pyro/ops/tensor_utils.py": { + "size": 15783 + }, + "pyro/ops/welford.py": { + "size": 3405 + }, + "pyro/optim/__init__.py": { + "size": 594 + }, + "pyro/optim/adagrad_rmsprop.py": { + "size": 3060 + }, + "pyro/optim/clipped_adam.py": { + "size": 3462 + }, + "pyro/optim/dct_adam.py": { + "size": 7634 + }, + "pyro/optim/horovod.py": { + "size": 1906 + }, + "pyro/optim/lr_scheduler.py": { + "size": 2351 + }, + "pyro/optim/multi.py": { + "size": 6391 + }, + "pyro/optim/optim.py": { + "size": 10610 + }, + "pyro/optim/pytorch_optimizers.py": { + "size": 1805 + }, + "pyro/params/__init__.py": { + "size": 317 + }, + "pyro/params/param_store.py": { + "size": 14507 + }, + "pyro/poutine/__init__.py": { + "size": 922 + }, + "pyro/poutine/block_messenger.py": { + "size": 5614 + }, + "pyro/poutine/broadcast_messenger.py": { + "size": 3722 + }, + "pyro/poutine/collapse_messenger.py": { + "size": 6395 + }, + "pyro/poutine/condition_messenger.py": { + "size": 2367 + }, + "pyro/poutine/do_messenger.py": { + "size": 3476 + }, + "pyro/poutine/enum_messenger.py": { + "size": 10711 + }, + "pyro/poutine/escape_messenger.py": { + "size": 1339 + }, + "pyro/poutine/guide.py": { + "size": 6163 + }, + "pyro/poutine/handlers.py": { + "size": 17835 + }, + "pyro/poutine/indep_messenger.py": { + "size": 4435 + }, + "pyro/poutine/infer_config_messenger.py": { + "size": 1997 + }, + "pyro/poutine/lift_messenger.py": { + "size": 5224 + }, + "pyro/poutine/markov_messenger.py": { + "size": 3658 + }, + "pyro/poutine/mask_messenger.py": { + "size": 1394 + }, + "pyro/poutine/messenger.py": { + "size": 9474 + }, + "pyro/poutine/plate_messenger.py": { + "size": 3167 + }, + "pyro/poutine/reentrant_messenger.py": { + "size": 1031 + }, + "pyro/poutine/reparam_messenger.py": { + "size": 6175 + }, + "pyro/poutine/replay_messenger.py": { + "size": 3310 + }, + "pyro/poutine/runtime.py": { + "size": 16650 + }, + "pyro/poutine/scale_messenger.py": { + "size": 1975 + }, + "pyro/poutine/seed_messenger.py": { + "size": 1308 + }, + "pyro/poutine/subsample_messenger.py": { + "size": 8509 + }, + "pyro/poutine/substitute_messenger.py": { + "size": 3295 + }, + "pyro/poutine/trace_messenger.py": { + "size": 7701 + }, + "pyro/poutine/trace_struct.py": { + "size": 22785 + }, + "pyro/poutine/uncondition_messenger.py": { + "size": 982 + }, + "pyro/poutine/util.py": { + "size": 4790 + }, + "pyro/primitives.py": { + "size": 24368 + }, + "pyro/settings.py": { + "size": 5019 + }, + "pyro/util.py": { + "size": 22051 + }, + "scripts/update_headers.py": { + "size": 2276 + }, + "scripts/update_version.py": { + "size": 1188 + }, + "setup.cfg": { + "size": 2382 + }, + "setup.py": { + "size": 4938 + }, + "tests/README.md": { + "size": 1962 + }, + "tests/__init__.py": { + "size": 282 + }, + "tests/common.py": { + "size": 9455 + }, + "tests/conftest.py": { + "size": 3380 + }, + "tests/contrib/__init__.py": { + "size": 0 + }, + "tests/contrib/autoname/test_autoname.py": { + "size": 9663 + }, + "tests/contrib/autoname/test_named.py": { + "size": 3676 + }, + "tests/contrib/autoname/test_scoping.py": { + "size": 4628 + }, + "tests/contrib/bnn/test_hidden_layer.py": { + "size": 2100 + }, + "tests/contrib/cevae/test_cevae.py": { + "size": 2368 + }, + "tests/contrib/conftest.py": { + "size": 449 + }, + "tests/contrib/easyguide/test_easyguide.py": { + "size": 8598 + }, + "tests/contrib/epidemiology/__init__.py": { + "size": 0 + }, + "tests/contrib/epidemiology/test_distributions.py": { + "size": 9012 + }, + "tests/contrib/epidemiology/test_models.py": { + "size": 22313 + }, + "tests/contrib/epidemiology/test_quant.py": { + "size": 925 + }, + "tests/contrib/epidemiology/test_util.py": { + "size": 1492 + }, + "tests/contrib/forecast/__init__.py": { + "size": 0 + }, + "tests/contrib/forecast/test_evaluate.py": { + "size": 4477 + }, + "tests/contrib/forecast/test_forecaster.py": { + "size": 11591 + }, + "tests/contrib/forecast/test_util.py": { + "size": 5539 + }, + "tests/contrib/funsor/conftest.py": { + "size": 602 + }, + "tests/contrib/funsor/test_enum_funsor.py": { + "size": 71964 + }, + "tests/contrib/funsor/test_infer_discrete.py": { + "size": 16722 + }, + "tests/contrib/funsor/test_named_handlers.py": { + "size": 5329 + }, + "tests/contrib/funsor/test_pyroapi_funsor.py": { + "size": 488 + }, + "tests/contrib/funsor/test_tmc.py": { + "size": 7191 + }, + "tests/contrib/funsor/test_valid_models_enum.py": { + "size": 17970 + }, + "tests/contrib/funsor/test_valid_models_plate.py": { + "size": 7546 + }, + "tests/contrib/funsor/test_valid_models_sequential_plate.py": { + "size": 4418 + }, + "tests/contrib/funsor/test_vectorized_markov.py": { + "size": 30783 + }, + "tests/contrib/gp/__init__.py": { + "size": 0 + }, + "tests/contrib/gp/test_conditional.py": { + "size": 2750 + }, + "tests/contrib/gp/test_kernels.py": { + "size": 4744 + }, + "tests/contrib/gp/test_likelihoods.py": { + "size": 4731 + }, + "tests/contrib/gp/test_models.py": { + "size": 15042 + }, + "tests/contrib/gp/test_parameterized.py": { + "size": 4723 + }, + "tests/contrib/mue/test_dataloaders.py": { + "size": 3607 + }, + "tests/contrib/mue/test_missingdatahmm.py": { + "size": 18642 + }, + "tests/contrib/mue/test_models.py": { + "size": 3213 + }, + "tests/contrib/mue/test_statearrangers.py": { + "size": 10625 + }, + "tests/contrib/oed/test_ewma.py": { + "size": 1464 + }, + "tests/contrib/oed/test_finite_spaces_eig.py": { + "size": 7851 + }, + "tests/contrib/oed/test_glmm.py": { + "size": 5729 + }, + "tests/contrib/oed/test_linear_models_eig.py": { + "size": 9466 + }, + "tests/contrib/oed/test_xexpx.py": { + "size": 470 + }, + "tests/contrib/randomvariable/test_random_variable.py": { + "size": 1893 + }, + "tests/contrib/test_hessian.py": { + "size": 853 + }, + "tests/contrib/test_minipyro.py": { + "size": 8701 + }, + "tests/contrib/test_util.py": { + "size": 3036 + }, + "tests/contrib/test_zuko.py": { + "size": 1671 + }, + "tests/contrib/timeseries/test_gp.py": { + "size": 5986 + }, + "tests/contrib/timeseries/test_lgssm.py": { + "size": 3905 + }, + "tests/contrib/tracking/__init__.py": { + "size": 0 + }, + "tests/contrib/tracking/test_assignment.py": { + "size": 14126 + }, + "tests/contrib/tracking/test_distributions.py": { + "size": 890 + }, + "tests/contrib/tracking/test_dynamic_models.py": { + "size": 5020 + }, + "tests/contrib/tracking/test_ekf.py": { + "size": 2792 + }, + "tests/contrib/tracking/test_em.py": { + "size": 8636 + }, + "tests/contrib/tracking/test_hashing.py": { + "size": 4601 + }, + "tests/contrib/tracking/test_measurements.py": { + "size": 934 + }, + "tests/distributions/__init__.py": { + "size": 0 + }, + "tests/distributions/conftest.py": { + "size": 35808 + }, + "tests/distributions/dist_fixture.py": { + "size": 6500 + }, + "tests/distributions/test_binomial.py": { + "size": 2014 + }, + "tests/distributions/test_categorical.py": { + "size": 3591 + }, + "tests/distributions/test_coalescent.py": { + "size": 11355 + }, + "tests/distributions/test_conjugate.py": { + "size": 4358 + }, + "tests/distributions/test_conjugate_update.py": { + "size": 2061 + }, + "tests/distributions/test_constraints.py": { + "size": 1082 + }, + "tests/distributions/test_cuda.py": { + "size": 3189 + }, + "tests/distributions/test_delta.py": { + "size": 2862 + }, + "tests/distributions/test_distributions.py": { + "size": 16165 + }, + "tests/distributions/test_empirical.py": { + "size": 7002 + }, + "tests/distributions/test_extended.py": { + "size": 3462 + }, + "tests/distributions/test_gaussian_mixtures.py": { + "size": 8768 + }, + "tests/distributions/test_grouped_normal_normal.py": { + "size": 1565 + }, + "tests/distributions/test_haar.py": { + "size": 399 + }, + "tests/distributions/test_hmm.py": { + "size": 36873 + }, + "tests/distributions/test_ig.py": { + "size": 1192 + }, + "tests/distributions/test_improper_uniform.py": { + "size": 966 + }, + "tests/distributions/test_independent.py": { + "size": 5135 + }, + "tests/distributions/test_kl.py": { + "size": 3702 + }, + "tests/distributions/test_lkj.py": { + "size": 4821 + }, + "tests/distributions/test_log_normal_negative_binomial.py": { + "size": 1588 + }, + "tests/distributions/test_lowrank_mvn.py": { + "size": 1451 + }, + "tests/distributions/test_mask.py": { + "size": 5258 + }, + "tests/distributions/test_mixture.py": { + "size": 5242 + }, + "tests/distributions/test_mvn.py": { + "size": 1425 + }, + "tests/distributions/test_mvt.py": { + "size": 5652 + }, + "tests/distributions/test_nanmasked.py": { + "size": 3318 + }, + "tests/distributions/test_omt_mvn.py": { + "size": 4649 + }, + "tests/distributions/test_one_hot_categorical.py": { + "size": 3921 + }, + "tests/distributions/test_one_one_matching.py": { + "size": 5643 + }, + "tests/distributions/test_one_two_matching.py": { + "size": 9925 + }, + "tests/distributions/test_ordered_logistic.py": { + "size": 4745 + }, + "tests/distributions/test_pickle.py": { + "size": 3011 + }, + "tests/distributions/test_polya_gamma.py": { + "size": 904 + }, + "tests/distributions/test_projected_normal.py": { + "size": 826 + }, + "tests/distributions/test_rejector.py": { + "size": 6748 + }, + "tests/distributions/test_relaxed_straight_through.py": { + "size": 3847 + }, + "tests/distributions/test_reshape.py": { + "size": 5906 + }, + "tests/distributions/test_shapes.py": { + "size": 2509 + }, + "tests/distributions/test_sine_bivariate_von_mises.py": { + "size": 4343 + }, + "tests/distributions/test_sine_skewed.py": { + "size": 2967 + }, + "tests/distributions/test_spanning_tree.py": { + "size": 7701 + }, + "tests/distributions/test_stable.py": { + "size": 5262 + }, + "tests/distributions/test_stable_log_prob.py": { + "size": 5282 + }, + "tests/distributions/test_tensor_type.py": { + "size": 2032 + }, + "tests/distributions/test_torch_patch.py": { + "size": 1025 + }, + "tests/distributions/test_transforms.py": { + "size": 22417 + }, + "tests/distributions/test_unit.py": { + "size": 966 + }, + "tests/distributions/test_util.py": { + "size": 13215 + }, + "tests/distributions/test_von_mises.py": { + "size": 5467 + }, + "tests/distributions/test_zero_inflated.py": { + "size": 4929 + }, + "tests/distributions/testing/test_gof.py": { + "size": 612 + }, + "tests/distributions/testing/test_special.py": { + "size": 431 + }, + "tests/doctest_fixtures.py": { + "size": 1075 + }, + "tests/infer/__init__.py": { + "size": 0 + }, + "tests/infer/autoguide/__init__.py": { + "size": 0 + }, + "tests/infer/autoguide/conftest.py": { + "size": 442 + }, + "tests/infer/autoguide/test_gaussian.py": { + "size": 29698 + }, + "tests/infer/autoguide/test_inference.py": { + "size": 8100 + }, + "tests/infer/autoguide/test_mean_field_entropy.py": { + "size": 1064 + }, + "tests/infer/conftest.py": { + "size": 432 + }, + "tests/infer/mcmc/__init__.py": { + "size": 0 + }, + "tests/infer/mcmc/test_adaptation.py": { + "size": 2472 + }, + "tests/infer/mcmc/test_hmc.py": { + "size": 11825 + }, + "tests/infer/mcmc/test_mcmc_api.py": { + "size": 12719 + }, + "tests/infer/mcmc/test_mcmc_util.py": { + "size": 4106 + }, + "tests/infer/mcmc/test_nuts.py": { + "size": 20404 + }, + "tests/infer/mcmc/test_rwkernel.py": { + "size": 1308 + }, + "tests/infer/mcmc/test_valid_models.py": { + "size": 17096 + }, + "tests/infer/reparam/__init__.py": { + "size": 0 + }, + "tests/infer/reparam/test_conjugate.py": { + "size": 9154 + }, + "tests/infer/reparam/test_discrete_cosine.py": { + "size": 4030 + }, + "tests/infer/reparam/test_haar.py": { + "size": 6392 + }, + "tests/infer/reparam/test_hmm.py": { + "size": 12130 + }, + "tests/infer/reparam/test_loc_scale.py": { + "size": 4077 + }, + "tests/infer/reparam/test_neutra.py": { + "size": 3101 + }, + "tests/infer/reparam/test_projected_normal.py": { + "size": 2118 + }, + "tests/infer/reparam/test_softmax.py": { + "size": 2305 + }, + "tests/infer/reparam/test_split.py": { + "size": 3082 + }, + "tests/infer/reparam/test_stable.py": { + "size": 6419 + }, + "tests/infer/reparam/test_strategies.py": { + "size": 10119 + }, + "tests/infer/reparam/test_structured.py": { + "size": 2029 + }, + "tests/infer/reparam/test_studentt.py": { + "size": 3021 + }, + "tests/infer/reparam/test_transform.py": { + "size": 2709 + }, + "tests/infer/reparam/test_unit_jacobian.py": { + "size": 2597 + }, + "tests/infer/reparam/util.py": { + "size": 1193 + }, + "tests/infer/test_abstract_infer.py": { + "size": 2732 + }, + "tests/infer/test_autoguide.py": { + "size": 51678 + }, + "tests/infer/test_compute_downstream_costs.py": { + "size": 29962 + }, + "tests/infer/test_conjugate_gradients.py": { + "size": 1616 + }, + "tests/infer/test_csis.py": { + "size": 2468 + }, + "tests/infer/test_discrete.py": { + "size": 14353 + }, + "tests/infer/test_elbo_mapdata.py": { + "size": 4196 + }, + "tests/infer/test_enum.py": { + "size": 145511 + }, + "tests/infer/test_gradient.py": { + "size": 15384 + }, + "tests/infer/test_inference.py": { + "size": 36696 + }, + "tests/infer/test_initialization.py": { + "size": 1066 + }, + "tests/infer/test_inspect.py": { + "size": 16351 + }, + "tests/infer/test_jit.py": { + "size": 19363 + }, + "tests/infer/test_multi_sample_elbos.py": { + "size": 1638 + }, + "tests/infer/test_predictive.py": { + "size": 12494 + }, + "tests/infer/test_resampler.py": { + "size": 1321 + }, + "tests/infer/test_sampling.py": { + "size": 3094 + }, + "tests/infer/test_smcfilter.py": { + "size": 8196 + }, + "tests/infer/test_svgd.py": { + "size": 5251 + }, + "tests/infer/test_tmc.py": { + "size": 10256 + }, + "tests/infer/test_util.py": { + "size": 2397 + }, + "tests/infer/test_valid_models.py": { + "size": 93251 + }, + "tests/integration_tests/__init__.py": { + "size": 0 + }, + "tests/integration_tests/conftest.py": { + "size": 451 + }, + "tests/integration_tests/test_conjugate_gaussian_models.py": { + "size": 25477 + }, + "tests/integration_tests/test_tracegraph_elbo.py": { + "size": 25003 + }, + "tests/nn/__init__.py": { + "size": 0 + }, + "tests/nn/conftest.py": { + "size": 429 + }, + "tests/nn/test_autoregressive.py": { + "size": 5466 + }, + "tests/nn/test_module.py": { + "size": 35007 + }, + "tests/ops/__init__.py": { + "size": 0 + }, + "tests/ops/conftest.py": { + "size": 430 + }, + "tests/ops/einsum/conftest.py": { + "size": 437 + }, + "tests/ops/einsum/test_adjoint.py": { + "size": 4418 + }, + "tests/ops/einsum/test_torch_log.py": { + "size": 1562 + }, + "tests/ops/gamma_gaussian.py": { + "size": 1763 + }, + "tests/ops/gaussian.py": { + "size": 1675 + }, + "tests/ops/test_arrowhead.py": { + "size": 1733 + }, + "tests/ops/test_contract.py": { + "size": 26142 + }, + "tests/ops/test_gamma_gaussian.py": { + "size": 12357 + }, + "tests/ops/test_gaussian.py": { + "size": 23038 + }, + "tests/ops/test_indexing.py": { + "size": 6117 + }, + "tests/ops/test_integrator.py": { + "size": 4558 + }, + "tests/ops/test_jit.py": { + "size": 1077 + }, + "tests/ops/test_linalg.py": { + "size": 2352 + }, + "tests/ops/test_newton.py": { + "size": 5028 + }, + "tests/ops/test_packed.py": { + "size": 2259 + }, + "tests/ops/test_provenance.py": { + "size": 1855 + }, + "tests/ops/test_special.py": { + "size": 2760 + }, + "tests/ops/test_ssm_gp.py": { + "size": 1153 + }, + "tests/ops/test_stats.py": { + "size": 10996 + }, + "tests/ops/test_streaming.py": { + "size": 3172 + }, + "tests/ops/test_tensor_utils.py": { + "size": 6592 + }, + "tests/ops/test_welford.py": { + "size": 3133 + }, + "tests/optim/__init__.py": { + "size": 0 + }, + "tests/optim/conftest.py": { + "size": 432 + }, + "tests/optim/test_multi.py": { + "size": 2637 + }, + "tests/optim/test_optim.py": { + "size": 14654 + }, + "tests/params/__init__.py": { + "size": 0 + }, + "tests/params/conftest.py": { + "size": 433 + }, + "tests/params/test_module.py": { + "size": 2567 + }, + "tests/params/test_param.py": { + "size": 8707 + }, + "tests/perf/__init__.py": { + "size": 0 + }, + "tests/perf/conftest.py": { + "size": 430 + }, + "tests/perf/test_benchmark.py": { + "size": 6793 + }, + "tests/poutine/__init__.py": { + "size": 0 + }, + "tests/poutine/conftest.py": { + "size": 434 + }, + "tests/poutine/test_counterfactual.py": { + "size": 3829 + }, + "tests/poutine/test_mapdata.py": { + "size": 5407 + }, + "tests/poutine/test_nesting.py": { + "size": 1068 + }, + "tests/poutine/test_poutines.py": { + "size": 36326 + }, + "tests/poutine/test_properties.py": { + "size": 3965 + }, + "tests/poutine/test_runtime.py": { + "size": 1113 + }, + "tests/poutine/test_trace_struct.py": { + "size": 1742 + }, + "tests/pyroapi/conftest.py": { + "size": 234 + }, + "tests/pyroapi/test_pyroapi.py": { + "size": 338 + }, + "tests/test_examples.py": { + "size": 22086 + }, + "tests/test_generic.py": { + "size": 3354 + }, + "tests/test_primitives.py": { + "size": 1459 + }, + "tests/test_settings.py": { + "size": 1420 + }, + "tests/test_util.py": { + "size": 3150 + }, + "tutorial/README.md": { + "size": 51 + }, + "tutorial/source/cleannb.py": { + "size": 1002 + }, + "tutorial/source/conf.py": { + "size": 5615 + }, + "tutorial/source/search_inference.py": { + "size": 7589 + } + }, + "processed_by": "zip_fallback", + "success": true + }, + "structure": { + "packages": [ + "source.examples", + "source.examples.contrib", + "source.examples.cvae", + "source.examples.mixed_hmm", + "source.examples.scanvi", + "source.profiler", + "source.pyro", + "source.pyro.contrib", + "source.pyro.distributions", + "source.pyro.infer", + "source.pyro.nn", + "source.pyro.ops", + "source.pyro.optim", + "source.pyro.params", + "source.pyro.poutine", + "source.tests", + "source.tests.contrib", + "source.tests.distributions", + "source.tests.infer", + "source.tests.integration_tests", + "source.tests.nn", + "source.tests.ops", + "source.tests.optim", + "source.tests.params", + "source.tests.perf", + "source.tests.poutine" + ] + }, + "dependencies": { + "has_environment_yml": false, + "has_requirements_txt": false, + "pyproject": true, + "setup_cfg": true, + "setup_py": true + }, + "entry_points": { + "imports": [], + "cli": [], + "modules": [] + }, + "llm_analysis": { + "core_modules": [ + { + "package": "source.pyro", + "module": "pyro", + "functions": [ + "sample", + "param", + "plate", + "factor", + "deterministic" + ], + "classes": [], + "description": "Core primitives for probabilistic programming in Pyro." + }, + { + "package": "source.pyro.poutine", + "module": "poutine", + "functions": [ + "trace", + "replay", + "condition", + "block", + "scale", + "enum" + ], + "classes": [ + "Messenger" + ], + "description": "Effect handler system for intercepting and transforming probabilistic primitives." + }, + { + "package": "source.pyro.infer", + "module": "infer", + "functions": [ + "SVI", + "MCMC", + "Importance" + ], + "classes": [], + "description": "Inference algorithms including SVI and MCMC methods." + }, + { + "package": "source.pyro.distributions", + "module": "distributions", + "functions": [], + "classes": [ + "Delta", + "HiddenMarkovModel", + "Empirical" + ], + "description": "Extensions to PyTorch's distribution library with additional distributions and functionality." + } + ], + "cli_commands": [], + "import_strategy": { + "primary": "import", + "fallback": "blackbox", + "confidence": 0.9 + }, + "dependencies": { + "required": [ + "torch", + "numpy" + ], + "optional": [ + "matplotlib", + "scipy" + ] + }, + "risk_assessment": { + "import_feasibility": 0.9, + "intrusiveness_risk": "low", + "complexity": "medium" + } + }, + "deepwiki_analysis": { + "repo_url": "https://github.com/pyro-ppl/pyro", + "repo_name": "pyro", + "content": "pyro-ppl/pyro\nCore Primitives and Effect Handlers\nEffect Handlers\nTrace System\nDistributions\nDistribution Classes\nTransforms and Constraints\nSpecial Distributions\nDistribution Utilities\nInference Algorithms\nStochastic Variational Inference\nELBO Variants\nMCMC Methods\nImportance Sampling and Predictive\nModels and Guides\nThe Model/Guide Pattern\nParameter Management\nParameter Store\nExamples and Applications\nTutorial System\nBayesian Statistical Models\nDeep Generative Models\nSpecialized Applications\nDevelopment Infrastructure\nSetup and Installation\nTesting Framework\nSpecial Operations and Utilities\ndocs/requirements.txt\ndocs/source/conf.py\npyproject.toml\npyro/__init__.py\npyro/distributions/constraints.py\npyro/poutine/__init__.py\npyro/util.py\nThis page provides a high-level introduction to Pyro's architecture, design philosophy, and core components. It serves as an entry point for understanding how the system is structured and how its parts interact.\nFor detailed information about specific subsystems, see:\nCore primitives and effect handlers:Section 2\nDistribution system:Section 3\nInference algorithms:Section 4\nModel and guide patterns:Section 5\nParameter management:Section 6\nWhat is Pyro?\nPyro is a universal probabilistic programming language (PPL) built on PyTorch. It enables users to write generative models as Python programs and perform inference over them using a variety of algorithms including variational inference (SVI) and Markov chain Monte Carlo (MCMC).\nPackage Identity:\nName:pyro-pplsetup.py86\nDescription:\"A Python library for probabilistic modeling and inference\"setup.py88\nVersion:1.9.1+pyro/__init__.py31\nPython Requirements:>=3.8setup.py147\nCore Dependencies:\nSources:setup.py102-111pyro/__init__.py1-67\nDesign Philosophy\nPyro is built on four core principles that guide its architecture:\nUniversalAny computable distributionScalableMinimal overhead vs hand-written codeMinimalSmall core, powerful abstractionsFlexibleAutomation + manual controlPyro Core System\nUniversalAny computable distribution\nScalableMinimal overhead vs hand-written code\nMinimalSmall core, powerful abstractions\nFlexibleAutomation + manual control\nPyro Core System\nPyro can represent any computable probability distribution through its flexible programming model. Models are ordinary Python functions that can include loops, recursion, and arbitrary control flow.\nPyro is designed to scale to large datasets with minimal overhead. It builds directly on PyTorch's tensor operations and automatic differentiation, avoiding unnecessary abstractions.\nThe core system is implemented with a small set of composable abstractions. The effect handler system (poutine) provides the foundation for model manipulation without requiring extensive framework code.\nPyro provides high-level automation (e.g., automatic variational guides) while allowing experts to customize inference at any level through effect handlers and custom implementations.\nSources:README.md24-29\nSystem Architecture Overview\nPyro's architecture consists of several layered subsystems:\nParameter LayerDistribution LayerInference LayerEffect Handler Layer (Poutine)Primitive LayerUser LayerUser Model CodePython functions withpyro.sample, pyro.paramPyroModuleNeural network integrationExamples & TutorialsVAE, GP, HMM, etc.Primitive Operationspyro.samplepyro.parampyro.platepyro.factorMessage Runtime_PYRO_STACKapply_stack()Effect Handlerstrace, replaycondition, blockscale, enumSVIStochastic Variational InferenceMCMCHMC, NUTSAutoGuideAutomatic guide generationELBO VariantsTrace_ELBOTraceEnum_ELBOPyTorch Distributionstorch.distributions.*Pyro DistributionsDelta, HMM, etc.Constraints & TransformsParamStoreDictGlobal parameter storagePyroOptimWrapped PyTorch optimizers\nParameter Layer\nDistribution Layer\nInference Layer\nEffect Handler Layer (Poutine)\nPrimitive Layer\nUser Model CodePython functions withpyro.sample, pyro.param\nPyroModuleNeural network integration\nExamples & TutorialsVAE, GP, HMM, etc.\nPrimitive Operationspyro.samplepyro.parampyro.platepyro.factor\nMessage Runtime_PYRO_STACKapply_stack()\nEffect Handlerstrace, replaycondition, blockscale, enum\nSVIStochastic Variational Inference\nMCMCHMC, NUTS\nAutoGuideAutomatic guide generation\nELBO VariantsTrace_ELBOTraceEnum_ELBO\nPyTorch Distributionstorch.distributions.*\nPyro DistributionsDelta, HMM, etc.\nConstraints & Transforms\nParamStoreDictGlobal parameter storage\nPyroOptimWrapped PyTorch optimizers\nSources:pyro/__init__.py1-67pyro/poutine/__init__.py1-59\nCore Components and Code Entities\nPrimitives Module\nThe top-level module exports the fundamental primitives that users interact with:\npyro.sample\npyro.primitives\npyro.primitives\npyro.primitives\npyro.factor\npyro.primitives\npyro.deterministic\npyro.primitives\nAdditional utilities:\npyro.enable_validation()- Enable shape and distribution validationpyro/__init__.py12\npyro.enable_validation()\npyro.clear_param_store()- Reset global parameter storagepyro/__init__.py10\npyro.clear_param_store()\npyro.get_param_store()- Access the global parameter storepyro/__init__.py14\npyro.get_param_store()\npyro.set_rng_seed()- Set random number generator seedpyro/util.py37-45\npyro.set_rng_seed()\nSources:pyro/__init__.py8-26pyro/__init__.py39-66\nPoutine (Effect Handler) System\nPoutine is the effect handler system that intercepts and transforms probabilistic primitives:\nTrace Data StructureCore RuntimeHandler ExportstraceRecords executionreplayReplays recorded samplesconditionFixes observationsblockHides sites from handlersscaleScales log probabilitiesenumEnumerates discrete variablesreparamApplies reparameterization_PYRO_STACKGlobal message stackapply_stack()Message dispatcherMessengerBase handler classTraceExecution recordingMessageSite information dict\nTrace Data Structure\nCore Runtime\nHandler Exports\ntraceRecords execution\nreplayReplays recorded samples\nconditionFixes observations\nblockHides sites from handlers\nscaleScales log probabilities\nenumEnumerates discrete variables\nreparamApplies reparameterization\n_PYRO_STACKGlobal message stack\napply_stack()Message dispatcher\nMessengerBase handler class\nTraceExecution recording\nMessageSite information dict\nKey handler exports frompyro.poutine:\npyro.poutine\ntrace- Records model execution into a Trace objectpyro/poutine/__init__.py23\nreplay- Re-executes model with fixed sample valuespyro/poutine/__init__.py19\ncondition- Conditions model on observed datapyro/poutine/__init__.py8\nblock- Blocks primitives from outer handlerspyro/poutine/__init__.py5\nscale- Scales log probabilities (for subsampling)pyro/poutine/__init__.py20\nenum- Enumerates discrete latent variablespyro/poutine/__init__.py10\nSources:pyro/poutine/__init__.py1-59\nProgramming Model: From Code to Execution\nThis diagram shows how user code flows through Pyro's execution model:\n\"ParamStoreDict\"\"Distribution\"\"Effect Handlers\"\"_PYRO_STACK\"\"pyro.sample()\"\"User Code\"\"ParamStoreDict\"\"Distribution\"\"Effect Handlers\"\"_PYRO_STACK\"\"pyro.sample()\"\"User Code\"Message contains:name, fn, value, args, kwargsEach handler transforms messagePost-process (top-to-bottom)alt[If pyro.param() called]pyro.sample(\"x\", dist)Create messageProcess message (bottom-to-top)_process_message()Sample from distributionSample value_postprocess_message()Return processed messagevalueReturn samplepyro.param(\"theta\")Get/create parameterParameter tensorReturn parameter\nSources:pyro/__init__.py8-26pyro/poutine/__init__.py27-28\nParameter Management Architecture\nPyro maintains a global parameter store that synchronizes with PyTorch module parameters:\nOptimizationGlobal StorageUser Interfacepyro.param('theta', init)Get/create parameterPyroModule.x = PyroParam(...)Module-level parameterParamStoreDict_params: Dict[str, Tensor]_constraints: Dict[str, Constraint]pyro.get_param_store()Access singletonpyro.clear_param_store()Reset all parametersPyroOptimWraps torch.optimSVI.step()Optimization step\nOptimization\nGlobal Storage\nUser Interface\npyro.param('theta', init)Get/create parameter\nPyroModule.x = PyroParam(...)Module-level parameter\nParamStoreDict_params: Dict[str, Tensor]_constraints: Dict[str, Constraint]\npyro.get_param_store()Access singleton\npyro.clear_param_store()Reset all parameters\nPyroOptimWraps torch.optim\nSVI.step()Optimization step\nKey operations:\npyro.param(name, init_value, constraint=constraints.real)- Declare/retrieve parameter\npyro.param(name, init_value, constraint=constraints.real)\npyro.get_param_store()- Get the global ParamStoreDict instancepyro/__init__.py14\npyro.get_param_store()\npyro.clear_param_store()- Clear all parameterspyro/__init__.py10\npyro.clear_param_store()\nSources:pyro/__init__.py10-18pyro/__init__.py54\nDistribution System\nPyro extends PyTorch's distribution library with additional distributions and functionality:\nPyro-SpecificStandard DistributionsPyro ExtensionsPyTorch Basetorch.distributions.Distributiontorch.distributions.constraintsTorchDistributionMixinPyro compatibility layerpyro.distributions.constraintsAdditional constraintsNormal, Beta, Gamma, etc.Wrapped PyTorch distributionsDeltaDegenerate distributionHiddenMarkovModelDiscreteHMM, GaussianHMMEmpiricalSample-based distribution\nPyro-Specific\nStandard Distributions\nPyro Extensions\nPyTorch Base\ntorch.distributions.Distribution\ntorch.distributions.constraints\nTorchDistributionMixinPyro compatibility layer\npyro.distributions.constraintsAdditional constraints\nNormal, Beta, Gamma, etc.Wrapped PyTorch distributions\nDeltaDegenerate distribution\nHiddenMarkovModelDiscreteHMM, GaussianHMM\nEmpiricalSample-based distribution\nConstraint extensionsinpyro.distributions.constraints:\npyro.distributions.constraints\ninteger- Integer valuespyro/distributions/constraints.py152\nsphere- Points on Euclidean spherepyro/distributions/constraints.py155\ncorr_matrix- Correlation matricespyro/distributions/constraints.py151\ncorr_matrix\nordered_vector- Monotonically increasing vectorspyro/distributions/constraints.py153\nordered_vector\nAll PyTorch constraints viafrom torch.distributions.constraints import *pyro/distributions/constraints.py5\nfrom torch.distributions.constraints import *\nSources:pyro/distributions/constraints.py1-235\nInference Ecosystem\nPyro provides multiple inference algorithms that operate on the same model-guide abstraction:\npyro.infer.SVI\npyro.infer.MCMC\npyro.infer.MCMC\npyro.infer.Importance\nELBO variants for SVI:\nTrace_ELBO- Basic Monte Carlo ELBO estimator\nTraceEnum_ELBO- Enumerates discrete latent variables\nTraceEnum_ELBO\nTraceGraph_ELBO- Variance reduction via Rao-Blackwellization\nTraceGraph_ELBO\nRenyiELBO- Rényi divergence objective (α-divergence)\nAutomatic guides:", + "model": "gpt-4o-2024-08-06", + "source": "selenium", + "success": true + }, + "deepwiki_options": { + "enabled": true, + "model": "gpt-4o-2024-08-06" + }, + "risk": { + "import_feasibility": 0.9, + "intrusiveness_risk": "low", + "complexity": "medium" + } +} \ No newline at end of file diff --git a/pyro/mcp_output/diff_report.md b/pyro/mcp_output/diff_report.md new file mode 100644 index 0000000000000000000000000000000000000000..c709b45c11016e6f9240bb7aedd710ad9c769866 --- /dev/null +++ b/pyro/mcp_output/diff_report.md @@ -0,0 +1,63 @@ +# Pyro Project Difference Report + +**Repository:** Pyro +**Project Type:** Python Library +**Main Features:** Basic Functionality +**Report Date:** February 7, 2026 +**Intrusiveness:** None +**New Files:** 8 +**Modified Files:** 0 +**Workflow Status:** Success +**Test Status:** Failed + +--- + +## Project Overview + +The Pyro project is a Python library designed to provide basic functionality for probabilistic programming. As of the latest update, the project has introduced new files but has not modified any existing ones. The workflow has been executed successfully, but the test suite has failed, indicating potential issues with the new additions. + +## Difference Analysis + +### New Files + +The project has added 8 new files. These files likely introduce new features or components to the library. However, without modifications to existing files, it suggests that the new additions are standalone and do not alter the current functionality of the library. + +### Modified Files + +There are no modified files in this update. This indicates that the existing codebase remains unchanged, and the focus has been on expanding the library's capabilities through new files. + +### Workflow and Test Status + +- **Workflow Status:** The workflow has been successfully executed, indicating that the integration of new files did not disrupt the build or deployment processes. +- **Test Status:** The test suite has failed, suggesting that the new files may contain errors or that they do not integrate well with the existing codebase. + +## Technical Analysis + +The introduction of new files without modifications to existing ones suggests an expansion of the library's capabilities. However, the failure in the test suite highlights potential issues: + +- **Integration Issues:** The new files may not be fully integrated with the existing codebase, leading to test failures. +- **Incomplete Features:** The new features might be incomplete or not fully tested, resulting in errors during testing. +- **Dependency Conflicts:** There could be conflicts with existing dependencies or assumptions within the codebase. + +## Recommendations and Improvements + +1. **Review New Files:** Conduct a thorough review of the new files to ensure they meet the project's coding standards and integrate seamlessly with the existing codebase. +2. **Enhance Testing:** Update the test suite to cover the new features and ensure comprehensive testing of all functionalities. +3. **Debugging:** Identify and resolve the specific issues causing test failures. This may involve debugging the new files or adjusting the test cases. +4. **Documentation:** Update the project documentation to include details about the new features and any changes in usage or dependencies. + +## Deployment Information + +Given the successful workflow status, the new files have been integrated into the project without deployment issues. However, due to the test failures, it is advisable to hold off on deploying these changes to production until the issues are resolved. + +## Future Planning + +- **Stabilization:** Focus on stabilizing the current release by addressing test failures and ensuring all new features are fully functional. +- **Feature Expansion:** Plan for future updates that expand on the new features, ensuring they are well-integrated and thoroughly tested. +- **Community Feedback:** Engage with the user community to gather feedback on the new features and identify areas for improvement. + +## Conclusion + +The Pyro project has expanded its capabilities with the addition of new files. However, the test failures indicate that further work is needed to ensure these new features are stable and reliable. By addressing the identified issues and enhancing the testing framework, the project can continue to grow and provide valuable functionality to its users. + +--- \ No newline at end of file diff --git a/pyro/mcp_output/mcp_plugin/__init__.py b/pyro/mcp_output/mcp_plugin/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/mcp_output/mcp_plugin/adapter.py b/pyro/mcp_output/mcp_plugin/adapter.py new file mode 100644 index 0000000000000000000000000000000000000000..364f308bf10564556dc5a42a913c1d3f7bbeece0 --- /dev/null +++ b/pyro/mcp_output/mcp_plugin/adapter.py @@ -0,0 +1,211 @@ +import os +import sys + +# Path settings +source_path = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), "source") +sys.path.insert(0, source_path) + +# Import statements +try: + from pyro.infer import SVI, MCMC, Importance + from pyro.infer.elbo import Trace_ELBO, TraceEnum_ELBO, TraceGraph_ELBO, RenyiELBO + from pyro.distributions import Delta, HiddenMarkovModel, Empirical + from pyro.poutine import trace, replay, condition, block, scale, enum + from pyro import sample, param, plate, factor, deterministic + from pyro.util import set_rng_seed, clear_param_store, get_param_store + import torch + import numpy as np +except ImportError as e: + print(f"Import failed: {e}. Ensure all dependencies are installed.") + # Fallback mode + class Adapter: + def __init__(self): + self.mode = "blackbox" + print("Running in fallback mode. Limited functionality available.") + + def status(self): + return {"status": "fallback", "message": "Limited functionality available due to import failure."} + +else: + # Adapter class definition + class Adapter: + """ + Adapter class to interface with the Pyro library, providing methods to utilize its core functionalities. + """ + + def __init__(self): + self.mode = "import" + + # -------------------- Inference Methods -------------------- + + def create_svi(self, model, guide, optim, loss=Trace_ELBO()): + """ + Create an instance of the SVI class. + + :param model: The model function. + :param guide: The guide function. + :param optim: The optimizer. + :param loss: The loss function, default is Trace_ELBO. + :return: Dictionary with status and SVI instance or error message. + """ + try: + svi_instance = SVI(model, guide, optim, loss) + return {"status": "success", "svi_instance": svi_instance} + except Exception as e: + return {"status": "error", "message": str(e)} + + def create_mcmc(self, kernel, num_samples, warmup_steps): + """ + Create an instance of the MCMC class. + + :param kernel: The MCMC kernel. + :param num_samples: Number of samples to draw. + :param warmup_steps: Number of warmup steps. + :return: Dictionary with status and MCMC instance or error message. + """ + try: + mcmc_instance = MCMC(kernel, num_samples, warmup_steps) + return {"status": "success", "mcmc_instance": mcmc_instance} + except Exception as e: + return {"status": "error", "message": str(e)} + + def create_importance(self, model, guide, num_samples): + """ + Create an instance of the Importance class. + + :param model: The model function. + :param guide: The guide function. + :param num_samples: Number of samples for importance sampling. + :return: Dictionary with status and Importance instance or error message. + """ + try: + importance_instance = Importance(model, guide, num_samples) + return {"status": "success", "importance_instance": importance_instance} + except Exception as e: + return {"status": "error", "message": str(e)} + + # -------------------- Distribution Methods -------------------- + + def create_delta(self, v, log_density=0.0): + """ + Create an instance of the Delta distribution. + + :param v: The value of the distribution. + :param log_density: The log density, default is 0.0. + :return: Dictionary with status and Delta instance or error message. + """ + try: + delta_instance = Delta(v, log_density) + return {"status": "success", "delta_instance": delta_instance} + except Exception as e: + return {"status": "error", "message": str(e)} + + def create_hidden_markov_model(self, initial_dist, transition_dist, observation_dist): + """ + Create an instance of the HiddenMarkovModel. + + :param initial_dist: Initial distribution. + :param transition_dist: Transition distribution. + :param observation_dist: Observation distribution. + :return: Dictionary with status and HiddenMarkovModel instance or error message. + """ + try: + hmm_instance = HiddenMarkovModel(initial_dist, transition_dist, observation_dist) + return {"status": "success", "hmm_instance": hmm_instance} + except Exception as e: + return {"status": "error", "message": str(e)} + + def create_empirical(self, samples): + """ + Create an instance of the Empirical distribution. + + :param samples: Samples for the empirical distribution. + :return: Dictionary with status and Empirical instance or error message. + """ + try: + empirical_instance = Empirical(samples) + return {"status": "success", "empirical_instance": empirical_instance} + except Exception as e: + return {"status": "error", "message": str(e)} + + # -------------------- Poutine Methods -------------------- + + def apply_trace(self, fn): + """ + Apply the trace poutine to a function. + + :param fn: The function to trace. + :return: Dictionary with status and traced function or error message. + """ + try: + traced_fn = trace(fn) + return {"status": "success", "traced_fn": traced_fn} + except Exception as e: + return {"status": "error", "message": str(e)} + + def apply_replay(self, fn, guide_trace): + """ + Apply the replay poutine to a function. + + :param fn: The function to replay. + :param guide_trace: The guide trace for replay. + :return: Dictionary with status and replayed function or error message. + """ + try: + replayed_fn = replay(fn, guide_trace) + return {"status": "success", "replayed_fn": replayed_fn} + except Exception as e: + return {"status": "error", "message": str(e)} + + def apply_condition(self, fn, data): + """ + Apply the condition poutine to a function. + + :param fn: The function to condition. + :param data: The observed data. + :return: Dictionary with status and conditioned function or error message. + """ + try: + conditioned_fn = condition(fn, data) + return {"status": "success", "conditioned_fn": conditioned_fn} + except Exception as e: + return {"status": "error", "message": str(e)} + + # -------------------- Utility Methods -------------------- + + def set_random_seed(self, seed): + """ + Set the random number generator seed. + + :param seed: The seed value. + :return: Dictionary with status. + """ + try: + set_rng_seed(seed) + return {"status": "success"} + except Exception as e: + return {"status": "error", "message": str(e)} + + def clear_parameters(self): + """ + Clear all parameters from the parameter store. + + :return: Dictionary with status. + """ + try: + clear_param_store() + return {"status": "success"} + except Exception as e: + return {"status": "error", "message": str(e)} + + def get_parameters(self): + """ + Get the global parameter store. + + :return: Dictionary with status and parameter store or error message. + """ + try: + param_store = get_param_store() + return {"status": "success", "param_store": param_store} + except Exception as e: + return {"status": "error", "message": str(e)} \ No newline at end of file diff --git a/pyro/mcp_output/mcp_plugin/main.py b/pyro/mcp_output/mcp_plugin/main.py new file mode 100644 index 0000000000000000000000000000000000000000..fca6ec384e22f703b287550e94cc00baaaa4c4a7 --- /dev/null +++ b/pyro/mcp_output/mcp_plugin/main.py @@ -0,0 +1,13 @@ +""" +MCP Service Auto-Wrapper - Auto-generated +""" +from mcp_service import create_app + +def main(): + """Main entry point""" + app = create_app() + return app + +if __name__ == "__main__": + app = main() + app.run() \ No newline at end of file diff --git a/pyro/mcp_output/mcp_plugin/mcp_service.py b/pyro/mcp_output/mcp_plugin/mcp_service.py new file mode 100644 index 0000000000000000000000000000000000000000..550854470290cea39678da2ee136a36e41680146 --- /dev/null +++ b/pyro/mcp_output/mcp_plugin/mcp_service.py @@ -0,0 +1,119 @@ +import os +import sys + +# Add the local source directory to sys.path +source_path = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), "source") +if source_path not in sys.path: + sys.path.insert(0, source_path) + +from fastmcp import FastMCP + +# Import core modules from the local source directory +from pyro.infer import SVI, MCMC +from pyro.distributions import Delta, HiddenMarkovModel +from pyro.poutine import trace, replay, condition + +# Create the FastMCP service application +mcp = FastMCP("pyro_service") + +@mcp.tool(name="svi_tool", description="Perform Stochastic Variational Inference") +def svi_tool(model: callable, guide: callable, data: dict) -> dict: + """ + Perform Stochastic Variational Inference using the provided model and guide. + + Parameters: + - model: The probabilistic model function. + - guide: The variational guide function. + - data: A dictionary containing observed data. + + Returns: + - A dictionary with success, result, and error fields. + """ + try: + svi = SVI(model, guide, ...) + result = svi.run(data) + return {"success": True, "result": result, "error": None} + except Exception as e: + return {"success": False, "result": None, "error": str(e)} + +@mcp.tool(name="mcmc_tool", description="Perform Markov Chain Monte Carlo") +def mcmc_tool(model: callable, num_samples: int) -> dict: + """ + Perform Markov Chain Monte Carlo sampling using the provided model. + + Parameters: + - model: The probabilistic model function. + - num_samples: The number of samples to draw. + + Returns: + - A dictionary with success, result, and error fields. + """ + try: + mcmc = MCMC(model, num_samples=num_samples) + result = mcmc.run() + return {"success": True, "result": result, "error": None} + except Exception as e: + return {"success": False, "result": None, "error": str(e)} + +@mcp.tool(name="delta_distribution_tool", description="Create a Delta distribution") +def delta_distribution_tool(value: float) -> dict: + """ + Create a Delta distribution with the specified value. + + Parameters: + - value: The value for the Delta distribution. + + Returns: + - A dictionary with success, result, and error fields. + """ + try: + delta_dist = Delta(value) + return {"success": True, "result": delta_dist, "error": None} + except Exception as e: + return {"success": False, "result": None, "error": str(e)} + +@mcp.tool(name="hmm_tool", description="Create a Hidden Markov Model") +def hmm_tool(transitions: list, emissions: list, initial: list) -> dict: + """ + Create a Hidden Markov Model with the specified parameters. + + Parameters: + - transitions: Transition probabilities. + - emissions: Emission probabilities. + - initial: Initial state probabilities. + + Returns: + - A dictionary with success, result, and error fields. + """ + try: + hmm = HiddenMarkovModel(transitions, emissions, initial) + return {"success": True, "result": hmm, "error": None} + except Exception as e: + return {"success": False, "result": None, "error": str(e)} + +@mcp.tool(name="trace_tool", description="Trace a model execution") +def trace_tool(model: callable, data: dict) -> dict: + """ + Trace the execution of a model with the provided data. + + Parameters: + - model: The probabilistic model function. + - data: A dictionary containing observed data. + + Returns: + - A dictionary with success, result, and error fields. + """ + try: + traced = trace(model).get_trace(data) + return {"success": True, "result": traced, "error": None} + except Exception as e: + return {"success": False, "result": None, "error": str(e)} + +def create_app() -> FastMCP: + """ + Create and return the FastMCP application instance. + + Returns: + - The FastMCP application instance. + """ + return mcp \ No newline at end of file diff --git a/pyro/mcp_output/requirements.txt b/pyro/mcp_output/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..b2a6d84052a912515a729733bc02ee291353b310 --- /dev/null +++ b/pyro/mcp_output/requirements.txt @@ -0,0 +1,9 @@ +fastmcp +fastapi +uvicorn[standard] +pydantic>=2.0.0 +numpy>=1.7 +opt_einsum>=2.3.2 +pyro-api>=0.1.1 +torch>=2.0 +tqdm>=4.36 diff --git a/pyro/mcp_output/start_mcp.py b/pyro/mcp_output/start_mcp.py new file mode 100644 index 0000000000000000000000000000000000000000..fc7fcbd9646ad53f089fc94af8129043a703325a --- /dev/null +++ b/pyro/mcp_output/start_mcp.py @@ -0,0 +1,30 @@ + +""" +MCP Service Startup Entry +""" +import sys +import os + +project_root = os.path.dirname(os.path.abspath(__file__)) +mcp_plugin_dir = os.path.join(project_root, "mcp_plugin") +if mcp_plugin_dir not in sys.path: + sys.path.insert(0, mcp_plugin_dir) + +from mcp_service import create_app + +def main(): + """Start FastMCP service""" + app = create_app() + # Use environment variable to configure port, default 8000 + port = int(os.environ.get("MCP_PORT", "8000")) + + # Choose transport mode based on environment variable + transport = os.environ.get("MCP_TRANSPORT", "stdio") + if transport == "http": + app.run(transport="http", host="0.0.0.0", port=port) + else: + # Default to STDIO mode + app.run() + +if __name__ == "__main__": + main() diff --git a/pyro/mcp_output/workflow_summary.json b/pyro/mcp_output/workflow_summary.json new file mode 100644 index 0000000000000000000000000000000000000000..8e90463120e680f4350050e3f7470ebc8e1dba5b --- /dev/null +++ b/pyro/mcp_output/workflow_summary.json @@ -0,0 +1,219 @@ +{ + "repository": { + "name": "pyro", + "url": "https://github.com/pyro-ppl/pyro", + "local_path": "/export/zxcpu1/shiweijie/code/ghh/Code2MCP/workspace/pyro", + "description": "Python library", + "features": "Basic functionality", + "tech_stack": "Python", + "stars": 0, + "forks": 0, + "language": "Python", + "last_updated": "", + "complexity": "medium", + "intrusiveness_risk": "low" + }, + "execution": { + "start_time": 1770447584.6202667, + "end_time": 1770447708.0682755, + "duration": 123.44800877571106, + "status": "success", + "workflow_status": "success", + "nodes_executed": [ + "download", + "analysis", + "env", + "generate", + "run", + "review", + "finalize" + ], + "total_files_processed": 26, + "environment_type": "unknown", + "llm_calls": 0, + "deepwiki_calls": 0 + }, + "tests": { + "original_project": { + "passed": false, + "details": {}, + "test_coverage": "100%", + "execution_time": 0, + "test_files": [] + }, + "mcp_plugin": { + "passed": true, + "details": {}, + "service_health": "healthy", + "startup_time": 0, + "transport_mode": "stdio", + "fastmcp_version": "unknown", + "mcp_version": "unknown" + } + }, + "analysis": { + "structure": { + "packages": [ + "source.examples", + "source.examples.contrib", + "source.examples.cvae", + "source.examples.mixed_hmm", + "source.examples.scanvi", + "source.profiler", + "source.pyro", + "source.pyro.contrib", + "source.pyro.distributions", + "source.pyro.infer", + "source.pyro.nn", + "source.pyro.ops", + "source.pyro.optim", + "source.pyro.params", + "source.pyro.poutine", + "source.tests", + "source.tests.contrib", + "source.tests.distributions", + "source.tests.infer", + "source.tests.integration_tests", + "source.tests.nn", + "source.tests.ops", + "source.tests.optim", + "source.tests.params", + "source.tests.perf", + "source.tests.poutine" + ] + }, + "dependencies": { + "has_environment_yml": false, + "has_requirements_txt": false, + "pyproject": true, + "setup_cfg": true, + "setup_py": true + }, + "entry_points": { + "imports": [], + "cli": [], + "modules": [] + }, + "risk_assessment": { + "import_feasibility": 0.9, + "intrusiveness_risk": "low", + "complexity": "medium" + }, + "deepwiki_analysis": { + "repo_url": "https://github.com/pyro-ppl/pyro", + "repo_name": "pyro", + "content": "pyro-ppl/pyro\nCore Primitives and Effect Handlers\nEffect Handlers\nTrace System\nDistributions\nDistribution Classes\nTransforms and Constraints\nSpecial Distributions\nDistribution Utilities\nInference Algorithms\nStochastic Variational Inference\nELBO Variants\nMCMC Methods\nImportance Sampling and Predictive\nModels and Guides\nThe Model/Guide Pattern\nParameter Management\nParameter Store\nExamples and Applications\nTutorial System\nBayesian Statistical Models\nDeep Generative Models\nSpecialized Applications\nDevelopment Infrastructure\nSetup and Installation\nTesting Framework\nSpecial Operations and Utilities\ndocs/requirements.txt\ndocs/source/conf.py\npyproject.toml\npyro/__init__.py\npyro/distributions/constraints.py\npyro/poutine/__init__.py\npyro/util.py\nThis page provides a high-level introduction to Pyro's architecture, design philosophy, and core components. It serves as an entry point for understanding how the system is structured and how its parts interact.\nFor detailed information about specific subsystems, see:\nCore primitives and effect handlers:Section 2\nDistribution system:Section 3\nInference algorithms:Section 4\nModel and guide patterns:Section 5\nParameter management:Section 6\nWhat is Pyro?\nPyro is a universal probabilistic programming language (PPL) built on PyTorch. It enables users to write generative models as Python programs and perform inference over them using a variety of algorithms including variational inference (SVI) and Markov chain Monte Carlo (MCMC).\nPackage Identity:\nName:pyro-pplsetup.py86\nDescription:\"A Python library for probabilistic modeling and inference\"setup.py88\nVersion:1.9.1+pyro/__init__.py31\nPython Requirements:>=3.8setup.py147\nCore Dependencies:\nSources:setup.py102-111pyro/__init__.py1-67\nDesign Philosophy\nPyro is built on four core principles that guide its architecture:\nUniversalAny computable distributionScalableMinimal overhead vs hand-written codeMinimalSmall core, powerful abstractionsFlexibleAutomation + manual controlPyro Core System\nUniversalAny computable distribution\nScalableMinimal overhead vs hand-written code\nMinimalSmall core, powerful abstractions\nFlexibleAutomation + manual control\nPyro Core System\nPyro can represent any computable probability distribution through its flexible programming model. Models are ordinary Python functions that can include loops, recursion, and arbitrary control flow.\nPyro is designed to scale to large datasets with minimal overhead. It builds directly on PyTorch's tensor operations and automatic differentiation, avoiding unnecessary abstractions.\nThe core system is implemented with a small set of composable abstractions. The effect handler system (poutine) provides the foundation for model manipulation without requiring extensive framework code.\nPyro provides high-level automation (e.g., automatic variational guides) while allowing experts to customize inference at any level through effect handlers and custom implementations.\nSources:README.md24-29\nSystem Architecture Overview\nPyro's architecture consists of several layered subsystems:\nParameter LayerDistribution LayerInference LayerEffect Handler Layer (Poutine)Primitive LayerUser LayerUser Model CodePython functions withpyro.sample, pyro.paramPyroModuleNeural network integrationExamples & TutorialsVAE, GP, HMM, etc.Primitive Operationspyro.samplepyro.parampyro.platepyro.factorMessage Runtime_PYRO_STACKapply_stack()Effect Handlerstrace, replaycondition, blockscale, enumSVIStochastic Variational InferenceMCMCHMC, NUTSAutoGuideAutomatic guide generationELBO VariantsTrace_ELBOTraceEnum_ELBOPyTorch Distributionstorch.distributions.*Pyro DistributionsDelta, HMM, etc.Constraints & TransformsParamStoreDictGlobal parameter storagePyroOptimWrapped PyTorch optimizers\nParameter Layer\nDistribution Layer\nInference Layer\nEffect Handler Layer (Poutine)\nPrimitive Layer\nUser Model CodePython functions withpyro.sample, pyro.param\nPyroModuleNeural network integration\nExamples & TutorialsVAE, GP, HMM, etc.\nPrimitive Operationspyro.samplepyro.parampyro.platepyro.factor\nMessage Runtime_PYRO_STACKapply_stack()\nEffect Handlerstrace, replaycondition, blockscale, enum\nSVIStochastic Variational Inference\nMCMCHMC, NUTS\nAutoGuideAutomatic guide generation\nELBO VariantsTrace_ELBOTraceEnum_ELBO\nPyTorch Distributionstorch.distributions.*\nPyro DistributionsDelta, HMM, etc.\nConstraints & Transforms\nParamStoreDictGlobal parameter storage\nPyroOptimWrapped PyTorch optimizers\nSources:pyro/__init__.py1-67pyro/poutine/__init__.py1-59\nCore Components and Code Entities\nPrimitives Module\nThe top-level module exports the fundamental primitives that users interact with:\npyro.sample\npyro.primitives\npyro.primitives\npyro.primitives\npyro.factor\npyro.primitives\npyro.deterministic\npyro.primitives\nAdditional utilities:\npyro.enable_validation()- Enable shape and distribution validationpyro/__init__.py12\npyro.enable_validation()\npyro.clear_param_store()- Reset global parameter storagepyro/__init__.py10\npyro.clear_param_store()\npyro.get_param_store()- Access the global parameter storepyro/__init__.py14\npyro.get_param_store()\npyro.set_rng_seed()- Set random number generator seedpyro/util.py37-45\npyro.set_rng_seed()\nSources:pyro/__init__.py8-26pyro/__init__.py39-66\nPoutine (Effect Handler) System\nPoutine is the effect handler system that intercepts and transforms probabilistic primitives:\nTrace Data StructureCore RuntimeHandler ExportstraceRecords executionreplayReplays recorded samplesconditionFixes observationsblockHides sites from handlersscaleScales log probabilitiesenumEnumerates discrete variablesreparamApplies reparameterization_PYRO_STACKGlobal message stackapply_stack()Message dispatcherMessengerBase handler classTraceExecution recordingMessageSite information dict\nTrace Data Structure\nCore Runtime\nHandler Exports\ntraceRecords execution\nreplayReplays recorded samples\nconditionFixes observations\nblockHides sites from handlers\nscaleScales log probabilities\nenumEnumerates discrete variables\nreparamApplies reparameterization\n_PYRO_STACKGlobal message stack\napply_stack()Message dispatcher\nMessengerBase handler class\nTraceExecution recording\nMessageSite information dict\nKey handler exports frompyro.poutine:\npyro.poutine\ntrace- Records model execution into a Trace objectpyro/poutine/__init__.py23\nreplay- Re-executes model with fixed sample valuespyro/poutine/__init__.py19\ncondition- Conditions model on observed datapyro/poutine/__init__.py8\nblock- Blocks primitives from outer handlerspyro/poutine/__init__.py5\nscale- Scales log probabilities (for subsampling)pyro/poutine/__init__.py20\nenum- Enumerates discrete latent variablespyro/poutine/__init__.py10\nSources:pyro/poutine/__init__.py1-59\nProgramming Model: From Code to Execution\nThis diagram shows how user code flows through Pyro's execution model:\n\"ParamStoreDict\"\"Distribution\"\"Effect Handlers\"\"_PYRO_STACK\"\"pyro.sample()\"\"User Code\"\"ParamStoreDict\"\"Distribution\"\"Effect Handlers\"\"_PYRO_STACK\"\"pyro.sample()\"\"User Code\"Message contains:name, fn, value, args, kwargsEach handler transforms messagePost-process (top-to-bottom)alt[If pyro.param() called]pyro.sample(\"x\", dist)Create messageProcess message (bottom-to-top)_process_message()Sample from distributionSample value_postprocess_message()Return processed messagevalueReturn samplepyro.param(\"theta\")Get/create parameterParameter tensorReturn parameter\nSources:pyro/__init__.py8-26pyro/poutine/__init__.py27-28\nParameter Management Architecture\nPyro maintains a global parameter store that synchronizes with PyTorch module parameters:\nOptimizationGlobal StorageUser Interfacepyro.param('theta', init)Get/create parameterPyroModule.x = PyroParam(...)Module-level parameterParamStoreDict_params: Dict[str, Tensor]_constraints: Dict[str, Constraint]pyro.get_param_store()Access singletonpyro.clear_param_store()Reset all parametersPyroOptimWraps torch.optimSVI.step()Optimization step\nOptimization\nGlobal Storage\nUser Interface\npyro.param('theta', init)Get/create parameter\nPyroModule.x = PyroParam(...)Module-level parameter\nParamStoreDict_params: Dict[str, Tensor]_constraints: Dict[str, Constraint]\npyro.get_param_store()Access singleton\npyro.clear_param_store()Reset all parameters\nPyroOptimWraps torch.optim\nSVI.step()Optimization step\nKey operations:\npyro.param(name, init_value, constraint=constraints.real)- Declare/retrieve parameter\npyro.param(name, init_value, constraint=constraints.real)\npyro.get_param_store()- Get the global ParamStoreDict instancepyro/__init__.py14\npyro.get_param_store()\npyro.clear_param_store()- Clear all parameterspyro/__init__.py10\npyro.clear_param_store()\nSources:pyro/__init__.py10-18pyro/__init__.py54\nDistribution System\nPyro extends PyTorch's distribution library with additional distributions and functionality:\nPyro-SpecificStandard DistributionsPyro ExtensionsPyTorch Basetorch.distributions.Distributiontorch.distributions.constraintsTorchDistributionMixinPyro compatibility layerpyro.distributions.constraintsAdditional constraintsNormal, Beta, Gamma, etc.Wrapped PyTorch distributionsDeltaDegenerate distributionHiddenMarkovModelDiscreteHMM, GaussianHMMEmpiricalSample-based distribution\nPyro-Specific\nStandard Distributions\nPyro Extensions\nPyTorch Base\ntorch.distributions.Distribution\ntorch.distributions.constraints\nTorchDistributionMixinPyro compatibility layer\npyro.distributions.constraintsAdditional constraints\nNormal, Beta, Gamma, etc.Wrapped PyTorch distributions\nDeltaDegenerate distribution\nHiddenMarkovModelDiscreteHMM, GaussianHMM\nEmpiricalSample-based distribution\nConstraint extensionsinpyro.distributions.constraints:\npyro.distributions.constraints\ninteger- Integer valuespyro/distributions/constraints.py152\nsphere- Points on Euclidean spherepyro/distributions/constraints.py155\ncorr_matrix- Correlation matricespyro/distributions/constraints.py151\ncorr_matrix\nordered_vector- Monotonically increasing vectorspyro/distributions/constraints.py153\nordered_vector\nAll PyTorch constraints viafrom torch.distributions.constraints import *pyro/distributions/constraints.py5\nfrom torch.distributions.constraints import *\nSources:pyro/distributions/constraints.py1-235\nInference Ecosystem\nPyro provides multiple inference algorithms that operate on the same model-guide abstraction:\npyro.infer.SVI\npyro.infer.MCMC\npyro.infer.MCMC\npyro.infer.Importance\nELBO variants for SVI:\nTrace_ELBO- Basic Monte Carlo ELBO estimator\nTraceEnum_ELBO- Enumerates discrete latent variables\nTraceEnum_ELBO\nTraceGraph_ELBO- Variance reduction via Rao-Blackwellization\nTraceGraph_ELBO\nRenyiELBO- Rényi divergence objective (α-divergence)\nAutomatic guides:", + "model": "gpt-4o-2024-08-06", + "source": "selenium", + "success": true + }, + "code_complexity": { + "cyclomatic_complexity": "medium", + "cognitive_complexity": "medium", + "maintainability_index": 75 + }, + "security_analysis": { + "vulnerabilities_found": 0, + "security_score": 85, + "recommendations": [] + } + }, + "plugin_generation": { + "files_created": [ + "mcp_output/start_mcp.py", + "mcp_output/mcp_plugin/__init__.py", + "mcp_output/mcp_plugin/mcp_service.py", + "mcp_output/mcp_plugin/adapter.py", + "mcp_output/mcp_plugin/main.py", + "mcp_output/requirements.txt", + "mcp_output/README_MCP.md" + ], + "main_entry": "start_mcp.py", + "requirements": [ + "fastmcp>=0.1.0", + "pydantic>=2.0.0" + ], + "readme_path": "/export/zxcpu1/shiweijie/code/ghh/Code2MCP/workspace/pyro/mcp_output/README_MCP.md", + "adapter_mode": "import", + "total_lines_of_code": 0, + "generated_files_size": 0, + "tool_endpoints": 0, + "supported_features": [ + "Basic functionality" + ], + "generated_tools": [ + "Basic tools", + "Health check tools", + "Version info tools" + ] + }, + "code_review": {}, + "errors": [], + "warnings": [], + "recommendations": [ + "Improve test coverage by adding more unit tests for critical modules", + "streamline the import strategy to reduce complexity", + "enhance documentation for better understanding of core components", + "optimize the size of large files for better performance", + "ensure all dependencies are clearly defined and up-to-date", + "implement continuous integration to automate testing and deployment", + "refactor code to improve readability and maintainability", + "consider adding more examples and tutorials to demonstrate usage", + "review and update the README file to provide a comprehensive overview of the project", + "conduct regular code reviews to maintain code quality." + ], + "performance_metrics": { + "memory_usage_mb": 0, + "cpu_usage_percent": 0, + "response_time_ms": 0, + "throughput_requests_per_second": 0 + }, + "deployment_info": { + "supported_platforms": [ + "Linux", + "Windows", + "macOS" + ], + "python_versions": [ + "3.8", + "3.9", + "3.10", + "3.11", + "3.12" + ], + "deployment_methods": [ + "Docker", + "pip", + "conda" + ], + "monitoring_support": true, + "logging_configuration": "structured" + }, + "execution_analysis": { + "success_factors": [ + "Comprehensive node execution covering download, analysis, environment setup, generation, and review", + "Successful MCP plugin generation with healthy service status" + ], + "failure_reasons": [], + "overall_assessment": "excellent", + "node_performance": { + "download_time": "Efficient download process completed successfully", + "analysis_time": "Thorough analysis completed within expected timeframe", + "generation_time": "Code generation executed smoothly without delays", + "test_time": "Testing phase completed quickly, but original project tests did not pass" + }, + "resource_usage": { + "memory_efficiency": "Memory usage data not available", + "cpu_efficiency": "CPU usage data not available", + "disk_usage": "Disk usage data not available" + } + }, + "technical_quality": { + "code_quality_score": 85, + "architecture_score": 90, + "performance_score": 80, + "maintainability_score": 75, + "security_score": 85, + "scalability_score": 80 + } +} \ No newline at end of file diff --git a/pyro/source/.codecov.yml b/pyro/source/.codecov.yml new file mode 100644 index 0000000000000000000000000000000000000000..d74c7ec78150e381c2d2a7da858c70717639d5df --- /dev/null +++ b/pyro/source/.codecov.yml @@ -0,0 +1,14 @@ +# Copyright Contributors to the Pyro project. +# +# SPDX-License-Identifier: Apache-2.0 + +ignore: + - "pyro/docutil.py" + - "pyro/logger.py" + +coverage: + range: 60..95 + round: nearest + precision: 2 + +comment: false diff --git a/pyro/source/.coveragerc b/pyro/source/.coveragerc new file mode 100644 index 0000000000000000000000000000000000000000..30f3c0dd8f7172b453ed7499a5bc044648e4faf2 --- /dev/null +++ b/pyro/source/.coveragerc @@ -0,0 +1,21 @@ +# Copyright Contributors to the Pyro project. +# +# SPDX-License-Identifier: Apache-2.0 + +[report] +omit = + pyro/docutil.py + pyro/logger.py +exclude_lines = + pragma: no cover + def backward + raise AssertionError + raise NotImplementedError + raise ValueError + except NotImplementedError + except ImportError + except KeyError + except TypeError + warnings\.warn.* + warn_if.* + if __name__ == .__main__.: diff --git a/pyro/source/.readthedocs.yml b/pyro/source/.readthedocs.yml new file mode 100644 index 0000000000000000000000000000000000000000..d27cb9533841eee59af6e4726e7ccf5272bfe0fe --- /dev/null +++ b/pyro/source/.readthedocs.yml @@ -0,0 +1,23 @@ +# Copyright Contributors to the Pyro project. +# +# SPDX-License-Identifier: Apache-2.0 + +# Required +version: 2 + +build: + os: ubuntu-20.04 + tools: + python: "3.8" + +# Build documentation in the docs/ directory with Sphinx +sphinx: + configuration: docs/source/conf.py + +# Optionally build your docs in additional formats such as PDF and ePub +# formats: all + +# Optionally set the version of Python and requirements required to build your docs +python: + install: + - requirements: docs/requirements.txt diff --git a/pyro/source/CODE_OF_CONDUCT.md b/pyro/source/CODE_OF_CONDUCT.md new file mode 100644 index 0000000000000000000000000000000000000000..efd8260b09a02b87919cb24a1974f6cef85ea914 --- /dev/null +++ b/pyro/source/CODE_OF_CONDUCT.md @@ -0,0 +1,53 @@ + + + +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at fritz.obermeyer@gmail.com or fehiepsi@gmail.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/pyro/source/CONTRIBUTING.md b/pyro/source/CONTRIBUTING.md new file mode 100644 index 0000000000000000000000000000000000000000..d4ffc33d260cb1148590a612370ade908b3a3357 --- /dev/null +++ b/pyro/source/CONTRIBUTING.md @@ -0,0 +1,133 @@ + + +# Development + +Please follow our established coding style including variable names, module imports, and function definitions. +The Pyro codebase follows the [PEP8 style guide](https://www.python.org/dev/peps/pep-0008/) +(which you can check with `make lint`) and follows +[`isort`](https://github.com/timothycrosley/isort) import order (which you can enforce with `make format`). +When creating new files please add a license header; this can be done automatically via `make license` or simply `make format`. + +# Setup + +First install [PyTorch](http://pytorch.org/). + +Then, install all the dev dependencies for Pyro. +```sh +make install +``` +or explicitly +```sh +pip install -e .[dev] +``` + +# Testing + +Before submitting a pull request, please autoformat code and ensure that unit tests pass locally +```sh +make format # runs isort +make test # linting and unit tests +``` + +If you've modified core pyro code, examples, or tutorials, you can run more comprehensive tests locally (after first adding any new files to the appropriate `tests/` script) +```sh +make test-examples # test examples/ +make integration-test # longer-running tests (may take hours) +make test-cuda # runs unit tests in cuda mode +``` + +To run all tests locally in parallel, use the `pytest-xdist` package +```sh +pip install pytest-xdist +pytest -vs -n auto +``` + +To run a single test from the command line +```sh +pytest -vs {path_to_test}::{test_name} +# or in cuda mode +CUDA_TEST=1 PYRO_DTYPE=float64 PYRO_DEVICE=cuda pytest -vs {path_to_test}::{test_name} +``` + +To ensure documentation builds correctly, run +```sh +make docs +``` + +## Testing Tutorials + +We run some tutorials on travis to avoid bit rot. +Before submitting a new tutorial, please run `make scrub` from +the top-level pyro directory in order to scrub the metadata in +the notebooks. +To enable a tutorial for testing + +1. Add a line `smoke_test = ('CI' in os.environ)` to your tutorial. Our test + scripts only test tutorials that contain the string `smoke_test`. +2. Each time you do something expensive for many iterations, set the number + of iterations like this: + ```py + for epoch in range(200 if not smoke_test else 1): + ... + ``` + +You can test locally by running `make test-tutorials`. + +# Profiling + +The profiler module contains scripts to support profiling different +Pyro modules, as well as test for performance regression. + +To run the profiling utilities, ensure that all dependencies for profiling are satisfied, +by running `make install`, or more specifically, `pip install -e .[profile]`. + +There are some generic test cases available in the `profiler` module. Currently, this supports +only the `distributions` library, but we will be adding test cases for inference methods +soon. + +#### Some useful invocations + +To get help on the parameters that the profiling script takes, run: + +```sh +python -m profiler.distributions --help +``` + +To run the profiler on all the distributions, simply run: + +```sh +python -m profiler.distributions +``` + +To run the profiler on a few distributions by varying the batch size, run: + +```sh +python -m profiler.distributions --dist bernoulli normal --batch_sizes 1000 100000 +``` + +To get more details on the potential sources of slowdown, use the `cProfile` tool + as follows: + +```sh +python -m profiler.distributions --dist bernoulli --tool cprofile +``` + +# Submitting + +For larger changes, please open an issue for discussion before submitting a pull request. +For relevant design questions to consider, see past +[design documents](https://github.com/pyro-ppl/pyro/wiki/Design-Docs). + +In your pull request description on github, please note: +- Proposed changes +- Links to related issues/PRs +- New and existing tests + +Before submitting, please run `make format`, `make lint`, and running tests as described above. + +For speculative changes meant for early-stage review, include `[WIP]` in the PR's title. +(One of the maintainers will add the `WIP` tag.) diff --git a/pyro/source/LICENSE.md b/pyro/source/LICENSE.md new file mode 100644 index 0000000000000000000000000000000000000000..d645695673349e3947e8e5ae42332d0ac3164cd7 --- /dev/null +++ b/pyro/source/LICENSE.md @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/pyro/source/LICENSES/Apache-2.0.txt b/pyro/source/LICENSES/Apache-2.0.txt new file mode 100644 index 0000000000000000000000000000000000000000..137069b823873b8bcf42979bcf8e9371052d26a2 --- /dev/null +++ b/pyro/source/LICENSES/Apache-2.0.txt @@ -0,0 +1,73 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/pyro/source/LICENSES/BSD-3-Clause.txt b/pyro/source/LICENSES/BSD-3-Clause.txt new file mode 100644 index 0000000000000000000000000000000000000000..ea890afbc70c94011b765722a95e2c8c7d4f1233 --- /dev/null +++ b/pyro/source/LICENSES/BSD-3-Clause.txt @@ -0,0 +1,11 @@ +Copyright (c) . + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/pyro/source/LICENSES/MIT.txt b/pyro/source/LICENSES/MIT.txt new file mode 100644 index 0000000000000000000000000000000000000000..2071b23b0e08594ea6bc99ac71129ef992abf498 --- /dev/null +++ b/pyro/source/LICENSES/MIT.txt @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/pyro/source/MANIFEST.in b/pyro/source/MANIFEST.in new file mode 100644 index 0000000000000000000000000000000000000000..4f69646a09465a31901082d21387b1eaa4d28d85 --- /dev/null +++ b/pyro/source/MANIFEST.in @@ -0,0 +1,2 @@ +include LICENSE.md MANIFEST.in +recursive-include pyro *.cpp diff --git a/pyro/source/Makefile b/pyro/source/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..04c6112d4727ed95b9ffcd30bdfc10f33544b367 --- /dev/null +++ b/pyro/source/Makefile @@ -0,0 +1,91 @@ +.PHONY: all install docs lint format test integration-test clean FORCE + +all: docs test + +install: FORCE + pip install -e .[dev,profile] --config-settings editable_mode=strict + +uninstall: FORCE + pip uninstall pyro-ppl + +docs: FORCE + $(MAKE) -C docs html + +apidoc: FORCE + $(MAKE) -C docs apidoc + +tutorial: FORCE + $(MAKE) -C tutorial html + +lint: FORCE + ruff check . + black --check *.py pyro examples tests scripts profiler + python scripts/update_headers.py --check + mypy --install-types --non-interactive pyro scripts tests + +license: FORCE + python scripts/update_headers.py + +format: license FORCE + ruff check --fix . + black *.py pyro examples tests scripts profiler + +version: FORCE + python scripts/update_version.py + +scrub: FORCE + find tutorial -name "*.ipynb" | xargs python -m nbstripout --keep-output --keep-count + find tutorial -name "*.ipynb" | xargs python tutorial/source/cleannb.py + +doctest: FORCE + # We skip testing pyro.distributions.torch wrapper classes because + # they include torch docstrings which are tested upstream. + python -m pytest -p tests.doctest_fixtures --doctest-modules -o filterwarnings=ignore pyro --ignore=pyro/distributions/torch.py + +perf-test: FORCE + bash scripts/perf_test.sh ${ref} + +profile: ref=dev + +profile: FORCE + bash scripts/profile_model.sh ${ref} ${models} + +test: lint docs doctest FORCE + pytest -vx -n auto --stage unit + +test-examples: lint FORCE + pytest -vx --stage test_examples + +test-tutorials: lint FORCE + grep -l smoke_test tutorial/source/*.ipynb | xargs grep -L 'smoke_test = False' \ + | CI=1 xargs pytest -vx --nbval-lax --current-env + +integration-test: lint FORCE + pytest -vx -n auto --stage integration + +test-all: lint FORCE + pytest -vx -n auto + CI=1 grep -l smoke_test tutorial/source/*.ipynb \ + | xargs pytest -vx --nbval-lax + +test-cuda: lint FORCE + CUDA_TEST=1 PYRO_DTYPE=float64 PYRO_DEVICE=cuda pytest -vx --stage unit + CUDA_TEST=1 pytest -vx tests/test_examples.py::test_cuda + +test-cuda-lax: lint FORCE + CUDA_TEST=1 PYRO_DTYPE=float64 PYRO_DEVICE=cuda pytest -vx --stage unit --lax + CUDA_TEST=1 pytest -vx tests/test_examples.py::test_cuda + +test-jit: FORCE + @echo See jit.log + pytest -v -n auto --tb=short --runxfail tests/infer/test_jit.py tests/test_examples.py::test_jit | tee jit.log + pytest -v -n auto --tb=short --runxfail tests/infer/mcmc/test_hmc.py tests/infer/mcmc/test_nuts.py \ + -k JIT=True | tee -a jit.log + +test-funsor: lint FORCE + pytest -vx -n auto --stage funsor + +clean: FORCE + git clean -dfx -e pyro_ppl.egg-info + +FORCE: diff --git a/pyro/source/README.md b/pyro/source/README.md new file mode 100644 index 0000000000000000000000000000000000000000..66b7407e423a586e994ac2d14453d96301b96a59 --- /dev/null +++ b/pyro/source/README.md @@ -0,0 +1,110 @@ + + +
+ +
+ +----------------------------------------- + +[![Build Status](https://github.com/pyro-ppl/pyro/workflows/CI/badge.svg)](https://github.com/pyro-ppl/pyro/actions) +[![Coverage Status](https://coveralls.io/repos/github/pyro-ppl/pyro/badge.svg?branch=dev)](https://coveralls.io/github/pyro-ppl/pyro?branch=dev) +[![Latest Version](https://badge.fury.io/py/pyro-ppl.svg)](https://pypi.python.org/pypi/pyro-ppl) +[![Documentation Status](https://readthedocs.org/projects/pyro-ppl/badge/?version=dev)](http://pyro-ppl.readthedocs.io/en/stable/?badge=dev) +[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/3056/badge)](https://bestpractices.coreinfrastructure.org/projects/3056) + +[Getting Started](http://pyro.ai/examples) | +[Documentation](http://docs.pyro.ai/) | +[Community](http://forum.pyro.ai/) | +[Contributing](https://github.com/pyro-ppl/pyro/blob/master/CONTRIBUTING.md) + +Pyro is a flexible, scalable deep probabilistic programming library built on PyTorch. Notably, it was designed with these principles in mind: + +- **Universal**: Pyro is a universal PPL - it can represent any computable probability distribution. +- **Scalable**: Pyro scales to large data sets with little overhead compared to hand-written code. +- **Minimal**: Pyro is agile and maintainable. It is implemented with a small core of powerful, composable abstractions. +- **Flexible**: Pyro aims for automation when you want it, control when you need it. This is accomplished through high-level abstractions to express generative and inference models, while allowing experts easy-access to customize inference. + +Pyro was originally developed at Uber AI and is now actively maintained by community contributors, including a dedicated team at the [Broad Institute](https://www.broadinstitute.org/). +In 2019, Pyro [became](https://www.linuxfoundation.org/press-release/2019/02/pyro-probabilistic-programming-language-becomes-newest-lf-deep-learning-project/) a project of the Linux Foundation, a neutral space for collaboration on open source software, open standards, open data, and open hardware. + +For more information about the high level motivation for Pyro, check out our [launch blog post](http://eng.uber.com/pyro). +For additional blog posts, check out work on [experimental design](https://eng.uber.com/oed-pyro-release/) and +[time-to-event modeling](https://eng.uber.com/modeling-censored-time-to-event-data-using-pyro/) in Pyro. + +## Installing + +### Installing a stable Pyro release + +**Install using pip:** +```sh +pip install pyro-ppl +``` + +**Install from source:** +```sh +git clone git@github.com:pyro-ppl/pyro.git +cd pyro +git checkout master # master is pinned to the latest release +pip install . +``` + +**Install with extra packages:** + +To install the dependencies required to run the probabilistic models included in the `examples`/`tutorials` directories, please use the following command: +```sh +pip install pyro-ppl[extras] +``` +Make sure that the models come from the same release version of the [Pyro source code](https://github.com/pyro-ppl/pyro/releases) as you have installed. + +### Installing Pyro dev branch + +For recent features you can install Pyro from source. + +**Install Pyro using pip:** + +```sh +pip install git+https://github.com/pyro-ppl/pyro.git +``` +or, with the `extras` dependency to run the probabilistic models included in the `examples`/`tutorials` directories: +```sh +pip install git+https://github.com/pyro-ppl/pyro.git#egg=project[extras] +``` + +**Install Pyro from source:** + +```sh +git clone https://github.com/pyro-ppl/pyro +cd pyro +pip install . # pip install .[extras] for running models in examples/tutorials +``` + +## Running Pyro from a Docker Container + +Refer to the instructions [here](docker/README.md). + +## Citation +If you use Pyro, please consider citing: +``` +@article{bingham2019pyro, + author = {Eli Bingham and + Jonathan P. Chen and + Martin Jankowiak and + Fritz Obermeyer and + Neeraj Pradhan and + Theofanis Karaletsos and + Rohit Singh and + Paul A. Szerlip and + Paul Horsfall and + Noah D. Goodman}, + title = {Pyro: Deep Universal Probabilistic Programming}, + journal = {J. Mach. Learn. Res.}, + volume = {20}, + pages = {28:1--28:6}, + year = {2019}, + url = {http://jmlr.org/papers/v20/18-403.html} +} +``` diff --git a/pyro/source/RELEASE-MANAGEMENT.md b/pyro/source/RELEASE-MANAGEMENT.md new file mode 100644 index 0000000000000000000000000000000000000000..762d85e7cc44d1db28a701d6f7d13ce58a03f980 --- /dev/null +++ b/pyro/source/RELEASE-MANAGEMENT.md @@ -0,0 +1,33 @@ + + +# Pyro release management + +This describes the process by which versions of Pyro are officially released to the public. + +## Versioning + +Releases are versioned according to the `version_prefix` constant in [pyro/__init__.py](pyro/__init__.py). +Pyro releases follow semantic versioning with the following caveats: + +- Behavior of documented APIs will remain stable across minor releases, except for bug fixes and features marked EXPERIMENTAL or DEPRECATED. +- Serialization formats will remain stable across patch releases, but may change across minor releases (e.g. if you save a model in 1.0.0, it will be safe to load it in 1.0.1, but not in 1.1.0). +- Undocumented APIs, features marked EXPERIMENTAL or DEPRECATED, and anything in `pyro.contrib` may change at any time (though we aim for stability). +- All deprecated features throw a `FutureWarning` and specify possible work-arounds. Features marked as deprecated will not be maintained, and are likely to be removed in a future release. +- If you want more stability for a particular feature, [contribute](https://github.com/pyro-ppl/pyro/blob/dev/CONTRIBUTING.md) a unit test. + +## Release process + +Pyro is released at irregular cadence, typically about 4 times per year. + +Releases are managed by: +- [Fritz Obermeyer](https://github.com/fritzo) +- [Neeraj Pradhan](https://github.com/neerajprad) +- [JP Chen](https://github.com/jpchen) + +Releases and release notes are published to [github](https://github.com/pyro-ppl/pyro/releases). +Documentation for is published to [readthedocs](https://docs.pyro.ai). +Release builds are published to [pypi](https://pypi.org/project/pyro-ppl/). diff --git a/pyro/source/__init__.py b/pyro/source/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..797db4476458cec37c6affba1eedd29b8b9cbc86 --- /dev/null +++ b/pyro/source/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +""" +pyro Project Package Initialization File +""" diff --git a/pyro/source/docker/Dockerfile b/pyro/source/docker/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..a0959f9ad9cacfcef22571b0c1aca1f5a5875c55 --- /dev/null +++ b/pyro/source/docker/Dockerfile @@ -0,0 +1,67 @@ +# Copyright Contributors to the Pyro project. +# +# SPDX-License-Identifier: Apache-2.0 + +ARG base_img=ubuntu:24.04 +FROM ${base_img} + +# Optional args +ARG python_version=3 +ARG pyro_branch=release +ARG pytorch_whl=cpu +ARG pytorch_branch=release +ARG uid=1000 +ARG gid=1000 +ARG ostype=Linux +ARG pyro_git_url=https://github.com/pyro-ppl/pyro.git +ARG trust_hosts=no + +# Configurable settings +ENV USER_NAME pyromancer +ENV CONDA_DIR /opt/conda +ENV WORK_DIR /home/${USER_NAME}/workspace +ENV PATH ${CONDA_DIR}/bin:${PATH} + +# Install linux utils +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + cmake \ + git \ + wget \ + ca-certificates && \ + rm -rf /var/lib/apt/lists/* + +# Change to default user +RUN bash -c 'if [ ${ostype} == Linux ]; then groupadd -r --gid ${gid} ${USER_NAME}; fi && \ + useradd -r --create-home --shell /bin/bash --uid ${uid} --gid ${gid} ${USER_NAME}' && \ + mkdir -p ${CONDA_DIR} ${WORK_DIR} && chown ${USER_NAME} ${CONDA_DIR} ${WORK_DIR} +USER ${USER_NAME} + +# Install conda +RUN if [ ${trust_hosts} = yes ] ; then WGET_ARGS="--no-check-certificate" ; fi && \ + wget ${WGET_ARGS} -O ~/miniconda.sh \ + https://repo.anaconda.com/miniconda/Miniconda${python_version%%.*}-latest-Linux-x86_64.sh && \ + bash ~/miniconda.sh -f -b -p ${CONDA_DIR} && \ + rm ~/miniconda.sh + +# Trust conda and pip hosts if needed +RUN if [ ${trust_hosts} = yes ] ; \ + then \ + pip config set global.trusted-host "pypi.org files.pythonhosted.org download.pytorch.org" && \ + conda config --set ssl_verify False ; \ + fi + +# Update python version +RUN conda install python=${python_version} + +# Move to home directory; and copy the install script +WORKDIR ${WORK_DIR} +COPY install.sh ${WORK_DIR}/install.sh + +# Install python 2/3, PyTorch and Pyro +RUN cd ${WORK_DIR} && conda update -n base conda -c defaults && bash install.sh + +# Run Jupyter notebook +# (Ref: http://jupyter-notebook.readthedocs.io/en/latest/public_server.html#docker-cmd) +EXPOSE 8888 +CMD ["jupyter", "notebook", "--port=8888", "--no-browser", "--ip=0.0.0.0"] diff --git a/pyro/source/docker/Makefile b/pyro/source/docker/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..4801d3dfa7309287aaac8c0a640127fb4821972d --- /dev/null +++ b/pyro/source/docker/Makefile @@ -0,0 +1,163 @@ +# Copyright Contributors to the Pyro project. +# +# SPDX-License-Identifier: Apache-2.0 + +.PHONY: help create-host-workspace build build-gpu run run-gpu notebook notebook-gpu + +DOCKER_FILE=Dockerfile +BASE_IMG=ubuntu:24.04 +BASE_CUDA_IMG=nvidia/cuda:12.6.3-cudnn-runtime-ubuntu24.04 +DOCKER_CMD=docker +HOST_WORK_DIR=${HOME}/pyro_docker +UID=999 +GID=999 +OSTYPE=$(shell uname) +USER=pyromancer +DOCKER_WORK_DIR=/home/${USER}/workspace/shared +pyro_git_url=https://github.com/pyro-ppl/pyro.git + +# Optional args +python_version?=3.12 +pytorch_branch?=release +pyro_branch?=release +cmd?=bash +trust_hosts?="no" + +# Determine name of docker image +build run notebook: img_prefix=pyro-cpu +build-gpu run-gpu notebook-gpu: img_prefix=pyro-gpu +build run lab: img_prefix=pyro-cpu +build-gpu run-gpu lab-gpu: img_prefix=pyro-gpu + +ifeq ($(img), ) + IMG_NAME=${img_prefix}-${pyro_branch}-${pytorch_branch}-${python_version} +else + IMG_NAME=${img} +endif + +help: + @fgrep -h "##" ${MAKEFILE_LIST} | fgrep -v fgrep | sed -e 's/##//' + +## +##Available targets: +## + +build: ## + ## Build a docker image for running Pyro on a CPU. + ## Args: + ## python_version: version of python to use. default - python 3.12 + ## pytorch_branch: whether to build PyTorch from conda or from source + ## (git branch specified by pytorch_branch) + ## default - latest pytorch version on the torch python package index + ## pyro_branch: whether to use the released Pyro wheel or a git branch. + ## default - latest pyro-ppl wheel on pypi + ## trust_hosts: If set to yes hosts SSL ceritificates will be trusted + ## (might be needed when running begind a firewall) + ## default - Verify hosts SSL certificates + ## + ${DOCKER_CMD} build -t ${IMG_NAME} \ + --build-arg base_img=${BASE_IMG} \ + --build-arg uid=${UID} \ + --build-arg gid=${GID} \ + --build-arg ostype=${OSTYPE} \ + --build-arg python_version=${python_version} \ + --build-arg pytorch_branch=${pytorch_branch} \ + --build-arg pyro_git_url=${pyro_git_url} \ + --build-arg pyro_branch=${pyro_branch} \ + --build-arg trust_hosts=${trust_hosts} -f ${DOCKER_FILE} . + +build-gpu: ## + ## Build a docker image for running Pyro on a GPU. + ## Args: + ## python_version: version of python to use. default - python 3.12 + ## pytorch_branch: whether to build PyTorch from conda or from source + ## (git branch specified by pytorch_branch) + ## default - latest pytorch version on the torch python package index + ## pyro_branch: whether to use the released Pyro wheel or a git branch. + ## default - latest pyro-ppl wheel on pypi + ## trust_hosts: If set to yes hosts SSL ceritificates will be trusted + ## (might be needed when running begind a firewall) + ## default - Verify hosts SSL certificates + ## + ${DOCKER_CMD} build -t ${IMG_NAME} \ + --build-arg base_img=${BASE_CUDA_IMG} \ + --build-arg uid=${UID} \ + --build-arg gid=${GID} \ + --build-arg ostype=${OSTYPE} \ + --build-arg pytorch_whl=cu126 \ + --build-arg python_version=${python_version} \ + --build-arg pytorch_branch=${pytorch_branch} \ + --build-arg pyro_git_url=${pyro_git_url} \ + --build-arg pyro_branch=${pyro_branch} \ + --build-arg trust_hosts=${trust_hosts} -f ${DOCKER_FILE} . + +create-host-workspace: ## + ## Create shared volume on the host for sharing files with the container. + ## + mkdir -p ${HOST_WORK_DIR} + +run: create-host-workspace +run: ## + ## Start a Pyro CPU docker instance, and run the command `cmd`. + ## Args: + ## img: use image name given by `img`. + ## cmd: command invoked on running a docker instance. + ## default - bash + ## + docker run --init -it --user ${USER} \ + -v ${HOST_WORK_DIR}:${DOCKER_WORK_DIR} \ + ${IMG_NAME} ${cmd} + +run-gpu: create-host-workspace +run-gpu: ## + ## Start a Pyro GPU docker instance, and run the command `cmd`. + ## Args: + ## img: use image name given by `img`. + ## cmd: command invoked on running a docker instance. + ## default - bash + ## + docker run --init --gpus=all -it --user ${USER} \ + -v ${HOST_WORK_DIR}:${DOCKER_WORK_DIR} \ + ${IMG_NAME} ${cmd} + +notebook: create-host-workspace +notebook: ## + ## Start a jupyter notebook on the Pyro CPU docker container. + ## Args: + ## img: use image name given by `img`. + ## + docker run --init -it -p 8888:8888 --user ${USER} \ + -v ${HOST_WORK_DIR}:${DOCKER_WORK_DIR} \ + ${IMG_NAME} + +notebook-gpu: create-host-workspace +notebook-gpu: ## + ## Start a jupyter notebook on the Pyro GPU docker container. + ## Args: + ## img: use image name given by `img`. + ## + docker run --gpus=all --init -it -p 8888:8888 --user ${USER} \ + -v ${HOST_WORK_DIR}:${DOCKER_WORK_DIR} \ + ${IMG_NAME} + + notebook: create-host-workspace +lab: ## + ## Start jupyterlab on the Pyro CPU docker container. + ## Args: + ## img: use image name given by `img`. + ## + docker run --init -it -p 8888:8888 --user ${USER} \ + -v ${HOST_WORK_DIR}:${DOCKER_WORK_DIR} \ + ${IMG_NAME} jupyter lab --port=8888 --no-browser --ip=0.0.0.0 + +lab-gpu: create-host-workspace +lab-gpu: ## + ## Start jupyterlab on the Pyro GPU docker container. + ## Args: + ## img: use image name given by `img`. + ## + docker run --gpus=all --init -it -p 8888:8888 --user ${USER} \ + -v ${HOST_WORK_DIR}:${DOCKER_WORK_DIR} \ + ${IMG_NAME} jupyter lab --port=8888 --no-browser --ip=0.0.0.0 + + diff --git a/pyro/source/docker/README.md b/pyro/source/docker/README.md new file mode 100644 index 0000000000000000000000000000000000000000..92e5d1e627f0a01f8a8c443bb7478d5550a446a5 --- /dev/null +++ b/pyro/source/docker/README.md @@ -0,0 +1,66 @@ + + +## Using Pyro Docker + +Some utilities for building docker images and running Pyro inside a Docker container are +included in the `docker` directory. This includes a Dockerfile to build PyTorch and Pyro, +with some common recipes included in the Makefile. + +Dependencies for building the docker images: + - **docker** (>= version 17.05) + - **nvidia-docker** Refer to the [readme](https://github.com/NVIDIA/nvidia-docker) for + installation. + + +### Building Images + +The Makefile can be used to build CPU and CUDA images for Pyro and PyTorch. Some common +options are as follows: + + 1. **Source:** Uses the latest released package (conda package for PyTorch and PyPi wheel + for Pyro) by default. However, both Pyro and PyTorch can be built from source from the + master branch or any other arbitrary branch specified by `pytorch_branch` and + `pyro_branch`. + 2. **CPU / CUDA:** `make build` or `make build-gpu` can be used to specify whether the CPU + or the CUDA image is to be built. For building the CUDA image, *nvidia-docker* is + required. + 3. **Python Version:** Python version can be specified via the argument `python_version`. + +For example, the `make` command to build an image that uses Pyro's `dev` branch over +PyTorch's `master` branch, using python 3.6 to run on a GPU, is as follows: + +```sh +make build-gpu pyro_branch=dev pytorch_branch=master python_version=3.6 +``` + +This will build an image named `pyro-gpu-dev-3.6`. To spin up a docker container from this +image, and run jupyter notebook on this, use the following `make` command: + +```sh +make notebook-gpu img=pyro-gpu-dev-3.6 +``` + +For help on the `make` commands available, run `make help`. + +**NOTE (Mac Users)**: Please increase the memory available to the Docker application +via *Preferences --> Advanced* from 2GB (default) to at least 4GB prior to building the +docker image (specially for building PyTorch from source). + +### Running the Docker container + +Once the image is built, the docker container can be started via `make run`, or +`make run-gpu`. By default this starts a *bash* shell. One could start an *ipython* +shell instead by running `make run cmd=ipython`. The image to be used can be +specified via the argument `img`. + +To run a *jupyter notebook* use `make notebook`, or `make notebook-gpu`. This will +start a jupyter notebook server which can be accessed from the browser using the link +mentioned in the terminal. + +Note that there is a shared volume between the container and the host system, with the +location `$DOCKER_WORK_DIR` on the container, and `$HOST_WORK_DIR` on the local system. +These variables can be configured in the `Makefile`. diff --git a/pyro/source/docker/install.sh b/pyro/source/docker/install.sh new file mode 100644 index 0000000000000000000000000000000000000000..43f401923afef7cc05218891c1162e4c002769fa --- /dev/null +++ b/pyro/source/docker/install.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +# Copyright Contributors to the Pyro project. +# +# SPDX-License-Identifier: Apache-2.0 + +set -xe + +pip install --upgrade pip +pip install notebook ipywidgets matplotlib + +# 1. Install PyTorch +# Use conda package if pytorch_branch = 'release'. +# Else, install from source, using git branch `pytorch_branch` + +pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/${pytorch_whl} +if [ ${pytorch_branch} != "release" ] +then + git clone --recursive https://github.com/pytorch/pytorch.git + pushd pytorch && git checkout ${pytorch_branch} + pip uninstall -y torch + conda install cmake ninja + pip install -r requirements.txt + pip install mkl-static mkl-include + if [ ${pytorch_whl} != "cpu" ] + then + conda install -c pytorch magma-cuda${pytorch_whl:2} + fi + pip install -e . + popd +fi + + +# 2. Install Pyro +# Use pypi wheel if pyro_branch = 'release'. +# Else, install from source, using git branch `pyro_branch` +if [ ${pyro_branch} = "release" ] +then + pip install pyro-ppl +else + git clone ${pyro_git_url} + (cd pyro && git checkout ${pyro_branch} && pip install -e .[dev]) +fi diff --git a/pyro/source/docs/Makefile b/pyro/source/docs/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..3dca05ce3a724fb68011532ba04195bb0bbf749d --- /dev/null +++ b/pyro/source/docs/Makefile @@ -0,0 +1,28 @@ +# Copyright Contributors to the Pyro project. +# +# SPDX-License-Identifier: Apache-2.0 + +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS ?= -E -W +SPHINXBUILD = python -msphinx +APIDOC = sphinx-apidoc +SPHINXPROJ = Pyro +SOURCEDIR = source +PROJECTDIR = ../pyro +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +apidoc: + $(APIDOC) -o "$(SOURCEDIR)" "$(PROJECTDIR)" +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/pyro/source/docs/README.md b/pyro/source/docs/README.md new file mode 100644 index 0000000000000000000000000000000000000000..c724cb12466701072459676b31f9842d41336876 --- /dev/null +++ b/pyro/source/docs/README.md @@ -0,0 +1,26 @@ + + +# Documentation # +Pyro Documentation is supported by [Sphinx](http://www.sphinx-doc.org/en/stable/). +To build the docs, run from the toplevel directory: +``` +make docs +``` + +## Installation ## +``` +pip install -r requirements.txt +``` + +Note that you will need to install [graphviz](https://www.graphviz.org/) separately. + +## Workflow ## +To change the documentation, update the `*.rst` files in `source`. + +To build the docstrings, `sphinx-apidoc [options] -o [exclude_pattern, ...]` + +To build the html pages, `make html` diff --git a/pyro/source/docs/requirements.txt b/pyro/source/docs/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..de8870c9fe2d66ab6ee4c762b9d73704943e0426 --- /dev/null +++ b/pyro/source/docs/requirements.txt @@ -0,0 +1,15 @@ +# Copyright Contributors to the Pyro project. +# +# SPDX-License-Identifier: Apache-2.0 + +sphinx==4.2.0 +sphinx-rtd-theme==1.0.0 +graphviz>=0.8 +numpy>=1.7 +observations>=0.1.4 +opt_einsum>=2.3.2 +pyro-api>=0.1.1 +tqdm>=4.36 +funsor[torch] +setuptools +sphinx_copybutton diff --git a/pyro/source/docs/source/_static/css/pyro.css b/pyro/source/docs/source/_static/css/pyro.css new file mode 100644 index 0000000000000000000000000000000000000000..0561ba35e6f73c0e7bd42d223e274e11e14bc7a0 --- /dev/null +++ b/pyro/source/docs/source/_static/css/pyro.css @@ -0,0 +1,35 @@ +/* + * Copyright Contributors to the Pyro project. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +@import url("theme.css"); + +.wy-side-nav-search { + background-color: #565656; +} + +.wy-side-nav-search a { + margin: 0 +} + +.wy-side-nav-search > div.version { + color: #f26822; +} + +.wy-nav-top { + background: #404040; +} + +.wy-menu-vertical li.on a, .wy-menu-vertical li.current>a { + background: #ccc; +} + +.wy-side-nav-search input[type=text] { + border-color: #313131; +} + +.wy-side-nav-search>a img.logo, .wy-side-nav-search .wy-dropdown>a img.logo { + max-width: 60%; +} \ No newline at end of file diff --git a/pyro/source/docs/source/_static/img/favicon/android-icon-144x144.png b/pyro/source/docs/source/_static/img/favicon/android-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..632ce052d27f7dd44b7d214f70650ce9cf818eae Binary files /dev/null and b/pyro/source/docs/source/_static/img/favicon/android-icon-144x144.png differ diff --git a/pyro/source/docs/source/_static/img/favicon/android-icon-192x192.png b/pyro/source/docs/source/_static/img/favicon/android-icon-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..8b61241c209d2a9da058de5dea98dac1cf65879a Binary files /dev/null and b/pyro/source/docs/source/_static/img/favicon/android-icon-192x192.png differ diff --git a/pyro/source/docs/source/_static/img/favicon/android-icon-36x36.png b/pyro/source/docs/source/_static/img/favicon/android-icon-36x36.png new file mode 100644 index 0000000000000000000000000000000000000000..8f89d4a6bb031939e2cb65cfac0c547e606cebc0 Binary files /dev/null and b/pyro/source/docs/source/_static/img/favicon/android-icon-36x36.png differ diff --git a/pyro/source/docs/source/_static/img/favicon/android-icon-48x48.png b/pyro/source/docs/source/_static/img/favicon/android-icon-48x48.png new file mode 100644 index 0000000000000000000000000000000000000000..ca51d0209a3ae46c0c99a85d04c07ab38af1e844 Binary files /dev/null and b/pyro/source/docs/source/_static/img/favicon/android-icon-48x48.png differ diff --git a/pyro/source/docs/source/_static/img/favicon/android-icon-72x72.png b/pyro/source/docs/source/_static/img/favicon/android-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..aa6e36708dfcbf00e5c7800fde94dcfee0cff752 Binary files /dev/null and b/pyro/source/docs/source/_static/img/favicon/android-icon-72x72.png differ diff --git a/pyro/source/docs/source/_static/img/favicon/android-icon-96x96.png b/pyro/source/docs/source/_static/img/favicon/android-icon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..be45a91bdf6ed75495df2bfcbcb59a3e295651e9 Binary files /dev/null and b/pyro/source/docs/source/_static/img/favicon/android-icon-96x96.png differ diff --git a/pyro/source/docs/source/_static/img/favicon/apple-icon-114x114.png b/pyro/source/docs/source/_static/img/favicon/apple-icon-114x114.png new file mode 100644 index 0000000000000000000000000000000000000000..365d05dd9ada46cbdde4c9655f0a68bcb8474354 Binary files /dev/null and b/pyro/source/docs/source/_static/img/favicon/apple-icon-114x114.png differ diff --git a/pyro/source/docs/source/_static/img/favicon/apple-icon-120x120.png b/pyro/source/docs/source/_static/img/favicon/apple-icon-120x120.png new file mode 100644 index 0000000000000000000000000000000000000000..4438d892430024d5a352defdd8edaa809a6d80f7 Binary files /dev/null and b/pyro/source/docs/source/_static/img/favicon/apple-icon-120x120.png differ diff --git a/pyro/source/docs/source/_static/img/favicon/apple-icon-144x144.png b/pyro/source/docs/source/_static/img/favicon/apple-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..632ce052d27f7dd44b7d214f70650ce9cf818eae Binary files /dev/null and b/pyro/source/docs/source/_static/img/favicon/apple-icon-144x144.png differ diff --git a/pyro/source/docs/source/_static/img/favicon/apple-icon-152x152.png b/pyro/source/docs/source/_static/img/favicon/apple-icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..4210f1dca6b3b99758459320ce3f0896eaf9c8bb Binary files /dev/null and b/pyro/source/docs/source/_static/img/favicon/apple-icon-152x152.png differ diff --git a/pyro/source/docs/source/_static/img/favicon/apple-icon-180x180.png b/pyro/source/docs/source/_static/img/favicon/apple-icon-180x180.png new file mode 100644 index 0000000000000000000000000000000000000000..54537ee9b3744892ce3c71a125024718205b54e1 Binary files /dev/null and b/pyro/source/docs/source/_static/img/favicon/apple-icon-180x180.png differ diff --git a/pyro/source/docs/source/_static/img/favicon/apple-icon-57x57.png b/pyro/source/docs/source/_static/img/favicon/apple-icon-57x57.png new file mode 100644 index 0000000000000000000000000000000000000000..f1802ed49b34c7621af8dc7882af2c6210bb0649 Binary files /dev/null and b/pyro/source/docs/source/_static/img/favicon/apple-icon-57x57.png differ diff --git a/pyro/source/docs/source/_static/img/favicon/apple-icon-60x60.png b/pyro/source/docs/source/_static/img/favicon/apple-icon-60x60.png new file mode 100644 index 0000000000000000000000000000000000000000..30bc1a0ae522f8d36d22ab5f8669461b64f6ffb3 Binary files /dev/null and b/pyro/source/docs/source/_static/img/favicon/apple-icon-60x60.png differ diff --git a/pyro/source/docs/source/_static/img/favicon/apple-icon-72x72.png b/pyro/source/docs/source/_static/img/favicon/apple-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..aa6e36708dfcbf00e5c7800fde94dcfee0cff752 Binary files /dev/null and b/pyro/source/docs/source/_static/img/favicon/apple-icon-72x72.png differ diff --git a/pyro/source/docs/source/_static/img/favicon/apple-icon-76x76.png b/pyro/source/docs/source/_static/img/favicon/apple-icon-76x76.png new file mode 100644 index 0000000000000000000000000000000000000000..338efa9e2ad5b1794821c7d0a9709135de06b40f Binary files /dev/null and b/pyro/source/docs/source/_static/img/favicon/apple-icon-76x76.png differ diff --git a/pyro/source/docs/source/_static/img/favicon/apple-icon-precomposed.png b/pyro/source/docs/source/_static/img/favicon/apple-icon-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..28ad9eebaa38512367e33ebf1d2da4b9a1555f20 Binary files /dev/null and b/pyro/source/docs/source/_static/img/favicon/apple-icon-precomposed.png differ diff --git a/pyro/source/docs/source/_static/img/favicon/apple-icon.png b/pyro/source/docs/source/_static/img/favicon/apple-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..28ad9eebaa38512367e33ebf1d2da4b9a1555f20 Binary files /dev/null and b/pyro/source/docs/source/_static/img/favicon/apple-icon.png differ diff --git a/pyro/source/docs/source/_static/img/favicon/browserconfig.xml b/pyro/source/docs/source/_static/img/favicon/browserconfig.xml new file mode 100644 index 0000000000000000000000000000000000000000..6430a6715b97f091ede50013b796885d051d4678 --- /dev/null +++ b/pyro/source/docs/source/_static/img/favicon/browserconfig.xml @@ -0,0 +1,9 @@ + + + + +#ffffff \ No newline at end of file diff --git a/pyro/source/docs/source/_static/img/favicon/favicon-16x16.png b/pyro/source/docs/source/_static/img/favicon/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..d32cb005ebef7fca010292889d964e1e6d82508d Binary files /dev/null and b/pyro/source/docs/source/_static/img/favicon/favicon-16x16.png differ diff --git a/pyro/source/docs/source/_static/img/favicon/favicon-32x32.png b/pyro/source/docs/source/_static/img/favicon/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..29789eca28fc3166563752adcd944886b832cba3 Binary files /dev/null and b/pyro/source/docs/source/_static/img/favicon/favicon-32x32.png differ diff --git a/pyro/source/docs/source/_static/img/favicon/favicon-96x96.png b/pyro/source/docs/source/_static/img/favicon/favicon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..be45a91bdf6ed75495df2bfcbcb59a3e295651e9 Binary files /dev/null and b/pyro/source/docs/source/_static/img/favicon/favicon-96x96.png differ diff --git a/pyro/source/docs/source/_static/img/favicon/favicon.ico b/pyro/source/docs/source/_static/img/favicon/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..d636583b345e7a8b8dfe195bcb03a230bb6a908f Binary files /dev/null and b/pyro/source/docs/source/_static/img/favicon/favicon.ico differ diff --git a/pyro/source/docs/source/_static/img/favicon/manifest.json b/pyro/source/docs/source/_static/img/favicon/manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..013d4a6a53334fae827a32824eaf51a889396514 --- /dev/null +++ b/pyro/source/docs/source/_static/img/favicon/manifest.json @@ -0,0 +1,41 @@ +{ + "name": "App", + "icons": [ + { + "src": "\/android-icon-36x36.png", + "sizes": "36x36", + "type": "image\/png", + "density": "0.75" + }, + { + "src": "\/android-icon-48x48.png", + "sizes": "48x48", + "type": "image\/png", + "density": "1.0" + }, + { + "src": "\/android-icon-72x72.png", + "sizes": "72x72", + "type": "image\/png", + "density": "1.5" + }, + { + "src": "\/android-icon-96x96.png", + "sizes": "96x96", + "type": "image\/png", + "density": "2.0" + }, + { + "src": "\/android-icon-144x144.png", + "sizes": "144x144", + "type": "image\/png", + "density": "3.0" + }, + { + "src": "\/android-icon-192x192.png", + "sizes": "192x192", + "type": "image\/png", + "density": "4.0" + } + ] +} \ No newline at end of file diff --git a/pyro/source/docs/source/_static/img/favicon/ms-icon-144x144.png b/pyro/source/docs/source/_static/img/favicon/ms-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..632ce052d27f7dd44b7d214f70650ce9cf818eae Binary files /dev/null and b/pyro/source/docs/source/_static/img/favicon/ms-icon-144x144.png differ diff --git a/pyro/source/docs/source/_static/img/favicon/ms-icon-150x150.png b/pyro/source/docs/source/_static/img/favicon/ms-icon-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..607729ad68d9c33f6faceea3c72fd08398fe8ba0 Binary files /dev/null and b/pyro/source/docs/source/_static/img/favicon/ms-icon-150x150.png differ diff --git a/pyro/source/docs/source/_static/img/favicon/ms-icon-310x310.png b/pyro/source/docs/source/_static/img/favicon/ms-icon-310x310.png new file mode 100644 index 0000000000000000000000000000000000000000..2ca061752cc801eb3bb7796d880ff169892d63f3 Binary files /dev/null and b/pyro/source/docs/source/_static/img/favicon/ms-icon-310x310.png differ diff --git a/pyro/source/docs/source/_static/img/favicon/ms-icon-70x70.png b/pyro/source/docs/source/_static/img/favicon/ms-icon-70x70.png new file mode 100644 index 0000000000000000000000000000000000000000..1611f37549a01d41e3f6726a0b33e9b105b16bec Binary files /dev/null and b/pyro/source/docs/source/_static/img/favicon/ms-icon-70x70.png differ diff --git a/pyro/source/docs/source/_static/img/pyro_logo.png b/pyro/source/docs/source/_static/img/pyro_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..56e66ba4b120bf62068ab8b90849ac6f33dc7326 Binary files /dev/null and b/pyro/source/docs/source/_static/img/pyro_logo.png differ diff --git a/pyro/source/docs/source/_static/img/pyro_logo_small.png b/pyro/source/docs/source/_static/img/pyro_logo_small.png new file mode 100644 index 0000000000000000000000000000000000000000..5d5d05a14978d5f6211748ab5f17c1063f3d6587 Binary files /dev/null and b/pyro/source/docs/source/_static/img/pyro_logo_small.png differ diff --git a/pyro/source/docs/source/_static/img/pyro_logo_wide.png b/pyro/source/docs/source/_static/img/pyro_logo_wide.png new file mode 100644 index 0000000000000000000000000000000000000000..cdd87ba014b22478dcba566f30262d6480249293 Binary files /dev/null and b/pyro/source/docs/source/_static/img/pyro_logo_wide.png differ diff --git a/pyro/source/docs/source/_static/img/pyro_logo_with_text.png b/pyro/source/docs/source/_static/img/pyro_logo_with_text.png new file mode 100644 index 0000000000000000000000000000000000000000..d516120db2e362027907bd9962c477f82357da11 Binary files /dev/null and b/pyro/source/docs/source/_static/img/pyro_logo_with_text.png differ diff --git a/pyro/source/docs/source/conf.py b/pyro/source/docs/source/conf.py new file mode 100644 index 0000000000000000000000000000000000000000..4044ce650751548898ca4b10223f52b4206245dc --- /dev/null +++ b/pyro/source/docs/source/conf.py @@ -0,0 +1,226 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import os +import sys + +# import pkg_resources + +# -*- coding: utf-8 -*- +# +# Pyro documentation build configuration file, created by +# sphinx-quickstart on Thu Jun 15 17:16:14 2017. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +sys.path.insert(0, os.path.abspath("../..")) + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + "sphinx.ext.intersphinx", # + "sphinx.ext.todo", # + "sphinx.ext.mathjax", # + "sphinx.ext.ifconfig", # + "sphinx.ext.viewcode", # + "sphinx.ext.githubpages", # + "sphinx.ext.graphviz", # + "sphinx.ext.autodoc", + "sphinx.ext.doctest", + 'sphinx.ext.napoleon', + "sphinx_copybutton", +] + +# Disable documentation inheritance so as to avoid inheriting +# docstrings in a different format, e.g. when the parent class +# is a PyTorch class. + +autodoc_inherit_docstrings = False + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = ".rst" + +# The master toctree document. +master_doc = "index" + +# General information about the project. +project = u"Pyro" +copyright = u"2017-2018, Uber Technologies, Inc" +author = u"Uber AI Labs" + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. + +version = "" + +if "READTHEDOCS" not in os.environ: + # if developing locally, use pyro.__version__ as version + from pyro import __version__ # noqa: E402 + + version = __version__ + +# release version +release = version + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = "en" + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = "sphinx" + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = True + +# do not prepend module name to functions +add_module_names = False + +# -- Options for HTML output ---------------------------------------------- + +# logo +html_logo = "_static/img/pyro_logo_wide.png" + +# logo +html_favicon = "_static/img/favicon/favicon.ico" + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = "sphinx_rtd_theme" + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. + +html_theme_options = { + "navigation_depth": 3, + "logo_only": True, +} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ["_static"] +html_style = "css/pyro.css" + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = "Pyrodoc" + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, "Pyro.tex", u"Pyro Documentation", u"Uber AI Labs", "manual"), +] + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [(master_doc, "pyro", u"Pyro Documentation", [author], 1)] + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ( + master_doc, + "Pyro", + u"Pyro Documentation", + author, + "Pyro", + "Deep Universal Probabilistic Programming.", + "Miscellaneous", + ), +] + +# Example configuration for intersphinx: refer to the Python standard library. +intersphinx_mapping = { + "python": ("https://docs.python.org/3/", None), + "torch": ("https://pytorch.org/docs/main/", None), + "funsor": ("https://funsor.pyro.ai/en/stable/", None), + "opt_einsum": ("https://optimized-einsum.readthedocs.io/en/stable/", None), + "scipy": ("https://docs.scipy.org/doc/scipy/", None), + "Bio": ("https://biopython.org/docs/latest/", None), + "horovod": ("https://horovod.readthedocs.io/en/stable/", None), + "graphviz": ("https://graphviz.readthedocs.io/en/stable/", None), +} + +# document class constructors (__init__ methods): +""" comment out this functionality for now; +def skip(app, what, name, obj, skip, options): + if name == "__init__": + return False + return skip +""" + + +def setup(app): + app.add_css_file("css/pyro.css") + + +# app.connect("autodoc-skip-member", skip) + + +# @jpchen's hack to get rtd builder to install latest pytorch +# See similar line in the install section of .travis.yml +if "READTHEDOCS" in os.environ: + os.system("pip install numpy") + os.system( + "pip install torch==2.0+cpu torchvision==0.15.0+cpu " + "-f https://download.pytorch.org/whl/torch_stable.html" + ) diff --git a/pyro/source/docs/source/contrib.autoname.rst b/pyro/source/docs/source/contrib.autoname.rst new file mode 100644 index 0000000000000000000000000000000000000000..f5c9268cc95bd7a82d076021197e6cdfc1223980 --- /dev/null +++ b/pyro/source/docs/source/contrib.autoname.rst @@ -0,0 +1,26 @@ +Automatic Name Generation +========================== + +.. automodule:: pyro.contrib.autoname + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +Named Data Structures +--------------------- + +.. automodule:: pyro.contrib.autoname.named + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +Scoping +------- + +.. automodule:: pyro.contrib.autoname.scoping + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource diff --git a/pyro/source/docs/source/contrib.bnn.rst b/pyro/source/docs/source/contrib.bnn.rst new file mode 100644 index 0000000000000000000000000000000000000000..fcecae5ec8629c5a8e0836d69a5452a100d304d3 --- /dev/null +++ b/pyro/source/docs/source/contrib.bnn.rst @@ -0,0 +1,10 @@ +Bayesian Neural Networks +========================= + +.. automodule:: pyro.contrib.bnn + +HiddenLayer +------------------------- +.. automodule:: pyro.contrib.bnn.hidden_layer + :members: + :member-order: bysource diff --git a/pyro/source/docs/source/contrib.cevae.rst b/pyro/source/docs/source/contrib.cevae.rst new file mode 100644 index 0000000000000000000000000000000000000000..3be1d6a292754f089fc03dfaa9a27e1f1155cc84 --- /dev/null +++ b/pyro/source/docs/source/contrib.cevae.rst @@ -0,0 +1,82 @@ +Causal Effect VAE +================= + +.. automodule:: pyro.contrib.cevae + +CEVAE Class +----------- +.. autoclass:: pyro.contrib.cevae.CEVAE + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +CEVAE Components +---------------- +.. autoclass:: pyro.contrib.cevae.Model + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +.. autoclass:: pyro.contrib.cevae.Guide + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +.. autoclass:: pyro.contrib.cevae.TraceCausalEffect_ELBO + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +Utilities +--------- +.. autoclass:: pyro.contrib.cevae.FullyConnected + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +.. autoclass:: pyro.contrib.cevae.DistributionNet + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +.. autoclass:: pyro.contrib.cevae.BernoulliNet + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +.. autoclass:: pyro.contrib.cevae.ExponentialNet + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +.. autoclass:: pyro.contrib.cevae.LaplaceNet + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +.. autoclass:: pyro.contrib.cevae.NormalNet + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +.. autoclass:: pyro.contrib.cevae.StudentTNet + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +.. autoclass:: pyro.contrib.cevae.DiagNormalNet + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource diff --git a/pyro/source/docs/source/contrib.easyguide.rst b/pyro/source/docs/source/contrib.easyguide.rst new file mode 100644 index 0000000000000000000000000000000000000000..8979da90a92d7ce893ea3aba8b9e2be825866940 --- /dev/null +++ b/pyro/source/docs/source/contrib.easyguide.rst @@ -0,0 +1,25 @@ +Easy Custom Guides +================== + +.. automodule:: pyro.contrib.easyguide + +EasyGuide +--------- +.. autoclass:: pyro.contrib.easyguide.EasyGuide + :members: + :undoc-members: + :special-members: __call__ + :show-inheritance: + :member-order: bysource + +easy_guide +---------- +.. autofunction:: pyro.contrib.easyguide.easy_guide + +Group +----- +.. autoclass:: pyro.contrib.easyguide.easyguide.Group + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource diff --git a/pyro/source/docs/source/contrib.epidemiology.rst b/pyro/source/docs/source/contrib.epidemiology.rst new file mode 100644 index 0000000000000000000000000000000000000000..8bc1c92714b34dba13814f3a0ae5d150d721723f --- /dev/null +++ b/pyro/source/docs/source/contrib.epidemiology.rst @@ -0,0 +1,45 @@ +Epidemiology +============ +.. automodule:: pyro.contrib.epidemiology + +.. warning:: Code in ``pyro.contrib.epidemiology`` is under development. + This code makes no guarantee about maintaining backwards compatibility. + +``pyro.contrib.epidemiology`` provides a modeling language for a class of +stochastic discrete-time discrete-count compartmental models. This module +implements black-box **inference** (both Stochastic Variational Inference and +Hamiltonian Monte Carlo), **prediction** of latent variables, and +**forecasting** of future trajectories. + +For example usage see the following tutorials: + +- `Introduction `_ +- `Univariate models `_ +- `Regional models `_ +- `Inference via auxiliary variable HMC `_ + +Base Compartmental Model +------------------------ +.. automodule:: pyro.contrib.epidemiology.compartmental + :members: + :show-inheritance: + :member-order: bysource + +Example Models +-------------- +.. automodule:: pyro.contrib.epidemiology.models + +Distributions +------------- +.. automodule:: pyro.contrib.epidemiology.distributions + :members: + :show-inheritance: + :member-order: bysource + +.. autoclass:: pyro.distributions.CoalescentRateLikelihood + :members: + :show-inheritance: + :member-order: bysource + :special-members: __call__ + +.. autofunction:: pyro.distributions.coalescent.bio_phylo_to_times diff --git a/pyro/source/docs/source/contrib.examples.rst b/pyro/source/docs/source/contrib.examples.rst new file mode 100644 index 0000000000000000000000000000000000000000..65b2c0eb8fe8c5d672c0ad74b428062e9a90eeed --- /dev/null +++ b/pyro/source/docs/source/contrib.examples.rst @@ -0,0 +1,37 @@ +Pyro Examples +============= + +Datasets +-------- + +Multi MNIST +~~~~~~~~~~~ +.. automodule:: pyro.contrib.examples.multi_mnist + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +BART Ridership +~~~~~~~~~~~~~~ +.. automodule:: pyro.contrib.examples.bart + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +Nextstrain SARS-CoV-2 counts +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.. automodule:: pyro.contrib.examples.nextstrain + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +Utilities +--------- +.. automodule:: pyro.contrib.examples.util + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource diff --git a/pyro/source/docs/source/contrib.forecast.rst b/pyro/source/docs/source/contrib.forecast.rst new file mode 100644 index 0000000000000000000000000000000000000000..3571638d3e06759e1bb7f775fe41e90a1bc7b4fc --- /dev/null +++ b/pyro/source/docs/source/contrib.forecast.rst @@ -0,0 +1,57 @@ +Forecasting +=========== +.. automodule:: pyro.contrib.forecast + +``pyro.contrib.forecast`` is a lightweight framework for experimenting with a +restricted class of time series models and inference algorithms using familiar +Pyro modeling syntax and PyTorch neural networks. + +Models include hierarchical multivariate heavy-tailed time series of ~1000 time +steps and ~1000 separate series. Inference combines subsample-compatible +variational inference with Gaussian variable elimination based on the +:class:`~pyro.distributions.GaussianHMM` class. Inference using Hamiltonian Monte Carlo +sampling is also supported with :class:`~pyro.contrib.forecast.forecaster.HMCForecaster`. +Forecasts are in the form of joint posterior samples at multiple future time steps. + +Hierarchical models use the familiar :class:`~pyro.plate` syntax for +general hierarchical modeling in Pyro. Plates can be subsampled, enabling +training of joint models over thousands of time series. Multivariate +observations are handled via multivariate likelihoods like +:class:`~pyro.distributions.MultivariateNormal`, :class:`~pyro.distributions.GaussianHMM`, or +:class:`~pyro.distributions.LinearHMM`. Heavy tailed models are possible by +using :class:`~pyro.distributions.StudentT` or +:class:`~pyro.distributions.Stable` likelihoods, possibly together with +:class:`~pyro.distributions.LinearHMM` and reparameterizers including +:class:`~pyro.infer.reparam.studentt.StudentTReparam`, +:class:`~pyro.infer.reparam.stable.StableReparam`, and +:class:`~pyro.infer.reparam.hmm.LinearHMMReparam`. + +Seasonality can be handled using the helpers +:func:`~pyro.ops.tensor_utils.periodic_repeat`, +:func:`~pyro.ops.tensor_utils.periodic_cumsum`, and +:func:`~pyro.ops.tensor_utils.periodic_features`. + +See :mod:`pyro.contrib.timeseries` for ways to construct temporal Gaussian processes useful as likelihoods. + +For example usage see: + +- The `univariate forecasting tutorial `_ +- The `state space modeling tutorial `_ +- The `hierarchical forecasting tutorial `_ +- The `forecasting example `_ + +Forecaster Interface +--------------------- +.. automodule:: pyro.contrib.forecast.forecaster + :members: + :special-members: __call__ + :show-inheritance: + :member-order: bysource + +Evaluation +---------- +.. automodule:: pyro.contrib.forecast.evaluate + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource diff --git a/pyro/source/docs/source/contrib.funsor.rst b/pyro/source/docs/source/contrib.funsor.rst new file mode 100644 index 0000000000000000000000000000000000000000..90de151e868be9953cc552d9e04d2dc2611253b2 --- /dev/null +++ b/pyro/source/docs/source/contrib.funsor.rst @@ -0,0 +1,73 @@ +Funsor-based Pyro +========================== + + +Primitives +---------- + +.. automodule:: pyro.contrib.funsor + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +Effect handlers +--------------------- + +.. automodule:: pyro.contrib.funsor.handlers + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +.. automodule:: pyro.contrib.funsor.handlers.named_messenger + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +.. automodule:: pyro.contrib.funsor.handlers.primitives + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +.. automodule:: pyro.contrib.funsor.handlers.runtime + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +Inference algorithms +-------------------- + +.. automodule:: pyro.contrib.funsor.infer.elbo + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +.. automodule:: pyro.contrib.funsor.infer.trace_elbo + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +.. automodule:: pyro.contrib.funsor.infer.traceenum_elbo + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +.. automodule:: pyro.contrib.funsor.infer.tracetmc_elbo + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +.. automodule:: pyro.contrib.funsor.infer.discrete + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + diff --git a/pyro/source/docs/source/contrib.gp.rst b/pyro/source/docs/source/contrib.gp.rst new file mode 100644 index 0000000000000000000000000000000000000000..ddfe3398b274c20b5c1f6d5917e9d5031d401214 --- /dev/null +++ b/pyro/source/docs/source/contrib.gp.rst @@ -0,0 +1,89 @@ +Gaussian Processes +================== + +See the `Gaussian Processes tutorial `_ for an introduction. + +.. automodule:: pyro.contrib.gp + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +Models +~~~~~~ + +GPModel +------- +.. automodule:: pyro.contrib.gp.models.model + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +GPRegression +------------ +.. automodule:: pyro.contrib.gp.models.gpr + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +SparseGPRegression +------------------ +.. automodule:: pyro.contrib.gp.models.sgpr + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +VariationalGP +------------- +.. automodule:: pyro.contrib.gp.models.vgp + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +VariationalSparseGP +------------------- +.. automodule:: pyro.contrib.gp.models.vsgp + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +GPLVM +----- +.. automodule:: pyro.contrib.gp.models.gplvm + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +Kernels +~~~~~~~ + +.. automodule:: pyro.contrib.gp.kernels + +Likelihoods +~~~~~~~~~~~ + +.. automodule:: pyro.contrib.gp.likelihoods + +Parameterized +~~~~~~~~~~~~~ + +.. automodule:: pyro.contrib.gp.parameterized + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +Util +~~~~ + +.. automodule:: pyro.contrib.gp.util + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource diff --git a/pyro/source/docs/source/contrib.minipyro.rst b/pyro/source/docs/source/contrib.minipyro.rst new file mode 100644 index 0000000000000000000000000000000000000000..5a131211791b4477b3632701ef8bc2f2c9f6aca7 --- /dev/null +++ b/pyro/source/docs/source/contrib.minipyro.rst @@ -0,0 +1,7 @@ +Minipyro +======== +.. automodule:: pyro.contrib.minipyro + :members: + :undoc-members: + :special-members: __call__ + :show-inheritance: diff --git a/pyro/source/docs/source/contrib.mue.rst b/pyro/source/docs/source/contrib.mue.rst new file mode 100644 index 0000000000000000000000000000000000000000..116279c3c6a0f7003392ca081e1011b2b120521b --- /dev/null +++ b/pyro/source/docs/source/contrib.mue.rst @@ -0,0 +1,44 @@ +Biological Sequence Models with MuE +=================================== +.. automodule:: pyro.contrib.mue + +.. warning:: Code in ``pyro.contrib.mue`` is under development. + This code makes no guarantee about maintaining backwards compatibility. + +``pyro.contrib.mue`` provides modeling tools for working with biological +sequence data. In particular it implements MuE distributions, which are used as +a fully generative alternative to multiple sequence alignment-based +preprocessing. + +Reference: +MuE models were described in Weinstein and Marks (2021), +https://www.biorxiv.org/content/10.1101/2020.07.31.231381v2. + +Example MuE Models +------------------ +.. automodule:: pyro.contrib.mue.models + :members: + :show-inheritance: + :member-order: bysource + +State Arrangers for Parameterizing MuEs +--------------------------------------- +.. automodule:: pyro.contrib.mue.statearrangers + :members: + :show-inheritance: + :member-order: bysource + +Missing or Variable Length Data HMM +----------------------------------- +.. automodule:: pyro.contrib.mue.missingdatahmm + :members: + :show-inheritance: + :member-order: bysource + + +Biosequence Dataset Loading +--------------------------- +.. automodule:: pyro.contrib.mue.dataloaders + :members: + :show-inheritance: + :member-order: bysource diff --git a/pyro/source/docs/source/contrib.oed.rst b/pyro/source/docs/source/contrib.oed.rst new file mode 100644 index 0000000000000000000000000000000000000000..ff140587d71013c9e1601df56cd04d1a0b6f85b9 --- /dev/null +++ b/pyro/source/docs/source/contrib.oed.rst @@ -0,0 +1,18 @@ +Optimal Experiment Design +========================= + +.. automodule:: pyro.contrib.oed + +Expected Information Gain +------------------------- +.. automodule:: pyro.contrib.oed.eig + :members: + :member-order: bysource + +Generalised Linear Mixed Models +------------------------------- +.. automodule:: pyro.contrib.oed.glmm + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource diff --git a/pyro/source/docs/source/contrib.randomvariable.rst b/pyro/source/docs/source/contrib.randomvariable.rst new file mode 100644 index 0000000000000000000000000000000000000000..a6313bc39514b971b56b19bd84eb985cc74ad088 --- /dev/null +++ b/pyro/source/docs/source/contrib.randomvariable.rst @@ -0,0 +1,11 @@ +Random Variables +================ + +.. automodule:: pyro.contrib.randomvariable + +Random Variable +--------------- +.. autoclass:: pyro.contrib.randomvariable.random_variable.RandomVariable + :members: + :undoc-members: + :show-inheritance: diff --git a/pyro/source/docs/source/contrib.timeseries.rst b/pyro/source/docs/source/contrib.timeseries.rst new file mode 100644 index 0000000000000000000000000000000000000000..fa720860e2999ad6f58c0486ce6dc49339c5b309 --- /dev/null +++ b/pyro/source/docs/source/contrib.timeseries.rst @@ -0,0 +1,35 @@ +Time Series +=========== +.. automodule:: pyro.contrib.timeseries + +See the `GP example `_ for example usage. + +Abstract Models +--------------- +.. automodule:: pyro.contrib.timeseries.base + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +Gaussian Processes +------------------ +.. automodule:: pyro.contrib.timeseries.gp + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +Linear Gaussian State Space Models +---------------------------------- +.. automodule:: pyro.contrib.timeseries.lgssm + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +.. automodule:: pyro.contrib.timeseries.lgssmgp + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource diff --git a/pyro/source/docs/source/contrib.tracking.rst b/pyro/source/docs/source/contrib.tracking.rst new file mode 100644 index 0000000000000000000000000000000000000000..a774d6baa68888640a737e78824b29bcd37b295a --- /dev/null +++ b/pyro/source/docs/source/contrib.tracking.rst @@ -0,0 +1,40 @@ +Tracking +======== + +.. automodule:: pyro.contrib.tracking + +Data Association +---------------- +.. automodule:: pyro.contrib.tracking.assignment + :members: + :member-order: bysource + +Distributions +------------- +.. automodule:: pyro.contrib.tracking.distributions + :members: + :member-order: bysource + +Dynamic Models +-------------- +.. automodule:: pyro.contrib.tracking.dynamic_models + :members: + :member-order: bysource + +Extended Kalman Filter +---------------------- +.. automodule:: pyro.contrib.tracking.extended_kalman_filter + :members: + :member-order: bysource + +Hashing +------- +.. automodule:: pyro.contrib.tracking.hashing + :members: + :member-order: bysource + +Measurements +------------ +.. automodule:: pyro.contrib.tracking.measurements + :members: + :member-order: bysource diff --git a/pyro/source/docs/source/contrib.zuko.rst b/pyro/source/docs/source/contrib.zuko.rst new file mode 100644 index 0000000000000000000000000000000000000000..c7f2dbe7e1cc79013a2275acaa2a99da85ab7bdd --- /dev/null +++ b/pyro/source/docs/source/contrib.zuko.rst @@ -0,0 +1,5 @@ +Zuko in Pyro +============ + +.. automodule:: pyro.contrib.zuko + :members: diff --git a/pyro/source/docs/source/distributions.rst b/pyro/source/docs/source/distributions.rst new file mode 100644 index 0000000000000000000000000000000000000000..2db4671660558cc414c299cc49666dcea4139e87 --- /dev/null +++ b/pyro/source/docs/source/distributions.rst @@ -0,0 +1,898 @@ +Distributions +============= + +.. toctree:: + :glob: + :maxdepth: 2 + :caption: Contents: + +PyTorch Distributions +~~~~~~~~~~~~~~~~~~~~~ + +Most distributions in Pyro are thin wrappers around PyTorch distributions. +For details on the PyTorch distribution interface, see +:class:`torch.distributions.distribution.Distribution`. +For differences between the Pyro and PyTorch interfaces, see +:class:`~pyro.distributions.torch_distribution.TorchDistributionMixin`. + +.. automodule:: pyro.distributions.torch + +Pyro Distributions +~~~~~~~~~~~~~~~~~~ + +Abstract Distribution +--------------------- + +.. autoclass:: pyro.distributions.Distribution + :members: + :undoc-members: + :special-members: __call__ + :show-inheritance: + :member-order: bysource + +TorchDistributionMixin +---------------------- + +.. autoclass:: pyro.distributions.torch_distribution.TorchDistributionMixin + :members: + :undoc-members: + :special-members: __call__ + :show-inheritance: + :member-order: bysource + +TorchDistribution +----------------- + +.. autoclass:: pyro.distributions.TorchDistribution + :members: + :undoc-members: + :special-members: __call__ + :show-inheritance: + :member-order: bysource + +AffineBeta +--------------------- +.. autoclass:: pyro.distributions.AffineBeta + :members: + :undoc-members: + :show-inheritance: + +AsymmetricLaplace +--------------------- +.. autoclass:: pyro.distributions.AsymmetricLaplace + :members: + :undoc-members: + :show-inheritance: + +AVFMultivariateNormal +--------------------- +.. autoclass:: pyro.distributions.AVFMultivariateNormal + :members: + :undoc-members: + :show-inheritance: + +BetaBinomial +------------ +.. autoclass:: pyro.distributions.BetaBinomial + :members: + :undoc-members: + :show-inheritance: + +CoalescentTimes +--------------- +.. autoclass:: pyro.distributions.CoalescentTimes + :members: + :undoc-members: + :show-inheritance: + +CoalescentTimesWithRate +----------------------- +.. autoclass:: pyro.distributions.CoalescentTimesWithRate + :members: + :undoc-members: + :show-inheritance: + +ConditionalDistribution +----------------------- +.. autoclass:: pyro.distributions.ConditionalDistribution + :members: + :undoc-members: + :show-inheritance: + +ConditionalTransformedDistribution +---------------------------------- +.. autoclass:: pyro.distributions.ConditionalTransformedDistribution + :members: + :undoc-members: + :show-inheritance: + +Delta +----- +.. autoclass:: pyro.distributions.Delta + :members: + :undoc-members: + :show-inheritance: + +DirichletMultinomial +-------------------- +.. autoclass:: pyro.distributions.DirichletMultinomial + :members: + :undoc-members: + :show-inheritance: + +DiscreteHMM +----------- +.. autoclass:: pyro.distributions.DiscreteHMM + :members: + :undoc-members: + :show-inheritance: + +EmpiricalDistribution +--------------------- +.. autoclass:: pyro.distributions.Empirical + :members: + :undoc-members: + :show-inheritance: + +ExtendedBetaBinomial +-------------------- +.. autoclass:: pyro.distributions.ExtendedBetaBinomial + :members: + :undoc-members: + :show-inheritance: + +ExtendedBinomial +---------------- +.. autoclass:: pyro.distributions.ExtendedBinomial + :members: + :undoc-members: + :show-inheritance: + +FoldedDistribution +--------------------- +.. autoclass:: pyro.distributions.FoldedDistribution + :members: + :undoc-members: + :show-inheritance: + +GammaGaussianHMM +---------------- +.. autoclass:: pyro.distributions.GammaGaussianHMM + :members: + :undoc-members: + :show-inheritance: + +GammaPoisson +------------ +.. autoclass:: pyro.distributions.GammaPoisson + :members: + :undoc-members: + :show-inheritance: + +GaussianHMM +----------- +.. autoclass:: pyro.distributions.GaussianHMM + :members: + :undoc-members: + :show-inheritance: + +GaussianMRF +----------- +.. autoclass:: pyro.distributions.GaussianMRF + :members: + :undoc-members: + :show-inheritance: + +GaussianScaleMixture +-------------------- +.. autoclass:: pyro.distributions.GaussianScaleMixture + :members: + :undoc-members: + :show-inheritance: + +GroupedNormalNormal +------------------- +.. autoclass:: pyro.distributions.GroupedNormalNormal + :members: + :undoc-members: + :show-inheritance: + +ImproperUniform +--------------- +.. autoclass:: pyro.distributions.improper_uniform.ImproperUniform + :members: + :undoc-members: + :show-inheritance: + +IndependentHMM +-------------- +.. autoclass:: pyro.distributions.IndependentHMM + :members: + :undoc-members: + :show-inheritance: + +InverseGamma +------------ +.. autoclass:: pyro.distributions.InverseGamma + :members: + :undoc-members: + :show-inheritance: + +LinearHMM +--------- +.. autoclass:: pyro.distributions.LinearHMM + :members: + :undoc-members: + :show-inheritance: + +LKJ +--- +.. autoclass:: pyro.distributions.LKJ + :members: + :undoc-members: + :show-inheritance: + +LKJCorrCholesky +--------------- +.. autoclass:: pyro.distributions.LKJCorrCholesky + :members: + :undoc-members: + :show-inheritance: + +LogNormalNegativeBinomial +------------------------- +.. autoclass:: pyro.distributions.LogNormalNegativeBinomial + :members: + :undoc-members: + :show-inheritance: + +Logistic +-------- +.. autoclass:: pyro.distributions.Logistic + :members: + :undoc-members: + :show-inheritance: + +MaskedDistribution +------------------ +.. autoclass:: pyro.distributions.MaskedDistribution + :members: + :undoc-members: + :show-inheritance: + +MaskedMixture +------------- +.. autoclass:: pyro.distributions.MaskedMixture + :members: + :undoc-members: + :show-inheritance: + +MixtureOfDiagNormals +-------------------- +.. autoclass:: pyro.distributions.MixtureOfDiagNormals + :members: + :undoc-members: + :show-inheritance: + +MixtureOfDiagNormalsSharedCovariance +------------------------------------ +.. autoclass:: pyro.distributions.MixtureOfDiagNormalsSharedCovariance + :members: + :undoc-members: + :show-inheritance: + +MultivariateStudentT +-------------------- +.. autoclass:: pyro.distributions.MultivariateStudentT + :members: + :undoc-members: + :show-inheritance: + +NanMaskedNormal +--------------- +.. autoclass:: pyro.distributions.NanMaskedNormal + :members: + :undoc-members: + :show-inheritance: + +NanMaskedMultivariateNormal +--------------------------- +.. autoclass:: pyro.distributions.NanMaskedMultivariateNormal + :members: + :undoc-members: + :show-inheritance: + +OMTMultivariateNormal +--------------------- +.. autoclass:: pyro.distributions.OMTMultivariateNormal + :members: + :undoc-members: + :show-inheritance: + +OneOneMatching +-------------- +.. autoclass:: pyro.distributions.OneOneMatching + :members: + :undoc-members: + :show-inheritance: + +OneTwoMatching +-------------- +.. autoclass:: pyro.distributions.OneTwoMatching + :members: + :undoc-members: + :show-inheritance: + +OrderedLogistic +------------------------------- +.. autoclass:: pyro.distributions.OrderedLogistic + :members: + :undoc-members: + :show-inheritance: + +ProjectedNormal +--------------- +.. autoclass:: pyro.distributions.ProjectedNormal + :members: + :undoc-members: + :show-inheritance: + +RelaxedBernoulliStraightThrough +------------------------------- +.. autoclass:: pyro.distributions.RelaxedBernoulliStraightThrough + :members: + :undoc-members: + :show-inheritance: + +RelaxedOneHotCategoricalStraightThrough +--------------------------------------- +.. autoclass:: pyro.distributions.RelaxedOneHotCategoricalStraightThrough + :members: + :undoc-members: + :show-inheritance: + +Rejector +-------- +.. autoclass:: pyro.distributions.Rejector + :members: + :undoc-members: + :show-inheritance: + +SineBivariateVonMises +--------------------- +.. autoclass:: pyro.distributions.SineBivariateVonMises + :members: + :undoc-members: + :show-inheritance: + +SineSkewed +---------- +.. autoclass:: pyro.distributions.SineSkewed + :members: + :undoc-members: + :show-inheritance: + +SkewLogistic +------------ +.. autoclass:: pyro.distributions.SkewLogistic + :members: + :undoc-members: + :show-inheritance: + +SoftAsymmetricLaplace +--------------------- +.. autoclass:: pyro.distributions.SoftAsymmetricLaplace + :members: + :undoc-members: + :show-inheritance: + +SoftLaplace +------------- +.. autoclass:: pyro.distributions.SoftLaplace + :members: + :undoc-members: + :show-inheritance: + +SpanningTree +------------ +.. autoclass:: pyro.distributions.SpanningTree + :members: + :undoc-members: + :show-inheritance: + +Stable +------ +.. autoclass:: pyro.distributions.Stable + :members: + :undoc-members: + :show-inheritance: + +StableWithLogProb +----------------- +.. autoclass:: pyro.distributions.StableWithLogProb + :members: + :undoc-members: + :show-inheritance: + +TruncatedPolyaGamma +------------------- +.. autoclass:: pyro.distributions.TruncatedPolyaGamma + :members: + :undoc-members: + :show-inheritance: + +Unit +---- +.. autoclass:: pyro.distributions.Unit + :members: + :undoc-members: + :show-inheritance: + +VonMises3D +---------- +.. autoclass:: pyro.distributions.VonMises3D + :members: + :undoc-members: + :show-inheritance: + +ZeroInflatedDistribution +------------------------ +.. autoclass:: pyro.distributions.ZeroInflatedDistribution + :members: + :undoc-members: + :show-inheritance: + +ZeroInflatedNegativeBinomial +---------------------------- +.. autoclass:: pyro.distributions.ZeroInflatedNegativeBinomial + :members: + :undoc-members: + :show-inheritance: + +ZeroInflatedPoisson +------------------- +.. autoclass:: pyro.distributions.ZeroInflatedPoisson + :members: + :undoc-members: + :show-inheritance: + +Transforms +~~~~~~~~~~ + +ConditionalTransform +-------------------- +.. autoclass:: pyro.distributions.ConditionalTransform + :members: + :undoc-members: + :show-inheritance: + +CholeskyTransform +----------------- +.. autoclass:: pyro.distributions.transforms.CholeskyTransform + :members: + :undoc-members: + :show-inheritance: + +CorrMatrixCholeskyTransform +--------------------------- +.. autoclass:: pyro.distributions.transforms.CorrMatrixCholeskyTransform + :members: + :undoc-members: + :show-inheritance: + +DiscreteCosineTransform +----------------------- +.. autoclass:: pyro.distributions.transforms.DiscreteCosineTransform + :members: + :undoc-members: + :show-inheritance: + +ELUTransform +------------ +.. autoclass:: pyro.distributions.transforms.ELUTransform + :members: + :undoc-members: + :show-inheritance: + +HaarTransform +------------- +.. autoclass:: pyro.distributions.transforms.HaarTransform + :members: + :undoc-members: + :show-inheritance: + +LeakyReLUTransform +------------------ +.. autoclass:: pyro.distributions.transforms.LeakyReLUTransform + :members: + :undoc-members: + :show-inheritance: + +LowerCholeskyAffine +------------------- +.. autoclass:: pyro.distributions.transforms.LowerCholeskyAffine + :members: + :undoc-members: + :show-inheritance: + +Normalize +--------- +.. autoclass:: pyro.distributions.transforms.Normalize + :members: + :undoc-members: + :show-inheritance: + +OrderedTransform +---------------- +.. autoclass:: pyro.distributions.transforms.OrderedTransform + :members: + :undoc-members: + :show-inheritance: + +Permute +------- +.. autoclass:: pyro.distributions.transforms.Permute + :members: + :undoc-members: + :show-inheritance: + +PositivePowerTransform +---------------------- +.. autoclass:: pyro.distributions.transforms.PositivePowerTransform + :members: + :undoc-members: + :show-inheritance: + +SimplexToOrderedTransform +------------------------- +.. autoclass:: pyro.distributions.transforms.SimplexToOrderedTransform + :members: + :undoc-members: + :show-inheritance: + +SoftplusLowerCholeskyTransform +------------------------------ +.. autoclass:: pyro.distributions.transforms.SoftplusLowerCholeskyTransform + :members: + :undoc-members: + :show-inheritance: + +SoftplusTransform +----------------- +.. autoclass:: pyro.distributions.transforms.SoftplusTransform + :members: + :undoc-members: + :show-inheritance: + +UnitLowerCholeskyTransform +-------------------------- +.. autoclass:: pyro.distributions.transforms.UnitLowerCholeskyTransform + :members: + :undoc-members: + :show-inheritance: + +TransformModules +~~~~~~~~~~~~~~~~ + +AffineAutoregressive +-------------------- +.. autoclass:: pyro.distributions.transforms.AffineAutoregressive + :members: + :undoc-members: + :show-inheritance: + +AffineCoupling +-------------- +.. autoclass:: pyro.distributions.transforms.AffineCoupling + :members: + :undoc-members: + :show-inheritance: + +BatchNorm +--------- +.. autoclass:: pyro.distributions.transforms.BatchNorm + :members: + :undoc-members: + :show-inheritance: + +BlockAutoregressive +------------------- +.. autoclass:: pyro.distributions.transforms.BlockAutoregressive + :members: + :undoc-members: + :show-inheritance: + +ConditionalAffineAutoregressive +------------------------------- +.. autoclass:: pyro.distributions.transforms.ConditionalAffineAutoregressive + :members: + :undoc-members: + :show-inheritance: + +ConditionalAffineCoupling +------------------------- +.. autoclass:: pyro.distributions.transforms.ConditionalAffineCoupling + :members: + :undoc-members: + :show-inheritance: + +ConditionalGeneralizedChannelPermute +------------------------------------ +.. autoclass:: pyro.distributions.transforms.ConditionalGeneralizedChannelPermute + :members: + :undoc-members: + :show-inheritance: + +ConditionalHouseholder +---------------------- +.. autoclass:: pyro.distributions.transforms.ConditionalHouseholder + :members: + :undoc-members: + :show-inheritance: + +ConditionalMatrixExponential +---------------------------- +.. autoclass:: pyro.distributions.transforms.ConditionalMatrixExponential + :members: + :undoc-members: + :show-inheritance: + +ConditionalNeuralAutoregressive +------------------------------- +.. autoclass:: pyro.distributions.transforms.ConditionalNeuralAutoregressive + :members: + :undoc-members: + :show-inheritance: + +ConditionalPlanar +----------------- +.. autoclass:: pyro.distributions.transforms.ConditionalPlanar + :members: + :undoc-members: + :show-inheritance: + +ConditionalRadial +----------------- +.. autoclass:: pyro.distributions.transforms.ConditionalRadial + :members: + :undoc-members: + :show-inheritance: + +ConditionalSpline +----------------- +.. autoclass:: pyro.distributions.transforms.ConditionalSpline + :members: + :undoc-members: + :show-inheritance: + +ConditionalSplineAutoregressive +------------------------------- +.. autoclass:: pyro.distributions.transforms.ConditionalSplineAutoregressive + :members: + :undoc-members: + :show-inheritance: + +ConditionalTransformModule +-------------------------- +.. autoclass:: pyro.distributions.ConditionalTransformModule + :members: + :undoc-members: + :show-inheritance: + +GeneralizedChannelPermute +------------------------- +.. autoclass:: pyro.distributions.transforms.GeneralizedChannelPermute + :members: + :undoc-members: + :show-inheritance: + +Householder +----------- +.. autoclass:: pyro.distributions.transforms.Householder + :members: + :undoc-members: + :show-inheritance: + +MatrixExponential +----------------- +.. autoclass:: pyro.distributions.transforms.MatrixExponential + :members: + :undoc-members: + :show-inheritance: + +NeuralAutoregressive +-------------------- +.. autoclass:: pyro.distributions.transforms.NeuralAutoregressive + :members: + :undoc-members: + :show-inheritance: + +Planar +------ +.. autoclass:: pyro.distributions.transforms.Planar + :members: + :undoc-members: + :show-inheritance: + +Polynomial +---------- +.. autoclass:: pyro.distributions.transforms.Polynomial + :members: + :undoc-members: + :show-inheritance: + +Radial +------ +.. autoclass:: pyro.distributions.transforms.Radial + :members: + :undoc-members: + :show-inheritance: + +Spline +------ +.. autoclass:: pyro.distributions.transforms.Spline + :members: + :undoc-members: + :show-inheritance: + +SplineAutoregressive +-------------------- +.. autoclass:: pyro.distributions.transforms.SplineAutoregressive + :members: + :undoc-members: + :show-inheritance: + +SplineCoupling +-------------- +.. autoclass:: pyro.distributions.transforms.SplineCoupling + :members: + :undoc-members: + :show-inheritance: + +Sylvester +--------- +.. autoclass:: pyro.distributions.transforms.Sylvester + :members: + :undoc-members: + :show-inheritance: + +TransformModule +--------------- +.. autoclass:: pyro.distributions.TransformModule + :members: + :undoc-members: + :show-inheritance: + +ComposeTransformModule +---------------------- +.. autoclass:: pyro.distributions.ComposeTransformModule + :members: + :undoc-members: + :show-inheritance: + +Transform Factories +~~~~~~~~~~~~~~~~~~~ + +Each :class:`~torch.distributions.transforms.Transform` and :class:`~pyro.distributions.TransformModule` includes a corresponding helper function in lower case that inputs, at minimum, the input dimensions of the transform, and possibly additional arguments to customize the transform in an intuitive way. The purpose of these helper functions is to hide from the user whether or not the transform requires the construction of a hypernet, and if so, the input and output dimensions of that hypernet. + + +iterated +-------- +.. autofunction:: pyro.distributions.transforms.iterated + +affine_autoregressive +--------------------- +.. autofunction:: pyro.distributions.transforms.affine_autoregressive + +affine_coupling +--------------- +.. autofunction:: pyro.distributions.transforms.affine_coupling + +batchnorm +--------- +.. autofunction:: pyro.distributions.transforms.batchnorm + +block_autoregressive +-------------------- +.. autofunction:: pyro.distributions.transforms.block_autoregressive + +conditional_affine_autoregressive +--------------------------------- +.. autofunction:: pyro.distributions.transforms.conditional_affine_autoregressive + +conditional_affine_coupling +--------------------------- +.. autofunction:: pyro.distributions.transforms.conditional_affine_coupling + +conditional_generalized_channel_permute +--------------------------------------- +.. autofunction:: pyro.distributions.transforms.conditional_generalized_channel_permute + +conditional_householder +----------------------- +.. autofunction:: pyro.distributions.transforms.conditional_householder + +conditional_matrix_exponential +------------------------------ +.. autofunction:: pyro.distributions.transforms.conditional_matrix_exponential + +conditional_neural_autoregressive +--------------------------------- +.. autofunction:: pyro.distributions.transforms.conditional_neural_autoregressive + +conditional_planar +------------------ +.. autofunction:: pyro.distributions.transforms.conditional_planar + +conditional_radial +------------------ +.. autofunction:: pyro.distributions.transforms.conditional_radial + +conditional_spline +------------------ +.. autofunction:: pyro.distributions.transforms.conditional_spline + +conditional_spline_autoregressive +--------------------------------- +.. autofunction:: pyro.distributions.transforms.conditional_spline_autoregressive + +elu +--- +.. autofunction:: pyro.distributions.transforms.elu + +generalized_channel_permute +--------------------------- +.. autofunction:: pyro.distributions.transforms.generalized_channel_permute + +householder +----------- +.. autofunction:: pyro.distributions.transforms.householder + +leaky_relu +---------- +.. autofunction:: pyro.distributions.transforms.leaky_relu + +matrix_exponential +------------------ +.. autofunction:: pyro.distributions.transforms.matrix_exponential + +neural_autoregressive +--------------------- +.. autofunction:: pyro.distributions.transforms.neural_autoregressive + +permute +------- +.. autofunction:: pyro.distributions.transforms.permute + +planar +------ +.. autofunction:: pyro.distributions.transforms.planar + +polynomial +---------- +.. autofunction:: pyro.distributions.transforms.polynomial + +radial +------ +.. autofunction:: pyro.distributions.transforms.radial + +spline +------ +.. autofunction:: pyro.distributions.transforms.spline + +spline_autoregressive +--------------------- +.. autofunction:: pyro.distributions.transforms.spline_autoregressive + +spline_coupling +--------------- +.. autofunction:: pyro.distributions.transforms.spline_coupling + +sylvester +--------- +.. autofunction:: pyro.distributions.transforms.sylvester + + +Constraints +~~~~~~~~~~~ +.. automodule:: pyro.distributions.constraints diff --git a/pyro/source/docs/source/getting_started.rst b/pyro/source/docs/source/getting_started.rst new file mode 100644 index 0000000000000000000000000000000000000000..0640b44ad9e40671c48eb0bef30571cfec190f80 --- /dev/null +++ b/pyro/source/docs/source/getting_started.rst @@ -0,0 +1,10 @@ +Getting Started +=============== + + - `Install Pyro `_. + + - Learn the basic concepts of Pyro: + `models and inference `_ + + - Dive in to other `tutorials `_ and + `examples `_. diff --git a/pyro/source/docs/source/index.rst b/pyro/source/docs/source/index.rst new file mode 100644 index 0000000000000000000000000000000000000000..a5104fb9bcf1ce1a45ed8537bdcdade8805aef0c --- /dev/null +++ b/pyro/source/docs/source/index.rst @@ -0,0 +1,57 @@ +.. Pyro documentation master file, created by + sphinx-quickstart on Thu Jun 15 17:16:14 2017. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +:github_url: https://github.com/pyro-ppl/pyro + +Pyro Documentation +================================ + +.. toctree:: + :glob: + :maxdepth: 2 + :caption: Pyro Core: + + getting_started + primitives + inference + distributions + parameters + nn + optimization + poutine + ops + settings + testing + +.. toctree:: + :glob: + :maxdepth: 2 + :caption: Contributed Code: + + contrib.autoname + contrib.bnn + contrib.cevae + contrib.easyguide + contrib.epidemiology + contrib.examples + contrib.forecast + contrib.funsor + contrib.gp + contrib.minipyro + contrib.mue + contrib.oed + contrib.randomvariable + contrib.timeseries + contrib.tracking + contrib.zuko + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`search` + +.. * :ref:`modindex` diff --git a/pyro/source/docs/source/infer.autoguide.rst b/pyro/source/docs/source/infer.autoguide.rst new file mode 100644 index 0000000000000000000000000000000000000000..aaa02a93a5999e89999eb4ce152940f11805eff1 --- /dev/null +++ b/pyro/source/docs/source/infer.autoguide.rst @@ -0,0 +1,169 @@ +Automatic Guide Generation +========================== + +.. automodule:: pyro.infer.autoguide + +AutoGuide +--------- +.. autoclass:: pyro.infer.autoguide.AutoGuide + :members: + :undoc-members: + :member-order: bysource + :show-inheritance: + +AutoGuideList +------------- +.. autoclass:: pyro.infer.autoguide.AutoGuideList + :members: + :undoc-members: + :member-order: bysource + :show-inheritance: + +AutoCallable +------------ +.. autoclass:: pyro.infer.autoguide.AutoCallable + :members: + :undoc-members: + :member-order: bysource + :show-inheritance: + +AutoNormal +---------- +.. autoclass:: pyro.infer.autoguide.AutoNormal + :members: + :undoc-members: + :member-order: bysource + :show-inheritance: + +AutoDelta +--------- +.. autoclass:: pyro.infer.autoguide.AutoDelta + :members: + :undoc-members: + :member-order: bysource + :show-inheritance: + +AutoContinuous +-------------- +.. autoclass:: pyro.infer.autoguide.AutoContinuous + :members: + :undoc-members: + :member-order: bysource + :show-inheritance: + +AutoMultivariateNormal +---------------------- +.. autoclass:: pyro.infer.autoguide.AutoMultivariateNormal + :members: + :undoc-members: + :member-order: bysource + :show-inheritance: + +AutoDiagonalNormal +------------------ +.. autoclass:: pyro.infer.autoguide.AutoDiagonalNormal + :members: + :undoc-members: + :member-order: bysource + :show-inheritance: + +AutoLowRankMultivariateNormal +----------------------------- +.. autoclass:: pyro.infer.autoguide.AutoLowRankMultivariateNormal + :members: + :undoc-members: + :member-order: bysource + :show-inheritance: + + +AutoNormalizingFlow +------------------- +.. autoclass:: pyro.infer.autoguide.AutoNormalizingFlow + :members: + :undoc-members: + :member-order: bysource + :show-inheritance: + + +AutoIAFNormal +----------------------------- +.. autoclass:: pyro.infer.autoguide.AutoIAFNormal + :members: + :undoc-members: + :member-order: bysource + :show-inheritance: + +AutoLaplaceApproximation +----------------------------- +.. autoclass:: pyro.infer.autoguide.AutoLaplaceApproximation + :members: + :undoc-members: + :member-order: bysource + :show-inheritance: + +AutoDiscreteParallel +-------------------- +.. autoclass:: pyro.infer.autoguide.AutoDiscreteParallel + :members: + :undoc-members: + :member-order: bysource + :show-inheritance: + +AutoStructured +-------------------- +.. autoclass:: pyro.infer.autoguide.AutoStructured + :members: + :undoc-members: + :member-order: bysource + :show-inheritance: + +AutoGaussian +------------ +.. autoclass:: pyro.infer.autoguide.AutoGaussian + :members: + :undoc-members: + :member-order: bysource + :show-inheritance: + +AutoMessenger +------------- +.. autoclass:: pyro.infer.autoguide.AutoMessenger + :members: + :undoc-members: + :member-order: bysource + :show-inheritance: + +AutoNormalMessenger +------------------- +.. autoclass:: pyro.infer.autoguide.AutoNormalMessenger + :members: + :undoc-members: + :member-order: bysource + :show-inheritance: + +AutoHierarchicalNormalMessenger +------------------------------- +.. autoclass:: pyro.infer.autoguide.AutoHierarchicalNormalMessenger + :members: + :undoc-members: + :member-order: bysource + :show-inheritance: + +AutoRegressiveMessenger +----------------------- +.. autoclass:: pyro.infer.autoguide.AutoRegressiveMessenger + :members: + :undoc-members: + :member-order: bysource + :show-inheritance: + +.. _autoguide-initialization: + +Initialization +-------------- +.. automodule:: pyro.infer.autoguide.initialization + :members: + :undoc-members: + :special-members: __call__ + :member-order: bysource + :show-inheritance: diff --git a/pyro/source/docs/source/infer.reparam.rst b/pyro/source/docs/source/infer.reparam.rst new file mode 100644 index 0000000000000000000000000000000000000000..dc07ac1bf1f643b816e1055e5c9991343efddb48 --- /dev/null +++ b/pyro/source/docs/source/infer.reparam.rst @@ -0,0 +1,150 @@ +Reparameterizers +================ +.. automodule:: pyro.infer.reparam + +The :mod:`pyro.infer.reparam` module contains reparameterization strategies for +the :func:`pyro.poutine.handlers.reparam` effect. These are useful for altering +geometry of a poorly-conditioned parameter space to make the posterior better +shaped. These can be used with a variety of inference algorithms, e.g. +``Auto*Normal`` guides and MCMC. + +.. automodule:: pyro.infer.reparam.reparam + :members: + :undoc-members: + :member-order: bysource + :special-members: __call__ + +Automatic Strategies +-------------------- +.. automodule:: pyro.infer.reparam.strategies + :members: + :undoc-members: + :member-order: bysource + :special-members: __call__ + :show-inheritance: + +Conjugate Updating +------------------ +.. automodule:: pyro.infer.reparam.conjugate + :members: + :undoc-members: + :member-order: bysource + :special-members: __call__ + :show-inheritance: + +Loc-Scale Decentering +--------------------- +.. automodule:: pyro.infer.reparam.loc_scale + :members: + :undoc-members: + :member-order: bysource + :special-members: __call__ + :show-inheritance: + +Gumbel-Softmax +-------------- +.. automodule:: pyro.infer.reparam.softmax + :members: + :undoc-members: + :member-order: bysource + :special-members: __call__ + :show-inheritance: + +Transformed Distributions +------------------------- +.. automodule:: pyro.infer.reparam.transform + :members: + :undoc-members: + :member-order: bysource + :special-members: __call__ + :show-inheritance: + +Discrete Cosine Transform +------------------------- +.. automodule:: pyro.infer.reparam.discrete_cosine + :members: + :undoc-members: + :member-order: bysource + :special-members: __call__ + :show-inheritance: + +Haar Transform +-------------- +.. automodule:: pyro.infer.reparam.haar + :members: + :undoc-members: + :member-order: bysource + :special-members: __call__ + :show-inheritance: + +Unit Jacobian Transforms +------------------------ +.. automodule:: pyro.infer.reparam.unit_jacobian + :members: + :undoc-members: + :member-order: bysource + :special-members: __call__ + :show-inheritance: + +StudentT Distributions +---------------------- +.. automodule:: pyro.infer.reparam.studentt + :members: + :undoc-members: + :member-order: bysource + :special-members: __call__ + :show-inheritance: + +Stable Distributions +-------------------- +.. automodule:: pyro.infer.reparam.stable + :members: + :undoc-members: + :member-order: bysource + :special-members: __call__ + :show-inheritance: + +Projected Normal Distributions +------------------------------ +.. automodule:: pyro.infer.reparam.projected_normal + :members: + :undoc-members: + :member-order: bysource + :special-members: __call__ + :show-inheritance: + +Hidden Markov Models +-------------------- +.. automodule:: pyro.infer.reparam.hmm + :members: + :undoc-members: + :member-order: bysource + :special-members: __call__ + :show-inheritance: + +Site Splitting +-------------- +.. automodule:: pyro.infer.reparam.split + :members: + :undoc-members: + :member-order: bysource + :special-members: __call__ + :show-inheritance: + +Neural Transport +---------------- +.. automodule:: pyro.infer.reparam.neutra + :members: + :undoc-members: + :member-order: bysource + :special-members: __call__ + :show-inheritance: + +Structured Preconditioning +-------------------------- +.. automodule:: pyro.infer.reparam.structured + :members: + :undoc-members: + :member-order: bysource + :special-members: __call__ + :show-inheritance: diff --git a/pyro/source/docs/source/infer.util.rst b/pyro/source/docs/source/infer.util.rst new file mode 100644 index 0000000000000000000000000000000000000000..b21122abbc16457e314fadd15c1a8f140d0b60e5 --- /dev/null +++ b/pyro/source/docs/source/infer.util.rst @@ -0,0 +1,20 @@ +Inference utilities +=================== + +.. autofunction:: pyro.infer.util.enable_validation +.. autofunction:: pyro.infer.util.is_validation_enabled +.. autofunction:: pyro.infer.util.validation_enabled + +Model inspection +---------------- + +.. automodule:: pyro.infer.inspect + :members: + :member-order: bysource + +Interactive prior tuning +------------------------ + +.. automodule:: pyro.infer.resampler + :members: + :member-order: bysource diff --git a/pyro/source/docs/source/inference.rst b/pyro/source/docs/source/inference.rst new file mode 100644 index 0000000000000000000000000000000000000000..438b23045747f54605769f2f57cf2dc61dcea0ba --- /dev/null +++ b/pyro/source/docs/source/inference.rst @@ -0,0 +1,22 @@ +Inference +========= + +In the context of probabilistic modeling, learning is usually called inference. +In the particular case of Bayesian inference, this often involves computing +(approximate) posterior distributions. In the case of parameterized models, this +usually involves some sort of optimization. Pyro supports multiple inference algorithms, +with support for stochastic variational inference (SVI) being the most extensive. +Look here for more inference algorithms in future versions of Pyro. + +See the `Introductory tutorial `_ for a discussion of inference in Pyro. + +.. toctree:: + :glob: + :maxdepth: 2 + :caption: Contents: + + inference_algos + mcmc + infer.autoguide + infer.reparam + infer.util diff --git a/pyro/source/docs/source/inference_algos.rst b/pyro/source/docs/source/inference_algos.rst new file mode 100644 index 0000000000000000000000000000000000000000..f05db2fb39dcc299f4bf5e54e31308a30a656f41 --- /dev/null +++ b/pyro/source/docs/source/inference_algos.rst @@ -0,0 +1,123 @@ +SVI +--- + +.. automodule:: pyro.infer.svi + :members: + :undoc-members: + :show-inheritance: + +ELBO +---- + +.. automodule:: pyro.infer.elbo + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +.. automodule:: pyro.infer.trace_elbo + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +.. automodule:: pyro.infer.tracegraph_elbo + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +.. automodule:: pyro.infer.traceenum_elbo + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +.. automodule:: pyro.infer.trace_mean_field_elbo + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +.. automodule:: pyro.infer.trace_tail_adaptive_elbo + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +.. automodule:: pyro.infer.renyi_elbo + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +.. automodule:: pyro.infer.tracetmc_elbo + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +Importance +---------- + +.. automodule:: pyro.infer.importance + :members: + :undoc-members: + :show-inheritance: + + +Reweighted Wake-Sleep +--------------------- + +.. automodule:: pyro.infer.rws + :members: + :undoc-members: + :show-inheritance: + + +Sequential Monte Carlo +---------------------- + +.. automodule:: pyro.infer.smcfilter + :members: + :undoc-members: + :show-inheritance: + +Stein Methods +---------------------- + +.. automodule:: pyro.infer.svgd + :members: + :undoc-members: + :show-inheritance: + +Likelihood free methods +----------------------- + +.. automodule:: pyro.infer.energy_distance + :members: + :undoc-members: + :special-members: __call__ + :show-inheritance: + :member-order: bysource + +Discrete Inference +------------------ + +.. automodule:: pyro.infer.discrete + :members: + :show-inheritance: + :member-order: bysource + +Prediction utilities +-------------------- + +.. automodule:: pyro.infer.predictive + :members: + :undoc-members: + :show-inheritance: + +.. automodule:: pyro.infer.abstract_infer + :members: + :undoc-members: + :show-inheritance: diff --git a/pyro/source/docs/source/mcmc.rst b/pyro/source/docs/source/mcmc.rst new file mode 100644 index 0000000000000000000000000000000000000000..650530b8e5667aed0f110fceb0e5f0a97e719a10 --- /dev/null +++ b/pyro/source/docs/source/mcmc.rst @@ -0,0 +1,4 @@ +MCMC +==== + +.. include:: pyro.infer.mcmc.txt diff --git a/pyro/source/docs/source/nn.rst b/pyro/source/docs/source/nn.rst new file mode 100644 index 0000000000000000000000000000000000000000..09d0c36d9a69ee015e37bac0ada0649e1270f0f5 --- /dev/null +++ b/pyro/source/docs/source/nn.rst @@ -0,0 +1,42 @@ +Neural Networks +=============== + +The module `pyro.nn` provides implementations of neural network modules +that are useful in the context of deep probabilistic programming. + +Pyro Modules +------------ + +.. automodule:: pyro.nn.module + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +AutoRegressiveNN +---------------- +.. autoclass:: pyro.nn.auto_reg_nn.AutoRegressiveNN + :members: + :undoc-members: + :show-inheritance: + +DenseNN +------- +.. autoclass:: pyro.nn.dense_nn.DenseNN + :members: + :undoc-members: + :show-inheritance: + +ConditionalAutoRegressiveNN +--------------------------- +.. autoclass:: pyro.nn.auto_reg_nn.ConditionalAutoRegressiveNN + :members: + :undoc-members: + :show-inheritance: + +ConditionalDenseNN +------------------ +.. autoclass:: pyro.nn.dense_nn.ConditionalDenseNN + :members: + :undoc-members: + :show-inheritance: diff --git a/pyro/source/docs/source/ops.rst b/pyro/source/docs/source/ops.rst new file mode 100644 index 0000000000000000000000000000000000000000..8a16e6c50fdb68a1d5bbcf47154424f460634855 --- /dev/null +++ b/pyro/source/docs/source/ops.rst @@ -0,0 +1,112 @@ +Miscellaneous Ops +================= + +The ``pyro.ops`` module implements tensor utilities +that are mostly independent of the rest of Pyro. + +Utilities for HMC +----------------- + +.. automodule:: pyro.ops.dual_averaging + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +.. automodule:: pyro.ops.integrator + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +.. automodule:: pyro.ops.welford + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +Newton Optimizers +----------------- + +.. automodule:: pyro.ops.newton + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +Special Functions +----------------- + +.. automodule:: pyro.ops.special + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +Tensor Utilities +---------------- + +.. automodule:: pyro.ops.tensor_utils + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +Tensor Indexing +--------------- + +.. automodule:: pyro.ops.indexing + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +Tensor Contraction +------------------ + +.. automodule:: pyro.ops.einsum + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +.. autofunction:: pyro.ops.contract.einsum + +.. autofunction:: pyro.ops.contract.ubersum + +Gaussian Contraction +-------------------- + +.. automodule:: pyro.ops.gaussian + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + :special-members: __add__,__getitem__ + +Statistical Utilities +--------------------- + +.. automodule:: pyro.ops.stats + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +Streaming Statistics +-------------------- + +.. automodule:: pyro.ops.streaming + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource + +State Space Model and GP Utilities +---------------------------------- + +.. automodule:: pyro.ops.ssm_gp + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource diff --git a/pyro/source/docs/source/optimization.rst b/pyro/source/docs/source/optimization.rst new file mode 100644 index 0000000000000000000000000000000000000000..50a5108fb0fb5c4d290cc3df9a5fc8ba1f3d35eb --- /dev/null +++ b/pyro/source/docs/source/optimization.rst @@ -0,0 +1,10 @@ +Optimization +============ + +The module `pyro.optim` provides support for optimization in Pyro. In particular +it provides `PyroOptim`, which is used to wrap PyTorch optimizers +and manage optimizers for dynamically generated parameters +(see the tutorial `SVI Part I `_ for +a discussion). Any custom optimization algorithms are also to be found here. + +.. include:: pyro.optim.txt diff --git a/pyro/source/docs/source/parameters.rst b/pyro/source/docs/source/parameters.rst new file mode 100644 index 0000000000000000000000000000000000000000..4184ba149a2ec7eb648678944f1ff577ef580ad4 --- /dev/null +++ b/pyro/source/docs/source/parameters.rst @@ -0,0 +1,17 @@ +Parameters +========== + +Parameters in Pyro are basically thin wrappers around PyTorch Tensors that carry unique names. +As such Parameters are the primary stateful objects in Pyro. Users typically interact with parameters +via the Pyro primitive `pyro.param`. Parameters play a central role in stochastic variational inference, +where they are used to represent point estimates for the parameters in parameterized families of +models and guides. + +ParamStore +---------- + +.. automodule:: pyro.params.param_store + :members: + :undoc-members: + :show-inheritance: + :member-order: bysource diff --git a/pyro/source/docs/source/poutine.rst b/pyro/source/docs/source/poutine.rst new file mode 100644 index 0000000000000000000000000000000000000000..87369cc172f0a5be8d565f57740de6b01aa294d9 --- /dev/null +++ b/pyro/source/docs/source/poutine.rst @@ -0,0 +1,50 @@ +Poutine (Effect handlers) +========================== + +Beneath the built-in inference algorithms, Pyro has a library of composable +effect handlers for creating new inference algorithms and working with probabilistic +programs. Pyro's inference algorithms are all built by applying these handlers to stochastic functions. +In order to get a general understanding what effect handlers are and what problem they solve, read +`An Introduction to Algebraic Effects and Handlers `_ +by Matija Pretnar. + +Handlers +--------- + +.. automodule:: pyro.poutine.handlers + :members: + +.. autofunction:: pyro.infer.enum.config_enumerate + +Trace +------ + +.. autoclass:: pyro.poutine.Trace + :members: + :undoc-members: + :show-inheritance: + +Runtime +-------- + +.. automodule:: pyro.poutine.runtime + :members: + :undoc-members: + :show-inheritance: + +Utilities +---------- + +.. automodule:: pyro.poutine.util + :members: + :undoc-members: + :show-inheritance: + +Messengers +----------- + +Messenger objects contain the implementations of the effects exposed by handlers. +Advanced users may modify the implementations of messengers behind existing handlers or write new messengers +that implement new effects and compose correctly with the rest of the library. + +.. include:: pyro.poutine.txt diff --git a/pyro/source/docs/source/primitives.rst b/pyro/source/docs/source/primitives.rst new file mode 100644 index 0000000000000000000000000000000000000000..097132c85bd63457619785802a16a302fd4cd60d --- /dev/null +++ b/pyro/source/docs/source/primitives.rst @@ -0,0 +1,9 @@ +Primitives +========== + +.. automodule:: pyro.primitives + :members: + :show-inheritance: + :member-order: bysource + +.. autofunction:: pyro.ops.jit.trace diff --git a/pyro/source/docs/source/pyro.infer.mcmc.txt b/pyro/source/docs/source/pyro.infer.mcmc.txt new file mode 100644 index 0000000000000000000000000000000000000000..0684a97b9906ce032bc40fc33a5d664b92883d34 --- /dev/null +++ b/pyro/source/docs/source/pyro.infer.mcmc.txt @@ -0,0 +1,63 @@ +MCMC +---- + +.. autoclass:: pyro.infer.mcmc.api.MCMC + :members: + :undoc-members: + :show-inheritance: + +StreamingMCMC +------------- + +.. autoclass:: pyro.infer.mcmc.api.StreamingMCMC + :members: + :undoc-members: + :show-inheritance: + +MCMCKernel +---------- +.. autoclass:: pyro.infer.mcmc.mcmc_kernel.MCMCKernel + :members: + :undoc-members: + :show-inheritance: + +HMC +--- + +.. autoclass:: pyro.infer.mcmc.HMC + :members: + :undoc-members: + :show-inheritance: + +NUTS +---- + +.. autoclass:: pyro.infer.mcmc.NUTS + :members: + :undoc-members: + :show-inheritance: + +RandomWalkKernel +---------------- + +.. autoclass:: pyro.infer.mcmc.RandomWalkKernel + :members: + :undoc-members: + :show-inheritance: + +BlockMassMatrix +--------------- + +.. autoclass:: pyro.infer.mcmc.BlockMassMatrix + :members: + :undoc-members: + :show-inheritance: + +Utilities +--------- + +.. autofunction:: pyro.infer.mcmc.util.initialize_model + +.. autofunction:: pyro.infer.mcmc.util.diagnostics + +.. autofunction:: pyro.infer.mcmc.util.select_samples diff --git a/pyro/source/docs/source/pyro.optim.txt b/pyro/source/docs/source/pyro.optim.txt new file mode 100644 index 0000000000000000000000000000000000000000..6a1f9ffffc61abca8294e797a9247c0a34871bbe --- /dev/null +++ b/pyro/source/docs/source/pyro.optim.txt @@ -0,0 +1,56 @@ +Pyro Optimizers +--------------- + +.. automodule:: pyro.optim.optim + :members: + :undoc-members: + :special-members: __call__ + :show-inheritance: + :member-order: bysource + +.. automodule:: pyro.optim.lr_scheduler + :members: + :undoc-members: + :special-members: __call__ + :show-inheritance: + +.. automodule:: pyro.optim.adagrad_rmsprop + :members: + :undoc-members: + :special-members: __call__ + :show-inheritance: + :member-order: bysource + +.. automodule:: pyro.optim.clipped_adam + :members: + :undoc-members: + :special-members: __call__ + :show-inheritance: + :member-order: bysource + +.. automodule:: pyro.optim.horovod + :members: + :undoc-members: + :special-members: __call__ + :show-inheritance: + :member-order: bysource + +PyTorch Optimizers +------------------ + +.. automodule:: pyro.optim.pytorch_optimizers + :members: + :undoc-members: + :special-members: __call__ + :show-inheritance: + :member-order: bysource + +Higher-Order Optimizers +----------------------- + +.. automodule:: pyro.optim.multi + :members: + :undoc-members: + :special-members: __call__ + :show-inheritance: + :member-order: bysource diff --git a/pyro/source/docs/source/pyro.poutine.txt b/pyro/source/docs/source/pyro.poutine.txt new file mode 100644 index 0000000000000000000000000000000000000000..443b527ce68dbf3fce7931292f87113101e07afb --- /dev/null +++ b/pyro/source/docs/source/pyro.poutine.txt @@ -0,0 +1,201 @@ +Messenger +__________ + +.. automodule:: pyro.poutine.messenger + :members: + :undoc-members: + :show-inheritance: + +BlockMessenger +_______________ + +.. automodule:: pyro.poutine.block_messenger + :members: + :undoc-members: + :show-inheritance: + +BroadcastMessenger +__________________ + +.. automodule:: pyro.poutine.broadcast_messenger + :members: + :undoc-members: + :show-inheritance: + +CollapseMessenger +_________________ + +.. automodule:: pyro.poutine.collapse_messenger + :members: + :undoc-members: + :show-inheritance: + +ConditionMessenger +___________________ + +.. automodule:: pyro.poutine.condition_messenger + :members: + :undoc-members: + :show-inheritance: + +DoMessenger +___________________ + +.. automodule:: pyro.poutine.do_messenger + :members: + :undoc-members: + :show-inheritance: + +EnumMessenger +________________ + +.. automodule:: pyro.poutine.enum_messenger + :members: + :undoc-members: + :show-inheritance: + +EqualizeMessenger +____________________ + +.. automodule:: pyro.poutine.equalize_messenger + :members: + :undoc-members: + :show-inheritance: + +EscapeMessenger +________________ + +.. automodule:: pyro.poutine.escape_messenger + :members: + :undoc-members: + :show-inheritance: + +IndepMessenger +_______________ + +.. automodule:: pyro.poutine.indep_messenger + :members: + :undoc-members: + :show-inheritance: + +InferConfigMessenger +____________________ + +.. automodule:: pyro.poutine.infer_config_messenger + :members: + :undoc-members: + :show-inheritance: + +LiftMessenger +______________ + +.. automodule:: pyro.poutine.lift_messenger + :members: + :undoc-members: + :show-inheritance: + +MarkovMessenger +_______________ + +.. automodule:: pyro.poutine.markov_messenger + :members: + :undoc-members: + :show-inheritance: + +MaskMessenger +______________ + +.. automodule:: pyro.poutine.mask_messenger + :members: + :undoc-members: + :show-inheritance: + +PlateMessenger +______________ + +.. automodule:: pyro.poutine.plate_messenger + :members: + :undoc-members: + :show-inheritance: + +ReentrantMessenger +___________________ + +.. automodule:: pyro.poutine.reentrant_messenger + :members: + :undoc-members: + :show-inheritance: + +ReparamMessenger +________________ + +.. automodule:: pyro.poutine.reparam_messenger + :members: + :undoc-members: + :show-inheritance: + +ReplayMessenger +________________ + +.. automodule:: pyro.poutine.replay_messenger + :members: + :undoc-members: + :show-inheritance: + +ScaleMessenger +_______________ + +.. automodule:: pyro.poutine.scale_messenger + :members: + :undoc-members: + :show-inheritance: + +SeedMessenger +_______________ + +.. automodule:: pyro.poutine.seed_messenger + :members: + :undoc-members: + :show-inheritance: + +SubsampleMessenger +__________________ + +.. automodule:: pyro.poutine.subsample_messenger + :members: + :undoc-members: + :show-inheritance: + +SubstituteMessenger +___________________ + +.. automodule:: pyro.poutine.substitute_messenger + :members: + :undoc-members: + :show-inheritance: + +TraceMessenger +_______________ + +.. automodule:: pyro.poutine.trace_messenger + :members: + :undoc-members: + :show-inheritance: + +UnconditionMessenger +____________________ + +.. automodule:: pyro.poutine.uncondition_messenger + :members: + :undoc-members: + :show-inheritance: + +GuideMessenger +______________ + +.. automodule:: pyro.poutine.guide + :members: + :undoc-members: + :special-members: __call__ + :member-order: bysource + :show-inheritance: diff --git a/pyro/source/docs/source/settings.rst b/pyro/source/docs/source/settings.rst new file mode 100644 index 0000000000000000000000000000000000000000..e2cd61fd9d768ff10e5d3b8201b98535b67aeebd --- /dev/null +++ b/pyro/source/docs/source/settings.rst @@ -0,0 +1,6 @@ +Settings +-------- + +.. automodule:: pyro.settings + :members: + :member-order: bysource diff --git a/pyro/source/docs/source/testing.rst b/pyro/source/docs/source/testing.rst new file mode 100644 index 0000000000000000000000000000000000000000..2c7e6d58c29c14efb93fcd408b9d29015d880a58 --- /dev/null +++ b/pyro/source/docs/source/testing.rst @@ -0,0 +1,6 @@ +Testing Utilities +----------------- + +.. automodule:: pyro.distributions.testing.gof + :members: + :member-order: bysource diff --git a/pyro/source/examples/__init__.py b/pyro/source/examples/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/examples/air/air.py b/pyro/source/examples/air/air.py new file mode 100644 index 0000000000000000000000000000000000000000..61a9ce70b8c8bc44d66325fd3aa9b149fae4fdb8 --- /dev/null +++ b/pyro/source/examples/air/air.py @@ -0,0 +1,409 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +An implementation of the model described in [1]. + +[1] Eslami, SM Ali, et al. "Attend, infer, repeat: Fast scene +understanding with generative models." Advances in Neural Information +Processing Systems. 2016. +""" + +from collections import namedtuple + +import torch +import torch.nn as nn +import torch.nn.functional as F +from modules import MLP, Decoder, Encoder, Identity, Predict + +import pyro +import pyro.distributions as dist + + +# Default prior success probability for z_pres. +def default_z_pres_prior_p(t): + return 0.5 + + +ModelState = namedtuple("ModelState", ["x", "z_pres", "z_where"]) +GuideState = namedtuple( + "GuideState", ["h", "c", "bl_h", "bl_c", "z_pres", "z_where", "z_what"] +) + + +class AIR(nn.Module): + def __init__( + self, + num_steps, + x_size, + window_size, + z_what_size, + rnn_hidden_size, + encoder_net=[], + decoder_net=[], + predict_net=[], + embed_net=None, + bl_predict_net=[], + non_linearity="ReLU", + decoder_output_bias=None, + decoder_output_use_sigmoid=False, + use_masking=True, + use_baselines=True, + baseline_scalar=None, + scale_prior_mean=3.0, + scale_prior_sd=0.1, + pos_prior_mean=0.0, + pos_prior_sd=1.0, + likelihood_sd=0.3, + use_cuda=False, + ): + super().__init__() + + self.num_steps = num_steps + self.x_size = x_size + self.window_size = window_size + self.z_what_size = z_what_size + self.rnn_hidden_size = rnn_hidden_size + self.use_masking = use_masking + self.use_baselines = use_baselines + self.baseline_scalar = baseline_scalar + self.likelihood_sd = likelihood_sd + self.use_cuda = use_cuda + prototype = torch.tensor(0.0).cuda() if use_cuda else torch.tensor(0.0) + self.options = dict(dtype=prototype.dtype, device=prototype.device) + + self.z_pres_size = 1 + self.z_where_size = 3 + # By making these parameters they will be moved to the gpu + # when necessary. (They are not registered with pyro for + # optimization.) + self.z_where_loc_prior = nn.Parameter( + torch.FloatTensor([scale_prior_mean, pos_prior_mean, pos_prior_mean]), + requires_grad=False, + ) + self.z_where_scale_prior = nn.Parameter( + torch.FloatTensor([scale_prior_sd, pos_prior_sd, pos_prior_sd]), + requires_grad=False, + ) + + # Create nn modules. + rnn_input_size = x_size**2 if embed_net is None else embed_net[-1] + rnn_input_size += self.z_where_size + z_what_size + self.z_pres_size + nl = getattr(nn, non_linearity) + + self.rnn = nn.LSTMCell(rnn_input_size, rnn_hidden_size) + self.encode = Encoder(window_size**2, encoder_net, z_what_size, nl) + self.decode = Decoder( + window_size**2, + decoder_net, + z_what_size, + decoder_output_bias, + decoder_output_use_sigmoid, + nl, + ) + self.predict = Predict( + rnn_hidden_size, predict_net, self.z_pres_size, self.z_where_size, nl + ) + self.embed = ( + Identity() if embed_net is None else MLP(x_size**2, embed_net, nl, True) + ) + + self.bl_rnn = nn.LSTMCell(rnn_input_size, rnn_hidden_size) + self.bl_predict = MLP(rnn_hidden_size, bl_predict_net + [1], nl) + self.bl_embed = ( + Identity() if embed_net is None else MLP(x_size**2, embed_net, nl, True) + ) + + # Create parameters. + self.h_init = nn.Parameter(torch.zeros(1, rnn_hidden_size)) + self.c_init = nn.Parameter(torch.zeros(1, rnn_hidden_size)) + self.bl_h_init = nn.Parameter(torch.zeros(1, rnn_hidden_size)) + self.bl_c_init = nn.Parameter(torch.zeros(1, rnn_hidden_size)) + self.z_where_init = nn.Parameter(torch.zeros(1, self.z_where_size)) + self.z_what_init = nn.Parameter(torch.zeros(1, self.z_what_size)) + + if use_cuda: + self.cuda() + + def prior(self, n, **kwargs): + state = ModelState( + x=torch.zeros(n, self.x_size, self.x_size, **self.options), + z_pres=torch.ones(n, self.z_pres_size, **self.options), + z_where=None, + ) + + z_pres = [] + z_where = [] + + for t in range(self.num_steps): + state = self.prior_step(t, n, state, **kwargs) + z_where.append(state.z_where) + z_pres.append(state.z_pres) + + return (z_where, z_pres), state.x + + def prior_step(self, t, n, prev, z_pres_prior_p=default_z_pres_prior_p): + # Sample presence indicators. + z_pres = pyro.sample( + "z_pres_{}".format(t), + dist.Bernoulli(z_pres_prior_p(t) * prev.z_pres).to_event(1), + ) + + # If zero is sampled for a data point, then no more objects + # will be added to its output image. We can't + # straight-forwardly avoid generating further objects, so + # instead we zero out the log_prob_sum of future choices. + sample_mask = z_pres if self.use_masking else torch.tensor(1.0) + + # Sample attention window position. + z_where = pyro.sample( + "z_where_{}".format(t), + dist.Normal( + self.z_where_loc_prior.expand(n, self.z_where_size), + self.z_where_scale_prior.expand(n, self.z_where_size), + ) + .mask(sample_mask) + .to_event(1), + ) + + # Sample latent code for contents of the attention window. + z_what = pyro.sample( + "z_what_{}".format(t), + dist.Normal( + torch.zeros(n, self.z_what_size, **self.options), + torch.ones(n, self.z_what_size, **self.options), + ) + .mask(sample_mask) + .to_event(1), + ) + + # Map latent code to pixel space. + y_att = self.decode(z_what) + + # Position/scale attention window within larger image. + y = window_to_image(z_where, self.window_size, self.x_size, y_att) + + # Combine the image generated at this step with the image so far. + # (Note that there's no notion of occlusion here. Overlapping + # objects can create pixel intensities > 1.) + x = prev.x + (y * z_pres.view(-1, 1, 1)) + + return ModelState(x=x, z_pres=z_pres, z_where=z_where) + + def model(self, data, batch_size, **kwargs): + pyro.module("decode", self.decode) + with pyro.plate("data", data.size(0), device=data.device) as ix: + batch = data[ix] + n = batch.size(0) + (z_where, z_pres), x = self.prior(n, **kwargs) + pyro.sample( + "obs", + dist.Normal( + x.view(n, -1), + ( + self.likelihood_sd + * torch.ones(n, self.x_size**2, **self.options) + ), + ).to_event(1), + obs=batch.view(n, -1), + ) + + def guide(self, data, batch_size, **kwargs): + pyro.module("rnn", self.rnn), + pyro.module("predict", self.predict), + pyro.module("encode", self.encode), + pyro.module("embed", self.embed), + pyro.module("bl_rnn", self.bl_rnn), + pyro.module("bl_predict", self.bl_predict), + pyro.module("bl_embed", self.bl_embed) + + pyro.param("h_init", self.h_init) + pyro.param("c_init", self.c_init) + pyro.param("z_where_init", self.z_where_init) + pyro.param("z_what_init", self.z_what_init) + pyro.param("bl_h_init", self.bl_h_init) + pyro.param("bl_c_init", self.bl_c_init) + + with pyro.plate( + "data", data.size(0), subsample_size=batch_size, device=data.device + ) as ix: + batch = data[ix] + n = batch.size(0) + + # Embed inputs. + flattened_batch = batch.view(n, -1) + inputs = { + "raw": batch, + "embed": self.embed(flattened_batch), + "bl_embed": self.bl_embed(flattened_batch), + } + + # Initial state. + state = GuideState( + h=self.h_init.expand(n, -1), + c=self.c_init.expand(n, -1), + bl_h=self.bl_h_init.expand(n, -1), + bl_c=self.bl_c_init.expand(n, -1), + z_pres=torch.ones(n, self.z_pres_size, **self.options), + z_where=self.z_where_init.expand(n, -1), + z_what=self.z_what_init.expand(n, -1), + ) + + z_pres = [] + z_where = [] + + for t in range(self.num_steps): + state = self.guide_step(t, n, state, inputs) + z_where.append(state.z_where) + z_pres.append(state.z_pres) + + return z_where, z_pres + + def guide_step(self, t, n, prev, inputs): + rnn_input = torch.cat( + (inputs["embed"], prev.z_where, prev.z_what, prev.z_pres), 1 + ) + h, c = self.rnn(rnn_input, (prev.h, prev.c)) + z_pres_p, z_where_loc, z_where_scale = self.predict(h) + + # Compute baseline estimates for discrete choice z_pres. + infer_dict, bl_h, bl_c = self.baseline_step(prev, inputs) + + # Sample presence. + z_pres = pyro.sample( + "z_pres_{}".format(t), + dist.Bernoulli(z_pres_p * prev.z_pres).to_event(1), + infer=infer_dict, + ) + + sample_mask = z_pres if self.use_masking else torch.tensor(1.0) + + z_where = pyro.sample( + "z_where_{}".format(t), + dist.Normal( + z_where_loc + self.z_where_loc_prior, + z_where_scale * self.z_where_scale_prior, + ) + .mask(sample_mask) + .to_event(1), + ) + + # Figure 2 of [1] shows x_att depending on z_where and h, + # rather than z_where and x as here, but I think this is + # correct. + x_att = image_to_window(z_where, self.window_size, self.x_size, inputs["raw"]) + + # Encode attention windows. + z_what_loc, z_what_scale = self.encode(x_att) + + z_what = pyro.sample( + "z_what_{}".format(t), + dist.Normal(z_what_loc, z_what_scale).mask(sample_mask).to_event(1), + ) + return GuideState( + h=h, + c=c, + bl_h=bl_h, + bl_c=bl_c, + z_pres=z_pres, + z_where=z_where, + z_what=z_what, + ) + + def baseline_step(self, prev, inputs): + if not self.use_baselines: + return dict(), None, None + + # Prevent gradients flowing back from baseline loss to + # inference net by detaching from graph here. + rnn_input = torch.cat( + ( + inputs["bl_embed"], + prev.z_where.detach(), + prev.z_what.detach(), + prev.z_pres.detach(), + ), + 1, + ) + bl_h, bl_c = self.bl_rnn(rnn_input, (prev.bl_h, prev.bl_c)) + bl_value = self.bl_predict(bl_h) + + # Zero out values for finished data points. This avoids adding + # superfluous terms to the loss. + if self.use_masking: + bl_value = bl_value * prev.z_pres + + # The value that the baseline net is estimating can be very + # large. An option to scale the nets output is provided + # to make it easier for the net to output values of this + # scale. + if self.baseline_scalar is not None: + bl_value = bl_value * self.baseline_scalar + + infer_dict = dict(baseline=dict(baseline_value=bl_value.squeeze(-1))) + return infer_dict, bl_h, bl_c + + +# Spatial transformer helpers. + +expansion_indices = torch.LongTensor([1, 0, 2, 0, 1, 3]) + + +def expand_z_where(z_where): + # Take a batch of three-vectors, and massages them into a batch of + # 2x3 matrices with elements like so: + # [s,x,y] -> [[s,0,x], + # [0,s,y]] + n = z_where.size(0) + out = torch.cat((z_where.new_zeros(n, 1), z_where), 1) + ix = expansion_indices + if z_where.is_cuda: + ix = ix.cuda() + out = torch.index_select(out, 1, ix) + out = out.view(n, 2, 3) + return out + + +# Scaling by `1/scale` here is unsatisfactory, as `scale` could be +# zero. +def z_where_inv(z_where): + # Take a batch of z_where vectors, and compute their "inverse". + # That is, for each row compute: + # [s,x,y] -> [1/s,-x/s,-y/s] + # These are the parameters required to perform the inverse of the + # spatial transform performed in the generative model. + n = z_where.size(0) + out = torch.cat((z_where.new_ones(n, 1), -z_where[:, 1:]), 1) + # Divide all entries by the scale. + out = out / z_where[:, 0:1] + return out + + +def window_to_image(z_where, window_size, image_size, windows): + n = windows.size(0) + assert windows.size(1) == window_size**2, "Size mismatch." + theta = expand_z_where(z_where) + grid = F.affine_grid(theta, torch.Size((n, 1, image_size, image_size))) + out = F.grid_sample(windows.view(n, 1, window_size, window_size), grid) + return out.view(n, image_size, image_size) + + +def image_to_window(z_where, window_size, image_size, images): + n = images.size(0) + assert images.size(1) == images.size(2) == image_size, "Size mismatch." + theta_inv = expand_z_where(z_where_inv(z_where)) + grid = F.affine_grid(theta_inv, torch.Size((n, 1, window_size, window_size))) + out = F.grid_sample(images.view(n, 1, image_size, image_size), grid) + return out.view(n, -1) + + +# Combine z_pres and z_where (as returned by the model and guide) into +# a single tensor, with size: +# [batch_size, num_steps, z_where_size + z_pres_size] +def latents_to_tensor(z): + return torch.stack( + [ + torch.cat((z_where.cpu().data, z_pres.cpu().data), 1) + for z_where, z_pres in zip(*z) + ] + ).transpose(0, 1) diff --git a/pyro/source/examples/air/main.py b/pyro/source/examples/air/main.py new file mode 100644 index 0000000000000000000000000000000000000000..dadf77260cb26f55e968bc51f2bca999d4d7e605 --- /dev/null +++ b/pyro/source/examples/air/main.py @@ -0,0 +1,453 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +AIR applied to the multi-mnist data set [1]. + +[1] Eslami, SM Ali, et al. "Attend, infer, repeat: Fast scene +understanding with generative models." Advances in Neural Information +Processing Systems. 2016. +""" + + +import argparse +import math +import os +import time +from functools import partial + +import numpy as np +import torch +import visdom +from air import AIR, latents_to_tensor +from viz import draw_many, tensor_to_objs + +import pyro +import pyro.contrib.examples.multi_mnist as multi_mnist +import pyro.optim as optim +import pyro.poutine as poutine +from pyro.contrib.examples.util import get_data_directory +from pyro.infer import SVI, JitTraceGraph_ELBO, TraceGraph_ELBO + + +def count_accuracy(X, true_counts, air, batch_size): + assert X.size(0) == true_counts.size(0), "Size mismatch." + assert X.size(0) % batch_size == 0, "Input size must be multiple of batch_size." + counts = torch.LongTensor(3, 4).zero_() + error_latents = [] + error_indicators = [] + + def count_vec_to_mat(vec, max_index): + out = torch.LongTensor(vec.size(0), max_index + 1).zero_() + out.scatter_(1, vec.type(torch.LongTensor).view(vec.size(0), 1), 1) + return out + + for i in range(X.size(0) // batch_size): + X_batch = X[i * batch_size : (i + 1) * batch_size] + true_counts_batch = true_counts[i * batch_size : (i + 1) * batch_size] + z_where, z_pres = air.guide(X_batch, batch_size) + inferred_counts = sum(z.cpu() for z in z_pres).squeeze().data + true_counts_m = count_vec_to_mat(true_counts_batch, 2) + inferred_counts_m = count_vec_to_mat(inferred_counts, 3) + counts += torch.mm(true_counts_m.t(), inferred_counts_m) + error_ind = 1 - (true_counts_batch == inferred_counts).long() + error_ix = error_ind.nonzero(as_tuple=False).squeeze() + error_latents.append( + latents_to_tensor((z_where, z_pres)).index_select(0, error_ix) + ) + error_indicators.append(error_ind) + + acc = counts.diag().sum().float() / X.size(0) + error_indices = torch.cat(error_indicators).nonzero(as_tuple=False).squeeze() + if X.is_cuda: + error_indices = error_indices.cuda() + return acc, counts, torch.cat(error_latents), error_indices + + +# Defines something like a truncated geometric. Like the geometric, +# this has the property that there's a constant difference in log prob +# between p(steps=n) and p(steps=n+1). +def make_prior(k): + assert 0 < k <= 1 + u = 1 / (1 + k + k**2 + k**3) + p0 = 1 - u + p1 = 1 - (k * u) / p0 + p2 = 1 - (k**2 * u) / (p0 * p1) + trial_probs = [p0, p1, p2] + # dist = [1 - p0, p0 * (1 - p1), p0 * p1 * (1 - p2), p0 * p1 * p2] + # print(dist) + return lambda t: trial_probs[t] + + +# Implements "prior annealing" as described in this blog post: +# http://akosiorek.github.io/ml/2017/09/03/implementing-air.html + +# That implementation does something very close to the following: +# --z-pres-prior (1 - 1e-15) +# --z-pres-prior-raw +# --anneal-prior exp +# --anneal-prior-to 1e-7 +# --anneal-prior-begin 1000 +# --anneal-prior-duration 1e6 + +# e.g. After 200K steps z_pres_p will have decayed to ~0.04 + +# These compute the value of a decaying value at time t. +# initial: initial value +# final: final value, reached after begin + duration steps +# begin: number of steps before decay begins +# duration: number of steps over which decay occurs +# t: current time step + + +def lin_decay(initial, final, begin, duration, t): + assert duration > 0 + x = (final - initial) * (t - begin) / duration + initial + return max(min(x, initial), final) + + +def exp_decay(initial, final, begin, duration, t): + assert final > 0 + assert duration > 0 + # half_life = math.log(2) / math.log(initial / final) * duration + decay_rate = math.log(initial / final) / duration + x = initial * math.exp(-decay_rate * (t - begin)) + return max(min(x, initial), final) + + +def load_data(): + inpath = get_data_directory(__file__) + X_np, Y = multi_mnist.load(inpath) + X_np = X_np.astype(np.float32) + X_np /= 255.0 + X = torch.from_numpy(X_np) + # Using FloatTensor to allow comparison with values sampled from + # Bernoulli. + counts = torch.FloatTensor([len(objs) for objs in Y]) + return X, counts + + +def main(**kwargs): + args = argparse.Namespace(**kwargs) + + if "save" in args: + if os.path.exists(args.save): + raise RuntimeError('Output file "{}" already exists.'.format(args.save)) + + if args.seed is not None: + pyro.set_rng_seed(args.seed) + + X, true_counts = load_data() + X_size = X.size(0) + if args.cuda: + X = X.cuda() + + # Build a function to compute z_pres prior probabilities. + if args.z_pres_prior_raw: + + def base_z_pres_prior_p(t): + return args.z_pres_prior + + else: + base_z_pres_prior_p = make_prior(args.z_pres_prior) + + # Wrap with logic to apply any annealing. + def z_pres_prior_p(opt_step, time_step): + p = base_z_pres_prior_p(time_step) + if args.anneal_prior == "none": + return p + else: + decay = dict(lin=lin_decay, exp=exp_decay)[args.anneal_prior] + return decay( + p, + args.anneal_prior_to, + args.anneal_prior_begin, + args.anneal_prior_duration, + opt_step, + ) + + model_arg_keys = [ + "window_size", + "rnn_hidden_size", + "decoder_output_bias", + "decoder_output_use_sigmoid", + "baseline_scalar", + "encoder_net", + "decoder_net", + "predict_net", + "embed_net", + "bl_predict_net", + "non_linearity", + "pos_prior_mean", + "pos_prior_sd", + "scale_prior_mean", + "scale_prior_sd", + ] + model_args = {key: getattr(args, key) for key in model_arg_keys if key in args} + air = AIR( + num_steps=args.model_steps, + x_size=50, + use_masking=not args.no_masking, + use_baselines=not args.no_baselines, + z_what_size=args.encoder_latent_size, + use_cuda=args.cuda, + **model_args + ) + + if args.verbose: + print(air) + print(args) + + if "load" in args: + print("Loading parameters...") + air.load_state_dict(torch.load(args.load, weights_only=False)) + + # Viz sample from prior. + if args.viz: + vis = visdom.Visdom(env=args.visdom_env) + z, x = air.prior(5, z_pres_prior_p=partial(z_pres_prior_p, 0)) + vis.images(draw_many(x, tensor_to_objs(latents_to_tensor(z)))) + + def isBaselineParam(param_name): + return "bl_" in param_name + + def per_param_optim_args(param_name): + lr = ( + args.baseline_learning_rate + if isBaselineParam(param_name) + else args.learning_rate + ) + return {"lr": lr} + + adam = optim.Adam(per_param_optim_args) + elbo = JitTraceGraph_ELBO() if args.jit else TraceGraph_ELBO() + svi = SVI(air.model, air.guide, adam, loss=elbo) + + # Do inference. + t0 = time.time() + examples_to_viz = X[5:10] + + for i in range(1, args.num_steps + 1): + loss = svi.step( + X, batch_size=args.batch_size, z_pres_prior_p=partial(z_pres_prior_p, i) + ) + + if args.progress_every > 0 and i % args.progress_every == 0: + print( + "i={}, epochs={:.2f}, elapsed={:.2f}, elbo={:.2f}".format( + i, + (i * args.batch_size) / X_size, + (time.time() - t0) / 3600, + loss / X_size, + ) + ) + + if args.viz and i % args.viz_every == 0: + trace = poutine.trace(air.guide).get_trace(examples_to_viz, None) + z, recons = poutine.replay(air.prior, trace=trace)(examples_to_viz.size(0)) + z_wheres = tensor_to_objs(latents_to_tensor(z)) + + # Show data with inferred objection positions. + vis.images(draw_many(examples_to_viz, z_wheres)) + # Show reconstructions of data. + vis.images(draw_many(recons, z_wheres)) + + if args.eval_every > 0 and i % args.eval_every == 0: + # Measure accuracy on subset of training data. + acc, counts, error_z, error_ix = count_accuracy(X, true_counts, air, 1000) + print( + "i={}, accuracy={}, counts={}".format(i, acc, counts.numpy().tolist()) + ) + if args.viz and error_ix.size(0) > 0: + vis.images( + draw_many(X[error_ix[0:5]], tensor_to_objs(error_z[0:5])), + opts=dict(caption="errors ({})".format(i)), + ) + + if "save" in args and i % args.save_every == 0: + print("Saving parameters...") + torch.save(air.state_dict(), args.save) + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser( + description="Pyro AIR example", argument_default=argparse.SUPPRESS + ) + parser.add_argument( + "-n", + "--num-steps", + type=int, + default=int(1e8), + help="number of optimization steps to take", + ) + parser.add_argument("-b", "--batch-size", type=int, default=64, help="batch size") + parser.add_argument( + "-lr", "--learning-rate", type=float, default=1e-4, help="learning rate" + ) + parser.add_argument( + "-blr", + "--baseline-learning-rate", + type=float, + default=1e-3, + help="baseline learning rate", + ) + parser.add_argument( + "--progress-every", + type=int, + default=1, + help="number of steps between writing progress to stdout", + ) + parser.add_argument( + "--eval-every", type=int, default=0, help="number of steps between evaluations" + ) + parser.add_argument( + "--baseline-scalar", + type=float, + help="scale the output of the baseline nets by this value", + ) + parser.add_argument( + "--no-baselines", + action="store_true", + default=False, + help="do not use data dependent baselines", + ) + parser.add_argument( + "--encoder-net", + type=int, + nargs="+", + default=[200], + help="encoder net hidden layer sizes", + ) + parser.add_argument( + "--decoder-net", + type=int, + nargs="+", + default=[200], + help="decoder net hidden layer sizes", + ) + parser.add_argument( + "--predict-net", type=int, nargs="+", help="predict net hidden layer sizes" + ) + parser.add_argument( + "--embed-net", type=int, nargs="+", help="embed net architecture" + ) + parser.add_argument( + "--bl-predict-net", + type=int, + nargs="+", + help="baseline predict net hidden layer sizes", + ) + parser.add_argument( + "--non-linearity", type=str, help="non linearity to use throughout" + ) + parser.add_argument( + "--viz", + action="store_true", + default=False, + help="generate vizualizations during optimization", + ) + parser.add_argument( + "--viz-every", + type=int, + default=100, + help="number of steps between vizualizations", + ) + parser.add_argument("--visdom-env", default="main", help="visdom enviroment name") + parser.add_argument("--load", type=str, help="load previously saved parameters") + parser.add_argument("--save", type=str, help="save parameters to specified file") + parser.add_argument( + "--save-every", + type=int, + default=1e4, + help="number of steps between parameter saves", + ) + parser.add_argument("--cuda", action="store_true", default=False, help="use cuda") + parser.add_argument( + "--jit", action="store_true", default=False, help="use PyTorch jit" + ) + parser.add_argument( + "-t", "--model-steps", type=int, default=3, help="number of time steps" + ) + parser.add_argument( + "--rnn-hidden-size", type=int, default=256, help="rnn hidden size" + ) + parser.add_argument( + "--encoder-latent-size", + type=int, + default=50, + help="attention window encoder/decoder latent space size", + ) + parser.add_argument( + "--decoder-output-bias", + type=float, + help="bias added to decoder output (prior to applying non-linearity)", + ) + parser.add_argument( + "--decoder-output-use-sigmoid", + action="store_true", + help="apply sigmoid function to output of decoder network", + ) + parser.add_argument( + "--window-size", type=int, default=28, help="attention window size" + ) + parser.add_argument( + "--z-pres-prior", + type=float, + default=0.5, + help="prior success probability for z_pres", + ) + parser.add_argument( + "--z-pres-prior-raw", + action="store_true", + default=False, + help="use --z-pres-prior directly as success prob instead of a geometric like prior", + ) + parser.add_argument( + "--anneal-prior", + choices="none lin exp".split(), + default="none", + help="anneal z_pres prior during optimization", + ) + parser.add_argument( + "--anneal-prior-to", type=float, default=1e-7, help="target z_pres prior prob" + ) + parser.add_argument( + "--anneal-prior-begin", + type=int, + default=0, + help="number of steps to wait before beginning to anneal the prior", + ) + parser.add_argument( + "--anneal-prior-duration", + type=int, + default=100000, + help="number of steps over which to anneal the prior", + ) + parser.add_argument( + "--pos-prior-mean", type=float, help="mean of the window position prior" + ) + parser.add_argument( + "--pos-prior-sd", type=float, help="std. dev. of the window position prior" + ) + parser.add_argument( + "--scale-prior-mean", type=float, help="mean of the window scale prior" + ) + parser.add_argument( + "--scale-prior-sd", type=float, help="std. dev. of the window scale prior" + ) + parser.add_argument( + "--no-masking", + action="store_true", + default=False, + help="do not mask out the costs of unused choices", + ) + parser.add_argument("--seed", type=int, help="random seed", default=None) + parser.add_argument( + "-v", + "--verbose", + action="store_true", + default=False, + help="write hyper parameters and network architecture to stdout", + ) + main(**vars(parser.parse_args())) diff --git a/pyro/source/examples/air/modules.py b/pyro/source/examples/air/modules.py new file mode 100644 index 0000000000000000000000000000000000000000..b35a66353ab148bc2ef26b2884be7b93968ce792 --- /dev/null +++ b/pyro/source/examples/air/modules.py @@ -0,0 +1,90 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +import torch.nn as nn +from torch.nn.functional import softplus + + +# Takes pixel intensities of the attention window to parameters (mean, +# standard deviation) of the distribution over the latent code, +# z_what. +class Encoder(nn.Module): + def __init__(self, x_size, h_sizes, z_size, non_linear_layer): + super().__init__() + self.z_size = z_size + output_size = 2 * z_size + self.mlp = MLP(x_size, h_sizes + [output_size], non_linear_layer) + + def forward(self, x): + a = self.mlp(x) + return a[:, 0 : self.z_size], softplus(a[:, self.z_size :]) + + +# Takes a latent code, z_what, to pixel intensities. +class Decoder(nn.Module): + def __init__(self, x_size, h_sizes, z_size, bias, use_sigmoid, non_linear_layer): + super().__init__() + self.bias = bias + self.use_sigmoid = use_sigmoid + self.mlp = MLP(z_size, h_sizes + [x_size], non_linear_layer) + + def forward(self, z): + a = self.mlp(z) + if self.bias is not None: + a = a + self.bias + return torch.sigmoid(a) if self.use_sigmoid else a + + +# A general purpose module to construct networks that look like: +# [Linear (256 -> 1)] +# [Linear (256 -> 256), ReLU (), Linear (256 -> 1)] +# [Linear (256 -> 256), ReLU (), Linear (256 -> 1), ReLU ()] +# etc. +class MLP(nn.Module): + def __init__( + self, in_size, out_sizes, non_linear_layer, output_non_linearity=False + ): + super().__init__() + assert len(out_sizes) >= 1 + layers = [] + in_sizes = [in_size] + out_sizes[0:-1] + sizes = list(zip(in_sizes, out_sizes)) + for i, o in sizes[0:-1]: + layers.append(nn.Linear(i, o)) + layers.append(non_linear_layer()) + layers.append(nn.Linear(sizes[-1][0], sizes[-1][1])) + if output_non_linearity: + layers.append(non_linear_layer()) + self.seq = nn.Sequential(*layers) + + def forward(self, x): + return self.seq(x) + + +# Takes the guide RNN hidden state to parameters of the guide +# distributions over z_where and z_pres. +class Predict(nn.Module): + def __init__( + self, input_size, h_sizes, z_pres_size, z_where_size, non_linear_layer + ): + super().__init__() + self.z_pres_size = z_pres_size + self.z_where_size = z_where_size + output_size = z_pres_size + 2 * z_where_size + self.mlp = MLP(input_size, h_sizes + [output_size], non_linear_layer) + + def forward(self, h): + out = self.mlp(h) + z_pres_p = torch.sigmoid(out[:, 0 : self.z_pres_size]) + z_where_loc = out[:, self.z_pres_size : self.z_pres_size + self.z_where_size] + z_where_scale = softplus(out[:, (self.z_pres_size + self.z_where_size) :]) + return z_pres_p, z_where_loc, z_where_scale + + +class Identity(nn.Module): + def __init__(self): + super().__init__() + + def forward(self, x): + return x diff --git a/pyro/source/examples/air/viz.py b/pyro/source/examples/air/viz.py new file mode 100644 index 0000000000000000000000000000000000000000..938003515aa61e8aca107b8627130c16fc288e68 --- /dev/null +++ b/pyro/source/examples/air/viz.py @@ -0,0 +1,76 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math +from collections import namedtuple + +import numpy as np +from PIL import Image, ImageDraw + + +def bounding_box(z_where, x_size): + """This doesn't take into account interpolation, but it's close + enough to be usable.""" + w = x_size / z_where.s + h = x_size / z_where.s + xtrans = -z_where.x / z_where.s * x_size / 2.0 + ytrans = -z_where.y / z_where.s * x_size / 2.0 + x = (x_size - w) / 2 + xtrans # origin is top left + y = (x_size - h) / 2 + ytrans + return (x, y), w, h + + +def arr2img(arr): + # arr is expected to be a 2d array of floats in [0,1] + return Image.frombuffer( + "L", arr.shape, (arr * 255).astype(np.uint8).tostring(), "raw", "L", 0, 1 + ) + + +def img2arr(img): + # assumes color image + # returns an array suitable for sending to visdom + return ( + np.array(img.getdata(), np.uint8).reshape(img.size + (3,)).transpose((2, 0, 1)) + ) + + +def colors(k): + return [(255, 0, 0), (0, 255, 0), (0, 0, 255)][k % 3] + + +def draw_one(imgarr, z_arr): + # Note that this clipping makes the visualisation somewhat + # misleading, as it incorrectly suggests objects occlude one + # another. + clipped = np.clip(imgarr.detach().cpu().numpy(), 0, 1) + img = arr2img(clipped).convert("RGB") + draw = ImageDraw.Draw(img) + for k, z in enumerate(z_arr): + # It would be better to use z_pres to change the opacity of + # the bounding boxes, but I couldn't make that work with PIL. + # Instead this darkens the color, and skips boxes altogether + # when z_pres==0. + if z.pres > 0: + (x, y), w, h = bounding_box(z, imgarr.size(0)) + color = tuple(map(lambda c: int(c * z.pres), colors(k))) + draw.rectangle([x, y, x + w, y + h], outline=color) + is_relaxed = any(z.pres != math.floor(z.pres) for z in z_arr) + fmtstr = "{:.1f}" if is_relaxed else "{:.0f}" + draw.text((0, 0), fmtstr.format(sum(z.pres for z in z_arr)), fill="white") + return img2arr(img) + + +def draw_many(imgarrs, z_arr): + # canvases is expected to be a (n,w,h) numpy array + # z_where_arr is expected to be a list of length n + return [draw_one(imgarr, z) for (imgarr, z) in zip(imgarrs.cpu(), z_arr)] + + +z_obj = namedtuple("z", "s,x,y,pres") + + +# Map a tensor of latents (as produced by latents_to_tensor) to a list +# of z_obj named tuples. +def tensor_to_objs(latents): + return [[z_obj._make(step) for step in z] for z in latents] diff --git a/pyro/source/examples/baseball.py b/pyro/source/examples/baseball.py new file mode 100644 index 0000000000000000000000000000000000000000..fe90355967c905f02439f3c5aa5a470455e0be22 --- /dev/null +++ b/pyro/source/examples/baseball.py @@ -0,0 +1,423 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import argparse +import logging +import math + +import pandas as pd +import torch + +import pyro +from pyro.distributions import Beta, Binomial, HalfCauchy, Normal, Pareto, Uniform +from pyro.distributions.util import scalar_like +from pyro.infer import MCMC, NUTS, Predictive +from pyro.infer.mcmc.util import initialize_model, summary +from pyro.util import ignore_experimental_warning + +""" +Example has been adapted from [1]. It demonstrates how to do Bayesian inference using +NUTS (or, HMC) in Pyro, and use of some common inference utilities. + +As in the Stan tutorial, this uses the small baseball dataset of Efron and Morris [2] +to estimate players' batting average which is the fraction of times a player got a +base hit out of the number of times they went up at bat. + +The dataset separates the initial 45 at-bats statistics from the remaining season. +We use the hits data from the initial 45 at-bats to estimate the batting average +for each player. We then use the remaining season's data to validate the predictions +from our models. + +Three models are evaluated: + - Complete pooling model: The success probability of scoring a hit is shared + amongst all players. + - No pooling model: Each individual player's success probability is distinct and + there is no data sharing amongst players. + - Partial pooling model: A hierarchical model with partial data sharing. + + +We recommend Radford Neal's tutorial on HMC ([3]) to users who would like to get a +more comprehensive understanding of HMC and its variants, and to [4] for details on +the No U-Turn Sampler, which provides an efficient and automated way (i.e. limited +hyper-parameters) of running HMC on different problems. + +[1] Carpenter B. (2016), ["Hierarchical Partial Pooling for Repeated Binary Trials"] + (http://mc-stan.org/users/documentation/case-studies/pool-binary-trials.html). +[2] Efron B., Morris C. (1975), "Data analysis using Stein's estimator and its + generalizations", J. Amer. Statist. Assoc., 70, 311-319. +[3] Neal, R. (2012), "MCMC using Hamiltonian Dynamics", + (https://arxiv.org/pdf/1206.1901.pdf) +[4] Hoffman, M. D. and Gelman, A. (2014), "The No-U-turn sampler: Adaptively setting + path lengths in Hamiltonian Monte Carlo", (https://arxiv.org/abs/1111.4246) +""" + +logging.basicConfig(format="%(message)s", level=logging.INFO) +DATA_URL = "https://github.com/pyro-ppl/datasets/blob/master/EfronMorrisBB.txt?raw=true" + + +# =================================== +# MODELS +# =================================== + + +def fully_pooled(at_bats, hits): + r""" + Number of hits in $K$ at bats for each player has a Binomial + distribution with a common probability of success, $\phi$. + + :param (torch.Tensor) at_bats: Number of at bats for each player. + :param (torch.Tensor) hits: Number of hits for the given at bats. + :return: Number of hits predicted by the model. + """ + phi_prior = Uniform(scalar_like(at_bats, 0), scalar_like(at_bats, 1)) + phi = pyro.sample("phi", phi_prior) + num_players = at_bats.shape[0] + with pyro.plate("num_players", num_players): + return pyro.sample("obs", Binomial(at_bats, phi), obs=hits) + + +def not_pooled(at_bats, hits): + r""" + Number of hits in $K$ at bats for each player has a Binomial + distribution with independent probability of success, $\phi_i$. + + :param (torch.Tensor) at_bats: Number of at bats for each player. + :param (torch.Tensor) hits: Number of hits for the given at bats. + :return: Number of hits predicted by the model. + """ + num_players = at_bats.shape[0] + with pyro.plate("num_players", num_players): + phi_prior = Uniform(scalar_like(at_bats, 0), scalar_like(at_bats, 1)) + phi = pyro.sample("phi", phi_prior) + return pyro.sample("obs", Binomial(at_bats, phi), obs=hits) + + +def partially_pooled(at_bats, hits): + r""" + Number of hits has a Binomial distribution with independent + probability of success, $\phi_i$. Each $\phi_i$ follows a Beta + distribution with concentration parameters $c_1$ and $c_2$, where + $c_1 = m * kappa$, $c_2 = (1 - m) * kappa$, $m ~ Uniform(0, 1)$, + and $kappa ~ Pareto(1, 1.5)$. + + :param (torch.Tensor) at_bats: Number of at bats for each player. + :param (torch.Tensor) hits: Number of hits for the given at bats. + :return: Number of hits predicted by the model. + """ + num_players = at_bats.shape[0] + m = pyro.sample("m", Uniform(scalar_like(at_bats, 0), scalar_like(at_bats, 1))) + kappa = pyro.sample( + "kappa", Pareto(scalar_like(at_bats, 1), scalar_like(at_bats, 1.5)) + ) + with pyro.plate("num_players", num_players): + phi_prior = Beta(m * kappa, (1 - m) * kappa) + phi = pyro.sample("phi", phi_prior) + return pyro.sample("obs", Binomial(at_bats, phi), obs=hits) + + +def partially_pooled_with_logit(at_bats, hits): + r""" + Number of hits has a Binomial distribution with a logit link function. + The logits $\alpha$ for each player is normally distributed with the + mean and scale parameters sharing a common prior. + + :param (torch.Tensor) at_bats: Number of at bats for each player. + :param (torch.Tensor) hits: Number of hits for the given at bats. + :return: Number of hits predicted by the model. + """ + num_players = at_bats.shape[0] + loc = pyro.sample("loc", Normal(scalar_like(at_bats, -1), scalar_like(at_bats, 1))) + scale = pyro.sample("scale", HalfCauchy(scale=scalar_like(at_bats, 1))) + with pyro.plate("num_players", num_players): + alpha = pyro.sample("alpha", Normal(loc, scale)) + return pyro.sample("obs", Binomial(at_bats, logits=alpha), obs=hits) + + +# =================================== +# DATA SUMMARIZE UTILS +# =================================== + + +def get_summary_table( + posterior, + sites, + player_names, + transforms={}, + diagnostics=False, + group_by_chain=False, +): + """ + Return summarized statistics for each of the ``sites`` in the + traces corresponding to the approximate posterior. + """ + site_stats = {} + + for site_name in sites: + marginal_site = posterior[site_name].cpu() + + if site_name in transforms: + marginal_site = transforms[site_name](marginal_site) + + site_summary = summary( + {site_name: marginal_site}, prob=0.5, group_by_chain=group_by_chain + )[site_name] + if site_summary["mean"].shape: + site_df = pd.DataFrame(site_summary, index=player_names) + else: + site_summary = {k: float(v) for k, v in site_summary.items()} + site_df = pd.DataFrame(site_summary, index=[0]) + if not diagnostics: + site_df = site_df.drop(["n_eff", "r_hat"], axis=1) + site_stats[site_name] = site_df.astype(float).round(2) + + return site_stats + + +def train_test_split(pd_dataframe): + """ + Training data - 45 initial at-bats and hits for each player. + Validation data - Full season at-bats and hits for each player. + """ + device = torch.Tensor().device + train_data = torch.tensor( + pd_dataframe[["At-Bats", "Hits"]].values, dtype=torch.float, device=device + ) + test_data = torch.tensor( + pd_dataframe[["SeasonAt-Bats", "SeasonHits"]].values, + dtype=torch.float, + device=device, + ) + first_name = pd_dataframe["FirstName"].values + last_name = pd_dataframe["LastName"].values + player_names = [ + " ".join([first, last]) for first, last in zip(first_name, last_name) + ] + return train_data, test_data, player_names + + +# =================================== +# MODEL EVALUATION UTILS +# =================================== + + +def sample_posterior_predictive(model, posterior_samples, baseball_dataset): + """ + Generate samples from posterior predictive distribution. + """ + train, test, player_names = train_test_split(baseball_dataset) + at_bats = train[:, 0] + at_bats_season = test[:, 0] + logging.Formatter("%(message)s") + logging.info("\nPosterior Predictive:") + logging.info("Hit Rate - Initial 45 At Bats") + logging.info("-----------------------------") + # set hits=None to convert it from observation node to sample node + train_predict = Predictive(model, posterior_samples)(at_bats, None) + train_summary = get_summary_table( + train_predict, sites=["obs"], player_names=player_names + )["obs"] + train_summary = train_summary.assign(ActualHits=baseball_dataset[["Hits"]].values) + logging.info(train_summary) + logging.info("\nHit Rate - Season Predictions") + logging.info("-----------------------------") + with ignore_experimental_warning(): + test_predict = Predictive(model, posterior_samples)(at_bats_season, None) + test_summary = get_summary_table( + test_predict, sites=["obs"], player_names=player_names + )["obs"] + test_summary = test_summary.assign( + ActualHits=baseball_dataset[["SeasonHits"]].values + ) + logging.info(test_summary) + + +def evaluate_pointwise_pred_density(model, posterior_samples, baseball_dataset): + """ + Evaluate the log probability density of observing the unseen data (season hits) + given a model and posterior distribution over the parameters. + """ + _, test, player_names = train_test_split(baseball_dataset) + at_bats_season, hits_season = test[:, 0], test[:, 1] + trace = Predictive(model, posterior_samples).get_vectorized_trace( + at_bats_season, hits_season + ) + # Use LogSumExp trick to evaluate $log(1/num_samples \sum_i p(new_data | \theta^{i})) $, + # where $\theta^{i}$ are parameter samples from the model's posterior. + trace.compute_log_prob() + post_loglik = trace.nodes["obs"]["log_prob"] + # computes expected log predictive density at each data point + exp_log_density = (post_loglik.logsumexp(0) - math.log(post_loglik.shape[0])).sum() + logging.info("\nLog pointwise predictive density") + logging.info("--------------------------------") + logging.info("{:.4f}\n".format(exp_log_density)) + + +def main(args): + baseball_dataset = pd.read_csv(DATA_URL, sep="\t") + train, _, player_names = train_test_split(baseball_dataset) + at_bats, hits = train[:, 0], train[:, 1] + logging.info("Original Dataset:") + logging.info(baseball_dataset) + + # (1) Full Pooling Model + # In this model, we illustrate how to use MCMC with general potential_fn. + init_params, potential_fn, transforms, _ = initialize_model( + fully_pooled, + model_args=(at_bats, hits), + num_chains=args.num_chains, + jit_compile=args.jit, + skip_jit_warnings=True, + ) + nuts_kernel = NUTS(potential_fn=potential_fn) + mcmc = MCMC( + nuts_kernel, + num_samples=args.num_samples, + warmup_steps=args.warmup_steps, + num_chains=args.num_chains, + initial_params=init_params, + transforms=transforms, + ) + mcmc.run(at_bats, hits) + samples_fully_pooled = mcmc.get_samples() + logging.info("\nModel: Fully Pooled") + logging.info("===================") + logging.info("\nphi:") + logging.info( + get_summary_table( + mcmc.get_samples(group_by_chain=True), + sites=["phi"], + player_names=player_names, + diagnostics=True, + group_by_chain=True, + )["phi"] + ) + num_divergences = sum(map(len, mcmc.diagnostics()["divergences"].values())) + logging.info("\nNumber of divergent transitions: {}\n".format(num_divergences)) + sample_posterior_predictive(fully_pooled, samples_fully_pooled, baseball_dataset) + evaluate_pointwise_pred_density( + fully_pooled, samples_fully_pooled, baseball_dataset + ) + + # (2) No Pooling Model + nuts_kernel = NUTS(not_pooled, jit_compile=args.jit, ignore_jit_warnings=True) + mcmc = MCMC( + nuts_kernel, + num_samples=args.num_samples, + warmup_steps=args.warmup_steps, + num_chains=args.num_chains, + ) + mcmc.run(at_bats, hits) + samples_not_pooled = mcmc.get_samples() + logging.info("\nModel: Not Pooled") + logging.info("=================") + logging.info("\nphi:") + logging.info( + get_summary_table( + mcmc.get_samples(group_by_chain=True), + sites=["phi"], + player_names=player_names, + diagnostics=True, + group_by_chain=True, + )["phi"] + ) + num_divergences = sum(map(len, mcmc.diagnostics()["divergences"].values())) + logging.info("\nNumber of divergent transitions: {}\n".format(num_divergences)) + sample_posterior_predictive(not_pooled, samples_not_pooled, baseball_dataset) + evaluate_pointwise_pred_density(not_pooled, samples_not_pooled, baseball_dataset) + + # (3) Partially Pooled Model + nuts_kernel = NUTS(partially_pooled, jit_compile=args.jit, ignore_jit_warnings=True) + mcmc = MCMC( + nuts_kernel, + num_samples=args.num_samples, + warmup_steps=args.warmup_steps, + num_chains=args.num_chains, + ) + mcmc.run(at_bats, hits) + samples_partially_pooled = mcmc.get_samples() + logging.info("\nModel: Partially Pooled") + logging.info("=======================") + logging.info("\nphi:") + logging.info( + get_summary_table( + mcmc.get_samples(group_by_chain=True), + sites=["phi"], + player_names=player_names, + diagnostics=True, + group_by_chain=True, + )["phi"] + ) + num_divergences = sum(map(len, mcmc.diagnostics()["divergences"].values())) + logging.info("\nNumber of divergent transitions: {}\n".format(num_divergences)) + sample_posterior_predictive( + partially_pooled, samples_partially_pooled, baseball_dataset + ) + evaluate_pointwise_pred_density( + partially_pooled, samples_partially_pooled, baseball_dataset + ) + + # (4) Partially Pooled with Logit Model + nuts_kernel = NUTS( + partially_pooled_with_logit, jit_compile=args.jit, ignore_jit_warnings=True + ) + mcmc = MCMC( + nuts_kernel, + num_samples=args.num_samples, + warmup_steps=args.warmup_steps, + num_chains=args.num_chains, + ) + mcmc.run(at_bats, hits) + samples_partially_pooled_logit = mcmc.get_samples() + logging.info("\nModel: Partially Pooled with Logit") + logging.info("==================================") + logging.info("\nSigmoid(alpha):") + logging.info( + get_summary_table( + mcmc.get_samples(group_by_chain=True), + sites=["alpha"], + player_names=player_names, + transforms={"alpha": torch.sigmoid}, + diagnostics=True, + group_by_chain=True, + )["alpha"] + ) + num_divergences = sum(map(len, mcmc.diagnostics()["divergences"].values())) + logging.info("\nNumber of divergent transitions: {}\n".format(num_divergences)) + sample_posterior_predictive( + partially_pooled_with_logit, samples_partially_pooled_logit, baseball_dataset + ) + evaluate_pointwise_pred_density( + partially_pooled_with_logit, samples_partially_pooled_logit, baseball_dataset + ) + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser(description="Baseball batting average using HMC") + parser.add_argument("-n", "--num-samples", nargs="?", default=200, type=int) + parser.add_argument("--num-chains", nargs="?", default=4, type=int) + parser.add_argument("--warmup-steps", nargs="?", default=100, type=int) + parser.add_argument("--rng_seed", nargs="?", default=0, type=int) + parser.add_argument( + "--jit", action="store_true", default=False, help="use PyTorch jit" + ) + parser.add_argument( + "--cuda", action="store_true", default=False, help="run this example in GPU" + ) + args = parser.parse_args() + + # work around the error "CUDA error: initialization error" + # see https://github.com/pytorch/pytorch/issues/2517 + torch.multiprocessing.set_start_method("spawn") + + pyro.set_rng_seed(args.rng_seed) + # Enable validation checks + + # work around with the error "RuntimeError: received 0 items of ancdata" + # see https://discuss.pytorch.org/t/received-0-items-of-ancdata-pytorch-0-4-0/19823 + torch.multiprocessing.set_sharing_strategy("file_system") + + if args.cuda: + torch.set_default_device("cuda") + + main(args) diff --git a/pyro/source/examples/capture_recapture/cjs.py b/pyro/source/examples/capture_recapture/cjs.py new file mode 100644 index 0000000000000000000000000000000000000000..193b5631c57d9b8337d668dbc6cc0242ab6e8bc1 --- /dev/null +++ b/pyro/source/examples/capture_recapture/cjs.py @@ -0,0 +1,386 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +We show how to implement several variants of the Cormack-Jolly-Seber (CJS) +[4, 5, 6] model used in ecology to analyze animal capture-recapture data. +For a discussion of these models see reference [1]. + +We make use of two datasets: +-- the European Dipper (Cinclus cinclus) data from reference [2] + (this is Norway's national bird). +-- the meadow voles data from reference [3]. + +Compare to the Stan implementations in [7]. + +References +[1] Kery, M., & Schaub, M. (2011). Bayesian population analysis using + WinBUGS: a hierarchical perspective. Academic Press. +[2] Lebreton, J.D., Burnham, K.P., Clobert, J., & Anderson, D.R. (1992). + Modeling survival and testing biological hypotheses using marked animals: + a unified approach with case studies. Ecological monographs, 62(1), 67-118. +[3] Nichols, Pollock, Hines (1984) The use of a robust capture-recapture design + in small mammal population studies: A field example with Microtus pennsylvanicus. + Acta Theriologica 29:357-365. +[4] Cormack, R.M., 1964. Estimates of survival from the sighting of marked animals. + Biometrika 51, 429-438. +[5] Jolly, G.M., 1965. Explicit estimates from capture-recapture data with both death + and immigration-stochastic model. Biometrika 52, 225-247. +[6] Seber, G.A.F., 1965. A note on the multiple recapture census. Biometrika 52, 249-259. +[7] https://github.com/stan-dev/example-models/tree/master/BPA/Ch.07 +""" + +import argparse +import os + +import numpy as np +import torch + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.infer import SVI, TraceEnum_ELBO, TraceTMC_ELBO +from pyro.infer.autoguide import AutoDiagonalNormal +from pyro.optim import Adam + +""" +Our first and simplest CJS model variant only has two continuous +(scalar) latent random variables: i) the survival probability phi; +and ii) the recapture probability rho. These are treated as fixed +effects with no temporal or individual/group variation. +""" + + +def model_1(capture_history, sex): + N, T = capture_history.shape + phi = pyro.sample("phi", dist.Uniform(0.0, 1.0)) # survival probability + rho = pyro.sample("rho", dist.Uniform(0.0, 1.0)) # recapture probability + + with pyro.plate("animals", N, dim=-1): + z = torch.ones(N) + # we use this mask to eliminate extraneous log probabilities + # that arise for a given individual before its first capture. + first_capture_mask = torch.zeros(N).bool() + for t in pyro.markov(range(T)): + with poutine.mask(mask=first_capture_mask): + mu_z_t = first_capture_mask.float() * phi * z + ( + 1 - first_capture_mask.float() + ) + # we use parallel enumeration to exactly sum out + # the discrete states z_t. + z = pyro.sample( + "z_{}".format(t), + dist.Bernoulli(mu_z_t), + infer={"enumerate": "parallel"}, + ) + mu_y_t = rho * z + pyro.sample( + "y_{}".format(t), dist.Bernoulli(mu_y_t), obs=capture_history[:, t] + ) + first_capture_mask |= capture_history[:, t].bool() + + +""" +In our second model variant there is a time-varying survival probability phi_t for +T-1 of the T time periods of the capture data; each phi_t is treated as a fixed effect. +""" + + +def model_2(capture_history, sex): + N, T = capture_history.shape + rho = pyro.sample("rho", dist.Uniform(0.0, 1.0)) # recapture probability + + z = torch.ones(N) + first_capture_mask = torch.zeros(N).bool() + # we create the plate once, outside of the loop over t + animals_plate = pyro.plate("animals", N, dim=-1) + for t in pyro.markov(range(T)): + # note that phi_t needs to be outside the plate, since + # phi_t is shared across all N individuals + phi_t = ( + pyro.sample("phi_{}".format(t), dist.Uniform(0.0, 1.0)) if t > 0 else 1.0 + ) + with animals_plate, poutine.mask(mask=first_capture_mask): + mu_z_t = first_capture_mask.float() * phi_t * z + ( + 1 - first_capture_mask.float() + ) + # we use parallel enumeration to exactly sum out + # the discrete states z_t. + z = pyro.sample( + "z_{}".format(t), + dist.Bernoulli(mu_z_t), + infer={"enumerate": "parallel"}, + ) + mu_y_t = rho * z + pyro.sample( + "y_{}".format(t), dist.Bernoulli(mu_y_t), obs=capture_history[:, t] + ) + first_capture_mask |= capture_history[:, t].bool() + + +""" +In our third model variant there is a survival probability phi_t for T-1 +of the T time periods of the capture data (just like in model_2), but here +each phi_t is treated as a random effect. +""" + + +def model_3(capture_history, sex): + def logit(p): + return torch.log(p) - torch.log1p(-p) + + N, T = capture_history.shape + phi_mean = pyro.sample( + "phi_mean", dist.Uniform(0.0, 1.0) + ) # mean survival probability + phi_logit_mean = logit(phi_mean) + # controls temporal variability of survival probability + phi_sigma = pyro.sample("phi_sigma", dist.Uniform(0.0, 10.0)) + rho = pyro.sample("rho", dist.Uniform(0.0, 1.0)) # recapture probability + + z = torch.ones(N) + first_capture_mask = torch.zeros(N).bool() + # we create the plate once, outside of the loop over t + animals_plate = pyro.plate("animals", N, dim=-1) + for t in pyro.markov(range(T)): + phi_logit_t = ( + pyro.sample( + "phi_logit_{}".format(t), dist.Normal(phi_logit_mean, phi_sigma) + ) + if t > 0 + else torch.tensor(0.0) + ) + phi_t = torch.sigmoid(phi_logit_t) + with animals_plate, poutine.mask(mask=first_capture_mask): + mu_z_t = first_capture_mask.float() * phi_t * z + ( + 1 - first_capture_mask.float() + ) + # we use parallel enumeration to exactly sum out + # the discrete states z_t. + z = pyro.sample( + "z_{}".format(t), + dist.Bernoulli(mu_z_t), + infer={"enumerate": "parallel"}, + ) + mu_y_t = rho * z + pyro.sample( + "y_{}".format(t), dist.Bernoulli(mu_y_t), obs=capture_history[:, t] + ) + first_capture_mask |= capture_history[:, t].bool() + + +""" +In our fourth model variant we include group-level fixed effects +for sex (male, female). +""" + + +def model_4(capture_history, sex): + N, T = capture_history.shape + # survival probabilities for males/females + phi_male = pyro.sample("phi_male", dist.Uniform(0.0, 1.0)) + phi_female = pyro.sample("phi_female", dist.Uniform(0.0, 1.0)) + # we construct a N-dimensional vector that contains the appropriate + # phi for each individual given its sex (female = 0, male = 1) + phi = sex * phi_male + (1.0 - sex) * phi_female + rho = pyro.sample("rho", dist.Uniform(0.0, 1.0)) # recapture probability + + with pyro.plate("animals", N, dim=-1): + z = torch.ones(N) + # we use this mask to eliminate extraneous log probabilities + # that arise for a given individual before its first capture. + first_capture_mask = torch.zeros(N).bool() + for t in pyro.markov(range(T)): + with poutine.mask(mask=first_capture_mask): + mu_z_t = first_capture_mask.float() * phi * z + ( + 1 - first_capture_mask.float() + ) + # we use parallel enumeration to exactly sum out + # the discrete states z_t. + z = pyro.sample( + "z_{}".format(t), + dist.Bernoulli(mu_z_t), + infer={"enumerate": "parallel"}, + ) + mu_y_t = rho * z + pyro.sample( + "y_{}".format(t), dist.Bernoulli(mu_y_t), obs=capture_history[:, t] + ) + first_capture_mask |= capture_history[:, t].bool() + + +""" +In our final model variant we include both fixed group effects and fixed +time effects for the survival probability phi: + +logit(phi_t) = beta_group + gamma_t + +We need to take care that the model is not overparameterized; to do this +we effectively let a single scalar beta encode the difference in male +and female survival probabilities. +""" + + +def model_5(capture_history, sex): + N, T = capture_history.shape + + # phi_beta controls the survival probability differential + # for males versus females (in logit space) + phi_beta = pyro.sample("phi_beta", dist.Normal(0.0, 10.0)) + phi_beta = sex * phi_beta + rho = pyro.sample("rho", dist.Uniform(0.0, 1.0)) # recapture probability + + z = torch.ones(N) + first_capture_mask = torch.zeros(N).bool() + # we create the plate once, outside of the loop over t + animals_plate = pyro.plate("animals", N, dim=-1) + for t in pyro.markov(range(T)): + phi_gamma_t = ( + pyro.sample("phi_gamma_{}".format(t), dist.Normal(0.0, 10.0)) + if t > 0 + else 0.0 + ) + phi_t = torch.sigmoid(phi_beta + phi_gamma_t) + with animals_plate, poutine.mask(mask=first_capture_mask): + mu_z_t = first_capture_mask.float() * phi_t * z + ( + 1 - first_capture_mask.float() + ) + # we use parallel enumeration to exactly sum out + # the discrete states z_t. + z = pyro.sample( + "z_{}".format(t), + dist.Bernoulli(mu_z_t), + infer={"enumerate": "parallel"}, + ) + mu_y_t = rho * z + pyro.sample( + "y_{}".format(t), dist.Bernoulli(mu_y_t), obs=capture_history[:, t] + ) + first_capture_mask |= capture_history[:, t].bool() + + +models = { + name[len("model_") :]: model + for name, model in globals().items() + if name.startswith("model_") +} + + +def main(args): + pyro.set_rng_seed(0) + pyro.clear_param_store() + + # load data + if args.dataset == "dipper": + capture_history_file = ( + os.path.dirname(os.path.abspath(__file__)) + "/dipper_capture_history.csv" + ) + elif args.dataset == "vole": + capture_history_file = ( + os.path.dirname(os.path.abspath(__file__)) + + "/meadow_voles_capture_history.csv" + ) + else: + raise ValueError("Available datasets are 'dipper' and 'vole'.") + + capture_history = torch.tensor( + np.genfromtxt(capture_history_file, delimiter=",") + ).float()[:, 1:] + N, T = capture_history.shape + print( + "Loaded {} capture history for {} individuals collected over {} time periods.".format( + args.dataset, N, T + ) + ) + + if args.dataset == "dipper" and args.model in ["4", "5"]: + sex_file = os.path.dirname(os.path.abspath(__file__)) + "/dipper_sex.csv" + sex = torch.tensor(np.genfromtxt(sex_file, delimiter=",")).float()[:, 1] + print("Loaded dipper sex data.") + elif args.dataset == "vole" and args.model in ["4", "5"]: + raise ValueError( + "Cannot run model_{} on meadow voles data, since we lack sex " + "information for these animals.".format(args.model) + ) + else: + sex = None + + model = models[args.model] + + # we use poutine.block to only expose the continuous latent variables + # in the models to AutoDiagonalNormal (all of which begin with 'phi' + # or 'rho') + def expose_fn(msg): + return msg["name"][0:3] in ["phi", "rho"] + + # we use a mean field diagonal normal variational distributions (i.e. guide) + # for the continuous latent variables. + guide = AutoDiagonalNormal(poutine.block(model, expose_fn=expose_fn)) + + # since we enumerate the discrete random variables, + # we need to use TraceEnum_ELBO or TraceTMC_ELBO. + optim = Adam({"lr": args.learning_rate}) + if args.tmc: + elbo = TraceTMC_ELBO(max_plate_nesting=1) + tmc_model = poutine.infer_config( + model, + lambda msg: ( + {"num_samples": args.tmc_num_samples, "expand": False} + if msg["infer"].get("enumerate", None) == "parallel" + else {} + ), + ) # noqa: E501 + svi = SVI(tmc_model, guide, optim, elbo) + else: + elbo = TraceEnum_ELBO( + max_plate_nesting=1, num_particles=20, vectorize_particles=True + ) + svi = SVI(model, guide, optim, elbo) + + losses = [] + + print( + "Beginning training of model_{} with Stochastic Variational Inference.".format( + args.model + ) + ) + + for step in range(args.num_steps): + loss = svi.step(capture_history, sex) + losses.append(loss) + if step % 20 == 0 and step > 0 or step == args.num_steps - 1: + print("[iteration %03d] loss: %.3f" % (step, np.mean(losses[-20:]))) + + # evaluate final trained model + elbo_eval = TraceEnum_ELBO( + max_plate_nesting=1, num_particles=2000, vectorize_particles=True + ) + svi_eval = SVI(model, guide, optim, elbo_eval) + print("Final loss: %.4f" % svi_eval.evaluate_loss(capture_history, sex)) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description="CJS capture-recapture model for ecological data" + ) + parser.add_argument( + "-m", + "--model", + default="1", + type=str, + help="one of: {}".format(", ".join(sorted(models.keys()))), + ) + parser.add_argument("-d", "--dataset", default="dipper", type=str) + parser.add_argument("-n", "--num-steps", default=400, type=int) + parser.add_argument("-lr", "--learning-rate", default=0.002, type=float) + parser.add_argument( + "--tmc", + action="store_true", + help="Use Tensor Monte Carlo instead of exact enumeration " + "to estimate the marginal likelihood. You probably don't want to do this, " + "except to see that TMC makes Monte Carlo gradient estimation feasible " + "even with very large numbers of non-reparametrized variables.", + ) + parser.add_argument("--tmc-num-samples", default=10, type=int) + args = parser.parse_args() + main(args) diff --git a/pyro/source/examples/capture_recapture/dipper_capture_histories.csv b/pyro/source/examples/capture_recapture/dipper_capture_histories.csv new file mode 100644 index 0000000000000000000000000000000000000000..1d7fa289d57978cd89c84b36cd737c06e1c57575 --- /dev/null +++ b/pyro/source/examples/capture_recapture/dipper_capture_histories.csv @@ -0,0 +1,294 @@ +0,1.0,1.0,1.0,1.0,1.0,1.0,0.0 +1,1.0,1.0,1.0,1.0,1.0,0.0,0.0 +2,1.0,1.0,1.0,1.0,0.0,0.0,0.0 +3,1.0,1.0,1.0,1.0,0.0,0.0,0.0 +4,1.0,1.0,0.0,1.0,1.0,1.0,0.0 +5,1.0,1.0,0.0,0.0,0.0,0.0,0.0 +6,1.0,1.0,0.0,0.0,0.0,0.0,0.0 +7,1.0,1.0,0.0,0.0,0.0,0.0,0.0 +8,1.0,1.0,0.0,0.0,0.0,0.0,0.0 +9,1.0,1.0,0.0,0.0,0.0,0.0,0.0 +10,1.0,1.0,0.0,0.0,0.0,0.0,0.0 +11,1.0,0.0,1.0,0.0,0.0,0.0,0.0 +12,1.0,0.0,1.0,0.0,0.0,0.0,0.0 +13,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +14,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +15,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +16,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +17,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +18,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +19,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +20,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +21,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +22,0.0,1.0,1.0,1.0,1.0,1.0,1.0 +23,0.0,1.0,1.0,1.0,1.0,1.0,1.0 +24,0.0,1.0,1.0,1.0,1.0,1.0,0.0 +25,0.0,1.0,1.0,1.0,1.0,0.0,0.0 +26,0.0,1.0,1.0,1.0,1.0,0.0,0.0 +27,0.0,1.0,1.0,1.0,1.0,0.0,0.0 +28,0.0,1.0,1.0,1.0,0.0,0.0,0.0 +29,0.0,1.0,1.0,1.0,0.0,0.0,0.0 +30,0.0,1.0,1.0,0.0,1.0,1.0,0.0 +31,0.0,1.0,1.0,0.0,0.0,0.0,0.0 +32,0.0,1.0,1.0,0.0,0.0,0.0,0.0 +33,0.0,1.0,1.0,0.0,0.0,0.0,0.0 +34,0.0,1.0,1.0,0.0,0.0,0.0,0.0 +35,0.0,1.0,1.0,0.0,0.0,0.0,0.0 +36,0.0,1.0,1.0,0.0,0.0,0.0,0.0 +37,0.0,1.0,1.0,0.0,0.0,0.0,0.0 +38,0.0,1.0,1.0,0.0,0.0,0.0,0.0 +39,0.0,1.0,1.0,0.0,0.0,0.0,0.0 +40,0.0,1.0,1.0,0.0,0.0,0.0,0.0 +41,0.0,1.0,1.0,0.0,0.0,0.0,0.0 +42,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +43,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +44,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +45,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +46,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +47,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +48,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +49,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +50,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +51,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +52,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +53,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +54,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +55,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +56,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +57,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +58,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +59,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +60,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +61,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +62,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +63,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +64,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +65,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +66,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +67,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +68,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +69,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +70,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +71,0.0,0.0,1.0,1.0,1.0,1.0,1.0 +72,0.0,0.0,1.0,1.0,1.0,1.0,1.0 +73,0.0,0.0,1.0,1.0,1.0,1.0,0.0 +74,0.0,0.0,1.0,1.0,1.0,1.0,0.0 +75,0.0,0.0,1.0,1.0,1.0,0.0,0.0 +76,0.0,0.0,1.0,1.0,1.0,0.0,0.0 +77,0.0,0.0,1.0,1.0,1.0,0.0,0.0 +78,0.0,0.0,1.0,1.0,1.0,0.0,0.0 +79,0.0,0.0,1.0,1.0,1.0,0.0,0.0 +80,0.0,0.0,1.0,1.0,1.0,0.0,0.0 +81,0.0,0.0,1.0,1.0,0.0,0.0,0.0 +82,0.0,0.0,1.0,1.0,0.0,0.0,0.0 +83,0.0,0.0,1.0,1.0,0.0,0.0,0.0 +84,0.0,0.0,1.0,1.0,0.0,0.0,0.0 +85,0.0,0.0,1.0,1.0,0.0,0.0,0.0 +86,0.0,0.0,1.0,1.0,0.0,0.0,0.0 +87,0.0,0.0,1.0,1.0,0.0,0.0,0.0 +88,0.0,0.0,1.0,1.0,0.0,0.0,0.0 +89,0.0,0.0,1.0,1.0,0.0,0.0,0.0 +90,0.0,0.0,1.0,1.0,0.0,0.0,0.0 +91,0.0,0.0,1.0,1.0,0.0,0.0,0.0 +92,0.0,0.0,1.0,1.0,0.0,0.0,0.0 +93,0.0,0.0,1.0,0.0,1.0,1.0,0.0 +94,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +95,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +96,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +97,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +98,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +99,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +100,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +101,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +102,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +103,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +104,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +105,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +106,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +107,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +108,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +109,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +110,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +111,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +112,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +113,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +114,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +115,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +116,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +117,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +118,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +119,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +120,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +121,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +122,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +123,0.0,0.0,0.0,1.0,1.0,1.0,1.0 +124,0.0,0.0,0.0,1.0,1.0,1.0,1.0 +125,0.0,0.0,0.0,1.0,1.0,1.0,1.0 +126,0.0,0.0,0.0,1.0,1.0,1.0,1.0 +127,0.0,0.0,0.0,1.0,1.0,1.0,1.0 +128,0.0,0.0,0.0,1.0,1.0,1.0,1.0 +129,0.0,0.0,0.0,1.0,1.0,1.0,1.0 +130,0.0,0.0,0.0,1.0,1.0,1.0,1.0 +131,0.0,0.0,0.0,1.0,1.0,1.0,0.0 +132,0.0,0.0,0.0,1.0,1.0,1.0,0.0 +133,0.0,0.0,0.0,1.0,1.0,1.0,0.0 +134,0.0,0.0,0.0,1.0,1.0,1.0,0.0 +135,0.0,0.0,0.0,1.0,1.0,1.0,0.0 +136,0.0,0.0,0.0,1.0,1.0,1.0,0.0 +137,0.0,0.0,0.0,1.0,1.0,1.0,0.0 +138,0.0,0.0,0.0,1.0,1.0,0.0,0.0 +139,0.0,0.0,0.0,1.0,1.0,0.0,0.0 +140,0.0,0.0,0.0,1.0,1.0,0.0,0.0 +141,0.0,0.0,0.0,1.0,1.0,0.0,0.0 +142,0.0,0.0,0.0,1.0,1.0,0.0,0.0 +143,0.0,0.0,0.0,1.0,1.0,0.0,0.0 +144,0.0,0.0,0.0,1.0,1.0,0.0,0.0 +145,0.0,0.0,0.0,1.0,1.0,0.0,0.0 +146,0.0,0.0,0.0,1.0,1.0,0.0,0.0 +147,0.0,0.0,0.0,1.0,1.0,0.0,0.0 +148,0.0,0.0,0.0,1.0,1.0,0.0,0.0 +149,0.0,0.0,0.0,1.0,0.0,1.0,1.0 +150,0.0,0.0,0.0,1.0,0.0,0.0,1.0 +151,0.0,0.0,0.0,1.0,0.0,0.0,1.0 +152,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +153,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +154,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +155,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +156,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +157,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +158,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +159,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +160,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +161,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +162,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +163,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +164,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +165,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +166,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +167,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +168,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +169,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +170,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +171,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +172,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +173,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +174,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +175,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +176,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +177,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +178,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +179,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +180,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +181,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +182,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +183,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +184,0.0,0.0,0.0,0.0,1.0,1.0,0.0 +185,0.0,0.0,0.0,0.0,1.0,1.0,0.0 +186,0.0,0.0,0.0,0.0,1.0,1.0,0.0 +187,0.0,0.0,0.0,0.0,1.0,1.0,0.0 +188,0.0,0.0,0.0,0.0,1.0,1.0,0.0 +189,0.0,0.0,0.0,0.0,1.0,1.0,0.0 +190,0.0,0.0,0.0,0.0,1.0,1.0,0.0 +191,0.0,0.0,0.0,0.0,1.0,1.0,0.0 +192,0.0,0.0,0.0,0.0,1.0,1.0,0.0 +193,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +194,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +195,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +196,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +197,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +198,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +199,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +200,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +201,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +202,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +203,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +204,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +205,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +206,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +207,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +208,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +209,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +210,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +211,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +212,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +213,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +214,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +215,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +216,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +217,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +218,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +219,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +220,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +221,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +222,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +223,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +224,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +225,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +226,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +227,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +228,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +229,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +230,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +231,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +232,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +233,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +234,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +235,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +236,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +237,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +238,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +239,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +240,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +241,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +242,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +243,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +244,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +245,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +246,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +247,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +248,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +249,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +250,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +251,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +252,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +253,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +254,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +255,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +256,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +257,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +258,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +259,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +260,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +261,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +262,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +263,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +264,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +265,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +266,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +267,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +268,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +269,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +270,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +271,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +272,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +273,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +274,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +275,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +276,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +277,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +278,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +279,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +280,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +281,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +282,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +283,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +284,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +285,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +286,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +287,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +288,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +289,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +290,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +291,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +292,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +293,0.0,0.0,0.0,0.0,0.0,0.0,1.0 diff --git a/pyro/source/examples/capture_recapture/dipper_capture_history.csv b/pyro/source/examples/capture_recapture/dipper_capture_history.csv new file mode 100644 index 0000000000000000000000000000000000000000..1d7fa289d57978cd89c84b36cd737c06e1c57575 --- /dev/null +++ b/pyro/source/examples/capture_recapture/dipper_capture_history.csv @@ -0,0 +1,294 @@ +0,1.0,1.0,1.0,1.0,1.0,1.0,0.0 +1,1.0,1.0,1.0,1.0,1.0,0.0,0.0 +2,1.0,1.0,1.0,1.0,0.0,0.0,0.0 +3,1.0,1.0,1.0,1.0,0.0,0.0,0.0 +4,1.0,1.0,0.0,1.0,1.0,1.0,0.0 +5,1.0,1.0,0.0,0.0,0.0,0.0,0.0 +6,1.0,1.0,0.0,0.0,0.0,0.0,0.0 +7,1.0,1.0,0.0,0.0,0.0,0.0,0.0 +8,1.0,1.0,0.0,0.0,0.0,0.0,0.0 +9,1.0,1.0,0.0,0.0,0.0,0.0,0.0 +10,1.0,1.0,0.0,0.0,0.0,0.0,0.0 +11,1.0,0.0,1.0,0.0,0.0,0.0,0.0 +12,1.0,0.0,1.0,0.0,0.0,0.0,0.0 +13,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +14,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +15,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +16,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +17,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +18,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +19,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +20,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +21,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +22,0.0,1.0,1.0,1.0,1.0,1.0,1.0 +23,0.0,1.0,1.0,1.0,1.0,1.0,1.0 +24,0.0,1.0,1.0,1.0,1.0,1.0,0.0 +25,0.0,1.0,1.0,1.0,1.0,0.0,0.0 +26,0.0,1.0,1.0,1.0,1.0,0.0,0.0 +27,0.0,1.0,1.0,1.0,1.0,0.0,0.0 +28,0.0,1.0,1.0,1.0,0.0,0.0,0.0 +29,0.0,1.0,1.0,1.0,0.0,0.0,0.0 +30,0.0,1.0,1.0,0.0,1.0,1.0,0.0 +31,0.0,1.0,1.0,0.0,0.0,0.0,0.0 +32,0.0,1.0,1.0,0.0,0.0,0.0,0.0 +33,0.0,1.0,1.0,0.0,0.0,0.0,0.0 +34,0.0,1.0,1.0,0.0,0.0,0.0,0.0 +35,0.0,1.0,1.0,0.0,0.0,0.0,0.0 +36,0.0,1.0,1.0,0.0,0.0,0.0,0.0 +37,0.0,1.0,1.0,0.0,0.0,0.0,0.0 +38,0.0,1.0,1.0,0.0,0.0,0.0,0.0 +39,0.0,1.0,1.0,0.0,0.0,0.0,0.0 +40,0.0,1.0,1.0,0.0,0.0,0.0,0.0 +41,0.0,1.0,1.0,0.0,0.0,0.0,0.0 +42,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +43,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +44,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +45,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +46,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +47,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +48,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +49,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +50,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +51,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +52,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +53,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +54,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +55,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +56,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +57,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +58,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +59,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +60,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +61,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +62,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +63,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +64,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +65,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +66,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +67,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +68,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +69,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +70,0.0,1.0,0.0,0.0,0.0,0.0,0.0 +71,0.0,0.0,1.0,1.0,1.0,1.0,1.0 +72,0.0,0.0,1.0,1.0,1.0,1.0,1.0 +73,0.0,0.0,1.0,1.0,1.0,1.0,0.0 +74,0.0,0.0,1.0,1.0,1.0,1.0,0.0 +75,0.0,0.0,1.0,1.0,1.0,0.0,0.0 +76,0.0,0.0,1.0,1.0,1.0,0.0,0.0 +77,0.0,0.0,1.0,1.0,1.0,0.0,0.0 +78,0.0,0.0,1.0,1.0,1.0,0.0,0.0 +79,0.0,0.0,1.0,1.0,1.0,0.0,0.0 +80,0.0,0.0,1.0,1.0,1.0,0.0,0.0 +81,0.0,0.0,1.0,1.0,0.0,0.0,0.0 +82,0.0,0.0,1.0,1.0,0.0,0.0,0.0 +83,0.0,0.0,1.0,1.0,0.0,0.0,0.0 +84,0.0,0.0,1.0,1.0,0.0,0.0,0.0 +85,0.0,0.0,1.0,1.0,0.0,0.0,0.0 +86,0.0,0.0,1.0,1.0,0.0,0.0,0.0 +87,0.0,0.0,1.0,1.0,0.0,0.0,0.0 +88,0.0,0.0,1.0,1.0,0.0,0.0,0.0 +89,0.0,0.0,1.0,1.0,0.0,0.0,0.0 +90,0.0,0.0,1.0,1.0,0.0,0.0,0.0 +91,0.0,0.0,1.0,1.0,0.0,0.0,0.0 +92,0.0,0.0,1.0,1.0,0.0,0.0,0.0 +93,0.0,0.0,1.0,0.0,1.0,1.0,0.0 +94,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +95,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +96,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +97,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +98,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +99,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +100,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +101,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +102,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +103,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +104,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +105,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +106,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +107,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +108,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +109,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +110,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +111,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +112,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +113,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +114,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +115,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +116,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +117,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +118,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +119,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +120,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +121,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +122,0.0,0.0,1.0,0.0,0.0,0.0,0.0 +123,0.0,0.0,0.0,1.0,1.0,1.0,1.0 +124,0.0,0.0,0.0,1.0,1.0,1.0,1.0 +125,0.0,0.0,0.0,1.0,1.0,1.0,1.0 +126,0.0,0.0,0.0,1.0,1.0,1.0,1.0 +127,0.0,0.0,0.0,1.0,1.0,1.0,1.0 +128,0.0,0.0,0.0,1.0,1.0,1.0,1.0 +129,0.0,0.0,0.0,1.0,1.0,1.0,1.0 +130,0.0,0.0,0.0,1.0,1.0,1.0,1.0 +131,0.0,0.0,0.0,1.0,1.0,1.0,0.0 +132,0.0,0.0,0.0,1.0,1.0,1.0,0.0 +133,0.0,0.0,0.0,1.0,1.0,1.0,0.0 +134,0.0,0.0,0.0,1.0,1.0,1.0,0.0 +135,0.0,0.0,0.0,1.0,1.0,1.0,0.0 +136,0.0,0.0,0.0,1.0,1.0,1.0,0.0 +137,0.0,0.0,0.0,1.0,1.0,1.0,0.0 +138,0.0,0.0,0.0,1.0,1.0,0.0,0.0 +139,0.0,0.0,0.0,1.0,1.0,0.0,0.0 +140,0.0,0.0,0.0,1.0,1.0,0.0,0.0 +141,0.0,0.0,0.0,1.0,1.0,0.0,0.0 +142,0.0,0.0,0.0,1.0,1.0,0.0,0.0 +143,0.0,0.0,0.0,1.0,1.0,0.0,0.0 +144,0.0,0.0,0.0,1.0,1.0,0.0,0.0 +145,0.0,0.0,0.0,1.0,1.0,0.0,0.0 +146,0.0,0.0,0.0,1.0,1.0,0.0,0.0 +147,0.0,0.0,0.0,1.0,1.0,0.0,0.0 +148,0.0,0.0,0.0,1.0,1.0,0.0,0.0 +149,0.0,0.0,0.0,1.0,0.0,1.0,1.0 +150,0.0,0.0,0.0,1.0,0.0,0.0,1.0 +151,0.0,0.0,0.0,1.0,0.0,0.0,1.0 +152,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +153,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +154,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +155,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +156,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +157,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +158,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +159,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +160,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +161,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +162,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +163,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +164,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +165,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +166,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +167,0.0,0.0,0.0,1.0,0.0,0.0,0.0 +168,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +169,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +170,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +171,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +172,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +173,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +174,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +175,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +176,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +177,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +178,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +179,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +180,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +181,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +182,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +183,0.0,0.0,0.0,0.0,1.0,1.0,1.0 +184,0.0,0.0,0.0,0.0,1.0,1.0,0.0 +185,0.0,0.0,0.0,0.0,1.0,1.0,0.0 +186,0.0,0.0,0.0,0.0,1.0,1.0,0.0 +187,0.0,0.0,0.0,0.0,1.0,1.0,0.0 +188,0.0,0.0,0.0,0.0,1.0,1.0,0.0 +189,0.0,0.0,0.0,0.0,1.0,1.0,0.0 +190,0.0,0.0,0.0,0.0,1.0,1.0,0.0 +191,0.0,0.0,0.0,0.0,1.0,1.0,0.0 +192,0.0,0.0,0.0,0.0,1.0,1.0,0.0 +193,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +194,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +195,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +196,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +197,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +198,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +199,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +200,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +201,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +202,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +203,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +204,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +205,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +206,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +207,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +208,0.0,0.0,0.0,0.0,1.0,0.0,0.0 +209,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +210,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +211,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +212,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +213,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +214,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +215,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +216,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +217,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +218,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +219,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +220,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +221,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +222,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +223,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +224,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +225,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +226,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +227,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +228,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +229,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +230,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +231,0.0,0.0,0.0,0.0,0.0,1.0,1.0 +232,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +233,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +234,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +235,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +236,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +237,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +238,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +239,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +240,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +241,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +242,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +243,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +244,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +245,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +246,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +247,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +248,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +249,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +250,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +251,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +252,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +253,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +254,0.0,0.0,0.0,0.0,0.0,1.0,0.0 +255,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +256,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +257,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +258,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +259,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +260,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +261,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +262,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +263,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +264,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +265,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +266,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +267,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +268,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +269,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +270,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +271,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +272,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +273,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +274,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +275,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +276,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +277,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +278,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +279,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +280,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +281,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +282,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +283,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +284,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +285,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +286,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +287,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +288,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +289,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +290,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +291,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +292,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +293,0.0,0.0,0.0,0.0,0.0,0.0,1.0 diff --git a/pyro/source/examples/capture_recapture/dipper_sex.csv b/pyro/source/examples/capture_recapture/dipper_sex.csv new file mode 100644 index 0000000000000000000000000000000000000000..3cf78b42fe5f41233af644757c8374ba3a7020c5 --- /dev/null +++ b/pyro/source/examples/capture_recapture/dipper_sex.csv @@ -0,0 +1,294 @@ +0,1.0 +1,0.0 +2,1.0 +3,0.0 +4,0.0 +5,1.0 +6,1.0 +7,1.0 +8,1.0 +9,0.0 +10,0.0 +11,1.0 +12,0.0 +13,1.0 +14,1.0 +15,1.0 +16,1.0 +17,1.0 +18,0.0 +19,0.0 +20,0.0 +21,0.0 +22,0.0 +23,0.0 +24,0.0 +25,1.0 +26,0.0 +27,0.0 +28,1.0 +29,0.0 +30,0.0 +31,1.0 +32,1.0 +33,1.0 +34,1.0 +35,1.0 +36,1.0 +37,1.0 +38,0.0 +39,0.0 +40,0.0 +41,0.0 +42,1.0 +43,1.0 +44,1.0 +45,1.0 +46,1.0 +47,1.0 +48,1.0 +49,1.0 +50,1.0 +51,1.0 +52,1.0 +53,0.0 +54,0.0 +55,0.0 +56,0.0 +57,0.0 +58,0.0 +59,0.0 +60,0.0 +61,0.0 +62,0.0 +63,0.0 +64,0.0 +65,0.0 +66,0.0 +67,0.0 +68,0.0 +69,0.0 +70,0.0 +71,0.0 +72,0.0 +73,1.0 +74,0.0 +75,1.0 +76,1.0 +77,1.0 +78,1.0 +79,0.0 +80,0.0 +81,1.0 +82,1.0 +83,1.0 +84,1.0 +85,1.0 +86,1.0 +87,1.0 +88,1.0 +89,0.0 +90,0.0 +91,0.0 +92,0.0 +93,1.0 +94,1.0 +95,1.0 +96,1.0 +97,1.0 +98,1.0 +99,1.0 +100,1.0 +101,1.0 +102,1.0 +103,1.0 +104,1.0 +105,0.0 +106,0.0 +107,0.0 +108,0.0 +109,0.0 +110,0.0 +111,0.0 +112,0.0 +113,0.0 +114,0.0 +115,0.0 +116,0.0 +117,0.0 +118,0.0 +119,0.0 +120,0.0 +121,0.0 +122,0.0 +123,1.0 +124,1.0 +125,1.0 +126,1.0 +127,1.0 +128,1.0 +129,0.0 +130,0.0 +131,1.0 +132,1.0 +133,1.0 +134,0.0 +135,0.0 +136,0.0 +137,0.0 +138,1.0 +139,1.0 +140,1.0 +141,1.0 +142,1.0 +143,1.0 +144,0.0 +145,0.0 +146,0.0 +147,0.0 +148,0.0 +149,0.0 +150,1.0 +151,0.0 +152,1.0 +153,1.0 +154,1.0 +155,1.0 +156,1.0 +157,1.0 +158,0.0 +159,0.0 +160,0.0 +161,0.0 +162,0.0 +163,0.0 +164,0.0 +165,0.0 +166,0.0 +167,0.0 +168,1.0 +169,1.0 +170,1.0 +171,1.0 +172,1.0 +173,1.0 +174,1.0 +175,1.0 +176,1.0 +177,1.0 +178,0.0 +179,0.0 +180,0.0 +181,0.0 +182,0.0 +183,0.0 +184,1.0 +185,1.0 +186,1.0 +187,0.0 +188,0.0 +189,0.0 +190,0.0 +191,0.0 +192,0.0 +193,1.0 +194,1.0 +195,1.0 +196,1.0 +197,1.0 +198,1.0 +199,1.0 +200,1.0 +201,1.0 +202,0.0 +203,0.0 +204,0.0 +205,0.0 +206,0.0 +207,0.0 +208,0.0 +209,1.0 +210,1.0 +211,1.0 +212,1.0 +213,1.0 +214,1.0 +215,1.0 +216,1.0 +217,1.0 +218,1.0 +219,1.0 +220,1.0 +221,0.0 +222,0.0 +223,0.0 +224,0.0 +225,0.0 +226,0.0 +227,0.0 +228,0.0 +229,0.0 +230,0.0 +231,0.0 +232,1.0 +233,1.0 +234,1.0 +235,1.0 +236,1.0 +237,1.0 +238,1.0 +239,1.0 +240,1.0 +241,1.0 +242,1.0 +243,0.0 +244,0.0 +245,0.0 +246,0.0 +247,0.0 +248,0.0 +249,0.0 +250,0.0 +251,0.0 +252,0.0 +253,0.0 +254,0.0 +255,1.0 +256,1.0 +257,1.0 +258,1.0 +259,1.0 +260,1.0 +261,1.0 +262,1.0 +263,1.0 +264,1.0 +265,1.0 +266,1.0 +267,1.0 +268,1.0 +269,1.0 +270,1.0 +271,1.0 +272,0.0 +273,0.0 +274,0.0 +275,0.0 +276,0.0 +277,0.0 +278,0.0 +279,0.0 +280,0.0 +281,0.0 +282,0.0 +283,0.0 +284,0.0 +285,0.0 +286,0.0 +287,0.0 +288,0.0 +289,0.0 +290,0.0 +291,0.0 +292,0.0 +293,0.0 diff --git a/pyro/source/examples/capture_recapture/meadow_voles_capture_history.csv b/pyro/source/examples/capture_recapture/meadow_voles_capture_history.csv new file mode 100644 index 0000000000000000000000000000000000000000..884c9d77876b6cfced59bdcf5d0e81e1051564ac --- /dev/null +++ b/pyro/source/examples/capture_recapture/meadow_voles_capture_history.csv @@ -0,0 +1,171 @@ +0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +2,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +3,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +4,1,1,1,1,1,0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +5,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1 +6,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +7,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +8,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +9,1,1,1,1,1,1,1,1,0,0,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +10,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +11,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +12,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +13,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +14,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +15,0,1,1,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +16,0,1,1,0,1,0,1,1,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1 +17,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +18,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1 +19,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +20,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +21,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +22,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +23,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +24,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +25,1,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +26,1,0,1,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +27,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +28,1,1,1,1,1,0,1,1,0,0,1,1,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0 +29,1,0,1,0,1,1,1,1,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0 +30,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +31,0,1,0,1,1,0,1,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 +32,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +33,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +34,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +35,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +36,0,1,1,0,0,1,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,0,1,0 +37,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +38,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +39,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +40,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +41,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,0 +42,0,0,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 +43,0,0,1,0,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +44,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +45,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0 +46,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +47,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +48,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +49,0,0,0,0,1,1,1,1,0,0,1,0,0,0,0,1,1,1,1,0,1,1,1,1,1,1,0,1,0,0 +50,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +51,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +52,0,0,0,0,0,1,1,1,0,1,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +53,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +54,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +55,0,0,0,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0 +56,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +57,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0 +58,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0 +59,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +60,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,0,0,0,0,1,1,1,1,0,0,1,1,0,1,1 +61,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +62,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +63,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +64,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +65,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0 +66,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +67,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +68,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +69,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0 +70,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,0,1,1,1,1 +71,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0 +72,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +73,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 +74,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 +75,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +76,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1 +77,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0 +79,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +80,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +81,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0 +82,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,1,1,1,1,1,0,1 +83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1 +84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 +85,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0 +86,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0 +87,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1 +88,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,1,0 +89,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +91,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +92,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +93,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1 +94,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,1,1,0,1,1 +95,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1 +96,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0 +97,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0 +98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 +99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 +100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 +101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0 +102,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1 +103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,0,0,0 +104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0 +105,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0 +106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 +107,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 +108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 +109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,0,0 +110,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1 +111,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1 +112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +113,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1 +114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,1,0 +115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0 +116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0 +117,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,0 +118,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1 +119,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1 +120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0 +121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0 +122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0 +123,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1 +124,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0 +125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1 +126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0 +127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0 +128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1 +129,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0 +130,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +131,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0 +132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 +133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0 +134,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0 +135,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +136,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0 +137,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0 +138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0 +139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0 +140,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0 +141,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1 +142,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1 +143,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +148,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +149,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0 +150,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +151,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1 +152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +153,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +154,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +155,0,0,0,0,0,1,1,0,0,0,1,0,0,1,1,0,0,1,0,1,0,1,0,0,1,1,1,1,1,1 +156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +157,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,0 +158,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +159,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,0 +160,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +161,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +162,1,1,1,1,0,1,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +163,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +164,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +165,1,1,1,1,0,1,1,1,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +166,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,0 +167,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1 +168,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +169,1,1,1,1,1,0,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +170,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 diff --git a/pyro/source/examples/contrib/__init__.py b/pyro/source/examples/contrib/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/examples/contrib/autoname/mixture.py b/pyro/source/examples/contrib/autoname/mixture.py new file mode 100644 index 0000000000000000000000000000000000000000..1af3b6ed0178c29791b78e86cbeeef069326fb2a --- /dev/null +++ b/pyro/source/examples/contrib/autoname/mixture.py @@ -0,0 +1,82 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import argparse + +import torch +from torch.distributions import constraints + +import pyro +import pyro.distributions as dist +from pyro.contrib.autoname import named +from pyro.infer import SVI, JitTrace_ELBO, Trace_ELBO +from pyro.optim import Adam + +# This is a simple gaussian mixture model. +# +# The example demonstrates how to pass named.Objects() from a global model to +# a local model implemented as a helper function. + + +def model(data, k): + latent = named.Object("latent") + + # Create parameters for a Gaussian mixture model. + latent.probs.param_(torch.ones(k) / k, constraint=constraints.simplex) + latent.locs.param_(torch.zeros(k)) + latent.scales.param_(torch.ones(k), constraint=constraints.positive) + + # Observe all the data. We pass a local latent in to the local_model. + latent.local = named.List() + for x in data: + local_model(latent.local.add(), latent.probs, latent.locs, latent.scales, obs=x) + + +def local_model(latent, ps, locs, scales, obs=None): + i = latent.id.sample_(dist.Categorical(ps)) + return latent.x.sample_(dist.Normal(locs[i], scales[i]), obs=obs) + + +def guide(data, k): + latent = named.Object("latent") + latent.local = named.List() + for x in data: + # We pass a local latent in to the local_guide. + local_guide(latent.local.add(), k) + + +def local_guide(latent, k): + # The local guide simply guesses category assignments. + latent.probs.param_(torch.ones(k) / k, constraint=constraints.positive) + latent.id.sample_(dist.Categorical(latent.probs)) + + +def main(args): + pyro.set_rng_seed(0) + + optim = Adam({"lr": 0.1}) + elbo = JitTrace_ELBO() if args.jit else Trace_ELBO() + inference = SVI(model, guide, optim, loss=elbo) + data = torch.tensor([0.0, 1.0, 2.0, 20.0, 30.0, 40.0]) + k = 2 + + print("Step\tLoss") + loss = 0.0 + for step in range(args.num_epochs): + if step and step % 10 == 0: + print("{}\t{:0.5g}".format(step, loss)) + loss = 0.0 + loss += inference.step(data, k=k) + + print("Parameters:") + for name, value in sorted(pyro.get_param_store().items()): + print("{} = {}".format(name, value.detach().cpu().numpy())) + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser(description="parse args") + parser.add_argument("-n", "--num-epochs", default=200, type=int) + parser.add_argument("--jit", action="store_true") + args = parser.parse_args() + main(args) diff --git a/pyro/source/examples/contrib/autoname/scoping_mixture.py b/pyro/source/examples/contrib/autoname/scoping_mixture.py new file mode 100644 index 0000000000000000000000000000000000000000..a872d7b3f911e12ef570ea1c1b05d7dfe1b878b2 --- /dev/null +++ b/pyro/source/examples/contrib/autoname/scoping_mixture.py @@ -0,0 +1,78 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import argparse + +import torch +from torch.distributions import constraints + +import pyro +import pyro.distributions as dist +import pyro.optim +from pyro.contrib.autoname import scope +from pyro.infer import SVI, TraceEnum_ELBO, config_enumerate + + +def model(K, data): + # Global parameters. + weights = pyro.param("weights", torch.ones(K) / K, constraint=constraints.simplex) + locs = pyro.param("locs", 10 * torch.randn(K)) + scale = pyro.param("scale", torch.tensor(0.5), constraint=constraints.positive) + + with pyro.plate("data"): + return local_model(weights, locs, scale, data) + + +@scope(prefix="local") +def local_model(weights, locs, scale, data): + assignment = pyro.sample( + "assignment", dist.Categorical(weights).expand_by([len(data)]) + ) + return pyro.sample("obs", dist.Normal(locs[assignment], scale), obs=data) + + +def guide(K, data): + assignment_probs = pyro.param( + "assignment_probs", + torch.ones(len(data), K) / K, + constraint=constraints.unit_interval, + ) + with pyro.plate("data"): + return local_guide(assignment_probs) + + +@scope(prefix="local") +def local_guide(probs): + return pyro.sample("assignment", dist.Categorical(probs)) + + +def main(args): + pyro.set_rng_seed(0) + pyro.clear_param_store() + K = 2 + + data = torch.tensor([0.0, 1.0, 2.0, 20.0, 30.0, 40.0]) + optim = pyro.optim.Adam({"lr": 0.1}) + inference = SVI( + model, config_enumerate(guide), optim, loss=TraceEnum_ELBO(max_plate_nesting=1) + ) + + print("Step\tLoss") + loss = 0.0 + for step in range(args.num_epochs): + if step and step % 10 == 0: + print("{}\t{:0.5g}".format(step, loss)) + loss = 0.0 + loss += inference.step(K, data) + + print("Parameters:") + for name, value in sorted(pyro.get_param_store().items()): + print("{} = {}".format(name, value.detach().cpu().numpy())) + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser(description="parse args") + parser.add_argument("-n", "--num-epochs", default=200, type=int) + args = parser.parse_args() + main(args) diff --git a/pyro/source/examples/contrib/autoname/tree_data.py b/pyro/source/examples/contrib/autoname/tree_data.py new file mode 100644 index 0000000000000000000000000000000000000000..e9a6f48b4a6c287fe800225d3877bdcbbcbd4489 --- /dev/null +++ b/pyro/source/examples/contrib/autoname/tree_data.py @@ -0,0 +1,111 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import argparse + +import torch +from torch.distributions import constraints + +import pyro +import pyro.distributions as dist +from pyro.contrib.autoname import named +from pyro.infer import SVI, Trace_ELBO +from pyro.optim import Adam + +# This is a linear mixed-effects model over arbitrary json-like data. +# Data can be a number, a list of data, or a dict with data values. +# +# The goal is to learn a mean field approximation to the posterior +# values z, parameterized by parameters post_loc and post_scale. +# +# Notice that the named.Objects allow for modularity that fits well +# with the recursive model and guide functions. + + +def model(data): + latent = named.Object("latent") + latent.z.sample_(dist.Normal(0.0, 1.0)) + model_recurse(data, latent) + + +def model_recurse(data, latent): + if torch.is_tensor(data): + latent.x.sample_(dist.Normal(latent.z, 1.0), obs=data) + elif isinstance(data, list): + latent.prior_scale.param_(torch.tensor(1.0), constraint=constraints.positive) + latent.list = named.List() + for data_i in data: + latent_i = latent.list.add() + latent_i.z.sample_(dist.Normal(latent.z, latent.prior_scale)) + model_recurse(data_i, latent_i) + elif isinstance(data, dict): + latent.prior_scale.param_(torch.tensor(1.0), constraint=constraints.positive) + latent.dict = named.Dict() + for key, value in data.items(): + latent.dict[key].z.sample_(dist.Normal(latent.z, latent.prior_scale)) + model_recurse(value, latent.dict[key]) + else: + raise TypeError("Unsupported type {}".format(type(data))) + + +def guide(data): + guide_recurse(data, named.Object("latent")) + + +def guide_recurse(data, latent): + latent.post_loc.param_(torch.tensor(0.0)) + latent.post_scale.param_(torch.tensor(1.0), constraint=constraints.positive) + latent.z.sample_(dist.Normal(latent.post_loc, latent.post_scale)) + if torch.is_tensor(data): + pass + elif isinstance(data, list): + latent.list = named.List() + for datum in data: + guide_recurse(datum, latent.list.add()) + elif isinstance(data, dict): + latent.dict = named.Dict() + for key, value in data.items(): + guide_recurse(value, latent.dict[key]) + else: + raise TypeError("Unsupported type {}".format(type(data))) + + +def main(args): + pyro.set_rng_seed(0) + + optim = Adam({"lr": 0.1}) + inference = SVI(model, guide, optim, loss=Trace_ELBO()) + + # Data is an arbitrary json-like structure with tensors at leaves. + one = torch.tensor(1.0) + data = { + "foo": one, + "bar": [0 * one, 1 * one, 2 * one], + "baz": { + "noun": { + "concrete": 4 * one, + "abstract": 6 * one, + }, + "verb": 2 * one, + }, + } + + print("Step\tLoss") + loss = 0.0 + for step in range(args.num_epochs): + loss += inference.step(data) + if step and step % 10 == 0: + print("{}\t{:0.5g}".format(step, loss)) + loss = 0.0 + + print("Parameters:") + for name, value in sorted(pyro.get_param_store().items()): + print("{} = {}".format(name, value.detach().cpu().numpy())) + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser(description="parse args") + parser.add_argument("-n", "--num-epochs", default=100, type=int) + args = parser.parse_args() + main(args) diff --git a/pyro/source/examples/contrib/cevae/synthetic.py b/pyro/source/examples/contrib/cevae/synthetic.py new file mode 100644 index 0000000000000000000000000000000000000000..c10c5f77a55c287997c9918aea3a32437c188c05 --- /dev/null +++ b/pyro/source/examples/contrib/cevae/synthetic.py @@ -0,0 +1,107 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +This example demonstrates how to use the Causal Effect Variational Autoencoder +[1] implemented in pyro.contrib.cevae.CEVAE, documented at +http://docs.pyro.ai/en/latest/contrib.cevae.html + +**References** + +[1] C. Louizos, U. Shalit, J. Mooij, D. Sontag, R. Zemel, M. Welling (2017). + Causal Effect Inference with Deep Latent-Variable Models. + http://papers.nips.cc/paper/7223-causal-effect-inference-with-deep-latent-variable-models.pdf + https://github.com/AMLab-Amsterdam/CEVAE +""" +import argparse +import logging + +import torch + +import pyro +import pyro.distributions as dist +from pyro.contrib.cevae import CEVAE + +logging.getLogger("pyro").setLevel(logging.DEBUG) +logging.getLogger("pyro").handlers[0].setLevel(logging.DEBUG) + + +def generate_data(args): + """ + This implements the generative process of [1], but using larger feature and + latent spaces ([1] assumes ``feature_dim=1`` and ``latent_dim=5``). + """ + z = dist.Bernoulli(0.5).sample([args.num_data]) + x = dist.Normal(z, 5 * z + 3 * (1 - z)).sample([args.feature_dim]).t() + t = dist.Bernoulli(0.75 * z + 0.25 * (1 - z)).sample() + y = dist.Bernoulli(logits=3 * (z + 2 * (2 * t - 2))).sample() + + # Compute true ite for evaluation (via Monte Carlo approximation). + t0_t1 = torch.tensor([[0.0], [1.0]]) + y_t0, y_t1 = dist.Bernoulli(logits=3 * (z + 2 * (2 * t0_t1 - 2))).mean + true_ite = y_t1 - y_t0 + return x, t, y, true_ite + + +def main(args): + if args.cuda: + torch.set_default_device("cuda") + + # Generate synthetic data. + pyro.set_rng_seed(args.seed) + x_train, t_train, y_train, _ = generate_data(args) + + # Train. + pyro.set_rng_seed(args.seed) + pyro.clear_param_store() + cevae = CEVAE( + feature_dim=args.feature_dim, + latent_dim=args.latent_dim, + hidden_dim=args.hidden_dim, + num_layers=args.num_layers, + num_samples=10, + ) + cevae.fit( + x_train, + t_train, + y_train, + num_epochs=args.num_epochs, + batch_size=args.batch_size, + learning_rate=args.learning_rate, + learning_rate_decay=args.learning_rate_decay, + weight_decay=args.weight_decay, + ) + + # Evaluate. + x_test, t_test, y_test, true_ite = generate_data(args) + true_ate = true_ite.mean() + print("true ATE = {:0.3g}".format(true_ate.item())) + naive_ate = y_test[t_test == 1].mean() - y_test[t_test == 0].mean() + print("naive ATE = {:0.3g}".format(naive_ate)) + if args.jit: + cevae = cevae.to_script_module() + est_ite = cevae.ite(x_test) + est_ate = est_ite.mean() + print("estimated ATE = {:0.3g}".format(est_ate.item())) + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser( + description="Causal Effect Variational Autoencoder" + ) + parser.add_argument("--num-data", default=1000, type=int) + parser.add_argument("--feature-dim", default=5, type=int) + parser.add_argument("--latent-dim", default=20, type=int) + parser.add_argument("--hidden-dim", default=200, type=int) + parser.add_argument("--num-layers", default=3, type=int) + parser.add_argument("-n", "--num-epochs", default=50, type=int) + parser.add_argument("-b", "--batch-size", default=100, type=int) + parser.add_argument("-lr", "--learning-rate", default=1e-3, type=float) + parser.add_argument("-lrd", "--learning-rate-decay", default=0.1, type=float) + parser.add_argument("--weight-decay", default=1e-4, type=float) + parser.add_argument("--seed", default=1234567890, type=int) + parser.add_argument("--jit", action="store_true") + parser.add_argument("--cuda", action="store_true") + args = parser.parse_args() + main(args) diff --git a/pyro/source/examples/contrib/epidemiology/regional.py b/pyro/source/examples/contrib/epidemiology/regional.py new file mode 100644 index 0000000000000000000000000000000000000000..a4a09d6b800805ba786744e18e60e375bdf6336f --- /dev/null +++ b/pyro/source/examples/contrib/epidemiology/regional.py @@ -0,0 +1,217 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import argparse +import logging + +import torch + +import pyro +from pyro.contrib.epidemiology.models import RegionalSIRModel + +logging.basicConfig(format="%(message)s", level=logging.INFO) + + +def Model(args, data): + assert 0 <= args.coupling <= 1, args.coupling + population = torch.full((args.num_regions,), float(args.population)) + coupling = torch.eye(args.num_regions).clamp(min=args.coupling) + return RegionalSIRModel(population, coupling, args.recovery_time, data) + + +def generate_data(args): + extended_data = [None] * (args.duration + args.forecast) + model = Model(args, extended_data) + logging.info("Simulating from a {}".format(type(model).__name__)) + for attempt in range(100): + samples = model.generate( + { + "R0": args.basic_reproduction_number, + "rho_c1": 10 * args.response_rate, + "rho_c0": 10 * (1 - args.response_rate), + } + ) + obs = samples["obs"][: args.duration] + S2I = samples["S2I"] + + obs_sum = int(obs.sum()) + S2I_sum = int(S2I[: args.duration].sum()) + if obs_sum >= args.min_observations: + logging.info( + "Observed {:d}/{:d} infections:\n{}".format( + obs_sum, S2I_sum, " ".join(str(int(x)) for x in obs[:, 0]) + ) + ) + return {"S2I": S2I, "obs": obs} + + raise ValueError( + "Failed to generate {} observations. Try increasing " + "--population or decreasing --min-observations".format(args.min_observations) + ) + + +def infer_mcmc(args, model): + energies = [] + + def hook_fn(kernel, *unused): + e = float(kernel._potential_energy_last) + energies.append(e) + if args.verbose: + logging.info("potential = {:0.6g}".format(e)) + + mcmc = model.fit_mcmc( + heuristic_num_particles=args.smc_particles, + heuristic_ess_threshold=args.ess_threshold, + warmup_steps=args.warmup_steps, + num_samples=args.num_samples, + max_tree_depth=args.max_tree_depth, + num_quant_bins=args.num_bins, + haar=args.haar, + haar_full_mass=args.haar_full_mass, + jit_compile=args.jit, + hook_fn=hook_fn, + ) + + mcmc.summary() + if args.plot: + import matplotlib.pyplot as plt + + plt.figure(figsize=(6, 3)) + plt.plot(energies) + plt.xlabel("MCMC step") + plt.ylabel("potential energy") + plt.title("MCMC energy trace") + plt.tight_layout() + + +def infer_svi(args, model): + losses = model.fit_svi( + heuristic_num_particles=args.smc_particles, + heuristic_ess_threshold=args.ess_threshold, + num_samples=args.num_samples, + num_steps=args.svi_steps, + num_particles=args.svi_particles, + haar=args.haar, + jit=args.jit, + ) + + if args.plot: + import matplotlib.pyplot as plt + + plt.figure(figsize=(6, 3)) + plt.plot(losses) + plt.xlabel("SVI step") + plt.ylabel("loss") + plt.title("SVI Convergence") + plt.tight_layout() + + +def predict(args, model, truth): + samples = model.predict(forecast=args.forecast) + S2I = samples["S2I"] + median = S2I.median(dim=0).values + lines = ["Median prediction of new infections (starting on day 0):"] + for r in range(args.num_regions): + lines.append( + "Region {}: {}".format(r, " ".join(map(str, map(int, median[:, r])))) + ) + logging.info("\n".join(lines)) + + # Optionally plot the latent and forecasted series of new infections. + if args.plot: + import matplotlib.pyplot as plt + + fig, axes = plt.subplots( + args.num_regions, sharex=True, figsize=(6, 1 + args.num_regions) + ) + time = torch.arange(args.duration + args.forecast) + p05 = S2I.kthvalue(int(round(0.5 + 0.05 * args.num_samples)), dim=0).values + p95 = S2I.kthvalue(int(round(0.5 + 0.95 * args.num_samples)), dim=0).values + for r, ax in enumerate(axes): + ax.fill_between( + time, p05[:, r], p95[:, r], color="red", alpha=0.3, label="90% CI" + ) + ax.plot(time, median[:, r], "r-", label="median") + ax.plot(time[: args.duration], model.data[:, r], "k.", label="observed") + ax.plot(time, truth[:, r], "k--", label="truth") + ax.axvline(args.duration - 0.5, color="gray", lw=1) + ax.set_xlim(0, len(time) - 1) + ax.set_ylim(0, None) + axes[0].set_title( + "New infections among {} regions each of size {}".format( + args.num_regions, args.population + ) + ) + axes[args.num_regions // 2].set_ylabel("inf./day") + axes[-1].set_xlabel("day after first infection") + axes[-1].legend(loc="upper left") + plt.tight_layout() + plt.subplots_adjust(hspace=0) + + +def main(args): + pyro.set_rng_seed(args.rng_seed) + + # Generate data. + dataset = generate_data(args) + obs = dataset["obs"] + + # Run inference. + model = Model(args, obs) + infer = {"mcmc": infer_mcmc, "svi": infer_svi}[args.infer] + infer(args, model) + + # Predict latent time series. + predict(args, model, truth=dataset["S2I"]) + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser( + description="Regional compartmental epidemiology modeling using HMC" + ) + parser.add_argument("-p", "--population", default=1000, type=int) + parser.add_argument("-r", "--num-regions", default=2, type=int) + parser.add_argument("-c", "--coupling", default=0.1, type=float) + parser.add_argument("-m", "--min-observations", default=3, type=int) + parser.add_argument("-d", "--duration", default=20, type=int) + parser.add_argument("-f", "--forecast", default=10, type=int) + parser.add_argument("-R0", "--basic-reproduction-number", default=1.5, type=float) + parser.add_argument("-tau", "--recovery-time", default=7.0, type=float) + parser.add_argument("-rho", "--response-rate", default=0.5, type=float) + parser.add_argument("--infer", default="mcmc") + parser.add_argument("--mcmc", action="store_const", const="mcmc", dest="infer") + parser.add_argument("--svi", action="store_const", const="svi", dest="infer") + parser.add_argument("--haar", action="store_true") + parser.add_argument("-hfm", "--haar-full-mass", default=0, type=int) + parser.add_argument("-n", "--num-samples", default=200, type=int) + parser.add_argument("-np", "--smc-particles", default=1024, type=int) + parser.add_argument("-ss", "--svi-steps", default=5000, type=int) + parser.add_argument("-sp", "--svi-particles", default=32, type=int) + parser.add_argument("-ess", "--ess-threshold", default=0.5, type=float) + parser.add_argument("-w", "--warmup-steps", type=int) + parser.add_argument("-t", "--max-tree-depth", default=5, type=int) + parser.add_argument("-nb", "--num-bins", default=1, type=int) + parser.add_argument("--double", action="store_true", default=True) + parser.add_argument("--single", action="store_false", dest="double") + parser.add_argument("--rng-seed", default=0, type=int) + parser.add_argument("--cuda", action="store_true") + parser.add_argument("--jit", action="store_true", default=True) + parser.add_argument("--nojit", action="store_false", dest="jit") + parser.add_argument("--verbose", action="store_true") + parser.add_argument("--plot", action="store_true") + args = parser.parse_args() + + if args.warmup_steps is None: + args.warmup_steps = args.num_samples + if args.double: + torch.set_default_dtype(torch.float64) + if args.cuda: + torch.set_default_device("cuda") + + main(args) + + if args.plot: + import matplotlib.pyplot as plt + + plt.show() diff --git a/pyro/source/examples/contrib/epidemiology/sir.py b/pyro/source/examples/contrib/epidemiology/sir.py new file mode 100644 index 0000000000000000000000000000000000000000..39fa8ee85824135d84489d20700d31ec709ac20d --- /dev/null +++ b/pyro/source/examples/contrib/epidemiology/sir.py @@ -0,0 +1,403 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +# This script aims to replicate the behavior of examples/sir_hmc.py but using +# the high-level components of pyro.contrib.epidemiology. Command line +# arguments and results should be similar. + +import argparse +import logging +import math + +import torch +from torch.distributions import biject_to, constraints + +import pyro +from pyro.contrib.epidemiology.models import ( + HeterogeneousSIRModel, + OverdispersedSEIRModel, + OverdispersedSIRModel, + SimpleSEIRModel, + SimpleSIRModel, + SuperspreadingSEIRModel, + SuperspreadingSIRModel, +) + +logging.basicConfig(format="%(message)s", level=logging.INFO) + + +def Model(args, data): + """Dispatch between different model classes.""" + if args.heterogeneous: + assert args.incubation_time == 0 + assert args.overdispersion == 0 + return HeterogeneousSIRModel(args.population, args.recovery_time, data) + elif args.incubation_time > 0: + assert args.incubation_time > 1 + if args.concentration < math.inf: + return SuperspreadingSEIRModel( + args.population, args.incubation_time, args.recovery_time, data + ) + elif args.overdispersion > 0: + return OverdispersedSEIRModel( + args.population, args.incubation_time, args.recovery_time, data + ) + else: + return SimpleSEIRModel( + args.population, args.incubation_time, args.recovery_time, data + ) + else: + if args.concentration < math.inf: + return SuperspreadingSIRModel(args.population, args.recovery_time, data) + elif args.overdispersion > 0: + return OverdispersedSIRModel(args.population, args.recovery_time, data) + else: + return SimpleSIRModel(args.population, args.recovery_time, data) + + +def generate_data(args): + extended_data = [None] * (args.duration + args.forecast) + model = Model(args, extended_data) + logging.info("Simulating from a {}".format(type(model).__name__)) + for attempt in range(100): + samples = model.generate( + { + "R0": args.basic_reproduction_number, + "rho": args.response_rate, + "k": args.concentration, + "od": args.overdispersion, + } + ) + obs = samples["obs"][: args.duration] + new_I = samples.get("S2I", samples.get("E2I")) + + obs_sum = int(obs.sum()) + new_I_sum = int(new_I[: args.duration].sum()) + assert 0 <= args.min_obs_portion < args.max_obs_portion <= 1 + min_obs = int(math.ceil(args.min_obs_portion * args.population)) + max_obs = int(math.floor(args.max_obs_portion * args.population)) + if min_obs <= obs_sum <= max_obs: + logging.info( + "Observed {:d}/{:d} infections:\n{}".format( + obs_sum, new_I_sum, " ".join(str(int(x)) for x in obs) + ) + ) + return {"new_I": new_I, "obs": obs} + + if obs_sum < min_obs: + raise ValueError( + "Failed to generate >={} observations. " + "Try decreasing --min-obs-portion (currently {}).".format( + min_obs, args.min_obs_portion + ) + ) + else: + raise ValueError( + "Failed to generate <={} observations. " + "Try increasing --max-obs-portion (currently {}).".format( + max_obs, args.max_obs_portion + ) + ) + + +def infer_mcmc(args, model): + parallel = args.num_chains > 1 + energies = [] + + def hook_fn(kernel, *unused): + e = float(kernel._potential_energy_last) + energies.append(e) + if args.verbose: + logging.info("potential = {:0.6g}".format(e)) + + mcmc = model.fit_mcmc( + heuristic_num_particles=args.smc_particles, + heuristic_ess_threshold=args.ess_threshold, + warmup_steps=args.warmup_steps, + num_samples=args.num_samples, + num_chains=args.num_chains, + mp_context="spawn" if parallel else None, + max_tree_depth=args.max_tree_depth, + arrowhead_mass=args.arrowhead_mass, + num_quant_bins=args.num_bins, + haar=args.haar, + haar_full_mass=args.haar_full_mass, + jit_compile=args.jit, + hook_fn=None if parallel else hook_fn, + ) + + mcmc.summary() + if args.plot and energies: + import matplotlib.pyplot as plt + + plt.figure(figsize=(6, 3)) + plt.plot(energies) + plt.xlabel("MCMC step") + plt.ylabel("potential energy") + plt.title("MCMC energy trace") + plt.tight_layout() + + return model.samples + + +def infer_svi(args, model): + losses = model.fit_svi( + heuristic_num_particles=args.smc_particles, + heuristic_ess_threshold=args.ess_threshold, + num_samples=args.num_samples, + num_steps=args.svi_steps, + num_particles=args.svi_particles, + haar=args.haar, + jit=args.jit, + ) + + if args.plot: + import matplotlib.pyplot as plt + + plt.figure(figsize=(6, 3)) + plt.plot(losses) + plt.xlabel("SVI step") + plt.ylabel("loss") + plt.title("SVI Convergence") + plt.tight_layout() + + return model.samples + + +def evaluate(args, model, samples): + # Print estimated values. + names = {"basic_reproduction_number": "R0"} + if not args.heterogeneous: + names["response_rate"] = "rho" + if args.concentration < math.inf: + names["concentration"] = "k" + if "od" in samples: + names["overdispersion"] = "od" + for name, key in names.items(): + mean = samples[key].mean().item() + std = samples[key].std().item() + logging.info( + "{}: truth = {:0.3g}, estimate = {:0.3g} \u00b1 {:0.3g}".format( + key, getattr(args, name), mean, std + ) + ) + + # Optionally plot histograms and pairwise correlations. + if args.plot: + import matplotlib.pyplot as plt + import seaborn as sns + + # Plot individual histograms. + fig, axes = plt.subplots(len(names), 1, figsize=(5, 2.5 * len(names))) + if len(names) == 1: + axes = [axes] + axes[0].set_title("Posterior parameter estimates") + for ax, (name, key) in zip(axes, names.items()): + truth = getattr(args, name) + sns.distplot(samples[key], ax=ax, label="posterior") + ax.axvline(truth, color="k", label="truth") + ax.set_xlabel(key + " = " + name.replace("_", " ")) + ax.set_yticks(()) + ax.legend(loc="best") + plt.tight_layout() + + # Plot pairwise joint distributions for selected variables. + covariates = [(name, samples[name]) for name in names.values()] + for i, aux in enumerate(samples["auxiliary"].squeeze(1).unbind(-2)): + covariates.append(("aux[{},0]".format(i), aux[:, 0])) + covariates.append(("aux[{},-1]".format(i), aux[:, -1])) + N = len(covariates) + fig, axes = plt.subplots(N, N, figsize=(8, 8), sharex="col", sharey="row") + for i in range(N): + axes[i][0].set_ylabel(covariates[i][0]) + axes[0][i].set_xlabel(covariates[i][0]) + axes[0][i].xaxis.set_label_position("top") + for j in range(N): + ax = axes[i][j] + ax.set_xticks(()) + ax.set_yticks(()) + ax.scatter( + covariates[j][1], + -covariates[i][1], + lw=0, + color="darkblue", + alpha=0.3, + ) + plt.tight_layout() + plt.subplots_adjust(wspace=0, hspace=0) + + # Plot Pearson correlation for every pair of unconstrained variables. + def unconstrain(constraint, value): + value = biject_to(constraint).inv(value) + return value.reshape(args.num_samples, -1) + + covariates = [("R1", unconstrain(constraints.positive, samples["R0"]))] + if not args.heterogeneous: + covariates.append( + ("rho", unconstrain(constraints.unit_interval, samples["rho"])) + ) + if "k" in samples: + covariates.append(("k", unconstrain(constraints.positive, samples["k"]))) + constraint = constraints.interval(-0.5, model.population + 0.5) + for name, aux in zip(model.compartments, samples["auxiliary"].unbind(-2)): + covariates.append((name, unconstrain(constraint, aux))) + x = torch.cat([v for _, v in covariates], dim=-1) + x -= x.mean(0) + x /= x.std(0) + x = x.t().matmul(x) + x /= args.num_samples + x.clamp_(min=-1, max=1) + plt.figure(figsize=(8, 8)) + plt.imshow(x, cmap="bwr") + ticks = torch.tensor([0] + [v.size(-1) for _, v in covariates]).cumsum(0) + ticks = (ticks[1:] + ticks[:-1]) / 2 + plt.yticks(ticks, [name for name, _ in covariates]) + plt.xticks(()) + plt.tick_params(length=0) + plt.title("Pearson correlation (unconstrained coordinates)") + plt.tight_layout() + + +def predict(args, model, truth): + samples = model.predict(forecast=args.forecast) + + obs = model.data + + new_I = samples.get("S2I", samples.get("E2I")) + median = new_I.median(dim=0).values + logging.info( + "Median prediction of new infections (starting on day 0):\n{}".format( + " ".join(map(str, map(int, median))) + ) + ) + + # Optionally plot the latent and forecasted series of new infections. + if args.plot: + import matplotlib.pyplot as plt + + plt.figure() + time = torch.arange(args.duration + args.forecast) + p05 = new_I.kthvalue(int(round(0.5 + 0.05 * args.num_samples)), dim=0).values + p95 = new_I.kthvalue(int(round(0.5 + 0.95 * args.num_samples)), dim=0).values + plt.fill_between(time, p05, p95, color="red", alpha=0.3, label="90% CI") + plt.plot(time, median, "r-", label="median") + plt.plot(time[: args.duration], obs, "k.", label="observed") + if truth is not None: + plt.plot(time, truth, "k--", label="truth") + plt.axvline(args.duration - 0.5, color="gray", lw=1) + plt.xlim(0, len(time) - 1) + plt.ylim(0, None) + plt.xlabel("day after first infection") + plt.ylabel("new infections per day") + plt.title("New infections in population of {}".format(args.population)) + plt.legend(loc="upper left") + plt.tight_layout() + + # Plot Re time series. + if args.heterogeneous: + plt.figure() + Re = samples["Re"] + median = Re.median(dim=0).values + p05 = Re.kthvalue(int(round(0.5 + 0.05 * args.num_samples)), dim=0).values + p95 = Re.kthvalue(int(round(0.5 + 0.95 * args.num_samples)), dim=0).values + plt.fill_between(time, p05, p95, color="red", alpha=0.3, label="90% CI") + plt.plot(time, median, "r-", label="median") + plt.plot(time[: args.duration], obs, "k.", label="observed") + plt.axvline(args.duration - 0.5, color="gray", lw=1) + plt.xlim(0, len(time) - 1) + plt.ylim(0, None) + plt.xlabel("day after first infection") + plt.ylabel("Re") + plt.title("Effective reproductive number over time") + plt.legend(loc="upper left") + plt.tight_layout() + + +def main(args): + pyro.set_rng_seed(args.rng_seed) + + # Generate data. + dataset = generate_data(args) + obs = dataset["obs"] + + # Run inference. + model = Model(args, obs) + infer = {"mcmc": infer_mcmc, "svi": infer_svi}[args.infer] + samples = infer(args, model) + + # Evaluate fit. + evaluate(args, model, samples) + + # Predict latent time series. + if args.forecast: + predict(args, model, truth=dataset["new_I"]) + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser( + description="Compartmental epidemiology modeling using HMC" + ) + parser.add_argument("-p", "--population", default=1000, type=float) + parser.add_argument("-m", "--min-obs-portion", default=0.01, type=float) + parser.add_argument("-M", "--max-obs-portion", default=0.99, type=float) + parser.add_argument("-d", "--duration", default=20, type=int) + parser.add_argument("-f", "--forecast", default=10, type=int) + parser.add_argument("-R0", "--basic-reproduction-number", default=1.5, type=float) + parser.add_argument("-tau", "--recovery-time", default=7.0, type=float) + parser.add_argument( + "-e", + "--incubation-time", + default=0.0, + type=float, + help="If zero, use SIR model; if > 1 use SEIR model.", + ) + parser.add_argument( + "-k", + "--concentration", + default=math.inf, + type=float, + help="If finite, use a superspreader model.", + ) + parser.add_argument("-rho", "--response-rate", default=0.5, type=float) + parser.add_argument("-o", "--overdispersion", default=0.0, type=float) + parser.add_argument("-hg", "--heterogeneous", action="store_true") + parser.add_argument("--infer", default="mcmc") + parser.add_argument("--mcmc", action="store_const", const="mcmc", dest="infer") + parser.add_argument("--svi", action="store_const", const="svi", dest="infer") + parser.add_argument("--haar", action="store_true") + parser.add_argument("-hfm", "--haar-full-mass", default=0, type=int) + parser.add_argument("-n", "--num-samples", default=200, type=int) + parser.add_argument("-np", "--smc-particles", default=1024, type=int) + parser.add_argument("-ss", "--svi-steps", default=5000, type=int) + parser.add_argument("-sp", "--svi-particles", default=32, type=int) + parser.add_argument("-ess", "--ess-threshold", default=0.5, type=float) + parser.add_argument("-w", "--warmup-steps", type=int) + parser.add_argument("-c", "--num-chains", default=1, type=int) + parser.add_argument("-t", "--max-tree-depth", default=5, type=int) + parser.add_argument("-a", "--arrowhead-mass", action="store_true") + parser.add_argument("-r", "--rng-seed", default=0, type=int) + parser.add_argument("-nb", "--num-bins", default=1, type=int) + parser.add_argument("--double", action="store_true", default=True) + parser.add_argument("--single", action="store_false", dest="double") + parser.add_argument("--cuda", action="store_true") + parser.add_argument("--jit", action="store_true", default=True) + parser.add_argument("--nojit", action="store_false", dest="jit") + parser.add_argument("--verbose", action="store_true") + parser.add_argument("--plot", action="store_true") + args = parser.parse_args() + args.population = int(args.population) # to allow e.g. --population=1e6 + + if args.warmup_steps is None: + args.warmup_steps = args.num_samples + if args.double: + torch.set_default_dtype(torch.float64) + if args.cuda: + torch.set_default_device("cuda") + + main(args) + + if args.plot: + import matplotlib.pyplot as plt + + plt.show() diff --git a/pyro/source/examples/contrib/forecast/bart.py b/pyro/source/examples/contrib/forecast/bart.py new file mode 100644 index 0000000000000000000000000000000000000000..96eece166b7368cdcad2616cc1ecc9cb945c7d6a --- /dev/null +++ b/pyro/source/examples/contrib/forecast/bart.py @@ -0,0 +1,181 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import argparse +import logging + +import numpy as np +import torch + +import pyro +import pyro.distributions as dist +from pyro.contrib.examples.bart import load_bart_od +from pyro.contrib.forecast import ForecastingModel, backtest +from pyro.ops.tensor_utils import periodic_cumsum, periodic_repeat + +logging.getLogger("pyro").setLevel(logging.DEBUG) +logging.getLogger("pyro").handlers[0].setLevel(logging.DEBUG) + + +def preprocess(args): + """ + Extract a tensor of (arrivals,departures) to Embarcadero station. + """ + print("Loading data") + dataset = load_bart_od() + + # The full dataset has all station->station ridership counts for all of 50 + # train stations. In this simple example we will model only the aggretate + # counts to and from a single station, Embarcadero. + i = dataset["stations"].index("EMBR") + arrivals = dataset["counts"][:, :, i].sum(-1) + departures = dataset["counts"][:, i, :].sum(-1) + data = torch.stack([arrivals, departures], dim=-1) + print(f"Loaded data of shape {tuple(data.shape)}") + + # This simple example uses no covariates, so we will construct a + # zero-element tensor of the correct length as empty covariates. + covariates = torch.zeros(len(data), 0) + + return data, covariates + + +# We define a model by subclassing the ForecastingModel class and implementing +# a single .model() method. +class Model(ForecastingModel): + # The .model() method inputs two tensors: a fake tensor zero_data that is + # the same size and dtype as the real data (but of course the generative + # model shouldn't depend on the value of the data it generates!), and a + # tensor of covariates. Our simple model depends on no covariates, so we + # simply pass in an empty tensor (see the preprocess() function above). + def model(self, zero_data, covariates): + period = 24 * 7 + duration, dim = zero_data.shape[-2:] + assert dim == 2 # Data is bivariate: (arrivals, departures). + + # Sample global parameters. + noise_scale = pyro.sample( + "noise_scale", dist.LogNormal(torch.full((dim,), -3.0), 1.0).to_event(1) + ) + assert noise_scale.shape[-1:] == (dim,) + trans_timescale = pyro.sample( + "trans_timescale", dist.LogNormal(torch.zeros(dim), 1).to_event(1) + ) + assert trans_timescale.shape[-1:] == (dim,) + + trans_loc = pyro.sample("trans_loc", dist.Cauchy(0, 1 / period)) + trans_loc = trans_loc.unsqueeze(-1).expand(trans_loc.shape + (dim,)) + assert trans_loc.shape[-1:] == (dim,) + trans_scale = pyro.sample( + "trans_scale", dist.LogNormal(torch.zeros(dim), 0.1).to_event(1) + ) + trans_corr = pyro.sample("trans_corr", dist.LKJCholesky(dim, torch.ones(()))) + trans_scale_tril = trans_scale.unsqueeze(-1) * trans_corr + assert trans_scale_tril.shape[-2:] == (dim, dim) + + obs_scale = pyro.sample( + "obs_scale", dist.LogNormal(torch.zeros(dim), 0.1).to_event(1) + ) + obs_corr = pyro.sample("obs_corr", dist.LKJCholesky(dim, torch.ones(()))) + obs_scale_tril = obs_scale.unsqueeze(-1) * obs_corr + assert obs_scale_tril.shape[-2:] == (dim, dim) + + # Note the initial seasonality should be sampled in a plate with the + # same dim as the time_plate, dim=-1. That way we can repeat the dim + # below using periodic_repeat(). + with pyro.plate("season_plate", period, dim=-1): + season_init = pyro.sample( + "season_init", dist.Normal(torch.zeros(dim), 1).to_event(1) + ) + assert season_init.shape[-2:] == (period, dim) + + # Sample independent noise at each time step. + with self.time_plate: + season_noise = pyro.sample( + "season_noise", dist.Normal(0, noise_scale).to_event(1) + ) + assert season_noise.shape[-2:] == (duration, dim) + + # Construct a prediction. This prediction has an exactly repeated + # seasonal part plus slow seasonal drift. We use two deterministic, + # linear functions to transform our diagonal Normal noise to nontrivial + # samples from a Gaussian process. + prediction = periodic_repeat(season_init, duration, dim=-2) + periodic_cumsum( + season_noise, period, dim=-2 + ) + assert prediction.shape[-2:] == (duration, dim) + + # Construct a joint noise model. This model is a GaussianHMM, whose + # .rsample() and .log_prob() methods are parallelized over time; this + # this entire model is parallelized over time. + init_dist = dist.Normal(torch.zeros(dim), 100).to_event(1) + trans_mat = trans_timescale.neg().exp().diag_embed() + trans_dist = dist.MultivariateNormal(trans_loc, scale_tril=trans_scale_tril) + obs_mat = torch.eye(dim) + obs_dist = dist.MultivariateNormal(torch.zeros(dim), scale_tril=obs_scale_tril) + noise_model = dist.GaussianHMM( + init_dist, trans_mat, trans_dist, obs_mat, obs_dist, duration=duration + ) + assert noise_model.event_shape == (duration, dim) + + # The final statement registers our noise model and prediction. + self.predict(noise_model, prediction) + + +def main(args): + data, covariates = preprocess(args) + + # We will model positive count data by log1p-transforming it into real + # valued data. But since we want to evaluate back in the count domain, we + # will also define a transform to apply during evaluation, transforming + # from real back to count-valued data. Truth is mapped by the log1p() + # inverse expm1(), but the prediction will be sampled from a Poisson + # distribution. + data = data.log1p() + + def transform(pred, truth): + pred = torch.poisson(pred.clamp(min=1e-4).expm1()) + truth = truth.expm1() + return pred, truth + + # The backtest() function automatically trains and evaluates our model on + # different windows of data. + forecaster_options = { + "num_steps": args.num_steps, + "learning_rate": args.learning_rate, + "log_every": args.log_every, + "dct_gradients": args.dct, + } + metrics = backtest( + data, + covariates, + Model, + train_window=args.train_window, + test_window=args.test_window, + stride=args.stride, + num_samples=args.num_samples, + forecaster_options=forecaster_options, + ) + + for name in ["mae", "rmse", "crps"]: + values = [m[name] for m in metrics] + mean = np.mean(values) + std = np.std(values) + print("{} = {:0.3g} +- {:0.3g}".format(name, mean, std)) + return metrics + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser(description="Bart Ridership Forecasting Example") + parser.add_argument("--train-window", default=2160, type=int) + parser.add_argument("--test-window", default=336, type=int) + parser.add_argument("--stride", default=168, type=int) + parser.add_argument("-n", "--num-steps", default=501, type=int) + parser.add_argument("-lr", "--learning-rate", default=0.01, type=float) + parser.add_argument("--dct", action="store_true") + parser.add_argument("--num-samples", default=100, type=int) + parser.add_argument("--log-every", default=50, type=int) + parser.add_argument("--seed", default=1234567890, type=int) + args = parser.parse_args() + main(args) diff --git a/pyro/source/examples/contrib/funsor/__init__.py b/pyro/source/examples/contrib/funsor/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/examples/contrib/funsor/hmm.py b/pyro/source/examples/contrib/funsor/hmm.py new file mode 100644 index 0000000000000000000000000000000000000000..00885a46160e484afb557de134982eecec501e56 --- /dev/null +++ b/pyro/source/examples/contrib/funsor/hmm.py @@ -0,0 +1,871 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +This example is largely copied from ``examples/hmm.py``. +It illustrates the use of the experimental ``pyro.contrib.funsor`` Pyro backend +through the ``pyroapi`` package, demonstrating the utility of Funsor [0] +as an intermediate representation for probabilistic programs + +This example combines Stochastic Variational Inference (SVI) with a +variable elimination algorithm, where we use enumeration to exactly +marginalize out some variables from the ELBO computation. We might +call the resulting algorithm collapsed SVI or collapsed SGVB (i.e +collapsed Stochastic Gradient Variational Bayes). In the case where +we exactly sum out all the latent variables (as is the case here), +this algorithm reduces to a form of gradient-based Maximum +Likelihood Estimation. + +To marginalize out discrete variables ``x`` in Pyro's SVI: + +1. Verify that the variable dependency structure in your model + admits tractable inference, i.e. the dependency graph among + enumerated variables should have narrow treewidth. +2. Annotate each target each such sample site in the model + with ``infer={"enumerate": "parallel"}`` +3. Ensure your model can handle broadcasting of the sample values + of those variables +4. Use the ``TraceEnum_ELBO`` loss inside Pyro's ``SVI``. + +Note that empirical results for the models defined here can be found in +reference [1]. This paper also includes a description of the "tensor +variable elimination" algorithm that Pyro uses under the hood to +marginalize out discrete latent variables. + +References + +0. "Functional Tensors for Probabilistic Programming", +Fritz Obermeyer, Eli Bingham, Martin Jankowiak, +Du Phan, Jonathan P Chen. https://arxiv.org/abs/1910.10775 + +1. "Tensor Variable Elimination for Plated Factor Graphs", +Fritz Obermeyer, Eli Bingham, Martin Jankowiak, Justin Chiu, +Neeraj Pradhan, Alexander Rush, Noah Goodman. https://arxiv.org/abs/1902.03210 +""" +import argparse +import functools +import logging +import sys + +import torch +import torch.nn as nn +from torch.distributions import constraints + +from pyro.contrib.examples import polyphonic_data_loader as poly +from pyro.infer.autoguide import AutoDelta +from pyro.ops.indexing import Vindex +from pyro.util import ignore_jit_warnings + +try: + import pyro.contrib.funsor +except ImportError: + pass + +from pyroapi import distributions as dist +from pyroapi import handlers, infer, optim, pyro, pyro_backend + +logging.basicConfig(format="%(relativeCreated) 9d %(message)s", level=logging.DEBUG) + +# Add another handler for logging debugging events (e.g. for profiling) +# in a separate stream that can be captured. +log = logging.getLogger() +debug_handler = logging.StreamHandler(sys.stdout) +debug_handler.setLevel(logging.DEBUG) +debug_handler.addFilter(filter=lambda record: record.levelno <= logging.DEBUG) +log.addHandler(debug_handler) + + +# Let's start with a simple Hidden Markov Model. +# +# x[t-1] --> x[t] --> x[t+1] +# | | | +# V V V +# y[t-1] y[t] y[t+1] +# +# This model includes a plate for the data_dim = 88 keys on the piano. This +# model has two "style" parameters probs_x and probs_y that we'll draw from a +# prior. The latent state is x, and the observed state is y. We'll drive +# probs_* with the guide, enumerate over x, and condition on y. +# +# Importantly, the dependency structure of the enumerated variables has +# narrow treewidth, therefore admitting efficient inference by message passing. +# Pyro's TraceEnum_ELBO will find an efficient message passing scheme if one +# exists. +def model_0(sequences, lengths, args, batch_size=None, include_prior=True): + assert not torch._C._get_tracing_state() + num_sequences, max_length, data_dim = sequences.shape + with handlers.mask(mask=include_prior): + # Our prior on transition probabilities will be: + # stay in the same state with 90% probability; uniformly jump to another + # state with 10% probability. + probs_x = pyro.sample( + "probs_x", + dist.Dirichlet(0.9 * torch.eye(args.hidden_dim) + 0.1).to_event(1), + ) + # We put a weak prior on the conditional probability of a tone sounding. + # We know that on average about 4 of 88 tones are active, so we'll set a + # rough weak prior of 10% of the notes being active at any one time. + probs_y = pyro.sample( + "probs_y", + dist.Beta(0.1, 0.9).expand([args.hidden_dim, data_dim]).to_event(2), + ) + # In this first model we'll sequentially iterate over sequences in a + # minibatch; this will make it easy to reason about tensor shapes. + tones_plate = pyro.plate("tones", data_dim, dim=-1) + for i in pyro.plate("sequences", len(sequences), batch_size): + length = lengths[i] + sequence = sequences[i, :length] + x = 0 + for t in pyro.markov(range(length)): + # On the next line, we'll overwrite the value of x with an updated + # value. If we wanted to record all x values, we could instead + # write x[t] = pyro.sample(...x[t-1]...). + x = pyro.sample( + "x_{}_{}".format(i, t), + dist.Categorical(probs_x[x]), + infer={"enumerate": "parallel"}, + ) + with tones_plate: + pyro.sample( + "y_{}_{}".format(i, t), + dist.Bernoulli(probs_y[x.squeeze(-1)]), + obs=sequence[t], + ) + + +# To see how enumeration changes the shapes of these sample sites, we can use +# the Trace.format_shapes() to print shapes at each site: +# $ python examples/hmm.py -m 0 -n 1 -b 1 -t 5 --print-shapes +# ... +# Sample Sites: +# probs_x dist | 16 16 +# value | 16 16 +# probs_y dist | 16 88 +# value | 16 88 +# tones dist | +# value 88 | +# sequences dist | +# value 1 | +# x_178_0 dist | +# value 16 1 | +# y_178_0 dist 16 88 | +# value 88 | +# x_178_1 dist 16 1 | +# value 16 1 1 | +# y_178_1 dist 16 1 88 | +# value 88 | +# x_178_2 dist 16 1 1 | +# value 16 1 | +# y_178_2 dist 16 88 | +# value 88 | +# x_178_3 dist 16 1 | +# value 16 1 1 | +# y_178_3 dist 16 1 88 | +# value 88 | +# x_178_4 dist 16 1 1 | +# value 16 1 | +# y_178_4 dist 16 88 | +# value 88 | +# +# Notice that enumeration (over 16 states) alternates between two dimensions: +# -2 and -3. If we had not used pyro.markov above, each enumerated variable +# would need its own enumeration dimension. + + +# Next let's make our simple model faster in two ways: first we'll support +# vectorized minibatches of data, and second we'll support the PyTorch jit +# compiler. To add batch support, we'll introduce a second plate "sequences" +# and randomly subsample data to size batch_size. To add jit support we +# silence some warnings and try to avoid dynamic program structure. + + +# Note that this is the "HMM" model in reference [1] (with the difference that +# in [1] the probabilities probs_x and probs_y are not MAP-regularized with +# Dirichlet and Beta distributions for any of the models) +def model_1(sequences, lengths, args, batch_size=None, include_prior=True): + # Sometimes it is safe to ignore jit warnings. Here we use the + # pyro.util.ignore_jit_warnings context manager to silence warnings about + # conversion to integer, since we know all three numbers will be the same + # across all invocations to the model. + with ignore_jit_warnings(): + num_sequences, max_length, data_dim = map(int, sequences.shape) + assert lengths.shape == (num_sequences,) + assert lengths.max() <= max_length + with handlers.mask(mask=include_prior): + probs_x = pyro.sample( + "probs_x", + dist.Dirichlet(0.9 * torch.eye(args.hidden_dim) + 0.1).to_event(1), + ) + probs_y = pyro.sample( + "probs_y", + dist.Beta(0.1, 0.9).expand([args.hidden_dim, data_dim]).to_event(2), + ) + tones_plate = pyro.plate("tones", data_dim, dim=-1) + # We subsample batch_size items out of num_sequences items. Note that since + # we're using dim=-1 for the notes plate, we need to batch over a different + # dimension, here dim=-2. + with pyro.plate("sequences", num_sequences, batch_size, dim=-2) as batch: + lengths = lengths[batch] + x = 0 + # If we are not using the jit, then we can vary the program structure + # each call by running for a dynamically determined number of time + # steps, lengths.max(). However if we are using the jit, then we try to + # keep a single program structure for all minibatches; the fixed + # structure ends up being faster since each program structure would + # need to trigger a new jit compile stage. + for t in pyro.markov(range(max_length if args.jit else lengths.max())): + with handlers.mask(mask=(t < lengths).unsqueeze(-1)): + x = pyro.sample( + "x_{}".format(t), + dist.Categorical(probs_x[x]), + infer={"enumerate": "parallel"}, + ) + with tones_plate: + pyro.sample( + "y_{}".format(t), + dist.Bernoulli(probs_y[x.squeeze(-1)]), + obs=sequences[batch, t], + ) + + +# Let's see how batching changes the shapes of sample sites: +# $ python examples/hmm.py -m 1 -n 1 -t 5 --batch-size=10 --print-shapes +# ... +# Sample Sites: +# probs_x dist | 16 16 +# value | 16 16 +# probs_y dist | 16 88 +# value | 16 88 +# tones dist | +# value 88 | +# sequences dist | +# value 10 | +# x_0 dist 10 1 | +# value 16 1 1 | +# y_0 dist 16 10 88 | +# value 10 88 | +# x_1 dist 16 10 1 | +# value 16 1 1 1 | +# y_1 dist 16 1 10 88 | +# value 10 88 | +# x_2 dist 16 1 10 1 | +# value 16 1 1 | +# y_2 dist 16 10 88 | +# value 10 88 | +# x_3 dist 16 10 1 | +# value 16 1 1 1 | +# y_3 dist 16 1 10 88 | +# value 10 88 | +# x_4 dist 16 1 10 1 | +# value 16 1 1 | +# y_4 dist 16 10 88 | +# value 10 88 | +# +# Notice that we're now using dim=-2 as a batch dimension (of size 10), +# and that the enumeration dimensions are now dims -3 and -4. + + +# Next let's add a dependency of y[t] on y[t-1]. +# +# x[t-1] --> x[t] --> x[t+1] +# | | | +# V V V +# y[t-1] --> y[t] --> y[t+1] +# +# Note that this is the "arHMM" model in reference [1]. +def model_2(sequences, lengths, args, batch_size=None, include_prior=True): + with ignore_jit_warnings(): + num_sequences, max_length, data_dim = map(int, sequences.shape) + assert lengths.shape == (num_sequences,) + assert lengths.max() <= max_length + with handlers.mask(mask=include_prior): + probs_x = pyro.sample( + "probs_x", + dist.Dirichlet(0.9 * torch.eye(args.hidden_dim) + 0.1).to_event(1), + ) + probs_y = pyro.sample( + "probs_y", + dist.Beta(0.1, 0.9).expand([args.hidden_dim, 2, data_dim]).to_event(3), + ) + tones_plate = pyro.plate("tones", data_dim, dim=-1) + with pyro.plate("sequences", num_sequences, batch_size, dim=-2) as batch: + lengths = lengths[batch] + x, y = 0, 0 + for t in pyro.markov(range(max_length if args.jit else lengths.max())): + with handlers.mask(mask=(t < lengths).unsqueeze(-1)): + x = pyro.sample( + "x_{}".format(t), + dist.Categorical(probs_x[x]), + infer={"enumerate": "parallel"}, + ) + # Note the broadcasting tricks here: to index probs_y on tensors x and y, + # we also need a final tensor for the tones dimension. This is conveniently + # provided by the plate associated with that dimension. + with tones_plate as tones: + y = pyro.sample( + "y_{}".format(t), + dist.Bernoulli(probs_y[x, y, tones]), + obs=sequences[batch, t], + ).long() + + +# Next consider a Factorial HMM with two hidden states. +# +# w[t-1] ----> w[t] ---> w[t+1] +# \ x[t-1] --\-> x[t] --\-> x[t+1] +# \ / \ / \ / +# \/ \/ \/ +# y[t-1] y[t] y[t+1] +# +# Note that since the joint distribution of each y[t] depends on two variables, +# those two variables become dependent. Therefore during enumeration, the +# entire joint space of these variables w[t],x[t] needs to be enumerated. +# For that reason, we set the dimension of each to the square root of the +# target hidden dimension. +# +# Note that this is the "FHMM" model in reference [1]. +def model_3(sequences, lengths, args, batch_size=None, include_prior=True): + with ignore_jit_warnings(): + num_sequences, max_length, data_dim = map(int, sequences.shape) + assert lengths.shape == (num_sequences,) + assert lengths.max() <= max_length + hidden_dim = int(args.hidden_dim**0.5) # split between w and x + with handlers.mask(mask=include_prior): + probs_w = pyro.sample( + "probs_w", dist.Dirichlet(0.9 * torch.eye(hidden_dim) + 0.1).to_event(1) + ) + probs_x = pyro.sample( + "probs_x", dist.Dirichlet(0.9 * torch.eye(hidden_dim) + 0.1).to_event(1) + ) + probs_y = pyro.sample( + "probs_y", + dist.Beta(0.1, 0.9).expand([hidden_dim, hidden_dim, data_dim]).to_event(3), + ) + tones_plate = pyro.plate("tones", data_dim, dim=-1) + with pyro.plate("sequences", num_sequences, batch_size, dim=-2) as batch: + lengths = lengths[batch] + w, x = 0, 0 + for t in pyro.markov(range(max_length if args.jit else lengths.max())): + with handlers.mask(mask=(t < lengths).unsqueeze(-1)): + w = pyro.sample( + "w_{}".format(t), + dist.Categorical(probs_w[w]), + infer={"enumerate": "parallel"}, + ) + x = pyro.sample( + "x_{}".format(t), + dist.Categorical(probs_x[x]), + infer={"enumerate": "parallel"}, + ) + with tones_plate as tones: + pyro.sample( + "y_{}".format(t), + dist.Bernoulli(probs_y[w, x, tones]), + obs=sequences[batch, t], + ) + + +# By adding a dependency of x on w, we generalize to a +# Dynamic Bayesian Network. +# +# w[t-1] ----> w[t] ---> w[t+1] +# | \ | \ | \ +# | x[t-1] ----> x[t] ----> x[t+1] +# | / | / | / +# V / V / V / +# y[t-1] y[t] y[t+1] +# +# Note that message passing here has roughly the same cost as with the +# Factorial HMM, but this model has more parameters. +# +# Note that this is the "PFHMM" model in reference [1]. +def model_4(sequences, lengths, args, batch_size=None, include_prior=True): + with ignore_jit_warnings(): + num_sequences, max_length, data_dim = map(int, sequences.shape) + assert lengths.shape == (num_sequences,) + assert lengths.max() <= max_length + hidden_dim = int(args.hidden_dim**0.5) # split between w and x + with handlers.mask(mask=include_prior): + probs_w = pyro.sample( + "probs_w", dist.Dirichlet(0.9 * torch.eye(hidden_dim) + 0.1).to_event(1) + ) + probs_x = pyro.sample( + "probs_x", + dist.Dirichlet(0.9 * torch.eye(hidden_dim) + 0.1) + .expand_by([hidden_dim]) + .to_event(2), + ) + probs_y = pyro.sample( + "probs_y", + dist.Beta(0.1, 0.9).expand([hidden_dim, hidden_dim, data_dim]).to_event(3), + ) + tones_plate = pyro.plate("tones", data_dim, dim=-1) + with pyro.plate("sequences", num_sequences, batch_size, dim=-2) as batch: + lengths = lengths[batch] + # Note the broadcasting tricks here: we declare a hidden torch.arange and + # ensure that w and x are always tensors so we can unsqueeze them below, + # thus ensuring that the x sample sites have correct distribution shape. + w = x = torch.tensor(0, dtype=torch.long) + for t in pyro.markov(range(max_length if args.jit else lengths.max())): + with handlers.mask(mask=(t < lengths).unsqueeze(-1)): + w = pyro.sample( + "w_{}".format(t), + dist.Categorical(probs_w[w]), + infer={"enumerate": "parallel"}, + ) + x = pyro.sample( + "x_{}".format(t), + dist.Categorical(Vindex(probs_x)[w, x]), + infer={"enumerate": "parallel"}, + ) + with tones_plate as tones: + pyro.sample( + "y_{}".format(t), + dist.Bernoulli(probs_y[w, x, tones]), + obs=sequences[batch, t], + ) + + +# Next let's consider a neural HMM model. +# +# x[t-1] --> x[t] --> x[t+1] } standard HMM + +# | | | +# V V V +# y[t-1] --> y[t] --> y[t+1] } neural likelihood +# +# First let's define a neural net to generate y logits. +class TonesGenerator(nn.Module): + def __init__(self, args, data_dim): + self.args = args + self.data_dim = data_dim + super().__init__() + self.x_to_hidden = nn.Linear(args.hidden_dim, args.nn_dim) + self.y_to_hidden = nn.Linear(args.nn_channels * data_dim, args.nn_dim) + self.conv = nn.Conv1d(1, args.nn_channels, 3, padding=1) + self.hidden_to_logits = nn.Linear(args.nn_dim, data_dim) + self.relu = nn.ReLU() + + def forward(self, x, y): + # Hidden units depend on two inputs: a one-hot encoded categorical variable x, and + # a bernoulli variable y. Whereas x will typically be enumerated, y will be observed. + # We apply x_to_hidden independently from y_to_hidden, then broadcast the non-enumerated + # y part up to the enumerated x part in the + operation. + x_onehot = y.new_zeros(x.shape[:-1] + (self.args.hidden_dim,)).scatter_( + -1, x, 1 + ) + y_conv = self.relu(self.conv(y.reshape(-1, 1, self.data_dim))).reshape( + y.shape[:-1] + (-1,) + ) + h = self.relu(self.x_to_hidden(x_onehot) + self.y_to_hidden(y_conv)) + return self.hidden_to_logits(h) + + +# We will create a single global instance later. +tones_generator = None + + +# The neural HMM model now uses tones_generator at each time step. +# +# Note that this is the "nnHMM" model in reference [1]. +def model_5(sequences, lengths, args, batch_size=None, include_prior=True): + with ignore_jit_warnings(): + num_sequences, max_length, data_dim = map(int, sequences.shape) + assert lengths.shape == (num_sequences,) + assert lengths.max() <= max_length + + # Initialize a global module instance if needed. + global tones_generator + if tones_generator is None: + tones_generator = TonesGenerator(args, data_dim) + pyro.module("tones_generator", tones_generator) + + with handlers.mask(mask=include_prior): + probs_x = pyro.sample( + "probs_x", + dist.Dirichlet(0.9 * torch.eye(args.hidden_dim) + 0.1).to_event(1), + ) + with pyro.plate("sequences", num_sequences, batch_size, dim=-2) as batch: + lengths = lengths[batch] + x = 0 + y = torch.zeros(data_dim) + for t in pyro.markov(range(max_length if args.jit else lengths.max())): + with handlers.mask(mask=(t < lengths).unsqueeze(-1)): + x = pyro.sample( + "x_{}".format(t), + dist.Categorical(probs_x[x]), + infer={"enumerate": "parallel"}, + ) + # Note that since each tone depends on all tones at a previous time step + # the tones at different time steps now need to live in separate plates. + with pyro.plate("tones_{}".format(t), data_dim, dim=-1): + y = pyro.sample( + "y_{}".format(t), + dist.Bernoulli(logits=tones_generator(x, y)), + obs=sequences[batch, t], + ) + + +# Next let's consider a second-order HMM model +# in which x[t+1] depends on both x[t] and x[t-1]. +# +# _______>______ +# _____>_____/______ \ +# / / \ \ +# x[t-1] --> x[t] --> x[t+1] --> x[t+2] +# | | | | +# V V V V +# y[t-1] y[t] y[t+1] y[t+2] +# +# Note that in this model (in contrast to the previous model) we treat +# the transition and emission probabilities as parameters (so they have no prior). +# +# Note that this is the "2HMM" model in reference [1]. +def model_6(sequences, lengths, args, batch_size=None, include_prior=False): + num_sequences, max_length, data_dim = sequences.shape + assert lengths.shape == (num_sequences,) + assert lengths.max() <= max_length + hidden_dim = args.hidden_dim + + if not args.raftery_parameterization: + # Explicitly parameterize the full tensor of transition probabilities, which + # has hidden_dim cubed entries. + probs_x = pyro.param( + "probs_x", + torch.rand(hidden_dim, hidden_dim, hidden_dim), + constraint=constraints.simplex, + ) + else: + # Use the more parsimonious "Raftery" parameterization of + # the tensor of transition probabilities. See reference: + # Raftery, A. E. A model for high-order markov chains. + # Journal of the Royal Statistical Society. 1985. + probs_x1 = pyro.param( + "probs_x1", + torch.rand(hidden_dim, hidden_dim), + constraint=constraints.simplex, + ) + probs_x2 = pyro.param( + "probs_x2", + torch.rand(hidden_dim, hidden_dim), + constraint=constraints.simplex, + ) + mix_lambda = pyro.param( + "mix_lambda", torch.tensor(0.5), constraint=constraints.unit_interval + ) + # we use broadcasting to combine two tensors of shape (hidden_dim, hidden_dim) and + # (hidden_dim, 1, hidden_dim) to obtain a tensor of shape (hidden_dim, hidden_dim, hidden_dim) + probs_x = mix_lambda * probs_x1 + (1.0 - mix_lambda) * probs_x2.unsqueeze(-2) + + probs_y = pyro.param( + "probs_y", + torch.rand(hidden_dim, data_dim), + constraint=constraints.unit_interval, + ) + tones_plate = pyro.plate("tones", data_dim, dim=-1) + with pyro.plate("sequences", num_sequences, batch_size, dim=-2) as batch: + lengths = lengths[batch] + x_curr, x_prev = torch.tensor(0), torch.tensor(0) + # we need to pass the argument `history=2' to `pyro.markov()` + # since our model is now 2-markov + for t in pyro.markov(range(lengths.max()), history=2): + with handlers.mask(mask=(t < lengths).unsqueeze(-1)): + probs_x_t = Vindex(probs_x)[x_prev, x_curr] + x_prev, x_curr = x_curr, pyro.sample( + "x_{}".format(t), + dist.Categorical(probs_x_t), + infer={"enumerate": "parallel"}, + ) + with tones_plate: + probs_y_t = probs_y[x_curr.squeeze(-1)] + pyro.sample( + "y_{}".format(t), + dist.Bernoulli(probs_y_t), + obs=sequences[batch, t], + ) + + +# Let's go back to our initial model and make it even faster: we'll support +# vectorized time dimension and use TraceMarkovEnum_ELBO that efficiently eliminates +# vectorized time dimension using the parallel scan algorithm. Note that TraceMarkovEnum_ELBO +# is only supported by funsor backend. +def model_7(sequences, lengths, args, batch_size=None, include_prior=True): + with ignore_jit_warnings(): + num_sequences, max_length, data_dim = map(int, sequences.shape) + assert lengths.shape == (num_sequences,) + assert lengths.max() <= max_length + with handlers.mask(mask=include_prior): + probs_x = pyro.sample( + "probs_x", + dist.Dirichlet(0.9 * torch.eye(args.hidden_dim) + 0.1).to_event(1), + ) + probs_y = pyro.sample( + "probs_y", + dist.Beta(0.1, 0.9).expand([args.hidden_dim, data_dim]).to_event(2), + ) + tones_plate = pyro.plate("tones", data_dim, dim=-1) + # Note that since we're using dim=-2 for the time dimension, we need + # to batch sequences over a different dimension, here dim=-3. + with pyro.plate("sequences", num_sequences, batch_size, dim=-3) as batch: + lengths = lengths[batch] + batch = batch[:, None] + x_prev = 0 + # To vectorize time dimension we use pyro.vectorized_markov(name=...). + # With the help of Vindex and additional unsqueezes we can ensure that + # dimensions line up properly. + for t in pyro.vectorized_markov( + name="time", size=int(max_length if args.jit else lengths.max()), dim=-2 + ): + with handlers.mask(mask=(t < lengths.unsqueeze(-1)).unsqueeze(-1)): + x_curr = pyro.sample( + "x_{}".format(t), + dist.Categorical(probs_x[x_prev]), + infer={"enumerate": "parallel"}, + ) + with tones_plate: + pyro.sample( + "y_{}".format(t), + dist.Bernoulli(probs_y[x_curr.squeeze(-1)]), + obs=Vindex(sequences)[batch, t], + ) + x_prev = x_curr + + +# Let's see how vectorizing time dimension changes the shapes of sample sites: +# $ python examples/hmm.py -m 7 --funsor -n 1 --batch-size=10 --print-shapes +# ... +# Sample Sites: +# probs_x dist | 16 16 +# value | 16 16 +# probs_y dist | 16 51 +# value | 16 51 +# tones dist | +# value 51 | +# sequences dist | +# value 10 | +# x_0 dist 10 1 1 | +# value 16 1 1 1 | +# y_0 dist 16 10 1 51 | +# value 10 1 51 | +# x_slice(0, 71, None) dist 16 10 71 1 | +# value 16 1 1 1 1 | +# y_slice(0, 71, None) dist 16 1 10 71 51 | +# value 10 71 51 | +# x_slice(1, 72, None) dist 16 1 10 71 1 | +# value 16 1 1 1 1 1 | +# y_slice(1, 72, None) dist 16 1 1 10 71 51 | +# value 10 71 51 | +# +# Notice that we're now using dim=-2 for the time dimension. +# pyro.vectorized_markov loops three times: first it produces +# t = 0, then vectorized t_prev (torch.arange(0, 71)), and +# finally vectorized t_curr (torch.arange(1, 72)). + + +models = { + name[len("model_") :]: model + for name, model in globals().items() + if name.startswith("model_") +} + + +def main(args): + if args.cuda: + torch.set_default_device("cuda") + + logging.info("Loading data") + data = poly.load_data(poly.JSB_CHORALES) + + logging.info("-" * 40) + model = models[args.model] + logging.info( + "Training {} on {} sequences".format( + model.__name__, len(data["train"]["sequences"]) + ) + ) + sequences = data["train"]["sequences"] + lengths = data["train"]["sequence_lengths"] + + # find all the notes that are present at least once in the training set + present_notes = (sequences == 1).sum(0).sum(0) > 0 + # remove notes that are never played (we remove 37/88 notes) + sequences = sequences[..., present_notes] + + if args.truncate: + lengths = lengths.clamp(max=args.truncate) + sequences = sequences[:, : args.truncate] + num_observations = float(lengths.sum()) + pyro.set_rng_seed(args.seed) + pyro.clear_param_store() + + # We'll train using MAP Baum-Welch, i.e. MAP estimation while marginalizing + # out the hidden state x. This is accomplished via an automatic guide that + # learns point estimates of all of our conditional probability tables, + # named probs_*. + guide = AutoDelta( + handlers.block(model, expose_fn=lambda msg: msg["name"].startswith("probs_")) + ) + + # To help debug our tensor shapes, let's print the shape of each site's + # distribution, value, and log_prob tensor. Note this information is + # automatically printed on most errors inside SVI. + if args.print_shapes: + if args.model == "0": + first_available_dim = -2 + elif args.model == "7": + first_available_dim = -4 + else: + first_available_dim = -3 + guide_trace = handlers.trace(guide).get_trace( + sequences, lengths, args=args, batch_size=args.batch_size + ) + model_trace = handlers.trace( + handlers.replay(handlers.enum(model, first_available_dim), guide_trace) + ).get_trace(sequences, lengths, args=args, batch_size=args.batch_size) + logging.info(model_trace.format_shapes()) + + # Bind non-PyTorch parameters to make these functions jittable. + model = functools.partial(model, args=args) + guide = functools.partial(guide, args=args) + + # Enumeration requires a TraceEnum elbo and declaring the max_plate_nesting. + # All of our models have two plates: "data" and "tones". + optimizer = optim.Adam({"lr": args.learning_rate}) + if args.tmc: + if args.jit and not args.funsor: + raise NotImplementedError("jit support not yet added for TraceTMC_ELBO") + Elbo = infer.JitTraceTMC_ELBO if args.jit else infer.TraceTMC_ELBO + elbo = Elbo(max_plate_nesting=1 if model is model_0 else 2) + tmc_model = handlers.infer_config( + model, + lambda msg: ( + {"num_samples": args.tmc_num_samples, "expand": False} + if msg["infer"].get("enumerate", None) == "parallel" + else {} + ), + ) # noqa: E501 + svi = infer.SVI(tmc_model, guide, optimizer, elbo) + else: + if args.model == "7": + assert args.funsor + Elbo = ( + infer.JitTraceMarkovEnum_ELBO + if args.jit + else infer.TraceMarkovEnum_ELBO + ) + else: + Elbo = infer.JitTraceEnum_ELBO if args.jit else infer.TraceEnum_ELBO + if args.model == "0": + max_plate_nesting = 1 + elif args.model == "7": + max_plate_nesting = 3 + else: + max_plate_nesting = 2 + elbo = Elbo( + max_plate_nesting=max_plate_nesting, + strict_enumeration_warning=True, + jit_options={"time_compilation": args.time_compilation}, + ) + svi = infer.SVI(model, guide, optimizer, elbo) + + # We'll train on small minibatches. + logging.info("Step\tLoss") + for step in range(args.num_steps): + loss = svi.step(sequences, lengths, batch_size=args.batch_size) + logging.info("{: >5d}\t{}".format(step, loss / num_observations)) + + if args.jit and args.time_compilation: + logging.debug( + "time to compile: {} s.".format(elbo._differentiable_loss.compile_time) + ) + + # We evaluate on the entire training dataset, + # excluding the prior term so our results are comparable across models. + train_loss = elbo.loss( + model, + guide, + sequences, + lengths, + batch_size=sequences.shape[0], + include_prior=False, + ) + logging.info("training loss = {}".format(train_loss / num_observations)) + + # Finally we evaluate on the test dataset. + logging.info("-" * 40) + logging.info( + "Evaluating on {} test sequences".format(len(data["test"]["sequences"])) + ) + sequences = data["test"]["sequences"][..., present_notes] + lengths = data["test"]["sequence_lengths"] + if args.truncate: + lengths = lengths.clamp(max=args.truncate) + num_observations = float(lengths.sum()) + + # note that since we removed unseen notes above (to make the problem a bit easier and for + # numerical stability) this test loss may not be directly comparable to numbers + # reported on this dataset elsewhere. + test_loss = elbo.loss( + model, + guide, + sequences, + lengths, + batch_size=sequences.shape[0], + include_prior=False, + ) + logging.info("test loss = {}".format(test_loss / num_observations)) + + # We expect models with higher capacity to perform better, + # but eventually overfit to the training set. + capacity = sum( + value.reshape(-1).size(0) for value in pyro.get_param_store().values() + ) + logging.info("model_{} capacity = {} parameters".format(args.model, capacity)) + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser( + description="MAP Baum-Welch learning Bach Chorales" + ) + parser.add_argument( + "-m", + "--model", + default="1", + type=str, + help="one of: {}".format(", ".join(sorted(models.keys()))), + ) + parser.add_argument("-n", "--num-steps", default=50, type=int) + parser.add_argument("-b", "--batch-size", default=8, type=int) + parser.add_argument("-d", "--hidden-dim", default=16, type=int) + parser.add_argument("-nn", "--nn-dim", default=48, type=int) + parser.add_argument("-nc", "--nn-channels", default=2, type=int) + parser.add_argument("-lr", "--learning-rate", default=0.05, type=float) + parser.add_argument("-t", "--truncate", type=int) + parser.add_argument("-p", "--print-shapes", action="store_true") + parser.add_argument("--seed", default=0, type=int) + parser.add_argument("--cuda", action="store_true") + parser.add_argument("--jit", action="store_true") + parser.add_argument("--time-compilation", action="store_true") + parser.add_argument("-rp", "--raftery-parameterization", action="store_true") + parser.add_argument( + "--tmc", + action="store_true", + help="Use Tensor Monte Carlo instead of exact enumeration " + "to estimate the marginal likelihood. You probably don't want to do this, " + "except to see that TMC makes Monte Carlo gradient estimation feasible " + "even with very large numbers of non-reparametrized variables.", + ) + parser.add_argument("--tmc-num-samples", default=10, type=int) + parser.add_argument("--funsor", action="store_true") + args = parser.parse_args() + + if args.funsor: + import funsor + + funsor.set_backend("torch") + PYRO_BACKEND = "contrib.funsor" + else: + PYRO_BACKEND = "pyro" + + with pyro_backend(PYRO_BACKEND): + main(args) diff --git a/pyro/source/examples/contrib/gp/sv-dkl.py b/pyro/source/examples/contrib/gp/sv-dkl.py new file mode 100644 index 0000000000000000000000000000000000000000..8445becff30a1440db572097f8e87dd26342f49b --- /dev/null +++ b/pyro/source/examples/contrib/gp/sv-dkl.py @@ -0,0 +1,265 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +An example to use Pyro Gaussian Process module to classify MNIST and binary MNIST. + +Follow the idea from reference [1], we will combine a convolutional neural network +(CNN) with a RBF kernel to create a "deep" kernel: + + >>> deep_kernel = gp.kernels.Warping(rbf, iwarping_fn=cnn) + +VariationalSparseGP model allows us train the data in mini-batch (time complexity +scales linearly to the number of data points). + +Note that the implementation here is different from [1]. There the authors +use CNN as a feature extraction layer, then add a Gaussian Process layer on the +top of CNN. Hence, their inducing points lie in the space of extracted features. +Here we join CNN module and RBF kernel together to make it a deep kernel. +Hence, our inducing points lie in the space of original images. + +After 16 epochs with default hyperparameters, the accuaracy of 10-class MNIST +is 98.45% and the accuaracy of binary MNIST is 99.41%. + +Reference: + +[1] Stochastic Variational Deep Kernel Learning + Andrew G. Wilson, Zhiting Hu, Ruslan R. Salakhutdinov, Eric P. Xing +""" + +# Code adapted from https://github.com/pytorch/examples/tree/master/mnist +import argparse +import time + +import torch +import torch.nn as nn +import torch.nn.functional as F +from torchvision import transforms + +import pyro +import pyro.contrib.gp as gp +import pyro.infer as infer +from pyro.contrib.examples.util import get_data_directory, get_data_loader + + +class CNN(nn.Module): + def __init__(self): + super().__init__() + self.conv1 = nn.Conv2d(1, 10, kernel_size=5) + self.conv2 = nn.Conv2d(10, 20, kernel_size=5) + self.fc1 = nn.Linear(320, 50) + self.fc2 = nn.Linear(50, 10) + + def forward(self, x): + x = F.relu(F.max_pool2d(self.conv1(x), 2)) + x = F.relu(F.max_pool2d(self.conv2(x), 2)) + x = x.view(-1, 320) + x = F.relu(self.fc1(x)) + x = self.fc2(x) + return x + + +def train(args, train_loader, gpmodule, optimizer, loss_fn, epoch): + for batch_idx, (data, target) in enumerate(train_loader): + if args.cuda: + data, target = data.cuda(), target.cuda() + if args.binary: + target = (target % 2).float() # convert numbers 0->9 to 0 or 1 + + gpmodule.set_data(data, target) + optimizer.zero_grad() + loss = loss_fn(gpmodule.model, gpmodule.guide) + loss.backward() + optimizer.step() + batch_idx = batch_idx + 1 + if batch_idx % args.log_interval == 0: + print( + "Train Epoch: {:2d} [{:5d}/{} ({:2.0f}%)]\tLoss: {:.6f}".format( + epoch, + batch_idx * len(data), + len(train_loader.dataset), + 100.0 * batch_idx / len(train_loader), + loss, + ) + ) + + +def test(args, test_loader, gpmodule): + correct = 0 + for data, target in test_loader: + if args.cuda: + data, target = data.cuda(), target.cuda() + if args.binary: + target = (target % 2).float() # convert numbers 0->9 to 0 or 1 + + # get prediction of GP model on new data + f_loc, f_var = gpmodule(data) + # use its likelihood to give prediction class + pred = gpmodule.likelihood(f_loc, f_var) + # compare prediction and target to count accuracy + correct += pred.eq(target).long().cpu().sum().item() + + print( + "\nTest set: Accuracy: {}/{} ({:.2f}%)\n".format( + correct, + len(test_loader.dataset), + 100.0 * correct / len(test_loader.dataset), + ) + ) + + +def main(args): + data_dir = ( + args.data_dir if args.data_dir is not None else get_data_directory(__file__) + ) + train_loader = get_data_loader( + dataset_name="MNIST", + data_dir=data_dir, + batch_size=args.batch_size, + dataset_transforms=[transforms.Normalize((0.1307,), (0.3081,))], + is_training_set=True, + shuffle=True, + ) + test_loader = get_data_loader( + dataset_name="MNIST", + data_dir=data_dir, + batch_size=args.test_batch_size, + dataset_transforms=[transforms.Normalize((0.1307,), (0.3081,))], + is_training_set=False, + shuffle=False, + ) + if args.cuda: + train_loader.num_workers = 1 + test_loader.num_workers = 1 + + cnn = CNN() + + # Create deep kernel by warping RBF with CNN. + # CNN will transform a high dimension image into a low dimension 2D tensors for RBF kernel. + # This kernel accepts inputs are inputs of CNN and gives outputs are covariance matrix of RBF + # on outputs of CNN. + rbf = gp.kernels.RBF(input_dim=10, lengthscale=torch.ones(10)) + deep_kernel = gp.kernels.Warping(rbf, iwarping_fn=cnn) + + # init inducing points (taken randomly from dataset) + batches = [] + for i, (data, _) in enumerate(train_loader): + batches.append(data) + if i >= ((args.num_inducing - 1) // args.batch_size): + break + Xu = torch.cat(batches)[: args.num_inducing].clone() + + if args.binary: + likelihood = gp.likelihoods.Binary() + latent_shape = torch.Size([]) + else: + # use MultiClass likelihood for 10-class classification problem + likelihood = gp.likelihoods.MultiClass(num_classes=10) + # Because we use Categorical distribution in MultiClass likelihood, we need GP model + # returns a list of probabilities of each class. Hence it is required to use + # latent_shape = 10. + latent_shape = torch.Size([10]) + + # Turns on "whiten" flag will help optimization for variational models. + gpmodule = gp.models.VariationalSparseGP( + X=Xu, + y=None, + kernel=deep_kernel, + Xu=Xu, + likelihood=likelihood, + latent_shape=latent_shape, + num_data=60000, + whiten=True, + jitter=2e-6, + ) + if args.cuda: + gpmodule.cuda() + + optimizer = torch.optim.Adam(gpmodule.parameters(), lr=args.lr) + + elbo = infer.JitTraceMeanField_ELBO() if args.jit else infer.TraceMeanField_ELBO() + loss_fn = elbo.differentiable_loss + + for epoch in range(1, args.epochs + 1): + start_time = time.time() + train(args, train_loader, gpmodule, optimizer, loss_fn, epoch) + with torch.no_grad(): + test(args, test_loader, gpmodule) + print( + "Amount of time spent for epoch {}: {}s\n".format( + epoch, int(time.time() - start_time) + ) + ) + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser(description="Pyro GP MNIST Example") + parser.add_argument( + "--data-dir", + type=str, + default=None, + metavar="PATH", + help="default directory to cache MNIST data", + ) + parser.add_argument( + "--num-inducing", + type=int, + default=70, + metavar="N", + help="number of inducing input (default: 70)", + ) + parser.add_argument( + "--binary", action="store_true", default=False, help="do binary classification" + ) + parser.add_argument( + "--batch-size", + type=int, + default=64, + metavar="N", + help="input batch size for training (default: 64)", + ) + parser.add_argument( + "--test-batch-size", + type=int, + default=1000, + metavar="N", + help="input batch size for testing (default: 1000)", + ) + parser.add_argument( + "--epochs", + type=int, + default=10, + metavar="N", + help="number of epochs to train (default: 10)", + ) + parser.add_argument( + "--lr", + type=float, + default=0.01, + metavar="LR", + help="learning rate (default: 0.01)", + ) + parser.add_argument( + "--cuda", action="store_true", default=False, help="enables CUDA training" + ) + parser.add_argument( + "--jit", action="store_true", default=False, help="enables PyTorch jit" + ) + parser.add_argument( + "--seed", type=int, default=1, metavar="S", help="random seed (default: 1)" + ) + parser.add_argument( + "--log-interval", + type=int, + default=10, + metavar="N", + help="how many batches to wait before logging training status", + ) + args = parser.parse_args() + + pyro.set_rng_seed(args.seed) + if args.cuda: + torch.backends.cudnn.deterministic = True + + main(args) diff --git a/pyro/source/examples/contrib/mue/FactorMuE.py b/pyro/source/examples/contrib/mue/FactorMuE.py new file mode 100644 index 0000000000000000000000000000000000000000..591888bbb90e0e074070cf79e23ab6ae16844a70 --- /dev/null +++ b/pyro/source/examples/contrib/mue/FactorMuE.py @@ -0,0 +1,432 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +""" +A probabilistic PCA model with a MuE observation, called a 'FactorMuE' model +[1]. This is a generative model of variable-length biological sequences (e.g. +proteins) which does not require preprocessing the data by building a +multiple sequence alignment. It can be used to infer a latent representation +of sequences and the principal components of sequence variation, while +accounting for alignment uncertainty. + +An example dataset consisting of proteins similar to the human papillomavirus E6 +protein, collected from a non-redundant sequence dataset using jackhmmer, can +be found at +https://github.com/debbiemarkslab/MuE/blob/master/models/examples/ve6_full.fasta + +Example run: +python FactorMuE.py -f PATH/ve6_full.fasta --z-dim 2 -b 10 -M 174 -D 25 + --indel-prior-bias 10. --anneal 5 -e 15 -lr 0.01 --z-prior Laplace + --jit --cuda +This should take about 8 minutes to run on a GPU. The latent space should show +multiple small clusters, and the perplexity should be around 4. + +Reference: +[1] E. N. Weinstein, D. S. Marks (2021) +"A structured observation distribution for generative biological sequence +prediction and forecasting" +https://www.biorxiv.org/content/10.1101/2020.07.31.231381v2.full.pdf +""" + +import argparse +import datetime +import json +import os + +import matplotlib.pyplot as plt +import numpy as np +import torch +from torch.optim import Adam + +import pyro +from pyro.contrib.mue.dataloaders import BiosequenceDataset +from pyro.contrib.mue.models import FactorMuE +from pyro.optim import MultiStepLR + + +def generate_data(small_test, include_stop, device): + """Generate mini example dataset.""" + if small_test: + mult_dat = 1 + else: + mult_dat = 10 + + seqs = ["BABBA"] * mult_dat + ["BAAB"] * mult_dat + ["BABBB"] * mult_dat + dataset = BiosequenceDataset( + seqs, "list", "AB", include_stop=include_stop, device=device + ) + + return dataset + + +def main(args): + # Load dataset. + if args.cpu_data or not args.cuda: + device = torch.device("cpu") + else: + device = torch.device("cuda") + if args.test: + dataset = generate_data(args.small, args.include_stop, device) + else: + dataset = BiosequenceDataset( + args.file, + "fasta", + args.alphabet, + include_stop=args.include_stop, + device=device, + ) + args.batch_size = min([dataset.data_size, args.batch_size]) + if args.split > 0.0: + # Train test split. + heldout_num = int(np.ceil(args.split * len(dataset))) + data_lengths = [len(dataset) - heldout_num, heldout_num] + # Specific data split seed, for comparability across models and + # parameter initializations. + pyro.set_rng_seed(args.rng_data_seed) + indices = torch.randperm(sum(data_lengths), device=device).tolist() + dataset_train, dataset_test = [ + torch.utils.data.Subset(dataset, indices[(offset - length) : offset]) + for offset, length in zip(np.cumsum(data_lengths), data_lengths) + ] + else: + dataset_train = dataset + dataset_test = None + + # Training seed. + pyro.set_rng_seed(args.rng_seed) + + # Construct model. + model = FactorMuE( + dataset.max_length, + dataset.alphabet_length, + args.z_dim, + batch_size=args.batch_size, + latent_seq_length=args.latent_seq_length, + indel_factor_dependence=args.indel_factor, + indel_prior_scale=args.indel_prior_scale, + indel_prior_bias=args.indel_prior_bias, + inverse_temp_prior=args.inverse_temp_prior, + weights_prior_scale=args.weights_prior_scale, + offset_prior_scale=args.offset_prior_scale, + z_prior_distribution=args.z_prior, + ARD_prior=args.ARD_prior, + substitution_matrix=(not args.no_substitution_matrix), + substitution_prior_scale=args.substitution_prior_scale, + latent_alphabet_length=args.latent_alphabet, + cuda=args.cuda, + pin_memory=args.pin_mem, + ) + + # Infer with SVI. + scheduler = MultiStepLR( + { + "optimizer": Adam, + "optim_args": {"lr": args.learning_rate}, + "milestones": json.loads(args.milestones), + "gamma": args.learning_gamma, + } + ) + n_epochs = args.n_epochs + losses = model.fit_svi( + dataset_train, + n_epochs, + args.anneal, + args.batch_size, + scheduler, + args.jit, + ) + + # Evaluate. + train_lp, test_lp, train_perplex, test_perplex = model.evaluate( + dataset_train, dataset_test, args.jit + ) + print("train logp: {} perplex: {}".format(train_lp, train_perplex)) + print("test logp: {} perplex: {}".format(test_lp, test_perplex)) + + # Get latent space embedding. + z_locs, z_scales = model.embed(dataset) + + # Plot and save. + time_stamp = datetime.datetime.now().strftime("%Y%m%d-%H%M%S") + if not args.no_plots: + plt.figure(figsize=(6, 6)) + plt.plot(losses) + plt.xlabel("step") + plt.ylabel("loss") + if not args.no_save: + plt.savefig( + os.path.join( + args.out_folder, "FactorMuE_plot.loss_{}.pdf".format(time_stamp) + ) + ) + + plt.figure(figsize=(6, 6)) + plt.scatter(z_locs[:, 0], z_locs[:, 1]) + plt.xlabel(r"$z_1$") + plt.ylabel(r"$z_2$") + if not args.no_save: + plt.savefig( + os.path.join( + args.out_folder, "FactorMuE_plot.latent_{}.pdf".format(time_stamp) + ) + ) + + if not args.indel_factor: + # Plot indel parameters. See statearrangers.py for details on the + # r and u parameters. + plt.figure(figsize=(6, 6)) + insert = pyro.param("insert_q_mn").detach() + insert_expect = torch.exp(insert - insert.logsumexp(-1, True)) + plt.plot(insert_expect[:, :, 1].cpu().numpy()) + plt.xlabel("position") + plt.ylabel("probability of insert") + plt.legend([r"$r_0$", r"$r_1$", r"$r_2$"]) + if not args.no_save: + plt.savefig( + os.path.join( + args.out_folder, + "FactorMuE_plot.insert_prob_{}.pdf".format(time_stamp), + ) + ) + plt.figure(figsize=(6, 6)) + delete = pyro.param("delete_q_mn").detach() + delete_expect = torch.exp(delete - delete.logsumexp(-1, True)) + plt.plot(delete_expect[:, :, 1].cpu().numpy()) + plt.xlabel("position") + plt.ylabel("probability of delete") + plt.legend([r"$u_0$", r"$u_1$", r"$u_2$"]) + if not args.no_save: + plt.savefig( + os.path.join( + args.out_folder, + "FactorMuE_plot.delete_prob_{}.pdf".format(time_stamp), + ) + ) + + if not args.no_save: + pyro.get_param_store().save( + os.path.join( + args.out_folder, "FactorMuE_results.params_{}.out".format(time_stamp) + ) + ) + with open( + os.path.join( + args.out_folder, + "FactorMuE_results.evaluation_{}.txt".format(time_stamp), + ), + "w", + ) as ow: + ow.write("train_lp,test_lp,train_perplex,test_perplex\n") + ow.write( + "{},{},{},{}\n".format(train_lp, test_lp, train_perplex, test_perplex) + ) + np.savetxt( + os.path.join( + args.out_folder, "FactorMuE_results.embed_loc_{}.txt".format(time_stamp) + ), + z_locs.cpu().numpy(), + ) + np.savetxt( + os.path.join( + args.out_folder, + "FactorMuE_results.embed_scale_{}.txt".format(time_stamp), + ), + z_scales.cpu().numpy(), + ) + with open( + os.path.join( + args.out_folder, + "FactorMuE_results.input_{}.txt".format(time_stamp), + ), + "w", + ) as ow: + ow.write("[args]\n") + args.latent_seq_length = model.latent_seq_length + args.latent_alphabet = model.latent_alphabet_length + for elem in list(args.__dict__.keys()): + ow.write("{} = {}\n".format(elem, args.__getattribute__(elem))) + ow.write("alphabet_str = {}\n".format("".join(dataset.alphabet))) + ow.write("max_length = {}\n".format(dataset.max_length)) + + +if __name__ == "__main__": + # Parse command line arguments. + parser = argparse.ArgumentParser(description="Factor MuE model.") + parser.add_argument( + "--test", + action="store_true", + default=False, + help="Run with generated example dataset.", + ) + parser.add_argument( + "--small", + action="store_true", + default=False, + help="Run with small example dataset.", + ) + parser.add_argument("-r", "--rng-seed", default=0, type=int) + parser.add_argument("--rng-data-seed", default=0, type=int) + parser.add_argument( + "-f", "--file", default=None, type=str, help="Input file (fasta format)." + ) + parser.add_argument( + "-a", + "--alphabet", + default="amino-acid", + help="Alphabet (amino-acid OR dna OR ATGC ...).", + ) + parser.add_argument( + "-zdim", "--z-dim", default=2, type=int, help="z space dimension." + ) + parser.add_argument("-b", "--batch-size", default=10, type=int, help="Batch size.") + parser.add_argument( + "-M", + "--latent-seq-length", + default=None, + type=int, + help="Latent sequence length.", + ) + parser.add_argument( + "-idfac", + "--indel-factor", + default=False, + action="store_true", + help="Indel parameters depend on latent variable.", + ) + parser.add_argument( + "-zdist", + "--z-prior", + default="Normal", + help="Latent prior distribution (normal or Laplace).", + ) + parser.add_argument( + "-ard", + "--ARD-prior", + default=False, + action="store_true", + help="Use automatic relevance detection prior.", + ) + parser.add_argument( + "--no-substitution-matrix", + default=False, + action="store_true", + help="Do not use substitution matrix.", + ) + parser.add_argument( + "-D", + "--latent-alphabet", + default=None, + type=int, + help="Latent alphabet length.", + ) + parser.add_argument( + "--include-stop", + default=False, + action="store_true", + help="Include stop symbol at the end of each sequence.", + ) + parser.add_argument( + "--indel-prior-scale", + default=1.0, + type=float, + help=("Indel prior scale parameter " + "(when indel-factor=False)."), + ) + parser.add_argument( + "--indel-prior-bias", + default=10.0, + type=float, + help="Indel prior bias parameter.", + ) + parser.add_argument( + "--inverse-temp-prior", + default=100.0, + type=float, + help="Inverse temperature prior mean.", + ) + parser.add_argument( + "--weights-prior-scale", + default=1.0, + type=float, + help="Factor parameter prior scale.", + ) + parser.add_argument( + "--offset-prior-scale", + default=1.0, + type=float, + help="Offset parameter prior scale.", + ) + parser.add_argument( + "--substitution-prior-scale", + default=10.0, + type=float, + help="Substitution matrix prior scale.", + ) + parser.add_argument( + "-lr", + "--learning-rate", + default=0.001, + type=float, + help="Learning rate for Adam optimizer.", + ) + parser.add_argument( + "--milestones", + default="[]", + type=str, + help="Milestones for multistage learning rate.", + ) + parser.add_argument( + "--learning-gamma", + default=0.5, + type=float, + help="Gamma parameter for multistage learning rate.", + ) + parser.add_argument( + "-e", "--n-epochs", default=10, type=int, help="Number of epochs of training." + ) + parser.add_argument( + "--anneal", + default=0.0, + type=float, + help="Number of epochs to anneal beta over.", + ) + parser.add_argument( + "--no-plots", default=False, action="store_true", help="Make plots." + ) + parser.add_argument( + "--no-save", + default=False, + action="store_true", + help="Do not save plots and results.", + ) + parser.add_argument( + "-outf", "--out-folder", default=".", help="Folder to save plots." + ) + parser.add_argument( + "--split", + default=0.2, + type=float, + help=("Fraction of dataset to holdout for testing"), + ) + parser.add_argument( + "--jit", default=False, action="store_true", help="JIT compile the ELBO." + ) + parser.add_argument("--cuda", default=False, action="store_true", help="Use GPU.") + parser.add_argument( + "--cpu-data", + default=False, + action="store_true", + help="Keep data on CPU (for large datasets).", + ) + parser.add_argument( + "--pin-mem", + default=False, + action="store_true", + help="Use pin_memory for faster CPU to GPU transfer.", + ) + args = parser.parse_args() + + torch.set_default_dtype(torch.float64) + if args.cuda: + torch.set_default_device("cuda") + + main(args) diff --git a/pyro/source/examples/contrib/mue/ProfileHMM.py b/pyro/source/examples/contrib/mue/ProfileHMM.py new file mode 100644 index 0000000000000000000000000000000000000000..e1a493547a1bd20ec7fc6fb576a0a56f30a916db --- /dev/null +++ b/pyro/source/examples/contrib/mue/ProfileHMM.py @@ -0,0 +1,321 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +""" +A standard profile HMM model [1], which corresponds to a constant (delta +function) distribution with a MuE observation [2]. This is a standard +generative model of variable-length biological sequences (e.g. proteins) which +does not require preprocessing the data by building a multiple sequence +alignment. It can be compared to a more complex MuE model in this package, +the FactorMuE. + +An example dataset consisting of proteins similar to the human papillomavirus E6 +protein, collected from a non-redundant sequence dataset using jackhmmer, can +be found at +https://github.com/debbiemarkslab/MuE/blob/master/models/examples/ve6_full.fasta + +Example run: +python ProfileHMM.py -f PATH/ve6_full.fasta -b 10 -M 174 --indel-prior-bias 10. + -e 15 -lr 0.01 --jit --cuda +This should take about 9 minutes to run on a GPU. The perplexity should be +around 6. + +References: +[1] R. Durbin, S. R. Eddy, A. Krogh, and G. Mitchison (1998) +"Biological sequence analysis: probabilistic models of proteins and nucleic +acids" +Cambridge university press + +[2] E. N. Weinstein, D. S. Marks (2021) +"A structured observation distribution for generative biological sequence +prediction and forecasting" +https://www.biorxiv.org/content/10.1101/2020.07.31.231381v2.full.pdf +""" + +import argparse +import datetime +import json +import os + +import matplotlib.pyplot as plt +import numpy as np +import torch +from torch.optim import Adam + +import pyro +from pyro.contrib.mue.dataloaders import BiosequenceDataset +from pyro.contrib.mue.models import ProfileHMM +from pyro.optim import MultiStepLR + + +def generate_data(small_test, include_stop, device): + """Generate mini example dataset.""" + if small_test: + mult_dat = 1 + else: + mult_dat = 10 + + seqs = ["BABBA"] * mult_dat + ["BAAB"] * mult_dat + ["BABBB"] * mult_dat + dataset = BiosequenceDataset( + seqs, "list", "AB", include_stop=include_stop, device=device + ) + + return dataset + + +def main(args): + pyro.set_rng_seed(args.rng_seed) + + # Load dataset. + if args.cpu_data or not args.cuda: + device = torch.device("cpu") + else: + device = torch.device("cuda") + if args.test: + dataset = generate_data(args.small, args.include_stop, device) + else: + dataset = BiosequenceDataset( + args.file, + "fasta", + args.alphabet, + include_stop=args.include_stop, + device=device, + ) + args.batch_size = min([dataset.data_size, args.batch_size]) + if args.split > 0.0: + # Train test split. + heldout_num = int(np.ceil(args.split * len(dataset))) + data_lengths = [len(dataset) - heldout_num, heldout_num] + # Specific data split seed, for comparability across models and + # parameter initializations. + pyro.set_rng_seed(args.rng_data_seed) + indices = torch.randperm(sum(data_lengths), device=device).tolist() + dataset_train, dataset_test = [ + torch.utils.data.Subset(dataset, indices[(offset - length) : offset]) + for offset, length in zip(np.cumsum(data_lengths), data_lengths) + ] + else: + dataset_train = dataset + dataset_test = None + + # Construct model. + latent_seq_length = args.latent_seq_length + if latent_seq_length is None: + latent_seq_length = int(dataset.max_length * 1.1) + model = ProfileHMM( + latent_seq_length, + dataset.alphabet_length, + prior_scale=args.prior_scale, + indel_prior_bias=args.indel_prior_bias, + cuda=args.cuda, + pin_memory=args.pin_mem, + ) + + # Infer with SVI. + scheduler = MultiStepLR( + { + "optimizer": Adam, + "optim_args": {"lr": args.learning_rate}, + "milestones": json.loads(args.milestones), + "gamma": args.learning_gamma, + } + ) + n_epochs = args.n_epochs + losses = model.fit_svi(dataset, n_epochs, args.batch_size, scheduler, args.jit) + + # Evaluate. + train_lp, test_lp, train_perplex, test_perplex = model.evaluate( + dataset_train, dataset_test, args.jit + ) + print("train logp: {} perplex: {}".format(train_lp, train_perplex)) + print("test logp: {} perplex: {}".format(test_lp, test_perplex)) + + # Plots. + time_stamp = datetime.datetime.now().strftime("%Y%m%d-%H%M%S") + if not args.no_plots: + plt.figure(figsize=(6, 6)) + plt.plot(losses) + plt.xlabel("step") + plt.ylabel("loss") + if not args.no_save: + plt.savefig( + os.path.join( + args.out_folder, "ProfileHMM_plot.loss_{}.pdf".format(time_stamp) + ) + ) + + plt.figure(figsize=(6, 6)) + insert = pyro.param("insert_q_mn").detach() + insert_expect = torch.exp(insert - insert.logsumexp(-1, True)) + plt.plot(insert_expect[:, :, 1].cpu().numpy()) + plt.xlabel("position") + plt.ylabel("probability of insert") + plt.legend([r"$r_0$", r"$r_1$", r"$r_2$"]) + if not args.no_save: + plt.savefig( + os.path.join( + args.out_folder, + "ProfileHMM_plot.insert_prob_{}.pdf".format(time_stamp), + ) + ) + plt.figure(figsize=(6, 6)) + delete = pyro.param("delete_q_mn").detach() + delete_expect = torch.exp(delete - delete.logsumexp(-1, True)) + plt.plot(delete_expect[:, :, 1].cpu().numpy()) + plt.xlabel("position") + plt.ylabel("probability of delete") + plt.legend([r"$u_0$", r"$u_1$", r"$u_2$"]) + if not args.no_save: + plt.savefig( + os.path.join( + args.out_folder, + "ProfileHMM_plot.delete_prob_{}.pdf".format(time_stamp), + ) + ) + + if not args.no_save: + pyro.get_param_store().save( + os.path.join( + args.out_folder, "ProfileHMM_results.params_{}.out".format(time_stamp) + ) + ) + with open( + os.path.join( + args.out_folder, + "ProfileHMM_results.evaluation_{}.txt".format(time_stamp), + ), + "w", + ) as ow: + ow.write("train_lp,test_lp,train_perplex,test_perplex\n") + ow.write( + "{},{},{},{}\n".format(train_lp, test_lp, train_perplex, test_perplex) + ) + with open( + os.path.join( + args.out_folder, "ProfileHMM_results.input_{}.txt".format(time_stamp) + ), + "w", + ) as ow: + ow.write("[args]\n") + args.latent_seq_length = model.latent_seq_length + for elem in list(args.__dict__.keys()): + ow.write("{} = {}\n".format(elem, args.__getattribute__(elem))) + ow.write("alphabet_str = {}\n".format("".join(dataset.alphabet))) + ow.write("max_length = {}\n".format(dataset.max_length)) + + +if __name__ == "__main__": + # Parse command line arguments. + parser = argparse.ArgumentParser(description="Profile HMM model.") + parser.add_argument( + "--test", + action="store_true", + default=False, + help="Run with generated example dataset.", + ) + parser.add_argument( + "--small", + action="store_true", + default=False, + help="Run with small example dataset.", + ) + parser.add_argument("-r", "--rng-seed", default=0, type=int) + parser.add_argument("--rng-data-seed", default=0, type=int) + parser.add_argument( + "-f", "--file", default=None, type=str, help="Input file (fasta format)." + ) + parser.add_argument( + "-a", + "--alphabet", + default="amino-acid", + help="Alphabet (amino-acid OR dna OR ATGC ...).", + ) + parser.add_argument("-b", "--batch-size", default=10, type=int, help="Batch size.") + parser.add_argument( + "-M", + "--latent-seq-length", + default=None, + type=int, + help="Latent sequence length.", + ) + parser.add_argument( + "--include-stop", + default=False, + action="store_true", + help="Include stop symbol at the end of each sequence.", + ) + parser.add_argument( + "--prior-scale", + default=1.0, + type=float, + help="Prior scale parameter (all parameters).", + ) + parser.add_argument( + "--indel-prior-bias", + default=10.0, + type=float, + help="Indel prior bias parameter.", + ) + parser.add_argument( + "-lr", + "--learning-rate", + default=0.001, + type=float, + help="Learning rate for Adam optimizer.", + ) + parser.add_argument( + "--milestones", + default="[]", + type=str, + help="Milestones for multistage learning rate.", + ) + parser.add_argument( + "--learning-gamma", + default=0.5, + type=float, + help="Gamma parameter for multistage learning rate.", + ) + parser.add_argument( + "-e", "--n-epochs", default=10, type=int, help="Number of epochs of training." + ) + parser.add_argument( + "--no-plots", default=False, action="store_true", help="Make plots." + ) + parser.add_argument( + "--no-save", + default=False, + action="store_true", + help="Do not save plots and results.", + ) + parser.add_argument( + "-outf", "--out-folder", default=".", help="Folder to save plots." + ) + parser.add_argument( + "--split", + default=0.2, + type=float, + help=("Fraction of dataset to holdout for testing"), + ) + parser.add_argument( + "--jit", default=False, action="store_true", help="JIT compile the ELBO." + ) + parser.add_argument("--cuda", default=False, action="store_true", help="Use GPU.") + parser.add_argument( + "--cpu-data", + default=False, + action="store_true", + help="Keep data on CPU (for large datasets).", + ) + parser.add_argument( + "--pin-mem", + default=False, + action="store_true", + help="Use pin_memory for faster GPU transfer.", + ) + args = parser.parse_args() + + torch.set_default_dtype(torch.float64) + if args.cuda: + torch.set_default_device("cuda") + + main(args) diff --git a/pyro/source/examples/contrib/oed/ab_test.py b/pyro/source/examples/contrib/oed/ab_test.py new file mode 100644 index 0000000000000000000000000000000000000000..a64082c140a56e05b8505eb8e6cb253055d4fabd --- /dev/null +++ b/pyro/source/examples/contrib/oed/ab_test.py @@ -0,0 +1,135 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import argparse +from functools import partial + +import numpy as np +import torch +from gp_bayes_opt import GPBayesOptimizer +from torch.distributions import constraints + +import pyro +import pyro.contrib.gp as gp +from pyro import optim +from pyro.contrib.oed.eig import vi_eig +from pyro.contrib.oed.glmm import ( + analytic_posterior_cov, + group_assignment_matrix, + zero_mean_unit_obs_sd_lm, +) +from pyro.infer import TraceEnum_ELBO + +""" +Example builds on the Bayesian regression tutorial [1]. It demonstrates how +to estimate the average posterior entropy (APE) under a model and use it to +make an optimal decision about experiment design. + +The context is a Gaussian linear model in which the design matrix `X` is a +one-hot-encoded matrix with 2 columns. This corresponds to the simplest form +of an A/B test. Assume no data has yet be collected. The aim is to find the optimal +allocation of participants to the two groups to maximise the expected gain in +information from actually performing the experiment. + +For details of the implementation of average posterior entropy estimation, see +the docs for :func:`pyro.contrib.oed.eig.vi_eig`. + +We recommend the technical report from Long Ouyang et al [2] as an introduction +to optimal experiment design within probabilistic programs. + +To optimize the APE (which is required to be minimized) we used Gaussian Process +based Bayesian Optimization. See the BO tutorial [3] for details of optimizing noisy +and expensive-to-compute functions in pyro. + +[1] ["Bayesian Regression"](http://pyro.ai/examples/bayesian_regression.html) +[2] Long Ouyang, Michael Henry Tessler, Daniel Ly, Noah Goodman (2016), + "Practical optimal experiment design with probabilistic programs", + (https://arxiv.org/abs/1608.05046) +[3] ["Bayesian Optimization"](http://pyro.ai/examples/bo.html) +""" + +# Set up regression model dimensions +N = 100 # number of participants +p = 2 # number of features +prior_sds = torch.tensor([10.0, 2.5]) + +# Model and guide using known obs_sd +model, guide = zero_mean_unit_obs_sd_lm(prior_sds) + + +def estimated_ape(ns, num_vi_steps): + designs = [group_assignment_matrix(torch.tensor([n1, N - n1])) for n1 in ns] + X = torch.stack(designs) + est_ape = vi_eig( + model, + X, + observation_labels="y", + target_labels="w", + vi_parameters={ + "guide": guide, + "optim": optim.Adam({"lr": 0.05}), + "loss": TraceEnum_ELBO( + strict_enumeration_warning=False + ).differentiable_loss, + "num_steps": num_vi_steps, + }, + is_parameters={"num_samples": 1}, + eig=False, + ) + return est_ape + + +def true_ape(ns): + """Analytic APE""" + true_ape = [] + prior_cov = torch.diag(prior_sds**2) + designs = [group_assignment_matrix(torch.tensor([n1, N - n1])) for n1 in ns] + for i in range(len(ns)): + x = designs[i] + posterior_cov = analytic_posterior_cov(prior_cov, x, torch.tensor(1.0)) + true_ape.append(0.5 * torch.logdet(2 * np.pi * np.e * posterior_cov)) + return torch.tensor(true_ape) + + +def main(num_vi_steps, num_bo_steps, seed): + pyro.set_rng_seed(seed) + pyro.clear_param_store() + + est_ape = partial(estimated_ape, num_vi_steps=num_vi_steps) + est_ape.__doc__ = "Estimated APE by VI" + + estimators = [true_ape, est_ape] + noises = [0.0001, 0.25] + num_acqs = [2, 10] + + for f, noise, num_acquisitions in zip(estimators, noises, num_acqs): + X = torch.tensor([25.0, 75.0]) + y = f(X) + gpmodel = gp.models.GPRegression( + X, + y, + gp.kernels.Matern52(input_dim=1, lengthscale=torch.tensor(10.0)), + noise=torch.tensor(noise), + jitter=1e-6, + ) + gpbo = GPBayesOptimizer( + constraints.interval(0, 100), gpmodel, num_acquisitions=num_acquisitions + ) + pyro.clear_param_store() + for i in range(num_bo_steps): + result = gpbo.get_step(f, None, verbose=True) + + print(f.__doc__) + print(result) + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser(description="A/B test experiment design using VI") + parser.add_argument("-n", "--num-vi-steps", nargs="?", default=5000, type=int) + parser.add_argument("--num-bo-steps", nargs="?", default=5, type=int) + parser.add_argument( + "--seed", type=int, default=1, metavar="S", help="random seed (default: 1)" + ) + args = parser.parse_args() + main(args.num_vi_steps, args.num_bo_steps, args.seed) diff --git a/pyro/source/examples/contrib/oed/gp_bayes_opt.py b/pyro/source/examples/contrib/oed/gp_bayes_opt.py new file mode 100644 index 0000000000000000000000000000000000000000..6d797d3ecf620ae4e73660bcdeda2a1e888a1d99 --- /dev/null +++ b/pyro/source/examples/contrib/oed/gp_bayes_opt.py @@ -0,0 +1,141 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +import torch.autograd as autograd +import torch.optim as optim +from torch.distributions import transform_to + +import pyro.contrib.gp as gp +import pyro.optim +from pyro.infer import TraceEnum_ELBO + + +class GPBayesOptimizer(pyro.optim.multi.MultiOptimizer): + """Performs Bayesian Optimization using a Gaussian Process as an + emulator for the unknown function. + """ + + def __init__(self, constraints, gpmodel, num_acquisitions, acquisition_func=None): + """ + :param torch.constraint constraints: constraints defining the domain of `f` + :param gp.models.GPRegression gpmodel: a (possibly initialized) GP + regression model. The kernel, etc is specified via `gpmodel`. + :param int num_acquisitions: number of points to acquire at each step + :param function acquisition_func: a function to generate acquisitions. + It should return a torch.Tensor of new points to query. + """ + if acquisition_func is None: + acquisition_func = self.acquire_thompson + + self.constraints = constraints + self.gpmodel = gpmodel + self.num_acquisitions = num_acquisitions + self.acquisition_func = acquisition_func + + def update_posterior(self, X, y): + X = torch.cat([self.gpmodel.X, X]) + y = torch.cat([self.gpmodel.y, y]) + self.gpmodel.set_data(X, y) + optimizer = torch.optim.Adam(self.gpmodel.parameters(), lr=0.001) + gp.util.train( + self.gpmodel, + optimizer, + loss_fn=TraceEnum_ELBO( + strict_enumeration_warning=False + ).differentiable_loss, + retain_graph=True, + ) + + def find_a_candidate(self, differentiable, x_init): + """Given a starting point, `x_init`, takes one LBFGS step + to optimize the differentiable function. + + :param function differentiable: a function amenable to torch + autograd + :param torch.Tensor x_init: the initial point + + """ + # transform x to an unconstrained domain + unconstrained_x_init = transform_to(self.constraints).inv(x_init) + unconstrained_x = unconstrained_x_init.detach().clone().requires_grad_(True) + # TODO: Use LBFGS with line search by pytorch #8824 merged + minimizer = optim.LBFGS([unconstrained_x], max_eval=20) + + def closure(): + minimizer.zero_grad() + if (torch.log(torch.abs(unconstrained_x)) > 25.0).any(): + return torch.tensor(float("inf")) + x = transform_to(self.constraints)(unconstrained_x) + y = differentiable(x) + autograd.backward( + unconstrained_x, autograd.grad(y, unconstrained_x, retain_graph=True) + ) + return y + + minimizer.step(closure) + # after finding a candidate in the unconstrained domain, + # convert it back to original domain. + x = transform_to(self.constraints)(unconstrained_x) + opt_y = differentiable(x) + return x.detach(), opt_y.detach() + + def opt_differentiable(self, differentiable, num_candidates=5): + """Optimizes a differentiable function by choosing `num_candidates` + initial points at random and calling :func:`find_a_candidate` on + each. The best candidate is returned with its function value. + + :param function differentiable: a function amenable to torch autograd + :param int num_candidates: the number of random starting points to + use + :return: the minimiser and its function value + :rtype: tuple + """ + + candidates = [] + values = [] + for j in range(num_candidates): + x_init = torch.empty( + 1, dtype=self.gpmodel.X.dtype, device=self.gpmodel.X.device + ).uniform_(self.constraints.lower_bound, self.constraints.upper_bound) + x, y = self.find_a_candidate(differentiable, x_init) + if torch.isnan(y): + continue + candidates.append(x) + values.append(y) + + mvalue, argmin = torch.min(torch.cat(values), dim=0) + return candidates[argmin.item()], mvalue + + def acquire_thompson(self, num_acquisitions=1, **opt_params): + """Selects `num_acquisitions` query points at which to query the + original function by Thompson sampling. + + :param int num_acquisitions: the number of points to generate + :param dict opt_params: additional parameters for optimization + routines + :return: a tensor of points to evaluate `loss` at + :rtype: torch.Tensor + """ + + # Initialize the return tensor + X = self.gpmodel.X + X = torch.empty(num_acquisitions, *X.shape[1:], dtype=X.dtype, device=X.device) + + for i in range(num_acquisitions): + sampler = self.gpmodel.iter_sample(noiseless=False) + x, _ = self.opt_differentiable(sampler, **opt_params) + X[i, ...] = x + + return X + + def get_step(self, loss, params, verbose=False): + X = self.acquisition_func(num_acquisitions=self.num_acquisitions) + y = loss(X) + if verbose: + print("Acquire at: X") + print(X) + print("y") + print(y) + self.update_posterior(X, y) + return self.opt_differentiable(lambda x: self.gpmodel(x)[0]) diff --git a/pyro/source/examples/contrib/timeseries/gp_models.py b/pyro/source/examples/contrib/timeseries/gp_models.py new file mode 100644 index 0000000000000000000000000000000000000000..9abbab2559ca888d72e35b59149cd714799e55e5 --- /dev/null +++ b/pyro/source/examples/contrib/timeseries/gp_models.py @@ -0,0 +1,203 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import argparse +from os.path import exists +from urllib.request import urlopen + +import numpy as np +import torch + +import pyro +from pyro.contrib.timeseries import IndependentMaternGP, LinearlyCoupledMaternGP + + +# download dataset from UCI archive +def download_data(): + if not exists("eeg.dat"): + url = "http://archive.ics.uci.edu/ml/machine-learning-databases/00264/EEG%20Eye%20State.arff" + with open("eeg.dat", "wb") as f: + f.write(urlopen(url).read()) + + +def main(args): + # download and pre-process EEG data if not in test mode + if not args.test: + download_data() + T_forecast = 349 + data = np.loadtxt("eeg.dat", delimiter=",", skiprows=19) + print("[raw data shape] {}".format(data.shape)) + data = torch.tensor(data[::20, :-1]).double() + print("[data shape after thinning] {}".format(data.shape)) + # in test mode (for continuous integration on github) so create fake data + else: + data = torch.randn(20, 3).double() + T_forecast = 10 + + T, obs_dim = data.shape + T_train = T - T_forecast + + # standardize data + data_mean = data[0:T_train, :].mean(0) + data -= data_mean + data_std = data[0:T_train, :].std(0) + data /= data_std + + torch.manual_seed(args.seed) + + # set up model + if args.model == "imgp": + gp = IndependentMaternGP( + nu=1.5, obs_dim=obs_dim, length_scale_init=1.5 * torch.ones(obs_dim) + ).double() + elif args.model == "lcmgp": + num_gps = 9 + gp = LinearlyCoupledMaternGP( + nu=1.5, + obs_dim=obs_dim, + num_gps=num_gps, + length_scale_init=1.5 * torch.ones(num_gps), + ).double() + + # set up optimizer + adam = torch.optim.Adam( + gp.parameters(), + lr=args.init_learning_rate, + betas=(args.beta1, 0.999), + amsgrad=True, + ) + # we decay the learning rate over the course of training + gamma = (args.final_learning_rate / args.init_learning_rate) ** ( + 1.0 / args.num_steps + ) + scheduler = torch.optim.lr_scheduler.ExponentialLR(adam, gamma=gamma) + + report_frequency = 10 + + # training loop + for step in range(args.num_steps): + loss = -gp.log_prob(data[0:T_train, :]).sum() / T_train + loss.backward() + adam.step() + scheduler.step() + + if step % report_frequency == 0 or step == args.num_steps - 1: + print("[step %03d] loss: %.3f" % (step, loss.item())) + + # plot predictions for three output dimensions + if args.plot: + assert not args.test + + T_multistep = 49 + T_onestep = T_forecast - T_multistep + + # do rolling prediction + print("doing one-step-ahead forecasting...") + onestep_means, onestep_stds = np.zeros((T_onestep, obs_dim)), np.zeros( + (T_onestep, obs_dim) + ) + for t in range(T_onestep): + # predict one step into the future, conditioning on all previous data. + # note that each call to forecast() conditions on more data than the previous call + dts = torch.tensor([1.0]).double() + pred_dist = gp.forecast(data[0 : T_train + t, :], dts) + onestep_means[t, :] = pred_dist.loc.data.numpy() + if args.model == "imgp": + onestep_stds[t, :] = pred_dist.scale.data.numpy() + elif args.model == "lcmgp": + onestep_stds[t, :] = pred_dist.covariance_matrix.diagonal( + dim1=-1, dim2=-2 + ).data.numpy() + + # do (non-rolling) multi-step forecasting + print("doing multi-step forecasting...") + dts = (1 + torch.arange(T_multistep)).double() + pred_dist = gp.forecast(data[0 : T_train + T_onestep, :], dts) + multistep_means = pred_dist.loc.data.numpy() + if args.model == "imgp": + multistep_stds = pred_dist.scale.data.numpy() + elif args.model == "lcmgp": + multistep_stds = pred_dist.covariance_matrix.diagonal( + dim1=-1, dim2=-2 + ).data.numpy() + + import matplotlib + + matplotlib.use("Agg") # noqa: E402 + import matplotlib.pyplot as plt + + f, axes = plt.subplots(3, 1, figsize=(12, 8), sharex=True) + T = data.size(0) + to_seconds = 117.0 / T + + for k, ax in enumerate(axes): + which = [0, 4, 10][k] + + # plot raw data + ax.plot( + to_seconds * np.arange(T), + data[:, which], + "ko", + markersize=2, + label="Data", + ) + + # plot mean predictions for one-step-ahead forecasts + ax.plot( + to_seconds * (T_train + np.arange(T_onestep)), + onestep_means[:, which], + ls="solid", + color="b", + label="One-step", + ) + # plot 90% confidence intervals for one-step-ahead forecasts + ax.fill_between( + to_seconds * (T_train + np.arange(T_onestep)), + onestep_means[:, which] - 1.645 * onestep_stds[:, which], + onestep_means[:, which] + 1.645 * onestep_stds[:, which], + color="b", + alpha=0.20, + ) + + # plot mean predictions for multi-step-ahead forecasts + ax.plot( + to_seconds * (T_train + T_onestep + np.arange(T_multistep)), + multistep_means[:, which], + ls="solid", + color="r", + label="Multi-step", + ) + # plot 90% confidence intervals for multi-step-ahead forecasts + ax.fill_between( + to_seconds * (T_train + T_onestep + np.arange(T_multistep)), + multistep_means[:, which] - 1.645 * multistep_stds[:, which], + multistep_means[:, which] + 1.645 * multistep_stds[:, which], + color="r", + alpha=0.20, + ) + + ax.set_ylabel("$y_{%d}$" % (which + 1), fontsize=20) + ax.tick_params(axis="both", which="major", labelsize=14) + if k == 1: + ax.legend(loc="upper left", fontsize=16) + + plt.tight_layout(pad=0.7) + plt.savefig("eeg.{}.pdf".format(args.model)) + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser(description="contrib.timeseries example usage") + parser.add_argument("-n", "--num-steps", default=300, type=int) + parser.add_argument("-s", "--seed", default=0, type=int) + parser.add_argument( + "-m", "--model", default="imgp", type=str, choices=["imgp", "lcmgp"] + ) + parser.add_argument("-ilr", "--init-learning-rate", default=0.01, type=float) + parser.add_argument("-flr", "--final-learning-rate", default=0.0003, type=float) + parser.add_argument("-b1", "--beta1", default=0.50, type=float) + parser.add_argument("--test", action="store_true") + parser.add_argument("--plot", action="store_true") + args = parser.parse_args() + + main(args) diff --git a/pyro/source/examples/cvae/__init__.py b/pyro/source/examples/cvae/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/examples/cvae/baseline.py b/pyro/source/examples/cvae/baseline.py new file mode 100644 index 0000000000000000000000000000000000000000..f9016318064d5a3f03b77e346c86dd22c019265d --- /dev/null +++ b/pyro/source/examples/cvae/baseline.py @@ -0,0 +1,117 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import copy +from pathlib import Path + +import numpy as np +import torch +import torch.nn as nn +import torch.nn.functional as F +from tqdm import tqdm + + +class BaselineNet(nn.Module): + def __init__(self, hidden_1, hidden_2): + super().__init__() + self.fc1 = nn.Linear(784, hidden_1) + self.fc2 = nn.Linear(hidden_1, hidden_2) + self.fc3 = nn.Linear(hidden_2, 784) + self.relu = nn.ReLU() + + def forward(self, x): + x = x.view(-1, 784) + hidden = self.relu(self.fc1(x)) + hidden = self.relu(self.fc2(hidden)) + y = torch.sigmoid(self.fc3(hidden)) + return y + + +class MaskedBCELoss(nn.Module): + def __init__(self, masked_with=-1): + super().__init__() + self.masked_with = masked_with + + def forward(self, input, target): + target = target.view(input.shape) + # only calculate loss on target pixels (value = -1) + loss = F.binary_cross_entropy( + input[target != self.masked_with], + target[target != self.masked_with], + reduction="none", + ) + return loss.sum() + + +def train( + device, + dataloaders, + dataset_sizes, + learning_rate, + num_epochs, + early_stop_patience, + model_path, +): + # Train baseline + baseline_net = BaselineNet(500, 500) + baseline_net.to(device) + optimizer = torch.optim.Adam(baseline_net.parameters(), lr=learning_rate) + criterion = MaskedBCELoss() + best_loss = np.inf + early_stop_count = 0 + + for epoch in range(num_epochs): + for phase in ["train", "val"]: + if phase == "train": + baseline_net.train() + else: + baseline_net.eval() + + running_loss = 0.0 + num_preds = 0 + + bar = tqdm( + dataloaders[phase], desc="NN Epoch {} {}".format(epoch, phase).ljust(20) + ) + for i, batch in enumerate(bar): + inputs = batch["input"].to(device) + outputs = batch["output"].to(device) + + optimizer.zero_grad() + + with torch.set_grad_enabled(phase == "train"): + preds = baseline_net(inputs) + loss = criterion(preds, outputs) / inputs.size(0) + if phase == "train": + loss.backward() + optimizer.step() + + running_loss += loss.item() + num_preds += 1 + if i % 10 == 0: + bar.set_postfix( + loss="{:.2f}".format(running_loss / num_preds), + early_stop_count=early_stop_count, + ) + + epoch_loss = running_loss / dataset_sizes[phase] + # deep copy the model + if phase == "val": + if epoch_loss < best_loss: + best_loss = epoch_loss + best_model_wts = copy.deepcopy(baseline_net.state_dict()) + early_stop_count = 0 + else: + early_stop_count += 1 + + if early_stop_count >= early_stop_patience: + break + + baseline_net.load_state_dict(best_model_wts) + baseline_net.eval() + + # Save model weights + Path(model_path).parent.mkdir(parents=True, exist_ok=True) + torch.save(baseline_net.state_dict(), model_path) + + return baseline_net diff --git a/pyro/source/examples/cvae/cvae.py b/pyro/source/examples/cvae/cvae.py new file mode 100644 index 0000000000000000000000000000000000000000..80af6ca0f4e43227c55593675473b80898758107 --- /dev/null +++ b/pyro/source/examples/cvae/cvae.py @@ -0,0 +1,189 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from pathlib import Path + +import numpy as np +import torch +import torch.nn as nn +from tqdm import tqdm + +import pyro +import pyro.distributions as dist +from pyro.infer import SVI, Trace_ELBO + + +class Encoder(nn.Module): + def __init__(self, z_dim, hidden_1, hidden_2): + super().__init__() + self.fc1 = nn.Linear(784, hidden_1) + self.fc2 = nn.Linear(hidden_1, hidden_2) + self.fc31 = nn.Linear(hidden_2, z_dim) + self.fc32 = nn.Linear(hidden_2, z_dim) + self.relu = nn.ReLU() + + def forward(self, x, y): + # put x and y together in the same image for simplification + xc = x.clone() + xc[x == -1] = y[x == -1] + xc = xc.view(-1, 784) + # then compute the hidden units + hidden = self.relu(self.fc1(xc)) + hidden = self.relu(self.fc2(hidden)) + # then return a mean vector and a (positive) square root covariance + # each of size batch_size x z_dim + z_loc = self.fc31(hidden) + z_scale = torch.exp(self.fc32(hidden)) + return z_loc, z_scale + + +class Decoder(nn.Module): + def __init__(self, z_dim, hidden_1, hidden_2): + super().__init__() + self.fc1 = nn.Linear(z_dim, hidden_1) + self.fc2 = nn.Linear(hidden_1, hidden_2) + self.fc3 = nn.Linear(hidden_2, 784) + self.relu = nn.ReLU() + + def forward(self, z): + y = self.relu(self.fc1(z)) + y = self.relu(self.fc2(y)) + y = torch.sigmoid(self.fc3(y)) + return y + + +class CVAE(nn.Module): + def __init__(self, z_dim, hidden_1, hidden_2, pre_trained_baseline_net): + super().__init__() + # The CVAE is composed of multiple MLPs, such as recognition network + # qφ(z|x, y), (conditional) prior network pθ(z|x), and generation + # network pθ(y|x, z). Also, CVAE is built on top of the NN: not only + # the direct input x, but also the initial guess y_hat made by the NN + # are fed into the prior network. + self.baseline_net = pre_trained_baseline_net + self.prior_net = Encoder(z_dim, hidden_1, hidden_2) + self.generation_net = Decoder(z_dim, hidden_1, hidden_2) + self.recognition_net = Encoder(z_dim, hidden_1, hidden_2) + + def model(self, xs, ys=None): + # register this pytorch module and all of its sub-modules with pyro + pyro.module("generation_net", self) + batch_size = xs.shape[0] + with pyro.plate("data"): + # Prior network uses the baseline predictions as initial guess. + # This is the generative process with recurrent connection + with torch.no_grad(): + # this ensures the training process does not change the + # baseline network + y_hat = self.baseline_net(xs).view(xs.shape) + + # sample the handwriting style from the prior distribution, which is + # modulated by the input xs. + prior_loc, prior_scale = self.prior_net(xs, y_hat) + zs = pyro.sample("z", dist.Normal(prior_loc, prior_scale).to_event(1)) + + # the output y is generated from the distribution pθ(y|x, z) + loc = self.generation_net(zs) + + if ys is not None: + # In training, we will only sample in the masked image + mask_loc = loc[(xs == -1).view(-1, 784)].view(batch_size, -1) + mask_ys = ys[xs == -1].view(batch_size, -1) + pyro.sample( + "y", + dist.Bernoulli(mask_loc, validate_args=False).to_event(1), + obs=mask_ys, + ) + else: + # In testing, no need to sample: the output is already a + # probability in [0, 1] range, which better represent pixel + # values considering grayscale. If we sample, we will force + # each pixel to be either 0 or 1, killing the grayscale + pyro.deterministic("y", loc.detach()) + + # return the loc so we can visualize it later + return loc + + def guide(self, xs, ys=None): + with pyro.plate("data"): + if ys is None: + # at inference time, ys is not provided. In that case, + # the model uses the prior network + y_hat = self.baseline_net(xs).view(xs.shape) + loc, scale = self.prior_net(xs, y_hat) + else: + # at training time, uses the variational distribution + # q(z|x,y) = normal(loc(x,y),scale(x,y)) + loc, scale = self.recognition_net(xs, ys) + + pyro.sample("z", dist.Normal(loc, scale).to_event(1)) + + +def train( + device, + dataloaders, + dataset_sizes, + learning_rate, + num_epochs, + early_stop_patience, + model_path, + pre_trained_baseline_net, +): + # clear param store + pyro.clear_param_store() + + cvae_net = CVAE(200, 500, 500, pre_trained_baseline_net) + cvae_net.to(device) + optimizer = pyro.optim.Adam({"lr": learning_rate}) + svi = SVI(cvae_net.model, cvae_net.guide, optimizer, loss=Trace_ELBO()) + + best_loss = np.inf + early_stop_count = 0 + Path(model_path).parent.mkdir(parents=True, exist_ok=True) + + for epoch in range(num_epochs): + # Each epoch has a training and validation phase + for phase in ["train", "val"]: + running_loss = 0.0 + num_preds = 0 + + # Iterate over data. + bar = tqdm( + dataloaders[phase], + desc="CVAE Epoch {} {}".format(epoch, phase).ljust(20), + ) + for i, batch in enumerate(bar): + inputs = batch["input"].to(device) + outputs = batch["output"].to(device) + + if phase == "train": + loss = svi.step(inputs, outputs) + else: + loss = svi.evaluate_loss(inputs, outputs) + + # statistics + running_loss += loss / inputs.size(0) + num_preds += 1 + if i % 10 == 0: + bar.set_postfix( + loss="{:.2f}".format(running_loss / num_preds), + early_stop_count=early_stop_count, + ) + + epoch_loss = running_loss / dataset_sizes[phase] + # deep copy the model + if phase == "val": + if epoch_loss < best_loss: + best_loss = epoch_loss + torch.save(cvae_net.state_dict(), model_path) + early_stop_count = 0 + else: + early_stop_count += 1 + + if early_stop_count >= early_stop_patience: + break + + # Save model weights + cvae_net.load_state_dict(torch.load(model_path, weights_only=False)) + cvae_net.eval() + return cvae_net diff --git a/pyro/source/examples/cvae/main.py b/pyro/source/examples/cvae/main.py new file mode 100644 index 0000000000000000000000000000000000000000..1c5b40029d53bb4a096185f39ac440a6876328fb --- /dev/null +++ b/pyro/source/examples/cvae/main.py @@ -0,0 +1,137 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import argparse + +import baseline +import cvae +import pandas as pd +import torch +from util import generate_table, get_data, visualize + +import pyro + + +def main(args): + device = torch.device( + "cuda:0" if torch.cuda.is_available() and args.cuda else "cpu" + ) + results = [] + columns = [] + + for num_quadrant_inputs in args.num_quadrant_inputs: + # adds an s in case of plural quadrants + maybes = "s" if num_quadrant_inputs > 1 else "" + + print( + "Training with {} quadrant{} as input...".format( + num_quadrant_inputs, maybes + ) + ) + + # Dataset + datasets, dataloaders, dataset_sizes = get_data( + num_quadrant_inputs=num_quadrant_inputs, batch_size=128 + ) + + # Train baseline + baseline_net = baseline.train( + device=device, + dataloaders=dataloaders, + dataset_sizes=dataset_sizes, + learning_rate=args.learning_rate, + num_epochs=args.num_epochs, + early_stop_patience=args.early_stop_patience, + model_path="baseline_net_q{}.pth".format(num_quadrant_inputs), + ) + + # Train CVAE + cvae_net = cvae.train( + device=device, + dataloaders=dataloaders, + dataset_sizes=dataset_sizes, + learning_rate=args.learning_rate, + num_epochs=args.num_epochs, + early_stop_patience=args.early_stop_patience, + model_path="cvae_net_q{}.pth".format(num_quadrant_inputs), + pre_trained_baseline_net=baseline_net, + ) + + # Visualize conditional predictions + visualize( + device=device, + num_quadrant_inputs=num_quadrant_inputs, + pre_trained_baseline=baseline_net, + pre_trained_cvae=cvae_net, + num_images=args.num_images, + num_samples=args.num_samples, + image_path="cvae_plot_q{}.png".format(num_quadrant_inputs), + ) + + # Retrieve conditional log likelihood + df = generate_table( + device=device, + num_quadrant_inputs=num_quadrant_inputs, + pre_trained_baseline=baseline_net, + pre_trained_cvae=cvae_net, + num_particles=args.num_particles, + col_name="{} quadrant{}".format(num_quadrant_inputs, maybes), + ) + results.append(df) + columns.append("{} quadrant{}".format(num_quadrant_inputs, maybes)) + + results = pd.concat(results, axis=1, ignore_index=True) + results.columns = columns + results.loc["Performance gap", :] = results.iloc[0, :] - results.iloc[1, :] + results.to_csv("results.csv") + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + # parse command line arguments + parser = argparse.ArgumentParser(description="parse args") + parser.add_argument( + "-nq", + "--num-quadrant-inputs", + metavar="N", + type=int, + nargs="+", + default=[1, 2, 3], + help="num of quadrants to use as inputs", + ) + parser.add_argument( + "-n", "--num-epochs", default=101, type=int, help="number of training epochs" + ) + parser.add_argument( + "-esp", "--early-stop-patience", default=3, type=int, help="early stop patience" + ) + parser.add_argument( + "-lr", "--learning-rate", default=1.0e-3, type=float, help="learning rate" + ) + parser.add_argument( + "--cuda", action="store_true", default=False, help="whether to use cuda" + ) + parser.add_argument( + "-vi", + "--num-images", + default=10, + type=int, + help="number of images to visualize", + ) + parser.add_argument( + "-vs", + "--num-samples", + default=10, + type=int, + help="number of samples to visualize per image", + ) + parser.add_argument( + "-p", + "--num-particles", + default=10, + type=int, + help="n of particles to estimate logpθ(y|x,z) in ELBO", + ) + args = parser.parse_args() + + main(args) diff --git a/pyro/source/examples/cvae/mnist.py b/pyro/source/examples/cvae/mnist.py new file mode 100644 index 0000000000000000000000000000000000000000..a64529278875177bd516533bef3c49a3824cdaf5 --- /dev/null +++ b/pyro/source/examples/cvae/mnist.py @@ -0,0 +1,94 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import numpy as np +import torch +from torch.utils.data import DataLoader, Dataset +from torchvision.transforms import Compose, functional + +from pyro.contrib.examples.util import MNIST + + +class CVAEMNIST(Dataset): + def __init__(self, root, train=True, transform=None, download=False): + self.original = MNIST(root, train=train, download=download) + self.transform = transform + + def __len__(self): + return len(self.original) + + def __getitem__(self, item): + image, digit = self.original[item] + sample = {"original": image, "digit": digit} + if self.transform: + sample = self.transform(sample) + + return sample + + +class ToTensor: + def __call__(self, sample): + sample["original"] = functional.to_tensor(sample["original"]) + sample["digit"] = torch.as_tensor( + np.asarray(sample["digit"]), dtype=torch.int64 + ) + return sample + + +class MaskImages: + """This torchvision image transformation prepares the MNIST digits to be + used in the tutorial. Depending on the number of quadrants to be used as + inputs (1, 2, or 3), the transformation masks the remaining (3, 2, 1) + quadrant(s) setting their pixels with -1. Additionally, the transformation + adds the target output in the sample dict as the complementary of the input + """ + + def __init__(self, num_quadrant_inputs, mask_with=-1): + if num_quadrant_inputs <= 0 or num_quadrant_inputs >= 4: + raise ValueError("Number of quadrants as inputs must be 1, 2 or 3") + self.num = num_quadrant_inputs + self.mask_with = mask_with + + def __call__(self, sample): + tensor = sample["original"].squeeze() + out = tensor.detach().clone() + h, w = tensor.shape + + # removes the bottom left quadrant from the target output + out[h // 2 :, : w // 2] = self.mask_with + # if num of quadrants to be used as input is 2, + # also removes the top left quadrant from the target output + if self.num == 2: + out[:, : w // 2] = self.mask_with + # if num of quadrants to be used as input is 3, + # also removes the top right quadrant from the target output + if self.num == 3: + out[: h // 2, :] = self.mask_with + + # now, sets the input as complementary + inp = tensor.clone() + inp[out != -1] = self.mask_with + + sample["input"] = inp + sample["output"] = out + return sample + + +def get_data(num_quadrant_inputs, batch_size): + transforms = Compose( + [ToTensor(), MaskImages(num_quadrant_inputs=num_quadrant_inputs)] + ) + datasets, dataloaders, dataset_sizes = {}, {}, {} + for mode in ["train", "val"]: + datasets[mode] = CVAEMNIST( + "../data", download=True, transform=transforms, train=mode == "train" + ) + dataloaders[mode] = DataLoader( + datasets[mode], + batch_size=batch_size, + shuffle=mode == "train", + num_workers=0, + ) + dataset_sizes[mode] = len(datasets[mode]) + + return datasets, dataloaders, dataset_sizes diff --git a/pyro/source/examples/cvae/util.py b/pyro/source/examples/cvae/util.py new file mode 100644 index 0000000000000000000000000000000000000000..2e86238f66f9a53bfcf39341d756965ab0152ddf --- /dev/null +++ b/pyro/source/examples/cvae/util.py @@ -0,0 +1,157 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from pathlib import Path + +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import torch +from baseline import MaskedBCELoss +from mnist import get_data +from torch.utils.data import DataLoader +from torchvision.utils import make_grid +from tqdm import tqdm + +from pyro.infer import Predictive, Trace_ELBO + + +def imshow(inp, image_path=None): + # plot images + inp = inp.cpu().numpy().transpose((1, 2, 0)) + space = np.ones((inp.shape[0], 50, inp.shape[2])) + inp = np.concatenate([space, inp], axis=1) + + ax = plt.axes(frameon=False, xticks=[], yticks=[]) + ax.text(0, 23, "Inputs:") + ax.text(0, 23 + 28 + 3, "Truth:") + ax.text(0, 23 + (28 + 3) * 2, "NN:") + ax.text(0, 23 + (28 + 3) * 3, "CVAE:") + ax.imshow(inp) + + if image_path is not None: + Path(image_path).parent.mkdir(parents=True, exist_ok=True) + plt.savefig(image_path, bbox_inches="tight", pad_inches=0.1) + else: + plt.show() + + plt.clf() + + +def visualize( + device, + num_quadrant_inputs, + pre_trained_baseline, + pre_trained_cvae, + num_images, + num_samples, + image_path=None, +): + # Load sample random data + datasets, _, dataset_sizes = get_data( + num_quadrant_inputs=num_quadrant_inputs, batch_size=num_images + ) + dataloader = DataLoader(datasets["val"], batch_size=num_images, shuffle=True) + + batch = next(iter(dataloader)) + inputs = batch["input"].to(device) + outputs = batch["output"].to(device) + originals = batch["original"].to(device) + + # Make predictions + with torch.no_grad(): + baseline_preds = pre_trained_baseline(inputs).view(outputs.shape) + + predictive = Predictive( + pre_trained_cvae.model, guide=pre_trained_cvae.guide, num_samples=num_samples + ) + cvae_preds = predictive(inputs)["y"].view(num_samples, num_images, 28, 28) + + # Predictions are only made in the pixels not masked. This completes + # the input quadrant with the prediction for the missing quadrants, for + # visualization purpose + baseline_preds[outputs == -1] = inputs[outputs == -1] + for i in range(cvae_preds.shape[0]): + cvae_preds[i][outputs == -1] = inputs[outputs == -1] + + # adjust tensor sizes + inputs = inputs.unsqueeze(1) + inputs[inputs == -1] = 1 + baseline_preds = baseline_preds.unsqueeze(1) + cvae_preds = cvae_preds.view(-1, 28, 28).unsqueeze(1) + + # make grids + inputs_tensor = make_grid(inputs, nrow=num_images, padding=0) + originals_tensor = make_grid(originals, nrow=num_images, padding=0) + separator_tensor = torch.ones((3, 5, originals_tensor.shape[-1])).to(device) + baseline_tensor = make_grid(baseline_preds, nrow=num_images, padding=0) + cvae_tensor = make_grid(cvae_preds, nrow=num_images, padding=0) + + # add vertical and horizontal lines + for tensor in [originals_tensor, baseline_tensor, cvae_tensor]: + for i in range(num_images - 1): + tensor[:, :, (i + 1) * 28] = 0.3 + + for i in range(num_samples - 1): + cvae_tensor[:, (i + 1) * 28, :] = 0.3 + + # concatenate all tensors + grid_tensor = torch.cat( + [ + inputs_tensor, + separator_tensor, + originals_tensor, + separator_tensor, + baseline_tensor, + separator_tensor, + cvae_tensor, + ], + dim=1, + ) + # plot tensors + imshow(grid_tensor, image_path=image_path) + + +def generate_table( + device, + num_quadrant_inputs, + pre_trained_baseline, + pre_trained_cvae, + num_particles, + col_name, +): + # Load sample random data + datasets, dataloaders, dataset_sizes = get_data( + num_quadrant_inputs=num_quadrant_inputs, batch_size=32 + ) + + # Load sample data + criterion = MaskedBCELoss() + loss_fn = Trace_ELBO(num_particles=num_particles).differentiable_loss + + baseline_cll = 0.0 + cvae_mc_cll = 0.0 + num_preds = 0 + + df = pd.DataFrame(index=["NN (baseline)", "CVAE (Monte Carlo)"], columns=[col_name]) + + # Iterate over data. + bar = tqdm(dataloaders["val"], desc="Generating predictions".ljust(20)) + for batch in bar: + inputs = batch["input"].to(device) + outputs = batch["output"].to(device) + num_preds += 1 + + # Compute negative log likelihood for the baseline NN + with torch.no_grad(): + preds = pre_trained_baseline(inputs) + baseline_cll += criterion(preds, outputs).item() / inputs.size(0) + + # Compute the negative conditional log likelihood for the CVAE + cvae_mc_cll += loss_fn( + pre_trained_cvae.model, pre_trained_cvae.guide, inputs, outputs + ).detach().item() / inputs.size(0) + + df.iloc[0, 0] = baseline_cll / num_preds + df.iloc[1, 0] = cvae_mc_cll / num_preds + return df diff --git a/pyro/source/examples/dmm.py b/pyro/source/examples/dmm.py new file mode 100644 index 0000000000000000000000000000000000000000..aff48dd9a80667c41b853281e5908807c6387f59 --- /dev/null +++ b/pyro/source/examples/dmm.py @@ -0,0 +1,601 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +An implementation of a Deep Markov Model in Pyro based on reference [1]. +This is essentially the DKS variant outlined in the paper. The primary difference +between this implementation and theirs is that in our version any KL divergence terms +in the ELBO are estimated via sampling, while they make use of the analytic formulae. +We also illustrate the use of normalizing flows in the variational distribution (in which +case analytic formulae for the KL divergences are in any case unavailable). + +Reference: + +[1] Structured Inference Networks for Nonlinear State Space Models [arXiv:1609.09869] + Rahul G. Krishnan, Uri Shalit, David Sontag +""" + +import argparse +import logging +import time +from os.path import exists + +import numpy as np +import torch +import torch.nn as nn + +import pyro +import pyro.contrib.examples.polyphonic_data_loader as poly +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.distributions import TransformedDistribution +from pyro.distributions.transforms import affine_autoregressive +from pyro.infer import ( + SVI, + JitTrace_ELBO, + Trace_ELBO, + TraceEnum_ELBO, + TraceTMC_ELBO, + config_enumerate, +) +from pyro.optim import ClippedAdam + + +class Emitter(nn.Module): + """ + Parameterizes the bernoulli observation likelihood `p(x_t | z_t)` + """ + + def __init__(self, input_dim, z_dim, emission_dim): + super().__init__() + # initialize the three linear transformations used in the neural network + self.lin_z_to_hidden = nn.Linear(z_dim, emission_dim) + self.lin_hidden_to_hidden = nn.Linear(emission_dim, emission_dim) + self.lin_hidden_to_input = nn.Linear(emission_dim, input_dim) + # initialize the two non-linearities used in the neural network + self.relu = nn.ReLU() + + def forward(self, z_t): + """ + Given the latent z at a particular time step t we return the vector of + probabilities `ps` that parameterizes the bernoulli distribution `p(x_t|z_t)` + """ + h1 = self.relu(self.lin_z_to_hidden(z_t)) + h2 = self.relu(self.lin_hidden_to_hidden(h1)) + ps = torch.sigmoid(self.lin_hidden_to_input(h2)) + return ps + + +class GatedTransition(nn.Module): + """ + Parameterizes the gaussian latent transition probability `p(z_t | z_{t-1})` + See section 5 in the reference for comparison. + """ + + def __init__(self, z_dim, transition_dim): + super().__init__() + # initialize the six linear transformations used in the neural network + self.lin_gate_z_to_hidden = nn.Linear(z_dim, transition_dim) + self.lin_gate_hidden_to_z = nn.Linear(transition_dim, z_dim) + self.lin_proposed_mean_z_to_hidden = nn.Linear(z_dim, transition_dim) + self.lin_proposed_mean_hidden_to_z = nn.Linear(transition_dim, z_dim) + self.lin_sig = nn.Linear(z_dim, z_dim) + self.lin_z_to_loc = nn.Linear(z_dim, z_dim) + # modify the default initialization of lin_z_to_loc + # so that it's starts out as the identity function + self.lin_z_to_loc.weight.data = torch.eye(z_dim) + self.lin_z_to_loc.bias.data = torch.zeros(z_dim) + # initialize the three non-linearities used in the neural network + self.relu = nn.ReLU() + self.softplus = nn.Softplus() + + def forward(self, z_t_1): + """ + Given the latent `z_{t-1}` corresponding to the time step t-1 + we return the mean and scale vectors that parameterize the + (diagonal) gaussian distribution `p(z_t | z_{t-1})` + """ + # compute the gating function + _gate = self.relu(self.lin_gate_z_to_hidden(z_t_1)) + gate = torch.sigmoid(self.lin_gate_hidden_to_z(_gate)) + # compute the 'proposed mean' + _proposed_mean = self.relu(self.lin_proposed_mean_z_to_hidden(z_t_1)) + proposed_mean = self.lin_proposed_mean_hidden_to_z(_proposed_mean) + # assemble the actual mean used to sample z_t, which mixes a linear transformation + # of z_{t-1} with the proposed mean modulated by the gating function + loc = (1 - gate) * self.lin_z_to_loc(z_t_1) + gate * proposed_mean + # compute the scale used to sample z_t, using the proposed mean from + # above as input the softplus ensures that scale is positive + scale = self.softplus(self.lin_sig(self.relu(proposed_mean))) + # return loc, scale which can be fed into Normal + return loc, scale + + +class Combiner(nn.Module): + """ + Parameterizes `q(z_t | z_{t-1}, x_{t:T})`, which is the basic building block + of the guide (i.e. the variational distribution). The dependence on `x_{t:T}` is + through the hidden state of the RNN (see the PyTorch module `rnn` below) + """ + + def __init__(self, z_dim, rnn_dim): + super().__init__() + # initialize the three linear transformations used in the neural network + self.lin_z_to_hidden = nn.Linear(z_dim, rnn_dim) + self.lin_hidden_to_loc = nn.Linear(rnn_dim, z_dim) + self.lin_hidden_to_scale = nn.Linear(rnn_dim, z_dim) + # initialize the two non-linearities used in the neural network + self.tanh = nn.Tanh() + self.softplus = nn.Softplus() + + def forward(self, z_t_1, h_rnn): + """ + Given the latent z at at a particular time step t-1 as well as the hidden + state of the RNN `h(x_{t:T})` we return the mean and scale vectors that + parameterize the (diagonal) gaussian distribution `q(z_t | z_{t-1}, x_{t:T})` + """ + # combine the rnn hidden state with a transformed version of z_t_1 + h_combined = 0.5 * (self.tanh(self.lin_z_to_hidden(z_t_1)) + h_rnn) + # use the combined hidden state to compute the mean used to sample z_t + loc = self.lin_hidden_to_loc(h_combined) + # use the combined hidden state to compute the scale used to sample z_t + scale = self.softplus(self.lin_hidden_to_scale(h_combined)) + # return loc, scale which can be fed into Normal + return loc, scale + + +class DMM(nn.Module): + """ + This PyTorch Module encapsulates the model as well as the + variational distribution (the guide) for the Deep Markov Model + """ + + def __init__( + self, + input_dim=88, + z_dim=100, + emission_dim=100, + transition_dim=200, + rnn_dim=600, + num_layers=1, + rnn_dropout_rate=0.0, + num_iafs=0, + iaf_dim=50, + use_cuda=False, + ): + super().__init__() + # instantiate PyTorch modules used in the model and guide below + self.emitter = Emitter(input_dim, z_dim, emission_dim) + self.trans = GatedTransition(z_dim, transition_dim) + self.combiner = Combiner(z_dim, rnn_dim) + # dropout just takes effect on inner layers of rnn + rnn_dropout_rate = 0.0 if num_layers == 1 else rnn_dropout_rate + self.rnn = nn.RNN( + input_size=input_dim, + hidden_size=rnn_dim, + nonlinearity="relu", + batch_first=True, + bidirectional=False, + num_layers=num_layers, + dropout=rnn_dropout_rate, + ) + + # if we're using normalizing flows, instantiate those too + self.iafs = [ + affine_autoregressive(z_dim, hidden_dims=[iaf_dim]) for _ in range(num_iafs) + ] + self.iafs_modules = nn.ModuleList(self.iafs) + + # define a (trainable) parameters z_0 and z_q_0 that help define the probability + # distributions p(z_1) and q(z_1) + # (since for t = 1 there are no previous latents to condition on) + self.z_0 = nn.Parameter(torch.zeros(z_dim)) + self.z_q_0 = nn.Parameter(torch.zeros(z_dim)) + # define a (trainable) parameter for the initial hidden state of the rnn + self.h_0 = nn.Parameter(torch.zeros(1, 1, rnn_dim)) + + self.use_cuda = use_cuda + # if on gpu cuda-ize all PyTorch (sub)modules + if use_cuda: + self.cuda() + + # the model p(x_{1:T} | z_{1:T}) p(z_{1:T}) + def model( + self, + mini_batch, + mini_batch_reversed, + mini_batch_mask, + mini_batch_seq_lengths, + annealing_factor=1.0, + ): + # this is the number of time steps we need to process in the mini-batch + T_max = mini_batch.size(1) + + # register all PyTorch (sub)modules with pyro + # this needs to happen in both the model and guide + pyro.module("dmm", self) + + # set z_prev = z_0 to setup the recursive conditioning in p(z_t | z_{t-1}) + z_prev = self.z_0.expand(mini_batch.size(0), self.z_0.size(0)) + + # we enclose all the sample statements in the model in a plate. + # this marks that each datapoint is conditionally independent of the others + with pyro.plate("z_minibatch", len(mini_batch)): + # sample the latents z and observed x's one time step at a time + # we wrap this loop in pyro.markov so that TraceEnum_ELBO can use multiple samples from the guide at each z + for t in pyro.markov(range(1, T_max + 1)): + # the next chunk of code samples z_t ~ p(z_t | z_{t-1}) + # note that (both here and elsewhere) we use poutine.scale to take care + # of KL annealing. we use the mask() method to deal with raggedness + # in the observed data (i.e. different sequences in the mini-batch + # have different lengths) + + # first compute the parameters of the diagonal gaussian distribution p(z_t | z_{t-1}) + z_loc, z_scale = self.trans(z_prev) + + # then sample z_t according to dist.Normal(z_loc, z_scale) + # note that we use the reshape method so that the univariate Normal distribution + # is treated as a multivariate Normal distribution with a diagonal covariance. + with poutine.scale(scale=annealing_factor): + z_t = pyro.sample( + "z_%d" % t, + dist.Normal(z_loc, z_scale) + .mask(mini_batch_mask[:, t - 1 : t]) + .to_event(1), + ) + + # compute the probabilities that parameterize the bernoulli likelihood + emission_probs_t = self.emitter(z_t) + # the next statement instructs pyro to observe x_t according to the + # bernoulli distribution p(x_t|z_t) + pyro.sample( + "obs_x_%d" % t, + dist.Bernoulli(emission_probs_t) + .mask(mini_batch_mask[:, t - 1 : t]) + .to_event(1), + obs=mini_batch[:, t - 1, :], + ) + # the latent sampled at this time step will be conditioned upon + # in the next time step so keep track of it + z_prev = z_t + + # the guide q(z_{1:T} | x_{1:T}) (i.e. the variational distribution) + def guide( + self, + mini_batch, + mini_batch_reversed, + mini_batch_mask, + mini_batch_seq_lengths, + annealing_factor=1.0, + ): + # this is the number of time steps we need to process in the mini-batch + T_max = mini_batch.size(1) + # register all PyTorch (sub)modules with pyro + pyro.module("dmm", self) + + # if on gpu we need the fully broadcast view of the rnn initial state + # to be in contiguous gpu memory + h_0_contig = self.h_0.expand( + 1, mini_batch.size(0), self.rnn.hidden_size + ).contiguous() + # push the observed x's through the rnn; + # rnn_output contains the hidden state at each time step + rnn_output, _ = self.rnn(mini_batch_reversed, h_0_contig) + # reverse the time-ordering in the hidden state and un-pack it + rnn_output = poly.pad_and_reverse(rnn_output, mini_batch_seq_lengths) + # set z_prev = z_q_0 to setup the recursive conditioning in q(z_t |...) + z_prev = self.z_q_0.expand(mini_batch.size(0), self.z_q_0.size(0)) + + # we enclose all the sample statements in the guide in a plate. + # this marks that each datapoint is conditionally independent of the others. + with pyro.plate("z_minibatch", len(mini_batch)): + # sample the latents z one time step at a time + # we wrap this loop in pyro.markov so that TraceEnum_ELBO can use multiple samples from the guide at each z + for t in pyro.markov(range(1, T_max + 1)): + # the next two lines assemble the distribution q(z_t | z_{t-1}, x_{t:T}) + z_loc, z_scale = self.combiner(z_prev, rnn_output[:, t - 1, :]) + + # if we are using normalizing flows, we apply the sequence of transformations + # parameterized by self.iafs to the base distribution defined in the previous line + # to yield a transformed distribution that we use for q(z_t|...) + if len(self.iafs) > 0: + z_dist = TransformedDistribution( + dist.Normal(z_loc, z_scale), self.iafs + ) + assert z_dist.event_shape == (self.z_q_0.size(0),) + assert z_dist.batch_shape[-1:] == (len(mini_batch),) + else: + z_dist = dist.Normal(z_loc, z_scale) + assert z_dist.event_shape == () + assert z_dist.batch_shape[-2:] == ( + len(mini_batch), + self.z_q_0.size(0), + ) + + # sample z_t from the distribution z_dist + with pyro.poutine.scale(scale=annealing_factor): + if len(self.iafs) > 0: + # in output of normalizing flow, all dimensions are correlated (event shape is not empty) + z_t = pyro.sample( + "z_%d" % t, z_dist.mask(mini_batch_mask[:, t - 1]) + ) + else: + # when no normalizing flow used, ".to_event(1)" indicates latent dimensions are independent + z_t = pyro.sample( + "z_%d" % t, + z_dist.mask(mini_batch_mask[:, t - 1 : t]).to_event(1), + ) + # the latent sampled at this time step will be conditioned upon in the next time step + # so keep track of it + z_prev = z_t + + +# setup, training, and evaluation +def main(args): + # setup logging + logging.basicConfig( + level=logging.DEBUG, format="%(message)s", filename=args.log, filemode="w" + ) + console = logging.StreamHandler() + console.setLevel(logging.INFO) + logging.getLogger("").addHandler(console) + logging.info(args) + + data = poly.load_data(poly.JSB_CHORALES) + training_seq_lengths = data["train"]["sequence_lengths"] + training_data_sequences = data["train"]["sequences"] + test_seq_lengths = data["test"]["sequence_lengths"] + test_data_sequences = data["test"]["sequences"] + val_seq_lengths = data["valid"]["sequence_lengths"] + val_data_sequences = data["valid"]["sequences"] + N_train_data = len(training_seq_lengths) + N_train_time_slices = float(torch.sum(training_seq_lengths)) + N_mini_batches = int( + N_train_data / args.mini_batch_size + + int(N_train_data % args.mini_batch_size > 0) + ) + + logging.info( + "N_train_data: %d avg. training seq. length: %.2f N_mini_batches: %d" + % (N_train_data, training_seq_lengths.float().mean(), N_mini_batches) + ) + + # how often we do validation/test evaluation during training + val_test_frequency = 50 + # the number of samples we use to do the evaluation + n_eval_samples = 1 + + # package repeated copies of val/test data for faster evaluation + # (i.e. set us up for vectorization) + def rep(x): + rep_shape = torch.Size([x.size(0) * n_eval_samples]) + x.size()[1:] + repeat_dims = [1] * len(x.size()) + repeat_dims[0] = n_eval_samples + return ( + x.repeat(repeat_dims) + .reshape(n_eval_samples, -1) + .transpose(1, 0) + .reshape(rep_shape) + ) + + # get the validation/test data ready for the dmm: pack into sequences, etc. + val_seq_lengths = rep(val_seq_lengths) + test_seq_lengths = rep(test_seq_lengths) + ( + val_batch, + val_batch_reversed, + val_batch_mask, + val_seq_lengths, + ) = poly.get_mini_batch( + torch.arange(n_eval_samples * val_data_sequences.shape[0]), + rep(val_data_sequences), + val_seq_lengths, + cuda=args.cuda, + ) + ( + test_batch, + test_batch_reversed, + test_batch_mask, + test_seq_lengths, + ) = poly.get_mini_batch( + torch.arange(n_eval_samples * test_data_sequences.shape[0]), + rep(test_data_sequences), + test_seq_lengths, + cuda=args.cuda, + ) + + # instantiate the dmm + dmm = DMM( + rnn_dropout_rate=args.rnn_dropout_rate, + num_iafs=args.num_iafs, + iaf_dim=args.iaf_dim, + use_cuda=args.cuda, + ) + + # setup optimizer + adam_params = { + "lr": args.learning_rate, + "betas": (args.beta1, args.beta2), + "clip_norm": args.clip_norm, + "lrd": args.lr_decay, + "weight_decay": args.weight_decay, + } + adam = ClippedAdam(adam_params) + + # setup inference algorithm + if args.tmc: + if args.jit: + raise NotImplementedError("no JIT support yet for TMC") + tmc_loss = TraceTMC_ELBO() + dmm_guide = config_enumerate( + dmm.guide, + default="parallel", + num_samples=args.tmc_num_samples, + expand=False, + ) + svi = SVI(dmm.model, dmm_guide, adam, loss=tmc_loss) + elif args.tmcelbo: + if args.jit: + raise NotImplementedError("no JIT support yet for TMC ELBO") + elbo = TraceEnum_ELBO() + dmm_guide = config_enumerate( + dmm.guide, + default="parallel", + num_samples=args.tmc_num_samples, + expand=False, + ) + svi = SVI(dmm.model, dmm_guide, adam, loss=elbo) + else: + elbo = JitTrace_ELBO() if args.jit else Trace_ELBO() + svi = SVI(dmm.model, dmm.guide, adam, loss=elbo) + + # now we're going to define some functions we need to form the main training loop + + # saves the model and optimizer states to disk + def save_checkpoint(): + logging.info("saving model to %s..." % args.save_model) + torch.save(dmm.state_dict(), args.save_model) + logging.info("saving optimizer states to %s..." % args.save_opt) + adam.save(args.save_opt) + logging.info("done saving model and optimizer checkpoints to disk.") + + # loads the model and optimizer states from disk + def load_checkpoint(): + assert exists(args.load_opt) and exists( + args.load_model + ), "--load-model and/or --load-opt misspecified" + logging.info("loading model from %s..." % args.load_model) + dmm.load_state_dict(torch.load(args.load_model, weights_only=False)) + logging.info("loading optimizer states from %s..." % args.load_opt) + adam.load(args.load_opt) + logging.info("done loading model and optimizer states.") + + # prepare a mini-batch and take a gradient step to minimize -elbo + def process_minibatch(epoch, which_mini_batch, shuffled_indices): + if args.annealing_epochs > 0 and epoch < args.annealing_epochs: + # compute the KL annealing factor approriate for the current mini-batch in the current epoch + min_af = args.minimum_annealing_factor + annealing_factor = min_af + (1.0 - min_af) * ( + float(which_mini_batch + epoch * N_mini_batches + 1) + / float(args.annealing_epochs * N_mini_batches) + ) + else: + # by default the KL annealing factor is unity + annealing_factor = 1.0 + + # compute which sequences in the training set we should grab + mini_batch_start = which_mini_batch * args.mini_batch_size + mini_batch_end = np.min( + [(which_mini_batch + 1) * args.mini_batch_size, N_train_data] + ) + mini_batch_indices = shuffled_indices[mini_batch_start:mini_batch_end] + # grab a fully prepped mini-batch using the helper function in the data loader + ( + mini_batch, + mini_batch_reversed, + mini_batch_mask, + mini_batch_seq_lengths, + ) = poly.get_mini_batch( + mini_batch_indices, + training_data_sequences, + training_seq_lengths, + cuda=args.cuda, + ) + # do an actual gradient step + loss = svi.step( + mini_batch, + mini_batch_reversed, + mini_batch_mask, + mini_batch_seq_lengths, + annealing_factor, + ) + # keep track of the training loss + return loss + + # helper function for doing evaluation + def do_evaluation(): + # put the RNN into evaluation mode (i.e. turn off drop-out if applicable) + dmm.rnn.eval() + + # compute the validation and test loss n_samples many times + val_nll = svi.evaluate_loss( + val_batch, val_batch_reversed, val_batch_mask, val_seq_lengths + ) / float(torch.sum(val_seq_lengths)) + test_nll = svi.evaluate_loss( + test_batch, test_batch_reversed, test_batch_mask, test_seq_lengths + ) / float(torch.sum(test_seq_lengths)) + + # put the RNN back into training mode (i.e. turn on drop-out if applicable) + dmm.rnn.train() + return val_nll, test_nll + + # if checkpoint files provided, load model and optimizer states from disk before we start training + if args.load_opt != "" and args.load_model != "": + load_checkpoint() + + ################# + # TRAINING LOOP # + ################# + times = [time.time()] + for epoch in range(args.num_epochs): + # if specified, save model and optimizer states to disk every checkpoint_freq epochs + if args.checkpoint_freq > 0 and epoch > 0 and epoch % args.checkpoint_freq == 0: + save_checkpoint() + + # accumulator for our estimate of the negative log likelihood (or rather -elbo) for this epoch + epoch_nll = 0.0 + # prepare mini-batch subsampling indices for this epoch + shuffled_indices = torch.randperm(N_train_data) + + # process each mini-batch; this is where we take gradient steps + for which_mini_batch in range(N_mini_batches): + epoch_nll += process_minibatch(epoch, which_mini_batch, shuffled_indices) + + # report training diagnostics + times.append(time.time()) + epoch_time = times[-1] - times[-2] + logging.info( + "[training epoch %04d] %.4f \t\t\t\t(dt = %.3f sec)" + % (epoch, epoch_nll / N_train_time_slices, epoch_time) + ) + + # do evaluation on test and validation data and report results + if val_test_frequency > 0 and epoch > 0 and epoch % val_test_frequency == 0: + val_nll, test_nll = do_evaluation() + logging.info( + "[val/test epoch %04d] %.4f %.4f" % (epoch, val_nll, test_nll) + ) + + +# parse command-line arguments and execute the main method +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + + parser = argparse.ArgumentParser(description="parse args") + parser.add_argument("-n", "--num-epochs", type=int, default=5000) + parser.add_argument("-lr", "--learning-rate", type=float, default=0.0003) + parser.add_argument("-b1", "--beta1", type=float, default=0.96) + parser.add_argument("-b2", "--beta2", type=float, default=0.999) + parser.add_argument("-cn", "--clip-norm", type=float, default=10.0) + parser.add_argument("-lrd", "--lr-decay", type=float, default=0.99996) + parser.add_argument("-wd", "--weight-decay", type=float, default=2.0) + parser.add_argument("-mbs", "--mini-batch-size", type=int, default=20) + parser.add_argument("-ae", "--annealing-epochs", type=int, default=1000) + parser.add_argument("-maf", "--minimum-annealing-factor", type=float, default=0.2) + parser.add_argument("-rdr", "--rnn-dropout-rate", type=float, default=0.1) + parser.add_argument("-iafs", "--num-iafs", type=int, default=0) + parser.add_argument("-id", "--iaf-dim", type=int, default=100) + parser.add_argument("-cf", "--checkpoint-freq", type=int, default=0) + parser.add_argument("-lopt", "--load-opt", type=str, default="") + parser.add_argument("-lmod", "--load-model", type=str, default="") + parser.add_argument("-sopt", "--save-opt", type=str, default="") + parser.add_argument("-smod", "--save-model", type=str, default="") + parser.add_argument("--cuda", action="store_true") + parser.add_argument("--jit", action="store_true") + parser.add_argument("--tmc", action="store_true") + parser.add_argument("--tmcelbo", action="store_true") + parser.add_argument("--tmc-num-samples", default=10, type=int) + parser.add_argument("-l", "--log", type=str, default="dmm.log") + args = parser.parse_args() + + main(args) diff --git a/pyro/source/examples/eight_schools/README.md b/pyro/source/examples/eight_schools/README.md new file mode 100644 index 0000000000000000000000000000000000000000..c7066b90c14106aa05e9ede16f998258adae8156 --- /dev/null +++ b/pyro/source/examples/eight_schools/README.md @@ -0,0 +1,33 @@ + + +Analysis of the eight schools data (chapter 5 of [Gelman et al 2013]) using MCMC (NUTS) and SVI. + +The starting model is the Stan model: +``` +data { + int J; // number of schools + real y[J]; // estimated treatment effects + real sigma[J]; // s.e. of effect estimates +} +parameters { + real mu; + real tau; + real eta[J]; +} +transformed parameters { + real theta[J]; + for (j in 1:J) + theta[j] <- mu + tau * eta[j]; +} +model { + eta ~ normal(0, 1); + y ~ normal(theta, sigma); +} +``` + +# References +* [Gelman et al 2013] Gelman A., Carlin J.B., Stern H.S., Dunson D.B., Vehtari A., Rubin D.B. "Bayesian Data Analysis, Third Edition". CRC Press 2013. \ No newline at end of file diff --git a/pyro/source/examples/eight_schools/data.py b/pyro/source/examples/eight_schools/data.py new file mode 100644 index 0000000000000000000000000000000000000000..82bfbb55df677ebe0066124ba77097c4456cd683 --- /dev/null +++ b/pyro/source/examples/eight_schools/data.py @@ -0,0 +1,8 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +J = 8 +y = torch.tensor([28, 8, -3, 7, -1, 1, 18, 12]).type(torch.Tensor) +sigma = torch.tensor([15, 10, 16, 11, 9, 11, 10, 18]).type(torch.Tensor) diff --git a/pyro/source/examples/eight_schools/mcmc.py b/pyro/source/examples/eight_schools/mcmc.py new file mode 100644 index 0000000000000000000000000000000000000000..9a0281902915faa632299920d7e2fab81d95fd86 --- /dev/null +++ b/pyro/source/examples/eight_schools/mcmc.py @@ -0,0 +1,69 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import argparse +import logging + +import data +import torch + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.infer import MCMC, NUTS + +logging.basicConfig(format="%(message)s", level=logging.INFO) +pyro.set_rng_seed(0) + + +def model(sigma): + eta = pyro.sample("eta", dist.Normal(torch.zeros(data.J), torch.ones(data.J))) + mu = pyro.sample("mu", dist.Normal(torch.zeros(1), 10 * torch.ones(1))) + tau = pyro.sample("tau", dist.HalfCauchy(scale=25 * torch.ones(1))) + + theta = mu + tau * eta + + return pyro.sample("obs", dist.Normal(theta, sigma)) + + +def conditioned_model(model, sigma, y): + return poutine.condition(model, data={"obs": y})(sigma) + + +def main(args): + nuts_kernel = NUTS(conditioned_model, jit_compile=args.jit) + mcmc = MCMC( + nuts_kernel, + num_samples=args.num_samples, + warmup_steps=args.warmup_steps, + num_chains=args.num_chains, + ) + mcmc.run(model, data.sigma, data.y) + mcmc.summary(prob=0.5) + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser(description="Eight Schools MCMC") + parser.add_argument( + "--num-samples", + type=int, + default=1000, + help="number of MCMC samples (default: 1000)", + ) + parser.add_argument( + "--num-chains", + type=int, + default=1, + help="number of parallel MCMC chains (default: 1)", + ) + parser.add_argument( + "--warmup-steps", + type=int, + default=1000, + help="number of MCMC samples for warmup (default: 1000)", + ) + parser.add_argument("--jit", action="store_true", default=False) + args = parser.parse_args() + + main(args) diff --git a/pyro/source/examples/eight_schools/svi.py b/pyro/source/examples/eight_schools/svi.py new file mode 100644 index 0000000000000000000000000000000000000000..e8017f46522a7b4ae8a0690ea1246f0c01a7e8f9 --- /dev/null +++ b/pyro/source/examples/eight_schools/svi.py @@ -0,0 +1,95 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import argparse +import logging + +import torch +from data import J, sigma, y +from torch.distributions import constraints, transforms + +import pyro +import pyro.distributions as dist +from pyro.infer import SVI, JitTrace_ELBO, Trace_ELBO +from pyro.optim import Adam + +logging.basicConfig(format="%(message)s", level=logging.INFO) +data = torch.stack([y, sigma], dim=1) + + +def model(data): + y = data[:, 0] + sigma = data[:, 1] + + with pyro.plate("data", J): + eta = pyro.sample("eta", dist.Normal(torch.zeros(J), torch.ones(J))) + mu = pyro.sample("mu", dist.Normal(torch.zeros(1), 10 * torch.ones(1))) + tau = pyro.sample("tau", dist.HalfCauchy(scale=25 * torch.ones(1))) + + theta = mu + tau * eta + + pyro.sample("obs", dist.Normal(theta, sigma), obs=y) + + +def guide(data): + loc_eta = torch.randn(J) + # note that we initialize our scales to be pretty narrow + scale_eta = 0.1 * torch.rand(J) + loc_mu = torch.randn(1) + scale_mu = 0.1 * torch.rand(1) + loc_logtau = torch.randn(1) + scale_logtau = 0.1 * torch.rand(1) + + # register learnable params in the param store + m_eta_param = pyro.param("loc_eta", loc_eta) + s_eta_param = pyro.param("scale_eta", scale_eta, constraint=constraints.positive) + m_mu_param = pyro.param("loc_mu", loc_mu) + s_mu_param = pyro.param("scale_mu", scale_mu, constraint=constraints.positive) + m_logtau_param = pyro.param("loc_logtau", loc_logtau) + s_logtau_param = pyro.param( + "scale_logtau", scale_logtau, constraint=constraints.positive + ) + + # guide distributions + dist_eta = dist.Normal(m_eta_param, s_eta_param) + dist_mu = dist.Normal(m_mu_param, s_mu_param) + dist_tau = dist.TransformedDistribution( + dist.Normal(m_logtau_param, s_logtau_param), + transforms=transforms.ExpTransform(), + ) + + with pyro.plate("data", J): + pyro.sample("eta", dist_eta) + pyro.sample("mu", dist_mu) + pyro.sample("tau", dist_tau) + + +def main(args): + optim = Adam({"lr": args.lr}) + elbo = JitTrace_ELBO() if args.jit else Trace_ELBO() + svi = SVI(model, guide, optim, loss=elbo) + + pyro.clear_param_store() + for j in range(args.num_epochs): + loss = svi.step(data) + if j % 100 == 0: + logging.info("[epoch %04d] loss: %.4f" % (j + 1, loss)) + + for name, value in pyro.get_param_store().items(): + logging.info(name) + logging.info(value.detach().cpu().numpy()) + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser(description="Eight Schools SVI") + parser.add_argument( + "--lr", type=float, default=0.01, help="learning rate (default: 0.01)" + ) + parser.add_argument( + "--num-epochs", type=int, default=1000, help="number of epochs (default: 1000)" + ) + parser.add_argument("--jit", action="store_true", default=False) + args = parser.parse_args() + + main(args) diff --git a/pyro/source/examples/einsum.py b/pyro/source/examples/einsum.py new file mode 100644 index 0000000000000000000000000000000000000000..caafc1693f8fc199fc4b9070e533e552db4ed88a --- /dev/null +++ b/pyro/source/examples/einsum.py @@ -0,0 +1,226 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +This example demonstrates how to use plated ``einsum`` with different backends +to compute logprob, gradients, MAP estimates, posterior samples, and marginals. + +The interface for adjoint algorithms requires four steps: + +1. Call ``require_backward()`` on all inputs. +2. Call ``x, = einsum(..., backend=...)`` with a nonstandard backend. +3. Call ``x._pyro_backward()` on the einsum output. +4. Retrieve results from ``._pyro_backward_result`` attributes of the inputs. + +The results of these computations are returned, but this script does not +make use of them; instead we simply time the operations for profiling. +All profiling is done on jit-compiled functions. We exclude jit compilation +time from profiling results, assuming this can be done once. + +You can measure complexity of different einsum problems by specifying +``--equation`` and ``--plates``. +""" + +import argparse +import timeit + +import torch +from torch.autograd import grad + +from pyro.ops.contract import einsum +from pyro.ops.einsum.adjoint import require_backward +from pyro.util import ignore_jit_warnings + +# We will cache jit-compiled versions of each function. +_CACHE = {} + + +def jit_prob(equation, *operands, **kwargs): + """ + Runs einsum to compute the partition function. + + This is cheap but less numerically stable than using the torch_log backend. + """ + key = "prob", equation, kwargs["plates"] + if key not in _CACHE: + # This simply wraps einsum for jit compilation. + def _einsum(*operands): + return einsum(equation, *operands, **kwargs) + + _CACHE[key] = torch.jit.trace(_einsum, operands, check_trace=False) + + return _CACHE[key](*operands) + + +def jit_logprob(equation, *operands, **kwargs): + """ + Runs einsum to compute the log partition function. + + This simulates evaluating an undirected graphical model. + """ + key = "logprob", equation, kwargs["plates"] + if key not in _CACHE: + # This simply wraps einsum for jit compilation. + def _einsum(*operands): + return einsum( + equation, *operands, backend="pyro.ops.einsum.torch_log", **kwargs + ) + + _CACHE[key] = torch.jit.trace(_einsum, operands, check_trace=False) + + return _CACHE[key](*operands) + + +def jit_gradient(equation, *operands, **kwargs): + """ + Runs einsum and calls backward on the partition function. + + This is simulates training an undirected graphical model. + """ + key = "gradient", equation, kwargs["plates"] + if key not in _CACHE: + # This wraps einsum for jit compilation, but we will call backward on the result. + def _einsum(*operands): + return einsum( + equation, *operands, backend="pyro.ops.einsum.torch_log", **kwargs + ) + + _CACHE[key] = torch.jit.trace(_einsum, operands, check_trace=False) + + # Run forward pass. + losses = _CACHE[key](*operands) + + # Work around PyTorch 1.0.0 bug https://github.com/pytorch/pytorch/issues/14875 + # whereby tuples of length 1 are unwrapped by the jit. + if not isinstance(losses, tuple): + losses = (losses,) + + # Run backward pass. + grads = tuple( + grad(loss, operands, retain_graph=True, allow_unused=True) for loss in losses + ) + return grads + + +def _jit_adjoint(equation, *operands, **kwargs): + """ + Runs einsum in forward-backward mode using ``pyro.ops.adjoint``. + + This simulates serving predictions from an undirected graphical model. + """ + backend = kwargs.pop("backend", "pyro.ops.einsum.torch_sample") + key = backend, equation, tuple(x.shape for x in operands), kwargs["plates"] + if key not in _CACHE: + # This wraps a complete adjoint algorithm call. + @ignore_jit_warnings() + def _forward_backward(*operands): + # First we request backward results on each input operand. + # This is the pyro.ops.adjoint equivalent of torch's .requires_grad_(). + for operand in operands: + require_backward(operand) + + # Next we run the forward pass. + results = einsum(equation, *operands, backend=backend, **kwargs) + + # The we run a backward pass. + for result in results: + result._pyro_backward() + + # Finally we retrieve results from the ._pyro_backward_result attribute + # that has been set on each input operand. If you only want results on a + # subset of operands, you can call require_backward() on only those. + results = [] + for x in operands: + results.append(x._pyro_backward_result) + x._pyro_backward_result = None + + return tuple(results) + + _CACHE[key] = torch.jit.trace(_forward_backward, operands, check_trace=False) + + return _CACHE[key](*operands) + + +def jit_map(equation, *operands, **kwargs): + return _jit_adjoint( + equation, *operands, backend="pyro.ops.einsum.torch_map", **kwargs + ) + + +def jit_sample(equation, *operands, **kwargs): + return _jit_adjoint( + equation, *operands, backend="pyro.ops.einsum.torch_sample", **kwargs + ) + + +def jit_marginal(equation, *operands, **kwargs): + return _jit_adjoint( + equation, *operands, backend="pyro.ops.einsum.torch_marginal", **kwargs + ) + + +def time_fn(fn, equation, *operands, **kwargs): + iters = kwargs.pop("iters") + _CACHE.clear() # Avoid memory leaks. + fn(equation, *operands, **kwargs) + + time_start = timeit.default_timer() + for i in range(iters): + fn(equation, *operands, **kwargs) + time_end = timeit.default_timer() + + return (time_end - time_start) / iters + + +def main(args): + if args.cuda: + torch.set_default_device("cuda") + + if args.method == "all": + for method in ["prob", "logprob", "gradient", "marginal", "map", "sample"]: + args.method = method + main(args) + return + + print("Plate size Time per iteration of {} (ms)".format(args.method)) + fn = globals()["jit_{}".format(args.method)] + equation = args.equation + plates = args.plates + inputs, outputs = equation.split("->") + inputs = inputs.split(",") + + # Vary all plate sizes at the same time. + for plate_size in range(8, 1 + args.max_plate_size, 8): + operands = [] + for dims in inputs: + shape = torch.Size( + [plate_size if d in plates else args.dim_size for d in dims] + ) + operands.append((torch.empty(shape).uniform_() + 0.5).requires_grad_()) + + time = time_fn( + fn, equation, *operands, plates=plates, modulo_total=True, iters=args.iters + ) + print( + "{: <11s} {:0.4g}".format( + "{} ** {}".format(plate_size, len(args.plates)), time * 1e3 + ) + ) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="plated einsum profiler") + parser.add_argument("-e", "--equation", default="a,abi,bcij,adj,deij->") + parser.add_argument("-p", "--plates", default="ij") + parser.add_argument("-d", "--dim-size", default=32, type=int) + parser.add_argument("-s", "--max-plate-size", default=32, type=int) + parser.add_argument("-n", "--iters", default=10, type=int) + parser.add_argument("--cuda", action="store_true") + parser.add_argument( + "-m", + "--method", + default="all", + help="one of: prob, logprob, gradient, marginal, map, sample", + ) + args = parser.parse_args() + main(args) diff --git a/pyro/source/examples/hmm.py b/pyro/source/examples/hmm.py new file mode 100644 index 0000000000000000000000000000000000000000..76281ac8bdd9b672902f599c565de577a393939b --- /dev/null +++ b/pyro/source/examples/hmm.py @@ -0,0 +1,774 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +This example shows how to marginalize out discrete model variables in Pyro. + +This combines Stochastic Variational Inference (SVI) with a +variable elimination algorithm, where we use enumeration to exactly +marginalize out some variables from the ELBO computation. We might +call the resulting algorithm collapsed SVI or collapsed SGVB (i.e +collapsed Stochastic Gradient Variational Bayes). In the case where +we exactly sum out all the latent variables (as is the case here), +this algorithm reduces to a form of gradient-based Maximum +Likelihood Estimation. + +To marginalize out discrete variables ``x`` in Pyro's SVI: + +1. Verify that the variable dependency structure in your model + admits tractable inference, i.e. the dependency graph among + enumerated variables should have narrow treewidth. +2. Annotate each target each such sample site in the model + with ``infer={"enumerate": "parallel"}`` +3. Ensure your model can handle broadcasting of the sample values + of those variables +4. Use the ``TraceEnum_ELBO`` loss inside Pyro's ``SVI``. + +Note that empirical results for the models defined here can be found in +reference [1]. This paper also includes a description of the "tensor +variable elimination" algorithm that Pyro uses under the hood to +marginalize out discrete latent variables. + +References + +1. "Tensor Variable Elimination for Plated Factor Graphs", +Fritz Obermeyer, Eli Bingham, Martin Jankowiak, Justin Chiu, +Neeraj Pradhan, Alexander Rush, Noah Goodman. https://arxiv.org/abs/1902.03210 +""" +import argparse +import logging +import sys + +import torch +import torch.nn as nn +from torch.distributions import constraints + +import pyro +import pyro.contrib.examples.polyphonic_data_loader as poly +import pyro.distributions as dist +from pyro import poutine +from pyro.infer import SVI, JitTraceEnum_ELBO, TraceEnum_ELBO, TraceTMC_ELBO +from pyro.infer.autoguide import AutoDelta +from pyro.ops.indexing import Vindex +from pyro.optim import Adam +from pyro.util import ignore_jit_warnings + +logging.basicConfig(format="%(relativeCreated) 9d %(message)s", level=logging.DEBUG) + +# Add another handler for logging debugging events (e.g. for profiling) +# in a separate stream that can be captured. +log = logging.getLogger() +debug_handler = logging.StreamHandler(sys.stdout) +debug_handler.setLevel(logging.DEBUG) +debug_handler.addFilter(filter=lambda record: record.levelno <= logging.DEBUG) +log.addHandler(debug_handler) + + +# Let's start with a simple Hidden Markov Model. +# +# x[t-1] --> x[t] --> x[t+1] +# | | | +# V V V +# y[t-1] y[t] y[t+1] +# +# This model includes a plate for the data_dim = 88 keys on the piano. This +# model has two "style" parameters probs_x and probs_y that we'll draw from a +# prior. The latent state is x, and the observed state is y. We'll drive +# probs_* with the guide, enumerate over x, and condition on y. +# +# Importantly, the dependency structure of the enumerated variables has +# narrow treewidth, therefore admitting efficient inference by message passing. +# Pyro's TraceEnum_ELBO will find an efficient message passing scheme if one +# exists. +def model_0(sequences, lengths, args, batch_size=None, include_prior=True): + assert not torch._C._get_tracing_state() + num_sequences, max_length, data_dim = sequences.shape + with poutine.mask(mask=include_prior): + # Our prior on transition probabilities will be: + # stay in the same state with 90% probability; uniformly jump to another + # state with 10% probability. + probs_x = pyro.sample( + "probs_x", + dist.Dirichlet(0.9 * torch.eye(args.hidden_dim) + 0.1).to_event(1), + ) + # We put a weak prior on the conditional probability of a tone sounding. + # We know that on average about 4 of 88 tones are active, so we'll set a + # rough weak prior of 10% of the notes being active at any one time. + probs_y = pyro.sample( + "probs_y", + dist.Beta(0.1, 0.9).expand([args.hidden_dim, data_dim]).to_event(2), + ) + # In this first model we'll sequentially iterate over sequences in a + # minibatch; this will make it easy to reason about tensor shapes. + tones_plate = pyro.plate("tones", data_dim, dim=-1) + for i in pyro.plate("sequences", len(sequences), batch_size): + length = lengths[i] + sequence = sequences[i, :length] + x = 0 + for t in pyro.markov(range(length)): + # On the next line, we'll overwrite the value of x with an updated + # value. If we wanted to record all x values, we could instead + # write x[t] = pyro.sample(...x[t-1]...). + x = pyro.sample( + "x_{}_{}".format(i, t), + dist.Categorical(probs_x[x]), + infer={"enumerate": "parallel"}, + ) + with tones_plate: + pyro.sample( + "y_{}_{}".format(i, t), + dist.Bernoulli(probs_y[x.squeeze(-1)]), + obs=sequence[t], + ) + + +# To see how enumeration changes the shapes of these sample sites, we can use +# the Trace.format_shapes() to print shapes at each site: +# $ python examples/hmm.py -m 0 -n 1 -b 1 -t 5 --print-shapes +# ... +# Sample Sites: +# probs_x dist | 16 16 +# value | 16 16 +# probs_y dist | 16 88 +# value | 16 88 +# tones dist | +# value 88 | +# sequences dist | +# value 1 | +# x_178_0 dist | +# value 16 1 | +# y_178_0 dist 16 88 | +# value 88 | +# x_178_1 dist 16 1 | +# value 16 1 1 | +# y_178_1 dist 16 1 88 | +# value 88 | +# x_178_2 dist 16 1 1 | +# value 16 1 | +# y_178_2 dist 16 88 | +# value 88 | +# x_178_3 dist 16 1 | +# value 16 1 1 | +# y_178_3 dist 16 1 88 | +# value 88 | +# x_178_4 dist 16 1 1 | +# value 16 1 | +# y_178_4 dist 16 88 | +# value 88 | +# +# Notice that enumeration (over 16 states) alternates between two dimensions: +# -2 and -3. If we had not used pyro.markov above, each enumerated variable +# would need its own enumeration dimension. + + +# Next let's make our simple model faster in two ways: first we'll support +# vectorized minibatches of data, and second we'll support the PyTorch jit +# compiler. To add batch support, we'll introduce a second plate "sequences" +# and randomly subsample data to size batch_size. To add jit support we +# silence some warnings and try to avoid dynamic program structure. + + +# Note that this is the "HMM" model in reference [1] (with the difference that +# in [1] the probabilities probs_x and probs_y are not MAP-regularized with +# Dirichlet and Beta distributions for any of the models) +def model_1(sequences, lengths, args, batch_size=None, include_prior=True): + # Sometimes it is safe to ignore jit warnings. Here we use the + # pyro.util.ignore_jit_warnings context manager to silence warnings about + # conversion to integer, since we know all three numbers will be the same + # across all invocations to the model. + with ignore_jit_warnings(): + num_sequences, max_length, data_dim = map(int, sequences.shape) + assert lengths.shape == (num_sequences,) + assert lengths.max() <= max_length + with poutine.mask(mask=include_prior): + probs_x = pyro.sample( + "probs_x", + dist.Dirichlet(0.9 * torch.eye(args.hidden_dim) + 0.1).to_event(1), + ) + probs_y = pyro.sample( + "probs_y", + dist.Beta(0.1, 0.9).expand([args.hidden_dim, data_dim]).to_event(2), + ) + tones_plate = pyro.plate("tones", data_dim, dim=-1) + # We subsample batch_size items out of num_sequences items. Note that since + # we're using dim=-1 for the notes plate, we need to batch over a different + # dimension, here dim=-2. + with pyro.plate("sequences", num_sequences, batch_size, dim=-2) as batch: + lengths = lengths[batch] + x = 0 + # If we are not using the jit, then we can vary the program structure + # each call by running for a dynamically determined number of time + # steps, lengths.max(). However if we are using the jit, then we try to + # keep a single program structure for all minibatches; the fixed + # structure ends up being faster since each program structure would + # need to trigger a new jit compile stage. + for t in pyro.markov(range(max_length if args.jit else lengths.max())): + with poutine.mask(mask=(t < lengths).unsqueeze(-1)): + x = pyro.sample( + "x_{}".format(t), + dist.Categorical(probs_x[x]), + infer={"enumerate": "parallel"}, + ) + with tones_plate: + pyro.sample( + "y_{}".format(t), + dist.Bernoulli(probs_y[x.squeeze(-1)]), + obs=sequences[batch, t], + ) + + +# Let's see how batching changes the shapes of sample sites: +# $ python examples/hmm.py -m 1 -n 1 -t 5 --batch-size=10 --print-shapes +# ... +# Sample Sites: +# probs_x dist | 16 16 +# value | 16 16 +# probs_y dist | 16 88 +# value | 16 88 +# tones dist | +# value 88 | +# sequences dist | +# value 10 | +# x_0 dist 10 1 | +# value 16 1 1 | +# y_0 dist 16 10 88 | +# value 10 88 | +# x_1 dist 16 10 1 | +# value 16 1 1 1 | +# y_1 dist 16 1 10 88 | +# value 10 88 | +# x_2 dist 16 1 10 1 | +# value 16 1 1 | +# y_2 dist 16 10 88 | +# value 10 88 | +# x_3 dist 16 10 1 | +# value 16 1 1 1 | +# y_3 dist 16 1 10 88 | +# value 10 88 | +# x_4 dist 16 1 10 1 | +# value 16 1 1 | +# y_4 dist 16 10 88 | +# value 10 88 | +# +# Notice that we're now using dim=-2 as a batch dimension (of size 10), +# and that the enumeration dimensions are now dims -3 and -4. + + +# Next let's add a dependency of y[t] on y[t-1]. +# +# x[t-1] --> x[t] --> x[t+1] +# | | | +# V V V +# y[t-1] --> y[t] --> y[t+1] +# +# Note that this is the "arHMM" model in reference [1]. +def model_2(sequences, lengths, args, batch_size=None, include_prior=True): + with ignore_jit_warnings(): + num_sequences, max_length, data_dim = map(int, sequences.shape) + assert lengths.shape == (num_sequences,) + assert lengths.max() <= max_length + with poutine.mask(mask=include_prior): + probs_x = pyro.sample( + "probs_x", + dist.Dirichlet(0.9 * torch.eye(args.hidden_dim) + 0.1).to_event(1), + ) + probs_y = pyro.sample( + "probs_y", + dist.Beta(0.1, 0.9).expand([args.hidden_dim, 2, data_dim]).to_event(3), + ) + tones_plate = pyro.plate("tones", data_dim, dim=-1) + with pyro.plate("sequences", num_sequences, batch_size, dim=-2) as batch: + lengths = lengths[batch] + x, y = 0, 0 + for t in pyro.markov(range(max_length if args.jit else lengths.max())): + with poutine.mask(mask=(t < lengths).unsqueeze(-1)): + x = pyro.sample( + "x_{}".format(t), + dist.Categorical(probs_x[x]), + infer={"enumerate": "parallel"}, + ) + # Note the broadcasting tricks here: to index probs_y on tensors x and y, + # we also need a final tensor for the tones dimension. This is conveniently + # provided by the plate associated with that dimension. + with tones_plate as tones: + y = pyro.sample( + "y_{}".format(t), + dist.Bernoulli(probs_y[x, y, tones]), + obs=sequences[batch, t], + ).long() + + +# Next consider a Factorial HMM with two hidden states. +# +# w[t-1] ----> w[t] ---> w[t+1] +# \ x[t-1] --\-> x[t] --\-> x[t+1] +# \ / \ / \ / +# \/ \/ \/ +# y[t-1] y[t] y[t+1] +# +# Note that since the joint distribution of each y[t] depends on two variables, +# those two variables become dependent. Therefore during enumeration, the +# entire joint space of these variables w[t],x[t] needs to be enumerated. +# For that reason, we set the dimension of each to the square root of the +# target hidden dimension. +# +# Note that this is the "FHMM" model in reference [1]. +def model_3(sequences, lengths, args, batch_size=None, include_prior=True): + with ignore_jit_warnings(): + num_sequences, max_length, data_dim = map(int, sequences.shape) + assert lengths.shape == (num_sequences,) + assert lengths.max() <= max_length + hidden_dim = int(args.hidden_dim**0.5) # split between w and x + with poutine.mask(mask=include_prior): + probs_w = pyro.sample( + "probs_w", dist.Dirichlet(0.9 * torch.eye(hidden_dim) + 0.1).to_event(1) + ) + probs_x = pyro.sample( + "probs_x", dist.Dirichlet(0.9 * torch.eye(hidden_dim) + 0.1).to_event(1) + ) + probs_y = pyro.sample( + "probs_y", + dist.Beta(0.1, 0.9).expand([hidden_dim, hidden_dim, data_dim]).to_event(3), + ) + tones_plate = pyro.plate("tones", data_dim, dim=-1) + with pyro.plate("sequences", num_sequences, batch_size, dim=-2) as batch: + lengths = lengths[batch] + w, x = 0, 0 + for t in pyro.markov(range(max_length if args.jit else lengths.max())): + with poutine.mask(mask=(t < lengths).unsqueeze(-1)): + w = pyro.sample( + "w_{}".format(t), + dist.Categorical(probs_w[w]), + infer={"enumerate": "parallel"}, + ) + x = pyro.sample( + "x_{}".format(t), + dist.Categorical(probs_x[x]), + infer={"enumerate": "parallel"}, + ) + with tones_plate as tones: + pyro.sample( + "y_{}".format(t), + dist.Bernoulli(probs_y[w, x, tones]), + obs=sequences[batch, t], + ) + + +# By adding a dependency of x on w, we generalize to a +# Dynamic Bayesian Network. +# +# w[t-1] ----> w[t] ---> w[t+1] +# | \ | \ | \ +# | x[t-1] ----> x[t] ----> x[t+1] +# | / | / | / +# V / V / V / +# y[t-1] y[t] y[t+1] +# +# Note that message passing here has roughly the same cost as with the +# Factorial HMM, but this model has more parameters. +# +# Note that this is the "PFHMM" model in reference [1]. +def model_4(sequences, lengths, args, batch_size=None, include_prior=True): + with ignore_jit_warnings(): + num_sequences, max_length, data_dim = map(int, sequences.shape) + assert lengths.shape == (num_sequences,) + assert lengths.max() <= max_length + hidden_dim = int(args.hidden_dim**0.5) # split between w and x + with poutine.mask(mask=include_prior): + probs_w = pyro.sample( + "probs_w", dist.Dirichlet(0.9 * torch.eye(hidden_dim) + 0.1).to_event(1) + ) + probs_x = pyro.sample( + "probs_x", + dist.Dirichlet(0.9 * torch.eye(hidden_dim) + 0.1) + .expand_by([hidden_dim]) + .to_event(2), + ) + probs_y = pyro.sample( + "probs_y", + dist.Beta(0.1, 0.9).expand([hidden_dim, hidden_dim, data_dim]).to_event(3), + ) + tones_plate = pyro.plate("tones", data_dim, dim=-1) + with pyro.plate("sequences", num_sequences, batch_size, dim=-2) as batch: + lengths = lengths[batch] + # Note the broadcasting tricks here: we declare a hidden torch.arange and + # ensure that w and x are always tensors so we can unsqueeze them below, + # thus ensuring that the x sample sites have correct distribution shape. + w = x = torch.tensor(0, dtype=torch.long) + for t in pyro.markov(range(max_length if args.jit else lengths.max())): + with poutine.mask(mask=(t < lengths).unsqueeze(-1)): + w = pyro.sample( + "w_{}".format(t), + dist.Categorical(probs_w[w]), + infer={"enumerate": "parallel"}, + ) + x = pyro.sample( + "x_{}".format(t), + dist.Categorical(Vindex(probs_x)[w, x]), + infer={"enumerate": "parallel"}, + ) + with tones_plate as tones: + pyro.sample( + "y_{}".format(t), + dist.Bernoulli(probs_y[w, x, tones]), + obs=sequences[batch, t], + ) + + +# Next let's consider a neural HMM model. +# +# x[t-1] --> x[t] --> x[t+1] } standard HMM + +# | | | +# V V V +# y[t-1] --> y[t] --> y[t+1] } neural likelihood +# +# First let's define a neural net to generate y logits. +class TonesGenerator(nn.Module): + def __init__(self, args, data_dim): + self.args = args + self.data_dim = data_dim + super().__init__() + self.x_to_hidden = nn.Linear(args.hidden_dim, args.nn_dim) + self.y_to_hidden = nn.Linear(args.nn_channels * data_dim, args.nn_dim) + self.conv = nn.Conv1d(1, args.nn_channels, 3, padding=1) + self.hidden_to_logits = nn.Linear(args.nn_dim, data_dim) + self.relu = nn.ReLU() + + def forward(self, x, y): + # Hidden units depend on two inputs: a one-hot encoded categorical variable x, and + # a bernoulli variable y. Whereas x will typically be enumerated, y will be observed. + # We apply x_to_hidden independently from y_to_hidden, then broadcast the non-enumerated + # y part up to the enumerated x part in the + operation. + x_onehot = y.new_zeros(x.shape[:-1] + (self.args.hidden_dim,)).scatter_( + -1, x, 1 + ) + y_conv = self.relu(self.conv(y.reshape(-1, 1, self.data_dim))).reshape( + y.shape[:-1] + (-1,) + ) + h = self.relu(self.x_to_hidden(x_onehot) + self.y_to_hidden(y_conv)) + return self.hidden_to_logits(h) + + +# We will create a single global instance later. +tones_generator = None + + +# The neural HMM model now uses tones_generator at each time step. +# +# Note that this is the "nnHMM" model in reference [1]. +def model_5(sequences, lengths, args, batch_size=None, include_prior=True): + with ignore_jit_warnings(): + num_sequences, max_length, data_dim = map(int, sequences.shape) + assert lengths.shape == (num_sequences,) + assert lengths.max() <= max_length + + # Initialize a global module instance if needed. + global tones_generator + if tones_generator is None: + tones_generator = TonesGenerator(args, data_dim) + pyro.module("tones_generator", tones_generator) + + with poutine.mask(mask=include_prior): + probs_x = pyro.sample( + "probs_x", + dist.Dirichlet(0.9 * torch.eye(args.hidden_dim) + 0.1).to_event(1), + ) + with pyro.plate("sequences", num_sequences, batch_size, dim=-2) as batch: + lengths = lengths[batch] + x = 0 + y = torch.zeros(data_dim) + for t in pyro.markov(range(max_length if args.jit else lengths.max())): + with poutine.mask(mask=(t < lengths).unsqueeze(-1)): + x = pyro.sample( + "x_{}".format(t), + dist.Categorical(probs_x[x]), + infer={"enumerate": "parallel"}, + ) + # Note that since each tone depends on all tones at a previous time step + # the tones at different time steps now need to live in separate plates. + with pyro.plate("tones_{}".format(t), data_dim, dim=-1): + y = pyro.sample( + "y_{}".format(t), + dist.Bernoulli(logits=tones_generator(x, y)), + obs=sequences[batch, t], + ) + + +# Next let's consider a second-order HMM model +# in which x[t+1] depends on both x[t] and x[t-1]. +# +# _______>______ +# _____>_____/______ \ +# / / \ \ +# x[t-1] --> x[t] --> x[t+1] --> x[t+2] +# | | | | +# V V V V +# y[t-1] y[t] y[t+1] y[t+2] +# +# Note that in this model (in contrast to the previous model) we treat +# the transition and emission probabilities as parameters (so they have no prior). +# +# Note that this is the "2HMM" model in reference [1]. +def model_6(sequences, lengths, args, batch_size=None, include_prior=False): + num_sequences, max_length, data_dim = sequences.shape + assert lengths.shape == (num_sequences,) + assert lengths.max() <= max_length + hidden_dim = args.hidden_dim + + if not args.raftery_parameterization: + # Explicitly parameterize the full tensor of transition probabilities, which + # has hidden_dim cubed entries. + probs_x = pyro.param( + "probs_x", + torch.rand(hidden_dim, hidden_dim, hidden_dim), + constraint=constraints.simplex, + ) + else: + # Use the more parsimonious "Raftery" parameterization of + # the tensor of transition probabilities. See reference: + # Raftery, A. E. A model for high-order markov chains. + # Journal of the Royal Statistical Society. 1985. + probs_x1 = pyro.param( + "probs_x1", + torch.rand(hidden_dim, hidden_dim), + constraint=constraints.simplex, + ) + probs_x2 = pyro.param( + "probs_x2", + torch.rand(hidden_dim, hidden_dim), + constraint=constraints.simplex, + ) + mix_lambda = pyro.param( + "mix_lambda", torch.tensor(0.5), constraint=constraints.unit_interval + ) + # we use broadcasting to combine two tensors of shape (hidden_dim, hidden_dim) and + # (hidden_dim, 1, hidden_dim) to obtain a tensor of shape (hidden_dim, hidden_dim, hidden_dim) + probs_x = mix_lambda * probs_x1 + (1.0 - mix_lambda) * probs_x2.unsqueeze(-2) + + probs_y = pyro.param( + "probs_y", + torch.rand(hidden_dim, data_dim), + constraint=constraints.unit_interval, + ) + tones_plate = pyro.plate("tones", data_dim, dim=-1) + with pyro.plate("sequences", num_sequences, batch_size, dim=-2) as batch: + lengths = lengths[batch] + x_curr, x_prev = torch.tensor(0), torch.tensor(0) + # we need to pass the argument `history=2' to `pyro.markov()` + # since our model is now 2-markov + for t in pyro.markov(range(lengths.max()), history=2): + with poutine.mask(mask=(t < lengths).unsqueeze(-1)): + probs_x_t = Vindex(probs_x)[x_prev, x_curr] + x_prev, x_curr = x_curr, pyro.sample( + "x_{}".format(t), + dist.Categorical(probs_x_t), + infer={"enumerate": "parallel"}, + ) + with tones_plate: + probs_y_t = probs_y[x_curr.squeeze(-1)] + pyro.sample( + "y_{}".format(t), + dist.Bernoulli(probs_y_t), + obs=sequences[batch, t], + ) + + +# Next we demonstrate how to parallelize the neural HMM above using Pyro's +# DiscreteHMM distribution. This model is equivalent to model_5 above, but we +# manually unroll loops and fuse ops, leading to a single sample statement. +# DiscreteHMM can lead to over 10x speedup in models where it is applicable. +def model_7(sequences, lengths, args, batch_size=None, include_prior=True): + with ignore_jit_warnings(): + num_sequences, max_length, data_dim = map(int, sequences.shape) + assert lengths.shape == (num_sequences,) + assert lengths.max() <= max_length + + # Initialize a global module instance if needed. + global tones_generator + if tones_generator is None: + tones_generator = TonesGenerator(args, data_dim) + pyro.module("tones_generator", tones_generator) + + with poutine.mask(mask=include_prior): + probs_x = pyro.sample( + "probs_x", + dist.Dirichlet(0.9 * torch.eye(args.hidden_dim) + 0.1).to_event(1), + ) + with pyro.plate("sequences", num_sequences, batch_size, dim=-1) as batch: + lengths = lengths[batch] + y = sequences[batch] if args.jit else sequences[batch, : lengths.max()] + x = torch.arange(args.hidden_dim) + t = torch.arange(y.size(1)) + init_logits = torch.full((args.hidden_dim,), -float("inf")) + init_logits[0] = 0 + trans_logits = probs_x.log() + with ignore_jit_warnings(): + obs_dist = dist.Bernoulli( + logits=tones_generator(x, y.unsqueeze(-2)) + ).to_event(1) + obs_dist = obs_dist.mask((t < lengths.unsqueeze(-1)).unsqueeze(-1)) + hmm_dist = dist.DiscreteHMM(init_logits, trans_logits, obs_dist) + pyro.sample("y", hmm_dist, obs=y) + + +models = { + name[len("model_") :]: model + for name, model in globals().items() + if name.startswith("model_") +} + + +def main(args): + if args.cuda: + torch.set_default_device("cuda") + + logging.info("Loading data") + data = poly.load_data(poly.JSB_CHORALES) + + logging.info("-" * 40) + model = models[args.model] + logging.info( + "Training {} on {} sequences".format( + model.__name__, len(data["train"]["sequences"]) + ) + ) + sequences = data["train"]["sequences"] + lengths = data["train"]["sequence_lengths"] + + # find all the notes that are present at least once in the training set + present_notes = (sequences == 1).sum(0).sum(0) > 0 + # remove notes that are never played (we remove 37/88 notes) + sequences = sequences[..., present_notes] + + if args.truncate: + lengths = lengths.clamp(max=args.truncate) + sequences = sequences[:, : args.truncate] + num_observations = float(lengths.sum()) + pyro.set_rng_seed(args.seed) + pyro.clear_param_store() + + # We'll train using MAP Baum-Welch, i.e. MAP estimation while marginalizing + # out the hidden state x. This is accomplished via an automatic guide that + # learns point estimates of all of our conditional probability tables, + # named probs_*. + guide = AutoDelta( + poutine.block(model, expose_fn=lambda msg: msg["name"].startswith("probs_")) + ) + + # To help debug our tensor shapes, let's print the shape of each site's + # distribution, value, and log_prob tensor. Note this information is + # automatically printed on most errors inside SVI. + if args.print_shapes: + first_available_dim = -2 if model is model_0 else -3 + guide_trace = poutine.trace(guide).get_trace( + sequences, lengths, args=args, batch_size=args.batch_size + ) + model_trace = poutine.trace( + poutine.replay(poutine.enum(model, first_available_dim), guide_trace) + ).get_trace(sequences, lengths, args=args, batch_size=args.batch_size) + logging.info(model_trace.format_shapes()) + + # Enumeration requires a TraceEnum elbo and declaring the max_plate_nesting. + # All of our models have two plates: "data" and "tones". + optim = Adam({"lr": args.learning_rate}) + if args.tmc: + if args.jit: + raise NotImplementedError("jit support not yet added for TraceTMC_ELBO") + elbo = TraceTMC_ELBO(max_plate_nesting=1 if model is model_0 else 2) + tmc_model = poutine.infer_config( + model, + lambda msg: ( + {"num_samples": args.tmc_num_samples, "expand": False} + if msg["infer"].get("enumerate", None) == "parallel" + else {} + ), + ) # noqa: E501 + svi = SVI(tmc_model, guide, optim, elbo) + else: + Elbo = JitTraceEnum_ELBO if args.jit else TraceEnum_ELBO + elbo = Elbo( + max_plate_nesting=1 if model is model_0 else 2, + strict_enumeration_warning=(model is not model_7), + jit_options={"time_compilation": args.time_compilation}, + ) + svi = SVI(model, guide, optim, elbo) + + # We'll train on small minibatches. + logging.info("Step\tLoss") + for step in range(args.num_steps): + loss = svi.step(sequences, lengths, args=args, batch_size=args.batch_size) + logging.info("{: >5d}\t{}".format(step, loss / num_observations)) + + if args.jit and args.time_compilation: + logging.debug( + "time to compile: {} s.".format(elbo._differentiable_loss.compile_time) + ) + + # We evaluate on the entire training dataset, + # excluding the prior term so our results are comparable across models. + train_loss = elbo.loss(model, guide, sequences, lengths, args, include_prior=False) + logging.info("training loss = {}".format(train_loss / num_observations)) + + # Finally we evaluate on the test dataset. + logging.info("-" * 40) + logging.info( + "Evaluating on {} test sequences".format(len(data["test"]["sequences"])) + ) + sequences = data["test"]["sequences"][..., present_notes] + lengths = data["test"]["sequence_lengths"] + if args.truncate: + lengths = lengths.clamp(max=args.truncate) + num_observations = float(lengths.sum()) + + # note that since we removed unseen notes above (to make the problem a bit easier and for + # numerical stability) this test loss may not be directly comparable to numbers + # reported on this dataset elsewhere. + test_loss = elbo.loss( + model, guide, sequences, lengths, args=args, include_prior=False + ) + logging.info("test loss = {}".format(test_loss / num_observations)) + + # We expect models with higher capacity to perform better, + # but eventually overfit to the training set. + capacity = sum( + value.reshape(-1).size(0) for value in pyro.get_param_store().values() + ) + logging.info("{} capacity = {} parameters".format(model.__name__, capacity)) + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser( + description="MAP Baum-Welch learning Bach Chorales" + ) + parser.add_argument( + "-m", + "--model", + default="1", + type=str, + help="one of: {}".format(", ".join(sorted(models.keys()))), + ) + parser.add_argument("-n", "--num-steps", default=50, type=int) + parser.add_argument("-b", "--batch-size", default=8, type=int) + parser.add_argument("-d", "--hidden-dim", default=16, type=int) + parser.add_argument("-nn", "--nn-dim", default=48, type=int) + parser.add_argument("-nc", "--nn-channels", default=2, type=int) + parser.add_argument("-lr", "--learning-rate", default=0.05, type=float) + parser.add_argument("-t", "--truncate", type=int) + parser.add_argument("-p", "--print-shapes", action="store_true") + parser.add_argument("--seed", default=0, type=int) + parser.add_argument("--cuda", action="store_true") + parser.add_argument("--jit", action="store_true") + parser.add_argument("--time-compilation", action="store_true") + parser.add_argument("-rp", "--raftery-parameterization", action="store_true") + parser.add_argument( + "--tmc", + action="store_true", + help="Use Tensor Monte Carlo instead of exact enumeration " + "to estimate the marginal likelihood. You probably don't want to do this, " + "except to see that TMC makes Monte Carlo gradient estimation feasible " + "even with very large numbers of non-reparametrized variables.", + ) + parser.add_argument("--tmc-num-samples", default=10, type=int) + args = parser.parse_args() + main(args) diff --git a/pyro/source/examples/inclined_plane.py b/pyro/source/examples/inclined_plane.py new file mode 100644 index 0000000000000000000000000000000000000000..22a170d0d82c87e45e8e93bd4c002336b6aab3cb --- /dev/null +++ b/pyro/source/examples/inclined_plane.py @@ -0,0 +1,152 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + + +import argparse + +import numpy as np +import torch + +import pyro +from pyro.distributions import Normal, Uniform +from pyro.infer import EmpiricalMarginal, Importance + +""" +Samantha really likes physics---but she likes Pyro even more. Instead of using +calculus to do her physics lab homework (which she could easily do), she's going +to use bayesian inference. The problem setup is as follows. In lab she observed +a little box slide down an inclined plane (length of 2 meters and with an incline of +30 degrees) 20 times. Each time she measured and recorded the descent time. The timing +device she used has a known measurement error of 20 milliseconds. Using the observed +data, she wants to infer the coefficient of friction mu between the box and the inclined +plane. She already has (deterministic) python code that can simulate the amount of time +that it takes the little box to slide down the inclined plane as a function of mu. Using +Pyro, she can reverse the simulator and infer mu from the observed descent times. +""" + +little_g = 9.8 # m/s/s +mu0 = 0.12 # actual coefficient of friction in the experiment +time_measurement_sigma = 0.02 # observation noise in seconds (known quantity) + + +# the forward simulator, which does numerical integration of the equations of motion +# in steps of size dt, and optionally includes measurement noise + + +def simulate(mu, length=2.0, phi=np.pi / 6.0, dt=0.005, noise_sigma=None): + T = torch.zeros(()) + velocity = torch.zeros(()) + displacement = torch.zeros(()) + acceleration = ( + torch.tensor(little_g * np.sin(phi)) - torch.tensor(little_g * np.cos(phi)) * mu + ) + + if ( + acceleration.numpy() <= 0.0 + ): # the box doesn't slide if the friction is too large + return torch.tensor(1.0e5) # return a very large time instead of infinity + + while ( + displacement.numpy() < length + ): # otherwise slide to the end of the inclined plane + displacement += velocity * dt + velocity += acceleration * dt + T += dt + + if noise_sigma is None: + return T + else: + return T + noise_sigma * torch.randn(()) + + +# analytic formula that the simulator above is computing via +# numerical integration (no measurement noise) + + +def analytic_T(mu, length=2.0, phi=np.pi / 6.0): + numerator = 2.0 * length + denominator = little_g * (np.sin(phi) - mu * np.cos(phi)) + return np.sqrt(numerator / denominator) + + +# generate N_obs observations using simulator and the true coefficient of friction mu0 +print("generating simulated data using the true coefficient of friction %.3f" % mu0) +N_obs = 20 +torch.manual_seed(2) +observed_data = torch.tensor( + [ + simulate(torch.tensor(mu0), noise_sigma=time_measurement_sigma) + for _ in range(N_obs) + ] +) +observed_mean = np.mean([T.item() for T in observed_data]) + + +# define model with uniform prior on mu and gaussian noise on the descent time +def model(observed_data): + mu_prior = Uniform(0.0, 1.0) + mu = pyro.sample("mu", mu_prior) + + def observe_T(T_obs, obs_name): + T_simulated = simulate(mu) + T_obs_dist = Normal(T_simulated, torch.tensor(time_measurement_sigma)) + pyro.sample(obs_name, T_obs_dist, obs=T_obs) + + for i, T_obs in enumerate(observed_data): + observe_T(T_obs, "obs_%d" % i) + + return mu + + +def main(args): + # create an importance sampler (the prior is used as the proposal distribution) + importance = Importance(model, guide=None, num_samples=args.num_samples) + # get posterior samples of mu (which is the return value of model) + # from the raw execution traces provided by the importance sampler. + print("doing importance sampling...") + emp_marginal = EmpiricalMarginal(importance.run(observed_data)) + + # calculate statistics over posterior samples + posterior_mean = emp_marginal.mean + posterior_std_dev = emp_marginal.variance.sqrt() + + # report results + inferred_mu = posterior_mean.item() + inferred_mu_uncertainty = posterior_std_dev.item() + print( + "the coefficient of friction inferred by pyro is %.3f +- %.3f" + % (inferred_mu, inferred_mu_uncertainty) + ) + + # note that, given the finite step size in the simulator, the simulated descent times will + # not precisely match the numbers from the analytic result. + # in particular the first two numbers reported below should match each other pretty closely + # but will be systematically off from the third number + print( + "the mean observed descent time in the dataset is: %.4f seconds" % observed_mean + ) + print( + "the (forward) simulated descent time for the inferred (mean) mu is: %.4f seconds" + % simulate(posterior_mean).item() + ) + print( + ( + "disregarding measurement noise, elementary calculus gives the descent time\n" + + "for the inferred (mean) mu as: %.4f seconds" + ) + % analytic_T(posterior_mean.item()) + ) + + """ + ################## EXERCISE ################### + # vectorize the computations in this example! # + ############################################### + """ + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser(description="parse args") + parser.add_argument("-n", "--num-samples", default=500, type=int) + args = parser.parse_args() + main(args) diff --git a/pyro/source/examples/lda.py b/pyro/source/examples/lda.py new file mode 100644 index 0000000000000000000000000000000000000000..00d3ac3bef0a2d4e541d84a1a7313416b9dbbe4d --- /dev/null +++ b/pyro/source/examples/lda.py @@ -0,0 +1,169 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +This example implements amortized Latent Dirichlet Allocation [1], +demonstrating how to marginalize out discrete assignment variables in a Pyro +model. This model and inference algorithm treat documents as vectors of +categorical variables (vectors of word ids), and collapses word-topic +assignments using Pyro's enumeration. We use PyTorch's reparametrized Gamma and +Dirichlet distributions [2], avoiding the need for Laplace approximations as in +[1]. Following [1] we use the Adam optimizer and clip gradients. + +**References:** + +[1] Akash Srivastava, Charles Sutton. ICLR 2017. + "Autoencoding Variational Inference for Topic Models" + https://arxiv.org/pdf/1703.01488.pdf +[2] Martin Jankowiak, Fritz Obermeyer. ICML 2018. + "Pathwise gradients beyond the reparametrization trick" + https://arxiv.org/pdf/1806.01851.pdf +""" +import argparse +import functools +import logging + +import torch +from torch import nn +from torch.distributions import constraints + +import pyro +import pyro.distributions as dist +from pyro.infer import SVI, JitTraceEnum_ELBO, TraceEnum_ELBO +from pyro.optim import ClippedAdam + +logging.basicConfig(format="%(relativeCreated) 9d %(message)s", level=logging.INFO) + + +# This is a fully generative model of a batch of documents. +# data is a [num_words_per_doc, num_documents] shaped array of word ids +# (specifically it is not a histogram). We assume in this simple example +# that all documents have the same number of words. +def model(data=None, args=None, batch_size=None): + # Globals. + with pyro.plate("topics", args.num_topics): + topic_weights = pyro.sample( + "topic_weights", dist.Gamma(1.0 / args.num_topics, 1.0) + ) + topic_words = pyro.sample( + "topic_words", dist.Dirichlet(torch.ones(args.num_words) / args.num_words) + ) + + # Locals. + with pyro.plate("documents", args.num_docs) as ind: + if data is not None: + with pyro.util.ignore_jit_warnings(): + assert data.shape == (args.num_words_per_doc, args.num_docs) + data = data[:, ind] + doc_topics = pyro.sample("doc_topics", dist.Dirichlet(topic_weights)) + with pyro.plate("words", args.num_words_per_doc): + # The word_topics variable is marginalized out during inference, + # achieved by specifying infer={"enumerate": "parallel"} and using + # TraceEnum_ELBO for inference. Thus we can ignore this variable in + # the guide. + word_topics = pyro.sample( + "word_topics", + dist.Categorical(doc_topics), + infer={"enumerate": "parallel"}, + ) + data = pyro.sample( + "doc_words", dist.Categorical(topic_words[word_topics]), obs=data + ) + + return topic_weights, topic_words, data + + +# We will use amortized inference of the local topic variables, achieved by a +# multi-layer perceptron. We'll wrap the guide in an nn.Module. +def make_predictor(args): + layer_sizes = ( + [args.num_words] + + [int(s) for s in args.layer_sizes.split("-")] + + [args.num_topics] + ) + logging.info("Creating MLP with sizes {}".format(layer_sizes)) + layers = [] + for in_size, out_size in zip(layer_sizes, layer_sizes[1:]): + layer = nn.Linear(in_size, out_size) + layer.weight.data.normal_(0, 0.001) + layer.bias.data.normal_(0, 0.001) + layers.append(layer) + layers.append(nn.Sigmoid()) + layers.append(nn.Softmax(dim=-1)) + return nn.Sequential(*layers) + + +def parametrized_guide(predictor, data, args, batch_size=None): + # Use a conjugate guide for global variables. + topic_weights_posterior = pyro.param( + "topic_weights_posterior", + lambda: torch.ones(args.num_topics), + constraint=constraints.positive, + ) + topic_words_posterior = pyro.param( + "topic_words_posterior", + lambda: torch.ones(args.num_topics, args.num_words), + constraint=constraints.greater_than(0.5), + ) + with pyro.plate("topics", args.num_topics): + pyro.sample("topic_weights", dist.Gamma(topic_weights_posterior, 1.0)) + pyro.sample("topic_words", dist.Dirichlet(topic_words_posterior)) + + # Use an amortized guide for local variables. + pyro.module("predictor", predictor) + with pyro.plate("documents", args.num_docs, batch_size) as ind: + data = data[:, ind] + # The neural network will operate on histograms rather than word + # index vectors, so we'll convert the raw data to a histogram. + counts = torch.zeros(args.num_words, ind.size(0)).scatter_add( + 0, data, torch.ones(data.shape) + ) + doc_topics = predictor(counts.transpose(0, 1)) + pyro.sample("doc_topics", dist.Delta(doc_topics, event_dim=1)) + + +def main(args): + logging.info("Generating data") + pyro.set_rng_seed(0) + pyro.clear_param_store() + + # We can generate synthetic data directly by calling the model. + true_topic_weights, true_topic_words, data = model(args=args) + + # We'll train using SVI. + logging.info("-" * 40) + logging.info("Training on {} documents".format(args.num_docs)) + predictor = make_predictor(args) + guide = functools.partial(parametrized_guide, predictor) + Elbo = JitTraceEnum_ELBO if args.jit else TraceEnum_ELBO + elbo = Elbo(max_plate_nesting=2) + optim = ClippedAdam( + {"lr": args.learning_rate, "centered_variance": args.centered_variance} + ) + svi = SVI(model, guide, optim, elbo) + logging.info("Step\tLoss") + for step in range(args.num_steps): + loss = svi.step(data, args=args, batch_size=args.batch_size) + if step % 10 == 0: + logging.info("{: >5d}\t{}".format(step, loss)) + loss = elbo.loss(model, guide, data, args=args) + logging.info("final loss = {}".format(loss)) + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser( + description="Amortized Latent Dirichlet Allocation" + ) + parser.add_argument("-t", "--num-topics", default=8, type=int) + parser.add_argument("-w", "--num-words", default=1024, type=int) + parser.add_argument("-d", "--num-docs", default=1000, type=int) + parser.add_argument("-wd", "--num-words-per-doc", default=64, type=int) + parser.add_argument("-n", "--num-steps", default=1000, type=int) + parser.add_argument("-l", "--layer-sizes", default="100-100") + parser.add_argument("-lr", "--learning-rate", default=0.01, type=float) + parser.add_argument("-cv", "--centered-variance", default=False, type=bool) + parser.add_argument("-b", "--batch-size", default=32, type=int) + parser.add_argument("--jit", action="store_true") + args = parser.parse_args() + main(args) diff --git a/pyro/source/examples/lkj.py b/pyro/source/examples/lkj.py new file mode 100644 index 0000000000000000000000000000000000000000..9b659508ce1710eb7ae53cd06ed0d4b85748d461 --- /dev/null +++ b/pyro/source/examples/lkj.py @@ -0,0 +1,77 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import argparse + +import torch + +import pyro +import pyro.distributions as dist +from pyro.infer.mcmc import NUTS +from pyro.infer.mcmc.api import MCMC + +""" +This simple example is intended to demonstrate how to use an LKJ prior with +a multivariate distribution. + +It generates entirely random, uncorrelated data, and then attempts to fit a correlation matrix +and vector of variances. +""" + + +def model(y): + d = y.shape[1] + N = y.shape[0] + options = dict(dtype=y.dtype, device=y.device) + # Vector of variances for each of the d variables + theta = pyro.sample("theta", dist.HalfCauchy(torch.ones(d, **options))) + # Lower cholesky factor of a correlation matrix + concentration = torch.ones( + (), **options + ) # Implies a uniform distribution over correlation matrices + L_omega = pyro.sample("L_omega", dist.LKJCholesky(d, concentration)) + # Lower cholesky factor of the covariance matrix + L_Omega = torch.mm(torch.diag(theta.sqrt()), L_omega) + # For inference with SVI, one might prefer to use torch.bmm(theta.sqrt().diag_embed(), L_omega) + + # Vector of expectations + mu = torch.zeros(d, **options) + + with pyro.plate("observations", N): + obs = pyro.sample("obs", dist.MultivariateNormal(mu, scale_tril=L_Omega), obs=y) + return obs + + +def main(args): + y = torch.randn(args.n, args.num_variables).to(dtype=torch.double) + if args.cuda: + y = y.cuda() + nuts_kernel = NUTS(model, jit_compile=False, step_size=1e-5) + MCMC( + nuts_kernel, + num_samples=args.num_samples, + warmup_steps=args.warmup_steps, + num_chains=args.num_chains, + ).run(y) + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser(description="Demonstrate the use of an LKJ Prior") + parser.add_argument("--num-samples", nargs="?", default=200, type=int) + parser.add_argument("--n", nargs="?", default=500, type=int) + parser.add_argument("--num-chains", nargs="?", default=4, type=int) + parser.add_argument("--num-variables", nargs="?", default=5, type=int) + parser.add_argument("--warmup-steps", nargs="?", default=100, type=int) + parser.add_argument("--rng_seed", nargs="?", default=0, type=int) + parser.add_argument("--cuda", action="store_true", default=False) + args = parser.parse_args() + + pyro.set_rng_seed(args.rng_seed) + # Enable validation checks + + # work around with the error "RuntimeError: received 0 items of ancdata" + # see https://discuss.pytorch.org/t/received-0-items-of-ancdata-pytorch-0-4-0/19823 + torch.multiprocessing.set_sharing_strategy("file_system") + + main(args) diff --git a/pyro/source/examples/minipyro.py b/pyro/source/examples/minipyro.py new file mode 100644 index 0000000000000000000000000000000000000000..75164562bcab5c545136bc8270f480203dec4507 --- /dev/null +++ b/pyro/source/examples/minipyro.py @@ -0,0 +1,75 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +This example demonstrates the functionality of `pyro.contrib.minipyro`, +which is a minimal implementation of the Pyro Probabilistic Programming +Language that was created for didactic purposes. +""" + +import argparse + +import torch + +# We use the pyro.generic interface to support dynamic choice of backend. +from pyro.generic import distributions as dist +from pyro.generic import infer, ops, optim, pyro, pyro_backend + + +def main(args): + # Define a basic model with a single Normal latent random variable `loc` + # and a batch of Normally distributed observations. + def model(data): + loc = pyro.sample("loc", dist.Normal(0.0, 1.0)) + with pyro.plate("data", len(data), dim=-1): + pyro.sample("obs", dist.Normal(loc, 1.0), obs=data) + + # Define a guide (i.e. variational distribution) with a Normal + # distribution over the latent random variable `loc`. + def guide(data): + guide_loc = pyro.param("guide_loc", torch.tensor(0.0)) + guide_scale = ops.exp(pyro.param("guide_scale_log", torch.tensor(0.0))) + pyro.sample("loc", dist.Normal(guide_loc, guide_scale)) + + # Generate some data. + torch.manual_seed(0) + data = torch.randn(100) + 3.0 + + # Because the API in minipyro matches that of Pyro proper, + # training code works with generic Pyro implementations. + with pyro_backend(args.backend): + # Construct an SVI object so we can do variational inference on our + # model/guide pair. + Elbo = infer.JitTrace_ELBO if args.jit else infer.Trace_ELBO + elbo = Elbo() + adam = optim.Adam({"lr": args.learning_rate}) + svi = infer.SVI(model, guide, adam, elbo) + + # Basic training loop + pyro.get_param_store().clear() + for step in range(args.num_steps): + loss = svi.step(data) + if step % 100 == 0: + print("step {} loss = {}".format(step, loss)) + + # Report the final values of the variational parameters + # in the guide after training. + for name in pyro.get_param_store(): + value = pyro.param(name) + print("{} = {}".format(name, value.detach().cpu().numpy())) + + # For this simple (conjugate) model we know the exact posterior. In + # particular we know that the variational distribution should be + # centered near 3.0. So let's check this explicitly. + assert (pyro.param("guide_loc") - 3.0).abs() < 0.1 + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser(description="Mini Pyro demo") + parser.add_argument("-b", "--backend", default="minipyro") + parser.add_argument("-n", "--num-steps", default=1001, type=int) + parser.add_argument("-lr", "--learning-rate", default=0.02, type=float) + parser.add_argument("--jit", action="store_true") + args = parser.parse_args() + main(args) diff --git a/pyro/source/examples/mixed_hmm/README.md b/pyro/source/examples/mixed_hmm/README.md new file mode 100644 index 0000000000000000000000000000000000000000..380d9d641b223ccb176310438dac156cb16b7276 --- /dev/null +++ b/pyro/source/examples/mixed_hmm/README.md @@ -0,0 +1,50 @@ + + +# Hierarchical mixed-effect hidden Markov models + +Note: This is a cleaned-up version of the seal experiments in [Bingham et al 2019] that is a simplified variant of some of the analysis in the [momentuHMM harbour seal example](https://github.com/bmcclintock/momentuHMM/blob/master/vignettes/harbourSealExample.R) [McClintock et al 2018]. + +Recent advances in sensor technology have made it possible to capture the movements of multiple wild animals within a single population at high spatiotemporal resolution over long periods of time [McClintock et al 2013, Towner et al 2016]. Discrete state-space models, where the latent state is thought of as corresponding to a behavior state such as "foraging" or "resting", have become popular computational tools for analyzing these new datasets thanks to their interpretability and tractability. + +This example applies several different hierarchical discrete state-space models to location data recorded from a colony of harbour seals on foraging excursions in the North Sea [McClintock et al 2013]. +The raw data are irregularly sampled time series (roughly 5-15 minutes between samples) of GPS coordinates and diving activity for each individual in the colony (10 male and 7 female) over the course of a single day recorded by lightweight tracking devices physically attached to each animal by researchers. They have been preprocessed using the momentuHMM example code into smoothed, temporally regular series of step sizes, turn angles, and diving activity for each individual. + +The models are special cases of a time-inhomogeneous discrete state space model +whose state transition distribution is specified by a hierarchical generalized linear mixed model (GLMM). +At each timestep `t`, for each individual trajectory `b` in each group `a`, we have + +``` +logit(p(x[t,a,b] = state i | x[t-1,a,b] = state j)) = + (epsilon_G[a] + epsilon_I[a,b] + Z_I[a,b].T @ beta1 + Z_G[a].T @ beta2 + Z_T[t,a,b].T @ beta3)[i,j] +``` + +where `a,b` correspond to plate indices, `epsilon_G` and `epsilon_I` are independent random variables for each group and individual within each group respectively, `Z`s are covariates, and `beta`s are parameter vectors. + +The random variables `epsilon` may be either discrete or continuous. +If continuous, they are normally distributed. +If discrete, they are sampled from a set of three possible values shared across the innermost plate of a particular variable. +That is, for each individual trajectory `b` in each group `a`, we sample single random effect values for an entire trajectory: + +``` +iota_G[a] ~ Categorical(pi_G) +epsilon_G[a] = Theta_G[iota_G[a]] +iota_I[a,b] ~ Categorical(pi_I[a]) +epsilon_I[a,b] = Theta_I[a][iota_I[a,b]] +``` + +Here `pi_G`, `Theta_G`, `pi_I`, and `Theta_I` are all learnable real-valued parameter vectors and `epsilon` values are batches of vectors the size of state transition matrices. + +Observations `y[t,a,b]` are represented as sequences of real-valued step lengths and turn angles, modelled by zero-inflated Gamma and von Mises likelihoods respectively. +The seal models also include a third observed variable indicating the amount of diving activity between successive locations, which we model with a zero-inflated Beta distribution following [McClintock et al 2018]. + +We grouped animals by sex and implemented versions of this model with (i) no random effects (as a baseline), and with random effects present at the (ii) group, (iii) individual, or (iv) group+individual levels. Unlike the models in [Towner et al 2016], we do not consider fixed effects on any of the parameters. + +# References +* [Obermeyer et al 2019] Obermeyer, F.\*, Bingham, E.\*, Jankowiak, M.\*, Chiu, J., Pradhan, N., Rush, A., and Goodman, N. Tensor Variable Elimination for Plated Factor Graphs, 2019 +* [McClintock et al 2013] McClintock, B. T., Russell, D. J., Matthiopoulos, J., and King, R. Combining individual animal movement and ancillary biotelemetry data to investigate population-level activity budgets. Ecology, 94(4):838–849, 2013 +* [McClintock et al 2018] McClintock, B. T. and Michelot,T. momentuhmm: R package for generalized hidden markov models of animal movement. Methods in Ecology and Evolution, 9(6): 1518–1530, 2018. doi: 10.1111/2041-210X.12995 +* [Towner et al 2016] Towner, A. V., Leos-Barajas, V., Langrock, R., Schick, R. S., Smale, M. J., Kaschke, T., Jewell, O. J., and Papastamatiou, Y. P. Sex-specific and individual preferences for hunting strategies in white sharks. Functional Ecology, 30(8):1397–1407, 2016. diff --git a/pyro/source/examples/mixed_hmm/__init__.py b/pyro/source/examples/mixed_hmm/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/examples/mixed_hmm/experiment.py b/pyro/source/examples/mixed_hmm/experiment.py new file mode 100644 index 0000000000000000000000000000000000000000..460a5122a2caa41bac2dff09292522cada9c1dc1 --- /dev/null +++ b/pyro/source/examples/mixed_hmm/experiment.py @@ -0,0 +1,180 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import argparse +import functools +import json +import os +import uuid + +import torch +from model import guide_generic, model_generic +from seal_data import prepare_seal + +import pyro +import pyro.poutine as poutine +from pyro.infer import TraceEnum_ELBO + + +def aic_num_parameters(model, guide=None): + """ + hacky AIC param count that includes all parameters in the model and guide + """ + + def _size(tensor): + """product of shape""" + s = 1 + for d in tensor.shape: + s = s * d + return s + + with poutine.block(), poutine.trace(param_only=True) as param_capture: + TraceEnum_ELBO(max_plate_nesting=2).differentiable_loss(model, guide) + + return sum(_size(node["value"]) for node in param_capture.trace.nodes.values()) + + +def run_expt(args): + data_dir = args["folder"] + dataset = "seal" # args["dataset"] + seed = args["seed"] + optim = args["optim"] + lr = args["learnrate"] + timesteps = args["timesteps"] + schedule = ( + [] if not args["schedule"] else [int(i) for i in args["schedule"].split(",")] + ) + random_effects = {"group": args["group"], "individual": args["individual"]} + + pyro.set_rng_seed(seed) # reproducible random effect parameter init + + filename = os.path.join(data_dir, "prep_seal_data.csv") + config = prepare_seal(filename, random_effects) + + model = functools.partial(model_generic, config) # for JITing + guide = functools.partial(guide_generic, config) + + # count the number of parameters once + num_parameters = aic_num_parameters(model, guide) + + losses = [] + # SGD + if optim == "sgd": + loss_fn = TraceEnum_ELBO(max_plate_nesting=2).differentiable_loss + with pyro.poutine.trace(param_only=True) as param_capture: + loss_fn(model, guide) + params = [ + site["value"].unconstrained() for site in param_capture.trace.nodes.values() + ] + optimizer = torch.optim.Adam(params, lr=lr) + + if schedule: + scheduler = torch.optim.lr_scheduler.MultiStepLR( + optimizer, milestones=schedule, gamma=0.5 + ) + schedule_step_loss = False + else: + scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, "min") + schedule_step_loss = True + + for t in range(timesteps): + optimizer.zero_grad() + loss = loss_fn(model, guide) + loss.backward() + optimizer.step() + scheduler.step(loss.item() if schedule_step_loss else t) + losses.append(loss.item()) + + print( + "Loss: {}, AIC[{}]: ".format(loss.item(), t), + 2.0 * loss + 2.0 * num_parameters, + ) + + # LBFGS + elif optim == "lbfgs": + loss_fn = TraceEnum_ELBO(max_plate_nesting=2).differentiable_loss + with pyro.poutine.trace(param_only=True) as param_capture: + loss_fn(model, guide) + params = [ + site["value"].unconstrained() for site in param_capture.trace.nodes.values() + ] + optimizer = torch.optim.LBFGS(params, lr=lr) + + if schedule: + scheduler = torch.optim.lr_scheduler.MultiStepLR( + optimizer, milestones=schedule, gamma=0.5 + ) + schedule_step_loss = False + else: + schedule_step_loss = True + scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, "min") + + for t in range(timesteps): + + def closure(): + optimizer.zero_grad() + loss = loss_fn(model, guide) + loss.backward() + return loss + + loss = optimizer.step(closure) + scheduler.step(loss.item() if schedule_step_loss else t) + losses.append(loss.item()) + print( + "Loss: {}, AIC[{}]: ".format(loss.item(), t), + 2.0 * loss + 2.0 * num_parameters, + ) + + else: + raise ValueError("{} not supported optimizer".format(optim)) + + aic_final = 2.0 * losses[-1] + 2.0 * num_parameters + print("AIC final: {}".format(aic_final)) + + results = {} + results["args"] = args + results["sizes"] = config["sizes"] + results["likelihoods"] = losses + results["likelihood_final"] = losses[-1] + results["aic_final"] = aic_final + results["aic_num_parameters"] = num_parameters + + if args["resultsdir"] is not None and os.path.exists(args["resultsdir"]): + re_str = "g" + ( + "n" + if args["group"] is None + else "d" if args["group"] == "discrete" else "c" + ) + re_str += "i" + ( + "n" + if args["individual"] is None + else "d" if args["individual"] == "discrete" else "c" + ) + results_filename = "expt_{}_{}_{}.json".format( + dataset, re_str, str(uuid.uuid4().hex)[0:5] + ) + with open(os.path.join(args["resultsdir"], results_filename), "w") as f: + json.dump(results, f) + + return results + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("-g", "--group", default="none", type=str) + parser.add_argument("-i", "--individual", default="none", type=str) + parser.add_argument("-f", "--folder", default="./", type=str) + parser.add_argument("-o", "--optim", default="sgd", type=str) + parser.add_argument("-lr", "--learnrate", default=0.05, type=float) + parser.add_argument("-t", "--timesteps", default=1000, type=int) + parser.add_argument("-r", "--resultsdir", default="./results", type=str) + parser.add_argument("-s", "--seed", default=101, type=int) + parser.add_argument("--schedule", default="", type=str) + args = parser.parse_args() + + if args.group == "none": + args.group = None + if args.individual == "none": + args.individual = None + + run_expt(vars(args)) diff --git a/pyro/source/examples/mixed_hmm/model.py b/pyro/source/examples/mixed_hmm/model.py new file mode 100644 index 0000000000000000000000000000000000000000..1a87c23e65bc291df49b391fad9d8118b979f60e --- /dev/null +++ b/pyro/source/examples/mixed_hmm/model.py @@ -0,0 +1,272 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions import constraints + +import pyro +import pyro.distributions as dist +from pyro import poutine +from pyro.infer import config_enumerate +from pyro.ops.indexing import Vindex + + +def guide_generic(config): + """generic mean-field guide for continuous random effects""" + N_state = config["sizes"]["state"] + + if config["group"]["random"] == "continuous": + loc_g = pyro.param("loc_group", lambda: torch.zeros((N_state**2,))) + scale_g = pyro.param( + "scale_group", + lambda: torch.ones((N_state**2,)), + constraint=constraints.positive, + ) + + # initialize individual-level random effect parameters + N_c = config["sizes"]["group"] + if config["individual"]["random"] == "continuous": + loc_i = pyro.param( + "loc_individual", + lambda: torch.zeros( + ( + N_c, + N_state**2, + ) + ), + ) + scale_i = pyro.param( + "scale_individual", + lambda: torch.ones( + ( + N_c, + N_state**2, + ) + ), + constraint=constraints.positive, + ) + + N_c = config["sizes"]["group"] + with pyro.plate("group", N_c, dim=-1): + if config["group"]["random"] == "continuous": + pyro.sample( + "eps_g", + dist.Normal(loc_g, scale_g).to_event(1), + ) # infer={"num_samples": 10}) + + N_s = config["sizes"]["individual"] + with pyro.plate("individual", N_s, dim=-2), poutine.mask( + mask=config["individual"]["mask"] + ): + # individual-level random effects + if config["individual"]["random"] == "continuous": + pyro.sample( + "eps_i", + dist.Normal(loc_i, scale_i).to_event(1), + ) # infer={"num_samples": 10}) + + +@config_enumerate +def model_generic(config): + """Hierarchical mixed-effects hidden markov model""" + + MISSING = config["MISSING"] + N_v = config["sizes"]["random"] + N_state = config["sizes"]["state"] + + # initialize group-level random effect parameterss + if config["group"]["random"] == "discrete": + probs_e_g = pyro.param( + "probs_e_group", + lambda: torch.randn((N_v,)).abs(), + constraint=constraints.simplex, + ) + theta_g = pyro.param("theta_group", lambda: torch.randn((N_v, N_state**2))) + elif config["group"]["random"] == "continuous": + loc_g = torch.zeros((N_state**2,)) + scale_g = torch.ones((N_state**2,)) + + # initialize individual-level random effect parameters + N_c = config["sizes"]["group"] + if config["individual"]["random"] == "discrete": + probs_e_i = pyro.param( + "probs_e_individual", + lambda: torch.randn( + ( + N_c, + N_v, + ) + ).abs(), + constraint=constraints.simplex, + ) + theta_i = pyro.param( + "theta_individual", lambda: torch.randn((N_c, N_v, N_state**2)) + ) + elif config["individual"]["random"] == "continuous": + loc_i = torch.zeros( + ( + N_c, + N_state**2, + ) + ) + scale_i = torch.ones( + ( + N_c, + N_state**2, + ) + ) + + # initialize likelihood parameters + # observation 1: step size (step ~ Gamma) + step_zi_param = pyro.param("step_zi_param", lambda: torch.ones((N_state, 2))) + step_concentration = pyro.param( + "step_param_concentration", + lambda: torch.randn((N_state,)).abs(), + constraint=constraints.positive, + ) + step_rate = pyro.param( + "step_param_rate", + lambda: torch.randn((N_state,)).abs(), + constraint=constraints.positive, + ) + + # observation 2: step angle (angle ~ VonMises) + angle_concentration = pyro.param( + "angle_param_concentration", + lambda: torch.randn((N_state,)).abs(), + constraint=constraints.positive, + ) + angle_loc = pyro.param("angle_param_loc", lambda: torch.randn((N_state,)).abs()) + + # observation 3: dive activity (omega ~ Beta) + omega_zi_param = pyro.param("omega_zi_param", lambda: torch.ones((N_state, 2))) + omega_concentration0 = pyro.param( + "omega_param_concentration0", + lambda: torch.randn((N_state,)).abs(), + constraint=constraints.positive, + ) + omega_concentration1 = pyro.param( + "omega_param_concentration1", + lambda: torch.randn((N_state,)).abs(), + constraint=constraints.positive, + ) + + # initialize gamma to uniform + gamma = torch.zeros((N_state**2,)) + + N_c = config["sizes"]["group"] + with pyro.plate("group", N_c, dim=-1): + # group-level random effects + if config["group"]["random"] == "discrete": + # group-level discrete effect + e_g = pyro.sample("e_g", dist.Categorical(probs_e_g)) + eps_g = Vindex(theta_g)[..., e_g, :] + elif config["group"]["random"] == "continuous": + eps_g = pyro.sample( + "eps_g", + dist.Normal(loc_g, scale_g).to_event(1), + ) # infer={"num_samples": 10}) + else: + eps_g = 0.0 + + # add group-level random effect to gamma + gamma = gamma + eps_g + + N_s = config["sizes"]["individual"] + with pyro.plate("individual", N_s, dim=-2), poutine.mask( + mask=config["individual"]["mask"] + ): + # individual-level random effects + if config["individual"]["random"] == "discrete": + # individual-level discrete effect + e_i = pyro.sample("e_i", dist.Categorical(probs_e_i)) + eps_i = Vindex(theta_i)[..., e_i, :] + # assert eps_i.shape[-3:] == (1, N_c, N_state ** 2) and eps_i.shape[0] == N_v + elif config["individual"]["random"] == "continuous": + eps_i = pyro.sample( + "eps_i", + dist.Normal(loc_i, scale_i).to_event(1), + ) # infer={"num_samples": 10}) + else: + eps_i = 0.0 + + # add individual-level random effect to gamma + gamma = gamma + eps_i + + y = torch.tensor(0).long() + + N_t = config["sizes"]["timesteps"] + for t in pyro.markov(range(N_t)): + with poutine.mask(mask=config["timestep"]["mask"][..., t]): + gamma_t = gamma # per-timestep variable + + # finally, reshape gamma as batch of transition matrices + gamma_t = gamma_t.reshape( + tuple(gamma_t.shape[:-1]) + (N_state, N_state) + ) + + # we've accounted for all effects, now actually compute gamma_y + gamma_y = Vindex(gamma_t)[..., y, :] + y = pyro.sample("y_{}".format(t), dist.Categorical(logits=gamma_y)) + + # observation 1: step size + step_dist = dist.Gamma( + concentration=Vindex(step_concentration)[..., y], + rate=Vindex(step_rate)[..., y], + ) + + # zero-inflation with MaskedMixture + step_zi = Vindex(step_zi_param)[..., y, :] + step_zi_mask = config["observations"]["step"][..., t] == MISSING + pyro.sample( + "step_zi_{}".format(t), + dist.Categorical(logits=step_zi), + obs=step_zi_mask.long(), + ) + step_zi_zero_dist = dist.Delta(v=torch.tensor(MISSING)) + step_zi_dist = dist.MaskedMixture( + step_zi_mask, step_dist, step_zi_zero_dist + ) + + pyro.sample( + "step_{}".format(t), + step_zi_dist, + obs=config["observations"]["step"][..., t], + ) + + # observation 2: step angle + angle_dist = dist.VonMises( + concentration=Vindex(angle_concentration)[..., y], + loc=Vindex(angle_loc)[..., y], + ) + pyro.sample( + "angle_{}".format(t), + angle_dist, + obs=config["observations"]["angle"][..., t], + ) + + # observation 3: dive activity + omega_dist = dist.Beta( + concentration0=Vindex(omega_concentration0)[..., y], + concentration1=Vindex(omega_concentration1)[..., y], + ) + + # zero-inflation with MaskedMixture + omega_zi = Vindex(omega_zi_param)[..., y, :] + omega_zi_mask = config["observations"]["omega"][..., t] == MISSING + pyro.sample( + "omega_zi_{}".format(t), + dist.Categorical(logits=omega_zi), + obs=omega_zi_mask.long(), + ) + + omega_zi_zero_dist = dist.Delta(v=torch.tensor(MISSING)) + omega_zi_dist = dist.MaskedMixture( + omega_zi_mask, omega_dist, omega_zi_zero_dist + ) + + pyro.sample( + "omega_{}".format(t), + omega_zi_dist, + obs=config["observations"]["omega"][..., t], + ) diff --git a/pyro/source/examples/mixed_hmm/seal_data.py b/pyro/source/examples/mixed_hmm/seal_data.py new file mode 100644 index 0000000000000000000000000000000000000000..1a6c58b575c336ab954b9a3a679a2637a112cd86 --- /dev/null +++ b/pyro/source/examples/mixed_hmm/seal_data.py @@ -0,0 +1,75 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import os +from urllib.request import urlopen + +import pandas as pd +import torch + +MISSING = 1e-6 + + +def download_seal_data(filename): + """download the preprocessed seal data and save it to filename""" + url = "https://github.com/pyro-ppl/datasets/blob/master/prep_seal_data.csv?raw=true" + with open(filename, "wb") as f: + f.write(urlopen(url).read()) + + +def prepare_seal(filename, random_effects): + if not os.path.exists(filename): + download_seal_data(filename) + + seal_df = pd.read_csv(filename) + obs_keys = ["step", "angle", "omega"] + # data format for z1, z2: + # single tensor with shape (individual, group, time, coords) + observations = torch.zeros((20, 2, 1800, len(obs_keys))).fill_(float("-inf")) + for g, (group, group_df) in enumerate(seal_df.groupby("sex")): + for i, (ind, ind_df) in enumerate(group_df.groupby("ID")): + for o, obs_key in enumerate(obs_keys): + observations[i, g, 0 : len(ind_df), o] = torch.tensor( + ind_df[obs_key].values + ) + + observations[torch.isnan(observations)] = float("-inf") + + # make masks + # mask_i should mask out individuals, it applies at all timesteps + mask_i = (observations > float("-inf")).any(dim=-1).any(dim=-1) # time nonempty + + # mask_t handles padding for time series of different length + mask_t = (observations > float("-inf")).all(dim=-1) # include non-inf + + # temporary hack to avoid zero-inflation issues + # observations[observations == 0.] = MISSING + observations[(observations == 0.0) | (observations == float("-inf"))] = MISSING + assert not torch.isnan(observations).any() + + # observations = observations[..., 5:11, :] # truncate for testing + + config = { + "MISSING": MISSING, + "sizes": { + "state": 3, + "random": 4, + "group": observations.shape[1], + "individual": observations.shape[0], + "timesteps": observations.shape[2], + }, + "group": {"random": random_effects["group"], "fixed": None}, + "individual": { + "random": random_effects["individual"], + "fixed": None, + "mask": mask_i, + }, + "timestep": {"random": None, "fixed": None, "mask": mask_t}, + "observations": { + "step": observations[..., 0], + "angle": observations[..., 1], + "omega": observations[..., 2], + }, + } + + return config diff --git a/pyro/source/examples/neutra.py b/pyro/source/examples/neutra.py new file mode 100644 index 0000000000000000000000000000000000000000..182742870578c467ad2fd70356895f70cfe67187 --- /dev/null +++ b/pyro/source/examples/neutra.py @@ -0,0 +1,282 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +""" +This example illustrates the use of `NeuTraReparam` to run neural transport HMC [1] +on a toy model that draws from a banana-shaped bivariate distribution [2]. We first +train an autoguide by using `AutoNormalizingFlow` that learns a transformation from +a simple latent space (isotropic gaussian) to the more complex geometry of the +posterior. Subsequently, we use `NeuTraReparam` to run HMC and draw samples from this +simplified "warped" posterior. Finally, we use our learnt transformation to transform +these samples back to the original space. For comparison, we also draw samples from +a NeuTra-reparametrized model that uses a much simpler `AutoDiagonalNormal` guide. + +References: +---------- +[1] Hoffman, M., Sountsov, P., Dillon, J. V., Langmore, I., Tran, D., and Vasudevan, + S. Neutra-lizing bad geometry in hamiltonian monte carlo using neural transport. + arXiv preprint arXiv:1903.03704, 2019. +[2] Wang Z., Broccardo M., and Song J. Hamiltonian Monte Carlo Methods for Subset + Simulation in Reliability Analysis. arXiv preprint arXiv:1706.01435, 2018. +""" + +import argparse +import logging +import os +from functools import partial + +import matplotlib.pyplot as plt +import seaborn as sns +import torch +from matplotlib.gridspec import GridSpec +from torch.distributions.utils import broadcast_all + +import pyro +import pyro.distributions as dist +from pyro import optim, poutine +from pyro.distributions import constraints +from pyro.distributions.transforms import block_autoregressive, iterated +from pyro.infer import MCMC, NUTS, SVI, Trace_ELBO +from pyro.infer.autoguide import AutoDiagonalNormal, AutoNormalizingFlow +from pyro.infer.reparam import NeuTraReparam + +logging.basicConfig(format="%(message)s", level=logging.INFO) + + +class BananaShaped(dist.TorchDistribution): + arg_constraints = {"a": constraints.positive, "b": constraints.real} + support = constraints.real_vector + + def __init__(self, a, b, rho=0.9): + self.a, self.b, self.rho = broadcast_all(a, b, rho) + self.mvn = dist.MultivariateNormal( + torch.tensor([0.0, 0.0]), + covariance_matrix=torch.tensor([[1.0, self.rho], [self.rho, 1.0]]), + ) + super().__init__(event_shape=(2,)) + + def sample(self, sample_shape=()): + u = self.mvn.sample(sample_shape) + u0, u1 = u[..., 0], u[..., 1] + a, b = self.a, self.b + x = a * u0 + y = (u1 / a) + b * (u0**2 + a**2) + return torch.stack([x, y], -1) + + def log_prob(self, x): + x, y = x[..., 0], x[..., 1] + a, b = self.a, self.b + u0 = x / a + u1 = (y - b * (u0**2 + a**2)) * a + return self.mvn.log_prob(torch.stack([u0, u1], dim=-1)) + + +def model(a, b, rho=0.9): + pyro.sample("x", BananaShaped(a, b, rho)) + + +def fit_guide(guide, args): + pyro.clear_param_store() + adam = optim.Adam({"lr": args.learning_rate}) + svi = SVI(model, guide, adam, Trace_ELBO()) + for i in range(args.num_steps): + loss = svi.step(args.param_a, args.param_b) + if i % 500 == 0: + logging.info("[{}]Elbo loss = {:.2f}".format(i, loss)) + + +def run_hmc(args, model): + nuts_kernel = NUTS(model) + mcmc = MCMC(nuts_kernel, warmup_steps=args.num_warmup, num_samples=args.num_samples) + mcmc.run(args.param_a, args.param_b) + mcmc.summary() + return mcmc + + +def main(args): + pyro.set_rng_seed(args.rng_seed) + fig = plt.figure(figsize=(8, 16), constrained_layout=True) + gs = GridSpec(4, 2, figure=fig) + ax1 = fig.add_subplot(gs[0, 0]) + ax2 = fig.add_subplot(gs[0, 1]) + ax3 = fig.add_subplot(gs[1, 0]) + ax4 = fig.add_subplot(gs[2, 0]) + ax5 = fig.add_subplot(gs[3, 0]) + ax6 = fig.add_subplot(gs[1, 1]) + ax7 = fig.add_subplot(gs[2, 1]) + ax8 = fig.add_subplot(gs[3, 1]) + xlim = tuple(int(x) for x in args.x_lim.strip().split(",")) + ylim = tuple(int(x) for x in args.y_lim.strip().split(",")) + assert len(xlim) == 2 + assert len(ylim) == 2 + + # 1. Plot samples drawn from BananaShaped distribution + x1, x2 = torch.meshgrid([torch.linspace(*xlim, 100), torch.linspace(*ylim, 100)]) + d = BananaShaped(args.param_a, args.param_b) + p = torch.exp(d.log_prob(torch.stack([x1, x2], dim=-1))) + ax1.contourf( + x1, + x2, + p, + cmap="OrRd", + ) + ax1.set( + xlabel="x0", + ylabel="x1", + xlim=xlim, + ylim=ylim, + title="BananaShaped distribution: \nlog density", + ) + + # 2. Run vanilla HMC + logging.info("\nDrawing samples using vanilla HMC ...") + mcmc = run_hmc(args, model) + vanilla_samples = mcmc.get_samples()["x"].cpu().numpy() + ax2.contourf(x1, x2, p, cmap="OrRd") + ax2.set( + xlabel="x0", + ylabel="x1", + xlim=xlim, + ylim=ylim, + title="Posterior \n(vanilla HMC)", + ) + sns.kdeplot(x=vanilla_samples[:, 0], y=vanilla_samples[:, 1], ax=ax2) + + # 3(a). Fit a diagonal normal autoguide + logging.info("\nFitting a DiagNormal autoguide ...") + guide = AutoDiagonalNormal(model, init_scale=0.05) + fit_guide(guide, args) + with pyro.plate("N", args.num_samples): + guide_samples = guide()["x"].detach().cpu().numpy() + + ax3.contourf(x1, x2, p, cmap="OrRd") + ax3.set( + xlabel="x0", + ylabel="x1", + xlim=xlim, + ylim=ylim, + title="Posterior \n(DiagNormal autoguide)", + ) + sns.kdeplot(x=guide_samples[:, 0], y=guide_samples[:, 1], ax=ax3) + + # 3(b). Draw samples using NeuTra HMC + logging.info("\nDrawing samples using DiagNormal autoguide + NeuTra HMC ...") + neutra = NeuTraReparam(guide.requires_grad_(False)) + neutra_model = poutine.reparam(model, config=lambda _: neutra) + mcmc = run_hmc(args, neutra_model) + zs = mcmc.get_samples()["x_shared_latent"] + sns.scatterplot(x=zs[:, 0], y=zs[:, 1], alpha=0.2, ax=ax4) + ax4.set( + xlabel="x0", + ylabel="x1", + title="Posterior (warped) samples \n(DiagNormal + NeuTra HMC)", + ) + + samples = neutra.transform_sample(zs) + samples = samples["x"].cpu().numpy() + ax5.contourf(x1, x2, p, cmap="OrRd") + ax5.set( + xlabel="x0", + ylabel="x1", + xlim=xlim, + ylim=ylim, + title="Posterior (transformed) \n(DiagNormal + NeuTra HMC)", + ) + sns.kdeplot(x=samples[:, 0], y=samples[:, 1], ax=ax5) + + # 4(a). Fit a BNAF autoguide + logging.info("\nFitting a BNAF autoguide ...") + guide = AutoNormalizingFlow( + model, partial(iterated, args.num_flows, block_autoregressive) + ) + fit_guide(guide, args) + with pyro.plate("N", args.num_samples): + guide_samples = guide()["x"].detach().cpu().numpy() + + ax6.contourf(x1, x2, p, cmap="OrRd") + ax6.set( + xlabel="x0", + ylabel="x1", + xlim=xlim, + ylim=ylim, + title="Posterior \n(BNAF autoguide)", + ) + sns.kdeplot(x=guide_samples[:, 0], y=guide_samples[:, 1], ax=ax6) + + # 4(b). Draw samples using NeuTra HMC + logging.info("\nDrawing samples using BNAF autoguide + NeuTra HMC ...") + neutra = NeuTraReparam(guide.requires_grad_(False)) + neutra_model = poutine.reparam(model, config=lambda _: neutra) + mcmc = run_hmc(args, neutra_model) + zs = mcmc.get_samples()["x_shared_latent"] + sns.scatterplot(x=zs[:, 0], y=zs[:, 1], alpha=0.2, ax=ax7) + ax7.set( + xlabel="x0", + ylabel="x1", + title="Posterior (warped) samples \n(BNAF + NeuTra HMC)", + ) + + samples = neutra.transform_sample(zs) + samples = samples["x"].cpu().numpy() + ax8.contourf(x1, x2, p, cmap="OrRd") + ax8.set( + xlabel="x0", + ylabel="x1", + xlim=xlim, + ylim=ylim, + title="Posterior (transformed) \n(BNAF + NeuTra HMC)", + ) + sns.kdeplot(x=samples[:, 0], y=samples[:, 1], ax=ax8) + + plt.savefig(os.path.join(os.path.dirname(__file__), "neutra.pdf")) + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser( + description="Example illustrating NeuTra Reparametrizer" + ) + parser.add_argument( + "-n", "--num-steps", default=10000, type=int, help="number of SVI steps" + ) + parser.add_argument( + "-lr", + "--learning-rate", + default=1e-2, + type=float, + help="learning rate for the Adam optimizer", + ) + parser.add_argument("--rng-seed", default=1, type=int, help="RNG seed") + parser.add_argument( + "--num-warmup", default=500, type=int, help="number of warmup steps for NUTS" + ) + parser.add_argument( + "--num-samples", + default=1000, + type=int, + help="number of samples to be drawn from NUTS", + ) + parser.add_argument( + "--param-a", + default=1.15, + type=float, + help="parameter `a` of BananaShaped distribution", + ) + parser.add_argument( + "--param-b", + default=1.0, + type=float, + help="parameter `b` of BananaShaped distribution", + ) + parser.add_argument( + "--num-flows", default=1, type=int, help="number of flows in the BNAF autoguide" + ) + parser.add_argument( + "--x-lim", default="-3,3", type=str, help="x limits for the plots" + ) + parser.add_argument( + "--y-lim", default="0,8", type=str, help="y limits for the plots" + ) + + args = parser.parse_args() + main(args) diff --git a/pyro/source/examples/rsa/README.md b/pyro/source/examples/rsa/README.md new file mode 100644 index 0000000000000000000000000000000000000000..2ca69a16f4a6ed55aa761430790ad3b8999e5500 --- /dev/null +++ b/pyro/source/examples/rsa/README.md @@ -0,0 +1,17 @@ + + +## Rational Speech Acts (RSA) examples + +This folder contains examples of reasoning about reasoning with nested inference +adapted from work by @ngoodman and collaborators. + +- `generics.py`: Taken from [Probabilistic Language Understanding](https://gscontras.github.io/probLang/chapters/07-generics.html) +- `hyperbole.py`: Taken from [Probabilistic Language Understanding](https://gscontras.github.io/probLang/chapters/03-nonliteral.html) +- `schelling.py`: Taken from [ForestDB](http://forestdb.org/models/schelling.html) +- `schelling_false.py`: Taken from [ForestDB](http://forestdb.org/models/schelling-falsebelief.html) +- `search.py`: Inference algorithms used in the example models. Adapted from [Design and Implementation of Probabilistic Programming Languages](http://dippl.org/chapters/03-enumeration.html) +- `semantic_parsing.py`: Taken from [Design and Implementation of Probabilistic Programming Languages](http://dippl.org/examples/zSemanticPragmaticMashup.html) diff --git a/pyro/source/examples/rsa/generics.py b/pyro/source/examples/rsa/generics.py new file mode 100644 index 0000000000000000000000000000000000000000..e994aae2c4a4571bca2aa10c12fc54431163817e --- /dev/null +++ b/pyro/source/examples/rsa/generics.py @@ -0,0 +1,184 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +Interpreting generic statements with RSA models of pragmatics. + +Taken from: +[0] http://forestdb.org/models/generics.html +[1] https://gscontras.github.io/probLang/chapters/07-generics.html +""" + +import argparse +import collections +import numbers + +import torch +from search_inference import HashingMarginal, Search, memoize + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine + +torch.set_default_dtype(torch.float64) # double precision for numerical stability + + +def Marginal(fn): + return memoize(lambda *args: HashingMarginal(Search(fn).run(*args))) + + +####################### +# models +####################### + +# hashable params +Params = collections.namedtuple("Params", ["theta", "gamma", "delta"]) + + +def discretize_beta_pdf(bins, gamma, delta): + """ + discretized version of the Beta pdf used for approximately integrating via Search + """ + shape_alpha = gamma * delta + shape_beta = (1.0 - gamma) * delta + return torch.tensor( + list( + map( + lambda x: (x ** (shape_alpha - 1)) * ((1.0 - x) ** (shape_beta - 1)), + bins, + ) + ) + ) + + +@Marginal +def structured_prior_model(params): + propertyIsPresent = ( + pyro.sample("propertyIsPresent", dist.Bernoulli(params.theta)).item() == 1 + ) + if propertyIsPresent: + # approximately integrate over a beta by enumerating over bins + beta_bins = [0.01, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.99] + ix = pyro.sample( + "bin", + dist.Categorical( + probs=discretize_beta_pdf(beta_bins, params.gamma, params.delta) + ), + ) + return beta_bins[ix] + else: + return 0 + + +def threshold_prior(): + threshold_bins = [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9] + ix = pyro.sample( + "threshold", dist.Categorical(logits=torch.zeros(len(threshold_bins))) + ) + return threshold_bins[ix] + + +def utterance_prior(): + utterances = ["generic is true", "mu"] + ix = pyro.sample("utterance", dist.Categorical(logits=torch.zeros(len(utterances)))) + return utterances[ix] + + +def meaning(utterance, state, threshold): + if isinstance(utterance, numbers.Number): + return state == utterance + if utterance == "generic is true": + return state > threshold + if utterance == "generic is false": + return state <= threshold + if utterance == "mu": + return True + if utterance == "some": + return state > 0 + if utterance == "most": + return state >= 0.5 + if utterance == "all": + return state >= 0.99 + return True + + +@Marginal +def listener0(utterance, threshold, prior): + state = pyro.sample("state", prior) + m = meaning(utterance, state, threshold) + pyro.factor("listener0_true", 0.0 if m else -99999.0) + return state + + +@Marginal +def speaker1(state, threshold, prior): + s1Optimality = 5.0 + utterance = utterance_prior() + L0 = listener0(utterance, threshold, prior) + with poutine.scale(scale=torch.tensor(s1Optimality)): + pyro.sample("L0_score", L0, obs=state) + return utterance + + +@Marginal +def listener1(utterance, prior): + state = pyro.sample("state", prior) + threshold = threshold_prior() + S1 = speaker1(state, threshold, prior) + pyro.sample("S1_score", S1, obs=utterance) + return state + + +@Marginal +def speaker2(prevalence, prior): + utterance = utterance_prior() + wL1 = listener1(utterance, prior) + pyro.sample("wL1_score", wL1, obs=prevalence) + return utterance + + +def main(args): + hasWingsERP = structured_prior_model(Params(theta=0.5, gamma=0.99, delta=10.0)) + laysEggsERP = structured_prior_model(Params(theta=0.5, gamma=0.5, delta=10.0)) + carriesMalariaERP = structured_prior_model(Params(theta=0.1, gamma=0.01, delta=2.0)) + areFemaleERP = structured_prior_model(Params(theta=0.99, gamma=0.5, delta=50.0)) + + # listener interpretation of generics + wingsPosterior = listener1("generic is true", hasWingsERP) + malariaPosterior = listener1("generic is true", carriesMalariaERP) + eggsPosterior = listener1("generic is true", laysEggsERP) + femalePosterior = listener1("generic is true", areFemaleERP) + listeners = { + "wings": wingsPosterior, + "malaria": malariaPosterior, + "eggs": eggsPosterior, + "female": femalePosterior, + } + + for name, listener in listeners.items(): + for elt in listener.enumerate_support(): + print(name, elt, listener.log_prob(elt).exp().item()) + + # truth judgments + malariaSpeaker = speaker2(0.1, carriesMalariaERP) + eggSpeaker = speaker2(0.6, laysEggsERP) + femaleSpeaker = speaker2(0.5, areFemaleERP) + lionSpeaker = speaker2(0.01, laysEggsERP) + speakers = { + "malaria": malariaSpeaker, + "egg": eggSpeaker, + "female": femaleSpeaker, + "lion": lionSpeaker, + } + + for name, speaker in speakers.items(): + for elt in speaker.enumerate_support(): + print(name, elt, speaker.log_prob(elt).exp().item()) + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser(description="parse args") + parser.add_argument("-n", "--num-samples", default=10, type=int) + args = parser.parse_args() + main(args) diff --git a/pyro/source/examples/rsa/hyperbole.py b/pyro/source/examples/rsa/hyperbole.py new file mode 100644 index 0000000000000000000000000000000000000000..bd02f6d36547186aa898de709003062aeb264113 --- /dev/null +++ b/pyro/source/examples/rsa/hyperbole.py @@ -0,0 +1,224 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +Interpreting hyperbole with RSA models of pragmatics. + +Taken from: https://gscontras.github.io/probLang/chapters/03-nonliteral.html +""" + +import argparse +import collections + +import torch +from search_inference import HashingMarginal, Search, memoize + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine + +torch.set_default_dtype(torch.float64) # double precision for numerical stability + + +def Marginal(fn): + return memoize(lambda *args: HashingMarginal(Search(fn).run(*args))) + + +###################################### +# models +###################################### + +# hashable state +State = collections.namedtuple("State", ["price", "valence"]) + + +def approx(x, b=None): + if b is None: + b = 10.0 + div = float(x) / b + rounded = int(div) + 1 if div - float(int(div)) >= 0.5 else int(div) + return int(b) * rounded + + +def price_prior(): + values = [50, 51, 500, 501, 1000, 1001, 5000, 5001, 10000, 10001] + probs = torch.tensor( + [0.4205, 0.3865, 0.0533, 0.0538, 0.0223, 0.0211, 0.0112, 0.0111, 0.0083, 0.0120] + ) + ix = pyro.sample("price", dist.Categorical(probs=probs)) + return values[ix] + + +def valence_prior(price): + probs = { + 50: 0.3173, + 51: 0.3173, + 500: 0.7920, + 501: 0.7920, + 1000: 0.8933, + 1001: 0.8933, + 5000: 0.9524, + 5001: 0.9524, + 10000: 0.9864, + 10001: 0.9864, + } + return pyro.sample("valence", dist.Bernoulli(probs=probs[price])).item() == 1 + + +def meaning(utterance, price): + return utterance == price + + +qud_fns = { + "price": lambda state: State(price=state.price, valence=None), + "valence": lambda state: State(price=None, valence=state.valence), + "priceValence": lambda state: State(price=state.price, valence=state.valence), + "approxPrice": lambda state: State(price=approx(state.price), valence=None), + "approxPriceValence": lambda state: State( + price=approx(state.price), valence=state.valence + ), +} + + +def qud_prior(): + values = ["price", "valence", "priceValence", "approxPrice", "approxPriceValence"] + ix = pyro.sample( + "qud", dist.Categorical(probs=torch.ones(len(values)) / len(values)) + ) + return values[ix] + + +def utterance_cost(numberUtt): + preciseNumberCost = 1.0 + return 0.0 if approx(numberUtt) == numberUtt else preciseNumberCost + + +def utterance_prior(): + utterances = [50, 51, 500, 501, 1000, 1001, 5000, 5001, 10000, 10001] + utteranceLogits = -torch.tensor( + list(map(utterance_cost, utterances)), dtype=torch.float64 + ) + ix = pyro.sample("utterance", dist.Categorical(logits=utteranceLogits)) + return utterances[ix] + + +@Marginal +def literal_listener(utterance, qud): + price = price_prior() + state = State(price=price, valence=valence_prior(price)) + pyro.factor("literal_meaning", 0.0 if meaning(utterance, price) else -999999.0) + return qud_fns[qud](state) + + +@Marginal +def speaker(qudValue, qud): + alpha = 1.0 + utterance = utterance_prior() + literal_marginal = literal_listener(utterance, qud) + with poutine.scale(scale=torch.tensor(alpha)): + pyro.sample("listener", literal_marginal, obs=qudValue) + return utterance + + +@Marginal +def pragmatic_listener(utterance): + # priors + price = price_prior() + valence = valence_prior(price) + qud = qud_prior() + + # model + state = State(price=price, valence=valence) + qudValue = qud_fns[qud](state) + speaker_marginal = speaker(qudValue, qud) + pyro.sample("speaker", speaker_marginal, obs=utterance) + return state + + +def test_truth(): + true_vals = { + "probs": torch.tensor( + [ + 0.0018655171404222354, + 0.1512643329444101, + 0.0030440475496016296, + 0.23182161303428897, + 0.00003854830096338984, + 0.01502495595927897, + 0.00003889558295405101, + 0.015160315922876075, + 0.00016425635615857924, + 0.026788637869123822, + 0.00017359794987375924, + 0.028312162297699582, + 0.0008164336950199063, + 0.060558944822420434, + 0.0008088460212743665, + 0.05999612935009309, + 0.01925106279557206, + 0.17429720083660782, + 0.02094455861717477, + 0.18962994295418778, + ] + ), # noqa: E231,E501 + "support": list( + map( + lambda d: State(**d), + [ + {"price": 10001, "valence": False}, + {"price": 10001, "valence": True}, + {"price": 10000, "valence": False}, + {"price": 10000, "valence": True}, + {"price": 5001, "valence": False}, + {"price": 5001, "valence": True}, + {"price": 5000, "valence": False}, + {"price": 5000, "valence": True}, + {"price": 1001, "valence": False}, + {"price": 1001, "valence": True}, + {"price": 1000, "valence": False}, + {"price": 1000, "valence": True}, + {"price": 501, "valence": False}, + {"price": 501, "valence": True}, + {"price": 500, "valence": False}, + {"price": 500, "valence": True}, + {"price": 51, "valence": False}, + {"price": 51, "valence": True}, + {"price": 50, "valence": False}, + {"price": 50, "valence": True}, + ], + ) + ), # noqa: E231,E501 + } + + pragmatic_marginal = pragmatic_listener(10000) + for i, elt in enumerate(true_vals["support"]): + print( + "{}: true prob {} pyro prob {}".format( + elt, + true_vals["probs"][i].item(), + pragmatic_marginal.log_prob(elt).exp().item(), + ) + ) + + +def main(args): + # test_truth() + + pragmatic_marginal = pragmatic_listener(args.price) + + pd, pv = pragmatic_marginal._dist_and_values() + print( + [ + (s, pragmatic_marginal.log_prob(s).exp().item()) + for s in pragmatic_marginal.enumerate_support() + ] + ) + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser(description="parse args") + parser.add_argument("-n", "--num-samples", default=10, type=int) + parser.add_argument("--price", default=10000, type=int) + args = parser.parse_args() + main(args) diff --git a/pyro/source/examples/rsa/schelling.py b/pyro/source/examples/rsa/schelling.py new file mode 100644 index 0000000000000000000000000000000000000000..7631bf6437dee3a5751824e39884ca98d6a5bd68 --- /dev/null +++ b/pyro/source/examples/rsa/schelling.py @@ -0,0 +1,88 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +Schelling coordination game: +Two spies, Alice and Bob, want to meet. + +They must choose between two locations without communicating +by recursively reasoning about one another. + +Taken from: http://forestdb.org/models/schelling.html +""" +import argparse + +import torch +from search_inference import HashingMarginal, Search + +import pyro +import pyro.poutine as poutine +from pyro.distributions import Bernoulli + + +def location(preference): + """ + Flips a weighted coin to decide between two locations to meet + In this example, we assume that Alice and Bob share a prior preference + for one location over another, reflected in the value of preference below. + """ + return pyro.sample("loc", Bernoulli(preference)) + + +def alice(preference, depth): + """ + Alice decides where to go by reasoning about Bob's choice + """ + alice_prior = location(preference) + with poutine.block(): + bob_marginal = HashingMarginal(Search(bob).run(preference, depth - 1)) + return pyro.sample("bob_choice", bob_marginal, obs=alice_prior) + + +def bob(preference, depth): + """ + Bob decides where to go by reasoning about Alice's choice + """ + bob_prior = location(preference) + if depth > 0: + with poutine.block(): + alice_marginal = HashingMarginal(Search(alice).run(preference, depth)) + return pyro.sample("alice_choice", alice_marginal, obs=bob_prior) + else: + return bob_prior + + +def main(args): + # Here Alice and Bob slightly prefer one location over the other a priori + shared_preference = torch.tensor([args.preference]) + + bob_depth = args.depth + num_samples = args.num_samples + + # We sample Bob's choice of location by marginalizing + # over his decision process. + bob_decision = HashingMarginal(Search(bob).run(shared_preference, bob_depth)) + bob_prob = bob_decision._dist_and_values()[0].probs + print("bob prob", bob_prob) + + # draw num_samples samples from Bob's decision process + # and use those to estimate the marginal probability + # that Bob chooses their preferred location + bob_prob = sum([bob_decision() for i in range(num_samples)]) / float(num_samples) + + print( + "Empirical frequency of Bob choosing their favored location " + + "given preference {} and recursion depth {}: {}".format( + shared_preference, bob_depth, bob_prob + ) + ) + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser(description="parse args") + parser.add_argument("-n", "--num-samples", default=10, type=int) + parser.add_argument("--depth", default=2, type=int) + parser.add_argument("--preference", default=0.6, type=float) + args = parser.parse_args() + main(args) diff --git a/pyro/source/examples/rsa/schelling_false.py b/pyro/source/examples/rsa/schelling_false.py new file mode 100644 index 0000000000000000000000000000000000000000..2eabb4b1b15a0a28d6ae7811dce24d6c5118ecd0 --- /dev/null +++ b/pyro/source/examples/rsa/schelling_false.py @@ -0,0 +1,104 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +Schelling coordination game with false belief: +Two spies, Alice and Bob, claim to want to meet. +Bob wants to meet Alice, but Alice actually wants to avoid Bob. + +They must choose between two locations without communicating +by recursively reasoning about one another. + +Taken from: http://forestdb.org/models/schelling-falsebelief.html +""" +import argparse + +import torch +from search_inference import HashingMarginal, Search + +import pyro +import pyro.poutine as poutine +from pyro.distributions import Bernoulli + + +def location(preference): + """ + Flips a weighted coin to decide between two locations to meet. + In this example, we assume that Alice and Bob share a prior preference + for one location over another, reflected in the value of preference below. + """ + return pyro.sample("loc", Bernoulli(preference)) + + +def alice_fb(preference, depth): + """ + Alice's actual decision process: + Alice decides where to go by reasoning about Bob's choice + and choosing the other location. + """ + alice_prior = location(preference) + with poutine.block(): + bob_marginal = HashingMarginal(Search(bob).run(preference, depth - 1)) + pyro.sample("bob_choice", bob_marginal, obs=alice_prior) + return 1 - alice_prior + + +def alice(preference, depth): + """ + Alice decides where to go by reasoning about Bob's choice + """ + alice_prior = location(preference) + with poutine.block(): + bob_marginal = HashingMarginal(Search(bob).run(preference, depth - 1)) + return pyro.sample("bob_choice", bob_marginal, obs=alice_prior) + + +def bob(preference, depth): + """ + Bob decides where to go by reasoning about Alice's choice + """ + bob_prior = location(preference) + if depth > 0: + with poutine.block(): + alice_marginal = HashingMarginal(Search(alice).run(preference, depth)) + return pyro.sample("alice_choice", alice_marginal, obs=bob_prior) + else: + return bob_prior + + +def main(args): + # Here Alice and Bob slightly prefer one location over the other a priori + shared_preference = torch.tensor([args.preference]) + + alice_depth = args.depth + num_samples = args.num_samples + + # We sample Alice's true choice of location + # by marginalizing over her decision process + alice_decision = HashingMarginal( + Search(alice_fb).run(shared_preference, alice_depth) + ) + + # draw num_samples samples from Alice's decision process + # and use those to estimate the marginal probability + # that Alice chooses their preferred location + alice_prob = sum([alice_decision() for i in range(num_samples)]) / float( + num_samples + ) + + print( + "Empirical frequency of Alice choosing their favored location " + + "given preference {} and recursion depth {}: {}".format( + shared_preference, alice_depth, alice_prob + ) + ) + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser(description="parse args") + parser.add_argument("-n", "--num-samples", default=10, type=int) + parser.add_argument("--depth", default=3, type=int) + parser.add_argument("--preference", default=0.55, type=float) + args = parser.parse_args() + main(args) diff --git a/pyro/source/examples/rsa/search_inference.py b/pyro/source/examples/rsa/search_inference.py new file mode 100644 index 0000000000000000000000000000000000000000..01f0e786ba7e5972b96c38e3b2f121939792d3dc --- /dev/null +++ b/pyro/source/examples/rsa/search_inference.py @@ -0,0 +1,223 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +Inference algorithms and utilities used in the RSA example models. + +Adapted from: http://dippl.org/chapters/03-enumeration.html +""" + +import collections +import functools +import queue + +import torch + +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.infer.abstract_infer import TracePosterior +from pyro.poutine.runtime import NonlocalExit + + +def memoize(fn=None, **kwargs): + if fn is None: + return lambda _fn: memoize(_fn, **kwargs) + return functools.lru_cache(**kwargs)(fn) + + +class HashingMarginal(dist.Distribution): + """ + :param trace_dist: a TracePosterior instance representing a Monte Carlo posterior + + Marginal histogram distribution. + Turns a TracePosterior object into a Distribution + over the return values of the TracePosterior's model. + """ + + def __init__(self, trace_dist, sites=None): + assert isinstance( + trace_dist, TracePosterior + ), "trace_dist must be trace posterior distribution object" + + if sites is None: + sites = "_RETURN" + + assert isinstance(sites, (str, list)), "sites must be either '_RETURN' or list" + + self.sites = sites + super().__init__() + self.trace_dist = trace_dist + + has_enumerate_support = True + + @memoize(maxsize=10) + def _dist_and_values(self): + # XXX currently this whole object is very inefficient + values_map, logits = collections.OrderedDict(), collections.OrderedDict() + for tr, logit in zip(self.trace_dist.exec_traces, self.trace_dist.log_weights): + if isinstance(self.sites, str): + value = tr.nodes[self.sites]["value"] + else: + value = {site: tr.nodes[site]["value"] for site in self.sites} + if not torch.is_tensor(logit): + logit = torch.tensor(logit) + + if torch.is_tensor(value): + value_hash = hash(value.cpu().contiguous().numpy().tobytes()) + elif isinstance(value, dict): + value_hash = hash(self._dict_to_tuple(value)) + else: + value_hash = hash(value) + if value_hash in logits: + # Value has already been seen. + logits[value_hash] = dist.util.logsumexp( + torch.stack([logits[value_hash], logit]), dim=-1 + ) + else: + logits[value_hash] = logit + values_map[value_hash] = value + + logits = torch.stack(list(logits.values())).contiguous().view(-1) + logits = logits - dist.util.logsumexp(logits, dim=-1) + d = dist.Categorical(logits=logits) + return d, values_map + + def sample(self): + d, values_map = self._dist_and_values() + ix = d.sample() + return list(values_map.values())[ix] + + def log_prob(self, val): + d, values_map = self._dist_and_values() + if torch.is_tensor(val): + value_hash = hash(val.cpu().contiguous().numpy().tobytes()) + elif isinstance(val, dict): + value_hash = hash(self._dict_to_tuple(val)) + else: + value_hash = hash(val) + return d.log_prob(torch.tensor([list(values_map.keys()).index(value_hash)])) + + def enumerate_support(self): + d, values_map = self._dist_and_values() + return list(values_map.values())[:] + + def _dict_to_tuple(self, d): + """ + Recursively converts a dictionary to a list of key-value tuples + Only intended for use as a helper function inside HashingMarginal!! + May break when keys cant be sorted, but that is not an expected use-case + """ + if isinstance(d, dict): + return tuple([(k, self._dict_to_tuple(d[k])) for k in sorted(d.keys())]) + else: + return d + + def _weighted_mean(self, value, dim=0): + weights = self._log_weights.reshape([-1] + (value.dim() - 1) * [1]) + max_weight = weights.max(dim=dim)[0] + relative_probs = (weights - max_weight).exp() + return (value * relative_probs).sum(dim=dim) / relative_probs.sum(dim=dim) + + @property + def mean(self): + samples = torch.stack(list(self._dist_and_values()[1].values())) + return self._weighted_mean(samples) + + @property + def variance(self): + samples = torch.stack(list(self._dist_and_values()[1].values())) + deviation_squared = torch.pow(samples - self.mean, 2) + return self._weighted_mean(deviation_squared) + + +######################## +# Exact Search inference +######################## + + +class Search(TracePosterior): + """ + Exact inference by enumerating over all possible executions + """ + + def __init__(self, model, max_tries=int(1e6), **kwargs): + self.model = model + self.max_tries = max_tries + super().__init__(**kwargs) + + def _traces(self, *args, **kwargs): + q = queue.Queue() + q.put(poutine.Trace()) + p = poutine.trace(poutine.queue(self.model, queue=q, max_tries=self.max_tries)) + while not q.empty(): + tr = p.get_trace(*args, **kwargs) + yield tr, tr.log_prob_sum() + + +############################################### +# Best-first Search Inference +############################################### + + +def pqueue(fn, queue): + def sample_escape(tr, site): + return ( + (site["name"] not in tr) + and (site["type"] == "sample") + and (not site["is_observed"]) + ) + + def _fn(*args, **kwargs): + for i in range(int(1e6)): + assert ( + not queue.empty() + ), "trying to get() from an empty queue will deadlock" + + priority, next_trace = queue.get() + try: + ftr = poutine.trace( + poutine.escape( + poutine.replay(fn, next_trace), + functools.partial(sample_escape, next_trace), + ) + ) + return ftr(*args, **kwargs) + except NonlocalExit as site_container: + site_container.reset_stack() + for tr in poutine.util.enum_extend( + ftr.trace.copy(), site_container.site + ): + # add a little bit of noise to the priority to break ties... + queue.put( + (tr.log_prob_sum().item() - torch.rand(1).item() * 1e-2, tr) + ) + + raise ValueError("max tries ({}) exceeded".format(str(1e6))) + + return _fn + + +class BestFirstSearch(TracePosterior): + """ + Inference by enumerating executions ordered by their probabilities. + Exact (and results equivalent to Search) if all executions are enumerated. + """ + + def __init__(self, model, num_samples=None, **kwargs): + if num_samples is None: + num_samples = 100 + self.num_samples = num_samples + self.model = model + super().__init__(**kwargs) + + def _traces(self, *args, **kwargs): + q = queue.PriorityQueue() + # add a little bit of noise to the priority to break ties... + q.put((torch.zeros(1).item() - torch.rand(1).item() * 1e-2, poutine.Trace())) + q_fn = pqueue(self.model, queue=q) + for i in range(self.num_samples): + if q.empty(): + # num_samples was too large! + break + tr = poutine.trace(q_fn).get_trace(*args, **kwargs) # XXX should block + yield tr, tr.log_prob_sum() diff --git a/pyro/source/examples/rsa/semantic_parsing.py b/pyro/source/examples/rsa/semantic_parsing.py new file mode 100644 index 0000000000000000000000000000000000000000..424cd16065cdbbe2e2caf70f2f16c140cd9878cd --- /dev/null +++ b/pyro/source/examples/rsa/semantic_parsing.py @@ -0,0 +1,357 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +Combining models of RSA pragmatics and CCG-based compositional semantics. + +Taken from: http://dippl.org/examples/zSemanticPragmaticMashup.html +""" + +import argparse +import collections + +import torch +from search_inference import BestFirstSearch, HashingMarginal, memoize + +import pyro +import pyro.distributions as dist + +torch.set_default_dtype(torch.float64) + + +def Marginal(fn=None, **kwargs): + if fn is None: + return lambda _fn: Marginal(_fn, **kwargs) + return memoize( + lambda *args: HashingMarginal(BestFirstSearch(fn, **kwargs).run(*args)) + ) + + +################################################################### +# Lexical semantics +################################################################### + + +def flip(name, p): + return pyro.sample(name, dist.Bernoulli(p)).item() == 1 + + +# hashable state +obj = collections.namedtuple("Obj", ["name", "blond", "nice", "tall"]) + + +def Obj(name): + return obj( + name=name, + blond=flip(name + "_blond", 0.5), + nice=flip(name + "_nice", 0.5), + tall=flip(name + "_tall", 0.5), + ) + + +class Meaning: + def sem(self, world): + raise NotImplementedError + + __call__ = sem + + def syn(self): + raise NotImplementedError + + +class UndefinedMeaning(Meaning): + def sem(self, world): + return None + + def syn(self): + return "" + + +class BlondMeaning(Meaning): + def sem(self, world): + return lambda obj: obj.blond + + def syn(self): + return {"dir": "L", "int": "NP", "out": "S"} + + +class NiceMeaning(Meaning): + def sem(self, world): + return lambda obj: obj.nice + + def syn(self): + return {"dir": "L", "int": "NP", "out": "S"} + + +class TallMeaning(Meaning): + def sem(self, world): + return lambda obj: obj.tall + + def syn(self): + return {"dir": "L", "int": "NP", "out": "S"} + + +class BobMeaning(Meaning): + def sem(self, world): + return list(filter(lambda obj: obj.name == "Bob", world))[0] + + def syn(self): + return "NP" + + +class SomeMeaning(Meaning): + def sem(self, world): + def f1(P): + def f2(Q): + return len(list(filter(Q, filter(P, world)))) > 0 + + return f2 + + return f1 + + def syn(self): + return { + "dir": "R", + "int": {"dir": "L", "int": "NP", "out": "S"}, + "out": { + "dir": "R", + "int": {"dir": "L", "int": "NP", "out": "S"}, + "out": "S", + }, + } + + +class AllMeaning(Meaning): + def sem(self, world): + def f1(P): + def f2(Q): + return ( + len(list(filter(lambda *args: not Q(*args), filter(P, world)))) == 0 + ) + + return f2 + + return f1 + + def syn(self): + return { + "dir": "R", + "int": {"dir": "L", "int": "NP", "out": "S"}, + "out": { + "dir": "R", + "int": {"dir": "L", "int": "NP", "out": "S"}, + "out": "S", + }, + } + + +class NoneMeaning(Meaning): + def sem(self, world): + def f1(P): + def f2(Q): + return len(list(filter(Q, filter(P, world)))) == 0 + + return f2 + + return f1 + + def syn(self): + return { + "dir": "R", + "int": {"dir": "L", "int": "NP", "out": "S"}, + "out": { + "dir": "R", + "int": {"dir": "L", "int": "NP", "out": "S"}, + "out": "S", + }, + } + + +class CompoundMeaning(Meaning): + def __init__(self, sem, syn): + self._sem = sem + self._syn = syn + + def sem(self, world): + return self._sem(world) + + def syn(self): + return self._syn + + +################################################################### +# Compositional semantics +################################################################### + + +def heuristic(is_good): + if is_good: + return torch.tensor(0.0) + return torch.tensor(-100.0) + + +def world_prior(num_objs, meaning_fn): + prev_factor = torch.tensor(0.0) + world = [] + for i in range(num_objs): + world.append(Obj("obj_{}".format(i))) + new_factor = heuristic(meaning_fn(world)) + pyro.factor("factor_{}".format(i), new_factor - prev_factor) + prev_factor = new_factor + + pyro.factor("factor_{}".format(num_objs), prev_factor * -1) + return tuple(world) + + +def lexical_meaning(word): + meanings = { + "blond": BlondMeaning, + "nice": NiceMeaning, + "Bob": BobMeaning, + "some": SomeMeaning, + "none": NoneMeaning, + "all": AllMeaning, + } + if word in meanings: + return meanings[word]() + else: + return UndefinedMeaning() + + +def apply_world_passing(f, a): + return lambda w: f(w)(a(w)) + + +def syntax_match(s, t): + if "dir" in s and "dir" in t: + return ( + (s["dir"] and t["dir"]) + and syntax_match(s["int"], t["int"]) + and syntax_match(s["out"], t["out"]) + ) + else: + return s == t + + +def can_apply(meanings): + inds = [] + for i, meaning in enumerate(meanings): + applies = False + s = meaning.syn() + if "dir" in s: + if s["dir"] == "L": + applies = syntax_match(s["int"], meanings[i - 1].syn()) + elif s["dir"] == "R": + applies = syntax_match(s["int"], meanings[i + 1].syn()) + else: + applies = False + + if applies: + inds.append(i) + + return inds + + +def combine_meaning(meanings, c): + possible_combos = can_apply(meanings) + N = len(possible_combos) + ix = pyro.sample("ix_{}".format(c), dist.Categorical(torch.ones(N) / N)) + i = possible_combos[ix] + s = meanings[i].syn() + if s["dir"] == "L": + f = meanings[i].sem + a = meanings[i - 1].sem + new_meaning = CompoundMeaning(sem=apply_world_passing(f, a), syn=s["out"]) + return meanings[0 : i - 1] + [new_meaning] + meanings[i + 1 :] + if s["dir"] == "R": + f = meanings[i].sem + a = meanings[i + 1].sem + new_meaning = CompoundMeaning(sem=apply_world_passing(f, a), syn=s["out"]) + return meanings[0:i] + [new_meaning] + meanings[i + 2 :] + + +def combine_meanings(meanings, c=0): + if len(meanings) == 1: + return meanings[0].sem + else: + return combine_meanings(combine_meaning(meanings, c), c=c + 1) + + +def meaning(utterance): + defined = filter( + lambda w: "" != w.syn(), list(map(lexical_meaning, utterance.split(" "))) + ) + return combine_meanings(list(defined)) + + +@Marginal(num_samples=100) +def literal_listener(utterance): + m = meaning(utterance) + world = world_prior(2, m) + pyro.factor("world_constraint", heuristic(m(world)) * 1000) + return world + + +def utterance_prior(): + utterances = [ + "some of the blond people are nice", + "all of the blond people are nice", + "none of the blond people are nice", + ] + ix = pyro.sample("utterance", dist.Categorical(torch.ones(3) / 3.0)) + return utterances[ix] + + +@Marginal(num_samples=100) +def speaker(world): + utterance = utterance_prior() + L = literal_listener(utterance) + pyro.sample("speaker_constraint", L, obs=world) + return utterance + + +def rsa_listener(utterance, qud): + world = world_prior(2, meaning(utterance)) + S = speaker(world) + pyro.sample("listener_constraint", S, obs=utterance) + return qud(world) + + +def literal_listener_raw(utterance, qud): + m = meaning(utterance) + world = world_prior(3, m) + pyro.factor("world_constraint", heuristic(m(world)) * 1000) + return qud(world) + + +def main(args): + mll = Marginal(literal_listener_raw, num_samples=args.num_samples) + + def is_any_qud(world): + return any(map(lambda obj: obj.nice, world)) + + print(mll("all blond people are nice", is_any_qud)()) + + def is_all_qud(world): + m = True + for obj in world: + if obj.blond: + if obj.nice: + m = m and True + else: + m = m and False + else: + m = m and True + return m + + rsa = Marginal(rsa_listener, num_samples=args.num_samples) + + print(rsa("some of the blond people are nice", is_all_qud)()) + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser(description="parse args") + parser.add_argument("-n", "--num-samples", default=10, type=int) + args = parser.parse_args() + main(args) diff --git a/pyro/source/examples/scanvi/__init__.py b/pyro/source/examples/scanvi/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/examples/scanvi/scanvi.py b/pyro/source/examples/scanvi/scanvi.py new file mode 100644 index 0000000000000000000000000000000000000000..fca71137114966b18f7ba098d7338c03664b1853 --- /dev/null +++ b/pyro/source/examples/scanvi/scanvi.py @@ -0,0 +1,441 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +""" +We use a semi-supervised deep generative model of transcriptomics data to propagate labels +from a small set of labeled cells to a larger set of unlabeled cells. In particular we +use a dataset of peripheral blood mononuclear cells (PBMC) from 10x Genomics and +(approximately) reproduce Figure 6 in reference [1]. + +Note that for simplicity we do not reproduce every aspect of the scANVI pipeline. For +example, we do not use dropout in our neural network encoders/decoders, nor do we include +batch/dataset annotations in our model. + +References: +[1] "Harmonization and Annotation of Single-cell Transcriptomics data with Deep Generative Models," + Chenling Xu, Romain Lopez, Edouard Mehlman, Jeffrey Regier, Michael I. Jordan, Nir Yosef. +[2] https://github.com/YosefLab/scvi-tutorials/blob/50dd3269abfe0c375ec47114f2c20725a016736f/seed_labeling.ipynb +""" + +import argparse + +import matplotlib.pyplot as plt +import numpy as np +import torch +import torch.nn as nn +from matplotlib.patches import Patch +from torch.distributions import constraints +from torch.nn.functional import softmax, softplus +from torch.optim import Adam + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.contrib.examples.scanvi_data import get_data +from pyro.distributions.util import broadcast_shape +from pyro.infer import SVI, TraceEnum_ELBO, config_enumerate +from pyro.optim import MultiStepLR + + +# Helper for making fully-connected neural networks +def make_fc(dims): + layers = [] + for in_dim, out_dim in zip(dims, dims[1:]): + layers.append(nn.Linear(in_dim, out_dim)) + layers.append(nn.BatchNorm1d(out_dim)) + layers.append(nn.ReLU()) + return nn.Sequential(*layers[:-1]) # Exclude final ReLU non-linearity + + +# Splits a tensor in half along the final dimension +def split_in_half(t): + return t.reshape(t.shape[:-1] + (2, -1)).unbind(-2) + + +# Helper for broadcasting inputs to neural net +def broadcast_inputs(input_args): + shape = broadcast_shape(*[s.shape[:-1] for s in input_args]) + (-1,) + input_args = [s.expand(shape) for s in input_args] + return input_args + + +# Used in parameterizing p(z2 | z1, y) +class Z2Decoder(nn.Module): + def __init__(self, z1_dim, y_dim, z2_dim, hidden_dims): + super().__init__() + dims = [z1_dim + y_dim] + hidden_dims + [2 * z2_dim] + self.fc = make_fc(dims) + + def forward(self, z1, y): + z1_y = torch.cat([z1, y], dim=-1) + # We reshape the input to be two-dimensional so that nn.BatchNorm1d behaves correctly + _z1_y = z1_y.reshape(-1, z1_y.size(-1)) + hidden = self.fc(_z1_y) + # If the input was three-dimensional we now restore the original shape + hidden = hidden.reshape(z1_y.shape[:-1] + hidden.shape[-1:]) + loc, scale = split_in_half(hidden) + # Here and elsewhere softplus ensures that scale is positive. Note that we generally + # expect softplus to be more numerically stable than exp. + scale = softplus(scale) + return loc, scale + + +# Used in parameterizing p(x | z2) +class XDecoder(nn.Module): + def __init__(self, num_genes, z2_dim, hidden_dims): + super().__init__() + dims = [z2_dim] + hidden_dims + [2 * num_genes] + self.fc = make_fc(dims) + + def forward(self, z2): + gate_logits, mu = split_in_half(self.fc(z2)) + mu = softmax(mu, dim=-1) + return gate_logits, mu + + +# Used in parameterizing q(z2 | x) and q(l | x) +class Z2LEncoder(nn.Module): + def __init__(self, num_genes, z2_dim, hidden_dims): + super().__init__() + dims = [num_genes] + hidden_dims + [2 * z2_dim + 2] + self.fc = make_fc(dims) + + def forward(self, x): + # Transform the counts x to log space for increased numerical stability. + # Note that we only use this transform here; in particular the observation + # distribution in the model is a proper count distribution. + x = torch.log1p(x) + h1, h2 = split_in_half(self.fc(x)) + z2_loc, z2_scale = h1[..., :-1], softplus(h2[..., :-1]) + l_loc, l_scale = h1[..., -1:], softplus(h2[..., -1:]) + return z2_loc, z2_scale, l_loc, l_scale + + +# Used in parameterizing q(z1 | z2, y) +class Z1Encoder(nn.Module): + def __init__(self, num_labels, z1_dim, z2_dim, hidden_dims): + super().__init__() + dims = [num_labels + z2_dim] + hidden_dims + [2 * z1_dim] + self.fc = make_fc(dims) + + def forward(self, z2, y): + # This broadcasting is necessary since Pyro expands y during enumeration (but not z2) + z2_y = broadcast_inputs([z2, y]) + z2_y = torch.cat(z2_y, dim=-1) + # We reshape the input to be two-dimensional so that nn.BatchNorm1d behaves correctly + _z2_y = z2_y.reshape(-1, z2_y.size(-1)) + hidden = self.fc(_z2_y) + # If the input was three-dimensional we now restore the original shape + hidden = hidden.reshape(z2_y.shape[:-1] + hidden.shape[-1:]) + loc, scale = split_in_half(hidden) + scale = softplus(scale) + return loc, scale + + +# Used in parameterizing q(y | z2) +class Classifier(nn.Module): + def __init__(self, z2_dim, hidden_dims, num_labels): + super().__init__() + dims = [z2_dim] + hidden_dims + [num_labels] + self.fc = make_fc(dims) + + def forward(self, x): + logits = self.fc(x) + return logits + + +# Encompasses the scANVI model and guide as a PyTorch nn.Module +class SCANVI(nn.Module): + def __init__( + self, + num_genes, + num_labels, + l_loc, + l_scale, + latent_dim=10, + alpha=0.01, + scale_factor=1.0, + ): + assert isinstance(num_genes, int) + self.num_genes = num_genes + + assert isinstance(num_labels, int) and num_labels > 1 + self.num_labels = num_labels + + # This is the dimension of both z1 and z2 + assert isinstance(latent_dim, int) and latent_dim > 0 + self.latent_dim = latent_dim + + # The next two hyperparameters determine the prior over the log_count latent variable `l` + assert isinstance(l_loc, float) + self.l_loc = l_loc + assert isinstance(l_scale, float) and l_scale > 0 + self.l_scale = l_scale + + # This hyperparameter controls the strength of the auxiliary classification loss + assert isinstance(alpha, float) and alpha > 0 + self.alpha = alpha + + assert isinstance(scale_factor, float) and scale_factor > 0 + self.scale_factor = scale_factor + + super().__init__() + + # Setup the various neural networks used in the model and guide + self.z2_decoder = Z2Decoder( + z1_dim=self.latent_dim, + y_dim=self.num_labels, + z2_dim=self.latent_dim, + hidden_dims=[50], + ) + self.x_decoder = XDecoder( + num_genes=num_genes, hidden_dims=[100], z2_dim=self.latent_dim + ) + self.z2l_encoder = Z2LEncoder( + num_genes=num_genes, z2_dim=self.latent_dim, hidden_dims=[100] + ) + self.classifier = Classifier( + z2_dim=self.latent_dim, hidden_dims=[50], num_labels=num_labels + ) + self.z1_encoder = Z1Encoder( + num_labels=num_labels, + z1_dim=self.latent_dim, + z2_dim=self.latent_dim, + hidden_dims=[50], + ) + + self.epsilon = 5.0e-3 + + def model(self, x, y=None): + # Register various nn.Modules with Pyro + pyro.module("scanvi", self) + + # This gene-level parameter modulates the variance of the observation distribution + theta = pyro.param( + "inverse_dispersion", + 10.0 * x.new_ones(self.num_genes), + constraint=constraints.positive, + ) + + # We scale all sample statements by scale_factor so that the ELBO is normalized + # wrt the number of datapoints and genes + with pyro.plate("batch", len(x)), poutine.scale(scale=self.scale_factor): + z1 = pyro.sample( + "z1", dist.Normal(0, x.new_ones(self.latent_dim)).to_event(1) + ) + # Note that if y is None (i.e. y is unobserved) then y will be sampled; + # otherwise y will be treated as observed. + y = pyro.sample( + "y", dist.OneHotCategorical(logits=x.new_zeros(self.num_labels)), obs=y + ) + + z2_loc, z2_scale = self.z2_decoder(z1, y) + z2 = pyro.sample("z2", dist.Normal(z2_loc, z2_scale).to_event(1)) + + l_scale = self.l_scale * x.new_ones(1) + l = pyro.sample("l", dist.LogNormal(self.l_loc, l_scale).to_event(1)) + + # Note that by construction mu is normalized (i.e. mu.sum(-1) == 1) and the + # total scale of counts for each cell is determined by `l` + gate_logits, mu = self.x_decoder(z2) + # TODO revisit this parameterization if torch.distributions.NegativeBinomial changes + # from failure to success parametrization; + # see https://github.com/pytorch/pytorch/issues/42449 + nb_logits = (l * mu + self.epsilon).log() - (theta + self.epsilon).log() + x_dist = dist.ZeroInflatedNegativeBinomial( + gate_logits=gate_logits, total_count=theta, logits=nb_logits + ) + # Observe the datapoint x using the observation distribution x_dist + pyro.sample("x", x_dist.to_event(1), obs=x) + + # The guide specifies the variational distribution + def guide(self, x, y=None): + pyro.module("scanvi", self) + with pyro.plate("batch", len(x)), poutine.scale(scale=self.scale_factor): + z2_loc, z2_scale, l_loc, l_scale = self.z2l_encoder(x) + pyro.sample("l", dist.LogNormal(l_loc, l_scale).to_event(1)) + z2 = pyro.sample("z2", dist.Normal(z2_loc, z2_scale).to_event(1)) + + y_logits = self.classifier(z2) + y_dist = dist.OneHotCategorical(logits=y_logits) + if y is None: + # x is unlabeled so sample y using q(y|z2) + y = pyro.sample("y", y_dist) + else: + # x is labeled so add a classification loss term + # (this way q(y|z2) learns from both labeled and unlabeled data) + classification_loss = y_dist.log_prob(y) + # Note that the negative sign appears because we're adding this term in the guide + # and the guide log_prob appears in the ELBO as -log q + pyro.factor( + "classification_loss", + -self.alpha * classification_loss, + has_rsample=False, + ) + + z1_loc, z1_scale = self.z1_encoder(z2, y) + pyro.sample("z1", dist.Normal(z1_loc, z1_scale).to_event(1)) + + +def main(args): + # Fix random number seed + pyro.util.set_rng_seed(args.seed) + # Enable optional validation warnings + + # Load and pre-process data + dataloader, num_genes, l_mean, l_scale, anndata = get_data( + dataset=args.dataset, batch_size=args.batch_size, cuda=args.cuda + ) + + # Instantiate instance of model/guide and various neural networks + scanvi = SCANVI( + num_genes=num_genes, + num_labels=4, + l_loc=l_mean, + l_scale=l_scale, + scale_factor=1.0 / (args.batch_size * num_genes), + ) + + if args.cuda: + scanvi.cuda() + + # Setup an optimizer (Adam) and learning rate scheduler. + # By default we start with a moderately high learning rate (0.005) + # and reduce by a factor of 5 after 20 epochs. + scheduler = MultiStepLR( + { + "optimizer": Adam, + "optim_args": {"lr": args.learning_rate}, + "milestones": [20], + "gamma": 0.2, + } + ) + + # Tell Pyro to enumerate out y when y is unobserved + guide = config_enumerate(scanvi.guide, "parallel", expand=True) + + # Setup a variational objective for gradient-based learning. + # Note we use TraceEnum_ELBO in order to leverage Pyro's machinery + # for automatic enumeration of the discrete latent variable y. + elbo = TraceEnum_ELBO(strict_enumeration_warning=False) + svi = SVI(scanvi.model, guide, scheduler, elbo) + + # Training loop + for epoch in range(args.num_epochs): + losses = [] + + for x, y in dataloader: + if y is not None: + y = y.type_as(x) + loss = svi.step(x, y) + losses.append(loss) + + # Tell the scheduler we've done one epoch. + scheduler.step() + + print("[Epoch %04d] Loss: %.5f" % (epoch, np.mean(losses))) + + # Put neural networks in eval mode (needed for batchnorm) + scanvi.eval() + + # Now that we're done training we'll inspect the latent representations we've learned + if args.plot and args.dataset == "pbmc": + import scanpy as sc + + # Compute latent representation (z2_loc) for each cell in the dataset + latent_rep = scanvi.z2l_encoder(dataloader.data_x)[0] + + # Compute inferred cell type probabilities for each cell + y_logits = scanvi.classifier(latent_rep) + y_probs = softmax(y_logits, dim=-1).data.cpu().numpy() + + # Use scanpy to compute 2-dimensional UMAP coordinates using our + # learned 10-dimensional latent representation z2 + anndata.obsm["X_scANVI"] = latent_rep.data.cpu().numpy() + sc.pp.neighbors(anndata, use_rep="X_scANVI") + sc.tl.umap(anndata) + umap1, umap2 = anndata.obsm["X_umap"][:, 0], anndata.obsm["X_umap"][:, 1] + + # Construct plots; all plots are scatterplots depicting the two-dimensional UMAP embedding + # and only differ in how points are colored + + # The topmost plot depicts the 200 hand-curated seed labels in our dataset + fig, axes = plt.subplots(3, 2) + seed_marker_sizes = anndata.obs["seed_marker_sizes"] + axes[0, 0].scatter( + umap1, + umap2, + s=seed_marker_sizes, + c=anndata.obs["seed_colors"], + marker=".", + alpha=0.7, + ) + axes[0, 0].set_title("Hand-Curated Seed Labels") + patch1 = Patch(color="lightcoral", label="CD8-Naive") + patch2 = Patch(color="limegreen", label="CD4-Naive") + patch3 = Patch(color="deepskyblue", label="CD4-Memory") + patch4 = Patch(color="mediumorchid", label="CD4-Regulatory") + axes[0, 1].legend(loc="center left", handles=[patch1, patch2, patch3, patch4]) + axes[0, 1].get_xaxis().set_visible(False) + axes[0, 1].get_yaxis().set_visible(False) + axes[0, 1].set_frame_on(False) + + # The remaining plots depict the inferred cell type probability for each of the four cell types + s10 = axes[1, 0].scatter( + umap1, umap2, s=1, c=y_probs[:, 0], marker=".", alpha=0.7 + ) + axes[1, 0].set_title("Inferred CD8-Naive probability") + fig.colorbar(s10, ax=axes[1, 0]) + s11 = axes[1, 1].scatter( + umap1, umap2, s=1, c=y_probs[:, 1], marker=".", alpha=0.7 + ) + axes[1, 1].set_title("Inferred CD4-Naive probability") + fig.colorbar(s11, ax=axes[1, 1]) + s20 = axes[2, 0].scatter( + umap1, umap2, s=1, c=y_probs[:, 2], marker=".", alpha=0.7 + ) + axes[2, 0].set_title("Inferred CD4-Memory probability") + fig.colorbar(s20, ax=axes[2, 0]) + s21 = axes[2, 1].scatter( + umap1, umap2, s=1, c=y_probs[:, 3], marker=".", alpha=0.7 + ) + axes[2, 1].set_title("Inferred CD4-Regulatory probability") + fig.colorbar(s21, ax=axes[2, 1]) + + fig.tight_layout() + plt.savefig("scanvi.pdf") + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + # Parse command line arguments + parser = argparse.ArgumentParser( + description="single-cell ANnotation using Variational Inference" + ) + parser.add_argument("-s", "--seed", default=0, type=int, help="rng seed") + parser.add_argument( + "-n", "--num-epochs", default=60, type=int, help="number of training epochs" + ) + parser.add_argument( + "-d", + "--dataset", + default="pbmc", + type=str, + help="which dataset to use", + choices=["pbmc", "mock"], + ) + parser.add_argument( + "-bs", "--batch-size", default=100, type=int, help="mini-batch size" + ) + parser.add_argument( + "-lr", "--learning-rate", default=0.005, type=float, help="learning rate" + ) + parser.add_argument( + "--cuda", action="store_true", default=False, help="whether to use cuda" + ) + parser.add_argument( + "--plot", action="store_true", default=False, help="whether to make a plot" + ) + args = parser.parse_args() + + main(args) diff --git a/pyro/source/examples/sir_hmc.py b/pyro/source/examples/sir_hmc.py new file mode 100644 index 0000000000000000000000000000000000000000..89d21c9379912196e36e4c1c067ab8e9d6cd4617 --- /dev/null +++ b/pyro/source/examples/sir_hmc.py @@ -0,0 +1,675 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +# Introduction +# ============ +# +# This advanced Pyro tutorial demonstrates a number of inference and prediction +# tricks in the context of epidemiological models, specifically stochastic +# discrete time compartmental models with large discrete state spaces. This +# tutorial assumes the reader has completed all introductory tutorials and +# additionally the tutorials on enumeration and effect handlers (poutines): +# http://pyro.ai/examples/enumeration.html +# http://pyro.ai/examples/effect_handlers.html + +import argparse +import logging +import math +import re +from collections import OrderedDict + +import torch + +import pyro +import pyro.distributions as dist +import pyro.distributions.hmm +import pyro.poutine as poutine +from pyro.infer import MCMC, NUTS, config_enumerate, infer_discrete +from pyro.infer.autoguide import init_to_value +from pyro.ops.special import safe_log +from pyro.ops.tensor_utils import convolve +from pyro.util import warn_if_nan + +logging.basicConfig(format="%(message)s", level=logging.INFO) + + +# A Discrete SIR Model +# ==================== +# +# Let's consider one of the simplest compartmental models: an SIR model +# https://en.wikipedia.org/wiki/Compartmental_models_in_epidemiology#The_SIR_model +# This models the dynamics of three groups within a population: +# +# population = Susceptible + Infected + Recovered +# +# At each discrete time step, each infected person infects a random number of +# susceptible people, and then randomly may recover. We noisily observe the +# number of people newly infected at each time step, assuming an unknown false +# negative rate, but no false positives. Our eventual objective is to estimate +# global model parameters R0 (the basic reproduction number), tau (the expected +# recovery time), and rho (the mean response rate = 1 - false negative rate). +# Having estimated these we will then estimate latent time series and forecast +# forward. +# +# We'll start by defining a discrete_model that uses a helper global_model to +# sample global parameters. +# +# Note we need to use ExtendedBinomial rather than Binomial because the data +# may lie outside of the predicted support. For these values, +# Binomial.log_prob() will error, whereas ExtendedBinomial.log_prob() will +# return -inf. + + +def global_model(population): + tau = args.recovery_time # Assume this can be measured exactly. + R0 = pyro.sample("R0", dist.LogNormal(0.0, 1.0)) + rho = pyro.sample("rho", dist.Uniform(0, 1)) + + # Convert interpretable parameters to distribution parameters. + rate_s = -R0 / (tau * population) + prob_i = 1 / (1 + tau) + + return rate_s, prob_i, rho + + +def discrete_model(args, data): + # Sample global parameters. + rate_s, prob_i, rho = global_model(args.population) + + # Sequentially sample time-local variables. + S = torch.tensor(args.population - 1.0) + I = torch.tensor(1.0) + for t, datum in enumerate(data): + S2I = pyro.sample("S2I_{}".format(t), dist.Binomial(S, -(rate_s * I).expm1())) + I2R = pyro.sample("I2R_{}".format(t), dist.Binomial(I, prob_i)) + S = pyro.deterministic("S_{}".format(t), S - S2I) + I = pyro.deterministic("I_{}".format(t), I + S2I - I2R) + pyro.sample("obs_{}".format(t), dist.ExtendedBinomial(S2I, rho), obs=datum) + + +# We can use this model to simulate data. We'll use poutine.condition to pin +# parameter values and poutine.trace to record sample observations. + + +def generate_data(args): + logging.info("Generating data...") + params = { + "R0": torch.tensor(args.basic_reproduction_number), + "rho": torch.tensor(args.response_rate), + } + empty_data = [None] * (args.duration + args.forecast) + + # We'll retry until we get an actual outbreak. + for attempt in range(100): + with poutine.trace() as tr: + with poutine.condition(data=params): + discrete_model(args, empty_data) + + # Concatenate sequential time series into tensors. + obs = torch.stack( + [ + site["value"] + for name, site in tr.trace.nodes.items() + if re.match("obs_[0-9]+", name) + ] + ) + S2I = torch.stack( + [ + site["value"] + for name, site in tr.trace.nodes.items() + if re.match("S2I_[0-9]+", name) + ] + ) + assert len(obs) == len(empty_data) + + obs_sum = int(obs[: args.duration].sum()) + S2I_sum = int(S2I[: args.duration].sum()) + if obs_sum >= args.min_observations: + logging.info( + "Observed {:d}/{:d} infections:\n{}".format( + obs_sum, + S2I_sum, + " ".join([str(int(x)) for x in obs[: args.duration]]), + ) + ) + return {"S2I": S2I, "obs": obs} + + raise ValueError( + "Failed to generate {} observations. Try increasing " + "--population or decreasing --min-observations".format(args.min_observations) + ) + + +# Inference +# ========= +# +# While the above discrete_model is easy to understand, its discrete latent +# variables pose a challenge for inference. One of the most popular inference +# strategies for such models is Sequential Monte Carlo. However since Pyro and +# PyTorch are stronger in gradient based vectorizable inference algorithms, we +# will instead pursue inference based on Hamiltonian Monte Carlo (HMC). +# +# Our general inference strategy will be to: +# 1. Introduce auxiliary variables to make the model Markov. +# 2. Introduce more auxiliary variables to create a discrete parameterization. +# 3. Marginalize out all remaining discrete latent variables. +# 4. Vectorize to enable parallel-scan temporal filtering. +# +# Let's consider reparameterizing in terms of the variables (S, I) rather than +# (S2I, I2R). Since these may lead to inconsistent states, we need to replace +# the Binomial transition factors (S2I, I2R) with ExtendedBinomial. +# +# The following model is equivalent to the discrete_model: + + +@config_enumerate +def reparameterized_discrete_model(args, data): + # Sample global parameters. + rate_s, prob_i, rho = global_model(args.population) + + # Sequentially sample time-local variables. + S_curr = torch.tensor(args.population - 1.0) + I_curr = torch.tensor(1.0) + for t, datum in enumerate(data): + # Sample reparameterizing variables. + # When reparameterizing to a factor graph, we ignored density via + # .mask(False). Thus distributions are used only for initialization. + S_prev, I_prev = S_curr, I_curr + S_curr = pyro.sample( + "S_{}".format(t), dist.Binomial(args.population, 0.5).mask(False) + ) + I_curr = pyro.sample( + "I_{}".format(t), dist.Binomial(args.population, 0.5).mask(False) + ) + + # Now we reverse the computation. + S2I = S_prev - S_curr + I2R = I_prev - I_curr + S2I + pyro.sample( + "S2I_{}".format(t), + dist.ExtendedBinomial(S_prev, -(rate_s * I_prev).expm1()), + obs=S2I, + ) + pyro.sample("I2R_{}".format(t), dist.ExtendedBinomial(I_prev, prob_i), obs=I2R) + pyro.sample("obs_{}".format(t), dist.ExtendedBinomial(S2I, rho), obs=datum) + + +# By reparameterizing, we have converted to coordinates that make the model +# Markov. We have also replaced dynamic integer_interval constraints with +# easier static integer_interval constraints (although we'll still need good +# initialization to avoid NANs). Since the discrete latent variables are +# bounded (by population size), we can enumerate out discrete latent variables +# and perform HMC inference over the global latents. However enumeration +# complexity is O(population^4), so this is only feasible for very small +# populations. +# +# Here is an inference approach using an MCMC sampler. + + +def infer_hmc_enum(args, data): + model = reparameterized_discrete_model + return _infer_hmc(args, data, model) + + +def _infer_hmc(args, data, model, init_values={}): + logging.info("Running inference...") + kernel = NUTS( + model, + full_mass=[("R0", "rho")], + max_tree_depth=args.max_tree_depth, + init_strategy=init_to_value(values=init_values), + jit_compile=args.jit, + ignore_jit_warnings=True, + ) + + # We'll define a hook_fn to log potential energy values during inference. + # This is helpful to diagnose whether the chain is mixing. + energies = [] + + def hook_fn(kernel, *unused): + e = float(kernel._potential_energy_last) + energies.append(e) + if args.verbose: + logging.info("potential = {:0.6g}".format(e)) + + mcmc = MCMC( + kernel, + hook_fn=hook_fn, + num_samples=args.num_samples, + warmup_steps=args.warmup_steps, + ) + mcmc.run(args, data) + mcmc.summary() + if args.plot: + import matplotlib.pyplot as plt + + plt.figure(figsize=(6, 3)) + plt.plot(energies) + plt.xlabel("MCMC step") + plt.ylabel("potential energy") + plt.title("MCMC energy trace") + plt.tight_layout() + + samples = mcmc.get_samples() + return samples + + +# To scale to large populations, we'll continue to reparameterize, this time +# replacing each of (S_aux,I_aux) with a combination of a bounded real +# variable and a Categorical variable with only four values. +# +# This is the crux: we can now perform HMC over the real variable and +# marginalize out the Categorical variables using variable elimination. +# +# We first define a helper to create enumerated Categorical sites. + + +def quantize(name, x_real, min, max): + """ + Randomly quantize in a way that preserves probability mass. + We use a piecewise polynomial spline of order 3. + """ + assert min < max + lb = x_real.detach().floor() + + # This cubic spline interpolates over the nearest four integers, ensuring + # piecewise quadratic gradients. + s = x_real - lb + ss = s * s + t = 1 - s + tt = t * t + probs = torch.stack( + [ + t * tt, + 4 + ss * (3 * s - 6), + 4 + tt * (3 * t - 6), + s * ss, + ], + dim=-1, + ) * (1 / 6) + q = pyro.sample("Q_" + name, dist.Categorical(probs)).type_as(x_real) + + x = lb + q - 1 + x = torch.max(x, 2 * min - 1 - x) + x = torch.min(x, 2 * max + 1 - x) + + return pyro.deterministic(name, x) + + +# Now we can define another equivalent model. + + +@config_enumerate +def continuous_model(args, data): + # Sample global parameters. + rate_s, prob_i, rho = global_model(args.population) + + # Sample reparameterizing variables. + S_aux = pyro.sample( + "S_aux", + dist.Uniform(-0.5, args.population + 0.5) + .mask(False) + .expand(data.shape) + .to_event(1), + ) + I_aux = pyro.sample( + "I_aux", + dist.Uniform(-0.5, args.population + 0.5) + .mask(False) + .expand(data.shape) + .to_event(1), + ) + + # Sequentially sample time-local variables. + S_curr = torch.tensor(args.population - 1.0) + I_curr = torch.tensor(1.0) + for t, datum in poutine.markov(enumerate(data)): + S_prev, I_prev = S_curr, I_curr + S_curr = quantize("S_{}".format(t), S_aux[..., t], min=0, max=args.population) + I_curr = quantize("I_{}".format(t), I_aux[..., t], min=0, max=args.population) + + # Now we reverse the computation. + S2I = S_prev - S_curr + I2R = I_prev - I_curr + S2I + pyro.sample( + "S2I_{}".format(t), + dist.ExtendedBinomial(S_prev, -(rate_s * I_prev).expm1()), + obs=S2I, + ) + pyro.sample("I2R_{}".format(t), dist.ExtendedBinomial(I_prev, prob_i), obs=I2R) + pyro.sample("obs_{}".format(t), dist.ExtendedBinomial(S2I, rho), obs=datum) + + +# Now all latent variables in the continuous_model are either continuous or +# enumerated, so we can use HMC. However we need to take special care with +# constraints because the above Markov reparameterization covers regions of +# hypothesis space that are infeasible (i.e. whose log_prob is -infinity). We +# thus heuristically initialize to a feasible point. + + +def heuristic_init(args, data): + """Heuristically initialize to a feasible point.""" + # Start with a single infection. + S0 = args.population - 1 + # Assume 50% <= response rate <= 100%. + S2I = data * min(2.0, (S0 / data.sum()).sqrt()) + S_aux = (S0 - S2I.cumsum(-1)).clamp(min=0.5) + # Account for the single initial infection. + S2I[0] += 1 + # Assume infection lasts less than a month. + recovery = torch.arange(30.0).div(args.recovery_time).neg().exp() + I_aux = convolve(S2I, recovery)[: len(data)].clamp(min=0.5) + + return { + "R0": torch.tensor(2.0), + "rho": torch.tensor(0.5), + "S_aux": S_aux, + "I_aux": I_aux, + } + + +def infer_hmc_cont(model, args, data): + init_values = heuristic_init(args, data) + return _infer_hmc(args, data, model, init_values=init_values) + + +# Our final inference trick is to vectorize. We can repurpose DiscreteHMM's +# implementation here, but we'll need to manually represent a Markov +# neighborhood of multiple Categorical of size 4 as single joint Categorical +# with 4 * 4 = 16 states, and then manually perform variable elimination (the +# factors here don't quite conform to DiscreteHMM's interface). + + +def quantize_enumerate(x_real, min, max): + """ + Randomly quantize in a way that preserves probability mass. + We use a piecewise polynomial spline of order 3. + """ + assert min < max + lb = x_real.detach().floor() + + # This cubic spline interpolates over the nearest four integers, ensuring + # piecewise quadratic gradients. + s = x_real - lb + ss = s * s + t = 1 - s + tt = t * t + probs = torch.stack( + [ + t * tt, + 4 + ss * (3 * s - 6), + 4 + tt * (3 * t - 6), + s * ss, + ], + dim=-1, + ) * (1 / 6) + logits = safe_log(probs) + q = torch.arange(-1.0, 3.0) + + x = lb.unsqueeze(-1) + q + x = torch.max(x, 2 * min - 1 - x) + x = torch.min(x, 2 * max + 1 - x) + return x, logits + + +def vectorized_model(args, data): + # Sample global parameters. + rate_s, prob_i, rho = global_model(args.population) + + # Sample reparameterizing variables. + S_aux = pyro.sample( + "S_aux", + dist.Uniform(-0.5, args.population + 0.5) + .mask(False) + .expand(data.shape) + .to_event(1), + ) + I_aux = pyro.sample( + "I_aux", + dist.Uniform(-0.5, args.population + 0.5) + .mask(False) + .expand(data.shape) + .to_event(1), + ) + + # Manually enumerate. + S_curr, S_logp = quantize_enumerate(S_aux, min=0, max=args.population) + I_curr, I_logp = quantize_enumerate(I_aux, min=0, max=args.population) + # Truncate final value from the right then pad initial value onto the left. + S_prev = torch.nn.functional.pad( + S_curr[:-1], (0, 0, 1, 0), value=args.population - 1 + ) + I_prev = torch.nn.functional.pad(I_curr[:-1], (0, 0, 1, 0), value=1) + # Reshape to support broadcasting, similar to EnumMessenger. + T = len(data) + Q = 4 + S_prev = S_prev.reshape(T, Q, 1, 1, 1) + I_prev = I_prev.reshape(T, 1, Q, 1, 1) + S_curr = S_curr.reshape(T, 1, 1, Q, 1) + S_logp = S_logp.reshape(T, 1, 1, Q, 1) + I_curr = I_curr.reshape(T, 1, 1, 1, Q) + I_logp = I_logp.reshape(T, 1, 1, 1, Q) + data = data.reshape(T, 1, 1, 1, 1) + + # Reverse the S2I,I2R computation. + S2I = S_prev - S_curr + I2R = I_prev - I_curr + S2I + + # Compute probability factors. + S2I_logp = dist.ExtendedBinomial(S_prev, -(rate_s * I_prev).expm1()).log_prob(S2I) + I2R_logp = dist.ExtendedBinomial(I_prev, prob_i).log_prob(I2R) + obs_logp = dist.ExtendedBinomial(S2I, rho).log_prob(data) + + # Manually perform variable elimination. + logp = S_logp + (I_logp + obs_logp) + S2I_logp + I2R_logp + logp = logp.reshape(-1, Q * Q, Q * Q) + logp = pyro.distributions.hmm._sequential_logmatmulexp(logp) + logp = logp.reshape(-1).logsumexp(0) + logp = logp - math.log(4) # Account for S,I initial distributions. + warn_if_nan(logp) + pyro.factor("obs", logp) + + +# We can fit vectorized_model exactly as we fit the original continuous_model, +# using our infer_hmc_cont helper. The vectorized model is more than an order +# of magnitude faster than the sequential version, and scales logarithmically +# in time (up to your machine's parallelism). +# +# After inference we have samples of all latent variables. Let's define a +# helper to examine the inferred posterior distributions. + + +def evaluate(args, samples): + # Print estimated values. + names = {"basic_reproduction_number": "R0", "response_rate": "rho"} + for name, key in names.items(): + mean = samples[key].mean().item() + std = samples[key].std().item() + logging.info( + "{}: truth = {:0.3g}, estimate = {:0.3g} \u00b1 {:0.3g}".format( + key, getattr(args, name), mean, std + ) + ) + + # Optionally plot histograms. + if args.plot: + import matplotlib.pyplot as plt + import seaborn as sns + + fig, axes = plt.subplots(2, 1, figsize=(5, 5)) + axes[0].set_title("Posterior parameter estimates") + for ax, (name, key) in zip(axes, names.items()): + truth = getattr(args, name) + sns.distplot(samples[key], ax=ax, label="posterior") + ax.axvline(truth, color="k", label="truth") + ax.set_xlabel(key + " = " + name.replace("_", " ")) + ax.set_yticks(()) + ax.legend(loc="best") + plt.tight_layout() + + +# Prediction and Forecasting +# ========================== +# +# So far we've written four models that each describe the same probability +# distribution. Each successive model made inference cheaper. Next let's move +# beyond inference and consider predicting latent infection rate and +# forecasting future infections. +# +# We'll use Pyro's effect handlers to combine multiple of the above models, +# leveraging the vectorized_model for inference, then the continuous_model to +# compute local latent variables, and finally the original discrete_model to +# forecast forward in time. Let's assume posterior samples have already been +# generated via infer_hmc_cont(vectorized_model, ...). + + +@torch.no_grad() +def predict(args, data, samples, truth=None): + logging.info("Forecasting {} steps ahead...".format(args.forecast)) + particle_plate = pyro.plate("particles", args.num_samples, dim=-1) + + # First we sample discrete auxiliary variables from the continuous + # variables sampled in vectorized_model. This samples only time steps + # [0:duration]. Here infer_discrete runs a forward-filter backward-sample + # algorithm. We'll add these new samples to the existing dict of samples. + model = poutine.condition(continuous_model, samples) + model = particle_plate(model) + model = infer_discrete(model, first_available_dim=-2) + with poutine.trace() as tr: + model(args, data) + samples = OrderedDict( + (name, site["value"]) + for name, site in tr.trace.nodes.items() + if site["type"] == "sample" + ) + + # Next we'll run the forward generative process in discrete_model. This + # samples time steps [duration:duration+forecast]. Again we'll update the + # dict of samples. + extended_data = list(data) + [None] * args.forecast + model = poutine.condition(discrete_model, samples) + model = particle_plate(model) + with poutine.trace() as tr: + model(args, extended_data) + samples = OrderedDict( + (name, site["value"]) + for name, site in tr.trace.nodes.items() + if site["type"] == "sample" + ) + + # Finally we'll concatenate the sequentially sampled values into contiguous + # tensors. This operates on the entire time interval [0:duration+forecast]. + for key in ("S", "I", "S2I", "I2R"): + pattern = key + "_[0-9]+" + series = [value for name, value in samples.items() if re.match(pattern, name)] + assert len(series) == args.duration + args.forecast + series[0] = series[0].expand(series[1].shape) + samples[key] = torch.stack(series, dim=-1) + S2I = samples["S2I"] + median = S2I.median(dim=0).values + logging.info( + "Median prediction of new infections (starting on day 0):\n{}".format( + " ".join(map(str, map(int, median))) + ) + ) + + # Optionally plot the latent and forecasted series of new infections. + if args.plot: + import matplotlib.pyplot as plt + + plt.figure() + time = torch.arange(args.duration + args.forecast) + p05 = S2I.kthvalue(int(round(0.5 + 0.05 * args.num_samples)), dim=0).values + p95 = S2I.kthvalue(int(round(0.5 + 0.95 * args.num_samples)), dim=0).values + plt.fill_between(time, p05, p95, color="red", alpha=0.3, label="90% CI") + plt.plot(time, median, "r-", label="median") + plt.plot(time[: args.duration], data, "k.", label="observed") + if truth is not None: + plt.plot(time, truth, "k--", label="truth") + plt.axvline(args.duration - 0.5, color="gray", lw=1) + plt.xlim(0, len(time) - 1) + plt.ylim(0, None) + plt.xlabel("day after first infection") + plt.ylabel("new infections per day") + plt.title("New infections in population of {}".format(args.population)) + plt.legend(loc="upper left") + plt.tight_layout() + + return samples + + +# Experiments +# =========== +# +# Finally we'll define an experiment runner. For example we can simulate 60 +# days of infection on a population of 10000 and forecast forward another 30 +# days, and plot the results as follows (takes about 3 minutes on my laptop): +# +# python sir_hmc.py -p 10000 -d 60 -f 30 --plot + + +def main(args): + pyro.set_rng_seed(args.rng_seed) + + dataset = generate_data(args) + obs = dataset["obs"][: args.duration] + + # Choose among inference methods. + if args.enum: + samples = infer_hmc_enum(args, obs) + elif args.sequential: + samples = infer_hmc_cont(continuous_model, args, obs) + else: + samples = infer_hmc_cont(vectorized_model, args, obs) + + # Evaluate fit. + evaluate(args, samples) + + # Predict latent time series. + if args.forecast: + samples = predict(args, obs, samples, truth=dataset["S2I"]) + + return samples + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser(description="SIR epidemiology modeling using HMC") + parser.add_argument("-p", "--population", default=10, type=int) + parser.add_argument("-m", "--min-observations", default=3, type=int) + parser.add_argument("-d", "--duration", default=10, type=int) + parser.add_argument("-f", "--forecast", default=0, type=int) + parser.add_argument("-R0", "--basic-reproduction-number", default=1.5, type=float) + parser.add_argument("-tau", "--recovery-time", default=7.0, type=float) + parser.add_argument("-rho", "--response-rate", default=0.5, type=float) + parser.add_argument( + "-e", "--enum", action="store_true", help="use the full enumeration model" + ) + parser.add_argument( + "-s", + "--sequential", + action="store_true", + help="use the sequential continuous model", + ) + parser.add_argument("-n", "--num-samples", default=200, type=int) + parser.add_argument("-w", "--warmup-steps", default=100, type=int) + parser.add_argument("-t", "--max-tree-depth", default=5, type=int) + parser.add_argument("-r", "--rng-seed", default=0, type=int) + parser.add_argument("--double", action="store_true") + parser.add_argument("--jit", action="store_true") + parser.add_argument("--cuda", action="store_true") + parser.add_argument("--verbose", action="store_true") + parser.add_argument("--plot", action="store_true") + args = parser.parse_args() + + if args.double: + torch.set_default_dtype(torch.float64) + if args.cuda: + torch.set_default_device("cuda") + + main(args) + + if args.plot: + import matplotlib.pyplot as plt + + plt.show() diff --git a/pyro/source/examples/smcfilter.py b/pyro/source/examples/smcfilter.py new file mode 100644 index 0000000000000000000000000000000000000000..065f8c94d306741bf3c8164aa87c15647dd044b3 --- /dev/null +++ b/pyro/source/examples/smcfilter.py @@ -0,0 +1,118 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import argparse +import logging + +import torch + +import pyro +import pyro.distributions as dist +from pyro.infer import SMCFilter + +logging.basicConfig(format="%(relativeCreated) 9d %(message)s", level=logging.INFO) + +""" +This file demonstrates how to use the SMCFilter algorithm with +a simple model of a noisy harmonic oscillator of the form: + + z[t] ~ N(A*z[t-1], B*sigma_z) + y[t] ~ N(z[t][0], sigma_y) + +""" + + +class SimpleHarmonicModel: + def __init__(self, process_noise, measurement_noise): + self.A = torch.tensor([[0.0, 1.0], [-1.0, 0.0]]) + self.B = torch.tensor([3.0, 3.0]) + self.sigma_z = torch.tensor(process_noise) + self.sigma_y = torch.tensor(measurement_noise) + + def init(self, state, initial): + self.t = 0 + state["z"] = pyro.sample("z_init", dist.Delta(initial, event_dim=1)) + + def step(self, state, y=None): + self.t += 1 + state["z"] = pyro.sample( + "z_{}".format(self.t), + dist.Normal(state["z"].matmul(self.A), self.B * self.sigma_z).to_event(1), + ) + y = pyro.sample( + "y_{}".format(self.t), dist.Normal(state["z"][..., 0], self.sigma_y), obs=y + ) + return state["z"], y + + +class SimpleHarmonicModel_Guide: + def __init__(self, model): + self.model = model + + def init(self, state, initial): + self.t = 0 + pyro.sample("z_init", dist.Delta(initial, event_dim=1)) + + def step(self, state, y=None): + self.t += 1 + + # Proposal distribution + pyro.sample( + "z_{}".format(self.t), + dist.Normal( + state["z"].matmul(self.model.A), torch.tensor([1.0, 1.0]) + ).to_event(1), + ) + + +def generate_data(args): + model = SimpleHarmonicModel(args.process_noise, args.measurement_noise) + + state = {} + initial = torch.tensor([1.0, 0.0]) + model.init(state, initial=initial) + zs = [initial] + ys = [None] + for t in range(args.num_timesteps): + z, y = model.step(state) + zs.append(z) + ys.append(y) + + return zs, ys + + +def main(args): + pyro.set_rng_seed(args.seed) + + model = SimpleHarmonicModel(args.process_noise, args.measurement_noise) + guide = SimpleHarmonicModel_Guide(model) + + smc = SMCFilter(model, guide, num_particles=args.num_particles, max_plate_nesting=0) + + logging.info("Generating data") + zs, ys = generate_data(args) + + logging.info("Filtering") + + smc.init(initial=torch.tensor([1.0, 0.0])) + for y in ys[1:]: + smc.step(y) + + logging.info("At final time step:") + z = smc.get_empirical()["z"] + logging.info("truth: {}".format(zs[-1])) + logging.info("mean: {}".format(z.mean)) + logging.info("std: {}".format(z.variance**0.5)) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description="Simple Harmonic Oscillator w/ SMC Filtering Inference" + ) + parser.add_argument("-n", "--num-timesteps", default=500, type=int) + parser.add_argument("-p", "--num-particles", default=100, type=int) + parser.add_argument("--process-noise", default=1.0, type=float) + parser.add_argument("--measurement-noise", default=1.0, type=float) + parser.add_argument("--seed", default=0, type=int) + args = parser.parse_args() + main(args) diff --git a/pyro/source/examples/sparse_gamma_def.py b/pyro/source/examples/sparse_gamma_def.py new file mode 100644 index 0000000000000000000000000000000000000000..e993dd31e97a1a7536c72612d490fb83322b65e4 --- /dev/null +++ b/pyro/source/examples/sparse_gamma_def.py @@ -0,0 +1,297 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +# This is an implementation of the sparse gamma deep exponential family model described in +# Ranganath, Rajesh, Tang, Linpeng, Charlin, Laurent, and Blei, David. Deep exponential families. +# +# To do inference we use one of the following guides: +# i) a custom guide (i.e. a hand-designed variational family) or +# ii) an 'auto' guide that is automatically constructed using pyro.infer.autoguide or +# iii) an 'easy' guide whose construction is facilitated using pyro.contrib.easyguide. +# +# The Olivetti faces dataset is originally from http://www.cl.cam.ac.uk/research/dtg/attarchive/facedatabase.html +# +# Compare to Christian Naesseth's implementation here: +# https://github.com/blei-lab/ars-reparameterization/tree/master/sparse%20gamma%20def + +import argparse +import errno +import os + +import numpy as np +import torch +import wget +from torch.nn.functional import softplus + +import pyro +import pyro.optim as optim +from pyro.contrib.easyguide import EasyGuide +from pyro.contrib.examples.util import get_data_directory +from pyro.distributions import Gamma, Normal, Poisson +from pyro.infer import SVI, TraceMeanField_ELBO +from pyro.infer.autoguide import AutoDiagonalNormal, init_to_feasible + +torch.set_default_dtype(torch.float32) +pyro.util.set_rng_seed(0) + + +# helper for initializing variational parameters +def rand_tensor(shape, mean, sigma): + return mean * torch.ones(shape) + sigma * torch.randn(shape) + + +class SparseGammaDEF: + def __init__(self): + # define the sizes of the layers in the deep exponential family + self.top_width = 100 + self.mid_width = 40 + self.bottom_width = 15 + self.image_size = 64 * 64 + # define hyperparameters that control the prior + self.alpha_z = torch.tensor(0.1) + self.beta_z = torch.tensor(0.1) + self.alpha_w = torch.tensor(0.1) + self.beta_w = torch.tensor(0.3) + # define parameters used to initialize variational parameters + self.alpha_init = 0.5 + self.mean_init = 0.0 + self.sigma_init = 0.1 + + # define the model + def model(self, x): + x_size = x.size(0) + + # sample the global weights + with pyro.plate("w_top_plate", self.top_width * self.mid_width): + w_top = pyro.sample("w_top", Gamma(self.alpha_w, self.beta_w)) + with pyro.plate("w_mid_plate", self.mid_width * self.bottom_width): + w_mid = pyro.sample("w_mid", Gamma(self.alpha_w, self.beta_w)) + with pyro.plate("w_bottom_plate", self.bottom_width * self.image_size): + w_bottom = pyro.sample("w_bottom", Gamma(self.alpha_w, self.beta_w)) + + # sample the local latent random variables + # (the plate encodes the fact that the z's for different datapoints are conditionally independent) + with pyro.plate("data", x_size): + z_top = pyro.sample( + "z_top", + Gamma(self.alpha_z, self.beta_z).expand([self.top_width]).to_event(1), + ) + # note that we need to use matmul (batch matrix multiplication) as well as appropriate reshaping + # to make sure our code is fully vectorized + w_top = ( + w_top.reshape(self.top_width, self.mid_width) + if w_top.dim() == 1 + else w_top.reshape(-1, self.top_width, self.mid_width) + ) + mean_mid = torch.matmul(z_top, w_top) + z_mid = pyro.sample( + "z_mid", Gamma(self.alpha_z, self.beta_z / mean_mid).to_event(1) + ) + + w_mid = ( + w_mid.reshape(self.mid_width, self.bottom_width) + if w_mid.dim() == 1 + else w_mid.reshape(-1, self.mid_width, self.bottom_width) + ) + mean_bottom = torch.matmul(z_mid, w_mid) + z_bottom = pyro.sample( + "z_bottom", Gamma(self.alpha_z, self.beta_z / mean_bottom).to_event(1) + ) + + w_bottom = ( + w_bottom.reshape(self.bottom_width, self.image_size) + if w_bottom.dim() == 1 + else w_bottom.reshape(-1, self.bottom_width, self.image_size) + ) + mean_obs = torch.matmul(z_bottom, w_bottom) + + # observe the data using a poisson likelihood + pyro.sample("obs", Poisson(mean_obs).to_event(1), obs=x) + + # define our custom guide a.k.a. variational distribution. + # (note the guide is mean field gamma) + def guide(self, x): + x_size = x.size(0) + + # define a helper function to sample z's for a single layer + def sample_zs(name, width): + alpha_z_q = pyro.param( + "alpha_z_q_%s" % name, + lambda: rand_tensor((x_size, width), self.alpha_init, self.sigma_init), + ) + mean_z_q = pyro.param( + "mean_z_q_%s" % name, + lambda: rand_tensor((x_size, width), self.mean_init, self.sigma_init), + ) + alpha_z_q, mean_z_q = softplus(alpha_z_q), softplus(mean_z_q) + pyro.sample( + "z_%s" % name, Gamma(alpha_z_q, alpha_z_q / mean_z_q).to_event(1) + ) + + # define a helper function to sample w's for a single layer + def sample_ws(name, width): + alpha_w_q = pyro.param( + "alpha_w_q_%s" % name, + lambda: rand_tensor((width), self.alpha_init, self.sigma_init), + ) + mean_w_q = pyro.param( + "mean_w_q_%s" % name, + lambda: rand_tensor((width), self.mean_init, self.sigma_init), + ) + alpha_w_q, mean_w_q = softplus(alpha_w_q), softplus(mean_w_q) + pyro.sample("w_%s" % name, Gamma(alpha_w_q, alpha_w_q / mean_w_q)) + + # sample the global weights + with pyro.plate("w_top_plate", self.top_width * self.mid_width): + sample_ws("top", self.top_width * self.mid_width) + with pyro.plate("w_mid_plate", self.mid_width * self.bottom_width): + sample_ws("mid", self.mid_width * self.bottom_width) + with pyro.plate("w_bottom_plate", self.bottom_width * self.image_size): + sample_ws("bottom", self.bottom_width * self.image_size) + + # sample the local latent random variables + with pyro.plate("data", x_size): + sample_zs("top", self.top_width) + sample_zs("mid", self.mid_width) + sample_zs("bottom", self.bottom_width) + + +# define a helper function to clip parameters defining the custom guide. +# (this is to avoid regions of the gamma distributions with extremely small means) +def clip_params(): + for param, clip in zip(("alpha", "mean"), (-2.5, -4.5)): + for layer in ["_q_top", "_q_mid", "_q_bottom"]: + for wz in ["_w", "_z"]: + pyro.param(param + wz + layer).data.clamp_(min=clip) + + +# Define a guide using the EasyGuide class. +# Unlike the 'auto' guide, this guide supports data subsampling. +# This is the best performing of the three guides. +# +# This guide is functionally similar to the auto guide, but performs +# somewhat better. The reason seems to be some combination of: i) the better +# numerical stability of the softplus; and ii) the custom initialization. +# Note however that for both the easy guide and auto guide KL divergences +# are not computed analytically in the ELBO because the ELBO thinks the +# mean-field condition is not satisfied, which leads to higher variance gradients. +class MyEasyGuide(EasyGuide): + def guide(self, x): + # group all the latent weights into one large latent variable + global_group = self.group(match="w_.*") + global_mean = pyro.param( + "w_mean", lambda: rand_tensor(global_group.event_shape, 0.5, 0.1) + ) + global_scale = softplus( + pyro.param( + "w_scale", lambda: rand_tensor(global_group.event_shape, 0.0, 0.1) + ) + ) + # use a mean field Normal distribution on all the ws + global_group.sample("ws", Normal(global_mean, global_scale).to_event(1)) + + # group all the latent zs into one large latent variable + local_group = self.group(match="z_.*") + x_shape = x.shape[:1] + local_group.event_shape + + with self.plate("data", x.size(0)): + local_mean = pyro.param("z_mean", lambda: rand_tensor(x_shape, 0.5, 0.1)) + local_scale = softplus( + pyro.param("z_scale", lambda: rand_tensor(x_shape, 0.0, 0.1)) + ) + # use a mean field Normal distribution on all the zs + local_group.sample("zs", Normal(local_mean, local_scale).to_event(1)) + + +def main(args): + # load data + print("loading training data...") + dataset_directory = get_data_directory(__file__) + dataset_path = os.path.join(dataset_directory, "faces_training.csv") + if not os.path.exists(dataset_path): + try: + os.makedirs(dataset_directory) + except OSError as e: + if e.errno != errno.EEXIST: + raise + pass + wget.download( + "https://github.com/pyro-ppl/datasets/blob/master/faces_training.csv?raw=true", + dataset_path, + ) + data = torch.tensor(np.loadtxt(dataset_path, delimiter=",")).float() + + sparse_gamma_def = SparseGammaDEF() + + # Due to the special logic in the custom guide (e.g. parameter clipping), the custom guide + # seems to be more amenable to higher learning rates. + # Nevertheless, the easy guide performs the best (presumably because of numerical instabilities + # related to the gamma distribution in the custom guide). + learning_rate = 0.2 if args.guide in ["auto", "easy"] else 4.5 + momentum = 0.05 if args.guide in ["auto", "easy"] else 0.1 + opt = optim.AdagradRMSProp({"eta": learning_rate, "t": momentum}) + + # use one of our three different guide types + if args.guide == "auto": + guide = AutoDiagonalNormal(sparse_gamma_def.model, init_loc_fn=init_to_feasible) + elif args.guide == "easy": + guide = MyEasyGuide(sparse_gamma_def.model) + else: + guide = sparse_gamma_def.guide + + # this is the svi object we use during training; we use TraceMeanField_ELBO to + # get analytic KL divergences + svi = SVI(sparse_gamma_def.model, guide, opt, loss=TraceMeanField_ELBO()) + + # we use svi_eval during evaluation; since we took care to write down our model in + # a fully vectorized way, this computation can be done efficiently with large tensor ops + svi_eval = SVI( + sparse_gamma_def.model, + guide, + opt, + loss=TraceMeanField_ELBO( + num_particles=args.eval_particles, vectorize_particles=True + ), + ) + + print("\nbeginning training with %s guide..." % args.guide) + + # the training loop + for k in range(args.num_epochs): + loss = svi.step(data) + # for the custom guide we clip parameters after each gradient step + if args.guide == "custom": + clip_params() + + if k % args.eval_frequency == 0 and k > 0 or k == args.num_epochs - 1: + loss = svi_eval.evaluate_loss(data) + print("[epoch %04d] training elbo: %.4g" % (k, -loss)) + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + # parse command line arguments + parser = argparse.ArgumentParser(description="parse args") + parser.add_argument( + "-n", "--num-epochs", default=1500, type=int, help="number of training epochs" + ) + parser.add_argument( + "-ef", + "--eval-frequency", + default=25, + type=int, + help="how often to evaluate elbo (number of epochs)", + ) + parser.add_argument( + "-ep", + "--eval-particles", + default=20, + type=int, + help="number of samples/particles to use during evaluation", + ) + parser.add_argument( + "--guide", default="custom", type=str, help="use a custom, auto, or easy guide" + ) + args = parser.parse_args() + assert args.guide in ["custom", "auto", "easy"] + main(args) diff --git a/pyro/source/examples/sparse_regression.py b/pyro/source/examples/sparse_regression.py new file mode 100644 index 0000000000000000000000000000000000000000..412d61b432b4e23bf9eb651ec04f00a6eddafab5 --- /dev/null +++ b/pyro/source/examples/sparse_regression.py @@ -0,0 +1,379 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import argparse +import math + +import numpy as np +import torch +from torch.optim import Adam + +import pyro +import pyro.distributions as dist +from pyro import poutine +from pyro.infer import Trace_ELBO +from pyro.infer.autoguide import AutoDelta, init_to_median + +""" +We demonstrate how to do sparse linear regression using a variant of the +approach described in [1]. This approach is particularly suitable for situations +with many feature dimensions (large P) but not too many datapoints (small N). +In particular we consider a quadratic regressor of the form: + +f(X) = constant + sum_i theta_i X_i + sum_{i 0.0) | ((mu + 4.0 * std) < 0.0)).bool() + active_dims = active_dims.nonzero(as_tuple=False).squeeze(-1) + + print( + "Identified the following active dimensions:", + active_dims.data.numpy().flatten(), + ) + print("Mean estimate for active singleton weights:\n", mu[active_dims].data.numpy()) + + # if there are 0 or 1 active dimensions there are no quadratic weights to be found + M = len(active_dims) + if M < 2: + return active_dims.data.numpy(), [] + + # prep for computation of posterior statistics for quadratic weights + left_dims, right_dims = torch.ones(M, M).triu(1).nonzero(as_tuple=False).t() + left_dims, right_dims = active_dims[left_dims], active_dims[right_dims] + + probe = torch.zeros(left_dims.size(0), 4, P, dtype=X.dtype, device=X.device) + left_dims_expand = left_dims.unsqueeze(-1).expand(left_dims.size(0), P) + right_dims_expand = right_dims.unsqueeze(-1).expand(right_dims.size(0), P) + for dim, value in zip(range(4), [1.0, 1.0, -1.0, -1.0]): + probe[:, dim, :].scatter_(-1, left_dims_expand, value) + for dim, value in zip(range(4), [1.0, -1.0, 1.0, -1.0]): + probe[:, dim, :].scatter_(-1, right_dims_expand, value) + + kprobe = kappa * probe + kprobe = kprobe.reshape(-1, P) + k_probeX = kernel(kprobe, kX, eta1, eta2, c) + k_prbprb = kernel(kprobe, kprobe, eta1, eta2, c) + + # compute mean and covariance for a subset of weights theta_ij (namely those with + # 'active' dimensions i and j) + vec = torch.tensor([0.25, -0.25, -0.25, 0.25], dtype=X.dtype, device=X.device) + mu = ( + torch.matmul(k_probeX, torch.matmul(k_xx_inv, Y).unsqueeze(-1)) + .squeeze(-1) + .reshape(left_dims.size(0), 4) + ) + mu = (mu * vec).sum(-1) + + var = k_prbprb - torch.matmul(k_probeX, torch.matmul(k_xx_inv, k_probeX.t())) + var = var.reshape(left_dims.size(0), 4, left_dims.size(0), 4).diagonal( + dim1=-4, dim2=-2 + ) + std = ( + ((var * vec.unsqueeze(-1)).sum(-2) * vec.unsqueeze(-1)) + .sum(-2) + .clamp(min=0.0) + .sqrt() + ) + + active_quad_dims = (((mu - 4.0 * std) > 0.0) | ((mu + 4.0 * std) < 0.0)) & ( + mu.abs() > 1.0e-4 + ).bool() + active_quad_dims = active_quad_dims.nonzero(as_tuple=False) + + active_quadratic_dims = np.stack( + [ + left_dims[active_quad_dims].data.numpy().flatten(), + right_dims[active_quad_dims].data.numpy().flatten(), + ], + axis=1, + ) + active_quadratic_dims = np.split( + active_quadratic_dims, active_quadratic_dims.shape[0] + ) + active_quadratic_dims = [tuple(a.tolist()[0]) for a in active_quadratic_dims] + + return active_dims.data.numpy(), active_quadratic_dims + + +# Create an artifical dataset with N datapoints and P feature dimensions. Of the P +# dimensions S will have non-zero singleton weights and Q(Q-1)/2 pairs of feature dimensions +# will have non-zero quadratic weights. +def get_data(N=20, P=10, S=2, Q=2, sigma_obs=0.15): + assert S < P and P > 3 and S > 2 and Q > 1 and Q <= S + torch.manual_seed(1) + + X = torch.randn(N, P) + + singleton_weights = 2.0 * torch.rand(S) - 1.0 + Y_mean = torch.einsum("ni,i->n", X[:, 0:S], singleton_weights) + + quadratic_weights = [] + expected_quad_dims = [] + for dim1 in range(Q): + for dim2 in range(Q): + if dim1 >= dim2: + continue + expected_quad_dims.append((dim1, dim2)) + quadratic_weights.append(2.0 * torch.rand(1) - 1.0) + Y_mean += quadratic_weights[-1] * X[:, dim1] * X[:, dim2] + quadratic_weights = torch.tensor(quadratic_weights) + + # we standardize the outputs Y + Y = Y_mean + Y -= Y.mean() + Y_std1 = Y.std() + Y /= Y_std1 + Y += sigma_obs * torch.randn(N) + Y -= Y.mean() + Y_std2 = Y.std() + Y /= Y_std2 + + assert X.shape == (N, P) + assert Y.shape == (N,) + + return X, Y, singleton_weights / (Y_std1 * Y_std2), expected_quad_dims + + +def init_loc_fn(site): + value = init_to_median(site, num_samples=50) + # we also make sure the initial sigma is not too large. + # (otherwise we run the danger of getting stuck in bad local optima during optimization). + if site["name"] == "sigma": + value = 0.1 * value + return value + + +def main(args): + # setup hyperparameters for the model + hypers = { + "expected_sparsity": max(1.0, args.num_dimensions / 10), + "alpha1": 3.0, + "beta1": 1.0, + "alpha2": 3.0, + "beta2": 1.0, + "alpha3": 1.0, + "c": 1.0, + } + + P = args.num_dimensions + S = args.active_dimensions + Q = args.quadratic_dimensions + + # generate artificial dataset + X, Y, expected_thetas, expected_quad_dims = get_data( + N=args.num_data, P=P, S=S, Q=Q, sigma_obs=args.sigma + ) + + loss_fn = Trace_ELBO().differentiable_loss + + # We initialize the AutoDelta guide (for MAP estimation) with args.num_trials many + # initial parameters sampled from the vicinity of the median of the prior distribution + # and then continue optimizing with the best performing initialization. + init_losses = [] + for restart in range(args.num_restarts): + pyro.clear_param_store() + pyro.set_rng_seed(restart) + guide = AutoDelta(model, init_loc_fn=init_loc_fn) + with torch.no_grad(): + init_losses.append(loss_fn(model, guide, X, Y, hypers).item()) + + pyro.set_rng_seed(int(np.argmin(init_losses))) + pyro.clear_param_store() + guide = AutoDelta(model, init_loc_fn=init_loc_fn) + + # Instead of using pyro.infer.SVI and pyro.optim we instead construct our own PyTorch + # optimizer and take charge of gradient-based optimization ourselves. + with poutine.block(), poutine.trace(param_only=True) as param_capture: + guide(X, Y, hypers) + params = list([pyro.param(name).unconstrained() for name in param_capture.trace]) + adam = Adam(params, lr=args.lr) + + report_frequency = 50 + print("Beginning MAP optimization...") + + # the optimization loop + for step in range(args.num_steps): + loss = loss_fn(model, guide, X, Y, hypers) / args.num_data + loss.backward() + adam.step() + adam.zero_grad() + + # we manually reduce the learning rate according to this schedule + if step in [100, 300, 700, 900]: + adam.param_groups[0]["lr"] *= 0.2 + + if step % report_frequency == 0 or step == args.num_steps - 1: + print("[step %04d] loss: %.5f" % (step, loss)) + + print("Expected singleton thetas:\n", expected_thetas.data.numpy()) + + # we do the final computation using double precision + median = guide.median() # == mode for MAP inference + active_dims, active_quad_dims = compute_posterior_stats( + X.double(), + Y.double(), + median["msq"].double(), + median["lambda"].double(), + median["eta1"].double(), + median["xisq"].double(), + torch.tensor(hypers["c"]).double(), + median["sigma"].double(), + ) + + expected_active_dims = np.arange(S).tolist() + + tp_singletons = len(set(active_dims) & set(expected_active_dims)) + fp_singletons = len(set(active_dims) - set(expected_active_dims)) + fn_singletons = len(set(expected_active_dims) - set(active_dims)) + singleton_stats = (tp_singletons, fp_singletons, fn_singletons) + + tp_quads = len(set(active_quad_dims) & set(expected_quad_dims)) + fp_quads = len(set(active_quad_dims) - set(expected_quad_dims)) + fn_quads = len(set(expected_quad_dims) - set(active_quad_dims)) + quad_stats = (tp_quads, fp_quads, fn_quads) + + # We report how well we did, i.e. did we recover the sparse set of coefficients + # that we expected for our artificial dataset? + print("[SUMMARY STATS]") + print( + "Singletons (true positive, false positive, false negative): " + + "(%d, %d, %d)" % singleton_stats + ) + print( + "Quadratic (true positive, false positive, false negative): " + + "(%d, %d, %d)" % quad_stats + ) + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser(description="Krylov KIT") + parser.add_argument("--num-data", type=int, default=750) + parser.add_argument("--num-steps", type=int, default=1000) + parser.add_argument("--num-dimensions", type=int, default=100) + parser.add_argument("--num-restarts", type=int, default=10) + parser.add_argument("--sigma", type=float, default=0.05) + parser.add_argument("--active-dimensions", type=int, default=10) + parser.add_argument("--quadratic-dimensions", type=int, default=5) + parser.add_argument("--lr", type=float, default=0.3) + args = parser.parse_args() + + main(args) diff --git a/pyro/source/examples/svi_horovod.py b/pyro/source/examples/svi_horovod.py new file mode 100644 index 0000000000000000000000000000000000000000..a9b4f1a516c2251d3fce2f9eea70e01cd0b7ddad --- /dev/null +++ b/pyro/source/examples/svi_horovod.py @@ -0,0 +1,169 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +# Distributed training via Horovod. +# +# This tutorial demonstrates how to distribute SVI training across multiple +# machines (or multiple GPUs on one or more machines) using the Horovod +# library. Horovod enables data-parallel training by aggregating stochastic +# gradients at each step of training. Horovod is not intended for model +# parallelism. We focus on integration between Horovod and Pyro. For further +# details on distributed computing with Horovod, see +# https://horovod.readthedocs.io/en/stable +# +# This assumes you have installed horovod, e.g. via +# pip install pyro-ppl[horovod] +# For detailed instructions see +# https://horovod.readthedocs.io/en/stable/install.html +# On my mac laptop I was able to install horovod with +# CFLAGS=-mmacosx-version-min=10.15 HOROVOD_WITH_PYTORCH=1 \ +# pip install --no-cache-dir 'horovod[pytorch]' +# +# Finally, you'll need to run this script via horovodrun, e.g. +# horovodrun -np 2 python svi_horovod.py +# For details on running Horovod see +# https://github.com/horovod/horovod/blob/master/docs/running.rst + +import argparse + +import torch +import torch.multiprocessing as mp + +import pyro +import pyro.distributions as dist +from pyro.infer import SVI, Trace_ELBO +from pyro.infer.autoguide import AutoNormal +from pyro.nn import PyroModule +from pyro.optim import Adam, HorovodOptimizer + + +# We define a model as usual, with no reference to Horovod. +# This model is data parallel and supports subsampling. +class Model(PyroModule): + def __init__(self, size): + super().__init__() + self.size = size + + def forward(self, covariates, data=None): + coeff = pyro.sample("coeff", dist.Normal(0, 1)) + bias = pyro.sample("bias", dist.Normal(0, 1)) + scale = pyro.sample("scale", dist.LogNormal(0, 1)) + + # Since we'll use a distributed dataloader during training, we need to + # manually pass minibatches of (covariates,data) that are smaller than + # the full self.size. In particular we cannot rely on pyro.plate to + # automatically subsample, since that would lead to all workers drawing + # identical subsamples. + with pyro.plate("data", self.size, len(covariates)): + loc = bias + coeff * covariates + return pyro.sample("obs", dist.Normal(loc, scale), obs=data) + + +# The following is a standard training loop. To emphasize the Horovod-specific +# parts, we've guarded them by `if args.horovod:`. +def main(args): + # Create a model, synthetic data, and a guide. + pyro.set_rng_seed(args.seed) + model = Model(args.size) + covariates = torch.randn(args.size) + data = model(covariates) + guide = AutoNormal(model) + + if args.horovod: + # Initialize Horovod and set PyTorch globals. + import horovod.torch as hvd + + hvd.init() + torch.set_num_threads(1) + if args.cuda: + torch.cuda.set_device(hvd.local_rank()) + if args.cuda: + torch.set_default_device("cuda") + device = torch.tensor(0).device + + if args.horovod: + # Initialize parameters and broadcast to all workers. + guide(covariates[:1], data[:1]) # Initializes model and guide. + hvd.broadcast_parameters(guide.state_dict(), root_rank=0) + hvd.broadcast_parameters(model.state_dict(), root_rank=0) + + # Create an ELBO loss and a Pyro optimizer. + elbo = Trace_ELBO() + optim = Adam({"lr": args.learning_rate}) + + if args.horovod: + # Wrap the basic optimizer in a distributed optimizer. + optim = HorovodOptimizer(optim) + + # Create a dataloader. + dataset = torch.utils.data.TensorDataset(covariates, data) + if args.horovod: + # Horovod requires a distributed sampler. + sampler = torch.utils.data.distributed.DistributedSampler( + dataset, hvd.size(), hvd.rank() + ) + else: + sampler = torch.utils.data.RandomSampler(dataset) + config = {"batch_size": args.batch_size, "sampler": sampler} + if args.cuda: + config["num_workers"] = 1 + config["pin_memory"] = True + # Try to use forkserver to spawn workers instead of fork. + if ( + hasattr(mp, "_supports_context") + and mp._supports_context + and "forkserver" in mp.get_all_start_methods() + ): + config["multiprocessing_context"] = "forkserver" + dataloader = torch.utils.data.DataLoader(dataset, **config) + + # Run stochastic variational inference. + svi = SVI(model, guide, optim, elbo) + for epoch in range(args.num_epochs): + if args.horovod: + # Set rng seeds on distributed samplers. This is required. + sampler.set_epoch(epoch) + + for step, (covariates_batch, data_batch) in enumerate(dataloader): + loss = svi.step(covariates_batch.to(device), data_batch.to(device)) + + if args.horovod: + # Optionally average loss metric across workers. + # You can do this with arbitrary torch.Tensors. + loss = torch.tensor(loss) + loss = hvd.allreduce(loss, "loss") + loss = loss.item() + + # Print only on the rank=0 worker. + if step % 100 == 0 and hvd.rank() == 0: + print("epoch {} step {} loss = {:0.4g}".format(epoch, step, loss)) + else: + if step % 100 == 0: + print("epoch {} step {} loss = {:0.4g}".format(epoch, step, loss)) + + if args.horovod: + # After we're done with the distributed parts of the program, + # we can shutdown all but the rank=0 worker. + hvd.shutdown() + if hvd.rank() != 0: + return + + if args.outfile: + print("saving to {}".format(args.outfile)) + torch.save({"model": model, "guide": guide}, args.outfile) + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser(description="Distributed training via Horovod") + parser.add_argument("-o", "--outfile") + parser.add_argument("-s", "--size", default=1000000, type=int) + parser.add_argument("-b", "--batch-size", default=100, type=int) + parser.add_argument("-n", "--num-epochs", default=10, type=int) + parser.add_argument("-lr", "--learning-rate", default=0.01, type=float) + parser.add_argument("--cuda", action="store_true") + parser.add_argument("--horovod", action="store_true", default=True) + parser.add_argument("--no-horovod", action="store_false", dest="horovod") + parser.add_argument("--seed", default=20200723, type=int) + args = parser.parse_args() + main(args) diff --git a/pyro/source/examples/svi_lightning.py b/pyro/source/examples/svi_lightning.py new file mode 100644 index 0000000000000000000000000000000000000000..dc0c4267dfbd6f79334fd975df6bed2cda5eeed1 --- /dev/null +++ b/pyro/source/examples/svi_lightning.py @@ -0,0 +1,125 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +# Distributed training via Pytorch Lightning. +# +# This tutorial demonstrates how to distribute SVI training across multiple +# machines (or multiple GPUs on one or more machines) using the PyTorch Lightning +# library. PyTorch Lightning enables data-parallel training by aggregating stochastic +# gradients at each step of training. We focus on integration between PyTorch Lightning and Pyro. +# For further details on distributed computing with PyTorch Lightning, see +# https://lightning.ai/docs/pytorch/latest +# +# This assumes you have installed pytorch lightning, e.g. via +# pip install pyro-ppl[lightning] + +import argparse + +import lightning.pytorch as pl +import torch + +import pyro +import pyro.distributions as dist +from pyro.infer import Trace_ELBO +from pyro.infer.autoguide import AutoNormal +from pyro.nn import PyroModule + + +# We define a model as usual, with no reference to Pytorch Lightning. +# This model is data parallel and supports subsampling. +class Model(PyroModule): + def __init__(self, size): + super().__init__() + self.size = size + + def forward(self, covariates, data=None): + coeff = pyro.sample("coeff", dist.Normal(0, 1)) + bias = pyro.sample("bias", dist.Normal(0, 1)) + scale = pyro.sample("scale", dist.LogNormal(0, 1)) + + # Since we'll use a distributed dataloader during training, we need to + # manually pass minibatches of (covariates,data) that are smaller than + # the full self.size. In particular we cannot rely on pyro.plate to + # automatically subsample, since that would lead to all workers drawing + # identical subsamples. + with pyro.plate("data", self.size, len(covariates)): + loc = bias + coeff * covariates + return pyro.sample("obs", dist.Normal(loc, scale), obs=data) + + +# We define an ELBO loss, a PyTorch optimizer, and a training step in our PyroLightningModule. +# Note that we are using a PyTorch optimizer instead of a Pyro optimizer and +# we are using ``training_step`` instead of Pyro's SVI machinery. +class PyroLightningModule(pl.LightningModule): + def __init__(self, loss_fn: pyro.infer.elbo.ELBOModule, lr: float): + super().__init__() + self.loss_fn = loss_fn + self.model = loss_fn.model + self.guide = loss_fn.guide + self.lr = lr + self.predictive = pyro.infer.Predictive( + self.model, guide=self.guide, num_samples=1 + ) + + def forward(self, *args): + return self.predictive(*args) + + def training_step(self, batch, batch_idx): + """Training step for Pyro training.""" + loss = self.loss_fn(*batch) + # Logging to TensorBoard by default + self.log("train_loss", loss) + return loss + + def configure_optimizers(self): + """Configure an optimizer.""" + return torch.optim.Adam(self.loss_fn.parameters(), lr=self.lr) + + +def main(args): + # Create a model, synthetic data, a guide, and a lightning module. + pyro.set_rng_seed(args.seed) + pyro.settings.set(module_local_params=True) + model = Model(args.size) + covariates = torch.randn(args.size) + data = model(covariates) + guide = AutoNormal(model) + loss_fn = Trace_ELBO()(model, guide) + training_plan = PyroLightningModule(loss_fn, args.learning_rate) + + # Create a dataloader. + dataset = torch.utils.data.TensorDataset(covariates, data) + dataloader = torch.utils.data.DataLoader(dataset, batch_size=args.batch_size) + + # All relevant parameters need to be initialized before ``configure_optimizer`` is called. + # Since we used AutoNormal guide our parameters have not be initialized yet. + # Therefore we initialize the model and guide by running one mini-batch through the loss. + mini_batch = dataset[: args.batch_size] + loss_fn(*mini_batch) + + # Run stochastic variational inference using PyTorch Lightning Trainer. + trainer = pl.Trainer( + accelerator=args.accelerator, + strategy=args.strategy, + devices=args.devices, + max_epochs=args.max_epochs, + ) + trainer.fit(training_plan, train_dataloaders=dataloader) + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser( + description="Distributed training via PyTorch Lightning" + ) + parser.add_argument("--size", default=1000000, type=int) + parser.add_argument("--batch_size", default=100, type=int) + parser.add_argument("--learning_rate", default=0.01, type=float) + parser.add_argument("--seed", default=20200723, type=int) + # pl.Trainer arguments. + parser.add_argument("--accelerator", default="auto") + parser.add_argument("--strategy", default="auto") + parser.add_argument("--devices", default="auto") + parser.add_argument("--max_epochs", default=None) + args = parser.parse_args() + main(args) diff --git a/pyro/source/examples/svi_torch.py b/pyro/source/examples/svi_torch.py new file mode 100644 index 0000000000000000000000000000000000000000..e6f8ad7c26ecac41905374775330443949df0a75 --- /dev/null +++ b/pyro/source/examples/svi_torch.py @@ -0,0 +1,111 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +# Using vanilla PyTorch to perform optimization in SVI. +# +# This tutorial demonstrates how to use standard PyTorch optimizers, dataloaders and training loops +# to perform optimization in SVI. This is useful when you want to use custom optimizers, +# learning rate schedules, dataloaders, or other advanced training techniques, +# or just to simplify integration with other elements of the PyTorch ecosystem. + +import argparse +from typing import Callable + +import torch + +import pyro +import pyro.distributions as dist +from pyro.infer import Trace_ELBO +from pyro.infer.autoguide import AutoNormal +from pyro.nn import PyroModule + + +# We define a model as usual. This model is data parallel and supports subsampling. +class Model(PyroModule): + def __init__(self, size): + super().__init__() + self.size = size + # We register a buffer for a constant scalar tensor to represent zero. + # This is useful for making priors that do not depend on inputs + # or learnable parameters compatible with the Module.to() method + # for setting the device or dtype of a module and its parameters. + self.register_buffer("zero", torch.tensor(0.0)) + + def forward(self, covariates, data=None): + # Sample parameters from priors that make use of the zero buffer trick + coeff = pyro.sample("coeff", dist.Normal(self.zero, 1)) + bias = pyro.sample("bias", dist.Normal(self.zero, 1)) + scale = pyro.sample("scale", dist.LogNormal(self.zero, 1)) + + # Since we'll use a PyTorch dataloader during training, we need to + # manually pass minibatches of (covariates,data) that are smaller than + # the full self.size, rather than relying on pyro.plate to automatically subsample. + with pyro.plate("data", self.size, len(covariates)): + loc = bias + coeff * covariates + return pyro.sample("obs", dist.Normal(loc, scale), obs=data) + + +def main(args): + # Make PyroModule parameters local (like ordinary torch.nn.Parameters), + # rather than shared by name through Pyro's global parameter store. + # This is highly recommended whenever models can be written without pyro.param(). + pyro.settings.set(module_local_params=True) + + # set seed for reproducibility + pyro.set_rng_seed(args.seed) + + # Create a synthetic dataset from a randomly initialized model. + with torch.no_grad(): + covariates = torch.randn(args.size) + data = Model(args.size)(covariates) + covariates = covariates.to(device=torch.device("cuda" if args.cuda else "cpu")) + data = data.to(device=torch.device("cuda" if args.cuda else "cpu")) + + # Create a model and a guide, both as (Pyro)Modules. + model: torch.nn.Module = Model(args.size) + guide: torch.nn.Module = AutoNormal(model) + + # Create a loss function as a Module that includes model and guide parameters. + # All Pyro ELBO estimators can be __call__()ed with a model and guide pair as arguments + # to return a loss function Module that takes the same arguments as the model and guide + # and exposes all of their torch.nn.Parameters and pyro.nn.PyroParam parameters. + elbo: Callable[[torch.nn.Module, torch.nn.Module], torch.nn.Module] = Trace_ELBO() + loss_fn: torch.nn.Module = elbo(model, guide) + loss_fn.to(device=torch.device("cuda" if args.cuda else "cpu")) + + # Create a dataloader. + dataset = torch.utils.data.TensorDataset(covariates, data) + dataloader = torch.utils.data.DataLoader(dataset, batch_size=args.batch_size) + + # All relevant parameters need to be initialized before an optimizer can be created. + # Since we used AutoNormal guide our parameters have not be initialized yet. + # Therefore we initialize the model and guide by running one mini-batch through the loss. + mini_batch = dataset[: args.batch_size] + loss_fn(*mini_batch) + + # Create a PyTorch optimizer for the parameters of the model and guide in loss_fn. + optimizer = torch.optim.Adam(loss_fn.parameters(), lr=args.learning_rate) + + # Run stochastic variational inference using PyTorch optimizers from torch.optim + for epoch in range(args.num_epochs): + for batch in dataloader: + optimizer.zero_grad() + loss = loss_fn(*batch) + loss.backward() + optimizer.step() + print(f"epoch {epoch} loss = {loss}") + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser( + description="Using vanilla PyTorch to perform optimization in SVI" + ) + parser.add_argument("--size", default=10000, type=int) + parser.add_argument("--batch-size", default=100, type=int) + parser.add_argument("--learning-rate", default=0.01, type=float) + parser.add_argument("--seed", default=20200723, type=int) + parser.add_argument("--num-epochs", default=10, type=int) + parser.add_argument("--cuda", action="store_true", default=False) + args = parser.parse_args() + main(args) diff --git a/pyro/source/examples/toy_mixture_model_discrete_enumeration.py b/pyro/source/examples/toy_mixture_model_discrete_enumeration.py new file mode 100644 index 0000000000000000000000000000000000000000..0c4ac612b075b2f0b89f0527edd10dcd34af0e44 --- /dev/null +++ b/pyro/source/examples/toy_mixture_model_discrete_enumeration.py @@ -0,0 +1,141 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +""" +A toy mixture model to provide a simple example for implementing discrete enumeration. + +(A) -> [B] -> (C) + +A is an observed Bernoulli variable with Beta prior. +B is a hidden variable which is a mixture of two Bernoulli distributions (with Beta priors), +chosen by A being true or false. +C is observed, and like B, is a mixture of two Bernoulli distributions (with Beta priors), +chosen by B being true or false. +There is a plate over the three variables for n independent observations of data. + +Because B is hidden and discrete we wish to marginalize it out of the model. +This is done by: + 1) marking the model method with `@pyro.infer.config_enumerate` + 2) marking the B sample site in the model with `infer={"enumerate": "parallel"}` + 3) passing `pyro.infer.SVI` the `pyro.infer.TraceEnum_ELBO` loss function +""" + +import argparse + +import matplotlib.pyplot as plt +import numpy as np +import torch +from torch.distributions import constraints +from torch.distributions.bernoulli import Bernoulli +from torch.distributions.beta import Beta +from tqdm import tqdm + +import pyro +import pyro.distributions as dist +import pyro.infer +import pyro.optim +from pyro.ops.indexing import Vindex + + +def main(args): + num_obs = args.num_obs + num_steps = args.num_steps + prior, CPDs, data = generate_data(num_obs) + posterior_params = train(prior, data, num_steps, num_obs) + evaluate(CPDs, posterior_params) + + +def generate_data(num_obs): + # domain = [False, True] + prior = { + "A": torch.tensor([1.0, 10.0]), + "B": torch.tensor([[10.0, 1.0], [1.0, 10.0]]), + "C": torch.tensor([[10.0, 1.0], [1.0, 10.0]]), + } + CPDs = { + "p_A": Beta(prior["A"][0], prior["A"][1]).sample(), + "p_B": Beta(prior["B"][:, 0], prior["B"][:, 1]).sample(), + "p_C": Beta(prior["C"][:, 0], prior["C"][:, 1]).sample(), + } + data = {"A": Bernoulli(torch.ones(num_obs) * CPDs["p_A"]).sample()} + data["B"] = Bernoulli( + torch.gather(CPDs["p_B"], 0, data["A"].type(torch.long)) + ).sample() + data["C"] = Bernoulli( + torch.gather(CPDs["p_C"], 0, data["B"].type(torch.long)) + ).sample() + return prior, CPDs, data + + +@pyro.infer.config_enumerate +def model(prior, obs, num_obs): + p_A = pyro.sample("p_A", dist.Beta(1, 1)) + p_B = pyro.sample("p_B", dist.Beta(torch.ones(2), torch.ones(2)).to_event(1)) + p_C = pyro.sample("p_C", dist.Beta(torch.ones(2), torch.ones(2)).to_event(1)) + with pyro.plate("data_plate", num_obs): + A = pyro.sample("A", dist.Bernoulli(p_A.expand(num_obs)), obs=obs["A"]) + # Vindex used to ensure proper indexing into the enumerated sample sites + B = pyro.sample( + "B", + dist.Bernoulli(Vindex(p_B)[A.type(torch.long)]), + infer={"enumerate": "parallel"}, + ) + pyro.sample("C", dist.Bernoulli(Vindex(p_C)[B.type(torch.long)]), obs=obs["C"]) + + +def guide(prior, obs, num_obs): + a = pyro.param("a", prior["A"], constraint=constraints.positive) + pyro.sample("p_A", dist.Beta(a[0], a[1])) + b = pyro.param("b", prior["B"], constraint=constraints.positive) + pyro.sample("p_B", dist.Beta(b[:, 0], b[:, 1]).to_event(1)) + c = pyro.param("c", prior["C"], constraint=constraints.positive) + pyro.sample("p_C", dist.Beta(c[:, 0], c[:, 1]).to_event(1)) + + +def train(prior, data, num_steps, num_obs): + pyro.clear_param_store() + # max_plate_nesting = 1 because there is a single plate in the model + loss_func = pyro.infer.TraceEnum_ELBO(max_plate_nesting=1) + svi = pyro.infer.SVI(model, guide, pyro.optim.Adam({"lr": 0.01}), loss=loss_func) + losses = [] + for _ in tqdm(range(num_steps)): + loss = svi.step(prior, data, num_obs) + losses.append(loss) + plt.figure() + plt.plot(losses) + plt.show() + posterior_params = {k: np.array(v.data) for k, v in pyro.get_param_store().items()} + posterior_params["a"] = posterior_params["a"][ + None, : + ] # reshape to same as other variables + return posterior_params + + +def evaluate(CPDs, posterior_params): + true_p_A, pred_p_A = get_true_pred_CPDs(CPDs["p_A"], posterior_params["a"]) + true_p_B, pred_p_B = get_true_pred_CPDs(CPDs["p_B"], posterior_params["b"]) + true_p_C, pred_p_C = get_true_pred_CPDs(CPDs["p_C"], posterior_params["c"]) + print("\np_A = True") + print("actual: ", true_p_A) + print("predicted:", pred_p_A) + print("\np_B = True | A = False/True") + print("actual: ", true_p_B) + print("predicted:", pred_p_B) + print("\np_C = True | B = False/True") + print("actual: ", true_p_C) + print("predicted:", pred_p_C) + + +def get_true_pred_CPDs(CPD, posterior_param): + true_p = CPD.numpy() + pred_p = posterior_param[:, 0] / np.sum(posterior_param, axis=1) + return true_p, pred_p + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser(description="Toy mixture model") + parser.add_argument("-n", "--num-steps", default=4000, type=int) + parser.add_argument("-o", "--num-obs", default=10000, type=int) + args = parser.parse_args() + main(args) diff --git a/pyro/source/examples/vae/ss_vae_M2.py b/pyro/source/examples/vae/ss_vae_M2.py new file mode 100644 index 0000000000000000000000000000000000000000..0d88ff3f0b6b451a071bfa86c2b4d7b5a7c38771 --- /dev/null +++ b/pyro/source/examples/vae/ss_vae_M2.py @@ -0,0 +1,540 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import argparse + +import torch +import torch.nn as nn +from utils.custom_mlp import MLP, Exp +from utils.mnist_cached import MNISTCached, mkdir_p, setup_data_loaders +from utils.vae_plots import mnist_test_tsne_ssvae, plot_conditional_samples_ssvae +from visdom import Visdom + +import pyro +import pyro.distributions as dist +from pyro.contrib.examples.util import print_and_log +from pyro.infer import ( + SVI, + JitTrace_ELBO, + JitTraceEnum_ELBO, + Trace_ELBO, + TraceEnum_ELBO, + config_enumerate, +) +from pyro.optim import Adam + + +class SSVAE(nn.Module): + """ + This class encapsulates the parameters (neural networks) and models & guides needed to train a + semi-supervised variational auto-encoder on the MNIST image dataset + + :param output_size: size of the tensor representing the class label (10 for MNIST since + we represent the class labels as a one-hot vector with 10 components) + :param input_size: size of the tensor representing the image (28*28 = 784 for our MNIST dataset + since we flatten the images and scale the pixels to be in [0,1]) + :param z_dim: size of the tensor representing the latent random variable z + (handwriting style for our MNIST dataset) + :param hidden_layers: a tuple (or list) of MLP layers to be used in the neural networks + representing the parameters of the distributions in our model + :param use_cuda: use GPUs for faster training + :param aux_loss_multiplier: the multiplier to use with the auxiliary loss + """ + + def __init__( + self, + output_size=10, + input_size=784, + z_dim=50, + hidden_layers=(500,), + config_enum=None, + use_cuda=False, + aux_loss_multiplier=None, + ): + super().__init__() + + # initialize the class with all arguments provided to the constructor + self.output_size = output_size + self.input_size = input_size + self.z_dim = z_dim + self.hidden_layers = hidden_layers + self.allow_broadcast = config_enum == "parallel" + self.use_cuda = use_cuda + self.aux_loss_multiplier = aux_loss_multiplier + + # define and instantiate the neural networks representing + # the parameters of various distributions in the model + self.setup_networks() + + def setup_networks(self): + z_dim = self.z_dim + hidden_sizes = self.hidden_layers + + # define the neural networks used later in the model and the guide. + # these networks are MLPs (multi-layered perceptrons or simple feed-forward networks) + # where the provided activation parameter is used on every linear layer except + # for the output layer where we use the provided output_activation parameter + self.encoder_y = MLP( + [self.input_size] + hidden_sizes + [self.output_size], + activation=nn.Softplus, + output_activation=nn.Softmax, + allow_broadcast=self.allow_broadcast, + use_cuda=self.use_cuda, + ) + + # a split in the final layer's size is used for multiple outputs + # and potentially applying separate activation functions on them + # e.g. in this network the final output is of size [z_dim,z_dim] + # to produce loc and scale, and apply different activations [None,Exp] on them + self.encoder_z = MLP( + [self.input_size + self.output_size] + hidden_sizes + [[z_dim, z_dim]], + activation=nn.Softplus, + output_activation=[None, Exp], + allow_broadcast=self.allow_broadcast, + use_cuda=self.use_cuda, + ) + + self.decoder = MLP( + [z_dim + self.output_size] + hidden_sizes + [self.input_size], + activation=nn.Softplus, + output_activation=nn.Sigmoid, + allow_broadcast=self.allow_broadcast, + use_cuda=self.use_cuda, + ) + + # using GPUs for faster training of the networks + if self.use_cuda: + self.cuda() + + def model(self, xs, ys=None): + """ + The model corresponds to the following generative process: + p(z) = normal(0,I) # handwriting style (latent) + p(y|x) = categorical(I/10.) # which digit (semi-supervised) + p(x|y,z) = bernoulli(loc(y,z)) # an image + loc is given by a neural network `decoder` + + :param xs: a batch of scaled vectors of pixels from an image + :param ys: (optional) a batch of the class labels i.e. + the digit corresponding to the image(s) + :return: None + """ + # register this pytorch module and all of its sub-modules with pyro + pyro.module("ss_vae", self) + + batch_size = xs.size(0) + options = dict(dtype=xs.dtype, device=xs.device) + with pyro.plate("data"): + # sample the handwriting style from the constant prior distribution + prior_loc = torch.zeros(batch_size, self.z_dim, **options) + prior_scale = torch.ones(batch_size, self.z_dim, **options) + zs = pyro.sample("z", dist.Normal(prior_loc, prior_scale).to_event(1)) + + # if the label y (which digit to write) is supervised, sample from the + # constant prior, otherwise, observe the value (i.e. score it against the constant prior) + alpha_prior = torch.ones(batch_size, self.output_size, **options) / ( + 1.0 * self.output_size + ) + ys = pyro.sample("y", dist.OneHotCategorical(alpha_prior), obs=ys) + + # Finally, score the image (x) using the handwriting style (z) and + # the class label y (which digit to write) against the + # parametrized distribution p(x|y,z) = bernoulli(decoder(y,z)) + # where `decoder` is a neural network. We disable validation + # since the decoder output is a relaxed Bernoulli value. + loc = self.decoder([zs, ys]) + pyro.sample( + "x", dist.Bernoulli(loc, validate_args=False).to_event(1), obs=xs + ) + # return the loc so we can visualize it later + return loc + + def guide(self, xs, ys=None): + """ + The guide corresponds to the following: + q(y|x) = categorical(alpha(x)) # infer digit from an image + q(z|x,y) = normal(loc(x,y),scale(x,y)) # infer handwriting style from an image and the digit + loc, scale are given by a neural network `encoder_z` + alpha is given by a neural network `encoder_y` + + :param xs: a batch of scaled vectors of pixels from an image + :param ys: (optional) a batch of the class labels i.e. + the digit corresponding to the image(s) + :return: None + """ + # inform Pyro that the variables in the batch of xs, ys are conditionally independent + with pyro.plate("data"): + # if the class label (the digit) is not supervised, sample + # (and score) the digit with the variational distribution + # q(y|x) = categorical(alpha(x)) + if ys is None: + alpha = self.encoder_y(xs) + ys = pyro.sample("y", dist.OneHotCategorical(alpha)) + + # sample (and score) the latent handwriting-style with the variational + # distribution q(z|x,y) = normal(loc(x,y),scale(x,y)) + loc, scale = self.encoder_z([xs, ys]) + pyro.sample("z", dist.Normal(loc, scale).to_event(1)) + + def classifier(self, xs): + """ + classify an image (or a batch of images) + + :param xs: a batch of scaled vectors of pixels from an image + :return: a batch of the corresponding class labels (as one-hots) + """ + # use the trained model q(y|x) = categorical(alpha(x)) + # compute all class probabilities for the image(s) + alpha = self.encoder_y(xs) + + # get the index (digit) that corresponds to + # the maximum predicted class probability + res, ind = torch.topk(alpha, 1) + + # convert the digit(s) to one-hot tensor(s) + ys = torch.zeros_like(alpha).scatter_(1, ind, 1.0) + return ys + + def model_classify(self, xs, ys=None): + """ + this model is used to add an auxiliary (supervised) loss as described in the + Kingma et al., "Semi-Supervised Learning with Deep Generative Models". + """ + # register all pytorch (sub)modules with pyro + pyro.module("ss_vae", self) + + # inform Pyro that the variables in the batch of xs, ys are conditionally independent + with pyro.plate("data"): + # this here is the extra term to yield an auxiliary loss that we do gradient descent on + if ys is not None: + alpha = self.encoder_y(xs) + with pyro.poutine.scale(scale=self.aux_loss_multiplier): + pyro.sample("y_aux", dist.OneHotCategorical(alpha), obs=ys) + + def guide_classify(self, xs, ys=None): + """ + dummy guide function to accompany model_classify in inference + """ + pass + + +def run_inference_for_epoch(data_loaders, losses, periodic_interval_batches): + """ + runs the inference algorithm for an epoch + returns the values of all losses separately on supervised and unsupervised parts + """ + num_losses = len(losses) + + # compute number of batches for an epoch + sup_batches = len(data_loaders["sup"]) + unsup_batches = len(data_loaders["unsup"]) + batches_per_epoch = sup_batches + unsup_batches + + # initialize variables to store loss values + epoch_losses_sup = [0.0] * num_losses + epoch_losses_unsup = [0.0] * num_losses + + # setup the iterators for training data loaders + sup_iter = iter(data_loaders["sup"]) + unsup_iter = iter(data_loaders["unsup"]) + + # count the number of supervised batches seen in this epoch + ctr_sup = 0 + for i in range(batches_per_epoch): + # whether this batch is supervised or not + is_supervised = (i % periodic_interval_batches == 1) and ctr_sup < sup_batches + + # extract the corresponding batch + if is_supervised: + (xs, ys) = next(sup_iter) + ctr_sup += 1 + else: + (xs, ys) = next(unsup_iter) + + # run the inference for each loss with supervised or un-supervised + # data as arguments + for loss_id in range(num_losses): + if is_supervised: + new_loss = losses[loss_id].step(xs, ys) + epoch_losses_sup[loss_id] += new_loss + else: + new_loss = losses[loss_id].step(xs) + epoch_losses_unsup[loss_id] += new_loss + + # return the values of all losses + return epoch_losses_sup, epoch_losses_unsup + + +def get_accuracy(data_loader, classifier_fn, batch_size): + """ + compute the accuracy over the supervised training set or the testing set + """ + predictions, actuals = [], [] + + # use the appropriate data loader + for xs, ys in data_loader: + # use classification function to compute all predictions for each batch + predictions.append(classifier_fn(xs)) + actuals.append(ys) + + # compute the number of accurate predictions + accurate_preds = 0 + for pred, act in zip(predictions, actuals): + for i in range(pred.size(0)): + v = torch.sum(pred[i] == act[i]) + accurate_preds += v.item() == 10 + + # calculate the accuracy between 0 and 1 + accuracy = (accurate_preds * 1.0) / (len(predictions) * batch_size) + return accuracy + + +def visualize(ss_vae, viz, test_loader): + if viz: + plot_conditional_samples_ssvae(ss_vae, viz) + mnist_test_tsne_ssvae(ssvae=ss_vae, test_loader=test_loader) + + +def main(args): + """ + run inference for SS-VAE + :param args: arguments for SS-VAE + :return: None + """ + if args.seed is not None: + pyro.set_rng_seed(args.seed) + + viz = None + if args.visualize: + viz = Visdom() + mkdir_p("./vae_results") + + # batch_size: number of images (and labels) to be considered in a batch + ss_vae = SSVAE( + z_dim=args.z_dim, + hidden_layers=args.hidden_layers, + use_cuda=args.cuda, + config_enum=args.enum_discrete, + aux_loss_multiplier=args.aux_loss_multiplier, + ) + + # setup the optimizer + adam_params = {"lr": args.learning_rate, "betas": (args.beta_1, 0.999)} + optimizer = Adam(adam_params) + + # set up the loss(es) for inference. wrapping the guide in config_enumerate builds the loss as a sum + # by enumerating each class label for the sampled discrete categorical distribution in the model + guide = config_enumerate(ss_vae.guide, args.enum_discrete, expand=True) + Elbo = JitTraceEnum_ELBO if args.jit else TraceEnum_ELBO + elbo = Elbo(max_plate_nesting=1, strict_enumeration_warning=False) + loss_basic = SVI(ss_vae.model, guide, optimizer, loss=elbo) + + # build a list of all losses considered + losses = [loss_basic] + + # aux_loss: whether to use the auxiliary loss from NIPS 14 paper (Kingma et al.) + if args.aux_loss: + elbo = JitTrace_ELBO() if args.jit else Trace_ELBO() + loss_aux = SVI( + ss_vae.model_classify, ss_vae.guide_classify, optimizer, loss=elbo + ) + losses.append(loss_aux) + + try: + # setup the logger if a filename is provided + logger = open(args.logfile, "w") if args.logfile else None + + data_loaders = setup_data_loaders( + MNISTCached, args.cuda, args.batch_size, sup_num=args.sup_num + ) + + # how often would a supervised batch be encountered during inference + # e.g. if sup_num is 3000, we would have every 16th = int(50000/3000) batch supervised + # until we have traversed through the all supervised batches + periodic_interval_batches = int( + MNISTCached.train_data_size / (1.0 * args.sup_num) + ) + + # number of unsupervised examples + unsup_num = MNISTCached.train_data_size - args.sup_num + + # initializing local variables to maintain the best validation accuracy + # seen across epochs over the supervised training set + # and the corresponding testing set and the state of the networks + best_valid_acc, corresponding_test_acc = 0.0, 0.0 + + # run inference for a certain number of epochs + for i in range(0, args.num_epochs): + # get the losses for an epoch + epoch_losses_sup, epoch_losses_unsup = run_inference_for_epoch( + data_loaders, losses, periodic_interval_batches + ) + + # compute average epoch losses i.e. losses per example + avg_epoch_losses_sup = map(lambda v: v / args.sup_num, epoch_losses_sup) + avg_epoch_losses_unsup = map(lambda v: v / unsup_num, epoch_losses_unsup) + + # store the loss and validation/testing accuracies in the logfile + str_loss_sup = " ".join(map(str, avg_epoch_losses_sup)) + str_loss_unsup = " ".join(map(str, avg_epoch_losses_unsup)) + + str_print = "{} epoch: avg losses {}".format( + i, "{} {}".format(str_loss_sup, str_loss_unsup) + ) + + validation_accuracy = get_accuracy( + data_loaders["valid"], ss_vae.classifier, args.batch_size + ) + str_print += " validation accuracy {}".format(validation_accuracy) + + # this test accuracy is only for logging, this is not used + # to make any decisions during training + test_accuracy = get_accuracy( + data_loaders["test"], ss_vae.classifier, args.batch_size + ) + str_print += " test accuracy {}".format(test_accuracy) + + # update the best validation accuracy and the corresponding + # testing accuracy and the state of the parent module (including the networks) + if best_valid_acc < validation_accuracy: + best_valid_acc = validation_accuracy + corresponding_test_acc = test_accuracy + + print_and_log(logger, str_print) + + final_test_accuracy = get_accuracy( + data_loaders["test"], ss_vae.classifier, args.batch_size + ) + print_and_log( + logger, + "best validation accuracy {} corresponding testing accuracy {} " + "last testing accuracy {}".format( + best_valid_acc, corresponding_test_acc, final_test_accuracy + ), + ) + + # visualize the conditional samples + visualize(ss_vae, viz, data_loaders["test"]) + finally: + # close the logger file object if we opened it earlier + if args.logfile: + logger.close() + + +EXAMPLE_RUN = ( + "example run: python ss_vae_M2.py --seed 0 --cuda -n 2 --aux-loss -alm 46 -enum parallel " + "-sup 3000 -zd 50 -hl 500 -lr 0.00042 -b1 0.95 -bs 200 -log ./tmp.log" +) + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + + parser = argparse.ArgumentParser(description="SS-VAE\n{}".format(EXAMPLE_RUN)) + + parser.add_argument( + "--cuda", action="store_true", help="use GPU(s) to speed up training" + ) + parser.add_argument( + "--jit", action="store_true", help="use PyTorch jit to speed up training" + ) + parser.add_argument( + "-n", "--num-epochs", default=50, type=int, help="number of epochs to run" + ) + parser.add_argument( + "--aux-loss", + action="store_true", + help="whether to use the auxiliary loss from NIPS 14 paper " + "(Kingma et al.). It is not used by default ", + ) + parser.add_argument( + "-alm", + "--aux-loss-multiplier", + default=46, + type=float, + help="the multiplier to use with the auxiliary loss", + ) + parser.add_argument( + "-enum", + "--enum-discrete", + default="parallel", + help="parallel, sequential or none. uses parallel enumeration by default", + ) + parser.add_argument( + "-sup", + "--sup-num", + default=3000, + type=float, + help="supervised amount of the data i.e. " + "how many of the images have supervised labels", + ) + parser.add_argument( + "-zd", + "--z-dim", + default=50, + type=int, + help="size of the tensor representing the latent variable z " + "variable (handwriting style for our MNIST dataset)", + ) + parser.add_argument( + "-hl", + "--hidden-layers", + nargs="+", + default=[500], + type=int, + help="a tuple (or list) of MLP layers to be used in the neural networks " + "representing the parameters of the distributions in our model", + ) + parser.add_argument( + "-lr", + "--learning-rate", + default=0.00042, + type=float, + help="learning rate for Adam optimizer", + ) + parser.add_argument( + "-b1", + "--beta-1", + default=0.9, + type=float, + help="beta-1 parameter for Adam optimizer", + ) + parser.add_argument( + "-bs", + "--batch-size", + default=200, + type=int, + help="number of images (and labels) to be considered in a batch", + ) + parser.add_argument( + "-log", + "--logfile", + default="./tmp.log", + type=str, + help="filename for logging the outputs", + ) + parser.add_argument( + "--seed", + default=None, + type=int, + help="seed for controlling randomness in this example", + ) + parser.add_argument( + "--visualize", + action="store_true", + help="use a visdom server to visualize the embeddings", + ) + args = parser.parse_args() + + # some assertions to make sure that batching math assumptions are met + assert args.sup_num % args.batch_size == 0, "assuming simplicity of batching math" + assert ( + MNISTCached.validation_size % args.batch_size == 0 + ), "batch size should divide the number of validation examples" + assert ( + MNISTCached.train_data_size % args.batch_size == 0 + ), "batch size doesn't divide total number of training data examples" + assert ( + MNISTCached.test_size % args.batch_size == 0 + ), "batch size should divide the number of test examples" + + main(args) diff --git a/pyro/source/examples/vae/utils/__init__.py b/pyro/source/examples/vae/utils/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/examples/vae/utils/custom_mlp.py b/pyro/source/examples/vae/utils/custom_mlp.py new file mode 100644 index 0000000000000000000000000000000000000000..ba8ecf9623aa57590f65cceb4e23dfe22ab8daef --- /dev/null +++ b/pyro/source/examples/vae/utils/custom_mlp.py @@ -0,0 +1,203 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from inspect import isclass + +import torch +import torch.nn as nn + +from pyro.distributions.util import broadcast_shape + + +class Exp(nn.Module): + """ + a custom module for exponentiation of tensors + """ + + def __init__(self): + super().__init__() + + def forward(self, val): + return torch.exp(val) + + +class ConcatModule(nn.Module): + """ + a custom module for concatenation of tensors + """ + + def __init__(self, allow_broadcast=False): + self.allow_broadcast = allow_broadcast + super().__init__() + + def forward(self, *input_args): + # we have a single object + if len(input_args) == 1: + # regardless of type, + # we don't care about single objects + # we just index into the object + input_args = input_args[0] + + # don't concat things that are just single objects + if torch.is_tensor(input_args): + return input_args + else: + if self.allow_broadcast: + shape = broadcast_shape(*[s.shape[:-1] for s in input_args]) + (-1,) + input_args = [s.expand(shape) for s in input_args] + return torch.cat(input_args, dim=-1) + + +class ListOutModule(nn.ModuleList): + """ + a custom module for outputting a list of tensors from a list of nn modules + """ + + def __init__(self, modules): + super().__init__(modules) + + def forward(self, *args, **kwargs): + # loop over modules in self, apply same args + return [mm.forward(*args, **kwargs) for mm in self] + + +def call_nn_op(op): + """ + a helper function that adds appropriate parameters when calling + an nn module representing an operation like Softmax + + :param op: the nn.Module operation to instantiate + :return: instantiation of the op module with appropriate parameters + """ + if op in [nn.Softmax, nn.LogSoftmax]: + return op(dim=1) + else: + return op() + + +class MLP(nn.Module): + def __init__( + self, + mlp_sizes, + activation=nn.ReLU, + output_activation=None, + post_layer_fct=lambda layer_ix, total_layers, layer: None, + post_act_fct=lambda layer_ix, total_layers, layer: None, + allow_broadcast=False, + use_cuda=False, + ): + # init the module object + super().__init__() + + assert len(mlp_sizes) >= 2, "Must have input and output layer sizes defined" + + # get our inputs, outputs, and hidden + input_size, hidden_sizes, output_size = ( + mlp_sizes[0], + mlp_sizes[1:-1], + mlp_sizes[-1], + ) + + # assume int or list + assert isinstance( + input_size, (int, list, tuple) + ), "input_size must be int, list, tuple" + + # everything in MLP will be concatted if it's multiple arguments + last_layer_size = input_size if type(input_size) == int else sum(input_size) + + # everything sent in will be concatted together by default + all_modules = [ConcatModule(allow_broadcast)] + + # loop over l + for layer_ix, layer_size in enumerate(hidden_sizes): + assert type(layer_size) == int, "Hidden layer sizes must be ints" + + # get our nn layer module (in this case nn.Linear by default) + cur_linear_layer = nn.Linear(last_layer_size, layer_size) + + # for numerical stability -- initialize the layer properly + cur_linear_layer.weight.data.normal_(0, 0.001) + cur_linear_layer.bias.data.normal_(0, 0.001) + + # add our linear layer + all_modules.append(cur_linear_layer) + + # handle post_linear + post_linear = post_layer_fct( + layer_ix + 1, len(hidden_sizes), all_modules[-1] + ) + + # if we send something back, add it to sequential + # here we could return a batch norm for example + if post_linear is not None: + all_modules.append(post_linear) + + # handle activation (assumed no params -- deal with that later) + all_modules.append(activation()) + + # now handle after activation + post_activation = post_act_fct( + layer_ix + 1, len(hidden_sizes), all_modules[-1] + ) + + # handle post_activation if not null + # could add batch norm for example + if post_activation is not None: + all_modules.append(post_activation) + + # save the layer size we just created + last_layer_size = layer_size + + # now we have all of our hidden layers + # we handle outputs + assert isinstance( + output_size, (int, list, tuple) + ), "output_size must be int, list, tuple" + + if type(output_size) == int: + all_modules.append(nn.Linear(last_layer_size, output_size)) + if output_activation is not None: + all_modules.append( + call_nn_op(output_activation) + if isclass(output_activation) + else output_activation + ) + else: + # we're going to have a bunch of separate layers we can spit out (a tuple of outputs) + out_layers = [] + + # multiple outputs? handle separately + for out_ix, out_size in enumerate(output_size): + # for a single output object, we create a linear layer and some weights + split_layer = [] + + # we have an activation function + split_layer.append(nn.Linear(last_layer_size, out_size)) + + # then we get our output activation (either we repeat all or we index into a same sized array) + act_out_fct = ( + output_activation + if not isinstance(output_activation, (list, tuple)) + else output_activation[out_ix] + ) + + if act_out_fct: + # we check if it's a class. if so, instantiate the object + # otherwise, use the object directly (e.g. pre-instaniated) + split_layer.append( + call_nn_op(act_out_fct) if isclass(act_out_fct) else act_out_fct + ) + + # our outputs is just a sequential of the two + out_layers.append(nn.Sequential(*split_layer)) + + all_modules.append(ListOutModule(out_layers)) + + # now we have all of our modules, we're ready to build our sequential! + # process mlps in order, pretty standard here + self.sequential_mlp = nn.Sequential(*all_modules) + + # pass through our sequential for the output! + def forward(self, *args, **kwargs): + return self.sequential_mlp.forward(*args, **kwargs) diff --git a/pyro/source/examples/vae/utils/mnist_cached.py b/pyro/source/examples/vae/utils/mnist_cached.py new file mode 100644 index 0000000000000000000000000000000000000000..212596fc20bfbcc940aba61c9d806ee99a63c2f5 --- /dev/null +++ b/pyro/source/examples/vae/utils/mnist_cached.py @@ -0,0 +1,263 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import errno +import os +from functools import reduce + +import numpy as np +import torch +from torch.utils.data import DataLoader + +from pyro.contrib.examples.util import MNIST, get_data_directory + +# This file contains utilities for caching, transforming and splitting MNIST data +# efficiently. By default, a PyTorch DataLoader will apply the transform every epoch +# we avoid this by caching the data early on in MNISTCached class + + +# transformations for MNIST data +def fn_x_mnist(x, use_cuda): + # normalize pixel values of the image to be in [0,1] instead of [0,255] + xp = x * (1.0 / 255) + + # transform x to a linear tensor from bx * a1 * a2 * ... --> bs * A + xp_1d_size = reduce(lambda a, b: a * b, xp.size()[1:]) + xp = xp.view(-1, xp_1d_size) + + # send the data to GPU(s) + if use_cuda: + xp = xp.cuda() + + return xp + + +def fn_y_mnist(y, use_cuda): + yp = torch.zeros(y.size(0), 10) + + # send the data to GPU(s) + if use_cuda: + yp = yp.cuda() + y = y.cuda() + + # transform the label y (integer between 0 and 9) to a one-hot + yp = yp.scatter_(1, y.view(-1, 1), 1.0) + return yp + + +def get_ss_indices_per_class(y, sup_per_class): + # number of indices to consider + n_idxs = y.size()[0] + + # calculate the indices per class + idxs_per_class = {j: [] for j in range(10)} + + # for each index identify the class and add the index to the right class + for i in range(n_idxs): + curr_y = y[i] + for j in range(10): + if curr_y[j] == 1: + idxs_per_class[j].append(i) + break + + idxs_sup = [] + idxs_unsup = [] + for j in range(10): + np.random.shuffle(idxs_per_class[j]) + idxs_sup.extend(idxs_per_class[j][:sup_per_class]) + idxs_unsup.extend(idxs_per_class[j][sup_per_class : len(idxs_per_class[j])]) + + return idxs_sup, idxs_unsup + + +def split_sup_unsup_valid(X, y, sup_num, validation_num=10000): + """ + helper function for splitting the data into supervised, un-supervised and validation parts + :param X: images + :param y: labels (digits) + :param sup_num: what number of examples is supervised + :param validation_num: what number of last examples to use for validation + :return: splits of data by sup_num number of supervised examples + """ + + # validation set is the last 10,000 examples + X_valid = X[-validation_num:] + y_valid = y[-validation_num:] + + X = X[0:-validation_num] + y = y[0:-validation_num] + + assert sup_num % 10 == 0, "unable to have equal number of images per class" + + # number of supervised examples per class + sup_per_class = int(sup_num / 10) + + idxs_sup, idxs_unsup = get_ss_indices_per_class(y, sup_per_class) + X_sup = X[idxs_sup] + y_sup = y[idxs_sup] + X_unsup = X[idxs_unsup] + y_unsup = y[idxs_unsup] + + return X_sup, y_sup, X_unsup, y_unsup, X_valid, y_valid + + +def print_distribution_labels(y): + """ + helper function for printing the distribution of class labels in a dataset + :param y: tensor of class labels given as one-hots + :return: a dictionary of counts for each label from y + """ + counts = {j: 0 for j in range(10)} + for i in range(y.size()[0]): + for j in range(10): + if y[i][j] == 1: + counts[j] += 1 + break + print(counts) + + +class MNISTCached(MNIST): + """ + a wrapper around MNIST to load and cache the transformed data + once at the beginning of the inference + """ + + # static class variables for caching training data + train_data_size = 50000 + train_data_sup, train_labels_sup = None, None + train_data_unsup, train_labels_unsup = None, None + validation_size = 10000 + data_valid, labels_valid = None, None + test_size = 10000 + + def __init__(self, mode, sup_num, use_cuda=True, *args, **kwargs): + super().__init__(train=mode in ["sup", "unsup", "valid"], *args, **kwargs) + + # transformations on MNIST data (normalization and one-hot conversion for labels) + def transform(x): + return fn_x_mnist(x, use_cuda) + + def target_transform(y): + return fn_y_mnist(y, use_cuda) + + self.mode = mode + + assert mode in [ + "sup", + "unsup", + "test", + "valid", + ], "invalid train/test option values" + + if mode in ["sup", "unsup", "valid"]: + # transform the training data if transformations are provided + if transform is not None: + self.data = transform(self.data.float()) + if target_transform is not None: + self.targets = target_transform(self.targets) + + if MNISTCached.train_data_sup is None: + if sup_num is None: + assert mode == "unsup" + MNISTCached.train_data_unsup, MNISTCached.train_labels_unsup = ( + self.data, + self.targets, + ) + else: + ( + MNISTCached.train_data_sup, + MNISTCached.train_labels_sup, + MNISTCached.train_data_unsup, + MNISTCached.train_labels_unsup, + MNISTCached.data_valid, + MNISTCached.labels_valid, + ) = split_sup_unsup_valid(self.data, self.targets, sup_num) + + if mode == "sup": + self.data, self.targets = ( + MNISTCached.train_data_sup, + MNISTCached.train_labels_sup, + ) + elif mode == "unsup": + self.data = MNISTCached.train_data_unsup + + # making sure that the unsupervised labels are not available to inference + self.targets = ( + torch.Tensor(MNISTCached.train_labels_unsup.shape[0]).view(-1, 1) + ) * np.nan + else: + self.data, self.targets = ( + MNISTCached.data_valid, + MNISTCached.labels_valid, + ) + + else: + # transform the testing data if transformations are provided + if transform is not None: + self.data = transform(self.data.float()) + if target_transform is not None: + self.targets = target_transform(self.targets) + + def __getitem__(self, index): + """ + :param index: Index or slice object + :returns tuple: (image, target) where target is index of the target class. + """ + if self.mode in ["sup", "unsup", "valid"]: + img, target = self.data[index], self.targets[index] + elif self.mode == "test": + img, target = self.data[index], self.targets[index] + else: + assert False, "invalid mode: {}".format(self.mode) + return img, target + + +def setup_data_loaders( + dataset, use_cuda, batch_size, sup_num=None, root=None, download=True, **kwargs +): + """ + helper function for setting up pytorch data loaders for a semi-supervised dataset + :param dataset: the data to use + :param use_cuda: use GPU(s) for training + :param batch_size: size of a batch of data to output when iterating over the data loaders + :param sup_num: number of supervised data examples + :param download: download the dataset (if it doesn't exist already) + :param kwargs: other params for the pytorch data loader + :return: three data loaders: (supervised data for training, un-supervised data for training, + supervised data for testing) + """ + # instantiate the dataset as training/testing sets + if root is None: + root = get_data_directory(__file__) + if "num_workers" not in kwargs: + kwargs = {"num_workers": 0, "pin_memory": False} + + cached_data = {} + loaders = {} + for mode in ["unsup", "test", "sup", "valid"]: + if sup_num is None and mode == "sup": + # in this special case, we do not want "sup" and "valid" data loaders + return loaders["unsup"], loaders["test"] + cached_data[mode] = dataset( + root=root, mode=mode, download=download, sup_num=sup_num, use_cuda=use_cuda + ) + loaders[mode] = DataLoader( + cached_data[mode], batch_size=batch_size, shuffle=True, **kwargs + ) + + return loaders + + +def mkdir_p(path): + try: + os.makedirs(path) + except OSError as exc: # Python >2.5 + if exc.errno == errno.EEXIST and os.path.isdir(path): + pass + else: + raise + + +EXAMPLE_DIR = os.path.dirname(os.path.abspath(os.path.join(__file__, os.pardir))) +DATA_DIR = os.path.join(EXAMPLE_DIR, "data") +RESULTS_DIR = os.path.join(EXAMPLE_DIR, "results") diff --git a/pyro/source/examples/vae/utils/vae_plots.py b/pyro/source/examples/vae/utils/vae_plots.py new file mode 100644 index 0000000000000000000000000000000000000000..922f1828b68f8daa25e7456e44f357b139552a4e --- /dev/null +++ b/pyro/source/examples/vae/utils/vae_plots.py @@ -0,0 +1,122 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch + + +def plot_conditional_samples_ssvae(ssvae, visdom_session): + """ + This is a method to do conditional sampling in visdom + """ + vis = visdom_session + ys = {} + for i in range(10): + ys[i] = torch.zeros(1, 10) + ys[i][0, i] = 1 + xs = torch.zeros(1, 784) + + for i in range(10): + images = [] + for rr in range(100): + # get the loc from the model + sample_loc_i = ssvae.model(xs, ys[i]) + img = sample_loc_i[0].view(1, 28, 28).cpu().data.numpy() + images.append(img) + vis.images(images, 10, 2) + + +def plot_llk(train_elbo, test_elbo): + from pathlib import Path + + import matplotlib.pyplot as plt + import pandas as pd + import seaborn as sns + + Path("vae_results").mkdir(parents=True, exist_ok=True) + + plt.figure(figsize=(30, 10)) + sns.set_style("whitegrid") + df1 = pd.DataFrame( + { + "Epoch": train_elbo.keys(), + "ELBO": [-val for val in train_elbo.values()], + "dataset": "Train", + } + ) + df2 = pd.DataFrame( + { + "Epoch": test_elbo.keys(), + "ELBO": [-val for val in test_elbo.values()], + "dataset": "Test", + } + ) + df = pd.concat([df1, df2], axis=0) + + # Create the FacetGrid with scatter plot + g = sns.FacetGrid(df, height=4, aspect=1.5, hue="dataset") + g.map(sns.scatterplot, "Epoch", "ELBO") + g.map(sns.lineplot, "Epoch", "ELBO", linestyle="--") + g.ax.yaxis.get_major_locator().set_params(integer=True) + g.add_legend() + plt.savefig("./vae_results/test_elbo_vae.png") + plt.close("all") + + +def plot_vae_samples(vae, visdom_session): + vis = visdom_session + x = torch.zeros([1, 784]) + for i in range(10): + images = [] + for rr in range(100): + # get loc from the model + sample_loc_i = vae.model(x) + img = sample_loc_i[0].view(1, 28, 28).cpu().data.numpy() + images.append(img) + vis.images(images, 10, 2) + + +def mnist_test_tsne(vae=None, test_loader=None): + """ + This is used to generate a t-sne embedding of the vae + """ + name = "VAE" + data = test_loader.dataset.test_data.float() + mnist_labels = test_loader.dataset.test_labels + z_loc, z_scale = vae.encoder(data) + plot_tsne(z_loc, mnist_labels, name) + + +def mnist_test_tsne_ssvae(name=None, ssvae=None, test_loader=None): + """ + This is used to generate a t-sne embedding of the ss-vae + """ + if name is None: + name = "SS-VAE" + data = test_loader.dataset.test_data.float() + mnist_labels = test_loader.dataset.test_labels + z_loc, z_scale = ssvae.encoder_z([data, mnist_labels]) + plot_tsne(z_loc, mnist_labels, name) + + +def plot_tsne(z_loc, classes, name): + import matplotlib + + matplotlib.use("Agg") + import matplotlib.pyplot as plt + import numpy as np + from sklearn.manifold import TSNE + + model_tsne = TSNE(n_components=2, random_state=0) + z_states = z_loc.detach().cpu().numpy() + z_embed = model_tsne.fit_transform(z_states) + classes = classes.detach().cpu().numpy() + fig = plt.figure() + for ic in range(10): + ind_vec = np.zeros_like(classes) + ind_vec[:, ic] = 1 + ind_class = classes[:, ic] == 1 + color = plt.cm.Set1(ic) + plt.scatter(z_embed[ind_class, 0], z_embed[ind_class, 1], s=10, color=color) + plt.title("Latent Variable T-SNE per Class") + fig.savefig("./vae_results/" + str(name) + "_embedding_" + str(ic) + ".png") + fig.savefig("./vae_results/" + str(name) + "_embedding.png") diff --git a/pyro/source/examples/vae/vae.py b/pyro/source/examples/vae/vae.py new file mode 100644 index 0000000000000000000000000000000000000000..5677b6e22c72d8793bf4282171d0d2b2bf62065e --- /dev/null +++ b/pyro/source/examples/vae/vae.py @@ -0,0 +1,256 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import argparse + +import numpy as np +import torch +import torch.nn as nn +import visdom +from utils.mnist_cached import MNISTCached as MNIST +from utils.mnist_cached import setup_data_loaders +from utils.vae_plots import mnist_test_tsne, plot_llk, plot_vae_samples + +import pyro +import pyro.distributions as dist +from pyro.infer import SVI, JitTrace_ELBO, Trace_ELBO +from pyro.optim import Adam + + +# define the PyTorch module that parameterizes the +# diagonal gaussian distribution q(z|x) +class Encoder(nn.Module): + def __init__(self, z_dim, hidden_dim): + super().__init__() + # setup the three linear transformations used + self.fc1 = nn.Linear(784, hidden_dim) + self.fc21 = nn.Linear(hidden_dim, z_dim) + self.fc22 = nn.Linear(hidden_dim, z_dim) + # setup the non-linearities + self.softplus = nn.Softplus() + + def forward(self, x): + # define the forward computation on the image x + # first shape the mini-batch to have pixels in the rightmost dimension + x = x.reshape(-1, 784) + # then compute the hidden units + hidden = self.softplus(self.fc1(x)) + # then return a mean vector and a (positive) square root covariance + # each of size batch_size x z_dim + z_loc = self.fc21(hidden) + z_scale = torch.exp(self.fc22(hidden)) + return z_loc, z_scale + + +# define the PyTorch module that parameterizes the +# observation likelihood p(x|z) +class Decoder(nn.Module): + def __init__(self, z_dim, hidden_dim): + super().__init__() + # setup the two linear transformations used + self.fc1 = nn.Linear(z_dim, hidden_dim) + self.fc21 = nn.Linear(hidden_dim, 784) + # setup the non-linearities + self.softplus = nn.Softplus() + + def forward(self, z): + # define the forward computation on the latent z + # first compute the hidden units + hidden = self.softplus(self.fc1(z)) + # return the parameter for the output Bernoulli + # each is of size batch_size x 784 + loc_img = torch.sigmoid(self.fc21(hidden)) + return loc_img + + +# define a PyTorch module for the VAE +class VAE(nn.Module): + # by default our latent space is 50-dimensional + # and we use 400 hidden units + def __init__(self, z_dim=50, hidden_dim=400, use_cuda=False): + super().__init__() + # create the encoder and decoder networks + self.encoder = Encoder(z_dim, hidden_dim) + self.decoder = Decoder(z_dim, hidden_dim) + + if use_cuda: + # calling cuda() here will put all the parameters of + # the encoder and decoder networks into gpu memory + self.cuda() + self.use_cuda = use_cuda + self.z_dim = z_dim + + # define the model p(x|z)p(z) + def model(self, x): + # register PyTorch module `decoder` with Pyro + pyro.module("decoder", self.decoder) + with pyro.plate("data", x.shape[0]): + # setup hyperparameters for prior p(z) + z_loc = torch.zeros(x.shape[0], self.z_dim, dtype=x.dtype, device=x.device) + z_scale = torch.ones(x.shape[0], self.z_dim, dtype=x.dtype, device=x.device) + # sample from prior (value will be sampled by guide when computing the ELBO) + z = pyro.sample("latent", dist.Normal(z_loc, z_scale).to_event(1)) + # decode the latent code z + loc_img = self.decoder.forward(z) + # score against actual images (with relaxed Bernoulli values) + pyro.sample( + "obs", + dist.Bernoulli(loc_img, validate_args=False).to_event(1), + obs=x.reshape(-1, 784), + ) + # return the loc so we can visualize it later + return loc_img + + # define the guide (i.e. variational distribution) q(z|x) + def guide(self, x): + # register PyTorch module `encoder` with Pyro + pyro.module("encoder", self.encoder) + with pyro.plate("data", x.shape[0]): + # use the encoder to get the parameters used to define q(z|x) + z_loc, z_scale = self.encoder.forward(x) + # sample the latent code z + pyro.sample("latent", dist.Normal(z_loc, z_scale).to_event(1)) + + # define a helper function for reconstructing images + def reconstruct_img(self, x): + # encode image x + z_loc, z_scale = self.encoder(x) + # sample in latent space + z = dist.Normal(z_loc, z_scale).sample() + # decode the image (note we don't sample in image space) + loc_img = self.decoder(z) + return loc_img + + +def main(args): + # clear param store + pyro.clear_param_store() + + # setup MNIST data loaders + # train_loader, test_loader + train_loader, test_loader = setup_data_loaders( + MNIST, use_cuda=args.cuda, batch_size=256 + ) + + # setup the VAE + vae = VAE(use_cuda=args.cuda) + + # setup the optimizer + adam_args = {"lr": args.learning_rate} + optimizer = Adam(adam_args) + + # setup the inference algorithm + elbo = JitTrace_ELBO() if args.jit else Trace_ELBO() + svi = SVI(vae.model, vae.guide, optimizer, loss=elbo) + + # setup visdom for visualization + if args.visdom_flag: + vis = visdom.Visdom() + + train_elbo = {} + test_elbo = {} + # training loop + for epoch in range(args.num_epochs): + # initialize loss accumulator + epoch_loss = 0.0 + # do a training epoch over each mini-batch x returned + # by the data loader + for x, _ in train_loader: + # if on GPU put mini-batch into CUDA memory + if args.cuda: + x = x.cuda() + # do ELBO gradient and accumulate loss + epoch_loss += svi.step(x) + + # report training diagnostics + normalizer_train = len(train_loader.dataset) + total_epoch_loss_train = epoch_loss / normalizer_train + train_elbo[epoch] = total_epoch_loss_train + print( + "[epoch %03d] average training loss: %.4f" + % (epoch, total_epoch_loss_train) + ) + + if epoch % args.test_frequency == 0: + # initialize loss accumulator + test_loss = 0.0 + # compute the loss over the entire test set + for i, (x, _) in enumerate(test_loader): + # if on GPU put mini-batch into CUDA memory + if args.cuda: + x = x.cuda() + # compute ELBO estimate and accumulate loss + test_loss += svi.evaluate_loss(x) + + # pick three random test images from the first mini-batch and + # visualize how well we're reconstructing them + if i == 0: + if args.visdom_flag: + plot_vae_samples(vae, vis) + reco_indices = np.random.randint(0, x.shape[0], 3) + for index in reco_indices: + test_img = x[index, :] + reco_img = vae.reconstruct_img(test_img) + vis.image( + test_img.reshape(28, 28).detach().cpu().numpy(), + opts={"caption": "test image"}, + ) + vis.image( + reco_img.reshape(28, 28).detach().cpu().numpy(), + opts={"caption": "reconstructed image"}, + ) + + # report test diagnostics + normalizer_test = len(test_loader.dataset) + total_epoch_loss_test = test_loss / normalizer_test + test_elbo[epoch] = total_epoch_loss_test + print( + "[epoch %03d] average test loss: %.4f" % (epoch, total_epoch_loss_test) + ) + plot_llk(train_elbo, test_elbo) + + if epoch == args.tsne_iter: + mnist_test_tsne(vae=vae, test_loader=test_loader) + + return vae + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + # parse command line arguments + parser = argparse.ArgumentParser(description="parse args") + parser.add_argument( + "-n", "--num-epochs", default=101, type=int, help="number of training epochs" + ) + parser.add_argument( + "-tf", + "--test-frequency", + default=5, + type=int, + help="how often we evaluate the test set", + ) + parser.add_argument( + "-lr", "--learning-rate", default=1.0e-3, type=float, help="learning rate" + ) + parser.add_argument( + "--cuda", action="store_true", default=False, help="whether to use cuda" + ) + parser.add_argument( + "--jit", action="store_true", default=False, help="whether to use PyTorch jit" + ) + parser.add_argument( + "-visdom", + "--visdom_flag", + action="store_true", + help="Whether plotting in visdom is desired", + ) + parser.add_argument( + "-i-tsne", + "--tsne_iter", + default=100, + type=int, + help="epoch when tsne visualization runs", + ) + args = parser.parse_args() + + model = main(args) diff --git a/pyro/source/examples/vae/vae_comparison.py b/pyro/source/examples/vae/vae_comparison.py new file mode 100644 index 0000000000000000000000000000000000000000..c44911c911dec276a322773a3e6fd1b917fda253 --- /dev/null +++ b/pyro/source/examples/vae/vae_comparison.py @@ -0,0 +1,275 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import argparse +import itertools +import os +from abc import ABCMeta, abstractmethod + +import torch +import torch.nn as nn +from torch.nn import functional +from torchvision.utils import save_image +from utils.mnist_cached import DATA_DIR, RESULTS_DIR + +import pyro +from pyro.contrib.examples import util +from pyro.distributions import Bernoulli, Normal +from pyro.infer import SVI, JitTrace_ELBO, Trace_ELBO +from pyro.optim import Adam + +""" +Comparison of VAE implementation in PyTorch and Pyro. This example can be +used for profiling purposes. + +The PyTorch VAE example is taken (with minor modification) from pytorch/examples. +Source: https://github.com/pytorch/examples/tree/master/vae +""" + +TRAIN = "train" +TEST = "test" +OUTPUT_DIR = RESULTS_DIR + + +# VAE encoder network +class Encoder(nn.Module): + def __init__(self): + super().__init__() + self.fc1 = nn.Linear(784, 400) + self.fc21 = nn.Linear(400, 20) + self.fc22 = nn.Linear(400, 20) + self.relu = nn.ReLU() + + def forward(self, x): + x = x.reshape(-1, 784) + h1 = self.relu(self.fc1(x)) + return self.fc21(h1), torch.exp(self.fc22(h1)) + + +# VAE Decoder network +class Decoder(nn.Module): + def __init__(self): + super().__init__() + self.fc3 = nn.Linear(20, 400) + self.fc4 = nn.Linear(400, 784) + self.relu = nn.ReLU() + + def forward(self, z): + h3 = self.relu(self.fc3(z)) + return torch.sigmoid(self.fc4(h3)) + + +class VAE(object, metaclass=ABCMeta): + """ + Abstract class for the variational auto-encoder. The abstract method + for training the network is implemented by subclasses. + """ + + def __init__(self, args, train_loader, test_loader): + self.args = args + self.vae_encoder = Encoder() + self.vae_decoder = Decoder() + self.train_loader = train_loader + self.test_loader = test_loader + self.mode = TRAIN + + def set_train(self, is_train=True): + if is_train: + self.mode = TRAIN + self.vae_encoder.train() + self.vae_decoder.train() + else: + self.mode = TEST + self.vae_encoder.eval() + self.vae_decoder.eval() + + @abstractmethod + def compute_loss_and_gradient(self, x): + """ + Given a batch of data `x`, run the optimizer (backpropagate the gradient), + and return the computed loss. + + :param x: batch of data or a single datum (MNIST image). + :return: loss computed on the data batch. + """ + return + + def model_eval(self, x): + """ + Given a batch of data `x`, run it through the trained VAE network to get + the reconstructed image. + + :param x: batch of data or a single datum (MNIST image). + :return: reconstructed image, and the latent z's mean and variance. + """ + z_mean, z_var = self.vae_encoder(x) + if self.mode == TRAIN: + z = Normal(z_mean, z_var.sqrt()).rsample() + else: + z = z_mean + return self.vae_decoder(z), z_mean, z_var + + def train(self, epoch): + self.set_train(is_train=True) + train_loss = 0 + for batch_idx, (x, _) in enumerate(self.train_loader): + loss = self.compute_loss_and_gradient(x) + train_loss += loss + print( + "====> Epoch: {} \nTraining loss: {:.4f}".format( + epoch, train_loss / len(self.train_loader.dataset) + ) + ) + + def test(self, epoch): + self.set_train(is_train=False) + test_loss = 0 + for i, (x, _) in enumerate(self.test_loader): + with torch.no_grad(): + recon_x = self.model_eval(x)[0] + test_loss += self.compute_loss_and_gradient(x) + if i == 0: + n = min(x.size(0), 8) + comparison = torch.cat( + [x[:n], recon_x.reshape(self.args.batch_size, 1, 28, 28)[:n]] + ) + save_image( + comparison.detach().cpu(), + os.path.join(OUTPUT_DIR, "reconstruction_" + str(epoch) + ".png"), + nrow=n, + ) + + test_loss /= len(self.test_loader.dataset) + print("Test set loss: {:.4f}".format(test_loss)) + + +class PyTorchVAEImpl(VAE): + """ + Adapted from pytorch/examples. + Source: https://github.com/pytorch/examples/tree/master/vae + """ + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.optimizer = self.initialize_optimizer(lr=1e-3) + + def compute_loss_and_gradient(self, x): + self.optimizer.zero_grad() + recon_x, z_mean, z_var = self.model_eval(x) + binary_cross_entropy = functional.binary_cross_entropy( + recon_x, x.reshape(-1, 784) + ) + # Uses analytical KL divergence expression for D_kl(q(z|x) || p(z)) + # Refer to Appendix B from VAE paper: + # Kingma and Welling. Auto-Encoding Variational Bayes. ICLR, 2014 + # (https://arxiv.org/abs/1312.6114) + kl_div = -0.5 * torch.sum(1 + z_var.log() - z_mean.pow(2) - z_var) + kl_div /= self.args.batch_size * 784 + loss = binary_cross_entropy + kl_div + if self.mode == TRAIN: + loss.backward() + self.optimizer.step() + return loss.item() + + def initialize_optimizer(self, lr=1e-3): + model_params = itertools.chain( + self.vae_encoder.parameters(), self.vae_decoder.parameters() + ) + return torch.optim.Adam(model_params, lr) + + +class PyroVAEImpl(VAE): + """ + Implementation of VAE using Pyro. Only the model and the guide specification + is needed to run the optimizer (the objective function does not need to be + specified as in the PyTorch implementation). + """ + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.optimizer = self.initialize_optimizer(lr=1e-3) + + def model(self, data): + decoder = pyro.module("decoder", self.vae_decoder) + z_mean, z_std = torch.zeros([data.size(0), 20]), torch.ones([data.size(0), 20]) + with pyro.plate("data", data.size(0)): + z = pyro.sample("latent", Normal(z_mean, z_std).to_event(1)) + img = decoder.forward(z) + pyro.sample( + "obs", + Bernoulli(img, validate_args=False).to_event(1), + obs=data.reshape(-1, 784), + ) + + def guide(self, data): + encoder = pyro.module("encoder", self.vae_encoder) + with pyro.plate("data", data.size(0)): + z_mean, z_var = encoder.forward(data) + pyro.sample("latent", Normal(z_mean, z_var.sqrt()).to_event(1)) + + def compute_loss_and_gradient(self, x): + if self.mode == TRAIN: + loss = self.optimizer.step(x) + else: + loss = self.optimizer.evaluate_loss(x) + loss /= self.args.batch_size * 784 + return loss + + def initialize_optimizer(self, lr): + optimizer = Adam({"lr": lr}) + elbo = JitTrace_ELBO() if self.args.jit else Trace_ELBO() + return SVI(self.model, self.guide, optimizer, loss=elbo) + + +def setup(args): + pyro.set_rng_seed(args.rng_seed) + train_loader = util.get_data_loader( + dataset_name="MNIST", + data_dir=DATA_DIR, + batch_size=args.batch_size, + is_training_set=True, + shuffle=True, + ) + test_loader = util.get_data_loader( + dataset_name="MNIST", + data_dir=DATA_DIR, + batch_size=args.batch_size, + is_training_set=False, + shuffle=True, + ) + global OUTPUT_DIR + OUTPUT_DIR = os.path.join(RESULTS_DIR, args.impl) + if not os.path.exists(OUTPUT_DIR): + os.makedirs(OUTPUT_DIR) + pyro.clear_param_store() + return train_loader, test_loader + + +def main(args): + train_loader, test_loader = setup(args) + if args.impl == "pyro": + vae = PyroVAEImpl(args, train_loader, test_loader) + print("Running Pyro VAE implementation") + elif args.impl == "pytorch": + vae = PyTorchVAEImpl(args, train_loader, test_loader) + print("Running PyTorch VAE implementation") + else: + raise ValueError("Incorrect implementation specified: {}".format(args.impl)) + for i in range(args.num_epochs): + vae.train(i) + if not args.skip_eval: + vae.test(i) + + +if __name__ == "__main__": + assert pyro.__version__.startswith("1.9.1") + parser = argparse.ArgumentParser(description="VAE using MNIST dataset") + parser.add_argument("-n", "--num-epochs", nargs="?", default=10, type=int) + parser.add_argument("--batch_size", nargs="?", default=128, type=int) + parser.add_argument("--rng_seed", nargs="?", default=0, type=int) + parser.add_argument("--impl", nargs="?", default="pyro", type=str) + parser.add_argument("--skip_eval", action="store_true") + parser.add_argument("--jit", action="store_true") + parser.set_defaults(skip_eval=False) + args = parser.parse_args() + main(args) diff --git a/pyro/source/profiler/__init__.py b/pyro/source/profiler/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/profiler/distributions.py b/pyro/source/profiler/distributions.py new file mode 100644 index 0000000000000000000000000000000000000000..e739b0b8ded048d0b7fa13a9c8f7f3a35ef4d873 --- /dev/null +++ b/pyro/source/profiler/distributions.py @@ -0,0 +1,190 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import argparse + +import torch +from torch.autograd import Variable + +from profiler.profiling_utils import Profile, profile_print +from pyro.distributions import ( + Bernoulli, + Beta, + Categorical, + Cauchy, + Dirichlet, + Exponential, + Gamma, + LogNormal, + Normal, + OneHotCategorical, + Poisson, + Uniform, +) + + +def T(arr): + return Variable(torch.DoubleTensor(arr)) + + +TOOL = "timeit" +TOOL_CFG = {} +DISTRIBUTIONS = { + "Bernoulli": (Bernoulli, {"probs": T([0.3, 0.3, 0.3, 0.3])}), + "Beta": ( + Beta, + { + "concentration1": T([2.4, 2.4, 2.4, 2.4]), + "concentration0": T([3.2, 3.2, 3.2, 3.2]), + }, + ), + "Categorical": (Categorical, {"probs": T([0.1, 0.3, 0.4, 0.2])}), + "OneHotCategorical": (OneHotCategorical, {"probs": T([0.1, 0.3, 0.4, 0.2])}), + "Dirichlet": (Dirichlet, {"concentration": T([2.4, 3, 6, 6])}), + "Normal": ( + Normal, + {"loc": T([0.5, 0.5, 0.5, 0.5]), "scale": T([1.2, 1.2, 1.2, 1.2])}, + ), + "LogNormal": ( + LogNormal, + {"loc": T([0.5, 0.5, 0.5, 0.5]), "scale": T([1.2, 1.2, 1.2, 1.2])}, + ), + "Cauchy": ( + Cauchy, + {"loc": T([0.5, 0.5, 0.5, 0.5]), "scale": T([1.2, 1.2, 1.2, 1.2])}, + ), + "Exponential": (Exponential, {"rate": T([5.5, 3.2, 4.1, 5.6])}), + "Poisson": (Poisson, {"rate": T([5.5, 3.2, 4.1, 5.6])}), + "Gamma": ( + Gamma, + {"concentration": T([2.4, 2.4, 2.4, 2.4]), "rate": T([3.2, 3.2, 3.2, 3.2])}, + ), + "Uniform": (Uniform, {"low": T([0, 0, 0, 0]), "high": T([4, 4, 4, 4])}), +} + + +def get_tool(): + return TOOL + + +def get_tool_cfg(): + return TOOL_CFG + + +@Profile( + tool=get_tool, + tool_cfg=get_tool_cfg, + fn_id=lambda dist, batch_size, *args, **kwargs: "sample_" + + dist.dist_class.__name__ + + "_N=" + + str(batch_size), +) +def sample(dist, batch_size): + return dist.sample(sample_shape=(batch_size,)) + + +@Profile( + tool=get_tool, + tool_cfg=get_tool_cfg, + fn_id=lambda dist, batch, *args, **kwargs: "log_prob_" # + + dist.dist_class.__name__ + + "_N=" + + str(batch.size()[0]), +) +def log_prob(dist, batch): + return dist.log_prob(batch) + + +def run_with_tool(tool, dists, batch_sizes): + column_widths, field_format, template = None, None, None + if tool == "timeit": + profile_cols = 2 * len(batch_sizes) + column_widths = [14] * (profile_cols + 1) + field_format = [None] + ["{:.6f}"] * profile_cols + template = "column" + elif tool == "cprofile": + column_widths = [14, 80] + template = "row" + with profile_print(column_widths, field_format, template) as out: + column_headers = [] + for size in batch_sizes: + column_headers += [ + "SAMPLE (N=" + str(size) + ")", + "LOG_PROB (N=" + str(size) + ")", + ] + out.header(["DISTRIBUTION"] + column_headers) + for dist_name in dists: + Dist, params = DISTRIBUTIONS[dist_name] + result_row = [dist_name] + dist = Dist(**params) + for size in batch_sizes: + sample_result, sample_prof = sample(dist, batch_size=size) + _, logpdf_prof = log_prob(dist, sample_result) + result_row += [sample_prof, logpdf_prof] + out.push(result_row) + + +def set_tool_cfg(args): + global TOOL, TOOL_CFG + TOOL = args.tool + tool_cfg = {} + if args.tool == "timeit": + repeat = 5 + if args.repeat is not None: + repeat = args.repeat + tool_cfg = {"repeat": repeat} + TOOL_CFG = tool_cfg + + +def main(): + parser = argparse.ArgumentParser( + description="Profiling distributions library using various" "tools." + ) + parser.add_argument( + "--tool", + nargs="?", + default="timeit", + help="Profile using tool. One of following should be specified:" + ' ["timeit", "cprofile"]', + ) + parser.add_argument( + "--batch_sizes", + nargs="*", + type=int, + help="Batch size of tensor - max of 4 values allowed. " + "Default = [10000, 100000]", + ) + parser.add_argument( + "--dists", + nargs="*", + type=str, + help="Run tests on distributions. One or more of following distributions " + 'are supported: ["bernoulli, "beta", "categorical", "dirichlet", ' + '"normal", "lognormal", "halfcauchy", "cauchy", "exponential", ' + '"poisson", "one_hot_categorical", "gamma", "uniform"] ' + "Default - Run profiling on all distributions", + ) + parser.add_argument( + "--repeat", + nargs="?", + default=5, + type=int, + help='When profiling using "timeit", the number of repetitions to ' + "use for the profiled function. default=5. The minimum value " + "is reported.", + ) + args = parser.parse_args() + set_tool_cfg(args) + dists = args.dists + batch_sizes = args.batch_sizes + if not args.batch_sizes: + batch_sizes = [10000, 100000] + if len(batch_sizes) >= 4: + raise ValueError("Max of 4 batch sizes can be specified.") + if not dists: + dists = sorted(DISTRIBUTIONS.keys()) + run_with_tool(args.tool, dists, batch_sizes) + + +if __name__ == "__main__": + main() diff --git a/pyro/source/profiler/gaussianhmm.py b/pyro/source/profiler/gaussianhmm.py new file mode 100644 index 0000000000000000000000000000000000000000..729c87b5c6853b691ed377f5b604ec8ed27e3892 --- /dev/null +++ b/pyro/source/profiler/gaussianhmm.py @@ -0,0 +1,83 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import argparse + +import torch +from tqdm.auto import tqdm + +import pyro.distributions as dist + + +def random_mvn(batch_shape, dim, requires_grad=False): + rank = dim + dim + loc = torch.randn(batch_shape + (dim,), requires_grad=requires_grad) + cov = torch.randn(batch_shape + (dim, rank)) + cov = cov.matmul(cov.transpose(-1, -2)) + scale_tril = torch.linalg.cholesky(cov) + scale_tril.requires_grad_(requires_grad) + return dist.MultivariateNormal(loc, scale_tril=scale_tril) + + +def main(args): + if args.cuda: + torch.set_default_device("cuda") + + hidden_dim = args.hidden_dim + obs_dim = args.obs_dim + duration = args.duration + batch_shape = (args.batch_size,) + + # Initialize parts. + init_dist = random_mvn(batch_shape, hidden_dim, requires_grad=args.grad) + trans_dist = random_mvn( + batch_shape + (duration,), hidden_dim, requires_grad=args.grad + ) + obs_dist = random_mvn(batch_shape + (1,), obs_dim, requires_grad=args.grad) + trans_mat = 0.1 * torch.randn(batch_shape + (duration, hidden_dim, hidden_dim)) + obs_mat = torch.randn(batch_shape + (1, hidden_dim, obs_dim)) + + if args.grad: + # Collect parameters. + params = [ + init_dist.loc, + init_dist.scale_tril, + trans_dist.loc, + trans_dist.scale_tril, + obs_dist.loc, + obs_dist.scale_tril, + trans_mat.requires_grad_(), + obs_mat.requires_grad_(), + ] + + # Build a distribution. + d = dist.GaussianHMM( + init_dist, trans_mat, trans_dist, obs_mat, obs_dist, duration=duration + ) + + for step in tqdm(range(args.num_steps)): + if not args.grad: + # Time forward only. + d.sample() + continue + + # Time forward + backward. + x = d.rsample() + grads = torch.autograd.grad( + x.sum(), params, allow_unused=True, retain_graph=True + ) + assert not all(g is None for g in grads) + del x + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="GaussianHMM profiler") + parser.add_argument("--hidden-dim", type=int, default=4) + parser.add_argument("--obs-dim", type=int, default=4) + parser.add_argument("--duration", type=int, default=10000) + parser.add_argument("--batch-size", type=int, default=3) + parser.add_argument("-n", "--num-steps", type=int, default=100) + parser.add_argument("--cuda", action="store_true", default=False) + parser.add_argument("--grad", action="store_true", default=False) + args = parser.parse_args() + main(args) diff --git a/pyro/source/profiler/hmm.py b/pyro/source/profiler/hmm.py new file mode 100644 index 0000000000000000000000000000000000000000..770f859d30a446ddcf5231c984a491095cfe7296 --- /dev/null +++ b/pyro/source/profiler/hmm.py @@ -0,0 +1,85 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import argparse +import os +import pickle +import re +import subprocess +import sys +from collections import defaultdict +from os.path import abspath, join + +from numpy import median + +from pyro.util import timed + +EXAMPLES_DIR = join(abspath(__file__), os.pardir, os.pardir, "examples") + + +def main(args): + # Decide what experiments to run. + configs = [] + for model in args.model.split(","): + for seed in args.seed.split(","): + config = [ + "--seed={}".format(seed), + "--model={}".format(model), + "--num-steps={}".format(args.num_steps), + ] + if args.cuda: + config.append("--cuda") + if args.jit: + config.append("--jit") + config.append("--time-compilation") + configs.append(tuple(config)) + + # Run timing experiments serially. + results = {} + if os.path.exists(args.filename): + try: + with open(args.filename, "rb") as f: + results = pickle.load(f) + except Exception: + pass + for config in configs: + with timed() as t: + out = subprocess.check_output( + (sys.executable, "-O", abspath(join(EXAMPLES_DIR, "hmm.py"))) + config, + encoding="utf-8", + ) + results[config] = t.elapsed + if "--jit" in config: + matched = re.search(r"time to compile: (\d+\.\d+)", out) + if matched: + compilation_time = float(matched.group(1)) + results[config + ("(compilation time)",)] = compilation_time + with open(args.filename, "wb") as f: + pickle.dump(results, f) + + # Group by seed. + grouped = defaultdict(list) + for config, elapsed in results.items(): + grouped[config[1:]].append(elapsed) + + # Print a table in github markdown format. + print("| Min (sec) | Mean (sec) | Max (sec) | python -O examples/hmm.py ... |") + print("| -: | -: | -: | - |") + for config, times in sorted(grouped.items()): + print( + "| {:0.1f} | {:0.1f} | {:0.1f} | {} |".format( + min(times), median(times), max(times), " ".join(config) + ) + ) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Profiler for examples/hmm.py") + parser.add_argument("-f", "--filename", default="hmm_profile.pkl") + parser.add_argument("-n", "--num-steps", default=50, type=int) + parser.add_argument("-s", "--seed", default="0,1,2,3,4") + parser.add_argument("-m", "--model", default="1,2,3,4,5,6,7") + parser.add_argument("--cuda", action="store_true") + parser.add_argument("--jit", action="store_true") + args = parser.parse_args() + main(args) diff --git a/pyro/source/profiler/profiling_utils.py b/pyro/source/profiler/profiling_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..da083b89ce16d5972bd74b378a6fe263e98c262e --- /dev/null +++ b/pyro/source/profiler/profiling_utils.py @@ -0,0 +1,124 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import cProfile +import functools +import os +import pstats +import timeit +from contextlib import contextmanager +from io import StringIO + +from prettytable import ALL, PrettyTable + +FILE = os.path.abspath(__file__) +PROF_DIR = os.path.join(os.path.dirname(FILE), "data") +if not os.path.exists(PROF_DIR): + os.makedirs(PROF_DIR) + + +class ProfilePrinter: + def __init__(self, column_widths=None, field_format=None, template="column"): + assert template in ("column", "row") + self._template = template + self._column_widths = column_widths + self._field_format = field_format + self._header = None + if template == "column": + self.table = PrettyTable(header=False, hrules=ALL) + else: + self.table = PrettyTable(header=False, hrules=ALL) + + def _formatted_values(self, values): + if self._field_format is not None: + assert len(self._field_format) == len(values) + return [ + f.format(val) if f else str(val) + for f, val in zip(self._field_format, values) + ] + return values + + def _add_using_row_format(self, values): + assert len(self._header) == len(values) + formatted_vals = self._formatted_values(values) + for i in range(len(self._header)): + self.table.add_row([self._header[i], formatted_vals[i]]) + + def _add_using_column_format(self, values): + formatted_vals = self._formatted_values(values) + self.table.add_row(formatted_vals) + + def push(self, values): + if self._template == "column": + self._add_using_column_format(values) + else: + self._add_using_row_format(values) + + def header(self, values): + self._header = values + if self._template == "column": + field_names = values + self.table.add_row(values) + else: + field_names = ["KEY", "VALUE"] + self.table.field_names = field_names + for i in range(len(field_names)): + self.table.align[field_names[i]] = "l" + if self._column_widths: + self.table.max_width[field_names[i]] = self._column_widths[i] + + def print(self): + print(self.table) + + +@contextmanager +def profile_print(column_widths=None, field_format=None, template="column"): + out_buffer = ProfilePrinter(column_widths, field_format, template) + try: + yield out_buffer + finally: + out_buffer.print() + + +def profile_timeit(fn_callable, repeat=1): + ret = fn_callable() + return ret, min(timeit.repeat(fn_callable, repeat=repeat, number=1)) + + +def profile_cprofile(fn_callable, prof_file): + prof = cProfile.Profile() + ret = prof.runcall(fn_callable) + prof.dump_stats(prof_file) + prof_stats = StringIO() + p = pstats.Stats(prof_file, stream=prof_stats) + p.strip_dirs().sort_stats("cumulative").print_stats(0.5) + return ret, prof_stats.getvalue() + + +class Profile: + def __init__(self, tool, tool_cfg, fn_id): + self.tool = tool + self.tool_cfg = tool_cfg + self.fn_id = fn_id + + def _set_decorator_params(self): + if callable(self.tool): + self.tool = self.tool() + if callable(self.tool_cfg): + self.tool_cfg = self.tool_cfg() + + def __call__(self, fn): + def wrapped_fn(*args, **kwargs): + self._set_decorator_params() + fn_callable = functools.partial(fn, *args, **kwargs) + if self.tool == "timeit": + return profile_timeit(fn_callable, **self.tool_cfg) + elif self.tool == "cprofile": + prof_file = os.path.join(PROF_DIR, self.fn_id(*args, **kwargs)) + return profile_cprofile(fn_callable, prof_file=prof_file) + else: + raise ValueError( + "Invalid profiling tool specified: {}.".format(self.tool) + ) + + return wrapped_fn diff --git a/pyro/source/pyproject.toml b/pyro/source/pyproject.toml new file mode 100644 index 0000000000000000000000000000000000000000..b8b2241c80ec753b3cb83528d1204ca718e7991c --- /dev/null +++ b/pyro/source/pyproject.toml @@ -0,0 +1,12 @@ +# Copyright Contributors to the Pyro project. +# +# SPDX-License-Identifier: Apache-2.0 + +[tool.ruff] +extend-exclude = ["*.ipynb"] +line-length = 120 + + +[tool.ruff.lint] +ignore = ["E741", "E721"] +select = ["E", "F", "I"] diff --git a/pyro/source/pyro/__init__.py b/pyro/source/pyro/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c9b4905eabca6915f71e552714768a051a0446a9 --- /dev/null +++ b/pyro/source/pyro/__init__.py @@ -0,0 +1,66 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pyro.poutine as poutine +from pyro.infer.inspect import render_model +from pyro.logger import log +from pyro.poutine import condition, do, markov +from pyro.primitives import ( + barrier, + clear_param_store, + deterministic, + enable_validation, + factor, + get_param_store, + iarange, + irange, + module, + param, + plate, + plate_stack, + random_module, + sample, + subsample, + validation_enabled, +) +from pyro.util import set_rng_seed + +from . import settings + +# After changing this, run scripts/update_version.py +version_prefix = "1.9.1" + +# Get the __version__ string from the auto-generated _version.py file, if exists. +try: + from pyro._version import __version__ # type: ignore +except ImportError: + __version__ = version_prefix + +__all__ = [ + "__version__", + "barrier", + "clear_param_store", + "condition", + "deterministic", + "do", + "enable_validation", + "factor", + "get_param_store", + "iarange", + "irange", + "log", + "markov", + "module", + "param", + "plate", + "plate", + "plate_stack", + "poutine", + "random_module", + "render_model", + "sample", + "set_rng_seed", + "settings", + "subsample", + "validation_enabled", +] diff --git a/pyro/source/pyro/contrib/README.md b/pyro/source/pyro/contrib/README.md new file mode 100644 index 0000000000000000000000000000000000000000..bbb71554ad694fdcec47df2e870cafa0126f6c43 --- /dev/null +++ b/pyro/source/pyro/contrib/README.md @@ -0,0 +1,18 @@ + + +# Contributed Code + +Code in `pyro.contrib` is under various stages of development. +This code makes no guarantee about maintaining backwards compatibility. + +To add a new contrib module `foo`: +1. Create a module `pyro/contrib/foo.py` or `pyro/contrib/foo/__init__.py` with new code. +2. Create a module docstring describing purpose and authors. +3. Create document all public functions and methods. +4. Create Sphinx hooks in `docs/source/contrib.rst` and `docs/source/contrib.foo.rst`. +5. Create tests `tests/contrib/test_foo.py` or `tests/contrib/foo/test_*.py`. +6. Create examples `examples/contrib/foo/*.py`. diff --git a/pyro/source/pyro/contrib/__init__.py b/pyro/source/pyro/contrib/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..6955329860a2e27f4a67dbcde1eeb8077246e20c --- /dev/null +++ b/pyro/source/pyro/contrib/__init__.py @@ -0,0 +1,42 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +r""" +Contributed Code +================ + +.. warning:: Code in ``pyro.contrib`` is under various stages of development. + This code makes no guarantee about maintaining backwards compatibility. +""" + +from pyro.contrib import ( + autoname, + bnn, + easyguide, + epidemiology, + forecast, + gp, + oed, + tracking, +) + +__all__ = [ + "autoname", + "bnn", + "easyguide", + "epidemiology", + "forecast", + "gp", + "oed", + "tracking", +] + + +try: + import funsor as funsor_ # noqa: F401 + + from pyro.contrib import funsor + + __all__ += ["funsor"] +except ImportError: + pass diff --git a/pyro/source/pyro/contrib/autoguide.py b/pyro/source/pyro/contrib/autoguide.py new file mode 100644 index 0000000000000000000000000000000000000000..820b240782c931226a9ffe7a6c5be9b9e1171a38 --- /dev/null +++ b/pyro/source/pyro/contrib/autoguide.py @@ -0,0 +1,12 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import warnings + +from pyro.infer.autoguide import * # noqa F403 + +warnings.warn( + "pyro.contrib.autoguide has moved to pyro.infer.autoguide. " + "The contrib alias will stop working in Pyro 0.5.", + DeprecationWarning, +) diff --git a/pyro/source/pyro/contrib/autoname/__init__.py b/pyro/source/pyro/contrib/autoname/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..9a379fb2ffa54ab314dff1f982e575e43c5f3133 --- /dev/null +++ b/pyro/source/pyro/contrib/autoname/__init__.py @@ -0,0 +1,18 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +The :mod:`pyro.contrib.autoname` module provides tools for automatically +generating unique, semantically meaningful names for sample sites. +""" +from pyro.contrib.autoname import named +from pyro.contrib.autoname.autoname import autoname, sample +from pyro.contrib.autoname.scoping import name_count, scope + +__all__ = [ + "named", + "scope", + "name_count", + "autoname", + "sample", +] diff --git a/pyro/source/pyro/contrib/autoname/autoname.py b/pyro/source/pyro/contrib/autoname/autoname.py new file mode 100644 index 0000000000000000000000000000000000000000..f52aec84fb0270c3e3962f8136edbc76c5fa0830 --- /dev/null +++ b/pyro/source/pyro/contrib/autoname/autoname.py @@ -0,0 +1,178 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from collections import defaultdict +from collections.abc import Iterable +from functools import singledispatch + +import pyro +from pyro.poutine.handlers import _make_handler +from pyro.poutine.reentrant_messenger import ReentrantMessenger +from pyro.poutine.runtime import effectful + + +@effectful(type="genname") +def genname(name="name"): + return name + + +class NameScope: + def __init__(self, name=None): + self.name = name + self.counter = 0 + self._namespace = defaultdict(int) + + def __str__(self): + if self.counter: + return f"{self.name}__{self.counter}" + return str(self.name) + + def allocate(self, name): + counter = self._namespace[name] + self._namespace[name] += 1 + return counter + + +class ScopeStack: + """ + Single global state to keep track of scope stacks. + """ + + def __init__(self): + self._stack = [] + + def __str__(self): + return "/".join(str(scope) for scope in self._stack) + + @property + def global_scope(self): + return NameScope() # don't keep a counter for a global scope + + @property + def current_scope(self): + if len(self._stack): + return self._stack[-1] + return self.global_scope + + def push_scope(self, scope): + scope.counter = self.current_scope.allocate(scope.name) + self._stack.append(scope) + + def pop_scope(self): + return self._stack.pop(-1) + + def fresh_name(self, name): + counter = self.current_scope.allocate(name) + if counter: + return name + str(counter) + return name + + +class AutonameMessenger(ReentrantMessenger): + """ + Assign unique names to random variables. + + 1. For a new varialbe use its declared name if given, otherwise use the distribution name:: + + sample("x", dist.Bernoulli ... ) # -> x + sample(dist.Bernoulli ... ) # -> Bernoulli + + 2. For repeated variables names append the counter as a suffix:: + + sample(dist.Bernoulli ... ) # -> Bernoulli + sample(dist.Bernoulli ... ) # -> Bernoulli1 + sample(dist.Bernoulli ... ) # -> Bernoulli2 + + 3. Functions and iterators can be used as a name scope:: + + @autoname + def f1(): + sample(dist.Bernoulli ... ) + + @autoname + def f2(): + f1() # -> f2/f1/Bernoulli + f1() # -> f2/f1__1/Bernoulli + sample(dist.Bernoulli ... ) # -> f2/Bernoulli + + @autoname(name="model") + def f3(): + for i in autoname(range(3), name="time"): + # model/time/Bernoulli .. model/time__1/Bernoulli .. model/time__2/Bernoulli + sample(dist.Bernoulli ... ) + # model/time/f1/Bernoulli .. model/time__1/f1/Bernoulli .. model/time__2/f1/Bernoulli + f1() + + 4. Or scopes can be added using the with statement:: + + def f4(): + with autoname(name="prefix"): + f1() # -> prefix/f1/Bernoulli + f1() # -> prefix/f1__1/Bernoulli + sample(dist.Bernoulli ... ) # -> prefix/Bernoulli + """ + + def __init__(self, name=None): + self.name = name + super().__init__() + + def __call__(self, fn_or_iter): + if isinstance(fn_or_iter, Iterable): + if self.name is None: + self.name = fn_or_iter.name # name of a sequential pyro.plate + self._iter = fn_or_iter + return self + if callable(fn_or_iter): + if self.name is None: + self.name = fn_or_iter.__name__ + return super().__call__(fn_or_iter) + raise ValueError(f"{fn_or_iter} has to be an iterable or a callable.") + + def __enter__(self): + scope = NameScope(self.name) + _SCOPE_STACK.push_scope(scope) + return super().__enter__() + + def __exit__(self, *args): + _SCOPE_STACK.pop_scope() + return super().__exit__(*args) + + def __iter__(self): + for i in self._iter: + scope = NameScope(self.name) + _SCOPE_STACK.push_scope(scope) + yield i + scope = _SCOPE_STACK.pop_scope() + + @staticmethod # only depends on the global _SCOPE_STACK state, not self + def _pyro_genname(msg): + raw_name = msg["fn"](*msg["args"]) + fresh_name = _SCOPE_STACK.fresh_name(raw_name) + + msg["value"] = str(_SCOPE_STACK) + "/" + fresh_name + msg["stop"] = True + + +@_make_handler(AutonameMessenger, __name__) +def autoname(fn=None, name=None): ... + + +@singledispatch +def sample(*args): + raise NotImplementedError + + +@sample.register(str) +def _sample_name(name, fn, *args, **kwargs): # the current syntax of pyro.sample + name = genname(name) + return pyro.sample(name, fn, *args, **kwargs) + + +@sample.register(pyro.distributions.Distribution) +def _sample_dist(fn, *args, **kwargs): + name = kwargs.pop("name", None) + name = genname(type(fn).__name__ if name is None else name) + return pyro.sample(name, fn, *args, **kwargs) + + +_SCOPE_STACK = ScopeStack() diff --git a/pyro/source/pyro/contrib/autoname/named.py b/pyro/source/pyro/contrib/autoname/named.py new file mode 100644 index 0000000000000000000000000000000000000000..1d1b63a929f974abbe28d4eb2912cc4cd00e4492 --- /dev/null +++ b/pyro/source/pyro/contrib/autoname/named.py @@ -0,0 +1,253 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +The ``pyro.contrib.named`` module is a thin syntactic layer on top of Pyro. It +allows Pyro models to be written to look like programs with operating on Python +data structures like ``latent.x.sample_(...)``, rather than programs with +string-labeled statements like ``x = pyro.sample("x", ...)``. + +This module provides three container data structures ``named.Object``, +``named.List``, and ``named.Dict``. These data structures are intended to be +nested in each other. Together they track the address of each piece of data +in each data structure, so that this address can be used as a Pyro site. For +example:: + + >>> state = named.Object("state") + >>> print(str(state)) + state + + >>> z = state.x.y.z # z is just a placeholder. + >>> print(str(z)) + state.x.y.z + + >>> state.xs = named.List() # Create a contained list. + >>> x0 = state.xs.add() + >>> print(str(x0)) + state.xs[0] + + >>> state.ys = named.Dict() + >>> foo = state.ys['foo'] + >>> print(str(foo)) + state.ys['foo'] + +These addresses can now be used inside ``sample``, ``observe`` and ``param`` +statements. These named data structures even provide in-place methods that +alias Pyro statements. For example:: + + >>> state = named.Object("state") + >>> loc = state.loc.param_(torch.zeros(1, requires_grad=True)) + >>> scale = state.scale.param_(torch.ones(1, requires_grad=True)) + >>> z = state.z.sample_(dist.Normal(loc, scale)) + >>> obs = state.x.sample_(dist.Normal(loc, scale), obs=z) + +For deeper examples of how these can be used in model code, see the +`Tree Data `_ +and +`Mixture `_ +examples. + +Authors: Fritz Obermeyer, Alexander Rush +""" +import functools + +import pyro + + +class Object: + """ + Object to hold immutable latent state. + + This object can serve either as a container for nested latent state + or as a placeholder to be replaced by a tensor via a named.sample, + named.observe, or named.param statement. When used as a placeholder, + Object objects take the place of strings in normal pyro.sample statements. + + :param str name: The name of the object. + + Example:: + + state = named.Object("state") + state.x = 0 + state.ys = named.List() + state.zs = named.Dict() + state.a.b.c.d.e.f.g = 0 # Creates a chain of named.Objects. + + .. warning:: This data structure is write-once: data may be added but may + not be mutated or removed. Trying to mutate this data structure may + result in silent errors. + """ + + def __init__(self, name): + super().__setattr__("_name", name) + super().__setattr__("_is_placeholder", True) + + def __str__(self): + return super().__getattribute__("_name") + + def __getattribute__(self, key): + try: + return super().__getattribute__(key) + except AttributeError: + name = "{}.{}".format(self, key) + value = Object(name) + super(Object, value).__setattr__( + "_set_value", lambda value: super(Object, self).__setattr__(key, value) + ) + super().__setattr__(key, value) + super().__setattr__("_is_placeholder", False) + return value + + def __setattr__(self, key, value): + if isinstance(value, (List, Dict)): + value._set_name("{}.{}".format(self, key)) + if hasattr(self, key): + old = super().__getattribute__(key) + if not isinstance(old, Object) or not old._is_placeholder: + raise RuntimeError("Cannot overwrite {}.{}".format(self, key)) + super().__setattr__(key, value) + + @functools.wraps(pyro.sample) + def sample_(self, fn, *args, **kwargs): + if not self._is_placeholder: + raise RuntimeError( + "Cannot .sample_ an initialized named.Object {}".format(self) + ) + value = pyro.sample(str(self), fn, *args, **kwargs) + self._set_value(value) + return value + + @functools.wraps(pyro.param) + def param_(self, *args, **kwargs): + if not self._is_placeholder: + raise RuntimeError("Cannot .param_ an initialized named.Object") + value = pyro.param(str(self), *args, **kwargs) + self._set_value(value) + return value + + +class List(list): + """ + List-like object to hold immutable latent state. + + This must either be given a name when constructed:: + + latent = named.List("root") + + or must be immediately stored in a ``named.Object``:: + + latent = named.Object("root") + latent.xs = named.List() # Must be bound to a Object before use. + + .. warning:: This data structure is write-once: data may be added but may + not be mutated or removed. Trying to mutate this data structure may + result in silent errors. + """ + + def __init__(self, name=None): + self._name = name + + def __str__(self): + return self._name + + def _set_name(self, name): + if self: + raise RuntimeError("Cannot name a named.List after data has been added") + if self._name is not None: + raise RuntimeError("Cannot rename named.List: {}".format(self._name)) + self._name = name + + def add(self): + """ + Append one new named.Object. + + :returns: a new latent object at the end + :rtype: named.Object + """ + if self._name is None: + raise RuntimeError( + "Cannot .add() to a named.List before storing it in a named.Object" + ) + i = len(self) + value = Object("{}[{}]".format(self._name, i)) + super(Object, value).__setattr__( + "_set_value", lambda value, i=i: self.__setitem__(i, value) + ) + self.append(value) + return value + + def __setitem__(self, pos, value): + name = "{}[{}]".format(self._name, pos) + if isinstance(value, Object): + raise RuntimeError( + "Cannot store named.Object {} in named.Dict {}".format( + value, self._name + ) + ) + elif isinstance(value, (List, Dict)): + value._set_name(name) + old = self[pos] + if not isinstance(old, Object) or not old._is_placeholder: + raise RuntimeError("Cannot overwrite {}".format(name)) + super().__setitem__(pos, value) + + +class Dict(dict): + """ + Dict-like object to hold immutable latent state. + + This must either be given a name when constructed:: + + latent = named.Dict("root") + + or must be immediately stored in a ``named.Object``:: + + latent = named.Object("root") + latent.xs = named.Dict() # Must be bound to a Object before use. + + .. warning:: This data structure is write-once: data may be added but may + not be mutated or removed. Trying to mutate this data structure may + result in silent errors. + """ + + def __init__(self, name=None): + self._name = name + + def __str__(self): + return self._name + + def _set_name(self, name): + if self: + raise RuntimeError("Cannot name a named.Dict after data has been added") + if self._name is not None: + raise RuntimeError("Cannot rename named.Dict: {}".format(self._name)) + self._name = name + + def __getitem__(self, key): + try: + return super().__getitem__(key) + except KeyError as e: + if self._name is None: + raise RuntimeError("Cannot access an unnamed named.Dict") from e + value = Object("{}[{!r}]".format(self._name, key)) + super(Object, value).__setattr__( + "_set_value", lambda value: self.__setitem__(key, value) + ) + super().__setitem__(key, value) + return value + + def __setitem__(self, key, value): + name = "{}[{!r}]".format(self._name, key) + if key in self: + old = super().__getitem__(key) + if not isinstance(old, Object) or not old._is_placeholder: + raise RuntimeError("Cannot overwrite {}".format(name)) + if isinstance(value, Object): + raise RuntimeError( + "Cannot store named.Object {} in named.Dict {}".format( + value, self._name + ) + ) + elif isinstance(value, (List, Dict)): + value._set_name(name) + super().__setitem__(key, value) diff --git a/pyro/source/pyro/contrib/autoname/scoping.py b/pyro/source/pyro/contrib/autoname/scoping.py new file mode 100644 index 0000000000000000000000000000000000000000..b9b746d0ba2db1cd1ab9735df967b5cf185c619f --- /dev/null +++ b/pyro/source/pyro/contrib/autoname/scoping.py @@ -0,0 +1,191 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +``pyro.contrib.autoname.scoping`` contains the implementation of +:func:`pyro.contrib.autoname.scope`, a tool for automatically appending +a semantically meaningful prefix to names of sample sites. +""" +import functools + +from pyro.poutine.messenger import Messenger +from pyro.poutine.runtime import effectful + + +class NameCountMessenger(Messenger): + """ + ``NameCountMessenger`` is the implementation of :func:`pyro.contrib.autoname.name_count` + """ + + def __enter__(self): + self._names = set() + return super().__enter__() + + def _increment_name(self, name, label): + while (name, label) in self._names: + split_name = name.split("__") + if "__" in name and split_name[-1].isdigit(): + counter = int(split_name[-1]) + 1 + name = "__".join(split_name[:-1] + [str(counter)]) + else: + name = name + "__1" + return name + + def _pyro_sample(self, msg): + msg["name"] = self._increment_name(msg["name"], "sample") + + def _pyro_post_sample(self, msg): + self._names.add((msg["name"], "sample")) + + def _pyro_post_scope(self, msg): + self._names.add((msg["args"][0], "scope")) + + def _pyro_scope(self, msg): + msg["args"] = (self._increment_name(msg["args"][0], "scope"),) + + +class ScopeMessenger(Messenger): + """ + ``ScopeMessenger`` is the implementation of :func:`pyro.contrib.autoname.scope` + """ + + def __init__(self, prefix=None, inner=None): + super().__init__() + self.prefix = prefix + self.inner = inner + + @staticmethod + @effectful(type="scope") + def _collect_scope(prefixed_scope): + return prefixed_scope.split("/")[-1] + + def __enter__(self): + if self.prefix is None: + raise ValueError("no prefix was provided") + if not self.inner: + # to accomplish adding a counter to duplicate scopes, + # we make ScopeMessenger.__enter__ effectful + # so that the same mechanism that adds counters to sample names + # can be used to add a counter to a scope name + self.prefix = self._collect_scope(self.prefix) + return super().__enter__() + + def __call__(self, fn): + if self.prefix is None: + self.prefix = fn.__code__.co_name # fn.__name__ + + @functools.wraps(fn) + def _fn(*args, **kwargs): + with type(self)(prefix=self.prefix, inner=self.inner): + return fn(*args, **kwargs) + + return _fn + + def _pyro_scope(self, msg): + msg["args"] = ("{}/{}".format(self.prefix, msg["args"][0]),) + + def _pyro_sample(self, msg): + msg["name"] = "{}/{}".format(self.prefix, msg["name"]) + + +def scope(fn=None, prefix=None, inner=None): + """ + :param fn: a stochastic function (callable containing Pyro primitive calls) + :param prefix: a string to prepend to sample names (optional if ``fn`` is provided) + :param inner: switch to determine where duplicate name counters appear + :returns: ``fn`` decorated with a :class:`~pyro.contrib.autoname.scoping.ScopeMessenger` + + ``scope`` prepends a prefix followed by a ``/`` to the name at a Pyro sample site. + It works much like TensorFlow's ``name_scope`` and ``variable_scope``, + and can be used as a context manager, a decorator, or a higher-order function. + + ``scope`` is very useful for aligning compositional models with guides or data. + + Example:: + + >>> @scope(prefix="a") + ... def model(): + ... return pyro.sample("x", dist.Bernoulli(0.5)) + ... + >>> assert "a/x" in poutine.trace(model).get_trace() + + + Example:: + + >>> def model(): + ... with scope(prefix="a"): + ... return pyro.sample("x", dist.Bernoulli(0.5)) + ... + >>> assert "a/x" in poutine.trace(model).get_trace() + + Scopes compose as expected, with outer scopes appearing before inner scopes in names:: + + >>> @scope(prefix="b") + ... def model(): + ... with scope(prefix="a"): + ... return pyro.sample("x", dist.Bernoulli(0.5)) + ... + >>> assert "b/a/x" in poutine.trace(model).get_trace() + + When used as a decorator or higher-order function, + ``scope`` will use the name of the input function as the prefix + if no user-specified prefix is provided. + + Example:: + + >>> @scope + ... def model(): + ... return pyro.sample("x", dist.Bernoulli(0.5)) + ... + >>> assert "model/x" in poutine.trace(model).get_trace() + """ + msngr = ScopeMessenger(prefix=prefix, inner=inner) + return msngr(fn) if fn is not None else msngr + + +def name_count(fn=None): + """ + ``name_count`` is a very simple autonaming scheme that simply appends a suffix `"__"` + plus a counter to any name that appears multiple tims in an execution. + Only duplicate instances of a name get a suffix; the first instance is not modified. + + Example:: + + >>> @name_count + ... def model(): + ... for i in range(3): + ... pyro.sample("x", dist.Bernoulli(0.5)) + ... + >>> assert "x" in poutine.trace(model).get_trace() + >>> assert "x__1" in poutine.trace(model).get_trace() + >>> assert "x__2" in poutine.trace(model).get_trace() + + ``name_count`` also composes with :func:`~pyro.contrib.autoname.scope` + by adding a suffix to duplicate scope entrances: + + Example:: + + >>> @name_count + ... def model(): + ... for i in range(3): + ... with pyro.contrib.autoname.scope(prefix="a"): + ... pyro.sample("x", dist.Bernoulli(0.5)) + ... + >>> assert "a/x" in poutine.trace(model).get_trace() + >>> assert "a__1/x" in poutine.trace(model).get_trace() + >>> assert "a__2/x" in poutine.trace(model).get_trace() + + Example:: + + >>> @name_count + ... def model(): + ... with pyro.contrib.autoname.scope(prefix="a"): + ... for i in range(3): + ... pyro.sample("x", dist.Bernoulli(0.5)) + ... + >>> assert "a/x" in poutine.trace(model).get_trace() + >>> assert "a/x__1" in poutine.trace(model).get_trace() + >>> assert "a/x__2" in poutine.trace(model).get_trace() + """ + msngr = NameCountMessenger() + return msngr(fn) if fn is not None else msngr diff --git a/pyro/source/pyro/contrib/bnn/__init__.py b/pyro/source/pyro/contrib/bnn/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..4174473384ef370a1f536c9d8801d026a1e8c2eb --- /dev/null +++ b/pyro/source/pyro/contrib/bnn/__init__.py @@ -0,0 +1,8 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from pyro.contrib.bnn.hidden_layer import HiddenLayer + +__all__ = [ + "HiddenLayer", +] diff --git a/pyro/source/pyro/contrib/bnn/hidden_layer.py b/pyro/source/pyro/contrib/bnn/hidden_layer.py new file mode 100644 index 0000000000000000000000000000000000000000..85c6a786aa15a422701316786a065f2bc788d8c4 --- /dev/null +++ b/pyro/source/pyro/contrib/bnn/hidden_layer.py @@ -0,0 +1,126 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +import torch.nn.functional as F +from torch.distributions.utils import lazy_property + +from pyro.contrib.bnn.utils import adjoin_ones_vector +from pyro.distributions.torch_distribution import TorchDistribution + + +class HiddenLayer(TorchDistribution): + r""" + This distribution is a basic building block in a Bayesian neural network. + It represents a single hidden layer, i.e. an affine transformation applied + to a set of inputs `X` followed by a non-linearity. The uncertainty in the + weights is encoded in a Normal variational distribution specified by the + parameters `A_scale` and `A_mean`. The so-called 'local reparameterization + trick' is used to reduce variance (see reference below). In effect, this + means the weights are never sampled directly; instead one samples in + pre-activation space (i.e. before the non-linearity is applied). Since the + weights are never directly sampled, when this distribution is used within + the context of variational inference, care must be taken to correctly scale + the KL divergence term that corresponds to the weight matrix. This term is + folded into the `log_prob` method of this distributions. + + In effect, this distribution encodes the following generative process: + + A ~ Normal(A_mean, A_scale) + output ~ non_linearity(AX) + + :param torch.Tensor X: B x D dimensional mini-batch of inputs + :param torch.Tensor A_mean: D x H dimensional specifiying weight mean + :param torch.Tensor A_scale: D x H dimensional (diagonal covariance matrix) + specifying weight uncertainty + :param callable non_linearity: a callable that specifies the + non-linearity used. defaults to ReLU. + :param float KL_factor: scaling factor for the KL divergence. prototypically + this is equal to the size of the mini-batch divided + by the size of the whole dataset. defaults to `1.0`. + :param A_prior: the prior over the weights is assumed to be normal with + mean zero and scale factor `A_prior`. default value is 1.0. + :type A_prior: float or torch.Tensor + :param bool include_hidden_bias: controls whether the activations should be + augmented with a 1, which can be used to + incorporate bias terms. defaults to `True`. + :param bool weight_space_sampling: controls whether the local reparameterization + trick is used. this is only intended to be + used for internal testing. + defaults to `False`. + + Reference: + + Kingma, Diederik P., Tim Salimans, and Max Welling. + "Variational dropout and the local reparameterization trick." + Advances in Neural Information Processing Systems. 2015. + """ + + has_rsample = True + + def __init__( + self, + X=None, + A_mean=None, + A_scale=None, + non_linearity=F.relu, + KL_factor=1.0, + A_prior_scale=1.0, + include_hidden_bias=True, + weight_space_sampling=False, + ): + self.X = X + self.dim_X = X.size(-1) + self.dim_H = A_mean.size(-1) + assert ( + A_mean.size(0) == self.dim_X + ), "The dimensions of X and A_mean and A_scale must match accordingly; see documentation" + self.A_mean = A_mean + self.A_scale = A_scale + self.non_linearity = non_linearity + assert callable(non_linearity), "non_linearity must be callable" + if A_scale.dim() != 2: + raise NotImplementedError("A_scale must be 2-dimensional") + + self.KL_factor = KL_factor + self.A_prior_scale = A_prior_scale + self.weight_space_sampling = weight_space_sampling + self.include_hidden_bias = include_hidden_bias + + def log_prob(self, value): + return -self.KL_factor * self.KL + + @lazy_property + def KL(self): + KL_A = torch.pow(self.A_mean / self.A_prior_scale, 2.0).sum() + KL_A -= self.dim_X * self.dim_H + KL_A += torch.pow(self.A_scale / self.A_prior_scale, 2.0).sum() + KL_A -= 2.0 * torch.log(self.A_scale / self.A_prior_scale).sum() + return 0.5 * KL_A + + def rsample(self, sample_shape=torch.Size()): + # note: weight space sampling is only meant for testing + if self.weight_space_sampling: + A = ( + self.A_mean + + torch.randn(sample_shape + self.A_scale.shape).type_as(self.A_mean) + * self.A_scale + ) + activation = torch.matmul(self.X, A) + else: + _mean = torch.matmul(self.X, self.A_mean) + X_sqr = torch.pow(self.X, 2.0).unsqueeze(-1) + A_scale_sqr = torch.pow(self.A_scale, 2.0) + _std = (X_sqr * A_scale_sqr).sum(-2).sqrt() + activation = ( + _mean + torch.randn(sample_shape + _std.shape).type_as(_std) * _std + ) + + # apply non-linearity + activation = self.non_linearity(activation) + + # add 1 element to activations + if self.include_hidden_bias: + activation = adjoin_ones_vector(activation) + + return activation diff --git a/pyro/source/pyro/contrib/bnn/utils.py b/pyro/source/pyro/contrib/bnn/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..794f66f98437dbdef2a2e1b9f1ffa5042390d1c4 --- /dev/null +++ b/pyro/source/pyro/contrib/bnn/utils.py @@ -0,0 +1,20 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import torch + + +def xavier_uniform(D_in, D_out): + scale = math.sqrt(6.0 / float(D_in + D_out)) + noise = torch.rand(D_in, D_out) + return 2.0 * scale * noise - scale + + +def adjoin_ones_vector(x): + return torch.cat([x, torch.ones(x.shape[:-1] + (1,)).type_as(x)], dim=-1) + + +def adjoin_zeros_vector(x): + return torch.cat([x, torch.zeros(x.shape[:-1] + (1,)).type_as(x)], dim=-1) diff --git a/pyro/source/pyro/contrib/cevae/__init__.py b/pyro/source/pyro/contrib/cevae/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..dd6da388a85071198b5ca4b7f370840aa8a01b93 --- /dev/null +++ b/pyro/source/pyro/contrib/cevae/__init__.py @@ -0,0 +1,661 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +This module implements the Causal Effect Variational Autoencoder [1], which +demonstrates a number of innovations including: + +- a generative model for causal effect inference with hidden confounders; +- a model and guide with twin neural nets to allow imbalanced treatment; and +- a custom training loss that includes both ELBO terms and extra terms needed + to train the guide to be able to answer counterfactual queries. + +The main interface is the :class:`CEVAE` class, but users may customize by +using components :class:`Model`, :class:`Guide`, +:class:`TraceCausalEffect_ELBO` and utilities. + +**References** + +[1] C. Louizos, U. Shalit, J. Mooij, D. Sontag, R. Zemel, M. Welling (2017). + | Causal Effect Inference with Deep Latent-Variable Models. + | http://papers.nips.cc/paper/7223-causal-effect-inference-with-deep-latent-variable-models.pdf + | https://github.com/AMLab-Amsterdam/CEVAE +""" +import logging + +import torch +import torch.nn as nn +from torch.utils.data import DataLoader, TensorDataset + +import pyro +import pyro.distributions as dist +from pyro import poutine +from pyro.infer import SVI, Trace_ELBO +from pyro.infer.util import torch_item +from pyro.nn import PyroModule +from pyro.optim import ClippedAdam +from pyro.util import torch_isnan + +logger = logging.getLogger(__name__) + + +class FullyConnected(nn.Sequential): + """ + Fully connected multi-layer network with ELU activations. + """ + + def __init__(self, sizes, final_activation=None): + layers = [] + for in_size, out_size in zip(sizes, sizes[1:]): + layers.append(nn.Linear(in_size, out_size)) + layers.append(nn.ELU()) + layers.pop(-1) + if final_activation is not None: + layers.append(final_activation) + super().__init__(*layers) + + def append(self, layer): + assert isinstance(layer, nn.Module) + self.add_module(str(len(self)), layer) + + +class DistributionNet(nn.Module): + """ + Base class for distribution nets. + """ + + @staticmethod + def get_class(dtype): + """ + Get a subclass by a prefix of its name, e.g.:: + + assert DistributionNet.get_class("bernoulli") is BernoulliNet + """ + for cls in DistributionNet.__subclasses__(): + if cls.__name__.lower() == dtype + "net": + return cls + raise ValueError("dtype not supported: {}".format(dtype)) + + +class BernoulliNet(DistributionNet): + """ + :class:`FullyConnected` network outputting a single ``logits`` value. + + This is used to represent a conditional probability distribution of a + single Bernoulli random variable conditioned on a ``sizes[0]``-sized real + value, for example:: + + net = BernoulliNet([3, 4]) + z = torch.randn(3) + logits, = net(z) + t = net.make_dist(logits).sample() + """ + + def __init__(self, sizes): + assert len(sizes) >= 1 + super().__init__() + self.fc = FullyConnected(sizes + [1]) + + def forward(self, x): + logits = self.fc(x).squeeze(-1).clamp(min=-10, max=10) + return (logits,) + + @staticmethod + def make_dist(logits): + return dist.Bernoulli(logits=logits) + + +class ExponentialNet(DistributionNet): + """ + :class:`FullyConnected` network outputting a constrained ``rate``. + + This is used to represent a conditional probability distribution of a + single Normal random variable conditioned on a ``sizes[0]``-size real + value, for example:: + + net = ExponentialNet([3, 4]) + x = torch.randn(3) + rate, = net(x) + y = net.make_dist(rate).sample() + """ + + def __init__(self, sizes): + assert len(sizes) >= 1 + super().__init__() + self.fc = FullyConnected(sizes + [1]) + + def forward(self, x): + scale = nn.functional.softplus(self.fc(x).squeeze(-1)).clamp(min=1e-3, max=1e6) + rate = scale.reciprocal() + return (rate,) + + @staticmethod + def make_dist(rate): + return dist.Exponential(rate) + + +class LaplaceNet(DistributionNet): + """ + :class:`FullyConnected` network outputting a constrained ``loc,scale`` + pair. + + This is used to represent a conditional probability distribution of a + single Laplace random variable conditioned on a ``sizes[0]``-size real + value, for example:: + + net = LaplaceNet([3, 4]) + x = torch.randn(3) + loc, scale = net(x) + y = net.make_dist(loc, scale).sample() + """ + + def __init__(self, sizes): + assert len(sizes) >= 1 + super().__init__() + self.fc = FullyConnected(sizes + [2]) + + def forward(self, x): + loc_scale = self.fc(x) + loc = loc_scale[..., 0].clamp(min=-1e6, max=1e6) + scale = nn.functional.softplus(loc_scale[..., 1]).clamp(min=1e-3, max=1e6) + return loc, scale + + @staticmethod + def make_dist(loc, scale): + return dist.Laplace(loc, scale) + + +class NormalNet(DistributionNet): + """ + :class:`FullyConnected` network outputting a constrained ``loc,scale`` + pair. + + This is used to represent a conditional probability distribution of a + single Normal random variable conditioned on a ``sizes[0]``-size real + value, for example:: + + net = NormalNet([3, 4]) + x = torch.randn(3) + loc, scale = net(x) + y = net.make_dist(loc, scale).sample() + """ + + def __init__(self, sizes): + assert len(sizes) >= 1 + super().__init__() + self.fc = FullyConnected(sizes + [2]) + + def forward(self, x): + loc_scale = self.fc(x) + loc = loc_scale[..., 0].clamp(min=-1e6, max=1e6) + scale = nn.functional.softplus(loc_scale[..., 1]).clamp(min=1e-3, max=1e6) + return loc, scale + + @staticmethod + def make_dist(loc, scale): + return dist.Normal(loc, scale) + + +class StudentTNet(DistributionNet): + """ + :class:`FullyConnected` network outputting a constrained ``df,loc,scale`` + triple, with shared ``df > 1``. + + This is used to represent a conditional probability distribution of a + single Student's t random variable conditioned on a ``sizes[0]``-size real + value, for example:: + + net = StudentTNet([3, 4]) + x = torch.randn(3) + df, loc, scale = net(x) + y = net.make_dist(df, loc, scale).sample() + """ + + def __init__(self, sizes): + assert len(sizes) >= 1 + super().__init__() + self.fc = FullyConnected(sizes + [2]) + self.df_unconstrained = nn.Parameter(torch.tensor(0.0)) + + def forward(self, x): + loc_scale = self.fc(x) + loc = loc_scale[..., 0].clamp(min=-1e6, max=1e6) + scale = nn.functional.softplus(loc_scale[..., 1]).clamp(min=1e-3, max=1e6) + df = nn.functional.softplus(self.df_unconstrained).add(1).expand_as(loc) + return df, loc, scale + + @staticmethod + def make_dist(df, loc, scale): + return dist.StudentT(df, loc, scale) + + +class DiagNormalNet(nn.Module): + """ + :class:`FullyConnected` network outputting a constrained ``loc,scale`` + pair. + + This is used to represent a conditional probability distribution of a + ``sizes[-1]``-sized diagonal Normal random variable conditioned on a + ``sizes[0]``-size real value, for example:: + + net = DiagNormalNet([3, 4, 5]) + z = torch.randn(3) + loc, scale = net(z) + x = dist.Normal(loc, scale).sample() + + This is intended for the latent ``z`` distribution and the prewhitened + ``x`` features, and conservatively clips ``loc`` and ``scale`` values. + """ + + def __init__(self, sizes): + assert len(sizes) >= 2 + self.dim = sizes[-1] + super().__init__() + self.fc = FullyConnected(sizes[:-1] + [self.dim * 2]) + + def forward(self, x): + loc_scale = self.fc(x) + loc = loc_scale[..., : self.dim].clamp(min=-1e2, max=1e2) + scale = ( + nn.functional.softplus(loc_scale[..., self.dim :]).add(1e-3).clamp(max=1e2) + ) + return loc, scale + + +class PreWhitener(nn.Module): + """ + Data pre-whitener. + """ + + def __init__(self, data): + super().__init__() + with torch.no_grad(): + loc = data.mean(0) + scale = data.std(0, unbiased=False) + scale[~(scale > 0)] = 1.0 + self.register_buffer("loc", loc) + self.register_buffer("inv_scale", scale.reciprocal()) + + def forward(self, data): + return (data - self.loc) * self.inv_scale + + +class Model(PyroModule): + """ + Generative model for a causal model with latent confounder ``z`` and binary + treatment ``t``:: + + z ~ p(z) # latent confounder + x ~ p(x|z) # partial noisy observation of z + t ~ p(t|z) # treatment, whose application is biased by z + y ~ p(y|t,z) # outcome + + Each of these distributions is defined by a neural network. The ``y`` + distribution is defined by a disjoint pair of neural networks defining + ``p(y|t=0,z)`` and ``p(y|t=1,z)``; this allows highly imbalanced treatment. + + :param dict config: A dict specifying ``feature_dim``, ``latent_dim``, + ``hidden_dim``, ``num_layers``, and ``outcome_dist``. + """ + + def __init__(self, config): + self.latent_dim = config["latent_dim"] + super().__init__() + self.x_nn = DiagNormalNet( + [config["latent_dim"]] + + [config["hidden_dim"]] * config["num_layers"] + + [config["feature_dim"]] + ) + OutcomeNet = DistributionNet.get_class(config["outcome_dist"]) + # The y network is split between the two t values. + self.y0_nn = OutcomeNet( + [config["latent_dim"]] + [config["hidden_dim"]] * config["num_layers"] + ) + self.y1_nn = OutcomeNet( + [config["latent_dim"]] + [config["hidden_dim"]] * config["num_layers"] + ) + self.t_nn = BernoulliNet([config["latent_dim"]]) + + def forward(self, x, t=None, y=None, size=None): + if size is None: + size = x.size(0) + with pyro.plate("data", size, subsample=x): + z = pyro.sample("z", self.z_dist()) + x = pyro.sample("x", self.x_dist(z), obs=x) + t = pyro.sample("t", self.t_dist(z), obs=t) + y = pyro.sample("y", self.y_dist(t, z), obs=y) + return y + + def y_mean(self, x, t=None): + with pyro.plate("data", x.size(0)): + z = pyro.sample("z", self.z_dist()) + x = pyro.sample("x", self.x_dist(z), obs=x) + t = pyro.sample("t", self.t_dist(z), obs=t) + return self.y_dist(t, z).mean + + def z_dist(self): + return dist.Normal(0, 1).expand([self.latent_dim]).to_event(1) + + def x_dist(self, z): + loc, scale = self.x_nn(z) + return dist.Normal(loc, scale).to_event(1) + + def y_dist(self, t, z): + # Parameters are not shared among t values. + params0 = self.y0_nn(z) + params1 = self.y1_nn(z) + t = t.bool() + params = [torch.where(t, p1, p0) for p0, p1 in zip(params0, params1)] + return self.y0_nn.make_dist(*params) + + def t_dist(self, z): + (logits,) = self.t_nn(z) + return dist.Bernoulli(logits=logits) + + +class Guide(PyroModule): + """ + Inference model for causal effect estimation with latent confounder ``z`` + and binary treatment ``t``:: + + t ~ q(t|x) # treatment + y ~ q(y|t,x) # outcome + z ~ q(z|y,t,x) # latent confounder, an embedding + + Each of these distributions is defined by a neural network. The ``y`` and + ``z`` distributions are defined by disjoint pairs of neural networks + defining ``p(-|t=0,...)`` and ``p(-|t=1,...)``; this allows highly + imbalanced treatment. + + :param dict config: A dict specifying ``feature_dim``, ``latent_dim``, + ``hidden_dim``, ``num_layers``, and ``outcome_dist``. + """ + + def __init__(self, config): + self.latent_dim = config["latent_dim"] + OutcomeNet = DistributionNet.get_class(config["outcome_dist"]) + super().__init__() + self.t_nn = BernoulliNet([config["feature_dim"]]) + # The y and z networks both follow an architecture where the first few + # layers are shared for t in {0,1}, but the final layer is split + # between the two t values. + self.y_nn = FullyConnected( + [config["feature_dim"]] + + [config["hidden_dim"]] * (config["num_layers"] - 1), + final_activation=nn.ELU(), + ) + self.y0_nn = OutcomeNet([config["hidden_dim"]]) + self.y1_nn = OutcomeNet([config["hidden_dim"]]) + self.z_nn = FullyConnected( + [1 + config["feature_dim"]] + + [config["hidden_dim"]] * (config["num_layers"] - 1), + final_activation=nn.ELU(), + ) + self.z0_nn = DiagNormalNet([config["hidden_dim"], config["latent_dim"]]) + self.z1_nn = DiagNormalNet([config["hidden_dim"], config["latent_dim"]]) + + def forward(self, x, t=None, y=None, size=None): + if size is None: + size = x.size(0) + with pyro.plate("data", size, subsample=x): + # The t and y sites are needed for prediction, and participate in + # the auxiliary CEVAE loss. We mark them auxiliary to indicate they + # do not correspond to latent variables during training. + t = pyro.sample("t", self.t_dist(x), obs=t, infer={"is_auxiliary": True}) + y = pyro.sample("y", self.y_dist(t, x), obs=y, infer={"is_auxiliary": True}) + # The z site participates only in the usual ELBO loss. + pyro.sample("z", self.z_dist(y, t, x)) + + def t_dist(self, x): + (logits,) = self.t_nn(x) + return dist.Bernoulli(logits=logits) + + def y_dist(self, t, x): + # The first n-1 layers are identical for all t values. + hidden = self.y_nn(x) + # In the final layer params are not shared among t values. + params0 = self.y0_nn(hidden) + params1 = self.y1_nn(hidden) + t = t.bool() + params = [torch.where(t, p1, p0) for p0, p1 in zip(params0, params1)] + return self.y0_nn.make_dist(*params) + + def z_dist(self, y, t, x): + # The first n-1 layers are identical for all t values. + y_x = torch.cat([y.unsqueeze(-1), x], dim=-1) + hidden = self.z_nn(y_x) + # In the final layer params are not shared among t values. + params0 = self.z0_nn(hidden) + params1 = self.z1_nn(hidden) + t = t.bool().unsqueeze(-1) + params = [torch.where(t, p1, p0) for p0, p1 in zip(params0, params1)] + return dist.Normal(*params).to_event(1) + + +class TraceCausalEffect_ELBO(Trace_ELBO): + """ + Loss function for training a :class:`CEVAE`. + From [1], the CEVAE objective (to maximize) is:: + + -loss = ELBO + log q(t|x) + log q(y|t,x) + """ + + def _differentiable_loss_particle(self, model_trace, guide_trace): + # Construct -ELBO part. + blocked_names = [ + name + for name, site in guide_trace.nodes.items() + if site["type"] == "sample" and site["is_observed"] + ] + blocked_guide_trace = guide_trace.copy() + for name in blocked_names: + del blocked_guide_trace.nodes[name] + loss, surrogate_loss = super()._differentiable_loss_particle( + model_trace, blocked_guide_trace + ) + + # Add log q terms. + for name in blocked_names: + log_q = guide_trace.nodes[name]["log_prob_sum"] + loss = loss - torch_item(log_q) + surrogate_loss = surrogate_loss - log_q + + return loss, surrogate_loss + + @torch.no_grad() + def loss(self, model, guide, *args, **kwargs): + return torch_item(self.differentiable_loss(model, guide, *args, **kwargs)) + + +class CEVAE(nn.Module): + """ + Main class implementing a Causal Effect VAE [1]. This assumes a graphical model + + .. graphviz:: :graphviz_dot: neato + + digraph { + Z [pos="1,2!",style=filled]; + X [pos="2,1!"]; + y [pos="1,0!"]; + t [pos="0,1!"]; + Z -> X; + Z -> t; + Z -> y; + t -> y; + } + + where `t` is a binary treatment variable, `y` is an outcome, `Z` is + an unobserved confounder, and `X` is a noisy function of the hidden + confounder `Z`. + + Example:: + + cevae = CEVAE(feature_dim=5) + cevae.fit(x_train, t_train, y_train) + ite = cevae.ite(x_test) # individual treatment effect + ate = ite.mean() # average treatment effect + + :ivar Model ~CEVAE.model: Generative model. + :ivar Guide ~CEVAE.guide: Inference model. + :param int feature_dim: Dimension of the feature space `x`. + :param str outcome_dist: One of: "bernoulli" (default), "exponential", "laplace", + "normal", "studentt". + :param int latent_dim: Dimension of the latent variable `z`. + Defaults to 20. + :param int hidden_dim: Dimension of hidden layers of fully connected + networks. Defaults to 200. + :param int num_layers: Number of hidden layers in fully connected networks. + :param int num_samples: Default number of samples for the :meth:`ite` + method. Defaults to 100. + """ + + def __init__( + self, + feature_dim, + outcome_dist="bernoulli", + latent_dim=20, + hidden_dim=200, + num_layers=3, + num_samples=100, + ): + config = dict( + feature_dim=feature_dim, + latent_dim=latent_dim, + hidden_dim=hidden_dim, + num_layers=num_layers, + num_samples=num_samples, + ) + for name, size in config.items(): + if not (isinstance(size, int) and size > 0): + raise ValueError("Expected {} > 0 but got {}".format(name, size)) + config["outcome_dist"] = outcome_dist + self.feature_dim = feature_dim + self.num_samples = num_samples + + super().__init__() + self.model = Model(config) + self.guide = Guide(config) + + def fit( + self, + x, + t, + y, + num_epochs=100, + batch_size=100, + learning_rate=1e-3, + learning_rate_decay=0.1, + weight_decay=1e-4, + log_every=100, + ): + """ + Train using :class:`~pyro.infer.svi.SVI` with the + :class:`TraceCausalEffect_ELBO` loss. + + :param ~torch.Tensor x: + :param ~torch.Tensor t: + :param ~torch.Tensor y: + :param int num_epochs: Number of training epochs. Defaults to 100. + :param int batch_size: Batch size. Defaults to 100. + :param float learning_rate: Learning rate. Defaults to 1e-3. + :param float learning_rate_decay: Learning rate decay over all epochs; + the per-step decay rate will depend on batch size and number of epochs + such that the initial learning rate will be ``learning_rate`` and the final + learning rate will be ``learning_rate * learning_rate_decay``. + Defaults to 0.1. + :param float weight_decay: Weight decay. Defaults to 1e-4. + :param int log_every: Log loss each this-many steps. If zero, + do not log loss. Defaults to 100. + :return: list of epoch losses + """ + assert x.dim() == 2 and x.size(-1) == self.feature_dim + assert t.shape == x.shape[:1] + assert y.shape == y.shape[:1] + self.whiten = PreWhitener(x) + + dataset = TensorDataset(x, t, y) + dataloader = DataLoader( + dataset, + batch_size=batch_size, + shuffle=True, + generator=torch.Generator(device=x.device), + ) + logger.info("Training with {} minibatches per epoch".format(len(dataloader))) + num_steps = num_epochs * len(dataloader) + optim = ClippedAdam( + { + "lr": learning_rate, + "weight_decay": weight_decay, + "lrd": learning_rate_decay ** (1 / num_steps), + } + ) + svi = SVI(self.model, self.guide, optim, TraceCausalEffect_ELBO()) + losses = [] + for epoch in range(num_epochs): + for x, t, y in dataloader: + x = self.whiten(x) + loss = svi.step(x, t, y, size=len(dataset)) / len(dataset) + if log_every and len(losses) % log_every == 0: + logger.debug( + "step {: >5d} loss = {:0.6g}".format(len(losses), loss) + ) + assert not torch_isnan(loss) + losses.append(loss) + return losses + + @torch.no_grad() + def ite(self, x, num_samples=None, batch_size=None): + r""" + Computes Individual Treatment Effect for a batch of data ``x``. + + .. math:: + + ITE(x) = \mathbb E\bigl[ \mathbf y \mid \mathbf X=x, do(\mathbf t=1) \bigr] + - \mathbb E\bigl[ \mathbf y \mid \mathbf X=x, do(\mathbf t=0) \bigr] + + This has complexity ``O(len(x) * num_samples ** 2)``. + + :param ~torch.Tensor x: A batch of data. + :param int num_samples: The number of monte carlo samples. + Defaults to ``self.num_samples`` which defaults to ``100``. + :param int batch_size: Batch size. Defaults to ``len(x)``. + :return: A ``len(x)``-sized tensor of estimated effects. + :rtype: ~torch.Tensor + """ + if num_samples is None: + num_samples = self.num_samples + if not torch._C._get_tracing_state(): + assert x.dim() == 2 and x.size(-1) == self.feature_dim + + dataloader = [x] if batch_size is None else DataLoader(x, batch_size=batch_size) + logger.info("Evaluating {} minibatches".format(len(dataloader))) + result = [] + for x in dataloader: + x = self.whiten(x) + with pyro.plate("num_particles", num_samples, dim=-2): + with poutine.trace() as tr, poutine.block(hide=["y", "t"]): + self.guide(x) + with poutine.do(data=dict(t=torch.zeros(()))): + y0 = poutine.replay(self.model.y_mean, tr.trace)(x) + with poutine.do(data=dict(t=torch.ones(()))): + y1 = poutine.replay(self.model.y_mean, tr.trace)(x) + ite = (y1 - y0).mean(0) + if not torch._C._get_tracing_state(): + logger.debug("batch ate = {:0.6g}".format(ite.mean())) + result.append(ite) + return torch.cat(result) + + def to_script_module(self): + """ + Compile this module using :func:`torch.jit.trace_module` , + assuming self has already been fit to data. + + :return: A traced version of self with an :meth:`ite` method. + :rtype: torch.jit.ScriptModule + """ + self.train(False) + fake_x = torch.randn(2, self.feature_dim) + with pyro.validation_enabled(False): + # Disable check_trace due to nondeterministic nodes. + result = torch.jit.trace_module(self, {"ite": (fake_x,)}, check_trace=False) + return result diff --git a/pyro/source/pyro/contrib/conjugate/__init__.py b/pyro/source/pyro/contrib/conjugate/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/pyro/contrib/conjugate/infer.py b/pyro/source/pyro/contrib/conjugate/infer.py new file mode 100644 index 0000000000000000000000000000000000000000..e1332eb652c26bf88f94e941116bbdc2fefc6cb6 --- /dev/null +++ b/pyro/source/pyro/contrib/conjugate/infer.py @@ -0,0 +1,244 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from collections import defaultdict + +import torch + +import pyro.distributions as dist +from pyro import poutine +from pyro.distributions.util import sum_leftmost +from pyro.poutine.messenger import Messenger +from pyro.poutine.util import site_is_subsample + + +def _make_cls(base, static_attrs, instance_attrs, parent_linkage=None): + r""" + Dynamically create classes named `_ + base.__name__`, which extend the + base class with other optional instance and class attributes, and have + a custom `.expand` method to propagate these attributes on expanded + instances. + + :param cls base: Base class. + :param dict static_attrs: static attributes to add to class. + :param dict instance_attrs: instance attributes for initialization. + :param str parent_linkage: attribute in the parent class that holds + a reference to the distribution class. + :return cls: dynamically generated class. + """ + + def _expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(cls, _instance) + for attr in instance_attrs: + setattr(new, attr, getattr(self, attr)) + if parent_linkage: + setattr(new.parent, parent_linkage, new) + return base.expand(self, batch_shape, _instance=new) + + name = "_" + base.__name__ + cls = type(name, (base,), instance_attrs) + for k, v in static_attrs.items(): + setattr(cls, k, v) + cls.expand = _expand + return cls + + +def _latent(base, parent): + return _make_cls( + base, {"collapsible": True}, {"site_name": None, "parent": parent}, "_latent" + ) + + +def _conditional(base, parent): + return _make_cls( + base, {"marginalize_latent": True}, {"parent": parent}, "_conditional" + ) + + +def _compound(base, parent): + return _make_cls(base, {}, {"parent": parent}) + + +class BetaBinomialPair: + def __init__(self): + self._latent = None + self._conditional = None + + def latent(self, *args, **kwargs): + self._latent = _latent(dist.Beta, parent=self)(*args, **kwargs) + return self._latent + + def conditional(self, *args, **kwargs): + self._conditional = _conditional(dist.Binomial, parent=self)(*args, **kwargs) + return self._conditional + + def posterior(self, obs): + concentration1 = self._latent.concentration1 + concentration0 = self._latent.concentration0 + total_count = self._conditional.total_count + reduce_dims = len(obs.size()) - len(concentration1.size()) + # Unexpand total_count to have the same shape as concentration0. + # Raise exception if this isn't possible. + total_count = sum_leftmost(total_count, reduce_dims) + summed_obs = sum_leftmost(obs, reduce_dims) + return dist.Beta( + concentration1 + summed_obs, + total_count + concentration0 - summed_obs, + validate_args=self._latent._validate_args, + ) + + def compound(self): + return _compound(dist.BetaBinomial, parent=self)( + concentration1=self._latent.concentration1, + concentration0=self._latent.concentration0, + total_count=self._conditional.total_count, + ) + + +class GammaPoissonPair: + def __init__(self): + self._latent = None + self._conditional = None + + def latent(self, *args, **kwargs): + self._latent = _latent(dist.Gamma, parent=self)(*args, **kwargs) + return self._latent + + def conditional(self, *args, **kwargs): + self._conditional = _conditional(dist.Poisson, parent=self)(*args, **kwargs) + return self._conditional + + def posterior(self, obs): + concentration = self._latent.concentration + rate = self._latent.rate + reduce_dims = len(obs.size()) - len(rate.size()) + num_obs = obs.shape[:reduce_dims].numel() + summed_obs = sum_leftmost(obs, reduce_dims) + return dist.Gamma(concentration + summed_obs, rate + num_obs) + + def compound(self): + return _compound(dist.GammaPoisson, parent=self)( + concentration=self._latent.concentration, rate=self._latent.rate + ) + + +class UncollapseConjugateMessenger(Messenger): + r""" + Replay regular sample sites in addition to uncollapsing any collapsed + conjugate sites. + """ + + def __init__(self, trace): + """ + :param trace: a trace whose values should be reused + + Constructor. + Stores trace in an attribute. + """ + self.trace = trace + super().__init__() + + def _pyro_sample(self, msg): + is_collapsible = getattr(msg["fn"], "collapsible", False) + # uncollapse conjugate sites. + if is_collapsible: + conj_node, parent = None, None + for site_name in self.trace.observation_nodes + self.trace.stochastic_nodes: + parent = getattr(self.trace.nodes[site_name]["fn"], "parent", None) + if parent is not None and parent._latent.site_name == msg["name"]: + conj_node = self.trace.nodes[site_name] + break + assert ( + conj_node is not None + ), "Collapsible latent site `{}` with no corresponding conjugate site.".format( + msg["name"] + ) + msg["fn"] = parent.posterior(conj_node["value"]) + msg["value"] = msg["fn"].sample() + # regular replay behavior. + else: + name = msg["name"] + if name in self.trace: + guide_msg = self.trace.nodes[name] + if msg["is_observed"]: + return None + if guide_msg["type"] != "sample": + raise RuntimeError("site {} must be sample in trace".format(name)) + msg["done"] = True + msg["value"] = guide_msg["value"] + msg["infer"] = guide_msg["infer"] + + +def uncollapse_conjugate(fn=None, trace=None): + r""" + This is similar to :function:`~pyro.poutine.replay` poutine, but in addition to + replaying the values at sample sites from the ``trace`` in the original callable + ``fn`` when the same sites are sampled, this also "uncollapses" any observed + compound distributions (defined in :module:`pyro.distributions.conjugate`) + by sampling the originally collapsed parameter values from its posterior distribution + followed by observing the data with the sampled parameter values. + """ + msngr = UncollapseConjugateMessenger(trace) + return msngr(fn) if fn is not None else msngr + + +class CollapseConjugateMessenger(Messenger): + def _pyro_sample(self, msg): + is_collapsible = getattr(msg["fn"], "collapsible", False) + marginalize_latent = getattr(msg["fn"], "marginalize_latent", False) + if is_collapsible: + msg["fn"].site_name = msg["name"] + msg["stop"] = True + elif marginalize_latent: + msg["fn"] = msg["fn"].parent.compound() + else: + return + + +def collapse_conjugate(fn=None): + r""" + This replaces a latent-observed pair by collapsing the latent site + (whose distribution has attribute `collapsible=True`), and replacing the + observed site (whose distribution has attribute `marginalize_latent=True`) + with a compound probability distribution that marginalizes out the latent + site. + """ + msngr = CollapseConjugateMessenger() + return msngr(fn) if fn is not None else msngr + + +def posterior_replay(model, posterior_samples, *args, **kwargs): + r""" + Given a model and samples from the posterior (potentially with conjugate sites + collapsed), return a `dict` of samples from the posterior with conjugate sites + uncollapsed. Note that this can also be used to generate samples from the + posterior predictive distribution. + + :param model: Python callable. + :param dict posterior_samples: posterior samples keyed by site name. + :param args: arguments to `model`. + :param kwargs: keyword arguments to `model`. + :return: `dict` of samples from the posterior. + """ + posterior_samples = posterior_samples.copy() + num_samples = kwargs.pop("num_samples", None) + assert ( + posterior_samples or num_samples + ), "`num_samples` must be provided if `posterior_samples` is empty." + if num_samples is None: + num_samples = list(posterior_samples.values())[0].shape[0] + + return_samples = defaultdict(list) + for i in range(num_samples): + conditioned_nodes = {k: v[i] for k, v in posterior_samples.items()} + collapsed_trace = poutine.trace( + poutine.condition(collapse_conjugate(model), conditioned_nodes) + ).get_trace(*args, **kwargs) + trace = poutine.trace(uncollapse_conjugate(model, collapsed_trace)).get_trace( + *args, **kwargs + ) + for name, site in trace.iter_stochastic_nodes(): + if not site_is_subsample(site): + return_samples[name].append(site["value"]) + + return {k: torch.stack(v) for k, v in return_samples.items()} diff --git a/pyro/source/pyro/contrib/easyguide/__init__.py b/pyro/source/pyro/contrib/easyguide/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d26c63c9cf98f06dd407fb974dc497ba672322e3 --- /dev/null +++ b/pyro/source/pyro/contrib/easyguide/__init__.py @@ -0,0 +1,9 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from pyro.contrib.easyguide.easyguide import EasyGuide, easy_guide + +__all__ = [ + "EasyGuide", + "easy_guide", +] diff --git a/pyro/source/pyro/contrib/easyguide/easyguide.py b/pyro/source/pyro/contrib/easyguide/easyguide.py new file mode 100644 index 0000000000000000000000000000000000000000..6fced7dc588a3c1e5fcef57e0c620f878a1b2e09 --- /dev/null +++ b/pyro/source/pyro/contrib/easyguide/easyguide.py @@ -0,0 +1,344 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import re +import weakref +from abc import ABCMeta, abstractmethod +from contextlib import ExitStack + +import torch +from torch.distributions import biject_to + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +import pyro.poutine.runtime as runtime +from pyro.distributions.util import broadcast_shape, sum_rightmost +from pyro.infer.autoguide.guides import prototype_hide_fn +from pyro.infer.autoguide.initialization import InitMessenger +from pyro.nn.module import PyroModule, PyroParam + + +class _EasyGuideMeta(type(PyroModule), ABCMeta): + pass + + +class EasyGuide(PyroModule, metaclass=_EasyGuideMeta): + """ + Base class for "easy guides", which are more flexible than + :class:`~pyro.infer.AutoGuide` s, but are easier to write than raw Pyro guides. + + Derived classes should define a :meth:`guide` method. This :meth:`guide` + method can combine ordinary guide statements (e.g. ``pyro.sample`` and + ``pyro.param``) with the following special statements: + + - ``group = self.group(...)`` selects multiple ``pyro.sample`` sites in the + model. See :class:`Group` for subsequent methods. + - ``with self.plate(...): ...`` should be used instead of ``pyro.plate``. + - ``self.map_estimate(...)`` uses a ``Delta`` guide for a single site. + + Derived classes may also override the :meth:`init` method to provide custom + initialization for models sites. + + :param callable model: A Pyro model. + """ + + def __init__(self, model): + super().__init__() + self._pyro_name = type(self).__name__ + self._model = (model,) + self.prototype_trace = None + self.frames = {} + self.groups = {} + self.plates = {} + + @property + def model(self): + return self._model[0] + + def _setup_prototype(self, *args, **kwargs): + # run the model so we can inspect its structure + model = poutine.block(InitMessenger(self.init)(self.model), prototype_hide_fn) + self.prototype_trace = poutine.block(poutine.trace(model).get_trace)( + *args, **kwargs + ) + + for name, site in self.prototype_trace.iter_stochastic_nodes(): + for frame in site["cond_indep_stack"]: + if not frame.vectorized: + raise NotImplementedError( + "EasyGuide does not support sequential pyro.plate" + ) + self.frames[frame.name] = frame + + @abstractmethod + def guide(self, *args, **kargs): + """ + Guide implementation, to be overridden by user. + """ + raise NotImplementedError + + def init(self, site): + """ + Model initialization method, may be overridden by user. + + This should input a site and output a valid sample from that site. + The default behavior is to draw a random sample:: + + return site["fn"]() + + For other possible initialization functions see + http://docs.pyro.ai/en/stable/infer.autoguide.html#module-pyro.infer.autoguide.initialization + """ + return site["fn"]() + + def forward(self, *args, **kwargs): + """ + Runs the guide. This is typically used by inference algorithms. + + .. note:: This method is used internally by :class:`~torch.nn.Module`. + Users should instead use :meth:`~torch.nn.Module.__call__`. + """ + if self.prototype_trace is None: + self._setup_prototype(*args, **kwargs) + result = self.guide(*args, **kwargs) + self.plates.clear() + return result + + def plate( + self, name, size=None, subsample_size=None, subsample=None, *args, **kwargs + ): + """ + A wrapper around :class:`pyro.plate` to allow `EasyGuide` to + automatically construct plates. You should use this rather than + :class:`pyro.plate` inside your :meth:`guide` implementation. + """ + if name not in self.plates: + self.plates[name] = pyro.plate( + name, size, subsample_size, subsample, *args, **kwargs + ) + return self.plates[name] + + def group(self, match=".*"): + """ + Select a :class:`Group` of model sites for joint guidance. + + :param str match: A regex string matching names of model sample sites. + :return: A group of model sites. + :rtype: Group + """ + if match not in self.groups: + sites = [ + site + for name, site in self.prototype_trace.iter_stochastic_nodes() + if re.match(match, name) + ] + if not sites: + raise ValueError( + "EasyGuide.group() pattern {} matched no model sites".format( + repr(match) + ) + ) + self.groups[match] = Group(self, sites) + return self.groups[match] + + def map_estimate(self, name): + """ + Construct a maximum a posteriori (MAP) guide using Delta distributions. + + :param str name: The name of a model sample site. + :return: A sampled value. + :rtype: torch.Tensor + """ + site = self.prototype_trace.nodes[name] + fn = site["fn"] + event_dim = fn.event_dim + init_needed = not hasattr(self, name) + if init_needed: + init_value = site["value"].detach() + with ExitStack() as stack: + for frame in site["cond_indep_stack"]: + plate = self.plate(frame.name) + if plate not in runtime._PYRO_STACK: + stack.enter_context(plate) + elif init_needed and plate.subsample_size < plate.size: + # Repeat the init_value to full size. + dim = plate.dim - event_dim + assert init_value.size(dim) == plate.subsample_size + ind = torch.arange(plate.size, device=init_value.device) + ind = ind % plate.subsample_size + init_value = init_value.index_select(dim, ind) + if init_needed: + setattr(self, name, PyroParam(init_value, fn.support, event_dim)) + value = getattr(self, name) + return pyro.sample(name, dist.Delta(value, event_dim=event_dim)) + + +class Group: + """ + An autoguide helper to match a group of model sites. + + :ivar torch.Size event_shape: The total flattened concatenated shape of all + matching sample sites in the model. + :ivar list prototype_sites: A list of all matching sample sites in a + prototype trace of the model. + :param EasyGuide guide: An easyguide instance. + :param list sites: A list of model sites. + """ + + def __init__(self, guide, sites): + assert isinstance(sites, list) + assert sites + self._guide = weakref.ref(guide) + self.prototype_sites = sites + self._site_sizes = {} + self._site_batch_shapes = {} + + # A group is in a frame only if all its sample sites are in that frame. + # Thus a group can be subsampled only if all its sites can be subsampled. + self.common_frames = frozenset.intersection( + *( + frozenset(f for f in site["cond_indep_stack"] if f.vectorized) + for site in sites + ) + ) + rightmost_common_dim = -float("inf") + if self.common_frames: + rightmost_common_dim = max(f.dim for f in self.common_frames) + + # Compute flattened concatenated event_shape and split batch_shape into + # a common batch_shape (which can change each SVI step due to + # subsampling) and site batch_shapes (which must remain constant size). + for site in sites: + site_event_numel = torch.Size(site["fn"].event_shape).numel() + site_batch_shape = list(site["fn"].batch_shape) + for f in self.common_frames: + # Consider this dim part of the common_batch_shape. + site_batch_shape[f.dim] = 1 + while site_batch_shape and site_batch_shape[0] == 1: + site_batch_shape = site_batch_shape[1:] + if len(site_batch_shape) > -rightmost_common_dim: + raise ValueError( + "Group expects all per-site plates to be right of all common plates, " + "but found a per-site plate {} on left at site {}".format( + -len(site_batch_shape), repr(site["name"]) + ) + ) + site_batch_shape = torch.Size(site_batch_shape) + self._site_batch_shapes[site["name"]] = site_batch_shape + self._site_sizes[site["name"]] = site_batch_shape.numel() * site_event_numel + self.event_shape = torch.Size([sum(self._site_sizes.values())]) + + def __getstate__(self): + state = getattr(super(), "__getstate__", lambda: self.__dict__)().copy() + state["_guide"] = state["_guide"]() # weakref -> ref + return state + + def __setstate__(self, state): + self.__dict__.update(state) + self._guide = weakref.ref(self._guide) # ref -> weakref + + @property + def guide(self): + return self._guide() + + def sample(self, guide_name, fn, infer=None): + """ + Wrapper around ``pyro.sample()`` to create a single auxiliary sample + site and then unpack to multiple sample sites for model replay. + + :param str guide_name: The name of the auxiliary guide site. + :param callable fn: A distribution with shape ``self.event_shape``. + :param dict infer: Optional inference configuration dict. + :returns: A pair ``(guide_z, model_zs)`` where ``guide_z`` is the + single concatenated blob and ``model_zs`` is a dict mapping + site name to constrained model sample. + :rtype: tuple + """ + # Sample a packed tensor. + if fn.event_shape != self.event_shape: + raise ValueError( + "Invalid fn.event_shape for group: expected {}, actual {}".format( + tuple(self.event_shape), tuple(fn.event_shape) + ) + ) + if infer is None: + infer = {} + infer["is_auxiliary"] = True + guide_z = pyro.sample(guide_name, fn, infer=infer) + common_batch_shape = guide_z.shape[:-1] + + model_zs = {} + pos = 0 + for site in self.prototype_sites: + name = site["name"] + fn = site["fn"] + + # Extract slice from packed sample. + size = self._site_sizes[name] + batch_shape = broadcast_shape( + common_batch_shape, self._site_batch_shapes[name] + ) + unconstrained_z = guide_z[..., pos : pos + size] + unconstrained_z = unconstrained_z.reshape(batch_shape + fn.event_shape) + pos += size + + # Transform to constrained space. + transform = biject_to(fn.support) + z = transform(unconstrained_z) + log_density = transform.inv.log_abs_det_jacobian(z, unconstrained_z) + log_density = sum_rightmost( + log_density, log_density.dim() - z.dim() + fn.event_dim + ) + delta_dist = dist.Delta(z, log_density=log_density, event_dim=fn.event_dim) + + # Replay model sample statement. + with ExitStack() as stack: + for frame in site["cond_indep_stack"]: + plate = self.guide.plate(frame.name) + if plate not in runtime._PYRO_STACK: + stack.enter_context(plate) + model_zs[name] = pyro.sample(name, delta_dist) + + return guide_z, model_zs + + def map_estimate(self): + """ + Construct a maximum a posteriori (MAP) guide using Delta distributions. + + :return: A dict mapping model site name to sampled value. + :rtype: dict + """ + return { + site["name"]: self.guide.map_estimate(site["name"]) + for site in self.prototype_sites + } + + +def easy_guide(model): + """ + Convenience decorator to create an :class:`EasyGuide` . + The following are equivalent:: + + # Version 1. Decorate a function. + @easy_guide(model) + def guide(self, foo, bar): + return my_guide(foo, bar) + + # Version 2. Create and instantiate a subclass of EasyGuide. + class Guide(EasyGuide): + def guide(self, foo, bar): + return my_guide(foo, bar) + guide = Guide(model) + + Note ``@easy_guide`` wrappers cannot be pickled; to build a guide that can + be pickled, instead subclass from :class:`EasyGuide`. + + :param callable model: a Pyro model. + """ + + def decorator(fn): + Guide = type(fn.__name__, (EasyGuide,), {"guide": fn}) + return Guide(model) + + return decorator diff --git a/pyro/source/pyro/contrib/epidemiology/__init__.py b/pyro/source/pyro/contrib/epidemiology/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..bf5b7f10e19b4054176e50b9490cae23c1891695 --- /dev/null +++ b/pyro/source/pyro/contrib/epidemiology/__init__.py @@ -0,0 +1,15 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from pyro.distributions.coalescent import bio_phylo_to_times + +from .compartmental import CompartmentalModel +from .distributions import beta_binomial_dist, binomial_dist, infection_dist + +__all__ = [ + "CompartmentalModel", + "beta_binomial_dist", + "binomial_dist", + "bio_phylo_to_times", + "infection_dist", +] diff --git a/pyro/source/pyro/contrib/epidemiology/compartmental.py b/pyro/source/pyro/contrib/epidemiology/compartmental.py new file mode 100644 index 0000000000000000000000000000000000000000..67cac5338ab3f32f0c93894a63ecad158ee367f2 --- /dev/null +++ b/pyro/source/pyro/contrib/epidemiology/compartmental.py @@ -0,0 +1,1249 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import functools +import logging +import operator +import re +import warnings +from abc import ABC, abstractmethod +from collections import OrderedDict +from contextlib import ExitStack, contextmanager +from functools import reduce +from timeit import default_timer + +import torch +from torch.distributions import biject_to, constraints +from torch.distributions.utils import lazy_property + +import pyro.distributions as dist +import pyro.distributions.hmm +import pyro.poutine as poutine +from pyro.distributions.transforms import HaarTransform +from pyro.infer import ( + MCMC, + NUTS, + SVI, + JitTrace_ELBO, + SMCFilter, + Trace_ELBO, + infer_discrete, +) +from pyro.infer.autoguide import ( + AutoLowRankMultivariateNormal, + AutoMultivariateNormal, + AutoNormal, + init_to_generated, + init_to_value, +) +from pyro.infer.mcmc import ArrowheadMassMatrix +from pyro.infer.reparam import HaarReparam, SplitReparam +from pyro.infer.smcfilter import SMCFailed +from pyro.infer.util import is_validation_enabled +from pyro.optim import ClippedAdam +from pyro.poutine.util import site_is_factor, site_is_subsample +from pyro.util import warn_if_nan + +from .distributions import ( + set_approx_log_prob_tol, + set_approx_sample_thresh, + set_relaxed_distributions, +) +from .util import align_samples, cat2, clamp, quantize, quantize_enumerate + +logger = logging.getLogger(__name__) + + +def _require_double_precision(): + if torch.get_default_dtype() != torch.float64: + warnings.warn( + "CompartmentalModel is unstable for dtypes less than torch.float64; " + "try torch.set_default_dtype(torch.float64)", + RuntimeWarning, + ) + + +@contextmanager +def _disallow_latent_variables(section_name): + if not is_validation_enabled(): + yield + return + + with poutine.trace() as tr: + yield + for name, site in tr.trace.nodes.items(): + if site["type"] == "sample" and not site["is_observed"]: + raise NotImplementedError( + "{} contained latent variable {}".format(section_name, name) + ) + + +class CompartmentalModel(ABC): + """ + Abstract base class for discrete-time discrete-value stochastic + compartmental models. + + Derived classes must implement methods :meth:`initialize` and + :meth:`transition`. Derived classes may optionally implement + :meth:`global_model`, :meth:`compute_flows`, and :meth:`heuristic`. + + Example usage:: + + # First implement a concrete derived class. + class MyModel(CompartmentalModel): + def __init__(self, ...): ... + def global_model(self): ... + def initialize(self, params): ... + def transition(self, params, state, t): ... + + # Run inference to fit the model to data. + model = MyModel(...) + model.fit_svi(num_samples=100) # or .fit_mcmc(...) + R0 = model.samples["R0"] # An example parameter. + print("R0 = {:0.3g} \u00b1 {:0.3g}".format(R0.mean(), R0.std())) + + # Predict latent variables. + samples = model.predict() + + # Forecast forward. + samples = model.predict(forecast=30) + + # You can assess future interventions (applied after ``duration``) by + # storing them as attributes that are read by your derived methods. + model.my_intervention = False + samples1 = model.predict(forecast=30) + model.my_intervention = True + samples2 = model.predict(forecast=30) + effect = samples2["my_result"].mean() - samples1["my_result"].mean() + print("average effect = {:0.3g}".format(effect)) + + An example workflow is to use cheaper approximate inference while finding + good model structure and priors, then move to more accurate but more + expensive inference once the model is plausible. + + 1. Start with ``.fit_svi(guide_rank=0, num_steps=2000)`` for cheap + inference while you search for a good model. + 2. Additionally infer long-range correlations by moving to a low-rank + multivariate normal guide via ``.fit_svi(guide_rank=None, + num_steps=5000)``. + 3. Optionally additionally infer non-Gaussian posterior by moving to the + more expensive (but still approximate via moment matching) + ``.fit_mcmc(num_quant_bins=1, num_samples=10000, num_chains=2)``. + 4. Optionally improve fit around small counts by moving the the more + expensive enumeration-based algorithm ``.fit_mcmc(num_quant_bins=4, + num_samples=10000, num_chains=2)`` (GPU recommended). + + :ivar dict samples: Dictionary of posterior samples. + :param list compartments: A list of strings of compartment names. + :param int duration: The number of discrete time steps in this model. + :param population: Either the total population of a single-region model or + a tensor of each region's population in a regional model. + :type population: int or torch.Tensor + :param tuple approximate: Names of compartments for which pointwise + approximations should be provided in :meth:`transition`, e.g. if you + specify ``approximate=("I")`` then the ``state["I_approx"]`` will be a + continuous-valued non-enumerated point estimate of ``state["I"]``. + Approximations are useful to reduce computational cost. Approximations + are continuous-valued with support ``(-0.5, population + 0.5)``. + """ + + def __init__(self, compartments, duration, population, *, approximate=()): + super().__init__() + + assert isinstance(duration, int) + assert duration >= 1 + self.duration = duration + + if isinstance(population, torch.Tensor): + assert population.dim() == 1 + assert (population >= 1).all() + self.is_regional = True + self.max_plate_nesting = 2 # [time, region] + else: + assert isinstance(population, int) + assert population >= 2 + self.is_regional = False + self.max_plate_nesting = 1 # [time] + self.population = population + + compartments = tuple(compartments) + assert all(isinstance(name, str) for name in compartments) + assert len(compartments) == len(set(compartments)) + self.compartments = compartments + + assert isinstance(approximate, tuple) + assert all(name in compartments for name in approximate) + self.approximate = approximate + + # Inference state. + self.samples = {} + self._clear_plates() + + @property + def time_plate(self): + """ + A ``pyro.plate`` for the time dimension. + """ + if self._time_plate is None: + self._time_plate = pyro.plate( + "time", self.duration, dim=-2 if self.is_regional else -1 + ) + return self._time_plate + + @property + def region_plate(self): + """ + Either a ``pyro.plate`` or a trivial ``ExitStack`` depending on whether + this model ``.is_regional``. + """ + if self._region_plate is None: + if self.is_regional: + self._region_plate = pyro.plate("region", len(self.population), dim=-1) + else: + self._region_plate = ExitStack() # Trivial context manager. + return self._region_plate + + def _clear_plates(self): + self._time_plate = None + self._region_plate = None + + @lazy_property + def full_mass(self): + """ + A list of a single tuple of the names of global random variables. + """ + with torch.no_grad(), poutine.block(), poutine.trace() as tr: + self.global_model() + return [ + tuple( + name + for name, site in tr.trace.iter_stochastic_nodes() + if not site_is_subsample(site) + ) + ] + + @lazy_property + def series(self): + """ + A frozenset of names of sample sites that are sampled each time step. + """ + # Trace a simple invocation of .transition(). + with torch.no_grad(), poutine.block(): + params = self.global_model() + prev = self.initialize(params) + for name in self.approximate: + prev[name + "_approx"] = prev[name] + curr = prev.copy() + with poutine.trace() as tr: + self.transition(params, curr, 0) + return frozenset( + re.match("(.*)_0", name).group(1) + for name, site in tr.trace.nodes.items() + if site["type"] == "sample" + if not site_is_subsample(site) + ) + + # Overridable attributes and methods ######################################## + + def global_model(self): + """ + Samples and returns any global parameters. + + :returns: An arbitrary object of parameters (e.g. ``None`` or a tuple). + """ + return None + + # TODO Allow stochastic initialization. + @abstractmethod + def initialize(self, params): + """ + Returns initial counts in each compartment. + + :param params: The global params returned by :meth:`global_model`. + :returns: A dict mapping compartment name to initial value. + :rtype: dict + """ + raise NotImplementedError + + @abstractmethod + def transition(self, params, state, t): + """ + Forward generative process for dynamics. + + This inputs a current ``state`` and stochastically updates that + state in-place. + + Note that this method is called under multiple different + interpretations, including batched and vectorized interpretations. + During :meth:`generate` this is called to generate a single sample. + During :meth:`heuristic` this is called to generate a batch of samples + for SMC. During :meth:`fit_mcmc` this is called both in vectorized form + (vectorizing over time) and in sequential form (for a single time + step); both forms enumerate over discrete latent variables. During + :meth:`predict` this is called to forecast a batch of samples, + conditioned on posterior samples for the time interval + ``[0:duration]``. + + :param params: The global params returned by :meth:`global_model`. + :param dict state: A dictionary mapping compartment name to current + tensor value. This should be updated in-place. + :param t: A time-like index. During inference ``t`` may be either a + slice (for vectorized inference) or an integer time index. During + prediction ``t`` will be integer time index. + :type t: int or slice + """ + raise NotImplementedError + + def finalize(self, params, prev, curr): + """ + Optional method for likelihoods that depend on entire time series. + + This should be used only for non-factorizable likelihoods that couple + states across time. Factorizable likelihoods should instead be added to + the :meth:`transition` method, thereby enabling their use in + :meth:`heuristic` initialization. Since this method is called only + after the last time step, it is not used in :meth:`heuristic` + initialization. + + .. warning:: This currently does not support latent variables. + + :param params: The global params returned by :meth:`global_model`. + :param dict prev: + :param dict curr: Dictionaries mapping compartment name to tensor of + entire time series. These two parameters are offset by 1 step, + thereby making it easy to compute time series of fluxes. For + quantized inference, this uses the approximate point estimates, so + users must request any needed time series in :meth:`__init__`, e.g. + by calling ``super().__init__(..., approximate=("I", "E"))`` if + likelihood depends on the ``I`` and ``E`` time series. + """ + pass + + def compute_flows(self, prev, curr, t): + """ + Computes flows between compartments, given compartment populations + before and after time step t. + + The default implementation assumes sequential flows terminating in an + implicit compartment named "R". For example if:: + + compartment_names = ("S", "E", "I") + + the default implementation computes at time step ``t = 9``:: + + flows["S2E_9"] = prev["S"] - curr["S"] + flows["E2I_9"] = prev["E"] - curr["E"] + flows["S2E_9"] + flows["I2R_9"] = prev["I"] - curr["I"] + flows["E2I_9"] + + For more complex flows (non-sequential, branching, looping, + duplicating, etc.), users may override this method. + + :param dict state: A dictionary mapping compartment name to current + tensor value. This should be updated in-place. + :param t: A time-like index. During inference ``t`` may be either a + slice (for vectorized inference) or an integer time index. During + prediction ``t`` will be integer time index. + :type t: int or slice + :returns: A dict mapping flow name to tensor value. + :rtype: dict + """ + flows = {} + flow = 0 + for source, destin in zip(self.compartments, self.compartments[1:] + ("R",)): + flow = prev[source] - curr[source] + flow + flows["{}2{}_{}".format(source, destin, t)] = flow + return flows + + # Inference interface ######################################## + + @torch.no_grad() + @set_approx_sample_thresh(1000) + def generate(self, fixed={}): + """ + Generate data from the prior. + + :pram dict fixed: A dictionary of parameters on which to condition. + These must be top-level parentless nodes, i.e. have no + upstream stochastic dependencies. + :returns: A dictionary mapping sample site name to sampled value. + :rtype: dict + """ + fixed = {k: torch.as_tensor(v) for k, v in fixed.items()} + model = self._generative_model + model = poutine.condition(model, fixed) + trace = poutine.trace(model).get_trace() + samples = OrderedDict( + (name, site["value"]) + for name, site in trace.nodes.items() + if site["type"] == "sample" + ) + + self._concat_series(samples, trace) + return samples + + def fit_svi( + self, + *, + num_samples=100, + num_steps=2000, + num_particles=32, + learning_rate=0.1, + learning_rate_decay=0.01, + betas=(0.8, 0.99), + haar=True, + init_scale=0.01, + guide_rank=0, + jit=False, + log_every=200, + **options, + ): + """ + Runs stochastic variational inference to generate posterior samples. + + This runs :class:`~pyro.infer.svi.SVI`, setting the ``.samples`` + attribute on completion. + + This approximate inference method is useful for quickly iterating on + probabilistic models. + + :param int num_samples: Number of posterior samples to draw from the + trained guide. Defaults to 100. + :param int num_steps: Number of :class:`~pyro.infer.svi.SVI` steps. + :param int num_particles: Number of :class:`~pyro.infer.svi.SVI` + particles per step. + :param int learning_rate: Learning rate for the + :class:`~pyro.optim.clipped_adam.ClippedAdam` optimizer. + :param int learning_rate_decay: Learning rate for the + :class:`~pyro.optim.clipped_adam.ClippedAdam` optimizer. Note this + is decay over the entire schedule, not per-step decay. + :param tuple betas: Momentum parameters for the + :class:`~pyro.optim.clipped_adam.ClippedAdam` optimizer. + :param bool haar: Whether to use a Haar wavelet reparameterizer. + :param int guide_rank: Rank of the auto normal guide. If zero (default) + use an :class:`~pyro.infer.autoguide.AutoNormal` guide. If a + positive integer or None, use an + :class:`~pyro.infer.autoguide.AutoLowRankMultivariateNormal` guide. + If the string "full", use an + :class:`~pyro.infer.autoguide.AutoMultivariateNormal` guide. These + latter two require more ``num_steps`` to fit. + :param float init_scale: Initial scale of the + :class:`~pyro.infer.autoguide.AutoLowRankMultivariateNormal` guide. + :param bool jit: Whether to use a jit compiled ELBO. + :param int log_every: How often to log svi losses. + :param int heuristic_num_particles: Passed to :meth:`heuristic` as + ``num_particles``. Defaults to 1024. + :returns: Time series of SVI losses (useful to diagnose convergence). + :rtype: list + """ + # Save configuration for .predict(). + self.relaxed = True + self.num_quant_bins = 1 + + # Setup Haar wavelet transform. + if haar: + time_dim = -2 if self.is_regional else -1 + dims = {"auxiliary": time_dim} + supports = {"auxiliary": constraints.interval(-0.5, self.population + 0.5)} + for name, (fn, is_regional) in self._non_compartmental.items(): + dims[name] = time_dim - fn.event_dim + supports[name] = fn.support + haar = _HaarSplitReparam(0, self.duration, dims, supports) + + # Heuristically initialize to feasible latents. + heuristic_options = { + k.replace("heuristic_", ""): options.pop(k) + for k in list(options) + if k.startswith("heuristic_") + } + assert not options, "unrecognized options: {}".format(", ".join(options)) + init_strategy = self._heuristic(haar, **heuristic_options) + + # Configure variational inference. + logger.info("Running inference...") + model = self._relaxed_model + if haar: + model = haar.reparam(model) + if guide_rank == 0: + guide = AutoNormal(model, init_loc_fn=init_strategy, init_scale=init_scale) + elif guide_rank == "full": + guide = AutoMultivariateNormal( + model, init_loc_fn=init_strategy, init_scale=init_scale + ) + elif guide_rank is None or isinstance(guide_rank, int): + guide = AutoLowRankMultivariateNormal( + model, init_loc_fn=init_strategy, init_scale=init_scale, rank=guide_rank + ) + else: + raise ValueError("Invalid guide_rank: {}".format(guide_rank)) + Elbo = JitTrace_ELBO if jit else Trace_ELBO + elbo = Elbo( + max_plate_nesting=self.max_plate_nesting, + num_particles=num_particles, + vectorize_particles=True, + ignore_jit_warnings=True, + ) + optim = ClippedAdam( + { + "lr": learning_rate, + "betas": betas, + "lrd": learning_rate_decay ** (1 / num_steps), + } + ) + svi = SVI(model, guide, optim, elbo) + + # Run inference. + start_time = default_timer() + losses = [] + for step in range(1 + num_steps): + loss = svi.step() / self.duration + if step % log_every == 0: + logger.info("step {} loss = {:0.4g}".format(step, loss)) + losses.append(loss) + elapsed = default_timer() - start_time + logger.info( + "SVI took {:0.1f} seconds, {:0.1f} step/sec".format( + elapsed, (1 + num_steps) / elapsed + ) + ) + + # Draw posterior samples. + with torch.no_grad(): + particle_plate = pyro.plate( + "particles", num_samples, dim=-1 - self.max_plate_nesting + ) + guide_trace = poutine.trace(particle_plate(guide)).get_trace() + model_trace = poutine.trace( + poutine.replay(particle_plate(model), guide_trace) + ).get_trace() + self.samples = { + name: site["value"] + for name, site in model_trace.nodes.items() + if site["type"] == "sample" + if not site["is_observed"] + if not site_is_subsample(site) + } + if haar: + haar.aux_to_user(self.samples) + assert all(v.size(0) == num_samples for v in self.samples.values()), { + k: tuple(v.shape) for k, v in self.samples.items() + } + + return losses + + @set_approx_log_prob_tol(0.1) + def fit_mcmc(self, **options): + r""" + Runs NUTS inference to generate posterior samples. + + This uses the :class:`~pyro.infer.mcmc.nuts.NUTS` kernel to run + :class:`~pyro.infer.mcmc.api.MCMC`, setting the ``.samples`` + attribute on completion. + + This uses an asymptotically exact enumeration-based model when + ``num_quant_bins > 1``, and a cheaper moment-matched approximate model + when ``num_quant_bins == 1``. + + :param \*\*options: Options passed to + :class:`~pyro.infer.mcmc.api.MCMC`. The remaining options are + pulled out and have special meaning. + :param int num_samples: Number of posterior samples to draw via mcmc. + Defaults to 100. + :param int max_tree_depth: (Default 5). Max tree depth of the + :class:`~pyro.infer.mcmc.nuts.NUTS` kernel. + :param full_mass: Specification of mass matrix of the + :class:`~pyro.infer.mcmc.nuts.NUTS` kernel. Defaults to full mass + over global random variables. + :param bool arrowhead_mass: Whether to treat ``full_mass`` as the head + of an arrowhead matrix versus simply as a block. Defaults to False. + :param int num_quant_bins: If greater than 1, use asymptotically exact + inference via local enumeration over this many quantization bins. + If equal to 1, use continuous-valued relaxed approximate inference. + Note that computational cost is exponential in `num_quant_bins`. + Defaults to 1 for relaxed inference. + :param bool haar: Whether to use a Haar wavelet reparameterizer. + Defaults to True. + :param int haar_full_mass: Number of low frequency Haar components to + include in the full mass matrix. If ``haar=False`` then this is + ignored. Defaults to 10. + :param int heuristic_num_particles: Passed to :meth:`heuristic` as + ``num_particles``. Defaults to 1024. + :returns: An MCMC object for diagnostics, e.g. ``MCMC.summary()``. + :rtype: ~pyro.infer.mcmc.api.MCMC + """ + _require_double_precision() + + # Parse options, saving some for use in .predict(). + num_samples = options.setdefault("num_samples", 100) + num_chains = options.setdefault("num_chains", 1) + self.num_quant_bins = options.pop("num_quant_bins", 1) + assert isinstance(self.num_quant_bins, int) + assert self.num_quant_bins >= 1 + self.relaxed = self.num_quant_bins == 1 + + # Setup Haar wavelet transform. + haar = options.pop("haar", False) + haar_full_mass = options.pop("haar_full_mass", 10) + full_mass = options.pop("full_mass", self.full_mass) + assert isinstance(haar, bool) + assert isinstance(haar_full_mass, int) and haar_full_mass >= 0 + assert isinstance(full_mass, (bool, list)) + haar_full_mass = min(haar_full_mass, self.duration) + if not haar: + haar_full_mass = 0 + if full_mass is True: + haar_full_mass = 0 # No need to split. + elif haar_full_mass >= self.duration: + full_mass = True # Effectively full mass. + haar_full_mass = 0 + if haar: + time_dim = -2 if self.is_regional else -1 + dims = {"auxiliary": time_dim} + supports = {"auxiliary": constraints.interval(-0.5, self.population + 0.5)} + for name, (fn, is_regional) in self._non_compartmental.items(): + dims[name] = time_dim - fn.event_dim + supports[name] = fn.support + haar = _HaarSplitReparam(haar_full_mass, self.duration, dims, supports) + if haar_full_mass: + assert full_mass and isinstance(full_mass, list) + full_mass = full_mass[:] + full_mass[0] += tuple(name + "_haar_split_0" for name in sorted(dims)) + + # Heuristically initialize to feasible latents. + heuristic_options = { + k.replace("heuristic_", ""): options.pop(k) + for k in list(options) + if k.startswith("heuristic_") + } + init_strategy = init_to_generated( + generate=functools.partial(self._heuristic, haar, **heuristic_options) + ) + + # Configure a kernel. + logger.info("Running inference...") + model = self._relaxed_model if self.relaxed else self._quantized_model + if haar: + model = haar.reparam(model) + kernel = NUTS( + model, + full_mass=full_mass, + init_strategy=init_strategy, + max_plate_nesting=self.max_plate_nesting, + jit_compile=options.pop("jit_compile", False), + jit_options=options.pop("jit_options", None), + ignore_jit_warnings=options.pop("ignore_jit_warnings", True), + target_accept_prob=options.pop("target_accept_prob", 0.8), + max_tree_depth=options.pop("max_tree_depth", 5), + ) + if options.pop("arrowhead_mass", False): + kernel.mass_matrix_adapter = ArrowheadMassMatrix() + + # Run mcmc. + options.setdefault("disable_validation", None) + mcmc = MCMC(kernel, **options) + mcmc.run() + self.samples = mcmc.get_samples() + if haar: + haar.aux_to_user(self.samples) + + # Unsqueeze samples to align particle dim for use in poutine.condition. + # TODO refactor to an align_samples or particle_dim kwarg to MCMC.get_samples(). + model = self._relaxed_model if self.relaxed else self._quantized_model + self.samples = align_samples( + self.samples, model, particle_dim=-1 - self.max_plate_nesting + ) + assert all( + v.size(0) == num_samples * num_chains for v in self.samples.values() + ), {k: tuple(v.shape) for k, v in self.samples.items()} + + return mcmc # E.g. so user can run mcmc.summary(). + + @torch.no_grad() + @set_approx_log_prob_tol(0.1) + @set_approx_sample_thresh(10000) + def predict(self, forecast=0): + """ + Predict latent variables and optionally forecast forward. + + This may be run only after :meth:`fit_mcmc` and draws the same + ``num_samples`` as passed to :meth:`fit_mcmc`. + + :param int forecast: The number of time steps to forecast forward. + :returns: A dictionary mapping sample site name (or compartment name) + to a tensor whose first dimension corresponds to sample batching. + :rtype: dict + """ + if self.num_quant_bins > 1: + _require_double_precision() + if not self.samples: + raise RuntimeError("Missing samples, try running .fit_mcmc() first") + + samples = self.samples + num_samples = len(next(iter(samples.values()))) + particle_plate = pyro.plate( + "particles", num_samples, dim=-1 - self.max_plate_nesting + ) + + # Sample discrete auxiliary variables conditioned on the continuous + # variables sampled by _quantized_model. This samples only time steps + # [0:duration]. Here infer_discrete runs a forward-filter + # backward-sample algorithm. + logger.info( + "Predicting latent variables for {} time steps...".format(self.duration) + ) + model = self._sequential_model + model = poutine.condition(model, samples) + model = particle_plate(model) + if not self.relaxed: + model = infer_discrete( + model, first_available_dim=-2 - self.max_plate_nesting + ) + trace = poutine.trace(model).get_trace() + samples = OrderedDict( + (name, site["value"].expand(site["fn"].shape())) + for name, site in trace.nodes.items() + if site["type"] == "sample" + if not site_is_subsample(site) + if not site_is_factor(site) + ) + assert all(v.size(0) == num_samples for v in samples.values()), { + k: tuple(v.shape) for k, v in samples.items() + } + + # Optionally forecast with the forward _generative_model. This samples + # time steps [duration:duration+forecast]. + if forecast: + logger.info("Forecasting {} steps ahead...".format(forecast)) + model = self._generative_model + model = poutine.condition(model, samples) + model = particle_plate(model) + trace = poutine.trace(model).get_trace(forecast) + samples = OrderedDict( + (name, site["value"]) + for name, site in trace.nodes.items() + if site["type"] == "sample" + if not site_is_subsample(site) + if not site_is_factor(site) + ) + + self._concat_series(samples, trace, forecast) + assert all(v.size(0) == num_samples for v in samples.values()), { + k: tuple(v.shape) for k, v in samples.items() + } + return samples + + @torch.no_grad() + @set_approx_log_prob_tol(0.1) + @set_approx_sample_thresh(100) # This is robust to gross approximation. + def heuristic(self, num_particles=1024, ess_threshold=0.5, retries=10): + """ + Finds an initial feasible guess of all latent variables, consistent + with observed data. This is needed because not all hypotheses are + feasible and HMC needs to start at a feasible solution to progress. + + The default implementation attempts to find a feasible state using + :class:`~pyro.infer.smcfilter.SMCFilter` with proprosals from the + prior. However this method may be overridden in cases where SMC + performs poorly e.g. in high-dimensional models. + + :param int num_particles: Number of particles used for SMC. + :param float ess_threshold: Effective sample size threshold for SMC. + :returns: A dictionary mapping sample site name to tensor value. + :rtype: dict + """ + # Run SMC. + model = _SMCModel(self) + guide = _SMCGuide(self) + for attempt in range(1, 1 + retries): + smc = SMCFilter( + model, + guide, + num_particles=num_particles, + ess_threshold=ess_threshold, + max_plate_nesting=self.max_plate_nesting, + ) + try: + smc.init() + for t in range(1, self.duration): + smc.step() + break + except SMCFailed as e: + if attempt == retries: + raise + logger.info("{}. Retrying...".format(e)) + continue + + # Select the most probable hypothesis. + # Note this ignores the .finalize() likelihood. + i = int(smc.state._log_weights.max(0).indices) + init = {key: value[i, 0] for key, value in smc.state.items()} + + # Fill in sample site values. + init = self.generate(init) + aux = torch.stack([init[name] for name in self.compartments], dim=0) + init["auxiliary"] = clamp(aux, min=0.5, max=self.population - 0.5) + return init + + # Internal helpers ######################################## + + def _heuristic(self, haar, **options): + with poutine.block(): + init_values = self.heuristic(**options) + assert isinstance(init_values, dict) + assert "auxiliary" in init_values, ".heuristic() did not define auxiliary value" + logger.info( + "Heuristic init: {}".format( + ", ".join( + "{}={:0.3g}".format(k, v.item()) + for k, v in sorted(init_values.items()) + if v.numel() == 1 + ) + ) + ) + return init_to_value(values=init_values, fallback=None) + + def _concat_series(self, samples, trace, forecast=0): + """ + Concatenate sequential time series into tensors, in-place. + + :param dict samples: A dictionary of samples. + """ + time_dim = -2 if self.is_regional else -1 + for name in set(self.compartments).union(self.series): + pattern = name + "_[0-9]+" + series = [] + for key in list(samples): + if re.match(pattern, key): + series.append(samples.pop(key)) + if not series: + continue + assert len(series) == self.duration + forecast + series = torch.broadcast_tensors(*map(torch.as_tensor, series)) + dim = time_dim - trace.nodes[name + "_0"]["fn"].event_dim + if series[0].dim() >= -dim: + samples[name] = torch.cat(series, dim=dim) + else: + samples[name] = torch.stack(series) + + @lazy_property + @torch.no_grad() + def _non_compartmental(self): + """ + A dict mapping name -> (distribution, is_regional) for all + non-compartmental sites in :meth:`transition`. For simple models this + is often empty; for time-heterogeneous models this may contain + time-local latent variables. + """ + # Trace a simple invocation of .transition(). + with torch.no_grad(), poutine.block(): + params = self.global_model() + prev = self.initialize(params) + for name in self.approximate: + prev[name + "_approx"] = prev[name] + curr = prev.copy() + with poutine.trace() as tr: + self.transition(params, curr, 0) + flows = self.compute_flows(prev, curr, 0) + + # Extract latent variables that are not compartmental flows. + result = OrderedDict() + for name, site in tr.trace.iter_stochastic_nodes(): + if name in flows or site_is_subsample(site): + continue + assert name.endswith("_0"), name + name = name[:-2] + assert name in self.series, name + # TODO This supports only the region_plate. For full plate support, + # this could be replaced by a self.plate() method as in EasyGuide. + is_regional = any(f.name == "region" for f in site["cond_indep_stack"]) + result[name] = site["fn"], is_regional + return result + + def _sample_auxiliary(self): + """ + Sample both compartmental and non-compartmental auxiliary variables. + """ + C = len(self.compartments) + T = self.duration + R_shape = getattr(self.population, "shape", ()) # Region shape. + + # Sample the compartmental continuous reparameterizing variable. + shape = (C, T) + R_shape + auxiliary = pyro.sample( + "auxiliary", + dist.Uniform(-0.5, self.population + 0.5) + .mask(False) + .expand(shape) + .to_event(), + ) + extra_dims = auxiliary.dim() - len(shape) + + # Sample any non-compartmental time series in batch. + non_compartmental = OrderedDict() + for name, (fn, is_regional) in self._non_compartmental.items(): + fn = dist.ImproperUniform(fn.support, fn.batch_shape, fn.event_shape) + shape = (T,) + if self.is_regional: + shape += R_shape if is_regional else (1,) + # Manually expand, avoiding plates to enable HaarReparam and SplitReparam. + non_compartmental[name] = pyro.sample(name, fn.expand(shape).to_event()) + + # Move event dims to time_plate and region_plate dims. + if extra_dims: # If inside particle_plate. + shape = auxiliary.shape[:1] + auxiliary.shape[extra_dims:] + auxiliary = auxiliary.reshape(shape) + for name, value in non_compartmental.items(): + shape = value.shape[:1] + value.shape[extra_dims:] + non_compartmental[name] = value.reshape(shape) + + return auxiliary, non_compartmental + + def _transition_bwd(self, params, prev, curr, t): + """ + Helper to collect probabilty factors from .transition() conditioned on + previous and current enumerated states. + """ + # Run .transition() conditioned on computed flows. + cond_data = {"{}_{}".format(k, t): v for k, v in curr.items()} + cond_data.update(self.compute_flows(prev, curr, t)) + with poutine.condition(data=cond_data): + state = prev.copy() + self.transition(params, state, t) # Mutates state. + + # Validate that .transition() matches .compute_flows(). + if is_validation_enabled(): + for key in self.compartments: + if not torch.allclose(state[key], curr[key]): + raise ValueError( + "Incorrect state['{}'] update in .transition(), " + "check that .transition() matches .compute_flows().".format(key) + ) + + def _generative_model(self, forecast=0): + """ + Forward generative model used for simulation and forecasting. + """ + # Sample global parameters. + params = self.global_model() + + # Sample initial values. + state = self.initialize(params) + state = { + k: v if isinstance(v, torch.Tensor) else torch.tensor(float(v)) + for k, v in state.items() + } + + # Sequentially transition. + for t in range(self.duration + forecast): + for name in self.approximate: + state[name + "_approx"] = state[name] + self.transition(params, state, t) + with self.region_plate: + for name in self.compartments: + pyro.deterministic( + "{}_{}".format(name, t), state[name], event_dim=0 + ) + + self._clear_plates() + + def _sequential_model(self): + """ + Sequential model used to sample latents in the interval [0:duration]. + This is compatible with both quantized and relaxed inference. + This method is called only inside particle_plate. + This method is used only for prediction. + """ + C = len(self.compartments) + T = self.duration + R_shape = getattr(self.population, "shape", ()) # Region shape. + num_samples = len(next(iter(self.samples.values()))) + + # Sample global parameters and auxiliary variables. + params = self.global_model() + auxiliary, non_compartmental = self._sample_auxiliary() + + # Reshape to accommodate the time_plate below. + assert auxiliary.shape == (num_samples, C, T) + R_shape, ( + auxiliary.shape, + (num_samples, C, T) + R_shape, + ) + aux = [aux.unbind(2) for aux in auxiliary.unsqueeze(1).unbind(2)] + + # Sequentially transition. + curr = self.initialize(params) + for t in poutine.markov(range(T)): + with self.region_plate: + prev, curr = curr, {} + + # Extract any non-compartmental variables. + for name, value in non_compartmental.items(): + curr[name] = value[:, t : t + 1] + + # Extract and enumerate all compartmental variables. + for c, name in enumerate(self.compartments): + curr[name] = quantize( + "{}_{}".format(name, t), + aux[c][t], + min=0, + max=self.population, + num_quant_bins=self.num_quant_bins, + ) + # Enable approximate inference by using aux as a + # non-enumerated proxy for enumerated compartment values. + if name in self.approximate: + curr[name + "_approx"] = aux[c][t] + prev.setdefault(name + "_approx", prev[name]) + + self._transition_bwd(params, prev, curr, t) + + self._clear_plates() + + def _quantized_model(self): + """ + Quantized vectorized model used for parallel-scan enumerated inference. + This method is called only outside particle_plate. + """ + C = len(self.compartments) + T = self.duration + Q = self.num_quant_bins + R_shape = getattr(self.population, "shape", ()) # Region shape. + + # Sample global parameters and auxiliary variables. + params = self.global_model() + auxiliary, non_compartmental = self._sample_auxiliary() + + # Manually enumerate. + curr, logp = quantize_enumerate( + auxiliary, min=0, max=self.population, num_quant_bins=self.num_quant_bins + ) + curr = OrderedDict(zip(self.compartments, curr.unbind(0))) + logp = OrderedDict(zip(self.compartments, logp.unbind(0))) + curr.update(non_compartmental) + + # Truncate final value from the right then pad initial value onto the left. + init = self.initialize(params) + prev = {} + for name, value in init.items(): + if name in self.compartments: + if isinstance(value, torch.Tensor): + value = value[..., None] # Because curr is enumerated on the right. + prev[name] = cat2( + value, curr[name][:-1], dim=-3 if self.is_regional else -2 + ) + else: # non-compartmental + prev[name] = cat2(init[name], curr[name][:-1], dim=-curr[name].dim()) + + # Reshape to support broadcasting, similar to EnumMessenger. + def enum_reshape(tensor, position): + assert tensor.size(-1) == Q + assert tensor.dim() <= self.max_plate_nesting + 2 + tensor = tensor.permute(tensor.dim() - 1, *range(tensor.dim() - 1)) + shape = [Q] + [1] * (position + self.max_plate_nesting - (tensor.dim() - 2)) + shape.extend(tensor.shape[1:]) + return tensor.reshape(shape) + + for e, name in enumerate(self.compartments): + curr[name] = enum_reshape(curr[name], e) + logp[name] = enum_reshape(logp[name], e) + prev[name] = enum_reshape(prev[name], e + C) + + # Enable approximate inference by using aux as a non-enumerated proxy + # for enumerated compartment values. + for name in self.approximate: + aux = auxiliary[self.compartments.index(name)] + curr[name + "_approx"] = aux + prev[name + "_approx"] = cat2( + init[name], aux[:-1], dim=-2 if self.is_regional else -1 + ) + + # Record transition factors. + with poutine.block(), poutine.trace() as tr: + with self.time_plate: + t = slice(0, T, 1) # Used to slice data tensors. + self._transition_bwd(params, prev, curr, t) + tr.trace.compute_log_prob() + for name, site in tr.trace.nodes.items(): + if site["type"] == "sample": + log_prob = site["log_prob"] + if log_prob.dim() <= self.max_plate_nesting: # Not enumerated. + pyro.factor("transition_" + name, site["log_prob_sum"]) + continue + if self.is_regional and log_prob.shape[-1:] != R_shape: + # Poor man's tensor variable elimination. + log_prob = ( + log_prob.expand(log_prob.shape[:-1] + R_shape) / R_shape[0] + ) + logp[name] = site["log_prob"] + + # Manually perform variable elimination. + logp = reduce(operator.add, logp.values()) + logp = logp.reshape(Q**C, Q**C, T, -1) # prev, curr, T, batch + logp = logp.permute(3, 2, 0, 1).squeeze(0) # batch, T, prev, curr + logp = pyro.distributions.hmm._sequential_logmatmulexp( + logp + ) # batch, prev, curr + logp = logp.reshape(-1, Q**C * Q**C).logsumexp(-1).sum() + warn_if_nan(logp) + pyro.factor("transition", logp) + + # Apply final likelihood. + prev = {name: prev[name + "_approx"] for name in self.approximate} + curr = {name: curr[name + "_approx"] for name in self.approximate} + with _disallow_latent_variables(".finalize()"): + self.finalize(params, prev, curr) + + self._clear_plates() + + @set_relaxed_distributions() + def _relaxed_model(self): + """ + Relaxed vectorized model used for continuous inference. + This method may be called either inside or outside particle_plate. + """ + T = self.duration + + # Sample global parameters and auxiliary variables. + params = self.global_model() + auxiliary, non_compartmental = self._sample_auxiliary() + particle_dims = auxiliary.dim() - (3 if self.is_regional else 2) + assert particle_dims in (0, 1) + + # Split tensors into current state. + curr = dict(zip(self.compartments, auxiliary.unbind(particle_dims))) + curr.update(non_compartmental) + + # Truncate final value from the right then pad initial value onto the left. + prev = {} + for name, value in self.initialize(params).items(): + dim = particle_dims - curr[name].dim() + t = (slice(None),) * particle_dims + (slice(0, -1),) + prev[name] = cat2(value, curr[name][t], dim=dim) + + # Enable approximate inference. + for name in self.approximate: + curr[name + "_approx"] = curr[name] + prev[name + "_approx"] = prev[name] + + # Transition. + with self.time_plate: + t = slice(0, T, 1) # Used to slice data tensors. + self._transition_bwd(params, prev, curr, t) + + # Apply final likelihood. + with _disallow_latent_variables(".finalize()"): + self.finalize(params, prev, curr) + + self._clear_plates() + + +class _SMCModel: + """ + Helper to initialize a CompartmentalModel to a feasible initial state. + """ + + def __init__(self, model): + assert isinstance(model, CompartmentalModel) + self.model = model + + def init(self, state): + with poutine.trace() as tr: + params = self.model.global_model() + for name, site in tr.trace.nodes.items(): + if site["type"] == "sample": + state[name] = site["value"] + + self.t = 0 + state.update(self.model.initialize(params)) + self.step(state) # Take one step since model.initialize is deterministic. + + def step(self, state): + with poutine.block(), poutine.condition(data=state): + params = self.model.global_model() + + with poutine.trace() as tr: + # Temporarily extend state with approximations. + extended_state = dict(state) + for name in self.model.approximate: + extended_state[name + "_approx"] = state[name] + + self.model.transition(params, extended_state, self.t) + + for name in self.model.approximate: + del extended_state[name + "_approx"] + state.update(extended_state) + + for name, site in tr.trace.nodes.items(): + if site["type"] == "sample" and not site["is_observed"]: + state[name] = site["value"] + self.t += 1 + + +class _SMCGuide(_SMCModel): + """ + Like _SMCModel but does not update state and does not observe. + """ + + def init(self, state): + super().init(state.copy()) + + def step(self, state): + with poutine.block(hide_types=["observe"]): + super().step(state.copy()) + + +class _HaarSplitReparam: + """ + Wrapper around ``HaarReparam`` and ``SplitReparam`` to additionally convert + sample dicts between user-facing and auxiliary coordinates. + """ + + def __init__(self, split, duration, dims, supports): + assert 0 <= split < duration + self.split = split + self.duration = duration + self.dims = dims + self.supports = supports + + def __bool__(self): + return True + + def reparam(self, model): + """ + Wrap a model with ``poutine.reparam``. + """ + # Transform to Haar coordinates. + config = {} + for name, dim in self.dims.items(): + config[name] = HaarReparam(dim=dim, flip=True) + model = poutine.reparam(model, config) + + if self.split: + # Split into low- and high-frequency parts. + splits = [self.split, self.duration - self.split] + config = {} + for name, dim in self.dims.items(): + config[name + "_haar"] = SplitReparam(splits, dim=dim) + model = poutine.reparam(model, config) + + return model + + def aux_to_user(self, samples): + """ + Convert from auxiliary samples to user-facing samples, in-place. + """ + if self.split: + # Transform back from SplitReparam coordinates. + for name, dim in self.dims.items(): + samples[name + "_haar"] = torch.cat( + [ + samples.pop(name + "_haar_split_0"), + samples.pop(name + "_haar_split_1"), + ], + dim=dim, + ) + + # Transform back from Haar coordinates. + for name, dim in self.dims.items(): + x = samples.pop(name + "_haar") + x = HaarTransform(dim=dim, flip=True).inv(x) + x = biject_to(self.supports[name])(x) + samples[name] = x diff --git a/pyro/source/pyro/contrib/epidemiology/distributions.py b/pyro/source/pyro/contrib/epidemiology/distributions.py new file mode 100644 index 0000000000000000000000000000000000000000..d6903159ba6261c8d5118ad49efd8d8b003efa94 --- /dev/null +++ b/pyro/source/pyro/contrib/epidemiology/distributions.py @@ -0,0 +1,341 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import math +from contextlib import contextmanager + +import torch +from torch.distributions.utils import broadcast_all + +import pyro.distributions as dist +from pyro.distributions.util import is_validation_enabled + +_RELAX = False +_RELAX_MIN_VARIANCE = 0.1 + + +def _all(x): + return x.all() if isinstance(x, torch.Tensor) else x + + +def _is_zero(x): + return _all(x == 0) + + +@contextmanager +def set_approx_sample_thresh(thresh): + """ + EXPERIMENTAL Context manager / decorator to temporarily set the global + default value of ``Binomial.approx_sample_thresh``, thereby decreasing the + computational complexity of sampling from + :class:`~pyro.distributions.Binomial`, + :class:`~pyro.distributions.BetaBinomial`, + :class:`~pyro.distributions.ExtendedBinomial`, + :class:`~pyro.distributions.ExtendedBetaBinomial`, and distributions + returned by :func:`infection_dist`. + + This is useful for sampling from very large ``total_count``. + + This is used internally by + :class:`~pyro.contrib.epidemiology.compartmental.CompartmentalModel`. + + :param thresh: New temporary threshold. + :type thresh: int or float. + """ + assert isinstance(thresh, (float, int)) + assert thresh > 0 + old = dist.Binomial.approx_sample_thresh + try: + dist.Binomial.approx_sample_thresh = thresh + yield + finally: + dist.Binomial.approx_sample_thresh = old + + +@contextmanager +def set_approx_log_prob_tol(tol): + """ + EXPERIMENTAL Context manager / decorator to temporarily set the global + default value of ``Binomial.approx_log_prob_tol`` and + ``BetaBinomial.approx_log_prob_tol``, thereby decreasing the computational + complexity of scoring :class:`~pyro.distributions.Binomial` and + :class:`~pyro.distributions.BetaBinomial` distributions. + + This is used internally by + :class:`~pyro.contrib.epidemiology.compartmental.CompartmentalModel`. + + :param tol: New temporary tolold. + :type tol: int or float. + """ + assert isinstance(tol, (float, int)) + assert tol >= 0 + old1 = dist.Binomial.approx_log_prob_tol + old2 = dist.BetaBinomial.approx_log_prob_tol + try: + dist.Binomial.approx_log_prob_tol = tol + dist.BetaBinomial.approx_log_prob_tol = tol + yield + finally: + dist.Binomial.approx_log_prob_tol = old1 + dist.BetaBinomial.approx_log_prob_tol = old2 + + +@contextmanager +def set_relaxed_distributions(relaxed=True): + global _RELAX + old = _RELAX + try: + _RELAX = relaxed + yield + finally: + _RELAX = old + + +def _validate_overdispersion(overdispersion): + if is_validation_enabled(): + if not _all(0 <= overdispersion): + raise ValueError("Expected overdispersion >= 0") + if not _all(overdispersion < 2): + raise ValueError("Expected overdispersion < 2") + + +def _relaxed_binomial(total_count, probs): + """ + Returns a moment-matched :class:`~pyro.distributions.Normal` approximating + a :class:`~pyro.distributions.Binomial` but allowing arbitrary real + ``total_count`` and lower-bounding variance. + """ + total_count, probs = broadcast_all(total_count, probs) + + mean = probs * total_count + variance = total_count * probs * (1 - probs) + + scale = variance.clamp(min=_RELAX_MIN_VARIANCE).sqrt() + return dist.Normal(mean, scale) + + +def _relaxed_beta_binomial(concentration1, concentration0, total_count): + """ + Returns a moment-matched :class:`~pyro.distributions.Normal` approximating + a :class:`~pyro.distributions.BetaBinomial` but allowing arbitrary real + ``total_count`` and lower-bounding variance. + """ + concentration1, concentration0, total_count = broadcast_all( + concentration1, concentration0, total_count + ) + + c = concentration1 + concentration0 + beta_mean = concentration1 / c + beta_variance = concentration1 * concentration0 / (c * c * (c + 1)) + mean = beta_mean * total_count + variance = beta_variance * total_count * (c + total_count) + + scale = variance.clamp(min=_RELAX_MIN_VARIANCE).sqrt() + return dist.Normal(mean, scale) + + +def binomial_dist(total_count, probs, *, overdispersion=0.0): + """ + Returns a Beta-Binomial distribution that is an overdispersed version of a + Binomial distribution, according to a parameter ``overdispersion``, + typically set in the range 0.1 to 0.5. + + This is useful for (1) fitting real data that is overdispersed relative to + a Binomial distribution, and (2) relaxing models of large populations to + improve inference. In particular the ``overdispersion`` parameter lower + bounds the relative uncertainty in stochastic models such that increasing + population leads to a limiting scale-free dynamical system with bounded + stochasticity, in contrast to Binomial-based SDEs that converge to + deterministic ODEs in the large population limit. + + This parameterization satisfies the following properties: + + 1. Variance increases monotonically in ``overdispersion``. + 2. ``overdispersion = 0`` results in a Binomial distribution. + 3. ``overdispersion`` lower bounds the relative uncertainty ``std_dev / + (total_count * p * q)``, where ``probs = p = 1 - q``, and serves as an + asymptote for relative uncertainty as ``total_count → ∞``. This + contrasts the Binomial whose relative uncertainty tends to zero. + 4. If ``X ~ binomial_dist(n, p, overdispersion=σ)`` then in the large + population limit ``n → ∞``, the scaled random variable ``X / n`` + converges in distribution to ``LogitNormal(log(p/(1-p)), σ)``. + + To achieve these properties we set ``p = probs``, ``q = 1 - p``, and:: + + concentration = 1 / (p * q * overdispersion**2) - 1 + + :param total_count: Number of Bernoulli trials. + :type total_count: int or torch.Tensor + :param probs: Event probabilities. + :type probs: float or torch.Tensor + :param overdispersion: Amount of overdispersion, in the half open interval + [0,2). Defaults to zero. + :type overdispersion: float or torch.tensor + """ + _validate_overdispersion(overdispersion) + if _is_zero(overdispersion): + if _RELAX: + return _relaxed_binomial(total_count, probs) + return dist.ExtendedBinomial(total_count, probs) + + p = probs + q = 1 - p + od2 = (overdispersion + 1e-8) ** 2 + concentration1 = 1 / (q * od2 + 1e-8) - p + concentration0 = 1 / (p * od2 + 1e-8) - q + # At this point we have + # concentration1 + concentration0 == 1 / (p + q + od2 + 1e-8) - 1 + + if _RELAX: + return _relaxed_beta_binomial(concentration1, concentration0, total_count) + return dist.ExtendedBetaBinomial(concentration1, concentration0, total_count) + + +def beta_binomial_dist( + concentration1, concentration0, total_count, *, overdispersion=0.0 +): + """ + Returns a Beta-Binomial distribution that is an overdispersed version of a + the usual Beta-Binomial distribution, according to an extra parameter + ``overdispersion``, typically set in the range 0.1 to 0.5. + + :param concentration1: 1st concentration parameter (alpha) for the + Beta distribution. + :type concentration1: float or torch.Tensor + :param concentration0: 2nd concentration parameter (beta) for the + Beta distribution. + :type concentration0: float or torch.Tensor + :param total_count: Number of Bernoulli trials. + :type total_count: float or torch.Tensor + :param overdispersion: Amount of overdispersion, in the half open interval + [0,2). Defaults to zero. + :type overdispersion: float or torch.tensor + """ + _validate_overdispersion(overdispersion) + if not _is_zero(overdispersion): + # Compute harmonic sum of two sources of concentration resulting in + # final concentration c = 1 / (1 / c_1 + 1 / c_2) + od2 = (overdispersion + 1e-8) ** 2 + c_1 = concentration1 + concentration0 + c_2 = c_1**2 / (concentration1 * concentration0 * od2 + 1e-8) - 1 + factor = 1 + c_1 / c_2 + concentration1 = concentration1 / factor + concentration0 = concentration0 / factor + + if _RELAX: + return _relaxed_beta_binomial(concentration1, concentration0, total_count) + return dist.ExtendedBetaBinomial(concentration1, concentration0, total_count) + + +def poisson_dist(rate, *, overdispersion=0.0): + _validate_overdispersion(overdispersion) + if _is_zero(overdispersion): + return dist.Poisson(rate) + raise NotImplementedError("TODO return a NegativeBinomial or GammaPoisson") + + +def negative_binomial_dist( + concentration, probs=None, *, logits=None, overdispersion=0.0 +): + _validate_overdispersion(overdispersion) + if _is_zero(overdispersion): + return dist.NegativeBinomial(concentration, probs=probs, logits=logits) + raise NotImplementedError("TODO return a NegativeBinomial or GammaPoisson") + + +def infection_dist( + *, + individual_rate, + num_infectious, + num_susceptible=math.inf, + population=math.inf, + concentration=math.inf, + overdispersion=0.0 +): + """ + Create a :class:`~pyro.distributions.Distribution` over the number of new + infections at a discrete time step. + + This returns a Poisson, Negative-Binomial, Binomial, or Beta-Binomial + distribution depending on whether ``population`` and ``concentration`` are + finite. In Pyro models, the population is usually finite. In the limit + ``population → ∞`` and ``num_susceptible/population → 1``, the Binomial + converges to Poisson and the Beta-Binomial converges to Negative-Binomial. + In the limit ``concentration → ∞``, the Negative-Binomial converges to + Poisson and the Beta-Binomial converges to Binomial. + + The overdispersed distributions (Negative-Binomial and Beta-Binomial + returned when ``concentration < ∞``) are useful for modeling superspreader + individuals [1,2]. The finitely supported distributions Binomial and + Negative-Binomial are useful in small populations and in probabilistic + programming systems where truncation or censoring are expensive [3]. + + **References** + + [1] J. O. Lloyd-Smith, S. J. Schreiber, P. E. Kopp, W. M. Getz (2005) + "Superspreading and the effect of individual variation on disease + emergence" + https://www.nature.com/articles/nature04153.pdf + [2] Lucy M. Li, Nicholas C. Grassly, Christophe Fraser (2017) + "Quantifying Transmission Heterogeneity Using Both Pathogen Phylogenies + and Incidence Time Series" + https://academic.oup.com/mbe/article/34/11/2982/3952784 + [3] Lawrence Murray et al. (2018) + "Delayed Sampling and Automatic Rao-Blackwellization of Probabilistic + Programs" + https://arxiv.org/pdf/1708.07787.pdf + + :param individual_rate: The mean number of infections per infectious + individual per time step in the limit of large population, equal to + ``R0 / tau`` where ``R0`` is the basic reproductive number and ``tau`` + is the mean duration of infectiousness. + :param num_infectious: The number of infectious individuals at this + time step, sometimes ``I``, sometimes ``E+I``. + :param num_susceptible: The number ``S`` of susceptible individuals at this + time step. This defaults to an infinite population. + :param population: The total number of individuals in a population. + This defaults to an infinite population. + :param concentration: The concentration or dispersion parameter ``k`` in + overdispersed models of superspreaders [1,2]. This defaults to minimum + variance ``concentration = ∞``. + :param overdispersion: Amount of overdispersion, in the half open interval + [0,2). Defaults to zero. + :type overdispersion: float or torch.tensor + """ + # Convert to colloquial variable names. + R = individual_rate + I = num_infectious + S = num_susceptible + N = population + k = concentration + + if isinstance(N, float) and N == math.inf: + if isinstance(k, float) and k == math.inf: + # Return a Poisson distribution. + return poisson_dist(R * I, overdispersion=overdispersion) + else: + # Return an overdispersed Negative-Binomial distribution. + combined_k = k * I + logits = torch.as_tensor(R / k).log() + return negative_binomial_dist( + combined_k, logits=logits, overdispersion=overdispersion + ) + else: + # Compute the probability that any given (susceptible, infectious) + # pair of individuals results in an infection at this time step. + p = torch.as_tensor(R / N).clamp(max=1 - 1e-6) + # Combine infections from all individuals. + combined_p = p.neg().log1p().mul(I).expm1().neg() # = 1 - (1 - p)**I + combined_p = combined_p.clamp(min=1e-6) + + if isinstance(k, float) and k == math.inf: + # Return a pure Binomial model, combining the independent Binomial + # models of each infectious individual. + return binomial_dist(S, combined_p, overdispersion=overdispersion) + else: + # Return an overdispersed Beta-Binomial model, combining + # independent BetaBinomial(c1,c0,S) models for each infectious + # individual. + c1 = (k * I).clamp(min=1e-6) + c0 = c1 * (combined_p.reciprocal() - 1).clamp(min=1e-6) + return beta_binomial_dist(c1, c0, S, overdispersion=overdispersion) diff --git a/pyro/source/pyro/contrib/epidemiology/models.py b/pyro/source/pyro/contrib/epidemiology/models.py new file mode 100644 index 0000000000000000000000000000000000000000..cf2a8513c2a088767988d4a0fb948df6ccbdbb97 --- /dev/null +++ b/pyro/source/pyro/contrib/epidemiology/models.py @@ -0,0 +1,1290 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import re + +import torch +from torch.nn.functional import pad + +import pyro +import pyro.distributions as dist + +from .compartmental import CompartmentalModel +from .distributions import binomial_dist, infection_dist + + +class SimpleSIRModel(CompartmentalModel): + """ + Susceptible-Infected-Recovered model. + + To customize this model we recommend forking and editing this class. + + This is a stochastic discrete-time discrete-state model with three + compartments: "S" for susceptible, "I" for infected, and "R" for + recovered individuals (the recovered individuals are implicit: ``R = + population - S - I``) with transitions ``S -> I -> R``. + + :param int population: Total ``population = S + I + R``. + :param float recovery_time: Mean recovery time (duration in state + ``I``). Must be greater than 1. + :param iterable data: Time series of new observed infections. Each time + step is Binomial distributed between 0 and the number of ``S -> I`` + transitions. This allows false negative but no false positives. + """ + + def __init__(self, population, recovery_time, data): + compartments = ("S", "I") # R is implicit. + duration = len(data) + super().__init__(compartments, duration, population) + + assert isinstance(recovery_time, float) + assert recovery_time > 1 + self.recovery_time = recovery_time + + self.data = data + + def global_model(self): + tau = self.recovery_time + R0 = pyro.sample("R0", dist.LogNormal(0.0, 1.0)) + rho = pyro.sample("rho", dist.Beta(10, 10)) + return R0, tau, rho + + def initialize(self, params): + # Start with a single infection. + return {"S": self.population - 1, "I": 1} + + def transition(self, params, state, t): + R0, tau, rho = params + + # Sample flows between compartments. + S2I = pyro.sample( + "S2I_{}".format(t), + infection_dist( + individual_rate=R0 / tau, + num_susceptible=state["S"], + num_infectious=state["I"], + population=self.population, + ), + ) + I2R = pyro.sample("I2R_{}".format(t), binomial_dist(state["I"], 1 / tau)) + + # Update compartments with flows. + state["S"] = state["S"] - S2I + state["I"] = state["I"] + S2I - I2R + + # Condition on observations. + t_is_observed = isinstance(t, slice) or t < self.duration + pyro.sample( + "obs_{}".format(t), + binomial_dist(S2I, rho), + obs=self.data[t] if t_is_observed else None, + ) + + +class SimpleSEIRModel(CompartmentalModel): + """ + Susceptible-Exposed-Infected-Recovered model. + + To customize this model we recommend forking and editing this class. + + This is a stochastic discrete-time discrete-state model with four + compartments: "S" for susceptible, "E" for exposed, "I" for infected, + and "R" for recovered individuals (the recovered individuals are + implicit: ``R = population - S - E - I``) with transitions + ``S -> E -> I -> R``. + + :param int population: Total ``population = S + E + I + R``. + :param float incubation_time: Mean incubation time (duration in state + ``E``). Must be greater than 1. + :param float recovery_time: Mean recovery time (duration in state + ``I``). Must be greater than 1. + :param iterable data: Time series of new observed infections. Each time + step is Binomial distributed between 0 and the number of ``S -> E`` + transitions. This allows false negative but no false positives. + """ + + def __init__(self, population, incubation_time, recovery_time, data): + compartments = ("S", "E", "I") # R is implicit. + duration = len(data) + super().__init__(compartments, duration, population) + + assert isinstance(incubation_time, float) + assert incubation_time > 1 + self.incubation_time = incubation_time + + assert isinstance(recovery_time, float) + assert recovery_time > 1 + self.recovery_time = recovery_time + + self.data = data + + def global_model(self): + tau_e = self.incubation_time + tau_i = self.recovery_time + R0 = pyro.sample("R0", dist.LogNormal(0.0, 1.0)) + rho = pyro.sample("rho", dist.Beta(10, 10)) + return R0, tau_e, tau_i, rho + + def initialize(self, params): + # Start with a single infection. + return {"S": self.population - 1, "E": 0, "I": 1} + + def transition(self, params, state, t): + R0, tau_e, tau_i, rho = params + + # Sample flows between compartments. + S2E = pyro.sample( + "S2E_{}".format(t), + infection_dist( + individual_rate=R0 / tau_i, + num_susceptible=state["S"], + num_infectious=state["I"], + population=self.population, + ), + ) + E2I = pyro.sample("E2I_{}".format(t), binomial_dist(state["E"], 1 / tau_e)) + I2R = pyro.sample("I2R_{}".format(t), binomial_dist(state["I"], 1 / tau_i)) + + # Update compartments with flows. + state["S"] = state["S"] - S2E + state["E"] = state["E"] + S2E - E2I + state["I"] = state["I"] + E2I - I2R + + # Condition on observations. + t_is_observed = isinstance(t, slice) or t < self.duration + pyro.sample( + "obs_{}".format(t), + binomial_dist(S2E, rho), + obs=self.data[t] if t_is_observed else None, + ) + + +class SimpleSEIRDModel(CompartmentalModel): + """ + Susceptible-Exposed-Infected-Recovered-Dead model. + + To customize this model we recommend forking and editing this class. + + This is a stochastic discrete-time discrete-state model with four + compartments: "S" for susceptible, "E" for exposed, "I" for infected, "D" + for deceased individuals, and "R" for recovered individuals (the recovered + individuals are implicit: ``R = population - S - E - I - D``) with + transitions ``S -> E -> I -> R`` and ``I -> D``. + + Because the transitions are not simple linear succession, this model + implements a custom :meth:`compute_flows()` method. + + :param int population: Total ``population = S + E + I + R + D``. + :param float incubation_time: Mean incubation time (duration in state + ``E``). Must be greater than 1. + :param float recovery_time: Mean recovery time (duration in state + ``I``). Must be greater than 1. + :param float mortality_rate: Portion of infections resulting in death. + Must be in the open interval ``(0, 1)``. + :param iterable data: Time series of new observed infections. Each time + step is Binomial distributed between 0 and the number of ``S -> E`` + transitions. This allows false negative but no false positives. + """ + + def __init__( + self, population, incubation_time, recovery_time, mortality_rate, data + ): + compartments = ("S", "E", "I", "D") # R is implicit. + duration = len(data) + super().__init__(compartments, duration, population) + + assert isinstance(incubation_time, float) + assert incubation_time > 1 + self.incubation_time = incubation_time + + assert isinstance(recovery_time, float) + assert recovery_time > 1 + self.recovery_time = recovery_time + + assert isinstance(mortality_rate, float) + assert 0 < mortality_rate < 1 + self.mortality_rate = mortality_rate + + self.data = data + + def global_model(self): + tau_e = self.incubation_time + tau_i = self.recovery_time + mu = self.mortality_rate + R0 = pyro.sample("R0", dist.LogNormal(0.0, 1.0)) + rho = pyro.sample("rho", dist.Beta(10, 10)) + return R0, tau_e, tau_i, mu, rho + + def initialize(self, params): + # Start with a single infection. + return {"S": self.population - 1, "E": 0, "I": 1, "D": 0} + + def transition(self, params, state, t): + R0, tau_e, tau_i, mu, rho = params + + # Sample flows between compartments. + S2E = pyro.sample( + "S2E_{}".format(t), + infection_dist( + individual_rate=R0 / tau_i, + num_susceptible=state["S"], + num_infectious=state["I"], + population=self.population, + ), + ) + E2I = pyro.sample("E2I_{}".format(t), binomial_dist(state["E"], 1 / tau_e)) + # Of the 1/tau_i expected recoveries-or-deaths, a portion mu die and + # the remaining recover. Alternatively we could model this with a + # Multinomial distribution I2_ and extract the two components I2D and + # I2R, however the Multinomial distribution does not currently + # implement overdispersion or moment matching. + I2D = pyro.sample("I2D_{}".format(t), binomial_dist(state["I"], mu / tau_i)) + I2R = pyro.sample( + "I2R_{}".format(t), binomial_dist(state["I"] - I2D, 1 / tau_i) + ) + + # Update compartments with flows. + state["S"] = state["S"] - S2E + state["E"] = state["E"] + S2E - E2I + state["I"] = state["I"] + E2I - I2R - I2D + state["D"] = state["D"] + I2D + + # Condition on observations. + t_is_observed = isinstance(t, slice) or t < self.duration + pyro.sample( + "obs_{}".format(t), + binomial_dist(S2E, rho), + obs=self.data[t] if t_is_observed else None, + ) + + def compute_flows(self, prev, curr, t): + S2E = prev["S"] - curr["S"] # S can only go to E. + I2D = curr["D"] - prev["D"] # D can only have come from I. + # We deduce the remaining flows by conservation of mass: + # curr - prev = inflows - outflows + E2I = prev["E"] - curr["E"] + S2E + I2R = prev["I"] - curr["I"] + E2I - I2D + return { + "S2E_{}".format(t): S2E, + "E2I_{}".format(t): E2I, + "I2D_{}".format(t): I2D, + "I2R_{}".format(t): I2R, + } + + +class OverdispersedSIRModel(CompartmentalModel): + """ + Generalizes :class:`SimpleSIRModel` with overdispersed distributions. + + To customize this model we recommend forking and editing this class. + + This adds a single global overdispersion parameter controlling + overdispersion of the transition and observation distributions. See + :func:`~pyro.contrib.epidemiology.distributions.binomial_dist` and + :func:`~pyro.contrib.epidemiology.distributions.beta_binomial_dist` for + distributional details. For prior work incorporating overdispersed + distributions see [1,2,3,4]. + + **References:** + + [1] D. Champredon, M. Li, B. Bolker. J. Dushoff (2018) + "Two approaches to forecast Ebola synthetic epidemics" + https://www.sciencedirect.com/science/article/pii/S1755436517300233 + [2] Carrie Reed et al. (2015) + "Estimating Influenza Disease Burden from Population-Based Surveillance + Data in the United States" + https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4349859/ + [3] A. Leonard, D. Weissman, B. Greenbaum, E. Ghedin, K. Koelle (2017) + "Transmission Bottleneck Size Estimation from Pathogen Deep-Sequencing + Data, with an Application to Human Influenza A Virus" + https://jvi.asm.org/content/jvi/91/14/e00171-17.full.pdf + [4] A. Miller, N. Foti, J. Lewnard, N. Jewell, C. Guestrin, E. Fox (2020) + "Mobility trends provide a leading indicator of changes in + SARS-CoV-2 transmission" + https://www.medrxiv.org/content/medrxiv/early/2020/05/11/2020.05.07.20094441.full.pdf + + :param int population: Total ``population = S + I + R``. + :param float recovery_time: Mean recovery time (duration in state + ``I``). Must be greater than 1. + :param iterable data: Time series of new observed infections. Each time + step is Binomial distributed between 0 and the number of ``S -> I`` + transitions. This allows false negative but no false positives. + """ + + def __init__(self, population, recovery_time, data): + compartments = ("S", "I") # R is implicit. + duration = len(data) + super().__init__(compartments, duration, population) + + assert isinstance(recovery_time, float) + assert recovery_time > 1 + self.recovery_time = recovery_time + + self.data = data + + def global_model(self): + tau = self.recovery_time + R0 = pyro.sample("R0", dist.LogNormal(0.0, 1.0)) + rho = pyro.sample("rho", dist.Beta(10, 10)) + od = pyro.sample("od", dist.Beta(2, 6)) + return R0, tau, rho, od + + def initialize(self, params): + # Start with a single infection. + return {"S": self.population - 1, "I": 1} + + def transition(self, params, state, t): + R0, tau, rho, od = params + + # Sample flows between compartments. + S2I = pyro.sample( + "S2I_{}".format(t), + infection_dist( + individual_rate=R0 / tau, + num_susceptible=state["S"], + num_infectious=state["I"], + population=self.population, + overdispersion=od, + ), + ) + I2R = pyro.sample( + "I2R_{}".format(t), binomial_dist(state["I"], 1 / tau, overdispersion=od) + ) + + # Update compartments with flows. + state["S"] = state["S"] - S2I + state["I"] = state["I"] + S2I - I2R + + # Condition on observations. + t_is_observed = isinstance(t, slice) or t < self.duration + pyro.sample( + "obs_{}".format(t), + binomial_dist(S2I, rho, overdispersion=od), + obs=self.data[t] if t_is_observed else None, + ) + + +class OverdispersedSEIRModel(CompartmentalModel): + """ + Generalizes :class:`SimpleSEIRModel` with overdispersed distributions. + + To customize this model we recommend forking and editing this class. + + This adds a single global overdispersion parameter controlling + overdispersion of the transition and observation distributions. See + :func:`~pyro.contrib.epidemiology.distributions.binomial_dist` and + :func:`~pyro.contrib.epidemiology.distributions.beta_binomial_dist` for + distributional details. For prior work incorporating overdispersed + distributions see [1,2,3,4]. + + **References:** + + [1] D. Champredon, M. Li, B. Bolker. J. Dushoff (2018) + "Two approaches to forecast Ebola synthetic epidemics" + https://www.sciencedirect.com/science/article/pii/S1755436517300233 + [2] Carrie Reed et al. (2015) + "Estimating Influenza Disease Burden from Population-Based Surveillance + Data in the United States" + https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4349859/ + [3] A. Leonard, D. Weissman, B. Greenbaum, E. Ghedin, K. Koelle (2017) + "Transmission Bottleneck Size Estimation from Pathogen Deep-Sequencing + Data, with an Application to Human Influenza A Virus" + https://jvi.asm.org/content/jvi/91/14/e00171-17.full.pdf + [4] A. Miller, N. Foti, J. Lewnard, N. Jewell, C. Guestrin, E. Fox (2020) + "Mobility trends provide a leading indicator of changes in + SARS-CoV-2 transmission" + https://www.medrxiv.org/content/medrxiv/early/2020/05/11/2020.05.07.20094441.full.pdf + + :param int population: Total ``population = S + E + I + R``. + :param float incubation_time: Mean incubation time (duration in state + ``E``). Must be greater than 1. + :param float recovery_time: Mean recovery time (duration in state + ``I``). Must be greater than 1. + :param iterable data: Time series of new observed infections. Each time + step is Binomial distributed between 0 and the number of ``S -> E`` + transitions. This allows false negative but no false positives. + """ + + def __init__(self, population, incubation_time, recovery_time, data): + compartments = ("S", "E", "I") # R is implicit. + duration = len(data) + super().__init__(compartments, duration, population) + + assert isinstance(incubation_time, float) + assert incubation_time > 1 + self.incubation_time = incubation_time + + assert isinstance(recovery_time, float) + assert recovery_time > 1 + self.recovery_time = recovery_time + + self.data = data + + def global_model(self): + tau_e = self.incubation_time + tau_i = self.recovery_time + R0 = pyro.sample("R0", dist.LogNormal(0.0, 1.0)) + rho = pyro.sample("rho", dist.Beta(10, 10)) + od = pyro.sample("od", dist.Beta(2, 6)) + return R0, tau_e, tau_i, rho, od + + def initialize(self, params): + # Start with a single infection. + return {"S": self.population - 1, "E": 0, "I": 1} + + def transition(self, params, state, t): + R0, tau_e, tau_i, rho, od = params + + # Sample flows between compartments. + S2E = pyro.sample( + "S2E_{}".format(t), + infection_dist( + individual_rate=R0 / tau_i, + num_susceptible=state["S"], + num_infectious=state["I"], + population=self.population, + overdispersion=od, + ), + ) + E2I = pyro.sample( + "E2I_{}".format(t), binomial_dist(state["E"], 1 / tau_e, overdispersion=od) + ) + I2R = pyro.sample( + "I2R_{}".format(t), binomial_dist(state["I"], 1 / tau_i, overdispersion=od) + ) + + # Update compartments with flows. + state["S"] = state["S"] - S2E + state["E"] = state["E"] + S2E - E2I + state["I"] = state["I"] + E2I - I2R + + # Condition on observations. + t_is_observed = isinstance(t, slice) or t < self.duration + pyro.sample( + "obs_{}".format(t), + binomial_dist(S2E, rho, overdispersion=od), + obs=self.data[t] if t_is_observed else None, + ) + + +class SuperspreadingSIRModel(CompartmentalModel): + """ + Generalizes :class:`SimpleSIRModel` by adding superspreading effects. + + To customize this model we recommend forking and editing this class. + + This model accounts for superspreading (overdispersed individual + reproductive number) by assuming each infected individual infects + BetaBinomial-many susceptible individuals, where the BetaBinomial + distribution acts as an overdispersed Binomial distribution, adapting the + more standard NegativeBinomial distribution that acts as an overdispersed + Poisson distribution [1,2] to the setting of finite populations. To + preserve Markov structure, we follow [2] and assume all infections by a + single individual occur on the single time step where that individual makes + an ``I -> R`` transition. That is, whereas the :class:`SimpleSIRModel` + assumes infected individuals infect `Binomial(S,R/tau)`-many susceptible + individuals during each infected time step (over `tau`-many steps on + average), this model assumes they infect `BetaBinomial(k,...,S)`-many + susceptible individuals but only on the final time step before recovering. + + **References** + + [1] J. O. Lloyd-Smith, S. J. Schreiber, P. E. Kopp, W. M. Getz (2005) + "Superspreading and the effect of individual variation on disease + emergence" + https://www.nature.com/articles/nature04153.pdf + [2] Lucy M. Li, Nicholas C. Grassly, Christophe Fraser (2017) + "Quantifying Transmission Heterogeneity Using Both Pathogen Phylogenies + and Incidence Time Series" + https://academic.oup.com/mbe/article/34/11/2982/3952784 + + :param int population: Total ``population = S + I + R``. + :param float recovery_time: Mean recovery time (duration in state + ``I``). Must be greater than 1. + :param iterable data: Time series of new observed infections. Each time + step is Binomial distributed between 0 and the number of ``S -> I`` + transitions. This allows false negative but no false positives. + """ + + def __init__(self, population, recovery_time, data): + compartments = ("S", "I") # R is implicit. + duration = len(data) + super().__init__(compartments, duration, population) + + assert isinstance(recovery_time, float) + assert recovery_time > 1 + self.recovery_time = recovery_time + + self.data = data + + def global_model(self): + tau = self.recovery_time + R0 = pyro.sample("R0", dist.LogNormal(0.0, 1.0)) + k = pyro.sample("k", dist.Exponential(1.0)) + rho = pyro.sample("rho", dist.Beta(10, 10)) + return R0, k, tau, rho + + def initialize(self, params): + # Start with a single infection. + return {"S": self.population - 1, "I": 1} + + def transition(self, params, state, t): + R0, k, tau, rho = params + + # Sample flows between compartments. + I2R = pyro.sample("I2R_{}".format(t), binomial_dist(state["I"], 1 / tau)) + S2I = pyro.sample( + "S2I_{}".format(t), + infection_dist( + individual_rate=R0, + num_susceptible=state["S"], + num_infectious=state["I"], + population=self.population, + concentration=k, + ), + ) + + # Update compartments with flows. + state["S"] = state["S"] - S2I + state["I"] = state["I"] + S2I - I2R + + # Condition on observations. + t_is_observed = isinstance(t, slice) or t < self.duration + pyro.sample( + "obs_{}".format(t), + binomial_dist(S2I, rho), + obs=self.data[t] if t_is_observed else None, + ) + + +class SuperspreadingSEIRModel(CompartmentalModel): + r""" + Generalizes :class:`SimpleSEIRModel` by adding superspreading effects. + + To customize this model we recommend forking and editing this class. + + This model accounts for superspreading (overdispersed individual + reproductive number) by assuming each infected individual infects + BetaBinomial-many susceptible individuals, where the BetaBinomial + distribution acts as an overdispersed Binomial distribution, adapting the + more standard NegativeBinomial distribution that acts as an overdispersed + Poisson distribution [1,2] to the setting of finite populations. To + preserve Markov structure, we follow [2] and assume all infections by a + single individual occur on the single time step where that individual makes + an ``I -> R`` transition. That is, whereas the :class:`SimpleSEIRModel` + assumes infected individuals infect `Binomial(S,R/tau)`-many susceptible + individuals during each infected time step (over `tau`-many steps on + average), this model assumes they infect `BetaBinomial(k,...,S)`-many + susceptible individuals but only on the final time step before recovering. + + This model also adds an optional likelihood for observed phylogenetic data + in the form of coalescent times. These are provided as a pair + ``(leaf_times, coal_times)`` of times at which genomes are sequenced and + lineages coalesce, respectively. We incorporate this data using the + :class:`~pyro.distributions.CoalescentRateLikelihood` with base coalescence + rate computed from the ``S`` and ``I`` populations. This likelihood is + independent across time and preserves the Markov propert needed for + inference. + + **References** + + [1] J. O. Lloyd-Smith, S. J. Schreiber, P. E. Kopp, W. M. Getz (2005) + "Superspreading and the effect of individual variation on disease + emergence" + https://www.nature.com/articles/nature04153.pdf + [2] Lucy M. Li, Nicholas C. Grassly, Christophe Fraser (2017) + "Quantifying Transmission Heterogeneity Using Both Pathogen Phylogenies + and Incidence Time Series" + https://academic.oup.com/mbe/article/34/11/2982/3952784 + + :param int population: Total ``population = S + E + I + R``. + :param float incubation_time: Mean incubation time (duration in state + ``E``). Must be greater than 1. + :param float recovery_time: Mean recovery time (duration in state + ``I``). Must be greater than 1. + :param iterable data: Time series of new observed infections. Each time + step is Binomial distributed between 0 and the number of ``S -> E`` + transitions. This allows false negative but no false positives. + """ + + def __init__( + self, + population, + incubation_time, + recovery_time, + data, + *, + leaf_times=None, + coal_times=None + ): + compartments = ("S", "E", "I") # R is implicit. + duration = len(data) + super().__init__(compartments, duration, population) + + assert isinstance(incubation_time, float) + assert incubation_time > 1 + self.incubation_time = incubation_time + + assert isinstance(recovery_time, float) + assert recovery_time > 1 + self.recovery_time = recovery_time + + self.data = data + + assert (leaf_times is None) == (coal_times is None) + if leaf_times is None: + self.coal_likelihood = None + else: + self.coal_likelihood = dist.CoalescentRateLikelihood( + leaf_times, coal_times, duration + ) + + def global_model(self): + tau_e = self.incubation_time + tau_i = self.recovery_time + R0 = pyro.sample("R0", dist.LogNormal(0.0, 1.0)) + k = pyro.sample("k", dist.Exponential(1.0)) + rho = pyro.sample("rho", dist.Beta(10, 10)) + return R0, k, tau_e, tau_i, rho + + def initialize(self, params): + # Start with a single exposure. + return {"S": self.population - 1, "E": 0, "I": 1} + + def transition(self, params, state, t): + R0, k, tau_e, tau_i, rho = params + + # Sample flows between compartments. + E2I = pyro.sample("E2I_{}".format(t), binomial_dist(state["E"], 1 / tau_e)) + I2R = pyro.sample("I2R_{}".format(t), binomial_dist(state["I"], 1 / tau_i)) + S2E = pyro.sample( + "S2E_{}".format(t), + infection_dist( + individual_rate=R0, + num_susceptible=state["S"], + num_infectious=state["I"], + population=self.population, + concentration=k, + ), + ) + + # Condition on observations. + t_is_observed = isinstance(t, slice) or t < self.duration + pyro.sample( + "obs_{}".format(t), + binomial_dist(S2E, rho), + obs=self.data[t] if t_is_observed else None, + ) + if self.coal_likelihood is not None: + R = R0 * state["S"] / self.population + coal_rate = R * (1.0 + 1.0 / k) / (tau_i * state["I"] + 1e-8) + pyro.factor( + "coalescent_{}".format(t), + ( + self.coal_likelihood(coal_rate, t) + if t_is_observed + else torch.tensor(0.0) + ), + ) + + # Update compartements with flows. + state["S"] = state["S"] - S2E + state["E"] = state["E"] + S2E - E2I + state["I"] = state["I"] + E2I - I2R + + +class HeterogeneousSIRModel(CompartmentalModel): + """ + Generalizes :class:`SimpleSIRModel` by allowing ``Rt`` and ``rho`` to vary + in time. + + To customize this model we recommend forking and editing this class. + + In this model, the response rate ``rho`` is piecewise constant with unknown + value over three pieces. The reproductive number ``Rt`` is a product of a + constant ``R0`` with a factor ``beta`` that drifts via Brownian motion in + log space. Both ``rho`` and ``Rt`` are available as time series. + + :param int population: Total ``population = S + I + R``. + :param float recovery_time: Mean recovery time (duration in state + ``I``). Must be greater than 1. + :param iterable data: Time series of new observed infections. Each time + step is Binomial distributed between 0 and the number of ``S -> I`` + transitions. This allows false negative but no false positives. + """ + + def __init__(self, population, recovery_time, data): + compartments = ("S", "I") # R is implicit. + duration = len(data) + super().__init__(compartments, duration, population) + + assert isinstance(recovery_time, float) + assert recovery_time > 1 + self.recovery_time = recovery_time + + self.data = data + + def global_model(self): + tau = self.recovery_time + R0 = pyro.sample("R0", dist.LogNormal(0.0, 1.0)) + + # Let's consider a piecewise constant response rate, say low rate for + # two weeks, then intermediate rate as testing capacity increases, and + # finally high rate for a few months (as far into the future as we'd + # like to forecast). We don't know exactly what the rates are, but we + # can specify increasingly informative priors. + rho0 = pyro.sample("rho0", dist.Beta(2, 4)) + rho1 = pyro.sample("rho1", dist.Beta(4, 4)) + rho2 = pyro.sample("rho2", dist.Beta(8, 4)) + # Later .transition() will index into this time series as rho[..., t]. + rho = torch.cat( + [ + rho0.unsqueeze(-1).expand(rho0.shape + (14,)), + rho1.unsqueeze(-1).expand(rho1.shape + (7,)), + rho2.unsqueeze(-1).expand(rho2.shape + (60,)), + ], + dim=-1, + ) + # We can also save the time series for output in self.samples. + pyro.deterministic("rho", rho, event_dim=1) + + return R0, tau, rho + + def initialize(self, params): + R0, tau, rho = params + # Start with a single infection. + # We also store the initial beta value in the state dict. + return {"S": self.population - 1, "I": 1, "beta": torch.tensor(1.0)} + + def transition(self, params, state, t): + R0, tau, rho = params + + # Sample heterogeneous variables. + # This assumes beta slowly drifts via Brownian motion in log space. + beta = pyro.sample( + "beta_{}".format(t), dist.LogNormal(state["beta"].log(), 0.1) + ) + Rt = pyro.deterministic("Rt_{}".format(t), R0 * beta) + + # Sample flows between compartments. + S2I = pyro.sample( + "S2I_{}".format(t), + infection_dist( + individual_rate=Rt / tau, + num_susceptible=state["S"], + num_infectious=state["I"], + population=self.population, + ), + ) + I2R = pyro.sample("I2R_{}".format(t), binomial_dist(state["I"], 1 / tau)) + + # Update compartments and heterogeneous variables. + state["S"] = state["S"] - S2I + state["I"] = state["I"] + S2I - I2R + state["beta"] = beta # We store the latest beta value in the state dict. + + # Condition on observations. + # Note that, since rho may be batched over particles or samples, we + # need to index it via rho[..., t] rather than a simple rho[t]. + t_is_observed = isinstance(t, slice) or t < self.duration + pyro.sample( + "obs_{}".format(t), + binomial_dist(S2I, rho[..., t]), + obs=self.data[t] if t_is_observed else None, + ) + + +class SparseSIRModel(CompartmentalModel): + """ + Generalizes :class:`SimpleSIRModel` to allow sparsely observed infections. + + To customize this model we recommend forking and editing this class. + + This model allows observations of **cumulative** infections at uneven time + intervals. To preserve Markov structure (and hence tractable inference) + this model adds an auxiliary compartment ``O`` denoting the fully-observed + cumulative number of observations at each time point. At observed times + (when ``mask[t] == True``) ``O`` must exactly match the provided data; + between observed times ``O`` stochastically imputes the provided data. + + This model demonstrates how to implement a custom :meth:`compute_flows` + method. A custom method is needed in this model because inhabitants of the + ``S`` compartment can transition to both the ``I`` and ``O`` compartments, + allowing duplication. + + :param int population: Total ``population = S + I + R``. + :param float recovery_time: Mean recovery time (duration in state + ``I``). Must be greater than 1. + :param iterable data: Time series of **cumulative** observed infections. + Whenever ``mask[t] == True``, ``data[t]`` corresponds to an + observation; otherwise ``data[t]`` can be arbitrary, e.g. NAN. + :param iterable mask: Boolean time series denoting whether an observation + is made at each time step. Should satisfy ``len(mask) == len(data)``. + """ + + def __init__(self, population, recovery_time, data, mask): + assert len(data) == len(mask) + duration = len(data) + compartments = ("S", "I", "O") # O is auxiliary, R is implicit. + super().__init__(compartments, duration, population) + + assert isinstance(recovery_time, float) + assert recovery_time > 1 + self.recovery_time = recovery_time + + self.data = data + self.mask = mask + + def global_model(self): + tau = self.recovery_time + R0 = pyro.sample("R0", dist.LogNormal(0.0, 1.0)) + rho = pyro.sample("rho", dist.Beta(10, 10)) + return R0, tau, rho + + def initialize(self, params): + # Start with a single infection. + return {"S": self.population - 1, "I": 1, "O": 0} + + def transition(self, params, state, t): + R0, tau, rho = params + + # Sample flows between compartments. + S2I = pyro.sample( + "S2I_{}".format(t), + infection_dist( + individual_rate=R0 / tau, + num_susceptible=state["S"], + num_infectious=state["I"], + population=self.population, + ), + ) + I2R = pyro.sample("I2R_{}".format(t), binomial_dist(state["I"], 1 / tau)) + S2O = pyro.sample("S2O_{}".format(t), binomial_dist(S2I, rho)) + + # Update compartments with flows. + state["S"] = state["S"] - S2I + state["I"] = state["I"] + S2I - I2R + state["O"] = state["O"] + S2O + + # Condition on cumulative observations. + t_is_observed = isinstance(t, slice) or t < self.duration + mask_t = self.mask[t] if t_is_observed else False + data_t = self.data[t] if t_is_observed else None + pyro.sample( + "obs_{}".format(t), + # FIXME Delta is incompatible with relaxed inference. + dist.Delta(state["O"]).mask(mask_t), + obs=data_t, + ) + + def compute_flows(self, prev, curr, t): + # Reverse the flow computation. + S2I = prev["S"] - curr["S"] + I2R = prev["I"] - curr["I"] + S2I + S2O = curr["O"] - prev["O"] + return { + "S2I_{}".format(t): S2I, + "I2R_{}".format(t): I2R, + "S2O_{}".format(t): S2O, + } + + +class UnknownStartSIRModel(CompartmentalModel): + """ + Generalizes :class:`SimpleSIRModel` by allowing unknown date of first + infection. + + To customize this model we recommend forking and editing this class. + + This model demonstrates: + + 1. How to incorporate spontaneous infections from external sources; + 2. How to incorporate time-varying piecewise ``rho`` by supporting + forecasting in :meth:`transition`. + 3. How to override the :meth:`predict` method to compute extra + statistics. + + :param int population: Total ``population = S + I + R``. + :param float recovery_time: Mean recovery time (duration in state + ``I``). Must be greater than 1. + :param int pre_obs_window: Number of time steps before beginning ``data`` + where the initial infection may have occurred. Must be positive. + :param iterable data: Time series of new observed infections. Each time + step is Binomial distributed between 0 and the number of ``S -> I`` + transitions. This allows false negative but no false positives. + """ + + def __init__(self, population, recovery_time, pre_obs_window, data): + compartments = ("S", "I") # R is implicit. + duration = pre_obs_window + len(data) + super().__init__(compartments, duration, population) + + assert isinstance(recovery_time, float) + assert recovery_time > 1 + self.recovery_time = recovery_time + + assert isinstance(pre_obs_window, int) and pre_obs_window > 0 + self.pre_obs_window = pre_obs_window + self.post_obs_window = len(data) + + # We set a small time-constant external infecton rate such that on + # average there is a single external infection during the + # pre_obs_window. This allows unknown time of initial infection + # without introducing long-range coupling across time. + self.external_rate = 1 / pre_obs_window + + # Prepend data with zeros. + if isinstance(data, list): + data = [0.0] * self.pre_obs_window + data + else: + data = pad(data, (self.pre_obs_window, 0), value=0.0) + self.data = data + + def global_model(self): + tau = self.recovery_time + R0 = pyro.sample("R0", dist.LogNormal(0.0, 1.0)) + + # Assume two different response rates: rho0 before any observations + # were made (in pre_obs_window), followed by a higher response rate rho1 + # after observations were made (in post_obs_window). + rho0 = pyro.sample("rho0", dist.Beta(10, 10)) + rho1 = pyro.sample("rho1", dist.Beta(10, 10)) + # Whereas each of rho0,rho1 are scalars (possibly batched over samples), + # we construct a time series rho with an extra time dim on the right. + rho = torch.cat( + [ + rho0.unsqueeze(-1).expand(rho0.shape + (self.pre_obs_window,)), + rho1.unsqueeze(-1).expand(rho1.shape + (self.post_obs_window,)), + ], + dim=-1, + ) + + # Model external infections as an infectious pseudo-individual added + # to num_infectious when sampling S2I below. + X = self.external_rate * tau / R0 + + return R0, X, tau, rho + + def initialize(self, params): + # Start with no internal infections. + return {"S": self.population, "I": 0} + + def transition(self, params, state, t): + R0, X, tau, rho = params + + # Sample flows between compartments. + S2I = pyro.sample( + "S2I_{}".format(t), + infection_dist( + individual_rate=R0 / tau, + num_susceptible=state["S"], + num_infectious=state["I"] + X, + population=self.population, + ), + ) + I2R = pyro.sample("I2R_{}".format(t), binomial_dist(state["I"], 1 / tau)) + + # Update compartments with flows. + state["S"] = state["S"] - S2I + state["I"] = state["I"] + S2I - I2R + + # In .transition() t will always be an integer but may lie outside + # of [0,self.duration) when forecasting. + t_is_observed = isinstance(t, slice) or t < self.duration + rho_t = rho[..., t] if t_is_observed else rho[..., -1] + data_t = self.data[t] if t_is_observed else None + + # Condition on observations. + pyro.sample("obs_{}".format(t), binomial_dist(S2I, rho_t), obs=data_t) + + def predict(self, forecast=0): + """ + Augments + :meth:`~pyro.contrib.epidemiology.compartmental.Compartmental.predict` + with samples of ``first_infection`` i.e. the first time index at which + the infection ``I`` becomes nonzero. Note this is measured from the + beginning of ``pre_obs_window``, not the beginning of data. + + :param int forecast: The number of time steps to forecast forward. + :returns: A dictionary mapping sample site name (or compartment name) + to a tensor whose first dimension corresponds to sample batching. + :rtype: dict + """ + samples = super().predict(forecast) + + # Extract the time index of the first infection (samples["I"] > 0) + # for each sample trajectory in the samples["I"] tensor. + samples["first_infection"] = samples["I"].cumsum(-1).eq(0).sum(-1) + + return samples + + +class RegionalSIRModel(CompartmentalModel): + r""" + Generalizes :class:`SimpleSIRModel` to simultaneously model multiple + regions with weak coupling across regions. + + To customize this model we recommend forking and editing this class. + + Regions are coupled by a ``coupling`` matrix with entries in ``[0,1]``. + The all ones matrix is equivalent to a single region. The identity matrix + is equivalent to a set of independent regions. This need not be symmetric, + but symmetric matrices are probably more physically plausible. The expected + number of new infections each time step ``S2I`` is Binomial distributed + with mean:: + + E[S2I] = S (1 - (1 - R0 / (population @ coupling)) ** (I @ coupling)) + ≈ R0 S (I @ coupling) / (population @ coupling) # for small I + + Thus in a nearly entirely susceptible population, a single infected + individual infects approximately ``R0`` new individuals on average, + independent of ``coupling``. + + This model demonstrates: + + 1. How to create a regional model with a ``population`` vector. + 2. How to model both homogeneous parameters (here ``R0``) and + heterogeneous parameters with hierarchical structure (here ``rho``) + using ``self.region_plate``. + 3. How to approximately couple regions in :meth:`transition` using + ``state["I_approx"]``. + + :param torch.Tensor population: Tensor of per-region populations, defining + ``population = S + I + R``. + :param torch.Tensor coupling: Pairwise coupling matrix. Entries should be + in ``[0,1]``. + :param float recovery_time: Mean recovery time (duration in state ``I``). + Must be greater than 1. + :param iterable data: Time x Region sized tensor of new observed + infections. Each time step is vector of Binomials distributed between + 0 and the number of ``S -> I`` transitions. This allows false negative + but no false positives. + """ + + def __init__(self, population, coupling, recovery_time, data): + duration = len(data) + (num_regions,) = population.shape + assert coupling.shape == (num_regions, num_regions) + assert (0 <= coupling).all() + assert (coupling <= 1).all() + assert isinstance(recovery_time, float) + assert recovery_time > 1 + if isinstance(data, torch.Tensor): + # Data tensors should be oriented as (time, region). + assert data.shape == (duration, num_regions) + compartments = ("S", "I") # R is implicit. + + # We create a regional model by passing a vector of populations. + super().__init__(compartments, duration, population, approximate=("I",)) + + self.coupling = coupling + self.recovery_time = recovery_time + self.data = data + + def global_model(self): + # Assume recovery time is a known constant. + tau = self.recovery_time + + # Assume reproductive number is unknown but homogeneous. + R0 = pyro.sample("R0", dist.LogNormal(0.0, 1.0)) + + # Assume response rate is heterogeneous and model it with a + # hierarchical Gamma-Beta prior. + rho_c1 = pyro.sample("rho_c1", dist.Gamma(10, 1)) + rho_c0 = pyro.sample("rho_c0", dist.Gamma(10, 1)) + with self.region_plate: + rho = pyro.sample("rho", dist.Beta(rho_c1, rho_c0)) + + return R0, tau, rho + + def initialize(self, params): + # Start with a single infection in region 0. + I = torch.zeros_like(self.population) + I[0] += 1 + S = self.population - I + return {"S": S, "I": I} + + def transition(self, params, state, t): + R0, tau, rho = params + + # Account for infections from all regions. This uses approximate (point + # estimate) counts I_approx for infection from other regions, but uses + # the exact (enumerated) count I for infections from one's own region. + I_coupled = state["I_approx"] @ self.coupling + I_coupled = I_coupled + (state["I"] - state["I_approx"]) * self.coupling.diag() + I_coupled = I_coupled.clamp(min=0) # In case I_approx is negative. + pop_coupled = self.population @ self.coupling + + with self.region_plate: + # Sample flows between compartments. + S2I = pyro.sample( + "S2I_{}".format(t), + infection_dist( + individual_rate=R0 / tau, + num_susceptible=state["S"], + num_infectious=I_coupled, + population=pop_coupled, + ), + ) + I2R = pyro.sample("I2R_{}".format(t), binomial_dist(state["I"], 1 / tau)) + + # Update compartments with flows. + state["S"] = state["S"] - S2I + state["I"] = state["I"] + S2I - I2R + + # Condition on observations. + t_is_observed = isinstance(t, slice) or t < self.duration + pyro.sample( + "obs_{}".format(t), + binomial_dist(S2I, rho), + obs=self.data[t] if t_is_observed else None, + ) + + +class HeterogeneousRegionalSIRModel(CompartmentalModel): + """ + Generalizes :class:`RegionalSIRModel` by allowing ``Rt`` and ``rho`` to vary + in time. + + To customize this model we recommend forking and editing this class. + + In this model, the response rate ``rho`` varies across time and region, + whereas the reproductive number ``Rt`` varies in time but is shared among + regions. Both parameters drift according to transformed Brownian motion + with learned drift rate. + + This model demonstrates how to model hierarchical latent time series, + other than compartmental variables. + + :param torch.Tensor population: Tensor of per-region populations, defining + ``population = S + I + R``. + :param torch.Tensor coupling: Pairwise coupling matrix. Entries should be + in ``[0,1]``. + :param float recovery_time: Mean recovery time (duration in state ``I``). + Must be greater than 1. + :param iterable data: Time x Region sized tensor of new observed + infections. Each time step is vector of Binomials distributed between + 0 and the number of ``S -> I`` transitions. This allows false negative + but no false positives. + """ + + def __init__(self, population, coupling, recovery_time, data): + duration = len(data) + (num_regions,) = population.shape + assert coupling.shape == (num_regions, num_regions) + assert (0 <= coupling).all() + assert (coupling <= 1).all() + assert isinstance(recovery_time, float) + assert recovery_time > 1 + if isinstance(data, torch.Tensor): + # Data tensors should be oriented as (time, region). + assert data.shape == (duration, num_regions) + compartments = ("S", "I") # R is implicit. + + # We create a regional model by passing a vector of populations. + super().__init__(compartments, duration, population, approximate=("I",)) + + self.coupling = coupling + self.recovery_time = recovery_time + self.data = data + + def global_model(self): + tau = self.recovery_time + + # Assume reproductive number is heterogeneous but shared among regions. + R0 = pyro.sample("R0", dist.LogNormal(0.0, 1.0)) + R_drift = pyro.sample("R_drift", dist.LogNormal(-3.0, 1.0)) + + # Assume response rate is heterogeneous in time and region. + with self.region_plate: + rho0 = pyro.sample("rho0", dist.Beta(4, 4)) + rho_drift = pyro.sample("rho_drift", dist.LogNormal(-3.0, 1.0)) + + return tau, R0, R_drift, rho0, rho_drift + + def initialize(self, params): + # Start with a single infection in region 0. + I = torch.zeros_like(self.population) + I[0] += 1 + S = self.population - I + return { + "S": S, + "I": I, + "R_factor": torch.tensor(1.0), + "rho_shift": torch.tensor(0.0), + } + + def transition(self, params, state, t): + tau, R0, R_drift, rho0, rho_drift = params + + # Account for infections from all regions. This uses approximate (point + # estimate) counts I_approx for infection from other regions, but uses + # the exact (enumerated) count I for infections from one's own region. + I_coupled = state["I_approx"] @ self.coupling + I_coupled = I_coupled + (state["I"] - state["I_approx"]) * self.coupling.diag() + I_coupled = I_coupled.clamp(min=0) # In case I_approx is negative. + pop_coupled = self.population @ self.coupling + + # Sample region-global time-heterogeneous variables. + R_factor = pyro.sample( + "R_factor_{}".format(t), dist.LogNormal(state["R_factor"].log(), R_drift) + ) + Rt = pyro.deterministic("Rt_{}".format(t), R0 * R_factor) + + with self.region_plate: + # Sample region-local time-heterogeneous variables. + rho_shift = pyro.sample( + "rho_shift_{}".format(t), dist.Normal(state["rho_shift"], rho_drift) + ) + rho = pyro.deterministic( + "rho_{}".format(t), (rho0.log() - (-rho0).log1p() + rho_shift).sigmoid() + ) + + # Sample flows between compartments. + S2I = pyro.sample( + "S2I_{}".format(t), + infection_dist( + individual_rate=Rt / tau, + num_susceptible=state["S"], + num_infectious=I_coupled, + population=pop_coupled, + ), + ) + I2R = pyro.sample("I2R_{}".format(t), binomial_dist(state["I"], 1 / tau)) + + # Update compartments and heterogeneous variables. + state["S"] = state["S"] - S2I + state["I"] = state["I"] + S2I - I2R + state["R_factor"] = R_factor + state["rho_shift"] = rho_shift + + # Condition on observations. + t_is_observed = isinstance(t, slice) or t < self.duration + pyro.sample( + "obs_{}".format(t), + binomial_dist(S2I, rho), + obs=self.data[t] if t_is_observed else None, + ) + + +# Create sphinx documentation. +__all__ = [] +for _name, _Model in list(locals().items()): + if isinstance(_Model, type) and issubclass(_Model, CompartmentalModel): + if _Model is not CompartmentalModel: + __all__.append(_name) +__all__.sort( + key=lambda name, vals=locals(): vals[name].__init__.__code__.co_firstlineno +) +__doc__ = "\n\n".join( + [ + """ + {} + ---------------------------------------------------------------- + .. autoclass:: pyro.contrib.epidemiology.models.{} + """.format( + re.sub("([A-Z][a-z]+)", r"\1 ", _name[:-5]), _name + ) + for _name in __all__ + ] +) diff --git a/pyro/source/pyro/contrib/epidemiology/util.py b/pyro/source/pyro/contrib/epidemiology/util.py new file mode 100644 index 0000000000000000000000000000000000000000..c8eab29dfc23d4dee02c564dba2fcaef1f616672 --- /dev/null +++ b/pyro/source/pyro/contrib/epidemiology/util.py @@ -0,0 +1,379 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import numpy as np +import torch + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.distributions.util import broadcast_shape +from pyro.ops.special import safe_log + + +def clamp(tensor, *, min=None, max=None): + """ + Like :func:`torch.clamp` but dispatches to :func:`torch.min` and/or + :func:`torch.max` if ``min`` and/or ``max`` is a :class:`~torch.Tensor`. + """ + if isinstance(min, torch.Tensor): + tensor = torch.max(tensor, min) + min = None + if isinstance(max, torch.Tensor): + tensor = torch.min(tensor, max) + max = None + if min is None and max is None: + return tensor + return tensor.clamp(min=min, max=max) + + +def cat2(lhs, rhs, *, dim=-1): + """ + Like ``torch.cat([lhs, rhs], dim=dim)`` but dispatches to + :func:`torch.nn.functional.pad` in case one of ``lhs`` or ``rhs`` is a + scalar. + """ + assert dim < 0 + if not isinstance(lhs, torch.Tensor): + pad = (0, 0) * (-1 - dim) + (1, 0) + return torch.nn.functional.pad(rhs, pad, value=lhs) + if not isinstance(rhs, torch.Tensor): + pad = (0, 0) * (-1 - dim) + (0, 1) + return torch.nn.functional.pad(lhs, pad, value=rhs) + + diff = lhs.dim() - rhs.dim() + if diff > 0: + rhs = rhs.expand((1,) * diff + rhs.shape) + elif diff < 0: + diff = -diff + lhs = lhs.expand((1,) * diff + lhs.shape) + shape = list(broadcast_shape(lhs.shape, rhs.shape)) + shape[dim] = -1 + return torch.cat([lhs.expand(shape), rhs.expand(shape)], dim=dim) + + +@torch.no_grad() +def align_samples(samples, model, particle_dim): + """ + Unsqueeze stacked samples such that their particle dim all aligns. + This traces ``model`` to determine the ``event_dim`` of each site. + """ + assert particle_dim < 0 + + sample = {name: value[0] for name, value in samples.items()} + with poutine.block(), poutine.trace() as tr, poutine.condition(data=sample): + model() + + samples = samples.copy() + for name, value in samples.items(): + event_dim = tr.trace.nodes[name]["fn"].event_dim + pad = event_dim - particle_dim - value.dim() + if pad < 0: + raise ValueError("Cannot align samples, try moving particle_dim left") + if pad > 0: + shape = value.shape[:1] + (1,) * pad + value.shape[1:] + samples[name] = value.reshape(shape) + + return samples + + +# this 8 x 10 tensor encodes the coefficients of 8 10-dimensional polynomials +# that are used to construct the num_quant_bins=16 quantization strategy + +W16 = [ + [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.1562511562511555e-07], + [ + 1.1562511562511557e-07, + 1.04062604062604e-06, + 4.16250416250416e-06, + 9.712509712509707e-06, + 1.456876456876456e-05, + 1.4568764568764562e-05, + 9.712509712509707e-06, + 4.16250416250416e-06, + 1.04062604062604e-06, + -6.937506937506934e-07, + ], + [ + 5.839068339068337e-05, + 0.0002591158841158841, + 0.0005036630036630038, + 0.0005536130536130536, + 0.00036421911421911425, + 0.00013111888111888106, + 9.712509712509736e-06, + -1.2487512487512482e-05, + -5.2031302031302014e-06, + 1.6187516187516182e-06, + ], + [ + 0.0018637612387612374, + 0.004983558108558107, + 0.005457042957042955, + 0.0029234654234654212, + 0.000568181818181818, + -0.0001602564102564102, + -8.741258741258739e-05, + 4.162504162504162e-06, + 9.365634365634364e-06, + -1.7536475869809201e-06, + ], + [ + 0.015560115039281694, + 0.025703289765789755, + 0.015009296259296255, + 0.0023682336182336166, + -0.000963966588966589, + -0.00029380341880341857, + 5.6656306656306665e-05, + 1.5956265956265953e-05, + -6.417193917193917e-06, + 7.515632515632516e-07, + ], + [ + 0.057450111616778265, + 0.05790875790875791, + 0.014424464424464418, + -0.0030303030303030303, + -0.0013791763791763793, + 0.00011655011655011669, + 5.180005180005181e-05, + -8.325008325008328e-06, + 3.4687534687534703e-07, + 0.0, + ], + [ + 0.12553422657589322, + 0.072988122988123, + -0.0011641136641136712, + -0.006617456617456618, + -0.00028651903651903725, + 0.00027195027195027195, + 3.2375032375032334e-06, + -5.550005550005552e-06, + 3.4687534687534703e-07, + 0.0, + ], + [ + 0.21761806865973532, + 1.7482707128494565e-17, + -0.028320290820290833, + 0.0, + 0.0014617327117327117, + 0.0, + -3.561253561253564e-05, + 0.0, + 3.4687534687534714e-07, + 0.0, + ], +] + +W16 = np.array(W16) + + +def compute_bin_probs(s, num_quant_bins): + """ + Compute categorical probabilities for a quantization scheme with num_quant_bins many + bins. `s` is a real-valued tensor with values in [0, 1]. Returns probabilities + of shape `s.shape` + `(num_quant_bins,)` + """ + + t = 1 - s + + if num_quant_bins == 2: + probs = torch.stack([t, s], dim=-1) + return probs + + ss = s * s + tt = t * t + + if num_quant_bins == 4: + # This cubic spline interpolates over the nearest four integers, ensuring + # piecewise quadratic gradients. + probs = torch.stack( + [ + t * tt, + 4 + ss * (3 * s - 6), + 4 + tt * (3 * t - 6), + s * ss, + ], + dim=-1, + ) * (1 / 6) + return probs + + if num_quant_bins == 8: + # This quintic spline interpolates over the nearest eight integers, ensuring + # piecewise quartic gradients. + s3 = ss * s + s4 = ss * ss + s5 = s3 * ss + + t3 = tt * t + t4 = tt * tt + t5 = t3 * tt + + probs = torch.stack( + [ + 2 * t5, + 2 + 10 * t + 20 * tt + 20 * t3 + 10 * t4 - 7 * t5, + 55 + 115 * t + 70 * tt - 9 * t3 - 25 * t4 + 7 * t5, + 302 - 100 * ss + 10 * s4, + 302 - 100 * tt + 10 * t4, + 55 + 115 * s + 70 * ss - 9 * s3 - 25 * s4 + 7 * s5, + 2 + 10 * s + 20 * ss + 20 * s3 + 10 * s4 - 7 * s5, + 2 * s5, + ], + dim=-1, + ) * (1 / 840) + return probs + + if num_quant_bins == 12: + # This septic spline interpolates over the nearest 12 integers + s3 = ss * s + s4 = ss * ss + s5 = s3 * ss + s6 = s3 * s3 + s7 = s4 * s3 + + t3 = tt * t + t4 = tt * tt + t5 = t3 * tt + t6 = t3 * t3 + t7 = t4 * t3 + + probs = torch.stack( + [ + 693 * t7, + 693 + + 4851 * t + + 14553 * tt + + 24255 * t3 + + 24255 * t4 + + 14553 * t5 + + 4851 * t6 + - 3267 * t7, + 84744 + + 282744 * t + + 382536 * tt + + 249480 * t3 + + 55440 * t4 + - 24948 * t5 + - 18018 * t6 + + 5445 * t7, + 1017423 + + 1823283 * t + + 1058211 * tt + + 51975 * t3 + - 148995 * t4 + - 18711 * t5 + + 20097 * t6 + - 3267 * t7, + 3800016 + + 3503808 * t + + 365904 * tt + - 443520 * t3 + - 55440 * t4 + + 33264 * t5 + - 2772 * t6, + 8723088 - 1629936 * ss + 110880.0 * s4 - 2772 * s6, + 8723088 - 1629936 * tt + 110880.0 * t4 - 2772 * t6, + 3800016 + + 3503808 * s + + 365904 * ss + - 443520 * s3 + - 55440 * s4 + + 33264 * s5 + - 2772 * s6, + 1017423 + + 1823283 * s + + 1058211 * ss + + 51975 * s3 + - 148995 * s4 + - 18711 * s5 + + 20097 * s6 + - 3267 * s7, + 84744 + + 282744 * s + + 382536 * ss + + 249480 * s3 + + 55440 * s4 + - 24948 * s5 + - 18018 * s6 + + 5445 * s7, + 693 + + 4851 * s + + 14553 * ss + + 24255 * s3 + + 24255 * s4 + + 14553 * s5 + + 4851 * s6 + - 3267 * s7, + 693 * s7, + ], + dim=-1, + ) * (1 / 32931360) + return probs + + if num_quant_bins == 16: + # This nonic spline interpolates over the nearest 16 integers + w16 = torch.from_numpy(W16).to(s.device).type_as(s) + s_powers = s.unsqueeze(-1).unsqueeze(-1).pow(torch.arange(10.0)) + t_powers = t.unsqueeze(-1).unsqueeze(-1).pow(torch.arange(10.0)) + splines_t = (w16 * t_powers).sum(-1) + splines_s = (w16 * s_powers).sum(-1) + index = [0, 1, 2, 3, 4, 5, 6, 15, 7, 14, 13, 12, 11, 10, 9, 8] + probs = torch.cat([splines_t, splines_s], dim=-1) + probs = probs.index_select(-1, torch.tensor(index)) + return probs + + raise ValueError("Unsupported num_quant_bins: {}".format(num_quant_bins)) + + +def _all(x): + return x.all() if isinstance(x, torch.Tensor) else x + + +def _unsqueeze(x): + return x.unsqueeze(-1) if isinstance(x, torch.Tensor) else x + + +def quantize(name, x_real, min, max, num_quant_bins=4): + """Randomly quantize in a way that preserves probability mass.""" + assert _all(min < max) + if num_quant_bins == 1: + x = x_real.detach().round() + return pyro.deterministic(name, x, event_dim=0) + + lb = x_real.detach().floor() + + probs = compute_bin_probs(x_real - lb, num_quant_bins=num_quant_bins) + + q = pyro.sample( + "Q_" + name, dist.Categorical(probs), infer={"enumerate": "parallel"} + ) + q = q.type_as(x_real) - (num_quant_bins // 2 - 1) + + x = lb + q + x = torch.max(x, 2 * min - 1 - x) + x = torch.min(x, 2 * max + 1 - x) + + return pyro.deterministic(name, x, event_dim=0) + + +def quantize_enumerate(x_real, min, max, num_quant_bins=4): + """Quantize, then manually enumerate.""" + assert _all(min < max) + lb = x_real.detach().floor() + + probs = compute_bin_probs(x_real - lb, num_quant_bins=num_quant_bins) + logits = safe_log(probs) + + arange_min = 1 - num_quant_bins // 2 + arange_max = 1 + num_quant_bins // 2 + q = torch.arange(arange_min, arange_max) + + x = lb.unsqueeze(-1) + q + x = torch.max(x, 2 * _unsqueeze(min) - 1 - x) + x = torch.min(x, 2 * _unsqueeze(max) + 1 - x) + + return x, logits diff --git a/pyro/source/pyro/contrib/examples/__init__.py b/pyro/source/pyro/contrib/examples/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/pyro/contrib/examples/bart.py b/pyro/source/pyro/contrib/examples/bart.py new file mode 100644 index 0000000000000000000000000000000000000000..f85c61d417df8a4ae647afd200313373192426d9 --- /dev/null +++ b/pyro/source/pyro/contrib/examples/bart.py @@ -0,0 +1,188 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import argparse +import bz2 +import csv +import datetime +import logging +import multiprocessing +import os +import subprocess +import sys +import urllib +from functools import partial + +import torch + +from pyro.contrib.examples.util import _mkdir_p, get_data_directory + +DATA = get_data_directory(__file__) + +# https://www.bart.gov/about/reports/ridership +SOURCE_DIR = "http://64.111.127.166/origin-destination/" +SOURCE_FILES = [ + "date-hour-soo-dest-2011.csv.gz", + "date-hour-soo-dest-2012.csv.gz", + "date-hour-soo-dest-2013.csv.gz", + "date-hour-soo-dest-2014.csv.gz", + "date-hour-soo-dest-2015.csv.gz", + "date-hour-soo-dest-2016.csv.gz", + "date-hour-soo-dest-2017.csv.gz", + "date-hour-soo-dest-2018.csv.gz", + "date-hour-soo-dest-2019.csv.gz", +] +CACHE_URL = ( + "https://github.com/pyro-ppl/datasets/blob/master/bart_full.pkl.bz2?raw=true" +) + + +def _load_hourly_od(basename): + filename = os.path.join(DATA, basename.replace(".csv.gz", ".pkl")) + if os.path.exists(filename): + return filename + + # Download source files. + gz_filename = os.path.join(DATA, basename) + if not os.path.exists(gz_filename): + url = SOURCE_DIR + basename + logging.debug("downloading {}".format(url)) + urllib.request.urlretrieve(url, gz_filename) + csv_filename = gz_filename[:-3] + assert csv_filename.endswith(".csv") + if not os.path.exists(csv_filename): + logging.debug("unzipping {}".format(gz_filename)) + subprocess.check_call(["gunzip", "-k", gz_filename]) + assert os.path.exists(csv_filename) + + # Convert to PyTorch. + logging.debug("converting {}".format(csv_filename)) + start_date = datetime.datetime.strptime("2000-01-01", "%Y-%m-%d") + stations = {} + num_rows = sum(1 for _ in open(csv_filename)) + logging.info("Formatting {} rows".format(num_rows)) + rows = torch.empty((num_rows, 4), dtype=torch.long) + with open(csv_filename) as f: + for i, (date, hour, origin, destin, trip_count) in enumerate(csv.reader(f)): + date = datetime.datetime.strptime(date, "%Y-%m-%d") + date += datetime.timedelta(hours=int(hour)) + rows[i, 0] = int((date - start_date).total_seconds() / 3600) + rows[i, 1] = stations.setdefault(origin, len(stations)) + rows[i, 2] = stations.setdefault(destin, len(stations)) + rows[i, 3] = int(trip_count) + if i % 10000 == 0: + sys.stderr.write(".") + sys.stderr.flush() + + # Save data with metadata. + dataset = { + "basename": basename, + "start_date": start_date, + "stations": stations, + "rows": rows, + "schema": ["time_hours", "origin", "destin", "trip_count"], + } + dataset["rows"] + logging.debug("saving {}".format(filename)) + torch.save(dataset, filename) + return filename + + +def load_bart_od(): + """ + Load a dataset of hourly origin-destination ridership counts for every pair + of BART stations during the years 2011-2019. + + **Source** https://www.bart.gov/about/reports/ridership + + This downloads the dataset the first time it is called. On subsequent calls + this reads from a local cached file ``.pkl.bz2``. This attempts to + download a preprocessed compressed cached file maintained by the Pyro team. + On cache hit this should be very fast. On cache miss this falls back to + downloading the original data source and preprocessing the dataset, + requiring about 350MB of file transfer, storing a few GB of temp files, and + taking upwards of 30 minutes. + + :returns: a dataset is a dictionary with fields: + + - "stations": a list of strings of station names + - "start_date": a :py:class:`datetime.datetime` for the first observaion + - "counts": a ``torch.FloatTensor`` of ridership counts, with shape + ``(num_hours, len(stations), len(stations))``. + """ + _mkdir_p(DATA) + filename = os.path.join(DATA, "bart_full.pkl.bz2") + # Work around apparent bug in torch.load(),torch.save(). + pkl_file = filename.rsplit(".", 1)[0] + if not os.path.exists(pkl_file): + try: + urllib.request.urlretrieve(CACHE_URL, filename) + logging.debug("cache hit, uncompressing") + with bz2.BZ2File(filename) as src, open(filename[:-4], "wb") as dst: + dst.write(src.read()) + except urllib.error.HTTPError: + logging.debug("cache miss, preprocessing from scratch") + if os.path.exists(pkl_file): + return torch.load(pkl_file, weights_only=False) + + filenames = multiprocessing.Pool(len(SOURCE_FILES)).map( + _load_hourly_od, SOURCE_FILES + ) + datasets = list(map(partial(torch.load, weights_only=False), filenames)) + + stations = sorted(set().union(*(d["stations"].keys() for d in datasets))) + min_time = min(int(d["rows"][:, 0].min()) for d in datasets) + max_time = max(int(d["rows"][:, 0].max()) for d in datasets) + num_rows = max_time - min_time + 1 + start_date = (datasets[0]["start_date"] + datetime.timedelta(hours=min_time),) + logging.info( + "Loaded data from {} stations, {} hours".format(len(stations), num_rows) + ) + + result = torch.zeros(num_rows, len(stations), len(stations)) + for dataset in datasets: + part_stations = sorted(dataset["stations"], key=dataset["stations"].__getitem__) + part_to_whole = torch.tensor(list(map(stations.index, part_stations))) + time = dataset["rows"][:, 0] - min_time + origin = part_to_whole[dataset["rows"][:, 1]] + destin = part_to_whole[dataset["rows"][:, 2]] + count = dataset["rows"][:, 3].float() + result[time, origin, destin] = count + dataset.clear() + logging.info( + "Loaded {} shaped data of mean {:0.3g}".format(result.shape, result.mean()) + ) + + dataset = { + "stations": stations, + "start_date": start_date, + "counts": result, + } + torch.save(dataset, pkl_file) + subprocess.check_call(["bzip2", "-k", pkl_file]) + assert os.path.exists(filename) + return dataset + + +def load_fake_od(): + """ + Create a tiny synthetic dataset for smoke testing. + """ + dataset = { + "stations": ["12TH", "EMBR", "SFIA"], + "start_date": datetime.datetime.strptime("2000-01-01", "%Y-%m-%d"), + "counts": torch.distributions.Poisson(100).sample([24 * 7 * 8, 3, 3]), + } + return dataset + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="BART data preprocessor") + parser.add_argument("-v", "--verbose", action="store_true") + args = parser.parse_args() + + logging.basicConfig( + format="%(relativeCreated) 9d %(message)s", + level=logging.DEBUG if args.verbose else logging.INFO, + ) + load_bart_od() diff --git a/pyro/source/pyro/contrib/examples/finance.py b/pyro/source/pyro/contrib/examples/finance.py new file mode 100644 index 0000000000000000000000000000000000000000..73ef0b36060bcd7f8452fddffe879ba42947b85c --- /dev/null +++ b/pyro/source/pyro/contrib/examples/finance.py @@ -0,0 +1,26 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import os +import urllib + +import pandas as pd + +from pyro.contrib.examples.util import _mkdir_p, get_data_directory + +DATA = get_data_directory(__file__) + +# https://finance.yahoo.com/quote/%5EGSPC/history/ +CACHE_URL = "https://github.com/pyro-ppl/datasets/blob/master/snp500.csv.bz2?raw=true" + + +def load_snp500(): + """ + Loads pandas dataframe of S&P 500 daily values from 1927-12-30 thru 2020-01-10. + """ + _mkdir_p(DATA) + filename = os.path.join(DATA, "snp500.csv.bz2") + if not os.path.exists(filename): + urllib.request.urlretrieve(CACHE_URL, filename) + df = pd.read_csv(filename) + return df diff --git a/pyro/source/pyro/contrib/examples/multi_mnist.py b/pyro/source/pyro/contrib/examples/multi_mnist.py new file mode 100644 index 0000000000000000000000000000000000000000..e6ae6c235d157c0c0507b727a498d8eb6bb64e23 --- /dev/null +++ b/pyro/source/pyro/contrib/examples/multi_mnist.py @@ -0,0 +1,94 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +This script generates a dataset similar to the Multi-MNIST dataset +described in [1]. + +[1] Eslami, SM Ali, et al. "Attend, infer, repeat: Fast scene +understanding with generative models." Advances in Neural Information +Processing Systems. 2016. +""" + +import os + +import numpy as np +from PIL import Image + +from pyro.contrib.examples.util import get_data_loader + + +def imresize(arr, size): + return np.array(Image.fromarray(arr).resize(size)) + + +def sample_one(canvas_size, mnist): + i = np.random.randint(mnist["digits"].shape[0]) + digit = mnist["digits"][i] + label = mnist["labels"][i].item() + scale = 0.1 * np.random.randn() + 1.3 + new_size = tuple(int(s / scale) for s in digit.shape) + resized = imresize(digit, new_size) + w = resized.shape[0] + assert w == resized.shape[1] + padding = canvas_size - w + pad_l = np.random.randint(0, padding) + pad_r = np.random.randint(0, padding) + pad_width = ((pad_l, padding - pad_l), (pad_r, padding - pad_r)) + positioned = np.pad(resized, pad_width, "constant", constant_values=0) + return positioned, label + + +def sample_multi(num_digits, canvas_size, mnist): + canvas = np.zeros((canvas_size, canvas_size)) + labels = [] + for _ in range(num_digits): + positioned_digit, label = sample_one(canvas_size, mnist) + canvas += positioned_digit + labels.append(label) + # Crude check for overlapping digits. + if np.max(canvas) > 255: + return sample_multi(num_digits, canvas_size, mnist) + else: + return canvas, labels + + +def mk_dataset(n, mnist, max_digits, canvas_size): + x = [] + y = [] + for _ in range(n): + num_digits = np.random.randint(max_digits + 1) + canvas, labels = sample_multi(num_digits, canvas_size, mnist) + x.append(canvas) + y.append(labels) + return np.array(x, dtype=np.uint8), np.array(y, dtype=object) + + +def load_mnist(root_path): + loader = get_data_loader("MNIST", root_path) + return { + "digits": loader.dataset.data.cpu().numpy(), + "labels": loader.dataset.targets, + } + + +def load(root_path): + file_path = os.path.join(root_path, "multi_mnist_uint8.npz") + if os.path.exists(file_path): + data = np.load(file_path, allow_pickle=True) + return data["x"], data["y"] + else: + # Set RNG to known state. + rng_state = np.random.get_state() + np.random.seed(681307) + mnist = load_mnist(root_path) + print("Generating multi-MNIST dataset...") + x, y = mk_dataset(60000, mnist, 2, 50) + # Revert RNG state. + np.random.set_state(rng_state) + # Crude checksum. + # assert x.sum() == 883114919, 'Did not generate the expected data.' + with open(file_path, "wb") as f: + np.savez_compressed(f, x=x, y=y) + print("Done!") + return x, y diff --git a/pyro/source/pyro/contrib/examples/nextstrain.py b/pyro/source/pyro/contrib/examples/nextstrain.py new file mode 100644 index 0000000000000000000000000000000000000000..4782d9b8e0aa9142f1c53a9a17d2b72489d43b3e --- /dev/null +++ b/pyro/source/pyro/contrib/examples/nextstrain.py @@ -0,0 +1,44 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import logging +import os +import subprocess +import urllib + +import torch + +from .util import _mkdir_p, get_data_directory + +DATA = get_data_directory(__file__) +URL = "https://github.com/pyro-ppl/datasets/raw/master/nextstrain.data.pt.gz" + + +def load_nextstrain_counts(map_location=None) -> dict: + """ + Loads a SARS-CoV-2 dataset. + + The original dataset is a preprocessed intermediate ``metadata.tsv.gz`` available via + `nextstrain `_. + The ``metadata.tsv.gz`` file was then aggregated to + (month,location,lineage) and (lineage,mutation) bins by the Broad Institute's + `preprocessing script `_. + """ + # Download the gzipped file. + _mkdir_p(DATA) + basename = URL.split("/")[-1] + gz_filename = os.path.join(DATA, basename) + if not os.path.exists(gz_filename): + logging.debug(f"downloading {URL}") + urllib.request.urlretrieve(URL, gz_filename) + + # Decompress the file. + filename = gz_filename.replace(".gz", "") + if not os.path.exists(filename): + logging.debug(f"unzipping {gz_filename}") + subprocess.check_call(["gunzip", "-k", gz_filename]) + + # Load tensors to the default location. + if map_location is None: + map_location = torch.tensor(0.0).device + return torch.load(filename, map_location=map_location, weights_only=False) diff --git a/pyro/source/pyro/contrib/examples/polyphonic_data_loader.py b/pyro/source/pyro/contrib/examples/polyphonic_data_loader.py new file mode 100644 index 0000000000000000000000000000000000000000..7539d7627c87a5b5db9277ffd85557febfc398b4 --- /dev/null +++ b/pyro/source/pyro/contrib/examples/polyphonic_data_loader.py @@ -0,0 +1,180 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +Data loader logic with two main responsibilities: +(i) download raw data and process; this logic is initiated upon import +(ii) helper functions for dealing with mini-batches, sequence packing, etc. + +Data are taken from + +Boulanger-Lewandowski, N., Bengio, Y. and Vincent, P., +"Modeling Temporal Dependencies in High-Dimensional Sequences: Application to +Polyphonic Music Generation and Transcription" + +however, the original source of the data seems to be the Institut fuer Algorithmen +und Kognitive Systeme at Universitaet Karlsruhe. +""" + +import os +import pickle +from collections import namedtuple +from urllib.request import urlopen + +import torch +import torch.nn as nn +from torch.nn.utils.rnn import pad_sequence + +from pyro.contrib.examples.util import get_data_directory + +dset = namedtuple("dset", ["name", "url", "filename"]) + +JSB_CHORALES = dset( + "jsb_chorales", + "https://github.com/pyro-ppl/datasets/blob/master/polyphonic/jsb_chorales.pickle?raw=true", + "jsb_chorales.pkl", +) + +PIANO_MIDI = dset( + "piano_midi", + "https://github.com/pyro-ppl/datasets/blob/master/polyphonic/piano_midi.pickle?raw=true", + "piano_midi.pkl", +) + +MUSE_DATA = dset( + "muse_data", + "https://github.com/pyro-ppl/datasets/blob/master/polyphonic/muse_data.pickle?raw=true", + "muse_data.pkl", +) + +NOTTINGHAM = dset( + "nottingham", + "https://github.com/pyro-ppl/datasets/blob/master/polyphonic/nottingham.pickle?raw=true", + "nottingham.pkl", +) + + +# this function processes the raw data; in particular it unsparsifies it +def process_data(base_path, dataset, min_note=21, note_range=88): + output = os.path.join(base_path, dataset.filename) + if os.path.exists(output): + try: + with open(output, "rb") as f: + return pickle.load(f) + except (ValueError, UnicodeDecodeError): + # Assume python env has changed. + # Recreate pickle file in this env's format. + os.remove(output) + + print("processing raw data - {} ...".format(dataset.name)) + data = pickle.load(urlopen(dataset.url)) + processed_dataset = {} + for split, data_split in data.items(): + processed_dataset[split] = {} + n_seqs = len(data_split) + processed_dataset[split]["sequence_lengths"] = torch.zeros( + n_seqs, dtype=torch.long + ) + processed_dataset[split]["sequences"] = [] + for seq in range(n_seqs): + seq_length = len(data_split[seq]) + processed_dataset[split]["sequence_lengths"][seq] = seq_length + processed_sequence = torch.zeros((seq_length, note_range)) + for t in range(seq_length): + note_slice = torch.tensor(list(data_split[seq][t])) - min_note + slice_length = len(note_slice) + if slice_length > 0: + processed_sequence[t, note_slice] = torch.ones(slice_length) + processed_dataset[split]["sequences"].append(processed_sequence) + pickle.dump(processed_dataset, open(output, "wb"), pickle.HIGHEST_PROTOCOL) + print("dumped processed data to %s" % output) + + +# this logic will be initiated upon import +base_path = get_data_directory(__file__) +if not os.path.exists(base_path): + os.mkdir(base_path) + + +# ingest training/validation/test data from disk +def load_data(dataset): + # download and process dataset if it does not exist + process_data(base_path, dataset) + file_loc = os.path.join(base_path, dataset.filename) + with open(file_loc, "rb") as f: + dset = pickle.load(f) + for k, v in dset.items(): + sequences = v["sequences"] + dset[k]["sequences"] = pad_sequence(sequences, batch_first=True).type( + torch.Tensor + ) + dset[k]["sequence_lengths"] = v["sequence_lengths"].to( + device=torch.Tensor().device + ) + return dset + + +# this function takes a torch mini-batch and reverses each sequence +# (w.r.t. the temporal axis, i.e. axis=1). +def reverse_sequences(mini_batch, seq_lengths): + reversed_mini_batch = torch.zeros_like(mini_batch) + for b in range(mini_batch.size(0)): + T = seq_lengths[b] + time_slice = torch.arange(T - 1, -1, -1, device=mini_batch.device) + reversed_sequence = torch.index_select(mini_batch[b, :, :], 0, time_slice) + reversed_mini_batch[b, 0:T, :] = reversed_sequence + return reversed_mini_batch + + +# this function takes the hidden state as output by the PyTorch rnn and +# unpacks it it; it also reverses each sequence temporally +def pad_and_reverse(rnn_output, seq_lengths): + rnn_output, _ = nn.utils.rnn.pad_packed_sequence(rnn_output, batch_first=True) + reversed_output = reverse_sequences(rnn_output, seq_lengths) + return reversed_output + + +# this function returns a 0/1 mask that can be used to mask out a mini-batch +# composed of sequences of length `seq_lengths` +def get_mini_batch_mask(mini_batch, seq_lengths): + mask = torch.zeros(mini_batch.shape[0:2]) + for b in range(mini_batch.shape[0]): + mask[b, 0 : seq_lengths[b]] = torch.ones(seq_lengths[b]) + return mask + + +# this function prepares a mini-batch for training or evaluation. +# it returns a mini-batch in forward temporal order (`mini_batch`) as +# well as a mini-batch in reverse temporal order (`mini_batch_reversed`). +# it also deals with the fact that packed sequences (which are what what we +# feed to the PyTorch rnn) need to be sorted by sequence length. +def get_mini_batch(mini_batch_indices, sequences, seq_lengths, cuda=False): + # get the sequence lengths of the mini-batch + seq_lengths = seq_lengths[mini_batch_indices] + # sort the sequence lengths + _, sorted_seq_length_indices = torch.sort(seq_lengths) + sorted_seq_length_indices = sorted_seq_length_indices.flip(0) + sorted_seq_lengths = seq_lengths[sorted_seq_length_indices] + sorted_mini_batch_indices = mini_batch_indices[sorted_seq_length_indices] + + # compute the length of the longest sequence in the mini-batch + T_max = torch.max(seq_lengths) + # this is the sorted mini-batch + mini_batch = sequences[sorted_mini_batch_indices, 0:T_max, :] + # this is the sorted mini-batch in reverse temporal order + mini_batch_reversed = reverse_sequences(mini_batch, sorted_seq_lengths) + # get mask for mini-batch + mini_batch_mask = get_mini_batch_mask(mini_batch, sorted_seq_lengths) + + # cuda() here because need to cuda() before packing + if cuda: + mini_batch = mini_batch.cuda() + mini_batch_mask = mini_batch_mask.cuda() + mini_batch_reversed = mini_batch_reversed.cuda() + + # do sequence packing + mini_batch_reversed = nn.utils.rnn.pack_padded_sequence( + mini_batch_reversed, sorted_seq_lengths, batch_first=True + ) + + return mini_batch, mini_batch_reversed, mini_batch_mask, sorted_seq_lengths diff --git a/pyro/source/pyro/contrib/examples/scanvi_data.py b/pyro/source/pyro/contrib/examples/scanvi_data.py new file mode 100644 index 0000000000000000000000000000000000000000..ae291e62f0b925bf974e5c353ac63f081c96daed --- /dev/null +++ b/pyro/source/pyro/contrib/examples/scanvi_data.py @@ -0,0 +1,233 @@ +# Copyright Contributors to the Pyro project. +# Copyright (c) 2020, YosefLab. +# SPDX-License-Identifier: Apache-2.0 AND BSD-3-Clause + +""" +The data preprocessing code in this script is adapted from: +https://github.com/YosefLab/scvi-tutorials/blob/50dd3269abfe0c375ec47114f2c20725a016736f/seed_labeling.ipynb +""" + +import math + +import numpy as np +import torch +import torch.nn as nn +from scipy import sparse + + +class BatchDataLoader(object): + """ + This custom DataLoader serves mini-batches that are either fully-observed (i.e. labeled) + or partially-observed (i.e. unlabeled) but never mixed. + """ + + def __init__(self, data_x, data_y, batch_size, num_classes=4, missing_label=-1): + super().__init__() + self.data_x = data_x + self.data_y = data_y + self.batch_size = batch_size + self.num_classes = num_classes + + self.unlabeled = torch.where(data_y == missing_label)[0] + self.num_unlabeled = self.unlabeled.size(0) + self.num_unlabeled_batches = math.ceil(self.num_unlabeled / self.batch_size) + + self.labeled = torch.where(data_y != missing_label)[0] + self.num_labeled = self.labeled.size(0) + self.num_labeled_batches = math.ceil(self.num_labeled / self.batch_size) + + assert self.data_x.size(0) == self.data_y.size(0) + assert len(self) > 0 + + @property + def size(self): + return self.data_x.size(0) + + def __len__(self): + return self.num_unlabeled_batches + self.num_labeled_batches + + def _sample_batch_indices(self): + batch_order = torch.randperm(len(self)).tolist() + unlabeled_idx = self.unlabeled[torch.randperm(self.num_unlabeled)] + labeled_idx = self.labeled[torch.randperm(self.num_labeled)] + + slices = [] + + for i in range(self.num_unlabeled_batches): + _slice = unlabeled_idx[i * self.batch_size : (i + 1) * self.batch_size] + slices.append((_slice, False)) + + for i in range(self.num_labeled_batches): + _slice = labeled_idx[i * self.batch_size : (i + 1) * self.batch_size] + slices.append((_slice, True)) + + return slices, batch_order + + def __iter__(self): + slices, batch_order = self._sample_batch_indices() + + for i in range(len(batch_order)): + _slice = slices[batch_order[i]] + if _slice[1]: + # labeled + yield self.data_x[_slice[0]], nn.functional.one_hot( + self.data_y[_slice[0]], num_classes=self.num_classes + ) + else: + # unlabeled + yield self.data_x[_slice[0]], None + + +def _get_score(normalized_adata, gene_set): + """ + Returns the score per cell given a dictionary of + and - genes + """ + score = np.zeros(normalized_adata.n_obs) + for gene in gene_set["positive"]: + expression = np.array(normalized_adata[:, gene].X) + score += expression.flatten() + for gene in gene_set["negative"]: + expression = np.array(normalized_adata[:, gene].X) + score -= expression.flatten() + return score + + +def _get_cell_mask(normalized_adata, gene_set): + """ + Calculates the score per cell for a list of genes, then returns a mask for + the cells with the highest 50 scores. + """ + score = _get_score(normalized_adata, gene_set) + cell_idx = score.argsort()[-50:] + mask = np.zeros(normalized_adata.n_obs) + mask[cell_idx] = 1 + return mask.astype(bool) + + +def get_data(dataset="pbmc", batch_size=100, cuda=False): + """ + Does the necessary preprocessing and returns a BatchDataLoader for the PBMC dataset. + """ + assert dataset in ["pbmc", "mock"] + + # create mock dataset for CI + if dataset == "mock": + num_genes = 17 + num_data = 200 + X = torch.distributions.Poisson(rate=10.0).sample( + sample_shape=(num_data, num_genes) + ) + Y = torch.zeros(num_data, dtype=torch.long) + Y[50:100] = 1 + Y[100:] = -1 + + if cuda: + X, Y = X.cuda(), Y.cuda() + + return BatchDataLoader(X, Y, batch_size), num_genes, 2.0, 1.0, None + + import scanpy as sc + import scvi + + adata = scvi.data.purified_pbmc_dataset( + subset_datasets=["regulatory_t", "naive_t", "memory_t", "naive_cytotoxic"] + ) + + gene_subset = [ + "CD4", + "FOXP3", + "TNFRSF18", + "IL2RA", + "CTLA4", + "CD44", + "TCF7", + "CD8B", + "CCR7", + "CD69", + "PTPRC", + "S100A4", + ] + + normalized = adata.copy() + sc.pp.normalize_total(normalized, target_sum=1e4) + sc.pp.log1p(normalized) + + normalized = normalized[:, gene_subset].copy() + sc.pp.scale(normalized) + + # hand curated list of genes for identifying ground truth + cd4_reg_geneset = { + "positive": ["TNFRSF18", "CTLA4", "FOXP3", "IL2RA"], + "negative": ["S100A4", "PTPRC", "CD8B"], + } + cd8_naive_geneset = {"positive": ["CD8B", "CCR7"], "negative": ["CD4"]} + cd4_naive_geneset = { + "positive": ["CCR7", "CD4"], + "negative": ["S100A4", "PTPRC", "FOXP3", "IL2RA", "CD69"], + } + cd4_mem_geneset = { + "positive": ["S100A4"], + "negative": ["IL2RA", "FOXP3", "TNFRSF18", "CCR7"], + } + + cd4_reg_mask = _get_cell_mask(normalized, cd4_reg_geneset) + cd8_naive_mask = _get_cell_mask(normalized, cd8_naive_geneset) + cd4_naive_mask = _get_cell_mask(normalized, cd4_naive_geneset) + cd4_mem_mask = _get_cell_mask(normalized, cd4_mem_geneset) + + # these will be our seed labels + seed_labels = -np.ones(cd4_mem_mask.shape[0]) + seed_labels[cd8_naive_mask] = 0 # "CD8 Naive T cell" + seed_labels[cd4_naive_mask] = 1 # "CD4 Naive T cell" + seed_labels[cd4_mem_mask] = 2 # "CD4 Memory T cell" + seed_labels[cd4_reg_mask] = 3 # "CD4 Regulatory T cell" + + # this metadata will be used for plotting + seed_colors = ["lightgray"] * seed_labels.shape[0] + seed_sizes = [0.05] * seed_labels.shape[0] + for i in range(len(seed_colors)): + if seed_labels[i] == 0: + seed_colors[i] = "lightcoral" + elif seed_labels[i] == 1: + seed_colors[i] = "limegreen" + elif seed_labels[i] == 2: + seed_colors[i] = "deepskyblue" + elif seed_labels[i] == 3: + seed_colors[i] = "mediumorchid" + if seed_labels[i] != -1: + seed_sizes[i] = 25 + + adata.obs["seed_labels"] = seed_labels + adata.obs["seed_colors"] = seed_colors + adata.obs["seed_marker_sizes"] = seed_sizes + + Y = torch.from_numpy(seed_labels).long() + X = torch.from_numpy(sparse.csr_matrix.todense(adata.X)).float() + + # the prior mean and scale for the log count latent variable `l` + # is set using the empirical mean and variance of the observed log counts + log_counts = X.sum(-1).log() + l_mean, l_scale = log_counts.mean().item(), log_counts.std().item() + + if cuda: + X, Y = X.cuda(), Y.cuda() + + # subsample and remove ~50% of the unlabeled cells + torch.manual_seed(0) + labeled = torch.where(Y != -1)[0] + unlabeled = torch.where(Y == -1)[0] + unlabeled = unlabeled[torch.randperm(unlabeled.size(0))[:19800]] + idx = torch.cat([labeled, unlabeled]) + + num_genes = X.size(-1) + + adata = adata[idx.data.cpu().numpy()] + adata.raw = adata + + return ( + BatchDataLoader(X[idx], Y[idx], batch_size), + num_genes, + l_mean, + l_scale, + adata, + ) diff --git a/pyro/source/pyro/contrib/examples/util.py b/pyro/source/pyro/contrib/examples/util.py new file mode 100644 index 0000000000000000000000000000000000000000..c04d54e266d765a5b51f6ad14cfc39c051f663c1 --- /dev/null +++ b/pyro/source/pyro/contrib/examples/util.py @@ -0,0 +1,84 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import os +import sys + +import torchvision.datasets as datasets +from torch.utils.data import DataLoader +from torchvision import transforms + + +class MNIST(datasets.MNIST): + mirrors = ["https://github.com/pyro-ppl/datasets/blob/master/mnist/"] + + def download(self) -> None: + """Download the MNIST data if it doesn't exist already.""" + + if self._check_exists(): + return + + os.makedirs(self.raw_folder, exist_ok=True) + + # download files + for filename, md5 in self.resources: + errors = [] + for mirror in self.mirrors: + url = f"{mirror}{filename}?raw=true" + try: + datasets.utils.download_and_extract_archive( + url, download_root=self.raw_folder, filename=filename, md5=md5 + ) + except datasets.URLError as e: + errors.append(e) + continue + break + else: + s = f"Error downloading {filename}:\n" + for mirror, err in zip(self.mirrors, errors): + s += f"Tried {mirror}, got:\n{str(err)}\n" + raise RuntimeError(s) + + +def get_data_loader( + dataset_name, + data_dir, + batch_size=1, + dataset_transforms=None, + is_training_set=True, + shuffle=True, +): + if not dataset_transforms: + dataset_transforms = [] + trans = transforms.Compose([transforms.ToTensor()] + dataset_transforms) + if dataset_name == "MNIST": + dataset = MNIST + else: + dataset = getattr(datasets, dataset_name) + print("downloading data") + dset = dataset(root=data_dir, train=is_training_set, transform=trans, download=True) + print("download complete.") + return DataLoader(dset, batch_size=batch_size, shuffle=shuffle) + + +def print_and_log(logger, msg): + # print and log a message (if a logger is present) + print(msg) + sys.stdout.flush() + if logger is not None: + logger.write("{}\n".format(msg)) + logger.flush() + + +def get_data_directory(filepath=None): + if "CI" in os.environ: + return os.path.expanduser("~/.data") + return os.path.abspath(os.path.join(os.path.dirname(filepath), ".data")) + + +def _mkdir_p(dirname): + if not os.path.exists(dirname): + try: + os.makedirs(dirname) + except FileExistsError: + pass diff --git a/pyro/source/pyro/contrib/forecast/__init__.py b/pyro/source/pyro/contrib/forecast/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..8b33c6f4ad64c27f08ed6e54384a092ae60916e7 --- /dev/null +++ b/pyro/source/pyro/contrib/forecast/__init__.py @@ -0,0 +1,15 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from .evaluate import backtest, eval_crps, eval_mae, eval_rmse +from .forecaster import Forecaster, ForecastingModel, HMCForecaster + +__all__ = [ + "Forecaster", + "ForecastingModel", + "HMCForecaster", + "backtest", + "eval_crps", + "eval_mae", + "eval_rmse", +] diff --git a/pyro/source/pyro/contrib/forecast/evaluate.py b/pyro/source/pyro/contrib/forecast/evaluate.py new file mode 100644 index 0000000000000000000000000000000000000000..cf81aa2ea534467de3e124a3097aec886d0252bb --- /dev/null +++ b/pyro/source/pyro/contrib/forecast/evaluate.py @@ -0,0 +1,250 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import logging +import warnings +from timeit import default_timer + +import torch + +import pyro +from pyro.ops.stats import crps_empirical + +from .forecaster import Forecaster + +logger = logging.getLogger(__name__) + + +@torch.no_grad() +def eval_mae(pred, truth): + """ + Evaluate mean absolute error, using sample median as point estimate. + + :param torch.Tensor pred: Forecasted samples. + :param torch.Tensor truth: Ground truth. + :rtype: float + """ + pred = pred.median(0).values + return (pred - truth).abs().mean().cpu().item() + + +@torch.no_grad() +def eval_rmse(pred, truth): + """ + Evaluate root mean squared error, using sample mean as point estimate. + + :param torch.Tensor pred: Forecasted samples. + :param torch.Tensor truth: Ground truth. + :rtype: float + """ + pred = pred.mean(0) + error = pred - truth + return (error * error).mean().cpu().item() ** 0.5 + + +@torch.no_grad() +def eval_crps(pred, truth): + """ + Evaluate continuous ranked probability score, averaged over all data + elements. + + **References** + + [1] Tilmann Gneiting, Adrian E. Raftery (2007) + `Strictly Proper Scoring Rules, Prediction, and Estimation` + https://www.stat.washington.edu/raftery/Research/PDF/Gneiting2007jasa.pdf + + :param torch.Tensor pred: Forecasted samples. + :param torch.Tensor truth: Ground truth. + :rtype: float + """ + return crps_empirical(pred, truth).mean().cpu().item() + + +DEFAULT_METRICS = { + "mae": eval_mae, + "rmse": eval_rmse, + "crps": eval_crps, +} + + +def backtest( + data, + covariates, + model_fn, + *, + forecaster_fn=Forecaster, + metrics=None, + transform=None, + train_window=None, + min_train_window=1, + test_window=None, + min_test_window=1, + stride=1, + seed=1234567890, + num_samples=100, + batch_size=None, + forecaster_options={}, +): + """ + Backtest a forecasting model on a moving window of (train,test) data. + + :param data: A tensor dataset with time dimension -2. + :type data: ~torch.Tensor + :param covariates: A tensor of covariates with time dimension -2. + For models not using covariates, pass a shaped empty tensor + ``torch.empty(duration, 0)``. + :type covariates: ~torch.Tensor + :param callable model_fn: Function that returns an + :class:`~pyro.contrib.forecast.forecaster.ForecastingModel` object. + :param callable forecaster_fn: Function that returns a forecaster object + (for example, :class:`~pyro.contrib.forecast.forecaster.Forecaster` + or :class:`~pyro.contrib.forecast.forecaster.HMCForecaster`) + given arguments model, training data, training covariates and + keyword arguments defined in `forecaster_options`. + :param dict metrics: A dictionary mapping metric name to metric function. + The metric function should input a forecast ``pred`` and ground + ``truth`` and can output anything, often a number. Example metrics + include: :func:`eval_mae`, :func:`eval_rmse`, and :func:`eval_crps`. + :param callable transform: An optional transform to apply before computing + metrics. If provided this will be applied as + ``pred, truth = transform(pred, truth)``. + :param int train_window: Size of the training window. Be default trains + from beginning of data. This must be None if forecaster is + :class:`~pyro.contrib.forecast.forecaster.Forecaster` and + ``forecaster_options["warm_start"]`` is true. + :param int min_train_window: If ``train_window`` is None, this specifies + the min training window size. Defaults to 1. + :param int test_window: Size of the test window. By default forecasts to + end of data. + :param int min_test_window: If ``test_window`` is None, this specifies + the min test window size. Defaults to 1. + :param int stride: Optional stride for test/train split. Defaults to 1. + :param int seed: Random number seed. + :param int num_samples: Number of samples for forecast. Defaults to 100. + :param int batch_size: Batch size for forecast sampling. Defaults to + ``num_samples``. + :param forecaster_options: Options dict to pass to forecaster, or callable + inputting time window ``t0,t1,t2`` and returning such a dict. See + :class:`~pyro.contrib.forecaster.Forecaster` for details. + :type forecaster_options: dict or callable + + :returns: A list of dictionaries of evaluation data. Caller is responsible + for aggregating the per-window metrics. Dictionary keys include: train + begin time "t0", train/test split time "t1", test end time "t2", + "seed", "num_samples", "train_walltime", "test_walltime", and one key + for each metric. + :rtype: list + """ + assert data.size(-2) == covariates.size(-2) + assert isinstance(min_train_window, int) and min_train_window >= 1 + assert isinstance(min_test_window, int) and min_test_window >= 1 + if metrics is None: + metrics = DEFAULT_METRICS + assert metrics, "no metrics specified" + + if callable(forecaster_options): + forecaster_options_fn = forecaster_options + else: + + def forecaster_options_fn(*args, **kwargs): + return forecaster_options + + if train_window is not None and forecaster_options_fn().get("warm_start"): + raise ValueError( + "Cannot warm start with moving training window; " + "either set warm_start=False or train_window=None" + ) + + duration = data.size(-2) + if test_window is None: + stop = duration - min_test_window + 1 + else: + stop = duration - test_window + 1 + if train_window is None: + start = min_train_window + else: + start = train_window + + pyro.clear_param_store() + results = [] + for t1 in range(start, stop, stride): + t0 = 0 if train_window is None else t1 - train_window + t2 = duration if test_window is None else t1 + test_window + assert 0 <= t0 < t1 < t2 <= duration + logger.info( + "Training on window [{t0}:{t1}], testing on window [{t1}:{t2}]".format( + t0=t0, t1=t1, t2=t2 + ) + ) + + # Train a forecaster on the training window. + pyro.set_rng_seed(seed) + forecaster_options = forecaster_options_fn(t0=t0, t1=t1, t2=t2) + if not forecaster_options.get("warm_start"): + pyro.clear_param_store() + train_data = data[..., t0:t1, :] + train_covariates = covariates[..., t0:t1, :] + start_time = default_timer() + model = model_fn() + forecaster = forecaster_fn( + model, train_data, train_covariates, **forecaster_options + ) + train_walltime = default_timer() - start_time + + # Forecast forward to testing window. + test_covariates = covariates[..., t0:t2, :] + start_time = default_timer() + # Gradually reduce batch_size to avoid OOM errors. + while True: + try: + pred = forecaster( + train_data, + test_covariates, + num_samples=num_samples, + batch_size=batch_size, + ) + break + except RuntimeError as e: + if "out of memory" in str(e) and batch_size > 1: + batch_size = (batch_size + 1) // 2 + warnings.warn( + "out of memory, decreasing batch_size to {}".format(batch_size), + RuntimeWarning, + ) + else: + raise + test_walltime = default_timer() - start_time + truth = data[..., t1:t2, :] + + # We aggressively garbage collect because Monte Carlo forecast are memory intensive. + del forecaster + + # Evaluate the forecasts. + if transform is not None: + pred, truth = transform(pred, truth) + result = { + "t0": t0, + "t1": t1, + "t2": t2, + "seed": seed, + "num_samples": num_samples, + "train_walltime": train_walltime, + "test_walltime": test_walltime, + "params": {}, + } + results.append(result) + for name, fn in metrics.items(): + result[name] = fn(pred, truth) + for name, value in pyro.get_param_store().items(): + if value.numel() == 1: + value = value.cpu().item() + result["params"][name] = value + for dct in (result, result["params"]): + for key, value in sorted(dct.items()): + if isinstance(value, (int, float)): + logger.debug("{} = {:0.6g}".format(key, value)) + + del pred + + return results diff --git a/pyro/source/pyro/contrib/forecast/forecaster.py b/pyro/source/pyro/contrib/forecast/forecaster.py new file mode 100644 index 0000000000000000000000000000000000000000..14e9226d8932b702912f7f2bc65718462100a10a --- /dev/null +++ b/pyro/source/pyro/contrib/forecast/forecaster.py @@ -0,0 +1,546 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import logging +from abc import ABCMeta, abstractmethod +from contextlib import ExitStack + +import torch +import torch.nn as nn + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.infer import MCMC, NUTS, SVI, Trace_ELBO +from pyro.infer.autoguide import AutoNormal, init_to_sample +from pyro.infer.predictive import _guess_max_plate_nesting +from pyro.nn.module import PyroModule +from pyro.optim import DCTAdam + +from .util import ( + MarkDCTParamMessenger, + PrefixConditionMessenger, + PrefixReplayMessenger, + PrefixWarmStartMessenger, + reshape_batch, + time_reparam_dct, + time_reparam_haar, +) + +logger = logging.getLogger(__name__) + + +class _ForecastingModelMeta(type(PyroModule), ABCMeta): + pass + + +class ForecastingModel(PyroModule, metaclass=_ForecastingModelMeta): + """ + Abstract base class for forecasting models. + + Derived classes must implement the :meth:`model` method. + """ + + def __init__(self): + super().__init__() + self._prefix_condition_data = {} + + @abstractmethod + def model(self, zero_data, covariates): + """ + Generative model definition. + + Implementations must call the :meth:`predict` method exactly once. + + Implementations must draw all time-dependent noise inside the + :meth:`time_plate`. The prediction passed to :meth:`predict` must be a + deterministic function of noise tensors that are independent over time. + This requirement is slightly more general than state space models. + + :param zero_data: A zero tensor like the input data, but extended to + the duration of the :meth:`time_plate`. This allows models to + depend on the shape and device of data but not its value. + :type zero_data: ~torch.Tensor + :param covariates: A tensor of covariates with time dimension -2. + :type covariates: ~torch.Tensor + :returns: Return value is ignored. + """ + raise NotImplementedError + + @property + def time_plate(self): + """ + Helper to create a ``pyro.plate`` over time. + + :returns: A plate named "time" with size ``covariates.size(-2)`` and + ``dim=-1``. This is available only during model execution. + :rtype: :class:`~pyro.plate` + """ + assert self._time_plate is not None, ".time_plate accessed outside of .model()" + return self._time_plate + + def predict(self, noise_dist, prediction): + """ + Prediction function, to be called by :meth:`model` implementations. + + This should be called outside of the :meth:`time_plate`. + + This is similar to an observe statement in Pyro:: + + pyro.sample("residual", noise_dist, + obs=(data - prediction)) + + but with (1) additional reshaping logic to allow time-dependent + ``noise_dist`` (most often a :class:`~pyro.distributions.GaussianHMM` + or variant); and (2) additional logic to allow only a partial + observation and forecast the remaining data. + + :param noise_dist: A noise distribution with ``.event_dim in {0,1,2}``. + ``noise_dist`` is typically zero-mean or zero-median or zero-mode + or somehow centered. + :type noise_dist: ~pyro.distributions.Distribution + :param prediction: A prediction for the data. This should have the same + shape as ``data``, but broadcastable to full duration of the + ``covariates``. + :type prediction: ~torch.Tensor + """ + assert self._data is not None, ".predict() called outside .model()" + assert self._forecast is None, ".predict() called twice" + assert isinstance(noise_dist, dist.Distribution) + assert isinstance(prediction, torch.Tensor) + if noise_dist.event_dim == 0: + if noise_dist.batch_shape[-2:] != prediction.shape[-2:]: + noise_dist = noise_dist.expand( + noise_dist.batch_shape[:-2] + prediction.shape[-2:] + ) + noise_dist = noise_dist.to_event(2) + elif noise_dist.event_dim == 1: + if noise_dist.batch_shape[-1:] != prediction.shape[-2:-1]: + noise_dist = noise_dist.expand( + noise_dist.batch_shape[:-1] + prediction.shape[-2:-1] + ) + noise_dist = noise_dist.to_event(1) + assert noise_dist.event_dim == 2 + assert noise_dist.event_shape == prediction.shape[-2:] + + # The following reshaping logic is required to reconcile batch and + # event shapes. This would be unnecessary if Pyro used name dimensions + # internally, e.g. using Funsor. + # + # batch_shape | event_shape + # -------------------------------+---------------- + # 1. sample_shape + shape + (time,) | (obs_dim,) + # 2. sample_shape + shape | (time, obs_dim) + # 3. sample_shape + shape + (1,) | (time, obs_dim) + # + # Parameters like noise_dist.loc typically have shape as in 1. However + # calling .to_event(1) will shift the shapes resulting in 2., where + # sample_shape+shape will be misaligned with other batch shapes in the + # trace. To fix this the following logic "unsqueezes" the distribution, + # resulting in correctly aligned shapes 3. Note the "time" dimension is + # effectively moved from a batch dimension to an event dimension. + noise_dist = reshape_batch(noise_dist, noise_dist.batch_shape + (1,)) + data = pyro.subsample(self._data.unsqueeze(-3), event_dim=2) + prediction = prediction.unsqueeze(-3) + + # Create a sample site. + t_obs = data.size(-2) + t_cov = prediction.size(-2) + if t_obs == t_cov: # training + pyro.sample("residual", noise_dist, obs=data - prediction) + self._forecast = data.new_zeros(data.shape[:-2] + (0,) + data.shape[-1:]) + else: # forecasting + left_pred = prediction[..., :t_obs, :] + right_pred = prediction[..., t_obs:, :] + + # This prefix_condition indirection is needed to ensure that + # PrefixConditionMessenger is handled outside of the .model() call. + self._prefix_condition_data["residual"] = data - left_pred + noise = pyro.sample("residual", noise_dist) + del self._prefix_condition_data["residual"] + + assert noise.shape[-data.dim() :] == right_pred.shape[-data.dim() :] + self._forecast = right_pred + noise + + # Move the "time" batch dim back to its original place. + assert self._forecast.size(-3) == 1 + self._forecast = self._forecast.squeeze(-3) + + def forward(self, data, covariates): + assert data.dim() >= 2 + assert covariates.dim() >= 2 + t_obs = data.size(-2) + t_cov = covariates.size(-2) + assert t_obs <= t_cov + + try: + self._data = data + self._time_plate = pyro.plate("time", t_cov, dim=-1) + if t_obs == t_cov: # training + zero_data = data.new_zeros(()).expand(data.shape) + else: # forecasting + zero_data = data.new_zeros(()).expand( + data.shape[:-2] + covariates.shape[-2:-1] + data.shape[-1:] + ) + self._forecast = None + + self.model(zero_data, covariates) + + assert self._forecast is not None, ".predict() was not called by .model()" + return self._forecast + finally: + self._data = None + self._time_plate = None + self._forecast = None + + +class Forecaster(nn.Module): + """ + Forecaster for a :class:`ForecastingModel` using variational inference. + + On initialization, this fits a distribution using variational inference + over latent variables and exact inference over the noise distribution, + typically a :class:`~pyro.distributions.GaussianHMM` or variant. + + After construction this can be called to generate sample forecasts. + + :ivar list losses: A list of losses recorded during training, typically + used to debug convergence. Defined by ``loss = -elbo / data.numel()``. + + :param ForecastingModel model: A forecasting model subclass instance. + :param data: A tensor dataset with time dimension -2. + :type data: ~torch.Tensor + :param covariates: A tensor of covariates with time dimension -2. + For models not using covariates, pass a shaped empty tensor + ``torch.empty(duration, 0)``. + :type covariates: ~torch.Tensor + + :param guide: Optional guide instance. Defaults to a + :class:`~pyro.infer.autoguide.AutoNormal`. + :type guide: ~pyro.nn.module.PyroModule + :param callable init_loc_fn: A per-site initialization function for the + :class:`~pyro.infer.autoguide.AutoNormal` guide. Defaults to + :func:`~pyro.infer.autoguide.initialization.init_to_sample`. See + :ref:`autoguide-initialization` section for available functions. + :param float init_scale: Initial uncertainty scale of the + :class:`~pyro.infer.autoguide.AutoNormal` guide. + :param callable create_plates: An optional function to create plates for + subsampling with the :class:`~pyro.infer.autoguide.AutoNormal` guide. + :param optim: An optional Pyro optimizer. Defaults to a freshly constructed + :class:`~pyro.optim.optim.DCTAdam`. + :type optim: ~pyro.optim.optim.PyroOptim + :param float learning_rate: Learning rate used by + :class:`~pyro.optim.optim.DCTAdam`. + :param tuple betas: Coefficients for running averages used by + :class:`~pyro.optim.optim.DCTAdam`. + :param float learning_rate_decay: Learning rate decay used by + :class:`~pyro.optim.optim.DCTAdam`. Note this is the total decay + over all ``num_steps``, not the per-step decay factor. + :param float clip_norm: Norm used for gradient clipping during + optimization. Defaults to 10.0. + :param str time_reparam: If not None (default), reparameterize all + time-dependent variables via the Haar wavelet transform (if "haar") or + the discrete cosine transform (if "dct"). + :param bool dct_gradients: Whether to discrete cosine transform gradients + in :class:`~pyro.optim.optim.DCTAdam`. Defaults to False. + :param bool subsample_aware: whether to update gradient statistics only + for those elements that appear in a subsample. This is used + by :class:`~pyro.optim.optim.DCTAdam`. + :param int num_steps: Number of :class:`~pyro.infer.svi.SVI` steps. + :param int num_particles: Number of particles used to compute the + :class:`~pyro.infer.elbo.ELBO`. + :param bool vectorize_particles: If ``num_particles > 1``, determines + whether to vectorize computation of the :class:`~pyro.infer.elbo.ELBO`. + Defaults to True. Set to False for models with dynamic control flow. + :param bool warm_start: Whether to warm start parameters from a smaller + time window. Note this may introduce statistical leakage; usage is + recommended for model exploration purposes only and should be disabled + when publishing metrics. + :param int log_every: Number of training steps between logging messages. + """ + + def __init__( + self, + model, + data, + covariates, + *, + guide=None, + init_loc_fn=init_to_sample, + init_scale=0.1, + create_plates=None, + optim=None, + learning_rate=0.01, + betas=(0.9, 0.99), + learning_rate_decay=0.1, + clip_norm=10.0, + time_reparam=None, + dct_gradients=False, + subsample_aware=False, + num_steps=1001, + num_particles=1, + vectorize_particles=True, + warm_start=False, + log_every=100 + ): + assert data.size(-2) == covariates.size(-2) + super().__init__() + self.model = model + if time_reparam == "haar": + model = poutine.reparam(model, time_reparam_haar) + elif time_reparam == "dct": + model = poutine.reparam(model, time_reparam_dct) + elif time_reparam is not None: + raise ValueError("unknown time_reparam: {}".format(time_reparam)) + if guide is None: + guide = AutoNormal( + model, + init_loc_fn=init_loc_fn, + init_scale=init_scale, + create_plates=create_plates, + ) + self.guide = guide + + # Initialize. + if warm_start: + model = PrefixWarmStartMessenger()(model) + guide = PrefixWarmStartMessenger()(guide) + if dct_gradients: + model = MarkDCTParamMessenger("time")(model) + guide = MarkDCTParamMessenger("time")(guide) + elbo = Trace_ELBO( + num_particles=num_particles, vectorize_particles=vectorize_particles + ) + elbo._guess_max_plate_nesting(model, guide, (data, covariates), {}) + elbo.max_plate_nesting = max(elbo.max_plate_nesting, 1) # force a time plate + + losses = [] + if num_steps: + if optim is None: + optim = DCTAdam( + { + "lr": learning_rate, + "betas": betas, + "lrd": learning_rate_decay ** (1 / num_steps), + "clip_norm": clip_norm, + "subsample_aware": subsample_aware, + } + ) + svi = SVI(model, guide, optim, elbo) + for step in range(num_steps): + loss = svi.step(data, covariates) / data.numel() + if log_every and step % log_every == 0: + logger.info("step {: >4d} loss = {:0.6g}".format(step, loss)) + losses.append(loss) + + self.guide.create_plates = None # Disable subsampling after training. + self.max_plate_nesting = elbo.max_plate_nesting + self.losses = losses + + def __call__(self, data, covariates, num_samples, batch_size=None): + """ + Samples forecasted values of data for time steps in ``[t1,t2)``, where + ``t1 = data.size(-2)`` is the duration of observed data and ``t2 = + covariates.size(-2)`` is the extended duration of covariates. For + example to forecast 7 days forward conditioned on 30 days of + observations, set ``t1=30`` and ``t2=37``. + + :param data: A tensor dataset with time dimension -2. + :type data: ~torch.Tensor + :param covariates: A tensor of covariates with time dimension -2. + For models not using covariates, pass a shaped empty tensor + ``torch.empty(duration, 0)``. + :type covariates: ~torch.Tensor + :param int num_samples: The number of samples to generate. + :param int batch_size: Optional batch size for sampling. This is useful + for generating many samples from models with large memory + footprint. Defaults to ``num_samples``. + :returns: A batch of joint posterior samples of shape + ``(num_samples,1,...,1) + data.shape[:-2] + (t2-t1,data.size(-1))``, + where the ``1``'s are inserted to avoid conflict with model plates. + :rtype: ~torch.Tensor + """ + return super().__call__(data, covariates, num_samples, batch_size) + + def forward(self, data, covariates, num_samples, batch_size=None): + assert data.size(-2) <= covariates.size(-2) + assert isinstance(num_samples, int) and num_samples > 0 + if batch_size is not None: + batches = [] + while num_samples > 0: + batch = self.forward(data, covariates, min(num_samples, batch_size)) + batches.append(batch) + num_samples -= batch_size + return torch.cat(batches) + + assert self.max_plate_nesting >= 1 + dim = -1 - self.max_plate_nesting + + with torch.no_grad(): + with poutine.block(), poutine.trace() as tr: + with pyro.plate("particles", num_samples, dim=dim): + self.guide(data, covariates) + with ExitStack() as stack: + if data.size(-2) < covariates.size(-2): + stack.enter_context(PrefixReplayMessenger(tr.trace)) + stack.enter_context( + PrefixConditionMessenger(self.model._prefix_condition_data) + ) + else: + stack.enter_context(poutine.replay(trace=tr.trace)) + with pyro.plate("particles", num_samples, dim=dim): + return self.model(data, covariates) + + +class HMCForecaster(nn.Module): + """ + Forecaster for a :class:`ForecastingModel` using Hamiltonian Monte Carlo. + + On initialization, this will run :class:`~pyro.infer.mcmc.nuts.NUTS` + sampler to get posterior samples of the model. + + After construction, this can be called to generate sample forecasts. + + :param ForecastingModel model: A forecasting model subclass instance. + :param data: A tensor dataset with time dimension -2. + :type data: ~torch.Tensor + :param covariates: A tensor of covariates with time dimension -2. + For models not using covariates, pass a shaped empty tensor + ``torch.empty(duration, 0)``. + :type covariates: ~torch.Tensor + :param int num_warmup: number of MCMC warmup steps. + :param int num_samples: number of MCMC samples. + :param int num_chains: number of parallel MCMC chains. + :param bool dense_mass: a flag to control whether the mass matrix is dense + or diagonal. Defaults to False. + :param str time_reparam: If not None (default), reparameterize all + time-dependent variables via the Haar wavelet transform (if "haar") or + the discrete cosine transform (if "dct"). + :param bool jit_compile: whether to use the PyTorch JIT to trace the log + density computation, and use this optimized executable trace in the + integrator. Defaults to False. + :param int max_tree_depth: Max depth of the binary tree created during the + doubling scheme of the :class:`~pyro.infer.mcmc.nuts.NUTS` sampler. + Defaults to 10. + """ + + def __init__( + self, + model, + data, + covariates=None, + *, + num_warmup=1000, + num_samples=1000, + num_chains=1, + time_reparam=None, + dense_mass=False, + jit_compile=False, + max_tree_depth=10 + ): + assert data.size(-2) == covariates.size(-2) + super().__init__() + if time_reparam == "haar": + model = poutine.reparam(model, time_reparam_haar) + elif time_reparam == "dct": + model = poutine.reparam(model, time_reparam_dct) + elif time_reparam is not None: + raise ValueError("unknown time_reparam: {}".format(time_reparam)) + self.model = model + max_plate_nesting = _guess_max_plate_nesting(model, (data, covariates), {}) + self.max_plate_nesting = max(max_plate_nesting, 1) # force a time plate + + kernel = NUTS( + model, + full_mass=dense_mass, + jit_compile=jit_compile, + ignore_jit_warnings=True, + max_tree_depth=max_tree_depth, + max_plate_nesting=max_plate_nesting, + ) + mcmc = MCMC( + kernel, + warmup_steps=num_warmup, + num_samples=num_samples, + num_chains=num_chains, + ) + mcmc.run(data, covariates) + # conditions to compute rhat + if (num_chains == 1 and num_samples >= 4) or ( + num_chains > 1 and num_samples >= 2 + ): + mcmc.summary() + + # inspect the model with particles plate = 1, so that we can reshape samples to + # add any missing plate dim in front. + with poutine.trace() as tr: + with pyro.plate("particles", 1, dim=-self.max_plate_nesting - 1): + model(data, covariates) + + self._trace = tr.trace + self._samples = mcmc.get_samples() + self._num_samples = num_samples * num_chains + for name, node in list(self._trace.nodes.items()): + if name not in self._samples: + del self._trace.nodes[name] + + def __call__(self, data, covariates, num_samples, batch_size=None): + """ + Samples forecasted values of data for time steps in ``[t1,t2)``, where + ``t1 = data.size(-2)`` is the duration of observed data and ``t2 = + covariates.size(-2)`` is the extended duration of covariates. For + example to forecast 7 days forward conditioned on 30 days of + observations, set ``t1=30`` and ``t2=37``. + + :param data: A tensor dataset with time dimension -2. + :type data: ~torch.Tensor + :param covariates: A tensor of covariates with time dimension -2. + For models not using covariates, pass a shaped empty tensor + ``torch.empty(duration, 0)``. + :type covariates: ~torch.Tensor + :param int num_samples: The number of samples to generate. + :param int batch_size: Optional batch size for sampling. This is useful + for generating many samples from models with large memory + footprint. Defaults to ``num_samples``. + :returns: A batch of joint posterior samples of shape + ``(num_samples,1,...,1) + data.shape[:-2] + (t2-t1,data.size(-1))``, + where the ``1``'s are inserted to avoid conflict with model plates. + :rtype: ~torch.Tensor + """ + return super().__call__(data, covariates, num_samples, batch_size) + + def forward(self, data, covariates, num_samples, batch_size=None): + assert data.size(-2) <= covariates.size(-2) + assert isinstance(num_samples, int) and num_samples > 0 + if batch_size is not None: + batches = [] + while num_samples > 0: + batch = self.forward(data, covariates, min(num_samples, batch_size)) + batches.append(batch) + num_samples -= batch_size + return torch.cat(batches) + + assert self.max_plate_nesting >= 1 + dim = -1 - self.max_plate_nesting + + with torch.no_grad(): + weights = torch.ones(self._num_samples, device=data.device) + indices = torch.multinomial( + weights, num_samples, replacement=num_samples > self._num_samples + ) + for name, node in list(self._trace.nodes.items()): + sample = self._samples[name].index_select(0, indices) + node["value"] = sample.reshape( + (num_samples,) + + (1,) * (node["value"].dim() - sample.dim()) + + sample.shape[1:] + ) + + with ExitStack() as stack: + if data.size(-2) < covariates.size(-2): + stack.enter_context(PrefixReplayMessenger(self._trace)) + stack.enter_context( + PrefixConditionMessenger(self.model._prefix_condition_data) + ) + with pyro.plate("particles", num_samples, dim=dim): + return self.model(data, covariates) diff --git a/pyro/source/pyro/contrib/forecast/util.py b/pyro/source/pyro/contrib/forecast/util.py new file mode 100644 index 0000000000000000000000000000000000000000..0736c0895b96a3f1df01ce5e400ea847f9c6e4d0 --- /dev/null +++ b/pyro/source/pyro/contrib/forecast/util.py @@ -0,0 +1,486 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import numbers +from functools import singledispatch + +import torch +from torch.distributions import transform_to, transforms + +import pyro.distributions as dist +from pyro.infer.reparam import DiscreteCosineReparam, HaarReparam +from pyro.poutine.messenger import Messenger +from pyro.poutine.util import site_is_subsample +from pyro.primitives import get_param_store + + +def time_reparam_dct(msg): + """ + EXPERIMENTAL Configures ``poutine.reparam()`` to use a ``HaarReparam`` for + all sites inside the ``time`` plate. + """ + if msg["is_observed"]: + return + for frame in msg["cond_indep_stack"]: + if frame.name == "time": + dim = frame.dim - msg["fn"].event_dim + return HaarReparam(dim=dim, experimental_allow_batch=True) + + +def time_reparam_haar(msg): + """ + EXPERIMENTAL Configures ``poutine.reparam()`` to use a ``DiscreteCosineReparam`` for + all sites inside the ``time`` plate. + """ + if msg["is_observed"]: + return + for frame in msg["cond_indep_stack"]: + if frame.name == "time": + dim = frame.dim - msg["fn"].event_dim + return DiscreteCosineReparam(dim=dim, experimental_allow_batch=True) + + +class MarkDCTParamMessenger(Messenger): + """ + EXPERIMENTAL Messenger to mark DCT dimension of parameter, for use with + :class:`pyro.optim.optim.DCTAdam`. + + :param str name: The name of the plate along which to apply discrete cosine + transforms on gradients. + """ + + def __init__(self, name): + super().__init__() + self.name = name + + def _postprocess_message(self, msg): + if msg["type"] != "param": + return + event_dim = msg["kwargs"].get("event_dim") + if event_dim is None: + return + for frame in msg["cond_indep_stack"]: + if frame.name == self.name: + value = msg["value"] + event_dim += value.unconstrained().dim() - value.dim() + value.unconstrained()._pyro_dct_dim = frame.dim - event_dim + return + + +class PrefixWarmStartMessenger(Messenger): + """ + EXPERIMENTAL Assuming the global param store has been populated with params + defined on a short time window, re-initialize by splicing old params with + new initial params defined on a longer time window. + """ + + def _pyro_param(self, msg): + store = get_param_store() + name = msg["name"] + if name not in store: + return + + if len(msg["args"]) >= 2: + new = msg["args"][1] + elif "init_tensor" in msg["kwargs"]: + new = msg["kwargs"]["init_tensor"] + else: + return # no init tensor specified + + if callable(new): + new = new() + old = store[name] + assert new.dim() == old.dim() + if new.shape == old.shape: + return + + # Splice old (warm start) and new (init) tensors. + # This only works for time-homogeneous constraints. + t = transform_to(store._constraints[name]) + new = t.inv(new) + old = t.inv(old) + for dim in range(new.dim()): + if new.size(dim) != old.size(dim): + break + assert new.size(dim) > old.size(dim) + assert new.shape[dim + 1 :] == old.shape[dim + 1 :] + split = old.size(dim) + index = (slice(None),) * dim + (slice(split, None),) + new = torch.cat([old, new[index]], dim=dim) + store[name] = t(new) + + +class PrefixReplayMessenger(Messenger): + """ + EXPERIMENTAL Given a trace of training data, replay a model with batched + sites extended to include both training and forecast time, using the guide + trace for the training prefix and samples from the prior on the forecast + postfix. + + :param trace: a guide trace. + :type trace: ~pyro.poutine.trace_struct.Trace + """ + + def __init__(self, trace): + super().__init__() + self.trace = trace + + def _pyro_post_sample(self, msg): + if site_is_subsample(msg): + return + + name = msg["name"] + if name not in self.trace: + return + + model_value = msg["value"] + guide_value = self.trace.nodes[name]["value"] + if model_value.shape == guide_value.shape: + msg["value"] = guide_value + return + + # Search for a single dim with mismatched size. + assert model_value.dim() == guide_value.dim() + for dim in range(model_value.dim()): + if model_value.size(dim) != guide_value.size(dim): + break + assert model_value.size(dim) > guide_value.size(dim) + assert model_value.shape[dim + 1 :] == guide_value.shape[dim + 1 :] + split = guide_value.size(dim) + index = (slice(None),) * dim + (slice(split, None),) + msg["value"] = torch.cat([guide_value, model_value[index]], dim=dim) + + +class PrefixConditionMessenger(Messenger): + """ + EXPERIMENTAL Given a prefix of t-many observations, condition a (t+f)-long + distribution on the observations, converting it to an f-long distribution. + + :param dict data: A dict mapping site name to tensors of observations. + """ + + def __init__(self, data): + super().__init__() + self.data = data + + def _pyro_sample(self, msg): + if msg["name"] not in self.data: + return + + assert msg["value"] is None + data = self.data[msg["name"]] + msg["fn"] = prefix_condition(msg["fn"], data) + + +# ---------------------------------------------------------------------------- +# The pattern-matching code in the remainder of this file could be eventually +# replace by much simpler Funsor logic. + +UNIVARIATE_DISTS = { + dist.Bernoulli: ("logits",), + dist.Beta: ("concentration1", "concentration0"), + dist.BetaBinomial: ("concentration1", "concentration0"), + dist.Cauchy: ("loc", "scale"), + dist.Dirichlet: ("concentration",), + dist.DirichletMultinomial: ("concentration",), + dist.Exponential: ("rate",), + dist.Gamma: ("concentration", "rate"), + dist.GammaPoisson: ("concentration", "rate"), + dist.Geometric: ("logits",), + dist.InverseGamma: ("concentration", "rate"), + dist.Laplace: ("loc", "scale"), + dist.LogNormal: ("loc", "scale"), + dist.NegativeBinomial: ("total_count", "logits"), + dist.Normal: ("loc", "scale"), + dist.Poisson: ("rate",), + dist.Stable: ("stability", "skew", "scale", "loc"), + dist.StudentT: ("df", "loc", "scale"), + dist.Uniform: ("low", "high"), + dist.ZeroInflatedPoisson: ("rate", "gate"), + dist.ZeroInflatedNegativeBinomial: ("total_count", "logits", "gate"), +} + + +@singledispatch +def prefix_condition(d, data): + """ + EXPERIMENTAL Given a distribution ``d`` of shape ``batch_shape + (t+f, d)`` + and data ``x`` of shape ``batch_shape + (t, d)``, compute a conditional + distribution of shape ``batch_shape + (f, d)``. Typically ``t`` is the + number of training time steps, ``f`` is the number of forecast time steps, + and ``d`` is the data dimension. + + :param d: a distribution with ``len(d.shape()) >= 2`` + :type d: ~pyro.distributions.Distribution + :param data: data of dimension at least 2. + :type data: ~torch.Tensor + """ + try: + return d.prefix_condition(data) + except AttributeError as e: + raise NotImplementedError( + "prefix_condition() does not suport {}".format(type(d)) + ) from e + + +@prefix_condition.register(dist.MaskedDistribution) +def _(d, data): + base_dist = prefix_condition(d.base_dist, data) + mask = d._mask[tuple(slice(-size, None) for size in base_dist.batch_shape)] + return base_dist.mask(mask) + + +@prefix_condition.register(dist.Independent) +def _(d, data): + base_dist = prefix_condition(d.base_dist, data) + return base_dist.to_event(d.reinterpreted_batch_ndims) + + +@prefix_condition.register(dist.IndependentHMM) +def _(d, data): + base_data = data.transpose(-1, -2).unsqueeze(-1) + base_dist = prefix_condition(d.base_dist, base_data) + return dist.IndependentHMM(base_dist) + + +@prefix_condition.register(dist.FoldedDistribution) +def _(d, data): + base_dist = prefix_condition(d.base_dist, data) + return dist.FoldedDistribution(base_dist) + + +@prefix_condition.register(dist.TransformedDistribution) +def _(d, data): + for t in reversed(d.transforms): + data = t.inv(data) + base_dist = prefix_condition(d.base_dist, data) + return dist.TransformedDistribution(base_dist, d.transforms) + + +def _prefix_condition_univariate(d, data): + t = data.size(-2) + params = {name: getattr(d, name)[..., t:, :] for name in UNIVARIATE_DISTS[type(d)]} + return type(d)(**params) + + +for _type in UNIVARIATE_DISTS: + prefix_condition.register(_type)(_prefix_condition_univariate) + + +@prefix_condition.register(dist.MultivariateNormal) +def _(d, data): + t = data.size(-2) + loc = d.loc[..., t:, :] + scale_tril = d.scale_tril[..., t:, :, :] + return dist.MultivariateNormal(loc, scale_tril=scale_tril) + + +@singledispatch +def reshape_batch(d, batch_shape): + """ + EXPERIMENTAL Given a distribution ``d``, reshape to different batch shape + of same number of elements. + + This is typically used to move the the rightmost batch dimension "time" to + an event dimension, while preserving the positions of other batch + dimensions. + + :param d: A distribution. + :type d: ~pyro.distributions.Distribution + :param tuple batch_shape: A new batch shape. + :returns: A distribution with the same type but given batch shape. + :rtype: ~pyro.distributions.Distribution + """ + raise NotImplementedError("reshape_batch() does not suport {}".format(type(d))) + + +@reshape_batch.register(dist.MaskedDistribution) +def _(d, batch_shape): + mask = d._mask + if not isinstance(d._mask, numbers.Number): + mask = mask.reshape(batch_shape) + base_dist = reshape_batch(d.base_dist, batch_shape) + return base_dist.mask(mask) + + +@reshape_batch.register(dist.Independent) +def _(d, batch_shape): + base_shape = batch_shape + d.event_shape[: d.reinterpreted_batch_ndims] + base_dist = reshape_batch(d.base_dist, base_shape) + return base_dist.to_event(d.reinterpreted_batch_ndims) + + +@reshape_batch.register(dist.IndependentHMM) +def _(d, batch_shape): + base_shape = batch_shape + d.event_shape[-1:] + base_dist = reshape_batch(d.base_dist, base_shape) + return dist.IndependentHMM(base_dist) + + +@reshape_batch.register(dist.FoldedDistribution) +def _(d, batch_shape): + base_dist = reshape_batch(d.base_dist, batch_shape) + return dist.FoldedDistribution(base_dist) + + +@reshape_batch.register(dist.TransformedDistribution) +def _(d, batch_shape): + base_dist = reshape_batch(d.base_dist, batch_shape) + old_shape = d.base_dist.shape() + new_shape = base_dist.shape() + transforms = [ + reshape_transform_batch(t, old_shape, new_shape) for t in d.transforms + ] + return dist.TransformedDistribution(base_dist, transforms) + + +def _reshape_batch_univariate(d, batch_shape): + batch_shape = batch_shape + (-1,) * d.event_dim + params = { + name: getattr(d, name).reshape(batch_shape) + for name in UNIVARIATE_DISTS[type(d)] + } + return type(d)(**params) + + +for _type in UNIVARIATE_DISTS: + reshape_batch.register(_type)(_reshape_batch_univariate) + + +@reshape_batch.register(dist.MultivariateNormal) +def _(d, batch_shape): + dim = d.event_shape[0] + loc = d.loc.reshape(batch_shape + (dim,)) + scale_tril = d.scale_tril.reshape(batch_shape + (dim, dim)) + return dist.MultivariateNormal(loc, scale_tril=scale_tril) + + +@reshape_batch.register(dist.GaussianHMM) +def _(d, batch_shape): + init = d._init + if init.batch_shape: + init = init.expand(d.batch_shape) + init = init.reshape(batch_shape) + + trans = d._trans + if len(trans.batch_shape) > 1: + trans = trans.expand(d.batch_shape + (-1,)) + trans = trans.reshape(batch_shape + (-1,)) + + obs = d._obs + if len(obs.batch_shape) > 1: + obs = obs.expand(d.batch_shape + (-1,)) + obs = obs.reshape(batch_shape + (-1,)) + + new = d._get_checked_instance(dist.GaussianHMM) + new.hidden_dim = d.hidden_dim + new.obs_dim = d.obs_dim + new._init = init + new._trans = trans + new._obs = obs + super(dist.GaussianHMM, new).__init__( + d.duration, batch_shape, d.event_shape, validate_args=d._validate_args + ) + return new + + +@reshape_batch.register(dist.LinearHMM) +def _(d, batch_shape): + init_dist = reshape_batch(d.initial_dist, batch_shape) + trans_mat = d.transition_matrix.reshape( + batch_shape + (-1, d.hidden_dim, d.hidden_dim) + ) + trans_dist = reshape_batch(d.transition_dist, batch_shape + (-1,)) + obs_mat = d.observation_matrix.reshape(batch_shape + (-1, d.hidden_dim, d.obs_dim)) + obs_dist = reshape_batch(d.observation_dist, batch_shape + (-1,)) + + new = d._get_checked_instance(dist.LinearHMM) + new.hidden_dim = d.hidden_dim + new.obs_dim = d.obs_dim + new.initial_dist = init_dist + new.transition_matrix = trans_mat + new.transition_dist = trans_dist + new.observation_matrix = obs_mat + new.observation_dist = obs_dist + transforms = [] + for transform in d.transforms: + assert type(transform) in UNIVARIATE_TRANSFORMS, ( + "Currently, reshape_batch only supports AbsTransform, " + + "ExpTransform, SigmoidTransform transform" + ) + old_shape = d.observation_dist.shape() + new_shape = obs_dist.shape() + transforms.append(reshape_transform_batch(transform, old_shape, new_shape)) + new.transforms = transforms + super(dist.LinearHMM, new).__init__( + d.duration, batch_shape, d.event_shape, validate_args=d._validate_args + ) + return new + + +UNIVARIATE_TRANSFORMS = { + transforms.AbsTransform: (), + transforms.AffineTransform: ("loc", "scale"), + transforms.ExpTransform: (), + transforms.PowerTransform: ("exponent",), + transforms.SigmoidTransform: (), +} + + +@singledispatch +def reshape_transform_batch(t, old_shape, new_shape): + """ + EXPERIMENTAL Given a transform ``t``, reshape to different batch shape + of same number of elements. + + This is typically used to correct the transform parameters' shapes after + reshaping the base distribution of a transformed distribution. + + :param t: A transform. + :type t: ~torch.distributions.transforms.Transform + :param tuple old_shape: The current shape of ``t``. + :param tuple new_shape: A new shape. + :returns: A transform with the same type but given new batch shape. + :rtype: ~torch.distributions.transforms.Transform + """ + raise NotImplementedError( + "reshape_transform_batch() does not suport {}".format(type(t)) + ) + + +def _reshape_batch_univariate_transform(t, old_shape, new_shape): + params = {} + for name in UNIVARIATE_TRANSFORMS[type(t)]: + value = getattr(t, name) + if not isinstance(value, numbers.Number): + value = value.expand(old_shape).reshape(new_shape) + params[name] = value + params["cache_size"] = t._cache_size + return type(t)(**params) + + +@reshape_transform_batch.register(torch.distributions.transforms._InverseTransform) +def _(t, old_shape, new_shape): + return reshape_transform_batch(t.inv, old_shape, new_shape).inv + + +@reshape_transform_batch.register(dist.transforms.ComposeTransform) +def _(t, old_shape, new_shape): + return dist.transforms.ComposeTransform( + [reshape_transform_batch(part, old_shape, new_shape) for part in t.parts] + ) + + +for _type in UNIVARIATE_TRANSFORMS: + reshape_transform_batch.register(_type)(_reshape_batch_univariate_transform) + + +@reshape_transform_batch.register(dist.transforms.HaarTransform) +@reshape_transform_batch.register(dist.transforms.DiscreteCosineTransform) +def _(t, old_shape, new_shape): + dim = t.event_dim + assert len(old_shape) >= dim + assert len(new_shape) >= dim + if old_shape[-dim:] != new_shape[-dim:]: + raise NotImplementedError + return t diff --git a/pyro/source/pyro/contrib/funsor/__init__.py b/pyro/source/pyro/contrib/funsor/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3c1d2eda0f95550fa9d81c35b6b704b28ef48a40 --- /dev/null +++ b/pyro/source/pyro/contrib/funsor/__init__.py @@ -0,0 +1,58 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pyroapi + +from pyro.contrib.funsor.handlers import condition, do, markov, vectorized_markov +from pyro.contrib.funsor.handlers import plate as _plate +from pyro.contrib.funsor.handlers.primitives import to_data, to_funsor +from pyro.primitives import ( + clear_param_store, + deterministic, + enable_validation, + factor, + get_param_store, + module, + param, + random_module, + sample, + set_rng_seed, + subsample, +) + + +def plate(*args, **kwargs): + return _plate(None, *args, **kwargs) + + +pyroapi.register_backend( + "contrib.funsor", + { + "distributions": "pyro.distributions", + "handlers": "pyro.contrib.funsor.handlers", + "infer": "pyro.contrib.funsor.infer", + "ops": "torch", + "optim": "pyro.optim", + "pyro": "pyro.contrib.funsor", + }, +) + +__all__ = [ + "clear_param_store", + "condition", + "deterministic", + "do", + "enable_validation", + "factor", + "get_param_store", + "markov", + "module", + "param", + "random_module", + "sample", + "set_rng_seed", + "subsample", + "to_data", + "to_funsor", + "vectorized_markov", +] diff --git a/pyro/source/pyro/contrib/funsor/handlers/__init__.py b/pyro/source/pyro/contrib/funsor/handlers/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..a05bc55517157a69949b53fd20f1ae1428cfa887 --- /dev/null +++ b/pyro/source/pyro/contrib/funsor/handlers/__init__.py @@ -0,0 +1,59 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from pyro.poutine import ( # noqa: F401 + block, + condition, + do, + escape, + infer_config, + mask, + reparam, + scale, + seed, + uncondition, +) +from pyro.poutine.handlers import _make_handler + +from .enum_messenger import EnumMessenger, queue # noqa: F401 +from .named_messenger import MarkovMessenger, NamedMessenger +from .plate_messenger import PlateMessenger, VectorizedMarkovMessenger +from .replay_messenger import ReplayMessenger +from .trace_messenger import TraceMessenger + + +@_make_handler(EnumMessenger, __name__) +def enum(fn=None, first_available_dim=None): ... + + +@_make_handler(MarkovMessenger, __name__) +def markov(fn=None, history=1, keep=False): ... + + +@_make_handler(NamedMessenger, __name__) +def named(fn=None, first_available_dim=None): ... + + +@_make_handler(PlateMessenger, __name__) +def plate( + fn=None, + name=None, + size=None, + subsample_size=None, + subsample=None, + dim=None, + use_cuda=None, + device=None, +): ... + + +@_make_handler(ReplayMessenger, __name__) +def replay(fn=None, trace=None, params=None): ... + + +@_make_handler(TraceMessenger, __name__) +def trace(fn=None, graph_type=None, param_only=None, pack_online=True): ... + + +@_make_handler(VectorizedMarkovMessenger, __name__) +def vectorized_markov(fn=None, name=None, size=None, dim=None, history=1): ... diff --git a/pyro/source/pyro/contrib/funsor/handlers/enum_messenger.py b/pyro/source/pyro/contrib/funsor/handlers/enum_messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..89fcd7e93b3f0e856e5b65e91799a34c175c99e7 --- /dev/null +++ b/pyro/source/pyro/contrib/funsor/handlers/enum_messenger.py @@ -0,0 +1,265 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +""" +This file contains reimplementations of some of Pyro's core enumeration machinery, +which should eventually be drop-in replacements for the current versions. +""" +import functools +import math +from collections import OrderedDict + +import funsor +import torch + +import pyro.poutine.runtime +import pyro.poutine.util +from pyro.contrib.funsor.handlers.named_messenger import NamedMessenger +from pyro.contrib.funsor.handlers.primitives import to_data, to_funsor +from pyro.contrib.funsor.handlers.replay_messenger import ReplayMessenger +from pyro.contrib.funsor.handlers.trace_messenger import TraceMessenger +from pyro.poutine.escape_messenger import EscapeMessenger +from pyro.poutine.subsample_messenger import _Subsample + +funsor.set_backend("torch") + + +@functools.singledispatch +def _get_support_value(funsor_dist, name, **kwargs): + raise ValueError( + "Could not extract point from {} at name {}".format(funsor_dist, name) + ) + + +@_get_support_value.register(funsor.cnf.Contraction) +def _get_support_value_contraction(funsor_dist, name, **kwargs): + delta_terms = [ + v + for v in funsor_dist.terms + if isinstance(v, funsor.delta.Delta) and name in v.fresh + ] + assert len(delta_terms) == 1 + return _get_support_value(delta_terms[0], name, **kwargs) + + +@_get_support_value.register(funsor.delta.Delta) +def _get_support_value_delta(funsor_dist, name, **kwargs): + assert name in funsor_dist.fresh + return OrderedDict(funsor_dist.terms)[name][0] + + +@_get_support_value.register(funsor.Tensor) +def _get_support_value_tensor(funsor_dist, name, **kwargs): + assert name in funsor_dist.inputs + return funsor.Tensor( + funsor.ops.new_arange(funsor_dist.data, funsor_dist.inputs[name].size), + OrderedDict([(name, funsor_dist.inputs[name])]), + funsor_dist.inputs[name].size, + ) + + +@_get_support_value.register(funsor.distribution.Distribution) +def _get_support_value_distribution(funsor_dist, name, expand=False): + assert name == funsor_dist.value.name + return funsor_dist.enumerate_support(expand=expand) + + +def _enum_strategy_default(dist, msg): + sample_inputs = OrderedDict( + (f.name, funsor.Bint[f.size]) + for f in msg["cond_indep_stack"] + if f.vectorized and f.name not in dist.inputs + ) + sampled_dist = dist.sample(msg["name"], sample_inputs) + sampled_dist -= sum([math.log(v.size) for v in sample_inputs.values()], 0) + return sampled_dist + + +def _enum_strategy_diagonal(dist, msg): + sample_dim_name = "{}__PARTICLES".format(msg["name"]) + sample_inputs = OrderedDict( + {sample_dim_name: funsor.Bint[msg["infer"]["num_samples"]]} + ) + plate_names = frozenset(f.name for f in msg["cond_indep_stack"] if f.vectorized) + ancestor_names = frozenset( + k + for k, v in dist.inputs.items() + if v.dtype != "real" and k != msg["name"] and k not in plate_names + ) + # TODO should the ancestor_indices be pyro.observed? + ancestor_indices = {name: sample_dim_name for name in ancestor_names} + denom = ( + sum([math.log(v.size) for v in sample_inputs.values()], 0) + if not ancestor_indices + else math.log(msg["infer"]["num_samples"]) + ) + sampled_dist = dist(**ancestor_indices).sample( + msg["name"], sample_inputs if not ancestor_indices else None + ) + sampled_dist -= denom + return sampled_dist + + +def _enum_strategy_mixture(dist, msg): + sample_dim_name = "{}__PARTICLES".format(msg["name"]) + sample_inputs = OrderedDict( + {sample_dim_name: funsor.Bint[msg["infer"]["num_samples"]]} + ) + plate_names = frozenset(f.name for f in msg["cond_indep_stack"] if f.vectorized) + ancestor_names = frozenset( + k + for k, v in dist.inputs.items() + if v.dtype != "real" and k != msg["name"] and k not in plate_names + ) + plate_inputs = OrderedDict((k, dist.inputs[k]) for k in plate_names) + # TODO should the ancestor_indices be pyro.sampled? + ancestor_indices = { + # TODO make this comprehension less gross + name: _get_support_value( + funsor.torch.distributions.CategoricalLogits( + # sample different ancestors for each plate slice + logits=funsor.Tensor( + # TODO avoid use of torch.zeros here in favor of funsor.ops.new_zeros + torch.zeros((1,)).expand( + tuple(v.dtype for v in plate_inputs.values()) + + (dist.inputs[name].dtype,) + ), + plate_inputs, + ), + )(value=name).sample(name, sample_inputs), + name, + ) + for name in ancestor_names + } + denom = ( + sum([math.log(v.size) for v in sample_inputs.values()], 0) + if not ancestor_indices + else math.log(msg["infer"]["num_samples"]) + ) + sampled_dist = dist(**ancestor_indices).sample( + msg["name"], sample_inputs if not ancestor_indices else None + ) + sampled_dist -= denom + return sampled_dist + + +def _enum_strategy_full(dist, msg): + sample_dim_name = "{}__PARTICLES".format(msg["name"]) + sample_inputs = OrderedDict( + {sample_dim_name: funsor.Bint[msg["infer"]["num_samples"]]} + ) + sampled_dist = dist.sample(msg["name"], sample_inputs) + sampled_dist -= math.log(msg["infer"]["num_samples"]) + return sampled_dist + + +def _enum_strategy_exact(dist, msg): + if isinstance(dist, funsor.Tensor): + dist = dist - dist.reduce(funsor.ops.logaddexp, msg["name"]) + return dist + + +def enumerate_site(dist, msg): + # TODO come up with a better dispatch system for enumeration strategies + if msg["infer"]["enumerate"] == "flat": + return _enum_strategy_default(dist, msg) + elif msg["infer"].get("num_samples", None) is None: + return _enum_strategy_exact(dist, msg) + elif msg["infer"]["num_samples"] > 1 and ( + msg["infer"].get("expand", False) or msg["infer"].get("tmc") == "full" + ): + return _enum_strategy_full(dist, msg) + elif ( + msg["infer"]["num_samples"] > 1 + and msg["infer"].get("tmc", "diagonal") == "diagonal" + ): + return _enum_strategy_diagonal(dist, msg) + elif msg["infer"]["num_samples"] > 1 and msg["infer"]["tmc"] == "mixture": + return _enum_strategy_mixture(dist, msg) + raise ValueError("{} not valid enum strategy".format(msg)) + + +class EnumMessenger(NamedMessenger): + """ + This version of :class:`~EnumMessenger` uses :func:`~pyro.contrib.funsor.to_data` + to allocate a fresh enumeration dim for each discrete sample site. + """ + + def _pyro_sample(self, msg): + if ( + msg["done"] + or msg["is_observed"] + or msg["infer"].get("enumerate") not in {"flat", "parallel"} + or isinstance(msg["fn"], _Subsample) + ): + return + + if "funsor" not in msg: + msg["funsor"] = {} + + unsampled_log_measure = to_funsor(msg["fn"], output=funsor.Real)( + value=msg["name"] + ) + msg["funsor"]["log_measure"] = enumerate_site(unsampled_log_measure, msg) + msg["funsor"]["value"] = _get_support_value( + msg["funsor"]["log_measure"], + msg["name"], + expand=msg["infer"].get("expand", False), + ) + msg["value"] = to_data(msg["funsor"]["value"]) + msg["done"] = True + + +def queue( + fn=None, + queue=None, + max_tries=int(1e6), + num_samples=-1, + extend_fn=pyro.poutine.util.enum_extend, + escape_fn=pyro.poutine.util.discrete_escape, +): + """ + Used in sequential enumeration over discrete variables (copied from poutine.queue). + + Given a stochastic function and a queue, + return a return value from a complete trace in the queue. + + :param fn: a stochastic function (callable containing Pyro primitive calls) + :param q: a queue data structure like multiprocessing.Queue to hold partial traces + :param max_tries: maximum number of attempts to compute a single complete trace + :param extend_fn: function (possibly stochastic) that takes a partial trace and a site, + and returns a list of extended traces + :param escape_fn: function (possibly stochastic) that takes a partial trace and a site, + and returns a boolean value to decide whether to exit + :param num_samples: optional number of extended traces for extend_fn to return + :returns: stochastic function decorated with poutine logic + """ + + # TODO rewrite this to use purpose-built trace/replay handlers + def wrapper(wrapped): + def _fn(*args, **kwargs): + for i in range(max_tries): + assert ( + not queue.empty() + ), "trying to get() from an empty queue will deadlock" + + next_trace = queue.get() + try: + ftr = TraceMessenger()( + EscapeMessenger( + escape_fn=functools.partial(escape_fn, next_trace) + )(ReplayMessenger(trace=next_trace)(wrapped)) + ) + return ftr(*args, **kwargs) + except pyro.poutine.runtime.NonlocalExit as site_container: + site_container.reset_stack() # TODO implement missing ._reset()s + for tr in extend_fn( + ftr.trace.copy(), site_container.site, num_samples=num_samples + ): + queue.put(tr) + + raise ValueError("max tries ({}) exceeded".format(str(max_tries))) + + return _fn + + return wrapper(fn) if fn is not None else wrapper diff --git a/pyro/source/pyro/contrib/funsor/handlers/named_messenger.py b/pyro/source/pyro/contrib/funsor/handlers/named_messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..4d96539e121682386fa12ad8f4b5ed794d5622b9 --- /dev/null +++ b/pyro/source/pyro/contrib/funsor/handlers/named_messenger.py @@ -0,0 +1,200 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from collections import OrderedDict +from contextlib import ExitStack + +from pyro.contrib.funsor.handlers.runtime import ( + _DIM_STACK, + DimRequest, + DimType, + StackFrame, +) +from pyro.poutine.reentrant_messenger import ReentrantMessenger + + +class NamedMessenger(ReentrantMessenger): + """ + Base effect handler class for the :func:`~pyro.contrib.funsor.to_funsor` + and :func:`~pyro.contrib.funsor.to_data` primitives. + Any effect handlers that invoke these primitives internally or wrap + code that does should inherit from :class:`~NamedMessenger`. + + This design ensures that the global name-dim mapping is reset upon handler exit + rather than potentially persisting until the entire program terminates. + """ + + def __init__(self, first_available_dim=None): + assert ( + first_available_dim is None or first_available_dim < 0 + ), first_available_dim + self.first_available_dim = first_available_dim + self._saved_dims = set() + return super().__init__() + + def __enter__(self): + if self._ref_count == 0: + if self.first_available_dim is not None: + self._prev_first_dim = _DIM_STACK.set_first_available_dim( + self.first_available_dim + ) + if _DIM_STACK.outermost is None: + _DIM_STACK.outermost = self + for name, dim in self._saved_dims: + _DIM_STACK.global_frame[name] = dim + self._saved_dims = set() + return super().__enter__() + + def __exit__(self, *args, **kwargs): + if self._ref_count == 1: + if self.first_available_dim is not None: + _DIM_STACK.set_first_available_dim(self._prev_first_dim) + if _DIM_STACK.outermost is self: + _DIM_STACK.outermost = None + _DIM_STACK.set_first_available_dim(_DIM_STACK.DEFAULT_FIRST_DIM) + self._saved_dims |= set(_DIM_STACK.global_frame.name_to_dim.items()) + for name, dim in self._saved_dims: + del _DIM_STACK.global_frame[name] + return super().__exit__(*args, **kwargs) + + @staticmethod # only depends on the global _DIM_STACK state, not self + def _pyro_to_data(msg): + (funsor_value,) = msg["args"] + name_to_dim = msg["kwargs"].setdefault("name_to_dim", OrderedDict()) + dim_type = msg["kwargs"].setdefault("dim_type", DimType.LOCAL) + + batch_names = tuple(funsor_value.inputs.keys()) + + # interpret all names/dims as requests since we only run this function once + name_to_dim_request = name_to_dim.copy() + for name in batch_names: + dim = name_to_dim.get(name, None) + name_to_dim_request[name] = ( + dim if isinstance(dim, DimRequest) else DimRequest(dim, dim_type) + ) + + # request and update name_to_dim in-place + # name_to_dim.update(_DIM_STACK.allocate_name_to_dim(name_to_dim_request)) + name_to_dim.update(_DIM_STACK.allocate(name_to_dim_request)) + + msg["stop"] = True # only need to run this once per to_data call + + @staticmethod # only depends on the global _DIM_STACK state, not self + def _pyro_to_funsor(msg): + if len(msg["args"]) == 2: + raw_value, output = msg["args"] + else: + raw_value = msg["args"][0] + output = msg["kwargs"].setdefault("output", None) + dim_to_name = msg["kwargs"].setdefault("dim_to_name", OrderedDict()) + dim_type = msg["kwargs"].setdefault("dim_type", DimType.LOCAL) + + event_dim = len(output.shape) if output else 0 + try: + batch_shape = raw_value.batch_shape # TODO make make this more robust + except AttributeError: + full_shape = getattr(raw_value, "shape", ()) + batch_shape = full_shape[: len(full_shape) - event_dim] + + batch_dims = tuple( + dim for dim in range(-len(batch_shape), 0) if batch_shape[dim] > 1 + ) + + # interpret all names/dims as requests since we only run this function once + dim_to_name_request = dim_to_name.copy() + for dim in batch_dims: + name = dim_to_name.get(dim, None) + dim_to_name_request[dim] = ( + name if isinstance(name, DimRequest) else DimRequest(name, dim_type) + ) + + # request and update dim_to_name in-place + dim_to_name.update(_DIM_STACK.allocate(dim_to_name_request)) + + msg["stop"] = True # only need to run this once per to_funsor call + + +class MarkovMessenger(NamedMessenger): + """ + Handler for converting to/from funsors consistent with Pyro's positional batch dimensions. + + :param int history: The number of previous contexts visible from the + current context. Defaults to 1. If zero, this is similar to + :class:`pyro.plate`. + :param bool keep: If true, frames are replayable. This is important + when branching: if ``keep=True``, neighboring branches at the same + level can depend on each other; if ``keep=False``, neighboring branches + are independent (conditioned on their shared ancestors). + """ + + def __init__(self, history=1, keep=False): + self.history = history + self.keep = keep + self._iterable = None + self._saved_frames = [] + super().__init__() + + def __call__(self, fn): + if fn is not None and not callable(fn): + self._iterable = fn + return self + return super().__call__(fn) + + def __iter__(self): + assert self._iterable is not None + _DIM_STACK.push_iter(_DIM_STACK.local_frame) + with ExitStack() as stack: + for value in self._iterable: + stack.enter_context(self) + yield value + _DIM_STACK.pop_iter() + + def __enter__(self): + if self.keep and self._saved_frames: + frame = self._saved_frames.pop() + else: + frame = StackFrame( + name_to_dim=OrderedDict(), + dim_to_name=OrderedDict(), + history=self.history, + keep=self.keep, + ) + + _DIM_STACK.push_local(frame) + return super().__enter__() + + def __exit__(self, *args, **kwargs): + if self.keep: + self._saved_frames.append(_DIM_STACK.pop_local()) + else: + _DIM_STACK.pop_local() + return super().__exit__(*args, **kwargs) + + +class GlobalNamedMessenger(NamedMessenger): + """ + Base class for any new effect handlers that use the + :func:`~pyro.contrib.funsor.to_funsor` and :func:`~pyro.contrib.funsor.to_data` primitives + to allocate ``DimType.GLOBAL`` or ``DimType.VISIBLE`` dimensions. + + Serves as a manual "scope" for dimensions that should not be recycled by :class:`~MarkovMessenger`: + global dimensions will be considered active until the innermost :class:`~GlobalNamedMessenger` + under which they were initially allocated exits. + """ + + def __init__(self, first_available_dim=None): + self._saved_frames = [] + super().__init__(first_available_dim=first_available_dim) + + def __enter__(self): + frame = ( + self._saved_frames.pop() + if self._saved_frames + else StackFrame(name_to_dim=OrderedDict(), dim_to_name=OrderedDict()) + ) + _DIM_STACK.push_global(frame) + return super().__enter__() + + def __exit__(self, *args): + self._saved_frames.append(_DIM_STACK.pop_global()) + return super().__exit__(*args) diff --git a/pyro/source/pyro/contrib/funsor/handlers/plate_messenger.py b/pyro/source/pyro/contrib/funsor/handlers/plate_messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..2c76e85e9f4f2569f4fa0ff9b7cb71a1b3a4e5af --- /dev/null +++ b/pyro/source/pyro/contrib/funsor/handlers/plate_messenger.py @@ -0,0 +1,383 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from collections import OrderedDict +from numbers import Number + +import funsor + +from pyro.contrib.funsor.handlers.named_messenger import ( + DimRequest, + DimType, + GlobalNamedMessenger, + NamedMessenger, +) +from pyro.contrib.funsor.handlers.primitives import to_data, to_funsor +from pyro.distributions.util import copy_docs_from +from pyro.poutine.broadcast_messenger import BroadcastMessenger +from pyro.poutine.indep_messenger import CondIndepStackFrame +from pyro.poutine.messenger import Messenger +from pyro.poutine.runtime import effectful +from pyro.poutine.subsample_messenger import ( + SubsampleMessenger as OrigSubsampleMessenger, +) +from pyro.util import ignore_jit_warnings + +funsor.set_backend("torch") + + +class IndepMessenger(GlobalNamedMessenger): + """ + Vectorized plate implementation using :func:`~pyro.contrib.funsor.to_data` instead of + :class:`~pyro.poutine.runtime._DimAllocator`. + """ + + def __init__(self, name=None, size=None, dim=None, indices=None): + assert dim is None or dim < 0 + super().__init__() + # without a name or dim, treat as a "vectorize" effect and allocate a non-visible dim + self.dim_type = ( + DimType.GLOBAL if name is None and dim is None else DimType.VISIBLE + ) + self.name = name if name is not None else funsor.interpreter.gensym("PLATE") + self.size = size + self.dim = dim + if not hasattr(self, "_full_size"): + self._full_size = size + if indices is None: + indices = funsor.ops.new_arange( + funsor.tensor.get_default_prototype(), self.size + ) + assert len(indices) == size + + self._indices = funsor.Tensor( + indices, OrderedDict([(self.name, funsor.Bint[self.size])]), self._full_size + ) + + def __enter__(self): + super().__enter__() # do this first to take care of globals recycling + name_to_dim = OrderedDict([(self.name, DimRequest(self.dim, self.dim_type))]) + indices = to_data(self._indices, name_to_dim=name_to_dim) + # extract the dimension allocated by to_data to match plate's current behavior + self.dim, self.indices = -indices.dim(), indices.reshape(-1) + return self + + def _pyro_sample(self, msg): + frame = CondIndepStackFrame(self.name, self.dim, self.size, 0) + msg["cond_indep_stack"] = (frame,) + msg["cond_indep_stack"] + + def _pyro_param(self, msg): + frame = CondIndepStackFrame(self.name, self.dim, self.size, 0) + msg["cond_indep_stack"] = (frame,) + msg["cond_indep_stack"] + + +@copy_docs_from(OrigSubsampleMessenger) +class SubsampleMessenger(IndepMessenger): + def __init__( + self, + name=None, + size=None, + subsample_size=None, + subsample=None, + dim=None, + use_cuda=None, + device=None, + ): + size, subsample_size, indices = OrigSubsampleMessenger._subsample( + name, size, subsample_size, subsample, use_cuda, device + ) + self.subsample_size = subsample_size + self._full_size = size + self._scale = float(size) / subsample_size + # initialize other things last + super().__init__(name, subsample_size, dim, indices) + + def _pyro_sample(self, msg): + super()._pyro_sample(msg) + msg["scale"] = msg["scale"] * self._scale + + def _pyro_param(self, msg): + super()._pyro_param(msg) + msg["scale"] = msg["scale"] * self._scale + + def _subsample_site_value(self, value, event_dim=None): + if ( + self.dim is not None + and event_dim is not None + and self.subsample_size < self._full_size + ): + event_shape = value.shape[len(value.shape) - event_dim :] + funsor_value = to_funsor(value, output=funsor.Reals[event_shape]) + if self.name in funsor_value.inputs: + return to_data(funsor_value(**{self.name: self._indices})) + return value + + def _pyro_post_param(self, msg): + event_dim = msg["kwargs"].get("event_dim") + new_value = self._subsample_site_value(msg["value"], event_dim) + if new_value is not msg["value"]: + if hasattr(msg["value"], "_pyro_unconstrained_param"): + param = msg["value"]._pyro_unconstrained_param + else: + param = msg["value"].unconstrained() + + if not hasattr(param, "_pyro_subsample"): + param._pyro_subsample = {} # TODO is this going to persist correctly? + + param._pyro_subsample[self.dim - event_dim] = self.indices + new_value._pyro_unconstrained_param = param + msg["value"] = new_value + + def _pyro_post_subsample(self, msg): + event_dim = msg["kwargs"].get("event_dim") + msg["value"] = self._subsample_site_value(msg["value"], event_dim) + + +class PlateMessenger(SubsampleMessenger): + """ + Combines new :class:`~IndepMessenger` implementation with existing + :class:`pyro.poutine.BroadcastMessenger`. Should eventually be a drop-in + replacement for :class:`pyro.plate`. + """ + + def __enter__(self): + super().__enter__() + return self.indices # match pyro.plate behavior + + def _pyro_sample(self, msg): + super()._pyro_sample(msg) + BroadcastMessenger._pyro_sample(msg) + + def __iter__(self): + return iter( + _SequentialPlateMessenger( + self.name, self.size, self._indices.data.squeeze(), self._scale + ) + ) + + +class _SequentialPlateMessenger(Messenger): + """ + Implementation of sequential plate. Should not be used directly. + """ + + def __init__(self, name, size, indices, scale): + self.name = name + self.size = size + self.indices = indices + self._scale = scale + self._counter = 0 + super().__init__() + + def __iter__(self): + with ignore_jit_warnings([("Iterating over a tensor", RuntimeWarning)]), self: + self._counter = 0 + for i in self.indices: + self._counter += 1 + yield i if isinstance(i, Number) else i.item() + + def _pyro_sample(self, msg): + frame = CondIndepStackFrame(self.name, None, self.size, self._counter) + msg["cond_indep_stack"] = (frame,) + msg["cond_indep_stack"] + msg["scale"] = msg["scale"] * self._scale + + def _pyro_param(self, msg): + frame = CondIndepStackFrame(self.name, None, self.size, self._counter) + msg["cond_indep_stack"] = (frame,) + msg["cond_indep_stack"] + msg["scale"] = msg["scale"] * self._scale + + +class VectorizedMarkovMessenger(NamedMessenger): + """ + Construct for Markov chain of variables designed for efficient elimination of Markov + dimensions using the parallel-scan algorithm. Whenever permissible, + :class:`~pyro.contrib.funsor.vectorized_markov` is interchangeable with + :class:`~pyro.contrib.funsor.markov`. + + The for loop generates both :class:`int` and 1-dimensional :class:`torch.Tensor` indices: + :code:`(0, ..., history-1, torch.arange(0, size-history), ..., torch.arange(history, size))`. + :class:`int` indices are used to initiate the Markov chain and :class:`torch.Tensor` indices + are used to construct vectorized transition probabilities for efficient elimination by + the parallel-scan algorithm. + + When ``history==0`` :class:`~pyro.contrib.funsor.vectorized_markov` behaves + similar to :class:`~pyro.contrib.funsor.plate`. + + After the for loop is run, Markov variables are identified and then the ``step`` + information is constructed and added to the trace. ``step`` informs inference algorithms + which variables belong to a Markov chain. + + .. code-block:: py + + data = torch.ones(3, dtype=torch.float) + + def model(data, vectorized=True): + + init = pyro.param("init", lambda: torch.rand(3), constraint=constraints.simplex) + trans = pyro.param("trans", lambda: torch.rand((3, 3)), constraint=constraints.simplex) + locs = pyro.param("locs", lambda: torch.rand(3,)) + + markov_chain = \\ + pyro.vectorized_markov(name="time", size=len(data), dim=-1) if vectorized \\ + else pyro.markov(range(len(data))) + for i in markov_chain: + x_curr = pyro.sample("x_{}".format(i), dist.Categorical( + init if isinstance(i, int) and i < 1 else trans[x_prev]), + + pyro.sample("y_{}".format(i), + dist.Normal(Vindex(locs)[..., x_curr], 1.), + obs=data[i]) + x_prev = x_curr + + # trace.nodes["time"]["value"] + # frozenset({('x_0', 'x_slice(0, 2, None)', 'x_slice(1, 3, None)')}) + # + # pyro.vectorized_markov trace + # ... + # Sample Sites: + # locs dist | 3 + # value | 3 + # log_prob | + # x_0 dist | + # value 3 1 1 1 1 | + # log_prob 3 1 1 1 1 | + # y_0 dist 3 1 1 1 1 | + # value | + # log_prob 3 1 1 1 1 | + # x_slice(1, 3, None) dist 3 1 1 1 1 2 | + # value 3 1 1 1 1 1 1 | + # log_prob 3 3 1 1 1 1 2 | + # y_slice(1, 3, None) dist 3 1 1 1 1 1 2 | + # value 2 | + # log_prob 3 1 1 1 1 1 2 | + # + # pyro.markov trace + # ... + # Sample Sites: + # locs dist | 3 + # value | 3 + # log_prob | + # x_0 dist | + # value 3 1 1 1 1 | + # log_prob 3 1 1 1 1 | + # y_0 dist 3 1 1 1 1 | + # value | + # log_prob 3 1 1 1 1 | + # x_1 dist 3 1 1 1 1 | + # value 3 1 1 1 1 1 | + # log_prob 3 3 1 1 1 1 | + # y_1 dist 3 1 1 1 1 1 | + # value | + # log_prob 3 1 1 1 1 1 | + # x_2 dist 3 1 1 1 1 1 | + # value 3 1 1 1 1 | + # log_prob 3 3 1 1 1 1 | + # y_2 dist 3 1 1 1 1 | + # value | + # log_prob 3 1 1 1 1 | + + .. warning:: This is only valid if there is only one Markov + dimension per branch. + + :param str name: A unique name of a Markov dimension to help inference algorithm + eliminate variables in the Markov chain. + :param int size: Length (size) of the Markov chain. + :param int dim: An optional dimension to use for this Markov dimension. + If specified, ``dim`` should be negative, i.e. should index from the + right. If not specified, ``dim`` is set to the rightmost dim that is + left of all enclosing :class:`~pyro.contrib.funsor.plate` contexts. + :param int history: Memory (order) of the Markov chain. Also the number + of previous contexts visible from the current context. Defaults to 1. + If zero, this is similar to :class:`~pyro.contrib.funsor.plate`. + :return: Returns both :class:`int` and 1-dimensional :class:`torch.Tensor` indices: + ``(0, ..., history-1, torch.arange(size-history), ..., torch.arange(history, size))``. + """ + + def __init__(self, name=None, size=None, dim=None, history=1): + self.name = name + self.size = size + self.dim = dim + self.history = history + super().__init__() + + @staticmethod + @effectful(type="markov_chain") + def _markov_chain(name=None, markov_vars=set(), suffixes=list()): + """ + Constructs names of markov variables in the `chain` + from markov_vars prefixes and suffixes. + + :param str name: The name of the markov dimension. + :param set markov_vars: Markov variable name markov_vars. + :param list suffixes: Markov variable name suffixes. + (`0, ..., history-1, torch.arange(0, size-history), ..., torch.arange(history, size)`) + :return: step information + :rtype: frozenset + """ + chain = frozenset( + { + tuple("{}{}".format(var, suffix) for suffix in suffixes) + for var in markov_vars + } + ) + return chain + + def __iter__(self): + self._auxiliary_to_markov = {} + self._markov_vars = set() + self._suffixes = [] + for self._suffix in range(self.history): + self._suffixes.append(self._suffix) + yield self._suffix + with self: + with IndepMessenger( + name=self.name, size=self.size - self.history, dim=self.dim + ) as time: + time_indices = [time.indices + i for i in range(self.history + 1)] + time_slices = [ + slice(i, self.size - self.history + i) + for i in range(self.history + 1) + ] + self._suffixes.extend(time_slices) + for self._suffix, self._indices in zip(time_slices, time_indices): + yield self._indices + self._markov_chain( + name=self.name, markov_vars=self._markov_vars, suffixes=self._suffixes + ) + + def _pyro_sample(self, msg): + if type(msg["fn"]).__name__ == "_Subsample": + return + BroadcastMessenger._pyro_sample(msg) + # replace tensor suffix with a nice slice suffix + if isinstance(self._suffix, slice): + assert msg["name"].endswith(str(self._indices)) + msg["name"] = msg["name"][: -len(str(self._indices))] + str(self._suffix) + if str(self._suffix) != str(self._suffixes[-1]): + # _do_not_score: record these sites when tracing for use with replay, + # but do not include them in ELBO computation. + msg["infer"]["_do_not_score"] = True + # map auxiliary var to markov var name prefix + # assuming that site name has a format: "markov_var{}".format(_suffix) + # is there a better way? + markov_var = msg["name"][: -len(str(self._suffix))] + self._auxiliary_to_markov[msg["name"]] = markov_var + + def _pyro_post_sample(self, msg): + """ + At the last step of the for loop identify markov variables. + """ + if type(msg["fn"]).__name__ == "_Subsample": + return + # if last step in the for loop + if str(self._suffix) == str(self._suffixes[-1]): + funsor_log_prob = ( + msg["funsor"]["log_prob"] + if "log_prob" in msg.get("funsor", {}) + else to_funsor(msg["fn"].log_prob(msg["value"]), output=funsor.Real) + ) + # for auxiliary sites in the log_prob + for name in set(funsor_log_prob.inputs) & set(self._auxiliary_to_markov): + # add markov var name prefix to self._markov_vars + markov_var = self._auxiliary_to_markov[name] + self._markov_vars.add(markov_var) diff --git a/pyro/source/pyro/contrib/funsor/handlers/primitives.py b/pyro/source/pyro/contrib/funsor/handlers/primitives.py new file mode 100644 index 0000000000000000000000000000000000000000..706f8e187f38ed2ffedbec13ece454c18506abf0 --- /dev/null +++ b/pyro/source/pyro/contrib/funsor/handlers/primitives.py @@ -0,0 +1,29 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pyro.poutine.runtime +from pyro.contrib.funsor.handlers.runtime import _DIM_STACK, DimRequest, DimType + + +@pyro.poutine.runtime.effectful(type="to_funsor") +def to_funsor(x, output=None, dim_to_name=None, dim_type=DimType.LOCAL): + import funsor + + if pyro.poutine.runtime.am_i_wrapped() and not dim_to_name: + dim_to_name = _DIM_STACK.global_frame.dim_to_name.copy() + assert not dim_to_name or not any( + isinstance(name, DimRequest) for name in dim_to_name.values() + ) + return funsor.to_funsor(x, output=output, dim_to_name=dim_to_name) + + +@pyro.poutine.runtime.effectful(type="to_data") +def to_data(x, name_to_dim=None, dim_type=DimType.LOCAL): + import funsor + + if pyro.poutine.runtime.am_i_wrapped() and not name_to_dim: + name_to_dim = _DIM_STACK.global_frame.name_to_dim.copy() + assert not name_to_dim or not any( + isinstance(dim, DimRequest) for dim in name_to_dim.values() + ) + return funsor.to_data(x, name_to_dim=name_to_dim) diff --git a/pyro/source/pyro/contrib/funsor/handlers/replay_messenger.py b/pyro/source/pyro/contrib/funsor/handlers/replay_messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..35cb5d9c790072253980eee428a12fe0ab182d95 --- /dev/null +++ b/pyro/source/pyro/contrib/funsor/handlers/replay_messenger.py @@ -0,0 +1,41 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from pyro.contrib.funsor.handlers.primitives import to_data +from pyro.poutine.replay_messenger import ReplayMessenger as OrigReplayMessenger + + +class ReplayMessenger(OrigReplayMessenger): + """ + This version of :class:`~ReplayMessenger` is almost identical to the original version, + except that it calls :func:`~pyro.contrib.funsor.to_data` on the replayed funsor values. + This may result in different unpacked shapes, but should produce correct allocations. + """ + + def _pyro_sample(self, msg): + name = msg["name"] + msg["replay_active"] = ( + True # indicate replaying so importance weights can be scaled + ) + if self.trace is None: + return + + if name in self.trace: + guide_msg = self.trace.nodes[name] + msg["funsor"] = {} if "funsor" not in msg else msg["funsor"] + if guide_msg["type"] != "sample": + raise RuntimeError("site {} must be sample in trace".format(name)) + # TODO make this work with sequential enumeration + if guide_msg.get("funsor", {}).get("value", None) is not None: + msg["value"] = to_data( + guide_msg["funsor"]["value"] + ) # only difference is here + else: + msg["value"] = guide_msg["value"] + msg["infer"] = guide_msg["infer"] + msg["done"] = True + # indicates that this site was latent and replayed, so its importance weight is p/q + msg["replay_skipped"] = False + else: + # indicates that this site was latent and not replayed, so its importance weight is 1 + msg["replay_skipped"] = msg.get("replay_skipped", True) diff --git a/pyro/source/pyro/contrib/funsor/handlers/runtime.py b/pyro/source/pyro/contrib/funsor/handlers/runtime.py new file mode 100644 index 0000000000000000000000000000000000000000..5ec337230818964a21b3bc2fe4bcff974fec6474 --- /dev/null +++ b/pyro/source/pyro/contrib/funsor/handlers/runtime.py @@ -0,0 +1,237 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from collections import Counter, OrderedDict, namedtuple +from enum import Enum + + +class StackFrame: + """ + Consistent bidirectional mapping between integer positional dimensions and names. + Can be queried like a dictionary (``value = frame[key]``, ``frame[key] = value``). + """ + + def __init__(self, name_to_dim, dim_to_name, history=1, keep=False): + assert isinstance(name_to_dim, OrderedDict) and all( + isinstance(name, str) and isinstance(dim, int) + for name, dim in name_to_dim.items() + ) + assert isinstance(dim_to_name, OrderedDict) and all( + isinstance(name, str) and isinstance(dim, int) + for dim, name in dim_to_name.items() + ) + self.name_to_dim = name_to_dim + self.dim_to_name = dim_to_name + self.history = history + self.keep = keep + + def __setitem__(self, key, value): + assert ( + isinstance(key, (int, str)) + and isinstance(value, (int, str)) + and type(key) != type(value) + ) + name, dim = (value, key) if isinstance(key, int) else (key, value) + self.name_to_dim[name], self.dim_to_name[dim] = dim, name + + def __getitem__(self, key): + assert isinstance(key, (int, str)) + return self.dim_to_name[key] if isinstance(key, int) else self.name_to_dim[key] + + def __delitem__(self, key): + assert isinstance(key, (int, str)) + k2v, v2k = ( + (self.dim_to_name, self.name_to_dim) + if isinstance(key, int) + else (self.name_to_dim, self.dim_to_name) + ) + del v2k[k2v[key]] + del k2v[key] + + def __contains__(self, key): + assert isinstance(key, (int, str)) + return key in (self.dim_to_name if isinstance(key, int) else self.name_to_dim) + + +class DimType(Enum): + """Enumerates the possible types of dimensions to allocate""" + + LOCAL = 0 + GLOBAL = 1 + VISIBLE = 2 + + +DimRequest = namedtuple("DimRequest", ["value", "dim_type"]) +DimRequest.__new__.__defaults__ = (None, DimType.LOCAL) + + +class DimStack: + """ + Single piece of global state to keep track of the mapping between names and dimensions. + + Replaces the plate :class:`~pyro.poutine.runtime._DimAllocator`, + the enum :class:`~pyro.poutine.runtime._EnumAllocator`, the ``stack`` in :class:`~MarkovMessenger`, + ``_param_dims`` and ``_value_dims`` in :class:`~EnumMessenger`, and ``dim_to_symbol`` in ``msg['infer']`` + """ + + def __init__(self): + global_frame = StackFrame( + name_to_dim=OrderedDict(), + dim_to_name=OrderedDict(), + history=0, + keep=False, + ) + self._local_stack = [global_frame] + self._iter_stack = [global_frame] + self._global_stack = [global_frame] + self._first_available_dim = self.DEFAULT_FIRST_DIM + self.outermost = None + + MAX_DIM = -25 + DEFAULT_FIRST_DIM = -5 + + def set_first_available_dim(self, dim): + assert dim is None or (self.MAX_DIM < dim < 0) + old_dim, self._first_available_dim = self._first_available_dim, dim + return old_dim + + def push_global(self, frame): + self._global_stack.append(frame) + + def pop_global(self): + assert self._global_stack, "cannot pop the global frame" + return self._global_stack.pop() + + def push_iter(self, frame): + self._iter_stack.append(frame) + + def pop_iter(self): + assert self._iter_stack, "cannot pop the global frame" + return self._iter_stack.pop() + + def push_local(self, frame): + self._local_stack.append(frame) + + def pop_local(self): + assert self._local_stack, "cannot pop the global frame" + return self._local_stack.pop() + + @property + def global_frame(self): + return self._global_stack[-1] + + @property + def local_frame(self): + return self._local_stack[-1] + + @property + def current_write_env(self): + return ( + self._local_stack[-1:] + if not self.local_frame.keep + else self._local_stack[-self.local_frame.history - 1 :] + ) + + @property + def current_read_env(self): + """ + Collect all frames necessary to compute the full name <--> dim mapping + and interpret Funsor inputs or batch shapes at any point in a computation. + """ + return ( + self._global_stack + + self._local_stack[-self.local_frame.history - 1 :] + + self._iter_stack + ) + + def _genvalue(self, key, value_request): + """ + Given proposed values for a fresh (name, dim) pair, computes a new, possibly + identical (name, dim) pair consistent with the current name <--> dim mapping. + This function is pure and does not update the name <--> dim mapping itself. + + The implementation here is only one of several possibilities, and was chosen + to match the behavior of Pyro's old enumeration machinery as closely as possible. + """ + if isinstance(key, int): + dim, name = key, value_request.value + fresh_name = "_pyro_dim_{}".format(-key) if name is None else name + return dim, fresh_name + + elif isinstance(key, str): + name, dim, dim_type = key, value_request.value, value_request.dim_type + if dim_type == DimType.VISIBLE: + fresh_dim = -1 if dim is None else dim + else: + fresh_dim = self._first_available_dim # discard input... + + while any(fresh_dim in p for p in self.current_read_env): + fresh_dim -= 1 + + if fresh_dim < self.MAX_DIM or ( + dim_type == DimType.VISIBLE and fresh_dim <= self._first_available_dim + ): + raise ValueError( + "Ran out of free dims during allocation for {}".format(name) + ) + + return name, fresh_dim + raise ValueError( + "{} and {} not a valid name-dim pair".format(key, value_request) + ) + + def allocate(self, key_to_value_request): + # step 1: split into fresh and non-fresh + key_to_value = OrderedDict() + for key, value_request in tuple(key_to_value_request.items()): + value = value_request.value + for frame in self.current_read_env: + if value is None and key in frame: + key_to_value[key] = frame[key] + del key_to_value_request[key] + break + elif value is not None and value in frame: + key_to_value[key] = value + del key_to_value_request[key] + break + + # step 2: check that the non-fresh input mapping from keys to values is 1-1 + if max(Counter(key_to_value.values()).values(), default=0) > 1: + raise ValueError("{} is not a valid shape request".format(key_to_value)) + + # step 3: allocate fresh values for all fresh + for key, value_request in key_to_value_request.items(): + key, fresh_value = self._genvalue(key, value_request) + # if this key is already active but inconsistent with the fresh value, + # generate a fresh_key for future conversions via _genvalue in reverse + if value_request.dim_type != DimType.VISIBLE or any( + key in frame for frame in self.current_read_env + ): + _, fresh_key = self._genvalue( + fresh_value, DimRequest(key, value_request.dim_type) + ) + else: + fresh_key = key + for frame in ( + [self.global_frame] + if value_request.dim_type != DimType.LOCAL + else self.current_write_env + ): + frame[fresh_key] = fresh_value + # use the user-provided key rather than fresh_key for satisfying this request only + key_to_value[key] = fresh_value + + assert not any(isinstance(value, DimRequest) for value in key_to_value.values()) + return key_to_value + + def names_from_batch_shape(self, batch_shape, dim_type=DimType.LOCAL): + return self.allocate_dim_to_name( + OrderedDict( + (dim, DimRequest(None, dim_type)) + for dim in range(-len(batch_shape), 0) + if batch_shape[dim] > 1 + ) + ) + + +_DIM_STACK = DimStack() # only one global instance diff --git a/pyro/source/pyro/contrib/funsor/handlers/trace_messenger.py b/pyro/source/pyro/contrib/funsor/handlers/trace_messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..f517967079b2fcffb640377e43b0fefebd25f770 --- /dev/null +++ b/pyro/source/pyro/contrib/funsor/handlers/trace_messenger.py @@ -0,0 +1,83 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import funsor +import torch + +from pyro.contrib.funsor.handlers.primitives import to_funsor +from pyro.contrib.funsor.handlers.runtime import _DIM_STACK +from pyro.poutine.subsample_messenger import _Subsample +from pyro.poutine.trace_messenger import TraceMessenger as OrigTraceMessenger + + +def _mask_fn(fn, mask): + if mask is not None: + mask = torch.as_tensor(mask) # FIXME support mask=False in funsor.distributions + fn = fn.mask(mask) + return fn + + +class TraceMessenger(OrigTraceMessenger): + """ + Setting ``pack_online=True`` packs online instead of after the fact, + converting all distributions and values to Funsors as soon as they are available. + + Setting ``pack_online=False`` computes information necessary to do packing after execution. + Each sample site is annotated with a ``dim_to_name`` dictionary, + which can be passed directly to :func:`~pyro.contrib.funsor.to_funsor`. + """ + + def __init__(self, graph_type=None, param_only=None, pack_online=True): + super().__init__(graph_type=graph_type, param_only=param_only) + self.pack_online = True if pack_online is None else pack_online + + def _pyro_post_sample(self, msg): + if msg["name"] in self.trace: + return + if "funsor" not in msg: + msg["funsor"] = {} + if isinstance(msg["fn"], _Subsample): + return super()._pyro_post_sample(msg) + if self.pack_online: + if "fn" not in msg["funsor"]: + fn_masked = _mask_fn(msg["fn"], msg["mask"]) + msg["funsor"]["fn"] = to_funsor(fn_masked, funsor.Real)( + value=msg["name"] + ) + if "value" not in msg["funsor"]: + # value_output = funsor.Reals[getattr(msg["fn"], "event_shape", ())] + msg["funsor"]["value"] = to_funsor( + msg["value"], msg["funsor"]["fn"].inputs[msg["name"]] + ) + if ( + "log_prob" not in msg["funsor"] + and not msg["infer"].get("_do_not_trace") + and not msg["infer"].get("_do_not_score", False) + ): + # optimization: don't perform this tensor op unless we have to + fn_masked = _mask_fn(msg["fn"], msg["mask"]) + msg["funsor"]["log_prob"] = to_funsor( + fn_masked.log_prob(msg["value"]), output=funsor.Real + ) + # TODO support this pattern which uses funsor directly - blocked by casting issues + # msg["funsor"]["log_prob"] = msg["funsor"]["fn"](**{msg["name"]: msg["funsor"]["value"]}) + if msg["scale"] is not None and "scale" not in msg["funsor"]: + msg["funsor"]["scale"] = to_funsor(msg["scale"], output=funsor.Real) + else: + # this logic has the same side effect on the _DIM_STACK as the above, + # but does not perform any tensor or funsor operations. + msg["funsor"]["dim_to_name"] = _DIM_STACK.names_from_batch_shape( + msg["fn"].batch_shape + ) + msg["funsor"]["dim_to_name"].update( + _DIM_STACK.names_from_batch_shape( + msg["value"].shape[ + : len(msg["value"]).shape - len(msg["fn"].event_shape) + ] + ) + ) + return super()._pyro_post_sample(msg) + + def _pyro_post_markov_chain(self, msg): + # add step information to the trace + self.trace.add_node(msg["name"], **msg.copy()) diff --git a/pyro/source/pyro/contrib/funsor/infer/__init__.py b/pyro/source/pyro/contrib/funsor/infer/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..058b1e17bcab65bb1bd34ccaf08a8776db789b19 --- /dev/null +++ b/pyro/source/pyro/contrib/funsor/infer/__init__.py @@ -0,0 +1,15 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from pyro.infer import SVI, config_enumerate # noqa: F401 + +from .discrete import infer_discrete # noqa: F401 +from .elbo import ELBO # noqa: F401 +from .trace_elbo import JitTrace_ELBO, Trace_ELBO # noqa: F401 +from .traceenum_elbo import ( # noqa: F401 + JitTraceEnum_ELBO, + JitTraceMarkovEnum_ELBO, + TraceEnum_ELBO, + TraceMarkovEnum_ELBO, +) +from .tracetmc_elbo import JitTraceTMC_ELBO, TraceTMC_ELBO # noqa: F401 diff --git a/pyro/source/pyro/contrib/funsor/infer/discrete.py b/pyro/source/pyro/contrib/funsor/infer/discrete.py new file mode 100644 index 0000000000000000000000000000000000000000..8ed42323d84b953795a2b558f958ac13eb5f4407 --- /dev/null +++ b/pyro/source/pyro/contrib/funsor/infer/discrete.py @@ -0,0 +1,72 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import functools + +import funsor + +from pyro.contrib.funsor.handlers import enum, replay, trace +from pyro.contrib.funsor.handlers.enum_messenger import _get_support_value +from pyro.contrib.funsor.infer.traceenum_elbo import terms_from_trace +from pyro.poutine import Trace, block +from pyro.poutine.util import site_is_subsample + + +def _sample_posterior(model, first_available_dim, temperature, *args, **kwargs): + if temperature == 0: + sum_op, prod_op = funsor.ops.max, funsor.ops.add + approx = funsor.approximations.argmax_approximate + elif temperature == 1: + sum_op, prod_op = funsor.ops.logaddexp, funsor.ops.add + approx = funsor.montecarlo.MonteCarlo() + else: + raise ValueError("temperature must be 0 (map) or 1 (sample) for now") + + with block(), enum(first_available_dim=first_available_dim): + # XXX replay against an empty Trace to ensure densities are not double-counted + model_tr = trace(replay(model, trace=Trace())).get_trace(*args, **kwargs) + + terms = terms_from_trace(model_tr) + # terms["log_factors"] = [log p(x) for each observed or latent sample site x] + # terms["log_measures"] = [log p(z) or other Dice factor + # for each latent sample site z] + + with funsor.interpretations.lazy: + log_prob = funsor.sum_product.sum_product( + sum_op, + prod_op, + terms["log_factors"] + terms["log_measures"], + eliminate=terms["measure_vars"] | terms["plate_vars"], + plates=terms["plate_vars"], + ) + log_prob = funsor.optimizer.apply_optimizer(log_prob) + + with approx: + approx_factors = funsor.adjoint.adjoint(sum_op, prod_op, log_prob) + + # construct a result trace to replay against the model + sample_tr = model_tr.copy() + sample_subs = {} + for name, node in sample_tr.nodes.items(): + if node["type"] != "sample" or site_is_subsample(node): + continue + if node["is_observed"]: + # "observed" values may be collapsed samples that depend on enumerated + # values, so we have to slice them down + # TODO this should really be handled entirely under the hood by adjoint + node["funsor"] = {"value": node["funsor"]["value"](**sample_subs)} + else: + node["funsor"]["log_measure"] = approx_factors[ + node["funsor"]["log_measure"] + ] + node["funsor"]["value"] = _get_support_value( + node["funsor"]["log_measure"], name + ) + sample_subs[name] = node["funsor"]["value"] + + with replay(trace=sample_tr): + return model(*args, **kwargs) + + +def infer_discrete(model, first_available_dim=None, temperature=1): + return functools.partial(_sample_posterior, model, first_available_dim, temperature) diff --git a/pyro/source/pyro/contrib/funsor/infer/elbo.py b/pyro/source/pyro/contrib/funsor/infer/elbo.py new file mode 100644 index 0000000000000000000000000000000000000000..80e9b7402df2359b50df0d14232dd6b71c92f9b1 --- /dev/null +++ b/pyro/source/pyro/contrib/funsor/infer/elbo.py @@ -0,0 +1,45 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pyro.ops.jit +from pyro.infer import ELBO as _OrigELBO +from pyro.util import ignore_jit_warnings + + +class ELBO(_OrigELBO): + def _get_trace(self, *args, **kwargs): + raise ValueError("shouldn't be here!") + + def differentiable_loss(self, model, guide, *args, **kwargs): + raise NotImplementedError("Must implement differentiable_loss") + + def loss(self, model, guide, *args, **kwargs): + return self.differentiable_loss(model, guide, *args, **kwargs).detach().item() + + def loss_and_grads(self, model, guide, *args, **kwargs): + loss = self.differentiable_loss(model, guide, *args, **kwargs) + loss.backward() + return loss.item() + + +class Jit_ELBO(ELBO): + def differentiable_loss(self, model, guide, *args, **kwargs): + kwargs["_model_id"] = id(model) + kwargs["_guide_id"] = id(guide) + if getattr(self, "_differentiable_loss", None) is None: + # build a closure for differentiable_loss + superself = super() + + @pyro.ops.jit.trace( + ignore_warnings=self.ignore_jit_warnings, jit_options=self.jit_options + ) + def differentiable_loss(*args, **kwargs): + kwargs.pop("_model_id") + kwargs.pop("_guide_id") + + with ignore_jit_warnings([("Iterating over a tensor", RuntimeWarning)]): + return superself.differentiable_loss(model, guide, *args, **kwargs) + + self._differentiable_loss = differentiable_loss + + return self._differentiable_loss(*args, **kwargs) diff --git a/pyro/source/pyro/contrib/funsor/infer/trace_elbo.py b/pyro/source/pyro/contrib/funsor/infer/trace_elbo.py new file mode 100644 index 0000000000000000000000000000000000000000..7b574d144acf3e87566b72112521415c8de775c3 --- /dev/null +++ b/pyro/source/pyro/contrib/funsor/infer/trace_elbo.py @@ -0,0 +1,52 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import contextlib + +import funsor + +from pyro.contrib.funsor import to_data, to_funsor +from pyro.contrib.funsor.handlers import enum, plate, replay, trace +from pyro.contrib.funsor.infer import config_enumerate +from pyro.distributions.util import copy_docs_from +from pyro.infer import Trace_ELBO as _OrigTrace_ELBO + +from .elbo import ELBO, Jit_ELBO +from .traceenum_elbo import terms_from_trace + + +@copy_docs_from(_OrigTrace_ELBO) +class Trace_ELBO(ELBO): + def differentiable_loss(self, model, guide, *args, **kwargs): + with enum(), ( + plate(size=self.num_particles) + if self.num_particles > 1 + else contextlib.ExitStack() + ): + guide_tr = trace(config_enumerate(default="flat")(guide)).get_trace( + *args, **kwargs + ) + model_tr = trace(replay(model, trace=guide_tr)).get_trace(*args, **kwargs) + + model_terms = terms_from_trace(model_tr) + guide_terms = terms_from_trace(guide_tr) + + log_measures = guide_terms["log_measures"] + model_terms["log_measures"] + log_factors = model_terms["log_factors"] + [ + -f for f in guide_terms["log_factors"] + ] + plate_vars = model_terms["plate_vars"] | guide_terms["plate_vars"] + measure_vars = model_terms["measure_vars"] | guide_terms["measure_vars"] + + elbo = funsor.Integrate( + sum(log_measures, to_funsor(0.0)), + sum(log_factors, to_funsor(0.0)), + measure_vars, + ) + elbo = elbo.reduce(funsor.ops.add, plate_vars) + + return -to_data(elbo) + + +class JitTrace_ELBO(Jit_ELBO, Trace_ELBO): + pass diff --git a/pyro/source/pyro/contrib/funsor/infer/traceenum_elbo.py b/pyro/source/pyro/contrib/funsor/infer/traceenum_elbo.py new file mode 100644 index 0000000000000000000000000000000000000000..95b2562b546bdf9063000c34cb73eb4444a87501 --- /dev/null +++ b/pyro/source/pyro/contrib/funsor/infer/traceenum_elbo.py @@ -0,0 +1,283 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import contextlib + +import funsor +from funsor.adjoint import AdjointTape +from funsor.sum_product import _partition + +from pyro.contrib.funsor import to_data, to_funsor +from pyro.contrib.funsor.handlers import enum, plate, replay, trace +from pyro.contrib.funsor.infer.elbo import ELBO, Jit_ELBO +from pyro.distributions.util import copy_docs_from +from pyro.infer import TraceEnum_ELBO as _OrigTraceEnum_ELBO + + +# Work around a bug in unfold_contraction_generic_tuple interacting with +# Approximate introduced in https://github.com/pyro-ppl/funsor/pull/488 . +# Once fixed, this can be replaced by funsor.optimizer.apply_optimizer(). +def apply_optimizer(x): + with funsor.interpretations.normalize: + expr = funsor.interpreter.reinterpret(x) + + with funsor.optimizer.optimize_base: + return funsor.interpreter.reinterpret(expr) + + +def terms_from_trace(tr): + """Helper function to extract elbo components from execution traces.""" + # data structure containing densities, measures, scales, and identification + # of free variables as either product (plate) variables or sum (measure) variables + terms = { + "log_factors": [], + "log_measures": [], + "scale": to_funsor(1.0), + "plate_vars": frozenset(), + "measure_vars": frozenset(), + "plate_to_step": dict(), + } + for name, node in tr.nodes.items(): + # add markov dimensions to the plate_to_step dictionary + if node["type"] == "markov_chain": + terms["plate_to_step"][node["name"]] = node["value"] + # ensure previous step variables are added to measure_vars + for step in node["value"]: + terms["measure_vars"] |= frozenset( + { + var + for var in step[1:-1] + if tr.nodes[var]["funsor"].get("log_measure", None) is not None + } + ) + if ( + node["type"] != "sample" + or type(node["fn"]).__name__ == "_Subsample" + or node["infer"].get("_do_not_score", False) + ): + continue + # grab plate dimensions from the cond_indep_stack + terms["plate_vars"] |= frozenset( + f.name for f in node["cond_indep_stack"] if f.vectorized + ) + # grab the log-measure, found only at sites that are not replayed or observed + if node["funsor"].get("log_measure", None) is not None: + terms["log_measures"].append(node["funsor"]["log_measure"]) + # sum (measure) variables: the fresh non-plate variables at a site + terms["measure_vars"] |= ( + frozenset(node["funsor"]["value"].inputs) | {name} + ) - terms["plate_vars"] + # grab the scale, assuming a common subsampling scale + if ( + node.get("replay_active", False) + and set(node["funsor"]["log_prob"].inputs) & terms["measure_vars"] + and float(to_data(node["funsor"]["scale"])) != 1.0 + ): + # model site that depends on enumerated variable: common scale + terms["scale"] = node["funsor"]["scale"] + else: # otherwise: default scale behavior + node["funsor"]["log_prob"] = ( + node["funsor"]["log_prob"] * node["funsor"]["scale"] + ) + # grab the log-density, found at all sites except those that are not replayed + if node["is_observed"] or not node.get("replay_skipped", False): + terms["log_factors"].append(node["funsor"]["log_prob"]) + # add plate dimensions to the plate_to_step dictionary + terms["plate_to_step"].update( + {plate: terms["plate_to_step"].get(plate, {}) for plate in terms["plate_vars"]} + ) + return terms + + +@copy_docs_from(_OrigTraceEnum_ELBO) +class TraceMarkovEnum_ELBO(ELBO): + def differentiable_loss(self, model, guide, *args, **kwargs): + # get batched, enumerated, to_funsor-ed traces from the guide and model + with ( + plate(size=self.num_particles) + if self.num_particles > 1 + else contextlib.ExitStack() + ), enum( + first_available_dim=( + (-self.max_plate_nesting - 1) if self.max_plate_nesting else None + ) + ): + guide_tr = trace(guide).get_trace(*args, **kwargs) + model_tr = trace(replay(model, trace=guide_tr)).get_trace(*args, **kwargs) + + # extract from traces all metadata that we will need to compute the elbo + guide_terms = terms_from_trace(guide_tr) + model_terms = terms_from_trace(model_tr) + + # guide side enumeration is not supported + if any(guide_terms["plate_to_step"].values()): + raise NotImplementedError( + "TraceMarkovEnum_ELBO does not yet support guide side Markov enumeration" + ) + + # build up a lazy expression for the elbo + with funsor.terms.lazy: + # identify and contract out auxiliary variables in the model with partial_sum_product + contracted_factors, uncontracted_factors = [], [] + for f in model_terms["log_factors"]: + if model_terms["measure_vars"].intersection(f.inputs): + contracted_factors.append(f) + else: + uncontracted_factors.append(f) + # incorporate the effects of subsampling and handlers.scale through a common scale factor + markov_dims = frozenset( + {plate for plate, step in model_terms["plate_to_step"].items() if step} + ) + contracted_costs = [ + model_terms["scale"] * f + for f in funsor.sum_product.dynamic_partial_sum_product( + funsor.ops.logaddexp, + funsor.ops.add, + model_terms["log_measures"] + contracted_factors, + plate_to_step=model_terms["plate_to_step"], + eliminate=model_terms["measure_vars"] | markov_dims, + ) + ] + + costs = contracted_costs + uncontracted_factors # model costs: logp + costs += [-f for f in guide_terms["log_factors"]] # guide costs: -logq + + # finally, integrate out guide variables in the elbo and all plates + plate_vars = guide_terms["plate_vars"] | model_terms["plate_vars"] + elbo = to_funsor(0, output=funsor.Real) + for cost in costs: + # compute the marginal logq in the guide corresponding to this cost term + log_prob = funsor.sum_product.sum_product( + funsor.ops.logaddexp, + funsor.ops.add, + guide_terms["log_measures"], + plates=plate_vars, + eliminate=(plate_vars | guide_terms["measure_vars"]) + - frozenset(cost.inputs), + ) + # compute the expected cost term E_q[logp] or E_q[-logq] using the marginal logq for q + elbo_term = funsor.Integrate( + log_prob, cost, guide_terms["measure_vars"] & frozenset(cost.inputs) + ) + elbo += elbo_term.reduce( + funsor.ops.add, plate_vars & frozenset(cost.inputs) + ) + + # evaluate the elbo, using memoize to share tensor computation where possible + with funsor.interpretations.memoize(): + return -to_data(apply_optimizer(elbo)) + + +@copy_docs_from(_OrigTraceEnum_ELBO) +class TraceEnum_ELBO(ELBO): + def differentiable_loss(self, model, guide, *args, **kwargs): + # get batched, enumerated, to_funsor-ed traces from the guide and model + with ( + plate(size=self.num_particles) + if self.num_particles > 1 + else contextlib.ExitStack() + ), enum( + first_available_dim=( + (-self.max_plate_nesting - 1) if self.max_plate_nesting else None + ) + ): + guide_tr = trace(guide).get_trace(*args, **kwargs) + model_tr = trace(replay(model, trace=guide_tr)).get_trace(*args, **kwargs) + + # extract from traces all metadata that we will need to compute the elbo + guide_terms = terms_from_trace(guide_tr) + model_terms = terms_from_trace(model_tr) + + # build up a lazy expression for the elbo + with funsor.terms.lazy: + # identify and contract out auxiliary variables in the model with partial_sum_product + contracted_factors, uncontracted_factors = [], [] + for f in model_terms["log_factors"]: + if model_terms["measure_vars"].intersection(f.inputs): + contracted_factors.append(f) + else: + uncontracted_factors.append(f) + contracted_costs = [] + # incorporate the effects of subsampling and handlers.scale through a common scale factor + for group_factors, group_vars in _partition( + model_terms["log_measures"] + contracted_factors, + model_terms["measure_vars"], + ): + group_factor_vars = frozenset().union( + *[f.inputs for f in group_factors] + ) + group_plates = model_terms["plate_vars"] & group_factor_vars + outermost_plates = frozenset.intersection( + *(frozenset(f.inputs) & group_plates for f in group_factors) + ) + elim_plates = group_plates - outermost_plates + for f in funsor.sum_product.partial_sum_product( + funsor.ops.logaddexp, + funsor.ops.add, + group_factors, + plates=group_plates, + eliminate=group_vars | elim_plates, + ): + contracted_costs.append(model_terms["scale"] * f) + + # accumulate costs from model (logp) and guide (-logq) + costs = contracted_costs + uncontracted_factors # model costs: logp + costs += [-f for f in guide_terms["log_factors"]] # guide costs: -logq + + # compute expected cost + # Cf. pyro.infer.util.Dice.compute_expectation() + # https://github.com/pyro-ppl/pyro/blob/0.3.0/pyro/infer/util.py#L212 + # TODO Replace this with funsor.Expectation + plate_vars = guide_terms["plate_vars"] | model_terms["plate_vars"] + # compute the marginal logq in the guide corresponding to each cost term + targets = dict() + for cost in costs: + input_vars = frozenset(cost.inputs) + if input_vars not in targets: + targets[input_vars] = funsor.Tensor( + funsor.ops.new_zeros( + funsor.tensor.get_default_prototype(), + tuple(v.size for v in cost.inputs.values()), + ), + cost.inputs, + cost.dtype, + ) + with AdjointTape() as tape: + logzq = funsor.sum_product.sum_product( + funsor.ops.logaddexp, + funsor.ops.add, + guide_terms["log_measures"] + list(targets.values()), + plates=plate_vars, + eliminate=(plate_vars | guide_terms["measure_vars"]), + ) + marginals = tape.adjoint( + funsor.ops.logaddexp, funsor.ops.add, logzq, tuple(targets.values()) + ) + # finally, integrate out guide variables in the elbo and all plates + elbo = to_funsor(0, output=funsor.Real) + for cost in costs: + target = targets[frozenset(cost.inputs)] + logzq_local = marginals[target].reduce( + funsor.ops.logaddexp, frozenset(cost.inputs) - plate_vars + ) + log_prob = marginals[target] - logzq_local + elbo_term = funsor.Integrate( + log_prob, + cost, + guide_terms["measure_vars"] & frozenset(log_prob.inputs), + ) + elbo += elbo_term.reduce( + funsor.ops.add, plate_vars & frozenset(cost.inputs) + ) + + # evaluate the elbo, using memoize to share tensor computation where possible + with funsor.interpretations.memoize(): + return -to_data(apply_optimizer(elbo)) + + +class JitTraceEnum_ELBO(Jit_ELBO, TraceEnum_ELBO): + pass + + +class JitTraceMarkovEnum_ELBO(Jit_ELBO, TraceMarkovEnum_ELBO): + pass diff --git a/pyro/source/pyro/contrib/funsor/infer/tracetmc_elbo.py b/pyro/source/pyro/contrib/funsor/infer/tracetmc_elbo.py new file mode 100644 index 0000000000000000000000000000000000000000..4698cb922f39981e43ae100869bb6bd3065a4bd4 --- /dev/null +++ b/pyro/source/pyro/contrib/funsor/infer/tracetmc_elbo.py @@ -0,0 +1,54 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import contextlib + +import funsor + +from pyro.contrib.funsor import to_data +from pyro.contrib.funsor.handlers import enum, plate, replay, trace +from pyro.contrib.funsor.infer.elbo import ELBO, Jit_ELBO +from pyro.contrib.funsor.infer.traceenum_elbo import apply_optimizer, terms_from_trace +from pyro.distributions.util import copy_docs_from +from pyro.infer import TraceTMC_ELBO as _OrigTraceTMC_ELBO + + +@copy_docs_from(_OrigTraceTMC_ELBO) +class TraceTMC_ELBO(ELBO): + def differentiable_loss(self, model, guide, *args, **kwargs): + with ( + plate(size=self.num_particles) + if self.num_particles > 1 + else contextlib.ExitStack() + ), enum( + first_available_dim=( + (-self.max_plate_nesting - 1) if self.max_plate_nesting else None + ) + ): + guide_tr = trace(guide).get_trace(*args, **kwargs) + model_tr = trace(replay(model, trace=guide_tr)).get_trace(*args, **kwargs) + + model_terms = terms_from_trace(model_tr) + guide_terms = terms_from_trace(guide_tr) + + log_measures = guide_terms["log_measures"] + model_terms["log_measures"] + log_factors = model_terms["log_factors"] + [ + -f for f in guide_terms["log_factors"] + ] + plate_vars = model_terms["plate_vars"] | guide_terms["plate_vars"] + measure_vars = model_terms["measure_vars"] | guide_terms["measure_vars"] + + with funsor.terms.lazy: + elbo = funsor.sum_product.sum_product( + funsor.ops.logaddexp, + funsor.ops.add, + log_measures + log_factors, + eliminate=measure_vars | plate_vars, + plates=plate_vars, + ) + + return -to_data(apply_optimizer(elbo)) + + +class JitTraceTMC_ELBO(Jit_ELBO, TraceTMC_ELBO): + pass diff --git a/pyro/source/pyro/contrib/gp/__init__.py b/pyro/source/pyro/contrib/gp/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..a243cb9413142747b881aa95ec9bc471896027bb --- /dev/null +++ b/pyro/source/pyro/contrib/gp/__init__.py @@ -0,0 +1,14 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from pyro.contrib.gp import kernels, likelihoods, models, parameterized, util +from pyro.contrib.gp.parameterized import Parameterized + +__all__ = [ + "Parameterized", + "kernels", + "likelihoods", + "models", + "parameterized", + "util", +] diff --git a/pyro/source/pyro/contrib/gp/kernels/__init__.py b/pyro/source/pyro/contrib/gp/kernels/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..8c5985ac101a4862369b1e8fbaaf0417c553ccc0 --- /dev/null +++ b/pyro/source/pyro/contrib/gp/kernels/__init__.py @@ -0,0 +1,71 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from pyro.contrib.gp.kernels.brownian import Brownian +from pyro.contrib.gp.kernels.coregionalize import Coregionalize +from pyro.contrib.gp.kernels.dot_product import DotProduct, Linear, Polynomial +from pyro.contrib.gp.kernels.isotropic import ( + RBF, + Exponential, + Isotropy, + Matern32, + Matern52, + RationalQuadratic, +) +from pyro.contrib.gp.kernels.kernel import ( + Combination, + Exponent, + Kernel, + Product, + Sum, + Transforming, + VerticalScaling, + Warping, +) +from pyro.contrib.gp.kernels.periodic import Cosine, Periodic +from pyro.contrib.gp.kernels.static import Constant, WhiteNoise + +__all__ = [ + "Kernel", + "Brownian", + "Combination", + "Constant", + "Coregionalize", + "Cosine", + "DotProduct", + "Exponent", + "Exponential", + "Isotropy", + "Linear", + "Matern32", + "Matern52", + "Periodic", + "Polynomial", + "Product", + "RBF", + "RationalQuadratic", + "Sum", + "Transforming", + "VerticalScaling", + "Warping", + "WhiteNoise", +] + +# Create sphinx documentation. +__doc__ = "\n\n".join( + [ + """ + {0} + ---------------------------------------------------------------- + .. autoclass:: pyro.contrib.gp.kernels.{0} + :members: + :undoc-members: + :special-members: __call__ + :show-inheritance: + :member-order: bysource + """.format( + _name + ) + for _name in __all__ + ] +) diff --git a/pyro/source/pyro/contrib/gp/kernels/brownian.py b/pyro/source/pyro/contrib/gp/kernels/brownian.py new file mode 100644 index 0000000000000000000000000000000000000000..78e90601c171ae4af3baa439ec1b6577371c4f33 --- /dev/null +++ b/pyro/source/pyro/contrib/gp/kernels/brownian.py @@ -0,0 +1,50 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions import constraints + +from pyro.contrib.gp.kernels.kernel import Kernel +from pyro.nn.module import PyroParam + + +class Brownian(Kernel): + r""" + This kernel correponds to a two-sided Brownion motion (Wiener process): + + :math:`k(x,z)=\begin{cases}\sigma^2\min(|x|,|z|),& \text{if } x\cdot z\ge 0\\ + 0, & \text{otherwise}. \end{cases}` + + Note that the input dimension of this kernel must be 1. + + Reference: + + [1] `Theory and Statistical Applications of Stochastic Processes`, + Yuliya Mishura, Georgiy Shevchenko + """ + + def __init__(self, input_dim, variance=None, active_dims=None): + if input_dim != 1: + raise ValueError("Input dimensional for Brownian kernel must be 1.") + super().__init__(input_dim, active_dims) + + variance = torch.tensor(1.0) if variance is None else variance + self.variance = PyroParam(variance, constraints.positive) + + def forward(self, X, Z=None, diag=False): + if Z is None: + Z = X + X = self._slice_input(X) + if diag: + return self.variance * X.abs().squeeze(1) + + Z = self._slice_input(Z) + if X.size(1) != Z.size(1): + raise ValueError("Inputs must have the same number of features.") + + Zt = Z.t() + return torch.where( + X.sign() == Zt.sign(), + self.variance * torch.min(X.abs(), Zt.abs()), + X.data.new_zeros(X.size(0), Z.size(0)), + ) diff --git a/pyro/source/pyro/contrib/gp/kernels/coregionalize.py b/pyro/source/pyro/contrib/gp/kernels/coregionalize.py new file mode 100644 index 0000000000000000000000000000000000000000..170535b4cae703c2dfff5fb025344952353c0d37 --- /dev/null +++ b/pyro/source/pyro/contrib/gp/kernels/coregionalize.py @@ -0,0 +1,94 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions import constraints +from torch.nn import Parameter + +from pyro.contrib.gp.kernels.kernel import Kernel +from pyro.nn.module import PyroParam + + +class Coregionalize(Kernel): + r""" + A kernel for the linear model of coregionalization + :math:`k(x,z) = x^T (W W^T + D) z` where :math:`W` is an + ``input_dim``-by-``rank`` matrix and typically ``rank < input_dim``, + and ``D`` is a diagonal matrix. + + This generalizes the + :class:`~pyro.contrib.gp.kernels.dot_product.Linear` kernel to multiple + features with a low-rank-plus-diagonal weight matrix. The typical use case + is for modeling correlations among outputs of a multi-output GP, where + outputs are coded as distinct data points with one-hot coded features + denoting which output each datapoint represents. + + If only ``rank`` is specified, the kernel ``(W W^T + D)`` will be + randomly initialized to a matrix with expected value the identity matrix. + + References: + + [1] Mauricio A. Alvarez, Lorenzo Rosasco, Neil D. Lawrence (2012) + Kernels for Vector-Valued Functions: a Review + + :param int input_dim: Number of feature dimensions of inputs. + :param int rank: Optional rank. This is only used if ``components`` is + unspecified. If neigher ``rank`` nor ``components`` is specified, + then ``rank`` defaults to ``input_dim``. + :param torch.Tensor components: An optional ``(input_dim, rank)`` shaped + matrix that maps features to ``rank``-many components. If unspecified, + this will be randomly initialized. + :param torch.Tensor diagonal: An optional vector of length ``input_dim``. + If unspecified, this will be set to constant ``0.5``. + :param list active_dims: List of feature dimensions of the input which the + kernel acts on. + :param str name: Name of the kernel. + """ + + def __init__( + self, input_dim, rank=None, components=None, diagonal=None, active_dims=None + ): + super().__init__(input_dim, active_dims) + + # Add a low-rank kernel with expected value torch.eye(input_dim, input_dim) / 2. + if components is None: + rank = input_dim if rank is None else rank + components = torch.randn(input_dim, rank) * (0.5 / rank) ** 0.5 + else: + rank = components.size(-1) + if components.shape != (input_dim, rank): + raise ValueError( + "Expected components.shape == ({},rank), actual {}".format( + input_dim, components.shape + ) + ) + self.components = Parameter(components) + + # Add a diagonal component initialized to torch.eye(input_dim, input_dim) / 2, + # such that the total kernel has expected value the identity matrix. + diagonal = ( + components.new_ones(input_dim) * 0.5 if diagonal is None else diagonal + ) + if diagonal.shape != (input_dim,): + raise ValueError( + "Expected diagonal.shape == ({},), actual {}".format( + input_dim, diagonal.shape + ) + ) + self.diagonal = PyroParam(diagonal, constraints.positive) + + def forward(self, X, Z=None, diag=False): + X = self._slice_input(X) + Xc = X.matmul(self.components) + + if diag: + return (Xc**2).sum(-1) + (X**2).mv(self.diagonal) + + if Z is None: + Z = X + Zc = Xc + else: + Z = self._slice_input(Z) + Zc = Z.matmul(self.components) + + return Xc.matmul(Zc.t()) + (X * self.diagonal).matmul(Z.t()) diff --git a/pyro/source/pyro/contrib/gp/kernels/dot_product.py b/pyro/source/pyro/contrib/gp/kernels/dot_product.py new file mode 100644 index 0000000000000000000000000000000000000000..22a4a917f0062092be5404b34d100e8a87dd5da7 --- /dev/null +++ b/pyro/source/pyro/contrib/gp/kernels/dot_product.py @@ -0,0 +1,85 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions import constraints + +from pyro.contrib.gp.kernels.kernel import Kernel +from pyro.nn.module import PyroParam + + +class DotProduct(Kernel): + r""" + Base class for kernels which are functions of :math:`x \cdot z`. + """ + + def __init__(self, input_dim, variance=None, active_dims=None): + super().__init__(input_dim, active_dims) + + variance = torch.tensor(1.0) if variance is None else variance + self.variance = PyroParam(variance, constraints.positive) + + def _dot_product(self, X, Z=None, diag=False): + r""" + Returns :math:`X \cdot Z`. + """ + if Z is None: + Z = X + X = self._slice_input(X) + if diag: + return (X**2).sum(-1) + + Z = self._slice_input(Z) + if X.size(1) != Z.size(1): + raise ValueError("Inputs must have the same number of features.") + + return X.matmul(Z.t()) + + +class Linear(DotProduct): + r""" + Implementation of Linear kernel: + + :math:`k(x, z) = \sigma^2 x \cdot z.` + + Doing Gaussian Process regression with linear kernel is equivalent to doing a + linear regression. + + .. note:: Here we implement the homogeneous version. To use the inhomogeneous + version, consider using :class:`Polynomial` kernel with ``degree=1`` or making + a :class:`.Sum` with a :class:`.Constant` kernel. + """ + + def __init__(self, input_dim, variance=None, active_dims=None): + super().__init__(input_dim, variance, active_dims) + + def forward(self, X, Z=None, diag=False): + return self.variance * self._dot_product(X, Z, diag) + + +class Polynomial(DotProduct): + r""" + Implementation of Polynomial kernel: + + :math:`k(x, z) = \sigma^2(\text{bias} + x \cdot z)^d.` + + :param torch.Tensor bias: Bias parameter of this kernel. Should be positive. + :param int degree: Degree :math:`d` of the polynomial. + """ + + def __init__(self, input_dim, variance=None, bias=None, degree=1, active_dims=None): + super().__init__(input_dim, variance, active_dims) + + bias = torch.tensor(1.0) if bias is None else bias + self.bias = PyroParam(bias, constraints.positive) + + if not isinstance(degree, int) or degree < 1: + raise ValueError( + "Degree for Polynomial kernel should be a positive integer." + ) + self.degree = degree + + def forward(self, X, Z=None, diag=False): + return self.variance * ( + (self.bias + self._dot_product(X, Z, diag)) ** self.degree + ) diff --git a/pyro/source/pyro/contrib/gp/kernels/isotropic.py b/pyro/source/pyro/contrib/gp/kernels/isotropic.py new file mode 100644 index 0000000000000000000000000000000000000000..b7fbd77aa8cd5fda1c67b210db93ec0284dbfbd9 --- /dev/null +++ b/pyro/source/pyro/contrib/gp/kernels/isotropic.py @@ -0,0 +1,184 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions import constraints + +from pyro.contrib.gp.kernels.kernel import Kernel +from pyro.nn.module import PyroParam + + +def _torch_sqrt(x, eps=1e-12): + """ + A convenient function to avoid the NaN gradient issue of :func:`torch.sqrt` + at 0. + """ + # Ref: https://github.com/pytorch/pytorch/issues/2421 + return (x + eps).sqrt() + + +class Isotropy(Kernel): + """ + Base class for a family of isotropic covariance kernels which are functions of the + distance :math:`|x-z|/l`, where :math:`l` is the length-scale parameter. + + By default, the parameter ``lengthscale`` has size 1. To use the isotropic version + (different lengthscale for each dimension), make sure that ``lengthscale`` has size + equal to ``input_dim``. + + :param torch.Tensor lengthscale: Length-scale parameter of this kernel. + """ + + def __init__(self, input_dim, variance=None, lengthscale=None, active_dims=None): + super().__init__(input_dim, active_dims) + + variance = torch.tensor(1.0) if variance is None else variance + self.variance = PyroParam(variance, constraints.positive) + + lengthscale = torch.tensor(1.0) if lengthscale is None else lengthscale + self.lengthscale = PyroParam(lengthscale, constraints.positive) + + def _square_scaled_dist(self, X, Z=None): + r""" + Returns :math:`\|\frac{X-Z}{l}\|^2`. + """ + if Z is None: + Z = X + X = self._slice_input(X) + Z = self._slice_input(Z) + if X.size(1) != Z.size(1): + raise ValueError("Inputs must have the same number of features.") + + scaled_X = X / self.lengthscale + scaled_Z = Z / self.lengthscale + X2 = (scaled_X**2).sum(1, keepdim=True) + Z2 = (scaled_Z**2).sum(1, keepdim=True) + XZ = scaled_X.matmul(scaled_Z.t()) + r2 = X2 - 2 * XZ + Z2.t() + return r2.clamp(min=0) + + def _scaled_dist(self, X, Z=None): + r""" + Returns :math:`\|\frac{X-Z}{l}\|`. + """ + return _torch_sqrt(self._square_scaled_dist(X, Z)) + + def _diag(self, X): + """ + Calculates the diagonal part of covariance matrix on active features. + """ + return self.variance.expand(X.size(0)) + + +class RBF(Isotropy): + r""" + Implementation of Radial Basis Function kernel: + + :math:`k(x,z) = \sigma^2\exp\left(-0.5 \times \frac{|x-z|^2}{l^2}\right).` + + .. note:: This kernel also has name `Squared Exponential` in literature. + """ + + def __init__(self, input_dim, variance=None, lengthscale=None, active_dims=None): + super().__init__(input_dim, variance, lengthscale, active_dims) + + def forward(self, X, Z=None, diag=False): + if diag: + return self._diag(X) + + r2 = self._square_scaled_dist(X, Z) + return self.variance * torch.exp(-0.5 * r2) + + +class RationalQuadratic(Isotropy): + r""" + Implementation of RationalQuadratic kernel: + + :math:`k(x, z) = \sigma^2 \left(1 + 0.5 \times \frac{|x-z|^2}{\alpha l^2} + \right)^{-\alpha}.` + + :param torch.Tensor scale_mixture: Scale mixture (:math:`\alpha`) parameter of this + kernel. Should have size 1. + """ + + def __init__( + self, + input_dim, + variance=None, + lengthscale=None, + scale_mixture=None, + active_dims=None, + ): + super().__init__(input_dim, variance, lengthscale, active_dims) + + if scale_mixture is None: + scale_mixture = torch.tensor(1.0) + self.scale_mixture = PyroParam(scale_mixture, constraints.positive) + + def forward(self, X, Z=None, diag=False): + if diag: + return self._diag(X) + + r2 = self._square_scaled_dist(X, Z) + return self.variance * (1 + (0.5 / self.scale_mixture) * r2).pow( + -self.scale_mixture + ) + + +class Exponential(Isotropy): + r""" + Implementation of Exponential kernel: + + :math:`k(x, z) = \sigma^2\exp\left(-\frac{|x-z|}{l}\right).` + """ + + def __init__(self, input_dim, variance=None, lengthscale=None, active_dims=None): + super().__init__(input_dim, variance, lengthscale, active_dims) + + def forward(self, X, Z=None, diag=False): + if diag: + return self._diag(X) + + r = self._scaled_dist(X, Z) + return self.variance * torch.exp(-r) + + +class Matern32(Isotropy): + r""" + Implementation of Matern32 kernel: + + :math:`k(x, z) = \sigma^2\left(1 + \sqrt{3} \times \frac{|x-z|}{l}\right) + \exp\left(-\sqrt{3} \times \frac{|x-z|}{l}\right).` + """ + + def __init__(self, input_dim, variance=None, lengthscale=None, active_dims=None): + super().__init__(input_dim, variance, lengthscale, active_dims) + + def forward(self, X, Z=None, diag=False): + if diag: + return self._diag(X) + + r = self._scaled_dist(X, Z) + sqrt3_r = 3**0.5 * r + return self.variance * (1 + sqrt3_r) * torch.exp(-sqrt3_r) + + +class Matern52(Isotropy): + r""" + Implementation of Matern52 kernel: + + :math:`k(x,z)=\sigma^2\left(1+\sqrt{5}\times\frac{|x-z|}{l}+\frac{5}{3}\times + \frac{|x-z|^2}{l^2}\right)\exp\left(-\sqrt{5} \times \frac{|x-z|}{l}\right).` + """ + + def __init__(self, input_dim, variance=None, lengthscale=None, active_dims=None): + super().__init__(input_dim, variance, lengthscale, active_dims) + + def forward(self, X, Z=None, diag=False): + if diag: + return self._diag(X) + + r2 = self._square_scaled_dist(X, Z) + r = _torch_sqrt(r2) + sqrt5_r = 5**0.5 * r + return self.variance * (1 + sqrt5_r + (5 / 3) * r2) * torch.exp(-sqrt5_r) diff --git a/pyro/source/pyro/contrib/gp/kernels/kernel.py b/pyro/source/pyro/contrib/gp/kernels/kernel.py new file mode 100644 index 0000000000000000000000000000000000000000..0271f36e11cf1a431a5d4b5796292f94a00de1ad --- /dev/null +++ b/pyro/source/pyro/contrib/gp/kernels/kernel.py @@ -0,0 +1,259 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import numbers + +from pyro.contrib.gp.parameterized import Parameterized + + +class Kernel(Parameterized): + """ + Base class for kernels used in this Gaussian Process module. + + Every inherited class should implement a :meth:`forward` pass which takes inputs + :math:`X`, :math:`Z` and returns their covariance matrix. + + To construct a new kernel from the old ones, we can use methods :meth:`add`, + :meth:`mul`, :meth:`exp`, :meth:`warp`, :meth:`vertical_scale`. + + References: + + [1] `Gaussian Processes for Machine Learning`, + Carl E. Rasmussen, Christopher K. I. Williams + + :param int input_dim: Number of feature dimensions of inputs. + :param torch.Tensor variance: Variance parameter of this kernel. + :param list active_dims: List of feature dimensions of the input which the kernel + acts on. + """ + + def __init__(self, input_dim, active_dims=None): + super().__init__() + + if active_dims is None: + active_dims = list(range(input_dim)) + elif input_dim != len(active_dims): + raise ValueError( + "Input size and the length of active dimensionals should be equal." + ) + self.input_dim = input_dim + self.active_dims = active_dims + + def forward(self, X, Z=None, diag=False): + r""" + Calculates covariance matrix of inputs on active dimensionals. + + :param torch.Tensor X: A 2D tensor with shape :math:`N \times input\_dim`. + :param torch.Tensor Z: An (optional) 2D tensor with shape + :math:`M \times input\_dim`. + :param bool diag: A flag to decide if we want to return full covariance matrix + or just its diagonal part. + :returns: covariance matrix of :math:`X` and :math:`Z` with shape + :math:`N \times M` + :rtype: torch.Tensor + """ + raise NotImplementedError + + def _slice_input(self, X): + r""" + Slices :math:`X` according to ``self.active_dims``. If ``X`` is 1D then returns + a 2D tensor with shape :math:`N \times 1`. + + :param torch.Tensor X: A 1D or 2D input tensor. + :returns: a 2D slice of :math:`X` + :rtype: torch.Tensor + """ + if X.dim() == 2: + return X[:, self.active_dims] + elif X.dim() == 1: + return X.unsqueeze(1) + else: + raise ValueError("Input X must be either 1 or 2 dimensional.") + + +class Combination(Kernel): + """ + Base class for kernels derived from a combination of kernels. + + :param Kernel kern0: First kernel to combine. + :param kern1: Second kernel to combine. + :type kern1: Kernel or numbers.Number + """ + + def __init__(self, kern0, kern1): + if not isinstance(kern0, Kernel): + raise TypeError( + "The first component of a combined kernel must be a " "Kernel instance." + ) + if not (isinstance(kern1, Kernel) or isinstance(kern1, numbers.Number)): + raise TypeError( + "The second component of a combined kernel must be a " + "Kernel instance or a number." + ) + + active_dims = set(kern0.active_dims) + if isinstance(kern1, Kernel): + active_dims |= set(kern1.active_dims) + active_dims = sorted(active_dims) + input_dim = len(active_dims) + super().__init__(input_dim, active_dims) + + self.kern0 = kern0 + self.kern1 = kern1 + + +class Sum(Combination): + """ + Returns a new kernel which acts like a sum/direct sum of two kernels. + The second kernel can be a constant. + """ + + def forward(self, X, Z=None, diag=False): + if isinstance(self.kern1, Kernel): + return self.kern0(X, Z, diag=diag) + self.kern1(X, Z, diag=diag) + else: # constant + return self.kern0(X, Z, diag=diag) + self.kern1 + + +class Product(Combination): + """ + Returns a new kernel which acts like a product/tensor product of two kernels. + The second kernel can be a constant. + """ + + def forward(self, X, Z=None, diag=False): + if isinstance(self.kern1, Kernel): + return self.kern0(X, Z, diag=diag) * self.kern1(X, Z, diag=diag) + else: # constant + return self.kern0(X, Z, diag=diag) * self.kern1 + + +class Transforming(Kernel): + """ + Base class for kernels derived from a kernel by some transforms such as warping, + exponent, vertical scaling. + + :param Kernel kern: The original kernel. + """ + + def __init__(self, kern): + super().__init__(kern.input_dim, kern.active_dims) + + self.kern = kern + + +class Exponent(Transforming): + r""" + Creates a new kernel according to + + :math:`k_{new}(x, z) = \exp(k(x, z)).` + """ + + def forward(self, X, Z=None, diag=False): + return self.kern(X, Z, diag=diag).exp() + + +class VerticalScaling(Transforming): + """ + Creates a new kernel according to + + :math:`k_{new}(x, z) = f(x)k(x, z)f(z),` + + where :math:`f` is a function. + + :param callable vscaling_fn: A vertical scaling function :math:`f`. + """ + + def __init__(self, kern, vscaling_fn): + super().__init__(kern) + + self.vscaling_fn = vscaling_fn + + def forward(self, X, Z=None, diag=False): + if diag: + return ( + self.vscaling_fn(X) * self.kern(X, Z, diag=diag) * self.vscaling_fn(X) + ) + elif Z is None: + vscaled_X = self.vscaling_fn(X).unsqueeze(1) + return vscaled_X * self.kern(X, Z, diag=diag) * vscaled_X.t() + else: + return ( + self.vscaling_fn(X).unsqueeze(1) + * self.kern(X, Z, diag=diag) + * self.vscaling_fn(Z).unsqueeze(0) + ) + + +def _Horner_evaluate(x, coef): + """ + Evaluates the value of a polynomial according to Horner's method. + """ + # https://en.wikipedia.org/wiki/Horner%27s_method + n = len(coef) - 1 + b = coef[n] + for i in range(n - 1, -1, -1): + b = coef[i] + b * x + return b + + +class Warping(Transforming): + """ + Creates a new kernel according to + + :math:`k_{new}(x, z) = q(k(f(x), f(z))),` + + where :math:`f` is an function and :math:`q` is a polynomial with non-negative + coefficients ``owarping_coef``. + + We can take advantage of :math:`f` to combine a Gaussian Process kernel with a deep + learning architecture. For example: + + >>> linear = torch.nn.Linear(10, 3) + >>> # register its parameters to Pyro's ParamStore and wrap it by lambda + >>> # to call the primitive pyro.module each time we use the linear function + >>> pyro_linear_fn = lambda x: pyro.module("linear", linear)(x) + >>> kernel = gp.kernels.Matern52(input_dim=3, lengthscale=torch.ones(3)) + >>> warped_kernel = gp.kernels.Warping(kernel, pyro_linear_fn) + + Reference: + + [1] `Deep Kernel Learning`, + Andrew G. Wilson, Zhiting Hu, Ruslan Salakhutdinov, Eric P. Xing + + :param callable iwarping_fn: An input warping function :math:`f`. + :param list owarping_coef: A list of coefficients of the output warping polynomial. + These coefficients must be non-negative. + """ + + def __init__(self, kern, iwarping_fn=None, owarping_coef=None): + super().__init__(kern) + + self.iwarping_fn = iwarping_fn + + if owarping_coef is not None: + for coef in owarping_coef: + if not isinstance(coef, int) and coef < 0: + raise ValueError( + "Coefficients of the polynomial must be a " + "non-negative integer." + ) + if len(owarping_coef) < 2 and sum(owarping_coef) == 0: + raise ValueError( + "The ouput warping polynomial should have a degree " + "of at least 1." + ) + self.owarping_coef = owarping_coef + + def forward(self, X, Z=None, diag=False): + if self.iwarping_fn is None: + K_iwarp = self.kern(X, Z, diag=diag) + elif Z is None: + K_iwarp = self.kern(self.iwarping_fn(X), None, diag=diag) + else: + K_iwarp = self.kern(self.iwarping_fn(X), self.iwarping_fn(Z), diag=diag) + + if self.owarping_coef is None: + return K_iwarp + else: + return _Horner_evaluate(K_iwarp, self.owarping_coef) diff --git a/pyro/source/pyro/contrib/gp/kernels/periodic.py b/pyro/source/pyro/contrib/gp/kernels/periodic.py new file mode 100644 index 0000000000000000000000000000000000000000..0c28b55a19a6200a40ae593b9d21edd8e118b11c --- /dev/null +++ b/pyro/source/pyro/contrib/gp/kernels/periodic.py @@ -0,0 +1,78 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import torch +from torch.distributions import constraints + +from pyro.contrib.gp.kernels.isotropic import Isotropy +from pyro.contrib.gp.kernels.kernel import Kernel +from pyro.nn.module import PyroParam + + +class Cosine(Isotropy): + r""" + Implementation of Cosine kernel: + + :math:`k(x,z) = \sigma^2 \cos\left(\frac{|x-z|}{l}\right).` + + :param torch.Tensor lengthscale: Length-scale parameter of this kernel. + """ + + def __init__(self, input_dim, variance=None, lengthscale=None, active_dims=None): + super().__init__(input_dim, variance, lengthscale, active_dims) + + def forward(self, X, Z=None, diag=False): + if diag: + return self._diag(X) + + r = self._scaled_dist(X, Z) + return self.variance * torch.cos(r) + + +class Periodic(Kernel): + r""" + Implementation of Periodic kernel: + + :math:`k(x,z)=\sigma^2\exp\left(-2\times\frac{\sin^2(\pi(x-z)/p)}{l^2}\right),` + + where :math:`p` is the ``period`` parameter. + + References: + + [1] `Introduction to Gaussian processes`, + David J.C. MacKay + + :param torch.Tensor lengthscale: Length scale parameter of this kernel. + :param torch.Tensor period: Period parameter of this kernel. + """ + + def __init__( + self, input_dim, variance=None, lengthscale=None, period=None, active_dims=None + ): + super().__init__(input_dim, active_dims) + + variance = torch.tensor(1.0) if variance is None else variance + self.variance = PyroParam(variance, constraints.positive) + + lengthscale = torch.tensor(1.0) if lengthscale is None else lengthscale + self.lengthscale = PyroParam(lengthscale, constraints.positive) + + period = torch.tensor(1.0) if period is None else period + self.period = PyroParam(period, constraints.positive) + + def forward(self, X, Z=None, diag=False): + if diag: + return self.variance.expand(X.size(0)) + + if Z is None: + Z = X + X = self._slice_input(X) + Z = self._slice_input(Z) + if X.size(1) != Z.size(1): + raise ValueError("Inputs must have the same number of features.") + + d = X.unsqueeze(1) - Z.unsqueeze(0) + scaled_sin = torch.sin(math.pi * d / self.period) / self.lengthscale + return self.variance * torch.exp(-2 * (scaled_sin**2).sum(-1)) diff --git a/pyro/source/pyro/contrib/gp/kernels/static.py b/pyro/source/pyro/contrib/gp/kernels/static.py new file mode 100644 index 0000000000000000000000000000000000000000..081ea80e94dfb2b83ce52073098fedcaa513d1cc --- /dev/null +++ b/pyro/source/pyro/contrib/gp/kernels/static.py @@ -0,0 +1,55 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions import constraints + +from pyro.contrib.gp.kernels.kernel import Kernel +from pyro.nn.module import PyroParam + + +class Constant(Kernel): + r""" + Implementation of Constant kernel: + + :math:`k(x, z) = \sigma^2.` + """ + + def __init__(self, input_dim, variance=None, active_dims=None): + super().__init__(input_dim, active_dims) + + variance = torch.tensor(1.0) if variance is None else variance + self.variance = PyroParam(variance, constraints.positive) + + def forward(self, X, Z=None, diag=False): + if diag: + return self.variance.expand(X.size(0)) + + if Z is None: + Z = X + return self.variance.expand(X.size(0), Z.size(0)) + + +class WhiteNoise(Kernel): + r""" + Implementation of WhiteNoise kernel: + + :math:`k(x, z) = \sigma^2 \delta(x, z),` + + where :math:`\delta` is a Dirac delta function. + """ + + def __init__(self, input_dim, variance=None, active_dims=None): + super().__init__(input_dim, active_dims) + + variance = torch.tensor(1.0) if variance is None else variance + self.variance = PyroParam(variance, constraints.positive) + + def forward(self, X, Z=None, diag=False): + if diag: + return self.variance.expand(X.size(0)) + + if Z is None: + return self.variance.expand(X.size(0)).diag() + else: + return X.data.new_zeros(X.size(0), Z.size(0)) diff --git a/pyro/source/pyro/contrib/gp/likelihoods/__init__.py b/pyro/source/pyro/contrib/gp/likelihoods/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..30749be3fb204857b02e481bb96ff74af1472ede --- /dev/null +++ b/pyro/source/pyro/contrib/gp/likelihoods/__init__.py @@ -0,0 +1,36 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from pyro.contrib.gp.likelihoods.binary import Binary +from pyro.contrib.gp.likelihoods.gaussian import Gaussian +from pyro.contrib.gp.likelihoods.likelihood import Likelihood +from pyro.contrib.gp.likelihoods.multi_class import MultiClass +from pyro.contrib.gp.likelihoods.poisson import Poisson + +__all__ = [ + "Likelihood", + "Binary", + "Gaussian", + "MultiClass", + "Poisson", +] + + +# Create sphinx documentation. +__doc__ = "\n\n".join( + [ + """ + {0} + ---------------------------------------------------------------- + .. autoclass:: pyro.contrib.gp.likelihoods.{0} + :members: + :undoc-members: + :special-members: __call__ + :show-inheritance: + :member-order: bysource + """.format( + _name + ) + for _name in __all__ + ] +) diff --git a/pyro/source/pyro/contrib/gp/likelihoods/binary.py b/pyro/source/pyro/contrib/gp/likelihoods/binary.py new file mode 100644 index 0000000000000000000000000000000000000000..9597c3dc31515b85122870404c5b18b0359c6055 --- /dev/null +++ b/pyro/source/pyro/contrib/gp/likelihoods/binary.py @@ -0,0 +1,55 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +import pyro +import pyro.distributions as dist +from pyro.contrib.gp.likelihoods.likelihood import Likelihood + + +class Binary(Likelihood): + """ + Implementation of Binary likelihood, which is used for binary classification + problems. + + Binary likelihood uses :class:`~pyro.distributions.Bernoulli` distribution, + so the output of ``response_function`` should be in range :math:`(0,1)`. By + default, we use `sigmoid` function. + + :param callable response_function: A mapping to correct domain for Binary + likelihood. + """ + + def __init__(self, response_function=None): + super().__init__() + self.response_function = ( + torch.sigmoid if response_function is None else response_function + ) + + def forward(self, f_loc, f_var, y=None): + r""" + Samples :math:`y` given :math:`f_{loc}`, :math:`f_{var}` according to + + .. math:: f & \sim \mathbb{Normal}(f_{loc}, f_{var}),\\ + y & \sim \mathbb{Bernoulli}(f). + + .. note:: The log likelihood is estimated using Monte Carlo with 1 sample of + :math:`f`. + + :param torch.Tensor f_loc: Mean of latent function output. + :param torch.Tensor f_var: Variance of latent function output. + :param torch.Tensor y: Training output tensor. + :returns: a tensor sampled from likelihood + :rtype: torch.Tensor + """ + # calculates Monte Carlo estimate for E_q(f) [logp(y | f)] + f = dist.Normal(f_loc, f_var.sqrt())() + if self.response_function is torch.sigmoid: + y_dist = dist.Bernoulli(logits=f) + else: + f_res = self.response_function(f) + y_dist = dist.Bernoulli(f_res) + if y is not None: + y_dist = y_dist.expand_by(y.shape[: -f.dim()]).to_event(y.dim()) + return pyro.sample(self._pyro_get_fullname("y"), y_dist, obs=y) diff --git a/pyro/source/pyro/contrib/gp/likelihoods/gaussian.py b/pyro/source/pyro/contrib/gp/likelihoods/gaussian.py new file mode 100644 index 0000000000000000000000000000000000000000..314a375a453117f66ac13e5c530ba111bdb59f29 --- /dev/null +++ b/pyro/source/pyro/contrib/gp/likelihoods/gaussian.py @@ -0,0 +1,48 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions import constraints + +import pyro +import pyro.distributions as dist +from pyro.contrib.gp.likelihoods.likelihood import Likelihood +from pyro.nn.module import PyroParam + + +class Gaussian(Likelihood): + """ + Implementation of Gaussian likelihood, which is used for regression problems. + + Gaussian likelihood uses :class:`~pyro.distributions.Normal` distribution. + + :param torch.Tensor variance: A variance parameter, which plays the role of + ``noise`` in regression problems. + """ + + def __init__(self, variance=None): + super().__init__() + + variance = torch.tensor(1.0) if variance is None else variance + self.variance = PyroParam(variance, constraints.positive) + + def forward(self, f_loc, f_var, y=None): + r""" + Samples :math:`y` given :math:`f_{loc}`, :math:`f_{var}` according to + + .. math:: y \sim \mathbb{Normal}(f_{loc}, f_{var} + \epsilon), + + where :math:`\epsilon` is the ``variance`` parameter of this likelihood. + + :param torch.Tensor f_loc: Mean of latent function output. + :param torch.Tensor f_var: Variance of latent function output. + :param torch.Tensor y: Training output tensor. + :returns: a tensor sampled from likelihood + :rtype: torch.Tensor + """ + y_var = f_var + self.variance + + y_dist = dist.Normal(f_loc, y_var.sqrt()) + if y is not None: + y_dist = y_dist.expand_by(y.shape[: -f_loc.dim()]).to_event(y.dim()) + return pyro.sample(self._pyro_get_fullname("y"), y_dist, obs=y) diff --git a/pyro/source/pyro/contrib/gp/likelihoods/likelihood.py b/pyro/source/pyro/contrib/gp/likelihoods/likelihood.py new file mode 100644 index 0000000000000000000000000000000000000000..48146c9e9aceefe8be9a993562a0a749d8b228f7 --- /dev/null +++ b/pyro/source/pyro/contrib/gp/likelihoods/likelihood.py @@ -0,0 +1,28 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from pyro.contrib.gp.parameterized import Parameterized + + +class Likelihood(Parameterized): + """ + Base class for likelihoods used in Gaussian Process. + + Every inherited class should implement a forward pass which + takes an input :math:`f` and returns a sample :math:`y`. + """ + + def __init__(self): + super().__init__() + + def forward(self, f_loc, f_var, y=None): + """ + Samples :math:`y` given :math:`f_{loc}`, :math:`f_{var}`. + + :param torch.Tensor f_loc: Mean of latent function output. + :param torch.Tensor f_var: Variance of latent function output. + :param torch.Tensor y: Training output tensor. + :returns: a tensor sampled from likelihood + :rtype: torch.Tensor + """ + raise NotImplementedError diff --git a/pyro/source/pyro/contrib/gp/likelihoods/multi_class.py b/pyro/source/pyro/contrib/gp/likelihoods/multi_class.py new file mode 100644 index 0000000000000000000000000000000000000000..25253ddcb07bc9abb635736b51238f4cbe5498fc --- /dev/null +++ b/pyro/source/pyro/contrib/gp/likelihoods/multi_class.py @@ -0,0 +1,77 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch.nn.functional as F + +import pyro +import pyro.distributions as dist +from pyro.contrib.gp.likelihoods.likelihood import Likelihood + + +def _softmax(x): + return F.softmax(x, dim=-1) + + +class MultiClass(Likelihood): + """ + Implementation of MultiClass likelihood, which is used for multi-class + classification problems. + + MultiClass likelihood uses :class:`~pyro.distributions.Categorical` + distribution, so ``response_function`` should normalize its input's rightmost axis. + By default, we use `softmax` function. + + :param int num_classes: Number of classes for prediction. + :param callable response_function: A mapping to correct domain for MultiClass + likelihood. + """ + + def __init__(self, num_classes, response_function=None): + super().__init__() + self.num_classes = num_classes + self.response_function = ( + _softmax if response_function is None else response_function + ) + + def forward(self, f_loc, f_var, y=None): + r""" + Samples :math:`y` given :math:`f_{loc}`, :math:`f_{var}` according to + + .. math:: f & \sim \mathbb{Normal}(f_{loc}, f_{var}),\\ + y & \sim \mathbb{Categorical}(f). + + .. note:: The log likelihood is estimated using Monte Carlo with 1 sample of + :math:`f`. + + :param torch.Tensor f_loc: Mean of latent function output. + :param torch.Tensor f_var: Variance of latent function output. + :param torch.Tensor y: Training output tensor. + :returns: a tensor sampled from likelihood + :rtype: torch.Tensor + """ + # calculates Monte Carlo estimate for E_q(f) [logp(y | f)] + f = dist.Normal(f_loc, f_var.sqrt())() + if f.dim() < 2: + raise ValueError( + "Latent function output should have at least 2 " + "dimensions: one for number of classes and one for " + "number of data." + ) + + # swap class dimension and data dimension + f_swap = f.transpose(-2, -1) # -> num_data x num_classes + if f_swap.size(-1) != self.num_classes: + raise ValueError( + "Number of Gaussian processes should be equal to the " + "number of classes. Expected {} but got {}.".format( + self.num_classes, f_swap.size(-1) + ) + ) + if self.response_function is _softmax: + y_dist = dist.Categorical(logits=f_swap) + else: + f_res = self.response_function(f_swap) + y_dist = dist.Categorical(f_res) + if y is not None: + y_dist = y_dist.expand_by(y.shape[: -f.dim() + 1]).to_event(y.dim()) + return pyro.sample(self._pyro_get_fullname("y"), y_dist, obs=y) diff --git a/pyro/source/pyro/contrib/gp/likelihoods/poisson.py b/pyro/source/pyro/contrib/gp/likelihoods/poisson.py new file mode 100644 index 0000000000000000000000000000000000000000..fcf23ca37bfa68dabadbaae56de1a67c529519b8 --- /dev/null +++ b/pyro/source/pyro/contrib/gp/likelihoods/poisson.py @@ -0,0 +1,52 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +import pyro +import pyro.distributions as dist +from pyro.contrib.gp.likelihoods.likelihood import Likelihood + + +class Poisson(Likelihood): + """ + Implementation of Poisson likelihood, which is used for count data. + + Poisson likelihood uses the :class:`~pyro.distributions.Poisson` + distribution, so the output of ``response_function`` should be positive. + By default, we use :func:`torch.exp` as response function, corresponding + to a log-Gaussian Cox process. + + :param callable response_function: A mapping to positive real numbers. + """ + + def __init__(self, response_function=None): + super().__init__() + self.response_function = ( + torch.exp if response_function is None else response_function + ) + + def forward(self, f_loc, f_var, y=None): + r""" + Samples :math:`y` given :math:`f_{loc}`, :math:`f_{var}` according to + + .. math:: f & \sim \mathbb{Normal}(f_{loc}, f_{var}),\\ + y & \sim \mathbb{Poisson}(\exp(f)). + + .. note:: The log likelihood is estimated using Monte Carlo with 1 sample of + :math:`f`. + + :param torch.Tensor f_loc: Mean of latent function output. + :param torch.Tensor f_var: Variance of latent function output. + :param torch.Tensor y: Training output tensor. + :returns: a tensor sampled from likelihood + :rtype: torch.Tensor + """ + # calculates Monte Carlo estimate for E_q(f) [logp(y | f)] + f = dist.Normal(f_loc, f_var.sqrt())() + f_res = self.response_function(f) + + y_dist = dist.Poisson(f_res) + if y is not None: + y_dist = y_dist.expand_by(y.shape[: -f_res.dim()]).to_event(y.dim()) + return pyro.sample(self._pyro_get_fullname("y"), y_dist, obs=y) diff --git a/pyro/source/pyro/contrib/gp/models/__init__.py b/pyro/source/pyro/contrib/gp/models/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1b4356c401f05248f45cbf4bf6d7c420fd5f958a --- /dev/null +++ b/pyro/source/pyro/contrib/gp/models/__init__.py @@ -0,0 +1,18 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from pyro.contrib.gp.models.gplvm import GPLVM +from pyro.contrib.gp.models.gpr import GPRegression +from pyro.contrib.gp.models.model import GPModel +from pyro.contrib.gp.models.sgpr import SparseGPRegression +from pyro.contrib.gp.models.vgp import VariationalGP +from pyro.contrib.gp.models.vsgp import VariationalSparseGP + +__all__ = [ + "GPLVM", + "GPModel", + "GPRegression", + "SparseGPRegression", + "VariationalGP", + "VariationalSparseGP", +] diff --git a/pyro/source/pyro/contrib/gp/models/gplvm.py b/pyro/source/pyro/contrib/gp/models/gplvm.py new file mode 100644 index 0000000000000000000000000000000000000000..f0d988325c6dd51f1c48806b11ad1356e0e2de9e --- /dev/null +++ b/pyro/source/pyro/contrib/gp/models/gplvm.py @@ -0,0 +1,95 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pyro.distributions as dist +from pyro.contrib.gp.parameterized import Parameterized +from pyro.nn.module import PyroSample, pyro_method + + +class GPLVM(Parameterized): + """ + Gaussian Process Latent Variable Model (GPLVM) model. + + GPLVM is a Gaussian Process model with its train input data is a latent variable. + This model is useful for dimensional reduction of high dimensional data. Assume the + mapping from low dimensional latent variable to is a Gaussian Process instance. + Then the high dimensional data will play the role of train output ``y`` and our + target is to learn latent inputs which best explain ``y``. For the purpose of + dimensional reduction, latent inputs should have lower dimensions than ``y``. + + We follows reference [1] to put a unit Gaussian prior to the input and approximate + its posterior by a multivariate normal distribution with two variational + parameters: ``X_loc`` and ``X_scale_tril``. + + For example, we can do dimensional reduction on Iris dataset as follows: + + >>> # With y as the 2D Iris data of shape 150x4 and we want to reduce its dimension + >>> # to a tensor X of shape 150x2, we will use GPLVM. + + .. doctest:: + :hide: + + >>> # Simulating iris data. + >>> y = torch.stack([dist.Normal(4.8, 0.1).sample((150,)), + ... dist.Normal(3.2, 0.3).sample((150,)), + ... dist.Normal(1.5, 0.4).sample((150,)), + ... dist.Exponential(0.5).sample((150,))]) + + >>> # First, define the initial values for X parameter: + >>> X_init = torch.zeros(150, 2) + >>> # Then, define a Gaussian Process model with input X_init and output y: + >>> kernel = gp.kernels.RBF(input_dim=2, lengthscale=torch.ones(2)) + >>> Xu = torch.zeros(20, 2) # initial inducing inputs of sparse model + >>> gpmodule = gp.models.SparseGPRegression(X_init, y, kernel, Xu) + >>> # Finally, wrap gpmodule by GPLVM, optimize, and get the "learned" mean of X: + >>> gplvm = gp.models.GPLVM(gpmodule) + >>> gp.util.train(gplvm) # doctest: +SKIP + >>> X = gplvm.X + + Reference: + + [1] Bayesian Gaussian Process Latent Variable Model + Michalis K. Titsias, Neil D. Lawrence + + :param ~pyro.contrib.gp.models.model.GPModel base_model: A Pyro Gaussian Process + model object. Note that ``base_model.X`` will be the initial value for the + variational parameter ``X_loc``. + """ + + def __init__(self, base_model): + super().__init__() + if base_model.X.dim() != 2: + raise ValueError( + "GPLVM model only works with 2D latent X, but got " + "X.dim() = {}.".format(base_model.X.dim()) + ) + self.base_model = base_model + + self.X = PyroSample( + dist.Normal(base_model.X.new_zeros(base_model.X.shape), 1.0).to_event() + ) + self.autoguide("X", dist.Normal) + self.X_loc.data = base_model.X + + @pyro_method + def model(self): + self.mode = "model" + # X is sampled from prior will be put into base_model + self.base_model.set_data(self.X, self.base_model.y) + self.base_model.model() + + @pyro_method + def guide(self): + self.mode = "guide" + # X is sampled from guide will be put into base_model + self.base_model.set_data(self.X, self.base_model.y) + self.base_model.guide() + + def forward(self, **kwargs): + """ + Forward method has the same signal as its ``base_model``. Note that the train + input data of ``base_model`` is sampled from GPLVM. + """ + self.mode = "guide" + self.base_model.set_data(self.X, self.base_model.y) + return self.base_model(**kwargs) diff --git a/pyro/source/pyro/contrib/gp/models/gpr.py b/pyro/source/pyro/contrib/gp/models/gpr.py new file mode 100644 index 0000000000000000000000000000000000000000..f718d875583a4a0366807934bcf95cd9ab97d6a1 --- /dev/null +++ b/pyro/source/pyro/contrib/gp/models/gpr.py @@ -0,0 +1,233 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +import torch.distributions as torchdist +from torch.distributions import constraints + +import pyro +import pyro.distributions as dist +from pyro.contrib.gp.models.model import GPModel +from pyro.contrib.gp.util import conditional +from pyro.nn.module import PyroParam, pyro_method +from pyro.util import warn_if_nan + + +class GPRegression(GPModel): + r""" + Gaussian Process Regression model. + + The core of a Gaussian Process is a covariance function :math:`k` which governs + the similarity between input points. Given :math:`k`, we can establish a + distribution over functions :math:`f` by a multivarite normal distribution + + .. math:: p(f(X)) = \mathcal{N}(0, k(X, X)), + + where :math:`X` is any set of input points and :math:`k(X, X)` is a covariance + matrix whose entries are outputs :math:`k(x, z)` of :math:`k` over input pairs + :math:`(x, z)`. This distribution is usually denoted by + + .. math:: f \sim \mathcal{GP}(0, k). + + .. note:: Generally, beside a covariance matrix :math:`k`, a Gaussian Process can + also be specified by a mean function :math:`m` (which is a zero-value function + by default). In that case, its distribution will be + + .. math:: p(f(X)) = \mathcal{N}(m(X), k(X, X)). + + Given inputs :math:`X` and their noisy observations :math:`y`, the Gaussian Process + Regression model takes the form + + .. math:: + f &\sim \mathcal{GP}(0, k(X, X)),\\ + y & \sim f + \epsilon, + + where :math:`\epsilon` is Gaussian noise. + + .. note:: This model has :math:`\mathcal{O}(N^3)` complexity for training, + :math:`\mathcal{O}(N^3)` complexity for testing. Here, :math:`N` is the number + of train inputs. + + Reference: + + [1] `Gaussian Processes for Machine Learning`, + Carl E. Rasmussen, Christopher K. I. Williams + + :param torch.Tensor X: A input data for training. Its first dimension is the number + of data points. + :param torch.Tensor y: An output data for training. Its last dimension is the + number of data points. + :param ~pyro.contrib.gp.kernels.kernel.Kernel kernel: A Pyro kernel object, which + is the covariance function :math:`k`. + :param torch.Tensor noise: Variance of Gaussian noise of this model. + :param callable mean_function: An optional mean function :math:`m` of this Gaussian + process. By default, we use zero mean. + :param float jitter: A small positive term which is added into the diagonal part of + a covariance matrix to help stablize its Cholesky decomposition. + """ + + def __init__(self, X, y, kernel, noise=None, mean_function=None, jitter=1e-6): + assert isinstance( + X, torch.Tensor + ), "X needs to be a torch Tensor instead of a {}".format(type(X)) + if y is not None: + assert isinstance( + y, torch.Tensor + ), "y needs to be a torch Tensor instead of a {}".format(type(y)) + super().__init__(X, y, kernel, mean_function, jitter) + + noise = self.X.new_tensor(1.0) if noise is None else noise + self.noise = PyroParam(noise, constraints.positive) + + @pyro_method + def model(self): + self.set_mode("model") + + N = self.X.size(0) + Kff = self.kernel(self.X) + Kff.view(-1)[:: N + 1] += self.jitter + self.noise # add noise to diagonal + Lff = torch.linalg.cholesky(Kff) + + zero_loc = self.X.new_zeros(self.X.size(0)) + f_loc = zero_loc + self.mean_function(self.X) + if self.y is None: + f_var = Lff.pow(2).sum(dim=-1) + return f_loc, f_var + else: + return pyro.sample( + self._pyro_get_fullname("y"), + dist.MultivariateNormal(f_loc, scale_tril=Lff) + .expand_by(self.y.shape[:-1]) + .to_event(self.y.dim() - 1), + obs=self.y, + ) + + @pyro_method + def guide(self): + self.set_mode("guide") + self._load_pyro_samples() + + def forward(self, Xnew, full_cov=False, noiseless=True): + r""" + Computes the mean and covariance matrix (or variance) of Gaussian Process + posterior on a test input data :math:`X_{new}`: + + .. math:: p(f^* \mid X_{new}, X, y, k, \epsilon) = \mathcal{N}(loc, cov). + + .. note:: The noise parameter ``noise`` (:math:`\epsilon`) together with + kernel's parameters have been learned from a training procedure (MCMC or + SVI). + + :param torch.Tensor Xnew: A input data for testing. Note that + ``Xnew.shape[1:]`` must be the same as ``self.X.shape[1:]``. + :param bool full_cov: A flag to decide if we want to predict full covariance + matrix or just variance. + :param bool noiseless: A flag to decide if we want to include noise in the + prediction output or not. + :returns: loc and covariance matrix (or variance) of :math:`p(f^*(X_{new}))` + :rtype: tuple(torch.Tensor, torch.Tensor) + """ + self._check_Xnew_shape(Xnew) + self.set_mode("guide") + + N = self.X.size(0) + Kff = self.kernel(self.X).contiguous() + Kff.view(-1)[:: N + 1] += self.jitter + self.noise # add noise to the diagonal + Lff = torch.linalg.cholesky(Kff) + + y_residual = self.y - self.mean_function(self.X) + loc, cov = conditional( + Xnew, + self.X, + self.kernel, + y_residual, + None, + Lff, + full_cov, + jitter=self.jitter, + ) + + if full_cov and not noiseless: + M = Xnew.size(0) + cov = cov.contiguous() + cov.view(-1, M * M)[:, :: M + 1] += self.noise # add noise to the diagonal + if not full_cov and not noiseless: + cov = cov + self.noise + + return loc + self.mean_function(Xnew), cov + + def iter_sample(self, noiseless=True): + r""" + Iteratively constructs a sample from the Gaussian Process posterior. + + Recall that at test input points :math:`X_{new}`, the posterior is + multivariate Gaussian distributed with mean and covariance matrix + given by :func:`forward`. + + This method samples lazily from this multivariate Gaussian. The advantage + of this approach is that later query points can depend upon earlier ones. + Particularly useful when the querying is to be done by an optimisation + routine. + + .. note:: The noise parameter ``noise`` (:math:`\epsilon`) together with + kernel's parameters have been learned from a training procedure (MCMC or + SVI). + + :param bool noiseless: A flag to decide if we want to add sampling noise + to the samples beyond the noise inherent in the GP posterior. + :returns: sampler + :rtype: function + """ + noise = self.noise.detach() + X = self.X.clone().detach() + y = self.y.clone().detach() + N = X.size(0) + Kff = self.kernel(X).contiguous() + Kff.view(-1)[:: N + 1] += noise # add noise to the diagonal + + outside_vars = {"X": X, "y": y, "N": N, "Kff": Kff} + + def sample_next(xnew, outside_vars): + """Repeatedly samples from the Gaussian process posterior, + conditioning on previously sampled values. + """ + warn_if_nan(xnew) + + # Variables from outer scope + X, y, Kff = outside_vars["X"], outside_vars["y"], outside_vars["Kff"] + + # Compute Cholesky decomposition of kernel matrix + Lff = torch.linalg.cholesky(Kff) + y_residual = y - self.mean_function(X) + + # Compute conditional mean and variance + loc, cov = conditional( + xnew, X, self.kernel, y_residual, None, Lff, False, jitter=self.jitter + ) + if not noiseless: + cov = cov + noise + + ynew = torchdist.Normal( + loc + self.mean_function(xnew), cov.sqrt() + ).rsample() + + # Update kernel matrix + N = outside_vars["N"] + Kffnew = Kff.new_empty(N + 1, N + 1) + Kffnew[:N, :N] = Kff + cross = self.kernel(X, xnew).squeeze() + end = self.kernel(xnew, xnew).squeeze() + Kffnew[N, :N] = cross + Kffnew[:N, N] = cross + # No noise, just jitter for numerical stability + Kffnew[N, N] = end + self.jitter + # Heuristic to avoid adding degenerate points + if Kffnew.logdet() > -15.0: + outside_vars["Kff"] = Kffnew + outside_vars["N"] += 1 + outside_vars["X"] = torch.cat((X, xnew)) + outside_vars["y"] = torch.cat((y, ynew)) + + return ynew + + return lambda xnew: sample_next(xnew, outside_vars) diff --git a/pyro/source/pyro/contrib/gp/models/model.py b/pyro/source/pyro/contrib/gp/models/model.py new file mode 100644 index 0000000000000000000000000000000000000000..61bebe85f466c279eada78e0abecbe488a714249 --- /dev/null +++ b/pyro/source/pyro/contrib/gp/models/model.py @@ -0,0 +1,227 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +from pyro.contrib.gp.parameterized import Parameterized + + +def _zero_mean_function(x): + return 0 + + +class GPModel(Parameterized): + r""" + Base class for Gaussian Process models. + + The core of a Gaussian Process is a covariance function :math:`k` which governs + the similarity between input points. Given :math:`k`, we can establish a + distribution over functions :math:`f` by a multivarite normal distribution + + .. math:: p(f(X)) = \mathcal{N}(0, k(X, X)), + + where :math:`X` is any set of input points and :math:`k(X, X)` is a covariance + matrix whose entries are outputs :math:`k(x, z)` of :math:`k` over input pairs + :math:`(x, z)`. This distribution is usually denoted by + + .. math:: f \sim \mathcal{GP}(0, k). + + .. note:: Generally, beside a covariance matrix :math:`k`, a Gaussian Process can + also be specified by a mean function :math:`m` (which is a zero-value function + by default). In that case, its distribution will be + + .. math:: p(f(X)) = \mathcal{N}(m(X), k(X, X)). + + Gaussian Process models are :class:`~pyro.contrib.gp.util.Parameterized` + subclasses. So its parameters can be learned, set priors, or fixed by using + corresponding methods from :class:`~pyro.contrib.gp.util.Parameterized`. A typical + way to define a Gaussian Process model is + + >>> X = torch.tensor([[1., 5, 3], [4, 3, 7]]) + >>> y = torch.tensor([2., 1]) + >>> kernel = gp.kernels.RBF(input_dim=3) + >>> kernel.variance = pyro.nn.PyroSample(dist.Uniform(torch.tensor(0.5), torch.tensor(1.5))) + >>> kernel.lengthscale = pyro.nn.PyroSample(dist.Uniform(torch.tensor(1.0), torch.tensor(3.0))) + >>> gpr = gp.models.GPRegression(X, y, kernel) + + There are two ways to train a Gaussian Process model: + + + Using an MCMC algorithm (in module :mod:`pyro.infer.mcmc`) on :meth:`model` to + get posterior samples for the Gaussian Process's parameters. For example: + + >>> hmc_kernel = HMC(gpr.model) + >>> mcmc = MCMC(hmc_kernel, num_samples=10) + >>> mcmc.run() + >>> ls_name = "kernel.lengthscale" + >>> posterior_ls = mcmc.get_samples()[ls_name] + + + Using a variational inference on the pair :meth:`model`, :meth:`guide`: + + >>> optimizer = torch.optim.Adam(gpr.parameters(), lr=0.01) + >>> loss_fn = pyro.infer.TraceMeanField_ELBO().differentiable_loss + >>> + >>> for i in range(1000): + ... optimizer.zero_grad() + ... loss = loss_fn(gpr.model, gpr.guide) # doctest: +SKIP + ... loss.backward() # doctest: +SKIP + ... optimizer.step() + + To give a prediction on new dataset, simply use :meth:`forward` like any PyTorch + :class:`torch.nn.Module`: + + >>> Xnew = torch.tensor([[2., 3, 1]]) + >>> f_loc, f_cov = gpr(Xnew, full_cov=True) + + Reference: + + [1] `Gaussian Processes for Machine Learning`, + Carl E. Rasmussen, Christopher K. I. Williams + + :param torch.Tensor X: A input data for training. Its first dimension is the number + of data points. + :param torch.Tensor y: An output data for training. Its last dimension is the + number of data points. + :param ~pyro.contrib.gp.kernels.kernel.Kernel kernel: A Pyro kernel object, which + is the covariance function :math:`k`. + :param callable mean_function: An optional mean function :math:`m` of this Gaussian + process. By default, we use zero mean. + :param float jitter: A small positive term which is added into the diagonal part of + a covariance matrix to help stablize its Cholesky decomposition. + """ + + def __init__(self, X, y, kernel, mean_function=None, jitter=1e-6): + assert isinstance( + X, torch.Tensor + ), "X needs to be a torch Tensor instead of a {}".format(type(X)) + if y is not None: + assert isinstance( + y, torch.Tensor + ), "y needs to be a torch Tensor instead of a {}".format(type(y)) + + super().__init__() + self.set_data(X, y) + self.kernel = kernel + self.mean_function = ( + mean_function if mean_function is not None else _zero_mean_function + ) + self.jitter = jitter + + def model(self): + """ + A "model" stochastic function. If ``self.y`` is ``None``, this method returns + mean and variance of the Gaussian Process prior. + """ + raise NotImplementedError + + def guide(self): + """ + A "guide" stochastic function to be used in variational inference methods. It + also gives posterior information to the method :meth:`forward` for prediction. + """ + raise NotImplementedError + + def forward(self, Xnew, full_cov=False): + r""" + Computes the mean and covariance matrix (or variance) of Gaussian Process + posterior on a test input data :math:`X_{new}`: + + .. math:: p(f^* \mid X_{new}, X, y, k, \theta), + + where :math:`\theta` are parameters of this model. + + .. note:: Model's parameters :math:`\theta` together with kernel's parameters + have been learned from a training procedure (MCMC or SVI). + + :param torch.Tensor Xnew: A input data for testing. Note that + ``Xnew.shape[1:]`` must be the same as ``X.shape[1:]``. + :param bool full_cov: A flag to decide if we want to predict full covariance + matrix or just variance. + :returns: loc and covariance matrix (or variance) of :math:`p(f^*(X_{new}))` + :rtype: tuple(torch.Tensor, torch.Tensor) + """ + raise NotImplementedError + + def set_data(self, X, y=None): + """ + Sets data for Gaussian Process models. + + Some examples to utilize this method are: + + .. doctest:: + :hide: + + >>> X = torch.tensor([[1., 5, 3], [4, 3, 7]]) + >>> y = torch.tensor([2., 1]) + >>> kernel = gp.kernels.RBF(input_dim=3) + >>> kernel.variance = pyro.nn.PyroSample(dist.Uniform(torch.tensor(0.5), torch.tensor(1.5))) + >>> kernel.lengthscale = pyro.nn.PyroSample(dist.Uniform(torch.tensor(1.0), torch.tensor(3.0))) + + + Batch training on a sparse variational model: + + >>> Xu = torch.tensor([[1., 0, 2]]) # inducing input + >>> likelihood = gp.likelihoods.Gaussian() + >>> vsgp = gp.models.VariationalSparseGP(X, y, kernel, Xu, likelihood) + >>> optimizer = torch.optim.Adam(vsgp.parameters(), lr=0.01) + >>> loss_fn = pyro.infer.TraceMeanField_ELBO().differentiable_loss + >>> batched_X, batched_y = X.split(split_size=10), y.split(split_size=10) + >>> for Xi, yi in zip(batched_X, batched_y): + ... optimizer.zero_grad() + ... vsgp.set_data(Xi, yi) + ... loss = loss_fn(vsgp.model, vsgp.guide) # doctest: +SKIP + ... loss.backward() # doctest: +SKIP + ... optimizer.step() + + + Making a two-layer Gaussian Process stochastic function: + + >>> gpr1 = gp.models.GPRegression(X, None, kernel) + >>> Z, _ = gpr1.model() + >>> gpr2 = gp.models.GPRegression(Z, y, kernel) + >>> def two_layer_model(): + ... Z, _ = gpr1.model() + ... gpr2.set_data(Z, y) + ... return gpr2.model() + + References: + + [1] `Scalable Variational Gaussian Process Classification`, + James Hensman, Alexander G. de G. Matthews, Zoubin Ghahramani + + [2] `Deep Gaussian Processes`, + Andreas C. Damianou, Neil D. Lawrence + + :param torch.Tensor X: A input data for training. Its first dimension is the + number of data points. + :param torch.Tensor y: An output data for training. Its last dimension is the + number of data points. + """ + if y is not None and X.size(0) != y.size(-1): + raise ValueError( + "Expected the number of input data points equal to the " + "number of output data points, but got {} and {}.".format( + X.size(0), y.size(-1) + ) + ) + self.X = X + self.y = y + + def _check_Xnew_shape(self, Xnew): + """ + Checks the correction of the shape of new data. + + :param torch.Tensor Xnew: A input data for testing. Note that + ``Xnew.shape[1:]`` must be the same as ``self.X.shape[1:]``. + """ + if Xnew.dim() != self.X.dim(): + raise ValueError( + "Train data and test data should have the same " + "number of dimensions, but got {} and {}.".format( + self.X.dim(), Xnew.dim() + ) + ) + if self.X.shape[1:] != Xnew.shape[1:]: + raise ValueError( + "Train data and test data should have the same " + "shape of features, but got {} and {}.".format( + self.X.shape[1:], Xnew.shape[1:] + ) + ) diff --git a/pyro/source/pyro/contrib/gp/models/sgpr.py b/pyro/source/pyro/contrib/gp/models/sgpr.py new file mode 100644 index 0000000000000000000000000000000000000000..752cca2ead3319d7d6bb8d4e0bfe8b63ec88c1c8 --- /dev/null +++ b/pyro/source/pyro/contrib/gp/models/sgpr.py @@ -0,0 +1,277 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions import constraints +from torch.nn import Parameter + +import pyro +import pyro.distributions as dist +from pyro.contrib.gp.models.model import GPModel +from pyro.nn.module import PyroParam, pyro_method + + +class SparseGPRegression(GPModel): + """ + Sparse Gaussian Process Regression model. + + In :class:`.GPRegression` model, when the number of input data :math:`X` is large, + the covariance matrix :math:`k(X, X)` will require a lot of computational steps to + compute its inverse (for log likelihood and for prediction). By introducing an + additional inducing-input parameter :math:`X_u`, we can reduce computational cost + by approximate :math:`k(X, X)` by a low-rank Nystr\u00f6m approximation :math:`Q` + (see reference [1]), where + + .. math:: Q = k(X, X_u) k(X_u,X_u)^{-1} k(X_u, X). + + Given inputs :math:`X`, their noisy observations :math:`y`, and the inducing-input + parameters :math:`X_u`, the model takes the form: + + .. math:: + u & \\sim \\mathcal{GP}(0, k(X_u, X_u)),\\\\ + f & \\sim q(f \\mid X, X_u) = \\mathbb{E}_{p(u)}q(f\\mid X, X_u, u),\\\\ + y & \\sim f + \\epsilon, + + where :math:`\\epsilon` is Gaussian noise and the conditional distribution + :math:`q(f\\mid X, X_u, u)` is an approximation of + + .. math:: p(f\\mid X, X_u, u) = \\mathcal{N}(m, k(X, X) - Q), + + whose terms :math:`m` and :math:`k(X, X) - Q` is derived from the joint + multivariate normal distribution: + + .. math:: [f, u] \\sim \\mathcal{GP}(0, k([X, X_u], [X, X_u])). + + This class implements three approximation methods: + + + Deterministic Training Conditional (DTC): + + .. math:: q(f\\mid X, X_u, u) = \\mathcal{N}(m, 0), + + which in turns will imply + + .. math:: f \\sim \\mathcal{N}(0, Q). + + + Fully Independent Training Conditional (FITC): + + .. math:: q(f\\mid X, X_u, u) = \\mathcal{N}(m, diag(k(X, X) - Q)), + + which in turns will correct the diagonal part of the approximation in DTC: + + .. math:: f \\sim \\mathcal{N}(0, Q + diag(k(X, X) - Q)). + + + Variational Free Energy (VFE), which is similar to DTC but has an additional + `trace_term` in the model's log likelihood. This additional term makes "VFE" + equivalent to the variational approach in :class:`.VariationalSparseGP` + (see reference [2]). + + .. note:: This model has :math:`\\mathcal{O}(NM^2)` complexity for training, + :math:`\\mathcal{O}(NM^2)` complexity for testing. Here, :math:`N` is the number + of train inputs, :math:`M` is the number of inducing inputs. + + References: + + [1] `A Unifying View of Sparse Approximate Gaussian Process Regression`, + Joaquin Qui\u00f1onero-Candela, Carl E. Rasmussen + + [2] `Variational learning of inducing variables in sparse Gaussian processes`, + Michalis Titsias + + :param torch.Tensor X: A input data for training. Its first dimension is the number + of data points. + :param torch.Tensor y: An output data for training. Its last dimension is the + number of data points. + :param ~pyro.contrib.gp.kernels.kernel.Kernel kernel: A Pyro kernel object, which + is the covariance function :math:`k`. + :param torch.Tensor Xu: Initial values for inducing points, which are parameters + of our model. + :param torch.Tensor noise: Variance of Gaussian noise of this model. + :param callable mean_function: An optional mean function :math:`m` of this Gaussian + process. By default, we use zero mean. + :param str approx: One of approximation methods: "DTC", "FITC", and "VFE" + (default). + :param float jitter: A small positive term which is added into the diagonal part of + a covariance matrix to help stablize its Cholesky decomposition. + :param str name: Name of this model. + """ + + def __init__( + self, X, y, kernel, Xu, noise=None, mean_function=None, approx=None, jitter=1e-6 + ): + assert isinstance( + X, torch.Tensor + ), "X needs to be a torch Tensor instead of a {}".format(type(X)) + if y is not None: + assert isinstance( + y, torch.Tensor + ), "y needs to be a torch Tensor instead of a {}".format(type(y)) + assert isinstance( + Xu, torch.Tensor + ), "Xu needs to be a torch Tensor instead of a {}".format(type(Xu)) + + super().__init__(X, y, kernel, mean_function, jitter) + + self.Xu = Parameter(Xu) + + noise = self.X.new_tensor(1.0) if noise is None else noise + self.noise = PyroParam(noise, constraints.positive) + + if approx is None: + self.approx = "VFE" + elif approx in ["DTC", "FITC", "VFE"]: + self.approx = approx + else: + raise ValueError( + "The sparse approximation method should be one of " + "'DTC', 'FITC', 'VFE'." + ) + + @pyro_method + def model(self): + self.set_mode("model") + + # W = (inv(Luu) @ Kuf).T + # Qff = Kfu @ inv(Kuu) @ Kuf = W @ W.T + # Fomulas for each approximation method are + # DTC: y_cov = Qff + noise, trace_term = 0 + # FITC: y_cov = Qff + diag(Kff - Qff) + noise, trace_term = 0 + # VFE: y_cov = Qff + noise, trace_term = tr(Kff-Qff) / noise + # y_cov = W @ W.T + D + # trace_term is added into log_prob + + N = self.X.size(0) + M = self.Xu.size(0) + Kuu = self.kernel(self.Xu).contiguous() + Kuu.view(-1)[:: M + 1] += self.jitter # add jitter to the diagonal + Luu = torch.linalg.cholesky(Kuu) + Kuf = self.kernel(self.Xu, self.X) + W = torch.linalg.solve_triangular(Luu, Kuf, upper=False).t() + + D = self.noise.expand(N) + if self.approx == "FITC" or self.approx == "VFE": + Kffdiag = self.kernel(self.X, diag=True) + Qffdiag = W.pow(2).sum(dim=-1) + if self.approx == "FITC": + D = D + Kffdiag - Qffdiag + else: # approx = "VFE" + trace_term = (Kffdiag - Qffdiag).sum() / self.noise + trace_term = trace_term.clamp(min=0) + + zero_loc = self.X.new_zeros(N) + f_loc = zero_loc + self.mean_function(self.X) + if self.y is None: + f_var = D + W.pow(2).sum(dim=-1) + return f_loc, f_var + else: + if self.approx == "VFE": + pyro.factor(self._pyro_get_fullname("trace_term"), -trace_term / 2.0) + + return pyro.sample( + self._pyro_get_fullname("y"), + dist.LowRankMultivariateNormal(f_loc, W, D) + .expand_by(self.y.shape[:-1]) + .to_event(self.y.dim() - 1), + obs=self.y, + ) + + @pyro_method + def guide(self): + self.set_mode("guide") + self._load_pyro_samples() + + def forward(self, Xnew, full_cov=False, noiseless=True): + r""" + Computes the mean and covariance matrix (or variance) of Gaussian Process + posterior on a test input data :math:`X_{new}`: + + .. math:: p(f^* \mid X_{new}, X, y, k, X_u, \epsilon) = \mathcal{N}(loc, cov). + + .. note:: The noise parameter ``noise`` (:math:`\epsilon`), the inducing-point + parameter ``Xu``, together with kernel's parameters have been learned from + a training procedure (MCMC or SVI). + + :param torch.Tensor Xnew: A input data for testing. Note that + ``Xnew.shape[1:]`` must be the same as ``self.X.shape[1:]``. + :param bool full_cov: A flag to decide if we want to predict full covariance + matrix or just variance. + :param bool noiseless: A flag to decide if we want to include noise in the + prediction output or not. + :returns: loc and covariance matrix (or variance) of :math:`p(f^*(X_{new}))` + :rtype: tuple(torch.Tensor, torch.Tensor) + """ + self._check_Xnew_shape(Xnew) + self.set_mode("guide") + + # W = inv(Luu) @ Kuf + # Ws = inv(Luu) @ Kus + # D as in self.model() + # K = I + W @ inv(D) @ W.T = L @ L.T + # S = inv[Kuu + Kuf @ inv(D) @ Kfu] + # = inv(Luu).T @ inv[I + inv(Luu)@ Kuf @ inv(D)@ Kfu @ inv(Luu).T] @ inv(Luu) + # = inv(Luu).T @ inv[I + W @ inv(D) @ W.T] @ inv(Luu) + # = inv(Luu).T @ inv(K) @ inv(Luu) + # = inv(Luu).T @ inv(L).T @ inv(L) @ inv(Luu) + # loc = Ksu @ S @ Kuf @ inv(D) @ y = Ws.T @ inv(L).T @ inv(L) @ W @ inv(D) @ y + # cov = Kss - Ksu @ inv(Kuu) @ Kus + Ksu @ S @ Kus + # = kss - Ksu @ inv(Kuu) @ Kus + Ws.T @ inv(L).T @ inv(L) @ Ws + + N = self.X.size(0) + M = self.Xu.size(0) + + # TODO: cache these calculations to get faster inference + + Kuu = self.kernel(self.Xu).contiguous() + Kuu.view(-1)[:: M + 1] += self.jitter # add jitter to the diagonal + Luu = torch.linalg.cholesky(Kuu) + + Kuf = self.kernel(self.Xu, self.X) + + W = torch.linalg.solve_triangular(Luu, Kuf, upper=False) + D = self.noise.expand(N) + if self.approx == "FITC": + Kffdiag = self.kernel(self.X, diag=True) + Qffdiag = W.pow(2).sum(dim=0) + D = D + Kffdiag - Qffdiag + + W_Dinv = W / D + K = W_Dinv.matmul(W.t()).contiguous() + K.view(-1)[:: M + 1] += 1 # add identity matrix to K + L = torch.linalg.cholesky(K) + + # get y_residual and convert it into 2D tensor for packing + y_residual = self.y - self.mean_function(self.X) + y_2D = y_residual.reshape(-1, N).t() + W_Dinv_y = W_Dinv.matmul(y_2D) + + # End caching ---------- + + Kus = self.kernel(self.Xu, Xnew) + Ws = torch.linalg.solve_triangular(Luu, Kus, upper=False) + pack = torch.cat((W_Dinv_y, Ws), dim=1) + Linv_pack = torch.linalg.solve_triangular(L, pack, upper=False) + # unpack + Linv_W_Dinv_y = Linv_pack[:, : W_Dinv_y.shape[1]] + Linv_Ws = Linv_pack[:, W_Dinv_y.shape[1] :] + + C = Xnew.size(0) + loc_shape = self.y.shape[:-1] + (C,) + loc = Linv_W_Dinv_y.t().matmul(Linv_Ws).reshape(loc_shape) + + if full_cov: + Kss = self.kernel(Xnew).contiguous() + if not noiseless: + Kss.view(-1)[:: C + 1] += self.noise # add noise to the diagonal + Qss = Ws.t().matmul(Ws) + cov = Kss - Qss + Linv_Ws.t().matmul(Linv_Ws) + cov_shape = self.y.shape[:-1] + (C, C) + cov = cov.expand(cov_shape) + else: + Kssdiag = self.kernel(Xnew, diag=True) + if not noiseless: + Kssdiag = Kssdiag + self.noise + Qssdiag = Ws.pow(2).sum(dim=0) + cov = Kssdiag - Qssdiag + Linv_Ws.pow(2).sum(dim=0) + cov_shape = self.y.shape[:-1] + (C,) + cov = cov.expand(cov_shape) + + return loc + self.mean_function(Xnew), cov diff --git a/pyro/source/pyro/contrib/gp/models/vgp.py b/pyro/source/pyro/contrib/gp/models/vgp.py new file mode 100644 index 0000000000000000000000000000000000000000..2bcadc80324835291e331d6eac97aa3d96c8c754 --- /dev/null +++ b/pyro/source/pyro/contrib/gp/models/vgp.py @@ -0,0 +1,180 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions import constraints +from torch.nn import Parameter + +import pyro +import pyro.distributions as dist +from pyro.contrib.gp.models.model import GPModel +from pyro.contrib.gp.util import conditional +from pyro.distributions.util import eye_like +from pyro.nn.module import PyroParam, pyro_method + + +class VariationalGP(GPModel): + r""" + Variational Gaussian Process model. + + This model deals with both Gaussian and non-Gaussian likelihoods. Given inputs\ + :math:`X` and their noisy observations :math:`y`, the model takes the form + + .. math:: + f &\sim \mathcal{GP}(0, k(X, X)),\\ + y & \sim p(y) = p(y \mid f) p(f), + + where :math:`p(y \mid f)` is the likelihood. + + We will use a variational approach in this model by approximating :math:`q(f)` to + the posterior :math:`p(f\mid y)`. Precisely, :math:`q(f)` will be a multivariate + normal distribution with two parameters ``f_loc`` and ``f_scale_tril``, which will + be learned during a variational inference process. + + .. note:: This model can be seen as a special version of + :class:`.VariationalSparseGP` model with :math:`X_u = X`. + + .. note:: This model has :math:`\mathcal{O}(N^3)` complexity for training, + :math:`\mathcal{O}(N^3)` complexity for testing. Here, :math:`N` is the number + of train inputs. Size of variational parameters is :math:`\mathcal{O}(N^2)`. + + :param torch.Tensor X: A input data for training. Its first dimension is the number + of data points. + :param torch.Tensor y: An output data for training. Its last dimension is the + number of data points. + :param ~pyro.contrib.gp.kernels.kernel.Kernel kernel: A Pyro kernel object, which + is the covariance function :math:`k`. + :param ~pyro.contrib.gp.likelihoods.likelihood Likelihood likelihood: A likelihood + object. + :param callable mean_function: An optional mean function :math:`m` of this Gaussian + process. By default, we use zero mean. + :param torch.Size latent_shape: Shape for latent processes (`batch_shape` of + :math:`q(f)`). By default, it equals to output batch shape ``y.shape[:-1]``. + For the multi-class classification problems, ``latent_shape[-1]`` should + corresponse to the number of classes. + :param bool whiten: A flag to tell if variational parameters ``f_loc`` and + ``f_scale_tril`` are transformed by the inverse of ``Lff``, where ``Lff`` is + the lower triangular decomposition of :math:`kernel(X, X)`. Enable this flag + will help optimization. + :param float jitter: A small positive term which is added into the diagonal part of + a covariance matrix to help stablize its Cholesky decomposition. + """ + + def __init__( + self, + X, + y, + kernel, + likelihood, + mean_function=None, + latent_shape=None, + whiten=False, + jitter=1e-6, + ): + assert isinstance( + X, torch.Tensor + ), "X needs to be a torch Tensor instead of a {}".format(type(X)) + if y is not None: + assert isinstance( + y, torch.Tensor + ), "y needs to be a torch Tensor instead of a {}".format(type(y)) + super().__init__(X, y, kernel, mean_function, jitter) + + self.likelihood = likelihood + + y_batch_shape = self.y.shape[:-1] if self.y is not None else torch.Size([]) + self.latent_shape = latent_shape if latent_shape is not None else y_batch_shape + + N = self.X.size(0) + f_loc = self.X.new_zeros(self.latent_shape + (N,)) + self.f_loc = Parameter(f_loc) + + identity = eye_like(self.X, N) + f_scale_tril = identity.repeat(self.latent_shape + (1, 1)) + self.f_scale_tril = PyroParam(f_scale_tril, constraints.lower_cholesky) + + self.whiten = whiten + self._sample_latent = True + + @pyro_method + def model(self): + self.set_mode("model") + + N = self.X.size(0) + Kff = self.kernel(self.X).contiguous() + Kff.view(-1)[:: N + 1] += self.jitter # add jitter to the diagonal + Lff = torch.linalg.cholesky(Kff) + + zero_loc = self.X.new_zeros(self.f_loc.shape) + if self.whiten: + identity = eye_like(self.X, N) + pyro.sample( + self._pyro_get_fullname("f"), + dist.MultivariateNormal(zero_loc, scale_tril=identity).to_event( + zero_loc.dim() - 1 + ), + ) + f_scale_tril = Lff.matmul(self.f_scale_tril) + f_loc = Lff.matmul(self.f_loc.unsqueeze(-1)).squeeze(-1) + else: + pyro.sample( + self._pyro_get_fullname("f"), + dist.MultivariateNormal(zero_loc, scale_tril=Lff).to_event( + zero_loc.dim() - 1 + ), + ) + f_scale_tril = self.f_scale_tril + f_loc = self.f_loc + + f_loc = f_loc + self.mean_function(self.X) + f_var = f_scale_tril.pow(2).sum(dim=-1) + if self.y is None: + return f_loc, f_var + else: + return self.likelihood(f_loc, f_var, self.y) + + @pyro_method + def guide(self): + self.set_mode("guide") + self._load_pyro_samples() + + pyro.sample( + self._pyro_get_fullname("f"), + dist.MultivariateNormal(self.f_loc, scale_tril=self.f_scale_tril).to_event( + self.f_loc.dim() - 1 + ), + ) + + def forward(self, Xnew, full_cov=False): + r""" + Computes the mean and covariance matrix (or variance) of Gaussian Process + posterior on a test input data :math:`X_{new}`: + + .. math:: p(f^* \mid X_{new}, X, y, k, f_{loc}, f_{scale\_tril}) + = \mathcal{N}(loc, cov). + + .. note:: Variational parameters ``f_loc``, ``f_scale_tril``, together with + kernel's parameters have been learned from a training procedure (MCMC or + SVI). + + :param torch.Tensor Xnew: A input data for testing. Note that + ``Xnew.shape[1:]`` must be the same as ``self.X.shape[1:]``. + :param bool full_cov: A flag to decide if we want to predict full covariance + matrix or just variance. + :returns: loc and covariance matrix (or variance) of :math:`p(f^*(X_{new}))` + :rtype: tuple(torch.Tensor, torch.Tensor) + """ + self._check_Xnew_shape(Xnew) + self.set_mode("guide") + + loc, cov = conditional( + Xnew, + self.X, + self.kernel, + self.f_loc, + self.f_scale_tril, + full_cov=full_cov, + whiten=self.whiten, + jitter=self.jitter, + ) + return loc + self.mean_function(Xnew), cov diff --git a/pyro/source/pyro/contrib/gp/models/vsgp.py b/pyro/source/pyro/contrib/gp/models/vsgp.py new file mode 100644 index 0000000000000000000000000000000000000000..77e053d86c809d768977a00ed747a35846ede18e --- /dev/null +++ b/pyro/source/pyro/contrib/gp/models/vsgp.py @@ -0,0 +1,217 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions import constraints +from torch.nn import Parameter + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.contrib.gp.models.model import GPModel +from pyro.contrib.gp.util import conditional +from pyro.distributions.util import eye_like +from pyro.nn.module import PyroParam, pyro_method + + +class VariationalSparseGP(GPModel): + r""" + Variational Sparse Gaussian Process model. + + In :class:`.VariationalGP` model, when the number of input data :math:`X` is large, + the covariance matrix :math:`k(X, X)` will require a lot of computational steps to + compute its inverse (for log likelihood and for prediction). This model introduces + an additional inducing-input parameter :math:`X_u` to solve that problem. Given + inputs :math:`X`, their noisy observations :math:`y`, and the inducing-input + parameters :math:`X_u`, the model takes the form: + + .. math:: + [f, u] &\sim \mathcal{GP}(0, k([X, X_u], [X, X_u])),\\ + y & \sim p(y) = p(y \mid f) p(f), + + where :math:`p(y \mid f)` is the likelihood. + + We will use a variational approach in this model by approximating :math:`q(f,u)` + to the posterior :math:`p(f,u \mid y)`. Precisely, :math:`q(f) = p(f\mid u)q(u)`, + where :math:`q(u)` is a multivariate normal distribution with two parameters + ``u_loc`` and ``u_scale_tril``, which will be learned during a variational + inference process. + + .. note:: This model can be learned using MCMC method as in reference [2]. See also + :class:`.GPModel`. + + .. note:: This model has :math:`\mathcal{O}(NM^2)` complexity for training, + :math:`\mathcal{O}(M^3)` complexity for testing. Here, :math:`N` is the number + of train inputs, :math:`M` is the number of inducing inputs. Size of + variational parameters is :math:`\mathcal{O}(M^2)`. + + References: + + [1] `Scalable variational Gaussian process classification`, + James Hensman, Alexander G. de G. Matthews, Zoubin Ghahramani + + [2] `MCMC for Variationally Sparse Gaussian Processes`, + James Hensman, Alexander G. de G. Matthews, Maurizio Filippone, Zoubin Ghahramani + + :param torch.Tensor X: A input data for training. Its first dimension is the number + of data points. + :param torch.Tensor y: An output data for training. Its last dimension is the + number of data points. + :param ~pyro.contrib.gp.kernels.kernel.Kernel kernel: A Pyro kernel object, which + is the covariance function :math:`k`. + :param torch.Tensor Xu: Initial values for inducing points, which are parameters + of our model. + :param ~pyro.contrib.gp.likelihoods.likelihood Likelihood likelihood: A likelihood + object. + :param callable mean_function: An optional mean function :math:`m` of this Gaussian + process. By default, we use zero mean. + :param torch.Size latent_shape: Shape for latent processes (`batch_shape` of + :math:`q(u)`). By default, it equals to output batch shape ``y.shape[:-1]``. + For the multi-class classification problems, ``latent_shape[-1]`` should + corresponse to the number of classes. + :param int num_data: The size of full training dataset. It is useful for training + this model with mini-batch. + :param bool whiten: A flag to tell if variational parameters ``u_loc`` and + ``u_scale_tril`` are transformed by the inverse of ``Luu``, where ``Luu`` is + the lower triangular decomposition of :math:`kernel(X_u, X_u)`. Enable this + flag will help optimization. + :param float jitter: A small positive term which is added into the diagonal part of + a covariance matrix to help stablize its Cholesky decomposition. + """ + + def __init__( + self, + X, + y, + kernel, + Xu, + likelihood, + mean_function=None, + latent_shape=None, + num_data=None, + whiten=False, + jitter=1e-6, + ): + assert isinstance( + X, torch.Tensor + ), "X needs to be a torch Tensor instead of a {}".format(type(X)) + if y is not None: + assert isinstance( + y, torch.Tensor + ), "y needs to be a torch Tensor instead of a {}".format(type(y)) + assert isinstance( + Xu, torch.Tensor + ), "Xu needs to be a torch Tensor instead of a {}".format(type(Xu)) + + super().__init__(X, y, kernel, mean_function, jitter) + + self.likelihood = likelihood + self.Xu = Parameter(Xu) + + y_batch_shape = self.y.shape[:-1] if self.y is not None else torch.Size([]) + self.latent_shape = latent_shape if latent_shape is not None else y_batch_shape + + M = self.Xu.size(0) + u_loc = self.Xu.new_zeros(self.latent_shape + (M,)) + self.u_loc = Parameter(u_loc) + + identity = eye_like(self.Xu, M) + u_scale_tril = identity.repeat(self.latent_shape + (1, 1)) + self.u_scale_tril = PyroParam(u_scale_tril, constraints.lower_cholesky) + + self.num_data = num_data if num_data is not None else self.X.size(0) + self.whiten = whiten + self._sample_latent = True + + @pyro_method + def model(self): + self.set_mode("model") + + M = self.Xu.size(0) + Kuu = self.kernel(self.Xu).contiguous() + Kuu.view(-1)[:: M + 1] += self.jitter # add jitter to the diagonal + Luu = torch.linalg.cholesky(Kuu) + + zero_loc = self.Xu.new_zeros(self.u_loc.shape) + if self.whiten: + identity = eye_like(self.Xu, M) + pyro.sample( + self._pyro_get_fullname("u"), + dist.MultivariateNormal(zero_loc, scale_tril=identity).to_event( + zero_loc.dim() - 1 + ), + ) + else: + pyro.sample( + self._pyro_get_fullname("u"), + dist.MultivariateNormal(zero_loc, scale_tril=Luu).to_event( + zero_loc.dim() - 1 + ), + ) + + f_loc, f_var = conditional( + self.X, + self.Xu, + self.kernel, + self.u_loc, + self.u_scale_tril, + Luu, + full_cov=False, + whiten=self.whiten, + jitter=self.jitter, + ) + + f_loc = f_loc + self.mean_function(self.X) + if self.y is None: + return f_loc, f_var + else: + # we would like to load likelihood's parameters outside poutine.scale context + self.likelihood._load_pyro_samples() + with poutine.scale(scale=self.num_data / self.X.size(0)): + return self.likelihood(f_loc, f_var, self.y) + + @pyro_method + def guide(self): + self.set_mode("guide") + self._load_pyro_samples() + + pyro.sample( + self._pyro_get_fullname("u"), + dist.MultivariateNormal(self.u_loc, scale_tril=self.u_scale_tril).to_event( + self.u_loc.dim() - 1 + ), + ) + + def forward(self, Xnew, full_cov=False): + r""" + Computes the mean and covariance matrix (or variance) of Gaussian Process + posterior on a test input data :math:`X_{new}`: + + .. math:: p(f^* \mid X_{new}, X, y, k, X_u, u_{loc}, u_{scale\_tril}) + = \mathcal{N}(loc, cov). + + .. note:: Variational parameters ``u_loc``, ``u_scale_tril``, the + inducing-point parameter ``Xu``, together with kernel's parameters have + been learned from a training procedure (MCMC or SVI). + + :param torch.Tensor Xnew: A input data for testing. Note that + ``Xnew.shape[1:]`` must be the same as ``self.X.shape[1:]``. + :param bool full_cov: A flag to decide if we want to predict full covariance + matrix or just variance. + :returns: loc and covariance matrix (or variance) of :math:`p(f^*(X_{new}))` + :rtype: tuple(torch.Tensor, torch.Tensor) + """ + self._check_Xnew_shape(Xnew) + self.set_mode("guide") + + loc, cov = conditional( + Xnew, + self.Xu, + self.kernel, + self.u_loc, + self.u_scale_tril, + full_cov=full_cov, + whiten=self.whiten, + jitter=self.jitter, + ) + return loc + self.mean_function(Xnew), cov diff --git a/pyro/source/pyro/contrib/gp/parameterized.py b/pyro/source/pyro/contrib/gp/parameterized.py new file mode 100644 index 0000000000000000000000000000000000000000..c4f28176e8a19e242b09f22192f7c55c4fc582d9 --- /dev/null +++ b/pyro/source/pyro/contrib/gp/parameterized.py @@ -0,0 +1,212 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import warnings +from collections import OrderedDict +from functools import partial + +from torch.distributions import biject_to, constraints +from torch.nn import Parameter + +import pyro +import pyro.distributions as dist +from pyro.distributions.util import eye_like +from pyro.nn.module import PyroModule, PyroParam, PyroSample, pyro_method + + +def _is_real_support(support): + if isinstance(support, pyro.distributions.constraints.independent): + return _is_real_support(support.base_constraint) + else: + return support in [constraints.real, constraints.real_vector] + + +def _get_sample_fn(module, name): + if module.mode == "model": + return module._priors[name] + + dist_constructor, dist_args = module._guides[name] + + if dist_constructor is dist.Delta: + p_map = getattr(module, "{}_map".format(name)) + return dist.Delta(p_map, event_dim=p_map.dim()) + + # create guide + dist_args = {arg: getattr(module, "{}_{}".format(name, arg)) for arg in dist_args} + guide = dist_constructor(**dist_args) + + # no need to do transforms when support is real (for mean field ELBO) + support = module._priors[name].support + if _is_real_support(support): + return guide.to_event() + + # otherwise, we do inference in unconstrained space and transform the value + # back to original space + # TODO: move this logic to infer.autoguide or somewhere else + unconstrained_value = pyro.sample( + module._pyro_get_fullname("{}_latent".format(name)), + guide.to_event(), + infer={"is_auxiliary": True}, + ) + transform = biject_to(support) + value = transform(unconstrained_value) + log_density = transform.inv.log_abs_det_jacobian(value, unconstrained_value) + return dist.Delta(value, log_density.sum(), event_dim=value.dim()) + + +class Parameterized(PyroModule): + """ + A wrapper of :class:`~pyro.nn.module.PyroModule` whose parameters can be set + constraints, set priors. + + By default, when we set a prior to a parameter, an auto Delta guide will be + created. We can use the method :meth:`autoguide` to setup other auto guides. + + Example:: + + >>> class Linear(Parameterized): + ... def __init__(self, a, b): + ... super().__init__() + ... self.a = Parameter(a) + ... self.b = Parameter(b) + ... + ... def forward(self, x): + ... return self.a * x + self.b + ... + >>> linear = Linear(torch.tensor(1.), torch.tensor(0.)) + >>> linear.a = PyroParam(torch.tensor(1.), constraints.positive) + >>> linear.b = PyroSample(dist.Normal(0, 1)) + >>> linear.autoguide("b", dist.Normal) + >>> assert "a_unconstrained" in dict(linear.named_parameters()) + >>> assert "b_loc" in dict(linear.named_parameters()) + >>> assert "b_scale_unconstrained" in dict(linear.named_parameters()) + + Note that by default, data of a parameter is a float :class:`torch.Tensor` + (unless we use :func:`torch.set_default_dtype` to change default + tensor type). To cast these parameters to a correct data type or GPU device, + we can call methods such as :meth:`~torch.nn.Module.double` or + :meth:`~torch.nn.Module.cuda`. See :class:`torch.nn.Module` for more + information. + """ + + def __init__(self): + super().__init__() + self._priors = OrderedDict() + self._guides = OrderedDict() + self._mode = "model" + + def set_prior(self, name, prior): + """ + Sets prior for a parameter. + + :param str name: Name of the parameter. + :param ~pyro.distributions.distribution.Distribution prior: A Pyro prior + distribution. + """ + warnings.warn( + "The method `self.set_prior({}, prior)` has been deprecated" + " in favor of `self.{} = PyroSample(prior)`.".format(name, name), + UserWarning, + ) + setattr(self, name, PyroSample(prior)) + + def __setattr__(self, name, value): + if isinstance(value, PyroSample): + prior = value.prior + if hasattr(prior, "sample"): + self._priors[name] = prior + self.autoguide(name, dist.Delta) + value = PyroSample(partial(_get_sample_fn, name=name)) + super().__setattr__(name, value) + + def autoguide(self, name, dist_constructor): + """ + Sets an autoguide for an existing parameter with name ``name`` (mimic + the behavior of module :mod:`pyro.infer.autoguide`). + + .. note:: `dist_constructor` should be one of + :class:`~pyro.distributions.Delta`, + :class:`~pyro.distributions.Normal`, and + :class:`~pyro.distributions.MultivariateNormal`. More distribution + constructor will be supported in the future if needed. + + :param str name: Name of the parameter. + :param dist_constructor: A + :class:`~pyro.distributions.distribution.Distribution` constructor. + """ + if name not in self._priors: + raise ValueError("There is no prior for parameter: {}".format(name)) + + if dist_constructor not in [dist.Delta, dist.Normal, dist.MultivariateNormal]: + raise NotImplementedError( + "Unsupported distribution type: {}".format(dist_constructor) + ) + + # delete old guide + if name in self._guides: + dist_args = self._guides[name][1] + for arg in dist_args: + delattr(self, "{}_{}".format(name, arg)) + + p = self._priors[name]() # init_to_sample strategy + if dist_constructor is dist.Delta: + support = self._priors[name].support + if _is_real_support(support): + p_map = Parameter(p.detach()) + else: + p_map = PyroParam(p.detach(), support) + setattr(self, "{}_map".format(name), p_map) + dist_args = ("map",) + elif dist_constructor is dist.Normal: + loc = Parameter(biject_to(self._priors[name].support).inv(p).detach()) + scale = PyroParam(loc.new_ones(loc.shape), constraints.positive) + setattr(self, "{}_loc".format(name), loc) + setattr(self, "{}_scale".format(name), scale) + dist_args = ("loc", "scale") + elif dist_constructor is dist.MultivariateNormal: + loc = Parameter(biject_to(self._priors[name].support).inv(p).detach()) + identity = eye_like(loc, loc.size(-1)) + scale_tril = PyroParam( + identity.repeat(loc.shape[:-1] + (1, 1)), constraints.lower_cholesky + ) + setattr(self, "{}_loc".format(name), loc) + setattr(self, "{}_scale_tril".format(name), scale_tril) + dist_args = ("loc", "scale_tril") + else: + raise NotImplementedError + + self._guides[name] = (dist_constructor, dist_args) + + @pyro_method + def _load_pyro_samples(self): + """ + Runs `pyro.sample` primitives for all `PyroSample` attributes. + """ + for module in self.modules(): + if "_pyro_samples" in module.__dict__: + for name in module._pyro_samples: + getattr(module, name) + + def set_mode(self, mode): + """ + Sets ``mode`` of this object to be able to use its parameters in + stochastic functions. If ``mode="model"``, a parameter will get its + value from its prior. If ``mode="guide"``, the value will be drawn from + its guide. + + .. note:: This method automatically sets ``mode`` for submodules which + belong to :class:`Parameterized` class. + + :param str mode: Either "model" or "guide". + """ + for module in self.modules(): + if isinstance(module, Parameterized): + module.mode = mode + + @property + def mode(self): + return self._mode + + @mode.setter + def mode(self, mode): + self._mode = mode diff --git a/pyro/source/pyro/contrib/gp/util.py b/pyro/source/pyro/contrib/gp/util.py new file mode 100644 index 0000000000000000000000000000000000000000..582cd28f43909a696fa7be6a83155afb8800eb03 --- /dev/null +++ b/pyro/source/pyro/contrib/gp/util.py @@ -0,0 +1,194 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +from pyro.infer import TraceMeanField_ELBO +from pyro.infer.util import torch_backward, torch_item + + +def conditional( + Xnew, + X, + kernel, + f_loc, + f_scale_tril=None, + Lff=None, + full_cov=False, + whiten=False, + jitter=1e-6, +): + r""" + Given :math:`X_{new}`, predicts loc and covariance matrix of the conditional + multivariate normal distribution + + .. math:: p(f^*(X_{new}) \mid X, k, f_{loc}, f_{scale\_tril}). + + Here ``f_loc`` and ``f_scale_tril`` are variation parameters of the variational + distribution + + .. math:: q(f \mid f_{loc}, f_{scale\_tril}) \sim p(f | X, y), + + where :math:`f` is the function value of the Gaussian Process given input :math:`X` + + .. math:: p(f(X)) \sim \mathcal{N}(0, k(X, X)) + + and :math:`y` is computed from :math:`f` by some likelihood function + :math:`p(y|f)`. + + In case ``f_scale_tril=None``, we consider :math:`f = f_{loc}` and computes + + .. math:: p(f^*(X_{new}) \mid X, k, f). + + In case ``f_scale_tril`` is not ``None``, we follow the derivation from reference + [1]. For the case ``f_scale_tril=None``, we follow the popular reference [2]. + + References: + + [1] `Sparse GPs: approximate the posterior, not the model + `_ + + [2] `Gaussian Processes for Machine Learning`, + Carl E. Rasmussen, Christopher K. I. Williams + + :param torch.Tensor Xnew: A new input data. + :param torch.Tensor X: An input data to be conditioned on. + :param ~pyro.contrib.gp.kernels.kernel.Kernel kernel: A Pyro kernel object. + :param torch.Tensor f_loc: Mean of :math:`q(f)`. In case ``f_scale_tril=None``, + :math:`f_{loc} = f`. + :param torch.Tensor f_scale_tril: Lower triangular decomposition of covariance + matrix of :math:`q(f)`'s . + :param torch.Tensor Lff: Lower triangular decomposition of :math:`kernel(X, X)` + (optional). + :param bool full_cov: A flag to decide if we want to return full covariance + matrix or just variance. + :param bool whiten: A flag to tell if ``f_loc`` and ``f_scale_tril`` are + already transformed by the inverse of ``Lff``. + :param float jitter: A small positive term which is added into the diagonal part of + a covariance matrix to help stablize its Cholesky decomposition. + :returns: loc and covariance matrix (or variance) of :math:`p(f^*(X_{new}))` + :rtype: tuple(torch.Tensor, torch.Tensor) + """ + # p(f* | Xnew, X, kernel, f_loc, f_scale_tril) ~ N(f* | loc, cov) + # Kff = Lff @ Lff.T + # v = inv(Lff) @ f_loc <- whitened f_loc + # S = inv(Lff) @ f_scale_tril <- whitened f_scale_tril + # Denote: + # W = (inv(Lff) @ Kf*).T + # K = W @ S @ S.T @ W.T + # Q** = K*f @ inv(Kff) @ Kf* = W @ W.T + # loc = K*f @ inv(Kff) @ f_loc = W @ v + # Case 1: f_scale_tril = None + # cov = K** - K*f @ inv(Kff) @ Kf* = K** - Q** + # Case 2: f_scale_tril != None + # cov = K** - Q** + K*f @ inv(Kff) @ f_cov @ inv(Kff) @ Kf* + # = K** - Q** + W @ S @ S.T @ W.T + # = K** - Q** + K + + N = X.size(0) + M = Xnew.size(0) + latent_shape = f_loc.shape[:-1] + + if Lff is None: + Kff = kernel(X).contiguous() + Kff.view(-1)[:: N + 1] += jitter # add jitter to diagonal + Lff = torch.linalg.cholesky(Kff) + Kfs = kernel(X, Xnew) + + # convert f_loc_shape from latent_shape x N to N x latent_shape + f_loc = f_loc.permute(-1, *range(len(latent_shape))) + # convert f_loc to 2D tensor for packing + f_loc_2D = f_loc.reshape(N, -1) + if f_scale_tril is not None: + # convert f_scale_tril_shape from latent_shape x N x N to N x N x latent_shape + f_scale_tril = f_scale_tril.permute(-2, -1, *range(len(latent_shape))) + # convert f_scale_tril to 2D tensor for packing + f_scale_tril_2D = f_scale_tril.reshape(N, -1) + + if whiten: + v_2D = f_loc_2D + W = torch.linalg.solve_triangular(Lff, Kfs, upper=False).t() + if f_scale_tril is not None: + S_2D = f_scale_tril_2D + else: + pack = torch.cat((f_loc_2D, Kfs), dim=1) + if f_scale_tril is not None: + pack = torch.cat((pack, f_scale_tril_2D), dim=1) + + Lffinv_pack = torch.linalg.solve_triangular(Lff, pack, upper=False) + # unpack + v_2D = Lffinv_pack[:, : f_loc_2D.size(1)] + W = Lffinv_pack[:, f_loc_2D.size(1) : f_loc_2D.size(1) + M].t() + if f_scale_tril is not None: + S_2D = Lffinv_pack[:, -f_scale_tril_2D.size(1) :] + + loc_shape = latent_shape + (M,) + loc = W.matmul(v_2D).t().reshape(loc_shape) + + if full_cov: + Kss = kernel(Xnew) + Qss = W.matmul(W.t()) + cov = Kss - Qss + else: + Kssdiag = kernel(Xnew, diag=True) + Qssdiag = W.pow(2).sum(dim=-1) + # Theoretically, Kss - Qss is non-negative; but due to numerical + # computation, that might not be the case in practice. + var = (Kssdiag - Qssdiag).clamp(min=0) + + if f_scale_tril is not None: + W_S_shape = (Xnew.size(0),) + f_scale_tril.shape[1:] + W_S = W.matmul(S_2D).reshape(W_S_shape) + # convert W_S_shape from M x N x latent_shape to latent_shape x M x N + W_S = W_S.permute(list(range(2, W_S.dim())) + [0, 1]) + + if full_cov: + St_Wt = W_S.transpose(-2, -1) + K = W_S.matmul(St_Wt) + cov = cov + K + else: + Kdiag = W_S.pow(2).sum(dim=-1) + var = var + Kdiag + else: + if full_cov: + cov = cov.expand(latent_shape + (M, M)) + else: + var = var.expand(latent_shape + (M,)) + + return (loc, cov) if full_cov else (loc, var) + + +def train(gpmodule, optimizer=None, loss_fn=None, retain_graph=None, num_steps=1000): + """ + A helper to optimize parameters for a GP module. + + :param ~pyro.contrib.gp.models.GPModel gpmodule: A GP module. + :param ~torch.optim.Optimizer optimizer: A PyTorch optimizer instance. + By default, we use Adam with ``lr=0.01``. + :param callable loss_fn: A loss function which takes inputs are + ``gpmodule.model``, ``gpmodule.guide``, and returns ELBO loss. + By default, ``loss_fn=TraceMeanField_ELBO().differentiable_loss``. + :param bool retain_graph: An optional flag of ``torch.autograd.backward``. + :param int num_steps: Number of steps to run SVI. + :returns: a list of losses during the training procedure + :rtype: list + """ + optimizer = ( + torch.optim.Adam(gpmodule.parameters(), lr=0.01) + if optimizer is None + else optimizer + ) + # TODO: add support for JIT loss + loss_fn = TraceMeanField_ELBO().differentiable_loss if loss_fn is None else loss_fn + + def closure(): + optimizer.zero_grad() + loss = loss_fn(gpmodule.model, gpmodule.guide) + torch_backward(loss, retain_graph) + return loss + + losses = [] + for i in range(num_steps): + loss = optimizer.step(closure) + losses.append(torch_item(loss)) + return losses diff --git a/pyro/source/pyro/contrib/minipyro.py b/pyro/source/pyro/contrib/minipyro.py new file mode 100644 index 0000000000000000000000000000000000000000..03e52bd8de8ea5c12516175583d4b74cd36b3bbc --- /dev/null +++ b/pyro/source/pyro/contrib/minipyro.py @@ -0,0 +1,405 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +Mini Pyro +--------- + +This file contains a minimal implementation of the Pyro Probabilistic +Programming Language. The API (method signatures, etc.) match that of +the full implementation as closely as possible. This file is independent +of the rest of Pyro, with the exception of the :mod:`pyro.distributions` +module. + +An accompanying example that makes use of this implementation can be +found at examples/minipyro.py. +""" +import random +import warnings +import weakref +from collections import OrderedDict + +import numpy as np +import torch + +from pyro.distributions import validation_enabled + +# Pyro keeps track of two kinds of global state: +# i) The effect handler stack, which enables non-standard interpretations of +# Pyro primitives like sample(); +# See http://docs.pyro.ai/en/stable/poutine.html +# ii) Trainable parameters in the Pyro ParamStore; +# See http://docs.pyro.ai/en/stable/parameters.html + +PYRO_STACK = [] +PARAM_STORE = {} # maps name -> (unconstrained_value, constraint) + + +def get_param_store(): + return PARAM_STORE + + +# The base effect handler class (called Messenger here for consistency with Pyro). +class Messenger: + def __init__(self, fn=None): + self.fn = fn + + # Effect handlers push themselves onto the PYRO_STACK. + # Handlers later in the PYRO_STACK are applied first. + def __enter__(self): + PYRO_STACK.append(self) + + def __exit__(self, *args, **kwargs): + assert PYRO_STACK[-1] is self + PYRO_STACK.pop() + + def process_message(self, msg): + pass + + def postprocess_message(self, msg): + pass + + def __call__(self, *args, **kwargs): + with self: + return self.fn(*args, **kwargs) + + +# A first useful example of an effect handler. +# trace records the inputs and outputs of any primitive site it encloses, +# and returns a dictionary containing that data to the user. +class trace(Messenger): + def __enter__(self): + super().__enter__() + self.trace = OrderedDict() + return self.trace + + # trace illustrates why we need postprocess_message in addition to process_message: + # We only want to record a value after all other effects have been applied + def postprocess_message(self, msg): + assert ( + msg["type"] != "sample" or msg["name"] not in self.trace + ), "sample sites must have unique names" + self.trace[msg["name"]] = msg.copy() + + def get_trace(self, *args, **kwargs): + self(*args, **kwargs) + return self.trace + + +# A second example of an effect handler for setting the value at a sample site. +# This illustrates why effect handlers are a useful PPL implementation technique: +# We can compose trace and replay to replace values but preserve distributions, +# allowing us to compute the joint probability density of samples under a model. +# See the definition of elbo(...) below for an example of this pattern. +class replay(Messenger): + def __init__(self, fn, guide_trace): + self.guide_trace = guide_trace + super().__init__(fn) + + def process_message(self, msg): + if msg["name"] in self.guide_trace: + msg["value"] = self.guide_trace[msg["name"]]["value"] + + +# block allows the selective application of effect handlers to different parts of a model. +# Sites hidden by block will only have the handlers below block on the PYRO_STACK applied, +# allowing inference or other effectful computations to be nested inside models. +class block(Messenger): + def __init__(self, fn=None, hide_fn=lambda msg: True): + self.hide_fn = hide_fn + super().__init__(fn) + + def process_message(self, msg): + if self.hide_fn(msg): + msg["stop"] = True + + +# seed is used to fix the RNG state when calling a model. +class seed(Messenger): + def __init__(self, fn=None, rng_seed=None): + self.rng_seed = rng_seed + super().__init__(fn) + + def __enter__(self): + self.old_state = { + "torch": torch.get_rng_state(), + "random": random.getstate(), + "numpy": np.random.get_state(), + } + torch.manual_seed(self.rng_seed) + random.seed(self.rng_seed) + np.random.seed(self.rng_seed) + + def __exit__(self, type, value, traceback): + torch.set_rng_state(self.old_state["torch"]) + random.setstate(self.old_state["random"]) + if "numpy" in self.old_state: + import numpy as np + + np.random.set_state(self.old_state["numpy"]) + + +# This limited implementation of PlateMessenger only implements broadcasting. +class PlateMessenger(Messenger): + def __init__(self, fn, size, dim): + assert dim < 0 + self.size = size + self.dim = dim + super().__init__(fn) + + def process_message(self, msg): + if msg["type"] == "sample": + batch_shape = msg["fn"].batch_shape + if len(batch_shape) < -self.dim or batch_shape[self.dim] != self.size: + batch_shape = [1] * (-self.dim - len(batch_shape)) + list(batch_shape) + batch_shape[self.dim] = self.size + msg["fn"] = msg["fn"].expand(torch.Size(batch_shape)) + + def __iter__(self): + return range(self.size) + + +# apply_stack is called by pyro.sample and pyro.param. +# It is responsible for applying each Messenger to each effectful operation. +def apply_stack(msg): + # PYRO_STACK is reversed so that effect handlers higher + # in the stack are first applied. + for pointer, handler in enumerate(reversed(PYRO_STACK)): + handler.process_message(msg) + # When a Messenger sets the "stop" field of a message, + # it prevents any Messengers below it on the stack from being applied. + if msg.get("stop"): + break + if msg["value"] is None: + msg["value"] = msg["fn"](*msg["args"]) + + # A Messenger that sets msg["stop"] == True also prevents application + # of postprocess_message by Messengers below it on the stack + # via the pointer variable from the process_message loop + for handler in PYRO_STACK[-pointer - 1 :]: + handler.postprocess_message(msg) + return msg + + +# sample is an effectful version of Distribution.sample(...) +# When any effect handlers are active, it constructs an initial message and calls apply_stack. +def sample(name, fn, *args, **kwargs): + obs = kwargs.pop("obs", None) + + # if there are no active Messengers, we just draw a sample and return it as expected: + if not PYRO_STACK: + return fn(*args, **kwargs) + + # Otherwise, we initialize a message... + initial_msg = { + "type": "sample", + "name": name, + "fn": fn, + "args": args, + "kwargs": kwargs, + "value": obs, + } + + # ...and use apply_stack to send it to the Messengers + msg = apply_stack(initial_msg) + return msg["value"] + + +# param is an effectful version of PARAM_STORE.setdefault that also handles constraints. +# When any effect handlers are active, it constructs an initial message and calls apply_stack. +def param( + name, + init_value=None, + constraint=torch.distributions.constraints.real, + event_dim=None, +): + if event_dim is not None: + raise NotImplementedError("minipyro.plate does not support the event_dim arg") + + def fn(init_value, constraint): + if name in PARAM_STORE: + unconstrained_value, constraint = PARAM_STORE[name] + else: + # Initialize with a constrained value. + assert init_value is not None + with torch.no_grad(): + constrained_value = init_value.detach() + unconstrained_value = torch.distributions.transform_to(constraint).inv( + constrained_value + ) + unconstrained_value.requires_grad_() + PARAM_STORE[name] = unconstrained_value, constraint + + # Transform from unconstrained space to constrained space. + constrained_value = torch.distributions.transform_to(constraint)( + unconstrained_value + ) + constrained_value.unconstrained = weakref.ref(unconstrained_value) + return constrained_value + + # if there are no active Messengers, we just draw a sample and return it as expected: + if not PYRO_STACK: + return fn(init_value, constraint) + + # Otherwise, we initialize a message... + initial_msg = { + "type": "param", + "name": name, + "fn": fn, + "args": (init_value, constraint), + "value": None, + } + + # ...and use apply_stack to send it to the Messengers + msg = apply_stack(initial_msg) + return msg["value"] + + +# boilerplate to match the syntax of actual pyro.plate: +def plate(name, size, dim=None): + if dim is None: + raise NotImplementedError("minipyro.plate requires a dim arg") + return PlateMessenger(fn=None, size=size, dim=dim) + + +# This is a thin wrapper around the `torch.optim.Adam` class that +# dynamically generates optimizers for dynamically generated parameters. +# See http://docs.pyro.ai/en/stable/optimization.html +class Adam: + def __init__(self, optim_args): + self.optim_args = optim_args + # Each parameter will get its own optimizer, which we keep track + # of using this dictionary keyed on parameters. + self.optim_objs = {} + + def __call__(self, params): + for param in params: + # If we've seen this parameter before, use the previously + # constructed optimizer. + if param in self.optim_objs: + optim = self.optim_objs[param] + # If we've never seen this parameter before, construct + # an Adam optimizer and keep track of it. + else: + optim = torch.optim.Adam([param], **self.optim_args) + self.optim_objs[param] = optim + # Take a gradient step for the parameter param. + optim.step() + + +# This is a unified interface for stochastic variational inference in Pyro. +# The actual construction of the loss is taken care of by `loss`. +# See http://docs.pyro.ai/en/stable/inference_algos.html +class SVI: + def __init__(self, model, guide, optim, loss): + self.model = model + self.guide = guide + self.optim = optim + self.loss = loss + + # This method handles running the model and guide, constructing the loss + # function, and taking a gradient step. + def step(self, *args, **kwargs): + # This wraps both the call to `model` and `guide` in a `trace` so that + # we can record all the parameters that are encountered. Note that + # further tracing occurs inside of `loss`. + with trace() as param_capture: + # We use block here to allow tracing to record parameters only. + with block(hide_fn=lambda msg: msg["type"] == "sample"): + loss = self.loss(self.model, self.guide, *args, **kwargs) + # Differentiate the loss. + loss.backward() + # Grab all the parameters from the trace. + params = [site["value"].unconstrained() for site in param_capture.values()] + # Take a step w.r.t. each parameter in params. + self.optim(params) + # Zero out the gradients so that they don't accumulate. + for p in params: + p.grad = torch.zeros_like(p) + return loss.item() + + +# This is a basic implementation of the Evidence Lower Bound, which is the +# fundamental objective in Variational Inference. +# See http://pyro.ai/examples/svi_part_i.html for details. +# This implementation has various limitations (for example it only supports +# random variables with reparameterized samplers), but all the ELBO +# implementations in Pyro share the same basic logic. +def elbo(model, guide, *args, **kwargs): + # Run the guide with the arguments passed to SVI.step() and trace the execution, + # i.e. record all the calls to Pyro primitives like sample() and param(). + guide_trace = trace(guide).get_trace(*args, **kwargs) + # Now run the model with the same arguments and trace the execution. Because + # model is being run with replay, whenever we encounter a sample site in the + # model, instead of sampling from the corresponding distribution in the model, + # we instead reuse the corresponding sample from the guide. In probabilistic + # terms, this means our loss is constructed as an expectation w.r.t. the joint + # distribution defined by the guide. + model_trace = trace(replay(model, guide_trace)).get_trace(*args, **kwargs) + # We will accumulate the various terms of the ELBO in `elbo`. + elbo = 0.0 + # Loop over all the sample sites in the model and add the corresponding + # log p(z) term to the ELBO. Note that this will also include any observed + # data, i.e. sample sites with the keyword `obs=...`. + for site in model_trace.values(): + if site["type"] == "sample": + elbo = elbo + site["fn"].log_prob(site["value"]).sum() + # Loop over all the sample sites in the guide and add the corresponding + # -log q(z) term to the ELBO. + for site in guide_trace.values(): + if site["type"] == "sample": + elbo = elbo - site["fn"].log_prob(site["value"]).sum() + # Return (-elbo) since by convention we do gradient descent on a loss and + # the ELBO is a lower bound that needs to be maximized. + return -elbo + + +# This is a wrapper for compatibility with full Pyro. +def Trace_ELBO(**kwargs): + return elbo + + +# This is a Jit wrapper around elbo() that (1) delays tracing until the first +# invocation, and (2) registers pyro.param() statements with torch.jit.trace. +# This version does not support variable number of args or non-tensor kwargs. +class JitTrace_ELBO: + def __init__(self, **kwargs): + self.ignore_jit_warnings = kwargs.pop("ignore_jit_warnings", False) + self._compiled = None + self._param_trace = None + + def __call__(self, model, guide, *args): + # On first call, initialize params and save their names. + if self._param_trace is None: + with block(), trace() as tr, block(hide_fn=lambda m: m["type"] != "param"): + elbo(model, guide, *args) + self._param_trace = tr + + # Augment args with reads from the global param store. + unconstrained_params = tuple( + param(name).unconstrained() for name in self._param_trace + ) + params_and_args = unconstrained_params + args + + # On first call, create a compiled elbo. + if self._compiled is None: + + def compiled(*params_and_args): + unconstrained_params = params_and_args[: len(self._param_trace)] + args = params_and_args[len(self._param_trace) :] + for name, unconstrained_param in zip( + self._param_trace, unconstrained_params + ): + constrained_param = param(name) # assume param has been initialized + assert constrained_param.unconstrained() is unconstrained_param + self._param_trace[name]["value"] = constrained_param + return replay(elbo, guide_trace=self._param_trace)(model, guide, *args) + + with validation_enabled(False), warnings.catch_warnings(): + if self.ignore_jit_warnings: + warnings.filterwarnings("ignore", category=torch.jit.TracerWarning) + self._compiled = torch.jit.trace( + compiled, params_and_args, check_trace=False + ) + + return self._compiled(*params_and_args) diff --git a/pyro/source/pyro/contrib/mue/__init__.py b/pyro/source/pyro/contrib/mue/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/pyro/contrib/mue/dataloaders.py b/pyro/source/pyro/contrib/mue/dataloaders.py new file mode 100644 index 0000000000000000000000000000000000000000..d041b325bb3a7015c5f91360ca1df272981e6987 --- /dev/null +++ b/pyro/source/pyro/contrib/mue/dataloaders.py @@ -0,0 +1,197 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import numpy as np +import torch +from torch.utils.data import Dataset + +alphabets = { + "amino-acid": np.array( + [ + "R", + "H", + "K", + "D", + "E", + "S", + "T", + "N", + "Q", + "C", + "G", + "P", + "A", + "V", + "I", + "L", + "M", + "F", + "Y", + "W", + ] + ), + "dna": np.array(["A", "C", "G", "T"]), +} + + +class BiosequenceDataset(Dataset): + """ + Load biological sequence data, either from a fasta file or a python list. + + :param source: Either the input fasta file path (str) or the input list + of sequences (list of str). + :param str source_type: Type of input, either 'list' or 'fasta'. + :param str alphabet: Alphabet to use. Alphabets 'amino-acid' and 'dna' are + preset; any other input will be interpreted as the alphabet itself, + i.e. you can use 'ACGU' for RNA. + :param int max_length: Total length of the one-hot representation of the + sequences, including zero padding. Defaults to the maximum sequence + length in the dataset. + :param bool include_stop: Append stop symbol to the end of each sequence + and add the stop symbol to the alphabet. + :param torch.device device: Device on which data should be stored in + memory. + """ + + def __init__( + self, + source, + source_type="list", + alphabet="amino-acid", + max_length=None, + include_stop=False, + device=None, + ): + super().__init__() + + # Determine device + if device is None: + device = torch.tensor(0.0).device + self.device = device + + # Get sequences. + self.include_stop = include_stop + if source_type == "list": + seqs = [seq + include_stop * "*" for seq in source] + elif source_type == "fasta": + seqs = self._load_fasta(source) + + # Get lengths. + self.L_data = torch.tensor([float(len(seq)) for seq in seqs], device=device) + if max_length is None: + self.max_length = int(torch.max(self.L_data)) + else: + self.max_length = max_length + self.data_size = len(self.L_data) + + # Get alphabet. + if alphabet in alphabets: + alphabet = alphabets[alphabet] + else: + alphabet = np.array(list(alphabet)) + if self.include_stop: + alphabet = np.array(list(alphabet) + ["*"]) + self.alphabet = alphabet + self.alphabet_length = len(alphabet) + + # Build dataset. + self.seq_data = torch.cat( + [self._one_hot(seq, alphabet, self.max_length).unsqueeze(0) for seq in seqs] + ) + + def _load_fasta(self, source): + """A basic multiline fasta parser.""" + seqs = [] + seq = "" + with open(source, "r") as fr: + for line in fr: + if line[0] == ">": + if seq != "": + if self.include_stop: + seq += "*" + seqs.append(seq) + seq = "" + else: + seq += line.strip("\n") + if seq != "": + if self.include_stop: + seq += "*" + seqs.append(seq) + return seqs + + def _one_hot(self, seq, alphabet, length): + """One hot encode and pad with zeros to max length.""" + # One hot encode. + oh = torch.tensor( + (np.array(list(seq))[:, None] == alphabet[None, :]).astype(np.float64), + device=self.device, + ) + # Pad. + x = torch.cat( + [oh, torch.zeros([length - len(seq), len(alphabet)], device=self.device)] + ) + + return x + + def __len__(self): + return self.data_size + + def __getitem__(self, ind): + return (self.seq_data[ind], self.L_data[ind]) + + +def write(x, alphabet, file, truncate_stop=False, append=False, scores=None): + """ + Write sequence samples to file. + + :param ~torch.Tensor x: One-hot encoded sequences, with size + ``(data_size, seq_length, alphabet_length)``. May be padded with + zeros for variable length sequences. + :param ~np.array alphabet: Alphabet. + :param str file: Output file, where sequences will be written + in fasta format. + :param bool truncate_stop: If True, sequences will be truncated at the + first stop symbol (i.e. the stop symbol and everything after will not + be written). If False, the whole sequence will be written, including + any internal stop symbols. + :param bool append: If True, sequences are appended to the end of the + output file. If False, the file is first erased. + """ + print_alphabet = np.array(list(alphabet) + [""]) + x = torch.cat([x, torch.zeros(list(x.shape[:2]) + [1])], -1) + if truncate_stop: + mask = ( + torch.cumsum( + torch.matmul( + x, torch.tensor(print_alphabet == "*", dtype=torch.double) + ), + -1, + ) + > 0 + ).to(torch.double) + x = x * (1 - mask).unsqueeze(-1) + x[:, :, -1] = mask + else: + x[:, :, -1] = (torch.sum(x, -1) < 0.5).to(torch.double) + index = ( + torch.matmul(x, torch.arange(x.shape[-1], dtype=torch.double)) + .to(torch.long) + .cpu() + .numpy() + ) + if scores is None: + seqs = [ + ">{}\n".format(j) + "".join(elem) + "\n" + for j, elem in enumerate(print_alphabet[index]) + ] + else: + seqs = [ + ">{}\n".format(j) + "".join(elem) + "\n" + for j, elem in zip(scores, print_alphabet[index]) + ] + if append: + open_flag = "a" + else: + open_flag = "w" + with open(file, open_flag) as fw: + fw.write("".join(seqs)) diff --git a/pyro/source/pyro/contrib/mue/missingdatahmm.py b/pyro/source/pyro/contrib/mue/missingdatahmm.py new file mode 100644 index 0000000000000000000000000000000000000000..6c04d47f9e65eb42e890b0c1b0893bd74ddfc5f0 --- /dev/null +++ b/pyro/source/pyro/contrib/mue/missingdatahmm.py @@ -0,0 +1,317 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions import Categorical, OneHotCategorical + +from pyro.distributions import constraints +from pyro.distributions.hmm import _sequential_logmatmulexp +from pyro.distributions.torch_distribution import TorchDistribution +from pyro.distributions.util import broadcast_shape + + +class MissingDataDiscreteHMM(TorchDistribution): + """ + HMM with discrete latent states and discrete observations, allowing for + missing data or variable length sequences. Observations are assumed + to be one hot encoded; rows with all zeros indicate missing data. + + .. warning:: Unlike in pyro's pyro.distributions.DiscreteHMM, which + computes the probability of the first state as + initial.T @ transition @ emission + this distribution uses the standard HMM convention, + initial.T @ emission + + :param ~torch.Tensor initial_logits: A logits tensor for an initial + categorical distribution over latent states. Should have rightmost + size ``state_dim`` and be broadcastable to + ``(batch_size, state_dim)``. + :param ~torch.Tensor transition_logits: A logits tensor for transition + conditional distributions between latent states. Should have rightmost + shape ``(state_dim, state_dim)`` (old, new), and be broadcastable + to ``(batch_size, state_dim, state_dim)``. + :param ~torch.Tensor observation_logits: A logits tensor for observation + distributions from latent states. Should have rightmost shape + ``(state_dim, categorical_size)``, where ``categorical_size`` is the + dimension of the categorical output, and be broadcastable + to ``(batch_size, state_dim, categorical_size)``. + """ + + arg_constraints = { + "initial_logits": constraints.real_vector, + "transition_logits": constraints.independent(constraints.real, 2), + "observation_logits": constraints.independent(constraints.real, 2), + } + support = constraints.independent(constraints.nonnegative_integer, 2) + + def __init__( + self, initial_logits, transition_logits, observation_logits, validate_args=None + ): + if initial_logits.dim() < 1: + raise ValueError( + "expected initial_logits to have at least one dim, " + "actual shape = {}".format(initial_logits.shape) + ) + if transition_logits.dim() < 2: + raise ValueError( + "expected transition_logits to have at least two dims, " + "actual shape = {}".format(transition_logits.shape) + ) + if observation_logits.dim() < 2: + raise ValueError( + "expected observation_logits to have at least two dims, " + "actual shape = {}".format(transition_logits.shape) + ) + shape = broadcast_shape( + initial_logits.shape[:-1], + transition_logits.shape[:-2], + observation_logits.shape[:-2], + ) + if len(shape) == 0: + shape = torch.Size([1]) + batch_shape = shape + event_shape = (1, observation_logits.shape[-1]) + self.initial_logits = initial_logits - initial_logits.logsumexp(-1, True) + self.transition_logits = transition_logits - transition_logits.logsumexp( + -1, True + ) + self.observation_logits = observation_logits - observation_logits.logsumexp( + -1, True + ) + super(MissingDataDiscreteHMM, self).__init__( + batch_shape, event_shape, validate_args=validate_args + ) + + def log_prob(self, value): + """ + :param ~torch.Tensor value: One-hot encoded observation. Must be + real-valued (float) and broadcastable to + ``(batch_size, num_steps, categorical_size)`` where + ``categorical_size`` is the dimension of the categorical output. + Missing data is represented by zeros, i.e. + ``value[batch, step, :] == tensor([0, ..., 0])``. + Variable length observation sequences can be handled by padding + the sequence with zeros at the end. + """ + + assert value.shape[-1] == self.event_shape[1] + + # Combine observation and transition factors. + value_logits = torch.matmul( + value, torch.transpose(self.observation_logits, -2, -1) + ) + result = self.transition_logits.unsqueeze(-3) + value_logits[..., 1:, None, :] + + # Eliminate time dimension. + result = _sequential_logmatmulexp(result) + + # Combine initial factor. + result = self.initial_logits + value_logits[..., 0, :] + result.logsumexp(-1) + + # Marginalize out final state. + result = result.logsumexp(-1) + return result + + def sample(self, sample_shape=torch.Size([])): + """ + :param ~torch.Size sample_shape: Sample shape, last dimension must be + ``num_steps`` and must be broadcastable to + ``(batch_size, num_steps)``. batch_size must be int not tuple. + """ + # shape: batch_size x num_steps x categorical_size + shape = broadcast_shape( + torch.Size(list(self.batch_shape) + [1, 1]), + torch.Size(list(sample_shape) + [1]), + torch.Size((1, 1, self.event_shape[-1])), + ) + # state: batch_size x state_dim + state = OneHotCategorical(logits=self.initial_logits).sample() + # sample: batch_size x num_steps x categorical_size + sample = torch.zeros(shape) + for i in range(shape[-2]): + # batch_size x 1 x state_dim @ + # batch_size x state_dim x categorical_size + obs_logits = torch.matmul( + state.unsqueeze(-2), self.observation_logits + ).squeeze(-2) + sample[:, i, :] = OneHotCategorical(logits=obs_logits).sample() + # batch_size x 1 x state_dim @ + # batch_size x state_dim x state_dim + trans_logits = torch.matmul( + state.unsqueeze(-2), self.transition_logits + ).squeeze(-2) + state = OneHotCategorical(logits=trans_logits).sample() + + return sample + + def filter(self, value): + """ + Compute the marginal probability of the state variable at each + step conditional on the previous observations. + + :param ~torch.Tensor value: One-hot encoded observation. + Must be real-valued (float) and broadcastable to + ``(batch_size, num_steps, categorical_size)`` where + ``categorical_size`` is the dimension of the categorical output. + """ + # batch_size x num_steps x state_dim + shape = broadcast_shape( + torch.Size(list(self.batch_shape) + [1, 1]), + torch.Size(list(value.shape[:-1]) + [1]), + torch.Size((1, 1, self.initial_logits.shape[-1])), + ) + filter = torch.zeros(shape) + + # Combine observation and transition factors. + # batch_size x num_steps x state_dim + value_logits = torch.matmul( + value, torch.transpose(self.observation_logits, -2, -1) + ) + # batch_size x num_steps-1 x state_dim x state_dim + result = self.transition_logits.unsqueeze(-3) + value_logits[..., 1:, None, :] + + # Forward pass. (This could be parallelized using the + # Sarkka & Garcia-Fernandez method.) + filter[..., 0, :] = self.initial_logits + value_logits[..., 0, :] + filter[..., 0, :] = filter[..., 0, :] - torch.logsumexp( + filter[..., 0, :], -1, True + ) + for i in range(1, shape[-2]): + filter[..., i, :] = torch.logsumexp( + filter[..., i - 1, :, None] + result[..., i - 1, :, :], -2 + ) + filter[..., i, :] = filter[..., i, :] - torch.logsumexp( + filter[..., i, :], -1, True + ) + return filter + + def smooth(self, value): + """ + Compute posterior expected value of state at each position (smoothing). + + :param ~torch.Tensor value: One-hot encoded observation. + Must be real-valued (float) and broadcastable to + ``(batch_size, num_steps, categorical_size)`` where + ``categorical_size`` is the dimension of the categorical output. + """ + # Compute filter and initialize. + filter = self.filter(value) + shape = filter.shape + backfilter = torch.zeros(shape) + + # Combine observation and transition factors. + # batch_size x num_steps x state_dim + value_logits = torch.matmul( + value, torch.transpose(self.observation_logits, -2, -1) + ) + # batch_size x num_steps-1 x state_dim x state_dim + result = self.transition_logits.unsqueeze(-3) + value_logits[..., 1:, None, :] + # Construct backwards filter. + for i in range(shape[-2] - 1, 0, -1): + backfilter[..., i - 1, :] = torch.logsumexp( + backfilter[..., i, None, :] + result[..., i - 1, :, :], -1 + ) + + # Compute smoothed version. + smooth = filter + backfilter + smooth = smooth - torch.logsumexp(smooth, -1, True) + return smooth + + def sample_states(self, value): + """ + Sample states with forward filtering-backward sampling algorithm. + + :param ~torch.Tensor value: One-hot encoded observation. + Must be real-valued (float) and broadcastable to + ``(batch_size, num_steps, categorical_size)`` where + ``categorical_size`` is the dimension of the categorical output. + """ + filter = self.filter(value) + shape = filter.shape + joint = filter.unsqueeze(-1) + self.transition_logits.unsqueeze(-3) + states = torch.zeros(shape[:-1], dtype=torch.long) + states[..., -1] = Categorical(logits=filter[..., -1, :]).sample() + for i in range(shape[-2] - 1, 0, -1): + logits = torch.gather( + joint[..., i - 1, :, :], + -1, + states[..., i, None, None] + * torch.ones([shape[-1], 1], dtype=torch.long), + ).squeeze(-1) + states[..., i - 1] = Categorical(logits=logits).sample() + return states + + def map_states(self, value): + """ + Compute maximum a posteriori (MAP) estimate of state variable with + Viterbi algorithm. + + :param ~torch.Tensor value: One-hot encoded observation. + Must be real-valued (float) and broadcastable to + ``(batch_size, num_steps, categorical_size)`` where + ``categorical_size`` is the dimension of the categorical output. + """ + # Setup for Viterbi. + # batch_size x num_steps x state_dim + shape = broadcast_shape( + torch.Size(list(self.batch_shape) + [1, 1]), + torch.Size(list(value.shape[:-1]) + [1]), + torch.Size((1, 1, self.initial_logits.shape[-1])), + ) + state_logits = torch.zeros(shape) + state_traceback = torch.zeros(shape, dtype=torch.long) + + # Combine observation and transition factors. + # batch_size x num_steps x state_dim + value_logits = torch.matmul( + value, torch.transpose(self.observation_logits, -2, -1) + ) + # batch_size x num_steps-1 x state_dim x state_dim + result = self.transition_logits.unsqueeze(-3) + value_logits[..., 1:, None, :] + + # Forward pass. + state_logits[..., 0, :] = self.initial_logits + value_logits[..., 0, :] + for i in range(1, shape[-2]): + transit_weights = ( + state_logits[..., i - 1, :, None] + result[..., i - 1, :, :] + ) + state_logits[..., i, :], state_traceback[..., i, :] = torch.max( + transit_weights, -2 + ) + # Traceback. + map_states = torch.zeros(shape[:-1], dtype=torch.long) + map_states[..., -1] = torch.argmax(state_logits[..., -1, :], -1) + for i in range(shape[-2] - 1, 0, -1): + map_states[..., i - 1] = torch.gather( + state_traceback[..., i, :], -1, map_states[..., i].unsqueeze(-1) + ).squeeze(-1) + return map_states + + def given_states(self, states): + """ + Distribution conditional on the state variable. + + :param ~torch.Tensor map_states: State trajectory. Must be + integer-valued (long) and broadcastable to + ``(batch_size, num_steps)``. + """ + shape = broadcast_shape( + list(self.batch_shape) + [1, 1], + list(states.shape[:-1]) + [1, 1], + [1, 1, self.observation_logits.shape[-1]], + ) + states_index = states.unsqueeze(-1) * torch.ones(shape, dtype=torch.long) + obs_logits = self.observation_logits * torch.ones(shape) + logits = torch.gather(obs_logits, -2, states_index) + return OneHotCategorical(logits=logits) + + def sample_given_states(self, states): + """ + Sample an observation conditional on the state variable. + + :param ~torch.Tensor map_states: State trajectory. Must be + integer-valued (long) and broadcastable to + ``(batch_size, num_steps)``. + """ + conditional = self.given_states(states) + return conditional.sample() diff --git a/pyro/source/pyro/contrib/mue/models.py b/pyro/source/pyro/contrib/mue/models.py new file mode 100644 index 0000000000000000000000000000000000000000..ee30cd7387b7d09a1755386f67c715330c67246f --- /dev/null +++ b/pyro/source/pyro/contrib/mue/models.py @@ -0,0 +1,872 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +""" +Example MuE observation models. +""" + +import datetime + +import numpy as np +import torch +import torch.nn as nn +from torch.nn.functional import softplus +from torch.optim import Adam +from torch.utils.data import DataLoader + +import pyro +import pyro.distributions as dist +from pyro import poutine +from pyro.contrib.mue.missingdatahmm import MissingDataDiscreteHMM +from pyro.contrib.mue.statearrangers import Profile +from pyro.infer import SVI, JitTrace_ELBO, Trace_ELBO +from pyro.optim import MultiStepLR + + +class ProfileHMM(nn.Module): + """ + Profile HMM. + + This model consists of a constant distribution (a delta function) over the + regressor sequence, plus a MuE observation distribution. The priors + are all Normal distributions, and are pushed through a softmax function + onto the simplex. + + :param int latent_seq_length: Length of the latent regressor sequence M. + Must be greater than or equal to 1. + :param int alphabet_length: Length of the sequence alphabet (e.g. 20 for + amino acids). + :param float prior_scale: Standard deviation of the prior distribution. + :param float indel_prior_bias: Mean of the prior distribution over the + log probability of an indel not occurring. Higher values lead to lower + probability of indels. + :param bool cuda: Transfer data onto the GPU during training. + :param bool pin_memory: Pin memory for faster GPU transfer. + """ + + def __init__( + self, + latent_seq_length, + alphabet_length, + prior_scale=1.0, + indel_prior_bias=10.0, + cuda=False, + pin_memory=False, + ): + super().__init__() + assert isinstance(cuda, bool) + self.is_cuda = cuda + assert isinstance(pin_memory, bool) + self.pin_memory = pin_memory + + assert isinstance(latent_seq_length, int) and latent_seq_length > 0 + self.latent_seq_length = latent_seq_length + assert isinstance(alphabet_length, int) and alphabet_length > 0 + self.alphabet_length = alphabet_length + + self.precursor_seq_shape = (latent_seq_length, alphabet_length) + self.insert_seq_shape = (latent_seq_length + 1, alphabet_length) + self.indel_shape = (latent_seq_length, 3, 2) + + assert isinstance(prior_scale, float) + self.prior_scale = prior_scale + assert isinstance(indel_prior_bias, float) + self.indel_prior = torch.tensor([indel_prior_bias, 0.0]) + + # Initialize state arranger. + self.statearrange = Profile(latent_seq_length) + + def model(self, seq_data, local_scale): + # Latent sequence. + precursor_seq = pyro.sample( + "precursor_seq", + dist.Normal( + torch.zeros(self.precursor_seq_shape), + self.prior_scale * torch.ones(self.precursor_seq_shape), + ).to_event(2), + ) + precursor_seq_logits = precursor_seq - precursor_seq.logsumexp(-1, True) + insert_seq = pyro.sample( + "insert_seq", + dist.Normal( + torch.zeros(self.insert_seq_shape), + self.prior_scale * torch.ones(self.insert_seq_shape), + ).to_event(2), + ) + insert_seq_logits = insert_seq - insert_seq.logsumexp(-1, True) + + # Indel probabilities. + insert = pyro.sample( + "insert", + dist.Normal( + self.indel_prior * torch.ones(self.indel_shape), + self.prior_scale * torch.ones(self.indel_shape), + ).to_event(3), + ) + insert_logits = insert - insert.logsumexp(-1, True) + delete = pyro.sample( + "delete", + dist.Normal( + self.indel_prior * torch.ones(self.indel_shape), + self.prior_scale * torch.ones(self.indel_shape), + ).to_event(3), + ) + delete_logits = delete - delete.logsumexp(-1, True) + + # Construct HMM parameters. + initial_logits, transition_logits, observation_logits = self.statearrange( + precursor_seq_logits, insert_seq_logits, insert_logits, delete_logits + ) + + with pyro.plate("batch", seq_data.shape[0]): + with poutine.scale(scale=local_scale): + # Observations. + pyro.sample( + "obs_seq", + MissingDataDiscreteHMM( + initial_logits, transition_logits, observation_logits + ), + obs=seq_data, + ) + + def guide(self, seq_data, local_scale): + # Sequence. + precursor_seq_q_mn = pyro.param( + "precursor_seq_q_mn", torch.zeros(self.precursor_seq_shape) + ) + precursor_seq_q_sd = pyro.param( + "precursor_seq_q_sd", torch.zeros(self.precursor_seq_shape) + ) + pyro.sample( + "precursor_seq", + dist.Normal(precursor_seq_q_mn, softplus(precursor_seq_q_sd)).to_event(2), + ) + insert_seq_q_mn = pyro.param( + "insert_seq_q_mn", torch.zeros(self.insert_seq_shape) + ) + insert_seq_q_sd = pyro.param( + "insert_seq_q_sd", torch.zeros(self.insert_seq_shape) + ) + pyro.sample( + "insert_seq", + dist.Normal(insert_seq_q_mn, softplus(insert_seq_q_sd)).to_event(2), + ) + + # Indels. + insert_q_mn = pyro.param( + "insert_q_mn", torch.ones(self.indel_shape) * self.indel_prior + ) + insert_q_sd = pyro.param("insert_q_sd", torch.zeros(self.indel_shape)) + pyro.sample( + "insert", + dist.Normal(insert_q_mn, softplus(insert_q_sd)).to_event(3), + ) + delete_q_mn = pyro.param( + "delete_q_mn", torch.ones(self.indel_shape) * self.indel_prior + ) + delete_q_sd = pyro.param("delete_q_sd", torch.zeros(self.indel_shape)) + pyro.sample( + "delete", + dist.Normal(delete_q_mn, softplus(delete_q_sd)).to_event(3), + ) + + def fit_svi( + self, + dataset, + epochs=2, + batch_size=1, + scheduler=None, + jit=False, + ): + """ + Infer approximate posterior with stochastic variational inference. + + This runs :class:`~pyro.infer.svi.SVI`. It is an approximate inference + method useful for quickly iterating on probabilistic models. + + :param ~torch.utils.data.Dataset dataset: The training dataset. + :param int epochs: Number of epochs of training. + :param int batch_size: Minibatch size (number of sequences). + :param pyro.optim.MultiStepLR scheduler: Optimization scheduler. + (Default: Adam optimizer, 0.01 constant learning rate.) + :param bool jit: Whether to use a jit compiled ELBO. + """ + + # Setup. + if batch_size is not None: + self.batch_size = batch_size + if scheduler is None: + scheduler = MultiStepLR( + { + "optimizer": Adam, + "optim_args": {"lr": 0.01}, + "milestones": [], + "gamma": 0.5, + } + ) + if self.is_cuda: + device = torch.device("cuda") + else: + device = torch.device("cpu") + # Initialize guide. + self.guide(None, None) + dataload = DataLoader( + dataset, + batch_size=batch_size, + shuffle=True, + pin_memory=self.pin_memory, + generator=torch.Generator(device=device), + ) + # Setup stochastic variational inference. + if jit: + elbo = JitTrace_ELBO(ignore_jit_warnings=True) + else: + elbo = Trace_ELBO() + svi = SVI(self.model, self.guide, scheduler, loss=elbo) + + # Run inference. + losses = [] + t0 = datetime.datetime.now() + for epoch in range(epochs): + for seq_data, L_data in dataload: + if self.is_cuda: + seq_data = seq_data.cuda() + loss = svi.step( + seq_data, torch.tensor(len(dataset) / seq_data.shape[0]) + ) + losses.append(loss) + scheduler.step() + print(epoch, loss, " ", datetime.datetime.now() - t0) + return losses + + def evaluate(self, dataset_train, dataset_test=None, jit=False): + """ + Evaluate performance (log probability and per residue perplexity) on + train and test datasets. + + :param ~torch.utils.data.Dataset dataset: The training dataset. + :param ~torch.utils.data.Dataset dataset: The testing dataset. + :param bool jit: Whether to use a jit compiled ELBO. + """ + dataload_train = DataLoader(dataset_train, batch_size=1, shuffle=False) + if dataset_test is not None: + dataload_test = DataLoader(dataset_test, batch_size=1, shuffle=False) + # Initialize guide. + self.guide(None, None) + if jit: + elbo = JitTrace_ELBO(ignore_jit_warnings=True) + else: + elbo = Trace_ELBO() + scheduler = MultiStepLR({"optimizer": Adam, "optim_args": {"lr": 0.01}}) + # Setup stochastic variational inference. + svi = SVI(self.model, self.guide, scheduler, loss=elbo) + + # Compute elbo and perplexity. + train_lp, train_perplex = self._evaluate_local_elbo( + svi, dataload_train, len(dataset_train) + ) + if dataset_test is not None: + test_lp, test_perplex = self._evaluate_local_elbo( + svi, dataload_test, len(dataset_test) + ) + return train_lp, test_lp, train_perplex, test_perplex + else: + return train_lp, None, train_perplex, None + + def _local_variables(self, name, site): + """Return per datapoint random variables in model.""" + return name in ["obs_L", "obs_seq"] + + def _evaluate_local_elbo(self, svi, dataload, data_size): + """Evaluate elbo and average per residue perplexity.""" + lp, perplex = 0.0, 0.0 + with torch.no_grad(): + for seq_data, L_data in dataload: + if self.is_cuda: + seq_data, L_data = seq_data.cuda(), L_data.cuda() + conditioned_model = poutine.condition( + self.model, data={"obs_seq": seq_data} + ) + args = (seq_data, torch.tensor(1.0)) + guide_tr = poutine.trace(self.guide).get_trace(*args) + model_tr = poutine.trace( + poutine.replay(conditioned_model, trace=guide_tr) + ).get_trace(*args) + local_elbo = ( + ( + model_tr.log_prob_sum(self._local_variables) + - guide_tr.log_prob_sum(self._local_variables) + ) + .cpu() + .numpy() + ) + lp += local_elbo + perplex += -local_elbo / L_data[0].cpu().numpy() + perplex = np.exp(perplex / data_size) + return lp, perplex + + +class Encoder(nn.Module): + def __init__(self, data_length, alphabet_length, z_dim): + super().__init__() + + self.input_size = data_length * alphabet_length + self.f1_mn = nn.Linear(self.input_size, z_dim) + self.f1_sd = nn.Linear(self.input_size, z_dim) + + def forward(self, data): + data = data.reshape(-1, self.input_size) + z_loc = self.f1_mn(data) + z_scale = softplus(self.f1_sd(data)) + + return z_loc, z_scale + + +class FactorMuE(nn.Module): + """ + FactorMuE + + This model consists of probabilistic PCA plus a MuE output distribution. + + The priors are all Normal distributions, and where relevant pushed through + a softmax onto the simplex. + + :param int data_length: Length of the input sequence matrix, including + zero padding at the end. + :param int alphabet_length: Length of the sequence alphabet (e.g. 20 for + amino acids). + :param int z_dim: Number of dimensions of the z space. + :param int batch_size: Minibatch size. + :param int latent_seq_length: Length of the latent regressor sequence (M). + Must be greater than or equal to 1. (Default: 1.1 x data_length.) + :param bool indel_factor_dependence: Indel probabilities depend on the + latent variable z. + :param float indel_prior_scale: Standard deviation of the prior + distribution on indel parameters. + :param float indel_prior_bias: Mean of the prior distribution over the + log probability of an indel not occurring. Higher values lead to lower + probability of indels. + :param float inverse_temp_prior: Mean of the prior distribution over the + inverse temperature parameter. + :param float weights_prior_scale: Standard deviation of the prior + distribution over the factors. + :param float offset_prior_scale: Standard deviation of the prior + distribution over the offset (constant) in the pPCA model. + :param str z_prior_distribution: Prior distribution over the latent + variable z. Either 'Normal' (pPCA model) or 'Laplace' (an ICA model). + :param bool ARD_prior: Use automatic relevance determination prior on + factors. + :param bool substitution_matrix: Use a learnable substitution matrix + rather than the identity matrix. + :param float substitution_prior_scale: Standard deviation of the prior + distribution over substitution matrix parameters (when + substitution_matrix is True). + :param int latent_alphabet_length: Length of the alphabet in the latent + regressor sequence. + :param bool cuda: Transfer data onto the GPU during training. + :param bool pin_memory: Pin memory for faster GPU transfer. + :param float epsilon: A small value for numerical stability. + """ + + def __init__( + self, + data_length, + alphabet_length, + z_dim, + batch_size=10, + latent_seq_length=None, + indel_factor_dependence=False, + indel_prior_scale=1.0, + indel_prior_bias=10.0, + inverse_temp_prior=100.0, + weights_prior_scale=1.0, + offset_prior_scale=1.0, + z_prior_distribution="Normal", + ARD_prior=False, + substitution_matrix=True, + substitution_prior_scale=10.0, + latent_alphabet_length=None, + cuda=False, + pin_memory=False, + epsilon=1e-32, + ): + super().__init__() + assert isinstance(cuda, bool) + self.is_cuda = cuda + assert isinstance(pin_memory, bool) + self.pin_memory = pin_memory + + # Constants. + assert isinstance(data_length, int) and data_length > 0 + self.data_length = data_length + if latent_seq_length is None: + latent_seq_length = int(data_length * 1.1) + else: + assert isinstance(latent_seq_length, int) and latent_seq_length > 0 + self.latent_seq_length = latent_seq_length + assert isinstance(alphabet_length, int) and alphabet_length > 0 + self.alphabet_length = alphabet_length + assert isinstance(z_dim, int) and z_dim > 0 + self.z_dim = z_dim + + # Parameter shapes. + if (not substitution_matrix) or (latent_alphabet_length is None): + latent_alphabet_length = alphabet_length + self.latent_alphabet_length = latent_alphabet_length + self.indel_shape = (latent_seq_length, 3, 2) + self.total_factor_size = ( + (2 * latent_seq_length + 1) * latent_alphabet_length + + 2 * indel_factor_dependence * latent_seq_length * 3 * 2 + ) + + # Architecture. + self.indel_factor_dependence = indel_factor_dependence + self.ARD_prior = ARD_prior + self.substitution_matrix = substitution_matrix + + # Priors. + assert isinstance(indel_prior_scale, float) + self.indel_prior_scale = torch.tensor(indel_prior_scale) + assert isinstance(indel_prior_bias, float) + self.indel_prior = torch.tensor([indel_prior_bias, 0.0]) + assert isinstance(inverse_temp_prior, float) + self.inverse_temp_prior = torch.tensor(inverse_temp_prior) + assert isinstance(weights_prior_scale, float) + self.weights_prior_scale = torch.tensor(weights_prior_scale) + assert isinstance(offset_prior_scale, float) + self.offset_prior_scale = torch.tensor(offset_prior_scale) + assert isinstance(epsilon, float) + self.epsilon = torch.tensor(epsilon) + assert isinstance(substitution_prior_scale, float) + self.substitution_prior_scale = torch.tensor(substitution_prior_scale) + self.z_prior_distribution = z_prior_distribution + + # Batch control. + assert isinstance(batch_size, int) + self.batch_size = batch_size + + # Initialize layers. + self.encoder = Encoder(data_length, alphabet_length, z_dim) + self.statearrange = Profile(latent_seq_length) + + def decoder(self, z, W, B, inverse_temp): + # Project. + v = torch.mm(z, W) + B + + out = dict() + if self.indel_factor_dependence: + # Extract insertion and deletion parameters. + ind0 = (2 * self.latent_seq_length + 1) * self.latent_alphabet_length + ind1 = ind0 + self.latent_seq_length * 3 * 2 + ind2 = ind1 + self.latent_seq_length * 3 * 2 + insert_v, delete_v = v[:, ind0:ind1], v[:, ind1:ind2] + insert_v = ( + insert_v.reshape([-1, self.latent_seq_length, 3, 2]) + self.indel_prior + ) + out["insert_logits"] = insert_v - insert_v.logsumexp(-1, True) + delete_v = ( + delete_v.reshape([-1, self.latent_seq_length, 3, 2]) + self.indel_prior + ) + out["delete_logits"] = delete_v - delete_v.logsumexp(-1, True) + # Extract precursor and insertion sequences. + ind0 = self.latent_seq_length * self.latent_alphabet_length + ind1 = ind0 + (self.latent_seq_length + 1) * self.latent_alphabet_length + precursor_seq_v, insert_seq_v = v[:, :ind0], v[:, ind0:ind1] + precursor_seq_v = (precursor_seq_v * softplus(inverse_temp)).reshape( + [-1, self.latent_seq_length, self.latent_alphabet_length] + ) + out["precursor_seq_logits"] = precursor_seq_v - precursor_seq_v.logsumexp( + -1, True + ) + insert_seq_v = (insert_seq_v * softplus(inverse_temp)).reshape( + [-1, self.latent_seq_length + 1, self.latent_alphabet_length] + ) + out["insert_seq_logits"] = insert_seq_v - insert_seq_v.logsumexp(-1, True) + + return out + + def model(self, seq_data, local_scale, local_prior_scale): + # ARD prior. + if self.ARD_prior: + # Relevance factors + alpha = pyro.sample( + "alpha", + dist.Gamma(torch.ones(self.z_dim), torch.ones(self.z_dim)).to_event(1), + ) + else: + alpha = torch.ones(self.z_dim) + + # Factor and offset. + W = pyro.sample( + "W", + dist.Normal( + torch.zeros([self.z_dim, self.total_factor_size]), + torch.ones([self.z_dim, self.total_factor_size]) + * self.weights_prior_scale + / (alpha[:, None] + self.epsilon), + ).to_event(2), + ) + B = pyro.sample( + "B", + dist.Normal( + torch.zeros(self.total_factor_size), + torch.ones(self.total_factor_size) * self.offset_prior_scale, + ).to_event(1), + ) + + # Indel probabilities. + if not self.indel_factor_dependence: + insert = pyro.sample( + "insert", + dist.Normal( + self.indel_prior * torch.ones(self.indel_shape), + self.indel_prior_scale * torch.ones(self.indel_shape), + ).to_event(3), + ) + insert_logits = insert - insert.logsumexp(-1, True) + delete = pyro.sample( + "delete", + dist.Normal( + self.indel_prior * torch.ones(self.indel_shape), + self.indel_prior_scale * torch.ones(self.indel_shape), + ).to_event(3), + ) + delete_logits = delete - delete.logsumexp(-1, True) + + # Inverse temperature. + inverse_temp = pyro.sample( + "inverse_temp", dist.Normal(self.inverse_temp_prior, torch.tensor(1.0)) + ) + + # Substitution matrix. + if self.substitution_matrix: + substitute = pyro.sample( + "substitute", + dist.Normal( + torch.zeros([self.latent_alphabet_length, self.alphabet_length]), + self.substitution_prior_scale + * torch.ones([self.latent_alphabet_length, self.alphabet_length]), + ).to_event(2), + ) + + with pyro.plate("batch", seq_data.shape[0]): + with poutine.scale(scale=local_scale): + with poutine.scale(scale=local_prior_scale): + # Sample latent variable from prior. + if self.z_prior_distribution == "Normal": + z = pyro.sample( + "latent", + dist.Normal( + torch.zeros(self.z_dim), torch.ones(self.z_dim) + ).to_event(1), + ) + elif self.z_prior_distribution == "Laplace": + z = pyro.sample( + "latent", + dist.Laplace( + torch.zeros(self.z_dim), torch.ones(self.z_dim) + ).to_event(1), + ) + + # Decode latent sequence. + decoded = self.decoder(z, W, B, inverse_temp) + if self.indel_factor_dependence: + insert_logits = decoded["insert_logits"] + delete_logits = decoded["delete_logits"] + + # Construct HMM parameters. + if self.substitution_matrix: + ( + initial_logits, + transition_logits, + observation_logits, + ) = self.statearrange( + decoded["precursor_seq_logits"], + decoded["insert_seq_logits"], + insert_logits, + delete_logits, + substitute, + ) + else: + ( + initial_logits, + transition_logits, + observation_logits, + ) = self.statearrange( + decoded["precursor_seq_logits"], + decoded["insert_seq_logits"], + insert_logits, + delete_logits, + ) + # Draw samples. + pyro.sample( + "obs_seq", + MissingDataDiscreteHMM( + initial_logits, transition_logits, observation_logits + ), + obs=seq_data, + ) + + def guide(self, seq_data, local_scale, local_prior_scale): + # Register encoder with pyro. + pyro.module("encoder", self.encoder) + + # ARD weightings. + if self.ARD_prior: + alpha_conc = pyro.param("alpha_conc", torch.randn(self.z_dim)) + alpha_rate = pyro.param("alpha_rate", torch.randn(self.z_dim)) + pyro.sample( + "alpha", + dist.Gamma(softplus(alpha_conc), softplus(alpha_rate)).to_event(1), + ) + # Factors. + W_q_mn = pyro.param("W_q_mn", torch.randn([self.z_dim, self.total_factor_size])) + W_q_sd = pyro.param("W_q_sd", torch.ones([self.z_dim, self.total_factor_size])) + pyro.sample("W", dist.Normal(W_q_mn, softplus(W_q_sd)).to_event(2)) + B_q_mn = pyro.param("B_q_mn", torch.randn(self.total_factor_size)) + B_q_sd = pyro.param("B_q_sd", torch.ones(self.total_factor_size)) + pyro.sample("B", dist.Normal(B_q_mn, softplus(B_q_sd)).to_event(1)) + + # Indel probabilities. + if not self.indel_factor_dependence: + insert_q_mn = pyro.param( + "insert_q_mn", torch.ones(self.indel_shape) * self.indel_prior + ) + insert_q_sd = pyro.param("insert_q_sd", torch.zeros(self.indel_shape)) + pyro.sample( + "insert", dist.Normal(insert_q_mn, softplus(insert_q_sd)).to_event(3) + ) + delete_q_mn = pyro.param( + "delete_q_mn", torch.ones(self.indel_shape) * self.indel_prior + ) + delete_q_sd = pyro.param("delete_q_sd", torch.zeros(self.indel_shape)) + pyro.sample( + "delete", dist.Normal(delete_q_mn, softplus(delete_q_sd)).to_event(3) + ) + + # Inverse temperature. + inverse_temp_q_mn = pyro.param("inverse_temp_q_mn", torch.tensor(0.0)) + inverse_temp_q_sd = pyro.param("inverse_temp_q_sd", torch.tensor(0.0)) + pyro.sample( + "inverse_temp", dist.Normal(inverse_temp_q_mn, softplus(inverse_temp_q_sd)) + ) + + # Substitution matrix. + if self.substitution_matrix: + substitute_q_mn = pyro.param( + "substitute_q_mn", + torch.zeros([self.latent_alphabet_length, self.alphabet_length]), + ) + substitute_q_sd = pyro.param( + "substitute_q_sd", + torch.zeros([self.latent_alphabet_length, self.alphabet_length]), + ) + pyro.sample( + "substitute", + dist.Normal(substitute_q_mn, softplus(substitute_q_sd)).to_event(2), + ) + + # Per datapoint local latent variables. + with pyro.plate("batch", seq_data.shape[0]): + # Encode sequences. + z_loc, z_scale = self.encoder(seq_data) + # Scale log likelihood to account for mini-batching. + with poutine.scale(scale=local_scale * local_prior_scale): + # Sample. + if self.z_prior_distribution == "Normal": + pyro.sample("latent", dist.Normal(z_loc, z_scale).to_event(1)) + elif self.z_prior_distribution == "Laplace": + pyro.sample("latent", dist.Laplace(z_loc, z_scale).to_event(1)) + + def fit_svi( + self, + dataset, + epochs=2, + anneal_length=1.0, + batch_size=None, + scheduler=None, + jit=False, + ): + """ + Infer approximate posterior with stochastic variational inference. + + This runs :class:`~pyro.infer.svi.SVI`. It is an approximate inference + method useful for quickly iterating on probabilistic models. + + :param ~torch.utils.data.Dataset dataset: The training dataset. + :param int epochs: Number of epochs of training. + :param float anneal_length: Number of epochs over which to linearly + anneal the prior KL divergence weight from 0 to 1, for improved + training. + :param int batch_size: Minibatch size (number of sequences). + :param pyro.optim.MultiStepLR scheduler: Optimization scheduler. + (Default: Adam optimizer, 0.01 constant learning rate.) + :param bool jit: Whether to use a jit compiled ELBO. + """ + + # Setup. + if batch_size is not None: + self.batch_size = batch_size + if scheduler is None: + scheduler = MultiStepLR( + { + "optimizer": Adam, + "optim_args": {"lr": 0.01}, + "milestones": [], + "gamma": 0.5, + } + ) + if self.is_cuda: + device = torch.device("cuda") + else: + device = torch.device("cpu") + dataload = DataLoader( + dataset, + batch_size=batch_size, + shuffle=True, + pin_memory=self.pin_memory, + generator=torch.Generator(device=device), + ) + # Initialize guide. + for seq_data, L_data in dataload: + if self.is_cuda: + seq_data = seq_data.cuda() + self.guide(seq_data, torch.tensor(1.0), torch.tensor(1.0)) + break + # Setup stochastic variational inference. + if jit: + elbo = JitTrace_ELBO(ignore_jit_warnings=True) + else: + elbo = Trace_ELBO() + svi = SVI(self.model, self.guide, scheduler, loss=elbo) + + # Run inference. + losses = [] + step_i = 1 + t0 = datetime.datetime.now() + for epoch in range(epochs): + for seq_data, L_data in dataload: + if self.is_cuda: + seq_data = seq_data.cuda() + loss = svi.step( + seq_data, + torch.tensor(len(dataset) / seq_data.shape[0]), + self._beta_anneal(step_i, batch_size, len(dataset), anneal_length), + ) + losses.append(loss) + scheduler.step() + step_i += 1 + print(epoch, loss, " ", datetime.datetime.now() - t0) + + return losses + + def _beta_anneal(self, step, batch_size, data_size, anneal_length): + """Annealing schedule for prior KL term (beta annealing).""" + if np.allclose(anneal_length, 0.0): + return torch.tensor(1.0) + anneal_frac = step * batch_size / (anneal_length * data_size) + return torch.tensor(min([anneal_frac, 1.0])) + + def evaluate(self, dataset_train, dataset_test=None, jit=False): + """ + Evaluate performance (log probability and per residue perplexity) on + train and test datasets. + + :param ~torch.utils.data.Dataset dataset: The training dataset. + :param ~torch.utils.data.Dataset dataset: The testing dataset + (optional). + :param bool jit: Whether to use a jit compiled ELBO. + """ + dataload_train = DataLoader(dataset_train, batch_size=1, shuffle=False) + if dataset_test is not None: + dataload_test = DataLoader(dataset_test, batch_size=1, shuffle=False) + # Initialize guide. + for seq_data, L_data in dataload_train: + if self.is_cuda: + seq_data = seq_data.cuda() + self.guide(seq_data, torch.tensor(1.0), torch.tensor(1.0)) + break + if jit: + elbo = JitTrace_ELBO(ignore_jit_warnings=True) + else: + elbo = Trace_ELBO() + scheduler = MultiStepLR({"optimizer": Adam, "optim_args": {"lr": 0.01}}) + # Setup stochastic variational inference. + svi = SVI(self.model, self.guide, scheduler, loss=elbo) + + # Compute elbo and perplexity. + train_lp, train_perplex = self._evaluate_local_elbo( + svi, dataload_train, len(dataset_train) + ) + if dataset_test is not None: + test_lp, test_perplex = self._evaluate_local_elbo( + svi, dataload_test, len(dataset_test) + ) + return train_lp, test_lp, train_perplex, test_perplex + else: + return train_lp, None, train_perplex, None + + def _local_variables(self, name, site): + """Return per datapoint random variables in model.""" + return name in ["latent", "obs_L", "obs_seq"] + + def _evaluate_local_elbo(self, svi, dataload, data_size): + """Evaluate elbo and average per residue perplexity.""" + lp, perplex = 0.0, 0.0 + with torch.no_grad(): + for seq_data, L_data in dataload: + if self.is_cuda: + seq_data, L_data = seq_data.cuda(), L_data.cuda() + conditioned_model = poutine.condition( + self.model, data={"obs_seq": seq_data} + ) + args = (seq_data, torch.tensor(1.0), torch.tensor(1.0)) + guide_tr = poutine.trace(self.guide).get_trace(*args) + model_tr = poutine.trace( + poutine.replay(conditioned_model, trace=guide_tr) + ).get_trace(*args) + local_elbo = ( + ( + model_tr.log_prob_sum(self._local_variables) + - guide_tr.log_prob_sum(self._local_variables) + ) + .cpu() + .numpy() + ) + lp += local_elbo + perplex += -local_elbo / L_data[0].cpu().numpy() + perplex = np.exp(perplex / data_size) + return lp, perplex + + def embed(self, dataset, batch_size=None): + """ + Get the latent space embedding (mean posterior value of z). + + :param ~torch.utils.data.Dataset dataset: The dataset to embed. + :param int batch_size: Minibatch size (number of sequences). (Defaults + to batch_size of the model object.) + """ + if batch_size is None: + batch_size = self.batch_size + dataload = DataLoader(dataset, batch_size=batch_size, shuffle=False) + with torch.no_grad(): + z_locs, z_scales = [], [] + for seq_data, L_data in dataload: + if self.is_cuda: + seq_data = seq_data.cuda() + z_loc, z_scale = self.encoder(seq_data) + z_locs.append(z_loc.cpu()) + z_scales.append(z_scale.cpu()) + + return torch.cat(z_locs), torch.cat(z_scales) + + def _reconstruct_regressor_seq(self, data, ind, param): + "Reconstruct the latent regressor sequence given data." + with torch.no_grad(): + # Encode seq. + z_loc = self.encoder(data[ind][0])[0] + # Reconstruct + decoded = self.decoder( + z_loc, param("W_q_mn"), param("B_q_mn"), param("inverse_temp_q_mn") + ) + return torch.exp(decoded["precursor_seq_logits"]) diff --git a/pyro/source/pyro/contrib/mue/statearrangers.py b/pyro/source/pyro/contrib/mue/statearrangers.py new file mode 100644 index 0000000000000000000000000000000000000000..992118fa90d73d9abe948073d666e96e9543bc90 --- /dev/null +++ b/pyro/source/pyro/contrib/mue/statearrangers.py @@ -0,0 +1,207 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import torch +import torch.nn as nn + + +class Profile(nn.Module): + """ + Profile HMM state arrangement. Parameterizes an HMM according to + Equation S40 in [1] (with r_{M+1,j} = 1 and u_{M+1,j} = 0 + for j in {0, 1, 2}). For further background on profile HMMs see [2]. + + **References** + + [1] E. N. Weinstein, D. S. Marks (2021) + "Generative probabilistic biological sequence models that account for + mutational variability" + https://www.biorxiv.org/content/10.1101/2020.07.31.231381v2.full.pdf + + [2] R. Durbin, S. R. Eddy, A. Krogh, and G. Mitchison (1998) + "Biological sequence analysis: probabilistic models of proteins and nucleic + acids" + Cambridge university press + + :param M: Length of regressor sequence. + :type M: int + :param epsilon: A small value for numerical stability. + :type epsilon: float + """ + + def __init__(self, M, epsilon=1e-32): + super().__init__() + self.M = M + self.K = 2 * M + 1 + self.epsilon = epsilon + + self._make_transfer() + + def _make_transfer(self): + """Set up linear transformations (transfer matrices) for converting + from profile HMM parameters to standard HMM parameters.""" + M, K = self.M, self.K + + # Overview: + # r -> insertion parameters + # u -> deletion parameters + # indices: m in {0, ..., M} and j in {0, 1, 2}; final index corresponds + # to simplex dimensions, i.e. 1 - r and r (in that order) + # null -> locations in the transition matrix equal to 0 + # ...transf_0 -> initial transition vector + # ...transf -> transition matrix + # We fix r_{M+1,j} = 1 for j in {0, 1, 2} + self.register_buffer("r_transf_0", torch.zeros((M, 3, 2, K))) + self.register_buffer("u_transf_0", torch.zeros((M, 3, 2, K))) + self.register_buffer("null_transf_0", torch.zeros((K,))) + m, g = -1, 0 + for gp in range(2): + for mp in range(M + gp): + kp = mg2k(mp, gp, M) + if m + 1 - g == mp and gp == 0: + self.r_transf_0[m + 1 - g, g, 0, kp] = 1 + self.u_transf_0[m + 1 - g, g, 0, kp] = 1 + + elif m + 1 - g < mp and gp == 0: + self.r_transf_0[m + 1 - g, g, 0, kp] = 1 + self.u_transf_0[m + 1 - g, g, 1, kp] = 1 + for mpp in range(m + 2 - g, mp): + self.r_transf_0[mpp, 2, 0, kp] = 1 + self.u_transf_0[mpp, 2, 1, kp] = 1 + self.r_transf_0[mp, 2, 0, kp] = 1 + self.u_transf_0[mp, 2, 0, kp] = 1 + + elif m + 1 - g == mp and gp == 1: + if mp < M: + self.r_transf_0[m + 1 - g, g, 1, kp] = 1 + + elif m + 1 - g < mp and gp == 1: + self.r_transf_0[m + 1 - g, g, 0, kp] = 1 + self.u_transf_0[m + 1 - g, g, 1, kp] = 1 + for mpp in range(m + 2 - g, mp): + self.r_transf_0[mpp, 2, 0, kp] = 1 + self.u_transf_0[mpp, 2, 1, kp] = 1 + if mp < M: + self.r_transf_0[mp, 2, 1, kp] = 1 + + else: + self.null_transf_0[kp] = 1 + + self.register_buffer("r_transf", torch.zeros((M, 3, 2, K, K))) + self.register_buffer("u_transf", torch.zeros((M, 3, 2, K, K))) + self.register_buffer("null_transf", torch.zeros((K, K))) + for g in range(2): + for m in range(M + g): + for gp in range(2): + for mp in range(M + gp): + k, kp = mg2k(m, g, M), mg2k(mp, gp, M) + if m + 1 - g == mp and gp == 0: + self.r_transf[m + 1 - g, g, 0, k, kp] = 1 + self.u_transf[m + 1 - g, g, 0, k, kp] = 1 + + elif m + 1 - g < mp and gp == 0: + self.r_transf[m + 1 - g, g, 0, k, kp] = 1 + self.u_transf[m + 1 - g, g, 1, k, kp] = 1 + self.r_transf[(m + 2 - g) : mp, 2, 0, k, kp] = 1 + self.u_transf[(m + 2 - g) : mp, 2, 1, k, kp] = 1 + self.r_transf[mp, 2, 0, k, kp] = 1 + self.u_transf[mp, 2, 0, k, kp] = 1 + + elif m + 1 - g == mp and gp == 1: + if mp < M: + self.r_transf[m + 1 - g, g, 1, k, kp] = 1 + + elif m + 1 - g < mp and gp == 1: + self.r_transf[m + 1 - g, g, 0, k, kp] = 1 + self.u_transf[m + 1 - g, g, 1, k, kp] = 1 + self.r_transf[(m + 2 - g) : mp, 2, 0, k, kp] = 1 + self.u_transf[(m + 2 - g) : mp, 2, 1, k, kp] = 1 + if mp < M: + self.r_transf[mp, 2, 1, k, kp] = 1 + + else: + self.null_transf[k, kp] = 1 + + self.register_buffer("vx_transf", torch.zeros((M, K))) + self.register_buffer("vc_transf", torch.zeros((M + 1, K))) + for g in range(2): + for m in range(M + g): + k = mg2k(m, g, M) + if g == 0: + self.vx_transf[m, k] = 1 + elif g == 1: + self.vc_transf[m, k] = 1 + + def forward( + self, + precursor_seq_logits, + insert_seq_logits, + insert_logits, + delete_logits, + substitute_logits=None, + ): + """ + Assemble HMM parameters given profile parameters. + + :param ~torch.Tensor precursor_seq_logits: Regressor sequence + *log(x)*. Should have rightmost dimension ``(M, D)`` and be + broadcastable to ``(batch_size, M, D)``, where + D is the latent alphabet size. Should be normalized to one along the + final axis, i.e. ``precursor_seq_logits.logsumexp(-1) = zeros``. + :param ~torch.Tensor insert_seq_logits: Insertion sequence *log(c)*. + Should have rightmost dimension ``(M+1, D)`` and be broadcastable + to ``(batch_size, M+1, D)``. Should be normalized + along the final axis. + :param ~torch.Tensor insert_logits: Insertion probabilities *log(r)*. + Should have rightmost dimension ``(M, 3, 2)`` and be broadcastable + to ``(batch_size, M, 3, 2)``. Should be normalized along the + final axis. + :param ~torch.Tensor delete_logits: Deletion probabilities *log(u)*. + Should have rightmost dimension ``(M, 3, 2)`` and be broadcastable + to ``(batch_size, M, 3, 2)``. Should be normalized along the + final axis. + :param ~torch.Tensor substitute_logits: Substitution probabilities + *log(l)*. Should have rightmost dimension ``(D, B)``, where + B is the alphabet size of the data, and broadcastable to + ``(batch_size, D, B)``. Must be normalized along the + final axis. + :return: *initial_logits*, *transition_logits*, and + *observation_logits*. These parameters can be used to directly + initialize the MissingDataDiscreteHMM distribution. + :rtype: ~torch.Tensor, ~torch.Tensor, ~torch.Tensor + """ + initial_logits = ( + torch.einsum("...ijk,ijkl->...l", delete_logits, self.u_transf_0) + + torch.einsum("...ijk,ijkl->...l", insert_logits, self.r_transf_0) + + (-1 / self.epsilon) * self.null_transf_0 + ) + transition_logits = ( + torch.einsum("...ijk,ijklf->...lf", delete_logits, self.u_transf) + + torch.einsum("...ijk,ijklf->...lf", insert_logits, self.r_transf) + + (-1 / self.epsilon) * self.null_transf + ) + # Broadcasting for concatenation. + if len(precursor_seq_logits.size()) > len(insert_seq_logits.size()): + insert_seq_logits = insert_seq_logits.unsqueeze(0).expand( + [precursor_seq_logits.size()[0], -1, -1] + ) + elif len(insert_seq_logits.size()) > len(precursor_seq_logits.size()): + precursor_seq_logits = precursor_seq_logits.unsqueeze(0).expand( + [insert_seq_logits.size()[0], -1, -1] + ) + seq_logits = torch.cat([precursor_seq_logits, insert_seq_logits], dim=-2) + + # Option to include the substitution matrix. + if substitute_logits is not None: + observation_logits = torch.logsumexp( + seq_logits.unsqueeze(-1) + substitute_logits.unsqueeze(-3), dim=-2 + ) + else: + observation_logits = seq_logits + + return initial_logits, transition_logits, observation_logits + + +def mg2k(m, g, M): + """Convert from (m, g) indexing to k indexing.""" + return m + M * g diff --git a/pyro/source/pyro/contrib/oed/__init__.py b/pyro/source/pyro/contrib/oed/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..a60336c483df19443ca88037fe4f995f4d7723d9 --- /dev/null +++ b/pyro/source/pyro/contrib/oed/__init__.py @@ -0,0 +1,72 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +"""Tasks such as choosing the next question to ask in a psychology study, designing an election polling +strategy, and deciding which compounds to synthesize and test in biological sciences are all fundamentally asking the +same question: how do we design an experiment to maximize the information gathered? Pyro is designed to support +automated optimal experiment design: specifying a model and guide is enough to obtain optimal designs for many different +kinds of experiment scenarios. Check out our experimental design tutorials that use Pyro to +`design an adaptive psychology study `_ that uses past data to +select the next question, and `design an election polling strategy `_ that +aims to give the strongest prediction about the eventual winner of the election. + +Bayesian optimal experimental design (BOED) is a powerful methodology for tackling experimental design problems and +is the framework adopted by Pyro. +In the BOED framework, we begin with a Bayesian model with a likelihood :math:`p(y|\\theta,d)` and a prior +:math:`p(\\theta)` on the target latent variables. In Pyro, any fully Bayesian model can be used in the BOED framework. +The sample sites corresponding to experimental outcomes are the *observation* sites, those corresponding to +latent variables of interest are the *target* sites. The design :math:`d` is the argument to the model, and is not +a random variable. + +In the BOED framework, we choose the design that optimizes the expected information gain (EIG) on the targets +:math:`\\theta` from running the experiment + + :math:`\\text{EIG}(d) = \\mathbf{E}_{p(y|d)} [H[p(\\theta)] − H[p(\\theta|y, d)]]` , + +where :math:`H[·]` represents the entropy and :math:`p(\\theta|y, d) \\propto p(\\theta)p(y|\\theta, d)` is the +posterior we get from +running the experiment with design :math:`d` and observing :math:`y`. In other words, the optimal design is the one +that, in expectation over possible future observations, most reduces posterior entropy +over the target latent variables. If the predictive model is correct, this forms a design strategy that is +(one-step) optimal from an information-theoretic viewpoint. For further details, see [1, 2]. + +The :mod:`pyro.contrib.oed` module provides tools to create optimal experimental +designs for Pyro models. In particular, it provides estimators for the +expected information gain (EIG). + +To estimate the EIG for a particular design, we first set up our Pyro model. For example:: + + def model(design): + + # This line allows batching of designs, treating all batch dimensions as independent + with pyro.plate_stack("plate_stack", design.shape): + + # We use a Normal prior for theta + theta = pyro.sample("theta", dist.Normal(torch.tensor(0.0), torch.tensor(1.0))) + + # We use a simple logistic regression model for the likelihood + logit_p = theta - design + y = pyro.sample("y", dist.Bernoulli(logits=logit_p)) + + return y + +We then select an appropriate EIG estimator, such as:: + + eig = nmc_eig(model, design, observation_labels=["y"], target_labels=["theta"], N=2500, M=50) + +It is possible to estimate the EIG across a grid of designs:: + + designs = torch.stack([design1, design2], dim=0) + +to find the best design from a number of options. + +[1] Chaloner, Kathryn, and Isabella Verdinelli. "Bayesian experimental design: A review." +Statistical Science (1995): 273-304. + +[2] Foster, Adam, et al. "Variational Bayesian Optimal Experimental Design." arXiv preprint arXiv:1903.05480 (2019). + +""" + +from pyro.contrib.oed import eig, search + +__all__ = ["search", "eig"] diff --git a/pyro/source/pyro/contrib/oed/eig.py b/pyro/source/pyro/contrib/oed/eig.py new file mode 100644 index 0000000000000000000000000000000000000000..81f4b17f51d79eb04c3737bfdf77c581fc5d9a5b --- /dev/null +++ b/pyro/source/pyro/contrib/oed/eig.py @@ -0,0 +1,1199 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math +import warnings + +import torch + +import pyro +from pyro import poutine +from pyro.contrib.oed.search import Search +from pyro.contrib.util import lexpand +from pyro.infer import SVI, EmpiricalMarginal, Importance +from pyro.infer.autoguide.utils import mean_field_entropy +from pyro.util import torch_isinf, torch_isnan + +__all__ = [ + "laplace_eig", + "vi_eig", + "nmc_eig", + "donsker_varadhan_eig", + "posterior_eig", + "marginal_eig", + "lfire_eig", + "vnmc_eig", +] + + +def laplace_eig( + model, + design, + observation_labels, + target_labels, + guide, + loss, + optim, + num_steps, + final_num_samples, + y_dist=None, + eig=True, + **prior_entropy_kwargs +): + """ + Estimates the expected information gain (EIG) by making repeated Laplace approximations to the posterior. + + :param function model: Pyro stochastic function taking `design` as only argument. + :param torch.Tensor design: Tensor of possible designs. + :param list observation_labels: labels of sample sites to be regarded as observables. + :param list target_labels: labels of sample sites to be regarded as latent variables of interest, i.e. the sites + that we wish to gain information about. + :param function guide: Pyro stochastic function corresponding to `model`. + :param loss: a Pyro loss such as `pyro.infer.Trace_ELBO().differentiable_loss`. + :param optim: optimizer for the loss + :param int num_steps: Number of gradient steps to take per sampled pseudo-observation. + :param int final_num_samples: Number of `y` samples (pseudo-observations) to take. + :param y_dist: Distribution to sample `y` from- if `None` we use the Bayesian marginal distribution. + :param bool eig: Whether to compute the EIG or the average posterior entropy (APE). The EIG is given by + `EIG = prior entropy - APE`. If `True`, the prior entropy will be estimated analytically, + or by Monte Carlo as appropriate for the `model`. If `False` the APE is returned. + :param dict prior_entropy_kwargs: parameters for estimating the prior entropy: `num_prior_samples` indicating the + number of samples for a MC estimate of prior entropy, and `mean_field` indicating if an analytic form for + a mean-field prior should be tried. + :return: EIG estimate, optionally includes full optimization history + :rtype: torch.Tensor + """ + + if isinstance(observation_labels, str): + observation_labels = [observation_labels] + if target_labels is not None and isinstance(target_labels, str): + target_labels = [target_labels] + + ape = _laplace_vi_ape( + model, + design, + observation_labels, + target_labels, + guide, + loss, + optim, + num_steps, + final_num_samples, + y_dist=y_dist, + ) + return _eig_from_ape(model, design, target_labels, ape, eig, prior_entropy_kwargs) + + +def _eig_from_ape(model, design, target_labels, ape, eig, prior_entropy_kwargs): + mean_field = prior_entropy_kwargs.get("mean_field", True) + if eig: + if mean_field: + try: + prior_entropy = mean_field_entropy( + model, [design], whitelist=target_labels + ) + except NotImplemented: + prior_entropy = monte_carlo_entropy( + model, design, target_labels, **prior_entropy_kwargs + ) + else: + prior_entropy = monte_carlo_entropy( + model, design, target_labels, **prior_entropy_kwargs + ) + return prior_entropy - ape + else: + return ape + + +def _laplace_vi_ape( + model, + design, + observation_labels, + target_labels, + guide, + loss, + optim, + num_steps, + final_num_samples, + y_dist=None, +): + def posterior_entropy(y_dist, design): + # Important that y_dist is sampled *within* the function + y = pyro.sample("conditioning_y", y_dist) + y_dict = {label: y[i, ...] for i, label in enumerate(observation_labels)} + conditioned_model = pyro.condition(model, data=y_dict) + # Here just using SVI to run the MAP optimization + guide.train() + svi = SVI(conditioned_model, guide=guide, loss=loss, optim=optim) + with poutine.block(): + for _ in range(num_steps): + svi.step(design) + # Recover the entropy + with poutine.block(): + final_loss = loss(conditioned_model, guide, design) + guide.finalize(final_loss, target_labels) + entropy = mean_field_entropy(guide, [design], whitelist=target_labels) + return entropy + + if y_dist is None: + y_dist = EmpiricalMarginal( + Importance(model, num_samples=final_num_samples).run(design), + sites=observation_labels, + ) + + # Calculate the expected posterior entropy under this distn of y + loss_dist = EmpiricalMarginal(Search(posterior_entropy).run(y_dist, design)) + ape = loss_dist.mean + + return ape + + +# Deprecated +def vi_eig( + model, + design, + observation_labels, + target_labels, + vi_parameters, + is_parameters, + y_dist=None, + eig=True, + **prior_entropy_kwargs +): + """.. deprecated:: 0.4.1 + Use `posterior_eig` instead. + + Estimates the expected information gain (EIG) using variational inference (VI). + + The APE is defined as + + :math:`APE(d)=E_{Y\\sim p(y|\\theta, d)}[H(p(\\theta|Y, d))]` + + where :math:`H[p(x)]` is the `differential entropy + `_. + The APE is related to expected information gain (EIG) by the equation + + :math:`EIG(d)=H[p(\\theta)]-APE(d)` + + in particular, minimising the APE is equivalent to maximising EIG. + + :param function model: A pyro model accepting `design` as only argument. + :param torch.Tensor design: Tensor representation of design + :param list observation_labels: A subset of the sample sites + present in `model`. These sites are regarded as future observations + and other sites are regarded as latent variables over which a + posterior is to be inferred. + :param list target_labels: A subset of the sample sites over which the posterior + entropy is to be measured. + :param dict vi_parameters: Variational inference parameters which should include: + `optim`: an instance of :class:`pyro.Optim`, `guide`: a guide function + compatible with `model`, `num_steps`: the number of VI steps to make, + and `loss`: the loss function to use for VI + :param dict is_parameters: Importance sampling parameters for the + marginal distribution of :math:`Y`. May include `num_samples`: the number + of samples to draw from the marginal. + :param pyro.distributions.Distribution y_dist: (optional) the distribution + assumed for the response variable :math:`Y` + :param bool eig: Whether to compute the EIG or the average posterior entropy (APE). The EIG is given by + `EIG = prior entropy - APE`. If `True`, the prior entropy will be estimated analytically, + or by Monte Carlo as appropriate for the `model`. If `False` the APE is returned. + :param dict prior_entropy_kwargs: parameters for estimating the prior entropy: `num_prior_samples` indicating the + number of samples for a MC estimate of prior entropy, and `mean_field` indicating if an analytic form for + a mean-field prior should be tried. + :return: EIG estimate, optionally includes full optimization history + :rtype: torch.Tensor + + """ + + warnings.warn( + "`vi_eig` is deprecated in favour of the amortized version: `posterior_eig`.", + DeprecationWarning, + ) + + if isinstance(observation_labels, str): + observation_labels = [observation_labels] + if target_labels is not None and isinstance(target_labels, str): + target_labels = [target_labels] + + ape = _vi_ape( + model, + design, + observation_labels, + target_labels, + vi_parameters, + is_parameters, + y_dist=y_dist, + ) + return _eig_from_ape(model, design, target_labels, ape, eig, prior_entropy_kwargs) + + +def _vi_ape( + model, + design, + observation_labels, + target_labels, + vi_parameters, + is_parameters, + y_dist=None, +): + svi_num_steps = vi_parameters.pop("num_steps") + + def posterior_entropy(y_dist, design): + # Important that y_dist is sampled *within* the function + y = pyro.sample("conditioning_y", y_dist) + y_dict = {label: y[i, ...] for i, label in enumerate(observation_labels)} + conditioned_model = pyro.condition(model, data=y_dict) + svi = SVI(conditioned_model, **vi_parameters) + with poutine.block(): + for _ in range(svi_num_steps): + svi.step(design) + # Recover the entropy + with poutine.block(): + guide = vi_parameters["guide"] + entropy = mean_field_entropy(guide, [design], whitelist=target_labels) + return entropy + + if y_dist is None: + y_dist = EmpiricalMarginal( + Importance(model, **is_parameters).run(design), sites=observation_labels + ) + + # Calculate the expected posterior entropy under this distn of y + loss_dist = EmpiricalMarginal(Search(posterior_entropy).run(y_dist, design)) + loss = loss_dist.mean + + return loss + + +def nmc_eig( + model, + design, + observation_labels, + target_labels=None, + N=100, + M=10, + M_prime=None, + independent_priors=False, +): + """Nested Monte Carlo estimate of the expected information + gain (EIG). The estimate is, when there are not any random effects, + + .. math:: + + \\frac{1}{N}\\sum_{n=1}^N \\log p(y_n | \\theta_n, d) - + \\frac{1}{N}\\sum_{n=1}^N \\log \\left(\\frac{1}{M}\\sum_{m=1}^M p(y_n | \\theta_m, d)\\right) + + where :math:`\\theta_n, y_n \\sim p(\\theta, y | d)` and :math:`\\theta_m \\sim p(\\theta)`. + The estimate in the presence of random effects is + + .. math:: + + \\frac{1}{N}\\sum_{n=1}^N \\log \\left(\\frac{1}{M'}\\sum_{m=1}^{M'} + p(y_n | \\theta_n, \\widetilde{\\theta}_{nm}, d)\\right)- + \\frac{1}{N}\\sum_{n=1}^N \\log \\left(\\frac{1}{M}\\sum_{m=1}^{M} + p(y_n | \\theta_m, \\widetilde{\\theta}_{m}, d)\\right) + + where :math:`\\widetilde{\\theta}` are the random effects with + :math:`\\widetilde{\\theta}_{nm} \\sim p(\\widetilde{\\theta}|\\theta=\\theta_n)` and + :math:`\\theta_m,\\widetilde{\\theta}_m \\sim p(\\theta,\\widetilde{\\theta})`. + The latter form is used when `M_prime != None`. + + :param function model: A pyro model accepting `design` as only argument. + :param torch.Tensor design: Tensor representation of design + :param list observation_labels: A subset of the sample sites + present in `model`. These sites are regarded as future observations + and other sites are regarded as latent variables over which a + posterior is to be inferred. + :param list target_labels: A subset of the sample sites over which the posterior + entropy is to be measured. + :param int N: Number of outer expectation samples. + :param int M: Number of inner expectation samples for `p(y|d)`. + :param int M_prime: Number of samples for `p(y | theta, d)` if required. + :param bool independent_priors: Only used when `M_prime` is not `None`. Indicates whether the prior distributions + for the target variables and the nuisance variables are independent. In this case, it is not necessary to + sample the targets conditional on the nuisance variables. + :return: EIG estimate, optionally includes full optimization history + :rtype: torch.Tensor + """ + + if isinstance(observation_labels, str): # list of strings instead of strings + observation_labels = [observation_labels] + if isinstance(target_labels, str): + target_labels = [target_labels] + + # Take N samples of the model + expanded_design = lexpand(design, N) # N copies of the model + trace = poutine.trace(model).get_trace(expanded_design) + trace.compute_log_prob() + + if M_prime is not None: + y_dict = { + l: lexpand(trace.nodes[l]["value"], M_prime) for l in observation_labels + } + theta_dict = { + l: lexpand(trace.nodes[l]["value"], M_prime) for l in target_labels + } + theta_dict.update(y_dict) + # Resample M values of u and compute conditional probabilities + # WARNING: currently the use of condition does not actually sample + # the conditional distribution! + # We need to use some importance weighting + conditional_model = pyro.condition(model, data=theta_dict) + if independent_priors: + reexpanded_design = lexpand(design, M_prime, 1) + else: + # Not acceptable to use (M_prime, 1) here - other variables may occur after + # theta, so need to be sampled conditional upon it + reexpanded_design = lexpand(design, M_prime, N) + retrace = poutine.trace(conditional_model).get_trace(reexpanded_design) + retrace.compute_log_prob() + conditional_lp = sum( + retrace.nodes[l]["log_prob"] for l in observation_labels + ).logsumexp(0) - math.log(M_prime) + else: + # This assumes that y are independent conditional on theta + # Furthermore assume that there are no other variables besides theta + conditional_lp = sum(trace.nodes[l]["log_prob"] for l in observation_labels) + + y_dict = {l: lexpand(trace.nodes[l]["value"], M) for l in observation_labels} + # Resample M values of theta and compute conditional probabilities + conditional_model = pyro.condition(model, data=y_dict) + # Using (M, 1) instead of (M, N) - acceptable to re-use thetas between ys because + # theta comes before y in graphical model + reexpanded_design = lexpand(design, M, 1) # sample M theta + retrace = poutine.trace(conditional_model).get_trace(reexpanded_design) + retrace.compute_log_prob() + marginal_lp = sum( + retrace.nodes[l]["log_prob"] for l in observation_labels + ).logsumexp(0) - math.log(M) + + terms = conditional_lp - marginal_lp + nonnan = (~torch.isnan(terms)).sum(0).type_as(terms) + terms[torch.isnan(terms)] = 0.0 + return terms.sum(0) / nonnan + + +def donsker_varadhan_eig( + model, + design, + observation_labels, + target_labels, + num_samples, + num_steps, + T, + optim, + return_history=False, + final_design=None, + final_num_samples=None, +): + """ + Donsker-Varadhan estimate of the expected information gain (EIG). + + The Donsker-Varadhan representation of EIG is + + .. math:: + + \\sup_T E_{p(y, \\theta | d)}[T(y, \\theta)] - \\log E_{p(y|d)p(\\theta)}[\\exp(T(\\bar{y}, \\bar{\\theta}))] + + where :math:`T` is any (measurable) function. + + This methods optimises the loss function over a pre-specified class of + functions `T`. + + :param function model: A pyro model accepting `design` as only argument. + :param torch.Tensor design: Tensor representation of design + :param list observation_labels: A subset of the sample sites + present in `model`. These sites are regarded as future observations + and other sites are regarded as latent variables over which a + posterior is to be inferred. + :param list target_labels: A subset of the sample sites over which the posterior + entropy is to be measured. + :param int num_samples: Number of samples per iteration. + :param int num_steps: Number of optimization steps. + :param function or torch.nn.Module T: optimisable function `T` for use in the + Donsker-Varadhan loss function. + :param pyro.optim.Optim optim: Optimiser to use. + :param bool return_history: If `True`, also returns a tensor giving the loss function + at each step of the optimization. + :param torch.Tensor final_design: The final design tensor to evaluate at. If `None`, uses + `design`. + :param int final_num_samples: The number of samples to use at the final evaluation, If `None, + uses `num_samples`. + :return: EIG estimate, optionally includes full optimization history + :rtype: torch.Tensor or tuple + """ + if isinstance(observation_labels, str): + observation_labels = [observation_labels] + if isinstance(target_labels, str): + target_labels = [target_labels] + loss = _donsker_varadhan_loss(model, T, observation_labels, target_labels) + return opt_eig_ape_loss( + design, + loss, + num_samples, + num_steps, + optim, + return_history, + final_design, + final_num_samples, + ) + + +def posterior_eig( + model, + design, + observation_labels, + target_labels, + num_samples, + num_steps, + guide, + optim, + return_history=False, + final_design=None, + final_num_samples=None, + eig=True, + prior_entropy_kwargs={}, + *args, + **kwargs +): + """ + Posterior estimate of expected information gain (EIG) computed from the average posterior entropy (APE) + using :math:`EIG(d) = H[p(\\theta)] - APE(d)`. See [1] for full details. + + The posterior representation of APE is + + :math:`\\sup_{q}\\ E_{p(y, \\theta | d)}[\\log q(\\theta | y, d)]` + + where :math:`q` is any distribution on :math:`\\theta`. + + This method optimises the loss over a given `guide` family representing :math:`q`. + + [1] Foster, Adam, et al. "Variational Bayesian Optimal Experimental Design." arXiv preprint arXiv:1903.05480 (2019). + + :param function model: A pyro model accepting `design` as only argument. + :param torch.Tensor design: Tensor representation of design + :param list observation_labels: A subset of the sample sites + present in `model`. These sites are regarded as future observations + and other sites are regarded as latent variables over which a + posterior is to be inferred. + :param list target_labels: A subset of the sample sites over which the posterior + entropy is to be measured. + :param int num_samples: Number of samples per iteration. + :param int num_steps: Number of optimization steps. + :param function guide: guide family for use in the (implicit) posterior estimation. + The parameters of `guide` are optimised to maximise the posterior + objective. + :param pyro.optim.Optim optim: Optimiser to use. + :param bool return_history: If `True`, also returns a tensor giving the loss function + at each step of the optimization. + :param torch.Tensor final_design: The final design tensor to evaluate at. If `None`, uses + `design`. + :param int final_num_samples: The number of samples to use at the final evaluation, If `None, + uses `num_samples`. + :param bool eig: Whether to compute the EIG or the average posterior entropy (APE). The EIG is given by + `EIG = prior entropy - APE`. If `True`, the prior entropy will be estimated analytically, + or by Monte Carlo as appropriate for the `model`. If `False` the APE is returned. + :param dict prior_entropy_kwargs: parameters for estimating the prior entropy: `num_prior_samples` indicating the + number of samples for a MC estimate of prior entropy, and `mean_field` indicating if an analytic form for + a mean-field prior should be tried. + :return: EIG estimate, optionally includes full optimization history + :rtype: torch.Tensor or tuple + """ + if isinstance(observation_labels, str): + observation_labels = [observation_labels] + if isinstance(target_labels, str): + target_labels = [target_labels] + + ape = _posterior_ape( + model, + design, + observation_labels, + target_labels, + num_samples, + num_steps, + guide, + optim, + return_history=return_history, + final_design=final_design, + final_num_samples=final_num_samples, + *args, + **kwargs + ) + return _eig_from_ape(model, design, target_labels, ape, eig, prior_entropy_kwargs) + + +def _posterior_ape( + model, + design, + observation_labels, + target_labels, + num_samples, + num_steps, + guide, + optim, + return_history=False, + final_design=None, + final_num_samples=None, + *args, + **kwargs +): + loss = _posterior_loss( + model, guide, observation_labels, target_labels, *args, **kwargs + ) + return opt_eig_ape_loss( + design, + loss, + num_samples, + num_steps, + optim, + return_history, + final_design, + final_num_samples, + ) + + +def marginal_eig( + model, + design, + observation_labels, + target_labels, + num_samples, + num_steps, + guide, + optim, + return_history=False, + final_design=None, + final_num_samples=None, +): + """Estimate EIG by estimating the marginal entropy :math:`p(y|d)`. See [1] for full details. + + The marginal representation of EIG is + + :math:`\\inf_{q}\\ E_{p(y, \\theta | d)}\\left[\\log \\frac{p(y | \\theta, d)}{q(y | d)} \\right]` + + where :math:`q` is any distribution on :math:`y`. A variational family for :math:`q` is specified in the `guide`. + + .. warning :: This method does **not** estimate the correct quantity in the presence of random effects. + + [1] Foster, Adam, et al. "Variational Bayesian Optimal Experimental Design." arXiv preprint arXiv:1903.05480 (2019). + + :param function model: A pyro model accepting `design` as only argument. + :param torch.Tensor design: Tensor representation of design + :param list observation_labels: A subset of the sample sites + present in `model`. These sites are regarded as future observations + and other sites are regarded as latent variables over which a + posterior is to be inferred. + :param list target_labels: A subset of the sample sites over which the posterior + entropy is to be measured. + :param int num_samples: Number of samples per iteration. + :param int num_steps: Number of optimization steps. + :param function guide: guide family for use in the marginal estimation. + The parameters of `guide` are optimised to maximise the log-likelihood objective. + :param pyro.optim.Optim optim: Optimiser to use. + :param bool return_history: If `True`, also returns a tensor giving the loss function + at each step of the optimization. + :param torch.Tensor final_design: The final design tensor to evaluate at. If `None`, uses + `design`. + :param int final_num_samples: The number of samples to use at the final evaluation, If `None, + uses `num_samples`. + :return: EIG estimate, optionally includes full optimization history + :rtype: torch.Tensor or tuple + """ + + if isinstance(observation_labels, str): + observation_labels = [observation_labels] + if isinstance(target_labels, str): + target_labels = [target_labels] + loss = _marginal_loss(model, guide, observation_labels, target_labels) + return opt_eig_ape_loss( + design, + loss, + num_samples, + num_steps, + optim, + return_history, + final_design, + final_num_samples, + ) + + +def marginal_likelihood_eig( + model, + design, + observation_labels, + target_labels, + num_samples, + num_steps, + marginal_guide, + cond_guide, + optim, + return_history=False, + final_design=None, + final_num_samples=None, +): + """Estimates EIG by estimating the marginal entropy, that of :math:`p(y|d)`, + *and* the conditional entropy, of :math:`p(y|\\theta, d)`, both via Gibbs' Inequality. See [1] for full details. + + [1] Foster, Adam, et al. "Variational Bayesian Optimal Experimental Design." arXiv preprint arXiv:1903.05480 (2019). + + :param function model: A pyro model accepting `design` as only argument. + :param torch.Tensor design: Tensor representation of design + :param list observation_labels: A subset of the sample sites + present in `model`. These sites are regarded as future observations + and other sites are regarded as latent variables over which a + posterior is to be inferred. + :param list target_labels: A subset of the sample sites over which the posterior + entropy is to be measured. + :param int num_samples: Number of samples per iteration. + :param int num_steps: Number of optimization steps. + :param function marginal_guide: guide family for use in the marginal estimation. + The parameters of `guide` are optimised to maximise the log-likelihood objective. + :param function cond_guide: guide family for use in the likelihood (conditional) estimation. + The parameters of `guide` are optimised to maximise the log-likelihood objective. + :param pyro.optim.Optim optim: Optimiser to use. + :param bool return_history: If `True`, also returns a tensor giving the loss function + at each step of the optimization. + :param torch.Tensor final_design: The final design tensor to evaluate at. If `None`, uses + `design`. + :param int final_num_samples: The number of samples to use at the final evaluation, If `None, + uses `num_samples`. + :return: EIG estimate, optionally includes full optimization history + :rtype: torch.Tensor or tuple + """ + + if isinstance(observation_labels, str): + observation_labels = [observation_labels] + if isinstance(target_labels, str): + target_labels = [target_labels] + loss = _marginal_likelihood_loss( + model, marginal_guide, cond_guide, observation_labels, target_labels + ) + return opt_eig_ape_loss( + design, + loss, + num_samples, + num_steps, + optim, + return_history, + final_design, + final_num_samples, + ) + + +def lfire_eig( + model, + design, + observation_labels, + target_labels, + num_y_samples, + num_theta_samples, + num_steps, + classifier, + optim, + return_history=False, + final_design=None, + final_num_samples=None, +): + """Estimates the EIG using the method of Likelihood-Free Inference by Ratio Estimation (LFIRE) as in [1]. + LFIRE is run separately for several samples of :math:`\\theta`. + + [1] Kleinegesse, Steven, and Michael Gutmann. "Efficient Bayesian Experimental Design for Implicit Models." + arXiv preprint arXiv:1810.09912 (2018). + + :param function model: A pyro model accepting `design` as only argument. + :param torch.Tensor design: Tensor representation of design + :param list observation_labels: A subset of the sample sites + present in `model`. These sites are regarded as future observations + and other sites are regarded as latent variables over which a + posterior is to be inferred. + :param list target_labels: A subset of the sample sites over which the posterior + entropy is to be measured. + :param int num_y_samples: Number of samples to take in :math:`y` for each :math:`\\theta`. + :param: int num_theta_samples: Number of initial samples in :math:`\\theta` to take. The likelihood ratio + is estimated by LFIRE for each sample. + :param int num_steps: Number of optimization steps. + :param function classifier: a Pytorch or Pyro classifier used to distinguish between samples of :math:`y` under + :math:`p(y|d)` and samples under :math:`p(y|\\theta,d)` for some :math:`\\theta`. + :param pyro.optim.Optim optim: Optimiser to use. + :param bool return_history: If `True`, also returns a tensor giving the loss function + at each step of the optimization. + :param torch.Tensor final_design: The final design tensor to evaluate at. If `None`, uses + `design`. + :param int final_num_samples: The number of samples to use at the final evaluation, If `None, + uses `num_samples`. + :return: EIG estimate, optionally includes full optimization history + :rtype: torch.Tensor or tuple + """ + if isinstance(observation_labels, str): + observation_labels = [observation_labels] + if isinstance(target_labels, str): + target_labels = [target_labels] + + # Take N samples of the model + expanded_design = lexpand(design, num_theta_samples) + trace = poutine.trace(model).get_trace(expanded_design) + + theta_dict = {l: trace.nodes[l]["value"] for l in target_labels} + cond_model = pyro.condition(model, data=theta_dict) + + loss = _lfire_loss(model, cond_model, classifier, observation_labels, target_labels) + out = opt_eig_ape_loss( + expanded_design, + loss, + num_y_samples, + num_steps, + optim, + return_history, + final_design, + final_num_samples, + ) + if return_history: + return out[0], out[1].sum(0) / num_theta_samples + else: + return out.sum(0) / num_theta_samples + + +def vnmc_eig( + model, + design, + observation_labels, + target_labels, + num_samples, + num_steps, + guide, + optim, + return_history=False, + final_design=None, + final_num_samples=None, +): + """Estimates the EIG using Variational Nested Monte Carlo (VNMC). The VNMC estimate [1] is + + .. math:: + + \\frac{1}{N}\\sum_{n=1}^N \\left[ \\log p(y_n | \\theta_n, d) - + \\log \\left(\\frac{1}{M}\\sum_{m=1}^M \\frac{p(\\theta_{mn})p(y_n | \\theta_{mn}, d)} + {q(\\theta_{mn} | y_n)} \\right) \\right] + + where :math:`q(\\theta | y)` is the learned variational posterior approximation and + :math:`\\theta_n, y_n \\sim p(\\theta, y | d)`, :math:`\\theta_{mn} \\sim q(\\theta|y=y_n)`. + + As :math:`N \\to \\infty` this is an upper bound on EIG. We minimise this upper bound by stochastic gradient + descent. + + .. warning :: This method cannot be used in the presence of random effects. + + [1] Foster, Adam, et al. "Variational Bayesian Optimal Experimental Design." arXiv preprint arXiv:1903.05480 (2019). + + :param function model: A pyro model accepting `design` as only argument. + :param torch.Tensor design: Tensor representation of design + :param list observation_labels: A subset of the sample sites + present in `model`. These sites are regarded as future observations + and other sites are regarded as latent variables over which a + posterior is to be inferred. + :param list target_labels: A subset of the sample sites over which the posterior + entropy is to be measured. + :param tuple num_samples: Number of (:math:`N, M`) samples per iteration. + :param int num_steps: Number of optimization steps. + :param function guide: guide family for use in the posterior estimation. + The parameters of `guide` are optimised to minimise the VNMC upper bound. + :param pyro.optim.Optim optim: Optimiser to use. + :param bool return_history: If `True`, also returns a tensor giving the loss function + at each step of the optimization. + :param torch.Tensor final_design: The final design tensor to evaluate at. If `None`, uses + `design`. + :param tuple final_num_samples: The number of (:math:`N, M`) samples to use at the final evaluation, If `None, + uses `num_samples`. + :return: EIG estimate, optionally includes full optimization history + :rtype: torch.Tensor or tuple + """ + if isinstance(observation_labels, str): + observation_labels = [observation_labels] + if isinstance(target_labels, str): + target_labels = [target_labels] + loss = _vnmc_eig_loss(model, guide, observation_labels, target_labels) + return opt_eig_ape_loss( + design, + loss, + num_samples, + num_steps, + optim, + return_history, + final_design, + final_num_samples, + ) + + +def opt_eig_ape_loss( + design, + loss_fn, + num_samples, + num_steps, + optim, + return_history=False, + final_design=None, + final_num_samples=None, +): + if final_design is None: + final_design = design + if final_num_samples is None: + final_num_samples = num_samples + + params = None + history = [] + for step in range(num_steps): + if params is not None: + pyro.infer.util.zero_grads(params) + with poutine.trace(param_only=True) as param_capture: + agg_loss, loss = loss_fn(design, num_samples, evaluation=return_history) + params = set( + site["value"].unconstrained() for site in param_capture.trace.nodes.values() + ) + if torch.isnan(agg_loss): + raise ArithmeticError("Encountered NaN loss in opt_eig_ape_loss") + agg_loss.backward(retain_graph=True) + if return_history: + history.append(loss) + optim(params) + try: + optim.step() + except AttributeError: + pass + + _, loss = loss_fn(final_design, final_num_samples, evaluation=True) + if return_history: + return torch.stack(history), loss + else: + return loss + + +def monte_carlo_entropy(model, design, target_labels, num_prior_samples=1000): + """Computes a Monte Carlo estimate of the entropy of `model` assuming that each of sites in `target_labels` is + independent and the entropy is to be computed for that subset of sites only. + """ + + if isinstance(target_labels, str): + target_labels = [target_labels] + + expanded_design = lexpand(design, num_prior_samples) + trace = pyro.poutine.trace(model).get_trace(expanded_design) + trace.compute_log_prob() + lp = sum(trace.nodes[l]["log_prob"] for l in target_labels) + return -lp.sum(0) / num_prior_samples + + +def _donsker_varadhan_loss(model, T, observation_labels, target_labels): + """DV loss: to evaluate directly use `donsker_varadhan_eig` setting `num_steps=0`.""" + + ewma_log = EwmaLog(alpha=0.90) + + def loss_fn(design, num_particles, **kwargs): + try: + pyro.module("T", T) + except AssertionError: + pass + + expanded_design = lexpand(design, num_particles) + + # Unshuffled data + unshuffled_trace = poutine.trace(model).get_trace(expanded_design) + y_dict = {l: unshuffled_trace.nodes[l]["value"] for l in observation_labels} + + # Shuffled data + # Not actually shuffling, resimulate for safety + conditional_model = pyro.condition(model, data=y_dict) + shuffled_trace = poutine.trace(conditional_model).get_trace(expanded_design) + + T_joint = T( + expanded_design, unshuffled_trace, observation_labels, target_labels + ) + T_independent = T( + expanded_design, shuffled_trace, observation_labels, target_labels + ) + + joint_expectation = T_joint.sum(0) / num_particles + + A = T_independent - math.log(num_particles) + s, _ = torch.max(A, dim=0) + independent_expectation = s + ewma_log((A - s).exp().sum(dim=0), s) + + loss = joint_expectation - independent_expectation + # Switch sign, sum over batch dimensions for scalar loss + agg_loss = -loss.sum() + return agg_loss, loss + + return loss_fn + + +def _posterior_loss( + model, guide, observation_labels, target_labels, analytic_entropy=False +): + """Posterior loss: to evaluate directly use `posterior_eig` setting `num_steps=0`, `eig=False`.""" + + def loss_fn(design, num_particles, evaluation=False, **kwargs): + expanded_design = lexpand(design, num_particles) + + # Sample from p(y, theta | d) + trace = poutine.trace(model).get_trace(expanded_design) + y_dict = {l: trace.nodes[l]["value"] for l in observation_labels} + theta_dict = {l: trace.nodes[l]["value"] for l in target_labels} + + # Run through q(theta | y, d) + conditional_guide = pyro.condition(guide, data=theta_dict) + cond_trace = poutine.trace(conditional_guide).get_trace( + y_dict, expanded_design, observation_labels, target_labels + ) + cond_trace.compute_log_prob() + if evaluation and analytic_entropy: + loss = ( + mean_field_entropy( + guide, + [y_dict, expanded_design, observation_labels, target_labels], + whitelist=target_labels, + ).sum(0) + / num_particles + ) + agg_loss = loss.sum() + else: + terms = -sum(cond_trace.nodes[l]["log_prob"] for l in target_labels) + agg_loss, loss = _safe_mean_terms(terms) + + return agg_loss, loss + + return loss_fn + + +def _marginal_loss(model, guide, observation_labels, target_labels): + """Marginal loss: to evaluate directly use `marginal_eig` setting `num_steps=0`.""" + + def loss_fn(design, num_particles, evaluation=False, **kwargs): + expanded_design = lexpand(design, num_particles) + + # Sample from p(y | d) + trace = poutine.trace(model).get_trace(expanded_design) + y_dict = {l: trace.nodes[l]["value"] for l in observation_labels} + + # Run through q(y | d) + conditional_guide = pyro.condition(guide, data=y_dict) + cond_trace = poutine.trace(conditional_guide).get_trace( + expanded_design, observation_labels, target_labels + ) + cond_trace.compute_log_prob() + + terms = -sum(cond_trace.nodes[l]["log_prob"] for l in observation_labels) + + # At eval time, add p(y | theta, d) terms + if evaluation: + trace.compute_log_prob() + terms += sum(trace.nodes[l]["log_prob"] for l in observation_labels) + + return _safe_mean_terms(terms) + + return loss_fn + + +def _marginal_likelihood_loss( + model, marginal_guide, likelihood_guide, observation_labels, target_labels +): + """Marginal_likelihood loss: to evaluate directly use `marginal_likelihood_eig` setting `num_steps=0`.""" + + def loss_fn(design, num_particles, evaluation=False, **kwargs): + expanded_design = lexpand(design, num_particles) + + # Sample from p(y | d) + trace = poutine.trace(model).get_trace(expanded_design) + y_dict = {l: trace.nodes[l]["value"] for l in observation_labels} + theta_dict = {l: trace.nodes[l]["value"] for l in target_labels} + + # Run through q(y | d) + qyd = pyro.condition(marginal_guide, data=y_dict) + marginal_trace = poutine.trace(qyd).get_trace( + expanded_design, observation_labels, target_labels + ) + marginal_trace.compute_log_prob() + + # Run through q(y | theta, d) + qythetad = pyro.condition(likelihood_guide, data=y_dict) + cond_trace = poutine.trace(qythetad).get_trace( + theta_dict, expanded_design, observation_labels, target_labels + ) + cond_trace.compute_log_prob() + terms = -sum(marginal_trace.nodes[l]["log_prob"] for l in observation_labels) + + # At evaluation time, use the right estimator, q(y | theta, d) - q(y | d) + # At training time, use -q(y | theta, d) - q(y | d) so gradients go the same way + if evaluation: + terms += sum(cond_trace.nodes[l]["log_prob"] for l in observation_labels) + else: + terms -= sum(cond_trace.nodes[l]["log_prob"] for l in observation_labels) + + return _safe_mean_terms(terms) + + return loss_fn + + +def _lfire_loss( + model_marginal, model_conditional, h, observation_labels, target_labels +): + """LFIRE loss: to evaluate directly use `lfire_eig` setting `num_steps=0`.""" + + def loss_fn(design, num_particles, evaluation=False, **kwargs): + try: + pyro.module("h", h) + except AssertionError: + pass + + expanded_design = lexpand(design, num_particles) + model_conditional_trace = poutine.trace(model_conditional).get_trace( + expanded_design + ) + + if not evaluation: + model_marginal_trace = poutine.trace(model_marginal).get_trace( + expanded_design + ) + + h_joint = h( + expanded_design, + model_conditional_trace, + observation_labels, + target_labels, + ) + h_independent = h( + expanded_design, model_marginal_trace, observation_labels, target_labels + ) + + terms = torch.nn.functional.softplus( + -h_joint + ) + torch.nn.functional.softplus(h_independent) + return _safe_mean_terms(terms) + + else: + h_joint = h( + expanded_design, + model_conditional_trace, + observation_labels, + target_labels, + ) + return _safe_mean_terms(h_joint) + + return loss_fn + + +def _vnmc_eig_loss(model, guide, observation_labels, target_labels): + """VNMC loss: to evaluate directly use `vnmc_eig` setting `num_steps=0`.""" + + def loss_fn(design, num_particles, evaluation=False, **kwargs): + N, M = num_particles + expanded_design = lexpand(design, N) + + # Sample from p(y, theta | d) + trace = poutine.trace(model).get_trace(expanded_design) + y_dict = {l: lexpand(trace.nodes[l]["value"], M) for l in observation_labels} + + # Sample M times from q(theta | y, d) for each y + reexpanded_design = lexpand(expanded_design, M) + conditional_guide = pyro.condition(guide, data=y_dict) + guide_trace = poutine.trace(conditional_guide).get_trace( + y_dict, reexpanded_design, observation_labels, target_labels + ) + theta_y_dict = {l: guide_trace.nodes[l]["value"] for l in target_labels} + theta_y_dict.update(y_dict) + guide_trace.compute_log_prob() + + # Re-run that through the model to compute the joint + modelp = pyro.condition(model, data=theta_y_dict) + model_trace = poutine.trace(modelp).get_trace(reexpanded_design) + model_trace.compute_log_prob() + + terms = -sum(guide_trace.nodes[l]["log_prob"] for l in target_labels) + terms += sum(model_trace.nodes[l]["log_prob"] for l in target_labels) + terms += sum(model_trace.nodes[l]["log_prob"] for l in observation_labels) + terms = -terms.logsumexp(0) + math.log(M) + + # At eval time, add p(y | theta, d) terms + if evaluation: + trace.compute_log_prob() + terms += sum(trace.nodes[l]["log_prob"] for l in observation_labels) + + return _safe_mean_terms(terms) + + return loss_fn + + +def _safe_mean_terms(terms): + mask = torch.isnan(terms) | (terms == float("-inf")) | (terms == float("inf")) + if terms.dtype is torch.float32: + nonnan = (~mask).sum(0).float() + elif terms.dtype is torch.float64: + nonnan = (~mask).sum(0).double() + terms[mask] = 0.0 + loss = terms.sum(0) / nonnan + agg_loss = loss.sum() + return agg_loss, loss + + +def xexpx(a): + """Computes `a*exp(a)`. + + This function makes the outputs more stable when the inputs of this function converge to :math:`-\\infty`. + + :param torch.Tensor a: + :return: Equivalent of `a*torch.exp(a)`. + """ + mask = a == float("-inf") + y = a * torch.exp(a) + y[mask] = 0.0 + return y + + +class _EwmaLogFn(torch.autograd.Function): + @staticmethod + def forward(ctx, input, ewma): + ctx.save_for_backward(ewma) + return input.log() + + @staticmethod + def backward(ctx, grad_output): + (ewma,) = ctx.saved_tensors + return grad_output / ewma, None + + +_ewma_log_fn = _EwmaLogFn.apply + + +class EwmaLog: + """Logarithm function with exponentially weighted moving average + for gradients. + + For input `inputs` this function return :code:`inputs.log()`. However, it + computes the gradient as + + :math:`\\frac{\\sum_{t=0}^{T-1} \\alpha^t}{\\sum_{t=0}^{T-1} \\alpha^t x_{T-t}}` + + where :math:`x_t` are historical input values passed to this function, + :math:`x_T` being the most recently seen value. + + This gradient may help with numerical stability when the sequence of + inputs to the function form a convergent sequence. + """ + + def __init__(self, alpha): + self.alpha = alpha + self.ewma = 0.0 + self.n = 0 + self.s = 0.0 + + def __call__(self, inputs, s, dim=0, keepdim=False): + """Updates the moving average, and returns :code:`inputs.log()`.""" + self.n += 1 + if torch_isnan(self.ewma) or torch_isinf(self.ewma): + ewma = inputs + else: + ewma = inputs * (1.0 - self.alpha) / (1 - self.alpha**self.n) + torch.exp( + self.s - s + ) * self.ewma * (self.alpha - self.alpha**self.n) / ( + 1 - self.alpha**self.n + ) + self.ewma = ewma.detach() + self.s = s.detach() + return _ewma_log_fn(inputs, ewma) diff --git a/pyro/source/pyro/contrib/oed/glmm/__init__.py b/pyro/source/pyro/contrib/oed/glmm/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c17c2212134628f35109c002106f6de8c227868d --- /dev/null +++ b/pyro/source/pyro/contrib/oed/glmm/__init__.py @@ -0,0 +1,40 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +.. warning :: This module will eventually be deprecated in favor of `brmp `_ + +The :mod:`pyro.contrib.oed.glmm` module provides models and guides for +generalised linear mixed models (GLMM). It also includes the +Normal-inverse-gamma family. + +To create a classical Bayesian linear model, use:: + + from pyro.contrib.oed.glmm import known_covariance_linear_model + + # Note: coef is a p-vector, observation_sd is a scalar + # Here, p=1 (one feature) + model = known_covariance_linear_model(coef_mean=torch.tensor([0.]), + coef_sd=torch.tensor([10.]), + observation_sd=torch.tensor(2.)) + + # An n x p design tensor + # Here, n=2 (two observations) + design = torch.tensor(torch.tensor([[1.], [-1.]])) + + model(design) + +A non-linear link function may be introduced, for instance:: + + from pyro.contrib.oed.glmm import logistic_regression_model + + # No observation_sd is needed for logistic models + model = logistic_regression_model(coef_mean=torch.tensor([0.]), + coef_sd=torch.tensor([10.])) + +Random effects may be incorporated as regular Bayesian regression coefficients. +For random effects with a shared covariance matrix, see :meth:`pyro.contrib.oed.glmm.lmer_model`. +""" + +from pyro.contrib.oed.glmm import guides # noqa: F401 +from pyro.contrib.oed.glmm.glmm import * # noqa: F403,F401 diff --git a/pyro/source/pyro/contrib/oed/glmm/glmm.py b/pyro/source/pyro/contrib/oed/glmm/glmm.py new file mode 100644 index 0000000000000000000000000000000000000000..00e8ee2efa05a2fbc486ee01ef501edeb05f5d41 --- /dev/null +++ b/pyro/source/pyro/contrib/oed/glmm/glmm.py @@ -0,0 +1,467 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import warnings +from collections import OrderedDict +from contextlib import ExitStack +from functools import partial + +import torch +from torch.distributions import constraints +from torch.distributions.transforms import AffineTransform, SigmoidTransform +from torch.nn.functional import softplus + +import pyro +import pyro.distributions as dist +from pyro.contrib.util import iter_plates_to_shape, rmv + +# TODO read from torch float spec +epsilon = torch.tensor(2**-24) + + +def known_covariance_linear_model( + coef_means, coef_sds, observation_sd, coef_labels="w", observation_label="y" +): + if not isinstance(coef_means, list): + coef_means = [coef_means] + if not isinstance(coef_sds, list): + coef_sds = [coef_sds] + if not isinstance(coef_labels, list): + coef_labels = [coef_labels] + + model = partial( + bayesian_linear_model, + w_means=OrderedDict( + [(label, mean) for label, mean in zip(coef_labels, coef_means)] + ), + w_sqrtlambdas=OrderedDict( + [ + (label, 1.0 / (observation_sd * sd)) + for label, sd in zip(coef_labels, coef_sds) + ] + ), + obs_sd=observation_sd, + response_label=observation_label, + ) + # For computing the true EIG + model.obs_sd = observation_sd + model.w_sds = OrderedDict([(label, sd) for label, sd in zip(coef_labels, coef_sds)]) + model.w_sizes = OrderedDict( + [(label, sd.shape[-1]) for label, sd in zip(coef_labels, coef_sds)] + ) + model.observation_label = observation_label + model.coef_labels = coef_labels + return model + + +def normal_guide(observation_sd, coef_shape, coef_label="w"): + return partial( + normal_inv_gamma_family_guide, + obs_sd=observation_sd, + w_sizes={coef_label: coef_shape}, + ) + + +def group_linear_model( + coef1_mean, + coef1_sd, + coef2_mean, + coef2_sd, + observation_sd, + coef1_label="w1", + coef2_label="w2", + observation_label="y", +): + model = partial( + bayesian_linear_model, + w_means=OrderedDict([(coef1_label, coef1_mean), (coef2_label, coef2_mean)]), + w_sqrtlambdas=OrderedDict( + [ + (coef1_label, 1.0 / (observation_sd * coef1_sd)), + (coef2_label, 1.0 / (observation_sd * coef2_sd)), + ] + ), + obs_sd=observation_sd, + response_label=observation_label, + ) + model.obs_sd = observation_sd + model.w_sds = OrderedDict([(coef1_label, coef1_sd), (coef2_label, coef2_sd)]) + return model + + +def group_normal_guide( + observation_sd, coef1_shape, coef2_shape, coef1_label="w1", coef2_label="w2" +): + return partial( + normal_inv_gamma_family_guide, + w_sizes=OrderedDict([(coef1_label, coef1_shape), (coef2_label, coef2_shape)]), + obs_sd=observation_sd, + ) + + +def zero_mean_unit_obs_sd_lm(coef_sd, coef_label="w"): + model = known_covariance_linear_model( + torch.tensor(0.0), coef_sd, torch.tensor(1.0), coef_labels=coef_label + ) + guide = normal_guide(torch.tensor(1.0), coef_sd.shape, coef_label=coef_label) + return model, guide + + +def normal_inverse_gamma_linear_model( + coef_mean, coef_sqrtlambda, alpha, beta, coef_label="w", observation_label="y" +): + return partial( + bayesian_linear_model, + w_means={coef_label: coef_mean}, + w_sqrtlambdas={coef_label: coef_sqrtlambda}, + alpha_0=alpha, + beta_0=beta, + response_label=observation_label, + ) + + +def normal_inverse_gamma_guide(coef_shape, coef_label="w", **kwargs): + return partial( + normal_inv_gamma_family_guide, + obs_sd=None, + w_sizes={coef_label: coef_shape}, + **kwargs + ) + + +def logistic_regression_model( + coef_mean, coef_sd, coef_label="w", observation_label="y" +): + return partial( + bayesian_linear_model, + w_means={coef_label: coef_mean}, + w_sqrtlambdas={coef_label: 1.0 / coef_sd}, + obs_sd=torch.tensor(1.0), + response="bernoulli", + response_label=observation_label, + ) + + +def lmer_model( + fixed_effects_sd, + n_groups, + random_effects_alpha, + random_effects_beta, + fixed_effects_label="w", + random_effects_label="u", + observation_label="y", + response="normal", +): + return partial( + bayesian_linear_model, + w_means={fixed_effects_label: torch.tensor(0.0)}, + w_sqrtlambdas={fixed_effects_label: 1.0 / fixed_effects_sd}, + obs_sd=torch.tensor(1.0), + re_group_sizes={random_effects_label: n_groups}, + re_alphas={random_effects_label: random_effects_alpha}, + re_betas={random_effects_label: random_effects_beta}, + response=response, + response_label=observation_label, + ) + + +def sigmoid_model( + coef1_mean, + coef1_sd, + coef2_mean, + coef2_sd, + observation_sd, + sigmoid_alpha, + sigmoid_beta, + sigmoid_design, + coef1_label="w1", + coef2_label="w2", + observation_label="y", + sigmoid_label="k", +): + def model(design): + batch_shape = design.shape[:-2] + k_shape = batch_shape + (sigmoid_design.shape[-1],) + k = pyro.sample( + sigmoid_label, + dist.Gamma( + sigmoid_alpha.expand(k_shape), sigmoid_beta.expand(k_shape) + ).to_event(1), + ) + k_assigned = rmv(sigmoid_design, k) + + return bayesian_linear_model( + design, + w_means=OrderedDict([(coef1_label, coef1_mean), (coef2_label, coef2_mean)]), + w_sqrtlambdas={ + coef1_label: 1.0 / (observation_sd * coef1_sd), + coef2_label: 1.0 / (observation_sd * coef2_sd), + }, + obs_sd=observation_sd, + response="sigmoid", + response_label=observation_label, + k=k_assigned, + ) + + return model + + +def bayesian_linear_model( + design, + w_means={}, + w_sqrtlambdas={}, + re_group_sizes={}, + re_alphas={}, + re_betas={}, + obs_sd=None, + alpha_0=None, + beta_0=None, + response="normal", + response_label="y", + k=None, +): + """ + A pyro model for Bayesian linear regression. + + If :param:`response` is `"normal"` this corresponds to a linear regression + model + + :math:`Y = Xw + \\epsilon` + + with `\\epsilon`` i.i.d. zero-mean Gaussian. The observation standard deviation + (:param:`obs_sd`) may be known or unknown. If unknown, it is assumed to follow an + inverse Gamma distribution with parameters :param:`alpha_0` and :param:`beta_0`. + + If the response type is `"bernoulli"` we instead have :math:`Y \\sim Bernoulli(p)` + with + + :math:`logit(p) = Xw` + + Given parameter groups in :param:`w_means` and :param:`w_sqrtlambda`, the fixed effects + regression coefficient is taken to be Gaussian with mean `w_mean` and standard deviation + given by + + :math:`\\sigma / \\sqrt{\\lambda}` + + corresponding to the normal inverse Gamma family. + + The random effects coefficient is constructed as follows. For each random effect + group, standard deviations for that group are sampled from a normal inverse Gamma + distribution. For each group, a random effect coefficient is then sampled from a zero + mean Gaussian with those standard deviations. + + :param torch.Tensor design: a tensor with last two dimensions `n` and `p` + corresponding to observations and features respectively. + :param OrderedDict w_means: map from variable names to tensors of fixed effect means. + :param OrderedDict w_sqrtlambdas: map from variable names to tensors of square root + :math:`\\lambda` values for fixed effects. + :param OrderedDict re_group_sizes: map from variable names to int representing the + group size + :param OrderedDict re_alphas: map from variable names to `torch.Tensor`, the tensor + consists of Gamma dist :math:`\\alpha` values + :param OrderedDict re_betas: map from variable names to `torch.Tensor`, the tensor + consists of Gamma dist :math:`\\beta` values + :param torch.Tensor obs_sd: the observation standard deviation (if assumed known). + This is still relevant in the case of Bernoulli observations when coefficeints + are sampled using `w_sqrtlambdas`. + :param torch.Tensor alpha_0: Gamma :math:`\\alpha` parameter for unknown observation + covariance. + :param torch.Tensor beta_0: Gamma :math:`\\beta` parameter for unknown observation + covariance. + :param str response: Emission distribution. May be `"normal"` or `"bernoulli"`. + :param str response_label: Variable label for response. + :param torch.Tensor k: Only used for a sigmoid response. The slope of the sigmoid + transformation. + """ + # design is size batch x n x p + # tau is size batch + batch_shape = design.shape[:-2] + with ExitStack() as stack: + for plate in iter_plates_to_shape(batch_shape): + stack.enter_context(plate) + + if obs_sd is None: + # First, sample tau (observation precision) + tau_prior = dist.Gamma( + alpha_0.unsqueeze(-1), beta_0.unsqueeze(-1) + ).to_event(1) + tau = pyro.sample("tau", tau_prior) + obs_sd = 1.0 / torch.sqrt(tau) + + elif alpha_0 is not None or beta_0 is not None: + warnings.warn( + "Values of `alpha_0` and `beta_0` unused becased" + "`obs_sd` was specified already." + ) + + obs_sd = obs_sd.expand(batch_shape + (1,)) + + # Build the regression coefficient + w = [] + # Allow different names for different coefficient groups + # Process fixed effects + for name, w_sqrtlambda in w_sqrtlambdas.items(): + w_mean = w_means[name] + # Place a normal prior on the regression coefficient + w_prior = dist.Normal(w_mean, obs_sd / w_sqrtlambda).to_event(1) + w.append(pyro.sample(name, w_prior)) + # Process random effects + for name, group_size in re_group_sizes.items(): + # Sample `G` once for this group + alpha, beta = re_alphas[name], re_betas[name] + G_prior = dist.Gamma(alpha, beta).to_event(1) + G = 1.0 / torch.sqrt(pyro.sample("G_" + name, G_prior)) + # Repeat `G` for each group + repeat_shape = tuple(1 for _ in batch_shape) + (group_size,) + u_prior = dist.Normal(torch.tensor(0.0), G.repeat(repeat_shape)).to_event(1) + w.append(pyro.sample(name, u_prior)) + # Regression coefficient `w` is batch x p + w = broadcast_cat(w) + + # Run the regressor forward conditioned on inputs + prediction_mean = rmv(design, w) + if response == "normal": + # y is an n-vector: hence use .to_event(1) + return pyro.sample( + response_label, dist.Normal(prediction_mean, obs_sd).to_event(1) + ) + elif response == "bernoulli": + return pyro.sample( + response_label, dist.Bernoulli(logits=prediction_mean).to_event(1) + ) + elif response == "sigmoid": + base_dist = dist.Normal(prediction_mean, obs_sd).to_event(1) + # You can add loc via the linear model itself + k = k.expand(prediction_mean.shape) + transforms = [ + AffineTransform(loc=torch.tensor(0.0), scale=k), + SigmoidTransform(), + ] + response_dist = dist.TransformedDistribution(base_dist, transforms) + return pyro.sample(response_label, response_dist) + else: + raise ValueError("Unknown response distribution: '{}'".format(response)) + + +# TODO replace this guide with one allowing correlation between +# regression coefficients (necessary!) +def normal_inv_gamma_family_guide(design, obs_sd, w_sizes, mf=False): + """Normal inverse Gamma family guide. + + If `obs_sd` is known, this is a multivariate Normal family with separate + parameters for each batch. `w` is sampled from a Gaussian with mean `mw_param` and + covariance matrix derived from `obs_sd * lambda_param` and the two parameters `mw_param` and `lambda_param` + are learned. + + If `obs_sd=None`, this is a four-parameter family. The observation precision + `tau` is sampled from a Gamma distribution with parameters `alpha`, `beta` + (separate for each batch). We let `obs_sd = 1./torch.sqrt(tau)` and then + proceed as above. + + :param torch.Tensor design: a tensor with last two dimensions `n` and `p` + corresponding to observations and features respectively. + :param torch.Tensor obs_sd: observation standard deviation, or `None` to use + inverse Gamma + :param OrderedDict w_sizes: map from variable names to torch.Size + """ + # design is size batch x n x p + # tau is size batch + tau_shape = design.shape[:-2] + with ExitStack() as stack: + for plate in iter_plates_to_shape(tau_shape): + stack.enter_context(plate) + + if obs_sd is None: + # First, sample tau (observation precision) + alpha = softplus( + pyro.param("invsoftplus_alpha", 20.0 * torch.ones(tau_shape)) + ) + beta = softplus( + pyro.param("invsoftplus_beta", 20.0 * torch.ones(tau_shape)) + ) + # Global variable + tau_prior = dist.Gamma(alpha, beta) + tau = pyro.sample("tau", tau_prior) + obs_sd = 1.0 / torch.sqrt(tau) + + # response will be shape batch x n + obs_sd = obs_sd.expand(tau_shape).unsqueeze(-1) + + for name, size in w_sizes.items(): + w_shape = tau_shape + size + # Set up mu and lambda + mw_param = pyro.param("{}_guide_mean".format(name), torch.zeros(w_shape)) + scale_tril = pyro.param( + "{}_guide_scale_tril".format(name), + torch.eye(*size).expand(tau_shape + size + size), + constraint=constraints.lower_cholesky, + ) + # guide distributions for w + if mf: + w_dist = dist.MultivariateNormal(mw_param, scale_tril=scale_tril) + else: + w_dist = dist.MultivariateNormal( + mw_param, scale_tril=obs_sd.unsqueeze(-1) * scale_tril + ) + pyro.sample(name, w_dist) + + +def group_assignment_matrix(design): + """Converts a one-dimensional tensor listing group sizes into a + two-dimensional binary tensor of indicator variables. + + :return: A :math:`n \times p` binary matrix where :math:`p` is + the length of `design` and :math:`n` is its sum. There are + :math:`n_i` ones in the :math:`i`th column. + :rtype: torch.tensor + + """ + n, p = int(torch.sum(design)), int(design.shape[0]) + X = torch.zeros(n, p) + t = 0 + for col, i in enumerate(design): + i = int(i) + if i > 0: + X[t : t + i, col] = 1.0 + t += i + if t < n: + X[t:, -1] = 1.0 + return X + + +def rf_group_assignments(n, random_intercept=True): + assert n % 2 == 0 + n_designs = n // 2 + 1 + participant_matrix = torch.eye(n) + Xs = [] + for i in range(n_designs): + X1 = group_assignment_matrix(torch.tensor([i, n // 2 - i])) + X2 = group_assignment_matrix(torch.tensor([n // 2 - i, i])) + X = torch.cat([X1, X2], dim=-2) + Xs.append(X) + X = torch.stack(Xs, dim=0) + if random_intercept: + X = torch.cat([X, participant_matrix.expand(n_designs, n, n)], dim=-1) + return X, participant_matrix + + +def analytic_posterior_cov(prior_cov, x, obs_sd): + """ + Given a prior covariance matrix and a design matrix `x`, + returns the covariance of the posterior under a Bayesian + linear regression model with design `x` and observation + noise `obs_sd`. + """ + # Use some kernel trick magic + p = prior_cov.shape[-1] + SigmaXX = prior_cov.mm(x.t().mm(x)) + posterior_cov = prior_cov - torch.inverse( + SigmaXX + (obs_sd**2) * torch.eye(p) + ).mm(SigmaXX.mm(prior_cov)) + return posterior_cov + + +def broadcast_cat(ws): + target = torch.broadcast_tensors(*(w[..., 0] for w in ws))[0].shape + expanded = [w.expand(target + (w.shape[-1],)) for w in ws] + return torch.cat(expanded, dim=-1) diff --git a/pyro/source/pyro/contrib/oed/glmm/guides.py b/pyro/source/pyro/contrib/oed/glmm/guides.py new file mode 100644 index 0000000000000000000000000000000000000000..698643547ad23384f6a69f9a9ce0ab50af21e8bf --- /dev/null +++ b/pyro/source/pyro/contrib/oed/glmm/guides.py @@ -0,0 +1,313 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from contextlib import ExitStack + +import torch +from torch import nn + +import pyro +import pyro.distributions as dist +from pyro import poutine +from pyro.contrib.util import ( + iter_plates_to_shape, + lexpand, + rmv, + rtril, + rvv, + tensor_to_dict, +) +from pyro.ops.linalg import rinverse + + +class LinearModelPosteriorGuide(nn.Module): + def __init__( + self, + d, + w_sizes, + y_sizes, + regressor_init=0.0, + scale_tril_init=3.0, + use_softplus=True, + **kwargs + ): + """ + Guide for linear models. No amortisation happens over designs. + Amortisation over data is taken care of by analytic formulae for + linear models (heavy use of truth). + + :param tuple d: the shape by which to expand the guide parameters, e.g. `(num_batches, num_designs)`. + :param dict w_sizes: map from variable string names to int, indicating the dimension of each + weight vector in the linear model. + :param float regressor_init: initial value for the regressor matrix used to learn the posterior mean. + :param float scale_tril_init: initial value for posterior `scale_tril` parameter. + :param bool use_softplus: whether to transform the regressor by a softplus transform: useful if the + regressor should be nonnegative but close to zero. + """ + super().__init__() + # Represent each parameter group as independent Gaussian + # Making a weak mean-field assumption + # To avoid this- combine labels + if not isinstance(d, (tuple, list, torch.Tensor)): + d = (d,) + self.regressor = nn.ParameterDict( + { + l: nn.Parameter( + regressor_init * torch.ones(*(d + (p, sum(y_sizes.values())))) + ) + for l, p in w_sizes.items() + } + ) + self.scale_tril = nn.ParameterDict( + { + l: nn.Parameter(scale_tril_init * lexpand(torch.eye(p), *d)) + for l, p in w_sizes.items() + } + ) + self.w_sizes = w_sizes + self.use_softplus = use_softplus + self.softplus = nn.Softplus() + + def get_params(self, y_dict, design, target_labels): + y = torch.cat(list(y_dict.values()), dim=-1) + return self.linear_model_formula(y, design, target_labels) + + def linear_model_formula(self, y, design, target_labels): + if self.use_softplus: + mu = {l: rmv(self.softplus(self.regressor[l]), y) for l in target_labels} + else: + mu = {l: rmv(self.regressor[l], y) for l in target_labels} + scale_tril = {l: rtril(self.scale_tril[l]) for l in target_labels} + + return mu, scale_tril + + def forward(self, y_dict, design, observation_labels, target_labels): + pyro.module("posterior_guide", self) + + # Returns two dicts from labels -> tensors + mu, scale_tril = self.get_params(y_dict, design, target_labels) + + for l in target_labels: + w_dist = dist.MultivariateNormal(mu[l], scale_tril=scale_tril[l]) + pyro.sample(l, w_dist) + + +class LinearModelLaplaceGuide(nn.Module): + """ + Laplace approximation for a (G)LM. + + :param tuple d: the shape by which to expand the guide parameters, e.g. `(num_batches, num_designs)`. + :param dict w_sizes: map from variable string names to int, indicating the dimension of each + weight vector in the linear model. + :param str tau_label: the label used for inverse variance parameter sample site, or `None` to indicate a + fixed variance. + :param float init_value: initial value for the posterior mean parameters. + """ + + def __init__(self, d, w_sizes, tau_label=None, init_value=0.1, **kwargs): + super().__init__() + # start in train mode + self.train() + if not isinstance(d, (tuple, list, torch.Tensor)): + d = (d,) + self.means = nn.ParameterDict() + if tau_label is not None: + w_sizes[tau_label] = 1 + for l, mu_l in tensor_to_dict( + w_sizes, init_value * torch.ones(*(d + (sum(w_sizes.values()),))) + ).items(): + self.means[l] = nn.Parameter(mu_l) + self.scale_trils = {} + self.w_sizes = w_sizes + + @staticmethod + def _hessian_diag(y, x, event_shape): + batch_shape = x.shape[: -len(event_shape)] + assert tuple(x.shape) == tuple(batch_shape) + tuple(event_shape) + + dy = torch.autograd.grad( + y, + [ + x, + ], + create_graph=True, + )[0] + H = [] + + # collapse independent dimensions into a single one, + # and dependent dimensions into another single one + batch_size = 1 + for batch_shape_dim in batch_shape: + batch_size *= batch_shape_dim + + event_size = 1 + for event_shape_dim in event_shape: + event_size *= event_shape_dim + + flat_dy = dy.reshape(batch_size, event_size) + + # loop over dependent part + for i in range(flat_dy.shape[-1]): + dyi = flat_dy.index_select(-1, torch.tensor([i])) + Hi = torch.autograd.grad( + [dyi], + [ + x, + ], + grad_outputs=[torch.ones_like(dyi)], + retain_graph=True, + )[0] + H.append(Hi) + H = torch.stack(H, -1).reshape(*(x.shape + event_shape)) + return H + + def finalize(self, loss, target_labels): + """ + Compute the Hessian of the parameters wrt ``loss`` + + :param torch.Tensor loss: the output of evaluating a loss function such as + `pyro.infer.Trace_ELBO().differentiable_loss` on the model, guide and design. + :param list target_labels: list indicating the sample sites that are targets, i.e. for which information gain + should be measured. + """ + # set self.training = False + self.eval() + for l, mu_l in self.means.items(): + if l not in target_labels: + continue + hess_l = self._hessian_diag(loss, mu_l, event_shape=(self.w_sizes[l],)) + cov_l = rinverse(hess_l) + self.scale_trils[l] = torch.linalg.cholesky( + cov_l.transpose(-2, -1) + ).transpose(-2, -1) + + def forward(self, design, target_labels=None): + """ + Sample the posterior. + + :param torch.Tensor design: tensor of possible designs. + :param list target_labels: list indicating the sample sites that are targets, i.e. for which information gain + should be measured. + """ + if target_labels is None: + target_labels = list(self.means.keys()) + + pyro.module("laplace_guide", self) + with ExitStack() as stack: + for plate in iter_plates_to_shape(design.shape[:-2]): + stack.enter_context(plate) + + if self.training: + # MAP via Delta guide + for l in target_labels: + w_dist = dist.Delta(self.means[l]).to_event(1) + pyro.sample(l, w_dist) + else: + # Laplace approximation via MVN with hessian + for l in target_labels: + w_dist = dist.MultivariateNormal( + self.means[l], scale_tril=self.scale_trils[l] + ) + pyro.sample(l, w_dist) + + +class SigmoidGuide(LinearModelPosteriorGuide): + def __init__(self, d, n, w_sizes, **kwargs): + super().__init__(d, w_sizes, **kwargs) + self.inverse_sigmoid_scale = nn.Parameter(torch.ones(n)) + self.h1_weight = nn.Parameter(torch.ones(n)) + self.h1_bias = nn.Parameter(torch.zeros(n)) + + def get_params(self, y_dict, design, target_labels): + y = torch.cat(list(y_dict.values()), dim=-1) + + # Approx invert transformation on y in expectation + y, y1m = y.clamp(1e-35, 1), (1.0 - y).clamp(1e-35, 1) + logited = y.log() - y1m.log() + y_trans = logited / 0.1 + y_trans = y_trans * self.inverse_sigmoid_scale + hidden = self.softplus(y_trans) + y_trans = y_trans + hidden * self.h1_weight + self.h1_bias + + return self.linear_model_formula(y_trans, design, target_labels) + + +class NormalInverseGammaGuide(LinearModelPosteriorGuide): + def __init__( + self, + d, + w_sizes, + mf=False, + tau_label="tau", + alpha_init=100.0, + b0_init=100.0, + **kwargs + ): + super().__init__(d, w_sizes, **kwargs) + self.alpha = nn.Parameter(alpha_init * torch.ones(d)) + self.b0 = nn.Parameter(b0_init * torch.ones(d)) + self.mf = mf + self.tau_label = tau_label + + def get_params(self, y_dict, design, target_labels): + y = torch.cat(list(y_dict.values()), dim=-1) + + coefficient_labels = [ + label for label in target_labels if label != self.tau_label + ] + mu, scale_tril = self.linear_model_formula(y, design, coefficient_labels) + mu_vec = torch.cat(list(mu.values()), dim=-1) + + yty = rvv(y, y) + ytxmu = rvv(y, rmv(design, mu_vec)) + beta = self.b0 + 0.5 * (yty - ytxmu) + + return mu, scale_tril, self.alpha, beta + + def forward(self, y_dict, design, observation_labels, target_labels): + pyro.module("ba_guide", self) + + mu, scale_tril, alpha, beta = self.get_params(y_dict, design, target_labels) + + if self.tau_label in target_labels: + tau_dist = dist.Gamma(alpha, beta) + tau = pyro.sample(self.tau_label, tau_dist) + obs_sd = 1.0 / tau.sqrt().unsqueeze(-1).unsqueeze(-1) + + for label in target_labels: + if label != self.tau_label: + if self.mf: + w_dist = dist.MultivariateNormal( + mu[label], scale_tril=scale_tril[label] + ) + else: + w_dist = dist.MultivariateNormal( + mu[label], scale_tril=scale_tril[label] * obs_sd + ) + pyro.sample(label, w_dist) + + +class GuideDV(nn.Module): + """A Donsker-Varadhan `T` family based on a guide family via + the relation `T = log p(theta) - log q(theta | y, d)` + """ + + def __init__(self, guide): + super().__init__() + self.guide = guide + + def forward(self, design, trace, observation_labels, target_labels): + trace.compute_log_prob() + prior_lp = sum(trace.nodes[l]["log_prob"] for l in target_labels) + y_dict = {l: trace.nodes[l]["value"] for l in observation_labels} + theta_dict = {l: trace.nodes[l]["value"] for l in target_labels} + + conditional_guide = pyro.condition(self.guide, data=theta_dict) + cond_trace = poutine.trace(conditional_guide).get_trace( + y_dict, design, observation_labels, target_labels + ) + cond_trace.compute_log_prob() + + posterior_lp = sum(cond_trace.nodes[l]["log_prob"] for l in target_labels) + + return posterior_lp - prior_lp diff --git a/pyro/source/pyro/contrib/oed/search.py b/pyro/source/pyro/contrib/oed/search.py new file mode 100644 index 0000000000000000000000000000000000000000..358eb87051be47c37d49976c991f9ede8abcb0cc --- /dev/null +++ b/pyro/source/pyro/contrib/oed/search.py @@ -0,0 +1,30 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import queue + +import pyro.poutine as poutine +from pyro.infer.abstract_infer import TracePosterior + +################################### +# Search borrowed from RSA example +################################### + + +class Search(TracePosterior): + """ + Exact inference by enumerating over all possible executions + """ + + def __init__(self, model, max_tries=int(1e6), **kwargs): + self.model = model + self.max_tries = max_tries + super().__init__(**kwargs) + + def _traces(self, *args, **kwargs): + q = queue.Queue() + q.put(poutine.Trace()) + p = poutine.trace(poutine.queue(self.model, queue=q, max_tries=self.max_tries)) + while not q.empty(): + tr = p.get_trace(*args, **kwargs) + yield tr, tr.log_prob_sum() diff --git a/pyro/source/pyro/contrib/oed/util.py b/pyro/source/pyro/contrib/oed/util.py new file mode 100644 index 0000000000000000000000000000000000000000..7dda8f4446e9c4b22d44e9e75ae39b2daf83b7ec --- /dev/null +++ b/pyro/source/pyro/contrib/oed/util.py @@ -0,0 +1,37 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import torch + +from pyro.contrib.oed.glmm import analytic_posterior_cov +from pyro.contrib.util import get_indices +from pyro.infer.autoguide.utils import mean_field_entropy + + +def linear_model_ground_truth( + model, design, observation_labels, target_labels, eig=True +): + if isinstance(target_labels, str): + target_labels = [target_labels] + + w_sd = torch.cat(list(model.w_sds.values()), dim=-1) + prior_cov = torch.diag(w_sd**2) + design_shape = design.shape + posterior_covs = [ + analytic_posterior_cov(prior_cov, x, model.obs_sd) + for x in torch.unbind(design.reshape(-1, design_shape[-2], design_shape[-1])) + ] + target_indices = get_indices(target_labels, tensors=model.w_sds) + target_posterior_covs = [ + S[target_indices, :][:, target_indices] for S in posterior_covs + ] + output = torch.tensor( + [0.5 * torch.logdet(2 * math.pi * math.e * C) for C in target_posterior_covs] + ) + if eig: + prior_entropy = mean_field_entropy(model, [design], whitelist=target_labels) + output = prior_entropy - output + + return output.reshape(design.shape[:-2]) diff --git a/pyro/source/pyro/contrib/randomvariable/__init__.py b/pyro/source/pyro/contrib/randomvariable/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..8abfb1c7234baae35c4a4df1ab5825ab84454a87 --- /dev/null +++ b/pyro/source/pyro/contrib/randomvariable/__init__.py @@ -0,0 +1,8 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from pyro.contrib.randomvariable.random_variable import RandomVariable + +__all__ = [ + "RandomVariable", +] diff --git a/pyro/source/pyro/contrib/randomvariable/random_variable.py b/pyro/source/pyro/contrib/randomvariable/random_variable.py new file mode 100644 index 0000000000000000000000000000000000000000..b3d7e66c203d8f56c5064676493282490c9d90f8 --- /dev/null +++ b/pyro/source/pyro/contrib/randomvariable/random_variable.py @@ -0,0 +1,175 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from typing import Union + +from torch import Tensor + +from pyro.distributions import TransformedDistribution +from pyro.distributions.transforms import ( + AbsTransform, + AffineTransform, + ExpTransform, + PowerTransform, + SigmoidTransform, + SoftmaxTransform, + TanhTransform, + Transform, +) + + +class RVMagicOps: + """Mixin class for overloading __magic__ operations on random variables.""" + + def __add__(self, x: Union[float, Tensor]): + return RandomVariable( + TransformedDistribution(self.distribution, AffineTransform(x, 1)) + ) + + def __radd__(self, x: Union[float, Tensor]): + return RandomVariable( + TransformedDistribution(self.distribution, AffineTransform(x, 1)) + ) + + def __sub__(self, x: Union[float, Tensor]): + return RandomVariable( + TransformedDistribution(self.distribution, AffineTransform(-x, 1)) + ) + + def __rsub__(self, x: Union[float, Tensor]): + return RandomVariable( + TransformedDistribution(self.distribution, AffineTransform(x, -1)) + ) + + def __mul__(self, x: Union[float, Tensor]): + return RandomVariable( + TransformedDistribution(self.distribution, AffineTransform(0, x)) + ) + + def __rmul__(self, x: Union[float, Tensor]): + return RandomVariable( + TransformedDistribution(self.distribution, AffineTransform(0, x)) + ) + + def __truediv__(self, x: Union[float, Tensor]): + return RandomVariable( + TransformedDistribution(self.distribution, AffineTransform(0, 1 / x)) + ) + + def __neg__(self): + return RandomVariable( + TransformedDistribution(self.distribution, AffineTransform(0, -1)) + ) + + def __abs__(self): + return RandomVariable( + TransformedDistribution(self.distribution, AbsTransform()) + ) + + def __pow__(self, x): + return RandomVariable( + TransformedDistribution(self.distribution, PowerTransform(x)) + ) + + +class RVChainOps: + """Mixin class for performing common unary/binary operations on/between + random variables/constant tensors using method chaining syntax. + """ + + def add(self, x): + return self + x + + def sub(self, x): + return self - x + + def mul(self, x): + return self * x + + def div(self, x): + return self / x + + def abs(self): + return abs(self) + + def pow(self, x): + return self**x + + def neg(self): + return -self + + def exp(self): + return self.transform(ExpTransform()) + + def log(self): + return self.transform(ExpTransform().inv) + + def sigmoid(self): + return self.transform(SigmoidTransform()) + + def tanh(self): + return self.transform(TanhTransform()) + + def softmax(self): + return self.transform(SoftmaxTransform()) + + +class RandomVariable(RVMagicOps, RVChainOps): + """EXPERIMENTAL random variable container class around a distribution + + Representation of a distribution interpreted as a random variable. Rather + than directly manipulating a probability density by applying pointwise + transformations to it, this allows for simple arithmetic transformations of + the random variable the distribution represents. For more flexibility, + consider using the `transform` method. Note that if you perform a + non-invertible transform (like `abs(X)` or `X**2`), certain things might + not work properly. + + Can switch between `RandomVariable` and `Distribution` objects with the + convenient `Distribution.rv` and `RandomVariable.dist` properties. + + Supports either chaining operations or arithmetic operator overloading. + + Example usage:: + + # This should be equivalent to an Exponential distribution. + RandomVariable(Uniform(0, 1)).log().neg().dist + + # These two distributions Y1, Y2 should be the same + X = Uniform(0, 1).rv + Y1 = X.mul(4).pow(0.5).sub(1).abs().neg().dist + Y2 = (-abs((4*X)**(0.5) - 1)).dist + """ + + def __init__(self, distribution): + """Wraps a distribution as a RandomVariable + + :param distribution: The `Distribution` object to wrap + :type distribution: ~pyro.distributions.distribution.Distribution + """ + self.distribution = distribution + + def transform(self, t: Transform): + """Performs a transformation on the distribution underlying the RV. + + :param t: The transformation (or sequence of transformations) to be + applied to the distribution. There are many examples to be found in + `torch.distributions.transforms` and `pyro.distributions.transforms`, + or you can subclass directly from `Transform`. + :type t: ~pyro.distributions.transforms.Transform + + :return: The transformed `RandomVariable` + :rtype: ~pyro.contrib.randomvariable.random_variable.RandomVariable + """ + dist = TransformedDistribution(self.distribution, t) + return RandomVariable(dist) + + @property + def dist(self): + """Convenience property for exposing the distribution underlying the + random variable. + + :return: The `Distribution` object underlying the random variable + :rtype: ~pyro.distributions.distribution.Distribution + """ + return self.distribution diff --git a/pyro/source/pyro/contrib/timeseries/__init__.py b/pyro/source/pyro/contrib/timeseries/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..4502744bc72f27a53d1d51c98e23cc14d0e7a1ed --- /dev/null +++ b/pyro/source/pyro/contrib/timeseries/__init__.py @@ -0,0 +1,24 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +The :mod:`pyro.contrib.timeseries` module provides a collection of Bayesian time series +models useful for forecasting applications. +""" +from pyro.contrib.timeseries.base import TimeSeriesModel +from pyro.contrib.timeseries.gp import ( + DependentMaternGP, + IndependentMaternGP, + LinearlyCoupledMaternGP, +) +from pyro.contrib.timeseries.lgssm import GenericLGSSM +from pyro.contrib.timeseries.lgssmgp import GenericLGSSMWithGPNoiseModel + +__all__ = [ + "DependentMaternGP", + "GenericLGSSM", + "GenericLGSSMWithGPNoiseModel", + "IndependentMaternGP", + "LinearlyCoupledMaternGP", + "TimeSeriesModel", +] diff --git a/pyro/source/pyro/contrib/timeseries/base.py b/pyro/source/pyro/contrib/timeseries/base.py new file mode 100644 index 0000000000000000000000000000000000000000..76d9e299a55907c113ecf658a8752500a43ad602 --- /dev/null +++ b/pyro/source/pyro/contrib/timeseries/base.py @@ -0,0 +1,49 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from pyro.nn import PyroModule, pyro_method + + +class TimeSeriesModel(PyroModule): + """ + Base class for univariate and multivariate time series models. + """ + + @pyro_method + def log_prob(self, targets): + """ + Log probability function. + + :param torch.Tensor targets: A 2-dimensional tensor of real-valued targets + of shape ``(T, obs_dim)``, where ``T`` is the length of the time series and ``obs_dim`` + is the dimension of the real-valued ``targets`` at each time step + :returns torch.Tensor: A 0-dimensional log probability for the case of properly + multivariate time series models in which the output dimensions are correlated; + otherwise returns a 1-dimensional tensor of log probabilities for batched + univariate time series models. + """ + raise NotImplementedError + + @pyro_method + def forecast(self, targets, dts): + """ + :param torch.Tensor targets: A 2-dimensional tensor of real-valued targets + of shape ``(T, obs_dim)``, where ``T`` is the length of the time series and ``obs_dim`` + is the dimension of the real-valued targets at each time step. These + represent the training data that are conditioned on for the purpose of making + forecasts. + :param torch.Tensor dts: A 1-dimensional tensor of times to forecast into the future, + with zero corresponding to the time of the final target ``targets[-1]``. + :returns torch.distributions.Distribution: Returns a predictive distribution with batch shape ``(S,)`` and + event shape ``(obs_dim,)``, where ``S`` is the size of ``dts``. That is, the resulting + predictive distributions do not encode correlations between distinct times in ``dts``. + """ + raise NotImplementedError + + def get_dist(self): + """ + Get a :class:`~pyro.distributions.Distribution` object corresponding to + this time series model. Often this is a + :class:`~pyro.distributions.GaussianHMM`. + """ + raise NotImplementedError diff --git a/pyro/source/pyro/contrib/timeseries/gp.py b/pyro/source/pyro/contrib/timeseries/gp.py new file mode 100644 index 0000000000000000000000000000000000000000..440ba0683fd78e5c934c8983d169e29ae53df63e --- /dev/null +++ b/pyro/source/pyro/contrib/timeseries/gp.py @@ -0,0 +1,568 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import torch +import torch.nn as nn +from torch.distributions import MultivariateNormal, constraints + +import pyro.distributions as dist +from pyro.contrib.timeseries.base import TimeSeriesModel +from pyro.nn import PyroParam, pyro_method +from pyro.ops.ssm_gp import MaternKernel +from pyro.ops.tensor_utils import block_diag_embed + + +class IndependentMaternGP(TimeSeriesModel): + """ + A time series model in which each output dimension is modeled independently + with a univariate Gaussian Process with a Matern kernel. The targets are assumed + to be evenly spaced in time. Training and inference are logarithmic in the length + of the time series T. + + :param float nu: The order of the Matern kernel; one of 0.5, 1.5 or 2.5. + :param float dt: The time spacing between neighboring observations of the time series. + :param int obs_dim: The dimension of the targets at each time step. + :param torch.Tensor length_scale_init: optional initial values for the kernel length scale + given as a ``obs_dim``-dimensional tensor + :param torch.Tensor kernel_scale_init: optional initial values for the kernel scale + given as a ``obs_dim``-dimensional tensor + :param torch.Tensor obs_noise_scale_init: optional initial values for the observation noise scale + given as a ``obs_dim``-dimensional tensor + """ + + def __init__( + self, + nu=1.5, + dt=1.0, + obs_dim=1, + length_scale_init=None, + kernel_scale_init=None, + obs_noise_scale_init=None, + ): + self.nu = nu + self.dt = dt + self.obs_dim = obs_dim + + if obs_noise_scale_init is None: + obs_noise_scale_init = 0.2 * torch.ones(obs_dim) + assert obs_noise_scale_init.shape == (obs_dim,) + + super().__init__() + + self.kernel = MaternKernel( + nu=nu, + num_gps=obs_dim, + length_scale_init=length_scale_init, + kernel_scale_init=kernel_scale_init, + ) + + self.obs_noise_scale = PyroParam( + obs_noise_scale_init, constraint=constraints.positive + ) + + obs_matrix = [1.0] + [0.0] * (self.kernel.state_dim - 1) + self.register_buffer("obs_matrix", torch.tensor(obs_matrix).unsqueeze(-1)) + + def _get_init_dist(self): + return torch.distributions.MultivariateNormal( + self.obs_matrix.new_zeros(self.obs_dim, self.kernel.state_dim), + self.kernel.stationary_covariance().squeeze(-3), + ) + + def _get_obs_dist(self): + return dist.Normal( + self.obs_matrix.new_zeros(self.obs_dim, 1, 1), + self.obs_noise_scale.unsqueeze(-1).unsqueeze(-1), + ).to_event(1) + + def get_dist(self, duration=None): + """ + Get the :class:`~pyro.distributions.GaussianHMM` distribution that corresponds + to ``obs_dim``-many independent Matern GPs. + + :param int duration: Optional size of the time axis ``event_shape[0]``. + This is required when sampling from homogeneous HMMs whose parameters + are not expanded along the time axis. + """ + trans_matrix, process_covar = self.kernel.transition_matrix_and_covariance( + dt=self.dt + ) + trans_dist = MultivariateNormal( + self.obs_matrix.new_zeros(self.obs_dim, 1, self.kernel.state_dim), + process_covar.unsqueeze(-3), + ) + trans_matrix = trans_matrix.unsqueeze(-3) + return dist.GaussianHMM( + self._get_init_dist(), + trans_matrix, + trans_dist, + self.obs_matrix, + self._get_obs_dist(), + duration=duration, + ) + + @pyro_method + def log_prob(self, targets): + """ + :param torch.Tensor targets: A 2-dimensional tensor of real-valued targets + of shape ``(T, obs_dim)``, where ``T`` is the length of the time series and ``obs_dim`` + is the dimension of the real-valued ``targets`` at each time step + :returns torch.Tensor: A 1-dimensional tensor of log probabilities of shape ``(obs_dim,)`` + """ + assert targets.dim() == 2 and targets.size(-1) == self.obs_dim + return self.get_dist().log_prob(targets.t().unsqueeze(-1)) + + @torch.no_grad() + def _filter(self, targets): + """ + Return the filtering state for the associated state space model. + """ + assert targets.dim() == 2 and targets.size(-1) == self.obs_dim + return self.get_dist().filter(targets.t().unsqueeze(-1)) + + @torch.no_grad() + def _forecast(self, dts, filtering_state, include_observation_noise=True): + """ + Internal helper for forecasting. + """ + assert dts.dim() == 1 + dts = dts.unsqueeze(-1).unsqueeze(-1).unsqueeze(-1) + trans_matrix, process_covar = self.kernel.transition_matrix_and_covariance( + dt=dts + ) + trans_matrix = trans_matrix[..., 0:1] + predicted_mean = torch.matmul( + filtering_state.loc.unsqueeze(-2), trans_matrix + ).squeeze(-2)[..., 0] + predicted_function_covar = ( + torch.matmul( + trans_matrix.transpose(-1, -2), + torch.matmul(filtering_state.covariance_matrix, trans_matrix), + )[..., 0, 0] + + process_covar[..., 0, 0] + ) + + if include_observation_noise: + predicted_function_covar = ( + predicted_function_covar + self.obs_noise_scale.pow(2.0) + ) + return predicted_mean, predicted_function_covar + + @pyro_method + def forecast(self, targets, dts): + """ + :param torch.Tensor targets: A 2-dimensional tensor of real-valued targets + of shape ``(T, obs_dim)``, where ``T`` is the length of the time series and ``obs_dim`` + is the dimension of the real-valued targets at each time step. These + represent the training data that are conditioned on for the purpose of making + forecasts. + :param torch.Tensor dts: A 1-dimensional tensor of times to forecast into the future, + with zero corresponding to the time of the final target ``targets[-1]``. + :returns torch.distributions.Normal: Returns a predictive Normal distribution with batch shape ``(S,)`` and + event shape ``(obs_dim,)``, where ``S`` is the size of ``dts``. + """ + filtering_state = self._filter(targets) + predicted_mean, predicted_covar = self._forecast(dts, filtering_state) + return torch.distributions.Normal(predicted_mean, predicted_covar.sqrt()) + + +class LinearlyCoupledMaternGP(TimeSeriesModel): + """ + A time series model in which each output dimension is modeled as a linear combination + of shared univariate Gaussian Processes with Matern kernels. + + In more detail, the generative process is: + + :math:`y_i(t) = \\sum_j A_{ij} f_j(t) + \\epsilon_i(t)` + + The targets :math:`y_i` are assumed to be evenly spaced in time. Training and inference + are logarithmic in the length of the time series T. + + :param float nu: The order of the Matern kernel; one of 0.5, 1.5 or 2.5. + :param float dt: The time spacing between neighboring observations of the time series. + :param int obs_dim: The dimension of the targets at each time step. + :param int num_gps: The number of independent GPs that are mixed to model the time series. + Typical values might be :math:`N_{\\rm gp} \\in [\\frac{D_{\\rm obs}}{2}, D_{\\rm obs}]` + :param torch.Tensor length_scale_init: optional initial values for the kernel length scale + given as a ``num_gps``-dimensional tensor + :param torch.Tensor kernel_scale_init: optional initial values for the kernel scale + given as a ``num_gps``-dimensional tensor + :param torch.Tensor obs_noise_scale_init: optional initial values for the observation noise scale + given as a ``obs_dim``-dimensional tensor + """ + + def __init__( + self, + nu=1.5, + dt=1.0, + obs_dim=2, + num_gps=1, + length_scale_init=None, + kernel_scale_init=None, + obs_noise_scale_init=None, + ): + self.nu = nu + self.dt = dt + assert obs_dim > 1, "If obs_dim==1 you should use IndependentMaternGP" + self.obs_dim = obs_dim + self.num_gps = num_gps + + if obs_noise_scale_init is None: + obs_noise_scale_init = 0.2 * torch.ones(obs_dim) + assert obs_noise_scale_init.shape == (obs_dim,) + + self.dt = dt + self.obs_dim = obs_dim + self.num_gps = num_gps + + super().__init__() + + self.kernel = MaternKernel( + nu=nu, + num_gps=num_gps, + length_scale_init=length_scale_init, + kernel_scale_init=kernel_scale_init, + ) + self.full_state_dim = num_gps * self.kernel.state_dim + + self.obs_noise_scale = PyroParam( + obs_noise_scale_init, constraint=constraints.positive + ) + self.A = nn.Parameter(0.3 * torch.randn(self.num_gps, self.obs_dim)) + + def _get_obs_matrix(self): + # (num_gps, obs_dim) => (state_dim * num_gps, obs_dim) + return self.A.repeat_interleave( + self.kernel.state_dim, dim=0 + ) * self.A.new_tensor([1.0] + [0.0] * (self.kernel.state_dim - 1)).repeat( + self.num_gps + ).unsqueeze( + -1 + ) + + def _stationary_covariance(self): + return block_diag_embed(self.kernel.stationary_covariance()) + + def _get_init_dist(self): + loc = self.A.new_zeros(self.full_state_dim) + return MultivariateNormal(loc, self._stationary_covariance()) + + def _get_obs_dist(self): + loc = self.A.new_zeros(self.obs_dim) + return dist.Normal(loc, self.obs_noise_scale).to_event(1) + + def get_dist(self, duration=None): + """ + Get the :class:`~pyro.distributions.GaussianHMM` distribution that corresponds + to a :class:`LinearlyCoupledMaternGP`. + + :param int duration: Optional size of the time axis ``event_shape[0]``. + This is required when sampling from homogeneous HMMs whose parameters + are not expanded along the time axis. + """ + trans_matrix, process_covar = self.kernel.transition_matrix_and_covariance( + dt=self.dt + ) + trans_matrix = block_diag_embed(trans_matrix) + process_covar = block_diag_embed(process_covar) + loc = self.A.new_zeros(self.full_state_dim) + trans_dist = MultivariateNormal(loc, process_covar) + return dist.GaussianHMM( + self._get_init_dist(), + trans_matrix, + trans_dist, + self._get_obs_matrix(), + self._get_obs_dist(), + duration=duration, + ) + + @pyro_method + def log_prob(self, targets): + """ + :param torch.Tensor targets: A 2-dimensional tensor of real-valued targets + of shape ``(T, obs_dim)``, where ``T`` is the length of the time series and ``obs_dim`` + is the dimension of the real-valued ``targets`` at each time step + :returns torch.Tensor: a (scalar) log probability + """ + assert targets.dim() == 2 and targets.size(-1) == self.obs_dim + return self.get_dist().log_prob(targets) + + @torch.no_grad() + def _filter(self, targets): + """ + Return the filtering state for the associated state space model. + """ + assert targets.dim() == 2 and targets.size(-1) == self.obs_dim + return self.get_dist().filter(targets) + + @torch.no_grad() + def _forecast( + self, dts, filtering_state, include_observation_noise=True, full_covar=True + ): + """ + Internal helper for forecasting. + """ + assert dts.dim() == 1 + dts = dts.unsqueeze(-1).unsqueeze(-1).unsqueeze(-1) + trans_mat, process_covar = self.kernel.transition_matrix_and_covariance(dt=dts) + trans_mat = block_diag_embed(trans_mat) # S x full_state_dim x full_state_dim + process_covar = block_diag_embed( + process_covar + ) # S x full_state_dim x full_state_dim + obs_matrix = self._get_obs_matrix() # full_state_dim x obs_dim + trans_obs = torch.matmul(trans_mat, obs_matrix) # S x full_state_dim x obs_dim + predicted_mean = torch.matmul( + filtering_state.loc.unsqueeze(-2), trans_obs + ).squeeze(-2) + predicted_function_covar = torch.matmul( + trans_obs.transpose(-1, -2), + torch.matmul(filtering_state.covariance_matrix, trans_obs), + ) + predicted_function_covar = predicted_function_covar + torch.matmul( + obs_matrix.transpose(-1, -2), torch.matmul(process_covar, obs_matrix) + ) + + if include_observation_noise: + obs_noise = self.obs_noise_scale.pow(2.0).diag_embed() + predicted_function_covar = predicted_function_covar + obs_noise + if not full_covar: + predicted_function_covar = predicted_function_covar.diagonal( + dim1=-1, dim2=-2 + ) + + return predicted_mean, predicted_function_covar + + @pyro_method + def forecast(self, targets, dts): + """ + :param torch.Tensor targets: A 2-dimensional tensor of real-valued targets + of shape ``(T, obs_dim)``, where ``T`` is the length of the time series and ``obs_dim`` + is the dimension of the real-valued targets at each time step. These + represent the training data that are conditioned on for the purpose of making + forecasts. + :param torch.Tensor dts: A 1-dimensional tensor of times to forecast into the future, + with zero corresponding to the time of the final target ``targets[-1]``. + :returns torch.distributions.MultivariateNormal: Returns a predictive MultivariateNormal + distribution with batch shape ``(S,)`` and event shape ``(obs_dim,)``, + where ``S`` is the size of ``dts``. + """ + filtering_state = self._filter(targets) + predicted_mean, predicted_covar = self._forecast(dts, filtering_state) + return MultivariateNormal(predicted_mean, predicted_covar) + + +class DependentMaternGP(TimeSeriesModel): + """ + A time series model in which each output dimension is modeled as a univariate Gaussian Process + with a Matern kernel. The different output dimensions become correlated because the Gaussian + Processes are driven by a correlated Wiener process; see reference [1] for details. + If, in addition, `linearly_coupled` is True, additional correlation is achieved through + linear mixing as in :class:`LinearlyCoupledMaternGP`. The targets are assumed to be evenly + spaced in time. Training and inference are logarithmic in the length of the time series T. + + :param float nu: The order of the Matern kernel; must be 1.5. + :param float dt: The time spacing between neighboring observations of the time series. + :param int obs_dim: The dimension of the targets at each time step. + :param bool linearly_coupled: Whether to linearly mix the various gaussian processes in the likelihood. + Defaults to False. + :param torch.Tensor length_scale_init: optional initial values for the kernel length scale + given as a ``obs_dim``-dimensional tensor + :param torch.Tensor obs_noise_scale_init: optional initial values for the observation noise scale + given as a ``obs_dim``-dimensional tensor + + References + [1] "Dependent Matern Processes for Multivariate Time Series," Alexander Vandenberg-Rodes, Babak Shahbaba. + """ + + def __init__( + self, + nu=1.5, + dt=1.0, + obs_dim=1, + linearly_coupled=False, + length_scale_init=None, + obs_noise_scale_init=None, + ): + if nu != 1.5: + raise NotImplementedError("The only supported value of nu is 1.5") + + self.dt = dt + self.obs_dim = obs_dim + + if obs_noise_scale_init is None: + obs_noise_scale_init = 0.2 * torch.ones(obs_dim) + assert obs_noise_scale_init.shape == (obs_dim,) + + super().__init__() + + self.kernel = MaternKernel( + nu=nu, num_gps=obs_dim, length_scale_init=length_scale_init + ) + self.full_state_dim = self.kernel.state_dim * obs_dim + + # we demote self.kernel.kernel_scale from being a nn.Parameter + # since the relevant scales are now encoded in the wiener noise matrix + del self.kernel.kernel_scale + self.kernel.register_buffer("kernel_scale", torch.ones(obs_dim)) + + self.obs_noise_scale = PyroParam( + obs_noise_scale_init, constraint=constraints.positive + ) + self.wiener_noise_tril = PyroParam( + torch.eye(obs_dim) + 0.03 * torch.randn(obs_dim, obs_dim).tril(-1), + constraint=constraints.lower_cholesky, + ) + + if linearly_coupled: + self.obs_matrix = nn.Parameter( + 0.3 * torch.randn(self.obs_dim, self.obs_dim) + ) + else: + obs_matrix = torch.zeros(self.full_state_dim, obs_dim) + for i in range(obs_dim): + obs_matrix[self.kernel.state_dim * i, i] = 1.0 + self.register_buffer("obs_matrix", obs_matrix) + + def _get_obs_matrix(self): + if self.obs_matrix.size(0) == self.obs_dim: + # (num_gps, obs_dim) => (state_dim * num_gps, obs_dim) + selector = [1.0] + [0.0] * (self.kernel.state_dim - 1) + return self.obs_matrix.repeat_interleave( + self.kernel.state_dim, dim=0 + ) * self.obs_matrix.new_tensor(selector).repeat(self.obs_dim).unsqueeze(-1) + else: + return self.obs_matrix + + def _get_init_dist(self, stationary_covariance): + return torch.distributions.MultivariateNormal( + self.obs_matrix.new_zeros(self.full_state_dim), stationary_covariance + ) + + def _get_obs_dist(self): + return dist.Normal( + self.obs_matrix.new_zeros(self.obs_dim), self.obs_noise_scale + ).to_event(1) + + def _get_wiener_cov(self): + chol = self.wiener_noise_tril + wiener_cov = torch.mm(chol, chol.t()).reshape(self.obs_dim, 1, self.obs_dim, 1) + wiener_cov = wiener_cov * wiener_cov.new_ones( + self.kernel.state_dim, 1, self.kernel.state_dim + ) + return wiener_cov.reshape(self.full_state_dim, self.full_state_dim) + + def _stationary_covariance(self): + rho_j = math.sqrt(3.0) / self.kernel.length_scale.unsqueeze(-1).unsqueeze(-1) + rho_i = rho_j.unsqueeze(-1) + block = ( + 2.0 * self.kernel.mask00 + + (rho_i - rho_j) * (self.kernel.mask01 - self.kernel.mask10) + + (2.0 * rho_i * rho_j) * self.kernel.mask11 + ) + block = block / (rho_i + rho_j).pow(3.0) + block = block.transpose(-2, -3).reshape( + self.full_state_dim, self.full_state_dim + ) + return self._get_wiener_cov() * block + + def _get_trans_dist(self, trans_matrix, stationary_covariance): + covar = stationary_covariance - torch.matmul( + trans_matrix.transpose(-1, -2), + torch.matmul(stationary_covariance, trans_matrix), + ) + return MultivariateNormal(covar.new_zeros(self.full_state_dim), covar) + + def _trans_matrix_distribution_stat_covar(self, dts): + stationary_covariance = self._stationary_covariance() + trans_matrix = self.kernel.transition_matrix(dt=dts) + trans_matrix = block_diag_embed(trans_matrix) + trans_dist = self._get_trans_dist(trans_matrix, stationary_covariance) + return trans_matrix, trans_dist, stationary_covariance + + def get_dist(self, duration=None): + """ + Get the :class:`~pyro.distributions.GaussianHMM` distribution that corresponds to a :class:`DependentMaternGP` + + :param int duration: Optional size of the time axis ``event_shape[0]``. + This is required when sampling from homogeneous HMMs whose parameters + are not expanded along the time axis. + """ + ( + trans_matrix, + trans_dist, + stat_covar, + ) = self._trans_matrix_distribution_stat_covar(self.dt) + return dist.GaussianHMM( + self._get_init_dist(stat_covar), + trans_matrix, + trans_dist, + self._get_obs_matrix(), + self._get_obs_dist(), + duration=duration, + ) + + @pyro_method + def log_prob(self, targets): + """ + :param torch.Tensor targets: A 2-dimensional tensor of real-valued targets + of shape ``(T, obs_dim)``, where ``T`` is the length of the time series and ``obs_dim`` + is the dimension of the real-valued ``targets`` at each time step + :returns torch.Tensor: A (scalar) log probability + """ + assert targets.dim() == 2 and targets.size(-1) == self.obs_dim + return self.get_dist().log_prob(targets) + + @torch.no_grad() + def _filter(self, targets): + """ + Return the filtering state for the associated state space model. + """ + assert targets.dim() == 2 and targets.size(-1) == self.obs_dim + return self.get_dist().filter(targets) + + @torch.no_grad() + def _forecast(self, dts, filtering_state, include_observation_noise=True): + """ + Internal helper for forecasting. + """ + assert dts.dim() == 1 + dts = dts.unsqueeze(-1).unsqueeze(-1).unsqueeze(-1) + trans_matrix, trans_dist, _ = self._trans_matrix_distribution_stat_covar(dts) + obs_matrix = self._get_obs_matrix() + trans_obs = torch.matmul(trans_matrix, obs_matrix) + + predicted_mean = torch.matmul( + filtering_state.loc.unsqueeze(-2), trans_obs + ).squeeze(-2) + predicted_function_covar = torch.matmul( + trans_obs.transpose(-1, -2), + torch.matmul(filtering_state.covariance_matrix, trans_obs), + ) + torch.matmul( + obs_matrix.t(), torch.matmul(trans_dist.covariance_matrix, obs_matrix) + ) + + if include_observation_noise: + predicted_function_covar = ( + predicted_function_covar + self.obs_noise_scale.pow(2.0) + ) + + return predicted_mean, predicted_function_covar + + @pyro_method + def forecast(self, targets, dts): + """ + :param torch.Tensor targets: A 2-dimensional tensor of real-valued targets + of shape ``(T, obs_dim)``, where ``T`` is the length of the time series and ``obs_dim`` + is the dimension of the real-valued targets at each time step. These + represent the training data that are conditioned on for the purpose of making + forecasts. + :param torch.Tensor dts: A 1-dimensional tensor of times to forecast into the future, + with zero corresponding to the time of the final target ``targets[-1]``. + :returns torch.distributions.MultivariateNormal: Returns a predictive MultivariateNormal + distribution with batch shape ``(S,)`` and event shape ``(obs_dim,)``, where ``S`` is the size of ``dts``. + """ + filtering_state = self._filter(targets) + predicted_mean, predicted_covar = self._forecast(dts, filtering_state) + return MultivariateNormal(predicted_mean, predicted_covar) diff --git a/pyro/source/pyro/contrib/timeseries/lgssm.py b/pyro/source/pyro/contrib/timeseries/lgssm.py new file mode 100644 index 0000000000000000000000000000000000000000..031bc03b06a3467dce24fb4bc868f235fded6dd7 --- /dev/null +++ b/pyro/source/pyro/contrib/timeseries/lgssm.py @@ -0,0 +1,156 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +import torch.nn as nn +from torch.distributions import MultivariateNormal, constraints + +import pyro.distributions as dist +from pyro.contrib.timeseries.base import TimeSeriesModel +from pyro.nn import PyroParam, pyro_method +from pyro.ops.tensor_utils import repeated_matmul + + +class GenericLGSSM(TimeSeriesModel): + """ + A generic Linear Gaussian State Space Model parameterized with arbitrary time invariant + transition and observation dynamics. The targets are (implicitly) assumed to be evenly + spaced in time. Training and inference are logarithmic in the length of the time series T. + + :param int obs_dim: The dimension of the targets at each time step. + :param int state_dim: The dimension of latent state at each time step. + :param bool learnable_observation_loc: whether the mean of the observation model should be learned or not; + defaults to False. + """ + + def __init__( + self, + obs_dim=1, + state_dim=2, + obs_noise_scale_init=None, + learnable_observation_loc=False, + ): + self.obs_dim = obs_dim + self.state_dim = state_dim + + if obs_noise_scale_init is None: + obs_noise_scale_init = 0.2 * torch.ones(obs_dim) + assert obs_noise_scale_init.shape == (obs_dim,) + + super().__init__() + + self.obs_noise_scale = PyroParam( + obs_noise_scale_init, constraint=constraints.positive + ) + self.trans_noise_scale_sq = PyroParam( + torch.ones(state_dim), constraint=constraints.positive + ) + self.trans_matrix = nn.Parameter( + torch.eye(state_dim) + 0.03 * torch.randn(state_dim, state_dim) + ) + self.obs_matrix = nn.Parameter(0.3 * torch.randn(state_dim, obs_dim)) + self.init_noise_scale_sq = PyroParam( + torch.ones(state_dim), constraint=constraints.positive + ) + + if learnable_observation_loc: + self.obs_loc = nn.Parameter(torch.zeros(obs_dim)) + else: + self.register_buffer("obs_loc", torch.zeros(obs_dim)) + + def _get_init_dist(self): + loc = self.obs_matrix.new_zeros(self.state_dim) + return MultivariateNormal(loc, self.init_noise_scale_sq.diag_embed()) + + def _get_obs_dist(self): + return dist.Normal(self.obs_loc, self.obs_noise_scale).to_event(1) + + def _get_trans_dist(self): + loc = self.obs_matrix.new_zeros(self.state_dim) + return MultivariateNormal(loc, self.trans_noise_scale_sq.diag_embed()) + + def get_dist(self, duration=None): + """ + Get the :class:`~pyro.distributions.GaussianHMM` distribution that corresponds to :class:`GenericLGSSM`. + + :param int duration: Optional size of the time axis ``event_shape[0]``. + This is required when sampling from homogeneous HMMs whose parameters + are not expanded along the time axis. + """ + return dist.GaussianHMM( + self._get_init_dist(), + self.trans_matrix, + self._get_trans_dist(), + self.obs_matrix, + self._get_obs_dist(), + duration=duration, + ) + + @pyro_method + def log_prob(self, targets): + """ + :param torch.Tensor targets: A 2-dimensional tensor of real-valued targets + of shape ``(T, obs_dim)``, where ``T`` is the length of the time series and ``obs_dim`` + is the dimension of the real-valued ``targets`` at each time step + :returns torch.Tensor: A (scalar) log probability. + """ + assert targets.dim() == 2 and targets.size(-1) == self.obs_dim + return self.get_dist().log_prob(targets) + + @torch.no_grad() + def _filter(self, targets): + """ + Return the filtering state for the associated state space model. + """ + assert targets.dim() == 2 and targets.size(-1) == self.obs_dim + return self.get_dist().filter(targets) + + @torch.no_grad() + def _forecast(self, N_timesteps, filtering_state, include_observation_noise=True): + """ + Internal helper for forecasting. + """ + N_trans_matrix = repeated_matmul(self.trans_matrix, N_timesteps) + N_trans_obs = torch.matmul(N_trans_matrix, self.obs_matrix) + predicted_mean = torch.matmul(filtering_state.loc, N_trans_obs) + + # first compute the contribution from filtering_state.covariance_matrix + predicted_covar1 = torch.matmul( + N_trans_obs.transpose(-1, -2), + torch.matmul(filtering_state.covariance_matrix, N_trans_obs), + ) # N O O + + # next compute the contribution from process noise that is injected at each timestep. + # (we need to do a cumulative sum to integrate across time) + process_covar = self._get_trans_dist().covariance_matrix + N_trans_obs_shift = torch.cat([self.obs_matrix.unsqueeze(0), N_trans_obs[:-1]]) + predicted_covar2 = torch.matmul( + N_trans_obs_shift.transpose(-1, -2), + torch.matmul(process_covar, N_trans_obs_shift), + ) # N O O + + predicted_covar = predicted_covar1 + torch.cumsum(predicted_covar2, dim=0) + + if include_observation_noise: + predicted_covar = ( + predicted_covar + self.obs_noise_scale.pow(2.0).diag_embed() + ) + + return predicted_mean, predicted_covar + + @pyro_method + def forecast(self, targets, N_timesteps): + """ + :param torch.Tensor targets: A 2-dimensional tensor of real-valued targets + of shape ``(T, obs_dim)``, where ``T`` is the length of the time series and ``obs_dim`` + is the dimension of the real-valued targets at each time step. These + represent the training data that are conditioned on for the purpose of making + forecasts. + :param int N_timesteps: The number of timesteps to forecast into the future from + the final target ``targets[-1]``. + :returns torch.distributions.MultivariateNormal: Returns a predictive MultivariateNormal distribution + with batch shape ``(N_timesteps,)`` and event shape ``(obs_dim,)`` + """ + filtering_state = self._filter(targets) + predicted_mean, predicted_covar = self._forecast(N_timesteps, filtering_state) + return torch.distributions.MultivariateNormal(predicted_mean, predicted_covar) diff --git a/pyro/source/pyro/contrib/timeseries/lgssmgp.py b/pyro/source/pyro/contrib/timeseries/lgssmgp.py new file mode 100644 index 0000000000000000000000000000000000000000..3daeaa5b5b6f05d4c5c279a1fc930801b78d8cec --- /dev/null +++ b/pyro/source/pyro/contrib/timeseries/lgssmgp.py @@ -0,0 +1,274 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +import torch.nn as nn +from torch.distributions import MultivariateNormal, constraints + +import pyro.distributions as dist +from pyro.contrib.timeseries.base import TimeSeriesModel +from pyro.nn import PyroParam, pyro_method +from pyro.ops.ssm_gp import MaternKernel +from pyro.ops.tensor_utils import block_diag_embed, repeated_matmul + + +class GenericLGSSMWithGPNoiseModel(TimeSeriesModel): + """ + A generic Linear Gaussian State Space Model parameterized with arbitrary time invariant + transition and observation dynamics together with separate Gaussian Process noise models + for each output dimension. In more detail, the generative process is: + + :math:`y_i(t) = \\sum_j A_{ij} z_j(t) + f_i(t) + \\epsilon_i(t)` + + where the latent variables :math:`{\\bf z}(t)` follow generic time invariant Linear Gaussian dynamics + and the :math:`f_i(t)` are Gaussian Processes with Matern kernels. + + The targets are (implicitly) assumed to be evenly spaced in time. In particular a timestep of + :math:`dt=1.0` for the continuous-time GP dynamics corresponds to a single discrete step of + the :math:`{\\bf z}`-space dynamics. Training and inference are logarithmic in the length of + the time series T. + + :param int obs_dim: The dimension of the targets at each time step. + :param int state_dim: The dimension of the :math:`{\\bf z}` latent state at each time step. + :param float nu: The order of the Matern kernel; one of 0.5, 1.5 or 2.5. + :param torch.Tensor length_scale_init: optional initial values for the kernel length scale + given as a ``obs_dim``-dimensional tensor + :param torch.Tensor kernel_scale_init: optional initial values for the kernel scale + given as a ``obs_dim``-dimensional tensor + :param torch.Tensor obs_noise_scale_init: optional initial values for the observation noise scale + given as a ``obs_dim``-dimensional tensor + :param bool learnable_observation_loc: whether the mean of the observation model should be learned or not; + defaults to False. + """ + + def __init__( + self, + obs_dim=1, + state_dim=2, + nu=1.5, + obs_noise_scale_init=None, + length_scale_init=None, + kernel_scale_init=None, + learnable_observation_loc=False, + ): + self.obs_dim = obs_dim + self.state_dim = state_dim + self.nu = nu + + if obs_noise_scale_init is None: + obs_noise_scale_init = 0.2 * torch.ones(obs_dim) + assert obs_noise_scale_init.shape == (obs_dim,) + + super().__init__() + + self.kernel = MaternKernel( + nu=nu, + num_gps=obs_dim, + length_scale_init=length_scale_init, + kernel_scale_init=kernel_scale_init, + ) + self.dt = 1.0 + self.full_state_dim = self.kernel.state_dim * obs_dim + state_dim + self.full_gp_state_dim = self.kernel.state_dim * obs_dim + + self.obs_noise_scale = PyroParam( + obs_noise_scale_init, constraint=constraints.positive + ) + self.trans_noise_scale_sq = PyroParam( + torch.ones(state_dim), constraint=constraints.positive + ) + self.z_trans_matrix = nn.Parameter( + torch.eye(state_dim) + 0.03 * torch.randn(state_dim, state_dim) + ) + self.z_obs_matrix = nn.Parameter(0.3 * torch.randn(state_dim, obs_dim)) + self.init_noise_scale_sq = PyroParam( + torch.ones(state_dim), constraint=constraints.positive + ) + + gp_obs_matrix = torch.zeros(self.kernel.state_dim * obs_dim, obs_dim) + for i in range(obs_dim): + gp_obs_matrix[self.kernel.state_dim * i, i] = 1.0 + self.register_buffer("gp_obs_matrix", gp_obs_matrix) + + self.obs_selector = torch.tensor( + [self.kernel.state_dim * d for d in range(obs_dim)], dtype=torch.long + ) + + if learnable_observation_loc: + self.obs_loc = nn.Parameter(torch.zeros(obs_dim)) + else: + self.register_buffer("obs_loc", torch.zeros(obs_dim)) + + def _get_obs_matrix(self): + # (obs_dim + state_dim, obs_dim) => (gp_state_dim * obs_dim + state_dim, obs_dim) + return torch.cat([self.gp_obs_matrix, self.z_obs_matrix], dim=0) + + def _get_init_dist(self): + loc = self.z_trans_matrix.new_zeros(self.full_state_dim) + covar = self.z_trans_matrix.new_zeros(self.full_state_dim, self.full_state_dim) + covar[: self.full_gp_state_dim, : self.full_gp_state_dim] = block_diag_embed( + self.kernel.stationary_covariance() + ) + covar[self.full_gp_state_dim :, self.full_gp_state_dim :] = ( + self.init_noise_scale_sq.diag_embed() + ) + return MultivariateNormal(loc, covar) + + def _get_obs_dist(self): + return dist.Normal(self.obs_loc, self.obs_noise_scale).to_event(1) + + def get_dist(self, duration=None): + """ + Get the :class:`~pyro.distributions.GaussianHMM` distribution that corresponds + to :class:`GenericLGSSMWithGPNoiseModel`. + + :param int duration: Optional size of the time axis ``event_shape[0]``. + This is required when sampling from homogeneous HMMs whose parameters + are not expanded along the time axis. + """ + ( + gp_trans_matrix, + gp_process_covar, + ) = self.kernel.transition_matrix_and_covariance(dt=self.dt) + + trans_covar = self.z_trans_matrix.new_zeros( + self.full_state_dim, self.full_state_dim + ) + trans_covar[: self.full_gp_state_dim, : self.full_gp_state_dim] = ( + block_diag_embed(gp_process_covar) + ) + trans_covar[self.full_gp_state_dim :, self.full_gp_state_dim :] = ( + self.trans_noise_scale_sq.diag_embed() + ) + trans_dist = MultivariateNormal( + trans_covar.new_zeros(self.full_state_dim), trans_covar + ) + + full_trans_mat = trans_covar.new_zeros(self.full_state_dim, self.full_state_dim) + full_trans_mat[: self.full_gp_state_dim, : self.full_gp_state_dim] = ( + block_diag_embed(gp_trans_matrix) + ) + full_trans_mat[self.full_gp_state_dim :, self.full_gp_state_dim :] = ( + self.z_trans_matrix + ) + + return dist.GaussianHMM( + self._get_init_dist(), + full_trans_mat, + trans_dist, + self._get_obs_matrix(), + self._get_obs_dist(), + duration=duration, + ) + + @pyro_method + def log_prob(self, targets): + """ + :param torch.Tensor targets: A 2-dimensional tensor of real-valued targets + of shape ``(T, obs_dim)``, where ``T`` is the length of the time series and ``obs_dim`` + is the dimension of the real-valued ``targets`` at each time step + :returns torch.Tensor: A (scalar) log probability. + """ + assert targets.dim() == 2 and targets.size(-1) == self.obs_dim + return self.get_dist().log_prob(targets) + + @torch.no_grad() + def _filter(self, targets): + """ + Return the filtering state for the associated state space model. + """ + assert targets.dim() == 2 and targets.size(-1) == self.obs_dim + return self.get_dist().filter(targets) + + @torch.no_grad() + def _forecast(self, N_timesteps, filtering_state, include_observation_noise=True): + """ + Internal helper for forecasting. + """ + dts = ( + torch.arange( + N_timesteps, + dtype=self.z_trans_matrix.dtype, + device=self.z_trans_matrix.device, + ) + + 1.0 + ) + dts = dts.unsqueeze(-1).unsqueeze(-1).unsqueeze(-1) + + ( + gp_trans_matrix, + gp_process_covar, + ) = self.kernel.transition_matrix_and_covariance(dt=dts) + gp_trans_matrix = block_diag_embed(gp_trans_matrix) + gp_process_covar = block_diag_embed(gp_process_covar[..., 0:1, 0:1]) + + N_trans_matrix = repeated_matmul(self.z_trans_matrix, N_timesteps) + N_trans_obs = torch.matmul(N_trans_matrix, self.z_obs_matrix) + + # z-state contribution + gp contribution + predicted_mean1 = torch.matmul( + filtering_state.loc[-self.state_dim :].unsqueeze(-2), N_trans_obs + ).squeeze(-2) + predicted_mean2 = torch.matmul( + filtering_state.loc[: self.full_gp_state_dim].unsqueeze(-2), + gp_trans_matrix[..., self.obs_selector], + ).squeeze(-2) + predicted_mean = predicted_mean1 + predicted_mean2 + + # first compute the contributions from filtering_state.covariance_matrix: z-space and gp + fs_cov = filtering_state.covariance_matrix + predicted_covar1z = torch.matmul( + N_trans_obs.transpose(-1, -2), + torch.matmul( + fs_cov[self.full_gp_state_dim :, self.full_gp_state_dim :], N_trans_obs + ), + ) # N O O + gp_trans = gp_trans_matrix[..., self.obs_selector] + predicted_covar1gp = torch.matmul( + gp_trans.transpose(-1, -2), + torch.matmul( + fs_cov[: self.full_gp_state_dim :, : self.full_gp_state_dim], gp_trans + ), + ) + + # next compute the contribution from process noise that is injected at each timestep. + # (we need to do a cumulative sum to integrate across time for the z-state contribution) + z_process_covar = self.trans_noise_scale_sq.diag_embed() + N_trans_obs_shift = torch.cat( + [self.z_obs_matrix.unsqueeze(0), N_trans_obs[0:-1]] + ) + predicted_covar2z = torch.matmul( + N_trans_obs_shift.transpose(-1, -2), + torch.matmul(z_process_covar, N_trans_obs_shift), + ) # N O O + + predicted_covar = ( + predicted_covar1z + + predicted_covar1gp + + gp_process_covar + + torch.cumsum(predicted_covar2z, dim=0) + ) + + if include_observation_noise: + predicted_covar = ( + predicted_covar + self.obs_noise_scale.pow(2.0).diag_embed() + ) + + return predicted_mean, predicted_covar + + @pyro_method + def forecast(self, targets, N_timesteps): + """ + :param torch.Tensor targets: A 2-dimensional tensor of real-valued targets + of shape ``(T, obs_dim)``, where ``T`` is the length of the time series and ``obs_dim`` + is the dimension of the real-valued targets at each time step. These + represent the training data that are conditioned on for the purpose of making + forecasts. + :param int N_timesteps: The number of timesteps to forecast into the future from + the final target ``targets[-1]``. + :returns torch.distributions.MultivariateNormal: Returns a predictive MultivariateNormal distribution + with batch shape ``(N_timesteps,)`` and event shape ``(obs_dim,)`` + """ + filtering_state = self._filter(targets) + predicted_mean, predicted_covar = self._forecast(N_timesteps, filtering_state) + return MultivariateNormal(predicted_mean, predicted_covar) diff --git a/pyro/source/pyro/contrib/tracking/__init__.py b/pyro/source/pyro/contrib/tracking/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..49a11f1662c1a8deb85a096f45e5025d0f4ff920 --- /dev/null +++ b/pyro/source/pyro/contrib/tracking/__init__.py @@ -0,0 +1,8 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from pyro.contrib.tracking import assignment + +__all__ = [ + "assignment", +] diff --git a/pyro/source/pyro/contrib/tracking/assignment.py b/pyro/source/pyro/contrib/tracking/assignment.py new file mode 100644 index 0000000000000000000000000000000000000000..dec9c4b9eadd605bd47ad23d59723318a23d9b21 --- /dev/null +++ b/pyro/source/pyro/contrib/tracking/assignment.py @@ -0,0 +1,458 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import itertools +import math +import numbers + +import torch + +import pyro.distributions as dist +from pyro.util import warn_if_nan + + +def _product(factors): + result = 1.0 + for factor in factors: + result = result * factor + return result + + +def _exp(value): + if isinstance(value, numbers.Number): + return math.exp(value) + return value.exp() + + +class MarginalAssignment: + """ + Computes marginal data associations between objects and detections. + + This assumes that each detection corresponds to zero or one object, + and each object corresponds to zero or more detections. Specifically + this does not assume detections have been partitioned into frames of + mutual exclusion as is common in 2-D assignment problems. + + :param torch.Tensor exists_logits: a tensor of shape ``[num_objects]`` + representing per-object factors for existence of each potential object. + :param torch.Tensor assign_logits: a tensor of shape + ``[num_detections, num_objects]`` representing per-edge factors of + assignment probability, where each edge denotes that a given detection + associates with a single object. + :param int bp_iters: optional number of belief propagation iterations. If + unspecified or ``None`` an expensive exact algorithm will be used. + + :ivar int num_detections: the number of detections + :ivar int num_objects: the number of (potentially existing) objects + :ivar pyro.distributions.Bernoulli exists_dist: a mean field posterior + distribution over object existence. + :ivar pyro.distributions.Categorical assign_dist: a mean field posterior + distribution over the object (or None) to which each detection + associates. This has ``.event_shape == (num_objects + 1,)`` where the + final element denotes spurious detection, and + ``.batch_shape == (num_frames, num_detections)``. + """ + + def __init__(self, exists_logits, assign_logits, bp_iters=None): + assert exists_logits.dim() == 1, exists_logits.shape + assert assign_logits.dim() == 2, assign_logits.shape + assert assign_logits.shape[-1] == exists_logits.shape[-1] + self.num_detections, self.num_objects = assign_logits.shape + + # Clamp to avoid NANs. + exists_logits = exists_logits.clamp(min=-40, max=40) + assign_logits = assign_logits.clamp(min=-40, max=40) + + # This does all the work. + if bp_iters is None: + exists, assign = compute_marginals(exists_logits, assign_logits) + else: + exists, assign = compute_marginals_bp( + exists_logits, assign_logits, bp_iters + ) + + # Wrap the results in Distribution objects. + # This adds a final logit=0 element denoting spurious detection. + padded_assign = torch.nn.functional.pad(assign, (0, 1), "constant", 0.0) + self.assign_dist = dist.Categorical(logits=padded_assign) + self.exists_dist = dist.Bernoulli(logits=exists) + + +class MarginalAssignmentSparse: + """ + A cheap sparse version of :class:`MarginalAssignment`. + + :param int num_detections: the number of detections + :param int num_objects: the number of (potentially existing) objects + :param torch.LongTensor edges: a ``[2, num_edges]``-shaped tensor of + (detection, object) index pairs specifying feasible associations. + :param torch.Tensor exists_logits: a tensor of shape ``[num_objects]`` + representing per-object factors for existence of each potential object. + :param torch.Tensor assign_logits: a tensor of shape ``[num_edges]`` + representing per-edge factors of assignment probability, where each + edge denotes that a given detection associates with a single object. + :param int bp_iters: optional number of belief propagation iterations. If + unspecified or ``None`` an expensive exact algorithm will be used. + + :ivar int num_detections: the number of detections + :ivar int num_objects: the number of (potentially existing) objects + :ivar pyro.distributions.Bernoulli exists_dist: a mean field posterior + distribution over object existence. + :ivar pyro.distributions.Categorical assign_dist: a mean field posterior + distribution over the object (or None) to which each detection + associates. This has ``.event_shape == (num_objects + 1,)`` where the + final element denotes spurious detection, and + ``.batch_shape == (num_frames, num_detections)``. + """ + + def __init__( + self, num_objects, num_detections, edges, exists_logits, assign_logits, bp_iters + ): + assert edges.dim() == 2, edges.shape + assert edges.shape[0] == 2, edges.shape + assert exists_logits.shape == (num_objects,), exists_logits.shape + assert assign_logits.shape == edges.shape[1:], assign_logits.shape + self.num_objects = num_objects + self.num_detections = num_detections + self.edges = edges + + # Clamp to avoid NANs. + exists_logits = exists_logits.clamp(min=-40, max=40) + assign_logits = assign_logits.clamp(min=-40, max=40) + + # This does all the work. + exists, assign = compute_marginals_sparse_bp( + num_objects, num_detections, edges, exists_logits, assign_logits, bp_iters + ) + + # Wrap the results in Distribution objects. + # This adds a final logit=0 element denoting spurious detection. + padded_assign = torch.full( + (num_detections, num_objects + 1), + -float("inf"), + dtype=assign.dtype, + device=assign.device, + ) + padded_assign[:, -1] = 0 + padded_assign[edges[0], edges[1]] = assign + self.assign_dist = dist.Categorical(logits=padded_assign) + self.exists_dist = dist.Bernoulli(logits=exists) + + +class MarginalAssignmentPersistent: + """ + This computes marginal distributions of a multi-frame multi-object + data association problem with an unknown number of persistent objects. + + The inputs are factors in a factor graph (existence probabilites for each + potential object and assignment probabilities for each object-detection + pair), and the outputs are marginal distributions of posterior existence + probability of each potential object and posterior assignment probabilites + of each object-detection pair. + + This assumes a shared (maximum) number of detections per frame; to handle + variable number of detections, simply set corresponding elements of + ``assign_logits`` to ``-float('inf')``. + + :param torch.Tensor exists_logits: a tensor of shape ``[num_objects]`` + representing per-object factors for existence of each potential object. + :param torch.Tensor assign_logits: a tensor of shape + ``[num_frames, num_detections, num_objects]`` representing per-edge + factors of assignment probability, where each edge denotes that at a + given time frame a given detection associates with a single object. + :param int bp_iters: optional number of belief propagation iterations. If + unspecified or ``None`` an expensive exact algorithm will be used. + :param float bp_momentum: optional momentum to use for belief propagation. + Should be in the interval ``[0,1)``. + + :ivar int num_frames: the number of time frames + :ivar int num_detections: the (maximum) number of detections per frame + :ivar int num_objects: the number of (potentially existing) objects + :ivar pyro.distributions.Bernoulli exists_dist: a mean field posterior + distribution over object existence. + :ivar pyro.distributions.Categorical assign_dist: a mean field posterior + distribution over the object (or None) to which each detection + associates. This has ``.event_shape == (num_objects + 1,)`` where the + final element denotes spurious detection, and + ``.batch_shape == (num_frames, num_detections)``. + """ + + def __init__(self, exists_logits, assign_logits, bp_iters=None, bp_momentum=0.5): + assert exists_logits.dim() == 1, exists_logits.shape + assert assign_logits.dim() == 3, assign_logits.shape + assert assign_logits.shape[-1] == exists_logits.shape[-1] + self.num_frames, self.num_detections, self.num_objects = assign_logits.shape + + # Clamp to avoid NANs. + exists_logits = exists_logits.clamp(min=-40, max=40) + assign_logits = assign_logits.clamp(min=-40, max=40) + + # This does all the work. + if bp_iters is None: + exists, assign = compute_marginals_persistent(exists_logits, assign_logits) + else: + exists, assign = compute_marginals_persistent_bp( + exists_logits, assign_logits, bp_iters, bp_momentum + ) + + # Wrap the results in Distribution objects. + # This adds a final logit=0 element denoting spurious detection. + padded_assign = torch.nn.functional.pad(assign, (0, 1), "constant", 0.0) + self.assign_dist = dist.Categorical(logits=padded_assign) + self.exists_dist = dist.Bernoulli(logits=exists) + assert self.assign_dist.batch_shape == (self.num_frames, self.num_detections) + assert self.exists_dist.batch_shape == (self.num_objects,) + + +def compute_marginals(exists_logits, assign_logits): + """ + This implements exact inference of pairwise marginals via + enumeration. This is very expensive and is only useful for testing. + + See :class:`MarginalAssignment` for args and problem description. + """ + num_detections, num_objects = assign_logits.shape + assert exists_logits.shape == (num_objects,) + dtype = exists_logits.dtype + device = exists_logits.device + + exists_probs = torch.zeros( + 2, num_objects, dtype=dtype, device=device + ) # [not exist, exist] + assign_probs = torch.zeros( + num_detections, num_objects + 1, dtype=dtype, device=device + ) + for assign in itertools.product(range(num_objects + 1), repeat=num_detections): + assign_part = sum( + assign_logits[j, i] for j, i in enumerate(assign) if i < num_objects + ) + for exists in itertools.product( + *[[1] if i in assign else [0, 1] for i in range(num_objects)] + ): + exists_part = sum(exists_logits[i] for i, e in enumerate(exists) if e) + prob = _exp(exists_part + assign_part) + for i, e in enumerate(exists): + exists_probs[e, i] += prob + for j, i in enumerate(assign): + assign_probs[j, i] += prob + + # Convert from probs to logits. + exists = exists_probs.log() + assign = assign_probs.log() + exists = exists[1] - exists[0] + assign = assign[:, :-1] - assign[:, -1:] + warn_if_nan(exists, "exists") + warn_if_nan(assign, "assign") + return exists, assign + + +def compute_marginals_bp(exists_logits, assign_logits, bp_iters): + """ + This implements approximate inference of pairwise marginals via + loopy belief propagation, adapting the approach of [1]. + + See :class:`MarginalAssignment` for args and problem description. + + [1] Jason L. Williams, Roslyn A. Lau (2014) + Approximate evaluation of marginal association probabilities with + belief propagation + https://arxiv.org/abs/1209.6299 + """ + message_e_to_a = torch.zeros_like(assign_logits) + message_a_to_e = torch.zeros_like(assign_logits) + for i in range(bp_iters): + message_e_to_a = ( + -(message_a_to_e - message_a_to_e.sum(0, True) - exists_logits) + .exp() + .log1p() + ) + joint = (assign_logits + message_e_to_a).exp() + message_a_to_e = ( + (assign_logits - torch.log1p(joint.sum(1, True) - joint)).exp().log1p() + ) + warn_if_nan(message_e_to_a, "message_e_to_a iter {}".format(i)) + warn_if_nan(message_a_to_e, "message_a_to_e iter {}".format(i)) + + # Convert from probs to logits. + exists = exists_logits + message_a_to_e.sum(0) + assign = assign_logits + message_e_to_a + warn_if_nan(exists, "exists") + warn_if_nan(assign, "assign") + return exists, assign + + +def compute_marginals_sparse_bp( + num_objects, num_detections, edges, exists_logits, assign_logits, bp_iters +): + """ + This implements approximate inference of pairwise marginals via + loopy belief propagation, adapting the approach of [1]. + + See :class:`MarginalAssignmentSparse` for args and problem description. + + [1] Jason L. Williams, Roslyn A. Lau (2014) + Approximate evaluation of marginal association probabilities with + belief propagation + https://arxiv.org/abs/1209.6299 + """ + exists_factor = exists_logits[edges[1]] + + def sparse_sum(x, dim, keepdim=False): + assert dim in (0, 1) + x = torch.zeros( + [num_objects, num_detections][dim], dtype=x.dtype, device=x.device + ).scatter_add_(0, edges[1 - dim], x) + if keepdim: + x = x[edges[1 - dim]] + return x + + message_e_to_a = torch.zeros_like(assign_logits) + message_a_to_e = torch.zeros_like(assign_logits) + for i in range(bp_iters): + message_e_to_a = ( + -(message_a_to_e - sparse_sum(message_a_to_e, 0, True) - exists_factor) + .exp() + .log1p() + ) + joint = (assign_logits + message_e_to_a).exp() + message_a_to_e = ( + (assign_logits - torch.log1p(sparse_sum(joint, 1, True) - joint)) + .exp() + .log1p() + ) + warn_if_nan(message_e_to_a, "message_e_to_a iter {}".format(i)) + warn_if_nan(message_a_to_e, "message_a_to_e iter {}".format(i)) + + # Convert from probs to logits. + exists = exists_logits + sparse_sum(message_a_to_e, 0) + assign = assign_logits + message_e_to_a + warn_if_nan(exists, "exists") + warn_if_nan(assign, "assign") + return exists, assign + + +def compute_marginals_persistent(exists_logits, assign_logits): + """ + This implements exact inference of pairwise marginals via + enumeration. This is very expensive and is only useful for testing. + + See :class:`MarginalAssignmentPersistent` for args and problem description. + """ + num_frames, num_detections, num_objects = assign_logits.shape + assert exists_logits.shape == (num_objects,) + dtype = exists_logits.dtype + device = exists_logits.device + + total = 0 + exists_probs = torch.zeros(num_objects, dtype=dtype, device=device) + assign_probs = torch.zeros( + num_frames, num_detections, num_objects, dtype=dtype, device=device + ) + for exists in itertools.product([0, 1], repeat=num_objects): + exists = [i for i, e in enumerate(exists) if e] + exists_part = _exp(sum(exists_logits[i] for i in exists)) + + # The remaining variables are conditionally independent conditioned on exists. + assign_parts = [] + assign_sums = [] + for t in range(num_frames): + assign_map = {} + for n in range(1 + min(len(exists), num_detections)): + for objects in itertools.combinations(exists, n): + for detections in itertools.permutations(range(num_detections), n): + assign = tuple(zip(objects, detections)) + assign_map[assign] = _exp( + sum(assign_logits[t, j, i] for i, j in assign) + ) + assign_parts.append(assign_map) + assign_sums.append(sum(assign_map.values())) + + prob = exists_part * _product(assign_sums) + total += prob + for i in exists: + exists_probs[i] += prob + for t in range(num_frames): + other_part = exists_part * _product(assign_sums[:t] + assign_sums[t + 1 :]) + for assign, assign_part in assign_parts[t].items(): + prob = other_part * assign_part + for i, j in assign: + assign_probs[t, j, i] += prob + + # Convert from probs to logits. + exists = exists_probs.log() - (total - exists_probs).log() + assign = assign_probs.log() - (total - assign_probs.sum(-1, True)).log() + warn_if_nan(exists, "exists") + warn_if_nan(assign, "assign") + return exists, assign + + +def compute_marginals_persistent_bp( + exists_logits, assign_logits, bp_iters, bp_momentum=0.5 +): + """ + This implements approximate inference of pairwise marginals via + loopy belief propagation, adapting the approach of [1], [2]. + + See :class:`MarginalAssignmentPersistent` for args and problem description. + + [1] Jason L. Williams, Roslyn A. Lau (2014) + Approximate evaluation of marginal association probabilities with + belief propagation + https://arxiv.org/abs/1209.6299 + [2] Ryan Turner, Steven Bottone, Bhargav Avasarala (2014) + A Complete Variational Tracker + https://papers.nips.cc/paper/5572-a-complete-variational-tracker.pdf + """ + # This implements forward-backward message passing among three sets of variables: + # + # a[t,j] ~ Categorical(num_objects + 1), detection -> object assignment + # b[t,i] ~ Categorical(num_detections + 1), object -> detection assignment + # e[i] ~ Bernonulli, whether each object exists + # + # Only assign = a and exists = e are returned. + assert 0 <= bp_momentum < 1, bp_momentum + old, new = bp_momentum, 1 - bp_momentum + num_frames, num_detections, num_objects = assign_logits.shape + dtype = assign_logits.dtype + device = assign_logits.device + message_b_to_a = torch.zeros( + num_frames, num_detections, num_objects, dtype=dtype, device=device + ) + message_a_to_b = torch.zeros( + num_frames, num_detections, num_objects, dtype=dtype, device=device + ) + message_b_to_e = torch.zeros(num_frames, num_objects, dtype=dtype, device=device) + message_e_to_b = torch.zeros(num_frames, num_objects, dtype=dtype, device=device) + + for i in range(bp_iters): + odds_a = (assign_logits + message_b_to_a).exp() + message_a_to_b = old * message_a_to_b + new * ( + assign_logits - (odds_a.sum(2, True) - odds_a).log1p() + ) + message_b_to_e = ( + old * message_b_to_e + new * message_a_to_b.exp().sum(1).log1p() + ) + message_e_to_b = old * message_e_to_b + new * ( + exists_logits + message_b_to_e.sum(0) - message_b_to_e + ) + odds_b = message_a_to_b.exp() + message_b_to_a = ( + old * message_b_to_a + - new + * ( + (-message_e_to_b).exp().unsqueeze(1) + + (1 + odds_b.sum(1, True) - odds_b) + ).log() + ) + + warn_if_nan(message_a_to_b, "message_a_to_b iter {}".format(i)) + warn_if_nan(message_b_to_e, "message_b_to_e iter {}".format(i)) + warn_if_nan(message_e_to_b, "message_e_to_b iter {}".format(i)) + warn_if_nan(message_b_to_a, "message_b_to_a iter {}".format(i)) + + # Convert from probs to logits. + exists = exists_logits + message_b_to_e.sum(0) + assign = assign_logits + message_b_to_a + warn_if_nan(exists, "exists") + warn_if_nan(assign, "assign") + return exists, assign diff --git a/pyro/source/pyro/contrib/tracking/distributions.py b/pyro/source/pyro/contrib/tracking/distributions.py new file mode 100644 index 0000000000000000000000000000000000000000..e2be7582c7f59722a5717c745425515082a44d73 --- /dev/null +++ b/pyro/source/pyro/contrib/tracking/distributions.py @@ -0,0 +1,102 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions import constraints + +import pyro.distributions as dist +from pyro.contrib.tracking.extended_kalman_filter import EKFState +from pyro.contrib.tracking.measurements import PositionMeasurement +from pyro.distributions.torch_distribution import TorchDistribution + + +class EKFDistribution(TorchDistribution): + r""" + Distribution over EKF states. See :class:`~pyro.contrib.tracking.extended_kalman_filter.EKFState`. + Currently only supports `log_prob`. + + :param x0: PV tensor (mean) + :type x0: torch.Tensor + :param P0: covariance + :type P0: torch.Tensor + :param dynamic_model: :class:`~pyro.contrib.tracking.dynamic_models.DynamicModel` object + :param measurement_cov: measurement covariance + :type measurement_cov: torch.Tensor + :param time_steps: number time step + :type time_steps: int + :param dt: time step + :type dt: torch.Tensor + """ + + arg_constraints = { + "measurement_cov": constraints.positive_definite, + "P0": constraints.positive_definite, + "x0": constraints.real_vector, + } + has_rsample = True + + def __init__( + self, + x0, + P0, + dynamic_model, + measurement_cov, + time_steps=1, + dt=1.0, + validate_args=None, + ): + self.x0 = x0 + self.P0 = P0 + self.dynamic_model = dynamic_model + self.measurement_cov = measurement_cov + self.dt = dt + assert ( + not x0.shape[-1] % 2 + ), "position and velocity vectors must be the same dimension" + batch_shape = x0.shape[:-1] + event_shape = (time_steps, x0.shape[-1] // 2) + super().__init__(batch_shape, event_shape, validate_args=validate_args) + + def rsample(self, sample_shape=torch.Size()): + raise NotImplementedError("TODO: implement forward filter backward sample") + + def filter_states(self, value): + """ + Returns the ekf states given measurements + + :param value: measurement means of shape `(time_steps, event_shape)` + :type value: torch.Tensor + """ + states = [] + state = EKFState(self.dynamic_model, self.x0, self.P0, time=0.0) + assert value.shape[-1] == self.event_shape[-1] + for i, measurement_mean in enumerate(value): + if i: + state = state.predict(self.dt) + measurement = PositionMeasurement( + measurement_mean, self.measurement_cov, time=state.time + ) + state, (dz, S) = state.update(measurement) + states.append(state) + return states + + def log_prob(self, value): + """ + Returns the joint log probability of the innovations of a tensor of measurements + + :param value: measurement means of shape `(time_steps, event_shape)` + :type value: torch.Tensor + """ + state = EKFState(self.dynamic_model, self.x0, self.P0, time=0.0) + result = 0.0 + assert value.shape == self.event_shape + zero = torch.zeros(self.event_shape[-1], dtype=value.dtype, device=value.device) + for i, measurement_mean in enumerate(value): + if i: + state = state.predict(self.dt) + measurement = PositionMeasurement( + measurement_mean, self.measurement_cov, time=state.time + ) + state, (dz, S) = state.update(measurement) + result = result + dist.MultivariateNormal(dz, S).log_prob(zero) + return result diff --git a/pyro/source/pyro/contrib/tracking/dynamic_models.py b/pyro/source/pyro/contrib/tracking/dynamic_models.py new file mode 100644 index 0000000000000000000000000000000000000000..cdefc504bec394dbd998393718e4d3f853b57006 --- /dev/null +++ b/pyro/source/pyro/contrib/tracking/dynamic_models.py @@ -0,0 +1,467 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from abc import ABCMeta, abstractmethod + +import torch +from torch import nn +from torch.nn import Parameter + +import pyro.distributions as dist +from pyro.distributions.util import eye_like + + +class DynamicModel(nn.Module, metaclass=ABCMeta): + """ + Dynamic model interface. + + :param dimension: native state dimension. + :param dimension_pv: PV state dimension. + :param num_process_noise_parameters: process noise parameter space dimension. + This for UKF applications. Can be left as ``None`` for EKF and most + other filters. + """ + + def __init__(self, dimension, dimension_pv, num_process_noise_parameters=None): + self._dimension = dimension + self._dimension_pv = dimension_pv + self._num_process_noise_parameters = num_process_noise_parameters + super().__init__() + + @property + def dimension(self): + """ + Native state dimension access. + """ + return self._dimension + + @property + def dimension_pv(self): + """ + PV state dimension access. + """ + return self._dimension_pv + + @property + def num_process_noise_parameters(self): + """ + Process noise parameters space dimension access. + """ + return self._num_process_noise_parameters + + @abstractmethod + def forward(self, x, dt, do_normalization=True): + """ + Integrate native state ``x`` over time interval ``dt``. + + :param x: current native state. If the DynamicModel is non-differentiable, + be sure to handle the case of ``x`` being augmented with process + noise parameters. + :param dt: time interval to integrate over. + :param do_normalization: whether to perform normalization on output, e.g., + mod'ing angles into an interval. + :return: Native state x integrated dt into the future. + """ + raise NotImplementedError + + def geodesic_difference(self, x1, x0): + """ + Compute and return the geodesic difference between 2 native states. + This is a generalization of the Euclidean operation ``x1 - x0``. + + :param x1: native state. + :param x0: native state. + :return: Geodesic difference between native states ``x1`` and ``x2``. + """ + return x1 - x0 # Default to Euclidean behavior. + + @abstractmethod + def mean2pv(self, x): + """ + Compute and return PV state from native state. Useful for combining + state estimates of different types in IMM (Interacting Multiple Model) + filtering. + + :param x: native state estimate mean. + :return: PV state estimate mean. + """ + raise NotImplementedError + + @abstractmethod + def cov2pv(self, P): + """ + Compute and return PV covariance from native covariance. Useful for + combining state estimates of different types in IMM (Interacting + Multiple Model) filtering. + + :param P: native state estimate covariance. + :return: PV state estimate covariance. + """ + raise NotImplementedError + + @abstractmethod + def process_noise_cov(self, dt=0.0): + """ + Compute and return process noise covariance (Q). + + :param dt: time interval to integrate over. + :return: Read-only covariance (Q). For a DifferentiableDynamicModel, this is + the covariance of the native state ``x`` resulting from stochastic + integration (for use with EKF). Otherwise, it is the covariance + directly of the process noise parameters (for use with UKF). + """ + raise NotImplementedError + + def process_noise_dist(self, dt=0.0): + """ + Return a distribution object of state displacement from the process noise + distribution over a time interval. + + :param dt: time interval that process noise accumulates over. + :return: :class:`~pyro.distributions.torch.MultivariateNormal`. + """ + Q = self.process_noise_cov(dt) + return dist.MultivariateNormal( + torch.zeros(Q.shape[-1], dtype=Q.dtype, device=Q.device), Q + ) + + +class DifferentiableDynamicModel(DynamicModel): + """ + DynamicModel for which state transition Jacobians can be efficiently + calculated, usu. analytically or by automatic differentiation. + """ + + @abstractmethod + def jacobian(self, dt): + """ + Compute and return native state transition Jacobian (F) over time + interval ``dt``. + + :param dt: time interval to integrate over. + :return: Read-only Jacobian (F) of integration map (f). + """ + raise NotImplementedError + + +class Ncp(DifferentiableDynamicModel): + """ + NCP (Nearly-Constant Position) dynamic model. May be subclassed, e.g., with + CWNV (Continuous White Noise Velocity) or DWNV (Discrete White Noise + Velocity). + + :param dimension: native state dimension. + :param sv2: variance of velocity. Usually chosen so that the standard + deviation is roughly half of the max velocity one would ever expect + to observe. + """ + + def __init__(self, dimension, sv2): + dimension_pv = 2 * dimension + super().__init__(dimension, dimension_pv, num_process_noise_parameters=1) + if not isinstance(sv2, torch.Tensor): + sv2 = torch.tensor(sv2) + self.sv2 = Parameter(sv2) + self._F_cache = eye_like(sv2, dimension) # State transition matrix cache + self._Q_cache = {} # Process noise cov cache + + def forward(self, x, dt, do_normalization=True): + """ + Integrate native state ``x`` over time interval ``dt``. + + :param x: current native state. If the DynamicModel is non-differentiable, + be sure to handle the case of ``x`` being augmented with process + noise parameters. + :param dt: time interval to integrate over. + do_normalization: whether to perform normalization on output, e.g., + mod'ing angles into an interval. Has no effect for this subclass. + :return: Native state x integrated dt into the future. + """ + return x + + def mean2pv(self, x): + """ + Compute and return PV state from native state. Useful for combining + state estimates of different types in IMM (Interacting Multiple Model) + filtering. + + :param x: native state estimate mean. + :return: PV state estimate mean. + """ + with torch.no_grad(): + x_pv = torch.zeros(2 * self._dimension, dtype=x.dtype, device=x.device) + x_pv[: self._dimension] = x + return x_pv + + def cov2pv(self, P): + """ + Compute and return PV covariance from native covariance. Useful for + combining state estimates of different types in IMM (Interacting + Multiple Model) filtering. + + :param P: native state estimate covariance. + :return: PV state estimate covariance. + """ + d = 2 * self._dimension + with torch.no_grad(): + P_pv = torch.zeros(d, d, dtype=P.dtype, device=P.device) + P_pv[: self._dimension, : self._dimension] = P + return P_pv + + def jacobian(self, dt): + """ + Compute and return cached native state transition Jacobian (F) over + time interval ``dt``. + + :param dt: time interval to integrate over. + :return: Read-only Jacobian (F) of integration map (f). + """ + return self._F_cache + + @abstractmethod + def process_noise_cov(self, dt=0.0): + """ + Compute and return cached process noise covariance (Q). + + :param dt: time interval to integrate over. + :return: Read-only covariance (Q) of the native state ``x`` resulting from + stochastic integration (for use with EKF). + """ + raise NotImplementedError + + +class Ncv(DifferentiableDynamicModel): + """ + NCV (Nearly-Constant Velocity) dynamic model. May be subclassed, e.g., with + CWNA (Continuous White Noise Acceleration) or DWNA (Discrete White Noise + Acceleration). + + :param dimension: native state dimension. + :param sa2: variance of acceleration. Usually chosen so that the standard + deviation is roughly half of the max acceleration one would ever + expect to observe. + """ + + def __init__(self, dimension, sa2): + dimension_pv = dimension + super().__init__(dimension, dimension_pv, num_process_noise_parameters=1) + if not isinstance(sa2, torch.Tensor): + sa2 = torch.tensor(sa2) + self.sa2 = Parameter(sa2) + self._F_cache = {} # State transition matrix cache + self._Q_cache = {} # Process noise cov cache + + def forward(self, x, dt, do_normalization=True): + """ + Integrate native state ``x`` over time interval ``dt``. + + :param x: current native state. If the DynamicModel is non-differentiable, + be sure to handle the case of ``x`` being augmented with process + noise parameters. + :param dt: time interval to integrate over. + :param do_normalization: whether to perform normalization on output, e.g., + mod'ing angles into an interval. Has no effect for this subclass. + + :return: Native state x integrated dt into the future. + """ + F = self.jacobian(dt) + return F.mm(x.unsqueeze(1)).squeeze(1) + + def mean2pv(self, x): + """ + Compute and return PV state from native state. Useful for combining + state estimates of different types in IMM (Interacting Multiple Model) + filtering. + + :param x: native state estimate mean. + :return: PV state estimate mean. + """ + return x + + def cov2pv(self, P): + """ + Compute and return PV covariance from native covariance. Useful for + combining state estimates of different types in IMM (Interacting + Multiple Model) filtering. + + :param P: native state estimate covariance. + :return: PV state estimate covariance. + """ + return P + + def jacobian(self, dt): + """ + Compute and return cached native state transition Jacobian (F) over + time interval ``dt``. + + :param dt: time interval to integrate over. + :return: Read-only Jacobian (F) of integration map (f). + """ + if dt not in self._F_cache: + d = self._dimension + with torch.no_grad(): + F = eye_like(self.sa2, d) + F[: d // 2, d // 2 :] = dt * eye_like(self.sa2, d // 2) + self._F_cache[dt] = F + + return self._F_cache[dt] + + @abstractmethod + def process_noise_cov(self, dt=0.0): + """ + Compute and return cached process noise covariance (Q). + + :param dt: time interval to integrate over. + :return: Read-only covariance (Q) of the native state ``x`` resulting from + stochastic integration (for use with EKF). + """ + raise NotImplementedError + + +class NcpContinuous(Ncp): + """ + NCP (Nearly-Constant Position) dynamic model with CWNV (Continuous White + Noise Velocity). + + References: + "Estimation with Applications to Tracking and Navigation" by Y. Bar- + Shalom et al, 2001, p.269. + + :param dimension: native state dimension. + :param sv2: variance of velocity. Usually chosen so that the standard + deviation is roughly half of the max velocity one would ever expect + to observe. + """ + + def process_noise_cov(self, dt=0.0): + """ + Compute and return cached process noise covariance (Q). + + :param dt: time interval to integrate over. + :return: Read-only covariance (Q) of the native state ``x`` resulting from + stochastic integration (for use with EKF). + """ + if dt not in self._Q_cache: + # q: continuous-time process noise intensity with units + # length^2/time (m^2/s). Choose ``q`` so that changes in position, + # over a sampling period ``dt``, are roughly ``sqrt(q*dt)``. + q = self.sv2 * dt + Q = q * dt * eye_like(self.sv2, self._dimension) + self._Q_cache[dt] = Q + + return self._Q_cache[dt] + + +class NcvContinuous(Ncv): + """ + NCV (Nearly-Constant Velocity) dynamic model with CWNA (Continuous White + Noise Acceleration). + + References: + "Estimation with Applications to Tracking and Navigation" by Y. Bar- + Shalom et al, 2001, p.269. + + :param dimension: native state dimension. + :param sa2: variance of acceleration. Usually chosen so that the standard + deviation is roughly half of the max acceleration one would ever + expect to observe. + """ + + def process_noise_cov(self, dt=0.0): + """ + Compute and return cached process noise covariance (Q). + + :param dt: time interval to integrate over. + + :return: Read-only covariance (Q) of the native state ``x`` resulting from + stochastic integration (for use with EKF). + """ + if dt not in self._Q_cache: + with torch.no_grad(): + d = self._dimension + dt2 = dt * dt + dt3 = dt2 * dt + Q = torch.zeros(d, d, dtype=self.sa2.dtype, device=self.sa2.device) + eye = eye_like(self.sa2, d // 2) + Q[: d // 2, : d // 2] = dt3 * eye / 3.0 + Q[: d // 2, d // 2 :] = dt2 * eye / 2.0 + Q[d // 2 :, : d // 2] = dt2 * eye / 2.0 + Q[d // 2 :, d // 2 :] = dt * eye + # sa2 * dt is an intensity factor that changes in velocity + # over a sampling period ``dt``, ideally should be ~``sqrt(q*dt)``. + Q = Q * (self.sa2 * dt) + self._Q_cache[dt] = Q + + return self._Q_cache[dt] + + +class NcpDiscrete(Ncp): + """ + NCP (Nearly-Constant Position) dynamic model with DWNV (Discrete White + Noise Velocity). + + :param dimension: native state dimension. + :param sv2: variance of velocity. Usually chosen so that the standard + deviation is roughly half of the max velocity one would ever expect + to observe. + + References: + "Estimation with Applications to Tracking and Navigation" by Y. Bar- + Shalom et al, 2001, p.273. + """ + + def process_noise_cov(self, dt=0.0): + """ + Compute and return cached process noise covariance (Q). + + :param dt: time interval to integrate over. + :return: Read-only covariance (Q) of the native state `x` resulting from + stochastic integration (for use with EKF). + """ + if dt not in self._Q_cache: + Q = self.sv2 * dt * dt * eye_like(self.sv2, self._dimension) + self._Q_cache[dt] = Q + + return self._Q_cache[dt] + + +class NcvDiscrete(Ncv): + """ + NCV (Nearly-Constant Velocity) dynamic model with DWNA (Discrete White + Noise Acceleration). + + :param dimension: native state dimension. + :param sa2: variance of acceleration. Usually chosen so that the standard + deviation is roughly half of the max acceleration one would ever + expect to observe. + + References: + "Estimation with Applications to Tracking and Navigation" by Y. Bar- + Shalom et al, 2001, p.273. + """ + + def process_noise_cov(self, dt=0.0): + """ + Compute and return cached process noise covariance (Q). + + :param dt: time interval to integrate over. + :return: Read-only covariance (Q) of the native state `x` resulting from + stochastic integration (for use with EKF). (Note that this Q, modulo + numerical error, has rank `dimension/2`. So, it is only positive + semi-definite.) + """ + if dt not in self._Q_cache: + with torch.no_grad(): + d = self._dimension + dt2 = dt * dt + dt3 = dt2 * dt + dt4 = dt2 * dt2 + Q = torch.zeros(d, d, dtype=self.sa2.dtype, device=self.sa2.device) + Q[: d // 2, : d // 2] = 0.25 * dt4 * eye_like(self.sa2, d // 2) + Q[: d // 2, d // 2 :] = 0.5 * dt3 * eye_like(self.sa2, d // 2) + Q[d // 2 :, : d // 2] = 0.5 * dt3 * eye_like(self.sa2, d // 2) + Q[d // 2 :, d // 2 :] = dt2 * eye_like(self.sa2, d // 2) + Q = Q * self.sa2 + self._Q_cache[dt] = Q + + return self._Q_cache[dt] diff --git a/pyro/source/pyro/contrib/tracking/extended_kalman_filter.py b/pyro/source/pyro/contrib/tracking/extended_kalman_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..68cbae0b66c81e061141fa322300eca4f51e9440 --- /dev/null +++ b/pyro/source/pyro/contrib/tracking/extended_kalman_filter.py @@ -0,0 +1,227 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions.utils import lazy_property + +import pyro.distributions as dist +from pyro.distributions.util import eye_like + + +class EKFState: + """ + State-Centric EKF (Extended Kalman Filter) for use with either an NCP + (Nearly-Constant Position) or NCV (Nearly-Constant Velocity) target dynamic + model. Stores a target dynamic model, state estimate, and state time. + Incoming ``Measurement`` provide sensor information for updates. + + .. warning:: For efficiency, the dynamic model is only shallow-copied. Make + a deep copy outside as necessary to protect against unexpected changes. + + :param dynamic_model: target dynamic model. + :param mean: mean of target state estimate. + :param cov: covariance of target state estimate. + :param time: time of state estimate. + """ + + def __init__(self, dynamic_model, mean, cov, time=None, frame_num=None): + self._dynamic_model = dynamic_model + self._mean = mean + self._cov = cov + if time is None and frame_num is None: + raise ValueError("Must provide time or frame_num!") + self._time = time + self._frame_num = frame_num + + @property + def dynamic_model(self): + """ + Dynamic model access. + """ + return self._dynamic_model + + @property + def dimension(self): + """ + Native state dimension access. + """ + return self._dynamic_model.dimension + + @property + def mean(self): + """ + Native state estimate mean access. + """ + return self._mean + + @property + def cov(self): + """ + Native state estimate covariance access. + """ + return self._cov + + @property + def dimension_pv(self): + """ + PV state dimension access. + """ + return self._dynamic_model.dimension_pv + + @lazy_property + def mean_pv(self): + """ + Compute and return cached PV state estimate mean. + """ + return self._dynamic_model.mean2pv(self._mean) + + @lazy_property + def cov_pv(self): + """ + Compute and return cached PV state estimate covariance. + """ + return self._dynamic_model.cov2pv(self._cov) + + @property + def time(self): + """ + Continuous State time access. + """ + return self._time + + @property + def frame_num(self): + """ + Discrete State time access. + """ + return self._frame_num + + def predict(self, dt=None, destination_time=None, destination_frame_num=None): + """ + Use dynamic model to predict (aka propagate aka integrate) state + estimate in-place. + + :param dt: time to integrate over. The state time will be automatically + incremented this amount unless you provide ``destination_time``. + Using ``destination_time`` may be preferable for prevention of + roundoff error accumulation. + :param destination_time: optional value to set continuous state time to + after integration. If this is not provided, then + `destination_frame_num` must be. + :param destination_frame_num: optional value to set discrete state time to + after integration. If this is not provided, then + `destination_frame_num` must be. + """ + assert (dt is None) ^ (destination_time is None) + if dt is None: + dt = destination_time - self._time + elif destination_time is None: + destination_time = self._time + dt + pred_mean = self._dynamic_model(self._mean, dt) + + F = self._dynamic_model.jacobian(dt) + Q = self._dynamic_model.process_noise_cov(dt) + pred_cov = F.mm(self._cov).mm(F.transpose(-1, -2)) + Q + + if destination_time is None and destination_frame_num is None: + raise ValueError( + "destination_time or destination_frame_num must be specified!" + ) + + return EKFState( + self._dynamic_model, + pred_mean, + pred_cov, + destination_time, + destination_frame_num, + ) + + def innovation(self, measurement): + """ + Compute and return the innovation that a measurement would induce if + it were used for an update, but don't actually perform the update. + Assumes state and measurement are time-aligned. Useful for computing + Chi^2 stats and likelihoods. + + :param measurement: measurement + :return: Innovation mean and covariance of hypothetical update. + :rtype: tuple(``torch.Tensor``, ``torch.Tensor``) + """ + assert ( + self._time == measurement.time + ), "State time and measurement time must be aligned!" + + # Compute innovation. + x_pv = self._dynamic_model.mean2pv(self._mean) + H = measurement.jacobian(x_pv)[:, : self.dimension] + R = measurement.cov + z = measurement.mean + z_predicted = measurement(x_pv) + dz = measurement.geodesic_difference(z, z_predicted) + S = H.mm(self._cov).mm(H.transpose(-1, -2)) + R # innovation cov + + return dz, S + + def log_likelihood_of_update(self, measurement): + """ + Compute and return the likelihood of a potential update, but don't + actually perform the update. Assumes state and measurement are time- + aligned. Useful for gating and calculating costs in assignment problems + for data association. + + :param: measurement. + :return: Likelihood of hypothetical update. + """ + dz, S = self.innovation(measurement) + return dist.MultivariateNormal( + torch.zeros(S.size(-1), dtype=S.dtype, device=S.device), S + ).log_prob(dz) + + def update(self, measurement): + """ + Use measurement to update state estimate in-place and return + innovation. The innovation is useful, e.g., for evaluating filter + consistency or updating model likelihoods when the ``EKFState`` is part + of an ``IMMFState``. + + :param: measurement. + :returns: EKF State, Innovation mean and covariance. + """ + if self._time is not None: + assert ( + self._time == measurement.time + ), "State time and measurement time must be aligned!" + if self._frame_num is not None: + assert ( + self._frame_num == measurement.frame_num + ), "State time and measurement time must be aligned!" + + x = self._mean + x_pv = self._dynamic_model.mean2pv(x) + P = self.cov + H = measurement.jacobian(x_pv)[:, : self.dimension] + R = measurement.cov + z = measurement.mean + z_predicted = measurement(x_pv) + dz = measurement.geodesic_difference(z, z_predicted) + S = H.mm(P).mm(H.transpose(-1, -2)) + R # innovation cov + + K_prefix = self._cov.mm(H.transpose(-1, -2)) + dx = K_prefix.mm(torch.linalg.solve(S, dz.unsqueeze(1))).squeeze(1) # K*dz + x = self._dynamic_model.geodesic_difference(x, -dx) + + I = eye_like(x, self._dynamic_model.dimension) # noqa: E741 + ImKH = I - K_prefix.mm(torch.linalg.solve(S, H)) + # *Joseph form* of covariance update for numerical stability. + S_inv_R = torch.linalg.solve(S, R) + P = ImKH.mm(self.cov).mm(ImKH.transpose(-1, -2)) + K_prefix.mm( + torch.linalg.solve(S, K_prefix.mm(S_inv_R).transpose(-1, -2)) + ) + + pred_mean = x + pred_cov = P + state = EKFState( + self._dynamic_model, pred_mean, pred_cov, self._time, self._frame_num + ) + + return state, (dz, S) diff --git a/pyro/source/pyro/contrib/tracking/hashing.py b/pyro/source/pyro/contrib/tracking/hashing.py new file mode 100644 index 0000000000000000000000000000000000000000..c23624fe13658078ca3c94f1157deecd03b68ad9 --- /dev/null +++ b/pyro/source/pyro/contrib/tracking/hashing.py @@ -0,0 +1,219 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import heapq +import itertools +from collections import defaultdict +from numbers import Number + +import torch + + +class LSH: + """ + Implements locality-sensitive hashing for low-dimensional euclidean space. + + + Allows to efficiently find neighbours of a point. Provides 2 guarantees: + + - Difference between coordinates of points not returned by :meth:`nearby` + and input point is larger than ``radius``. + - Difference between coordinates of points returned by :meth:`nearby` and + input point is smaller than 2 ``radius``. + + Example: + + >>> radius = 1 + >>> lsh = LSH(radius) + >>> a = torch.tensor([-0.51, -0.51]) # hash(a)=(-1,-1) + >>> b = torch.tensor([-0.49, -0.49]) # hash(a)=(0,0) + >>> c = torch.tensor([1.0, 1.0]) # hash(b)=(1,1) + >>> lsh.add('a', a) + >>> lsh.add('b', b) + >>> lsh.add('c', c) + >>> # even though c is within 2radius of a + >>> lsh.nearby('a') # doctest: +SKIP + {'b'} + >>> lsh.nearby('b') # doctest: +SKIP + {'a', 'c'} + >>> lsh.remove('b') + >>> lsh.nearby('a') # doctest: +SKIP + set() + + + :param float radius: Scaling parameter used in hash function. Determines the size of the neighbourhood. + + """ + + def __init__(self, radius): + if not (isinstance(radius, Number) and radius > 0): + raise ValueError( + "radius must be float greater than 0, given: {}".format(radius) + ) + self._radius = radius + self._hash_to_key = defaultdict(set) + self._key_to_hash = {} + + def _hash(self, point): + coords = (point / self._radius).round() + return tuple(map(int, coords)) + + def add(self, key, point): + """ + Adds (``key``, ``point``) pair to the hash. + + + :param key: Key used identify ``point``. + :param torch.Tensor point: data, should be detached and on cpu. + """ + _hash = self._hash(point) + if key in self._key_to_hash: + self.remove(key) + self._key_to_hash[key] = _hash + self._hash_to_key[_hash].add(key) + + def remove(self, key): + """ + Removes ``key`` and corresponding point from the hash. + + + Raises :exc:`KeyError` if key is not in hash. + + + :param key: key used to identify point. + """ + _hash = self._key_to_hash.pop(key) + self._hash_to_key[_hash].remove(key) + + def nearby(self, key): + r""" + Returns a set of keys which are neighbours of the point identified by ``key``. + + + Two points are nearby if difference of each element of their hashes is smaller than 2. In euclidean space, this + corresponds to all points :math:`\mathbf{p}` where :math:`|\mathbf{p}_k-(\mathbf{p_{key}})_k| 0): + raise ValueError( + "radius must be float greater than 0, given: {}".format(radius) + ) + self._radius = radius + self._bins = set() + + def _hash(self, point): + coords = (point / self._radius).round() + return tuple(map(int, coords)) + + def try_add(self, point): + """ + Attempts to add ``point`` to set. Only adds there are no points in the ``point``'s bin. + + + :param torch.Tensor point: Point to be queried, should be detached and on cpu. + :return: ``True`` if point is successfully added, ``False`` if there is already a point in ``point``'s bin. + :rtype: bool + """ + _hash = self._hash(point) + if _hash in self._bins: + return False + self._bins.add(_hash) + return True + + +def merge_points(points, radius): + """ + Greedily merge points that are closer than given radius. + + This uses :class:`LSH` to achieve complexity that is linear in the number + of merged clusters and quadratic in the size of the largest merged cluster. + + :param torch.Tensor points: A tensor of shape ``(K,D)`` where ``K`` is + the number of points and ``D`` is the number of dimensions. + :param float radius: The minimum distance nearer than which + points will be merged. + :return: A tuple ``(merged_points, groups)`` where ``merged_points`` is a + tensor of shape ``(J,D)`` where ``J <= K``, and ``groups`` is a list of + tuples of indices mapping merged points to original points. Note that + ``len(groups) == J`` and ``sum(len(group) for group in groups) == K``. + :rtype: tuple + """ + if points.dim() != 2: + raise ValueError( + "Expected points.shape == (K,D), but got {}".format(points.shape) + ) + if not (isinstance(radius, Number) and radius > 0): + raise ValueError( + "Expected radius to be a positive number, but got {}".format(radius) + ) + radius = ( + 0.99 * radius + ) # avoid merging points exactly radius apart, e.g. grid points + threshold = radius**2 + + # setup data structures to cheaply search for nearest pairs + lsh = LSH(radius) + priority_queue = [] + groups = [(i,) for i in range(len(points))] + for i, point in enumerate(points): + lsh.add(i, point) + for j in lsh.nearby(i): + d2 = (point - points[j]).pow(2).sum().item() + if d2 < threshold: + heapq.heappush(priority_queue, (d2, j, i)) + if not priority_queue: + return points, groups + + # convert from dense to sparse representation + next_id = len(points) + points = dict(enumerate(points)) + groups = dict(enumerate(groups)) + + # greedily merge + while priority_queue: + d1, i, j = heapq.heappop(priority_queue) + if i not in points or j not in points: + continue + k = next_id + next_id += 1 + points[k] = (points.pop(i) + points.pop(j)) / 2 + groups[k] = groups.pop(i) + groups.pop(j) + lsh.remove(i) + lsh.remove(j) + lsh.add(k, points[k]) + for i in lsh.nearby(k): + if i == k: + continue + d2 = (points[i] - points[k]).pow(2).sum().item() + if d2 < threshold: + heapq.heappush(priority_queue, (d2, i, k)) + + # convert from sparse to dense representation + ids = sorted(points.keys()) + points = torch.stack([points[i] for i in ids]) + groups = [groups[i] for i in ids] + + return points, groups diff --git a/pyro/source/pyro/contrib/tracking/measurements.py b/pyro/source/pyro/contrib/tracking/measurements.py new file mode 100644 index 0000000000000000000000000000000000000000..0df914241d2070eb3fb9e5b5e31879bb31629fc7 --- /dev/null +++ b/pyro/source/pyro/contrib/tracking/measurements.py @@ -0,0 +1,153 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from abc import ABCMeta, abstractmethod + +import torch + +from pyro.distributions.util import eye_like + + +class Measurement(object, metaclass=ABCMeta): + """ + Gaussian measurement interface. + + :param mean: mean of measurement distribution. + :param cov: covariance of measurement distribution. + :param time: continuous time of measurement. If this is not + provided, `frame_num` must be. + :param frame_num: discrete time of measurement. If this is not + provided, `time` must be. + """ + + def __init__(self, mean, cov, time=None, frame_num=None): + self._dimension = len(mean) + self._mean = mean + self._cov = cov + if time is None and frame_num is None: + raise ValueError("Must provide time or frame_num!") + self._time = time + self._frame_num = frame_num + + @property + def dimension(self): + """ + Measurement space dimension access. + """ + return self._dimension + + @property + def mean(self): + """ + Measurement mean (``z`` in most Kalman Filtering literature). + """ + return self._mean + + @property + def cov(self): + """ + Noise covariance (``R`` in most Kalman Filtering literature). + """ + return self._cov + + @property + def time(self): + """ + Continuous time of measurement. + """ + return self._time + + @property + def frame_num(self): + """ + Discrete time of measurement. + """ + return self._frame_num + + @abstractmethod + def __call__(self, x, do_normalization=True): + """ + Measurement map (h) for predicting a measurement ``z`` from target + state ``x``. + + :param x: PV state. + :param do_normalization: whether to normalize output, e.g., mod'ing angles + into an interval. + :return Measurement predicted from state ``x``. + """ + raise NotImplementedError + + def geodesic_difference(self, z1, z0): + """ + Compute and return the geodesic difference between 2 measurements. + This is a generalization of the Euclidean operation ``z1 - z0``. + + :param z1: measurement. + :param z0: measurement. + :return: Geodesic difference between ``z1`` and ``z2``. + """ + return z1 - z0 # Default to Euclidean behavior. + + +class DifferentiableMeasurement(Measurement): + """ + Interface for Gaussian measurement for which Jacobians can be efficiently + calculated, usu. analytically or by automatic differentiation. + """ + + @abstractmethod + def jacobian(self, x=None): + """ + Compute and return Jacobian (H) of measurement map (h) at target PV + state ``x`` . + + :param x: PV state. Use default argument ``None`` when the Jacobian is not + state-dependent. + :return: Read-only Jacobian (H) of measurement map (h). + """ + raise NotImplementedError + + +class PositionMeasurement(DifferentiableMeasurement): + """ + Full-rank Gaussian position measurement in Euclidean space. + + :param mean: mean of measurement distribution. + :param cov: covariance of measurement distribution. + :param time: time of measurement. + """ + + def __init__(self, mean, cov, time=None, frame_num=None): + super().__init__(mean, cov, time=time, frame_num=frame_num) + self._jacobian = torch.cat( + [ + eye_like(mean, self.dimension), + torch.zeros( + self.dimension, self.dimension, dtype=mean.dtype, device=mean.device + ), + ], + dim=1, + ) + + def __call__(self, x, do_normalization=True): + """ + Measurement map (h) for predicting a measurement ``z`` from target + state ``x``. + + :param x: PV state. + :param do_normalization: whether to normalize output. Has no effect for + this subclass. + :return: Measurement predicted from state ``x``. + """ + return x[: self._dimension] + + def jacobian(self, x=None): + """ + Compute and return Jacobian (H) of measurement map (h) at target PV + state ``x`` . + + :param x: PV state. The default argument ``None`` may be used in this + subclass since the Jacobian is not state-dependent. + :return: Read-only Jacobian (H) of measurement map (h). + """ + return self._jacobian diff --git a/pyro/source/pyro/contrib/util.py b/pyro/source/pyro/contrib/util.py new file mode 100644 index 0000000000000000000000000000000000000000..6654db01f46ee7449e3866cd347b672f857de89b --- /dev/null +++ b/pyro/source/pyro/contrib/util.py @@ -0,0 +1,97 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import weakref +from collections import OrderedDict + +import torch + +import pyro + + +def get_indices(labels, sizes=None, tensors=None): + indices = [] + start = 0 + if sizes is None: + sizes = OrderedDict([(l, t.shape[0]) for l, t in tensors.items()]) + for label in sizes: + end = start + sizes[label] + if label in labels: + indices.extend(range(start, end)) + start = end + return torch.tensor(indices) + + +def tensor_to_dict(sizes, tensor, subset=None): + if subset is None: + subset = sizes.keys() + start = 0 + out = {} + for label, size in sizes.items(): + end = start + size + if label in subset: + out[label] = tensor[..., start:end] + start = end + return out + + +def rmm(A, B): + """Shorthand for `matmul`.""" + return torch.matmul(A, B) + + +def rmv(A, b): + """Tensorized matrix vector multiplication of rightmost dimensions.""" + return torch.matmul(A, b.unsqueeze(-1)).squeeze(-1) + + +def rvv(a, b): + """Tensorized vector vector multiplication of rightmost dimensions.""" + return torch.matmul(a.unsqueeze(-2), b.unsqueeze(-1)).squeeze(-2).squeeze(-1) + + +def lexpand(A, *dimensions): + """Expand tensor, adding new dimensions on left.""" + return A.expand(tuple(dimensions) + A.shape) + + +def rexpand(A, *dimensions): + """Expand tensor, adding new dimensions on right.""" + return A.view(A.shape + (1,) * len(dimensions)).expand(A.shape + tuple(dimensions)) + + +def rdiag(v): + """Converts the rightmost dimension to a diagonal matrix.""" + return rexpand(v, v.shape[-1]) * torch.eye(v.shape[-1]) + + +def rtril(M, diagonal=0, upper=False): + """Takes the lower-triangular of the rightmost 2 dimensions.""" + if upper: + return rtril(M, diagonal=diagonal, upper=False).transpose(-1, -2) + return M * torch.tril(torch.ones(M.shape[-2], M.shape[-1]), diagonal=diagonal) + + +def iter_plates_to_shape(shape): + # Go backwards (right to left) + for i, s in enumerate(shape[::-1]): + yield pyro.plate("plate_" + str(i), s) + + +def check_no_weakref(obj, path="", avoid_ids=None): + """Attempts to check that an object has no weakrefs.""" + if avoid_ids is None: + avoid_ids = {id(obj)} + + if isinstance(obj, weakref.ref): + raise ValueError(f"Weakref found at {path}") + elif isinstance(obj, dict): + for k, v in obj.items(): + if id(v) not in avoid_ids: + check_no_weakref(v, path + f"[{k}]") + elif isinstance(obj, (list, tuple)): + for i, v in enumerate(obj): + if id(v) not in avoid_ids: + check_no_weakref(v, path + f"[{i}]") + elif hasattr(obj, "__dict__"): + check_no_weakref(obj.__dict__, path) diff --git a/pyro/source/pyro/contrib/zuko.py b/pyro/source/pyro/contrib/zuko.py new file mode 100644 index 0000000000000000000000000000000000000000..232b773389d9edae0c5274a2575c9b0db1459dec --- /dev/null +++ b/pyro/source/pyro/contrib/zuko.py @@ -0,0 +1,81 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +""" +This file contains helpers to use `Zuko `_-based +normalizing flows within Pyro piplines. + +Accompanying tutorials can be found at `tutorial/svi_flow_guide.ipynb` and +`tutorial/vae_flow_prior.ipynb`. +""" + +import torch +from torch import Size, Tensor + +import pyro + + +class ZukoToPyro(pyro.distributions.TorchDistribution): + r"""Wraps a Zuko distribution as a Pyro distribution. + + If ``dist`` has an ``rsample_and_log_prob`` method, like Zuko's flows, it will be + used when sampling instead of ``rsample``. The returned log density will be cached + for later scoring. + + :param dist: A distribution instance. + :type dist: torch.distributions.Distribution + + .. code-block:: python + + flow = zuko.flows.MAF(features=5) + + # flow() is a torch.distributions.Distribution + + dist = flow() + x = dist.sample((2, 3)) + log_p = dist.log_prob(x) + + # ZukoToPyro(flow()) is a pyro.distributions.Distribution + + dist = ZukoToPyro(flow()) + x = dist((2, 3)) + log_p = dist.log_prob(x) + + with pyro.plate("data", 42): + z = pyro.sample("z", dist) + """ + + def __init__(self, dist: torch.distributions.Distribution): + self.dist = dist + self.cache = {} + + @property + def has_rsample(self) -> bool: + return self.dist.has_rsample + + @property + def event_shape(self) -> Size: + return self.dist.event_shape + + @property + def batch_shape(self) -> Size: + return self.dist.batch_shape + + def __call__(self, shape: Size = ()) -> Tensor: + if hasattr(self.dist, "rsample_and_log_prob"): # fast sampling + scoring + x, self.cache[x] = self.dist.rsample_and_log_prob(shape) + elif self.has_rsample: + x = self.dist.rsample(shape) + else: + x = self.dist.sample(shape) + + return x + + def log_prob(self, x: Tensor) -> Tensor: + if x in self.cache: + return self.cache[x] + else: + return self.dist.log_prob(x) + + def expand(self, *args, **kwargs): + return ZukoToPyro(self.dist.expand(*args, **kwargs)) diff --git a/pyro/source/pyro/distributions/__init__.py b/pyro/source/pyro/distributions/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1f33b59666cb5365d47e602a6e01645b0f8148fa --- /dev/null +++ b/pyro/source/pyro/distributions/__init__.py @@ -0,0 +1,263 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pyro.distributions.torch_patch # noqa F403 + +# Import * to get the latest upstream distributions. +from pyro.distributions.torch import * # noqa F403 + +# Additionally try to import explicitly to help mypy static analysis. +try: + from pyro.distributions.torch import ( + Bernoulli, + Beta, + Binomial, + Categorical, + Cauchy, + Chi2, + ContinuousBernoulli, + Dirichlet, + Exponential, + ExponentialFamily, + FisherSnedecor, + Gamma, + Geometric, + Gumbel, + HalfCauchy, + HalfNormal, + Independent, + Kumaraswamy, + Laplace, + LKJCholesky, + LogisticNormal, + LogNormal, + LowRankMultivariateNormal, + MixtureSameFamily, + Multinomial, + MultivariateNormal, + NegativeBinomial, + Normal, + OneHotCategorical, + OneHotCategoricalStraightThrough, + Pareto, + Poisson, + RelaxedBernoulli, + RelaxedOneHotCategorical, + StudentT, + TransformedDistribution, + Uniform, + VonMises, + Weibull, + Wishart, + ) +except ImportError: + pass + +from pyro.distributions.affine_beta import AffineBeta +from pyro.distributions.asymmetriclaplace import ( + AsymmetricLaplace, + SoftAsymmetricLaplace, +) +from pyro.distributions.avf_mvn import AVFMultivariateNormal +from pyro.distributions.coalescent import ( + CoalescentRateLikelihood, + CoalescentTimes, + CoalescentTimesWithRate, +) +from pyro.distributions.conditional import ( + ConditionalDistribution, + ConditionalTransform, + ConditionalTransformedDistribution, + ConditionalTransformModule, +) +from pyro.distributions.conjugate import ( + BetaBinomial, + DirichletMultinomial, + GammaPoisson, +) +from pyro.distributions.delta import Delta +from pyro.distributions.diag_normal_mixture import MixtureOfDiagNormals +from pyro.distributions.diag_normal_mixture_shared_cov import ( + MixtureOfDiagNormalsSharedCovariance, +) +from pyro.distributions.distribution import Distribution +from pyro.distributions.empirical import Empirical +from pyro.distributions.extended import ExtendedBetaBinomial, ExtendedBinomial +from pyro.distributions.folded import FoldedDistribution +from pyro.distributions.gaussian_scale_mixture import GaussianScaleMixture +from pyro.distributions.grouped_normal_normal import GroupedNormalNormal +from pyro.distributions.hmm import ( + DiscreteHMM, + GammaGaussianHMM, + GaussianHMM, + GaussianMRF, + IndependentHMM, + LinearHMM, +) +from pyro.distributions.improper_uniform import ImproperUniform + +if "InverseGamma" not in locals(): # Use PyTorch version if available. + from pyro.distributions.inverse_gamma import InverseGamma +from pyro.distributions.lkj import LKJ, LKJCorrCholesky +from pyro.distributions.log_normal_negative_binomial import LogNormalNegativeBinomial +from pyro.distributions.logistic import Logistic, SkewLogistic +from pyro.distributions.mixture import MaskedMixture +from pyro.distributions.multivariate_studentt import MultivariateStudentT +from pyro.distributions.nanmasked import NanMaskedMultivariateNormal, NanMaskedNormal +from pyro.distributions.omt_mvn import OMTMultivariateNormal +from pyro.distributions.one_one_matching import OneOneMatching +from pyro.distributions.one_two_matching import OneTwoMatching +from pyro.distributions.ordered_logistic import OrderedLogistic +from pyro.distributions.polya_gamma import TruncatedPolyaGamma +from pyro.distributions.projected_normal import ProjectedNormal +from pyro.distributions.rejector import Rejector +from pyro.distributions.relaxed_straight_through import ( + RelaxedBernoulliStraightThrough, + RelaxedOneHotCategoricalStraightThrough, +) +from pyro.distributions.sine_bivariate_von_mises import SineBivariateVonMises +from pyro.distributions.sine_skewed import SineSkewed +from pyro.distributions.softlaplace import SoftLaplace +from pyro.distributions.spanning_tree import SpanningTree +from pyro.distributions.stable import Stable, StableWithLogProb +from pyro.distributions.torch import __all__ as torch_dists +from pyro.distributions.torch_distribution import ( + ExpandedDistribution, + MaskedDistribution, + TorchDistribution, +) +from pyro.distributions.torch_transform import ComposeTransformModule, TransformModule +from pyro.distributions.unit import Unit +from pyro.distributions.util import ( + enable_validation, + is_validation_enabled, + validation_enabled, +) +from pyro.distributions.von_mises_3d import VonMises3D +from pyro.distributions.zero_inflated import ( + ZeroInflatedDistribution, + ZeroInflatedNegativeBinomial, + ZeroInflatedPoisson, +) + +from . import constraints, kl, transforms + +__all__ = [ + "AVFMultivariateNormal", + "AffineBeta", + "AsymmetricLaplace", + "Bernoulli", + "Beta", + "BetaBinomial", + "Binomial", + "Categorical", + "Cauchy", + "Chi2", + "CoalescentRateLikelihood", + "CoalescentTimes", + "CoalescentTimesWithRate", + "ComposeTransformModule", + "ConditionalDistribution", + "ConditionalTransform", + "ConditionalTransformModule", + "ConditionalTransformedDistribution", + "ContinuousBernoulli", + "Delta", + "Dirichlet", + "DirichletMultinomial", + "DiscreteHMM", + "Distribution", + "Empirical", + "ExpandedDistribution", + "Exponential", + "ExponentialFamily", + "ExtendedBetaBinomial", + "ExtendedBinomial", + "FisherSnedecor", + "FoldedDistribution", + "Gamma", + "GammaGaussianHMM", + "GammaPoisson", + "GaussianHMM", + "GaussianMRF", + "GaussianScaleMixture", + "Geometric", + "GroupedNormalNormal", + "Gumbel", + "HalfCauchy", + "HalfNormal", + "ImproperUniform", + "Independent", + "IndependentHMM", + "InverseGamma", + "Kumaraswamy", + "LKJ", + "LKJCholesky", + "LKJCorrCholesky", + "Laplace", + "LinearHMM", + "LogNormal", + "LogNormalNegativeBinomial", + "Logistic", + "LogisticNormal", + "LowRankMultivariateNormal", + "MaskedDistribution", + "MaskedMixture", + "MixtureOfDiagNormals", + "MixtureOfDiagNormalsSharedCovariance", + "MixtureSameFamily", + "Multinomial", + "MultivariateNormal", + "MultivariateStudentT", + "NanMaskedMultivariateNormal", + "NanMaskedNormal", + "NegativeBinomial", + "Normal", + "OMTMultivariateNormal", + "OneHotCategorical", + "OneHotCategoricalStraightThrough", + "OneOneMatching", + "OneTwoMatching", + "OrderedLogistic", + "Pareto", + "Poisson", + "ProjectedNormal", + "Rejector", + "RelaxedBernoulli", + "RelaxedBernoulliStraightThrough", + "RelaxedOneHotCategorical", + "RelaxedOneHotCategoricalStraightThrough", + "SineBivariateVonMises", + "SineSkewed", + "SkewLogistic", + "SoftAsymmetricLaplace", + "SoftLaplace", + "SpanningTree", + "Stable", + "StableWithLogProb", + "StudentT", + "TorchDistribution", + "TransformModule", + "TransformedDistribution", + "TruncatedPolyaGamma", + "Uniform", + "Unit", + "VonMises", + "VonMises3D", + "Weibull", + "Wishart", + "ZeroInflatedDistribution", + "ZeroInflatedNegativeBinomial", + "ZeroInflatedPoisson", + "constraints", + "enable_validation", + "is_validation_enabled", + "kl", + "transforms", + "validation_enabled", +] + +# Import all torch distributions from `pyro.distributions.torch_distribution` +__all__.extend(torch_dists) +__all__[:] = sorted(set(__all__)) +del torch_dists diff --git a/pyro/source/pyro/distributions/affine_beta.py b/pyro/source/pyro/distributions/affine_beta.py new file mode 100644 index 0000000000000000000000000000000000000000..aa7d48748131a53b20ddc092d946bc4bcfa84dea --- /dev/null +++ b/pyro/source/pyro/distributions/affine_beta.py @@ -0,0 +1,122 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions import constraints +from torch.distributions.transforms import AffineTransform + +from .torch import Beta, TransformedDistribution +from .util import broadcast_shape + + +class AffineBeta(TransformedDistribution): + r""" + Beta distribution scaled by :attr:`scale` and shifted by :attr:`loc`:: + + X ~ Beta(concentration1, concentration0) + f(X) = loc + scale * X + Y = f(X) ~ AffineBeta(concentration1, concentration0, loc, scale) + + :param concentration1: 1st concentration parameter + (alpha) for the Beta distribution. + :type concentration1: float or torch.Tensor + :param concentration0: 2nd concentration parameter + (beta) for the Beta distribution. + :type concentration0: float or torch.Tensor + :param loc: location parameter. + :type loc: float or torch.Tensor + :param scale: scale parameter. + :type scale: float or torch.Tensor + """ + + arg_constraints = { + "concentration1": constraints.positive, + "concentration0": constraints.positive, + "loc": constraints.real, + "scale": constraints.positive, + } + + def __init__(self, concentration1, concentration0, loc, scale, validate_args=None): + base_dist = Beta(concentration1, concentration0, validate_args=validate_args) + super(AffineBeta, self).__init__( + base_dist, + AffineTransform(loc=loc, scale=scale), + validate_args=validate_args, + ) + + @staticmethod + def infer_shapes(concentration1, concentration0, loc, scale): + batch_shape = broadcast_shape(concentration1, concentration0, loc, scale) + event_shape = torch.Size() + return batch_shape, event_shape + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(AffineBeta, _instance) + return super(AffineBeta, self).expand(batch_shape, _instance=new) + + def sample(self, sample_shape=torch.Size()): + """ + Generates a sample from `Beta` distribution and applies `AffineTransform`. + Additionally clamps the output in order to avoid `NaN` and `Inf` values + in the gradients. + """ + with torch.no_grad(): + x = self.base_dist.sample(sample_shape) + for transform in self.transforms: + x = transform(x) + eps = torch.finfo(x.dtype).eps * self.scale + x = torch.min(torch.max(x, self.low + eps), self.high - eps) + return x + + def rsample(self, sample_shape=torch.Size()): + """ + Generates a sample from `Beta` distribution and applies `AffineTransform`. + Additionally clamps the output in order to avoid `NaN` and `Inf` values + in the gradients. + """ + x = self.base_dist.rsample(sample_shape) + for transform in self.transforms: + x = transform(x) + eps = torch.finfo(x.dtype).eps * self.scale + x = torch.min(torch.max(x, self.low + eps), self.high - eps) + return x + + @constraints.dependent_property + def support(self): + return constraints.interval(self.low, self.high) + + @property + def concentration1(self): + return self.base_dist.concentration1 + + @property + def concentration0(self): + return self.base_dist.concentration0 + + @property + def sample_size(self): + return self.concentration1 + self.concentration0 + + @property + def loc(self): + return torch.as_tensor(self.transforms[0].loc) + + @property + def scale(self): + return torch.as_tensor(self.transforms[0].scale) + + @property + def low(self): + return self.loc + + @property + def high(self): + return self.loc + self.scale + + @property + def mean(self): + return self.loc + self.scale * self.base_dist.mean + + @property + def variance(self): + return self.scale.pow(2) * self.base_dist.variance diff --git a/pyro/source/pyro/distributions/asymmetriclaplace.py b/pyro/source/pyro/distributions/asymmetriclaplace.py new file mode 100644 index 0000000000000000000000000000000000000000..de64e9fe680941999db3e75b42b1ba74a6e3a0ed --- /dev/null +++ b/pyro/source/pyro/distributions/asymmetriclaplace.py @@ -0,0 +1,210 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import torch +from torch.distributions import constraints +from torch.distributions.utils import broadcast_all, lazy_property + +from .torch_distribution import TorchDistribution + + +class AsymmetricLaplace(TorchDistribution): + """ + Asymmetric version of the :class:`~pyro.distributions.Laplace` + distribution. + + To the left of ``loc`` this acts like an + ``-Exponential(1/(asymmetry*scale))``; to the right of ``loc`` this acts + like an ``Exponential(asymmetry/scale)``. The density is continuous so the + left and right densities at ``loc`` agree. + + :param loc: Location parameter, i.e. the mode. + :param scale: Scale parameter = geometric mean of left and right scales. + :param asymmetry: Square of ratio of left to right scales. + """ + + arg_constraints = { + "loc": constraints.real, + "scale": constraints.positive, + "asymmetry": constraints.positive, + } + support = constraints.real + has_rsample = True + + def __init__(self, loc, scale, asymmetry, *, validate_args=None): + self.loc, self.scale, self.asymmetry = broadcast_all(loc, scale, asymmetry) + super().__init__(self.loc.shape, validate_args=validate_args) + + @lazy_property + def left_scale(self): + return self.scale * self.asymmetry + + @lazy_property + def right_scale(self): + return self.scale / self.asymmetry + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(AsymmetricLaplace, _instance) + batch_shape = torch.Size(batch_shape) + new.loc = self.loc.expand(batch_shape) + new.scale = self.scale.expand(batch_shape) + new.asymmetry = self.asymmetry.expand(batch_shape) + super(AsymmetricLaplace, new).__init__(batch_shape, validate_args=False) + new._validate_args = self._validate_args + return new + + def log_prob(self, value): + if self._validate_args: + self._validate_sample(value) + z = value - self.loc + z = -z.abs() / torch.where(z < 0, self.left_scale, self.right_scale) + return z - (self.left_scale + self.right_scale).log() + + def rsample(self, sample_shape=torch.Size()): + shape = self._extended_shape(sample_shape) + u, v = self.loc.new_empty((2,) + shape).exponential_() + return self.loc - self.left_scale * u + self.right_scale * v + + @property + def mean(self): + total_scale = self.left_scale + self.right_scale + return self.loc + (self.right_scale**2 - self.left_scale**2) / total_scale + + @property + def variance(self): + left = self.left_scale + right = self.right_scale + total = left + right + p = left / total + q = right / total + return p * left**2 + q * right**2 + p * q * total**2 + + +class SoftAsymmetricLaplace(TorchDistribution): + """ + Soft asymmetric version of the :class:`~pyro.distributions.Laplace` + distribution. + + This has a smooth (infinitely differentiable) density with two asymmetric + asymptotically exponential tails, one on the left and one on the right. In + the limit of ``softness → 0``, this converges in distribution to the + :class:`AsymmetricLaplace` distribution. + + This is equivalent to the sum of three random variables ``z - u + v`` where:: + + z ~ Normal(loc, scale * softness) + u ~ Exponential(1 / (scale * asymmetry)) + v ~ Exponential(asymetry / scale) + + This is also equivalent the sum of two random variables ``z + a`` where:: + + z ~ Normal(loc, scale * softness) + a ~ AsymmetricLaplace(0, scale, asymmetry) + + :param loc: Location parameter, i.e. the mode. + :param scale: Scale parameter = geometric mean of left and right scales. + :param asymmetry: Square of ratio of left to right scales. Defaults to 1. + :param softness: Scale parameter of the Gaussian smoother. Defaults to 1. + """ + + arg_constraints = { + "loc": constraints.real, + "scale": constraints.positive, + "asymmetry": constraints.positive, + "softness": constraints.positive, + } + support = constraints.real + has_rsample = True + + def __init__(self, loc, scale, asymmetry=1.0, softness=1.0, *, validate_args=None): + self.loc, self.scale, self.asymmetry, self.softness = broadcast_all( + loc, + scale, + asymmetry, + softness, + ) + super().__init__(self.loc.shape, validate_args=validate_args) + + @lazy_property + def left_scale(self): + return self.scale * self.asymmetry + + @lazy_property + def right_scale(self): + return self.scale / self.asymmetry + + @lazy_property + def soft_scale(self): + return self.scale * self.softness + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(AsymmetricLaplace, _instance) + batch_shape = torch.Size(batch_shape) + new.loc = self.loc.expand(batch_shape) + new.scale = self.scale.expand(batch_shape) + new.asymmetry = self.asymmetry.expand(batch_shape) + new.softness = self.softness.expand(batch_shape) + super(AsymmetricLaplace, new).__init__(batch_shape, validate_args=False) + new._validate_args = self._validate_args + return new + + def log_prob(self, value): + if self._validate_args: + self._validate_sample(value) + + # Standardize. + x = (value - self.loc) / self.scale + L = self.asymmetry + R = self.asymmetry.reciprocal() + S = self.softness + SS = S * S + S2 = S * math.sqrt(2) + Lx = L * x + Rx = R * x + + # This is the sum of two integrals which are proportional to: + # left = Integrate[e^(-t/L - ((x+t)/S)^2/2)/sqrt(2 pi)/S, {t,0,Infinity}] + # = 1/2 e^((2 L x + S^2)/(2 L^2)) erfc((L x + S^2)/(sqrt(2) L S)) + # right = Integrate[e^(-t/R - ((x-t)/S)^2/2)/sqrt(2 pi)/S, {t,0,Infinity}] + # = 1/2 e^((S^2 - 2 R x)/(2 R^2)) erfc((S^2 - R x)/(sqrt(2) R S)) + return ( + math.log(0.5) + + torch.logaddexp( + (SS / 2 + Lx) / L**2 + _logerfc((SS + Lx) / (L * S2)), + (SS / 2 - Rx) / R**2 + _logerfc((SS - Rx) / (R * S2)), + ) + - (L + R).log() + - self.scale.log() + ) + + def rsample(self, sample_shape=torch.Size()): + shape = self._extended_shape(sample_shape) + z = self.loc.new_empty(shape).normal_() + u, v = self.loc.new_empty((2,) + shape).exponential_() + return ( + self.loc + self.soft_scale * z - self.left_scale * u + self.right_scale * v + ) + + @property + def mean(self): + total_scale = self.left_scale + self.right_scale + return self.loc + (self.right_scale**2 - self.left_scale**2) / total_scale + + @property + def variance(self): + left = self.left_scale + right = self.right_scale + total = left + right + p = left / total + q = right / total + return p * left**2 + q * right**2 + p * q * total**2 + self.soft_scale**2 + + +def _logerfc(x): + try: + # Requires https://github.com/pytorch/pytorch/issues/31945 + return torch.logerfc(x) + except AttributeError: + return x.double().erfc().log().to(dtype=x.dtype) diff --git a/pyro/source/pyro/distributions/avf_mvn.py b/pyro/source/pyro/distributions/avf_mvn.py new file mode 100644 index 0000000000000000000000000000000000000000..d5988f385bf9d85f97ea5c7b826774e7bade930b --- /dev/null +++ b/pyro/source/pyro/distributions/avf_mvn.py @@ -0,0 +1,106 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.autograd import Function +from torch.autograd.function import once_differentiable +from torch.distributions import constraints + +from pyro.distributions.torch import MultivariateNormal +from pyro.distributions.util import sum_leftmost + + +class AVFMultivariateNormal(MultivariateNormal): + """Multivariate normal (Gaussian) distribution with transport equation inspired control + variates (adaptive velocity fields). + + A distribution over vectors in which all the elements have a joint Gaussian density. + + :param torch.Tensor loc: D-dimensional mean vector. + :param torch.Tensor scale_tril: Cholesky of Covariance matrix; D x D matrix. + :param torch.Tensor control_var: 2 x L x D tensor that parameterizes the control variate; + L is an arbitrary positive integer. This parameter needs to be learned (i.e. adapted) to + achieve lower variance gradients. In a typical use case this parameter will be adapted + concurrently with the `loc` and `scale_tril` that define the distribution. + + + Example usage:: + + control_var = torch.tensor(0.1 * torch.ones(2, 1, D), requires_grad=True) + opt_cv = torch.optim.Adam([control_var], lr=0.1, betas=(0.5, 0.999)) + + for _ in range(1000): + d = AVFMultivariateNormal(loc, scale_tril, control_var) + z = d.rsample() + cost = torch.pow(z, 2.0).sum() + cost.backward() + opt_cv.step() + opt_cv.zero_grad() + + """ + + arg_constraints = { + "loc": constraints.real, + "scale_tril": constraints.lower_triangular, + "control_var": constraints.real, + } + + def __init__(self, loc, scale_tril, control_var): + if loc.dim() != 1: + raise ValueError("AVFMultivariateNormal loc must be 1-dimensional") + if scale_tril.dim() != 2: + raise ValueError("AVFMultivariateNormal scale_tril must be 2-dimensional") + if ( + control_var.dim() != 3 + or control_var.size(0) != 2 + or control_var.size(2) != loc.size(0) + ): + raise ValueError( + "control_var should be of size 2 x L x D, where D is the dimension of the location parameter loc" + ) # noqa: E501 + self.control_var = control_var + super().__init__(loc, scale_tril=scale_tril) + + def rsample(self, sample_shape=torch.Size()): + return _AVFMVNSample.apply( + self.loc, self.scale_tril, self.control_var, sample_shape + self.loc.shape + ) + + +class _AVFMVNSample(Function): + @staticmethod + def forward(ctx, loc, scale_tril, control_var, shape): + white = torch.randn(shape, dtype=loc.dtype, device=loc.device) + z = torch.matmul(white, scale_tril.t()) + ctx.save_for_backward(scale_tril, control_var, white) + return loc + z + + @staticmethod + @once_differentiable + def backward(ctx, grad_output): + L, control_var, epsilon = ctx.saved_tensors + B, C = control_var + g = grad_output + loc_grad = sum_leftmost(grad_output, -1) + + # compute the rep trick gradient + epsilon_jb = epsilon.unsqueeze(-2) + g_ja = g.unsqueeze(-1) + diff_L_ab = sum_leftmost(g_ja * epsilon_jb, -2) + + # modulate the velocity fields with infinitesimal rotations, i.e. apply the control variate + gL = torch.matmul(g, L) + eps_gL_ab = sum_leftmost(gL.unsqueeze(-1) * epsilon.unsqueeze(-2), -2) + xi_ab = eps_gL_ab - eps_gL_ab.t() + BC_lab = B.unsqueeze(-1) * C.unsqueeze(-2) + diff_L_ab += (xi_ab.unsqueeze(0) * BC_lab).sum(0) + L_grad = torch.tril(diff_L_ab) + + # compute control_var grads + diff_B = (L_grad.unsqueeze(0) * C.unsqueeze(-2) * xi_ab.unsqueeze(0)).sum(2) + diff_C = ( + L_grad.t().unsqueeze(0) * B.unsqueeze(-2) * xi_ab.t().unsqueeze(0) + ).sum(2) + diff_CV = torch.stack([diff_B, diff_C]) + + return loc_grad, L_grad, diff_CV, None diff --git a/pyro/source/pyro/distributions/coalescent.py b/pyro/source/pyro/distributions/coalescent.py new file mode 100644 index 0000000000000000000000000000000000000000..291e87b96fb657834e98385b6d91604fb85a0895 --- /dev/null +++ b/pyro/source/pyro/distributions/coalescent.py @@ -0,0 +1,526 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import functools +import weakref +from collections import namedtuple + +import torch +from torch.distributions import constraints + +from pyro.distributions.util import broadcast_shape, is_validation_enabled +from pyro.ops.special import safe_log + +from .torch_distribution import TorchDistribution + + +class CoalescentTimesConstraint(constraints.Constraint): + def __init__(self, leaf_times, *, ordered=True): + self.leaf_times = leaf_times + self.ordered = ordered + + def check(self, value): + # There must always at least one lineage. + coal_times = value + phylogeny = _make_phylogeny(self.leaf_times, coal_times) + at_least_one_lineage = (phylogeny.lineages > 0).all(dim=-1) + if not self.ordered: + return at_least_one_lineage + + # Inputs must be ordered. + ordered = (value[..., :-1] <= value[..., 1:]).all(dim=-1) + return ordered & at_least_one_lineage + + +class CoalescentTimes(TorchDistribution): + """ + Distribution over sorted coalescent times given irregular sampled + ``leaf_times`` and constant population size. + + Sample values will be **sorted** sets of binary coalescent times. Each + sample ``value`` will have cardinality ``value.size(-1) = + leaf_times.size(-1) - 1``, so that phylogenies are complete binary trees. + This distribution can thus be batched over multiple samples of phylogenies + given fixed (number of) leaf times, e.g. over phylogeny samples from BEAST + or MrBayes. + + **References** + + [1] J.F.C. Kingman (1982) + "On the Genealogy of Large Populations" + Journal of Applied Probability + [2] J.F.C. Kingman (1982) + "The Coalescent" + Stochastic Processes and their Applications + + :param torch.Tensor leaf_times: Vector of times of sampling events, i.e. + leaf nodes in the phylogeny. These can be arbitrary real numbers with + arbitrary order and duplicates. + :param torch.Tensor rate: Base coalescent rate (pairwise rate of + coalescence) under a constant population size model. Defaults to 1. + """ + + arg_constraints = {"leaf_times": constraints.real, "rate": constraints.positive} + + def __init__(self, leaf_times, rate=1.0, *, validate_args=None): + rate = torch.as_tensor(rate, dtype=leaf_times.dtype, device=leaf_times.device) + batch_shape = broadcast_shape(rate.shape, leaf_times.shape[:-1]) + event_shape = (leaf_times.size(-1) - 1,) + self.leaf_times = leaf_times + self.rate = rate + super().__init__(batch_shape, event_shape, validate_args=validate_args) + + @constraints.dependent_property + def support(self): + return CoalescentTimesConstraint(self.leaf_times) + + def log_prob(self, value): + if self._validate_args: + self._validate_sample(value) + coal_times = value + phylogeny = _make_phylogeny(self.leaf_times, coal_times) + + # The coalescent process is like a Poisson process with rate binomial + # in the number of lineages, which changes at each event. + binomial = phylogeny.binomial[..., :-1] + interval = phylogeny.times[..., :-1] - phylogeny.times[..., 1:] + log_prob = self.rate.log() * coal_times.size(-1) - self.rate * ( + binomial * interval + ).sum(-1) + + # Scaling by those rates and accounting for log|jacobian|, the density + # is that of a collection of independent Exponential intervals. + log_abs_det_jacobian = phylogeny.coal_binomial.log().sum(-1).neg() + return log_prob - log_abs_det_jacobian + + def sample(self, sample_shape=torch.Size()): + shape = self._extended_shape(sample_shape)[:-1] + leaf_times = self.leaf_times.expand(shape + (-1,)) + return _sample_coalescent_times(leaf_times) + + +class CoalescentTimesWithRate(TorchDistribution): + """ + Distribution over coalescent times given irregular sampled ``leaf_times`` + and piecewise constant coalescent rates defined on a regular time grid. + + This assumes a piecewise constant base coalescent rate specified on time + intervals ``(-inf,1]``, ``[1,2]``, ..., ``[T-1,inf)``, where ``T = + rate_grid.size(-1)``. Leaves may be sampled at arbitrary real times, but + are commonly sampled in the interval ``[0, T]``. + + Sample values will be sorted sets of binary coalescent times. Each sample + ``value`` will have cardinality ``value.size(-1) = leaf_times.size(-1) - + 1``, so that phylogenies are complete binary trees. This distribution can + thus be batched over multiple samples of phylogenies given fixed (number + of) leaf times, e.g. over phylogeny samples from BEAST or MrBayes. + + This distribution implements :meth:`log_prob` but not ``.sample()``. + + See also :class:`~pyro.distributions.CoalescentRateLikelihood`. + + **References** + + [1] J.F.C. Kingman (1982) + "On the Genealogy of Large Populations" + Journal of Applied Probability + [2] J.F.C. Kingman (1982) + "The Coalescent" + Stochastic Processes and their Applications + [3] A. Popinga, T. Vaughan, T. Statler, A.J. Drummond (2014) + "Inferring epidemiological dynamics with Bayesian coalescent inference: + The merits of deterministic and stochastic models" + https://arxiv.org/pdf/1407.1792.pdf + + :param torch.Tensor leaf_times: Tensor of times of sampling events, i.e. + leaf nodes in the phylogeny. These can be arbitrary real numbers with + arbitrary order and duplicates. + :param torch.Tensor rate_grid: Tensor of base coalescent rates (pairwise + rate of coalescence). For example in a simple SIR model this might be + ``beta S / I``. The rightmost dimension is time, and this tensor + represents a (batch of) rates that are piecewise constant in time. + """ + + arg_constraints = { + "leaf_times": constraints.real, + "rate_grid": constraints.positive, + } + + def __init__(self, leaf_times, rate_grid, *, validate_args=None): + batch_shape = broadcast_shape(leaf_times.shape[:-1], rate_grid.shape[:-1]) + event_shape = (leaf_times.size(-1) - 1,) + self.leaf_times = leaf_times + self.rate_grid = rate_grid + super().__init__(batch_shape, event_shape, validate_args=validate_args) + + @constraints.dependent_property + def support(self): + return CoalescentTimesConstraint(self.leaf_times) + + @property + def duration(self): + return self.rate_grid.size(-1) + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(CoalescentTimesWithRate, _instance) + new.leaf_times = self.leaf_times + new.rate_grid = self.rate_grid + super(CoalescentTimesWithRate, new).__init__( + batch_shape, self.event_shape, validate_args=False + ) + new._validate_args = self.__dict__.get("_validate_args") + return new + + def log_prob(self, value): + """ + Computes likelihood as in equations 7-8 of [3]. + + This has time complexity ``O(T + S N log(N))`` where ``T`` is the + number of time steps, ``N`` is the number of leaves, and ``S = + sample_shape.numel()`` is the number of samples of ``value``. + + :param torch.Tensor value: A tensor of coalescent times. These denote + sets of size ``leaf_times.size(-1) - 1`` along the trailing + dimension and should be sorted along that dimension. + :returns: Likelihood ``p(coal_times | leaf_times, rate_grid)`` + :rtype: torch.Tensor + """ + if self._validate_args: + self._validate_sample(value) + coal_times = value + phylogeny = _make_phylogeny(self.leaf_times, coal_times) + + # Compute survival factors for closed intervals. + cumsum = self.rate_grid.cumsum(-1) + cumsum = torch.nn.functional.pad(cumsum, (1, 0), value=0) + integral = _interpolate_gather( + cumsum, phylogeny.times[..., 1:] + ) # ignore the final lonely leaf + integral = integral[..., :-1] - integral[..., 1:] + integral = integral.clamp(min=torch.finfo(integral.dtype).tiny) # avoid nan + log_prob = -(phylogeny.binomial[..., 1:-1] * integral).sum(-1) + + # Compute density of coalescent events. + i = coal_times.floor().clamp(min=0, max=self.duration - 1).long() + rates = phylogeny.coal_binomial * _gather(self.rate_grid, -1, i) + log_prob = log_prob + safe_log(rates).sum(-1) + + batch_shape = broadcast_shape(self.batch_shape, value.shape[:-1]) + log_prob = log_prob.expand(batch_shape) + return log_prob + + +class CoalescentRateLikelihood: + """ + EXPERIMENTAL This is not a :class:`~pyro.distributions.Distribution`, but + acts as a transposed version of :class:`CoalescentTimesWithRate` making the + elements of ``rate_grid`` independent and thus compatible with ``plate`` + and ``poutine.markov``. For non-batched inputs the following are all + equivalent likelihoods:: + + # Version 1. + pyro.sample("coalescent", + CoalescentTimesWithRate(leaf_times, rate_grid), + obs=coal_times) + + # Version 2. using pyro.plate + likelihood = CoalescentRateLikelihood(leaf_times, coal_times, len(rate_grid)) + with pyro.plate("time", len(rate_grid)): + pyro.factor("coalescent", likelihood(rate_grid)) + + # Version 3. using pyro.markov + likelihood = CoalescentRateLikelihood(leaf_times, coal_times, len(rate_grid)) + for t in pyro.markov(range(len(rate_grid))): + pyro.factor("coalescent_{}".format(t), likelihood(rate_grid[t], t)) + + The third version is useful for e.g. + :class:`~pyro.infer.smcfilter.SMCFilter` where ``rate_grid`` might be + computed sequentially. + + :param torch.Tensor leaf_times: Tensor of times of sampling events, i.e. + leaf nodes in the phylogeny. These can be arbitrary real numbers with + arbitrary order and duplicates. + :param torch.Tensor coal_times: A tensor of coalescent times. These denote + sets of size ``leaf_times.size(-1) - 1`` along the trailing dimension + and should be sorted along that dimension. + :param int duration: Size of the rate grid, ``rate_grid.size(-1)``. + """ + + def __init__(self, leaf_times, coal_times, duration, *, validate_args=None): + assert leaf_times.size(-1) == 1 + coal_times.size(-1) + assert isinstance(duration, int) and duration >= 2 + if validate_args is True or validate_args is None and is_validation_enabled: + constraint = CoalescentTimesConstraint(leaf_times, ordered=False) + if not constraint.check(coal_times).all(): + raise ValueError("Invalid (leaf_times, coal_times)") + + phylogeny = _make_phylogeny(leaf_times, coal_times) + batch_shape = phylogeny.times.shape[:-1] + new_zeros = leaf_times.new_zeros + new_ones = leaf_times.new_ones + + # Construct linear part from intervals of survival outside of [0,duration]. + times = phylogeny.times.clamp(max=0) + intervals = times[..., 1:] - times[..., :-1] + pre_linear = (phylogeny.binomial[..., :-1] * intervals).sum(-1, keepdim=True) + times = phylogeny.times.clamp(min=duration) + intervals = times[..., 1:] - times[..., :-1] + post_linear = (phylogeny.binomial[..., :-1] * intervals).sum(-1, keepdim=True) + self._linear = torch.cat( + [ + pre_linear, + new_zeros(pre_linear.shape[:-1] + (duration - 2,)), + post_linear, + ], + dim=-1, + ) + + # Construct linear part from intervals of survival within [0, duration]. + times = phylogeny.times.clamp(min=0, max=duration) + sparse_diff = phylogeny.binomial[..., :-1] - phylogeny.binomial[..., 1:] + dense_diff = new_zeros(batch_shape + (1 + duration,)) + _interpolate_scatter_add_(dense_diff, times[..., 1:], sparse_diff) + self._linear += dense_diff.flip([-1]).cumsum(-1)[..., :-1].flip([-1]) + + # Construct const and log part from coalescent events. + coal_index = coal_times.floor().clamp(min=0, max=duration - 1).long() + self._const = new_zeros(batch_shape + (duration,)) + self._const.scatter_add_(-1, coal_index, phylogeny.coal_binomial.log()) + self._log = new_zeros(batch_shape + (duration,)) + self._log.scatter_add_(-1, coal_index, new_ones(coal_index.shape)) + + def __call__(self, rate_grid, t=slice(None)): + """ + Computes the likelihood of [1] equations 7-9 for one or all time + points. + + **References** + + [1] A. Popinga, T. Vaughan, T. Statler, A.J. Drummond (2014) + "Inferring epidemiological dynamics with Bayesian coalescent + inference: The merits of deterministic and stochastic models" + https://arxiv.org/pdf/1407.1792.pdf + + :param torch.Tensor rate_grid: Tensor of base coalescent rates + (pairwise rate of coalescence). For example in a simple SIR model + this might be ``beta S / I``. The rightmost dimension is time, and + this tensor represents a (batch of) rates that are piecwise + constant in time. + :param time: Optional time index by which the input was sliced, as in + ``rate_grid[..., t]`` This can be an integer for sequential models + or ``slice(None)`` for vectorized models. + :type time: int or slice + :returns: Likelihood ``p(coal_times | leaf_times, rate_grid)``, + or a part of that likelihood corresponding to a single time step. + :rtype: torch.Tensor + """ + const = self._const[..., t] + linear = self._linear[..., t] * rate_grid + log = ( + self._log[..., t] + * rate_grid.clamp(min=torch.finfo(rate_grid.dtype).tiny).log() + ) + return const + linear + log + + +def bio_phylo_to_times(tree, *, get_time=None): + """ + Extracts coalescent summary statistics from a phylogeny, suitable for use + with :class:`~pyro.distributions.CoalescentRateLikelihood`. + + :param Bio.Phylo.BaseTree.Clade tree: A phylogenetic tree. + :param callable get_time: Optional function to extract the time point of + each sub-:class:`~Bio.Phylo.BaseTree.Clade`. If absent, times will be + computed by cumulative `.branch_length`. + :returns: A pair of :class:`~torch.Tensor` s ``(leaf_times, coal_times)`` + where ``leaf_times`` are times of sampling events (leaf nodes in the + phylogenetic tree) and ``coal_times`` are times of coalescences (leaf + nodes in the phylogenetic binary tree). + :rtype: tuple + """ + if get_time is None: + # Compute time as cumulative branch length. + def get_branch_length(clade): + branch_length = clade.branch_length + return 1.0 if branch_length is None else branch_length + + times = {tree.root: get_branch_length(tree.root)} + + leaf_times = [] + coal_times = [] + for clade in tree.find_clades(): + if get_time is None: + time = times[clade] + for child in clade: + times[child] = time + get_branch_length(child) + else: + time = get_time(clade) + + num_children = len(clade) + if num_children == 0: + leaf_times.append(time) + else: + # Pyro expects binary coalescent events, so we split n-ary events + # into n-1 separate binary events. + for _ in range(num_children - 1): + coal_times.append(time) + assert len(leaf_times) == 1 + len(coal_times) + + leaf_times = torch.tensor(leaf_times) + coal_times = torch.tensor(coal_times) + return leaf_times, coal_times + + +def _gather(tensor, dim, index): + """ + Like :func:`torch.gather` but broadcasts. + """ + if dim != -1: + raise NotImplementedError + shape = broadcast_shape(tensor.shape[:-1], index.shape[:-1]) + (-1,) + tensor = tensor.expand(shape) + index = index.expand(shape) + return tensor.gather(dim, index) + + +def _interpolate_gather(array, x): + """ + Like ``torch.gather(-1, array, x)`` but continuously indexes into the + rightmost dim of an array, linearly interpolating between array values. + """ + with torch.no_grad(): + x0 = x.floor().clamp(min=0, max=array.size(-1) - 2) + x1 = x0 + 1 + f0 = _gather(array, -1, x0.long()) + f1 = _gather(array, -1, x1.long()) + return f0 * (x1 - x) + f1 * (x - x0) + + +def _interpolate_scatter_add_(dst, x, src): + """ + Like ``dst.scatter_add_(-1, x, src)`` but continuously index into the + rightmost dim of an array, linearly interpolating between array values. + """ + with torch.no_grad(): + x0 = x.floor().clamp(min=0, max=dst.size(-1) - 2) + x1 = x0 + 1 + dst.scatter_add_(-1, x0.long(), src * (x1 - x)) + dst.scatter_add_(-1, x1.long(), src * (x - x0)) + return dst + + +def _weak_memoize(fn): + cache = {} + + @functools.wraps(fn) + def memoized_fn(*args): + key = tuple(map(id, args)) + + # Allow cache hit only when tensors have not since been mutated. + version = tuple(arg._version for arg in args) + if key in cache: + old_version, result = cache[key] + if old_version == version: + return result + + result = fn(*args) + cache[key] = version, result + for arg in args: + weakref.finalize(arg, cache.pop, key, None) + return result + + return memoized_fn + + +# This helper data structure has only timing information. +_Phylogeny = namedtuple( + "_Phylogeny", + ( + "times", + "signs", + "lineages", + "binomial", + "coal_binomial", + ), +) + + +@_weak_memoize +@torch.no_grad() +def _make_phylogeny(leaf_times, coal_times): + assert leaf_times.size(-1) == 1 + coal_times.size(-1) + + # Expand shapes to match. + N = leaf_times.size(-1) + batch_shape = broadcast_shape(leaf_times.shape[:-1], coal_times.shape[:-1]) + if leaf_times.shape[:-1] != batch_shape: + leaf_times = leaf_times.expand(batch_shape + (N,)) + if coal_times.shape[:-1] != batch_shape: + coal_times = coal_times.expand(batch_shape + (N - 1,)) + + # Combine N sampling events (leaf_times) plus N-1 coalescent events + # (coal_times) into a pair (times, signs) of arrays of length 2N-1, where + # leaf sample sign is +1 and coalescent sign is -1. + times = torch.cat([coal_times, leaf_times], dim=-1) + signs = torch.linspace( + 1.5 - N, N - 0.5, 2 * N - 1 + ).sign() # e.g. [-1, -1, +1, +1, +1] + + # Sort the events reverse-ordered in time, i.e. latest to earliest. + times, index = times.sort(dim=-1, descending=True) + signs = signs[index] + inv_index = index.new_empty(index.shape) + inv_index.scatter_(-1, index, torch.arange(2 * N - 1).expand_as(index)) + + # Compute the number n of lineages preceding each event, then the binomial + # coefficients that will multiply the base coalescence rate. + lineages = signs.cumsum(-1) + binomial = lineages * (lineages - 1) / 2 + + # Compute the binomial coefficient following each coalescent event. + coal_index = inv_index[..., : N - 1] + coal_binomial = binomial.gather(-1, coal_index - 1) + + return _Phylogeny(times, signs, lineages, binomial, coal_binomial) + + +def _sample_coalescent_times(leaf_times): + leaf_times = leaf_times.detach() + proto = leaf_times + N = leaf_times.size(-1) + batch_shape = leaf_times.shape[:-1] + + # We don't bother to implement a version that vectorizes over batches; + # instead we simply sequentially sample and stack. + if batch_shape: + flat_leaf_times = leaf_times.reshape(-1, N) + flat_coal_times = torch.stack( + list(map(_sample_coalescent_times, flat_leaf_times)) + ) + return flat_coal_times.reshape(batch_shape + (N - 1,)) + assert leaf_times.shape == (N,) + + # Sequentially sample coalescent events from latest to earliest. + leaf_times = leaf_times.sort(dim=-1, descending=True).values.tolist() + coal_times = [] + # Start with the minimum of two active leaves. + leaf = 1 + t = leaf_times[leaf] + active = 2 + binomial = active * (active - 1) / 2 + for u in proto.new_empty(N - 1).exponential_().tolist(): + while leaf + 1 < N and u > (t - leaf_times[leaf + 1]) * binomial: + # Move past the next leaf. + leaf += 1 + u -= (t - leaf_times[leaf]) * binomial + t = leaf_times[leaf] + active += 1 + binomial = active * (active - 1) / 2 + # Add a coalescent event. + t -= u / binomial + active -= 1 + binomial = active * (active - 1) / 2 + coal_times.append(t) + coal_times.reverse() + + return proto.new_tensor(coal_times) diff --git a/pyro/source/pyro/distributions/conditional.py b/pyro/source/pyro/distributions/conditional.py new file mode 100644 index 0000000000000000000000000000000000000000..bc3548ed99ec6f6a6cdcf7efb500796f46a77de7 --- /dev/null +++ b/pyro/source/pyro/distributions/conditional.py @@ -0,0 +1,150 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from abc import ABC, abstractmethod + +import torch +import torch.nn + +from .torch import TransformedDistribution +from .torch_transform import ComposeTransformModule + + +class ConditionalDistribution(ABC): + @abstractmethod + def condition(self, context): + """:rtype: torch.distributions.Distribution""" + raise NotImplementedError + + +class ConditionalTransform(ABC): + @abstractmethod + def condition(self, context): + """:rtype: torch.distributions.Transform""" + raise NotImplementedError + + +class ConditionalTransformModule(ConditionalTransform, torch.nn.Module): + """ + Conditional transforms with learnable parameters such as normalizing flows should inherit from this class rather + than :class:`~pyro.distributions.conditional.ConditionalTransform` so they are also a subclass of + :class:`~torch.nn.Module` and inherit all the useful methods of that class. + """ + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def __hash__(self): + return super().__hash__() + + @property + def inv(self) -> "ConditionalTransformModule": + return _ConditionalInverseTransformModule(self) + + +class _ConditionalInverseTransformModule(ConditionalTransformModule): + def __init__(self, transform: ConditionalTransform): + super().__init__() + self._transform = transform + + @property + def inv(self) -> ConditionalTransform: + return self._transform + + def condition(self, context: torch.Tensor): + return self._transform.condition(context).inv + + +class ConditionalComposeTransformModule( + ConditionalTransformModule, torch.nn.ModuleList +): + """ + Conditional analogue of :class:`~pyro.distributions.torch_transform.ComposeTransformModule` . + + Useful as a base class for specifying complicated conditional distributions:: + + >>> class ConditionalFlowStack(dist.conditional.ConditionalComposeTransformModule): + ... def __init__(self, input_dim, context_dim, hidden_dims, num_flows): + ... super().__init__([ + ... dist.transforms.conditional_planar(input_dim, context_dim, hidden_dims) + ... for _ in range(num_flows) + ... ], cache_size=1) + + >>> cond_dist = dist.conditional.ConditionalTransformedDistribution( + ... dist.Normal(torch.zeros(3), torch.ones(3)).to_event(1), + ... [ConditionalFlowStack(3, 2, [8, 8], num_flows=4).inv] + ... ) + + >>> context = torch.rand(10, 2) + >>> data = torch.rand(10, 3) + >>> nll = -cond_dist.condition(context).log_prob(data) + """ + + def __init__(self, transforms, cache_size: int = 0): + self.transforms = [ + ( + ConstantConditionalTransform(t) + if not isinstance(t, ConditionalTransform) + else t + ) + for t in transforms + ] + super().__init__() + if cache_size not in {0, 1}: + raise ValueError("cache_size must be 0 or 1") + self._cache_size = cache_size + # for parameter storage + for t in transforms: + if isinstance(t, torch.nn.Module): + self.append(t) + + def condition(self, context: torch.Tensor) -> ComposeTransformModule: + return ComposeTransformModule( + [t.condition(context) for t in self.transforms] + ).with_cache(self._cache_size) + + +class ConstantConditionalDistribution(ConditionalDistribution): + def __init__(self, base_dist): + assert isinstance(base_dist, torch.distributions.Distribution) + self.base_dist = base_dist + + def condition(self, context): + return self.base_dist + + +class ConstantConditionalTransform(ConditionalTransform): + def __init__(self, transform): + assert isinstance(transform, torch.distributions.Transform) + self.transform = transform + + def condition(self, context): + return self.transform + + def clear_cache(self): + self.transform.clear_cache() + + +class ConditionalTransformedDistribution(ConditionalDistribution): + def __init__(self, base_dist, transforms): + self.base_dist = ( + base_dist + if isinstance(base_dist, ConditionalDistribution) + else ConstantConditionalDistribution(base_dist) + ) + self.transforms = [ + ( + t + if isinstance(t, ConditionalTransform) + else ConstantConditionalTransform(t) + ) + for t in transforms + ] + + def condition(self, context): + base_dist = self.base_dist.condition(context) + transforms = [t.condition(context) for t in self.transforms] + return TransformedDistribution(base_dist, transforms) + + def clear_cache(self): + pass diff --git a/pyro/source/pyro/distributions/conjugate.py b/pyro/source/pyro/distributions/conjugate.py new file mode 100644 index 0000000000000000000000000000000000000000..ffb37f3148b7d844e3a7a68b597b706e4572746e --- /dev/null +++ b/pyro/source/pyro/distributions/conjugate.py @@ -0,0 +1,295 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import numbers + +import torch +from torch.distributions.utils import broadcast_all + +from pyro.ops.special import log_beta, log_binomial + +from . import constraints +from .torch import Beta, Binomial, Dirichlet, Gamma, Multinomial, Poisson +from .torch_distribution import TorchDistribution +from .util import broadcast_shape + + +def _log_beta_1(alpha, value, is_sparse): + if is_sparse: + mask = value != 0 + value, alpha, mask = torch.broadcast_tensors(value, alpha, mask) + result = torch.zeros_like(value) + value = value[mask] + alpha = alpha[mask] + result[mask] = ( + torch.lgamma(1 + value) + torch.lgamma(alpha) - torch.lgamma(value + alpha) + ) + return result + else: + return ( + torch.lgamma(1 + value) + torch.lgamma(alpha) - torch.lgamma(value + alpha) + ) + + +class BetaBinomial(TorchDistribution): + r""" + Compound distribution comprising of a beta-binomial pair. The probability of + success (``probs`` for the :class:`~pyro.distributions.Binomial` distribution) + is unknown and randomly drawn from a :class:`~pyro.distributions.Beta` distribution + prior to a certain number of Bernoulli trials given by ``total_count``. + + :param concentration1: 1st concentration parameter (alpha) for the + Beta distribution. + :type concentration1: float or torch.Tensor + :param concentration0: 2nd concentration parameter (beta) for the + Beta distribution. + :type concentration0: float or torch.Tensor + :param total_count: Number of Bernoulli trials. + :type total_count: float or torch.Tensor + """ + + arg_constraints = { + "concentration1": constraints.positive, + "concentration0": constraints.positive, + "total_count": constraints.nonnegative_integer, + } + has_enumerate_support = True + support = Binomial.support + + # EXPERIMENTAL If set to a positive value, the .log_prob() method will use + # a shifted Sterling's approximation to the Beta function, reducing + # computational cost from 9 lgamma() evaluations to 12 log() evaluations + # plus arithmetic. Recommended values are between 0.1 and 0.01. + approx_log_prob_tol = 0.0 + + def __init__( + self, concentration1, concentration0, total_count=1, validate_args=None + ): + concentration1, concentration0, total_count = broadcast_all( + concentration1, concentration0, total_count + ) + self._beta = Beta(concentration1, concentration0) + self.total_count = total_count + super().__init__(self._beta._batch_shape, validate_args=validate_args) + + @property + def concentration1(self): + return self._beta.concentration1 + + @property + def concentration0(self): + return self._beta.concentration0 + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(BetaBinomial, _instance) + batch_shape = torch.Size(batch_shape) + new._beta = self._beta.expand(batch_shape) + new.total_count = self.total_count.expand_as(new._beta.concentration0) + super(BetaBinomial, new).__init__(batch_shape, validate_args=False) + new._validate_args = self._validate_args + return new + + def sample(self, sample_shape=()): + probs = self._beta.sample(sample_shape) + return Binomial(self.total_count, probs, validate_args=False).sample() + + def log_prob(self, value): + if self._validate_args: + self._validate_sample(value) + + n = self.total_count + k = value + a = self.concentration1 + b = self.concentration0 + tol = self.approx_log_prob_tol + return ( + log_binomial(n, k, tol) + + log_beta(k + a, n - k + b, tol) + - log_beta(a, b, tol) + ) + + @property + def mean(self): + return self._beta.mean * self.total_count + + @property + def variance(self): + return ( + self._beta.variance + * self.total_count + * (self.concentration0 + self.concentration1 + self.total_count) + ) + + def enumerate_support(self, expand=True): + total_count = int(self.total_count.max()) + if not self.total_count.min() == total_count: + raise NotImplementedError( + "Inhomogeneous total count not supported by `enumerate_support`." + ) + values = torch.arange( + 1 + total_count, + dtype=self.concentration1.dtype, + device=self.concentration1.device, + ) + values = values.view((-1,) + (1,) * len(self._batch_shape)) + if expand: + values = values.expand((-1,) + self._batch_shape) + return values + + +class DirichletMultinomial(TorchDistribution): + r""" + Compound distribution comprising of a dirichlet-multinomial pair. The probability of + classes (``probs`` for the :class:`~pyro.distributions.Multinomial` distribution) + is unknown and randomly drawn from a :class:`~pyro.distributions.Dirichlet` + distribution prior to a certain number of Categorical trials given by + ``total_count``. + + :param float or torch.Tensor concentration: concentration parameter (alpha) for the + Dirichlet distribution. + :param int or torch.Tensor total_count: number of Categorical trials. + :param bool is_sparse: Whether to assume value is mostly zero when computing + :meth:`log_prob`, which can speed up computation when data is sparse. + """ + + arg_constraints = { + "concentration": constraints.independent(constraints.positive, 1), + "total_count": constraints.nonnegative_integer, + } + support = Multinomial.support + + def __init__( + self, concentration, total_count=1, is_sparse=False, validate_args=None + ): + batch_shape = concentration.shape[:-1] + event_shape = concentration.shape[-1:] + if isinstance(total_count, numbers.Number): + total_count = concentration.new_tensor(total_count) + else: + batch_shape = broadcast_shape(batch_shape, total_count.shape) + concentration = concentration.expand(batch_shape + (-1,)) + total_count = total_count.expand(batch_shape) + self._dirichlet = Dirichlet(concentration) + self.total_count = total_count + self.is_sparse = is_sparse + super().__init__(batch_shape, event_shape, validate_args=validate_args) + + @property + def concentration(self): + return self._dirichlet.concentration + + @staticmethod + def infer_shapes(concentration, total_count=()): + batch_shape = broadcast_shape(concentration[:-1], total_count) + event_shape = concentration[-1:] + return batch_shape, event_shape + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(DirichletMultinomial, _instance) + batch_shape = torch.Size(batch_shape) + new._dirichlet = self._dirichlet.expand(batch_shape) + new.total_count = self.total_count.expand(batch_shape) + new.is_sparse = self.is_sparse + super(DirichletMultinomial, new).__init__( + new._dirichlet.batch_shape, new._dirichlet.event_shape, validate_args=False + ) + new._validate_args = self._validate_args + return new + + def sample(self, sample_shape=()): + probs = self._dirichlet.sample(sample_shape) + total_count = int(self.total_count.max()) + if not self.total_count.min() == total_count: + raise NotImplementedError( + "Inhomogeneous total count not supported by `sample`." + ) + return Multinomial(total_count, probs).sample() + + def log_prob(self, value): + if self._validate_args: + self._validate_sample(value) + alpha = self.concentration + return _log_beta_1(alpha.sum(-1), value.sum(-1), self.is_sparse) - _log_beta_1( + alpha, value, self.is_sparse + ).sum(-1) + + @property + def mean(self): + return self._dirichlet.mean * self.total_count.unsqueeze(-1) + + @property + def variance(self): + n = self.total_count.unsqueeze(-1) + alpha = self.concentration + alpha_sum = self.concentration.sum(-1, keepdim=True) + alpha_ratio = alpha / alpha_sum + return n * alpha_ratio * (1 - alpha_ratio) * (n + alpha_sum) / (1 + alpha_sum) + + +class GammaPoisson(TorchDistribution): + r""" + Compound distribution comprising of a gamma-poisson pair, also referred to as + a gamma-poisson mixture. The ``rate`` parameter for the + :class:`~pyro.distributions.Poisson` distribution is unknown and randomly + drawn from a :class:`~pyro.distributions.Gamma` distribution. + + .. note:: This can be treated as an alternate parametrization of the + :class:`~pyro.distributions.NegativeBinomial` (``total_count``, ``probs``) + distribution, with `concentration = total_count` and `rate = (1 - probs) / probs`. + + :param float or torch.Tensor concentration: shape parameter (alpha) of the Gamma + distribution. + :param float or torch.Tensor rate: rate parameter (beta) for the Gamma + distribution. + """ + + arg_constraints = { + "concentration": constraints.positive, + "rate": constraints.positive, + } + support = Poisson.support + + def __init__(self, concentration, rate, validate_args=None): + concentration, rate = broadcast_all(concentration, rate) + self._gamma = Gamma(concentration, rate, validate_args=False) + self._gamma._validate_args = validate_args + super().__init__(self._gamma._batch_shape, validate_args=validate_args) + + @property + def concentration(self): + return self._gamma.concentration + + @property + def rate(self): + return self._gamma.rate + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(GammaPoisson, _instance) + batch_shape = torch.Size(batch_shape) + new._gamma = self._gamma.expand(batch_shape) + super(GammaPoisson, new).__init__(batch_shape, validate_args=False) + new._validate_args = self._validate_args + return new + + def sample(self, sample_shape=()): + rate = self._gamma.sample(sample_shape) + return Poisson(rate).sample() + + def log_prob(self, value): + if self._validate_args: + self._validate_sample(value) + post_value = self.concentration + value + return ( + -log_beta(self.concentration, value + 1) + - post_value.log() + + self.concentration * self.rate.log() + - post_value * (1 + self.rate).log() + ) + + @property + def mean(self): + return self.concentration / self.rate + + @property + def variance(self): + return self.concentration / self.rate.pow(2) * (1 + self.rate) diff --git a/pyro/source/pyro/distributions/constraints.py b/pyro/source/pyro/distributions/constraints.py new file mode 100644 index 0000000000000000000000000000000000000000..0ce8fd8cdfb0c8159307bb173657dd246c723b2f --- /dev/null +++ b/pyro/source/pyro/distributions/constraints.py @@ -0,0 +1,234 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +# Import * to get the latest upstream constraints. +from torch.distributions.constraints import * # noqa F403 + +# Additionally try to import explicitly to help mypy static analysis. +try: + from torch.distributions.constraints import ( + Constraint, + boolean, + cat, + corr_cholesky, + dependent, + dependent_property, + greater_than, + greater_than_eq, + half_open_interval, + independent, + integer_interval, + interval, + is_dependent, + less_than, + lower_cholesky, + lower_triangular, + multinomial, + nonnegative, + nonnegative_integer, + one_hot, + positive, + positive_definite, + positive_integer, + positive_semidefinite, + real, + real_vector, + simplex, + square, + stack, + symmetric, + unit_interval, + ) +except ImportError: + pass + +import torch +from torch.distributions.constraints import __all__ as torch_constraints + + +# TODO move this upstream to torch.distributions +class _Integer(Constraint): + """ + Constrain to integers. + """ + + is_discrete = True + + def check(self, value): + return value % 1 == 0 + + def __repr__(self): + return self.__class__.__name__[1:] + + +class _Sphere(Constraint): + """ + Constrain to the Euclidean sphere of any dimension. + """ + + event_dim = 1 + reltol = 10.0 # Relative to finfo.eps. + + def check(self, value): + eps = torch.finfo(value.dtype).eps + norm = torch.linalg.norm(value, dim=-1) + error = (norm - 1).abs() + return error < self.reltol * eps * value.size(-1) ** 0.5 + + def __repr__(self): + return self.__class__.__name__[1:] + + +class _CorrMatrix(Constraint): + """ + Constrains to a correlation matrix. + """ + + event_dim = 2 + + def check(self, value): + # check for diagonal equal to 1 + unit_variance = torch.all( + torch.abs(torch.diagonal(value, dim1=-2, dim2=-1) - 1) < 1e-6, dim=-1 + ) + # TODO: fix upstream - positive_definite has an extra dimension in front of output shape + return positive_definite.check(value) & unit_variance + + +class _OrderedVector(Constraint): + """ + Constrains to a real-valued tensor where the elements are monotonically + increasing along the `event_shape` dimension. + """ + + event_dim = 1 + + def check(self, value): + if value.ndim == 0: + return torch.tensor(False, device=value.device) + elif value.shape[-1] == 1: + return torch.ones_like(value[..., 0], dtype=bool) + else: + return torch.all(value[..., 1:] > value[..., :-1], dim=-1) + + +class _PositiveOrderedVector(Constraint): + """ + Constrains to a positive real-valued tensor where the elements are monotonically + increasing along the `event_shape` dimension. + """ + + def check(self, value): + return ordered_vector.check(value) & independent(positive, 1).check(value) + + +class _SoftplusPositive(type(positive)): + def __init__(self): + super().__init__(lower_bound=0.0) + + +class _SoftplusLowerCholesky(type(lower_cholesky)): + pass + + +class _UnitLowerCholesky(Constraint): + """ + Constrain to lower-triangular square matrices with all ones diagonals. + """ + + event_dim = 2 + + def check(self, value): + value_tril = value.tril() + lower_triangular = ( + (value_tril == value).view(value.shape[:-2] + (-1,)).min(-1)[0] + ) + + ones_diagonal = (value.diagonal(dim1=-2, dim2=-1) == 1).min(-1)[0] + return lower_triangular & ones_diagonal + + +corr_matrix = _CorrMatrix() +integer = _Integer() +ordered_vector = _OrderedVector() +positive_ordered_vector = _PositiveOrderedVector() +sphere = _Sphere() +softplus_positive = _SoftplusPositive() +softplus_lower_cholesky = _SoftplusLowerCholesky() +unit_lower_cholesky = _UnitLowerCholesky() +corr_cholesky_constraint = corr_cholesky # noqa: F405 DEPRECATED + +__all__ = [ + "Constraint", + "boolean", + "cat", + "corr_cholesky", + "corr_cholesky_constraint", + "corr_matrix", + "dependent", + "dependent_property", + "greater_than", + "greater_than_eq", + "half_open_interval", + "independent", + "integer", + "integer_interval", + "interval", + "is_dependent", + "less_than", + "lower_cholesky", + "lower_triangular", + "multinomial", + "nonnegative", + "nonnegative_integer", + "one_hot", + "ordered_vector", + "positive", + "positive_definite", + "positive_integer", + "positive_ordered_vector", + "positive_semidefinite", + "real", + "real_vector", + "simplex", + "softplus_lower_cholesky", + "softplus_positive", + "sphere", + "square", + "stack", + "symmetric", + "unit_interval", + "unit_lower_cholesky", +] + +__all__.extend(torch_constraints) +__all__[:] = sorted(set(__all__)) +del torch_constraints + + +# Create sphinx documentation. +__doc__ = """ + Pyro's constraints library extends + :mod:`torch.distributions.constraints`. +""" +__doc__ += "\n".join( + [ + """ + {} + ---------------------------------------------------------------- + {} + """.format( + _name, + ( + "alias of :class:`torch.distributions.constraints.{}`".format(_name) + if globals()[_name].__module__.startswith("torch") + else ".. autoclass:: {}".format( + _name + if type(globals()[_name]) is type + else type(globals()[_name]).__name__ + ) + ), + ) + for _name in sorted(__all__) + ] +) diff --git a/pyro/source/pyro/distributions/delta.py b/pyro/source/pyro/distributions/delta.py new file mode 100644 index 0000000000000000000000000000000000000000..34afb9508fd74bd3af6fcd90d0608b564ae91f26 --- /dev/null +++ b/pyro/source/pyro/distributions/delta.py @@ -0,0 +1,85 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import numbers + +import torch + +from pyro.distributions.torch_distribution import TorchDistribution +from pyro.distributions.util import sum_rightmost + +from . import constraints + + +class Delta(TorchDistribution): + """ + Degenerate discrete distribution (a single point). + + Discrete distribution that assigns probability one to the single element in + its support. Delta distribution parameterized by a random choice should not + be used with MCMC based inference, as doing so produces incorrect results. + + :param torch.Tensor v: The single support element. + :param torch.Tensor log_density: An optional density for this Delta. This + is useful to keep the class of :class:`Delta` distributions closed + under differentiable transformation. + :param int event_dim: Optional event dimension, defaults to zero. + """ + + has_rsample = True + arg_constraints = {"v": constraints.dependent, "log_density": constraints.real} + + def __init__(self, v, log_density=0.0, event_dim=0, validate_args=None): + if event_dim > v.dim(): + raise ValueError( + "Expected event_dim <= v.dim(), actual {} vs {}".format( + event_dim, v.dim() + ) + ) + batch_dim = v.dim() - event_dim + batch_shape = v.shape[:batch_dim] + event_shape = v.shape[batch_dim:] + if isinstance(log_density, numbers.Number): + log_density = torch.full( + batch_shape, log_density, dtype=v.dtype, device=v.device + ) + elif validate_args and log_density.shape != batch_shape: + raise ValueError( + "Expected log_density.shape = {}, actual {}".format( + log_density.shape, batch_shape + ) + ) + self.v = v + self.log_density = log_density + super().__init__(batch_shape, event_shape, validate_args=validate_args) + + @constraints.dependent_property + def support(self): + return constraints.independent(constraints.real, self.event_dim) + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(Delta, _instance) + batch_shape = torch.Size(batch_shape) + new.v = self.v.expand(batch_shape + self.event_shape) + new.log_density = self.log_density.expand(batch_shape) + super(Delta, new).__init__(batch_shape, self.event_shape, validate_args=False) + new._validate_args = self._validate_args + return new + + def rsample(self, sample_shape=torch.Size()): + shape = sample_shape + self.v.shape + return self.v.expand(shape) + + def log_prob(self, x): + v = self.v.expand(self.shape()) + log_prob = (x == v).type(x.dtype).log() + log_prob = sum_rightmost(log_prob, self.event_dim) + return log_prob + self.log_density + + @property + def mean(self): + return self.v + + @property + def variance(self): + return torch.zeros_like(self.v) diff --git a/pyro/source/pyro/distributions/diag_normal_mixture.py b/pyro/source/pyro/distributions/diag_normal_mixture.py new file mode 100644 index 0000000000000000000000000000000000000000..52b872544845d0d311e2be7a6feb33cd965a04e1 --- /dev/null +++ b/pyro/source/pyro/distributions/diag_normal_mixture.py @@ -0,0 +1,246 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import torch +from torch.autograd import Function +from torch.autograd.function import once_differentiable +from torch.distributions import Categorical, constraints + +from pyro.distributions.torch_distribution import TorchDistribution +from pyro.distributions.util import sum_leftmost + + +class MixtureOfDiagNormals(TorchDistribution): + """ + Mixture of Normal distributions with arbitrary means and arbitrary + diagonal covariance matrices. + + That is, this distribution is a mixture with K components, where each + component distribution is a D-dimensional Normal distribution with a + D-dimensional mean parameter and a D-dimensional diagonal covariance + matrix. The K different component means are gathered into the K x D + dimensional parameter `locs` and the K different scale parameters are + gathered into the K x D dimensional parameter `coord_scale`. The mixture + weights are controlled by a K-dimensional vector of softmax logits, + `component_logits`. This distribution implements pathwise derivatives + for samples from the distribution. + + See reference [1] for details on the implementations of the pathwise + derivative. Please consider citing this reference if you use the pathwise + derivative in your research. Note that this distribution does not support + dimension D = 1. + + [1] Pathwise Derivatives for Multivariate Distributions, Martin Jankowiak & + Theofanis Karaletsos. arXiv:1806.01856 + + :param torch.Tensor locs: K x D mean matrix + :param torch.Tensor coord_scale: K x D scale matrix + :param torch.Tensor component_logits: K-dimensional vector of softmax logits + """ + + has_rsample = True + arg_constraints = { + "locs": constraints.real, + "coord_scale": constraints.positive, + "component_logits": constraints.real, + } + support = constraints.real_vector + + def __init__(self, locs, coord_scale, component_logits): + self.batch_mode = locs.dim() > 2 + assert coord_scale.shape == locs.shape + assert self.batch_mode or locs.dim() == 2, ( + "The locs parameter in MixtureOfDiagNormals should be K x D dimensional " + "(or ... x B x K x D if doing batches)" + ) + if not self.batch_mode: + assert ( + coord_scale.dim() == 2 + ), "The coord_scale parameter in MixtureOfDiagNormals should be K x D dimensional" + assert ( + component_logits.dim() == 1 + ), "The component_logits parameter in MixtureOfDiagNormals should be K dimensional" + assert component_logits.size(-1) == locs.size(-2) + batch_shape = () + else: + assert ( + coord_scale.dim() > 2 + ), "The coord_scale parameter in MixtureOfDiagNormals should be ... x B x K x D dimensional" + assert ( + component_logits.dim() > 1 + ), "The component_logits parameter in MixtureOfDiagNormals should be ... x B x K dimensional" + assert component_logits.size(-1) == locs.size(-2) + batch_shape = tuple(locs.shape[:-2]) + + self.locs = locs + self.coord_scale = coord_scale + self.component_logits = component_logits + self.dim = locs.size(-1) + self.categorical = Categorical(logits=component_logits) + self.probs = self.categorical.probs + super().__init__( + batch_shape=torch.Size(batch_shape), event_shape=torch.Size((self.dim,)) + ) + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(MixtureOfDiagNormals, _instance) + new.batch_mode = True + batch_shape = torch.Size(batch_shape) + new.dim = self.dim + new.locs = self.locs.expand(batch_shape + self.locs.shape[-2:]) + new.coord_scale = self.coord_scale.expand( + batch_shape + self.coord_scale.shape[-2:] + ) + new.component_logits = self.component_logits.expand( + batch_shape + self.component_logits.shape[-1:] + ) + new.categorical = self.categorical.expand(batch_shape) + new.probs = self.probs.expand(batch_shape + self.probs.shape[-1:]) + super(MixtureOfDiagNormals, new).__init__( + batch_shape, self.event_shape, validate_args=False + ) + new._validate_args = self._validate_args + return new + + def log_prob(self, value): + epsilon = (value.unsqueeze(-2) - self.locs) / self.coord_scale # L B K D + eps_sqr = 0.5 * torch.pow(epsilon, 2.0).sum(-1) # L B K + eps_sqr_min = torch.min(eps_sqr, -1)[0] # L B K + coord_scale_prod_log_sum = self.coord_scale.log().sum(-1) # B K + result = ( + self.categorical.logits + + (-eps_sqr + eps_sqr_min.unsqueeze(-1)) + - coord_scale_prod_log_sum + ) # L B K + result = torch.logsumexp(result, dim=-1) # L B + result = result - 0.5 * math.log(2.0 * math.pi) * float(self.dim) + result = result - eps_sqr_min + return result + + def rsample(self, sample_shape=torch.Size()): + which = self.categorical.sample(sample_shape) + return _MixDiagNormalSample.apply( + self.locs, + self.coord_scale, + self.component_logits, + self.categorical.probs, + which, + sample_shape + self.locs.shape[:-2] + (self.dim,), + ) + + +class _MixDiagNormalSample(Function): + @staticmethod + def forward(ctx, locs, scales, component_logits, pis, which, noise_shape): + dim = scales.size(-1) + white = locs.new_empty(noise_shape).normal_() + n_unsqueezes = locs.dim() - which.dim() + for _ in range(n_unsqueezes): + which = which.unsqueeze(-1) + which_expand = which.expand(tuple(which.shape[:-1] + (dim,))) + loc = torch.gather(locs, -2, which_expand).squeeze(-2) + sigma = torch.gather(scales, -2, which_expand).squeeze(-2) + z = loc + sigma * white + ctx.save_for_backward(z, scales, locs, component_logits, pis) + return z + + @staticmethod + @once_differentiable + def backward(ctx, grad_output): + z, scales, locs, logits, pis = ctx.saved_tensors + dim = scales.size(-1) + K = logits.size(-1) + g = grad_output # l b i + g = g.unsqueeze(-2) # l b 1 i + batch_dims = locs.dim() - 2 + + locs_tilde = locs / scales # b j i + sigma_0 = torch.min(scales, -2, keepdim=True)[0] # b 1 i + z_shift = (z.unsqueeze(-2) - locs) / sigma_0 # l b j i + z_tilde = z.unsqueeze(-2) / scales - locs_tilde # l b j i + + mu_cd = locs.unsqueeze(-2) - locs.unsqueeze(-3) # b c d i + mu_cd_norm = torch.pow(mu_cd, 2.0).sum(-1).sqrt() # b c d + mu_cd /= mu_cd_norm.unsqueeze(-1) # b c d i + diagonals = torch.empty((K,), dtype=torch.long, device=z.device) + torch.arange(K, out=diagonals) + mu_cd[..., diagonals, diagonals, :] = 0.0 + + mu_ll_cd = (locs.unsqueeze(-2) * mu_cd).sum(-1) # b c d + z_ll_cd = (z.unsqueeze(-2).unsqueeze(-2) * mu_cd).sum(-1) # l b c d + z_perp_cd = ( + z.unsqueeze(-2).unsqueeze(-2) - z_ll_cd.unsqueeze(-1) * mu_cd + ) # l b c d i + z_perp_cd_sqr = torch.pow(z_perp_cd, 2.0).sum(-1) # l b c d + + shift_indices = torch.empty((dim,), dtype=torch.long, device=z.device) + torch.arange(dim, out=shift_indices) + shift_indices = shift_indices - 1 + shift_indices[0] = 0 + + z_shift_cumsum = torch.pow(z_shift, 2.0) + z_shift_cumsum = z_shift_cumsum.sum(-1, keepdim=True) - torch.cumsum( + z_shift_cumsum, dim=-1 + ) # l b j i + z_tilde_cumsum = torch.cumsum(torch.pow(z_tilde, 2.0), dim=-1) # l b j i + z_tilde_cumsum = torch.index_select(z_tilde_cumsum, -1, shift_indices) + z_tilde_cumsum[..., 0] = 0.0 + r_sqr_ji = z_shift_cumsum + z_tilde_cumsum # l b j i + + log_scales = torch.log(scales) # b j i + epsilons_sqr = torch.pow(z_tilde, 2.0) # l b j i + log_qs = ( + -0.5 * epsilons_sqr - 0.5 * math.log(2.0 * math.pi) - log_scales + ) # l b j i + log_q_j = log_qs.sum(-1, keepdim=True) # l b j 1 + q_j = torch.exp(log_q_j) # l b j 1 + q_tot = (pis * q_j.squeeze(-1)).sum(-1) # l b + q_tot = q_tot.unsqueeze(-1) # l b 1 + + root_two = math.sqrt(2.0) + shift_log_scales = log_scales[..., shift_indices] + shift_log_scales[..., 0] = 0.0 + sigma_products = torch.cumsum(shift_log_scales, dim=-1).exp() # b j i + + reverse_indices = torch.tensor( + range(dim - 1, -1, -1), dtype=torch.long, device=z.device + ) + reverse_log_sigma_0 = sigma_0.log()[..., reverse_indices] # b 1 i + sigma_0_products = torch.cumsum(reverse_log_sigma_0, dim=-1).exp()[ + ..., reverse_indices - 1 + ] # b 1 i + sigma_0_products[..., -1] = 1.0 + sigma_products *= sigma_0_products + + logits_grad = torch.erf(z_tilde / root_two) - torch.erf( + z_shift / root_two + ) # l b j i + logits_grad *= torch.exp(-0.5 * r_sqr_ji) # l b j i + logits_grad = (logits_grad * g / sigma_products).sum(-1) # l b j + logits_grad = sum_leftmost(logits_grad / q_tot, -1 - batch_dims) # b j + logits_grad *= 0.5 * math.pow(2.0 * math.pi, -0.5 * (dim - 1)) + logits_grad = -pis * logits_grad + logits_grad = logits_grad - logits_grad.sum(-1, keepdim=True) * pis + + mu_ll_dc = torch.transpose(mu_ll_cd, -1, -2) + v_cd = torch.erf((z_ll_cd - mu_ll_cd) / root_two) - torch.erf( + (z_ll_cd + mu_ll_dc) / root_two + ) + v_cd *= torch.exp(-0.5 * z_perp_cd_sqr) # l b c d + mu_cd_g = (g.unsqueeze(-2) * mu_cd).sum(-1) # l b c d + v_cd *= ( + -mu_cd_g + * pis.unsqueeze(-2) + * 0.5 + * math.pow(2.0 * math.pi, -0.5 * (dim - 1)) + ) # l b c d + v_cd = pis * sum_leftmost(v_cd.sum(-1) / q_tot, -1 - batch_dims) + logits_grad += v_cd + + prefactor = pis.unsqueeze(-1) * q_j * g / q_tot.unsqueeze(-1) + locs_grad = sum_leftmost(prefactor, -2 - batch_dims) + scales_grad = sum_leftmost(prefactor * z_tilde, -2 - batch_dims) + + return locs_grad, scales_grad, logits_grad, None, None, None diff --git a/pyro/source/pyro/distributions/diag_normal_mixture_shared_cov.py b/pyro/source/pyro/distributions/diag_normal_mixture_shared_cov.py new file mode 100644 index 0000000000000000000000000000000000000000..5e5b9fa9aaf34b2e18e03ec8fac89420eae2b1c1 --- /dev/null +++ b/pyro/source/pyro/distributions/diag_normal_mixture_shared_cov.py @@ -0,0 +1,210 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import torch +from torch.autograd import Function +from torch.autograd.function import once_differentiable +from torch.distributions import Categorical, constraints + +from pyro.distributions.torch_distribution import TorchDistribution +from pyro.distributions.util import sum_leftmost + + +class MixtureOfDiagNormalsSharedCovariance(TorchDistribution): + """ + Mixture of Normal distributions with diagonal covariance matrices. + + That is, this distribution is a mixture with K components, where each + component distribution is a D-dimensional Normal distribution with a + D-dimensional mean parameter loc and a D-dimensional diagonal covariance + matrix specified by a scale parameter `coord_scale`. The K different + component means are gathered into the parameter `locs` and the scale + parameter is shared between all K components. The mixture weights are + controlled by a K-dimensional vector of softmax logits, `component_logits`. + This distribution implements pathwise derivatives for samples from the + distribution. + + See reference [1] for details on the implementations of the pathwise + derivative. Please consider citing this reference if you use the pathwise + derivative in your research. Note that this distribution does not support + dimension D = 1. + + [1] Pathwise Derivatives for Multivariate Distributions, Martin Jankowiak & + Theofanis Karaletsos. arXiv:1806.01856 + + :param torch.Tensor locs: K x D mean matrix + :param torch.Tensor coord_scale: shared D-dimensional scale vector + :param torch.Tensor component_logits: K-dimensional vector of softmax logits + """ + + has_rsample = True + arg_constraints = { + "locs": constraints.real, + "coord_scale": constraints.positive, + "component_logits": constraints.real, + } + support = constraints.real_vector + + def __init__(self, locs, coord_scale, component_logits): + self.batch_mode = locs.dim() > 2 + assert self.batch_mode or locs.dim() == 2, ( + "The locs parameter in MixtureOfDiagNormalsSharedCovariance should be K x D dimensional " + "(or ... x B x K x D in batch mode)" + ) + if not self.batch_mode: + assert ( + coord_scale.dim() == 1 + ), "The coord_scale parameter in MixtureOfDiagNormalsSharedCovariance should be D dimensional" + assert ( + component_logits.dim() == 1 + ), "The component_logits parameter in MixtureOfDiagNormalsSharedCovariance should be K dimensional" + assert component_logits.size(0) == locs.size(0) + batch_shape = () + else: + assert ( + coord_scale.dim() > 1 + ), "The coord_scale parameter in MixtureOfDiagNormalsSharedCovariance should be ... x B x D dimensional" + assert component_logits.dim() > 1, ( + "The component_logits parameter in MixtureOfDiagNormalsSharedCovariance should be " + "... x B x K dimensional" + ) + assert component_logits.size(-1) == locs.size(-2) + batch_shape = tuple(locs.shape[:-2]) + self.locs = locs + self.coord_scale = coord_scale + self.component_logits = component_logits + self.dim = locs.size(-1) + if self.dim < 2: + raise NotImplementedError("This distribution does not support D = 1") + self.categorical = Categorical(logits=component_logits) + self.probs = self.categorical.probs + super().__init__(batch_shape=batch_shape, event_shape=(self.dim,)) + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance( + MixtureOfDiagNormalsSharedCovariance, _instance + ) + new.batch_mode = True + batch_shape = torch.Size(batch_shape) + new.dim = self.dim + new.locs = self.locs.expand(batch_shape + self.locs.shape[-2:]) + coord_scale_shape = -1 if self.batch_mode else -2 + new.coord_scale = self.coord_scale.expand( + batch_shape + self.coord_scale.shape[coord_scale_shape:] + ) + new.component_logits = self.component_logits.expand( + batch_shape + self.component_logits.shape[-1:] + ) + new.categorical = self.categorical.expand(batch_shape) + new.probs = self.probs.expand(batch_shape + self.probs.shape[-1:]) + super(MixtureOfDiagNormalsSharedCovariance, new).__init__( + batch_shape, self.event_shape, validate_args=False + ) + new._validate_args = self._validate_args + return new + + def log_prob(self, value): + coord_scale = ( + self.coord_scale.unsqueeze(-2) if self.batch_mode else self.coord_scale + ) + epsilon = (value.unsqueeze(-2) - self.locs) / coord_scale # L B K D + eps_sqr = 0.5 * torch.pow(epsilon, 2.0).sum(-1) # L B K + eps_sqr_min = torch.min(eps_sqr, -1)[0] # L B + result = self.categorical.logits + ( + -eps_sqr + eps_sqr_min.unsqueeze(-1) + ) # L B K + result = torch.logsumexp(result, dim=-1) # L B + result = result - (0.5 * math.log(2.0 * math.pi) * float(self.dim)) + result = result - (torch.log(self.coord_scale).sum(-1)) + result = result - eps_sqr_min + return result + + def rsample(self, sample_shape=torch.Size()): + which = self.categorical.sample(sample_shape) + return _MixDiagNormalSharedCovarianceSample.apply( + self.locs, + self.coord_scale, + self.component_logits, + self.probs, + which, + sample_shape + self.coord_scale.shape, + ) + + +class _MixDiagNormalSharedCovarianceSample(Function): + @staticmethod + def forward(ctx, locs, coord_scale, component_logits, pis, which, noise_shape): + dim = coord_scale.size(-1) + white = locs.new_empty(noise_shape).normal_() + n_unsqueezes = locs.dim() - which.dim() + for _ in range(n_unsqueezes): + which = which.unsqueeze(-1) + expand_tuple = tuple(which.shape[:-1] + (dim,)) + loc = torch.gather(locs, -2, which.expand(expand_tuple)).squeeze(-2) + z = loc + coord_scale * white + ctx.save_for_backward(z, coord_scale, locs, component_logits, pis) + return z + + @staticmethod + @once_differentiable + def backward(ctx, grad_output): + z, coord_scale, locs, component_logits, pis = ctx.saved_tensors + K = component_logits.size(-1) + batch_dims = coord_scale.dim() - 1 + g = grad_output # l b i + + z_tilde = z / coord_scale # l b i + locs_tilde = locs / coord_scale.unsqueeze(-2) # b j i + mu_ab = locs_tilde.unsqueeze(-2) - locs_tilde.unsqueeze(-3) # b k j i + mu_ab_norm = torch.pow(mu_ab, 2.0).sum(-1).sqrt() # b k j + mu_ab /= mu_ab_norm.unsqueeze(-1) # b k j i + diagonals = torch.empty((K,), dtype=torch.long, device=z.device) + torch.arange(K, out=diagonals) + mu_ab[..., diagonals, diagonals, :] = 0.0 + + mu_ll_ab = (locs_tilde.unsqueeze(-2) * mu_ab).sum(-1) # b k j + z_ll_ab = (z_tilde.unsqueeze(-2).unsqueeze(-2) * mu_ab).sum(-1) # l b k j + z_perp_ab = ( + z_tilde.unsqueeze(-2).unsqueeze(-2) - z_ll_ab.unsqueeze(-1) * mu_ab + ) # l b k j i + z_perp_ab_sqr = torch.pow(z_perp_ab, 2.0).sum(-1) # l b k j + + epsilons = z_tilde.unsqueeze(-2) - locs_tilde # l b j i + log_qs = -0.5 * torch.pow(epsilons, 2.0) # l b j i + log_q_j = log_qs.sum(-1, keepdim=True) # l b j 1 + log_q_j_max = torch.max(log_q_j, -2, keepdim=True)[0] + q_j_prime = torch.exp(log_q_j - log_q_j_max) # l b j 1 + q_j = torch.exp(log_q_j) # l b j 1 + + q_tot = (pis.unsqueeze(-1) * q_j).sum(-2) # l b 1 + q_tot_prime = (pis.unsqueeze(-1) * q_j_prime).sum(-2).unsqueeze(-1) # l b 1 1 + + root_two = math.sqrt(2.0) + mu_ll_ba = torch.transpose(mu_ll_ab, -1, -2) + logits_grad = torch.erf((z_ll_ab - mu_ll_ab) / root_two) - torch.erf( + (z_ll_ab + mu_ll_ba) / root_two + ) + logits_grad *= torch.exp(-0.5 * z_perp_ab_sqr) # l b k j + + # bi lbi bkji + mu_ab_sigma_g = ((coord_scale * g).unsqueeze(-2).unsqueeze(-2) * mu_ab).sum( + -1 + ) # l b k j + logits_grad *= -mu_ab_sigma_g * pis.unsqueeze(-2) # l b k j + logits_grad = pis * sum_leftmost( + logits_grad.sum(-1) / q_tot, -(1 + batch_dims) + ) # b k + logits_grad *= math.sqrt(0.5 * math.pi) + + # b j l b j 1 l b i l b 1 1 + prefactor = ( + pis.unsqueeze(-1) * q_j_prime * g.unsqueeze(-2) / q_tot_prime + ) # l b j i + locs_grad = sum_leftmost(prefactor, -(2 + batch_dims)) # b j i + coord_scale_grad = sum_leftmost(prefactor * epsilons, -(2 + batch_dims)).sum( + -2 + ) # b i + + return locs_grad, coord_scale_grad, logits_grad, None, None, None diff --git a/pyro/source/pyro/distributions/distribution.py b/pyro/source/pyro/distributions/distribution.py new file mode 100644 index 0000000000000000000000000000000000000000..ecac30645eabca6661a4e9c68c82b44da8fc297d --- /dev/null +++ b/pyro/source/pyro/distributions/distribution.py @@ -0,0 +1,222 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import functools +import inspect +from abc import ABCMeta, abstractmethod + +import torch + +from pyro.distributions.score_parts import ScoreParts + +COERCIONS = [] + + +class DistributionMeta(ABCMeta): + def __init__(cls, *args, **kwargs): + signature = inspect.signature(functools.partial(cls.__init__, None)) + cls.__signature__ = signature + return super().__init__(*args, **kwargs) + + def __call__(cls, *args, **kwargs): + for coerce_ in COERCIONS: + result = coerce_(cls, args, kwargs) + if result is not None: + return result + return super().__call__(*args, **kwargs) + + +class Distribution(metaclass=DistributionMeta): + """ + Base class for parameterized probability distributions. + + Distributions in Pyro are stochastic function objects with :meth:`sample` and + :meth:`log_prob` methods. Distribution are stochastic functions with fixed + parameters:: + + d = dist.Bernoulli(param) + x = d() # Draws a random sample. + p = d.log_prob(x) # Evaluates log probability of x. + + **Implementing New Distributions**: + + Derived classes must implement the methods: :meth:`sample`, + :meth:`log_prob`. + + **Examples**: + + Take a look at the `examples `_ to see how they interact + with inference algorithms. + """ + + has_rsample = False + has_enumerate_support = False + + def __call__(self, *args, **kwargs): + """ + Samples a random value (just an alias for ``.sample(*args, **kwargs)``). + + For tensor distributions, the returned tensor should have the same ``.shape`` as the + parameters. + + :return: A random value. + :rtype: torch.Tensor + """ + return self.sample(*args, **kwargs) + + @abstractmethod + def sample(self, *args, **kwargs): + """ + Samples a random value. + + For tensor distributions, the returned tensor should have the same ``.shape`` as the + parameters, unless otherwise noted. + + :param sample_shape: the size of the iid batch to be drawn from the + distribution. + :type sample_shape: torch.Size + :return: A random value or batch of random values (if parameters are + batched). The shape of the result should be ``self.shape()``. + :rtype: torch.Tensor + """ + raise NotImplementedError + + @abstractmethod + def log_prob(self, x, *args, **kwargs): + """ + Evaluates log probability densities for each of a batch of samples. + + :param torch.Tensor x: A single value or a batch of values + batched along axis 0. + :return: log probability densities as a one-dimensional + :class:`~torch.Tensor` with same batch size as value and + params. The shape of the result should be ``self.batch_size``. + :rtype: torch.Tensor + """ + raise NotImplementedError + + def score_parts(self, x, *args, **kwargs): + """ + Computes ingredients for stochastic gradient estimators of ELBO. + + The default implementation is correct both for non-reparameterized and + for fully reparameterized distributions. Partially reparameterized + distributions should override this method to compute correct + `.score_function` and `.entropy_term` parts. + + Setting ``.has_rsample`` on a distribution instance will determine + whether inference engines like :class:`~pyro.infer.svi.SVI` use + reparameterized samplers or the score function estimator. + + :param torch.Tensor x: A single value or batch of values. + :return: A `ScoreParts` object containing parts of the ELBO estimator. + :rtype: ScoreParts + """ + log_prob = self.log_prob(x, *args, **kwargs) + if self.has_rsample: + return ScoreParts( + log_prob=log_prob, score_function=0, entropy_term=log_prob + ) + else: + # XXX should the user be able to control inclusion of the entropy term? + # See Roeder, Wu, Duvenaud (2017) "Sticking the Landing" https://arxiv.org/abs/1703.09194 + return ScoreParts( + log_prob=log_prob, score_function=log_prob, entropy_term=0 + ) + + def enumerate_support(self, expand: bool = True) -> torch.Tensor: + """ + Returns a representation of the parametrized distribution's support, + along the first dimension. This is implemented only by discrete + distributions. + + Note that this returns support values of all the batched RVs in + lock-step, rather than the full cartesian product. + + :param bool expand: whether to expand the result to a tensor of shape + ``(n,) + batch_shape + event_shape``. If false, the return value + has unexpanded shape ``(n,) + (1,)*len(batch_shape) + event_shape`` + which can be broadcasted to the full shape. + :return: An iterator over the distribution's discrete support. + :rtype: iterator + """ + raise NotImplementedError( + "Support not implemented for {}".format(type(self).__name__) + ) + + def conjugate_update(self, other): + """ + EXPERIMENTAL Creates an updated distribution fusing information from + another compatible distribution. This is supported by only a few + conjugate distributions. + + This should satisfy the equation:: + + fg, log_normalizer = f.conjugate_update(g) + assert f.log_prob(x) + g.log_prob(x) == fg.log_prob(x) + log_normalizer + + Note this is equivalent to :obj:`funsor.ops.add` on + :class:`~funsor.terms.Funsor` distributions, but we return a lazy sum + ``(updated, log_normalizer)`` because PyTorch distributions must be + normalized. Thus :meth:`conjugate_update` should commute with + :func:`~funsor.pyro.convert.dist_to_funsor` and + :func:`~funsor.pyro.convert.tensor_to_funsor` :: + + dist_to_funsor(f) + dist_to_funsor(g) + == dist_to_funsor(fg) + tensor_to_funsor(log_normalizer) + + :param other: A distribution representing ``p(data|latent)`` but + normalized over ``latent`` rather than ``data``. Here ``latent`` + is a candidate sample from ``self`` and ``data`` is a ground + observation of unrelated type. + :return: a pair ``(updated,log_normalizer)`` where ``updated`` is an + updated distribution of type ``type(self)``, and ``log_normalizer`` + is a :class:`~torch.Tensor` representing the normalization factor. + """ + raise NotImplementedError( + "{} does not support .conjugate_update()".format(type(self).__name__) + ) + + def has_rsample_(self, value): + """ + Force reparameterized or detached sampling on a single distribution + instance. This sets the ``.has_rsample`` attribute in-place. + + This is useful to instruct inference algorithms to avoid + reparameterized gradients for variables that discontinuously determine + downstream control flow. + + :param bool value: Whether samples will be pathwise differentiable. + :return: self + :rtype: Distribution + """ + if not (value is True or value is False): + raise ValueError("Expected value in [False,True], actual {}".format(value)) + self.has_rsample = value + return self + + @property + def rv(self): + """ + EXPERIMENTAL Switch to the Random Variable DSL for applying transformations + to random variables. Supports either chaining operations or arithmetic + operator overloading. + + Example usage:: + + # This should be equivalent to an Exponential distribution. + Uniform(0, 1).rv.log().neg().dist + + # These two distributions Y1, Y2 should be the same + X = Uniform(0, 1).rv + Y1 = X.mul(4).pow(0.5).sub(1).abs().neg().dist + Y2 = (-abs((4*X)**(0.5) - 1)).dist + + + :return: A :class: `~pyro.contrib.randomvariable.random_variable.RandomVariable` + object wrapping this distribution. + :rtype: ~pyro.contrib.randomvariable.random_variable.RandomVariable + """ + from pyro.contrib.randomvariable import RandomVariable + + return RandomVariable(self) diff --git a/pyro/source/pyro/distributions/empirical.py b/pyro/source/pyro/distributions/empirical.py new file mode 100644 index 0000000000000000000000000000000000000000..7383412aa9109544fd1d17e1366baef862bfd663 --- /dev/null +++ b/pyro/source/pyro/distributions/empirical.py @@ -0,0 +1,176 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions import constraints + +from pyro.distributions.torch import Categorical +from pyro.distributions.torch_distribution import TorchDistribution +from pyro.distributions.util import copy_docs_from + + +@copy_docs_from(TorchDistribution) +class Empirical(TorchDistribution): + r""" + Empirical distribution associated with the sampled data. Note that the shape + requirement for `log_weights` is that its shape must match the leftmost shape + of `samples`. Samples are aggregated along the ``aggregation_dim``, which is + the rightmost dim of `log_weights`. + + Example: + + >>> emp_dist = Empirical(torch.randn(2, 3, 10), torch.ones(2, 3)) + >>> emp_dist.batch_shape + torch.Size([2]) + >>> emp_dist.event_shape + torch.Size([10]) + + >>> single_sample = emp_dist.sample() + >>> single_sample.shape + torch.Size([2, 10]) + >>> batch_sample = emp_dist.sample((100,)) + >>> batch_sample.shape + torch.Size([100, 2, 10]) + + >>> emp_dist.log_prob(single_sample).shape + torch.Size([2]) + >>> # Vectorized samples cannot be scored by log_prob. + >>> with pyro.validation_enabled(): + ... emp_dist.log_prob(batch_sample).shape + Traceback (most recent call last): + ... + ValueError: ``value.shape`` must be torch.Size([2, 10]) + + :param torch.Tensor samples: samples from the empirical distribution. + :param torch.Tensor log_weights: log weights (optional) corresponding + to the samples. + """ + + arg_constraints = {} + support = constraints.real + has_enumerate_support = True + + def __init__(self, samples, log_weights, validate_args=None): + self._samples = samples + self._log_weights = log_weights + sample_shape, weight_shape = samples.size(), log_weights.size() + if ( + weight_shape > sample_shape + or weight_shape != sample_shape[: len(weight_shape)] + ): + raise ValueError( + "The shape of ``log_weights`` ({}) must match " + "the leftmost shape of ``samples`` ({})".format( + weight_shape, sample_shape + ) + ) + self._aggregation_dim = log_weights.dim() - 1 + event_shape = sample_shape[len(weight_shape) :] + self._categorical = Categorical(logits=self._log_weights) + super().__init__( + batch_shape=weight_shape[:-1], + event_shape=event_shape, + validate_args=validate_args, + ) + + @property + def sample_size(self): + """ + Number of samples that constitute the empirical distribution. + + :return int: number of samples collected. + """ + return self._log_weights.numel() + + def sample(self, sample_shape=torch.Size()): + sample_idx = self._categorical.sample( + sample_shape + ) # sample_shape x batch_shape + # reorder samples to bring aggregation_dim to the front: + # batch_shape x num_samples x event_shape -> num_samples x batch_shape x event_shape + samples = ( + self._samples.unsqueeze(0) + .transpose(0, self._aggregation_dim + 1) + .squeeze(self._aggregation_dim + 1) + ) + # make sample_idx.shape compatible with samples.shape: sample_shape_numel x batch_shape x event_shape + sample_idx = sample_idx.reshape( + (-1,) + self.batch_shape + (1,) * len(self.event_shape) + ) + sample_idx = sample_idx.expand((-1,) + samples.shape[1:]) + return samples.gather(0, sample_idx).reshape(sample_shape + samples.shape[1:]) + + def log_prob(self, value): + """ + Returns the log of the probability mass function evaluated at ``value``. + Note that this currently only supports scoring values with empty + ``sample_shape``. + + :param torch.Tensor value: scalar or tensor value to be scored. + """ + if self._validate_args: + if value.shape != self.batch_shape + self.event_shape: + raise ValueError( + "``value.shape`` must be {}".format( + self.batch_shape + self.event_shape + ) + ) + if self.batch_shape: + value = value.unsqueeze(self._aggregation_dim) + selection_mask = self._samples.eq(value) + # Get a mask for all entries in the ``weights`` tensor + # that correspond to ``value``. + for _ in range(len(self.event_shape)): + selection_mask = selection_mask.min(dim=-1)[0] + selection_mask = selection_mask.type(self._categorical.probs.type()) + return (self._categorical.probs * selection_mask).sum(dim=-1).log() + + def _weighted_mean(self, value, keepdim=False): + weights = self._log_weights.reshape( + self._log_weights.size() + + torch.Size([1] * (value.dim() - self._log_weights.dim())) + ) + dim = self._aggregation_dim + max_weight = weights.max(dim=dim, keepdim=True)[0] + relative_probs = (weights - max_weight).exp() + return (value * relative_probs).sum( + dim=dim, keepdim=keepdim + ) / relative_probs.sum(dim=dim, keepdim=keepdim) + + @property + def event_shape(self): + return self._event_shape + + @property + def mean(self): + if self._samples.dtype in (torch.int32, torch.int64): + raise ValueError( + "Mean for discrete empirical distribution undefined. " + + "Consider converting samples to ``torch.float32`` " + + "or ``torch.float64``. If these are samples from a " + + "`Categorical` distribution, consider converting to a " + + "`OneHotCategorical` distribution." + ) + return self._weighted_mean(self._samples) + + @property + def variance(self): + if self._samples.dtype in (torch.int32, torch.int64): + raise ValueError( + "Variance for discrete empirical distribution undefined. " + + "Consider converting samples to ``torch.float32`` " + + "or ``torch.float64``. If these are samples from a " + + "`Categorical` distribution, consider converting to a " + + "`OneHotCategorical` distribution." + ) + mean = self.mean.unsqueeze(self._aggregation_dim) + deviation_squared = torch.pow(self._samples - mean, 2) + return self._weighted_mean(deviation_squared) + + @property + def log_weights(self): + return self._log_weights + + def enumerate_support(self, expand=True): + # Empirical does not support batching, so expanding is a no-op. + return self._samples diff --git a/pyro/source/pyro/distributions/extended.py b/pyro/source/pyro/distributions/extended.py new file mode 100644 index 0000000000000000000000000000000000000000..16c32c6657d71c0b43fc82eb2e2eb607b19bd255 --- /dev/null +++ b/pyro/source/pyro/distributions/extended.py @@ -0,0 +1,63 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import math + +from pyro.distributions import constraints + +from .conjugate import BetaBinomial +from .torch import Binomial + + +class ExtendedBinomial(Binomial): + """ + EXPERIMENTAL :class:`~pyro.distributions.Binomial` distribution extended to + have logical support the entire integers and to allow arbitrary integer + ``total_count``. Numerical support is still the integer interval ``[0, + total_count]``. + """ + + arg_constraints = { + "total_count": constraints.integer, + "probs": constraints.unit_interval, + "logits": constraints.real, + } + support = constraints.integer + + def log_prob(self, value): + result = super().log_prob(value) + invalid = (value < 0) | (value > self.total_count) + return result.masked_fill(invalid, -math.inf) + + +class ExtendedBetaBinomial(BetaBinomial): + """ + EXPERIMENTAL :class:`~pyro.distributions.BetaBinomial` distribution + extended to have logical support the entire integers and to allow arbitrary + integer ``total_count``. Numerical support is still the integer interval + ``[0, total_count]``. + """ + + arg_constraints = { + "concentration1": constraints.positive, + "concentration0": constraints.positive, + "total_count": constraints.integer, + } + support = constraints.integer + + def log_prob(self, value): + if self._validate_args: + self._validate_sample(value) + + total_count = self.total_count + invalid = (value < 0) | (value > total_count) + n = total_count.clamp(min=0) + k = value.masked_fill(invalid, 0) + + try: + self.total_count = n + result = super().log_prob(k) + finally: + self.total_count = total_count + + return result.masked_fill(invalid, -math.inf) diff --git a/pyro/source/pyro/distributions/folded.py b/pyro/source/pyro/distributions/folded.py new file mode 100644 index 0000000000000000000000000000000000000000..89f3fae6616c8a27adb451c62dd457c3c16b4ab4 --- /dev/null +++ b/pyro/source/pyro/distributions/folded.py @@ -0,0 +1,35 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from torch.distributions import constraints +from torch.distributions.transforms import AbsTransform + +from pyro.distributions.torch import TransformedDistribution + + +class FoldedDistribution(TransformedDistribution): + """ + Equivalent to ``TransformedDistribution(base_dist, AbsTransform())``, + but additionally supports :meth:`log_prob` . + + :param ~torch.distributions.Distribution base_dist: The distribution to + reflect. + """ + + support = constraints.positive + + def __init__(self, base_dist, validate_args=None): + if base_dist.event_shape: + raise ValueError("Only univariate distributions can be folded.") + super().__init__(base_dist, AbsTransform(), validate_args) + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(type(self), _instance) + return super().expand(batch_shape, _instance=new) + + def log_prob(self, value): + if self._validate_args: + self._validate_sample(value) + dim = max(len(self.batch_shape), value.dim()) + plus_minus = value.new_tensor([1.0, -1.0]).reshape((2,) + (1,) * dim) + return self.base_dist.log_prob(plus_minus * value).logsumexp(0) diff --git a/pyro/source/pyro/distributions/gaussian_scale_mixture.py b/pyro/source/pyro/distributions/gaussian_scale_mixture.py new file mode 100644 index 0000000000000000000000000000000000000000..f1dc47cf64ca143ccf45096b42a7aab85db6f95f --- /dev/null +++ b/pyro/source/pyro/distributions/gaussian_scale_mixture.py @@ -0,0 +1,204 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import torch +from torch.autograd import Function +from torch.autograd.function import once_differentiable +from torch.distributions import Categorical, constraints + +from pyro.distributions.torch_distribution import TorchDistribution +from pyro.distributions.util import sum_leftmost + + +class GaussianScaleMixture(TorchDistribution): + """ + Mixture of Normal distributions with zero mean and diagonal covariance + matrices. + + That is, this distribution is a mixture with K components, where each + component distribution is a D-dimensional Normal distribution with zero + mean and a D-dimensional diagonal covariance matrix. The K different + covariance matrices are controlled by the parameters `coord_scale` and + `component_scale`. That is, the covariance matrix of the k'th component is + given by + + Sigma_ii = (component_scale_k * coord_scale_i) ** 2 (i = 1, ..., D) + + where `component_scale_k` is a positive scale factor and `coord_scale_i` + are positive scale parameters shared between all K components. The mixture + weights are controlled by a K-dimensional vector of softmax logits, + `component_logits`. This distribution implements pathwise derivatives for + samples from the distribution. This distribution does not currently + support batched parameters. + + See reference [1] for details on the implementations of the pathwise + derivative. Please consider citing this reference if you use the pathwise + derivative in your research. + + [1] Pathwise Derivatives for Multivariate Distributions, Martin Jankowiak & + Theofanis Karaletsos. arXiv:1806.01856 + + Note that this distribution supports both even and odd dimensions, but the + former should be more a bit higher precision, since it doesn't use any erfs + in the backward call. Also note that this distribution does not support + D = 1. + + :param torch.tensor coord_scale: D-dimensional vector of scales + :param torch.tensor component_logits: K-dimensional vector of logits + :param torch.tensor component_scale: K-dimensional vector of scale multipliers + """ + + has_rsample = True + arg_constraints = { + "component_scale": constraints.positive, + "coord_scale": constraints.positive, + "component_logits": constraints.real, + } + + def __init__(self, coord_scale, component_logits, component_scale): + self.dim = coord_scale.size(0) + if self.dim < 2: + raise NotImplementedError("This distribution does not support D = 1") + assert ( + coord_scale.dim() == 1 + ), "The coord_scale parameter in GaussianScaleMixture should be D dimensional" + assert ( + component_scale.dim() == 1 + ), "The component_scale parameter in GaussianScaleMixture should be K dimensional" + assert ( + component_logits.dim() == 1 + ), "The component_logits parameter in GaussianScaleMixture should be K dimensional" + assert ( + component_logits.shape == component_scale.shape + ), "The component_logits and component_scale parameters in GaussianScaleMixture should be K dimensional" + self.coord_scale = coord_scale + self.component_logits = component_logits + self.component_scale = component_scale + self.coeffs = self._compute_coeffs() + self.categorical = Categorical(logits=component_logits) + super().__init__(event_shape=(self.dim,)) + + def _compute_coeffs(self): + """ + These coefficients are used internally in the backward call. + """ + dimov2 = int(self.dim / 2) # this is correct for both even and odd dimensions + coeffs = torch.ones(dimov2) + for k in range(dimov2 - 1): + coeffs[k + 1 :] *= self.dim - 2 * (k + 1) + return coeffs + + def log_prob(self, value): + assert value.dim() == 1 and value.size(0) == self.dim + epsilon_sqr = torch.pow(value / self.coord_scale, 2.0).sum() + component_scale_log_power = self.component_scale.log() * -self.dim + # logits in Categorical is already normalized + result = torch.logsumexp( + component_scale_log_power + + self.categorical.logits + + -0.5 * epsilon_sqr / torch.pow(self.component_scale, 2.0), + dim=-1, + ) # K + result -= 0.5 * math.log(2.0 * math.pi) * float(self.dim) + result -= self.coord_scale.log().sum() + return result + + def rsample(self, sample_shape=torch.Size()): + which = self.categorical.sample(sample_shape) + return _GSMSample.apply( + self.coord_scale, + self.component_logits, + self.component_scale, + self.categorical.probs, + which, + sample_shape + torch.Size((self.dim,)), + self.coeffs, + ) + + +class _GSMSample(Function): + @staticmethod + def forward( + ctx, coord_scale, component_logits, component_scale, pis, which, shape, coeffs + ): + white = coord_scale.new(shape).normal_() + which_component_scale = component_scale[which].unsqueeze(-1) + z = coord_scale * which_component_scale * white + ctx.save_for_backward( + z, coord_scale, component_logits, component_scale, pis, coeffs + ) + return z + + @staticmethod + @once_differentiable + def backward(ctx, grad_output): + ( + z, + coord_scale, + component_logits, + component_scale, + pis, + coeffs, + ) = ctx.saved_tensors + dim = coord_scale.size(0) + g = grad_output # l i + g = g.unsqueeze(-2) # l 1 i + + component_scale_sqr = torch.pow(component_scale, 2.0) # j + epsilons = z / coord_scale # l i + epsilons_sqr = torch.pow(epsilons, 2.0) # l i + r_sqr = epsilons_sqr.sum(-1, keepdim=True) # l + r_sqr_j = r_sqr / component_scale_sqr # l j + coord_scale_product = coord_scale.prod() + component_scale_power = torch.pow(component_scale, float(dim)) + + q_j = torch.exp(-0.5 * r_sqr_j) / math.pow( + 2.0 * math.pi, 0.5 * float(dim) + ) # l j + q_j /= coord_scale_product * component_scale_power # l j + q_tot = (pis * q_j).sum(-1, keepdim=True) # l + + Phi_j = torch.exp(-0.5 * r_sqr_j) # l j + exponents = -torch.arange(1.0, int(dim / 2) + 1.0, 1.0) + if z.dim() > 1: + r_j_poly = r_sqr_j.unsqueeze(-1).expand(-1, -1, int(dim / 2)) # l j d/2 + else: + r_j_poly = r_sqr_j.unsqueeze(-1).expand(-1, int(dim / 2)) # l j d/2 + r_j_poly = coeffs * torch.pow(r_j_poly, exponents) + Phi_j *= r_j_poly.sum(-1) + if dim % 2 == 1: + root_two = math.sqrt(2.0) + extra_term = ( + coeffs[-1] + * math.sqrt(0.5 * math.pi) + * (1.0 - torch.erf(r_sqr_j.sqrt() / root_two)) + ) # l j + Phi_j += extra_term * torch.pow(r_sqr_j, -0.5 * float(dim)) + + logits_grad = (z.unsqueeze(-2) * Phi_j.unsqueeze(-1) * g).sum(-1) # l j + logits_grad /= q_tot + logits_grad = sum_leftmost(logits_grad, -1) * math.pow( + 2.0 * math.pi, -0.5 * float(dim) + ) + logits_grad = pis * logits_grad / (component_scale_power * coord_scale_product) + logits_grad = logits_grad - logits_grad.sum() * pis + + prefactor = ( + pis.unsqueeze(-1) * q_j.unsqueeze(-1) * g / q_tot.unsqueeze(-1) + ) # l j i + coord_scale_grad = sum_leftmost(prefactor * epsilons.unsqueeze(-2), -1) + component_scale_grad = sum_leftmost( + (prefactor * z.unsqueeze(-2)).sum(-1) / component_scale, -1 + ) + + return ( + coord_scale_grad, + logits_grad, + component_scale_grad, + None, + None, + None, + None, + ) diff --git a/pyro/source/pyro/distributions/grouped_normal_normal.py b/pyro/source/pyro/distributions/grouped_normal_normal.py new file mode 100644 index 0000000000000000000000000000000000000000..05d488ee4ac507b1a6ff444f6838144a5202ee1c --- /dev/null +++ b/pyro/source/pyro/distributions/grouped_normal_normal.py @@ -0,0 +1,161 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import torch +from torch.distributions.utils import broadcast_all + +from pyro.distributions import Normal, constraints +from pyro.distributions.torch_distribution import TorchDistribution + +LOG_ROOT_TWO_PI = 0.5 * math.log(2.0 * math.pi) + + +class GroupedNormalNormal(TorchDistribution): + r""" + This likelihood, which operates on groups of real-valued scalar observations, is obtained by + integrating out a latent mean for each group. Both the prior on each latent mean as well as the + observation likelihood for each data point are univariate Normal distributions. + The prior means are controlled by `prior_loc` and `prior_scale`. The observation noise of the + Normal likelihood is controlled by `obs_scale`, which is allowed to vary from observation to + observation. The tensor of indices `group_idx` connects each observation to one of the groups + specified by `prior_loc` and `prior_scale`. + + See e.g. Eqn. (55) in ref. [1] for relevant expressions in a simpler case with scalar `obs_scale`. + + Example: + + >>> num_groups = 3 + >>> num_data = 4 + >>> prior_loc = torch.randn(num_groups) + >>> prior_scale = torch.rand(num_groups) + >>> obs_scale = torch.rand(num_data) + >>> group_idx = torch.tensor([1, 0, 2, 1]).long() + >>> values = torch.randn(num_data) + >>> gnn = GroupedNormalNormal(prior_loc, prior_scale, obs_scale, group_idx) + >>> assert gnn.log_prob(values).shape == () + + References: + [1] "Conjugate Bayesian analysis of the Gaussian distribution," Kevin P. Murphy. + + :param torch.Tensor prior_loc: Tensor of shape `(num_groups,)` specifying the prior mean of the latent + of each group. + :param torch.Tensor prior_scale: Tensor of shape `(num_groups,)` specifying the prior scale of the latent + of each group. + :param torch.Tensor obs_scale: Tensor of shape `(num_data,)` specifying the scale of the observation noise + of each observation. + :param torch.LongTensor group_idx: Tensor of indices of shape `(num_data,)` linking each observation to one + of the `num_groups` groups that are specified in `prior_loc` and `prior_scale`. + """ + + arg_constraints = { + "prior_loc": constraints.real, + "prior_scale": constraints.positive, + "obs_scale": constraints.positive, + } + support = constraints.real + + def __init__( + self, prior_loc, prior_scale, obs_scale, group_idx, validate_args=None + ): + if prior_loc.ndim not in [0, 1] or prior_scale.ndim not in [0, 1]: + raise ValueError( + "prior_loc and prior_scale must be broadcastable to 1D tensors of the same shape." + ) + + if obs_scale.ndim not in [0, 1]: + raise ValueError( + "obs_scale must be broadcastable to a 1-dimensional tensor." + ) + + if group_idx.ndim != 1 or not isinstance(group_idx, torch.LongTensor): + raise ValueError("group_idx must be a 1-dimensional tensor of indices.") + + prior_loc, prior_scale = broadcast_all(prior_loc, prior_scale) + obs_scale, group_idx = broadcast_all(obs_scale, group_idx) + + self.prior_loc = prior_loc + self.prior_scale = prior_scale + self.obs_scale = obs_scale + self.group_idx = group_idx + batch_shape = prior_loc.shape[:-1] + + if batch_shape != torch.Size([]): + raise ValueError("GroupedNormalNormal only supports trivial batch_shape's.") + + self.num_groups = prior_loc.size(0) + if group_idx.min().item() < 0 or group_idx.max().item() >= self.num_groups: + raise ValueError( + "Each index in group_idx must be an integer in the inclusive range [0, prior_loc.size(0) - 1]." + ) + + self.num_data_per_batch = prior_loc.new_zeros(self.num_groups).scatter_add( + 0, self.group_idx, prior_loc.new_ones(self.group_idx.shape) + ) + super().__init__(batch_shape, validate_args=validate_args) + + def expand(self, batch_shape, _instance=None): + raise NotImplementedError + + def sample(self, sample_shape=()): + raise NotImplementedError + + def get_posterior(self, value): + """ + Get a `pyro.distributions.Normal` distribution that encodes the posterior distribution + over the vector of latents specified by `prior_loc` and `prior_scale` conditioned on the + observed data specified by `value`. + """ + if value.shape != self.group_idx.shape: + raise ValueError( + "GroupedNormalNormal.get_posterior only supports values that have the same shape as group_idx." + ) + + obs_scale_sq_inv = self.obs_scale.pow(-2) + prior_scale_sq_inv = self.prior_scale.pow(-2) + + obs_scale_sq_inv_sum = torch.zeros_like(self.prior_loc).scatter_add( + 0, self.group_idx, obs_scale_sq_inv + ) + precision = prior_scale_sq_inv + obs_scale_sq_inv_sum + scaled_value_sum = torch.zeros_like(self.prior_loc).scatter_add( + 0, self.group_idx, value * obs_scale_sq_inv + ) + + loc = (scaled_value_sum + self.prior_loc * prior_scale_sq_inv) / precision + scale = precision.rsqrt() + + return Normal(loc=loc, scale=scale) + + def log_prob(self, value): + if self._validate_args: + self._validate_sample(value) + + group_idx = self.group_idx + + if value.shape != group_idx.shape: + raise ValueError( + "GroupedNormalNormal.log_prob only supports values that have the same shape as group_idx." + ) + + prior_scale_sq = self.prior_scale.pow(2.0) + obs_scale_sq_inv = self.obs_scale.pow(-2) + obs_scale_sq_inv_sum = torch.zeros_like(self.prior_loc).scatter_add( + 0, self.group_idx, obs_scale_sq_inv + ) + + scale_ratio = prior_scale_sq * obs_scale_sq_inv_sum + delta = value - self.prior_loc[group_idx] + scaled_delta = delta * obs_scale_sq_inv + scaled_delta_sum = torch.zeros_like(self.prior_loc).scatter_add( + 0, self.group_idx, scaled_delta + ) + + result1 = -(self.num_data_per_batch * LOG_ROOT_TWO_PI).sum() + result2 = -0.5 * torch.log1p(scale_ratio).sum() - self.obs_scale.log().sum() + result3 = -0.5 * torch.dot(delta, scaled_delta) + numerator = prior_scale_sq * scaled_delta_sum.pow(2) + result4 = 0.5 * (numerator / (1.0 + scale_ratio)).sum() + + return result1 + result2 + result3 + result4 diff --git a/pyro/source/pyro/distributions/hmm.py b/pyro/source/pyro/distributions/hmm.py new file mode 100644 index 0000000000000000000000000000000000000000..9f2a242682871404bcbaebdbedba66b6225e2110 --- /dev/null +++ b/pyro/source/pyro/distributions/hmm.py @@ -0,0 +1,1317 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +import torch.nn.functional as F + +from pyro.ops.gamma_gaussian import ( + GammaGaussian, + gamma_and_mvn_to_gamma_gaussian, + gamma_gaussian_tensordot, + matrix_and_mvn_to_gamma_gaussian, +) +from pyro.ops.gaussian import ( + Gaussian, + gaussian_tensordot, + matrix_and_mvn_to_gaussian, + mvn_to_gaussian, + sequential_gaussian_filter_sample, + sequential_gaussian_tensordot, +) +from pyro.ops.indexing import Vindex +from pyro.ops.special import safe_log +from pyro.ops.tensor_utils import cholesky_solve, safe_cholesky + +from . import constraints +from .torch import Categorical, Gamma, Independent, MultivariateNormal +from .torch_distribution import TorchDistribution +from .util import broadcast_shape, torch_jit_script_if_tracing + + +@torch_jit_script_if_tracing +def _linear_integrate(init, trans, shift): + """ + Integrate the inhomogeneous linear shifterence equation:: + + x[0] = init + x[t] = x[t-1] @ trans[t] + shift[t] + + :return: An integrated tensor ``x[:, :]``. + """ + # xs: List[Tensor] + xs = [] + x = init.unsqueeze(-2) + shift = shift.unsqueeze(-3) + for t in range(trans.size(-3)): + x = x @ trans[..., t, :, :] + shift[..., t, :] + xs.append(x) + return torch.cat(xs, dim=-2) + + +def _logmatmulexp(x, y): + """ + Numerically stable version of ``(x.exp() @ y.exp()).log()``. + """ + finfo = torch.finfo(x.dtype) # avoid nan due to -inf - -inf + x_shift = x.detach().max(-1, keepdim=True).values.clamp_(min=finfo.min) + y_shift = y.detach().max(-2, keepdim=True).values.clamp_(min=finfo.min) + xy = safe_log(torch.matmul((x - x_shift).exp(), (y - y_shift).exp())) + return xy + x_shift + y_shift + + +# TODO re-enable jitting once _SafeLog is supported by the jit. +# See https://discuss.pytorch.org/t/does-torch-jit-script-support-custom-operators/65759/4 +# @torch_jit_script_if_tracing +def _sequential_logmatmulexp(logits): + """ + For a tensor ``x`` whose time dimension is -3, computes:: + + x[..., 0, :, :] @ x[..., 1, :, :] @ ... @ x[..., T-1, :, :] + + but does so numerically stably in log space. + """ + batch_shape = logits.shape[:-3] + state_dim = logits.size(-1) + while logits.size(-3) > 1: + time = logits.size(-3) + even_time = time // 2 * 2 + even_part = logits[..., :even_time, :, :] + x_y = even_part.reshape(batch_shape + (even_time // 2, 2, state_dim, state_dim)) + x, y = x_y.unbind(-3) + contracted = _logmatmulexp(x, y) + if time > even_time: + contracted = torch.cat((contracted, logits[..., -1:, :, :]), dim=-3) + logits = contracted + return logits.squeeze(-3) + + +def _markov_index(x, y): + """ + Join ends of two Markov paths. + """ + y = Vindex(y.unsqueeze(-2))[..., x[..., -1:, :]] + return torch.cat([x, y], -2) + + +def _sequential_index(samples): + """ + For a tensor ``samples`` whose time dimension is -2 and state dimension + is -1, compute Markov paths by sequential indexing. + + For example, for ``samples`` with 3 states and time duration 5:: + + tensor([[0, 1, 1], + [1, 0, 2], + [2, 1, 0], + [0, 2, 1], + [1, 1, 0]]) + + computed paths are:: + + tensor([[0, 1, 1], + [1, 0, 0], + [1, 2, 2], + [2, 1, 1], + [0, 1, 1]]) + + # path for a 0th state + # + # 0 1 1 + # | + # 1 0 2 + # \ + # 2 1 0 + # | + # 0 2 1 + # \ + # 1 1 0 + # + # paths for 1st and 2nd states + # + # 0 1 1 + # |/ + # 1 0 2 + # / + # 2 1 0 + # \ + # \ + # 0 2 1 + # / + # 1 1 0 + """ + # new Markov time dimension at -2 + samples = samples.unsqueeze(-2) + batch_shape = samples.shape[:-3] + state_dim = samples.size(-1) + duration = samples.size(-3) + while samples.size(-3) > 1: + time = samples.size(-3) + even_time = time // 2 * 2 + even_part = samples[..., :even_time, :, :] + x_y = even_part.reshape(batch_shape + (even_time // 2, 2, -1, state_dim)) + x, y = x_y.unbind(-3) + contracted = _markov_index(x, y) + if time > even_time: + padded = F.pad( + input=samples[..., -1:, :, :], + pad=(0, 0, 0, contracted.size(-2) // 2), + ) + contracted = torch.cat((contracted, padded), dim=-3) + samples = contracted + return samples.squeeze(-3)[..., :duration, :] + + +def _sequential_gamma_gaussian_tensordot(gamma_gaussian): + """ + Integrates a GammaGaussian ``x`` whose rightmost batch dimension is time, computes:: + + x[..., 0] @ x[..., 1] @ ... @ x[..., T-1] + """ + assert isinstance(gamma_gaussian, GammaGaussian) + assert gamma_gaussian.dim() % 2 == 0, "dim is not even" + batch_shape = gamma_gaussian.batch_shape[:-1] + state_dim = gamma_gaussian.dim() // 2 + while gamma_gaussian.batch_shape[-1] > 1: + time = gamma_gaussian.batch_shape[-1] + even_time = time // 2 * 2 + even_part = gamma_gaussian[..., :even_time] + x_y = even_part.reshape(batch_shape + (even_time // 2, 2)) + x, y = x_y[..., 0], x_y[..., 1] + contracted = gamma_gaussian_tensordot(x, y, state_dim) + if time > even_time: + contracted = GammaGaussian.cat( + (contracted, gamma_gaussian[..., -1:]), dim=-1 + ) + gamma_gaussian = contracted + return gamma_gaussian[..., 0] + + +class HiddenMarkovModel(TorchDistribution): + """ + Abstract base class for Hidden Markov Models. + + The purpose of this class is to handle duration logic for homogeneous HMMs. + + :param int duration: Optional size of the time axis ``event_shape[0]``. + This is required when sampling from homogeneous HMMs whose parameters + are not expanded along the time axis. + """ + + def __init__(self, duration, batch_shape, event_shape, validate_args=None): + if duration is None: + if event_shape[0] != 1: + # Infer duration from event_shape. + duration = event_shape[0] + elif duration != event_shape[0]: + if event_shape[0] != 1: + raise ValueError( + "duration, event_shape mismatch: {} vs {}".format( + duration, event_shape + ) + ) + # Infer event_shape from duration. + event_shape = torch.Size((duration,) + event_shape[1:]) + self._duration = duration + super().__init__(batch_shape, event_shape, validate_args) + + @property + def duration(self): + """ + Returns the size of the time axis, or None if unknown. + """ + return self._duration + + def _validate_sample(self, value): + if value.dim() < self.event_dim: + raise ValueError("value has too few dimensions: {}".format(value.shape)) + + if self.duration is not None: + super()._validate_sample(value) + return + + # Temporarily infer duration from value.shape. + duration = value.size(-self.event_dim) + old = self._event_shape + new = torch.Size((duration,)) + self._event_shape[1:] + try: + self._event_shape = new + super()._validate_sample(value) + finally: + self._event_shape = old + + +class DiscreteHMM(HiddenMarkovModel): + """ + Hidden Markov Model with discrete latent state and arbitrary observation + distribution. + + This uses [1] to parallelize over time, achieving O(log(time)) parallel + complexity for computing :meth:`log_prob`, :meth:`filter`, and :meth:`sample`. + + The event_shape of this distribution includes time on the left:: + + event_shape = (num_steps,) + observation_dist.event_shape + + This distribution supports any combination of homogeneous/heterogeneous + time dependency of ``transition_logits`` and ``observation_dist``. However, + because time is included in this distribution's event_shape, the + homogeneous+homogeneous case will have a broadcastable event_shape with + ``num_steps = 1``, allowing :meth:`log_prob` to work with arbitrary length + data:: + + # homogeneous + homogeneous case: + event_shape = (1,) + observation_dist.event_shape + + **References:** + + [1] Simo Sarkka, Angel F. Garcia-Fernandez (2019) + "Temporal Parallelization of Bayesian Filters and Smoothers" + https://arxiv.org/pdf/1905.13002.pdf + + :param ~torch.Tensor initial_logits: A logits tensor for an initial + categorical distribution over latent states. Should have rightmost size + ``state_dim`` and be broadcastable to ``batch_shape + (state_dim,)``. + :param ~torch.Tensor transition_logits: A logits tensor for transition + conditional distributions between latent states. Should have rightmost + shape ``(state_dim, state_dim)`` (old, new), and be broadcastable to + ``batch_shape + (num_steps, state_dim, state_dim)``. + :param ~torch.distributions.Distribution observation_dist: A conditional + distribution of observed data conditioned on latent state. The + ``.batch_shape`` should have rightmost size ``state_dim`` and be + broadcastable to ``batch_shape + (num_steps, state_dim)``. The + ``.event_shape`` may be arbitrary. + :param int duration: Optional size of the time axis ``event_shape[0]``. + This is required when sampling from homogeneous HMMs whose parameters + are not expanded along the time axis. + """ + + arg_constraints = { + "initial_logits": constraints.real, + "transition_logits": constraints.real, + } + + def __init__( + self, + initial_logits, + transition_logits, + observation_dist, + validate_args=None, + duration=None, + ): + if initial_logits.dim() < 1: + raise ValueError( + "expected initial_logits to have at least one dim, " + "actual shape = {}".format(initial_logits.shape) + ) + if transition_logits.dim() < 2: + raise ValueError( + "expected transition_logits to have at least two dims, " + "actual shape = {}".format(transition_logits.shape) + ) + if len(observation_dist.batch_shape) < 1: + raise ValueError( + "expected observation_dist to have at least one batch dim, " + "actual .batch_shape = {}".format(observation_dist.batch_shape) + ) + shape = broadcast_shape( + initial_logits.shape[:-1] + (1,), + transition_logits.shape[:-2], + observation_dist.batch_shape[:-1], + ) + batch_shape, time_shape = shape[:-1], shape[-1:] + event_shape = time_shape + observation_dist.event_shape + self.initial_logits = initial_logits - initial_logits.logsumexp(-1, True) + self.transition_logits = transition_logits - transition_logits.logsumexp( + -1, True + ) + self.observation_dist = observation_dist + super().__init__( + duration, batch_shape, event_shape, validate_args=validate_args + ) + + @constraints.dependent_property(event_dim=2) + def support(self): + return constraints.independent(self.observation_dist.support, 1) + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(DiscreteHMM, _instance) + batch_shape = torch.Size(broadcast_shape(self.batch_shape, batch_shape)) + # We only need to expand one of the inputs, since batch_shape is determined + # by broadcasting all three. To save computation in _sequential_logmatmulexp(), + # we expand only initial_logits, which is applied only after the logmatmulexp. + # This is similar to the ._unbroadcasted_* pattern used elsewhere in distributions. + new.initial_logits = self.initial_logits.expand(batch_shape + (-1,)) + new.transition_logits = self.transition_logits + new.observation_dist = self.observation_dist + super(DiscreteHMM, new).__init__( + self.duration, batch_shape, self.event_shape, validate_args=False + ) + new._validate_args = self.__dict__.get("_validate_args") + return new + + def log_prob(self, value): + if self._validate_args: + self._validate_sample(value) + + # Combine observation and transition factors. + value = value.unsqueeze(-1 - self.observation_dist.event_dim) + observation_logits = self.observation_dist.log_prob(value) + result = self.transition_logits + observation_logits.unsqueeze(-2) + + # Eliminate time dimension. + result = _sequential_logmatmulexp(result) + + # Combine initial factor. + result = self.initial_logits + result.logsumexp(-1) + + # Marginalize out final state. + result = result.logsumexp(-1) + return result + + def filter(self, value): + """ + Compute posterior over final state given a sequence of observations. + + :param ~torch.Tensor value: A sequence of observations. + :return: A posterior distribution + over latent states at the final time step. ``result.logits`` can + then be used as ``initial_logits`` in a sequential Pyro model for + prediction. + :rtype: ~pyro.distributions.Categorical + """ + if self._validate_args: + self._validate_sample(value) + + # Combine observation and transition factors. + value = value.unsqueeze(-1 - self.observation_dist.event_dim) + observation_logits = self.observation_dist.log_prob(value) + logp = self.transition_logits + observation_logits.unsqueeze(-2) + + # Eliminate time dimension. + logp = _sequential_logmatmulexp(logp) + + # Combine initial factor. + logp = (self.initial_logits.unsqueeze(-1) + logp).logsumexp(-2) + + # Convert to a distribution. + return Categorical(logits=logp, validate_args=self._validate_args) + + @torch.no_grad() + def sample(self, sample_shape=torch.Size()): + assert self.duration is not None + + # Sample initial state. + S = self.initial_logits.size(-1) # state space size + init_shape = torch.Size(sample_shape) + self.batch_shape + (S,) + init_logits = self.initial_logits.expand(init_shape) + x = Categorical(logits=init_logits).sample() + + # Sample hidden states over time. + trans_shape = ( + torch.Size(sample_shape) + self.batch_shape + (self.duration, S, S) + ) + trans_logits = self.transition_logits.expand(trans_shape) + xs = Categorical(logits=trans_logits).sample() + xs = _sequential_index(xs) + x = Vindex(xs)[..., :, x] + + # Sample observations conditioned on hidden states. + # Note the simple sample-then-slice approach here generalizes to all + # distributions, but is inefficient. To implement a general optimal + # slice-then-sample strategy would require distributions to support + # slicing https://github.com/pyro-ppl/pyro/issues/3052. A simpler + # implementation might register a few slicing operators as is done with + # pyro.contrib.forecast.util.reshape_batch(). If you as a user need + # this function to be cheaper, feel free to submit a PR implementing + # one of these approaches. + obs_shape = self.batch_shape + (self.duration, S) + obs_dist = self.observation_dist.expand(obs_shape) + y = obs_dist.sample(sample_shape) + y = Vindex(y)[(Ellipsis, x) + (slice(None),) * obs_dist.event_dim] + return y + + +class GaussianHMM(HiddenMarkovModel): + """ + Hidden Markov Model with Gaussians for initial, transition, and observation + distributions. This adapts [1] to parallelize over time to achieve + O(log(time)) parallel complexity, however it differs in that it tracks the + log normalizer to ensure :meth:`log_prob` is differentiable. + + This corresponds to the generative model:: + + z = initial_distribution.sample() + x = [] + for t in range(num_events): + z = z @ transition_matrix + transition_dist.sample() + x.append(z @ observation_matrix + observation_dist.sample()) + + The event_shape of this distribution includes time on the left:: + + event_shape = (num_steps,) + observation_dist.event_shape + + This distribution supports any combination of homogeneous/heterogeneous + time dependency of ``transition_dist`` and ``observation_dist``. However, + because time is included in this distribution's event_shape, the + homogeneous+homogeneous case will have a broadcastable event_shape with + ``num_steps = 1``, allowing :meth:`log_prob` to work with arbitrary length + data:: + + event_shape = (1, obs_dim) # homogeneous + homogeneous case + + **References:** + + [1] Simo Sarkka, Angel F. Garcia-Fernandez (2019) + "Temporal Parallelization of Bayesian Filters and Smoothers" + https://arxiv.org/pdf/1905.13002.pdf + + :ivar int hidden_dim: The dimension of the hidden state. + :ivar int obs_dim: The dimension of the observed state. + :param ~torch.distributions.MultivariateNormal initial_dist: A distribution + over initial states. This should have batch_shape broadcastable to + ``self.batch_shape``. This should have event_shape ``(hidden_dim,)``. + :param ~torch.Tensor transition_matrix: A linear transformation of hidden + state. This should have shape broadcastable to + ``self.batch_shape + (num_steps, hidden_dim, hidden_dim)`` where the + rightmost dims are ordered ``(old, new)``. + :param ~torch.distributions.MultivariateNormal transition_dist: A process + noise distribution. This should have batch_shape broadcastable to + ``self.batch_shape + (num_steps,)``. This should have event_shape + ``(hidden_dim,)``. + :param ~torch.Tensor observation_matrix: A linear transformation from hidden + to observed state. This should have shape broadcastable to + ``self.batch_shape + (num_steps, hidden_dim, obs_dim)``. + :param observation_dist: An observation noise distribution. This should + have batch_shape broadcastable to ``self.batch_shape + (num_steps,)``. + This should have event_shape ``(obs_dim,)``. + :type observation_dist: ~torch.distributions.MultivariateNormal or + ~torch.distributions.Independent of ~torch.distributions.Normal + :param int duration: Optional size of the time axis ``event_shape[0]``. + This is required when sampling from homogeneous HMMs whose parameters + are not expanded along the time axis. + """ + + has_rsample = True + arg_constraints = {} + support = constraints.independent(constraints.real, 2) + + def __init__( + self, + initial_dist, + transition_matrix, + transition_dist, + observation_matrix, + observation_dist, + validate_args=None, + duration=None, + ): + assert isinstance(initial_dist, torch.distributions.MultivariateNormal) or ( + isinstance(initial_dist, torch.distributions.Independent) + and isinstance(initial_dist.base_dist, torch.distributions.Normal) + ) + assert isinstance(transition_matrix, torch.Tensor) + assert isinstance(transition_dist, torch.distributions.MultivariateNormal) or ( + isinstance(transition_dist, torch.distributions.Independent) + and isinstance(transition_dist.base_dist, torch.distributions.Normal) + ) + assert isinstance(observation_matrix, torch.Tensor) + assert isinstance(observation_dist, torch.distributions.MultivariateNormal) or ( + isinstance(observation_dist, torch.distributions.Independent) + and isinstance(observation_dist.base_dist, torch.distributions.Normal) + ) + hidden_dim, obs_dim = observation_matrix.shape[-2:] + assert initial_dist.event_shape == (hidden_dim,) + assert transition_matrix.shape[-2:] == (hidden_dim, hidden_dim) + assert transition_dist.event_shape == (hidden_dim,) + assert observation_dist.event_shape == (obs_dim,) + shape = broadcast_shape( + initial_dist.batch_shape + (1,), + transition_matrix.shape[:-2], + transition_dist.batch_shape, + observation_matrix.shape[:-2], + observation_dist.batch_shape, + ) + batch_shape, time_shape = shape[:-1], shape[-1:] + event_shape = time_shape + (obs_dim,) + super().__init__( + duration, batch_shape, event_shape, validate_args=validate_args + ) + + self.hidden_dim = hidden_dim + self.obs_dim = obs_dim + self._init = mvn_to_gaussian(initial_dist).expand(self.batch_shape) + self._trans = matrix_and_mvn_to_gaussian(transition_matrix, transition_dist) + self._obs = matrix_and_mvn_to_gaussian(observation_matrix, observation_dist) + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(GaussianHMM, _instance) + new.hidden_dim = self.hidden_dim + new.obs_dim = self.obs_dim + new._obs = self._obs + new._trans = self._trans + + # To save computation in sequential_gaussian_tensordot(), we expand + # only _init, which is applied only after + # sequential_gaussian_tensordot(). + batch_shape = torch.Size(broadcast_shape(self.batch_shape, batch_shape)) + new._init = self._init.expand(batch_shape) + + super(GaussianHMM, new).__init__( + self.duration, batch_shape, self.event_shape, validate_args=False + ) + new._validate_args = self.__dict__.get("_validate_args") + return new + + def log_prob(self, value): + if self._validate_args: + self._validate_sample(value) + + # Combine observation and transition factors. + result = self._trans + self._obs.condition(value).event_pad( + left=self.hidden_dim + ) + + # Eliminate time dimension. + result = sequential_gaussian_tensordot(result.expand(result.batch_shape)) + + # Combine initial factor. + result = gaussian_tensordot(self._init, result, dims=self.hidden_dim) + + # Marginalize out final state. + result = result.event_logsumexp() + return result + + def rsample(self, sample_shape=torch.Size()): + assert self.duration is not None + sample_shape = torch.Size(sample_shape) + trans = self._trans + self._obs.marginalize(right=self.obs_dim).event_pad( + left=self.hidden_dim + ) + trans = trans.expand(trans.batch_shape[:-1] + (self.duration,)) + z = sequential_gaussian_filter_sample(self._init, trans, sample_shape) + z = z[..., 1:, :] # drop the initial hidden state + x = self._obs.left_condition(z).rsample() + return x + + def rsample_posterior(self, value, sample_shape=torch.Size()): + """ + EXPERIMENTAL Sample from the latent state conditioned on observation. + """ + trans = self._trans + self._obs.condition(value).event_pad(left=self.hidden_dim) + trans = trans.expand(trans.batch_shape) + z = sequential_gaussian_filter_sample(self._init, trans, sample_shape) + z = z[..., 1:, :] # drop the initial hidden state + return z + + def filter(self, value): + """ + Compute posterior over final state given a sequence of observations. + + :param ~torch.Tensor value: A sequence of observations. + :return: A posterior + distribution over latent states at the final time step. ``result`` + can then be used as ``initial_dist`` in a sequential Pyro model for + prediction. + :rtype: ~pyro.distributions.MultivariateNormal + """ + if self._validate_args: + self._validate_sample(value) + + # Combine observation and transition factors. + logp = self._trans + self._obs.condition(value).event_pad(left=self.hidden_dim) + + # Eliminate time dimension. + logp = sequential_gaussian_tensordot(logp.expand(logp.batch_shape)) + + # Combine initial factor. + logp = gaussian_tensordot(self._init, logp, dims=self.hidden_dim) + + # Convert to a distribution + precision = logp.precision + loc = cholesky_solve( + logp.info_vec.unsqueeze(-1), safe_cholesky(precision) + ).squeeze(-1) + return MultivariateNormal( + loc, precision_matrix=precision, validate_args=self._validate_args + ) + + def conjugate_update(self, other): + """ + EXPERIMENTAL Creates an updated :class:`GaussianHMM` fusing information + from another compatible distribution. + + This should satisfy:: + + fg, log_normalizer = f.conjugate_update(g) + assert f.log_prob(x) + g.log_prob(x) == fg.log_prob(x) + log_normalizer + + :param other: A distribution representing ``p(data|self.probs)`` but + normalized over ``self.probs`` rather than ``data``. + :type other: ~torch.distributions.Independent of + ~torch.distributions.MultivariateNormal or ~torch.distributions.Normal + :return: a pair ``(updated,log_normalizer)`` where ``updated`` is an + updated :class:`GaussianHMM` , and ``log_normalizer`` is a + :class:`~torch.Tensor` representing the normalization factor. + """ + assert isinstance(other, torch.distributions.Independent) and ( + isinstance(other.base_dist, torch.distributions.Normal) + or isinstance(other.base_dist, torch.distributions.MultivariateNormal) + ) + duration = other.event_shape[0] if self.duration is None else self.duration + event_shape = torch.Size((duration, self.obs_dim)) + assert other.event_shape == event_shape + + new = self._get_checked_instance(GaussianHMM) + new.hidden_dim = self.hidden_dim + new.obs_dim = self.obs_dim + new._init = self._init + new._trans = self._trans + new._obs = self._obs + mvn_to_gaussian(other.to_event(-1)).event_pad( + left=self.hidden_dim + ) + + # Normalize. + # TODO cache this computation for the forward pass of .rsample(). + logp = new._trans + new._obs.marginalize(right=new.obs_dim).event_pad( + left=new.hidden_dim + ) + logp = sequential_gaussian_tensordot(logp.expand(logp.batch_shape)) + logp = gaussian_tensordot(new._init, logp, dims=new.hidden_dim) + log_normalizer = logp.event_logsumexp() + new._init = new._init - log_normalizer + + batch_shape = log_normalizer.shape + super(GaussianHMM, new).__init__( + duration, batch_shape, event_shape, validate_args=False + ) + new._validate_args = self.__dict__.get("_validate_args") + return new, log_normalizer + + def prefix_condition(self, data): + """ + EXPERIMENTAL Given self has ``event_shape == (t+f, d)`` and data ``x`` + of shape ``batch_shape + (t, d)``, compute a conditional distribution + of event_shape ``(f, d)``. Typically ``t`` is the number of training + time steps, ``f`` is the number of forecast time steps, and ``d`` is + the data dimension. + + :param data: data of dimension at least 2. + :type data: ~torch.Tensor + """ + assert data.dim() >= 2 + assert data.size(-1) == self.event_shape[-1] + assert data.size(-2) < self.duration + t = data.size(-2) + f = self.duration - t + + left = self._get_checked_instance(GaussianHMM) + left.hidden_dim = self.hidden_dim + left.obs_dim = self.obs_dim + left._init = self._init + + right = self._get_checked_instance(GaussianHMM) + right.hidden_dim = self.hidden_dim + right.obs_dim = self.obs_dim + + if self._obs.batch_shape == () or self._obs.batch_shape[-1] == 1: # homogeneous + left._obs = self._obs + right._obs = self._obs + else: # heterogeneous + left._obs = self._obs[..., :t] + right._obs = self._obs[..., t:] + + if ( + self._trans.batch_shape == () or self._trans.batch_shape[-1] == 1 + ): # homogeneous + left._trans = self._trans + right._trans = self._trans + else: # heterogeneous + left._trans = self._trans[..., :t] + right._trans = self._trans[..., t:] + + super(GaussianHMM, left).__init__( + t, self.batch_shape, (t, self.obs_dim), validate_args=self._validate_args + ) + initial_dist = left.filter(data) + right._init = mvn_to_gaussian(initial_dist) + batch_shape = broadcast_shape(right._init.batch_shape, self.batch_shape) + super(GaussianHMM, right).__init__( + f, batch_shape, (f, self.obs_dim), validate_args=self._validate_args + ) + return right + + +class GammaGaussianHMM(HiddenMarkovModel): + """ + Hidden Markov Model with the joint distribution of initial state, hidden + state, and observed state is a :class:`~pyro.distributions.MultivariateStudentT` + distribution along the line of references [2] and [3]. This adapts [1] + to parallelize over time to achieve O(log(time)) parallel complexity. + + This GammaGaussianHMM class corresponds to the generative model:: + + s = Gamma(df/2, df/2).sample() + z = scale(initial_dist, s).sample() + x = [] + for t in range(num_events): + z = z @ transition_matrix + scale(transition_dist, s).sample() + x.append(z @ observation_matrix + scale(observation_dist, s).sample()) + + where `scale(mvn(loc, precision), s) := mvn(loc, s * precision)`. + + The event_shape of this distribution includes time on the left:: + + event_shape = (num_steps,) + observation_dist.event_shape + + This distribution supports any combination of homogeneous/heterogeneous + time dependency of ``transition_dist`` and ``observation_dist``. However, + because time is included in this distribution's event_shape, the + homogeneous+homogeneous case will have a broadcastable event_shape with + ``num_steps = 1``, allowing :meth:`log_prob` to work with arbitrary length + data:: + + event_shape = (1, obs_dim) # homogeneous + homogeneous case + + **References:** + + [1] Simo Sarkka, Angel F. Garcia-Fernandez (2019) + "Temporal Parallelization of Bayesian Filters and Smoothers" + https://arxiv.org/pdf/1905.13002.pdf + + [2] F. J. Giron and J. C. Rojano (1994) + "Bayesian Kalman filtering with elliptically contoured errors" + + [3] Filip Tronarp, Toni Karvonen, and Simo Sarkka (2019) + "Student's t-filters for noise scale estimation" + https://users.aalto.fi/~ssarkka/pub/SPL2019.pdf + + :ivar int hidden_dim: The dimension of the hidden state. + :ivar int obs_dim: The dimension of the observed state. + :param Gamma scale_dist: Prior of the mixing distribution. + :param MultivariateNormal initial_dist: A distribution with unit scale mixing + over initial states. This should have batch_shape broadcastable to + ``self.batch_shape``. This should have event_shape ``(hidden_dim,)``. + :param ~torch.Tensor transition_matrix: A linear transformation of hidden + state. This should have shape broadcastable to + ``self.batch_shape + (num_steps, hidden_dim, hidden_dim)`` where the + rightmost dims are ordered ``(old, new)``. + :param MultivariateNormal transition_dist: A process noise distribution + with unit scale mixing. This should have batch_shape broadcastable to + ``self.batch_shape + (num_steps,)``. This should have event_shape + ``(hidden_dim,)``. + :param ~torch.Tensor observation_matrix: A linear transformation from hidden + to observed state. This should have shape broadcastable to + ``self.batch_shape + (num_steps, hidden_dim, obs_dim)``. + :param MultivariateNormal observation_dist: An observation noise distribution + with unit scale mixing. This should have batch_shape broadcastable to + ``self.batch_shape + (num_steps,)``. + This should have event_shape ``(obs_dim,)``. + :param int duration: Optional size of the time axis ``event_shape[0]``. + This is required when sampling from homogeneous HMMs whose parameters + are not expanded along the time axis. + """ + + arg_constraints = {} + support = constraints.independent(constraints.real, 2) + + def __init__( + self, + scale_dist, + initial_dist, + transition_matrix, + transition_dist, + observation_matrix, + observation_dist, + validate_args=None, + duration=None, + ): + assert isinstance(scale_dist, Gamma) + assert isinstance(initial_dist, MultivariateNormal) + assert isinstance(transition_matrix, torch.Tensor) + assert isinstance(transition_dist, MultivariateNormal) + assert isinstance(observation_matrix, torch.Tensor) + assert isinstance(observation_dist, MultivariateNormal) + hidden_dim, obs_dim = observation_matrix.shape[-2:] + assert initial_dist.event_shape == (hidden_dim,) + assert transition_matrix.shape[-2:] == (hidden_dim, hidden_dim) + assert transition_dist.event_shape == (hidden_dim,) + assert observation_dist.event_shape == (obs_dim,) + shape = broadcast_shape( + scale_dist.batch_shape + (1,), + initial_dist.batch_shape + (1,), + transition_matrix.shape[:-2], + transition_dist.batch_shape, + observation_matrix.shape[:-2], + observation_dist.batch_shape, + ) + batch_shape, time_shape = shape[:-1], shape[-1:] + event_shape = time_shape + (obs_dim,) + super().__init__( + duration, batch_shape, event_shape, validate_args=validate_args + ) + self.hidden_dim = hidden_dim + self.obs_dim = obs_dim + self._init = gamma_and_mvn_to_gamma_gaussian(scale_dist, initial_dist) + self._trans = matrix_and_mvn_to_gamma_gaussian( + transition_matrix, transition_dist + ) + self._obs = matrix_and_mvn_to_gamma_gaussian( + observation_matrix, observation_dist + ) + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(GammaGaussianHMM, _instance) + batch_shape = torch.Size(broadcast_shape(self.batch_shape, batch_shape)) + new.hidden_dim = self.hidden_dim + new.obs_dim = self.obs_dim + # We only need to expand one of the inputs, since batch_shape is determined + # by broadcasting all three. To save computation in sequential_gaussian_tensordot(), + # we expand only _init, which is applied only after sequential_gaussian_tensordot(). + new._init = self._init.expand(batch_shape) + new._trans = self._trans + new._obs = self._obs + super(GammaGaussianHMM, new).__init__( + self.duration, batch_shape, self.event_shape, validate_args=False + ) + new._validate_args = self.__dict__.get("_validate_args") + return new + + def log_prob(self, value): + if self._validate_args: + self._validate_sample(value) + + # Combine observation and transition factors. + result = self._trans + self._obs.condition(value).event_pad( + left=self.hidden_dim + ) + + # Eliminate time dimension. + result = _sequential_gamma_gaussian_tensordot(result.expand(result.batch_shape)) + + # Combine initial factor. + result = gamma_gaussian_tensordot(self._init, result, dims=self.hidden_dim) + + # Marginalize out final state. + result = result.event_logsumexp() + + # Marginalize out multiplier. + result = result.logsumexp() + return result + + def filter(self, value): + """ + Compute posteriors over the multiplier and the final state + given a sequence of observations. The posterior is a pair of + Gamma and MultivariateNormal distributions (i.e. a GammaGaussian + instance). + + :param ~torch.Tensor value: A sequence of observations. + :return: A pair of posterior distributions over the mixing and the latent + state at the final time step. + :rtype: a tuple of ~pyro.distributions.Gamma and ~pyro.distributions.MultivariateNormal + """ + if self._validate_args: + self._validate_sample(value) + + # Combine observation and transition factors. + logp = self._trans + self._obs.condition(value).event_pad(left=self.hidden_dim) + + # Eliminate time dimension. + logp = _sequential_gamma_gaussian_tensordot(logp.expand(logp.batch_shape)) + + # Combine initial factor. + logp = gamma_gaussian_tensordot(self._init, logp, dims=self.hidden_dim) + + # Posterior of the scale + gamma_dist = logp.event_logsumexp() + scale_post = Gamma( + gamma_dist.concentration, gamma_dist.rate, validate_args=self._validate_args + ) + # Conditional of last state on unit scale + scale_tril = safe_cholesky(logp.precision) + loc = cholesky_solve(logp.info_vec.unsqueeze(-1), scale_tril).squeeze(-1) + mvn = MultivariateNormal( + loc, scale_tril=scale_tril, validate_args=self._validate_args + ) + return scale_post, mvn + + +class LinearHMM(HiddenMarkovModel): + r""" + Hidden Markov Model with linear dynamics and observations and arbitrary + noise for initial, transition, and observation distributions. Each of + those distributions can be e.g. + :class:`~pyro.distributions.MultivariateNormal` or + :class:`~pyro.distributions.Independent` of + :class:`~pyro.distributions.Normal`, + :class:`~pyro.distributions.StudentT`, or :class:`~pyro.distributions.Stable` . + Additionally the observation distribution may be constrained, e.g. + :class:`~pyro.distributions.LogNormal` + + This corresponds to the generative model:: + + z = initial_distribution.sample() + x = [] + for t in range(num_events): + z = z @ transition_matrix + transition_dist.sample() + y = z @ observation_matrix + obs_base_dist.sample() + x.append(obs_transform(y)) + + where ``observation_dist`` is split into ``obs_base_dist`` and an optional + ``obs_transform`` (defaulting to the identity). + + This implements a reparameterized :meth:`rsample` method but does not + implement a :meth:`log_prob` method. Derived classes may implement + :meth:`log_prob` . + + Inference without :meth:`log_prob` can be performed using either + reparameterization with :class:`~pyro.infer.reparam.hmm.LinearHMMReparam` + or likelihood-free algorithms such as + :class:`~pyro.infer.energy_distance.EnergyDistance` . Note that while + stable processes generally require a common shared stability parameter + :math:`\alpha` , this distribution and the above inference algorithms allow + heterogeneous stability parameters. + + The event_shape of this distribution includes time on the left:: + + event_shape = (num_steps,) + observation_dist.event_shape + + This distribution supports any combination of homogeneous/heterogeneous + time dependency of ``transition_dist`` and ``observation_dist``. However at + least one of the distributions or matrices must be expanded to contain the + time dimension. + + :ivar int hidden_dim: The dimension of the hidden state. + :ivar int obs_dim: The dimension of the observed state. + :param initial_dist: A distribution over initial states. This should have + batch_shape broadcastable to ``self.batch_shape``. This should have + event_shape ``(hidden_dim,)``. + :param ~torch.Tensor transition_matrix: A linear transformation of hidden + state. This should have shape broadcastable to ``self.batch_shape + + (num_steps, hidden_dim, hidden_dim)`` where the rightmost dims are + ordered ``(old, new)``. + :param transition_dist: A distribution over process noise. This should have + batch_shape broadcastable to ``self.batch_shape + (num_steps,)``. This + should have event_shape ``(hidden_dim,)``. + :param ~torch.Tensor observation_matrix: A linear transformation from hidden + to observed state. This should have shape broadcastable to + ``self.batch_shape + (num_steps, hidden_dim, obs_dim)``. + :param observation_dist: A observation noise distribution. This should have + batch_shape broadcastable to ``self.batch_shape + (num_steps,)``. This + should have event_shape ``(obs_dim,)``. + :param int duration: Optional size of the time axis ``event_shape[0]``. + This is required when sampling from homogeneous HMMs whose parameters + are not expanded along the time axis. + """ + + arg_constraints = {} + support = constraints.independent(constraints.real, 2) + has_rsample = True + + def __init__( + self, + initial_dist, + transition_matrix, + transition_dist, + observation_matrix, + observation_dist, + validate_args=None, + duration=None, + ): + assert initial_dist.has_rsample + assert initial_dist.event_dim == 1 + assert ( + isinstance(transition_matrix, torch.Tensor) and transition_matrix.dim() >= 2 + ) + assert transition_dist.has_rsample + assert transition_dist.event_dim == 1 + assert ( + isinstance(observation_matrix, torch.Tensor) + and observation_matrix.dim() >= 2 + ) + assert observation_dist.has_rsample + assert observation_dist.event_dim == 1 + + hidden_dim, obs_dim = observation_matrix.shape[-2:] + assert initial_dist.event_shape == (hidden_dim,) + assert transition_matrix.shape[-2:] == (hidden_dim, hidden_dim) + assert transition_dist.event_shape == (hidden_dim,) + assert observation_dist.event_shape == (obs_dim,) + shape = broadcast_shape( + initial_dist.batch_shape + (1,), + transition_matrix.shape[:-2], + transition_dist.batch_shape, + observation_matrix.shape[:-2], + observation_dist.batch_shape, + ) + batch_shape, time_shape = shape[:-1], shape[-1:] + event_shape = time_shape + (obs_dim,) + super().__init__( + duration, batch_shape, event_shape, validate_args=validate_args + ) + + # Expand eagerly. + if initial_dist.batch_shape != batch_shape: + initial_dist = initial_dist.expand(batch_shape) + if transition_matrix.shape[:-2] != batch_shape + time_shape: + transition_matrix = transition_matrix.expand( + batch_shape + time_shape + (hidden_dim, hidden_dim) + ) + if transition_dist.batch_shape != batch_shape + time_shape: + transition_dist = transition_dist.expand(batch_shape + time_shape) + if observation_matrix.shape[:-2] != batch_shape + time_shape: + observation_matrix = observation_matrix.expand( + batch_shape + time_shape + (hidden_dim, obs_dim) + ) + if observation_dist.batch_shape != batch_shape + time_shape: + observation_dist = observation_dist.expand(batch_shape + time_shape) + + # Extract observation transforms. + transforms = [] + while True: + if isinstance(observation_dist, torch.distributions.Independent): + observation_dist = observation_dist.base_dist + elif isinstance( + observation_dist, torch.distributions.TransformedDistribution + ): + transforms = observation_dist.transforms + transforms + observation_dist = observation_dist.base_dist + else: + break + if not observation_dist.event_shape: + observation_dist = Independent(observation_dist, 1) + + self.hidden_dim = hidden_dim + self.obs_dim = obs_dim + self.initial_dist = initial_dist + self.transition_matrix = transition_matrix + self.transition_dist = transition_dist + self.observation_matrix = observation_matrix + self.observation_dist = observation_dist + self.transforms = transforms + + @constraints.dependent_property(event_dim=2) + def support(self): # noqa: F811 + return constraints.independent(self.observation_dist.support, 1) + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(LinearHMM, _instance) + batch_shape = torch.Size(batch_shape) + time_shape = self.transition_dist.batch_shape[-1:] + new.hidden_dim = self.hidden_dim + new.obs_dim = self.obs_dim + new.initial_dist = self.initial_dist.expand(batch_shape) + new.transition_matrix = self.transition_matrix.expand( + batch_shape + time_shape + (self.hidden_dim, self.hidden_dim) + ) + new.transition_dist = self.transition_dist.expand(batch_shape + time_shape) + new.observation_matrix = self.observation_matrix.expand( + batch_shape + time_shape + (self.hidden_dim, self.obs_dim) + ) + new.observation_dist = self.observation_dist.expand(batch_shape + time_shape) + new.transforms = self.transforms + super(LinearHMM, new).__init__( + self.duration, batch_shape, self.event_shape, validate_args=False + ) + new._validate_args = self.__dict__.get("_validate_args") + return new + + def log_prob(self, value): + raise NotImplementedError("LinearHMM.log_prob() is not implemented") + + def rsample(self, sample_shape=torch.Size()): + assert self.duration is not None + init = self.initial_dist.rsample(sample_shape) + trans = self.transition_dist.expand( + self.batch_shape + (self.duration,) + ).rsample(sample_shape) + obs = self.observation_dist.expand(self.batch_shape + (self.duration,)).rsample( + sample_shape + ) + trans_matrix = self.transition_matrix.expand( + self.batch_shape + (self.duration, -1, -1) + ) + z = _linear_integrate(init, trans_matrix, trans) + x = (z.unsqueeze(-2) @ self.observation_matrix).squeeze(-2) + obs + for t in self.transforms: + x = t(x) + return x + + +class IndependentHMM(TorchDistribution): + """ + Wrapper class to treat a batch of independent univariate HMMs as a single + multivariate distribution. This converts distribution shapes as follows: + + +-----------+--------------------+---------------------+ + | | .batch_shape | .event_shape | + +===========+====================+=====================+ + | base_dist | shape + (obs_dim,) | (duration, 1) | + +-----------+--------------------+---------------------+ + | result | shape | (duration, obs_dim) | + +-----------+--------------------+---------------------+ + + :param HiddenMarkovModel base_dist: A base hidden Markov model instance. + """ + + arg_constraints = {} + + def __init__(self, base_dist): + assert base_dist.batch_shape + assert base_dist.event_dim == 2 + assert base_dist.event_shape[-1] == 1 + batch_shape = base_dist.batch_shape[:-1] + event_shape = base_dist.event_shape[:-1] + base_dist.batch_shape[-1:] + super().__init__(batch_shape, event_shape) + self.base_dist = base_dist + + @constraints.dependent_property(event_dim=2) + def support(self): + return self.base_dist.support + + @property + def has_rsample(self): + return self.base_dist.has_rsample + + @property + def duration(self): + return self.base_dist.duration + + def expand(self, batch_shape, _instance=None): + batch_shape = torch.Size(batch_shape) + new = self._get_checked_instance(IndependentHMM, _instance) + new.base_dist = self.base_dist.expand( + batch_shape + self.base_dist.batch_shape[-1:] + ) + super(IndependentHMM, new).__init__( + batch_shape, self.event_shape, validate_args=False + ) + new._validate_args = self.__dict__.get("_validate_args") + return new + + def rsample(self, sample_shape=torch.Size()): + base_value = self.base_dist.rsample(sample_shape) + return base_value.squeeze(-1).transpose(-1, -2) + + def log_prob(self, value): + base_value = value.transpose(-1, -2).unsqueeze(-1) + return self.base_dist.log_prob(base_value).sum(-1) + + +class GaussianMRF(TorchDistribution): + """ + Temporal Markov Random Field with Gaussian factors for initial, transition, + and observation distributions. This adapts [1] to parallelize over time to + achieve O(log(time)) parallel complexity, however it differs in that it + tracks the log normalizer to ensure :meth:`log_prob` is differentiable. + + The event_shape of this distribution includes time on the left:: + + event_shape = (num_steps,) + observation_dist.event_shape + + This distribution supports any combination of homogeneous/heterogeneous + time dependency of ``transition_dist`` and ``observation_dist``. However, + because time is included in this distribution's event_shape, the + homogeneous+homogeneous case will have a broadcastable event_shape with + ``num_steps = 1``, allowing :meth:`log_prob` to work with arbitrary length + data:: + + event_shape = (1, obs_dim) # homogeneous + homogeneous case + + **References:** + + [1] Simo Sarkka, Angel F. Garcia-Fernandez (2019) + "Temporal Parallelization of Bayesian Filters and Smoothers" + https://arxiv.org/pdf/1905.13002.pdf + + :ivar int hidden_dim: The dimension of the hidden state. + :ivar int obs_dim: The dimension of the observed state. + :param ~torch.distributions.MultivariateNormal initial_dist: A distribution + over initial states. This should have batch_shape broadcastable to + ``self.batch_shape``. This should have event_shape ``(hidden_dim,)``. + :param ~torch.distributions.MultivariateNormal transition_dist: A joint + distribution factor over a pair of successive time steps. This should + have batch_shape broadcastable to ``self.batch_shape + (num_steps,)``. + This should have event_shape ``(hidden_dim + hidden_dim,)`` (old+new). + :param ~torch.distributions.MultivariateNormal observation_dist: A joint + distribution factor over a hidden and an observed state. This should + have batch_shape broadcastable to ``self.batch_shape + (num_steps,)``. + This should have event_shape ``(hidden_dim + obs_dim,)``. + """ + + arg_constraints = {} + + def __init__( + self, initial_dist, transition_dist, observation_dist, validate_args=None + ): + assert isinstance(initial_dist, torch.distributions.MultivariateNormal) + assert isinstance(transition_dist, torch.distributions.MultivariateNormal) + assert isinstance(observation_dist, torch.distributions.MultivariateNormal) + hidden_dim = initial_dist.event_shape[0] + assert transition_dist.event_shape[0] == hidden_dim + hidden_dim + obs_dim = observation_dist.event_shape[0] - hidden_dim + + shape = broadcast_shape( + initial_dist.batch_shape + (1,), + transition_dist.batch_shape, + observation_dist.batch_shape, + ) + batch_shape, time_shape = shape[:-1], shape[-1:] + event_shape = time_shape + (obs_dim,) + super().__init__(batch_shape, event_shape, validate_args=validate_args) + self.hidden_dim = hidden_dim + self.obs_dim = obs_dim + self._init = mvn_to_gaussian(initial_dist) + self._trans = mvn_to_gaussian(transition_dist) + self._obs = mvn_to_gaussian(observation_dist) + self._support = constraints.independent(observation_dist.support, 1) + + @constraints.dependent_property(event_dim=2) + def support(self): + return self._support + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(GaussianMRF, _instance) + batch_shape = torch.Size(broadcast_shape(self.batch_shape, batch_shape)) + new.hidden_dim = self.hidden_dim + new.obs_dim = self.obs_dim + # We only need to expand one of the inputs, since batch_shape is determined + # by broadcasting all three. To save computation in sequential_gaussian_tensordot(), + # we expand only _init, which is applied only after sequential_gaussian_tensordot(). + new._init = self._init.expand(batch_shape) + new._trans = self._trans + new._obs = self._obs + new._support = self._support + super(GaussianMRF, new).__init__( + batch_shape, self.event_shape, validate_args=False + ) + new._validate_args = self.__dict__.get("_validate_args") + return new + + def log_prob(self, value): + # We compute a normalized distribution as p(obs,hidden) / p(hidden). + logp_oh = self._trans + logp_h = self._trans + + # Combine observation and transition factors. + logp_oh += self._obs.condition(value).event_pad(left=self.hidden_dim) + logp_h += self._obs.marginalize(right=self.obs_dim).event_pad( + left=self.hidden_dim + ) + + # Concatenate p(obs,hidden) and p(hidden) into a single Gaussian. + batch_dim = 1 + max(len(self._init.batch_shape) + 1, len(logp_oh.batch_shape)) + batch_shape = (1,) * ( + batch_dim - len(logp_oh.batch_shape) + ) + logp_oh.batch_shape + logp = Gaussian.cat([logp_oh.expand(batch_shape), logp_h.expand(batch_shape)]) + + # Eliminate time dimension. + logp = sequential_gaussian_tensordot(logp) + + # Combine initial factor. + logp = gaussian_tensordot(self._init, logp, dims=self.hidden_dim) + + # Marginalize out final state. + logp_oh, logp_h = logp.event_logsumexp() + return logp_oh - logp_h # = log( p(obs,hidden) / p(hidden) ) diff --git a/pyro/source/pyro/distributions/improper_uniform.py b/pyro/source/pyro/distributions/improper_uniform.py new file mode 100644 index 0000000000000000000000000000000000000000..10071c21a955d25fc916f2f0280022901e58910c --- /dev/null +++ b/pyro/source/pyro/distributions/improper_uniform.py @@ -0,0 +1,68 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions import constraints + +from .torch_distribution import TorchDistribution +from .util import broadcast_shape + + +class ImproperUniform(TorchDistribution): + """ + Improper distribution with zero :meth:`log_prob` and undefined + :meth:`sample`. + + This is useful for transforming a model from generative dag form to factor + graph form for use in HMC. For example the following are equal in + distribution:: + + # Version 1. a generative dag + x = pyro.sample("x", Normal(0, 1)) + y = pyro.sample("y", Normal(x, 1)) + z = pyro.sample("z", Normal(y, 1)) + + # Version 2. a factor graph + xyz = pyro.sample("xyz", ImproperUniform(constraints.real, (), (3,))) + x, y, z = xyz.unbind(-1) + pyro.sample("x", Normal(0, 1), obs=x) + pyro.sample("y", Normal(x, 1), obs=y) + pyro.sample("z", Normal(y, 1), obs=z) + + Note this distribution errors when :meth:`sample` is called. To create a + similar distribution that instead samples from a specified distribution + consider using ``.mask(False)`` as in:: + + xyz = dist.Normal(0, 1).expand([3]).to_event(1).mask(False) + + :param support: The support of the distribution. + :type support: ~torch.distributions.constraints.Constraint + :param torch.Size batch_shape: The batch shape. + :param torch.Size event_shape: The event shape. + """ + + arg_constraints = {} + + def __init__(self, support, batch_shape, event_shape): + assert isinstance(support, constraints.Constraint) + self._support = support + super().__init__(batch_shape, event_shape) + + @constraints.dependent_property + def support(self): + return self._support + + def expand(self, batch_shape, _instance=None): + batch_shape = torch.Size(batch_shape) + new = self._get_checked_instance(ImproperUniform, _instance) + new._support = self._support + super(ImproperUniform, new).__init__(batch_shape, self.event_shape) + return new + + def log_prob(self, value): + batch_shape = value.shape[: value.dim() - self.event_dim] + batch_shape = broadcast_shape(batch_shape, self.batch_shape) + return torch.zeros(()).expand(batch_shape) + + def sample(self, sample_shape=torch.Size()): + raise NotImplementedError("ImproperUniform does not support sampling") diff --git a/pyro/source/pyro/distributions/inverse_gamma.py b/pyro/source/pyro/distributions/inverse_gamma.py new file mode 100644 index 0000000000000000000000000000000000000000..b739ce00df15765a2e52f4f4ef0f8f9a036a83b1 --- /dev/null +++ b/pyro/source/pyro/distributions/inverse_gamma.py @@ -0,0 +1,48 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from torch.distributions import constraints +from torch.distributions.transforms import PowerTransform + +from pyro.distributions.torch import Gamma, TransformedDistribution + + +# DEPRECATED in favor of torch.distributions.InverseGamma. +class InverseGamma(TransformedDistribution): + r""" + Creates an inverse-gamma distribution parameterized by + `concentration` and `rate`. + + X ~ Gamma(concentration, rate) + Y = 1/X ~ InverseGamma(concentration, rate) + + :param torch.Tensor concentration: the concentration parameter (i.e. alpha). + :param torch.Tensor rate: the rate parameter (i.e. beta). + """ + + arg_constraints = { + "concentration": constraints.positive, + "rate": constraints.positive, + } + support = constraints.positive + has_rsample = True + + def __init__(self, concentration, rate, validate_args=None): + base_dist = Gamma(concentration, rate) + super().__init__( + base_dist, + PowerTransform(-base_dist.rate.new_ones(())), + validate_args=validate_args, + ) + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(InverseGamma, _instance) + return super().expand(batch_shape, _instance=new) + + @property + def concentration(self): + return self.base_dist.concentration + + @property + def rate(self): + return self.base_dist.rate diff --git a/pyro/source/pyro/distributions/kl.py b/pyro/source/pyro/distributions/kl.py new file mode 100644 index 0000000000000000000000000000000000000000..f88a0019d79f43ac4b78a52d5af183f0cd1da5d2 --- /dev/null +++ b/pyro/source/pyro/distributions/kl.py @@ -0,0 +1,56 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +from torch.distributions import ( + Independent, + MultivariateNormal, + Normal, + kl_divergence, + register_kl, +) + +from pyro.distributions.delta import Delta +from pyro.distributions.distribution import Distribution +from pyro.distributions.util import sum_rightmost + + +@register_kl(Delta, Distribution) +def _kl_delta(p, q): + return -q.log_prob(p.v) + + +@register_kl(Independent, Independent) +def _kl_independent_independent(p, q): + shared_ndims = min(p.reinterpreted_batch_ndims, q.reinterpreted_batch_ndims) + p_ndims = p.reinterpreted_batch_ndims - shared_ndims + q_ndims = q.reinterpreted_batch_ndims - shared_ndims + p = Independent(p.base_dist, p_ndims) if p_ndims else p.base_dist + q = Independent(q.base_dist, q_ndims) if q_ndims else q.base_dist + kl = kl_divergence(p, q) + if shared_ndims: + kl = sum_rightmost(kl, shared_ndims) + return kl + + +@register_kl(Independent, MultivariateNormal) +def _kl_independent_mvn(p, q): + if isinstance(p.base_dist, Delta) and p.reinterpreted_batch_ndims == 1: + return -q.log_prob(p.base_dist.v) + + if isinstance(p.base_dist, Normal) and p.reinterpreted_batch_ndims == 1: + dim = q.event_shape[0] + p_cov = p.base_dist.scale**2 + q_precision = q.precision_matrix.diagonal(dim1=-2, dim2=-1) + return ( + 0.5 * (p_cov * q_precision).sum(-1) + - 0.5 * dim * (1 + math.log(2 * math.pi)) + - q.log_prob(p.base_dist.loc) + - p.base_dist.scale.log().sum(-1) + ) + + raise NotImplementedError + + +__all__ = [] diff --git a/pyro/source/pyro/distributions/lkj.py b/pyro/source/pyro/distributions/lkj.py new file mode 100644 index 0000000000000000000000000000000000000000..a7ba243d9230c433d486d49c4cfd1862c93921b0 --- /dev/null +++ b/pyro/source/pyro/distributions/lkj.py @@ -0,0 +1,62 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import warnings + +import torch + +from pyro.distributions.torch import LKJCholesky, TransformedDistribution +from pyro.distributions.transforms.cholesky import CorrMatrixCholeskyTransform + +from . import constraints + + +class LKJCorrCholesky(LKJCholesky): # DEPRECATED + def __init__(self, d, eta, validate_args=None): + warnings.warn( + "class LKJCorrCholesky(d, eta, validate_args=None) is deprecated " + "in favor of LKJCholesky(dim, concentration, validate_args=None).", + FutureWarning, + ) + super().__init__(d, concentration=eta, validate_args=validate_args) + + +class LKJ(TransformedDistribution): + r""" + LKJ distribution for correlation matrices. The distribution is controlled by ``concentration`` + parameter :math:`\eta` to make the probability of the correlation matrix :math:`M` propotional + to :math:`\det(M)^{\eta - 1}`. Because of that, when ``concentration == 1``, we have a + uniform distribution over correlation matrices. + + When ``concentration > 1``, the distribution favors samples with large large determinent. This + is useful when we know a priori that the underlying variables are not correlated. + When ``concentration < 1``, the distribution favors samples with small determinent. This is + useful when we know a priori that some underlying variables are correlated. + + :param int dimension: dimension of the matrices + :param ndarray concentration: concentration/shape parameter of the + distribution (often referred to as eta) + + **References** + + [1] `Generating random correlation matrices based on vines and extended onion method`, + Daniel Lewandowski, Dorota Kurowicka, Harry Joe + """ + + arg_constraints = {"concentration": constraints.positive} + support = constraints.corr_matrix + + def __init__(self, dim, concentration=1.0, validate_args=None): + base_dist = LKJCholesky(dim, concentration) + self.dim, self.concentration = base_dist.dim, base_dist.concentration + super(LKJ, self).__init__( + base_dist, CorrMatrixCholeskyTransform().inv, validate_args=validate_args + ) + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(LKJCholesky, _instance) + return super(LKJCholesky, self).expand(batch_shape, _instance=new) + + @property + def mean(self): + return torch.eye(self.dim).expand(self.batch_shape + (self.dim, self.dim)) diff --git a/pyro/source/pyro/distributions/log_normal_negative_binomial.py b/pyro/source/pyro/distributions/log_normal_negative_binomial.py new file mode 100644 index 0000000000000000000000000000000000000000..836d5db786c83cf8609b11a59e383eafc3680e08 --- /dev/null +++ b/pyro/source/pyro/distributions/log_normal_negative_binomial.py @@ -0,0 +1,153 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions import constraints +from torch.distributions.utils import broadcast_all, lazy_property + +from pyro.distributions.torch import NegativeBinomial +from pyro.distributions.torch_distribution import TorchDistribution +from pyro.distributions.util import broadcast_shape +from pyro.ops.special import get_quad_rule + + +class LogNormalNegativeBinomial(TorchDistribution): + r""" + A three-parameter generalization of the Negative Binomial distribution [1]. + It can be understood as a continuous mixture of Negative Binomial distributions + in which we inject Normally-distributed noise into the logits of the Negative + Binomial distribution: + + .. math:: + + \begin{eqnarray} + &\rm{LNNB}(y | \rm{total\_count}=\nu, \rm{logits}=\ell, \rm{multiplicative\_noise\_scale}=sigma) = \\ + &\int d\epsilon \mathcal{N}(\epsilon | 0, \sigma) + \rm{NB}(y | \rm{total\_count}=\nu, \rm{logits}=\ell + \epsilon) + \end{eqnarray} + + where :math:`y \ge 0` is a non-negative integer. Thus while a Negative Binomial distribution + can be formulated as a Poisson distribution with a Gamma-distributed rate, this distribution + adds an additional level of variability by also modulating the rate by Log Normally-distributed + multiplicative noise. + + This distribution has a mean given by + + .. math:: + \mathbb{E}[y] = \nu e^{\ell} = e^{\ell + \log \nu + \tfrac{1}{2}\sigma^2} + + and a variance given by + + .. math:: + \rm{Var}[y] = \mathbb{E}[y] + \left( e^{\sigma^2} (1 + 1/\nu) - 1 \right) \left( \mathbb{E}[y] \right)^2 + + Thus while a given mean and variance together uniquely characterize a Negative Binomial distribution, there is a + one-dimensional family of Log Normal Negative Binomial distributions with a given mean and variance. + + Note that in some applications it may be useful to parameterize the logits as + + .. math:: + \ell = \ell^\prime - \log \nu - \tfrac{1}{2}\sigma^2 + + so that the mean is given by :math:`\mathbb{E}[y] = e^{\ell^\prime}` and does not depend on :math:`\nu` + and :math:`\sigma`, which serve to determine the higher moments. + + References: + + [1] "Lognormal and Gamma Mixed Negative Binomial Regression," + Mingyuan Zhou, Lingbo Li, David Dunson, and Lawrence Carin. + + :param total_count: non-negative number of negative Bernoulli trials. The variance decreases + as `total_count` increases. + :type total_count: float or torch.Tensor + :param torch.Tensor logits: Event log-odds for probabilities of success for underlying + Negative Binomial distribution. + :param torch.Tensor multiplicative_noise_scale: Controls the level of the injected Normal logit noise. + :param int num_quad_points: Number of quadrature points used to compute the (approximate) `log_prob`. + Defaults to 8. + """ + + arg_constraints = { + "total_count": constraints.greater_than_eq(0), + "logits": constraints.real, + "multiplicative_noise_scale": constraints.positive, + } + support = constraints.nonnegative_integer + + def __init__( + self, + total_count, + logits, + multiplicative_noise_scale, + *, + num_quad_points=8, + validate_args=None, + ): + if num_quad_points < 1: + raise ValueError("num_quad_points must be positive.") + + total_count, logits, multiplicative_noise_scale = broadcast_all( + total_count, logits, multiplicative_noise_scale + ) + + self.quad_points, self.log_weights = get_quad_rule(num_quad_points, logits) + quad_logits = ( + logits.unsqueeze(-1) + + multiplicative_noise_scale.unsqueeze(-1) * self.quad_points + ) + self.nb_dist = NegativeBinomial( + total_count=total_count.unsqueeze(-1), logits=quad_logits + ) + + self.multiplicative_noise_scale = multiplicative_noise_scale + self.total_count = total_count + self.logits = logits + self.num_quad_points = num_quad_points + + batch_shape = broadcast_shape( + multiplicative_noise_scale.shape, self.nb_dist.batch_shape[:-1] + ) + event_shape = torch.Size() + + super().__init__(batch_shape, event_shape, validate_args) + + def log_prob(self, value): + nb_log_prob = self.nb_dist.log_prob(value.unsqueeze(-1)) + return torch.logsumexp(self.log_weights + nb_log_prob, axis=-1) + + def sample(self, sample_shape=torch.Size()): + raise NotImplementedError + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(type(self), _instance) + batch_shape = torch.Size(batch_shape) + total_count = self.total_count.expand(batch_shape) + logits = self.logits.expand(batch_shape) + multiplicative_noise_scale = self.multiplicative_noise_scale.expand(batch_shape) + LogNormalNegativeBinomial.__init__( + new, + total_count, + logits, + multiplicative_noise_scale, + num_quad_points=self.num_quad_points, + validate_args=False, + ) + new._validate_args = self._validate_args + return new + + @lazy_property + def mean(self): + return torch.exp( + self.logits + + self.total_count.log() + + 0.5 * self.multiplicative_noise_scale.pow(2.0) + ) + + @lazy_property + def variance(self): + kappa = ( + torch.exp(self.multiplicative_noise_scale.pow(2.0)) + * (1 + 1 / self.total_count) + - 1 + ) + return self.mean + kappa * self.mean.pow(2.0) diff --git a/pyro/source/pyro/distributions/logistic.py b/pyro/source/pyro/distributions/logistic.py new file mode 100644 index 0000000000000000000000000000000000000000..5fa72eaf4d60e37d0b6ec2f4d2145884dca98eca --- /dev/null +++ b/pyro/source/pyro/distributions/logistic.py @@ -0,0 +1,158 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import torch +from torch.distributions import constraints +from torch.distributions.utils import broadcast_all +from torch.nn.functional import logsigmoid + +from .torch_distribution import TorchDistribution + + +class Logistic(TorchDistribution): + r""" + Logistic distribution. + + This is a smooth distribution with symmetric asymptotically exponential + tails and a concave log density. For standard ``loc=0``, ``scale=1``, the + density is given by + + .. math:: + + p(x) = \frac {e^{-x}} {(1 + e^{-x})^2} + + Like the :class:`~pyro.distributions.Laplace` density, this density has the + heaviest possible tails (asymptotically) while still being log-convex. + Unlike the :class:`~pyro.distributions.Laplace` distribution, this + distribution is infinitely differentiable everywhere, and is thus suitable + for constructing Laplace approximations. + + :param loc: Location parameter. + :param scale: Scale parameter. + """ + + arg_constraints = {"loc": constraints.real, "scale": constraints.positive} + support = constraints.real + has_rsample = True + + def __init__(self, loc, scale, *, validate_args=None): + self.loc, self.scale = broadcast_all(loc, scale) + super().__init__(self.loc.shape, validate_args=validate_args) + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(Logistic, _instance) + batch_shape = torch.Size(batch_shape) + new.loc = self.loc.expand(batch_shape) + new.scale = self.scale.expand(batch_shape) + super(Logistic, new).__init__(batch_shape, validate_args=False) + new._validate_args = self._validate_args + return new + + def log_prob(self, value): + if self._validate_args: + self._validate_sample(value) + z = (value - self.loc) / self.scale + return logsigmoid(z) * 2 - z - self.scale.log() + + def rsample(self, sample_shape=torch.Size()): + shape = self._extended_shape(sample_shape) + u = self.loc.new_empty(shape).uniform_() + return self.icdf(u) + + def cdf(self, value): + if self._validate_args: + self._validate_sample(value) + z = (value - self.loc) / self.scale + return z.sigmoid() + + def icdf(self, value): + return self.loc + self.scale * value.logit() + + @property + def mean(self): + return self.loc + + @property + def variance(self): + return self.scale**2 * (math.pi**2 / 3) + + def entropy(self): + return self.scale.log() + 2 + + +class SkewLogistic(TorchDistribution): + r""" + Skewed generalization of the Logistic distribution (Type I in [1]). + + This is a smooth distribution with asymptotically exponential tails and a + concave log density. For standard ``loc=0``, ``scale=1``, ``asymmetry=α`` + the density is given by + + .. math:: + + p(x;\alpha) = \frac {\alpha e^{-x}} {(1 + e^{-x})^{\alpha+1}} + + Like the :class:`~pyro.distributions.AsymmetricLaplace` density, this + density has the heaviest possible tails (asymptotically) while still being + log-convex. Unlike the :class:`~pyro.distributions.AsymmetricLaplace` + distribution, this distribution is infinitely differentiable everywhere, + and is thus suitable for constructing Laplace approximations. + + **References** + + [1] Generalized logistic distribution + https://en.wikipedia.org/wiki/Generalized_logistic_distribution + + :param loc: Location parameter. + :param scale: Scale parameter. + :param asymmetry: Asymmetry parameter (positive). The distribution skews + right when ``asymmetry > 1`` and left when ``asymmetry < 1``. Defaults + to ``asymmetry = 1`` corresponding to the standard Logistic + distribution. + """ + + arg_constraints = { + "loc": constraints.real, + "scale": constraints.positive, + "asymmetry": constraints.positive, + } + support = constraints.real + has_rsample = True + + def __init__(self, loc, scale, asymmetry=1.0, *, validate_args=None): + self.loc, self.scale, self.asymmetry = broadcast_all(loc, scale, asymmetry) + super().__init__(self.loc.shape, validate_args=validate_args) + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(SkewLogistic, _instance) + batch_shape = torch.Size(batch_shape) + new.loc = self.loc.expand(batch_shape) + new.scale = self.scale.expand(batch_shape) + new.asymmetry = self.asymmetry.expand(batch_shape) + super(SkewLogistic, new).__init__(batch_shape, validate_args=False) + new._validate_args = self._validate_args + return new + + def log_prob(self, value): + if self._validate_args: + self._validate_sample(value) + z = (value - self.loc) / self.scale + a = self.asymmetry + return a.log() - z + logsigmoid(z) * (a + 1) - self.scale.log() + + def rsample(self, sample_shape=torch.Size()): + shape = self._extended_shape(sample_shape) + u = self.loc.new_empty(shape).uniform_() + return self.icdf(u) + + def cdf(self, value): + if self._validate_args: + self._validate_sample(value) + z = (value - self.loc) / self.scale + return z.sigmoid().pow(self.asymmetry) + + def icdf(self, value): + z = value.pow(self.asymmetry.reciprocal()).logit() + return self.loc + self.scale * z diff --git a/pyro/source/pyro/distributions/mixture.py b/pyro/source/pyro/distributions/mixture.py new file mode 100644 index 0000000000000000000000000000000000000000..9f9ed501f1f6a8dd4e9b1f12eb53ede911e4380a --- /dev/null +++ b/pyro/source/pyro/distributions/mixture.py @@ -0,0 +1,163 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions import constraints +from torch.distributions.utils import lazy_property + +from pyro.distributions.torch_distribution import TorchDistribution +from pyro.distributions.util import broadcast_shape + + +class MaskedConstraint(constraints.Constraint): + """ + Combines two constraints interleaved elementwise by a mask. + + :param torch.Tensor mask: boolean mask tensor (of dtype ``torch.bool``) + :param torch.constraints.Constraint constraint0: constraint that holds + wherever ``mask == 0`` + :param torch.constraints.Constraint constraint1: constraint that holds + wherever ``mask == 1`` + """ + + def __init__(self, mask, constraint0, constraint1): + self.mask = mask + self.constraint0 = constraint0 + self.constraint1 = constraint1 + + def check(self, value): + result = self.constraint0.check(value) + mask = ( + self.mask.expand(result.shape) + if result.shape != self.mask.shape + else self.mask + ) + result[mask] = self.constraint1.check(value)[mask] + return result + + +class MaskedMixture(TorchDistribution): + """ + A masked deterministic mixture of two distributions. + + This is useful when the mask is sampled from another distribution, + possibly correlated across the batch. Often the mask can be + marginalized out via enumeration. + + Example:: + + change_point = pyro.sample("change_point", + dist.Categorical(torch.ones(len(data) + 1)), + infer={'enumerate': 'parallel'}) + mask = torch.arange(len(data), dtype=torch.long) >= changepoint + with pyro.plate("data", len(data)): + pyro.sample("obs", MaskedMixture(mask, dist1, dist2), obs=data) + + :param torch.Tensor mask: A boolean tensor toggling between ``component0`` + and ``component1``. + :param pyro.distributions.TorchDistribution component0: a distribution + for batch elements ``mask == False``. + :param pyro.distributions.TorchDistribution component1: a distribution + for batch elements ``mask == True``. + """ + + arg_constraints = {} # nothing can be constrained + + def __init__(self, mask, component0, component1, validate_args=None): + if not torch.is_tensor(mask) or mask.dtype != torch.bool: + raise ValueError( + "Expected mask to be a BoolTensor but got {}".format(type(mask)) + ) + if component0.event_shape != component1.event_shape: + raise ValueError( + "components event_shape disagree: {} vs {}".format( + component0.event_shape, component1.event_shape + ) + ) + batch_shape = broadcast_shape( + mask.shape, component0.batch_shape, component1.batch_shape + ) + if mask.shape != batch_shape: + mask = mask.expand(batch_shape) + if component0.batch_shape != batch_shape: + component0 = component0.expand(batch_shape) + if component1.batch_shape != batch_shape: + component1 = component1.expand(batch_shape) + + self.mask = mask + self.component0 = component0 + self.component1 = component1 + super().__init__(batch_shape, component0.event_shape, validate_args) + + # We need to disable _validate_sample on each component since samples are only valid on the + # component from which they are drawn. Instead we perform validation using a MaskedConstraint. + self.component0._validate_args = False + self.component1._validate_args = False + + @property + def has_rsample(self): + return self.component0.has_rsample and self.component1.has_rsample + + @constraints.dependent_property + def support(self): + if self.component0.support is self.component1.support: + return self.component0.support + return MaskedConstraint( + self.mask, self.component0.support, self.component1.support + ) + + def expand(self, batch_shape): + try: + return super().expand(batch_shape) + except NotImplementedError: + mask = self.mask.expand(batch_shape) + component0 = self.component0.expand(batch_shape) + component1 = self.component1.expand(batch_shape) + return type(self)(mask, component0, component1) + + def sample(self, sample_shape=torch.Size()): + mask = self.mask.reshape(self.mask.shape + (1,) * self.event_dim) + mask = mask.expand(sample_shape + self.shape()) + result = torch.where( + mask, + self.component1.sample(sample_shape), + self.component0.sample(sample_shape), + ) + return result + + def rsample(self, sample_shape=torch.Size()): + mask = self.mask.reshape(self.mask.shape + (1,) * self.event_dim) + mask = mask.expand(sample_shape + self.shape()) + result = torch.where( + mask, + self.component1.rsample(sample_shape), + self.component0.rsample(sample_shape), + ) + return result + + def log_prob(self, value): + value_shape = broadcast_shape(value.shape, self.batch_shape + self.event_shape) + if value.shape != value_shape: + value = value.expand(value_shape) + if self._validate_args: + self._validate_sample(value) + mask_shape = value_shape[: len(value_shape) - len(self.event_shape)] + mask = self.mask + if mask.shape != mask_shape: + mask = mask.expand(mask_shape) + result = torch.where( + mask, self.component1.log_prob(value), self.component0.log_prob(value) + ) + return result + + @lazy_property + def mean(self): + result = self.component0.mean.clone() + result[self.mask] = self.component1.mean[self.mask] + return result + + @lazy_property + def variance(self): + result = self.component0.variance.clone() + result[self.mask] = self.component1.variance[self.mask] + return result diff --git a/pyro/source/pyro/distributions/multivariate_studentt.py b/pyro/source/pyro/distributions/multivariate_studentt.py new file mode 100644 index 0000000000000000000000000000000000000000..0ab6f1ad2fec66495d5397d7ab043e33a135c003 --- /dev/null +++ b/pyro/source/pyro/distributions/multivariate_studentt.py @@ -0,0 +1,134 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import torch +from torch.distributions import constraints +from torch.distributions.utils import lazy_property + +from pyro.distributions.torch import Chi2 +from pyro.distributions.torch_distribution import TorchDistribution +from pyro.distributions.util import broadcast_shape + + +class MultivariateStudentT(TorchDistribution): + """ + Creates a multivariate Student's t-distribution parameterized by degree of + freedom :attr:`df`, mean :attr:`loc` and scale :attr:`scale_tril`. + + :param ~torch.Tensor df: degrees of freedom + :param ~torch.Tensor loc: mean of the distribution + :param ~torch.Tensor scale_tril: scale of the distribution, which is + a lower triangular matrix with positive diagonal entries + """ + + arg_constraints = { + "df": constraints.positive, + "loc": constraints.real_vector, + "scale_tril": constraints.lower_cholesky, + } + support = constraints.real_vector + has_rsample = True + + def __init__(self, df, loc, scale_tril, validate_args=None): + dim = loc.size(-1) + assert scale_tril.shape[-2:] == (dim, dim) + if not isinstance(df, torch.Tensor): + df = loc.new_tensor(df) + batch_shape = torch.broadcast_shapes( + df.shape, loc.shape[:-1], scale_tril.shape[:-2] + ) + event_shape = torch.Size((dim,)) + self.df = df.expand(batch_shape) + self.loc = loc.expand(batch_shape + event_shape) + self._unbroadcasted_scale_tril = scale_tril + self._chi2 = Chi2(self.df) + super().__init__(batch_shape, event_shape, validate_args=validate_args) + + @lazy_property + def scale_tril(self): + return self._unbroadcasted_scale_tril.expand( + self._batch_shape + self._event_shape + self._event_shape + ) + + @lazy_property + def covariance_matrix(self): + # NB: this is not covariance of this distribution; + # the actual covariance is df / (df - 2) * covariance_matrix + return torch.matmul( + self._unbroadcasted_scale_tril, + self._unbroadcasted_scale_tril.transpose(-1, -2), + ).expand(self._batch_shape + self._event_shape + self._event_shape) + + @lazy_property + def precision_matrix(self): + identity = torch.eye( + self.loc.size(-1), device=self.loc.device, dtype=self.loc.dtype + ) + return torch.cholesky_solve(identity, self._unbroadcasted_scale_tril).expand( + self._batch_shape + self._event_shape + self._event_shape + ) + + @staticmethod + def infer_shapes(df, loc, scale_tril): + event_shape = loc[-1:] + batch_shape = broadcast_shape(df, loc[:-1], scale_tril[:-2]) + return batch_shape, event_shape + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(MultivariateStudentT, _instance) + batch_shape = torch.Size(batch_shape) + loc_shape = batch_shape + self.event_shape + scale_shape = loc_shape + self.event_shape + new.df = self.df.expand(batch_shape) + new.loc = self.loc.expand(loc_shape) + new._unbroadcasted_scale_tril = self._unbroadcasted_scale_tril + if "scale_tril" in self.__dict__: + new.scale_tril = self.scale_tril.expand(scale_shape) + if "covariance_matrix" in self.__dict__: + new.covariance_matrix = self.covariance_matrix.expand(scale_shape) + if "precision_matrix" in self.__dict__: + new.precision_matrix = self.precision_matrix.expand(scale_shape) + new._chi2 = self._chi2.expand(batch_shape) + super(MultivariateStudentT, new).__init__( + batch_shape, self.event_shape, validate_args=False + ) + new._validate_args = self._validate_args + return new + + def rsample(self, sample_shape=torch.Size()): + shape = self._extended_shape(sample_shape) + X = torch.empty(shape, dtype=self.df.dtype, device=self.df.device).normal_() + Z = self._chi2.rsample(sample_shape) + Y = X * torch.rsqrt(Z / self.df).unsqueeze(-1) + return self.loc + self.scale_tril.matmul(Y.unsqueeze(-1)).squeeze(-1) + + def log_prob(self, value): + if self._validate_args: + self._validate_sample(value) + n = self.loc.size(-1) + y = torch.linalg.solve_triangular( + self.scale_tril, (value - self.loc).unsqueeze(-1), upper=False + ).squeeze(-1) + Z = ( + self.scale_tril.diagonal(dim1=-2, dim2=-1).log().sum(-1) + + 0.5 * n * self.df.log() + + 0.5 * n * math.log(math.pi) + + torch.lgamma(0.5 * self.df) + - torch.lgamma(0.5 * (self.df + n)) + ) + return -0.5 * (self.df + n) * torch.log1p(y.pow(2).sum(-1) / self.df) - Z + + @property + def mean(self): + m = self.loc.clone() + m[self.df <= 1, :] = float("nan") + return m + + @property + def variance(self): + m = self.scale_tril.pow(2).sum(-1) * (self.df / (self.df - 2)).unsqueeze(-1) + m[(self.df <= 2) & (self.df > 1), :] = float("inf") + m[self.df <= 1, :] = float("nan") + return m diff --git a/pyro/source/pyro/distributions/nanmasked.py b/pyro/source/pyro/distributions/nanmasked.py new file mode 100644 index 0000000000000000000000000000000000000000..1166ec4c9c72a7b0188e4787a345814a20a7d1d4 --- /dev/null +++ b/pyro/source/pyro/distributions/nanmasked.py @@ -0,0 +1,99 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +from .torch import MultivariateNormal, Normal + + +class NanMaskedNormal(Normal): + """ + Wrapper around :class:`~pyro.distributions.Normal` to allow partially + observed data as specified by NAN elements in :meth:`log_prob`; the + ``log_prob`` of these elements will be zero. This is useful for likelihoods + with missing data. + + Example:: + + from math import nan + data = torch.tensor([0.5, 0.1, nan, 0.9]) + with pyro.plate("data", len(data)): + pyro.sample("obs", NanMaskedNormal(0, 1), obs=data) + """ + + def log_prob(self, value: torch.Tensor) -> torch.Tensor: + ok = value.isfinite() + if ok.all(): + return super().log_prob(value) + + # Broadcast all tensors. + value, ok, loc, scale = torch.broadcast_tensors(value, ok, self.loc, self.scale) + result = value.new_zeros(value.shape) + + # Evaluate ok elements. + if ok.any(): + marginal = Normal(loc[ok], scale[ok], validate_args=False) + result[ok] = marginal.log_prob(value[ok]) + return result + + +class NanMaskedMultivariateNormal(MultivariateNormal): + """ + Wrapper around :class:`~pyro.distributions.MultivariateNormal` to allow + partially observed data as specified by NAN elements in the argument to + :meth:`log_prob`. The ``log_prob`` of these events will marginalize over + the NAN elements. This is useful for likelihoods with missing data. + + Example:: + + from math import nan + data = torch.tensor([ + [0.1, 0.2, 3.4], + [0.5, 0.1, nan], + [0.6, nan, nan], + [nan, 0.5, nan], + [nan, nan, nan], + ]) + with pyro.plate("data", len(data)): + pyro.sample( + "obs", + NanMaskedMultivariateNormal(torch.zeros(3), torch.eye(3)), + obs=data, + ) + """ + + def log_prob(self, value: torch.Tensor) -> torch.Tensor: + ok = value.isfinite() + if ok.all(): + return super().log_prob(value) + + # Broadcast all tensors. This might waste some computation by eagerly + # broadcasting, but the optimal implementation is quite complex. + value, ok, loc = torch.broadcast_tensors(value, ok, self.loc) + cov = self.covariance_matrix.expand(loc.shape + loc.shape[-1:]) + + # Flatten. + result_shape = value.shape[:-1] + n = result_shape.numel() + p = value.shape[-1] + value = value.reshape(n, p) + ok = ok.reshape(n, p) + loc = loc.reshape(n, p) + cov = cov.reshape(n, p, p) + result = value.new_zeros(n) + + # Evaluate ok elements. + for pattern in sorted(set(map(tuple, ok.tolist()))): + if not any(pattern): + continue + # Marginalize out NAN elements. + col_mask = torch.tensor(pattern) + row_mask = (ok == col_mask).all(-1) + ok_value = value[row_mask][:, col_mask] + ok_loc = loc[row_mask][:, col_mask] + ok_cov = cov[row_mask][:, col_mask][:, :, col_mask] + marginal = MultivariateNormal(ok_loc, ok_cov, validate_args=False) + result[row_mask] = marginal.log_prob(ok_value) + + # Unflatten. + return result.reshape(result_shape) diff --git a/pyro/source/pyro/distributions/omt_mvn.py b/pyro/source/pyro/distributions/omt_mvn.py new file mode 100644 index 0000000000000000000000000000000000000000..1aa1bb17a32763689f1ef02f423846bdfd68f5d9 --- /dev/null +++ b/pyro/source/pyro/distributions/omt_mvn.py @@ -0,0 +1,90 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.autograd import Function +from torch.autograd.function import once_differentiable +from torch.distributions import constraints + +from pyro.distributions.torch import MultivariateNormal +from pyro.distributions.util import eye_like, sum_leftmost + + +class OMTMultivariateNormal(MultivariateNormal): + """Multivariate normal (Gaussian) distribution with OMT gradients w.r.t. both + parameters. Note the gradient computation w.r.t. the Cholesky factor has cost + O(D^3), although the resulting gradient variance is generally expected to be lower. + + A distribution over vectors in which all the elements have a joint Gaussian + density. + + :param torch.Tensor loc: Mean. + :param torch.Tensor scale_tril: Cholesky of Covariance matrix. + """ + + arg_constraints = { + "loc": constraints.real, + "scale_tril": constraints.lower_triangular, + } + + def __init__(self, loc, scale_tril): + if loc.dim() != 1: + raise ValueError("OMTMultivariateNormal loc must be 1-dimensional") + if scale_tril.dim() != 2: + raise ValueError("OMTMultivariateNormal scale_tril must be 2-dimensional") + super().__init__(loc, scale_tril=scale_tril) + + def rsample(self, sample_shape=torch.Size()): + return _OMTMVNSample.apply( + self.loc, self.scale_tril, sample_shape + self.loc.shape + ) + + +class _OMTMVNSample(Function): + @staticmethod + def forward(ctx, loc, scale_tril, shape): + white = torch.randn(shape, dtype=loc.dtype, device=loc.device) + z = torch.matmul(white, scale_tril.t()) + ctx.save_for_backward(z, white, scale_tril) + return loc + z + + @staticmethod + @once_differentiable + def backward(ctx, grad_output): + jitter = 1.0e-8 # do i really need this? + z, epsilon, L = ctx.saved_tensors + + dim = L.shape[0] + g = grad_output + loc_grad = sum_leftmost(grad_output, -1) + + identity = eye_like(g, dim) + R_inv = torch.linalg.solve_triangular(L.t(), identity, upper=True) + + z_ja = z.unsqueeze(-1) + g_R_inv = torch.matmul(g, R_inv).unsqueeze(-2) + epsilon_jb = epsilon.unsqueeze(-2) + g_ja = g.unsqueeze(-1) + diff_L_ab = 0.5 * sum_leftmost(g_ja * epsilon_jb + g_R_inv * z_ja, -2) + + Sigma_inv = torch.mm(R_inv, R_inv.t()) + V, D, _ = torch.linalg.svd(Sigma_inv + jitter) + D_outer = D.unsqueeze(-1) + D.unsqueeze(0) + + expand_tuple = tuple([-1] * (z.dim() - 1) + [dim, dim]) + z_tilde = identity * torch.matmul(z, V).unsqueeze(-1).expand(*expand_tuple) + g_tilde = identity * torch.matmul(g, V).unsqueeze(-1).expand(*expand_tuple) + + Y = sum_leftmost( + torch.matmul(z_tilde, torch.matmul(1.0 / D_outer, g_tilde)), -2 + ) + Y = torch.mm(V, torch.mm(Y, V.t())) + Y = Y + Y.t() + + Tr_xi_Y = torch.mm(torch.mm(Sigma_inv, Y), R_inv) - torch.mm( + Y, torch.mm(Sigma_inv, R_inv) + ) + diff_L_ab += 0.5 * Tr_xi_Y + L_grad = torch.tril(diff_L_ab) + + return loc_grad, L_grad, None diff --git a/pyro/source/pyro/distributions/one_one_matching.py b/pyro/source/pyro/distributions/one_one_matching.py new file mode 100644 index 0000000000000000000000000000000000000000..cb6e776b2885ff25e807d5293452db15452b346b --- /dev/null +++ b/pyro/source/pyro/distributions/one_one_matching.py @@ -0,0 +1,175 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import itertools +import logging +import warnings + +import torch +from torch.distributions import constraints +from torch.distributions.utils import lazy_property + +from .torch import Categorical +from .torch_distribution import TorchDistribution + +logger = logging.getLogger(__name__) + + +class OneOneMatchingConstraint(constraints.Constraint): + def __init__(self, num_nodes): + self.num_nodes = num_nodes + + def check(self, value): + if value.dim() == 0: + warnings.warn("Invalid event_shape: ()") + return torch.tensor(False) + batch_shape, event_shape = value.shape[:-1], value.shape[-1:] + if event_shape != (self.num_nodes,): + warnings.warn("Invalid event_shape: {}".format(event_shape)) + return torch.tensor(False) + if value.min() < 0 or value.max() >= self.num_nodes: + warnings.warn("Value out of bounds") + return torch.tensor(False) + counts = torch.zeros(batch_shape + (self.num_nodes,)) + counts.scatter_add_(-1, value, torch.ones(value.shape)) + if (counts != 1).any(): + warnings.warn("Matching is not binary") + return torch.tensor(False) + return torch.tensor(True) + + +class OneOneMatching(TorchDistribution): + r""" + Random perfect matching from ``N`` sources to ``N`` destinations where each + source matches exactly **one** destination and each destination matches + exactly **one** source. + + Samples are represented as long tensors of shape ``(N,)`` taking values in + ``{0,...,N-1}`` and satisfying the above one-one constraint. The log + probability of a sample ``v`` is the sum of edge logits, up to the log + partition function ``log Z``: + + .. math:: + + \log p(v) = \sum_s \text{logits}[s, v[s]] - \log Z + + Exact computations are expensive. To enable tractable approximations, set a + number of belief propagation iterations via the ``bp_iters`` argument. The + :meth:`log_partition_function` and :meth:`log_prob` methods use a Bethe + approximation [1,2,3,4]. + + **References:** + + [1] Michael Chertkov, Lukas Kroc, Massimo Vergassola (2008) + "Belief propagation and beyond for particle tracking" + https://arxiv.org/pdf/0806.1199.pdf + [2] Bert Huang, Tony Jebara (2009) + "Approximating the Permanent with Belief Propagation" + https://arxiv.org/pdf/0908.1769.pdf + [3] Pascal O. Vontobel (2012) + "The Bethe Permanent of a Non-Negative Matrix" + https://arxiv.org/pdf/1107.4196.pdf + [4] M Chertkov, AB Yedidia (2013) + "Approximating the permanent with fractional belief propagation" + http://www.jmlr.org/papers/volume14/chertkov13a/chertkov13a.pdf + + :param Tensor logits: An ``(N, N)``-shaped tensor of edge logits. + :param int bp_iters: Optional number of belief propagation iterations. If + unspecified or ``None`` expensive exact algorithms will be used. + """ + + arg_constraints = {"logits": constraints.real} + has_enumerate_support = True + + def __init__(self, logits, *, bp_iters=None, validate_args=None): + if logits.dim() != 2: + raise NotImplementedError("OneOneMatching does not support batching") + assert bp_iters is None or isinstance(bp_iters, int) and bp_iters > 0 + self.num_nodes, num_nodes = logits.shape + assert num_nodes == self.num_nodes + self.logits = logits + batch_shape = () + event_shape = (self.num_nodes,) + super().__init__(batch_shape, event_shape, validate_args=validate_args) + self.bp_iters = bp_iters + + @constraints.dependent_property + def support(self): + return OneOneMatchingConstraint(self.num_nodes) + + @lazy_property + def log_partition_function(self): + if self.bp_iters is None: + # Brute force. + d = self.enumerate_support() + s = torch.arange(d.size(-1), dtype=d.dtype, device=d.device) + return self.logits[s, d].sum(-1).logsumexp(-1) + + # Approximate mean field beliefs b via Sinkhorn iteration. + # We find that Sinkhorn iteration is more robust and faster than the + # optimal belief propagation updates suggested in [1-4]. + finfo = torch.finfo(self.logits.dtype) + # Note gradients are more accurate when shift is not detached. + shift = self.logits.max(1, True).values + shift.data.clamp_(min=finfo.min, max=finfo.max) + logits = self.logits - shift + d = logits.logsumexp(0) + for _ in range(self.bp_iters): + s = (logits - d).logsumexp(-1, True) + d = (logits - s).logsumexp(0) + b = (logits - (d + s)).exp() + + def log(x): + return x.clamp(min=finfo.tiny).log() + + # Evaluate the Bethe free energy. + b_ = (1 - b).clamp(min=0) + logits = logits.clamp(min=-1 / finfo.eps) + free_energy = (b * (log(b) - logits)).sum() - (b_ * log(b_)).sum() + log_Z = shift.sum() - free_energy + assert torch.isfinite(log_Z) + return log_Z + + def log_prob(self, value): + if self._validate_args: + self._validate_sample(value) + d = value + s = torch.arange(d.size(-1), dtype=d.dtype, device=d.device) + return self.logits[s, d].sum(-1) - self.log_partition_function + + def enumerate_support(self, expand=True): + return torch.tensor(list(itertools.permutations(range(self.num_nodes)))) + + def sample(self, sample_shape=torch.Size()): + if self.bp_iters is None: + # Brute force. + d = self.enumerate_support() + s = torch.arange(d.size(-1), dtype=d.dtype, device=d.device) + logits = self.logits[s, d].sum(-1) + sample = Categorical(logits=logits).sample(sample_shape) + return d[sample] + + if sample_shape: + return torch.stack( + [self.sample(sample_shape[1:]) for _ in range(sample_shape[0])] + ) + # TODO initialize via .mode(), then perform a small number of MCMC steps + # https://www.cc.gatech.edu/~vigoda/Permanent.pdf + # https://papers.nips.cc/paper/2012/file/4c27cea8526af8cfee3be5e183ac9605-Paper.pdf + raise NotImplementedError + + def mode(self): + """ + Computes a maximum probability matching. + """ + return maximum_weight_matching(self.logits) + + +@torch.no_grad() +def maximum_weight_matching(logits): + from scipy.optimize import linear_sum_assignment + + cost = -logits.cpu() + value = linear_sum_assignment(cost.numpy())[1] + value = torch.tensor(value, dtype=torch.long, device=logits.device) + return value diff --git a/pyro/source/pyro/distributions/one_two_matching.py b/pyro/source/pyro/distributions/one_two_matching.py new file mode 100644 index 0000000000000000000000000000000000000000..c1ff43247b6e8aa2738c26bc66b471098c17e639 --- /dev/null +++ b/pyro/source/pyro/distributions/one_two_matching.py @@ -0,0 +1,212 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import logging +import math +import warnings + +import torch +from torch.distributions import constraints +from torch.distributions.utils import lazy_property + +from .torch import Categorical +from .torch_distribution import TorchDistribution + +logger = logging.getLogger(__name__) + + +class OneTwoMatchingConstraint(constraints.Constraint): + def __init__(self, num_destins): + self.num_destins = num_destins + self.num_sources = 2 * num_destins + + def check(self, value): + if value.dim() == 0: + warnings.warn("Invalid event_shape: ()") + return torch.tensor(False) + batch_shape, event_shape = value.shape[:-1], value.shape[-1:] + if event_shape != (self.num_sources,): + warnings.warn("Invalid event_shape: {}".format(event_shape)) + return torch.tensor(False) + if value.min() < 0 or value.max() >= self.num_destins: + warnings.warn("Value out of bounds") + return torch.tensor(False) + counts = torch.zeros(batch_shape + (self.num_destins,)) + counts.scatter_add_(-1, value, torch.ones(value.shape)) + if (counts != 2).any(): + warnings.warn("Matching is not binary") + return torch.tensor(False) + return torch.tensor(True) + + +class OneTwoMatching(TorchDistribution): + r""" + Random matching from ``2*N`` sources to ``N`` destinations where each + source matches exactly **one** destination and each destination matches + exactly **two** sources. + + Samples are represented as long tensors of shape ``(2*N,)`` taking + values in ``{0,...,N-1}`` and satisfying the above one-two constraint. + The log probability of a sample ``v`` is the sum of edge logits, up to + the log partition function ``log Z``: + + .. math:: + + \log p(v) = \sum_s \text{logits}[s, v[s]] - \log Z + + Exact computations are expensive. To enable tractable approximations, set a + number of belief propagation iterations via the ``bp_iters`` argument. The + :meth:`log_partition_function` and :meth:`log_prob` methods use a Bethe + approximation [1,2,3,4]. + + **References:** + + [1] Michael Chertkov, Lukas Kroc, Massimo Vergassola (2008) + "Belief propagation and beyond for particle tracking" + https://arxiv.org/pdf/0806.1199.pdf + [2] Bert Huang, Tony Jebara (2009) + "Approximating the Permanent with Belief Propagation" + https://arxiv.org/pdf/0908.1769.pdf + [3] Pascal O. Vontobel (2012) + "The Bethe Permanent of a Non-Negative Matrix" + https://arxiv.org/pdf/1107.4196.pdf + [4] M Chertkov, AB Yedidia (2013) + "Approximating the permanent with fractional belief propagation" + http://www.jmlr.org/papers/volume14/chertkov13a/chertkov13a.pdf + + :param Tensor logits: An ``(2 * N, N)``-shaped tensor of edge logits. + :param int bp_iters: Optional number of belief propagation iterations. If + unspecified or ``None`` expensive exact algorithms will be used. + """ + + arg_constraints = {"logits": constraints.real} + has_enumerate_support = True + + def __init__(self, logits, *, bp_iters=None, validate_args=None): + if logits.dim() != 2: + raise NotImplementedError("OneTwoMatching does not support batching") + assert bp_iters is None or isinstance(bp_iters, int) and bp_iters > 0 + self.num_sources, self.num_destins = logits.shape + assert self.num_sources == 2 * self.num_destins + self.logits = logits + batch_shape = () + event_shape = (self.num_sources,) + super().__init__(batch_shape, event_shape, validate_args=validate_args) + self.bp_iters = bp_iters + + @constraints.dependent_property + def support(self): + return OneTwoMatchingConstraint(self.num_destins) + + @lazy_property + def log_partition_function(self): + if self.bp_iters is None: + # Brute force. + d = self.enumerate_support() + s = torch.arange(d.size(-1), dtype=d.dtype, device=d.device) + return self.logits[s, d].sum(-1).logsumexp(-1) + + # Approximate mean field beliefs b via Sinkhorn iteration. + # We find that Sinkhorn iteration is more robust and faster than the + # optimal belief propagation updates suggested in [1-4]. + finfo = torch.finfo(self.logits.dtype) + # Note gradients are more accurate when shift is not detached. + shift = self.logits.max(1, True).values + shift.data.clamp_(min=finfo.min, max=finfo.max) + logits = self.logits - shift + d = logits.logsumexp(0) - math.log(2) + for _ in range(self.bp_iters): + s = (logits - d).logsumexp(-1, True) + d = (logits - s).logsumexp(0) - math.log(2) + b = (logits - (d + s)).exp() + + def log(x): + return x.clamp(min=finfo.tiny).log() + + # Evaluate the Bethe free energy, adapting [4] Eqn 4 to one-two + # matchings. + b_ = (1 - b).clamp(min=0) + internal_energy = -(b * logits.clamp(min=-1 / finfo.eps)).sum() + # Let h be the entropy of matching each destin to one source. + z = b / 2 + h = -(z * log(z)).sum(0) + # Then h2 is the entropy of the distribution mapping each destin to an + # unordered pair of sources, equal to the log of the binomial + # coefficient: perplexity * (perplexity - 1) / 2. + h2 = h + log(h.expm1()) - math.log(2) + free_energy = internal_energy - h2.sum() - (b_ * log(b_)).sum() + log_Z = shift.sum() - free_energy + assert torch.isfinite(log_Z) + return log_Z + + def log_prob(self, value): + if self._validate_args: + self._validate_sample(value) + d = value + s = torch.arange(d.size(-1), dtype=d.dtype, device=d.device) + return self.logits[s, d].sum(-1) - self.log_partition_function + + def enumerate_support(self, expand=True): + return enumerate_one_two_matchings(self.num_destins) + + def sample(self, sample_shape=torch.Size()): + if self.bp_iters is None: + # Brute force. + d = self.enumerate_support() + s = torch.arange(d.size(-1), dtype=d.dtype, device=d.device) + logits = self.logits[s, d].sum(-1) + sample = Categorical(logits=logits).sample(sample_shape) + return d[sample] + + if sample_shape: + return torch.stack( + [self.sample(sample_shape[1:]) for _ in range(sample_shape[0])] + ) + # TODO initialize via .mode(), then perform a small number of MCMC steps + # https://www.cc.gatech.edu/~vigoda/Permanent.pdf + # https://papers.nips.cc/paper/2012/file/4c27cea8526af8cfee3be5e183ac9605-Paper.pdf + raise NotImplementedError + + def mode(self): + """ + Computes a maximum probability matching. + """ + return maximum_weight_matching(self.logits) + + +def enumerate_one_two_matchings(num_destins): + if num_destins == 1: + return torch.tensor([[0, 0]]) + + num_sources = num_destins * 2 + subproblem = enumerate_one_two_matchings(num_destins - 1) + subsize = subproblem.size(0) + result = torch.empty( + subsize * num_sources * (num_sources - 1) // 2, num_sources, dtype=torch.long + ) + + # Iterate over pairs of sources s0 function(concentration, value) + + def __init__(self, concentration, *, validate_args=None): + assert concentration.dim() >= 1 + self.concentration = concentration + batch_shape = concentration.shape[:-1] + event_shape = concentration.shape[-1:] + super().__init__(batch_shape, event_shape, validate_args=validate_args) + + @staticmethod + def infer_shapes(concentration): + batch_shape = concentration[:-1] + event_shape = concentration[-1:] + return batch_shape, event_shape + + def expand(self, batch_shape, _instance=None): + batch_shape = torch.Size(batch_shape) + new = self._get_checked_instance(ProjectedNormal, _instance) + new.concentration = self.concentration.expand(batch_shape + (-1,)) + super(ProjectedNormal, new).__init__( + batch_shape, self.event_shape, validate_args=False + ) + new._validate_args = self.__dict__.get("_validate_args") + return new + + @property + def mean(self): + """ + Note this is the mean in the sense of a centroid in the submanifold + that minimizes expected squared geodesic distance. + """ + return safe_normalize(self.concentration) + + @property + def mode(self): + return safe_normalize(self.concentration) + + def rsample(self, sample_shape=torch.Size()): + shape = self._extended_shape(sample_shape) + x = self.concentration.new_empty(shape).normal_() + x = x + self.concentration + x = safe_normalize(x) + return x + + def log_prob(self, value): + if self._validate_args: + event_shape = value.shape[-1:] + if event_shape != self.event_shape: + raise ValueError( + f"Expected event shape {self.event_shape}, " + f"but got {event_shape}" + ) + self._validate_sample(value) + dim = int(self.concentration.size(-1)) + try: + impl = self._log_prob_impls[dim] + except KeyError: + msg = f"ProjectedNormal.log_prob() is not implemented for dim = {dim}." + if value.requires_grad: # For latent variables but not observations. + msg += " Consider using poutine.reparam with ProjectedNormalReparam." + raise NotImplementedError(msg) + return impl(self.concentration, value) + + @classmethod + def _register_log_prob(cls, dim, fn=None): + if fn is None: + return lambda fn: cls._register_log_prob(dim, fn) + cls._log_prob_impls[dim] = fn + return fn + + +def _dot(x, y): + return (x[..., None, :] @ y[..., None])[..., 0, 0] + + +def _safe_log(x): + return x.clamp(min=torch.finfo(x.dtype).eps).log() + + +@ProjectedNormal._register_log_prob(dim=2) +def _log_prob_2(concentration, value): + # We integrate along a ray, factorizing the integrand as a product of: + # a truncated normal distribution over coordinate t parallel to the ray, and + # a univariate normal distribution over coordinate r perpendicular to the ray. + t = _dot(concentration, value) + t2 = t.square() + r2 = _dot(concentration, concentration) - t2 + perp_part = r2.mul(-0.5) - 0.5 * math.log(2 * math.pi) + + # This is the log of a definite integral, computed by mathematica: + # Integrate[x/(E^((x-t)^2/2) Sqrt[2 Pi]), {x, 0, Infinity}] + # = (t + Sqrt[2/Pi]/E^(t^2/2) + t Erf[t/Sqrt[2]])/2 + # = (Sqrt[2/Pi]/E^(t^2/2) + t (1 + Erf[t/Sqrt[2]]))/2 + # = (Sqrt[2/Pi]/E^(t^2/2) + t Erfc[-t/Sqrt[2]])/2 + para_part = _safe_log( + (t2.mul(-0.5).exp().mul((2 / math.pi) ** 0.5) + t * (t * -(0.5**0.5)).erfc()) + / 2 + ) + + return para_part + perp_part + + +@ProjectedNormal._register_log_prob(dim=3) +def _log_prob_3(concentration, value): + # We integrate along a ray, factorizing the integrand as a product of: + # a truncated normal distribution over coordinate t parallel to the ray, and + # a bivariate normal distribution over coordinate r perpendicular to the ray. + t = _dot(concentration, value) + t2 = t.square() + r2 = _dot(concentration, concentration) - t2 + perp_part = r2.mul(-0.5) - math.log(2 * math.pi) + + # This is the log of a definite integral, computed by mathematica: + # Integrate[x^2/(E^((x-t)^2/2) Sqrt[2 Pi]), {x, 0, Infinity}] + # = t/(E^(t^2/2) Sqrt[2 Pi]) + ((1 + t^2) (1 + Erf[t/Sqrt[2]]))/2 + # = t/(E^(t^2/2) Sqrt[2 Pi]) + ((1 + t^2) Erfc[-t/Sqrt[2]])/2 + para_part = _safe_log( + t * t2.mul(-0.5).exp() / (2 * math.pi) ** 0.5 + + (1 + t2) * (t * -(0.5**0.5)).erfc() / 2 + ) + + return para_part + perp_part + + +@ProjectedNormal._register_log_prob(dim=4) +def _log_prob_4(concentration, value): + # We integrate along a ray, factorizing the integrand as a product of: + # a truncated normal distribution over coordinate t parallel to the ray, and + # a bivariate normal distribution over coordinate r perpendicular to the ray. + t = _dot(concentration, value) + t2 = t.square() + r2 = _dot(concentration, concentration) - t2 + perp_part = r2.mul(-0.5) - 1.5 * math.log(2 * math.pi) + + # This is the log of a definite integral, computed by mathematica: + # Integrate[x^3/(E^((x-t)^2/2) Sqrt[2 Pi]), {x, 0, Infinity}] + # = (2 + t^2)/(E^(t^2/2) Sqrt[2 Pi]) + (t (3 + t^2) (1 + Erf[t/Sqrt[2]]))/2 + # = (2 + t^2)/(E^(t^2/2) Sqrt[2 Pi]) + (t (3 + t^2) Erfc[-t/Sqrt[2]])/2 + para_part = _safe_log( + (2 + t2) * t2.mul(-0.5).exp() / (2 * math.pi) ** 0.5 + + t * (3 + t2) * (t * -(0.5**0.5)).erfc() / 2 + ) + + return para_part + perp_part diff --git a/pyro/source/pyro/distributions/rejector.py b/pyro/source/pyro/distributions/rejector.py new file mode 100644 index 0000000000000000000000000000000000000000..4a7928ef7727f33a850fef57bd46e7c5648686f6 --- /dev/null +++ b/pyro/source/pyro/distributions/rejector.py @@ -0,0 +1,73 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +from pyro.distributions.score_parts import ScoreParts +from pyro.distributions.torch_distribution import TorchDistribution + + +class Rejector(TorchDistribution): + """ + Rejection sampled distribution given an acceptance rate function. + + :param Distribution propose: A proposal distribution that samples batched + proposals via ``propose()``. :meth:`rsample` supports a ``sample_shape`` + arg only if ``propose()`` supports a ``sample_shape`` arg. + :param callable log_prob_accept: A callable that inputs a batch of + proposals and returns a batch of log acceptance probabilities. + :param log_scale: Total log probability of acceptance. + """ + + arg_constraints = {} + has_rsample = True + + def __init__( + self, propose, log_prob_accept, log_scale, *, batch_shape=None, event_shape=None + ): + self.propose = propose + self.log_prob_accept = log_prob_accept + self._log_scale = log_scale + if batch_shape is None: + batch_shape = propose.batch_shape + if event_shape is None: + event_shape = propose.event_shape + super().__init__(batch_shape, event_shape) + + # These LRU(1) caches allow work to be shared across different method calls. + self._log_prob_accept_cache = None, None + self._propose_log_prob_cache = None, None + + def _log_prob_accept(self, x): + if x is not self._log_prob_accept_cache[0]: + self._log_prob_accept_cache = x, self.log_prob_accept(x) - self._log_scale + return self._log_prob_accept_cache[1] + + def _propose_log_prob(self, x): + if x is not self._propose_log_prob_cache[0]: + self._propose_log_prob_cache = x, self.propose.log_prob(x) + return self._propose_log_prob_cache[1] + + def rsample(self, sample_shape=torch.Size()): + # Implements parallel batched accept-reject sampling. + x = self.propose(sample_shape) if sample_shape else self.propose() + log_prob_accept = self.log_prob_accept(x) + probs = torch.exp(log_prob_accept).clamp_(0.0, 1.0) + done = torch.bernoulli(probs).bool() + while not done.all(): + proposed_x = self.propose(sample_shape) if sample_shape else self.propose() + log_prob_accept = self.log_prob_accept(proposed_x) + prob_accept = torch.exp(log_prob_accept).clamp_(0.0, 1.0) + accept = torch.bernoulli(prob_accept).bool() & ~done + if accept.any(): + x[accept] = proposed_x[accept] + done |= accept + return x + + def log_prob(self, x): + return self._propose_log_prob(x) + self._log_prob_accept(x) + + def score_parts(self, x): + score_function = self._log_prob_accept(x) + log_prob = self.log_prob(x) + return ScoreParts(log_prob, score_function, log_prob) diff --git a/pyro/source/pyro/distributions/relaxed_straight_through.py b/pyro/source/pyro/distributions/relaxed_straight_through.py new file mode 100644 index 0000000000000000000000000000000000000000..6fdaa186f6c965f25cba480c2014baa777774dff --- /dev/null +++ b/pyro/source/pyro/distributions/relaxed_straight_through.py @@ -0,0 +1,103 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions.utils import clamp_probs + +from pyro.distributions.torch import RelaxedBernoulli, RelaxedOneHotCategorical +from pyro.distributions.util import copy_docs_from + + +@copy_docs_from(RelaxedOneHotCategorical) +class RelaxedOneHotCategoricalStraightThrough(RelaxedOneHotCategorical): + """ + An implementation of + :class:`~torch.distributions.relaxed_categorical.RelaxedOneHotCategorical` + with a straight-through gradient estimator. + + This distribution has the following properties: + + - The samples returned by the :meth:`rsample` method are discrete/quantized. + - The :meth:`log_prob` method returns the log probability of the + relaxed/unquantized sample using the GumbelSoftmax distribution. + - In the backward pass the gradient of the sample with respect to the + parameters of the distribution uses the relaxed/unquantized sample. + + References: + + [1] The Concrete Distribution: A Continuous Relaxation of Discrete Random Variables, + Chris J. Maddison, Andriy Mnih, Yee Whye Teh + [2] Categorical Reparameterization with Gumbel-Softmax, + Eric Jang, Shixiang Gu, Ben Poole + """ + + def rsample(self, sample_shape=torch.Size()): + soft_sample = super().rsample(sample_shape) + soft_sample = clamp_probs(soft_sample) + hard_sample = QuantizeCategorical.apply(soft_sample) + return hard_sample + + def log_prob(self, value): + value = getattr(value, "_unquantize", value) + return super().log_prob(value) + + +class QuantizeCategorical(torch.autograd.Function): + @staticmethod + def forward(ctx, soft_value): + argmax = soft_value.max(-1)[1] + hard_value = torch.zeros_like(soft_value) + hard_value._unquantize = soft_value + if argmax.dim() < hard_value.dim(): + argmax = argmax.unsqueeze(-1) + return hard_value.scatter_(-1, argmax, 1) + + @staticmethod + def backward(ctx, grad): + return grad + + +@copy_docs_from(RelaxedBernoulli) +class RelaxedBernoulliStraightThrough(RelaxedBernoulli): + """ + An implementation of + :class:`~torch.distributions.relaxed_bernoulli.RelaxedBernoulli` + with a straight-through gradient estimator. + + This distribution has the following properties: + + - The samples returned by the :meth:`rsample` method are discrete/quantized. + - The :meth:`log_prob` method returns the log probability of the + relaxed/unquantized sample using the GumbelSoftmax distribution. + - In the backward pass the gradient of the sample with respect to the + parameters of the distribution uses the relaxed/unquantized sample. + + References: + + [1] The Concrete Distribution: A Continuous Relaxation of Discrete Random Variables, + Chris J. Maddison, Andriy Mnih, Yee Whye Teh + [2] Categorical Reparameterization with Gumbel-Softmax, + Eric Jang, Shixiang Gu, Ben Poole + """ + + def rsample(self, sample_shape=torch.Size()): + soft_sample = super().rsample(sample_shape) + soft_sample = clamp_probs(soft_sample) + hard_sample = QuantizeBernoulli.apply(soft_sample) + return hard_sample + + def log_prob(self, value): + value = getattr(value, "_unquantize", value) + return super().log_prob(value) + + +class QuantizeBernoulli(torch.autograd.Function): + @staticmethod + def forward(ctx, soft_value): + hard_value = soft_value.round() + hard_value._unquantize = soft_value + return hard_value + + @staticmethod + def backward(ctx, grad): + return grad diff --git a/pyro/source/pyro/distributions/score_parts.py b/pyro/source/pyro/distributions/score_parts.py new file mode 100644 index 0000000000000000000000000000000000000000..7816c45012a65cedfd7aa313c320cd3f217a8e91 --- /dev/null +++ b/pyro/source/pyro/distributions/score_parts.py @@ -0,0 +1,38 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from typing import NamedTuple, Optional, Union + +import torch + +from pyro.distributions.util import scale_and_mask + + +class ScoreParts(NamedTuple): + """ + This data structure stores terms used in stochastic gradient estimators that + combine the pathwise estimator and the score function estimator. + """ + + log_prob: torch.Tensor + score_function: torch.Tensor + entropy_term: torch.Tensor + + def scale_and_mask( + self, + scale: Union[float, torch.Tensor] = 1.0, + mask: Optional[torch.BoolTensor] = None, + ) -> "ScoreParts": + """ + Scale and mask appropriate terms of a gradient estimator by a data multiplicity factor. + Note that the `score_function` term should not be scaled or masked. + + :param scale: a positive scale + :type scale: torch.Tensor or number + :param mask: an optional masking tensor + :type mask: torch.BoolTensor or None + """ + log_prob = scale_and_mask(self.log_prob, scale, mask) + score_function = self.score_function # not scaled + entropy_term = scale_and_mask(self.entropy_term, scale, mask) + return ScoreParts(log_prob, score_function, entropy_term) diff --git a/pyro/source/pyro/distributions/sine_bivariate_von_mises.py b/pyro/source/pyro/distributions/sine_bivariate_von_mises.py new file mode 100644 index 0000000000000000000000000000000000000000..e3723d6ae630450f099eff80527bd3b2db169b93 --- /dev/null +++ b/pyro/source/pyro/distributions/sine_bivariate_von_mises.py @@ -0,0 +1,330 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import math +import warnings +from math import pi + +import torch +from torch.distributions import VonMises +from torch.distributions.utils import broadcast_all, lazy_property + +from pyro.distributions import constraints +from pyro.distributions.torch_distribution import TorchDistribution +from pyro.distributions.util import broadcast_shape +from pyro.ops.special import log_I1 + + +class SineBivariateVonMises(TorchDistribution): + r"""Unimodal distribution of two dependent angles on the 2-torus (S^1 ⨂ S^1) given by + + .. math:: + + C^{-1}\exp(\kappa_1\cos(x-\mu_1) + \kappa_2\cos(x_2 -\mu_2) + \rho\sin(x_1 - \mu_1)\sin(x_2 - \mu_2)) + + and + + .. math:: + + C = (2\pi)^2 \sum_{i=0} {2i \choose i} + \left(\frac{\rho^2}{4\kappa_1\kappa_2}\right)^i I_i(\kappa_1)I_i(\kappa_2), + + where I_i(\cdot) is the modified bessel function of first kind, mu's are the locations of the distribution, + kappa's are the concentration and rho gives the correlation between angles x_1 and x_2. + + This distribution is a submodel of the Bivariate von Mises distribution, called the Sine Distribution [2] in + directional statistics. + + This distribution is helpful for modeling coupled angles such as torsion angles in peptide chains. + To infer parameters, use :class:`~pyro.infer.NUTS` or :class:`~pyro.infer.HMC` with priors that + avoid parameterizations where the distribution becomes bimodal; see note below. + + .. note:: Sample efficiency drops as + + .. math:: + + \frac{\rho^2}{\kappa_1\kappa_2} \rightarrow 1 + + because the distribution becomes increasingly bimodal. To avoid inefficient sampling use the + `weighted_correlation` parameter with a skew away from one (e.g., + `TransformedDistribution(Beta(5,5), AffineTransform(loc=-1, scale=2))`). The `weighted_correlation` + should be in [-1,1]. + + .. note:: The correlation and weighted_correlation params are mutually exclusive. + + .. note:: In the context of :class:`~pyro.infer.SVI`, this distribution can be used as a likelihood but not for + latent variables. + + .. note:: Normalization remains accurate up to concentrations of 10,000. + + ** References: ** + 1. Probabilistic model for two dependent circular variables Singh, H., Hnizdo, V., and Demchuck, E. (2002) + 2. Protein Bioinformatics and Mixtures of Bivariate von Mises Distributions for Angular Data, + Mardia, K. V, Taylor, T. C., and Subramaniam, G. (2007) + + :param torch.Tensor phi_loc: location of first angle + :param torch.Tensor psi_loc: location of second angle + :param torch.Tensor phi_concentration: concentration of first angle + :param torch.Tensor psi_concentration: concentration of second angle + :param torch.Tensor correlation: correlation between the two angles + :param torch.Tensor weighted_correlation: set correlation to weighted_corr * sqrt(phi_conc*psi_conc) + to avoid bimodality (see note). The `weighted_correlation` should be in [-1,1]. + """ + + arg_constraints = { + "phi_loc": constraints.real, + "psi_loc": constraints.real, + "phi_concentration": constraints.positive, + "psi_concentration": constraints.positive, + "correlation": constraints.real, + } + support = constraints.independent(constraints.real, 1) + max_sample_iter = 1000 + + def __init__( + self, + phi_loc, + psi_loc, + phi_concentration, + psi_concentration, + correlation=None, + weighted_correlation=None, + validate_args=None, + ): + assert (correlation is None) != (weighted_correlation is None) + + if weighted_correlation is not None: + sqrt_ = ( + torch.sqrt if isinstance(phi_concentration, torch.Tensor) else math.sqrt + ) + correlation = weighted_correlation * sqrt_( + phi_concentration * psi_concentration + ) + + ( + phi_loc, + psi_loc, + phi_concentration, + psi_concentration, + correlation, + ) = broadcast_all( + phi_loc, psi_loc, phi_concentration, psi_concentration, correlation + ) + + max_conc = torch.maximum( + torch.max(phi_concentration), torch.max(psi_concentration) + ) + assrt_hstr = ( + "Normalization of SineBiviateVonMises is inaccurate for" + f"current max concentration ({max_conc} > 10,000)." + ) + assert max_conc <= torch.tensor(10_000.0), assrt_hstr + + self.phi_loc = phi_loc + self.psi_loc = psi_loc + self.phi_concentration = phi_concentration + self.psi_concentration = psi_concentration + self.correlation = correlation + event_shape = torch.Size([2]) + batch_shape = phi_loc.shape + + super().__init__(batch_shape, event_shape, validate_args) + + if self._validate_args and torch.any( + phi_concentration * psi_concentration <= correlation**2 + ): + warnings.warn( + f"{self.__class__.__name__} bimodal due to concentration-correlation relation, " + f"sampling will likely fail.", + UserWarning, + ) + + @lazy_property + def norm_const(self): + corr = self.correlation.view(1, -1) + conc = torch.stack( + (self.phi_concentration, self.psi_concentration), dim=-1 + ).view(-1, 2) + m = torch.arange(50, device=self.phi_loc.device).view(-1, 1) + tiny = torch.finfo(corr.dtype).tiny + fs = ( + SineBivariateVonMises._lbinoms(m.max() + 1).view(-1, 1) + + m * torch.log((corr**2).clamp(min=tiny)) + - m * torch.log(4 * torch.prod(conc, dim=-1)) + ) + num_I1terms = torch.maximum( + torch.tensor(501), + torch.max(self.phi_concentration) + torch.max(self.psi_concentration), + ).int() + + fs += log_I1(m.max(), conc, num_I1terms).sum(-1) + + mfs = fs.max() + norm_const = 2 * torch.log(torch.tensor(2 * pi)) + mfs + (fs - mfs).logsumexp(0) + return norm_const.reshape(self.phi_loc.shape) + + def log_prob(self, value): + if self._validate_args: + self._validate_sample(value) + indv = self.phi_concentration * torch.cos( + value[..., 0] - self.phi_loc + ) + self.psi_concentration * torch.cos(value[..., 1] - self.psi_loc) + corr = ( + self.correlation + * torch.sin(value[..., 0] - self.phi_loc) + * torch.sin(value[..., 1] - self.psi_loc) + ) + return indv + corr - self.norm_const + + def sample(self, sample_shape=torch.Size()): + """ + ** References: ** + 1. A New Unified Approach for the Simulation of aWide Class of Directional Distributions + John T. Kent, Asaad M. Ganeiber & Kanti V. Mardia (2018) + """ + assert not torch._C._get_tracing_state(), "jit not supported" + sample_shape = torch.Size(sample_shape) + + corr = self.correlation + conc = torch.stack((self.phi_concentration, self.psi_concentration)) + + eig = 0.5 * (conc[0] - corr**2 / conc[1]) + eig = torch.stack((torch.zeros_like(eig), eig)) + eigmin = torch.where( + eig[1] < 0, eig[1], torch.zeros_like(eig[1], dtype=eig.dtype) + ) + eig = eig - eigmin + b0 = self._bfind(eig) + + total = sample_shape.numel() + missing = total * torch.ones( + (self.batch_shape.numel(),), dtype=torch.int, device=conc.device + ) + start = torch.zeros_like(missing, device=conc.device) + phi = torch.empty( + (2, *missing.shape, total), dtype=corr.dtype, device=conc.device + ) + + max_iter = SineBivariateVonMises.max_sample_iter + + # flatten batch_shape + conc = conc.view(2, -1, 1) + eigmin = eigmin.view(-1, 1) + corr = corr.reshape(-1, 1) + eig = eig.view(2, -1) + b0 = b0.view(-1) + phi_den = log_I1(0, conc[1]).view(-1, 1) + lengths = torch.arange(total, device=conc.device).view(1, -1) + + while torch.any(missing > 0) and max_iter: + curr_conc = conc[:, missing > 0, :] + curr_corr = corr[missing > 0] + curr_eig = eig[:, missing > 0] + curr_b0 = b0[missing > 0] + + x = ( + torch.distributions.Normal(0.0, torch.rsqrt(1 + 2 * curr_eig / curr_b0)) + .sample((missing[missing > 0].min(),)) + .view(2, -1, missing[missing > 0].min()) + ) + x /= x.norm(dim=0)[None, ...] # Angular Central Gaussian distribution + + lf = ( + curr_conc[0] * (x[0] - 1) + + eigmin[missing > 0] + + log_I1( + 0, torch.sqrt(curr_conc[1] ** 2 + (curr_corr * x[1]) ** 2) + ).squeeze(0) + - phi_den[missing > 0] + ) + assert lf.shape == ((missing > 0).sum(), missing[missing > 0].min()) + + lg_inv = ( + 1.0 + - curr_b0.view(-1, 1) / 2 + + torch.log( + curr_b0.view(-1, 1) / 2 + (curr_eig.view(2, -1, 1) * x**2).sum(0) + ) + ) + assert lg_inv.shape == lf.shape + + accepted = ( + torch.distributions.Uniform( + 0.0, torch.ones((), device=conc.device) + ).sample(lf.shape) + < (lf + lg_inv).exp() + ) + + phi_mask = torch.zeros( + (*missing.shape, total), dtype=torch.bool, device=conc.device + ) + phi_mask[missing > 0] = torch.logical_and( + lengths < (start[missing > 0] + accepted.sum(-1)).view(-1, 1), + lengths >= start[missing > 0].view(-1, 1), + ) + + phi[:, phi_mask] = x[:, accepted] + + start[missing > 0] += accepted.sum(-1) + missing[missing > 0] -= accepted.sum(-1) + max_iter -= 1 + + if max_iter == 0 or torch.any(missing > 0): + raise ValueError( + "maximum number of iterations exceeded; " + "try increasing `SineBivariateVonMises.max_sample_iter`" + ) + + phi = torch.atan2(phi[1], phi[0]) + + alpha = torch.sqrt(conc[1] ** 2 + (corr * torch.sin(phi)) ** 2) + beta = torch.atan(corr / conc[1] * torch.sin(phi)) + + psi = VonMises(beta, alpha).sample() + + phi_psi = torch.stack( + ( + (phi + self.phi_loc.reshape((-1, 1)) + pi) % (2 * pi) - pi, + (psi + self.psi_loc.reshape((-1, 1)) + pi) % (2 * pi) - pi, + ), + dim=-1, + ).permute(1, 0, 2) + return phi_psi.reshape(*sample_shape, *self.batch_shape, *self.event_shape) + + @property + def mean(self): + return torch.stack((self.phi_loc, self.psi_loc), dim=-1) + + @classmethod + def infer_shapes(cls, **arg_shapes): + batch_shape = torch.Size(broadcast_shape(*arg_shapes.values())) + return batch_shape, torch.Size([2]) + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(SineBivariateVonMises, _instance) + batch_shape = torch.Size(batch_shape) + for k in SineBivariateVonMises.arg_constraints.keys(): + setattr(new, k, getattr(self, k).expand(batch_shape)) + new.norm_const = self.norm_const.expand(batch_shape) + super(SineBivariateVonMises, new).__init__( + batch_shape, self.event_shape, validate_args=False + ) + new._validate_args = self._validate_args + return new + + def _bfind(self, eig): + b = ( + eig.shape[0] + / 2 + * torch.ones(self.batch_shape, dtype=eig.dtype, device=eig.device) + ) + g1 = torch.sum(1 / (b + 2 * eig) ** 2, dim=0) + g2 = torch.sum(-2 / (b + 2 * eig) ** 3, dim=0) + return torch.where(eig.norm(0) != 0, b - g1 / g2, b) + + @staticmethod + def _lbinoms(n): + ns = torch.arange(n, device=n.device) + num = torch.lgamma(2 * ns + 1) + den = torch.lgamma(ns + 1) + return num - 2 * den diff --git a/pyro/source/pyro/distributions/sine_skewed.py b/pyro/source/pyro/distributions/sine_skewed.py new file mode 100644 index 0000000000000000000000000000000000000000..202c00c0d669c481bd4ddf0535d37488c938b5e6 --- /dev/null +++ b/pyro/source/pyro/distributions/sine_skewed.py @@ -0,0 +1,171 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import warnings +from math import pi + +import torch +from torch import broadcast_shapes +from torch.distributions import Uniform + +from pyro.distributions import constraints + +from .torch_distribution import TorchDistribution + + +class SineSkewed(TorchDistribution): + """Sine Skewing [1] is a procedure for producing a distribution that breaks pointwise symmetry on a torus + distribution. The new distribution is called the Sine Skewed X distribution, where X is the name of the (symmetric) + base distribution. + + Torus distributions are distributions with support on products of circles + (i.e., ⨂^d S^1 where S^1=[-pi,pi) ). So, a 0-torus is a point, the 1-torus is a circle, + and the 2-torus is commonly associated with the donut shape. + + The Sine Skewed X distribution is parameterized by a weight parameter for each dimension of the event of X. + For example with a von Mises distribution over a circle (1-torus), the Sine Skewed von Mises Distribution has one + skew parameter. The skewness parameters can be inferred using :class:`~pyro.infer.HMC` or :class:`~pyro.infer.NUTS`. + For example, the following will produce a uniform prior over skewness for the 2-torus,:: + + def model(obs): + # Sine priors + phi_loc = pyro.sample('phi_loc', VonMises(pi, 2.)) + psi_loc = pyro.sample('psi_loc', VonMises(-pi / 2, 2.)) + phi_conc = pyro.sample('phi_conc', Beta(halpha_phi, beta_prec_phi - halpha_phi)) + psi_conc = pyro.sample('psi_conc', Beta(halpha_psi, beta_prec_psi - halpha_psi)) + corr_scale = pyro.sample('corr_scale', Beta(2., 5.)) + + # SS prior + skew_phi = pyro.sample('skew_phi', Uniform(-1., 1.)) + psi_bound = 1 - skew_phi.abs() + skew_psi = pyro.sample('skew_psi', Uniform(-1., 1.)) + skewness = torch.stack((skew_phi, psi_bound * skew_psi), dim=-1) + assert skewness.shape == (num_mix_comp, 2) + + with pyro.plate('obs_plate'): + sine = SineBivariateVonMises(phi_loc=phi_loc, psi_loc=psi_loc, + phi_concentration=1000 * phi_conc, + psi_concentration=1000 * psi_conc, + weighted_correlation=corr_scale) + return pyro.sample('phi_psi', SineSkewed(sine, skewness), obs=obs) + + To ensure the skewing does not alter the normalization constant of the (Sine Bivaraite von Mises) base + distribution the skewness parameters are constraint. The constraint requires the sum of the absolute values of + skewness to be less than or equal to one. + So for the above snippet it must hold that:: + + skew_phi.abs()+skew_psi.abs() <= 1 + + We handle this in the prior by computing psi_bound and use it to scale skew_psi. + We do **not** use psi_bound as:: + + skew_psi = pyro.sample('skew_psi', Uniform(-psi_bound, psi_bound)) + + as it would make the support for the Uniform distribution dynamic. + + In the context of :class:`~pyro.infer.SVI`, this distribution can freely be used as a likelihood, but use as + latent variables it will lead to slow inference for 2 and higher dim toruses. This is because the base_dist + cannot be reparameterized. + + .. note:: An event in the base distribution must be on a d-torus, so the event_shape must be (d,). + + .. note:: For the skewness parameter, it must hold that the sum of the absolute value of its weights for an event + must be less than or equal to one. See eq. 2.1 in [1]. + + ** References: ** + 1. Sine-skewed toroidal distributions and their application in protein bioinformatics + Ameijeiras-Alonso, J., Ley, C. (2019) + + :param torch.distributions.Distribution base_dist: base density on a d-dimensional torus. Supported base + distributions include: 1D :class:`~pyro.distributions.VonMises`, + :class:`~pyro.distributions.SineBivariateVonMises`, 1D :class:`~pyro.distributions.ProjectedNormal`, and + :class:`~pyro.distributions.Uniform` (-pi, pi). + :param torch.tensor skewness: skewness of the distribution. + """ + + arg_constraints = { + "skewness": constraints.independent(constraints.interval(-1.0, 1.0), 1) + } + + support = constraints.independent(constraints.real, 1) + + def __init__(self, base_dist: TorchDistribution, skewness, validate_args=None): + assert ( + base_dist.event_shape == skewness.shape[-1:] + ), "Sine Skewing is only valid with a skewness parameter for each dimension of `base_dist.event_shape`." + + if (skewness.abs().sum(-1) > 1.0).any(): + warnings.warn("Total skewness weight shouldn't exceed one.", UserWarning) + + batch_shape = broadcast_shapes(base_dist.batch_shape, skewness.shape[:-1]) + event_shape = skewness.shape[-1:] + self.skewness = skewness.broadcast_to(batch_shape + event_shape) + self.base_dist = base_dist.expand(batch_shape) + super().__init__(batch_shape, event_shape, validate_args=validate_args) + + if self._validate_args and base_dist.mean.device != skewness.device: + raise ValueError( + f"base_density: {base_dist.__class__.__name__} and SineSkewed " + f"must be on same device." + ) + + def __repr__(self): + args_string = ", ".join( + [ + "{}: {}".format( + p, + ( + getattr(self, p) + if getattr(self, p).numel() == 1 + else getattr(self, p).size() + ), + ) + for p in self.arg_constraints.keys() + ] + ) + return ( + self.__class__.__name__ + + "(" + + f"base_density: {str(self.base_dist)}, " + + args_string + + ")" + ) + + def sample(self, sample_shape=torch.Size()): + bd = self.base_dist + ys = bd.sample(sample_shape) + u = Uniform(0.0, self.skewness.new_ones(())).sample( + sample_shape + self.batch_shape + ) + + # Section 2.3 step 3 in [1] + mask = u <= 0.5 + 0.5 * ( + self.skewness * torch.sin((ys - bd.mean) % (2 * pi)) + ).sum(-1) + mask = mask[..., None] + samples = (torch.where(mask, ys, -ys + 2 * bd.mean) + pi) % (2 * pi) - pi + return samples + + def log_prob(self, value): + if self._validate_args: + self._validate_sample(value) + + # Eq. 2.1 in [1] + skew_prob = torch.log1p( + (self.skewness * torch.sin((value - self.base_dist.mean) % (2 * pi))).sum( + -1 + ) + ) + return self.base_dist.log_prob(value) + skew_prob + + def expand(self, batch_shape, _instance=None): + batch_shape = torch.Size(batch_shape) + new = self._get_checked_instance(SineSkewed, _instance) + base_dist = self.base_dist.expand(batch_shape) + new.base_dist = base_dist + new.skewness = self.skewness.expand(batch_shape + (-1,)) + super(SineSkewed, new).__init__( + batch_shape, self.event_shape, validate_args=False + ) + new._validate_args = self._validate_args + return new diff --git a/pyro/source/pyro/distributions/softlaplace.py b/pyro/source/pyro/distributions/softlaplace.py new file mode 100644 index 0000000000000000000000000000000000000000..0209b7ac1485ce63b319f9f6c59c3e762713e4d6 --- /dev/null +++ b/pyro/source/pyro/distributions/softlaplace.py @@ -0,0 +1,74 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import torch +from torch.distributions import constraints +from torch.distributions.utils import broadcast_all + +from .torch_distribution import TorchDistribution + + +class SoftLaplace(TorchDistribution): + """ + Smooth distribution with Laplace-like tail behavior. + + This distribution corresponds to the log-convex density:: + + z = (value - loc) / scale + log_prob = log(2 / pi) - log(scale) - logaddexp(z, -z) + + Like the Laplace density, this density has the heaviest possible tails + (asymptotically) while still being log-convex. Unlike the Laplace + distribution, this distribution is infinitely differentiable everywhere, + and is thus suitable for constructing Laplace approximations. + + :param loc: Location parameter. + :param scale: Scale parameter. + """ + + arg_constraints = {"loc": constraints.real, "scale": constraints.positive} + support = constraints.real + has_rsample = True + + def __init__(self, loc, scale, *, validate_args=None): + self.loc, self.scale = broadcast_all(loc, scale) + super().__init__(self.loc.shape, validate_args=validate_args) + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(SoftLaplace, _instance) + batch_shape = torch.Size(batch_shape) + new.loc = self.loc.expand(batch_shape) + new.scale = self.scale.expand(batch_shape) + super(SoftLaplace, new).__init__(batch_shape, validate_args=False) + new._validate_args = self._validate_args + return new + + def log_prob(self, value): + if self._validate_args: + self._validate_sample(value) + z = (value - self.loc) / self.scale + return math.log(2 / math.pi) - self.scale.log() - torch.logaddexp(z, -z) + + def rsample(self, sample_shape=torch.Size()): + shape = self._extended_shape(sample_shape) + u = self.loc.new_empty(shape).uniform_() + return self.icdf(u) + + def cdf(self, value): + if self._validate_args: + self._validate_sample(value) + z = (value - self.loc) / self.scale + return z.exp().atan().mul(2 / math.pi) + + def icdf(self, value): + return value.mul(math.pi / 2).tan().log().mul(self.scale).add(self.loc) + + @property + def mean(self): + return self.loc + + @property + def variance(self): + return (math.pi / 2 * self.scale) ** 2 diff --git a/pyro/source/pyro/distributions/spanning_tree.cpp b/pyro/source/pyro/distributions/spanning_tree.cpp new file mode 100644 index 0000000000000000000000000000000000000000..d1de181807c066cbdb44c642540514b7e7a2febd --- /dev/null +++ b/pyro/source/pyro/distributions/spanning_tree.cpp @@ -0,0 +1,226 @@ +// Copyright Uber Technologies, Inc. +// SPDX-License-Identifier: Apache-2.0 + +#include +#include +#include +#include + +#include + +at::Tensor make_complete_graph(int num_vertices) { + const int V = num_vertices; + const int K = V * (V - 1) / 2; + auto grid = torch::empty({2, K}, at::kLong); + int k = 0; + for (int v2 = 0; v2 != V; ++v2) { + for (int v1 = 0; v1 != v2; ++v1) { + grid[0][k] = v1; + grid[1][k] = v2; + k += 1; + } + } + return grid; +} + +int _remove_edge(at::Tensor grid, at::Tensor edge_ids, + std::vector> &neighbors, + std::vector &components, int e) { + int k = edge_ids[e].item().to(); + int v1 = grid[0][k].item().to(); + int v2 = grid[1][k].item().to(); + neighbors[v1].erase(v2); + neighbors[v2].erase(v1); + components[v1] = 1; + std::vector pending = {v1}; + while (!pending.empty()) { + int v1 = pending.back(); + pending.pop_back(); + for (int v2 : neighbors[v1]) { + if (!components[v2]) { + components[v2] = 1; + pending.push_back(v2); + } + } + } + return k; +} + +void _add_edge(at::Tensor grid, at::Tensor edge_ids, + std::vector> &neighbors, + std::vector &components, int e, int k) { + edge_ids[e] = k; + int v1 = grid[0][k].item().to(); + int v2 = grid[1][k].item().to(); + neighbors[v1].insert(v2); + neighbors[v2].insert(v1); + std::fill(components.begin(), components.end(), 0); +} + +int _find_valid_edges(const std::vector &components, at::Tensor valid_edge_ids) { + int k = 0; + int end = 0; + const int V = components.size(); + for (int v2 = 0; v2 != V; ++v2) { + bool c2 = components[v2]; + for (int v1 = 0; v1 != v2; ++v1) { + if (c2 ^ components[v1]) { + valid_edge_ids[end] = k; + end += 1; + } + k += 1; + } + } + return end; +} + +at::Tensor sample_tree_mcmc(at::Tensor edge_logits, at::Tensor edges) { + torch::NoGradGuard no_grad; + if (edges.size(0) <= 1) { + return edges; + } + + const int E = edges.size(0); + const int V = E + 1; + const int K = V * (V - 1) / 2; + auto grid = make_complete_graph(V); + + // Each of E edges in the tree is stored as an id k in [0, K) indexing into + // the complete graph. The id of an edge (v1,v2) is k = v1+v2*(v2-1)/2. + auto edge_ids = torch::empty({E}, at::kLong); + // This maps each vertex to the set of its neighboring vertices. + std::vector> neighbors(V); + // This maps each vertex to its connected component id (0 or 1). + std::vector components(V); + for (int e = 0; e != E; ++e) { + int v1 = edges[e][0].item().to(); + int v2 = edges[e][1].item().to(); + edge_ids[e] = v1 + v2 * (v2 - 1) / 2; + neighbors[v1].insert(v2); + neighbors[v2].insert(v1); + } + // This stores ids of edges that are valid candidates for Gibbs moves. + auto valid_edges_buffer = torch::empty({K}, at::kLong); + + // Cycle through all edges in a random order. + auto order = torch::randperm(E); + for (int i = 0; i != E; ++i) { + int e = order[i].item().to(); + + // Perform a single-site Gibbs update by moving this edge elsewhere. + int k = _remove_edge(grid, edge_ids, neighbors, components, e); + int num_valid_edges = _find_valid_edges(components, valid_edges_buffer); + auto valid_edge_ids = valid_edges_buffer.slice(0, 0, num_valid_edges); + auto valid_logits = edge_logits.index_select(0, valid_edge_ids); + auto valid_probs = (valid_logits - valid_logits.max()).exp(); + double total_prob = valid_probs.sum().item().to(); + if (total_prob > 0) { + int sample = valid_probs.multinomial(1)[0].item().to(); + k = valid_edge_ids[sample].item().to(); + } + _add_edge(grid, edge_ids, neighbors, components, e, k); + } + + // Convert edge ids to a canonical list of pairs. + edge_ids = std::get<0>(edge_ids.sort()); + edges = torch::empty({E, 2}, at::kLong); + for (int e = 0; e != E; ++e) { + edges[e][0] = grid[0][edge_ids[e]]; + edges[e][1] = grid[1][edge_ids[e]]; + } + return edges; +} + +at::Tensor sample_tree_approx(at::Tensor edge_logits) { + torch::NoGradGuard no_grad; + const int K = edge_logits.size(0); + const int V = static_cast(0.5 + std::sqrt(0.25 + 2 * K)); + const int E = V - 1; + auto grid = make_complete_graph(V); + + // Each of E edges in the tree is stored as an id k in [0, K) indexing into + // the complete graph. The id of an edge (v1,v2) is k = v1+v2*(v2-1)/2. + auto edge_ids = torch::empty({E}, at::kLong); + // This maps each vertex to whether it is a member of the cumulative tree. + auto components = torch::zeros({V}, at::kBool); + + // Sample the first edge at random. + auto probs = (edge_logits - edge_logits.max()).exp(); + int k = probs.multinomial(1)[0].item().to(); + components[grid[0][k]] = 1; + components[grid[1][k]] = 1; + edge_ids[0] = k; + + // Sample edges connecting the cumulative tree to a new leaf. + for (int e = 1; e != E; ++e) { + auto c1 = components.index_select(0, grid[0]); + auto c2 = components.index_select(0, grid[1]); + auto mask = c1.__xor__(c2); + auto valid_logits = edge_logits.masked_select(mask); + auto probs = (valid_logits - valid_logits.max()).exp(); + int sample = probs.multinomial(1)[0].item().to(); + int k = mask.nonzero().view(-1)[sample].item().to(); + components[grid[0][k]] = 1; + components[grid[1][k]] = 1; + edge_ids[e] = k; + } + + // Convert edge ids to a canonical list of pairs. + edge_ids = std::get<0>(edge_ids.sort()); + auto edges = torch::empty({E, 2}, at::kLong); + for (int e = 0; e != E; ++e) { + edges[e][0] = grid[0][edge_ids[e]]; + edges[e][1] = grid[1][edge_ids[e]]; + } + return edges; +} + +at::Tensor find_best_tree(at::Tensor edge_logits) { + torch::NoGradGuard no_grad; + const int K = edge_logits.size(0); + const int V = static_cast(0.5 + std::sqrt(0.25 + 2 * K)); + const int E = V - 1; + auto grid = make_complete_graph(V); + + // Each of E edges in the tree is stored as an id k in [0, K) indexing into + // the complete graph. The id of an edge (v1,v2) is k = v1+v2*(v2-1)/2. + auto edge_ids = torch::empty({E}, at::kLong); + // This maps each vertex to whether it is a member of the cumulative tree. + auto components = torch::zeros({V}, at::kBool); + + // Find the first edge. + auto probs = (edge_logits - edge_logits.max()).exp(); + int k = probs.argmax(0).item().to(); + components[grid[0][k]] = 1; + components[grid[1][k]] = 1; + edge_ids[0] = k; + + // Find edges connecting the cumulative tree to a new leaf. + for (int e = 1; e != E; ++e) { + auto c1 = components.index_select(0, grid[0]); + auto c2 = components.index_select(0, grid[1]); + auto mask = c1.__xor__(c2); + auto valid_logits = edge_logits.masked_select(mask); + int k = valid_logits.argmax(0).item().to(); + k = mask.nonzero().view(-1)[k].item().to(); + components[grid[0][k]] = 1; + components[grid[1][k]] = 1; + edge_ids[e] = k; + } + + // Convert edge ids to a canonical list of pairs. + edge_ids = std::get<0>(edge_ids.sort()); + auto edges = torch::empty({E, 2}, at::kLong); + for (int e = 0; e != E; ++e) { + edges[e][0] = grid[0][edge_ids[e]]; + edges[e][1] = grid[1][edge_ids[e]]; + } + return edges; +} + +PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) { + m.def("sample_tree_mcmc", &sample_tree_mcmc, "Sample a random spanning tree using MCMC"); + m.def("sample_tree_approx", &sample_tree_approx, "Approximate sample a random spanning tree"); + m.def("find_best_tree", &find_best_tree, "Finds a maximum weight spanning tree"); + m.def("make_complete_graph", &make_complete_graph, "Constructs a complete graph"); +} diff --git a/pyro/source/pyro/distributions/spanning_tree.py b/pyro/source/pyro/distributions/spanning_tree.py new file mode 100644 index 0000000000000000000000000000000000000000..8feb9215119f735425401fa9a7bd1cf785bce7f2 --- /dev/null +++ b/pyro/source/pyro/distributions/spanning_tree.py @@ -0,0 +1,622 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import itertools +import math + +import torch +from torch.distributions import constraints +from torch.distributions.utils import lazy_property + +from pyro.distributions.torch_distribution import TorchDistribution + + +class SpanningTree(TorchDistribution): + """ + Distribution over spanning trees on a fixed number ``V`` of vertices. + + A tree is represented as :class:`torch.LongTensor` ``edges`` of shape + ``(V-1,2)`` satisfying the following properties: + + 1. The edges constitute a tree, i.e. are connected and cycle free. + 2. Each edge ``(v1,v2) = edges[e]`` is sorted, i.e. ``v1 < v2``. + 3. The entire tensor is sorted in colexicographic order. + + Use :func:`validate_edges` to verify `edges` are correctly formed. + + The ``edge_logits`` tensor has one entry for each of the ``V*(V-1)//2`` + edges in the complete graph on ``V`` vertices, where edges are each sorted + and the edge order is colexicographic:: + + (0,1), (0,2), (1,2), (0,3), (1,3), (2,3), (0,4), (1,4), (2,4), ... + + This ordering corresponds to the size-independent pairing function:: + + k = v1 + v2 * (v2 - 1) // 2 + + where ``k`` is the rank of the edge ``(v1,v2)`` in the complete graph. + To convert a matrix of edge logits to the linear representation used here:: + + assert my_matrix.shape == (V, V) + i, j = make_complete_graph(V) + edge_logits = my_matrix[i, j] + + :param torch.Tensor edge_logits: A tensor of length ``V*(V-1)//2`` + containing logits (aka negative energies) of all edges in the complete + graph on ``V`` vertices. See above comment for edge ordering. + :param dict sampler_options: An optional dict of sampler options including: + ``mcmc_steps`` defaulting to a single MCMC step (which is pretty good); + ``initial_edges`` defaulting to a cheap approximate sample; + ``backend`` one of "python" or "cpp", defaulting to "python". + """ + + arg_constraints = {"edge_logits": constraints.real} + support = constraints.nonnegative_integer + has_enumerate_support = True + + def __init__(self, edge_logits, sampler_options=None, validate_args=None): + if edge_logits.is_cuda: + raise NotImplementedError("SpanningTree does not support cuda tensors") + K = len(edge_logits) + V = int(round(0.5 + (0.25 + 2 * K) ** 0.5)) + assert K == V * (V - 1) // 2 + E = V - 1 + event_shape = (E, 2) + batch_shape = () + self.edge_logits = edge_logits + super().__init__(batch_shape, event_shape, validate_args=validate_args) + if self._validate_args: + if edge_logits.shape != (K,): + raise ValueError( + "Expected edge_logits of shape ({},), but got shape {}".format( + K, edge_logits.shape + ) + ) + self.num_vertices = V + self.sampler_options = {} if sampler_options is None else sampler_options + + def validate_edges(self, edges): + """ + Validates a batch of ``edges`` tensors, as returned by :meth:`sample` or + :meth:`enumerate_support` or as input to :meth:`log_prob()`. + + :param torch.LongTensor edges: A batch of edges. + :raises: ValueError + :returns: None + """ + if edges.shape[-2:] != self.event_shape: + raise ValueError("Invalid edges shape: {}".format(edges.shape)) + + # Verify canonical ordering. + if not ((0 <= edges) & (edges < self.num_vertices)).all(): + raise ValueError("Invalid vertex ids:\n{}".format(edges)) + if not (edges[..., 0] < edges[..., 1]).all(): + raise ValueError("Vertices are not sorted in each edge:\n{}".format(edges)) + if not ( + (edges[..., :-1, 1] < edges[..., 1:, 1]) + | ( + (edges[..., :-1, 1] == edges[..., 1:, 1]) + & (edges[..., :-1, 0] < edges[..., 1:, 0]) + ) + ).all(): + raise ValueError( + "Edges are not sorted colexicographically:\n{}".format(edges) + ) + + # Verify tree property, i.e. connectivity. + V = self.num_vertices + for i in itertools.product(*map(range, edges.shape[:-2])): + edges_i = edges[i] + connected = torch.eye(V, dtype=torch.float) + connected[edges_i[:, 0], edges_i[:, 1]] = 1 + connected[edges_i[:, 1], edges_i[:, 0]] = 1 + for i in range(int(math.ceil(V**0.5))): + connected = connected.mm(connected).clamp_(max=1) + if not connected.min() > 0: + raise ValueError("Edges do not constitute a tree:\n{}".format(edges_i)) + + @lazy_property + def log_partition_function(self): + # By Kirchoff's matrix-tree theorem, the partition function is the + # determinant of a truncated version of the graph Laplacian matrix. We + # use a Cholesky decomposition to compute the log determinant. + # See https://en.wikipedia.org/wiki/Kirchhoff%27s_theorem + V = self.num_vertices + v1, v2 = make_complete_graph(V).unbind(0) + logits = self.edge_logits.new_full((V, V), -math.inf) + logits[v1, v2] = self.edge_logits + logits[v2, v1] = self.edge_logits + log_diag = logits.logsumexp(-1) + # Numerically stabilize so that laplacian has 1's on the diagonal. + shift = 0.5 * log_diag + laplacian = torch.eye(V) - (logits - shift - shift[:, None]).exp() + truncated = laplacian[:-1, :-1] + try: + import gpytorch + + log_det = gpytorch.lazy.NonLazyTensor(truncated).logdet() + except ImportError: + log_det = torch.linalg.cholesky(truncated).diag().log().sum() * 2 + return log_det + log_diag[:-1].sum() + + def log_prob(self, edges): + if self._validate_args: + self.validate_edges(edges) + v1 = edges[..., 0] + v2 = edges[..., 1] + k = v1 + v2 * (v2 - 1) // 2 + return self.edge_logits[k].sum(-1) - self.log_partition_function + + def sample(self, sample_shape=torch.Size()): + """ + This sampler is implemented using MCMC run for a small number of steps + after being initialized by a cheap approximate sampler. This sampler is + approximate and cubic time. This is faster than the classic + Aldous-Broder sampler [1,2], especially for graphs with large mixing + time. Recent research [3,4] proposes samplers that run in + sub-matrix-multiply time but are more complex to implement. + + **References** + + [1] `Generating random spanning trees` + Andrei Broder (1989) + [2] `The Random Walk Construction of Uniform Spanning Trees and Uniform Labelled Trees`, + David J. Aldous (1990) + [3] `Sampling Random Spanning Trees Faster than Matrix Multiplication`, + David Durfee, Rasmus Kyng, John Peebles, Anup B. Rao, Sushant Sachdeva + (2017) https://arxiv.org/abs/1611.07451 + [4] `An almost-linear time algorithm for uniform random spanning tree generation`, + Aaron Schild (2017) https://arxiv.org/abs/1711.06455 + """ + if sample_shape: + raise NotImplementedError("SpanningTree does not support batching") + edges = sample_tree(self.edge_logits, **self.sampler_options) + assert edges.dim() >= 2 and edges.shape[-2:] == self.event_shape + return edges + + def enumerate_support(self, expand=True): + """ + This is implemented for trees with up to 6 vertices (and 5 edges). + """ + trees = enumerate_spanning_trees(self.num_vertices) + return torch.tensor(trees, dtype=torch.long) + + @property + def mode(self): + """ + :returns: The maximum weight spanning tree. + :rtype: Tensor + """ + backend = self.sampler_options.get("backend", "python") + return find_best_tree(self.edge_logits, backend=backend) + + @property + def edge_mean(self): + """ + Computes marginal probabilities of each edge being active. + + .. note:: This is similar to other distributions' ``.mean()`` + method, but with a different shape because this distribution's + values are not encoded as binary matrices. + + :returns: A symmetric square ``(V,V)``-shaped matrix with values + in ``[0,1]`` denoting the marginal probability of each edge + being in a sampled value. + :rtype: Tensor + """ + V = self.num_vertices + v1, v2 = make_complete_graph(V).unbind(0) + logits = self.edge_logits - self.edge_logits.max() + w = self.edge_logits.new_zeros(V, V) + w[v1, v2] = w[v2, v1] = logits.exp() + laplacian = w.sum(-1).diag_embed() - w + inv = (laplacian + 1 / V).pinverse() + resistance = inv.diag() + inv.diag()[..., None] - 2 * inv + return resistance * w + + +################################################################################ +# Sampler implementation. +################################################################################ + +_cpp_module = None + + +def _get_cpp_module(): + """ + JIT compiles the cpp_spanning_tree module. + """ + global _cpp_module + if _cpp_module is None: + import os + + from torch.utils.cpp_extension import load + + path = os.path.join( + os.path.dirname(os.path.abspath(__file__)), "spanning_tree.cpp" + ) + _cpp_module = load( + name="cpp_spanning_tree", sources=[path], extra_cflags=["-O2"], verbose=True + ) + return _cpp_module + + +def make_complete_graph(num_vertices, backend="python"): + """ + Constructs a complete graph. + + The pairing function is: ``k = v1 + v2 * (v2 - 1) // 2`` + + :param int num_vertices: Number of vertices. + :returns: a 2 x K grid of (vertex, vertex) pairs. + """ + if backend == "python": + return _make_complete_graph(num_vertices) + elif backend == "cpp": + return _get_cpp_module().make_complete_graph(num_vertices) + else: + raise ValueError("unknown backend: {}".format(repr(backend))) + + +def _make_complete_graph(num_vertices): + if num_vertices < 2: + raise ValueError("PyTorch cannot handle zero-sized multidimensional tensors") + V = num_vertices + K = V * (V - 1) // 2 + v1 = torch.arange(V) + v2 = torch.arange(V).unsqueeze(-1) + v1, v2 = torch.broadcast_tensors(v1, v2) + v1 = v1.contiguous().view(-1) + v2 = v2.contiguous().view(-1) + mask = v1 < v2 + grid = torch.stack((v1[mask], v2[mask])) + assert grid.shape == (2, K) + return grid + + +def _remove_edge(grid, edge_ids, neighbors, components, e): + """ + Remove an edge from a spanning tree. + """ + k = edge_ids[e] + v1 = grid[0, k].item() + v2 = grid[1, k].item() + neighbors[v1].remove(v2) + neighbors[v2].remove(v1) + components[v1] = 1 + pending = [v1] + while pending: + v1 = pending.pop() + for v2 in neighbors[v1]: + if not components[v2]: + components[v2] = 1 + pending.append(v2) + return k + + +def _add_edge(grid, edge_ids, neighbors, components, e, k): + """ + Add an edge connecting two components to create a spanning tree. + """ + edge_ids[e] = k + v1 = grid[0, k].item() + v2 = grid[1, k].item() + neighbors[v1].add(v2) + neighbors[v2].add(v1) + components.fill_(0) + + +def _find_valid_edges(components, valid_edge_ids): + """ + Find all edges between two components in a complete undirected graph. + + :param components: A [V]-shaped array of boolean component ids. This + assumes there are exactly two nonemtpy components. + :param valid_edge_ids: An uninitialized array where output is written. On + return, the subarray valid_edge_ids[:end] will contain edge ids k for all + valid edges. + :returns: The number of valid edges found. + """ + k = 0 + end = 0 + for v2, c2 in enumerate(components): + for v1 in range(v2): + if c2 ^ components[v1]: + valid_edge_ids[end] = k + end += 1 + k += 1 + return end + + +@torch.no_grad() +def _sample_tree_mcmc(edge_logits, edges): + if len(edges) <= 1: + return edges + + E = len(edges) + V = E + 1 + K = V * (V - 1) // 2 + grid = make_complete_graph(V) + + # Each of E edges in the tree is stored as an id k in [0, K) indexing into + # the complete graph. The id of an edge (v1,v2) is k = v1+v2*(v2-1)/2. + edge_ids = torch.empty(E, dtype=torch.long) + # This maps each vertex to the set of its neighboring vertices. + neighbors = {v: set() for v in range(V)} + # This maps each vertex to its connected component id (0 or 1). + components = torch.zeros(V, dtype=torch.bool) + for e in range(E): + v1, v2 = map(int, edges[e]) + assert v1 < v2 + edge_ids[e] = v1 + v2 * (v2 - 1) // 2 + neighbors[v1].add(v2) + neighbors[v2].add(v1) + # This stores ids of edges that are valid candidates for Gibbs moves. + valid_edges_buffer = torch.empty(K, dtype=torch.long) + + # Cycle through all edges in a random order. + for e in torch.randperm(E): + e = int(e) + + # Perform a single-site Gibbs update by moving this edge elsewhere. + k = _remove_edge(grid, edge_ids, neighbors, components, e) + num_valid_edges = _find_valid_edges(components, valid_edges_buffer) + valid_edge_ids = valid_edges_buffer[:num_valid_edges] + valid_logits = edge_logits[valid_edge_ids] + valid_probs = (valid_logits - valid_logits.max()).exp() + total_prob = valid_probs.sum() + if total_prob > 0: + sample = torch.multinomial(valid_probs, 1)[0] + k = valid_edge_ids[sample] + _add_edge(grid, edge_ids, neighbors, components, e, k) + + # Convert edge ids to a canonical list of pairs. + edge_ids = edge_ids.sort()[0] + edges = torch.empty((E, 2), dtype=torch.long) + edges[:, 0] = grid[0, edge_ids] + edges[:, 1] = grid[1, edge_ids] + return edges + + +def sample_tree_mcmc(edge_logits, edges, backend="python"): + """ + Sample a random spanning tree of a dense weighted graph using MCMC. + + This uses Gibbs sampling on edges. Consider E undirected edges that can + move around a graph of ``V=1+E`` vertices. The edges are constrained so + that no two edges can span the same pair of vertices and so that the edges + must form a spanning tree. To Gibbs sample, chose one of the E edges at + random and move it anywhere else in the graph. After we remove the edge, + notice that the graph is split into two connected components. The + constraints imply that the edge must be replaced so as to connect the two + components. Hence to Gibbs sample, we collect all such bridging + (vertex,vertex) pairs and sample from them in proportion to + ``exp(edge_logits)``. + + :param torch.Tensor edge_logits: A length-K array of nonnormalized log + probabilities. + :param torch.Tensor edges: An E x 2 tensor of initial edges in the form + of (vertex,vertex) pairs. Each edge should be sorted and the entire + tensor should be lexicographically sorted. + :returns: An E x 2 tensor of edges in the form of (vertex,vertex) pairs. + Each edge should be sorted and the entire tensor should be + lexicographically sorted. + :rtype: torch.Tensor + """ + if backend == "python": + return _sample_tree_mcmc(edge_logits, edges) + elif backend == "cpp": + return _get_cpp_module().sample_tree_mcmc(edge_logits, edges) + else: + raise ValueError("unknown backend: {}".format(repr(backend))) + + +@torch.no_grad() +def _sample_tree_approx(edge_logits): + K = len(edge_logits) + V = int(round(0.5 + (0.25 + 2 * K) ** 0.5)) + assert K == V * (V - 1) // 2 + E = V - 1 + grid = make_complete_graph(V) + + # Each of E edges in the tree is stored as an id k in [0, K) indexing into + # the complete graph. The id of an edge (v1,v2) is k = v1+v2*(v2-1)/2. + edge_ids = torch.empty((E,), dtype=torch.long) + # This maps each vertex to whether it is a member of the cumulative tree. + components = torch.zeros(V, dtype=torch.bool) + + # Sample the first edge at random. + probs = (edge_logits - edge_logits.max()).exp() + k = torch.multinomial(probs, 1)[0] + components[grid[:, k]] = 1 + edge_ids[0] = k + + # Sample edges connecting the cumulative tree to a new leaf. + for e in range(1, E): + c1, c2 = components[grid] + mask = c1 != c2 + valid_logits = edge_logits[mask] + probs = (valid_logits - valid_logits.max()).exp() + k = mask.nonzero(as_tuple=False)[torch.multinomial(probs, 1)[0]] + components[grid[:, k]] = 1 + edge_ids[e] = k + + # Convert edge ids to a canonical list of pairs. + edge_ids = edge_ids.sort()[0] + edges = torch.empty((E, 2), dtype=torch.long) + edges[:, 0] = grid[0, edge_ids] + edges[:, 1] = grid[1, edge_ids] + return edges + + +def sample_tree_approx(edge_logits, backend="python"): + """ + Approximately sample a random spanning tree of a dense weighted graph. + + This is mainly useful for initializing an MCMC sampler. + + :param torch.Tensor edge_logits: A length-K array of nonnormalized log + probabilities. + :returns: An E x 2 tensor of edges in the form of (vertex,vertex) pairs. + Each edge should be sorted and the entire tensor should be + lexicographically sorted. + :rtype: torch.Tensor + """ + if backend == "python": + return _sample_tree_approx(edge_logits) + elif backend == "cpp": + return _get_cpp_module().sample_tree_approx(edge_logits) + else: + raise ValueError("unknown backend: {}".format(repr(backend))) + + +def sample_tree(edge_logits, init_edges=None, mcmc_steps=1, backend="python"): + edges = init_edges + if edges is None: + edges = sample_tree_approx(edge_logits, backend=backend) + for step in range(mcmc_steps): + edges = sample_tree_mcmc(edge_logits, edges, backend=backend) + return edges + + +@torch.no_grad() +def _find_best_tree(edge_logits): + K = len(edge_logits) + V = int(round(0.5 + (0.25 + 2 * K) ** 0.5)) + assert K == V * (V - 1) // 2 + E = V - 1 + grid = make_complete_graph(V) + + # Each of E edges in the tree is stored as an id k in [0, K) indexing into + # the complete graph. The id of an edge (v1,v2) is k = v1+v2*(v2-1)/2. + edge_ids = torch.empty((E,), dtype=torch.long) + # This maps each vertex to whether it is a member of the cumulative tree. + components = torch.zeros(V, dtype=torch.bool) + + # Find the first edge. + k = edge_logits.argmax(0).item() + components[grid[:, k]] = 1 + edge_ids[0] = k + + # Find edges connecting the cumulative tree to a new leaf. + for e in range(1, E): + c1, c2 = components[grid] + mask = c1 != c2 + valid_logits = edge_logits[mask] + k = valid_logits.argmax(0).item() + k = mask.nonzero(as_tuple=False)[k] + components[grid[:, k]] = 1 + edge_ids[e] = k + + # Convert edge ids to a canonical list of pairs. + edge_ids = edge_ids.sort()[0] + edges = torch.empty((E, 2), dtype=torch.long) + edges[:, 0] = grid[0, edge_ids] + edges[:, 1] = grid[1, edge_ids] + return edges + + +def find_best_tree(edge_logits, backend="python"): + """ + Find the maximum weight spanning tree of a dense weighted graph. + + :param torch.Tensor edge_logits: A length-K array of nonnormalized log + probabilities. + :returns: An E x 2 tensor of edges in the form of (vertex,vertex) pairs. + Each edge should be sorted and the entire tensor should be + lexicographically sorted. + :rtype: torch.Tensor + """ + if backend == "python": + return _find_best_tree(edge_logits) + elif backend == "cpp": + return _get_cpp_module().find_best_tree(edge_logits) + else: + raise ValueError("unknown backend: {}".format(repr(backend))) + + +################################################################################ +# Enumeration implementation. +################################################################################ + +# See https://oeis.org/A000272 +NUM_SPANNING_TREES = [ + 1, + 1, + 1, + 3, + 16, + 125, + 1296, + 16807, + 262144, + 4782969, + 100000000, + 2357947691, + 61917364224, + 1792160394037, + 56693912375296, + 1946195068359375, + 72057594037927936, + 2862423051509815793, + 121439531096594251776, + 5480386857784802185939, +] + +# These topologically distinct sets of trees generate sets of all trees +# under permutation of vertices. See https://oeis.org/A000055 +_TREE_GENERATORS = [ + [[]], + [[]], + [[(0, 1)]], + [[(0, 1), (0, 2)]], + [ + [(0, 1), (0, 2), (0, 3)], + [(0, 1), (1, 2), (2, 3)], + ], + [ + [(0, 1), (0, 2), (0, 3), (0, 4)], + [(0, 1), (0, 2), (0, 3), (1, 4)], + [(0, 1), (1, 2), (2, 3), (3, 4)], + ], + [ + [(0, 1), (0, 2), (0, 3), (0, 4), (0, 5)], + [(0, 1), (0, 2), (0, 3), (0, 4), (1, 5)], + [(0, 1), (0, 2), (0, 3), (1, 4), (4, 5)], + [(0, 1), (0, 2), (0, 3), (2, 4), (3, 5)], + [(0, 1), (0, 2), (0, 3), (3, 4), (3, 5)], + [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)], + ], +] + + +def _permute_tree(perm, tree): + edges = [tuple(sorted([perm[u], perm[v]])) for (u, v) in tree] + edges.sort(key=lambda uv: (uv[1], uv[0])) + return tuple(edges) + + +def _close_under_permutations(V, tree_generators): + vertices = list(range(V)) + trees = [] + for tree in tree_generators: + trees.extend( + set(_permute_tree(perm, tree) for perm in itertools.permutations(vertices)) + ) + trees.sort() + return trees + + +def enumerate_spanning_trees(V): + """ + Compute the set of spanning trees on V vertices. + """ + if V >= len(_TREE_GENERATORS): + raise NotImplementedError( + "enumerate_spanning_trees() is implemented only for trees with up to {} vertices".format( + len(_TREE_GENERATORS) - 1 + ) + ) + all_trees = _close_under_permutations(V, _TREE_GENERATORS[V]) + assert len(all_trees) == NUM_SPANNING_TREES[V] + return all_trees diff --git a/pyro/source/pyro/distributions/stable.py b/pyro/source/pyro/distributions/stable.py new file mode 100644 index 0000000000000000000000000000000000000000..b988b6264c309cec0a16c48fe404afaeca4bf3b3 --- /dev/null +++ b/pyro/source/pyro/distributions/stable.py @@ -0,0 +1,246 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import torch +from torch.distributions import constraints +from torch.distributions.utils import broadcast_all + +from pyro.distributions.stable_log_prob import _stable_log_prob +from pyro.distributions.torch_distribution import TorchDistribution + + +def _unsafe_standard_stable(alpha, beta, V, W, coords): + # Implements a noisily reparametrized version of the sampler + # Chambers-Mallows-Stuck method as corrected by Weron [1,3] and simplified + # by Nolan [4]. This will fail if alpha is close to 1. + + # Differentiably transform noise via parameters. + assert V.shape == W.shape + inv_alpha = alpha.reciprocal() + half_pi = math.pi / 2 + eps = torch.finfo(V.dtype).eps + # make V belong to the open interval (-pi/2, pi/2) + V = V.clamp(min=2 * eps - half_pi, max=half_pi - 2 * eps) + ha = half_pi * alpha + b = beta * ha.tan() + # +/- `ha` term to keep the precision of alpha * (V + half_pi) when V ~ -half_pi + v = b.atan() - ha + alpha * (V + half_pi) + Z = ( + v.sin() + / ((1 + b * b).rsqrt() * V.cos()).pow(inv_alpha) + * ((v - V).cos().clamp(min=eps) / W).pow(inv_alpha - 1) + ) + Z.data[Z.data != Z.data] = 0 # drop occasional NANs + + # Optionally convert to Nolan's parametrization S^0 where samples depend + # continuously on (alpha,beta), allowing interpolation around the hole at + # alpha=1. + if coords == "S0": + return Z - b + elif coords == "S": + return Z + else: + raise ValueError("Unknown coords: {}".format(coords)) + + +RADIUS = 0.01 + + +def _standard_stable(alpha, beta, aux_uniform, aux_exponential, coords): + """ + Differentiably transform two random variables:: + + aux_uniform ~ Uniform(-pi/2, pi/2) + aux_exponential ~ Exponential(1) + + to a standard ``Stable(alpha, beta)`` random variable. + """ + # Determine whether a hole workaround is needed. + with torch.no_grad(): + hole = 1.0 + near_hole = (alpha - hole).abs() <= RADIUS + if not torch._C._get_tracing_state() and not near_hole.any(): + return _unsafe_standard_stable( + alpha, beta, aux_uniform, aux_exponential, coords=coords + ) + if coords == "S": + # S coords are discontinuous, so interpolate instead in S0 coords. + Z = _standard_stable(alpha, beta, aux_uniform, aux_exponential, "S0") + return torch.where(alpha == 1, Z, Z + beta * (math.pi / 2 * alpha).tan()) + + # Avoid the hole at alpha=1 by interpolating between pairs + # of points at hole-RADIUS and hole+RADIUS. + aux_uniform_ = aux_uniform.unsqueeze(-1) + aux_exponential_ = aux_exponential.unsqueeze(-1) + beta_ = beta.unsqueeze(-1) + alpha_ = alpha.unsqueeze(-1).expand(alpha.shape + (2,)).contiguous() + with torch.no_grad(): + lower, upper = alpha_.unbind(-1) + lower.data[near_hole] = hole - RADIUS + upper.data[near_hole] = hole + RADIUS + # We don't need to backprop through weights, since we've pretended + # alpha_ is reparametrized, even though we've clamped some values. + # |a - a'| + # weight = 1 - ---------- + # 2 * RADIUS + weights = (alpha_ - alpha.unsqueeze(-1)).abs_().mul_(-1 / (2 * RADIUS)).add_(1) + weights[~near_hole] = 0.5 + pairs = _unsafe_standard_stable( + alpha_, beta_, aux_uniform_, aux_exponential_, coords=coords + ) + return (pairs * weights).sum(-1) + + +class Stable(TorchDistribution): + r""" + Levy :math:`\alpha`-stable distribution. See [1] for a review. + + This uses Nolan's parametrization [2] of the ``loc`` parameter, which is + required for continuity and differentiability. This corresponds to the + notation :math:`S^0_\alpha(\beta,\sigma,\mu_0)` of [1], where + :math:`\alpha` = stability, :math:`\beta` = skew, :math:`\sigma` = scale, + and :math:`\mu_0` = loc. To instead use the S parameterization as in scipy, + pass ``coords="S"``, but BEWARE this is discontinuous at ``stability=1`` + and has poor geometry for inference. + + This implements a reparametrized sampler :meth:`rsample` , and a relatively + expensive :meth:`log_prob` calculation by numerical integration which makes + inference slow (compared to other distributions) , but with better + convergence properties especially for :math:`\alpha`-stable distributions + that are skewed (see the ``skew`` parameter below). Faster + inference can be performed using either likelihood-free algorithms such as + :class:`~pyro.infer.energy_distance.EnergyDistance`, or reparameterization + via the :func:`~pyro.poutine.handlers.reparam` handler with one of the + reparameterizers :class:`~pyro.infer.reparam.stable.LatentStableReparam` , + :class:`~pyro.infer.reparam.stable.SymmetricStableReparam` , or + :class:`~pyro.infer.reparam.stable.StableReparam` e.g.:: + + with poutine.reparam(config={"x": StableReparam()}): + pyro.sample("x", Stable(stability, skew, scale, loc)) + + or simply wrap in :class:`~pyro.infer.reparam.strategies.MinimalReparam` or + :class:`~pyro.infer.reparam.strategies.AutoReparam` , e.g.:: + + @MinimalReparam() + def model(): + ... + + [1] S. Borak, W. Hardle, R. Weron (2005). + Stable distributions. + https://edoc.hu-berlin.de/bitstream/handle/18452/4526/8.pdf + [2] J.P. Nolan (1997). + Numerical calculation of stable densities and distribution functions. + [3] Rafal Weron (1996). + On the Chambers-Mallows-Stuck Method for + Simulating Skewed Stable Random Variables. + [4] J.P. Nolan (2017). + Stable Distributions: Models for Heavy Tailed Data. + https://edspace.american.edu/jpnolan/wp-content/uploads/sites/1720/2020/09/Chap1.pdf + + :param Tensor stability: Levy stability parameter :math:`\alpha\in(0,2]` . + :param Tensor skew: Skewness :math:`\beta\in[-1,1]` . + :param Tensor scale: Scale :math:`\sigma > 0` . Defaults to 1. + :param Tensor loc: Location :math:`\mu_0` when using Nolan's S0 + parametrization [2], or :math:`\mu` when using the S parameterization. + Defaults to 0. + :param str coords: Either "S0" (default) to use Nolan's continuous S0 + parametrization, or "S" to use the discontinuous parameterization. + """ + + has_rsample = True + arg_constraints = { + "stability": constraints.interval(0, 2), # half-open (0, 2] + "skew": constraints.interval(-1, 1), # closed [-1, 1] + "scale": constraints.positive, + "loc": constraints.real, + } + support = constraints.real + + def __init__( + self, stability, skew, scale=1.0, loc=0.0, coords="S0", validate_args=None + ): + assert coords in ("S", "S0"), coords + self.stability, self.skew, self.scale, self.loc = broadcast_all( + stability, skew, scale, loc + ) + self.coords = coords + super().__init__(self.loc.shape, validate_args=validate_args) + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(Stable, _instance) + batch_shape = torch.Size(batch_shape) + for name in self.arg_constraints: + setattr(new, name, getattr(self, name).expand(batch_shape)) + new.coords = self.coords + super(Stable, new).__init__(batch_shape, validate_args=False) + new._validate_args = self._validate_args + return new + + def log_prob(self, value): + r"""Implemented by numerical integration that is based on the algorithm + proposed by Chambers, Mallows and Stuck (CMS) for simulating the + Levy :math:`\alpha`-stable distribution. The CMS algorithm involves a + nonlinear transformation of two independent random variables into + one stable random variable. The first random variable is uniformly + distributed while the second is exponentially distributed. The numerical + integration is performed over the first uniformly distributed random + variable. + """ + if self._validate_args: + self._validate_sample(value) + + # Undo shift and scale + value = (value - self.loc) / self.scale + value_dtype = value.dtype + + # Use double precision math + alpha = self.stability.double() + beta = self.skew.double() + value = value.double() + + alpha, beta, value = broadcast_all(alpha, beta, value) + + log_prob = _stable_log_prob(alpha, beta, value, self.coords) + + return log_prob.to(dtype=value_dtype) - self.scale.log() + + def rsample(self, sample_shape=torch.Size()): + # Draw parameter-free noise. + with torch.no_grad(): + shape = self._extended_shape(sample_shape) + new_empty = self.stability.new_empty + aux_uniform = new_empty(shape).uniform_(-math.pi / 2, math.pi / 2) + aux_exponential = new_empty(shape).exponential_() + + # Differentiably transform. + x = _standard_stable( + self.stability, self.skew, aux_uniform, aux_exponential, coords=self.coords + ) + return self.loc + self.scale * x + + @property + def mean(self): + result = self.loc + if self.coords == "S0": + result = ( + result - self.scale * self.skew * (math.pi / 2 * self.stability).tan() + ) + return result.masked_fill(self.stability <= 1, math.nan) + + @property + def variance(self): + var = self.scale * self.scale + return var.mul(2).masked_fill(self.stability < 2, math.inf) + + +class StableWithLogProb(Stable): + r""" + Same as :class:`Stable` but will not undergo reparameterization by + :class:`~pyro.infer.reparam.strategies.MinimalReparam` and will fail + reparametrization by + :class:`~pyro.infer.reparam.stable.LatentStableReparam` , + :class:`~pyro.infer.reparam.stable.SymmetricStableReparam` , or + :class:`~pyro.infer.reparam.stable.StableReparam`. + """ diff --git a/pyro/source/pyro/distributions/stable_log_prob.py b/pyro/source/pyro/distributions/stable_log_prob.py new file mode 100644 index 0000000000000000000000000000000000000000..fa173e58f943acf1a80fdf7b92548f97f45ebed6 --- /dev/null +++ b/pyro/source/pyro/distributions/stable_log_prob.py @@ -0,0 +1,204 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import math +from functools import partial + +import torch + +value_near_zero_tolerance_alpha = 0.01 +value_near_zero_tolerance_density = 0.1 +alpha_near_one_tolerance = 0.05 + + +finfo = torch.finfo(torch.float64) +MAX_LOG = math.log10(finfo.max) +MIN_LOG = math.log10(finfo.tiny) + + +def create_integrator(num_points): + from scipy.special import roots_legendre + + roots, weights = roots_legendre(num_points) + roots = torch.Tensor(roots).double() + weights = torch.Tensor(weights).double() + log_weights = weights.log() + half_roots = roots * 0.5 + + def integrate(fn, domain): + sl = [slice(None)] + (len(domain.shape) - 1) * [None] + half_roots_sl = half_roots[sl] + value = domain[0] * (0.5 - half_roots_sl) + domain[1] * (0.5 + half_roots_sl) + return ( + torch.logsumexp(fn(value) + log_weights[sl], dim=0) + + ((domain[1] - domain[0]) / 2).log() + ) + + return integrate + + +def set_integrator(num_points): + global integrate + integrate = create_integrator(num_points) + + +# Stub which is replaced by the default integrator when called for the first time +# if a default integrator has not already been set. +def integrate(*args, **kwargs): # noqa: F811 + set_integrator(num_points=501) + return integrate(*args, **kwargs) + + +def _stable_log_prob(alpha, beta, value, coords): + # Convert to Nolan's parametrization S^0 where samples depend + # continuously on (alpha,beta), allowing interpolation around the hole at + # alpha=1. + if coords == "S": + value = torch.where( + alpha == 1, value, value - beta * (math.pi / 2 * alpha) + ).tan() + elif coords != "S0": + raise ValueError("Unknown coords: {}".format(coords)) + + # Find near one alpha + idx = (alpha - 1).abs() < alpha_near_one_tolerance + + log_prob = _unsafe_alpha_stable_log_prob_S0( + torch.where(idx, 1 + alpha_near_one_tolerance, alpha), beta, value + ) + + # Handle alpha near one by interpolation + if idx.any(): + log_prob_pos = log_prob[idx] + log_prob_neg = _unsafe_alpha_stable_log_prob_S0( + (1 - alpha_near_one_tolerance) * log_prob_pos.new_ones(log_prob_pos.shape), + beta[idx], + value[idx], + ) + weights = (alpha[idx] - 1) / (2 * alpha_near_one_tolerance) + 0.5 + log_prob[idx] = torch.logsumexp( + torch.stack( + (log_prob_pos + weights.log(), log_prob_neg + (1 - weights).log()), + dim=0, + ), + dim=0, + ) + + return log_prob + + +def _unsafe_alpha_stable_log_prob_S0(alpha, beta, Z): + # Calculate log-probability of Z in Nolan's parametrization S^0. This will fail if alpha is close to 1 + + # Convert from Nolan's parametrization S^0 where samples depend + # continuously on (alpha,beta), allowing interpolation around the hole at + # alpha=1. + Z = Z + beta * (math.pi / 2 * alpha).tan() + + # Find near zero values + per_param_value_near_zero_tolerance = ( + value_near_zero_tolerance_alpha * alpha / (1 - alpha).abs() + ).clamp( + max=value_near_zero_tolerance_density + * _unsafe_alpha_stable_log_prob_at_zero(alpha, 0).exp().reciprocal() + ) + idx = Z.abs() < per_param_value_near_zero_tolerance + + # Calculate log-prob at safe values + log_prob = _unsafe_stable_log_prob( + alpha, beta, torch.where(idx, per_param_value_near_zero_tolerance, Z) + ) + + # Handle near zero values by interpolation + if idx.any(): + log_prob_pos = log_prob[idx] + log_prob_neg = _unsafe_stable_log_prob( + alpha[idx], beta[idx], -per_param_value_near_zero_tolerance[idx] + ) + weights = Z[idx] / (2 * per_param_value_near_zero_tolerance[idx]) + 0.5 + log_prob[idx] = torch.logsumexp( + torch.stack( + (log_prob_pos + weights.log(), log_prob_neg + (1 - weights).log()), + dim=0, + ), + dim=0, + ) + + return log_prob + + +def _unsafe_stable_log_prob(alpha, beta, Z): + # Calculate log-probability of Z. This will fail if alpha is close to 1 + # or if Z is close to 0 + ha = math.pi / 2 * alpha + b = beta * ha.tan() + atan_b = b.atan() + u_zero = -alpha.reciprocal() * atan_b + + # If sample should be negative calculate with flipped beta and flipped value + flip_beta_x = Z < 0 + beta = torch.where(flip_beta_x, -beta, beta) + u_zero = torch.where(flip_beta_x, -u_zero, u_zero) + Z = torch.where(flip_beta_x, -Z, Z) + + # Set integration domwin + domain = torch.stack((u_zero, 0.5 * math.pi * u_zero.new_ones(u_zero.shape)), dim=0) + + integrand = partial( + _unsafe_stable_given_uniform_log_prob, alpha=alpha, beta=beta, Z=Z + ) + + return integrate(integrand, domain) - math.log(math.pi) + + +def _unsafe_stable_given_uniform_log_prob(V, alpha, beta, Z): + # Calculate log-probability of Z given V. This will fail if alpha is close to 1 + # or if Z is close to 0 + inv_alpha_minus_one = (alpha - 1).reciprocal() + half_pi = math.pi / 2 + eps = torch.finfo(V.dtype).eps + # make V belong to the open interval (-pi/2, pi/2) + V = V.clamp(min=2 * eps - half_pi, max=half_pi - 2 * eps) + ha = half_pi * alpha + b = beta * ha.tan() + atan_b = b.atan() + cos_V = V.cos() + + # +/- `ha` term to keep the precision of alpha * (V + half_pi) when V ~ -half_pi + v = atan_b - ha + alpha * (V + half_pi) + + term1_log = atan_b.cos().log() * inv_alpha_minus_one + term2_log = (Z * cos_V / v.sin()).log() * alpha * inv_alpha_minus_one + term3_log = ((v - V).cos() / cos_V).log() + + W_log = term1_log + term2_log + term3_log + + W = W_log.clamp(min=MIN_LOG, max=MAX_LOG).exp() + + log_prob = -W + (alpha * W / Z / (alpha - 1)).abs().log() + + # Infinite W means zero-probability + log_prob = torch.where(W == torch.inf, -torch.inf, log_prob) + + log_prob = log_prob.clamp(min=MIN_LOG, max=MAX_LOG) + + return log_prob + + +def _unsafe_alpha_stable_log_prob_at_zero(alpha, beta): + # Calculate log-probability at value of zero. This will fail if alpha is close to 1 + inv_alpha = alpha.reciprocal() + half_pi = math.pi / 2 + ha = half_pi * alpha + b = beta * ha.tan() + atan_b = b.atan() + + term1_log = (inv_alpha * atan_b).cos().log() + term2_log = atan_b.cos().log() * inv_alpha + term3_log = torch.lgamma(1 + inv_alpha) + + log_prob = term1_log - term2_log + term3_log - math.log(math.pi) + + log_prob = log_prob.clamp(min=MIN_LOG, max=MAX_LOG) + + return log_prob diff --git a/pyro/source/pyro/distributions/testing/__init__.py b/pyro/source/pyro/distributions/testing/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..0001884ebdff7af124b7d938e863ee6a0a589522 --- /dev/null +++ b/pyro/source/pyro/distributions/testing/__init__.py @@ -0,0 +1,7 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +This module contains tools for testing new distributions and distributions for +testing new Pyro inference algorithms. +""" diff --git a/pyro/source/pyro/distributions/testing/fakes.py b/pyro/source/pyro/distributions/testing/fakes.py new file mode 100644 index 0000000000000000000000000000000000000000..c19232af52149e2a33d816040fae59f1799df71e --- /dev/null +++ b/pyro/source/pyro/distributions/testing/fakes.py @@ -0,0 +1,20 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from pyro.distributions.torch import Beta, Dirichlet, Gamma, Normal + + +class NonreparameterizedBeta(Beta): + has_rsample = False + + +class NonreparameterizedDirichlet(Dirichlet): + has_rsample = False + + +class NonreparameterizedGamma(Gamma): + has_rsample = False + + +class NonreparameterizedNormal(Normal): + has_rsample = False diff --git a/pyro/source/pyro/distributions/testing/gof.py b/pyro/source/pyro/distributions/testing/gof.py new file mode 100644 index 0000000000000000000000000000000000000000..70d5258194d91a681ea9164910c300159d54ff4c --- /dev/null +++ b/pyro/source/pyro/distributions/testing/gof.py @@ -0,0 +1,292 @@ +# Copyright (c) 2014, Salesforce.com, Inc. All rights reserved. +# Copyright (c) 2015, Gamelan Labs, Inc. +# Copyright (c) 2016, Google, Inc. +# Copyright (c) 2019, Gamalon, Inc. +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 AND BSD-3-Clause + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# - Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# - Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# - Neither the name of Salesforce.com nor the names of its contributors +# may be used to endorse or promote products derived from this +# software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +""" +Goodness of Fit Testing +----------------------- + +This module implements goodness of fit tests for checking agreement between +distributions' ``.sample()`` and ``.log_prob()`` methods. The main functions +return a goodness of fit p-value ``gof`` which for good data should be +``Uniform(0,1)`` distributed and for bad data should be close to zero. To use +this returned number in tests, set a global variable ``TEST_FAILURE_RATE`` to +something smaller than 1 / number of tests in your suite, then in each test +assert ``gof > TEST_FAILURE_RATE``. For example:: + + TEST_FAILURE_RATE = 1 / 20 # For 1 in 20 chance of spurious failure. + + def test_my_distribution(): + d = MyDistribution() + samples = d.sample([10000]) + probs = d.log_prob(samples).exp() + gof = auto_goodness_of_fit(samples, probs) + assert gof > TEST_FAILURE_RATE + +This module is a port of the +`goftests `_ library. +""" + +import math +import warnings + +import torch + +from .special import chi2sf + +HISTOGRAM_WIDTH = 60 + + +class InvalidTest(ValueError): + pass + + +def print_histogram(probs, counts): + max_count = int(max(counts)) + print("{: >8} {: >8}".format("Prob", "Count")) + for prob, count in sorted(zip(probs, counts), reverse=True): + width = int(round(HISTOGRAM_WIDTH * int(count) / max_count)) + print("{: >8.3f} {: >8d} {}".format(prob, count, "-" * width)) + + +@torch.no_grad() +def multinomial_goodness_of_fit( + probs, + counts, + *, + total_count=None, + plot=False, +): + """ + Pearson's chi^2 test, on possibly truncated data. + https://en.wikipedia.org/wiki/Pearson%27s_chi-squared_test + + :param torch.Tensor probs: Vector of probabilities. + :param torch.Tensor counts: Vector of counts. + :param int total_count: Optional total count in case data is truncated, + otherwise None. + :param bool plot: Whether to print a histogram. Defaults to False. + :returns: p-value of truncated multinomial sample. + :rtype: float + """ + assert probs.dim() == 1 + assert probs.shape == counts.shape + if total_count is None: + truncated = False + total_count = int(counts.sum()) + else: + truncated = True + assert total_count >= counts.sum() + if plot: + print_histogram(probs, counts) + + chi_squared = 0 + dof = 0 + for p, c in zip(probs.tolist(), counts.tolist()): + if abs(p - 1) < 1e-8: + return 1 if c == total_count else 0 + assert p < 1, f"bad probability: {p:g}" + if p > 0: + mean = total_count * p + variance = total_count * p * (1 - p) + if not (variance > 1): + raise InvalidTest("Goodness of fit is inaccurate; use more samples") + chi_squared += (c - mean) ** 2 / variance + dof += 1 + else: + warnings.warn("Zero probability in goodness-of-fit test") + if c > 0: + return math.inf + + if not truncated: + dof -= 1 + + survival = chi2sf(chi_squared, dof) + return survival + + +@torch.no_grad() +def unif01_goodness_of_fit(samples, *, plot=False): + """ + Bin uniformly distributed samples and apply Pearson's chi^2 test. + + :param torch.Tensor samples: A vector of real-valued samples from a + candidate distribution that should be Uniform(0, 1)-distributed. + :param bool plot: Whether to print a histogram. Defaults to False. + :returns: Goodness of fit, as a p-value. + :rtype: float + """ + assert samples.min() >= 0 + assert samples.max() <= 1 + bin_count = int(round(len(samples) ** 0.333)) + if bin_count < 7: + raise InvalidTest("imprecise test, use more samples") + probs = torch.ones(bin_count) / bin_count + binned = samples.mul(bin_count).long().clamp(min=0, max=bin_count - 1) + counts = torch.zeros(bin_count) + counts.scatter_add_(0, binned, torch.ones(binned.shape)) + return multinomial_goodness_of_fit(probs, counts, plot=plot) + + +@torch.no_grad() +def exp_goodness_of_fit(samples, plot=False): + """ + Transform exponentially distribued samples to Uniform(0,1) distribution and + assess goodness of fit via binned Pearson's chi^2 test. + + :param torch.Tensor samples: A vector of real-valued samples from a + candidate distribution that should be Exponential(1)-distributed. + :param bool plot: Whether to print a histogram. Defaults to False. + :returns: Goodness of fit, as a p-value. + :rtype: float + """ + unif01_samples = samples.neg().exp() + return unif01_goodness_of_fit(unif01_samples, plot=plot) + + +@torch.no_grad() +def density_goodness_of_fit(samples, probs, plot=False): + """ + Transform arbitrary continuous samples to Uniform(0,1) distribution and + assess goodness of fit via binned Pearson's chi^2 test. + + :param torch.Tensor samples: A vector list of real-valued samples from a + distribution. + :param torch.Tensor probs: A vector of probability densities evaluated at + those samples. + :param bool plot: Whether to print a histogram. Defaults to False. + :returns: Goodness of fit, as a p-value. + :rtype: float + """ + assert samples.shape == probs.shape + if len(samples) <= 100: + raise InvalidTest("imprecision; use more samples") + + samples, index = samples.sort(0) + probs = probs[index] + gaps = samples[1:] - samples[:-1] + + sparsity = 1 / probs + sparsity = 0.5 * (sparsity[1:] + sparsity[:-1]) + density = len(samples) / sparsity + + exp_samples = density * gaps + return exp_goodness_of_fit(exp_samples, plot=plot) + + +def volume_of_sphere(dim, radius): + return radius**dim * math.pi ** (0.5 * dim) / math.gamma(0.5 * dim + 1) + + +def get_nearest_neighbor_distances(samples): + try: + # This version scales as O(N log(N)). + from scipy.spatial import cKDTree + + samples = samples.cpu().numpy() + distances, indices = cKDTree(samples).query(samples, k=2) + return torch.from_numpy(distances[:, 1]) + except ImportError: + # This version scales as O(N^2). + distances, indices = torch.cdist(samples, samples).kthvalue(k=2) + return distances + + +@torch.no_grad() +def vector_density_goodness_of_fit(samples, probs, *, dim=None, plot=False): + """ + Transform arbitrary multivariate continuous samples to Univariate(0,1) + distribution via nearest neighbor distribution [1,2,3] and assess goodness + of fit via binned Pearson's chi^2 test. + + [1] Peter J. Bickel and Leo Breiman (1983) + "Sums of Functions of Nearest Neighbor Distances, Moment Bounds, Limit + Theorems and a Goodness of Fit Test" + https://projecteuclid.org/download/pdf_1/euclid.aop/1176993668 + [2] Mike Williams (2010) + "How good are your fits? Unbinned multivariate goodness-of-fit tests in + high energy physics." + https://arxiv.org/abs/1006.3019 + [3] Nearest Neighbour Distribution + https://en.wikipedia.org/wiki/Nearest_neighbour_distribution + + :param torch.Tensor samples: A tensor of real-vector-valued samples from a + distribution. + :param torch.Tensor probs: A vector of probability densities evaluated at + those samples. + :param int dim: Optional dimension of the submanifold on which data lie. + Defaults to ``samples.shape[-1]``. + :param bool plot: Whether to print a histogram. Defaults to False. + :returns: Goodness of fit, as a p-value. + :rtype: float + """ + assert samples.shape and len(samples) + assert probs.shape == samples.shape[:1] + if dim is None: + dim = samples.shape[-1] + assert dim + if len(samples) <= 1000 * dim: + raise InvalidTest("imprecision; use more samples") + radii = get_nearest_neighbor_distances(samples) + density = len(samples) * probs + volume = volume_of_sphere(dim, radii) + exp_samples = density * volume + return exp_goodness_of_fit(exp_samples, plot=plot) + + +@torch.no_grad() +def auto_goodness_of_fit(samples, probs, *, dim=None, plot=False): + """ + Dispatch on sample dimension and delegate to either + :func:`density_goodness_of_fit` or :func:`vector_density_goodness_of_fit`. + + :param torch.Tensor samples: A tensor of samples stacked on their leftmost + dimension. + :param torch.Tensor probs: A vector of probabilities evaluated at those + samples. + :param int dim: Optional manifold dimension, defaults to + ``samples.shape[1:].numel()``. + :param bool plot: Whether to print a histogram. Defaults to False. + """ + assert samples.shape and samples.shape[0] + assert probs.shape == samples.shape[:1] + + samples = samples.reshape(samples.shape[0], -1) + ambient_dim = samples.shape[1:].numel() + if dim is None: + dim = ambient_dim + + if ambient_dim == 0: + return 1.0 + if ambient_dim == 1: + samples = samples.reshape(-1) + return density_goodness_of_fit(samples, probs, plot=plot) + return vector_density_goodness_of_fit(samples, probs, dim=dim, plot=plot) diff --git a/pyro/source/pyro/distributions/testing/naive_dirichlet.py b/pyro/source/pyro/distributions/testing/naive_dirichlet.py new file mode 100644 index 0000000000000000000000000000000000000000..b9676f1b990d91fb4db9a774d731320892964f3d --- /dev/null +++ b/pyro/source/pyro/distributions/testing/naive_dirichlet.py @@ -0,0 +1,47 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +from pyro.distributions.torch import Beta, Dirichlet, Gamma +from pyro.distributions.util import copy_docs_from + + +@copy_docs_from(Dirichlet) +class NaiveDirichlet(Dirichlet): + """ + Implementation of ``Dirichlet`` via ``Gamma``. + + This naive implementation has stochastic reparameterized gradients, which + have higher variance than PyTorch's ``Dirichlet`` implementation. + """ + + def __init__(self, concentration, validate_args=None): + super().__init__(concentration) + self._gamma = Gamma( + concentration, torch.ones_like(concentration), validate_args=validate_args + ) + + def rsample(self, sample_shape=torch.Size()): + gammas = self._gamma.rsample(sample_shape) + return gammas / gammas.sum(-1, True) + + +@copy_docs_from(Beta) +class NaiveBeta(Beta): + """ + Implementation of ``Beta`` via ``Gamma``. + + This naive implementation has stochastic reparameterized gradients, which + have higher variance than PyTorch's ``Beta`` implementation. + """ + + def __init__(self, concentration1, concentration0, validate_args=None): + super().__init__(concentration1, concentration0, validate_args=validate_args) + alpha_beta = torch.stack([concentration1, concentration0], -1) + self._gamma = Gamma(alpha_beta, torch.ones_like(alpha_beta)) + + def rsample(self, sample_shape=torch.Size()): + gammas = self._gamma.rsample(sample_shape) + probs = gammas / gammas.sum(-1, True) + return probs[..., 0] diff --git a/pyro/source/pyro/distributions/testing/rejection_exponential.py b/pyro/source/pyro/distributions/testing/rejection_exponential.py new file mode 100644 index 0000000000000000000000000000000000000000..1e26120108c7359348cc5fcca28e86a41e5e8215 --- /dev/null +++ b/pyro/source/pyro/distributions/testing/rejection_exponential.py @@ -0,0 +1,37 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions.utils import broadcast_all + +import pyro.distributions.constraints as constraints +from pyro.distributions.rejector import Rejector +from pyro.distributions.torch import Exponential +from pyro.distributions.util import copy_docs_from, weakmethod + + +@copy_docs_from(Exponential) +class RejectionExponential(Rejector): + arg_constraints = {"rate": constraints.positive, "factor": constraints.positive} + support = constraints.positive + + def __init__(self, rate, factor): + assert (factor <= 1).all() + self.rate, self.factor = broadcast_all(rate, factor) + propose = Exponential(self.factor * self.rate) + log_scale = self.factor.log() + super().__init__(propose, self.log_prob_accept, log_scale) + + @weakmethod + def log_prob_accept(self, x): + result = (self.factor - 1) * self.rate * x + assert result.max() <= 0, result.max() + return result + + @property + def batch_shape(self): + return self.rate.shape + + @property + def event_shape(self): + return torch.Size() diff --git a/pyro/source/pyro/distributions/testing/rejection_gamma.py b/pyro/source/pyro/distributions/testing/rejection_gamma.py new file mode 100644 index 0000000000000000000000000000000000000000..facaba008ac226229c6fd6c79d9f4073791c1014 --- /dev/null +++ b/pyro/source/pyro/distributions/testing/rejection_gamma.py @@ -0,0 +1,233 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +from pyro.distributions.rejector import Rejector +from pyro.distributions.score_parts import ScoreParts +from pyro.distributions.torch import Beta, Dirichlet, Gamma, Normal +from pyro.distributions.util import copy_docs_from, weakmethod + + +@copy_docs_from(Gamma) +class RejectionStandardGamma(Rejector): + """ + Naive Marsaglia & Tsang rejection sampler for standard Gamma distibution. + This assumes `concentration >= 1` and does not boost `concentration` or augment shape. + """ + + def __init__(self, concentration): + if concentration.data.min() < 1: + raise NotImplementedError("concentration < 1 is not supported") + self.concentration = concentration + self._standard_gamma = Gamma( + concentration, concentration.new([1.0]).squeeze().expand_as(concentration) + ) + # The following are Marsaglia & Tsang's variable names. + self._d = self.concentration - 1.0 / 3.0 + self._c = 1.0 / torch.sqrt(9.0 * self._d) + # Compute log scale using Gamma.log_prob(). + x = self._d.detach() # just an arbitrary x. + log_scale = ( + self.propose_log_prob(x) + self.log_prob_accept(x) - self.log_prob(x) + ) + super().__init__( + self.propose, + self.log_prob_accept, + log_scale, + batch_shape=concentration.shape, + event_shape=(), + ) + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(RejectionStandardGamma, _instance) + batch_shape = torch.Size(batch_shape) + new.concentration = self.concentration.expand(batch_shape) + new._standard_gamma = self._standard_gamma.expand(batch_shape) + new._d = self._d.expand(batch_shape) + new._c = self._c.expand(batch_shape) + # Compute log scale using Gamma.log_prob(). + x = new._d.detach() # just an arbitrary x. + log_scale = new.propose_log_prob(x) + new.log_prob_accept(x) - new.log_prob(x) + super(RejectionStandardGamma, new).__init__( + new.propose, + new.log_prob_accept, + log_scale, + batch_shape=batch_shape, + event_shape=(), + ) + new._validate_args = self._validate_args + return new + + @weakmethod + def propose(self, sample_shape=torch.Size()): + # Marsaglia & Tsang's x == Naesseth's epsilon` + x = torch.randn( + sample_shape + self.concentration.shape, + dtype=self.concentration.dtype, + device=self.concentration.device, + ) + y = 1.0 + self._c * x + v = y * y * y + return (self._d * v).clamp_(1e-30, 1e30) + + def propose_log_prob(self, value): + v = value / self._d + result = -self._d.log() + y = v.pow(1 / 3) + result -= torch.log(3 * y**2) + x = (y - 1) / self._c + result -= self._c.log() + result += Normal( + torch.zeros_like(self.concentration), torch.ones_like(self.concentration) + ).log_prob(x) + return result + + @weakmethod + def log_prob_accept(self, value): + v = value / self._d + y = torch.pow(v, 1.0 / 3.0) + x = (y - 1.0) / self._c + log_prob_accept = 0.5 * x * x + self._d * (1.0 - v + torch.log(v)) + log_prob_accept[y <= 0] = -float("inf") + return log_prob_accept + + def log_prob(self, x): + return self._standard_gamma.log_prob(x) + + +@copy_docs_from(Gamma) +class RejectionGamma(Gamma): + has_rsample = True + + def __init__(self, concentration, rate, validate_args=None): + super().__init__(concentration, rate, validate_args=validate_args) + self._standard_gamma = RejectionStandardGamma(concentration) + self.rate = rate + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(RejectionGamma, _instance) + new = super().expand(batch_shape, new) + new._standard_gamma = self._standard_gamma.expand(batch_shape) + new._validate_args = self._validate_args + return new + + def rsample(self, sample_shape=torch.Size()): + return self._standard_gamma.rsample(sample_shape) / self.rate + + def log_prob(self, x): + return self._standard_gamma.log_prob(x * self.rate) + torch.log(self.rate) + + def score_parts(self, x): + log_prob, score_function, _ = self._standard_gamma.score_parts(x * self.rate) + log_prob = log_prob + torch.log(self.rate) + return ScoreParts(log_prob, score_function, log_prob) + + +@copy_docs_from(Gamma) +class ShapeAugmentedGamma(Gamma): + """ + This implements the shape augmentation trick of + Naesseth, Ruiz, Linderman, Blei (2017) https://arxiv.org/abs/1610.05683 + """ + + has_rsample = True + + def __init__(self, concentration, rate, boost=1, validate_args=None): + if concentration.min() + boost < 1: + raise ValueError("Need to boost at least once for concentration < 1") + super().__init__(concentration, rate, validate_args=validate_args) + self.concentration = concentration + self._boost = boost + self._rejection_gamma = RejectionGamma(concentration + boost, rate) + self._unboost_x_cache = None, None + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(ShapeAugmentedGamma, _instance) + new = super().expand(batch_shape, new) + batch_shape = torch.Size(batch_shape) + new.concentration = self.concentration.expand(batch_shape) + new._boost = self._boost + new._rejection_gamma = self._rejection_gamma.expand(batch_shape) + new._validate_args = self._validate_args + return new + + def rsample(self, sample_shape=torch.Size()): + x = self._rejection_gamma.rsample(sample_shape) + boosted_x = x.clone() + for i in range(self._boost): + u = torch.rand(x.shape, dtype=x.dtype, device=x.device) + boosted_x *= (1 - u) ** (1 / (i + self.concentration)) + self._unboost_x_cache = boosted_x, x + return boosted_x + + def score_parts(self, boosted_x=None): + if boosted_x is None: + boosted_x = self._unboost_x_cache[0] + assert boosted_x is self._unboost_x_cache[0] + x = self._unboost_x_cache[1] + _, score_function, _ = self._rejection_gamma.score_parts(x) + log_prob = self.log_prob(boosted_x) + return ScoreParts(log_prob, score_function, log_prob) + + +@copy_docs_from(Dirichlet) +class ShapeAugmentedDirichlet(Dirichlet): + """ + Implementation of ``Dirichlet`` via ``ShapeAugmentedGamma``. + + This naive implementation has stochastic reparameterized gradients, which + have higher variance than PyTorch's ``Dirichlet`` implementation. + """ + + def __init__(self, concentration, boost=1, validate_args=None): + super().__init__(concentration, validate_args=validate_args) + self._gamma = ShapeAugmentedGamma( + concentration, torch.ones_like(concentration), boost + ) + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(ShapeAugmentedDirichlet, _instance) + new = super().expand(batch_shape, new) + batch_shape = torch.Size(batch_shape) + new._gamma = self._gamma.expand( + batch_shape + self._gamma.concentration.shape[-1:] + ) + new._validate_args = self._validate_args + return new + + def rsample(self, sample_shape=torch.Size()): + gammas = self._gamma.rsample(sample_shape) + return gammas / gammas.sum(-1, True) + + +@copy_docs_from(Beta) +class ShapeAugmentedBeta(Beta): + """ + Implementation of ``rate`` via ``ShapeAugmentedGamma``. + + This naive implementation has stochastic reparameterized gradients, which + have higher variance than PyTorch's ``rate`` implementation. + """ + + def __init__(self, concentration1, concentration0, boost=1, validate_args=None): + super().__init__(concentration1, concentration0, validate_args=validate_args) + alpha_beta = torch.stack([concentration1, concentration0], -1) + self._gamma = ShapeAugmentedGamma( + alpha_beta, torch.ones_like(alpha_beta), boost + ) + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(ShapeAugmentedBeta, _instance) + new = super().expand(batch_shape, new) + batch_shape = torch.Size(batch_shape) + new._gamma = self._gamma.expand( + batch_shape + self._gamma.concentration.shape[-1:] + ) + new._validate_args = self._validate_args + return new + + def rsample(self, sample_shape=torch.Size()): + gammas = self._gamma.rsample(sample_shape) + probs = gammas / gammas.sum(-1, True) + return probs[..., 0] diff --git a/pyro/source/pyro/distributions/testing/special.py b/pyro/source/pyro/distributions/testing/special.py new file mode 100644 index 0000000000000000000000000000000000000000..6b565862dc0654903a1469ebe6a157297d9caad2 --- /dev/null +++ b/pyro/source/pyro/distributions/testing/special.py @@ -0,0 +1,107 @@ +# Copyright (c) 2014, Salesforce.com, Inc. All rights reserved. +# Copyright (c) 2015-2016, Gamelan Labs, Inc. +# Copyright (c) 2016, Google, Inc. +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 AND BSD-3-Clause + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# - Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# - Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# - Neither the name of Salesforce.com nor the names of its contributors +# may be used to endorse or promote products derived from this +# software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +""" +This module computes the chi^2 survival function and the required +functions. +""" + +import math +import sys + + +def log(x): + if x > sys.float_info.min: + value = math.log(x) + else: + value = -math.inf + return value + + +def incomplete_gamma(x, s): + r""" + This function computes the incomplete lower gamma function + using the series expansion: + + .. math:: + + \gamma(x, s) = x^s \Gamma(s)e^{-x}\sum^\infty_{k=0} + \frac{x^k}{\Gamma(s + k + 1)} + + This series will converge strongly because the Gamma + function grows factorially. + + Because the Gamma function does grow so quickly, we can + run into numerical stability issues. To solve this we carry + out as much math as possible in the log domain to reduce + numerical error. This function matches the results from + scipy to numerical precision. + """ + if x < 0: + return 1 + if x > 1e3: + return math.gamma(s) + log_gamma_s = math.lgamma(s) + log_x = log(x) + value = 0 + for k in range(100): + log_num = (k + s) * log_x + (-x) + log_gamma_s + log_denom = math.lgamma(k + s + 1) + value += math.exp(log_num - log_denom) + return value + + +def chi2sf(x, s): + r""" + This function returns the survival function of the chi^2 + distribution. The survival function is given as: + + .. math:: + 1 - CDF + + where rhe chi^2 CDF is given as + + .. math:: + F(x; s) = \frac{ \gamma( x/2, s/2 ) }{ \Gamma(s/2) }, + + with :math:`\gamma` is the incomplete gamma function defined above. + Therefore, the survival probability is givne by: + + .. math:: + 1 - \frac{ \gamma( x/2, s/2 ) }{ \Gamma(s/2) }. + + This function matches the results from + scipy to numerical precision. + """ + top = incomplete_gamma(x / 2, s / 2) + bottom = math.gamma(s / 2) + value = top / bottom + return 1 - value diff --git a/pyro/source/pyro/distributions/torch.py b/pyro/source/pyro/distributions/torch.py new file mode 100644 index 0000000000000000000000000000000000000000..2f3f255d97688dcf833e9967530686420b63aeb3 --- /dev/null +++ b/pyro/source/pyro/distributions/torch.py @@ -0,0 +1,437 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math +import re +import textwrap + +import torch + +from pyro.distributions.torch_distribution import TorchDistributionMixin +from pyro.distributions.util import broadcast_shape, sum_rightmost +from pyro.ops.special import log_binomial + +from .. import settings +from . import constraints + + +def _clamp_by_zero(x): + # works like clamp(x, min=0) but has grad at 0 is 0.5 + return (x.clamp(min=0) + x - x.clamp(max=0)) / 2 + + +class Beta(torch.distributions.Beta, TorchDistributionMixin): + def conjugate_update(self, other): + """ + EXPERIMENTAL. + """ + assert isinstance(other, Beta) + concentration1 = self.concentration1 + other.concentration1 - 1 + concentration0 = self.concentration0 + other.concentration0 - 1 + updated = Beta(concentration1, concentration0) + + def _log_normalizer(d): + x = d.concentration1 + y = d.concentration0 + return (x + y).lgamma() - x.lgamma() - y.lgamma() + + log_normalizer = ( + _log_normalizer(self) + _log_normalizer(other) - _log_normalizer(updated) + ) + return updated, log_normalizer + + +class Binomial(torch.distributions.Binomial, TorchDistributionMixin): + # EXPERIMENTAL threshold on total_count above which sampling will use a + # clamped Poisson approximation for Binomial samples. This is useful for + # sampling very large populations. + approx_sample_thresh = math.inf + + # EXPERIMENTAL If set to a positive value, the .log_prob() method will use + # a shifted Sterling's approximation to the Beta function, reducing + # computational cost from 3 lgamma() evaluations to 4 log() evaluations + # plus arithmetic. Recommended values are between 0.1 and 0.01. + approx_log_prob_tol = 0.0 + + def sample(self, sample_shape=torch.Size()): + if self.approx_sample_thresh < math.inf: + exact = self.total_count <= self.approx_sample_thresh + if not exact.all(): + # Approximate large counts with a moment-matched clamped Poisson. + with torch.no_grad(): + shape = self._extended_shape(sample_shape) + p = self.probs + q = 1 - self.probs + mean = torch.min(p, q) * self.total_count + variance = p * q * self.total_count + shift = (mean - variance).round() + result = torch.poisson(variance.expand(shape)) + result = torch.min(result + shift, self.total_count) + sample = torch.where(p < q, result, self.total_count - result) + # Draw exact samples for remaining items. + if exact.any(): + total_count = torch.where( + exact, self.total_count, torch.zeros_like(self.total_count) + ) + exact_sample = torch.distributions.Binomial( + total_count, self.probs, validate_args=False + ).sample(sample_shape) + sample = torch.where(exact, exact_sample, sample) + return sample + return super().sample(sample_shape) + + def log_prob(self, value): + if self._validate_args: + self._validate_sample(value) + + n = self.total_count + k = value + # k * log(p) + (n - k) * log(1 - p) = k * (log(p) - log(1 - p)) + n * log(1 - p) + # (case logit < 0) = k * logit - n * log1p(e^logit) + # (case logit > 0) = k * logit - n * (log(p) - log(1 - p)) + n * log(p) + # = k * logit - n * logit - n * log1p(e^-logit) + # (merge two cases) = k * logit - n * max(logit, 0) - n * log1p(e^-|logit|) + normalize_term = n * ( + _clamp_by_zero(self.logits) + self.logits.abs().neg().exp().log1p() + ) + return ( + k * self.logits + - normalize_term + + log_binomial(n, k, tol=self.approx_log_prob_tol) + ) + + +@settings.register( + "binomial_approx_sample_thresh", __name__, "Binomial.approx_sample_thresh" +) +def _validate_thresh(thresh): + assert isinstance(thresh, float) + assert 0 < thresh + + +@settings.register( + "binomial_approx_log_prob_tol", __name__, "Binomial.approx_log_prob_tol" +) +def _validate_tol(tol): + assert isinstance(tol, float) + assert 0 <= tol + + +# This overloads .log_prob() and .enumerate_support() to speed up evaluating +# log_prob on the support of this variable: we can completely avoid tensor ops +# and merely reshape the self.logits tensor. This is especially important for +# Pyro models that use enumeration. +class Categorical(torch.distributions.Categorical, TorchDistributionMixin): + arg_constraints = {"probs": constraints.simplex, "logits": constraints.real_vector} + + def log_prob(self, value): + if getattr(value, "_pyro_categorical_support", None) == id(self): + # Assume value is a reshaped torch.arange(event_shape[0]). + # In this case we can call .reshape() rather than torch.gather(). + if not torch._C._get_tracing_state(): + if self._validate_args: + self._validate_sample(value) + assert value.size(0) == self.logits.size(-1) + logits = self.logits + if logits.dim() <= value.dim(): + logits = logits.reshape( + (1,) * (1 + value.dim() - logits.dim()) + logits.shape + ) + if not torch._C._get_tracing_state(): + assert logits.size(-1 - value.dim()) == 1 + return logits.transpose(-1 - value.dim(), -1).squeeze(-1) + return super().log_prob(value) + + def enumerate_support(self, expand=True): + result = super().enumerate_support(expand=expand) + if not expand: + result._pyro_categorical_support = id(self) + return result + + +class Dirichlet(torch.distributions.Dirichlet, TorchDistributionMixin): + @staticmethod + def infer_shapes(concentration): + batch_shape = concentration[:-1] + event_shape = concentration[-1:] + return batch_shape, event_shape + + def conjugate_update(self, other): + """ + EXPERIMENTAL. + """ + assert isinstance(other, Dirichlet) + concentration = self.concentration + other.concentration - 1 + updated = Dirichlet(concentration) + + def _log_normalizer(d): + c = d.concentration + return c.sum(-1).lgamma() - c.lgamma().sum(-1) + + log_normalizer = ( + _log_normalizer(self) + _log_normalizer(other) - _log_normalizer(updated) + ) + return updated, log_normalizer + + +class Gamma(torch.distributions.Gamma, TorchDistributionMixin): + def conjugate_update(self, other): + """ + EXPERIMENTAL. + """ + assert isinstance(other, Gamma) + concentration = self.concentration + other.concentration - 1 + rate = self.rate + other.rate + updated = Gamma(concentration, rate) + + def _log_normalizer(d): + c = d.concentration + return d.rate.log() * c - c.lgamma() + + log_normalizer = ( + _log_normalizer(self) + _log_normalizer(other) - _log_normalizer(updated) + ) + return updated, log_normalizer + + +class Geometric(torch.distributions.Geometric, TorchDistributionMixin): + # TODO: move upstream + def log_prob(self, value): + if self._validate_args: + self._validate_sample(value) + return (-value - 1) * torch.nn.functional.softplus(self.logits) + self.logits + + +class LogNormal(torch.distributions.LogNormal, TorchDistributionMixin): + def __init__(self, loc, scale, validate_args=None): + base_dist = Normal(loc, scale) + # This differs from torch.distributions.LogNormal only in that base_dist is + # a pyro.distributions.Normal rather than a torch.distributions.Normal. + super(torch.distributions.LogNormal, self).__init__( + base_dist, + torch.distributions.transforms.ExpTransform(), + validate_args=validate_args, + ) + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(LogNormal, _instance) + return super(torch.distributions.LogNormal, self).expand( + batch_shape, _instance=new + ) + + +class LowRankMultivariateNormal( + torch.distributions.LowRankMultivariateNormal, TorchDistributionMixin +): + @staticmethod + def infer_shapes(loc, cov_factor, cov_diag): + event_shape = loc[-1:] + batch_shape = broadcast_shape(loc[:-1], cov_factor[:-2], cov_diag[:-1]) + return batch_shape, event_shape + + +class MultivariateNormal( + torch.distributions.MultivariateNormal, TorchDistributionMixin +): + @staticmethod + def infer_shapes( + loc, covariance_matrix=None, precision_matrix=None, scale_tril=None + ): + batch_shape, event_shape = loc[:-1], loc[-1:] + for matrix in [covariance_matrix, precision_matrix, scale_tril]: + if matrix is not None: + batch_shape = broadcast_shape(batch_shape, matrix[:-2]) + return batch_shape, event_shape + + +class Multinomial(torch.distributions.Multinomial, TorchDistributionMixin): + def infer_shapes(total_count=None, probs=None, logits=None): + tensor = probs if logits is None else logits + batch_shape, event_shape = tensor[:-1], tensor[-1:] + if isinstance(total_count, tuple): + batch_shape = broadcast_shape(batch_shape, total_count) + return batch_shape, event_shape + + +class Normal(torch.distributions.Normal, TorchDistributionMixin): + pass + + +class OneHotCategorical(torch.distributions.OneHotCategorical, TorchDistributionMixin): + @staticmethod + def infer_shapes(probs=None, logits=None): + tensor = probs if logits is None else logits + event_shape = tensor[-1:] + batch_shape = tensor[:-1] + return batch_shape, event_shape + + +class Poisson(torch.distributions.Poisson, TorchDistributionMixin): + def __init__(self, rate, *, is_sparse=False, validate_args=None): + self.is_sparse = is_sparse + super().__init__(rate, validate_args=validate_args) + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(Poisson, _instance) + new = super().expand(batch_shape, _instance=new) + new.is_sparse = self.is_sparse + return new + + def log_prob(self, value): + if not self.is_sparse: + return super().log_prob(value) + if self._validate_args: + self._validate_sample(value) + rate, value, nonzero = torch.broadcast_tensors(self.rate, value, value > 0) + sparse_rate = rate[nonzero] + sparse_value = value[nonzero] + return ( + torch.zeros_like(rate).masked_scatter( + nonzero, + (sparse_rate.log() * sparse_value) - (sparse_value + 1).lgamma(), + ) + - rate + ) + + +class Independent(torch.distributions.Independent, TorchDistributionMixin): + @staticmethod + def infer_shapes(**kwargs): + raise NotImplementedError + + @property + def _validate_args(self): + return self.base_dist._validate_args + + @_validate_args.setter + def _validate_args(self, value): + self.base_dist._validate_args = value + + def conjugate_update(self, other): + """ + EXPERIMENTAL. + """ + n = self.reintepreted_batch_ndims + updated, log_normalizer = self.base_dist.conjugate_update(other.to_event(-n)) + updated = updated.to_event(n) + log_normalizer = sum_rightmost(log_normalizer, n) + return updated, log_normalizer + + +class Uniform(torch.distributions.Uniform, TorchDistributionMixin): + def __init__(self, low, high, validate_args=None): + self._unbroadcasted_low = low + self._unbroadcasted_high = high + super().__init__(low, high, validate_args=validate_args) + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(Uniform, _instance) + new = super().expand(batch_shape, _instance=new) + new._unbroadcasted_low = self._unbroadcasted_low + new._unbroadcasted_high = self._unbroadcasted_high + return new + + @constraints.dependent_property(is_discrete=False, event_dim=0) + def support(self): + return constraints.interval(self._unbroadcasted_low, self._unbroadcasted_high) + + +def _cat_docstrings(*docstrings): + result = "\n".join(textwrap.dedent(s.lstrip("\n")) for s in docstrings) + result = re.sub("\n\n+", "\n\n", result) + # Drop torch-specific lines. + result = "".join( + line for line in result.splitlines(keepends=True) if "xdoctest" not in line + ) + return result + + +# Add static imports to help mypy. +__all__ = [ # noqa: F822 + "Bernoulli", + "Beta", + "Binomial", + "Categorical", + "Cauchy", + "Chi2", + "ContinuousBernoulli", + "Dirichlet", + "ExponentialFamily", + "Exponential", + "FisherSnedecor", + "Gamma", + "Geometric", + "Gumbel", + "HalfCauchy", + "HalfNormal", + "Independent", + "Kumaraswamy", + "Laplace", + "LKJCholesky", + "LogNormal", + "LogisticNormal", + "LowRankMultivariateNormal", + "MixtureSameFamily", + "Multinomial", + "MultivariateNormal", + "NegativeBinomial", + "Normal", + "OneHotCategorical", + "OneHotCategoricalStraightThrough", + "Pareto", + "Poisson", + "RelaxedBernoulli", + "RelaxedOneHotCategorical", + "StudentT", + "TransformedDistribution", + "Uniform", + "VonMises", + "Weibull", + "Wishart", +] + +# Programmatically load all distributions from PyTorch, +# updating __all__ to include any new distributions. +for _name, _Dist in torch.distributions.__dict__.items(): + if not isinstance(_Dist, type): + continue + if not issubclass(_Dist, torch.distributions.Distribution): + continue + if _Dist is torch.distributions.Distribution: + continue + + try: + _PyroDist = locals()[_name] + except KeyError: + _PyroDist = type(_name, (_Dist, TorchDistributionMixin), {}) + _PyroDist.__module__ = __name__ + locals()[_name] = _PyroDist + + _PyroDist.__doc__ = """ + Wraps :class:`{}.{}` with + :class:`~pyro.distributions.torch_distribution.TorchDistributionMixin`. + + """.format( + _Dist.__module__, _Dist.__name__ + ) + _PyroDist.__doc__ = _cat_docstrings(_PyroDist.__doc__, _Dist.__doc__) + __all__.append(_name) +__all__ = sorted(set(__all__)) + + +# Create sphinx documentation. +__doc__ = "\n\n".join( + [ + """ + {0} + ---------------------------------------------------------------- + .. autoclass:: pyro.distributions.{0} + """.format( + _name + ) + for _name in sorted(__all__) + # Work around sphinx autodoc error in case two InverseGamma's are defined: + # "duplicate object description of pyro.distributions.InverseGamma" + if _name != "InverseGamma" + ] +) diff --git a/pyro/source/pyro/distributions/torch_distribution.py b/pyro/source/pyro/distributions/torch_distribution.py new file mode 100644 index 0000000000000000000000000000000000000000..ace02da72a8572ef3838491eb440d749f8c88e38 --- /dev/null +++ b/pyro/source/pyro/distributions/torch_distribution.py @@ -0,0 +1,547 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import warnings +from collections import OrderedDict +from typing import Callable + +import torch +from torch.distributions.kl import kl_divergence, register_kl + +import pyro.distributions.torch + +from . import constraints +from .distribution import Distribution +from .score_parts import ScoreParts +from .util import broadcast_shape, scale_and_mask + + +class TorchDistributionMixin(Distribution, Callable): + """ + Mixin to provide Pyro compatibility for PyTorch distributions. + + You should instead use `TorchDistribution` for new distribution classes. + + This is mainly useful for wrapping existing PyTorch distributions for + use in Pyro. Derived classes must first inherit from + :class:`torch.distributions.distribution.Distribution` and then inherit + from :class:`TorchDistributionMixin`. + """ + + def __call__(self, sample_shape: torch.Size = torch.Size()) -> torch.Tensor: + """ + Samples a random value. + + This is reparameterized whenever possible, calling + :meth:`~torch.distributions.distribution.Distribution.rsample` for + reparameterized distributions and + :meth:`~torch.distributions.distribution.Distribution.sample` for + non-reparameterized distributions. + + :param sample_shape: the size of the iid batch to be drawn from the + distribution. + :type sample_shape: torch.Size + :return: A random value or batch of random values (if parameters are + batched). The shape of the result should be `self.shape()`. + :rtype: torch.Tensor + """ + return ( + self.rsample(sample_shape) + if self.has_rsample + else self.sample(sample_shape) + ) + + @property + def batch_shape(self) -> torch.Size: + """ + :return: The shape over which parameters are batched. + :rtype: torch.Size + """ + raise NotImplementedError + + @property + def event_shape(self) -> torch.Size: + """ + :return: The shape of a single sample from the distribution (without batching). + :rtype: torch.Size + """ + raise NotImplementedError + + @property + def event_dim(self) -> int: + """ + :return: Number of dimensions of individual events. + :rtype: int + """ + return len(self.event_shape) + + def shape(self, sample_shape=torch.Size()): + """ + The tensor shape of samples from this distribution. + + Samples are of shape:: + + d.shape(sample_shape) == sample_shape + d.batch_shape + d.event_shape + + :param sample_shape: the size of the iid batch to be drawn from the + distribution. + :type sample_shape: torch.Size + :return: Tensor shape of samples. + :rtype: torch.Size + """ + return sample_shape + self.batch_shape + self.event_shape + + @classmethod + def infer_shapes(cls, **arg_shapes): + r""" + Infers ``batch_shape`` and ``event_shape`` given shapes of args to + :meth:`__init__`. + + .. note:: This assumes distribution shape depends only on the shapes + of tensor inputs, not in the data contained in those inputs. + + :param \*\*arg_shapes: Keywords mapping name of input arg to + :class:`torch.Size` or tuple representing the sizes of each + tensor input. + :returns: A pair ``(batch_shape, event_shape)`` of the shapes of a + distribution that would be created with input args of the given + shapes. + :rtype: tuple + """ + if cls.support.event_dim > 0: + raise NotImplementedError + # Assumes distribution is univariate. + batch_shapes = [] + for name, shape in arg_shapes.items(): + event_dim = cls.arg_constraints.get(name, constraints.real).event_dim + batch_shapes.append(shape[: len(shape) - event_dim]) + batch_shape = torch.Size(broadcast_shape(*batch_shapes)) + event_shape = torch.Size() + return batch_shape, event_shape + + def expand(self, batch_shape, _instance=None) -> "ExpandedDistribution": + """ + Returns a new :class:`ExpandedDistribution` instance with batch + dimensions expanded to `batch_shape`. + + :param tuple batch_shape: batch shape to expand to. + :param _instance: unused argument for compatibility with + :meth:`torch.distributions.Distribution.expand` + :return: an instance of `ExpandedDistribution`. + :rtype: :class:`ExpandedDistribution` + """ + return ExpandedDistribution(self, batch_shape) + + def expand_by(self, sample_shape): + """ + Expands a distribution by adding ``sample_shape`` to the left side of + its :attr:`~torch.distributions.distribution.Distribution.batch_shape`. + + To expand internal dims of ``self.batch_shape`` from 1 to something + larger, use :meth:`expand` instead. + + :param torch.Size sample_shape: The size of the iid batch to be drawn + from the distribution. + :return: An expanded version of this distribution. + :rtype: :class:`ExpandedDistribution` + """ + try: + expanded_dist = self.expand(torch.Size(sample_shape) + self.batch_shape) + except NotImplementedError: + expanded_dist = TorchDistributionMixin.expand( + self, torch.Size(sample_shape) + self.batch_shape + ) + return expanded_dist + + def reshape(self, sample_shape=None, extra_event_dims=None): + raise Exception( + """ + .reshape(sample_shape=s, extra_event_dims=n) was renamed and split into + .expand_by(sample_shape=s).to_event(reinterpreted_batch_ndims=n).""" + ) + + def to_event(self, reinterpreted_batch_ndims=None): + """ + Reinterprets the ``n`` rightmost dimensions of this distributions + :attr:`~torch.distributions.distribution.Distribution.batch_shape` + as event dims, adding them to the left side of + :attr:`~torch.distributions.distribution.Distribution.event_shape`. + + Example: + + .. doctest:: + :hide: + + >>> d0 = dist.Normal(torch.zeros(2, 3, 4, 5), torch.ones(2, 3, 4, 5)) + >>> [d0.batch_shape, d0.event_shape] + [torch.Size([2, 3, 4, 5]), torch.Size([])] + >>> d1 = d0.to_event(2) + + >>> [d1.batch_shape, d1.event_shape] + [torch.Size([2, 3]), torch.Size([4, 5])] + >>> d2 = d1.to_event(1) + >>> [d2.batch_shape, d2.event_shape] + [torch.Size([2]), torch.Size([3, 4, 5])] + >>> d3 = d1.to_event(2) + >>> [d3.batch_shape, d3.event_shape] + [torch.Size([]), torch.Size([2, 3, 4, 5])] + + :param int reinterpreted_batch_ndims: The number of batch dimensions to + reinterpret as event dimensions. May be negative to remove + dimensions from an :class:`pyro.distributions.torch.Independent` . + If None, convert all dimensions to event dimensions. + :return: A reshaped version of this distribution. + :rtype: :class:`pyro.distributions.torch.Independent` + """ + if reinterpreted_batch_ndims is None: + reinterpreted_batch_ndims = len(self.batch_shape) + + # Deconstruct Independent distributions. + base_dist = self + while isinstance(base_dist, torch.distributions.Independent): + reinterpreted_batch_ndims += base_dist.reinterpreted_batch_ndims + base_dist = base_dist.base_dist + + if reinterpreted_batch_ndims == 0: + return base_dist + if reinterpreted_batch_ndims < 0: + raise ValueError( + "Cannot remove event dimensions from {}".format(type(self)) + ) + return pyro.distributions.torch.Independent( + base_dist, reinterpreted_batch_ndims + ) + + def independent(self, reinterpreted_batch_ndims=None): + warnings.warn( + "independent is deprecated; use to_event instead", DeprecationWarning + ) + return self.to_event(reinterpreted_batch_ndims=reinterpreted_batch_ndims) + + def mask(self, mask): + """ + Masks a distribution by a boolean or boolean-valued tensor that is + broadcastable to the distributions + :attr:`~torch.distributions.distribution.Distribution.batch_shape` . + + :param mask: A boolean or boolean valued tensor. + :type mask: bool or torch.Tensor + :return: A masked copy of this distribution. + :rtype: :class:`MaskedDistribution` + """ + return MaskedDistribution(self, mask) + + +class TorchDistribution(torch.distributions.Distribution, TorchDistributionMixin): + """ + Base class for PyTorch-compatible distributions with Pyro support. + + This should be the base class for almost all new Pyro distributions. + + .. note:: + + Parameters and data should be of type :class:`~torch.Tensor` + and all methods return type :class:`~torch.Tensor` unless + otherwise noted. + + **Tensor Shapes**: + + TorchDistributions provide a method ``.shape()`` for the tensor shape of samples:: + + x = d.sample(sample_shape) + assert x.shape == d.shape(sample_shape) + + Pyro follows the same distribution shape semantics as PyTorch. It distinguishes + between three different roles for tensor shapes of samples: + + - *sample shape* corresponds to the shape of the iid samples drawn from the distribution. + This is taken as an argument by the distribution's `sample` method. + - *batch shape* corresponds to non-identical (independent) parameterizations of + the distribution, inferred from the distribution's parameter shapes. This is + fixed for a distribution instance. + - *event shape* corresponds to the event dimensions of the distribution, which + is fixed for a distribution class. These are collapsed when we try to score + a sample from the distribution via `d.log_prob(x)`. + + These shapes are related by the equation:: + + assert d.shape(sample_shape) == sample_shape + d.batch_shape + d.event_shape + + Distributions provide a vectorized + :meth:`~torch.distributions.distribution.Distribution.log_prob` method that + evaluates the log probability density of each event in a batch + independently, returning a tensor of shape + ``sample_shape + d.batch_shape``:: + + x = d.sample(sample_shape) + assert x.shape == d.shape(sample_shape) + log_p = d.log_prob(x) + assert log_p.shape == sample_shape + d.batch_shape + + **Implementing New Distributions**: + + Derived classes must implement the methods + :meth:`~torch.distributions.distribution.Distribution.sample` + (or :meth:`~torch.distributions.distribution.Distribution.rsample` if + ``.has_rsample == True``) and + :meth:`~torch.distributions.distribution.Distribution.log_prob`, and must + implement the properties + :attr:`~torch.distributions.distribution.Distribution.batch_shape`, + and :attr:`~torch.distributions.distribution.Distribution.event_shape`. + Discrete classes may also implement the + :meth:`~torch.distributions.distribution.Distribution.enumerate_support` + method to improve gradient estimates and set + ``.has_enumerate_support = True``. + """ + + # Provides a default `.expand` method for Pyro distributions which overrides + # torch.distributions.Distribution.expand (throws a NotImplementedError). + expand = TorchDistributionMixin.expand + + +class MaskedDistribution(TorchDistribution): + """ + Masks a distribution by a boolean tensor that is broadcastable to the + distribution's :attr:`~torch.distributions.distribution.Distribution.batch_shape`. + + In the special case ``mask is False``, computation of :meth:`log_prob` , + :meth:`score_parts` , and ``kl_divergence()`` is skipped, and constant zero + values are returned instead. + + :param mask: A boolean or boolean-valued tensor. + :type mask: torch.Tensor or bool + """ + + arg_constraints = {} + + def __init__(self, base_dist, mask): + if isinstance(mask, bool): + self._mask = mask + else: + batch_shape = broadcast_shape(mask.shape, base_dist.batch_shape) + if mask.shape != batch_shape: + mask = mask.expand(batch_shape) + if base_dist.batch_shape != batch_shape: + base_dist = base_dist.expand(batch_shape) + self._mask = mask.bool() + self.base_dist = base_dist + super().__init__(base_dist.batch_shape, base_dist.event_shape) + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(MaskedDistribution, _instance) + batch_shape = torch.Size(batch_shape) + new.base_dist = self.base_dist.expand(batch_shape) + new._mask = self._mask + if isinstance(new._mask, torch.Tensor): + new._mask = new._mask.expand(batch_shape) + super(MaskedDistribution, new).__init__( + batch_shape, self.event_shape, validate_args=False + ) + new._validate_args = self._validate_args + return new + + @property + def has_rsample(self): + return self.base_dist.has_rsample + + @property + def has_enumerate_support(self): + return self.base_dist.has_enumerate_support + + @constraints.dependent_property + def support(self): + return self.base_dist.support + + def sample(self, sample_shape=torch.Size()): + return self.base_dist.sample(sample_shape) + + def rsample(self, sample_shape=torch.Size()): + return self.base_dist.rsample(sample_shape) + + def log_prob(self, value): + if self._mask is False: + shape = broadcast_shape( + self.base_dist.batch_shape, value.shape[: value.dim() - self.event_dim] + ) + return torch.zeros((), device=value.device).expand(shape) + if self._mask is True: + return self.base_dist.log_prob(value) + return scale_and_mask(self.base_dist.log_prob(value), mask=self._mask) + + def score_parts(self, value): + if isinstance(self._mask, bool): + return super().score_parts(value) # calls self.log_prob(value) + return self.base_dist.score_parts(value).scale_and_mask(mask=self._mask) + + def enumerate_support(self, expand=True): + return self.base_dist.enumerate_support(expand=expand) + + @property + def mean(self): + return self.base_dist.mean + + @property + def variance(self): + return self.base_dist.variance + + def conjugate_update(self, other): + """ + EXPERIMENTAL. + """ + updated, log_normalizer = self.base_dist.conjugate_update(other) + updated = updated.mask(self._mask) + log_normalizer = torch.where( + self._mask, log_normalizer, torch.zeros_like(log_normalizer) + ) + return updated, log_normalizer + + +class ExpandedDistribution(TorchDistribution): + arg_constraints = {} + + def __init__(self, base_dist, batch_shape=torch.Size()): + self.base_dist = base_dist + super().__init__(base_dist.batch_shape, base_dist.event_shape) + # adjust batch shape + self.expand(batch_shape) + + def expand(self, batch_shape, _instance=None): + # Do basic validation. e.g. we should not "unexpand" distributions even if that is possible. + new_shape, _, _ = self._broadcast_shape(self.batch_shape, batch_shape) + # Record interstitial and expanded dims/sizes w.r.t. the base distribution + new_shape, expanded_sizes, interstitial_sizes = self._broadcast_shape( + self.base_dist.batch_shape, new_shape + ) + self._batch_shape = new_shape + self._expanded_sizes = expanded_sizes + self._interstitial_sizes = interstitial_sizes + return self + + @staticmethod + def _broadcast_shape(existing_shape, new_shape): + if len(new_shape) < len(existing_shape): + raise ValueError( + "Cannot broadcast distribution of shape {} to shape {}".format( + existing_shape, new_shape + ) + ) + reversed_shape = list(reversed(existing_shape)) + expanded_sizes, interstitial_sizes = [], [] + for i, size in enumerate(reversed(new_shape)): + if i >= len(reversed_shape): + reversed_shape.append(size) + expanded_sizes.append((-i - 1, size)) + elif reversed_shape[i] == 1: + if size != 1: + reversed_shape[i] = size + interstitial_sizes.append((-i - 1, size)) + elif reversed_shape[i] != size: + raise ValueError( + "Cannot broadcast distribution of shape {} to shape {}".format( + existing_shape, new_shape + ) + ) + return ( + tuple(reversed(reversed_shape)), + OrderedDict(expanded_sizes), + OrderedDict(interstitial_sizes), + ) + + @property + def has_rsample(self): + return self.base_dist.has_rsample + + @property + def has_enumerate_support(self): + return self.base_dist.has_enumerate_support + + @constraints.dependent_property + def support(self): + return self.base_dist.support + + def _sample(self, sample_fn, sample_shape): + interstitial_dims = tuple(self._interstitial_sizes.keys()) + interstitial_dims = tuple(i - self.event_dim for i in interstitial_dims) + interstitial_sizes = tuple(self._interstitial_sizes.values()) + expanded_sizes = tuple(self._expanded_sizes.values()) + batch_shape = expanded_sizes + interstitial_sizes + samples = sample_fn(sample_shape + batch_shape) + interstitial_idx = len(sample_shape) + len(expanded_sizes) + interstitial_sample_dims = tuple( + range(interstitial_idx, interstitial_idx + len(interstitial_sizes)) + ) + for dim1, dim2 in zip(interstitial_dims, interstitial_sample_dims): + samples = samples.transpose(dim1, dim2) + return samples.reshape(sample_shape + self.batch_shape + self.event_shape) + + def sample(self, sample_shape=torch.Size()): + return self._sample(self.base_dist.sample, sample_shape) + + def rsample(self, sample_shape=torch.Size()): + return self._sample(self.base_dist.rsample, sample_shape) + + def log_prob(self, value): + shape = broadcast_shape( + self.batch_shape, value.shape[: value.dim() - self.event_dim] + ) + log_prob = self.base_dist.log_prob(value) + return log_prob.expand(shape) + + def score_parts(self, value): + shape = broadcast_shape( + self.batch_shape, value.shape[: value.dim() - self.event_dim] + ) + log_prob, score_function, entropy_term = self.base_dist.score_parts(value) + if self.batch_shape != self.base_dist.batch_shape: + log_prob = log_prob.expand(shape) + if isinstance(score_function, torch.Tensor): + score_function = score_function.expand(shape) + if isinstance(entropy_term, torch.Tensor): + entropy_term = entropy_term.expand(shape) + return ScoreParts(log_prob, score_function, entropy_term) + + def enumerate_support(self, expand=True): + samples = self.base_dist.enumerate_support(expand=False) + enum_shape = samples.shape[:1] + samples = samples.reshape(enum_shape + (1,) * len(self.batch_shape)) + if expand: + samples = samples.expand(enum_shape + self.batch_shape) + return samples + + @property + def mean(self): + return self.base_dist.mean.expand(self.batch_shape + self.event_shape) + + @property + def variance(self): + return self.base_dist.variance.expand(self.batch_shape + self.event_shape) + + def conjugate_update(self, other): + """ + EXPERIMENTAL. + """ + updated, log_normalizer = self.base_dist.conjugate_update(other) + updated = updated.expand(self.batch_shape) + log_normalizer = log_normalizer.expand(self.batch_shape) + return updated, log_normalizer + + +@register_kl(MaskedDistribution, MaskedDistribution) +def _kl_masked_masked(p, q): + if p._mask is False or q._mask is False: + mask = False + elif p._mask is True: + mask = q._mask + elif q._mask is True: + mask = p._mask + elif p._mask is q._mask: + mask = p._mask + else: + mask = p._mask & q._mask + + if mask is False: + return 0.0 # Return a float, since we cannot determine device. + if mask is True: + return kl_divergence(p.base_dist, q.base_dist) + kl = kl_divergence(p.base_dist, q.base_dist) + return scale_and_mask(kl, mask=mask) diff --git a/pyro/source/pyro/distributions/torch_patch.py b/pyro/source/pyro/distributions/torch_patch.py new file mode 100644 index 0000000000000000000000000000000000000000..3a93d72780778400e81a543420061987f4424d8d --- /dev/null +++ b/pyro/source/pyro/distributions/torch_patch.py @@ -0,0 +1,95 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import functools +import math +import warnings +import weakref + +import torch + + +def patch_dependency(target, root_module=torch): + try: + parts = target.split(".") + assert parts[0] == root_module.__name__ + module = root_module + for part in parts[1:-1]: + module = getattr(module, part) + name = parts[-1] + old_fn = getattr(module, name, None) + # Ensure patching is idempotent. + old_fn = getattr(old_fn, "_pyro_unpatched", old_fn) + + def decorator(new_fn): + try: + functools.update_wrapper(new_fn, old_fn) + except Exception: + for attr in functools.WRAPPER_ASSIGNMENTS: + if hasattr(old_fn, attr): + setattr(new_fn, attr, getattr(old_fn, attr)) + new_fn._pyro_unpatched = old_fn + setattr(module, name, new_fn) + return new_fn + + except AttributeError: + warnings.warn(f"pyro patch_dependency target is stale: {target}") + + def decorator(new_fn): + return new_fn + + return decorator + + +# TODO: Move upstream to allow for pickle serialization of transforms +@patch_dependency("torch.distributions.transforms.Transform.__getstate__") +def _Transform__getstate__(self): + super_ = super(torch.distributions.transforms.Transform, self) + state = getattr(super_, "__getstate__", self.__dict__.copy)() + for k, v in state.items(): + if isinstance(v, weakref.ref): + state[k] = None + return state + + +# TODO move upstream +@patch_dependency("torch.distributions.transforms.Transform.clear_cache") +def _Transform_clear_cache(self): + if self._cache_size == 1: + self._cached_x_y = None, None + + +# TODO move upstream +@patch_dependency("torch.distributions.TransformedDistribution.clear_cache") +def _TransformedDistribution_clear_cache(self): + for t in self.transforms: + t.clear_cache() + + +# TODO fix https://github.com/pytorch/pytorch/issues/48054 upstream +@patch_dependency("torch.distributions.HalfCauchy.log_prob") +def _HalfCauchy_logprob(self, value): + if self._validate_args: + self._validate_sample(value) + value = torch.as_tensor( + value, dtype=self.base_dist.scale.dtype, device=self.base_dist.scale.device + ) + log_prob = self.base_dist.log_prob(value) + math.log(2) + log_prob.masked_fill_(value.expand(log_prob.shape) < 0, -float("inf")) + return log_prob + + +@patch_dependency("torch.distributions.constraints._CorrCholesky.check") +def _CorrCholesky_check(self, value): + row_norm = torch.linalg.norm(value.detach(), dim=-1) + unit_row_norm = (row_norm - 1.0).abs().le(1e-4).all(dim=-1) + return torch.distributions.constraints.lower_cholesky.check(value) & unit_row_norm + + +# This adds a __call__ method to satisfy sphinx. +@patch_dependency("torch.distributions.utils.lazy_property.__call__") +def _lazy_property__call__(self): + raise NotImplementedError + + +__all__ = [] diff --git a/pyro/source/pyro/distributions/torch_transform.py b/pyro/source/pyro/distributions/torch_transform.py new file mode 100644 index 0000000000000000000000000000000000000000..eedd8f59367043e060a52ded442a1c3fcbbab79e --- /dev/null +++ b/pyro/source/pyro/distributions/torch_transform.py @@ -0,0 +1,40 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch + + +class TransformModule(torch.distributions.Transform, torch.nn.Module): + """ + Transforms with learnable parameters such as normalizing flows should inherit from this class rather + than `Transform` so they are also a subclass of `nn.Module` and inherit all the useful methods of that class. + """ + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def __hash__(self): + return super(torch.nn.Module, self).__hash__() + + +class ComposeTransformModule(torch.distributions.ComposeTransform, torch.nn.ModuleList): + """ + This allows us to use a list of `TransformModule` in the same way as + :class:`~torch.distributions.transform.ComposeTransform`. This is needed + so that transform parameters are automatically registered by Pyro's param + store when used in :class:`~pyro.nn.module.PyroModule` instances. + """ + + def __init__(self, parts, cache_size=0): + super().__init__(parts, cache_size=cache_size) + for part in parts: + if isinstance(part, torch.nn.Module): + self.append(part) + + def __hash__(self): + return super(torch.nn.Module, self).__hash__() + + def with_cache(self, cache_size=1): + if cache_size == self._cache_size: + return self + return ComposeTransformModule(self.parts, cache_size=cache_size) diff --git a/pyro/source/pyro/distributions/transforms/__init__.py b/pyro/source/pyro/distributions/transforms/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..8428ce1334b38fd194b10e4c56cc0416665c6632 --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/__init__.py @@ -0,0 +1,267 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +# Import * to get the latest upstream transforms. +from torch.distributions.transforms import * # noqa F403 + +# Additionally try to import explicitly to help mypy static analysis. +try: + from torch.distributions.transforms import ( + AbsTransform, + AffineTransform, + CatTransform, + ComposeTransform, + # CorrCholeskyTransform, # Use Pyro's version below. + CumulativeDistributionTransform, + ExpTransform, + IndependentTransform, + LowerCholeskyTransform, + PositiveDefiniteTransform, + PowerTransform, + ReshapeTransform, + SigmoidTransform, + SoftmaxTransform, + # SoftplusTransform, # Use Pyro's version below. + StackTransform, + StickBreakingTransform, + TanhTransform, + Transform, + identity_transform, + ) +except ImportError: + pass + +from torch.distributions import biject_to, transform_to +from torch.distributions.transforms import __all__ as torch_transforms + +from .. import constraints +from ..torch_transform import ComposeTransformModule +from .affine_autoregressive import ( + AffineAutoregressive, + ConditionalAffineAutoregressive, + affine_autoregressive, + conditional_affine_autoregressive, +) +from .affine_coupling import ( + AffineCoupling, + ConditionalAffineCoupling, + affine_coupling, + conditional_affine_coupling, +) +from .basic import ELUTransform, LeakyReLUTransform, elu, leaky_relu +from .batchnorm import BatchNorm, batchnorm +from .block_autoregressive import BlockAutoregressive, block_autoregressive +from .cholesky import ( + CholeskyTransform, + CorrCholeskyTransform, + CorrLCholeskyTransform, + CorrMatrixCholeskyTransform, +) +from .discrete_cosine import DiscreteCosineTransform +from .generalized_channel_permute import ( + ConditionalGeneralizedChannelPermute, + GeneralizedChannelPermute, + conditional_generalized_channel_permute, + generalized_channel_permute, +) +from .haar import HaarTransform +from .householder import ( + ConditionalHouseholder, + Householder, + conditional_householder, + householder, +) +from .lower_cholesky_affine import LowerCholeskyAffine +from .matrix_exponential import ( + ConditionalMatrixExponential, + MatrixExponential, + conditional_matrix_exponential, + matrix_exponential, +) +from .neural_autoregressive import ( + ConditionalNeuralAutoregressive, + NeuralAutoregressive, + conditional_neural_autoregressive, + neural_autoregressive, +) +from .normalize import Normalize +from .ordered import OrderedTransform +from .permute import Permute, permute +from .planar import ConditionalPlanar, Planar, conditional_planar, planar +from .polynomial import Polynomial, polynomial +from .power import PositivePowerTransform +from .radial import ConditionalRadial, Radial, conditional_radial, radial +from .simplex_to_ordered import SimplexToOrderedTransform +from .softplus import SoftplusLowerCholeskyTransform, SoftplusTransform +from .spline import ConditionalSpline, Spline, conditional_spline, spline +from .spline_autoregressive import ( + ConditionalSplineAutoregressive, + SplineAutoregressive, + conditional_spline_autoregressive, + spline_autoregressive, +) +from .spline_coupling import SplineCoupling, spline_coupling +from .sylvester import Sylvester, sylvester +from .unit_cholesky import UnitLowerCholeskyTransform + +######################################## +# register transforms + + +@transform_to.register(constraints.sphere) +def _transform_to_sphere(constraint): + return Normalize() + + +@biject_to.register(constraints.corr_matrix) +@transform_to.register(constraints.corr_matrix) +def _transform_to_corr_matrix(constraint): + return ComposeTransform( + [CorrCholeskyTransform(), CorrMatrixCholeskyTransform().inv] + ) + + +@biject_to.register(constraints.ordered_vector) +@transform_to.register(constraints.ordered_vector) +def _transform_to_ordered_vector(constraint): + return OrderedTransform() + + +@biject_to.register(constraints.positive_ordered_vector) +@transform_to.register(constraints.positive_ordered_vector) +def _transform_to_positive_ordered_vector(constraint): + return ComposeTransform([OrderedTransform(), ExpTransform()]) + + +# TODO: register biject_to when LowerCholeskyTransform is bijective +@transform_to.register(constraints.positive_definite) +def _transform_to_positive_definite(constraint): + return ComposeTransform([LowerCholeskyTransform(), CholeskyTransform().inv]) + + +@biject_to.register(constraints.softplus_positive) +@transform_to.register(constraints.softplus_positive) +def _transform_to_softplus_positive(constraint): + return SoftplusTransform() + + +@transform_to.register(constraints.softplus_lower_cholesky) +def _transform_to_softplus_lower_cholesky(constraint): + return SoftplusLowerCholeskyTransform() + + +@transform_to.register(constraints.unit_lower_cholesky) +def _transform_to_unit_lower_cholesky(constraint): + return UnitLowerCholeskyTransform() + + +def iterated(repeats, base_fn, *args, **kwargs): + """ + Helper function to compose a sequence of bijective transforms with potentially + learnable parameters using :class:`~pyro.distributions.ComposeTransformModule`. + + :param repeats: number of repeated transforms. + :param base_fn: function to construct the bijective transform. + :param args: arguments taken by `base_fn`. + :param kwargs: keyword arguments taken by `base_fn`. + :return: instance of :class:`~pyro.distributions.TransformModule`. + """ + assert isinstance(repeats, int) and repeats >= 1 + return ComposeTransformModule([base_fn(*args, **kwargs) for _ in range(repeats)]) + + +__all__ = [ + "AbsTransform", + "AffineAutoregressive", + "AffineCoupling", + "AffineTransform", + "BatchNorm", + "BlockAutoregressive", + "CatTransform", + "CholeskyTransform", + "ComposeTransform", + "ComposeTransformModule", + "ConditionalAffineAutoregressive", + "ConditionalAffineCoupling", + "ConditionalGeneralizedChannelPermute", + "ConditionalHouseholder", + "ConditionalMatrixExponential", + "ConditionalNeuralAutoregressive", + "ConditionalPlanar", + "ConditionalRadial", + "ConditionalSpline", + "ConditionalSplineAutoregressive", + "CorrCholeskyTransform", + "CorrLCholeskyTransform", + "CorrMatrixCholeskyTransform", + "CumulativeDistributionTransform", + "DiscreteCosineTransform", + "ELUTransform", + "ExpTransform", + "GeneralizedChannelPermute", + "HaarTransform", + "Householder", + "IndependentTransform", + "LeakyReLUTransform", + "LowerCholeskyAffine", + "LowerCholeskyTransform", + "MatrixExponential", + "NeuralAutoregressive", + "Normalize", + "OrderedTransform", + "Permute", + "Planar", + "Polynomial", + "PositiveDefiniteTransform", + "PositivePowerTransform", + "PowerTransform", + "Radial", + "ReshapeTransform", + "SigmoidTransform", + "SimplexToOrderedTransform", + "SoftmaxTransform", + "SoftplusLowerCholeskyTransform", + "SoftplusTransform", + "Spline", + "SplineAutoregressive", + "SplineCoupling", + "StackTransform", + "StickBreakingTransform", + "Sylvester", + "TanhTransform", + "Transform", + "affine_autoregressive", + "affine_coupling", + "batchnorm", + "block_autoregressive", + "conditional_affine_autoregressive", + "conditional_affine_coupling", + "conditional_generalized_channel_permute", + "conditional_householder", + "conditional_matrix_exponential", + "conditional_neural_autoregressive", + "conditional_planar", + "conditional_radial", + "conditional_spline", + "conditional_spline_autoregressive", + "elu", + "generalized_channel_permute", + "householder", + "identity_transform", + "iterated", + "leaky_relu", + "matrix_exponential", + "neural_autoregressive", + "permute", + "planar", + "polynomial", + "radial", + "spline", + "spline_autoregressive", + "spline_coupling", + "sylvester", +] + +__all__.extend(torch_transforms) +__all__[:] = sorted(set(__all__)) +del torch_transforms diff --git a/pyro/source/pyro/distributions/transforms/affine_autoregressive.py b/pyro/source/pyro/distributions/transforms/affine_autoregressive.py new file mode 100644 index 0000000000000000000000000000000000000000..483fe89aa0a34c92c6e7afcf771dc8b1b8697a63 --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/affine_autoregressive.py @@ -0,0 +1,409 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from functools import partial + +import torch +import torch.nn as nn + +from pyro.nn import AutoRegressiveNN, ConditionalAutoRegressiveNN + +from .. import constraints +from ..conditional import ConditionalTransformModule +from ..torch_transform import TransformModule +from ..util import copy_docs_from +from .utils import clamp_preserve_gradients + + +@copy_docs_from(TransformModule) +class AffineAutoregressive(TransformModule): + r""" + An implementation of the bijective transform of Inverse Autoregressive Flow + (IAF), using by default Eq (10) from Kingma Et Al., 2016, + + :math:`\mathbf{y} = \mu_t + \sigma_t\odot\mathbf{x}` + + where :math:`\mathbf{x}` are the inputs, :math:`\mathbf{y}` are the outputs, + :math:`\mu_t,\sigma_t` are calculated from an autoregressive network on + :math:`\mathbf{x}`, and :math:`\sigma_t>0`. + + If the stable keyword argument is set to True then the transformation used is, + + :math:`\mathbf{y} = \sigma_t\odot\mathbf{x} + (1-\sigma_t)\odot\mu_t` + + where :math:`\sigma_t` is restricted to :math:`(0,1)`. This variant of IAF is + claimed by the authors to be more numerically stable than one using Eq (10), + although in practice it leads to a restriction on the distributions that can be + represented, presumably since the input is restricted to rescaling by a number + on :math:`(0,1)`. + + Together with :class:`~pyro.distributions.TransformedDistribution` this provides + a way to create richer variational approximations. + + Example usage: + + >>> from pyro.nn import AutoRegressiveNN + >>> base_dist = dist.Normal(torch.zeros(10), torch.ones(10)) + >>> transform = AffineAutoregressive(AutoRegressiveNN(10, [40])) + >>> pyro.module("my_transform", transform) # doctest: +SKIP + >>> flow_dist = dist.TransformedDistribution(base_dist, [transform]) + >>> flow_dist.sample() # doctest: +SKIP + + The inverse of the Bijector is required when, e.g., scoring the log density of a + sample with :class:`~pyro.distributions.TransformedDistribution`. This + implementation caches the inverse of the Bijector when its forward operation is + called, e.g., when sampling from + :class:`~pyro.distributions.TransformedDistribution`. However, if the cached + value isn't available, either because it was overwritten during sampling a new + value or an arbitrary value is being scored, it will calculate it manually. Note + that this is an operation that scales as O(D) where D is the input dimension, + and so should be avoided for large dimensional uses. So in general, it is cheap + to sample from IAF and score a value that was sampled by IAF, but expensive to + score an arbitrary value. + + :param autoregressive_nn: an autoregressive neural network whose forward call + returns a real-valued mean and logit-scale as a tuple + :type autoregressive_nn: callable + :param log_scale_min_clip: The minimum value for clipping the log(scale) from + the autoregressive NN + :type log_scale_min_clip: float + :param log_scale_max_clip: The maximum value for clipping the log(scale) from + the autoregressive NN + :type log_scale_max_clip: float + :param sigmoid_bias: A term to add the logit of the input when using the stable + tranform. + :type sigmoid_bias: float + :param stable: When true, uses the alternative "stable" version of the transform + (see above). + :type stable: bool + + References: + + [1] Diederik P. Kingma, Tim Salimans, Rafal Jozefowicz, Xi Chen, Ilya Sutskever, + Max Welling. Improving Variational Inference with Inverse Autoregressive Flow. + [arXiv:1606.04934] + + [2] Danilo Jimenez Rezende, Shakir Mohamed. Variational Inference with + Normalizing Flows. [arXiv:1505.05770] + + [3] Mathieu Germain, Karol Gregor, Iain Murray, Hugo Larochelle. MADE: Masked + Autoencoder for Distribution Estimation. [arXiv:1502.03509] + + """ + + domain = constraints.real_vector + codomain = constraints.real_vector + bijective = True + sign = +1 + autoregressive = True + + def __init__( + self, + autoregressive_nn, + log_scale_min_clip=-5.0, + log_scale_max_clip=3.0, + sigmoid_bias=2.0, + stable=False, + ): + super().__init__(cache_size=1) + self.arn = autoregressive_nn + self._cached_log_scale = None + self.log_scale_min_clip = log_scale_min_clip + self.log_scale_max_clip = log_scale_max_clip + self.sigmoid = nn.Sigmoid() + self.logsigmoid = nn.LogSigmoid() + self.sigmoid_bias = sigmoid_bias + self.stable = stable + + if stable: + self._call = self._call_stable + self._inverse = self._inverse_stable + + def _call(self, x): + """ + :param x: the input into the bijection + :type x: torch.Tensor + + Invokes the bijection x=>y; in the prototypical context of a + :class:`~pyro.distributions.TransformedDistribution` `x` is a sample from + the base distribution (or the output of a previous transform) + """ + mean, log_scale = self.arn(x) + log_scale = clamp_preserve_gradients( + log_scale, self.log_scale_min_clip, self.log_scale_max_clip + ) + self._cached_log_scale = log_scale + scale = torch.exp(log_scale) + + y = scale * x + mean + return y + + def _inverse(self, y): + """ + :param y: the output of the bijection + :type y: torch.Tensor + + Inverts y => x. Uses a previously cached inverse if available, otherwise + performs the inversion afresh. + """ + x_size = y.size()[:-1] + perm = self.arn.permutation + input_dim = y.size(-1) + x = [torch.zeros(x_size, device=y.device)] * input_dim + + # NOTE: Inversion is an expensive operation that scales in the dimension of the input + for idx in perm: + mean, log_scale = self.arn(torch.stack(x, dim=-1)) + inverse_scale = torch.exp( + -clamp_preserve_gradients( + log_scale[..., idx], + min=self.log_scale_min_clip, + max=self.log_scale_max_clip, + ) + ) + mean = mean[..., idx] + x[idx] = (y[..., idx] - mean) * inverse_scale + + x = torch.stack(x, dim=-1) + log_scale = clamp_preserve_gradients( + log_scale, min=self.log_scale_min_clip, max=self.log_scale_max_clip + ) + self._cached_log_scale = log_scale + return x + + def log_abs_det_jacobian(self, x, y): + """ + Calculates the elementwise determinant of the log Jacobian + """ + x_old, y_old = self._cached_x_y + if x is not x_old or y is not y_old: + # This call to the parent class Transform will update the cache + # as well as calling self._call and recalculating y and log_detJ + self(x) + + if self._cached_log_scale is not None: + log_scale = self._cached_log_scale + elif not self.stable: + _, log_scale = self.arn(x) + log_scale = clamp_preserve_gradients( + log_scale, self.log_scale_min_clip, self.log_scale_max_clip + ) + else: + _, logit_scale = self.arn(x) + log_scale = self.logsigmoid(logit_scale + self.sigmoid_bias) + return log_scale.sum(-1) + + def _call_stable(self, x): + """ + :param x: the input into the bijection + :type x: torch.Tensor + + Invokes the bijection x=>y; in the prototypical context of a + :class:`~pyro.distributions.TransformedDistribution` `x` is a sample from + the base distribution (or the output of a previous transform) + """ + mean, logit_scale = self.arn(x) + logit_scale = logit_scale + self.sigmoid_bias + scale = self.sigmoid(logit_scale) + log_scale = self.logsigmoid(logit_scale) + self._cached_log_scale = log_scale + + y = scale * x + (1 - scale) * mean + return y + + def _inverse_stable(self, y): + """ + :param y: the output of the bijection + :type y: torch.Tensor + + Inverts y => x. + """ + x_size = y.size()[:-1] + perm = self.arn.permutation + input_dim = y.size(-1) + x = [torch.zeros(x_size, device=y.device)] * input_dim + + # NOTE: Inversion is an expensive operation that scales in the dimension of the input + for idx in perm: + mean, logit_scale = self.arn(torch.stack(x, dim=-1)) + inverse_scale = 1 + torch.exp(-logit_scale[..., idx] - self.sigmoid_bias) + x[idx] = inverse_scale * y[..., idx] + (1 - inverse_scale) * mean[..., idx] + + self._cached_log_scale = self.logsigmoid(logit_scale + self.sigmoid_bias) + x = torch.stack(x, dim=-1) + return x + + +@copy_docs_from(ConditionalTransformModule) +class ConditionalAffineAutoregressive(ConditionalTransformModule): + r""" + An implementation of the bijective transform of Inverse Autoregressive Flow + (IAF) that conditions on an additional context variable and uses, by default, + Eq (10) from Kingma Et Al., 2016, + + :math:`\mathbf{y} = \mu_t + \sigma_t\odot\mathbf{x}` + + where :math:`\mathbf{x}` are the inputs, :math:`\mathbf{y}` are the outputs, + :math:`\mu_t,\sigma_t` are calculated from an autoregressive network on + :math:`\mathbf{x}` and context :math:`\mathbf{z}\in\mathbb{R}^M`, and + :math:`\sigma_t>0`. + + If the stable keyword argument is set to True then the transformation used is, + + :math:`\mathbf{y} = \sigma_t\odot\mathbf{x} + (1-\sigma_t)\odot\mu_t` + + where :math:`\sigma_t` is restricted to :math:`(0,1)`. This variant of IAF is + claimed by the authors to be more numerically stable than one using Eq (10), + although in practice it leads to a restriction on the distributions that can be + represented, presumably since the input is restricted to rescaling by a number + on :math:`(0,1)`. + + Together with :class:`~pyro.distributions.ConditionalTransformedDistribution` + this provides a way to create richer variational approximations. + + Example usage: + + >>> from pyro.nn import ConditionalAutoRegressiveNN + >>> input_dim = 10 + >>> context_dim = 4 + >>> batch_size = 3 + >>> hidden_dims = [10*input_dim, 10*input_dim] + >>> base_dist = dist.Normal(torch.zeros(input_dim), torch.ones(input_dim)) + >>> hypernet = ConditionalAutoRegressiveNN(input_dim, context_dim, hidden_dims) + >>> transform = ConditionalAffineAutoregressive(hypernet) + >>> pyro.module("my_transform", transform) # doctest: +SKIP + >>> z = torch.rand(batch_size, context_dim) + >>> flow_dist = dist.ConditionalTransformedDistribution(base_dist, + ... [transform]).condition(z) + >>> flow_dist.sample(sample_shape=torch.Size([batch_size])) # doctest: +SKIP + + The inverse of the Bijector is required when, e.g., scoring the log density of a + sample with :class:`~pyro.distributions.TransformedDistribution`. This + implementation caches the inverse of the Bijector when its forward operation is + called, e.g., when sampling from + :class:`~pyro.distributions.TransformedDistribution`. However, if the cached + value isn't available, either because it was overwritten during sampling a new + value or an arbitrary value is being scored, it will calculate it manually. Note + that this is an operation that scales as O(D) where D is the input dimension, + and so should be avoided for large dimensional uses. So in general, it is cheap + to sample from IAF and score a value that was sampled by IAF, but expensive to + score an arbitrary value. + + :param autoregressive_nn: an autoregressive neural network whose forward call + returns a real-valued mean and logit-scale as a tuple + :type autoregressive_nn: nn.Module + :param log_scale_min_clip: The minimum value for clipping the log(scale) from + the autoregressive NN + :type log_scale_min_clip: float + :param log_scale_max_clip: The maximum value for clipping the log(scale) from + the autoregressive NN + :type log_scale_max_clip: float + :param sigmoid_bias: A term to add the logit of the input when using the stable + tranform. + :type sigmoid_bias: float + :param stable: When true, uses the alternative "stable" version of the transform + (see above). + :type stable: bool + + References: + + [1] Diederik P. Kingma, Tim Salimans, Rafal Jozefowicz, Xi Chen, Ilya Sutskever, + Max Welling. Improving Variational Inference with Inverse Autoregressive Flow. + [arXiv:1606.04934] + + [2] Danilo Jimenez Rezende, Shakir Mohamed. Variational Inference with + Normalizing Flows. [arXiv:1505.05770] + + [3] Mathieu Germain, Karol Gregor, Iain Murray, Hugo Larochelle. MADE: Masked + Autoencoder for Distribution Estimation. [arXiv:1502.03509] + + """ + + domain = constraints.real_vector + codomain = constraints.real_vector + bijective = True + + def __init__(self, autoregressive_nn, **kwargs): + super().__init__() + self.nn = autoregressive_nn + self.kwargs = kwargs + + def condition(self, context): + """ + Conditions on a context variable, returning a non-conditional transform of + of type :class:`~pyro.distributions.transforms.AffineAutoregressive`. + """ + + cond_nn = partial(self.nn, context=context) + cond_nn.permutation = cond_nn.func.permutation + cond_nn.get_permutation = cond_nn.func.get_permutation + return AffineAutoregressive(cond_nn, **self.kwargs) + + +def affine_autoregressive(input_dim, hidden_dims=None, **kwargs): + """ + A helper function to create an + :class:`~pyro.distributions.transforms.AffineAutoregressive` object that takes + care of constructing an autoregressive network with the correct input/output + dimensions. + + :param input_dim: Dimension of input variable + :type input_dim: int + :param hidden_dims: The desired hidden dimensions of the autoregressive network. + Defaults to using [3*input_dim + 1] + :type hidden_dims: list[int] + :param log_scale_min_clip: The minimum value for clipping the log(scale) from + the autoregressive NN + :type log_scale_min_clip: float + :param log_scale_max_clip: The maximum value for clipping the log(scale) from + the autoregressive NN + :type log_scale_max_clip: float + :param sigmoid_bias: A term to add the logit of the input when using the stable + tranform. + :type sigmoid_bias: float + :param stable: When true, uses the alternative "stable" version of the transform + (see above). + :type stable: bool + + """ + + if hidden_dims is None: + hidden_dims = [3 * input_dim + 1] + arn = AutoRegressiveNN(input_dim, hidden_dims) + return AffineAutoregressive(arn, **kwargs) + + +def conditional_affine_autoregressive( + input_dim, context_dim, hidden_dims=None, **kwargs +): + """ + A helper function to create an + :class:`~pyro.distributions.transforms.ConditionalAffineAutoregressive` object + that takes care of constructing a dense network with the correct input/output + dimensions. + + :param input_dim: Dimension of input variable + :type input_dim: int + :param context_dim: Dimension of context variable + :type context_dim: int + :param hidden_dims: The desired hidden dimensions of the dense network. Defaults + to using [10*input_dim] + :type hidden_dims: list[int] + :param log_scale_min_clip: The minimum value for clipping the log(scale) from + the autoregressive NN + :type log_scale_min_clip: float + :param log_scale_max_clip: The maximum value for clipping the log(scale) from + the autoregressive NN + :type log_scale_max_clip: float + :param sigmoid_bias: A term to add the logit of the input when using the stable + tranform. + :type sigmoid_bias: float + :param stable: When true, uses the alternative "stable" version of the transform + (see above). + :type stable: bool + + """ + if hidden_dims is None: + hidden_dims = [10 * input_dim] + nn = ConditionalAutoRegressiveNN(input_dim, context_dim, hidden_dims) + return ConditionalAffineAutoregressive(nn, **kwargs) diff --git a/pyro/source/pyro/distributions/transforms/affine_coupling.py b/pyro/source/pyro/distributions/transforms/affine_coupling.py new file mode 100644 index 0000000000000000000000000000000000000000..cf768b9626201688f26f9687a005da676f4404f4 --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/affine_coupling.py @@ -0,0 +1,395 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import operator +from functools import partial, reduce + +import torch +from torch.distributions.utils import _sum_rightmost + +from pyro.nn import ConditionalDenseNN, DenseNN + +from .. import constraints +from ..conditional import ConditionalTransformModule +from ..torch_transform import TransformModule +from ..transforms.utils import clamp_preserve_gradients +from ..util import copy_docs_from + + +@copy_docs_from(TransformModule) +class AffineCoupling(TransformModule): + r""" + An implementation of the affine coupling layer of RealNVP (Dinh et al., 2017) + that uses the bijective transform, + + :math:`\mathbf{y}_{1:d} = \mathbf{x}_{1:d}` + :math:`\mathbf{y}_{(d+1):D} = \mu + \sigma\odot\mathbf{x}_{(d+1):D}` + + where :math:`\mathbf{x}` are the inputs, :math:`\mathbf{y}` are the outputs, + e.g. :math:`\mathbf{x}_{1:d}` represents the first :math:`d` elements of the + inputs, and :math:`\mu,\sigma` are shift and translation parameters calculated + as the output of a function inputting only :math:`\mathbf{x}_{1:d}`. + + That is, the first :math:`d` components remain unchanged, and the subsequent + :math:`D-d` are shifted and translated by a function of the previous components. + + Together with :class:`~pyro.distributions.TransformedDistribution` this provides + a way to create richer variational approximations. + + Example usage: + + >>> from pyro.nn import DenseNN + >>> input_dim = 10 + >>> split_dim = 6 + >>> base_dist = dist.Normal(torch.zeros(input_dim), torch.ones(input_dim)) + >>> param_dims = [input_dim-split_dim, input_dim-split_dim] + >>> hypernet = DenseNN(split_dim, [10*input_dim], param_dims) + >>> transform = AffineCoupling(split_dim, hypernet) + >>> pyro.module("my_transform", transform) # doctest: +SKIP + >>> flow_dist = dist.TransformedDistribution(base_dist, [transform]) + >>> flow_dist.sample() # doctest: +SKIP + + The inverse of the Bijector is required when, e.g., scoring the log density of a + sample with :class:`~pyro.distributions.TransformedDistribution`. This + implementation caches the inverse of the Bijector when its forward operation is + called, e.g., when sampling from + :class:`~pyro.distributions.TransformedDistribution`. However, if the cached + value isn't available, either because it was overwritten during sampling a new + value or an arbitary value is being scored, it will calculate it manually. + + This is an operation that scales as O(1), i.e. constant in the input dimension. + So in general, it is cheap to sample *and* score (an arbitrary value) from + :class:`~pyro.distributions.transforms.AffineCoupling`. + + :param split_dim: Zero-indexed dimension :math:`d` upon which to perform input/ + output split for transformation. + :type split_dim: int + :param hypernet: a neural network whose forward call returns a real-valued mean + and logit-scale as a tuple. The input should have final dimension split_dim + and the output final dimension input_dim-split_dim for each member of the + tuple. + :type hypernet: callable + :param dim: the tensor dimension on which to split. This value must be negative + and defines the event dim as `abs(dim)`. + :type dim: int + :param log_scale_min_clip: The minimum value for clipping the log(scale) from + the autoregressive NN + :type log_scale_min_clip: float + :param log_scale_max_clip: The maximum value for clipping the log(scale) from + the autoregressive NN + :type log_scale_max_clip: float + + References: + + [1] Laurent Dinh, Jascha Sohl-Dickstein, and Samy Bengio. Density estimation + using Real NVP. ICLR 2017. + + """ + + bijective = True + + def __init__( + self, + split_dim, + hypernet, + *, + dim=-1, + log_scale_min_clip=-5.0, + log_scale_max_clip=3.0 + ): + super().__init__(cache_size=1) + if dim >= 0: + raise ValueError("'dim' keyword argument must be negative") + + self.split_dim = split_dim + self.nn = hypernet + self.dim = dim + self._cached_log_scale = None + self.log_scale_min_clip = log_scale_min_clip + self.log_scale_max_clip = log_scale_max_clip + + @constraints.dependent_property(is_discrete=False) + def domain(self): + return constraints.independent(constraints.real, -self.dim) + + @constraints.dependent_property(is_discrete=False) + def codomain(self): + return constraints.independent(constraints.real, -self.dim) + + def _call(self, x): + """ + :param x: the input into the bijection + :type x: torch.Tensor + + Invokes the bijection x=>y; in the prototypical context of a + :class:`~pyro.distributions.TransformedDistribution` `x` is a sample from + the base distribution (or the output of a previous transform) + """ + x1, x2 = x.split( + [self.split_dim, x.size(self.dim) - self.split_dim], dim=self.dim + ) + + # Now that we can split on an arbitrary dimension, we have do a bit of reshaping... + mean, log_scale = self.nn(x1.reshape(x1.shape[: self.dim] + (-1,))) + mean = mean.reshape(mean.shape[:-1] + x2.shape[self.dim :]) + log_scale = log_scale.reshape(log_scale.shape[:-1] + x2.shape[self.dim :]) + + log_scale = clamp_preserve_gradients( + log_scale, self.log_scale_min_clip, self.log_scale_max_clip + ) + self._cached_log_scale = log_scale + + y1 = x1 + y2 = torch.exp(log_scale) * x2 + mean + return torch.cat([y1, y2], dim=self.dim) + + def _inverse(self, y): + """ + :param y: the output of the bijection + :type y: torch.Tensor + + Inverts y => x. Uses a previously cached inverse if available, otherwise + performs the inversion afresh. + """ + y1, y2 = y.split( + [self.split_dim, y.size(self.dim) - self.split_dim], dim=self.dim + ) + x1 = y1 + + # Now that we can split on an arbitrary dimension, we have do a bit of reshaping... + mean, log_scale = self.nn(x1.reshape(x1.shape[: self.dim] + (-1,))) + mean = mean.reshape(mean.shape[:-1] + y2.shape[self.dim :]) + log_scale = log_scale.reshape(log_scale.shape[:-1] + y2.shape[self.dim :]) + + log_scale = clamp_preserve_gradients( + log_scale, self.log_scale_min_clip, self.log_scale_max_clip + ) + self._cached_log_scale = log_scale + + x2 = (y2 - mean) * torch.exp(-log_scale) + return torch.cat([x1, x2], dim=self.dim) + + def log_abs_det_jacobian(self, x, y): + """ + Calculates the elementwise determinant of the log jacobian + """ + x_old, y_old = self._cached_x_y + if self._cached_log_scale is not None and x is x_old and y is y_old: + log_scale = self._cached_log_scale + else: + x1, x2 = x.split( + [self.split_dim, x.size(self.dim) - self.split_dim], dim=self.dim + ) + _, log_scale = self.nn(x1.reshape(x1.shape[: self.dim] + (-1,))) + log_scale = log_scale.reshape(log_scale.shape[:-1] + x2.shape[self.dim :]) + log_scale = clamp_preserve_gradients( + log_scale, self.log_scale_min_clip, self.log_scale_max_clip + ) + return _sum_rightmost(log_scale, self.event_dim) + + +@copy_docs_from(ConditionalTransformModule) +class ConditionalAffineCoupling(ConditionalTransformModule): + r""" + An implementation of the affine coupling layer of RealNVP (Dinh et al., 2017) + that conditions on an additional context variable and uses the bijective + transform, + + :math:`\mathbf{y}_{1:d} = \mathbf{x}_{1:d}` + :math:`\mathbf{y}_{(d+1):D} = \mu + \sigma\odot\mathbf{x}_{(d+1):D}` + + where :math:`\mathbf{x}` are the inputs, :math:`\mathbf{y}` are the outputs, + e.g. :math:`\mathbf{x}_{1:d}` represents the first :math:`d` elements of the + inputs, and :math:`\mu,\sigma` are shift and translation parameters calculated + as the output of a function input :math:`\mathbf{x}_{1:d}` and a context + variable :math:`\mathbf{z}\in\mathbb{R}^M`. + + That is, the first :math:`d` components remain unchanged, and the subsequent + :math:`D-d` are shifted and translated by a function of the previous components. + + Together with :class:`~pyro.distributions.ConditionalTransformedDistribution` + this provides a way to create richer variational approximations. + + Example usage: + + >>> from pyro.nn import ConditionalDenseNN + >>> input_dim = 10 + >>> split_dim = 6 + >>> context_dim = 4 + >>> batch_size = 3 + >>> base_dist = dist.Normal(torch.zeros(input_dim), torch.ones(input_dim)) + >>> param_dims = [input_dim-split_dim, input_dim-split_dim] + >>> hypernet = ConditionalDenseNN(split_dim, context_dim, [10*input_dim], + ... param_dims) + >>> transform = ConditionalAffineCoupling(split_dim, hypernet) + >>> pyro.module("my_transform", transform) # doctest: +SKIP + >>> z = torch.rand(batch_size, context_dim) + >>> flow_dist = dist.ConditionalTransformedDistribution(base_dist, + ... [transform]).condition(z) + >>> flow_dist.sample(sample_shape=torch.Size([batch_size])) # doctest: +SKIP + + The inverse of the Bijector is required when, e.g., scoring the log density of a + sample with :class:`~pyro.distributions.ConditionalTransformedDistribution`. + This implementation caches the inverse of the Bijector when its forward + operation is called, e.g., when sampling from + :class:`~pyro.distributions.ConditionalTransformedDistribution`. However, if the + cached value isn't available, either because it was overwritten during sampling + a new value or an arbitary value is being scored, it will calculate it manually. + + This is an operation that scales as O(1), i.e. constant in the input dimension. + So in general, it is cheap to sample *and* score (an arbitrary value) from + :class:`~pyro.distributions.transforms.ConditionalAffineCoupling`. + + :param split_dim: Zero-indexed dimension :math:`d` upon which to perform input/ + output split for transformation. + :type split_dim: int + :param hypernet: A neural network whose forward call returns a real-valued mean + and logit-scale as a tuple. The input should have final dimension split_dim + and the output final dimension input_dim-split_dim for each member of the + tuple. The network also inputs a context variable as a keyword argument in + order to condition the output upon it. + :type hypernet: callable + :param log_scale_min_clip: The minimum value for clipping the log(scale) from + the NN + :type log_scale_min_clip: float + :param log_scale_max_clip: The maximum value for clipping the log(scale) from + the NN + :type log_scale_max_clip: float + + References: + + Laurent Dinh, Jascha Sohl-Dickstein, and Samy Bengio. Density estimation using + Real NVP. ICLR 2017. + + """ + + domain = constraints.real_vector + codomain = constraints.real_vector + bijective = True + + def __init__(self, split_dim, hypernet, **kwargs): + super().__init__() + self.split_dim = split_dim + self.nn = hypernet + self.kwargs = kwargs + + def condition(self, context): + cond_nn = partial(self.nn, context=context) + return AffineCoupling(self.split_dim, cond_nn, **self.kwargs) + + +def affine_coupling(input_dim, hidden_dims=None, split_dim=None, dim=-1, **kwargs): + """ + A helper function to create an + :class:`~pyro.distributions.transforms.AffineCoupling` object that takes care of + constructing a dense network with the correct input/output dimensions. + + :param input_dim: Dimension(s) of input variable to permute. Note that when + `dim < -1` this must be a tuple corresponding to the event shape. + :type input_dim: int + :param hidden_dims: The desired hidden dimensions of the dense network. Defaults + to using [10*input_dim] + :type hidden_dims: list[int] + :param split_dim: The dimension to split the input on for the coupling + transform. Defaults to using input_dim // 2 + :type split_dim: int + :param dim: the tensor dimension on which to split. This value must be negative + and defines the event dim as `abs(dim)`. + :type dim: int + :param log_scale_min_clip: The minimum value for clipping the log(scale) from + the autoregressive NN + :type log_scale_min_clip: float + :param log_scale_max_clip: The maximum value for clipping the log(scale) from + the autoregressive NN + :type log_scale_max_clip: float + + """ + if not isinstance(input_dim, int): + if len(input_dim) != -dim: + raise ValueError( + "event shape {} must have same length as event_dim {}".format( + input_dim, -dim + ) + ) + event_shape = input_dim + extra_dims = reduce(operator.mul, event_shape[(dim + 1) :], 1) + else: + event_shape = [input_dim] + extra_dims = 1 + event_shape = list(event_shape) + + if split_dim is None: + split_dim = event_shape[dim] // 2 + if hidden_dims is None: + hidden_dims = [10 * event_shape[dim] * extra_dims] + + hypernet = DenseNN( + split_dim * extra_dims, + hidden_dims, + [ + (event_shape[dim] - split_dim) * extra_dims, + (event_shape[dim] - split_dim) * extra_dims, + ], + ) + return AffineCoupling(split_dim, hypernet, dim=dim, **kwargs) + + +def conditional_affine_coupling( + input_dim, context_dim, hidden_dims=None, split_dim=None, dim=-1, **kwargs +): + """ + A helper function to create an + :class:`~pyro.distributions.transforms.ConditionalAffineCoupling` object that + takes care of constructing a dense network with the correct input/output + dimensions. + + :param input_dim: Dimension of input variable + :type input_dim: int + :param context_dim: Dimension of context variable + :type context_dim: int + :param hidden_dims: The desired hidden dimensions of the dense network. Defaults + to using [10*input_dim] + :type hidden_dims: list[int] + :param split_dim: The dimension to split the input on for the coupling + transform. Defaults to using input_dim // 2 + :type split_dim: int + :param dim: the tensor dimension on which to split. This value must be negative + and defines the event dim as `abs(dim)`. + :type dim: int + :param log_scale_min_clip: The minimum value for clipping the log(scale) from + the autoregressive NN + :type log_scale_min_clip: float + :param log_scale_max_clip: The maximum value for clipping the log(scale) from + the autoregressive NN + :type log_scale_max_clip: float + + """ + if not isinstance(input_dim, int): + if len(input_dim) != -dim: + raise ValueError( + "event shape {} must have same length as event_dim {}".format( + input_dim, -dim + ) + ) + event_shape = input_dim + extra_dims = reduce(operator.mul, event_shape[(dim + 1) :], 1) + else: + event_shape = [input_dim] + extra_dims = 1 + event_shape = list(event_shape) + + if split_dim is None: + split_dim = event_shape[dim] // 2 + if hidden_dims is None: + hidden_dims = [10 * event_shape[dim] * extra_dims] + + nn = ConditionalDenseNN( + split_dim * extra_dims, + context_dim, + hidden_dims, + [ + (event_shape[dim] - split_dim) * extra_dims, + (event_shape[dim] - split_dim) * extra_dims, + ], + ) + return ConditionalAffineCoupling(split_dim, nn, dim=dim, **kwargs) diff --git a/pyro/source/pyro/distributions/transforms/basic.py b/pyro/source/pyro/distributions/transforms/basic.py new file mode 100644 index 0000000000000000000000000000000000000000..420cf7cd0552a4dde34f18d9e6b0e730426cdd98 --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/basic.py @@ -0,0 +1,92 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import torch +import torch.nn.functional as F +from torch.distributions.transforms import TanhTransform, Transform + +from .. import constraints + +# TODO: Move upstream + + +class ELUTransform(Transform): + r""" + Bijective transform via the mapping :math:`y = \text{ELU}(x)`. + """ + + domain = constraints.real + codomain = constraints.positive + bijective = True + sign = +1 + + def __eq__(self, other): + return isinstance(other, ELUTransform) + + def _call(self, x): + return F.elu(x) + + def _inverse(self, y, eps=1e-8): + return torch.max(y, torch.zeros_like(y)) + torch.min( + torch.log1p(y + eps), torch.zeros_like(y) + ) + + def log_abs_det_jacobian(self, x, y): + return -F.relu(-x) + + +def elu(): + """ + A helper function to create an + :class:`~pyro.distributions.transform.ELUTransform` object for consistency with + other helpers. + """ + return ELUTransform() + + +# TODO: Move upstream + + +class LeakyReLUTransform(Transform): + r""" + Bijective transform via the mapping :math:`y = \text{LeakyReLU}(x)`. + """ + + domain = constraints.real + codomain = constraints.real + bijective = True + sign = +1 + + def __eq__(self, other): + return isinstance(other, LeakyReLUTransform) + + def _call(self, x): + return F.leaky_relu(x) + + def _inverse(self, y): + return F.leaky_relu(y, negative_slope=100.0) + + def log_abs_det_jacobian(self, x, y): + return torch.where( + x >= 0.0, torch.zeros_like(x), torch.ones_like(x) * math.log(0.01) + ) + + +def leaky_relu(): + """ + A helper function to create a + :class:`~pyro.distributions.transforms.LeakyReLUTransform` object for + consistency with other helpers. + """ + return LeakyReLUTransform() + + +def tanh(): + """ + A helper function to create a + :class:`~pyro.distributions.transforms.TanhTransform` object for consistency + with other helpers. + """ + return TanhTransform() diff --git a/pyro/source/pyro/distributions/transforms/batchnorm.py b/pyro/source/pyro/distributions/transforms/batchnorm.py new file mode 100644 index 0000000000000000000000000000000000000000..1a92e09a2a7f6473132e36b230e026f7731dc6e2 --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/batchnorm.py @@ -0,0 +1,157 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +import torch.nn as nn +import torch.nn.functional as F + +from .. import constraints +from ..torch_transform import TransformModule +from ..util import copy_docs_from + + +@copy_docs_from(TransformModule) +class BatchNorm(TransformModule): + r""" + A type of batch normalization that can be used to stabilize training in + normalizing flows. The inverse operation is defined as + + :math:`x = (y - \hat{\mu}) \oslash \sqrt{\hat{\sigma^2}} \otimes \gamma + \beta` + + that is, the standard batch norm equation, where :math:`x` is the input, + :math:`y` is the output, :math:`\gamma,\beta` are learnable parameters, and + :math:`\hat{\mu}`/:math:`\hat{\sigma^2}` are smoothed running averages of + the sample mean and variance, respectively. The constraint :math:`\gamma>0` is + enforced to ease calculation of the log-det-Jacobian term. + + This is an element-wise transform, and when applied to a vector, learns two + parameters (:math:`\gamma,\beta`) for each dimension of the input. + + When the module is set to training mode, the moving averages of the sample mean + and variance are updated every time the inverse operator is called, e.g., when a + normalizing flow scores a minibatch with the `log_prob` method. + + Also, when the module is set to training mode, the sample mean and variance on + the current minibatch are used in place of the smoothed averages, + :math:`\hat{\mu}` and :math:`\hat{\sigma^2}`, for the inverse operator. For + this reason it is not the case that :math:`x=g(g^{-1}(x))` during training, + i.e., that the inverse operation is the inverse of the forward one. + + Example usage: + + >>> from pyro.nn import AutoRegressiveNN + >>> from pyro.distributions.transforms import AffineAutoregressive + >>> base_dist = dist.Normal(torch.zeros(10), torch.ones(10)) + >>> iafs = [AffineAutoregressive(AutoRegressiveNN(10, [40])) for _ in range(2)] + >>> bn = BatchNorm(10) + >>> flow_dist = dist.TransformedDistribution(base_dist, [iafs[0], bn, iafs[1]]) + >>> flow_dist.sample() # doctest: +SKIP + + :param input_dim: the dimension of the input + :type input_dim: int + :param momentum: momentum parameter for updating moving averages + :type momentum: float + :param epsilon: small number to add to variances to ensure numerical stability + :type epsilon: float + + References: + + [1] Sergey Ioffe and Christian Szegedy. Batch Normalization: Accelerating Deep + Network Training by Reducing Internal Covariate Shift. In International + Conference on Machine Learning, 2015. https://arxiv.org/abs/1502.03167 + + [2] Laurent Dinh, Jascha Sohl-Dickstein, and Samy Bengio. Density Estimation + using Real NVP. In International Conference on Learning Representations, 2017. + https://arxiv.org/abs/1605.08803 + + [3] George Papamakarios, Theo Pavlakou, and Iain Murray. Masked Autoregressive + Flow for Density Estimation. In Neural Information Processing Systems, 2017. + https://arxiv.org/abs/1705.07057 + + """ + + domain = constraints.real + codomain = constraints.real + bijective = True + + def __init__(self, input_dim, momentum=0.1, epsilon=1e-5): + super().__init__() + + self.input_dim = input_dim + self.gamma = nn.Parameter(torch.ones(input_dim)) + self.beta = nn.Parameter(torch.zeros(input_dim)) + self.momentum = momentum + self.epsilon = epsilon + + self.register_buffer("moving_mean", torch.zeros(input_dim)) + self.register_buffer("moving_variance", torch.ones(input_dim)) + + @property + def constrained_gamma(self): + return F.relu(self.gamma) + 1e-6 + + def _call(self, x): + """ + :param x: the input into the bijection + :type x: torch.Tensor + + Invokes the bijection x=>y; in the prototypical context of a + :class:`~pyro.distributions.TransformedDistribution` `x` is a sample from + the base distribution (or the output of a previous transform) + """ + # Enforcing the constraint that gamma is positive + return (x - self.beta) / self.constrained_gamma * torch.sqrt( + self.moving_variance + self.epsilon + ) + self.moving_mean + + def _inverse(self, y): + """ + :param y: the output of the bijection + :type y: torch.Tensor + + Inverts y => x. + """ + # During training, keep smoothed average of sample mean and variance + if self.training: + mean, var = y.mean(0), y.var(0) + + with torch.no_grad(): + # NOTE: The momentum variable agrees with the definition in e.g. `torch.nn.BatchNorm1d` + self.moving_mean.mul_(1 - self.momentum).add_(mean * self.momentum) + self.moving_variance.mul_(1 - self.momentum).add_(var * self.momentum) + + # During test time, use smoothed averages rather than the sample ones + else: + mean, var = self.moving_mean, self.moving_variance + + return (y - mean) * self.constrained_gamma / torch.sqrt( + var + self.epsilon + ) + self.beta + + def log_abs_det_jacobian(self, x, y): + """ + Calculates the elementwise determinant of the log Jacobian, dx/dy + """ + if self.training: + var = torch.var(y, dim=0, keepdim=True) + else: + # NOTE: You wouldn't typically run this function in eval mode, but included for gradient tests + var = self.moving_variance + return -self.constrained_gamma.log() + 0.5 * torch.log(var + self.epsilon) + + +def batchnorm(input_dim, **kwargs): + """ + A helper function to create a :class:`~pyro.distributions.transforms.BatchNorm` + object for consistency with other helpers. + + :param input_dim: Dimension of input variable + :type input_dim: int + :param momentum: momentum parameter for updating moving averages + :type momentum: float + :param epsilon: small number to add to variances to ensure numerical stability + :type epsilon: float + + """ + bn = BatchNorm(input_dim, **kwargs) + return bn diff --git a/pyro/source/pyro/distributions/transforms/block_autoregressive.py b/pyro/source/pyro/distributions/transforms/block_autoregressive.py new file mode 100644 index 0000000000000000000000000000000000000000..bdafb05d5b0b78db505c350b22778f220adc26ba --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/block_autoregressive.py @@ -0,0 +1,310 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +# This implementation is adapted in part from https://github.com/nicola-decao/BNAF under the MIT license. +import math + +import torch +import torch.nn as nn +import torch.nn.functional as F + +from .. import constraints +from ..torch_transform import TransformModule +from ..util import copy_docs_from +from .neural_autoregressive import ELUTransform, LeakyReLUTransform, TanhTransform + +eps = 1e-8 + + +def log_matrix_product(A, B): + """ + Computes the matrix products of two matrices in log-space, returning the result + in log-space. This is useful for calculating the vector chain rule for Jacobian + terms. + """ + return torch.logsumexp(A.unsqueeze(-1) + B.unsqueeze(-3), dim=-2) + + +@copy_docs_from(TransformModule) +class BlockAutoregressive(TransformModule): + r""" + An implementation of Block Neural Autoregressive Flow (block-NAF) + (De Cao et al., 2019) bijective transform. Block-NAF uses a similar + transformation to deep dense NAF, building the autoregressive NN into the + structure of the transform, in a sense. + + Together with :class:`~pyro.distributions.TransformedDistribution` this provides + a way to create richer variational approximations. + + Example usage: + + >>> base_dist = dist.Normal(torch.zeros(10), torch.ones(10)) + >>> naf = BlockAutoregressive(input_dim=10) + >>> pyro.module("my_naf", naf) # doctest: +SKIP + >>> naf_dist = dist.TransformedDistribution(base_dist, [naf]) + >>> naf_dist.sample() # doctest: +SKIP + + The inverse operation is not implemented. This would require numerical + inversion, e.g., using a root finding method - a possibility for a future + implementation. + + :param input_dim: The dimensionality of the input and output variables. + :type input_dim: int + :param hidden_factors: Hidden layer i has hidden_factors[i] hidden units per + input dimension. This corresponds to both :math:`a` and :math:`b` in De Cao + et al. (2019). The elements of hidden_factors must be integers. + :type hidden_factors: list + :param activation: Activation function to use. One of 'ELU', 'LeakyReLU', + 'sigmoid', or 'tanh'. + :type activation: string + :param residual: Type of residual connections to use. Choices are "None", + "normal" for :math:`\mathbf{y}+f(\mathbf{y})`, and "gated" for + :math:`\alpha\mathbf{y} + (1 - \alpha\mathbf{y})` for learnable + parameter :math:`\alpha`. + :type residual: string + + References: + + [1] Nicola De Cao, Ivan Titov, Wilker Aziz. Block Neural Autoregressive Flow. + [arXiv:1904.04676] + + """ + + domain = constraints.real_vector + codomain = constraints.real_vector + bijective = True + autoregressive = True + + def __init__( + self, input_dim, hidden_factors=[8, 8], activation="tanh", residual=None + ): + super().__init__(cache_size=1) + + if any([h < 1 for h in hidden_factors]): + raise ValueError( + "Hidden factors, {}, must all be >= 1".format(hidden_factors) + ) + + if residual not in [None, "normal", "gated"]: + raise ValueError( + 'Invalid value {} for keyword argument "residual"'.format(residual) + ) + + # Mix in activation function methods + name_to_mixin = { + "ELU": ELUTransform, + "LeakyReLU": LeakyReLUTransform, + "sigmoid": torch.distributions.transforms.SigmoidTransform, + "tanh": TanhTransform, + } + if activation not in name_to_mixin: + raise ValueError('Invalid activation function "{}"'.format(activation)) + self.T = name_to_mixin[activation]() + + # Initialize modules for each layer in transform + self.residual = residual + self.input_dim = input_dim + self.layers = nn.ModuleList( + [MaskedBlockLinear(input_dim, input_dim * hidden_factors[0], input_dim)] + ) + for idx in range(1, len(hidden_factors)): + self.layers.append( + MaskedBlockLinear( + input_dim * hidden_factors[idx - 1], + input_dim * hidden_factors[idx], + input_dim, + ) + ) + self.layers.append( + MaskedBlockLinear(input_dim * hidden_factors[-1], input_dim, input_dim) + ) + self._cached_logDetJ = None + + if residual == "gated": + self.gate = torch.nn.Parameter(torch.nn.init.normal_(torch.Tensor(1))) + + def _call(self, x): + """ + :param x: the input into the bijection + :type x: torch.Tensor + + Invokes the bijection x=>y; in the prototypical context of a + :class:`~pyro.distributions.TransformedDistribution` `x` is a sample from + the base distribution (or the output of a previous transform) + """ + y = x + for idx in range(len(self.layers)): + pre_activation, dy_dx = self.layers[idx](y.unsqueeze(-1)) + + if idx == 0: + y = self.T(pre_activation) + J_act = self.T.log_abs_det_jacobian( + (pre_activation).view(*(list(x.size()) + [-1, 1])), + y.view(*(list(x.size()) + [-1, 1])), + ) + logDetJ = dy_dx + J_act + + elif idx < len(self.layers) - 1: + y = self.T(pre_activation) + J_act = self.T.log_abs_det_jacobian( + (pre_activation).view(*(list(x.size()) + [-1, 1])), + y.view(*(list(x.size()) + [-1, 1])), + ) + logDetJ = log_matrix_product(dy_dx, logDetJ) + J_act + + else: + y = pre_activation + logDetJ = log_matrix_product(dy_dx, logDetJ) + + self._cached_logDetJ = logDetJ.squeeze(-1).squeeze(-1) + + if self.residual == "normal": + y = y + x + self._cached_logDetJ = F.softplus(self._cached_logDetJ) + elif self.residual == "gated": + y = self.gate.sigmoid() * x + (1.0 - self.gate.sigmoid()) * y + term1 = torch.log(self.gate.sigmoid() + eps) + log1p_gate = torch.log1p(eps - self.gate.sigmoid()) + log_gate = torch.log(self.gate.sigmoid() + eps) + term2 = F.softplus(log1p_gate - log_gate + self._cached_logDetJ) + self._cached_logDetJ = term1 + term2 + + return y + + def _inverse(self, y): + """ + :param y: the output of the bijection + :type y: torch.Tensor + + Inverts y => x. As noted above, this implementation is incapable of + inverting arbitrary values `y`; rather it assumes `y` is the result of a + previously computed application of the bijector to some `x` (which was + cached on the forward call) + """ + + raise KeyError( + "BlockAutoregressive object expected to find key in intermediates cache but didn't" + ) + + def log_abs_det_jacobian(self, x, y): + """ + Calculates the elementwise determinant of the log jacobian + """ + x_old, y_old = self._cached_x_y + if x is not x_old or y is not y_old: + # This call to the parent class Transform will update the cache + # as well as calling self._call and recalculating y and log_detJ + self(x) + + return self._cached_logDetJ.sum(-1) + + +class MaskedBlockLinear(torch.nn.Module): + """ + Module that implements a linear layer with block matrices with positive diagonal + blocks. Moreover, it uses Weight Normalization + (https://arxiv.org/abs/1602.07868) for stability. + """ + + def __init__(self, in_features, out_features, dim, bias=True): + super().__init__() + self.in_features, self.out_features, self.dim = in_features, out_features, dim + + weight = torch.zeros(out_features, in_features) + + # Fill in non-zero entries of block weight matrix, going from top + # to bottom. + for i in range(dim): + weight[ + i * out_features // dim : (i + 1) * out_features // dim, + 0 : (i + 1) * in_features // dim, + ] = torch.nn.init.xavier_uniform_( + torch.Tensor(out_features // dim, (i + 1) * in_features // dim) + ) + + self._weight = torch.nn.Parameter(weight) + self._diag_weight = torch.nn.Parameter( + torch.nn.init.uniform_(torch.Tensor(out_features, 1)).log() + ) + + self.bias = ( + torch.nn.Parameter( + torch.nn.init.uniform_( + torch.Tensor(out_features), + -1 / math.sqrt(out_features), + 1 / math.sqrt(out_features), + ) + ) + if bias + else 0 + ) + + # Diagonal block mask + mask_d = ( + torch.eye(dim) + .unsqueeze(-1) + .repeat(1, out_features // dim, in_features // dim) + .view(out_features, in_features) + ) + self.register_buffer("mask_d", mask_d) + + # Off-diagonal block mask for lower triangular weight matrix + mask_o = torch.tril(torch.ones(dim, dim), diagonal=-1).unsqueeze(-1) + mask_o = mask_o.repeat(1, out_features // dim, in_features // dim).view( + out_features, in_features + ) + self.register_buffer("mask_o", mask_o) + + def get_weights(self): + """ + Computes the weight matrix using masks and weight normalization. + It also compute the log diagonal blocks of it. + """ + + # Form block weight matrix, making sure it's positive on diagonal! + w = torch.exp(self._weight) * self.mask_d + self._weight * self.mask_o + + # Sum is taken over columns, i.e. one norm per row + w_squared_norm = (w**2).sum(-1, keepdim=True) + + # Effect of multiplication and division is that each row is normalized and rescaled + w = self._diag_weight.exp() * w / (w_squared_norm.sqrt() + eps) + + # Taking the effect of weight normalization into account in calculating the log-gradient is straightforward! + # Instead of differentiating, e.g. d(W_1x)/dx, we have d(g_1W_1/(W_1^TW_1)^0.5x)/dx, roughly speaking, and + # taking the log gives the right hand side below: + wpl = self._diag_weight + self._weight - 0.5 * torch.log(w_squared_norm + eps) + + return w, wpl[self.mask_d.bool()].view( + self.dim, self.out_features // self.dim, self.in_features // self.dim + ) + + def forward(self, x): + w, wpl = self.get_weights() + return (torch.matmul(w, x) + self.bias.unsqueeze(-1)).squeeze(-1), wpl + + +def block_autoregressive(input_dim, **kwargs): + r""" + A helper function to create a + :class:`~pyro.distributions.transforms.BlockAutoregressive` object for + consistency with other helpers. + + :param input_dim: Dimension of input variable + :type input_dim: int + :param hidden_factors: Hidden layer i has hidden_factors[i] hidden units per + input dimension. This corresponds to both :math:`a` and :math:`b` in De Cao + et al. (2019). The elements of hidden_factors must be integers. + :type hidden_factors: list + :param activation: Activation function to use. One of 'ELU', 'LeakyReLU', + 'sigmoid', or 'tanh'. + :type activation: string + :param residual: Type of residual connections to use. Choices are "None", + "normal" for :math:`\mathbf{y}+f(\mathbf{y})`, and "gated" for + :math:`\alpha\mathbf{y} + (1 - \alpha\mathbf{y})` for learnable + parameter :math:`\alpha`. + :type residual: string + + """ + + return BlockAutoregressive(input_dim, **kwargs) diff --git a/pyro/source/pyro/distributions/transforms/cholesky.py b/pyro/source/pyro/distributions/transforms/cholesky.py new file mode 100644 index 0000000000000000000000000000000000000000..c174c40d4a40226116dade4ac446101973878af3 --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/cholesky.py @@ -0,0 +1,68 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math +import warnings + +import torch +from torch.distributions.transforms import CorrCholeskyTransform, Transform + +from .. import constraints + + +class CorrLCholeskyTransform(CorrCholeskyTransform): # DEPRECATED + def __init__(self, cache_size=0): + warnings.warn( + "class CorrLCholeskyTransform is deprecated in favor of CorrCholeskyTransform.", + FutureWarning, + ) + super().__init__(cache_size=cache_size) + + +class CholeskyTransform(Transform): + r""" + Transform via the mapping :math:`y = safe_cholesky(x)`, where `x` is a + positive definite matrix. + """ + + bijective = True + domain = constraints.positive_definite + codomain = constraints.lower_cholesky + + def __eq__(self, other): + return isinstance(other, CholeskyTransform) + + def _call(self, x): + return torch.linalg.cholesky(x) + + def _inverse(self, y): + return torch.matmul(y, torch.transpose(y, -2, -1)) + + def log_abs_det_jacobian(self, x, y): + # Ref: http://web.mit.edu/18.325/www/handouts/handout2.pdf page 13 + n = x.shape[-1] + order = torch.arange(n, 0, -1, dtype=x.dtype, device=x.device) + return -n * math.log(2) - ( + order * torch.diagonal(y, dim1=-2, dim2=-1).log() + ).sum(-1) + + +class CorrMatrixCholeskyTransform(CholeskyTransform): + r""" + Transform via the mapping :math:`y = safe_cholesky(x)`, where `x` is a + correlation matrix. + """ + + bijective = True + domain = constraints.corr_matrix + # TODO: change corr_cholesky_constraint to corr_cholesky when the latter is availabler + codomain = constraints.corr_cholesky_constraint + + def __eq__(self, other): + return isinstance(other, CorrMatrixCholeskyTransform) + + def log_abs_det_jacobian(self, x, y): + # NB: see derivation in LKJCholesky implementation + n = x.shape[-1] + order = torch.arange(n - 1, -1, -1, dtype=x.dtype, device=x.device) + return -(order * torch.diagonal(y, dim1=-2, dim2=-1).log()).sum(-1) diff --git a/pyro/source/pyro/distributions/transforms/discrete_cosine.py b/pyro/source/pyro/distributions/transforms/discrete_cosine.py new file mode 100644 index 0000000000000000000000000000000000000000..22e7945a86b49d6976e705f79e98d87a858f3706 --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/discrete_cosine.py @@ -0,0 +1,104 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions.transforms import Transform + +from pyro.ops.tensor_utils import dct, idct + +from .. import constraints + + +class DiscreteCosineTransform(Transform): + """ + Discrete Cosine Transform of type-II. + + This uses :func:`~pyro.ops.tensor_utils.dct` and + :func:`~pyro.ops.tensor_utils.idct` to compute + orthonormal DCT and inverse DCT transforms. The jacobian is 1. + + :param int dim: Dimension along which to transform. Must be negative. + This is an absolute dim counting from the right. + :param float smooth: Smoothing parameter. When 0, this transforms white + noise to white noise; when 1 this transforms Brownian noise to to white + noise; when -1 this transforms violet noise to white noise; etc. Any + real number is allowed. https://en.wikipedia.org/wiki/Colors_of_noise. + """ + + bijective = True + + def __init__(self, dim=-1, smooth=0.0, cache_size=0): + assert isinstance(dim, int) and dim < 0 + self.dim = dim + self.smooth = float(smooth) + self._weight_cache = None + super().__init__(cache_size=cache_size) + + def __hash__(self): + return hash((type(self), self.dim, self.smooth)) + + def __eq__(self, other): + return ( + type(self) == type(other) + and self.dim == other.dim + and self.smooth == other.smooth + ) + + @constraints.dependent_property(is_discrete=False) + def domain(self): + return constraints.independent(constraints.real, -self.dim) + + @constraints.dependent_property(is_discrete=False) + def codomain(self): + return constraints.independent(constraints.real, -self.dim) + + @torch.no_grad() + def _weight(self, y): + size = y.size(-1) + if self._weight_cache is None or self._weight_cache.size(-1) != size: + # Weight by frequency**smooth, where the DCT-II frequencies are: + freq = torch.linspace(0.5, size - 0.5, size, dtype=y.dtype, device=y.device) + w = freq.pow_(self.smooth) + w /= w.log().mean().exp() # Ensure |jacobian| = 1. + self._weight_cache = w + return self._weight_cache + + def _call(self, x): + dim = self.dim + if dim != -1: + x = x.transpose(dim, -1) + y = dct(x) + if self.smooth: + y = y * self._weight(y) + if dim != -1: + y = y.transpose(dim, -1) + return y + + def _inverse(self, y): + dim = self.dim + if dim != -1: + y = y.transpose(dim, -1) + if self.smooth: + y = y / self._weight(y) + x = idct(y) + if dim != -1: + x = x.transpose(dim, -1) + return x + + def log_abs_det_jacobian(self, x, y): + return x.new_zeros(x.shape[: self.dim]) + + def with_cache(self, cache_size=1): + if self._cache_size == cache_size: + return self + return DiscreteCosineTransform(self.dim, self.smooth, cache_size=cache_size) + + def forward_shape(self, shape): + if len(shape) < self.event_dim: + raise ValueError("Too few dimensions on input") + return shape + + def inverse_shape(self, shape): + if len(shape) < self.event_dim: + raise ValueError("Too few dimensions on input") + return shape diff --git a/pyro/source/pyro/distributions/transforms/generalized_channel_permute.py b/pyro/source/pyro/distributions/transforms/generalized_channel_permute.py new file mode 100644 index 0000000000000000000000000000000000000000..1d2e733823a24d88d3865b5fdf428fdd60124785 --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/generalized_channel_permute.py @@ -0,0 +1,314 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions import Transform + +from pyro.nn import DenseNN + +from .. import constraints +from ..conditional import ConditionalTransformModule +from ..torch_transform import TransformModule +from ..util import copy_docs_from + + +@copy_docs_from(Transform) +class ConditionedGeneralizedChannelPermute(Transform): + domain = constraints.independent(constraints.real, 3) + codomain = constraints.independent(constraints.real, 3) + bijective = True + + def __init__(self, permutation=None, LU=None): + super(ConditionedGeneralizedChannelPermute, self).__init__(cache_size=1) + + self.permutation = permutation + self.LU = LU + + @property + def U_diag(self): + return self.LU.diag() + + @property + def L(self): + return self.LU.tril(diagonal=-1) + torch.eye( + self.LU.size(-1), dtype=self.LU.dtype, device=self.LU.device + ) + + @property + def U(self): + return self.LU.triu() + + def _call(self, x): + """ + :param x: the input into the bijection + :type x: torch.Tensor + + Invokes the bijection x=>y; in the prototypical context of a + :class:`~pyro.distributions.TransformedDistribution` `x` is a sample from + the base distribution (or the output of a previous transform) + """ + + """ + NOTE: As is the case for other conditional transforms, the batch dim of the + context variable (reflected in the initial dimensions of filters in this + case), if this is a conditional transform, must broadcast over the batch dim + of the input variable. + + Also, the reason the following line uses matrix multiplication rather than + F.conv2d is so we can perform multiple convolutions when the filters + "kernel" has batch dimensions + """ + filters = (self.permutation @ self.L @ self.U)[..., None, None] + y = (filters * x.unsqueeze(-4)).sum(-3) + return y + + def _inverse(self, y): + """ + :param y: the output of the bijection + :type y: torch.Tensor + + Inverts y => x. + """ + + """ + NOTE: This method is equivalent to the following two lines. Using + Tensor.inverse() would be numerically unstable, however. + + filters = (self.permutation @ self.L @ self.U).inverse()[..., None, None] + x = F.conv2d(y.view(-1, *y.shape[-3:]), filters) + return x.view_as(y) + + """ + + # Do a matrix vector product over the channel dimension + # in order to apply inverse permutation matrix + y_flat = y.flatten(start_dim=-2) + LUx = (y_flat.unsqueeze(-3) * self.permutation.T.unsqueeze(-1)).sum(-2) + + # Solve L(Ux) = P^1y + Ux = torch.linalg.solve_triangular(self.L, LUx, upper=False) + + # Solve Ux = (PL)^-1y + x = torch.linalg.solve_triangular(self.U, Ux, upper=True) + + # Unflatten x (works when context variable has batch dim) + return x.reshape(x.shape[:-1] + y.shape[-2:]) + + def log_abs_det_jacobian(self, x, y): + """ + Calculates the elementwise determinant of the log Jacobian, i.e. + log(abs(det(dy/dx))). + """ + + h, w = x.shape[-2:] + log_det = h * w * self.U_diag.abs().log().sum() + return log_det * torch.ones( + x.size()[:-3], dtype=x.dtype, layout=x.layout, device=x.device + ) + + +@copy_docs_from(ConditionedGeneralizedChannelPermute) +class GeneralizedChannelPermute(ConditionedGeneralizedChannelPermute, TransformModule): + r""" + A bijection that generalizes a permutation on the channels of a batch of 2D + image in :math:`[\ldots,C,H,W]` format. Specifically this transform performs + the operation, + + :math:`\mathbf{y} = \text{torch.nn.functional.conv2d}(\mathbf{x}, W)` + + where :math:`\mathbf{x}` are the inputs, :math:`\mathbf{y}` are the outputs, + and :math:`W\sim C\times C\times 1\times 1` is the filter matrix for a 1x1 + convolution with :math:`C` input and output channels. + + Ignoring the final two dimensions, :math:`W` is restricted to be the matrix + product, + + :math:`W = PLU` + + where :math:`P\sim C\times C` is a permutation matrix on the channel + dimensions, :math:`L\sim C\times C` is a lower triangular matrix with ones on + the diagonal, and :math:`U\sim C\times C` is an upper triangular matrix. + :math:`W` is initialized to a random orthogonal matrix. Then, :math:`P` is fixed + and the learnable parameters set to :math:`L,U`. + + The input :math:`\mathbf{x}` and output :math:`\mathbf{y}` both have shape + `[...,C,H,W]`, where `C` is the number of channels set at initialization. + + This operation was introduced in [1] for Glow normalizing flow, and is also + known as 1x1 invertible convolution. It appears in other notable work such as + [2,3], and corresponds to the class `tfp.bijectors.MatvecLU` of TensorFlow + Probability. + + Example usage: + + >>> channels = 3 + >>> base_dist = dist.Normal(torch.zeros(channels, 32, 32), + ... torch.ones(channels, 32, 32)) + >>> inv_conv = GeneralizedChannelPermute(channels=channels) + >>> flow_dist = dist.TransformedDistribution(base_dist, [inv_conv]) + >>> flow_dist.sample() # doctest: +SKIP + + :param channels: Number of channel dimensions in the input. + :type channels: int + + [1] Diederik P. Kingma, Prafulla Dhariwal. Glow: Generative Flow with Invertible + 1x1 Convolutions. [arXiv:1807.03039] + + [2] Ryan Prenger, Rafael Valle, Bryan Catanzaro. WaveGlow: A Flow-based + Generative Network for Speech Synthesis. [arXiv:1811.00002] + + [3] Conor Durkan, Artur Bekasov, Iain Murray, George Papamakarios. Neural Spline + Flows. [arXiv:1906.04032] + + """ + + domain = constraints.independent(constraints.real, 3) + codomain = constraints.independent(constraints.real, 3) + bijective = True + + def __init__(self, channels=3, permutation=None): + super(GeneralizedChannelPermute, self).__init__() + self.__delattr__("permutation") + + # Sample a random orthogonal matrix + W, _ = torch.linalg.qr(torch.randn(channels, channels)) + + # Construct the partially pivoted LU-form and the pivots + LU, pivots = torch.linalg.lu_factor(W) + + # Convert the pivots into the permutation matrix + if permutation is None: + P, _, _ = torch.lu_unpack(LU, pivots) + else: + if len(permutation) != channels: + raise ValueError( + 'Keyword argument "permutation" expected to have {} elements but {} found.'.format( + channels, len(permutation) + ) + ) + P = torch.eye(channels, channels)[permutation.type(dtype=torch.int64)] + + # We register the permutation matrix so that the model can be serialized + self.register_buffer("permutation", P) + + # NOTE: For this implementation I have chosen to store the parameters densely, rather than + # storing L, U, and s separately + self.LU = torch.nn.Parameter(LU) + + +@copy_docs_from(ConditionalTransformModule) +class ConditionalGeneralizedChannelPermute(ConditionalTransformModule): + r""" + A bijection that generalizes a permutation on the channels of a batch of 2D + image in :math:`[\ldots,C,H,W]` format conditioning on an additional context + variable. Specifically this transform performs the operation, + + :math:`\mathbf{y} = \text{torch.nn.functional.conv2d}(\mathbf{x}, W)` + + where :math:`\mathbf{x}` are the inputs, :math:`\mathbf{y}` are the outputs, + and :math:`W\sim C\times C\times 1\times 1` is the filter matrix for a 1x1 + convolution with :math:`C` input and output channels. + + Ignoring the final two dimensions, :math:`W` is restricted to be the matrix + product, + + :math:`W = PLU` + + where :math:`P\sim C\times C` is a permutation matrix on the channel + dimensions, and :math:`LU\sim C\times C` is an invertible product of a lower + triangular and an upper triangular matrix that is the output of an NN with + input :math:`z\in\mathbb{R}^{M}` representing the context variable to + condition on. + + The input :math:`\mathbf{x}` and output :math:`\mathbf{y}` both have shape + `[...,C,H,W]`, where `C` is the number of channels set at initialization. + + This operation was introduced in [1] for Glow normalizing flow, and is also + known as 1x1 invertible convolution. It appears in other notable work such as + [2,3], and corresponds to the class `tfp.bijectors.MatvecLU` of TensorFlow + Probability. + + Example usage: + + >>> from pyro.nn.dense_nn import DenseNN + >>> context_dim = 5 + >>> batch_size = 3 + >>> channels = 3 + >>> base_dist = dist.Normal(torch.zeros(channels, 32, 32), + ... torch.ones(channels, 32, 32)) + >>> hidden_dims = [context_dim*10, context_dim*10] + >>> nn = DenseNN(context_dim, hidden_dims, param_dims=[channels*channels]) + >>> transform = ConditionalGeneralizedChannelPermute(nn, channels=channels) + >>> z = torch.rand(batch_size, context_dim) + >>> flow_dist = dist.ConditionalTransformedDistribution(base_dist, + ... [transform]).condition(z) + >>> flow_dist.sample(sample_shape=torch.Size([batch_size])) # doctest: +SKIP + + :param nn: a function inputting the context variable and outputting + real-valued parameters of dimension :math:`C^2`. + :param channels: Number of channel dimensions in the input. + :type channels: int + + [1] Diederik P. Kingma, Prafulla Dhariwal. Glow: Generative Flow with Invertible + 1x1 Convolutions. [arXiv:1807.03039] + + [2] Ryan Prenger, Rafael Valle, Bryan Catanzaro. WaveGlow: A Flow-based + Generative Network for Speech Synthesis. [arXiv:1811.00002] + + [3] Conor Durkan, Artur Bekasov, Iain Murray, George Papamakarios. Neural Spline + Flows. [arXiv:1906.04032] + + """ + + domain = constraints.independent(constraints.real, 3) + codomain = constraints.independent(constraints.real, 3) + bijective = True + + def __init__(self, nn, channels=3, permutation=None): + super().__init__() + self.nn = nn + self.channels = channels + if permutation is None: + permutation = torch.randperm(channels, device="cpu").to( + torch.Tensor().device + ) + P = torch.eye(len(permutation), len(permutation))[ + permutation.type(dtype=torch.int64) + ] + self.register_buffer("permutation", P) + + def condition(self, context): + LU = self.nn(context) + LU = LU.view(LU.shape[:-1] + (self.channels, self.channels)) + return ConditionedGeneralizedChannelPermute(self.permutation, LU) + + +def generalized_channel_permute(**kwargs): + """ + A helper function to create a + :class:`~pyro.distributions.transforms.GeneralizedChannelPermute` object for + consistency with other helpers. + + :param channels: Number of channel dimensions in the input. + :type channels: int + + """ + + return GeneralizedChannelPermute(**kwargs) + + +def conditional_generalized_channel_permute(context_dim, channels=3, hidden_dims=None): + """ + A helper function to create a + :class:`~pyro.distributions.transforms.ConditionalGeneralizedChannelPermute` + object for consistency with other helpers. + + :param channels: Number of channel dimensions in the input. + :type channels: int + + """ + + if hidden_dims is None: + hidden_dims = [channels * 10, channels * 10] + nn = DenseNN(context_dim, hidden_dims, param_dims=[channels * channels]) + return ConditionalGeneralizedChannelPermute(nn, channels) diff --git a/pyro/source/pyro/distributions/transforms/haar.py b/pyro/source/pyro/distributions/transforms/haar.py new file mode 100644 index 0000000000000000000000000000000000000000..3702ef53a4dec9d453ce4480c738bb85296d34cd --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/haar.py @@ -0,0 +1,92 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from torch.distributions.transforms import Transform + +from pyro.ops.tensor_utils import haar_transform, inverse_haar_transform + +from .. import constraints + + +class HaarTransform(Transform): + """ + Discrete Haar transform. + + This uses :func:`~pyro.ops.tensor_utils.haar_transform` and + :func:`~pyro.ops.tensor_utils.inverse_haar_transform` to compute + (orthonormal) Haar and inverse Haar transforms. The jacobian is 1. + For sequences with length `T` not a power of two, this implementation + is equivalent to a block-structured Haar transform in which block + sizes decrease by factors of one half from left to right. + + :param int dim: Dimension along which to transform. Must be negative. + This is an absolute dim counting from the right. + :param bool flip: Whether to flip the time axis before applying the + Haar transform. Defaults to false. + """ + + bijective = True + + def __init__(self, dim=-1, flip=False, cache_size=0): + assert isinstance(dim, int) and dim < 0 + self.dim = dim + self.flip = flip + super().__init__(cache_size=cache_size) + + def __hash__(self): + return hash((type(self), self.event_dim, self.flip)) + + def __eq__(self, other): + return ( + type(self) == type(other) + and self.dim == other.dim + and self.flip == other.flip + ) + + @constraints.dependent_property(is_discrete=False) + def domain(self): + return constraints.independent(constraints.real, -self.dim) + + @constraints.dependent_property(is_discrete=False) + def codomain(self): + return constraints.independent(constraints.real, -self.dim) + + def _call(self, x): + dim = self.dim + if dim != -1: + x = x.transpose(dim, -1) + if self.flip: + x = x.flip(-1) + y = haar_transform(x) + if dim != -1: + y = y.transpose(dim, -1) + return y + + def _inverse(self, y): + dim = self.dim + if dim != -1: + y = y.transpose(dim, -1) + x = inverse_haar_transform(y) + if self.flip: + x = x.flip(-1) + if dim != -1: + x = x.transpose(dim, -1) + return x + + def log_abs_det_jacobian(self, x, y): + return x.new_zeros(x.shape[: self.dim]) + + def with_cache(self, cache_size=1): + if self._cache_size == cache_size: + return self + return HaarTransform(self.dim, flip=self.flip, cache_size=cache_size) + + def forward_shape(self, shape): + if len(shape) < self.event_dim: + raise ValueError("Too few dimensions on input") + return shape + + def inverse_shape(self, shape): + if len(shape) < self.event_dim: + raise ValueError("Too few dimensions on input") + return shape diff --git a/pyro/source/pyro/distributions/transforms/householder.py b/pyro/source/pyro/distributions/transforms/householder.py new file mode 100644 index 0000000000000000000000000000000000000000..47183de92535c304d71fbf71f91ce23d5499733b --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/householder.py @@ -0,0 +1,291 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math +import warnings +from functools import partial + +import torch +import torch.nn as nn +from torch.distributions import Transform, constraints + +from pyro.nn import DenseNN + +from ..conditional import ConditionalTransformModule +from ..torch_transform import TransformModule +from ..util import copy_docs_from + + +class ConditionedHouseholder(Transform): + domain = constraints.real_vector + codomain = constraints.real_vector + bijective = True + volume_preserving = True + + def __init__(self, u_unnormed=None): + super().__init__(cache_size=1) + self.u_unnormed = u_unnormed + + # Construct normalized vectors for Householder transform + def u(self): + u_unnormed = self.u_unnormed() if callable(self.u_unnormed) else self.u_unnormed + norm = torch.linalg.norm(u_unnormed, ord=2, dim=-1, keepdim=True) + return torch.div(u_unnormed, norm) + + def _call(self, x): + """ + :param x: the input into the bijection + :type x: torch.Tensor + + Invokes the bijection x=>y; in the prototypical context of a + :class:`~pyro.distributions.TransformedDistribution` `x` is a sample from + the base distribution (or the output of a previous transform) + """ + + y = x + u = self.u() + for idx in range(u.size(-2)): + projection = (u[..., idx, :] * y).sum(dim=-1, keepdim=True) * u[..., idx, :] + y = y - 2.0 * projection + return y + + def _inverse(self, y): + """ + :param y: the output of the bijection + :type y: torch.Tensor + + Inverts y => x. The Householder transformation, H, is "involutory," i.e. + H^2 = I. If you reflect a point around a plane, then the same operation will + reflect it back + """ + + x = y + u = self.u() + for jdx in reversed(range(u.size(-2))): + # NOTE: Need to apply transforms in reverse order from forward operation! + projection = (u[..., jdx, :] * x).sum(dim=-1, keepdim=True) * u[..., jdx, :] + x = x - 2.0 * projection + return x + + def log_abs_det_jacobian(self, x, y): + r""" + Calculates the elementwise determinant of the log jacobian. Householder flow + is measure preserving, so :math:`\log(|detJ|) = 0` + """ + + return torch.zeros( + x.size()[:-1], dtype=x.dtype, layout=x.layout, device=x.device + ) + + +@copy_docs_from(TransformModule) +class Householder(ConditionedHouseholder, TransformModule): + r""" + Represents multiple applications of the Householder bijective transformation. A + single Householder transformation takes the form, + + :math:`\mathbf{y} = (I - 2*\frac{\mathbf{u}\mathbf{u}^T}{||\mathbf{u}||^2})\mathbf{x}` + + where :math:`\mathbf{x}` are the inputs, :math:`\mathbf{y}` are the outputs, + and the learnable parameters are :math:`\mathbf{u}\in\mathbb{R}^D` for input + dimension :math:`D`. + + The transformation represents the reflection of :math:`\mathbf{x}` through the + plane passing through the origin with normal :math:`\mathbf{u}`. + + :math:`D` applications of this transformation are able to transform standard + i.i.d. standard Gaussian noise into a Gaussian variable with an arbitrary + covariance matrix. With :math:`K>> base_dist = dist.Normal(torch.zeros(10), torch.ones(10)) + >>> transform = Householder(10, count_transforms=5) + >>> pyro.module("my_transform", p) # doctest: +SKIP + >>> flow_dist = dist.TransformedDistribution(base_dist, [transform]) + >>> flow_dist.sample() # doctest: +SKIP + + :param input_dim: the dimension of the input (and output) variable. + :type input_dim: int + :param count_transforms: number of applications of Householder transformation to + apply. + :type count_transforms: int + + References: + + [1] Jakub M. Tomczak, Max Welling. Improving Variational Auto-Encoders using + Householder Flow. [arXiv:1611.09630] + + """ + + domain = constraints.real_vector + codomain = constraints.real_vector + bijective = True + volume_preserving = True + + def __init__(self, input_dim, count_transforms=1): + super().__init__() + + self.input_dim = input_dim + if count_transforms < 1: + raise ValueError( + "Number of Householder transforms, {}, is less than 1!".format( + count_transforms + ) + ) + elif count_transforms > input_dim: + warnings.warn( + "Number of Householder transforms, {}, is greater than input dimension {}, which is an \ +over-parametrization!".format( + count_transforms, input_dim + ) + ) + self.u_unnormed = nn.Parameter(torch.Tensor(count_transforms, input_dim)) + self.reset_parameters() + + def reset_parameters(self): + stdv = 1.0 / math.sqrt(self.u_unnormed.size(-1)) + self.u_unnormed.data.uniform_(-stdv, stdv) + + +@copy_docs_from(ConditionalTransformModule) +class ConditionalHouseholder(ConditionalTransformModule): + r""" + Represents multiple applications of the Householder bijective transformation + conditioning on an additional context. A single Householder transformation takes + the form, + + :math:`\mathbf{y} = (I - 2*\frac{\mathbf{u}\mathbf{u}^T}{||\mathbf{u}||^2})\mathbf{x}` + + where :math:`\mathbf{x}` are the inputs with dimension :math:`D`, + :math:`\mathbf{y}` are the outputs, and :math:`\mathbf{u}\in\mathbb{R}^D` + is the output of a function, e.g. a NN, with input :math:`z\in\mathbb{R}^{M}` + representing the context variable to condition on. + + The transformation represents the reflection of :math:`\mathbf{x}` through the + plane passing through the origin with normal :math:`\mathbf{u}`. + + :math:`D` applications of this transformation are able to transform standard + i.i.d. standard Gaussian noise into a Gaussian variable with an arbitrary + covariance matrix. With :math:`K>> from pyro.nn.dense_nn import DenseNN + >>> input_dim = 10 + >>> context_dim = 5 + >>> batch_size = 3 + >>> base_dist = dist.Normal(torch.zeros(input_dim), torch.ones(input_dim)) + >>> param_dims = [input_dim] + >>> hypernet = DenseNN(context_dim, [50, 50], param_dims) + >>> transform = ConditionalHouseholder(input_dim, hypernet) + >>> z = torch.rand(batch_size, context_dim) + >>> flow_dist = dist.ConditionalTransformedDistribution(base_dist, + ... [transform]).condition(z) + >>> flow_dist.sample(sample_shape=torch.Size([batch_size])) # doctest: +SKIP + + :param input_dim: the dimension of the input (and output) variable. + :type input_dim: int + :param nn: a function inputting the context variable and outputting a triplet of + real-valued parameters of dimensions :math:`(1, D, D)`. + :type nn: callable + :param count_transforms: number of applications of Householder transformation to + apply. + :type count_transforms: int + + References: + + [1] Jakub M. Tomczak, Max Welling. Improving Variational Auto-Encoders using + Householder Flow. [arXiv:1611.09630] + + """ + + domain = constraints.real_vector + codomain = constraints.real_vector + bijective = True + + def __init__(self, input_dim, nn, count_transforms=1): + super().__init__() + self.nn = nn + self.input_dim = input_dim + if count_transforms < 1: + raise ValueError( + "Number of Householder transforms, {}, is less than 1!".format( + count_transforms + ) + ) + elif count_transforms > input_dim: + warnings.warn( + "Number of Householder transforms, {}, is greater than input dimension {}, which is an \ +over-parametrization!".format( + count_transforms, input_dim + ) + ) + self.count_transforms = count_transforms + + def _u_unnormed(self, context): + # u_unnormed ~ (count_transforms, input_dim) + # Hence, input_dim must divide + u_unnormed = self.nn(context) + if self.count_transforms == 1: + u_unnormed = u_unnormed.unsqueeze(-2) + else: + u_unnormed = torch.stack(u_unnormed, dim=-2) + return u_unnormed + + def condition(self, context): + u_unnormed = partial(self._u_unnormed, context) + return ConditionedHouseholder(u_unnormed) + + +def householder(input_dim, count_transforms=None): + """ + A helper function to create a + :class:`~pyro.distributions.transforms.Householder` object for consistency with + other helpers. + + :param input_dim: Dimension of input variable + :type input_dim: int + :param count_transforms: number of applications of Householder transformation to + apply. + :type count_transforms: int + + """ + + if count_transforms is None: + count_transforms = input_dim // 2 + 1 + return Householder(input_dim, count_transforms=count_transforms) + + +def conditional_householder( + input_dim, context_dim, hidden_dims=None, count_transforms=1 +): + """ + A helper function to create a + :class:`~pyro.distributions.transforms.ConditionalHouseholder` object that takes + care of constructing a dense network with the correct input/output dimensions. + + :param input_dim: Dimension of input variable + :type input_dim: int + :param context_dim: Dimension of context variable + :type context_dim: int + :param hidden_dims: The desired hidden dimensions of the dense network. Defaults + to using [input_dim * 10, input_dim * 10] + :type hidden_dims: list[int] + + """ + + if hidden_dims is None: + hidden_dims = [input_dim * 10, input_dim * 10] + nn = DenseNN(context_dim, hidden_dims, param_dims=[input_dim] * count_transforms) + return ConditionalHouseholder(input_dim, nn, count_transforms) diff --git a/pyro/source/pyro/distributions/transforms/lower_cholesky_affine.py b/pyro/source/pyro/distributions/transforms/lower_cholesky_affine.py new file mode 100644 index 0000000000000000000000000000000000000000..c078e0ef53a175a3c30dcb0f058c1232e929b12e --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/lower_cholesky_affine.py @@ -0,0 +1,77 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions.transforms import Transform + +from .. import constraints +from ..util import copy_docs_from + + +@copy_docs_from(Transform) +class LowerCholeskyAffine(Transform): + """ + A bijection of the form, + + :math:`\\mathbf{y} = \\mathbf{L} \\mathbf{x} + \\mathbf{r}` + + where `\\mathbf{L}` is a lower triangular matrix and `\\mathbf{r}` is a vector. + + :param loc: the fixed D-dimensional vector to shift the input by. + :type loc: torch.tensor + :param scale_tril: the D x D lower triangular matrix used in the transformation. + :type scale_tril: torch.tensor + + """ + + domain = constraints.real_vector + codomain = constraints.real_vector + bijective = True + volume_preserving = False + + def __init__(self, loc, scale_tril, cache_size=0): + super().__init__(cache_size=cache_size) + self.loc = loc + self.scale_tril = scale_tril + assert ( + loc.size(-1) == scale_tril.size(-1) == scale_tril.size(-2) + ), "loc and scale_tril must be of size D and D x D, respectively (instead: {}, {})".format( + loc.shape, scale_tril.shape + ) + + def _call(self, x): + """ + :param x: the input into the bijection + :type x: torch.Tensor + + Invokes the bijection x=>y; in the prototypical context of a + :class:`~pyro.distributions.TransformedDistribution` `x` is a sample from + the base distribution (or the output of a previous transform) + """ + return torch.matmul(self.scale_tril, x.unsqueeze(-1)).squeeze(-1) + self.loc + + def _inverse(self, y): + """ + :param y: the output of the bijection + :type y: torch.Tensor + + Inverts y => x. + """ + return torch.linalg.solve_triangular( + self.scale_tril, (y - self.loc).unsqueeze(-1), upper=False + ).squeeze(-1) + + def log_abs_det_jacobian(self, x, y): + """ + Calculates the elementwise determinant of the log Jacobian, i.e. + log(abs(dy/dx)). + """ + return ( + torch.ones(x.size()[:-1], dtype=x.dtype, layout=x.layout, device=x.device) + * self.scale_tril.diag().log().sum() + ) + + def with_cache(self, cache_size=1): + if self._cache_size == cache_size: + return self + return LowerCholeskyAffine(self.loc, self.scale_tril, cache_size=cache_size) diff --git a/pyro/source/pyro/distributions/transforms/matrix_exponential.py b/pyro/source/pyro/distributions/transforms/matrix_exponential.py new file mode 100644 index 0000000000000000000000000000000000000000..8b721f060df00de76a678ca564a8f933765c2566 --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/matrix_exponential.py @@ -0,0 +1,334 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math +from functools import partial + +import torch +import torch.nn as nn +from torch.distributions import Transform, constraints + +from pyro.nn import DenseNN + +from ..conditional import ConditionalTransformModule +from ..torch_transform import TransformModule +from ..util import copy_docs_from + + +@copy_docs_from(Transform) +class ConditionedMatrixExponential(Transform): + domain = constraints.real_vector + codomain = constraints.real_vector + bijective = True + + def __init__(self, weights=None, iterations=8, normalization="none", bound=None): + super().__init__(cache_size=1) + assert iterations > 0 + self.weights = weights + self.iterations = iterations + self.normalization = normalization + self.bound = bound + + # Currently, weight and spectral normalization are unimplemented. This doesn't effect the validity of the + # bijection, although applying these norms should improve the numerical conditioning of the approximation. + if normalization == "weight" or normalization == "spectral": + raise NotImplementedError("Normalization is currently not implemented.") + elif normalization != "none": + raise ValueError("Unknown normalization method: {}".format(normalization)) + + def _exp(self, x, M): + """ + Performs power series approximation to the vector product of x with the + matrix exponential of M. + """ + power_term = x.unsqueeze(-1) + y = x.unsqueeze(-1) + for idx in range(self.iterations): + power_term = torch.matmul(M, power_term) / (idx + 1) + y = y + power_term + + return y.squeeze(-1) + + def _trace(self, M): + """ + Calculates the trace of a matrix and is able to do broadcasting over batch + dimensions, unlike `torch.trace`. + + Broadcasting is necessary for the conditional version of the transform, + where `self.weights` may have batch dimensions corresponding the batch + dimensions of the context variable that was conditioned upon. + """ + return M.diagonal(dim1=-2, dim2=-1).sum(-1) + + def _call(self, x): + """ + :param x: the input into the bijection + :type x: torch.Tensor + Invokes the bijection x => y; in the prototypical context of a + :class:`~pyro.distributions.TransformedDistribution` `x` is a sample from + the base distribution (or the output of a previous transform) + """ + + M = self.weights() if callable(self.weights) else self.weights + return self._exp(x, M) + + def _inverse(self, y): + """ + :param y: the output of the bijection + :type y: torch.Tensor + Inverts y => x. + """ + + M = self.weights() if callable(self.weights) else self.weights + return self._exp(y, -M) + + def log_abs_det_jacobian(self, x, y): + """ + Calculates the element-wise determinant of the log Jacobian + """ + + M = self.weights() if callable(self.weights) else self.weights + return self._trace(M) + + +@copy_docs_from(ConditionedMatrixExponential) +class MatrixExponential(ConditionedMatrixExponential, TransformModule): + r""" + A dense matrix exponential bijective transform (Hoogeboom et al., 2020) with + equation, + + :math:`\mathbf{y} = \exp(M)\mathbf{x}` + + where :math:`\mathbf{x}` are the inputs, :math:`\mathbf{y}` are the outputs, + :math:`\exp(\cdot)` represents the matrix exponential, and the learnable + parameters are :math:`M\in\mathbb{R}^D\times\mathbb{R}^D` for input dimension + :math:`D`. In general, :math:`M` is not required to be invertible. + + Due to the favourable mathematical properties of the matrix exponential, the + transform has an exact inverse and a log-determinate-Jacobian that scales in + time-complexity as :math:`O(D)`. Both the forward and reverse operations are + approximated with a truncated power series. For numerical stability, the + norm of :math:`M` can be restricted with the `normalization` keyword argument. + + Example usage: + + >>> base_dist = dist.Normal(torch.zeros(10), torch.ones(10)) + >>> transform = MatrixExponential(10) + >>> pyro.module("my_transform", transform) # doctest: +SKIP + >>> flow_dist = dist.TransformedDistribution(base_dist, [transform]) + >>> flow_dist.sample() # doctest: +SKIP + + :param input_dim: the dimension of the input (and output) variable. + :type input_dim: int + :param iterations: the number of terms to use in the truncated power series that + approximates matrix exponentiation. + :type iterations: int + :param normalization: One of `['none', 'weight', 'spectral']` normalization that + selects what type of normalization to apply to the weight matrix. `weight` + corresponds to weight normalization (Salimans and Kingma, 2016) and + `spectral` to spectral normalization (Miyato et al, 2018). + :type normalization: string + :param bound: a bound on either the weight or spectral norm, when either of + those two types of regularization are chosen by the `normalization` + argument. A lower value for this results in fewer required terms of the + truncated power series to closely approximate the exact value of the matrix + exponential. + :type bound: float + + References: + + [1] Emiel Hoogeboom, Victor Garcia Satorras, Jakub M. Tomczak, Max Welling. The + Convolution Exponential and Generalized Sylvester Flows. [arXiv:2006.01910] + [2] Tim Salimans, Diederik P. Kingma. Weight Normalization: A Simple + Reparameterization to Accelerate Training of Deep Neural Networks. + [arXiv:1602.07868] + [3] Takeru Miyato, Toshiki Kataoka, Masanori Koyama, Yuichi Yoshida. Spectral + Normalization for Generative Adversarial Networks. ICLR 2018. + + """ + + domain = constraints.real_vector + codomain = constraints.real_vector + bijective = True + + def __init__(self, input_dim, iterations=8, normalization="none", bound=None): + super().__init__( + iterations=iterations, normalization=normalization, bound=bound + ) + + self.weights = nn.Parameter(torch.Tensor(input_dim, input_dim)) + self.reset_parameters() + + def reset_parameters(self): + stdv = 1.0 / math.sqrt(self.weights.size(0)) + self.weights.data.uniform_(-stdv, stdv) + + +@copy_docs_from(ConditionalTransformModule) +class ConditionalMatrixExponential(ConditionalTransformModule): + r""" + A dense matrix exponential bijective transform (Hoogeboom et al., 2020) that + conditions on an additional context variable with equation, + + :math:`\mathbf{y} = \exp(M)\mathbf{x}` + + where :math:`\mathbf{x}` are the inputs, :math:`\mathbf{y}` are the outputs, + :math:`\exp(\cdot)` represents the matrix exponential, and + :math:`M\in\mathbb{R}^D\times\mathbb{R}^D` is the output of a neural network + conditioning on a context variable :math:`\mathbf{z}` for input dimension + :math:`D`. In general, :math:`M` is not required to be invertible. + + Due to the favourable mathematical properties of the matrix exponential, the + transform has an exact inverse and a log-determinate-Jacobian that scales in + time-complexity as :math:`O(D)`. Both the forward and reverse operations are + approximated with a truncated power series. For numerical stability, the + norm of :math:`M` can be restricted with the `normalization` keyword argument. + + Example usage: + + >>> from pyro.nn.dense_nn import DenseNN + >>> input_dim = 10 + >>> context_dim = 5 + >>> batch_size = 3 + >>> base_dist = dist.Normal(torch.zeros(input_dim), torch.ones(input_dim)) + >>> param_dims = [input_dim*input_dim] + >>> hypernet = DenseNN(context_dim, [50, 50], param_dims) + >>> transform = ConditionalMatrixExponential(input_dim, hypernet) + >>> z = torch.rand(batch_size, context_dim) + >>> flow_dist = dist.ConditionalTransformedDistribution(base_dist, + ... [transform]).condition(z) + >>> flow_dist.sample(sample_shape=torch.Size([batch_size])) # doctest: +SKIP + + :param input_dim: the dimension of the input (and output) variable. + :type input_dim: int + :param iterations: the number of terms to use in the truncated power series that + approximates matrix exponentiation. + :type iterations: int + :param normalization: One of `['none', 'weight', 'spectral']` normalization that + selects what type of normalization to apply to the weight matrix. `weight` + corresponds to weight normalization (Salimans and Kingma, 2016) and + `spectral` to spectral normalization (Miyato et al, 2018). + :type normalization: string + :param bound: a bound on either the weight or spectral norm, when either of + those two types of regularization are chosen by the `normalization` + argument. A lower value for this results in fewer required terms of the + truncated power series to closely approximate the exact value of the matrix + exponential. + :type bound: float + + References: + + [1] Emiel Hoogeboom, Victor Garcia Satorras, Jakub M. Tomczak, Max Welling. The + Convolution Exponential and Generalized Sylvester Flows. [arXiv:2006.01910] + [2] Tim Salimans, Diederik P. Kingma. Weight Normalization: A Simple + Reparameterization to Accelerate Training of Deep Neural Networks. + [arXiv:1602.07868] + [3] Takeru Miyato, Toshiki Kataoka, Masanori Koyama, Yuichi Yoshida. Spectral + Normalization for Generative Adversarial Networks. ICLR 2018. + + """ + + domain = constraints.real_vector + codomain = constraints.real_vector + bijective = True + + def __init__(self, input_dim, nn, iterations=8, normalization="none", bound=None): + super().__init__() + self.input_dim = input_dim + self.nn = nn + self.iterations = iterations + self.normalization = normalization + self.bound = bound + + def _params(self, context): + return self.nn(context) + + def condition(self, context): + # This hack could be fixed by having a conditioning network that outputs a more general shape + cond_nn = partial(self.nn, context) + + def weights(): + w = cond_nn() + return w.view(w.shape[:-1] + (self.input_dim, self.input_dim)) + + return ConditionedMatrixExponential( + weights, + iterations=self.iterations, + normalization=self.normalization, + bound=self.bound, + ) + + +def matrix_exponential(input_dim, iterations=8, normalization="none", bound=None): + """ + A helper function to create a + :class:`~pyro.distributions.transforms.MatrixExponential` object for consistency + with other helpers. + + :param input_dim: Dimension of input variable + :type input_dim: int + :param iterations: the number of terms to use in the truncated power series that + approximates matrix exponentiation. + :type iterations: int + :param normalization: One of `['none', 'weight', 'spectral']` normalization that + selects what type of normalization to apply to the weight matrix. `weight` + corresponds to weight normalization (Salimans and Kingma, 2016) and + `spectral` to spectral normalization (Miyato et al, 2018). + :type normalization: string + :param bound: a bound on either the weight or spectral norm, when either of + those two types of regularization are chosen by the `normalization` + argument. A lower value for this results in fewer required terms of the + truncated power series to closely approximate the exact value of the matrix + exponential. + :type bound: float + + """ + + return MatrixExponential( + input_dim, iterations=iterations, normalization=normalization, bound=bound + ) + + +def conditional_matrix_exponential( + input_dim, + context_dim, + hidden_dims=None, + iterations=8, + normalization="none", + bound=None, +): + """ + A helper function to create a + :class:`~pyro.distributions.transforms.ConditionalMatrixExponential` object for + consistency with other helpers. + + :param input_dim: Dimension of input variable + :type input_dim: int + :param context_dim: Dimension of context variable + :type context_dim: int + :param hidden_dims: The desired hidden dimensions of the dense network. Defaults + to using [input_dim * 10, input_dim * 10] + :type hidden_dims: list[int] + :param iterations: the number of terms to use in the truncated power series that + approximates matrix exponentiation. + :type iterations: int + :param normalization: One of `['none', 'weight', 'spectral']` normalization that + selects what type of normalization to apply to the weight matrix. `weight` + corresponds to weight normalization (Salimans and Kingma, 2016) and + `spectral` to spectral normalization (Miyato et al, 2018). + :type normalization: string + :param bound: a bound on either the weight or spectral norm, when either of + those two types of regularization are chosen by the `normalization` + argument. A lower value for this results in fewer required terms of the + truncated power series to closely approximate the exact value of the matrix + exponential. + :type bound: float + + """ + + if hidden_dims is None: + hidden_dims = [input_dim * 10, input_dim * 10] + nn = DenseNN(context_dim, hidden_dims, param_dims=[input_dim * input_dim]) + return ConditionalMatrixExponential( + input_dim, nn, iterations=iterations, normalization=normalization, bound=bound + ) diff --git a/pyro/source/pyro/distributions/transforms/neural_autoregressive.py b/pyro/source/pyro/distributions/transforms/neural_autoregressive.py new file mode 100644 index 0000000000000000000000000000000000000000..4fb550ea72f3d6acec3f6196ae4f1d07925a411b --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/neural_autoregressive.py @@ -0,0 +1,271 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from functools import partial + +import torch +import torch.nn as nn +import torch.nn.functional as F +from torch.distributions.transforms import SigmoidTransform, TanhTransform + +from pyro.nn import AutoRegressiveNN, ConditionalAutoRegressiveNN + +from .. import constraints +from ..conditional import ConditionalTransformModule +from ..torch_transform import TransformModule +from ..util import copy_docs_from +from .basic import ELUTransform, LeakyReLUTransform + +eps = 1e-8 + + +@copy_docs_from(TransformModule) +class NeuralAutoregressive(TransformModule): + r""" + An implementation of the deep Neural Autoregressive Flow (NAF) bijective + transform of the "IAF flavour" that can be used for sampling and scoring samples + drawn from it (but not arbitrary ones). + + Example usage: + + >>> from pyro.nn import AutoRegressiveNN + >>> base_dist = dist.Normal(torch.zeros(10), torch.ones(10)) + >>> arn = AutoRegressiveNN(10, [40], param_dims=[16]*3) + >>> transform = NeuralAutoregressive(arn, hidden_units=16) + >>> pyro.module("my_transform", transform) # doctest: +SKIP + >>> flow_dist = dist.TransformedDistribution(base_dist, [transform]) + >>> flow_dist.sample() # doctest: +SKIP + + The inverse operation is not implemented. This would require numerical + inversion, e.g., using a root finding method - a possibility for a future + implementation. + + :param autoregressive_nn: an autoregressive neural network whose forward call + returns a tuple of three real-valued tensors, whose last dimension is the + input dimension, and whose penultimate dimension is equal to hidden_units. + :type autoregressive_nn: nn.Module + :param hidden_units: the number of hidden units to use in the NAF transformation + (see Eq (8) in reference) + :type hidden_units: int + :param activation: Activation function to use. One of 'ELU', 'LeakyReLU', + 'sigmoid', or 'tanh'. + :type activation: string + + Reference: + + [1] Chin-Wei Huang, David Krueger, Alexandre Lacoste, Aaron Courville. Neural + Autoregressive Flows. [arXiv:1804.00779] + + + """ + + domain = constraints.real_vector + codomain = constraints.real_vector + bijective = True + eps = 1e-8 + autoregressive = True + + def __init__(self, autoregressive_nn, hidden_units=16, activation="sigmoid"): + super().__init__(cache_size=1) + + # Create the intermediate transform used + name_to_mixin = { + "ELU": ELUTransform, + "LeakyReLU": LeakyReLUTransform, + "sigmoid": SigmoidTransform, + "tanh": TanhTransform, + } + if activation not in name_to_mixin: + raise ValueError('Invalid activation function "{}"'.format(activation)) + self.T = name_to_mixin[activation]() + + self.arn = autoregressive_nn + self.hidden_units = hidden_units + self.logsoftmax = nn.LogSoftmax(dim=-2) + self._cached_log_df_inv_dx = None + self._cached_A = None + self._cached_W_pre = None + self._cached_C = None + self._cached_T_C = None + + def _call(self, x): + """ + :param x: the input into the bijection + :type x: torch.Tensor + + Invokes the bijection x=>y; in the prototypical context of a + :class:`~pyro.distributions.TransformedDistribution` `x` is a sample from + the base distribution (or the output of a previous transform) + """ + # A, W, b ~ batch_shape x hidden_units x event_shape + A, W_pre, b = self.arn(x) + T = self.T + + # Divide the autoregressive output into the component activations + A = F.softplus(A) + C = A * x.unsqueeze(-2) + b + W = F.softmax(W_pre, dim=-2) + T_C = T(C) + D = (W * T_C).sum(dim=-2) + y = T.inv(D) + + self._cached_log_df_inv_dx = T.inv.log_abs_det_jacobian(D, y) + self._cached_A = A + self._cached_W_pre = W_pre + self._cached_C = C + self._cached_T_C = T_C + + return y + + # This method returns log(abs(det(dy/dx)), which is equal to -log(abs(det(dx/dy)) + def log_abs_det_jacobian(self, x, y): + """ + Calculates the elementwise determinant of the log Jacobian + """ + + A = self._cached_A + W_pre = self._cached_W_pre + C = self._cached_C + T_C = self._cached_T_C + T = self.T + + log_dydD = self._cached_log_df_inv_dx + log_dDdx = torch.logsumexp( + torch.log(A + self.eps) + + self.logsoftmax(W_pre) + + T.log_abs_det_jacobian(C, T_C), + dim=-2, + ) + log_det = log_dydD + log_dDdx + return log_det.sum(-1) + + +@copy_docs_from(ConditionalTransformModule) +class ConditionalNeuralAutoregressive(ConditionalTransformModule): + r""" + An implementation of the deep Neural Autoregressive Flow (NAF) bijective + transform of the "IAF flavour" conditioning on an additiona context variable + that can be used for sampling and scoring samples drawn from it (but not + arbitrary ones). + + Example usage: + + >>> from pyro.nn import ConditionalAutoRegressiveNN + >>> input_dim = 10 + >>> context_dim = 5 + >>> batch_size = 3 + >>> base_dist = dist.Normal(torch.zeros(input_dim), torch.ones(input_dim)) + >>> arn = ConditionalAutoRegressiveNN(input_dim, context_dim, [40], + ... param_dims=[16]*3) + >>> transform = ConditionalNeuralAutoregressive(arn, hidden_units=16) + >>> pyro.module("my_transform", transform) # doctest: +SKIP + >>> z = torch.rand(batch_size, context_dim) + >>> flow_dist = dist.ConditionalTransformedDistribution(base_dist, + ... [transform]).condition(z) + >>> flow_dist.sample(sample_shape=torch.Size([batch_size])) # doctest: +SKIP + + The inverse operation is not implemented. This would require numerical + inversion, e.g., using a root finding method - a possibility for a future + implementation. + + :param autoregressive_nn: an autoregressive neural network whose forward call + returns a tuple of three real-valued tensors, whose last dimension is the + input dimension, and whose penultimate dimension is equal to hidden_units. + :type autoregressive_nn: nn.Module + :param hidden_units: the number of hidden units to use in the NAF transformation + (see Eq (8) in reference) + :type hidden_units: int + :param activation: Activation function to use. One of 'ELU', 'LeakyReLU', + 'sigmoid', or 'tanh'. + :type activation: string + + Reference: + + [1] Chin-Wei Huang, David Krueger, Alexandre Lacoste, Aaron Courville. Neural + Autoregressive Flows. [arXiv:1804.00779] + + + """ + + domain = constraints.real_vector + codomain = constraints.real_vector + bijective = True + + def __init__(self, autoregressive_nn, **kwargs): + super().__init__() + self.nn = autoregressive_nn + self.kwargs = kwargs + + def condition(self, context): + """ + Conditions on a context variable, returning a non-conditional transform of + of type :class:`~pyro.distributions.transforms.NeuralAutoregressive`. + """ + + # Note that nn.condition doesn't copy the weights of the ConditionalAutoregressiveNN + cond_nn = partial(self.nn, context=context) + cond_nn.permutation = cond_nn.func.permutation + cond_nn.get_permutation = cond_nn.func.get_permutation + return NeuralAutoregressive(cond_nn, **self.kwargs) + + +def neural_autoregressive(input_dim, hidden_dims=None, activation="sigmoid", width=16): + """ + A helper function to create a + :class:`~pyro.distributions.transforms.NeuralAutoregressive` object that takes + care of constructing an autoregressive network with the correct input/output + dimensions. + + :param input_dim: Dimension of input variable + :type input_dim: int + :param hidden_dims: The desired hidden dimensions of the autoregressive network. + Defaults to using [3*input_dim + 1] + :type hidden_dims: list[int] + :param activation: Activation function to use. One of 'ELU', 'LeakyReLU', + 'sigmoid', or 'tanh'. + :type activation: string + :param width: The width of the "multilayer perceptron" in the transform (see + paper). Defaults to 16 + :type width: int + + """ + + if hidden_dims is None: + hidden_dims = [3 * input_dim + 1] + arn = AutoRegressiveNN(input_dim, hidden_dims, param_dims=[width] * 3) + return NeuralAutoregressive(arn, hidden_units=width, activation=activation) + + +def conditional_neural_autoregressive( + input_dim, context_dim, hidden_dims=None, activation="sigmoid", width=16 +): + """ + A helper function to create a + :class:`~pyro.distributions.transforms.ConditionalNeuralAutoregressive` object + that takes care of constructing an autoregressive network with the correct + input/output dimensions. + + :param input_dim: Dimension of input variable + :type input_dim: int + :param context_dim: Dimension of context variable + :type context_dim: int + :param hidden_dims: The desired hidden dimensions of the autoregressive network. + Defaults to using [3*input_dim + 1] + :type hidden_dims: list[int] + :param activation: Activation function to use. One of 'ELU', 'LeakyReLU', + 'sigmoid', or 'tanh'. + :type activation: string + :param width: The width of the "multilayer perceptron" in the transform (see + paper). Defaults to 16 + :type width: int + + """ + + if hidden_dims is None: + hidden_dims = [3 * input_dim + 1] + arn = ConditionalAutoRegressiveNN( + input_dim, context_dim, hidden_dims, param_dims=[width] * 3 + ) + return ConditionalNeuralAutoregressive( + arn, hidden_units=width, activation=activation + ) diff --git a/pyro/source/pyro/distributions/transforms/normalize.py b/pyro/source/pyro/distributions/transforms/normalize.py new file mode 100644 index 0000000000000000000000000000000000000000..612ea2ea8e175d2a1be4a7e372fe8c04d90a9cb4 --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/normalize.py @@ -0,0 +1,41 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import numbers + +from torch.distributions.transforms import Transform + +from pyro.ops.tensor_utils import safe_normalize + +from .. import constraints + + +class Normalize(Transform): + """ + Safely project a vector onto the sphere wrt the ``p`` norm. This avoids + the singularity at zero by mapping to the vector ``[1, 0, 0, ..., 0]``. + """ + + domain = constraints.real_vector + codomain = constraints.sphere + bijective = False + + def __init__(self, p=2, cache_size=0): + assert isinstance(p, numbers.Number) + assert p >= 0 + self.p = p + super().__init__(cache_size=cache_size) + + def __eq__(self, other): + return type(self) == type(other) and self.p == other.p + + def _call(self, x): + return safe_normalize(x, p=self.p) + + def _inverse(self, y): + return y + + def with_cache(self, cache_size=1): + if self._cache_size == cache_size: + return self + return Normalize(self.p, cache_size=cache_size) diff --git a/pyro/source/pyro/distributions/transforms/ordered.py b/pyro/source/pyro/distributions/transforms/ordered.py new file mode 100644 index 0000000000000000000000000000000000000000..d6470e13d16c4a9a7d50f2b177ad5d754331201f --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/ordered.py @@ -0,0 +1,32 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions.transforms import Transform + +from .. import constraints + + +class OrderedTransform(Transform): + """ + Transforms a real vector into an ordered vector. + + Specifically, enforces monotonically increasing order on the last dimension + of a given tensor via the transformation :math:`y_0 = x_0`, + :math:`y_i = \\sum_{1 \\le j \\le i} \\exp(x_i)` + """ + + domain = constraints.real_vector + codomain = constraints.ordered_vector + bijective = True + + def _call(self, x): + z = torch.cat([x[..., :1], x[..., 1:].exp()], dim=-1) + return torch.cumsum(z, dim=-1) + + def _inverse(self, y): + x = (y[..., 1:] - y[..., :-1]).log() + return torch.cat([y[..., :1], x], dim=-1) + + def log_abs_det_jacobian(self, x, y): + return torch.sum(x[..., 1:], dim=-1) diff --git a/pyro/source/pyro/distributions/transforms/permute.py b/pyro/source/pyro/distributions/transforms/permute.py new file mode 100644 index 0000000000000000000000000000000000000000..d7a520927f41aea10087366dde38000281da8271 --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/permute.py @@ -0,0 +1,142 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions.transforms import Transform +from torch.distributions.utils import lazy_property + +from pyro.distributions import constraints + +from ..util import copy_docs_from + + +@copy_docs_from(Transform) +class Permute(Transform): + r""" + A bijection that reorders the input dimensions, that is, multiplies the input by + a permutation matrix. This is useful in between + :class:`~pyro.distributions.transforms.AffineAutoregressive` transforms to + increase the flexibility of the resulting distribution and stabilize learning. + Whilst not being an autoregressive transform, the log absolute determinate of + the Jacobian is easily calculable as 0. Note that reordering the input dimension + between two layers of + :class:`~pyro.distributions.transforms.AffineAutoregressive` is not equivalent + to reordering the dimension inside the MADE networks that those IAFs use; using + a :class:`~pyro.distributions.transforms.Permute` transform results in a + distribution with more flexibility. + + Example usage: + + >>> from pyro.nn import AutoRegressiveNN + >>> from pyro.distributions.transforms import AffineAutoregressive, Permute + >>> base_dist = dist.Normal(torch.zeros(10), torch.ones(10)) + >>> iaf1 = AffineAutoregressive(AutoRegressiveNN(10, [40])) + >>> ff = Permute(torch.randperm(10, dtype=torch.long)) + >>> iaf2 = AffineAutoregressive(AutoRegressiveNN(10, [40])) + >>> flow_dist = dist.TransformedDistribution(base_dist, [iaf1, ff, iaf2]) + >>> flow_dist.sample() # doctest: +SKIP + + :param permutation: a permutation ordering that is applied to the inputs. + :type permutation: torch.LongTensor + :param dim: the tensor dimension to permute. This value must be negative and + defines the event dim as `abs(dim)`. + :type dim: int + + """ + + bijective = True + volume_preserving = True + + def __init__(self, permutation, *, dim=-1, cache_size=1): + super().__init__(cache_size=cache_size) + + if dim >= 0: + raise ValueError("'dim' keyword argument must be negative") + + self.permutation = permutation + self.dim = dim + + @constraints.dependent_property(is_discrete=False) + def domain(self): + return constraints.independent(constraints.real, -self.dim) + + @constraints.dependent_property(is_discrete=False) + def codomain(self): + return constraints.independent(constraints.real, -self.dim) + + @lazy_property + def inv_permutation(self): + result = torch.empty_like(self.permutation, dtype=torch.long) + result[self.permutation] = torch.arange( + self.permutation.size(0), dtype=torch.long, device=self.permutation.device + ) + return result + + def _call(self, x): + """ + :param x: the input into the bijection + :type x: torch.Tensor + + Invokes the bijection x=>y; in the prototypical context of a + :class:`~pyro.distributions.TransformedDistribution` `x` is a sample from + the base distribution (or the output of a previous transform) + """ + + return x.index_select(self.dim, self.permutation) + + def _inverse(self, y): + """ + :param y: the output of the bijection + :type y: torch.Tensor + + Inverts y => x. + """ + return y.index_select(self.dim, self.inv_permutation) + + def log_abs_det_jacobian(self, x, y): + """ + Calculates the elementwise determinant of the log Jacobian, i.e. + log(abs([dy_0/dx_0, ..., dy_{N-1}/dx_{N-1}])). Note that this type of + transform is not autoregressive, so the log Jacobian is not the sum of the + previous expression. However, it turns out it's always 0 (since the + determinant is -1 or +1), and so returning a vector of zeros works. + """ + + return torch.zeros( + x.size()[: -self.event_dim], dtype=x.dtype, layout=x.layout, device=x.device + ) + + def with_cache(self, cache_size=1): + if self._cache_size == cache_size: + return self + return Permute(self.permutation, cache_size=cache_size) + + +def permute(input_dim, permutation=None, dim=-1): + """ + A helper function to create a :class:`~pyro.distributions.transforms.Permute` + object for consistency with other helpers. + + :param input_dim: Dimension(s) of input variable to permute. Note that when + `dim < -1` this must be a tuple corresponding to the event shape. + :type input_dim: int + :param permutation: Torch tensor of integer indices representing permutation. + Defaults to a random permutation. + :type permutation: torch.LongTensor + :param dim: the tensor dimension to permute. This value must be negative and + defines the event dim as `abs(dim)`. + :type dim: int + + """ + if dim < -1 or not isinstance(input_dim, int): + if len(input_dim) != -dim: + raise ValueError( + "event shape {} must have same length as event_dim {}".format( + input_dim, -dim + ) + ) + input_dim = input_dim[dim] + + if permutation is None: + permutation = torch.randperm(input_dim) + return Permute(permutation, dim=dim) diff --git a/pyro/source/pyro/distributions/transforms/planar.py b/pyro/source/pyro/distributions/transforms/planar.py new file mode 100644 index 0000000000000000000000000000000000000000..0aab945e2cf72bbf78112c9ffd6a5ebcc634a9c2 --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/planar.py @@ -0,0 +1,265 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math +from functools import partial + +import torch +import torch.nn as nn +import torch.nn.functional as F +from torch.distributions import Transform, constraints + +from pyro.nn import DenseNN + +from ..conditional import ConditionalTransformModule +from ..torch_transform import TransformModule +from ..util import copy_docs_from + + +@copy_docs_from(Transform) +class ConditionedPlanar(Transform): + domain = constraints.real_vector + codomain = constraints.real_vector + bijective = True + + def __init__(self, params): + super().__init__(cache_size=1) + self._params = params + self._cached_logDetJ = None + + # This method ensures that torch(u_hat, w) > -1, required for invertibility + def u_hat(self, u, w): + alpha = torch.matmul(u.unsqueeze(-2), w.unsqueeze(-1)).squeeze(-1) + a_prime = -1 + F.softplus(alpha) + return u + (a_prime - alpha) * w.div(w.pow(2).sum(dim=-1, keepdim=True)) + + def _call(self, x): + """ + :param x: the input into the bijection + :type x: torch.Tensor + Invokes the bijection x => y; in the prototypical context of a + :class:`~pyro.distributions.TransformedDistribution` `x` is a sample from + the base distribution (or the output of a previous transform) + """ + bias, u, w = self._params() if callable(self._params) else self._params + + # x ~ (batch_size, dim_size, 1) + # w ~ (batch_size, 1, dim_size) + # bias ~ (batch_size, 1) + act = torch.tanh( + torch.matmul(w.unsqueeze(-2), x.unsqueeze(-1)).squeeze(-1) + bias + ) + u_hat = self.u_hat(u, w) + y = x + u_hat * act + + psi_z = (1.0 - act.pow(2)) * w + self._cached_logDetJ = torch.log( + torch.abs( + 1 + + torch.matmul(psi_z.unsqueeze(-2), u_hat.unsqueeze(-1)) + .squeeze(-1) + .squeeze(-1) + ) + ) + + return y + + def _inverse(self, y): + """ + :param y: the output of the bijection + :type y: torch.Tensor + Inverts y => x. As noted above, this implementation is incapable of + inverting arbitrary values `y`; rather it assumes `y` is the result of a + previously computed application of the bijector to some `x` (which was + cached on the forward call) + """ + + raise KeyError( + "ConditionedPlanar object expected to find key in intermediates cache but didn't" + ) + + def log_abs_det_jacobian(self, x, y): + """ + Calculates the elementwise determinant of the log Jacobian + """ + x_old, y_old = self._cached_x_y + if x is not x_old or y is not y_old: + # This call to the parent class Transform will update the cache + # as well as calling self._call and recalculating y and log_detJ + self(x) + + return self._cached_logDetJ + + +@copy_docs_from(ConditionedPlanar) +class Planar(ConditionedPlanar, TransformModule): + r""" + A 'planar' bijective transform with equation, + + :math:`\mathbf{y} = \mathbf{x} + \mathbf{u}\tanh(\mathbf{w}^T\mathbf{z}+b)` + + where :math:`\mathbf{x}` are the inputs, :math:`\mathbf{y}` are the outputs, + and the learnable parameters are :math:`b\in\mathbb{R}`, + :math:`\mathbf{u}\in\mathbb{R}^D`, :math:`\mathbf{w}\in\mathbb{R}^D` for + input dimension :math:`D`. For this to be an invertible transformation, the + condition :math:`\mathbf{w}^T\mathbf{u}>-1` is enforced. + + Together with :class:`~pyro.distributions.TransformedDistribution` this provides + a way to create richer variational approximations. + + Example usage: + + >>> base_dist = dist.Normal(torch.zeros(10), torch.ones(10)) + >>> transform = Planar(10) + >>> pyro.module("my_transform", transform) # doctest: +SKIP + >>> flow_dist = dist.TransformedDistribution(base_dist, [transform]) + >>> flow_dist.sample() # doctest: +SKIP + + The inverse of this transform does not possess an analytical solution and is + left unimplemented. However, the inverse is cached when the forward operation is + called during sampling, and so samples drawn using the planar transform can be + scored. + + :param input_dim: the dimension of the input (and output) variable. + :type input_dim: int + + References: + + [1] Danilo Jimenez Rezende, Shakir Mohamed. Variational Inference with + Normalizing Flows. [arXiv:1505.05770] + + """ + + domain = constraints.real_vector + codomain = constraints.real_vector + bijective = True + + def __init__(self, input_dim): + super().__init__(self._params) + + self.bias = nn.Parameter( + torch.Tensor( + 1, + ) + ) + self.u = nn.Parameter( + torch.Tensor( + input_dim, + ) + ) + self.w = nn.Parameter( + torch.Tensor( + input_dim, + ) + ) + + self.input_dim = input_dim + self.reset_parameters() + + def _params(self): + return self.bias, self.u, self.w + + def reset_parameters(self): + stdv = 1.0 / math.sqrt(self.u.size(0)) + self.w.data.uniform_(-stdv, stdv) + self.u.data.uniform_(-stdv, stdv) + self.bias.data.zero_() + + +@copy_docs_from(ConditionalTransformModule) +class ConditionalPlanar(ConditionalTransformModule): + r""" + A conditional 'planar' bijective transform using the equation, + + :math:`\mathbf{y} = \mathbf{x} + \mathbf{u}\tanh(\mathbf{w}^T\mathbf{z}+b)` + + where :math:`\mathbf{x}` are the inputs with dimension :math:`D`, + :math:`\mathbf{y}` are the outputs, and the pseudo-parameters + :math:`b\in\mathbb{R}`, :math:`\mathbf{u}\in\mathbb{R}^D`, and + :math:`\mathbf{w}\in\mathbb{R}^D` are the output of a function, e.g. a NN, + with input :math:`z\in\mathbb{R}^{M}` representing the context variable to + condition on. For this to be an invertible transformation, the condition + :math:`\mathbf{w}^T\mathbf{u}>-1` is enforced. + + Together with :class:`~pyro.distributions.ConditionalTransformedDistribution` + this provides a way to create richer variational approximations. + + Example usage: + + >>> from pyro.nn.dense_nn import DenseNN + >>> input_dim = 10 + >>> context_dim = 5 + >>> batch_size = 3 + >>> base_dist = dist.Normal(torch.zeros(input_dim), torch.ones(input_dim)) + >>> param_dims = [1, input_dim, input_dim] + >>> hypernet = DenseNN(context_dim, [50, 50], param_dims) + >>> transform = ConditionalPlanar(hypernet) + >>> z = torch.rand(batch_size, context_dim) + >>> flow_dist = dist.ConditionalTransformedDistribution(base_dist, + ... [transform]).condition(z) + >>> flow_dist.sample(sample_shape=torch.Size([batch_size])) # doctest: +SKIP + + The inverse of this transform does not possess an analytical solution and is + left unimplemented. However, the inverse is cached when the forward operation is + called during sampling, and so samples drawn using the planar transform can be + scored. + + :param nn: a function inputting the context variable and outputting a triplet of + real-valued parameters of dimensions :math:`(1, D, D)`. + :type nn: callable + + References: + [1] Variational Inference with Normalizing Flows [arXiv:1505.05770] + Danilo Jimenez Rezende, Shakir Mohamed + + """ + + domain = constraints.real_vector + codomain = constraints.real_vector + bijective = True + + def __init__(self, nn): + super().__init__() + self.nn = nn + + def _params(self, context): + return self.nn(context) + + def condition(self, context): + params = partial(self._params, context) + return ConditionedPlanar(params) + + +def planar(input_dim): + """ + A helper function to create a :class:`~pyro.distributions.transforms.Planar` + object for consistency with other helpers. + + :param input_dim: Dimension of input variable + :type input_dim: int + + """ + + return Planar(input_dim) + + +def conditional_planar(input_dim, context_dim, hidden_dims=None): + """ + A helper function to create a + :class:`~pyro.distributions.transforms.ConditionalPlanar` object that takes care + of constructing a dense network with the correct input/output dimensions. + + :param input_dim: Dimension of input variable + :type input_dim: int + :param context_dim: Dimension of context variable + :type context_dim: int + :param hidden_dims: The desired hidden dimensions of the dense network. Defaults + to using [input_dim * 10, input_dim * 10] + :type hidden_dims: list[int] + + """ + + if hidden_dims is None: + hidden_dims = [input_dim * 10, input_dim * 10] + nn = DenseNN(context_dim, hidden_dims, param_dims=[1, input_dim, input_dim]) + return ConditionalPlanar(nn) diff --git a/pyro/source/pyro/distributions/transforms/polynomial.py b/pyro/source/pyro/distributions/transforms/polynomial.py new file mode 100644 index 0000000000000000000000000000000000000000..ba765cc2cf2b5f3a3541de7d4242befbb1ede356 --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/polynomial.py @@ -0,0 +1,192 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import torch +import torch.nn as nn + +from pyro.nn import AutoRegressiveNN + +from .. import constraints +from ..torch_transform import TransformModule +from ..util import copy_docs_from + + +@copy_docs_from(TransformModule) +class Polynomial(TransformModule): + r""" + An autoregressive bijective transform as described in Jaini et al. (2019) + applying following equation element-wise, + + :math:`y_n = c_n + \int^{x_n}_0\sum^K_{k=1}\left(\sum^R_{r=0}a^{(n)}_{r,k}u^r\right)du` + + where :math:`x_n` is the :math:`n`th input, :math:`y_n` is the :math:`n`th + output, and :math:`c_n\in\mathbb{R}`, + :math:`\left\{a^{(n)}_{r,k}\in\mathbb{R}\right\}` are learnable parameters + that are the output of an autoregressive NN inputting + :math:`x_{\prec n}={x_1,x_2,\ldots,x_{n-1}}`. + + Together with :class:`~pyro.distributions.TransformedDistribution` this provides + a way to create richer variational approximations. + + Example usage: + + >>> from pyro.nn import AutoRegressiveNN + >>> input_dim = 10 + >>> count_degree = 4 + >>> count_sum = 3 + >>> base_dist = dist.Normal(torch.zeros(input_dim), torch.ones(input_dim)) + >>> param_dims = [(count_degree + 1)*count_sum] + >>> arn = AutoRegressiveNN(input_dim, [input_dim*10], param_dims) + >>> transform = Polynomial(arn, input_dim=input_dim, count_degree=count_degree, + ... count_sum=count_sum) + >>> pyro.module("my_transform", transform) # doctest: +SKIP + >>> flow_dist = dist.TransformedDistribution(base_dist, [transform]) + >>> flow_dist.sample() # doctest: +SKIP + + The inverse of this transform does not possess an analytical solution and is + left unimplemented. However, the inverse is cached when the forward operation is + called during sampling, and so samples drawn using a polynomial transform can be + scored. + + :param autoregressive_nn: an autoregressive neural network whose forward call + returns a tensor of real-valued + numbers of size (batch_size, (count_degree+1)*count_sum, input_dim) + :type autoregressive_nn: nn.Module + :param count_degree: The degree of the polynomial to use for each element-wise + transformation. + :type count_degree: int + :param count_sum: The number of polynomials to sum in each element-wise + transformation. + :type count_sum: int + + References: + + [1] Priyank Jaini, Kira A. Shelby, Yaoliang Yu. Sum-of-squares polynomial flow. + [arXiv:1905.02325] + + """ + + domain = constraints.real_vector + codomain = constraints.real_vector + bijective = True + autoregressive = True + + def __init__(self, autoregressive_nn, input_dim, count_degree, count_sum): + super().__init__(cache_size=1) + + self.arn = autoregressive_nn + self.input_dim = input_dim + self.count_degree = count_degree + self.count_sum = count_sum + self._cached_logDetJ = None + + self.c = nn.Parameter(torch.Tensor(input_dim)) + self.reset_parameters() + + # Vector of powers of input dimension + powers = torch.arange(1, count_degree + 2, dtype=torch.get_default_dtype()) + self.register_buffer("powers", powers) + + # Build mask of constants + mask = self.powers + torch.arange(count_degree + 1).unsqueeze(-1).type_as( + powers + ) + power_mask = mask + mask = mask.reciprocal() + + self.register_buffer("power_mask", power_mask) + self.register_buffer("mask", mask) + + def reset_parameters(self): + stdv = 1.0 / math.sqrt(self.c.size(0)) + self.c.data.uniform_(-stdv, stdv) + + def _call(self, x): + """ + :param x: the input into the bijection + :type x: torch.Tensor + + Invokes the bijection x=>y; in the prototypical context of a + :class:`~pyro.distributions.TransformedDistribution` `x` is a sample from + the base distribution (or the output of a previous transform) + """ + # Calculate the polynomial coefficients + # ~ (batch_size, count_sum, count_degree+1, input_dim) + A = self.arn(x).view(-1, self.count_sum, self.count_degree + 1, self.input_dim) + + # Take cross product of coefficients across degree dim + # ~ (batch_size, count_sum, count_degree+1, count_degree+1, input_dim) + coefs = A.unsqueeze(-2) * A.unsqueeze(-3) + + # Calculate output as sum-of-squares polynomial + x_view = x.view(-1, 1, 1, self.input_dim) + x_pow_matrix = x_view.pow(self.power_mask.unsqueeze(-1)).unsqueeze(-4) + + # Eq (8) from the paper, expanding the squared term and integrating + # NOTE: The view_as is necessary because the batch dimensions were collapsed previously + y = self.c + (coefs * x_pow_matrix * self.mask.unsqueeze(-1)).sum( + (1, 2, 3) + ).view_as(x) + + # log(|det(J)|) is calculated by the fundamental theorem of calculus, i.e. remove the constant + # term and the integral from eq (8) (the equation for this isn't given in the paper) + x_pow_matrix = x_view.pow(self.power_mask.unsqueeze(-1) - 1).unsqueeze(-4) + self._cached_logDetJ = torch.log( + (coefs * x_pow_matrix).sum((1, 2, 3)).view_as(x) + 1e-8 + ).sum(-1) + + return y + + def _inverse(self, y): + """ + :param y: the output of the bijection + :type y: torch.Tensor + + Inverts y => x. As noted above, this implementation is incapable of + inverting arbitrary values `y`; rather it assumes `y` is the result of a + previously computed application of the bijector to some `x` (which was + cached on the forward call) + """ + + raise KeyError( + "Polynomial object expected to find key in intermediates cache but didn't" + ) + + def log_abs_det_jacobian(self, x, y): + """ + Calculates the elementwise determinant of the log Jacobian + """ + x_old, y_old = self._cached_x_y + if x is not x_old or y is not y_old: + # This call to the parent class Transform will update the cache + # as well as calling self._call and recalculating y and log_detJ + self(x) + + return self._cached_logDetJ + + +def polynomial(input_dim, hidden_dims=None): + """ + A helper function to create a :class:`~pyro.distributions.transforms.Polynomial` + object that takes care of constructing an autoregressive network with the + correct input/output dimensions. + + :param input_dim: Dimension of input variable + :type input_dim: int + :param hidden_dims: The desired hidden dimensions of of the autoregressive + network. Defaults to using [input_dim * 10] + + """ + + count_degree = 4 + count_sum = 3 + if hidden_dims is None: + hidden_dims = [input_dim * 10] + arn = AutoRegressiveNN( + input_dim, hidden_dims, param_dims=[(count_degree + 1) * count_sum] + ) + return Polynomial( + arn, input_dim=input_dim, count_degree=count_degree, count_sum=count_sum + ) diff --git a/pyro/source/pyro/distributions/transforms/power.py b/pyro/source/pyro/distributions/transforms/power.py new file mode 100644 index 0000000000000000000000000000000000000000..62dcce821f3a5f5c81d9d990e43ca39eab79e744 --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/power.py @@ -0,0 +1,61 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions import Distribution, constraints +from torch.distributions.transforms import Transform + + +class PositivePowerTransform(Transform): + r""" + Transform via the mapping + :math:`y=\operatorname{sign}(x)|x|^{\text{exponent}}`. + + Whereas :class:`~torch.distributions.transforms.PowerTransform` allows + arbitrary ``exponent`` and restricts domain and codomain to postive values, + this class restricts ``exponent > 0`` and allows real domain and codomain. + + .. warning:: The Jacobian is typically zero or infinite at the origin. + """ + + domain = constraints.real + codomain = constraints.real + bijective = True + sign = +1 + + def __init__(self, exponent, *, cache_size=0, validate_args=None): + super().__init__(cache_size=cache_size) + if isinstance(exponent, int): + exponent = float(exponent) + exponent = torch.as_tensor(exponent) + self.exponent = exponent + if validate_args is None: + validate_args = Distribution._validate_args + if validate_args: + if not exponent.gt(0).all(): + raise ValueError(f"Expected exponent > 0 but got:{exponent}") + + def with_cache(self, cache_size=1): + if self._cache_size == cache_size: + return self + return PositivePowerTransform(self.exponent, cache_size=cache_size) + + def __eq__(self, other): + if not isinstance(other, PositivePowerTransform): + return False + return self.exponent.eq(other.exponent).all().item() + + def _call(self, x): + return x.abs().pow(self.exponent) * x.sign() + + def _inverse(self, y): + return y.abs().pow(self.exponent.reciprocal()) * y.sign() + + def log_abs_det_jacobian(self, x, y): + return self.exponent.log() + (y / x).log() + + def forward_shape(self, shape): + return torch.broadcast_shapes(shape, getattr(self.exponent, "shape", ())) + + def inverse_shape(self, shape): + return torch.broadcast_shapes(shape, getattr(self.exponent, "shape", ())) diff --git a/pyro/source/pyro/distributions/transforms/radial.py b/pyro/source/pyro/distributions/transforms/radial.py new file mode 100644 index 0000000000000000000000000000000000000000..98522d0dea1540e9c07e818f4ddf6cb6db95a05a --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/radial.py @@ -0,0 +1,260 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math +from functools import partial + +import torch +import torch.nn as nn +import torch.nn.functional as F +from torch.distributions import Transform, constraints + +from pyro.nn import DenseNN + +from ..conditional import ConditionalTransformModule +from ..torch_transform import TransformModule +from ..util import copy_docs_from + + +@copy_docs_from(Transform) +class ConditionedRadial(Transform): + domain = constraints.real_vector + codomain = constraints.real_vector + bijective = True + + def __init__(self, params): + super().__init__(cache_size=1) + self._params = params + self._cached_logDetJ = None + + # This method ensures that torch(u_hat, w) > -1, required for invertibility + def u_hat(self, u, w): + alpha = torch.matmul(u.unsqueeze(-2), w.unsqueeze(-1)).squeeze(-1) + a_prime = -1 + F.softplus(alpha) + return u + (a_prime - alpha) * w.div(w.pow(2).sum(dim=-1, keepdim=True)) + + def _call(self, x): + """ + :param x: the input into the bijection + :type x: torch.Tensor + + Invokes the bijection x=>y; in the prototypical context of a + :class:`~pyro.distributions.TransformedDistribution` `x` is a sample from the base distribution (or the output + of a previous transform) + """ + x0, alpha_prime, beta_prime = ( + self._params() if callable(self._params) else self._params + ) + + # Ensure invertibility using approach in appendix A.2 + alpha = F.softplus(alpha_prime) + beta = -alpha + F.softplus(beta_prime) + + # Compute y and logDet using Equation 14. + diff = x - x0 + r = diff.norm(dim=-1, keepdim=True) + h = (alpha + r).reciprocal() + h_prime = -(h**2) + beta_h = beta * h + + self._cached_logDetJ = ( + (x0.size(-1) - 1) * torch.log1p(beta_h) + + torch.log1p(beta_h + beta * h_prime * r) + ).sum(-1) + return x + beta_h * diff + + def _inverse(self, y): + """ + :param y: the output of the bijection + :type y: torch.Tensor + Inverts y => x. As noted above, this implementation is incapable of + inverting arbitrary values `y`; rather it assumes `y` is the result of a + previously computed application of the bijector to some `x` (which was + cached on the forward call) + """ + + raise KeyError( + "ConditionedRadial object expected to find key in intermediates cache but didn't" + ) + + def log_abs_det_jacobian(self, x, y): + """ + Calculates the elementwise determinant of the log Jacobian + """ + x_old, y_old = self._cached_x_y + if x is not x_old or y is not y_old: + # This call to the parent class Transform will update the cache + # as well as calling self._call and recalculating y and log_detJ + self(x) + + return self._cached_logDetJ + + +@copy_docs_from(ConditionedRadial) +class Radial(ConditionedRadial, TransformModule): + r""" + A 'radial' bijective transform using the equation, + + :math:`\mathbf{y} = \mathbf{x} + \beta h(\alpha,r)(\mathbf{x} - \mathbf{x}_0)` + + where :math:`\mathbf{x}` are the inputs, :math:`\mathbf{y}` are the outputs, + and the learnable parameters are :math:`\alpha\in\mathbb{R}^+`, + :math:`\beta\in\mathbb{R}`, :math:`\mathbf{x}_0\in\mathbb{R}^D`, for input + dimension :math:`D`, :math:`r=||\mathbf{x}-\mathbf{x}_0||_2`, + :math:`h(\alpha,r)=1/(\alpha+r)`. For this to be an invertible transformation, + the condition :math:`\beta>-\alpha` is enforced. + + Example usage: + + >>> base_dist = dist.Normal(torch.zeros(10), torch.ones(10)) + >>> transform = Radial(10) + >>> pyro.module("my_transform", transform) # doctest: +SKIP + >>> flow_dist = dist.TransformedDistribution(base_dist, [transform]) + >>> flow_dist.sample() # doctest: +SKIP + + The inverse of this transform does not possess an analytical solution and is + left unimplemented. However, the inverse is cached when the forward operation is + called during sampling, and so samples drawn using the radial transform can be + scored. + + :param input_dim: the dimension of the input (and output) variable. + :type input_dim: int + + References: + + [1] Danilo Jimenez Rezende, Shakir Mohamed. Variational Inference with + Normalizing Flows. [arXiv:1505.05770] + + """ + + domain = constraints.real_vector + codomain = constraints.real_vector + bijective = True + + def __init__(self, input_dim): + super().__init__(self._params) + + self.x0 = nn.Parameter( + torch.Tensor( + input_dim, + ) + ) + self.alpha_prime = nn.Parameter( + torch.Tensor( + 1, + ) + ) + self.beta_prime = nn.Parameter( + torch.Tensor( + 1, + ) + ) + self.input_dim = input_dim + self.reset_parameters() + + def _params(self): + return self.x0, self.alpha_prime, self.beta_prime + + def reset_parameters(self): + stdv = 1.0 / math.sqrt(self.x0.size(0)) + self.alpha_prime.data.uniform_(-stdv, stdv) + self.beta_prime.data.uniform_(-stdv, stdv) + self.x0.data.uniform_(-stdv, stdv) + + +@copy_docs_from(ConditionalTransformModule) +class ConditionalRadial(ConditionalTransformModule): + r""" + A conditional 'radial' bijective transform context using the equation, + + :math:`\mathbf{y} = \mathbf{x} + \beta h(\alpha,r)(\mathbf{x} - \mathbf{x}_0)` + + where :math:`\mathbf{x}` are the inputs, :math:`\mathbf{y}` are the outputs, + and :math:`\alpha\in\mathbb{R}^+`, :math:`\beta\in\mathbb{R}`, + and :math:`\mathbf{x}_0\in\mathbb{R}^D`, are the output of a function, e.g. a NN, + with input :math:`z\in\mathbb{R}^{M}` representing the context variable to + condition on. The input dimension is :math:`D`, + :math:`r=||\mathbf{x}-\mathbf{x}_0||_2`, and :math:`h(\alpha,r)=1/(\alpha+r)`. + For this to be an invertible transformation, the condition :math:`\beta>-\alpha` + is enforced. + + Example usage: + + >>> from pyro.nn.dense_nn import DenseNN + >>> input_dim = 10 + >>> context_dim = 5 + >>> batch_size = 3 + >>> base_dist = dist.Normal(torch.zeros(input_dim), torch.ones(input_dim)) + >>> param_dims = [input_dim, 1, 1] + >>> hypernet = DenseNN(context_dim, [50, 50], param_dims) + >>> transform = ConditionalRadial(hypernet) + >>> z = torch.rand(batch_size, context_dim) + >>> flow_dist = dist.ConditionalTransformedDistribution(base_dist, + ... [transform]).condition(z) + >>> flow_dist.sample(sample_shape=torch.Size([batch_size])) # doctest: +SKIP + + The inverse of this transform does not possess an analytical solution and is + left unimplemented. However, the inverse is cached when the forward operation is + called during sampling, and so samples drawn using the radial transform can be + scored. + + :param input_dim: the dimension of the input (and output) variable. + :type input_dim: int + + References: + + [1] Danilo Jimenez Rezende, Shakir Mohamed. Variational Inference with + Normalizing Flows. [arXiv:1505.05770] + + """ + + domain = constraints.real_vector + codomain = constraints.real_vector + bijective = True + + def __init__(self, nn): + super().__init__() + self.nn = nn + + def _params(self, context): + return self.nn(context) + + def condition(self, context): + params = partial(self._params, context) + return ConditionedRadial(params) + + +def radial(input_dim): + """ + A helper function to create a :class:`~pyro.distributions.transforms.Radial` + object for consistency with other helpers. + + :param input_dim: Dimension of input variable + :type input_dim: int + + """ + + return Radial(input_dim) + + +def conditional_radial(input_dim, context_dim, hidden_dims=None): + """ + A helper function to create a + :class:`~pyro.distributions.transforms.ConditionalRadial` object that takes care + of constructing a dense network with the correct input/output dimensions. + + :param input_dim: Dimension of input variable + :type input_dim: int + :param context_dim: Dimension of context variable + :type context_dim: int + :param hidden_dims: The desired hidden dimensions of the dense network. Defaults + to using [input_dim * 10, input_dim * 10] + :type hidden_dims: list[int] + + + """ + + if hidden_dims is None: + hidden_dims = [input_dim * 10, input_dim * 10] + nn = DenseNN(context_dim, hidden_dims, param_dims=[input_dim, 1, 1]) + return ConditionalRadial(nn) diff --git a/pyro/source/pyro/distributions/transforms/simplex_to_ordered.py b/pyro/source/pyro/distributions/transforms/simplex_to_ordered.py new file mode 100644 index 0000000000000000000000000000000000000000..26791f7ff9775322c7341cb499586773422760a4 --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/simplex_to_ordered.py @@ -0,0 +1,70 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions.transforms import Transform +from torch.special import expit, logit + +from .. import constraints + + +# This class is a port of https://num.pyro.ai/en/stable/_modules/numpyro/distributions/transforms.html#SimplexToOrderedTransform +class SimplexToOrderedTransform(Transform): + """ + Transform a simplex into an ordered vector (via difference in Logistic CDF between cutpoints) + Used in [1] to induce a prior on latent cutpoints via transforming ordered category probabilities. + + :param anchor_point: Anchor point is a nuisance parameter to improve the identifiability of the transform. + For simplicity, we assume it is a scalar value, but it is broadcastable x.shape[:-1]. + For more details please refer to Section 2.2 in [1] + + **References:** + + 1. *Ordinal Regression Case Study, section 2.2*, + M. Betancourt, https://betanalpha.github.io/assets/case_studies/ordinal_regression.html + + """ + + domain = constraints.simplex + codomain = constraints.ordered_vector + + def __init__(self, anchor_point=None): + super().__init__() + self.anchor_point = ( + anchor_point if anchor_point is not None else torch.tensor(0.0) + ) + + def _call(self, x): + s = torch.cumsum(x[..., :-1], axis=-1) + y = logit(s) + torch.unsqueeze(self.anchor_point, -1) + return y + + def _inverse(self, y): + y = y - torch.unsqueeze(self.anchor_point, -1) + s = expit(y) + # x0 = s0, x1 = s1 - s0, x2 = s2 - s1,..., xn = 1 - s[n-1] + # add two boundary points 0 and 1 + s = torch.concat( + [torch.zeros_like(s)[..., :1], s, torch.ones_like(s)[..., :1]], dim=-1 + ) + x = s[..., 1:] - s[..., :-1] + return x + + def log_abs_det_jacobian(self, x, y): + # |dp/dc| = |dx/dy| = prod(ds/dy) = prod(expit'(y)) + # we know log derivative of expit(y) is `-softplus(y) - softplus(-y)` + J_logdet = ( + torch.nn.functional.softplus(y) + torch.nn.functional.softplus(-y) + ).sum(-1) + return J_logdet + + def __eq__(self, other): + if not isinstance(other, SimplexToOrderedTransform): + return False + return torch.all(torch.equal(self.anchor_point, other.anchor_point)) + + def forward_shape(self, shape): + return shape[:-1] + (shape[-1] - 1,) + + def inverse_shape(self, shape): + return shape[:-1] + (shape[-1] + 1,) diff --git a/pyro/source/pyro/distributions/transforms/softplus.py b/pyro/source/pyro/distributions/transforms/softplus.py new file mode 100644 index 0000000000000000000000000000000000000000..1b92c8d3b3bfc3345d442b9f1b55dbd8f8f9c493 --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/softplus.py @@ -0,0 +1,62 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from torch.distributions import constraints +from torch.distributions.transforms import Transform +from torch.nn.functional import softplus + + +def softplus_inv(y): + return y + y.neg().expm1().neg().log() + + +# Backport of https://github.com/pytorch/pytorch/pull/52300 +class SoftplusTransform(Transform): + r""" + Transform via the mapping :math:`\text{Softplus}(x) = \log(1 + \exp(x))`. + """ + + domain = constraints.real + codomain = constraints.positive + bijective = True + sign = +1 + + def __eq__(self, other): + return isinstance(other, SoftplusTransform) + + def _call(self, x): + return softplus(x) + + def _inverse(self, y): + return softplus_inv(y) + + def log_abs_det_jacobian(self, x, y): + return -softplus(-x) + + +class SoftplusLowerCholeskyTransform(Transform): + """ + Transform from unconstrained matrices to lower-triangular matrices with + nonnegative diagonal entries. This is useful for parameterizing positive + definite matrices in terms of their Cholesky factorization. + """ + + domain = constraints.independent(constraints.real, 2) + codomain = constraints.lower_cholesky + + def __eq__(self, other): + return isinstance(other, SoftplusLowerCholeskyTransform) + + def _call(self, x): + diag = softplus(x.diagonal(dim1=-2, dim2=-1)) + return x.tril(-1) + diag.diag_embed() + + def _inverse(self, y): + diag = softplus_inv(y.diagonal(dim1=-2, dim2=-1)) + return y.tril(-1) + diag.diag_embed() + + +__all__ = [ + "SoftplusTransform", + "SoftplusLowerCholeskyTransform", +] diff --git a/pyro/source/pyro/distributions/transforms/spline.py b/pyro/source/pyro/distributions/transforms/spline.py new file mode 100644 index 0000000000000000000000000000000000000000..2f32f61aacbc396cc9dd7dd7c1ede84da945fb14 --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/spline.py @@ -0,0 +1,645 @@ +# Copyright Contributors to the Pyro project. +# Copyright (c) 2020 Hadi M. Dolatabadi, Sarah Erfani, Christopher Leckie +# Copyright (c) 2019 Conor Durkan, Artur Bekasov, Iain Murray, George Papamakarios +# Copyright (c) 2019 Tony Duan +# SPDX-License-Identifier: MIT + +# This implementation is adapted in part from: +# * https://github.com/tonyduan/normalizing-flows/blob/master/nf/flows.py; +# * https://github.com/hmdolatabadi/LRS_NF/blob/master/nde/transforms/nonlinearities.py; and, +# * https://github.com/bayesiains/nsf/blob/master/nde/transforms/splines/rational_quadratic.py +# under the MIT license. + +from functools import partial + +import torch +import torch.nn as nn +import torch.nn.functional as F +from torch.distributions import Transform, constraints + +from pyro.nn import DenseNN + +from ..conditional import ConditionalTransformModule +from ..torch_transform import TransformModule +from ..util import copy_docs_from + + +def _searchsorted(sorted_sequence, values): + """ + Searches for which bin an input belongs to (in a way that is parallelizable and + amenable to autodiff) + + TODO: Replace with torch.searchsorted once it is released + """ + return torch.sum(values[..., None] >= sorted_sequence, dim=-1) - 1 + + +def _select_bins(x, idx): + """ + Performs gather to select the bin in the correct way on batched inputs + """ + idx = idx.clamp(min=0, max=x.size(-1) - 1) + + """ + Broadcast dimensions of idx over x + + idx ~ (batch_dims, input_dim, 1) + x ~ (context_batch_dims, input_dim, count_bins) + + Note that by convention, the context variable batch dimensions must broadcast + over the input batch dimensions. + """ + if len(idx.shape) >= len(x.shape): + x = x.reshape((1,) * (len(idx.shape) - len(x.shape)) + x.shape) + x = x.expand(idx.shape[:-2] + (-1,) * 2) + + return x.gather(-1, idx).squeeze(-1) + + +def _calculate_knots(lengths, lower, upper): + """ + Given a tensor of unscaled bin lengths that sum to 1, plus the lower and upper + limits, returns the shifted and scaled lengths plus knot positions + """ + + # Cumulative widths gives x (y for inverse) position of knots + knots = torch.cumsum(lengths, dim=-1) + + # Pad left of last dimension with 1 zero to compensate for dim lost to cumsum + knots = F.pad(knots, pad=(1, 0), mode="constant", value=0.0) + + # Translate [0,1] knot points to [-B, B] + knots = (upper - lower) * knots + lower + + # Convert the knot points back to lengths + # NOTE: Are following two lines a necessary fix for accumulation (round-off) error? + knots[..., 0] = lower + knots[..., -1] = upper + lengths = knots[..., 1:] - knots[..., :-1] + + return lengths, knots + + +def _monotonic_rational_spline( + inputs, + widths, + heights, + derivatives, + lambdas=None, + inverse=False, + bound=3.0, + min_bin_width=1e-3, + min_bin_height=1e-3, + min_derivative=1e-3, + min_lambda=0.025, + eps=1e-6, +): + """ + Calculating a monotonic rational spline (linear or quadratic) or its inverse, + plus the log(abs(detJ)) required for normalizing flows. + NOTE: I omit the docstring with parameter descriptions for this method since it + is not considered "public" yet! + """ + + # Ensure bound is positive + # NOTE: For simplicity, we apply the identity function outside [-B, B] X [-B, B] rather than allowing arbitrary + # corners to the bounding box. If you want a different bounding box you can apply an affine transform before and + # after the input + assert bound > 0.0 + + num_bins = widths.shape[-1] + if min_bin_width * num_bins > 1.0: + raise ValueError("Minimal bin width too large for the number of bins") + if min_bin_height * num_bins > 1.0: + raise ValueError("Minimal bin height too large for the number of bins") + + # inputs, inside_interval_mask, outside_interval_mask ~ (batch_dim, input_dim) + left, right = -bound, bound + bottom, top = -bound, bound + inside_interval_mask = (inputs >= left) & (inputs <= right) + outside_interval_mask = ~inside_interval_mask + + # outputs, logabsdet ~ (batch_dim, input_dim) + outputs = torch.zeros_like(inputs) + logabsdet = torch.zeros_like(inputs) + + # For numerical stability, put lower/upper limits on parameters. E.g .give every bin min_bin_width, + # then add width fraction of remaining length + # NOTE: Do this here rather than higher up because we want everything to ensure numerical + # stability within this function + widths = min_bin_width + (1.0 - min_bin_width * num_bins) * widths + heights = min_bin_height + (1.0 - min_bin_height * num_bins) * heights + derivatives = min_derivative + derivatives + + # Cumulative widths are x (y for inverse) position of knots + # Similarly, cumulative heights are y (x for inverse) position of knots + widths, cumwidths = _calculate_knots(widths, left, right) + heights, cumheights = _calculate_knots(heights, bottom, top) + + # Pad left and right derivatives with fixed values at first and last knots + # These are 1 since the function is the identity outside the bounding box and the derivative is continuous + # NOTE: Not sure why this is 1.0 - min_derivative rather than 1.0. I've copied this from original implementation + derivatives = F.pad( + derivatives, pad=(1, 1), mode="constant", value=1.0 - min_derivative + ) + + # Get the index of the bin that each input is in + # bin_idx ~ (batch_dim, input_dim, 1) + bin_idx = _searchsorted( + cumheights + eps if inverse else cumwidths + eps, inputs + ).unsqueeze(-1) + + # Select the value for the relevant bin for the variables used in the main calculation + input_widths = _select_bins(widths, bin_idx) + input_cumwidths = _select_bins(cumwidths, bin_idx) + input_cumheights = _select_bins(cumheights, bin_idx) + input_delta = _select_bins(heights / widths, bin_idx) + input_derivatives = _select_bins(derivatives, bin_idx) + input_derivatives_plus_one = _select_bins(derivatives[..., 1:], bin_idx) + input_heights = _select_bins(heights, bin_idx) + + # Calculate monotonic *linear* rational spline + if lambdas is not None: + lambdas = (1 - 2 * min_lambda) * lambdas + min_lambda + input_lambdas = _select_bins(lambdas, bin_idx) + + # The weight, w_a, at the left-hand-side of each bin + # We are free to choose w_a, so set it to 1 + wa = 1.0 + + # The weight, w_b, at the right-hand-side of each bin + # This turns out to be a multiple of the w_a + # TODO: Should this be done in log space for numerical stability? + wb = torch.sqrt(input_derivatives / input_derivatives_plus_one) * wa + + # The weight, w_c, at the division point of each bin + # Recall that each bin is divided into two parts so we have enough d.o.f. to fit spline + wc = ( + input_lambdas * wa * input_derivatives + + (1 - input_lambdas) * wb * input_derivatives_plus_one + ) / input_delta + + # Calculate y coords of bins + ya = input_cumheights + yb = input_heights + input_cumheights + yc = ((1.0 - input_lambdas) * wa * ya + input_lambdas * wb * yb) / ( + (1.0 - input_lambdas) * wa + input_lambdas * wb + ) + + if inverse: + numerator = (input_lambdas * wa * (ya - inputs)) * ( + inputs <= yc + ).float() + ( + (wc - input_lambdas * wb) * inputs + input_lambdas * wb * yb - wc * yc + ) * ( + inputs > yc + ).float() + + denominator = ((wc - wa) * inputs + wa * ya - wc * yc) * ( + inputs <= yc + ).float() + ((wc - wb) * inputs + wb * yb - wc * yc) * (inputs > yc).float() + + theta = numerator / denominator + + outputs = theta * input_widths + input_cumwidths + + derivative_numerator = ( + wa * wc * input_lambdas * (yc - ya) * (inputs <= yc).float() + + wb * wc * (1 - input_lambdas) * (yb - yc) * (inputs > yc).float() + ) * input_widths + + logabsdet = torch.log(derivative_numerator) - 2 * torch.log( + torch.abs(denominator) + ) + + else: + theta = (inputs - input_cumwidths) / input_widths + + numerator = (wa * ya * (input_lambdas - theta) + wc * yc * theta) * ( + theta <= input_lambdas + ).float() + (wc * yc * (1 - theta) + wb * yb * (theta - input_lambdas)) * ( + theta > input_lambdas + ).float() + + denominator = (wa * (input_lambdas - theta) + wc * theta) * ( + theta <= input_lambdas + ).float() + (wc * (1 - theta) + wb * (theta - input_lambdas)) * ( + theta > input_lambdas + ).float() + + outputs = numerator / denominator + + derivative_numerator = ( + wa * wc * input_lambdas * (yc - ya) * (theta <= input_lambdas).float() + + wb + * wc + * (1 - input_lambdas) + * (yb - yc) + * (theta > input_lambdas).float() + ) / input_widths + + logabsdet = torch.log(derivative_numerator) - 2 * torch.log( + torch.abs(denominator) + ) + + # Calculate monotonic *quadratic* rational spline + else: + if inverse: + a = (inputs - input_cumheights) * ( + input_derivatives + input_derivatives_plus_one - 2 * input_delta + ) + input_heights * (input_delta - input_derivatives) + b = input_heights * input_derivatives - (inputs - input_cumheights) * ( + input_derivatives + input_derivatives_plus_one - 2 * input_delta + ) + c = -input_delta * (inputs - input_cumheights) + + discriminant = b.pow(2) - 4 * a * c + # Make sure outside_interval input can be reversed as identity. + discriminant = discriminant.masked_fill(outside_interval_mask, 0) + assert (discriminant >= 0).all() + + root = (2 * c) / (-b - torch.sqrt(discriminant)) + outputs = root * input_widths + input_cumwidths + + theta_one_minus_theta = root * (1 - root) + denominator = input_delta + ( + (input_derivatives + input_derivatives_plus_one - 2 * input_delta) + * theta_one_minus_theta + ) + derivative_numerator = input_delta.pow(2) * ( + input_derivatives_plus_one * root.pow(2) + + 2 * input_delta * theta_one_minus_theta + + input_derivatives * (1 - root).pow(2) + ) + logabsdet = -(torch.log(derivative_numerator) - 2 * torch.log(denominator)) + + else: + theta = (inputs - input_cumwidths) / input_widths + theta_one_minus_theta = theta * (1 - theta) + + numerator = input_heights * ( + input_delta * theta.pow(2) + input_derivatives * theta_one_minus_theta + ) + denominator = input_delta + ( + (input_derivatives + input_derivatives_plus_one - 2 * input_delta) + * theta_one_minus_theta + ) + outputs = input_cumheights + numerator / denominator + + derivative_numerator = input_delta.pow(2) * ( + input_derivatives_plus_one * theta.pow(2) + + 2 * input_delta * theta_one_minus_theta + + input_derivatives * (1 - theta).pow(2) + ) + logabsdet = torch.log(derivative_numerator) - 2 * torch.log(denominator) + + # Apply the identity function outside the bounding box + outputs[outside_interval_mask] = inputs[outside_interval_mask] + logabsdet[outside_interval_mask] = 0.0 + return outputs, logabsdet + + +@copy_docs_from(Transform) +class ConditionedSpline(Transform): + """ + Helper class to manage learnable splines. One could imagine this as a standard + layer in PyTorch... + """ + + domain = constraints.real + codomain = constraints.real + bijective = True + + def __init__(self, params, bound=3.0, order="linear"): + super().__init__(cache_size=1) + + self._params = params + self.order = order + self.bound = bound + self._cache_log_detJ = None + + def _call(self, x): + y, log_detJ = self.spline_op(x) + self._cache_log_detJ = log_detJ + return y + + def _inverse(self, y): + """ + :param y: the output of the bijection + :type y: torch.Tensor + + Inverts y => x. Uses a previously cached inverse if available, + otherwise performs the inversion afresh. + """ + x, log_detJ = self.spline_op(y, inverse=True) + self._cache_log_detJ = -log_detJ + return x + + def log_abs_det_jacobian(self, x, y): + """ + Calculates the elementwise determinant of the log jacobian + """ + x_old, y_old = self._cached_x_y + if x is not x_old or y is not y_old: + # This call to the parent class Transform will update the cache + # as well as calling self._call and recalculating y and log_detJ + self(x) + + return self._cache_log_detJ + + def spline_op(self, x, **kwargs): + w, h, d, l = self._params() if callable(self._params) else self._params + y, log_detJ = _monotonic_rational_spline( + x, w, h, d, l, bound=self.bound, **kwargs + ) + return y, log_detJ + + +@copy_docs_from(ConditionedSpline) +class Spline(ConditionedSpline, TransformModule): + r""" + An implementation of the element-wise rational spline bijections of linear and + quadratic order (Durkan et al., 2019; Dolatabadi et al., 2020). Rational splines + are functions that are comprised of segments that are the ratio of two + polynomials. For instance, for the :math:`d`-th dimension and the :math:`k`-th + segment on the spline, the function will take the form, + + :math:`y_d = \frac{\alpha^{(k)}(x_d)}{\beta^{(k)}(x_d)},` + + where :math:`\alpha^{(k)}` and :math:`\beta^{(k)}` are two polynomials of + order :math:`d`. For :math:`d=1`, we say that the spline is linear, and for + :math:`d=2`, quadratic. The spline is constructed on the specified bounding box, + :math:`[-K,K]\times[-K,K]`, with the identity function used elsewhere. + + Rational splines offer an excellent combination of functional flexibility whilst + maintaining a numerically stable inverse that is of the same computational and + space complexities as the forward operation. This element-wise transform permits + the accurate represention of complex univariate distributions. + + Example usage: + + >>> base_dist = dist.Normal(torch.zeros(10), torch.ones(10)) + >>> transform = Spline(10, count_bins=4, bound=3.) + >>> pyro.module("my_transform", transform) # doctest: +SKIP + >>> flow_dist = dist.TransformedDistribution(base_dist, [transform]) + >>> flow_dist.sample() # doctest: +SKIP + + :param input_dim: Dimension of the input vector. This is required so we know how + many parameters to store. + :type input_dim: int + :param count_bins: The number of segments comprising the spline. + :type count_bins: int + :param bound: The quantity :math:`K` determining the bounding box, + :math:`[-K,K]\times[-K,K]`, of the spline. + :type bound: float + :param order: One of ['linear', 'quadratic'] specifying the order of the spline. + :type order: string + + References: + + Conor Durkan, Artur Bekasov, Iain Murray, George Papamakarios. Neural + Spline Flows. NeurIPS 2019. + + Hadi M. Dolatabadi, Sarah Erfani, Christopher Leckie. Invertible Generative + Modeling using Linear Rational Splines. AISTATS 2020. + + """ + + domain = constraints.real + codomain = constraints.real + bijective = True + + def __init__(self, input_dim, count_bins=8, bound=3.0, order="linear"): + super(Spline, self).__init__(self._params) + + self.input_dim = input_dim + self.count_bins = count_bins + self.bound = bound + self.order = order + + self.unnormalized_widths = nn.Parameter( + torch.randn(self.input_dim, self.count_bins) + ) + self.unnormalized_heights = nn.Parameter( + torch.randn(self.input_dim, self.count_bins) + ) + self.unnormalized_derivatives = nn.Parameter( + torch.randn(self.input_dim, self.count_bins - 1) + ) + + # Rational linear splines have additional lambda parameters + if self.order == "linear": + self.unnormalized_lambdas = nn.Parameter( + torch.rand(self.input_dim, self.count_bins) + ) + elif self.order != "quadratic": + raise ValueError( + "Keyword argument 'order' must be one of ['linear', 'quadratic'], but '{}' was found!".format( + self.order + ) + ) + + def _params(self): + # widths, unnormalized_widths ~ (input_dim, num_bins) + w = F.softmax(self.unnormalized_widths, dim=-1) + h = F.softmax(self.unnormalized_heights, dim=-1) + d = F.softplus(self.unnormalized_derivatives) + if self.order == "linear": + l = torch.sigmoid(self.unnormalized_lambdas) + else: + l = None + return w, h, d, l + + +@copy_docs_from(ConditionalTransformModule) +class ConditionalSpline(ConditionalTransformModule): + r""" + An implementation of the element-wise rational spline bijections of linear and + quadratic order (Durkan et al., 2019; Dolatabadi et al., 2020) conditioning on + an additional context variable. + + Rational splines are functions that are comprised of segments that are the ratio + of two polynomials. For instance, for the :math:`d`-th dimension and the + :math:`k`-th segment on the spline, the function will take the form, + + :math:`y_d = \frac{\alpha^{(k)}(x_d)}{\beta^{(k)}(x_d)},` + + where :math:`\alpha^{(k)}` and :math:`\beta^{(k)}` are two polynomials of + order :math:`d` whose parameters are the output of a function, e.g. a NN, with + input :math:`z\\in\\mathbb{R}^{M}` representing the context variable to + condition on.. For :math:`d=1`, we say that the spline is linear, and for + :math:`d=2`, quadratic. The spline is constructed on the specified bounding box, + :math:`[-K,K]\times[-K,K]`, with the identity function used elsewhere. + + Rational splines offer an excellent combination of functional flexibility whilst + maintaining a numerically stable inverse that is of the same computational and + space complexities as the forward operation. This element-wise transform permits + the accurate represention of complex univariate distributions. + + Example usage: + + >>> from pyro.nn.dense_nn import DenseNN + >>> input_dim = 10 + >>> context_dim = 5 + >>> batch_size = 3 + >>> count_bins = 8 + >>> base_dist = dist.Normal(torch.zeros(input_dim), torch.ones(input_dim)) + >>> param_dims = [input_dim * count_bins, input_dim * count_bins, + ... input_dim * (count_bins - 1), input_dim * count_bins] + >>> hypernet = DenseNN(context_dim, [50, 50], param_dims) + >>> transform = ConditionalSpline(hypernet, input_dim, count_bins) + >>> z = torch.rand(batch_size, context_dim) + >>> flow_dist = dist.ConditionalTransformedDistribution(base_dist, + ... [transform]).condition(z) + >>> flow_dist.sample(sample_shape=torch.Size([batch_size])) # doctest: +SKIP + + :param input_dim: Dimension of the input vector. This is required so we know how + many parameters to store. + :type input_dim: int + :param count_bins: The number of segments comprising the spline. + :type count_bins: int + :param bound: The quantity :math:`K` determining the bounding box, + :math:`[-K,K]\times[-K,K]`, of the spline. + :type bound: float + :param order: One of ['linear', 'quadratic'] specifying the order of the spline. + :type order: string + + References: + + Conor Durkan, Artur Bekasov, Iain Murray, George Papamakarios. Neural + Spline Flows. NeurIPS 2019. + + Hadi M. Dolatabadi, Sarah Erfani, Christopher Leckie. Invertible Generative + Modeling using Linear Rational Splines. AISTATS 2020. + + """ + + domain = constraints.real + codomain = constraints.real + bijective = True + + def __init__(self, nn, input_dim, count_bins, bound=3.0, order="linear"): + super().__init__() + + self.nn = nn + self.input_dim = input_dim + self.count_bins = count_bins + self.bound = bound + self.order = order + + def _params(self, context): + # Rational linear splines have additional lambda parameters + if self.order == "linear": + w, h, d, l = self.nn(context) + # AutoRegressiveNN and DenseNN return different shapes... + if w.shape[-1] == self.input_dim: + l = l.transpose(-1, -2) + else: + l = l.reshape(l.shape[:-1] + (self.input_dim, self.count_bins)) + + l = torch.sigmoid(l) + elif self.order == "quadratic": + w, h, d = self.nn(context) + l = None + else: + raise ValueError( + "Keyword argument 'order' must be one of ['linear', 'quadratic'], but '{}' was found!".format( + self.order + ) + ) + + # AutoRegressiveNN and DenseNN return different shapes... + if w.shape[-1] == self.input_dim: + w = w.transpose(-1, -2) + h = h.transpose(-1, -2) + d = d.transpose(-1, -2) + + else: + w = w.reshape(w.shape[:-1] + (self.input_dim, self.count_bins)) + h = h.reshape(h.shape[:-1] + (self.input_dim, self.count_bins)) + d = d.reshape(d.shape[:-1] + (self.input_dim, self.count_bins - 1)) + + w = F.softmax(w, dim=-1) + h = F.softmax(h, dim=-1) + d = F.softplus(d) + return w, h, d, l + + def condition(self, context): + params = partial(self._params, context) + return ConditionedSpline(params, bound=self.bound, order=self.order) + + +def spline(input_dim, **kwargs): + """ + A helper function to create a + :class:`~pyro.distributions.transforms.Spline` object for consistency with + other helpers. + + :param input_dim: Dimension of input variable + :type input_dim: int + + """ + + # TODO: A useful heuristic for choosing number of bins from input + # dimension like: count_bins=min(5, math.log(input_dim))? + return Spline(input_dim, **kwargs) + + +def conditional_spline( + input_dim, context_dim, hidden_dims=None, count_bins=8, bound=3.0, order="linear" +): + """ + A helper function to create a + :class:`~pyro.distributions.transforms.ConditionalSpline` object that takes care + of constructing a dense network with the correct input/output dimensions. + + :param input_dim: Dimension of input variable + :type input_dim: int + :param context_dim: Dimension of context variable + :type context_dim: int + :param hidden_dims: The desired hidden dimensions of the dense network. Defaults + to using [input_dim * 10, input_dim * 10] + :type hidden_dims: list[int] + :param count_bins: The number of segments comprising the spline. + :type count_bins: int + :param bound: The quantity :math:`K` determining the bounding box, + :math:`[-K,K]\times[-K,K]`, of the spline. + :type bound: float + :param order: One of ['linear', 'quadratic'] specifying the order of the spline. + :type order: string + + """ + + if hidden_dims is None: + hidden_dims = [input_dim * 10, input_dim * 10] + + if order == "linear": + nn = DenseNN( + context_dim, + hidden_dims, + param_dims=[ + input_dim * count_bins, + input_dim * count_bins, + input_dim * (count_bins - 1), + input_dim * count_bins, + ], + ) + elif order == "quadratic": + nn = DenseNN( + context_dim, + hidden_dims, + param_dims=[ + input_dim * count_bins, + input_dim * count_bins, + input_dim * (count_bins - 1), + ], + ) + + else: + raise ValueError( + "Keyword argument 'order' must be one of ['linear', 'quadratic'], but '{}' was found!".format( + order + ) + ) + + return ConditionalSpline(nn, input_dim, count_bins, bound=bound, order=order) diff --git a/pyro/source/pyro/distributions/transforms/spline_autoregressive.py b/pyro/source/pyro/distributions/transforms/spline_autoregressive.py new file mode 100644 index 0000000000000000000000000000000000000000..48b450bff1de614d85253378b7e8d4652de3fedb --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/spline_autoregressive.py @@ -0,0 +1,289 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from functools import partial + +import torch + +from pyro.nn import AutoRegressiveNN, ConditionalAutoRegressiveNN + +from .. import constraints +from ..conditional import ConditionalTransformModule +from ..torch_transform import TransformModule +from ..util import copy_docs_from +from .spline import ConditionalSpline + + +@copy_docs_from(TransformModule) +class SplineAutoregressive(TransformModule): + r""" + An implementation of the autoregressive layer with rational spline bijections of + linear and quadratic order (Durkan et al., 2019; Dolatabadi et al., 2020). + Rational splines are functions that are comprised of segments that are the ratio + of two polynomials (see :class:`~pyro.distributions.transforms.Spline`). + + The autoregressive layer uses the transformation, + + :math:`y_d = g_{\theta_d}(x_d)\ \ \ d=1,2,\ldots,D` + + where :math:`\mathbf{x}=(x_1,x_2,\ldots,x_D)` are the inputs, + :math:`\mathbf{y}=(y_1,y_2,\ldots,y_D)` are the outputs, :math:`g_{\theta_d}` is + an elementwise rational monotonic spline with parameters :math:`\theta_d`, and + :math:`\theta=(\theta_1,\theta_2,\ldots,\theta_D)` is the output of an + autoregressive NN inputting :math:`\mathbf{x}`. + + Example usage: + + >>> from pyro.nn import AutoRegressiveNN + >>> input_dim = 10 + >>> count_bins = 8 + >>> base_dist = dist.Normal(torch.zeros(input_dim), torch.ones(input_dim)) + >>> hidden_dims = [input_dim * 10, input_dim * 10] + >>> param_dims = [count_bins, count_bins, count_bins - 1, count_bins] + >>> hypernet = AutoRegressiveNN(input_dim, hidden_dims, param_dims=param_dims) + >>> transform = SplineAutoregressive(input_dim, hypernet, count_bins=count_bins) + >>> pyro.module("my_transform", transform) # doctest: +SKIP + >>> flow_dist = dist.TransformedDistribution(base_dist, [transform]) + >>> flow_dist.sample() # doctest: +SKIP + + :param input_dim: Dimension of the input vector. Despite operating element-wise, + this is required so we know how many parameters to store. + :type input_dim: int + :param autoregressive_nn: an autoregressive neural network whose forward call + returns tuple of the spline parameters + :type autoregressive_nn: callable + :param count_bins: The number of segments comprising the spline. + :type count_bins: int + :param bound: The quantity :math:`K` determining the bounding box, + :math:`[-K,K]\times[-K,K]`, of the spline. + :type bound: float + :param order: One of ['linear', 'quadratic'] specifying the order of the spline. + :type order: string + + References: + + Conor Durkan, Artur Bekasov, Iain Murray, George Papamakarios. Neural + Spline Flows. NeurIPS 2019. + + Hadi M. Dolatabadi, Sarah Erfani, Christopher Leckie. Invertible Generative + Modeling using Linear Rational Splines. AISTATS 2020. + + """ + + domain = constraints.real_vector + codomain = constraints.real_vector + bijective = True + autoregressive = True + + def __init__( + self, input_dim, autoregressive_nn, count_bins=8, bound=3.0, order="linear" + ): + super(SplineAutoregressive, self).__init__(cache_size=1) + self.arn = autoregressive_nn + self.spline = ConditionalSpline( + autoregressive_nn, input_dim, count_bins, bound, order + ) + + def _call(self, x): + """ + :param x: the input into the bijection + :type x: torch.Tensor + + Invokes the bijection x=>y; in the prototypical context of a + :class:`~pyro.distributions.TransformedDistribution` `x` is a sample from + the base distribution (or the output of a previous transform) + """ + spline = self.spline.condition(x) + y = spline(x) + self._cache_log_detJ = spline._cache_log_detJ + return y + + def _inverse(self, y): + """ + :param y: the output of the bijection + :type y: torch.Tensor + + Inverts y => x. Uses a previously cached inverse if available, otherwise + performs the inversion afresh. + """ + input_dim = y.size(-1) + x = torch.zeros_like(y) + + # NOTE: Inversion is an expensive operation that scales in the dimension of the input + for _ in range(input_dim): + spline = self.spline.condition(x) + x = spline._inverse(y) + + self._cache_log_detJ = spline._cache_log_detJ + return x + + def log_abs_det_jacobian(self, x, y): + """ + Calculates the elementwise determinant of the log Jacobian + """ + x_old, y_old = self._cached_x_y + if x is not x_old or y is not y_old: + # This call to the parent class Transform will update the cache + # as well as calling self._call and recalculating y and log_detJ + self(x) + + return self._cache_log_detJ.sum(-1) + + +@copy_docs_from(ConditionalTransformModule) +class ConditionalSplineAutoregressive(ConditionalTransformModule): + r""" + An implementation of the autoregressive layer with rational spline bijections of + linear and quadratic order (Durkan et al., 2019; Dolatabadi et al., 2020) that + conditions on an additional context variable. Rational splines are functions + that are comprised of segments that are the ratio of two polynomials (see + :class:`~pyro.distributions.transforms.Spline`). + + The autoregressive layer uses the transformation, + + :math:`y_d = g_{\theta_d}(x_d)\ \ \ d=1,2,\ldots,D` + + where :math:`\mathbf{x}=(x_1,x_2,\ldots,x_D)` are the inputs, + :math:`\mathbf{y}=(y_1,y_2,\ldots,y_D)` are the outputs, :math:`g_{\theta_d}` is + an elementwise rational monotonic spline with parameters :math:`\theta_d`, and + :math:`\theta=(\theta_1,\theta_2,\ldots,\theta_D)` is the output of a + conditional autoregressive NN inputting :math:`\mathbf{x}` and conditioning on + the context variable :math:`\mathbf{z}`. + + Example usage: + + >>> from pyro.nn import ConditionalAutoRegressiveNN + >>> input_dim = 10 + >>> count_bins = 8 + >>> context_dim = 5 + >>> batch_size = 3 + >>> base_dist = dist.Normal(torch.zeros(input_dim), torch.ones(input_dim)) + >>> hidden_dims = [input_dim * 10, input_dim * 10] + >>> param_dims = [count_bins, count_bins, count_bins - 1, count_bins] + >>> hypernet = ConditionalAutoRegressiveNN(input_dim, context_dim, hidden_dims, + ... param_dims=param_dims) + >>> transform = ConditionalSplineAutoregressive(input_dim, hypernet, + ... count_bins=count_bins) + >>> pyro.module("my_transform", transform) # doctest: +SKIP + >>> z = torch.rand(batch_size, context_dim) + >>> flow_dist = dist.ConditionalTransformedDistribution(base_dist, + ... [transform]).condition(z) + >>> flow_dist.sample(sample_shape=torch.Size([batch_size])) # doctest: +SKIP + + :param input_dim: Dimension of the input vector. Despite operating element-wise, + this is required so we know how many parameters to store. + :type input_dim: int + :param autoregressive_nn: an autoregressive neural network whose forward call + returns tuple of the spline parameters + :type autoregressive_nn: callable + :param count_bins: The number of segments comprising the spline. + :type count_bins: int + :param bound: The quantity :math:`K` determining the bounding box, + :math:`[-K,K]\times[-K,K]`, of the spline. + :type bound: float + :param order: One of ['linear', 'quadratic'] specifying the order of the spline. + :type order: string + + References: + + Conor Durkan, Artur Bekasov, Iain Murray, George Papamakarios. Neural + Spline Flows. NeurIPS 2019. + + Hadi M. Dolatabadi, Sarah Erfani, Christopher Leckie. Invertible Generative + Modeling using Linear Rational Splines. AISTATS 2020. + + """ + + domain = constraints.real_vector + codomain = constraints.real_vector + bijective = True + + def __init__(self, input_dim, autoregressive_nn, **kwargs): + super().__init__() + self.input_dim = input_dim + self.nn = autoregressive_nn + self.kwargs = kwargs + + def condition(self, context): + """ + Conditions on a context variable, returning a non-conditional transform of + of type :class:`~pyro.distributions.transforms.SplineAutoregressive`. + """ + + # Note that nn.condition doesn't copy the weights of the ConditionalAutoregressiveNN + cond_nn = partial(self.nn, context=context) + cond_nn.permutation = cond_nn.func.permutation + cond_nn.get_permutation = cond_nn.func.get_permutation + return SplineAutoregressive(self.input_dim, cond_nn, **self.kwargs) + + +def spline_autoregressive( + input_dim, hidden_dims=None, count_bins=8, bound=3.0, order="linear" +): + r""" + A helper function to create an + :class:`~pyro.distributions.transforms.SplineAutoregressive` object that takes + care of constructing an autoregressive network with the correct input/output + dimensions. + + :param input_dim: Dimension of input variable + :type input_dim: int + :param hidden_dims: The desired hidden dimensions of the autoregressive network. + Defaults to using [3*input_dim + 1] + :type hidden_dims: list[int] + :param count_bins: The number of segments comprising the spline. + :type count_bins: int + :param bound: The quantity :math:`K` determining the bounding box, + :math:`[-K,K]\times[-K,K]`, of the spline. + :type bound: float + :param order: One of ['linear', 'quadratic'] specifying the order of the spline. + :type order: string + + """ + + if hidden_dims is None: + hidden_dims = [input_dim * 10, input_dim * 10] + + param_dims = [count_bins, count_bins, count_bins - 1, count_bins] + arn = AutoRegressiveNN(input_dim, hidden_dims, param_dims=param_dims) + return SplineAutoregressive( + input_dim, arn, count_bins=count_bins, bound=bound, order=order + ) + + +def conditional_spline_autoregressive( + input_dim, context_dim, hidden_dims=None, count_bins=8, bound=3.0, order="linear" +): + r""" + A helper function to create a + :class:`~pyro.distributions.transforms.ConditionalSplineAutoregressive` object + that takes care of constructing an autoregressive network with the correct + input/output dimensions. + + :param input_dim: Dimension of input variable + :type input_dim: int + :param context_dim: Dimension of context variable + :type context_dim: int + :param hidden_dims: The desired hidden dimensions of the autoregressive network. + Defaults to using [input_dim * 10, input_dim * 10] + :type hidden_dims: list[int] + :param count_bins: The number of segments comprising the spline. + :type count_bins: int + :param bound: The quantity :math:`K` determining the bounding box, + :math:`[-K,K]\times[-K,K]`, of the spline. + :type bound: float + :param order: One of ['linear', 'quadratic'] specifying the order of the spline. + :type order: string + + """ + + if hidden_dims is None: + hidden_dims = [input_dim * 10, input_dim * 10] + + param_dims = [count_bins, count_bins, count_bins - 1, count_bins] + arn = ConditionalAutoRegressiveNN( + input_dim, context_dim, hidden_dims, param_dims=param_dims + ) + return ConditionalSplineAutoregressive( + input_dim, arn, count_bins=count_bins, bound=bound, order=order + ) diff --git a/pyro/source/pyro/distributions/transforms/spline_coupling.py b/pyro/source/pyro/distributions/transforms/spline_coupling.py new file mode 100644 index 0000000000000000000000000000000000000000..c7ee114c8831d5786c502eb9df83e74926128d0e --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/spline_coupling.py @@ -0,0 +1,198 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +from pyro.nn import DenseNN + +from .. import constraints +from ..torch_transform import TransformModule +from ..util import copy_docs_from +from .spline import ConditionalSpline, Spline + + +@copy_docs_from(TransformModule) +class SplineCoupling(TransformModule): + r""" + An implementation of the coupling layer with rational spline bijections of + linear and quadratic order (Durkan et al., 2019; Dolatabadi et al., 2020). + Rational splines are functions that are comprised of segments that are the ratio + of two polynomials (see :class:`~pyro.distributions.transforms.Spline`). + + The spline coupling layer uses the transformation, + + :math:`\mathbf{y}_{1:d} = g_\theta(\mathbf{x}_{1:d})` + :math:`\mathbf{y}_{(d+1):D} = h_\phi(\mathbf{x}_{(d+1):D};\mathbf{x}_{1:d})` + + where :math:`\mathbf{x}` are the inputs, :math:`\mathbf{y}` are the outputs, + e.g. :math:`\mathbf{x}_{1:d}` represents the first :math:`d` elements of the + inputs, :math:`g_\theta` is either the identity function or an elementwise + rational monotonic spline with parameters :math:`\theta`, and :math:`h_\phi` is + a conditional elementwise spline spline, conditioning on the first :math:`d` + elements. + + Example usage: + + >>> from pyro.nn import DenseNN + >>> input_dim = 10 + >>> split_dim = 6 + >>> count_bins = 8 + >>> base_dist = dist.Normal(torch.zeros(input_dim), torch.ones(input_dim)) + >>> param_dims = [(input_dim - split_dim) * count_bins, + ... (input_dim - split_dim) * count_bins, + ... (input_dim - split_dim) * (count_bins - 1), + ... (input_dim - split_dim) * count_bins] + >>> hypernet = DenseNN(split_dim, [10*input_dim], param_dims) + >>> transform = SplineCoupling(input_dim, split_dim, hypernet) + >>> pyro.module("my_transform", transform) # doctest: +SKIP + >>> flow_dist = dist.TransformedDistribution(base_dist, [transform]) + >>> flow_dist.sample() # doctest: +SKIP + + :param input_dim: Dimension of the input vector. Despite operating element-wise, + this is required so we know how many parameters to store. + :type input_dim: int + :param split_dim: Zero-indexed dimension :math:`d` upon which to perform input/ + output split for transformation. + :param hypernet: a neural network whose forward call returns a tuple of spline + parameters (see :class:`~pyro.distributions.transforms.ConditionalSpline`). + :type hypernet: callable + :param count_bins: The number of segments comprising the spline. + :type count_bins: int + :param bound: The quantity :math:`K` determining the bounding box, + :math:`[-K,K]\times[-K,K]`, of the spline. + :type bound: float + :param order: One of ['linear', 'quadratic'] specifying the order of the spline. + :type order: string + + References: + + Conor Durkan, Artur Bekasov, Iain Murray, George Papamakarios. Neural + Spline Flows. NeurIPS 2019. + + Hadi M. Dolatabadi, Sarah Erfani, Christopher Leckie. Invertible Generative + Modeling using Linear Rational Splines. AISTATS 2020. + + """ + + domain = constraints.real_vector + codomain = constraints.real_vector + bijective = True + + def __init__( + self, + input_dim, + split_dim, + hypernet, + count_bins=8, + bound=3.0, + order="linear", + identity=False, + ): + super(SplineCoupling, self).__init__(cache_size=1) + + # One part of the input is (optionally) put through an element-wise spline and the other part through a + # conditional one that inputs the first part. + self.lower_spline = Spline(split_dim, count_bins, bound, order) + self.upper_spline = ConditionalSpline( + hypernet, input_dim - split_dim, count_bins, bound, order + ) + self.split_dim = split_dim + self.identity = identity + + def _call(self, x): + """ + :param x: the input into the bijection + :type x: torch.Tensor + + Invokes the bijection x=>y; in the prototypical context of a + :class:`~pyro.distributions.TransformedDistribution` `x` is a sample from + the base distribution (or the output of a previous transform) + """ + x1, x2 = x[..., : self.split_dim], x[..., self.split_dim :] + + if not self.identity: + y1 = self.lower_spline(x1) + log_detK = self.lower_spline._cache_log_detJ + else: + y1 = x1 + + upper_spline = self.upper_spline.condition(x1) + y2 = upper_spline(x2) + log_detJ = upper_spline._cache_log_detJ + + if not self.identity: + log_detJ = torch.cat([log_detJ, log_detK], dim=-1) + self._cache_log_detJ = log_detJ + + return torch.cat([y1, y2], dim=-1) + + def _inverse(self, y): + """ + :param y: the output of the bijection + :type y: torch.Tensor + + Inverts y => x. Uses a previously cached inverse if available, + otherwise performs the inversion afresh. + """ + y1, y2 = y[..., : self.split_dim], y[..., self.split_dim :] + + if not self.identity: + x1 = self.lower_spline._inv_call(y1) + log_detK = self.lower_spline._cache_log_detJ + else: + x1 = y1 + + upper_spline = self.upper_spline.condition(x1) + x2 = upper_spline._inv_call(y2) + log_detJ = upper_spline._cache_log_detJ + + if not self.identity: + log_detJ = torch.cat([log_detJ, log_detK], dim=-1) + self._cache_log_detJ = log_detJ + + return torch.cat([x1, x2], dim=-1) + + def log_abs_det_jacobian(self, x, y): + """ + Calculates the elementwise determinant of the log jacobian + """ + x_old, y_old = self._cached_x_y + if x is not x_old or y is not y_old: + # This call to the parent class Transform will update the cache + # as well as calling self._call and recalculating y and log_detJ + self(x) + + return self._cache_log_detJ.sum(-1) + + +def spline_coupling( + input_dim, split_dim=None, hidden_dims=None, count_bins=8, bound=3.0 +): + """ + A helper function to create a + :class:`~pyro.distributions.transforms.SplineCoupling` object for consistency + with other helpers. + + :param input_dim: Dimension of input variable + :type input_dim: int + + """ + + if split_dim is None: + split_dim = input_dim // 2 + + if hidden_dims is None: + hidden_dims = [input_dim * 10, input_dim * 10] + + nn = DenseNN( + split_dim, + hidden_dims, + param_dims=[ + (input_dim - split_dim) * count_bins, + (input_dim - split_dim) * count_bins, + (input_dim - split_dim) * (count_bins - 1), + (input_dim - split_dim) * count_bins, + ], + ) + + return SplineCoupling(input_dim, split_dim, nn, count_bins, bound) diff --git a/pyro/source/pyro/distributions/transforms/sylvester.py b/pyro/source/pyro/distributions/transforms/sylvester.py new file mode 100644 index 0000000000000000000000000000000000000000..a115873b905cd0bb07f22e54e23d200eada86650 --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/sylvester.py @@ -0,0 +1,174 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +import torch.nn as nn + +from .. import constraints +from ..torch_transform import TransformModule +from ..util import copy_docs_from +from .householder import Householder + + +@copy_docs_from(TransformModule) +class Sylvester(Householder): + r""" + An implementation of the Sylvester bijective transform of the Householder + variety (Van den Berg Et Al., 2018), + + :math:`\mathbf{y} = \mathbf{x} + QR\tanh(SQ^T\mathbf{x}+\mathbf{b})` + + where :math:`\mathbf{x}` are the inputs, :math:`\mathbf{y}` are the outputs, + :math:`R,S\sim D\times D` are upper triangular matrices for input dimension + :math:`D`, :math:`Q\sim D\times D` is an orthogonal matrix, and + :math:`\mathbf{b}\sim D` is learnable bias term. + + The Sylvester transform is a generalization of + :class:`~pyro.distributions.transforms.Planar`. In the Householder type of the + Sylvester transform, the orthogonality of :math:`Q` is enforced by representing + it as the product of Householder transformations. + + Together with :class:`~pyro.distributions.TransformedDistribution` it provides a + way to create richer variational approximations. + + Example usage: + + >>> base_dist = dist.Normal(torch.zeros(10), torch.ones(10)) + >>> transform = Sylvester(10, count_transforms=4) + >>> pyro.module("my_transform", transform) # doctest: +SKIP + >>> flow_dist = dist.TransformedDistribution(base_dist, [transform]) + >>> flow_dist.sample() # doctest: +SKIP + tensor([-0.4071, -0.5030, 0.7924, -0.2366, -0.2387, -0.1417, 0.0868, + 0.1389, -0.4629, 0.0986]) + + The inverse of this transform does not possess an analytical solution and is + left unimplemented. However, the inverse is cached when the forward operation is + called during sampling, and so samples drawn using the Sylvester transform can + be scored. + + References: + + [1] Rianne van den Berg, Leonard Hasenclever, Jakub M. Tomczak, Max Welling. + Sylvester Normalizing Flows for Variational Inference. UAI 2018. + + """ + + domain = constraints.real_vector + codomain = constraints.real_vector + bijective = True + + def __init__(self, input_dim, count_transforms=1): + super().__init__(input_dim, count_transforms) + + # Create parameters for Sylvester transform + self.R_dense = nn.Parameter(torch.Tensor(input_dim, input_dim)) + self.S_dense = nn.Parameter(torch.Tensor(input_dim, input_dim)) + self.R_diag = nn.Parameter(torch.Tensor(input_dim)) + self.S_diag = nn.Parameter(torch.Tensor(input_dim)) + self.b = nn.Parameter(torch.Tensor(input_dim)) + + # Register masks and indices + triangular_mask = torch.triu(torch.ones(input_dim, input_dim), diagonal=1) + self.register_buffer("triangular_mask", triangular_mask) + + self._cached_logDetJ = None + self.tanh = nn.Tanh() + self.reset_parameters2() + + # Derivative of hyperbolic tan + def dtanh_dx(self, x): + return 1.0 - self.tanh(x).pow(2) + + # Construct upper diagonal R matrix + def R(self): + return self.R_dense * self.triangular_mask + torch.diag(self.tanh(self.R_diag)) + + # Construct upper diagonal S matrix + def S(self): + return self.S_dense * self.triangular_mask + torch.diag(self.tanh(self.S_diag)) + + # Construct orthonomal matrix using Householder flow + def Q(self, x): + u = self.u() + partial_Q = torch.eye( + self.input_dim, dtype=x.dtype, layout=x.layout, device=x.device + ) - 2.0 * torch.outer(u[0], u[0]) + + for idx in range(1, self.u_unnormed.size(-2)): + partial_Q = torch.matmul( + partial_Q, torch.eye(self.input_dim) - 2.0 * torch.outer(u[idx], u[idx]) + ) + + return partial_Q + + # Self.u_unnormed is initialized in parent class + def reset_parameters2(self): + for v in [self.b, self.R_diag, self.S_diag, self.R_dense, self.S_dense]: + v.data.uniform_(-0.01, 0.01) + + def _call(self, x): + """ + :param x: the input into the bijection + :type x: torch.Tensor + + Invokes the bijection x=>y; in the prototypical context of a + :class:`~pyro.distributions.TransformedDistribution` `x` is a sample from + the base distribution (or the output of a previous transform) + """ + Q = self.Q(x) + R = self.R() + S = self.S() + + A = torch.matmul(Q, R) + B = torch.matmul(S, Q.t()) + + preactivation = torch.matmul(x, B) + self.b + y = x + torch.matmul(self.tanh(preactivation), A) + + self._cached_logDetJ = torch.log1p( + self.dtanh_dx(preactivation) * R.diagonal() * S.diagonal() + 1e-8 + ).sum(-1) + return y + + def _inverse(self, y): + """ + :param y: the output of the bijection + :type y: torch.Tensor + Inverts y => x. As noted above, this implementation is incapable of + inverting arbitrary values `y`; rather it assumes `y` is the result of a + previously computed application of the bijector to some `x` (which was + cached on the forward call) + """ + + raise KeyError( + "Sylvester object expected to find key in intermediates cache but didn't" + ) + + def log_abs_det_jacobian(self, x, y): + """ + Calculates the elementwise determinant of the log Jacobian + """ + x_old, y_old = self._cached_x_y + if x is not x_old or y is not y_old: + # This call to the parent class Transform will update the cache + # as well as calling self._call and recalculating y and log_detJ + self(x) + + return self._cached_logDetJ + + +def sylvester(input_dim, count_transforms=None): + """ + A helper function to create a :class:`~pyro.distributions.transforms.Sylvester` + object for consistency with other helpers. + + :param input_dim: Dimension of input variable + :type input_dim: int + :param count_transforms: Number of Sylvester operations to apply. Defaults to + input_dim // 2 + 1. :type count_transforms: int + + """ + + if count_transforms is None: + count_transforms = input_dim // 2 + 1 + return Sylvester(input_dim, count_transforms=count_transforms) diff --git a/pyro/source/pyro/distributions/transforms/unit_cholesky.py b/pyro/source/pyro/distributions/transforms/unit_cholesky.py new file mode 100644 index 0000000000000000000000000000000000000000..8262f858fb9c30555a536c789cd34a4850938374 --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/unit_cholesky.py @@ -0,0 +1,32 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions import constraints +from torch.distributions.transforms import Transform + +from pyro.distributions.constraints import unit_lower_cholesky + + +class UnitLowerCholeskyTransform(Transform): + """ + Transform from unconstrained matrices to lower-triangular matrices with + all ones diagonals. + """ + + domain = constraints.independent(constraints.real, 2) + codomain = unit_lower_cholesky + + def __eq__(self, other): + return isinstance(other, UnitLowerCholeskyTransform) + + def _call(self, x): + return x.tril(-1) + torch.eye(x.size(-1), device=x.device, dtype=x.dtype) + + def _inverse(self, y): + return y + + +__all__ = [ + "UnitLowerCholeskyTransform", +] diff --git a/pyro/source/pyro/distributions/transforms/utils.py b/pyro/source/pyro/distributions/transforms/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..49fdd5ba46acaaca8b3530650a8a8ed0f31b1117 --- /dev/null +++ b/pyro/source/pyro/distributions/transforms/utils.py @@ -0,0 +1,7 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + + +def clamp_preserve_gradients(x, min, max): + # This helper function clamps gradients but still passes through the gradient in clamped regions + return x + (x.clamp(min, max) - x).detach() diff --git a/pyro/source/pyro/distributions/unit.py b/pyro/source/pyro/distributions/unit.py new file mode 100644 index 0000000000000000000000000000000000000000..c80bab1ac60fc1b8b035260df22f393d2e491602 --- /dev/null +++ b/pyro/source/pyro/distributions/unit.py @@ -0,0 +1,50 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions import constraints + +from pyro.distributions.torch_distribution import TorchDistribution +from pyro.distributions.util import broadcast_shape + + +class Unit(TorchDistribution): + """ + Trivial nonnormalized distribution representing the unit type. + + The unit type has a single value with no data, i.e. ``value.numel() == 0``. + + This is used for :func:`pyro.factor` statements. + """ + + arg_constraints = {"log_factor": constraints.real} + support = constraints.real + + def __init__(self, log_factor, *, has_rsample=None, validate_args=None): + log_factor = torch.as_tensor(log_factor) + batch_shape = log_factor.shape + event_shape = torch.Size((0,)) # This satisfies .numel() == 0. + self.log_factor = log_factor + if has_rsample is not None: + self.has_rsample = has_rsample + super().__init__(batch_shape, event_shape, validate_args=validate_args) + + def expand(self, batch_shape, _instance=None): + batch_shape = torch.Size(batch_shape) + new = self._get_checked_instance(Unit, _instance) + new.log_factor = self.log_factor.expand(batch_shape) + if "has_rsample" in self.__dict__: + new.has_rsample = self.has_rsample + super(Unit, new).__init__(batch_shape, self.event_shape, validate_args=False) + new._validate_args = self._validate_args + return new + + def sample(self, sample_shape=torch.Size()): + return self.log_factor.new_empty(sample_shape + self.shape()) + + def rsample(self, sample_shape=torch.Size()): + return self.log_factor.new_empty(sample_shape + self.shape()) + + def log_prob(self, value): + shape = broadcast_shape(self.batch_shape, value.shape[:-1]) + return self.log_factor.expand(shape) diff --git a/pyro/source/pyro/distributions/util.py b/pyro/source/pyro/distributions/util.py new file mode 100644 index 0000000000000000000000000000000000000000..ba59273069d4140990b0349765ca6ef6752826f9 --- /dev/null +++ b/pyro/source/pyro/distributions/util.py @@ -0,0 +1,361 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import copy +import ctypes +import functools +import numbers +import weakref +from contextlib import contextmanager + +import torch +import torch.distributions as torch_dist +from torch import logsumexp +from torch.distributions.utils import broadcast_all + +from pyro.util import ignore_jit_warnings + +from .. import settings + +_VALIDATION_ENABLED = __debug__ +torch_dist.Distribution.set_default_validate_args(__debug__) + +settings.register("validate_distributions_pyro", __name__, "_VALIDATION_ENABLED") +settings.register( + "validate_distributions_torch", + "torch.distributions.distribution", + "Distribution._validate_args", +) + +log_sum_exp = logsumexp # DEPRECATED + + +def copy_docs_from(source_class, full_text=False): + """ + Decorator to copy class and method docs from source to destin class. + """ + + def decorator(destin_class): + # This works only in python 3.3+: + # if not destin_class.__doc__: + # destin_class.__doc__ = source_class.__doc__ + for name in dir(destin_class): + if name.startswith("_"): + continue + destin_attr = getattr(destin_class, name) + destin_attr = getattr(destin_attr, "__func__", destin_attr) + source_attr = getattr(source_class, name, None) + source_doc = getattr(source_attr, "__doc__", None) + if source_doc and not getattr(destin_attr, "__doc__", None): + if full_text or source_doc.startswith("See "): + destin_doc = source_doc + else: + destin_doc = "See :meth:`{}.{}.{}`".format( + source_class.__module__, source_class.__name__, name + ) + if isinstance(destin_attr, property): + # Set docs for object properties. + # Since __doc__ is read-only, we need to reset the property + # with the updated doc. + updated_property = property( + destin_attr.fget, destin_attr.fset, destin_attr.fdel, destin_doc + ) + setattr(destin_class, name, updated_property) + else: + destin_attr.__doc__ = destin_doc + return destin_class + + return decorator + + +# TODO replace with weakref.WeakMethod? +def weakmethod(fn): + """ + Decorator to enforce weak binding of a method, so as to avoid reference + cycles when passing a bound method as an argument to other functions. + + In the following example, functional behavior is the same with and without + the ``@weakmethod`` decorator, but decoration avoids a reference cycle:: + + class Foo: + def __init__(self): + self.callback = self._callback + @weakmethod + def _callback(self, result): + print(result) + """ + + def weak_fn(weakself, *args, **kwargs): + self = weakself() + if self is None: + raise AttributeError( + "self was garbage collected when calling self.{}".format(fn.__name__) + ) + return fn(self, *args, **kwargs) + + @property + def weak_binder(self): + weakself = weakref.ref(self) + return functools.partial(weak_fn, weakself) + + @weak_binder.setter + def weak_binder(self, new): + if not ( + isinstance(new, functools.partial) + and new.func is weak_fn + and len(new.args) == 1 + and new.args[0] is weakref.ref(self) + ): + raise AttributeError("cannot overwrite weakmethod {}".format(fn.__name__)) + + return weak_binder + + +# This helper intervenes in copy.deepcopy's use of a memo dict to +# use .detatch() to copy tensors. +class _DetachMemo(dict): + def get(self, key, default=None): + result = super().get(key, default) + + if result is default: + # Assume key is the id of another object, and look up that object. + old = ctypes.cast(key, ctypes.py_object).value + if isinstance(old, torch.Tensor): + self[key] = result = old.detach() + + return result + + +def detach(obj): + """ + Create a deep copy of an object, detaching all :class:`torch.Tensor` s in + the object. No tensor data is actually copied. + + :param obj: Any python object. + :returns: A deep copy of ``obj`` with all :class:`torch.Tensor` s detached. + """ + memo = _DetachMemo() + return copy.deepcopy(obj, memo) + + +class _DeepToMemo(dict): + def __init__(self, to_args, to_kwargs): + super().__init__() + self._to_args = to_args + self._to_kwargs = to_kwargs + + def get(self, key, default=None): + result = super().get(key, default) + if result is default: + # Assume key is the id of another object, and look up that object. + old = ctypes.cast(key, ctypes.py_object).value + if isinstance(old, torch.Tensor): + self[key] = result = old.to(*self._to_args, **self._to_kwargs) + elif isinstance(old, torch.nn.Module): + old.to(*self._to_args, **self._to_kwargs) + return result + + +def deep_to(obj, *args, **kwargs): + r""" + Create a deep copy of an arbitrary Python object, calling ``.to(*args, + **kwargs)`` on all :class:`torch.Tensor` s and :class:`torch.nn.Module` s + in that object. + + Like :meth:`torch.Tensor.to` but unlike :meth:`torch.nn.Module.to`, this + creates new objects. For compatibility with existing PyTorch module + behavior, this first calls :meth:`torch.nn.Module.to` in-place, then + creates a deep copy of the module. + + :param obj: Any python object. + :param \*args: + :param \*\*kwargs: See :meth:`torch.Tensor.to`. + :returns: A deep copy of ``obj`` with all :class:`torch.Tensor` s and + :class:`torch.nn.Module` s mapped. + """ + memo = _DeepToMemo(args, kwargs) + return copy.deepcopy(obj, memo) + + +# Import a lazy jit.script decorator only if available. +torch_jit_script_if_tracing = getattr( + torch.jit, + "script_if_tracing", + getattr(torch.jit, "_script_if_tracing", torch.jit.script), +) + + +def is_identically_zero(x): + """ + Check if argument is exactly the number zero. True for the number zero; + false for other numbers; false for :class:`~torch.Tensor`s. + """ + if isinstance(x, numbers.Number): + return x == 0 + if not torch._C._get_tracing_state(): + if isinstance(x, torch.Tensor) and x.dtype == torch.int64 and not x.shape: + return x.item() == 0 + return False + + +def is_identically_one(x): + """ + Check if argument is exactly the number one. True for the number one; + false for other numbers; false for :class:`~torch.Tensor`s. + """ + if isinstance(x, numbers.Number): + return x == 1 + if not torch._C._get_tracing_state(): + if isinstance(x, torch.Tensor) and x.dtype == torch.int64 and not x.shape: + return x.item() == 1 + return False + + +def broadcast_shape(*shapes, **kwargs): + """ + Similar to ``np.broadcast()`` but for shapes. + Equivalent to ``np.broadcast(*map(np.empty, shapes)).shape``. + + :param tuple shapes: shapes of tensors. + :param bool strict: whether to use extend-but-not-resize broadcasting. + :returns: broadcasted shape + :rtype: tuple + :raises: ValueError + """ + strict = kwargs.pop("strict", False) + reversed_shape = [] + for shape in shapes: + for i, size in enumerate(reversed(shape)): + if i >= len(reversed_shape): + reversed_shape.append(size) + elif reversed_shape[i] == 1 and not strict: + reversed_shape[i] = size + elif reversed_shape[i] != size and (size != 1 or strict): + raise ValueError( + "shape mismatch: objects cannot be broadcast to a single shape: {}".format( + " vs ".join(map(str, shapes)) + ) + ) + return tuple(reversed(reversed_shape)) + + +def gather(value, index, dim): + """ + Broadcasted gather of indexed values along a named dim. + """ + value, index = broadcast_all(value, index) + with ignore_jit_warnings(): + zero = torch.zeros(1, dtype=torch.long, device=index.device) + index = index.index_select(dim, zero) + return value.gather(dim, index) + + +def sum_rightmost(value, dim): + """ + Sum out ``dim`` many rightmost dimensions of a given tensor. + + If ``dim`` is 0, no dimensions are summed out. + If ``dim`` is ``float('inf')``, then all dimensions are summed out. + If ``dim`` is 1, the rightmost 1 dimension is summed out. + If ``dim`` is 2, the rightmost two dimensions are summed out. + If ``dim`` is -1, all but the leftmost 1 dimension is summed out. + If ``dim`` is -2, all but the leftmost 2 dimensions are summed out. + etc. + + :param torch.Tensor value: A tensor of ``.dim()`` at least ``dim``. + :param int dim: The number of rightmost dims to sum out. + """ + if isinstance(value, numbers.Number): + return value + if dim < 0: + dim += value.dim() + if dim == 0: + return value + if dim >= value.dim(): + return value.sum() + return value.reshape(value.shape[:-dim] + (-1,)).sum(-1) + + +def sum_leftmost(value, dim): + """ + Sum out ``dim`` many leftmost dimensions of a given tensor. + + If ``dim`` is 0, no dimensions are summed out. + If ``dim`` is ``float('inf')``, then all dimensions are summed out. + If ``dim`` is 1, the leftmost 1 dimension is summed out. + If ``dim`` is 2, the leftmost two dimensions are summed out. + If ``dim`` is -1, all but the rightmost 1 dimension is summed out. + If ``dim`` is -2, all but the rightmost 2 dimensions are summed out. + etc. + + Example:: + + x = torch.ones(2, 3, 4) + assert sum_leftmost(x, 1).shape == (3, 4) + assert sum_leftmost(x, -1).shape == (4,) + + :param torch.Tensor value: A tensor + :param int dim: Specifies the number of dims to sum out + """ + if isinstance(value, numbers.Number): + return value + if dim < 0: + dim += value.dim() + if dim == 0: + return value + if dim >= value.dim(): + return value.sum() + return value.reshape(-1, *value.shape[dim:]).sum(0) + + +def scale_and_mask(tensor, scale=1.0, mask=None): + """ + Scale and mask a tensor, broadcasting and avoiding unnecessary ops. + + :param tensor: an input tensor or zero + :type tensor: torch.Tensor or the number zero + :param scale: a positive scale + :type scale: torch.Tensor or number + :param mask: an optional masking tensor + :type mask: torch.BoolTensor, bool, or None + """ + if is_identically_zero(tensor) or (mask is None and is_identically_one(scale)): + return tensor + if mask is None or mask is True: + return tensor * scale + if mask is False: + return torch.zeros_like(tensor) + return torch.where(mask, tensor * scale, tensor.new_zeros(())) + + +def scalar_like(prototype, fill_value): + return torch.tensor(fill_value, dtype=prototype.dtype, device=prototype.device) + + +# work around lack of jit support for torch.eye(..., out=value) +def eye_like(value, m, n=None): + if n is None: + n = m + eye = torch.zeros(m, n, dtype=value.dtype, device=value.device) + eye.view(-1)[: min(m, n) * n : n + 1] = 1 + return eye + + +def enable_validation(is_validate): + global _VALIDATION_ENABLED + _VALIDATION_ENABLED = is_validate + torch_dist.Distribution.set_default_validate_args(is_validate) + + +def is_validation_enabled(): + return _VALIDATION_ENABLED + + +@contextmanager +def validation_enabled(is_validate=True): + distribution_validation_status = is_validation_enabled() + try: + enable_validation(is_validate) + yield + finally: + enable_validation(distribution_validation_status) diff --git a/pyro/source/pyro/distributions/von_mises_3d.py b/pyro/source/pyro/distributions/von_mises_3d.py new file mode 100644 index 0000000000000000000000000000000000000000..d6950807417e881362a43fe3a3801dd8a11d0c4b --- /dev/null +++ b/pyro/source/pyro/distributions/von_mises_3d.py @@ -0,0 +1,66 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import torch + +from . import constraints +from .torch_distribution import TorchDistribution + + +class VonMises3D(TorchDistribution): + """ + Spherical von Mises distribution. + + This implementation combines the direction parameter and concentration + parameter into a single combined parameter that contains both direction and + magnitude. The ``value`` arg is represented in cartesian coordinates: it + must be a normalized 3-vector that lies on the 2-sphere. + + See :class:`~pyro.distributions.VonMises` for a 2D polar coordinate cousin + of this distribution. See :class:`~pyro.distributions.projected_normal` for + a qualitatively similar distribution but implementing more functionality. + + Currently only :meth:`log_prob` is implemented. + + :param torch.Tensor concentration: A combined location-and-concentration + vector. The direction of this vector is the location, and its + magnitude is the concentration. + """ + + arg_constraints = {"concentration": constraints.real} + support = constraints.sphere + + def __init__(self, concentration, validate_args=None): + if concentration.dim() < 1 or concentration.shape[-1] != 3: + raise ValueError( + "Expected concentration to have rightmost dim 3, actual shape = {}".format( + concentration.shape + ) + ) + self.concentration = concentration + batch_shape, event_shape = concentration.shape[:-1], concentration.shape[-1:] + super().__init__(batch_shape, event_shape, validate_args=validate_args) + + def log_prob(self, value): + if self._validate_args: + if value.dim() < 1 or value.shape[-1] != 3: + raise ValueError( + "Expected value to have rightmost dim 3, actual shape = {}".format( + value.shape + ) + ) + if not (torch.abs(value.norm(2, -1) - 1) < 1e-6).all(): + raise ValueError("direction vectors are not normalized") + scale = self.concentration.norm(2, -1) + log_normalizer = scale.log() - scale.sinh().log() - math.log(4 * math.pi) + return (self.concentration * value).sum(-1) + log_normalizer + + def expand(self, batch_shape): + try: + return super().expand(batch_shape) + except NotImplementedError: + validate_args = self.__dict__.get("_validate_args") + concentration = self.concentration.expand(torch.Size(batch_shape) + (3,)) + return type(self)(concentration, validate_args=validate_args) diff --git a/pyro/source/pyro/distributions/zero_inflated.py b/pyro/source/pyro/distributions/zero_inflated.py new file mode 100644 index 0000000000000000000000000000000000000000..7f017f842934cfdb71ef40df9d49ba8474869e53 --- /dev/null +++ b/pyro/source/pyro/distributions/zero_inflated.py @@ -0,0 +1,203 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions import constraints +from torch.distributions.utils import ( + broadcast_all, + lazy_property, + logits_to_probs, + probs_to_logits, +) +from torch.nn.functional import softplus + +from pyro.distributions import NegativeBinomial, Poisson, TorchDistribution +from pyro.distributions.util import broadcast_shape + + +class ZeroInflatedDistribution(TorchDistribution): + """ + Generic Zero Inflated distribution. + + This can be used directly or can be used as a base class as e.g. for + :class:`ZeroInflatedPoisson` and :class:`ZeroInflatedNegativeBinomial`. + + :param TorchDistribution base_dist: the base distribution. + :param torch.Tensor gate: probability of extra zeros given via a Bernoulli distribution. + :param torch.Tensor gate_logits: logits of extra zeros given via a Bernoulli distribution. + """ + + arg_constraints = { + "gate": constraints.unit_interval, + "gate_logits": constraints.real, + } + + def __init__(self, base_dist, *, gate=None, gate_logits=None, validate_args=None): + if (gate is None) == (gate_logits is None): + raise ValueError( + "Either `gate` or `gate_logits` must be specified, but not both." + ) + if gate is not None: + batch_shape = broadcast_shape(gate.shape, base_dist.batch_shape) + self.gate = gate.expand(batch_shape) + else: + batch_shape = broadcast_shape(gate_logits.shape, base_dist.batch_shape) + self.gate_logits = gate_logits.expand(batch_shape) + if base_dist.event_shape: + raise ValueError( + "ZeroInflatedDistribution expected empty " + "base_dist.event_shape but got {}".format(base_dist.event_shape) + ) + + self.base_dist = base_dist.expand(batch_shape) + event_shape = torch.Size() + + super().__init__(batch_shape, event_shape, validate_args) + + @constraints.dependent_property + def support(self): + return self.base_dist.support + + @lazy_property + def gate(self): + return logits_to_probs(self.gate_logits, is_binary=True) + + @lazy_property + def gate_logits(self): + return probs_to_logits(self.gate, is_binary=True) + + def log_prob(self, value): + if self._validate_args: + self._validate_sample(value) + + if "gate" in self.__dict__: + gate, value = broadcast_all(self.gate, value) + log_prob = (-gate).log1p() + self.base_dist.log_prob(value) + log_prob = torch.where(value == 0, (gate + log_prob.exp()).log(), log_prob) + else: + gate_logits, value = broadcast_all(self.gate_logits, value) + log_prob_minus_log_gate = -gate_logits + self.base_dist.log_prob(value) + log_gate = -softplus(-gate_logits) + log_prob = log_prob_minus_log_gate + log_gate + zero_log_prob = softplus(log_prob_minus_log_gate) + log_gate + log_prob = torch.where(value == 0, zero_log_prob, log_prob) + return log_prob + + def sample(self, sample_shape=torch.Size()): + shape = self._extended_shape(sample_shape) + with torch.no_grad(): + mask = torch.bernoulli(self.gate.expand(shape)).bool() + samples = self.base_dist.expand(shape).sample() + samples = torch.where(mask, samples.new_zeros(()), samples) + return samples + + @lazy_property + def mean(self): + return (1 - self.gate) * self.base_dist.mean + + @lazy_property + def variance(self): + return (1 - self.gate) * ( + self.base_dist.mean**2 + self.base_dist.variance + ) - (self.mean) ** 2 + + def expand(self, batch_shape, _instance=None): + new = self._get_checked_instance(type(self), _instance) + batch_shape = torch.Size(batch_shape) + gate = self.gate.expand(batch_shape) if "gate" in self.__dict__ else None + gate_logits = ( + self.gate_logits.expand(batch_shape) + if "gate_logits" in self.__dict__ + else None + ) + base_dist = self.base_dist.expand(batch_shape) + ZeroInflatedDistribution.__init__( + new, base_dist, gate=gate, gate_logits=gate_logits, validate_args=False + ) + new._validate_args = self._validate_args + return new + + +class ZeroInflatedPoisson(ZeroInflatedDistribution): + """ + A Zero Inflated Poisson distribution. + + :param torch.Tensor rate: rate of poisson distribution. + :param torch.Tensor gate: probability of extra zeros. + :param torch.Tensor gate_logits: logits of extra zeros. + """ + + arg_constraints = { + "rate": constraints.positive, + "gate": constraints.unit_interval, + "gate_logits": constraints.real, + } + support = constraints.nonnegative_integer + + def __init__(self, rate, *, gate=None, gate_logits=None, validate_args=None): + base_dist = Poisson(rate=rate, validate_args=False) + base_dist._validate_args = validate_args + + super().__init__( + base_dist, gate=gate, gate_logits=gate_logits, validate_args=validate_args + ) + + @property + def rate(self): + return self.base_dist.rate + + +class ZeroInflatedNegativeBinomial(ZeroInflatedDistribution): + """ + A Zero Inflated Negative Binomial distribution. + + :param total_count: non-negative number of negative Bernoulli trials. + :type total_count: float or torch.Tensor + :param torch.Tensor probs: Event probabilities of success in the half open interval [0, 1). + :param torch.Tensor logits: Event log-odds for probabilities of success. + :param torch.Tensor gate: probability of extra zeros. + :param torch.Tensor gate_logits: logits of extra zeros. + """ + + arg_constraints = { + "total_count": constraints.greater_than_eq(0), + "probs": constraints.half_open_interval(0.0, 1.0), + "logits": constraints.real, + "gate": constraints.unit_interval, + "gate_logits": constraints.real, + } + support = constraints.nonnegative_integer + + def __init__( + self, + total_count, + *, + probs=None, + logits=None, + gate=None, + gate_logits=None, + validate_args=None + ): + base_dist = NegativeBinomial( + total_count=total_count, + probs=probs, + logits=logits, + validate_args=False, + ) + base_dist._validate_args = validate_args + + super().__init__( + base_dist, gate=gate, gate_logits=gate_logits, validate_args=validate_args + ) + + @property + def total_count(self): + return self.base_dist.total_count + + @property + def probs(self): + return self.base_dist.probs + + @property + def logits(self): + return self.base_dist.logits diff --git a/pyro/source/pyro/generic.py b/pyro/source/pyro/generic.py new file mode 100644 index 0000000000000000000000000000000000000000..928b718827af69c1a8282749508fe9b5c989e990 --- /dev/null +++ b/pyro/source/pyro/generic.py @@ -0,0 +1,9 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import warnings + +from pyroapi import * # noqa F401 +from pyroapi import __all__ # noqa F401 + +warnings.warn("pyro.generic has moved to the pyroapi package", DeprecationWarning) diff --git a/pyro/source/pyro/infer/__init__.py b/pyro/source/pyro/infer/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3a6a37ce5b1b98b719b55e53166387c81300ad4c --- /dev/null +++ b/pyro/source/pyro/infer/__init__.py @@ -0,0 +1,67 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from pyro.infer.abstract_infer import EmpiricalMarginal, TracePosterior, TracePredictive +from pyro.infer.csis import CSIS +from pyro.infer.discrete import infer_discrete +from pyro.infer.elbo import ELBO +from pyro.infer.energy_distance import EnergyDistance +from pyro.infer.enum import config_enumerate +from pyro.infer.importance import Importance +from pyro.infer.mcmc.api import MCMC +from pyro.infer.mcmc.hmc import HMC +from pyro.infer.mcmc.nuts import NUTS +from pyro.infer.mcmc.rwkernel import RandomWalkKernel +from pyro.infer.predictive import MHResampler, Predictive, WeighedPredictive +from pyro.infer.renyi_elbo import RenyiELBO +from pyro.infer.rws import ReweightedWakeSleep +from pyro.infer.smcfilter import SMCFilter +from pyro.infer.svgd import SVGD, IMQSteinKernel, RBFSteinKernel +from pyro.infer.svi import SVI +from pyro.infer.trace_elbo import JitTrace_ELBO, Trace_ELBO +from pyro.infer.trace_mean_field_elbo import JitTraceMeanField_ELBO, TraceMeanField_ELBO +from pyro.infer.trace_mmd import Trace_MMD +from pyro.infer.trace_tail_adaptive_elbo import TraceTailAdaptive_ELBO +from pyro.infer.traceenum_elbo import JitTraceEnum_ELBO, TraceEnum_ELBO +from pyro.infer.tracegraph_elbo import JitTraceGraph_ELBO, TraceGraph_ELBO +from pyro.infer.tracetmc_elbo import TraceTMC_ELBO +from pyro.infer.util import enable_validation, is_validation_enabled + +__all__ = [ + "config_enumerate", + "CSIS", + "enable_validation", + "is_validation_enabled", + "ELBO", + "EmpiricalMarginal", + "EnergyDistance", + "HMC", + "Importance", + "IMQSteinKernel", + "infer_discrete", + "JitTraceEnum_ELBO", + "JitTraceGraph_ELBO", + "JitTraceMeanField_ELBO", + "JitTrace_ELBO", + "MCMC", + "MHResampler", + "NUTS", + "Predictive", + "RandomWalkKernel", + "RBFSteinKernel", + "RenyiELBO", + "ReweightedWakeSleep", + "SMCFilter", + "SVGD", + "SVI", + "TraceTMC_ELBO", + "TraceEnum_ELBO", + "TraceGraph_ELBO", + "TraceMeanField_ELBO", + "TracePosterior", + "TracePredictive", + "TraceTailAdaptive_ELBO", + "Trace_ELBO", + "Trace_MMD", + "WeighedPredictive", +] diff --git a/pyro/source/pyro/infer/abstract_infer.py b/pyro/source/pyro/infer/abstract_infer.py new file mode 100644 index 0000000000000000000000000000000000000000..2f48f168368ca312fe813f8d45ad5b76532cf39e --- /dev/null +++ b/pyro/source/pyro/infer/abstract_infer.py @@ -0,0 +1,396 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import numbers +import warnings +from abc import ABCMeta, abstractmethod +from collections import OrderedDict, defaultdict + +import torch + +import pyro.poutine as poutine +from pyro.distributions import Categorical, Empirical +from pyro.ops.stats import waic +from pyro.poutine.util import site_is_subsample + + +class EmpiricalMarginal(Empirical): + """ + Marginal distribution over a single site (or multiple, provided they have the same + shape) from the ``TracePosterior``'s model. + + .. note:: If multiple sites are specified, they must have the same tensor shape. + Samples from each site will be stacked and stored within a single tensor. See + :class:`~pyro.distributions.Empirical`. To hold the marginal distribution of sites + having different shapes, use :class:`~pyro.infer.abstract_infer.Marginals` instead. + + :param TracePosterior trace_posterior: a ``TracePosterior`` instance representing + a Monte Carlo posterior. + :param list sites: optional list of sites for which we need to generate + the marginal distribution. + """ + + def __init__(self, trace_posterior, sites=None, validate_args=None): + assert isinstance( + trace_posterior, TracePosterior + ), "trace_dist must be trace posterior distribution object" + if sites is None: + sites = "_RETURN" + self._num_chains = 1 + self._samples_buffer = defaultdict(list) + self._weights_buffer = defaultdict(list) + self._populate_traces(trace_posterior, sites) + samples, weights = self._get_samples_and_weights() + super().__init__(samples, weights, validate_args=validate_args) + + def _get_samples_and_weights(self): + """ + Appends values collected in the samples/weights buffers to their + corresponding tensors. + """ + num_chains = len(self._samples_buffer) + samples_by_chain = [] + weights_by_chain = [] + for i in range(num_chains): + samples = torch.stack(self._samples_buffer[i], dim=0) + samples_by_chain.append(samples) + weights_dtype = ( + samples.dtype if samples.dtype.is_floating_point else torch.float32 + ) + weights = torch.as_tensor( + self._weights_buffer[i], device=samples.device, dtype=weights_dtype + ) + weights_by_chain.append(weights) + if len(samples_by_chain) == 1: + return samples_by_chain[0], weights_by_chain[0] + else: + return torch.stack(samples_by_chain, dim=0), torch.stack( + weights_by_chain, dim=0 + ) + + def _add_sample(self, value, log_weight=None, chain_id=0): + """ + Adds a new data point to the sample. The values in successive calls to + ``add`` must have the same tensor shape and size. Optionally, an + importance weight can be specified via ``log_weight`` or ``weight`` + (default value of `1` is used if not specified). + + :param torch.Tensor value: tensor to add to the sample. + :param torch.Tensor log_weight: log weight (optional) corresponding + to the sample. + :param int chain_id: chain id that generated the sample (optional). + Note that if this argument is provided, ``chain_id`` must lie + in ``[0, num_chains - 1]``, and there must be equal number + of samples per chain. + """ + # Apply default weight of 1.0. + if log_weight is None: + log_weight = 0.0 + if ( + self._validate_args + and not isinstance(log_weight, numbers.Number) + and log_weight.dim() > 0 + ): + raise ValueError("``weight.dim() > 0``, but weight should be a scalar.") + + # Append to the buffer list + self._samples_buffer[chain_id].append(value) + self._weights_buffer[chain_id].append(log_weight) + self._num_chains = max(self._num_chains, chain_id + 1) + + def _populate_traces(self, trace_posterior, sites): + assert isinstance(sites, (list, str)) + for tr, log_weight, chain_id in zip( + trace_posterior.exec_traces, + trace_posterior.log_weights, + trace_posterior.chain_ids, + ): + value = ( + tr.nodes[sites]["value"] + if isinstance(sites, str) + else torch.stack([tr.nodes[site]["value"] for site in sites], 0) + ) + self._add_sample(value, log_weight=log_weight, chain_id=chain_id) + + +class Marginals: + """ + Holds the marginal distribution over one or more sites from the ``TracePosterior``'s + model. This is a convenience container class, which can be extended by ``TracePosterior`` + subclasses. e.g. for implementing diagnostics. + + :param TracePosterior trace_posterior: a TracePosterior instance representing + a Monte Carlo posterior. + :param list sites: optional list of sites for which we need to generate + the marginal distribution. + """ + + def __init__(self, trace_posterior, sites=None, validate_args=None): + assert isinstance( + trace_posterior, TracePosterior + ), "trace_dist must be trace posterior distribution object" + if sites is None: + sites = ["_RETURN"] + elif isinstance(sites, str): + sites = [sites] + else: + assert isinstance(sites, list) + self.sites = sites + self._marginals = OrderedDict() + self._diagnostics = OrderedDict() + self._trace_posterior = trace_posterior + self._populate_traces(trace_posterior, validate_args) + + def _populate_traces(self, trace_posterior, validate): + self._marginals = { + site: EmpiricalMarginal(trace_posterior, site, validate) + for site in self.sites + } + + def support(self, flatten=False): + """ + Gets support of this marginal distribution. + + :param bool flatten: A flag to decide if we want to flatten `batch_shape` + when the marginal distribution is collected from the posterior with + ``num_chains > 1``. Defaults to False. + :returns: a dict with keys are sites' names and values are sites' supports. + :rtype: :class:`OrderedDict` + """ + support = OrderedDict( + [ + (site, value.enumerate_support()) + for site, value in self._marginals.items() + ] + ) + if self._trace_posterior.num_chains > 1 and flatten: + for site, samples in support.items(): + shape = samples.size() + flattened_shape = torch.Size((shape[0] * shape[1],)) + shape[2:] + support[site] = samples.reshape(flattened_shape) + return support + + @property + def empirical(self): + """ + A dictionary of sites' names and their corresponding :class:`EmpiricalMarginal` + distribution. + + :type: :class:`OrderedDict` + """ + return self._marginals + + +class TracePosterior(object, metaclass=ABCMeta): + """ + Abstract TracePosterior object from which posterior inference algorithms inherit. + When run, collects a bag of execution traces from the approximate posterior. + This is designed to be used by other utility classes like `EmpiricalMarginal`, + that need access to the collected execution traces. + """ + + def __init__(self, num_chains=1): + self.num_chains = num_chains + self._reset() + + def _reset(self): + self.log_weights = [] + self.exec_traces = [] + self.chain_ids = [] # chain id corresponding to the sample + self._idx_by_chain = [ + [] for _ in range(self.num_chains) + ] # indexes of samples by chain id + self._categorical = None + + def marginal(self, sites=None): + """ + Generates the marginal distribution of this posterior. + + :param list sites: optional list of sites for which we need to generate + the marginal distribution. + :returns: A :class:`Marginals` class instance. + :rtype: :class:`Marginals` + """ + return Marginals(self, sites) + + @abstractmethod + def _traces(self, *args, **kwargs): + """ + Abstract method implemented by classes that inherit from `TracePosterior`. + + :return: Generator over ``(exec_trace, weight)`` or + ``(exec_trace, weight, chain_id)``. + """ + raise NotImplementedError("Inference algorithm must implement ``_traces``.") + + def __call__(self, *args, **kwargs): + # To ensure deterministic sampling in the presence of multiple chains, + # we get the index from ``idxs_by_chain`` instead of sampling from + # the marginal directly. + random_idx = self._categorical.sample().item() + chain_idx, sample_idx = ( + random_idx % self.num_chains, + random_idx // self.num_chains, + ) + sample_idx = self._idx_by_chain[chain_idx][sample_idx] + trace = self.exec_traces[sample_idx].copy() + for name in trace.observation_nodes: + trace.remove_node(name) + return trace + + def run(self, *args, **kwargs): + """ + Calls `self._traces` to populate execution traces from a stochastic + Pyro model. + + :param args: optional args taken by `self._traces`. + :param kwargs: optional keywords args taken by `self._traces`. + """ + self._reset() + with poutine.block(): + for i, vals in enumerate(self._traces(*args, **kwargs)): + if len(vals) == 2: + chain_id = 0 + tr, logit = vals + else: + tr, logit, chain_id = vals + assert chain_id < self.num_chains + self.exec_traces.append(tr) + self.log_weights.append(logit) + self.chain_ids.append(chain_id) + self._idx_by_chain[chain_id].append(i) + self._categorical = Categorical(logits=torch.tensor(self.log_weights)) + return self + + def information_criterion(self, pointwise=False): + """ + Computes information criterion of the model. Currently, returns only "Widely + Applicable/Watanabe-Akaike Information Criterion" (WAIC) and the corresponding + effective number of parameters. + + Reference: + + [1] `Practical Bayesian model evaluation using leave-one-out cross-validation and WAIC`, + Aki Vehtari, Andrew Gelman, and Jonah Gabry + + :param bool pointwise: a flag to decide if we want to get a vectorized WAIC or not. When + ``pointwise=False``, returns the sum. + :returns: a dictionary containing values of WAIC and its effective number of + parameters. + :rtype: :class:`OrderedDict` + """ + if not self.exec_traces: + return {} + obs_node = None + log_likelihoods = [] + for trace in self.exec_traces: + obs_nodes = trace.observation_nodes + if len(obs_nodes) > 1: + raise ValueError( + "Infomation criterion calculation only works for models " + "with one observation node." + ) + if obs_node is None: + obs_node = obs_nodes[0] + elif obs_node != obs_nodes[0]: + raise ValueError( + "Observation node has been changed, expected {} but got {}".format( + obs_node, obs_nodes[0] + ) + ) + + log_likelihoods.append( + trace.nodes[obs_node]["fn"].log_prob(trace.nodes[obs_node]["value"]) + ) + + ll = torch.stack(log_likelihoods, dim=0) + waic_value, p_waic = waic( + ll, torch.tensor(self.log_weights, device=ll.device), pointwise + ) + return OrderedDict([("waic", waic_value), ("p_waic", p_waic)]) + + +class TracePredictive(TracePosterior): + """ + .. warning:: + This class is deprecated and will be removed in a future release. + Use the :class:`~pyro.infer.predictive.Predictive` class instead. + + Generates and holds traces from the posterior predictive distribution, + given model execution traces from the approximate posterior. This is + achieved by constraining latent sites to randomly sampled parameter + values from the model execution traces and running the model forward + to generate traces with new response ("_RETURN") sites. + :param model: arbitrary Python callable containing Pyro primitives. + :param TracePosterior posterior: trace posterior instance holding samples from the model's approximate posterior. + :param int num_samples: number of samples to generate. + :param keep_sites: The sites which should be sampled from posterior distribution (default: all) + """ + + def __init__(self, model, posterior, num_samples, keep_sites=None): + self.model = model + self.posterior = posterior + self.num_samples = num_samples + self.keep_sites = keep_sites + super().__init__() + warnings.warn( + "The `TracePredictive` class is deprecated and will be removed " + "in a future release. Use the `pyro.infer.Predictive` class instead.", + FutureWarning, + ) + + def _traces(self, *args, **kwargs): + if not self.posterior.exec_traces: + self.posterior.run(*args, **kwargs) + data_trace = poutine.trace(self.model).get_trace(*args, **kwargs) + for _ in range(self.num_samples): + model_trace = self.posterior().copy() + self._remove_dropped_nodes(model_trace) + self._adjust_to_data(model_trace, data_trace) + resampled_trace = poutine.trace( + poutine.replay(self.model, model_trace) + ).get_trace(*args, **kwargs) + yield (resampled_trace, 0.0, 0) + + def _remove_dropped_nodes(self, trace): + if self.keep_sites is None: + return + for name, site in list(trace.nodes.items()): + if name not in self.keep_sites: + trace.remove_node(name) + continue + + def _adjust_to_data(self, trace, data_trace): + subsampled_idxs = dict() + for name, site in trace.iter_stochastic_nodes(): + # Adjust subsample sites + if site_is_subsample(site): + site["fn"] = data_trace.nodes[name]["fn"] + site["value"] = data_trace.nodes[name]["value"] + # Adjust sites under conditionally independent stacks + orig_cis_stack = site["cond_indep_stack"] + site["cond_indep_stack"] = data_trace.nodes[name]["cond_indep_stack"] + assert len(orig_cis_stack) == len(site["cond_indep_stack"]) + site["fn"] = data_trace.nodes[name]["fn"] + for ocis, cis in zip(orig_cis_stack, site["cond_indep_stack"]): + # Select random sub-indices to replay values under conditionally independent stacks. + # Otherwise, we assume there is an dependence of indexes between training data + # and prediction data. + assert ocis.name == cis.name + assert not site_is_subsample(site) + batch_dim = cis.dim - site["fn"].event_dim + subsampled_idxs[cis.name] = subsampled_idxs.get( + cis.name, + torch.randint( + 0, ocis.size, (cis.size,), device=site["value"].device + ), + ) + site["value"] = site["value"].index_select( + batch_dim, subsampled_idxs[cis.name] + ) + + def marginal(self, sites=None): + """ + Gets marginal distribution for this predictive posterior distribution. + """ + return Marginals(self, sites) diff --git a/pyro/source/pyro/infer/autoguide/__init__.py b/pyro/source/pyro/infer/autoguide/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..6d23ebadf70ffcaa87e16a3fb8d025995a4fecc5 --- /dev/null +++ b/pyro/source/pyro/infer/autoguide/__init__.py @@ -0,0 +1,66 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from pyro.infer.autoguide.effect import ( + AutoHierarchicalNormalMessenger, + AutoMessenger, + AutoNormalMessenger, + AutoRegressiveMessenger, +) +from pyro.infer.autoguide.gaussian import AutoGaussian +from pyro.infer.autoguide.guides import ( + AutoCallable, + AutoContinuous, + AutoDelta, + AutoDiagonalNormal, + AutoDiscreteParallel, + AutoGuide, + AutoGuideList, + AutoIAFNormal, + AutoLaplaceApproximation, + AutoLowRankMultivariateNormal, + AutoMultivariateNormal, + AutoNormal, + AutoNormalizingFlow, +) +from pyro.infer.autoguide.initialization import ( + init_to_feasible, + init_to_generated, + init_to_mean, + init_to_median, + init_to_sample, + init_to_uniform, + init_to_value, +) +from pyro.infer.autoguide.structured import AutoStructured +from pyro.infer.autoguide.utils import mean_field_entropy + +__all__ = [ + "AutoCallable", + "AutoContinuous", + "AutoDelta", + "AutoDiagonalNormal", + "AutoDiscreteParallel", + "AutoGaussian", + "AutoGuide", + "AutoGuideList", + "AutoIAFNormal", + "AutoLaplaceApproximation", + "AutoLowRankMultivariateNormal", + "AutoMessenger", + "AutoMultivariateNormal", + "AutoNormal", + "AutoNormalMessenger", + "AutoHierarchicalNormalMessenger", + "AutoNormalizingFlow", + "AutoRegressiveMessenger", + "AutoStructured", + "init_to_feasible", + "init_to_generated", + "init_to_mean", + "init_to_median", + "init_to_sample", + "init_to_uniform", + "init_to_value", + "mean_field_entropy", +] diff --git a/pyro/source/pyro/infer/autoguide/effect.py b/pyro/source/pyro/infer/autoguide/effect.py new file mode 100644 index 0000000000000000000000000000000000000000..b29bfdff06b6f71740d44c2a409fcc8023e7d4e3 --- /dev/null +++ b/pyro/source/pyro/infer/autoguide/effect.py @@ -0,0 +1,455 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from operator import attrgetter +from typing import Callable, Optional, Tuple, Union + +import torch +from torch.distributions import biject_to, constraints + +import pyro.distributions as dist +from pyro.distributions.distribution import Distribution +from pyro.nn.module import PyroModule, PyroParam, pyro_method +from pyro.ops.tensor_utils import periodic_repeat +from pyro.poutine.guide import GuideMessenger +from pyro.poutine.runtime import get_plates + +from .initialization import init_to_feasible, init_to_mean +from .utils import deep_setattr, helpful_support_errors + + +class AutoMessengerMeta(type(GuideMessenger), type(PyroModule)): + pass + + +class AutoMessenger(GuideMessenger, PyroModule, metaclass=AutoMessengerMeta): + """ + Base class for :class:`~pyro.poutine.guide.GuideMessenger` autoguides. + + :param callable model: A Pyro model. + :param tuple amortized_plates: A tuple of names of plates over which guide + parameters should be shared. This is useful for subsampling, where a + guide parameter can be shared across all plates. + """ + + def __init__(self, model: Callable, *, amortized_plates: Tuple[str, ...] = ()): + self.amortized_plates = amortized_plates + super().__init__(model) + + @pyro_method + def __call__(self, *args, **kwargs): + # Since this guide creates parameters lazily, we need to avoid batching + # those parameters by a particle plate, in case the first time this + # guide is called is inside a particle plate. We assume all plates + # outside the model are particle plates. + self._outer_plates = tuple(f.name for f in get_plates()) + try: + return super().__call__(*args, **kwargs) + finally: + del self._outer_plates + + def call(self, *args, **kwargs): + """ + Method that calls :meth:`forward` and returns parameter values of the + guide as a `tuple` instead of a `dict`, which is a requirement for + JIT tracing. Unlike :meth:`forward`, this method can be traced by + :func:`torch.jit.trace_module`. + + .. warning:: + This method may be removed once PyTorch JIT tracer starts accepting + `dict` as valid return types. See + `issue _`. + """ + result = self(*args, **kwargs) + return tuple(v for _, v in sorted(result.items())) + + @torch.no_grad() + def _adjust_plates(self, value: torch.Tensor, event_dim: int) -> torch.Tensor: + """ + Adjusts plates for generating initial values of parameters. + """ + for f in get_plates(): + full_size = f.full_size or f.size + dim = f.dim - event_dim + if f in self._outer_plates or f.name in self.amortized_plates: + if -value.dim() <= dim: + value = value.mean(dim, keepdim=True) + elif f.size != full_size: + value = periodic_repeat(value, full_size, dim).contiguous() + for dim in range(value.dim() - event_dim): + value = value.squeeze(0) + return value + + +class AutoNormalMessenger(AutoMessenger): + """ + :class:`AutoMessenger` with mean-field normal posterior. + + The mean-field posterior at any site is a transformed normal distribution. + This posterior is equivalent to :class:`~pyro.infer.autoguide.AutoNormal` + or :class:`~pyro.infer.autoguide.AutoDiagonalNormal`, but allows + customization via subclassing. + + Derived classes may override the :meth:`get_posterior` behavior at + particular sites and use the mean-field normal behavior simply as a + default, e.g.:: + + def model(data): + a = pyro.sample("a", dist.Normal(0, 1)) + b = pyro.sample("b", dist.Normal(0, 1)) + c = pyro.sample("c", dist.Normal(a + b, 1)) + pyro.sample("obs", dist.Normal(c, 1), obs=data) + + class MyGuideMessenger(AutoNormalMessenger): + def get_posterior(self, name, prior): + if name == "c": + # Use a custom distribution at site c. + bias = pyro.param("c_bias", lambda: torch.zeros(())) + weight = pyro.param("c_weight", lambda: torch.ones(()), + constraint=constraints.positive) + scale = pyro.param("c_scale", lambda: torch.ones(()), + constraint=constraints.positive) + a = self.upstream_value("a") + b = self.upstream_value("b") + loc = bias + weight * (a + b) + return dist.Normal(loc, scale) + # Fall back to mean field. + return super().get_posterior(name, prior) + + Note that above we manually computed ``loc = bias + weight * (a + b)``. + Alternatively we could reuse the model-side computation by setting ``loc = + bias + weight * prior.loc``:: + + class MyGuideMessenger_v2(AutoNormalMessenger): + def get_posterior(self, name, prior): + if name == "c": + # Use a custom distribution at site c. + bias = pyro.param("c_bias", lambda: torch.zeros(())) + scale = pyro.param("c_scale", lambda: torch.ones(()), + constraint=constraints.positive) + weight = pyro.param("c_weight", lambda: torch.ones(()), + constraint=constraints.positive) + loc = bias + weight * prior.loc + return dist.Normal(loc, scale) + # Fall back to mean field. + return super().get_posterior(name, prior) + + :param callable model: A Pyro model. + :param callable init_loc_fn: A per-site initialization function. + See :ref:`autoguide-initialization` section for available functions. + :param float init_scale: Initial scale for the standard deviation of each + (unconstrained transformed) latent variable. + :param tuple amortized_plates: A tuple of names of plates over which guide + parameters should be shared. This is useful for subsampling, where a + guide parameter can be shared across all plates. + """ + + def __init__( + self, + model: Callable, + *, + init_loc_fn: Callable = init_to_mean(fallback=init_to_feasible), + init_scale: float = 0.1, + amortized_plates: Tuple[str, ...] = (), + ): + if not isinstance(init_scale, float) or not (init_scale > 0): + raise ValueError("Expected init_scale > 0. but got {}".format(init_scale)) + super().__init__(model, amortized_plates=amortized_plates) + self.init_loc_fn = init_loc_fn + self._init_scale = init_scale + self._computing_median = False + + def get_posterior( + self, name: str, prior: Distribution + ) -> Union[Distribution, torch.Tensor]: + if self._computing_median: + return self._get_posterior_median(name, prior) + + with helpful_support_errors({"name": name, "fn": prior}): + transform = biject_to(prior.support) + loc, scale = self._get_params(name, prior) + posterior = dist.TransformedDistribution( + dist.Normal(loc, scale).to_event(transform.domain.event_dim), + transform.with_cache(), + ) + return posterior + + def _get_params(self, name: str, prior: Distribution): + try: + loc = attrgetter(name)(self.locs) + scale = attrgetter(name)(self.scales) + return loc, scale + except AttributeError: + pass + + # Initialize. + with torch.no_grad(): + transform = biject_to(prior.support) + event_dim = transform.domain.event_dim + constrained = self.init_loc_fn({"name": name, "fn": prior}).detach() + unconstrained = transform.inv(constrained) + init_loc = self._adjust_plates(unconstrained, event_dim) + init_scale = torch.full_like(init_loc, self._init_scale) + + deep_setattr(self, "locs." + name, PyroParam(init_loc, event_dim=event_dim)) + deep_setattr( + self, + "scales." + name, + PyroParam(init_scale, constraint=constraints.positive, event_dim=event_dim), + ) + return self._get_params(name, prior) + + def median(self, *args, **kwargs): + self._computing_median = True + try: + return self(*args, **kwargs) + finally: + self._computing_median = False + + def _get_posterior_median(self, name, prior): + transform = biject_to(prior.support) + loc, scale = self._get_params(name, prior) + return transform(loc) + + +class AutoHierarchicalNormalMessenger(AutoNormalMessenger): + """ + :class:`AutoMessenger` with mean-field normal posterior conditional on all dependencies. + + The mean-field posterior at any site is a transformed normal distribution, + the mean of which depends on the value of that site given its dependencies in the model:: + + loc_total = loc + transform.inv(prior.mean) * weight + + Where the value of ``prior.mean`` is conditional on upstream sites in the model, + ``loc`` is independent component of the mean in the untransformed space, + ``weight`` is element-wise factor that scales the prior mean. + This approach doesn't work for distributions that don't have the mean. + + Derived classes may override particular sites and use this simply as a + default, see :class:`AutoNormalMessenger` documentation for example. + + :param callable model: A Pyro model. + :param callable init_loc_fn: A per-site initialization function. + See :ref:`autoguide-initialization` section for available functions. + :param float init_scale: Initial scale for the standard deviation of each + (unconstrained transformed) latent variable. + :param float init_weight: Initial value for the weight of the contribution + of hierarchical sites to posterior mean for each latent variable. + :param list hierarchical_sites: List of latent variables (model sites) + that have hierarchical dependencies. + If None, all sites are assumed to have hierarchical dependencies. If None, for the sites + that don't have upstream sites, the loc and weight of the guide + are representing/learning deviation from the prior. + """ + + # 'element-wise' or 'scalar' + weight_type = "element-wise" + + def __init__( + self, + model: Callable, + *, + init_loc_fn: Callable = init_to_mean(fallback=init_to_feasible), + init_scale: float = 0.1, + amortized_plates: Tuple[str, ...] = (), + init_weight: float = 1.0, + hierarchical_sites: Optional[list] = None, + ): + if not isinstance(init_scale, float) or not (init_scale > 0): + raise ValueError("Expected init_scale > 0. but got {}".format(init_scale)) + super().__init__(model, amortized_plates=amortized_plates) + self.init_loc_fn = init_loc_fn + self._init_scale = init_scale + self._init_weight = init_weight + self._hierarchical_sites = hierarchical_sites + self._computing_median = False + + def get_posterior( + self, name: str, prior: Distribution + ) -> Union[Distribution, torch.Tensor]: + if self._computing_median: + return self._get_posterior_median(name, prior) + + with helpful_support_errors({"name": name, "fn": prior}): + transform = biject_to(prior.support) + if (self._hierarchical_sites is None) or (name in self._hierarchical_sites): + # If hierarchical_sites not specified all sites are assumed to be hierarchical + loc, scale, weight = self._get_params(name, prior) + loc = loc + transform.inv(prior.mean) * weight + posterior = dist.TransformedDistribution( + dist.Normal(loc, scale).to_event(transform.domain.event_dim), + transform.with_cache(), + ) + return posterior + else: + # Fall back to mean field when hierarchical_sites list is not empty and site not in the list. + return super().get_posterior(name, prior) + + def _get_params(self, name: str, prior: Distribution): + try: + loc = attrgetter(name)(self.locs) + scale = attrgetter(name)(self.scales) + if (self._hierarchical_sites is None) or (name in self._hierarchical_sites): + weight = attrgetter(name)(self.weights) + return loc, scale, weight + else: + return loc, scale + except AttributeError: + pass + + # Initialize. + with torch.no_grad(): + transform = biject_to(prior.support) + event_dim = transform.domain.event_dim + constrained = self.init_loc_fn({"name": name, "fn": prior}).detach() + unconstrained = transform.inv(constrained) + init_loc = self._adjust_plates(unconstrained, event_dim) + init_scale = torch.full_like(init_loc, self._init_scale) + if self.weight_type == "scalar": + # weight is a single value parameter + init_weight = torch.full((), self._init_weight) + if self.weight_type == "element-wise": + # weight is element-wise + init_weight = torch.full_like(init_loc, self._init_weight) + # if site is hierarchical substract contribution of dependencies from init_loc + if (self._hierarchical_sites is None) or (name in self._hierarchical_sites): + init_prior_mean = transform.inv(prior.mean) + init_prior_mean = self._adjust_plates(init_prior_mean, event_dim) + init_loc = init_loc - init_weight * init_prior_mean + + deep_setattr(self, "locs." + name, PyroParam(init_loc, event_dim=event_dim)) + deep_setattr( + self, + "scales." + name, + PyroParam(init_scale, constraint=constraints.positive, event_dim=event_dim), + ) + if (self._hierarchical_sites is None) or (name in self._hierarchical_sites): + if self.weight_type == "scalar": + # weight is a single value parameter + deep_setattr( + self, + "weights." + name, + PyroParam(init_weight, constraint=constraints.positive), + ) + if self.weight_type == "element-wise": + # weight is element-wise + deep_setattr( + self, + "weights." + name, + PyroParam( + init_weight, + constraint=constraints.positive, + event_dim=event_dim, + ), + ) + return self._get_params(name, prior) + + def median(self, *args, **kwargs): + self._computing_median = True + try: + return self(*args, **kwargs) + finally: + self._computing_median = False + + def _get_posterior_median(self, name, prior): + transform = biject_to(prior.support) + if (self._hierarchical_sites is None) or (name in self._hierarchical_sites): + loc, scale, weight = self._get_params(name, prior) + loc = loc + transform.inv(prior.mean) * weight + else: + loc, scale = self._get_params(name, prior) + return transform(loc) + + +class AutoRegressiveMessenger(AutoMessenger): + """ + :class:`AutoMessenger` with recursively affine-transformed priors using + prior dependency structure. + + The posterior at any site is a learned affine transform of the prior, + conditioned on upstream posterior samples. The affine transform operates in + unconstrained space. This supports only continuous latent variables. + + Derived classes may override the :meth:`get_posterior` behavior at + particular sites and use the regressive behavior simply as a default, + e.g.:: + + class MyGuideMessenger(AutoRegressiveMessenger): + def get_posterior(self, name, prior): + if name == "x": + # Use a custom distribution at site x. + loc = pyro.param("x_loc", lambda: torch.zeros(prior.shape())) + scale = pyro.param("x_scale", lambda: torch.ones(prior.shape())), + constraint=constraints.positive + return dist.Normal(loc, scale).to_event(prior.event_dim()) + # Fall back to autoregressive. + return super().get_posterior(name, prior) + + .. warning:: This guide currently does not support jit-based elbos. + + :param callable model: A Pyro model. + :param callable init_loc_fn: A per-site initialization function. + See :ref:`autoguide-initialization` section for available functions. + :param float init_scale: Initial scale for the standard deviation of each + (unconstrained transformed) latent variable. + :param tuple amortized_plates: A tuple of names of plates over which guide + parameters should be shared. This is useful for subsampling, where a + guide parameter can be shared across all plates. + """ + + def __init__( + self, + model: Callable, + *, + init_loc_fn: Callable = init_to_mean(fallback=init_to_feasible), + init_scale: float = 0.1, + amortized_plates: Tuple[str, ...] = (), + ): + if not isinstance(init_scale, float) or not (init_scale > 0): + raise ValueError("Expected init_scale > 0. but got {}".format(init_scale)) + super().__init__(model, amortized_plates=amortized_plates) + self.init_loc_fn = init_loc_fn + self._init_scale = init_scale + + def get_posterior( + self, name: str, prior: Distribution + ) -> Union[Distribution, torch.Tensor]: + with helpful_support_errors({"name": name, "fn": prior}): + transform = biject_to(prior.support) + loc, scale = self._get_params(name, prior) + affine = dist.transforms.AffineTransform( + loc, scale, event_dim=transform.domain.event_dim, cache_size=1 + ) + posterior = dist.TransformedDistribution( + prior, [transform.inv.with_cache(), affine, transform.with_cache()] + ) + return posterior + + def _get_params(self, name: str, prior: Distribution): + try: + loc = attrgetter(name)(self.locs) + scale = attrgetter(name)(self.scales) + return loc, scale + except AttributeError: + pass + + # Initialize. + with torch.no_grad(): + transform = biject_to(prior.support) + event_dim = transform.domain.event_dim + constrained = self.init_loc_fn({"name": name, "fn": prior}).detach() + unconstrained = transform.inv(constrained) + # Initialize the distribution to be an affine combination: + # init_scale * prior + (1 - init_scale) * init_loc + init_loc = self._adjust_plates(unconstrained, event_dim) + init_loc = init_loc * (1 - self._init_scale) + init_scale = torch.full_like(init_loc, self._init_scale) + + deep_setattr(self, "locs." + name, PyroParam(init_loc, event_dim=event_dim)) + deep_setattr( + self, + "scales." + name, + PyroParam(init_scale, constraint=constraints.positive, event_dim=event_dim), + ) + return self._get_params(name, prior) diff --git a/pyro/source/pyro/infer/autoguide/gaussian.py b/pyro/source/pyro/infer/autoguide/gaussian.py new file mode 100644 index 0000000000000000000000000000000000000000..a7ca708a593b1a6c12c5fa6a3ee4faebe3d9861e --- /dev/null +++ b/pyro/source/pyro/infer/autoguide/gaussian.py @@ -0,0 +1,630 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import itertools +from abc import ABCMeta, abstractmethod +from collections import OrderedDict, defaultdict +from contextlib import ExitStack +from operator import attrgetter +from types import SimpleNamespace +from typing import Callable, Dict, Optional, Set, Tuple, Union + +import torch +from torch.distributions import biject_to + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.distributions import constraints +from pyro.infer.inspect import get_dependencies, is_sample_site +from pyro.nn.module import PyroModule, PyroParam +from pyro.ops.linalg import ignore_torch_deprecation_warnings +from pyro.poutine.runtime import am_i_wrapped, get_plates +from pyro.poutine.util import site_is_subsample + +from .guides import AutoGuide +from .initialization import InitMessenger, init_to_feasible +from .utils import deep_setattr, helpful_support_errors + + +# Helper to dispatch to concrete subclasses of AutoGaussian, e.g. +# AutoGaussian(model, backend="dense") +# is converted to +# AutoGaussianDense(model) +# The intent is to avoid proliferation of subclasses and docstrings, +# and provide a single interface AutoGaussian(...). +class AutoGaussianMeta(type(AutoGuide), ABCMeta): + backends = {} + default_backend = "dense" + + def __init__(cls, *args, **kwargs): + super().__init__(*args, **kwargs) + assert cls.__name__.startswith("AutoGaussian") + key = cls.__name__.replace("AutoGaussian", "").lower() + cls.backends[key] = cls + + def __call__(cls, *args, **kwargs): + if cls is AutoGaussian: + backend = kwargs.pop("backend", cls.default_backend) + cls = cls.backends[backend] + return super(AutoGaussianMeta, cls).__call__(*args, **kwargs) + + +class AutoGaussian(AutoGuide, metaclass=AutoGaussianMeta): + """ + Gaussian guide with optimal conditional independence structure. + + This is equivalent to a full rank :class:`AutoMultivariateNormal` guide, + but with a sparse precision matrix determined by dependencies and plates in + the model [1]. Depending on model structure, this can have asymptotically + better statistical efficiency than :class:`AutoMultivariateNormal` . + + This guide implements multiple backends for computation. All backends use + the same statistically optimal parametrization. The default "dense" backend + has computational complexity similar to :class:`AutoMultivariateNormal` . + The experimental "funsor" backend can be asymptotically cheaper in terms of + time and space (using Gaussian tensor variable elimination [2,3]), but + incurs large constant overhead. The "funsor" backend requires `funsor + `_ which can be installed via ``pip install + pyro-ppl[funsor]``. + + The guide currently does not depend on the model's ``*args, **kwargs``. + + Example:: + + guide = AutoGaussian(model) + svi = SVI(model, guide, ...) + + Example using experimental funsor backend:: + + !pip install pyro-ppl[funsor] + guide = AutoGaussian(model, backend="funsor") + svi = SVI(model, guide, ...) + + **References** + + [1] S.Webb, A.Goliński, R.Zinkov, N.Siddharth, T.Rainforth, Y.W.Teh, F.Wood (2018) + "Faithful inversion of generative models for effective amortized inference" + https://dl.acm.org/doi/10.5555/3327144.3327229 + [2] F.Obermeyer, E.Bingham, M.Jankowiak, J.Chiu, N.Pradhan, A.M.Rush, N.Goodman + (2019) + "Tensor Variable Elimination for Plated Factor Graphs" + http://proceedings.mlr.press/v97/obermeyer19a/obermeyer19a.pdf + [3] F. Obermeyer, E. Bingham, M. Jankowiak, D. Phan, J. P. Chen + (2019) + "Functional Tensors for Probabilistic Programming" + https://arxiv.org/abs/1910.10775 + + :param callable model: A Pyro model. + :param callable init_loc_fn: A per-site initialization function. + See :ref:`autoguide-initialization` section for available functions. + :param float init_scale: Initial scale for the standard deviation of each + (unconstrained transformed) latent variable. + :param str backend: Back end for performing Gaussian tensor variable + elimination. Defaults to "dense"; other options include "funsor". + """ + + scale_constraint = constraints.softplus_positive + + def __init__( + self, + model: Callable, + *, + init_loc_fn: Callable = init_to_feasible, + init_scale: float = 0.1, + backend: Optional[str] = None, # used only by metaclass + ): + if not isinstance(init_scale, float) or not (init_scale > 0): + raise ValueError(f"Expected init_scale > 0. but got {init_scale}") + self._init_scale = init_scale + self._original_model = (model,) + model = InitMessenger(init_loc_fn)(model) + super().__init__(model) + + @staticmethod + def _prototype_hide_fn(msg): + # In contrast to the AutoGuide base class, this includes observation + # sites and excludes deterministic sites. + return not is_sample_site(msg) + + def _setup_prototype(self, *args, **kwargs) -> None: + super()._setup_prototype(*args, **kwargs) + + self.locs = PyroModule() + self.scales = PyroModule() + self.white_vecs = PyroModule() + self.prec_sqrts = PyroModule() + self._factors = OrderedDict() + self._plates = OrderedDict() + self._event_numel = OrderedDict() + self._unconstrained_event_shapes = OrderedDict() + + # Trace model dependencies. + model = self._original_model[0] + self._original_model = None + self.dependencies = poutine.block(get_dependencies)(model, args, kwargs)[ + "prior_dependencies" + ] + + # Eliminate observations with no upstream latents. + for d, upstreams in list(self.dependencies.items()): + if all(self.prototype_trace.nodes[u]["is_observed"] for u in upstreams): + del self.dependencies[d] + del self.prototype_trace.nodes[d] + + # Collect factors and plates. + for d, site in self.prototype_trace.nodes.items(): + # Prune non-essential parts of the trace to save memory. + pruned_site, site = site, site.copy() + pruned_site.clear() + + # Collect factors and plates. + if site["type"] != "sample" or site_is_subsample(site): + continue + assert all(f.vectorized for f in site["cond_indep_stack"]) + self._factors[d] = self._compress_site(site) + plates = frozenset(site["cond_indep_stack"]) + if site["fn"].batch_shape != _plates_to_shape(plates): + raise ValueError( + f"Shape mismatch at site '{d}'. " + "Are you missing a pyro.plate() or .to_event()?" + ) + if site["is_observed"]: + # Break irrelevant observation plates. + plates &= frozenset().union( + *(self._plates[u] for u in self.dependencies[d] if u != d) + ) + self._plates[d] = plates + + # Create location-scale parameters, one per latent variable. + if site["is_observed"]: + # This may slightly overestimate, e.g. for Multinomial. + self._event_numel[d] = site["fn"].event_shape.numel() + # Account for broken irrelevant observation plates. + for f in set(site["cond_indep_stack"]) - plates: + self._event_numel[d] *= f.size + continue + with helpful_support_errors(site): + init_loc = biject_to(site["fn"].support).inv(site["value"]).detach() + batch_shape = site["fn"].batch_shape + event_shape = init_loc.shape[len(batch_shape) :] + self._unconstrained_event_shapes[d] = event_shape + self._event_numel[d] = event_shape.numel() + event_dim = len(event_shape) + deep_setattr(self.locs, d, PyroParam(init_loc, event_dim=event_dim)) + deep_setattr( + self.scales, + d, + PyroParam( + torch.full_like(init_loc, self._init_scale), + constraint=self.scale_constraint, + event_dim=event_dim, + ), + ) + + # Create parameters for dependencies, one per factor. + for d, site in self._factors.items(): + u_size = 0 + for u in self.dependencies[d]: + if not self._factors[u]["is_observed"]: + broken_shape = _plates_to_shape(self._plates[u] - self._plates[d]) + u_size += broken_shape.numel() * self._event_numel[u] + d_size = self._event_numel[d] + if site["is_observed"]: + d_size = min(d_size, u_size) # just an optimization + batch_shape = _plates_to_shape(self._plates[d]) + + # Create parameters of each Gaussian factor. + white_vec = init_loc.new_zeros(batch_shape + (d_size,)) + # We initialize with noise to avoid singular gradient. + prec_sqrt = torch.rand( + batch_shape + (u_size, d_size), + dtype=init_loc.dtype, + device=init_loc.device, + ) + prec_sqrt.sub_(0.5).mul_(self._init_scale) + if not site["is_observed"]: + # Initialize the [d,d] block to the identity matrix. + prec_sqrt.diagonal(dim1=-2, dim2=-1).fill_(1) + deep_setattr(self.white_vecs, d, PyroParam(white_vec, event_dim=1)) + deep_setattr(self.prec_sqrts, d, PyroParam(prec_sqrt, event_dim=2)) + + @staticmethod + def _compress_site(site): + # Save memory by retaining only necessary parts of the site. + return { + "name": site["name"], + "type": site["type"], + "cond_indep_stack": site["cond_indep_stack"], + "is_observed": site["is_observed"], + "fn": SimpleNamespace( + support=site["fn"].support, + batch_shape=site["fn"].batch_shape, + event_dim=site["fn"].event_dim, + ), + } + + def forward(self, *args, **kwargs) -> Dict[str, torch.Tensor]: + if self.prototype_trace is None: + self._setup_prototype(*args, **kwargs) + + aux_values = self._sample_aux_values(temperature=1.0) + values, log_densities = self._transform_values(aux_values) + + # Replay via Pyro primitives. + plates = self._create_plates(*args, **kwargs) + for name, site in self._factors.items(): + if site["is_observed"]: + continue + with ExitStack() as stack: + for frame in site["cond_indep_stack"]: + stack.enter_context(plates[frame.name]) + values[name] = pyro.sample( + name, + dist.Delta(values[name], log_densities[name], site["fn"].event_dim), + ) + return values + + def median(self, *args, **kwargs) -> Dict[str, torch.Tensor]: + """ + Returns the posterior median value of each latent variable. + + :return: A dict mapping sample site name to median tensor. + :rtype: dict + """ + with torch.no_grad(), poutine.mask(mask=False): + aux_values = self._sample_aux_values(temperature=0.0) + values, _ = self._transform_values(aux_values) + return values + + def _transform_values( + self, + aux_values: Dict[str, torch.Tensor], + ) -> Tuple[Dict[str, torch.Tensor], Union[float, torch.Tensor]]: + # Learnably transform auxiliary values to user-facing values. + values = {} + log_densities = defaultdict(float) + compute_density = am_i_wrapped() and poutine.get_mask() is not False + for name, site in self._factors.items(): + if site["is_observed"]: + continue + loc = attrgetter(name)(self.locs) + scale = attrgetter(name)(self.scales) + unconstrained = aux_values[name] * scale + loc + + # Transform to constrained space. + transform = biject_to(site["fn"].support) + values[name] = transform(unconstrained) + if compute_density: + assert transform.codomain.event_dim == site["fn"].event_dim + log_densities[name] = transform.inv.log_abs_det_jacobian( + values[name], unconstrained + ) - scale.log().reshape(site["fn"].batch_shape + (-1,)).sum(-1) + + return values, log_densities + + @abstractmethod + def _sample_aux_values(self, *, temperature: float) -> Dict[str, torch.Tensor]: + raise NotImplementedError + + +class AutoGaussianDense(AutoGaussian): + """ + Dense implementation of :class:`AutoGaussian` . + + The following are equivalent:: + + guide = AutoGaussian(model, backend="dense") + guide = AutoGaussianDense(model) + """ + + def _setup_prototype(self, *args, **kwargs): + super()._setup_prototype(*args, **kwargs) + + # Collect global shapes and per-axis indices. + self._dense_shapes = {} + global_indices = {} + pos = 0 + for d, event_shape in self._unconstrained_event_shapes.items(): + batch_shape = self._factors[d]["fn"].batch_shape + self._dense_shapes[d] = batch_shape, event_shape + end = pos + (batch_shape + event_shape).numel() + global_indices[d] = torch.arange(pos, end).reshape(batch_shape + (-1,)) + pos = end + self._dense_size = pos + + # Create sparse -> dense precision scatter indices. + self._dense_scatter = {} + for d, site in self._factors.items(): + prec_sqrt_shape = attrgetter(d)(self.prec_sqrts).shape + info_vec_shape = prec_sqrt_shape[:-1] + precision_shape = prec_sqrt_shape[:-1] + prec_sqrt_shape[-2:-1] + index1 = torch.zeros(info_vec_shape, dtype=torch.long) + index2 = torch.zeros(precision_shape, dtype=torch.long) + + # Collect local offsets and create index1 for info_vec blockwise. + upstreams = [ + u for u in self.dependencies[d] if not self._factors[u]["is_observed"] + ] + local_offsets = {} + pos = 0 + for u in upstreams: + local_offsets[u] = pos + broken_plates = self._plates[u] - self._plates[d] + pos += self._event_numel[u] * _plates_to_shape(broken_plates).numel() + u_index = global_indices[u] + + # Permute broken plates to the right of preserved plates. + u_index = _break_plates(u_index, self._plates[u], self._plates[d]) + + # Scatter global indices into the [u] block. + u_start = local_offsets[u] + u_stop = u_start + u_index.size(-1) + index1[..., u_start:u_stop] = u_index + + # Create index2 for precision blockwise. + for u, v in itertools.product(upstreams, upstreams): + u_index = global_indices[u] + v_index = global_indices[v] + + # Permute broken plates to the right of preserved plates. + u_index = _break_plates(u_index, self._plates[u], self._plates[d]) + v_index = _break_plates(v_index, self._plates[v], self._plates[d]) + + # Scatter global indices into the [u,v] block. + u_start = local_offsets[u] + u_stop = u_start + u_index.size(-1) + v_start = local_offsets[v] + v_stop = v_start + v_index.size(-1) + index2[..., u_start:u_stop, v_start:v_stop] = ( + self._dense_size * u_index.unsqueeze(-1) + v_index.unsqueeze(-2) + ) + + self._dense_scatter[d] = index1.reshape(-1), index2.reshape(-1) + + def _sample_aux_values(self, *, temperature: float) -> Dict[str, torch.Tensor]: + mvn = self._dense_get_mvn() + if temperature == 0: + # Simply return the mode. + flat_samples = mvn.mean + elif temperature == 1: + # Sample from a dense joint Gaussian over flattened variables. + flat_samples = pyro.sample( + f"_{self._pyro_name}_latent", mvn, infer={"is_auxiliary": True} + ) + else: + raise NotImplementedError(f"Invalid temperature: {temperature}") + samples = self._dense_unflatten(flat_samples) + return samples + + def _dense_unflatten(self, flat_samples: torch.Tensor) -> Dict[str, torch.Tensor]: + # Convert a single flattened sample to a dict of shaped samples. + sample_shape = flat_samples.shape[:-1] + samples = {} + pos = 0 + for d, (batch_shape, event_shape) in self._dense_shapes.items(): + end = pos + (batch_shape + event_shape).numel() + flat_sample = flat_samples[..., pos:end] + pos = end + # Assumes sample shapes are left of batch shapes. + samples[d] = flat_sample.reshape( + torch.broadcast_shapes(sample_shape, batch_shape) + event_shape + ) + return samples + + def _dense_flatten(self, samples: Dict[str, torch.Tensor]) -> torch.Tensor: + # Convert a dict of shaped samples single flattened sample. + flat_samples = [] + for d, (batch_shape, event_shape) in self._dense_shapes.items(): + shape = samples[d].shape + sample_shape = shape[: len(shape) - len(batch_shape) - len(event_shape)] + flat_samples.append(samples[d].reshape(sample_shape + (-1,))) + return torch.cat(flat_samples, dim=-1) + + def _dense_get_mvn(self): + # Create a dense joint Gaussian over flattened variables. + flat_info_vec = torch.zeros(self._dense_size) + flat_precision = torch.zeros(self._dense_size**2) + for d, (index1, index2) in self._dense_scatter.items(): + white_vec = attrgetter(d)(self.white_vecs) + prec_sqrt = attrgetter(d)(self.prec_sqrts) + info_vec = (prec_sqrt @ white_vec[..., None])[..., 0] + precision = prec_sqrt @ prec_sqrt.transpose(-1, -2) + flat_info_vec.scatter_add_(0, index1, info_vec.reshape(-1)) + flat_precision.scatter_add_(0, index2, precision.reshape(-1)) + info_vec = flat_info_vec + precision = flat_precision.reshape(self._dense_size, self._dense_size) + scale_tril = _precision_to_scale_tril(precision) + loc = ( + scale_tril @ (scale_tril.transpose(-1, -2) @ info_vec.unsqueeze(-1)) + ).squeeze(-1) + return dist.MultivariateNormal(loc, scale_tril=scale_tril) + + +class AutoGaussianFunsor(AutoGaussian): + """ + Funsor implementation of :class:`AutoGaussian` . + + The following are equivalent:: + guide = AutoGaussian(model, backend="funsor") + guide = AutoGaussianFunsor(model) + """ + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + _import_funsor() + + def _setup_prototype(self, *args, **kwargs): + super()._setup_prototype(*args, **kwargs) + funsor = _import_funsor() + + # Check TVE condition 1: plate nesting is monotone. + for d in self._factors: + pd = {p.name for p in self._plates[d]} + for u in self.dependencies[d]: + pu = {p.name for p in self._plates[u]} + if pu <= pd: + continue # ok + raise NotImplementedError( + "Expected monotone plate nesting, but found dependency " + f"{repr(u)} -> {repr(d)} leaves plates {pu - pd}. " + "Consider splitting into multiple guides via AutoGuideList, " + "or replacing the plate in the model by .to_event()." + ) + + # Determine TVE problem shape. + factor_inputs: Dict[str, OrderedDict[str, funsor.Domain]] = {} + eliminate: Set[str] = set() + plate_to_dim: Dict[str, int] = {} + for d, site in self._factors.items(): + inputs = OrderedDict() + for f in sorted(self._plates[d], key=lambda f: f.dim): + plate_to_dim[f.name] = f.dim + inputs[f.name] = funsor.Bint[f.size] + eliminate.add(f.name) + for u in self.dependencies[d]: + if self._factors[u]["is_observed"]: + continue + inputs[u] = funsor.Reals[self._unconstrained_event_shapes[u]] + eliminate.add(u) + factor_inputs[d] = inputs + + self._funsor_factor_inputs = factor_inputs + self._funsor_eliminate = frozenset(eliminate) + self._funsor_plate_to_dim = plate_to_dim + self._funsor_plates = frozenset(plate_to_dim) + + def _sample_aux_values(self, *, temperature: float) -> Dict[str, torch.Tensor]: + funsor = _import_funsor() + + # Convert torch to funsor. + particle_plates = frozenset(get_plates()) + plate_to_dim = self._funsor_plate_to_dim.copy() + plate_to_dim.update({f.name: f.dim for f in particle_plates}) + factors = {} + for d, inputs in self._funsor_factor_inputs.items(): + batch_shape = torch.Size( + p.size for p in sorted(self._plates[d], key=lambda p: p.dim) + ) + white_vec = attrgetter(d)(self.white_vecs) + prec_sqrt = attrgetter(d)(self.prec_sqrts) + factors[d] = funsor.gaussian.Gaussian( + white_vec=white_vec.reshape(batch_shape + white_vec.shape[-1:]), + prec_sqrt=prec_sqrt.reshape(batch_shape + prec_sqrt.shape[-2:]), + inputs=inputs, + ) + + # Perform Gaussian tensor variable elimination. + if temperature == 1: + samples, log_prob = _try_possibly_intractable( + funsor.recipes.forward_filter_backward_rsample, + factors=factors, + eliminate=self._funsor_eliminate, + plates=frozenset(plate_to_dim), + sample_inputs={f.name: funsor.Bint[f.size] for f in particle_plates}, + ) + + else: + samples, log_prob = _try_possibly_intractable( + funsor.recipes.forward_filter_backward_precondition, + factors=factors, + eliminate=self._funsor_eliminate, + plates=frozenset(plate_to_dim), + ) + + # Substitute noise. + sample_shape = torch.Size(f.size for f in particle_plates) + noise = torch.randn(sample_shape + log_prob.inputs["aux"].shape) + noise.mul_(temperature) + aux = funsor.Tensor(noise)[tuple(f.name for f in particle_plates)] + with funsor.interpretations.memoize(): + samples = {k: v(aux=aux) for k, v in samples.items()} + log_prob = log_prob(aux=aux) + + # Convert funsor to torch. + if am_i_wrapped() and poutine.get_mask() is not False: + log_prob = funsor.to_data(log_prob, name_to_dim=plate_to_dim) + pyro.factor(f"_{self._pyro_name}_latent", log_prob, has_rsample=True) + samples = { + k: funsor.to_data(v, name_to_dim=plate_to_dim) for k, v in samples.items() + } + return samples + + +def _precision_to_scale_tril(P): + # Ref: https://nbviewer.jupyter.org/gist/fehiepsi/5ef8e09e61604f10607380467eb82006#Precision-to-scale_tril + Lf = torch.linalg.cholesky(torch.flip(P, (-2, -1))) + L_inv = torch.transpose(torch.flip(Lf, (-2, -1)), -2, -1) + L = torch.linalg.solve_triangular( + L_inv, torch.eye(P.shape[-1], dtype=P.dtype, device=P.device), upper=False + ) + return L + + +@ignore_torch_deprecation_warnings() +def _try_possibly_intractable(fn, *args, **kwargs): + # Convert ValueError into NotImplementedError. + try: + return fn(*args, **kwargs) + except ValueError as e: + if str(e) != "intractable!": + raise e from None + raise NotImplementedError( + "Funsor backend found intractable plate nesting. " + 'Consider using AutoGaussian(..., backend="dense"), ' + "splitting into multiple guides via AutoGuideList, or " + "replacing some plates in the model by .to_event()." + ) from e + + +def _plates_to_shape(plates): + shape = [1] * max([0] + [-f.dim for f in plates]) + for f in plates: + shape[f.dim] = f.size + return torch.Size(shape) + + +def _break_plates(x, all_plates, kept_plates): + """ + Reshapes and permutes a tensor ``x`` with event_dim=1 and batch shape given + by ``all_plates`` by breaking all plates not in ``kept_plates``. Each + broken plate is moved into the event shape, and finally the event shape is + flattend back to a single dimension. + """ + assert x.shape[:-1] == _plates_to_shape(all_plates) # event_dim == 1 + kept_plates = kept_plates & all_plates + broken_plates = all_plates - kept_plates + + if not broken_plates: + return x + + if not kept_plates: + # Empty batch shape. + return x.reshape(-1) + + batch_shape = _plates_to_shape(kept_plates) + if max(p.dim for p in kept_plates) < min(p.dim for p in broken_plates): + # No permutation is necessary. + return x.reshape(batch_shape + (-1,)) + + # We need to permute broken plates left past kept plates. + event_dims = {-1} | {p.dim - 1 for p in broken_plates} + perm = sorted(range(-x.dim(), 0), key=lambda d: (d in event_dims, d)) + return x.permute(perm).reshape(batch_shape + (-1,)) + + +def _import_funsor(): + try: + import funsor + except ImportError as e: + raise ImportError( + 'AutoGaussian(..., backend="funsor") requires funsor. ' + "Try installing via: pip install pyro-ppl[funsor]" + ) from e + funsor.set_backend("torch") + return funsor + + +__all__ = [ + "AutoGaussian", +] diff --git a/pyro/source/pyro/infer/autoguide/guides.py b/pyro/source/pyro/infer/autoguide/guides.py new file mode 100644 index 0000000000000000000000000000000000000000..40e401b561ae841e62a06243bc8a301c4ecd5caf --- /dev/null +++ b/pyro/source/pyro/infer/autoguide/guides.py @@ -0,0 +1,1287 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +The :mod:`pyro.infer.autoguide` module provides algorithms to automatically +generate guides from simple models, for use in :class:`~pyro.infer.svi.SVI`. +For example to generate a mean field Gaussian guide:: + + def model(): + ... + + guide = AutoNormal(model) # a mean field guide + svi = SVI(model, guide, Adam({'lr': 1e-3}), Trace_ELBO()) + +Automatic guides can also be combined using :func:`pyro.poutine.block` and +:class:`AutoGuideList`. +""" +import functools +import operator +import warnings +import weakref +from contextlib import ExitStack +from operator import attrgetter + +import torch +from torch import nn +from torch.distributions import biject_to + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.distributions import constraints +from pyro.distributions.transforms import affine_autoregressive, iterated +from pyro.distributions.util import eye_like, sum_rightmost +from pyro.infer.enum import config_enumerate +from pyro.nn.module import PyroModule, PyroParam +from pyro.ops.hessian import hessian +from pyro.ops.tensor_utils import periodic_repeat +from pyro.poutine.util import site_is_subsample + +from .initialization import InitMessenger, init_to_feasible, init_to_median +from .utils import _product, deep_setattr, helpful_support_errors + + +def prototype_hide_fn(msg): + # Record only stochastic sites in the prototype_trace. + return msg["type"] != "sample" or msg["is_observed"] or site_is_subsample(msg) + + +class AutoGuide(PyroModule): + """ + Base class for automatic guides. + + Derived classes must implement the :meth:`forward` method, with the + same ``*args, **kwargs`` as the base ``model``. + + Auto guides can be used individually or combined in an + :class:`AutoGuideList` object. + + :param callable model: A pyro model. + :param callable create_plates: An optional function inputing the same + ``*args,**kwargs`` as ``model()`` and returning a :class:`pyro.plate` + or iterable of plates. Plates not returned will be created + automatically as usual. This is useful for data subsampling. + """ + + def __init__(self, model, *, create_plates=None): + super().__init__(name=type(self).__name__) + self.master = None + # Do not register model as submodule + self._model = (model,) + self.create_plates = create_plates + self.prototype_trace = None + self._prototype_frames = {} + + @property + def model(self): + return self._model[0] + + def __getstate__(self): + # Do not pickle weakrefs. + self._model = None + self.master = None + return getattr(super(), "__getstate__", self.__dict__.copy)() + + def __setstate__(self, state): + getattr(super(), "__setstate__", self.__dict__.update)(state) + assert self.master is None + master_ref = weakref.ref(self) + for _, mod in self.named_modules(): + if mod is not self and isinstance(mod, AutoGuide): + mod._update_master(master_ref) + + def _update_master(self, master_ref): + self.master = master_ref + for _, mod in self.named_modules(): + if mod is not self and isinstance(mod, AutoGuide): + mod._update_master(master_ref) + + def call(self, *args, **kwargs): + """ + Method that calls :meth:`forward` and returns parameter values of the + guide as a `tuple` instead of a `dict`, which is a requirement for + JIT tracing. Unlike :meth:`forward`, this method can be traced by + :func:`torch.jit.trace_module`. + + .. warning:: + This method may be removed once PyTorch JIT tracer starts accepting + `dict` as valid return types. See + `issue _`. + """ + result = self(*args, **kwargs) + return tuple(v for _, v in sorted(result.items())) + + def sample_latent(*args, **kwargs): + """ + Samples an encoded latent given the same ``*args, **kwargs`` as the + base ``model``. + """ + pass + + def __setattr__(self, name, value): + if isinstance(value, AutoGuide): + master_ref = weakref.ref(self) if self.master is None else self.master + value._update_master(master_ref) + super().__setattr__(name, value) + + def _create_plates(self, *args, **kwargs): + if self.master is None: + if self.create_plates is None: + self.plates = {} + else: + plates = self.create_plates(*args, **kwargs) + if isinstance(plates, pyro.plate): + plates = [plates] + assert all( + isinstance(p, pyro.plate) for p in plates + ), "create_plates() returned a non-plate" + self.plates = {p.name: p for p in plates} + for name, frame in sorted(self._prototype_frames.items()): + if name not in self.plates: + full_size = frame.full_size or frame.size + self.plates[name] = pyro.plate( + name, full_size, dim=frame.dim, subsample_size=frame.size + ) + else: + assert ( + self.create_plates is None + ), "Cannot pass create_plates() to non-master guide" + self.plates = self.master().plates + return self.plates + + _prototype_hide_fn = staticmethod(prototype_hide_fn) + + def _setup_prototype(self, *args, **kwargs): + # run the model so we can inspect its structure + model = poutine.block(self.model, self._prototype_hide_fn) + self.prototype_trace = poutine.block(poutine.trace(model).get_trace)( + *args, **kwargs + ) + if self.master is not None: + self.master()._check_prototype(self.prototype_trace) + + self._prototype_frames = {} + for name, site in self.prototype_trace.iter_stochastic_nodes(): + for frame in site["cond_indep_stack"]: + if frame.vectorized: + self._prototype_frames[frame.name] = frame + else: + raise NotImplementedError( + "AutoGuide does not support sequential pyro.plate" + ) + + def median(self, *args, **kwargs): + """ + Returns the posterior median value of each latent variable. + + :return: A dict mapping sample site name to median tensor. + :rtype: dict + """ + raise NotImplementedError + + +class AutoGuideList(AutoGuide, nn.ModuleList): + """ + Container class to combine multiple automatic or custom guides. + + Example usage:: + + guide = AutoGuideList(my_model) + guide.append(AutoDiagonalNormal(poutine.block(model, hide=["assignment"]))) + guide.append(AutoDiscreteParallel(poutine.block(model, expose=["assignment"]))) + svi = SVI(model, guide, optim, Trace_ELBO()) + + :param callable model: a Pyro model + """ + + def _check_prototype(self, part_trace): + for name, part_site in part_trace.iter_stochastic_nodes(): + self_site = self.prototype_trace.nodes[name] + assert part_site["fn"].batch_shape == self_site["fn"].batch_shape + assert part_site["fn"].event_shape == self_site["fn"].event_shape + assert part_site["value"].shape == self_site["value"].shape + + def append(self, part): + """ + Add an automatic or custom guide for part of the model. The guide should + have been created by blocking the model to restrict to a subset of + sample sites. No two parts should operate on any one sample site. + + :param part: a partial guide to add + :type part: AutoGuide or callable + """ + if not isinstance(part, AutoGuide): + part = AutoCallable(self.model, part) + if part.master is not None: + raise RuntimeError( + "The module `{}` is already added.".format(self._pyro_name) + ) + setattr(self, str(len(self)), part) + + def add(self, part): + """Deprecated alias for :meth:`append`.""" + warnings.warn( + "The method `.add` has been deprecated in favor of `.append`.", + DeprecationWarning, + ) + self.append(part) + + def forward(self, *args, **kwargs): + """ + A composite guide with the same ``*args, **kwargs`` as the base ``model``. + + .. note:: This method is used internally by :class:`~torch.nn.Module`. + Users should instead use :meth:`~torch.nn.Module.__call__`. + + :return: A dict mapping sample site name to sampled value. + :rtype: dict + """ + # if we've never run the model before, do so now so we can inspect the model structure + if self.prototype_trace is None: + self._setup_prototype(*args, **kwargs) + + # create all plates + self._create_plates(*args, **kwargs) + + # run slave guides + result = {} + for part in self: + result.update(part(*args, **kwargs)) + return result + + def median(self, *args, **kwargs): + """ + Returns the posterior median value of each latent variable. + + :return: A dict mapping sample site name to median tensor. + :rtype: dict + """ + result = {} + for part in self: + result.update(part.median(*args, **kwargs)) + return result + + def quantiles(self, quantiles, *args, **kwargs): + """ + Returns the posterior quantile values of each latent variable. + + :param list quantiles: A list of requested quantiles between 0 and 1. + :returns: A dict mapping sample site name to quantiles tensor. + :rtype: dict + """ + result = {} + for part in self: + result.update(part.quantiles(quantiles, *args, **kwargs)) + return result + + +class AutoCallable(AutoGuide): + """ + :class:`AutoGuide` wrapper for simple callable guides. + + This is used internally for composing autoguides with custom user-defined + guides that are simple callables, e.g.:: + + def my_local_guide(*args, **kwargs): + ... + + guide = AutoGuideList(model) + guide.append(AutoDelta(poutine.block(model, expose=['my_global_param'])) + guide.append(my_local_guide) # automatically wrapped in an AutoCallable + + To specify a median callable, you can instead:: + + def my_local_median(*args, **kwargs) + ... + + guide.append(AutoCallable(model, my_local_guide, my_local_median)) + + For more complex guides that need e.g. access to plates, users should + instead subclass ``AutoGuide``. + + :param callable model: a Pyro model + :param callable guide: a Pyro guide (typically over only part of the model) + :param callable median: an optional callable returning a dict mapping + sample site name to computed median tensor. + """ + + def __init__(self, model, guide, median=lambda *args, **kwargs: {}): + super().__init__(model) + self._guide = guide + self.median = median + + def forward(self, *args, **kwargs): + result = self._guide(*args, **kwargs) + return {} if result is None else result + + +class AutoDelta(AutoGuide): + """ + This implementation of :class:`AutoGuide` uses Delta distributions to + construct a MAP guide over the entire latent space. The guide does not + depend on the model's ``*args, **kwargs``. + + .. note:: This class does MAP inference in constrained space. + + Usage:: + + guide = AutoDelta(model) + svi = SVI(model, guide, ...) + + Latent variables are initialized using ``init_loc_fn()``. To change the + default behavior, create a custom ``init_loc_fn()`` as described in + :ref:`autoguide-initialization` , for example:: + + def my_init_fn(site): + if site["name"] == "level": + return torch.tensor([-1., 0., 1.]) + if site["name"] == "concentration": + return torch.ones(k) + return init_to_sample(site) + + :param callable model: A Pyro model. + :param callable init_loc_fn: A per-site initialization function. + See :ref:`autoguide-initialization` section for available functions. + :param callable create_plates: An optional function inputing the same + ``*args,**kwargs`` as ``model()`` and returning a :class:`pyro.plate` + or iterable of plates. Plates not returned will be created + automatically as usual. This is useful for data subsampling. + """ + + def __init__(self, model, init_loc_fn=init_to_median, *, create_plates=None): + self.init_loc_fn = init_loc_fn + model = InitMessenger(self.init_loc_fn)(model) + super().__init__(model, create_plates=create_plates) + + def _setup_prototype(self, *args, **kwargs): + super()._setup_prototype(*args, **kwargs) + + # Initialize guide params + for name, site in self.prototype_trace.iter_stochastic_nodes(): + value = site["value"].detach() + event_dim = site["fn"].event_dim + + # If subsampling, repeat init_value to full size. + for frame in site["cond_indep_stack"]: + full_size = frame.full_size or frame.size + if full_size != frame.size: + dim = frame.dim - event_dim + value = periodic_repeat(value, full_size, dim).contiguous() + + value = PyroParam(value, site["fn"].support, event_dim) + with helpful_support_errors(site): + deep_setattr(self, name, value) + + def forward(self, *args, **kwargs): + """ + An automatic guide with the same ``*args, **kwargs`` as the base ``model``. + + .. note:: This method is used internally by :class:`~torch.nn.Module`. + Users should instead use :meth:`~torch.nn.Module.__call__`. + + :return: A dict mapping sample site name to sampled value. + :rtype: dict + """ + # if we've never run the model before, do so now so we can inspect the model structure + if self.prototype_trace is None: + self._setup_prototype(*args, **kwargs) + + plates = self._create_plates(*args, **kwargs) + result = {} + for name, site in self.prototype_trace.iter_stochastic_nodes(): + with ExitStack() as stack: + for frame in site["cond_indep_stack"]: + if frame.vectorized: + stack.enter_context(plates[frame.name]) + attr_get = operator.attrgetter(name) + result[name] = pyro.sample( + name, dist.Delta(attr_get(self), event_dim=site["fn"].event_dim) + ) + return result + + @torch.no_grad() + def median(self, *args, **kwargs): + """ + Returns the posterior median value of each latent variable. + + :return: A dict mapping sample site name to median tensor. + :rtype: dict + """ + result = self(*args, **kwargs) + return {k: v.detach() for k, v in result.items()} + + +class AutoNormal(AutoGuide): + """This implementation of :class:`AutoGuide` uses a Normal distribution + with a diagonal covariance matrix to construct a guide over the entire + latent space. The guide does not depend on the model's ``*args, **kwargs``. + + It should be equivalent to :class: `AutoDiagonalNormal` , but with + more convenient site names and with better support for + :class:`~pyro.infer.trace_mean_field_elbo.TraceMeanField_ELBO` . + + In :class:`AutoDiagonalNormal` , if your model has N named + parameters with dimensions k_i and sum k_i = D, you get a single + vector of length D for your mean, and a single vector of length D + for sigmas. This guide gives you N distinct normals that you can + call by name. + + Usage:: + + guide = AutoNormal(model) + svi = SVI(model, guide, ...) + + :param callable model: A Pyro model. + :param callable init_loc_fn: A per-site initialization function. + See :ref:`autoguide-initialization` section for available functions. + :param float init_scale: Initial scale for the standard deviation of each + (unconstrained transformed) latent variable. + :param callable create_plates: An optional function inputing the same + ``*args,**kwargs`` as ``model()`` and returning a :class:`pyro.plate` + or iterable of plates. Plates not returned will be created + automatically as usual. This is useful for data subsampling. + """ + + scale_constraint = constraints.softplus_positive + + def __init__( + self, model, *, init_loc_fn=init_to_feasible, init_scale=0.1, create_plates=None + ): + self.init_loc_fn = init_loc_fn + + if not isinstance(init_scale, float) or not (init_scale > 0): + raise ValueError("Expected init_scale > 0. but got {}".format(init_scale)) + self._init_scale = init_scale + + model = InitMessenger(self.init_loc_fn)(model) + super().__init__(model, create_plates=create_plates) + + def _setup_prototype(self, *args, **kwargs): + super()._setup_prototype(*args, **kwargs) + + self._event_dims = {} + self.locs = PyroModule() + self.scales = PyroModule() + + # Initialize guide params + for name, site in self.prototype_trace.iter_stochastic_nodes(): + # Collect unconstrained event_dims, which may differ from constrained event_dims. + with helpful_support_errors(site): + init_loc = ( + biject_to(site["fn"].support).inv(site["value"].detach()).detach() + ) + event_dim = site["fn"].event_dim + init_loc.dim() - site["value"].dim() + self._event_dims[name] = event_dim + + # If subsampling, repeat init_value to full size. + for frame in site["cond_indep_stack"]: + full_size = frame.full_size or frame.size + if full_size != frame.size: + dim = frame.dim - event_dim + init_loc = periodic_repeat(init_loc, full_size, dim).contiguous() + init_scale = torch.full_like(init_loc, self._init_scale) + + deep_setattr( + self.locs, name, PyroParam(init_loc, constraints.real, event_dim) + ) + deep_setattr( + self.scales, + name, + PyroParam(init_scale, self.scale_constraint, event_dim), + ) + + def _get_loc_and_scale(self, name): + site_loc = attrgetter(name)(self.locs) + site_scale = attrgetter(name)(self.scales) + return site_loc, site_scale + + def forward(self, *args, **kwargs): + """ + An automatic guide with the same ``*args, **kwargs`` as the base ``model``. + + .. note:: This method is used internally by :class:`~torch.nn.Module`. + Users should instead use :meth:`~torch.nn.Module.__call__`. + + :return: A dict mapping sample site name to sampled value. + :rtype: dict + """ + # if we've never run the model before, do so now so we can inspect the model structure + if self.prototype_trace is None: + self._setup_prototype(*args, **kwargs) + + plates = self._create_plates(*args, **kwargs) + result = {} + for name, site in self.prototype_trace.iter_stochastic_nodes(): + transform = biject_to(site["fn"].support) + + with ExitStack() as stack: + for frame in site["cond_indep_stack"]: + if frame.vectorized: + stack.enter_context(plates[frame.name]) + + site_loc, site_scale = self._get_loc_and_scale(name) + unconstrained_latent = pyro.sample( + name + "_unconstrained", + dist.Normal( + site_loc, + site_scale, + ).to_event(self._event_dims[name]), + infer={"is_auxiliary": True}, + ) + + value = transform(unconstrained_latent) + if poutine.get_mask() is False: + log_density = 0.0 + else: + log_density = transform.inv.log_abs_det_jacobian( + value, + unconstrained_latent, + ) + log_density = sum_rightmost( + log_density, + log_density.dim() - value.dim() + site["fn"].event_dim, + ) + delta_dist = dist.Delta( + value, + log_density=log_density, + event_dim=site["fn"].event_dim, + ) + + result[name] = pyro.sample(name, delta_dist) + + return result + + @torch.no_grad() + def median(self, *args, **kwargs): + """ + Returns the posterior median value of each latent variable. + + :return: A dict mapping sample site name to median tensor. + :rtype: dict + """ + medians = {} + for name, site in self.prototype_trace.iter_stochastic_nodes(): + site_loc, _ = self._get_loc_and_scale(name) + median = biject_to(site["fn"].support)(site_loc) + if median is site_loc: + median = median.clone() + medians[name] = median + + return medians + + @torch.no_grad() + def quantiles(self, quantiles, *args, **kwargs): + """ + Returns posterior quantiles each latent variable. Example:: + + print(guide.quantiles([0.05, 0.5, 0.95])) + + :param quantiles: A list of requested quantiles between 0 and 1. + :type quantiles: torch.Tensor or list + :return: A dict mapping sample site name to a tensor of quantile values. + :rtype: dict + """ + results = {} + + for name, site in self.prototype_trace.iter_stochastic_nodes(): + site_loc, site_scale = self._get_loc_and_scale(name) + + site_quantiles = torch.tensor( + quantiles, dtype=site_loc.dtype, device=site_loc.device + ) + site_quantiles = site_quantiles.reshape((-1,) + (1,) * site_loc.dim()) + site_quantiles_values = dist.Normal(site_loc, site_scale).icdf( + site_quantiles + ) + constrained_site_quantiles = biject_to(site["fn"].support)( + site_quantiles_values + ) + results[name] = constrained_site_quantiles + + return results + + +class AutoContinuous(AutoGuide): + """ + Base class for implementations of continuous-valued Automatic + Differentiation Variational Inference [1]. + + This uses :mod:`torch.distributions.transforms` to transform each + constrained latent variable to an unconstrained space, then concatenate all + variables into a single unconstrained latent variable. Each derived class + implements a :meth:`get_posterior` method returning a distribution over + this single unconstrained latent variable. + + Assumes model structure and latent dimension are fixed, and all latent + variables are continuous. + + :param callable model: a Pyro model + + Reference: + + [1] `Automatic Differentiation Variational Inference`, + Alp Kucukelbir, Dustin Tran, Rajesh Ranganath, Andrew Gelman, David M. + Blei + + :param callable model: A Pyro model. + :param callable init_loc_fn: A per-site initialization function. + See :ref:`autoguide-initialization` section for available functions. + """ + + def __init__(self, model, init_loc_fn=init_to_median): + model = InitMessenger(init_loc_fn)(model) + super().__init__(model) + + def _setup_prototype(self, *args, **kwargs): + super()._setup_prototype(*args, **kwargs) + self._unconstrained_shapes = {} + self._cond_indep_stacks = {} + for name, site in self.prototype_trace.iter_stochastic_nodes(): + # Collect the shapes of unconstrained values. + # These may differ from the shapes of constrained values. + with helpful_support_errors(site): + self._unconstrained_shapes[name] = ( + biject_to(site["fn"].support).inv(site["value"]).shape + ) + + # Collect independence contexts. + self._cond_indep_stacks[name] = site["cond_indep_stack"] + + self.latent_dim = sum( + _product(shape) for shape in self._unconstrained_shapes.values() + ) + if self.latent_dim == 0: + raise RuntimeError( + "{} found no latent variables; Use an empty guide instead".format( + type(self).__name__ + ) + ) + + def _init_loc(self): + """ + Creates an initial latent vector using a per-site init function. + """ + parts = [] + for name, site in self.prototype_trace.iter_stochastic_nodes(): + constrained_value = site["value"].detach() + unconstrained_value = biject_to(site["fn"].support).inv(constrained_value) + parts.append(unconstrained_value.reshape(-1)) + latent = torch.cat(parts) + assert latent.size() == (self.latent_dim,) + return latent + + def get_base_dist(self): + """ + Returns the base distribution of the posterior when reparameterized + as a :class:`~pyro.distributions.TransformedDistribution`. This + should not depend on the model's `*args, **kwargs`. + + .. code-block:: python + + posterior = TransformedDistribution(self.get_base_dist(), self.get_transform(*args, **kwargs)) + + :return: :class:`~pyro.distributions.TorchDistribution` instance representing the base distribution. + """ + raise NotImplementedError + + def get_transform(self, *args, **kwargs): + """ + Returns the transform applied to the base distribution when the posterior + is reparameterized as a :class:`~pyro.distributions.TransformedDistribution`. + This may depend on the model's `*args, **kwargs`. + + .. code-block:: python + + posterior = TransformedDistribution(self.get_base_dist(), self.get_transform(*args, **kwargs)) + + :return: a :class:`~torch.distributions.Transform` instance. + """ + raise NotImplementedError + + def get_posterior(self, *args, **kwargs): + """ + Returns the posterior distribution. + """ + base_dist = self.get_base_dist() + transform = self.get_transform(*args, **kwargs) + return dist.TransformedDistribution(base_dist, transform) + + def sample_latent(self, *args, **kwargs): + """ + Samples an encoded latent given the same ``*args, **kwargs`` as the + base ``model``. + """ + pos_dist = self.get_posterior(*args, **kwargs) + return pyro.sample( + "_{}_latent".format(self._pyro_name), pos_dist, infer={"is_auxiliary": True} + ) + + def _unpack_latent(self, latent): + """ + Unpacks a packed latent tensor, iterating over tuples of the form:: + + (site, unconstrained_value) + """ + batch_shape = latent.shape[ + :-1 + ] # for plates outside of _setup_prototype, e.g. parallel particles + pos = 0 + for name, site in self.prototype_trace.iter_stochastic_nodes(): + constrained_shape = site["value"].shape + unconstrained_shape = self._unconstrained_shapes[name] + size = _product(unconstrained_shape) + event_dim = ( + site["fn"].event_dim + len(unconstrained_shape) - len(constrained_shape) + ) + unconstrained_shape = torch.broadcast_shapes( + unconstrained_shape, batch_shape + (1,) * event_dim + ) + unconstrained_value = latent[..., pos : pos + size].view( + unconstrained_shape + ) + yield site, unconstrained_value + pos += size + if not torch._C._get_tracing_state(): + assert pos == latent.size(-1) + + def forward(self, *args, **kwargs): + """ + An automatic guide with the same ``*args, **kwargs`` as the base ``model``. + + .. note:: This method is used internally by :class:`~torch.nn.Module`. + Users should instead use :meth:`~torch.nn.Module.__call__`. + + :return: A dict mapping sample site name to sampled value. + :rtype: dict + """ + # if we've never run the model before, do so now so we can inspect the model structure + if self.prototype_trace is None: + self._setup_prototype(*args, **kwargs) + + latent = self.sample_latent(*args, **kwargs) + plates = self._create_plates(*args, **kwargs) + + # unpack continuous latent samples + result = {} + for site, unconstrained_value in self._unpack_latent(latent): + name = site["name"] + transform = biject_to(site["fn"].support) + value = transform(unconstrained_value) + if poutine.get_mask() is False: + log_density = 0.0 + else: + log_density = transform.inv.log_abs_det_jacobian( + value, + unconstrained_value, + ) + log_density = sum_rightmost( + log_density, + log_density.dim() - value.dim() + site["fn"].event_dim, + ) + delta_dist = dist.Delta( + value, + log_density=log_density, + event_dim=site["fn"].event_dim, + ) + + with ExitStack() as stack: + for frame in self._cond_indep_stacks[name]: + stack.enter_context(plates[frame.name]) + result[name] = pyro.sample(name, delta_dist) + + return result + + def _loc_scale(self, *args, **kwargs): + """ + :returns: a tuple ``(loc, scale)`` used by :meth:`median` and + :meth:`quantiles` + """ + raise NotImplementedError + + @torch.no_grad() + def median(self, *args, **kwargs): + """ + Returns the posterior median value of each latent variable. + + :return: A dict mapping sample site name to median tensor. + :rtype: dict + """ + loc, _ = self._loc_scale(*args, **kwargs) + loc = loc.detach() + return { + site["name"]: biject_to(site["fn"].support)(unconstrained_value) + for site, unconstrained_value in self._unpack_latent(loc) + } + + @torch.no_grad() + def quantiles(self, quantiles, *args, **kwargs): + """ + Returns posterior quantiles each latent variable. Example:: + + print(guide.quantiles([0.05, 0.5, 0.95])) + + :param quantiles: A list of requested quantiles between 0 and 1. + :type quantiles: torch.Tensor or list + :return: A dict mapping sample site name to a tensor of quantile values. + :rtype: dict + """ + loc, scale = self._loc_scale(*args, **kwargs) + quantiles = torch.tensor( + quantiles, dtype=loc.dtype, device=loc.device + ).unsqueeze(-1) + latents = dist.Normal(loc, scale).icdf(quantiles) + result = {} + for latent in latents: + for site, unconstrained_value in self._unpack_latent(latent): + result.setdefault(site["name"], []).append( + biject_to(site["fn"].support)(unconstrained_value) + ) + result = {k: torch.stack(v) for k, v in result.items()} + return result + + +class AutoMultivariateNormal(AutoContinuous): + """ + This implementation of :class:`AutoContinuous` uses a Cholesky + factorization of a Multivariate Normal distribution to construct a guide + over the entire latent space. The guide does not depend on the model's + ``*args, **kwargs``. + + Usage:: + + guide = AutoMultivariateNormal(model) + svi = SVI(model, guide, ...) + + By default the mean vector is initialized by ``init_loc_fn()`` and the + Cholesky factor is initialized to the identity times a small factor. + + :param callable model: A generative model. + :param callable init_loc_fn: A per-site initialization function. + See :ref:`autoguide-initialization` section for available functions. + :param float init_scale: Initial scale for the standard deviation of each + (unconstrained transformed) latent variable. + """ + + scale_constraint = constraints.softplus_positive + scale_tril_constraint = constraints.unit_lower_cholesky + + def __init__(self, model, init_loc_fn=init_to_median, init_scale=0.1): + if not isinstance(init_scale, float) or not (init_scale > 0): + raise ValueError("Expected init_scale > 0. but got {}".format(init_scale)) + self._init_scale = init_scale + super().__init__(model, init_loc_fn=init_loc_fn) + + def _setup_prototype(self, *args, **kwargs): + super()._setup_prototype(*args, **kwargs) + # Initialize guide params + self.loc = nn.Parameter(self._init_loc()) + self.scale = PyroParam( + torch.full_like(self.loc, self._init_scale), self.scale_constraint + ) + self.scale_tril = PyroParam( + eye_like(self.loc, self.latent_dim), self.scale_tril_constraint + ) + + def get_base_dist(self): + return dist.Normal( + torch.zeros_like(self.loc), torch.ones_like(self.loc) + ).to_event(1) + + def get_transform(self, *args, **kwargs): + scale_tril = self.scale[..., None] * self.scale_tril + return dist.transforms.LowerCholeskyAffine(self.loc, scale_tril=scale_tril) + + def get_posterior(self, *args, **kwargs): + """ + Returns a MultivariateNormal posterior distribution. + """ + scale_tril = self.scale[..., None] * self.scale_tril + return dist.MultivariateNormal(self.loc, scale_tril=scale_tril) + + def _loc_scale(self, *args, **kwargs): + scale_tril = self.scale[..., None] * self.scale_tril + scale = scale_tril.pow(2).sum(-1).sqrt() + assert scale.shape == self.loc.shape + return self.loc, scale + + +class AutoDiagonalNormal(AutoContinuous): + """ + This implementation of :class:`AutoContinuous` uses a Normal distribution + with a diagonal covariance matrix to construct a guide over the entire + latent space. The guide does not depend on the model's ``*args, **kwargs``. + + Usage:: + + guide = AutoDiagonalNormal(model) + svi = SVI(model, guide, ...) + + By default the mean vector is initialized to zero and the scale is + initialized to the identity times a small factor. + + :param callable model: A generative model. + :param callable init_loc_fn: A per-site initialization function. + See :ref:`autoguide-initialization` section for available functions. + :param float init_scale: Initial scale for the standard deviation of each + (unconstrained transformed) latent variable. + """ + + scale_constraint = constraints.softplus_positive + + def __init__(self, model, init_loc_fn=init_to_median, init_scale=0.1): + if not isinstance(init_scale, float) or not (init_scale > 0): + raise ValueError("Expected init_scale > 0. but got {}".format(init_scale)) + self._init_scale = init_scale + super().__init__(model, init_loc_fn=init_loc_fn) + + def _setup_prototype(self, *args, **kwargs): + super()._setup_prototype(*args, **kwargs) + # Initialize guide params + self.loc = nn.Parameter(self._init_loc()) + self.scale = PyroParam( + self.loc.new_full((self.latent_dim,), self._init_scale), + self.scale_constraint, + ) + + def get_base_dist(self): + return dist.Normal( + torch.zeros_like(self.loc), torch.ones_like(self.loc) + ).to_event(1) + + def get_transform(self, *args, **kwargs): + return dist.transforms.AffineTransform(self.loc, self.scale) + + def get_posterior(self, *args, **kwargs): + """ + Returns a diagonal Normal posterior distribution. + """ + return dist.Normal(self.loc, self.scale).to_event(1) + + def _loc_scale(self, *args, **kwargs): + return self.loc, self.scale + + +class AutoLowRankMultivariateNormal(AutoContinuous): + """ + This implementation of :class:`AutoContinuous` uses a low rank plus + diagonal Multivariate Normal distribution to construct a guide + over the entire latent space. The guide does not depend on the model's + ``*args, **kwargs``. + + Usage:: + + guide = AutoLowRankMultivariateNormal(model, rank=10) + svi = SVI(model, guide, ...) + + By default the ``cov_diag`` is initialized to a small constant and the + ``cov_factor`` is initialized randomly such that on average + ``cov_factor.matmul(cov_factor.t())`` has the same scale as ``cov_diag``. + + :param callable model: A generative model. + :param rank: The rank of the low-rank part of the covariance matrix. + Defaults to approximately ``sqrt(latent dim)``. + :type rank: int or None + :param callable init_loc_fn: A per-site initialization function. + See :ref:`autoguide-initialization` section for available functions. + :param float init_scale: Approximate initial scale for the standard + deviation of each (unconstrained transformed) latent variable. + """ + + scale_constraint = constraints.softplus_positive + + def __init__(self, model, init_loc_fn=init_to_median, init_scale=0.1, rank=None): + if not isinstance(init_scale, float) or not (init_scale > 0): + raise ValueError("Expected init_scale > 0. but got {}".format(init_scale)) + if not (rank is None or isinstance(rank, int) and rank > 0): + raise ValueError("Expected rank > 0 but got {}".format(rank)) + self._init_scale = init_scale + self.rank = rank + super().__init__(model, init_loc_fn=init_loc_fn) + + def _setup_prototype(self, *args, **kwargs): + super()._setup_prototype(*args, **kwargs) + # Initialize guide params + self.loc = nn.Parameter(self._init_loc()) + if self.rank is None: + self.rank = int(round(self.latent_dim**0.5)) + self.scale = PyroParam( + self.loc.new_full((self.latent_dim,), 0.5**0.5 * self._init_scale), + constraint=self.scale_constraint, + ) + self.cov_factor = nn.Parameter( + self.loc.new_empty(self.latent_dim, self.rank).normal_( + 0, 1 / self.rank**0.5 + ) + ) + + def get_posterior(self, *args, **kwargs): + """ + Returns a LowRankMultivariateNormal posterior distribution. + """ + scale = self.scale + cov_factor = self.cov_factor * scale.unsqueeze(-1) + cov_diag = scale * scale + return dist.LowRankMultivariateNormal(self.loc, cov_factor, cov_diag) + + def _loc_scale(self, *args, **kwargs): + scale = self.scale * (self.cov_factor.pow(2).sum(-1) + 1).sqrt() + return self.loc, scale + + +class AutoNormalizingFlow(AutoContinuous): + """ + This implementation of :class:`AutoContinuous` uses a Diagonal Normal + distribution transformed via a sequence of bijective transforms + (e.g. various :mod:`~pyro.distributions.TransformModule` subclasses) + to construct a guide over the entire latent space. The guide does not + depend on the model's ``*args, **kwargs``. + + Usage:: + + transform_init = partial(iterated, block_autoregressive, + repeats=2) + guide = AutoNormalizingFlow(model, transform_init) + svi = SVI(model, guide, ...) + + :param callable model: a generative model + :param init_transform_fn: a callable which when provided with the latent + dimension returns an instance of :class:`~torch.distributions.Transform` + , or :class:`~pyro.distributions.TransformModule` if the transform has + trainable params. + """ + + def __init__(self, model, init_transform_fn): + super().__init__(model, init_loc_fn=init_to_feasible) + self._init_transform_fn = init_transform_fn + self.transform = None + self._prototype_tensor = torch.tensor(0.0) + + def get_base_dist(self): + loc = self._prototype_tensor.new_zeros(1) + scale = self._prototype_tensor.new_ones(1) + return dist.Normal(loc, scale).expand([self.latent_dim]).to_event(1) + + def get_transform(self, *args, **kwargs): + return self.transform + + def get_posterior(self, *args, **kwargs): + if self.transform is None: + self.transform = self._init_transform_fn(self.latent_dim) + # Update prototype tensor in case transform parameters + # device/dtype is not the same as default tensor type. + for _, p in self.named_pyro_params(): + self._prototype_tensor = p + break + return super().get_posterior(*args, **kwargs) + + +class AutoIAFNormal(AutoNormalizingFlow): + """ + This implementation of :class:`AutoContinuous` uses a Diagonal Normal + distribution transformed via a :class:`~pyro.distributions.transforms.AffineAutoregressive` + to construct a guide over the entire latent space. The guide does not depend on the model's + ``*args, **kwargs``. + + Usage:: + + guide = AutoIAFNormal(model, hidden_dim=latent_dim) + svi = SVI(model, guide, ...) + + :param callable model: a generative model + :param list[int] hidden_dim: number of hidden dimensions in the IAF + :param callable init_loc_fn: A per-site initialization function. + See :ref:`autoguide-initialization` section for available functions. + + .. warning:: + + This argument is only to preserve backwards compatibility + and has no effect in practice. + + :param int num_transforms: number of :class:`~pyro.distributions.transforms.AffineAutoregressive` + transforms to use in sequence. + :param init_transform_kwargs: other keyword arguments taken by + :func:`~pyro.distributions.transforms.affine_autoregressive`. + """ + + def __init__( + self, + model, + hidden_dim=None, + init_loc_fn=None, + num_transforms=1, + **init_transform_kwargs, + ): + if init_loc_fn: + warnings.warn( + "The `init_loc_fn` argument to AutoIAFNormal is not used in practice. " + "Please consider removing, as this may be removed in a future release.", + category=FutureWarning, + ) + super().__init__( + model, + init_transform_fn=functools.partial( + iterated, + num_transforms, + affine_autoregressive, + hidden_dims=hidden_dim, + **init_transform_kwargs, + ), + ) + + +class AutoLaplaceApproximation(AutoContinuous): + r""" + Laplace approximation (quadratic approximation) approximates the posterior + :math:`\log p(z | x)` by a multivariate normal distribution in the + unconstrained space. Under the hood, it uses Delta distributions to + construct a MAP guide over the entire (unconstrained) latent space. Its + covariance is given by the inverse of the hessian of :math:`-\log p(x, z)` + at the MAP point of `z`. + + Usage:: + + delta_guide = AutoLaplaceApproximation(model) + svi = SVI(model, delta_guide, ...) + # ...then train the delta_guide... + guide = delta_guide.laplace_approximation() + + By default the mean vector is initialized to an empirical prior median. + + :param callable model: a generative model + :param callable init_loc_fn: A per-site initialization function. + See :ref:`autoguide-initialization` section for available functions. + """ + + def _setup_prototype(self, *args, **kwargs): + super()._setup_prototype(*args, **kwargs) + # Initialize guide params + self.loc = nn.Parameter(self._init_loc()) + + def get_posterior(self, *args, **kwargs): + """ + Returns a Delta posterior distribution for MAP inference. + """ + return dist.Delta(self.loc).to_event(1) + + def laplace_approximation(self, *args, **kwargs): + """ + Returns a :class:`AutoMultivariateNormal` instance whose posterior's `loc` and + `scale_tril` are given by Laplace approximation. + """ + guide_trace = poutine.trace(self).get_trace(*args, **kwargs) + model_trace = poutine.trace( + poutine.replay(self.model, trace=guide_trace) + ).get_trace(*args, **kwargs) + loss = guide_trace.log_prob_sum() - model_trace.log_prob_sum() + + H = hessian(loss, self.loc) + with torch.no_grad(): + loc = self.loc.detach() + cov = H.inverse() + scale = cov.diagonal().sqrt() + cov /= scale[:, None] + cov /= scale[None, :] + scale_tril = torch.linalg.cholesky(cov) + + gaussian_guide = AutoMultivariateNormal(self.model) + gaussian_guide._setup_prototype(*args, **kwargs) + # Set detached loc, scale, scale_tril parameters as computed above. + del gaussian_guide.loc + del gaussian_guide.scale + del gaussian_guide.scale_tril + gaussian_guide.register_buffer("loc", loc) + gaussian_guide.register_buffer("scale", scale) + gaussian_guide.register_buffer("scale_tril", scale_tril) + return gaussian_guide + + +class AutoDiscreteParallel(AutoGuide): + """ + A discrete mean-field guide that learns a latent discrete distribution for + each discrete site in the model. + """ + + def _setup_prototype(self, *args, **kwargs): + # run the model so we can inspect its structure + model = poutine.block(config_enumerate(self.model), self._prototype_hide_fn) + self.prototype_trace = poutine.block(poutine.trace(model).get_trace)( + *args, **kwargs + ) + if self.master is not None: + self.master()._check_prototype(self.prototype_trace) + + self._discrete_sites = [] + self._cond_indep_stacks = {} + self._prototype_frames = {} + for name, site in self.prototype_trace.iter_stochastic_nodes(): + if site["infer"].get("enumerate") != "parallel": + raise NotImplementedError( + 'Expected sample site "{}" to be discrete and ' + "configured for parallel enumeration".format(name) + ) + + # collect discrete sample sites + fn = site["fn"] + Dist = type(fn) + if Dist in (dist.Bernoulli, dist.Categorical, dist.OneHotCategorical): + params = [ + ("probs", fn.probs.detach().clone(), fn.arg_constraints["probs"]) + ] + else: + raise NotImplementedError("{} is not supported".format(Dist.__name__)) + self._discrete_sites.append((site, Dist, params)) + + # collect independence contexts + self._cond_indep_stacks[name] = site["cond_indep_stack"] + for frame in site["cond_indep_stack"]: + if frame.vectorized: + self._prototype_frames[frame.name] = frame + else: + raise NotImplementedError( + "AutoDiscreteParallel does not support sequential pyro.plate" + ) + # Initialize guide params + for site, Dist, param_spec in self._discrete_sites: + name = site["name"] + for param_name, param_init, param_constraint in param_spec: + deep_setattr( + self, + "{}_{}".format(name, param_name), + PyroParam(param_init, constraint=param_constraint), + ) + + def forward(self, *args, **kwargs): + """ + An automatic guide with the same ``*args, **kwargs`` as the base ``model``. + + .. note:: This method is used internally by :class:`~torch.nn.Module`. + Users should instead use :meth:`~torch.nn.Module.__call__`. + + :return: A dict mapping sample site name to sampled value. + :rtype: dict + """ + # if we've never run the model before, do so now so we can inspect the model structure + if self.prototype_trace is None: + self._setup_prototype(*args, **kwargs) + + plates = self._create_plates(*args, **kwargs) + + # enumerate discrete latent samples + result = {} + for site, Dist, param_spec in self._discrete_sites: + name = site["name"] + dist_params = { + param_name: operator.attrgetter("{}_{}".format(name, param_name))(self) + for param_name, param_init, param_constraint in param_spec + } + discrete_dist = Dist(**dist_params) + + with ExitStack() as stack: + for frame in self._cond_indep_stacks[name]: + stack.enter_context(plates[frame.name]) + result[name] = pyro.sample( + name, discrete_dist, infer={"enumerate": "parallel"} + ) + + return result diff --git a/pyro/source/pyro/infer/autoguide/initialization.py b/pyro/source/pyro/infer/autoguide/initialization.py new file mode 100644 index 0000000000000000000000000000000000000000..5654f343460924f895d3f6766f4f7bb9f4f30c08 --- /dev/null +++ b/pyro/source/pyro/infer/autoguide/initialization.py @@ -0,0 +1,256 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +r""" +The pyro.infer.autoguide.initialization module contains initialization functions for +automatic guides. + +The standard interface for initialization is a function that inputs a Pyro +trace ``site`` dict and returns an appropriately sized ``value`` to serve +as an initial constrained value for a guide estimate. +""" +import functools +from typing import Callable, Optional + +import torch +from torch.distributions import transform_to + +from pyro.distributions.torch import Independent +from pyro.distributions.torch_distribution import MaskedDistribution +from pyro.infer.util import is_validation_enabled +from pyro.poutine.messenger import Messenger +from pyro.util import torch_isnan + +from .utils import helpful_support_errors + +# TODO: move this file out of `autoguide` in a minor release + + +def _is_multivariate(d): + while isinstance(d, (Independent, MaskedDistribution)): + d = d.base_dist + return any(size > 1 for size in d.event_shape) + + +def init_to_feasible(site=None): + """ + Initialize to an arbitrary feasible point, ignoring distribution + parameters. + """ + if site is None: + return init_to_feasible + + value = site["fn"].sample().detach() + t = transform_to(site["fn"].support) + value = t(torch.zeros_like(t.inv(value))) + value._pyro_custom_init = False + return value + + +def init_to_sample(site=None): + """ + Initialize to a random sample from the prior. + """ + if site is None: + return init_to_sample + + value = site["fn"].sample().detach() + value._pyro_custom_init = False + return value + + +def init_to_median( + site=None, + num_samples=15, + *, + fallback: Optional[Callable] = init_to_feasible, +): + """ + Initialize to the prior median; fallback to ``fallback`` (defaults to + :func:`init_to_feasible`) if mean is undefined. + + :param callable fallback: Fallback init strategy, for sites not specified + in ``values``. + :raises ValueError: If ``fallback=None`` and no value for a site is given + in ``values``. + """ + if site is None: + return functools.partial( + init_to_median, num_samples=num_samples, fallback=fallback + ) + + # The median undefined for multivariate distributions. + if _is_multivariate(site["fn"]): + return init_to_feasible(site) + try: + # Try to compute empirical median. + samples = site["fn"].sample(sample_shape=(num_samples,)) + value = samples.median(dim=0)[0] + if torch_isnan(value): + raise ValueError + if hasattr(site["fn"], "_validate_sample"): + site["fn"]._validate_sample(value) + value._pyro_custom_init = False + return value + except (RuntimeError, ValueError): + pass + if fallback is not None: + return fallback(site) + raise ValueError(f"No init strategy specified for site {repr(site['name'])}") + + +def init_to_mean( + site=None, + *, + fallback: Optional[Callable] = init_to_median, +): + """ + Initialize to the prior mean; fallback to ``fallback`` (defaults to + :func:`init_to_median`) if mean is undefined. + + :param callable fallback: Fallback init strategy, for sites not specified + in ``values``. + :raises ValueError: If ``fallback=None`` and no value for a site is given + in ``values``. + """ + if site is None: + return functools.partial(init_to_mean, fallback=fallback) + + try: + # Try .mean() method. + value = site["fn"].mean.detach() + if torch_isnan(value): + raise ValueError + if hasattr(site["fn"], "_validate_sample"): + site["fn"]._validate_sample(value) + value._pyro_custom_init = False + return value + except (NotImplementedError, ValueError): + # This may happen for distributions with infinite variance, e.g. Cauchy. + pass + if fallback is not None: + return fallback(site) + raise ValueError(f"No init strategy specified for site {repr(site['name'])}") + + +def init_to_uniform( + site: Optional[dict] = None, + radius: float = 2.0, +): + """ + Initialize to a random point in the area ``(-radius, radius)`` of + unconstrained domain. + + :param float radius: specifies the range to draw an initial point in the + unconstrained domain. + """ + if site is None: + return functools.partial(init_to_uniform, radius=radius) + + value = site["fn"].sample().detach() + t = transform_to(site["fn"].support) + value = t(torch.rand_like(t.inv(value)) * (2 * radius) - radius) + value._pyro_custom_init = False + return value + + +def init_to_value( + site: Optional[dict] = None, + values: dict = {}, + *, + fallback: Optional[Callable] = init_to_uniform, +): + """ + Initialize to the value specified in ``values``. Fallback to ``fallback`` + (defaults to :func:`init_to_uniform`) strategy for sites not appearing in + ``values``. + + :param dict values: dictionary of initial values keyed by site name. + :param callable fallback: Fallback init strategy, for sites not specified + in ``values``. + :raises ValueError: If ``fallback=None`` and no value for a site is given + in ``values``. + """ + if site is None: + return functools.partial(init_to_value, values=values, fallback=fallback) + + if site["name"] in values: + return values[site["name"]] + if fallback is not None: + return fallback(site) + raise ValueError(f"No init strategy specified for site {repr(site['name'])}") + + +class _InitToGenerated: + def __init__(self, generate): + self.generate = generate + self._init = None + self._seen = set() + + def __call__(self, site): + if self._init is None or site["name"] in self._seen: + self._init = self.generate() + self._seen = {site["name"]} + return self._init(site) + + +def init_to_generated(site=None, generate=lambda: init_to_uniform): + """ + Initialize to another initialization strategy returned by the callback + ``generate`` which is called once per model execution. + + This is like :func:`init_to_value` but can produce different (e.g. random) + values once per model execution. For example to generate values and return + ``init_to_value`` you could define:: + + def generate(): + values = {"x": torch.randn(100), "y": torch.rand(5)} + return init_to_value(values=values) + + my_init_fn = init_to_generated(generate=generate) + + :param callable generate: A callable returning another initialization + function, e.g. returning an ``init_to_value(values={...})`` populated + with a dictionary of random samples. + """ + init = _InitToGenerated(generate) + return init if site is None else init(site) + + +class InitMessenger(Messenger): + """ + Initializes a site by replacing ``.sample()`` calls with values + drawn from an initialization strategy. This is mainly for internal use by + autoguide classes. + + :param callable init_fn: An initialization function. + """ + + def __init__(self, init_fn): + self.init_fn = init_fn + super().__init__() + + def _pyro_sample(self, msg): + if msg["value"] is not None or type(msg["fn"]).__name__ == "_Subsample": + return + with torch.no_grad(), helpful_support_errors(msg): + value = self.init_fn(msg) + if is_validation_enabled() and msg["value"] is not None: + if not isinstance(value, type(msg["value"])): + raise ValueError( + "{} provided invalid type for site {}:\nexpected {}\nactual {}".format( + self.init_fn, msg["name"], type(msg["value"]), type(value) + ) + ) + if value.shape != msg["value"].shape: + raise ValueError( + "{} provided invalid shape for site {}:\nexpected {}\nactual {}".format( + self.init_fn, msg["name"], msg["value"].shape, value.shape + ) + ) + msg["value"] = value + + def _pyro_get_init_messengers(self, msg): + if msg["value"] is None: + msg["value"] = [] + msg["value"].append(self) diff --git a/pyro/source/pyro/infer/autoguide/structured.py b/pyro/source/pyro/infer/autoguide/structured.py new file mode 100644 index 0000000000000000000000000000000000000000..5c1108b1acd8b5d2745512f7762a3f276e7cd6c3 --- /dev/null +++ b/pyro/source/pyro/infer/autoguide/structured.py @@ -0,0 +1,376 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from collections import OrderedDict, defaultdict +from contextlib import ExitStack +from operator import attrgetter +from types import SimpleNamespace +from typing import Callable, Dict, Optional, Union + +import torch +from torch.distributions import biject_to + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.distributions import constraints +from pyro.distributions.util import eye_like, is_identically_zero +from pyro.infer.inspect import get_dependencies +from pyro.nn.module import PyroModule, PyroParam + +from .guides import AutoGuide +from .initialization import InitMessenger, init_to_feasible +from .utils import deep_setattr, helpful_support_errors + + +def _config_auxiliary(msg): + return {"is_auxiliary": True} + + +class AutoStructured(AutoGuide): + """ + Structured guide whose conditional distributions are Delta, Normal, + MultivariateNormal, or by a callable, and whose latent variables can depend + on each other either linearly (in unconstrained space) or via shearing by a + callable. + + Usage:: + + def model(data): + x = pyro.sample("x", dist.LogNormal(0, 1)) + with pyro.plate("plate", len(data)): + y = pyro.sample("y", dist.Normal(0, 1)) + pyro.sample("z", dist.Normal(y, x), obs=data) + + # Either fully automatic... + guide = AutoStructured(model) + + # ...or with specified conditional and dependency types... + guide = AutoStructured( + model, conditionals="normal", dependencies="linear" + ) + + # ...or with custom dependency structure and distribution types. + guide = AutoStructured( + model=model, + conditionals={"x": "normal", "y": "delta"}, + dependencies={"x": {"y": "linear"}}, + ) + + Once trained, this guide can be used with + :class:`~pyro.infer.reparam.structured.StructuredReparam` to precondition a + model for use in HMC and NUTS inference. + + .. note:: If you declare a dependency of a high-dimensional downstream + variable on a low-dimensional upstream variable, you may want to use + a lower learning rate for that weight, e.g.:: + + def optim_config(param_name): + config = {"lr": 0.01} + if "deps.my_downstream.my_upstream" in param_name: + config["lr"] *= 0.1 + return config + + adam = pyro.optim.Adam(optim_config) + + :param callable model: A Pyro model. + :param conditionals: Either a single distribution type or a dict mapping + each latent variable name to a distribution type. A distribution type + is either a string in {"delta", "normal", "mvn"} or a callable that + returns a sample from a zero mean (or approximately centered) noise + distribution (such callables typically call ``pyro.param()`` and + ``pyro.sample()`` internally). + :param dependencies: Dependency type, or a dict mapping each site name to a + dict mapping its upstream dependencies to dependency types. If only a + dependecy type is provided, dependency structure will be inferred. A + dependency type is either the string "linear" or a callable that maps a + *flattened* upstream perturbation to *flattened* downstream + perturbation. The string "linear" is equivalent to + ``nn.Linear(upstream.numel(), downstream.numel(), bias=False)``. + Dependencies must not contain cycles or self-loops. + :param callable init_loc_fn: A per-site initialization function. + See :ref:`autoguide-initialization` section for available functions. + :param float init_scale: Initial scale for the standard deviation of each + (unconstrained transformed) latent variable. + :param callable create_plates: An optional function inputing the same + ``*args,**kwargs`` as ``model()`` and returning a :class:`pyro.plate` + or iterable of plates. Plates not returned will be created + automatically as usual. This is useful for data subsampling. + """ + + scale_constraint = constraints.softplus_positive + scale_tril_constraint = constraints.softplus_lower_cholesky + + def __init__( + self, + model, + *, + conditionals: Union[str, Dict[str, Union[str, Callable]]] = "mvn", + dependencies: Union[str, Dict[str, Dict[str, Union[str, Callable]]]] = "linear", + init_loc_fn: Callable = init_to_feasible, + init_scale: float = 0.1, + create_plates: Optional[Callable] = None, + ): + assert isinstance(conditionals, (dict, str)) + if isinstance(conditionals, dict): + for name, fn in conditionals.items(): + assert isinstance(name, str) + assert isinstance(fn, str) or callable(fn) + assert isinstance(dependencies, (dict, str)) + if isinstance(dependencies, dict): + for downstream, deps in dependencies.items(): + assert downstream in conditionals + assert isinstance(deps, dict) + for upstream, dep in deps.items(): + assert upstream in conditionals + assert upstream != downstream + assert isinstance(dep, str) or callable(dep) + self.conditionals = conditionals + self.dependencies = dependencies + + if not isinstance(init_scale, float) or not (init_scale > 0): + raise ValueError(f"Expected init_scale > 0. but got {init_scale}") + self._init_scale = init_scale + self._original_model = (model,) + model = InitMessenger(init_loc_fn)(model) + super().__init__(model, create_plates=create_plates) + + def _auto_config(self, sample_sites, args, kwargs): + # Instantiate conditionals as dictionaries. + if not isinstance(self.conditionals, dict): + self.conditionals = { + name: self.conditionals for name, site in sample_sites.items() + } + + # Instantiate dependencies as dictionaries. + if not isinstance(self.dependencies, dict): + model = self._original_model[0] + meta = poutine.block(get_dependencies)(model, args, kwargs) + # Use posterior dependency edges but with prior ordering. This + # allows sampling of globals before locals on which they depend. + prior_order = {name: i for i, name in enumerate(sample_sites)} + dependencies = defaultdict(dict) + for d, upstreams in meta["posterior_dependencies"].items(): + assert d in sample_sites + for u, plates in upstreams.items(): + # TODO use plates to reduce dimension of dependency. + if u in sample_sites: + if prior_order[u] > prior_order[d]: + dependencies[u][d] = self.dependencies + elif prior_order[d] > prior_order[u]: + dependencies[d][u] = self.dependencies + self.dependencies = dict(dependencies) + self._original_model = None + + def _setup_prototype(self, *args, **kwargs): + super()._setup_prototype(*args, **kwargs) + + self.locs = PyroModule() + self.scales = PyroModule() + self.scale_trils = PyroModule() + self.conds = PyroModule() + self.deps = PyroModule() + self._batch_shapes = {} + self._unconstrained_event_shapes = {} + sample_sites = OrderedDict(self.prototype_trace.iter_stochastic_nodes()) + self._auto_config(sample_sites, args, kwargs) + + # Collect unconstrained shapes. + init_locs = {} + numel = {} + for name, site in sample_sites.items(): + with helpful_support_errors(site): + init_loc = ( + biject_to(site["fn"].support).inv(site["value"].detach()).detach() + ) + self._batch_shapes[name] = site["fn"].batch_shape + self._unconstrained_event_shapes[name] = init_loc.shape[ + len(site["fn"].batch_shape) : + ] + numel[name] = init_loc.numel() + init_locs[name] = init_loc.reshape(-1) + + # Initialize guide params. + children = defaultdict(list) + num_pending = {} + for name, site in sample_sites.items(): + # Initialize location parameters. + init_loc = init_locs[name] + deep_setattr(self.locs, name, PyroParam(init_loc)) + + # Initialize parameters of conditional distributions. + conditional = self.conditionals[name] + if callable(conditional): + deep_setattr(self.conds, name, conditional) + else: + if conditional not in ("delta", "normal", "mvn"): + raise ValueError(f"Unsupported conditional type: {conditional}") + if conditional in ("normal", "mvn"): + init_scale = torch.full_like(init_loc, self._init_scale) + deep_setattr( + self.scales, name, PyroParam(init_scale, self.scale_constraint) + ) + if conditional == "mvn": + init_scale_tril = eye_like(init_loc, init_loc.numel()) + deep_setattr( + self.scale_trils, + name, + PyroParam(init_scale_tril, self.scale_tril_constraint), + ) + + # Initialize dependencies on upstream variables. + num_pending[name] = 0 + deps = PyroModule() + deep_setattr(self.deps, name, deps) + for upstream, dep in self.dependencies.get(name, {}).items(): + assert upstream in sample_sites + children[upstream].append(name) + num_pending[name] += 1 + if isinstance(dep, str) and dep == "linear": + dep = torch.nn.Linear(numel[upstream], numel[name], bias=False) + dep.weight.data.zero_() + elif not callable(dep): + raise ValueError( + f"Expected either the string 'linear' or a callable, but got {dep}" + ) + deep_setattr(deps, upstream, dep) + + # Topologically sort sites. + # TODO should we choose a more optimal structure? + self._sorted_sites = [] + while num_pending: + name, count = min(num_pending.items(), key=lambda kv: (kv[1], kv[0])) + assert count == 0, f"cyclic dependency: {name}" + del num_pending[name] + for child in children[name]: + num_pending[child] -= 1 + site = self._compress_site(sample_sites[name]) + self._sorted_sites.append((name, site)) + + # Prune non-essential parts of the trace to save memory. + for name, site in self.prototype_trace.nodes.items(): + site.clear() + + @staticmethod + def _compress_site(site): + # Save memory by retaining only necessary parts of the site. + return { + "name": site["name"], + "type": site["type"], + "cond_indep_stack": site["cond_indep_stack"], + "fn": SimpleNamespace( + support=site["fn"].support, + event_dim=site["fn"].event_dim, + ), + } + + @poutine.infer_config(config_fn=_config_auxiliary) + def get_deltas(self, save_params=None): + deltas = {} + aux_values = {} + compute_density = poutine.get_mask() is not False + for name, site in self._sorted_sites: + if save_params is not None and name not in save_params: + continue + + # Sample zero-mean blockwise independent Delta/Normal/MVN. + log_density = 0.0 + loc = attrgetter(name)(self.locs) + zero = torch.zeros_like(loc) + conditional = self.conditionals[name] + if callable(conditional): + aux_value = attrgetter(name)(self.conds)() + elif conditional == "delta": + aux_value = zero + elif conditional == "normal": + aux_value = pyro.sample( + name + "_aux", + dist.Normal(zero, 1).to_event(1), + infer={"is_auxiliary": True}, + ) + scale = attrgetter(name)(self.scales) + aux_value = aux_value * scale + if compute_density: + log_density = (-scale.log()).expand_as(aux_value) + elif conditional == "mvn": + # This overparametrizes by learning (scale,scale_tril), + # enabling faster learning of the more-global scale parameter. + aux_value = pyro.sample( + name + "_aux", + dist.Normal(zero, 1).to_event(1), + infer={"is_auxiliary": True}, + ) + scale = attrgetter(name)(self.scales) + scale_tril = attrgetter(name)(self.scale_trils) + aux_value = aux_value @ scale_tril.T * scale + if compute_density: + log_density = ( + -scale_tril.diagonal(dim1=-2, dim2=-1).log() - scale.log() + ).expand_as(aux_value) + else: + raise ValueError(f"Unsupported conditional type: {conditional}") + + # Accumulate upstream dependencies. + # Note: by accumulating upstream dependencies before updating the + # aux_values dict, we encode a block-sparse structure of the + # precision matrix; if we had instead accumulated after updating + # aux_values, we would encode a block-sparse structure of the + # covariance matrix. + # Note: these shear transforms have no effect on the Jacobian + # determinant, and can therefore be excluded from the log_density + # computation below, even for nonlinear dep(). + deps = attrgetter(name)(self.deps) + for upstream in self.dependencies.get(name, {}): + dep = attrgetter(upstream)(deps) + aux_value = aux_value + dep(aux_values[upstream]) + aux_values[name] = aux_value + + # Shift by loc and reshape. + batch_shape = torch.broadcast_shapes( + aux_value.shape[:-1], self._batch_shapes[name] + ) + unconstrained = (aux_value + loc).reshape( + batch_shape + self._unconstrained_event_shapes[name] + ) + if not is_identically_zero(log_density): + log_density = log_density.reshape(batch_shape + (-1,)).sum(-1) + + # Transform to constrained space. + transform = biject_to(site["fn"].support) + value = transform(unconstrained) + if compute_density and conditional != "delta": + assert transform.codomain.event_dim == site["fn"].event_dim + log_density = log_density + transform.inv.log_abs_det_jacobian( + value, unconstrained + ) + + # Create a reparametrized Delta distribution. + deltas[name] = dist.Delta(value, log_density, site["fn"].event_dim) + + return deltas + + def forward(self, *args, **kwargs): + if self.prototype_trace is None: + self._setup_prototype(*args, **kwargs) + + deltas = self.get_deltas() + plates = self._create_plates(*args, **kwargs) + result = {} + for name, site in self._sorted_sites: + with ExitStack() as stack: + for frame in site["cond_indep_stack"]: + if frame.vectorized: + stack.enter_context(plates[frame.name]) + result[name] = pyro.sample(name, deltas[name]) + + return result + + @torch.no_grad() + def median(self, *args, **kwargs): + result = {} + for name, site in self._sorted_sites: + loc = attrgetter(name)(self.locs).detach() + shape = self._batch_shapes[name] + self._unconstrained_event_shapes[name] + loc = loc.reshape(shape) + result[name] = biject_to(site["fn"].support)(loc) + return result diff --git a/pyro/source/pyro/infer/autoguide/utils.py b/pyro/source/pyro/infer/autoguide/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..b790f9ab17858e726974c6533fda2997b573751e --- /dev/null +++ b/pyro/source/pyro/infer/autoguide/utils.py @@ -0,0 +1,86 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import functools +from contextlib import contextmanager + +from pyro import poutine +from pyro.nn.module import PyroModule + + +def _product(shape): + """ + Computes the product of the dimensions of a given shape tensor + """ + result = 1 + for size in shape: + result *= size + return result + + +def deep_setattr(obj, key, val): + """ + Set an attribute `key` on the object. If any of the prefix attributes do + not exist, they are set to :class:`~pyro.nn.PyroModule`. + """ + + def _getattr(obj, attr): + obj_next = getattr(obj, attr, None) + if obj_next is not None: + return obj_next + setattr(obj, attr, PyroModule()) + return getattr(obj, attr) + + lpart, _, rpart = key.rpartition(".") + # Recursive getattr while setting any prefix attributes to PyroModule + if lpart: + obj = functools.reduce(_getattr, [obj] + lpart.split(".")) + setattr(obj, rpart, val) + + +def mean_field_entropy(model, args, whitelist=None): + """Computes the entropy of a model, assuming + that the model is fully mean-field (i.e. all sample sites + in the model are independent). + + The entropy is simply the sum of the entropies at the + individual sites. If `whitelist` is not `None`, only sites + listed in `whitelist` will have their entropies included + in the sum. If `whitelist` is `None`, all non-subsample + sites are included. + """ + trace = poutine.trace(model).get_trace(*args) + entropy = 0.0 + for name, site in trace.nodes.items(): + if site["type"] == "sample": + if not poutine.util.site_is_subsample(site): + if whitelist is None or name in whitelist: + entropy += site["fn"].entropy() + return entropy + + +@contextmanager +def helpful_support_errors(site): + try: + yield + except NotImplementedError as e: + support_name = repr(site["fn"].support).lower() + if site["fn"].support.is_discrete: + name = site["name"] + raise ValueError( + f"Continuous inference cannot handle discrete sample site '{name}'. " + "Consider enumerating that variable as documented in " + "https://pyro.ai/examples/enumeration.html . " + "If you are already enumerating, take care to hide this site when " + "constructing an autoguide, e.g. " + f"guide = AutoNormal(poutine.block(model, hide=['{name}']))." + ) + if "sphere" in support_name: + name = site["name"] + raise ValueError( + f"Continuous inference cannot handle spherical sample site '{name}'. " + "Consider using ProjectedNormal distribution together with " + "a reparameterizer, e.g. " + f"poutine.reparam(config={{'{name}': ProjectedNormalReparam()}})." + ) + raise e from None diff --git a/pyro/source/pyro/infer/csis.py b/pyro/source/pyro/infer/csis.py new file mode 100644 index 0000000000000000000000000000000000000000..471721797099b043ca4e6576f975353ce4afb5f4 --- /dev/null +++ b/pyro/source/pyro/infer/csis.py @@ -0,0 +1,201 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import itertools + +import torch + +import pyro +import pyro.poutine as poutine +from pyro.infer.importance import Importance +from pyro.infer.util import torch_item +from pyro.poutine.util import prune_subsample_sites +from pyro.util import check_model_guide_match, warn_if_nan + + +class CSIS(Importance): + """ + Compiled Sequential Importance Sampling, allowing compilation of a guide + program to minimise KL(model posterior || guide), and inference with + importance sampling. + + **Reference** + "Inference Compilation and Universal Probabilistic Programming" `pdf https://arxiv.org/pdf/1610.09900.pdf` + + :param model: probabilistic model defined as a function. Must accept a + keyword argument named `observations`, in which observed values are + passed as, with the names of nodes as the keys. + :param guide: guide function which is used as an approximate posterior. Must + also accept `observations` as keyword argument. + :param optim: a Pyro optimizer + :type optim: pyro.optim.PyroOptim + :param num_inference_samples: The number of importance-weighted samples to + draw during inference. + :param training_batch_size: Number of samples to use to approximate the loss + before each gradient descent step during training. + :param validation_batch_size: Number of samples to use for calculating + validation loss (will only be used if `.validation_loss` is called). + """ + + def __init__( + self, + model, + guide, + optim, + num_inference_samples=10, + training_batch_size=10, + validation_batch_size=20, + ): + super().__init__(model, guide, num_inference_samples) + self.model = model + self.guide = guide + self.optim = optim + self.training_batch_size = training_batch_size + self.validation_batch_size = validation_batch_size + self.validation_batch = None + + def set_validation_batch(self, *args, **kwargs): + """ + Samples a batch of model traces and stores it as an object property. + + Arguments are passed directly to model. + """ + self.validation_batch = [ + self._sample_from_joint(*args, **kwargs) + for _ in range(self.validation_batch_size) + ] + + def step(self, *args, **kwargs): + """ + :returns: estimate of the loss + :rtype: float + + Take a gradient step on the loss function. Arguments are passed to the + model and guide. + """ + with poutine.trace(param_only=True) as param_capture: + loss = self.loss_and_grads(True, None, *args, **kwargs) + + params = set( + site["value"].unconstrained() + for site in param_capture.trace.nodes.values() + if site["value"].grad is not None + ) + + self.optim(params) + + pyro.infer.util.zero_grads(params) + + return torch_item(loss) + + def loss_and_grads(self, grads, batch, *args, **kwargs): + """ + :returns: an estimate of the loss (expectation over p(x, y) of + -log q(x, y) ) - where p is the model and q is the guide + :rtype: float + + If a batch is provided, the loss is estimated using these traces + Otherwise, a fresh batch is generated from the model. + + If grads is True, will also call `backward` on loss. + + `args` and `kwargs` are passed to the model and guide. + """ + if batch is None: + batch = ( + self._sample_from_joint(*args, **kwargs) + for _ in range(self.training_batch_size) + ) + batch_size = self.training_batch_size + else: + batch_size = len(batch) + + loss = 0 + for model_trace in batch: + with poutine.trace(param_only=True) as particle_param_capture: + guide_trace = self._get_matched_trace(model_trace, *args, **kwargs) + particle_loss = self._differentiable_loss_particle(guide_trace) + particle_loss /= batch_size + + if grads: + guide_params = set( + site["value"].unconstrained() + for site in particle_param_capture.trace.nodes.values() + ) + guide_grads = torch.autograd.grad( + particle_loss, guide_params, allow_unused=True + ) + for guide_grad, guide_param in zip(guide_grads, guide_params): + if guide_grad is None: + continue + guide_param.grad = ( + guide_grad + if guide_param.grad is None + else guide_param.grad + guide_grad + ) + + loss += torch_item(particle_loss) + + warn_if_nan(loss, "loss") + return loss + + def _differentiable_loss_particle(self, guide_trace): + return -guide_trace.log_prob_sum() + + def validation_loss(self, *args, **kwargs): + """ + :returns: loss estimated using validation batch + :rtype: float + + Calculates loss on validation batch. If no validation batch is set, + will set one by calling `set_validation_batch`. Can be used to track + the loss in a less noisy way during training. + + Arguments are passed to the model and guide. + """ + if self.validation_batch is None: + self.set_validation_batch(*args, **kwargs) + + return self.loss_and_grads(False, self.validation_batch, *args, **kwargs) + + def _get_matched_trace(self, model_trace, *args, **kwargs): + """ + :param model_trace: a trace from the model + :type model_trace: pyro.poutine.trace_struct.Trace + :returns: guide trace with sampled values matched to model_trace + :rtype: pyro.poutine.trace_struct.Trace + + Returns a guide trace with values at sample and observe statements + matched to those in model_trace. + + `args` and `kwargs` are passed to the guide. + """ + kwargs["observations"] = {} + for node in itertools.chain( + model_trace.stochastic_nodes, model_trace.observation_nodes + ): + if "was_observed" in model_trace.nodes[node]["infer"]: + model_trace.nodes[node]["is_observed"] = True + kwargs["observations"][node] = model_trace.nodes[node]["value"] + + guide_trace = poutine.trace(poutine.replay(self.guide, model_trace)).get_trace( + *args, **kwargs + ) + + check_model_guide_match(model_trace, guide_trace) + guide_trace = prune_subsample_sites(guide_trace) + + return guide_trace + + def _sample_from_joint(self, *args, **kwargs): + """ + :returns: a sample from the joint distribution over unobserved and + observed variables + :rtype: pyro.poutine.trace_struct.Trace + + Returns a trace of the model without conditioning on any observations. + + Arguments are passed directly to the model. + """ + unconditioned_model = pyro.poutine.uncondition(self.model) + return poutine.trace(unconditioned_model).get_trace(*args, **kwargs) diff --git a/pyro/source/pyro/infer/discrete.py b/pyro/source/pyro/infer/discrete.py new file mode 100644 index 0000000000000000000000000000000000000000..a89294abd2dc15567b9c44b65856602dd127eec3 --- /dev/null +++ b/pyro/source/pyro/infer/discrete.py @@ -0,0 +1,283 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import functools +import warnings +from collections import OrderedDict + +from opt_einsum import shared_intermediates + +import pyro.ops.packed as packed +from pyro import poutine +from pyro.infer.traceenum_elbo import TraceEnum_ELBO +from pyro.ops.contract import contract_tensor_tree +from pyro.ops.einsum.adjoint import require_backward +from pyro.ops.rings import MapRing, SampleRing +from pyro.poutine.enum_messenger import EnumMessenger +from pyro.poutine.replay_messenger import ReplayMessenger +from pyro.poutine.util import prune_subsample_sites +from pyro.util import jit_iter + +_RINGS = {0: MapRing, 1: SampleRing} + + +def _make_ring(temperature, cache, dim_to_size): + try: + return _RINGS[temperature](cache=cache, dim_to_size=dim_to_size) + except KeyError as e: + raise ValueError("temperature must be 0 (map) or 1 (sample) for now") from e + + +class SamplePosteriorMessenger(ReplayMessenger): + # This acts like ReplayMessenger but additionally replays cond_indep_stack. + + def _pyro_sample(self, msg): + if msg["infer"].get("enumerate") == "parallel": + super()._pyro_sample(msg) + if msg["name"] in self.trace: + msg["cond_indep_stack"] = self.trace.nodes[msg["name"]]["cond_indep_stack"] + + +def _sample_posterior( + model, first_available_dim, temperature, strict_enumeration_warning, *args, **kwargs +): + # For internal use by infer_discrete. + + # Create an enumerated trace. + with poutine.block(), EnumMessenger(first_available_dim): + enum_trace = poutine.trace(model).get_trace(*args, **kwargs) + enum_trace = prune_subsample_sites(enum_trace) + enum_trace.compute_log_prob() + enum_trace.pack_tensors() + + return _sample_posterior_from_trace( + model, enum_trace, temperature, strict_enumeration_warning, *args, **kwargs + ) + + +def _sample_posterior_from_trace( + model, enum_trace, temperature, strict_enumeration_warning, *args, **kwargs +): + plate_to_symbol = enum_trace.plate_to_symbol + + # Collect a set of query sample sites to which the backward algorithm will propagate. + sum_dims = set() + queries = [] + dim_to_size = {} + cost_terms = OrderedDict() + enum_terms = OrderedDict() + for node in enum_trace.nodes.values(): + if node["type"] == "sample": + ordinal = frozenset( + plate_to_symbol[f.name] + for f in node["cond_indep_stack"] + if f.vectorized and f.size > 1 + ) + # For sites that depend on an enumerated variable, we need to apply + # the mask but not the scale when sampling. + if "masked_log_prob" not in node["packed"]: + node["packed"]["masked_log_prob"] = packed.scale_and_mask( + node["packed"]["unscaled_log_prob"], mask=node["packed"]["mask"] + ) + log_prob = node["packed"]["masked_log_prob"] + sum_dims.update(frozenset(log_prob._pyro_dims) - ordinal) + if sum_dims.isdisjoint(log_prob._pyro_dims): + continue + dim_to_size.update(zip(log_prob._pyro_dims, log_prob.shape)) + if node["infer"].get("_enumerate_dim") is None: + cost_terms.setdefault(ordinal, []).append(log_prob) + else: + enum_terms.setdefault(ordinal, []).append(log_prob) + # Note we mark all sample sites with require_backward to gather + # enumerated sites and adjust cond_indep_stack of all sample sites. + if not node["is_observed"]: + queries.append(log_prob) + require_backward(log_prob) + + if strict_enumeration_warning and not enum_terms: + warnings.warn( + "infer_discrete found no sample sites configured for enumeration. " + "If you want to enumerate sites, you need to @config_enumerate or set " + 'infer={"enumerate": "sequential"} or infer={"enumerate": "parallel"}.' + ) + + # We take special care to match the term ordering in + # pyro.infer.traceenum_elbo._compute_model_factors() to allow + # contract_tensor_tree() to use shared_intermediates() inside + # TraceEnumSample_ELBO. The special ordering is: first all cost terms in + # order of model_trace, then all enum_terms in order of model trace. + log_probs = cost_terms + for ordinal, terms in enum_terms.items(): + log_probs.setdefault(ordinal, []).extend(terms) + + # Run forward-backward algorithm, collecting the ordinal of each connected component. + cache = getattr(enum_trace, "_sharing_cache", {}) + ring = _make_ring(temperature, cache, dim_to_size) + with shared_intermediates(cache): + log_probs = contract_tensor_tree( + log_probs, sum_dims, ring=ring + ) # run forward algorithm + query_to_ordinal = {} + pending = object() # a constant value for pending queries + for query in queries: + query._pyro_backward_result = pending + for ordinal, terms in log_probs.items(): + for term in terms: + if hasattr(term, "_pyro_backward"): + term._pyro_backward() # run backward algorithm + # Note: this is quadratic in number of ordinals + for query in queries: + if ( + query not in query_to_ordinal + and query._pyro_backward_result is not pending + ): + query_to_ordinal[query] = ordinal + + # Construct a collapsed trace by gathering and adjusting cond_indep_stack. + collapsed_trace = poutine.Trace() + for node in enum_trace.nodes.values(): + if node["type"] == "sample" and not node["is_observed"]: + # TODO move this into a Leaf implementation somehow + new_node = { + "type": "sample", + "name": node["name"], + "is_observed": False, + "infer": node["infer"].copy(), + "cond_indep_stack": node["cond_indep_stack"], + "value": node["value"], + } + log_prob = node["packed"]["masked_log_prob"] + if hasattr(log_prob, "_pyro_backward_result"): + # Adjust the cond_indep_stack. + ordinal = query_to_ordinal[log_prob] + new_node["cond_indep_stack"] = tuple( + f + for f in node["cond_indep_stack"] + if not (f.vectorized and f.size > 1) + or plate_to_symbol[f.name] in ordinal + ) + + # Gather if node depended on an enumerated value. + sample = log_prob._pyro_backward_result + if sample is not None: + new_value = packed.pack( + node["value"], node["infer"]["_dim_to_symbol"] + ) + for index, dim in zip(jit_iter(sample), sample._pyro_sample_dims): + if dim in new_value._pyro_dims: + index._pyro_dims = sample._pyro_dims[1:] + new_value = packed.gather(new_value, index, dim) + new_node["value"] = packed.unpack( + new_value, enum_trace.symbol_to_dim + ) + + collapsed_trace.add_node(node["name"], **new_node) + + # Replay the model against the collapsed trace. + with SamplePosteriorMessenger(trace=collapsed_trace): + return model(*args, **kwargs) + + +def infer_discrete( + fn=None, first_available_dim=None, temperature=1, *, strict_enumeration_warning=True +): + """ + A poutine that samples discrete sites marked with + ``site["infer"]["enumerate"] = "parallel"`` from the posterior, + conditioned on observations. + + Example:: + + @infer_discrete(first_available_dim=-1, temperature=0) + @config_enumerate + def viterbi_decoder(data, hidden_dim=10): + transition = 0.3 / hidden_dim + 0.7 * torch.eye(hidden_dim) + means = torch.arange(float(hidden_dim)) + states = [0] + for t in pyro.markov(range(len(data))): + states.append(pyro.sample("states_{}".format(t), + dist.Categorical(transition[states[-1]]))) + pyro.sample("obs_{}".format(t), + dist.Normal(means[states[-1]], 1.), + obs=data[t]) + return states # returns maximum likelihood states + + .. warning: The ``log_prob``s of the inferred model's trace are not + meaningful, and may be changed future release. + + :param fn: a stochastic function (callable containing Pyro primitive calls) + :param int first_available_dim: The first tensor dimension (counting + from the right) that is available for parallel enumeration. This + dimension and all dimensions left may be used internally by Pyro. + This should be a negative integer. + :param int temperature: Either 1 (sample via forward-filter backward-sample) + or 0 (optimize via Viterbi-like MAP inference). Defaults to 1 (sample). + :param bool strict_enumeration_warning: Whether to warn in case no + enumerated sample sites are found. Defalts to True. + """ + assert first_available_dim < 0, first_available_dim + if fn is None: # support use as a decorator + return functools.partial( + infer_discrete, + first_available_dim=first_available_dim, + temperature=temperature, + ) + return functools.partial( + _sample_posterior, + fn, + first_available_dim, + temperature, + strict_enumeration_warning, + ) + + +class TraceEnumSample_ELBO(TraceEnum_ELBO): + """ + This extends :class:`TraceEnum_ELBO` to make it cheaper to sample from + discrete latent states during SVI. + + The following are equivalent but the first is cheaper, sharing work + between the computations of ``loss`` and ``z``:: + + # Version 1. + elbo = TraceEnumSample_ELBO(max_plate_nesting=1) + loss = elbo.loss(*args, **kwargs) + z = elbo.sample_saved() + + # Version 2. + elbo = TraceEnum_ELBO(max_plate_nesting=1) + loss = elbo.loss(*args, **kwargs) + guide_trace = poutine.trace(guide).get_trace(*args, **kwargs) + z = infer_discrete(poutine.replay(model, guide_trace), + first_available_dim=-2)(*args, **kwargs) + + """ + + def _get_trace(self, model, guide, args, kwargs): + model_trace, guide_trace = super()._get_trace(model, guide, args, kwargs) + + # Mark all sample sites with require_backward to gather enumerated + # sites and adjust cond_indep_stack of all sample sites. + for node in model_trace.nodes.values(): + if node["type"] == "sample" and not node["is_observed"]: + log_prob = node["packed"]["unscaled_log_prob"] + require_backward(log_prob) + + self._saved_state = model, model_trace, guide_trace, args, kwargs + return model_trace, guide_trace + + def sample_saved(self): + """ + Generate latent samples while reusing work from SVI.step(). + """ + model, model_trace, guide_trace, args, kwargs = self._saved_state + model = poutine.replay(model, guide_trace) + temperature = 1 + return _sample_posterior_from_trace( + model, + model_trace, + temperature, + self.strict_enumeration_warning, + *args, + **kwargs + ) diff --git a/pyro/source/pyro/infer/elbo.py b/pyro/source/pyro/infer/elbo.py new file mode 100644 index 0000000000000000000000000000000000000000..b3b06fd704bad4b6ba2893d1151740c6346ba50c --- /dev/null +++ b/pyro/source/pyro/infer/elbo.py @@ -0,0 +1,239 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging +import warnings +from abc import ABCMeta, abstractmethod + +import torch + +import pyro +import pyro.poutine as poutine +from pyro.infer.util import is_validation_enabled +from pyro.poutine.util import prune_subsample_sites +from pyro.util import check_site_shape + +logger = logging.getLogger(__name__) + + +class ELBOModule(torch.nn.Module): + def __init__(self, model: torch.nn.Module, guide: torch.nn.Module, elbo: "ELBO"): + super().__init__() + self.model = model + self.guide = guide + self.elbo = elbo + + def forward(self, *args, **kwargs): + return self.elbo.differentiable_loss(self.model, self.guide, *args, **kwargs) + + +class ELBO(object, metaclass=ABCMeta): + """ + :class:`ELBO` is the top-level interface for stochastic variational + inference via optimization of the evidence lower bound. + + Most users will not interact with this base class :class:`ELBO` directly; + instead they will create instances of derived classes: + :class:`~pyro.infer.trace_elbo.Trace_ELBO`, + :class:`~pyro.infer.tracegraph_elbo.TraceGraph_ELBO`, or + :class:`~pyro.infer.traceenum_elbo.TraceEnum_ELBO`. + + .. note:: Derived classes now provide a more idiomatic PyTorch interface via + :meth:`__call__` for (model, guide) pairs that are :class:`~torch.nn.Module` s, + which is useful for integrating Pyro's variational inference tooling with + standard PyTorch interfaces like :class:`~torch.optim.Optimizer` s + and the large ecosystem of libraries like PyTorch Lightning + and the PyTorch JIT that work with these interfaces:: + + model = Model() + guide = pyro.infer.autoguide.AutoNormal(model) + + elbo_ = pyro.infer.Trace_ELBO(num_particles=10) + + # Fix the model/guide pair + elbo = elbo_(model, guide) + + # perform any data-dependent initialization + elbo(data) + + optim = torch.optim.Adam(elbo.parameters(), lr=0.001) + + for _ in range(100): + optim.zero_grad() + loss = elbo(data) + loss.backward() + optim.step() + + Note that Pyro's global parameter store may cause this new interface to + behave unexpectedly relative to standard PyTorch when working with + :class:`~pyro.nn.PyroModule` s. + + Users are therefore strongly encouraged to use this interface in + conjunction with ``pyro.settings.set(module_local_params=True)`` which + will override the default implicit sharing of parameters across + :class:`~pyro.nn.PyroModule` instances. + + :param num_particles: The number of particles/samples used to form the ELBO + (gradient) estimators. + :param int max_plate_nesting: Optional bound on max number of nested + :func:`pyro.plate` contexts. This is only required when enumerating + over sample sites in parallel, e.g. if a site sets + ``infer={"enumerate": "parallel"}``. If omitted, ELBO may guess a valid + value by running the (model,guide) pair once, however this guess may + be incorrect if model or guide structure is dynamic. + :param bool vectorize_particles: Whether to vectorize the ELBO computation + over `num_particles`. Defaults to False. This requires static structure + in model and guide. + :param bool strict_enumeration_warning: Whether to warn about possible + misuse of enumeration, i.e. that + :class:`pyro.infer.traceenum_elbo.TraceEnum_ELBO` is used iff there + are enumerated sample sites. + :param bool ignore_jit_warnings: Flag to ignore warnings from the JIT + tracer. When this is True, all :class:`torch.jit.TracerWarning` will + be ignored. Defaults to False. + :param bool jit_options: Optional dict of options to pass to + :func:`torch.jit.trace` , e.g. ``{"check_trace": True}``. + :param bool retain_graph: Whether to retain autograd graph during an SVI + step. Defaults to None (False). + :param float tail_adaptive_beta: Exponent beta with ``-1.0 <= beta < 0.0`` for + use with `TraceTailAdaptive_ELBO`. + + References + + [1] `Automated Variational Inference in Probabilistic Programming` + David Wingate, Theo Weber + + [2] `Black Box Variational Inference`, + Rajesh Ranganath, Sean Gerrish, David M. Blei + """ + + def __init__( + self, + num_particles=1, + max_plate_nesting=float("inf"), + max_iarange_nesting=None, # DEPRECATED + vectorize_particles=False, + strict_enumeration_warning=True, + ignore_jit_warnings=False, + jit_options=None, + retain_graph=None, + tail_adaptive_beta=-1.0, + ): + if max_iarange_nesting is not None: + warnings.warn( + "max_iarange_nesting is deprecated; use max_plate_nesting instead", + DeprecationWarning, + ) + max_plate_nesting = max_iarange_nesting + self.max_plate_nesting = max_plate_nesting + self.num_particles = num_particles + self.vectorize_particles = vectorize_particles + self.retain_graph = retain_graph + if self.vectorize_particles and self.num_particles > 1: + self.max_plate_nesting += 1 + self.strict_enumeration_warning = strict_enumeration_warning + self.ignore_jit_warnings = ignore_jit_warnings + self.jit_options = jit_options + self.tail_adaptive_beta = tail_adaptive_beta + + def __call__(self, model: torch.nn.Module, guide: torch.nn.Module) -> ELBOModule: + """ + Given a model and guide, returns a :class:`~torch.nn.Module` which + computes the ELBO loss when called with arguments to the model and guide. + """ + return ELBOModule(model, guide, self) + + def _guess_max_plate_nesting(self, model, guide, args, kwargs): + """ + Guesses max_plate_nesting by running the (model,guide) pair once + without enumeration. This optimistically assumes static model + structure. + """ + # Ignore validation to allow model-enumerated sites absent from the guide. + with poutine.block(): + guide_trace = poutine.trace(guide).get_trace(*args, **kwargs) + model_trace = poutine.trace( + poutine.replay(model, trace=guide_trace) + ).get_trace(*args, **kwargs) + guide_trace = prune_subsample_sites(guide_trace) + model_trace = prune_subsample_sites(model_trace) + sites = [ + site + for trace in (model_trace, guide_trace) + for site in trace.nodes.values() + if site["type"] == "sample" + ] + + # Validate shapes now, since shape constraints will be weaker once + # max_plate_nesting is changed from float('inf') to some finite value. + # Here we know the traces are not enumerated, but later we'll need to + # allow broadcasting of dims to the left of max_plate_nesting. + if is_validation_enabled(): + guide_trace.compute_log_prob() + model_trace.compute_log_prob() + for site in sites: + check_site_shape(site, max_plate_nesting=float("inf")) + + dims = [ + frame.dim + for site in sites + for frame in site["cond_indep_stack"] + if frame.vectorized + ] + self.max_plate_nesting = -min(dims) if dims else 0 + if self.vectorize_particles and self.num_particles > 1: + self.max_plate_nesting += 1 + logger.info("Guessed max_plate_nesting = {}".format(self.max_plate_nesting)) + + def _vectorized_num_particles(self, fn): + """ + Wraps a callable inside an outermost :class:`~pyro.plate` to parallelize + ELBO computation over `num_particles`, and to broadcast batch shapes of + sample site functions in accordance with the `~pyro.plate` contexts + within which they are embedded. + + :param fn: arbitrary callable containing Pyro primitives. + :return: wrapped callable. + """ + + if self.num_particles == 1: + return fn + return pyro.plate( + "num_particles_vectorized", + self.num_particles, + dim=-self.max_plate_nesting, + )(fn) + + def _get_vectorized_trace(self, model, guide, args, kwargs): + """ + Wraps the model and guide to vectorize ELBO computation over + ``num_particles``, and returns a single trace from the wrapped model + and guide. + """ + return self._get_trace( + self._vectorized_num_particles(model), + self._vectorized_num_particles(guide), + args, + kwargs, + ) + + @abstractmethod + def _get_trace(self, model, guide, args, kwargs): + """ + Returns a single trace from the guide, and the model that is run + against it. + """ + raise NotImplementedError + + def _get_traces(self, model, guide, args, kwargs): + """ + Runs the guide and runs the model against the guide with + the result packaged as a trace generator. + """ + if self.vectorize_particles: + if self.max_plate_nesting == float("inf"): + self._guess_max_plate_nesting(model, guide, args, kwargs) + yield self._get_vectorized_trace(model, guide, args, kwargs) + else: + for i in range(self.num_particles): + yield self._get_trace(model, guide, args, kwargs) diff --git a/pyro/source/pyro/infer/energy_distance.py b/pyro/source/pyro/infer/energy_distance.py new file mode 100644 index 0000000000000000000000000000000000000000..535586a39592e32531045088e54692fce94c25bd --- /dev/null +++ b/pyro/source/pyro/infer/energy_distance.py @@ -0,0 +1,229 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import operator +from collections import OrderedDict +from functools import reduce + +import torch + +import pyro +import pyro.poutine as poutine +from pyro.distributions.util import scale_and_mask +from pyro.infer.elbo import ELBO +from pyro.infer.util import is_validation_enabled, validation_enabled +from pyro.poutine.util import prune_subsample_sites +from pyro.util import check_model_guide_match, check_site_shape, warn_if_nan + + +def _squared_error(x, y, scale, mask): + diff = x - y + if getattr(scale, "shape", ()) or getattr(mask, "shape", ()): + error = torch.einsum("nbe,nbe->nb", diff, diff) + return scale_and_mask(error, scale, mask).sum(-1) + else: + error = torch.einsum("nbe,nbe->n", diff, diff) + return scale_and_mask(error, scale, mask) + + +class EnergyDistance: + r""" + Posterior predictive energy distance [1,2] with optional Bayesian + regularization by the prior. + + Let `p(x,z)=p(z) p(x|z)` be the model, `q(z|x)` be the guide. Then given + data `x` and drawing an iid pair of samples :math:`(Z,X)` and + :math:`(Z',X')` (where `Z` is latent and `X` is the posterior predictive), + + .. math :: + + & Z \sim q(z|x); \quad X \sim p(x|Z) \\ + & Z' \sim q(z|x); \quad X' \sim p(x|Z') \\ + & loss = \mathbb E_X \|X-x\|^\beta + - \frac 1 2 \mathbb E_{X,X'}\|X-X'\|^\beta + - \lambda \mathbb E_Z \log p(Z) + + This is a likelihood-free inference algorithm, and can be used for + likelihoods without tractable density functions. The :math:`\beta` energy + distance is a robust loss functions, and is well defined for any + distribution with finite fractional moment :math:`\mathbb E[\|X\|^\beta]`. + + This requires static model structure, a fully reparametrized guide, and + reparametrized likelihood distributions in the model. Model latent + distributions may be non-reparametrized. + + **References** + + [1] Gabor J. Szekely, Maria L. Rizzo (2003) + Energy Statistics: A Class of Statistics Based on Distances. + [2] Tilmann Gneiting, Adrian E. Raftery (2007) + Strictly Proper Scoring Rules, Prediction, and Estimation. + https://www.stat.washington.edu/raftery/Research/PDF/Gneiting2007jasa.pdf + + :param float beta: Exponent :math:`\beta` from [1,2]. The loss function is + strictly proper for distributions with finite :math:`beta`-absolute moment + :math:`E[\|X\|^\beta]`. Thus for heavy tailed distributions ``beta`` should + be small, e.g. for ``Cauchy`` distributions, :math:`\beta<1` is strictly + proper. Defaults to 1. Must be in the open interval (0,2). + :param float prior_scale: Nonnegative scale for prior regularization. + Model parameters are trained only if this is positive. + If zero (default), then model log densities will not be computed + (guide log densities are never computed). + :param int num_particles: The number of particles/samples used to form the + gradient estimators. Must be at least 2. + :param int max_plate_nesting: Optional bound on max number of nested + :func:`pyro.plate` contexts. If omitted, this will guess a valid value + by running the (model,guide) pair once. + """ + + def __init__( + self, beta=1.0, prior_scale=0.0, num_particles=2, max_plate_nesting=float("inf") + ): + if not (isinstance(beta, (float, int)) and 0 < beta and beta < 2): + raise ValueError("Expected beta in (0,2), actual {}".format(beta)) + if not (isinstance(prior_scale, (float, int)) and prior_scale >= 0): + raise ValueError("Expected prior_scale >= 0, actual {}".format(prior_scale)) + if not (isinstance(num_particles, int) and num_particles >= 2): + raise ValueError( + "Expected num_particles >= 2, actual {}".format(num_particles) + ) + self.beta = beta + self.prior_scale = prior_scale + self.num_particles = num_particles + self.vectorize_particles = True + self.max_plate_nesting = max_plate_nesting + + def _pow(self, x): + if self.beta == 1: + return x.sqrt() # cheaper than .pow() + return x.pow(self.beta / 2) + + def _get_traces(self, model, guide, args, kwargs): + if self.max_plate_nesting == float("inf"): + with validation_enabled(False): # Avoid calling .log_prob() when undefined. + # TODO factor this out as a stand-alone helper. + ELBO._guess_max_plate_nesting(self, model, guide, args, kwargs) + vectorize = pyro.plate( + "num_particles_vectorized", self.num_particles, dim=-self.max_plate_nesting + ) + + # Trace the guide as in ELBO. + with poutine.trace() as tr, vectorize: + guide(*args, **kwargs) + guide_trace = tr.trace + + # Trace the model, drawing posterior predictive samples. + with poutine.trace() as tr, poutine.uncondition(): + with poutine.replay(trace=guide_trace), vectorize: + model(*args, **kwargs) + model_trace = tr.trace + for site in model_trace.nodes.values(): + if site["type"] == "sample" and site["infer"].get("was_observed", False): + site["is_observed"] = True + if is_validation_enabled(): + check_model_guide_match(model_trace, guide_trace, self.max_plate_nesting) + + guide_trace = prune_subsample_sites(guide_trace) + model_trace = prune_subsample_sites(model_trace) + if is_validation_enabled(): + for site in guide_trace.nodes.values(): + if site["type"] == "sample": + warn_if_nan(site["value"], site["name"]) + if not getattr(site["fn"], "has_rsample", False): + raise ValueError( + "EnergyDistance requires fully reparametrized guides" + ) + for trace in model_trace.nodes.values(): + if site["type"] == "sample": + if site["is_observed"]: + warn_if_nan(site["value"], site["name"]) + if not getattr(site["fn"], "has_rsample", False): + raise ValueError( + "EnergyDistance requires reparametrized likelihoods" + ) + + if self.prior_scale > 0: + model_trace.compute_log_prob( + site_filter=lambda name, site: not site["is_observed"] + ) + if is_validation_enabled(): + for site in model_trace.nodes.values(): + if site["type"] == "sample": + if not site["is_observed"]: + check_site_shape(site, self.max_plate_nesting) + + return guide_trace, model_trace + + def __call__(self, model, guide, *args, **kwargs): + """ + Computes the surrogate loss that can be differentiated with autograd + to produce gradient estimates for the model and guide parameters. + """ + guide_trace, model_trace = self._get_traces(model, guide, args, kwargs) + + # Extract observations and posterior predictive samples. + data = OrderedDict() + samples = OrderedDict() + for name, site in model_trace.nodes.items(): + if site["type"] == "sample" and site["is_observed"]: + data[name] = site["infer"]["obs"] + samples[name] = site["value"] + assert list(data.keys()) == list(samples.keys()) + if not data: + raise ValueError("Found no observations") + + # Compute energy distance from mean average error and generalized entropy. + squared_error = [] # E[ (X - x)^2 ] + squared_entropy = [] # E[ (X - X')^2 ] + prototype = next(iter(data.values())) + pairs = ( + prototype.new_ones(self.num_particles, self.num_particles) + .tril(-1) + .nonzero(as_tuple=False) + ) + for name, obs in data.items(): + sample = samples[name] + scale = model_trace.nodes[name]["scale"] + mask = model_trace.nodes[name]["mask"] + + # Flatten to subshapes of (num_particles, batch_size, event_size). + event_dim = model_trace.nodes[name]["fn"].event_dim + batch_shape = obs.shape[: obs.dim() - event_dim] + event_shape = obs.shape[obs.dim() - event_dim :] + if getattr(scale, "shape", ()): + scale = scale.expand(batch_shape).reshape(-1) + if getattr(mask, "shape", ()): + mask = mask.expand(batch_shape).reshape(-1) + obs = obs.reshape(batch_shape.numel(), event_shape.numel()) + sample = sample.reshape( + self.num_particles, batch_shape.numel(), event_shape.numel() + ) + + squared_error.append(_squared_error(sample, obs, scale, mask)) + squared_entropy.append( + _squared_error(*sample[pairs].unbind(1), scale, mask) + ) + + squared_error = reduce(operator.add, squared_error) + squared_entropy = reduce(operator.add, squared_entropy) + error = self._pow(squared_error).mean() # E[ ||X-x||^beta ] + entropy = self._pow(squared_entropy).mean() # E[ ||X-X'||^beta ] + energy = error - 0.5 * entropy + + # Compute prior. + log_prior = 0 + if self.prior_scale > 0: + for site in model_trace.nodes.values(): + if site["type"] == "sample" and not site["is_observed"]: + log_prior = log_prior + site["log_prob_sum"] + + # Compute final loss. + loss = energy - self.prior_scale * log_prior + warn_if_nan(loss, "loss") + return loss + + def loss(self, *args, **kwargs): + """ + Not implemented. Added for compatibility with unit tests only. + """ + raise NotImplementedError("EnergyDistance implements only surrogate loss") diff --git a/pyro/source/pyro/infer/enum.py b/pyro/source/pyro/infer/enum.py new file mode 100644 index 0000000000000000000000000000000000000000..3a07e86899a1eee6e130578f2889f2a733b28e06 --- /dev/null +++ b/pyro/source/pyro/infer/enum.py @@ -0,0 +1,220 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import numbers +from functools import partial +from queue import LifoQueue + +from pyro import poutine +from pyro.infer.util import is_validation_enabled +from pyro.poutine import Trace +from pyro.poutine.enum_messenger import enumerate_site +from pyro.poutine.util import prune_subsample_sites +from pyro.util import check_model_guide_match, check_site_shape, ignore_jit_warnings + + +def iter_discrete_escape(trace, msg): + return ( + (msg["type"] == "sample") + and (not msg["is_observed"]) + and (msg["infer"].get("enumerate") == "sequential") + and (msg["name"] not in trace) # only sequential + ) + + +def iter_discrete_extend(trace, site, **ignored): + values = enumerate_site(site) + enum_total = values.shape[0] + with ignore_jit_warnings( + [ + "Converting a tensor to a Python index", + ("Iterating over a tensor", RuntimeWarning), + ] + ): + values = iter(values) + for i, value in enumerate(values): + extended_site = site.copy() + extended_site["infer"] = site["infer"].copy() + extended_site["infer"]["_enum_total"] = enum_total + extended_site["value"] = value + extended_trace = trace.copy() + extended_trace.add_node(site["name"], **extended_site) + yield extended_trace + + +def get_importance_trace( + graph_type, max_plate_nesting, model, guide, args, kwargs, detach=False +): + """ + Returns a single trace from the guide, which can optionally be detached, + and the model that is run against it. + """ + # Dispatch between callables vs GuideMessengers. + unwrapped_guide = poutine.unwrap(guide) + if isinstance(unwrapped_guide, poutine.messenger.Messenger): + if detach: + raise NotImplementedError("GuideMessenger does not support detach") + guide(*args, **kwargs) + model_trace, guide_trace = unwrapped_guide.get_traces() + else: + guide_trace = poutine.trace(guide, graph_type=graph_type).get_trace( + *args, **kwargs + ) + if detach: + guide_trace.detach_() + model_trace = poutine.trace( + poutine.replay(model, trace=guide_trace), graph_type=graph_type + ).get_trace(*args, **kwargs) + + if is_validation_enabled(): + check_model_guide_match(model_trace, guide_trace, max_plate_nesting) + + guide_trace = prune_subsample_sites(guide_trace) + model_trace = prune_subsample_sites(model_trace) + + model_trace.compute_log_prob() + guide_trace.compute_score_parts() + if is_validation_enabled(): + for site in model_trace.nodes.values(): + if site["type"] == "sample": + check_site_shape(site, max_plate_nesting) + for site in guide_trace.nodes.values(): + if site["type"] == "sample": + check_site_shape(site, max_plate_nesting) + + return model_trace, guide_trace + + +def iter_discrete_traces(graph_type, fn, *args, **kwargs): + """ + Iterate over all discrete choices of a stochastic function. + + When sampling continuous random variables, this behaves like `fn`. + When sampling discrete random variables, this iterates over all choices. + + This yields traces scaled by the probability of the discrete choices made + in the `trace`. + + :param str graph_type: The type of the graph, e.g. "flat" or "dense". + :param callable fn: A stochastic function. + :returns: An iterator over traces pairs. + """ + queue = LifoQueue() + queue.put(Trace()) + traced_fn = poutine.trace( + poutine.queue( + fn, queue, escape_fn=iter_discrete_escape, extend_fn=iter_discrete_extend + ), + graph_type=graph_type, + ) + while not queue.empty(): + yield traced_fn.get_trace(*args, **kwargs) + + +def _config_fn(default, expand, num_samples, tmc, site): + if site["type"] != "sample" or site["is_observed"]: + return {} + if type(site["fn"]).__name__ == "_Subsample": + return {} + if num_samples is not None: + return { + "enumerate": site["infer"].get("enumerate", default), + "num_samples": site["infer"].get("num_samples", num_samples), + "expand": site["infer"].get("expand", expand), + "tmc": site["infer"].get("tmc", tmc), + } + if getattr(site["fn"], "has_enumerate_support", False): + return { + "enumerate": site["infer"].get("enumerate", default), + "expand": site["infer"].get("expand", expand), + } + return {} + + +def _config_enumerate(default, expand, num_samples, tmc): + return partial(_config_fn, default, expand, num_samples, tmc) + + +def config_enumerate( + guide=None, default="parallel", expand=False, num_samples=None, tmc="diagonal" +): + """ + Configures enumeration for all relevant sites in a guide. This is mainly + used in conjunction with :class:`~pyro.infer.traceenum_elbo.TraceEnum_ELBO`. + + When configuring for exhaustive enumeration of discrete variables, this + configures all sample sites whose distribution satisfies + ``.has_enumerate_support == True``. + When configuring for local parallel Monte Carlo sampling via + ``default="parallel", num_samples=n``, this configures all sample sites. + This does not overwrite existing annotations ``infer={"enumerate": ...}``. + + This can be used as either a function:: + + guide = config_enumerate(guide) + + or as a decorator:: + + @config_enumerate + def guide1(*args, **kwargs): + ... + + @config_enumerate(default="sequential", expand=True) + def guide2(*args, **kwargs): + ... + + :param callable guide: a pyro model that will be used as a guide in + :class:`~pyro.infer.svi.SVI`. + :param str default: Which enumerate strategy to use, one of + "sequential", "parallel", or None. Defaults to "parallel". + :param bool expand: Whether to expand enumerated sample values. See + :meth:`~pyro.distributions.Distribution.enumerate_support` for details. + This only applies to exhaustive enumeration, where ``num_samples=None``. + If ``num_samples`` is not ``None``, then this samples will always be + expanded. + :param num_samples: if not ``None``, use local Monte Carlo sampling rather + than exhaustive enumeration. This makes sense for both continuous and + discrete distributions. + :type num_samples: int or None + :param tmc: "mixture" or "diagonal" strategies to use in Tensor Monte Carlo + :type tmc: string or None + :return: an annotated guide + :rtype: callable + """ + if default not in ["sequential", "parallel", "flat", None]: + raise ValueError( + "Invalid default value. Expected 'sequential', 'parallel', or None, but got {}".format( + repr(default) + ) + ) + if expand not in [True, False]: + raise ValueError( + "Invalid expand value. Expected True or False, but got {}".format( + repr(expand) + ) + ) + if num_samples is not None: + if not (isinstance(num_samples, numbers.Number) and num_samples > 0): + raise ValueError( + "Invalid num_samples, expected None or positive integer, but got {}".format( + repr(num_samples) + ) + ) + if default == "sequential": + raise ValueError( + 'Local sampling does not support "sequential" sampling; ' + 'use "parallel" sampling instead.' + ) + if tmc == "full" and num_samples is not None and num_samples > 1: + # tmc strategies validated elsewhere (within enum handler) + expand = True + + # Support usage as a decorator: + if guide is None: + return lambda guide: config_enumerate( + guide, default=default, expand=expand, num_samples=num_samples, tmc=tmc + ) + + return poutine.infer_config( + guide, config_fn=_config_enumerate(default, expand, num_samples, tmc) + ) diff --git a/pyro/source/pyro/infer/importance.py b/pyro/source/pyro/infer/importance.py new file mode 100644 index 0000000000000000000000000000000000000000..ca088645cb03f32346d2b105e3db9dcf6e3ddebc --- /dev/null +++ b/pyro/source/pyro/infer/importance.py @@ -0,0 +1,254 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math +import warnings +from typing import List, Union + +import torch + +import pyro +import pyro.poutine as poutine +from pyro.ops.stats import fit_generalized_pareto + +from .abstract_infer import TracePosterior +from .enum import get_importance_trace +from .util import plate_log_prob_sum + + +class LogWeightsMixin: + """ + Mixin class to compute analytics from a ``.log_weights`` attribute. + """ + + log_weights: Union[List[Union[float, torch.Tensor]], torch.Tensor] + + def get_log_normalizer(self): + """ + Estimator of the normalizing constant of the target distribution. + (mean of the unnormalized weights) + """ + # ensure list is not empty + if len(self.log_weights) > 0: + log_w = ( + self.log_weights + if isinstance(self.log_weights, torch.Tensor) + else torch.tensor(self.log_weights) + ) + log_num_samples = torch.log(torch.tensor(log_w.numel() * 1.0)) + return torch.logsumexp(log_w - log_num_samples, 0) + else: + warnings.warn( + "The log_weights list is empty, can not compute normalizing constant estimate." + ) + + def get_normalized_weights(self, log_scale=False): + """ + Compute the normalized importance weights. + """ + if len(self.log_weights) > 0: + log_w = ( + self.log_weights + if isinstance(self.log_weights, torch.Tensor) + else torch.tensor(self.log_weights) + ) + log_w_norm = log_w - torch.logsumexp(log_w, 0) + return log_w_norm if log_scale else torch.exp(log_w_norm) + else: + warnings.warn( + "The log_weights list is empty. There is nothing to normalize." + ) + + def get_ESS(self): + """ + Compute (Importance Sampling) Effective Sample Size (ESS). + """ + if len(self.log_weights) > 0: + log_w_norm = self.get_normalized_weights(log_scale=True) + ess = torch.exp(-torch.logsumexp(2 * log_w_norm, 0)) + else: + warnings.warn( + "The log_weights list is empty, effective sample size is zero." + ) + ess = 0 + return ess + + +class Importance(TracePosterior, LogWeightsMixin): + """ + :param model: probabilistic model defined as a function + :param guide: guide used for sampling defined as a function + :param num_samples: number of samples to draw from the guide (default 10) + + This method performs posterior inference by importance sampling + using the guide as the proposal distribution. + If no guide is provided, it defaults to proposing from the model's prior. + """ + + def __init__(self, model, guide=None, num_samples=None): + """ + Constructor. default to num_samples = 10, guide = model + """ + super().__init__() + if num_samples is None: + num_samples = 10 + warnings.warn( + "num_samples not provided, defaulting to {}".format(num_samples) + ) + if guide is None: + # propose from the prior by making a guide from the model by hiding observes + guide = poutine.block(model, hide_types=["observe"]) + self.num_samples = num_samples + self.model = model + self.guide = guide + + def _traces(self, *args, **kwargs): + """ + Generator of weighted samples from the proposal distribution. + """ + for i in range(self.num_samples): + guide_trace = poutine.trace(self.guide).get_trace(*args, **kwargs) + model_trace = poutine.trace( + poutine.replay(self.model, trace=guide_trace) + ).get_trace(*args, **kwargs) + log_weight = model_trace.log_prob_sum() - guide_trace.log_prob_sum() + yield (model_trace, log_weight) + + +def vectorized_importance_weights(model, guide, *args, **kwargs): + """ + :param model: probabilistic model defined as a function + :param guide: guide used for sampling defined as a function + :param num_samples: number of samples to draw from the guide (default 1) + :param int max_plate_nesting: Bound on max number of nested :func:`pyro.plate` contexts. + :param bool normalized: set to True to return self-normalized importance weights + :returns: returns a ``(num_samples,)``-shaped tensor of importance weights + and the model and guide traces that produced them + + Vectorized computation of importance weights for models with static structure:: + + log_weights, model_trace, guide_trace = \\ + vectorized_importance_weights(model, guide, *args, + num_samples=1000, + max_plate_nesting=4, + normalized=False) + """ + num_samples = kwargs.pop("num_samples", 1) + max_plate_nesting = kwargs.pop("max_plate_nesting", None) + normalized = kwargs.pop("normalized", False) + + if max_plate_nesting is None: + raise ValueError("must provide max_plate_nesting") + max_plate_nesting += 1 + + def vectorize(fn): + def _fn(*args, **kwargs): + with pyro.plate( + "num_particles_vectorized", num_samples, dim=-max_plate_nesting + ): + return fn(*args, **kwargs) + + return _fn + + model_trace, guide_trace = get_importance_trace( + "flat", max_plate_nesting, vectorize(model), vectorize(guide), args, kwargs + ) + + guide_trace.pack_tensors() + model_trace.pack_tensors(guide_trace.plate_to_symbol) + + if num_samples == 1: + log_weights = model_trace.log_prob_sum() - guide_trace.log_prob_sum() + else: + wd = guide_trace.plate_to_symbol["num_particles_vectorized"] + log_weights = plate_log_prob_sum(model_trace, wd) - plate_log_prob_sum( + guide_trace, wd + ) + + if normalized: + log_weights = log_weights - torch.logsumexp(log_weights) + return log_weights, model_trace, guide_trace + + +@torch.no_grad() +def psis_diagnostic(model, guide, *args, **kwargs): + """ + Computes the Pareto tail index k for a model/guide pair using the technique + described in [1], which builds on previous work in [2]. If :math:`0 < k < 0.5` + the guide is a good approximation to the model posterior, in the sense + described in [1]. If :math:`0.5 \\le k \\le 0.7`, the guide provides a suboptimal + approximation to the posterior, but may still be useful in practice. If + :math:`k > 0.7` the guide program provides a poor approximation to the full + posterior, and caution should be used when using the guide. Note, however, + that a guide may be a poor fit to the full posterior while still yielding + reasonable model predictions. If :math:`k < 0.0` the importance weights + corresponding to the model and guide appear to be bounded from above; this + would be a bizarre outcome for a guide trained via ELBO maximization. Please + see [1] for a more complete discussion of how the tail index k should be + interpreted. + + Please be advised that a large number of samples may be required for an + accurate estimate of k. + + Note that we assume that the model and guide are both vectorized and have + static structure. As is canonical in Pyro, the args and kwargs are passed + to the model and guide. + + References + [1] 'Yes, but Did It Work?: Evaluating Variational Inference.' + Yuling Yao, Aki Vehtari, Daniel Simpson, Andrew Gelman + [2] 'Pareto Smoothed Importance Sampling.' + Aki Vehtari, Andrew Gelman, Jonah Gabry + + :param callable model: the model program. + :param callable guide: the guide program. + :param int num_particles: the total number of times we run the model and guide in + order to compute the diagnostic. defaults to 1000. + :param max_simultaneous_particles: the maximum number of simultaneous samples drawn + from the model and guide. defaults to `num_particles`. `num_particles` must be + divisible by `max_simultaneous_particles`. compute the diagnostic. defaults to 1000. + :param int max_plate_nesting: optional bound on max number of nested :func:`pyro.plate` + contexts in the model/guide. defaults to 7. + :returns float: the PSIS diagnostic k + """ + + num_particles = kwargs.pop("num_particles", 1000) + max_simultaneous_particles = kwargs.pop("max_simultaneous_particles", num_particles) + max_plate_nesting = kwargs.pop("max_plate_nesting", 7) + + if num_particles % max_simultaneous_particles != 0: + raise ValueError( + "num_particles must be divisible by max_simultaneous_particles." + ) + + N = num_particles // max_simultaneous_particles + log_weights = [ + vectorized_importance_weights( + model, + guide, + num_samples=max_simultaneous_particles, + max_plate_nesting=max_plate_nesting, + *args, + **kwargs, + )[0] + for _ in range(N) + ] + log_weights = torch.cat(log_weights) + log_weights -= log_weights.max() + log_weights = torch.sort(log_weights, descending=False)[0] + + cutoff_index = ( + -int(math.ceil(min(0.2 * num_particles, 3.0 * math.sqrt(num_particles)))) - 1 + ) + lw_cutoff = max(math.log(1.0e-15), log_weights[cutoff_index]) + lw_tail = log_weights[log_weights > lw_cutoff] + + if len(lw_tail) < 10: + warnings.warn( + "Not enough tail samples to compute PSIS diagnostic; increase num_particles." + ) + k = float("inf") + else: + k, _ = fit_generalized_pareto(lw_tail.exp() - math.exp(lw_cutoff)) + + return k diff --git a/pyro/source/pyro/infer/inspect.py b/pyro/source/pyro/infer/inspect.py new file mode 100644 index 0000000000000000000000000000000000000000..2580301dba819184bd8ae1e378d5501a68dd76b8 --- /dev/null +++ b/pyro/source/pyro/infer/inspect.py @@ -0,0 +1,671 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import itertools +import os +from collections import defaultdict +from pathlib import Path +from types import SimpleNamespace +from typing import Callable, Collection, Dict, List, Optional, Union + +import torch + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.ops.provenance import ProvenanceTensor, detach_provenance, get_provenance +from pyro.poutine.messenger import Messenger +from pyro.poutine.util import site_is_subsample + +try: + import graphviz +except ImportError: + graphviz = SimpleNamespace(Digraph=object) # for type hints + + +def is_sample_site(msg, *, include_deterministic=False): + if msg["type"] != "sample": + return False + if site_is_subsample(msg): + return False + + if not include_deterministic: + # Ignore masked observations. + if msg["is_observed"] and msg["mask"] is False: + return False + + # Exclude deterministic sites. + fn = msg["fn"] + while hasattr(fn, "base_dist"): + fn = fn.base_dist + if type(fn).__name__ == "Delta": + return False + + return True + + +def site_is_deterministic(msg: dict) -> bool: + return msg["type"] == "sample" and msg["infer"].get("_deterministic", False) + + +class TrackProvenance(Messenger): + def __init__(self, *, include_deterministic=False): + self.include_deterministic = include_deterministic + + def _pyro_post_sample(self, msg): + if self.include_deterministic and site_is_deterministic(msg): + provenance = frozenset({msg["name"]}) # track only direct dependencies + value = detach_provenance(msg["value"]) + msg["value"] = ProvenanceTensor(value, provenance) + + elif is_sample_site(msg, include_deterministic=self.include_deterministic): + provenance = frozenset({msg["name"]}) # track only direct dependencies + value = detach_provenance(msg["value"]) + msg["value"] = ProvenanceTensor(value, provenance) + + def _pyro_post_param(self, msg): + if msg["type"] == "param": + provenance = frozenset({msg["name"]}) # track only direct dependencies + value = detach_provenance(msg["value"]) + msg["value"] = ProvenanceTensor(value, provenance) + + +@torch.enable_grad() +def get_dependencies( + model: Callable, + model_args: Optional[tuple] = None, + model_kwargs: Optional[dict] = None, + include_deterministic: bool = False, +) -> Dict[str, object]: + r""" + Infers dependency structure about a conditioned model. + + This returns a nested dictionary with structure like:: + + { + "prior_dependencies": { + "variable1": {"variable1": set()}, + "variable2": {"variable1": set(), "variable2": set()}, + ... + }, + "posterior_dependencies": { + "variable1": {"variable1": {"plate1"}, "variable2": set()}, + ... + }, + } + + where + + - `prior_dependencies` is a dict mapping downstream latent and observed + variables to dictionaries mapping upstream latent variables on which + they depend to sets of plates inducing full dependencies. + That is, included plates introduce quadratically many dependencies as + in complete-bipartite graphs, whereas excluded plates introduce only + linearly many dependencies as in independent sets of parallel edges. + Prior dependencies follow the original model order. + - `posterior_dependencies` is a similar dict, but mapping latent + variables to the latent or observed sites on which they depend in the + posterior. Posterior dependencies are reversed from the model order. + + Dependencies elide ``pyro.deterministic`` sites and ``pyro.sample(..., + Delta(...))`` sites. + + **Examples** + + Here is a simple example with no plates. We see every node depends on + itself, and only the latent variables appear in the posterior:: + + def model_1(): + a = pyro.sample("a", dist.Normal(0, 1)) + pyro.sample("b", dist.Normal(a, 1), obs=torch.tensor(0.0)) + + assert get_dependencies(model_1) == { + "prior_dependencies": { + "a": {"a": set()}, + "b": {"a": set(), "b": set()}, + }, + "posterior_dependencies": { + "a": {"a": set(), "b": set()}, + }, + } + + Here is an example where two variables ``a`` and ``b`` start out + conditionally independent in the prior, but become conditionally dependent + in the posterior to the so-called collider variable ``c`` on which they + both depend. This is called "moralization" in the graphical model + literature:: + + def model_2(): + a = pyro.sample("a", dist.Normal(0, 1)) + b = pyro.sample("b", dist.LogNormal(0, 1)) + c = pyro.sample("c", dist.Normal(a, b)) + pyro.sample("d", dist.Normal(c, 1), obs=torch.tensor(0.)) + + assert get_dependencies(model_2) == { + "prior_dependencies": { + "a": {"a": set()}, + "b": {"b": set()}, + "c": {"a": set(), "b": set(), "c": set()}, + "d": {"c": set(), "d": set()}, + }, + "posterior_dependencies": { + "a": {"a": set(), "b": set(), "c": set()}, + "b": {"b": set(), "c": set()}, + "c": {"c": set(), "d": set()}, + }, + } + + Dependencies can be more complex in the presence of plates. So far all the + dict values have been empty sets of plates, but in the following posterior + we see that ``a`` depends on itself across the plate ``p``. This means + that, among the elements of ``a``, e.g. ``a[0]`` depends on ``a[1]`` (this + is why we explicitly allow variables to depend on themselves):: + + def model_3(): + with pyro.plate("p", 5): + a = pyro.sample("a", dist.Normal(0, 1)) + pyro.sample("b", dist.Normal(a.sum(), 1), obs=torch.tensor(0.0)) + + assert get_dependencies(model_3) == { + "prior_dependencies": { + "a": {"a": set()}, + "b": {"a": set(), "b": set()}, + }, + "posterior_dependencies": { + "a": {"a": {"p"}, "b": set()}, + }, + } + + [1] S.Webb, A.Goliński, R.Zinkov, N.Siddharth, T.Rainforth, Y.W.Teh, F.Wood (2018) + "Faithful inversion of generative models for effective amortized inference" + https://dl.acm.org/doi/10.5555/3327144.3327229 + + :param callable model: A model. + :param tuple model_args: Optional tuple of model args. + :param dict model_kwargs: Optional dict of model kwargs. + :param bool include_deterministic: Whether to include deterministic sites. + :returns: A dictionary of metadata (see above). + :rtype: dict + """ + if model_args is None: + model_args = () + if model_kwargs is None: + model_kwargs = {} + + # Collect sites with tracked provenance. + with torch.random.fork_rng(), torch.no_grad(), pyro.validation_enabled(False): + with TrackProvenance(include_deterministic=include_deterministic): + trace = poutine.trace(model).get_trace(*model_args, **model_kwargs) + sample_sites = [msg for msg in trace.nodes.values() if is_sample_site(msg)] + + # Collect observations. + observed = {msg["name"] for msg in sample_sites if msg["is_observed"]} + plates = { + msg["name"]: {f.name for f in msg["cond_indep_stack"] if f.vectorized} + for msg in sample_sites + } + + # Find direct prior dependencies among latent and observed sites. + prior_dependencies = {n: {n: set()} for n in plates} # no deps yet + for i, downstream in enumerate(sample_sites): + upstreams = [ + u for u in sample_sites[:i] if not u["is_observed"] if u["value"].numel() + ] + if not upstreams: + continue + log_prob = downstream["fn"].log_prob(downstream["value"]) + provenance = get_provenance(log_prob) + for upstream in upstreams: + u = upstream["name"] + if u in provenance: + d = downstream["name"] + prior_dependencies[d][u] = set() + + # Next reverse dependencies and restrict downstream nodes to latent sites. + posterior_dependencies = {n: {} for n in plates if n not in observed} + for d, upstreams in prior_dependencies.items(): + for u, p in upstreams.items(): + if u not in observed: + # Note the folowing reverses: + # u is henceforth downstream and d is henceforth upstream. + posterior_dependencies[u][d] = p.copy() + + # Moralize: add dependencies among latent variables in each Markov blanket. + # This assumes all latents are eventually observed, at least indirectly. + order = {msg["name"]: i for i, msg in enumerate(reversed(sample_sites))} + for d, upstreams in prior_dependencies.items(): + upstreams = {u: p for u, p in upstreams.items() if u not in observed} + for u1, p1 in upstreams.items(): + for u2, p2 in upstreams.items(): + if order[u1] <= order[u2]: + p12 = posterior_dependencies[u2].setdefault(u1, set()) + p12 |= plates[u1] & plates[u2] - plates[d] + p12 |= plates[u2] & p1 + p12 |= plates[u1] & p2 + + return { + "prior_dependencies": prior_dependencies, + "posterior_dependencies": posterior_dependencies, + } + + +def get_model_relations( + model: Callable, + model_args: Optional[tuple] = None, + model_kwargs: Optional[dict] = None, + include_deterministic: bool = False, +): + """ + Infer relations of RVs and plates from given model and optionally data. + See https://github.com/pyro-ppl/pyro/issues/949 for more details. + + This returns a dictionary with keys: + + - "sample_sample" map each downstream sample site to a list of the upstream + sample sites on which it depend; + - "sample_dist" maps each sample site to the name of the distribution at + that site; + - "plate_sample" maps each plate name to a list of the sample sites within + that plate; and + - "observe" is a list of observed sample sites. + + For example for the model:: + + def model(data): + m = pyro.sample('m', dist.Normal(0, 1)) + sd = pyro.sample('sd', dist.LogNormal(m, 1)) + with pyro.plate('N', len(data)): + pyro.sample('obs', dist.Normal(m, sd), obs=data) + + the relation is:: + + {'sample_sample': {'m': [], 'sd': ['m'], 'obs': ['m', 'sd']}, + 'sample_dist': {'m': 'Normal', 'sd': 'LogNormal', 'obs': 'Normal'}, + 'plate_sample': {'N': ['obs']}, + 'observed': ['obs']} + + :param callable model: A model to inspect. + :param model_args: Optional tuple of model args. + :param model_kwargs: Optional dict of model kwargs. + :param bool include_deterministic: Whether to include deterministic sites. + :rtype: dict + """ + if model_args is None: + model_args = () + if model_kwargs is None: + model_kwargs = {} + assert isinstance(model_args, tuple) + assert isinstance(model_kwargs, dict) + + with torch.random.fork_rng(), torch.no_grad(), pyro.validation_enabled(False): + with TrackProvenance(include_deterministic=include_deterministic): + trace = poutine.trace(model).get_trace(*model_args, **model_kwargs) + + sample_sample = {} + sample_param = {} + sample_dist = {} + param_constraint = {} + plate_sample = defaultdict(list) + observed = [] + + def _get_type_from_frozenname(frozen_name): + return trace.nodes[frozen_name]["type"] + + for name, site in trace.nodes.items(): + if site["type"] == "param": + param_constraint[name] = str(site["kwargs"]["constraint"]) + + if site["type"] != "sample" or site_is_subsample(site): + continue + + provenance = get_provenance( + site["fn"].log_prob(site["value"]) + if not site_is_deterministic(site) + else site["fn"].base_dist.log_prob(site["value"]) + ) + sample_sample[name] = [ + upstream + for upstream in provenance + if upstream != name and _get_type_from_frozenname(upstream) == "sample" + ] + + sample_param[name] = [ + upstream + for upstream in provenance + if upstream != name and _get_type_from_frozenname(upstream) == "param" + ] + + sample_dist[name] = ( + _get_dist_name(site["fn"]) + if not site_is_deterministic(site) + else "Deterministic" + ) + for frame in site["cond_indep_stack"]: + plate_sample[frame.name].append(name) + if site["is_observed"]: + observed.append(name) + + def _resolve_plate_samples(plate_samples): + for p, pv in plate_samples.items(): + pv = set(pv) + for q, qv in plate_samples.items(): + qv = set(qv) + if len(pv & qv) > 0 and len(pv - qv) > 0 and len(qv - pv) > 0: + plate_samples_ = plate_samples.copy() + plate_samples_[q] = pv & qv + plate_samples_[q + "__CLONE"] = qv - pv + return _resolve_plate_samples(plate_samples_) + return plate_samples + + plate_sample = _resolve_plate_samples(plate_sample) + + # Normalize order of variables. + def sort_by_time(names: Collection[str]) -> List[str]: + return [name for name in trace.nodes if name in names] + + sample_sample = {k: sort_by_time(v) for k, v in sample_sample.items()} + sample_param = {k: sort_by_time(v) for k, v in sample_param.items()} + plate_sample = {k: sort_by_time(v) for k, v in plate_sample.items()} + observed = sort_by_time(observed) + + return { + "sample_sample": sample_sample, + "sample_param": sample_param, + "sample_dist": sample_dist, + "param_constraint": param_constraint, + "plate_sample": dict(plate_sample), + "observed": observed, + } + + +def _get_dist_name(fn): + while isinstance( + fn, (dist.Independent, dist.ExpandedDistribution, dist.MaskedDistribution) + ): + fn = fn.base_dist + return type(fn).__name__ + + +def generate_graph_specification( + model_relations: dict, render_params: bool = False +) -> dict: + """ + Convert model relations into data structure which can be readily + converted into a network. + """ + # group nodes by plate + plate_groups = dict(model_relations["plate_sample"]) + plate_rvs = {rv for rvs in plate_groups.values() for rv in rvs} + plate_groups[None] = [ + rv for rv in model_relations["sample_sample"] if rv not in plate_rvs + ] # RVs which are in no plate + + # get set of params + params = set() + if render_params: + for rv, params_list in model_relations["sample_param"].items(): + for param in params_list: + params.add(param) + plate_groups[None].extend(params) + + # retain node metadata + node_data = {} + for rv in model_relations["sample_sample"]: + node_data[rv] = { + "is_observed": rv in model_relations["observed"], + "distribution": model_relations["sample_dist"][rv], + } + + if render_params: + for param, constraint in model_relations["param_constraint"].items(): + node_data[param] = { + "is_observed": False, + "constraint": constraint, + "distribution": None, + } + + # infer plate structure + # (when the order of plates cannot be determined from subset relations, + # it follows the order in which plates appear in trace) + plate_data = {} + for plate1, plate2 in list(itertools.combinations(plate_groups, 2)): + if plate1 is None or plate2 is None: + continue + + nodes1 = set(plate_groups[plate1]) + nodes2 = set(plate_groups[plate2]) + if nodes1 < nodes2: + plate_data[plate1] = {"parent": plate2} + elif nodes1 >= nodes2: + plate_data[plate2] = {"parent": plate1} + elif nodes1 & nodes2: + raise NotImplementedError( + f"Overlapping non-nested plates {repr(plate1)},{repr(plate2)} " + "are not supported by render_model(). To help add support see " + "https://github.com/pyro-ppl/pyro/issues/2980" + ) + + for plate in plate_groups: + if plate is None: + continue + + if plate not in plate_data: + plate_data[plate] = {"parent": None} + + # infer RV edges + edge_list = [] + for target, source_list in model_relations["sample_sample"].items(): + edge_list.extend([(source, target) for source in source_list]) + + if render_params: + for target, source_list in model_relations["sample_param"].items(): + edge_list.extend([(source, target) for source in source_list]) + + return { + "plate_groups": plate_groups, + "plate_data": plate_data, + "node_data": node_data, + "edge_list": edge_list, + } + + +def _deep_merge(things: list): + if len(things) == 1: + return things[0] + + # Recurse into dicts. + if isinstance(things[0], dict): + result = {} + for thing in things: + for key, value in thing.items(): + if key not in result: + result[key] = _deep_merge([t[key] for t in things]) + return result + + # Vote for booleans. + if isinstance(things[0], bool): + if all(x is True for x in things): + return True + if all(x is False for x in things): + return False + return None # i.e. maybe + + # Otherwise choose arbitrarily. + return things[0] + + +def render_graph( + graph_specification: dict, render_distributions: bool = False +) -> "graphviz.Digraph": + """ + Create a graphviz object given a graph specification. + + :param bool render_distributions: Show distribution of each RV in plot. + """ + try: + import graphviz # noqa: F401 + except ImportError as e: + raise ImportError( + "Looks like you want to use graphviz (https://graphviz.org/) " + "to render your model. " + "You need to install `graphviz` to be able to use this feature. " + "It can be installed with `pip install graphviz`." + ) from e + + plate_groups = graph_specification["plate_groups"] + plate_data = graph_specification["plate_data"] + node_data = graph_specification["node_data"] + edge_list = graph_specification["edge_list"] + + graph = graphviz.Digraph() + + # add plates + plate_graph_dict = { + plate: graphviz.Digraph(name=f"cluster_{plate}") + for plate in plate_groups + if plate is not None + } + for plate, plate_graph in plate_graph_dict.items(): + plate_graph.attr(label=plate.split("__CLONE")[0], labeljust="r", labelloc="b") + + plate_graph_dict[None] = graph + + # add nodes + colors = {False: "white", True: "gray", None: "gray:white"} + for plate, rv_list in plate_groups.items(): + cur_graph = plate_graph_dict[plate] + + for rv in rv_list: + color = colors[node_data[rv]["is_observed"]] + + # For sample_nodes - ellipse + if node_data[rv]["distribution"]: + shape = "ellipse" + rv_label = rv + + # For param_nodes - No shape + else: + shape = "plain" + rv_label = rv.replace("$params", "") + + # use different symbol for Deterministic site + node_style = ( + "filled,dashed" + if node_data[rv]["distribution"] == "Deterministic" + else "filled" + ) + cur_graph.node( + rv, label=rv_label, shape=shape, style=node_style, fillcolor=color + ) + + # add leaf nodes first + while len(plate_data) >= 1: + for plate, data in plate_data.items(): + parent_plate = data["parent"] + is_leaf = True + + for plate2, data2 in plate_data.items(): + if plate == data2["parent"]: + is_leaf = False + break + + if is_leaf: + plate_graph_dict[parent_plate].subgraph(plate_graph_dict[plate]) + plate_data.pop(plate) + break + + # add edges + for source, target in edge_list: + graph.edge(source, target) + + # render distributions if requested + if render_distributions: + dist_label = "" + for rv, data in node_data.items(): + rv_dist = data["distribution"] + if rv_dist: + dist_label += rf"{rv} ~ {rv_dist}\l" + + if "constraint" in data and data["constraint"]: + dist_label += rf"{rv} : {data['constraint']}\l" + + graph.node("distribution_description_node", label=dist_label, shape="plaintext") + + # return whole graph + return graph + + +def render_model( + model: Callable, + model_args: Optional[Union[tuple, List[tuple]]] = None, + model_kwargs: Optional[Union[dict, List[dict]]] = None, + filename: Optional[str] = None, + render_distributions: bool = False, + render_params: bool = False, + render_deterministic: bool = False, +) -> "graphviz.Digraph": + """ + Renders a model using `graphviz `_ . + + If ``filename`` is provided, this saves an image; otherwise this draws the + graph. For example usage see the + `model rendering tutorial `_ . + + :param model: Model to render. + :param model_args: Tuple of positional arguments to pass to the model, or + list of tuples for semisupervised models. + :param model_kwargs: Dict of keyword arguments to pass to the model, or + list of dicts for semisupervised models. + :param str filename: Name of file or path to file to save rendered model in. + :param bool render_distributions: Whether to include RV distribution + annotations (and param constraints) in the plot. + :param bool render_params: Whether to show params inthe plot. + :param bool render_deterministic: Whether to include deterministic sites. + :returns: A model graph. + :rtype: graphviz.Digraph + """ + # Get model relations. + if not isinstance(model_args, list) and not isinstance(model_kwargs, list): + relations = [ + get_model_relations( + model, + model_args, + model_kwargs, + include_deterministic=render_deterministic, + ) + ] + else: # semisupervised + if isinstance(model_args, list): + if not isinstance(model_kwargs, list): + model_kwargs = [model_kwargs] * len(model_args) + elif not isinstance(model_args, list): + model_args = [model_args] * len(model_kwargs) + assert len(model_args) == len(model_kwargs) + relations = [ + get_model_relations( + model, args, kwargs, include_deterministic=render_deterministic + ) + for args, kwargs in zip(model_args, model_kwargs) + ] + + # Get graph specifications. + graph_specs = [ + generate_graph_specification(r, render_params=render_params) for r in relations + ] + graph_spec = _deep_merge(graph_specs) + + # Render. + graph = render_graph(graph_spec, render_distributions=render_distributions) + + if filename is not None: + suffix = Path(filename).suffix[1:] # remove leading period from suffix + filepath = os.path.splitext(filename)[0] + graph.render(filepath, view=False, cleanup=True, format=suffix) + + return graph + + +__all__ = [ + "get_dependencies", + "render_model", +] diff --git a/pyro/source/pyro/infer/mcmc/__init__.py b/pyro/source/pyro/infer/mcmc/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..749af47b1ad13a7c2d73e53a9a6c03c02352c20c --- /dev/null +++ b/pyro/source/pyro/infer/mcmc/__init__.py @@ -0,0 +1,18 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from pyro.infer.mcmc.adaptation import ArrowheadMassMatrix, BlockMassMatrix +from pyro.infer.mcmc.api import MCMC, StreamingMCMC +from pyro.infer.mcmc.hmc import HMC +from pyro.infer.mcmc.nuts import NUTS +from pyro.infer.mcmc.rwkernel import RandomWalkKernel + +__all__ = [ + "ArrowheadMassMatrix", + "BlockMassMatrix", + "HMC", + "MCMC", + "NUTS", + "RandomWalkKernel", + "StreamingMCMC", +] diff --git a/pyro/source/pyro/infer/mcmc/adaptation.py b/pyro/source/pyro/infer/mcmc/adaptation.py new file mode 100644 index 0000000000000000000000000000000000000000..09dbe6872d1120e6b2310602163545a8bf72d12e --- /dev/null +++ b/pyro/source/pyro/infer/mcmc/adaptation.py @@ -0,0 +1,579 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math +from collections import namedtuple + +import torch + +import pyro +from pyro.ops.arrowhead import ( + SymmArrowhead, + sqrt, + triu_gram, + triu_inverse, + triu_matvecmul, +) +from pyro.ops.dual_averaging import DualAveraging +from pyro.ops.welford import WelfordArrowheadCovariance, WelfordCovariance + +adapt_window = namedtuple("adapt_window", ["start", "end"]) + + +class WarmupAdapter: + r""" + Adapts tunable parameters, namely step size and mass matrix, during the + warmup phase. This class provides lookup properties to read the latest + values of ``step_size`` and ``inverse_mass_matrix``. These values are + periodically updated when adaptation is engaged. + """ + + def __init__( + self, + step_size=1, + adapt_step_size=False, + target_accept_prob=0.8, + adapt_mass_matrix=False, + dense_mass=False, + ): + self.adapt_step_size = adapt_step_size + self.adapt_mass_matrix = adapt_mass_matrix + self.target_accept_prob = target_accept_prob + self.dense_mass = dense_mass + self.step_size = 1 if step_size is None else step_size + self._init_step_size = self.step_size + self._adaptation_disabled = not (adapt_step_size or adapt_mass_matrix) + if adapt_step_size: + self._step_size_adapt_scheme = DualAveraging() + self._mass_matrix_adapter = BlockMassMatrix() + + # We separate warmup_steps into windows: + # start_buffer + window 1 + window 2 + window 3 + ... + end_buffer + # where the length of each window will be doubled for the next window. + # We won't adapt mass matrix during start and end buffers; and mass + # matrix will be updated at the end of each window. This is helpful + # for dealing with the intense computation of sampling momentum from the + # inverse of mass matrix. + self._adapt_start_buffer = 75 # from Stan + self._adapt_end_buffer = 50 # from Stan + self._adapt_initial_window = 25 # from Stan + + # configured later on setup + self._warmup_steps = None + self._adaptation_schedule = [] + + def _build_adaptation_schedule(self): + adaptation_schedule = [] + # from Stan, for small warmup_steps < 20 + if self._warmup_steps < 20: + adaptation_schedule.append(adapt_window(0, self._warmup_steps - 1)) + return adaptation_schedule + + start_buffer_size = self._adapt_start_buffer + end_buffer_size = self._adapt_end_buffer + init_window_size = self._adapt_initial_window + if ( + self._adapt_start_buffer + + self._adapt_end_buffer + + self._adapt_initial_window + > self._warmup_steps + ): + start_buffer_size = int(0.15 * self._warmup_steps) + end_buffer_size = int(0.1 * self._warmup_steps) + init_window_size = self._warmup_steps - start_buffer_size - end_buffer_size + adaptation_schedule.append(adapt_window(start=0, end=start_buffer_size - 1)) + end_window_start = self._warmup_steps - end_buffer_size + + next_window_size = init_window_size + next_window_start = start_buffer_size + while next_window_start < end_window_start: + cur_window_start, cur_window_size = next_window_start, next_window_size + # Ensure that slow adaptation windows are monotonically increasing + if 3 * cur_window_size <= end_window_start - cur_window_start: + next_window_size = 2 * cur_window_size + else: + cur_window_size = end_window_start - cur_window_start + next_window_start = cur_window_start + cur_window_size + adaptation_schedule.append( + adapt_window(cur_window_start, next_window_start - 1) + ) + adaptation_schedule.append( + adapt_window(end_window_start, self._warmup_steps - 1) + ) + return adaptation_schedule + + def reset_step_size_adaptation(self, z): + r""" + Finds a reasonable step size and resets step size adaptation scheme. + """ + if self._find_reasonable_step_size is not None: + with pyro.validation_enabled(False): + self.step_size = self._find_reasonable_step_size(z) + self._step_size_adapt_scheme.prox_center = math.log(10 * self.step_size) + self._step_size_adapt_scheme.reset() + + def _update_step_size(self, accept_prob): + # calculate a statistic for Dual Averaging scheme + H = self.target_accept_prob - accept_prob + self._step_size_adapt_scheme.step(H) + log_step_size, _ = self._step_size_adapt_scheme.get_state() + self.step_size = math.exp(log_step_size) + + def _end_adaptation(self): + if self.adapt_step_size: + _, log_step_size_avg = self._step_size_adapt_scheme.get_state() + self.step_size = math.exp(log_step_size_avg) + + def configure( + self, + warmup_steps, + initial_step_size=None, + mass_matrix_shape=None, + find_reasonable_step_size_fn=None, + options={}, + ): + r""" + Model specific properties that are specified when the HMC kernel is setup. + + :param warmup_steps: Number of warmup steps that the sampler is initialized with. + :param initial_step_size: Step size to use to initialize the Dual Averaging scheme. + :param mass_matrix_shape: Shape of the mass matrix. + :param find_reasonable_step_size_fn: A callable to find reasonable step size when + mass matrix is changed. + :param dict options: A dict which maps `dtype`, `device` to the corresponding default + tensor options. This is used to construct initial mass matrix in `mass_matrix_adapter`. + """ + self._warmup_steps = warmup_steps + self.step_size = ( + initial_step_size if initial_step_size is not None else self._init_step_size + ) + if find_reasonable_step_size_fn is not None: + self._find_reasonable_step_size = find_reasonable_step_size_fn + if mass_matrix_shape is None or self.step_size is None: + raise ValueError( + "Incomplete configuration - step size and inverse mass matrix " + "need to be initialized." + ) + self.mass_matrix_adapter.configure( + mass_matrix_shape, self.adapt_mass_matrix, options=options + ) + if not self._adaptation_disabled: + self._adaptation_schedule = self._build_adaptation_schedule() + self._current_window = 0 # starting window index + if self.adapt_step_size: + self._step_size_adapt_scheme.reset() + + def step(self, t, z, accept_prob, z_grad=None): + r""" + Called at each step during the warmup phase to learn tunable + parameters. + + :param int t: time step, beginning at 0. + :param dict z: latent variables. + :param float accept_prob: acceptance probability of the proposal. + """ + if t >= self._warmup_steps or self._adaptation_disabled: + return + window = self._adaptation_schedule[self._current_window] + num_windows = len(self._adaptation_schedule) + mass_matrix_adaptation_phase = self.adapt_mass_matrix and ( + 0 < self._current_window < num_windows - 1 + ) + if self.adapt_step_size: + self._update_step_size(accept_prob.item()) + if mass_matrix_adaptation_phase: + self.mass_matrix_adapter.update(z, z_grad) + + if t == window.end: + if self._current_window == num_windows - 1: + self._current_window += 1 + self._end_adaptation() + return + + if self._current_window == 0: + self._current_window += 1 + return + + if mass_matrix_adaptation_phase: + self.mass_matrix_adapter.end_adaptation() + if self.adapt_step_size: + self.reset_step_size_adaptation(z) + + self._current_window += 1 + + @property + def adaptation_schedule(self): + return self._adaptation_schedule + + @property + def mass_matrix_adapter(self): + return self._mass_matrix_adapter + + @mass_matrix_adapter.setter + def mass_matrix_adapter(self, value): + self._mass_matrix_adapter = value + + +# this works for diagonal matrix `x` +def _matvecmul(x, y): + return x.mul(y) if x.dim() == 1 else x.matmul(y) + + +def _cholesky(x): + return x.sqrt() if x.dim() == 1 else torch.linalg.cholesky(x) + + +def _transpose(x): + return x if x.dim() == 1 else x.t() + + +def _triu_inverse(x): + if x.dim() == 1: + return x.reciprocal() + else: + identity = torch.eye(x.size(-1), dtype=x.dtype, device=x.device) + return torch.linalg.solve_triangular(x, identity, upper=True) + + +class BlockMassMatrix: + """ + EXPERIMENTAL This class is used to adapt (inverse) mass matrix and provide + useful methods to calculate algebraic terms which involves the mass matrix. + + The mass matrix will have block structure, which can be specified by + using the method :meth:`configure` with the corresponding structured + `mass_matrix_shape` arg. + + :param float init_scale: initial scale to construct the initial mass matrix. + """ + + def __init__(self, init_scale=1.0): + # TODO: we might allow users specify the initial mass matrix in the constructor. + self._init_scale = init_scale + self._adapt_scheme = {} + self._inverse_mass_matrix = {} + # NB: those sqrt matrices are upper triangular + self._mass_matrix_sqrt = {} + self._mass_matrix_sqrt_inverse = {} + self._mass_matrix_size = {} + + @property + def mass_matrix_size(self): + """ + A dict that maps site names to the size of the corresponding mass matrix. + """ + return self._mass_matrix_size + + @property + def inverse_mass_matrix(self): + return self._inverse_mass_matrix + + @inverse_mass_matrix.setter + def inverse_mass_matrix(self, value): + for site_names, inverse_mass_matrix in value.items(): + if site_names in self._adapt_scheme: + self._adapt_scheme[site_names].reset() + mass_matrix_sqrt_inverse = _transpose(_cholesky(inverse_mass_matrix)) + mass_matrix_sqrt = _triu_inverse(mass_matrix_sqrt_inverse) + self._inverse_mass_matrix[site_names] = inverse_mass_matrix + self._mass_matrix_sqrt[site_names] = mass_matrix_sqrt + self._mass_matrix_sqrt_inverse[site_names] = mass_matrix_sqrt_inverse + + def configure(self, mass_matrix_shape, adapt_mass_matrix=True, options={}): + """ + Sets up an initial mass matrix. + + :param dict mass_matrix_shape: a dict that maps tuples of site names to the shape of + the corresponding mass matrix. Each tuple of site names corresponds to a block. + :param bool adapt_mass_matrix: a flag to decide whether an adaptation scheme will be used. + :param dict options: tensor options to construct the initial mass matrix. + """ + inverse_mass_matrix = {} + for site_names, shape in mass_matrix_shape.items(): + self._mass_matrix_size[site_names] = shape[0] + diagonal = len(shape) == 1 + inverse_mass_matrix[site_names] = ( + torch.full(shape, self._init_scale, **options) + if diagonal + else torch.eye(*shape, **options) * self._init_scale + ) + if adapt_mass_matrix: + adapt_scheme = WelfordCovariance(diagonal=diagonal) + self._adapt_scheme[site_names] = adapt_scheme + + self.inverse_mass_matrix = inverse_mass_matrix + + def update(self, z, z_grad): + """ + Updates the adaptation scheme using the new sample `z` or its grad `z_grad`. + + :param dict z: the current value. + :param dict z_grad: grad of the current value. + """ + for site_names, adapt_scheme in self._adapt_scheme.items(): + z_flat = torch.cat([z[name].detach().reshape(-1) for name in site_names]) + adapt_scheme.update(z_flat) + + def end_adaptation(self): + """ + Updates the current mass matrix using the adaptation scheme. + """ + inverse_mass_matrix = {} + for site_names, adapt_scheme in self._adapt_scheme.items(): + inverse_mass_matrix[site_names] = adapt_scheme.get_covariance( + regularize=True + ) + self.inverse_mass_matrix = inverse_mass_matrix + + def kinetic_grad(self, r): + """ + Computes the gradient of kinetic energy w.r.t. the momentum `r`. + It is equivalent to compute velocity given the momentum `r`. + + :param dict r: a dictionary maps site names to a tensor momentum. + :returns: a dictionary maps site names to the corresponding gradient + """ + v = {} + for site_names, inverse_mass_matrix in self._inverse_mass_matrix.items(): + r_flat = torch.cat([r[site_name].reshape(-1) for site_name in site_names]) + v_flat = _matvecmul(inverse_mass_matrix, r_flat) + + # unpacking + pos = 0 + for site_name in site_names: + next_pos = pos + r[site_name].numel() + v[site_name] = v_flat[pos:next_pos].reshape(r[site_name].shape) + pos = next_pos + return v + + def scale(self, r_unscaled, r_prototype): + """ + Computes `M^{1/2} @ r_unscaled`. + + Note that `r` is generated from a gaussian with scale `mass_matrix_sqrt`. + This method will scale it. + + :param dict r_unscaled: a dictionary maps site names to a tensor momentum. + :param dict r_prototype: a dictionary mapes site names to prototype momentum. + Those prototype values are used to get shapes of the scaled version. + :returns: a dictionary maps site names to the corresponding tensor + """ + s = {} + for site_names, mass_matrix_sqrt in self._mass_matrix_sqrt.items(): + r_flat = _matvecmul(mass_matrix_sqrt, r_unscaled[site_names]) + + # unpacking + pos = 0 + for site_name in site_names: + next_pos = pos + r_prototype[site_name].numel() + s[site_name] = r_flat[pos:next_pos].reshape( + r_prototype[site_name].shape + ) + pos = next_pos + return s + + def unscale(self, r): + """ + Computes `inv(M^{1/2}) @ r`. + + Note that `r` is generated from a gaussian with scale `mass_matrix_sqrt`. + This method will unscale it. + + :param dict r: a dictionary maps site names to a tensor momentum. + :returns: a dictionary maps site names to the corresponding tensor + """ + u = {} + for ( + site_names, + mass_matrix_sqrt_inverse, + ) in self._mass_matrix_sqrt_inverse.items(): + r_flat = torch.cat([r[site_name].reshape(-1) for site_name in site_names]) + u[site_names] = _matvecmul(mass_matrix_sqrt_inverse, r_flat) + return u + + +class ArrowheadMassMatrix: + """ + EXPERIMENTAL This class is used to adapt (inverse) mass matrix and provide useful + methods to calculate algebraic terms which involves the mass matrix. + + The mass matrix will have arrowhead structure, with the head including all + dense sites specified in the argument `full_mass` of the HMC/NUTS kernels. + + :param float init_scale: initial scale to construct the initial mass matrix. + """ + + def __init__(self, init_scale=1.0): + self._init_scale = init_scale + self._adapt_scheme = {} + self._mass_matrix = {} + # NB: like BlockMassMatrix, those sqrt matrices are upper triangular + self._mass_matrix_sqrt = {} + self._mass_matrix_sqrt_inverse = {} + self._mass_matrix_size = {} + + @property + def mass_matrix_size(self): + """ + A dict that maps site names to the size of the corresponding mass matrix. + """ + return self._mass_matrix_size + + @property + def inverse_mass_matrix(self): + # NB: this computation is O(N^2 x head_size) + # however, HMC/NUTS kernel does not require us computing inverse_mass_matrix; + # so all linear algebra cost in HMC/NUTS is still O(N x head_size^2); + # we still expose this property for testing and for backward compatibility + inverse_mass_matrix = {} + for site_names, sqrt_inverse in self._mass_matrix_sqrt_inverse.items(): + inverse_mass_matrix[site_names] = triu_gram(sqrt_inverse) + return inverse_mass_matrix + + @property + def mass_matrix(self): + return self._mass_matrix + + @mass_matrix.setter + def mass_matrix(self, value): + for site_names, mass_matrix in value.items(): + # XXX: consider to add a try/except here: + # if mass_matrix is not positive definite, we won't reset adapt_scheme + self._adapt_scheme[site_names].reset() + mass_matrix_sqrt = sqrt(mass_matrix) + mass_matrix_sqrt_inverse = triu_inverse(mass_matrix_sqrt) + self._mass_matrix[site_names] = mass_matrix + self._mass_matrix_sqrt[site_names] = mass_matrix_sqrt + self._mass_matrix_sqrt_inverse[site_names] = mass_matrix_sqrt_inverse + + def configure(self, mass_matrix_shape, adapt_mass_matrix=True, options={}): + """ + Sets up an initial mass matrix. + + :param dict mass_matrix_shape: a dict that maps tuples of site names to the shape of + the corresponding mass matrix. Each tuple of site names corresponds to a block. + :param bool adapt_mass_matrix: a flag to decide whether an adaptation scheme will be used. + :param dict options: tensor options to construct the initial mass matrix. + """ + mass_matrix = {} + dense_sites = () + dense_size = 0 + diag_sites = () + diag_size = 0 + for site_names, shape in mass_matrix_shape.items(): + if len(shape) == 2: + dense_sites = dense_sites + site_names + dense_size = dense_size + shape[0] + else: + diag_sites = diag_sites + site_names + diag_size = diag_size + shape[0] + + size = dense_size + diag_size + head_size = dense_size + all_sites = dense_sites + diag_sites + self._mass_matrix_size[all_sites] = size + top = torch.eye(head_size, size, **options) * self._init_scale + bottom_diag = torch.full((size - head_size,), self._init_scale, **options) + mass_matrix[all_sites] = SymmArrowhead(top, bottom_diag) + if adapt_mass_matrix: + adapt_scheme = WelfordArrowheadCovariance(head_size=head_size) + self._adapt_scheme[all_sites] = adapt_scheme + + self.mass_matrix = mass_matrix + + def update(self, z, z_grad): + """ + Updates the adaptation scheme using the new sample `z` or its grad `z_grad`. + + :param dict z: the current value. + :param dict z_grad: grad of the current value. + """ + for site_names, adapt_scheme in self._adapt_scheme.items(): + z_grad_flat = torch.cat([z_grad[name].reshape(-1) for name in site_names]) + adapt_scheme.update(z_grad_flat) + + def end_adaptation(self): + """ + Updates the current mass matrix using the adaptation scheme. + """ + mass_matrix = {} + for site_names, adapt_scheme in self._adapt_scheme.items(): + top, bottom_diag = adapt_scheme.get_covariance(regularize=True) + mass_matrix[site_names] = SymmArrowhead(top, bottom_diag) + self.mass_matrix = mass_matrix + + def kinetic_grad(self, r): + """ + Computes the gradient of kinetic energy w.r.t. the momentum `r`. + It is equivalent to compute velocity given the momentum `r`. + + :param dict r: a dictionary maps site names to a tensor momentum. + :returns: a dictionary maps site names to the corresponding gradient + """ + v = {} + for ( + site_names, + mass_matrix_sqrt_inverse, + ) in self._mass_matrix_sqrt_inverse.items(): + r_flat = torch.cat([r[site_name].reshape(-1) for site_name in site_names]) + # NB: using inverse_mass_matrix as in BlockMassMatrix will cost + # O(N^2 x head_size) operators and O(N^2) memory requirement; + # here, we will leverage mass_matrix_sqrt_inverse to reduce the cost to + # O(N x head_size^2) operators and O(N x head_size) memory requirement. + r_unscaled = triu_matvecmul(mass_matrix_sqrt_inverse, r_flat) + v_flat = triu_matvecmul( + mass_matrix_sqrt_inverse, r_unscaled, transpose=True + ) + + # unpacking + pos = 0 + for site_name in site_names: + next_pos = pos + r[site_name].numel() + v[site_name] = v_flat[pos:next_pos].reshape(r[site_name].shape) + pos = next_pos + return v + + def scale(self, r_unscaled, r_prototype): + """ + Computes `M^{1/2} @ r_unscaled`. + + Note that `r` is generated from a gaussian with scale `mass_matrix_sqrt`. + This method will scale it. + + :param dict r_unscaled: a dictionary maps site names to a tensor momentum. + :param dict r_prototype: a dictionary mapes site names to prototype momentum. + Those prototype values are used to get shapes of the scaled version. + :returns: a dictionary maps site names to the corresponding tensor + """ + s = {} + for site_names, mass_matrix_sqrt in self._mass_matrix_sqrt.items(): + r_flat = triu_matvecmul(mass_matrix_sqrt, r_unscaled[site_names]) + + # unpacking + pos = 0 + for site_name in site_names: + next_pos = pos + r_prototype[site_name].numel() + s[site_name] = r_flat[pos:next_pos].reshape( + r_prototype[site_name].shape + ) + pos = next_pos + return s + + def unscale(self, r): + """ + Computes `inv(M^{1/2}) @ r`. + + Note that `r` is generated from a gaussian with scale `mass_matrix_sqrt`. + This method will unscale it. + + :param dict r: a dictionary maps site names to a tensor momentum. + :returns: a dictionary maps site names to the corresponding tensor + """ + u = {} + for ( + site_names, + mass_matrix_sqrt_inverse, + ) in self._mass_matrix_sqrt_inverse.items(): + r_flat = torch.cat([r[site_name].reshape(-1) for site_name in site_names]) + u[site_names] = triu_matvecmul(mass_matrix_sqrt_inverse, r_flat) + return u diff --git a/pyro/source/pyro/infer/mcmc/api.py b/pyro/source/pyro/infer/mcmc/api.py new file mode 100644 index 0000000000000000000000000000000000000000..d6df431e9cecb95003a492205a36621cc594bdb9 --- /dev/null +++ b/pyro/source/pyro/infer/mcmc/api.py @@ -0,0 +1,794 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +This module offers a modified interface for MCMC inference with the following objectives: + - making MCMC independent of Pyro specific trace data structure, to facilitate + integration with other PyTorch based libraries. + - bringing the interface closer to that of NumPyro to make it easier to write + code that works with different backends. + - minimal memory consumption with multiprocessing and CUDA. +""" +import copy +import json +import logging +import queue +import signal +import threading +import warnings +from abc import ABC, abstractmethod +from collections import OrderedDict +from typing import Dict + +import torch +import torch.multiprocessing as mp + +import pyro +import pyro.poutine as poutine +from pyro.infer.mcmc.hmc import HMC +from pyro.infer.mcmc.logger import ( + DIAGNOSTIC_MSG, + ProgressBar, + TqdmHandler, + initialize_logger, +) +from pyro.infer.mcmc.nuts import NUTS +from pyro.infer.mcmc.util import ( + diagnostics, + diagnostics_from_stats, + print_summary, + select_samples, +) +from pyro.ops.streaming import CountMeanVarianceStats, StatsOfDict, StreamingStats +from pyro.util import optional + +MAX_SEED = 2**32 - 1 + + +def logger_thread( + log_queue, warmup_steps, num_samples, num_chains, disable_progbar=False +): + """ + Logging thread that asynchronously consumes logging events from `log_queue`, + and handles them appropriately. + """ + progress_bars = ProgressBar( + warmup_steps, num_samples, disable=disable_progbar, num_bars=num_chains + ) + logger = logging.getLogger(__name__) + logger.propagate = False + logger.addHandler(TqdmHandler()) + num_samples = [0] * num_chains + try: + while True: + try: + record = log_queue.get(timeout=1) + except queue.Empty: + continue + if record is None: + break + metadata, msg = record.getMessage().split("]", 1) + _, msg_type, logger_id = metadata[1:].split() + if msg_type == DIAGNOSTIC_MSG: + pbar_pos = int(logger_id.split(":")[-1]) + num_samples[pbar_pos] += 1 + if num_samples[pbar_pos] == warmup_steps: + progress_bars.set_description( + "Sample [{}]".format(pbar_pos + 1), pos=pbar_pos + ) + diagnostics = json.loads(msg, object_pairs_hook=OrderedDict) + progress_bars.set_postfix(diagnostics, pos=pbar_pos, refresh=False) + progress_bars.update(pos=pbar_pos) + else: + logger.handle(record) + finally: + progress_bars.close() + + +class _Worker: + def __init__( + self, + chain_id, + result_queue, + log_queue, + event, + kernel, + num_samples, + warmup_steps, + initial_params=None, + hook=None, + ): + self.chain_id = chain_id + self.kernel = kernel + if initial_params is not None: + self.kernel.initial_params = initial_params + self.num_samples = num_samples + self.warmup_steps = warmup_steps + self.rng_seed = (torch.initial_seed() + chain_id) % MAX_SEED + self.log_queue = log_queue + self.result_queue = result_queue + self.default_dtype = torch.Tensor().dtype + self.default_device = torch.Tensor().device + self.hook = hook + self.event = event + + def run(self, *args, **kwargs): + pyro.set_rng_seed(self.rng_seed) + torch.set_default_dtype(self.default_dtype) + torch.set_default_device(self.default_device) + kwargs = kwargs + logger = logging.getLogger("pyro.infer.mcmc") + logger_id = "CHAIN:{}".format(self.chain_id) + log_queue = self.log_queue + logger = initialize_logger(logger, logger_id, None, log_queue) + logging_hook = _add_logging_hook(logger, None, self.hook) + + try: + for sample in _gen_samples( + self.kernel, + self.warmup_steps, + self.num_samples, + logging_hook, + None, + *args, + **kwargs + ): + self.result_queue.put_nowait((self.chain_id, sample)) + self.event.wait() + self.event.clear() + self.result_queue.put_nowait((self.chain_id, None)) + except Exception as e: + logger.exception(e) + self.result_queue.put_nowait((self.chain_id, e)) + + +def _gen_samples(kernel, warmup_steps, num_samples, hook, chain_id, *args, **kwargs): + kernel.setup(warmup_steps, *args, **kwargs) + params = kernel.initial_params + save_params = getattr(kernel, "save_params", sorted(params)) + # yield structure (key, value.shape) of params + yield {name: params[name].shape for name in save_params} + for i in range(warmup_steps): + params = kernel.sample(params) + hook( + kernel, + params, + "Warmup [{}]".format(chain_id) if chain_id is not None else "Warmup", + i, + ) + for i in range(num_samples): + params = kernel.sample(params) + hook( + kernel, + params, + "Sample [{}]".format(chain_id) if chain_id is not None else "Sample", + i, + ) + flat = [params[name].reshape(-1) for name in save_params] + yield (torch.cat if flat else torch.tensor)(flat) + yield kernel.diagnostics() + kernel.cleanup() + + +def _add_logging_hook(logger, progress_bar=None, hook=None): + def _add_logging(kernel, params, stage, i): + diagnostics = json.dumps(kernel.logging()) + logger.info(diagnostics, extra={"msg_type": DIAGNOSTIC_MSG}) + if progress_bar: + progress_bar.set_description(stage, refresh=False) + if hook: + hook(kernel, params, stage, i) + + return _add_logging + + +class _UnarySampler: + """ + Single process runner class optimized for the case chains are drawn sequentially. + """ + + def __init__( + self, + kernel, + num_samples, + warmup_steps, + num_chains, + disable_progbar, + initial_params=None, + hook=None, + ): + self.kernel = kernel + self.initial_params = initial_params + self.warmup_steps = warmup_steps + self.num_samples = num_samples + self.num_chains = num_chains + self.logger = None + self.disable_progbar = disable_progbar + self.hook = hook + super().__init__() + + def terminate(self, *args, **kwargs): + pass + + def run(self, *args, **kwargs): + logger = logging.getLogger("pyro.infer.mcmc") + for i in range(self.num_chains): + if self.initial_params is not None: + initial_params = {k: v[i] for k, v in self.initial_params.items()} + self.kernel.initial_params = initial_params + + progress_bar = ProgressBar( + self.warmup_steps, self.num_samples, disable=self.disable_progbar + ) + logger = initialize_logger(logger, "", progress_bar) + hook_w_logging = _add_logging_hook(logger, progress_bar, self.hook) + for sample in _gen_samples( + self.kernel, + self.warmup_steps, + self.num_samples, + hook_w_logging, + i if self.num_chains > 1 else None, + *args, + **kwargs + ): + yield sample, i # sample, chain_id + self.kernel.cleanup() + progress_bar.close() + + +class _MultiSampler: + """ + Parallel runner class for running MCMC chains in parallel. This uses the + `torch.multiprocessing` module (itself a light wrapper over the python + `multiprocessing` module) to spin up parallel workers. + """ + + def __init__( + self, + kernel, + num_samples, + warmup_steps, + num_chains, + mp_context, + disable_progbar, + initial_params=None, + hook=None, + ): + self.kernel = kernel + self.warmup_steps = warmup_steps + self.num_chains = num_chains + self.hook = hook + self.workers = [] + self.ctx = mp + if mp_context: + self.ctx = mp.get_context(mp_context) + self.result_queue = self.ctx.Queue() + self.log_queue = self.ctx.Queue() + self.logger = initialize_logger( + logging.getLogger("pyro.infer.mcmc"), "MAIN", log_queue=self.log_queue + ) + self.num_samples = num_samples + self.initial_params = initial_params + self.log_thread = threading.Thread( + target=logger_thread, + args=( + self.log_queue, + self.warmup_steps, + self.num_samples, + self.num_chains, + disable_progbar, + ), + ) + self.log_thread.daemon = True + self.log_thread.start() + self.events = [self.ctx.Event() for _ in range(num_chains)] + + def init_workers(self, *args, **kwargs): + self.workers = [] + for i in range(self.num_chains): + init_params = ( + {k: v[i] for k, v in self.initial_params.items()} + if self.initial_params is not None + else None + ) + worker = _Worker( + i, + self.result_queue, + self.log_queue, + self.events[i], + self.kernel, + self.num_samples, + self.warmup_steps, + initial_params=init_params, + hook=self.hook, + ) + worker.daemon = True + self.workers.append( + self.ctx.Process( + name=str(i), target=worker.run, args=args, kwargs=kwargs + ) + ) + + def terminate(self, terminate_workers=False): + if self.log_thread.is_alive(): + self.log_queue.put_nowait(None) + self.log_thread.join(timeout=1) + # Only kill workers if exception is raised. worker processes are daemon + # processes that will otherwise be terminated with the main process. + # Note that it is important to not + if terminate_workers: + for w in self.workers: + if w.is_alive(): + w.terminate() + + def run(self, *args, **kwargs): + # Ignore sigint in worker processes; they will be shut down + # when the main process terminates. + sigint_handler = signal.signal(signal.SIGINT, signal.SIG_IGN) + self.init_workers(*args, **kwargs) + # restore original handler + signal.signal(signal.SIGINT, sigint_handler) + active_workers = self.num_chains + exc_raised = True + try: + for w in self.workers: + w.start() + while active_workers: + try: + chain_id, val = self.result_queue.get(timeout=5) + except queue.Empty: + continue + if isinstance(val, Exception): + # Exception trace is already logged by worker. + raise val + if val is not None: + yield val, chain_id + self.events[chain_id].set() + else: + active_workers -= 1 + exc_raised = False + finally: + self.terminate(terminate_workers=exc_raised) + + +class AbstractMCMC(ABC): + """ + Base class for MCMC methods. + """ + + def __init__(self, kernel, num_chains, transforms): + self.kernel = kernel + self.num_chains = num_chains + self.transforms = transforms + + @abstractmethod + def run(self, *args, **kwargs): + raise NotImplementedError + + @abstractmethod + def diagnostics(self): + raise NotImplementedError + + def _set_transforms(self, *args, **kwargs): + # Use `kernel.transforms` when available + if getattr(self.kernel, "transforms", None) is not None: + self.transforms = self.kernel.transforms + # Else, get transforms from model (e.g. in multiprocessing). + elif self.kernel.model: + warmup_steps = 0 + self.kernel.setup(warmup_steps, *args, **kwargs) + self.transforms = self.kernel.transforms + # Assign default value + else: + self.transforms = {} + + def _validate_kernel(self, initial_params): + if ( + isinstance(self.kernel, (HMC, NUTS)) + and self.kernel.potential_fn is not None + ): + if initial_params is None: + raise ValueError( + "Must provide valid initial parameters to begin sampling" + " when using `potential_fn` in HMC/NUTS kernel." + ) + + def _validate_initial_params(self, initial_params): + for v in initial_params.values(): + if v.shape[0] != self.num_chains: + raise ValueError( + "The leading dimension of tensors in `initial_params` " + "must match the number of chains." + ) + + +class MCMC(AbstractMCMC): + """ + Wrapper class for Markov Chain Monte Carlo algorithms. Specific MCMC algorithms + are TraceKernel instances and need to be supplied as a ``kernel`` argument + to the constructor. + + .. note:: The case of `num_chains > 1` uses python multiprocessing to + run parallel chains in multiple processes. This goes with the usual + caveats around multiprocessing in python, e.g. the model used to + initialize the ``kernel`` must be serializable via `pickle`, and the + performance / constraints will be platform dependent (e.g. only + the "spawn" context is available in Windows). This has also not + been extensively tested on the Windows platform. + + :param kernel: An instance of the ``TraceKernel`` class, which when + given an execution trace returns another sample trace from the target + (posterior) distribution. + :param int num_samples: The number of samples that need to be generated, + excluding the samples discarded during the warmup phase. + :param int warmup_steps: Number of warmup iterations. The samples generated + during the warmup phase are discarded. If not provided, default is + is the same as `num_samples`. + :param int num_chains: Number of MCMC chains to run in parallel. Depending on + whether `num_chains` is 1 or more than 1, this class internally dispatches + to either `_UnarySampler` or `_MultiSampler`. + :param dict initial_params: dict containing initial tensors in unconstrained + space to initiate the markov chain. The leading dimension's size must match + that of `num_chains`. If not specified, parameter values will be sampled from + the prior. + :param hook_fn: Python callable that takes in `(kernel, samples, stage, i)` + as arguments. stage is either `sample` or `warmup` and i refers to the + i'th sample for the given stage. This can be used to implement additional + logging, or more generally, run arbitrary code per generated sample. + :param str mp_context: Multiprocessing context to use when `num_chains > 1`. + Only applicable for Python 3.5 and above. Use `mp_context="spawn"` for + CUDA. + :param bool disable_progbar: Disable progress bar and diagnostics update. + :param bool disable_validation: Disables distribution validation check. + Defaults to ``True``, disabling validation, since divergent transitions + will lead to exceptions. Switch to ``False`` to enable validation, or + to ``None`` to preserve existing global values. + :param dict transforms: dictionary that specifies a transform for a sample site + with constrained support to unconstrained space. + :param List[str] save_params: Optional list of a subset of parameter names to + save during sampling and diagnostics. This is useful in models with + large nuisance variables. Defaults to None, saving all params. + """ + + def __init__( + self, + kernel, + num_samples, + warmup_steps=None, + initial_params=None, + num_chains=1, + hook_fn=None, + mp_context=None, + disable_progbar=False, + disable_validation=True, + transforms=None, + save_params=None, + ): + super().__init__(kernel, num_chains, transforms) + self.warmup_steps = ( + num_samples if warmup_steps is None else warmup_steps + ) # Stan + self.num_samples = num_samples + self.disable_validation = disable_validation + self._samples = None + self._args = None + self._kwargs = None + if save_params is not None: + kernel.save_params = save_params + self._validate_kernel(initial_params) + parallel = False + if num_chains > 1: + # check that initial_params is different for each chain + if initial_params: + self._validate_initial_params(initial_params) + # FIXME: probably we want to use "spawn" method by default to avoid the error + # CUDA initialization error https://github.com/pytorch/pytorch/issues/2517 + # even that we run MCMC in CPU. + if mp_context is None: + # change multiprocessing context to 'spawn' for CUDA tensors. + if list(initial_params.values())[0].is_cuda: + mp_context = "spawn" + + # verify num_chains is compatible with available CPU. + available_cpu = max( + mp.cpu_count() - 1, 1 + ) # reserving 1 for the main process. + if num_chains <= available_cpu: + parallel = True + else: + warnings.warn( + "num_chains={} is more than available_cpu={}. " + "Chains will be drawn sequentially.".format( + num_chains, available_cpu + ) + ) + else: + if initial_params: + initial_params = {k: v.unsqueeze(0) for k, v in initial_params.items()} + self._diagnostics = [None] * num_chains + if parallel: + self.sampler = _MultiSampler( + kernel, + num_samples, + self.warmup_steps, + num_chains, + mp_context, + disable_progbar, + initial_params=initial_params, + hook=hook_fn, + ) + else: + self.sampler = _UnarySampler( + kernel, + num_samples, + self.warmup_steps, + num_chains, + disable_progbar, + initial_params=initial_params, + hook=hook_fn, + ) + + @poutine.block + def run(self, *args, **kwargs): + """ + Run MCMC to generate samples and populate `self._samples`. + + Example usage: + + .. code-block:: python + + def model(data): + ... + + nuts_kernel = NUTS(model) + mcmc = MCMC(nuts_kernel, num_samples=500) + mcmc.run(data) + samples = mcmc.get_samples() + + :param args: optional arguments taken by + :meth:`MCMCKernel.setup `. + :param kwargs: optional keywords arguments taken by + :meth:`MCMCKernel.setup `. + """ + self._args, self._kwargs = args, kwargs + num_samples = [0] * self.num_chains + z_flat_acc = [[] for _ in range(self.num_chains)] + with optional( + pyro.validation_enabled(not self.disable_validation), + self.disable_validation is not None, + ): + # XXX we clone CUDA tensor args to resolve the issue "Invalid device pointer" + # at https://github.com/pytorch/pytorch/issues/10375 + # This also resolves "RuntimeError: Cowardly refusing to serialize non-leaf tensor which + # requires_grad", which happens with `jit_compile` under PyTorch 1.7 + args = [arg.detach() if torch.is_tensor(arg) else arg for arg in args] + for x, chain_id in self.sampler.run(*args, **kwargs): + if num_samples[chain_id] == 0: + num_samples[chain_id] += 1 + z_structure = x + elif num_samples[chain_id] == self.num_samples + 1: + self._diagnostics[chain_id] = x + else: + num_samples[chain_id] += 1 + if self.num_chains > 1: + x_cloned = x.clone() + del x + else: + x_cloned = x + z_flat_acc[chain_id].append(x_cloned) + + z_flat_acc = torch.stack([torch.stack(l) for l in z_flat_acc]) + + # unpack latent + pos = 0 + z_acc = z_structure.copy() + for k in sorted(z_structure): + shape = z_structure[k] + next_pos = pos + shape.numel() + z_acc[k] = z_flat_acc[:, :, pos:next_pos].reshape( + (self.num_chains, self.num_samples) + shape + ) + pos = next_pos + assert pos == z_flat_acc.shape[-1] + + # If transforms is not explicitly provided, infer automatically using + # model args, kwargs. + if self.transforms is None: + self._set_transforms(*args, **kwargs) + + # transform samples back to constrained space + for name, z in z_acc.items(): + if name in self.transforms: + z_acc[name] = self.transforms[name].inv(z) + self._samples = z_acc + + # terminate the sampler (shut down worker processes) + self.sampler.terminate(True) + + def get_samples(self, num_samples=None, group_by_chain=False): + """ + Get samples from the MCMC run, potentially resampling with replacement. + + For parameter details see: :meth:`select_samples `. + """ + samples = self._samples + return select_samples(samples, num_samples, group_by_chain) + + def diagnostics(self): + """ + Gets some diagnostics statistics such as effective sample size, split + Gelman-Rubin, or divergent transitions from the sampler. + """ + diag = diagnostics(self._samples) + for diag_name in self._diagnostics[0]: + diag[diag_name] = { + "chain {}".format(i): self._diagnostics[i][diag_name] + for i in range(self.num_chains) + } + return diag + + def summary(self, prob=0.9): + """ + Prints a summary table displaying diagnostics of samples obtained from + posterior. The diagnostics displayed are mean, standard deviation, median, + the 90% Credibility Interval, :func:`~pyro.ops.stats.effective_sample_size`, + :func:`~pyro.ops.stats.split_gelman_rubin`. + + :param float prob: the probability mass of samples within the credibility interval. + """ + print_summary(self._samples, prob=prob) + if "divergences" in self._diagnostics[0]: + print( + "Number of divergences: {}".format( + sum( + [ + len(self._diagnostics[i]["divergences"]) + for i in range(self.num_chains) + ] + ) + ) + ) + + +class StreamingMCMC(AbstractMCMC): + """ + MCMC that computes required statistics in a streaming fashion. For this class no samples are retained + but only aggregated statistics. This is useful for running memory expensive models where we care only + about specific statistics (especially useful in a memory constrained environments like GPU). + + For available streaming ops please see :mod:`~pyro.ops.streaming`. + """ + + def __init__( + self, + kernel, + num_samples, + warmup_steps=None, + initial_params=None, + statistics=None, + num_chains=1, + hook_fn=None, + disable_progbar=False, + disable_validation=True, + transforms=None, + save_params=None, + ): + super().__init__(kernel, num_chains, transforms) + self.warmup_steps = ( + num_samples if warmup_steps is None else warmup_steps + ) # Stan + self.num_samples = num_samples + self.disable_validation = disable_validation + self._samples = None + self._args = None + self._kwargs = None + if statistics is None: + statistics = StatsOfDict(default=CountMeanVarianceStats) + self._statistics = statistics + self._default_statistics = copy.deepcopy(statistics) + if save_params is not None: + kernel.save_params = save_params + self._validate_kernel(initial_params) + if num_chains > 1: + if initial_params: + self._validate_initial_params(initial_params) + else: + if initial_params: + initial_params = {k: v.unsqueeze(0) for k, v in initial_params.items()} + self._diagnostics = [None] * num_chains + self.sampler = _UnarySampler( + kernel, + num_samples, + self.warmup_steps, + num_chains, + disable_progbar, + initial_params=initial_params, + hook=hook_fn, + ) + + @poutine.block + def run(self, *args, **kwargs): + """ + Run StreamingMCMC to compute required `self._statistics`. + """ + self._args, self._kwargs = args, kwargs + num_samples = [0] * self.num_chains + + with optional( + pyro.validation_enabled(not self.disable_validation), + self.disable_validation is not None, + ): + args = [arg.detach() if torch.is_tensor(arg) else arg for arg in args] + for x, chain_id in self.sampler.run(*args, **kwargs): + if num_samples[chain_id] == 0: + # If transforms is not explicitly provided, infer automatically using + # model args, kwargs. + if self.transforms is None: + self._set_transforms(*args, **kwargs) + num_samples[chain_id] += 1 + z_structure = x + elif num_samples[chain_id] == self.num_samples + 1: + self._diagnostics[chain_id] = x + else: + num_samples[chain_id] += 1 + if self.num_chains > 1: + x_cloned = x.clone() + del x + else: + x_cloned = x + + # unpack latent + pos = 0 + z_acc = z_structure.copy() + for k in sorted(z_structure): + shape = z_structure[k] + next_pos = pos + shape.numel() + z_acc[k] = x_cloned[pos:next_pos].reshape(shape) + pos = next_pos + + for name, z in z_acc.items(): + if name in self.transforms: + z_acc[name] = self.transforms[name].inv(z) + + self._statistics.update( + { + (chain_id, name): transformed_sample + for name, transformed_sample in z_acc.items() + } + ) + + # terminate the sampler (shut down worker processes) + self.sampler.terminate(True) + + def get_statistics(self, group_by_chain=True): + """ + Returns a dict of statistics defined by those passed to the class constructor. + + :param bool group_by_chain: Whether statistics should be chain-wise or merged together. + """ + if group_by_chain: + return self._statistics.get() + else: + # merge all chains with respect to names + merged_dict: Dict[str, StreamingStats] = {} + for (_, name), stat in self._statistics.stats.items(): + if name in merged_dict: + merged_dict[name] = merged_dict[name].merge(stat) + else: + merged_dict[name] = stat + + return {k: v.get() for k, v in merged_dict.items()} + + def diagnostics(self): + """ + Gets diagnostics. Currently a split Gelman-Rubin is only supported and requires + 'mean' and 'variance' streaming statistics to be present. + """ + statistics = self._statistics.get() + diag = diagnostics_from_stats(statistics, self.num_samples, self.num_chains) + for diag_name in self._diagnostics[0]: + diag[diag_name] = { + "chain {}".format(i): self._diagnostics[i][diag_name] + for i in range(self.num_chains) + } + return diag diff --git a/pyro/source/pyro/infer/mcmc/hmc.py b/pyro/source/pyro/infer/mcmc/hmc.py new file mode 100644 index 0000000000000000000000000000000000000000..c3d535b2e209aba3669547fd1603a8020a800647 --- /dev/null +++ b/pyro/source/pyro/infer/mcmc/hmc.py @@ -0,0 +1,452 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math +from collections import OrderedDict + +import torch + +import pyro +import pyro.distributions as dist +from pyro.distributions.testing.fakes import NonreparameterizedNormal +from pyro.distributions.util import scalar_like +from pyro.infer.autoguide import init_to_uniform +from pyro.infer.mcmc.adaptation import WarmupAdapter +from pyro.infer.mcmc.mcmc_kernel import MCMCKernel +from pyro.infer.mcmc.util import initialize_model +from pyro.ops.integrator import _EXCEPTION_HANDLERS, potential_grad, velocity_verlet +from pyro.util import optional, torch_isnan + + +class HMC(MCMCKernel): + r""" + Simple Hamiltonian Monte Carlo kernel, where ``step_size`` and ``num_steps`` + need to be explicitly specified by the user. + + **References** + + [1] `MCMC Using Hamiltonian Dynamics`, + Radford M. Neal + + :param model: Python callable containing Pyro primitives. + :param potential_fn: Python callable calculating potential energy with input + is a dict of real support parameters. + :param float step_size: Determines the size of a single step taken by the + verlet integrator while computing the trajectory using Hamiltonian + dynamics. If not specified, it will be set to 1. + :param float trajectory_length: Length of a MCMC trajectory. If not + specified, it will be set to ``step_size x num_steps``. In case + ``num_steps`` is not specified, it will be set to :math:`2\pi`. + :param int num_steps: The number of discrete steps over which to simulate + Hamiltonian dynamics. The state at the end of the trajectory is + returned as the proposal. This value is always equal to + ``int(trajectory_length / step_size)``. + :param bool adapt_step_size: A flag to decide if we want to adapt step_size + during warm-up phase using Dual Averaging scheme. + :param bool adapt_mass_matrix: A flag to decide if we want to adapt mass + matrix during warm-up phase using Welford scheme. + :param bool full_mass: A flag to decide if mass matrix is dense or diagonal. + :param dict transforms: Optional dictionary that specifies a transform + for a sample site with constrained support to unconstrained space. The + transform should be invertible, and implement `log_abs_det_jacobian`. + If not specified and the model has sites with constrained support, + automatic transformations will be applied, as specified in + :mod:`torch.distributions.constraint_registry`. + :param int max_plate_nesting: Optional bound on max number of nested + :func:`pyro.plate` contexts. This is required if model contains + discrete sample sites that can be enumerated over in parallel. + :param bool jit_compile: Optional parameter denoting whether to use + the PyTorch JIT to trace the log density computation, and use this + optimized executable trace in the integrator. + :param dict jit_options: A dictionary contains optional arguments for + :func:`torch.jit.trace` function. + :param bool ignore_jit_warnings: Flag to ignore warnings from the JIT + tracer when ``jit_compile=True``. Default is False. + :param float target_accept_prob: Increasing this value will lead to a smaller + step size, hence the sampling will be slower and more robust. Default to 0.8. + :param callable init_strategy: A per-site initialization function. + See :ref:`autoguide-initialization` section for available functions. + :param float min_stepsize: Lower bound on stepsize in adaptation strategy. + :param float max_stepsize: Upper bound on stepsize in adaptation strategy. + + .. note:: Internally, the mass matrix will be ordered according to the order + of the names of latent variables, not the order of their appearance in + the model. + + Example: + + >>> true_coefs = torch.tensor([1., 2., 3.]) + >>> data = torch.randn(2000, 3) + >>> dim = 3 + >>> labels = dist.Bernoulli(logits=(true_coefs * data).sum(-1)).sample() + >>> + >>> def model(data): + ... coefs_mean = torch.zeros(dim) + ... coefs = pyro.sample('beta', dist.Normal(coefs_mean, torch.ones(3))) + ... y = pyro.sample('y', dist.Bernoulli(logits=(coefs * data).sum(-1)), obs=labels) + ... return y + >>> + >>> hmc_kernel = HMC(model, step_size=0.0855, num_steps=4) + >>> mcmc = MCMC(hmc_kernel, num_samples=500, warmup_steps=100) + >>> mcmc.run(data) + >>> mcmc.get_samples()['beta'].mean(0) # doctest: +SKIP + tensor([ 0.9819, 1.9258, 2.9737]) + """ + + def __init__( + self, + model=None, + potential_fn=None, + step_size=1, + trajectory_length=None, + num_steps=None, + adapt_step_size=True, + adapt_mass_matrix=True, + full_mass=False, + transforms=None, + max_plate_nesting=None, + jit_compile=False, + jit_options=None, + ignore_jit_warnings=False, + target_accept_prob=0.8, + init_strategy=init_to_uniform, + *, + min_stepsize: float = 1e-10, + max_stepsize: float = 1e10, + ): + if not ((model is None) ^ (potential_fn is None)): + raise ValueError("Only one of `model` or `potential_fn` must be specified.") + # NB: deprecating args - model, transforms + self.model = model + self.transforms = transforms + self._max_plate_nesting = max_plate_nesting + self._jit_compile = jit_compile + self._jit_options = jit_options + self._ignore_jit_warnings = ignore_jit_warnings + self._init_strategy = init_strategy + self._min_stepsize = min_stepsize + self._max_stepsize = max_stepsize + + self.potential_fn = potential_fn + if trajectory_length is not None: + self.trajectory_length = trajectory_length + elif num_steps is not None: + self.trajectory_length = step_size * num_steps + else: + self.trajectory_length = 2 * math.pi # from Stan + # The following parameter is used in find_reasonable_step_size method. + # In NUTS paper, this threshold is set to a fixed log(0.5). + # After https://github.com/stan-dev/stan/pull/356, it is set to a fixed log(0.8). + self._direction_threshold = math.log(0.8) # from Stan + self._max_sliced_energy = 1000 + self._reset() + self._adapter = WarmupAdapter( + step_size, + adapt_step_size=adapt_step_size, + adapt_mass_matrix=adapt_mass_matrix, + target_accept_prob=target_accept_prob, + dense_mass=full_mass, + ) + super().__init__() + + def _kinetic_energy(self, r_unscaled): + energy = 0.0 + for site_names, value in r_unscaled.items(): + energy = energy + value.dot(value) + return 0.5 * energy + + def _reset(self): + self._t = 0 + self._accept_cnt = 0 + self._mean_accept_prob = 0.0 + self._divergences = [] + self._prototype_trace = None + self._initial_params = None + self._z_last = None + self._potential_energy_last = None + self._z_grads_last = None + self._warmup_steps = None + + def _find_reasonable_step_size(self, z): + step_size = self.step_size + + # We are going to find a step_size which make accept_prob (Metropolis correction) + # near the target_accept_prob. If accept_prob:=exp(-delta_energy) is small, + # then we have to decrease step_size; otherwise, increase step_size. + try: + potential_energy = self.potential_fn(z) + # handle exceptions as defined in the exception registry + except Exception as e: + if any(h(e) for h in _EXCEPTION_HANDLERS.values()): + # skip finding reasonable step size + return step_size + else: + raise e + + r, r_unscaled = self._sample_r(name="r_presample_0") + energy_current = self._kinetic_energy(r_unscaled) + potential_energy + # This is required so as to avoid issues with autograd when model + # contains transforms with cache_size > 0 (https://github.com/pyro-ppl/pyro/issues/2292) + z = {k: v.clone() for k, v in z.items()} + z_new, r_new, z_grads_new, potential_energy_new = velocity_verlet( + z, r, self.potential_fn, self.mass_matrix_adapter.kinetic_grad, step_size + ) + r_new_unscaled = self.mass_matrix_adapter.unscale(r_new) + energy_new = self._kinetic_energy(r_new_unscaled) + potential_energy_new + delta_energy = energy_new - energy_current + # direction=1 means keep increasing step_size, otherwise decreasing step_size. + # Note that the direction is -1 if delta_energy is `NaN` which may be the + # case for a diverging trajectory (e.g. in the case of evaluating log prob + # of a value simulated using a large step size for a constrained sample site). + direction = 1 if self._direction_threshold < -delta_energy else -1 + + # define scale for step_size: 2 for increasing, 1/2 for decreasing + step_size_scale = 2**direction + direction_new = direction + # keep scale step_size until accept_prob crosses its target + t = 0 + while ( + direction_new == direction + and self._min_stepsize < step_size < self._max_stepsize + ): + t += 1 + step_size = step_size_scale * step_size + r, r_unscaled = self._sample_r(name="r_presample_{}".format(t)) + energy_current = self._kinetic_energy(r_unscaled) + potential_energy + z_new, r_new, z_grads_new, potential_energy_new = velocity_verlet( + z, + r, + self.potential_fn, + self.mass_matrix_adapter.kinetic_grad, + step_size, + ) + r_new_unscaled = self.mass_matrix_adapter.unscale(r_new) + energy_new = self._kinetic_energy(r_new_unscaled) + potential_energy_new + delta_energy = energy_new - energy_current + direction_new = 1 if self._direction_threshold < -delta_energy else -1 + step_size = max(step_size, self._min_stepsize) + step_size = min(step_size, self._max_stepsize) + return step_size + + def _sample_r(self, name): + r_unscaled = {} + options = { + "dtype": self._potential_energy_last.dtype, + "device": self._potential_energy_last.device, + } + for site_names, size in self.mass_matrix_adapter.mass_matrix_size.items(): + # we want to sample from Normal distribution using `sample` method rather than + # `rsample` method because the former is a bit faster + r_unscaled[site_names] = pyro.sample( + "{}_{}".format(name, site_names), + NonreparameterizedNormal( + torch.zeros(size, **options), torch.ones(size, **options) + ), + ) + + r = self.mass_matrix_adapter.scale(r_unscaled, r_prototype=self.initial_params) + return r, r_unscaled + + @property + def mass_matrix_adapter(self): + return self._adapter.mass_matrix_adapter + + @mass_matrix_adapter.setter + def mass_matrix_adapter(self, value): + self._adapter.mass_matrix_adapter = value + + @property + def inverse_mass_matrix(self): + return self.mass_matrix_adapter.inverse_mass_matrix + + @property + def step_size(self): + return self._adapter.step_size + + @property + def num_steps(self): + return max(1, int(self.trajectory_length / self.step_size)) + + @property + def initial_params(self): + return self._initial_params + + @initial_params.setter + def initial_params(self, params): + self._initial_params = params + + def _initialize_model_properties(self, model_args, model_kwargs): + init_params, potential_fn, transforms, trace = initialize_model( + self.model, + model_args, + model_kwargs, + transforms=self.transforms, + max_plate_nesting=self._max_plate_nesting, + jit_compile=self._jit_compile, + jit_options=self._jit_options, + skip_jit_warnings=self._ignore_jit_warnings, + init_strategy=self._init_strategy, + initial_params=self._initial_params, + ) + self.potential_fn = potential_fn + self.transforms = transforms + self._initial_params = init_params + self._prototype_trace = trace + + def _initialize_adapter(self): + if self._adapter.dense_mass is False: + dense_sites_list = [] + elif self._adapter.dense_mass is True: + dense_sites_list = [tuple(sorted(self.initial_params))] + else: + msg = "full_mass should be a list of tuples of site names." + dense_sites_list = self._adapter.dense_mass + assert isinstance(dense_sites_list, list), msg + for dense_sites in dense_sites_list: + assert dense_sites and isinstance(dense_sites, tuple), msg + for name in dense_sites: + assert isinstance(name, str) and name in self.initial_params, msg + dense_sites_set = set().union(*dense_sites_list) + diag_sites = tuple( + sorted( + [name for name in self.initial_params if name not in dense_sites_set] + ) + ) + assert len(diag_sites) + sum([len(sites) for sites in dense_sites_list]) == len( + self.initial_params + ), "Site names specified in full_mass are duplicated." + + mass_matrix_shape = OrderedDict() + for dense_sites in dense_sites_list: + size = sum([self.initial_params[site].numel() for site in dense_sites]) + mass_matrix_shape[dense_sites] = (size, size) + + if diag_sites: + size = sum([self.initial_params[site].numel() for site in diag_sites]) + mass_matrix_shape[diag_sites] = (size,) + + options = { + "dtype": self._potential_energy_last.dtype, + "device": self._potential_energy_last.device, + } + self._adapter.configure( + self._warmup_steps, + mass_matrix_shape=mass_matrix_shape, + find_reasonable_step_size_fn=self._find_reasonable_step_size, + options=options, + ) + + if self._adapter.adapt_step_size: + self._adapter.reset_step_size_adaptation(self._initial_params) + + def setup(self, warmup_steps, *args, **kwargs): + self._warmup_steps = warmup_steps + if self.model is not None: + self._initialize_model_properties(args, kwargs) + if self.initial_params: + z = {k: v.detach() for k, v in self.initial_params.items()} + z_grads, potential_energy = potential_grad(self.potential_fn, z) + else: + z_grads, potential_energy = {}, self.potential_fn(self.initial_params) + self._cache(self.initial_params, potential_energy, z_grads) + if self.initial_params: + self._initialize_adapter() + + def cleanup(self): + self._reset() + + def _cache(self, z, potential_energy, z_grads=None): + self._z_last = z + self._potential_energy_last = potential_energy + self._z_grads_last = z_grads + + def clear_cache(self): + self._z_last = None + self._potential_energy_last = None + self._z_grads_last = None + + def _fetch_from_cache(self): + return self._z_last, self._potential_energy_last, self._z_grads_last + + def sample(self, params): + z, potential_energy, z_grads = self._fetch_from_cache() + # recompute PE when cache is cleared + if z is None: + z = params + z_grads, potential_energy = potential_grad(self.potential_fn, z) + self._cache(z, potential_energy, z_grads) + # return early if no sample sites + elif len(z) == 0: + self._t += 1 + self._mean_accept_prob = 1.0 + if self._t > self._warmup_steps: + self._accept_cnt += 1 + return params + r, r_unscaled = self._sample_r(name="r_t={}".format(self._t)) + energy_current = self._kinetic_energy(r_unscaled) + potential_energy + + # Temporarily disable distributions args checking as + # NaNs are expected during step size adaptation + with optional(pyro.validation_enabled(False), self._t < self._warmup_steps): + z_new, r_new, z_grads_new, potential_energy_new = velocity_verlet( + z, + r, + self.potential_fn, + self.mass_matrix_adapter.kinetic_grad, + self.step_size, + self.num_steps, + z_grads=z_grads, + ) + # apply Metropolis correction. + r_new_unscaled = self.mass_matrix_adapter.unscale(r_new) + energy_proposal = ( + self._kinetic_energy(r_new_unscaled) + potential_energy_new + ) + delta_energy = energy_proposal - energy_current + # handle the NaN case which may be the case for a diverging trajectory + # when using a large step size. + delta_energy = ( + scalar_like(delta_energy, float("inf")) + if torch_isnan(delta_energy) + else delta_energy + ) + if delta_energy > self._max_sliced_energy and self._t >= self._warmup_steps: + self._divergences.append(self._t - self._warmup_steps) + + accept_prob = (-delta_energy).exp().clamp(max=1.0) + rand = pyro.sample( + "rand_t={}".format(self._t), + dist.Uniform(scalar_like(accept_prob, 0.0), scalar_like(accept_prob, 1.0)), + ) + accepted = False + if rand < accept_prob: + accepted = True + z = z_new + z_grads = z_grads_new + self._cache(z, potential_energy_new, z_grads) + + self._t += 1 + if self._t > self._warmup_steps: + n = self._t - self._warmup_steps + if accepted: + self._accept_cnt += 1 + else: + n = self._t + self._adapter.step(self._t, z, accept_prob, z_grads) + + self._mean_accept_prob += (accept_prob.item() - self._mean_accept_prob) / n + return z.copy() + + def logging(self): + return OrderedDict( + [ + ("step size", "{:.2e}".format(self.step_size)), + ("acc. prob", "{:.3f}".format(self._mean_accept_prob)), + ] + ) + + def diagnostics(self): + return { + "divergences": self._divergences, + "acceptance rate": self._accept_cnt / (self._t - self._warmup_steps), + } diff --git a/pyro/source/pyro/infer/mcmc/logger.py b/pyro/source/pyro/infer/mcmc/logger.py new file mode 100644 index 0000000000000000000000000000000000000000..20822404394835b8eeee30e3eedec8178303faf8 --- /dev/null +++ b/pyro/source/pyro/infer/mcmc/logger.py @@ -0,0 +1,275 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import json +import logging +import os +import sys +from collections import OrderedDict + +from tqdm import tqdm +from tqdm.auto import tqdm as tqdm_nb + +try: + get_ipython + ipython_env = True +except NameError: + ipython_env = False + +# Identifiers to distinguish between diagnostic messages for progress bars +# vs. logging output. Useful when using QueueHandler in multiprocessing. +LOG_MSG = "LOG" +DIAGNOSTIC_MSG = "DIAGNOSTICS" + + +# Following compatibility code is for Python 2 (available in Python 3.2+). +# Source: https://github.com/python/cpython/blob/master/Lib/logging/handlers.py +# +# Copyright 2001-2016 by Vinay Sajip. All Rights Reserved. +# +# Permission to use, copy, modify, and distribute this software and its +# documentation for any purpose and without fee is hereby granted, +# provided that the above copyright notice appear in all copies and that +# both that copyright notice and this permission notice appear in +# supporting documentation, and that the name of Vinay Sajip +# not be used in advertising or publicity pertaining to distribution +# of the software without specific, written prior permission. +# VINAY SAJIP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +# ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL +# VINAY SAJIP BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +# ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +# IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +class ProgressBar: + """ + Initialize progress bars using :class:`~tqdm.tqdm`. + + :param int warmup_steps: Number of warmup steps. + :param int num_samples: Number of MCMC samples. + :param int min_width: Minimum column width of the bar. + :param int max_width: Maximum column width of the bar. + :param bool disable: Disable progress bar. + :param int num_bars: Number of progress bars to initialize. + If multiple bars are initialized, they need to be separately + updated via the ``pos`` kwarg. + """ + + def __init__( + self, + warmup_steps, + num_samples, + min_width=80, + max_width=120, + disable=False, + num_bars=1, + ): + total_steps = warmup_steps + num_samples + # Disable progress bar in "CI" + # (see https://github.com/travis-ci/travis-ci/issues/1337). + disable = disable or "CI" in os.environ or "PYTEST_XDIST_WORKER" in os.environ + bar_format = ( + "{l_bar}{bar}| {n_fmt}/{total_fmt} [{elapsed}, {rate_fmt}{postfix}]" + ) + pbar_cls = tqdm_nb if num_bars > 1 and ipython_env else tqdm + self.progress_bars = [] + for i in range(num_bars): + description = "Warmup" if num_bars == 1 else "Warmup [{}]".format(i + 1) + pbar = pbar_cls( + total=total_steps, + desc=description, + bar_format=bar_format, + position=i, + file=sys.stderr, + disable=disable, + ) + # Assume reasonable values when terminal width not available + if getattr(pbar, "ncols", None) is not None: + pbar.ncols = max(min_width, pbar.ncols) + pbar.ncols = min(max_width, pbar.ncols) + self.progress_bars.append(pbar) + self.disable = disable + self.ipython_env = ipython_env + + def __enter__(self): + return self + + def __exit__(self, *exc): + self.close() + return False + + def set_description(self, *args, **kwargs): + pos = kwargs.pop("pos", 0) + if not self.disable: + self.progress_bars[pos].set_description(*args, **kwargs) + + def set_postfix(self, *args, **kwargs): + pos = kwargs.pop("pos", 0) + if not self.disable: + self.progress_bars[pos].set_postfix(*args, **kwargs) + + def update(self, *args, **kwargs): + pos = kwargs.pop("pos", 0) + if not self.disable: + self.progress_bars[pos].update(*args, **kwargs) + + def close(self): + for pbar in self.progress_bars: + pbar.close() + # Required to not overwrite multiple progress bars on exit. + if not self.ipython_env and not self.disable: + sys.stderr.write("\n" * len(self.progress_bars)) + + +class QueueHandler(logging.Handler): + """ + This handler sends events to a queue. Typically, it would be used together + with a multiprocessing Queue to centralise logging to file in one process + (in a multi-process application), so as to avoid file write contention + between processes. + + This code is new in Python 3.2, but this class can be copy pasted into + user code for use with earlier Python versions. + """ + + def __init__(self, queue): + """ + Initialise an instance, using the passed queue. + """ + logging.Handler.__init__(self) + self.queue = queue + + def enqueue(self, record): + """ + Enqueue a record. + + The base implementation uses put_nowait. You may want to override + this method if you want to use blocking, timeouts or custom queue + implementations. + """ + self.queue.put_nowait(record) + + def prepare(self, record): + """ + Prepares a record for queuing. The object returned by this method is + enqueued. + + The base implementation formats the record to merge the message + and arguments, and removes unpickleable items from the record + in-place. + + You might want to override this method if you want to convert + the record to a dict or JSON string, or send a modified copy + of the record while leaving the original intact. + """ + record.msg = self.format(record) + record.args = None + record.exc_info = None + return record + + def emit(self, record): + """ + Emit a record. + + Writes the LogRecord to the queue, preparing it for pickling first. + """ + try: + self.enqueue(self.prepare(record)) + except Exception: + self.handleError(record) + + +class TqdmHandler(logging.StreamHandler): + """ + Handler that synchronizes the log output with the + :class:`~tqdm.tqdm` progress bar. + """ + + def emit(self, record): + try: + msg = self.format(record) + self.flush() + tqdm.write(msg, file=sys.stderr) + except (KeyboardInterrupt, SystemExit): + raise + except Exception: + self.handleError(record) + + +class MCMCLoggingHandler(logging.Handler): + """ + Main logging handler used by :class:`~pyro.infer.mcmc`, + to handle both progress bar updates and regular `logging` + messages. + + :param log_handler: default log handler for logging + output. + :param progress_bar: If provided, diagnostic information + is updated using the bar. + """ + + def __init__(self, log_handler, progress_bar=None): + logging.Handler.__init__(self) + self.log_handler = log_handler + self.progress_bar = progress_bar + + def emit(self, record): + try: + if self.progress_bar and record.msg_type == DIAGNOSTIC_MSG: + diagnostics = json.loads( + record.getMessage(), object_pairs_hook=OrderedDict + ) + self.progress_bar.set_postfix(diagnostics, refresh=False) + self.progress_bar.update() + else: + self.log_handler.handle(record) + except (KeyboardInterrupt, SystemExit): + raise + except Exception: + self.handleError(record) + + +class MetadataFilter(logging.Filter): + """ + Adds auxiliary information to log records, like `logger_id` and + `msg_type`. + """ + + def __init__(self, logger_id): + self.logger_id = logger_id + super().__init__() + + def filter(self, record): + record.logger_id = self.logger_id + if not getattr(record, "msg_type", None): + record.msg_type = LOG_MSG + return True + + +def initialize_logger(logger, logger_id, progress_bar=None, log_queue=None): + """ + Initialize logger for the :class:`pyro.infer.mcmc` module. + + :param logger: logger instance. + :param str logger_id: identifier for the log record, + e.g. chain id in case of multiple samplers. + :param progress_bar: a :class:`tqdm.tqdm` instance. + """ + # Reset handler with new `progress_bar`. + logger.handlers = [] + logger.propagate = False + if log_queue: + handler = QueueHandler(log_queue) + format = "[%(levelname)s %(msg_type)s %(logger_id)s]%(message)s" + progress_bar = None + elif progress_bar: + format = "%(levelname).1s \t %(message)s" + handler = TqdmHandler() + else: + raise ValueError("Logger cannot be initialized without a " "valid handler.") + handler.setFormatter(logging.Formatter(format)) + logging_handler = MCMCLoggingHandler(handler, progress_bar) + logging_handler.addFilter(MetadataFilter(logger_id)) + logger.addHandler(logging_handler) + return logger diff --git a/pyro/source/pyro/infer/mcmc/mcmc_kernel.py b/pyro/source/pyro/infer/mcmc/mcmc_kernel.py new file mode 100644 index 0000000000000000000000000000000000000000..bdc5edeb7e664293b35a81babfdfbbcf2c108969 --- /dev/null +++ b/pyro/source/pyro/infer/mcmc/mcmc_kernel.py @@ -0,0 +1,80 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from abc import ABCMeta, abstractmethod + + +class MCMCKernel(object, metaclass=ABCMeta): + def setup(self, warmup_steps, *args, **kwargs): + r""" + Optional method to set up any state required at the start of the + simulation run. + + :param int warmup_steps: Number of warmup iterations. + :param \*args: Algorithm specific positional arguments. + :param \*\*kwargs: Algorithm specific keyword arguments. + """ + pass + + def cleanup(self): + """ + Optional method to clean up any residual state on termination. + """ + pass + + def logging(self): + """ + Relevant logging information to be printed at regular intervals + of the MCMC run. Returns `None` by default. + + :return: String containing the diagnostic summary. e.g. acceptance rate + :rtype: string + """ + return None + + def diagnostics(self): + """ + Returns a dict of useful diagnostics after finishing sampling process. + """ + # NB: should be not None for multiprocessing works + return {} + + def end_warmup(self): + """ + Optional method to tell kernel that warm-up phase has been finished. + """ + pass + + @property + def initial_params(self): + """ + Returns a dict of initial params (by default, from the prior) to initiate the MCMC run. + + :return: dict of parameter values keyed by their name. + """ + raise NotImplementedError + + @initial_params.setter + def initial_params(self, params): + """ + Sets the parameters to initiate the MCMC run. Note that the parameters must + have unconstrained support. + """ + raise NotImplementedError + + @abstractmethod + def sample(self, params): + """ + Samples parameters from the posterior distribution, when given existing parameters. + + :param dict params: Current parameter values. + :param int time_step: Current time step. + :return: New parameters from the posterior distribution. + """ + raise NotImplementedError + + def __call__(self, params): + """ + Alias for MCMCKernel.sample() method. + """ + return self.sample(params) diff --git a/pyro/source/pyro/infer/mcmc/nuts.py b/pyro/source/pyro/infer/mcmc/nuts.py new file mode 100644 index 0000000000000000000000000000000000000000..0b1071b745b997df8b372b8f823a907395dc8a5a --- /dev/null +++ b/pyro/source/pyro/infer/mcmc/nuts.py @@ -0,0 +1,522 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from collections import namedtuple + +import pyro +import pyro.distributions as dist +from pyro.distributions.util import scalar_like +from pyro.infer.autoguide import init_to_uniform +from pyro.infer.mcmc.hmc import HMC +from pyro.ops.integrator import potential_grad, velocity_verlet +from pyro.util import optional, torch_isnan + + +def _logaddexp(x, y): + minval, maxval = (x, y) if x < y else (y, x) + return (minval - maxval).exp().log1p() + maxval + + +# sum_accept_probs and num_proposals are used to calculate +# the statistic accept_prob for Dual Averaging scheme; +# z_left_grads and z_right_grads are kept to avoid recalculating +# grads at left and right leaves; +# r_sum is used to check turning condition; +# z_proposal_pe and z_proposal_grads are used to cache the +# potential energy and potential energy gradient values for +# the proposal trace. +# weight is the number of valid points in case we use slice sampling +# and is the log sum of (unnormalized) probabilites of valid points +# when we use multinomial sampling +_TreeInfo = namedtuple( + "TreeInfo", + [ + "z_left", + "r_left", + "r_left_unscaled", + "z_left_grads", + "z_right", + "r_right", + "r_right_unscaled", + "z_right_grads", + "z_proposal", + "z_proposal_pe", + "z_proposal_grads", + "r_sum", + "weight", + "turning", + "diverging", + "sum_accept_probs", + "num_proposals", + ], +) + + +class NUTS(HMC): + """ + No-U-Turn Sampler kernel, which provides an efficient and convenient way + to run Hamiltonian Monte Carlo. The number of steps taken by the + integrator is dynamically adjusted on each call to ``sample`` to ensure + an optimal length for the Hamiltonian trajectory [1]. As such, the samples + generated will typically have lower autocorrelation than those generated + by the :class:`~pyro.infer.mcmc.HMC` kernel. Optionally, the NUTS kernel + also provides the ability to adapt step size during the warmup phase. + + Refer to the `baseball example `_ + to see how to do Bayesian inference in Pyro using NUTS. + + **References** + + [1] `The No-U-turn sampler: adaptively setting path lengths in Hamiltonian Monte Carlo`, + Matthew D. Hoffman, and Andrew Gelman. + [2] `A Conceptual Introduction to Hamiltonian Monte Carlo`, + Michael Betancourt + [3] `Slice Sampling`, + Radford M. Neal + + :param model: Python callable containing Pyro primitives. + :param potential_fn: Python callable calculating potential energy with input + is a dict of real support parameters. + :param float step_size: Determines the size of a single step taken by the + verlet integrator while computing the trajectory using Hamiltonian + dynamics. If not specified, it will be set to 1. + :param bool adapt_step_size: A flag to decide if we want to adapt step_size + during warm-up phase using Dual Averaging scheme. + :param bool adapt_mass_matrix: A flag to decide if we want to adapt mass + matrix during warm-up phase using Welford scheme. + :param bool full_mass: A flag to decide if mass matrix is dense or diagonal. + :param bool use_multinomial_sampling: A flag to decide if we want to sample + candidates along its trajectory using "multinomial sampling" or using + "slice sampling". Slice sampling is used in the original NUTS paper [1], + while multinomial sampling is suggested in [2]. By default, this flag is + set to True. If it is set to `False`, NUTS uses slice sampling. + :param dict transforms: Optional dictionary that specifies a transform + for a sample site with constrained support to unconstrained space. The + transform should be invertible, and implement `log_abs_det_jacobian`. + If not specified and the model has sites with constrained support, + automatic transformations will be applied, as specified in + :mod:`torch.distributions.constraint_registry`. + :param int max_plate_nesting: Optional bound on max number of nested + :func:`pyro.plate` contexts. This is required if model contains + discrete sample sites that can be enumerated over in parallel. + :param bool jit_compile: Optional parameter denoting whether to use + the PyTorch JIT to trace the log density computation, and use this + optimized executable trace in the integrator. + :param dict jit_options: A dictionary contains optional arguments for + :func:`torch.jit.trace` function. + :param bool ignore_jit_warnings: Flag to ignore warnings from the JIT + tracer when ``jit_compile=True``. Default is False. + :param float target_accept_prob: Target acceptance probability of step size + adaptation scheme. Increasing this value will lead to a smaller step size, + so the sampling will be slower but more robust. Default to 0.8. + :param int max_tree_depth: Max depth of the binary tree created during the doubling + scheme of NUTS sampler. Default to 10. + :param callable init_strategy: A per-site initialization function. + See :ref:`autoguide-initialization` section for available functions. + + Example: + + >>> true_coefs = torch.tensor([1., 2., 3.]) + >>> data = torch.randn(2000, 3) + >>> dim = 3 + >>> labels = dist.Bernoulli(logits=(true_coefs * data).sum(-1)).sample() + >>> + >>> def model(data): + ... coefs_mean = torch.zeros(dim) + ... coefs = pyro.sample('beta', dist.Normal(coefs_mean, torch.ones(3))) + ... y = pyro.sample('y', dist.Bernoulli(logits=(coefs * data).sum(-1)), obs=labels) + ... return y + >>> + >>> nuts_kernel = NUTS(model, adapt_step_size=True) + >>> mcmc = MCMC(nuts_kernel, num_samples=500, warmup_steps=300) + >>> mcmc.run(data) + >>> mcmc.get_samples()['beta'].mean(0) # doctest: +SKIP + tensor([ 0.9221, 1.9464, 2.9228]) + """ + + def __init__( + self, + model=None, + potential_fn=None, + step_size=1, + adapt_step_size=True, + adapt_mass_matrix=True, + full_mass=False, + use_multinomial_sampling=True, + transforms=None, + max_plate_nesting=None, + jit_compile=False, + jit_options=None, + ignore_jit_warnings=False, + target_accept_prob=0.8, + max_tree_depth=10, + init_strategy=init_to_uniform, + ): + super().__init__( + model, + potential_fn, + step_size, + adapt_step_size=adapt_step_size, + adapt_mass_matrix=adapt_mass_matrix, + full_mass=full_mass, + transforms=transforms, + max_plate_nesting=max_plate_nesting, + jit_compile=jit_compile, + jit_options=jit_options, + ignore_jit_warnings=ignore_jit_warnings, + target_accept_prob=target_accept_prob, + init_strategy=init_strategy, + ) + self.use_multinomial_sampling = use_multinomial_sampling + self._max_tree_depth = max_tree_depth + # There are three conditions to stop doubling process: + # + Tree is becoming too big. + # + The trajectory is making a U-turn. + # + The probability of the states becoming negligible: p(z, r) << u, + # here u is the "slice" variable introduced at the `self.sample(...)` method. + # Denote E_p = -log p(z, r), E_u = -log u, the third condition is equivalent to + # sliced_energy := E_p - E_u > some constant =: max_sliced_energy. + # This also suggests the notion "diverging" in the implemenation: + # when the energy E_p diverges from E_u too much, we stop doubling. + # Here, as suggested in [1], we set dE_max = 1000. + self._max_sliced_energy = 1000 + + def _is_turning(self, r_left_unscaled, r_right_unscaled, r_sum): + # We follow the strategy in Section A.4.2 of [2] for this implementation. + left_angle = 0.0 + right_angle = 0.0 + for site_names, value in r_sum.items(): + rho = ( + value - (r_left_unscaled[site_names] + r_right_unscaled[site_names]) / 2 + ) + left_angle += r_left_unscaled[site_names].dot(rho) + right_angle += r_right_unscaled[site_names].dot(rho) + + return (left_angle <= 0) or (right_angle <= 0) + + def _build_basetree(self, z, r, z_grads, log_slice, direction, energy_current): + step_size = self.step_size if direction == 1 else -self.step_size + z_new, r_new, z_grads, potential_energy = velocity_verlet( + z, + r, + self.potential_fn, + self.mass_matrix_adapter.kinetic_grad, + step_size, + z_grads=z_grads, + ) + r_new_unscaled = self.mass_matrix_adapter.unscale(r_new) + energy_new = potential_energy + self._kinetic_energy(r_new_unscaled) + # handle the NaN case + energy_new = ( + scalar_like(energy_new, float("inf")) + if torch_isnan(energy_new) + else energy_new + ) + sliced_energy = energy_new + log_slice + diverging = sliced_energy > self._max_sliced_energy + delta_energy = energy_new - energy_current + accept_prob = (-delta_energy).exp().clamp(max=1.0) + + if self.use_multinomial_sampling: + tree_weight = -sliced_energy + else: + # As a part of the slice sampling process (see below), along the trajectory + # we eliminate states which p(z, r) < u, or dE > 0. + # Due to this elimination (and stop doubling conditions), + # the weight of binary tree might not equal to 2^tree_depth. + tree_weight = scalar_like(sliced_energy, 1.0 if sliced_energy <= 0 else 0.0) + + r_sum = r_new_unscaled + return _TreeInfo( + z_new, + r_new, + r_new_unscaled, + z_grads, + z_new, + r_new, + r_new_unscaled, + z_grads, + z_new, + potential_energy, + z_grads, + r_sum, + tree_weight, + False, + diverging, + accept_prob, + 1, + ) + + def _build_tree( + self, z, r, z_grads, log_slice, direction, tree_depth, energy_current + ): + if tree_depth == 0: + return self._build_basetree( + z, r, z_grads, log_slice, direction, energy_current + ) + + # build the first half of tree + half_tree = self._build_tree( + z, r, z_grads, log_slice, direction, tree_depth - 1, energy_current + ) + z_proposal = half_tree.z_proposal + z_proposal_pe = half_tree.z_proposal_pe + z_proposal_grads = half_tree.z_proposal_grads + + # Check conditions to stop doubling. If we meet that condition, + # there is no need to build the other tree. + if half_tree.turning or half_tree.diverging: + return half_tree + + # Else, build remaining half of tree. + # If we are going to the right, start from the right leaf of the first half. + if direction == 1: + z = half_tree.z_right + r = half_tree.r_right + z_grads = half_tree.z_right_grads + else: # otherwise, start from the left leaf of the first half + z = half_tree.z_left + r = half_tree.r_left + z_grads = half_tree.z_left_grads + other_half_tree = self._build_tree( + z, r, z_grads, log_slice, direction, tree_depth - 1, energy_current + ) + + if self.use_multinomial_sampling: + tree_weight = _logaddexp(half_tree.weight, other_half_tree.weight) + else: + tree_weight = half_tree.weight + other_half_tree.weight + sum_accept_probs = half_tree.sum_accept_probs + other_half_tree.sum_accept_probs + num_proposals = half_tree.num_proposals + other_half_tree.num_proposals + r_sum = { + site_names: half_tree.r_sum[site_names] + other_half_tree.r_sum[site_names] + for site_names in self.inverse_mass_matrix + } + + # The probability of that proposal belongs to which half of tree + # is computed based on the weights of each half. + if self.use_multinomial_sampling: + other_half_tree_prob = (other_half_tree.weight - tree_weight).exp() + else: + # For the special case that the weights of each half are both 0, + # we choose the proposal from the first half + # (any is fine, because the probability of picking it at the end is 0!). + other_half_tree_prob = ( + other_half_tree.weight / tree_weight + if tree_weight > 0 + else scalar_like(tree_weight, 0.0) + ) + is_other_half_tree = pyro.sample( + "is_other_half_tree", dist.Bernoulli(probs=other_half_tree_prob) + ) + + if is_other_half_tree == 1: + z_proposal = other_half_tree.z_proposal + z_proposal_pe = other_half_tree.z_proposal_pe + z_proposal_grads = other_half_tree.z_proposal_grads + + # leaves of the full tree are determined by the direction + if direction == 1: + z_left = half_tree.z_left + r_left = half_tree.r_left + r_left_unscaled = half_tree.r_left_unscaled + z_left_grads = half_tree.z_left_grads + z_right = other_half_tree.z_right + r_right = other_half_tree.r_right + r_right_unscaled = other_half_tree.r_right_unscaled + z_right_grads = other_half_tree.z_right_grads + else: + z_left = other_half_tree.z_left + r_left = other_half_tree.r_left + r_left_unscaled = other_half_tree.r_left_unscaled + z_left_grads = other_half_tree.z_left_grads + z_right = half_tree.z_right + r_right = half_tree.r_right + r_right_unscaled = half_tree.r_right_unscaled + z_right_grads = half_tree.z_right_grads + + # We already check if first half tree is turning. Now, we check + # if the other half tree or full tree are turning. + turning = other_half_tree.turning or self._is_turning( + r_left_unscaled, r_right_unscaled, r_sum + ) + + # The divergence is checked by the second half tree (the first half is already checked). + diverging = other_half_tree.diverging + + return _TreeInfo( + z_left, + r_left, + r_left_unscaled, + z_left_grads, + z_right, + r_right, + r_right_unscaled, + z_right_grads, + z_proposal, + z_proposal_pe, + z_proposal_grads, + r_sum, + tree_weight, + turning, + diverging, + sum_accept_probs, + num_proposals, + ) + + def sample(self, params): + z, potential_energy, z_grads = self._fetch_from_cache() + # recompute PE when cache is cleared + if z is None: + z = params + z_grads, potential_energy = potential_grad(self.potential_fn, z) + self._cache(z, potential_energy, z_grads) + # return early if no sample sites + elif len(z) == 0: + self._t += 1 + self._mean_accept_prob = 1.0 + if self._t > self._warmup_steps: + self._accept_cnt += 1 + return z + r, r_unscaled = self._sample_r(name="r_t={}".format(self._t)) + energy_current = self._kinetic_energy(r_unscaled) + potential_energy + + # Ideally, following a symplectic integrator trajectory, the energy is constant. + # In that case, we can sample the proposal uniformly, and there is no need to use "slice". + # However, it is not the case for real situation: there are errors during the computation. + # To deal with that problem, as in [1], we introduce an auxiliary "slice" variable (denoted + # by u). + # The sampling process goes as follows: + # first sampling u from initial state (z_0, r_0) according to + # u ~ Uniform(0, p(z_0, r_0)), + # then sampling state (z, r) from the integrator trajectory according to + # (z, r) ~ Uniform({(z', r') in trajectory | p(z', r') >= u}). + # + # For more information about slice sampling method, see [3]. + # For another version of NUTS which uses multinomial sampling instead of slice sampling, + # see [2]. + + if self.use_multinomial_sampling: + log_slice = -energy_current + else: + # Rather than sampling the slice variable from `Uniform(0, exp(-energy))`, we can + # sample log_slice directly using `energy`, so as to avoid potential underflow or + # overflow issues ([2]). + slice_exp_term = pyro.sample( + "slicevar_exp_t={}".format(self._t), + dist.Exponential(scalar_like(energy_current, 1.0)), + ) + log_slice = -energy_current - slice_exp_term + + z_left = z_right = z + r_left = r_right = r + r_left_unscaled = r_right_unscaled = r_unscaled + z_left_grads = z_right_grads = z_grads + accepted = False + r_sum = r_unscaled + sum_accept_probs = 0.0 + num_proposals = 0 + tree_weight = scalar_like( + energy_current, 0.0 if self.use_multinomial_sampling else 1.0 + ) + + # Temporarily disable distributions args checking as + # NaNs are expected during step size adaptation. + with optional(pyro.validation_enabled(False), self._t < self._warmup_steps): + # doubling process, stop when turning or diverging + tree_depth = 0 + while tree_depth < self._max_tree_depth: + direction = pyro.sample( + "direction_t={}_treedepth={}".format(self._t, tree_depth), + dist.Bernoulli(probs=scalar_like(tree_weight, 0.5)), + ) + direction = int(direction.item()) + if ( + direction == 1 + ): # go to the right, start from the right leaf of current tree + new_tree = self._build_tree( + z_right, + r_right, + z_right_grads, + log_slice, + direction, + tree_depth, + energy_current, + ) + # update leaf for the next doubling process + z_right = new_tree.z_right + r_right = new_tree.r_right + r_right_unscaled = new_tree.r_right_unscaled + z_right_grads = new_tree.z_right_grads + else: # go the the left, start from the left leaf of current tree + new_tree = self._build_tree( + z_left, + r_left, + z_left_grads, + log_slice, + direction, + tree_depth, + energy_current, + ) + z_left = new_tree.z_left + r_left = new_tree.r_left + r_left_unscaled = new_tree.r_left_unscaled + z_left_grads = new_tree.z_left_grads + + sum_accept_probs = sum_accept_probs + new_tree.sum_accept_probs + num_proposals = num_proposals + new_tree.num_proposals + + # stop doubling + if new_tree.diverging: + if self._t >= self._warmup_steps: + self._divergences.append(self._t - self._warmup_steps) + break + + if new_tree.turning: + break + + tree_depth += 1 + + if self.use_multinomial_sampling: + new_tree_prob = (new_tree.weight - tree_weight).exp() + else: + new_tree_prob = new_tree.weight / tree_weight + rand = pyro.sample( + "rand_t={}_treedepth={}".format(self._t, tree_depth), + dist.Uniform( + scalar_like(new_tree_prob, 0.0), scalar_like(new_tree_prob, 1.0) + ), + ) + if rand < new_tree_prob: + accepted = True + z = new_tree.z_proposal + z_grads = new_tree.z_proposal_grads + self._cache(z, new_tree.z_proposal_pe, z_grads) + + r_sum = { + site_names: r_sum[site_names] + new_tree.r_sum[site_names] + for site_names in r_unscaled + } + if self._is_turning( + r_left_unscaled, r_right_unscaled, r_sum + ): # stop doubling + break + else: # update tree_weight + if self.use_multinomial_sampling: + tree_weight = _logaddexp(tree_weight, new_tree.weight) + else: + tree_weight = tree_weight + new_tree.weight + + accept_prob = sum_accept_probs / num_proposals + + self._t += 1 + if self._t > self._warmup_steps: + n = self._t - self._warmup_steps + if accepted: + self._accept_cnt += 1 + else: + n = self._t + self._adapter.step(self._t, z, accept_prob, z_grads) + self._mean_accept_prob += (accept_prob.item() - self._mean_accept_prob) / n + + return z.copy() diff --git a/pyro/source/pyro/infer/mcmc/rwkernel.py b/pyro/source/pyro/infer/mcmc/rwkernel.py new file mode 100644 index 0000000000000000000000000000000000000000..4c3da325df910b08a1526f837ef86da7697333b0 --- /dev/null +++ b/pyro/source/pyro/infer/mcmc/rwkernel.py @@ -0,0 +1,143 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import math +from collections import OrderedDict + +import torch + +import pyro +import pyro.distributions as dist +from pyro.infer.mcmc.mcmc_kernel import MCMCKernel +from pyro.infer.mcmc.util import initialize_model + + +class RandomWalkKernel(MCMCKernel): + r""" + Simple gradient-free kernel that utilizes an isotropic gaussian random walk in the unconstrained + latent space of the model. The step size that controls the variance of the kernel is adapted during + warm-up with a simple adaptation scheme that targets a user-provided acceptance probability. + + :param model: Python callable containing Pyro primitives. + :param float init_step_size: A positive float that controls the initial step size. Defaults to 0.1. + :param float target_accept_prob: The target acceptance probability used during adaptation of + the step size. Defaults to 0.234. + + Example: + + >>> true_coefs = torch.tensor([1., 2., 3.]) + >>> data = torch.randn(2000, 3) + >>> dim = 3 + >>> labels = dist.Bernoulli(logits=(true_coefs * data).sum(-1)).sample() + >>> + >>> def model(data): + ... coefs_mean = torch.zeros(dim) + ... coefs = pyro.sample('beta', dist.Normal(coefs_mean, torch.ones(3))) + ... y = pyro.sample('y', dist.Bernoulli(logits=(coefs * data).sum(-1)), obs=labels) + ... return y + >>> + >>> hmc_kernel = RandomWalkKernel(model, init_step_size=0.2) + >>> mcmc = MCMC(hmc_kernel, num_samples=200, warmup_steps=100) + >>> mcmc.run(data) + >>> mcmc.get_samples()['beta'].mean(0) # doctest: +SKIP + tensor([ 0.9819, 1.9258, 2.9737]) + """ + + def __init__( + self, model, init_step_size: float = 0.1, target_accept_prob: float = 0.234 + ): + if not isinstance(init_step_size, float) or init_step_size <= 0.0: + raise ValueError("init_step_size must be a positive float.") + + if ( + not isinstance(target_accept_prob, float) + or target_accept_prob <= 0.0 + or target_accept_prob >= 1.0 + ): + raise ValueError( + "target_accept_prob must be a float in the interval (0, 1)." + ) + + self.model = model + self.init_step_size = init_step_size + self.target_accept_prob = target_accept_prob + + self._t = 0 + self._log_step_size = math.log(init_step_size) + self._accept_cnt = 0 + self._mean_accept_prob = 0.0 + super().__init__() + + def setup(self, warmup_steps, *args, **kwargs): + self._warmup_steps = warmup_steps + ( + self._initial_params, + self.potential_fn, + self.transforms, + self._prototype_trace, + ) = initialize_model( + self.model, + model_args=args, + model_kwargs=kwargs, + ) + self._energy_last = self.potential_fn(self._initial_params) + + def sample(self, params): + step_size = math.exp(self._log_step_size) + new_params = { + k: v + step_size * torch.randn(v.shape, dtype=v.dtype, device=v.device) + for k, v in params.items() + } + energy_proposal = self.potential_fn(new_params) + delta_energy = energy_proposal - self._energy_last + + accept_prob = (-delta_energy).exp().clamp(max=1.0).item() + rand = pyro.sample( + "rand_t={}".format(self._t), + dist.Uniform(0.0, 1.0), + ) + accepted = False + if rand < accept_prob: + accepted = True + params = new_params + self._energy_last = energy_proposal + + if self._t <= self._warmup_steps: + adaptation_speed = max(0.001, 0.1 / math.sqrt(1 + self._t)) + self._log_step_size += adaptation_speed * ( + accept_prob - self.target_accept_prob + ) + + self._t += 1 + + if self._t > self._warmup_steps: + n = self._t - self._warmup_steps + if accepted: + self._accept_cnt += 1 + else: + n = self._t + + self._mean_accept_prob += (accept_prob - self._mean_accept_prob) / n + + return params.copy() + + @property + def initial_params(self): + return self._initial_params + + @initial_params.setter + def initial_params(self, params): + self._initial_params = params + + def logging(self): + return OrderedDict( + [ + ("step size", "{:.2e}".format(math.exp(self._log_step_size))), + ("acc. prob", "{:.3f}".format(self._mean_accept_prob)), + ] + ) + + def diagnostics(self): + return { + "acceptance rate": self._accept_cnt / (self._t - self._warmup_steps), + } diff --git a/pyro/source/pyro/infer/mcmc/util.py b/pyro/source/pyro/infer/mcmc/util.py new file mode 100644 index 0000000000000000000000000000000000000000..1d60e7b15f5eea4372ceb96f93321e66470c2676 --- /dev/null +++ b/pyro/source/pyro/infer/mcmc/util.py @@ -0,0 +1,842 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import functools +import traceback as tb +import warnings +from collections import OrderedDict, defaultdict +from functools import partial, reduce +from itertools import product + +import torch +from opt_einsum import shared_intermediates +from torch.distributions import biject_to + +import pyro +import pyro.poutine as poutine +from pyro.distributions.util import broadcast_shape, logsumexp +from pyro.infer import config_enumerate +from pyro.infer.autoguide.initialization import InitMessenger, init_to_uniform +from pyro.infer.util import is_validation_enabled +from pyro.ops import stats +from pyro.ops.contract import contract_to_tensor +from pyro.ops.integrator import potential_grad +from pyro.poutine.subsample_messenger import _Subsample +from pyro.poutine.util import prune_subsample_sites +from pyro.util import check_site_shape, ignore_jit_warnings + + +class TraceTreeEvaluator: + """ + Computes the log probability density of a trace (of a model with + tree structure) that possibly contains discrete sample sites + enumerated in parallel. This will be deprecated in favor of + :class:`~pyro.infer.mcmc.util.EinsumTraceProbEvaluator`. + + :param model_trace: execution trace from a static model. + :param bool has_enumerable_sites: whether the trace contains any + discrete enumerable sites. + :param int max_plate_nesting: Optional bound on max number of nested + :func:`pyro.plate` contexts. + """ + + def __init__(self, model_trace, has_enumerable_sites=False, max_plate_nesting=None): + self.has_enumerable_sites = has_enumerable_sites + self.max_plate_nesting = max_plate_nesting + # To be populated using the model trace once. + self._log_probs = defaultdict(list) + self._log_prob_shapes = defaultdict(tuple) + self._children = defaultdict(list) + self._enum_dims = {} + self._plate_dims = {} + self._parse_model_structure(model_trace) + + def _parse_model_structure(self, model_trace): + if not self.has_enumerable_sites: + return + if self.max_plate_nesting is None: + raise ValueError( + "Finite value required for `max_plate_nesting` when model " + "has discrete (enumerable) sites." + ) + self._compute_log_prob_terms(model_trace) + # 1. Infer model structure - compute parent-child relationship. + sorted_ordinals = sorted(self._log_probs.keys()) + for i, child_node in enumerate(sorted_ordinals): + for j in range(i - 1, -1, -1): + cur_node = sorted_ordinals[j] + if cur_node < child_node: + self._children[cur_node].append(child_node) + break # at most 1 parent. + # 2. Populate `plate_dims` and `enum_dims` to be evaluated/ + # enumerated out at each ordinal. + self._populate_cache(frozenset(), frozenset(), set()) + + def _populate_cache(self, ordinal, parent_ordinal, parent_enum_dims): + """ + For each ordinal, populate the `plate` and `enum` dims to be + evaluated or enumerated out. + """ + log_prob_shape = self._log_prob_shapes[ordinal] + plate_dims = sorted([frame.dim for frame in ordinal - parent_ordinal]) + enum_dims = set( + ( + i + for i in range(-len(log_prob_shape), -self.max_plate_nesting) + if log_prob_shape[i] > 1 + ) + ) + self._plate_dims[ordinal] = plate_dims + self._enum_dims[ordinal] = set(enum_dims - parent_enum_dims) + for c in self._children[ordinal]: + self._populate_cache(c, ordinal, enum_dims) + + def _compute_log_prob_terms(self, model_trace): + """ + Computes the conditional probabilities for each of the sites + in the model trace, and stores the result in `self._log_probs`. + """ + model_trace.compute_log_prob() + self._log_probs = defaultdict(list) + ordering = { + name: frozenset(site["cond_indep_stack"]) + for name, site in model_trace.nodes.items() + if site["type"] == "sample" + } + # Collect log prob terms per independence context. + for name, site in model_trace.nodes.items(): + if site["type"] == "sample": + if is_validation_enabled(): + check_site_shape(site, self.max_plate_nesting) + self._log_probs[ordering[name]].append(site["log_prob"]) + if not self._log_prob_shapes: + for ordinal, log_prob in self._log_probs.items(): + self._log_prob_shapes[ordinal] = broadcast_shape( + *(t.shape for t in self._log_probs[ordinal]) + ) + + def _reduce(self, ordinal, agg_log_prob=torch.tensor(0.0)): + """ + Reduce the log prob terms for the given ordinal: + - taking log_sum_exp of factors in enum dims (i.e. + adding up the probability terms). + - summing up the dims within `max_plate_nesting`. + (i.e. multiplying probs within independent batches). + + :param ordinal: node (ordinal) + :param torch.Tensor agg_log_prob: aggregated `log_prob` + terms from the downstream nodes. + :return: `log_prob` with marginalized `plate` and `enum` + dims. + """ + log_prob = sum(self._log_probs[ordinal]) + agg_log_prob + for enum_dim in self._enum_dims[ordinal]: + log_prob = logsumexp(log_prob, dim=enum_dim, keepdim=True) + for marginal_dim in self._plate_dims[ordinal]: + log_prob = log_prob.sum(dim=marginal_dim, keepdim=True) + return log_prob + + def _aggregate_log_probs(self, ordinal): + """ + Aggregate the `log_prob` terms using depth first search. + """ + if not self._children[ordinal]: + return self._reduce(ordinal) + agg_log_prob = sum(map(self._aggregate_log_probs, self._children[ordinal])) + return self._reduce(ordinal, agg_log_prob) + + def log_prob(self, model_trace): + """ + Returns the log pdf of `model_trace` by appropriately handling + enumerated log prob factors. + + :return: log pdf of the trace. + """ + with shared_intermediates(): + if not self.has_enumerable_sites: + return model_trace.log_prob_sum() + self._compute_log_prob_terms(model_trace) + return self._aggregate_log_probs(ordinal=frozenset()).sum() + + +class TraceEinsumEvaluator: + """ + Computes the log probability density of a trace (of a model with + tree structure) that possibly contains discrete sample sites + enumerated in parallel. This uses optimized `einsum` operations + to marginalize out the the enumerated dimensions in the trace + via :class:`~pyro.ops.contract.contract_to_tensor`. + + :param model_trace: execution trace from a static model. + :param bool has_enumerable_sites: whether the trace contains any + discrete enumerable sites. + :param int max_plate_nesting: Optional bound on max number of nested + :func:`pyro.plate` contexts. + """ + + def __init__(self, model_trace, has_enumerable_sites=False, max_plate_nesting=None): + self.has_enumerable_sites = has_enumerable_sites + self.max_plate_nesting = max_plate_nesting + # To be populated using the model trace once. + self._enum_dims = set() + self.ordering = {} + self._populate_cache(model_trace) + + def _populate_cache(self, model_trace): + """ + Populate the ordinals (set of ``CondIndepStack`` frames) + and enum_dims for each sample site. + """ + if not self.has_enumerable_sites: + return + if self.max_plate_nesting is None: + raise ValueError( + "Finite value required for `max_plate_nesting` when model " + "has discrete (enumerable) sites." + ) + model_trace.compute_log_prob() + model_trace.pack_tensors() + for name, site in model_trace.nodes.items(): + if site["type"] == "sample" and not isinstance(site["fn"], _Subsample): + if is_validation_enabled(): + check_site_shape(site, self.max_plate_nesting) + self.ordering[name] = frozenset( + model_trace.plate_to_symbol[f.name] + for f in site["cond_indep_stack"] + if f.vectorized + ) + self._enum_dims = set(model_trace.symbol_to_dim) - set( + model_trace.plate_to_symbol.values() + ) + + def _get_log_factors(self, model_trace): + """ + Aggregates the `log_prob` terms into a list for each + ordinal. + """ + model_trace.compute_log_prob() + model_trace.pack_tensors() + log_probs = OrderedDict() + # Collect log prob terms per independence context. + for name, site in model_trace.nodes.items(): + if site["type"] == "sample" and not isinstance(site["fn"], _Subsample): + if is_validation_enabled(): + check_site_shape(site, self.max_plate_nesting) + log_probs.setdefault(self.ordering[name], []).append( + site["packed"]["log_prob"] + ) + return log_probs + + def log_prob(self, model_trace): + """ + Returns the log pdf of `model_trace` by appropriately handling + enumerated log prob factors. + + :return: log pdf of the trace. + """ + if not self.has_enumerable_sites: + return model_trace.log_prob_sum() + log_probs = self._get_log_factors(model_trace) + with shared_intermediates() as cache: + return contract_to_tensor(log_probs, self._enum_dims, cache=cache) + + +def _guess_max_plate_nesting(model, args, kwargs): + """ + Guesses max_plate_nesting by running the model once + without enumeration. This optimistically assumes static model + structure. + """ + with poutine.block(): + model_trace = poutine.trace(model).get_trace(*args, **kwargs) + sites = [site for site in model_trace.nodes.values() if site["type"] == "sample"] + + dims = [ + frame.dim + for site in sites + for frame in site["cond_indep_stack"] + if frame.vectorized + ] + max_plate_nesting = -min(dims) if dims else 0 + return max_plate_nesting + + +class _PEMaker: + def __init__( + self, model, model_args, model_kwargs, trace_prob_evaluator, transforms + ): + self.model = model + self.model_args = model_args + self.model_kwargs = model_kwargs + self.trace_prob_evaluator = trace_prob_evaluator + self.transforms = transforms + self._compiled_fn = None + + def _potential_fn(self, params): + params_constrained = {k: self.transforms[k].inv(v) for k, v in params.items()} + cond_model = poutine.condition(self.model, params_constrained) + model_trace = poutine.trace(cond_model).get_trace( + *self.model_args, **self.model_kwargs + ) + log_joint = self.trace_prob_evaluator.log_prob(model_trace) + for name, t in self.transforms.items(): + log_joint = log_joint - torch.sum( + t.log_abs_det_jacobian(params_constrained[name], params[name]) + ) + return -log_joint + + def _potential_fn_jit(self, skip_jit_warnings, jit_options, params): + if not params: + return self._potential_fn(params) + names, vals = zip(*sorted(params.items())) + + if self._compiled_fn: + return self._compiled_fn(*vals) + + with pyro.validation_enabled(False): + tmp = [] + for _, v in pyro.get_param_store().named_parameters(): + if v.requires_grad: + v.requires_grad_(False) + tmp.append(v) + + def _pe_jit(*zi): + params = dict(zip(names, zi)) + return self._potential_fn(params) + + if skip_jit_warnings: + _pe_jit = ignore_jit_warnings()(_pe_jit) + self._compiled_fn = torch.jit.trace(_pe_jit, vals, **jit_options) + + result = self._compiled_fn(*vals) + for v in tmp: + v.requires_grad_(True) + return result + + def get_potential_fn( + self, jit_compile=False, skip_jit_warnings=True, jit_options=None + ): + if jit_compile: + jit_options = {"check_trace": False} if jit_options is None else jit_options + return partial(self._potential_fn_jit, skip_jit_warnings, jit_options) + return self._potential_fn + + +def _find_valid_initial_params( + model, + model_args, + model_kwargs, + transforms, + potential_fn, + prototype_params, + max_tries_initial_params=100, + num_chains=1, + init_strategy=init_to_uniform, + trace=None, +): + params = prototype_params + + # For empty models, exit early + if not params: + return params + + params_per_chain = defaultdict(list) + num_found = 0 + model = InitMessenger(init_strategy)(model) + for attempt in range(num_chains * max_tries_initial_params): + if trace is None: + trace = poutine.trace(model).get_trace(*model_args, **model_kwargs) + samples = {name: trace.nodes[name]["value"].detach() for name in params} + params = {k: transforms[k](v) for k, v in samples.items()} + pe_grad, pe = potential_grad(potential_fn, params) + + if torch.isfinite(pe) and all( + map(torch.all, map(torch.isfinite, pe_grad.values())) + ): + for k, v in params.items(): + params_per_chain[k].append(v) + num_found += 1 + if num_found == num_chains: + if num_chains == 1: + return {k: v[0] for k, v in params_per_chain.items()} + else: + return {k: torch.stack(v) for k, v in params_per_chain.items()} + trace = None + raise ValueError( + "Model specification seems incorrect - cannot find valid initial params." + ) + + +def initialize_model( + model, + model_args=(), + model_kwargs={}, + transforms=None, + max_plate_nesting=None, + jit_compile=False, + jit_options=None, + skip_jit_warnings=False, + num_chains=1, + init_strategy=init_to_uniform, + initial_params=None, +): + """ + Given a Python callable with Pyro primitives, generates the following model-specific + properties needed for inference using HMC/NUTS kernels: + + - initial parameters to be sampled using a HMC kernel, + - a potential function whose input is a dict of parameters in unconstrained space, + - transforms to transform latent sites of `model` to unconstrained space, + - a prototype trace to be used in MCMC to consume traces from sampled parameters. + + :param model: a Pyro model which contains Pyro primitives. + :param tuple model_args: optional args taken by `model`. + :param dict model_kwargs: optional kwargs taken by `model`. + :param dict transforms: Optional dictionary that specifies a transform + for a sample site with constrained support to unconstrained space. The + transform should be invertible, and implement `log_abs_det_jacobian`. + If not specified and the model has sites with constrained support, + automatic transformations will be applied, as specified in + :mod:`torch.distributions.constraint_registry`. + :param int max_plate_nesting: Optional bound on max number of nested + :func:`pyro.plate` contexts. This is required if model contains + discrete sample sites that can be enumerated over in parallel. + :param bool jit_compile: Optional parameter denoting whether to use + the PyTorch JIT to trace the log density computation, and use this + optimized executable trace in the integrator. + :param dict jit_options: A dictionary contains optional arguments for + :func:`torch.jit.trace` function. + :param bool ignore_jit_warnings: Flag to ignore warnings from the JIT + tracer when ``jit_compile=True``. Default is False. + :param int num_chains: Number of parallel chains. If `num_chains > 1`, + the returned `initial_params` will be a list with `num_chains` elements. + :param callable init_strategy: A per-site initialization function. + See :ref:`autoguide-initialization` section for available functions. + :param dict initial_params: dict containing initial tensors in unconstrained + space to initiate the markov chain. + :returns: a tuple of (`initial_params`, `potential_fn`, `transforms`, `prototype_trace`) + """ + # XXX `transforms` domains are sites' supports + # FIXME: find a good pattern to deal with `transforms` arg + if transforms is None: + automatic_transform_enabled = True + transforms = {} + else: + automatic_transform_enabled = False + if max_plate_nesting is None: + max_plate_nesting = _guess_max_plate_nesting(model, model_args, model_kwargs) + # Wrap model in `poutine.enum` to enumerate over discrete latent sites. + # No-op if model does not have any discrete latents. + model = poutine.enum( + config_enumerate(model), first_available_dim=-1 - max_plate_nesting + ) + prototype_model = poutine.trace(InitMessenger(init_strategy)(model)) + model_trace = prototype_model.get_trace(*model_args, **model_kwargs) + has_enumerable_sites = False + prototype_samples = {} + for name, node in model_trace.iter_stochastic_nodes(): + fn = node["fn"] + if isinstance(fn, _Subsample): + if fn.subsample_size is not None and fn.subsample_size < fn.size: + raise NotImplementedError( + "HMC/NUTS does not support model with subsample sites." + ) + continue + if node["fn"].has_enumerate_support: + has_enumerable_sites = True + continue + # we need to detach here because this sample can be a leaf variable, + # so we can't change its requires_grad flag to calculate its grad in + # velocity_verlet + prototype_samples[name] = node["value"].detach() + if automatic_transform_enabled: + transforms[name] = biject_to(node["fn"].support).inv + + trace_prob_evaluator = TraceEinsumEvaluator( + model_trace, has_enumerable_sites, max_plate_nesting + ) + + pe_maker = _PEMaker( + model, model_args, model_kwargs, trace_prob_evaluator, transforms + ) + + if initial_params is None: + prototype_params = {k: transforms[k](v) for k, v in prototype_samples.items()} + # Note that we deliberately do not exercise jit compilation here so as to + # enable potential_fn to be picklable (a torch._C.Function cannot be pickled). + # We pass model_trace merely for computational savings. + initial_params = _find_valid_initial_params( + model, + model_args, + model_kwargs, + transforms, + pe_maker.get_potential_fn(), + prototype_params, + num_chains=num_chains, + init_strategy=init_strategy, + trace=model_trace, + ) + potential_fn = pe_maker.get_potential_fn( + jit_compile, skip_jit_warnings, jit_options + ) + return initial_params, potential_fn, transforms, model_trace + + +def _safe(fn): + """ + Safe version of utilities in the :mod:`pyro.ops.stats` module. Wrapped + functions return `NaN` tensors instead of throwing exceptions. + + :param fn: stats function from :mod:`pyro.ops.stats` module. + """ + + @functools.wraps(fn) + def wrapped(sample, *args, **kwargs): + try: + val = fn(sample, *args, **kwargs) + except Exception: + warnings.warn(tb.format_exc()) + val = torch.full( + sample.shape[2:], float("nan"), dtype=sample.dtype, device=sample.device + ) + return val + + return wrapped + + +def diagnostics(samples, group_by_chain=True): + """ + Gets diagnostics statistics such as effective sample size and + split Gelman-Rubin using the samples drawn from the posterior + distribution. + + :param dict samples: dictionary of samples keyed by site name. + :param bool group_by_chain: If True, each variable in `samples` + will be treated as having shape `num_chains x num_samples x sample_shape`. + Otherwise, the corresponding shape will be `num_samples x sample_shape` + (i.e. without chain dimension). + :return: dictionary of diagnostic stats for each sample site. + """ + diagnostics = {} + for site, support in samples.items(): + if not group_by_chain: + support = support.unsqueeze(0) + site_stats = OrderedDict() + site_stats["n_eff"] = _safe(stats.effective_sample_size)(support) + site_stats["r_hat"] = stats.split_gelman_rubin(support) + diagnostics[site] = site_stats + return diagnostics + + +def summary(samples, prob=0.9, group_by_chain=True): + """ + Returns a summary table displaying diagnostics of ``samples`` from the + posterior. The diagnostics displayed are mean, standard deviation, median, + the 90% Credibility Interval, :func:`~pyro.ops.stats.effective_sample_size`, + :func:`~pyro.ops.stats.split_gelman_rubin`. + + :param dict samples: dictionary of samples keyed by site name. + :param float prob: the probability mass of samples within the credibility interval. + :param bool group_by_chain: If True, each variable in `samples` + will be treated as having shape `num_chains x num_samples x sample_shape`. + Otherwise, the corresponding shape will be `num_samples x sample_shape` + (i.e. without chain dimension). + """ + if not group_by_chain: + samples = {k: v.unsqueeze(0) for k, v in samples.items()} + + summary_dict = {} + for name, value in samples.items(): + value_flat = torch.reshape(value, (-1,) + value.shape[2:]) + mean = value_flat.mean(dim=0) + std = value_flat.std(dim=0) + median = value_flat.median(dim=0)[0] + hpdi = stats.hpdi(value_flat, prob=prob) + n_eff = _safe(stats.effective_sample_size)(value) + r_hat = stats.split_gelman_rubin(value) + hpd_lower = "{:.1f}%".format(50 * (1 - prob)) + hpd_upper = "{:.1f}%".format(50 * (1 + prob)) + summary_dict[name] = OrderedDict( + [ + ("mean", mean), + ("std", std), + ("median", median), + (hpd_lower, hpdi[0]), + (hpd_upper, hpdi[1]), + ("n_eff", n_eff), + ("r_hat", r_hat), + ] + ) + return summary_dict + + +def print_summary(samples, prob=0.9, group_by_chain=True): + """ + Prints a summary table displaying diagnostics of ``samples`` from the + posterior. The diagnostics displayed are mean, standard deviation, median, + the 90% Credibility Interval, :func:`~pyro.ops.stats.effective_sample_size`, + :func:`~pyro.ops.stats.split_gelman_rubin`. + + :param dict samples: dictionary of samples keyed by site name. + :param float prob: the probability mass of samples within the credibility interval. + :param bool group_by_chain: If True, each variable in `samples` + will be treated as having shape `num_chains x num_samples x sample_shape`. + Otherwise, the corresponding shape will be `num_samples x sample_shape` + (i.e. without chain dimension). + """ + if len(samples) == 0: + return + summary_dict = summary(samples, prob, group_by_chain) + + row_names = { + k: k + "[" + ",".join(map(lambda x: str(x - 1), v.shape[2:])) + "]" + for k, v in samples.items() + } + max_len = max(max(map(lambda x: len(x), row_names.values())), 10) + name_format = "{:>" + str(max_len) + "}" + header_format = name_format + " {:>9}" * 7 + columns = [""] + list(list(summary_dict.values())[0].keys()) + + print() + print(header_format.format(*columns)) + + row_format = name_format + " {:>9.2f}" * 7 + for name, stats_dict in summary_dict.items(): + shape = stats_dict["mean"].shape + if len(shape) == 0: + print(row_format.format(name, *stats_dict.values())) + else: + for idx in product(*map(range, shape)): + idx_str = "[{}]".format(",".join(map(str, idx))) + print( + row_format.format( + name + idx_str, *[v[idx] for v in stats_dict.values()] + ) + ) + print() + + +def _predictive_sequential( + model, + posterior_samples, + model_args, + model_kwargs, + num_samples, + sample_sites, + return_trace=False, +): + collected = [] + samples = [ + {k: v[i] for k, v in posterior_samples.items()} for i in range(num_samples) + ] + for i in range(num_samples): + trace = poutine.trace(poutine.condition(model, samples[i])).get_trace( + *model_args, **model_kwargs + ) + if return_trace: + collected.append(trace) + else: + collected.append( + {site: trace.nodes[site]["value"] for site in sample_sites} + ) + + return ( + collected + if return_trace + else {site: torch.stack([s[site] for s in collected]) for site in sample_sites} + ) + + +def predictive(model, posterior_samples, *args, **kwargs): + """ + .. warning:: + This function is deprecated and will be removed in a future release. + Use the :class:`~pyro.infer.predictive.Predictive` class instead. + + Run model by sampling latent parameters from `posterior_samples`, and return + values at sample sites from the forward run. By default, only sites not contained in + `posterior_samples` are returned. This can be modified by changing the `return_sites` + keyword argument. + + :param model: Python callable containing Pyro primitives. + :param dict posterior_samples: dictionary of samples from the posterior. + :param args: model arguments. + :param kwargs: model kwargs; and other keyword arguments (see below). + + :Keyword Arguments: + * **num_samples** (``int``) - number of samples to draw from the predictive distribution. + This argument has no effect if ``posterior_samples`` is non-empty, in which case, the + leading dimension size of samples in ``posterior_samples`` is used. + * **return_sites** (``list``) - sites to return; by default only sample sites not present + in `posterior_samples` are returned. + * **return_trace** (``bool``) - whether to return the full trace. Note that this is vectorized + over `num_samples`. + * **parallel** (``bool``) - predict in parallel by wrapping the existing model + in an outermost `plate` messenger. Note that this requires that the model has + all batch dims correctly annotated via :class:`~pyro.plate`. Default is `False`. + + :return: dict of samples from the predictive distribution, or a single vectorized + `trace` (if `return_trace=True`). + """ + warnings.warn( + "The `mcmc.predictive` function is deprecated and will be removed in " + "a future release. Use the `pyro.infer.Predictive` class instead.", + FutureWarning, + ) + num_samples = kwargs.pop("num_samples", None) + return_sites = kwargs.pop("return_sites", None) + return_trace = kwargs.pop("return_trace", False) + parallel = kwargs.pop("parallel", False) + + max_plate_nesting = _guess_max_plate_nesting(model, args, kwargs) + model_trace = prune_subsample_sites(poutine.trace(model).get_trace(*args, **kwargs)) + reshaped_samples = {} + + for name, sample in posterior_samples.items(): + batch_size, sample_shape = sample.shape[0], sample.shape[1:] + + if num_samples is None: + num_samples = batch_size + + elif num_samples != batch_size: + warnings.warn( + "Sample's leading dimension size {} is different from the " + "provided {} num_samples argument. Defaulting to {}.".format( + batch_size, num_samples, batch_size + ), + UserWarning, + ) + num_samples = batch_size + + sample = sample.reshape( + (num_samples,) + + (1,) * (max_plate_nesting - len(sample_shape)) + + sample_shape + ) + reshaped_samples[name] = sample + + if num_samples is None: + raise ValueError("No sample sites in model to infer `num_samples`.") + + return_site_shapes = {} + for site in model_trace.stochastic_nodes + model_trace.observation_nodes: + site_shape = (num_samples,) + model_trace.nodes[site]["value"].shape + if return_sites: + if site in return_sites: + return_site_shapes[site] = site_shape + else: + if site not in reshaped_samples: + return_site_shapes[site] = site_shape + + if not parallel: + return _predictive_sequential( + model, + posterior_samples, + args, + kwargs, + num_samples, + return_site_shapes.keys(), + return_trace, + ) + + def _vectorized_fn(fn): + """ + Wraps a callable inside an outermost :class:`~pyro.plate` to parallelize + sampling from the posterior predictive. + + :param fn: arbitrary callable containing Pyro primitives. + :return: wrapped callable. + """ + + def wrapped_fn(*args, **kwargs): + with pyro.plate( + "_num_predictive_samples", num_samples, dim=-max_plate_nesting - 1 + ): + return fn(*args, **kwargs) + + return wrapped_fn + + trace = poutine.trace( + poutine.condition(_vectorized_fn(model), reshaped_samples) + ).get_trace(*args, **kwargs) + + if return_trace: + return trace + + predictions = {} + for site, shape in return_site_shapes.items(): + value = trace.nodes[site]["value"] + if value.numel() < reduce((lambda x, y: x * y), shape): + predictions[site] = value.expand(shape) + else: + predictions[site] = value.reshape(shape) + + return predictions + + +def select_samples(samples, num_samples=None, group_by_chain=False): + """ + Performs selection from given MCMC samples. + + :param dictionary samples: Samples object to sample from. + :param int num_samples: Number of samples to return. If `None`, all the samples + from an MCMC chain are returned in their original ordering. + :param bool group_by_chain: Whether to preserve the chain dimension. If True, + all samples will have num_chains as the size of their leading dimension. + :return: dictionary of samples keyed by site name. + """ + if num_samples is None: + # reshape to collapse chain dim when group_by_chain=False + if not group_by_chain: + samples = {k: v.reshape((-1,) + v.shape[2:]) for k, v in samples.items()} + else: + if not samples: + raise ValueError("No samples found from MCMC run.") + if group_by_chain: + batch_dim = 1 + else: + samples = {k: v.reshape((-1,) + v.shape[2:]) for k, v in samples.items()} + batch_dim = 0 + sample_tensor = list(samples.values())[0] + batch_size, device = sample_tensor.shape[batch_dim], sample_tensor.device + idxs = torch.randint(0, batch_size, size=(num_samples,), device=device) + samples = {k: v.index_select(batch_dim, idxs) for k, v in samples.items()} + return samples + + +def diagnostics_from_stats(statistics, num_samples, num_chains): + """ + Computes diagnostics from streaming statistics. + Currently only Gelman-Rubin is computed. + + :param dict statistics: Dictionary of streaming statistics. + :param int num_samples: Number of samples. + :param int num_chains: Number of chains. + :return: dictionary of diagnostic stats for each sample site. + """ + diag = {} + mean_var_dict = {} + for (_, name), stat in statistics.items(): + if name in mean_var_dict: + mean, var = mean_var_dict[name] + mean.append(stat["mean"]) + var.append(stat["variance"]) + elif "mean" in stat and "variance" in stat: + mean_var_dict[name] = ([stat["mean"]], [stat["variance"]]) + + for name, (m, v) in mean_var_dict.items(): + mean_var_dict[name] = (torch.stack(m), torch.stack(v)) + + for name, (m, v) in mean_var_dict.items(): + N = num_samples + var_within = v.mean(dim=0) + var_estimator = (N - 1) / N * var_within + if num_chains > 1: + var_between = m.var(dim=0) + var_estimator = var_estimator + var_between + else: + var_within = var_estimator + + diag[name] = OrderedDict({"r_hat": (var_estimator / var_within).sqrt()}) + + return diag diff --git a/pyro/source/pyro/infer/predictive.py b/pyro/source/pyro/infer/predictive.py new file mode 100644 index 0000000000000000000000000000000000000000..b57a193f4d95135e8fe29405c6248768eeeed007 --- /dev/null +++ b/pyro/source/pyro/infer/predictive.py @@ -0,0 +1,641 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import warnings +from dataclasses import dataclass, fields +from functools import reduce +from typing import Callable, List, Union + +import torch + +import pyro +import pyro.poutine as poutine +from pyro.infer.autoguide.initialization import InitMessenger, init_to_sample +from pyro.infer.importance import LogWeightsMixin +from pyro.infer.util import CloneMixin, plate_log_prob_sum +from pyro.poutine.trace_struct import Trace +from pyro.poutine.util import prune_subsample_sites + + +def _guess_max_plate_nesting(model, args, kwargs): + """ + Guesses max_plate_nesting by running the model once + without enumeration. This optimistically assumes static model + structure. + """ + with poutine.block(): + model_trace = poutine.trace(model).get_trace(*args, **kwargs) + sites = [site for site in model_trace.nodes.values() if site["type"] == "sample"] + + dims = [ + frame.dim + for site in sites + for frame in site["cond_indep_stack"] + if frame.vectorized + ] + max_plate_nesting = -min(dims) if dims else 0 + return max_plate_nesting + + +@dataclass(frozen=True, eq=False) +class _predictiveResults: + """ + Return value of call to ``_predictive`` and ``_predictive_sequential``. + """ + + samples: dict + trace: Union[Trace, List[Trace]] + + +def _predictive_sequential( + model, posterior_samples, model_args, model_kwargs, num_samples, return_site_shapes +): + collected_samples = [] + collected_trace = [] + samples = [ + {k: v[i] for k, v in posterior_samples.items()} for i in range(num_samples) + ] + for i in range(num_samples): + trace = poutine.trace(poutine.condition(model, samples[i])).get_trace( + *model_args, **model_kwargs + ) + collected_trace.append(trace) + collected_samples.append( + {site: trace.nodes[site]["value"] for site in return_site_shapes} + ) + + return _predictiveResults( + trace=collected_trace, + samples={ + site: torch.stack([s[site] for s in collected_samples]).reshape(shape) + for site, shape in return_site_shapes.items() + }, + ) + + +_predictive_vectorize_plate_name = "_num_predictive_samples" + + +def _predictive( + model, + posterior_samples, + num_samples, + return_sites=(), + parallel=False, + model_args=(), + model_kwargs={}, + mask=True, +): + model = torch.no_grad()(poutine.mask(model, mask=False) if mask else model) + initailized_model = InitMessenger(init_to_sample)(model) + max_plate_nesting = _guess_max_plate_nesting( + initailized_model, model_args, model_kwargs + ) + vectorize = pyro.plate( + _predictive_vectorize_plate_name, num_samples, dim=-max_plate_nesting - 1 + ) + model_trace = prune_subsample_sites( + poutine.trace(initailized_model).get_trace(*model_args, **model_kwargs) + ) + reshaped_samples = {} + + for name, sample in posterior_samples.items(): + sample_shape = sample.shape[1:] + sample = sample.reshape( + (num_samples,) + + (1,) * (max_plate_nesting - len(sample_shape)) + + sample_shape + ) + reshaped_samples[name] = sample + + return_site_shapes = {} + for site in model_trace.stochastic_nodes + model_trace.observation_nodes: + append_ndim = max_plate_nesting - len(model_trace.nodes[site]["fn"].batch_shape) + site_shape = ( + (num_samples,) + (1,) * append_ndim + model_trace.nodes[site]["value"].shape + ) + # non-empty return-sites + if return_sites: + if site in return_sites: + return_site_shapes[site] = site_shape + # special case (for guides): include all sites + elif return_sites is None: + return_site_shapes[site] = site_shape + # default case: return sites = () + # include all sites not in posterior samples + elif site not in posterior_samples: + return_site_shapes[site] = site_shape + + # handle _RETURN site + if return_sites is not None and "_RETURN" in return_sites: + value = model_trace.nodes["_RETURN"]["value"] + shape = (num_samples,) + value.shape if torch.is_tensor(value) else None + return_site_shapes["_RETURN"] = shape + + if not parallel: + return _predictive_sequential( + model, + posterior_samples, + model_args, + model_kwargs, + num_samples, + return_site_shapes, + ) + + trace = poutine.trace( + poutine.condition(vectorize(model), reshaped_samples) + ).get_trace(*model_args, **model_kwargs) + predictions = {} + for site, shape in return_site_shapes.items(): + value = trace.nodes[site]["value"] + if site == "_RETURN" and shape is None: + predictions[site] = value + continue + if value.numel() < reduce((lambda x, y: x * y), shape): + predictions[site] = value.expand(shape) + else: + predictions[site] = value.reshape(shape) + + return _predictiveResults(trace=trace, samples=predictions) + + +class Predictive(torch.nn.Module): + """ + EXPERIMENTAL class used to construct predictive distribution. The predictive + distribution is obtained by running the `model` conditioned on latent samples + from `posterior_samples`. If a `guide` is provided, then posterior samples + from all the latent sites are also returned. + + .. warning:: + The interface for the :class:`Predictive` class is experimental, and + might change in the future. + + :param model: Python callable containing Pyro primitives. + :param dict posterior_samples: dictionary of samples from the posterior. + :param callable guide: optional guide to get posterior samples of sites not present + in `posterior_samples`. + :param int num_samples: number of samples to draw from the predictive distribution. + This argument has no effect if ``posterior_samples`` is non-empty, in which case, + the leading dimension size of samples in ``posterior_samples`` is used. + :param return_sites: sites to return; by default only sample sites not present + in `posterior_samples` are returned. + :type return_sites: list, tuple, or set + :param bool parallel: predict in parallel by wrapping the existing model + in an outermost `plate` messenger. Note that this requires that the model has + all batch dims correctly annotated via :class:`~pyro.plate`. Default is `False`. + """ + + def __init__( + self, + model, + posterior_samples=None, + guide=None, + num_samples=None, + return_sites=(), + parallel=False, + ): + super().__init__() + if posterior_samples is None: + if num_samples is None: + raise ValueError( + "Either posterior_samples or num_samples must be specified." + ) + posterior_samples = {} + + for name, sample in posterior_samples.items(): + batch_size = sample.shape[0] + if num_samples is None: + num_samples = batch_size + elif num_samples != batch_size: + warnings.warn( + "Sample's leading dimension size {} is different from the " + "provided {} num_samples argument. Defaulting to {}.".format( + batch_size, num_samples, batch_size + ), + UserWarning, + ) + num_samples = batch_size + + if num_samples is None: + raise ValueError( + "No sample sites in posterior samples to infer `num_samples`." + ) + + if guide is not None and posterior_samples: + raise ValueError( + "`posterior_samples` cannot be provided with the `guide` argument." + ) + + if return_sites is not None: + assert isinstance(return_sites, (list, tuple, set)) + + self.model = model + self.posterior_samples = {} if posterior_samples is None else posterior_samples + self.num_samples = num_samples + self.guide = guide + self.return_sites = return_sites + self.parallel = parallel + + def call(self, *args, **kwargs): + """ + Method that calls :meth:`forward` and returns parameter values of the + guide as a `tuple` instead of a `dict`, which is a requirement for + JIT tracing. Unlike :meth:`forward`, this method can be traced by + :func:`torch.jit.trace_module`. + + .. warning:: + This method may be removed once PyTorch JIT tracer starts accepting + `dict` as valid return types. See + `issue `_. + """ + result = self.forward(*args, **kwargs) + return tuple(v for _, v in sorted(result.items())) + + def forward(self, *args, **kwargs): + """ + Returns dict of samples from the predictive distribution. By default, only sample sites not + contained in `posterior_samples` are returned. This can be modified by changing the + `return_sites` keyword argument of this :class:`Predictive` instance. + + .. note:: This method is used internally by :class:`~torch.nn.Module`. + Users should instead use :meth:`~torch.nn.Module.__call__` as in + ``Predictive(model)(*args, **kwargs)``. + + :param args: model arguments. + :param kwargs: model keyword arguments. + """ + posterior_samples = self.posterior_samples + return_sites = self.return_sites + if self.guide is not None: + # return all sites by default if a guide is provided. + return_sites = None if not return_sites else return_sites + posterior_samples = _predictive( + self.guide, + posterior_samples, + self.num_samples, + return_sites=None, + parallel=self.parallel, + model_args=args, + model_kwargs=kwargs, + ).samples + return _predictive( + self.model, + posterior_samples, + self.num_samples, + return_sites=return_sites, + parallel=self.parallel, + model_args=args, + model_kwargs=kwargs, + ).samples + + def get_samples(self, *args, **kwargs): + warnings.warn( + "The method `.get_samples` has been deprecated in favor of `.forward`.", + DeprecationWarning, + ) + return self.forward(*args, **kwargs) + + def get_vectorized_trace(self, *args, **kwargs): + """ + Returns a single vectorized `trace` from the predictive distribution. Note that this + requires that the model has all batch dims correctly annotated via :class:`~pyro.plate`. + + :param args: model arguments. + :param kwargs: model keyword arguments. + """ + posterior_samples = self.posterior_samples + if self.guide is not None: + posterior_samples = _predictive( + self.guide, + posterior_samples, + self.num_samples, + parallel=self.parallel, + model_args=args, + model_kwargs=kwargs, + ).samples + return _predictive( + self.model, + posterior_samples, + self.num_samples, + parallel=True, + model_args=args, + model_kwargs=kwargs, + ).trace + + +@dataclass(frozen=True, eq=False) +class WeighedPredictiveResults(LogWeightsMixin, CloneMixin): + """ + Return value of call to instance of :class:`WeighedPredictive`. + """ + + samples: Union[dict, tuple] + log_weights: torch.Tensor + guide_log_prob: torch.Tensor + model_log_prob: torch.Tensor + + +class WeighedPredictive(Predictive): + """ + Class used to construct a weighed predictive distribution that is based + on the same initialization interface as :class:`Predictive`. + + The methods `.forward` and `.call` can be called with an additional keyword argument + ``model_guide`` which is the model used to create and optimize the guide (if not + provided ``model_guide`` defaults to ``self.model``), and they return both samples and log_weights. + + The weights are calculated as the per sample gap between the model_guide log-probability + and the guide log-probability (a guide must always be provided). + + A typical use case would be based on a ``model`` :math:`p(x,z)=p(x|z)p(z)` and ``guide`` :math:`q(z)` + that has already been fitted to the model given observations :math:`p(X_{obs},z)`, both of which + are provided at itialization of :class:`WeighedPredictive` (same as you would do with :class:`Predictive`). + When calling an instance of :class:`WeighedPredictive` we provide the model given observations :math:`p(X_{obs},z)` + as the keyword argument ``model_guide``. + The resulting output would be the usual samples :math:`p(x|z)q(z)` returned by :class:`Predictive`, + along with per sample weights :math:`p(X_{obs},z)/q(z)`. The samples and weights can be fed into + :any:`weighed_quantile` in order to obtain the true quantiles of the resulting distribution. + + Note that the ``model`` can be more elaborate with sample sites :math:`y` that are not observed + and are not part of the guide, if the samples sites :math:`y` are sampled after the observations + and the latent variables sampled by the guide, such that :math:`p(x,y,z)=p(y|x,z)p(x|z)p(z)` where + each element in the product represents a set of ``pyro.sample`` statements. + """ + + def call(self, *args, **kwargs): + """ + Method `.call` that is backwards compatible with the same method found in :class:`Predictive` + but can be called with an additional keyword argument `model_guide` + which is the model used to create and optimize the guide. + + Returns :class:`WeighedPredictiveResults` which has attributes ``.samples`` and per sample + weights ``.log_weights``. + """ + result = self.forward(*args, **kwargs) + return WeighedPredictiveResults( + samples=tuple(v for _, v in sorted(result.items())), + log_weights=result.log_weights, + guide_log_prob=result.guide_log_prob, + model_log_prob=result.model_log_prob, + ) + + def forward(self, *args, **kwargs): + """ + Method `.forward` that is backwards compatible with the same method found in :class:`Predictive` + but can be called with an additional keyword argument `model_guide` + which is the model used to create and optimize the guide. + + Returns :class:`WeighedPredictiveResults` which has attributes ``.samples`` and per sample + weights ``.log_weights``. + """ + model_guide = kwargs.pop("model_guide", self.model) + return_sites = self.return_sites + # return all sites by default if a guide is provided. + return_sites = None if not return_sites else return_sites + guide_predictive = _predictive( + self.guide, + self.posterior_samples, + self.num_samples, + return_sites=None, + parallel=self.parallel, + model_args=args, + model_kwargs=kwargs, + mask=False, + ) + posterior_samples = guide_predictive.samples + model_predictive = _predictive( + model_guide, + posterior_samples, + self.num_samples, + return_sites=return_sites, + parallel=self.parallel, + model_args=args, + model_kwargs=kwargs, + mask=False, + ) + if not isinstance(guide_predictive.trace, list): + guide_trace = prune_subsample_sites(guide_predictive.trace) + model_trace = prune_subsample_sites(model_predictive.trace) + guide_trace.compute_score_parts() + model_trace.compute_log_prob() + guide_trace.pack_tensors() + model_trace.pack_tensors(guide_trace.plate_to_symbol) + plate_symbol = guide_trace.plate_to_symbol[_predictive_vectorize_plate_name] + guide_log_prob = plate_log_prob_sum(guide_trace, plate_symbol) + model_log_prob = plate_log_prob_sum(model_trace, plate_symbol) + else: + guide_log_prob = torch.Tensor( + [ + trace_element.log_prob_sum() + for trace_element in guide_predictive.trace + ] + ) + model_log_prob = torch.Tensor( + [ + trace_element.log_prob_sum() + for trace_element in model_predictive.trace + ] + ) + return WeighedPredictiveResults( + samples=( + _predictive( + self.model, + posterior_samples, + self.num_samples, + return_sites=return_sites, + parallel=self.parallel, + model_args=args, + model_kwargs=kwargs, + ).samples + if model_guide is not self.model + else model_predictive.samples + ), + log_weights=model_log_prob - guide_log_prob, + guide_log_prob=guide_log_prob, + model_log_prob=model_log_prob, + ) + + +class MHResampler(torch.nn.Module): + r""" + Resampler for weighed samples that generates equally weighed samples from the distribution + specified by the weighed samples ``sampler``. + + The resampling is based on the Metropolis-Hastings algorithm. + Given an initial sample :math:`x` subsequent samples are generated by: + + - Sampling from the ``guide`` a new sample candidate :math:`x'` with probability :math:`g(x')`. + - Calculate an acceptance probability + :math:`A(x', x) = \min\left(1, \frac{P(x')}{P(x)} \frac{g(x)}{g(x')}\right)` + with :math:`P` being the ``model``. + - With probability :math:`A(x', x)` accept the new sample candidate :math:`x'` + as the next sample, otherwise set the current sample :math:`x` as the next sample. + + The above is the Metropolis-Hastings algorithm with the new sample candidate + proposal distribution being equal to the ``guide`` and independent of the + current sample such that :math:`g(x')=g(x' \mid x)`. + + :param callable sampler: When called returns :class:`WeighedPredictiveResults`. + :param slice source_samples_slice: Select source samples for storage (default is `slice(0)`, i.e. none). + :param slice stored_samples_slice: Select output samples for storage (default is `slice(0)`, i.e. none). + + The typical use case of :class:`MHResampler` would be to convert weighed samples + generated by :class:`WeighedPredictive` into equally weighed samples from the target distribution. + Each time an instance of :class:`MHResampler` is called it returns a new set of samples, with the + samples generated by the first call being distributed according to the ``guide``, and with each + subsequent call the distribution of the samples becomes closer to that of the posterior predictive + disdtribution. It might take some experimentation in order to find out in each case how many times one would + need to call an instance of :class:`MHResampler` in order to be close enough to the posterior + predictive distribution. + + Example:: + + def model(): + ... + + def guide(): + ... + + def conditioned_model(): + ... + + # Fit guide + elbo = Trace_ELBO(num_particles=100, vectorize_particles=True) + svi = SVI(conditioned_model, guide, optim.Adam(dict(lr=3.0)), elbo) + for i in range(num_svi_steps): + svi.step() + + # Create callable that returns weighed samples + posterior_predictive = WeighedPredictive(model, + guide=guide, + num_samples=num_samples, + parallel=parallel, + return_sites=["_RETURN"]) + + prob = 0.95 + + weighed_samples = posterior_predictive(model_guide=conditioned_model) + # Calculate quantile directly from weighed samples + weighed_samples_quantile = weighed_quantile(weighed_samples.samples['_RETURN'], + [prob], + weighed_samples.log_weights)[0] + + resampler = MHResampler(posterior_predictive) + num_mh_steps = 10 + for mh_step_count in range(num_mh_steps): + resampled_weighed_samples = resampler(model_guide=conditioned_model) + # Calculate quantile from resampled weighed samples (samples are equally weighed) + resampled_weighed_samples_quantile = quantile(resampled_weighed_samples.samples[`_RETURN`], + [prob])[0] + + # Quantiles calculated using both methods should be identical + assert_close(weighed_samples_quantile, resampled_weighed_samples_quantile, rtol=0.01) + + .. _mhsampler-behavior: + + **Notes on Sampler Behavior:** + + - In case the ``guide`` perfectly tracks the ``model`` this sampler will do nothing + as the acceptance probability :math:`A(x', x)` will always be one. + - Furtheremore, if the guide is approximately separable, i.e. :math:`g(z_A, z_B) \approx g_A(z_A) g_B(z_B)`, + with :math:`g_A(z_A)` pefectly tracking the ``model`` and :math:`g_B(z_B)` poorly tracking the ``model``, + quantiles of :math:`z_A` calculated from samples taken from :class:`MHResampler`, will have much lower + variance then quantiles of :math:`z_A` calculated by using :any:`weighed_quantile`, as the effective sample size + of the calculation using :any:`weighed_quantile` will be low due to :math:`g_B(z_B)` poorly tracking + the ``model``, whereas when using :class:`MHResampler` the poor ``model`` tracking of :math:`g_B(z_B)` has + negligible affect on the effective sample size of :math:`z_A` samples. + """ + + def __init__( + self, + sampler: Callable, + source_samples_slice: slice = slice(0), + stored_samples_slice: slice = slice(0), + ): + super().__init__() + self.sampler = sampler + self.samples = None + self.transition_count = torch.tensor(0, dtype=torch.long) + self.source_samples = [] + self.source_samples_slice = source_samples_slice + self.stored_samples = [] + self.stored_samples_slice = stored_samples_slice + + def forward(self, *args, **kwargs): + """ + Perform single resampling step. + Returns :class:`WeighedPredictiveResults` + """ + with torch.no_grad(): + new_samples = self.sampler(*args, **kwargs) + # Store samples + self.source_samples.append(new_samples) + self.source_samples = self.source_samples[self.source_samples_slice] + if self.samples is None: + # First set of samples + self.samples = new_samples.clone() + self.transition_count = torch.zeros_like( + new_samples.log_weights, dtype=torch.long + ) + else: + # Apply Metropolis-Hastings algorithm + prob = torch.clamp( + new_samples.log_weights - self.samples.log_weights, max=0.0 + ).exp() + idx = torch.rand(*prob.shape) <= prob + self.transition_count[idx] += 1 + for field_desc in fields(self.samples): + field, new_field = getattr(self.samples, field_desc.name), getattr( + new_samples, field_desc.name + ) + if isinstance(field, dict): + for key in field: + field[key][idx] = new_field[key][idx] + else: + field[idx] = new_field[idx] + self.stored_samples.append(self.samples.clone()) + self.stored_samples = self.stored_samples[self.stored_samples_slice] + return self.samples + + def get_min_sample_transition_count(self): + """ + Return transition count of sample with minimal amount of transitions. + """ + return self.transition_count.min() + + def get_total_transition_count(self): + """ + Return total number of transitions. + """ + return self.transition_count.sum() + + def get_source_samples(self): + """ + Return source samples that were the input to the Metropolis-Hastings algorithm. + """ + return self.get_samples(self.source_samples) + + def get_stored_samples(self): + """ + Return stored samples that were the output of the Metropolis-Hastings algorithm. + """ + return self.get_samples(self.stored_samples) + + def get_samples(self, samples): + """ + Return samples that were sampled during execution of the Metropolis-Hastings algorithm. + """ + retval = dict() + for field_desc in fields(self.samples): + field_name, value = field_desc.name, getattr(self.samples, field_desc.name) + if isinstance(value, dict): + retval[field_name] = dict() + for key in value: + retval[field_name][key] = torch.cat( + [getattr(sample, field_name)[key] for sample in samples] + ) + else: + retval[field_name] = torch.cat( + [getattr(sample, field_name) for sample in samples] + ) + return self.samples.__class__(**retval) diff --git a/pyro/source/pyro/infer/renyi_elbo.py b/pyro/source/pyro/infer/renyi_elbo.py new file mode 100644 index 0000000000000000000000000000000000000000..349f7c43d4021d91176f46287f7bf2a284e71268 --- /dev/null +++ b/pyro/source/pyro/infer/renyi_elbo.py @@ -0,0 +1,233 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math +import warnings + +import torch + +from pyro.distributions.util import is_identically_zero +from pyro.infer.elbo import ELBO +from pyro.infer.enum import get_importance_trace +from pyro.infer.util import get_dependent_plate_dims, is_validation_enabled, torch_sum +from pyro.util import check_if_enumerated, warn_if_nan + + +class RenyiELBO(ELBO): + r""" + An implementation of Renyi's :math:`\alpha`-divergence variational inference + following reference [1]. + + In order for the objective to be a strict lower bound, we require + :math:`\alpha \ge 0`. Note, however, that according to reference [1], depending + on the dataset :math:`\alpha < 0` might give better results. In the special case + :math:`\alpha = 0`, the objective function is that of the important weighted + autoencoder derived in reference [2]. + + .. note:: Setting :math:`\alpha < 1` gives a better bound than the usual ELBO. + For :math:`\alpha = 1`, it is better to use + :class:`~pyro.infer.trace_elbo.Trace_ELBO` class because it helps reduce + variances of gradient estimations. + + :param float alpha: The order of :math:`\alpha`-divergence. Here + :math:`\alpha \neq 1`. Default is 0. + :param num_particles: The number of particles/samples used to form the objective + (gradient) estimator. Default is 2. + :param int max_plate_nesting: Bound on max number of nested + :func:`pyro.plate` contexts. Default is infinity. + :param bool strict_enumeration_warning: Whether to warn about possible + misuse of enumeration, i.e. that + :class:`~pyro.infer.traceenum_elbo.TraceEnum_ELBO` is used iff there + are enumerated sample sites. + + References: + + [1] `Renyi Divergence Variational Inference`, + Yingzhen Li, Richard E. Turner + + [2] `Importance Weighted Autoencoders`, + Yuri Burda, Roger Grosse, Ruslan Salakhutdinov + """ + + def __init__( + self, + alpha=0, + num_particles=2, + max_plate_nesting=float("inf"), + max_iarange_nesting=None, # DEPRECATED + vectorize_particles=False, + strict_enumeration_warning=True, + ): + if max_iarange_nesting is not None: + warnings.warn( + "max_iarange_nesting is deprecated; use max_plate_nesting instead", + DeprecationWarning, + ) + max_plate_nesting = max_iarange_nesting + + if alpha == 1: + raise ValueError( + "The order alpha should not be equal to 1. Please use Trace_ELBO class" + "for the case alpha = 1." + ) + self.alpha = alpha + super().__init__( + num_particles=num_particles, + max_plate_nesting=max_plate_nesting, + vectorize_particles=vectorize_particles, + strict_enumeration_warning=strict_enumeration_warning, + ) + + def _get_trace(self, model, guide, args, kwargs): + """ + Returns a single trace from the guide, and the model that is run + against it. + """ + model_trace, guide_trace = get_importance_trace( + "flat", self.max_plate_nesting, model, guide, args, kwargs + ) + if is_validation_enabled(): + check_if_enumerated(guide_trace) + return model_trace, guide_trace + + @torch.no_grad() + def loss(self, model, guide, *args, **kwargs): + """ + :returns: returns an estimate of the ELBO + :rtype: float + + Evaluates the ELBO with an estimator that uses num_particles many samples/particles. + """ + elbo_particles = [] + is_vectorized = self.vectorize_particles and self.num_particles > 1 + + # grab a vectorized trace from the generator + for model_trace, guide_trace in self._get_traces(model, guide, args, kwargs): + elbo_particle = 0.0 + sum_dims = get_dependent_plate_dims(model_trace.nodes.values()) + + # compute elbo + for name, site in model_trace.nodes.items(): + if site["type"] == "sample": + log_prob_sum = torch_sum(site["log_prob"], sum_dims) + elbo_particle = elbo_particle + log_prob_sum + + for name, site in guide_trace.nodes.items(): + if site["type"] == "sample": + log_prob, score_function_term, entropy_term = site["score_parts"] + log_prob_sum = torch_sum(site["log_prob"], sum_dims) + elbo_particle = elbo_particle - log_prob_sum + + elbo_particles.append(elbo_particle) + + if is_vectorized: + elbo_particles = elbo_particles[0] + else: + elbo_particles = torch.stack(elbo_particles) + + log_weights = (1.0 - self.alpha) * elbo_particles + log_mean_weight = torch.logsumexp(log_weights, dim=0) - math.log( + self.num_particles + ) + elbo = log_mean_weight.sum().item() / (1.0 - self.alpha) + + loss = -elbo + warn_if_nan(loss, "loss") + return loss + + def loss_and_grads(self, model, guide, *args, **kwargs): + """ + :returns: returns an estimate of the ELBO + :rtype: float + + Computes the ELBO as well as the surrogate ELBO that is used to form the gradient estimator. + Performs backward on the latter. Num_particle many samples are used to form the estimators. + """ + elbo_particles = [] + surrogate_elbo_particles = [] + is_vectorized = self.vectorize_particles and self.num_particles > 1 + tensor_holder = None + + # grab a vectorized trace from the generator + for model_trace, guide_trace in self._get_traces(model, guide, args, kwargs): + elbo_particle = 0 + surrogate_elbo_particle = 0 + sum_dims = get_dependent_plate_dims(model_trace.nodes.values()) + + # compute elbo and surrogate elbo + for name, site in model_trace.nodes.items(): + if site["type"] == "sample": + log_prob_sum = torch_sum(site["log_prob"], sum_dims) + elbo_particle = elbo_particle + log_prob_sum.detach() + surrogate_elbo_particle = surrogate_elbo_particle + log_prob_sum + + for name, site in guide_trace.nodes.items(): + if site["type"] == "sample": + log_prob, score_function_term, entropy_term = site["score_parts"] + log_prob_sum = torch_sum(site["log_prob"], sum_dims) + + elbo_particle = elbo_particle - log_prob_sum.detach() + + if not is_identically_zero(entropy_term): + surrogate_elbo_particle = surrogate_elbo_particle - log_prob_sum + + if not is_identically_zero(score_function_term): + # link to the issue: https://github.com/pyro-ppl/pyro/issues/1222 + raise NotImplementedError + + if not is_identically_zero(score_function_term): + surrogate_elbo_particle = ( + surrogate_elbo_particle + + (self.alpha / (1.0 - self.alpha)) * log_prob_sum + ) + + if is_identically_zero(elbo_particle): + if tensor_holder is not None: + elbo_particle = torch.zeros_like(tensor_holder) + surrogate_elbo_particle = torch.zeros_like(tensor_holder) + else: # elbo_particle is not None + if tensor_holder is None: + tensor_holder = torch.zeros_like(elbo_particle) + # change types of previous `elbo_particle`s + for i in range(len(elbo_particles)): + elbo_particles[i] = torch.zeros_like(tensor_holder) + surrogate_elbo_particles[i] = torch.zeros_like(tensor_holder) + + elbo_particles.append(elbo_particle) + surrogate_elbo_particles.append(surrogate_elbo_particle) + + if tensor_holder is None: + return 0.0 + + if is_vectorized: + elbo_particles = elbo_particles[0] + surrogate_elbo_particles = surrogate_elbo_particles[0] + else: + elbo_particles = torch.stack(elbo_particles) + surrogate_elbo_particles = torch.stack(surrogate_elbo_particles) + + log_weights = (1.0 - self.alpha) * elbo_particles + log_mean_weight = torch.logsumexp(log_weights, dim=0, keepdim=True) - math.log( + self.num_particles + ) + elbo = log_mean_weight.sum().item() / (1.0 - self.alpha) + + # collect parameters to train from model and guide + trainable_params = any( + site["type"] == "param" + for trace in (model_trace, guide_trace) + for site in trace.nodes.values() + ) + + if trainable_params and getattr( + surrogate_elbo_particles, "requires_grad", False + ): + normalized_weights = (log_weights - log_mean_weight).exp() + surrogate_elbo = ( + normalized_weights * surrogate_elbo_particles + ).sum() / self.num_particles + surrogate_loss = -surrogate_elbo + surrogate_loss.backward() + loss = -elbo + warn_if_nan(loss, "loss") + return loss diff --git a/pyro/source/pyro/infer/reparam/__init__.py b/pyro/source/pyro/infer/reparam/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..80169369485663ac0c2b7bea9e3a29dd7cea3953 --- /dev/null +++ b/pyro/source/pyro/infer/reparam/__init__.py @@ -0,0 +1,40 @@ +# Copyright Contributors to the Pyro project. +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from .conjugate import ConjugateReparam +from .discrete_cosine import DiscreteCosineReparam +from .haar import HaarReparam +from .hmm import LinearHMMReparam +from .loc_scale import LocScaleReparam +from .neutra import NeuTraReparam +from .projected_normal import ProjectedNormalReparam +from .softmax import GumbelSoftmaxReparam +from .split import SplitReparam +from .stable import LatentStableReparam, StableReparam, SymmetricStableReparam +from .strategies import AutoReparam, MinimalReparam +from .structured import StructuredReparam +from .studentt import StudentTReparam +from .transform import TransformReparam +from .unit_jacobian import UnitJacobianReparam + +__all__ = [ + "AutoReparam", + "ConjugateReparam", + "DiscreteCosineReparam", + "GumbelSoftmaxReparam", + "HaarReparam", + "LatentStableReparam", + "LinearHMMReparam", + "LocScaleReparam", + "MinimalReparam", + "NeuTraReparam", + "ProjectedNormalReparam", + "SplitReparam", + "StableReparam", + "StructuredReparam", + "StudentTReparam", + "SymmetricStableReparam", + "TransformReparam", + "UnitJacobianReparam", +] diff --git a/pyro/source/pyro/infer/reparam/conjugate.py b/pyro/source/pyro/infer/reparam/conjugate.py new file mode 100644 index 0000000000000000000000000000000000000000..478850affe255981b10e289f0e9f6004e41879ef --- /dev/null +++ b/pyro/source/pyro/infer/reparam/conjugate.py @@ -0,0 +1,108 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine + +from .reparam import Reparam + + +class ConjugateReparam(Reparam): + """ + EXPERIMENTAL Reparameterize to a conjugate updated distribution. + + This updates a prior distribution ``fn`` using the + :meth:`~pyro.distributions.Distribution.conjugate_update` + method. The guide may be either a distribution object or a callable + inputting model ``*args,**kwargs`` and returning a distribution object. The + guide may be approximate or learned. + + For example consider the model and naive variational guide:: + + total = torch.tensor(10.) + count = torch.tensor(2.) + + def model(): + prob = pyro.sample("prob", dist.Beta(0.5, 1.5)) + pyro.sample("count", dist.Binomial(total, prob), obs=count) + + guide = AutoDiagonalNormal(model) # learns the posterior over prob + + Instead of using this learned guide, we can hand-compute the conjugate + posterior distribution over "prob", and then use a simpler guide during + inference, in this case an empty guide:: + + reparam_model = poutine.reparam(model, { + "prob": ConjugateReparam(dist.Beta(1 + count, 1 + total - count)) + }) + + def reparam_guide(): + pass # nothing remains to be modeled! + + :param guide: A likelihood distribution or a callable returning a + guide distribution. Only a few distributions are supported, depending + on the prior distribution's + :meth:`~pyro.distributions.Distribution.conjugate_update` + implementation. + :type guide: ~pyro.distributions.Distribution or callable + """ + + def __init__(self, guide): + self.guide = guide + + def apply(self, msg): + name = msg["name"] + fn = msg["fn"] + value = msg["value"] + is_observed = msg["is_observed"] + + # Compute a guide distribution, either static or dependent. + guide_dist = self.guide + if not isinstance(guide_dist, dist.Distribution): + args, kwargs = self.args_kwargs + guide_dist = guide_dist(*args, **kwargs) + assert isinstance(guide_dist, dist.Distribution) + + # Draw a sample from the updated distribution. + fn, log_normalizer = fn.conjugate_update(guide_dist) + assert isinstance(guide_dist, dist.Distribution) + if not fn.has_rsample: + # Note supporting non-reparameterized sites would require more delicate + # handling of traced sites than the crude _do_not_trace flag below. + raise NotImplementedError( + "ConjugateReparam inference supports only reparameterized " + "distributions, but got {}".format(type(fn)) + ) + value = pyro.sample( + f"{name}_updated", + fn, + obs=value, + infer={ + "is_observed": is_observed, + "is_auxiliary": True, + "_do_not_trace": True, + }, + ) + + # Compute importance weight. Let p(z) be the original fn, q(z|x) be + # the guide, and u(z) be the conjugate_updated distribution. Then + # normalizer = p(z) q(z|x) / u(z). + # Since we've sampled from u(z) instead of p(z), we + # need an importance weight + # p(z) / u(z) = normalizer / q(z|x) (Eqn 1) + # Note that q(z|x) is often approximate; in the exact case + # q(z|x) = p(x|z) / integral p(x|z) dz + # so this site and the downstream likelihood site will have combined density + # (p(z) / u(z)) p(x|z) = (normalizer / q(z|x)) p(x|z) + # = normalizer integral p(x|z) dz + # Hence in the exact case, downstream probability does not depend on the sampled z, + # permitting this reparameterizer to be used in HMC. + if poutine.get_mask() is False: + log_density = 0.0 + else: + log_density = log_normalizer - guide_dist.log_prob(value) # By Eqn 1. + + # Return an importance-weighted point estimate. + new_fn = dist.Delta(value, log_density=log_density, event_dim=fn.event_dim) + return {"fn": new_fn, "value": value, "is_observed": True} diff --git a/pyro/source/pyro/infer/reparam/discrete_cosine.py b/pyro/source/pyro/infer/reparam/discrete_cosine.py new file mode 100644 index 0000000000000000000000000000000000000000..60d67d144523691aa9e3aada500b9b75cbdc73ba --- /dev/null +++ b/pyro/source/pyro/infer/reparam/discrete_cosine.py @@ -0,0 +1,42 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from pyro.distributions.transforms.discrete_cosine import DiscreteCosineTransform + +from .unit_jacobian import UnitJacobianReparam + + +class DiscreteCosineReparam(UnitJacobianReparam): + """ + Discrete Cosine reparameterizer, using a + :class:`~pyro.distributions.transforms.DiscreteCosineTransform` . + + This is useful for sequential models where coupling along a time-like axis + (e.g. a banded precision matrix) introduces long-range correlation. This + reparameterizes to a frequency-domain representation where posterior + covariance should be closer to diagonal, thereby improving the accuracy of + diagonal guides in SVI and improving the effectiveness of a diagonal mass + matrix in HMC. + + When reparameterizing variables that are approximately continuous along the + time dimension, set ``smooth=1``. For variables that are approximately + continuously differentiable along the time axis, set ``smooth=2``. + + This reparameterization works only for latent variables, not likelihoods. + + :param int dim: Dimension along which to transform. Must be negative. + This is an absolute dim counting from the right. + :param float smooth: Smoothing parameter. When 0, this transforms white + noise to white noise; when 1 this transforms Brownian noise to to white + noise; when -1 this transforms violet noise to white noise; etc. Any + real number is allowed. https://en.wikipedia.org/wiki/Colors_of_noise. + :param bool experimental_allow_batch: EXPERIMENTAL allow coupling across a + batch dimension. The targeted batch dimension and all batch dimensions + to the right will be converted to event dimensions. Defaults to False. + """ + + def __init__(self, dim=-1, smooth=0.0, *, experimental_allow_batch=False): + transform = DiscreteCosineTransform(dim=dim, smooth=smooth, cache_size=1) + super().__init__( + transform, suffix="dct", experimental_allow_batch=experimental_allow_batch + ) diff --git a/pyro/source/pyro/infer/reparam/haar.py b/pyro/source/pyro/infer/reparam/haar.py new file mode 100644 index 0000000000000000000000000000000000000000..9ff05760de8705533331cb8e70a44da86a50bb03 --- /dev/null +++ b/pyro/source/pyro/infer/reparam/haar.py @@ -0,0 +1,36 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from pyro.distributions.transforms.haar import HaarTransform + +from .unit_jacobian import UnitJacobianReparam + + +class HaarReparam(UnitJacobianReparam): + """ + Haar wavelet reparameterizer, using a + :class:`~pyro.distributions.transforms.HaarTransform`. + + This is useful for sequential models where coupling along a time-like axis + (e.g. a banded precision matrix) introduces long-range correlation. This + reparameterizes to a frequency-domain representation where posterior + covariance should be closer to diagonal, thereby improving the accuracy of + diagonal guides in SVI and improving the effectiveness of a diagonal mass + matrix in HMC. + + This reparameterization works only for latent variables, not likelihoods. + + :param int dim: Dimension along which to transform. Must be negative. + This is an absolute dim counting from the right. + :param bool flip: Whether to flip the time axis before applying the + Haar transform. Defaults to false. + :param bool experimental_allow_batch: EXPERIMENTAL allow coupling across a + batch dimension. The targeted batch dimension and all batch dimensions + to the right will be converted to event dimensions. Defaults to False. + """ + + def __init__(self, dim=-1, flip=False, *, experimental_allow_batch=False): + transform = HaarTransform(dim=dim, flip=flip, cache_size=1) + super().__init__( + transform, suffix="haar", experimental_allow_batch=experimental_allow_batch + ) diff --git a/pyro/source/pyro/infer/reparam/hmm.py b/pyro/source/pyro/infer/reparam/hmm.py new file mode 100644 index 0000000000000000000000000000000000000000..740b40ea3c7841056150821499cc4460e7ef82c2 --- /dev/null +++ b/pyro/source/pyro/infer/reparam/hmm.py @@ -0,0 +1,162 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pyro.distributions as dist + +from .reparam import Reparam + + +class LinearHMMReparam(Reparam): + """ + Auxiliary variable reparameterizer for + :class:`~pyro.distributions.LinearHMM` random variables. + + This defers to component reparameterizers to create auxiliary random + variables conditioned on which the process becomes a + :class:`~pyro.distributions.GaussianHMM` . If the ``observation_dist`` is a + :class:`~pyro.distributions.TransformedDistribution` this reorders those + transforms so that the result is a + :class:`~pyro.distributions.TransformedDistribution` of + :class:`~pyro.distributions.GaussianHMM` . + + This is useful for training the parameters of a + :class:`~pyro.distributions.LinearHMM` distribution, whose + :meth:`~pyro.distributions.LinearHMM.log_prob` method is undefined. To + perform inference in the presence of non-Gaussian factors such as + :meth:`~pyro.distributions.Stable`, :meth:`~pyro.distributions.StudentT` or + :meth:`~pyro.distributions.LogNormal` , configure with + :class:`~pyro.infer.reparam.studentt.StudentTReparam` , + :class:`~pyro.infer.reparam.stable.StableReparam` , + :class:`~pyro.infer.reparam.stable.SymmetricStableReparam` , etc. component + reparameterizers for ``init``, ``trans``, and ``scale``. For example:: + + hmm = LinearHMM( + init_dist=Stable(1,0,1,0).expand([2]).to_event(1), + trans_matrix=torch.eye(2), + trans_dist=MultivariateNormal(torch.zeros(2), torch.eye(2)), + obs_matrix=torch.eye(2), + obs_dist=TransformedDistribution( + Stable(1.5,-0.5,1.0).expand([2]).to_event(1), + ExpTransform())) + + rep = LinearHMMReparam(init=SymmetricStableReparam(), + obs=StableReparam()) + + with poutine.reparam(config={"hmm": rep}): + pyro.sample("hmm", hmm, obs=data) + + :param init: Optional reparameterizer for the initial distribution. + :type init: ~pyro.infer.reparam.reparam.Reparam + :param trans: Optional reparameterizer for the transition distribution. + :type trans: ~pyro.infer.reparam.reparam.Reparam + :param obs: Optional reparameterizer for the observation distribution. + :type obs: ~pyro.infer.reparam.reparam.Reparam + """ + + def __init__(self, init=None, trans=None, obs=None): + assert init is None or isinstance(init, Reparam) + assert trans is None or isinstance(trans, Reparam) + assert obs is None or isinstance(obs, Reparam) + self.init = init + self.trans = trans + self.obs = obs + + def apply(self, msg): + name = msg["name"] + fn = msg["fn"] + value = msg["value"] + is_observed = msg["is_observed"] + + fn, event_dim = self._unwrap(fn) + assert isinstance(fn, (dist.LinearHMM, dist.IndependentHMM)) + if fn.duration is None: + raise ValueError( + "LinearHMMReparam requires duration to be specified " + "on targeted LinearHMM distributions" + ) + + # Unwrap IndependentHMM. + if isinstance(fn, dist.IndependentHMM): + indep_value = None + if value is not None: + indep_value = value.transpose(-1, -2).unsqueeze(-1) + msg = self.apply( + { + "name": name, + "fn": fn.base_dist.to_event(1), + "value": indep_value, + "is_observed": is_observed, + } + ) + hmm = msg["fn"] + hmm = dist.IndependentHMM(hmm.to_event(-1)) + if msg["value"] is not indep_value: + value = msg["value"].squeeze(-1).transpose(-1, -2) + return {"fn": hmm, "value": value, "is_observed": is_observed} + + # Reparameterize the initial distribution as conditionally Gaussian. + init_dist = fn.initial_dist + if self.init is not None: + msg = self.init.apply( + { + "name": f"{name}_init", + "fn": self._wrap(init_dist, event_dim - 1), + "value": None, + "is_observed": False, + } + ) + init_dist = msg["fn"] + init_dist = init_dist.to_event(1 - init_dist.event_dim) + + # Reparameterize the transition distribution as conditionally Gaussian. + trans_dist = fn.transition_dist + if self.trans is not None: + if trans_dist.batch_shape[-1] != fn.duration: + trans_dist = trans_dist.expand( + trans_dist.batch_shape[:-1] + (fn.duration,) + ) + msg = self.trans.apply( + { + "name": f"{name}_trans", + "fn": self._wrap(trans_dist, event_dim), + "value": None, + "is_observed": False, + } + ) + trans_dist = msg["fn"] + trans_dist = trans_dist.to_event(1 - trans_dist.event_dim) + + # Reparameterize the observation distribution as conditionally Gaussian. + obs_dist = fn.observation_dist + if self.obs is not None: + if obs_dist.batch_shape[-1] != fn.duration: + obs_dist = obs_dist.expand(obs_dist.batch_shape[:-1] + (fn.duration,)) + msg = self.obs.apply( + { + "name": f"{name}_obs", + "fn": self._wrap(obs_dist, event_dim), + "value": value, + "is_observed": is_observed, + } + ) + obs_dist = msg["fn"] + obs_dist = obs_dist.to_event(1 - obs_dist.event_dim) + value = msg["value"] + is_observed = msg["is_observed"] + + # Reparameterize the entire HMM as conditionally Gaussian. + hmm = dist.GaussianHMM( + init_dist, + fn.transition_matrix, + trans_dist, + fn.observation_matrix, + obs_dist, + duration=fn.duration, + ) + hmm = self._wrap(hmm, event_dim) + + # Apply any observation transforms. + if fn.transforms: + hmm = dist.TransformedDistribution(hmm, fn.transforms) + + return {"fn": hmm, "value": value, "is_observed": is_observed} diff --git a/pyro/source/pyro/infer/reparam/loc_scale.py b/pyro/source/pyro/infer/reparam/loc_scale.py new file mode 100644 index 0000000000000000000000000000000000000000..4e8bb6769fc90c4a67387f1a0979d75d18e41cda --- /dev/null +++ b/pyro/source/pyro/infer/reparam/loc_scale.py @@ -0,0 +1,100 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions import constraints + +import pyro +import pyro.distributions as dist +from pyro.distributions.util import is_identically_one, is_validation_enabled + +from .reparam import Reparam + + +class LocScaleReparam(Reparam): + """ + Generic decentering reparameterizer [1] for latent variables parameterized + by ``loc`` and ``scale`` (and possibly additional ``shape_params``). + + This reparameterization works only for latent variables, not likelihoods. + + [1] Maria I. Gorinova, Dave Moore, Matthew D. Hoffman (2019) + "Automatic Reparameterisation of Probabilistic Programs" + https://arxiv.org/pdf/1906.03028.pdf + + :param float centered: optional centered parameter. If None (default) learn + a per-site per-element centering parameter in ``[0,1]``. If 0, fully + decenter the distribution; if 1, preserve the centered distribution + unchanged. + :param shape_params: Optional list of additional parameter names to copy + unchanged from the centered to decentered distribution. If absent, + all params in a distributions ``.arg_constraints`` will be copied. + :type shape_params: tuple or list + """ + + def __init__(self, centered=None, shape_params=None): + assert centered is None or isinstance(centered, (float, torch.Tensor)) + if shape_params is not None: + assert isinstance(shape_params, (tuple, list)) + assert all(isinstance(name, str) for name in shape_params) + if is_validation_enabled(): + if isinstance(centered, float): + assert 0 <= centered and centered <= 1 + elif isinstance(centered, torch.Tensor): + assert (0 <= centered).all() + assert (centered <= 1).all() + else: + assert centered is None + self.centered = centered + self.shape_params = shape_params + + def apply(self, msg): + name = msg["name"] + fn = msg["fn"] + value = msg["value"] + is_observed = msg["is_observed"] + + centered = self.centered + if is_identically_one(centered): + return msg + event_shape = fn.event_shape + fn, event_dim = self._unwrap(fn) + + # Apply a partial decentering transform. + if self.shape_params is None: + self.shape_params = tuple( + k for k in fn.arg_constraints if k not in ("loc", "scale") + ) + params = {key: getattr(fn, key) for key in self.shape_params} + if centered is None: + centered = pyro.param( + "{}_centered".format(name), + lambda: fn.loc.new_full(event_shape, 0.5), + constraint=constraints.unit_interval, + ) + params["loc"] = fn.loc * centered + params["scale"] = fn.scale**centered + decentered_fn = type(fn)(**params) + + # Differentiably invert transform. + decentered_value = None + if value is not None: + delta = (value - fn.loc) * fn.scale.pow(centered - 1) + decentered_value = delta + centered * fn.loc + + # Draw decentered noise. + decentered_value = pyro.sample( + f"{name}_decentered", + self._wrap(decentered_fn, event_dim), + obs=decentered_value, + infer={"is_observed": is_observed}, + ) + + # Differentiably transform. + if value is None: + delta = decentered_value - centered * fn.loc + value = fn.loc + fn.scale.pow(1 - centered) * delta + + # Simulate a pyro.deterministic() site. + new_fn = dist.Delta(value, event_dim=event_dim).mask(False) + return {"fn": new_fn, "value": value, "is_observed": True} diff --git a/pyro/source/pyro/infer/reparam/neutra.py b/pyro/source/pyro/infer/reparam/neutra.py new file mode 100644 index 0000000000000000000000000000000000000000..e3df28a62dc0c90e7c427674fb633cc97831c78d --- /dev/null +++ b/pyro/source/pyro/infer/reparam/neutra.py @@ -0,0 +1,141 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from contextlib import ExitStack + +from torch.distributions import biject_to + +import pyro +import pyro.distributions as dist +from pyro import poutine +from pyro.distributions.util import sum_rightmost +from pyro.infer.autoguide.guides import AutoContinuous +from pyro.poutine.plate_messenger import block_plate + +from .reparam import Reparam + + +class NeuTraReparam(Reparam): + """ + Neural Transport reparameterizer [1] of multiple latent variables. + + This uses a trained :class:`~pyro.infer.autoguide.AutoContinuous` + guide to alter the geometry of a model, typically for use e.g. in MCMC. + Example usage:: + + # Step 1. Train a guide + guide = AutoIAFNormal(model) + svi = SVI(model, guide, ...) + # ...train the guide... + + # Step 2. Use trained guide in NeuTra MCMC + neutra = NeuTraReparam(guide) + model = poutine.reparam(model, config=lambda _: neutra) + nuts = NUTS(model) + # ...now use the model in HMC or NUTS... + + This reparameterization works only for latent variables, not likelihoods. + Note that all sites must share a single common :class:`NeuTraReparam` + instance, and that the model must have static structure. + + [1] Hoffman, M. et al. (2019) + "NeuTra-lizing Bad Geometry in Hamiltonian Monte Carlo Using Neural Transport" + https://arxiv.org/abs/1903.03704 + + :param ~pyro.infer.autoguide.AutoContinuous guide: A trained guide. + """ + + def __init__(self, guide): + if not isinstance(guide, AutoContinuous): + raise TypeError( + "NeuTraReparam expected an AutoContinuous guide, but got {}".format( + type(guide) + ) + ) + self.guide = guide + self.transform = None + self.x_unconstrained = {} + self.is_observed = None + + def _reparam_config(self, site): + if site["name"] in self.guide.prototype_trace: + return self + + def reparam(self, fn=None): + return poutine.reparam(fn, config=self._reparam_config) + + def apply(self, msg): + name = msg["name"] + fn = msg["fn"] + value = msg["value"] + is_observed = msg["is_observed"] + if name not in self.guide.prototype_trace.nodes: + return {"fn": fn, "value": value, "is_observed": is_observed} + if is_observed: + raise NotImplementedError( + f"At pyro.sample({repr(name)},...), " + "NeuTraReparam does not support observe statements." + ) + + log_density = 0.0 + compute_density = poutine.get_mask() is not False + if name not in self.x_unconstrained: # On first sample site. + # Sample a shared latent. + try: + self.transform = self.guide.get_transform() + except (NotImplementedError, TypeError) as e: + raise ValueError( + "NeuTraReparam only supports guides that implement " + "`get_transform` method that does not depend on the " + "model's `*args, **kwargs`" + ) from e + + with ExitStack() as stack: + for plate in self.guide.plates.values(): + stack.enter_context(block_plate(dim=plate.dim, strict=False)) + z_unconstrained = pyro.sample( + f"{name}_shared_latent", self.guide.get_base_dist().mask(False) + ) + + # Differentiably transform. + x_unconstrained = self.transform(z_unconstrained) + if compute_density: + log_density = self.transform.log_abs_det_jacobian( + z_unconstrained, x_unconstrained + ) + self.x_unconstrained = { + site["name"]: (site, unconstrained_value) + for site, unconstrained_value in self.guide._unpack_latent( + x_unconstrained + ) + } + + # Extract a single site's value from the shared latent. + site, unconstrained_value = self.x_unconstrained.pop(name) + transform = biject_to(fn.support) + value = transform(unconstrained_value) + if compute_density: + logdet = transform.log_abs_det_jacobian(unconstrained_value, value) + logdet = sum_rightmost(logdet, logdet.dim() - value.dim() + fn.event_dim) + log_density = log_density + fn.log_prob(value) + logdet + new_fn = dist.Delta(value, log_density, event_dim=fn.event_dim) + return {"fn": new_fn, "value": value, "is_observed": True} + + def transform_sample(self, latent): + """ + Given latent samples from the warped posterior (with a possible batch dimension), + return a `dict` of samples from the latent sites in the model. + + :param latent: sample from the warped posterior (possibly batched). Note that the + batch dimension must not collide with plate dimensions in the model, i.e. + any batch dims `d < - max_plate_nesting`. + :return: a `dict` of samples keyed by latent sites in the model. + :rtype: dict + """ + x_unconstrained = self.transform(latent) + transformed_samples = {} + for site, value in self.guide._unpack_latent(x_unconstrained): + transform = biject_to(site["fn"].support) + x_constrained = transform(value) + transformed_samples[site["name"]] = x_constrained + return transformed_samples diff --git a/pyro/source/pyro/infer/reparam/projected_normal.py b/pyro/source/pyro/infer/reparam/projected_normal.py new file mode 100644 index 0000000000000000000000000000000000000000..4a4f1a27789a4f797c3902a0494b284ab57b3005 --- /dev/null +++ b/pyro/source/pyro/infer/reparam/projected_normal.py @@ -0,0 +1,55 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +import pyro +import pyro.distributions as dist +from pyro.ops.tensor_utils import safe_normalize + +from .reparam import Reparam + + +class ProjectedNormalReparam(Reparam): + """ + Reparametrizer for :class:`~pyro.distributions.ProjectedNormal` latent + variables. + + This reparameterization works only for latent variables, not likelihoods. + """ + + def apply(self, msg): + name = msg["name"] + fn = msg["fn"] + value = msg["value"] + is_observed = msg["is_observed"] + if is_observed: + raise NotImplementedError( + "ProjectedNormalReparam does not support observe statements" + ) + + fn, event_dim = self._unwrap(fn) + assert isinstance(fn, dist.ProjectedNormal) + + # Differentiably invert transform. + value_normal = None + if value is not None: + # We use an arbitrary injection, which works only for initialization. + value_normal = value - fn.concentration + + # Draw parameter-free noise. + new_fn = dist.Normal(torch.zeros_like(fn.concentration), 1).to_event(1) + x = pyro.sample( + "{}_normal".format(name), + self._wrap(new_fn, event_dim), + obs=value_normal, + infer={"is_observed": is_observed}, + ) + + # Differentiably transform. + if value is None: + value = safe_normalize(x + fn.concentration) + + # Simulate a pyro.deterministic() site. + new_fn = dist.Delta(value, event_dim=event_dim).mask(False) + return {"fn": new_fn, "value": value, "is_observed": True} diff --git a/pyro/source/pyro/infer/reparam/reparam.py b/pyro/source/pyro/infer/reparam/reparam.py new file mode 100644 index 0000000000000000000000000000000000000000..6f1360a6e1c1f9a8e6ab90130dbb4a538244662c --- /dev/null +++ b/pyro/source/pyro/infer/reparam/reparam.py @@ -0,0 +1,82 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import warnings +from abc import ABC +from typing import Callable, Optional + +import torch +from typing_extensions import TypedDict + + +class ReparamMessage(TypedDict): + name: str + fn: Callable + value: Optional[torch.Tensor] + is_observed: Optional[bool] + + +class ReparamResult(TypedDict): + fn: Callable + value: Optional[torch.Tensor] + is_observed: bool + + +class Reparam(ABC): + """ + Abstract base class for reparameterizers. + + Derived classes should implement :meth:`apply`. + """ + + # @abstractmethod # Not abstract, for backwards compatibility. + def apply(self, msg: ReparamMessage) -> ReparamResult: + """ + Abstract method to apply reparameterizer. + + :param dict name: A simplified Pyro message with fields: + - ``name: str`` the sample site's name + - ``fn: Callable`` a distribution + - ``value: Optional[torch.Tensor]`` an observed or initial value + - ``is_observed: bool`` whether ``value`` is an observation + :returns: A simplified Pyro message with fields ``fn``, ``value``, and + ``is_observed``. + :rtype: dict + """ + + # This default is provided for backwards compatibility only. + # New subclasses should define .apply() and omit .__call__(). + warnings.warn( + "Reparam.__call__() is deprecated in favor of .apply(); " + "new subclasses should implement .apply().", + DeprecationWarning, + ) + new_fn, value = self(msg["name"], msg["fn"], msg["value"]) + is_observed = msg["value"] is None and value is not None + return {"fn": new_fn, "value": value, "is_observed": is_observed} + + def __call__(self, name, fn, obs): + """ + DEPRECATED. + Subclasses should implement :meth:`apply` instead. + This will be removed in a future release. + """ + raise NotImplementedError + + def _unwrap(self, fn): + """ + Unwrap Independent distributions. + """ + event_dim = fn.event_dim + while isinstance(fn, torch.distributions.Independent): + fn = fn.base_dist + return fn, event_dim + + def _wrap(self, fn, event_dim): + """ + Wrap in Independent distributions. + """ + if fn.event_dim < event_dim: + fn = fn.to_event(event_dim - fn.event_dim) + assert fn.event_dim == event_dim + return fn diff --git a/pyro/source/pyro/infer/reparam/softmax.py b/pyro/source/pyro/infer/reparam/softmax.py new file mode 100644 index 0000000000000000000000000000000000000000..9c68549fb79e9d0dbeb7634f4899cbac86e97d08 --- /dev/null +++ b/pyro/source/pyro/infer/reparam/softmax.py @@ -0,0 +1,60 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +import pyro +import pyro.distributions as dist + +from .reparam import Reparam + + +class GumbelSoftmaxReparam(Reparam): + """ + Reparametrizer for :class:`~pyro.distributions.RelaxedOneHotCategorical` + latent variables. + + This is useful for transforming multimodal posteriors to unimodal + posteriors. Note this increases the latent dimension by 1 per event. + + This reparameterization works only for latent variables, not likelihoods. + """ + + def apply(self, msg): + name = msg["name"] + fn = msg["fn"] + value = msg["value"] + is_observed = msg["is_observed"] + + fn, event_dim = self._unwrap(fn) + assert isinstance(fn, dist.RelaxedOneHotCategorical) + if is_observed: + raise NotImplementedError( + "SoftmaxReparam does not support observe statements" + f" (at sample site {repr(name)})" + ) + + # Differentiably invert transform. + u = None + if value is not None: + logits = value * fn.temperature + u = (fn.logits - logits).exp().neg().exp() + + # Draw parameter-free noise. + proto = fn.logits + new_fn = dist.Uniform(torch.zeros_like(proto), torch.ones_like(proto)) + u = pyro.sample( + f"{name}_uniform", + self._wrap(new_fn, event_dim), + obs=u, + infer={"is_observed": is_observed}, + ) + + # Differentiably transform. + if value is None: + logits = fn.logits - u.log().neg().log() + value = (logits / fn.temperature).softmax(dim=-1) + + # Simulate a pyro.deterministic() site. + new_fn = dist.Delta(value, event_dim=event_dim).mask(False) + return {"fn": new_fn, "value": value, "is_observed": True} diff --git a/pyro/source/pyro/infer/reparam/split.py b/pyro/source/pyro/infer/reparam/split.py new file mode 100644 index 0000000000000000000000000000000000000000..e3abf8d74a8cb0bc88f7a461dc07bbb0290ddce2 --- /dev/null +++ b/pyro/source/pyro/infer/reparam/split.py @@ -0,0 +1,140 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.distributions.torch_distribution import TorchDistributionMixin +from pyro.ops.tensor_utils import broadcast_tensors_without_dim + +from .reparam import Reparam + + +def same_support(fn: TorchDistributionMixin, *args): + """ + Returns support of the `fn` distribution. Used in :class:`SplitReparam` in + order to determine the support of the split value. + + :param fn: distribution class + :returns: distribution support + """ + return fn.support + + +def real_support(fn: TorchDistributionMixin, *args): + """ + Returns real support with same event dimension as that of the `fn` distribution. + Used in :class:`SplitReparam` in order to determine the support of the split value. + + :param fn: distribution class + :returns: distribution support + """ + return dist.constraints.independent(dist.constraints.real, fn.event_dim) + + +def default_support(fn: TorchDistributionMixin, slice, dim): + """ + Returns support of the `fn` distribution, corrected for split stacking and + concatenation transforms. Used in :class:`SplitReparam` in + order to determine the support of the split value. + + :param fn: distribution class + :param slice: slice for which to return support + :param dim: dimension for which to return support + :returns: distribution support + """ + support = fn.support + # Unwrap support + reinterpreted_batch_ndims_vec = [] + while isinstance(support, dist.constraints.independent): + reinterpreted_batch_ndims_vec.append(support.reinterpreted_batch_ndims) + support = support.base_constraint + # Slice concatenation and stacking transforms + if isinstance(support, dist.constraints.stack) and support.dim == dim: + support = dist.constraints.stack(support.cseq[slice], dim) + elif isinstance(support, dist.constraints.cat) and support.dim == dim: + support = dist.constraints.cat(support.cseq[slice], dim, support.lengths[slice]) + # Wrap support + for reinterpreted_batch_ndims in reinterpreted_batch_ndims_vec[::-1]: + support = dist.constraints.independent(support, reinterpreted_batch_ndims) + return support + + +class SplitReparam(Reparam): + """ + Reparameterizer to split a random variable along a dimension, similar to + :func:`torch.split`. + + This is useful for treating different parts of a tensor with different + reparameterizers or inference methods. For example when performing HMC + inference on a time series, you can first apply + :class:`~pyro.infer.reparam.discrete_cosine.DiscreteCosineReparam` or + :class:`~pyro.infer.reparam.haar.HaarReparam`, then apply + :class:`SplitReparam` to split into low-frequency and high-frequency + components, and finally add the low-frequency components to the + ``full_mass`` matrix together with globals. + + :param sections: Size of a single chunk or list of sizes for + each chunk. + :type: list(int) + :param int dim: Dimension along which to split. Defaults to -1. + :param callable support_fn: Function which derives the split support + from the site's sampling function, split size, and split dimension. + Default is :func:`default_support` which correctly handles stacking + and concatenation transforms. Other options are :func:`same_support` + which returns the same support as that of the sampling function, and + :func:`real_support` which returns a real support. + """ + + def __init__(self, sections, dim, support_fn=default_support): + assert isinstance(dim, int) and dim < 0 + assert isinstance(sections, list) + assert all(isinstance(size, int) for size in sections) + self.event_dim = -dim + self.sections = sections + self.support_fn = support_fn + + def apply(self, msg): + name = msg["name"] + fn = msg["fn"] + value = msg["value"] + is_observed = msg["is_observed"] + assert fn.event_dim >= self.event_dim + + # Split value into parts. + value_split = [None] * len(self.sections) + if value is not None: + value_split[:] = value.split(self.sections, -self.event_dim) + + # Draw independent parts. + dim = fn.event_dim - self.event_dim + left_shape = fn.event_shape[:dim] + right_shape = fn.event_shape[1 + dim :] + start = 0 + for i, size in enumerate(self.sections): + event_shape = left_shape + (size,) + right_shape + value_split[i] = pyro.sample( + f"{name}_split_{i}", + dist.ImproperUniform( + self.support_fn(fn, slice(start, start + size), -self.event_dim), + fn.batch_shape, + event_shape, + ), + obs=value_split[i], + infer={"is_observed": is_observed}, + ) + start += size + + # Combine parts into value. + if value is None: + value_split = broadcast_tensors_without_dim(value_split, -self.event_dim) + value = torch.cat(value_split, dim=-self.event_dim) + + if poutine.get_mask() is False: + log_density = 0.0 + else: + log_density = fn.log_prob(value) + new_fn = dist.Delta(value, event_dim=fn.event_dim, log_density=log_density) + return {"fn": new_fn, "value": value, "is_observed": True} diff --git a/pyro/source/pyro/infer/reparam/stable.py b/pyro/source/pyro/infer/reparam/stable.py new file mode 100644 index 0000000000000000000000000000000000000000..a33a4d8255d9e169c23e5e8dd72b6afe6086fc21 --- /dev/null +++ b/pyro/source/pyro/infer/reparam/stable.py @@ -0,0 +1,269 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import torch + +import pyro +import pyro.distributions as dist +from pyro.distributions.stable import _standard_stable, _unsafe_standard_stable +from pyro.infer.util import is_validation_enabled + +from .reparam import Reparam + + +class LatentStableReparam(Reparam): + """ + Auxiliary variable reparameterizer for + :class:`~pyro.distributions.Stable` latent variables. + + This is useful in inference of latent :class:`~pyro.distributions.Stable` + variables because the :meth:`~pyro.distributions.Stable.log_prob` is not + implemented. + + This uses the Chambers-Mallows-Stuck method [1], creating a pair of + parameter-free auxiliary distributions (``Uniform(-pi/2,pi/2)`` and + ``Exponential(1)``) with well-defined ``.log_prob()`` methods, thereby + permitting use of reparameterized stable distributions in likelihood-based + inference algorithms like SVI and MCMC. + + This reparameterization works only for latent variables, not likelihoods. + For likelihood-compatible reparameterization see + :class:`SymmetricStableReparam` or :class:`StableReparam` . + + [1] J.P. Nolan (2017). + Stable Distributions: Models for Heavy Tailed Data. + https://edspace.american.edu/jpnolan/wp-content/uploads/sites/1720/2020/09/Chap1.pdf + """ + + def apply(self, msg): + name = msg["name"] + fn = msg["fn"] + # ignore msg["value"] + is_observed = msg["is_observed"] + + fn, event_dim = self._unwrap(fn) + assert ( + isinstance(fn, dist.Stable) + and fn.coords == "S0" + and not isinstance(fn, dist.StableWithLogProb) + ) + if is_observed: + raise NotImplementedError( + f"At pyro.sample({repr(name)},...), " + "LatentStableReparam does not support observe statements" + ) + + # Draw parameter-free noise. + proto = fn.stability + half_pi = proto.new_tensor(math.pi / 2) + one = proto.new_ones(proto.shape) + u = pyro.sample( + "{}_uniform".format(name), + self._wrap(dist.Uniform(-half_pi, half_pi).expand(proto.shape), event_dim), + ) + e = pyro.sample( + "{}_exponential".format(name), self._wrap(dist.Exponential(one), event_dim) + ) + + # Differentiably transform. + x = _standard_stable(fn.stability, fn.skew, u, e, coords="S0") + value = fn.loc + fn.scale * x + + # Simulate a pyro.deterministic() site. + new_fn = dist.Delta(value, event_dim=event_dim).mask(False) + return {"fn": new_fn, "value": value, "is_observed": True} + + +class SymmetricStableReparam(Reparam): + """ + Auxiliary variable reparameterizer for symmetric + :class:`~pyro.distributions.Stable` random variables (i.e. those for which + ``skew=0``). + + This is useful in inference of symmetric + :class:`~pyro.distributions.Stable` variables because the + :meth:`~pyro.distributions.Stable.log_prob` is not implemented. + + This reparameterizes a symmetric :class:`~pyro.distributions.Stable` random + variable as a totally-skewed (``skew=1``) + :class:`~pyro.distributions.Stable` scale mixture of + :class:`~pyro.distributions.Normal` random variables. See Proposition 3. of + [1] (but note we differ since :class:`Stable` uses Nolan's continuous S0 + parameterization). + + [1] Alvaro Cartea and Sam Howison (2009) + "Option Pricing with Levy-Stable Processes" + https://pdfs.semanticscholar.org/4d66/c91b136b2a38117dd16c2693679f5341c616.pdf + """ + + def apply(self, msg): + name = msg["name"] + fn = msg["fn"] + value = msg["value"] + is_observed = msg["is_observed"] + + fn, event_dim = self._unwrap(fn) + assert ( + isinstance(fn, dist.Stable) + and fn.coords == "S0" + and not isinstance(fn, dist.StableWithLogProb) + ) + if is_validation_enabled(): + if not (fn.skew == 0).all(): + raise ValueError("SymmetricStableReparam found nonzero skew") + if not (fn.stability < 2).all(): + raise ValueError("SymmetricStableReparam found stability >= 2") + + # Draw parameter-free noise. + proto = fn.stability + half_pi = proto.new_tensor(math.pi / 2) + one = proto.new_ones(proto.shape) + u = pyro.sample( + "{}_uniform".format(name), + self._wrap(dist.Uniform(-half_pi, half_pi).expand(proto.shape), event_dim), + ) + e = pyro.sample( + "{}_exponential".format(name), self._wrap(dist.Exponential(one), event_dim) + ) + + # Differentiably transform to scale drawn from a totally-skewed stable variable. + a = fn.stability + z = _unsafe_standard_stable(a / 2, 1, u, e, coords="S") + assert (z >= 0).all() + scale = fn.scale * (math.pi / 4 * a).cos().pow(a.reciprocal()) * z.sqrt() + scale = scale.clamp(min=torch.finfo(scale.dtype).tiny) + + # Construct a scaled Gaussian, using Stable(2,0,s,m) == Normal(m,s*sqrt(2)). + new_fn = self._wrap(dist.Normal(fn.loc, scale * (2**0.5)), event_dim) + return {"fn": new_fn, "value": value, "is_observed": is_observed} + + +class StableReparam(Reparam): + """ + Auxiliary variable reparameterizer for arbitrary + :class:`~pyro.distributions.Stable` random variables. + + This is useful in inference of non-symmetric + :class:`~pyro.distributions.Stable` variables because the + :meth:`~pyro.distributions.Stable.log_prob` is not implemented. + + This reparameterizes a :class:`~pyro.distributions.Stable` random variable + as sum of two other stable random variables, one symmetric and the other + totally skewed (applying Property 2.3.a of [1]). The totally skewed + variable is sampled as in :class:`LatentStableReparam` , and the symmetric + variable is decomposed as in :class:`SymmetricStableReparam` . + + [1] V. M. Zolotarev (1986) + "One-dimensional stable distributions" + """ + + def apply(self, msg): + name = msg["name"] + fn = msg["fn"] + value = msg["value"] + is_observed = msg["is_observed"] + + fn, event_dim = self._unwrap(fn) + assert ( + isinstance(fn, dist.Stable) + and fn.coords == "S0" + and not isinstance(fn, dist.StableWithLogProb) + ) + + # Strategy: Let X ~ S0(a,b,s,m) be the stable variable of interest. + # 1. WLOG scale and shift so s=1 and m=0, additionally shifting to convert + # from Zolotarev's S parameterization to Nolan's S0 parameterization. + # 2. Decompose X = S + T, where + # S ~ S(a,0,...,0) is symmetric and + # T ~ S(a,sgn(b),...,0) is totally skewed. + # 3. Decompose S = G * sqrt(Z) via the symmetric strategy, where + # Z ~ S(a/2,1,...,0) is totally-skewed and + # G ~ Normal(0,1) is Gaussian. + # 4. Defer the totally-skewed Z and T to the Chambers-Mallows-Stuck + # strategy: Z = f(Unif,Exp), T = f(Unif,Exp). + # + # To derive the parameters of S and T, we solve the equations + # + # T.stability = a S.stability = a + # T.skew = sgn(b) S.skew = 0 + # T.loc = 0 S.loc = 0 + # + # s = (S.scale**a + T.scale**a)**(1/a) = 1 # by step 1. + # + # S.skew * S.scale**a + T.skew * T.scale**a + # b = ----------------------------------------- = sgn(b) * T.scale**a + # S.scale**a + T.scale**a + # yielding + # + # T.scale = |b| ** (1/a) S.scale = (1 - |b|) ** (1/a) + + # Draw parameter-free noise. + proto = fn.stability + half_pi = proto.new_tensor(math.pi / 2) + one = proto.new_ones(proto.shape) + zu = pyro.sample( + "{}_z_uniform".format(name), + self._wrap(dist.Uniform(-half_pi, half_pi).expand(proto.shape), event_dim), + ) + ze = pyro.sample( + "{}_z_exponential".format(name), + self._wrap(dist.Exponential(one), event_dim), + ) + tu = pyro.sample( + "{}_t_uniform".format(name), + self._wrap(dist.Uniform(-half_pi, half_pi).expand(proto.shape), event_dim), + ) + te = pyro.sample( + "{}_t_exponential".format(name), + self._wrap(dist.Exponential(one), event_dim), + ) + + # Differentiably transform. + a = fn.stability + z = _unsafe_standard_stable(a / 2, 1, zu, ze, coords="S") + t = _standard_stable(a, one, tu, te, coords="S0") + a_inv = a.reciprocal() + eps = torch.finfo(a.dtype).eps + skew_abs = fn.skew.abs().clamp(min=eps, max=1 - eps) + t_scale = skew_abs.pow(a_inv) + s_scale = (1 - skew_abs).pow(a_inv) + shift = _safe_shift(a, fn.skew, t_scale, skew_abs) + loc = fn.loc + fn.scale * (fn.skew.sign() * t_scale * t + shift) + scale = fn.scale * s_scale * z.sqrt() * (math.pi / 4 * a).cos().pow(a_inv) + scale = scale.clamp(min=torch.finfo(scale.dtype).tiny) + + # Construct a scaled Gaussian, using Stable(2,0,s,m) == Normal(m,s*sqrt(2)). + new_fn = self._wrap(dist.Normal(loc, scale * (2**0.5)), event_dim) + return {"fn": new_fn, "value": value, "is_observed": is_observed} + + +def _unsafe_shift(a, skew, t_scale): + # At a=1 the lhs has a root and the rhs has an asymptote. + return (skew.sign() * t_scale - skew) * (math.pi / 2 * a).tan() + + +def _safe_shift(a, skew, t_scale, skew_abs): + radius = 0.005 + hole = 1.0 + with torch.no_grad(): + near_hole = (a - hole).abs() <= radius + if not near_hole.any(): + return _unsafe_shift(a, skew, t_scale) + + # Avoid the hole at a=1 by interpolating between points on either side. + a_ = a.unsqueeze(-1).expand(a.shape + (2,)).contiguous() + with torch.no_grad(): + lb, ub = a_.data.unbind(-1) + lb[near_hole] = hole - radius + ub[near_hole] = hole + radius + # We don't need to backprop through weights, since we've pretended + # a_ is reparametrized, even though we've clamped some values. + weights = (a_ - a.unsqueeze(-1)).abs_().mul_(-1 / (2 * radius)).add_(1) + weights[~near_hole] = 0.5 + skew_ = skew.unsqueeze(-1) + skew_abs_ = skew_abs.unsqueeze(-1) + t_scale_ = skew_abs_.pow(a_.reciprocal()) + pairs = _unsafe_shift(a_, skew_, t_scale_) + return (pairs * weights).sum(-1) diff --git a/pyro/source/pyro/infer/reparam/strategies.py b/pyro/source/pyro/infer/reparam/strategies.py new file mode 100644 index 0000000000000000000000000000000000000000..ae0d92f73c2c7a8e14d0c701c19166bf7ebd0e0c --- /dev/null +++ b/pyro/source/pyro/infer/reparam/strategies.py @@ -0,0 +1,216 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +""" +These reparametrization strategies are registered with +:func:`~pyro.poutine.reparam_messenger.register_reparam_strategy` and are +accessed by name via ``poutine.reparam(config=name_of_strategy)`` . +See :func:`~pyro.poutine.handlers.reparam` for usage. +""" + +from abc import ABC, abstractmethod +from typing import Callable, Dict, Optional, Union + +import torch +from torch.distributions import constraints + +import pyro.distributions as dist +import pyro.poutine as poutine + +from .loc_scale import LocScaleReparam +from .projected_normal import ProjectedNormalReparam +from .reparam import Reparam +from .softmax import GumbelSoftmaxReparam +from .stable import LatentStableReparam, StableReparam, SymmetricStableReparam +from .transform import TransformReparam + + +class Strategy(ABC): + """ + Abstract base class for reparametrizer configuration strategies. + + Derived classes must implement the :meth:`configure` method. + + :ivar dict config: A dictionary configuration. This will be populated the + first time the model is run. Thereafter it can be used as an argument + to ``poutine.reparam(config=___)``. + """ + + # TODO(https://github.com/pyro-ppl/pyro/issues/2831) As part of refactoring + # Reparam objects to be nn.Modules: + # - make Strategy inherit from torch.nn.Module + # - make self.config a torch.nn.ModuleDict + + def __init__(self): + # TODO(#2831) Make this a torch.nn.ModuleDict. + self.config: Dict[str, Optional[Reparam]] = {} + super().__init__() + + @abstractmethod + def configure(self, msg: dict) -> Optional[Reparam]: + """ + Inputs a sample site and returns either None or a + :class:`~pyro.infer.reparam.reparam.Reparam` instance. + + This will be called only on the first model execution; subsequent + executions will use the reparametrizer stored in ``self.config``. + + :param dict msg: A sample site to possibly reparametrize. + :returns: An optional reparametrizer instance. + """ + raise NotImplementedError + + def __call__(self, msg_or_fn: Union[dict, Callable]): + """ + Strategies can be used as decorators to reparametrize a model. + + :param msg_or_fn: Public use: a model to be decorated. (Internal use: a + site to be configured for reparametrization). + """ + if isinstance(msg_or_fn, dict): # Internal use during configuration. + msg = msg_or_fn + name = msg["name"] + if name in self.config: + return self.config[name] + result = self.configure(msg) + self.config[name] = result + return result + else: # Public use as a decorator or handler. + fn = msg_or_fn + return poutine.reparam(fn, self) + + +class MinimalReparam(Strategy): + """ + Minimal reparametrization strategy that reparametrizes only those sites + that would otherwise lead to error, e.g. + :class:`~pyro.distributions.Stable` and + :class:`~pyro.distributions.ProjectedNormal` random variables. + + Example:: + + @MinimalReparam() + def model(...): + ... + + which is equivalent to:: + + @poutine.reparam(config=MinimalReparam()) + def model(...): + ... + """ + + def configure(self, msg: dict) -> Optional[Reparam]: + return _minimal_reparam(msg["fn"], msg["is_observed"]) + + +def _minimal_reparam(fn, is_observed): + # Unwrap Independent, Masked, Transformed etc. + while isinstance(getattr(fn, "base_dist", None), dist.Distribution): + if isinstance(fn, torch.distributions.TransformedDistribution): + if _minimal_reparam(fn.base_dist, is_observed) is None: + return None # No need to reparametrize. + else: + return TransformReparam() # Then reparametrize new sites. + fn = fn.base_dist + + if isinstance(fn, dist.Stable) and not isinstance(fn, dist.StableWithLogProb): + if not is_observed: + return LatentStableReparam() + elif fn.skew.requires_grad or fn.skew.any(): + return StableReparam() + else: + return SymmetricStableReparam() + + if isinstance(fn, dist.ProjectedNormal): + return ProjectedNormalReparam() + + # TODO apply CircularReparam for VonMises + + +class AutoReparam(Strategy): + """ + Applies a recommended set of reparametrizers. These currently include: + :class:`MinimalReparam`, + :class:`~pyro.infer.reparam.transform.TransformReparam`, a fully-learnable + :class:`~pyro.infer.reparam.loc_scale.LocScaleReparam`, and + :class:`~pyro.infer.reparam.softmax.GumbelSoftmaxReparam`. + + Example:: + + @AutoReparam() + def model(...): + ... + + which is equivalent to:: + + @poutine.reparam(config=AutoReparam()) + def model(...): + ... + + .. warning:: This strategy may change behavior across Pyro releases. + To inspect or save a given behavior, extract the ``.config`` dict after + running the model at least once. + + :param centered: Optional centering parameter for + :class:`~pyro.infer.reparam.loc_scale.LocScaleReparam` reparametrizers. + If None (default), centering will be learned. If a float in + ``[0.0,1.0]``, then a fixed centering. To completely decenter (e.g. in + MCMC), set to 0.0. + """ + + def __init__(self, *, centered: Optional[float] = None): + assert centered is None or isinstance(centered, float) + super().__init__() + self.centered = centered + + def configure(self, msg: dict) -> Optional[Reparam]: + # Focus on tricks for latent sites. + fn = msg["fn"] + if not msg["is_observed"]: + # Unwrap Independent, Masked, Transformed etc. + while isinstance(getattr(fn, "base_dist", None), dist.Distribution): + if isinstance(fn, torch.distributions.TransformedDistribution): + return TransformReparam() # Then reparametrize new sites. + fn = fn.base_dist + + # Try to apply a GumbelSoftmaxReparam. + if isinstance(fn, torch.distributions.RelaxedOneHotCategorical): + return GumbelSoftmaxReparam() + + # Apply a learnable LocScaleReparam. + result = _loc_scale_reparam(msg["name"], fn, self.centered) + if result is not None: + return result + + # Apply minimal reparametrizers. + return _minimal_reparam(fn, msg["is_observed"]) + + +def _loc_scale_reparam(name, fn, centered): + if "_decentered" in name: + return # Avoid infinite recursion. + + # Check for location-scale families. + params = set(fn.arg_constraints) + if not {"loc", "scale"}.issubset(params): + return + + # Check for unconstrained support. + if not _is_unconstrained(fn.support): + return + + # TODO reparametrize only if parameters are variable. We might guess + # based on whether parameters are differentiable, .requires_grad. See + # https://github.com/pyro-ppl/pyro/pull/2824 + + # Create an elementwise-learnable reparametrizer. + shape_params = sorted(params - {"loc", "scale"}) + return LocScaleReparam(centered=centered, shape_params=shape_params) + + +def _is_unconstrained(constraint): + # Unwrap constraints.independent. + while hasattr(constraint, "base_constraint"): + constraint = constraint.base_constraint + return constraint == constraints.real diff --git a/pyro/source/pyro/infer/reparam/structured.py b/pyro/source/pyro/infer/reparam/structured.py new file mode 100644 index 0000000000000000000000000000000000000000..9ab492f9bd36837fa7bd74a881c115045f245744 --- /dev/null +++ b/pyro/source/pyro/infer/reparam/structured.py @@ -0,0 +1,106 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from contextlib import ExitStack + +import pyro.distributions as dist +from pyro import poutine +from pyro.infer.autoguide.structured import AutoStructured +from pyro.poutine.plate_messenger import block_plate + +from .reparam import Reparam + + +class StructuredReparam(Reparam): + """ + Preconditioning reparameterizer of multiple latent variables. + + This uses a trained :class:`~pyro.infer.autoguide.AutoStructured` + guide to alter the geometry of a model, typically for use e.g. in MCMC. + Example usage:: + + # Step 1. Train a guide + guide = AutoStructured(model, ...) + svi = SVI(model, guide, ...) + # ...train the guide... + + # Step 2. Use trained guide in preconditioned MCMC + model = StructuredReparam(guide).reparam(model) + nuts = NUTS(model) + # ...now use the model in HMC or NUTS... + + This reparameterization works only for latent variables, not likelihoods. + Note that all sites must share a single common :class:`StructuredReparam` + instance, and that the model must have static structure. + + .. note:: This can be seen as a restricted structured version of + :class:`~pyro.infer.reparam.neutra.NeuTraReparam` [1] combined with + ``poutine.condition`` on MAP-estimated sites (the NeuTra transform is + an exact reparameterizer, but the conditioning to point estimates + introduces model approximation). + + [1] Hoffman, M. et al. (2019) + "NeuTra-lizing Bad Geometry in Hamiltonian Monte Carlo Using Neural Transport" + https://arxiv.org/abs/1903.03704 + + :param ~pyro.infer.autoguide.AutoStructured guide: A trained guide. + """ + + def __init__(self, guide: AutoStructured): + if not isinstance(guide, AutoStructured): + raise TypeError( + f"StructuredReparam expected an AutoStructured guide, but got {type(guide)}" + ) + self.guide = guide.requires_grad_(False) + self.deltas = {} + + def _reparam_config(self, site): + if site["name"] in self.guide.prototype_trace: + return self + + def reparam(self, fn=None): + return poutine.reparam(fn, config=self._reparam_config) + + def apply(self, msg): + name = msg["name"] + fn = msg["fn"] + value = msg["value"] + is_observed = msg["is_observed"] + if name not in self.guide.prototype_trace.nodes: + return {"fn": fn, "value": value, "is_observed": is_observed} + if is_observed: + raise NotImplementedError( + f"At pyro.sample({repr(name)},...), " + "StructuredReparam does not support observe statements" + ) + + if name not in self.deltas: # On first sample site. + with ExitStack() as stack: + for plate in self.guide.plates.values(): + stack.enter_context(block_plate(dim=plate.dim, strict=False)) + self.deltas = self.guide.get_deltas() + new_fn = self.deltas.pop(name) + value = new_fn.v + + if poutine.get_mask() is not False: + log_density = new_fn.log_density + fn.log_prob(value) + new_fn = dist.Delta(value, log_density, new_fn.event_dim) + return {"fn": new_fn, "value": value, "is_observed": True} + + def transform_samples(self, aux_samples, save_params=None): + """ + Given latent samples from the warped posterior (with a possible batch dimension), + return a `dict` of samples from the latent sites in the model. + + :param dict aux_samples: Dict site name to tensor value for each latent + auxiliary site (or if ``save_params`` is specifiec, then for only + those latent auxiliary sites needed to compute requested params). + :param list save_params: An optional list of site names to save. This + is useful in models with large nuisance variables. Defaults to + None, saving all params. + :return: a `dict` of samples keyed by latent sites in the model. + :rtype: dict + """ + with poutine.condition(data=aux_samples), poutine.mask(mask=False): + deltas = self.guide.get_deltas(save_params) + return {name: delta.v for name, delta in deltas.items()} diff --git a/pyro/source/pyro/infer/reparam/studentt.py b/pyro/source/pyro/infer/reparam/studentt.py new file mode 100644 index 0000000000000000000000000000000000000000..01751827c0108e12c26da4b67cb297c3d7169d2f --- /dev/null +++ b/pyro/source/pyro/infer/reparam/studentt.py @@ -0,0 +1,44 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pyro +import pyro.distributions as dist + +from .reparam import Reparam + + +class StudentTReparam(Reparam): + """ + Auxiliary variable reparameterizer for + :class:`~pyro.distributions.StudentT` random variables. + + This is useful in combination with + :class:`~pyro.infer.reparam.hmm.LinearHMMReparam` because it allows + StudentT processes to be treated as conditionally Gaussian processes, + permitting cheap inference via :class:`~pyro.distributions.GaussianHMM` . + + This reparameterizes a :class:`~pyro.distributions.StudentT` by introducing + an auxiliary :class:`~pyro.distributions.Gamma` variable conditioned on + which the result is :class:`~pyro.distributions.Normal` . + """ + + def apply(self, msg): + name = msg["name"] + fn = msg["fn"] + value = msg["value"] + is_observed = msg["is_observed"] + + fn, event_dim = self._unwrap(fn) + assert isinstance(fn, dist.StudentT) + + # Draw a sample that depends only on df. + half_df = fn.df * 0.5 + gamma = pyro.sample( + "{}_gamma".format(name), self._wrap(dist.Gamma(half_df, half_df), event_dim) + ) + + # Construct a scaled Normal. + loc = fn.loc + scale = fn.scale * gamma.rsqrt() + new_fn = self._wrap(dist.Normal(loc, scale), event_dim) + return {"fn": new_fn, "value": value, "is_observed": is_observed} diff --git a/pyro/source/pyro/infer/reparam/transform.py b/pyro/source/pyro/infer/reparam/transform.py new file mode 100644 index 0000000000000000000000000000000000000000..c9f18b5119ccf0e21abbe6a4c764c91c9b5dc767 --- /dev/null +++ b/pyro/source/pyro/infer/reparam/transform.py @@ -0,0 +1,58 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +import pyro +import pyro.distributions as dist + +from .reparam import Reparam + + +class TransformReparam(Reparam): + """ + Reparameterizer for + :class:`pyro.distributions.torch.TransformedDistribution` latent variables. + + This is useful for transformed distributions with complex, + geometry-changing transforms, where the posterior has simple shape in + the space of ``base_dist``. + + This reparameterization works only for latent variables, not likelihoods. + """ + + def apply(self, msg): + name = msg["name"] + fn = msg["fn"] + value = msg["value"] + is_observed = msg["is_observed"] + + fn, event_dim = self._unwrap(fn) + assert isinstance(fn, torch.distributions.TransformedDistribution) + + # Differentiably invert transform. + value_base = value + if value is not None: + for t in reversed(fn.transforms): + value_base = t.inv(value_base) + + # Draw noise from the base distribution. + base_event_dim = event_dim + for t in reversed(fn.transforms): + base_event_dim += t.domain.event_dim - t.codomain.event_dim + value_base = pyro.sample( + f"{name}_base", + self._wrap(fn.base_dist, base_event_dim), + obs=value_base, + infer={"is_observed": is_observed}, + ) + + # Differentiably transform. + if value is None: + value = value_base + for t in fn.transforms: + value = t(value) + + # Simulate a pyro.deterministic() site. + new_fn = dist.Delta(value, event_dim=event_dim).mask(False) + return {"fn": new_fn, "value": value, "is_observed": True} diff --git a/pyro/source/pyro/infer/reparam/unit_jacobian.py b/pyro/source/pyro/infer/reparam/unit_jacobian.py new file mode 100644 index 0000000000000000000000000000000000000000..a45037c58f922d1e28bbf6f97873b4ed15469621 --- /dev/null +++ b/pyro/source/pyro/infer/reparam/unit_jacobian.py @@ -0,0 +1,102 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from contextlib import ExitStack + +from torch.distributions import biject_to +from torch.distributions.transforms import ComposeTransform + +import pyro +import pyro.distributions as dist +from pyro.poutine.plate_messenger import block_plate + +from .reparam import Reparam + + +class UnitJacobianReparam(Reparam): + """ + Reparameterizer for :class:`~torch.distributions.transforms.Transform` + objects whose Jacobian determinant is one. + + :param transform: A transform whose Jacobian has determinant 1. + :type transform: ~torch.distributions.transforms.Transform + :param str suffix: A suffix to append to the transformed site. + :param bool experimental_allow_batch: EXPERIMENTAL allow coupling across a + batch dimension. The targeted batch dimension and all batch dimensions + to the right will be converted to event dimensions. Defaults to False. + """ + + def __init__( + self, transform, suffix="transformed", *, experimental_allow_batch=False + ): + self.transform = transform.with_cache() + self.suffix = suffix + self.experimental_allow_batch = experimental_allow_batch + + def apply(self, msg): + name = msg["name"] + fn = msg["fn"] + value = msg["value"] + is_observed = msg["is_observed"] + + event_dim = fn.event_dim + transform = self.transform + with ExitStack() as stack: + shift = max(0, transform.event_dim - event_dim) + if shift: + if not self.experimental_allow_batch: + raise ValueError( + "Cannot transform along batch dimension; try either" + "converting a batch dimension to an event dimension, or " + "setting experimental_allow_batch=True." + ) + + # Reshape and mute plates using block_plate. + from pyro.contrib.forecast.util import ( + reshape_batch, + reshape_transform_batch, + ) + + old_shape = fn.batch_shape + new_shape = old_shape[:-shift] + (1,) * shift + old_shape[-shift:] + fn = reshape_batch(fn, new_shape).to_event(shift) + transform = reshape_transform_batch( + transform, old_shape + fn.event_shape, new_shape + fn.event_shape + ) + if value is not None: + value = value.reshape( + value.shape[: -shift - event_dim] + + (1,) * shift + + value.shape[-shift - event_dim :] + ) + for dim in range(-shift, 0): + stack.enter_context(block_plate(dim=dim, strict=False)) + + # Differentiably invert transform. + transform = ComposeTransform( + [biject_to(fn.support).inv.with_cache(), self.transform] + ) + value_trans = None + if value is not None: + value_trans = transform(value) + + # Draw noise from the base distribution. + value_trans = pyro.sample( + f"{name}_{self.suffix}", + dist.TransformedDistribution(fn, transform), + obs=value_trans, + infer={"is_observed": is_observed}, + ) + + # Differentiably transform. This should be free due to transform cache. + if value is None: + value = transform.inv(value_trans) + if shift: + value = value.reshape( + value.shape[: -2 * shift - event_dim] + + value.shape[-shift - event_dim :] + ) + + # Simulate a pyro.deterministic() site. + new_fn = dist.Delta(value, event_dim=event_dim) + return {"fn": new_fn, "value": value, "is_observed": True} diff --git a/pyro/source/pyro/infer/resampler.py b/pyro/source/pyro/infer/resampler.py new file mode 100644 index 0000000000000000000000000000000000000000..dae2e19a6ed9097f357f8585f9f9e3a3861de740 --- /dev/null +++ b/pyro/source/pyro/infer/resampler.py @@ -0,0 +1,133 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from typing import Callable, Dict, Optional + +import torch + +import pyro +import pyro.poutine as poutine +from pyro.poutine.trace_struct import Trace +from pyro.poutine.util import site_is_subsample + + +class Resampler: + """Resampler for interactive tuning of generative models, typically + when preforming prior predictive checks as an early step of Bayesian + workflow. + + This is intended as a computational cache to speed up the interactive + tuning of the parameters of prior distributions based on samples from a + downstream simulation. The idea is that the simulation can be expensive, + but that when one slightly tweaks parameters of the parameter distribution + then one can reuse most of the previous samples via importance resampling. + + :param callable guide: A pyro model that takes no arguments. The guide + should be diffuse, covering more space than the subsequent ``model`` + passed to :meth:`sample`. Must be vectorizable via ``pyro.plate``. + :param callable simulator: An optional larger pyro model with a superset of + the guide's latent variables. Must be vectorizable via ``pyro.plate``. + :param int num_guide_samples: Number of inital samples to draw from the + guide. This should be much larger than the ``num_samples`` requested in + subsequent calls to :meth:`sample`. + :param int max_plate_nesting: The maximum plate nesting in the model. + If absent this will be guessed by running the guide. + """ + + def __init__( + self, + guide: Callable, + simulator: Optional[Callable] = None, + *, + num_guide_samples: int, + max_plate_nesting: Optional[int] = None, + ): + super().__init__() + if max_plate_nesting is None: + max_plate_nesting = _guess_max_plate_nesting( + guide if simulator is None else simulator + ) + self._particle_dim = -1 - max_plate_nesting + self._gumbels: Optional[torch.Tensor] = None + + # Draw samples from the initial guide. + with pyro.plate("particles", num_guide_samples, dim=self._particle_dim): + trace = poutine.trace(guide).get_trace() + self._old_logp = _log_prob_sum(trace, num_guide_samples) + + if simulator: + # Draw extended samples from the simulator. + trace = poutine.trace(poutine.replay(simulator, trace)).get_trace() + self._samples = { + name: site["value"] + for name, site in trace.nodes.items() + if site["type"] == "sample" and not site_is_subsample(site) + } + + @torch.no_grad() + def sample( + self, model: Callable, num_samples: int, stable: bool = True + ) -> Dict[str, torch.Tensor]: + """Draws a set of at most ``num_samples`` many model samples, + optionally extended by the ``simulator``. + + Internally this importance resamples the samples generated by the + ``guide`` in ``.__init__()``, and does not rerun the ``guide`` or + ``simulator``. If the original guide samples poorly cover the model + distribution, samples will show low diversity. + + :param callable model: A model with the same latent variables as the + original ``guide``. Must be vectorizable via ``pyro.plate``. + :param int num_samples: The number of samples to draw. + :param bool stable: Whether to use piecewise-constant multinomial + sampling. Set to True for visualization, False for Monte Carlo + integration. Defaults to True. + :returns: A dictionary of stacked samples. + :rtype: Dict[str, torch.Tensor] + """ + num_guide_samples = len(self._old_logp) + with pyro.plate("particles", num_guide_samples, dim=self._particle_dim): + trace = poutine.trace(poutine.condition(model, self._samples)).get_trace() + new_logp = _log_prob_sum(trace, num_guide_samples) + logits = new_logp - self._old_logp + i = self._categorical_sample(logits, num_samples, stable) + samples = {k: v[i] for k, v in self._samples.items()} + return samples + + def _categorical_sample( + self, logits: torch.Tensor, num_samples: int, stable: bool + ) -> torch.Tensor: + if not stable: + return torch.multinomial(logits.exp(), num_samples, replacement=True) + + # Implement stable categorical sampling via the Gumbel-max trick. + if self._gumbels is None or len(self._gumbels) < num_samples: + # gumbel ~ -log(-log(uniform(0,1))) + tiny = torch.finfo(logits.dtype).tiny + self._gumbels = logits.new_empty(num_samples, len(logits)).uniform_() + self._gumbels.clamp_(min=tiny).log_().neg_().clamp_(min=tiny).log_().neg_() + return self._gumbels[:num_samples].add(logits).max(-1).indices + + +def _log_prob_sum(trace: Trace, batch_size: int) -> torch.Tensor: + """Computes vectorized log_prob_sum batched over the leftmost dimension.""" + trace.compute_log_prob() + result = 0.0 + for site in trace.nodes.values(): + if site["type"] == "sample": + logp = site["log_prob"] + assert logp.shape[:1] == (batch_size,) + result += logp.reshape(batch_size, -1).sum(-1) + return result + + +def _guess_max_plate_nesting(model: callable) -> int: + with torch.no_grad(), poutine.block(), poutine.mask(mask=False): + trace = poutine.trace(model).get_trace() + plate_nesting = {0}.union( + -f.dim + for site in trace.nodes.values() + for f in site.get("cond_indep_stack", []) + if f.vectorized + ) + return max(plate_nesting) diff --git a/pyro/source/pyro/infer/rws.py b/pyro/source/pyro/infer/rws.py new file mode 100644 index 0000000000000000000000000000000000000000..c897cb895dbcd6229bf8eb51468f27eb0fbab529 --- /dev/null +++ b/pyro/source/pyro/infer/rws.py @@ -0,0 +1,274 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import torch + +import pyro +import pyro.poutine as poutine +from pyro.infer.elbo import ELBO +from pyro.infer.enum import get_importance_trace +from pyro.infer.util import is_validation_enabled +from pyro.poutine.util import prune_subsample_sites +from pyro.util import check_if_enumerated, check_model_guide_match, warn_if_nan + + +class ReweightedWakeSleep(ELBO): + r""" + An implementation of Reweighted Wake Sleep following reference [1]. + + .. note:: Sampling and log_prob evaluation asymptotic complexity: + + 1) Using wake-theta and/or wake-phi + O(`num_particles`) samples from guide, + O(`num_particles`) `log_prob` evaluations of model and guide + + 2) Using sleep-phi + O(`num_sleep_particles`) samples from model, + O(`num_sleep_particles`) `log_prob` evaluations of guide + + if 1) and 2) are combined, + O(`num_particles`) samples from the guide, + O(`num_sleep_particles`) from the model, + O(`num_particles` + `num_sleep_particles`) `log_prob` evaluations of the guide, and + O(`num_particles`) evaluations of the model + + .. note:: This is particularly useful for models with stochastic branching, + as described in [2]. + + .. note:: This returns _two_ losses, one each for (a) the model parameters (`theta`), computed using the + `iwae` objective, and (b) the guide parameters (`phi`), computed using (a combination of) the `csis` + objective and a self-normalized importance-sampled version of the `csis` objective. + + .. note:: In order to enable computing the sleep-phi terms, the guide program must have its observations + explicitly passed in through the keyworded argument `observations`. Where the value of the observations + is unknown during definition, such as for amortized variational inference, it may be given a default + argument as `observations=None`, and the correct value supplied during learning through + `svi.step(observations=...)`. + + .. warning:: Mini-batch training is not supported yet. + + :param int num_particles: The number of particles/samples used to form the objective + (gradient) estimator. Default is 2. + :param insomnia: The scaling between the wake-phi and sleep-phi terms. Default is 1.0 [wake-phi] + :param bool model_has_params: Indicate if model has learnable params. Useful in avoiding extra + computation when running in pure sleep mode [csis]. Default is True. + :param int num_sleep_particles: The number of particles used to form the sleep-phi estimator. + Matches `num_particles` by default. + :param bool vectorize_particles: Whether the traces should be vectorised + across `num_particles`. Default is True. + :param int max_plate_nesting: Bound on max number of nested + :func:`pyro.plate` contexts. Default is infinity. + :param bool strict_enumeration_warning: Whether to warn about possible + misuse of enumeration, i.e. that + :class:`~pyro.infer.traceenum_elbo.TraceEnum_ELBO` is used iff there + are enumerated sample sites. + + References: + + [1] `Reweighted Wake-Sleep`, + Jörg Bornschein, Yoshua Bengio + + [2] `Revisiting Reweighted Wake-Sleep for Models with Stochastic Control Flow`, + Tuan Anh Le, Adam R. Kosiorek, N. Siddharth, Yee Whye Teh, Frank Wood + """ + + def __init__( + self, + num_particles=2, + insomnia=1.0, + model_has_params=True, + num_sleep_particles=None, + vectorize_particles=True, + max_plate_nesting=float("inf"), + strict_enumeration_warning=True, + ): + # force K > 1 otherwise SNIS not possible + assert ( + num_particles > 1 + ), "Reweighted Wake Sleep needs to be run with more than one particle" + + super().__init__( + num_particles=num_particles, + max_plate_nesting=max_plate_nesting, + vectorize_particles=vectorize_particles, + strict_enumeration_warning=strict_enumeration_warning, + ) + self.insomnia = insomnia + self.model_has_params = model_has_params + self.num_sleep_particles = ( + num_particles if num_sleep_particles is None else num_sleep_particles + ) + + assert insomnia >= 0 and insomnia <= 1, "insomnia should be in [0, 1]" + + def _get_trace(self, model, guide, args, kwargs): + """ + Returns a single trace from the guide, and the model that is run against it. + """ + model_trace, guide_trace = get_importance_trace( + "flat", self.max_plate_nesting, model, guide, args, kwargs, detach=True + ) + if is_validation_enabled(): + check_if_enumerated(guide_trace) + return model_trace, guide_trace + + def _loss(self, model, guide, args, kwargs): + """ + :returns: returns model loss and guide loss + :rtype: float, float + + Computes the re-weighted wake-sleep estimators for the model (wake-theta) and the + guide (insomnia * wake-phi + (1 - insomnia) * sleep-phi). + Performs backward as appropriate on both, over the specified number of particles. + """ + + wake_theta_loss = torch.tensor(100.0) + if self.model_has_params or self.insomnia > 0.0: + # compute quantities for wake theta and wake phi + log_joints = [] + log_qs = [] + + for model_trace, guide_trace in self._get_traces( + model, guide, args, kwargs + ): + log_joint = 0.0 + log_q = 0.0 + + for _, site in model_trace.nodes.items(): + if site["type"] == "sample": + if self.vectorize_particles: + log_p_site = ( + site["log_prob"].reshape(self.num_particles, -1).sum(-1) + ) + else: + log_p_site = site["log_prob_sum"] + log_joint = log_joint + log_p_site + + for _, site in guide_trace.nodes.items(): + if site["type"] == "sample": + if self.vectorize_particles: + log_q_site = ( + site["log_prob"].reshape(self.num_particles, -1).sum(-1) + ) + else: + log_q_site = site["log_prob_sum"] + log_q = log_q + log_q_site + + log_joints.append(log_joint) + log_qs.append(log_q) + + log_joints = ( + log_joints[0] if self.vectorize_particles else torch.stack(log_joints) + ) + log_qs = log_qs[0] if self.vectorize_particles else torch.stack(log_qs) + log_weights = log_joints - log_qs.detach() + + # compute wake theta loss + log_sum_weight = torch.logsumexp(log_weights, dim=0) + wake_theta_loss = -(log_sum_weight - math.log(self.num_particles)).sum() + warn_if_nan(wake_theta_loss, "wake theta loss") + + if self.insomnia > 0: + # compute wake phi loss + normalised_weights = (log_weights - log_sum_weight).exp().detach() + wake_phi_loss = -(normalised_weights * log_qs).sum() + warn_if_nan(wake_phi_loss, "wake phi loss") + + if self.insomnia < 1: + # compute sleep phi loss + _model = pyro.poutine.uncondition(model) + _guide = guide + _log_q = 0.0 + + if self.vectorize_particles: + if self.max_plate_nesting == float("inf"): + self._guess_max_plate_nesting(_model, _guide, args, kwargs) + _model = self._vectorized_num_sleep_particles(_model) + _guide = self._vectorized_num_sleep_particles(guide) + + for _ in range(1 if self.vectorize_particles else self.num_sleep_particles): + _model_trace = poutine.trace(_model).get_trace(*args, **kwargs) + _model_trace.detach_() + _guide_trace = self._get_matched_trace( + _model_trace, _guide, args, kwargs + ) + _log_q += _guide_trace.log_prob_sum() + + sleep_phi_loss = -_log_q / self.num_sleep_particles + warn_if_nan(sleep_phi_loss, "sleep phi loss") + + # compute phi loss + phi_loss = ( + sleep_phi_loss + if self.insomnia == 0 + else ( + wake_phi_loss + if self.insomnia == 1 + else self.insomnia * wake_phi_loss + + (1.0 - self.insomnia) * sleep_phi_loss + ) + ) + + return wake_theta_loss, phi_loss + + def loss(self, model, guide, *args, **kwargs): + """ + :returns: returns model loss and guide loss + :rtype: float, float + + Computes the re-weighted wake-sleep estimators for the model (wake-theta) and the + guide (insomnia * wake-phi + (1 - insomnia) * sleep-phi). + """ + with torch.no_grad(): + wake_theta_loss, phi_loss = self._loss(model, guide, args, kwargs) + + return wake_theta_loss, phi_loss + + def loss_and_grads(self, model, guide, *args, **kwargs): + """ + :returns: returns model loss and guide loss + :rtype: float + + Computes the RWS estimators for the model (wake-theta) and the guide (wake-phi). + Performs backward as appropriate on both, using num_particle many samples/particles. + """ + wake_theta_loss, phi_loss = self._loss(model, guide, args, kwargs) + # convenience addition to ensure easier gradients without requiring `retain_graph=True` + (wake_theta_loss + phi_loss).backward() + + return wake_theta_loss.detach().item(), phi_loss.detach().item() + + def _vectorized_num_sleep_particles(self, fn): + """ + Copy of `_vectorised_num_particles` that uses `num_sleep_particles`. + """ + + def wrapped_fn(*args, **kwargs): + if self.num_sleep_particles == 1: + return fn(*args, **kwargs) + with pyro.plate( + "num_sleep_particles_vectorized", + self.num_sleep_particles, + dim=-self.max_plate_nesting, + ): + return fn(*args, **kwargs) + + return wrapped_fn + + @staticmethod + def _get_matched_trace(model_trace, guide, args, kwargs): + kwargs["observations"] = {} + for node in model_trace.stochastic_nodes + model_trace.observation_nodes: + if "was_observed" in model_trace.nodes[node]["infer"]: + model_trace.nodes[node]["is_observed"] = True + kwargs["observations"][node] = model_trace.nodes[node]["value"] + + guide_trace = poutine.trace(poutine.replay(guide, model_trace)).get_trace( + *args, **kwargs + ) + check_model_guide_match(model_trace, guide_trace) + guide_trace = prune_subsample_sites(guide_trace) + + return guide_trace diff --git a/pyro/source/pyro/infer/smcfilter.py b/pyro/source/pyro/infer/smcfilter.py new file mode 100644 index 0000000000000000000000000000000000000000..9bb301375b2235b77cf3584d36d440ff0d387821 --- /dev/null +++ b/pyro/source/pyro/infer/smcfilter.py @@ -0,0 +1,227 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import contextlib +import math + +import torch + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.infer.util import is_validation_enabled +from pyro.poutine.util import prune_subsample_sites + + +class SMCFailed(ValueError): + """ + Exception raised when :class:`SMCFilter` fails to find any hypothesis with + nonzero probability. + """ + + pass + + +class SMCFilter: + """ + :class:`SMCFilter` is the top-level interface for filtering via sequential + monte carlo. + + The model and guide should be objects with two methods: + ``.init(state, ...)`` and ``.step(state, ...)``, intended to be called + first with :meth:`init` , then with :meth:`step` repeatedly. These two + methods should have the same signature as :class:`SMCFilter` 's + :meth:`init` and :meth:`step` of this class, but with an extra first + argument ``state`` that should be used to store all tensors that depend on + sampled variables. The ``state`` will be a dict-like object, + :class:`SMCState` , with arbitrary keys and :class:`torch.Tensor` values. + Models can read and write ``state`` but guides can only read from it. + + Inference complexity is ``O(len(state) * num_time_steps)``, so to avoid + quadratic complexity in Markov models, ensure that ``state`` has fixed size. + + :param object model: probabilistic model with ``init`` and ``step`` methods + :param object guide: guide used for sampling, with ``init`` and ``step`` + methods + :param int num_particles: The number of particles used to form the + distribution. + :param int max_plate_nesting: Bound on max number of nested + :func:`pyro.plate` contexts. + :param float ess_threshold: Effective sample size threshold for deciding + when to importance resample: resampling occurs when + ``ess < ess_threshold * num_particles``. + """ + + # TODO: Add window kwarg that defaults to float("inf") + def __init__( + self, model, guide, num_particles, max_plate_nesting, *, ess_threshold=0.5 + ): + assert 0 < ess_threshold <= 1 + self.model = model + self.guide = guide + self.num_particles = num_particles + self.max_plate_nesting = max_plate_nesting + self.ess_threshold = ess_threshold + + # Equivalent to an empirical distribution, but allows a + # user-defined dynamic collection of tensors. + self.state = SMCState(self.num_particles) + + def init(self, *args, **kwargs): + """ + Perform any initialization for sequential importance resampling. + Any args or kwargs are passed to the model and guide + """ + self.particle_plate = pyro.plate( + "particles", self.num_particles, dim=-1 - self.max_plate_nesting + ) + with poutine.block(), self.particle_plate: + with self.state._lock(): + guide_trace = poutine.trace(self.guide.init).get_trace( + self.state, *args, **kwargs + ) + model = poutine.replay(self.model.init, guide_trace) + model_trace = poutine.trace(model).get_trace(self.state, *args, **kwargs) + + self._update_weights(model_trace, guide_trace) + self._maybe_importance_resample() + + def step(self, *args, **kwargs): + """ + Take a filtering step using sequential importance resampling updating the + particle weights and values while resampling if desired. + Any args or kwargs are passed to the model and guide + """ + with poutine.block(), self.particle_plate: + with self.state._lock(): + guide_trace = poutine.trace(self.guide.step).get_trace( + self.state, *args, **kwargs + ) + model = poutine.replay(self.model.step, guide_trace) + model_trace = poutine.trace(model).get_trace(self.state, *args, **kwargs) + + self._update_weights(model_trace, guide_trace) + self._maybe_importance_resample() + + def get_empirical(self): + """ + :returns: a marginal distribution over all state tensors. + :rtype: a dictionary with keys which are latent variables and values + which are :class:`~pyro.distributions.Empirical` objects. + """ + return { + key: dist.Empirical(value, self.state._log_weights) + for key, value in self.state.items() + } + + @torch.no_grad() + def _update_weights(self, model_trace, guide_trace): + # w_t <-w_{t-1}*p(y_t|z_t) * p(z_t|z_t-1)/q(z_t) + + model_trace = prune_subsample_sites(model_trace) + guide_trace = prune_subsample_sites(guide_trace) + + model_trace.compute_log_prob() + guide_trace.compute_log_prob() + + for name, guide_site in guide_trace.nodes.items(): + if guide_site["type"] == "sample": + model_site = model_trace.nodes[name] + log_p = model_site["log_prob"].reshape(self.num_particles, -1).sum(-1) + log_q = guide_site["log_prob"].reshape(self.num_particles, -1).sum(-1) + self.state._log_weights += log_p - log_q + if not (self.state._log_weights.max() > -math.inf): + raise SMCFailed( + "Failed to find feasible hypothesis after site {}".format(name) + ) + + for site in model_trace.nodes.values(): + if site["type"] == "sample" and site["is_observed"]: + log_p = site["log_prob"].reshape(self.num_particles, -1).sum(-1) + self.state._log_weights += log_p + if not (self.state._log_weights.max() > -math.inf): + raise SMCFailed( + "Failed to find feasible hypothesis after site {}".format( + site["name"] + ) + ) + + self.state._log_weights -= self.state._log_weights.max() + + def _maybe_importance_resample(self): + if not self.state: + return + # Decide whether to resample based on ESS. + logp = self.state._log_weights + logp -= logp.logsumexp(-1) + probs = logp.exp() + ess = probs.dot(probs).reciprocal() + if ess < self.ess_threshold * self.num_particles: + self._importance_resample(probs) + + def _importance_resample(self, probs): + index = _systematic_sample(probs) + self.state._resample(index) + + +def _systematic_sample(probs): + # Systematic sampling preserves diversity better than multinomial sampling + # via Categorical(probs).sample(). + batch_shape, size = probs.shape[:-1], probs.size(-1) + n = probs.cumsum(-1).mul_(size).add_(torch.rand(batch_shape + (1,))) + n = n.floor_().clamp_(min=0, max=size).long() + diff = probs.new_zeros(batch_shape + (size + 1,)) + diff.scatter_add_(-1, n, torch.ones_like(probs)) + index = diff[..., :-1].cumsum(-1).long() + return index + + +class SMCState(dict): + """ + Dictionary-like object to hold a vectorized collection of tensors to + represent all state during inference with :class:`SMCFilter`. During + inference, the :class:`SMCFilter` resample these tensors. + + Keys may have arbitrary hashable type. + Values must be :class:`torch.Tensor` s. + + :param int num_particles: + """ + + def __init__(self, num_particles): + assert isinstance(num_particles, int) and num_particles > 0 + super().__init__() + self._num_particles = num_particles + self._log_weights = torch.zeros(num_particles) + self._locked = False + + @contextlib.contextmanager + def _lock(self): + self._locked = True + try: + yield + finally: + self._locked = False + + def __setitem__(self, key, value): + if self._locked: + raise RuntimeError("Guide cannot write to SMCState") + if is_validation_enabled(): + if not isinstance(value, torch.Tensor): + raise TypeError( + "Only Tensors can be stored in an SMCState, but got {}".format( + type(value).__name__ + ) + ) + if value.dim() == 0 or value.size(0) != self._num_particles: + raise ValueError( + "Expected leading dim of size {} but got shape {}".format( + self._num_particles, value.shape + ) + ) + super().__setitem__(key, value) + + def _resample(self, index): + for key, value in self.items(): + self[key] = value[index].contiguous() + self._log_weights.fill_(0.0) diff --git a/pyro/source/pyro/infer/svgd.py b/pyro/source/pyro/infer/svgd.py new file mode 100644 index 0000000000000000000000000000000000000000..7eceb3581a38dcdf217365458f558cc999724063 --- /dev/null +++ b/pyro/source/pyro/infer/svgd.py @@ -0,0 +1,332 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math +from abc import ABCMeta, abstractmethod + +import torch +from torch.distributions import biject_to + +import pyro +from pyro import poutine +from pyro.distributions import Delta +from pyro.distributions.util import copy_docs_from +from pyro.infer.autoguide.guides import AutoContinuous +from pyro.infer.autoguide.initialization import init_to_sample +from pyro.infer.trace_elbo import Trace_ELBO + + +def vectorize(fn, num_particles, max_plate_nesting): + def _fn(*args, **kwargs): + with pyro.plate( + "num_particles_vectorized", num_particles, dim=-max_plate_nesting - 1 + ): + return fn(*args, **kwargs) + + return _fn + + +class _SVGDGuide(AutoContinuous): + """ + This modification of :class:`AutoContinuous` is used internally in the + :class:`SVGD` inference algorithm. + """ + + def __init__(self, model): + super().__init__(model, init_loc_fn=init_to_sample) + + def get_posterior(self, *args, **kwargs): + svgd_particles = pyro.param("svgd_particles", self._init_loc) + return Delta(svgd_particles, event_dim=1) + + +class SteinKernel(object, metaclass=ABCMeta): + """ + Abstract class for kernels used in the :class:`SVGD` inference algorithm. + """ + + @abstractmethod + def log_kernel_and_grad(self, particles): + """ + Compute the component kernels and their gradients. + + :param particles: a tensor with shape (N, D) + :returns: A pair (`log_kernel`, `kernel_grad`) where `log_kernel` is a (N, N, D)-shaped + tensor equal to the logarithm of the kernel and `kernel_grad` is a (N, N, D)-shaped + tensor where the entry (n, m, d) represents the derivative of `log_kernel` w.r.t. + x_{m,d}, where x_{m,d} is the d^th dimension of particle m. + """ + raise NotImplementedError + + +@copy_docs_from(SteinKernel) +class RBFSteinKernel(SteinKernel): + """ + A RBF kernel for use in the SVGD inference algorithm. The bandwidth of the kernel is chosen from the + particles using a simple heuristic as in reference [1]. + + :param float bandwidth_factor: Optional factor by which to scale the bandwidth, defaults to 1.0. + :ivar float ~.bandwidth_factor: Property that controls the factor by which to scale the bandwidth + at each iteration. + + References + + [1] "Stein Variational Gradient Descent: A General Purpose Bayesian Inference Algorithm," + Qiang Liu, Dilin Wang + """ + + def __init__(self, bandwidth_factor=None): + """ + :param float bandwidth_factor: Optional factor by which to scale the bandwidth + """ + self.bandwidth_factor = bandwidth_factor + + def _bandwidth(self, norm_sq): + """ + Compute the bandwidth along each dimension using the median pairwise squared distance between particles. + """ + num_particles = norm_sq.size(0) + index = torch.arange(num_particles) + norm_sq = norm_sq[index > index.unsqueeze(-1), ...] + median = norm_sq.median(dim=0)[0] + if self.bandwidth_factor is not None: + median = self.bandwidth_factor * median + assert median.shape == norm_sq.shape[-1:] + return median / math.log(num_particles + 1) + + @torch.no_grad() + def log_kernel_and_grad(self, particles): + delta_x = particles.unsqueeze(0) - particles.unsqueeze(1) # N N D + assert delta_x.dim() == 3 + norm_sq = delta_x.pow(2.0) # N N D + h = self._bandwidth(norm_sq) # D + log_kernel = -(norm_sq / h) # N N D + grad_term = 2.0 * delta_x / h # N N D + assert log_kernel.shape == grad_term.shape + return log_kernel, grad_term + + @property + def bandwidth_factor(self): + return self._bandwidth_factor + + @bandwidth_factor.setter + def bandwidth_factor(self, bandwidth_factor): + """ + :param float bandwidth_factor: Optional factor by which to scale the bandwidth + """ + if bandwidth_factor is not None: + assert bandwidth_factor > 0.0, "bandwidth_factor must be positive." + self._bandwidth_factor = bandwidth_factor + + +@copy_docs_from(SteinKernel) +class IMQSteinKernel(SteinKernel): + r""" + An IMQ (inverse multi-quadratic) kernel for use in the SVGD inference algorithm [1]. The bandwidth of the kernel + is chosen from the particles using a simple heuristic as in reference [2]. The kernel takes the form + + :math:`K(x, y) = (\alpha + ||x-y||^2/h)^{\beta}` + + where :math:`\alpha` and :math:`\beta` are user-specified parameters and :math:`h` is the bandwidth. + + :param float alpha: Kernel hyperparameter, defaults to 0.5. + :param float beta: Kernel hyperparameter, defaults to -0.5. + :param float bandwidth_factor: Optional factor by which to scale the bandwidth, defaults to 1.0. + :ivar float ~.bandwidth_factor: Property that controls the factor by which to scale the bandwidth + at each iteration. + + References + + [1] "Stein Points," Wilson Ye Chen, Lester Mackey, Jackson Gorham, Francois-Xavier Briol, Chris. J. Oates. + [2] "Stein Variational Gradient Descent: A General Purpose Bayesian Inference Algorithm," Qiang Liu, Dilin Wang + """ + + def __init__(self, alpha=0.5, beta=-0.5, bandwidth_factor=None): + """ + :param float alpha: Kernel hyperparameter, defaults to 0.5. + :param float beta: Kernel hyperparameter, defaults to -0.5. + :param float bandwidth_factor: Optional factor by which to scale the bandwidth + """ + assert alpha > 0.0, "alpha must be positive." + assert beta < 0.0, "beta must be negative." + self.alpha = alpha + self.beta = beta + self.bandwidth_factor = bandwidth_factor + + def _bandwidth(self, norm_sq): + """ + Compute the bandwidth along each dimension using the median pairwise squared distance between particles. + """ + num_particles = norm_sq.size(0) + index = torch.arange(num_particles) + norm_sq = norm_sq[index > index.unsqueeze(-1), ...] + median = norm_sq.median(dim=0)[0] + if self.bandwidth_factor is not None: + median = self.bandwidth_factor * median + assert median.shape == norm_sq.shape[-1:] + return median / math.log(num_particles + 1) + + @torch.no_grad() + def log_kernel_and_grad(self, particles): + delta_x = particles.unsqueeze(0) - particles.unsqueeze(1) # N N D + assert delta_x.dim() == 3 + norm_sq = delta_x.pow(2.0) # N N D + h = self._bandwidth(norm_sq) # D + base_term = self.alpha + norm_sq / h + log_kernel = self.beta * torch.log(base_term) # N N D + grad_term = (-2.0 * self.beta) * delta_x / h # N N D + grad_term = grad_term / base_term + assert log_kernel.shape == grad_term.shape + return log_kernel, grad_term + + @property + def bandwidth_factor(self): + return self._bandwidth_factor + + @bandwidth_factor.setter + def bandwidth_factor(self, bandwidth_factor): + """ + :param float bandwidth_factor: Optional factor by which to scale the bandwidth + """ + if bandwidth_factor is not None: + assert bandwidth_factor > 0.0, "bandwidth_factor must be positive." + self._bandwidth_factor = bandwidth_factor + + +class SVGD: + """ + A basic implementation of Stein Variational Gradient Descent as described in reference [1]. + + :param model: The model (callable containing Pyro primitives). Model must be fully vectorized + and may only contain continuous latent variables. + :param kernel: a SVGD compatible kernel like :class:`RBFSteinKernel`. + :param optim: A wrapper for a PyTorch optimizer. + :type optim: pyro.optim.PyroOptim + :param int num_particles: The number of particles used in SVGD. + :param int max_plate_nesting: The max number of nested :func:`pyro.plate` contexts in the model. + :param str mode: Whether to use a Kernelized Stein Discrepancy that makes use of `multivariate` + test functions (as in [1]) or `univariate` test functions (as in [2]). Defaults to `univariate`. + + Example usage: + + .. code-block:: python + + from pyro.infer import SVGD, RBFSteinKernel + from pyro.optim import Adam + + kernel = RBFSteinKernel() + adam = Adam({"lr": 0.1}) + svgd = SVGD(model, kernel, adam, num_particles=50, max_plate_nesting=0) + + for step in range(500): + svgd.step(model_arg1, model_arg2) + + final_particles = svgd.get_named_particles() + + References + + [1] "Stein Variational Gradient Descent: A General Purpose Bayesian Inference Algorithm," + Qiang Liu, Dilin Wang + [2] "Kernelized Complete Conditional Stein Discrepancy," + Raghav Singhal, Saad Lahlou, Rajesh Ranganath + """ + + def __init__( + self, model, kernel, optim, num_particles, max_plate_nesting, mode="univariate" + ): + assert callable(model) + assert isinstance(kernel, SteinKernel), "Must provide a valid SteinKernel" + assert isinstance( + optim, pyro.optim.PyroOptim + ), "Must provide a valid Pyro optimizer" + assert num_particles > 1, "Must use at least two particles" + assert max_plate_nesting >= 0 + assert mode in [ + "univariate", + "multivariate", + ], "mode must be one of (univariate, multivariate)" + + self.model = vectorize(model, num_particles, max_plate_nesting) + self.kernel = kernel + self.optim = optim + self.num_particles = num_particles + self.max_plate_nesting = max_plate_nesting + self.mode = mode + + self.loss = Trace_ELBO().differentiable_loss + self.guide = _SVGDGuide(self.model) + + def get_named_particles(self): + """ + Create a dictionary mapping name to vectorized value, of the form ``{name: tensor}``. + The leading dimension of each tensor corresponds to particles, i.e. this creates a struct of arrays. + """ + return { + site["name"]: biject_to(site["fn"].support)(unconstrained_value) + for site, unconstrained_value in self.guide._unpack_latent( + pyro.param("svgd_particles") + ) + } + + @torch.no_grad() + def step(self, *args, **kwargs): + """ + Computes the SVGD gradient, passing args and kwargs to the model, + and takes a gradient step. + + :return dict: A dictionary of the form {name: float}, where each float + is a mean squared gradient. This can be used to monitor the convergence of SVGD. + """ + # compute gradients of log model joint + with torch.enable_grad(), poutine.trace(param_only=True) as param_capture: + loss = self.loss(self.model, self.guide, *args, **kwargs) + loss.backward() + + # get particles used in the _SVGDGuide and reshape to have num_particles leading dimension + particles = pyro.param("svgd_particles").unconstrained() + reshaped_particles = particles.reshape(self.num_particles, -1) + reshaped_particles_grad = particles.grad.reshape(self.num_particles, -1) + + # compute kernel ingredients + log_kernel, kernel_grad = self.kernel.log_kernel_and_grad(reshaped_particles) + + if self.mode == "multivariate": + kernel = log_kernel.sum(-1).exp() + assert kernel.shape == (self.num_particles, self.num_particles) + attractive_grad = torch.mm(kernel, reshaped_particles_grad) + repulsive_grad = torch.einsum("nm,nm...->n...", kernel, kernel_grad) + elif self.mode == "univariate": + kernel = log_kernel.exp() + assert kernel.shape == ( + self.num_particles, + self.num_particles, + reshaped_particles.size(-1), + ) + attractive_grad = torch.einsum( + "nmd,md->nd", kernel, reshaped_particles_grad + ) + repulsive_grad = torch.einsum("nmd,nmd->nd", kernel, kernel_grad) + + # combine the attractive and repulsive terms in the SVGD gradient + assert attractive_grad.shape == repulsive_grad.shape + particles.grad = (attractive_grad + repulsive_grad).reshape( + particles.shape + ) / self.num_particles + + # compute per-parameter mean squared gradients + squared_gradients = { + site["name"]: value.mean().item() + for site, value in self.guide._unpack_latent(particles.grad.pow(2.0)) + } + + # torch.optim objects gets instantiated for any params that haven't been seen yet + params = set( + site["value"].unconstrained() for site in param_capture.trace.nodes.values() + ) + self.optim(params) + + # zero gradients + pyro.infer.util.zero_grads(params) + + # return per-parameter mean squared gradients to user + return squared_gradients diff --git a/pyro/source/pyro/infer/svi.py b/pyro/source/pyro/infer/svi.py new file mode 100644 index 0000000000000000000000000000000000000000..067b0ca852cf4d8793b85d445e36ca7fd8bb71ef --- /dev/null +++ b/pyro/source/pyro/infer/svi.py @@ -0,0 +1,162 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import warnings + +import torch + +import pyro +import pyro.optim +import pyro.poutine as poutine +from pyro.infer.abstract_infer import TracePosterior +from pyro.infer.elbo import ELBO +from pyro.infer.util import torch_item + + +class SVI(TracePosterior): + """ + :param model: the model (callable containing Pyro primitives) + :param guide: the guide (callable containing Pyro primitives) + :param optim: a wrapper a for a PyTorch optimizer + :type optim: ~pyro.optim.optim.PyroOptim + :param loss: an instance of a subclass of :class:`~pyro.infer.elbo.ELBO`. + Pyro provides three built-in losses: + :class:`~pyro.infer.trace_elbo.Trace_ELBO`, + :class:`~pyro.infer.tracegraph_elbo.TraceGraph_ELBO`, and + :class:`~pyro.infer.traceenum_elbo.TraceEnum_ELBO`. + See the :class:`~pyro.infer.elbo.ELBO` docs to learn how to implement + a custom loss. + :type loss: pyro.infer.elbo.ELBO + :param num_samples: (DEPRECATED) the number of samples for Monte Carlo posterior approximation + :param num_steps: (DEPRECATED) the number of optimization steps to take in ``run()`` + + A unified interface for stochastic variational inference in Pyro. The most + commonly used loss is ``loss=Trace_ELBO()``. See the tutorial + `SVI Part I `_ for a discussion. + """ + + def __init__( + self, + model, + guide, + optim, + loss, + loss_and_grads=None, + num_samples=0, + num_steps=0, + **kwargs + ): + if num_steps: + warnings.warn( + "The `num_steps` argument to SVI is deprecated and will be removed in " + "a future release. Use `SVI.step` directly to control the " + "number of iterations.", + FutureWarning, + ) + if num_samples: + warnings.warn( + "The `num_samples` argument to SVI is deprecated and will be removed in " + "a future release. Use `pyro.infer.Predictive` class to draw " + "samples from the posterior.", + FutureWarning, + ) + + self.model = model + self.guide = guide + self.optim = optim + self.num_steps = num_steps + self.num_samples = num_samples + super().__init__(**kwargs) + + if not isinstance(optim, pyro.optim.PyroOptim): + raise ValueError( + "Optimizer should be an instance of pyro.optim.PyroOptim class." + ) + + if isinstance(loss, ELBO): + self.loss = loss.loss + self.loss_and_grads = loss.loss_and_grads + else: + if loss_and_grads is None: + + def _loss_and_grads(*args, **kwargs): + loss_val = loss(*args, **kwargs) + if getattr(loss_val, "requires_grad", False): + loss_val.backward(retain_graph=True) + return loss_val + + loss_and_grads = _loss_and_grads + self.loss = loss + self.loss_and_grads = loss_and_grads + + def run(self, *args, **kwargs): + """ + .. warning:: + This method is deprecated, and will be removed in a future release. + For inference, use :meth:`step` directly, and for predictions, + use the :class:`~pyro.infer.predictive.Predictive` class. + """ + warnings.warn( + "The `SVI.run` method is deprecated and will be removed in a " + "future release. For inference, use `SVI.step` directly, " + "and for predictions, use the `pyro.infer.Predictive` class.", + FutureWarning, + ) + if self.num_steps > 0: + with poutine.block(): + for i in range(self.num_steps): + self.step(*args, **kwargs) + return super().run(*args, **kwargs) + + def _traces(self, *args, **kwargs): + for i in range(self.num_samples): + guide_trace = poutine.trace(self.guide).get_trace(*args, **kwargs) + model_trace = poutine.trace( + poutine.replay(self.model, trace=guide_trace) + ).get_trace(*args, **kwargs) + yield model_trace, 1.0 + + def evaluate_loss(self, *args, **kwargs): + """ + :returns: estimate of the loss + :rtype: float + + Evaluate the loss function. Any args or kwargs are passed to the model and guide. + """ + with torch.no_grad(): + loss = self.loss(self.model, self.guide, *args, **kwargs) + if isinstance(loss, tuple): + # Support losses that return a tuple, e.g. ReweightedWakeSleep. + return type(loss)(map(torch_item, loss)) + else: + return torch_item(loss) + + def step(self, *args, **kwargs): + """ + :returns: estimate of the loss + :rtype: float + + Take a gradient step on the loss function (and any auxiliary loss functions + generated under the hood by `loss_and_grads`). + Any args or kwargs are passed to the model and guide + """ + # get loss and compute gradients + with poutine.trace(param_only=True) as param_capture: + loss = self.loss_and_grads(self.model, self.guide, *args, **kwargs) + + params = set( + site["value"].unconstrained() for site in param_capture.trace.nodes.values() + ) + + # actually perform gradient steps + # torch.optim objects gets instantiated for any params that haven't been seen yet + self.optim(params) + + # zero gradients + pyro.infer.util.zero_grads(params) + + if isinstance(loss, tuple): + # Support losses that return a tuple, e.g. ReweightedWakeSleep. + return type(loss)(map(torch_item, loss)) + else: + return torch_item(loss) diff --git a/pyro/source/pyro/infer/trace_elbo.py b/pyro/source/pyro/infer/trace_elbo.py new file mode 100644 index 0000000000000000000000000000000000000000..93041c92cc4b049e4ad0b6d8c633dcca3b8c9f4b --- /dev/null +++ b/pyro/source/pyro/infer/trace_elbo.py @@ -0,0 +1,257 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import weakref + +import pyro +import pyro.ops.jit +from pyro.distributions.util import is_identically_zero +from pyro.infer.elbo import ELBO +from pyro.infer.enum import get_importance_trace +from pyro.infer.util import ( + MultiFrameTensor, + get_plate_stacks, + is_validation_enabled, + torch_item, +) +from pyro.util import check_if_enumerated, warn_if_nan + + +def _compute_log_r(model_trace, guide_trace): + log_r = MultiFrameTensor() + stacks = get_plate_stacks(model_trace) + for name, model_site in model_trace.nodes.items(): + if model_site["type"] == "sample": + log_r_term = model_site["log_prob"] + if not model_site["is_observed"]: + log_r_term = log_r_term - guide_trace.nodes[name]["log_prob"] + log_r.add((stacks[name], log_r_term.detach())) + return log_r + + +class Trace_ELBO(ELBO): + """ + A trace implementation of ELBO-based SVI. The estimator is constructed + along the lines of references [1] and [2]. There are no restrictions on the + dependency structure of the model or the guide. The gradient estimator includes + partial Rao-Blackwellization for reducing the variance of the estimator when + non-reparameterizable random variables are present. The Rao-Blackwellization is + partial in that it only uses conditional independence information that is marked + by :class:`~pyro.plate` contexts. For more fine-grained Rao-Blackwellization, + see :class:`~pyro.infer.tracegraph_elbo.TraceGraph_ELBO`. + + References + + [1] Automated Variational Inference in Probabilistic Programming, + David Wingate, Theo Weber + + [2] Black Box Variational Inference, + Rajesh Ranganath, Sean Gerrish, David M. Blei + """ + + def _get_trace(self, model, guide, args, kwargs): + """ + Returns a single trace from the guide, and the model that is run + against it. + """ + model_trace, guide_trace = get_importance_trace( + "flat", self.max_plate_nesting, model, guide, args, kwargs + ) + if is_validation_enabled(): + check_if_enumerated(guide_trace) + return model_trace, guide_trace + + def loss(self, model, guide, *args, **kwargs): + """ + :returns: returns an estimate of the ELBO + :rtype: float + + Evaluates the ELBO with an estimator that uses num_particles many samples/particles. + """ + elbo = 0.0 + for model_trace, guide_trace in self._get_traces(model, guide, args, kwargs): + elbo_particle = torch_item(model_trace.log_prob_sum()) - torch_item( + guide_trace.log_prob_sum() + ) + elbo += elbo_particle / self.num_particles + + loss = -elbo + warn_if_nan(loss, "loss") + return loss + + def _differentiable_loss_particle(self, model_trace, guide_trace): + elbo_particle = 0 + surrogate_elbo_particle = 0 + log_r = None + + # compute elbo and surrogate elbo + for name, site in model_trace.nodes.items(): + if site["type"] == "sample": + elbo_particle = elbo_particle + torch_item(site["log_prob_sum"]) + surrogate_elbo_particle = surrogate_elbo_particle + site["log_prob_sum"] + + for name, site in guide_trace.nodes.items(): + if site["type"] == "sample": + log_prob, score_function_term, entropy_term = site["score_parts"] + + elbo_particle = elbo_particle - torch_item(site["log_prob_sum"]) + + if not is_identically_zero(entropy_term): + surrogate_elbo_particle = ( + surrogate_elbo_particle - entropy_term.sum() + ) + + if not is_identically_zero(score_function_term): + if log_r is None: + log_r = _compute_log_r(model_trace, guide_trace) + site = log_r.sum_to(site["cond_indep_stack"]) + surrogate_elbo_particle = ( + surrogate_elbo_particle + (site * score_function_term).sum() + ) + + return -elbo_particle, -surrogate_elbo_particle + + def differentiable_loss(self, model, guide, *args, **kwargs): + """ + Computes the surrogate loss that can be differentiated with autograd + to produce gradient estimates for the model and guide parameters + """ + loss = 0.0 + surrogate_loss = 0.0 + for model_trace, guide_trace in self._get_traces(model, guide, args, kwargs): + loss_particle, surrogate_loss_particle = self._differentiable_loss_particle( + model_trace, guide_trace + ) + surrogate_loss += surrogate_loss_particle / self.num_particles + loss += loss_particle / self.num_particles + warn_if_nan(surrogate_loss, "loss") + return loss + (surrogate_loss - torch_item(surrogate_loss)) + + def loss_and_grads(self, model, guide, *args, **kwargs): + """ + :returns: returns an estimate of the ELBO + :rtype: float + + Computes the ELBO as well as the surrogate ELBO that is used to form the gradient estimator. + Performs backward on the latter. Num_particle many samples are used to form the estimators. + """ + loss = 0.0 + # grab a trace from the generator + for model_trace, guide_trace in self._get_traces(model, guide, args, kwargs): + loss_particle, surrogate_loss_particle = self._differentiable_loss_particle( + model_trace, guide_trace + ) + loss += loss_particle / self.num_particles + + # collect parameters to train from model and guide + trainable_params = any( + site["type"] == "param" + for trace in (model_trace, guide_trace) + for site in trace.nodes.values() + ) + + if trainable_params and getattr( + surrogate_loss_particle, "requires_grad", False + ): + surrogate_loss_particle = surrogate_loss_particle / self.num_particles + surrogate_loss_particle.backward(retain_graph=self.retain_graph) + warn_if_nan(loss, "loss") + return loss + + +class JitTrace_ELBO(Trace_ELBO): + """ + Like :class:`Trace_ELBO` but uses :func:`pyro.ops.jit.compile` to compile + :meth:`loss_and_grads`. + + This works only for a limited set of models: + + - Models must have static structure. + - Models must not depend on any global data (except the param store). + - All model inputs that are tensors must be passed in via ``*args``. + - All model inputs that are *not* tensors must be passed in via + ``**kwargs``, and compilation will be triggered once per unique + ``**kwargs``. + """ + + def loss_and_surrogate_loss(self, model, guide, *args, **kwargs): + kwargs["_pyro_model_id"] = id(model) + kwargs["_pyro_guide_id"] = id(guide) + if getattr(self, "_loss_and_surrogate_loss", None) is None: + # build a closure for loss_and_surrogate_loss + weakself = weakref.ref(self) + + @pyro.ops.jit.trace( + ignore_warnings=self.ignore_jit_warnings, jit_options=self.jit_options + ) + def loss_and_surrogate_loss(*args, **kwargs): + kwargs.pop("_pyro_model_id") + kwargs.pop("_pyro_guide_id") + self = weakself() + loss = 0.0 + surrogate_loss = 0.0 + for model_trace, guide_trace in self._get_traces( + model, guide, args, kwargs + ): + elbo_particle = 0 + surrogate_elbo_particle = 0 + log_r = None + + # compute elbo and surrogate elbo + for name, site in model_trace.nodes.items(): + if site["type"] == "sample": + elbo_particle = elbo_particle + site["log_prob_sum"] + surrogate_elbo_particle = ( + surrogate_elbo_particle + site["log_prob_sum"] + ) + + for name, site in guide_trace.nodes.items(): + if site["type"] == "sample": + log_prob, score_function_term, entropy_term = site[ + "score_parts" + ] + + elbo_particle = elbo_particle - site["log_prob_sum"] + + if not is_identically_zero(entropy_term): + surrogate_elbo_particle = ( + surrogate_elbo_particle - entropy_term.sum() + ) + + if not is_identically_zero(score_function_term): + if log_r is None: + log_r = _compute_log_r(model_trace, guide_trace) + site = log_r.sum_to(site["cond_indep_stack"]) + surrogate_elbo_particle = ( + surrogate_elbo_particle + + (site * score_function_term).sum() + ) + + loss = loss - elbo_particle / self.num_particles + surrogate_loss = ( + surrogate_loss - surrogate_elbo_particle / self.num_particles + ) + + return loss, surrogate_loss + + self._loss_and_surrogate_loss = loss_and_surrogate_loss + + return self._loss_and_surrogate_loss(*args, **kwargs) + + def differentiable_loss(self, model, guide, *args, **kwargs): + loss, surrogate_loss = self.loss_and_surrogate_loss( + model, guide, *args, **kwargs + ) + + warn_if_nan(loss, "loss") + return loss + (surrogate_loss - surrogate_loss.detach()) + + def loss_and_grads(self, model, guide, *args, **kwargs): + loss, surrogate_loss = self.loss_and_surrogate_loss( + model, guide, *args, **kwargs + ) + surrogate_loss.backward() + loss = loss.item() + + warn_if_nan(loss, "loss") + return loss diff --git a/pyro/source/pyro/infer/trace_mean_field_elbo.py b/pyro/source/pyro/infer/trace_mean_field_elbo.py new file mode 100644 index 0000000000000000000000000000000000000000..5d1f38c89f40db7c31de99bdcd8c018aa8f83c4a --- /dev/null +++ b/pyro/source/pyro/infer/trace_mean_field_elbo.py @@ -0,0 +1,208 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import warnings +import weakref + +import torch +from torch.distributions import kl_divergence + +import pyro.ops.jit +from pyro.distributions.util import scale_and_mask +from pyro.infer.trace_elbo import Trace_ELBO +from pyro.infer.util import ( + check_fully_reparametrized, + is_validation_enabled, + torch_item, +) +from pyro.util import warn_if_nan + + +def _check_mean_field_requirement(model_trace, guide_trace): + """ + Checks that the guide and model sample sites are ordered identically. + This is sufficient but not necessary for correctness. + """ + model_sites = [ + name + for name, site in model_trace.nodes.items() + if site["type"] == "sample" and name in guide_trace.nodes + ] + guide_sites = [ + name + for name, site in guide_trace.nodes.items() + if site["type"] == "sample" and name in model_trace.nodes + ] + assert set(model_sites) == set(guide_sites) + if model_sites != guide_sites: + warnings.warn( + "Failed to verify mean field restriction on the guide. " + "To eliminate this warning, ensure model and guide sites " + "occur in the same order.\n" + + "Model sites:\n " + + "\n ".join(model_sites) + + "Guide sites:\n " + + "\n ".join(guide_sites) + ) + + +class TraceMeanField_ELBO(Trace_ELBO): + """ + A trace implementation of ELBO-based SVI. This is currently the only + ELBO estimator in Pyro that uses analytic KL divergences when those + are available. + + In contrast to, e.g., + :class:`~pyro.infer.tracegraph_elbo.TraceGraph_ELBO` and + :class:`~pyro.infer.tracegraph_elbo.Trace_ELBO` this estimator places + restrictions on the dependency structure of the model and guide. + In particular it assumes that the guide has a mean-field structure, + i.e. that it factorizes across the different latent variables present + in the guide. It also assumes that all of the latent variables in the + guide are reparameterized. This latter condition is satisfied for, e.g., + the Normal distribution but is not satisfied for, e.g., the Categorical + distribution. + + .. warning:: This estimator may give incorrect results if the mean-field + condition is not satisfied. + + Note for advanced users: + + The mean field condition is a sufficient but not necessary condition for + this estimator to be correct. The precise condition is that for every + latent variable `z` in the guide, its parents in the model must not include + any latent variables that are descendants of `z` in the guide. Here + 'parents in the model' and 'descendants in the guide' is with respect + to the corresponding (statistical) dependency structure. For example, this + condition is always satisfied if the model and guide have identical + dependency structures. + """ + + def _get_trace(self, model, guide, args, kwargs): + model_trace, guide_trace = super()._get_trace(model, guide, args, kwargs) + if is_validation_enabled(): + _check_mean_field_requirement(model_trace, guide_trace) + return model_trace, guide_trace + + def loss(self, model, guide, *args, **kwargs): + """ + :returns: returns an estimate of the ELBO + :rtype: float + + Evaluates the ELBO with an estimator that uses num_particles many samples/particles. + """ + loss = 0.0 + for model_trace, guide_trace in self._get_traces(model, guide, args, kwargs): + loss_particle, _ = self._differentiable_loss_particle( + model_trace, guide_trace + ) + loss = loss + loss_particle / self.num_particles + + warn_if_nan(loss, "loss") + return loss + + def _differentiable_loss_particle(self, model_trace, guide_trace): + elbo_particle = 0 + + for name, model_site in model_trace.nodes.items(): + if model_site["type"] == "sample": + if model_site["is_observed"]: + elbo_particle = elbo_particle + model_site["log_prob_sum"] + else: + guide_site = guide_trace.nodes[name] + if is_validation_enabled(): + check_fully_reparametrized(guide_site) + + # use kl divergence if available, else fall back on sampling + try: + kl_qp = kl_divergence(guide_site["fn"], model_site["fn"]) + kl_qp = scale_and_mask( + kl_qp, scale=guide_site["scale"], mask=guide_site["mask"] + ) + if torch.is_tensor(kl_qp): + assert ( + torch._C._get_tracing_state() + or kl_qp.shape == guide_site["fn"].batch_shape + ) + kl_qp_sum = kl_qp.sum() + else: + kl_qp_sum = ( + kl_qp * torch.Size(guide_site["fn"].batch_shape).numel() + ) + elbo_particle = elbo_particle - kl_qp_sum + except NotImplementedError: + entropy_term = guide_site["score_parts"].entropy_term + elbo_particle = ( + elbo_particle + + model_site["log_prob_sum"] + - entropy_term.sum() + ) + + # handle auxiliary sites in the guide + for name, guide_site in guide_trace.nodes.items(): + if guide_site["type"] == "sample" and name not in model_trace.nodes: + assert guide_site["infer"].get("is_auxiliary") + if is_validation_enabled(): + check_fully_reparametrized(guide_site) + entropy_term = guide_site["score_parts"].entropy_term + elbo_particle = elbo_particle - entropy_term.sum() + + loss = -( + elbo_particle.detach() + if torch._C._get_tracing_state() + else torch_item(elbo_particle) + ) + surrogate_loss = -elbo_particle + return loss, surrogate_loss + + +class JitTraceMeanField_ELBO(TraceMeanField_ELBO): + """ + Like :class:`TraceMeanField_ELBO` but uses :func:`pyro.ops.jit.trace` to + compile :meth:`loss_and_grads`. + + This works only for a limited set of models: + + - Models must have static structure. + - Models must not depend on any global data (except the param store). + - All model inputs that are tensors must be passed in via ``*args``. + - All model inputs that are *not* tensors must be passed in via + ``**kwargs``, and compilation will be triggered once per unique + ``**kwargs``. + """ + + def differentiable_loss(self, model, guide, *args, **kwargs): + kwargs["_pyro_model_id"] = id(model) + kwargs["_pyro_guide_id"] = id(guide) + if getattr(self, "_loss_and_surrogate_loss", None) is None: + # build a closure for loss_and_surrogate_loss + weakself = weakref.ref(self) + + @pyro.ops.jit.trace( + ignore_warnings=self.ignore_jit_warnings, jit_options=self.jit_options + ) + def differentiable_loss(*args, **kwargs): + kwargs.pop("_pyro_model_id") + kwargs.pop("_pyro_guide_id") + self = weakself() + loss = 0.0 + for model_trace, guide_trace in self._get_traces( + model, guide, args, kwargs + ): + _, loss_particle = self._differentiable_loss_particle( + model_trace, guide_trace + ) + loss = loss + loss_particle / self.num_particles + return loss + + self._differentiable_loss = differentiable_loss + + return self._differentiable_loss(*args, **kwargs) + + def loss_and_grads(self, model, guide, *args, **kwargs): + loss = self.differentiable_loss(model, guide, *args, **kwargs) + loss.backward() + loss = torch_item(loss) + + warn_if_nan(loss, "loss") + return loss diff --git a/pyro/source/pyro/infer/trace_mmd.py b/pyro/source/pyro/infer/trace_mmd.py new file mode 100644 index 0000000000000000000000000000000000000000..42b22297bcfa6152a81341c847470e3cb3525e3d --- /dev/null +++ b/pyro/source/pyro/infer/trace_mmd.py @@ -0,0 +1,272 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from collections import defaultdict + +import torch + +import pyro +import pyro.ops.jit +from pyro import poutine +from pyro.infer.elbo import ELBO +from pyro.infer.enum import get_importance_trace +from pyro.infer.util import is_validation_enabled, torch_item +from pyro.util import check_if_enumerated, warn_if_nan + + +def _compute_mmd(X, Z, kernel): + mmd = torch.mean(kernel(X)) + torch.mean(kernel(Z)) - torch.mean(kernel(X, Z)) * 2 + return mmd + + +class Trace_MMD(ELBO): + """ + An objective similar to ELBO, but with Maximum Mean Discrepancy (MMD) + between marginal variational posterior and prior distributions + instead of KL-divergence between variational posterior and prior distributions + as in vanilla ELBO. + The simplest example is MMD-VAE model [1]. The corresponding loss function is given as follows: + + :math: `L(\\theta, \\phi) = -E_{p_{data}(x)} E_{q(z | x; \\phi)} \\log p(x | z; \\theta) + + MMD(q(z; \\phi) \\| p(z))`, + + where z is a latent code. MMD between two distributions is defined as follows: + + :math: `MMD(q(z) \\| p(z)) = E_{p(z), p(z')} k(z,z') + E_{q(z), q(z')} k(z,z') - 2 E_{p(z), q(z')} k(z,z')`, + + where k is a kernel. + + DISCLAIMER: this implementation treats only the particle dimension as batch dimension when computing MMD. + All other dimensions are treated as event dimensions. + For this reason, one needs large `num_particles` in order to have reasonable variance of MMD Monte-Carlo estimate. + As a consequence, it is recommended to set `vectorize_particles=True` (default). + The general case will be implemented in future versions. + + :param kernel: A kernel used to compute MMD. + An instance of :class: `pyro.contrib.gp.kernels.kernel.Kernel`, + or a dict that maps latent variable names to instances of :class: `pyro.contrib.gp.kernels.kernel.Kernel`. + In the latter case, different kernels are used for different latent variables. + + :param mmd_scale: A scaling factor for MMD terms. + Float, or a dict that maps latent variable names to floats. + In the latter case, different scaling factors are used for different latent variables. + + References + + [1] `A Tutorial on Information Maximizing Variational Autoencoders (InfoVAE)` + Shengjia Zhao + https://ermongroup.github.io/blog/a-tutorial-on-mmd-variational-autoencoders/ + + [2] `InfoVAE: Balancing Learning and Inference in Variational Autoencoders` + Shengjia Zhao, Jiaming Song, Stefano Ermon + """ + + def __init__( + self, + kernel, + mmd_scale=1, + num_particles=10, + max_plate_nesting=float("inf"), + max_iarange_nesting=None, # DEPRECATED + vectorize_particles=True, + strict_enumeration_warning=True, + ignore_jit_warnings=False, + retain_graph=None, + ): + super().__init__( + num_particles, + max_plate_nesting, + max_iarange_nesting, + vectorize_particles, + strict_enumeration_warning, + ignore_jit_warnings, + retain_graph, + ) + self._kernel = None + self._mmd_scale = None + self.kernel = kernel + self.mmd_scale = mmd_scale + + @property + def kernel(self): + return self._kernel + + @kernel.setter + def kernel(self, kernel): + if isinstance(kernel, dict): + # fix kernel's parameters + for k in kernel.values(): + if isinstance(k, pyro.contrib.gp.kernels.kernel.Kernel): + k.requires_grad_(False) + else: + raise TypeError( + "`kernel` values should be instances of `pyro.contrib.gp.kernels.kernel.Kernel`" + ) + self._kernel = kernel + elif isinstance(kernel, pyro.contrib.gp.kernels.kernel.Kernel): + kernel.requires_grad_(False) + self._kernel = defaultdict(lambda: kernel) + else: + raise TypeError( + "`kernel` should be an instance of `pyro.contrib.gp.kernels.kernel.Kernel`" + ) + + @property + def mmd_scale(self): + return self._mmd_scale + + @mmd_scale.setter + def mmd_scale(self, mmd_scale): + if isinstance(mmd_scale, dict): + self._mmd_scale = mmd_scale + elif isinstance(mmd_scale, (int, float)): + self._mmd_scale = defaultdict(lambda: float(mmd_scale)) + else: + raise TypeError("`mmd_scale` should be either float, or a dict of floats") + + def _get_trace(self, model, guide, args, kwargs): + """ + Returns a single trace from the guide, and the model that is run + against it. + """ + model_trace, guide_trace = get_importance_trace( + "flat", self.max_plate_nesting, model, guide, args, kwargs + ) + if is_validation_enabled(): + check_if_enumerated(guide_trace) + return model_trace, guide_trace + + def _differentiable_loss_parts(self, model, guide, args, kwargs): + all_model_samples = defaultdict(list) + all_guide_samples = defaultdict(list) + + loglikelihood = 0.0 + penalty = 0.0 + for model_trace, guide_trace in self._get_traces(model, guide, args, kwargs): + if self.vectorize_particles: + model_trace_independent = poutine.trace( + self._vectorized_num_particles(model) + ).get_trace(*args, **kwargs) + else: + model_trace_independent = poutine.trace( + model, graph_type="flat" + ).get_trace(*args, **kwargs) + + loglikelihood_particle = 0.0 + for name, model_site in model_trace.nodes.items(): + if model_site["type"] == "sample": + if name in guide_trace and not model_site["is_observed"]: + guide_site = guide_trace.nodes[name] + independent_model_site = model_trace_independent.nodes[name] + if not independent_model_site["fn"].has_rsample: + raise ValueError( + "Model site {} is not reparameterizable".format(name) + ) + if not guide_site["fn"].has_rsample: + raise ValueError( + "Guide site {} is not reparameterizable".format(name) + ) + + particle_dim = ( + -self.max_plate_nesting + - independent_model_site["fn"].event_dim + ) + + model_samples = independent_model_site["value"] + guide_samples = guide_site["value"] + + if self.vectorize_particles: + model_samples = model_samples.transpose( + -model_samples.dim(), particle_dim + ) + model_samples = model_samples.view( + model_samples.shape[0], -1 + ) + + guide_samples = guide_samples.transpose( + -guide_samples.dim(), particle_dim + ) + guide_samples = guide_samples.view( + guide_samples.shape[0], -1 + ) + else: + model_samples = model_samples.view(1, -1) + guide_samples = guide_samples.view(1, -1) + + all_model_samples[name].append(model_samples) + all_guide_samples[name].append(guide_samples) + else: + loglikelihood_particle = ( + loglikelihood_particle + model_site["log_prob_sum"] + ) + + loglikelihood = loglikelihood_particle / self.num_particles + loglikelihood + + for name in all_model_samples.keys(): + all_model_samples[name] = torch.cat(all_model_samples[name]) + all_guide_samples[name] = torch.cat(all_guide_samples[name]) + divergence = _compute_mmd( + all_model_samples[name], + all_guide_samples[name], + kernel=self._kernel[name], + ) + penalty = self._mmd_scale[name] * divergence + penalty + + warn_if_nan(loglikelihood, "loglikelihood") + warn_if_nan(penalty, "penalty") + return loglikelihood, penalty + + def differentiable_loss(self, model, guide, *args, **kwargs): + """ + Computes the MMD-VAE-type loss [1]. Calling backward on the latter + leads to valid gradient estimates as long as latent variables + in both the guide and the model are reparameterizable. + + References + + [1] `A Tutorial on Information Maximizing Variational Autoencoders (InfoVAE)` + Shengjia Zhao + https://ermongroup.github.io/blog/a-tutorial-on-mmd-variational-autoencoders/ + """ + loglikelihood, penalty = self._differentiable_loss_parts( + model, guide, args, kwargs + ) + loss = -loglikelihood + penalty + warn_if_nan(loss, "loss") + return loss + + def loss(self, model, guide, *args, **kwargs): + """ + :returns: returns an estimate of the MMD-VAE-type loss [1] + :rtype: float + + Computes the MMD-VAE-type loss with an estimator that uses num_particles many samples/particles. + + References + + [1] `A Tutorial on Information Maximizing Variational Autoencoders (InfoVAE)` + Shengjia Zhao + https://ermongroup.github.io/blog/a-tutorial-on-mmd-variational-autoencoders/ + """ + loss = self.differentiable_loss(model, guide, *args, **kwargs) + return torch_item(loss) + + def loss_and_grads(self, model, guide, *args, **kwargs): + """ + :returns: returns an estimate of the MMD-VAE-type loss [1] + :rtype: float + + Computes the MMD-VAE-type loss and performs backward on it. + Leads to valid gradient estimates as long as latent variables + in both the guide and the model are reparameterizable. + Num_particles many samples are used to form the estimators. + + References + + [1] `A Tutorial on Information Maximizing Variational Autoencoders (InfoVAE)` + Shengjia Zhao + https://ermongroup.github.io/blog/a-tutorial-on-mmd-variational-autoencoders/ + """ + loss = self.differentiable_loss(model, guide, *args, **kwargs) + loss.backward(retain_graph=self.retain_graph) + return torch_item(loss) diff --git a/pyro/source/pyro/infer/trace_tail_adaptive_elbo.py b/pyro/source/pyro/infer/trace_tail_adaptive_elbo.py new file mode 100644 index 0000000000000000000000000000000000000000..5ff15e4bee2faf558459cbd0a8b54791f9722820 --- /dev/null +++ b/pyro/source/pyro/infer/trace_tail_adaptive_elbo.py @@ -0,0 +1,83 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import warnings + +import torch + +from pyro.infer.trace_elbo import Trace_ELBO +from pyro.infer.util import check_fully_reparametrized, is_validation_enabled + + +class TraceTailAdaptive_ELBO(Trace_ELBO): + """ + Interface for Stochastic Variational Inference with an adaptive + f-divergence as described in ref. [1]. Users should specify + `num_particles` > 1 and `vectorize_particles==True`. The argument + `tail_adaptive_beta` can be specified to modify how the adaptive + f-divergence is constructed. See reference for details. + + Note that this interface does not support computing the varational + objective itself; rather it only supports computing gradients of the + variational objective. Consequently, one might want to use + another SVI interface (e.g. `RenyiELBO`) in order to monitor convergence. + + Note that this interface only supports models in which all the latent + variables are fully reparameterized. It also does not support data + subsampling. + + References + [1] "Variational Inference with Tail-adaptive f-Divergence", Dilin Wang, + Hao Liu, Qiang Liu, NeurIPS 2018 + https://papers.nips.cc/paper/7816-variational-inference-with-tail-adaptive-f-divergence + """ + + def loss(self, model, guide, *args, **kwargs): + """ + It is not necessary to estimate the tail-adaptive f-divergence itself in order + to compute the corresponding gradients. Consequently the loss method is left + unimplemented. + """ + raise NotImplementedError( + "Loss method for TraceTailAdaptive_ELBO not implemented" + ) + + def _differentiable_loss_particle(self, model_trace, guide_trace): + if not self.vectorize_particles: + raise NotImplementedError( + "TraceTailAdaptive_ELBO only implemented for vectorize_particles==True" + ) + + if self.num_particles == 1: + warnings.warn( + "For num_particles==1 TraceTailAdaptive_ELBO uses the same loss function as Trace_ELBO. " + + "Increase num_particles to get an adaptive f-divergence." + ) + + log_p, log_q = 0, 0 + + for name, site in model_trace.nodes.items(): + if site["type"] == "sample": + site_log_p = site["log_prob"].reshape(self.num_particles, -1).sum(-1) + log_p = log_p + site_log_p + + for name, site in guide_trace.nodes.items(): + if site["type"] == "sample": + site_log_q = site["log_prob"].reshape(self.num_particles, -1).sum(-1) + log_q = log_q + site_log_q + if is_validation_enabled(): + check_fully_reparametrized(site) + + # rank the particles according to p/q + log_pq = log_p - log_q + rank = torch.argsort(log_pq, descending=False) + rank = torch.index_select( + torch.arange(self.num_particles, device=log_pq.device) + 1, -1, rank + ).type_as(log_pq) + + # compute the particle-specific weights used to construct the surrogate loss + gamma = torch.pow(rank, self.tail_adaptive_beta).detach() + surrogate_loss = -(log_pq * gamma).sum() / gamma.sum() + + # we do not compute the loss, so return `inf` + return float("inf"), surrogate_loss diff --git a/pyro/source/pyro/infer/traceenum_elbo.py b/pyro/source/pyro/infer/traceenum_elbo.py new file mode 100644 index 0000000000000000000000000000000000000000..11417183811efcbc4f8a441bb849f25acc8d72ab --- /dev/null +++ b/pyro/source/pyro/infer/traceenum_elbo.py @@ -0,0 +1,569 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import queue +import warnings +import weakref +from collections import OrderedDict + +import torch +from opt_einsum import shared_intermediates + +import pyro +import pyro.distributions as dist +import pyro.ops.jit +import pyro.poutine as poutine +from pyro.distributions.util import is_identically_zero +from pyro.infer.elbo import ELBO +from pyro.infer.enum import ( + get_importance_trace, + iter_discrete_escape, + iter_discrete_extend, +) +from pyro.infer.util import Dice, is_validation_enabled +from pyro.ops import packed +from pyro.ops.contract import contract_tensor_tree, contract_to_tensor +from pyro.ops.rings import SampleRing +from pyro.poutine.enum_messenger import EnumMessenger +from pyro.util import check_traceenum_requirements, ignore_jit_warnings, warn_if_nan + + +@ignore_jit_warnings() +def _get_common_scale(scales): + # Check that all enumerated sites share a common subsampling scale. + # Note that we use a cheap weak comparison by id rather than tensor value, because + # (1) it is expensive to compare tensors by value, and (2) tensors must agree not + # only in value but at all derivatives. + scales_set = set() + for scale in scales: + if isinstance(scale, torch.Tensor) and scale.dim(): + raise ValueError("enumeration only supports scalar poutine.scale") + scales_set.add(float(scale)) + if len(scales_set) != 1: + raise ValueError( + "Expected all enumerated sample sites to share a common poutine.scale, " + "but found {} different scales.".format(len(scales_set)) + ) + return scales[0] + + +def _check_model_guide_enumeration_constraint(model_enum_sites, guide_trace): + min_ordinal = frozenset.intersection(*model_enum_sites.keys()) + for name, site in guide_trace.nodes.items(): + if site["type"] == "sample" and site["infer"].get("_enumerate_dim") is not None: + for f in site["cond_indep_stack"]: + if ( + f.vectorized + and guide_trace.plate_to_symbol[f.name] not in min_ordinal + ): + raise ValueError( + "Expected model enumeration to be no more global than guide enumeration, " + "but found model enumeration sites upstream of guide site '{}' in plate('{}'). " + "Try converting some model enumeration sites to guide enumeration sites.".format( + name, f.name + ) + ) + + +def _check_tmc_elbo_constraint(model_trace, guide_trace): + num_samples = frozenset( + site["infer"].get("num_samples") + for site in guide_trace.nodes.values() + if site["type"] == "sample" + and site["infer"].get("enumerate") == "parallel" + and site["infer"].get("num_samples") is not None + ) + if len(num_samples) > 1: + warnings.warn( + "\n".join( + [ + "Using different numbers of Monte Carlo samples for different guide sites in TraceEnum_ELBO.", + "This may be biased if the guide is not factorized", + ] + ), + UserWarning, + ) + for name, site in model_trace.nodes.items(): + if ( + site["type"] == "sample" + and site["infer"].get("enumerate", None) == "parallel" + and site["infer"].get("num_samples", None) + and name not in guide_trace + ): + warnings.warn( + "\n".join( + [ + "Site {} is multiply sampled in model,".format(site["name"]), + "expect incorrect gradient estimates from TraceEnum_ELBO.", + "Consider using exact enumeration or guide sampling if possible.", + ] + ), + RuntimeWarning, + ) + + +def _find_ordinal(trace, site): + return frozenset( + trace.plate_to_symbol[f.name] for f in site["cond_indep_stack"] if f.vectorized + ) + + +# TODO move this logic into a poutine +def _compute_model_factors(model_trace, guide_trace): + # y depends on x iff ordering[x] <= ordering[y] + # TODO refine this coarse dependency ordering using time. + ordering = { + name: _find_ordinal(trace, site) + for trace in (model_trace, guide_trace) + for name, site in trace.nodes.items() + if site["type"] == "sample" + } + + # Collect model sites that may have been enumerated in the model. + cost_sites = OrderedDict() + enum_sites = OrderedDict() + enum_dims = set() + non_enum_dims = set().union(*ordering.values()) + for name, site in model_trace.nodes.items(): + if site["type"] == "sample": + if name in guide_trace.nodes: + cost_sites.setdefault(ordering[name], []).append(site) + non_enum_dims.update( + guide_trace.nodes[name]["packed"]["log_prob"]._pyro_dims + ) + elif site["infer"].get("_enumerate_dim") is None: + cost_sites.setdefault(ordering[name], []).append(site) + else: + enum_sites.setdefault(ordering[name], []).append(site) + enum_dims.update(site["packed"]["log_prob"]._pyro_dims) + enum_dims -= non_enum_dims + log_factors = OrderedDict() + scale = 1 + if not enum_sites: + marginal_costs = OrderedDict( + (t, [site["packed"]["log_prob"] for site in sites_t]) + for t, sites_t in cost_sites.items() + ) + return marginal_costs, log_factors, ordering, enum_dims, scale + _check_model_guide_enumeration_constraint(enum_sites, guide_trace) + + # Marginalize out all variables that have been enumerated in the model. + marginal_costs = OrderedDict() + scales = [] + for t, sites_t in cost_sites.items(): + for site in sites_t: + if enum_dims.isdisjoint(site["packed"]["log_prob"]._pyro_dims): + # For sites that do not depend on an enumerated variable, proceed as usual. + marginal_costs.setdefault(t, []).append(site["packed"]["log_prob"]) + else: + # For sites that depend on an enumerated variable, we need to apply + # the mask inside- and the scale outside- of the log expectation. + if "masked_log_prob" not in site["packed"]: + site["packed"]["masked_log_prob"] = packed.scale_and_mask( + site["packed"]["unscaled_log_prob"], mask=site["packed"]["mask"] + ) + cost = site["packed"]["masked_log_prob"] + log_factors.setdefault(t, []).append(cost) + scales.append(site["scale"]) + for t, sites_t in enum_sites.items(): + # TODO refine this coarse dependency ordering using time and tensor shapes. + for site in sites_t: + logprob = site["packed"]["unscaled_log_prob"] + log_factors.setdefault(t, []).append(logprob) + scales.append(site["scale"]) + scale = _get_common_scale(scales) + return marginal_costs, log_factors, ordering, enum_dims, scale + + +def _compute_dice_elbo(model_trace, guide_trace): + # Accumulate marginal model costs. + marginal_costs, log_factors, ordering, sum_dims, scale = _compute_model_factors( + model_trace, guide_trace + ) + if log_factors: + dim_to_size = {} + for terms in log_factors.values(): + for term in terms: + dim_to_size.update(zip(term._pyro_dims, term.shape)) + + # Note that while most applications of tensor message passing use the + # contract_to_tensor() interface and can be easily refactored to use ubersum(), + # the application here relies on contract_tensor_tree() to extract the dependency + # structure of different log_prob terms, which is used by Dice to eliminate + # zero-expectation terms. One possible refactoring would be to replace + # contract_to_tensor() with a RaggedTensor -> Tensor contraction operation, but + # replace contract_tensor_tree() with a RaggedTensor -> RaggedTensor contraction + # that preserves some dependency structure. + with shared_intermediates() as cache: + ring = SampleRing(cache=cache, dim_to_size=dim_to_size) + log_factors = contract_tensor_tree(log_factors, sum_dims, ring=ring) + model_trace._sharing_cache = cache # For TraceEnumSample_ELBO. + for t, log_factors_t in log_factors.items(): + marginal_costs_t = marginal_costs.setdefault(t, []) + for term in log_factors_t: + term = packed.scale_and_mask(term, scale=scale) + marginal_costs_t.append(term) + costs = marginal_costs + + # Accumulate negative guide costs. + for name, site in guide_trace.nodes.items(): + if site["type"] == "sample": + cost = packed.neg(site["packed"]["log_prob"]) + costs.setdefault(ordering[name], []).append(cost) + + return Dice(guide_trace, ordering).compute_expectation(costs) + + +def _make_dist(dist_, logits): + # Reshape for Bernoulli vs Categorical, OneHotCategorical, etc.. + if isinstance(dist_, dist.Bernoulli): + logits = logits[..., 1] - logits[..., 0] + return type(dist_)(logits=logits) + + +def _compute_marginals(model_trace, guide_trace): + args = _compute_model_factors(model_trace, guide_trace) + marginal_costs, log_factors, ordering, sum_dims, scale = args + + marginal_dists = OrderedDict() + with shared_intermediates() as cache: + for name, site in model_trace.nodes.items(): + if ( + site["type"] != "sample" + or name in guide_trace.nodes + or site["infer"].get("_enumerate_dim") is None + ): + continue + + enum_dim = site["infer"]["_enumerate_dim"] + enum_symbol = site["infer"]["_enumerate_symbol"] + ordinal = _find_ordinal(model_trace, site) + logits = contract_to_tensor( + log_factors, + sum_dims, + target_ordinal=ordinal, + target_dims={enum_symbol}, + cache=cache, + ) + logits = packed.unpack(logits, model_trace.symbol_to_dim) + logits = logits.unsqueeze(-1).transpose(-1, enum_dim - 1) + while logits.shape[0] == 1: + logits = logits.squeeze(0) + marginal_dists[name] = _make_dist(site["fn"], logits) + return marginal_dists + + +class BackwardSampleMessenger(pyro.poutine.messenger.Messenger): + """ + Implements forward filtering / backward sampling for sampling + from the joint posterior distribution + """ + + def __init__(self, enum_trace, guide_trace): + self.enum_trace = enum_trace + args = _compute_model_factors(enum_trace, guide_trace) + self.log_factors = args[1] + self.sum_dims = args[3] + + def __enter__(self): + self.cache = {} + return super().__enter__() + + def __exit__(self, exc_type, exc_value, traceback): + if exc_type is None: + assert not self.sum_dims, self.sum_dims + return super().__exit__(exc_type, exc_value, traceback) + + def _pyro_sample(self, msg): + enum_msg = self.enum_trace.nodes.get(msg["name"]) + if enum_msg is None: + return + enum_symbol = enum_msg["infer"].get("_enumerate_symbol") + if enum_symbol is None: + return + enum_dim = enum_msg["infer"]["_enumerate_dim"] + with shared_intermediates(self.cache): + ordinal = _find_ordinal(self.enum_trace, msg) + logits = contract_to_tensor( + self.log_factors, + self.sum_dims, + target_ordinal=ordinal, + target_dims={enum_symbol}, + cache=self.cache, + ) + logits = packed.unpack(logits, self.enum_trace.symbol_to_dim) + logits = logits.unsqueeze(-1).transpose(-1, enum_dim - 1) + while logits.shape[0] == 1: + logits = logits.squeeze(0) + msg["fn"] = _make_dist(msg["fn"], logits) + + def _pyro_post_sample(self, msg): + enum_msg = self.enum_trace.nodes.get(msg["name"]) + if enum_msg is None: + return + enum_symbol = enum_msg["infer"].get("_enumerate_symbol") + if enum_symbol is None: + return + value = packed.pack(msg["value"].long(), enum_msg["infer"]["_dim_to_symbol"]) + assert enum_symbol not in value._pyro_dims + for t, terms in self.log_factors.items(): + for i, term in enumerate(terms): + if enum_symbol in term._pyro_dims: + terms[i] = packed.gather(term, value, enum_symbol) + self.sum_dims.remove(enum_symbol) + + +class TraceEnum_ELBO(ELBO): + """ + A trace implementation of ELBO-based SVI that supports + - exhaustive enumeration over discrete sample sites, and + - local parallel sampling over any sample site in the guide. + + To enumerate over a sample site in the ``guide``, mark the site with either + ``infer={'enumerate': 'sequential'}`` or + ``infer={'enumerate': 'parallel'}``. To configure all guide sites at once, + use :func:`~pyro.infer.enum.config_enumerate`. To enumerate over a sample + site in the ``model``, mark the site ``infer={'enumerate': 'parallel'}`` + and ensure the site does not appear in the ``guide``. + + This assumes restricted dependency structure on the model and guide: + variables outside of an :class:`~pyro.plate` can never depend on + variables inside that :class:`~pyro.plate`. + """ + + def _get_trace(self, model, guide, args, kwargs): + """ + Returns a single trace from the guide, and the model that is run + against it. + """ + model_trace, guide_trace = get_importance_trace( + "flat", self.max_plate_nesting, model, guide, args, kwargs + ) + + if is_validation_enabled(): + check_traceenum_requirements(model_trace, guide_trace) + _check_tmc_elbo_constraint(model_trace, guide_trace) + + has_enumerated_sites = any( + site["infer"].get("enumerate") + for trace in (guide_trace, model_trace) + for name, site in trace.nodes.items() + if site["type"] == "sample" + ) + + if self.strict_enumeration_warning and not has_enumerated_sites: + warnings.warn( + "TraceEnum_ELBO found no sample sites configured for enumeration. " + "If you want to enumerate sites, you need to @config_enumerate or set " + 'infer={"enumerate": "sequential"} or infer={"enumerate": "parallel"}? ' + "If you do not want to enumerate, consider using Trace_ELBO instead." + ) + + guide_trace.pack_tensors() + model_trace.pack_tensors(guide_trace.plate_to_symbol) + return model_trace, guide_trace + + def _get_traces(self, model, guide, args, kwargs): + """ + Runs the guide and runs the model against the guide with + the result packaged as a trace generator. + """ + if isinstance(poutine.unwrap(guide), poutine.messenger.Messenger): + raise NotImplementedError("TraceEnum_ELBO does not support GuideMessenger") + if self.max_plate_nesting == float("inf"): + self._guess_max_plate_nesting(model, guide, args, kwargs) + if self.vectorize_particles: + guide = self._vectorized_num_particles(guide) + model = self._vectorized_num_particles(model) + + # Enable parallel enumeration over the vectorized guide and model. + # The model allocates enumeration dimensions after (to the left of) the guide, + # accomplished by preserving the _ENUM_ALLOCATOR state after the guide call. + guide_enum = EnumMessenger(first_available_dim=-1 - self.max_plate_nesting) + model_enum = EnumMessenger() # preserve _ENUM_ALLOCATOR state + guide = guide_enum(guide) + model = model_enum(model) + + q = queue.LifoQueue() + guide = poutine.queue( + guide, q, escape_fn=iter_discrete_escape, extend_fn=iter_discrete_extend + ) + for i in range(1 if self.vectorize_particles else self.num_particles): + q.put(poutine.Trace()) + while not q.empty(): + yield self._get_trace(model, guide, args, kwargs) + + def loss(self, model, guide, *args, **kwargs): + """ + :returns: an estimate of the ELBO + :rtype: float + + Estimates the ELBO using ``num_particles`` many samples (particles). + """ + elbo = 0.0 + for model_trace, guide_trace in self._get_traces(model, guide, args, kwargs): + elbo_particle = _compute_dice_elbo(model_trace, guide_trace) + if is_identically_zero(elbo_particle): + continue + + elbo += elbo_particle.item() / self.num_particles + + loss = -elbo + warn_if_nan(loss, "loss") + return loss + + def differentiable_loss(self, model, guide, *args, **kwargs): + """ + :returns: a differentiable estimate of the ELBO + :rtype: torch.Tensor + :raises ValueError: if the ELBO is not differentiable (e.g. is + identically zero) + + Estimates a differentiable ELBO using ``num_particles`` many samples + (particles). The result should be infinitely differentiable (as long + as underlying derivatives have been implemented). + """ + elbo = 0.0 + for model_trace, guide_trace in self._get_traces(model, guide, args, kwargs): + elbo_particle = _compute_dice_elbo(model_trace, guide_trace) + if is_identically_zero(elbo_particle): + continue + + elbo = elbo + elbo_particle + elbo = elbo / self.num_particles + + if not torch.is_tensor(elbo) or not elbo.requires_grad: + raise ValueError("ELBO is cannot be differentiated: {}".format(elbo)) + + loss = -elbo + warn_if_nan(loss, "loss") + return loss + + def loss_and_grads(self, model, guide, *args, **kwargs): + """ + :returns: an estimate of the ELBO + :rtype: float + + Estimates the ELBO using ``num_particles`` many samples (particles). + Performs backward on the ELBO of each particle. + """ + elbo = 0.0 + for model_trace, guide_trace in self._get_traces(model, guide, args, kwargs): + elbo_particle = _compute_dice_elbo(model_trace, guide_trace) + if is_identically_zero(elbo_particle): + continue + + elbo += elbo_particle.item() / self.num_particles + + # collect parameters to train from model and guide + trainable_params = any( + site["type"] == "param" + for trace in (model_trace, guide_trace) + for site in trace.nodes.values() + ) + + if trainable_params and elbo_particle.requires_grad: + loss_particle = -elbo_particle + (loss_particle / self.num_particles).backward(retain_graph=True) + + loss = -elbo + warn_if_nan(loss, "loss") + return loss + + def compute_marginals(self, model, guide, *args, **kwargs): + """ + Computes marginal distributions at each model-enumerated sample site. + + :returns: a dict mapping site name to marginal ``Distribution`` object + :rtype: OrderedDict + """ + if self.num_particles != 1: + raise NotImplementedError( + "TraceEnum_ELBO.compute_marginals() is not " + "compatible with multiple particles." + ) + model_trace, guide_trace = next(self._get_traces(model, guide, args, kwargs)) + for site in guide_trace.nodes.values(): + if site["type"] == "sample": + if "_enumerate_dim" in site["infer"] or "_enum_total" in site["infer"]: + raise NotImplementedError( + "TraceEnum_ELBO.compute_marginals() is not " + "compatible with guide enumeration." + ) + return _compute_marginals(model_trace, guide_trace) + + def sample_posterior(self, model, guide, *args, **kwargs): + """ + Sample from the joint posterior distribution of all model-enumerated sites given all observations + """ + if self.num_particles != 1: + raise NotImplementedError( + "TraceEnum_ELBO.sample_posterior() is not " + "compatible with multiple particles." + ) + with poutine.block(), warnings.catch_warnings(): + warnings.filterwarnings("ignore", "Found vars in model but not guide") + model_trace, guide_trace = next( + self._get_traces(model, guide, args, kwargs) + ) + + for name, site in guide_trace.nodes.items(): + if site["type"] == "sample": + if "_enumerate_dim" in site["infer"] or "_enum_total" in site["infer"]: + raise NotImplementedError( + "TraceEnum_ELBO.sample_posterior() is not " + "compatible with guide enumeration." + ) + + # TODO replace BackwardSample with torch_sample backend to ubersum + with BackwardSampleMessenger(model_trace, guide_trace): + return poutine.replay(model, trace=guide_trace)(*args, **kwargs) + + +class JitTraceEnum_ELBO(TraceEnum_ELBO): + """ + Like :class:`TraceEnum_ELBO` but uses :func:`pyro.ops.jit.compile` to + compile :meth:`loss_and_grads`. + + This works only for a limited set of models: + + - Models must have static structure. + - Models must not depend on any global data (except the param store). + - All model inputs that are tensors must be passed in via ``*args``. + - All model inputs that are *not* tensors must be passed in via + ``**kwargs``, and compilation will be triggered once per unique + ``**kwargs``. + """ + + def differentiable_loss(self, model, guide, *args, **kwargs): + kwargs["_model_id"] = id(model) + kwargs["_guide_id"] = id(guide) + if getattr(self, "_differentiable_loss", None) is None: + # build a closure for differentiable_loss + weakself = weakref.ref(self) + + @pyro.ops.jit.trace( + ignore_warnings=self.ignore_jit_warnings, jit_options=self.jit_options + ) + def differentiable_loss(*args, **kwargs): + kwargs.pop("_model_id") + kwargs.pop("_guide_id") + self = weakself() + elbo = 0.0 + for model_trace, guide_trace in self._get_traces( + model, guide, args, kwargs + ): + elbo = elbo + _compute_dice_elbo(model_trace, guide_trace) + return elbo * (-1.0 / self.num_particles) + + self._differentiable_loss = differentiable_loss + + return self._differentiable_loss(*args, **kwargs) + + def loss_and_grads(self, model, guide, *args, **kwargs): + differentiable_loss = self.differentiable_loss(model, guide, *args, **kwargs) + differentiable_loss.backward() # this line triggers jit compilation + loss = differentiable_loss.item() + + warn_if_nan(loss, "loss") + return loss diff --git a/pyro/source/pyro/infer/tracegraph_elbo.py b/pyro/source/pyro/infer/tracegraph_elbo.py new file mode 100644 index 0000000000000000000000000000000000000000..fe817d020f5604f13c845937574e48915f180be5 --- /dev/null +++ b/pyro/source/pyro/infer/tracegraph_elbo.py @@ -0,0 +1,423 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import weakref +from collections import defaultdict +from operator import itemgetter + +import torch + +import pyro +import pyro.ops.jit +from pyro.distributions.util import detach, is_identically_zero +from pyro.infer import ELBO +from pyro.infer.enum import get_importance_trace +from pyro.infer.util import ( + MultiFrameTensor, + get_plate_stacks, + is_validation_enabled, + torch_backward, + torch_item, +) +from pyro.ops.provenance import detach_provenance, get_provenance, track_provenance +from pyro.poutine.messenger import Messenger +from pyro.poutine.subsample_messenger import _Subsample +from pyro.util import check_if_enumerated, warn_if_nan + + +def _get_baseline_options(site): + """ + Extracts baseline options from ``site["infer"]["baseline"]``. + """ + # XXX default for baseline_beta currently set here + options_dict = site["infer"].get("baseline", {}).copy() + options_tuple = ( + options_dict.pop("nn_baseline", None), + options_dict.pop("nn_baseline_input", None), + options_dict.pop("use_decaying_avg_baseline", False), + options_dict.pop("baseline_beta", 0.90), + options_dict.pop("baseline_value", None), + ) + if options_dict: + raise ValueError( + "Unrecognized baseline options: {}".format(options_dict.keys()) + ) + return options_tuple + + +def _construct_baseline(node, guide_site, downstream_cost): + # XXX should the average baseline be in the param store as below? + + baseline = 0.0 + baseline_loss = 0.0 + + ( + nn_baseline, + nn_baseline_input, + use_decaying_avg_baseline, + baseline_beta, + baseline_value, + ) = _get_baseline_options(guide_site) + + use_nn_baseline = nn_baseline is not None + use_baseline_value = baseline_value is not None + + use_baseline = use_nn_baseline or use_decaying_avg_baseline or use_baseline_value + + assert not ( + use_nn_baseline and use_baseline_value + ), "cannot use baseline_value and nn_baseline simultaneously" + if use_decaying_avg_baseline: + dc_shape = downstream_cost.shape + param_name = "__baseline_avg_downstream_cost_" + node + with torch.no_grad(): + avg_downstream_cost_old = pyro.param( + param_name, torch.zeros(dc_shape, device=guide_site["value"].device) + ) + avg_downstream_cost_new = ( + 1 - baseline_beta + ) * downstream_cost + baseline_beta * avg_downstream_cost_old + pyro.get_param_store()[param_name] = avg_downstream_cost_new + baseline += avg_downstream_cost_old + if use_nn_baseline: + # block nn_baseline_input gradients except in baseline loss + baseline += nn_baseline(detach(nn_baseline_input)) + elif use_baseline_value: + # it's on the user to make sure baseline_value tape only points to baseline params + baseline += baseline_value + if use_nn_baseline or use_baseline_value: + # accumulate baseline loss + baseline_loss += torch.pow(downstream_cost.detach() - baseline, 2.0).sum() + + if use_baseline: + if downstream_cost.shape != baseline.shape: + raise ValueError( + "Expected baseline at site {} to be {} instead got {}".format( + node, downstream_cost.shape, baseline.shape + ) + ) + + return use_baseline, baseline_loss, baseline + + +def _compute_downstream_costs(model_trace, guide_trace, non_reparam_nodes): # + # recursively compute downstream cost nodes for all sample sites in model and guide + # (even though ultimately just need for non-reparameterizable sample sites) + # 1. downstream costs used for rao-blackwellization + # 2. model observe sites (as well as terms that arise from the model and guide having different + # dependency structures) are taken care of via 'children_in_model' below + topo_sort_guide_nodes = guide_trace.topological_sort(reverse=True) + topo_sort_guide_nodes = [ + x for x in topo_sort_guide_nodes if guide_trace.nodes[x]["type"] == "sample" + ] + ordered_guide_nodes_dict = {n: i for i, n in enumerate(topo_sort_guide_nodes)} + + downstream_guide_cost_nodes = {} + downstream_costs = {} + stacks = get_plate_stacks(model_trace) + + for node in topo_sort_guide_nodes: + downstream_costs[node] = MultiFrameTensor( + ( + stacks[node], + model_trace.nodes[node]["log_prob"] + - guide_trace.nodes[node]["log_prob"], + ) + ) + nodes_included_in_sum = set([node]) + downstream_guide_cost_nodes[node] = set([node]) + # make more efficient by ordering children appropriately (higher children first) + children = [ + (k, -ordered_guide_nodes_dict[k]) for k in guide_trace.successors(node) + ] + sorted_children = sorted(children, key=itemgetter(1)) + for child, _ in sorted_children: + child_cost_nodes = downstream_guide_cost_nodes[child] + downstream_guide_cost_nodes[node].update(child_cost_nodes) + if nodes_included_in_sum.isdisjoint(child_cost_nodes): # avoid duplicates + downstream_costs[node].add(*downstream_costs[child].items()) + # XXX nodes_included_in_sum logic could be more fine-grained, possibly leading + # to speed-ups in case there are many duplicates + nodes_included_in_sum.update(child_cost_nodes) + missing_downstream_costs = ( + downstream_guide_cost_nodes[node] - nodes_included_in_sum + ) + # include terms we missed because we had to avoid duplicates + for missing_node in missing_downstream_costs: + downstream_costs[node].add( + ( + stacks[missing_node], + model_trace.nodes[missing_node]["log_prob"] + - guide_trace.nodes[missing_node]["log_prob"], + ) + ) + + # finish assembling complete downstream costs + # (the above computation may be missing terms from model) + for site in non_reparam_nodes: + children_in_model = set() + for node in downstream_guide_cost_nodes[site]: + children_in_model.update(model_trace.successors(node)) + # remove terms accounted for above + children_in_model.difference_update(downstream_guide_cost_nodes[site]) + for child in children_in_model: + assert model_trace.nodes[child]["type"] == "sample" + downstream_costs[site].add( + (stacks[child], model_trace.nodes[child]["log_prob"]) + ) + downstream_guide_cost_nodes[site].update([child]) + + for k in non_reparam_nodes: + downstream_costs[k] = downstream_costs[k].sum_to( + guide_trace.nodes[k]["cond_indep_stack"] + ) + + return downstream_costs, downstream_guide_cost_nodes + + +def _compute_elbo(model_trace, guide_trace): + # In ref [1], section 3.2, the part of the surrogate loss computed here is + # \sum{cost}, which in this case is the ELBO. Instead of using the ELBO, + # this implementation uses a surrogate ELBO which modifies some entropy + # terms depending on the parameterization. This reduces the variance of the + # gradient under some conditions. + + elbo = 0.0 + surrogate_elbo = 0.0 + baseline_loss = 0.0 + # mapping from non-reparameterizable sample sites to cost terms influenced by each of them + downstream_costs = defaultdict(lambda: MultiFrameTensor()) + + # Bring log p(x, z|...) terms into both the ELBO and the surrogate + for name, site in model_trace.nodes.items(): + if site["type"] == "sample": + elbo += site["log_prob_sum"] + surrogate_elbo += site["log_prob_sum"] + # add the log_prob to each non-reparam sample site upstream + for key in get_provenance(site["log_prob_sum"]): + downstream_costs[key].add((site["cond_indep_stack"], site["log_prob"])) + + # Bring log q(z|...) terms into the ELBO, and effective terms into the + # surrogate. Depending on the parameterization of a site, its log q(z|...) + # cost term may not contribute (in expectation) to the gradient. To reduce + # the variance under some conditions, the default entropy terms from + # site[`score_parts`] are used. + for name, site in guide_trace.nodes.items(): + if site["type"] == "sample": + elbo -= site["log_prob_sum"] + entropy_term = site["score_parts"].entropy_term + # For fully reparameterized terms, this entropy_term is log q(z|...) + # For fully non-reparameterized terms, it is zero + if not is_identically_zero(entropy_term): + surrogate_elbo -= entropy_term.sum() + # add the -log_prob to each non-reparam sample site upstream + for key in get_provenance(site["log_prob_sum"]): + downstream_costs[key].add((site["cond_indep_stack"], -site["log_prob"])) + + # construct all the reinforce-like terms. + # we include only downstream costs to reduce variance + # optionally include baselines to further reduce variance + for node, downstream_cost in downstream_costs.items(): + guide_site = guide_trace.nodes[node] + downstream_cost = downstream_cost.sum_to(guide_site["cond_indep_stack"]) + score_function = guide_site["score_parts"].score_function + + use_baseline, baseline_loss_term, baseline = _construct_baseline( + node, guide_site, downstream_cost + ) + + if use_baseline: + downstream_cost = downstream_cost - baseline + baseline_loss = baseline_loss + baseline_loss_term + + surrogate_elbo += (score_function * downstream_cost.detach()).sum() + + surrogate_loss = -surrogate_elbo + baseline_loss + return detach_provenance(elbo), detach_provenance(surrogate_loss) + + +class TrackNonReparam(Messenger): + """ + Track non-reparameterizable sample sites. + + **References:** + + 1. *Nonstandard Interpretations of Probabilistic Programs for Efficient Inference*, + David Wingate, Noah Goodman, Andreas Stuhlmüller, Jeffrey Siskind + + **Example:** + + .. doctest:: + + >>> import torch + >>> import pyro + >>> import pyro.distributions as dist + >>> from pyro.infer.tracegraph_elbo import TrackNonReparam + >>> from pyro.ops.provenance import get_provenance + >>> from pyro.poutine import trace + + >>> def model(): + ... probs_a = torch.tensor([0.3, 0.7]) + ... probs_b = torch.tensor([[0.1, 0.9], [0.8, 0.2]]) + ... probs_c = torch.tensor([[0.5, 0.5], [0.6, 0.4]]) + ... a = pyro.sample("a", dist.Categorical(probs_a)) + ... b = pyro.sample("b", dist.Categorical(probs_b[a])) + ... pyro.sample("c", dist.Categorical(probs_c[b]), obs=torch.tensor(0)) + + >>> with TrackNonReparam(): + ... model_tr = trace(model).get_trace() + >>> model_tr.compute_log_prob() + + >>> print(get_provenance(model_tr.nodes["a"]["log_prob"])) # doctest: +SKIP + frozenset({'a'}) + >>> print(get_provenance(model_tr.nodes["b"]["log_prob"])) # doctest: +SKIP + frozenset({'b', 'a'}) + >>> print(get_provenance(model_tr.nodes["c"]["log_prob"])) # doctest: +SKIP + frozenset({'b', 'a'}) + """ + + def _pyro_post_sample(self, msg): + if ( + msg["type"] == "sample" + and not isinstance(msg["fn"], _Subsample) + and not msg["is_observed"] + and not getattr(msg["fn"], "has_rsample", False) + ): + provenance = frozenset({msg["name"]}) + msg["value"] = track_provenance(msg["value"], provenance) + + +class TraceGraph_ELBO(ELBO): + """ + A TraceGraph implementation of ELBO-based SVI. The gradient estimator + is constructed along the lines of reference [1] specialized to the case + of the ELBO. It supports arbitrary dependency structure for the model + and guide as well as baselines for non-reparameterizable random variables. + Fine-grained conditional dependency information as recorded in the + :class:`~pyro.poutine.trace.Trace` is used to reduce the variance of the gradient estimator. + In particular provenance tracking [3] is used to find the ``cost`` terms + that depend on each non-reparameterizable sample site. + + References + + [1] `Gradient Estimation Using Stochastic Computation Graphs`, + John Schulman, Nicolas Heess, Theophane Weber, Pieter Abbeel + + [2] `Neural Variational Inference and Learning in Belief Networks` + Andriy Mnih, Karol Gregor + + [3] `Nonstandard Interpretations of Probabilistic Programs for Efficient Inference`, + David Wingate, Noah Goodman, Andreas Stuhlmüller, Jeffrey Siskind + """ + + def _get_trace(self, model, guide, args, kwargs): + """ + Returns a single trace from the guide, and the model that is run + against it. + """ + with TrackNonReparam(): + model_trace, guide_trace = get_importance_trace( + "dense", self.max_plate_nesting, model, guide, args, kwargs + ) + if is_validation_enabled(): + check_if_enumerated(guide_trace) + return model_trace, guide_trace + + def loss(self, model, guide, *args, **kwargs): + """ + :returns: returns an estimate of the ELBO + :rtype: float + + Evaluates the ELBO with an estimator that uses num_particles many samples/particles. + """ + elbo = 0.0 + for model_trace, guide_trace in self._get_traces(model, guide, args, kwargs): + elbo_particle = torch_item(model_trace.log_prob_sum()) - torch_item( + guide_trace.log_prob_sum() + ) + elbo += elbo_particle / float(self.num_particles) + + loss = -elbo + warn_if_nan(loss, "loss") + return loss + + def loss_and_grads(self, model, guide, *args, **kwargs): + """ + :returns: returns an estimate of the ELBO + :rtype: float + + Computes the ELBO as well as the surrogate ELBO that is used to form the gradient estimator. + Performs backward on the latter. Num_particle many samples are used to form the estimators. + If baselines are present, a baseline loss is also constructed and differentiated. + """ + elbo, surrogate_loss = self._loss_and_surrogate_loss(model, guide, args, kwargs) + + torch_backward(surrogate_loss, retain_graph=self.retain_graph) + + elbo = torch_item(elbo) + loss = -elbo + warn_if_nan(loss, "loss") + return loss + + def _loss_and_surrogate_loss(self, model, guide, args, kwargs): + loss = 0.0 + surrogate_loss = 0.0 + + for model_trace, guide_trace in self._get_traces(model, guide, args, kwargs): + lp, slp = self._loss_and_surrogate_loss_particle(model_trace, guide_trace) + loss += lp + surrogate_loss += slp + + loss /= self.num_particles + surrogate_loss /= self.num_particles + + return loss, surrogate_loss + + def _loss_and_surrogate_loss_particle(self, model_trace, guide_trace): + elbo, surrogate_loss = _compute_elbo(model_trace, guide_trace) + + return elbo, surrogate_loss + + +class JitTraceGraph_ELBO(TraceGraph_ELBO): + """ + Like :class:`TraceGraph_ELBO` but uses :func:`torch.jit.trace` to + compile :meth:`loss_and_grads`. + + This works only for a limited set of models: + + - Models must have static structure. + - Models must not depend on any global data (except the param store). + - All model inputs that are tensors must be passed in via ``*args``. + - All model inputs that are *not* tensors must be passed in via + ``**kwargs``, and compilation will be triggered once per unique + ``**kwargs``. + """ + + def loss_and_grads(self, model, guide, *args, **kwargs): + kwargs["_pyro_model_id"] = id(model) + kwargs["_pyro_guide_id"] = id(guide) + if getattr(self, "_jit_loss_and_surrogate_loss", None) is None: + # build a closure for loss_and_surrogate_loss + weakself = weakref.ref(self) + + @pyro.ops.jit.trace( + ignore_warnings=self.ignore_jit_warnings, jit_options=self.jit_options + ) + def jit_loss_and_surrogate_loss(*args, **kwargs): + kwargs.pop("_pyro_model_id") + kwargs.pop("_pyro_guide_id") + self = weakself() + return self._loss_and_surrogate_loss(model, guide, args, kwargs) + + self._jit_loss_and_surrogate_loss = jit_loss_and_surrogate_loss + + elbo, surrogate_loss = self._jit_loss_and_surrogate_loss(*args, **kwargs) + + surrogate_loss.backward( + retain_graph=self.retain_graph + ) # triggers jit compilation + + loss = -elbo.item() + warn_if_nan(loss, "loss") + return loss diff --git a/pyro/source/pyro/infer/tracetmc_elbo.py b/pyro/source/pyro/infer/tracetmc_elbo.py new file mode 100644 index 0000000000000000000000000000000000000000..c949dd9b6879613539f090a1fbc1acfcc6ed3417 --- /dev/null +++ b/pyro/source/pyro/infer/tracetmc_elbo.py @@ -0,0 +1,229 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import queue +import warnings + +import torch + +import pyro.poutine as poutine +from pyro.distributions.util import is_identically_zero +from pyro.infer.elbo import ELBO +from pyro.infer.enum import ( + get_importance_trace, + iter_discrete_escape, + iter_discrete_extend, +) +from pyro.infer.util import compute_site_dice_factor, is_validation_enabled, torch_item +from pyro.ops import packed +from pyro.ops.contract import einsum +from pyro.poutine.enum_messenger import EnumMessenger +from pyro.util import check_traceenum_requirements, warn_if_nan + + +def _compute_dice_factors(model_trace, guide_trace): + """ + compute per-site DiCE log-factors for non-reparameterized proposal sites + this logic is adapted from pyro.infer.util.Dice.__init__ + """ + log_probs = [] + for role, trace in zip(("model", "guide"), (model_trace, guide_trace)): + for name, site in trace.nodes.items(): + if site["type"] != "sample" or site["is_observed"]: + continue + if role == "model" and name in guide_trace: + continue + + log_prob, log_denom = compute_site_dice_factor(site) + if not is_identically_zero(log_denom): + dims = log_prob._pyro_dims + log_prob = log_prob - log_denom + log_prob._pyro_dims = dims + if not is_identically_zero(log_prob): + log_probs.append(log_prob) + + return log_probs + + +def _compute_tmc_factors(model_trace, guide_trace): + """ + compute per-site log-factors for all observed and unobserved variables + log-factors are log(p / q) for unobserved sites and log(p) for observed sites + """ + log_factors = [] + for name, site in guide_trace.nodes.items(): + if site["type"] != "sample" or site["is_observed"]: + continue + log_proposal = site["packed"]["log_prob"] + log_factors.append(packed.neg(log_proposal)) + for name, site in model_trace.nodes.items(): + if site["type"] != "sample": + continue + if ( + site["name"] not in guide_trace + and not site["is_observed"] + and site["infer"].get("enumerate", None) == "parallel" + and site["infer"].get("num_samples", -1) > 0 + ): + # site was sampled from the prior + log_proposal = packed.neg(site["packed"]["log_prob"]) + log_factors.append(log_proposal) + log_factors.append(site["packed"]["log_prob"]) + return log_factors + + +def _compute_tmc_estimate(model_trace, guide_trace): + """ + Use :func:`~pyro.ops.contract.einsum` to compute the Tensor Monte Carlo + estimate of the marginal likelihood given parallel-sampled traces. + """ + # factors + log_factors = _compute_tmc_factors(model_trace, guide_trace) + log_factors += _compute_dice_factors(model_trace, guide_trace) + + if not log_factors: + return 0.0 + + # loss + eqn = ",".join([f._pyro_dims for f in log_factors]) + "->" + plates = "".join( + frozenset().union( + list(model_trace.plate_to_symbol.values()), + list(guide_trace.plate_to_symbol.values()), + ) + ) + (tmc,) = einsum( + eqn, + *log_factors, + plates=plates, + backend="pyro.ops.einsum.torch_log", + modulo_total=False + ) + return tmc + + +class TraceTMC_ELBO(ELBO): + """ + A trace-based implementation of Tensor Monte Carlo [1] + by way of Tensor Variable Elimination [2] that supports: + - local parallel sampling over any sample site in the model or guide + - exhaustive enumeration over any sample site in the model or guide + + To take multiple samples, mark the site with + ``infer={'enumerate': 'parallel', 'num_samples': N}``. + To configure all sites in a model or guide at once, + use :func:`~pyro.infer.enum.config_enumerate` . + To enumerate or sample a sample site in the ``model``, + mark the site and ensure the site does not appear in the ``guide``. + + This assumes restricted dependency structure on the model and guide: + variables outside of an :class:`~pyro.plate` can never depend on + variables inside that :class:`~pyro.plate` . + + References + + [1] `Tensor Monte Carlo: Particle Methods for the GPU Era`, + Laurence Aitchison (2018) + + [2] `Tensor Variable Elimination for Plated Factor Graphs`, + Fritz Obermeyer, Eli Bingham, Martin Jankowiak, Justin Chiu, Neeraj Pradhan, + Alexander Rush, Noah Goodman (2019) + """ + + def _get_trace(self, model, guide, args, kwargs): + """ + Returns a single trace from the guide, and the model that is run + against it. + """ + model_trace, guide_trace = get_importance_trace( + "flat", self.max_plate_nesting, model, guide, args, kwargs + ) + + if is_validation_enabled(): + check_traceenum_requirements(model_trace, guide_trace) + + has_enumerated_sites = any( + site["infer"].get("enumerate") + for trace in (guide_trace, model_trace) + for name, site in trace.nodes.items() + if site["type"] == "sample" + ) + + if self.strict_enumeration_warning and not has_enumerated_sites: + warnings.warn( + "Found no sample sites configured for enumeration. " + "If you want to enumerate sites, you need to @config_enumerate or set " + 'infer={"enumerate": "sequential"} or infer={"enumerate": "parallel"}? ' + "If you do not want to enumerate, consider using Trace_ELBO instead." + ) + + model_trace.compute_score_parts() + guide_trace.pack_tensors() + model_trace.pack_tensors(guide_trace.plate_to_symbol) + return model_trace, guide_trace + + def _get_traces(self, model, guide, args, kwargs): + """ + Runs the guide and runs the model against the guide with + the result packaged as a trace generator. + """ + if self.max_plate_nesting == float("inf"): + self._guess_max_plate_nesting(model, guide, args, kwargs) + if self.vectorize_particles: + guide = self._vectorized_num_particles(guide) + model = self._vectorized_num_particles(model) + + # Enable parallel enumeration over the vectorized guide and model. + # The model allocates enumeration dimensions after (to the left of) the guide, + # accomplished by preserving the _ENUM_ALLOCATOR state after the guide call. + guide_enum = EnumMessenger(first_available_dim=-1 - self.max_plate_nesting) + model_enum = EnumMessenger() # preserve _ENUM_ALLOCATOR state + guide = guide_enum(guide) + model = model_enum(model) + + q = queue.LifoQueue() + guide = poutine.queue( + guide, q, escape_fn=iter_discrete_escape, extend_fn=iter_discrete_extend + ) + for i in range(1 if self.vectorize_particles else self.num_particles): + q.put(poutine.Trace()) + while not q.empty(): + yield self._get_trace(model, guide, args, kwargs) + + def differentiable_loss(self, model, guide, *args, **kwargs): + """ + :returns: a differentiable estimate of the marginal log-likelihood + :rtype: torch.Tensor + :raises ValueError: if the ELBO is not differentiable (e.g. is + identically zero) + + Computes a differentiable TMC estimate using ``num_particles`` many samples + (particles). The result should be infinitely differentiable (as long + as underlying derivatives have been implemented). + """ + elbo = 0.0 + for model_trace, guide_trace in self._get_traces(model, guide, args, kwargs): + elbo_particle = _compute_tmc_estimate(model_trace, guide_trace) + if is_identically_zero(elbo_particle): + continue + + elbo = elbo + elbo_particle + elbo = elbo / self.num_particles + + loss = -elbo + warn_if_nan(loss, "loss") + return loss + + def loss(self, model, guide, *args, **kwargs): + with torch.no_grad(): + loss = self.differentiable_loss(model, guide, *args, **kwargs) + if is_identically_zero(loss) or not loss.requires_grad: + return torch_item(loss) + return loss.item() + + def loss_and_grads(self, model, guide, *args, **kwargs): + loss = self.differentiable_loss(model, guide, *args, **kwargs) + if is_identically_zero(loss) or not loss.requires_grad: + return torch_item(loss) + loss.backward() + return loss.item() diff --git a/pyro/source/pyro/infer/util.py b/pyro/source/pyro/infer/util.py new file mode 100644 index 0000000000000000000000000000000000000000..2efbb60ed86545bdacfc3cc6ac8a3b9563b8abb2 --- /dev/null +++ b/pyro/source/pyro/infer/util.py @@ -0,0 +1,380 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math +import numbers +from collections import Counter, defaultdict +from contextlib import contextmanager +from dataclasses import fields + +import torch +from opt_einsum import shared_intermediates +from opt_einsum.sharing import count_cached_ops + +from pyro.distributions.util import is_identically_zero +from pyro.ops import packed +from pyro.ops.einsum.adjoint import require_backward +from pyro.ops.rings import MarginalRing +from pyro.poutine.trace_struct import Trace +from pyro.poutine.util import site_is_subsample + +from .. import settings + +_VALIDATION_ENABLED = __debug__ +settings.register("validate_infer", __name__, "_VALIDATION_ENABLED") + +LAST_CACHE_SIZE = [Counter()] # for profiling + + +def enable_validation(is_validate): + global _VALIDATION_ENABLED + _VALIDATION_ENABLED = is_validate + + +def is_validation_enabled(): + return _VALIDATION_ENABLED + + +@contextmanager +def validation_enabled(is_validate=True): + old = is_validation_enabled() + try: + enable_validation(is_validate) + yield + finally: + enable_validation(old) + + +def torch_item(x): + """ + Like ``x.item()`` for a :class:`~torch.Tensor`, but also works with numbers. + """ + return x if isinstance(x, numbers.Number) else x.item() + + +def torch_backward(x, retain_graph=None): + """ + Like ``x.backward()`` for a :class:`~torch.Tensor`, but also accepts + numbers and tensors without grad_fn (resulting in a no-op) + """ + if torch.is_tensor(x) and x.grad_fn: + x.backward(retain_graph=retain_graph) + + +def torch_exp(x): + """ + Like ``x.exp()`` for a :class:`~torch.Tensor`, but also accepts + numbers. + """ + if torch.is_tensor(x): + return torch.exp(x) + else: + return math.exp(x) + + +def torch_sum(tensor, dims): + """ + Like :func:`torch.sum` but sum out dims only if they exist. + """ + assert all(d < 0 for d in dims) + leftmost = -tensor.dim() + dims = [d for d in dims if leftmost <= d] + return tensor.sum(dims) if dims else tensor + + +def zero_grads(tensors): + """ + Sets gradients of list of Tensors to zero in place + """ + for p in tensors: + if p.grad is not None: + p.grad = torch.zeros_like(p.grad) + + +def get_plate_stacks(trace): + """ + This builds a dict mapping site name to a set of plate stacks. Each + plate stack is a list of :class:`CondIndepStackFrame`s corresponding to + an :class:`plate`. This information is used by :class:`Trace_ELBO` and + :class:`TraceGraph_ELBO`. + """ + return { + name: [f for f in node["cond_indep_stack"] if f.vectorized] + for name, node in trace.nodes.items() + if node["type"] == "sample" and not site_is_subsample(node) + } + + +def get_dependent_plate_dims(sites): + """ + Return a list of unique dims for plates that are not common to all sites. + """ + plate_sets = [ + site["cond_indep_stack"] for site in sites if site["type"] == "sample" + ] + all_plates = set().union(*plate_sets) + common_plates = all_plates.intersection(*plate_sets) + sum_plates = all_plates - common_plates + sum_dims = sorted({f.dim for f in sum_plates if f.dim is not None}) + return sum_dims + + +class MultiFrameTensor(dict): + """ + A container for sums of Tensors among different :class:`plate` contexts. + + Used in :class:`~pyro.infer.tracegraph_elbo.TraceGraph_ELBO` to simplify + downstream cost computation logic. + + Example:: + + downstream_cost = MultiFrameTensor() + for site in downstream_nodes: + downstream_cost.add((site["cond_indep_stack"], site["log_prob"])) + downstream_cost.add(*other_costs.items()) # add in bulk + summed = downstream_cost.sum_to(target_site["cond_indep_stack"]) + """ + + def __init__(self, *items): + super().__init__() + self.add(*items) + + def add(self, *items): + """ + Add a collection of (cond_indep_stack, tensor) pairs. Keys are + ``cond_indep_stack``s, i.e. tuples of :class:`CondIndepStackFrame`s. + Values are :class:`torch.Tensor`s. + """ + for cond_indep_stack, value in items: + frames = frozenset(f for f in cond_indep_stack if f.vectorized) + assert all(f.dim < 0 and -value.dim() <= f.dim for f in frames) + if frames in self: + self[frames] = self[frames] + value + else: + self[frames] = value + + def sum_to(self, target_frames): + total = None + for frames, value in self.items(): + for f in frames: + if f not in target_frames and value.shape[f.dim] != 1: + value = value.sum(f.dim, True) + while value.shape and value.shape[0] == 1: + value = value.squeeze(0) + total = value if total is None else total + value + return 0.0 if total is None else total + + def __repr__(self): + return "%s(%s)" % ( + type(self).__name__, + ",\n\t".join(["({}, ...)".format(frames) for frames in self]), + ) + + +def compute_site_dice_factor(site): + log_denom = 0 + log_prob = site["packed"]["score_parts"].score_function # not scaled by subsampling + dims = getattr(log_prob, "_pyro_dims", "") + if site["infer"].get("enumerate"): + num_samples = site["infer"].get("num_samples") + if num_samples is not None: # site was multiply sampled + if not is_identically_zero(log_prob): + log_prob = log_prob - log_prob.detach() + log_prob = log_prob - math.log(num_samples) + if not isinstance(log_prob, torch.Tensor): + log_prob = torch.tensor(float(log_prob), device=site["value"].device) + log_prob._pyro_dims = dims + # I don't know why the following broadcast is needed, but it makes tests pass: + log_prob, _ = packed.broadcast_all(log_prob, site["packed"]["log_prob"]) + elif site["infer"]["enumerate"] == "sequential": + log_denom = math.log(site["infer"].get("_enum_total", num_samples)) + else: # site was monte carlo sampled + if not is_identically_zero(log_prob): + log_prob = log_prob - log_prob.detach() + log_prob._pyro_dims = dims + + return log_prob, log_denom + + +class Dice: + """ + An implementation of the DiCE operator compatible with Pyro features. + + This implementation correctly handles: + - scaled log-probability due to subsampling + - independence in different ordinals due to plate + - weights due to parallel and sequential enumeration + - weights due to local multiple sampling + + This assumes restricted dependency structure on the model and guide: + variables outside of an :class:`~pyro.plate` can never depend on + variables inside that :class:`~pyro.plate`. + + References: + [1] Jakob Foerster, Greg Farquhar, Maruan Al-Shedivat, Tim Rocktaeschel, + Eric P. Xing, Shimon Whiteson (2018) + "DiCE: The Infinitely Differentiable Monte-Carlo Estimator" + https://arxiv.org/abs/1802.05098 + [2] Laurence Aitchison (2018) + "Tensor Monte Carlo: particle methods for the GPU era" + https://arxiv.org/abs/1806.08593 + + :param pyro.poutine.trace.Trace guide_trace: A guide trace. + :param ordering: A dictionary mapping model site names to ordinal values. + Ordinal values may be any type that is (1) ``<=`` comparable and (2) + hashable; the canonical ordinal is a ``frozenset`` of site names. + """ + + def __init__(self, guide_trace, ordering): + log_denoms = defaultdict( + float + ) # avoids double-counting when sequentially enumerating + log_probs = defaultdict(list) # accounts for upstream probabilties + + for name, site in guide_trace.nodes.items(): + if site["type"] != "sample": + continue + + ordinal = ordering[name] + log_prob, log_denom = compute_site_dice_factor(site) + if not is_identically_zero(log_prob): + log_probs[ordinal].append(log_prob) + if not is_identically_zero(log_denom): + log_denoms[ordinal] += log_denom + + self.log_denom = log_denoms + self.log_probs = log_probs + + def _get_log_factors(self, target_ordinal): + """ + Returns a list of DiCE factors at a given ordinal. + """ + log_denom = 0 + for ordinal, term in self.log_denom.items(): + if not ordinal <= target_ordinal: # not downstream + log_denom += term # term = log(# times this ordinal is counted) + + log_factors = [] if is_identically_zero(log_denom) else [-log_denom] + for ordinal, terms in self.log_probs.items(): + if ordinal <= target_ordinal: # upstream + log_factors.extend(terms) # terms = [log(dice weight of this ordinal)] + + return log_factors + + def compute_expectation(self, costs): + """ + Returns a differentiable expected cost, summing over costs at given ordinals. + + :param dict costs: A dict mapping ordinals to lists of cost tensors + :returns: a scalar expected cost + :rtype: torch.Tensor or float + """ + # Share computation across all cost terms. + with shared_intermediates() as cache: + ring = MarginalRing(cache=cache) + expected_cost = 0.0 + for ordinal, cost_terms in costs.items(): + log_factors = self._get_log_factors(ordinal) + scale = math.exp( + sum(x for x in log_factors if not isinstance(x, torch.Tensor)) + ) + log_factors = [x for x in log_factors if isinstance(x, torch.Tensor)] + + # Collect log_prob terms to query for marginal probability. + queries = {frozenset(cost._pyro_dims): None for cost in cost_terms} + for log_factor in log_factors: + key = frozenset(log_factor._pyro_dims) + if queries.get(key, False) is None: + queries[key] = log_factor + # Ensure a query exists for each cost term. + for cost in cost_terms: + key = frozenset(cost._pyro_dims) + if queries[key] is None: + query = torch.zeros_like(cost) + query._pyro_dims = cost._pyro_dims + log_factors.append(query) + queries[key] = query + + # Perform sum-product contraction. Note that plates never need to be + # product-contracted due to our plate-based dependency ordering. + sum_dims = set().union(*(x._pyro_dims for x in log_factors)) - ordinal + for query in queries.values(): + require_backward(query) + root = ring.sumproduct(log_factors, sum_dims) + root._pyro_backward() + probs = { + key: query._pyro_backward_result.exp() + for key, query in queries.items() + } + + # Aggregate prob * cost terms. + for cost in cost_terms: + key = frozenset(cost._pyro_dims) + prob = probs[key] + prob._pyro_dims = queries[key]._pyro_dims + mask = prob > 0 + if torch._C._get_tracing_state() or not mask.all(): + mask._pyro_dims = prob._pyro_dims + cost, prob, mask = packed.broadcast_all(cost, prob, mask) + prob = prob.masked_select(mask) + cost = cost.masked_select(mask) + else: + cost, prob = packed.broadcast_all(cost, prob) + expected_cost = expected_cost + scale * _fulldot(prob, cost) + + LAST_CACHE_SIZE[0] = count_cached_ops(cache) + return expected_cost + + +def _fulldot(x, y): + assert x.dim() == y.dim() + if x.dim() == 0: + return x * y + return torch.tensordot(x, y, dims=x.dim()) + + +def check_fully_reparametrized(guide_site): + log_prob, score_function_term, entropy_term = guide_site["score_parts"] + fully_rep = ( + guide_site["fn"].has_rsample + and not is_identically_zero(entropy_term) + and is_identically_zero(score_function_term) + ) + if not fully_rep: + raise NotImplementedError( + "All distributions in the guide must be fully reparameterized." + ) + + +def plate_log_prob_sum(trace: Trace, plate_symbol: str) -> torch.Tensor: + """ + Get log probability sum from trace while keeping indexing over the specified plate. + """ + log_prob_sum = 0.0 + for site in trace.nodes.values(): + if site["type"] != "sample": + continue + log_prob_sum += torch.einsum( + site["packed"]["log_prob"]._pyro_dims + "->" + plate_symbol, + [site["packed"]["log_prob"]], + ) + return log_prob_sum + + +class CloneMixin: + """ + Mixin class that adds ``.clone`` method to ``@dataclasses.dataclass`` decorated classes + that are made up of ``torch.Tensor`` fields. + """ + + def clone(self): + retval = dict() + for field_desc in fields(self): + field_name, value = field_desc.name, getattr(self, field_desc.name) + if isinstance(value, dict): + retval[field_name] = dict() + for key in value: + retval[field_name][key] = value[key].clone() + else: + retval[field_name] = value.clone() + return self.__class__(**retval) diff --git a/pyro/source/pyro/logger.py b/pyro/source/pyro/logger.py new file mode 100644 index 0000000000000000000000000000000000000000..e5d99748ab35b2be83408374f13422edcd0cd7c5 --- /dev/null +++ b/pyro/source/pyro/logger.py @@ -0,0 +1,16 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging + +default_format = "%(levelname)s \t %(message)s" +log = logging.getLogger("pyro") +log.setLevel(logging.INFO) + + +if not logging.root.handlers: + default_handler = logging.StreamHandler() + default_handler.setLevel(logging.INFO) + default_handler.setFormatter(logging.Formatter(default_format)) + log.addHandler(default_handler) + log.propagate = False diff --git a/pyro/source/pyro/nn/__init__.py b/pyro/source/pyro/nn/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e55e7356f6bab9d34ba1005d8cd7fafe84305c24 --- /dev/null +++ b/pyro/source/pyro/nn/__init__.py @@ -0,0 +1,31 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from __future__ import absolute_import, division, print_function + +from pyro.nn.auto_reg_nn import ( + AutoRegressiveNN, + ConditionalAutoRegressiveNN, + MaskedLinear, +) +from pyro.nn.dense_nn import ConditionalDenseNN, DenseNN +from pyro.nn.module import ( + PyroModule, + PyroModuleList, + PyroParam, + PyroSample, + pyro_method, +) + +__all__ = [ + "AutoRegressiveNN", + "ConditionalAutoRegressiveNN", + "ConditionalDenseNN", + "DenseNN", + "MaskedLinear", + "PyroModule", + "PyroParam", + "PyroSample", + "pyro_method", + "PyroModuleList", +] diff --git a/pyro/source/pyro/nn/auto_reg_nn.py b/pyro/source/pyro/nn/auto_reg_nn.py new file mode 100644 index 0000000000000000000000000000000000000000..e2d29feda2147c5a42b9ae3e4a544d35311c17f9 --- /dev/null +++ b/pyro/source/pyro/nn/auto_reg_nn.py @@ -0,0 +1,360 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import warnings +from typing import List, Optional, Sequence, Tuple, Union + +import torch +import torch.nn as nn +from torch.nn import functional as F + + +def sample_mask_indices( + input_dim: int, hidden_dim: int, simple: bool = True +) -> torch.Tensor: + """ + Samples the indices assigned to hidden units during the construction of MADE masks + + :param input_dim: the dimensionality of the input variable + :type input_dim: int + :param hidden_dim: the dimensionality of the hidden layer + :type hidden_dim: int + :param simple: True to space fractional indices by rounding to nearest int, false round randomly + :type simple: bool + """ + indices = torch.linspace(1, input_dim, steps=hidden_dim) + if simple: + # Simple procedure tries to space fractional indices evenly by rounding to nearest int + return torch.round(indices) + else: + # "Non-simple" procedure creates fractional indices evenly then rounds at random + ints = indices.floor() + ints += torch.bernoulli(indices - ints) + return ints + + +def create_mask( + input_dim: int, + context_dim: int, + hidden_dims: List[int], + permutation: torch.LongTensor, + output_dim_multiplier: int, +) -> Tuple[List[torch.Tensor], torch.Tensor]: + """ + Creates MADE masks for a conditional distribution + + :param input_dim: the dimensionality of the input variable + :type input_dim: int + :param context_dim: the dimensionality of the variable that is conditioned on (for conditional densities) + :type context_dim: int + :param hidden_dims: the dimensionality of the hidden layers(s) + :type hidden_dims: list[int] + :param permutation: the order of the input variables + :type permutation: torch.LongTensor + :param output_dim_multiplier: tiles the output (e.g. for when a separate mean and scale parameter are desired) + :type output_dim_multiplier: int + """ + # Create mask indices for input, hidden layers, and final layer + # We use 0 to refer to the elements of the variable being conditioned on, + # and range(1:(D_latent+1)) for the input variable + var_index = torch.empty(permutation.shape, dtype=torch.get_default_dtype()) + var_index[permutation] = torch.arange(input_dim, dtype=torch.get_default_dtype()) + + # Create the indices that are assigned to the neurons + input_indices = torch.cat((torch.zeros(context_dim), 1 + var_index)) + + # For conditional MADE, introduce a 0 index that all the conditioned variables are connected to + # as per Paige and Wood (2016) (see below) + if context_dim > 0: + hidden_indices = [sample_mask_indices(input_dim, h) - 1 for h in hidden_dims] + else: + hidden_indices = [sample_mask_indices(input_dim - 1, h) for h in hidden_dims] + + output_indices = (var_index + 1).repeat(output_dim_multiplier) + + # Create mask from input to output for the skips connections + mask_skip = (output_indices.unsqueeze(-1) > input_indices.unsqueeze(0)).type_as( + var_index + ) + + # Create mask from input to first hidden layer, and between subsequent hidden layers + masks = [ + (hidden_indices[0].unsqueeze(-1) >= input_indices.unsqueeze(0)).type_as( + var_index + ) + ] + for i in range(1, len(hidden_dims)): + masks.append( + ( + hidden_indices[i].unsqueeze(-1) >= hidden_indices[i - 1].unsqueeze(0) + ).type_as(var_index) + ) + + # Create mask from last hidden layer to output layer + masks.append( + (output_indices.unsqueeze(-1) > hidden_indices[-1].unsqueeze(0)).type_as( + var_index + ) + ) + + return masks, mask_skip + + +class MaskedLinear(nn.Linear): + """ + A linear mapping with a given mask on the weights (arbitrary bias) + + :param in_features: the number of input features + :type in_features: int + :param out_features: the number of output features + :type out_features: int + :param mask: the mask to apply to the in_features x out_features weight matrix + :type mask: torch.Tensor + :param bias: whether or not `MaskedLinear` should include a bias term. defaults to `True` + :type bias: bool + """ + + def __init__( + self, in_features: int, out_features: int, mask: torch.Tensor, bias: bool = True + ) -> None: + super().__init__(in_features, out_features, bias) + self.register_buffer("mask", mask.data) + + def forward(self, _input: torch.Tensor) -> torch.Tensor: + masked_weight = self.weight * self.mask + return F.linear(_input, masked_weight, self.bias) + + +class ConditionalAutoRegressiveNN(nn.Module): + """ + An implementation of a MADE-like auto-regressive neural network that can input an additional context variable. + (See Reference [2] Section 3.3 for an explanation of how the conditional MADE architecture works.) + + Example usage: + + >>> x = torch.randn(100, 10) + >>> y = torch.randn(100, 5) + >>> arn = ConditionalAutoRegressiveNN(10, 5, [50], param_dims=[1]) + >>> p = arn(x, context=y) # 1 parameters of size (100, 10) + >>> arn = ConditionalAutoRegressiveNN(10, 5, [50], param_dims=[1, 1]) + >>> m, s = arn(x, context=y) # 2 parameters of size (100, 10) + >>> arn = ConditionalAutoRegressiveNN(10, 5, [50], param_dims=[1, 5, 3]) + >>> a, b, c = arn(x, context=y) # 3 parameters of sizes, (100, 1, 10), (100, 5, 10), (100, 3, 10) + + :param input_dim: the dimensionality of the input variable + :type input_dim: int + :param context_dim: the dimensionality of the context variable + :type context_dim: int + :param hidden_dims: the dimensionality of the hidden units per layer + :type hidden_dims: list[int] + :param param_dims: shape the output into parameters of dimension (p_n, input_dim) for p_n in param_dims + when p_n > 1 and dimension (input_dim) when p_n == 1. The default is [1, 1], i.e. output two parameters + of dimension (input_dim), which is useful for inverse autoregressive flow. + :type param_dims: list[int] + :param permutation: an optional permutation that is applied to the inputs and controls the order of the + autoregressive factorization. in particular for the identity permutation the autoregressive structure + is such that the Jacobian is upper triangular. By default this is chosen at random. + :type permutation: torch.LongTensor + :param skip_connections: Whether to add skip connections from the input to the output. + :type skip_connections: bool + :param nonlinearity: The nonlinearity to use in the feedforward network such as torch.nn.ReLU(). Note that no + nonlinearity is applied to the final network output, so the output is an unbounded real number. + :type nonlinearity: torch.nn.module + + Reference: + + 1. MADE: Masked Autoencoder for Distribution Estimation [arXiv:1502.03509] + Mathieu Germain, Karol Gregor, Iain Murray, Hugo Larochelle + + 2. Inference Networks for Sequential Monte Carlo in Graphical Models [arXiv:1602.06701] + Brooks Paige, Frank Wood + + """ + + def __init__( + self, + input_dim: int, + context_dim: int, + hidden_dims: List[int], + param_dims: List[int] = [1, 1], + permutation: Optional[torch.LongTensor] = None, + skip_connections: bool = False, + nonlinearity: torch.nn.Module = nn.ReLU(), + ) -> None: + super().__init__() + if input_dim == 1: + warnings.warn( + "ConditionalAutoRegressiveNN input_dim = 1. Consider using an affine transformation instead." + ) + self.input_dim = input_dim + self.context_dim = context_dim + self.hidden_dims = hidden_dims + self.param_dims = param_dims + self.count_params = len(param_dims) + self.output_multiplier = sum(param_dims) + self.all_ones = (torch.tensor(param_dims) == 1).all().item() + + # Calculate the indices on the output corresponding to each parameter + ends = torch.cumsum(torch.tensor(param_dims), dim=0) + starts = torch.cat((torch.zeros(1).type_as(ends), ends[:-1])) + self.param_slices = [slice(s.item(), e.item()) for s, e in zip(starts, ends)] + + # Hidden dimension must be not less than the input otherwise it isn't + # possible to connect to the outputs correctly + for h in hidden_dims: + if h < input_dim: + raise ValueError( + "Hidden dimension must not be less than input dimension." + ) + + if permutation is None: + # By default set a random permutation of variables, which is important for performance with multiple steps + P = torch.randperm(input_dim, device="cpu").to(torch.Tensor().device) + else: + # The permutation is chosen by the user + P = permutation.type(dtype=torch.int64) + self.permutation: torch.LongTensor + self.register_buffer("permutation", P) + + # Create masks + self.masks, self.mask_skip = create_mask( + input_dim=input_dim, + context_dim=context_dim, + hidden_dims=hidden_dims, + permutation=self.permutation, + output_dim_multiplier=self.output_multiplier, + ) + + # Create masked layers + layers = [MaskedLinear(input_dim + context_dim, hidden_dims[0], self.masks[0])] + for i in range(1, len(hidden_dims)): + layers.append( + MaskedLinear(hidden_dims[i - 1], hidden_dims[i], self.masks[i]) + ) + layers.append( + MaskedLinear( + hidden_dims[-1], input_dim * self.output_multiplier, self.masks[-1] + ) + ) + self.layers = nn.ModuleList(layers) + + self.skip_layer: Optional[MaskedLinear] + if skip_connections: + self.skip_layer = MaskedLinear( + input_dim + context_dim, + input_dim * self.output_multiplier, + self.mask_skip, + bias=False, + ) + else: + self.skip_layer = None + + # Save the nonlinearity + self.f = nonlinearity + + def get_permutation(self) -> torch.LongTensor: + """ + Get the permutation applied to the inputs (by default this is chosen at random) + """ + return self.permutation + + def forward( + self, x: torch.Tensor, context: Optional[torch.Tensor] = None + ) -> Union[Sequence[torch.Tensor], torch.Tensor]: + # We must be able to broadcast the size of the context over the input + if context is None: + context = self.context + + context = context.expand(x.size()[:-1] + (context.size(-1),)) + x = torch.cat([context, x], dim=-1) + return self._forward(x) + + def _forward(self, x: torch.Tensor) -> Union[Sequence[torch.Tensor], torch.Tensor]: + h = x + for layer in self.layers[:-1]: + h = self.f(layer(h)) + h = self.layers[-1](h) + + if self.skip_layer is not None: + h = h + self.skip_layer(x) + + # Shape the output, squeezing the parameter dimension if all ones + if self.output_multiplier == 1: + return h + else: + h = h.reshape( + list(x.size()[:-1]) + [self.output_multiplier, self.input_dim] + ) + + # Squeeze dimension if all parameters are one dimensional + if self.count_params == 1: + return h + + elif self.all_ones: + return torch.unbind(h, dim=-2) + + # If not all ones, then probably don't want to squeeze a single dimension parameter + else: + return tuple([h[..., s, :] for s in self.param_slices]) + + +class AutoRegressiveNN(ConditionalAutoRegressiveNN): + """ + An implementation of a MADE-like auto-regressive neural network. + + Example usage: + + >>> x = torch.randn(100, 10) + >>> arn = AutoRegressiveNN(10, [50], param_dims=[1]) + >>> p = arn(x) # 1 parameters of size (100, 10) + >>> arn = AutoRegressiveNN(10, [50], param_dims=[1, 1]) + >>> m, s = arn(x) # 2 parameters of size (100, 10) + >>> arn = AutoRegressiveNN(10, [50], param_dims=[1, 5, 3]) + >>> a, b, c = arn(x) # 3 parameters of sizes, (100, 1, 10), (100, 5, 10), (100, 3, 10) + + :param input_dim: the dimensionality of the input variable + :type input_dim: int + :param hidden_dims: the dimensionality of the hidden units per layer + :type hidden_dims: list[int] + :param param_dims: shape the output into parameters of dimension (p_n, input_dim) for p_n in param_dims + when p_n > 1 and dimension (input_dim) when p_n == 1. The default is [1, 1], i.e. output two parameters + of dimension (input_dim), which is useful for inverse autoregressive flow. + :type param_dims: list[int] + :param permutation: an optional permutation that is applied to the inputs and controls the order of the + autoregressive factorization. in particular for the identity permutation the autoregressive structure + is such that the Jacobian is upper triangular. By default this is chosen at random. + :type permutation: torch.LongTensor + :param skip_connections: Whether to add skip connections from the input to the output. + :type skip_connections: bool + :param nonlinearity: The nonlinearity to use in the feedforward network such as torch.nn.ReLU(). Note that no + nonlinearity is applied to the final network output, so the output is an unbounded real number. + :type nonlinearity: torch.nn.module + + Reference: + + MADE: Masked Autoencoder for Distribution Estimation [arXiv:1502.03509] + Mathieu Germain, Karol Gregor, Iain Murray, Hugo Larochelle + + """ + + def __init__( + self, + input_dim: int, + hidden_dims: List[int], + param_dims: List[int] = [1, 1], + permutation: Optional[torch.LongTensor] = None, + skip_connections: bool = False, + nonlinearity: torch.nn.Module = nn.ReLU(), + ) -> None: + super(AutoRegressiveNN, self).__init__( + input_dim, + 0, + hidden_dims, + param_dims=param_dims, + permutation=permutation, + skip_connections=skip_connections, + nonlinearity=nonlinearity, + ) + + def forward(self, x: torch.Tensor) -> Union[Sequence[torch.Tensor], torch.Tensor]: # type: ignore[override] + return self._forward(x) diff --git a/pyro/source/pyro/nn/dense_nn.py b/pyro/source/pyro/nn/dense_nn.py new file mode 100644 index 0000000000000000000000000000000000000000..a3cf93af8d9102b056249bd95926caebd86d593a --- /dev/null +++ b/pyro/source/pyro/nn/dense_nn.py @@ -0,0 +1,140 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from typing import List, Sequence, Union + +import torch + + +class ConditionalDenseNN(torch.nn.Module): + """ + An implementation of a simple dense feedforward network taking a context variable, for use in, e.g., + some conditional flows such as :class:`pyro.distributions.transforms.ConditionalAffineCoupling`. + + Example usage: + + >>> input_dim = 10 + >>> context_dim = 5 + >>> x = torch.rand(100, input_dim) + >>> z = torch.rand(100, context_dim) + >>> nn = ConditionalDenseNN(input_dim, context_dim, [50], param_dims=[1, input_dim, input_dim]) + >>> a, b, c = nn(x, context=z) # parameters of size (100, 1), (100, 10), (100, 10) + + :param input_dim: the dimensionality of the input + :type input_dim: int + :param context_dim: the dimensionality of the context variable + :type context_dim: int + :param hidden_dims: the dimensionality of the hidden units per layer + :type hidden_dims: list[int] + :param param_dims: shape the output into parameters of dimension (p_n,) for p_n in param_dims + when p_n > 1 and dimension () when p_n == 1. The default is [1, 1], i.e. output two parameters of dimension (). + :type param_dims: list[int] + :param nonlinearity: The nonlinearity to use in the feedforward network such as torch.nn.ReLU(). Note that no + nonlinearity is applied to the final network output, so the output is an unbounded real number. + :type nonlinearity: torch.nn.Module + + """ + + def __init__( + self, + input_dim: int, + context_dim: int, + hidden_dims: List[int], + param_dims: List[int] = [1, 1], + nonlinearity: torch.nn.Module = torch.nn.ReLU(), + ) -> None: + super().__init__() + + self.input_dim = input_dim + self.context_dim = context_dim + self.hidden_dims = hidden_dims + self.param_dims = param_dims + self.count_params = len(param_dims) + self.output_multiplier = sum(param_dims) + + # Calculate the indices on the output corresponding to each parameter + ends = torch.cumsum(torch.tensor(param_dims), dim=0) + starts = torch.cat((torch.zeros(1).type_as(ends), ends[:-1])) + self.param_slices = [slice(s.item(), e.item()) for s, e in zip(starts, ends)] + + # Create masked layers + layers = [torch.nn.Linear(input_dim + context_dim, hidden_dims[0])] + for i in range(1, len(hidden_dims)): + layers.append(torch.nn.Linear(hidden_dims[i - 1], hidden_dims[i])) + layers.append(torch.nn.Linear(hidden_dims[-1], self.output_multiplier)) + self.layers = torch.nn.ModuleList(layers) + + # Save the nonlinearity + self.f = nonlinearity + + def forward( + self, x: torch.Tensor, context: torch.Tensor + ) -> Union[Sequence[torch.Tensor], torch.Tensor]: + # We must be able to broadcast the size of the context over the input + context = context.expand(x.size()[:-1] + (context.size(-1),)) + + x = torch.cat([context, x], dim=-1) + return self._forward(x) + + def _forward(self, x: torch.Tensor) -> Union[Sequence[torch.Tensor], torch.Tensor]: + """ + The forward method + """ + h = x + for layer in self.layers[:-1]: + h = self.f(layer(h)) + h = self.layers[-1](h) + + # Shape the output, squeezing the parameter dimension if all ones + if self.output_multiplier == 1: + return h + else: + h = h.reshape(list(x.size()[:-1]) + [self.output_multiplier]) + + if self.count_params == 1: + return h + + else: + return tuple([h[..., s] for s in self.param_slices]) + + +class DenseNN(ConditionalDenseNN): + """ + An implementation of a simple dense feedforward network, for use in, e.g., some conditional flows such as + :class:`pyro.distributions.transforms.ConditionalPlanarFlow` and other unconditional flows such as + :class:`pyro.distributions.transforms.AffineCoupling` that do not require an autoregressive network. + + Example usage: + + >>> input_dim = 10 + >>> context_dim = 5 + >>> z = torch.rand(100, context_dim) + >>> nn = DenseNN(context_dim, [50], param_dims=[1, input_dim, input_dim]) + >>> a, b, c = nn(z) # parameters of size (100, 1), (100, 10), (100, 10) + + :param input_dim: the dimensionality of the input + :type input_dim: int + :param hidden_dims: the dimensionality of the hidden units per layer + :type hidden_dims: list[int] + :param param_dims: shape the output into parameters of dimension (p_n,) for p_n in param_dims + when p_n > 1 and dimension () when p_n == 1. The default is [1, 1], i.e. output two parameters of dimension (). + :type param_dims: list[int] + :param nonlinearity: The nonlinearity to use in the feedforward network such as torch.nn.ReLU(). Note that no + nonlinearity is applied to the final network output, so the output is an unbounded real number. + :type nonlinearity: torch.nn.module + + """ + + def __init__( + self, + input_dim: int, + hidden_dims: List[int], + param_dims: List[int] = [1, 1], + nonlinearity: torch.nn.Module = torch.nn.ReLU(), + ) -> None: + super(DenseNN, self).__init__( + input_dim, 0, hidden_dims, param_dims=param_dims, nonlinearity=nonlinearity + ) + + def forward(self, x: torch.Tensor) -> Union[Sequence[torch.Tensor], torch.Tensor]: # type: ignore[override] + return self._forward(x) diff --git a/pyro/source/pyro/nn/module.py b/pyro/source/pyro/nn/module.py new file mode 100644 index 0000000000000000000000000000000000000000..fd897e287776cd7330ba7853bbe5f1f31d98c433 --- /dev/null +++ b/pyro/source/pyro/nn/module.py @@ -0,0 +1,968 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +Pyro includes a class :class:`~pyro.nn.module.PyroModule`, a subclass of +:class:`torch.nn.Module`, whose attributes can be modified by Pyro effects. To +create a poutine-aware attribute, use either the :class:`PyroParam` struct or +the :class:`PyroSample` struct:: + + my_module = PyroModule() + my_module.x = PyroParam(torch.tensor(1.), constraint=constraints.positive) + my_module.y = PyroSample(dist.Normal(0, 1)) + +""" +import functools +import inspect +import warnings +import weakref + +try: + from torch._jit_internal import _copy_to_script_wrapper +except ImportError: + warnings.warn( + "Cannot find torch._jit_internal._copy_to_script_wrapper", ImportWarning + ) + + # Fall back to trivial decorator. + def _copy_to_script_wrapper(fn): + return fn + + +from collections import OrderedDict +from dataclasses import dataclass +from types import TracebackType +from typing import ( + TYPE_CHECKING, + Any, + Callable, + Dict, + Iterator, + List, + NamedTuple, + Optional, + Tuple, + Type, + TypeVar, + Union, +) + +import torch +from torch.distributions import constraints, transform_to +from typing_extensions import Concatenate, ParamSpec + +import pyro +import pyro.params.param_store +from pyro.ops.provenance import detach_provenance +from pyro.poutine.runtime import _PYRO_PARAM_STORE + +_MODULE_LOCAL_PARAMS: bool = False + +_P = ParamSpec("_P") +_T = TypeVar("_T") +_PyroModule = TypeVar("_PyroModule", bound="PyroModule") + +if TYPE_CHECKING: + from pyro.distributions.torch_distribution import TorchDistributionMixin + from pyro.params.param_store import StateDict + + +@pyro.settings.register("module_local_params", __name__, "_MODULE_LOCAL_PARAMS") +def _validate_module_local_params(value: bool) -> None: + assert isinstance(value, bool) + + +def _is_module_local_param_enabled() -> bool: + return pyro.settings.get("module_local_params") # type: ignore[no-any-return] + + +class PyroParam(NamedTuple): + """ + Declares a Pyro-managed learnable attribute of a :class:`PyroModule`, + similar to :func:`pyro.param `. + + This can be used either to set attributes of :class:`PyroModule` + instances:: + + assert isinstance(my_module, PyroModule) + my_module.x = PyroParam(torch.zeros(4)) # eager + my_module.y = PyroParam(lambda: torch.randn(4)) # lazy + my_module.z = PyroParam(torch.ones(4), # eager + constraint=constraints.positive, + event_dim=1) + + or EXPERIMENTALLY as a decorator on lazy initialization properties:: + + class MyModule(PyroModule): + @PyroParam + def x(self): + return torch.zeros(4) + + @PyroParam + def y(self): + return torch.randn(4) + + @PyroParam(constraint=constraints.real, event_dim=1) + def z(self): + return torch.ones(4) + + def forward(self): + return self.x + self.y + self.z # accessed like a @property + + :param init_value: Either a tensor for eager initialization, a callable for + lazy initialization, or None for use as a decorator. + :type init_value: torch.Tensor or callable returning a torch.Tensor or None + :param constraint: torch constraint, defaults to ``constraints.real``. + :type constraint: ~torch.distributions.constraints.Constraint + :param int event_dim: (optional) number of rightmost dimensions unrelated + to baching. Dimension to the left of this will be considered batch + dimensions; if the param statement is inside a subsampled plate, then + corresponding batch dimensions of the parameter will be correspondingly + subsampled. If unspecified, all dimensions will be considered event + dims and no subsampling will be performed. + """ + + init_value: Optional[Union[torch.Tensor, Callable[[], torch.Tensor]]] = None + constraint: constraints.Constraint = constraints.real + event_dim: Optional[int] = None + + # Support use as a decorator. + def __get__( + self, obj: Optional["PyroModule"], obj_type: Type["PyroModule"] + ) -> "PyroParam": + assert issubclass(obj_type, PyroModule) + if obj is None: + return self + + name = self.init_value.__name__ # type: ignore[union-attr] + if name not in obj.__dict__["_pyro_params"]: + init_value, constraint, event_dim = self + # bind method's self arg + init_value = functools.partial(init_value, obj) # type: ignore[arg-type,call-arg,misc,operator] + setattr(obj, name, PyroParam(init_value, constraint, event_dim)) + value: PyroParam = obj.__getattr__(name) + return value + + # Support decoration with optional kwargs, e.g. @PyroParam(event_dim=0). + def __call__( + self, init_value: Union[torch.Tensor, Callable[[], torch.Tensor]] + ) -> "PyroParam": + assert self.init_value is None + return PyroParam(init_value, self.constraint, self.event_dim) + + +@dataclass(frozen=True) +class PyroSample: + """ + Declares a Pyro-managed random attribute of a :class:`PyroModule`, similar + to :func:`pyro.sample `. + + This can be used either to set attributes of :class:`PyroModule` + instances:: + + assert isinstance(my_module, PyroModule) + my_module.x = PyroSample(Normal(0, 1)) # independent + my_module.y = PyroSample(lambda self: Normal(self.x, 1)) # dependent + my_module.z = PyroSample(lambda self: self.y ** 2) # deterministic dependent + + or EXPERIMENTALLY as a decorator on lazy initialization methods:: + + class MyModule(PyroModule): + @PyroSample + def x(self): + return Normal(0, 1) # independent + + @PyroSample + def y(self): + return Normal(self.x, 1) # dependent + + @PyroSample + def z(self): + return self.y ** 2 # deterministic dependent + + def forward(self): + return self.z # accessed like a @property + + :param prior: distribution object or function that inputs the + :class:`PyroModule` instance ``self`` and returns a distribution + object or a deterministic value. + """ + + prior: Union[ + "TorchDistributionMixin", + Callable[["PyroModule"], "TorchDistributionMixin"], + Callable[["PyroModule"], torch.Tensor], + ] + + def __post_init__(self) -> None: + if not hasattr(self.prior, "sample"): # if not a distribution + assert 1 == sum( + 1 + for p in inspect.signature(self.prior).parameters.values() + if p.default is inspect.Parameter.empty + ), "prior should take the single argument 'self'" + object.__setattr__(self, "name", getattr(self.prior, "__name__", None)) + self.name: Optional[str] + if self.name is not None: + # Ensure decorated function is accessible for pickling. + self.prior.__name__ = "_pyro_prior_" + self.prior.__name__ + qualname = self.prior.__qualname__.rsplit(".", 1) + qualname[-1] = self.prior.__name__ + self.prior.__qualname__ = ".".join(qualname) + + # Support use as a decorator. + def __get__( + self, obj: Optional["PyroModule"], obj_type: Type["PyroModule"] + ) -> "PyroSample": + assert issubclass(obj_type, PyroModule) + if obj is None: + return self + + if self.name is None: + for name in dir(obj_type): + if getattr(obj_type, name) is self: + self.name = name + break + else: + setattr(obj_type, self.prior.__name__, self.prior) # for pickling + + obj.__dict__["_pyro_samples"].setdefault(self.name, self.prior) + assert self.name is not None + value: PyroSample = obj.__getattr__(self.name) + return value + + +def _make_name(prefix: str, name: str) -> str: + return "{}.{}".format(prefix, name) if prefix else name + + +def _unconstrain( + constrained_value: Union[torch.Tensor, Callable[[], torch.Tensor]], + constraint: constraints.Constraint, +) -> torch.nn.Parameter: + with torch.no_grad(): + if callable(constrained_value): + constrained_value = constrained_value() + unconstrained_value = transform_to(constraint).inv(constrained_value.detach()) + return torch.nn.Parameter(unconstrained_value) + + +class _Context: + """ + Sometimes-active cache for ``PyroModule.__call__()`` contexts. + """ + + def __init__(self) -> None: + self.active = 0 + self.cache: Dict[str, torch.Tensor] = {} + self.used = False + if _is_module_local_param_enabled(): + self.param_state: "StateDict" = {"params": {}, "constraints": {}} + + def __enter__(self) -> None: + if not self.active and _is_module_local_param_enabled(): + self._param_ctx = pyro.get_param_store().scope(state=self.param_state) + self.param_state = self._param_ctx.__enter__() + self.active += 1 + self.used = True + + def __exit__( + self, + type: Optional[Type[BaseException]], + value: Optional[BaseException], + traceback: Optional[TracebackType], + ) -> None: + self.active -= 1 + if not self.active: + self.cache.clear() + if _is_module_local_param_enabled(): + self._param_ctx.__exit__(type, value, traceback) + del self._param_ctx + + def get(self, name: str) -> Optional[torch.Tensor]: + if self.active: + return self.cache.get(name) + return None + + def set(self, name: str, value: torch.Tensor) -> None: + if self.active: + self.cache[name] = value + + +def _get_pyro_params( + module: torch.nn.Module, +) -> Iterator[Tuple[str, Optional[torch.nn.Parameter]]]: + for name in module._parameters: + if name.endswith("_unconstrained"): + constrained_name = name[: -len("_unconstrained")] + if ( + isinstance(module, PyroModule) + and constrained_name in module._pyro_params + ): + yield constrained_name, getattr(module, constrained_name) + continue + yield name, module._parameters[name] + + +class _PyroModuleMeta(type): + _pyro_mixin_cache: Dict[Type[torch.nn.Module], Type["PyroModule"]] = {} + + # Unpickling helper to create an empty object of type PyroModule[Module]. + class _New: + def __init__(self, Module): + self.__class__ = PyroModule[Module] + + def __getitem__(cls, Module: Type[torch.nn.Module]) -> Type["PyroModule"]: + assert isinstance(Module, type) + assert issubclass(Module, torch.nn.Module) + if issubclass(Module, PyroModule): + return Module + if Module is torch.nn.Module: + return PyroModule + if Module in _PyroModuleMeta._pyro_mixin_cache: + return _PyroModuleMeta._pyro_mixin_cache[Module] + bases = [ + PyroModule[b] for b in Module.__bases__ if issubclass(b, torch.nn.Module) + ] + + class result(Module, *bases): # type: ignore[valid-type, misc] + # Unpickling helper to load an object of type PyroModule[Module]. + def __reduce__(self): + state = getattr(self, "__getstate__", self.__dict__.copy)() + return _PyroModuleMeta._New, (Module,), state + + result.__name__ = "Pyro" + Module.__name__ + _PyroModuleMeta._pyro_mixin_cache[Module] = result + return result + + +class PyroModule(torch.nn.Module, metaclass=_PyroModuleMeta): + """ + Subclass of :class:`torch.nn.Module` whose attributes can be modified by + Pyro effects. Attributes can be set using helpers :class:`PyroParam` and + :class:`PyroSample` , and methods can be decorated by :func:`pyro_method` . + + **Parameters** + + To create a Pyro-managed parameter attribute, set that attribute using + either :class:`torch.nn.Parameter` (for unconstrained parameters) or + :class:`PyroParam` (for constrained parameters). Reading that attribute + will then trigger a :func:`pyro.param ` statement. + For example:: + + # Create Pyro-managed parameter attributes. + my_module = PyroModule() + my_module.loc = nn.Parameter(torch.tensor(0.)) + my_module.scale = PyroParam(torch.tensor(1.), + constraint=constraints.positive) + # Read the attributes. + loc = my_module.loc # Triggers a pyro.param statement. + scale = my_module.scale # Triggers another pyro.param statement. + + Note that, unlike normal :class:`torch.nn.Module` s, :class:`PyroModule` s + should not be registered with :func:`pyro.module ` + statements. :class:`PyroModule` s can contain other :class:`PyroModule` s + and normal :class:`torch.nn.Module` s. Accessing a normal + :class:`torch.nn.Module` attribute of a :class:`PyroModule` triggers a + :func:`pyro.module ` statement. If multiple + :class:`PyroModule` s appear in a single Pyro model or guide, they should + be included in a single root :class:`PyroModule` for that model. + + :class:`PyroModule` s synchronize data with the param store at each + ``setattr``, ``getattr``, and ``delattr`` event, based on the nested name + of an attribute: + + - Setting ``mod.x = x_init`` tries to read ``x`` from the param store. If a + value is found in the param store, that value is copied into ``mod`` + and ``x_init`` is ignored; otherwise ``x_init`` is copied into both + ``mod`` and the param store. + - Reading ``mod.x`` tries to read ``x`` from the param store. If a + value is found in the param store, that value is copied into ``mod``; + otherwise ``mod``'s value is copied into the param store. Finally + ``mod`` and the param store agree on a single value to return. + - Deleting ``del mod.x`` removes a value from both ``mod`` and the param + store. + + Note two :class:`PyroModule` of the same name will both synchronize with + the global param store and thus contain the same data. When creating a + :class:`PyroModule`, then deleting it, then creating another with the same + name, the latter will be populated with the former's data from the param + store. To avoid this persistence, either ``pyro.clear_param_store()`` or + call :func:`clear` before deleting a :class:`PyroModule` . + + :class:`PyroModule` s can be saved and loaded either directly using + :func:`torch.save` / :func:`torch.load` or indirectly using the param + store's :meth:`~pyro.params.param_store.ParamStoreDict.save` / + :meth:`~pyro.params.param_store.ParamStoreDict.load` . Note that + :func:`torch.load` will be overridden by any values in the param store, so + it is safest to ``pyro.clear_param_store()`` before loading. + + **Samples** + + To create a Pyro-managed random attribute, set that attribute using the + :class:`PyroSample` helper, specifying a prior distribution. Reading that + attribute will then trigger a :func:`pyro.sample ` + statement. For example:: + + # Create Pyro-managed random attributes. + my_module.x = PyroSample(dist.Normal(0, 1)) + my_module.y = PyroSample(lambda self: dist.Normal(self.loc, self.scale)) + + # Sample the attributes. + x = my_module.x # Triggers a pyro.sample statement. + y = my_module.y # Triggers one pyro.sample + two pyro.param statements. + + Sampling is cached within each invocation of ``.__call__()`` or method + decorated by :func:`pyro_method` . Because sample statements can appear + only once in a Pyro trace, you should ensure that traced access to sample + attributes is wrapped in a single invocation of ``.__call__()`` or method + decorated by :func:`pyro_method` . + + To make an existing module probabilistic, you can create a subclass and + overwrite some parameters with :class:`PyroSample` s:: + + class RandomLinear(nn.Linear, PyroModule): # used as a mixin + def __init__(self, in_features, out_features): + super().__init__(in_features, out_features) + self.weight = PyroSample( + lambda self: dist.Normal(0, 1) + .expand([self.out_features, + self.in_features]) + .to_event(2)) + + **Mixin classes** + + :class:`PyroModule` can be used as a mixin class, and supports simple + syntax for dynamically creating mixins, for example the following are + equivalent:: + + # Version 1. create a named mixin class + class PyroLinear(nn.Linear, PyroModule): + pass + + m.linear = PyroLinear(m, n) + + # Version 2. create a dynamic mixin class + m.linear = PyroModule[nn.Linear](m, n) + + This notation can be used recursively to create Bayesian modules, e.g.:: + + model = PyroModule[nn.Sequential]( + PyroModule[nn.Linear](28 * 28, 100), + PyroModule[nn.Sigmoid](), + PyroModule[nn.Linear](100, 100), + PyroModule[nn.Sigmoid](), + PyroModule[nn.Linear](100, 10), + ) + assert isinstance(model, nn.Sequential) + assert isinstance(model, PyroModule) + + # Now we can be Bayesian about weights in the first layer. + model[0].weight = PyroSample( + prior=dist.Normal(0, 1).expand([28 * 28, 100]).to_event(2)) + guide = AutoDiagonalNormal(model) + + Note that ``PyroModule[...]`` does not recursively mix in + :class:`PyroModule` to submodules of the input ``Module``; hence we needed + to wrap each submodule of the ``nn.Sequential`` above. + + :param str name: Optional name for a root PyroModule. This is ignored in + sub-PyroModules of another PyroModule. + """ + + def __init__(self, name: str = "") -> None: + self._pyro_name = name + self._pyro_context = _Context() # shared among sub-PyroModules + self._pyro_params: OrderedDict[ + str, Tuple[constraints.Constraint, Optional[int]] + ] = OrderedDict() + self._pyro_samples: OrderedDict[str, PyroSample] = OrderedDict() + super().__init__() + + def add_module(self, name: str, module: Optional[torch.nn.Module]) -> None: + """ + Adds a child module to the current module. + """ + if isinstance(module, PyroModule): + module._pyro_set_supermodule( + _make_name(self._pyro_name, name), self._pyro_context + ) + super().add_module(name, module) + + def named_pyro_params( + self, prefix: str = "", recurse: bool = True + ) -> Iterator[Tuple[str, torch.nn.Parameter]]: + """ + Returns an iterator over PyroModule parameters, yielding both the + name of the parameter as well as the parameter itself. + + :param str prefix: prefix to prepend to all parameter names. + :param bool recurse: if True, then yields parameters of this module + and all submodules. Otherwise, yields only parameters that + are direct members of this module. + :returns: a generator which yields tuples containing the name and parameter + """ + gen = self._named_members(_get_pyro_params, prefix=prefix, recurse=recurse) + for elem in gen: + yield elem + + def _pyro_set_supermodule(self, name: str, context: _Context) -> None: + if _is_module_local_param_enabled() and pyro.settings.get("validate_poutine"): + self._check_module_local_param_usage() + self._pyro_name = name + self._pyro_context = context + for key, value in self._modules.items(): + if isinstance(value, PyroModule): + assert ( + not value._pyro_context.used + ), "submodule {} has executed outside of supermodule".format(name) + value._pyro_set_supermodule(_make_name(name, key), context) + + def _pyro_get_fullname(self, name: str) -> str: + assert self.__dict__["_pyro_context"].used, "fullname is not yet defined" + return _make_name(self.__dict__["_pyro_name"], name) + + def __call__(self, *args: Any, **kwargs: Any) -> Any: + with self._pyro_context: + result = super().__call__(*args, **kwargs) + if ( + pyro.settings.get("validate_poutine") + and not self._pyro_context.active + and _is_module_local_param_enabled() + ): + self._check_module_local_param_usage() + return result + + def _check_module_local_param_usage(self) -> None: + self_nn_params = set(id(p) for p in self.parameters()) + self_pyro_params = set( + id(p if not hasattr(p, "unconstrained") else p.unconstrained()) + for p in self._pyro_context.param_state["params"].values() + ) + if not self_pyro_params <= self_nn_params: + raise NotImplementedError( + "Support for global pyro.param statements in PyroModules " + "with local param mode enabled is not yet implemented." + ) + + def __getattr__(self, name: str) -> Any: + # PyroParams trigger pyro.param statements. + if "_pyro_params" in self.__dict__: + _pyro_params = self.__dict__["_pyro_params"] + if name in _pyro_params: + constraint, event_dim = _pyro_params[name] + unconstrained_value = getattr(self, name + "_unconstrained") + if self._pyro_context.active and not _is_module_local_param_enabled(): + fullname = self._pyro_get_fullname(name) + if fullname in _PYRO_PARAM_STORE: + if ( + _PYRO_PARAM_STORE._params[fullname] + is not unconstrained_value + ): + # Update PyroModule <--- ParamStore. + unconstrained_value = _PYRO_PARAM_STORE._params[fullname] + if not isinstance(unconstrained_value, torch.nn.Parameter): + # Update PyroModule ---> ParamStore (type only; data is preserved). + unconstrained_value = torch.nn.Parameter( + unconstrained_value + ) + _PYRO_PARAM_STORE._params[fullname] = ( + unconstrained_value + ) + _PYRO_PARAM_STORE._param_to_name[ + unconstrained_value + ] = fullname + super().__setattr__( + name + "_unconstrained", unconstrained_value + ) + else: + # Update PyroModule ---> ParamStore. + _PYRO_PARAM_STORE._constraints[fullname] = constraint + _PYRO_PARAM_STORE._params[fullname] = unconstrained_value + _PYRO_PARAM_STORE._param_to_name[unconstrained_value] = fullname + return pyro.param(fullname, event_dim=event_dim) + elif self._pyro_context.active and _is_module_local_param_enabled(): + # fake param statement to ensure any handlers of pyro.param are applied, + # even though we don't use the contents of the local parameter store + fullname = self._pyro_get_fullname(name) + constrained_value = transform_to(constraint)(unconstrained_value) + constrained_value.unconstrained = weakref.ref(unconstrained_value) + return pyro.poutine.runtime.effectful(type="param")( + lambda *_, **__: constrained_value + )( + fullname, + constraint=constraint, + event_dim=event_dim, + name=fullname, + ) + else: # Cannot determine supermodule and hence cannot compute fullname. + constrained_value = transform_to(constraint)(unconstrained_value) + constrained_value.unconstrained = weakref.ref(unconstrained_value) + return constrained_value + + # PyroSample trigger pyro.sample statements. + if "_pyro_samples" in self.__dict__: + _pyro_samples = self.__dict__["_pyro_samples"] + if name in _pyro_samples: + prior = _pyro_samples[name] + context = self._pyro_context + if context.active: + fullname = self._pyro_get_fullname(name) + value = context.get(fullname) + if value is None: + if not hasattr(prior, "sample"): # if not a distribution + prior = prior(self) + value = ( + pyro.deterministic(fullname, prior) + if isinstance(prior, torch.Tensor) + else pyro.sample(fullname, prior) + ) + context.set(fullname, value) + return value + else: # Cannot determine supermodule and hence cannot compute fullname. + if not hasattr(prior, "sample"): # if not a distribution + prior = prior(self) + return prior if isinstance(prior, torch.Tensor) else prior() + + result = super().__getattr__(name) + + # Regular nn.Parameters trigger pyro.param statements. + if isinstance(result, torch.nn.Parameter) and not name.endswith( + "_unconstrained" + ): + if self._pyro_context.active and not _is_module_local_param_enabled(): + pyro.param(self._pyro_get_fullname(name), result) + elif self._pyro_context.active and _is_module_local_param_enabled(): + # fake param statement to ensure any handlers of pyro.param are applied, + # even though we don't use the contents of the local parameter store + fullname = self._pyro_get_fullname(name) + pyro.poutine.runtime.effectful(type="param")(lambda *_, **__: result)( + fullname, result, constraint=constraints.real, name=fullname + ) + + if isinstance(result, torch.nn.Module): + if isinstance(result, PyroModule): + if not result._pyro_name: + # Update sub-PyroModules that were converted from nn.Modules in-place. + result._pyro_set_supermodule( + _make_name(self._pyro_name, name), self._pyro_context + ) + else: + # Regular nn.Modules trigger pyro.module statements. + if self._pyro_context.active and not _is_module_local_param_enabled(): + pyro.module(self._pyro_get_fullname(name), result) + elif self._pyro_context.active and _is_module_local_param_enabled(): + # fake module statement to ensure any handlers of pyro.module are applied, + # even though we don't use the contents of the local parameter store + fullname_module = self._pyro_get_fullname(name) + for param_name, param_value in result.named_parameters(): + fullname_param = pyro.params.param_store.param_with_module_name( + fullname_module, param_name + ) + pyro.poutine.runtime.effectful(type="param")( + lambda *_, **__: param_value + )( + fullname_param, + param_value, + constraint=constraints.real, + name=fullname_param, + ) + + return result + + def __setattr__( + self, + name: str, + value: Any, + ) -> None: + if isinstance(value, PyroModule): + # Create a new sub PyroModule, overwriting any old value. + try: + delattr(self, name) + except AttributeError: + pass + self.add_module(name, value) + return + + if isinstance(value, PyroParam): + # Create a new PyroParam, overwriting any old value. + try: + delattr(self, name) + except AttributeError: + pass + constrained_value, constraint, event_dim = value + assert constrained_value is not None + self._pyro_params[name] = constraint, event_dim + if self._pyro_context.active and not _is_module_local_param_enabled(): + fullname = self._pyro_get_fullname(name) + pyro.param( + fullname, + constrained_value, + constraint=constraint, + event_dim=event_dim, + ) + constrained_value = detach_provenance(pyro.param(fullname)) + unconstrained_value: torch.Tensor = constrained_value.unconstrained() # type: ignore[attr-defined] + if not isinstance(unconstrained_value, torch.nn.Parameter): + # Update PyroModule ---> ParamStore (type only; data is preserved). + unconstrained_value = torch.nn.Parameter(unconstrained_value) + _PYRO_PARAM_STORE._params[fullname] = unconstrained_value + _PYRO_PARAM_STORE._param_to_name[unconstrained_value] = fullname + elif self._pyro_context.active and _is_module_local_param_enabled(): + # fake param statement to ensure any handlers of pyro.param are applied, + # even though we don't use the contents of the local parameter store + fullname = self._pyro_get_fullname(name) + constrained_value = detach_provenance( + pyro.poutine.runtime.effectful(type="param")( + lambda *_, **__: ( + constrained_value() + if callable(constrained_value) + else constrained_value + ) + )( + fullname, + constraint=constraint, + event_dim=event_dim, + name=fullname, + ) + ) + unconstrained_value = _unconstrain(constrained_value, constraint) + else: # Cannot determine supermodule and hence cannot compute fullname. + unconstrained_value = _unconstrain(constrained_value, constraint) + super().__setattr__(name + "_unconstrained", unconstrained_value) + return + + if isinstance(value, torch.nn.Parameter): + # Create a new nn.Parameter, overwriting any old value. + try: + delattr(self, name) + except AttributeError: + pass + if self._pyro_context.active and not _is_module_local_param_enabled(): + fullname = self._pyro_get_fullname(name) + value = pyro.param(fullname, value) + if not isinstance(value, torch.nn.Parameter): + # Update PyroModule ---> ParamStore (type only; data is preserved). + value = torch.nn.Parameter(detach_provenance(value)) + _PYRO_PARAM_STORE._params[fullname] = value + _PYRO_PARAM_STORE._param_to_name[value] = fullname + elif self._pyro_context.active and _is_module_local_param_enabled(): + # fake param statement to ensure any handlers of pyro.param are applied, + # even though we don't use the contents of the local parameter store + fullname = self._pyro_get_fullname(name) + value = detach_provenance( + pyro.poutine.runtime.effectful(type="param")( + lambda *_, **__: value + )(fullname, value, constraint=constraints.real, name=fullname) + ) + super().__setattr__(name, value) + return + + if isinstance(value, torch.Tensor): + if name in self._pyro_params: + # Update value of an existing PyroParam. + constraint, event_dim = self._pyro_params[name] + unconstrained_value = getattr(self, name + "_unconstrained") + with torch.no_grad(): + unconstrained_value.data = transform_to(constraint).inv( + value.detach() + ) + return + + if isinstance(value, PyroSample): + # Create a new PyroSample, overwriting any old value. + try: + delattr(self, name) + except AttributeError: + pass + _pyro_samples = self.__dict__["_pyro_samples"] + _pyro_samples[name] = value.prior + return + + super().__setattr__(name, value) + + def __delattr__(self, name: str) -> None: + if name in self._parameters: + del self._parameters[name] + if self._pyro_context.used: + fullname = self._pyro_get_fullname(name) + if fullname in _PYRO_PARAM_STORE: + # Update PyroModule ---> ParamStore. + del _PYRO_PARAM_STORE[fullname] + return + + if name in self._pyro_params: + delattr(self, name + "_unconstrained") + del self._pyro_params[name] + if self._pyro_context.used: + fullname = self._pyro_get_fullname(name) + if fullname in _PYRO_PARAM_STORE: + # Update PyroModule ---> ParamStore. + del _PYRO_PARAM_STORE[fullname] + return + + if name in self._pyro_samples: + del self._pyro_samples[name] + return + + if name in self._modules: + del self._modules[name] + if self._pyro_context.used: + fullname = self._pyro_get_fullname(name) + for p in list(_PYRO_PARAM_STORE.keys()): + if p.startswith(fullname): + del _PYRO_PARAM_STORE[p] + return + + super().__delattr__(name) + + def __getstate__(self) -> Dict[str, Any]: + # Remove weakrefs in preparation for pickling. + for param in self.parameters(recurse=True): + param.__dict__.pop("unconstrained", None) + return getattr(super(), "__getstate__", self.__dict__.copy)() + + +def pyro_method( + fn: Callable[Concatenate[_PyroModule, _P], _T], +) -> Callable[Concatenate[_PyroModule, _P], _T]: + """ + Decorator for top-level methods of a :class:`PyroModule` to enable pyro + effects and cache ``pyro.sample`` statements. + + This should be applied to all public methods that read Pyro-managed + attributes, but is not needed for ``.forward()``. + """ + + @functools.wraps(fn) + def cached_fn(self: _PyroModule, *args: _P.args, **kwargs: _P.kwargs) -> _T: + with self._pyro_context: + return fn(self, *args, **kwargs) + + return cached_fn + + +def clear(mod: PyroModule) -> None: + """ + Removes data from both a :class:`PyroModule` and the param store. + + :param PyroModule mod: A module to clear. + """ + assert isinstance(mod, PyroModule) + for name in list(mod._pyro_params): + delattr(mod, name) + for name in list(mod._parameters): + delattr(mod, name) + for name in list(mod._modules): + delattr(mod, name) + + +def to_pyro_module_(m: torch.nn.Module, recurse: bool = True) -> None: + """ + Converts an ordinary :class:`torch.nn.Module` instance to a + :class:`PyroModule` **in-place**. + + This is useful for adding Pyro effects to third-party modules: no + third-party code needs to be modified. For example:: + + model = nn.Sequential( + nn.Linear(28 * 28, 100), + nn.Sigmoid(), + nn.Linear(100, 100), + nn.Sigmoid(), + nn.Linear(100, 10), + ) + to_pyro_module_(model) + assert isinstance(model, PyroModule[nn.Sequential]) + assert isinstance(model[0], PyroModule[nn.Linear]) + + # Now we can attempt to be fully Bayesian: + for m in model.modules(): + for name, value in list(m.named_parameters(recurse=False)): + setattr(m, name, PyroSample(prior=dist.Normal(0, 1) + .expand(value.shape) + .to_event(value.dim()))) + guide = AutoDiagonalNormal(model) + + :param torch.nn.Module m: A module instance. + :param bool recurse: Whether to convert submodules to :class:`PyroModules` . + """ + if not isinstance(m, torch.nn.Module): + raise TypeError("Expected an nn.Module instance but got a {}".format(type(m))) + + if isinstance(m, PyroModule): + if recurse: + for name, module in list(m._modules.items()): + if TYPE_CHECKING: + assert module is not None + to_pyro_module_(module) + setattr(m, name, module) + return + + # Change m's type in-place. + m.__class__ = PyroModule[m.__class__] + assert isinstance(m, PyroModule) + m._pyro_name = "" + m._pyro_context = _Context() + m._pyro_params = OrderedDict() + m._pyro_samples = OrderedDict() + + # Reregister parameters and submodules. + for name, param in list(m._parameters.items()): + setattr(m, name, param) + for name, module in list(m._modules.items()): + if recurse: + if TYPE_CHECKING: + assert module is not None + to_pyro_module_(module) + setattr(m, name, module) + + +# The following descriptor disables the ._flat_weights cache of +# torch.nn.RNNBase, forcing recomputation on each access of the ._flat_weights +# attribute. This is required if any attribute is set to a PyroParam or +# PyroSample. For motivation, see https://github.com/pyro-ppl/pyro/issues/2390 +class _FlatWeightsDescriptor: + def __get__( + self, + obj: Optional[torch.nn.RNNBase], + obj_type: Optional[Type[torch.nn.RNNBase]] = None, + ) -> Union["_FlatWeightsDescriptor", List]: + if obj is None: + return self + return [getattr(obj, name) for name in obj._flat_weights_names] + + def __set__(self, obj: object, value: Any) -> None: + pass # Ignore value. + + +PyroModule[torch.nn.RNNBase]._flat_weights = _FlatWeightsDescriptor() # type: ignore[attr-defined] + + +# pyro module list +# using pyro.nn.PyroModule[torch.nn.ModuleList] can cause issues when +# slice-indexing nested PyroModuleLists, so we define a separate PyroModuleList +# class that overwrites the __getitem__ method to return a torch.nn.ModuleList +# to not use self.__class__ in __getitem__, as that would call the +# PyroModule.__init__ without the parent module context, leading to a loss +# of the parent module's _pyro_name, and eventually, errors during sampling +# as parameter names may not be unique anymore +# The scenario is rare but happend. +# The fix could not be applied in torch directly, which is why we have to deal +# with it here, see https://github.com/pytorch/pytorch/issues/121008 +class PyroModuleList(torch.nn.ModuleList, PyroModule): + def __init__(self, modules): + super().__init__(modules) + + @_copy_to_script_wrapper + def __getitem__( + self, idx: Union[int, slice] + ) -> Union[torch.nn.Module, "PyroModuleList"]: + if isinstance(idx, slice): + # return self.__class__(list(self._modules.values())[idx]) + return torch.nn.ModuleList(list(self._modules.values())[idx]) + else: + return self._modules[self._get_abs_string_index(idx)] + + +_PyroModuleMeta._pyro_mixin_cache[torch.nn.ModuleList] = PyroModuleList diff --git a/pyro/source/pyro/ops/__init__.py b/pyro/source/pyro/ops/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/pyro/ops/arrowhead.py b/pyro/source/pyro/ops/arrowhead.py new file mode 100644 index 0000000000000000000000000000000000000000..70c07bcb99b6121080d1b808873254f73e482ba6 --- /dev/null +++ b/pyro/source/pyro/ops/arrowhead.py @@ -0,0 +1,127 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from collections import namedtuple + +import torch + +SymmArrowhead = namedtuple("SymmArrowhead", ["top", "bottom_diag"]) +TriuArrowhead = namedtuple("TriuArrowhead", ["top", "bottom_diag"]) + + +def sqrt(x): + """ + EXPERIMENTAL Computes the upper triangular square root of an + symmetric arrowhead matrix. + + :param SymmArrowhead x: an symmetric arrowhead matrix + :return: the square root of `x` + :rtype: TriuArrowhead + """ + assert isinstance(x, SymmArrowhead) + head_size = x.top.size(0) + if head_size == 0: + return TriuArrowhead(x.top, x.bottom_diag.sqrt()) + + A, B = x.top[:, :head_size], x.top[:, head_size:] + # NB: the complexity is O(N * head_size^2) + # ref: https://en.wikipedia.org/wiki/Schur_complement#Background + Dsqrt = x.bottom_diag.sqrt() + + # On cholesky error, retry with smaller tail part B. + num_attempts = 6 + for i in range(num_attempts): + B_Dsqrt = B / Dsqrt.unsqueeze(-2) # shape: head_size x N + schur_complement = A - B_Dsqrt.matmul( + B_Dsqrt.t() + ) # complexity: head_size^2 x N + # we will decompose schur_complement to U @ U.T (so that the sqrt matrix + # is upper triangular) using some `flip` operators: + # flip(cholesky(flip(schur_complement))) + try: + top_left = torch.flip( + torch.linalg.cholesky(torch.flip(schur_complement, (-2, -1))), (-2, -1) + ) + break + except RuntimeError: + B = B / 2 + continue + raise RuntimeError( + "Singular schur complement in computing Cholesky of the input" + " arrowhead matrix" + ) + + top_right = B_Dsqrt + top = torch.cat([top_left, top_right], -1) + bottom_diag = Dsqrt + return TriuArrowhead(top, bottom_diag) + + +def triu_inverse(x): + """ + EXPERIMENTAL Computes the inverse of an upper-triangular arrowhead matrix. + + :param TriuArrowhead x: an upper-triangular arrowhead matrix. + :return: the inverse of `x` + :rtype: TriuArrowhead + """ + assert isinstance(x, TriuArrowhead) + head_size = x.top.size(0) + if head_size == 0: + return TriuArrowhead(x.top, x.bottom_diag.reciprocal()) + + A, B = x.top[:, :head_size], x.top[:, head_size:] + B_Dinv = B / x.bottom_diag.unsqueeze(-2) + + identity = torch.eye(head_size, dtype=A.dtype, device=A.device) + top_left = torch.linalg.solve_triangular(A, identity, upper=True) + top_right = -top_left.matmul(B_Dinv) # complexity: head_size^2 x N + top = torch.cat([top_left, top_right], -1) + bottom_diag = x.bottom_diag.reciprocal() + return TriuArrowhead(top, bottom_diag) + + +def triu_matvecmul(x, y, transpose=False): + """ + EXPERIMENTAL Computes matrix-vector product of an upper-triangular + arrowhead matrix `x` and a vector `y`. + + :param TriuArrowhead x: an upper-triangular arrowhead matrix. + :param torch.Tensor y: a 1D tensor + :return: matrix-vector product of `x` and `y` + :rtype: TriuArrowhead + """ + assert isinstance(x, TriuArrowhead) + head_size = x.top.size(0) + if transpose: + z = x.top.transpose(-2, -1).matmul(y[:head_size]) + # here we exploit the diagonal structure of the bottom right part + # of arrowhead_sqrt matrix; so the complexity is still O(N) + top = z[:head_size] + bottom = z[head_size:] + x.bottom_diag * y[head_size:] + else: + top = x.top.matmul(y) + bottom = x.bottom_diag * y[head_size:] + return torch.cat([top, bottom], 0) + + +def triu_gram(x): + """ + EXPERIMENTAL Computes the gram matrix `x.T @ x` from an upper-triangular + arrowhead matrix `x`. + + :param TriuArrowhead x: an upper-triangular arrowhead matrix. + :return: the square of `x` + :rtype: TriuArrowhead + """ + assert isinstance(x, TriuArrowhead) + head_size = x.top.size(0) + if head_size == 0: + return x.bottom_diag.pow(2) + + A, B = x.top[:, :head_size], x.top[:, head_size:] + top = A.t().matmul(x.top) + bottom_left = top[:, head_size:].t() + # the following matmul operator is O(N^2 x head_size) + bottom_right = B.t().matmul(B) + x.bottom_diag.pow(2).diag() + return torch.cat([top, torch.cat([bottom_left, bottom_right], -1)], 0) diff --git a/pyro/source/pyro/ops/contract.py b/pyro/source/pyro/ops/contract.py new file mode 100644 index 0000000000000000000000000000000000000000..9a2338630898117655d03f2d8c985538cf3a46f5 --- /dev/null +++ b/pyro/source/pyro/ops/contract.py @@ -0,0 +1,574 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import itertools +import warnings +from collections import OrderedDict, defaultdict + +import opt_einsum +import torch +from opt_einsum import shared_intermediates + +from pyro.ops.rings import BACKEND_TO_RING, LogRing +from pyro.util import ignore_jit_warnings + + +def _check_plates_are_sensible(output_dims, nonoutput_ordinal): + if output_dims and nonoutput_ordinal: + raise ValueError( + "It is nonsensical to preserve a plated dim without preserving " + "all of that dim's plates, but found '{}' without '{}'".format( + output_dims, ",".join(nonoutput_ordinal) + ) + ) + + +def _check_tree_structure(parent, leaf): + if parent == leaf: + raise NotImplementedError( + "Expected tree-structured plate nesting, but found " + "dependencies on independent plates [{}]. " + "Try converting one of the vectorized plates to a sequential plate (but beware " + "exponential cost in the size of the sequence)".format( + ", ".join(getattr(f, "name", str(f)) for f in leaf) + ) + ) + + +def _partition_terms(ring, terms, dims): + """ + Given a list of terms and a set of contraction dims, partitions the terms + up into sets that must be contracted together. By separating these + components we avoid broadcasting. + + This function should be deterministic and free of side effects. + """ + # Construct a bipartite graph between terms and the dims in which they + # are enumerated. This conflates terms and dims (tensors and ints). + neighbors = OrderedDict([(t, []) for t in terms] + [(d, []) for d in sorted(dims)]) + for term in terms: + for dim in term._pyro_dims: + if dim in dims: + neighbors[term].append(dim) + neighbors[dim].append(term) + + # Partition the bipartite graph into connected components for contraction. + components = [] + while neighbors: + v, pending = neighbors.popitem() + component = OrderedDict([(v, None)]) # used as an OrderedSet + for v in pending: + component[v] = None + while pending: + v = pending.pop() + for v in neighbors.pop(v): + if v not in component: + component[v] = None + pending.append(v) + + # Split this connected component into tensors and dims. + component_terms = [v for v in component if isinstance(v, torch.Tensor)] + if component_terms: + component_dims = set( + v for v in component if not isinstance(v, torch.Tensor) + ) + components.append((component_terms, component_dims)) + return components + + +def _contract_component(ring, tensor_tree, sum_dims, target_dims): + """ + Contract out ``sum_dims - target_dims`` in a tree of tensors in-place, via + message passing. This reduces all tensors down to a single tensor in the + minimum plate context. + + This function should be deterministic. + This function has side-effects: it modifies ``tensor_tree``. + + :param pyro.ops.rings.Ring ring: an algebraic ring defining tensor + operations. + :param OrderedDict tensor_tree: a dictionary mapping ordinals to lists of + tensors. An ordinal is a frozenset of ``CondIndepStack`` frames. + :param set sum_dims: the complete set of sum-contractions dimensions + (indexed from the right). This is needed to distinguish sum-contraction + dimensions from product-contraction dimensions. + :param set target_dims: An subset of ``sum_dims`` that should be preserved + in the result. + :return: a pair ``(ordinal, tensor)`` + :rtype: tuple of frozenset and torch.Tensor + """ + # Group sum dims by ordinal. + dim_to_ordinal = {} + for t, terms in tensor_tree.items(): + for term in terms: + for dim in sum_dims.intersection(term._pyro_dims): + dim_to_ordinal[dim] = dim_to_ordinal.get(dim, t) & t + dims_tree = defaultdict(set) + for dim, t in dim_to_ordinal.items(): + dims_tree[t].add(dim) + + # Recursively combine terms in different plate contexts. + local_terms = [] + local_dims = target_dims.copy() + local_ordinal = frozenset() + min_ordinal = frozenset.intersection(*tensor_tree) + while any(dims_tree.values()): + # Arbitrarily deterministically choose a leaf. + leaf = max(tensor_tree, key=len) + leaf_terms = tensor_tree.pop(leaf) + leaf_dims = dims_tree.pop(leaf, set()) + + # Split terms at the current ordinal into connected components. + for terms, dims in _partition_terms(ring, leaf_terms, leaf_dims): + # Eliminate sum dims via a sumproduct contraction. + term = ring.sumproduct(terms, dims - local_dims) + + # Eliminate extra plate dims via product contractions. + if leaf == min_ordinal: + parent = leaf + else: + pending_dims = sum_dims.intersection(term._pyro_dims) + parent = frozenset.union( + *(t for t, d in dims_tree.items() if d & pending_dims) + ) + _check_tree_structure(parent, leaf) + contract_frames = leaf - parent + contract_dims = dims & local_dims + if contract_dims: + term, local_term = ring.global_local( + term, contract_dims, contract_frames + ) + local_terms.append(local_term) + local_dims |= sum_dims.intersection(local_term._pyro_dims) + local_ordinal |= leaf + else: + term = ring.product(term, contract_frames) + tensor_tree.setdefault(parent, []).append(term) + + # Extract single tensor at root ordinal. + assert len(tensor_tree) == 1 + ordinal, (term,) = tensor_tree.popitem() + assert ordinal == min_ordinal + + # Perform optional localizing pass. + if local_terms: + assert target_dims + local_terms.append(term) + term = ring.sumproduct(local_terms, local_dims - target_dims) + ordinal |= local_ordinal + + return ordinal, term + + +def contract_tensor_tree(tensor_tree, sum_dims, cache=None, ring=None): + """ + Contract out ``sum_dims`` in a tree of tensors via message passing. + This partially contracts out plate dimensions. + + This function should be deterministic and free of side effects. + + :param OrderedDict tensor_tree: a dictionary mapping ordinals to lists of + tensors. An ordinal is a frozenset of ``CondIndepStack`` frames. + :param set sum_dims: the complete set of sum-contractions dimensions + (indexed from the right). This is needed to distinguish sum-contraction + dimensions from product-contraction dimensions. + :param dict cache: an optional :func:`~opt_einsum.shared_intermediates` + cache. + :param pyro.ops.rings.Ring ring: an optional algebraic ring defining tensor + operations. + :returns: A contracted version of ``tensor_tree`` + :rtype: OrderedDict + """ + assert isinstance(tensor_tree, OrderedDict) + assert isinstance(sum_dims, set) + + if ring is None: + ring = LogRing(cache) + + ordinals = {term: t for t, terms in tensor_tree.items() for term in terms} + all_terms = [term for terms in tensor_tree.values() for term in terms] + contracted_tree = OrderedDict() + + # Split this tensor tree into connected components. + for terms, dims in _partition_terms(ring, all_terms, sum_dims): + component = OrderedDict() + for term in terms: + component.setdefault(ordinals[term], []).append(term) + + # Contract this connected component down to a single tensor. + ordinal, term = _contract_component(ring, component, dims, set()) + contracted_tree.setdefault(ordinal, []).append(term) + + return contracted_tree + + +def contract_to_tensor( + tensor_tree, sum_dims, target_ordinal=None, target_dims=None, cache=None, ring=None +): + """ + Contract out ``sum_dims`` in a tree of tensors, via message + passing. This reduces all terms down to a single tensor in the plate + context specified by ``target_ordinal``, optionally preserving sum + dimensions ``target_dims``. + + This function should be deterministic and free of side effects. + + :param OrderedDict tensor_tree: a dictionary mapping ordinals to lists of + tensors. An ordinal is a frozenset of ``CondIndepStack`` frames. + :param set sum_dims: the complete set of sum-contractions dimensions + (indexed from the right). This is needed to distinguish sum-contraction + dimensions from product-contraction dimensions. + :param frozenset target_ordinal: An optional ordinal to which the result + will be contracted or broadcasted. + :param set target_dims: An optional subset of ``sum_dims`` that should be + preserved in the result. + :param dict cache: an optional :func:`~opt_einsum.shared_intermediates` + cache. + :param pyro.ops.rings.Ring ring: an optional algebraic ring defining tensor + operations. + :returns: a single tensor + :rtype: torch.Tensor + """ + if target_ordinal is None: + target_ordinal = frozenset() + if target_dims is None: + target_dims = set() + assert isinstance(tensor_tree, OrderedDict) + assert isinstance(sum_dims, set) + assert isinstance(target_ordinal, frozenset) + assert isinstance(target_dims, set) and target_dims <= sum_dims + if ring is None: + ring = LogRing(cache) + + ordinals = {term: t for t, terms in tensor_tree.items() for term in terms} + all_terms = [term for terms in tensor_tree.values() for term in terms] + contracted_terms = [] + + # Split this tensor tree into connected components. + modulo_total = bool(target_dims) + for terms, dims in _partition_terms(ring, all_terms, sum_dims): + if modulo_total and dims.isdisjoint(target_dims): + continue + component = OrderedDict() + for term in terms: + component.setdefault(ordinals[term], []).append(term) + + # Contract this connected component down to a single tensor. + ordinal, term = _contract_component(ring, component, dims, target_dims & dims) + _check_plates_are_sensible( + target_dims.intersection(term._pyro_dims), ordinal - target_ordinal + ) + + # Eliminate extra plate dims via product contractions. + contract_frames = ordinal - target_ordinal + if contract_frames: + assert not sum_dims.intersection(term._pyro_dims) + term = ring.product(term, contract_frames) + + contracted_terms.append(term) + + # Combine contracted tensors via product, then broadcast. + term = ring.sumproduct(contracted_terms, set()) + assert sum_dims.intersection(term._pyro_dims) <= target_dims + return ring.broadcast(term, target_ordinal) + + +def einsum(equation, *operands, **kwargs): + """ + Generalized plated sum-product algorithm via tensor variable elimination. + + This generalizes :func:`~pyro.ops.einsum.contract` in two ways: + + 1. Multiple outputs are allowed, and intermediate results can be shared. + 2. Inputs and outputs can be plated along symbols given in ``plates``; + reductions along ``plates`` are product reductions. + + The best way to understand this function is to try the examples below, + which show how :func:`einsum` calls can be implemented as multiple calls + to :func:`~pyro.ops.einsum.contract` (which is generally more expensive). + + To illustrate multiple outputs, note that the following are equivalent:: + + z1, z2, z3 = einsum('ab,bc->a,b,c', x, y) # multiple outputs + + z1 = contract('ab,bc->a', x, y) + z2 = contract('ab,bc->b', x, y) + z3 = contract('ab,bc->c', x, y) + + To illustrate plated inputs, note that the following are equivalent:: + + assert len(x) == 3 and len(y) == 3 + z = einsum('ab,ai,bi->b', w, x, y, plates='i') + + z = contract('ab,a,a,a,b,b,b->b', w, *x, *y) + + When a sum dimension `a` always appears with a plate dimension `i`, + then `a` corresponds to a distinct symbol for each slice of `a`. Thus + the following are equivalent:: + + assert len(x) == 3 and len(y) == 3 + z = einsum('ai,ai->', x, y, plates='i') + + z = contract('a,b,c,a,b,c->', *x, *y) + + When such a sum dimension appears in the output, it must be + accompanied by all of its plate dimensions, e.g. the following are + equivalent:: + + assert len(x) == 3 and len(y) == 3 + z = einsum('abi,abi->bi', x, y, plates='i') + + z0 = contract('ab,ac,ad,ab,ac,ad->b', *x, *y) + z1 = contract('ab,ac,ad,ab,ac,ad->c', *x, *y) + z2 = contract('ab,ac,ad,ab,ac,ad->d', *x, *y) + z = torch.stack([z0, z1, z2]) + + Note that each plate slice through the output is multilinear in all plate + slices through all inptus, thus e.g. batch matrix multiply would be + implemented *without* ``plates``, so the following are all equivalent:: + + xy = einsum('abc,acd->abd', x, y, plates='') + xy = torch.stack([xa.mm(ya) for xa, ya in zip(x, y)]) + xy = torch.bmm(x, y) + + Among all valid equations, some computations are polynomial in the sizes of + the input tensors and other computations are exponential in the sizes of + the input tensors. This function raises :py:class:`NotImplementedError` + whenever the computation is exponential. + + :param str equation: An einsum equation, optionally with multiple outputs. + :param torch.Tensor operands: A collection of tensors. + :param str plates: An optional string of plate symbols. + :param str backend: An optional einsum backend, defaults to 'torch'. + :param dict cache: An optional :func:`~opt_einsum.shared_intermediates` + cache. + :param bool modulo_total: Optionally allow einsum to arbitrarily scale + each result plate, which can significantly reduce computation. This is + safe to set whenever each result plate denotes a nonnormalized + probability distribution whose total is not of interest. + :return: a tuple of tensors of requested shape, one entry per output. + :rtype: tuple + :raises ValueError: if tensor sizes mismatch or an output requests a + plated dim without that dim's plates. + :raises NotImplementedError: if contraction would have cost exponential in + the size of any input tensor. + """ + # Extract kwargs. + cache = kwargs.pop("cache", None) + plates = kwargs.pop("plates", "") + backend = kwargs.pop("backend", "torch") + modulo_total = kwargs.pop("modulo_total", False) + try: + Ring = BACKEND_TO_RING[backend] + except KeyError as e: + raise NotImplementedError( + "\n".join( + ["Only the following pyro backends are currently implemented:"] + + list(BACKEND_TO_RING) + ) + ) from e + + # Parse generalized einsum equation. + if "." in equation: + raise NotImplementedError("ubsersum does not yet support ellipsis notation") + inputs, outputs = equation.split("->") + inputs = inputs.split(",") + outputs = outputs.split(",") + assert len(inputs) == len(operands) + assert all(isinstance(x, torch.Tensor) for x in operands) + if not modulo_total and any(outputs): + raise NotImplementedError( + "Try setting modulo_total=True and ensuring that your use case " + "allows an arbitrary scale factor on each result plate." + ) + if len(operands) != len(set(operands)): + operands = [x[...] for x in operands] # ensure tensors are unique + + # Check sizes. + with ignore_jit_warnings(): + dim_to_size = {} + for dims, term in zip(inputs, operands): + for dim, size in zip(dims, map(int, term.shape)): + old = dim_to_size.setdefault(dim, size) + if old != size: + raise ValueError( + "Dimension size mismatch at dim '{}': {} vs {}".format( + dim, size, old + ) + ) + + # Construct a tensor tree shared by all outputs. + tensor_tree = OrderedDict() + plates = frozenset(plates) + for dims, term in zip(inputs, operands): + assert len(dims) == term.dim() + term._pyro_dims = dims + ordinal = plates.intersection(dims) + tensor_tree.setdefault(ordinal, []).append(term) + + # Compute outputs, sharing intermediate computations. + results = [] + with shared_intermediates(cache) as cache: + ring = Ring(cache, dim_to_size=dim_to_size) + for output in outputs: + sum_dims = set(output).union(*inputs) - set(plates) + term = contract_to_tensor( + tensor_tree, + sum_dims, + target_ordinal=plates.intersection(output), + target_dims=sum_dims.intersection(output), + ring=ring, + ) + if term._pyro_dims != output: + term = term.permute(*map(term._pyro_dims.index, output)) + term._pyro_dims = output + results.append(term) + return tuple(results) + + +def ubersum(equation, *operands, **kwargs): + """ + Deprecated, use :func:`einsum` instead. + """ + warnings.warn( + "'ubersum' is deprecated, use 'pyro.ops.contract.einsum' instead", + DeprecationWarning, + ) + if "batch_dims" in kwargs: + warnings.warn( + "'batch_dims' is deprecated, use 'plates' instead", DeprecationWarning + ) + kwargs["plates"] = kwargs.pop("batch_dims") + kwargs.setdefault("backend", "pyro.ops.einsum.torch_log") + return einsum(equation, *operands, **kwargs) + + +def _select(tensor, dims, indices): + for dim, index in zip(dims, indices): + tensor = tensor.select(dim, index) + return tensor + + +class _DimUnroller: + """ + Object to map plated dims to collections of unrolled dims. + + :param dict dim_to_ordinal: a mapping from contraction dim to the set of + plates over which the contraction dim is plated. + """ + + def __init__(self, dim_to_ordinal): + self._plates = { + d: tuple(sorted(ordinal)) for d, ordinal in dim_to_ordinal.items() + } + self._symbols = map(opt_einsum.get_symbol, itertools.count()) + self._map = {} + + def __call__(self, dim, indices): + """ + Converts a plate dim + plate indices to a unrolled dim. + + :param str dim: a plate dimension to unroll + :param dict indices: a mapping from plate dimension to int + :return: a unrolled dim + :rtype: str + """ + plate = self._plates.get(dim, ()) + index = tuple(indices[d] for d in plate) + key = dim, index + if key in self._map: + return self._map[key] + normal_dim = next(self._symbols) + self._map[key] = normal_dim + return normal_dim + + +def naive_ubersum(equation, *operands, **kwargs): + """ + Naive reference implementation of :func:`ubersum` via unrolling. + + This implementation should never raise ``NotImplementedError``. + This implementation should agree with :func:`ubersum` whenver + :func:`ubersum` does not raise ``NotImplementedError``. + """ + # Parse equation, without loss of generality assuming a single output. + inputs, outputs = equation.split("->") + outputs = outputs.split(",") + if len(outputs) > 1: + return tuple( + naive_ubersum(inputs + "->" + output, *operands, **kwargs)[0] + for output in outputs + ) + (output,) = outputs + inputs = inputs.split(",") + backend = kwargs.pop("backend", "pyro.ops.einsum.torch_log") + + # Split dims into plate dims, contraction dims, and dims to keep. + plates = set(kwargs.pop("plates", "")) + if not plates: + result = opt_einsum.contract(equation, *operands, backend=backend) + return (result,) + output_dims = set(output) + + # Collect sizes of all dimensions. + sizes = {} + for input_, operand in zip(inputs, operands): + for dim, size in zip(input_, operand.shape): + old = sizes.setdefault(dim, size) + if old != size: + raise ValueError( + "Dimension size mismatch at dim '{}': {} vs {}".format( + dim, size, old + ) + ) + + # Compute plate context for each non-plate dim, by convention the + # intersection over all plate contexts of tensors in which the dim appears. + dim_to_ordinal = {} + for dims in map(set, inputs): + ordinal = dims & plates + for dim in dims - plates: + dim_to_ordinal[dim] = dim_to_ordinal.get(dim, ordinal) & ordinal + for dim in output_dims - plates: + _check_plates_are_sensible({dim}, dim_to_ordinal[dim] - output_dims) + + # Unroll by replicating along plate dimensions. + unroll_dim = _DimUnroller(dim_to_ordinal) + flat_inputs = [] + flat_operands = [] + for input_, operand in zip(inputs, operands): + local_dims = [d for d in input_ if d in plates] + offsets = [input_.index(d) - len(input_) for d in local_dims] + for index in itertools.product(*(range(sizes[d]) for d in local_dims)): + flat_inputs.append( + "".join( + unroll_dim(d, dict(zip(local_dims, index))) + for d in input_ + if d not in plates + ) + ) + flat_operands.append(_select(operand, offsets, index)) + + # Defer to unplated einsum. + result = torch.empty( + torch.Size(sizes[d] for d in output), + dtype=operands[0].dtype, + device=operands[0].device, + ) + local_dims = [d for d in output if d in plates] + offsets = [output.index(d) - len(output) for d in local_dims] + for index in itertools.product(*(range(sizes[d]) for d in local_dims)): + flat_output = "".join( + unroll_dim(d, dict(zip(local_dims, index))) + for d in output + if d not in plates + ) + flat_equation = ",".join(flat_inputs) + "->" + flat_output + flat_result = opt_einsum.contract( + flat_equation, *flat_operands, backend=backend + ) + if not local_dims: + result = flat_result + break + _select(result, offsets, index).copy_(flat_result) + return (result,) diff --git a/pyro/source/pyro/ops/dual_averaging.py b/pyro/source/pyro/ops/dual_averaging.py new file mode 100644 index 0000000000000000000000000000000000000000..1df098dcada559af56685b31b6e5e083cdfd8ff4 --- /dev/null +++ b/pyro/source/pyro/ops/dual_averaging.py @@ -0,0 +1,79 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + + +class DualAveraging: + """ + Dual Averaging is a scheme to solve convex optimization problems. It belongs + to a class of subgradient methods which uses subgradients to update parameters + (in primal space) of a model. Under some conditions, the averages of generated + parameters during the scheme are guaranteed to converge to an optimal value. + However, a counter-intuitive aspect of traditional subgradient methods is + "new subgradients enter the model with decreasing weights" (see :math:`[1]`). + Dual Averaging scheme solves that phenomenon by updating parameters using + weights equally for subgradients (which lie in a dual space), hence we have + the name "dual averaging". + + This class implements a dual averaging scheme which is adapted for Markov chain + Monte Carlo (MCMC) algorithms. To be more precise, we will replace subgradients + by some statistics calculated during an MCMC trajectory. In addition, + introducing some free parameters such as ``t0`` and ``kappa`` is helpful and + still guarantees the convergence of the scheme. + + References + + [1] `Primal-dual subgradient methods for convex problems`, + Yurii Nesterov + + [2] `The No-U-turn sampler: adaptively setting path lengths in Hamiltonian Monte Carlo`, + Matthew D. Hoffman, Andrew Gelman + + :param float prox_center: A "prox-center" parameter introduced in :math:`[1]` + which pulls the primal sequence towards it. + :param float t0: A free parameter introduced in :math:`[2]` + that stabilizes the initial steps of the scheme. + :param float kappa: A free parameter introduced in :math:`[2]` + that controls the weights of steps of the scheme. + For a small ``kappa``, the scheme will quickly forget states + from early steps. This should be a number in :math:`(0.5, 1]`. + :param float gamma: A free parameter which controls the speed + of the convergence of the scheme. + """ + + def __init__(self, prox_center=0, t0=10, kappa=0.75, gamma=0.05): + self.prox_center = prox_center + self.t0 = t0 + self.kappa = kappa + self.gamma = gamma + self.reset() + + def reset(self): + self._x_avg = 0 # average of primal sequence + self._g_avg = 0 # average of dual sequence + self._t = 0 + + def step(self, g): + """ + Updates states of the scheme given a new statistic/subgradient ``g``. + + :param float g: A statistic calculated during an MCMC trajectory or subgradient. + """ + self._t += 1 + # g_avg = (g_1 + ... + g_t) / t + self._g_avg = (1 - 1 / (self._t + self.t0)) * self._g_avg + g / ( + self._t + self.t0 + ) + # According to formula (3.4) of [1], we have + # x_t = argmin{ g_avg . x + loc_t . |x - x0|^2 }, + # where loc_t := beta_t / t, beta_t := (gamma/2) * sqrt(t) + self._x_t = self.prox_center - (self._t**0.5) / self.gamma * self._g_avg + # weight for the new x_t + weight_t = self._t ** (-self.kappa) + self._x_avg = (1 - weight_t) * self._x_avg + weight_t * self._x_t + + def get_state(self): + r""" + Returns the latest :math:`x_t` and average of + :math:`\left\{x_i\right\}_{i=1}^t` in primal space. + """ + return self._x_t, self._x_avg diff --git a/pyro/source/pyro/ops/einsum/__init__.py b/pyro/source/pyro/ops/einsum/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..93f568c0e9c2cbb6c5412d3e79759321a09fc040 --- /dev/null +++ b/pyro/source/pyro/ops/einsum/__init__.py @@ -0,0 +1,49 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import opt_einsum + +from pyro.util import ignore_jit_warnings + +_PATH_CACHE = {} + + +def contract_expression(equation, *shapes, **kwargs): + """ + Wrapper around :func:`opt_einsum.contract_expression` that optionally uses + Pyro's cheap optimizer and optionally caches contraction paths. + + :param bool cache_path: whether to cache the contraction path. + Defaults to True. + """ + # memoize the contraction path + cache_path = kwargs.pop("cache_path", True) + if cache_path: + kwargs_key = tuple(kwargs.items()) + key = equation, shapes, kwargs_key + if key in _PATH_CACHE: + return _PATH_CACHE[key] + + expr = opt_einsum.contract_expression(equation, *shapes, **kwargs) + if cache_path: + _PATH_CACHE[key] = expr + return expr + + +def contract(equation, *operands, **kwargs): + """ + Wrapper around :func:`opt_einsum.contract` that optionally uses Pyro's + cheap optimizer and optionally caches contraction paths. + + :param bool cache_path: whether to cache the contraction path. + Defaults to True. + """ + backend = kwargs.pop("backend", "numpy") + out = kwargs.pop("out", None) + shapes = [tuple(t.shape) for t in operands] + with ignore_jit_warnings(): + expr = contract_expression(equation, *shapes) + return expr(*operands, backend=backend, out=out) + + +__all__ = ["contract", "contract_expression"] diff --git a/pyro/source/pyro/ops/einsum/adjoint.py b/pyro/source/pyro/ops/einsum/adjoint.py new file mode 100644 index 0000000000000000000000000000000000000000..b98bead03fb916938d689d30cac80c418d949d64 --- /dev/null +++ b/pyro/source/pyro/ops/einsum/adjoint.py @@ -0,0 +1,150 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import weakref +from abc import ABCMeta, abstractmethod + +import torch + +from pyro.ops import packed +from pyro.util import jit_iter + +SAMPLE_SYMBOL = " " # must be unique and precede alphanumeric characters + + +class Backward(object, metaclass=ABCMeta): + is_leaf = False + + def __call__(self): + """ + Performs entire backward pass in depth-first order. + """ + message = None + stack = [(self, message)] + while stack: + bwd, message = stack.pop() + stack.extend(bwd.process(message)) + + @abstractmethod + def process(self, message): + raise NotImplementedError + + +class _LeafBackward(Backward): + is_leaf = True + + def __init__(self, target): + self.target = weakref.ref(target) + + def process(self, message): + target = self.target() + assert message is not target, "memory leak" + target._pyro_backward_result = message + return () + + +def require_backward(tensor): + """ + Marks a tensor as a leaf in the adjoint graph. + """ + tensor._pyro_backward = _LeafBackward(tensor) + + +class _TransposeBackward(Backward): + def __init__(self, a, axes): + self.a = a + self.axes = axes + + def process(self, message): + if message is None: + yield self.a._pyro_backward, None + else: + inv_axes = [None] * len(self.axes) + for i, j in enumerate(self.axes): + inv_axes[j] = i + yield self.a._pyro_backward, message.permute(inv_axes) + + +# this requires https://github.com/dgasmith/opt_einsum/pull/74 +def transpose(a, axes): + result = a.permute(axes) + if hasattr(a, "_pyro_backward"): + result._pyro_backward = _TransposeBackward(a, axes) + result._pyro_name = getattr(a, "_pyro_name", "?") + "'" + return result + + +def einsum_backward_sample(operands, sample1, sample2): + """ + Cuts down samples to pass on to subsequent steps. + This is used in various ``_EinsumBackward.__call__()`` methods. + This assumes all operands have a ``._pyro_dims`` attribute set. + """ + # Combine upstream sample with sample at this site. + if sample1 is None: + sample = sample2 + elif sample2 is None: + sample = sample1 + else: + # Slice sample1 down based on choices in sample2. + assert set(sample1._pyro_sample_dims).isdisjoint(sample2._pyro_sample_dims) + sample_dims = sample1._pyro_sample_dims + sample2._pyro_sample_dims + for dim, index in zip(sample2._pyro_sample_dims, jit_iter(sample2)): + if dim in sample1._pyro_dims: + index._pyro_dims = sample2._pyro_dims[1:] + sample1 = packed.gather(sample1, index, dim) + + # Concatenate the two samples. + parts = packed.broadcast_all(sample1, sample2) + sample = torch.cat(parts) + sample._pyro_dims = parts[0]._pyro_dims + sample._pyro_sample_dims = sample_dims + assert sample.dim() == len(sample._pyro_dims) + if not torch._C._get_tracing_state(): + assert sample.size(0) == len(sample._pyro_sample_dims) + + # Select sample dimensions to pass on to downstream sites. + for x in operands: + if not hasattr(x, "_pyro_backward"): + continue + if sample is None: + yield x._pyro_backward, None + continue + x_sample_dims = set(x._pyro_dims) & set(sample._pyro_sample_dims) + if not x_sample_dims: + yield x._pyro_backward, None + continue + if x_sample_dims == set(sample._pyro_sample_dims): + yield x._pyro_backward, sample + continue + x_sample_dims = "".join(sorted(x_sample_dims)) + x_sample = sample[ + [sample._pyro_sample_dims.index(dim) for dim in x_sample_dims] + ] + x_sample._pyro_dims = sample._pyro_dims + x_sample._pyro_sample_dims = x_sample_dims + assert x_sample.dim() == len(x_sample._pyro_dims) + if not torch._C._get_tracing_state(): + assert x_sample.size(0) == len(x_sample._pyro_sample_dims) + yield x._pyro_backward, x_sample + + +def unflatten(flat_sample, output_dims, contract_dims, contract_shape): + """ + Unpack a collection of indices that have been packed into a 64-bit + tensor, via modular arithmetic. + """ + assert contract_dims + sample = flat_sample.unsqueeze(0) + if len(contract_dims) > 1: + slices = [None] * len(contract_dims) + for i, size in reversed(list(enumerate(contract_shape))): + slices[i] = sample % size + sample = sample // size + sample = torch.cat(slices) + sample._pyro_dims = SAMPLE_SYMBOL + output_dims + sample._pyro_sample_dims = contract_dims + assert sample.dim() == len(sample._pyro_dims) + if not torch._C._get_tracing_state(): + assert sample.size(0) == len(sample._pyro_sample_dims) + return sample diff --git a/pyro/source/pyro/ops/einsum/torch_log.py b/pyro/source/pyro/ops/einsum/torch_log.py new file mode 100644 index 0000000000000000000000000000000000000000..0b0da1ecb9bf1a024efb04429ce82d7ac517dcb8 --- /dev/null +++ b/pyro/source/pyro/ops/einsum/torch_log.py @@ -0,0 +1,60 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +from pyro.ops.einsum.util import Tensordot +from pyro.ops.special import safe_log + + +def transpose(a, axes): + return a.permute(axes) + + +def einsum(equation, *operands): + """ + Log-sum-exp implementation of einsum. + """ + # rename symbols to support PyTorch 0.4.1 and earlier, + # which allow only symbols a-z. + symbols = sorted(set(equation) - set(",->")) + rename = dict(zip(symbols, "abcdefghijklmnopqrstuvwxyz")) + equation = "".join(rename.get(s, s) for s in equation) + + inputs, output = equation.split("->") + if inputs == output: + # Originally we return `operands[0][...]` but that caused + # memory leak in PyTorch >= 1.11 (issue #3068). Hence we + # return `operands[0].clone()` here. + return operands[0].clone() # create a new object + inputs = inputs.split(",") + + shifts = [] + exp_operands = [] + for dims, operand in zip(inputs, operands): + shift = operand.detach() + for i, dim in enumerate(dims): + if dim not in output: + shift = shift.max(i, keepdim=True)[0] + # avoid nan due to -inf - -inf + shift = shift.clamp(min=torch.finfo(shift.dtype).min) + exp_operands.append((operand - shift).exp()) + + # permute shift to match output + shift = shift.reshape( + torch.Size(size for size, dim in zip(operand.shape, dims) if dim in output) + ) + if shift.dim(): + shift = shift.reshape((1,) * (len(output) - shift.dim()) + shift.shape) + dims = [dim for dim in dims if dim in output] + dims = [dim for dim in output if dim not in dims] + dims + shift = shift.permute(*(dims.index(dim) for dim in output)) + shifts.append(shift) + + result = safe_log(torch.einsum(equation, exp_operands)) + return sum(shifts + [result]) + + +tensordot = Tensordot(einsum) + +__all__ = ["transpose", "einsum", "tensordot"] diff --git a/pyro/source/pyro/ops/einsum/torch_map.py b/pyro/source/pyro/ops/einsum/torch_map.py new file mode 100644 index 0000000000000000000000000000000000000000..cf47d70a6b83cbf6bd44f4c1923656eec155e260 --- /dev/null +++ b/pyro/source/pyro/ops/einsum/torch_map.py @@ -0,0 +1,61 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import operator +from functools import reduce + +from pyro.ops import packed +from pyro.ops.einsum.adjoint import ( + Backward, + einsum_backward_sample, + transpose, + unflatten, +) +from pyro.ops.einsum.util import Tensordot + + +class _EinsumBackward(Backward): + def __init__(self, operands, argmax): + self.operands = operands + self.argmax = argmax + + def process(self, message): + sample1 = self.argmax + sample2 = message + return einsum_backward_sample(self.operands, sample1, sample2) + + +def einsum(equation, *operands): + """ + Forward-max-sum backward-argmax implementation of einsum. + This assumes all operands have a ``._pyro_dims`` attribute set. + """ + equation = packed.rename_equation(equation, *operands) + inputs, output = equation.split("->") + any_requires_backward = any(hasattr(x, "_pyro_backward") for x in operands) + + contract_dims = "".join( + sorted(set().union(*(x._pyro_dims for x in operands)) - set(output)) + ) + dims = output + contract_dims + result = reduce(operator.add, packed.broadcast_all(*operands, dims=dims)) + argmax = None # work around lack of pytorch support for zero-sized tensors + if contract_dims: + output_shape = result.shape[: len(output)] + contract_shape = result.shape[len(output) :] + result, argmax = result.reshape(output_shape + (-1,)).max(-1) + if any_requires_backward: + argmax = unflatten(argmax, output, contract_dims, contract_shape) + elif result is operands[0]: + result = result[...] # create a new object + result._pyro_dims = output + assert result.dim() == len(result._pyro_dims) + + if any_requires_backward: + result._pyro_backward = _EinsumBackward(operands, argmax) + return result + + +tensordot = Tensordot(einsum) + +__all__ = ["transpose", "einsum", "tensordot"] diff --git a/pyro/source/pyro/ops/einsum/torch_marginal.py b/pyro/source/pyro/ops/einsum/torch_marginal.py new file mode 100644 index 0000000000000000000000000000000000000000..b197afbdd22e29e370db7eb8f98fccffa4893a5e --- /dev/null +++ b/pyro/source/pyro/ops/einsum/torch_marginal.py @@ -0,0 +1,62 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pyro.ops.einsum.torch_log +from pyro.ops.einsum.adjoint import Backward, transpose +from pyro.ops.einsum.util import Tensordot + + +class _EinsumBackward(Backward): + def __init__(self, equation, operands): + self.equation = equation + self.operands = operands + + def process(self, message): + # Create extended lists of inputs and operands. + operands = list(self.operands) + inputs, output = self.equation.split("->") + inputs = inputs.split(",") + if message is not None: + assert message.dim() == len(output) + inputs.append(output) + operands.append(message) + + # Aggregate all messages and pass backward. + for i, operand in enumerate(self.operands): + if not hasattr(operand, "_pyro_backward"): + continue + output_i = inputs[i] + inputs_i = list(inputs) + operands_i = list(operands) + if not operand._pyro_backward.is_leaf: + del inputs_i[i] + del operands_i[i] + if operands_i: + inputs_i = ",".join(inputs_i) + output_i = "".join(dim for dim in output_i if dim in inputs_i) + equation = inputs_i + "->" + output_i + message_i = pyro.ops.einsum.torch_log.einsum(equation, *operands_i) + if output_i != inputs[i]: + for pos, dim in enumerate(inputs[i]): + if dim not in output_i: + message_i = message_i.unsqueeze(pos) + message_i = message_i.expand_as(operands[i]) + else: + message_i = None + yield operand._pyro_backward, message_i + + +def einsum(equation, *operands): + """ + Forward-log-sum-product-exp backward-marginal implementation of einsum. + """ + result = pyro.ops.einsum.torch_log.einsum(equation, *operands) + + if any(hasattr(x, "_pyro_backward") for x in operands): + result._pyro_backward = _EinsumBackward(equation, operands) + return result + + +tensordot = Tensordot(einsum) + +__all__ = ["transpose", "einsum", "tensordot"] diff --git a/pyro/source/pyro/ops/einsum/torch_sample.py b/pyro/source/pyro/ops/einsum/torch_sample.py new file mode 100644 index 0000000000000000000000000000000000000000..162553a321227ad761c31b041129f611dc7032f9 --- /dev/null +++ b/pyro/source/pyro/ops/einsum/torch_sample.py @@ -0,0 +1,79 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import operator +from functools import reduce + +import pyro.distributions as dist +import pyro.ops.einsum.torch_log +from pyro.ops import packed +from pyro.ops.einsum.adjoint import ( + Backward, + einsum_backward_sample, + transpose, + unflatten, +) +from pyro.ops.einsum.util import Tensordot +from pyro.util import jit_iter + + +class _EinsumBackward(Backward): + def __init__(self, output, operands): + self.output = output + self.operands = operands + + def process(self, message): + output = self.output + operands = list(self.operands) + contract_dims = "".join( + sorted(set().union(*(x._pyro_dims for x in operands)) - set(output)) + ) + batch_dims = output + + # Slice down operands before combining terms. + sample2 = message + if sample2 is not None: + for dim, index in zip(sample2._pyro_sample_dims, jit_iter(sample2)): + batch_dims = batch_dims.replace(dim, "") + for i, x in enumerate(operands): + if dim in x._pyro_dims: + index._pyro_dims = sample2._pyro_dims[1:] + x = packed.gather(x, index, dim) + operands[i] = x + + # Combine terms. + dims = batch_dims + contract_dims + logits = reduce(operator.add, packed.broadcast_all(*operands, dims=dims)) + + # Sample. + sample1 = None # work around lack of pytorch support for zero-sized tensors + if contract_dims: + output_shape = logits.shape[: len(batch_dims)] + contract_shape = logits.shape[len(batch_dims) :] + flat_logits = logits.reshape(output_shape + (-1,)) + flat_sample = dist.Categorical(logits=flat_logits).sample() + sample1 = unflatten(flat_sample, batch_dims, contract_dims, contract_shape) + + # Cut down samples to pass on to subsequent steps. + return einsum_backward_sample(self.operands, sample1, sample2) + + +def einsum(equation, *operands): + """ + Forward-log-sum-product-exp backward-sample-exp implementation of einsum. + This assumes all operands have a ``._pyro_dims`` attribute set. + """ + equation = packed.rename_equation(equation, *operands) + inputs, output = equation.split("->") + result = pyro.ops.einsum.torch_log.einsum(equation, *operands) + result._pyro_dims = output + assert result.dim() == len(result._pyro_dims) + + if any(hasattr(x, "_pyro_backward") for x in operands): + result._pyro_backward = _EinsumBackward(output, operands) + return result + + +tensordot = Tensordot(einsum) + +__all__ = ["transpose", "einsum", "tensordot"] diff --git a/pyro/source/pyro/ops/einsum/util.py b/pyro/source/pyro/ops/einsum/util.py new file mode 100644 index 0000000000000000000000000000000000000000..ee598d87a1168683ff2917b047de0efccb8fea66 --- /dev/null +++ b/pyro/source/pyro/ops/einsum/util.py @@ -0,0 +1,59 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 AND MIT + +EINSUM_SYMBOLS_BASE = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + + +class Tensordot: + """ + Creates a tensordot implementation from an einsum implementation. + """ + + def __init__(self, einsum): + self.einsum = einsum + + # Copyright (c) 2014 Daniel Smith + # SPDX-License-Identifier: MIT + # This function is copied and adapted from: + # https://github.com/dgasmith/opt_einsum/blob/a6dd686/opt_einsum/backends/torch.py + def __call__(self, x, y, axes=2): + xnd = x.ndimension() + ynd = y.ndimension() + + # convert int argument to (list[int], list[int]) + if isinstance(axes, int): + axes = range(xnd - axes, xnd), range(axes) + + # convert (int, int) to (list[int], list[int]) + if isinstance(axes[0], int): + axes = (axes[0],), axes[1] + if isinstance(axes[1], int): + axes = axes[0], (axes[1],) + + # initialize empty indices + x_ix = [None] * xnd + y_ix = [None] * ynd + out_ix = [] + + # fill in repeated indices + available_ix = iter(EINSUM_SYMBOLS_BASE) + for ax1, ax2 in zip(*axes): + repeat = next(available_ix) + x_ix[ax1] = repeat + y_ix[ax2] = repeat + + # fill in the rest, and maintain output order + for i in range(xnd): + if x_ix[i] is None: + leave = next(available_ix) + x_ix[i] = leave + out_ix.append(leave) + for i in range(ynd): + if y_ix[i] is None: + leave = next(available_ix) + y_ix[i] = leave + out_ix.append(leave) + + # form full string and contract! + einsum_str = "{},{}->{}".format(*map("".join, (x_ix, y_ix, out_ix))) + return self.einsum(einsum_str, x, y) diff --git a/pyro/source/pyro/ops/gamma_gaussian.py b/pyro/source/pyro/ops/gamma_gaussian.py new file mode 100644 index 0000000000000000000000000000000000000000..edffe0755e413b6551cf8277c8041f9a1ebec44a --- /dev/null +++ b/pyro/source/pyro/ops/gamma_gaussian.py @@ -0,0 +1,468 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import torch +from torch.distributions.utils import lazy_property +from torch.nn.functional import pad + +from pyro.distributions.multivariate_studentt import MultivariateStudentT +from pyro.distributions.torch import MultivariateNormal +from pyro.distributions.util import broadcast_shape +from pyro.ops.tensor_utils import precision_to_scale_tril + + +class Gamma: + """ + Non-normalized Gamma distribution. + + Gamma(concentration, rate) ~ (concentration - 1) * log(s) - rate * s + """ + + def __init__(self, log_normalizer, concentration, rate): + self.log_normalizer = log_normalizer + self.concentration = concentration + self.rate = rate + + def log_density(self, s): + """ + Non-normalized log probability of Gamma distribution. + + This is mainly used for testing. + """ + return self.log_normalizer + (self.concentration - 1) * s.log() - self.rate * s + + def logsumexp(self): + """ + Integrates out the latent variable. + """ + return ( + self.log_normalizer + + torch.lgamma(self.concentration) + - self.concentration * self.rate.log() + ) + + +class GammaGaussian: + """ + Non-normalized GammaGaussian distribution: + + GammaGaussian(x, s) ~ (concentration + 0.5 * dim - 1) * log(s) + - rate * s - s * 0.5 * info_vec.T @ inv(precision) @ info_vec) + - s * 0.5 * x.T @ precision @ x + s * x.T @ info_vec, + + which will be reparameterized as + + GammaGaussian(x, s) =: alpha * log(s) + s * (-0.5 * x.T @ precision @ x + x.T @ info_vec - beta). + + The `s` variable plays the role of a mixing variable such that + + p(x | s) ~ Gaussian(s * info_vec, s * precision). + + Conditioned on `s`, this represents an arbitrary semidefinite quadratic function, + which can be interpreted as a rank-deficient Gaussian distribution. + The precision matrix may have zero eigenvalues, thus it may be impossible + to work directly with the covariance matrix. + + :param torch.Tensor log_normalizer: a normalization constant, which is mainly used to keep + track of normalization terms during contractions. + :param torch.Tensor info_vec: information vector, which is a scaled version of the mean + ``info_vec = precision @ mean``. We use this represention to make gaussian contraction + fast and stable. + :param torch.Tensor precision: precision matrix of this gaussian. + :param torch.Tensor alpha: reparameterized shape parameter of the marginal Gamma distribution of + `s`. The shape parameter Gamma.concentration is reparameterized by: + + alpha = Gamma.concentration + 0.5 * dim - 1 + + :param torch.Tensor beta: reparameterized rate parameter of the marginal Gamma distribution of + `s`. The rate parameter Gamma.rate is reparameterized by: + + beta = Gamma.rate + 0.5 * info_vec.T @ inv(precision) @ info_vec + """ + + def __init__(self, log_normalizer, info_vec, precision, alpha, beta): + # NB: using info_vec instead of mean to deal with rank-deficient problem + assert info_vec.dim() >= 1 + assert precision.dim() >= 2 + assert precision.shape[-2:] == info_vec.shape[-1:] * 2 + self.log_normalizer = log_normalizer + self.info_vec = info_vec + self.precision = precision + self.alpha = alpha + self.beta = beta + + def dim(self): + return self.info_vec.size(-1) + + @lazy_property + def batch_shape(self): + return broadcast_shape( + self.log_normalizer.shape, + self.info_vec.shape[:-1], + self.precision.shape[:-2], + self.alpha.shape, + self.beta.shape, + ) + + def expand(self, batch_shape): + n = self.dim() + log_normalizer = self.log_normalizer.expand(batch_shape) + info_vec = self.info_vec.expand(batch_shape + (n,)) + precision = self.precision.expand(batch_shape + (n, n)) + alpha = self.alpha.expand(batch_shape) + beta = self.beta.expand(batch_shape) + return GammaGaussian(log_normalizer, info_vec, precision, alpha, beta) + + def reshape(self, batch_shape): + n = self.dim() + log_normalizer = self.log_normalizer.reshape(batch_shape) + info_vec = self.info_vec.reshape(batch_shape + (n,)) + precision = self.precision.reshape(batch_shape + (n, n)) + alpha = self.alpha.reshape(batch_shape) + beta = self.beta.reshape(batch_shape) + return GammaGaussian(log_normalizer, info_vec, precision, alpha, beta) + + def __getitem__(self, index): + """ + Index into the batch_shape of a GammaGaussian. + """ + assert isinstance(index, tuple) + log_normalizer = self.log_normalizer[index] + info_vec = self.info_vec[index + (slice(None),)] + precision = self.precision[index + (slice(None), slice(None))] + alpha = self.alpha[index] + beta = self.beta[index] + return GammaGaussian(log_normalizer, info_vec, precision, alpha, beta) + + @staticmethod + def cat(parts, dim=0): + """ + Concatenate a list of GammaGaussians along a given batch dimension. + """ + if dim < 0: + dim += len(parts[0].batch_shape) + args = [ + torch.cat([getattr(g, attr) for g in parts], dim=dim) + for attr in ["log_normalizer", "info_vec", "precision", "alpha", "beta"] + ] + return GammaGaussian(*args) + + def event_pad(self, left=0, right=0): + """ + Pad along event dimension. + """ + lr = (left, right) + info_vec = pad(self.info_vec, lr) + precision = pad(self.precision, lr + lr) + # no change for alpha, beta because we are working with reparameterized version; + # otherwise, we need to change alpha (similar for beta) to + # keep the term (alpha + 0.5 * dim - 1) * log(s) constant + # (note that `dim` has been changed due to padding) + return GammaGaussian( + self.log_normalizer, info_vec, precision, self.alpha, self.beta + ) + + def event_permute(self, perm): + """ + Permute along event dimension. + """ + assert isinstance(perm, torch.Tensor) + assert perm.shape == (self.dim(),) + info_vec = self.info_vec[..., perm] + precision = self.precision[..., perm][..., perm, :] + return GammaGaussian( + self.log_normalizer, info_vec, precision, self.alpha, self.beta + ) + + def __add__(self, other): + """ + Adds two GammaGaussians in log-density space. + """ + assert isinstance(other, GammaGaussian) + assert self.dim() == other.dim() + return GammaGaussian( + self.log_normalizer + other.log_normalizer, + self.info_vec + other.info_vec, + self.precision + other.precision, + self.alpha + other.alpha, + self.beta + other.beta, + ) + + def log_density(self, value, s): + """ + Evaluate the log density of this GammaGaussian at a point value:: + + alpha * log(s) + s * (-0.5 * value.T @ precision @ value + value.T @ info_vec - beta) + log_normalizer + + This is mainly used for testing. + """ + if value.size(-1) == 0: + batch_shape = broadcast_shape(value.shape[:-1], s.shape, self.batch_shape) + return ( + self.alpha * s.log() + - self.beta * s + + self.log_normalizer.expand(batch_shape) + ) + result = (-0.5) * self.precision.matmul(value.unsqueeze(-1)).squeeze(-1) + result = result + self.info_vec + result = (value * result).sum(-1) + return self.alpha * s.log() + (result - self.beta) * s + self.log_normalizer + + def condition(self, value): + """ + Condition the Gaussian component on a trailing subset of its state. + This should satisfy:: + + g.condition(y).dim() == g.dim() - y.size(-1) + + Note that since this is a non-normalized Gaussian, we include the + density of ``y`` in the result. Thus :meth:`condition` is similar to a + ``functools.partial`` binding of arguments:: + + left = x[..., :n] + right = x[..., n:] + g.log_density(x, s) == g.condition(right).log_density(left, s) + """ + assert isinstance(value, torch.Tensor) + assert value.size(-1) <= self.info_vec.size(-1) + + n = self.dim() - value.size(-1) + info_a = self.info_vec[..., :n] + info_b = self.info_vec[..., n:] + P_aa = self.precision[..., :n, :n] + P_ab = self.precision[..., :n, n:] + P_bb = self.precision[..., n:, n:] + b = value + + info_vec = info_a - P_ab.matmul(b.unsqueeze(-1)).squeeze(-1) + precision = P_aa + + log_normalizer = self.log_normalizer + alpha = self.alpha + beta = ( + self.beta + + 0.5 * P_bb.matmul(b.unsqueeze(-1)).squeeze(-1).mul(b).sum(-1) + - b.mul(info_b).sum(-1) + ) + return GammaGaussian(log_normalizer, info_vec, precision, alpha, beta) + + def marginalize(self, left=0, right=0): + """ + Marginalizing out variables on either side of the event dimension:: + + g.marginalize(left=n).event_logsumexp() = g.event_logsumexp() + g.marginalize(right=n).event_logsumexp() = g.event_logsumexp() + + and for data ``x``: + + g.condition(x).event_logsumexp().log_density(s) + = g.marginalize(left=g.dim() - x.size(-1)).log_density(x, s) + """ + # NB: the easiest way to think about this process is to consider GammaGaussian + # as a Gaussian with precision and info_vec scaled by `s`. + if left == 0 and right == 0: + return self + if left > 0 and right > 0: + raise NotImplementedError + n = self.dim() + n_b = left + right + a = slice(left, n - right) # preserved + b = slice(None, left) if left else slice(n - right, None) + + P_aa = self.precision[..., a, a] + P_ba = self.precision[..., b, a] + P_bb = self.precision[..., b, b] + P_b = torch.linalg.cholesky(P_bb) + P_a = torch.linalg.solve_triangular(P_b, P_ba, upper=False) + P_at = P_a.transpose(-1, -2) + precision = P_aa - P_at.matmul(P_a) + + info_a = self.info_vec[..., a] + info_b = self.info_vec[..., b] + b_tmp = torch.linalg.solve_triangular(P_b, info_b.unsqueeze(-1), upper=False) + info_vec = info_a + if n_b < n: + info_vec = info_vec - P_at.matmul(b_tmp).squeeze(-1) + + alpha = self.alpha - 0.5 * n_b + beta = self.beta - 0.5 * b_tmp.squeeze(-1).pow(2).sum(-1) + log_normalizer = ( + self.log_normalizer + + 0.5 * n_b * math.log(2 * math.pi) + - P_b.diagonal(dim1=-2, dim2=-1).log().sum(-1) + ) + return GammaGaussian(log_normalizer, info_vec, precision, alpha, beta) + + def compound(self): + """ + Integrates out the latent multiplier `s`. The result will be a + Student-T distribution. + """ + concentration = self.alpha - 0.5 * self.dim() + 1 + scale_tril = precision_to_scale_tril(self.precision) + scale_tril_t_u = ( + scale_tril.transpose(-1, -2).matmul(self.info_vec.unsqueeze(-1)).squeeze(-1) + ) + u_Pinv_u = scale_tril_t_u.pow(2).sum(-1) + rate = self.beta - 0.5 * u_Pinv_u + + loc = scale_tril.matmul(scale_tril_t_u.unsqueeze(-1)).squeeze(-1) + scale_tril = scale_tril * (rate / concentration).sqrt().unsqueeze(-1).unsqueeze( + -1 + ) + return MultivariateStudentT(2 * concentration, loc, scale_tril) + + def event_logsumexp(self): + """ + Integrates out all latent state (i.e. operating on event dimensions) of Gaussian component. + """ + n = self.dim() + chol_P = torch.linalg.cholesky(self.precision) + chol_P_u = torch.linalg.solve_triangular( + chol_P, self.info_vec.unsqueeze(-1), upper=False + ).squeeze(-1) + u_P_u = chol_P_u.pow(2).sum(-1) + # considering GammaGaussian as a Gaussian with precision = s * precision, info_vec = s * info_vec, + # marginalize x variable, we get + # logsumexp(s) = alpha * log(s) - s * beta + 0.5 n * log(2 pi) + \ + # 0.5 s * uPu - 0.5 * log|P| - 0.5 n * log(s) + # use the original parameterization of Gamma, we get + # logsumexp(s) = (concentration - 1) * log(s) - s * rate + 0.5 n * log(2 pi) - 0.5 * |P| + # Note that `(concentration - 1) * log(s) - s * rate` is unnormalized log_prob of + # Gamma(concentration, rate) + concentration = self.alpha - 0.5 * n + 1 + rate = self.beta - 0.5 * u_P_u + log_normalizer_tmp = 0.5 * n * math.log(2 * math.pi) - chol_P.diagonal( + dim1=-2, dim2=-1 + ).log().sum(-1) + return Gamma(self.log_normalizer + log_normalizer_tmp, concentration, rate) + + +def gamma_and_mvn_to_gamma_gaussian(gamma, mvn): + """ + Convert a pair of Gamma and Gaussian distributions to a GammaGaussian. + + p(x | s) ~ Gaussian(s * info_vec, s * precision) + p(s) ~ Gamma(alpha, beta) + p(x, s) ~ GammaGaussian(info_vec, precision, alpha, beta) + + :param ~pyro.distributions.Gamma gamma: the mixing distribution + :param ~pyro.distributions.MultivariateNormal mvn: the conditional distribution + when mixing is 1. + :return: A GammaGaussian object. + :rtype: ~pyro.ops.gaussian_gamma.GammaGaussian + """ + assert isinstance(gamma, torch.distributions.Gamma) + assert isinstance(mvn, torch.distributions.MultivariateNormal) + n = mvn.loc.size(-1) + precision = mvn.precision_matrix + info_vec = precision.matmul(mvn.loc.unsqueeze(-1)).squeeze(-1) + + # reparameterized version of concentration, rate in GaussianGamma + alpha = gamma.concentration + (0.5 * n - 1) + beta = gamma.rate + 0.5 * (info_vec * mvn.loc).sum(-1) + gaussian_logsumexp = 0.5 * n * math.log(2 * math.pi) + mvn.scale_tril.diagonal( + dim1=-2, dim2=-1 + ).log().sum(-1) + log_normalizer = -Gamma( + gaussian_logsumexp, gamma.concentration, gamma.rate + ).logsumexp() + return GammaGaussian(log_normalizer, info_vec, precision, alpha, beta) + + +def scale_mvn(mvn, s): + """ + Transforms a MVN distribution to another MVN distribution according to + + scale(mvn(loc, precision), s) := mvn(loc, s * precision). + """ + assert isinstance(mvn, torch.distributions.MultivariateNormal) + assert isinstance(s, torch.Tensor) + batch_shape = broadcast_shape(s.shape, mvn.batch_shape) + loc = mvn.loc.expand(batch_shape + (-1,)) + # XXX: we might use mvn._unbroadcasted_scale_tril here + scale_tril = mvn.scale_tril / s.sqrt().unsqueeze(-1).unsqueeze(-1) + return MultivariateNormal(loc, scale_tril=scale_tril) + + +def matrix_and_mvn_to_gamma_gaussian(matrix, mvn): + """ + Convert a noisy affine function to a GammaGaussian, where the noise precision + is scaled by an auxiliary variable `s`. The noisy affine function (conditioned + on `s`) is defined as:: + + y = x @ matrix + scale(mvn, s).sample() + + :param ~torch.Tensor matrix: A matrix with rightmost shape ``(x_dim, y_dim)``. + :param ~pyro.distributions.MultivariateNormal mvn: A multivariate normal distribution. + :return: A GammaGaussian with broadcasted batch shape and ``.dim() == x_dim + y_dim``. + :rtype: ~pyro.ops.gaussian_gamma.GammaGaussian + """ + assert isinstance(mvn, torch.distributions.MultivariateNormal) + assert isinstance(matrix, torch.Tensor) + x_dim, y_dim = matrix.shape[-2:] + assert mvn.event_shape == (y_dim,) + batch_shape = broadcast_shape(matrix.shape[:-2], mvn.batch_shape) + matrix = matrix.expand(batch_shape + (x_dim, y_dim)) + mvn = mvn.expand(batch_shape) + + P_yy = mvn.precision_matrix + neg_P_xy = matrix.matmul(P_yy) + P_xy = -neg_P_xy + P_yx = P_xy.transpose(-1, -2) + P_xx = neg_P_xy.matmul(matrix.transpose(-1, -2)) + precision = torch.cat( + [torch.cat([P_xx, P_xy], -1), torch.cat([P_yx, P_yy], -1)], -2 + ) + info_y = P_yy.matmul(mvn.loc.unsqueeze(-1)).squeeze(-1) + info_x = -matrix.matmul(info_y.unsqueeze(-1)).squeeze(-1) + info_vec = torch.cat([info_x, info_y], -1) + log_normalizer = -0.5 * y_dim * math.log(2 * math.pi) - mvn.scale_tril.diagonal( + dim1=-2, dim2=-1 + ).log().sum(-1) + beta = 0.5 * (info_y * mvn.loc).sum(-1) + alpha = beta.new_full(beta.shape, 0.5 * y_dim) + + result = GammaGaussian(log_normalizer, info_vec, precision, alpha, beta) + assert result.batch_shape == batch_shape + assert result.dim() == x_dim + y_dim + return result + + +def gamma_gaussian_tensordot(x, y, dims=0): + """ + Computes the integral over two GammaGaussians: + + `(x @ y)((a,c),s) = log(integral(exp(x((a,b),s) + y((b,c),s)), b))`, + + where `x` is a gaussian over variables (a,b), `y` is a gaussian over variables + (b,c), (a,b,c) can each be sets of zero or more variables, and `dims` is the size of b. + + :param x: a GammaGaussian instance + :param y: a GammaGaussian instance + :param dims: number of variables to contract + """ + assert isinstance(x, GammaGaussian) + assert isinstance(y, GammaGaussian) + na = x.dim() - dims + nb = dims + nc = y.dim() - dims + assert na >= 0 + assert nb >= 0 + assert nc >= 0 + + device = x.info_vec.device + perm = torch.cat( + [ + torch.arange(na, device=device), + torch.arange(x.dim(), x.dim() + nc, device=device), + torch.arange(na, x.dim(), device=device), + ] + ) + return ( + (x.event_pad(right=nc) + y.event_pad(left=na)) + .event_permute(perm) + .marginalize(right=nb) + ) diff --git a/pyro/source/pyro/ops/gaussian.py b/pyro/source/pyro/ops/gaussian.py new file mode 100644 index 0000000000000000000000000000000000000000..b3da2a0915777483c80310420ed5597416b14b9d --- /dev/null +++ b/pyro/source/pyro/ops/gaussian.py @@ -0,0 +1,715 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math +from typing import Optional, Tuple, Union + +import torch +from torch.distributions.utils import lazy_property +from torch.nn.functional import pad + +from pyro.distributions.util import broadcast_shape +from pyro.ops.tensor_utils import matmul, matvecmul, safe_cholesky, triangular_solve + + +class Gaussian: + """ + Non-normalized Gaussian distribution. + + This represents an arbitrary semidefinite quadratic function, which can be + interpreted as a rank-deficient scaled Gaussian distribution. The precision + matrix may have zero eigenvalues, thus it may be impossible to work + directly with the covariance matrix. + + :param torch.Tensor log_normalizer: a normalization constant, which is mainly used to keep + track of normalization terms during contractions. + :param torch.Tensor info_vec: information vector, which is a scaled version of the mean + ``info_vec = precision @ mean``. We use this represention to make gaussian contraction + fast and stable. + :param torch.Tensor precision: precision matrix of this gaussian. + """ + + def __init__( + self, + log_normalizer: torch.Tensor, + info_vec: torch.Tensor, + precision: torch.Tensor, + ): + # NB: using info_vec instead of mean to deal with rank-deficient problem + assert info_vec.dim() >= 1 + assert precision.dim() >= 2 + assert precision.shape[-2:] == info_vec.shape[-1:] * 2 + self.log_normalizer = log_normalizer + self.info_vec = info_vec + self.precision = precision + + def dim(self): + return self.info_vec.size(-1) + + @lazy_property + def batch_shape(self): + return broadcast_shape( + self.log_normalizer.shape, + self.info_vec.shape[:-1], + self.precision.shape[:-2], + ) + + def expand(self, batch_shape) -> "Gaussian": + n = self.dim() + log_normalizer = self.log_normalizer.expand(batch_shape) + info_vec = self.info_vec.expand(batch_shape + (n,)) + precision = self.precision.expand(batch_shape + (n, n)) + return Gaussian(log_normalizer, info_vec, precision) + + def reshape(self, batch_shape) -> "Gaussian": + n = self.dim() + log_normalizer = self.log_normalizer.reshape(batch_shape) + info_vec = self.info_vec.reshape(batch_shape + (n,)) + precision = self.precision.reshape(batch_shape + (n, n)) + return Gaussian(log_normalizer, info_vec, precision) + + def __getitem__(self, index) -> "Gaussian": + """ + Index into the batch_shape of a Gaussian. + """ + assert isinstance(index, tuple) + log_normalizer = self.log_normalizer[index] + info_vec = self.info_vec[index + (slice(None),)] + precision = self.precision[index + (slice(None), slice(None))] + return Gaussian(log_normalizer, info_vec, precision) + + @staticmethod + def cat(parts, dim=0) -> "Gaussian": + """ + Concatenate a list of Gaussians along a given batch dimension. + """ + if dim < 0: + dim += len(parts[0].batch_shape) + args = [ + torch.cat([getattr(g, attr) for g in parts], dim=dim) + for attr in ["log_normalizer", "info_vec", "precision"] + ] + return Gaussian(*args) + + def event_pad(self, left=0, right=0) -> "Gaussian": + """ + Pad along event dimension. + """ + lr = (left, right) + log_normalizer = self.log_normalizer + info_vec = pad(self.info_vec, lr) + precision = pad(self.precision, lr + lr) + return Gaussian(log_normalizer, info_vec, precision) + + def event_permute(self, perm) -> "Gaussian": + """ + Permute along event dimension. + """ + assert isinstance(perm, torch.Tensor) + assert perm.shape == (self.dim(),) + info_vec = self.info_vec[..., perm] + precision = self.precision[..., perm][..., perm, :] + return Gaussian(self.log_normalizer, info_vec, precision) + + def __add__(self, other: Union["Gaussian", int, float, torch.Tensor]) -> "Gaussian": + """ + Adds two Gaussians in log-density space. + """ + if isinstance(other, Gaussian): + assert self.dim() == other.dim() + return Gaussian( + self.log_normalizer + other.log_normalizer, + self.info_vec + other.info_vec, + self.precision + other.precision, + ) + if isinstance(other, (int, float, torch.Tensor)): + return Gaussian(self.log_normalizer + other, self.info_vec, self.precision) + raise ValueError("Unsupported type: {}".format(type(other))) + + def __sub__(self, other: Union["Gaussian", int, float, torch.Tensor]) -> "Gaussian": + if isinstance(other, (int, float, torch.Tensor)): + return Gaussian(self.log_normalizer - other, self.info_vec, self.precision) + raise ValueError("Unsupported type: {}".format(type(other))) + + def log_density(self, value: torch.Tensor) -> torch.Tensor: + """ + Evaluate the log density of this Gaussian at a point value:: + + -0.5 * value.T @ precision @ value + value.T @ info_vec + log_normalizer + + This is mainly used for testing. + """ + if value.size(-1) == 0: + batch_shape = broadcast_shape(value.shape[:-1], self.batch_shape) + result: torch.Tensor = self.log_normalizer.expand(batch_shape) + return result + result = (-0.5) * matvecmul(self.precision, value) + result = result + self.info_vec + result = (value * result).sum(-1) + return result + self.log_normalizer + + def rsample( + self, sample_shape=torch.Size(), noise: Optional[torch.Tensor] = None + ) -> torch.Tensor: + """ + Reparameterized sampler. + """ + P_chol = safe_cholesky(self.precision) + loc = self.info_vec.unsqueeze(-1).cholesky_solve(P_chol).squeeze(-1) + shape = sample_shape + self.batch_shape + (self.dim(), 1) + if noise is None: + noise = torch.randn(shape, dtype=loc.dtype, device=loc.device) + else: + noise = noise.reshape(shape) + noise = triangular_solve(noise, P_chol, upper=False, transpose=True).squeeze(-1) + sample: torch.Tensor = loc + noise + return sample + + def condition(self, value: torch.Tensor) -> "Gaussian": + """ + Condition this Gaussian on a trailing subset of its state. + This should satisfy:: + + g.condition(y).dim() == g.dim() - y.size(-1) + + Note that since this is a non-normalized Gaussian, we include the + density of ``y`` in the result. Thus :meth:`condition` is similar to a + ``functools.partial`` binding of arguments:: + + left = x[..., :n] + right = x[..., n:] + g.log_density(x) == g.condition(right).log_density(left) + """ + assert isinstance(value, torch.Tensor) + right = value.size(-1) + dim = self.dim() + assert right <= dim + + n = dim - right + info_a = self.info_vec[..., :n] + info_b = self.info_vec[..., n:] + P_aa = self.precision[..., :n, :n] + P_ab = self.precision[..., :n, n:] + P_bb = self.precision[..., n:, n:] + b = value + + info_vec = info_a - matvecmul(P_ab, b) + precision = P_aa + log_normalizer = ( + self.log_normalizer + + -0.5 * matvecmul(P_bb, b).mul(b).sum(-1) + + b.mul(info_b).sum(-1) + ) + return Gaussian(log_normalizer, info_vec, precision) + + def left_condition(self, value: torch.Tensor) -> "Gaussian": + """ + Condition this Gaussian on a leading subset of its state. + This should satisfy:: + + g.condition(y).dim() == g.dim() - y.size(-1) + + Note that since this is a non-normalized Gaussian, we include the + density of ``y`` in the result. Thus :meth:`condition` is similar to a + ``functools.partial`` binding of arguments:: + + left = x[..., :n] + right = x[..., n:] + g.log_density(x) == g.left_condition(left).log_density(right) + """ + assert isinstance(value, torch.Tensor) + left = value.size(-1) + dim = self.dim() + assert left <= dim + + perm = torch.cat( + [ + torch.arange(left, dim, device=value.device), + torch.arange(left, device=value.device), + ] + ) + return self.event_permute(perm).condition(value) + + def marginalize(self, left=0, right=0) -> "Gaussian": + """ + Marginalizing out variables on either side of the event dimension:: + + g.marginalize(left=n).event_logsumexp() = g.logsumexp() + g.marginalize(right=n).event_logsumexp() = g.logsumexp() + + and for data ``x``: + + g.condition(x).event_logsumexp() + = g.marginalize(left=g.dim() - x.size(-1)).log_density(x) + """ + if left == 0 and right == 0: + return self + if left > 0 and right > 0: + raise NotImplementedError + n = self.dim() + n_b = left + right + a = slice(left, n - right) # preserved + b = slice(None, left) if left else slice(n - right, None) + + P_aa = self.precision[..., a, a] + P_ba = self.precision[..., b, a] + P_bb = self.precision[..., b, b] + P_b = safe_cholesky(P_bb) + P_a = triangular_solve(P_ba, P_b, upper=False) + P_at = P_a.transpose(-1, -2) + precision = P_aa - matmul(P_at, P_a) + + info_a = self.info_vec[..., a] + info_b = self.info_vec[..., b] + b_tmp = triangular_solve(info_b.unsqueeze(-1), P_b, upper=False) + info_vec = info_a - matmul(P_at, b_tmp).squeeze(-1) + + log_normalizer = ( + self.log_normalizer + + 0.5 * n_b * math.log(2 * math.pi) + - P_b.diagonal(dim1=-2, dim2=-1).log().sum(-1) + + 0.5 * b_tmp.squeeze(-1).pow(2).sum(-1) + ) + return Gaussian(log_normalizer, info_vec, precision) + + def event_logsumexp(self) -> torch.Tensor: + """ + Integrates out all latent state (i.e. operating on event dimensions). + """ + n = self.dim() + chol_P = safe_cholesky(self.precision) + chol_P_u = triangular_solve( + self.info_vec.unsqueeze(-1), chol_P, upper=False + ).squeeze(-1) + u_P_u = chol_P_u.pow(2).sum(-1) + log_Z: torch.Tensor = ( + self.log_normalizer + + 0.5 * n * math.log(2 * math.pi) + + 0.5 * u_P_u + - chol_P.diagonal(dim1=-2, dim2=-1).log().sum(-1) + ) + return log_Z + + +class AffineNormal: + """ + Represents a conditional diagonal normal distribution over a random + variable ``Y`` whose mean is an affine function of a random variable ``X``. + The likelihood of ``X`` is thus:: + + AffineNormal(matrix, loc, scale).condition(y).log_density(x) + + which is equivalent to:: + + Normal(x @ matrix + loc, scale).to_event(1).log_prob(y) + + :param torch.Tensor matrix: A transformation from ``X`` to ``Y``. + Should have rightmost shape ``(x_dim, y_dim)``. + :param torch.Tensor loc: A constant offset for ``Y``'s mean. + Should have rightmost shape ``(y_dim,)``. + :param torch.Tensor scale: Standard deviation for ``Y``. + Should have rightmost shape ``(y_dim,)``. + """ + + def __init__(self, matrix, loc, scale): + assert loc.shape == scale.shape + assert matrix.shape[:-2] == loc.shape[:-1] + assert matrix.size(-1) == loc.size(-1) + self.matrix = matrix + self.loc = loc + self.scale = scale + self._gaussian = None + + @lazy_property + def batch_shape(self): + return self.matrix.shape[:-2] + + def condition(self, value): + if value.size(-1) == self.loc.size(-1): + prec_sqrt = self.matrix / self.scale.unsqueeze(-2) + precision = matmul(prec_sqrt, prec_sqrt.transpose(-1, -2)) + delta = (value - self.loc) / self.scale + info_vec = matvecmul(prec_sqrt, delta) + log_normalizer = ( + -0.5 * self.loc.size(-1) * math.log(2 * math.pi) + - 0.5 * delta.pow(2).sum(-1) + - self.scale.log().sum(-1) + ) + return Gaussian(log_normalizer, info_vec, precision) + else: + return self.to_gaussian().condition(value) + + def left_condition(self, value): + """ + If ``value.size(-1) == x_dim``, this returns a Normal distribution with + ``event_dim=1``. After applying this method, the cost to draw a sample is + ``O(y_dim)`` instead of ``O(y_dim ** 3)``. + """ + if value.size(-1) == self.matrix.size(-2): + loc = matvecmul(self.matrix.transpose(-1, -2), value) + self.loc + matrix = value.new_zeros(loc.shape[:-1] + (0, loc.size(-1))) + scale = self.scale.expand(loc.shape) + return AffineNormal(matrix, loc, scale) + else: + return self.to_gaussian().left_condition(value) + + def rsample( + self, sample_shape=torch.Size(), noise: Optional[torch.Tensor] = None + ) -> torch.Tensor: + """ + Reparameterized sampler. + """ + if self.matrix.size(-2) > 0: + raise NotImplementedError + shape = sample_shape + self.batch_shape + self.loc.shape[-1:] + if noise is None: + noise = torch.randn(shape, dtype=self.loc.dtype, device=self.loc.device) + else: + noise = noise.reshape(shape) + sample: torch.Tensor = self.loc + noise * self.scale + return sample + + def to_gaussian(self): + if self._gaussian is None: + mvn = torch.distributions.Independent( + torch.distributions.Normal(self.loc, scale=self.scale), 1 + ) + y_gaussian = mvn_to_gaussian(mvn) + self._gaussian = matrix_and_gaussian_to_gaussian(self.matrix, y_gaussian) + return self._gaussian + + def expand(self, batch_shape): + matrix = self.matrix.expand(batch_shape + self.matrix.shape[-2:]) + loc = self.loc.expand(batch_shape + self.loc.shape[-1:]) + scale = self.scale.expand(batch_shape + self.scale.shape[-1:]) + return AffineNormal(matrix, loc, scale) + + def reshape(self, batch_shape): + matrix = self.matrix.reshape(batch_shape + self.matrix.shape[-2:]) + loc = self.loc.reshape(batch_shape + self.loc.shape[-1:]) + scale = self.scale.reshape(batch_shape + self.scale.shape[-1:]) + return AffineNormal(matrix, loc, scale) + + def __getitem__(self, index): + assert isinstance(index, tuple) + matrix = self.matrix[index + (slice(None), slice(None))] + loc = self.loc[index + (slice(None),)] + scale = self.scale[index + (slice(None),)] + return AffineNormal(matrix, loc, scale) + + def event_permute(self, perm): + return self.to_gaussian().event_permute(perm) + + def __add__(self, other): + return self.to_gaussian() + other + + def marginalize(self, left=0, right=0): + if left == 0 and right == self.loc.size(-1): + n = self.matrix.size(-2) + precision = self.scale.new_zeros(self.batch_shape + (n, n)) + info_vec = self.scale.new_zeros(self.batch_shape + (n,)) + log_normalizer = self.scale.new_zeros(self.batch_shape) + return Gaussian(log_normalizer, info_vec, precision) + else: + return self.to_gaussian().marginalize(left, right) + + +def mvn_to_gaussian(mvn): + """ + Convert a MultivariateNormal distribution to a Gaussian. + + :param ~torch.distributions.MultivariateNormal mvn: A multivariate normal distribution. + :return: An equivalent Gaussian object. + :rtype: ~pyro.ops.gaussian.Gaussian + """ + assert isinstance(mvn, torch.distributions.MultivariateNormal) or ( + isinstance(mvn, torch.distributions.Independent) + and isinstance(mvn.base_dist, torch.distributions.Normal) + ) + if isinstance(mvn, torch.distributions.Independent): + mvn = mvn.base_dist + precision_diag = mvn.scale.pow(-2) + precision = precision_diag.diag_embed() + info_vec = mvn.loc * precision_diag + scale_diag = mvn.scale + else: + precision = mvn.precision_matrix + info_vec = matvecmul(precision, mvn.loc) + scale_diag = mvn.scale_tril.diagonal(dim1=-2, dim2=-1) + + n = mvn.loc.size(-1) + log_normalizer = ( + -0.5 * n * math.log(2 * math.pi) + + -0.5 * (info_vec * mvn.loc).sum(-1) + - scale_diag.log().sum(-1) + ) + return Gaussian(log_normalizer, info_vec, precision) + + +def matrix_and_gaussian_to_gaussian( + matrix: torch.Tensor, y_gaussian: Gaussian +) -> Gaussian: + """ + Constructs a conditional Gaussian for ``p(y|x)`` where + ``y - x @ matrix ~ y_gaussian``. + + :param torch.Tensor matrix: A right-acting transformation matrix. + :param Gaussian y_gaussian: A distribution over noise of ``y - x@matrix``. + :rtype: Gaussian + """ + P_yy = y_gaussian.precision + neg_P_xy = matmul(matrix, P_yy) + P_xy = -neg_P_xy + P_yx = P_xy.transpose(-1, -2) + P_xx = matmul(neg_P_xy, matrix.transpose(-1, -2)) + precision = torch.cat( + [torch.cat([P_xx, P_xy], -1), torch.cat([P_yx, P_yy], -1)], -2 + ) + info_y = y_gaussian.info_vec + info_x = -matvecmul(matrix, info_y) + info_vec = torch.cat([info_x, info_y], -1) + log_normalizer = y_gaussian.log_normalizer + + result = Gaussian(log_normalizer, info_vec, precision) + return result + + +def matrix_and_mvn_to_gaussian(matrix, mvn): + """ + Convert a noisy affine function to a Gaussian. The noisy affine function is defined as:: + + y = x @ matrix + mvn.sample() + + :param ~torch.Tensor matrix: A matrix with rightmost shape ``(x_dim, y_dim)``. + :param ~torch.distributions.MultivariateNormal mvn: A multivariate normal distribution. + :return: A Gaussian with broadcasted batch shape and ``.dim() == x_dim + y_dim``. + :rtype: ~pyro.ops.gaussian.Gaussian + """ + assert isinstance(mvn, torch.distributions.MultivariateNormal) or ( + isinstance(mvn, torch.distributions.Independent) + and isinstance(mvn.base_dist, torch.distributions.Normal) + ) + assert isinstance(matrix, torch.Tensor) + x_dim, y_dim = matrix.shape[-2:] + assert mvn.event_shape == (y_dim,) + batch_shape = broadcast_shape(matrix.shape[:-2], mvn.batch_shape) + matrix = matrix.expand(batch_shape + (x_dim, y_dim)) + mvn = mvn.expand(batch_shape) + + # Handle diagonal normal distributions as an efficient special case. + if isinstance(mvn, torch.distributions.Independent): + return AffineNormal(matrix, mvn.base_dist.loc, mvn.base_dist.scale) + + y_gaussian = mvn_to_gaussian(mvn) + result = matrix_and_gaussian_to_gaussian(matrix, y_gaussian) + assert result.batch_shape == batch_shape + assert result.dim() == x_dim + y_dim + return result + + +def gaussian_tensordot(x: Gaussian, y: Gaussian, dims: int = 0) -> Gaussian: + """ + Computes the integral over two gaussians: + + `(x @ y)(a,c) = log(integral(exp(x(a,b) + y(b,c)), b))`, + + where `x` is a gaussian over variables (a,b), `y` is a gaussian over variables + (b,c), (a,b,c) can each be sets of zero or more variables, and `dims` is the size of b. + + :param x: a Gaussian instance + :param y: a Gaussian instance + :param dims: number of variables to contract + """ + assert isinstance(x, Gaussian) + assert isinstance(y, Gaussian) + na = x.dim() - dims + nb = dims + nc = y.dim() - dims + assert na >= 0 + assert nb >= 0 + assert nc >= 0 + + Paa, Pba, Pbb = ( + x.precision[..., :na, :na], + x.precision[..., na:, :na], + x.precision[..., na:, na:], + ) + Qbb, Qbc, Qcc = ( + y.precision[..., :nb, :nb], + y.precision[..., :nb, nb:], + y.precision[..., nb:, nb:], + ) + xa, xb = x.info_vec[..., :na], x.info_vec[..., na:] # x.precision @ x.mean + yb, yc = y.info_vec[..., :nb], y.info_vec[..., nb:] # y.precision @ y.mean + + precision = pad(Paa, (0, nc, 0, nc)) + pad(Qcc, (na, 0, na, 0)) + info_vec = pad(xa, (0, nc)) + pad(yc, (na, 0)) + log_normalizer = x.log_normalizer + y.log_normalizer + if nb > 0: + B = pad(Pba, (0, nc)) + pad(Qbc, (na, 0)) + b = xb + yb + + # Pbb + Qbb needs to be positive definite, so that we can malginalize out `b` (to have a finite integral) + L = safe_cholesky(Pbb + Qbb) + LinvB = triangular_solve(B, L, upper=False) + LinvBt = LinvB.transpose(-2, -1) + Linvb = triangular_solve(b.unsqueeze(-1), L, upper=False) + + precision = precision - matmul(LinvBt, LinvB) + # NB: precision might not be invertible for getting mean = precision^-1 @ info_vec + if na + nc > 0: + info_vec = info_vec - matmul(LinvBt, Linvb).squeeze(-1) + logdet = torch.diagonal(L, dim1=-2, dim2=-1).log().sum(-1) + diff = ( + 0.5 * nb * math.log(2 * math.pi) + + 0.5 * Linvb.squeeze(-1).pow(2).sum(-1) + - logdet + ) + log_normalizer = log_normalizer + diff + + return Gaussian(log_normalizer, info_vec, precision) + + +def sequential_gaussian_tensordot(gaussian: Gaussian) -> Gaussian: + """ + Integrates a Gaussian ``x`` whose rightmost batch dimension is time, computes:: + + x[..., 0] @ x[..., 1] @ ... @ x[..., T-1] + + :param Gaussian gaussian: A batched Gaussian whose rightmost dimension is time. + :returns: A Markov product of the Gaussian along its time dimension. + :rtype: Gaussian + """ + assert isinstance(gaussian, Gaussian) + assert gaussian.dim() % 2 == 0, "dim is not even" + batch_shape = gaussian.batch_shape[:-1] + state_dim = gaussian.dim() // 2 + while gaussian.batch_shape[-1] > 1: + time = gaussian.batch_shape[-1] + even_time = time // 2 * 2 + even_part = gaussian[..., :even_time] + x_y = even_part.reshape(batch_shape + (even_time // 2, 2)) + x, y = x_y[..., 0], x_y[..., 1] + contracted = gaussian_tensordot(x, y, state_dim) + if time > even_time: + contracted = Gaussian.cat((contracted, gaussian[..., -1:]), dim=-1) + gaussian = contracted + return gaussian[..., 0] + + +def sequential_gaussian_filter_sample( + init: Gaussian, + trans: Gaussian, + sample_shape: Tuple[int, ...] = (), + noise: Optional[torch.Tensor] = None, +) -> torch.Tensor: + """ + Draws a reparameterized sample from a Markov product of Gaussians via + parallel-scan forward-filter backward-sample. + + :param Gaussian init: A Gaussian representing an initial state. + :param Gaussian trans: A Gaussian representing as series of state transitions, + with time as the rightmost batch dimension. This must have twice the event + dim as ``init``: ``trans.dim() == 2 * init.dim()``. + :param tuple sample_shape: An optional extra shape of samples to draw. + :param torch.Tensor noise: An optional standard white noise tensor of shape + ``sample_shape + batch_shape + (duration, state_dim)``, where + ``duration = 1 + trans.batch_shape[-1]`` is the number of time points + to be sampled, and ``state_dim = init.dim()`` is the state dimension. + This is useful for computing the mean (pass zeros), varying temperature + (pass scaled noise), and antithetic sampling (pass ``cat([z,-z])``). + :returns: A reparametrized sample of shape + ``sample_shape + batch_shape + (duration, state_dim)``. + :rtype: torch.Tensor + """ + assert isinstance(init, Gaussian) + assert isinstance(trans, Gaussian) + assert trans.dim() == 2 * init.dim() + state_dim = trans.dim() // 2 + batch_shape = broadcast_shape(trans.batch_shape[:-1], init.batch_shape) + if init.batch_shape != batch_shape: + init = init.expand(batch_shape) + dtype = trans.precision.dtype + device = trans.precision.device + perm = torch.cat( + [ + torch.arange(1 * state_dim, 2 * state_dim, device=device), + torch.arange(0 * state_dim, 1 * state_dim, device=device), + torch.arange(2 * state_dim, 3 * state_dim, device=device), + ] + ) + + # Forward filter, similar to sequential_gaussian_tensordot(). + tape = [] + shape = trans.batch_shape[:-1] # Note trans may be unbroadcasted. + gaussian = trans + while gaussian.batch_shape[-1] > 1: + time = gaussian.batch_shape[-1] + even_time = time // 2 * 2 + even_part = gaussian[..., :even_time] + x_y = even_part.reshape(shape + (even_time // 2, 2)) + x, y = x_y[..., 0], x_y[..., 1] + x = x.event_pad(right=state_dim) + y = y.event_pad(left=state_dim) + joint = (x + y).event_permute(perm) + tape.append(joint) + contracted = joint.marginalize(left=state_dim) + if time > even_time: + contracted = Gaussian.cat((contracted, gaussian[..., -1:]), dim=-1) + gaussian = contracted + gaussian = gaussian[..., 0] + init.event_pad(right=state_dim) + + # Generate noise in batch, then allow blocks to be consumed incrementally. + duration = 1 + trans.batch_shape[-1] + shape = torch.Size(sample_shape) + init.batch_shape + result_shape = shape + (duration, state_dim) + noise_stride = shape.numel() * state_dim # noise is consumed in time blocks + noise_position: int = 0 + if noise is None: + noise = torch.randn(result_shape, dtype=dtype, device=device) + assert noise.shape == result_shape + + def rsample(g: Gaussian, sample_shape: Tuple[int, ...] = ()) -> torch.Tensor: + """Samples, extracting a time-block of noise.""" + nonlocal noise_position + assert noise is not None + numel = torch.Size(sample_shape + g.batch_shape + (g.dim(),)).numel() + assert numel % noise_stride == 0 + beg: int = noise_position + end: int = noise_position + numel // noise_stride + assert end <= duration, "too little noise provided" + noise_position = end + return g.rsample(sample_shape, noise=noise[..., beg:end, :]) + + # Backward sample. + result = rsample(gaussian, sample_shape).reshape(shape + (2, state_dim)) + for joint in reversed(tape): + # The following comments demonstrate two example computations, one + # EVEN, one ODD. Ignoring sample_shape and batch_shape, let each zn be + # a single sampled event of shape (state_dim,). + if joint.batch_shape[-1] == result.size(-2) - 1: # EVEN case. + # Suppose e.g. result = [z0, z2, z4] + cond = result.repeat_interleave(2, dim=-2) # [z0, z0, z2, z2, z4, z4] + cond = cond[..., 1:-1, :] # [z0, z2, z2, z4] + cond = cond.reshape(shape + (-1, 2 * state_dim)) # [z0z2, z2z4] + sample = rsample(joint.condition(cond)) # [z1, z3] + zipper = result.new_empty(shape + (2 * result.size(-2) - 1, state_dim)) + zipper[..., ::2, :] = result # [z0, _, z2, _, z4] + zipper[..., 1::2, :] = sample # [_, z1, _, z3, _] + result = zipper # [z0, z1, z2, z3, z4] + else: # ODD case. + assert joint.batch_shape[-1] == result.size(-2) - 2 + # Suppose e.g. result = [z0, z2, z3] + cond = result[..., :-1, :].repeat_interleave(2, dim=-2) # [z0, z0, z2, z2] + cond = cond[..., 1:-1, :] # [z0, z2] + cond = cond.reshape(shape + (-1, 2 * state_dim)) # [z0z2] + sample = rsample(joint.condition(cond)) # [z1] + zipper = result.new_empty(shape + (2 * result.size(-2) - 2, state_dim)) + zipper[..., ::2, :] = result[..., :-1, :] # [z0, _, z2, _] + zipper[..., -1, :] = result[..., -1, :] # [_, _, _, z3] + zipper[..., 1:-1:2, :] = sample # [_, z1, _, _] + result = zipper # [z0, z1, z2, z3] + + assert noise_position == duration, "too much noise provided" + assert result.shape == result_shape + return result # [z0, z1, z2, ...] diff --git a/pyro/source/pyro/ops/hessian.py b/pyro/source/pyro/ops/hessian.py new file mode 100644 index 0000000000000000000000000000000000000000..4f166e6c074ad381e2ae653f68590d6c2e69dcf4 --- /dev/null +++ b/pyro/source/pyro/ops/hessian.py @@ -0,0 +1,22 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch + + +def hessian(y, xs): + """ + Convenience method for computing hessians. Note that this is slow in high + dimensions because computing hessians in a reverse-mode AD library like + PyTorch is inherently slow (note the for loop). + """ + dys = torch.autograd.grad(y, xs, create_graph=True) + flat_dy = torch.cat([dy.reshape(-1) for dy in dys]) + H = [] + for dyi in flat_dy: + Hi = torch.cat( + [Hij.reshape(-1) for Hij in torch.autograd.grad(dyi, xs, retain_graph=True)] + ) + H.append(Hi) + H = torch.stack(H) + return H diff --git a/pyro/source/pyro/ops/indexing.py b/pyro/source/pyro/ops/indexing.py new file mode 100644 index 0000000000000000000000000000000000000000..2fc57aa9f8916b887fe10e3914025aefbfca14a0 --- /dev/null +++ b/pyro/source/pyro/ops/indexing.py @@ -0,0 +1,217 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch + + +def _is_batched(arg): + return isinstance(arg, torch.Tensor) and arg.dim() + + +def _flatten(args, out): + if isinstance(args, tuple): + for arg in args: + _flatten(arg, out) + else: + # Combine consecutive Ellipsis. + if args is Ellipsis and out and out[-1] is Ellipsis: + return + out.append(args) + + +def index(tensor, args): + """ + Indexing with nested tuples. + + See also the convenience wrapper :class:`Index`. + + This is useful for writing indexing code that is compatible with multiple + interpretations, e.g. scalar evaluation, vectorized evaluation, or + reshaping. + + For example suppose ``x`` is a parameter with ``x.dim() == 2`` and we wish + to generalize the expression ``x[..., t]`` where ``t`` can be any of: + + - a scalar ``t=1`` as in ``x[..., 1]``; + - a slice ``t=slice(None)`` equivalent to ``x[..., :]``; or + - a reshaping operation ``t=(Ellipsis, None)`` equivalent to + ``x.unsqueeze(-1)``. + + While naive indexing would work for the first two , the third example would + result in a nested tuple ``(Ellipsis, (Ellipsis, None))``. This helper + flattens that nested tuple and combines consecutive ``Ellipsis``. + + :param torch.Tensor tensor: A tensor to be indexed. + :param tuple args: An index, as args to ``__getitem__``. + :returns: A flattened interpetation of ``tensor[args]``. + :rtype: torch.Tensor + """ + if not isinstance(args, tuple): + return tensor[args] + if not args: + return tensor + + # Flatten. + flat = [] + _flatten(args, flat) + args = tuple(flat) + + return tensor[args] + + +class Index: + """ + Convenience wrapper around :func:`index`. + + The following are equivalent:: + + Index(x)[..., i, j, :] + index(x, (Ellipsis, i, j, slice(None))) + + :param torch.Tensor tensor: A tensor to be indexed. + :return: An object with a special :meth:`__getitem__` method. + """ + + def __init__(self, tensor): + self._tensor = tensor + + def __getitem__(self, args): + return index(self._tensor, args) + + +def vindex(tensor, args): + """ + Vectorized advanced indexing with broadcasting semantics. + + See also the convenience wrapper :class:`Vindex`. + + This is useful for writing indexing code that is compatible with batching + and enumeration, especially for selecting mixture components with discrete + random variables. + + For example suppose ``x`` is a parameter with ``x.dim() == 3`` and we wish + to generalize the expression ``x[i, :, j]`` from integer ``i,j`` to tensors + ``i,j`` with batch dims and enum dims (but no event dims). Then we can + write the generalize version using :class:`Vindex` :: + + xij = Vindex(x)[i, :, j] + + batch_shape = broadcast_shape(i.shape, j.shape) + event_shape = (x.size(1),) + assert xij.shape == batch_shape + event_shape + + To handle the case when ``x`` may also contain batch dimensions (e.g. if + ``x`` was sampled in a plated context as when using vectorized particles), + :func:`vindex` uses the special convention that ``Ellipsis`` denotes batch + dimensions (hence ``...`` can appear only on the left, never in the middle + or in the right). Suppose ``x`` has event dim 3. Then we can write:: + + old_batch_shape = x.shape[:-3] + old_event_shape = x.shape[-3:] + + xij = Vindex(x)[..., i, :, j] # The ... denotes unknown batch shape. + + new_batch_shape = broadcast_shape(old_batch_shape, i.shape, j.shape) + new_event_shape = (x.size(1),) + assert xij.shape = new_batch_shape + new_event_shape + + Note that this special handling of ``Ellipsis`` differs from the NEP [1]. + + Formally, this function assumes: + + 1. Each arg is either ``Ellipsis``, ``slice(None)``, an integer, or a + batched ``torch.LongTensor`` (i.e. with empty event shape). This + function does not support Nontrivial slices or ``torch.BoolTensor`` + masks. ``Ellipsis`` can only appear on the left as ``args[0]``. + 2. If ``args[0] is not Ellipsis`` then ``tensor`` is not + batched, and its event dim is equal to ``len(args)``. + 3. If ``args[0] is Ellipsis`` then ``tensor`` is batched and + its event dim is equal to ``len(args[1:])``. Dims of ``tensor`` + to the left of the event dims are considered batch dims and will be + broadcasted with dims of tensor args. + + Note that if none of the args is a tensor with ``.dim() > 0``, then this + function behaves like standard indexing:: + + if not any(isinstance(a, torch.Tensor) and a.dim() for a in args): + assert Vindex(x)[args] == x[args] + + **References** + + [1] https://www.numpy.org/neps/nep-0021-advanced-indexing.html + introduces ``vindex`` as a helper for vectorized indexing. + The Pyro implementation is similar to the proposed notation + ``x.vindex[]`` except for slightly different handling of ``Ellipsis``. + + :param torch.Tensor tensor: A tensor to be indexed. + :param tuple args: An index, as args to ``__getitem__``. + :returns: A nonstandard interpetation of ``tensor[args]``. + :rtype: torch.Tensor + """ + if not isinstance(args, tuple): + return tensor[args] + if not args: + return tensor + + # Compute event dim before and after indexing. + if args[0] is Ellipsis: + args = args[1:] + if not args: + return tensor + old_event_dim = len(args) + args = (slice(None),) * (tensor.dim() - len(args)) + args + else: + args = args + (slice(None),) * (tensor.dim() - len(args)) + old_event_dim = len(args) + assert len(args) == tensor.dim() + if any(a is Ellipsis for a in args): + raise NotImplementedError("Non-leading Ellipsis is not supported") + + # In simple cases, standard advanced indexing broadcasts correctly. + is_standard = True + if tensor.dim() > old_event_dim and _is_batched(args[0]): + is_standard = False + elif any(_is_batched(a) for a in args[1:]): + is_standard = False + if is_standard: + return tensor[args] + + # Convert args to use broadcasting semantics. + new_event_dim = sum(isinstance(a, slice) for a in args[-old_event_dim:]) + new_dim = 0 + args = list(args) + for i, arg in reversed(list(enumerate(args))): + if isinstance(arg, slice): + # Convert slices to torch.arange()s. + if arg != slice(None): + raise NotImplementedError("Nontrivial slices are not supported") + arg = torch.arange(tensor.size(i), dtype=torch.long, device=tensor.device) + arg = arg.reshape((-1,) + (1,) * new_dim) + new_dim += 1 + elif _is_batched(arg): + # Reshape nontrivial tensors. + arg = arg.reshape(arg.shape + (1,) * new_event_dim) + args[i] = arg + args = tuple(args) + + return tensor[args] + + +class Vindex: + """ + Convenience wrapper around :func:`vindex`. + + The following are equivalent:: + + Vindex(x)[..., i, j, :] + vindex(x, (Ellipsis, i, j, slice(None))) + + :param torch.Tensor tensor: A tensor to be indexed. + :return: An object with a special :meth:`__getitem__` method. + """ + + def __init__(self, tensor): + self._tensor = tensor + + def __getitem__(self, args): + return vindex(self._tensor, args) diff --git a/pyro/source/pyro/ops/integrator.py b/pyro/source/pyro/ops/integrator.py new file mode 100644 index 0000000000000000000000000000000000000000..269519eff4f59d37d6c09ddb35304494bf0cd2e7 --- /dev/null +++ b/pyro/source/pyro/ops/integrator.py @@ -0,0 +1,129 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import warnings +from typing import Callable, Dict + +from torch.autograd import grad + +# Registry for exception handlers that can be used to catch certain failures +# during computation of `potential_fn` within `potential_grad`. +_EXCEPTION_HANDLERS: Dict[str, Callable[[Exception], bool]] = {} + + +def velocity_verlet( + z, r, potential_fn, kinetic_grad, step_size, num_steps=1, z_grads=None +): + r""" + Second order symplectic integrator that uses the velocity verlet algorithm. + + :param dict z: dictionary of sample site names and their current values + (type :class:`~torch.Tensor`). + :param dict r: dictionary of sample site names and corresponding momenta + (type :class:`~torch.Tensor`). + :param callable potential_fn: function that returns potential energy given z + for each sample site. The negative gradient of the function with respect + to ``z`` determines the rate of change of the corresponding sites' + momenta ``r``. + :param callable kinetic_grad: a function calculating gradient of kinetic energy + w.r.t. momentum variable. + :param float step_size: step size for each time step iteration. + :param int num_steps: number of discrete time steps over which to integrate. + :param torch.Tensor z_grads: optional gradients of potential energy at current ``z``. + :return tuple (z_next, r_next, z_grads, potential_energy): next position and momenta, + together with the potential energy and its gradient w.r.t. ``z_next``. + """ + z_next = z.copy() + r_next = r.copy() + for _ in range(num_steps): + z_next, r_next, z_grads, potential_energy = _single_step_verlet( + z_next, r_next, potential_fn, kinetic_grad, step_size, z_grads + ) + return z_next, r_next, z_grads, potential_energy + + +def _single_step_verlet(z, r, potential_fn, kinetic_grad, step_size, z_grads=None): + r""" + Single step velocity verlet that modifies the `z`, `r` dicts in place. + """ + + z_grads = potential_grad(potential_fn, z)[0] if z_grads is None else z_grads + + for site_name in r: + r[site_name] = r[site_name] + 0.5 * step_size * ( + -z_grads[site_name] + ) # r(n+1/2) + + r_grads = kinetic_grad(r) + for site_name in z: + z[site_name] = z[site_name] + step_size * r_grads[site_name] # z(n+1) + + z_grads, potential_energy = potential_grad(potential_fn, z) + for site_name in r: + r[site_name] = r[site_name] + 0.5 * step_size * (-z_grads[site_name]) # r(n+1) + + return z, r, z_grads, potential_energy + + +def potential_grad(potential_fn, z): + """ + Gradient of `potential_fn` w.r.t. parameters z. + + :param potential_fn: python callable that takes in a dictionary of parameters + and returns the potential energy. + :param dict z: dictionary of parameter values keyed by site name. + :return: tuple of `(z_grads, potential_energy)`, where `z_grads` is a dictionary + with the same keys as `z` containing gradients and potential_energy is a + torch scalar. + """ + z_keys, z_nodes = zip(*z.items()) + for node in z_nodes: + node.requires_grad_(True) + try: + potential_energy = potential_fn(z) + # handle exceptions as defined in the exception registry + except Exception as e: + if any(h(e) for h in _EXCEPTION_HANDLERS.values()): + grads = {k: v.new_zeros(v.shape) for k, v in z.items()} + return grads, z_nodes[0].new_tensor(float("nan")) + else: + raise e + grads = grad(potential_energy, z_nodes) + for node in z_nodes: + node.requires_grad_(False) + return dict(zip(z_keys, grads)), potential_energy.detach() + + +def register_exception_handler( + name: str, handler: Callable[[Exception], bool], warn_on_overwrite: bool = True +) -> None: + """ + Register an exception handler for handling (primarily numerical) errors + when evaluating the potential function. + + :param name: name of the handler (must be unique). + :param handler: A callable mapping an Exception to a boolean. Exceptions + that evaluate to true in any of the handlers are handled in the computation + of the potential energy. + :param warn_on_overwrite: If True, warns when overwriting a handler already + registered under the provided name. + """ + if name in _EXCEPTION_HANDLERS and warn_on_overwrite: + warnings.warn( + f"Overwriting Exception handler already registered under key {name}.", + RuntimeWarning, + ) + _EXCEPTION_HANDLERS[name] = handler + + +def _handle_torch_singular(exception: Exception) -> bool: + """Exception handler for errors thrown on (numerically) singular matrices.""" + # the actual type of the exception thrown is torch._C._LinAlgError + if isinstance(exception, RuntimeError): + msg = str(exception) + return "singular" in msg or "input is not positive-definite" in msg + return False + + +# Register default exception handler +register_exception_handler("torch_singular", _handle_torch_singular) diff --git a/pyro/source/pyro/ops/jit.py b/pyro/source/pyro/ops/jit.py new file mode 100644 index 0000000000000000000000000000000000000000..5c28eb8d4395b71f574bd4ee994c9d269db0642b --- /dev/null +++ b/pyro/source/pyro/ops/jit.py @@ -0,0 +1,163 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import argparse +import warnings +import weakref + +import torch + +import pyro +import pyro.poutine as poutine +from pyro.util import ignore_jit_warnings, optional, timed + + +def _hash(value, allow_id): + try: + hash(value) + return value + except TypeError as e: + if isinstance(value, list): + return tuple(_hash(x, allow_id) for x in value) + elif isinstance(value, dict): + return tuple( + sorted( + (_hash(x, allow_id), _hash(y, allow_id)) for x, y in value.items() + ) + ) + elif isinstance(value, set): + return frozenset(_hash(x, allow_id) for x in value) + elif isinstance(value, argparse.Namespace): + return str(value) + elif allow_id: + return id(value) + raise e + + +def _hashable_args_kwargs(args, kwargs): + items = sorted(kwargs.items()) + hashable_kwargs = tuple((key, _hash(value, False)) for key, value in items) + try: + hash(hashable_kwargs) + except TypeError: + warnings.warn("Failed to hash kwargs; attempting to hash by id.") + hashable_kwargs = tuple((key, _hash(value, True)) for key, value in items) + return len(args), hashable_kwargs + + +class CompiledFunction: + """ + Output type of :func:`pyro.ops.jit.trace`. + + Wrapper around the output of :func:`torch.jit.trace` + that handles parameter plumbing. + + The actual PyTorch compilation artifact is stored in :attr:`compiled`. + Call diagnostic methods on this attribute. + """ + + def __init__(self, fn, ignore_warnings=False, jit_options=None): + self.fn = fn + self.compiled = {} # len(args) -> callable + self.ignore_warnings = ignore_warnings + self.jit_options = {} if jit_options is None else jit_options + self.jit_options.setdefault("check_trace", False) + self.compile_time = None + self._param_names = None + + def __call__(self, *args, **kwargs): + key = _hashable_args_kwargs(args, kwargs) + + # if first time + if key not in self.compiled: + # param capture + with poutine.block(): + with poutine.trace(param_only=True) as first_param_capture: + self.fn(*args, **kwargs) + + self._param_names = list(set(first_param_capture.trace.nodes.keys())) + unconstrained_params = tuple( + pyro.param(name).unconstrained() for name in self._param_names + ) + params_and_args = unconstrained_params + args + weakself = weakref.ref(self) + + def compiled(*params_and_args): + self = weakself() + unconstrained_params = params_and_args[: len(self._param_names)] + args = params_and_args[len(self._param_names) :] + constrained_params = {} + for name, unconstrained_param in zip( + self._param_names, unconstrained_params + ): + constrained_param = pyro.param( + name + ) # assume param has been initialized + assert constrained_param.unconstrained() is unconstrained_param + constrained_params[name] = constrained_param + return poutine.replay(self.fn, params=constrained_params)( + *args, **kwargs + ) + + if self.ignore_warnings: + compiled = ignore_jit_warnings()(compiled) + with pyro.validation_enabled(False): + time_compilation = self.jit_options.pop("time_compilation", False) + with optional(timed(), time_compilation) as t: + self.compiled[key] = torch.jit.trace( + compiled, params_and_args, **self.jit_options + ) + if time_compilation: + self.compile_time = t.elapsed + else: + unconstrained_params = [ + pyro.param(name).unconstrained() for name in self._param_names + ] + params_and_args = unconstrained_params + list(args) + + with poutine.block(hide=self._param_names): + with poutine.trace(param_only=True) as param_capture: + ret = self.compiled[key](*params_and_args) + + for name in param_capture.trace.nodes.keys(): + if name not in self._param_names: + raise NotImplementedError( + "pyro.ops.jit.trace assumes all params are created on " + "first invocation, but found new param: {}".format(name) + ) + + return ret + + +def trace(fn=None, ignore_warnings=False, jit_options=None): + """ + Lazy replacement for :func:`torch.jit.trace` that works with + Pyro functions that call :func:`pyro.param`. + + The actual compilation artifact is stored in the ``compiled`` attribute of + the output. Call diagnostic methods on this attribute. + + Example:: + + def model(x): + scale = pyro.param("scale", torch.tensor(0.5), constraint=constraints.positive) + return pyro.sample("y", dist.Normal(x, scale)) + + @pyro.ops.jit.trace + def model_log_prob_fn(x, y): + cond_model = pyro.condition(model, data={"y": y}) + tr = pyro.poutine.trace(cond_model).get_trace(x) + return tr.log_prob_sum() + + :param callable fn: The function to be traced. + :param bool ignore_warnins: Whether to ignore jit warnings. + :param dict jit_options: Optional dict of options to pass to + :func:`torch.jit.trace` , e.g. ``{"optimize": False}``. + """ + if fn is None: + return lambda fn: trace( + fn, ignore_warnings=ignore_warnings, jit_options=jit_options + ) + return CompiledFunction( + fn, ignore_warnings=ignore_warnings, jit_options=jit_options + ) diff --git a/pyro/source/pyro/ops/linalg.py b/pyro/source/pyro/ops/linalg.py new file mode 100644 index 0000000000000000000000000000000000000000..f3b3af798ddccb9cd04a82c16ebf8f3a3e713078 --- /dev/null +++ b/pyro/source/pyro/ops/linalg.py @@ -0,0 +1,106 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math +import warnings +from contextlib import contextmanager + +import torch + + +@contextmanager +def ignore_torch_deprecation_warnings(): + with warnings.catch_warnings(): + # Ignore deprecation warning until funsor updates to torch>=1.10. + warnings.filterwarnings("ignore", "torch.triangular_solve is deprecated") + yield + + +def rinverse(M, sym=False): + """Matrix inversion of rightmost dimensions (batched). + + For 1, 2, and 3 dimensions this uses the formulae. + For larger matrices, it uses blockwise inversion to reduce to + smaller matrices. + """ + assert M.shape[-1] == M.shape[-2] + if M.shape[-1] == 1: + return 1.0 / M + elif M.shape[-1] == 2: + det = M[..., 0, 0] * M[..., 1, 1] - M[..., 1, 0] * M[..., 0, 1] + inv = torch.empty_like(M) + inv[..., 0, 0] = M[..., 1, 1] + inv[..., 1, 1] = M[..., 0, 0] + inv[..., 0, 1] = -M[..., 0, 1] + inv[..., 1, 0] = -M[..., 1, 0] + return inv / det.unsqueeze(-1).unsqueeze(-1) + elif M.shape[-1] == 3: + return inv3d(M, sym=sym) + else: + return torch.inverse(M) + + +def determinant_3d(H): + """ + Returns the determinants of a batched 3-D matrix + """ + detH = ( + H[..., 0, 0] * (H[..., 1, 1] * H[..., 2, 2] - H[..., 2, 1] * H[..., 1, 2]) + + H[..., 0, 1] * (H[..., 1, 2] * H[..., 2, 0] - H[..., 1, 0] * H[..., 2, 2]) + + H[..., 0, 2] * (H[..., 1, 0] * H[..., 2, 1] - H[..., 2, 0] * H[..., 1, 1]) + ) + return detH + + +def eig_3d(H): + """ + Returns the eigenvalues of a symmetric batched 3-D matrix + """ + p1 = H[..., 0, 1].pow(2) + H[..., 0, 2].pow(2) + H[..., 1, 2].pow(2) + q = (H[..., 0, 0] + H[..., 1, 1] + H[..., 2, 2]) / 3 + p2 = ( + (H[..., 0, 0] - q).pow(2) + + (H[..., 1, 1] - q).pow(2) + + (H[..., 2, 2] - q).pow(2) + + 2 * p1 + ) + p = torch.sqrt(p2 / 6) + B = (1 / p).unsqueeze(-1).unsqueeze(-1) * ( + H - q.unsqueeze(-1).unsqueeze(-1) * torch.eye(3) + ) + r = determinant_3d(B) / 2 + phi = (r.acos() / 3).unsqueeze(-1).unsqueeze(-1).expand(r.shape + (3, 3)).clone() + phi[r < -1 + 1e-6] = math.pi / 3 + phi[r > 1 - 1e-6] = 0.0 + + eig1 = q + 2 * p * torch.cos(phi[..., 0, 0]) + eig2 = q + 2 * p * torch.cos(phi[..., 0, 0] + (2 * math.pi / 3)) + eig3 = 3 * q - eig1 - eig2 + # eig2 <= eig3 <= eig1 + return eig2, eig3, eig1 + + +def inv3d(H, sym=False): + """ + Calculates the inverse of a batched 3-D matrix + """ + detH = determinant_3d(H) + Hinv = torch.empty_like(H) + Hinv[..., 0, 0] = H[..., 1, 1] * H[..., 2, 2] - H[..., 1, 2] * H[..., 2, 1] + Hinv[..., 1, 1] = H[..., 0, 0] * H[..., 2, 2] - H[..., 0, 2] * H[..., 2, 0] + Hinv[..., 2, 2] = H[..., 0, 0] * H[..., 1, 1] - H[..., 0, 1] * H[..., 1, 0] + + Hinv[..., 0, 1] = H[..., 0, 2] * H[..., 2, 1] - H[..., 0, 1] * H[..., 2, 2] + Hinv[..., 0, 2] = H[..., 0, 1] * H[..., 1, 2] - H[..., 0, 2] * H[..., 1, 1] + Hinv[..., 1, 2] = H[..., 0, 2] * H[..., 1, 0] - H[..., 0, 0] * H[..., 1, 2] + + if sym: + Hinv[..., 1, 0] = Hinv[..., 0, 1] + Hinv[..., 2, 0] = Hinv[..., 0, 2] + Hinv[..., 2, 1] = Hinv[..., 1, 2] + else: + Hinv[..., 1, 0] = H[..., 2, 0] * H[..., 1, 2] - H[..., 1, 0] * H[..., 2, 2] + Hinv[..., 2, 0] = H[..., 1, 0] * H[..., 2, 1] - H[..., 2, 0] * H[..., 1, 1] + Hinv[..., 2, 1] = H[..., 2, 0] * H[..., 0, 1] - H[..., 0, 0] * H[..., 2, 1] + Hinv = Hinv / detH.unsqueeze(-1).unsqueeze(-1) + return Hinv diff --git a/pyro/source/pyro/ops/newton.py b/pyro/source/pyro/ops/newton.py new file mode 100644 index 0000000000000000000000000000000000000000..3e9649c804d1f786ad2386b30718ce0873ac7f2b --- /dev/null +++ b/pyro/source/pyro/ops/newton.py @@ -0,0 +1,246 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.autograd import grad + +from pyro.ops.linalg import eig_3d, rinverse +from pyro.util import warn_if_nan + + +def newton_step(loss, x, trust_radius=None): + """ + Performs a Newton update step to minimize loss on a batch of variables, + optionally constraining to a trust region [1]. + + This is especially usful because the final solution of newton iteration + is differentiable wrt the inputs, even when all but the final ``x`` is + detached, due to this method's quadratic convergence [2]. ``loss`` must be + twice-differentiable as a function of ``x``. If ``loss`` is ``2+d``-times + differentiable, then the return value of this function is ``d``-times + differentiable. + + When ``loss`` is interpreted as a negative log probability density, then + the return values ``mode,cov`` of this function can be used to construct a + Laplace approximation ``MultivariateNormal(mode,cov)``. + + .. warning:: Take care to detach the result of this function when used in + an optimization loop. If you forget to detach the result of this + function during optimization, then backprop will propagate through + the entire iteration process, and worse will compute two extra + derivatives for each step. + + Example use inside a loop:: + + x = torch.zeros(1000, 2) # arbitrary initial value + for step in range(100): + x = x.detach() # block gradients through previous steps + x.requires_grad = True # ensure loss is differentiable wrt x + loss = my_loss_function(x) + x = newton_step(loss, x, trust_radius=1.0) + # the final x is still differentiable + + [1] Yuan, Ya-xiang. Iciam. Vol. 99. 2000. + "A review of trust region algorithms for optimization." + ftp://ftp.cc.ac.cn/pub/yyx/papers/p995.pdf + [2] Christianson, Bruce. Optimization Methods and Software 3.4 (1994) + "Reverse accumulation and attractive fixed points." + http://uhra.herts.ac.uk/bitstream/handle/2299/4338/903839.pdf + + :param torch.Tensor loss: A scalar function of ``x`` to be minimized. + :param torch.Tensor x: A dependent variable of shape ``(N, D)`` + where ``N`` is the batch size and ``D`` is a small number. + :param float trust_radius: An optional trust region trust_radius. The + updated value ``mode`` of this function will be within + ``trust_radius`` of the input ``x``. + :return: A pair ``(mode, cov)`` where ``mode`` is an updated tensor + of the same shape as the original value ``x``, and ``cov`` is an + esitmate of the covariance DxD matrix with + ``cov.shape == x.shape[:-1] + (D,D)``. + :rtype: tuple + """ + if x.dim() < 1: + raise ValueError( + "Expected x to have at least one dimension, actual shape {}".format(x.shape) + ) + dim = x.shape[-1] + if dim == 1: + return newton_step_1d(loss, x, trust_radius) + elif dim == 2: + return newton_step_2d(loss, x, trust_radius) + elif dim == 3: + return newton_step_3d(loss, x, trust_radius) + else: + raise NotImplementedError("newton_step_nd is not implemented") + + +def newton_step_1d(loss, x, trust_radius=None): + """ + Performs a Newton update step to minimize loss on a batch of 1-dimensional + variables, optionally regularizing to constrain to a trust region. + + See :func:`newton_step` for details. + + :param torch.Tensor loss: A scalar function of ``x`` to be minimized. + :param torch.Tensor x: A dependent variable with rightmost size of 1. + :param float trust_radius: An optional trust region trust_radius. The + updated value ``mode`` of this function will be within + ``trust_radius`` of the input ``x``. + :return: A pair ``(mode, cov)`` where ``mode`` is an updated tensor + of the same shape as the original value ``x``, and ``cov`` is an + esitmate of the covariance 1x1 matrix with + ``cov.shape == x.shape[:-1] + (1,1)``. + :rtype: tuple + """ + if loss.shape != (): + raise ValueError( + "Expected loss to be a scalar, actual shape {}".format(loss.shape) + ) + if x.dim() < 1 or x.shape[-1] != 1: + raise ValueError( + "Expected x to have rightmost size 1, actual shape {}".format(x.shape) + ) + + # compute derivatives + g = grad(loss, [x], create_graph=True)[0] + H = grad(g.sum(), [x], create_graph=True)[0] + warn_if_nan(g, "g") + warn_if_nan(H, "H") + Hinv = H.clamp(min=1e-8).reciprocal() + dx = -g * Hinv + dx[~(dx == dx)] = 0 + if trust_radius is not None: + dx.clamp_(min=-trust_radius, max=trust_radius) + + # apply update + x_new = x.detach() + dx + assert x_new.shape == x.shape + return x_new, Hinv.unsqueeze(-1) + + +def newton_step_2d(loss, x, trust_radius=None): + """ + Performs a Newton update step to minimize loss on a batch of 2-dimensional + variables, optionally regularizing to constrain to a trust region. + + See :func:`newton_step` for details. + + :param torch.Tensor loss: A scalar function of ``x`` to be minimized. + :param torch.Tensor x: A dependent variable with rightmost size of 2. + :param float trust_radius: An optional trust region trust_radius. The + updated value ``mode`` of this function will be within + ``trust_radius`` of the input ``x``. + :return: A pair ``(mode, cov)`` where ``mode`` is an updated tensor + of the same shape as the original value ``x``, and ``cov`` is an + esitmate of the covariance 2x2 matrix with + ``cov.shape == x.shape[:-1] + (2,2)``. + :rtype: tuple + """ + if loss.shape != (): + raise ValueError( + "Expected loss to be a scalar, actual shape {}".format(loss.shape) + ) + if x.dim() < 1 or x.shape[-1] != 2: + raise ValueError( + "Expected x to have rightmost size 2, actual shape {}".format(x.shape) + ) + + # compute derivatives + g = grad(loss, [x], create_graph=True)[0] + H = torch.stack( + [ + grad(g[..., 0].sum(), [x], create_graph=True)[0], + grad(g[..., 1].sum(), [x], create_graph=True)[0], + ], + -1, + ) + assert g.shape[-1:] == (2,) + assert H.shape[-2:] == (2, 2) + warn_if_nan(g, "g") + warn_if_nan(H, "H") + + if trust_radius is not None: + # regularize to keep update within ball of given trust_radius + detH = H[..., 0, 0] * H[..., 1, 1] - H[..., 0, 1] * H[..., 1, 0] + mean_eig = (H[..., 0, 0] + H[..., 1, 1]) / 2 + min_eig = mean_eig - (mean_eig**2 - detH).clamp(min=0).sqrt() + regularizer = (g.pow(2).sum(-1).sqrt() / trust_radius - min_eig).clamp_( + min=1e-8 + ) + warn_if_nan(regularizer, "regularizer") + H = H + regularizer.unsqueeze(-1).unsqueeze(-1) * torch.eye( + 2, dtype=H.dtype, device=H.device + ) + + # compute newton update + Hinv = rinverse(H, sym=True) + warn_if_nan(Hinv, "Hinv") + + # apply update + x_new = x.detach() - (Hinv * g.unsqueeze(-2)).sum(-1) + assert x_new.shape == x.shape + return x_new, Hinv + + +def newton_step_3d(loss, x, trust_radius=None): + """ + Performs a Newton update step to minimize loss on a batch of 3-dimensional + variables, optionally regularizing to constrain to a trust region. + + See :func:`newton_step` for details. + + :param torch.Tensor loss: A scalar function of ``x`` to be minimized. + :param torch.Tensor x: A dependent variable with rightmost size of 2. + :param float trust_radius: An optional trust region trust_radius. The + updated value ``mode`` of this function will be within + ``trust_radius`` of the input ``x``. + :return: A pair ``(mode, cov)`` where ``mode`` is an updated tensor + of the same shape as the original value ``x``, and ``cov`` is an + esitmate of the covariance 3x3 matrix with + ``cov.shape == x.shape[:-1] + (3,3)``. + :rtype: tuple + """ + if loss.shape != (): + raise ValueError( + "Expected loss to be a scalar, actual shape {}".format(loss.shape) + ) + if x.dim() < 1 or x.shape[-1] != 3: + raise ValueError( + "Expected x to have rightmost size 3, actual shape {}".format(x.shape) + ) + + # compute derivatives + g = grad(loss, [x], create_graph=True)[0] + H = torch.stack( + [ + grad(g[..., 0].sum(), [x], create_graph=True)[0], + grad(g[..., 1].sum(), [x], create_graph=True)[0], + grad(g[..., 2].sum(), [x], create_graph=True)[0], + ], + -1, + ) + assert g.shape[-1:] == (3,) + assert H.shape[-2:] == (3, 3) + warn_if_nan(g, "g") + warn_if_nan(H, "H") + + if trust_radius is not None: + # regularize to keep update within ball of given trust_radius + # calculate eigenvalues of symmetric matrix + min_eig, _, _ = eig_3d(H) + regularizer = (g.pow(2).sum(-1).sqrt() / trust_radius - min_eig).clamp_( + min=1e-8 + ) + warn_if_nan(regularizer, "regularizer") + H = H + regularizer.unsqueeze(-1).unsqueeze(-1) * torch.eye( + 3, dtype=H.dtype, device=H.device + ) + + # compute newton update + Hinv = rinverse(H, sym=True) + warn_if_nan(Hinv, "Hinv") + + # apply update + x_new = x.detach() - (Hinv * g.unsqueeze(-2)).sum(-1) + assert x_new.shape == x.shape, "{} {}".format(x_new.shape, x.shape) + return x_new, Hinv diff --git a/pyro/source/pyro/ops/packed.py b/pyro/source/pyro/ops/packed.py new file mode 100644 index 0000000000000000000000000000000000000000..0570d668698eb88de069859264ae8595ed84f635 --- /dev/null +++ b/pyro/source/pyro/ops/packed.py @@ -0,0 +1,200 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import torch + +from pyro.distributions.util import is_identically_one +from pyro.util import ignore_jit_warnings + + +def pack(value, dim_to_symbol): + """ + Converts an unpacked tensor to a packed tensor. + + :param value: a number or tensor + :param dim_to_symbol: a map from negative integers to characters + """ + if isinstance(value, torch.Tensor): + assert not hasattr( + value, "_pyro_dims" + ), "tried to pack an already-packed tensor" + shape = value.shape + shift = len(shape) + try: + with ignore_jit_warnings(): + dims = "".join( + dim_to_symbol[dim - shift] + for dim, size in enumerate(shape) + if size > 1 + ) + except KeyError as e: + raise ValueError( + "\n ".join( + [ + "Invalid tensor shape.", + "Allowed dims: {}".format( + ", ".join(map(str, sorted(dim_to_symbol))) + ), + "Actual shape: {}".format(tuple(value.shape)), + "Try adding shape assertions for your model's sample values and distribution parameters.", + ] + ) + ) from e + value = value.squeeze() + value._pyro_dims = dims + assert value.dim() == len(value._pyro_dims) + return value + + +def unpack(value, symbol_to_dim): + """ + Converts a packed tensor to an unpacked tensor. + + :param value: a number or tensor + :param symbol_to_dim: a map from characters to negative integers + """ + if isinstance(value, torch.Tensor): + assert value.dim() == len(value._pyro_dims) + if value.dim(): + unsorted_dims = [symbol_to_dim[dim] for dim in value._pyro_dims] + dims = sorted(unsorted_dims) + value = value.permute(*(unsorted_dims.index(dim) for dim in dims)) + shape = [1] * -min(dims) + for dim, size in zip(dims, value.shape): + shape[dim] = size + value = value.reshape(shape) + else: + value = value[...] # ensure ._pyro_dims attr is not set + return value + + +def broadcast_all(*values, **kwargs): + """ + Packed broadcasting of multiple tensors. + """ + dims = kwargs.get("dims") + sizes = { + dim: size + for value in values + for dim, size in zip(value._pyro_dims, value.shape) + } + if dims is None: + dims = "".join(sorted(sizes)) + else: + assert set(dims) == set(sizes) + shape = torch.Size(sizes[dim] for dim in dims) + values = list(values) + for i, x in enumerate(values): + old_dims = x._pyro_dims + if old_dims != dims: + x = x.permute(tuple(old_dims.index(dim) for dim in dims if dim in old_dims)) + x = x.reshape(tuple(sizes[dim] if dim in old_dims else 1 for dim in dims)) + x = x.expand(shape) + x._pyro_dims = dims + assert x.dim() == len(x._pyro_dims) + values[i] = x + return tuple(values) + + +def gather(value, index, dim): + """ + Packed broadcasted gather of indexed values along a named dim. + """ + assert dim in value._pyro_dims + assert dim not in index._pyro_dims + value, index = broadcast_all(value, index) + dims = value._pyro_dims.replace(dim, "") + pos = value._pyro_dims.index(dim) + with ignore_jit_warnings(): + zero = torch.zeros(1, dtype=torch.long, device=index.device) + index = index.index_select(pos, zero) + value = value.gather(pos, index).squeeze(pos) + value._pyro_dims = dims + assert value.dim() == len(value._pyro_dims) + return value + + +def mul(lhs, rhs): + """ + Packed broadcasted multiplication. + """ + if isinstance(lhs, torch.Tensor) and isinstance(rhs, torch.Tensor): + dims = "".join(sorted(set(lhs._pyro_dims + rhs._pyro_dims))) + equation = lhs._pyro_dims + "," + rhs._pyro_dims + "->" + dims + result = torch.einsum(equation, lhs, rhs, backend="torch") + result._pyro_dims = dims + return result + result = lhs * rhs + if isinstance(lhs, torch.Tensor): + result._pyro_dims = lhs._pyro_dims + elif isinstance(rhs, torch.Tensor): + result._pyro_dims = rhs._pyro_dims + return result + + +def scale_and_mask(tensor, scale=1.0, mask=None): + """ + Scale and mask a packed tensor, broadcasting and avoiding unnecessary ops. + + :param torch.Tensor tensor: a packed tensor + :param scale: a positive scale + :type scale: torch.Tensor or number + :param mask: an optional packed tensor mask + :type mask: torch.BoolTensor, bool, or None + """ + if isinstance(scale, torch.Tensor) and scale.dim(): + raise NotImplementedError("non-scalar scale is not supported") + if mask is None or mask is True: + if is_identically_one(scale): + return tensor + result = tensor * scale + result._pyro_dims = tensor._pyro_dims + return result + if mask is False: + result = torch.zeros_like(tensor) + result._pyro_dims = tensor._pyro_dims + return result + tensor, mask = broadcast_all(tensor, mask) + result = torch.where(mask, tensor, tensor.new_zeros(())) + result._pyro_dims = tensor._pyro_dims + return result + + +def neg(value): + """ + Packed negation. + """ + result = -value + if isinstance(value, torch.Tensor): + result._pyro_dims = value._pyro_dims + return result + + +def exp(value): + """ + Packed pointwise exponential. + """ + if isinstance(value, torch.Tensor): + result = value.exp() + result._pyro_dims = value._pyro_dims + else: + result = math.exp(value) + return result + + +def rename_equation(equation, *operands): + """ + Renames symbols in an einsum/ubersum equation to match the + ``.pyro_dims`` attributes of packed ``operands``. + """ + inputs, outputs = equation.split("->") + inputs = inputs.split(",") + assert len(inputs) == len(operands) + rename = { + old: new + for input_, operand in zip(inputs, operands) + for old, new in zip(input_, operand._pyro_dims) + } + return "".join(rename.get(s, s) for s in equation) diff --git a/pyro/source/pyro/ops/provenance.py b/pyro/source/pyro/ops/provenance.py new file mode 100644 index 0000000000000000000000000000000000000000..ff5e64ad7f2ee004c4d7222433c70e2dd83b917e --- /dev/null +++ b/pyro/source/pyro/ops/provenance.py @@ -0,0 +1,174 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from functools import partial, singledispatch +from typing import Tuple, TypeVar + +import torch +from torch.utils._pytree import tree_flatten, tree_map, tree_unflatten + +_Tensor = TypeVar("_Tensor", bound=torch.Tensor) + + +class ProvenanceTensor(torch.Tensor): + """ + Provenance tracking implementation in Pytorch. + + This class wraps a :class:`torch.Tensor` to track provenance through + PyTorch ops, where provenance is a user-defined frozenset of objects. The + provenance of the output tensors of any op is the union of provenances of + input tensors. + + - To start tracking provenance, wrap a :class:`torch.Tensor` in a + :class:`ProvenanceTensor` with user-defined initial provenance. + - To read the provenance of a tensor use :meth:`get_provenance` . + - To detach provenance during a computation (similar to + :meth:`~torch.Tensor.detach` to detach gradients during Pytorch + computations), use the :meth:`detach_provenance` . This is useful to + distinguish direct vs indirect provenance. + + Example:: + + >>> a = ProvenanceTensor(torch.randn(3), frozenset({"a"})) + >>> b = ProvenanceTensor(torch.randn(3), frozenset({"b"})) + >>> c = torch.randn(3) + >>> assert get_provenance(a + b + c) == frozenset({"a", "b"}) + >>> assert get_provenance(a + detach_provenance(b) + c) == frozenset({"a"}) + + **References** + + [1] David Wingate, Noah Goodman, Andreas Stuhlmüller, Jeffrey Siskind (2011) + Nonstandard Interpretations of Probabilistic Programs for Efficient Inference + http://papers.neurips.cc/paper/4309-nonstandard-interpretations-of-probabilistic-programs-for-efficient-inference.pdf + + :param torch.Tensor data: An initial tensor to start tracking. + :param frozenset provenance: An initial provenance set. + """ + + _t: torch.Tensor + _provenance: frozenset + + def __new__(cls, data: torch.Tensor, provenance=frozenset(), **kwargs): + assert not isinstance(data, ProvenanceTensor) + if not provenance: + return data + ret = data.as_subclass(cls) + ret._t = data # this makes sure that detach_provenance always + # returns the same object. This is important when + # using the tensor as key in a dict, e.g. the global + # param store + ret._provenance = provenance + return ret + + def __repr__(self): + return "Provenance:\n{}\nTensor:\n{}".format(self._provenance, self._t) + + @classmethod + def __torch_function__(cls, func, types, args=(), kwargs=None): + _args, _kwargs = detach_provenance([args, kwargs or {}]) + ret = func(*_args, **_kwargs) + return track_provenance(ret, get_provenance([args, kwargs])) + + +@singledispatch +def track_provenance(x, provenance: frozenset): + """ + Adds provenance info to the :class:`torch.Tensor` leaves of a data structure. + + :param x: an object to add provenence info to. + :param frozenset provenance: A provenence set. + :returns: A provenence-tracking version of ``x``. + """ + return x + + +track_provenance.register(torch.Tensor)(ProvenanceTensor) + + +@track_provenance.register(frozenset) +@track_provenance.register(set) +def _track_provenance_set(x, provenance: frozenset): + return type(x)(track_provenance(part, provenance) for part in x) + + +@track_provenance.register(list) +@track_provenance.register(tuple) +@track_provenance.register(dict) +def _track_provenance_pytree(x, provenance: frozenset): + return tree_map(partial(track_provenance, provenance=provenance), x) + + +@track_provenance.register +def _track_provenance_provenancetensor(x: ProvenanceTensor, provenance: frozenset): + x_value, old_provenance = extract_provenance(x) + return track_provenance(x_value, old_provenance | provenance) + + +@singledispatch +def extract_provenance(x) -> Tuple[object, frozenset]: + """ + Extracts the provenance of a data structure possibly containing + :class:`torch.Tensor` s as leaves, and separates into a detached object and + provenance. + + :param x: An input data structure. + :returns: a tuple ``(detached_value, provenance)`` + :rtype: tuple + """ + return x, frozenset() + + +@extract_provenance.register(ProvenanceTensor) +def _extract_provenance_tensor(x): + return x._t, x._provenance + + +@extract_provenance.register(frozenset) +@extract_provenance.register(set) +def _extract_provenance_set(x): + provenance = frozenset() + values = [] + for part in x: + v, p = extract_provenance(part) + values.append(v) + provenance |= p + value = type(x)(values) + return value, provenance + + +@extract_provenance.register(list) +@extract_provenance.register(tuple) +@extract_provenance.register(dict) +def _extract_provenance_pytree(x): + flat_args, spec = tree_flatten(x) + xs = [] + provenance = frozenset() + for x, p in map(extract_provenance, flat_args): + xs.append(x) + provenance |= p + return tree_unflatten(xs, spec), provenance + + +def get_provenance(x) -> frozenset: + """ + Reads the provenance of a recursive datastructure possibly containing + :class:`torch.Tensor` s. + + :param torch.Tensor tensor: An input tensor. + :returns: A provenance frozenset. + :rtype: frozenset + """ + _, provenance = extract_provenance(x) + return provenance + + +def detach_provenance(x: _Tensor) -> _Tensor: + """ + Blocks provenance tracking through a tensor, similar to :meth:`torch.Tensor.detach`. + + :param torch.Tensor tensor: An input tensor. + :returns: A tensor sharing the same data but with no provenance. + :rtype: torch.Tensor + """ + value, _ = extract_provenance(x) + return value # type: ignore[return-value] diff --git a/pyro/source/pyro/ops/rings.py b/pyro/source/pyro/ops/rings.py new file mode 100644 index 0000000000000000000000000000000000000000..58c68e865d8a43272475f827a414fc4fa1e3a9e3 --- /dev/null +++ b/pyro/source/pyro/ops/rings.py @@ -0,0 +1,338 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import weakref +from abc import ABCMeta, abstractmethod + +import torch + +from pyro.ops.einsum import contract +from pyro.ops.einsum.adjoint import SAMPLE_SYMBOL, Backward +from pyro.util import ignore_jit_warnings + + +class Ring(object, metaclass=ABCMeta): + """ + Abstract tensor ring class. + + Each tensor ring class has a notion of ``dims`` that can be sum-contracted + out, and a notion of ``ordinal`` that represents a set of plate dimensions + that can be broadcasted-up or product-contracted out. + Implementations should cache intermediate results to be compatible with + :func:`~opt_einsum.shared_intermediates`. + + Dims are characters (string or unicode). + Ordinals are frozensets of characters. + + :param dict cache: an optional :func:`~opt_einsum.shared_intermediates` + cache. + """ + + def __init__(self, cache=None): + self._cache = {} if cache is None else cache + + def _hash_by_id(self, tensor): + """ + Returns the id of a tensor and saves the tensor so that this id can be + used as a key in the cache without risk of the id being recycled. + """ + result = id(tensor) + assert self._cache.setdefault(("tensor", result), tensor) is tensor + return result + + @abstractmethod + def sumproduct(self, terms, dims): + """ + Multiply all ``terms`` together, then sum-contract out all ``dims`` + from the result. + + :param list terms: a list of tensors + :param dims: an iterable of sum dims to contract + """ + raise NotImplementedError + + @abstractmethod + def product(self, term, ordinal): + """ + Product-contract the given ``term`` along any plate dimensions + present in given ``ordinal``. + + :param torch.Tensor term: the term to contract + :param frozenset ordinal: an ordinal specifying plates to contract + """ + raise NotImplementedError + + def broadcast(self, term, ordinal): + """ + Broadcast the given ``term`` by expanding along any plate dimensions + present in ``ordinal`` but not ``term``. + + :param torch.Tensor term: the term to expand + :param frozenset ordinal: an ordinal specifying plates + """ + dims = term._pyro_dims + missing_dims = "".join(sorted(set(ordinal) - set(dims))) + if missing_dims: + key = "broadcast", self._hash_by_id(term), missing_dims + if key in self._cache: + term = self._cache[key] + else: + missing_shape = tuple(self._dim_to_size[dim] for dim in missing_dims) + term = term.expand(missing_shape + term.shape) + dims = missing_dims + dims + self._cache[key] = term + term._pyro_dims = dims + return term + + @abstractmethod + def inv(self, term): + """ + Computes the reciprocal of a term, for use in inclusion-exclusion. + + :param torch.Tensor term: the term to invert + """ + raise NotImplementedError + + def global_local(self, term, dims, ordinal): + r""" + Computes global and local terms for tensor message passing + using inclusion-exclusion:: + + term / sum(term, dims) * product(sum(term, dims), ordinal) + \____________________/ \_______________________________/ + local part global part + + :param torch.Tensor term: the term to contract + :param dims: an iterable of sum dims to contract + :param frozenset ordinal: an ordinal specifying plates to contract + :return: a tuple ``(global_part, local_part)`` as defined above + :rtype: tuple + """ + assert dims, "dims was empty, use .product() instead" + key = "global_local", self._hash_by_id(term), frozenset(dims), ordinal + if key in self._cache: + return self._cache[key] + + term_sum = self.sumproduct([term], dims) + global_part = self.product(term_sum, ordinal) + with ignore_jit_warnings(): + local_part = self.sumproduct([term, self.inv(term_sum)], set()) + assert sorted(local_part._pyro_dims) == sorted(term._pyro_dims) + result = global_part, local_part + self._cache[key] = result + return result + + +class LinearRing(Ring): + """ + Ring of sum-product operations in linear space. + + Tensor dimensions are packed; to read the name of a tensor, read the + ``._pyro_dims`` attribute, which is a string of dimension names aligned + with the tensor's shape. + """ + + _backend = "torch" + + def __init__(self, cache=None, dim_to_size=None): + super().__init__(cache=cache) + self._dim_to_size = {} if dim_to_size is None else dim_to_size + + def sumproduct(self, terms, dims): + inputs = [term._pyro_dims for term in terms] + output = "".join(sorted(set("".join(inputs)) - set(dims))) + equation = ",".join(inputs) + "->" + output + term = contract(equation, *terms, backend=self._backend) + term._pyro_dims = output + return term + + def product(self, term, ordinal): + dims = term._pyro_dims + for dim in sorted(ordinal, reverse=True): + pos = dims.find(dim) + if pos != -1: + key = "product", self._hash_by_id(term), dim + if key in self._cache: + term = self._cache[key] + else: + term = term.prod(pos) + dims = dims.replace(dim, "") + self._cache[key] = term + term._pyro_dims = dims + return term + + def inv(self, term): + key = "inv", self._hash_by_id(term) + if key in self._cache: + return self._cache[key] + + result = term.reciprocal() + result = result.clamp( + max=torch.finfo(result.dtype).max + ) # avoid nan due to inf / inf + result._pyro_dims = term._pyro_dims + self._cache[key] = result + return result + + +class LogRing(Ring): + """ + Ring of sum-product operations in log space. + + Tensor values are in log units, so ``sum`` is implemented as ``logsumexp``, + and ``product`` is implemented as ``sum``. + Tensor dimensions are packed; to read the name of a tensor, read the + ``._pyro_dims`` attribute, which is a string of dimension names aligned + with the tensor's shape. + """ + + _backend = "pyro.ops.einsum.torch_log" + + def __init__(self, cache=None, dim_to_size=None): + super().__init__(cache=cache) + self._dim_to_size = {} if dim_to_size is None else dim_to_size + + def sumproduct(self, terms, dims): + inputs = [term._pyro_dims for term in terms] + output = "".join(sorted(set("".join(inputs)) - set(dims))) + equation = ",".join(inputs) + "->" + output + term = contract(equation, *terms, backend=self._backend) + term._pyro_dims = output + return term + + def product(self, term, ordinal): + dims = term._pyro_dims + for dim in sorted(ordinal, reverse=True): + pos = dims.find(dim) + if pos != -1: + key = "product", self._hash_by_id(term), dim + if key in self._cache: + term = self._cache[key] + else: + term = term.sum(pos) + dims = dims.replace(dim, "") + self._cache[key] = term + term._pyro_dims = dims + return term + + def inv(self, term): + key = "inv", self._hash_by_id(term) + if key in self._cache: + return self._cache[key] + + result = -term + result = result.clamp( + max=torch.finfo(result.dtype).max + ) # avoid nan due to inf - inf + result._pyro_dims = term._pyro_dims + self._cache[key] = result + return result + + +class _SampleProductBackward(Backward): + """ + Backward-sample implementation of product. + + This is agnostic to sampler implementation, and hence can be used both by + :class:`MapRing` (temperature 0 sampling) and :class:`SampleRing` + (temperature 1 sampling). + """ + + def __init__(self, ring, term, ordinal): + self.ring = ring + self.term = term + self.ordinal = ordinal + + def process(self, message): + if message is not None: + sample_dims = message._pyro_sample_dims + message = self.ring.broadcast(message, self.ordinal) + if message._pyro_dims.index(SAMPLE_SYMBOL) != 0: + dims = SAMPLE_SYMBOL + message._pyro_dims.replace(SAMPLE_SYMBOL, "") + message = message.permute(tuple(map(message._pyro_dims.find, dims))) + message._pyro_dims = dims + assert message.dim() == len(message._pyro_dims) + message._pyro_sample_dims = sample_dims + assert message.size(0) == len(message._pyro_sample_dims) + yield self.term._pyro_backward, message + + +class MapRing(LogRing): + """ + Ring of forward-maxsum backward-argmax operations. + """ + + _backend = "pyro.ops.einsum.torch_map" + + def product(self, term, ordinal): + result = super().product(term, ordinal) + if hasattr(term, "_pyro_backward"): + result._pyro_backward = _SampleProductBackward(self, term, ordinal) + return result + + +class SampleRing(LogRing): + """ + Ring of forward-sumproduct backward-sample operations in log space. + """ + + _backend = "pyro.ops.einsum.torch_sample" + + def product(self, term, ordinal): + result = super().product(term, ordinal) + if hasattr(term, "_pyro_backward"): + result._pyro_backward = _SampleProductBackward(self, term, ordinal) + return result + + +class _MarginalProductBackward(Backward): + """ + Backward-marginal implementation of product, using inclusion-exclusion. + """ + + def __init__(self, ring, term, ordinal, result): + self.ring = ring + self.term = term + self.ordinal = ordinal + self.result = weakref.ref(result) + + def process(self, message): + ring = self.ring + term = self.term + result = self.result() + factors = [result] + if message is not None: + message._pyro_dims = result._pyro_dims + factors.append(message) + if term._pyro_backward.is_leaf: + product = ring.sumproduct(factors, set()) + message = ring.broadcast(product, self.ordinal) + else: + factors.append(ring.inv(term)) + message = ring.sumproduct(factors, set()) + yield term._pyro_backward, message + + +class MarginalRing(LogRing): + """ + Ring of forward-sumproduct backward-marginal operations in log space. + """ + + _backend = "pyro.ops.einsum.torch_marginal" + + def product(self, term, ordinal): + result = super().product(term, ordinal) + if hasattr(term, "_pyro_backward"): + result._pyro_backward = _MarginalProductBackward( + self, term, ordinal, result + ) + return result + + +BACKEND_TO_RING = { + "torch": LinearRing, + "pyro.ops.einsum.torch_log": LogRing, + "pyro.ops.einsum.torch_map": MapRing, + "pyro.ops.einsum.torch_sample": SampleRing, + "pyro.ops.einsum.torch_marginal": MarginalRing, +} diff --git a/pyro/source/pyro/ops/special.py b/pyro/source/pyro/ops/special.py new file mode 100644 index 0000000000000000000000000000000000000000..abd16df47a8e85d0f82bfe5b6853a9492fbefff6 --- /dev/null +++ b/pyro/source/pyro/ops/special.py @@ -0,0 +1,218 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import functools +import math +import operator +import weakref +from typing import Dict + +import numpy as np +import torch +from numpy.polynomial.hermite import hermgauss + + +class _SafeLog(torch.autograd.Function): + @staticmethod + def forward(ctx, x): + ctx.save_for_backward(x) + return x.log() + + @staticmethod + def backward(ctx, grad): + (x,) = ctx.saved_tensors + return grad / x.clamp(min=torch.finfo(x.dtype).eps) + + +def safe_log(x): + """ + Like :func:`torch.log` but avoids infinite gradients at log(0) + by clamping them to at most ``1 / finfo.eps``. + """ + return _SafeLog.apply(x) + + +def log_beta(x, y, tol=0.0): + """ + Computes log Beta function. + + When ``tol >= 0.02`` this uses a shifted Stirling's approximation to the + log Beta function. The approximation adapts Stirling's approximation of the + log Gamma function:: + + lgamma(z) ≈ (z - 1/2) * log(z) - z + log(2 * pi) / 2 + + to approximate the log Beta function:: + + log_beta(x, y) ≈ ((x-1/2) * log(x) + (y-1/2) * log(y) + - (x+y-1/2) * log(x+y) + log(2*pi)/2) + + The approximation additionally improves accuracy near zero by iteratively + shifting the log Gamma approximation using the recursion:: + + lgamma(x) = lgamma(x + 1) - log(x) + + If this recursion is applied ``n`` times, then absolute error is bounded by + ``error < 0.082 / n < tol``, thus we choose ``n`` based on the user + provided ``tol``. + + :param torch.Tensor x: A positive tensor. + :param torch.Tensor y: A positive tensor. + :param float tol: Bound on maximum absolute error. Defaults to 0.1. For + very small ``tol``, this function simply defers to :func:`log_beta`. + :rtype: torch.Tensor + """ + assert isinstance(tol, (float, int)) and tol >= 0 + if tol < 0.02: + # At small tolerance it is cheaper to defer to torch.lgamma(). + return x.lgamma() + y.lgamma() - (x + y).lgamma() + + # This bound holds for arbitrary x,y. We could do better with large x,y. + shift = int(math.ceil(0.082 / tol)) + + xy = x + y + factors = [] + for _ in range(shift): + factors.append(xy / (x * y)) + x = x + 1 + y = y + 1 + xy = xy + 1 + + log_factor = functools.reduce(operator.mul, factors).log() + + return ( + log_factor + + (x - 0.5) * x.log() + + (y - 0.5) * y.log() + - (xy - 0.5) * xy.log() + + (math.log(2 * math.pi) / 2 - shift) + ) + + +@torch.no_grad() +def log_binomial(n, k, tol=0.0): + """ + Computes log binomial coefficient. + + When ``tol >= 0.02`` this uses a shifted Stirling's approximation to the + log Beta function via :func:`log_beta`. + + :param torch.Tensor n: A nonnegative integer tensor. + :param torch.Tensor k: An integer tensor ranging in ``[0, n]``. + :rtype: torch.Tensor + """ + assert isinstance(tol, (float, int)) and tol >= 0 + n_plus_1 = n + 1 + if tol < 0.02: + # At small tolerance it is cheaper to defer to torch.lgamma(). + return n_plus_1.lgamma() - (k + 1).lgamma() - (n_plus_1 - k).lgamma() + + return -n_plus_1.log() - log_beta(k + 1, n_plus_1 - k, tol=tol) + + +def log_I1(orders: int, value: torch.Tensor, terms=250): + r"""Compute first n log modified bessel function of first kind + .. math :: + + \log(I_v(z)) = v*\log(z/2) + \log(\sum_{k=0}^\inf \exp\left[2*k*\log(z/2) - \sum_kk^k log(kk) + - \lgamma(v + k + 1)\right]) + + :param orders: orders of the log modified bessel function. + :param value: values to compute modified bessel function for + :param terms: truncation of summation + :return: 0 to orders modified bessel function + """ + orders = orders + 1 + if len(value.size()) == 0: + vshape = torch.Size([1]) + else: + vshape = value.shape + value = value.reshape(-1, 1) + + k = torch.arange(terms, device=value.device) + lgammas_all = torch.lgamma(torch.arange(1, terms + orders + 1, device=value.device)) + assert lgammas_all.shape == (orders + terms,) # lgamma(0) = inf => start from 1 + + lvalues = torch.log(value / 2) * k.view(1, -1) + assert lvalues.shape == (vshape.numel(), terms) + + lfactorials = lgammas_all[:terms] + assert lfactorials.shape == (terms,) + + lgammas = lgammas_all.repeat(orders).view(orders, -1) + assert lgammas.shape == (orders, terms + orders) # lgamma(0) = inf => start from 1 + + indices = k[:orders].view(-1, 1) + k.view(1, -1) + assert indices.shape == (orders, terms) + + seqs = ( + 2 * lvalues[None, :, :] + - lfactorials[None, None, :] + - lgammas.gather(1, indices)[:, None, :] + ).logsumexp(-1) + assert seqs.shape == (orders, vshape.numel()) + + i1s = lvalues[..., :orders].T + seqs + assert i1s.shape == (orders, vshape.numel()) + return i1s.view(-1, *vshape) + + +def get_quad_rule(num_quad, prototype_tensor): + r""" + Get quadrature points and corresponding log weights for a Gauss Hermite quadrature rule + with the specified number of quadrature points. + + Example usage:: + + quad_points, log_weights = get_quad_rule(32, prototype_tensor) + # transform to N(0, 4.0) Normal distribution + quad_points *= 4.0 + # compute variance integral in log-space using logsumexp and exponentiate + variance = torch.logsumexp(quad_points.pow(2.0).log() + log_weights, axis=0).exp() + assert (variance - 16.0).abs().item() < 1.0e-6 + + :param int num_quad: number of quadrature points. + :param torch.Tensor prototype_tensor: used to determine `dtype` and `device` of returned tensors. + :return: tuple of `torch.Tensor`s of the form `(quad_points, log_weights)` + """ + quad_rule = hermgauss(num_quad) + quad_points = quad_rule[0] * np.sqrt(2.0) + log_weights = np.log(quad_rule[1]) - 0.5 * np.log(np.pi) + return torch.from_numpy(quad_points).type_as(prototype_tensor), torch.from_numpy( + log_weights + ).type_as(prototype_tensor) + + +def sparse_multinomial_likelihood(total_count, nonzero_logits, nonzero_value): + """ + The following are equivalent:: + + # Version 1. dense + log_prob = Multinomial(logits=logits).log_prob(value).sum() + + # Version 2. sparse + nnz = value.nonzero(as_tuple=True) + log_prob = sparse_multinomial_likelihood( + value.sum(-1), + (logits - logits.logsumexp(-1))[nnz], + value[nnz], + ) + """ + return ( + _log_factorial_sum(total_count) + - _log_factorial_sum(nonzero_value) + + torch.dot(nonzero_logits, nonzero_value) + ) + + +_log_factorial_cache: Dict[int, torch.Tensor] = {} + + +def _log_factorial_sum(x: torch.Tensor) -> torch.Tensor: + if x.requires_grad: + return (x + 1).lgamma().sum() + key = id(x) + if key not in _log_factorial_cache: + weakref.finalize(x, _log_factorial_cache.pop, key, None) # type: ignore + _log_factorial_cache[key] = (x + 1).lgamma().sum() + return _log_factorial_cache[key] diff --git a/pyro/source/pyro/ops/ssm_gp.py b/pyro/source/pyro/ops/ssm_gp.py new file mode 100644 index 0000000000000000000000000000000000000000..b93afdd8b71f4f1ef4a2dd109ba21be578d2ecd4 --- /dev/null +++ b/pyro/source/pyro/ops/ssm_gp.py @@ -0,0 +1,168 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import torch +from torch.distributions import constraints + +from pyro.nn import PyroModule, PyroParam, pyro_method + +root_three = math.sqrt(3.0) +root_five = math.sqrt(5.0) +five_thirds = 5.0 / 3.0 + + +class MaternKernel(PyroModule): + """ + Provides the building blocks for representing univariate Gaussian Processes (GPs) + with Matern kernels as state space models. + + :param float nu: The order of the Matern kernel (one of 0.5, 1.5 or 2.5) + :param int num_gps: the number of GPs + :param torch.Tensor length_scale_init: optional `num_gps`-dimensional vector of initializers + for the length scale + :param torch.Tensor kernel_scale_init: optional `num_gps`-dimensional vector of initializers + for the kernel scale + + **References** + + [1] `Kalman Filtering and Smoothing Solutions to Temporal Gaussian Process Regression Models`, + Jouni Hartikainen and Simo Sarkka. + [2] `Stochastic Differential Equation Methods for Spatio-Temporal Gaussian Process Regression`, + Arno Solin. + """ + + def __init__( + self, nu=1.5, num_gps=1, length_scale_init=None, kernel_scale_init=None + ): + if nu not in [0.5, 1.5, 2.5]: + raise NotImplementedError( + "The only supported values of nu are 0.5, 1.5 and 2.5" + ) + self.nu = nu + self.state_dim = {0.5: 1, 1.5: 2, 2.5: 3}[nu] + self.num_gps = num_gps + + if length_scale_init is None: + length_scale_init = torch.ones(num_gps) + assert length_scale_init.shape == (num_gps,) + + if kernel_scale_init is None: + kernel_scale_init = torch.ones(num_gps) + assert kernel_scale_init.shape == (num_gps,) + + super().__init__() + + self.length_scale = PyroParam( + length_scale_init, constraint=constraints.positive + ) + self.kernel_scale = PyroParam( + kernel_scale_init, constraint=constraints.positive + ) + + if self.state_dim > 1: + for x in range(self.state_dim): + for y in range(self.state_dim): + mask = torch.zeros(self.state_dim, self.state_dim) + mask[x, y] = 1.0 + self.register_buffer("mask{}{}".format(x, y), mask) + + @pyro_method + def transition_matrix(self, dt): + """ + Compute the (exponentiated) transition matrix of the GP latent space. + The resulting matrix has layout (num_gps, old_state, new_state), i.e. this + matrix multiplies states from the right. + + See section 5 in reference [1] for details. + + :param float dt: the time interval over which the GP latent space evolves. + :returns torch.Tensor: a 3-dimensional tensor of transition matrices of shape + (num_gps, state_dim, state_dim). + """ + if self.nu == 0.5: + rho = self.length_scale.unsqueeze(-1).unsqueeze(-1) + return torch.exp(-dt / rho) + elif self.nu == 1.5: + rho = self.length_scale.unsqueeze(-1).unsqueeze(-1) + dt_rho = dt / rho + trans = ( + (1.0 + root_three * dt_rho) * self.mask00 + + (-3.0 * dt_rho / rho) * self.mask01 + + dt * self.mask10 + + (1.0 - root_three * dt_rho) * self.mask11 + ) + return torch.exp(-root_three * dt_rho) * trans + elif self.nu == 2.5: + rho = self.length_scale.unsqueeze(-1).unsqueeze(-1) + dt_rho = root_five * dt / rho + dt_rho_sq = dt_rho.pow(2.0) + dt_rho_cu = dt_rho.pow(3.0) + dt_rho_qu = dt_rho.pow(4.0) + dt_sq = dt**2.0 + trans = ( + (1.0 + dt_rho + 0.5 * dt_rho_sq) * self.mask00 + + (-0.5 * dt_rho_cu / dt) * self.mask01 + + ((0.5 * dt_rho_qu - dt_rho_cu) / dt_sq) * self.mask02 + + ((dt_rho + 1.0) * dt) * self.mask10 + + (1.0 + dt_rho - dt_rho_sq) * self.mask11 + + ((dt_rho_cu - 3.0 * dt_rho_sq) / dt) * self.mask12 + + (0.5 * dt_sq) * self.mask20 + + ((1.0 - 0.5 * dt_rho) * dt) * self.mask21 + + (1.0 - 2.0 * dt_rho + 0.5 * dt_rho_sq) * self.mask22 + ) + return torch.exp(-dt_rho) * trans + + @pyro_method + def stationary_covariance(self): + """ + Compute the stationary state covariance. See Eqn. 3.26 in reference [2]. + + :returns torch.Tensor: a 3-dimensional tensor of covariance matrices of shape + (num_gps, state_dim, state_dim). + """ + if self.nu == 0.5: + sigmasq = self.kernel_scale.pow(2).unsqueeze(-1).unsqueeze(-1) + return sigmasq + elif self.nu == 1.5: + sigmasq = self.kernel_scale.pow(2).unsqueeze(-1).unsqueeze(-1) + rhosq = self.length_scale.pow(2).unsqueeze(-1).unsqueeze(-1) + p_infinity = self.mask00 + (3.0 / rhosq) * self.mask11 + return sigmasq * p_infinity + elif self.nu == 2.5: + sigmasq = self.kernel_scale.pow(2).unsqueeze(-1).unsqueeze(-1) + rhosq = self.length_scale.pow(2).unsqueeze(-1).unsqueeze(-1) + p_infinity = 0.0 + p_infinity = ( + self.mask00 + + (five_thirds / rhosq) * (self.mask11 - self.mask02 - self.mask20) + + (25.0 / rhosq.pow(2.0)) * self.mask22 + ) + return sigmasq * p_infinity + + @pyro_method + def process_covariance(self, A): + """ + Given a transition matrix `A` computed with `transition_matrix` compute the + the process covariance as described in Eqn. 3.11 in reference [2]. + + :returns torch.Tensor: a batched covariance matrix of shape (num_gps, state_dim, state_dim) + """ + assert A.shape[-2:] == (self.state_dim, self.state_dim) + p = self.stationary_covariance() + q = p - torch.matmul(A.transpose(-1, -2), torch.matmul(p, A)) + return q + + @pyro_method + def transition_matrix_and_covariance(self, dt): + """ + Get the transition matrix and process covariance corresponding to a time interval `dt`. + + :param float dt: the time interval over which the GP latent space evolves. + :returns tuple: (`transition_matrix`, `process_covariance`) both 3-dimensional tensors of + shape (num_gps, state_dim, state_dim) + """ + trans_matrix = self.transition_matrix(dt) + process_covar = self.process_covariance(trans_matrix) + return trans_matrix, process_covar diff --git a/pyro/source/pyro/ops/stats.py b/pyro/source/pyro/ops/stats.py new file mode 100644 index 0000000000000000000000000000000000000000..cacc68d2615f18e3cffbb80d870ec53be5059dc4 --- /dev/null +++ b/pyro/source/pyro/ops/stats.py @@ -0,0 +1,605 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math +import numbers +from typing import Callable, List, Optional, Tuple, Union + +import torch +from torch.fft import irfft, rfft + +from .tensor_utils import next_fast_len + + +def _compute_chain_variance_stats(input): + # compute within-chain variance and variance estimator + # input has shape N x C x sample_shape + N = input.size(0) + chain_var = input.var(dim=0) + var_within = chain_var.mean(dim=0) + var_estimator = (N - 1) / N * var_within + if input.size(1) > 1: + chain_mean = input.mean(dim=0) + var_between = chain_mean.var(dim=0) + var_estimator = var_estimator + var_between + else: + # to make rho_k is the same as autocorrelation when num_chains == 1 + # in computing effective_sample_size + var_within = var_estimator + return var_within, var_estimator + + +def gelman_rubin(input, chain_dim=0, sample_dim=1): + """ + Computes R-hat over chains of samples. It is required that + ``input.size(sample_dim) >= 2`` and ``input.size(chain_dim) >= 2``. + + :param torch.Tensor input: the input tensor. + :param int chain_dim: the chain dimension. + :param int sample_dim: the sample dimension. + :returns torch.Tensor: R-hat of ``input``. + """ + assert input.dim() >= 2 + assert input.size(sample_dim) >= 2 + assert input.size(chain_dim) >= 2 + # change input.shape to 1 x 1 x input.shape + # then transpose sample_dim with 0, chain_dim with 1 + sample_dim = input.dim() + sample_dim if sample_dim < 0 else sample_dim + chain_dim = input.dim() + chain_dim if chain_dim < 0 else chain_dim + assert chain_dim != sample_dim + input = input.reshape((1, 1) + input.shape) + input = input.transpose(0, sample_dim + 2).transpose(1, chain_dim + 2) + + var_within, var_estimator = _compute_chain_variance_stats(input) + rhat = (var_estimator / var_within).sqrt() + return rhat.squeeze(max(sample_dim, chain_dim)).squeeze(min(sample_dim, chain_dim)) + + +def split_gelman_rubin(input, chain_dim=0, sample_dim=1): + """ + Computes R-hat over chains of samples. It is required that + ``input.size(sample_dim) >= 4``. + + :param torch.Tensor input: the input tensor. + :param int chain_dim: the chain dimension. + :param int sample_dim: the sample dimension. + :returns torch.Tensor: split R-hat of ``input``. + """ + assert input.dim() >= 2 + assert input.size(sample_dim) >= 4 + # change input.shape to 1 x 1 x input.shape + # then transpose chain_dim with 0, sample_dim with 1 + sample_dim = input.dim() + sample_dim if sample_dim < 0 else sample_dim + chain_dim = input.dim() + chain_dim if chain_dim < 0 else chain_dim + assert chain_dim != sample_dim + input = input.reshape((1, 1) + input.shape) + input = input.transpose(0, chain_dim + 2).transpose(1, sample_dim + 2) + + N_half = input.size(1) // 2 + new_input = torch.stack([input[:, :N_half], input[:, -N_half:]], dim=1) + new_input = new_input.reshape((-1, N_half) + input.shape[2:]) + split_rhat = gelman_rubin(new_input) + return split_rhat.squeeze(max(sample_dim, chain_dim)).squeeze( + min(sample_dim, chain_dim) + ) + + +def autocorrelation(input, dim=0): + """ + Computes the autocorrelation of samples at dimension ``dim``. + + Reference: https://en.wikipedia.org/wiki/Autocorrelation#Efficient_computation + + :param torch.Tensor input: the input tensor. + :param int dim: the dimension to calculate autocorrelation. + :returns torch.Tensor: autocorrelation of ``input``. + """ + # Adapted from Stan implementation + # https://github.com/stan-dev/math/blob/develop/stan/math/prim/mat/fun/autocorrelation.hpp + N = input.size(dim) + M = next_fast_len(N) + M2 = 2 * M + + # transpose dim with -1 for Fourier transform + input = input.transpose(dim, -1) + + # centering and padding x + centered_signal = input - input.mean(dim=-1, keepdim=True) + + # Fourier transform + freqvec = torch.view_as_real(rfft(centered_signal, n=M2)) + # take square of magnitude of freqvec (or freqvec x freqvec*) + freqvec_gram = freqvec.pow(2).sum(-1) + # inverse Fourier transform + autocorr = irfft(freqvec_gram, n=M2) + + # truncate and normalize the result, setting autocorrelation to 1 for all + # constant channels + autocorr = autocorr[..., :N] + autocorr = autocorr / torch.tensor( + range(N, 0, -1), dtype=input.dtype, device=input.device + ) + variance = autocorr[..., :1] + constant = (variance == 0).expand_as(autocorr) + autocorr = autocorr / variance.clamp(min=torch.finfo(variance.dtype).tiny) + autocorr[constant] = 1 + + # transpose back to original shape + return autocorr.transpose(dim, -1) + + +def autocovariance(input, dim=0): + """ + Computes the autocovariance of samples at dimension ``dim``. + + :param torch.Tensor input: the input tensor. + :param int dim: the dimension to calculate autocorrelation. + :returns torch.Tensor: autocorrelation of ``input``. + """ + return autocorrelation(input, dim) * input.var(dim, unbiased=False, keepdim=True) + + +def _cummin(input): + """ + Computes cummulative minimum of input at dimension ``dim=0``. + + :param torch.Tensor input: the input tensor. + :returns torch.Tensor: accumulate min of `input` at dimension `dim=0`. + """ + # FIXME: is there a better trick to find accumulate min of a sequence? + N = input.size(0) + input_tril = input.unsqueeze(0).repeat((N,) + (1,) * input.dim()) + triu_mask = ( + torch.ones(N, N, dtype=input.dtype, device=input.device) + .triu(diagonal=1) + .reshape((N, N) + (1,) * (input.dim() - 1)) + ) + triu_mask = triu_mask.expand((N, N) + input.shape[1:]) > 0.5 + input_tril.masked_fill_(triu_mask, input.max()) + return input_tril.min(dim=1)[0] + + +def effective_sample_size(input, chain_dim=0, sample_dim=1): + """ + Computes effective sample size of input. + + Reference: + + [1] `Introduction to Markov Chain Monte Carlo`, + Charles J. Geyer + + [2] `Stan Reference Manual version 2.18`, + Stan Development Team + + :param torch.Tensor input: the input tensor. + :param int chain_dim: the chain dimension. + :param int sample_dim: the sample dimension. + :returns torch.Tensor: effective sample size of ``input``. + """ + assert input.dim() >= 2 + assert input.size(sample_dim) >= 2 + # change input.shape to 1 x 1 x input.shape + # then transpose sample_dim with 0, chain_dim with 1 + sample_dim = input.dim() + sample_dim if sample_dim < 0 else sample_dim + chain_dim = input.dim() + chain_dim if chain_dim < 0 else chain_dim + assert chain_dim != sample_dim + input = input.reshape((1, 1) + input.shape) + input = input.transpose(0, sample_dim + 2).transpose(1, chain_dim + 2) + + N, C = input.size(0), input.size(1) + # find autocovariance for each chain at lag k + gamma_k_c = autocovariance(input, dim=0) # N x C x sample_shape + + # find autocorrelation at lag k (from Stan reference) + var_within, var_estimator = _compute_chain_variance_stats(input) + rho_k = (var_estimator - var_within + gamma_k_c.mean(dim=1)) / var_estimator + rho_k[0] = 1 # correlation at lag 0 is always 1 + + # initial positive sequence (formula 1.18 in [1]) applied for autocorrelation + Rho_k = rho_k if N % 2 == 0 else rho_k[:-1] + Rho_k = Rho_k.reshape((N // 2, 2) + Rho_k.shape[1:]).sum(dim=1) + + # separate the first index + Rho_init = Rho_k[0] + + if Rho_k.size(0) > 1: + # Theoretically, Rho_k is positive, but due to noise of correlation computation, + # Rho_k might not be positive at some point. So we need to truncate (ignore first index). + Rho_positive = Rho_k[1:].clamp(min=0) + + # Now we make the initial monotone (decreasing) sequence. + Rho_monotone = _cummin(Rho_positive) + + # Formula 1.19 in [1] + tau = -1 + 2 * Rho_init + 2 * Rho_monotone.sum(dim=0) + else: + tau = -1 + 2 * Rho_init + + n_eff = C * N / tau + return n_eff.squeeze(max(sample_dim, chain_dim)).squeeze(min(sample_dim, chain_dim)) + + +def resample(input, num_samples, dim=0, replacement=False): + """ + Draws ``num_samples`` samples from ``input`` at dimension ``dim``. + + :param torch.Tensor input: the input tensor. + :param int num_samples: the number of samples to draw from ``input``. + :param int dim: dimension to draw from ``input``. + :returns torch.Tensor: samples drawn randomly from ``input``. + """ + weights = torch.ones(input.size(dim), dtype=input.dtype, device=input.device) + indices = torch.multinomial(weights, num_samples, replacement) + return input.index_select(dim, indices) + + +def quantile(input, probs, dim=0): + """ + Computes quantiles of ``input`` at ``probs``. If ``probs`` is a scalar, + the output will be squeezed at ``dim``. + + :param torch.Tensor input: the input tensor. + :param list probs: quantile positions. + :param int dim: dimension to take quantiles from ``input``. + :returns torch.Tensor: quantiles of ``input`` at ``probs``. + """ + if isinstance(probs, (numbers.Number, list, tuple)): + probs = torch.tensor(probs, dtype=input.dtype, device=input.device) + sorted_input = input.sort(dim)[0] + max_index = input.size(dim) - 1 + indices = probs * max_index + # because indices is float, we interpolate the quantiles linearly from nearby points + indices_below = indices.long() + indices_above = (indices_below + 1).clamp(max=max_index) + quantiles_above = sorted_input.index_select(dim, indices_above) + quantiles_below = sorted_input.index_select(dim, indices_below) + shape_to_broadcast = [1] * input.dim() + shape_to_broadcast[dim] = indices.numel() + weights_above = indices - indices_below.type_as(indices) + weights_above = weights_above.reshape(shape_to_broadcast) + weights_below = 1 - weights_above + quantiles = weights_below * quantiles_below + weights_above * quantiles_above + return quantiles if probs.shape != torch.Size([]) else quantiles.squeeze(dim) + + +def weighed_quantile( + input: torch.Tensor, + probs: Union[List[float], Tuple[float, ...], torch.Tensor], + log_weights: torch.Tensor, + dim: int = 0, +) -> torch.Tensor: + """ + Computes quantiles of weighed ``input`` samples at ``probs``. + + :param torch.Tensor input: the input tensor. + :param list probs: quantile positions. + :param torch.Tensor log_weights: sample weights tensor. + :param int dim: dimension to take quantiles from ``input``. + :returns torch.Tensor: quantiles of ``input`` at ``probs``. + + **Example:** + + .. doctest:: + + >>> from pyro.ops.stats import weighed_quantile + >>> import torch + >>> input = torch.Tensor([[10, 50, 40], [20, 30, 0]]) + >>> probs = torch.Tensor([0.2, 0.8]) + >>> log_weights = torch.Tensor([0.4, 0.5, 0.1]).log() + >>> result = weighed_quantile(input, probs, log_weights, -1) + >>> torch.testing.assert_close(result, torch.Tensor([[40.4, 47.6], [9.0, 26.4]])) + """ + dim = dim if dim >= 0 else (len(input.shape) + dim) + if isinstance(probs, (list, tuple)): + probs = torch.tensor(probs, dtype=input.dtype, device=input.device) + assert isinstance(probs, torch.Tensor) + # Calculate normalized weights + weights = (log_weights - torch.logsumexp(log_weights, 0)).exp() + # Sort input and weights + sorted_input, sorting_indices = input.sort(dim) + weights = weights[sorting_indices].cumsum(dim) + # Scale weights to be between zero and one + weights = weights - weights.min(dim, keepdim=True)[0] + weights = weights / weights.max(dim, keepdim=True)[0] + # Calculate indices + indices_above = ( + (weights[..., None] <= probs) + .sum(dim, keepdim=True) + .swapaxes(dim, -1) + .clamp(max=input.size(dim) - 1)[..., 0] + ) + indices_below = (indices_above - 1).clamp(min=0) + # Calculate below and above qunatiles + quantiles_below = sorted_input.gather(dim, indices_below) + quantiles_above = sorted_input.gather(dim, indices_above) + # Calculate weights for below and above quantiles + probs_shape = [None] * dim + [slice(None)] + [None] * (len(input.shape) - dim - 1) + expanded_probs_shape = list(input.shape) + expanded_probs_shape[dim] = len(probs) + probs = probs[probs_shape].expand(*expanded_probs_shape) + weights_below = weights.gather(dim, indices_below) + weights_above = weights.gather(dim, indices_above) + weights_below = (weights_above - probs) / (weights_above - weights_below) + weights_above = 1 - weights_below + # Return quantiles + return weights_below * quantiles_below + weights_above * quantiles_above + + +def pi(input, prob, dim=0): + """ + Computes percentile interval which assigns equal probability mass + to each tail of the interval. + + :param torch.Tensor input: the input tensor. + :param float prob: the probability mass of samples within the interval. + :param int dim: dimension to calculate percentile interval from ``input``. + :returns torch.Tensor: quantiles of ``input`` at ``probs``. + """ + return quantile(input, [(1 - prob) / 2, (1 + prob) / 2], dim) + + +def hpdi(input, prob, dim=0): + """ + Computes "highest posterior density interval" which is the narrowest + interval with probability mass ``prob``. + + :param torch.Tensor input: the input tensor. + :param float prob: the probability mass of samples within the interval. + :param int dim: dimension to calculate percentile interval from ``input``. + :returns torch.Tensor: quantiles of ``input`` at ``probs``. + """ + sorted_input = input.sort(dim)[0] + mass = input.size(dim) + index_length = int(prob * mass) + intervals_left = sorted_input.index_select( + dim, + torch.tensor(range(mass - index_length), dtype=torch.long, device=input.device), + ) + intervals_right = sorted_input.index_select( + dim, + torch.tensor(range(index_length, mass), dtype=torch.long, device=input.device), + ) + intervals_length = intervals_right - intervals_left + index_start = intervals_length.argmin(dim) + indices = torch.stack([index_start, index_start + index_length], dim) + return torch.gather(sorted_input, dim, indices) + + +def _weighted_mean(input, log_weights, dim=0, keepdim=False): + dim = input.dim() + dim if dim < 0 else dim + log_weights = log_weights.reshape([-1] + (input.dim() - dim - 1) * [1]) + max_log_weight = log_weights.max(dim=0)[0] + relative_probs = (log_weights - max_log_weight).exp() + return (input * relative_probs).sum(dim=dim, keepdim=keepdim) / relative_probs.sum() + + +def _weighted_variance(input, log_weights, dim=0, keepdim=False, unbiased=True): + # Ref: https://en.wikipedia.org/wiki/Weighted_arithmetic_mean#Frequency_weights + deviation_squared = ( + input - _weighted_mean(input, log_weights, dim, keepdim=True) + ).pow(2) + correction = log_weights.size(0) / (log_weights.size(0) - 1.0) if unbiased else 1.0 + return _weighted_mean(deviation_squared, log_weights, dim, keepdim) * correction + + +def waic(input, log_weights=None, pointwise=False, dim=0): + """ + Computes "Widely Applicable/Watanabe-Akaike Information Criterion" (WAIC) and + its corresponding effective number of parameters. + + Reference: + + [1] `WAIC and cross-validation in Stan`, + Aki Vehtari, Andrew Gelman + + :param torch.Tensor input: the input tensor, which is log likelihood of a model. + :param torch.Tensor log_weights: weights of samples along ``dim``. + :param int dim: the sample dimension of ``input``. + :returns tuple: tuple of WAIC and effective number of parameters. + """ + if log_weights is None: + log_weights = torch.zeros( + input.size(dim), dtype=input.dtype, device=input.device + ) + + # computes log pointwise predictive density: formula (3) of [1] + dim = input.dim() + dim if dim < 0 else dim + weighted_input = input + log_weights.reshape([-1] + (input.dim() - dim - 1) * [1]) + lpd = torch.logsumexp(weighted_input, dim=dim) - torch.logsumexp(log_weights, dim=0) + + # computes the effective number of parameters: formula (6) of [1] + p_waic = _weighted_variance(input, log_weights, dim) + + # computes expected log pointwise predictive density: formula (4) of [1] + elpd = lpd - p_waic + waic = -2 * elpd + return (waic, p_waic) if pointwise else (waic.sum(), p_waic.sum()) + + +def fit_generalized_pareto(X): + """ + Given a dataset X assumed to be drawn from the Generalized Pareto + Distribution, estimate the distributional parameters k, sigma using a + variant of the technique described in reference [1], as described in + reference [2]. + + References + [1] 'A new and efficient estimation method for the generalized Pareto distribution.' + Zhang, J. and Stephens, M.A. (2009). + [2] 'Pareto Smoothed Importance Sampling.' + Aki Vehtari, Andrew Gelman, Jonah Gabry + + :param torch.Tensor: the input data X + :returns tuple: tuple of floats (k, sigma) corresponding to the fit parameters + """ + if not isinstance(X, torch.Tensor) or X.dim() != 1: + raise ValueError("Input X must be a 1-dimensional torch tensor") + + X = X.double() + X = torch.sort(X, descending=False)[0] + + N = X.size(0) + M = 30 + int(math.sqrt(N)) + + # b = k / sigma + bs = 1.0 - math.sqrt(M) / (torch.arange(1, M + 1, dtype=torch.double) - 0.5).sqrt() + bs /= 3.0 * X[int(N / 4 - 0.5)] + bs += 1 / X[-1] + + ks = torch.log1p(-bs.unsqueeze(-1) * X).mean(-1) + Ls = N * (torch.log(-bs / ks) - (ks + 1.0)) + + weights = torch.exp(Ls - Ls.unsqueeze(-1)) + weights = 1.0 / weights.sum(-1) + + not_small_weights = weights > 1.0e-30 + weights = weights[not_small_weights] + bs = bs[not_small_weights] + weights /= weights.sum() + + b = (bs * weights).sum().item() + k = torch.log1p(-b * X).mean().item() + sigma = -k / b + k = k * N / (N + 10.0) + 5.0 / (N + 10.0) + + return k, sigma + + +def crps_empirical(pred, truth): + """ + Computes negative Continuous Ranked Probability Score CRPS* [1] between a + set of samples ``pred`` and true data ``truth``. This uses an ``n log(n)`` + time algorithm to compute a quantity equal that would naively have + complexity quadratic in the number of samples ``n``:: + + CRPS* = E|pred - truth| - 1/2 E|pred - pred'| + = (pred - truth).abs().mean(0) + - (pred - pred.unsqueeze(1)).abs().mean([0, 1]) / 2 + + Note that for a single sample this reduces to absolute error. + + **References** + + [1] Tilmann Gneiting, Adrian E. Raftery (2007) + `Strictly Proper Scoring Rules, Prediction, and Estimation` + https://www.stat.washington.edu/raftery/Research/PDF/Gneiting2007jasa.pdf + + :param torch.Tensor pred: A set of sample predictions batched on rightmost dim. + This should have shape ``(num_samples,) + truth.shape``. + :param torch.Tensor truth: A tensor of true observations. + :return: A tensor of shape ``truth.shape``. + :rtype: torch.Tensor + """ + if pred.shape[1:] != (1,) * (pred.dim() - truth.dim() - 1) + truth.shape: + raise ValueError( + "Expected pred to have one extra sample dim on left. " + "Actual shapes: {} versus {}".format(pred.shape, truth.shape) + ) + opts = dict(device=pred.device, dtype=pred.dtype) + num_samples = pred.size(0) + if num_samples == 1: + return (pred[0] - truth).abs() + + pred = pred.sort(dim=0).values + diff = pred[1:] - pred[:-1] + weight = torch.arange(1, num_samples, **opts) * torch.arange( + num_samples - 1, 0, -1, **opts + ) + weight = weight.reshape(weight.shape + (1,) * (diff.dim() - 1)) + + return (pred - truth).abs().mean(0) - (diff * weight).sum(0) / num_samples**2 + + +def energy_score_empirical( + pred: torch.Tensor, + truth: torch.Tensor, + pred_batch_size: Optional[int] = None, + cdist: Callable[[torch.Tensor, torch.Tensor], torch.Tensor] = torch.cdist, +) -> torch.Tensor: + r""" + Computes negative Energy Score ES* (see equation 22 in [1]) between a + set of multivariate samples ``pred`` and a true data vector ``truth``. Running time + is quadratic in the number of samples ``n``. In case of univariate samples + the output coincides with the CRPS:: + + ES* = E|pred - truth| - 1/2 E|pred - pred'| + + Note that for a single sample this reduces to the Euclidean norm of the difference between + the sample ``pred`` and the ``truth``. + + This is a strictly proper score so that for ``pred`` distirbuted according to a + distribution :math:`P` and ``truth`` distributed according to a distribution :math:`Q` + we have :math:`ES^{*}(P,Q) \ge ES^{*}(Q,Q)` with equality holding if and only if :math:`P=Q`, i.e. + if :math:`P` and :math:`Q` have the same multivariate distribution (it is not sufficient for + :math:`P` and :math:`Q` to have the same marginals in order for equality to hold). + + **References** + + [1] Tilmann Gneiting, Adrian E. Raftery (2007) + `Strictly Proper Scoring Rules, Prediction, and Estimation` + https://www.stat.washington.edu/raftery/Research/PDF/Gneiting2007jasa.pdf + + :param torch.Tensor pred: A set of sample predictions batched on the second leftmost dim. + The leftmost dim is that of the multivariate sample. + :param torch.Tensor truth: A tensor of true observations with same shape as ``pred`` except + for the second leftmost dim which can have any value or be omitted. + :param int pred_batch_size: If specified the predictions will be batched before calculation + according to the specified batch size in order to reduce memory consumption. + :param callable cdist: Function for calculating an euclidean distance (see + https://github.com/pytorch/pytorch/issues/42479 for why you might need to change this in order to + balance speed versus accuracy). Default is :any:`torch.cdist`. + + :return: A tensor of shape ``truth.shape``. + :rtype: torch.Tensor + """ + if pred.dim() == (truth.dim() + 1): + remove_leftmost_dim = True + truth = truth[..., None, :] + elif pred.dim() == truth.dim(): + remove_leftmost_dim = False + else: + raise ValueError( + "Expected pred to have at most one extra dim versus truth." + "Actual shapes: {} versus {}".format(pred.shape, truth.shape) + ) + + if pred_batch_size is None: + retval = ( + cdist(pred, truth).mean(dim=-2) + - 0.5 * cdist(pred, pred).mean(dim=[-1, -2])[..., None] + ) + else: + # Divide predictions into batches + pred_len = pred.shape[-2] + pred_batches = [] + while pred.numel() > 0: + pred_batches.append(pred[..., :pred_batch_size, :]) + pred = pred[..., pred_batch_size:, :] + # Calculate predictions distance to truth + retval = ( + torch.stack( + [cdist(pred_batch, truth).sum(dim=-2) for pred_batch in pred_batches], + dim=0, + ).sum(dim=0) + / pred_len + ) + # Calculate predictions self distance + for aux_pred_batch in pred_batches: + retval = ( + retval + - 0.5 + * torch.stack( + [ + cdist(pred_batch, aux_pred_batch).sum(dim=[-1, -2]) + for pred_batch in pred_batches + ], + dim=0, + ).sum(dim=0)[..., None] + / pred_len + / pred_len + ) + + if remove_leftmost_dim: + retval = retval[..., 0] + + return retval diff --git a/pyro/source/pyro/ops/streaming.py b/pyro/source/pyro/ops/streaming.py new file mode 100644 index 0000000000000000000000000000000000000000..1886b265a11686e87161d30e5e0ff29850dd0bcf --- /dev/null +++ b/pyro/source/pyro/ops/streaming.py @@ -0,0 +1,277 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import copy +from abc import ABC, abstractmethod +from collections import defaultdict +from typing import Any, Callable, Dict, Hashable, Union + +import torch + +from pyro.ops.welford import WelfordCovariance + + +class StreamingStats(ABC): + """ + Abstract base class for streamable statistics of trees of tensors. + + Derived classes must implelement :meth:`update`, :meth:`merge`, and + :meth:`get`. + """ + + @abstractmethod + def update(self, sample) -> None: + """ + Update state from a single sample. + + This mutates ``self`` and returns nothing. Updates should be + independent of order, i.e. samples should be exchangeable. + + :param sample: A sample value which is a nested dictionary of + :class:`torch.Tensor` leaves. This can have arbitrary nesting and + shape shape, but assumes shape is constant across calls to + ``.update()``. + """ + raise NotImplementedError + + @abstractmethod + def merge(self, other) -> "StreamingStats": + """ + Select two aggregate statistics, e.g. from different MCMC chains. + + This is a pure function: it returns a new :class:`StreamingStats` + object and does not modify either ``self`` or ``other``. + + :param other: Another streaming stats instance of the same type. + """ + assert isinstance(other, type(self)) + raise NotImplementedError + + @abstractmethod + def get(self) -> Any: + """ + Return the aggregate statistic. + """ + raise NotImplementedError + + +class CountStats(StreamingStats): + """ + Statistic tracking only the number of samples. + + For example:: + + >>> stats = CountStats() + >>> stats.update(torch.randn(3, 3)) + >>> stats.get() + {'count': 1} + """ + + def __init__(self): + self.count = 0 + super().__init__() + + def update(self, sample) -> None: + self.count += 1 + + def merge(self, other: "CountStats") -> "CountStats": + assert isinstance(other, type(self)) + result = CountStats() + result.count = self.count + other.count + return result + + def get(self) -> Dict[str, int]: + """ + :returns: A dictionary with keys ``count: int``. + :rtype: dict + """ + return {"count": self.count} + + +class StatsOfDict(StreamingStats): + """ + Statistics of samples that are dictionaries with constant set of keys. + + For example the following are equivalent:: + + # Version 1. Hand encode statistics. + >>> a_stats = CountStats() + >>> b_stats = CountMeanStats() + >>> a_stats.update(torch.tensor(0.)) + >>> b_stats.update(torch.tensor([1., 2.])) + >>> summary = {"a": a_stats.get(), "b": b_stats.get()} + + # Version 2. Collect samples into dictionaries. + >>> stats = StatsOfDict({"a": CountStats, "b": CountMeanStats}) + >>> stats.update({"a": torch.tensor(0.), "b": torch.tensor([1., 2.])}) + >>> summary = stats.get() + >>> summary + {'a': {'count': 1}, 'b': {'count': 1, 'mean': tensor([1., 2.])}} + + :param default: Default type of statistics of values of the dictionary. + Defaults to the inexpensive :class:`CountStats`. + :param dict types: Dictionary mapping key to type of statistic that should + be recorded for values corresponding to that key. + """ + + def __init__( + self, + types: Dict[Hashable, Callable[[], StreamingStats]] = {}, + default: Callable[[], StreamingStats] = CountStats, + ): + self.stats: Dict[Hashable, StreamingStats] = defaultdict(default) + self.stats.update({k: v() for k, v in types.items()}) + super().__init__() + + def update(self, sample: Dict[Hashable, Any]) -> None: + for k, v in sample.items(): + self.stats[k].update(v) + + def merge(self, other: "StatsOfDict") -> "StatsOfDict": + assert isinstance(other, type(self)) + result = copy.deepcopy(self) + for k in set(self.stats).union(other.stats): + if k not in self.stats: + result.stats[k] = copy.deepcopy(other.stats[k]) + elif k in other.stats: + result.stats[k] = self.stats[k].merge(other.stats[k]) + return result + + def get(self) -> Dict[Hashable, Any]: + """ + :returns: A dictionary of statistics. The keys of this dictionary are + the same as the keys of the samples from which this object is + updated. + :rtype: dict + """ + return {k: v.get() for k, v in self.stats.items()} + + +class StackStats(StreamingStats): + """ + Statistic collecting a stream of tensors into a single stacked tensor. + """ + + def __init__(self): + self.samples = [] + + def update(self, sample: torch.Tensor) -> None: + assert isinstance(sample, torch.Tensor) + self.samples.append(sample) + + def merge(self, other: "StackStats") -> "StackStats": + assert isinstance(other, type(self)) + result = StackStats() + result.samples = self.samples + other.samples + return result + + def get(self) -> Dict[str, Union[int, torch.Tensor]]: + """ + :returns: A dictionary with keys ``count: int`` and (if any samples + have been collected) ``samples: torch.Tensor``. + :rtype: dict + """ + if not self.samples: + return {"count": 0} + return {"count": len(self.samples), "samples": torch.stack(self.samples)} + + +class CountMeanStats(StreamingStats): + """ + Statistic tracking the count and mean of a single :class:`torch.Tensor`. + """ + + def __init__(self): + self.count = 0 + self.mean = 0 + super().__init__() + + def update(self, sample: torch.Tensor) -> None: + assert isinstance(sample, torch.Tensor) + self.count += 1 + self.mean += (sample.detach() - self.mean) / self.count + + def merge(self, other: "CountMeanStats") -> "CountMeanStats": + assert isinstance(other, type(self)) + result = CountMeanStats() + result.count = self.count + other.count + p = self.count / max(result.count, 1) + q = other.count / max(result.count, 1) + result.mean = p * self.mean + q * other.mean + return result + + def get(self) -> Dict[str, Union[int, torch.Tensor]]: + """ + :returns: A dictionary with keys ``count: int`` and (if any samples + have been collected) ``mean: torch.Tensor``. + :rtype: dict + """ + if self.count == 0: + return {"count": 0} + return {"count": self.count, "mean": self.mean} + + +class CountMeanVarianceStats(StreamingStats): + """ + Statistic tracking the count, mean, and (diagonal) variance of a single + :class:`torch.Tensor`. + """ + + def __init__(self): + self.shape = None + self.welford = WelfordCovariance(diagonal=True) + super().__init__() + + def update(self, sample: torch.Tensor) -> None: + assert isinstance(sample, torch.Tensor) + if self.shape is None: + self.shape = sample.shape + assert sample.shape == self.shape + self.welford.update(sample.detach().reshape(-1)) + + def merge(self, other: "CountMeanVarianceStats") -> "CountMeanVarianceStats": + assert isinstance(other, type(self)) + if self.shape is None: + return copy.deepcopy(other) + if other.shape is None: + return copy.deepcopy(self) + result = copy.deepcopy(self) + res = result.welford + lhs = self.welford + rhs = other.welford + res.n_samples = lhs.n_samples + rhs.n_samples + lhs_weight = lhs.n_samples / res.n_samples + rhs_weight = rhs.n_samples / res.n_samples + res._mean = lhs_weight * lhs._mean + rhs_weight * rhs._mean + res._m2 = ( + lhs._m2 + + rhs._m2 + + (lhs.n_samples * rhs.n_samples / res.n_samples) + * (lhs._mean - rhs._mean) ** 2 + ) + return result + + def get(self) -> Dict[str, Union[int, torch.Tensor]]: + """ + :returns: A dictionary with keys ``count: int`` and (if any samples + have been collected) ``mean: torch.Tensor`` and ``variance: + torch.Tensor``. + :rtype: dict + """ + if self.shape is None: + return {"count": 0} + count = self.welford.n_samples + mean = self.welford._mean.reshape(self.shape) + variance = self.welford.get_covariance(regularize=False).reshape(self.shape) + return {"count": count, "mean": mean, "variance": variance} + + +# Note this is ordered logically for sphinx rather than alphabetically. +__all__ = [ + "StreamingStats", + "StatsOfDict", + "StackStats", + "CountStats", + "CountMeanStats", + "CountMeanVarianceStats", +] diff --git a/pyro/source/pyro/ops/tensor_utils.py b/pyro/source/pyro/ops/tensor_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..9e644a9886168a603cc187b8fd9527a9c72b1d2a --- /dev/null +++ b/pyro/source/pyro/ops/tensor_utils.py @@ -0,0 +1,504 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import torch +from torch.fft import irfft, rfft + +from .. import settings + +_ROOT_TWO_INVERSE = 1.0 / math.sqrt(2.0) +CHOLESKY_RELATIVE_JITTER = 4.0 # in units of finfo.eps + + +@settings.register("cholesky_relative_jitter", __name__, "CHOLESKY_RELATIVE_JITTER") +def _validate_jitter(value): + assert isinstance(value, (float, int)) + assert 0 <= value + + +def as_complex(x): + """ + Similar to :func:`torch.view_as_complex` but copies data in case strides + are not multiples of two. + """ + if any(stride % 2 for stride in x.stride()[:-1]): + # First try to normalize strides. + x = x.squeeze().reshape(x.shape) + if any(stride % 2 for stride in x.stride()[:-1]): + # Fall back to copying data. + x = x.clone() + return torch.view_as_complex(x) + + +def block_diag_embed(mat): + """ + Takes a tensor of shape (..., B, M, N) and returns a block diagonal tensor + of shape (..., B x M, B x N). + + :param torch.Tensor mat: an input tensor with 3 or more dimensions + :returns torch.Tensor: a block diagonal tensor with dimension `m.dim() - 1` + """ + assert mat.dim() > 2, "Input to block_diag() must be of dimension 3 or higher" + B, M, N = mat.shape[-3:] + eye = torch.eye(B, dtype=mat.dtype, device=mat.device).reshape(B, 1, B, 1) + return (mat.unsqueeze(-2) * eye).reshape(mat.shape[:-3] + (B * M, B * N)) + + +def block_diagonal(mat, block_size): + """ + Takes a block diagonal tensor of shape (..., B x M, B x N) and returns a tensor + of shape (..., B, M, N). + + :param torch.Tensor mat: an input tensor with 2 or more dimensions + :param int block_size: the number of blocks B. + :returns torch.Tensor: a tensor with dimension `mat.dim() + 1` + """ + B = block_size + M = mat.size(-2) // B + N = mat.size(-1) // B + assert mat.shape[-2:] == (B * M, B * N) + mat = mat.reshape(mat.shape[:-2] + (B, M, B, N)) + mat = mat.transpose(-2, -3) + mat = mat.reshape(mat.shape[:-4] + (B * B, M, N)) + return mat[..., :: B + 1, :, :] + + +def periodic_repeat(tensor, size, dim): + """ + Repeat a ``period``-sized tensor up to given ``size``. For example:: + + >>> x = torch.tensor([[1, 2, 3], [4, 5, 6]]) + >>> periodic_repeat(x, 4, 0) + tensor([[1, 2, 3], + [4, 5, 6], + [1, 2, 3], + [4, 5, 6]]) + >>> periodic_repeat(x, 4, 1) + tensor([[1, 2, 3, 1], + [4, 5, 6, 4]]) + + This is useful for computing static seasonality in time series models. + + :param torch.Tensor tensor: A tensor of differences. + :param int size: Desired size of the result along dimension ``dim``. + :param int dim: The tensor dimension along which to repeat. + """ + assert isinstance(size, int) and size >= 0 + assert isinstance(dim, int) + if dim >= 0: + dim -= tensor.dim() + + period = tensor.size(dim) + repeats = [1] * tensor.dim() + repeats[dim] = (size + period - 1) // period + result = tensor.repeat(*repeats) + result = result[(Ellipsis, slice(None, size)) + (slice(None),) * (-1 - dim)] + return result + + +def periodic_cumsum(tensor, period, dim): + """ + Compute periodic cumsum along a given dimension. For example if dim=0:: + + for t in range(period): + assert result[t] == tensor[t] + for t in range(period, len(tensor)): + assert result[t] == tensor[t] + result[t - period] + + This is useful for computing drifting seasonality in time series models. + + :param torch.Tensor tensor: A tensor of differences. + :param int period: The period of repetition. + :param int dim: The tensor dimension along which to accumulate. + """ + assert isinstance(period, int) and period > 0 + assert isinstance(dim, int) + if dim >= 0: + dim -= tensor.dim() + + # Pad to even size. + size = tensor.size(dim) + repeats = (size + period - 1) // period + padding = repeats * period - size + if torch._C._get_tracing_state() or padding: + tensor = torch.nn.functional.pad(tensor, (0, 0) * (-1 - dim) + (0, padding)) + + # Accumulate. + shape = ( + tensor.shape[:dim] + (repeats, period) + tensor.shape[tensor.dim() + dim + 1 :] + ) + result = tensor.reshape(shape).cumsum(dim=dim - 1).reshape(tensor.shape) + + # Truncate to original size. + if torch._C._get_tracing_state() or padding: + result = result[(Ellipsis, slice(None, size)) + (slice(None),) * (-1 - dim)] + return result + + +def periodic_features(duration, max_period=None, min_period=None, **options): + r""" + Create periodic (sin,cos) features from ``max_period`` down to + ``min_period``. + + This is useful in time series models where long uneven seasonality can be + treated via regression. When only ``max_period`` is specified this + generates periodic features at all length scales. When also ``min_period`` + is specified this generates periodic features at large length scales, but + omits high frequency features. This is useful when combining regression for + long seasonality with other techniques like :func:`periodic_repeat` and + :func:`periodic_cumsum` for short time scales. For example, to combine + regress yearly seasonality down to the scale of one week one could set + ``max_period=365.25`` and ``min_period=7``. + + :param int duration: Number of discrete time steps. + :param float max_period: Optional max period, defaults to ``duration``. + :param float min_period: Optional min period (exclusive), defaults to + 2 = Nyquist cutoff. + :param \*\*options: Tensor construction options, e.g. ``dtype`` and + ``device``. + :returns: A ``(duration, 2 * ceil(max_period / min_period) - 2)``-shaped + tensor of features normalized to lie in [-1,1]. + :rtype: ~torch.Tensor + """ + assert isinstance(duration, int) and duration >= 0 + if max_period is None: + max_period = duration + if min_period is None: + min_period = 2 + assert 2 <= min_period, "min_period is below Nyquist cutoff" + assert min_period <= max_period + + t = torch.arange(float(duration), **options).unsqueeze(-1).unsqueeze(-1) + phase = torch.tensor([0, math.pi / 2], **options).unsqueeze(-1) + freq = torch.arange(1, max_period / min_period, **options).mul_( + 2 * math.pi / max_period + ) + result = (freq * t + phase).cos_().reshape(duration, -1).contiguous() + return result + + +_NEXT_FAST_LEN = {} + + +def next_fast_len(size): + """ + Returns the next largest number ``n >= size`` whose prime factors are all + 2, 3, or 5. These sizes are efficient for fast fourier transforms. + Equivalent to :func:`scipy.fftpack.next_fast_len`. + + :param int size: A positive number. + :returns: A possibly larger number. + :rtype int: + """ + try: + return _NEXT_FAST_LEN[size] + except KeyError: + pass + + assert isinstance(size, int) and size > 0 + next_size = size + while True: + remaining = next_size + for n in (2, 3, 5): + while remaining % n == 0: + remaining //= n + if remaining == 1: + _NEXT_FAST_LEN[size] = next_size + return next_size + next_size += 1 + + +def convolve(signal, kernel, mode="full"): + """ + Computes the 1-d convolution of signal by kernel using FFTs. + The two arguments should have the same rightmost dim, but may otherwise be + arbitrarily broadcastable. + + :param torch.Tensor signal: A signal to convolve. + :param torch.Tensor kernel: A convolution kernel. + :param str mode: One of: 'full', 'valid', 'same'. + :return: A tensor with broadcasted shape. Letting ``m = signal.size(-1)`` + and ``n = kernel.size(-1)``, the rightmost size of the result will be: + ``m + n - 1`` if mode is 'full'; + ``max(m, n) - min(m, n) + 1`` if mode is 'valid'; or + ``max(m, n)`` if mode is 'same'. + :rtype torch.Tensor: + """ + m = signal.size(-1) + n = kernel.size(-1) + if mode == "full": + truncate = m + n - 1 + elif mode == "valid": + truncate = max(m, n) - min(m, n) + 1 + elif mode == "same": + truncate = max(m, n) + else: + raise ValueError("Unknown mode: {}".format(mode)) + + # Compute convolution using fft. + padded_size = m + n - 1 + # Round up for cheaper fft. + fast_ftt_size = next_fast_len(padded_size) + f_signal = rfft(signal, n=fast_ftt_size) + f_kernel = rfft(kernel, n=fast_ftt_size) + f_result = f_signal * f_kernel + result = irfft(f_result, n=fast_ftt_size) + + start_idx = (padded_size - truncate) // 2 + return result[..., start_idx : start_idx + truncate] + + +def repeated_matmul(M, n): + """ + Takes a batch of matrices `M` as input and returns the stacked result of doing the + `n`-many matrix multiplications :math:`M`, :math:`M^2`, ..., :math:`M^n`. + Parallel cost is logarithmic in `n`. + + :param torch.Tensor M: A batch of square tensors of shape (..., N, N). + :param int n: The order of the largest product :math:`M^n` + :returns torch.Tensor: A batch of square tensors of shape (n, ..., N, N) + """ + assert M.size(-1) == M.size( + -2 + ), "Input tensors must satisfy M.size(-1) == M.size(-2)." + assert n > 0, "argument n to repeated_matmul must be 1 or larger" + + doubling_rounds = 0 if n <= 2 else math.ceil(math.log(n, 2)) - 1 + + if n == 1: + return M.unsqueeze(0) + + result = torch.stack([M, torch.matmul(M, M)]) + + for i in range(doubling_rounds): + doubled = torch.matmul(result[-1].unsqueeze(0), result) + result = torch.stack([result, doubled]).reshape(-1, *result.shape[1:]) + + return result[0:n] + + +def dct(x, dim=-1): + """ + Discrete cosine transform of type II, scaled to be orthonormal. + + This is the inverse of :func:`idct_ii` , and is equivalent to + :func:`scipy.fftpack.dct` with ``norm="ortho"``. + + :param Tensor x: The input signal. + :param int dim: Dimension along which to compute DCT. + :rtype: Tensor + """ + if dim >= 0: + dim -= x.dim() + if dim != -1: + y = x.reshape(x.shape[: dim + 1] + (-1,)).transpose(-1, -2) + return dct(y).transpose(-1, -2).reshape(x.shape) + + # Ref: http://fourier.eng.hmc.edu/e161/lectures/dct/node2.html + N = x.size(-1) + # Step 1 + y = torch.cat([x[..., ::2], x[..., 1::2].flip(-1)], dim=-1) + # Step 2 + Y = rfft(y, n=N) + # Step 3 + coef_real = torch.cos( + torch.linspace(0, 0.5 * math.pi, N + 1, dtype=x.dtype, device=x.device) + ) + M = Y.size(-1) + coef = torch.stack([coef_real[:M], -coef_real[-M:].flip(-1)], dim=-1) + X = as_complex(coef) * Y + # NB: if we use the full-length version Y_full = fft(y, n=N), then + # the real part of the later half of X will be the flip + # of the negative of the imaginary part of the first half + X = torch.cat([X.real, -X.imag[..., 1 : (N - M + 1)].flip(-1)], dim=-1) + # orthogonalize + scale = torch.cat( + [x.new_tensor([math.sqrt(N)]), x.new_full((N - 1,), math.sqrt(0.5 * N))] + ) + return X / scale + + +def idct(x, dim=-1): + """ + Inverse discrete cosine transform of type II, scaled to be orthonormal. + + This is the inverse of :func:`dct_ii` , and is equivalent to + :func:`scipy.fftpack.idct` with ``norm="ortho"``. + + :param Tensor x: The input signal. + :param int dim: Dimension along which to compute DCT. + :rtype: Tensor + """ + if dim >= 0: + dim -= x.dim() + if dim != -1: + y = x.reshape(x.shape[: dim + 1] + (-1,)).transpose(-1, -2) + return idct(y).transpose(-1, -2).reshape(x.shape) + + N = x.size(-1) + scale = torch.cat( + [x.new_tensor([math.sqrt(N)]), x.new_full((N - 1,), math.sqrt(0.5 * N))] + ) + x = x * scale + # Step 1, solve X = cos(k) * Yr + sin(k) * Yi + # We know that Y[1:] is conjugate to Y[:0:-1], hence + # X[:0:-1] = sin(k) * Yr[1:] + cos(k) * Yi[1:] + # So Yr[1:] = cos(k) * X[1:] + sin(k) * X[:0:-1] + # and Yi[1:] = sin(k) * X[1:] - cos(k) * X[:0:-1] + # In addition, Yi[0] = 0, Yr[0] = X[0] + # In other words, Y = complex_mul(e^ik, X - i[0, X[:0:-1]]) + M = N // 2 + 1 # half size + xi = torch.nn.functional.pad(-x[..., N - M + 1 :], (0, 1)).flip(-1) + X = torch.stack([x[..., :M], xi], dim=-1) + coef_real = torch.cos( + torch.linspace(0, 0.5 * math.pi, N + 1, dtype=x.dtype, device=x.device) + ) + coef = torch.stack([coef_real[:M], coef_real[-M:].flip(-1)], dim=-1) + Y = as_complex(coef) * as_complex(X) + # Step 2 + y = irfft(Y, n=N) + # Step 3 + return torch.stack([y, y.flip(-1)], axis=-1).reshape(x.shape[:-1] + (-1,))[..., :N] + + +def haar_transform(x): + """ + Discrete Haar transform. + + Performs a Haar transform along the final dimension. + This is the inverse of :func:`inverse_haar_transform`. + + :param Tensor x: The input signal. + :rtype: Tensor + """ + n = x.size(-1) // 2 + even, odd, end = x[..., 0 : n + n : 2], x[..., 1 : n + n : 2], x[..., n + n :] + hi = _ROOT_TWO_INVERSE * (even - odd) + lo = _ROOT_TWO_INVERSE * (even + odd) + if n >= 2: + lo = haar_transform(lo) + x = torch.cat([lo, hi, end], dim=-1) + return x + + +def inverse_haar_transform(x): + """ + Performs an inverse Haar transform along the final dimension. + This is the inverse of :func:`haar_transform`. + + :param Tensor x: The input signal. + :rtype: Tensor + """ + n = x.size(-1) // 2 + lo, hi, end = x[..., :n], x[..., n : n + n], x[..., n + n :] + if n >= 2: + lo = inverse_haar_transform(lo) + even = _ROOT_TWO_INVERSE * (lo + hi) + odd = _ROOT_TWO_INVERSE * (lo - hi) + even_odd = torch.stack([even, odd], dim=-1).reshape(even.shape[:-1] + (-1,)) + x = torch.cat([even_odd, end], dim=-1) + return x + + +def safe_cholesky(x): + if x.size(-1) == 1: + if CHOLESKY_RELATIVE_JITTER: + x = x.clamp(min=torch.finfo(x.dtype).tiny) + return x.sqrt() + + if CHOLESKY_RELATIVE_JITTER: + # Add adaptive jitter. + x = x.clone() + x_max = x.data.abs().max(-1).values + jitter = CHOLESKY_RELATIVE_JITTER * torch.finfo(x.dtype).eps * x_max + x.data.diagonal(dim1=-1, dim2=-2).add_(jitter) + + return torch.linalg.cholesky(x) + + +def cholesky_solve(x, y): + if y.size(-1) == 1: + return x / (y * y) + return x.cholesky_solve(y) + + +def matmul(x, y): + if x.size(-1) == 1: + return x.mul(y) + return x.matmul(y) + + +def matvecmul(x, y): + if x.size(-1) == 1: + return x.squeeze(-1).mul(y) + return x.matmul(y.unsqueeze(-1)).squeeze(-1) + + +def triangular_solve(x, y, upper=False, transpose=False): + if y.size(-1) == 1: + return x / y + if transpose: + y = y.transpose(-1, -2) + upper = not upper + return torch.linalg.solve_triangular(y, x, upper=upper) + + +def precision_to_scale_tril(P): + Lf = torch.linalg.cholesky(torch.flip(P, (-2, -1))) + L_inv = torch.transpose(torch.flip(Lf, (-2, -1)), -2, -1) + L = torch.linalg.solve_triangular( + L_inv, torch.eye(P.shape[-1], dtype=P.dtype, device=P.device), upper=False + ) + return L + + +def safe_normalize(x, *, p=2): + """ + Safely project a vector onto the sphere wrt the ``p``-norm. This avoids the + singularity at zero by mapping zero to the vector ``[1, 0, 0, ..., 0]``. + + :param torch.Tensor x: A vector + :param float p: The norm exponent, defaults to 2 i.e. the Euclidean norm. + :returns: A normalized version ``x / ||x||_p``. + :rtype: Tensor + """ + assert isinstance(p, (float, int)) + assert p >= 0 + norm = torch.linalg.norm(x, dim=-1, ord=p, keepdim=True) + x = x / norm.clamp(min=torch.finfo(x.dtype).tiny) + x.data[..., 0][x.data.eq(0).all(dim=-1)] = 1 # Avoid the singularity. + return x + + +def broadcast_tensors_without_dim(tensors, dim): + """ + Broadcast tensors to the same shape without changing the size of + dimension ``dim`` of each tensor. + + The broadcasting is performed in the same way as done in + :func:`torch.broadcast_tensors`, while leaving the size of + dimension ``dim`` of each tensor unchanged. + + The returned tensors can be concatenated along the dimension ``dim``. + + :param list tensors: List of `torch.Tensor` objects. + :param int dim: Dimension to leave out of broadcasting. + :returns: List of `torch.Tensor` objects. + """ + if dim >= 0: + shape_len = len(tensors[0].shape) + for tensor in tensors[1:]: + if len(tensor.shape) != shape_len: + raise ValueError( + "Dimension dim must be negative for different dimension tensors" + ) + shapes = [list(tensor.shape) for tensor in tensors] + for shape in shapes: + shape[dim] = 1 + shape = torch.broadcast_shapes(*shapes) + shapes = [list(shape) for count in range(len(tensors))] + for shape, tensor in zip(shapes, tensors): + shape[dim] = tensor.shape[dim] + return [tensor.expand(shape) for shape, tensor in zip(shapes, tensors)] diff --git a/pyro/source/pyro/ops/welford.py b/pyro/source/pyro/ops/welford.py new file mode 100644 index 0000000000000000000000000000000000000000..b7f1c13c08c815dbe8281ee8285ce9ddeed53a20 --- /dev/null +++ b/pyro/source/pyro/ops/welford.py @@ -0,0 +1,101 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch + + +class WelfordCovariance: + """ + Implements Welford's online scheme for estimating (co)variance (see :math:`[1]`). + Useful for adapting diagonal and dense mass structures for HMC. + + **References** + + [1] `The Art of Computer Programming`, + Donald E. Knuth + """ + + def __init__(self, diagonal=True): + self.diagonal = diagonal + self.reset() + + def reset(self): + self._mean = 0.0 + self._m2 = 0.0 + self.n_samples = 0 + + def update(self, sample): + self.n_samples += 1 + delta_pre = sample - self._mean + self._mean = self._mean + delta_pre / self.n_samples + delta_post = sample - self._mean + + if self.diagonal: + self._m2 += delta_pre * delta_post + else: + self._m2 += torch.outer(delta_post, delta_pre) + + def get_covariance(self, regularize=True): + if self.n_samples < 2: + raise RuntimeError("Insufficient samples to estimate covariance") + cov = self._m2 / (self.n_samples - 1) + if regularize: + # Regularization from stan + scaled_cov = (self.n_samples / (self.n_samples + 5.0)) * cov + shrinkage = 1e-3 * (5.0 / (self.n_samples + 5.0)) + if self.diagonal: + cov = scaled_cov + shrinkage + else: + scaled_cov.view(-1)[:: scaled_cov.size(0) + 1] += shrinkage + cov = scaled_cov + return cov + + +class WelfordArrowheadCovariance: + """ + Likes :class:`WelfordCovariance` but generalized to the arrowhead structure. + """ + + def __init__(self, head_size=0): + self.head_size = head_size + self.reset() + + def reset(self): + self._mean = 0.0 + self._m2_top = 0.0 # upper part, shape: head_size x matrix_size + self._m2_bottom_diag = 0.0 # lower right part, shape: (matrix_size - head_size) + self.n_samples = 0 + + def update(self, sample): + self.n_samples += 1 + delta_pre = sample - self._mean + self._mean = self._mean + delta_pre / self.n_samples + delta_post = sample - self._mean + if self.head_size > 0: + self._m2_top = self._m2_top + torch.outer( + delta_post[: self.head_size], delta_pre + ) + else: + self._m2_top = sample.new_empty(0, sample.size(0)) + self._m2_bottom_diag = ( + self._m2_bottom_diag + + delta_post[self.head_size :] * delta_pre[self.head_size :] + ) + + def get_covariance(self, regularize=True): + """ + Gets the covariance in arrowhead form: (top, bottom_diag) where `top = cov[:head_size]` + and `bottom_diag = cov.diag()[head_size:]`. + """ + if self.n_samples < 2: + raise RuntimeError("Insufficient samples to estimate covariance") + top = self._m2_top / (self.n_samples - 1) + bottom_diag = self._m2_bottom_diag / (self.n_samples - 1) + if regularize: + top = top * (self.n_samples / (self.n_samples + 5.0)) + bottom_diag = bottom_diag * (self.n_samples / (self.n_samples + 5.0)) + shrinkage = 1e-3 * (5.0 / (self.n_samples + 5.0)) + top.view(-1)[:: top.size(-1) + 1] += shrinkage + bottom_diag = bottom_diag + shrinkage + + return top, bottom_diag diff --git a/pyro/source/pyro/optim/__init__.py b/pyro/source/pyro/optim/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..89ae6b36a0743fbd75a4798c91a9e490cc9b3d6f --- /dev/null +++ b/pyro/source/pyro/optim/__init__.py @@ -0,0 +1,19 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pyro.optim.multi # noqa F403 +from pyro.optim.horovod import HorovodOptimizer +from pyro.optim.lr_scheduler import PyroLRScheduler +from pyro.optim.optim import AdagradRMSProp, ClippedAdam, DCTAdam, PyroOptim +from pyro.optim.pytorch_optimizers import * # noqa F403 +from pyro.optim.pytorch_optimizers import __all__ as pytorch_optims + +__all__ = [ + "AdagradRMSProp", + "ClippedAdam", + "DCTAdam", + "HorovodOptimizer", + "PyroOptim", + "PyroLRScheduler", +] +__all__.extend(pytorch_optims) diff --git a/pyro/source/pyro/optim/adagrad_rmsprop.py b/pyro/source/pyro/optim/adagrad_rmsprop.py new file mode 100644 index 0000000000000000000000000000000000000000..5a12a923e0a80c505b3057940d54091dcde17c53 --- /dev/null +++ b/pyro/source/pyro/optim/adagrad_rmsprop.py @@ -0,0 +1,87 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from typing import Any, Callable, Optional + +import torch +from torch.optim.optimizer import Optimizer + + +class AdagradRMSProp(Optimizer): + """ + Implements a mash-up of the Adagrad algorithm and RMSProp. For the precise + update equation see equations 10 and 11 in reference [1]. + + References: + [1] 'Automatic Differentiation Variational Inference', Alp Kucukelbir, + Dustin Tran, Rajesh Ranganath, Andrew Gelman, David M. Blei + URL: https://arxiv.org/abs/1603.00788 + [2] 'Lecture 6.5 RmsProp: Divide the gradient by a running average + of its recent magnitude', Tieleman, T. and Hinton, G., + COURSERA: Neural Networks for Machine Learning. + [3] 'Adaptive subgradient methods for online learning and stochastic optimization', + Duchi, John, Hazan, E and Singer, Y. + + Arguments: + + :param params: iterable of parameters to optimize or dicts defining parameter groups + :param eta: sets the step size scale (optional; default: 1.0) + :type eta: float + :param t: t, optional): momentum parameter (optional; default: 0.1) + :type t: float + :param delta: modulates the exponent that controls how the step size scales (optional: default: 1e-16) + :type delta: float + """ + + def __init__( + self, params, eta: float = 1.0, delta: float = 1.0e-16, t: float = 0.1 + ): + defaults = dict(eta=eta, delta=delta, t=t) + super().__init__(params, defaults) + + for group in self.param_groups: + for p in group["params"]: + state = self.state[p] + state["step"] = 0 + state["sum"] = torch.zeros_like(p.data) + + def share_memory(self) -> None: + for group in self.param_groups: + for p in group["params"]: + state = self.state[p] + state["sum"].share_memory_() + + def step(self, closure: Optional[Callable] = None) -> Optional[Any]: + """ + Performs a single optimization step. + + :param closure: A (optional) closure that reevaluates the model and returns the loss. + """ + loss = None + if closure is not None: + loss = closure() + + for group in self.param_groups: + for p in group["params"]: + if p.grad is None: + continue + + grad = p.grad.data + + if grad.is_sparse: + raise NotImplementedError + + state = self.state[p] + state["step"] += 1 + if state["step"] == 1: + # if first step, initialize variance bit to grad^2 + state["sum"] = grad * grad + else: + state["sum"] *= 1.0 - group["t"] + state["sum"] += group["t"] * grad * grad + + lr = group["eta"] * (state["step"] ** (-0.5 + group["delta"])) + std = state["sum"].sqrt() + p.data.addcdiv_(grad, 1.0 + std, value=-lr) + + return loss diff --git a/pyro/source/pyro/optim/clipped_adam.py b/pyro/source/pyro/optim/clipped_adam.py new file mode 100644 index 0000000000000000000000000000000000000000..14ac2681296713b82b09e5164809369136492497 --- /dev/null +++ b/pyro/source/pyro/optim/clipped_adam.py @@ -0,0 +1,110 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math +from typing import Any, Callable, Optional, Tuple + +import torch +from torch.optim.optimizer import Optimizer + + +class ClippedAdam(Optimizer): + """ + :param params: iterable of parameters to optimize or dicts defining parameter groups + :param lr: learning rate (default: 1e-3) + :param Tuple betas: coefficients used for computing + running averages of gradient and its square (default: (0.9, 0.999)) + :param eps: term added to the denominator to improve + numerical stability (default: 1e-8) + :param weight_decay: weight decay (L2 penalty) (default: 0) + :param clip_norm: magnitude of norm to which gradients are clipped (default: 10.0) + :param lrd: rate at which learning rate decays (default: 1.0) + :param centered_variance: use centered variance (default: False) + + Small modification to the Adam algorithm implemented in torch.optim.Adam + to include gradient clipping and learning rate decay and an option to use + the centered variance (see equation 2 in [2]). + + **References** + + [1] `A Method for Stochastic Optimization`, Diederik P. Kingma, Jimmy Ba + https://arxiv.org/abs/1412.6980 + + [2] `A Two-Step Machine Learning Method for Predicting the Formation Energy of Ternary Compounds`, + Varadarajan Rengaraj, Sebastian Jost, Franz Bethke, Christian Plessl, + Hossein Mirhosseini, Andrea Walther, Thomas D. Kühne + https://doi.org/10.3390/computation11050095 + """ + + def __init__( + self, + params, + lr: float = 1e-3, + betas: Tuple = (0.9, 0.999), + eps: float = 1e-8, + weight_decay=0, + clip_norm: float = 10.0, + lrd: float = 1.0, + centered_variance: bool = False, + ): + defaults = dict( + lr=lr, + betas=betas, + eps=eps, + weight_decay=weight_decay, + clip_norm=clip_norm, + lrd=lrd, + centered_variance=centered_variance, + ) + super().__init__(params, defaults) + + def step(self, closure: Optional[Callable] = None) -> Optional[Any]: + """ + :param closure: An optional closure that reevaluates the model and returns the loss. + + Performs a single optimization step. + """ + loss = None + if closure is not None: + loss = closure() + + for group in self.param_groups: + group["lr"] *= group["lrd"] + + for p in group["params"]: + if p.grad is None: + continue + grad = p.grad.data + grad.clamp_(-group["clip_norm"], group["clip_norm"]) + state = self.state[p] + + # State initialization + if len(state) == 0: + state["step"] = 0 + # Exponential moving average of gradient values + state["exp_avg"] = torch.zeros_like(grad) + # Exponential moving average of squared gradient values + state["exp_avg_sq"] = torch.zeros_like(grad) + + exp_avg, exp_avg_sq = state["exp_avg"], state["exp_avg_sq"] + beta1, beta2 = group["betas"] + + state["step"] += 1 + + if group["weight_decay"] != 0: + grad = grad.add(p.data, alpha=group["weight_decay"]) + + # Decay the first and second moment running average coefficient + exp_avg.mul_(beta1).add_(grad, alpha=1 - beta1) + grad_var = (grad - exp_avg) if group["centered_variance"] else grad + exp_avg_sq.mul_(beta2).addcmul_(grad_var, grad_var, value=1 - beta2) + + denom = exp_avg_sq.sqrt().add_(group["eps"]) + + bias_correction1 = 1 - beta1 ** state["step"] + bias_correction2 = 1 - beta2 ** state["step"] + step_size = group["lr"] * math.sqrt(bias_correction2) / bias_correction1 + + p.data.addcdiv_(exp_avg, denom, value=-step_size) + + return loss diff --git a/pyro/source/pyro/optim/dct_adam.py b/pyro/source/pyro/optim/dct_adam.py new file mode 100644 index 0000000000000000000000000000000000000000..10384b4289ce474d2dd64a999adff683fcc775f2 --- /dev/null +++ b/pyro/source/pyro/optim/dct_adam.py @@ -0,0 +1,214 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import math +from typing import Callable, Dict, Optional, Tuple + +import torch +from torch.nn.functional import pad +from torch.optim.optimizer import Optimizer + +from pyro.ops.tensor_utils import dct, idct, next_fast_len + + +def _transform_forward(x: torch.Tensor, dim: int, duration: int) -> torch.Tensor: + assert not x.requires_grad + assert dim < 0 + assert duration == x.size(dim) + time_domain = x + new_size = next_fast_len(duration) + if new_size == duration: + freq_domain = x + else: + freq_domain = pad(x, (0, 0) * (-1 - dim) + (0, new_size - duration)) + freq_domain = dct(freq_domain, dim) + return torch.cat([time_domain, freq_domain], dim=dim) + + +def _transform_inverse(x: torch.Tensor, dim: int, duration: int): + assert not x.requires_grad + assert dim < 0 + dots = (slice(None),) * (x.dim() + dim) + left = dots + (slice(None, duration),) + right = dots + (slice(duration, None),) + return idct(x[right], dim)[left].add_(x[left]) + + +def _get_mask(x, indices): + # create a boolean mask from subsample indices: + # + start with a zero tensor + # + at a specific `dim`, we increase by 1 + # all entries which have index at `dim` + # belong to `indices[dim]` + # + at the end, we will get a tensor whose + # values at `indices` are `len(indices)` + mask = x.new_zeros(x.shape, dtype=torch.long, device=x.device) + if len(indices) > 0: + idx = [] + for dim in range(-x.dim(), 0): + if dim in indices: + mask[idx + [indices[dim]]] += 1 + idx.append(slice(None)) + return mask == len(indices) + + +class DCTAdam(Optimizer): + """ + EXPERIMENTAL Discrete Cosine Transform-augmented + :class:`~pyro.optim.clipped_adam.ClippedAdam` optimizer. + + This acts like :class:`~pyro.optim.clipped_adam.ClippedAdam` on most + parameters, but if a parameter has an attribute ``._pyro_dct_dim`` + indicating a time dimension, this creates a secondary optimize in the + frequency domain. This is useful for parameters of time series models. + + :param params: iterable of parameters to optimize or dicts defining parameter groups + :param float lr: learning rate (default: 1e-3) + :param tuple betas: coefficients used for computing + running averages of gradient and its square (default: (0.9, 0.999)) + :param float eps: term added to the denominator to improve + numerical stability (default: 1e-8) + :param float clip_norm: magnitude of norm to which gradients are clipped (default: 10.0) + :param float lrd: rate at which learning rate decays (default: 1.0) + :param bool subsample_aware: whether to update gradient statistics only for + those elements that appear in a subsample (default: False). + """ + + def __init__( + self, + params, + lr: float = 1e-3, + betas: Tuple = (0.9, 0.999), + eps: float = 1e-8, + clip_norm: float = 10.0, + lrd: float = 1.0, + subsample_aware: bool = False, + ): + defaults = dict( + lr=lr, + betas=betas, + eps=eps, + clip_norm=clip_norm, + lrd=lrd, + subsample_aware=subsample_aware, + ) + super().__init__(params, defaults) + + def step(self, closure: Optional[Callable] = None) -> Optional[float]: + """ + :param closure: An optional closure that reevaluates the model and returns the loss. + + Performs a single optimization step. + """ + loss = None + if closure is not None: + loss = closure() + + for group in self.param_groups: + group["lr"] *= group["lrd"] + + for p in group["params"]: + if p.grad is None: + continue + + subsample = getattr(p, "_pyro_subsample", {}) + if subsample and group["subsample_aware"]: + self._step_param_subsample(group, p, subsample) + else: + self._step_param(group, p) + + return loss + + def _step_param(self, group: Dict, p) -> None: + grad = p.grad.data + grad.clamp_(-group["clip_norm"], group["clip_norm"]) + + # Transform selected parameters via dct. + time_dim = getattr(p, "_pyro_dct_dim", None) + if time_dim is not None: + duration = p.size(time_dim) + grad = _transform_forward(grad, time_dim, duration) + + state = self.state[p] + + # State initialization + if len(state) == 0: + state["step"] = 0 + # Exponential moving average of gradient values + state["exp_avg"] = torch.zeros_like(grad) + # Exponential moving average of squared gradient values + state["exp_avg_sq"] = torch.zeros_like(grad) + + exp_avg, exp_avg_sq = state["exp_avg"], state["exp_avg_sq"] + beta1, beta2 = group["betas"] + + state["step"] += 1 + + # Decay the first and second moment running average coefficient + exp_avg.mul_(beta1).add_(grad, alpha=1 - beta1) + exp_avg_sq.mul_(beta2).addcmul_(grad, grad, value=1 - beta2) + + denom = exp_avg_sq.sqrt().add_(group["eps"]) + + bias_correction1 = 1 - beta1 ** state["step"] + bias_correction2 = 1 - beta2 ** state["step"] + step_size = group["lr"] * math.sqrt(bias_correction2) / bias_correction1 + + if time_dim is None: + p.data.addcdiv_(exp_avg, denom, value=-step_size) + else: + step = _transform_inverse(exp_avg / denom, time_dim, duration) + p.data.add_(step.mul_(-step_size)) + + def _step_param_subsample(self, group: Dict, p, subsample) -> None: + mask = _get_mask(p, subsample) + + grad = p.grad.data.masked_select(mask) + grad.clamp_(-group["clip_norm"], group["clip_norm"]) + + # Transform selected parameters via dct. + time_dim = getattr(p, "_pyro_dct_dim", None) + if time_dim is not None: + duration = p.size(time_dim) + grad = _transform_forward(grad, time_dim, duration) + + state = self.state[p] + + # State initialization + if len(state) == 0: + state["step"] = torch.zeros_like(p) + # Exponential moving average of gradient values + state["exp_avg"] = torch.zeros_like(p) + # Exponential moving average of squared gradient values + state["exp_avg_sq"] = torch.zeros_like(p) + + beta1, beta2 = group["betas"] + + state_step = state["step"].masked_select(mask).add_(1) + state["step"].masked_scatter_(mask, state_step) + + # Decay the first and second moment running average coefficient + exp_avg = ( + state["exp_avg"].masked_select(mask).mul_(beta1).add_(grad, alpha=1 - beta1) + ) + state["exp_avg"].masked_scatter_(mask, exp_avg) + + exp_avg_sq = ( + state["exp_avg_sq"] + .masked_select(mask) + .mul_(beta2) + .addcmul_(grad, grad, value=1 - beta2) + ) + state["exp_avg_sq"].masked_scatter_(mask, exp_avg_sq) + + denom = exp_avg_sq.sqrt_().add_(group["eps"]) + + bias_correction1 = 1 - beta1**state_step + bias_correction2 = 1 - beta2**state_step + step_size = bias_correction2.sqrt_().div_(bias_correction1).mul_(group["lr"]) + + step = exp_avg.div_(denom) + if time_dim is not None: + step = _transform_inverse(step, time_dim, duration) + p_data = p.data.masked_select(mask).sub_(step.mul_(step_size)) + p.data.masked_scatter_(mask, p_data) diff --git a/pyro/source/pyro/optim/horovod.py b/pyro/source/pyro/optim/horovod.py new file mode 100644 index 0000000000000000000000000000000000000000..8a3c1f2aaadf6002df5fbfff59dc9d9ade767703 --- /dev/null +++ b/pyro/source/pyro/optim/horovod.py @@ -0,0 +1,55 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from typing import List, Union, ValuesView + +from torch.optim import Optimizer + +import pyro + +from .optim import PyroOptim + + +class HorovodOptimizer(PyroOptim): + r""" + Distributed wrapper for a :class:`~pyro.optim.optim.PyroOptim` optimizer. + + This class wraps a ``PyroOptim`` object similar to the way + :func:`horovod.torch.DistributedOptimizer` wraps a + :class:`torch.optim.Optimizer`. + + .. note:: + + This requires :mod:`horovod.torch` to be installed, e.g. via + ``pip install pyro[horovod]``. For details see + https://horovod.readthedocs.io/en/stable/install.html + + :param: A Pyro optimizer instance. + :type pyro_optim: ~pyro.optim.optim.PyroOptim + :param \*\*horovod_kwargs: Extra parameters passed to + :func:`horovod.torch.DistributedOptimizer`. + """ + + def __init__(self, pyro_optim: PyroOptim, **horovod_kwargs): + param_name = pyro.get_param_store().param_name + + def optim_constructor(params, **pt_kwargs) -> Optimizer: + import horovod.torch as hvd # type: ignore + + pt_optim = pyro_optim.pt_optim_constructor(params, **pt_kwargs) # type: ignore + named_parameters = [(param_name(p), p) for p in params] + hvd_optim = hvd.DistributedOptimizer( + pt_optim, + named_parameters=named_parameters, + **horovod_kwargs, + ) + return hvd_optim # type: ignore + + super().__init__( + optim_constructor, pyro_optim.pt_optim_args, pyro_optim.pt_clip_args + ) + + def __call__(self, params: Union[List, ValuesView], *args, **kwargs) -> None: + # Sort by name to ensure deterministic processing order. + params = sorted(params, key=pyro.get_param_store().param_name) + super().__call__(params, *args, **kwargs) diff --git a/pyro/source/pyro/optim/lr_scheduler.py b/pyro/source/pyro/optim/lr_scheduler.py new file mode 100644 index 0000000000000000000000000000000000000000..744c877892e2cd65e5ef50f6dcbfea10fa66ae8d --- /dev/null +++ b/pyro/source/pyro/optim/lr_scheduler.py @@ -0,0 +1,63 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from typing import Any, Dict, Iterable, List, Optional, Union, ValuesView + +from torch import Tensor + +from pyro.optim.optim import PyroOptim + + +class PyroLRScheduler(PyroOptim): + """ + A wrapper for :class:`~torch.optim.lr_scheduler` objects that adjusts learning rates + for dynamically generated parameters. + + :param scheduler_constructor: a :class:`~torch.optim.lr_scheduler` + :param optim_args: a dictionary of learning arguments for the optimizer or a callable that returns + such dictionaries. must contain the key 'optimizer' with pytorch optimizer value + :param clip_args: a dictionary of clip_norm and/or clip_value args or a callable that returns + such dictionaries. + + Example:: + + optimizer = torch.optim.SGD + scheduler = pyro.optim.ExponentialLR({'optimizer': optimizer, 'optim_args': {'lr': 0.01}, 'gamma': 0.1}) + svi = SVI(model, guide, scheduler, loss=TraceGraph_ELBO()) + for i in range(epochs): + for minibatch in DataLoader(dataset, batch_size): + svi.step(minibatch) + scheduler.step() + """ + + def __init__( + self, + scheduler_constructor, + optim_args: Union[Dict], + clip_args: Optional[Union[Dict]] = None, + ): + # pytorch scheduler + self.pt_scheduler_constructor = scheduler_constructor + # torch optimizer + pt_optim_constructor = optim_args.pop("optimizer") + # kwargs for the torch optimizer + optim_kwargs = optim_args.pop("optim_args") + self.kwargs = optim_args + super().__init__(pt_optim_constructor, optim_kwargs, clip_args) + + def __call__(self, params: Union[List, ValuesView], *args, **kwargs) -> None: + super().__call__(params, *args, **kwargs) + + def _get_optim( + self, params: Union[Tensor, Iterable[Tensor], Iterable[Dict[Any, Any]]] + ): + optim = super()._get_optim(params) + return self.pt_scheduler_constructor(optim, **self.kwargs) + + def step(self, *args, **kwargs) -> None: + """ + Takes the same arguments as the PyTorch scheduler + (e.g. optional ``loss`` for ``ReduceLROnPlateau``) + """ + for scheduler in self.optim_objs.values(): + scheduler.step(*args, **kwargs) diff --git a/pyro/source/pyro/optim/multi.py b/pyro/source/pyro/optim/multi.py new file mode 100644 index 0000000000000000000000000000000000000000..9f76b15423d44ffcd1201f36f25a131f59dbf29b --- /dev/null +++ b/pyro/source/pyro/optim/multi.py @@ -0,0 +1,168 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from typing import Dict, List + +import torch + +from pyro.ops.newton import newton_step +from pyro.optim.optim import PyroOptim + + +class MultiOptimizer: + """ + Base class of optimizers that make use of higher-order derivatives. + + Higher-order optimizers generally use :func:`torch.autograd.grad` rather + than :meth:`torch.Tensor.backward`, and therefore require a different + interface from usual Pyro and PyTorch optimizers. In this interface, + the :meth:`step` method inputs a ``loss`` tensor to be differentiated, + and backpropagation is triggered one or more times inside the optimizer. + + Derived classes must implement :meth:`step` to compute derivatives and + update parameters in-place. + + Example:: + + tr = poutine.trace(model).get_trace(*args, **kwargs) + loss = -tr.log_prob_sum() + params = {name: site['value'].unconstrained() + for name, site in tr.nodes.items() + if site['type'] == 'param'} + optim.step(loss, params) + """ + + def step(self, loss: torch.Tensor, params: Dict) -> None: + """ + Performs an in-place optimization step on parameters given a + differentiable ``loss`` tensor. + + Note that this detaches the updated tensors. + + :param torch.Tensor loss: A differentiable tensor to be minimized. + Some optimizers require this to be differentiable multiple times. + :param dict params: A dictionary mapping param name to unconstrained + value as stored in the param store. + """ + updated_values = self.get_step(loss, params) + for name, value in params.items(): + with torch.no_grad(): + # we need to detach because updated_value may depend on value + value.copy_(updated_values[name].detach()) + + def get_step(self, loss: torch.Tensor, params: Dict) -> Dict: + """ + Computes an optimization step of parameters given a differentiable + ``loss`` tensor, returning the updated values. + + Note that this preserves derivatives on the updated tensors. + + :param torch.Tensor loss: A differentiable tensor to be minimized. + Some optimizers require this to be differentiable multiple times. + :param dict params: A dictionary mapping param name to unconstrained + value as stored in the param store. + :return: A dictionary mapping param name to updated unconstrained + value. + :rtype: dict + """ + raise NotImplementedError + + +class PyroMultiOptimizer(MultiOptimizer): + """ + Facade to wrap :class:`~pyro.optim.optim.PyroOptim` objects + in a :class:`MultiOptimizer` interface. + """ + + def __init__(self, optim: PyroOptim) -> None: + if not isinstance(optim, PyroOptim): + raise TypeError( + "Expected a PyroOptim object but got a {}".format(type(optim)) + ) + self.optim = optim + + def step(self, loss: torch.Tensor, params: Dict) -> None: + values = params.values() + grads = torch.autograd.grad(loss, values, create_graph=True) # type: ignore + for x, g in zip(values, grads): + x.grad = g + self.optim(values) + + +class TorchMultiOptimizer(PyroMultiOptimizer): + """ + Facade to wrap :class:`~torch.optim.Optimizer` objects + in a :class:`MultiOptimizer` interface. + """ + + def __init__(self, optim_constructor: torch.optim.Optimizer, optim_args: Dict): + optim = PyroOptim(optim_constructor, optim_args) + super().__init__(optim) + + +class MixedMultiOptimizer(MultiOptimizer): + """ + Container class to combine different :class:`MultiOptimizer` instances for + different parameters. + + :param list parts: A list of ``(names, optim)`` pairs, where each + ``names`` is a list of parameter names, and each ``optim`` is a + :class:`MultiOptimizer` or :class:`~pyro.optim.optim.PyroOptim` object + to be used for the named parameters. Together the ``names`` should + partition up all desired parameters to optimize. + :raises ValueError: if any name is optimized by multiple optimizers. + """ + + def __init__(self, parts: List) -> None: + optim_dict: Dict = {} + self.parts = [] + for names_part, optim in parts: + if isinstance(optim, PyroOptim): + optim = PyroMultiOptimizer(optim) + for name in names_part: + if name in optim_dict: + raise ValueError( + "Attempted to optimize parameter '{}' by two different optimizers: " + "{} vs {}".format(name, optim_dict[name], optim) + ) + optim_dict[name] = optim + self.parts.append((names_part, optim)) + + def step(self, loss: torch.Tensor, params: Dict): + for names_part, optim in self.parts: + optim.step(loss, {name: params[name] for name in names_part}) + + def get_step(self, loss: torch.Tensor, params: Dict) -> Dict: + updated_values = {} + for names_part, optim in self.parts: + updated_values.update( + optim.get_step(loss, {name: params[name] for name in names_part}) + ) + return updated_values + + +class Newton(MultiOptimizer): + """ + Implementation of :class:`MultiOptimizer` that performs a Newton update + on batched low-dimensional variables, optionally regularizing via a + per-parameter ``trust_radius``. See :func:`~pyro.ops.newton.newton_step` + for details. + + The result of :meth:`get_step` will be differentiable, however the + updated values from :meth:`step` will be detached. + + :param dict trust_radii: a dict mapping parameter name to radius of trust + region. Missing names will use unregularized Newton update, equivalent + to infinite trust radius. + """ + + def __init__(self, trust_radii: Dict = {}): + self.trust_radii = trust_radii + + def get_step(self, loss: torch.Tensor, params: Dict): + updated_values = {} + for name, value in params.items(): + trust_radius = self.trust_radii.get(name) # type: ignore + updated_value, cov = newton_step(loss, value, trust_radius) + updated_values[name] = updated_value + return updated_values diff --git a/pyro/source/pyro/optim/optim.py b/pyro/source/pyro/optim/optim.py new file mode 100644 index 0000000000000000000000000000000000000000..b3d97300bf15346e796c3ae1ffb7777bfb700495 --- /dev/null +++ b/pyro/source/pyro/optim/optim.py @@ -0,0 +1,288 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import inspect +from typing import ( + Any, + Callable, + Dict, + Iterable, + List, + Optional, + Type, + Union, + ValuesView, +) + +import torch +from torch import Tensor +from torch.nn.utils import clip_grad_norm_, clip_grad_value_ +from torch.optim import Optimizer + +import pyro +from pyro.optim.adagrad_rmsprop import AdagradRMSProp as pt_AdagradRMSProp +from pyro.optim.clipped_adam import ClippedAdam as pt_ClippedAdam +from pyro.optim.dct_adam import DCTAdam as pt_DCTAdam +from pyro.params.param_store import ( + module_from_param_with_module_name, + normalize_param_name, + user_param_name, +) + + +def is_scheduler(optimizer) -> bool: + """ + Helper method to determine whether a PyTorch object is either a PyTorch + optimizer (return false) or a optimizer wrapped in an LRScheduler e.g. a + ``ReduceLROnPlateau`` or subclasses of ``_LRScheduler`` (return true). + """ + # This uses duck typing rather than isinstance() because (1) PyTorch + # provides no comprehensive class hierarchy, and (2) the base class + # _LRScheduler of the majority of schedulers is private. + return hasattr(optimizer, "optimizer") + + +def _get_state_dict(optimizer) -> dict: + """ + Helper to get the state dict for either a raw optimizer or an optimizer + wrapped in an LRScheduler. + """ + if is_scheduler(optimizer): + state = { + "scheduler": optimizer.state_dict(), + "optimizer": optimizer.optimizer.state_dict(), + } + else: + state = optimizer.state_dict() + return state + + +def _load_state_dict(optimizer, state: dict) -> None: + """ + Helper to load the state dict into either a raw optimizer or an optimizer + wrapped in an LRScheduler. + """ + if is_scheduler(optimizer): + optimizer.load_state_dict(state["scheduler"]) + optimizer.optimizer.load_state_dict(state["optimizer"]) + else: + optimizer.load_state_dict(state) + + +class PyroOptim: + """ + A wrapper for torch.optim.Optimizer objects that helps with managing dynamically generated parameters. + + :param optim_constructor: a torch.optim.Optimizer + :param optim_args: a dictionary of learning arguments for the optimizer or a callable that returns + such dictionaries + :param clip_args: a dictionary of clip_norm and/or clip_value args or a callable that returns + such dictionaries + """ + + def __init__( + self, + optim_constructor: Union[Callable, Optimizer, Type[Optimizer]], + optim_args: Union[Dict, Callable[..., Dict]], + clip_args: Optional[Union[Dict, Callable[..., Dict]]] = None, + ): + self.pt_optim_constructor = optim_constructor + + # must be callable or dict + assert callable(optim_args) or isinstance( + optim_args, dict + ), "optim_args must be function that returns defaults or a defaults dictionary" + + if clip_args is None: + clip_args = {} + + # must be callable or dict + assert callable(clip_args) or isinstance( + clip_args, dict + ), "clip_args must be function that returns defaults or a defaults dictionary" + + # hold our args to be called/used + self.pt_optim_args = optim_args + if callable(optim_args): + self.pt_optim_args_argc = len(inspect.signature(optim_args).parameters) + self.pt_clip_args = clip_args + + # holds the torch optimizer objects + self.optim_objs: Dict = {} + self.grad_clip: Dict = {} + + # any optimizer state that's waiting to be consumed (because that parameter hasn't been seen before) + self._state_waiting_to_be_consumed: Dict = {} + + def __call__(self, params: Union[List, ValuesView], *args, **kwargs) -> None: + """ + :param params: a list of parameters + :type params: an iterable of strings + + Do an optimization step for each param in params. If a given param has never been seen before, + initialize an optimizer for it. + """ + for p in params: + # if we have not seen this param before, we instantiate an optim object to deal with it + if p not in self.optim_objs: + # create a single optim object for that param + optimizer = self.optim_objs[p] = self._get_optim(p) + # create a gradient clipping function if specified + self.grad_clip[p] = self._get_grad_clip(p) + # set state from _state_waiting_to_be_consumed if present + param_name = pyro.get_param_store().param_name(p) + state = self._state_waiting_to_be_consumed.pop(param_name, None) + if state is not None: + _load_state_dict(optimizer, state) + + if self.grad_clip[p] is not None: + self.grad_clip[p](p) + + if ( + hasattr(torch.optim.lr_scheduler, "_LRScheduler") + and isinstance( + self.optim_objs[p], torch.optim.lr_scheduler._LRScheduler + ) + or hasattr(torch.optim.lr_scheduler, "LRScheduler") + and isinstance(self.optim_objs[p], torch.optim.lr_scheduler.LRScheduler) + or isinstance( + self.optim_objs[p], torch.optim.lr_scheduler.ReduceLROnPlateau + ) + ): + # if optim object was a scheduler, perform an optimizer step + self.optim_objs[p].optimizer.step(*args, **kwargs) + else: + self.optim_objs[p].step(*args, **kwargs) + + def get_state(self) -> Dict: + """ + Get state associated with all the optimizers in the form of a dictionary with + key-value pairs (parameter name, optim state dicts) + """ + state_dict = {} + for param in self.optim_objs: + param_name = pyro.get_param_store().param_name(param) + state_dict[param_name] = _get_state_dict(self.optim_objs[param]) + return state_dict + + def set_state(self, state_dict: Dict) -> None: + """ + Set the state associated with all the optimizers using the state obtained + from a previous call to get_state() + """ + self._state_waiting_to_be_consumed.update(state_dict) + + def save(self, filename: str) -> None: + """ + :param filename: file name to save to + :type filename: str + + Save optimizer state to disk + """ + with open(filename, "wb") as output_file: + torch.save(self.get_state(), output_file) + + def load(self, filename: str, map_location=None) -> None: + """ + :param filename: file name to load from + :type filename: str + :param map_location: torch.load() map_location parameter + :type map_location: function, torch.device, string or a dict + + Load optimizer state from disk + """ + with open(filename, "rb") as input_file: + state = torch.load( + input_file, map_location=map_location, weights_only=False + ) + self.set_state(state) + + def _get_optim(self, param: Union[Iterable[Tensor], Iterable[Dict[Any, Any]]]): + return self.pt_optim_constructor([param], **self._get_optim_args(param)) # type: ignore + + # helper to fetch the optim args if callable (only used internally) + def _get_optim_args(self, param: Union[Iterable[Tensor], Iterable[Dict]]): + # If we were passed a function, we call function with a + # fully qualified name e.g. 'mymodule.mysubmodule.bias'. + if callable(self.pt_optim_args): + param_name = pyro.get_param_store().param_name(param) + if self.pt_optim_args_argc == 1: + # Normalize to the format of nn.Module.named_parameters(). + normal_name = normalize_param_name(param_name) + opt_dict = self.pt_optim_args(normal_name) + else: + # DEPRECATED Split param name in to pieces. + module_name = module_from_param_with_module_name(param_name) + stripped_param_name = user_param_name(param_name) + opt_dict = self.pt_optim_args(module_name, stripped_param_name) + + # must be dictionary + assert isinstance( + opt_dict, dict + ), "per-param optim arg must return defaults dictionary" + return opt_dict + else: + return self.pt_optim_args + + def _get_grad_clip(self, param: str): + grad_clip_args = self._get_grad_clip_args(param) + + if not grad_clip_args: + return None + + def _clip_grad(params: Union[Tensor, Iterable[Tensor]]): + self._clip_grad(params, **grad_clip_args) + + return _clip_grad + + def _get_grad_clip_args(self, param: str) -> Dict: + # if we were passed a fct, we call fct with param info + # arguments are (module name, param name) e.g. ('mymodule', 'bias') + if callable(self.pt_clip_args): + # get param name + param_name = pyro.get_param_store().param_name(param) + module_name = module_from_param_with_module_name(param_name) + stripped_param_name = user_param_name(param_name) + + # invoke the user-provided callable + clip_dict = self.pt_clip_args(module_name, stripped_param_name) + + # must be dictionary + assert isinstance( + clip_dict, dict + ), "per-param clip arg must return defaults dictionary" + return clip_dict + else: + return self.pt_clip_args + + @staticmethod + def _clip_grad( + params: Union[Tensor, Iterable[Tensor]], + clip_norm: Optional[Union[int, float]] = None, + clip_value: Optional[Union[int, float]] = None, + ) -> None: + if clip_norm is not None: + clip_grad_norm_(params, clip_norm) + if clip_value is not None: + clip_grad_value_(params, clip_value) + + +def AdagradRMSProp(optim_args: Dict) -> PyroOptim: + """ + Wraps :class:`pyro.optim.adagrad_rmsprop.AdagradRMSProp` with :class:`~pyro.optim.optim.PyroOptim`. + """ + return PyroOptim(pt_AdagradRMSProp, optim_args) + + +def ClippedAdam(optim_args: Dict) -> PyroOptim: + """ + Wraps :class:`pyro.optim.clipped_adam.ClippedAdam` with :class:`~pyro.optim.optim.PyroOptim`. + """ + return PyroOptim(pt_ClippedAdam, optim_args) + + +def DCTAdam(optim_args: Dict) -> PyroOptim: + """ + Wraps :class:`pyro.optim.dct_adam.DCTAdam` with :class:`~pyro.optim.optim.PyroOptim`. + """ + return PyroOptim(pt_DCTAdam, optim_args) diff --git a/pyro/source/pyro/optim/pytorch_optimizers.py b/pyro/source/pyro/optim/pytorch_optimizers.py new file mode 100644 index 0000000000000000000000000000000000000000..ac39ad12fee67e06d1302c12fa6655dae53303ea --- /dev/null +++ b/pyro/source/pyro/optim/pytorch_optimizers.py @@ -0,0 +1,60 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +from pyro.optim import PyroOptim +from pyro.optim.lr_scheduler import PyroLRScheduler + +__all__ = [] +# Programmatically load all optimizers from PyTorch. +for _name, _Optim in torch.optim.__dict__.items(): + if not isinstance(_Optim, type): + continue + if not issubclass(_Optim, torch.optim.Optimizer): + continue + if _Optim is torch.optim.Optimizer: + continue + if _Optim is torch.optim.LBFGS: + # XXX LBFGS is not supported for SVI yet + continue + + _PyroOptim = ( + lambda _Optim: lambda optim_args, clip_args=None: PyroOptim( + _Optim, optim_args, clip_args + ) + )(_Optim) + _PyroOptim.__name__ = _name + _PyroOptim.__doc__ = "Wraps :class:`torch.optim.{}` with :class:`~pyro.optim.optim.PyroOptim`.".format( + _name + ) + + locals()[_name] = _PyroOptim + __all__.append(_name) + del _PyroOptim + +# Load all schedulers from PyTorch +_torch_scheduler_base = torch.optim.lr_scheduler.LRScheduler # type: ignore + +for _name, _Optim in torch.optim.lr_scheduler.__dict__.items(): + if not isinstance(_Optim, type): + continue + if not issubclass(_Optim, _torch_scheduler_base) and _name != "ReduceLROnPlateau": + continue + if _Optim is torch.optim.Optimizer: + continue + + _PyroOptim = ( + lambda _Optim: lambda optim_args, clip_args=None: PyroLRScheduler( + _Optim, optim_args, clip_args + ) + )(_Optim) + _PyroOptim.__name__ = _name + _PyroOptim.__doc__ = ( + "Wraps :class:`torch.optim.{}` with ".format(_name) + + ":class:`~pyro.optim.lr_scheduler.PyroLRScheduler`." + ) + + locals()[_name] = _PyroOptim + __all__.append(_name) + del _PyroOptim diff --git a/pyro/source/pyro/params/__init__.py b/pyro/source/pyro/params/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1f97d37c40112000587bdee2e40fbe9a0019cb37 --- /dev/null +++ b/pyro/source/pyro/params/__init__.py @@ -0,0 +1,14 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from .param_store import ( + module_from_param_with_module_name, + param_with_module_name, + user_param_name, +) + +__all__ = [ + "module_from_param_with_module_name", + "param_with_module_name", + "user_param_name", +] diff --git a/pyro/source/pyro/params/param_store.py b/pyro/source/pyro/params/param_store.py new file mode 100644 index 0000000000000000000000000000000000000000..62e10fdb08d63a3b63d0c226d3bf4f193dcee7bc --- /dev/null +++ b/pyro/source/pyro/params/param_store.py @@ -0,0 +1,395 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import re +import warnings +import weakref +from contextlib import contextmanager +from typing import ( + Callable, + Dict, + ItemsView, + Iterator, + KeysView, + Optional, + Tuple, + Union, +) + +import torch +from torch.distributions import constraints, transform_to +from torch.serialization import MAP_LOCATION +from typing_extensions import TypedDict + + +class StateDict(TypedDict): + params: Dict[str, torch.Tensor] + constraints: Dict[str, constraints.Constraint] + + +class ParamStoreDict: + """ + Global store for parameters in Pyro. This is basically a key-value store. + The typical user interacts with the ParamStore primarily through the + primitive `pyro.param`. + + See `Introduction `_ for further discussion + and `SVI Part I `_ for some examples. + + Some things to bear in mind when using parameters in Pyro: + + - parameters must be assigned unique names + - the `init_tensor` argument to `pyro.param` is only used the first time that a given (named) + parameter is registered with Pyro. + - for this reason, a user may need to use the `clear()` method if working in a REPL in order to + get the desired behavior. this method can also be invoked with `pyro.clear_param_store()`. + - the internal name of a parameter within a PyTorch `nn.Module` that has been registered with + Pyro is prepended with the Pyro name of the module. so nothing prevents the user from having + two different modules each of which contains a parameter named `weight`. by contrast, a user + can only have one top-level parameter named `weight` (outside of any module). + - parameters can be saved and loaded from disk using `save` and `load`. + - in general parameters are associated with both *constrained* and *unconstrained* values. for + example, under the hood a parameter that is constrained to be positive is represented as an + unconstrained tensor in log space. + """ + + # ------------------------------------------------------------------------------- + # New dict-like interface + + def __init__(self) -> None: + """ + initialize ParamStore data structures + """ + self._params: Dict[str, torch.Tensor] = ( + {} + ) # dictionary from param name to param + self._param_to_name: Dict[torch.Tensor, str] = ( + {} + ) # dictionary from unconstrained param to param name + self._constraints: Dict[str, constraints.Constraint] = ( + {} + ) # dictionary from param name to constraint object + + def clear(self) -> None: + """ + Clear the ParamStore + """ + self._params = {} + self._param_to_name = {} + self._constraints = {} + + def items(self) -> Iterator[Tuple[str, torch.Tensor]]: + """ + Iterate over ``(name, constrained_param)`` pairs. Note that `constrained_param` is + in the constrained (i.e. user-facing) space. + """ + for name in self._params: + yield name, self[name] + + def keys(self) -> KeysView[str]: + """ + Iterate over param names. + """ + return self._params.keys() + + def values(self) -> Iterator[torch.Tensor]: + """ + Iterate over constrained parameter values. + """ + for name, constrained_param in self.items(): + yield constrained_param + + def __bool__(self) -> bool: + return bool(self._params) + + def __len__(self) -> int: + return len(self._params) + + def __contains__(self, name: str) -> bool: + return name in self._params + + def __iter__(self) -> Iterator[str]: + """ + Iterate over param names. + """ + return iter(self.keys()) + + def __delitem__(self, name) -> None: + """ + Remove a parameter from the param store. + """ + unconstrained_value = self._params.pop(name) + self._param_to_name.pop(unconstrained_value) + self._constraints.pop(name) + + def __getitem__(self, name: str) -> torch.Tensor: + """ + Get the *constrained* value of a named parameter. + """ + unconstrained_value = self._params[name] + + # compute the constrained value + constraint = self._constraints[name] + constrained_value: torch.Tensor = transform_to(constraint)(unconstrained_value) + constrained_value.unconstrained = weakref.ref(unconstrained_value) # type: ignore[attr-defined] + + return constrained_value + + def __setitem__(self, name: str, new_constrained_value: torch.Tensor) -> None: + """ + Set the constrained value of an existing parameter, or the value of a + new *unconstrained* parameter. To declare a new parameter with + constraint, use :meth:`setdefault`. + """ + # store constraint, defaulting to unconstrained + constraint = self._constraints.setdefault(name, constraints.real) + + # compute the unconstrained value + with torch.no_grad(): + # FIXME should we .detach() the new_constrained_value? + unconstrained_value = transform_to(constraint).inv(new_constrained_value) + unconstrained_value = unconstrained_value.contiguous() + unconstrained_value.requires_grad_(True) + + # store a bidirectional mapping between name and unconstrained tensor + self._params[name] = unconstrained_value + self._param_to_name[unconstrained_value] = name + + def setdefault( + self, + name: str, + init_constrained_value: Union[torch.Tensor, Callable[[], torch.Tensor]], + constraint: constraints.Constraint = constraints.real, + ) -> torch.Tensor: + """ + Retrieve a *constrained* parameter value from the ``ParamStoreDict`` if it exists, + otherwise set the initial value. Note that this is a little fancier than + :meth:`dict.setdefault`. + + If the parameter already exists, ``init_constrained_tensor`` will be ignored. To avoid + expensive creation of ``init_constrained_tensor`` you can wrap it in a ``lambda`` that + will only be evaluated if the parameter does not already exist:: + + param_store.get("foo", lambda: (0.001 * torch.randn(1000, 1000)).exp(), + constraint=constraints.positive) + + :param str name: parameter name + :param init_constrained_value: initial constrained value + :type init_constrained_value: torch.Tensor or callable returning a torch.Tensor + :param constraint: torch constraint object + :type constraint: ~torch.distributions.constraints.Constraint + :returns: constrained parameter value + :rtype: torch.Tensor + """ + if name not in self._params: + # set the constraint + self._constraints[name] = constraint + + # evaluate the lazy value + if callable(init_constrained_value): + init_constrained_value = init_constrained_value() + + # set the initial value + self[name] = init_constrained_value + + # get the param, which is guaranteed to exist + return self[name] + + # ------------------------------------------------------------------------------- + # Old non-dict interface + + def named_parameters(self) -> ItemsView[str, torch.Tensor]: + """ + Returns an iterator over ``(name, unconstrained_value)`` tuples for + each parameter in the ParamStore. Note that, in the event the parameter is constrained, + `unconstrained_value` is in the unconstrained space implicitly used by the constraint. + """ + return self._params.items() + + def get_all_param_names(self) -> KeysView[str]: + warnings.warn( + "ParamStore.get_all_param_names() is deprecated; use .keys() instead.", + DeprecationWarning, + ) + return self.keys() + + def replace_param( + self, param_name: str, new_param: torch.Tensor, old_param: torch.Tensor + ) -> None: + warnings.warn( + "ParamStore.replace_param() is deprecated; use .__setitem__() instead.", + DeprecationWarning, + ) + assert self._params[param_name] is old_param.unconstrained() # type: ignore[attr-defined] + self[param_name] = new_param + + def get_param( + self, + name: str, + init_tensor: Optional[torch.Tensor] = None, + constraint: constraints.Constraint = constraints.real, + event_dim: Optional[int] = None, + ) -> torch.Tensor: + """ + Get parameter from its name. If it does not yet exist in the + ParamStore, it will be created and stored. + The Pyro primitive `pyro.param` dispatches to this method. + + :param name: parameter name + :type name: str + :param init_tensor: initial tensor + :type init_tensor: torch.Tensor + :param constraint: torch constraint + :type constraint: torch.distributions.constraints.Constraint + :param int event_dim: (ignored) + :returns: parameter + :rtype: torch.Tensor + """ + if init_tensor is None: + return self[name] + else: + return self.setdefault(name, init_tensor, constraint) + + def match(self, name: str) -> Dict[str, torch.Tensor]: + """ + Get all parameters that match regex. The parameter must exist. + + :param name: regular expression + :type name: str + :returns: dict with key param name and value torch Tensor + """ + pattern = re.compile(name) + return {name: self[name] for name in self if pattern.match(name)} + + def param_name(self, p: torch.Tensor) -> Optional[str]: + """ + Get parameter name from parameter + + :param p: parameter + :returns: parameter name + """ + return self._param_to_name.get(p) + + # ------------------------------------------------------------------------------- + # Persistence interface + + def get_state(self) -> StateDict: + """ + Get the ParamStore state. + """ + params = self._params.copy() + # Remove weakrefs in preparation for pickling. + for param in params.values(): + param.__dict__.pop("unconstrained", None) + state: StateDict = {"params": params, "constraints": self._constraints.copy()} + return state + + def set_state(self, state: StateDict) -> None: + """ + Set the ParamStore state using state from a previous :meth:`get_state` call + """ + assert isinstance(state, dict), "malformed ParamStore state" + assert set(state.keys()) == set( + ["params", "constraints"] + ), "malformed ParamStore keys {}".format(state.keys()) + + for param_name, param in state["params"].items(): + self._params[param_name] = param + self._param_to_name[param] = param_name + + for param_name, constraint in state["constraints"].items(): + if isinstance(constraint, type(constraints.real)): + # Work around lack of hash & equality comparison on constraints. + constraint = constraints.real + self._constraints[param_name] = constraint + + def save(self, filename: str) -> None: + """ + Save parameters to file + + :param filename: file name to save to + :type filename: str + """ + with open(filename, "wb") as output_file: + torch.save(self.get_state(), output_file) + + def load(self, filename: str, map_location: MAP_LOCATION = None) -> None: + """ + Loads parameters from file + + .. note:: + + If using :meth:`pyro.module` on parameters loaded from + disk, be sure to set the ``update_module_params`` flag:: + + pyro.get_param_store().load('saved_params.save') + pyro.module('module', nn, update_module_params=True) + + :param filename: file name to load from + :type filename: str + :param map_location: specifies how to remap storage locations + :type map_location: function, torch.device, string or a dict + """ + with open(filename, "rb") as input_file: + state = torch.load(input_file, map_location, weights_only=False) + self.set_state(state) + + @contextmanager + def scope(self, state: Optional[StateDict] = None) -> Iterator[StateDict]: + """ + Context manager for using multiple parameter stores within the same process. + + This is a thin wrapper around :meth:`get_state`, :meth:`clear`, and + :meth:`set_state`. For large models where memory space is limiting, you + may want to instead manually use :meth:`save`, :meth:`clear`, and + :meth:`load`. + + Example usage:: + + param_store = pyro.get_param_store() + + # Train multiple models, while avoiding param name conflicts. + with param_store.scope() as scope1: + # ...Train one model,guide pair... + with param_store.scope() as scope2: + # ...Train another model,guide pair... + + # Now evaluate each, still avoiding name conflicts. + with param_store.scope(scope1): # loads the first model's scope + # ...evaluate the first model... + with param_store.scope(scope2): # loads the second model's scope + # ...evaluate the second model... + """ + if state is None: + state = {"params": {}, "constraints": {}} + old_state = self.get_state() + try: + self.clear() + self.set_state(state) + yield state + state.update(self.get_state()) + finally: + self.clear() + self.set_state(old_state) + + +# used to create fully-formed param names, e.g. mymodule$$$mysubmodule.weight +_MODULE_NAMESPACE_DIVIDER = "$$$" + + +def param_with_module_name(pyro_name: str, param_name: str) -> str: + return _MODULE_NAMESPACE_DIVIDER.join([pyro_name, param_name]) + + +def module_from_param_with_module_name(param_name: str) -> str: + return param_name.split(_MODULE_NAMESPACE_DIVIDER)[0] + + +def user_param_name(param_name: str) -> str: + if _MODULE_NAMESPACE_DIVIDER in param_name: + return param_name.split(_MODULE_NAMESPACE_DIVIDER)[1] + return param_name + + +def normalize_param_name(name: str) -> str: + return name.replace(_MODULE_NAMESPACE_DIVIDER, ".") diff --git a/pyro/source/pyro/poutine/__init__.py b/pyro/source/pyro/poutine/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..78d11a965545567e1a659f48bb4f34309cd967ed --- /dev/null +++ b/pyro/source/pyro/poutine/__init__.py @@ -0,0 +1,58 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from .handlers import ( + block, + broadcast, + collapse, + condition, + do, + enum, + equalize, + escape, + infer_config, + lift, + markov, + mask, + queue, + reparam, + replay, + scale, + seed, + substitute, + trace, + uncondition, +) +from .messenger import unwrap +from .runtime import NonlocalExit, get_mask +from .trace_struct import Trace +from .util import enable_validation, is_validation_enabled + +__all__ = [ + "block", + "broadcast", + "collapse", + "condition", + "do", + "enable_validation", + "enum", + "escape", + "equalize", + "get_mask", + "infer_config", + "is_validation_enabled", + "lift", + "markov", + "mask", + "NonlocalExit", + "replay", + "reparam", + "queue", + "scale", + "seed", + "substitute", + "trace", + "Trace", + "uncondition", + "unwrap", +] diff --git a/pyro/source/pyro/poutine/block_messenger.py b/pyro/source/pyro/poutine/block_messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..30cf54744e0f7f23176478fc2a0a133fa19b7440 --- /dev/null +++ b/pyro/source/pyro/poutine/block_messenger.py @@ -0,0 +1,169 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from functools import partial +from typing import TYPE_CHECKING, Callable, List, Optional + +from pyro.poutine.messenger import Messenger + +if TYPE_CHECKING: + from pyro.poutine.runtime import Message + + +def _block_fn( + expose: List[str], + expose_types: List[str], + hide: List[str], + hide_types: List[str], + hide_all: bool, + msg: "Message", +) -> bool: + # handle observes + if msg["type"] == "sample" and msg["is_observed"]: + msg_type = "observe" + else: + msg_type = msg["type"] + + is_not_exposed = (msg["name"] not in expose) and (msg_type not in expose_types) + + # decision rule for hiding: + if ( + (msg["name"] in hide) + or (msg_type in hide_types) + or (is_not_exposed and hide_all) + ): # noqa: E129 + return True + # otherwise expose + else: + return False + + +def _make_default_hide_fn( + hide_all: bool, + expose_all: bool, + hide: Optional[List[str]], + expose: Optional[List[str]], + hide_types: Optional[List[str]], + expose_types: Optional[List[str]], +) -> Callable[["Message"], bool]: + # first, some sanity checks: + # hide_all and expose_all intersect? + assert (hide_all is False and expose_all is False) or ( + hide_all != expose_all + ), "cannot hide and expose a site" + + # hide and expose intersect? + if hide is None: + hide = [] + else: + hide_all = False + + if expose is None: + expose = [] + else: + hide_all = True + + assert set(hide).isdisjoint(set(expose)), "cannot hide and expose a site" + + # hide_types and expose_types intersect? + if hide_types is None: + hide_types = [] + else: + hide_all = False + + if expose_types is None: + expose_types = [] + else: + hide_all = True + + assert set(hide_types).isdisjoint( + set(expose_types) + ), "cannot hide and expose a site type" + + return partial(_block_fn, expose, expose_types, hide, hide_types, hide_all) + + +def _negate_fn( + fn: Callable[["Message"], Optional[bool]], +) -> Callable[["Message"], bool]: + # typed version of lambda msg: not fn(msg) + def negated_fn(msg: "Message") -> bool: + return not fn(msg) + + return negated_fn + + +class BlockMessenger(Messenger): + """ + This handler selectively hides Pyro primitive sites from the outside world. + Default behavior: block everything. + + A site is hidden if at least one of the following holds: + + 0. ``hide_fn(msg) is True`` or ``(not expose_fn(msg)) is True`` + 1. ``msg["name"] in hide`` + 2. ``msg["type"] in hide_types`` + 3. ``msg["name"] not in expose and msg["type"] not in expose_types`` + 4. ``hide``, ``hide_types``, and ``expose_types`` are all ``None`` + + For example, suppose the stochastic function fn has two sample sites "a" and "b". + Then any effect outside of ``BlockMessenger(fn, hide=["a"])`` + will not be applied to site "a" and will only see site "b": + + >>> def fn(): + ... a = pyro.sample("a", dist.Normal(0., 1.)) + ... return pyro.sample("b", dist.Normal(a, 1.)) + >>> fn_inner = pyro.poutine.trace(fn) + >>> fn_outer = pyro.poutine.trace(pyro.poutine.block(fn_inner, hide=["a"])) + >>> trace_inner = fn_inner.get_trace() + >>> trace_outer = fn_outer.get_trace() + >>> "a" in trace_inner + True + >>> "a" in trace_outer + False + >>> "b" in trace_inner + True + >>> "b" in trace_outer + True + + :param fn: a stochastic function (callable containing Pyro primitive calls) + :param hide_fn: function that takes a site and returns True to hide the site + or False/None to expose it. If specified, all other parameters are ignored. + Only specify one of hide_fn or expose_fn, not both. + :param expose_fn: function that takes a site and returns True to expose the site + or False/None to hide it. If specified, all other parameters are ignored. + Only specify one of hide_fn or expose_fn, not both. + :param bool hide_all: hide all sites + :param bool expose_all: expose all sites normally + :param list hide: list of site names to hide + :param list expose: list of site names to be exposed while all others hidden + :param list hide_types: list of site types to be hidden + :param list expose_types: list of site types to be exposed while all others hidden + :returns: stochastic function decorated with a :class:`~pyro.poutine.block_messenger.BlockMessenger` + """ + + def __init__( + self, + hide_fn: Optional[Callable[["Message"], Optional[bool]]] = None, + expose_fn: Optional[Callable[["Message"], Optional[bool]]] = None, + hide_all: bool = True, + expose_all: bool = False, + hide: Optional[List[str]] = None, + expose: Optional[List[str]] = None, + hide_types: Optional[List[str]] = None, + expose_types: Optional[List[str]] = None, + ) -> None: + super().__init__() + if not (hide_fn is None or expose_fn is None): + raise ValueError("Only specify one of hide_fn or expose_fn") + if hide_fn is not None: + self.hide_fn = hide_fn + elif expose_fn is not None: + self.hide_fn = _negate_fn(expose_fn) + else: + self.hide_fn = _make_default_hide_fn( + hide_all, expose_all, hide, expose, hide_types, expose_types + ) + + def _process_message(self, msg: "Message") -> None: + msg["stop"] = bool(self.hide_fn(msg)) diff --git a/pyro/source/pyro/poutine/broadcast_messenger.py b/pyro/source/pyro/poutine/broadcast_messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..87e9dd2f7b1e09dc5593bc08d77661a52c3ca67c --- /dev/null +++ b/pyro/source/pyro/poutine/broadcast_messenger.py @@ -0,0 +1,93 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from typing import TYPE_CHECKING, List, Optional + +from pyro.distributions.torch_distribution import TorchDistributionMixin +from pyro.poutine.messenger import Messenger +from pyro.util import ignore_jit_warnings + +if TYPE_CHECKING: + from pyro.poutine.runtime import Message + + +class BroadcastMessenger(Messenger): + """ + Automatically broadcasts the batch shape of the stochastic function + at a sample site when inside a single or nested plate context. + The existing `batch_shape` must be broadcastable with the size + of the :class:`~pyro.plate` contexts installed in the + `cond_indep_stack`. + + Notice how `model_automatic_broadcast` below automates expanding of + distribution batch shapes. This makes it easy to modularize a + Pyro model as the sub-components are agnostic of the wrapping + :class:`~pyro.plate` contexts. + + >>> def model_broadcast_by_hand(): + ... with IndepMessenger("batch", 100, dim=-2): + ... with IndepMessenger("components", 3, dim=-1): + ... sample = pyro.sample("sample", dist.Bernoulli(torch.ones(3) * 0.5) + ... .expand_by(100)) + ... assert sample.shape == torch.Size((100, 3)) + ... return sample + + >>> @poutine.broadcast + ... def model_automatic_broadcast(): + ... with IndepMessenger("batch", 100, dim=-2): + ... with IndepMessenger("components", 3, dim=-1): + ... sample = pyro.sample("sample", dist.Bernoulli(torch.tensor(0.5))) + ... assert sample.shape == torch.Size((100, 3)) + ... return sample + """ + + @staticmethod + @ignore_jit_warnings(["Converting a tensor to a Python boolean"]) + def _pyro_sample(msg: "Message") -> None: + """ + :param msg: current message at a trace site. + """ + if ( + msg["done"] + or msg["type"] != "sample" + or not isinstance(msg["fn"], TorchDistributionMixin) + ): + return + + dist = msg["fn"] + actual_batch_shape = dist.batch_shape + target_batch_shape = [ + None if size == 1 else size for size in actual_batch_shape + ] + for f in msg["cond_indep_stack"]: + if f.dim is None or f.size == -1: + continue + assert f.dim < 0 + prefix_batch_shape: List[Optional[int]] = [None] * ( + -f.dim - len(target_batch_shape) + ) + target_batch_shape = prefix_batch_shape + target_batch_shape + if ( + target_batch_shape[f.dim] is not None + and target_batch_shape[f.dim] != f.size + ): + raise ValueError( + "Shape mismatch inside plate('{}') at site {} dim {}, {} vs {}".format( + f.name, + msg["name"], + f.dim, + f.size, + target_batch_shape[f.dim], + ) + ) + target_batch_shape[f.dim] = f.size + # Starting from the right, if expected size is None at an index, + # set it to the actual size if it exists, else 1. + for i in range(-len(target_batch_shape) + 1, 1): + if target_batch_shape[i] is None: + target_batch_shape[i] = ( + actual_batch_shape[i] if len(actual_batch_shape) >= -i else 1 + ) + msg["fn"] = dist.expand(target_batch_shape) + if msg["fn"].has_rsample != dist.has_rsample: + msg["fn"].has_rsample = dist.has_rsample # copy custom attribute diff --git a/pyro/source/pyro/poutine/collapse_messenger.py b/pyro/source/pyro/poutine/collapse_messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..f2fccf9d6aba61c397faa0741a658ebb23f462a5 --- /dev/null +++ b/pyro/source/pyro/poutine/collapse_messenger.py @@ -0,0 +1,196 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + + +from functools import reduce, singledispatch +from typing import TYPE_CHECKING, Any, FrozenSet, Tuple + +from typing_extensions import Self + +import pyro +from pyro.distributions.distribution import COERCIONS +from pyro.ops.linalg import ignore_torch_deprecation_warnings +from pyro.poutine.runtime import _PYRO_STACK +from pyro.poutine.trace_messenger import TraceMessenger +from pyro.poutine.util import site_is_subsample + +# TODO Remove import guard once funsor is a required dependency. +try: + import funsor + from funsor.cnf import Contraction + from funsor.delta import Delta + from funsor.terms import Funsor, Variable +except ImportError: + # Create fake types for singledispatch. + Contraction = type("Contraction", (), {}) + Delta = type("Delta", (), {}) + Funsor = type("Funsor", (), {}) + Variable = type("Variable", (), {}) + +if TYPE_CHECKING: + from funsor.distribution import Distribution + + from pyro.poutine.runtime import Message + + +@singledispatch +def _substitute(x, subs): + return x + + +@_substitute.register(str) +def _(x, subs): + return subs.get(x, x) + + +@_substitute.register(Variable) +def _(x, subs): + return subs.get(x.name, x) + + +@_substitute.register(tuple) +def _(x, subs): + return tuple(_substitute(part, subs) for part in x) + + +@singledispatch +def _extract_deltas(f): + raise NotImplementedError("unmatched {}".format(type(f).__name__)) + + +@_extract_deltas.register(Delta) +def _(f): + return f + + +@_extract_deltas.register(Contraction) +def _(f): + for d in f.terms: + if isinstance(d, Delta): + return d + + +class CollapseMessenger(TraceMessenger): + """ + EXPERIMENTAL Collapses all sites in the context by lazily sampling and + attempting to use conjugacy relations. If no conjugacy is known this will + fail. Code using the results of sample sites must be written to accept + Funsors rather than Tensors. This requires ``funsor`` to be installed. + + .. warning:: This is not compatible with automatic guessing of + ``max_plate_nesting``. If any plates appear within the collapsed + context, you should manually declare ``max_plate_nesting`` to your + inference algorithm (e.g. ``Trace_ELBO(max_plate_nesting=1)``). + """ + + _coerce = None + + def __init__(self, *args: Any, **kwargs: Any) -> None: + if CollapseMessenger._coerce is None: + import funsor + from funsor.distribution import CoerceDistributionToFunsor + + funsor.set_backend("torch") + CollapseMessenger._coerce = CoerceDistributionToFunsor("torch") + self._block = False + super().__init__(*args, **kwargs) + + def _process_message(self, msg: "Message") -> None: + if self._block: + return + if site_is_subsample(msg): + return + super()._process_message(msg) + + def _pyro_sample(self, msg: "Message") -> None: + # Eagerly convert fn and value to Funsor. + dim_to_name = {f.dim: f.name for f in msg["cond_indep_stack"]} + dim_to_name.update(self.preserved_plates) + msg["fn"] = funsor.to_funsor(msg["fn"], funsor.Real, dim_to_name) + if TYPE_CHECKING: + assert isinstance(msg["fn"], Distribution) + domain = msg["fn"].inputs["value"] + if msg["value"] is None: + msg["value"] = funsor.Variable(msg["name"], domain) + else: + msg["value"] = funsor.to_funsor(msg["value"], domain, dim_to_name) + + msg["done"] = True + msg["stop"] = True + + def _pyro_post_sample(self, msg: "Message") -> None: + if self._block: + return + if site_is_subsample(msg): + return + super()._pyro_post_sample(msg) + + def _pyro_barrier(self, msg: "Message") -> None: + # Get log_prob and record factor. + name, log_prob, log_joint, sampled_vars = self._get_log_prob() + self._block = True + pyro.factor(name, log_prob.data) + self._block = False + + # Sample + if sampled_vars: + samples = log_joint.sample(sampled_vars) + deltas = _extract_deltas(samples) + samples = {name: point.data for name, (point, _) in deltas.terms} + else: + samples = {} + + # Update value. + assert len(msg["args"]) == 1 + value = msg["args"][0] + value = _substitute(value, samples) + msg["value"] = value + + def __enter__(self) -> Self: + self.preserved_plates = { + h.dim: h.name for h in _PYRO_STACK if isinstance(h, pyro.plate) + } + COERCIONS.append(self._coerce) + return super().__enter__() + + def __exit__(self, *args) -> None: + _coerce = COERCIONS.pop() + assert _coerce is self._coerce + super().__exit__(*args) + + if any(site["type"] == "sample" for site in self.trace.nodes.values()): + name, log_prob, _, _ = self._get_log_prob() + pyro.factor(name, log_prob.data) + + @ignore_torch_deprecation_warnings() + def _get_log_prob(self) -> Tuple[str, Funsor, Funsor, FrozenSet[str]]: + # Convert delayed statements to pyro.factor() + reduced_vars_list = [] + log_prob_terms = [] + plates: FrozenSet[str] = frozenset() + for name, site in self.trace.nodes.items(): + if not site["is_observed"]: + reduced_vars_list.append(name) + log_prob_terms.append(site["fn"](value=site["value"])) + plates |= frozenset( + f.name for f in site["cond_indep_stack"] if f.vectorized + ) + name = reduced_vars_list[0] + reduced_vars = frozenset(reduced_vars_list) + assert log_prob_terms, "nothing to collapse" + self.trace.nodes.clear() + reduced_plates = plates - frozenset(self.preserved_plates.values()) + if reduced_plates: + log_prob = funsor.sum_product.sum_product( + funsor.ops.logaddexp, + funsor.ops.add, + log_prob_terms, + eliminate=reduced_vars | reduced_plates, + plates=plates, + ) + log_joint = NotImplemented + else: + log_joint = reduce(funsor.ops.add, log_prob_terms) + log_prob = log_joint.reduce(funsor.ops.logaddexp, reduced_vars) + + return name, log_prob, log_joint, reduced_vars diff --git a/pyro/source/pyro/poutine/condition_messenger.py b/pyro/source/pyro/poutine/condition_messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..9ce259cd1fb2f59dbe1b4e41783938fc1683afbc --- /dev/null +++ b/pyro/source/pyro/poutine/condition_messenger.py @@ -0,0 +1,71 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from typing import TYPE_CHECKING, Dict, Union + +import torch + +from pyro.poutine.messenger import Messenger +from pyro.poutine.trace_struct import Trace + +if TYPE_CHECKING: + from pyro.poutine.runtime import Message + + +class ConditionMessenger(Messenger): + """ + Given a stochastic function with some sample statements + and a dictionary of observations at names, + change the sample statements at those names into observes + with those values. + + Consider the following Pyro program: + + >>> def model(x): + ... s = pyro.param("s", torch.tensor(0.5)) + ... z = pyro.sample("z", dist.Normal(x, s)) + ... return z ** 2 + + To observe a value for site `z`, we can write + + >>> conditioned_model = pyro.poutine.condition(model, data={"z": torch.tensor(1.)}) + + This is equivalent to adding `obs=value` as a keyword argument + to `pyro.sample("z", ...)` in `model`. + + :param fn: a stochastic function (callable containing Pyro primitive calls) + :param data: a dict or a :class:`~pyro.poutine.Trace` + :returns: stochastic function decorated with a :class:`~pyro.poutine.condition_messenger.ConditionMessenger` + """ + + def __init__(self, data: Union[Dict[str, torch.Tensor], Trace]) -> None: + """ + :param data: a dict or a Trace + + Constructor. Doesn't do much, just stores the stochastic function + and the data to condition on. + """ + super().__init__() + self.data = data + + def _pyro_sample(self, msg: "Message") -> None: + """ + :param msg: current message at a trace site. + :returns: a sample from the stochastic function at the site. + + If msg["name"] appears in self.data, + convert the sample site into an observe site + whose observed value is the value from self.data[msg["name"]]. + + Otherwise, implements default sampling behavior + with no additional effects. + """ + assert isinstance(msg["name"], str) + name = msg["name"] + + if name in self.data: + if isinstance(self.data, Trace): + msg["value"] = self.data.nodes[name]["value"] + else: + msg["value"] = self.data[name] + msg["is_observed"] = msg["value"] is not None diff --git a/pyro/source/pyro/poutine/do_messenger.py b/pyro/source/pyro/poutine/do_messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..ac686061dc9f622755bf0c1cc2a4361fb6580f7c --- /dev/null +++ b/pyro/source/pyro/poutine/do_messenger.py @@ -0,0 +1,94 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import numbers +import warnings +from typing import Dict, Union + +import torch + +from pyro.poutine.messenger import Messenger +from pyro.poutine.runtime import Message, apply_stack + + +class DoMessenger(Messenger): + """ + Given a stochastic function with some sample statements + and a dictionary of values at names, + set the return values of those sites equal to the values + as if they were hard-coded to those values + and introduce fresh sample sites with the same names + whose values do not propagate. + + Composes freely with :func:`~pyro.poutine.handlers.condition` + to represent counterfactual distributions over potential outcomes. + See Single World Intervention Graphs [1] for additional details and theory. + + Consider the following Pyro program: + + >>> def model(x): + ... s = pyro.param("s", torch.tensor(0.5)) + ... z = pyro.sample("z", dist.Normal(x, s)) + ... return z ** 2 + + To intervene with a value for site `z`, we can write + + >>> intervened_model = pyro.poutine.do(model, data={"z": torch.tensor(1.)}) + + This is equivalent to replacing `z = pyro.sample("z", ...)` with + `z = torch.tensor(1.)` + and introducing a fresh sample site pyro.sample("z", ...) whose value is not used elsewhere. + + References + + [1] `Single World Intervention Graphs: A Primer`, + Thomas Richardson, James Robins + + :param fn: a stochastic function (callable containing Pyro primitive calls) + :param data: a ``dict`` mapping sample site names to interventions + :returns: stochastic function decorated with a :class:`~pyro.poutine.do_messenger.DoMessenger` + """ + + def __init__(self, data: Dict[str, Union[torch.Tensor, numbers.Number]]) -> None: + super().__init__() + self.data = data + self._intervener_id = str(id(self)) + + def _pyro_sample(self, msg: Message) -> None: + assert isinstance(msg["name"], str) + if ( + msg.get("_intervener_id") != self._intervener_id + and self.data.get(msg["name"]) is not None + ): + if msg.get("_intervener_id") is not None: + warnings.warn( + "Attempting to intervene on variable {} multiple times," + "this is almost certainly incorrect behavior".format(msg["name"]), + RuntimeWarning, + ) + + msg["_intervener_id"] = self._intervener_id + + # split node, avoid reapplying self recursively to new node + new_msg = msg.copy() + new_msg["cond_indep_stack"] = () # avoid entering plates twice + apply_stack(new_msg) + + # apply intervention + intervention = self.data[msg["name"]] + msg["name"] = msg["name"] + "__CF" # mangle old name + + if isinstance(intervention, numbers.Number): + msg["value"] = torch.tensor(intervention) + msg["is_observed"] = True + msg["stop"] = True + elif isinstance(intervention, torch.Tensor): + msg["value"] = intervention + msg["is_observed"] = True + msg["stop"] = True + else: + raise NotImplementedError( + "Interventions of type {} not implemented (yet)".format( + type(intervention) + ) + ) diff --git a/pyro/source/pyro/poutine/enum_messenger.py b/pyro/source/pyro/poutine/enum_messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..408669e900bdeaa6447022e367e61814578c73a4 --- /dev/null +++ b/pyro/source/pyro/poutine/enum_messenger.py @@ -0,0 +1,254 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from typing import Any, Dict, List, Optional + +import torch +from typing_extensions import Self + +from pyro.distributions.torch import Categorical +from pyro.distributions.torch_distribution import TorchDistributionMixin +from pyro.ops.indexing import Vindex +from pyro.poutine.messenger import Messenger +from pyro.poutine.runtime import _ENUM_ALLOCATOR, Message +from pyro.util import ignore_jit_warnings + + +def _tmc_mixture_sample(msg: Message) -> torch.Tensor: + assert isinstance(msg["fn"], TorchDistributionMixin) + assert msg["infer"] is not None + dist, num_samples = msg["fn"], msg["infer"]["num_samples"] + + # find batch dims that aren't plate dims + batch_shape = [1] * len(dist.batch_shape) + for f in msg["cond_indep_stack"]: + if f.vectorized: + assert f.dim is not None + batch_shape[f.dim] = f.size if f.size > 0 else dist.batch_shape[f.dim] + batch_shape_tuple = tuple(batch_shape) + + # sample a batch + sample_shape = (num_samples,) + fat_sample = dist( + sample_shape=torch.Size(sample_shape) + ) # TODO thin before sampling + assert fat_sample.shape == sample_shape + dist.batch_shape + dist.event_shape + assert any(d > 1 for d in fat_sample.shape) + + target_shape = (num_samples,) + batch_shape_tuple + dist.event_shape + + # if this site has any possible ancestors, sample ancestor indices uniformly + thin_sample = fat_sample + if thin_sample.shape != target_shape: + index = [Ellipsis] + [slice(None)] * (len(thin_sample.shape) - 1) + squashed_dims = [] + for squashed_dim, squashed_size in zip( + range(1, len(thin_sample.shape)), thin_sample.shape[1:] + ): + if squashed_size > 1 and ( + target_shape[squashed_dim] == 1 or squashed_dim == 0 + ): + # uniformly sample one ancestor per upstream particle population + ancestor_dist = Categorical( + logits=torch.zeros((squashed_size,), device=thin_sample.device) + ) + ancestor_index = ancestor_dist.sample(sample_shape=(num_samples,)) + index[squashed_dim] = ancestor_index + squashed_dims.append(squashed_dim) + + thin_sample = Vindex(thin_sample)[tuple(index)] + for squashed_dim in squashed_dims: + thin_sample = thin_sample.unsqueeze(squashed_dim) + + assert thin_sample.shape == target_shape + return thin_sample + + +def _tmc_diagonal_sample(msg: Message) -> torch.Tensor: + assert isinstance(msg["fn"], TorchDistributionMixin) + assert msg["infer"] is not None + dist, num_samples = msg["fn"], msg["infer"]["num_samples"] + + # find batch dims that aren't plate dims + batch_shape = [1] * len(dist.batch_shape) + for f in msg["cond_indep_stack"]: + if f.vectorized: + assert f.dim is not None + batch_shape[f.dim] = f.size if f.size > 0 else dist.batch_shape[f.dim] + batch_shape_tuple = tuple(batch_shape) + + # sample a batch + sample_shape = (num_samples,) + fat_sample = dist( + sample_shape=torch.Size(sample_shape) + ) # TODO thin before sampling + assert fat_sample.shape == sample_shape + dist.batch_shape + dist.event_shape + assert any(d > 1 for d in fat_sample.shape) + + target_shape = (num_samples,) + batch_shape_tuple + dist.event_shape + + # if this site has any ancestors, choose ancestors from diagonal approximation + thin_sample = fat_sample + if thin_sample.shape != target_shape: + index: List[Any] = [Ellipsis] + [slice(None)] * (len(thin_sample.shape) - 1) + squashed_dims = [] + for squashed_dim, squashed_size in zip( + range(1, len(thin_sample.shape)), thin_sample.shape[1:] + ): + if squashed_size > 1 and ( + target_shape[squashed_dim] == 1 or squashed_dim == 0 + ): + # diagonal approximation: identify particle indices across populations + ancestor_index = torch.arange(squashed_size, device=thin_sample.device) + index[squashed_dim] = ancestor_index + squashed_dims.append(squashed_dim) + + thin_sample = Vindex(thin_sample)[tuple(index)] + for squashed_dim in squashed_dims: + thin_sample = thin_sample.unsqueeze(squashed_dim) + + assert thin_sample.shape == target_shape + return thin_sample + + +def enumerate_site(msg: Message) -> torch.Tensor: + assert isinstance(msg["fn"], TorchDistributionMixin) + assert msg["infer"] is not None + dist, num_samples = msg["fn"], msg["infer"].get("num_samples") + if num_samples is None: + # Enumerate over the support of the distribution. + value = dist.enumerate_support(expand=msg["infer"].get("expand", False)) + elif num_samples > 1 and not msg["infer"].get("expand", False): + tmc_strategy = msg["infer"].get("tmc", "diagonal") + if tmc_strategy == "mixture": + value = _tmc_mixture_sample(msg) + elif tmc_strategy == "diagonal": + value = _tmc_diagonal_sample(msg) + else: + raise ValueError("{} not a valid TMC strategy".format(tmc_strategy)) + elif num_samples > 1 and msg["infer"]["expand"]: + # Monte Carlo sample the distribution. + value = dist(sample_shape=torch.Size([num_samples])) + assert value.dim() == 1 + len(dist.batch_shape) + len(dist.event_shape) + return value + + +class EnumMessenger(Messenger): + """ + Enumerates in parallel over discrete sample sites marked + ``infer={"enumerate": "parallel"}``. + + :param int first_available_dim: The first tensor dimension (counting + from the right) that is available for parallel enumeration. This + dimension and all dimensions left may be used internally by Pyro. + This should be a negative integer or None. + """ + + def __init__(self, first_available_dim: Optional[int] = None) -> None: + assert ( + first_available_dim is None or first_available_dim < 0 + ), first_available_dim + self.first_available_dim = first_available_dim + super().__init__() + + def __enter__(self) -> Self: + if self.first_available_dim is not None: + _ENUM_ALLOCATOR.set_first_available_dim(self.first_available_dim) + self._markov_depths: Dict[str, int] = ( + {} + ) # site name -> depth (nonnegative integer) + self._param_dims: Dict[str, Dict[int, int]] = ( + {} + ) # site name -> (enum dim -> unique id) + self._value_dims: Dict[str, Dict[int, int]] = ( + {} + ) # site name -> (enum dim -> unique id) + return super().__enter__() + + @ignore_jit_warnings() + def _pyro_sample(self, msg: Message) -> None: + """ + :param msg: current message at a trace site. + :returns: a sample from the stochastic function at the site. + """ + if msg["done"] or not isinstance(msg["fn"], TorchDistributionMixin): + return + + assert isinstance(msg["name"], str) + assert msg["infer"] is not None + # Compute upstream dims in scope; these are unsafe to use for this site's target_dim. + scope = msg["infer"].get("_markov_scope") # site name -> markov depth + param_dims = _ENUM_ALLOCATOR.dim_to_id.copy() # enum dim -> unique id + if scope is not None: + for name, depth in scope.items(): + if ( + self._markov_depths[name] == depth + ): # hide sites whose markov context has exited + param_dims.update(self._value_dims[name]) + self._markov_depths[msg["name"]] = msg["infer"]["_markov_depth"] + self._param_dims[msg["name"]] = param_dims + if msg["is_observed"] or msg["infer"].get("enumerate") != "parallel": + return + + # Compute an enumerated value (at an arbitrary dim). + value = enumerate_site(msg) + actual_dim = -1 - len(msg["fn"].batch_shape) # the leftmost dim of log_prob + + # Move actual_dim to a safe target_dim. + target_dim, id_ = _ENUM_ALLOCATOR.allocate( + None if scope is None else set(param_dims) + ) + event_dim = msg["fn"].event_dim + categorical_support = getattr(value, "_pyro_categorical_support", None) + if categorical_support is not None: + # Preserve categorical supports to speed up Categorical.log_prob(). + # See pyro/distributions/torch.py for details. + assert target_dim < 0 + value = value.reshape(value.shape[:1] + (1,) * (-1 - target_dim)) + value._pyro_categorical_support = categorical_support # type: ignore[attr-defined] + elif actual_dim < target_dim: + assert ( + value.size(target_dim - event_dim) == 1 + ), "pyro.markov dim conflict at dim {}".format(actual_dim) + value = value.transpose(target_dim - event_dim, actual_dim - event_dim) + while value.dim() and value.size(0) == 1: + value = value.squeeze(0) + elif target_dim < actual_dim: + diff = actual_dim - target_dim + value = value.reshape(value.shape[:1] + (1,) * diff + value.shape[1:]) + + # Compute dims passed downstream through the value. + value_dims = { + dim: param_dims[dim] + for dim in range(event_dim - value.dim(), 0) + if value.size(dim - event_dim) > 1 and dim in param_dims + } + value_dims[target_dim] = id_ + + msg["infer"]["_enumerate_dim"] = target_dim + msg["infer"]["_dim_to_id"] = value_dims + msg["value"] = value + msg["done"] = True + + def _pyro_post_sample(self, msg: Message) -> None: + # Save all dims exposed in this sample value. + # Whereas all of site["_dim_to_id"] are needed to interpret a + # site's log_prob tensor, only a filtered subset self._value_dims[msg["name"]] + # are needed to interpret a site's value. + if not isinstance(msg["fn"], TorchDistributionMixin): + return + value = msg["value"] + if value is None: + return + + assert isinstance(msg["name"], str) + assert msg["infer"] is not None + shape = value.data.shape[: value.dim() - msg["fn"].event_dim] + dim_to_id = msg["infer"].setdefault("_dim_to_id", {}) + dim_to_id.update(self._param_dims.get(msg["name"], {})) + with ignore_jit_warnings(): + self._value_dims[msg["name"]] = { + dim: id_ + for dim, id_ in dim_to_id.items() + if len(shape) >= -dim and shape[dim] > 1 + } diff --git a/pyro/source/pyro/poutine/equalize_messenger.py b/pyro/source/pyro/poutine/equalize_messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..31e524a6513c449c888de1218866f581ad647b6a --- /dev/null +++ b/pyro/source/pyro/poutine/equalize_messenger.py @@ -0,0 +1,104 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import re +from typing import List, Optional, Union + +from typing_extensions import Self + +from pyro.distributions import Delta +from pyro.poutine.messenger import Messenger +from pyro.poutine.runtime import Message + + +class EqualizeMessenger(Messenger): + """ + Given a stochastic function with some primitive statements and a list of names, + force the primitive statements at those names to have the same value, + with that value being the result of the first primitive statement matching those names. + + Consider the following Pyro program: + + >>> def per_category_model(category): + ... shift = pyro.param(f'{category}_shift', torch.randn(1)) + ... mean = pyro.sample(f'{category}_mean', pyro.distributions.Normal(0, 1)) + ... std = pyro.sample(f'{category}_std', pyro.distributions.LogNormal(0, 1)) + ... return pyro.sample(f'{category}_values', pyro.distributions.Normal(mean + shift, std)) + + Running the program for multiple categories can be done by + + >>> def model(categories): + ... return {category:per_category_model(category) for category in categories} + + To make the `std` sample sites have the same value, we can write + + >>> equal_std_model = pyro.poutine.equalize(model, '.+_std') + + If on top of the above we would like to make the 'shift' parameters identical, we can write + + >>> equal_std_param_model = pyro.poutine.equalize(equal_std_model, '.+_shift', 'param') + + Alternatively, the ``equalize`` messenger can be used to condition a model on primitive statements + having the same value by setting `keep_dist` to True. Consider the below model: + + >>> def model(): + ... x = pyro.sample('x', pyro.distributions.Normal(0, 1)) + ... y = pyro.sample('y', pyro.distributions.Normal(5, 3)) + ... return x, y + + The model can be conditioned on 'x' and 'y' having the same value by + + >>> conditioned_model = pyro.poutine.equalize(model, ['x', 'y'], keep_dist=True) + + Note that the conditioned model defined above calculates the correct unnormalized log-probablity + density, but in order to correctly sample from it one must use SVI or MCMC techniques. + + :param fn: a stochastic function (callable containing Pyro primitive calls) + :param sites: a string or list of strings to match site names (the strings can be regular expressions) + :param type: a string specifying the site type (default is 'sample') + :param bool keep_dist: Whether to keep the distributions of the second and subsequent + matching primitive statements. If kept this is equivalent to conditioning the model + on all matching primitive statements having the same value, as opposed to having the + second and subsequent matching primitive statements replaced by delta sampling functions. + Defaults to False. + :returns: stochastic function decorated with a :class:`~pyro.poutine.equalize_messenger.EqualizeMessenger` + """ + + def __init__( + self, + sites: Union[str, List[str]], + type: Optional[str] = "sample", + keep_dist: Optional[bool] = False, + ) -> None: + super().__init__() + self.sites = [sites] if isinstance(sites, str) else sites + self.type = type + self.keep_dist = keep_dist + + def __enter__(self) -> Self: + self.value = None + return super().__enter__() + + def _is_matching(self, msg: Message) -> bool: + if msg["type"] == self.type: + for site in self.sites: + if re.compile(site).fullmatch(msg["name"]) is not None: # type: ignore[arg-type] + return True + return False + + def _postprocess_message(self, msg: Message) -> None: + if self.value is None and self._is_matching(msg): + value = msg["value"] + assert value is not None + self.value = value + + def _process_message(self, msg: Message) -> None: + if self.value is not None and self._is_matching(msg): # type: ignore[unreachable] + msg["value"] = self.value # type: ignore[unreachable] + if msg["type"] == "sample": + msg["is_observed"] = True + if not self.keep_dist: + msg["infer"] = {"_deterministic": True} + msg["fn"] = Delta(self.value, event_dim=msg["fn"].event_dim).mask( + False + ) diff --git a/pyro/source/pyro/poutine/escape_messenger.py b/pyro/source/pyro/poutine/escape_messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..ecef95e104f7ba6033e059e09eb1fd78d1fa759c --- /dev/null +++ b/pyro/source/pyro/poutine/escape_messenger.py @@ -0,0 +1,42 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from typing import Callable + +from pyro.poutine.messenger import Messenger +from pyro.poutine.runtime import Message, NonlocalExit + + +class EscapeMessenger(Messenger): + """ + Messenger that does a nonlocal exit by raising a util.NonlocalExit exception + """ + + def __init__(self, escape_fn: Callable[[Message], bool]) -> None: + """ + :param escape_fn: function that takes a msg as input and returns True + if the poutine should perform a nonlocal exit at that site. + + Constructor. Stores fn and escape_fn. + """ + super().__init__() + self.escape_fn = escape_fn + + def _pyro_sample(self, msg: Message) -> None: + """ + :param msg: current message at a trace site + :returns: a sample from the stochastic function at the site. + + Evaluates self.escape_fn on the site (self.escape_fn(msg)). + + If this returns True, raises an exception NonlocalExit(msg). + Else, implements default _pyro_sample behavior with no additional effects. + """ + if self.escape_fn(msg): + msg["done"] = True + msg["stop"] = True + + def cont(m: Message) -> None: + raise NonlocalExit(m) + + msg["continuation"] = cont diff --git a/pyro/source/pyro/poutine/guide.py b/pyro/source/pyro/poutine/guide.py new file mode 100644 index 0000000000000000000000000000000000000000..6685fc4df47b04ab436cce1be83e40b7e0a90003 --- /dev/null +++ b/pyro/source/pyro/poutine/guide.py @@ -0,0 +1,158 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from abc import ABC, abstractmethod +from typing import TYPE_CHECKING, Callable, Dict, Optional, Tuple, Union + +import torch + +import pyro.distributions as dist +from pyro.poutine.trace_messenger import TraceMessenger +from pyro.poutine.trace_struct import Trace +from pyro.poutine.util import prune_subsample_sites, site_is_subsample + +if TYPE_CHECKING: + from pyro.distributions.torch_distribution import TorchDistributionMixin + from pyro.poutine.runtime import Message + + +class GuideMessenger(TraceMessenger, ABC): + """ + Abstract base class for effect-based guides. + + Derived classes must implement the :meth:`get_posterior` method. + """ + + def __init__(self, model: Callable) -> None: + super().__init__() + # Do not register model as submodule + self._model = (model,) + + @property + def model(self) -> Callable: + return self._model[0] + + def __getstate__(self) -> Dict[str, object]: + # Avoid pickling the trace. + state = self.__dict__.copy() + del state["trace"] + return state + + def __call__(self, *args, **kwargs) -> Dict[str, torch.Tensor]: # type: ignore[override] + """ + Draws posterior samples from the guide and replays the model against + those samples. + + :returns: A dict mapping sample site name to sample value. + This includes latent, deterministic, and observed values. + :rtype: dict + """ + self.args_kwargs = args, kwargs + try: + with self: + self.model(*args, **kwargs) + finally: + del self.args_kwargs + + model_trace, guide_trace = self.get_traces() + samples = {} + for name, site in model_trace.nodes.items(): + if site["type"] == "sample": + assert isinstance(site["value"], torch.Tensor) + samples[name] = site["value"] + return samples + + def _pyro_sample(self, msg: "Message") -> None: + if msg["is_observed"] or site_is_subsample(msg): + return + if TYPE_CHECKING: + assert isinstance(msg["name"], str) + assert isinstance(msg["fn"], TorchDistributionMixin) + assert msg["infer"] is not None + prior = msg["fn"] + msg["infer"]["prior"] = prior + posterior = self.get_posterior(msg["name"], prior) + if isinstance(posterior, torch.Tensor): + posterior = dist.Delta(posterior, event_dim=prior.event_dim) + if posterior.batch_shape != prior.batch_shape: + posterior = posterior.expand(prior.batch_shape) + msg["fn"] = posterior + + def _pyro_post_sample(self, msg: "Message") -> None: + # Manually apply outer plates. + assert msg["infer"] is not None + prior = msg["infer"].get("prior") + if prior is not None: + if TYPE_CHECKING: + assert isinstance(msg["fn"], TorchDistributionMixin) + if prior.batch_shape != msg["fn"].batch_shape: + msg["infer"]["prior"] = prior.expand(msg["fn"].batch_shape) + return super()._pyro_post_sample(msg) + + @abstractmethod + def get_posterior( + self, name: str, prior: "TorchDistributionMixin" + ) -> Union["TorchDistributionMixin", torch.Tensor]: + """ + Abstract method to compute a posterior distribution or sample a + posterior value given a prior distribution conditioned on upstream + posterior samples. + + Implementations may use ``pyro.param`` and ``pyro.sample`` inside this + function, but ``pyro.sample`` statements should set + ``infer={"is_auxiliary": True"}`` . + + Implementations may access further information for computations: + + - ``value = self.upstream_value(name)`` is the value of an upstream + sample or deterministic site. + - ``self.trace`` is a trace of upstream sites, and may be useful for + other information such as ``self.trace.nodes["my_site"]["fn"]`` or + ``self.trace.nodes["my_site"]["cond_indep_stack"]`` . + - ``args, kwargs = self.args_kwargs`` are the inputs to the model, and + may be useful for amortization. + + :param str name: The name of the sample site to sample. + :param prior: The prior distribution of this sample site + (conditioned on upstream samples from the posterior). + :type prior: ~pyro.distributions.Distribution + :returns: A posterior distribution or sample from the posterior + distribution. + :rtype: ~pyro.distributions.Distribution or torch.Tensor + """ + raise NotImplementedError + + def upstream_value(self, name: str) -> Optional[torch.Tensor]: + """ + For use in :meth:`get_posterior` . + + :returns: The value of an upstream sample or deterministic site + :rtype: torch.Tensor + """ + return self.trace.nodes[name]["value"] + + def get_traces(self) -> Tuple[Trace, Trace]: + """ + This can be called after running :meth:`__call__` to extract a pair of + traces. + + In contrast to the trace-replay pattern of generating a pair of traces, + :class:`GuideMessenger` interleaves model and guide computations, so + only a single ``guide(*args, **kwargs)`` call is needed to create both + traces. This function merely extract the relevant information from this + guide's ``.trace`` attribute. + + :returns: a pair ``(model_trace, guide_trace)`` + :rtype: tuple + """ + guide_trace = prune_subsample_sites(self.trace) + model_trace = model_trace = guide_trace.copy() + for name, guide_site in list(guide_trace.nodes.items()): + if guide_site["type"] != "sample" or guide_site["is_observed"]: + del guide_trace.nodes[name] + continue + model_site = model_trace.nodes[name].copy() + assert guide_site["infer"] is not None + model_site["fn"] = guide_site["infer"]["prior"] + model_trace.nodes[name] = model_site + return model_trace, guide_trace diff --git a/pyro/source/pyro/poutine/handlers.py b/pyro/source/pyro/poutine/handlers.py new file mode 100644 index 0000000000000000000000000000000000000000..bc1ba91de87e6d9b9661cb092cbc989db039faa2 --- /dev/null +++ b/pyro/source/pyro/poutine/handlers.py @@ -0,0 +1,677 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +Poutine is a library of composable effect handlers for recording and modifying the +behavior of Pyro programs. These lower-level ingredients simplify the implementation +of new inference algorithms and behavior. + +Handlers can be used as higher-order functions, decorators, or context managers +to modify the behavior of functions or blocks of code: + +For example, consider the following Pyro program: + + >>> def model(x): + ... s = pyro.param("s", torch.tensor(0.5)) + ... z = pyro.sample("z", dist.Normal(x, s)) + ... return z ** 2 + +We can mark sample sites as observed using ``condition``, +which returns a callable with the same input and output signatures as ``model``: + + >>> conditioned_model = poutine.condition(model, data={"z": 1.0}) + +We can also use handlers as decorators: + + >>> @pyro.condition(data={"z": 1.0}) + ... def model(x): + ... s = pyro.param("s", torch.tensor(0.5)) + ... z = pyro.sample("z", dist.Normal(x, s)) + ... return z ** 2 + +Or as context managers: + + >>> with pyro.condition(data={"z": 1.0}): + ... s = pyro.param("s", torch.tensor(0.5)) + ... z = pyro.sample("z", dist.Normal(0., s)) + ... y = z ** 2 + +Handlers compose freely: + + >>> conditioned_model = poutine.condition(model, data={"z": 1.0}) + >>> traced_model = poutine.trace(conditioned_model) + +Many inference algorithms or algorithmic components can be implemented +in just a few lines of code:: + + guide_tr = poutine.trace(guide).get_trace(...) + model_tr = poutine.trace(poutine.replay(conditioned_model, trace=guide_tr)).get_trace(...) + monte_carlo_elbo = model_tr.log_prob_sum() - guide_tr.log_prob_sum() +""" + +import collections +import functools +from typing import ( + TYPE_CHECKING, + Any, + Callable, + Dict, + Iterable, + List, + Literal, + Optional, + TypeVar, + Union, + overload, +) + +from typing_extensions import ParamSpec + +from pyro.poutine import util +from pyro.poutine.block_messenger import BlockMessenger +from pyro.poutine.broadcast_messenger import BroadcastMessenger +from pyro.poutine.collapse_messenger import CollapseMessenger +from pyro.poutine.condition_messenger import ConditionMessenger +from pyro.poutine.do_messenger import DoMessenger +from pyro.poutine.enum_messenger import EnumMessenger +from pyro.poutine.equalize_messenger import EqualizeMessenger +from pyro.poutine.escape_messenger import EscapeMessenger +from pyro.poutine.infer_config_messenger import InferConfigMessenger +from pyro.poutine.lift_messenger import LiftMessenger +from pyro.poutine.markov_messenger import MarkovMessenger +from pyro.poutine.mask_messenger import MaskMessenger +from pyro.poutine.reparam_messenger import ReparamHandler, ReparamMessenger +from pyro.poutine.replay_messenger import ReplayMessenger +from pyro.poutine.runtime import NonlocalExit +from pyro.poutine.scale_messenger import ScaleMessenger +from pyro.poutine.seed_messenger import SeedMessenger +from pyro.poutine.substitute_messenger import SubstituteMessenger +from pyro.poutine.trace_messenger import TraceHandler, TraceMessenger +from pyro.poutine.uncondition_messenger import UnconditionMessenger + +if TYPE_CHECKING: + import numbers + + import torch + + from pyro.distributions.distribution import Distribution + from pyro.infer.reparam.reparam import Reparam + from pyro.poutine.runtime import InferDict, Message + from pyro.poutine.trace_struct import Trace + +_P = ParamSpec("_P") +_T = TypeVar("_T") + +############################################ +# Begin primitive operations +############################################ + + +def _make_handler(msngr_cls, module=None): + def handler_decorator(func): + @functools.wraps(func) + def handler(fn=None, *args, **kwargs): + if fn is not None and not ( + callable(fn) or isinstance(fn, collections.abc.Iterable) + ): + raise ValueError( + f"{fn} is not callable, did you mean to pass it as a keyword arg?" + ) + msngr = msngr_cls(*args, **kwargs) + return ( + functools.update_wrapper(msngr(fn), fn, updated=()) + if fn is not None + else msngr + ) + + handler.__doc__ = ( + """Convenient wrapper of :class:`~pyro.poutine.{}.{}` \n\n""".format( + func.__name__ + "_messenger", msngr_cls.__name__ + ) + + (msngr_cls.__doc__ if msngr_cls.__doc__ else "") + ) + if module is not None: + handler.__module__ = module + return handler + + return handler_decorator + + +@overload +def block( + fn: None = ..., + hide_fn: Optional[Callable[["Message"], Optional[bool]]] = None, + expose_fn: Optional[Callable[["Message"], Optional[bool]]] = None, + hide_all: bool = True, + expose_all: bool = False, + hide: Optional[List[str]] = None, + expose: Optional[List[str]] = None, + hide_types: Optional[List[str]] = None, + expose_types: Optional[List[str]] = None, +) -> BlockMessenger: ... + + +@overload +def block( + fn: Callable[_P, _T], + hide_fn: Optional[Callable[["Message"], Optional[bool]]] = None, + expose_fn: Optional[Callable[["Message"], Optional[bool]]] = None, + hide_all: bool = True, + expose_all: bool = False, + hide: Optional[List[str]] = None, + expose: Optional[List[str]] = None, + hide_types: Optional[List[str]] = None, + expose_types: Optional[List[str]] = None, +) -> Callable[_P, _T]: ... + + +@_make_handler(BlockMessenger) +def block( # type: ignore[empty-body] + fn: Optional[Callable[_P, _T]] = None, + hide_fn: Optional[Callable[["Message"], Optional[bool]]] = None, + expose_fn: Optional[Callable[["Message"], Optional[bool]]] = None, + hide_all: bool = True, + expose_all: bool = False, + hide: Optional[List[str]] = None, + expose: Optional[List[str]] = None, + hide_types: Optional[List[str]] = None, + expose_types: Optional[List[str]] = None, +) -> Union[BlockMessenger, Callable[_P, _T]]: ... + + +@overload +def broadcast( + fn: None = ..., +) -> BroadcastMessenger: ... + + +@overload +def broadcast( + fn: Callable[_P, _T], +) -> Callable[_P, _T]: ... + + +@_make_handler(BroadcastMessenger) +def broadcast( # type: ignore[empty-body] + fn: Optional[Callable[_P, _T]] = None, +) -> Union[BroadcastMessenger, Callable[_P, _T]]: ... + + +@overload +def collapse( + fn: None = ..., + *args: Any, + **kwargs: Any, +) -> CollapseMessenger: ... + + +@overload +def collapse( + fn: Callable[_P, _T], + *args: Any, + **kwargs: Any, +) -> Callable[_P, _T]: ... + + +@_make_handler(CollapseMessenger) +def collapse( # type: ignore[empty-body] + fn: Optional[Callable[_P, _T]] = None, + *args: Any, + **kwargs: Any, +) -> Union[CollapseMessenger, Callable[_P, _T]]: ... + + +@overload +def condition( + data: Union[Dict[str, "torch.Tensor"], "Trace"], +) -> ConditionMessenger: ... + + +@overload +def condition( + fn: Callable[_P, _T], + data: Union[Dict[str, "torch.Tensor"], "Trace"], +) -> Callable[_P, _T]: ... + + +@_make_handler(ConditionMessenger) +def condition( # type: ignore[empty-body] + fn: Callable[_P, _T], + data: Union[Dict[str, "torch.Tensor"], "Trace"], +) -> Union[ConditionMessenger, Callable[_P, _T]]: ... + + +@overload +def do( + data: Dict[str, Union["torch.Tensor", "numbers.Number"]], +) -> DoMessenger: ... + + +@overload +def do( + fn: Callable[_P, _T], + data: Dict[str, Union["torch.Tensor", "numbers.Number"]], +) -> Callable[_P, _T]: ... + + +@_make_handler(DoMessenger) +def do( # type: ignore[empty-body] + fn: Callable[_P, _T], + data: Dict[str, Union["torch.Tensor", "numbers.Number"]], +) -> Union[DoMessenger, Callable[_P, _T]]: ... + + +@overload +def enum( + fn: None = ..., + first_available_dim: Optional[int] = None, +) -> EnumMessenger: ... + + +@overload +def enum( + fn: Callable[_P, _T], + first_available_dim: Optional[int] = None, +) -> Callable[_P, _T]: ... + + +@_make_handler(EnumMessenger) +def enum( # type: ignore[empty-body] + fn: Optional[Callable[_P, _T]] = None, + first_available_dim: Optional[int] = None, +) -> Union[EnumMessenger, Callable[_P, _T]]: ... + + +@overload +def escape( + escape_fn: Callable[["Message"], bool], +) -> EscapeMessenger: ... + + +@overload +def escape( + fn: Callable[_P, _T], + escape_fn: Callable[["Message"], bool], +) -> Callable[_P, _T]: ... + + +@_make_handler(EscapeMessenger) +def escape( # type: ignore[empty-body] + fn: Callable[_P, _T], + escape_fn: Callable[["Message"], bool], +) -> Union[EscapeMessenger, Callable[_P, _T]]: ... + + +@overload +def equalize( + sites: Union[str, List[str]], + type: Optional[str], + keep_dist: Optional[bool], +) -> EqualizeMessenger: ... + + +@overload +def equalize( + fn: Callable[_P, _T], + sites: Union[str, List[str]], + type: Optional[str], + keep_dist: Optional[bool], +) -> Callable[_P, _T]: ... + + +@_make_handler(EqualizeMessenger) +def equalize( # type: ignore[empty-body] + fn: Callable[_P, _T], + sites: Union[str, List[str]], + type: Optional[str], + keep_dist: Optional[bool], +) -> Union[EqualizeMessenger, Callable[_P, _T]]: ... + + +@overload +def infer_config( + config_fn: Callable[["Message"], "InferDict"], +) -> InferConfigMessenger: ... + + +@overload +def infer_config( + fn: Callable[_P, _T], + config_fn: Callable[["Message"], "InferDict"], +) -> Callable[_P, _T]: ... + + +@_make_handler(InferConfigMessenger) +def infer_config( # type: ignore[empty-body] + fn: Callable[_P, _T], + config_fn: Callable[["Message"], "InferDict"], +) -> Union[InferConfigMessenger, Callable[_P, _T]]: ... + + +@overload +def lift( + prior: Union[Callable, "Distribution", Dict[str, Union["Distribution", Callable]]], +) -> LiftMessenger: ... + + +@overload +def lift( + fn: Callable[_P, _T], + prior: Union[Callable, "Distribution", Dict[str, Union["Distribution", Callable]]], +) -> Callable[_P, _T]: ... + + +@_make_handler(LiftMessenger) +def lift( # type: ignore[empty-body] + fn: Callable[_P, _T], + prior: Union[Callable, "Distribution", Dict[str, Union["Distribution", Callable]]], +) -> Union[LiftMessenger, Callable[_P, _T]]: ... + + +@overload +def mask( + mask: Union[bool, "torch.BoolTensor"], +) -> MaskMessenger: ... + + +@overload +def mask( + fn: Callable[_P, _T], + mask: Union[bool, "torch.BoolTensor"], +) -> Callable[_P, _T]: ... + + +@_make_handler(MaskMessenger) +def mask( # type: ignore[empty-body] + fn: Callable[_P, _T], + mask: Union[bool, "torch.BoolTensor"], +) -> Union[MaskMessenger, Callable[_P, _T]]: ... + + +@overload +def reparam( + config: Union[Dict[str, "Reparam"], Callable[["Message"], Optional["Reparam"]]], +) -> ReparamMessenger: ... + + +@overload +def reparam( + fn: Callable[_P, _T], + config: Union[Dict[str, "Reparam"], Callable[["Message"], Optional["Reparam"]]], +) -> ReparamHandler[_P, _T]: ... + + +@_make_handler(ReparamMessenger) +def reparam( # type: ignore[empty-body] + fn: Callable[_P, _T], + config: Union[Dict[str, "Reparam"], Callable[["Message"], Optional["Reparam"]]], +) -> Union[ReparamMessenger, ReparamHandler[_P, _T]]: ... + + +@overload +def replay( + fn: None = ..., + trace: Optional["Trace"] = None, + params: Optional[Dict[str, "torch.Tensor"]] = None, +) -> ReplayMessenger: ... + + +@overload +def replay( + fn: Callable[_P, _T], + trace: Optional["Trace"] = None, + params: Optional[Dict[str, "torch.Tensor"]] = None, +) -> Callable[_P, _T]: ... + + +@_make_handler(ReplayMessenger) +def replay( # type: ignore[empty-body] + fn: Optional[Callable[_P, _T]] = None, + trace: Optional["Trace"] = None, + params: Optional[Dict[str, "torch.Tensor"]] = None, +) -> Union[ReplayMessenger, Callable[_P, _T]]: ... + + +@overload +def scale( + scale: Union[float, "torch.Tensor"], +) -> ScaleMessenger: ... + + +@overload +def scale( + fn: Callable[_P, _T], + scale: Union[float, "torch.Tensor"], +) -> Callable[_P, _T]: ... + + +@_make_handler(ScaleMessenger) +def scale( # type: ignore[empty-body] + fn: Callable[_P, _T], + scale: Union[float, "torch.Tensor"], +) -> Union[ScaleMessenger, Callable[_P, _T]]: ... + + +@overload +def seed( + rng_seed: int, +) -> SeedMessenger: ... + + +@overload +def seed( + fn: Callable[_P, _T], + rng_seed: int, +) -> Callable[_P, _T]: ... + + +@_make_handler(SeedMessenger) +def seed( # type: ignore[empty-body] + fn: Callable[_P, _T], + rng_seed: int, +) -> Union[SeedMessenger, Callable[_P, _T]]: ... + + +@overload +def substitute( + data: Dict[str, "torch.Tensor"], +) -> SubstituteMessenger: ... + + +@overload +def substitute( + fn: Callable[_P, _T], + data: Dict[str, "torch.Tensor"], +) -> Callable[_P, _T]: ... + + +@_make_handler(SubstituteMessenger) +def substitute( # type: ignore[empty-body] + fn: Callable[_P, _T], + data: Dict[str, "torch.Tensor"], +) -> Union[SubstituteMessenger, Callable[_P, _T]]: ... + + +@overload +def trace( + fn: None = ..., + graph_type: Optional[Literal["flat", "dense"]] = None, + param_only: Optional[bool] = None, +) -> TraceMessenger: ... + + +@overload +def trace( + fn: Callable[_P, _T], + graph_type: Optional[Literal["flat", "dense"]] = None, + param_only: Optional[bool] = None, +) -> TraceHandler[_P, _T]: ... + + +@_make_handler(TraceMessenger) +def trace( # type: ignore[empty-body] + fn: Optional[Callable[_P, _T]] = None, + graph_type: Optional[Literal["flat", "dense"]] = None, + param_only: Optional[bool] = None, +) -> Union[TraceMessenger, TraceHandler[_P, _T]]: ... + + +@overload +def uncondition( + fn: None = ..., +) -> UnconditionMessenger: ... + + +@overload +def uncondition( + fn: Callable[_P, _T] = ..., +) -> Callable[_P, _T]: ... + + +@_make_handler(UnconditionMessenger) +def uncondition( # type: ignore[empty-body] + fn: Optional[Callable[_P, _T]] = None, +) -> Union[UnconditionMessenger, Callable[_P, _T]]: ... + + +######################################### +# Begin composite operations +######################################### + + +def queue( + fn=None, + queue=None, + max_tries=None, + extend_fn=None, + escape_fn=None, + num_samples=None, +): + """ + Used in sequential enumeration over discrete variables. + + Given a stochastic function and a queue, + return a return value from a complete trace in the queue. + + :param fn: a stochastic function (callable containing Pyro primitive calls) + :param queue: a queue data structure like multiprocessing.Queue to hold partial traces + :param max_tries: maximum number of attempts to compute a single complete trace + :param extend_fn: function (possibly stochastic) that takes a partial trace and a site, + and returns a list of extended traces + :param escape_fn: function (possibly stochastic) that takes a partial trace and a site, + and returns a boolean value to decide whether to exit + :param num_samples: optional number of extended traces for extend_fn to return + :returns: stochastic function decorated with poutine logic + """ + + if max_tries is None: + max_tries = int(1e6) + + if extend_fn is None: + extend_fn = util.enum_extend + + if escape_fn is None: + escape_fn = util.discrete_escape + + if num_samples is None: + num_samples = -1 + + def wrapper(wrapped): + def _fn(*args, **kwargs): + for i in range(max_tries): + assert ( + not queue.empty() + ), "trying to get() from an empty queue will deadlock" + + next_trace = queue.get() + try: + ftr = trace( + escape( + replay(wrapped, trace=next_trace), # noqa: F821 + escape_fn=functools.partial(escape_fn, next_trace), + ) + ) + return ftr(*args, **kwargs) + except NonlocalExit as site_container: + site_container.reset_stack() + for tr in extend_fn( + ftr.trace.copy(), site_container.site, num_samples=num_samples + ): + queue.put(tr) + + raise ValueError("max tries ({}) exceeded".format(str(max_tries))) + + return _fn + + return wrapper(fn) if fn is not None else wrapper + + +@overload +def markov( + fn: None = ..., + history: int = 1, + keep: bool = False, + dim: Optional[int] = None, + name: Optional[str] = None, +) -> MarkovMessenger: ... + + +@overload +def markov( + fn: Iterable[int] = ..., + history: int = 1, + keep: bool = False, + dim: Optional[int] = None, + name: Optional[str] = None, +) -> MarkovMessenger: ... + + +@overload +def markov( + fn: Callable[_P, _T] = ..., + history: int = 1, + keep: bool = False, + dim: Optional[int] = None, + name: Optional[str] = None, +) -> Callable[_P, _T]: ... + + +def markov( + fn: Optional[Union[Iterable[int], Callable[_P, _T]]] = None, + history: int = 1, + keep: bool = False, + dim: Optional[int] = None, + name: Optional[str] = None, +) -> Union[MarkovMessenger, Callable[_P, _T]]: + """ + Markov dependency declaration. + + This can be used in a variety of ways: + + - as a context manager + - as a decorator for recursive functions + - as an iterator for markov chains + + :param int history: The number of previous contexts visible from the + current context. Defaults to 1. If zero, this is similar to + :class:`pyro.plate`. + :param bool keep: If true, frames are replayable. This is important + when branching: if ``keep=True``, neighboring branches at the same + level can depend on each other; if ``keep=False``, neighboring branches + are independent (conditioned on their share" + :param int dim: An optional dimension to use for this independence index. + Interface stub, behavior not yet implemented. + :param str name: An optional unique name to help inference algorithms match + :func:`pyro.markov` sites between models and guides. + Interface stub, behavior not yet implemented. + """ + if fn is None: + # Used as a decorator with bound args + return MarkovMessenger(history=history, keep=keep, dim=dim, name=name) + if not callable(fn): + # Used as a generator + return MarkovMessenger( + history=history, keep=keep, dim=dim, name=name + ).generator(iterable=fn) + # Used as a decorator with bound args + return MarkovMessenger(history=history, keep=keep, dim=dim, name=name)(fn) diff --git a/pyro/source/pyro/poutine/indep_messenger.py b/pyro/source/pyro/poutine/indep_messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..19ad050b32bbe88fa01fdfe336c3a4a367a80886 --- /dev/null +++ b/pyro/source/pyro/poutine/indep_messenger.py @@ -0,0 +1,147 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from typing import Iterator, NamedTuple, Optional, Tuple, Union + +import torch +from typing_extensions import Self + +from pyro.poutine.messenger import Messenger +from pyro.poutine.runtime import _DIM_ALLOCATOR, Message +from pyro.util import ignore_jit_warnings + + +class CondIndepStackFrame(NamedTuple): + name: str + dim: Optional[int] + size: int + counter: int + full_size: Optional[int] = None + + @property + def vectorized(self) -> bool: + return self.dim is not None + + def _key(self) -> Tuple[str, Optional[int], int, int]: + size = self.size + with ignore_jit_warnings(["Converting a tensor to a Python number"]): + if isinstance(size, torch.Tensor): # type: ignore[unreachable] + size = size.item() # type: ignore[unreachable] + return self.name, self.dim, size, self.counter + + def __eq__(self, other: object) -> bool: + if not isinstance(other, CondIndepStackFrame): + return False + return self._key() == other._key() + + def __ne__(self, other: object) -> bool: + return not self.__eq__(other) + + def __hash__(self) -> int: + return hash(self._key()) + + def __str__(self) -> str: + return self.name + + +class IndepMessenger(Messenger): + """ + This messenger keeps track of stack of independence information declared by + nested ``plate`` contexts. This information is stored in a + ``cond_indep_stack`` at each sample/observe site for consumption by + ``TraceMessenger``. + + Example:: + + x_axis = IndepMessenger('outer', 320, dim=-1) + y_axis = IndepMessenger('inner', 200, dim=-2) + with x_axis: + x_noise = sample("x_noise", dist.Normal(loc, scale).expand_by([320])) + with y_axis: + y_noise = sample("y_noise", dist.Normal(loc, scale).expand_by([200, 1])) + with x_axis, y_axis: + xy_noise = sample("xy_noise", dist.Normal(loc, scale).expand_by([200, 320])) + + """ + + def __init__( + self, + name: str, + size: int, + dim: Optional[int] = None, + device: Optional[str] = None, + ) -> None: + if not torch._C._get_tracing_state() and size == 0: + raise ZeroDivisionError("size cannot be zero") + + super().__init__() + self._vectorized = None + if dim is not None: + self._vectorized = True + + self._indices: Optional[torch.Tensor] = None + self.name = name + self.dim = dim + self.size = size + self.device = device + self.counter = 0 + + def next_context(self) -> None: + """ + Increments the counter. + """ + self.counter += 1 + + def __enter__(self) -> Self: + if self._vectorized is not False: + self._vectorized = True + + if self._vectorized is True: + self.dim = _DIM_ALLOCATOR.allocate(self.name, self.dim) + + return super().__enter__() + + def __exit__(self, *args) -> None: + if self._vectorized is True: + assert self.dim is not None + _DIM_ALLOCATOR.free(self.name, self.dim) + return super().__exit__(*args) + + def __iter__(self) -> Iterator[Union[int, float]]: + if self._vectorized is True or self.dim is not None: + raise ValueError( + "cannot use plate {} as both vectorized and non-vectorized" + "independence context".format(self.name) + ) + + self._vectorized = False + self.dim = None + with ignore_jit_warnings([("Iterating over a tensor", RuntimeWarning)]): + for i in self.indices: + self.next_context() + with self: + if isinstance(i, (int, float)): + yield i + elif isinstance(i, torch.Tensor): + yield i.item() + else: + raise ValueError( + f"Expected int, float or torch.Tensor, but got {type(i)}" + ) + + def _reset(self) -> None: + if self._vectorized: + assert self.dim is not None + _DIM_ALLOCATOR.free(self.name, self.dim) + self._vectorized = None + self.counter = 0 + + @property + def indices(self) -> torch.Tensor: + if self._indices is None: + self._indices = torch.arange(self.size, dtype=torch.long).to(self.device) + return self._indices + + def _process_message(self, msg: Message) -> None: + frame = CondIndepStackFrame(self.name, self.dim, self.size, self.counter) + msg["cond_indep_stack"] = (frame,) + msg["cond_indep_stack"] diff --git a/pyro/source/pyro/poutine/infer_config_messenger.py b/pyro/source/pyro/poutine/infer_config_messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..362ae2cf86adffd62515f01d2fc6633155055020 --- /dev/null +++ b/pyro/source/pyro/poutine/infer_config_messenger.py @@ -0,0 +1,57 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from typing import TYPE_CHECKING, Callable + +from pyro.poutine.messenger import Messenger + +if TYPE_CHECKING: + from pyro.poutine.runtime import InferDict, Message + + +class InferConfigMessenger(Messenger): + """ + Given a callable `fn` that contains Pyro primitive calls + and a callable `config_fn` taking a trace site and returning a dictionary, + updates the value of the infer kwarg at a sample site to config_fn(site). + + :param fn: a stochastic function (callable containing Pyro primitive calls) + :param config_fn: a callable taking a site and returning an infer dict + :returns: stochastic function decorated with :class:`~pyro.poutine.infer_config_messenger.InferConfigMessenger` + """ + + def __init__(self, config_fn: Callable[["Message"], "InferDict"]) -> None: + """ + :param config_fn: a callable taking a site and returning an infer dict + + Constructor. Doesn't do much, just stores the stochastic function + and the config_fn. + """ + super().__init__() + self.config_fn = config_fn + + def _pyro_sample(self, msg: "Message") -> None: + """ + :param msg: current message at a trace site. + + If self.config_fn is not None, calls self.config_fn on msg + and stores the result in msg["infer"]. + + Otherwise, implements default sampling behavior + with no additional effects. + """ + assert msg["infer"] is not None + msg["infer"].update(self.config_fn(msg)) + + def _pyro_param(self, msg: "Message") -> None: + """ + :param msg: current message at a trace site. + + If self.config_fn is not None, calls self.config_fn on msg + and stores the result in msg["infer"]. + + Otherwise, implements default param behavior + with no additional effects. + """ + assert msg["infer"] is not None + msg["infer"].update(self.config_fn(msg)) diff --git a/pyro/source/pyro/poutine/lift_messenger.py b/pyro/source/pyro/poutine/lift_messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..f40de4d3817ff2c724810aec28c34a2863e5a598 --- /dev/null +++ b/pyro/source/pyro/poutine/lift_messenger.py @@ -0,0 +1,134 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import warnings +from typing import TYPE_CHECKING, Callable, Dict, Set, Union + +from typing_extensions import Self + +from pyro import params +from pyro.distributions.distribution import Distribution +from pyro.poutine.messenger import Messenger +from pyro.poutine.util import is_validation_enabled + +if TYPE_CHECKING: + from pyro.poutine.runtime import Message + + +class LiftMessenger(Messenger): + """ + Given a stochastic function with param calls and a prior distribution, + create a stochastic function where all param calls are replaced by sampling from prior. + Prior should be a callable or a dict of names to callables. + + Consider the following Pyro program: + + >>> def model(x): + ... s = pyro.param("s", torch.tensor(0.5)) + ... z = pyro.sample("z", dist.Normal(x, s)) + ... return z ** 2 + >>> lifted_model = pyro.poutine.lift(model, prior={"s": dist.Exponential(0.3)}) + + ``lift`` makes ``param`` statements behave like ``sample`` statements + using the distributions in ``prior``. In this example, site `s` will now behave + as if it was replaced with ``s = pyro.sample("s", dist.Exponential(0.3))``: + + >>> tr = pyro.poutine.trace(lifted_model).get_trace(0.0) + >>> tr.nodes["s"]["type"] == "sample" + True + >>> tr2 = pyro.poutine.trace(lifted_model).get_trace(0.0) + >>> bool((tr2.nodes["s"]["value"] == tr.nodes["s"]["value"]).all()) + False + + :param fn: function whose parameters will be lifted to random values + :param prior: prior function in the form of a Distribution or a dict of stochastic fns + :returns: ``fn`` decorated with a :class:`~pyro.poutine.lift_messenger.LiftMessenger` + """ + + def __init__( + self, + prior: Union[Callable, Distribution, Dict[str, Union[Distribution, Callable]]], + ) -> None: + """ + :param prior: prior used to lift parameters. Prior can be of type + dict, pyro.distributions, or a python stochastic fn + + Constructor + """ + super().__init__() + self.prior = prior + self._samples_cache: Dict[str, "Message"] = {} + + def __enter__(self) -> Self: + self._samples_cache = {} + if is_validation_enabled() and isinstance(self.prior, dict): + self._param_hits: Set[str] = set() + self._param_misses: Set[str] = set() + return super().__enter__() + + def __exit__(self, *args, **kwargs) -> None: + self._samples_cache = {} + if is_validation_enabled() and isinstance(self.prior, dict): + extra = set(self.prior) - self._param_hits + if extra: + warnings.warn( + "pyro.module prior did not find params ['{}']. " + "Did you instead mean one of ['{}']?".format( + "', '".join(extra), "', '".join(self._param_misses) + ) + ) + return super().__exit__(*args, **kwargs) + + def _pyro_sample(self, msg: "Message") -> None: + return None + + def _pyro_param(self, msg: "Message") -> None: + """ + Overrides the `pyro.param` call with samples sampled from the + distribution specified in the prior. The prior can be a + pyro.distributions object or a dict of distributions keyed + on the param names. If the param name does not match the + name the keys in the prior, that param name is unchanged. + """ + assert msg["name"] is not None + name = msg["name"] + param_name = params.user_param_name(name) + if isinstance(self.prior, dict): + # prior is a dict of distributions + if param_name in self.prior.keys(): + msg["fn"] = self.prior[param_name] + msg["args"] = msg["args"][1:] + if isinstance(msg["fn"], Distribution): + msg["args"] = () + msg["kwargs"] = {} + msg["infer"] = {} + if is_validation_enabled(): + self._param_hits.add(param_name) + else: + if is_validation_enabled(): + self._param_misses.add(param_name) + return None + elif isinstance(self.prior, Distribution): + # prior is a distribution + msg["fn"] = self.prior + msg["args"] = () + msg["kwargs"] = {} + msg["infer"] = {} + elif callable(self.prior): + # prior is a stochastic fn. block sample + msg["stop"] = True + msg["fn"] = self.prior + msg["args"] = msg["args"][1:] + else: + raise TypeError("unreachable") + msg["type"] = "sample" + if name in self._samples_cache: + # Multiple pyro.param statements with the same + # name. Block the site and fix the value. + msg["value"] = self._samples_cache[name]["value"] + msg["is_observed"] = True + msg["stop"] = True + else: + self._samples_cache[name] = msg + msg["is_observed"] = False + return self._pyro_sample(msg) diff --git a/pyro/source/pyro/poutine/markov_messenger.py b/pyro/source/pyro/poutine/markov_messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..6c41594fb96e1d9bb49b234e43c0670c4dd1426f --- /dev/null +++ b/pyro/source/pyro/poutine/markov_messenger.py @@ -0,0 +1,101 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from collections import Counter +from contextlib import ExitStack +from typing import TYPE_CHECKING, Iterable, Iterator, List, Optional, Set + +from typing_extensions import Self + +from pyro.poutine.reentrant_messenger import ReentrantMessenger + +if TYPE_CHECKING: + from pyro.poutine.runtime import Message + + +class MarkovMessenger(ReentrantMessenger): + """ + Markov dependency declaration. + + This is a statistical equivalent of a memory management arena. + + :param int history: The number of previous contexts visible from the + current context. Defaults to 1. If zero, this is similar to + :class:`pyro.plate`. + :param bool keep: If true, frames are replayable. This is important + when branching: if ``keep=True``, neighboring branches at the same + level can depend on each other; if ``keep=False``, neighboring branches + are independent (conditioned on their shared ancestors). + :param int dim: An optional dimension to use for this independence index. + Interface stub, behavior not yet implemented. + :param str name: An optional unique name to help inference algorithms match + :func:`pyro.markov` sites between models and guides. + Interface stub, behavior not yet implemented. + """ + + def __init__( + self, + history: int = 1, + keep: bool = False, + dim: Optional[int] = None, + name: Optional[str] = None, + ) -> None: + assert history >= 0 + self.history = history + self.keep = keep + self.dim = dim + self.name = name + if dim is not None: + raise NotImplementedError( + "vectorized markov not yet implemented, try setting dim to None" + ) + if name is not None: + raise NotImplementedError( + "vectorized markov not yet implemented, try setting name to None" + ) + self._iterable: Optional[Iterable[int]] = None + self._pos = -1 + self._stack: List[Set[str]] = [] + super().__init__() + + def generator(self, iterable: Iterable[int]) -> Self: + self._iterable = iterable + return self + + def __iter__(self) -> Iterator[int]: + with ExitStack() as stack: + assert self._iterable is not None + for value in self._iterable: + stack.enter_context(self) + yield value + + def __enter__(self) -> Self: + self._pos += 1 + if len(self._stack) <= self._pos: + self._stack.append(set()) + return super().__enter__() + + def __exit__(self, *args, **kwargs) -> None: + if not self.keep: + self._stack.pop() + self._pos -= 1 + return super().__exit__(*args, **kwargs) + + def _pyro_sample(self, msg: "Message") -> None: + if msg["done"] or type(msg["fn"]).__name__ == "_Subsample": + return + + # We use a Counter rather than a set here so that sites can correctly + # go out of scope when any one of their markov contexts exits. + # This accounting can be done by users of these fields, + # e.g. EnumMessenger. + assert msg["name"] is not None + assert msg["infer"] is not None + infer = msg["infer"] + scope = infer.setdefault( + "_markov_scope", Counter() + ) # site name -> markov depth + for pos in range(max(0, self._pos - self.history), self._pos + 1): + scope.update(self._stack[pos]) + infer["_markov_depth"] = 1 + infer.get("_markov_depth", 0) + self._stack[self._pos].add(msg["name"]) diff --git a/pyro/source/pyro/poutine/mask_messenger.py b/pyro/source/pyro/poutine/mask_messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..132acf3b33d78fd9c5e2306629b8fc9ea683396a --- /dev/null +++ b/pyro/source/pyro/poutine/mask_messenger.py @@ -0,0 +1,40 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from typing import TYPE_CHECKING, Union + +import torch + +from pyro.poutine.messenger import Messenger + +if TYPE_CHECKING: + from pyro.poutine.runtime import Message + + +class MaskMessenger(Messenger): + """ + Given a stochastic function with some batched sample statements and + masking tensor, mask out some of the sample statements elementwise. + + :param fn: a stochastic function (callable containing Pyro primitive calls) + :param torch.BoolTensor mask: a ``{0,1}``-valued masking tensor + (1 includes a site, 0 excludes a site) + :returns: stochastic function decorated with a :class:`~pyro.poutine.scale_messenger.MaskMessenger` + """ + + def __init__(self, mask: Union[bool, torch.BoolTensor]) -> None: + if isinstance(mask, torch.Tensor): + if mask.dtype != torch.bool: + raise ValueError( + "Expected mask to be a BoolTensor but got {}".format(type(mask)) + ) + + elif mask not in (True, False): + raise ValueError( + "Expected mask to be a boolean but got {}".format(type(mask)) + ) + super().__init__() + self.mask = mask + + def _process_message(self, msg: "Message") -> None: + msg["mask"] = self.mask if msg["mask"] is None else msg["mask"] & self.mask diff --git a/pyro/source/pyro/poutine/messenger.py b/pyro/source/pyro/poutine/messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..58c62ceba0fa13b74786adcbba0f24eb15352717 --- /dev/null +++ b/pyro/source/pyro/poutine/messenger.py @@ -0,0 +1,287 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from contextlib import contextmanager +from functools import partial +from types import TracebackType +from typing import ( + Any, + Callable, + Iterator, + List, + Optional, + Type, + TypeVar, +) + +from typing_extensions import ParamSpec, Self + +from pyro.poutine.runtime import _PYRO_STACK, Message + +_P = ParamSpec("_P") +_T = TypeVar("_T") + + +def _context_wrap( + context: "Messenger", + fn: Callable, + *args: Any, + **kwargs: Any, +) -> Any: + with context: + return fn(*args, **kwargs) + + +class _bound_partial(partial): + """ + Converts a (possibly) bound method into a partial function to + support class methods as arguments to handlers. + """ + + # Use '__slots__' for func to avoid the issue + # `_bound_partial(_bound_partial(f)).func is f` + # in Python 3.10. + __slots__ = "func" + + def __init__(self, func): + self.func = func + + def __get__( + self, + instance: Optional[object], + owner: Optional[Type[object]] = None, + ) -> object: + if instance is None: + return self + return partial(self.func, instance) + + +def unwrap(fn: Callable) -> Callable: + """ + Recursively unwraps poutines. + """ + while True: + if isinstance(fn, _bound_partial): + fn = fn.func + continue + if isinstance(fn, partial) and len(fn.args) >= 2: + fn = fn.args[1] # extract from partial(handler, fn) + continue + return fn + + +class Messenger: + """ + Context manager class that modifies behavior + and adds side effects to stochastic functions + i.e. callables containing Pyro primitive statements. + + This is the base Messenger class. + It implements the default behavior for all Pyro primitives, + so that the joint distribution induced by a stochastic function fn + is identical to the joint distribution induced by ``Messenger()(fn)``. + + Class of transformers for messages passed during inference. + Most inference operations are implemented in subclasses of this. + """ + + def __call__(self, fn: Callable[_P, _T]) -> Callable[_P, _T]: + if not callable(fn): + raise ValueError( + f"{fn!r} is not callable, did you mean to pass it as a keyword arg?" + ) + wraps = _bound_partial(partial(_context_wrap, self, fn)) + return wraps + + def __enter__(self) -> Self: + """ + :returns: self + :rtype: pyro.poutine.Messenger + + Installs this messenger at the bottom of the Pyro stack. + + Can be overloaded to add any additional per-call setup functionality, + but the derived class must always push itself onto the stack, usually + by calling super().__enter__(). + + Derived versions cannot be overridden to take arguments + and must always return self. + """ + if self not in _PYRO_STACK: + # if this poutine is not already installed, + # put it on the bottom of the stack. + _PYRO_STACK.append(self) + + # necessary to return self because the return value of __enter__ + # is bound to VAR in with EXPR as VAR. + return self + else: + # note: currently we raise an error if trying to install a poutine twice. + # However, this isn't strictly necessary, + # and blocks recursive poutine execution patterns like + # like calling self.__call__ inside of self.__call__ + # or with Handler(...) as p: with p: + # It's hard to imagine use cases for this pattern, + # but it could in principle be enabled... + raise ValueError("cannot install a Messenger instance twice") + + def __exit__( + self, + exc_type: Optional[Type[BaseException]], + exc_value: Optional[BaseException], + traceback: Optional[TracebackType], + ) -> None: + """ + :param exc_type: exception type, e.g. ValueError + :param exc_value: exception instance? + :param traceback: traceback for exception handling + :returns: None + :rtype: None + + Removes this messenger from the bottom of the Pyro stack. + If an exception is raised, removes this messenger and everything below it. + Always called after every execution of self.fn via self.__call__. + + Can be overloaded by derived classes to add any other per-call teardown functionality, + but the stack must always be popped by the derived class, + usually by calling super().__exit__(*args). + + Derived versions cannot be overridden to take other arguments, + and must always return None or False. + + The arguments are the mandatory arguments used by a with statement. + Users should never be specifying these. + They are all None unless the body of the with statement raised an exception. + """ + if exc_type is None: # callee or enclosed block returned successfully + # if the callee or enclosed block returned successfully, + # this poutine should be on the bottom of the stack. + # If so, remove it from the stack. + # if not, raise a ValueError because something really weird happened. + if _PYRO_STACK[-1] == self: + _PYRO_STACK.pop() + else: + # should never get here, but just in case... + raise ValueError("This Messenger is not on the bottom of the stack") + else: # the wrapped function or block raised an exception + # poutine exception handling: + # when the callee or enclosed block raises an exception, + # find this poutine's position in the stack, + # then remove it and everything below it in the stack. + if self in _PYRO_STACK: + loc = _PYRO_STACK.index(self) + for i in range(loc, len(_PYRO_STACK)): + _PYRO_STACK.pop() + + def _reset(self) -> None: + pass + + def _process_message(self, msg: Message) -> None: + """ + :param msg: current message at a trace site + :returns: None + + Process the message by calling appropriate method of itself based + on message type. The message is updated in place. + """ + method = getattr(self, f"_pyro_{msg['type']}", None) + if method is not None: + method(msg) + + def _postprocess_message(self, msg: Message) -> None: + method = getattr(self, f"_pyro_post_{msg['type']}", None) + if method is not None: + method(msg) + + @classmethod + def register( + cls, + fn: Optional[Callable] = None, + type: Optional[str] = None, + post: Optional[bool] = None, + ) -> Callable: + """ + :param fn: function implementing operation + :param str type: name of the operation + (also passed to :func:`~pyro.poutine.runtime.effectful`) + :param bool post: if `True`, use this operation as postprocess + + Dynamically add operations to an effect. + Useful for generating wrappers for libraries. + + Example:: + + @SomeMessengerClass.register + def some_function(msg) + ...do_something... + return msg + + """ + if fn is None: + return lambda x: cls.register(x, type=type, post=post) + + if type is None: + raise ValueError("An operation type name must be provided") + + setattr(cls, "_pyro_" + ("post_" if post else "") + type, staticmethod(fn)) + return fn + + @classmethod + def unregister( + cls, + fn: Optional[Callable] = None, + type: Optional[str] = None, + ) -> Optional[Callable]: + """ + :param fn: function implementing operation + :param str type: name of the operation + (also passed to :func:`~pyro.poutine.runtime.effectful`) + + Dynamically remove operations from an effect. + Useful for removing wrappers from libraries. + + Example:: + + SomeMessengerClass.unregister(some_function, "name") + """ + if type is None: + raise ValueError("An operation type name must be provided") + + try: + delattr(cls, "_pyro_post_" + type) + except AttributeError: + pass + + try: + delattr(cls, "_pyro_" + type) + except AttributeError: + pass + + return fn + + +@contextmanager +def block_messengers( + predicate: Callable[[Messenger], bool], +) -> Iterator[List[Messenger]]: + """ + EXPERIMENTAL Context manager to temporarily remove matching messengers from + the _PYRO_STACK. Note this does not call the ``.__exit__()`` and + ``.__enter__()`` methods. + + This is useful to selectively block enclosing handlers. + + :param callable predicate: A predicate mapping messenger instance to boolean. + This mutes all messengers ``m`` for which ``bool(predicate(m)) is True``. + :yields: A list of matched messengers that are blocked. + """ + blocked = {} + try: + for i, messenger in enumerate(_PYRO_STACK): + if predicate(messenger): + blocked[i] = messenger + _PYRO_STACK[i] = Messenger() # trivial messenger + yield list(blocked.values()) + finally: + for i, messenger in blocked.items(): + _PYRO_STACK[i] = messenger diff --git a/pyro/source/pyro/poutine/plate_messenger.py b/pyro/source/pyro/poutine/plate_messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..e1484324d6c23ed2bbab90e44883c7662b8a5ae9 --- /dev/null +++ b/pyro/source/pyro/poutine/plate_messenger.py @@ -0,0 +1,90 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from contextlib import contextmanager +from typing import TYPE_CHECKING, Iterator, Optional + +from pyro.poutine.broadcast_messenger import BroadcastMessenger +from pyro.poutine.messenger import Messenger, block_messengers +from pyro.poutine.subsample_messenger import SubsampleMessenger + +if TYPE_CHECKING: + import torch + + from pyro.poutine.runtime import Message + + +class PlateMessenger(SubsampleMessenger): + """ + Swiss army knife of broadcasting amazingness: + combines shape inference, independence annotation, and subsampling + """ + + def _process_message(self, msg: "Message") -> None: + super()._process_message(msg) + BroadcastMessenger._pyro_sample(msg) + + def __enter__(self) -> Optional["torch.Tensor"]: # type: ignore[override] + super().__enter__() + if self._vectorized and self._indices is not None: + return self.indices + return None + + +@contextmanager +def block_plate( + name: Optional[str] = None, dim: Optional[int] = None, *, strict: bool = True +) -> Iterator[None]: + """ + EXPERIMENTAL Context manager to temporarily block a single enclosing plate. + + This is useful for sampling auxiliary variables or lazily sampling global + variables that are needed in a plated context. For example the following + models are equivalent: + + Example:: + + def model_1(data): + loc = pyro.sample("loc", dist.Normal(0, 1)) + with pyro.plate("data", len(data)): + with block_plate("data"): + scale = pyro.sample("scale", dist.LogNormal(0, 1)) + pyro.sample("x", dist.Normal(loc, scale)) + + def model_2(data): + loc = pyro.sample("loc", dist.Normal(0, 1)) + scale = pyro.sample("scale", dist.LogNormal(0, 1)) + with pyro.plate("data", len(data)): + pyro.sample("x", dist.Normal(loc, scale)) + + :param str name: Optional name of plate to match. + :param int dim: Optional dim of plate to match. Must be negative. + :param bool strict: Whether to error if no matching plate is found. + Defaults to True. + :raises: ValueError if no enclosing plate was found and ``strict=True``. + """ + if (name is not None) == (dim is not None): + raise ValueError("Exactly one of name,dim must be specified") + if name is not None: + assert isinstance(name, str) + if dim is not None: + assert isinstance(dim, int) + assert dim < 0 + + def predicate(messenger: Messenger) -> bool: + if not isinstance(messenger, PlateMessenger): + return False + if name is not None: + return messenger.name == name + if dim is not None: + return messenger.dim == dim + raise ValueError("Unreachable") + + with block_messengers(predicate) as matches: + if strict and len(matches) != 1: + raise ValueError( + f"block_plate matched {len(matches)} messengers. " + "Try either removing the block_plate or " + "setting strict=False." + ) + yield diff --git a/pyro/source/pyro/poutine/reentrant_messenger.py b/pyro/source/pyro/poutine/reentrant_messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..90f8a3c942b2ef25baa9e91bb44f10f9b5603824 --- /dev/null +++ b/pyro/source/pyro/poutine/reentrant_messenger.py @@ -0,0 +1,38 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import functools +from types import TracebackType +from typing import Callable, Optional, Type, TypeVar + +from typing_extensions import ParamSpec, Self + +from pyro.poutine.messenger import Messenger + +_P = ParamSpec("_P") +_T = TypeVar("_T") + + +class ReentrantMessenger(Messenger): + def __init__(self) -> None: + self._ref_count = 0 + super().__init__() + + def __call__(self, fn: Callable[_P, _T]) -> Callable[_P, _T]: + return functools.wraps(fn)(super().__call__(fn)) + + def __enter__(self) -> Self: + self._ref_count += 1 + if self._ref_count == 1: + super().__enter__() + return self + + def __exit__( + self, + exc_type: Optional[Type[BaseException]], + exc_value: Optional[BaseException], + traceback: Optional[TracebackType], + ) -> None: + self._ref_count -= 1 + if self._ref_count == 0: + super().__exit__(exc_type, exc_value, traceback) diff --git a/pyro/source/pyro/poutine/reparam_messenger.py b/pyro/source/pyro/poutine/reparam_messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..397be33f943a7c20efaa9145c85055ac74fa0f1c --- /dev/null +++ b/pyro/source/pyro/poutine/reparam_messenger.py @@ -0,0 +1,165 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import warnings +from typing import ( + TYPE_CHECKING, + Callable, + Dict, + Generic, + List, + Optional, + TypeVar, + Union, +) + +import torch +from typing_extensions import ParamSpec + +from pyro.poutine.messenger import Messenger +from pyro.poutine.runtime import effectful + +if TYPE_CHECKING: + from pyro.distributions.torch_distribution import TorchDistributionMixin + from pyro.infer.reparam.reparam import Reparam + from pyro.poutine.runtime import Message + +_P = ParamSpec("_P") +_T = TypeVar("_T") + + +@effectful(type="get_init_messengers") +def _get_init_messengers() -> List[Messenger]: + return [] + + +class ReparamMessenger(Messenger): + """ + Reparametrizes each affected sample site into one or more auxiliary sample + sites followed by a deterministic transformation [1]. + + To specify reparameterizers, pass a ``config`` dict or callable to the + constructor. See the :mod:`pyro.infer.reparam` module for available + reparameterizers. + + Note some reparameterizers can examine the ``*args,**kwargs`` inputs of + functions they affect; these reparameterizers require using + ``poutine.reparam`` as a decorator rather than as a context manager. + + [1] Maria I. Gorinova, Dave Moore, Matthew D. Hoffman (2019) + "Automatic Reparameterisation of Probabilistic Programs" + https://arxiv.org/pdf/1906.03028.pdf + + :param config: Configuration, either a dict mapping site name to + :class:`~pyro.infer.reparam.reparam.Reparameterizer` , or a function + mapping site to :class:`~pyro.infer.reparam.reparam.Reparam` or + None. See :mod:`pyro.infer.reparam.strategies` for built-in + configuration strategies. + :type config: dict or callable + """ + + def __init__( + self, + config: Union[Dict[str, "Reparam"], Callable[["Message"], Optional["Reparam"]]], + ) -> None: + super().__init__() + assert isinstance(config, dict) or callable(config) + self.config = config + self._args_kwargs = None + + def __call__(self, fn: Callable[_P, _T]) -> "ReparamHandler[_P, _T]": + return ReparamHandler(self, fn) + + def _pyro_sample(self, msg: "Message") -> None: + if type(msg["fn"]).__name__ == "_Subsample": + return + assert msg["name"] is not None + if TYPE_CHECKING: + assert isinstance(msg["fn"], TorchDistributionMixin) + if isinstance(self.config, dict): + reparam = self.config.get(msg["name"]) + else: + reparam = self.config(msg) + if reparam is None: + return + + # See https://github.com/pyro-ppl/pyro/issues/2878 + # This is a tricky hack to apply messengers in an order other than the + # standard _PYRO_STACK order. Our goal is to allow (model, initializer) + # pairs to be reparametrized as a unit. The problem is that messengers + # are typically applied in the order + # + # InitMessenger(init_to_value(...))(ReparamMessenger(...)(model)) + # + # so that original model sites are reparametrized by the time they are + # seen by init_to_value(). To work around this we allow + # ReparamMessenger to apply enclosing InitMessengers early, simulating + # a priority system for messengers (indeed we might consider + # prioritizing messengers). Note that the enclosing InitMessenger will be + # called a second time, after ReparamMessenger, but that is ok because + # InitMessenger does not overwrite values. + # + # To get this same logic to work for ConditionMessenger or + # ReplayMessenger we would need to ensure those messengers can + # similarly be safely applied twice, with the second application + # avoiding overwriting the original application. + for m in _get_init_messengers(): + m._process_message(msg) + + # Pass args_kwargs to the reparam via a side channel. + reparam.args_kwargs = self._args_kwargs # type: ignore[attr-defined] + try: + new_msg = reparam.apply( + { + "name": msg["name"], + "fn": msg["fn"], + "value": msg["value"], + "is_observed": msg["is_observed"], + } + ) + finally: + reparam.args_kwargs = None # type: ignore[attr-defined] + + if new_msg["value"] is not None: + # Validate while the original msg["fn"] is known. + if getattr(msg["fn"], "_validation_enabled", False): + msg["fn"]._validate_sample(new_msg["value"]) + + if msg["value"] is not None and msg["value"] is not new_msg["value"]: + # Check that overwritten initialization preserves shape. + if not torch._C._get_tracing_state(): + assert new_msg["value"].shape == msg["value"].shape + + # Warn if a custom init method is overwritten by another init method. + if getattr(msg["value"], "_pyro_custom_init", True): + warnings.warn( + f"At pyro.sample({repr(msg['name'])},...), " + f"{type(reparam).__name__} " + "does not commute with initialization; " + "falling back to default initialization.", + RuntimeWarning, + ) + + msg["fn"] = new_msg["fn"] + msg["value"] = new_msg["value"] + msg["is_observed"] = new_msg["is_observed"] + + +class ReparamHandler(Generic[_P, _T]): + """ + Reparameterization poutine. + """ + + def __init__(self, msngr, fn: Callable[_P, _T]) -> None: + self.msngr = msngr + self.fn = fn + super().__init__() + + def __call__(self, *args: _P.args, **kwargs: _P.kwargs) -> _T: + # This saves args,kwargs for optional use by reparameterizers. + self.msngr._args_kwargs = args, kwargs + try: + with self.msngr: + return self.fn(*args, **kwargs) + finally: + self.msngr._args_kwargs = None diff --git a/pyro/source/pyro/poutine/replay_messenger.py b/pyro/source/pyro/poutine/replay_messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..9c2649052840efec175531e06a50e69d8e79212c --- /dev/null +++ b/pyro/source/pyro/poutine/replay_messenger.py @@ -0,0 +1,90 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from typing import TYPE_CHECKING, Dict, Optional + +from pyro.poutine.messenger import Messenger + +if TYPE_CHECKING: + import torch + + from pyro.poutine.runtime import Message + from pyro.poutine.trace_struct import Trace + + +class ReplayMessenger(Messenger): + """ + Given a callable that contains Pyro primitive calls, + return a callable that runs the original, reusing the values at sites in trace + at those sites in the new trace + + Consider the following Pyro program: + + >>> def model(x): + ... s = pyro.param("s", torch.tensor(0.5)) + ... z = pyro.sample("z", dist.Normal(x, s)) + ... return z ** 2 + + ``replay`` makes ``sample`` statements behave as if they had sampled the values + at the corresponding sites in the trace: + + >>> old_trace = pyro.poutine.trace(model).get_trace(1.0) + >>> replayed_model = pyro.poutine.replay(model, trace=old_trace) + >>> bool(replayed_model(0.0) == old_trace.nodes["_RETURN"]["value"]) + True + + :param fn: a stochastic function (callable containing Pyro primitive calls) + :param trace: a :class:`~pyro.poutine.Trace` data structure to replay against + :param params: dict of names of param sites and constrained values + in fn to replay against + :returns: a stochastic function decorated with a :class:`~pyro.poutine.replay_messenger.ReplayMessenger` + """ + + def __init__( + self, + trace: Optional["Trace"] = None, + params: Optional[Dict[str, "torch.Tensor"]] = None, + ) -> None: + """ + :param trace: a trace whose values should be reused + + Constructor. + Stores trace in an attribute. + """ + super().__init__() + if trace is None and params is None: + raise ValueError("must provide trace or params to replay against") + self.trace = trace + self.params = params + + def _pyro_sample(self, msg: "Message") -> None: + """ + :param msg: current message at a trace site. + + At a sample site that appears in self.trace, + returns the value from self.trace instead of sampling + from the stochastic function at the site. + + At a sample site that does not appear in self.trace, + reverts to default Messenger._pyro_sample behavior with no additional side effects. + """ + assert msg["name"] is not None + name = msg["name"] + if self.trace is not None and name in self.trace: + guide_msg = self.trace.nodes[name] + if msg["is_observed"]: + return None + if guide_msg["type"] != "sample" or guide_msg["is_observed"]: + raise RuntimeError("site {} must be sampled in trace".format(name)) + msg["done"] = True + msg["value"] = guide_msg["value"] + msg["infer"] = guide_msg["infer"] + + def _pyro_param(self, msg: "Message") -> None: + name = msg["name"] + if self.params is not None and name in self.params: + assert hasattr( + self.params[name], "unconstrained" + ), "param {} must be constrained value".format(name) + msg["done"] = True + msg["value"] = self.params[name] diff --git a/pyro/source/pyro/poutine/runtime.py b/pyro/source/pyro/poutine/runtime.py new file mode 100644 index 0000000000000000000000000000000000000000..6263ecc2ddd618726118a98ac4d3785417d3b7b6 --- /dev/null +++ b/pyro/source/pyro/poutine/runtime.py @@ -0,0 +1,528 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import functools +from typing import ( + TYPE_CHECKING, + Callable, + Dict, + Generic, + List, + Optional, + Set, + Tuple, + TypeVar, + Union, + overload, +) + +import torch +from typing_extensions import Literal, ParamSpec, TypedDict + +from pyro.params.param_store import ( # noqa: F401 + _MODULE_NAMESPACE_DIVIDER, + ParamStoreDict, +) + +_P = ParamSpec("_P") +_T = TypeVar("_T") + +if TYPE_CHECKING: + from collections import Counter + + from pyro.distributions.score_parts import ScoreParts + from pyro.distributions.torch_distribution import TorchDistributionMixin + from pyro.poutine.indep_messenger import CondIndepStackFrame + from pyro.poutine.messenger import Messenger + +# the global pyro stack +_PYRO_STACK: List["Messenger"] = [] + +# the global ParamStore +_PYRO_PARAM_STORE = ParamStoreDict() + + +class InferDict(TypedDict, total=False): + """ + A dictionary that contains information about inference. + + This can be used to configure per-site inference strategies, e.g.:: + + pyro.sample( + "x", + dist.Bernoulli(0.5), + infer={"enumerate": "parallel"}, + ) + + Keys: + enumerate (str): + If one of the strings "sequential" or "parallel", enables + enumeration. Parallel enumeration is generally faster but requires + broadcasting-safe operations and static structure. + expand (bool): + Whether to expand the distribution during enumeration. Defaults to + False if missing. + is_auxiliary (bool): + Whether the sample site is auxiliary, e.g. for use in guides that + deterministically transform auxiliary variables. Defaults to False + if missing. + is_observed (bool): + Whether the sample site is observed (i.e. not latent). Defaults to + False if missing. + num_samples (int): + The number of samples to draw. Defaults to 1 if missing. + obs (optional torch.Tensor): + The observed value, or None for latent variables. Defaults to None + if missing. + prior (optional torch.distributions.Distribution): + (internal) For use in GuideMessenger to store the model's prior + distribution (conditioned on upstream sites). + tmc (str): + Whether to use the diagonal or mixture approximation for Tensor + Monte Carlo in TraceTMC_ELBO. + was_observed (bool): + (internal) Whether the sample site was originally observed, in the + context of inference via Reweighted Wake Sleep or Compiled + Sequential Importance Sampling. + """ + + enumerate: Literal["sequential", "parallel"] + expand: bool + is_auxiliary: bool + is_observed: bool + num_samples: int + obs: Optional[torch.Tensor] + prior: "TorchDistributionMixin" + tmc: Literal["diagonal", "mixture"] + was_observed: bool + _deterministic: bool + _dim_to_symbol: Dict[int, str] + _do_not_trace: bool + _enumerate_symbol: str + _markov_scope: "Counter" + _enumerate_dim: int + _dim_to_id: Dict[int, int] + _markov_depth: int + + +class Message(TypedDict, Generic[_P, _T], total=False): + """ + Pyro's internal message type for effect handling. + + Messages are stored in trace objects, e.g.:: + + trace.nodes["my_site_name"] # This is a Message. + + Keys: + type (str): + The message type, typically one of the strings "sample", "param", + "plate", or "markov", but possibly custom. + name (str): + The site name, typically naming a sample or parameter. + fn (callable): + The distribution or function used to generate the sample. + is_observed (bool): + A flag to indicate whether the value is observed. + args (tuple): + Positional arguments to the distribution or function. + kwargs (dict): + Keyword arguments to the distribution or function. + value (torch.Tensor): + The value of the sample (either observed or sampled). + scale (torch.Tensor): + A scaling factor for the log probability. + mask (bool torch.Tensor): + A bool or tensor to mask the log probability. + cond_indep_stack (tuple): + The site's local stack of conditional independence metadata. + Immutable. + done (bool): + A flag to indicate whether the message has been handled. + stop (bool): + A flag to stop further processing of the message. + continuation (callable): + A function to call after processing the message. + infer (optional InferDict): + A dictionary of inference parameters. + obs (torch.Tensor): + The observed value. + log_prob (torch.Tensor): + The log probability of the sample. + log_prob_sum (torch.Tensor): + The sum of the log probability. + unscaled_log_prob (torch.Tensor): + The unscaled log probability. + score_parts (pyro.distributions.ScoreParts): + A collection of score parts. + packed (Message): + A packed message, used during enumeration. + """ + + type: str + name: Optional[str] + fn: Callable[_P, _T] + is_observed: bool + args: Tuple + kwargs: Dict + value: Optional[_T] + scale: Union[torch.Tensor, float] + mask: Union[bool, torch.Tensor, None] + cond_indep_stack: Tuple["CondIndepStackFrame", ...] + done: bool + stop: bool + continuation: Optional[Callable[["Message"], None]] + infer: Optional[InferDict] + obs: Optional[torch.Tensor] + log_prob: torch.Tensor + log_prob_sum: torch.Tensor + unscaled_log_prob: torch.Tensor + score_parts: "ScoreParts" + packed: "Message" + _intervener_id: Optional[str] + + +class _DimAllocator: + """ + Dimension allocator for internal use by :class:`plate`. + There is a single global instance. + + Note that dimensions are indexed from the right, e.g. -1, -2. + """ + + def __init__(self) -> None: + # in reverse orientation of log_prob.shape + self._stack: List[Optional[str]] = [] + + def allocate(self, name: str, dim: Optional[int]) -> int: + """ + Allocate a dimension to an :class:`plate` with given name. + Dim should be either None for automatic allocation or a negative + integer for manual allocation. + """ + if name in self._stack: + raise ValueError(f"duplicate plate '{name}'") + if dim is None: + # Automatically designate the rightmost available dim for allocation. + dim = -1 + while -dim <= len(self._stack) and self._stack[-1 - dim] is not None: + dim -= 1 + elif dim >= 0: + raise ValueError(f"Expected dim < 0 to index from the right, actual {dim}") + + # Allocate the requested dimension. + while dim < -len(self._stack): + self._stack.append(None) + if self._stack[-1 - dim] is not None: + raise ValueError( + "\n".join( + [ + 'at plates "{}" and "{}", collide at dim={}'.format( + name, self._stack[-1 - dim], dim + ), + "\nTry moving the dim of one plate to the left, e.g. dim={}".format( + dim - 1 + ), + ] + ) + ) + self._stack[-1 - dim] = name + return dim + + def free(self, name: str, dim: int) -> None: + """ + Free a dimension. + """ + free_idx = -1 - dim # stack index to free + assert self._stack[free_idx] == name + self._stack[free_idx] = None + while self._stack and self._stack[-1] is None: + self._stack.pop() + + +# Handles placement of plate dimensions +_DIM_ALLOCATOR = _DimAllocator() + + +class _EnumAllocator: + """ + Dimension allocator for internal use by :func:`~pyro.poutine.markov`. + There is a single global instance. + + Note that dimensions are indexed from the right, e.g. -1, -2. + Note that ids are simply nonnegative integers here. + """ + + def set_first_available_dim(self, first_available_dim: int) -> None: + """ + Set the first available dim, which should be to the left of all + :class:`plate` dimensions, e.g. ``-1 - max_plate_nesting``. This should + be called once per program. In SVI this should be called only once per + (guide,model) pair. + """ + assert first_available_dim < 0, first_available_dim + self.next_available_dim = first_available_dim + self.next_available_id = 0 + self.dim_to_id: Dict[int, int] = {} # only the global ids + + def allocate(self, scope_dims: Optional[Set[int]] = None) -> Tuple[int, int]: + """ + Allocate a new recyclable dim and a unique id. + + If ``scope_dims`` is None, this allocates a global enumeration dim + that will never be recycled. If ``scope_dims`` is specified, this + allocates a local enumeration dim that can be reused by at any other + local site whose scope excludes this site. + + :param set scope_dims: An optional set of (negative integer) + local enumeration dims to avoid when allocating this dim. + :return: A pair ``(dim, id)``, where ``dim`` is a negative integer + and ``id`` is a nonnegative integer. + :rtype: tuple + """ + id_ = self.next_available_id + self.next_available_id += 1 + + dim = self.next_available_dim + if dim == -float("inf"): + raise ValueError( + "max_plate_nesting must be set to a finite value for parallel enumeration" + ) + if scope_dims is None: + # allocate a new global dimension + self.next_available_dim -= 1 + self.dim_to_id[dim] = id_ + else: + # allocate a new local dimension + while dim in scope_dims: + dim -= 1 + + return dim, id_ + + +# Handles placement of enumeration dimensions +_ENUM_ALLOCATOR = _EnumAllocator() + + +class NonlocalExit(Exception): + """ + Exception for exiting nonlocally from poutine execution. + + Used by poutine.EscapeMessenger to return site information. + """ + + def __init__(self, site: Message, *args, **kwargs) -> None: + """ + :param site: message at a pyro site constructor. + Just stores the input site. + """ + super().__init__(*args, **kwargs) + self.site = site + + def reset_stack(self) -> None: + """ + Reset the state of the frames remaining in the stack. + Necessary for multiple re-executions in poutine.queue. + """ + from pyro.poutine.block_messenger import BlockMessenger + + for frame in reversed(_PYRO_STACK): + frame._reset() + if isinstance(frame, BlockMessenger) and frame.hide_fn(self.site): + break + + +def default_process_message(msg: Message) -> None: + """ + Default method for processing messages in inference. + + :param msg: a message to be processed + :returns: None + """ + if msg["done"] or msg["is_observed"] or msg["value"] is not None: + msg["done"] = True + return + + msg["value"] = msg["fn"](*msg["args"], **msg["kwargs"]) + + # after fn has been called, update msg to prevent it from being called again. + msg["done"] = True + + +def apply_stack(initial_msg: Message) -> None: + """ + Execute the effect stack at a single site according to the following scheme: + + 1. For each ``Messenger`` in the stack from bottom to top, + execute ``Messenger._process_message`` with the message; + if the message field "stop" is True, stop; + otherwise, continue + 2. Apply default behavior (``default_process_message``) to finish remaining site execution + 3. For each ``Messenger`` in the stack from top to bottom, + execute ``_postprocess_message`` to update the message and internal messenger state with the site results + 4. If the message field "continuation" is not ``None``, call it with the message + + :param dict initial_msg: the starting version of the trace site + :returns: ``None`` + """ + stack = _PYRO_STACK + # TODO check at runtime if stack is valid + + # msg is used to pass information up and down the stack + msg = initial_msg + + pointer = 0 + # go until time to stop? + for frame in reversed(stack): + pointer = pointer + 1 + + frame._process_message(msg) + + if msg["stop"]: + break + + default_process_message(msg) + + for frame in stack[-pointer:]: + frame._postprocess_message(msg) + + cont = msg["continuation"] + if cont is not None: + cont(msg) + + +def am_i_wrapped() -> bool: + """ + Checks whether the current computation is wrapped in a poutine. + :returns: bool + """ + return len(_PYRO_STACK) > 0 + + +@overload +def effectful( + fn: None = ..., type: Optional[str] = ... +) -> Callable[[Callable[_P, _T]], Callable[..., _T]]: ... + + +@overload +def effectful( + fn: Callable[_P, _T] = ..., type: Optional[str] = ... +) -> Callable[..., _T]: ... + + +def effectful( + fn: Optional[Callable[_P, _T]] = None, type: Optional[str] = None +) -> Callable: + """ + :param fn: function or callable that performs an effectful computation + :param str type: the type label of the operation, e.g. `"sample"` + + Wrapper for calling :func:`~pyro.poutine.runtime.apply_stack` to apply any active effects. + """ + if fn is None: + return functools.partial(effectful, type=type) + + if getattr(fn, "_is_effectful", None): + return fn + + assert type is not None, f"must provide a type label for operation {fn}" + assert type != "message", "cannot use 'message' as keyword" + + @functools.wraps(fn) + def _fn( # type: ignore[valid-type] + *args: _P.args, + name: Optional[str] = None, + infer: Optional[InferDict] = None, + obs: Optional[_T] = None, + **kwargs: _P.kwargs, + ) -> _T: + is_observed = obs is not None + + if not am_i_wrapped(): + return fn(*args, **kwargs) + else: + msg = Message( + type=type, + name=name, + fn=fn, + is_observed=is_observed, + args=args, + kwargs=kwargs, + value=obs, + scale=1.0, + mask=None, + cond_indep_stack=(), + done=False, + stop=False, + continuation=None, + infer=infer if infer is not None else {}, + ) + # apply the stack and return its return value + apply_stack(msg) + if TYPE_CHECKING: + assert msg["value"] is not None + return msg["value"] + + _fn._is_effectful = True # type: ignore[attr-defined] + return _fn + + +def _inspect() -> Message: + """ + EXPERIMENTAL Inspect the Pyro stack. + + .. warning:: The format of the returned message may change at any time and + does not guarantee backwards compatibility. + + :returns: A message with all effects applied. + :rtype: dict + """ + msg = Message( + type="inspect", + name="_pyro_inspect", + fn=lambda: True, + is_observed=False, + args=(), + kwargs={}, + value=None, + infer={"_do_not_trace": True}, + scale=1.0, + mask=None, + cond_indep_stack=(), + done=False, + stop=False, + continuation=None, + ) + apply_stack(msg) + return msg + + +def get_mask() -> Union[bool, torch.Tensor, None]: + """ + Records the effects of enclosing ``poutine.mask`` handlers. + + This is useful for avoiding expensive ``pyro.factor()`` computations during + prediction, when the log density need not be computed, e.g.:: + + def model(): + # ... + if poutine.get_mask() is not False: + log_density = my_expensive_computation() + pyro.factor("foo", log_density) + # ... + + :returns: The mask. + :rtype: None, bool, or torch.Tensor + """ + return _inspect()["mask"] + + +def get_plates() -> Tuple["CondIndepStackFrame", ...]: + """ + Records the effects of enclosing ``pyro.plate`` contexts. + + :returns: A tuple of + :class:`pyro.poutine.indep_messenger.CondIndepStackFrame` objects. + :rtype: tuple + """ + return _inspect()["cond_indep_stack"] diff --git a/pyro/source/pyro/poutine/scale_messenger.py b/pyro/source/pyro/poutine/scale_messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..48e96c725530182ce478cededafe2687b00f88c2 --- /dev/null +++ b/pyro/source/pyro/poutine/scale_messenger.py @@ -0,0 +1,53 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from typing import TYPE_CHECKING, Union + +import torch + +from pyro.poutine.messenger import Messenger +from pyro.poutine.util import is_validation_enabled + +if TYPE_CHECKING: + from pyro.poutine.runtime import Message + + +class ScaleMessenger(Messenger): + """ + Given a stochastic function with some sample statements and a positive + scale factor, scale the score of all sample and observe sites in the + function. + + Consider the following Pyro program: + + >>> def model(x): + ... s = pyro.param("s", torch.tensor(0.5)) + ... pyro.sample("z", dist.Normal(x, s), obs=torch.tensor(1.0)) + + ``scale`` multiplicatively scales the log-probabilities of sample sites: + + >>> scaled_model = pyro.poutine.scale(model, scale=0.5) + >>> scaled_tr = pyro.poutine.trace(scaled_model).get_trace(0.0) + >>> unscaled_tr = pyro.poutine.trace(model).get_trace(0.0) + >>> bool((scaled_tr.log_prob_sum() == 0.5 * unscaled_tr.log_prob_sum()).all()) + True + + :param fn: a stochastic function (callable containing Pyro primitive calls) + :param scale: a positive scaling factor + :returns: stochastic function decorated with a :class:`~pyro.poutine.scale_messenger.ScaleMessenger` + """ + + def __init__(self, scale: Union[float, torch.Tensor]) -> None: + if isinstance(scale, torch.Tensor): + if is_validation_enabled() and not (scale > 0).all(): + raise ValueError( + "Expected scale > 0 but got {}. ".format(scale) + + "Consider using poutine.mask() instead of poutine.scale()." + ) + elif not (scale > 0): + raise ValueError("Expected scale > 0 but got {}".format(scale)) + super().__init__() + self.scale = scale + + def _process_message(self, msg: "Message") -> None: + msg["scale"] = self.scale * msg["scale"] diff --git a/pyro/source/pyro/poutine/seed_messenger.py b/pyro/source/pyro/poutine/seed_messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..c8f4b774855651dc6379fd03c5c47d9b64fcfac5 --- /dev/null +++ b/pyro/source/pyro/poutine/seed_messenger.py @@ -0,0 +1,38 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from types import TracebackType +from typing import Optional, Type + +from pyro.poutine.messenger import Messenger +from pyro.util import get_rng_state, set_rng_seed, set_rng_state + + +class SeedMessenger(Messenger): + """ + Handler to set the random number generator to a pre-defined state by setting its + seed. This is the same as calling :func:`pyro.set_rng_seed` before the + call to `fn`. This handler has no additional effect on primitive statements on the + standard Pyro backend, but it might intercept ``pyro.sample`` calls in other + backends. e.g. the NumPy backend. + + :param fn: a stochastic function (callable containing Pyro primitive calls). + :param int rng_seed: rng seed. + """ + + def __init__(self, rng_seed: int) -> None: + assert isinstance(rng_seed, int) + self.rng_seed = rng_seed + super().__init__() + + def __enter__(self) -> None: # type: ignore[override] + self.old_state = get_rng_state() + set_rng_seed(self.rng_seed) + + def __exit__( + self, + exc_type: Optional[Type[BaseException]], + exc_value: Optional[BaseException], + traceback: Optional[TracebackType], + ) -> None: + set_rng_state(self.old_state) diff --git a/pyro/source/pyro/poutine/subsample_messenger.py b/pyro/source/pyro/poutine/subsample_messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..5fe9203aea8b6a0f5123a3979bbc2af777b6b8f5 --- /dev/null +++ b/pyro/source/pyro/poutine/subsample_messenger.py @@ -0,0 +1,217 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from typing import Optional, Tuple + +import torch + +from pyro.distributions.distribution import Distribution +from pyro.poutine.indep_messenger import CondIndepStackFrame, IndepMessenger +from pyro.poutine.runtime import Message, apply_stack +from pyro.poutine.util import is_validation_enabled +from pyro.util import ignore_jit_warnings + + +class _Subsample(Distribution): + """ + Randomly select a subsample of a range of indices. + + Internal use only. This should only be used by `plate`. + """ + + def __init__( + self, + size: int, + subsample_size: Optional[int], + use_cuda: Optional[bool] = None, + device: Optional[str] = None, + ) -> None: + """ + :param int size: the size of the range to subsample from + :param int subsample_size: the size of the returned subsample + :param bool use_cuda: DEPRECATED, use the `device` arg instead. + Whether to use cuda tensors. + :param str device: device to place the `sample` and `log_prob` + results on. + """ + self.size = size + self.subsample_size = subsample_size + self.use_cuda = use_cuda + if self.use_cuda is not None: + if self.use_cuda ^ (device != "cpu"): + raise ValueError( + "Incompatible arg values use_cuda={}, device={}.".format( + use_cuda, device + ) + ) + with ignore_jit_warnings(["torch.Tensor results are registered as constants"]): + self.device = device or torch.tensor(tuple()).device + + @ignore_jit_warnings(["Converting a tensor to a Python boolean"]) + def sample(self, sample_shape: torch.Size = torch.Size()) -> torch.Tensor: + """ + :returns: a random subsample of `range(size)` + :rtype: torch.LongTensor + """ + if sample_shape: + raise NotImplementedError + subsample_size = self.subsample_size + if subsample_size is None or subsample_size >= self.size: + result = torch.arange(self.size, device=self.device) + else: + result = torch.randperm(self.size, device=self.device)[ + :subsample_size + ].clone() + return result.cuda() if self.use_cuda else result + + def log_prob(self, x: torch.Tensor) -> torch.Tensor: + # This is zero so that plate can provide an unbiased estimate of + # the non-subsampled log_prob. + result = torch.tensor(0.0, device=self.device) + return result.cuda() if self.use_cuda else result + + +class SubsampleMessenger(IndepMessenger): + """ + Extension of IndepMessenger that includes subsampling. + """ + + def __init__( + self, + name: str, + size: Optional[int] = None, + subsample_size: Optional[int] = None, + subsample: Optional[torch.Tensor] = None, + dim: Optional[int] = None, + use_cuda: Optional[bool] = None, + device: Optional[str] = None, + ) -> None: + full_size, self.subsample_size, subsample = self._subsample( + name, + size, + subsample_size, + subsample, + use_cuda, + device, + ) + super().__init__(name, full_size, dim, device) + self._indices = subsample + + @staticmethod + def _subsample( + name: str, + size: Optional[int] = None, + subsample_size: Optional[int] = None, + subsample: Optional[torch.Tensor] = None, + use_cuda: Optional[bool] = None, + device: Optional[str] = None, + ) -> Tuple[int, int, Optional[torch.Tensor]]: + """ + Helper function for plate. See its docstrings for details. + """ + if size is None: + assert subsample_size is None + assert subsample is None + size = -1 # This is PyTorch convention for "arbitrary size" + subsample_size = -1 + else: + msg = Message( + type="sample", + name=name, + fn=_Subsample(size, subsample_size, use_cuda, device), + is_observed=False, + args=(), + kwargs={}, + value=subsample, + infer={}, + scale=1.0, + mask=None, + cond_indep_stack=(), + done=False, + stop=False, + continuation=None, + ) + apply_stack(msg) + subsample = msg["value"] + + with ignore_jit_warnings(): + if subsample_size is None: + assert subsample is not None + subsample_size = ( + subsample.size(0) + if isinstance(subsample, torch.Tensor) + else len(subsample) + ) + elif subsample is not None and subsample_size != len(subsample): + raise ValueError( + "subsample_size does not match len(subsample), {} vs {}.".format( + subsample_size, len(subsample) + ) + + " Did you accidentally use different subsample_size in the model and guide?" + ) + + return size, subsample_size, subsample + + def _reset(self) -> None: + self._indices = None + super()._reset() + + def _process_message(self, msg: Message) -> None: + frame = CondIndepStackFrame( + name=self.name, + dim=self.dim, + size=self.subsample_size, + counter=self.counter, + full_size=self.size, # used for param initialization + ) + msg["cond_indep_stack"] = (frame,) + msg["cond_indep_stack"] + if isinstance(self.size, torch.Tensor) or isinstance( # type: ignore[unreachable] + self.subsample_size, torch.Tensor # type: ignore[unreachable] + ): + if not isinstance(msg["scale"], torch.Tensor): # type: ignore[unreachable] + with ignore_jit_warnings(): + msg["scale"] = torch.tensor(msg["scale"]) + msg["scale"] = msg["scale"] * self.size / self.subsample_size + + def _postprocess_message(self, msg: Message) -> None: + if msg["type"] in ("param", "subsample") and self.dim is not None: + event_dim = msg["kwargs"].get("event_dim") + if event_dim is not None: + assert event_dim >= 0 + dim = self.dim - event_dim + assert msg["value"] is not None + shape = msg["value"].shape + if len(shape) >= -dim and shape[dim] != 1: + if is_validation_enabled() and shape[dim] != self.size: + if msg["type"] == "param": + statement = "pyro.param({}, ..., event_dim={})".format( + msg["name"], event_dim + ) + else: + statement = "pyro.subsample(..., event_dim={})".format( + event_dim + ) + raise ValueError( + "Inside pyro.plate({}, {}, dim={}) invalid shape of {}: {}".format( + self.name, self.size, self.dim, statement, shape + ) + ) + # Subsample parameters with known batch semantics. + if self.subsample_size < self.size: + value = msg["value"] + assert self._indices is not None + new_value = value.index_select( + dim, self._indices.to(value.device) + ) + if msg["type"] == "param": + if hasattr(value, "_pyro_unconstrained_param"): + param = value._pyro_unconstrained_param # type: ignore[attr-defined] + else: + param = value.unconstrained() # type: ignore[attr-defined] + + if not hasattr(param, "_pyro_subsample"): + param._pyro_subsample = {} + + param._pyro_subsample[dim] = self._indices + new_value._pyro_unconstrained_param = param # type: ignore[attr-defined] + msg["value"] = new_value diff --git a/pyro/source/pyro/poutine/substitute_messenger.py b/pyro/source/pyro/poutine/substitute_messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..69caa6f2988dbb59ec3c5f8d79061d65fcbc5926 --- /dev/null +++ b/pyro/source/pyro/poutine/substitute_messenger.py @@ -0,0 +1,94 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import warnings +from typing import TYPE_CHECKING, Dict, Set + +from typing_extensions import Self + +from pyro import params +from pyro.poutine.messenger import Messenger +from pyro.poutine.util import is_validation_enabled + +if TYPE_CHECKING: + import torch + + from pyro.poutine.runtime import Message + + +class SubstituteMessenger(Messenger): + """ + Given a stochastic function with param calls and a set of parameter values, + create a stochastic function where all param calls are substituted with + the fixed values. + data should be a dict of names to values. + Consider the following Pyro program: + + >>> def model(x): + ... a = pyro.param("a", torch.tensor(0.5)) + ... x = pyro.sample("x", dist.Bernoulli(probs=a)) + ... return x + >>> substituted_model = pyro.poutine.substitute(model, data={"a": torch.tensor(0.3)}) + + In this example, site `a` will now have value `torch.tensor(0.3)`. + :param data: dictionary of values keyed by site names. + :returns: ``fn`` decorated with a :class:`~pyro.poutine.substitute_messenger.SubstituteMessenger` + """ + + def __init__(self, data: Dict[str, "torch.Tensor"]) -> None: + """ + :param data: values for the parameters. + Constructor + """ + super().__init__() + self.data = data + self._data_cache: Dict[str, "Message"] = {} + + def __enter__(self) -> Self: + self._data_cache = {} + if is_validation_enabled() and isinstance(self.data, dict): + self._param_hits: Set[str] = set() + self._param_misses: Set[str] = set() + return super().__enter__() + + def __exit__(self, *args, **kwargs) -> None: + self._data_cache = {} + if is_validation_enabled() and isinstance(self.data, dict): + extra = set(self.data) - self._param_hits + if extra: + warnings.warn( + "pyro.module data did not find params ['{}']. " + "Did you instead mean one of ['{}']?".format( + "', '".join(extra), "', '".join(self._param_misses) + ) + ) + return super().__exit__(*args, **kwargs) + + def _pyro_sample(self, msg: "Message") -> None: + return None + + def _pyro_param(self, msg: "Message") -> None: + """ + Overrides the `pyro.param` with substituted values. + If the param name does not match the name the keys in `data`, + that param value is unchanged. + """ + assert msg["name"] is not None + name = msg["name"] + param_name = params.user_param_name(name) + + if param_name in self.data.keys(): + msg["value"] = self.data[param_name] + if is_validation_enabled(): + self._param_hits.add(param_name) + else: + if is_validation_enabled(): + self._param_misses.add(param_name) + return None + + if name in self._data_cache: + # Multiple pyro.param statements with the same + # name. Block the site and fix the value. + msg["value"] = self._data_cache[name]["value"] + else: + self._data_cache[name] = msg diff --git a/pyro/source/pyro/poutine/trace_messenger.py b/pyro/source/pyro/poutine/trace_messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..4c1b3068bfc4076dcb809be489d88ba490378fae --- /dev/null +++ b/pyro/source/pyro/poutine/trace_messenger.py @@ -0,0 +1,217 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import sys +from typing import TYPE_CHECKING, Callable, Generic, Literal, Optional, TypeVar + +from typing_extensions import ParamSpec, Self + +from pyro.poutine.messenger import Messenger +from pyro.poutine.trace_struct import Trace +from pyro.poutine.util import site_is_subsample + +if TYPE_CHECKING: + from pyro.poutine.runtime import Message + +_P = ParamSpec("_P") +_T = TypeVar("_T") + + +def identify_dense_edges(trace: Trace) -> None: + """ + Modifies a trace in-place by adding all edges based on the + `cond_indep_stack` information stored at each site. + """ + for name, node in trace.nodes.items(): + if site_is_subsample(node): + continue + if node["type"] == "sample": + for past_name, past_node in trace.nodes.items(): + if site_is_subsample(past_node): + continue + if past_node["type"] == "sample": + if past_name == name: + break + past_node_independent = False + for query, target in zip( + node["cond_indep_stack"], past_node["cond_indep_stack"] + ): + if ( + query.name == target.name + and query.counter != target.counter + ): + past_node_independent = True + break + if not past_node_independent: + trace.add_edge(past_name, name) + + +class TraceMessenger(Messenger): + """ + Return a handler that records the inputs and outputs of primitive calls + and their dependencies. + + Consider the following Pyro program: + + >>> def model(x): + ... s = pyro.param("s", torch.tensor(0.5)) + ... z = pyro.sample("z", dist.Normal(x, s)) + ... return z ** 2 + + We can record its execution using ``trace`` + and use the resulting data structure to compute the log-joint probability + of all of the sample sites in the execution or extract all parameters. + + >>> trace = pyro.poutine.trace(model).get_trace(0.0) + >>> logp = trace.log_prob_sum() + >>> params = [trace.nodes[name]["value"].unconstrained() for name in trace.param_nodes] + + :param fn: a stochastic function (callable containing Pyro primitive calls) + :param graph_type: string that specifies the kind of graph to construct + :param param_only: if true, only records params and not samples + :returns: stochastic function decorated with a :class:`~pyro.poutine.trace_messenger.TraceMessenger` + """ + + def __init__( + self, + graph_type: Optional[Literal["flat", "dense"]] = None, + param_only: Optional[bool] = None, + ) -> None: + """ + :param string graph_type: string that specifies the type of graph + to construct (currently only "flat" or "dense" supported) + :param param_only: boolean that specifies whether to record sample sites + """ + super().__init__() + if graph_type is None: + graph_type = "flat" + if param_only is None: + param_only = False + assert graph_type in ("flat", "dense") + self.graph_type = graph_type + self.param_only = param_only + self.trace = Trace(graph_type=self.graph_type) + + def __enter__(self) -> Self: + self.trace = Trace(graph_type=self.graph_type) + return super().__enter__() + + def __exit__(self, *args, **kwargs) -> None: + """ + Adds appropriate edges based on cond_indep_stack information + upon exiting the context. + """ + if self.param_only: + for node in list(self.trace.nodes.values()): + if node["type"] != "param": + assert node["name"] is not None + self.trace.remove_node(node["name"]) + if self.graph_type == "dense": + identify_dense_edges(self.trace) + return super().__exit__(*args, **kwargs) + + def __call__(self, fn: Callable[_P, _T]) -> "TraceHandler[_P, _T]": + """ + TODO docs + """ + return TraceHandler(self, fn) + + def get_trace(self) -> Trace: + """ + :returns: data structure + :rtype: pyro.poutine.Trace + + Helper method for a very common use case. + Returns a shallow copy of ``self.trace``. + """ + return self.trace.copy() + + def _reset(self) -> None: + tr = Trace(graph_type=self.graph_type) + if "_INPUT" in self.trace.nodes: + tr.add_node( + "_INPUT", + name="_INPUT", + type="input", + args=self.trace.nodes["_INPUT"]["args"], + kwargs=self.trace.nodes["_INPUT"]["kwargs"], + ) + self.trace = tr + super()._reset() + + def _pyro_post_sample(self, msg: "Message") -> None: + if self.param_only: + return + assert msg["name"] is not None + assert msg["infer"] is not None + if msg["infer"].get("_do_not_trace"): + assert msg["infer"].get("is_auxiliary") + assert not msg["is_observed"] + return + self.trace.add_node(msg["name"], **msg.copy()) + + def _pyro_post_param(self, msg: "Message") -> None: + assert msg["name"] is not None + self.trace.add_node(msg["name"], **msg.copy()) + + +class TraceHandler(Generic[_P, _T]): + """ + Execution trace poutine. + + A TraceHandler records the input and output to every Pyro primitive + and stores them as a site in a Trace(). + This should, in theory, be sufficient information for every inference algorithm + (along with the implicit computational graph in the Variables?) + + We can also use this for visualization. + """ + + def __init__(self, msngr: TraceMessenger, fn: Callable[_P, _T]) -> None: + self.fn = fn + self.msngr = msngr + + def __call__(self, *args: _P.args, **kwargs: _P.kwargs) -> _T: + """ + Runs the stochastic function stored in this poutine, + with additional side effects. + + Resets self.trace to an empty trace, + installs itself on the global execution stack, + runs self.fn with the given arguments, + uninstalls itself from the global execution stack, + stores the arguments and return value of the function in special sites, + and returns self.fn's return value + """ + with self.msngr: + self.msngr.trace.add_node( + "_INPUT", name="_INPUT", type="args", args=args, kwargs=kwargs + ) + try: + ret = self.fn(*args, **kwargs) + except (ValueError, RuntimeError) as e: + exc_type, exc_value, traceback = sys.exc_info() + shapes = self.msngr.trace.format_shapes() + assert exc_type is not None + exc = exc_type("{}\n{}".format(exc_value, shapes)) + exc = exc.with_traceback(traceback) + raise exc from e + self.msngr.trace.add_node( + "_RETURN", name="_RETURN", type="return", value=ret + ) + return ret + + @property + def trace(self) -> Trace: + return self.msngr.trace + + def get_trace(self, *args, **kwargs) -> Trace: + """ + :returns: data structure + :rtype: pyro.poutine.Trace + + Helper method for a very common use case. + Calls this poutine and returns its trace instead of the function's return value. + """ + self(*args, **kwargs) + return self.msngr.get_trace() diff --git a/pyro/source/pyro/poutine/trace_struct.py b/pyro/source/pyro/poutine/trace_struct.py new file mode 100644 index 0000000000000000000000000000000000000000..ccfd2a78c735556fba1554de72515a5a8dfcb1e8 --- /dev/null +++ b/pyro/source/pyro/poutine/trace_struct.py @@ -0,0 +1,581 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import sys +from collections import OrderedDict +from typing import ( + TYPE_CHECKING, + Any, + Callable, + Dict, + Iterable, + Iterator, + List, + Literal, + Optional, + Set, + Tuple, + Union, +) + +import opt_einsum + +from pyro.distributions.score_parts import ScoreParts +from pyro.distributions.util import scale_and_mask +from pyro.ops.packed import pack +from pyro.poutine.util import is_validation_enabled +from pyro.util import warn_if_inf, warn_if_nan + +if TYPE_CHECKING: + import torch + + from pyro.distributions.distribution import Distribution + from pyro.poutine.runtime import Message + + +def allow_all_sites(name: str, site: "Message") -> bool: + return True + + +class Trace: + """ + Graph data structure denoting the relationships amongst different pyro primitives + in the execution trace. + + An execution trace of a Pyro program is a record of every call + to ``pyro.sample()`` and ``pyro.param()`` in a single execution of that program. + Traces are directed graphs whose nodes represent primitive calls or input/output, + and whose edges represent conditional dependence relationships + between those primitive calls. They are created and populated by ``poutine.trace``. + + Each node (or site) in a trace contains the name, input and output value of the site, + as well as additional metadata added by inference algorithms or user annotation. + In the case of ``pyro.sample``, the trace also includes the stochastic function + at the site, and any observed data added by users. + + Consider the following Pyro program: + + >>> def model(x): + ... s = pyro.param("s", torch.tensor(0.5)) + ... z = pyro.sample("z", dist.Normal(x, s)) + ... return z ** 2 + + We can record its execution using ``pyro.poutine.trace`` + and use the resulting data structure to compute the log-joint probability + of all of the sample sites in the execution or extract all parameters. + + >>> trace = pyro.poutine.trace(model).get_trace(0.0) + >>> logp = trace.log_prob_sum() + >>> params = [trace.nodes[name]["value"].unconstrained() for name in trace.param_nodes] + + We can also inspect or manipulate individual nodes in the trace. + ``trace.nodes`` contains a ``collections.OrderedDict`` + of site names and metadata corresponding to ``x``, ``s``, ``z``, and the return value: + + >>> list(name for name in trace.nodes.keys()) # doctest: +SKIP + ["_INPUT", "s", "z", "_RETURN"] + + Values of ``trace.nodes`` are dictionaries of node metadata: + + >>> trace.nodes["z"] # doctest: +SKIP + {'type': 'sample', 'name': 'z', 'is_observed': False, + 'fn': Normal(), 'value': tensor(0.6480), 'args': (), 'kwargs': {}, + 'infer': {}, 'scale': 1.0, 'cond_indep_stack': (), + 'done': True, 'stop': False, 'continuation': None} + + ``'infer'`` is a dictionary of user- or algorithm-specified metadata. + ``'args'`` and ``'kwargs'`` are the arguments passed via ``pyro.sample`` + to ``fn.__call__`` or ``fn.log_prob``. + ``'scale'`` is used to scale the log-probability of the site when computing the log-joint. + ``'cond_indep_stack'`` contains data structures corresponding to ``pyro.plate`` contexts + appearing in the execution. + ``'done'``, ``'stop'``, and ``'continuation'`` are only used by Pyro's internals. + + :param string graph_type: string specifying the kind of trace graph to construct + """ + + def __init__(self, graph_type: Literal["flat", "dense"] = "flat") -> None: + assert graph_type in ("flat", "dense"), "{} not a valid graph type".format( + graph_type + ) + self.graph_type = graph_type + self.nodes: OrderedDict[str, "Message"] = OrderedDict() + self._succ: OrderedDict[str, Set[str]] = OrderedDict() + self._pred: OrderedDict[str, Set[str]] = OrderedDict() + + def __contains__(self, name: str) -> bool: + return name in self.nodes + + def __iter__(self) -> Iterable[str]: + return iter(self.nodes.keys()) + + def __len__(self) -> int: + return len(self.nodes) + + @property + def edges(self) -> Iterable[Tuple[str, str]]: + for site, adj_nodes in self._succ.items(): + for adj_node in adj_nodes: + yield site, adj_node + + def add_node(self, site_name: str, **kwargs: Any) -> None: + """ + :param string site_name: the name of the site to be added + + Adds a site to the trace. + + Raises an error when attempting to add a duplicate node + instead of silently overwriting. + """ + if site_name in self: + site = self.nodes[site_name] + if site["type"] != kwargs["type"]: + # Cannot sample or observe after a param statement. + raise RuntimeError( + "{} is already in the trace as a {}".format(site_name, site["type"]) + ) + elif kwargs["type"] != "param": + # Cannot sample after a previous sample statement. + raise RuntimeError( + "Multiple {} sites named '{}'".format(kwargs["type"], site_name) + ) + + # XXX should copy in case site gets mutated, or dont bother? + self.nodes[site_name] = kwargs # type: ignore[assignment] + self._pred[site_name] = set() + self._succ[site_name] = set() + + def add_edge(self, site1: str, site2: str) -> None: + for site in (site1, site2): + if site not in self.nodes: + self.add_node(site) + self._succ[site1].add(site2) + self._pred[site2].add(site1) + + def remove_node(self, site_name: str) -> None: + self.nodes.pop(site_name) + for p in self._pred[site_name]: + self._succ[p].remove(site_name) + for s in self._succ[site_name]: + self._pred[s].remove(site_name) + self._pred.pop(site_name) + self._succ.pop(site_name) + + def predecessors(self, site_name: str) -> Set[str]: + return self._pred[site_name] + + def successors(self, site_name: str) -> Set[str]: + return self._succ[site_name] + + def copy(self) -> "Trace": + """ + Makes a shallow copy of self with nodes and edges preserved. + """ + new_tr = Trace(graph_type=self.graph_type) + new_tr.nodes.update(self.nodes) + new_tr._succ.update(self._succ) + new_tr._pred.update(self._pred) + return new_tr + + def _dfs(self, site: str, visited: Set[str]) -> Iterable[str]: + if site in visited: + return + for s in self._succ[site]: + for node in self._dfs(s, visited): + yield node + visited.add(site) + yield site + + def topological_sort(self, reverse: bool = False) -> List[str]: + """ + Return a list of nodes (site names) in topologically sorted order. + + :param bool reverse: Return the list in reverse order. + :return: list of topologically sorted nodes (site names). + """ + visited: Set[str] = set() + top_sorted = [] + for s in self._succ: + for node in self._dfs(s, visited): + top_sorted.append(node) + return top_sorted if reverse else list(reversed(top_sorted)) + + def log_prob_sum( + self, + site_filter: Callable[[str, "Message"], bool] = allow_all_sites, + ) -> Union["torch.Tensor", float]: + """ + Compute the site-wise log probabilities of the trace. + Each ``log_prob`` has shape equal to the corresponding ``batch_shape``. + Each ``log_prob_sum`` is a scalar. + The computation of ``log_prob_sum`` is memoized. + + :returns: total log probability. + :rtype: torch.Tensor + """ + result = 0.0 + for name, site in self.nodes.items(): + if site["type"] == "sample" and site_filter(name, site): + if TYPE_CHECKING: + assert isinstance(site["fn"], Distribution) + if "log_prob_sum" in site: + log_p = site["log_prob_sum"] + else: + try: + log_p = site["fn"].log_prob( + site["value"], *site["args"], **site["kwargs"] + ) + except ValueError as e: + _, exc_value, traceback = sys.exc_info() + shapes = self.format_shapes(last_site=site["name"]) + raise ValueError( + "Error while computing log_prob_sum at site '{}':\n{}\n{}\n".format( + name, exc_value, shapes + ) + ).with_traceback(traceback) from e + log_p = scale_and_mask(log_p, site["scale"], site["mask"]).sum() + site["log_prob_sum"] = log_p + if is_validation_enabled(): + warn_if_nan(log_p, "log_prob_sum at site '{}'".format(name)) + warn_if_inf( + log_p, + "log_prob_sum at site '{}'".format(name), + allow_neginf=True, + ) + result = result + log_p # type: ignore[assignment] + return result + + def compute_log_prob( + self, + site_filter: Callable[[str, "Message"], bool] = allow_all_sites, + ) -> None: + """ + Compute the site-wise log probabilities of the trace. + Each ``log_prob`` has shape equal to the corresponding ``batch_shape``. + Each ``log_prob_sum`` is a scalar. + Both computations are memoized. + """ + for name, site in self.nodes.items(): + if site["type"] == "sample" and site_filter(name, site): + if TYPE_CHECKING: + assert isinstance(site["fn"], Distribution) + if "log_prob" not in site: + try: + log_p = site["fn"].log_prob( + site["value"], *site["args"], **site["kwargs"] + ) + except ValueError as e: + _, exc_value, traceback = sys.exc_info() + shapes = self.format_shapes(last_site=site["name"]) + raise ValueError( + "Error while computing log_prob at site '{}':\n{}\n{}".format( + name, exc_value, shapes + ) + ).with_traceback(traceback) from e + site["unscaled_log_prob"] = log_p + log_p = scale_and_mask(log_p, site["scale"], site["mask"]) + site["log_prob"] = log_p + site["log_prob_sum"] = log_p.sum() + if is_validation_enabled(): + warn_if_nan( + site["log_prob_sum"], + "log_prob_sum at site '{}'".format(name), + ) + warn_if_inf( + site["log_prob_sum"], + "log_prob_sum at site '{}'".format(name), + allow_neginf=True, + ) + + def compute_score_parts(self) -> None: + """ + Compute the batched local score parts at each site of the trace. + Each ``log_prob`` has shape equal to the corresponding ``batch_shape``. + Each ``log_prob_sum`` is a scalar. + All computations are memoized. + """ + for name, site in self.nodes.items(): + if site["type"] == "sample" and "score_parts" not in site: + if TYPE_CHECKING: + assert isinstance(site["fn"], Distribution) + # Note that ScoreParts overloads the multiplication operator + # to correctly scale each of its three parts. + try: + value = site["fn"].score_parts( + site["value"], *site["args"], **site["kwargs"] + ) + except ValueError as e: + _, exc_value, traceback = sys.exc_info() + shapes = self.format_shapes(last_site=site["name"]) + raise ValueError( + "Error while computing score_parts at site '{}':\n{}\n{}".format( + name, exc_value, shapes + ) + ).with_traceback(traceback) from e + site["unscaled_log_prob"] = value.log_prob + value = value.scale_and_mask(site["scale"], site["mask"]) + site["score_parts"] = value + site["log_prob"] = value.log_prob + site["log_prob_sum"] = value.log_prob.sum() + if is_validation_enabled(): + warn_if_nan( + site["log_prob_sum"], "log_prob_sum at site '{}'".format(name) + ) + warn_if_inf( + site["log_prob_sum"], + "log_prob_sum at site '{}'".format(name), + allow_neginf=True, + ) + + def detach_(self) -> None: + """ + Detach values (in-place) at each sample site of the trace. + """ + for _, site in self.nodes.items(): + if site["type"] == "sample": + assert site["value"] is not None + site["value"] = site["value"].detach() + + @property + def observation_nodes(self) -> List[str]: + """ + :return: a list of names of observe sites + """ + return [ + name + for name, node in self.nodes.items() + if node["type"] == "sample" and node["is_observed"] + ] + + @property + def param_nodes(self) -> List[str]: + """ + :return: a list of names of param sites + """ + return [name for name, node in self.nodes.items() if node["type"] == "param"] + + @property + def stochastic_nodes(self) -> List[str]: + """ + :return: a list of names of sample sites + """ + return [ + name + for name, node in self.nodes.items() + if node["type"] == "sample" and not node["is_observed"] + ] + + @property + def reparameterized_nodes(self) -> List[str]: + """ + :return: a list of names of sample sites whose stochastic functions + are reparameterizable primitive distributions + """ + return [ + name + for name, node in self.nodes.items() + if node["type"] == "sample" + and not node["is_observed"] + and getattr(node["fn"], "has_rsample", False) + ] + + @property + def nonreparam_stochastic_nodes(self) -> List[str]: + """ + :return: a list of names of sample sites whose stochastic functions + are not reparameterizable primitive distributions + """ + return list(set(self.stochastic_nodes) - set(self.reparameterized_nodes)) + + def iter_stochastic_nodes(self) -> Iterator[Tuple[str, "Message"]]: + """ + :return: an iterator over stochastic nodes in the trace. + """ + for name, node in self.nodes.items(): + if node["type"] == "sample" and not node["is_observed"]: + yield name, node + + def symbolize_dims(self, plate_to_symbol: Optional[Dict[str, str]] = None) -> None: + """ + Assign unique symbols to all tensor dimensions. + """ + plate_to_symbol = {} if plate_to_symbol is None else plate_to_symbol + symbol_to_dim = {} + for site in self.nodes.values(): + if site["type"] != "sample": + continue + + # allocate even symbols for plate dims + dim_to_symbol: Dict[int, str] = {} + for frame in site["cond_indep_stack"]: + if frame.vectorized: + assert frame.dim is not None + if frame.name in plate_to_symbol: + symbol = plate_to_symbol[frame.name] + else: + symbol = opt_einsum.get_symbol(2 * len(plate_to_symbol)) + plate_to_symbol[frame.name] = symbol + symbol_to_dim[symbol] = frame.dim + dim_to_symbol[frame.dim] = symbol + + # allocate odd symbols for enum dims + assert site["infer"] is not None + for dim, id_ in site["infer"].get("_dim_to_id", {}).items(): + symbol = opt_einsum.get_symbol(1 + 2 * id_) + symbol_to_dim[symbol] = dim + dim_to_symbol[dim] = symbol + enum_dim = site["infer"].get("_enumerate_dim") + if enum_dim is not None: + site["infer"]["_enumerate_symbol"] = dim_to_symbol[enum_dim] + site["infer"]["_dim_to_symbol"] = dim_to_symbol + + self.plate_to_symbol = plate_to_symbol + self.symbol_to_dim = symbol_to_dim + + def pack_tensors(self, plate_to_symbol: Optional[Dict[str, str]] = None) -> None: + """ + Computes packed representations of tensors in the trace. + This should be called after :meth:`compute_log_prob` or :meth:`compute_score_parts`. + """ + self.symbolize_dims(plate_to_symbol) + for site in self.nodes.values(): + if site["type"] != "sample": + continue + assert site["infer"] is not None + dim_to_symbol = site["infer"]["_dim_to_symbol"] + packed = site.setdefault("packed", {}) + try: + packed["mask"] = pack(site["mask"], dim_to_symbol) + if "score_parts" in site: + log_prob, score_function, entropy_term = site["score_parts"] + log_prob = pack(log_prob, dim_to_symbol) + score_function = pack(score_function, dim_to_symbol) + entropy_term = pack(entropy_term, dim_to_symbol) + packed["score_parts"] = ScoreParts( + log_prob, score_function, entropy_term + ) + packed["log_prob"] = log_prob + packed["unscaled_log_prob"] = pack( + site["unscaled_log_prob"], dim_to_symbol + ) + elif "log_prob" in site: + packed["log_prob"] = pack(site["log_prob"], dim_to_symbol) + packed["unscaled_log_prob"] = pack( + site["unscaled_log_prob"], dim_to_symbol + ) + except ValueError as e: + _, exc_value, traceback = sys.exc_info() + shapes = self.format_shapes(last_site=site["name"]) + raise ValueError( + "Error while packing tensors at site '{}':\n {}\n{}".format( + site["name"], exc_value, shapes + ) + ).with_traceback(traceback) from e + + def format_shapes( + self, title: str = "Trace Shapes:", last_site: Optional[str] = None + ) -> str: + """ + Returns a string showing a table of the shapes of all sites in the + trace. + """ + if not self.nodes: + return title + rows: List[List[Optional[str]]] = [[title]] + + rows.append(["Param Sites:"]) + for name, site in self.nodes.items(): + if site["type"] == "param": + if TYPE_CHECKING: + assert isinstance(site["value"], torch.Tensor) + rows.append([name, None] + [str(size) for size in site["value"].shape]) + if name == last_site: + break + + rows.append(["Sample Sites:"]) + for name, site in self.nodes.items(): + if site["type"] == "sample": + # param shape + batch_shape = getattr(site["fn"], "batch_shape", ()) + event_shape = getattr(site["fn"], "event_shape", ()) + rows.append( + [name + " dist", None] + + [str(size) for size in batch_shape] + + ["|", None] + + [str(size) for size in event_shape] + ) + + # value shape + event_dim = len(event_shape) + shape = getattr(site["value"], "shape", ()) + batch_shape = shape[: len(shape) - event_dim] + event_shape = shape[len(shape) - event_dim :] + rows.append( + ["value", None] + + [str(size) for size in batch_shape] + + ["|", None] + + [str(size) for size in event_shape] + ) + + # log_prob shape + if "log_prob" in site: + batch_shape = getattr(site["log_prob"], "shape", ()) + rows.append( + ["log_prob", None] + + [str(size) for size in batch_shape] + + ["|", None] + ) + if name == last_site: + break + + return _format_table(rows) + + +def _format_table(rows: List[List[Optional[str]]]) -> str: + """ + Formats a right justified table using None as column separator. + """ + # compute column widths + column_widths = [0, 0, 0] + for row in rows: + widths = [0, 0, 0] + j = 0 + for cell in row: + if cell is None: + j += 1 + else: + widths[j] += 1 + for j in range(3): + column_widths[j] = max(column_widths[j], widths[j]) + + # justify columns + justified_rows: List[List[str]] = [] + for row in rows: + cols: List[List[str]] = [[], [], []] + j = 0 + for cell in row: + if cell is None: + j += 1 + else: + cols[j].append(cell) + cols = [ + ( + [""] * (width - len(col)) + col + if direction == "r" + else col + [""] * (width - len(col)) + ) + for width, col, direction in zip(column_widths, cols, "rrl") + ] + justified_rows.append(sum(cols, [])) + + # compute cell widths + cell_widths = [0] * len(justified_rows[0]) + for justified_row in justified_rows: + for j, cell in enumerate(justified_row): + cell_widths[j] = max(cell_widths[j], len(cell)) + + # justify cells + return "\n".join( + " ".join(cell.rjust(width) for cell, width in zip(justified_row, cell_widths)) + for justified_row in justified_rows + ) diff --git a/pyro/source/pyro/poutine/uncondition_messenger.py b/pyro/source/pyro/poutine/uncondition_messenger.py new file mode 100644 index 0000000000000000000000000000000000000000..34febd054346c2ea44f977da460c4ae40156d916 --- /dev/null +++ b/pyro/source/pyro/poutine/uncondition_messenger.py @@ -0,0 +1,34 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from typing import TYPE_CHECKING + +from pyro.poutine.messenger import Messenger + +if TYPE_CHECKING: + from pyro.poutine.runtime import Message + + +class UnconditionMessenger(Messenger): + """ + Messenger to force the value of observed nodes to be sampled from their + distribution, ignoring observations. + """ + + def __init__(self) -> None: + super().__init__() + + def _pyro_sample(self, msg: "Message") -> None: + """ + :param msg: current message at a trace site. + + Samples value from distribution, irrespective of whether or not the + node has an observed value. + """ + if msg["is_observed"]: + msg["is_observed"] = False + assert msg["infer"] is not None + msg["infer"]["was_observed"] = True + msg["infer"]["obs"] = msg["value"] + msg["value"] = None + msg["done"] = False diff --git a/pyro/source/pyro/poutine/util.py b/pyro/source/pyro/poutine/util.py new file mode 100644 index 0000000000000000000000000000000000000000..8c682e2aef836da9322ac8119e0088b63b6c4083 --- /dev/null +++ b/pyro/source/pyro/poutine/util.py @@ -0,0 +1,147 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from typing import TYPE_CHECKING, List, Optional + +from pyro import settings + +if TYPE_CHECKING: + from pyro.distributions.distribution import Distribution + from pyro.poutine.runtime import Message + from pyro.poutine.trace_struct import Trace + +_VALIDATION_ENABLED = __debug__ +settings.register("validate_poutine", __name__, "_VALIDATION_ENABLED") + + +def enable_validation(is_validate: bool) -> None: + global _VALIDATION_ENABLED + _VALIDATION_ENABLED = is_validate + + +def is_validation_enabled() -> bool: + return _VALIDATION_ENABLED + + +def site_is_subsample(site: "Message") -> bool: + """ + Determines whether a trace site originated from a subsample statement inside an `plate`. + """ + return site["type"] == "sample" and type(site["fn"]).__name__ == "_Subsample" + + +def site_is_factor(site: "Message") -> bool: + """ + Determines whether a trace site originated from a factor statement. + """ + return site["type"] == "sample" and type(site["fn"]).__name__ == "Unit" + + +def prune_subsample_sites(trace: "Trace") -> "Trace": + """ + Copies and removes all subsample sites from a trace. + """ + trace = trace.copy() + for name, site in list(trace.nodes.items()): + if site_is_subsample(site): + trace.remove_node(name) + return trace + + +def enum_extend( + trace: "Trace", msg: "Message", num_samples: Optional[int] = None +) -> List["Trace"]: + """ + :param trace: a partial trace + :param msg: the message at a Pyro primitive site + :param num_samples: maximum number of extended traces to return. + :returns: a list of traces, copies of input trace with one extra site + + Utility function to copy and extend a trace with sites based on the input site + whose values are enumerated from the support of the input site's distribution. + + Used for exact inference and integrating out discrete variables. + """ + if num_samples is None: + num_samples = -1 + + extended_traces = [] + assert msg["name"] is not None + if TYPE_CHECKING: + assert isinstance(msg["fn"], Distribution) + for i, s in enumerate(msg["fn"].enumerate_support(*msg["args"], **msg["kwargs"])): + if i > num_samples and num_samples >= 0: + break + msg_copy = msg.copy() + msg_copy.update(value=s) # type: ignore[call-arg] + tr_cp = trace.copy() + tr_cp.add_node(msg["name"], **msg_copy) + extended_traces.append(tr_cp) + return extended_traces + + +def mc_extend( + trace: "Trace", msg: "Message", num_samples: Optional[int] = None +) -> List["Trace"]: + """ + :param trace: a partial trace + :param msg: the message at a Pyro primitive site + :param num_samples: maximum number of extended traces to return. + :returns: a list of traces, copies of input trace with one extra site + + Utility function to copy and extend a trace with sites based on the input site + whose values are sampled from the input site's function. + + Used for Monte Carlo marginalization of individual sample sites. + """ + if num_samples is None: + num_samples = 1 + + extended_traces = [] + for i in range(num_samples): + msg_copy = msg.copy() + msg_copy["value"] = msg_copy["fn"](*msg_copy["args"], **msg_copy["kwargs"]) + tr_cp = trace.copy() + assert msg_copy["name"] is not None + tr_cp.add_node(msg_copy["name"], **msg_copy) + extended_traces.append(tr_cp) + return extended_traces + + +def discrete_escape(trace: "Trace", msg: "Message") -> bool: + """ + :param trace: a partial trace + :param msg: the message at a Pyro primitive site + :returns: boolean decision value + + Utility function that checks if a sample site is discrete and not already in a trace. + + Used by EscapeMessenger to decide whether to do a nonlocal exit at a site. + Subroutine for integrating out discrete variables for variance reduction. + """ + return ( + msg["type"] == "sample" + and not msg["is_observed"] + and msg["name"] is not None + and msg["name"] not in trace + and getattr(msg["fn"], "has_enumerate_support", False) + ) + + +def all_escape(trace: "Trace", msg: "Message") -> bool: + """ + :param trace: a partial trace + :param msg: the message at a Pyro primitive site + :returns: boolean decision value + + Utility function that checks if a site is not already in a trace. + + Used by EscapeMessenger to decide whether to do a nonlocal exit at a site. + Subroutine for approximately integrating out variables for variance reduction. + """ + return ( + msg["type"] == "sample" + and not msg["is_observed"] + and msg["name"] is not None + and msg["name"] not in trace + ) diff --git a/pyro/source/pyro/primitives.py b/pyro/source/pyro/primitives.py new file mode 100644 index 0000000000000000000000000000000000000000..6ed6862c3c687eada7436fc38ab7c5e5227c2944 --- /dev/null +++ b/pyro/source/pyro/primitives.py @@ -0,0 +1,600 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import copy +import warnings +from collections import OrderedDict +from contextlib import ExitStack, contextmanager +from inspect import isclass +from operator import attrgetter +from typing import Callable, Iterator, Optional, Sequence, Union + +import torch +from torch.distributions import constraints + +import pyro.distributions as dist +import pyro.infer as infer +import pyro.poutine as poutine +from pyro.distributions.torch_distribution import TorchDistributionMixin +from pyro.params import param_with_module_name +from pyro.params.param_store import ParamStoreDict +from pyro.poutine.plate_messenger import PlateMessenger +from pyro.poutine.runtime import ( + _MODULE_NAMESPACE_DIVIDER, + _PYRO_PARAM_STORE, + InferDict, + Message, + am_i_wrapped, + apply_stack, + effectful, +) +from pyro.poutine.subsample_messenger import SubsampleMessenger +from pyro.util import set_rng_seed # noqa: F401 + + +def get_param_store() -> ParamStoreDict: + """ + Returns the global :class:`~pyro.params.param_store.ParamStoreDict`. + """ + return _PYRO_PARAM_STORE + + +def clear_param_store() -> None: + """ + Clears the global :class:`~pyro.params.param_store.ParamStoreDict`. + + This is especially useful if you're working in a REPL. We recommend calling + this before each training loop (to avoid leaking parameters from past + models), and before each unit test (to avoid leaking parameters across + tests). + """ + _PYRO_PARAM_STORE.clear() + + +_param = effectful(_PYRO_PARAM_STORE.get_param, type="param") + + +def param( + name: str, + init_tensor: Union[torch.Tensor, Callable[[], torch.Tensor], None] = None, + constraint: constraints.Constraint = constraints.real, + event_dim: Optional[int] = None, +) -> torch.Tensor: + """ + Saves the variable as a parameter in the param store. + To interact with the param store or write to disk, + see `Parameters `_. + + :param str name: name of parameter + :param init_tensor: initial tensor or lazy callable that returns a tensor. + For large tensors, it may be cheaper to write e.g. + ``lambda: torch.randn(100000)``, which will only be evaluated on the + initial statement. + :type init_tensor: torch.Tensor or callable + :param constraint: torch constraint, defaults to ``constraints.real``. + :type constraint: torch.distributions.constraints.Constraint + :param int event_dim: (optional) number of rightmost dimensions unrelated + to batching. Dimension to the left of this will be considered batch + dimensions; if the param statement is inside a subsampled plate, then + corresponding batch dimensions of the parameter will be correspondingly + subsampled. If unspecified, all dimensions will be considered event + dims and no subsampling will be performed. + :returns: A constrained parameter. The underlying unconstrained parameter + is accessible via ``pyro.param(...).unconstrained()``, where + ``.unconstrained`` is a weakref attribute. + :rtype: torch.Tensor + """ + # Note effectful(-) requires the double passing of name below. + args = (name,) if init_tensor is None else (name, init_tensor) + value = _param(*args, constraint=constraint, event_dim=event_dim, name=name) + assert value is not None # type narrowing guaranteed by _param + return value + + +def _masked_observe( + name: str, + fn: TorchDistributionMixin, + obs: Optional[torch.Tensor], + obs_mask: torch.BoolTensor, + *args, + **kwargs, +) -> torch.Tensor: + # Split into two auxiliary sample sites. + with poutine.mask(mask=obs_mask): + observed = sample(f"{name}_observed", fn, *args, **kwargs, obs=obs) + with poutine.mask(mask=~obs_mask): # type: ignore[call-overload] + unobserved = sample(f"{name}_unobserved", fn, *args, **kwargs) + + # Interleave observed and unobserved events. + shape = obs_mask.shape + (1,) * fn.event_dim + batch_mask = obs_mask.reshape(shape) + try: + value = torch.where(batch_mask, observed, unobserved) + except RuntimeError as e: + if "must match the size of tensor" in str(e): + shape = torch.broadcast_shapes(observed.shape, unobserved.shape) + batch_shape = shape[: len(shape) - fn.event_dim] + raise ValueError( + f"Invalid obs_mask shape {tuple(obs_mask.shape)}; should be " + f"broadcastable to batch_shape = {tuple(batch_shape)}" + ) from e + raise + return deterministic(name, value, event_dim=fn.event_dim) + + +def sample( + name: str, + fn: TorchDistributionMixin, + *args, + obs: Optional[torch.Tensor] = None, + obs_mask: Optional[torch.BoolTensor] = None, + infer: Optional[InferDict] = None, + **kwargs, +) -> torch.Tensor: + """ + Calls the stochastic function ``fn`` with additional side-effects depending + on ``name`` and the enclosing context (e.g. an inference algorithm). See + `Introduction to Pyro `_ for a discussion. + + :param name: name of sample + :param fn: distribution class or function + :param obs: observed datum (optional; should only be used in context of + inference) optionally specified in kwargs + :param ~torch.Tensor obs_mask: Optional boolean tensor mask of shape + broadcastable with ``fn.batch_shape``. If provided, events with + mask=True will be conditioned on ``obs`` and remaining events will be + imputed by sampling. This introduces a latent sample site named ``name + + "_unobserved"`` which should be used by guides. + :type obs_mask: bool or ~torch.Tensor + :param dict infer: Optional dictionary of inference parameters specified + in kwargs. See inference documentation for details. + :returns: sample + """ + # Transform obs_mask into multiple sample statements. + if obs_mask is not None: + return _masked_observe(name, fn, obs, obs_mask, *args, **kwargs) + + # Check if stack is empty. + # if stack empty, default behavior (defined here) + infer = {} if infer is None else infer.copy() + is_observed = infer.pop("is_observed", obs is not None) + assert isinstance(is_observed, bool) + if not am_i_wrapped(): + if obs is not None and not infer.get("_deterministic"): + warnings.warn( + "trying to observe a value outside of inference at " + name, + RuntimeWarning, + ) + return obs + return fn(*args, **kwargs) + # if stack not empty, apply everything in the stack? + else: + # initialize data structure to pass up/down the stack + msg = Message( + type="sample", + name=name, + fn=fn, + is_observed=is_observed, + args=args, + kwargs=kwargs, + value=obs, + infer=infer, + scale=1.0, + mask=None, + cond_indep_stack=(), + done=False, + stop=False, + continuation=None, + ) + # apply the stack and return its return value + apply_stack(msg) + assert msg["value"] is not None # type narrowing guaranteed by apply_stack + return msg["value"] + + +def factor( + name: str, log_factor: torch.Tensor, *, has_rsample: Optional[bool] = None +) -> None: + """ + Factor statement to add arbitrary log probability factor to a + probabilisitic model. + + .. warning:: When using factor statements in guides, you'll need to specify + whether the factor statement originated from fully reparametrized + sampling (e.g. the Jacobian determinant of a transformation of a + reparametrized variable) or from nonreparameterized sampling (e.g. + discrete samples). For the fully reparametrized case, set + ``has_rsample=True``; for the nonreparametrized case, set + ``has_rsample=False``. This is needed only in guides, not in models. + + :param str name: Name of the trivial sample + :param torch.Tensor log_factor: A possibly batched log probability factor. + :param bool has_rsample: Whether the ``log_factor`` arose from a fully + reparametrized distribution. Defaults to False when used in models, but + must be specified for use in guides. + """ + unit_dist = dist.Unit(log_factor, has_rsample=has_rsample) + unit_value = unit_dist.sample() + sample(name, unit_dist, obs=unit_value, infer={"is_auxiliary": True}) + + +def deterministic( + name: str, value: torch.Tensor, event_dim: Optional[int] = None +) -> torch.Tensor: + """ + Deterministic statement to add a :class:`~pyro.distributions.Delta` site + with name `name` and value `value` to the trace. This is useful when we + want to record values which are completely determined by their parents. + For example:: + + x = pyro.sample("x", dist.Normal(0, 1)) + x2 = pyro.deterministic("x2", x ** 2) + + .. note:: The site does not affect the model density. This currently converts + to a :func:`sample` statement, but may change in the future. + + :param str name: Name of the site. + :param torch.Tensor value: Value of the site. + :param int event_dim: Optional event dimension, defaults to `value.ndim`. + """ + event_dim = value.ndim if event_dim is None else event_dim + return sample( + name, + dist.Delta(value, event_dim=event_dim).mask(False), + obs=value, + infer={"_deterministic": True}, + ) + + +@effectful(type="subsample") +def subsample(data: torch.Tensor, event_dim: int) -> torch.Tensor: + """ + Subsampling statement to subsample data tensors based on enclosing + :class:`plate` s. + + This is typically called on arguments to ``model()`` when subsampling is + performed automatically by :class:`plate` s by passing either the + ``subsample`` or ``subsample_size`` kwarg. For example the following are + equivalent:: + + # Version 1. using indexing + def model(data): + with pyro.plate("data", len(data), subsample_size=10, dim=-data.dim()) as ind: + data = data[ind] + # ... + + # Version 2. using pyro.subsample() + def model(data): + with pyro.plate("data", len(data), subsample_size=10, dim=-data.dim()): + data = pyro.subsample(data, event_dim=0) + # ... + + :param data: A tensor of batched data. + :type data: ~torch.Tensor + :param int event_dim: The event dimension of the data tensor. Dimensions to + the left are considered batch dimensions. + :returns: A subsampled version of ``data`` + :rtype: ~torch.Tensor + """ + assert isinstance(event_dim, int) and event_dim >= 0 + return data # May be intercepted by SubsampleMessenger. + + +class plate(PlateMessenger): + """ + Construct for conditionally independent sequences of variables. + + ``plate`` can be used either sequentially as a generator or in parallel as + a context manager (formerly ``irange`` and ``iarange``, respectively). + + Sequential :class:`plate` is similar to :py:func:`range` in that it generates + a sequence of values. + + Vectorized :class:`plate` is similar to :func:`torch.arange` in that it + yields an array of indices by which other tensors can be indexed. + :class:`plate` differs from :func:`torch.arange` in that it also informs + inference algorithms that the variables being indexed are conditionally + independent. To do this, :class:`plate` is a provided as context manager + rather than a function, and users must guarantee that all computation + within an :class:`plate` context is conditionally independent:: + + with pyro.plate("name", size) as ind: + # ...do conditionally independent stuff with ind... + + Additionally, :class:`plate` can take advantage of the conditional + independence assumptions by subsampling the indices and informing inference + algorithms to scale various computed values. This is typically used to + subsample minibatches of data:: + + with pyro.plate("data", len(data), subsample_size=100) as ind: + batch = data[ind] + assert len(batch) == 100 + + By default ``subsample_size=False`` and this simply yields a + ``torch.arange(0, size)``. If ``0 < subsample_size <= size`` this yields a + single random batch of indices of size ``subsample_size`` and scales all + log likelihood terms by ``size/batch_size``, within this context. + + .. warning:: This is only correct if all computation is conditionally + independent within the context. + + :param str name: A unique name to help inference algorithms match + :class:`plate` sites between models and guides. + :param int size: Optional size of the collection being subsampled + (like `stop` in builtin `range`). + :param int subsample_size: Size of minibatches used in subsampling. + Defaults to `size`. + :param subsample: Optional custom subsample for user-defined subsampling + schemes. If specified, then `subsample_size` will be set to + `len(subsample)`. + :type subsample: Anything supporting `len()`. + :param int dim: An optional dimension to use for this independence index. + If specified, ``dim`` should be negative, i.e. should index from the + right. If not specified, ``dim`` is set to the rightmost dim that is + left of all enclosing ``plate`` contexts. + :param bool use_cuda: DEPRECATED, use the `device` arg instead. + Optional bool specifying whether to use cuda tensors for `subsample` + and `log_prob`. Defaults to ``torch.Tensor.is_cuda``. + :param str device: Optional keyword specifying which device to place + the results of `subsample` and `log_prob` on. By default, results + are placed on the same device as the default tensor. + :return: A reusabe context manager yielding a single 1-dimensional + :class:`torch.Tensor` of indices. + + Examples: + + .. doctest:: + :hide: + + >>> loc, scale = torch.tensor(0.), torch.tensor(1.) + >>> data = torch.randn(100) + >>> z = dist.Bernoulli(0.5).sample((100,)) + + >>> # This version declares sequential independence and subsamples data: + >>> for i in pyro.plate('data', 100, subsample_size=10): + ... if z[i]: # Control flow in this example prevents vectorization. + ... obs = pyro.sample(f'obs_{i}', dist.Normal(loc, scale), + ... obs=data[i]) + + >>> # This version declares vectorized independence: + >>> with pyro.plate('data'): + ... obs = pyro.sample('obs', dist.Normal(loc, scale), obs=data) + + >>> # This version subsamples data in vectorized way: + >>> with pyro.plate('data', 100, subsample_size=10) as ind: + ... obs = pyro.sample('obs', dist.Normal(loc, scale), obs=data[ind]) + + >>> # This wraps a user-defined subsampling method for use in pyro: + >>> ind = torch.randint(0, 100, (10,)).long() # custom subsample + >>> with pyro.plate('data', 100, subsample=ind): + ... obs = pyro.sample('obs', dist.Normal(loc, scale), obs=data[ind]) + + >>> # This reuses two different independence contexts. + >>> x_axis = pyro.plate('outer', 320, dim=-1) + >>> y_axis = pyro.plate('inner', 200, dim=-2) + >>> with x_axis: + ... x_noise = pyro.sample("x_noise", dist.Normal(loc, scale)) + ... assert x_noise.shape == (320,) + >>> with y_axis: + ... y_noise = pyro.sample("y_noise", dist.Normal(loc, scale)) + ... assert y_noise.shape == (200, 1) + >>> with x_axis, y_axis: + ... xy_noise = pyro.sample("xy_noise", dist.Normal(loc, scale)) + ... assert xy_noise.shape == (200, 320) + + See `SVI Part II `_ for an + extended discussion. + """ + + pass + + +class iarange(plate): + def __init__(self, *args, **kwargs): + warnings.warn( + "pyro.iarange is deprecated; use pyro.plate instead", DeprecationWarning + ) + super().__init__(*args, **kwargs) + + +class irange(SubsampleMessenger): + def __init__(self, *args, **kwargs): + warnings.warn( + "pyro.irange is deprecated; use pyro.plate instead", DeprecationWarning + ) + super().__init__(*args, **kwargs) + + +@contextmanager +def plate_stack( + prefix: str, sizes: Sequence[int], rightmost_dim: int = -1 +) -> Iterator[None]: + """ + Create a contiguous stack of :class:`plate` s with dimensions:: + + rightmost_dim - len(sizes), ..., rightmost_dim + + :param str prefix: Name prefix for plates. + :param iterable sizes: An iterable of plate sizes. + :param int rightmost_dim: The rightmost dim, counting from the right. + """ + assert rightmost_dim < 0 + with ExitStack() as stack: + for i, size in enumerate(reversed(sizes)): + plate_i = plate(f"{prefix}_{i}", size, dim=rightmost_dim - i) + stack.enter_context(plate_i) + yield + + +def module( + name: str, nn_module: torch.nn.Module, update_module_params: bool = False +) -> torch.nn.Module: + """ + Registers all parameters of a :class:`torch.nn.Module` with Pyro's + :mod:`~pyro.params.param_store`. In conjunction with the + :class:`~pyro.params.param_store.ParamStoreDict` + :meth:`~pyro.params.param_store.ParamStoreDict.save` and + :meth:`~pyro.params.param_store.ParamStoreDict.load` functionality, this + allows the user to save and load modules. + + .. note:: Consider instead using :class:`~pyro.nn.module.PyroModule`, a + newer alternative to ``pyro.module()`` that has better support for: + jitting, serving in C++, and converting parameters to random variables. + For details see the `Modules Tutorial + `_ . + + :param name: name of module + :type name: str + :param nn_module: the module to be registered with Pyro + :type nn_module: torch.nn.Module + :param update_module_params: determines whether Parameters + in the PyTorch module get overridden with the values found in the + ParamStore (if any). Defaults to `False` + :type load_from_param_store: bool + :returns: torch.nn.Module + """ + assert hasattr(nn_module, "parameters"), "module has no parameters" + assert _MODULE_NAMESPACE_DIVIDER not in name, ( + "improper module name, since contains %s" % _MODULE_NAMESPACE_DIVIDER + ) + + if isclass(nn_module): + raise NotImplementedError( + "pyro.module does not support class constructors for " + + "the argument nn_module" + ) + + target_state_dict = OrderedDict() + + for param_name, param_value in nn_module.named_parameters(): + if param_value.requires_grad: + # register the parameter in the module with pyro + # this only does something substantive if the parameter hasn't been seen before + full_param_name = param_with_module_name(name, param_name) + returned_param = param(full_param_name, param_value) + + if param_value._cdata != returned_param._cdata: + target_state_dict[param_name] = returned_param + elif nn_module.training: + warnings.warn( + f"{param_name} was not registered in the param store " + "because requires_grad=False. You can silence this " + "warning by calling my_module.train(False)" + ) + + if target_state_dict and update_module_params: + # WARNING: this is very dangerous. better method? + for _name, _param in nn_module.named_parameters(): + is_param = False + name_arr = _name.rsplit(".", 1) + if len(name_arr) > 1: + mod_name, param_name = name_arr[0], name_arr[1] + else: + is_param = True + mod_name = _name + if _name in target_state_dict.keys(): + if not is_param: + attrgetter(mod_name)(nn_module)._parameters[param_name] = ( + target_state_dict[_name] + ) + else: + nn_module._parameters[mod_name] = target_state_dict[_name] # type: ignore[assignment] + + return nn_module + + +def random_module(name, nn_module, prior, *args, **kwargs): + r""" + .. warning:: + The `random_module` primitive is deprecated, and will be removed + in a future release. Use :class:`~pyro.nn.module.PyroModule` instead to + to create Bayesian modules from :class:`torch.nn.Module` instances. + See the `Bayesian Regression tutorial `_ + for an example. + + DEPRECATED Places a prior over the parameters of the module `nn_module`. + Returns a distribution (callable) over `nn.Module`\s, which upon calling + returns a sampled `nn.Module`. + + :param name: name of pyro module + :type name: str + :param nn_module: the module to be registered with pyro + :type nn_module: torch.nn.Module + :param prior: pyro distribution, stochastic function, or python dict with parameter names + as keys and respective distributions/stochastic functions as values. + :returns: a callable which returns a sampled module + """ + warnings.warn( + "The `random_module` primitive is deprecated, and will be removed " + "in a future release. Use `pyro.nn.Module` to create Bayesian " + "modules from `torch.nn.Module` instances.", + FutureWarning, + ) + + assert hasattr(nn_module, "parameters"), "Module is not a NN module." + # register params in param store + lifted_fn = poutine.lift(module, prior=prior) + + def _fn(): + nn_copy = copy.deepcopy(nn_module) + # update_module_params must be True or the lifted module will not update local params + return lifted_fn(name, nn_copy, update_module_params=True, *args, **kwargs) + + return _fn + + +@effectful(type="barrier") +def barrier(data: torch.Tensor) -> torch.Tensor: + """ + EXPERIMENTAL Ensures all values in ``data`` are ground, rather than lazy + funsor values. This is useful in combination with + :func:`pyro.poutine.collapse`. + """ + return data + + +def enable_validation(is_validate: bool = True) -> None: + """ + Enable or disable validation checks in Pyro. Validation checks provide + useful warnings and errors, e.g. NaN checks, validating distribution + arguments and support values, detecting incorrect use of ELBO and MCMC. + Since some of these checks may be expensive, you may want to disable + validation of mature models to speed up inference. + + The default behavior mimics Python's ``assert`` statement: validation is on + by default, but is disabled if Python is run in optimized mode (via + ``python -O``). Equivalently, the default behavior depends on Python's + global ``__debug__`` value via ``pyro.enable_validation(__debug__)``. + + Validation is temporarily disabled during jit compilation, for all + inference algorithms that support the PyTorch jit. We recommend developing + models with non-jitted inference algorithms to ease debugging, then + optionally moving to jitted inference once a model is correct. + + :param bool is_validate: (optional; defaults to True) whether to + enable validation checks. + """ + dist.enable_validation(is_validate) + infer.enable_validation(is_validate) + poutine.enable_validation(is_validate) + + +@contextmanager +def validation_enabled(is_validate: bool = True) -> Iterator[None]: + """ + Context manager that is useful when temporarily enabling/disabling + validation checks. + + :param bool is_validate: (optional; defaults to True) temporary + validation check override. + """ + infer_validation_status = infer.is_validation_enabled() + distribution_validation_status = dist.is_validation_enabled() + poutine_validation_status = poutine.is_validation_enabled() + try: + enable_validation(is_validate) + yield + finally: + dist.enable_validation(distribution_validation_status) + infer.enable_validation(infer_validation_status) + poutine.enable_validation(poutine_validation_status) diff --git a/pyro/source/pyro/py.typed b/pyro/source/pyro/py.typed new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/pyro/settings.py b/pyro/source/pyro/settings.py new file mode 100644 index 0000000000000000000000000000000000000000..38dc1e01de2da530097d50faf45a17658edc50f7 --- /dev/null +++ b/pyro/source/pyro/settings.py @@ -0,0 +1,163 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +""" +Example usage:: + + # Simple getting and setting. + print(pyro.settings.get()) # print all settings + print(pyro.settings.get("cholesky_relative_jitter")) # print one + pyro.settings.set(cholesky_relative_jitter=0.5) # set one + pyro.settings.set(**my_settings) # set many + + # Use as a contextmanager. + with pyro.settings.context(cholesky_relative_jitter=0.5): + my_function() + + # Use as a decorator. + fn = pyro.settings.context(cholesky_relative_jitter=0.5)(my_function) + fn() + + # Register a new setting. + pyro.settings.register( + "binomial_approx_sample_thresh", # alias + "pyro.distributions.torch", # module + "Binomial.approx_sample_thresh", # deep name + ) + + # Register a new setting on a user-provided validator. + @pyro.settings.register( + "binomial_approx_sample_thresh", # alias + "pyro.distributions.torch", # module + "Binomial.approx_sample_thresh", # deep name + ) + def validate_thresh(thresh): # called each time setting is set + assert isinstance(thresh, float) + assert thresh > 0 + +Default Settings +---------------- + +{defaults} + +Settings Interface +------------------ +""" + +# This library must have no dependencies on other pyro modules. +import functools +from contextlib import contextmanager +from importlib import import_module +from typing import Any, Callable, Dict, Iterator, Optional, Tuple + +# Docs are updated by register(). +_doc_template = __doc__ + +# Global registry mapping alias:str to (modulename, deepname, validator) +# triples where deepname may have dots to indicate e.g. class variables. +_REGISTRY: Dict[str, Tuple[str, str, Optional[Callable]]] = {} + + +def get(alias: Optional[str] = None) -> Any: + """ + Gets one or all global settings. + + :param str alias: The name of a registered setting. + :returns: The currently set value. + """ + if alias is None: + # Return dict of all settings. + return {alias: get(alias) for alias in sorted(_REGISTRY)} + # Get a single setting. + module, deepname, validator = _REGISTRY[alias] + value = import_module(module) + for name in deepname.split("."): + value = getattr(value, name) + return value + + +def set(**kwargs) -> None: + r""" + Sets one or more settings. + + :param \*\*kwargs: alias=value pairs. + """ + for alias, value in kwargs.items(): + module, deepname, validator = _REGISTRY[alias] + if validator is not None: + validator(value) + destin = import_module(module) + names = deepname.split(".") + for name in names[:-1]: + destin = getattr(destin, name) + setattr(destin, names[-1], value) + + +@contextmanager +def context(**kwargs) -> Iterator[None]: + r""" + Context manager to temporarily override one or more settings. This also + works as a decorator. + + :param \*\*kwargs: alias=value pairs. + """ + old = {alias: get(alias) for alias in kwargs} + try: + set(**kwargs) + yield + finally: + set(**old) + + +def register( + alias: str, + modulename: str, + deepname: str, + validator: Optional[Callable] = None, +) -> Callable: + """ + Register a global settings. + + This should be declared in the module where the setting is defined. + + This can be used either as a declaration:: + + settings.register("my_setting", __name__, "MY_SETTING") + + or as a decorator on a user-defined validator function:: + + @settings.register("my_setting", __name__, "MY_SETTING") + def _validate_my_setting(value): + assert isinstance(value, float) + assert 0 < value + + :param str alias: A valid python identifier serving as a settings alias. + Lower snake case preferred, e.g. ``my_setting``. + :param str modulename: The module name where the setting is declared, + typically ``__name__``. + :param str deepname: A ``.``-separated string of names. E.g. for a module + constant, use ``MY_CONSTANT``. For a class attributue, use + ``MyClass.my_attribute``. + :param callable validator: Optional validator that inputs a value, + possibly raises validation errors, and returns None. + """ + global __doc__ + assert isinstance(alias, str) + assert alias.isidentifier() + assert isinstance(modulename, str) + assert isinstance(deepname, str) + _REGISTRY[alias] = modulename, deepname, validator + + # Add default value to module docstring. + __doc__ = _doc_template.format( + defaults="\n".join(f"- {a} = {get(a)}" for a in sorted(_REGISTRY)) + ) + + # Support use as a decorator on an optional user-provided validator. + if validator is None: + # Return a decorator, but its fine if user discards this. + return functools.partial(register, alias, modulename, deepname) + else: + # Test current value passes validation. + validator(get(alias)) + return validator diff --git a/pyro/source/pyro/util.py b/pyro/source/pyro/util.py new file mode 100644 index 0000000000000000000000000000000000000000..044013aeb08e0c0b0afac037f9f80fda04613df1 --- /dev/null +++ b/pyro/source/pyro/util.py @@ -0,0 +1,724 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math +import numbers +import random +import sys +import timeit +import warnings +from collections import defaultdict +from contextlib import contextmanager +from itertools import zip_longest +from typing import ( + TYPE_CHECKING, + Any, + Dict, + FrozenSet, + List, + Optional, + Set, + Union, + overload, +) + +import numpy as np +import torch + +from pyro.poutine.util import site_is_subsample + +if TYPE_CHECKING: + from pyro.distributions.torch_distribution import TorchDistributionMixin + from pyro.poutine.indep_messenger import CondIndepStackFrame + from pyro.poutine.runtime import Message + from pyro.poutine.trace import Trace + + +def set_rng_seed(rng_seed: int) -> None: + """ + Sets seeds of `torch` and `torch.cuda` (if available). + + :param int rng_seed: The seed value. + """ + torch.manual_seed(rng_seed) + random.seed(rng_seed) + np.random.seed(rng_seed) + + +def get_rng_state() -> Dict[str, Any]: + return { + "torch": torch.get_rng_state(), + "random": random.getstate(), + "numpy": np.random.get_state(), + } + + +def set_rng_state(state: Dict[str, Any]) -> None: + torch.set_rng_state(state["torch"]) + random.setstate(state["random"]) + if "numpy" in state: + import numpy as np + + np.random.set_state(state["numpy"]) + + +@overload +def torch_isnan(x: numbers.Number) -> bool: ... +@overload +def torch_isnan(x: torch.Tensor) -> torch.Tensor: ... +def torch_isnan(x: Union[torch.Tensor, numbers.Number]) -> Union[bool, torch.Tensor]: + """ + A convenient function to check if a Tensor contains any nan; also works with numbers + """ + if isinstance(x, numbers.Number): + return x != x + return torch.isnan(x).any() + + +@overload +def torch_isinf(x: numbers.Number) -> bool: ... +@overload +def torch_isinf(x: torch.Tensor) -> torch.Tensor: ... +def torch_isinf(x: Union[torch.Tensor, numbers.Number]) -> Union[bool, torch.Tensor]: + """ + A convenient function to check if a Tensor contains any +inf; also works with numbers + """ + if isinstance(x, numbers.Number): + return x == math.inf or x == -math.inf + return (x == math.inf).any() or (x == -math.inf).any() + + +@overload +def warn_if_nan( + value: numbers.Number, + msg: str = "", + *, + filename: Optional[str] = None, + lineno: Optional[int] = None, +) -> numbers.Number: ... +@overload +def warn_if_nan( + value: torch.Tensor, + msg: str = "", + *, + filename: Optional[str] = None, + lineno: Optional[int] = None, +) -> torch.Tensor: ... +def warn_if_nan( + value: Union[torch.Tensor, numbers.Number], + msg: str = "", + *, + filename: Optional[str] = None, + lineno: Optional[int] = None, +) -> Union[torch.Tensor, numbers.Number]: + """ + A convenient function to warn if a Tensor or its grad contains any nan, + also works with numbers. + """ + if filename is None: + try: + frame = sys._getframe(1) + except ValueError: + filename = "sys" + lineno = 1 + else: + filename = frame.f_code.co_filename + lineno = frame.f_lineno + + if isinstance(value, torch.Tensor) and value.requires_grad: + value.register_hook( + lambda x: warn_if_nan( + x, "backward " + msg, filename=filename, lineno=lineno + ) + ) + + if torch_isnan(value): + assert isinstance(lineno, int) + warnings.warn_explicit( + "Encountered NaN{}".format(": " + msg if msg else "."), + UserWarning, + filename, + lineno, + ) + + return value + + +@overload +def warn_if_inf( + value: numbers.Number, + msg: str = "", + allow_posinf: bool = False, + allow_neginf: bool = False, + *, + filename: Optional[str] = None, + lineno: Optional[int] = None, +) -> numbers.Number: ... +@overload +def warn_if_inf( + value: torch.Tensor, + msg: str = "", + allow_posinf: bool = False, + allow_neginf: bool = False, + *, + filename: Optional[str] = None, + lineno: Optional[int] = None, +) -> torch.Tensor: ... +def warn_if_inf( + value: Union[torch.Tensor, numbers.Number], + msg: str = "", + allow_posinf: bool = False, + allow_neginf: bool = False, + *, + filename: Optional[str] = None, + lineno: Optional[int] = None, +) -> Union[torch.Tensor, numbers.Number]: + """ + A convenient function to warn if a Tensor or its grad contains any inf, + also works with numbers. + """ + if filename is None: + try: + frame = sys._getframe(1) + except ValueError: + filename = "sys" + lineno = 1 + else: + filename = frame.f_code.co_filename + lineno = frame.f_lineno + + if isinstance(value, torch.Tensor) and value.requires_grad: + value.register_hook( + lambda x: warn_if_inf( + x, + "backward " + msg, + allow_posinf, + allow_neginf, + filename=filename, + lineno=lineno, + ) + ) + + if (not allow_posinf) and ( + value == math.inf + if isinstance(value, numbers.Number) + else (value == math.inf).any() + ): + assert isinstance(lineno, int) + warnings.warn_explicit( + "Encountered +inf{}".format(": " + msg if msg else "."), + UserWarning, + filename, + lineno, + ) + if (not allow_neginf) and ( + value == -math.inf + if isinstance(value, numbers.Number) + else (value == -math.inf).any() + ): + assert isinstance(lineno, int) + warnings.warn_explicit( + "Encountered -inf{}".format(": " + msg if msg else "."), + UserWarning, + filename, + lineno, + ) + + return value + + +def save_visualization(trace: "Trace", graph_output: str) -> None: + """ + DEPRECATED Use :func:`pyro.infer.inspect.render_model()` instead. + + Take a trace generated by poutine.trace with `graph_type='dense'` + and render the graph with the output saved to file. + + - non-reparameterized stochastic nodes are salmon + - reparameterized stochastic nodes are half salmon, half grey + - observation nodes are green + + :param pyro.poutine.Trace trace: a trace to be visualized + :param graph_output: the graph will be saved to graph_output.pdf + :type graph_output: str + + Example:: + + trace = pyro.poutine.trace(model, graph_type="dense").get_trace() + save_visualization(trace, 'output') + """ + warnings.warn( + "`save_visualization` function is deprecated and will be removed in " + "a future version." + ) + + import graphviz + + g = graphviz.Digraph() + + for label, node in trace.nodes.items(): + if site_is_subsample(node): + continue + shape = "ellipse" + if label in trace.stochastic_nodes and label not in trace.reparameterized_nodes: + fillcolor = "salmon" + elif label in trace.reparameterized_nodes: + fillcolor = "lightgrey;.5:salmon" + elif label in trace.observation_nodes: + fillcolor = "darkolivegreen3" + else: + # only visualize RVs + continue + g.node(label, label=label, shape=shape, style="filled", fillcolor=fillcolor) + + for label1, label2 in trace.edges: + if site_is_subsample(trace.nodes[label1]): + continue + if site_is_subsample(trace.nodes[label2]): + continue + g.edge(label1, label2) + + g.render(graph_output, view=False, cleanup=True) + + +def check_traces_match(trace1: "Trace", trace2: "Trace") -> None: + """ + :param pyro.poutine.Trace trace1: Trace object of the model + :param pyro.poutine.Trace trace2: Trace object of the guide + :raises: RuntimeWarning, ValueError + + Checks that (1) there is a bijection between the samples in the two traces + and (2) at each sample site two traces agree on sample shape. + """ + # Check ordinary sample sites. + vars1 = set(name for name, site in trace1.nodes.items() if site["type"] == "sample") + vars2 = set(name for name, site in trace2.nodes.items() if site["type"] == "sample") + if vars1 != vars2: + warnings.warn("Model vars changed: {} vs {}".format(vars1, vars2)) + + # Check shapes agree. + for name in vars1: + site1 = trace1.nodes[name] + site2 = trace2.nodes[name] + if hasattr(site1["fn"], "shape") and hasattr(site2["fn"], "shape"): + shape1 = site1["fn"].shape(*site1["args"], **site1["kwargs"]) + shape2 = site2["fn"].shape(*site2["args"], **site2["kwargs"]) + if shape1 != shape2: + raise ValueError( + "Site dims disagree at site '{}': {} vs {}".format( + name, shape1, shape2 + ) + ) + + +def check_model_guide_match( + model_trace: "Trace", guide_trace: "Trace", max_plate_nesting: float = math.inf +) -> None: + """ + :param pyro.poutine.Trace model_trace: Trace object of the model + :param pyro.poutine.Trace guide_trace: Trace object of the guide + :raises: RuntimeWarning, ValueError + + Checks the following assumptions: + 1. Each sample site in the model also appears in the guide and is not + marked auxiliary. + 2. Each sample site in the guide either appears in the model or is marked, + auxiliary via ``infer={'is_auxiliary': True}``. + 3. Each :class:``~pyro.plate`` statement in the guide also appears in the + model. + 4. At each sample site that appears in both the model and guide, the model + and guide agree on sample shape. + 5. Model-side sequential enumeration is not implemented. + """ + # Check ordinary sample sites. + guide_vars = set( + name + for name, site in guide_trace.nodes.items() + if site["type"] == "sample" + if type(site["fn"]).__name__ != "_Subsample" + ) + aux_vars = set( + name + for name, site in guide_trace.nodes.items() + if site["type"] == "sample" + if site["infer"].get("is_auxiliary") + ) + model_vars = set( + name + for name, site in model_trace.nodes.items() + if site["type"] == "sample" and not site["is_observed"] + if type(site["fn"]).__name__ != "_Subsample" + ) + enum_vars = set( + name + for name, site in model_trace.nodes.items() + if site["type"] == "sample" and not site["is_observed"] + if type(site["fn"]).__name__ != "_Subsample" + if site["infer"].get("_enumerate_dim") is not None + if name not in guide_vars + ) + if aux_vars & model_vars: + warnings.warn( + "Found auxiliary vars in the model: {}".format(aux_vars & model_vars) + ) + if not (guide_vars <= model_vars | aux_vars): + warnings.warn( + "Found non-auxiliary vars in guide but not model, " + "consider marking these infer={{'is_auxiliary': True}}:\n{}".format( + guide_vars - aux_vars - model_vars + ) + ) + if not (model_vars <= guide_vars | enum_vars): + bad_sites = model_vars - guide_vars - enum_vars + for name in bad_sites: + if model_trace.nodes[name]["infer"].get("enumerate") == "sequential": + raise NotImplementedError( + f"At site {repr(name)}, " + "model-side sequential enumeration is not implemented. " + "Try parallel enumeration or guide-side enumeration." + ) + warnings.warn(f"Found vars in model but not guide: {bad_sites}") + + # Check shapes agree. + for name in model_vars & guide_vars: + model_site = model_trace.nodes[name] + guide_site = guide_trace.nodes[name] + + if hasattr(model_site["fn"], "event_dim") and hasattr( + guide_site["fn"], "event_dim" + ): + if model_site["fn"].event_dim != guide_site["fn"].event_dim: + raise ValueError( + "Model and guide event_dims disagree at site '{}': {} vs {}".format( + name, model_site["fn"].event_dim, guide_site["fn"].event_dim + ) + ) + + if hasattr(model_site["fn"], "shape") and hasattr(guide_site["fn"], "shape"): + model_shape = model_site["fn"].shape( + *model_site["args"], **model_site["kwargs"] + ) + guide_shape = guide_site["fn"].shape( + *guide_site["args"], **guide_site["kwargs"] + ) + if model_shape == guide_shape: + continue + + # Allow broadcasting outside of max_plate_nesting. + if len(model_shape) > max_plate_nesting: + model_shape = model_shape[ + len(model_shape) - max_plate_nesting - model_site["fn"].event_dim : + ] + if len(guide_shape) > max_plate_nesting: + guide_shape = guide_shape[ + len(guide_shape) - max_plate_nesting - guide_site["fn"].event_dim : + ] + if model_shape == guide_shape: + continue + for model_size, guide_size in zip_longest( + reversed(model_shape), reversed(guide_shape), fillvalue=1 + ): + if model_size != guide_size: + raise ValueError( + "Model and guide shapes disagree at site '{}': {} vs {}".format( + name, model_shape, guide_shape + ) + ) + + # Check subsample sites introduced by plate. + model_vars = set( + name + for name, site in model_trace.nodes.items() + if site["type"] == "sample" and not site["is_observed"] + if type(site["fn"]).__name__ == "_Subsample" + ) + guide_vars = set( + name + for name, site in guide_trace.nodes.items() + if site["type"] == "sample" + if type(site["fn"]).__name__ == "_Subsample" + ) + if not (guide_vars <= model_vars): + warnings.warn( + "Found plate statements in guide but not model: {}".format( + guide_vars - model_vars + ) + ) + + # Check factor statements in guide specify has_rsample. + for name, site in guide_trace.nodes.items(): + if not site["type"] == "sample": + continue + if not site["infer"].get("is_auxiliary"): + continue + if type(site["fn"]).__name__ != "Unit": + continue + if "has_rsample" not in site["fn"].__dict__: + raise ValueError( + f'At guide site pyro.factor("{name}",...), ' + "missing specification of has_rsample. " + "Please either set has_rsample=True if the factor statement arises " + "from reparametrized sampling or has_rsample=False otherwise." + ) + + +def check_site_shape(site: "Message", max_plate_nesting: int) -> None: + actual_shape = list(site["log_prob"].shape) + + # Compute expected shape. + expected_shape: List[Optional[int]] = [] + for f in site["cond_indep_stack"]: + if f.dim is not None: + # Use the specified plate dimension, which counts from the right. + assert f.dim < 0 + if len(expected_shape) < -f.dim: + extra_shape: List[Optional[int]] = [None] * ( + -f.dim - len(expected_shape) + ) + expected_shape = extra_shape + expected_shape + if expected_shape[f.dim] is not None: + raise ValueError( + "\n ".join( + [ + 'at site "{}" within plate("{}", dim={}), dim collision'.format( + site["name"], f.name, f.dim + ), + "Try setting dim arg in other plates.", + ] + ) + ) + expected_shape[f.dim] = f.size + expected_shape = [-1 if e is None else e for e in expected_shape] + + # Check for plate stack overflow. + if len(expected_shape) > max_plate_nesting: + raise ValueError( + "\n ".join( + [ + 'at site "{}", plate stack overflow'.format(site["name"]), + "Try increasing max_plate_nesting to at least {}".format( + len(expected_shape) + ), + ] + ) + ) + + # Ignore dimensions left of max_plate_nesting. + if max_plate_nesting < len(actual_shape): + actual_shape = actual_shape[len(actual_shape) - max_plate_nesting :] + + # Check for incorrect plate placement on the right of max_plate_nesting. + for actual_size, expected_size in zip_longest( + reversed(actual_shape), reversed(expected_shape), fillvalue=1 + ): + if expected_size != -1 and expected_size != actual_size: + raise ValueError( + "\n ".join( + [ + 'at site "{}", invalid log_prob shape'.format(site["name"]), + "Expected {}, actual {}".format(expected_shape, actual_shape), + "Try one of the following fixes:", + "- enclose the batched tensor in a with pyro.plate(...): context", + "- .to_event(...) the distribution being sampled", + "- .permute() data dimensions", + ] + ) + ) + + # Check parallel dimensions on the left of max_plate_nesting. + if TYPE_CHECKING: + assert site["infer"] is not None + assert isinstance(site["fn"], TorchDistributionMixin) + enum_dim = site["infer"].get("_enumerate_dim") + if enum_dim is not None: + if ( + len(site["fn"].batch_shape) >= -enum_dim + and site["fn"].batch_shape[enum_dim] != 1 + ): + raise ValueError( + "\n ".join( + [ + 'Enumeration dim conflict at site "{}"'.format(site["name"]), + "Try increasing pyro.markov history size", + ] + ) + ) + + +def _are_independent(counters1: Dict[str, int], counters2: Dict[str, int]) -> bool: + for name, counter1 in counters1.items(): + if name in counters2: + if counters2[name] != counter1: + return True + return False + + +def check_traceenum_requirements(model_trace: "Trace", guide_trace: "Trace") -> None: + """ + Warn if user could easily rewrite the model or guide in a way that would + clearly avoid invalid dependencies on enumerated variables. + + :class:`~pyro.infer.traceenum_elbo.TraceEnum_ELBO` enumerates over + synchronized products rather than full cartesian products. Therefore models + must ensure that no variable outside of an plate depends on an enumerated + variable inside that plate. Since full dependency checking is impossible, + this function aims to warn only in cases where models can be easily + rewitten to be obviously correct. + """ + enumerated_sites = set( + name + for name, site in guide_trace.nodes.items() + if site["type"] == "sample" and site["infer"].get("enumerate") + ) + for role, trace in [("model", model_trace), ("guide", guide_trace)]: + plate_counters: Dict[str, Dict[str, int]] = {} # for sequential plates only + enumerated_contexts: Dict[FrozenSet["CondIndepStackFrame"], Set[str]] = ( + defaultdict(set) + ) + for name, site in trace.nodes.items(): + if site["type"] != "sample": + continue + plate_counter = { + f.name: f.counter for f in site["cond_indep_stack"] if not f.vectorized + } + context = frozenset(f for f in site["cond_indep_stack"] if f.vectorized) + + # Check that sites outside each independence context precede enumerated sites inside that context. + for enumerated_context, names in enumerated_contexts.items(): + if not (context < enumerated_context): + continue + names_list = sorted( + n + for n in names + if not _are_independent(plate_counter, plate_counters[n]) + ) + if not names_list: + continue + diff = sorted(f.name for f in enumerated_context - context) + warnings.warn( + "\n ".join( + [ + 'at {} site "{}", possibly invalid dependency.'.format( + role, name + ), + 'Expected site "{}" to precede sites "{}"'.format( + name, '", "'.join(sorted(names_list)) + ), + 'to avoid breaking independence of plates "{}"'.format( + '", "'.join(diff) + ), + ] + ), + RuntimeWarning, + ) + + plate_counters[name] = plate_counter + if name in enumerated_sites: + enumerated_contexts[context].add(name) + + +def check_if_enumerated(guide_trace: "Trace") -> None: + enumerated_sites = [ + name + for name, site in guide_trace.nodes.items() + if site["type"] == "sample" and site["infer"].get("enumerate") + ] + if enumerated_sites: + warnings.warn( + "\n".join( + [ + "Found sample sites configured for enumeration:" + ", ".join(enumerated_sites), + "If you want to enumerate sites, you need to use TraceEnum_ELBO instead.", + ] + ) + ) + + +@contextmanager +def ignore_jit_warnings(filter=None): + """ + Ignore JIT tracer warnings with messages that match `filter`. If + `filter` is not specified all tracer warnings are ignored. + + Note this only installs warning filters if executed within traced code. + + :param filter: A list containing either warning message (str), + or tuple consisting of (warning message (str), Warning class). + """ + if not torch._C._get_tracing_state(): + yield + return + + with warnings.catch_warnings(): + if filter is None: + warnings.filterwarnings("ignore", category=torch.jit.TracerWarning) + else: + for msg in filter: + category = torch.jit.TracerWarning + if isinstance(msg, tuple): + msg, category = msg + warnings.filterwarnings("ignore", category=category, message=msg) + yield + + +def jit_iter(tensor: torch.Tensor) -> List[torch.Tensor]: + """ + Iterate over a tensor, ignoring jit warnings. + """ + # The "Iterating over a tensor" warning is erroneously a RuntimeWarning + # so we use a custom filter here. + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", "Iterating over a tensor") + warnings.filterwarnings("ignore", category=torch.jit.TracerWarning) + return list(tensor) + + +class optional: + """ + Optionally wrap inside `context_manager` if condition is `True`. + """ + + def __init__(self, context_manager, condition): + self.context_manager = context_manager + self.condition = condition + + def __enter__(self): + if self.condition: + return self.context_manager.__enter__() + + def __exit__(self, exc_type, exc_val, exc_tb): + if self.condition: + return self.context_manager.__exit__(exc_type, exc_val, exc_tb) + + +class ExperimentalWarning(UserWarning): + pass + + +@contextmanager +def ignore_experimental_warning(): + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", category=ExperimentalWarning) + yield + + +class timed: + def __enter__(self, timer=timeit.default_timer): + self.start = timer() + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + self.end = timeit.default_timer() + self.elapsed = self.end - self.start + return self.elapsed + + +@overload +def torch_float(x: Union[float, int]) -> float: ... +@overload +def torch_float(x: torch.Tensor) -> torch.Tensor: ... +def torch_float( + x: Union[torch.Tensor, Union[float, int]], +) -> Union[torch.Tensor, float]: + return x.float() if isinstance(x, torch.Tensor) else float(x) diff --git a/pyro/source/scripts/install_pytorch.sh b/pyro/source/scripts/install_pytorch.sh new file mode 100644 index 0000000000000000000000000000000000000000..c7d5910f4da3f6a4e6546bbbf40ba8755edec611 --- /dev/null +++ b/pyro/source/scripts/install_pytorch.sh @@ -0,0 +1,57 @@ +#!/usr/bin/env bash + +# Copyright Contributors to the Pyro project. +# +# SPDX-License-Identifier: Apache-2.0 + +set -xe + + +TMP_DIR=tmp + +function _cleanup() { + [[ -d ${TMP_DIR} ]] && rm -rf ${TMP_DIR} +} + +trap _cleanup EXIT + +# Adjust as per the version used in CI. +PYTORCH_VERSION=0.4.0a0 +PYTORCH_BUILD_COMMIT=$(grep 'git checkout .* a well-tested commit' README.md | cut -f3 -d' ') + + +# Detect OS and Python version numbers. +OS=$(uname -s) +PYTHON_VERSION=$(python -c 'import sys; version=sys.version_info[:3]; print("{0}{1}".format(*version))') + +# Lookup wheel names to download +WHL_VERSION=${PYTORCH_VERSION}%2B${PYTORCH_BUILD_COMMIT} +PYTORCH_MAC_PY_27_WHL="torch-${WHL_VERSION}-cp27-cp27m-macosx_10_6_x86_64" +PYTORCH_MAC_PY_35_WHL="torch-${WHL_VERSION}-cp35-cp35m-macosx_10_6_x86_64" +PYTORCH_MAC_PY_36_WHL="torch-${WHL_VERSION}-cp36-cp36m-macosx_10_7_x86_64" +PYTORCH_LINUX_PY_27_WHL="torch-${WHL_VERSION}-cp27-cp27mu-linux_x86_64" +PYTORCH_LINUX_PY_35_WHL="torch-${WHL_VERSION}-cp35-cp35m-linux_x86_64" +PYTORCH_LINUX_PY_36_WHL="torch-${WHL_VERSION}-cp36-cp36m-linux_x86_64" + +# Cloudfront path for the builds +PYTORCH_LINUX_PREFIX="https://d2fefpcigoriu7.cloudfront.net/pytorch-build/linux-cpu" +PYTORCH_OSX_PREFIX="https://d2fefpcigoriu7.cloudfront.net/pytorch-build/mac-cpu" + + +mkdir -p ${TMP_DIR} + +if [[ ${OS} == Darwin* ]]; then + WHL_PREFIX=${PYTORCH_OSX_PREFIX} + WHL_LOOKUP=PYTORCH_MAC_PY_${PYTHON_VERSION}_WHL +elif [[ ${OS} == Linux* ]]; then + WHL_PREFIX=${PYTORCH_LINUX_PREFIX} + WHL_LOOKUP=PYTORCH_LINUX_PY_${PYTHON_VERSION}_WHL +else + echo "OS - ${OS} is not supported by the install script." + exit 1 +fi + +# Download wheel and install +curl -o tmp/"${!WHL_LOOKUP}.whl" "${WHL_PREFIX}/${!WHL_LOOKUP}.whl" + +pip install tmp/* diff --git a/pyro/source/scripts/perf_test.sh b/pyro/source/scripts/perf_test.sh new file mode 100644 index 0000000000000000000000000000000000000000..86186ad2188a3f641d75cfee6eb49a5db677c724 --- /dev/null +++ b/pyro/source/scripts/perf_test.sh @@ -0,0 +1,69 @@ +#!/usr/bin/env bash + +# Copyright Contributors to the Pyro project. +# +# SPDX-License-Identifier: Apache-2.0 + +set -xe + +function _cleanup() { + [[ ${#DIRSTACK[@]} -gt 1 ]] && popd + [[ -d ${REF_TMP_DIR} ]] && rm -rf ${REF_TMP_DIR} +} + +trap _cleanup EXIT + +# Reference is with respect to the `dev` branch, by default. +REF_HEAD=${1:-dev} +BENCHMARK_FILE=tests/perf/test_benchmark.py +IS_BENCHMARK_FILE_IN_DEV=1 +REF_TMP_DIR=.tmp_test_dir + +# Use process time whenever possible to make timing more robust +# inside of VMs or when running other processes. +PY_VERSION=$(python -c 'import sys; print(sys.version_info[0])') +if [ ${PY_VERSION} = 2 ]; then + TIMER=time.clock +else + TIMER=time.process_time +fi + +# Tests have much higher variance when run inside VMs; adjust +# the threshold accordingly. +if [ -z ${CI} ]; then + PERCENT_REGRESSION_FAILURE=10 +else + PERCENT_REGRESSION_FAILURE=20 +fi + +CURRENT_HEAD=$(git rev-parse --abbrev-ref HEAD) +# If the current state is detached head (e.g. travis), store current commit info instead. +if [ ${CURRENT_HEAD} = 'HEAD' ]; then + CURRENT_HEAD=$(git rev-parse HEAD) +fi + +# clone the repo into the temporary directory and run benchmark tests +git clone -b ${REF_HEAD} --single-branch . ${REF_TMP_DIR} +pushd ${REF_TMP_DIR} + +# Skip if benchmark utils are not on `dev` branch. +if [ -e ${BENCHMARK_FILE} ]; then + pytest -vs tests/perf/test_benchmark.py --benchmark-save=${REF_HEAD} --benchmark-name=short \ + --benchmark-columns=min,median,max --benchmark-sort=name \ + --benchmark-storage=file://../.benchmarks || echo "ERR: Failed on branch upstream/${REF_HEAD}." \ + --benchmark-timer ${TIMER} +fi + +# cd back into the current repo to run comparison benchmarks +popd + +# Run benchmark comparison - fails if the min run time is 10% less than on the ref branch. +if [ ${IS_BENCHMARK_FILE_IN_DEV} = 1 ]; then + pytest -vx tests/perf/test_benchmark.py --benchmark-compare \ + --benchmark-compare-fail=min:${PERCENT_REGRESSION_FAILURE}% \ + --benchmark-name=short --benchmark-columns=min,median,max --benchmark-sort=name \ + --benchmark-timer ${TIMER} +else + pytest -vx tests/perf/test_benchmark.py --benchmark-name=short --benchmark-columns=min,median,max \ + --benchmark-sort=name --benchmark-timer ${TIMER} +fi diff --git a/pyro/source/scripts/profile_model.sh b/pyro/source/scripts/profile_model.sh new file mode 100644 index 0000000000000000000000000000000000000000..b2a1005e4de2a197d7b209d900e14ba12489623b --- /dev/null +++ b/pyro/source/scripts/profile_model.sh @@ -0,0 +1,55 @@ +#!/usr/bin/env bash + +# Copyright Contributors to the Pyro project. +# +# SPDX-License-Identifier: Apache-2.0 + +set -xe + +function _cleanup() { + [[ ${#DIRSTACK[@]} -gt 1 ]] && popd + [[ -d ${REF_TMP_DIR} ]] && rm -rf ${REF_TMP_DIR} +} + +trap _cleanup EXIT + +# Reference is with respect to the `dev` branch, by default. +REF_HEAD=${1:-dev} +REF_COMMIT=$(git rev-parse --short HEAD) +BENCHMARK_FILE=tests/perf/test_benchmark.py +BENCHMARK_DIR=$( cd $(dirname "$0")/../.benchmarks ; pwd -P ) +REF_TMP_DIR=.tmp_test_dir + +CURRENT_HEAD=$(git rev-parse --abbrev-ref HEAD) +CURRENT_COMMIT=$(git rev-parse --short HEAD) +# If the current state is detached head, store current commit info instead. +if [ ${CURRENT_HEAD} = 'HEAD' ]; then + CURRENT_HEAD=$(git rev-parse HEAD) +fi + +# clone the repo into the temporary directory and run benchmark tests +git clone -b ${REF_HEAD} --single-branch . ${REF_TMP_DIR} +pushd ${REF_TMP_DIR} + +# Skip if benchmark utils are not on `dev` branch. +if [ -e ${BENCHMARK_FILE} ]; then + python tests/perf/test_benchmark.py --models "${@:2}" --suffix ${REF_HEAD}${REF_COMMIT} \ + --benchmark_dir ${BENCHMARK_DIR} || echo "ERR: Failed on branch upstream/${REF_HEAD}." +fi + +# cd back into the current repo to run comparison benchmarks +popd + +# Run profiling on current commit +python tests/perf/test_benchmark.py --models "${@:2}" --suffix ${CURRENT_HEAD}${CURRENT_COMMIT} + +set +x + +for filename in .benchmarks/*.prof; do + for model in "${@:2}"; do + # Open the two profiles in snakeviz + if [[ "${filename}" =~ .*${model}.*(${CURRENT_COMMIT}.prof|${REF_COMMIT}).prof ]]; then + snakeviz ${filename} &>/dev/null & + fi + done +done diff --git a/pyro/source/scripts/update_headers.py b/pyro/source/scripts/update_headers.py new file mode 100644 index 0000000000000000000000000000000000000000..48ccf2dfb80c67c0b2192184d78d6a50b4d5f0a4 --- /dev/null +++ b/pyro/source/scripts/update_headers.py @@ -0,0 +1,77 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import argparse +import glob +import os +import sys + +root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +blacklist = ["/build/", "/dist/", "/pyro/_version.py"] +file_types = [ + ("*.py", "# {}"), + ("*.cpp", "// {}"), +] + +parser = argparse.ArgumentParser() +parser.add_argument("--check", action="store_true") +args = parser.parse_args() +dirty = [] + +for basename, comment in file_types: + copyright_line = comment.format("Copyright Contributors to the Pyro project.\n") + # See https://spdx.org/ids-how + spdx_line = comment.format("SPDX-License-Identifier: Apache-2.0\n") + + filenames = glob.glob(os.path.join(root, "**", basename), recursive=True) + filenames.sort() + filenames = [ + filename + for filename in filenames + if not any(word in filename for word in blacklist) + ] + for filename in filenames: + with open(filename) as f: + lines = f.readlines() + + # Ignore empty files like __init__.py + if all(line.isspace() for line in lines): + continue + + # Ensure first few line are copyright notices. + changed = False + lineno = 0 + if not lines[lineno].startswith(comment.format("Copyright")): + lines.insert(lineno, copyright_line) + changed = True + lineno += 1 + while lines[lineno].startswith(comment.format("Copyright")): + lineno += 1 + + # Ensure next line is an SPDX short identifier. + if not lines[lineno].startswith(comment.format("SPDX-License-Identifier")): + lines.insert(lineno, spdx_line) + changed = True + lineno += 1 + + # Ensure next line is blank. + if not lines[lineno].isspace(): + lines.insert(lineno, "\n") + changed = True + + if not changed: + continue + + if args.check: + dirty.append(filename) + continue + + with open(filename, "w") as f: + f.write("".join(lines)) + + print("updated {}".format(filename[len(root) + 1 :])) + +if dirty: + print("The following files need license headers:\n{}".format("\n".join(dirty))) + print("Please run 'make license'") + sys.exit(1) diff --git a/pyro/source/scripts/update_version.py b/pyro/source/scripts/update_version.py new file mode 100644 index 0000000000000000000000000000000000000000..1b95080b3261b4f68a0999a9758a1a0298240922 --- /dev/null +++ b/pyro/source/scripts/update_version.py @@ -0,0 +1,36 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import glob +import os +import re + +root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + +# Get new version. +with open(os.path.join(root, "pyro", "__init__.py")) as f: + for line in f: + if line.startswith("version_prefix ="): + new_version = line.strip().split()[-1] + +# Collect potential files. +filenames = [] +for path in ["examples", "tutorial/source"]: + for ext in ["*.py", "*.ipynb"]: + filenames.extend(glob.glob(os.path.join(root, path, "**", ext), recursive=True)) +filenames.sort() + +# Update version string. +pattern1 = re.compile('assert pyro.__version__.startswith\\("[^"]*"\\)') +pattern2 = re.compile("assert pyro.__version__.startswith\\('[^']*'\\)") +text1 = f"assert pyro.__version__.startswith({new_version})" +text2 = text1.replace('"', "'") +for filename in filenames: + with open(filename) as f: + old_text = f.read() + new_text = pattern1.sub(text1, old_text) + new_text = pattern2.sub(text2, new_text) + if new_text != old_text: + print("updating {}".format(filename)) + with open(filename, "w") as f: + f.write(new_text) diff --git a/pyro/source/setup.cfg b/pyro/source/setup.cfg new file mode 100644 index 0000000000000000000000000000000000000000..b21884cb873b34143d6f9378b7bf8319e7b900ff --- /dev/null +++ b/pyro/source/setup.cfg @@ -0,0 +1,113 @@ +# Copyright Contributors to the Pyro project. +# +# SPDX-License-Identifier: Apache-2.0 + +[tool:pytest] +filterwarnings = error + ignore:numpy.ufunc size changed:RuntimeWarning + ignore:numpy.dtype size changed:RuntimeWarning + ignore:Mixed memory format inputs detected:UserWarning + ignore:Setting attributes on ParameterDict:UserWarning + ignore:Creating a tensor from a list of numpy.ndarrays is extremely slow + ignore::DeprecationWarning + ignore:CUDA initialization:UserWarning + ignore:__floordiv__ is deprecated:UserWarning + ignore:floor_divide is deprecated:UserWarning + ignore:torch.tensor results are registered as constants in the trace + once::DeprecationWarning + +doctest_optionflags = ELLIPSIS NORMALIZE_WHITESPACE IGNORE_EXCEPTION_DETAIL + +markers = + benchmark + +[yapf] +based_on_style = google +column_limit = 120 + +# Global options: + +[mypy] +python_version = 3.8 +explicit_package_bases = True +warn_return_any = True +warn_unused_configs = True +warn_incomplete_stub = True +ignore_missing_imports = True +warn_unreachable = True + +# Per-module options: + +[mypy-pyro._version.*] +ignore_errors = True + +[mypy-pyro.contrib.*] +ignore_errors = True + +[mypy-pyro.distributions.*] +ignore_errors = True +warn_unused_ignores = True + +[mypy-pyro.generic.*] +ignore_errors = True +warn_unused_ignores = True + +[mypy-pyro.infer.*] +ignore_errors = True +warn_unused_ignores = True + +[mypy-pyro.ops.einsum] +ignore_errors = True +warn_unused_ignores = True + +[mypy-pyro.ops.contract] +ignore_errors = True +warn_unused_ignores = True + +[mypy-pyro.ops.tensor_utils] +ignore_errors = True +warn_unused_ignores = True + +[mypy-pyro.optim.*] +ignore_errors = True +warn_unused_ignores = True + +[mypy-tests.test_primitives] +ignore_errors = True +warn_unused_ignores = True + +[mypy-tests.test_generic] +ignore_errors = True +warn_unused_ignores = True + +[mypy-tests.poutine.*] +ignore_errors = True +warn_unused_ignores = True + +[mypy-tests.ops.*] +ignore_errors = True +warn_unused_ignores = True + +[mypy-tests.optim.*] +ignore_errors = True +warn_unused_ignores = True + +[mypy-tests.perf.*] +ignore_errors = True +warn_unused_ignores = True + +[mypy-tests.nn.*] +ignore_errors = True +warn_unused_ignores = True + +[mypy-tests.infer.*] +ignore_errors = True +warn_unused_ignores = True + +[mypy-tests.distributions.*] +ignore_errors = True +warn_unused_ignores = True + +[mypy-tests.contrib.*] +ignore_errors = True +warn_unused_ignores = True diff --git a/pyro/source/setup.py b/pyro/source/setup.py new file mode 100644 index 0000000000000000000000000000000000000000..10e986b99494cd987a940161c6b9342c30571c08 --- /dev/null +++ b/pyro/source/setup.py @@ -0,0 +1,163 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import os +import subprocess +import sys + +from setuptools import find_packages, setup + +PROJECT_PATH = os.path.dirname(os.path.abspath(__file__)) +VERSION = """ +# This file is auto-generated with the version information during setup.py installation. + +__version__ = '{}' +""" + +# Find pyro version. +for line in open(os.path.join(PROJECT_PATH, "pyro", "__init__.py")): + if line.startswith("version_prefix = "): + version = line.strip().split()[2][1:-1] + +# Append current commit sha to version +commit_sha = "" +try: + current_tag = ( + subprocess.check_output(["git", "tag", "--points-at", "HEAD"], cwd=PROJECT_PATH) + .decode("ascii") + .strip() + ) + # only add sha if HEAD does not point to the release tag + if not current_tag == version: + commit_sha = ( + subprocess.check_output( + ["git", "rev-parse", "--short", "HEAD"], cwd=PROJECT_PATH + ) + .decode("ascii") + .strip() + ) +# catch all exception to be safe +except Exception: + pass # probably not a git repo + +# Write version to _version.py +if commit_sha: + version += "+{}".format(commit_sha) +with open(os.path.join(PROJECT_PATH, "pyro", "_version.py"), "w") as f: + f.write(VERSION.format(version)) + + +# READ README.md for long description on PyPi. +# This requires uploading via twine, e.g.: +# $ python setup.py sdist bdist_wheel +# $ twine upload --repository-url https://test.pypi.org/legacy/ dist/* # test version +# $ twine upload dist/* +try: + long_description = open("README.md", encoding="utf-8").read() +except Exception as e: + sys.stderr.write("Failed to read README.md: {}\n".format(e)) + sys.stderr.flush() + long_description = "" + +# Remove badges since they will always be obsolete. +# This assumes the first 12 lines contain badge info. +long_description = "\n".join([str(line) for line in long_description.split("\n")[12:]]) + +# examples/tutorials +EXTRAS_REQUIRE = [ + "notebook", + "ipywidgets", + "graphviz>=0.8", + "matplotlib>=1.3", + "torchvision>=0.15.0", + "visdom>=0.1.4,<0.2.2", # FIXME visdom.utils is unavailable >=0.2.2 + "pandas", + "pillow>=8.3.1", # https://github.com/pytorch/pytorch/issues/61125 + "scikit-learn", + "seaborn>=0.11.0", + "wget", + "scipy>=1.1", + # 'biopython>=1.54', + # 'scanpy>=1.4', # Requires HDF5 + # 'scvi>=0.6', # Requires loopy and other fragile packages +] + +setup( + name="pyro-ppl", + version=version, + description="A Python library for probabilistic modeling and inference", + long_description=long_description, + long_description_content_type="text/markdown", + packages=find_packages(include=["pyro", "pyro.*"]), + package_data={ + "pyro": ["py.typed"], + "pyro.distributions": ["*.cpp"], + }, + author="Uber AI Labs", + url="http://pyro.ai", + project_urls={ + "Documentation": "https://docs.pyro.ai", + "Source": "https://github.com/pyro-ppl/pyro", + }, + install_requires=[ + # if you add any additional libraries, please also + # add them to `docs/requirements.txt` + # numpy is necessary for some functionality of PyTorch + "numpy>=1.7", + "opt_einsum>=2.3.2", + "pyro-api>=0.1.1", + "torch>=2.0", + "tqdm>=4.36", + ], + extras_require={ + "extras": EXTRAS_REQUIRE, + "test": EXTRAS_REQUIRE + + [ + "black>=21.4b0", + "nbval", + "pytest-cov", + "pytest-xdist", + "pytest>=5.0", + "ruff", + ], + "profile": ["prettytable", "pytest-benchmark", "snakeviz"], + "dev": EXTRAS_REQUIRE + + [ + "black>=21.4b0", + "mypy>=0.812", + "nbformat", + "nbsphinx>=0.3.2", + "nbstripout", + "nbval", + "ninja", + "pypandoc", + "pytest-xdist", + "pytest>=5.0", + "ruff", + "sphinx", + "sphinx_rtd_theme", + "yapf", + ], + "horovod": ["horovod[pytorch]>=0.19"], + "lightning": ["lightning"], + "funsor": [ + "funsor[torch]==0.4.4", + ], + }, + python_requires=">=3.8", + keywords="machine learning statistics probabilistic programming bayesian modeling pytorch", + license="Apache 2.0", + classifiers=[ + "Intended Audience :: Developers", + "Intended Audience :: Education", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: Apache Software License", + "Operating System :: POSIX :: Linux", + "Operating System :: MacOS :: MacOS X", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + ], + # yapf +) diff --git a/pyro/source/tests/README.md b/pyro/source/tests/README.md new file mode 100644 index 0000000000000000000000000000000000000000..a6fc03918e66ad3a44b66e51877313540f51c71c --- /dev/null +++ b/pyro/source/tests/README.md @@ -0,0 +1,44 @@ + + +# Testing + +### Building PyTorch binaries for Travis CI + +The Pyro development on `dev` branch may use the latest features that are not present in the +release version of PyTorch. As such, these features need to be tested against PyTorch's master +branch rather than the release branch, which may be a few months older. + +For this, we need to build PyTorch binaries on a need-be basis, and upload them to an S3 bucket, +from which these binaries can be pulled in by CI machines to build Pyro's `dev` branch. Note that +to build small sized binaries, we remove all CUDA dependencies, but have statically linked MKL +libraries which are not present on CI machines otherwise. + +We use the scripts in the [PyTorch builder](https://github.com/pytorch/builder) repo for this. +In particular, use the following instructions for building the binaries: + - Clone the [PyTorch builder](https://github.com/pytorch/builder) repo on your local system. + - Under the `manywheel` directory, run a docker container: + ```sh + cd manywheel + docker run -it --ipc=host --rm -v $(pwd):/remote soumith/manylinux-cuda80:latest bash + ``` + - Modify the `build_cpu.sh` script as follows: + - Remove all environment variables declared in the beginning of the script, except for + `NO_CUDA` and `CMAKE_LIBRARY_PATH`. + - Instead of checking out the version tag through `git checkout tags/v${PYTORCH_BUILD_VERSION}`, + check out the commit/branch you would like to build. + - We need to update `cmake` to version 3 to build PyTorch master: + ```sh + yum install epel-release + yum install cmake3 + yum remove cmake
 + ln -s /usr/bin/cmake3 /usr/bin/cmake + ``` + - Then run, `./build_cpu.sh` under the `remote` folder, which will create the required binaries + in `/wheelhouse` directory. + - Upload the binaries for python 2.7 (`torch*cp27mu*.whl`) and python 3.5 (`torch*cp35m*.whl`) + to the S3 bucket `s3://pyro-ppl/ci` with public read permissions. + \ No newline at end of file diff --git a/pyro/source/tests/__init__.py b/pyro/source/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..04f37403cbd476880d43ea21b699f4154b541420 --- /dev/null +++ b/pyro/source/tests/__init__.py @@ -0,0 +1,9 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging +import os + +# create log handler for tests +level = logging.INFO if "CI" in os.environ else logging.DEBUG +logging.basicConfig(format="%(levelname).1s \t %(message)s", level=level) diff --git a/pyro/source/tests/common.py b/pyro/source/tests/common.py new file mode 100644 index 0000000000000000000000000000000000000000..55ddddbe4a0afbd6865bc366227d123a5906a946 --- /dev/null +++ b/pyro/source/tests/common.py @@ -0,0 +1,296 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import contextlib +import numbers +import os +import re +import warnings +from itertools import product + +import numpy as np +import pytest +import torch +import torch.cuda +from numpy.testing import assert_allclose +from pytest import approx + +""" +Contains test utilities for assertions, approximate comparison (of tensors and other objects). + +Code has been largely adapted from pytorch/test/common.py +Source: https://github.com/pytorch/pytorch/blob/master/test/common.py +""" + +TESTS_DIR = os.path.dirname(os.path.abspath(__file__)) +RESOURCE_DIR = os.path.join(TESTS_DIR, "resources") +EXAMPLES_DIR = os.path.join(os.path.dirname(TESTS_DIR), "examples") +TEST_FAILURE_RATE = 2e-5 # For all goodness-of-fit tests. + + +def xfail_param(*args, **kwargs): + kwargs.setdefault("reason", "unknown") + return pytest.param(*args, marks=[pytest.mark.xfail(**kwargs)]) + + +def str_erase_pointers(x): + """ + Print a string representation of ``x`` but remove pointers from function + names, since the pointers have different values on different pytest xdist + workers and break test collection. This is useful as the ``ids`` arg to + ``@pytest.mark.parametrize``. + """ + return re.sub(" at 0x[a-f0-9]+", "", str(x)) + + +def skipif_param(*args, **kwargs): + return pytest.param(*args, marks=[pytest.mark.skipif(**kwargs)]) + + +def suppress_warnings(fn): + def wrapper(*args, **kwargs): + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + fn(*args, **kwargs) + + return wrapper + + +requires_cuda = pytest.mark.skipif( + not torch.cuda.is_available(), reason="cuda is not available" +) + +try: + import horovod +except ImportError: + horovod = None +requires_horovod = pytest.mark.skipif( + horovod is None, reason="horovod is not available" +) + +try: + import lightning +except ImportError: + lightning = None +requires_lightning = pytest.mark.skipif( + lightning is None, reason="pytorch lightning is not available" +) + +try: + import funsor +except ImportError: + funsor = None +requires_funsor = pytest.mark.skipif(funsor is None, reason="funsor is not available") + + +def get_cpu_type(t): + assert t.__module__ == "torch.cuda" + return getattr(torch, t.__class__.__name__) + + +def get_gpu_type(t): + assert t.__module__ == "torch" + return getattr(torch.cuda, t.__name__) + + +@contextlib.contextmanager +def default_dtype(dtype): + """ + Context manager to temporarily set PyTorch default dtype. + + :param str host: Either "cuda" or "cpu". + """ + old = torch.get_default_dtype() + try: + torch.set_default_dtype(dtype) + yield + finally: + torch.set_default_dtype(old) + + +@contextlib.contextmanager +def freeze_rng_state(): + rng_state = torch.get_rng_state() + if torch.cuda.is_available(): + cuda_rng_state = torch.cuda.get_rng_state() + yield + if torch.cuda.is_available(): + torch.cuda.set_rng_state(cuda_rng_state) + torch.set_rng_state(rng_state) + + +@contextlib.contextmanager +def xfail_if_not_implemented(msg="Not implemented"): + try: + yield + except NotImplementedError as e: + pytest.xfail(reason="{}: {}".format(msg, e)) + + +def iter_indices(tensor): + if tensor.dim() == 0: + return range(0) + if tensor.dim() == 1: + return range(tensor.size(0)) + return product(*(range(s) for s in tensor.size())) + + +def is_iterable(obj): + try: + iter(obj) + return True + except BaseException: + return False + + +def assert_tensors_equal(a, b, prec=0.0, msg=""): + assert a.size() == b.size(), msg + if isinstance(prec, numbers.Number) and prec == 0: + assert (a == b).all(), msg + return + if a.numel() == 0 and b.numel() == 0: + return + b = b.type_as(a) + b = b.cuda(device=a.get_device()) if a.is_cuda else b.cpu() + if not a.dtype.is_floating_point: + assert (a == b).all(), msg + return + # check that NaNs are in the same locations + nan_mask = a != a + assert torch.equal(nan_mask, b != b), msg + diff = a - b + diff[a == b] = 0 # handle inf + diff[nan_mask] = 0 + if diff.is_signed(): + diff = diff.abs() + if isinstance(prec, torch.Tensor): + assert (diff <= prec).all(), msg + else: + max_err = diff.max().item() + assert max_err <= prec, msg + + +def _safe_coalesce(t): + tc = t.coalesce() + value_map = {} + for idx, val in zip(t._indices().t(), t._values()): + idx_tup = tuple(idx) + if idx_tup in value_map: + value_map[idx_tup] += val + else: + value_map[idx_tup] = val.clone() if torch.is_tensor(val) else val + + new_indices = sorted(list(value_map.keys())) + new_values = [value_map[idx] for idx in new_indices] + if t._values().dim() < 2: + new_values = t._values().new_tensor(new_values) + else: + new_values = torch.stack(new_values) + + new_indices = t._indices().new_tensor(new_indices).t() + tg = t.new(new_indices, new_values, t.size()) + + assert (tc._indices() == tg._indices()).all() + assert (tc._values() == tg._values()).all() + return tg + + +def assert_close(actual, expected, atol=1e-7, rtol=0, msg=""): + if not msg: + msg = "{} vs {}".format(actual, expected) + if isinstance(actual, numbers.Number) and isinstance(expected, numbers.Number): + assert actual == approx(expected, abs=atol, rel=rtol), msg + # Placing this as a second check allows for coercing of numeric types above; + # this can be moved up to harden type checks. + elif type(actual) != type(expected): + raise AssertionError( + "cannot compare {} and {}".format(type(actual), type(expected)) + ) + elif torch.is_tensor(actual) and torch.is_tensor(expected): + prec = atol + rtol * abs(expected) if rtol > 0 else atol + assert actual.is_sparse == expected.is_sparse, msg + if actual.is_sparse: + x = _safe_coalesce(actual) + y = _safe_coalesce(expected) + assert_tensors_equal(x._indices(), y._indices(), prec, msg) + assert_tensors_equal(x._values(), y._values(), prec, msg) + else: + assert_tensors_equal(actual, expected, prec, msg) + elif type(actual) == np.ndarray and type(expected) == np.ndarray: + assert_allclose( + actual, expected, atol=atol, rtol=rtol, equal_nan=True, err_msg=msg + ) + elif isinstance(actual, numbers.Number) and isinstance(y, numbers.Number): + assert actual == approx(expected, abs=atol, rel=rtol), msg + elif isinstance(actual, dict): + assert set(actual.keys()) == set(expected.keys()) + for key, x_val in actual.items(): + assert_close( + x_val, + expected[key], + atol=atol, + rtol=rtol, + msg="At key {}: {} vs {}".format(repr(key), x_val, expected[key]), + ) + elif isinstance(actual, str): + assert actual == expected, msg + elif is_iterable(actual) and is_iterable(expected): + assert len(actual) == len(expected), msg + for xi, yi in zip(actual, expected): + assert_close(xi, yi, atol=atol, rtol=rtol, msg="{} vs {}".format(xi, yi)) + else: + assert actual == expected, msg + + +# TODO: Remove `prec` arg, and move usages to assert_close +def assert_equal(actual, expected, prec=1e-5, msg=""): + if prec > 0.0: + return assert_close(actual, expected, atol=prec, msg=msg) + if not msg: + msg = "{} vs {}".format(actual, expected) + if isinstance(actual, numbers.Number) and isinstance(expected, numbers.Number): + assert actual == expected, msg + # Placing this as a second check allows for coercing of numeric types above; + # this can be moved up to harden type checks. + elif type(actual) != type(expected): + raise AssertionError( + "cannot compare {} and {}".format(type(actual), type(expected)) + ) + elif torch.is_tensor(actual) and torch.is_tensor(expected): + assert actual.is_sparse == expected.is_sparse, msg + if actual.is_sparse: + x = _safe_coalesce(actual) + y = _safe_coalesce(expected) + assert_tensors_equal(x._indices(), y._indices(), msg=msg) + assert_tensors_equal(x._values(), y._values(), msg=msg) + else: + assert_tensors_equal(actual, expected, msg=msg) + elif type(actual) == np.ndarray and type(actual) == np.ndarray: + assert (actual == expected).all(), msg + elif isinstance(actual, dict): + assert set(actual.keys()) == set(expected.keys()) + for key, x_val in actual.items(): + assert_equal( + x_val, + expected[key], + prec=0.0, + msg="At key{}: {} vs {}".format(key, x_val, expected[key]), + ) + elif isinstance(actual, str): + assert actual == expected, msg + elif is_iterable(actual) and is_iterable(expected): + assert len(actual) == len(expected), msg + for xi, yi in zip(actual, expected): + assert_equal(xi, yi, prec=0.0, msg="{} vs {}".format(xi, yi)) + else: + assert actual == expected, msg + + +def assert_not_equal(x, y, prec=1e-5, msg=""): + try: + assert_equal(x, y, prec) + except AssertionError: + return + raise AssertionError( + "{} \nValues are equal: x={}, y={}, prec={}".format(msg, x, y, prec) + ) diff --git a/pyro/source/tests/conftest.py b/pyro/source/tests/conftest.py new file mode 100644 index 0000000000000000000000000000000000000000..94b647922200f8070df0f37ab9af3335fbab3b1e --- /dev/null +++ b/pyro/source/tests/conftest.py @@ -0,0 +1,115 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import os +import warnings + +import pytest +import torch + +import pyro + +DTYPE = getattr(torch, os.environ.get("PYRO_DTYPE", "float64")) +torch.set_default_dtype(DTYPE) +torch.set_default_device(os.environ.get("PYRO_DEVICE", "cpu")) + + +def pytest_configure(config): + config.addinivalue_line( + "markers", "init(rng_seed): initialize the RNG using the seed provided." + ) + config.addinivalue_line( + "markers", "stage(NAME): mark test to run when testing stage matches NAME." + ) + config.addinivalue_line( + "markers", "disable_validation: disable all validation on this test." + ) + + +def pytest_runtest_setup(item): + pyro.clear_param_store() + if item.get_closest_marker("disable_validation"): + pyro.enable_validation(False) + else: + pyro.enable_validation(True) + test_initialize_marker = item.get_closest_marker("init") + if test_initialize_marker: + rng_seed = test_initialize_marker.kwargs["rng_seed"] + pyro.set_rng_seed(rng_seed) + + +def pytest_addoption(parser): + parser.addoption( + "--stage", + action="append", + metavar="NAME", + default=[], + help="Only run tests matching the stage NAME.", + ) + + parser.addoption( + "--lax", + action="store_true", + default=False, + help="Ignore AssertionError when running tests.", + ) + + +def _get_highest_specificity_marker(stage_marker): + """ + Get the most specific stage marker corresponding to the test. Specificity + of test function marker is the highest, followed by test class marker and + module marker. + + :return: List of most specific stage markers for the test. + """ + is_test_collected = False + selected_stages = [] + try: + for marker in stage_marker: + selected_stages = list(marker.args) + is_test_collected = True + break + except TypeError: + selected_stages = list(stage_marker.args) + is_test_collected = True + if not is_test_collected: + raise RuntimeError("stage marker needs at least one stage to be specified.") + return selected_stages + + +def _add_marker(marker, items): + for item in items: + item.add_marker(marker) + + +def pytest_collection_modifyitems(config, items): + test_stages = set(config.getoption("--stage")) + + # add dynamic markers + lax = config.getoption("--lax") + if lax: + _add_marker(pytest.mark.xfail(raises=AssertionError), items) + + # select / deselect tests based on stage criterion + if not test_stages or "all" in test_stages: + return + selected_items = [] + deselected_items = [] + for item in items: + stage_marker = item.get_closest_marker("stage") + if not stage_marker: + selected_items.append(item) + warnings.warn( + "No stage associated with the test {}. Will run on each stage invocation.".format( + item.name + ) + ) + continue + item_stage_markers = _get_highest_specificity_marker(stage_marker) + if test_stages.isdisjoint(item_stage_markers): + deselected_items.append(item) + else: + selected_items.append(item) + config.hook.pytest_deselected(items=deselected_items) + items[:] = selected_items diff --git a/pyro/source/tests/contrib/__init__.py b/pyro/source/tests/contrib/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/tests/contrib/autoname/test_autoname.py b/pyro/source/tests/contrib/autoname/test_autoname.py new file mode 100644 index 0000000000000000000000000000000000000000..753c3b5155f2b17ad729130cf91b9caaf2e94f41 --- /dev/null +++ b/pyro/source/tests/contrib/autoname/test_autoname.py @@ -0,0 +1,372 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +import pyro +import pyro.distributions.torch as dist +import pyro.poutine as poutine +from pyro.contrib.autoname import autoname, sample + + +def test_basic_scope(): + @autoname + def f1(): + sample(dist.Normal(0, 1)) + return sample(dist.Bernoulli(0.5)) + + @autoname(name="model") + def f2(): + sample("x", dist.Bernoulli(0.5)) + return sample(dist.Normal(0.0, 1.0)) + + tr1 = poutine.trace(f1).get_trace() + assert "f1/Normal" in tr1.nodes + assert "f1/Bernoulli" in tr1.nodes + + tr2 = poutine.trace(f2).get_trace() + assert "model/x" in tr2.nodes + assert "model/Normal" in tr2.nodes + + +def test_repeat_names(): + @autoname + def f1(): + sample(dist.Normal(0, 1)) + sample(dist.Normal(0, 1)) + return sample(dist.Bernoulli(0.5)) + + @autoname(name="model") + def f2(): + sample("x", dist.Bernoulli(0.5)) + sample("x", dist.Bernoulli(0.5)) + sample("x", dist.Bernoulli(0.5)) + return sample(dist.Normal(0.0, 1.0)) + + tr1 = poutine.trace(f1).get_trace() + assert "f1/Normal" in tr1.nodes + assert "f1/Normal1" in tr1.nodes + assert "f1/Bernoulli" in tr1.nodes + + tr2 = poutine.trace(f2).get_trace() + assert "model/x" in tr2.nodes + assert "model/x1" in tr2.nodes + assert "model/x2" in tr2.nodes + assert "model/Normal" in tr2.nodes + + +def test_compose_scopes(): + @autoname + def f1(): + return sample(dist.Bernoulli(0.5)) + + @autoname + def f2(): + f1() + return sample(dist.Bernoulli(0.5)) + + @autoname + def f3(): + f1() + f1() + f1() + f2() + return sample(dist.Normal(0, 1)) + + tr1 = poutine.trace(f1).get_trace() + assert "f1/Bernoulli" in tr1.nodes + + tr2 = poutine.trace(f2).get_trace() + assert "f2/f1/Bernoulli" in tr2.nodes + assert "f2/Bernoulli" in tr2.nodes + + tr3 = poutine.trace(f3).get_trace() + assert "f3/f1/Bernoulli" in tr3.nodes + assert "f3/f1__1/Bernoulli" in tr3.nodes + assert "f3/f1__2/Bernoulli" in tr3.nodes + assert "f3/f2/f1/Bernoulli" in tr3.nodes + assert "f3/f2/Bernoulli" in tr3.nodes + assert "f3/Normal" in tr3.nodes + + +def test_basic_loop(): + @autoname + def f1(): + return sample(dist.Bernoulli(0.5)) + + @autoname(name="model") + def f2(): + f1() + for i in range(3): + f1() + sample("x", dist.Bernoulli(0.5)) + return sample(dist.Normal(0.0, 1.0)) + + tr = poutine.trace(f2).get_trace() + assert "model/f1/Bernoulli" in tr.nodes + assert "model/f1__1/Bernoulli" in tr.nodes + assert "model/f1__2/Bernoulli" in tr.nodes + assert "model/f1__3/Bernoulli" in tr.nodes + assert "model/x" in tr.nodes + assert "model/x1" in tr.nodes + assert "model/x2" in tr.nodes + assert "model/Normal" in tr.nodes + + +def test_named_loop(): + @autoname + def f1(): + return sample(dist.Bernoulli(0.5)) + + @autoname(name="model") + def f2(): + f1() + # for i in autoname(name="loop")(range(3)): <- this works too + for i in autoname(range(3), name="loop"): + f1() + sample("x", dist.Bernoulli(0.5)) + return sample(dist.Normal(0.0, 1.0)) + + tr = poutine.trace(f2).get_trace() + assert "model/f1/Bernoulli" in tr.nodes + assert "model/loop/f1/Bernoulli" in tr.nodes + assert "model/loop__1/f1/Bernoulli" in tr.nodes + assert "model/loop__2/f1/Bernoulli" in tr.nodes + assert "model/loop/x" in tr.nodes + assert "model/loop__1/x" in tr.nodes + assert "model/loop__2/x" in tr.nodes + assert "model/Normal" in tr.nodes + + +def test_sequential_plate(): + @autoname + def f1(): + return sample(dist.Bernoulli(0.5)) + + @autoname(name="model") + def f2(): + for i in autoname(pyro.plate(name="data", size=3)): + f1() + return sample(dist.Bernoulli(0.5)) + + expected_names = [ + "model/data/f1/Bernoulli", + "model/data__1/f1/Bernoulli", + "model/data__2/f1/Bernoulli", + "model/Bernoulli", + ] + + tr = poutine.trace(f2).get_trace() + actual_names = [ + name + for name, node in tr.nodes.items() + if node["type"] == "sample" and type(node["fn"]).__name__ != "_Subsample" + ] + assert expected_names == actual_names + + +def test_nested_plate(): + @autoname + def f1(): + return sample(dist.Bernoulli(0.5)) + + @autoname(name="model") + def f2(): + for i in autoname(pyro.plate(name="data", size=3)): + for j in autoname(range(2), name="xy"): + f1() + return sample(dist.Bernoulli(0.5)) + + expected_names = [ + "model/data/xy/f1/Bernoulli", + "model/data/xy__1/f1/Bernoulli", + "model/data__1/xy/f1/Bernoulli", + "model/data__1/xy__1/f1/Bernoulli", + "model/data__2/xy/f1/Bernoulli", + "model/data__2/xy__1/f1/Bernoulli", + "model/Bernoulli", + ] + + tr = poutine.trace(f2).get_trace() + actual_names = [ + name + for name, node in tr.nodes.items() + if node["type"] == "sample" and type(node["fn"]).__name__ != "_Subsample" + ] + assert expected_names == actual_names + + +def test_model_guide(): + @autoname + def model(): + sample("x", dist.HalfNormal(1)) + return sample(dist.Bernoulli(0.5)) + + @autoname(name="model") + def guide(): + sample("x", dist.Gamma(1, 1)) + return sample(dist.Bernoulli(0.5)) + + model_tr = poutine.trace(model).get_trace() + guide_tr = poutine.trace(guide).get_trace() + assert "model/x" in model_tr.nodes + assert "model/x" in guide_tr.nodes + assert "model/Bernoulli" in model_tr.nodes + assert "model/Bernoulli" in guide_tr.nodes + + +def test_context_manager(): + @autoname + def f1(): + return sample(dist.Bernoulli(0.5)) + + def f2(): + with autoname(name="prefix"): + f1() + f1() + + tr2 = poutine.trace(f2).get_trace() + assert "prefix/f1/Bernoulli" in tr2.nodes + assert "prefix/f1__1/Bernoulli" in tr2.nodes + + +# tests copied from test_scope.py +def test_multi_nested(): + @autoname + def model1(r=True): + model2() + model2() + with autoname(name="inter"): + model2() + if r: + model1(r=False) + model2() + + @autoname + def model2(): + return sample("y", dist.Normal(0.0, 1.0)) + + expected_names = [ + "model1/model2/y", + "model1/model2__1/y", + "model1/inter/model2/y", + "model1/inter/model1/model2/y", + "model1/inter/model1/model2__1/y", + "model1/inter/model1/inter/model2/y", + "model1/inter/model1/model2__2/y", + "model1/model2__2/y", + ] + + tr = poutine.trace(model1).get_trace(r=True) + actual_names = [ + name + for name, node in tr.nodes.items() + if node["type"] == "sample" and type(node["fn"]).__name__ != "_Subsample" + ] + assert expected_names == actual_names + + +def test_recur_multi(): + @autoname + def model1(r=True): + model2() + with autoname(name="inter"): + model2() + if r: + model1(r=False) + model2() + + @autoname + def model2(): + return sample("y", dist.Normal(0.0, 1.0)) + + expected_names = [ + "model1/model2/y", + "model1/inter/model2/y", + "model1/inter/model1/model2/y", + "model1/inter/model1/inter/model2/y", + "model1/inter/model1/model2__1/y", + "model1/model2__1/y", + ] + + tr = poutine.trace(model1).get_trace() + actual_names = [ + name + for name, node in tr.nodes.items() + if node["type"] == "sample" and type(node["fn"]).__name__ != "_Subsample" + ] + assert expected_names == actual_names + + +def test_only_withs(): + def model1(): + with autoname(name="a"): + with autoname(name="b"): + sample("x", dist.Bernoulli(0.5)) + + tr1 = poutine.trace(model1).get_trace() + assert "a/b/x" in tr1.nodes + + tr2 = poutine.trace(autoname(model1)).get_trace() + assert "model1/a/b/x" in tr2.nodes + + +def test_mutual_recur(): + @autoname + def model1(n): + sample("a", dist.Bernoulli(0.5)) + if n <= 0: + return + else: + return model2(n - 1) + + @autoname + def model2(n): + sample("b", dist.Bernoulli(0.5)) + if n <= 0: + return + else: + model1(n) + + expected_names = ["model2/b", "model2/model1/a", "model2/model1/model2/b"] + tr = poutine.trace(model2).get_trace(1) + actual_names = [ + name + for name, node in tr.nodes.items() + if node["type"] == "sample" and type(node["fn"]).__name__ != "_Subsample" + ] + assert expected_names == actual_names + + +def test_simple_recur(): + @autoname + def geometric(p): + x = sample("x", dist.Bernoulli(p)) + if x.item() == 1.0: + # model1() + return x + geometric(p) + else: + return x + + prev_name = "x" + for name, node in poutine.trace(geometric).get_trace(0.9).nodes.items(): + if node["type"] == "sample": + assert name == "geometric/" + prev_name + prev_name = "geometric/" + prev_name + + +def test_no_param(): + pyro.clear_param_store() + + @autoname + def model(): + a = pyro.param("a", torch.tensor(0.5)) + return sample("b", dist.Bernoulli(a)) + + expected_names = ["a", "model/b"] + tr = poutine.trace(model).get_trace() + actual_names = [ + name for name, node in tr.nodes.items() if node["type"] in ("param", "sample") + ] + + assert expected_names == actual_names diff --git a/pyro/source/tests/contrib/autoname/test_named.py b/pyro/source/tests/contrib/autoname/test_named.py new file mode 100644 index 0000000000000000000000000000000000000000..7ef9b22ba39e23e58e8699fcde048b9e57de3e5d --- /dev/null +++ b/pyro/source/tests/contrib/autoname/test_named.py @@ -0,0 +1,116 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +import pyro +import pyro.distributions as dist +from pyro import poutine +from pyro.contrib.autoname import named + + +def get_sample_names(tr): + return set( + [ + name + for name, site in tr.nodes.items() + if site["type"] == "sample" and not site["is_observed"] + ] + ) + + +def get_observe_names(tr): + return set( + [ + name + for name, site in tr.nodes.items() + if site["type"] == "sample" and site["is_observed"] + ] + ) + + +def get_param_names(tr): + return set([name for name, site in tr.nodes.items() if site["type"] == "param"]) + + +def test_named_object(): + pyro.clear_param_store() + + def model(): + latent = named.Object("latent") + loc = latent.loc.param_(torch.zeros(1)) + foo = latent.foo.sample_(dist.Normal(loc, torch.ones(1))) + latent.bar.sample_(dist.Normal(loc, torch.ones(1)), obs=foo) + latent.x.z.sample_(dist.Normal(loc, torch.ones(1))) + + tr = poutine.trace(model).get_trace() + assert get_sample_names(tr) == set(["latent.foo", "latent.x.z"]) + assert get_observe_names(tr) == set(["latent.bar"]) + assert get_param_names(tr) == set(["latent.loc"]) + + +def test_named_list(): + pyro.clear_param_store() + + def model(): + latent = named.List("latent") + loc = latent.add().param_(torch.zeros(1)) + foo = latent.add().sample_(dist.Normal(loc, torch.ones(1))) + latent.add().sample_(dist.Normal(loc, torch.ones(1)), obs=foo) + latent.add().z.sample_(dist.Normal(loc, torch.ones(1))) + + tr = poutine.trace(model).get_trace() + assert get_sample_names(tr) == set(["latent[1]", "latent[3].z"]) + assert get_observe_names(tr) == set(["latent[2]"]) + assert get_param_names(tr) == set(["latent[0]"]) + + +def test_named_dict(): + pyro.clear_param_store() + + def model(): + latent = named.Dict("latent") + loc = latent["loc"].param_(torch.zeros(1)) + foo = latent["foo"].sample_(dist.Normal(loc, torch.ones(1))) + latent["bar"].sample_(dist.Normal(loc, torch.ones(1)), obs=foo) + latent["x"].z.sample_(dist.Normal(loc, torch.ones(1))) + + tr = poutine.trace(model).get_trace() + assert get_sample_names(tr) == set(["latent['foo']", "latent['x'].z"]) + assert get_observe_names(tr) == set(["latent['bar']"]) + assert get_param_names(tr) == set(["latent['loc']"]) + + +def test_nested(): + pyro.clear_param_store() + + def model(): + latent = named.Object("latent") + latent.list = named.List() + loc = latent.list.add().loc.param_(torch.zeros(1)) + latent.dict = named.Dict() + foo = latent.dict["foo"].foo.sample_(dist.Normal(loc, torch.ones(1))) + latent.object.bar.sample_(dist.Normal(loc, torch.ones(1)), obs=foo) + + tr = poutine.trace(model).get_trace() + assert get_sample_names(tr) == set(["latent.dict['foo'].foo"]) + assert get_observe_names(tr) == set(["latent.object.bar"]) + assert get_param_names(tr) == set(["latent.list[0].loc"]) + + +def test_eval_str(): + state = named.Object("state") + state.x = 0 + state.ys = named.List() + state.ys.add().foo = 1 + state.zs = named.Dict() + state.zs[42].bar = 2 + + assert state is eval(str(state)) + assert state.x is eval(str(state.x)) + assert state.ys is eval(str(state.ys)) + assert state.ys[0] is eval(str(state.ys[0])) + assert state.ys[0].foo is eval(str(state.ys[0].foo)) + assert state.zs is eval(str(state.zs)) + assert state.zs[42] is eval(str(state.zs[42])) + assert state.zs[42].bar is eval(str(state.zs[42].bar)) diff --git a/pyro/source/tests/contrib/autoname/test_scoping.py b/pyro/source/tests/contrib/autoname/test_scoping.py new file mode 100644 index 0000000000000000000000000000000000000000..09d9de29e3125a7fae2fc059aa5fd23ba05ee71f --- /dev/null +++ b/pyro/source/tests/contrib/autoname/test_scoping.py @@ -0,0 +1,186 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging + +import torch + +import pyro +import pyro.distributions.torch as dist +import pyro.poutine as poutine +from pyro.contrib.autoname import name_count, scope + +logger = logging.getLogger(__name__) + + +def test_multi_nested(): + @scope + def model1(r=True): + model2() + model2() + with scope(prefix="inter"): + model2() + if r: + model1(r=False) + model2() + + @scope + def model2(): + return pyro.sample("y", dist.Normal(0.0, 1.0)) + + true_samples = [ + "model1/model2/y", + "model1/model2__1/y", + "model1/inter/model2/y", + "model1/inter/model1/model2/y", + "model1/inter/model1/model2__1/y", + "model1/inter/model1/inter/model2/y", + "model1/inter/model1/model2__2/y", + "model1/model2__2/y", + ] + + tr = poutine.trace(name_count(model1)).get_trace(r=True) + + samples = [name for name, node in tr.nodes.items() if node["type"] == "sample"] + logger.debug(samples) + assert true_samples == samples + + +def test_recur_multi(): + @scope(inner=True) + def model1(r=True): + model2() + with scope(prefix="inter"): + model2() + if r: + model1(r=False) + model2() + + @scope(inner=True) + def model2(): + return pyro.sample("y", dist.Normal(0.0, 1.0)) + + true_samples = [ + "model1/model2/y", + "model1/inter/model2/y", + "model1/inter/model1/model2/y", + "model1/inter/model1/inter/model2/y", + "model1/inter/model1/model2/y__1", + "model1/model2/y__1", + ] + + tr = poutine.trace(name_count(model1)).get_trace() + + samples = [name for name, node in tr.nodes.items() if node["type"] == "sample"] + logger.debug(samples) + assert true_samples == samples + + +def test_only_withs(): + def model1(): + with scope(prefix="a"): + with scope(prefix="b"): + pyro.sample("x", dist.Bernoulli(0.5)) + + tr1 = poutine.trace(name_count(model1)).get_trace() + assert "a/b/x" in tr1.nodes + + tr2 = poutine.trace(name_count(scope(prefix="model1")(model1))).get_trace() + assert "model1/a/b/x" in tr2.nodes + + +def test_mutual_recur(): + @scope + def model1(n): + pyro.sample("a", dist.Bernoulli(0.5)) + if n <= 0: + return + else: + return model2(n - 1) + + @scope + def model2(n): + pyro.sample("b", dist.Bernoulli(0.5)) + if n <= 0: + return + else: + model1(n) + + names = set( + ["_INPUT", "_RETURN", "model2/b", "model2/model1/a", "model2/model1/model2/b"] + ) + tr_names = set([name for name in poutine.trace(name_count(model2)).get_trace(1)]) + assert names == tr_names + + +def test_simple_recur(): + @scope + def geometric(p): + x = pyro.sample("x", dist.Bernoulli(p)) + if x.item() == 1.0: + # model1() + return x + geometric(p) + else: + return x + + prev_name = "x" + for name, node in poutine.trace(name_count(geometric)).get_trace(0.9).nodes.items(): + if node["type"] == "sample": + logger.debug(name) + assert name == "geometric/" + prev_name + prev_name = "geometric/" + prev_name + + +def test_basic_scope(): + @scope + def f1(): + return pyro.sample("x", dist.Bernoulli(0.5)) + + @scope + def f2(): + f1() + return pyro.sample("y", dist.Bernoulli(0.5)) + + tr1 = poutine.trace(f1).get_trace() + assert "f1/x" in tr1.nodes + + tr2 = poutine.trace(f2).get_trace() + assert "f2/f1/x" in tr2.nodes + assert "f2/y" in tr2.nodes + + +def test_nested_traces(): + @scope + def f1(): + return pyro.sample("x", dist.Bernoulli(0.5)) + + @scope + def f2(): + f1() + f1() + f1() + return pyro.sample("y", dist.Bernoulli(0.5)) + + expected_names = ["f2/f1/x", "f2/f1__1/x", "f2/f1__2/x", "f2/y"] + tr2 = poutine.trace(name_count(name_count(f2))).get_trace() + actual_names = [ + name for name, node in tr2.nodes.items() if node["type"] == "sample" + ] + assert expected_names == actual_names + + +def test_no_param(): + pyro.clear_param_store() + + @scope + def model(): + a = pyro.param("a", torch.tensor(0.5)) + return pyro.sample("b", dist.Bernoulli(a)) + + expected_names = ["a", "model/b"] + tr = poutine.trace(model).get_trace() + actual_names = [ + name for name, node in tr.nodes.items() if node["type"] in ("param", "sample") + ] + + assert expected_names == actual_names diff --git a/pyro/source/tests/contrib/bnn/test_hidden_layer.py b/pyro/source/tests/contrib/bnn/test_hidden_layer.py new file mode 100644 index 0000000000000000000000000000000000000000..9f72e54f86c19791d25dd8b61ab79b1ea512c7ed --- /dev/null +++ b/pyro/source/tests/contrib/bnn/test_hidden_layer.py @@ -0,0 +1,67 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch +import torch.nn.functional as F +from torch.distributions import Normal + +from pyro.contrib.bnn import HiddenLayer +from tests.common import assert_equal + + +@pytest.mark.parametrize("non_linearity", [F.relu]) +@pytest.mark.parametrize("include_hidden_bias", [False, True]) +def test_hidden_layer_rsample( + non_linearity, include_hidden_bias, B=2, D=3, H=4, N=900000 +): + X = torch.randn(B, D) + A_mean = torch.rand(D, H) + A_scale = 0.3 * torch.exp(0.3 * torch.rand(D, H)) + + # test naive weight space sampling against sampling in pre-activation space + dist1 = HiddenLayer( + X=X, + A_mean=A_mean, + A_scale=A_scale, + non_linearity=non_linearity, + include_hidden_bias=include_hidden_bias, + weight_space_sampling=True, + ) + dist2 = HiddenLayer( + X=X, + A_mean=A_mean, + A_scale=A_scale, + non_linearity=non_linearity, + include_hidden_bias=include_hidden_bias, + weight_space_sampling=False, + ) + + out1 = dist1.rsample(sample_shape=(N,)) + out1_mean, out1_var = out1.mean(0), out1.var(0) + out2 = dist2.rsample(sample_shape=(N,)) + out2_mean, out2_var = out2.mean(0), out2.var(0) + + assert_equal(out1_mean, out2_mean, prec=0.003) + assert_equal(out1_var, out2_var, prec=0.003) + return + + +@pytest.mark.parametrize("non_linearity", [F.relu]) +@pytest.mark.parametrize("include_hidden_bias", [True, False]) +def test_hidden_layer_log_prob(non_linearity, include_hidden_bias, B=2, D=3, H=2): + X = torch.randn(B, D) + A_mean = torch.rand(D, H) + A_scale = 0.3 * torch.exp(0.3 * torch.rand(D, H)) + dist = HiddenLayer( + X=X, + A_mean=A_mean, + A_scale=A_scale, + non_linearity=non_linearity, + include_hidden_bias=include_hidden_bias, + ) + + A_dist = Normal(A_mean, A_scale) + A_prior = Normal(torch.zeros(D, H), torch.ones(D, H)) + kl = torch.distributions.kl.kl_divergence(A_dist, A_prior).sum() + assert_equal(kl, dist.KL, prec=0.01) diff --git a/pyro/source/tests/contrib/cevae/test_cevae.py b/pyro/source/tests/contrib/cevae/test_cevae.py new file mode 100644 index 0000000000000000000000000000000000000000..b79774c362780da592b1086e1d26f7c71fd114fd --- /dev/null +++ b/pyro/source/tests/contrib/cevae/test_cevae.py @@ -0,0 +1,71 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import io +import warnings + +import pytest +import torch + +import pyro +import pyro.distributions as dist +from pyro.contrib.cevae import CEVAE, DistributionNet +from tests.common import assert_close + +DIST_NETS = [cls.__name__.lower()[:-3] for cls in DistributionNet.__subclasses__()] + + +def generate_data(num_data, feature_dim): + z = dist.Bernoulli(0.5).sample([num_data]) + x = dist.Normal(z, 5 * z + 3 * (1 - z)).sample([feature_dim]).t() + t = dist.Bernoulli(0.75 * z + 0.25 * (1 - z)).sample() + y = dist.Bernoulli(logits=3 * (z + 2 * (2 * t - 2))).sample() + return x, t, y + + +@pytest.mark.parametrize("num_data", [1, 100, 200]) +@pytest.mark.parametrize("feature_dim", [1, 2]) +@pytest.mark.parametrize("outcome_dist", DIST_NETS) +def test_smoke(num_data, feature_dim, outcome_dist): + x, t, y = generate_data(num_data, feature_dim) + if outcome_dist == "exponential": + y.clamp_(min=1e-20) + cevae = CEVAE(feature_dim, outcome_dist) + cevae.fit(x, t, y, num_epochs=2) + ite = cevae.ite(x) + assert ite.shape == (num_data,) + + +@pytest.mark.parametrize("feature_dim", [1, 2]) +@pytest.mark.parametrize("outcome_dist", DIST_NETS) +@pytest.mark.parametrize("jit", [False, True], ids=["python", "jit"]) +def test_serialization(jit, feature_dim, outcome_dist): + if torch.__version__.startswith("2") and jit: + pytest.xfail(reason="https://github.com/pyro-ppl/pyro/issues/3221") + x, t, y = generate_data(num_data=32, feature_dim=feature_dim) + if outcome_dist == "exponential": + y.clamp_(min=1e-20) + cevae = CEVAE( + feature_dim, outcome_dist=outcome_dist, num_samples=1000, hidden_dim=32 + ) + cevae.fit(x, t, y, num_epochs=4, batch_size=8) + pyro.set_rng_seed(0) + expected_ite = cevae.ite(x) + + if jit: + traced_cevae = cevae.to_script_module() + f = io.BytesIO() + torch.jit.save(traced_cevae, f) + f.seek(0) + loaded_cevae = torch.jit.load(f) + else: + f = io.BytesIO() + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", category=UserWarning) + torch.save(cevae, f) + f.seek(0) + loaded_cevae = torch.load(f, weights_only=False) + + pyro.set_rng_seed(0) + actual_ite = loaded_cevae.ite(x) + assert_close(actual_ite, expected_ite, atol=0.1) diff --git a/pyro/source/tests/contrib/conftest.py b/pyro/source/tests/contrib/conftest.py new file mode 100644 index 0000000000000000000000000000000000000000..587844617759de79dd07584e3fea8b97310f47d2 --- /dev/null +++ b/pyro/source/tests/contrib/conftest.py @@ -0,0 +1,13 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest + + +def pytest_collection_modifyitems(items): + for item in items: + if item.nodeid.startswith("tests/contrib"): + if "stage" not in item.keywords: + item.add_marker(pytest.mark.stage("integration_batch_1")) + if "init" not in item.keywords: + item.add_marker(pytest.mark.init(rng_seed=123)) diff --git a/pyro/source/tests/contrib/easyguide/test_easyguide.py b/pyro/source/tests/contrib/easyguide/test_easyguide.py new file mode 100644 index 0000000000000000000000000000000000000000..b4ee78d6fb3aef91d04409c1ff78fd3e15421f4b --- /dev/null +++ b/pyro/source/tests/contrib/easyguide/test_easyguide.py @@ -0,0 +1,255 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import io +import warnings + +import pytest +import torch +from torch.distributions import constraints + +import pyro +import pyro.distributions as dist +from pyro.contrib.easyguide import EasyGuide, easy_guide +from pyro.infer import SVI, Trace_ELBO +from pyro.infer.autoguide.initialization import init_to_mean, init_to_median +from pyro.optim import Adam +from pyro.util import ignore_jit_warnings + + +# The model from tutorial/source/easyguide.ipynb +def model(batch, subsample, full_size): + with ignore_jit_warnings(): + num_time_steps = len(batch) + result = [None] * num_time_steps + drift = pyro.sample("drift", dist.LogNormal(-1, 0.5)) + with pyro.plate("data", full_size, subsample=subsample): + z = 0.0 + for t in range(num_time_steps): + z = pyro.sample("state_{}".format(t), dist.Normal(z, drift)) + result[t] = pyro.sample( + "obs_{}".format(t), dist.Bernoulli(logits=z), obs=batch[t] + ) + return torch.stack(result) + + +def check_guide(guide): + full_size = 50 + batch_size = 20 + num_time_steps = 8 + pyro.set_rng_seed(123456789) + data = model([None] * num_time_steps, torch.arange(full_size), full_size) + assert data.shape == (num_time_steps, full_size) + + pyro.get_param_store().clear() + pyro.set_rng_seed(123456789) + svi = SVI(model, guide, Adam({"lr": 0.02}), Trace_ELBO()) + for epoch in range(2): + beg = 0 + while beg < full_size: + end = min(full_size, beg + batch_size) + subsample = torch.arange(beg, end) + batch = data[:, beg:end] + beg = end + svi.step(batch, subsample, full_size=full_size) + + +@pytest.mark.parametrize("init_fn", [None, init_to_mean, init_to_median]) +def test_delta_smoke(init_fn): + @easy_guide(model) + def guide(self, batch, subsample, full_size): + self.map_estimate("drift") + with self.plate("data", full_size, subsample=subsample): + self.group(match="state_[0-9]*").map_estimate() + + if init_fn is not None: + guide.init = init_fn + + check_guide(guide) + + +class PickleGuide(EasyGuide): + def __init__(self, model): + super().__init__(model) + self.init = init_to_median + + def guide(self, batch, subsample, full_size): + self.map_estimate("drift") + with self.plate("data", full_size, subsample=subsample): + self.group(match="state_[0-9]*").map_estimate() + + +def test_serialize(): + guide = PickleGuide(model) + check_guide(guide) + + # Work around https://github.com/pytorch/pytorch/issues/27972 + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", category=UserWarning) + f = io.BytesIO() + torch.save(guide, f) + f.seek(0) + actual = torch.load(f, weights_only=False) + + assert type(actual) == type(guide) + assert dir(actual) == dir(guide) + check_guide(guide) + check_guide(actual) + + +@pytest.mark.parametrize("init_fn", [None, init_to_mean, init_to_median]) +def test_subsample_smoke(init_fn): + rank = 2 + + @easy_guide(model) + def guide(self, batch, subsample, full_size): + self.map_estimate("drift") + group = self.group(match="state_[0-9]*") + cov_diag = pyro.param( + "state_cov_diag", + lambda: torch.full(group.event_shape, 0.01), + constraint=constraints.positive, + ) + cov_factor = pyro.param( + "state_cov_factor", lambda: torch.randn(group.event_shape + (rank,)) * 0.01 + ) + with self.plate("data", full_size, subsample=subsample): + loc = pyro.param( + "state_loc", + lambda: torch.full((full_size,) + group.event_shape, 0.5), + event_dim=1, + ) + group.sample( + "states", dist.LowRankMultivariateNormal(loc, cov_factor, cov_diag) + ) + + if init_fn is not None: + guide.init = init_fn + + check_guide(guide) + + +@pytest.mark.parametrize("init_fn", [None, init_to_mean, init_to_median]) +def test_amortized_smoke(init_fn): + rank = 2 + + @easy_guide(model) + def guide(self, batch, subsample, full_size): + num_time_steps, batch_size = batch.shape + self.map_estimate("drift") + + group = self.group(match="state_[0-9]*") + cov_diag = pyro.param( + "state_cov_diag", + lambda: torch.full(group.event_shape, 0.01), + constraint=constraints.positive, + ) + cov_factor = pyro.param( + "state_cov_factor", lambda: torch.randn(group.event_shape + (rank,)) * 0.01 + ) + + if not hasattr(self, "nn"): + self.nn = torch.nn.Linear( + group.event_shape.numel(), group.event_shape.numel() + ) + self.nn.weight.data.fill_(1.0 / num_time_steps) + self.nn.bias.data.fill_(-0.5) + pyro.module("state_nn", self.nn) + with self.plate("data", full_size, subsample=subsample): + loc = self.nn(batch.t()) + group.sample( + "states", dist.LowRankMultivariateNormal(loc, cov_factor, cov_diag) + ) + + if init_fn is not None: + guide.init = init_fn + + check_guide(guide) + + +def test_overlapping_plates_ok(): + def model(batch, subsample, full_size): + # This is ok because the shared plate is left of the nonshared plate. + with pyro.plate("shared", full_size, subsample=subsample, dim=-2): + x = pyro.sample("x", dist.Normal(0, 1)) + with pyro.plate("nonshared", 2, dim=-1): + y = pyro.sample("y", dist.Normal(0, 1)) + xy = x + y.sum(-1, keepdim=True) + return pyro.sample("z", dist.Normal(xy, 1), obs=batch) + + @easy_guide(model) + def guide(self, batch, subsample, full_size): + with self.plate("shared", full_size, subsample=subsample, dim=-2): + group = self.group(match="x|y") + loc = pyro.param( + "guide_loc", + torch.zeros((full_size, 1) + group.event_shape), + event_dim=1, + ) + scale = pyro.param( + "guide_scale", + torch.ones((full_size, 1) + group.event_shape), + constraint=constraints.positive, + event_dim=1, + ) + group.sample("xy", dist.Normal(loc, scale).to_event(1)) + + # Generate data. + full_size = 5 + batch_size = 2 + data = model(None, torch.arange(full_size), full_size) + assert data.shape == (full_size, 1) + + # Train for one epoch. + pyro.get_param_store().clear() + svi = SVI(model, guide, Adam({"lr": 0.02}), Trace_ELBO()) + beg = 0 + while beg < full_size: + end = min(full_size, beg + batch_size) + subsample = torch.arange(beg, end) + batch = data[beg:end] + beg = end + svi.step(batch, subsample, full_size=full_size) + + +def test_overlapping_plates_error(): + def model(batch, subsample, full_size): + # This is an error because the shared plate is right of the nonshared plate. + with pyro.plate("shared", full_size, subsample=subsample, dim=-1): + x = pyro.sample("x", dist.Normal(0, 1)) + with pyro.plate("nonshared", 2, dim=-2): + y = pyro.sample("y", dist.Normal(0, 1)) + xy = x + y.sum(-2) + return pyro.sample("z", dist.Normal(xy, 1), obs=batch) + + @easy_guide(model) + def guide(self, batch, subsample, full_size): + with self.plate("shared", full_size, subsample=subsample, dim=-1): + group = self.group(match="x|y") + loc = pyro.param( + "guide_loc", torch.zeros((full_size,) + group.event_shape), event_dim=1 + ) + scale = pyro.param( + "guide_scale", + torch.ones((full_size,) + group.event_shape), + constraint=constraints.positive, + event_dim=1, + ) + group.sample("xy", dist.Normal(loc, scale).to_event(1)) + + # Generate data. + full_size = 5 + batch_size = 2 + data = model(None, torch.arange(full_size), full_size) + assert data.shape == (full_size,) + + # Train for one epoch. + pyro.get_param_store().clear() + svi = SVI(model, guide, Adam({"lr": 0.02}), Trace_ELBO()) + beg = 0 + end = min(full_size, beg + batch_size) + subsample = torch.arange(beg, end) + batch = data[beg:end] + beg = end + with pytest.raises(ValueError, match="Group expects all per-site plates"): + svi.step(batch, subsample, full_size=full_size) diff --git a/pyro/source/tests/contrib/epidemiology/__init__.py b/pyro/source/tests/contrib/epidemiology/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/tests/contrib/epidemiology/test_distributions.py b/pyro/source/tests/contrib/epidemiology/test_distributions.py new file mode 100644 index 0000000000000000000000000000000000000000..b65180fc8ca19e23e3a6962c563af481048122df --- /dev/null +++ b/pyro/source/tests/contrib/epidemiology/test_distributions.py @@ -0,0 +1,279 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import pytest +import torch +from torch.distributions.transforms import SigmoidTransform + +import pyro.distributions as dist +from pyro.contrib.epidemiology import beta_binomial_dist, binomial_dist, infection_dist +from pyro.contrib.epidemiology.distributions import ( + _RELAX_MIN_VARIANCE, + set_relaxed_distributions, +) +from tests.common import assert_close + + +def assert_dist_close(d1, d2): + x = torch.arange(float(200)) + p1 = d1.log_prob(x).exp() + p2 = d2.log_prob(x).exp() + + assert (p1.sum() - 1).abs() < 1e-3, "incomplete mass" + assert (p2.sum() - 1).abs() < 1e-3, "incomplete mass" + + mean1 = (p1 * x).sum() + mean2 = (p2 * x).sum() + assert_close(mean1, mean2, rtol=0.05) + + max_prob = torch.max(p1.max(), p2.max()) + assert (p1 - p2).abs().max() / max_prob < 0.05 + + +@pytest.mark.parametrize( + "R0,I", + [ + (1.0, 1), + (1.0, 10), + (10.0, 1), + (5.0, 5), + ], +) +def test_binomial_vs_poisson(R0, I): + R0 = torch.tensor(R0) + I = torch.tensor(I) + + d1 = infection_dist(individual_rate=R0, num_infectious=I) + d2 = infection_dist( + individual_rate=R0, num_infectious=I, num_susceptible=1000.0, population=1000.0 + ) + + assert isinstance(d1, dist.Poisson) + assert isinstance(d2, dist.Binomial) + assert_dist_close(d1, d2) + + +@pytest.mark.parametrize( + "R0,I,k", + [ + (1.0, 1.0, 0.5), + (1.0, 1.0, 1.0), + (1.0, 1.0, 2.0), + (1.0, 10.0, 0.5), + (1.0, 10.0, 1.0), + (1.0, 10.0, 2.0), + (10.0, 1.0, 0.5), + (10.0, 1.0, 1.0), + (10.0, 1.0, 2.0), + (5.0, 5, 0.5), + (5.0, 5, 1.0), + (5.0, 5, 2.0), + ], +) +def test_beta_binomial_vs_negative_binomial(R0, I, k): + R0 = torch.tensor(R0) + I = torch.tensor(I) + + d1 = infection_dist(individual_rate=R0, num_infectious=I, concentration=k) + d2 = infection_dist( + individual_rate=R0, + num_infectious=I, + concentration=k, + num_susceptible=1000.0, + population=1000.0, + ) + + assert isinstance(d1, dist.NegativeBinomial) + assert isinstance(d2, dist.BetaBinomial) + assert_dist_close(d1, d2) + + +@pytest.mark.parametrize( + "R0,I", + [ + (1.0, 1.0), + (1.0, 10.0), + (10.0, 1.0), + (5.0, 5.0), + ], +) +def test_beta_binomial_vs_binomial(R0, I): + R0 = torch.tensor(R0) + I = torch.tensor(I) + + d1 = infection_dist( + individual_rate=R0, num_infectious=I, num_susceptible=20.0, population=30.0 + ) + d2 = infection_dist( + individual_rate=R0, + num_infectious=I, + num_susceptible=20.0, + population=30.0, + concentration=200.0, + ) + + assert isinstance(d1, dist.Binomial) + assert isinstance(d2, dist.BetaBinomial) + assert_dist_close(d1, d2) + + +@pytest.mark.parametrize( + "R0,I", + [ + (1.0, 1.0), + (1.0, 10.0), + (10.0, 1.0), + (5.0, 5.0), + ], +) +def test_negative_binomial_vs_poisson(R0, I): + R0 = torch.tensor(R0) + I = torch.tensor(I) + + d1 = infection_dist(individual_rate=R0, num_infectious=I) + d2 = infection_dist(individual_rate=R0, num_infectious=I, concentration=200.0) + + assert isinstance(d1, dist.Poisson) + assert isinstance(d2, dist.NegativeBinomial) + assert_dist_close(d1, d2) + + +@pytest.mark.parametrize("overdispersion", [0.01, 0.03, 0.1, 0.3, 1.0, 1.5]) +@pytest.mark.parametrize("probs", [0.01, 0.03, 0.1, 0.3, 0.7, 0.9, 0.97, 0.99]) +def test_overdispersed_bound(probs, overdispersion): + total_count = torch.tensor([1, 2, 5, 10, 20, 50, 1e2, 1e3, 1e5, 1e6, 1e7, 1e8]) + d = binomial_dist(total_count, probs, overdispersion=overdispersion) + relative_error = d.variance.sqrt() / (probs * (1 - probs) * total_count) + + # Check bound is valid. + assert (relative_error >= overdispersion).all() + + # Check bound is tight. + assert relative_error[-1] / overdispersion < 1.05 + + +@pytest.mark.parametrize("overdispersion", [0.05, 0.1, 0.2, 0.3]) +@pytest.mark.parametrize("probs", [0.1, 0.2, 0.5, 0.8, 0.9]) +def test_overdispersed_asymptote(probs, overdispersion): + total_count = 100000 + + # Check binomial_dist converges in distribution to LogitNormal. + d1 = binomial_dist(total_count, probs) + d2 = dist.TransformedDistribution( + dist.Normal(math.log(probs / (1 - probs)), overdispersion), SigmoidTransform() + ) + + # CRPS is equivalent to the Cramer-von Mises test. + # https://en.wikipedia.org/wiki/Cram%C3%A9r%E2%80%93von_Mises_criterion + k = torch.arange(0.0, total_count + 1.0) + cdf1 = d1.log_prob(k).exp().cumsum(-1) + cdf2 = d2.cdf(k / total_count) + crps = (cdf1 - cdf2).pow(2).mean() + assert crps < 0.02 + + +@pytest.mark.parametrize("total_count", [1, 2, 5, 10, 20, 50]) +@pytest.mark.parametrize("concentration1", [0.2, 1.0, 5.0]) +@pytest.mark.parametrize("concentration0", [0.2, 1.0, 5.0]) +def test_beta_binomial(concentration1, concentration0, total_count): + # For small overdispersion, beta_binomial_dist is close to BetaBinomial. + d1 = dist.BetaBinomial(concentration1, concentration0, total_count) + d2 = beta_binomial_dist( + concentration1, concentration0, total_count, overdispersion=0.01 + ) + + # CRPS is equivalent to the Cramer-von Mises test. + # https://en.wikipedia.org/wiki/Cram%C3%A9r%E2%80%93von_Mises_criterion + k = torch.arange(0.0, total_count + 1.0) + cdf1 = d1.log_prob(k).exp().cumsum(-1) + cdf2 = d2.log_prob(k).exp().cumsum(-1) + crps = (cdf1 - cdf2).pow(2).mean() + assert crps < 0.01 + + +@pytest.mark.parametrize("overdispersion", [0.05, 0.1, 0.2, 0.5, 1.0]) +@pytest.mark.parametrize("total_count", [1, 2, 5, 10, 20, 50]) +@pytest.mark.parametrize("probs", [0.1, 0.2, 0.5, 0.8, 0.9]) +def test_overdispersed_beta_binomial(probs, total_count, overdispersion): + # For high concentraion, beta_binomial_dist is close to binomial_dist. + concentration = 100.0 # very little uncertainty + concentration1 = concentration * probs + concentration0 = concentration * (1 - probs) + d1 = binomial_dist(total_count, probs, overdispersion=overdispersion) + d2 = beta_binomial_dist( + concentration1, concentration0, total_count, overdispersion=overdispersion + ) + + # CRPS is equivalent to the Cramer-von Mises test. + # https://en.wikipedia.org/wiki/Cram%C3%A9r%E2%80%93von_Mises_criterion + k = torch.arange(0.0, total_count + 1.0) + cdf1 = d1.log_prob(k).exp().cumsum(-1) + cdf2 = d2.log_prob(k).exp().cumsum(-1) + crps = (cdf1 - cdf2).pow(2).mean() + assert crps < 0.01 + + +def test_relaxed_binomial(): + total_count = torch.arange(1, 33) + probs = torch.linspace(0.1, 0.9, 16).unsqueeze(-1) + + d1 = binomial_dist(total_count, probs) + assert isinstance(d1, dist.ExtendedBinomial) + + with set_relaxed_distributions(): + d2 = binomial_dist(total_count, probs) + assert isinstance(d2, dist.Normal) + assert_close(d2.mean, d1.mean) + assert_close(d2.variance, d1.variance.clamp(min=_RELAX_MIN_VARIANCE)) + + +@pytest.mark.parametrize("overdispersion", [0.05, 0.1, 0.2, 0.5, 1.0]) +def test_relaxed_overdispersed_binomial(overdispersion): + total_count = torch.arange(1, 33) + probs = torch.linspace(0.1, 0.9, 16).unsqueeze(-1) + + d1 = binomial_dist(total_count, probs, overdispersion=overdispersion) + assert isinstance(d1, dist.ExtendedBetaBinomial) + + with set_relaxed_distributions(): + d2 = binomial_dist(total_count, probs, overdispersion=overdispersion) + assert isinstance(d2, dist.Normal) + assert_close(d2.mean, d1.mean) + assert_close(d2.variance, d1.variance.clamp(min=_RELAX_MIN_VARIANCE)) + + +def test_relaxed_beta_binomial(): + total_count = torch.arange(1, 17) + concentration1 = torch.logspace(-1, 2, 8).unsqueeze(-1) + concentration0 = concentration1.unsqueeze(-1) + + d1 = beta_binomial_dist(concentration1, concentration0, total_count) + assert isinstance(d1, dist.ExtendedBetaBinomial) + + with set_relaxed_distributions(): + d2 = beta_binomial_dist(concentration1, concentration0, total_count) + assert isinstance(d2, dist.Normal) + assert_close(d2.mean, d1.mean) + assert_close(d2.variance, d1.variance.clamp(min=_RELAX_MIN_VARIANCE)) + + +@pytest.mark.parametrize("overdispersion", [0.05, 0.1, 0.2, 0.5, 1.0]) +def test_relaxed_overdispersed_beta_binomial(overdispersion): + total_count = torch.arange(1, 17) + concentration1 = torch.logspace(-1, 2, 8).unsqueeze(-1) + concentration0 = concentration1.unsqueeze(-1) + + d1 = beta_binomial_dist( + concentration1, concentration0, total_count, overdispersion=overdispersion + ) + assert isinstance(d1, dist.ExtendedBetaBinomial) + + with set_relaxed_distributions(): + d2 = beta_binomial_dist( + concentration1, concentration0, total_count, overdispersion=overdispersion + ) + assert isinstance(d2, dist.Normal) + assert_close(d2.mean, d1.mean) + assert_close(d2.variance, d1.variance.clamp(min=_RELAX_MIN_VARIANCE)) diff --git a/pyro/source/tests/contrib/epidemiology/test_models.py b/pyro/source/tests/contrib/epidemiology/test_models.py new file mode 100644 index 0000000000000000000000000000000000000000..987461ef3ea871bd770ef6937d3091a2efdd6f88 --- /dev/null +++ b/pyro/source/tests/contrib/epidemiology/test_models.py @@ -0,0 +1,682 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import logging +import math + +import pytest +import torch + +import pyro +import pyro.distributions as dist +from pyro.contrib.epidemiology.models import ( + HeterogeneousRegionalSIRModel, + HeterogeneousSIRModel, + OverdispersedSEIRModel, + OverdispersedSIRModel, + RegionalSIRModel, + SimpleSEIRDModel, + SimpleSEIRModel, + SimpleSIRModel, + SparseSIRModel, + SuperspreadingSEIRModel, + SuperspreadingSIRModel, + UnknownStartSIRModel, +) +from tests.common import xfail_param + +logger = logging.getLogger(__name__) + + +@pytest.mark.filterwarnings("ignore:num_chains") +@pytest.mark.parametrize("duration", [3, 7]) +@pytest.mark.parametrize("forecast", [0, 7]) +@pytest.mark.parametrize( + "algo,options", + [ + ("svi", {}), + ("svi", {"haar": False}), + ("svi", {"guide_rank": None}), + ("svi", {"guide_rank": 2}), + ("svi", {"guide_rank": "full"}), + ("mcmc", {}), + ("mcmc", {"haar": False}), + ("mcmc", {"haar_full_mass": 0}), + ("mcmc", {"haar_full_mass": 2}), + ("mcmc", {"num_quant_bins": 2}), + ("mcmc", {"num_quant_bins": 4}), + ("mcmc", {"num_quant_bins": 8}), + ("mcmc", {"num_quant_bins": 12}), + ("mcmc", {"num_quant_bins": 16}), + ("mcmc", {"num_quant_bins": 2, "haar": False}), + ("mcmc", {"arrowhead_mass": True}), + ("mcmc", {"jit_compile": True}), + ("mcmc", {"jit_compile": True, "haar_full_mass": 0}), + ("mcmc", {"jit_compile": True, "num_quant_bins": 2}), + ("mcmc", {"num_chains": 2, "mp_context": "spawn"}), + ("mcmc", {"num_chains": 2, "mp_context": "spawn", "num_quant_bins": 2}), + ("mcmc", {"num_chains": 2, "mp_context": "spawn", "jit_compile": True}), + ], + ids=str, +) +def test_simple_sir_smoke(duration, forecast, options, algo): + population = 100 + recovery_time = 7.0 + + # Generate data. + model = SimpleSIRModel(population, recovery_time, [None] * duration) + assert model.full_mass == [("R0", "rho")] + for attempt in range(500): + data = model.generate({"R0": 1.5, "rho": 0.5})["obs"] + if data.sum(): + break + assert data.sum() > 0, "failed to generate positive data" + + # Infer. + model = SimpleSIRModel(population, recovery_time, data) + num_samples = 5 + if algo == "mcmc": + model.fit_mcmc( + warmup_steps=1, num_samples=num_samples, max_tree_depth=2, **options + ) + else: + model.fit_svi(num_steps=2, num_samples=num_samples, **options) + + # Predict and forecast. + samples = model.predict(forecast=forecast) + num_samples *= options.get("num_chains", 1) + assert samples["S"].shape == (num_samples, duration + forecast) + assert samples["I"].shape == (num_samples, duration + forecast) + + +@pytest.mark.parametrize("duration", [3, 7]) +@pytest.mark.parametrize("forecast", [0, 7]) +@pytest.mark.parametrize( + "algo,options", + [ + ("svi", {}), + ("svi", {"haar": False}), + ("mcmc", {}), + ("mcmc", {"haar": False}), + ("mcmc", {"haar_full_mass": 0}), + ("mcmc", {"num_quant_bins": 2}), + ], + ids=str, +) +def test_simple_seir_smoke(duration, forecast, options, algo): + population = 100 + incubation_time = 2.0 + recovery_time = 7.0 + + # Generate data. + model = SimpleSEIRModel( + population, incubation_time, recovery_time, [None] * duration + ) + assert model.full_mass == [("R0", "rho")] + for attempt in range(100): + data = model.generate({"R0": 1.5, "rho": 0.5})["obs"] + if data.sum(): + break + assert data.sum() > 0, "failed to generate positive data" + + # Infer. + model = SimpleSEIRModel(population, incubation_time, recovery_time, data) + num_samples = 5 + if algo == "mcmc": + model.fit_mcmc( + warmup_steps=1, num_samples=num_samples, max_tree_depth=2, **options + ) + else: + model.fit_svi(num_steps=2, num_samples=num_samples, **options) + + # Predict and forecast. + samples = model.predict(forecast=forecast) + assert samples["S"].shape == (num_samples, duration + forecast) + assert samples["E"].shape == (num_samples, duration + forecast) + assert samples["I"].shape == (num_samples, duration + forecast) + + +@pytest.mark.parametrize("duration", [3, 7]) +@pytest.mark.parametrize("forecast", [0, 7]) +@pytest.mark.parametrize( + "algo,options", + [ + ("svi", {}), + ("mcmc", {}), + ("mcmc", {"haar_full_mass": 0}), + ], + ids=str, +) +def test_simple_seird_smoke(duration, forecast, options, algo): + population = 100 + incubation_time = 2.0 + recovery_time = 7.0 + mortality_rate = 0.1 + + # Generate data. + model = SimpleSEIRDModel( + population, incubation_time, recovery_time, mortality_rate, [None] * duration + ) + assert model.full_mass == [("R0", "rho")] + for attempt in range(100): + data = model.generate({"R0": 1.5, "rho": 0.5})["obs"] + if data.sum(): + break + assert data.sum() > 0, "failed to generate positive data" + + # Infer. + model = SimpleSEIRDModel( + population, incubation_time, recovery_time, mortality_rate, data + ) + num_samples = 5 + if algo == "mcmc": + model.fit_mcmc( + warmup_steps=1, num_samples=num_samples, max_tree_depth=2, **options + ) + else: + model.fit_svi(num_steps=2, num_samples=num_samples, **options) + + # Predict and forecast. + samples = model.predict(forecast=forecast) + assert samples["S"].shape == (num_samples, duration + forecast) + assert samples["E"].shape == (num_samples, duration + forecast) + assert samples["I"].shape == (num_samples, duration + forecast) + assert samples["D"].shape == (num_samples, duration + forecast) + + +@pytest.mark.parametrize("duration", [3]) +@pytest.mark.parametrize("forecast", [7]) +@pytest.mark.parametrize( + "options", + [ + {}, + {"haar": False}, + {"num_quant_bins": 2}, + ], + ids=str, +) +def test_overdispersed_sir_smoke(duration, forecast, options): + population = 100 + recovery_time = 7.0 + + # Generate data. + model = OverdispersedSIRModel(population, recovery_time, [None] * duration) + assert model.full_mass == [("R0", "rho", "od")] + for attempt in range(100): + data = model.generate({"R0": 1.5, "rho": 0.5})["obs"] + if data.sum(): + break + assert data.sum() > 0, "failed to generate positive data" + + # Infer. + model = OverdispersedSIRModel(population, recovery_time, data) + num_samples = 5 + model.fit_mcmc(warmup_steps=1, num_samples=num_samples, max_tree_depth=2, **options) + + # Predict and forecast. + samples = model.predict(forecast=forecast) + assert samples["S"].shape == (num_samples, duration + forecast) + assert samples["I"].shape == (num_samples, duration + forecast) + + +@pytest.mark.parametrize("duration", [3]) +@pytest.mark.parametrize("forecast", [7]) +@pytest.mark.parametrize( + "options", + [ + {}, + {"haar": False}, + {"num_quant_bins": 2}, + ], + ids=str, +) +def test_overdispersed_seir_smoke(duration, forecast, options): + population = 100 + incubation_time = 2.0 + recovery_time = 7.0 + + # Generate data. + model = OverdispersedSEIRModel( + population, incubation_time, recovery_time, [None] * duration + ) + assert model.full_mass == [("R0", "rho", "od")] + for attempt in range(100): + data = model.generate({"R0": 1.5, "rho": 0.5})["obs"] + if data.sum(): + break + assert data.sum() > 0, "failed to generate positive data" + + # Infer. + model = OverdispersedSEIRModel(population, incubation_time, recovery_time, data) + num_samples = 5 + model.fit_mcmc(warmup_steps=2, num_samples=num_samples, max_tree_depth=2, **options) + + # Predict and forecast. + samples = model.predict(forecast=forecast) + assert samples["S"].shape == (num_samples, duration + forecast) + assert samples["E"].shape == (num_samples, duration + forecast) + assert samples["I"].shape == (num_samples, duration + forecast) + + +@pytest.mark.parametrize("duration", [3, 7]) +@pytest.mark.parametrize("forecast", [0, 7]) +@pytest.mark.parametrize( + "options", + [ + {}, + {"haar": False}, + {"haar_full_mass": 0}, + {"num_quant_bins": 2}, + ], + ids=str, +) +def test_superspreading_sir_smoke(duration, forecast, options): + population = 100 + recovery_time = 7.0 + + # Generate data. + model = SuperspreadingSIRModel(population, recovery_time, [None] * duration) + assert model.full_mass == [("R0", "k", "rho")] + for attempt in range(100): + data = model.generate({"R0": 1.5, "rho": 0.5, "k": 1.0})["obs"] + if data.sum(): + break + assert data.sum() > 0, "failed to generate positive data" + + # Infer. + model = SuperspreadingSIRModel(population, recovery_time, data) + num_samples = 5 + model.fit_mcmc(warmup_steps=1, num_samples=num_samples, max_tree_depth=2, **options) + + # Predict and forecast. + samples = model.predict(forecast=forecast) + assert samples["S"].shape == (num_samples, duration + forecast) + assert samples["I"].shape == (num_samples, duration + forecast) + + +@pytest.mark.parametrize("duration", [3, 7]) +@pytest.mark.parametrize("forecast", [0, 7]) +@pytest.mark.parametrize( + "options", + [ + {}, + {"haar": False}, + {"haar_full_mass": 0}, + {"num_quant_bins": 2}, + ], + ids=str, +) +def test_superspreading_seir_smoke(duration, forecast, options): + population = 100 + incubation_time = 2.0 + recovery_time = 7.0 + + # Generate data. + model = SuperspreadingSEIRModel( + population, incubation_time, recovery_time, [None] * duration + ) + assert model.full_mass == [("R0", "k", "rho")] + for attempt in range(100): + data = model.generate({"R0": 1.5, "rho": 0.5, "k": 1.0})["obs"] + if data.sum(): + break + assert data.sum() > 0, "failed to generate positive data" + + # Infer. + model = SuperspreadingSEIRModel(population, incubation_time, recovery_time, data) + num_samples = 5 + model.fit_mcmc(warmup_steps=2, num_samples=num_samples, max_tree_depth=2, **options) + + # Predict and forecast. + samples = model.predict(forecast=forecast) + assert samples["S"].shape == (num_samples, duration + forecast) + assert samples["E"].shape == (num_samples, duration + forecast) + assert samples["I"].shape == (num_samples, duration + forecast) + + +@pytest.mark.parametrize("duration", [3, 7]) +@pytest.mark.parametrize("forecast", [0, 7]) +@pytest.mark.parametrize( + "algo,options", + [ + ("svi", {}), + ("svi", {"haar": False}), + ("mcmc", {}), + ("mcmc", {"num_quant_bins": 2}), + ], + ids=str, +) +def test_coalescent_likelihood_smoke(duration, forecast, options, algo): + population = 100 + incubation_time = 2.0 + recovery_time = 7.0 + + # Generate data. + model = SuperspreadingSEIRModel( + population, incubation_time, recovery_time, [None] * duration + ) + for attempt in range(100): + data = model.generate({"R0": 1.5, "rho": 0.5, "k": 1.0})["obs"] + if data.sum(): + break + assert data.sum() > 0, "failed to generate positive data" + leaf_times = torch.rand(5).pow(0.5) * duration + coal_times = dist.CoalescentTimes(leaf_times).sample() + coal_times = coal_times[..., torch.randperm(coal_times.size(-1))] + + # Infer. + model = SuperspreadingSEIRModel( + population, + incubation_time, + recovery_time, + data, + leaf_times=leaf_times, + coal_times=coal_times, + ) + num_samples = 5 + if algo == "mcmc": + model.fit_mcmc( + warmup_steps=2, num_samples=num_samples, max_tree_depth=2, **options + ) + else: + model.fit_svi(num_steps=2, num_samples=num_samples, **options) + + # Predict and forecast. + samples = model.predict(forecast=forecast) + assert samples["S"].shape == (num_samples, duration + forecast) + assert samples["E"].shape == (num_samples, duration + forecast) + assert samples["I"].shape == (num_samples, duration + forecast) + + +@pytest.mark.parametrize("duration", [3, 7]) +@pytest.mark.parametrize("forecast", [0, 7]) +@pytest.mark.parametrize( + "algo,options", + [ + ("svi", {}), + ("svi", {"haar": False}), + ("mcmc", {}), + ("mcmc", {"haar": False}), + ("mcmc", {"num_quant_bins": 2}), + ], + ids=str, +) +def test_heterogeneous_sir_smoke(duration, forecast, options, algo): + population = 100 + recovery_time = 7.0 + + # Generate data. + model = HeterogeneousSIRModel(population, recovery_time, [None] * duration) + assert model.full_mass == [("R0", "rho0", "rho1", "rho2")] + for attempt in range(100): + data = model.generate({"R0": 1.5})["obs"] + if data.sum(): + break + assert data.sum() > 0, "failed to generate positive data" + + # Infer. + model = HeterogeneousSIRModel(population, recovery_time, data) + num_samples = 5 + model.fit_mcmc(warmup_steps=1, num_samples=num_samples, max_tree_depth=2, **options) + + # Predict and forecast. + samples = model.predict(forecast=forecast) + assert samples["S"].shape == (num_samples, duration + forecast) + assert samples["I"].shape == (num_samples, duration + forecast) + assert samples["beta"].shape == (num_samples, duration + forecast) + + +@pytest.mark.parametrize("duration", [4, 12]) +@pytest.mark.parametrize("forecast", [7]) +@pytest.mark.parametrize( + "options", + [ + xfail_param({}, reason="Delta is incompatible with relaxed inference"), + {"num_quant_bins": 2}, + {"num_quant_bins": 2, "haar": False}, + {"num_quant_bins": 2, "haar_full_mass": 0}, + {"num_quant_bins": 4}, + ], + ids=str, +) +def test_sparse_smoke(duration, forecast, options): + population = 100 + recovery_time = 7.0 + + # Generate data. + data = [None] * duration + mask = torch.arange(duration) % 4 == 3 + model = SparseSIRModel(population, recovery_time, data, mask) + assert model.full_mass == [("R0", "rho")] + for attempt in range(100): + data = model.generate({"R0": 1.5, "rho": 0.5})["obs"] + if data.sum(): + break + assert data.sum() > 0, "failed to generate positive data" + assert (data[1:] >= data[:-1]).all() + data[~mask] = math.nan + logger.info("data:\n{}".format(data)) + + # Infer. + model = SparseSIRModel(population, recovery_time, data, mask) + num_samples = 5 + model.fit_mcmc(warmup_steps=1, num_samples=num_samples, max_tree_depth=2, **options) + + # Predict and forecast. + samples = model.predict(forecast=forecast) + assert samples["S"].shape == (num_samples, duration + forecast) + assert samples["I"].shape == (num_samples, duration + forecast) + assert samples["O"].shape == (num_samples, duration + forecast) + assert (samples["O"][..., 1:] >= samples["O"][..., :-1]).all() + for O in samples["O"]: + logger.info("imputed:\n{}".format(O)) + assert (O[:duration][mask] == data[mask]).all() + + +@pytest.mark.parametrize("pre_obs_window", [6]) +@pytest.mark.parametrize("duration", [8]) +@pytest.mark.parametrize("forecast", [0, 7]) +@pytest.mark.parametrize( + "options", + [ + {}, + {"haar": False}, + {"haar_full_mass": 0}, + {"num_quant_bins": 2}, + ], + ids=str, +) +def test_unknown_start_smoke(duration, pre_obs_window, forecast, options): + population = 100 + recovery_time = 7.0 + + # Generate data. + data = [None] * duration + model = UnknownStartSIRModel(population, recovery_time, pre_obs_window, data) + assert model.full_mass == [("R0", "rho0", "rho1")] + for attempt in range(100): + data = model.generate({"R0": 1.5, "rho0": 0.1, "rho1": 0.5})["obs"] + assert len(data) == pre_obs_window + duration + data = data[pre_obs_window:] + if data.sum(): + break + assert data.sum() > 0, "failed to generate positive data" + logger.info("data:\n{}".format(data)) + + # Infer. + model = UnknownStartSIRModel(population, recovery_time, pre_obs_window, data) + num_samples = 5 + model.fit_mcmc(warmup_steps=1, num_samples=num_samples, max_tree_depth=2, **options) + + # Predict and forecast. + samples = model.predict(forecast=forecast) + assert samples["S"].shape == (num_samples, pre_obs_window + duration + forecast) + assert samples["I"].shape == (num_samples, pre_obs_window + duration + forecast) + + # Check time of first infection. + t = samples["first_infection"] + logger.info("first_infection:\n{}".format(t)) + assert t.shape == (num_samples,) + assert (0 <= t).all() + assert (t < pre_obs_window + duration).all() + for I, ti in zip(samples["I"], t): + assert (I[:ti] == 0).all() + assert I[ti] > 0 + + +@pytest.mark.parametrize("duration", [3, 7]) +@pytest.mark.parametrize("forecast", [0, 7]) +@pytest.mark.parametrize( + "algo,options", + [ + ("svi", {}), + ("svi", {"haar": False}), + ("mcmc", {}), + ("mcmc", {"haar": False}), + ("mcmc", {"haar_full_mass": 0}), + ("mcmc", {"num_quant_bins": 2}), + ], + ids=str, +) +def test_regional_smoke(duration, forecast, options, algo): + num_regions = 6 + coupling = torch.eye(num_regions).clamp(min=0.1) + population = torch.tensor([2.0, 3.0, 4.0, 10.0, 100.0, 1000.0]) + recovery_time = 7.0 + + # Generate data. + model = RegionalSIRModel( + population, coupling, recovery_time, data=[None] * duration + ) + assert model.full_mass == [("R0", "rho_c1", "rho_c0", "rho")] + for attempt in range(100): + data = model.generate({"R0": 1.5, "rho": 0.5})["obs"] + assert data.shape == (duration, num_regions) + if data.sum(): + break + assert data.sum() > 0, "failed to generate positive data" + + # Infer. + model = RegionalSIRModel(population, coupling, recovery_time, data) + num_samples = 5 + if algo == "mcmc": + model.fit_mcmc( + warmup_steps=1, num_samples=num_samples, max_tree_depth=2, **options + ) + else: + model.fit_svi(num_steps=2, num_samples=num_samples, **options) + + # Predict and forecast. + samples = model.predict(forecast=forecast) + assert samples["S"].shape == (num_samples, duration + forecast, num_regions) + assert samples["I"].shape == (num_samples, duration + forecast, num_regions) + + +class RegionalSIRModelWithFinalize(RegionalSIRModel): + def finalize(self, params, prev, curr): + assert set(prev.keys()) == set(curr.keys()) + for key in prev: + assert prev[key].shape == curr[key].shape + I = curr["I"] + I_mean = I.mean(dim=[-1, -2], keepdim=True).expand_as(I) + with self.region_plate, self.time_plate: + pyro.sample("likelihood", dist.Normal(I_mean, 1.0), obs=I) + + +@pytest.mark.parametrize("duration", [3, 7]) +@pytest.mark.parametrize("forecast", [0, 7]) +@pytest.mark.parametrize( + "algo,options", + [ + ("svi", {}), + ("svi", {"haar": False}), + ("mcmc", {}), + ("mcmc", {"haar": False}), + ("mcmc", {"haar_full_mass": 0}), + ("mcmc", {"num_quant_bins": 2}), + ], + ids=str, +) +def test_regional_finalize_smoke(duration, forecast, options, algo): + num_regions = 6 + coupling = torch.eye(num_regions).clamp(min=0.1) + population = torch.tensor([2.0, 3.0, 4.0, 10.0, 100.0, 1000.0]) + recovery_time = 7.0 + + # Generate data. + model = RegionalSIRModelWithFinalize( + population, coupling, recovery_time, data=[None] * duration + ) + assert model.full_mass == [("R0", "rho_c1", "rho_c0", "rho")] + for attempt in range(100): + data = model.generate({"R0": 1.5, "rho": 0.5})["obs"] + assert data.shape == (duration, num_regions) + if data.sum(): + break + assert data.sum() > 0, "failed to generate positive data" + + # Infer. + model = RegionalSIRModelWithFinalize(population, coupling, recovery_time, data) + num_samples = 5 + if algo == "mcmc": + model.fit_mcmc( + warmup_steps=1, num_samples=num_samples, max_tree_depth=2, **options + ) + else: + model.fit_svi(num_steps=2, num_samples=num_samples, **options) + + # Predict and forecast. + samples = model.predict(forecast=forecast) + assert samples["S"].shape == (num_samples, duration + forecast, num_regions) + assert samples["I"].shape == (num_samples, duration + forecast, num_regions) + + +@pytest.mark.parametrize("duration", [3, 7]) +@pytest.mark.parametrize("forecast", [0, 7]) +@pytest.mark.parametrize( + "algo,options", + [ + ("svi", {}), + ("svi", {"haar": False}), + ("mcmc", {}), + ("mcmc", {"haar": False}), + ("mcmc", {"haar_full_mass": 0}), + ("mcmc", {"num_quant_bins": 2}), + ("mcmc", {"jit_compile": True}), + ("mcmc", {"jit_compile": True, "haar": False}), + ("mcmc", {"jit_compile": True, "num_quant_bins": 2}), + ], + ids=str, +) +def test_hetero_regional_smoke(duration, forecast, options, algo): + num_regions = 6 + coupling = torch.eye(num_regions).clamp(min=0.1) + population = torch.tensor([2.0, 3.0, 4.0, 10.0, 100.0, 1000.0]) + recovery_time = 7.0 + + # Generate data. + model = HeterogeneousRegionalSIRModel( + population, coupling, recovery_time, data=[None] * duration + ) + assert model.full_mass == [("R0", "R_drift", "rho0", "rho_drift")] + for attempt in range(100): + data = model.generate({"R0": 1.5})["obs"] + assert data.shape == (duration, num_regions) + if data.sum(): + break + assert data.sum() > 0, "failed to generate positive data" + + # Infer. + model = HeterogeneousRegionalSIRModel(population, coupling, recovery_time, data) + num_samples = 5 + if algo == "mcmc": + model.fit_mcmc( + warmup_steps=1, num_samples=num_samples, max_tree_depth=2, **options + ) + else: + model.fit_svi(num_steps=2, num_samples=num_samples, **options) + + # Predict and forecast. + samples = model.predict(forecast=forecast) + assert samples["S"].shape == (num_samples, duration + forecast, num_regions) + assert samples["I"].shape == (num_samples, duration + forecast, num_regions) diff --git a/pyro/source/tests/contrib/epidemiology/test_quant.py b/pyro/source/tests/contrib/epidemiology/test_quant.py new file mode 100644 index 0000000000000000000000000000000000000000..d2a0edbc1de5e26f0fc9c0b237c7ee33442acd76 --- /dev/null +++ b/pyro/source/tests/contrib/epidemiology/test_quant.py @@ -0,0 +1,29 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +from pyro.contrib.epidemiology.util import compute_bin_probs + + +@pytest.mark.parametrize("num_quant_bins", [2, 4, 8, 12, 16]) +def test_quantization_scheme(num_quant_bins, num_samples=1000 * 1000): + min, max = 0, 7 + probs = torch.zeros(max + 1) + + x = torch.linspace(-0.5, max + 0.5, num_samples) + bin_probs = compute_bin_probs(x - x.floor(), num_quant_bins=num_quant_bins) + x_floor = x.floor() + + q_min = 1 - num_quant_bins // 2 + q_max = 1 + num_quant_bins // 2 + + for k, q in enumerate(range(q_min, q_max)): + y = (x_floor + q).long() + y = torch.max(y, 2 * min - 1 - y) + y = torch.min(y, 2 * max + 1 - y) + probs.scatter_add_(0, y, bin_probs[:, k] / num_samples) + + max_deviation = (probs - 1.0 / (max + 1.0)).abs().max().item() + assert max_deviation < 1.0e-4 diff --git a/pyro/source/tests/contrib/epidemiology/test_util.py b/pyro/source/tests/contrib/epidemiology/test_util.py new file mode 100644 index 0000000000000000000000000000000000000000..df1b90b4a75ce95cbdc110cef1a920d96a8da3c3 --- /dev/null +++ b/pyro/source/tests/contrib/epidemiology/test_util.py @@ -0,0 +1,44 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +from pyro.contrib.epidemiology.util import cat2, clamp +from tests.common import assert_equal + + +@pytest.mark.parametrize("min", [None, 0.0, (), (2,)], ids=str) +@pytest.mark.parametrize("max", [None, 1.0, (), (2,)], ids=str) +@pytest.mark.parametrize("shape", [(2,), (3, 2)], ids=str) +def test_clamp(shape, min, max): + tensor = torch.randn(shape) + if isinstance(min, tuple): + min = torch.zeros(min) + if isinstance(max, tuple): + max = torch.ones(max) + + actual = clamp(tensor, min=min, max=max) + + expected = tensor + if min is not None: + min = torch.as_tensor(min).expand_as(tensor) + expected = torch.max(min, expected) + if max is not None: + max = torch.as_tensor(max).expand_as(tensor) + expected = torch.min(max, expected) + + assert_equal(actual, expected) + + +@pytest.mark.parametrize("shape", [(), (2,), (2, 3), (2, 3, 4)], ids=str) +def test_cat2_scalar(shape): + tensor = torch.randn(shape) + for dim in range(-len(shape), 0): + expected_shape = list(shape) + expected_shape[dim] += 1 + expected_shape = torch.Size(expected_shape) + assert cat2(tensor, 0, dim=dim).shape == expected_shape + assert cat2(0, tensor, dim=dim).shape == expected_shape + assert (cat2(tensor, 0, dim=dim).unbind(dim)[-1] == 0).all() + assert (cat2(0, tensor, dim=dim).unbind(dim)[0] == 0).all() diff --git a/pyro/source/tests/contrib/forecast/__init__.py b/pyro/source/tests/contrib/forecast/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/tests/contrib/forecast/test_evaluate.py b/pyro/source/tests/contrib/forecast/test_evaluate.py new file mode 100644 index 0000000000000000000000000000000000000000..c5c982f4c8d726cd22f01e1e0994f4436de6c9df --- /dev/null +++ b/pyro/source/tests/contrib/forecast/test_evaluate.py @@ -0,0 +1,149 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import pytest +import torch + +import pyro +import pyro.distributions as dist +from pyro.contrib.forecast import Forecaster, ForecastingModel, HMCForecaster, backtest +from pyro.contrib.forecast.evaluate import DEFAULT_METRICS +from pyro.util import optional + + +class Model(ForecastingModel): + def model(self, zero_data, covariates): + loc = zero_data[..., :1, :] + scale = pyro.sample("scale", dist.LogNormal(loc, 1).to_event(1)) + + with self.time_plate: + jumps = pyro.sample("jumps", dist.Normal(0, scale).to_event(1)) + prediction = jumps.cumsum(-2) + + noise_dist = dist.Normal(zero_data, 1) + self.predict(noise_dist, prediction) + + +WINDOWS = [ + (None, 1, None, 1, 8), + (None, 10, None, 10, 1), + (10, 1, None, 3, 5), + (None, 5, 10, 1, 5), + (7, 1, 7, 1, 7), + (14, 1, 7, 1, 1), +] + + +@pytest.mark.parametrize( + "train_window,min_train_window,test_window,min_test_window,stride", WINDOWS +) +@pytest.mark.parametrize("warm_start", [False, True], ids=["cold", "warm"]) +def test_simple( + train_window, min_train_window, test_window, min_test_window, stride, warm_start +): + duration = 30 + obs_dim = 2 + covariates = torch.zeros(duration, 0) + data = torch.randn(duration, obs_dim) + 4 + forecaster_options = {"num_steps": 2, "warm_start": warm_start} + + expect_error = warm_start and train_window is not None + with optional(pytest.raises(ValueError), expect_error): + windows = backtest( + data, + covariates, + Model, + train_window=train_window, + min_train_window=min_train_window, + test_window=test_window, + min_test_window=min_test_window, + stride=stride, + forecaster_options=forecaster_options, + ) + if not expect_error: + assert any(window["t0"] == 0 for window in windows) + if stride == 1: + assert any(window["t2"] == duration for window in windows) + for window in windows: + assert window["train_walltime"] >= 0 + assert window["test_walltime"] >= 0 + for name in DEFAULT_METRICS: + assert name in window + assert 0 < window[name] < math.inf + + +@pytest.mark.parametrize( + "train_window,min_train_window,test_window,min_test_window,stride", WINDOWS +) +@pytest.mark.parametrize("engine", ["svi", "hmc"]) +def test_poisson( + train_window, min_train_window, test_window, min_test_window, stride, engine +): + duration = 30 + obs_dim = 2 + covariates = torch.zeros(duration, 0) + rate = torch.randn(duration, obs_dim) + 4 + counts = dist.Poisson(rate).sample() + + # Transform count data to log domain. + data = counts.log1p() + + def transform(pred, truth): + pred = dist.Poisson(pred.clamp(min=1e-4).expm1()).sample() + truth = truth.expm1() + return pred, truth + + if engine == "svi": + forecaster_fn = Forecaster + forecaster_options = {"num_steps": 2} + else: + forecaster_fn = HMCForecaster + forecaster_options = {"num_warmup": 1, "num_samples": 1} + + windows = backtest( + data, + covariates, + Model, + forecaster_fn=forecaster_fn, + transform=transform, + train_window=train_window, + min_train_window=min_train_window, + test_window=test_window, + min_test_window=min_test_window, + stride=stride, + forecaster_options=forecaster_options, + ) + + assert any(window["t0"] == 0 for window in windows) + if stride == 1: + assert any(window["t0"] == 0 for window in windows) + assert any(window["t2"] == duration for window in windows) + for name in DEFAULT_METRICS: + for window in windows: + assert name in window + assert 0 < window[name] < math.inf + + +def test_custom_warm_start(): + duration = 30 + obs_dim = 2 + covariates = torch.zeros(duration, 0) + data = torch.randn(duration, obs_dim) + 4 + min_train_window = 10 + + def forecaster_options(t0, t1, t2): + if t1 == min_train_window: + return {"num_steps": 2, "warm_start": True} + else: + return {"num_steps": 0, "warm_start": True} + + backtest( + data, + covariates, + Model, + min_train_window=min_train_window, + test_window=10, + forecaster_options=forecaster_options, + ) diff --git a/pyro/source/tests/contrib/forecast/test_forecaster.py b/pyro/source/tests/contrib/forecast/test_forecaster.py new file mode 100644 index 0000000000000000000000000000000000000000..261dd3f6827b12c557b9c5a1af02147e31cc0a5f --- /dev/null +++ b/pyro/source/tests/contrib/forecast/test_forecaster.py @@ -0,0 +1,330 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.contrib.forecast import Forecaster, ForecastingModel, HMCForecaster +from pyro.infer.autoguide import AutoDelta +from pyro.infer.reparam import LinearHMMReparam, StableReparam +from pyro.optim import Adam + + +class Model0(ForecastingModel): + def model(self, zero_data, covariates): + with pyro.plate_stack("batch", zero_data.shape[:-2], rightmost_dim=-2): + loc = zero_data[..., :1, 0] + scale = pyro.sample("scale", dist.LogNormal(loc, 1)) + + with self.time_plate: + jumps = pyro.sample("jumps", dist.Normal(0, scale)) + prediction = jumps.cumsum(-1).unsqueeze(-1) + zero_data + + noise_dist = dist.Laplace(zero_data, 1) + self.predict(noise_dist, prediction) + + +class Model1(ForecastingModel): + def model(self, zero_data, covariates): + with pyro.plate_stack("batch", zero_data.shape[:-2], rightmost_dim=-2): + loc = zero_data[..., :1, :] + scale = pyro.sample("scale", dist.LogNormal(loc, 1).to_event(1)) + + with self.time_plate: + jumps = pyro.sample("jumps", dist.Normal(0, scale).to_event(1)) + prediction = jumps.cumsum(-2) + + noise_dist = dist.Laplace(0, 1) + self.predict(noise_dist, prediction) + + +class Model2(ForecastingModel): + def model(self, zero_data, covariates): + with pyro.plate_stack("batch", zero_data.shape[:-2], rightmost_dim=-2): + loc = zero_data[..., :1, :] + scale = pyro.sample("scale", dist.LogNormal(loc, 1).to_event(1)) + + with self.time_plate: + jumps = pyro.sample("jumps", dist.Normal(0, scale).to_event(1)) + prediction = jumps.cumsum(-2) + + scale_tril = torch.eye(zero_data.size(-1)) + noise_dist = dist.MultivariateNormal(zero_data, scale_tril=scale_tril) + self.predict(noise_dist, prediction) + + +class Model3(ForecastingModel): + def model(self, zero_data, covariates): + with pyro.plate_stack("batch", zero_data.shape[:-2], rightmost_dim=-2): + loc = zero_data[..., :1, :] + scale = pyro.sample("scale", dist.LogNormal(loc, 1).to_event(1)) + + with self.time_plate: + jumps = pyro.sample("jumps", dist.Normal(0, scale).to_event(1)) + prediction = jumps.cumsum(-2) + + duration, obs_dim = zero_data.shape[-2:] + noise_dist = dist.GaussianHMM( + dist.Normal(0, 1).expand([obs_dim]).to_event(1), + torch.eye(obs_dim), + dist.Normal(0, 1).expand([obs_dim]).to_event(1), + torch.eye(obs_dim), + dist.Normal(0, 1).expand([obs_dim]).to_event(1), + duration=duration, + ) + self.predict(noise_dist, prediction) + + +class Model4(ForecastingModel): + def model(self, zero_data, covariates): + with pyro.plate_stack("batch", zero_data.shape[:-2], rightmost_dim=-2): + loc = zero_data[..., :1, :] + scale = pyro.sample("scale", dist.LogNormal(loc, 1).to_event(1)) + + with self.time_plate: + jumps = pyro.sample("jumps", dist.Normal(0, scale).to_event(1)) + prediction = jumps.cumsum(-2) + + duration, obs_dim = zero_data.shape[-2:] + noise_dist = dist.LinearHMM( + dist.Stable(1.9, 0).expand([obs_dim]).to_event(1), + torch.eye(obs_dim), + dist.Stable(1.9, 0).expand([obs_dim]).to_event(1), + torch.eye(obs_dim), + dist.Stable(1.9, 0).expand([obs_dim]).to_event(1), + duration=duration, + ) + rep = StableReparam() + with poutine.reparam(config={"residual": LinearHMMReparam(rep, rep, rep)}): + self.predict(noise_dist, prediction) + + +@pytest.mark.parametrize("t_obs", [1, 7]) +@pytest.mark.parametrize("t_forecast", [1, 3]) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("cov_dim", [0, 1, 6]) +@pytest.mark.parametrize("obs_dim", [1, 2]) +@pytest.mark.parametrize( + "time_reparam, dct_gradients", + [ + (None, False), + ("haar", False), + ("dct", False), + (None, True), + ], +) +@pytest.mark.parametrize("Model", [Model0, Model1, Model2, Model3, Model4]) +@pytest.mark.parametrize("engine", ["svi", "hmc"]) +def test_smoke( + Model, + batch_shape, + t_obs, + t_forecast, + obs_dim, + cov_dim, + time_reparam, + dct_gradients, + engine, +): + model = Model() + data = torch.randn(batch_shape + (t_obs, obs_dim)) + covariates = torch.randn(batch_shape + (t_obs + t_forecast, cov_dim)) + + if engine == "svi": + forecaster = Forecaster( + model, + data, + covariates[..., :t_obs, :], + num_steps=2, + log_every=1, + time_reparam=time_reparam, + dct_gradients=dct_gradients, + ) + else: + if dct_gradients is True: + pytest.skip("Duplicated test.") + forecaster = HMCForecaster( + model, + data, + covariates[..., :t_obs, :], + max_tree_depth=1, + num_warmup=1, + num_samples=1, + jit_compile=False, + ) + + num_samples = 5 + samples = forecaster(data, covariates, num_samples) + assert samples.shape == (num_samples,) + batch_shape + ( + t_forecast, + obs_dim, + ) + samples = forecaster(data, covariates, num_samples, batch_size=2) + assert samples.shape == (num_samples,) + batch_shape + ( + t_forecast, + obs_dim, + ) + + +@pytest.mark.parametrize("t_obs", [1, 7]) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("cov_dim", [0, 1, 6]) +@pytest.mark.parametrize("obs_dim", [1, 2]) +@pytest.mark.parametrize("Model", [Model0, Model1, Model2, Model3, Model4]) +def test_trace_smoke(Model, batch_shape, t_obs, obs_dim, cov_dim): + model = Model() + data = torch.randn(batch_shape + (t_obs, obs_dim)) + covariates = torch.randn(batch_shape + (t_obs, cov_dim)) + forecaster = Forecaster(model, data, covariates, num_steps=2, log_every=1) + hmc_forecaster = HMCForecaster( + model, + data, + covariates, + max_tree_depth=1, + num_warmup=1, + num_samples=1, + jit_compile=False, + ) + + # This is the desired syntax for recording posterior latent samples. + num_samples = 5 + with poutine.trace() as svi: + forecaster(data, covariates, num_samples) + with poutine.trace() as hmc: + hmc_forecaster(data, covariates, num_samples) + + # Check they match the equivalent poutine version. + dim = -1 - forecaster.max_plate_nesting + with torch.no_grad(): + with poutine.trace() as tr: + with pyro.plate("particles", num_samples, dim=dim): + forecaster.guide(data, covariates) + with poutine.trace() as expected: + with poutine.replay(trace=tr.trace): + with pyro.plate("particles", num_samples, dim=dim): + model(data, covariates) + for actual, engine in zip([svi, hmc], ["svi", "hmc"]): + for name, site in expected.trace.nodes.items(): + expected_fn = site["fn"] + if type(expected_fn).__name__ == "_Subsample": + continue + actual_fn = actual.trace.nodes[name]["fn"] + assert name in actual.trace.nodes, engine + assert actual_fn.event_shape == expected_fn.event_shape, engine + + +@pytest.mark.parametrize("subsample_aware", [False, True]) +def test_svi_custom_smoke(subsample_aware): + t_obs = 5 + t_forecast = 4 + cov_dim = 3 + obs_dim = 2 + + model = Model0() + data = torch.randn(t_obs, obs_dim) + covariates = torch.randn(t_obs + t_forecast, cov_dim) + guide = AutoDelta(model) + optim = Adam({}) + + Forecaster( + model, + data, + covariates[..., :t_obs, :], + guide=guide, + optim=optim, + subsample_aware=subsample_aware, + num_steps=2, + log_every=1, + ) + + +class SubsampleModel3(ForecastingModel): + def model(self, zero_data, covariates): + with pyro.plate("batch", len(zero_data), dim=-2): + zero_data = pyro.subsample(zero_data, event_dim=1) + covariates = pyro.subsample(covariates, event_dim=1) + + loc = zero_data[..., :1, :] + scale = pyro.sample("scale", dist.LogNormal(loc, 1).to_event(1)) + + with self.time_plate: + jumps = pyro.sample("jumps", dist.Normal(0, scale).to_event(1)) + prediction = jumps.cumsum(-2) + + duration, obs_dim = zero_data.shape[-2:] + noise_dist = dist.GaussianHMM( + dist.Normal(0, 1).expand([obs_dim]).to_event(1), + torch.eye(obs_dim), + dist.Normal(0, 1).expand([obs_dim]).to_event(1), + torch.eye(obs_dim), + dist.Normal(0, 1).expand([obs_dim]).to_event(1), + duration=duration, + ) + self.predict(noise_dist, prediction) + + +class SubsampleModel4(ForecastingModel): + def model(self, zero_data, covariates): + with pyro.plate("batch", len(zero_data), dim=-2): + zero_data = pyro.subsample(zero_data, event_dim=1) + covariates = pyro.subsample(covariates, event_dim=1) + + loc = zero_data[..., :1, :] + scale = pyro.sample("scale", dist.LogNormal(loc, 1).to_event(1)) + + with self.time_plate: + jumps = pyro.sample("jumps", dist.Normal(0, scale).to_event(1)) + prediction = jumps.cumsum(-2) + + duration, obs_dim = zero_data.shape[-2:] + noise_dist = dist.LinearHMM( + dist.Stable(1.9, 0).expand([obs_dim]).to_event(1), + torch.eye(obs_dim), + dist.Stable(1.9, 0).expand([obs_dim]).to_event(1), + torch.eye(obs_dim), + dist.Stable(1.9, 0).expand([obs_dim]).to_event(1), + duration=duration, + ) + rep = StableReparam() + with poutine.reparam(config={"residual": LinearHMMReparam(rep, rep, rep)}): + self.predict(noise_dist, prediction) + + +@pytest.mark.parametrize("t_obs", [1, 7]) +@pytest.mark.parametrize("t_forecast", [1, 3]) +@pytest.mark.parametrize("cov_dim", [0, 6]) +@pytest.mark.parametrize("obs_dim", [1, 2]) +@pytest.mark.parametrize("Model", [SubsampleModel3, SubsampleModel4]) +def test_subsample_smoke(Model, t_obs, t_forecast, obs_dim, cov_dim): + batch_shape = (4,) + model = Model() + data = torch.randn(batch_shape + (t_obs, obs_dim)) + covariates = torch.randn(batch_shape + (t_obs + t_forecast, cov_dim)) + + def create_plates(zero_data, covariates): + size = len(zero_data) + return pyro.plate("batch", size, subsample_size=2, dim=-2) + + forecaster = Forecaster( + model, + data, + covariates[..., :t_obs, :], + num_steps=2, + log_every=1, + create_plates=create_plates, + ) + + num_samples = 5 + samples = forecaster(data, covariates, num_samples) + assert samples.shape == (num_samples,) + batch_shape + ( + t_forecast, + obs_dim, + ) + samples = forecaster(data, covariates, num_samples, batch_size=2) + assert samples.shape == (num_samples,) + batch_shape + ( + t_forecast, + obs_dim, + ) diff --git a/pyro/source/tests/contrib/forecast/test_util.py b/pyro/source/tests/contrib/forecast/test_util.py new file mode 100644 index 0000000000000000000000000000000000000000..f6f7f6725dcf26c1dff30b280d51ef2fcf7bfe0c --- /dev/null +++ b/pyro/source/tests/contrib/forecast/test_util.py @@ -0,0 +1,156 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch +from torch.distributions import transform_to + +import pyro.distributions as dist +from pyro.contrib.forecast.util import ( + UNIVARIATE_DISTS, + UNIVARIATE_TRANSFORMS, + prefix_condition, + reshape_batch, +) +from tests.ops.gaussian import random_mvn + +DISTS = [ + dist.Bernoulli, + dist.Beta, + dist.BetaBinomial, + dist.Cauchy, + dist.Dirichlet, + dist.DirichletMultinomial, + dist.Exponential, + dist.FoldedDistribution, + dist.Gamma, + dist.GammaPoisson, + dist.GaussianHMM, + dist.Geometric, + dist.IndependentHMM, + dist.InverseGamma, + dist.Laplace, + dist.LinearHMM, + dist.LogNormal, + dist.MaskedDistribution, + dist.MultivariateNormal, + dist.NegativeBinomial, + dist.Normal, + dist.StudentT, + dist.TransformedDistribution, + dist.Uniform, + dist.ZeroInflatedPoisson, + dist.ZeroInflatedNegativeBinomial, +] + + +def random_dist(Dist, shape, transform=None): + if Dist is dist.FoldedDistribution: + return Dist(random_dist(dist.Normal, shape)) + elif Dist is dist.MaskedDistribution: + base_dist = random_dist(dist.Normal, shape) + mask = torch.empty(shape, dtype=torch.bool).bernoulli_(0.5) + return base_dist.mask(mask) + elif Dist is dist.TransformedDistribution: + base_dist = random_dist(dist.Normal, shape) + transforms = [ + dist.transforms.ExpTransform(), + dist.transforms.ComposeTransform( + [ + dist.transforms.AffineTransform(1, 1), + dist.transforms.ExpTransform().inv, + ] + ), + ] + return dist.TransformedDistribution(base_dist, transforms) + elif Dist in (dist.GaussianHMM, dist.LinearHMM): + batch_shape, duration, obs_dim = shape[:-2], shape[-2], shape[-1] + hidden_dim = obs_dim + 1 + init_dist = random_dist(dist.Normal, batch_shape + (hidden_dim,)).to_event(1) + trans_mat = torch.randn(batch_shape + (duration, hidden_dim, hidden_dim)) + trans_dist = random_dist( + dist.Normal, batch_shape + (duration, hidden_dim) + ).to_event(1) + obs_mat = torch.randn(batch_shape + (duration, hidden_dim, obs_dim)) + obs_dist = random_dist(dist.Normal, batch_shape + (duration, obs_dim)).to_event( + 1 + ) + if Dist is dist.LinearHMM and transform is not None: + obs_dist = dist.TransformedDistribution(obs_dist, transform) + return Dist( + init_dist, trans_mat, trans_dist, obs_mat, obs_dist, duration=duration + ) + elif Dist is dist.IndependentHMM: + batch_shape, duration, obs_dim = shape[:-2], shape[-2], shape[-1] + base_shape = batch_shape + (obs_dim, duration, 1) + base_dist = random_dist(dist.GaussianHMM, base_shape) + return Dist(base_dist) + elif Dist is dist.MultivariateNormal: + return random_mvn(shape[:-1], shape[-1]) + elif Dist is dist.Uniform: + low = torch.randn(shape) + high = low + torch.randn(shape).exp() + return Dist(low, high) + else: + params = { + name: transform_to(Dist.arg_constraints[name])(torch.rand(shape) - 0.5) + for name in UNIVARIATE_DISTS[Dist] + } + return Dist(**params) + + +@pytest.mark.parametrize("dim", [1, 7]) +@pytest.mark.parametrize("t,f", [(1, 1), (2, 1), (3, 2)]) +@pytest.mark.parametrize("batch_shape", [(), (6,), (5, 4)]) +@pytest.mark.parametrize("Dist", DISTS) +def test_prefix_condition(Dist, batch_shape, t, f, dim): + if Dist is dist.LinearHMM: + pytest.xfail(reason="not implemented") + duration = t + f + d = random_dist(Dist, batch_shape + (duration, dim)) + d = d.to_event(2 - d.event_dim) + data = d.sample() + expected = d.log_prob(data) + d2 = prefix_condition(d, data[..., :t, :]) + actual = d2.log_prob(data[..., t:, :]) + actual.shape == expected.shape + + +@pytest.mark.parametrize("dim", [1, 7]) +@pytest.mark.parametrize("duration", [1, 2, 3]) +@pytest.mark.parametrize("batch_shape", [(), (6,), (5, 4)]) +@pytest.mark.parametrize("Dist", DISTS) +def test_reshape_batch(Dist, batch_shape, duration, dim): + d = random_dist(Dist, batch_shape + (duration, dim)) + d = d.to_event(2 - d.event_dim) + assert d.batch_shape == batch_shape + assert d.event_shape == (duration, dim) + + actual = reshape_batch(d, batch_shape + (1,)) + assert type(actual) is type(d) + assert actual.batch_shape == batch_shape + (1,) + assert actual.event_shape == (duration, dim) + + +@pytest.mark.parametrize("dim", [1, 7]) +@pytest.mark.parametrize("duration", [1, 2, 3]) +@pytest.mark.parametrize("batch_shape", [(), (6,), (5, 4)]) +@pytest.mark.parametrize("transform", list(UNIVARIATE_TRANSFORMS.keys())) +def test_reshape_transform_batch(transform, batch_shape, duration, dim): + params = { + p: torch.rand(batch_shape + (duration, dim)) + for p in UNIVARIATE_TRANSFORMS[transform] + } + t = transform(**params) + d = random_dist(dist.LinearHMM, batch_shape + (duration, dim), transform=t) + d = d.to_event(2 - d.event_dim) + assert d.batch_shape == batch_shape + assert d.event_shape == (duration, dim) + + actual = reshape_batch(d, batch_shape + (1,)) + assert type(actual) is type(d) + assert actual.batch_shape == batch_shape + (1,) + assert actual.event_shape == (duration, dim) + + # test if we have reshape transforms correctly + assert actual.rsample().shape == actual.shape() diff --git a/pyro/source/tests/contrib/funsor/conftest.py b/pyro/source/tests/contrib/funsor/conftest.py new file mode 100644 index 0000000000000000000000000000000000000000..d94a652776b9ba753b79e4786a00e3703c3c76a8 --- /dev/null +++ b/pyro/source/tests/contrib/funsor/conftest.py @@ -0,0 +1,15 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest + + +def pytest_collection_modifyitems(items): + for item in items: + if item.nodeid.startswith("tests/contrib/funsor"): + if "stage" not in item.keywords: + item.add_marker(pytest.mark.stage("funsor")) + if "init" not in item.keywords: + item.add_marker(pytest.mark.init(rng_seed=123)) + if "test_pyroapi" in item.nodeid and "test_mean_field_ok" in item.nodeid: + item.add_marker(pytest.mark.xfail(reason="not implemented")) diff --git a/pyro/source/tests/contrib/funsor/test_enum_funsor.py b/pyro/source/tests/contrib/funsor/test_enum_funsor.py new file mode 100644 index 0000000000000000000000000000000000000000..e8dbc60c69aecf1462cf1c2b920aaa184b1d4f5f --- /dev/null +++ b/pyro/source/tests/contrib/funsor/test_enum_funsor.py @@ -0,0 +1,1945 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import logging +import os + +import pyroapi +import pytest +import torch +from torch.autograd import grad +from torch.distributions import constraints + +from pyro.ops.indexing import Vindex +from pyro.util import torch_isnan +from tests.common import assert_equal, xfail_param + +# put all funsor-related imports here, so test collection works without funsor +try: + import funsor + + import pyro.contrib.funsor + + funsor.set_backend("torch") + from pyroapi import distributions as dist + from pyroapi import handlers, infer, pyro +except ImportError: + pytestmark = pytest.mark.skip(reason="funsor is not installed") + +logger = logging.getLogger(__name__) + +_PYRO_BACKEND = os.environ.get("TEST_ENUM_PYRO_BACKEND", "contrib.funsor") + + +def _check_loss_and_grads(expected_loss, actual_loss): + assert_equal( + actual_loss, + expected_loss, + msg="Expected:\n{}\nActual:\n{}".format( + expected_loss.detach().cpu().numpy(), actual_loss.detach().cpu().numpy() + ), + ) + + if "TEST_ENUM_PYRO_BACKEND" in os.environ: # only log if we manually set a backend + logging.debug( + "Expected:\n{}\nActual:\n{}".format( + expected_loss.detach().cpu().numpy(), actual_loss.detach().cpu().numpy() + ) + ) + + names = pyro.get_param_store().keys() + params = [pyro.param(name).unconstrained() for name in names] + actual_grads = grad(actual_loss, params, allow_unused=True, retain_graph=True) + expected_grads = grad(expected_loss, params, allow_unused=True, retain_graph=True) + for name, actual_grad, expected_grad in zip(names, actual_grads, expected_grads): + if actual_grad is None or expected_grad is None: + continue + assert not torch_isnan(actual_grad) + assert not torch_isnan(expected_grad) + assert_equal( + actual_grad, + expected_grad, + msg="{}\nExpected:\n{}\nActual:\n{}".format( + name, + expected_grad.detach().cpu().numpy(), + actual_grad.detach().cpu().numpy(), + ), + ) + + +@pytest.mark.parametrize("inner_dim", [2]) +@pytest.mark.parametrize("outer_dim", [2]) +@pyroapi.pyro_backend(_PYRO_BACKEND) +def test_elbo_plate_plate(outer_dim, inner_dim): + pyro.get_param_store().clear() + q = pyro.param("q", torch.tensor([0.75, 0.25], requires_grad=True)) + p = 0.2693204236205713 # for which kl(Categorical(q), Categorical(p)) = 0.5 + p = torch.tensor([p, 1 - p]) + + def model(): + d = dist.Categorical(p) + context1 = pyro.plate("outer", outer_dim, dim=-1) + context2 = pyro.plate("inner", inner_dim, dim=-2) + pyro.sample("w", d) + with context1: + pyro.sample("x", d) + with context2: + pyro.sample("y", d) + with context1, context2: + pyro.sample("z", d) + + def guide(): + d = dist.Categorical(pyro.param("q")) + context1 = pyro.plate("outer", outer_dim, dim=-1) + context2 = pyro.plate("inner", inner_dim, dim=-2) + pyro.sample("w", d, infer={"enumerate": "parallel"}) + with context1: + pyro.sample("x", d, infer={"enumerate": "parallel"}) + with context2: + pyro.sample("y", d, infer={"enumerate": "parallel"}) + with context1, context2: + pyro.sample("z", d, infer={"enumerate": "parallel"}) + + kl_node = torch.distributions.kl.kl_divergence( + torch.distributions.Categorical(q), torch.distributions.Categorical(p) + ) + kl = (1 + outer_dim + inner_dim + outer_dim * inner_dim) * kl_node + expected_loss = kl + expected_grad = grad(kl, [q.unconstrained()])[0] + + elbo = infer.TraceEnum_ELBO(max_plate_nesting=2) + actual_loss = elbo.differentiable_loss(model, guide) + actual_grad = grad(actual_loss, [q.unconstrained()])[0] + + assert_equal(actual_loss, expected_loss, prec=1e-5) + assert_equal(actual_grad, expected_grad, prec=1e-5) + + +@pytest.mark.parametrize("scale", [1, 10]) +@pyroapi.pyro_backend(_PYRO_BACKEND) +def test_elbo_enumerate_1(scale): + pyro.param( + "guide_probs_x", torch.tensor([0.1, 0.9]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_x", torch.tensor([0.4, 0.6]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_y", + torch.tensor([[0.75, 0.25], [0.55, 0.45]]), + constraint=constraints.simplex, + ) + pyro.param( + "model_probs_z", torch.tensor([0.3, 0.7]), constraint=constraints.simplex + ) + + @handlers.scale(scale=scale) + def auto_model(): + probs_x = pyro.param("model_probs_x") + probs_y = pyro.param("model_probs_y") + probs_z = pyro.param("model_probs_z") + x = pyro.sample("x", dist.Categorical(probs_x)) + pyro.sample("y", dist.Categorical(probs_y[x]), infer={"enumerate": "parallel"}) + pyro.sample("z", dist.Categorical(probs_z), obs=torch.tensor(0)) + + @handlers.scale(scale=scale) + def hand_model(): + probs_x = pyro.param("model_probs_x") + probs_z = pyro.param("model_probs_z") + pyro.sample("x", dist.Categorical(probs_x)) + pyro.sample("z", dist.Categorical(probs_z), obs=torch.tensor(0)) + + @infer.config_enumerate + @handlers.scale(scale=scale) + def guide(): + probs_x = pyro.param("guide_probs_x") + pyro.sample("x", dist.Categorical(probs_x)) + + elbo = infer.TraceEnum_ELBO(max_plate_nesting=0) + auto_loss = elbo.differentiable_loss(auto_model, guide) + hand_loss = elbo.differentiable_loss(hand_model, guide) + _check_loss_and_grads(hand_loss, auto_loss) + + +@pytest.mark.parametrize("scale", [1, 10]) +@pyroapi.pyro_backend(_PYRO_BACKEND) +def test_elbo_enumerate_2(scale): + pyro.param( + "guide_probs_x", torch.tensor([0.1, 0.9]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_x", torch.tensor([0.4, 0.6]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_y", + torch.tensor([[0.75, 0.25], [0.55, 0.45]]), + constraint=constraints.simplex, + ) + pyro.param( + "model_probs_z", + torch.tensor([[0.3, 0.7], [0.2, 0.8]]), + constraint=constraints.simplex, + ) + + @handlers.scale(scale=scale) + def auto_model(): + probs_x = pyro.param("model_probs_x") + probs_y = pyro.param("model_probs_y") + probs_z = pyro.param("model_probs_z") + x = pyro.sample("x", dist.Categorical(probs_x)) + y = pyro.sample( + "y", dist.Categorical(probs_y[x]), infer={"enumerate": "parallel"} + ) + pyro.sample("z", dist.Categorical(probs_z[y]), obs=torch.tensor(0)) + + @handlers.scale(scale=scale) + def hand_model(): + probs_x = pyro.param("model_probs_x") + probs_y = pyro.param("model_probs_y") + probs_z = pyro.param("model_probs_z") + probs_yz = probs_y.mm(probs_z) + x = pyro.sample("x", dist.Categorical(probs_x)) + pyro.sample("z", dist.Categorical(probs_yz[x]), obs=torch.tensor(0)) + + @infer.config_enumerate + @handlers.scale(scale=scale) + def guide(): + probs_x = pyro.param("guide_probs_x") + pyro.sample("x", dist.Categorical(probs_x)) + + elbo = infer.TraceEnum_ELBO(max_plate_nesting=0) + auto_loss = elbo.differentiable_loss(auto_model, guide) + hand_loss = elbo.differentiable_loss(hand_model, guide) + _check_loss_and_grads(hand_loss, auto_loss) + + +@pytest.mark.parametrize("scale", [1, 10]) +@pyroapi.pyro_backend(_PYRO_BACKEND) +def test_elbo_enumerate_3(scale): + pyro.param( + "guide_probs_x", torch.tensor([0.1, 0.9]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_x", torch.tensor([0.4, 0.6]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_y", + torch.tensor([[0.75, 0.25], [0.55, 0.45]]), + constraint=constraints.simplex, + ) + pyro.param( + "model_probs_z", + torch.tensor([[0.3, 0.7], [0.2, 0.8]]), + constraint=constraints.simplex, + ) + + def auto_model(): + probs_x = pyro.param("model_probs_x") + probs_y = pyro.param("model_probs_y") + probs_z = pyro.param("model_probs_z") + x = pyro.sample("x", dist.Categorical(probs_x)) + with handlers.scale(scale=scale): + y = pyro.sample( + "y", dist.Categorical(probs_y[x]), infer={"enumerate": "parallel"} + ) + pyro.sample("z", dist.Categorical(probs_z[y]), obs=torch.tensor(0)) + + def hand_model(): + probs_x = pyro.param("model_probs_x") + probs_y = pyro.param("model_probs_y") + probs_z = pyro.param("model_probs_z") + probs_yz = probs_y.mm(probs_z) + x = pyro.sample("x", dist.Categorical(probs_x)) + with handlers.scale(scale=scale): + pyro.sample("z", dist.Categorical(probs_yz[x]), obs=torch.tensor(0)) + + @infer.config_enumerate + def guide(): + probs_x = pyro.param("guide_probs_x") + pyro.sample("x", dist.Categorical(probs_x)) + + elbo = infer.TraceEnum_ELBO(max_plate_nesting=0) + auto_loss = elbo.differentiable_loss(auto_model, guide) + hand_loss = elbo.differentiable_loss(hand_model, guide) + _check_loss_and_grads(hand_loss, auto_loss) + + +@pytest.mark.parametrize("scale", [1, 10]) +@pytest.mark.parametrize( + "num_samples,num_masked", [(2, 2), (3, 2)], ids=["batch", "masked"] +) +@pyroapi.pyro_backend(_PYRO_BACKEND) +def test_elbo_enumerate_plate_1(num_samples, num_masked, scale): + # +---------+ + # x ----> y ----> z | + # | N | + # +---------+ + pyro.param( + "guide_probs_x", torch.tensor([0.1, 0.9]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_x", torch.tensor([0.4, 0.6]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_y", + torch.tensor([[0.75, 0.25], [0.55, 0.45]]), + constraint=constraints.simplex, + ) + pyro.param( + "model_probs_z", + torch.tensor([[0.3, 0.7], [0.2, 0.8]]), + constraint=constraints.simplex, + ) + + def auto_model(data): + probs_x = pyro.param("model_probs_x") + probs_y = pyro.param("model_probs_y") + probs_z = pyro.param("model_probs_z") + x = pyro.sample("x", dist.Categorical(probs_x)) + with handlers.scale(scale=scale): + y = pyro.sample( + "y", dist.Categorical(probs_y[x]), infer={"enumerate": "parallel"} + ) + if num_masked == num_samples: + with pyro.plate("data", len(data)): + pyro.sample("z", dist.Categorical(probs_z[y]), obs=data) + else: + with pyro.plate("data", len(data)): + with handlers.mask(mask=torch.arange(num_samples) < num_masked): + pyro.sample("z", dist.Categorical(probs_z[y]), obs=data) + + def hand_model(data): + probs_x = pyro.param("model_probs_x") + probs_y = pyro.param("model_probs_y") + probs_z = pyro.param("model_probs_z") + x = pyro.sample("x", dist.Categorical(probs_x)) + with handlers.scale(scale=scale): + y = pyro.sample( + "y", dist.Categorical(probs_y[x]), infer={"enumerate": "parallel"} + ) + for i in pyro.plate("data", num_masked): + pyro.sample("z_{}".format(i), dist.Categorical(probs_z[y]), obs=data[i]) + + @infer.config_enumerate + def guide(data): + probs_x = pyro.param("guide_probs_x") + pyro.sample("x", dist.Categorical(probs_x)) + + data = dist.Categorical(torch.tensor([0.3, 0.7])).sample((num_samples,)) + elbo = infer.TraceEnum_ELBO(max_plate_nesting=1) + auto_loss = elbo.differentiable_loss(auto_model, guide, data) + elbo = infer.TraceEnum_ELBO(max_plate_nesting=1) + hand_loss = elbo.differentiable_loss(hand_model, guide, data) + _check_loss_and_grads(hand_loss, auto_loss) + + +@pytest.mark.parametrize("scale", [1, 10]) +@pytest.mark.parametrize( + "num_samples,num_masked", [(2, 2), (3, 2)], ids=["batch", "masked"] +) +@pyroapi.pyro_backend(_PYRO_BACKEND) +def test_elbo_enumerate_plate_2(num_samples, num_masked, scale): + # +-----------------+ + # x ----> y ----> z | + # | N | + # +-----------------+ + pyro.param( + "guide_probs_x", torch.tensor([0.1, 0.9]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_x", torch.tensor([0.4, 0.6]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_y", + torch.tensor([[0.75, 0.25], [0.55, 0.45]]), + constraint=constraints.simplex, + ) + pyro.param( + "model_probs_z", + torch.tensor([[0.3, 0.7], [0.2, 0.8]]), + constraint=constraints.simplex, + ) + + def auto_model(data): + probs_x = pyro.param("model_probs_x") + probs_y = pyro.param("model_probs_y") + probs_z = pyro.param("model_probs_z") + x = pyro.sample("x", dist.Categorical(probs_x)) + with handlers.scale(scale=scale): + with pyro.plate("data", len(data)): + if num_masked == num_samples: + y = pyro.sample( + "y", + dist.Categorical(probs_y[x]), + infer={"enumerate": "parallel"}, + ) + pyro.sample("z", dist.Categorical(probs_z[y]), obs=data) + else: + with handlers.mask(mask=torch.arange(num_samples) < num_masked): + y = pyro.sample( + "y", + dist.Categorical(probs_y[x]), + infer={"enumerate": "parallel"}, + ) + pyro.sample("z", dist.Categorical(probs_z[y]), obs=data) + + def hand_model(data): + probs_x = pyro.param("model_probs_x") + probs_y = pyro.param("model_probs_y") + probs_z = pyro.param("model_probs_z") + x = pyro.sample("x", dist.Categorical(probs_x)) + with handlers.scale(scale=scale): + for i in pyro.plate("data", num_masked): + y = pyro.sample( + "y_{}".format(i), + dist.Categorical(probs_y[x]), + infer={"enumerate": "parallel"}, + ) + pyro.sample("z_{}".format(i), dist.Categorical(probs_z[y]), obs=data[i]) + + @infer.config_enumerate + def guide(data): + probs_x = pyro.param("guide_probs_x") + pyro.sample("x", dist.Categorical(probs_x)) + + data = dist.Categorical(torch.tensor([0.3, 0.7])).sample((num_samples,)) + elbo = infer.TraceEnum_ELBO(max_plate_nesting=1) + auto_loss = elbo.differentiable_loss(auto_model, guide, data) + hand_loss = elbo.differentiable_loss(hand_model, guide, data) + _check_loss_and_grads(hand_loss, auto_loss) + + +@pytest.mark.parametrize("scale", [1, 10]) +@pytest.mark.parametrize( + "num_samples,num_masked", [(2, 2), (3, 2)], ids=["batch", "masked"] +) +@pyroapi.pyro_backend(_PYRO_BACKEND) +def test_elbo_enumerate_plate_3(num_samples, num_masked, scale): + # +-----------------------+ + # | x ----> y ----> z | + # | N | + # +-----------------------+ + # This plate should remain unreduced since all enumeration is in a single plate. + pyro.param( + "guide_probs_x", torch.tensor([0.1, 0.9]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_x", torch.tensor([0.4, 0.6]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_y", + torch.tensor([[0.75, 0.25], [0.55, 0.45]]), + constraint=constraints.simplex, + ) + pyro.param( + "model_probs_z", + torch.tensor([[0.3, 0.7], [0.2, 0.8]]), + constraint=constraints.simplex, + ) + + @handlers.scale(scale=scale) + def auto_model(data): + probs_x = pyro.param("model_probs_x") + probs_y = pyro.param("model_probs_y") + probs_z = pyro.param("model_probs_z") + with pyro.plate("data", len(data)): + if num_masked == num_samples: + x = pyro.sample("x", dist.Categorical(probs_x)) + y = pyro.sample( + "y", dist.Categorical(probs_y[x]), infer={"enumerate": "parallel"} + ) + pyro.sample("z", dist.Categorical(probs_z[y]), obs=data) + else: + with handlers.mask(mask=torch.arange(num_samples) < num_masked): + x = pyro.sample("x", dist.Categorical(probs_x)) + y = pyro.sample( + "y", + dist.Categorical(probs_y[x]), + infer={"enumerate": "parallel"}, + ) + pyro.sample("z", dist.Categorical(probs_z[y]), obs=data) + + @handlers.scale(scale=scale) + @infer.config_enumerate + def auto_guide(data): + probs_x = pyro.param("guide_probs_x") + with pyro.plate("data", len(data)): + if num_masked == num_samples: + pyro.sample("x", dist.Categorical(probs_x)) + else: + with handlers.mask(mask=torch.arange(num_samples) < num_masked): + pyro.sample("x", dist.Categorical(probs_x)) + + @handlers.scale(scale=scale) + def hand_model(data): + probs_x = pyro.param("model_probs_x") + probs_y = pyro.param("model_probs_y") + probs_z = pyro.param("model_probs_z") + for i in pyro.plate("data", num_masked): + x = pyro.sample("x_{}".format(i), dist.Categorical(probs_x)) + y = pyro.sample( + "y_{}".format(i), + dist.Categorical(probs_y[x]), + infer={"enumerate": "parallel"}, + ) + pyro.sample("z_{}".format(i), dist.Categorical(probs_z[y]), obs=data[i]) + + @handlers.scale(scale=scale) + @infer.config_enumerate + def hand_guide(data): + probs_x = pyro.param("guide_probs_x") + for i in pyro.plate("data", num_masked): + pyro.sample("x_{}".format(i), dist.Categorical(probs_x)) + + data = dist.Categorical(torch.tensor([0.3, 0.7])).sample((num_samples,)) + elbo = infer.TraceEnum_ELBO(max_plate_nesting=1, strict_enumeration_warning=False) + auto_loss = elbo.differentiable_loss(auto_model, auto_guide, data) + hand_loss = elbo.differentiable_loss(hand_model, hand_guide, data) + _check_loss_and_grads(hand_loss, auto_loss) + + +@pytest.mark.parametrize("scale", [1, 10]) +@pytest.mark.parametrize( + "outer_obs,inner_obs", [(False, True), (True, False), (True, True)] +) +@pyroapi.pyro_backend(_PYRO_BACKEND) +def test_elbo_enumerate_plate_4(outer_obs, inner_obs, scale): + # a ---> outer_obs + # \ + # +-----\------------------+ + # | \ | + # | b ---> inner_obs N=2 | + # +------------------------+ + # This tests two different observations, one outside and one inside an plate. + pyro.param("probs_a", torch.tensor([0.4, 0.6]), constraint=constraints.simplex) + pyro.param("probs_b", torch.tensor([0.6, 0.4]), constraint=constraints.simplex) + pyro.param("locs", torch.tensor([-1.0, 1.0])) + pyro.param("scales", torch.tensor([1.0, 2.0]), constraint=constraints.positive) + outer_data = torch.tensor(2.0) + inner_data = torch.tensor([0.5, 1.5]) + + @handlers.scale(scale=scale) + def auto_model(): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + locs = pyro.param("locs") + scales = pyro.param("scales") + a = pyro.sample("a", dist.Categorical(probs_a), infer={"enumerate": "parallel"}) + if outer_obs: + pyro.sample("outer_obs", dist.Normal(0.0, scales[a]), obs=outer_data) + with pyro.plate("inner", 2): + b = pyro.sample( + "b", dist.Categorical(probs_b), infer={"enumerate": "parallel"} + ) + if inner_obs: + pyro.sample( + "inner_obs", dist.Normal(locs[b], scales[a]), obs=inner_data + ) + + @handlers.scale(scale=scale) + def hand_model(): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + locs = pyro.param("locs") + scales = pyro.param("scales") + a = pyro.sample("a", dist.Categorical(probs_a), infer={"enumerate": "parallel"}) + if outer_obs: + pyro.sample("outer_obs", dist.Normal(0.0, scales[a]), obs=outer_data) + for i in pyro.plate("inner", 2): + b = pyro.sample( + "b_{}".format(i), + dist.Categorical(probs_b), + infer={"enumerate": "parallel"}, + ) + if inner_obs: + pyro.sample( + "inner_obs_{}".format(i), + dist.Normal(locs[b], scales[a]), + obs=inner_data[i], + ) + + def guide(): + pass + + elbo = infer.TraceEnum_ELBO(max_plate_nesting=1) + auto_loss = elbo.differentiable_loss(auto_model, guide) + elbo = infer.TraceEnum_ELBO(max_plate_nesting=0) + hand_loss = elbo.differentiable_loss(hand_model, guide) + _check_loss_and_grads(hand_loss, auto_loss) + + +@pytest.mark.xfail(reason="Not supported in regular Pyro") +@pyroapi.pyro_backend(_PYRO_BACKEND) +def test_elbo_enumerate_plate_5(): + # Guide Model + # a + # +---------------|--+ + # | M=2 V | + # | b ----> c | + # +------------------+ + pyro.param( + "model_probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_b", torch.tensor([0.6, 0.4]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_c", + torch.tensor( + [[[0.4, 0.5, 0.1], [0.3, 0.5, 0.2]], [[0.3, 0.4, 0.3], [0.4, 0.4, 0.2]]] + ), + constraint=constraints.simplex, + ) + pyro.param( + "guide_probs_b", torch.tensor([0.8, 0.2]), constraint=constraints.simplex + ) + data = torch.tensor([1, 2]) + + @infer.config_enumerate + def model_plate(): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + with pyro.plate("b_axis", 2): + b = pyro.sample("b", dist.Categorical(probs_b)) + pyro.sample("c", dist.Categorical(Vindex(probs_c)[a, b]), obs=data) + + @infer.config_enumerate + def guide_plate(): + probs_b = pyro.param("guide_probs_b") + with pyro.plate("b_axis", 2): + pyro.sample("b", dist.Categorical(probs_b)) + + @infer.config_enumerate + def model_iplate(): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + for i in pyro.plate("b_axis", 2): + b = pyro.sample("b_{}".format(i), dist.Categorical(probs_b)) + pyro.sample( + "c_{}".format(i), dist.Categorical(Vindex(probs_c)[a, b]), obs=data[i] + ) + + @infer.config_enumerate + def guide_iplate(): + probs_b = pyro.param("guide_probs_b") + for i in pyro.plate("b_axis", 2): + pyro.sample("b_{}".format(i), dist.Categorical(probs_b)) + + elbo = infer.TraceEnum_ELBO(max_plate_nesting=0) + expected_loss = elbo.differentiable_loss(model_iplate, guide_iplate) + elbo = infer.TraceEnum_ELBO(max_plate_nesting=1) + with pytest.raises( + ValueError, match="Expected model enumeration to be no more global than guide" + ): + actual_loss = elbo.differentiable_loss(model_plate, guide_plate) + # This never gets run because we don't support this yet. + _check_loss_and_grads(expected_loss, actual_loss) + + +@pytest.mark.parametrize("enumerate1", ["parallel", "sequential"]) +@pyroapi.pyro_backend(_PYRO_BACKEND) +def test_elbo_enumerate_plate_6(enumerate1): + # Guide Model + # +-------+ + # b ----> c <---- a + # | M=2 | + # +-------+ + # This tests that sequential enumeration over b works, even though + # model-side enumeration moves c into b's plate via contraction. + pyro.param( + "model_probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_b", torch.tensor([0.6, 0.4]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_c", + torch.tensor( + [[[0.4, 0.5, 0.1], [0.3, 0.5, 0.2]], [[0.3, 0.4, 0.3], [0.4, 0.4, 0.2]]] + ), + constraint=constraints.simplex, + ) + pyro.param( + "guide_probs_b", torch.tensor([0.8, 0.2]), constraint=constraints.simplex + ) + data = torch.tensor([1, 2]) + + @infer.config_enumerate + def model_plate(): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + b = pyro.sample("b", dist.Categorical(probs_b)) + with pyro.plate("b_axis", 2): + pyro.sample("c", dist.Categorical(Vindex(probs_c)[a, b]), obs=data) + + @infer.config_enumerate + def model_iplate(): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + b = pyro.sample("b", dist.Categorical(probs_b)) + for i in pyro.plate("b_axis", 2): + pyro.sample( + "c_{}".format(i), dist.Categorical(Vindex(probs_c)[a, b]), obs=data[i] + ) + + @infer.config_enumerate(default=enumerate1) + def guide(): + probs_b = pyro.param("guide_probs_b") + pyro.sample("b", dist.Categorical(probs_b)) + + elbo = infer.TraceEnum_ELBO(max_plate_nesting=0) + expected_loss = elbo.differentiable_loss(model_iplate, guide) + elbo = infer.TraceEnum_ELBO(max_plate_nesting=1) + actual_loss = elbo.differentiable_loss(model_plate, guide) + _check_loss_and_grads(expected_loss, actual_loss) + + +@pytest.mark.parametrize("scale", [1, 10]) +@pyroapi.pyro_backend(_PYRO_BACKEND) +def test_elbo_enumerate_plate_7(scale): + # Guide Model + # a -----> b + # | | + # +-|--------|----------------+ + # | V V | + # | c -----> d -----> e N=2 | + # +---------------------------+ + # This tests a mixture of model and guide enumeration. + pyro.param( + "model_probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_b", + torch.tensor([[0.6, 0.4], [0.4, 0.6]]), + constraint=constraints.simplex, + ) + pyro.param( + "model_probs_c", + torch.tensor([[0.75, 0.25], [0.55, 0.45]]), + constraint=constraints.simplex, + ) + pyro.param( + "model_probs_d", + torch.tensor([[[0.4, 0.6], [0.3, 0.7]], [[0.3, 0.7], [0.2, 0.8]]]), + constraint=constraints.simplex, + ) + pyro.param( + "model_probs_e", + torch.tensor([[0.75, 0.25], [0.55, 0.45]]), + constraint=constraints.simplex, + ) + pyro.param( + "guide_probs_a", torch.tensor([0.35, 0.64]), constraint=constraints.simplex + ) + pyro.param( + "guide_probs_c", + torch.tensor([[0.0, 1.0], [1.0, 0.0]]), # deterministic + constraint=constraints.simplex, + ) + + @handlers.scale(scale=scale) + def auto_model(data): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + probs_d = pyro.param("model_probs_d") + probs_e = pyro.param("model_probs_e") + a = pyro.sample("a", dist.Categorical(probs_a)) + b = pyro.sample( + "b", dist.Categorical(probs_b[a]), infer={"enumerate": "parallel"} + ) + with pyro.plate("data", 2): + c = pyro.sample("c", dist.Categorical(probs_c[a])) + d = pyro.sample( + "d", + dist.Categorical(Vindex(probs_d)[b, c]), + infer={"enumerate": "parallel"}, + ) + pyro.sample("obs", dist.Categorical(probs_e[d]), obs=data) + + @handlers.scale(scale=scale) + def auto_guide(data): + probs_a = pyro.param("guide_probs_a") + probs_c = pyro.param("guide_probs_c") + a = pyro.sample("a", dist.Categorical(probs_a), infer={"enumerate": "parallel"}) + with pyro.plate("data", 2): + pyro.sample("c", dist.Categorical(probs_c[a])) + + @handlers.scale(scale=scale) + def hand_model(data): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + probs_d = pyro.param("model_probs_d") + probs_e = pyro.param("model_probs_e") + a = pyro.sample("a", dist.Categorical(probs_a)) + b = pyro.sample( + "b", dist.Categorical(probs_b[a]), infer={"enumerate": "parallel"} + ) + for i in pyro.plate("data", 2): + c = pyro.sample("c_{}".format(i), dist.Categorical(probs_c[a])) + d = pyro.sample( + "d_{}".format(i), + dist.Categorical(Vindex(probs_d)[b, c]), + infer={"enumerate": "parallel"}, + ) + pyro.sample("obs_{}".format(i), dist.Categorical(probs_e[d]), obs=data[i]) + + @handlers.scale(scale=scale) + def hand_guide(data): + probs_a = pyro.param("guide_probs_a") + probs_c = pyro.param("guide_probs_c") + a = pyro.sample("a", dist.Categorical(probs_a), infer={"enumerate": "parallel"}) + for i in pyro.plate("data", 2): + pyro.sample("c_{}".format(i), dist.Categorical(probs_c[a])) + + data = torch.tensor([0, 0]) + elbo = infer.TraceEnum_ELBO(max_plate_nesting=1) + auto_loss = elbo.differentiable_loss(auto_model, auto_guide, data) + elbo = infer.TraceEnum_ELBO(max_plate_nesting=0) + hand_loss = elbo.differentiable_loss(hand_model, hand_guide, data) + _check_loss_and_grads(hand_loss, auto_loss) + + +@pytest.mark.parametrize("scale", [1, 10]) +@pyroapi.pyro_backend(_PYRO_BACKEND) +def test_elbo_enumerate_plates_1(scale): + # +-----------------+ + # | a ----> b M=2 | + # +-----------------+ + # +-----------------+ + # | c ----> d N=3 | + # +-----------------+ + # This tests two unrelated plates. + # Each should remain uncontracted. + pyro.param("probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex) + pyro.param( + "probs_b", + torch.tensor([[0.6, 0.4], [0.4, 0.6]]), + constraint=constraints.simplex, + ) + pyro.param("probs_c", torch.tensor([0.75, 0.25]), constraint=constraints.simplex) + pyro.param( + "probs_d", + torch.tensor([[0.4, 0.6], [0.3, 0.7]]), + constraint=constraints.simplex, + ) + b_data = torch.tensor([0, 1]) + d_data = torch.tensor([0, 0, 1]) + + @infer.config_enumerate + @handlers.scale(scale=scale) + def auto_model(): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + probs_d = pyro.param("probs_d") + with pyro.plate("a_axis", 2): + a = pyro.sample("a", dist.Categorical(probs_a)) + pyro.sample("b", dist.Categorical(probs_b[a]), obs=b_data) + with pyro.plate("c_axis", 3): + c = pyro.sample("c", dist.Categorical(probs_c)) + pyro.sample("d", dist.Categorical(probs_d[c]), obs=d_data) + + @infer.config_enumerate + @handlers.scale(scale=scale) + def hand_model(): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + probs_d = pyro.param("probs_d") + for i in pyro.plate("a_axis", 2): + a = pyro.sample("a_{}".format(i), dist.Categorical(probs_a)) + pyro.sample("b_{}".format(i), dist.Categorical(probs_b[a]), obs=b_data[i]) + for j in pyro.plate("c_axis", 3): + c = pyro.sample("c_{}".format(j), dist.Categorical(probs_c)) + pyro.sample("d_{}".format(j), dist.Categorical(probs_d[c]), obs=d_data[j]) + + def guide(): + pass + + elbo = infer.TraceEnum_ELBO(max_plate_nesting=1) + auto_loss = elbo.differentiable_loss(auto_model, guide) + elbo = infer.TraceEnum_ELBO(max_plate_nesting=0) + hand_loss = elbo.differentiable_loss(hand_model, guide) + _check_loss_and_grads(hand_loss, auto_loss) + + +@pytest.mark.parametrize("scale", [1, 10]) +@pyroapi.pyro_backend(_PYRO_BACKEND) +def test_elbo_enumerate_plates_2(scale): + # +---------+ +---------+ + # | b <---- a ----> c | + # | M=2 | | N=3 | + # +---------+ +---------+ + # This tests two different plates with recycled dimension. + pyro.param("probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex) + pyro.param( + "probs_b", + torch.tensor([[0.6, 0.4], [0.4, 0.6]]), + constraint=constraints.simplex, + ) + pyro.param( + "probs_c", + torch.tensor([[0.75, 0.25], [0.55, 0.45]]), + constraint=constraints.simplex, + ) + b_data = torch.tensor([0, 1]) + c_data = torch.tensor([0, 0, 1]) + + @infer.config_enumerate + @handlers.scale(scale=scale) + def auto_model(): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + with pyro.plate("b_axis", 2): + pyro.sample("b", dist.Categorical(probs_b[a]), obs=b_data) + with pyro.plate("c_axis", 3): + pyro.sample("c", dist.Categorical(probs_c[a]), obs=c_data) + + @infer.config_enumerate + @handlers.scale(scale=scale) + def hand_model(): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + for i in pyro.plate("b_axis", 2): + pyro.sample("b_{}".format(i), dist.Categorical(probs_b[a]), obs=b_data[i]) + for j in pyro.plate("c_axis", 3): + pyro.sample("c_{}".format(j), dist.Categorical(probs_c[a]), obs=c_data[j]) + + def guide(): + pass + + elbo = infer.TraceEnum_ELBO(max_plate_nesting=1) + auto_loss = elbo.differentiable_loss(auto_model, guide) + elbo = infer.TraceEnum_ELBO(max_plate_nesting=0) + hand_loss = elbo.differentiable_loss(hand_model, guide) + _check_loss_and_grads(hand_loss, auto_loss) + + +@pytest.mark.parametrize("scale", [1, 10]) +@pyroapi.pyro_backend(_PYRO_BACKEND) +def test_elbo_enumerate_plates_3(scale): + # +--------------------+ + # | +----------+ | + # a -------> b | | + # | | N=2 | | + # | +----------+ M=2 | + # +--------------------+ + # This is tests the case of multiple plate contractions in + # a single step. + pyro.param("probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex) + pyro.param( + "probs_b", + torch.tensor([[0.6, 0.4], [0.4, 0.6]]), + constraint=constraints.simplex, + ) + data = torch.tensor([[0, 1], [0, 0]]) + + @infer.config_enumerate + @handlers.scale(scale=scale) + def auto_model(): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + a = pyro.sample("a", dist.Categorical(probs_a)) + with pyro.plate("outer", 2): + with pyro.plate("inner", 2): + pyro.sample("b", dist.Categorical(probs_b[a]), obs=data) + + @infer.config_enumerate + @handlers.scale(scale=scale) + def hand_model(): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + inner = pyro.plate("inner", 2) + a = pyro.sample("a", dist.Categorical(probs_a)) + for i in pyro.plate("outer", 2): + for j in inner: + pyro.sample( + "b_{}_{}".format(i, j), dist.Categorical(probs_b[a]), obs=data[i, j] + ) + + def guide(): + pass + + elbo = infer.TraceEnum_ELBO(max_plate_nesting=2) + auto_loss = elbo.differentiable_loss(auto_model, guide) + elbo = infer.TraceEnum_ELBO(max_plate_nesting=0) + hand_loss = elbo.differentiable_loss(hand_model, guide) + _check_loss_and_grads(hand_loss, auto_loss) + + +@pytest.mark.parametrize("scale", [1, 10]) +@pyroapi.pyro_backend(_PYRO_BACKEND) +def test_elbo_enumerate_plates_4(scale): + # +--------------------+ + # | +----------+ | + # a ----> b ----> c | | + # | | N=2 | | + # | M=2 +----------+ | + # +--------------------+ + pyro.param("probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex) + pyro.param( + "probs_b", + torch.tensor([[0.6, 0.4], [0.4, 0.6]]), + constraint=constraints.simplex, + ) + pyro.param( + "probs_c", + torch.tensor([[0.4, 0.6], [0.3, 0.7]]), + constraint=constraints.simplex, + ) + + @infer.config_enumerate + @handlers.scale(scale=scale) + def auto_model(data): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + with pyro.plate("outer", 2): + b = pyro.sample("b", dist.Categorical(probs_b[a])) + with pyro.plate("inner", 2): + pyro.sample("c", dist.Categorical(probs_c[b]), obs=data) + + @infer.config_enumerate + @handlers.scale(scale=scale) + def hand_model(data): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + inner = pyro.plate("inner", 2) + a = pyro.sample("a", dist.Categorical(probs_a)) + for i in pyro.plate("outer", 2): + b = pyro.sample("b_{}".format(i), dist.Categorical(probs_b[a])) + for j in inner: + pyro.sample( + "c_{}_{}".format(i, j), dist.Categorical(probs_c[b]), obs=data[i, j] + ) + + def guide(data): + pass + + data = torch.tensor([[0, 1], [0, 0]]) + elbo = infer.TraceEnum_ELBO(max_plate_nesting=2) + auto_loss = elbo.differentiable_loss(auto_model, guide, data) + elbo = infer.TraceEnum_ELBO(max_plate_nesting=0) + hand_loss = elbo.differentiable_loss(hand_model, guide, data) + _check_loss_and_grads(hand_loss, auto_loss) + + +@pytest.mark.parametrize("scale", [1, 10]) +@pyroapi.pyro_backend(_PYRO_BACKEND) +def test_elbo_enumerate_plates_5(scale): + # a + # | \ + # +--|---\------------+ + # | V +-\--------+ | + # | b ----> c | | + # | | N=2 | | + # | M=2 +----------+ | + # +-------------------+ + pyro.param("probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex) + pyro.param( + "probs_b", + torch.tensor([[0.6, 0.4], [0.4, 0.6]]), + constraint=constraints.simplex, + ) + pyro.param( + "probs_c", + torch.tensor([[[0.4, 0.6], [0.3, 0.7]], [[0.2, 0.8], [0.1, 0.9]]]), + constraint=constraints.simplex, + ) + data = torch.tensor([[0, 1], [0, 0]]) + + @infer.config_enumerate + @handlers.scale(scale=scale) + def auto_model(): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + with pyro.plate("outer", 2): + b = pyro.sample("b", dist.Categorical(probs_b[a])) + with pyro.plate("inner", 2): + pyro.sample("c", dist.Categorical(Vindex(probs_c)[a, b]), obs=data) + + @infer.config_enumerate + @handlers.scale(scale=scale) + def hand_model(): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + inner = pyro.plate("inner", 2) + a = pyro.sample("a", dist.Categorical(probs_a)) + for i in pyro.plate("outer", 2): + b = pyro.sample("b_{}".format(i), dist.Categorical(probs_b[a])) + for j in inner: + pyro.sample( + "c_{}_{}".format(i, j), + dist.Categorical(Vindex(probs_c)[a, b]), + obs=data[i, j], + ) + + def guide(): + pass + + elbo = infer.TraceEnum_ELBO(max_plate_nesting=2) + auto_loss = elbo.differentiable_loss(auto_model, guide) + elbo = infer.TraceEnum_ELBO(max_plate_nesting=0) + hand_loss = elbo.differentiable_loss(hand_model, guide) + _check_loss_and_grads(hand_loss, auto_loss) + + +@pytest.mark.parametrize("scale", [1, 10]) +@pyroapi.pyro_backend(_PYRO_BACKEND) +def test_elbo_enumerate_plates_6(scale): + # +----------+ + # | M=2 | + # a ----> b | + # | | | | + # +--|-------|--+ | + # | V | V | | + # | c ----> d | | + # | | | | + # | N=2 +------|---+ + # +-------------+ + # This tests different ways of mixing two independence contexts, + # where each can be either sequential or vectorized plate. + pyro.param("probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex) + pyro.param( + "probs_b", + torch.tensor([[0.6, 0.4], [0.4, 0.6]]), + constraint=constraints.simplex, + ) + pyro.param( + "probs_c", + torch.tensor([[0.75, 0.25], [0.55, 0.45]]), + constraint=constraints.simplex, + ) + pyro.param( + "probs_d", + torch.tensor([[[0.4, 0.6], [0.3, 0.7]], [[0.3, 0.7], [0.2, 0.8]]]), + constraint=constraints.simplex, + ) + + @infer.config_enumerate + @handlers.scale(scale=scale) + @handlers.trace + def model_iplate_iplate(data): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + probs_d = pyro.param("probs_d") + b_axis = pyro.plate("b_axis", 2) + c_axis = pyro.plate("c_axis", 2) + a = pyro.sample("a", dist.Categorical(probs_a)) + b = [ + pyro.sample("b_{}".format(i), dist.Categorical(probs_b[a])) for i in b_axis + ] + c = [ + pyro.sample("c_{}".format(j), dist.Categorical(probs_c[a])) for j in c_axis + ] + for i in b_axis: + for j in c_axis: + pyro.sample( + "d_{}_{}".format(i, j), + dist.Categorical(Vindex(probs_d)[b[i], c[j]]), + obs=data[i, j], + ) + + @infer.config_enumerate + @handlers.scale(scale=scale) + def model_iplate_plate(data): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + probs_d = pyro.param("probs_d") + b_axis = pyro.plate("b_axis", 2) + c_axis = pyro.plate("c_axis", 2) + a = pyro.sample("a", dist.Categorical(probs_a)) + with c_axis: + c = pyro.sample("c", dist.Categorical(probs_c[a])) + for i in b_axis: + b_i = pyro.sample("b_{}".format(i), dist.Categorical(probs_b[a])) + with c_axis: + pyro.sample( + "d_{}".format(i), + dist.Categorical(Vindex(probs_d)[b_i, c]), + obs=data[i], + ) + + @infer.config_enumerate + @handlers.scale(scale=scale) + @handlers.trace + def model_plate_iplate(data): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + probs_d = pyro.param("probs_d") + b_axis = pyro.plate("b_axis", 2) + c_axis = pyro.plate("c_axis", 2) + a = pyro.sample("a", dist.Categorical(probs_a)) + with b_axis: + b = pyro.sample("b", dist.Categorical(probs_b[a])) + c = [ + pyro.sample("c_{}".format(j), dist.Categorical(probs_c[a])) for j in c_axis + ] + with b_axis: + for j in c_axis: + pyro.sample( + "d_{}".format(j), + dist.Categorical(Vindex(probs_d)[b, c[j]]), + obs=data[:, j], + ) + + @infer.config_enumerate + @handlers.scale(scale=scale) + def model_plate_plate(data): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + probs_d = pyro.param("probs_d") + b_axis = pyro.plate("b_axis", 2, dim=-1) + c_axis = pyro.plate("c_axis", 2, dim=-2) + a = pyro.sample("a", dist.Categorical(probs_a)) + with b_axis: + b = pyro.sample("b", dist.Categorical(probs_b[a])) + with c_axis: + c = pyro.sample("c", dist.Categorical(probs_c[a])) + with b_axis, c_axis: + pyro.sample("d", dist.Categorical(Vindex(probs_d)[b, c]), obs=data) + + def guide(data): + pass + + # Check that either one of the sequential plates can be promoted to be vectorized. + data = torch.tensor([[0, 1], [0, 0]]) + elbo = infer.TraceEnum_ELBO(max_plate_nesting=0) + loss_iplate_iplate = elbo.differentiable_loss(model_iplate_iplate, guide, data) + elbo = infer.TraceEnum_ELBO(max_plate_nesting=1) + loss_plate_iplate = elbo.differentiable_loss(model_plate_iplate, guide, data) + loss_iplate_plate = elbo.differentiable_loss(model_iplate_plate, guide, data) + _check_loss_and_grads(loss_iplate_iplate, loss_iplate_plate) + _check_loss_and_grads(loss_iplate_iplate, loss_plate_iplate) + + # But promoting both to plates should result in an error. + elbo = infer.TraceEnum_ELBO(max_plate_nesting=2) + with pytest.raises(ValueError, match="intractable!"): + elbo.differentiable_loss(model_plate_plate, guide, data) + + +@pytest.mark.parametrize("scale", [1, 10]) +@pyroapi.pyro_backend(_PYRO_BACKEND) +def test_elbo_enumerate_plates_7(scale): + # +-------------+ + # | N=2 | + # a -------> c | + # | | | | + # +--|----------|--+ | + # | | | V | | + # | V | e | | + # | b ----> d | | + # | | | | + # | M=2 +---------|---+ + # +----------------+ + # This tests tree-structured dependencies among variables but + # non-tree dependencies among plate nestings. + pyro.param("probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex) + pyro.param( + "probs_b", + torch.tensor([[0.6, 0.4], [0.4, 0.6]]), + constraint=constraints.simplex, + ) + pyro.param( + "probs_c", + torch.tensor([[0.75, 0.25], [0.55, 0.45]]), + constraint=constraints.simplex, + ) + pyro.param( + "probs_d", + torch.tensor([[0.3, 0.7], [0.2, 0.8]]), + constraint=constraints.simplex, + ) + pyro.param( + "probs_e", + torch.tensor([[0.4, 0.6], [0.3, 0.7]]), + constraint=constraints.simplex, + ) + + @infer.config_enumerate + @handlers.scale(scale=scale) + @handlers.trace + def model_iplate_iplate(data): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + probs_d = pyro.param("probs_d") + probs_e = pyro.param("probs_e") + b_axis = pyro.plate("b_axis", 2) + c_axis = pyro.plate("c_axis", 2) + a = pyro.sample("a", dist.Categorical(probs_a)) + b = [ + pyro.sample("b_{}".format(i), dist.Categorical(probs_b[a])) for i in b_axis + ] + c = [ + pyro.sample("c_{}".format(j), dist.Categorical(probs_c[a])) for j in c_axis + ] + for i in b_axis: + for j in c_axis: + pyro.sample( + "d_{}_{}".format(i, j), + dist.Categorical(probs_d[b[i]]), + obs=data[i, j], + ) + pyro.sample( + "e_{}_{}".format(i, j), + dist.Categorical(probs_e[c[j]]), + obs=data[i, j], + ) + + @infer.config_enumerate + @handlers.scale(scale=scale) + def model_iplate_plate(data): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + probs_d = pyro.param("probs_d") + probs_e = pyro.param("probs_e") + b_axis = pyro.plate("b_axis", 2) + c_axis = pyro.plate("c_axis", 2) + a = pyro.sample("a", dist.Categorical(probs_a)) + with c_axis: + c = pyro.sample("c", dist.Categorical(probs_c[a])) + for i in b_axis: + b_i = pyro.sample("b_{}".format(i), dist.Categorical(probs_b[a])) + with c_axis: + pyro.sample( + "d_{}".format(i), dist.Categorical(probs_d[b_i]), obs=data[i] + ) + pyro.sample("e_{}".format(i), dist.Categorical(probs_e[c]), obs=data[i]) + + @infer.config_enumerate + @handlers.scale(scale=scale) + @handlers.trace + def model_plate_iplate(data): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + probs_d = pyro.param("probs_d") + probs_e = pyro.param("probs_e") + b_axis = pyro.plate("b_axis", 2) + c_axis = pyro.plate("c_axis", 2) + a = pyro.sample("a", dist.Categorical(probs_a)) + with b_axis: + b = pyro.sample("b", dist.Categorical(probs_b[a])) + c = [ + pyro.sample("c_{}".format(j), dist.Categorical(probs_c[a])) for j in c_axis + ] + with b_axis: + for j in c_axis: + pyro.sample( + "d_{}".format(j), dist.Categorical(probs_d[b]), obs=data[:, j] + ) + pyro.sample( + "e_{}".format(j), dist.Categorical(probs_e[c[j]]), obs=data[:, j] + ) + + @infer.config_enumerate + @handlers.scale(scale=scale) + def model_plate_plate(data): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + probs_d = pyro.param("probs_d") + probs_e = pyro.param("probs_e") + b_axis = pyro.plate("b_axis", 2, dim=-1) + c_axis = pyro.plate("c_axis", 2, dim=-2) + a = pyro.sample("a", dist.Categorical(probs_a)) + with b_axis: + b = pyro.sample("b", dist.Categorical(probs_b[a])) + with c_axis: + c = pyro.sample("c", dist.Categorical(probs_c[a])) + with b_axis, c_axis: + pyro.sample("d", dist.Categorical(probs_d[b]), obs=data) + pyro.sample("e", dist.Categorical(probs_e[c]), obs=data) + + def guide(data): + pass + + # Check that any combination of sequential plates can be promoted to be vectorized. + data = torch.tensor([[0, 1], [0, 0]]) + elbo = infer.TraceEnum_ELBO(max_plate_nesting=0) + loss_iplate_iplate = elbo.differentiable_loss(model_iplate_iplate, guide, data) + elbo = infer.TraceEnum_ELBO(max_plate_nesting=1) + loss_plate_iplate = elbo.differentiable_loss(model_plate_iplate, guide, data) + loss_iplate_plate = elbo.differentiable_loss(model_iplate_plate, guide, data) + elbo = infer.TraceEnum_ELBO(max_plate_nesting=2) + loss_plate_plate = elbo.differentiable_loss(model_plate_plate, guide, data) + _check_loss_and_grads(loss_iplate_iplate, loss_plate_iplate) + _check_loss_and_grads(loss_iplate_iplate, loss_iplate_plate) + _check_loss_and_grads(loss_iplate_iplate, loss_plate_plate) + + +@pytest.mark.parametrize("guide_scale", [1]) +@pytest.mark.parametrize("model_scale", [1]) +@pytest.mark.parametrize( + "outer_vectorized", + [False, xfail_param(True, reason="validation not yet implemented")], +) +@pytest.mark.parametrize("inner_vectorized", [False, True]) +@pyroapi.pyro_backend(_PYRO_BACKEND) +def test_elbo_enumerate_plates_8( + model_scale, guide_scale, inner_vectorized, outer_vectorized +): + # Guide Model + # a + # +-----------|--------+ + # | M=2 +---|------+ | + # | | V N=2 | | + # | b ----> c | | + # | +----------+ | + # +--------------------+ + pyro.param( + "model_probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_b", torch.tensor([0.6, 0.4]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_c", + torch.tensor( + [[[0.4, 0.5, 0.1], [0.3, 0.5, 0.2]], [[0.3, 0.4, 0.3], [0.4, 0.4, 0.2]]] + ), + constraint=constraints.simplex, + ) + pyro.param( + "guide_probs_b", torch.tensor([0.8, 0.2]), constraint=constraints.simplex + ) + data = torch.tensor([[0, 1], [0, 2]]) + + @infer.config_enumerate + @handlers.scale(scale=model_scale) + def model_plate_plate(): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + with pyro.plate("outer", 2): + b = pyro.sample("b", dist.Categorical(probs_b)) + with pyro.plate("inner", 2): + pyro.sample("c", dist.Categorical(Vindex(probs_c)[a, b]), obs=data) + + @infer.config_enumerate + @handlers.scale(scale=model_scale) + def model_iplate_plate(): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + inner = pyro.plate("inner", 2) + a = pyro.sample("a", dist.Categorical(probs_a)) + for i in pyro.plate("outer", 2): + b = pyro.sample("b_{}".format(i), dist.Categorical(probs_b)) + with inner: + pyro.sample( + "c_{}".format(i), + dist.Categorical(Vindex(probs_c)[a, b]), + obs=data[:, i], + ) + + @infer.config_enumerate + @handlers.scale(scale=model_scale) + def model_plate_iplate(): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + with pyro.plate("outer", 2): + b = pyro.sample("b", dist.Categorical(probs_b)) + for j in pyro.plate("inner", 2): + pyro.sample( + "c_{}".format(j), + dist.Categorical(Vindex(probs_c)[a, b]), + obs=data[j], + ) + + @infer.config_enumerate + @handlers.scale(scale=model_scale) + def model_iplate_iplate(): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + inner = pyro.plate("inner", 2) + a = pyro.sample("a", dist.Categorical(probs_a)) + for i in pyro.plate("outer", 2): + b = pyro.sample("b_{}".format(i), dist.Categorical(probs_b)) + for j in inner: + pyro.sample( + "c_{}_{}".format(i, j), + dist.Categorical(Vindex(probs_c)[a, b]), + obs=data[j, i], + ) + + @infer.config_enumerate + @handlers.scale(scale=guide_scale) + def guide_plate(): + probs_b = pyro.param("guide_probs_b") + with pyro.plate("outer", 2): + pyro.sample("b", dist.Categorical(probs_b)) + + @infer.config_enumerate + @handlers.scale(scale=guide_scale) + def guide_iplate(): + probs_b = pyro.param("guide_probs_b") + for i in pyro.plate("outer", 2): + pyro.sample("b_{}".format(i), dist.Categorical(probs_b)) + + elbo = infer.TraceEnum_ELBO(max_plate_nesting=0) + expected_loss = elbo.differentiable_loss(model_iplate_iplate, guide_iplate) + if inner_vectorized: + if outer_vectorized: + elbo = infer.TraceEnum_ELBO(max_plate_nesting=2) + actual_loss = elbo.differentiable_loss(model_plate_plate, guide_plate) + else: + elbo = infer.TraceEnum_ELBO(max_plate_nesting=1) + actual_loss = elbo.differentiable_loss(model_iplate_plate, guide_iplate) + else: + if outer_vectorized: + elbo = infer.TraceEnum_ELBO(max_plate_nesting=1) + actual_loss = elbo.differentiable_loss(model_plate_iplate, guide_plate) + else: + elbo = infer.TraceEnum_ELBO(max_plate_nesting=1) + actual_loss = elbo.differentiable_loss(model_iplate_iplate, guide_iplate) + _check_loss_and_grads(expected_loss, actual_loss) + + +@pyroapi.pyro_backend(_PYRO_BACKEND) +def test_elbo_enumerate_plate_9(): + # Model Guide + # a + # +-------|-------+ + # | M=2 V | + # | b -> c | + # +---------------+ + pyro.param( + "model_probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_b", + torch.tensor([[0.3, 0.7], [0.6, 0.4]]), + constraint=constraints.simplex, + ) + pyro.param( + "model_probs_c", + torch.tensor([[0.3, 0.4, 0.3], [0.4, 0.4, 0.2]]), + constraint=constraints.simplex, + ) + pyro.param( + "guide_probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex + ) + pyro.param( + "guide_probs_b", + torch.tensor([[0.3, 0.7], [0.8, 0.2]]), + constraint=constraints.simplex, + ) + data = torch.tensor([1, 2]) + + @infer.config_enumerate + def model_plate(): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + with pyro.plate("b_axis", 2): + b = pyro.sample("b", dist.Categorical(probs_b[a])) + pyro.sample("c", dist.Categorical(probs_c[b]), obs=data) + + @infer.config_enumerate + def guide_plate(): + probs_a = pyro.param("guide_probs_a") + probs_b = pyro.param("guide_probs_b") + a = pyro.sample("a", dist.Categorical(probs_a)) + with pyro.plate("b_axis", 2): + pyro.sample("b", dist.Categorical(probs_b[a])) + + @infer.config_enumerate + def model_iplate(): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + for i in pyro.plate("b_axis", 2): + b = pyro.sample(f"b_{i}", dist.Categorical(probs_b[a])) + pyro.sample(f"c_{i}", dist.Categorical(probs_c[b]), obs=data[i]) + + @infer.config_enumerate + def guide_iplate(): + probs_a = pyro.param("guide_probs_a") + probs_b = pyro.param("guide_probs_b") + a = pyro.sample("a", dist.Categorical(probs_a)) + for i in pyro.plate("b_axis", 2): + pyro.sample(f"b_{i}", dist.Categorical(probs_b[a])) + + elbo = infer.TraceEnum_ELBO(max_plate_nesting=0) + expected_loss = elbo.differentiable_loss(model_iplate, guide_iplate) + elbo = infer.TraceEnum_ELBO(max_plate_nesting=1) + actual_loss = elbo.differentiable_loss(model_plate, guide_plate) + _check_loss_and_grads(expected_loss, actual_loss) + + +@pyroapi.pyro_backend(_PYRO_BACKEND) +def test_elbo_enumerate_plate_10(): + # Model + # a -> [ [ bij -> cij ] ] + # Guide + # a -> [ [ bij ] ] + pyro.param( + "model_probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_b", + torch.tensor([[0.3, 0.7], [0.6, 0.4]]), + constraint=constraints.simplex, + ) + pyro.param( + "model_probs_c", + torch.tensor([[0.3, 0.4, 0.3], [0.4, 0.4, 0.2]]), + constraint=constraints.simplex, + ) + pyro.param( + "guide_probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex + ) + pyro.param( + "guide_probs_b", + torch.tensor([[0.3, 0.7], [0.8, 0.2]]), + constraint=constraints.simplex, + ) + data = torch.tensor([[0, 1, 2], [1, 2, 2]]) + + @infer.config_enumerate + def model_plate(): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + with pyro.plate("i", 2, dim=-2): + with pyro.plate("j", 3, dim=-1): + b = pyro.sample("b", dist.Categorical(probs_b[a])) + pyro.sample("c", dist.Categorical(probs_c[b]), obs=data) + + @infer.config_enumerate + def guide_plate(): + probs_a = pyro.param("guide_probs_a") + probs_b = pyro.param("guide_probs_b") + a = pyro.sample("a", dist.Categorical(probs_a)) + with pyro.plate("i", 2, dim=-2): + with pyro.plate("j", 3, dim=-1): + pyro.sample("b", dist.Categorical(probs_b[a])) + + @infer.config_enumerate + def model_iplate(): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + for i in pyro.plate("i", 2): + for j in pyro.plate("j", 3): + b = pyro.sample(f"b_{i}_{j}", dist.Categorical(probs_b[a])) + pyro.sample(f"c_{i}_{j}", dist.Categorical(probs_c[b]), obs=data[i, j]) + + @infer.config_enumerate + def guide_iplate(): + probs_a = pyro.param("guide_probs_a") + probs_b = pyro.param("guide_probs_b") + a = pyro.sample("a", dist.Categorical(probs_a)) + for i in pyro.plate("i", 2): + for j in pyro.plate("j", 3): + pyro.sample(f"b_{i}_{j}", dist.Categorical(probs_b[a])) + + elbo = infer.TraceEnum_ELBO(max_plate_nesting=0) + expected_loss = elbo.differentiable_loss(model_iplate, guide_iplate) + elbo = infer.TraceEnum_ELBO(max_plate_nesting=2) + actual_loss = elbo.differentiable_loss(model_plate, guide_plate) + _check_loss_and_grads(expected_loss, actual_loss) + + +@pyroapi.pyro_backend(_PYRO_BACKEND) +def test_elbo_enumerate_plate_11(): + # Model + # [ ai -> [ bij -> cij ] ] + # Guide + # [ ai -> [ bij ] ] + pyro.param( + "model_probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_b", + torch.tensor([[0.3, 0.7], [0.6, 0.4]]), + constraint=constraints.simplex, + ) + pyro.param( + "model_probs_c", + torch.tensor([[0.3, 0.4, 0.3], [0.4, 0.4, 0.2]]), + constraint=constraints.simplex, + ) + pyro.param( + "guide_probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex + ) + pyro.param( + "guide_probs_b", + torch.tensor([[0.3, 0.7], [0.8, 0.2]]), + constraint=constraints.simplex, + ) + data = torch.tensor([[0, 1, 2], [1, 2, 2]]) + + @infer.config_enumerate + def model_plate(): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + with pyro.plate("i", 2, dim=-2): + a = pyro.sample("a", dist.Categorical(probs_a)) + with pyro.plate("j", 3, dim=-1): + b = pyro.sample("b", dist.Categorical(probs_b[a])) + pyro.sample("c", dist.Categorical(probs_c[b]), obs=data) + + @infer.config_enumerate + def guide_plate(): + probs_a = pyro.param("guide_probs_a") + probs_b = pyro.param("guide_probs_b") + with pyro.plate("i", 2, dim=-2): + a = pyro.sample("a", dist.Categorical(probs_a)) + with pyro.plate("j", 3, dim=-1): + pyro.sample("b", dist.Categorical(probs_b[a])) + + @infer.config_enumerate + def model_iplate(): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + for i in pyro.plate("i", 2): + a = pyro.sample(f"a_{i}", dist.Categorical(probs_a)) + for j in pyro.plate("j", 3): + b = pyro.sample(f"b_{i}_{j}", dist.Categorical(probs_b[a])) + pyro.sample(f"c_{i}_{j}", dist.Categorical(probs_c[b]), obs=data[i, j]) + + @infer.config_enumerate + def guide_iplate(): + probs_a = pyro.param("guide_probs_a") + probs_b = pyro.param("guide_probs_b") + for i in pyro.plate("i", 2): + a = pyro.sample(f"a_{i}", dist.Categorical(probs_a)) + for j in pyro.plate("j", 3): + pyro.sample(f"b_{i}_{j}", dist.Categorical(probs_b[a])) + + elbo = infer.TraceEnum_ELBO(max_plate_nesting=0) + expected_loss = elbo.differentiable_loss(model_iplate, guide_iplate) + elbo = infer.TraceEnum_ELBO(max_plate_nesting=2) + actual_loss = elbo.differentiable_loss(model_plate, guide_plate) + _check_loss_and_grads(expected_loss, actual_loss) + + +@pyroapi.pyro_backend(_PYRO_BACKEND) +def test_elbo_enumerate_plate_12(): + # Model + # a -> [ bi -> [ cij -> dij ] ] + # Guide + # a -> [ bi -> [ cij ] ] + pyro.param( + "model_probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_b", + torch.tensor([[0.3, 0.7], [0.6, 0.4]]), + constraint=constraints.simplex, + ) + pyro.param( + "model_probs_c", + torch.tensor([[0.3, 0.4, 0.3], [0.4, 0.4, 0.2]]), + constraint=constraints.simplex, + ) + pyro.param( + "model_probs_d", + torch.tensor([[0.1, 0.6, 0.3], [0.3, 0.4, 0.3], [0.4, 0.4, 0.2]]), + constraint=constraints.simplex, + ) + pyro.param( + "guide_probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex + ) + pyro.param( + "guide_probs_b", + torch.tensor([[0.3, 0.7], [0.8, 0.2]]), + constraint=constraints.simplex, + ) + pyro.param( + "guide_probs_c", + torch.tensor([[0.3, 0.3, 0.4], [0.2, 0.4, 0.4]]), + constraint=constraints.simplex, + ) + data = torch.tensor([[0, 1, 2], [1, 2, 2]]) + + @infer.config_enumerate + def model_plate(): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + probs_d = pyro.param("model_probs_d") + a = pyro.sample("a", dist.Categorical(probs_a)) + with pyro.plate("i", 2, dim=-2): + b = pyro.sample("b", dist.Categorical(probs_b[a])) + with pyro.plate("j", 3, dim=-1): + c = pyro.sample("c", dist.Categorical(probs_c[b])) + pyro.sample("d", dist.Categorical(probs_d[c]), obs=data) + + @infer.config_enumerate + def guide_plate(): + probs_a = pyro.param("guide_probs_a") + probs_b = pyro.param("guide_probs_b") + probs_c = pyro.param("guide_probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + with pyro.plate("i", 2, dim=-2): + b = pyro.sample("b", dist.Categorical(probs_b[a])) + with pyro.plate("j", 3, dim=-1): + pyro.sample("c", dist.Categorical(probs_c[b])) + + @infer.config_enumerate + def model_iplate(): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + probs_d = pyro.param("model_probs_d") + a = pyro.sample("a", dist.Categorical(probs_a)) + for i in pyro.plate("i", 2): + b = pyro.sample(f"b_{i}", dist.Categorical(probs_b[a])) + for j in pyro.plate("j", 3): + c = pyro.sample(f"c_{i}_{j}", dist.Categorical(probs_c[b])) + pyro.sample(f"d_{i}_{j}", dist.Categorical(probs_d[c]), obs=data[i, j]) + + @infer.config_enumerate + def guide_iplate(): + probs_a = pyro.param("guide_probs_a") + probs_b = pyro.param("guide_probs_b") + probs_c = pyro.param("guide_probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + for i in pyro.plate("i", 2): + b = pyro.sample(f"b_{i}", dist.Categorical(probs_b[a])) + for j in pyro.plate("j", 3): + pyro.sample(f"c_{i}_{j}", dist.Categorical(probs_c[b])) + + elbo = infer.TraceEnum_ELBO(max_plate_nesting=0) + expected_loss = elbo.differentiable_loss(model_iplate, guide_iplate) + elbo = infer.TraceEnum_ELBO(max_plate_nesting=2) + actual_loss = elbo.differentiable_loss(model_plate, guide_plate) + _check_loss_and_grads(expected_loss, actual_loss) + + +@pyroapi.pyro_backend(_PYRO_BACKEND) +def test_elbo_enumerate_plate_13(): + # Model + # a -> [ cj -> [ dij ] ] + # | + # v + # [ bi ] + # Guide + # a -> [ cj ] + # | + # v + # [ bi ] + pyro.param( + "model_probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_b", + torch.tensor([[0.3, 0.7], [0.6, 0.4]]), + constraint=constraints.simplex, + ) + pyro.param( + "model_probs_c", + torch.tensor([[0.3, 0.7], [0.4, 0.6]]), + constraint=constraints.simplex, + ) + pyro.param( + "model_probs_d", + torch.tensor([[0.1, 0.6, 0.3], [0.3, 0.4, 0.3], [0.4, 0.4, 0.2]]), + constraint=constraints.simplex, + ) + pyro.param( + "guide_probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex + ) + pyro.param( + "guide_probs_b", + torch.tensor([[0.3, 0.7], [0.8, 0.2]]), + constraint=constraints.simplex, + ) + pyro.param( + "guide_probs_c", + torch.tensor([[0.2, 0.8], [0.9, 0.1]]), + constraint=constraints.simplex, + ) + data = torch.tensor([[0, 1, 2], [1, 2, 2]]) + + @infer.config_enumerate + def model_plate(): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + probs_d = pyro.param("model_probs_d") + a = pyro.sample("a", dist.Categorical(probs_a)) + with pyro.plate("i", 2, dim=-2): + pyro.sample("b", dist.Categorical(probs_b[a])) + with pyro.plate("j", 3, dim=-1): + c = pyro.sample("c", dist.Categorical(probs_c[a])) + pyro.sample("d", dist.Categorical(probs_d[c]), obs=data) + + @infer.config_enumerate + def guide_plate(): + probs_a = pyro.param("guide_probs_a") + probs_b = pyro.param("guide_probs_b") + probs_c = pyro.param("guide_probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + with pyro.plate("i", 2, dim=-2): + pyro.sample("b", dist.Categorical(probs_b[a])) + with pyro.plate("j", 3, dim=-1): + pyro.sample("c", dist.Categorical(probs_c[a])) + + @infer.config_enumerate + def model_iplate(): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + probs_d = pyro.param("model_probs_d") + a = pyro.sample("a", dist.Categorical(probs_a)) + for i in pyro.plate("i", 2): + pyro.sample(f"b_{i}", dist.Categorical(probs_b[a])) + for j in pyro.plate("j", 3): + c = pyro.sample(f"c_{i}_{j}", dist.Categorical(probs_c[a])) + pyro.sample(f"d_{i}_{j}", dist.Categorical(probs_d[c]), obs=data[i, j]) + + @infer.config_enumerate + def guide_iplate(): + probs_a = pyro.param("guide_probs_a") + probs_b = pyro.param("guide_probs_b") + probs_c = pyro.param("guide_probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + for i in pyro.plate("i", 2): + pyro.sample(f"b_{i}", dist.Categorical(probs_b[a])) + for j in pyro.plate("j", 3): + pyro.sample(f"c_{i}_{j}", dist.Categorical(probs_c[a])) + + elbo = infer.TraceEnum_ELBO(max_plate_nesting=0) + expected_loss = elbo.differentiable_loss(model_iplate, guide_iplate) + elbo = infer.TraceEnum_ELBO(max_plate_nesting=2) + actual_loss = elbo.differentiable_loss(model_plate, guide_plate) + _check_loss_and_grads(expected_loss, actual_loss) diff --git a/pyro/source/tests/contrib/funsor/test_infer_discrete.py b/pyro/source/tests/contrib/funsor/test_infer_discrete.py new file mode 100644 index 0000000000000000000000000000000000000000..62c82e4e1907a30e2acfefd6aef54797fc594294 --- /dev/null +++ b/pyro/source/tests/contrib/funsor/test_infer_discrete.py @@ -0,0 +1,456 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import logging +import os + +import pyroapi +import pytest +import torch + +from pyro.infer.autoguide import AutoNormal +from tests.common import assert_equal + +# put all funsor-related imports here, so test collection works without funsor +try: + import funsor + + import pyro.contrib.funsor + + funsor.set_backend("torch") + from pyroapi import distributions as dist + from pyroapi import handlers, infer, pyro +except ImportError: + pytestmark = pytest.mark.skip(reason="funsor is not installed") + +logger = logging.getLogger(__name__) + +_PYRO_BACKEND = os.environ.get("TEST_ENUM_PYRO_BACKEND", "contrib.funsor") + + +@pytest.mark.parametrize("length", [1, 2, 10, 100]) +@pytest.mark.parametrize("temperature", [0, 1]) +@pyroapi.pyro_backend(_PYRO_BACKEND) +def test_hmm_smoke(length, temperature): + # This should match the example in the infer_discrete docstring. + def hmm(data, hidden_dim=10): + transition = 0.3 / hidden_dim + 0.7 * torch.eye(hidden_dim) + means = torch.arange(float(hidden_dim)) + states = [0] + for t in pyro.markov(range(len(data))): + states.append( + pyro.sample( + "states_{}".format(t), dist.Categorical(transition[states[-1]]) + ) + ) + data[t] = pyro.sample( + "obs_{}".format(t), dist.Normal(means[states[-1]], 1.0), obs=data[t] + ) + return states, data + + true_states, data = hmm([None] * length) + assert len(data) == length + assert len(true_states) == 1 + len(data) + + decoder = infer.infer_discrete(infer.config_enumerate(hmm), temperature=temperature) + inferred_states, _ = decoder(data) + assert len(inferred_states) == len(true_states) + + logger.info("true states: {}".format(list(map(int, true_states)))) + logger.info("inferred states: {}".format(list(map(int, inferred_states)))) + + +@pyroapi.pyro_backend(_PYRO_BACKEND) +@pytest.mark.parametrize("temperature", [0, 1]) +def test_distribution_1(temperature): + # +-------+ + # z --|--> x | + # +-------+ + num_particles = 10000 + data = torch.tensor([1.0, 2.0, 3.0]) + + @infer.config_enumerate + def model(z=None): + p = pyro.param("p", torch.tensor([0.75, 0.25])) + iz = pyro.sample("z", dist.Categorical(p), obs=z) + z = torch.tensor([0.0, 1.0])[iz] + logger.info("z.shape = {}".format(z.shape)) + with pyro.plate("data", 3): + pyro.sample("x", dist.Normal(z, 1.0), obs=data) + + first_available_dim = -3 + vectorized_model = ( + model + if temperature == 0 + else pyro.plate("particles", size=num_particles, dim=-2)(model) + ) + sampled_model = infer.infer_discrete( + vectorized_model, first_available_dim, temperature + ) + sampled_trace = handlers.trace(sampled_model).get_trace() + conditioned_traces = { + z: handlers.trace(model).get_trace(z=torch.tensor(z).long()) for z in [0.0, 1.0] + } + + # Check posterior over z. + actual_z_mean = sampled_trace.nodes["z"]["value"].float().mean() + if temperature: + expected_z_mean = 1 / ( + 1 + + ( + conditioned_traces[0].log_prob_sum() + - conditioned_traces[1].log_prob_sum() + ).exp() + ) + else: + expected_z_mean = ( + conditioned_traces[1].log_prob_sum() > conditioned_traces[0].log_prob_sum() + ).float() + expected_max = max(t.log_prob_sum() for t in conditioned_traces.values()) + actual_max = sampled_trace.log_prob_sum() + assert_equal(expected_max, actual_max, prec=1e-5) + assert_equal(actual_z_mean, expected_z_mean, prec=1e-2 if temperature else 1e-5) + + +@pyroapi.pyro_backend(_PYRO_BACKEND) +@pytest.mark.parametrize("temperature", [0, 1]) +def test_distribution_2(temperature): + # +--------+ + # z1 --|--> x1 | + # | | | + # V | | + # z2 --|--> x2 | + # +--------+ + num_particles = 10000 + data = torch.tensor([[-1.0, -1.0, 0.0], [-1.0, 1.0, 1.0]]) + + @infer.config_enumerate + def model(z1=None, z2=None): + p = pyro.param("p", torch.tensor([[0.25, 0.75], [0.1, 0.9]])) + loc = pyro.param("loc", torch.tensor([-1.0, 1.0])) + z1 = pyro.sample("z1", dist.Categorical(p[0]), obs=z1) + z2 = pyro.sample("z2", dist.Categorical(p[z1]), obs=z2) + logger.info("z1.shape = {}".format(z1.shape)) + logger.info("z2.shape = {}".format(z2.shape)) + with pyro.plate("data", 3): + pyro.sample("x1", dist.Normal(loc[z1], 1.0), obs=data[0]) + pyro.sample("x2", dist.Normal(loc[z2], 1.0), obs=data[1]) + + first_available_dim = -3 + vectorized_model = ( + model + if temperature == 0 + else pyro.plate("particles", size=num_particles, dim=-2)(model) + ) + sampled_model = infer.infer_discrete( + vectorized_model, first_available_dim, temperature + ) + sampled_trace = handlers.trace(sampled_model).get_trace() + conditioned_traces = { + (z1, z2): handlers.trace(model).get_trace( + z1=torch.tensor(z1), z2=torch.tensor(z2) + ) + for z1 in [0, 1] + for z2 in [0, 1] + } + + # Check joint posterior over (z1, z2). + actual_probs = torch.empty(2, 2) + expected_probs = torch.empty(2, 2) + for (z1, z2), tr in conditioned_traces.items(): + expected_probs[z1, z2] = tr.log_prob_sum().exp() + actual_probs[z1, z2] = ( + ( + (sampled_trace.nodes["z1"]["value"] == z1) + & (sampled_trace.nodes["z2"]["value"] == z2) + ) + .float() + .mean() + ) + + if temperature: + expected_probs = expected_probs / expected_probs.sum() + else: + expected_max, argmax = expected_probs.reshape(-1).max(0) + actual_max = sampled_trace.log_prob_sum() + assert_equal(expected_max.log(), actual_max, prec=1e-5) + expected_probs[:] = 0 + expected_probs.reshape(-1)[argmax] = 1 + assert_equal(expected_probs, actual_probs, prec=1e-2 if temperature else 1e-5) + + +@pyroapi.pyro_backend(_PYRO_BACKEND) +@pytest.mark.parametrize("temperature", [0, 1]) +def test_distribution_3_simple(temperature): + # +---------------+ + # | z2 ---> x2 | + # | 2 | + # +---------------+ + num_particles = 10000 + data = torch.tensor([-1.0, 1.0]) + + @infer.config_enumerate + def model(z2=None): + p = pyro.param("p", torch.tensor([0.25, 0.75])) + loc = pyro.param("loc", torch.tensor([-1.0, 1.0])) + with pyro.plate("data", 2): + z2 = pyro.sample("z2", dist.Categorical(p), obs=z2) + pyro.sample("x2", dist.Normal(loc[z2], 1.0), obs=data) + + first_available_dim = -3 + vectorized_model = ( + model + if temperature == 0 + else pyro.plate("particles", size=num_particles, dim=-2)(model) + ) + sampled_model = infer.infer_discrete( + vectorized_model, first_available_dim, temperature + ) + sampled_trace = handlers.trace(sampled_model).get_trace() + conditioned_traces = { + (z20, z21): handlers.trace(model).get_trace(z2=torch.tensor([z20, z21])) + for z20 in [0, 1] + for z21 in [0, 1] + } + + # Check joint posterior over (z2[0], z2[1]). + actual_probs = torch.empty(2, 2) + expected_probs = torch.empty(2, 2) + for (z20, z21), tr in conditioned_traces.items(): + expected_probs[z20, z21] = tr.log_prob_sum().exp() + actual_probs[z20, z21] = ( + ( + (sampled_trace.nodes["z2"]["value"][..., :1] == z20) + & (sampled_trace.nodes["z2"]["value"][..., 1:] == z21) + ) + .float() + .mean() + ) + if temperature: + expected_probs = expected_probs / expected_probs.sum() + else: + expected_max, argmax = expected_probs.reshape(-1).max(0) + actual_max = sampled_trace.log_prob_sum() + assert_equal(expected_max.log(), actual_max, prec=1e-5) + expected_probs[:] = 0 + expected_probs.reshape(-1)[argmax] = 1 + assert_equal(expected_probs.reshape(-1), actual_probs.reshape(-1), prec=1e-2) + + +@pyroapi.pyro_backend(_PYRO_BACKEND) +@pytest.mark.parametrize("temperature", [0, 1]) +def test_distribution_3(temperature): + # +---------+ +---------------+ + # z1 --|--> x1 | | z2 ---> x2 | + # | 3 | | 2 | + # +---------+ +---------------+ + num_particles = 10000 + data = [torch.tensor([-1.0, -1.0, 0.0]), torch.tensor([-1.0, 1.0])] + + @infer.config_enumerate + def model(z1=None, z2=None): + p = pyro.param("p", torch.tensor([0.25, 0.75])) + loc = pyro.param("loc", torch.tensor([-1.0, 1.0])) + z1 = pyro.sample("z1", dist.Categorical(p), obs=z1) + with pyro.plate("data[0]", 3): + pyro.sample("x1", dist.Normal(loc[z1], 1.0), obs=data[0]) + with pyro.plate("data[1]", 2): + z2 = pyro.sample("z2", dist.Categorical(p), obs=z2) + pyro.sample("x2", dist.Normal(loc[z2], 1.0), obs=data[1]) + + first_available_dim = -3 + vectorized_model = ( + model + if temperature == 0 + else pyro.plate("particles", size=num_particles, dim=-2)(model) + ) + sampled_model = infer.infer_discrete( + vectorized_model, first_available_dim, temperature + ) + sampled_trace = handlers.trace(sampled_model).get_trace() + conditioned_traces = { + (z1, z20, z21): handlers.trace(model).get_trace( + z1=torch.tensor(z1), z2=torch.tensor([z20, z21]) + ) + for z1 in [0, 1] + for z20 in [0, 1] + for z21 in [0, 1] + } + + # Check joint posterior over (z1, z2[0], z2[1]). + actual_probs = torch.empty(2, 2, 2) + expected_probs = torch.empty(2, 2, 2) + for (z1, z20, z21), tr in conditioned_traces.items(): + expected_probs[z1, z20, z21] = tr.log_prob_sum().exp() + actual_probs[z1, z20, z21] = ( + ( + (sampled_trace.nodes["z1"]["value"] == z1) + & (sampled_trace.nodes["z2"]["value"][..., :1] == z20) + & (sampled_trace.nodes["z2"]["value"][..., 1:] == z21) + ) + .float() + .mean() + ) + if temperature: + expected_probs = expected_probs / expected_probs.sum() + else: + expected_max, argmax = expected_probs.reshape(-1).max(0) + actual_max = sampled_trace.log_prob_sum().exp() + assert_equal(expected_max, actual_max, prec=1e-5) + expected_probs[:] = 0 + expected_probs.reshape(-1)[argmax] = 1 + assert_equal(expected_probs.reshape(-1), actual_probs.reshape(-1), prec=1e-2) + + +def model_zzxx(): + # loc,scale + # / \ + # +-------/-+ +--------\------+ + # z1 --|--> x1 | | z2 ---> x2 | + # | 3 | | 2 | + # +---------+ +---------------+ + data = [torch.tensor([-1.0, -1.0, 0.0]), torch.tensor([-1.0, 1.0])] + p = pyro.param("p", torch.tensor([0.25, 0.75])) + loc = pyro.sample("loc", dist.Normal(0, 1).expand([2]).to_event(1)) + # FIXME results in infinite loop in transformeddist_to_funsor. + # scale = pyro.sample("scale", dist.LogNormal(0, 1)) + scale = pyro.sample("scale", dist.Normal(0, 1)).exp() + z1 = pyro.sample("z1", dist.Categorical(p)) + with pyro.plate("data[0]", 3): + pyro.sample("x1", dist.Normal(loc[z1], scale), obs=data[0]) + with pyro.plate("data[1]", 2): + z2 = pyro.sample("z2", dist.Categorical(p)) + pyro.sample("x2", dist.Normal(loc[z2], scale), obs=data[1]) + + +def model2(): + data = [torch.tensor([-1.0, -1.0, 0.0]), torch.tensor([-1.0, 1.0])] + p = pyro.param("p", torch.tensor([0.25, 0.75])) + loc = pyro.sample("loc", dist.Normal(0, 1).expand([2]).to_event(1)) + # FIXME results in infinite loop in transformeddist_to_funsor. + # scale = pyro.sample("scale", dist.LogNormal(0, 1)) + z1 = pyro.sample("z1", dist.Categorical(p)) + scale = pyro.sample("scale", dist.Normal(torch.tensor([0.0, 1.0])[z1], 1)).exp() + with pyro.plate("data[0]", 3): + pyro.sample("x1", dist.Normal(loc[z1], scale), obs=data[0]) + with pyro.plate("data[1]", 2): + z2 = pyro.sample("z2", dist.Categorical(p)) + pyro.sample("x2", dist.Normal(loc[z2], scale), obs=data[1]) + + +@pyroapi.pyro_backend(_PYRO_BACKEND) +@pytest.mark.parametrize("model", [model_zzxx, model2]) +@pytest.mark.parametrize("temperature", [0, 1]) +def test_svi_model_side_enumeration(model, temperature): + # Perform fake inference. + # This has the wrong distribution but the right type for tests. + guide = AutoNormal( + handlers.enum( + handlers.block(infer.config_enumerate(model), expose=["loc", "scale"]) + ) + ) + guide() # Initialize but don't bother to train. + guide_trace = handlers.trace(guide).get_trace() + guide_data = { + name: site["value"] + for name, site in guide_trace.nodes.items() + if site["type"] == "sample" + } + + # MAP estimate discretes, conditioned on posterior sampled continous latents. + actual_trace = handlers.trace( + infer.infer_discrete( + # TODO support replayed sites in infer_discrete. + # handlers.replay(infer.config_enumerate(model), guide_trace) + handlers.condition(infer.config_enumerate(model), guide_data), + temperature=temperature, + ) + ).get_trace() + + # Check site names and shapes. + expected_trace = handlers.trace(model).get_trace() + assert set(actual_trace.nodes) == set(expected_trace.nodes) + assert "z1" not in actual_trace.nodes["scale"]["funsor"]["value"].inputs + + +@pyroapi.pyro_backend(_PYRO_BACKEND) +@pytest.mark.parametrize("model", [model_zzxx, model2]) +@pytest.mark.parametrize("temperature", [0, 1]) +def test_mcmc_model_side_enumeration(model, temperature): + # Perform fake inference. + # Draw from prior rather than trying to sample from mcmc posterior. + # This has the wrong distribution but the right type for tests. + mcmc_trace = handlers.trace( + handlers.block( + handlers.enum(infer.config_enumerate(model)), expose=["loc", "scale"] + ) + ).get_trace() + mcmc_data = { + name: site["value"] + for name, site in mcmc_trace.nodes.items() + if site["type"] == "sample" + } + + # MAP estimate discretes, conditioned on posterior sampled continous latents. + actual_trace = handlers.trace( + infer.infer_discrete( + # TODO support replayed sites in infer_discrete. + # handlers.replay(infer.config_enumerate(model), mcmc_trace), + handlers.condition(infer.config_enumerate(model), mcmc_data), + temperature=temperature, + ), + ).get_trace() + + # Check site names and shapes. + expected_trace = handlers.trace(model).get_trace() + assert set(actual_trace.nodes) == set(expected_trace.nodes) + assert "z1" not in actual_trace.nodes["scale"]["funsor"]["value"].inputs + + +@pytest.mark.parametrize("temperature", [0, 1]) +@pyroapi.pyro_backend(_PYRO_BACKEND) +def test_distribution_masked(temperature): + # +-------+ + # z --|--> x | + # +-------+ + num_particles = 10000 + data = torch.tensor([1.0, 2.0, 3.0]) + mask = torch.tensor([True, False, False]) + + @infer.config_enumerate + def model(z=None): + p = pyro.param("p", torch.tensor([0.75, 0.25])) + z = pyro.sample("z", dist.Categorical(p), obs=z) + logger.info("z.shape = {}".format(z.shape)) + with pyro.plate("data", 3), handlers.mask(mask=mask): + pyro.sample("x", dist.Normal(z.type_as(data), 1.0), obs=data) + + first_available_dim = -3 + vectorized_model = ( + model + if temperature == 0 + else pyro.plate("particles", size=num_particles, dim=-2)(model) + ) + sampled_model = infer.infer_discrete( + vectorized_model, first_available_dim, temperature + ) + sampled_trace = handlers.trace(sampled_model).get_trace() + conditioned_traces = { + z: handlers.trace(model).get_trace(z=torch.tensor(z)) for z in [0.0, 1.0] + } + + # Check posterior over z. + actual_z_mean = sampled_trace.nodes["z"]["value"].type_as(data).mean() + if temperature: + expected_z_mean = 1 / ( + 1 + + ( + conditioned_traces[0].log_prob_sum() + - conditioned_traces[1].log_prob_sum() + ).exp() + ) + else: + expected_z_mean = ( + conditioned_traces[1].log_prob_sum() > conditioned_traces[0].log_prob_sum() + ).float() + assert_equal(actual_z_mean, expected_z_mean, prec=1e-2) diff --git a/pyro/source/tests/contrib/funsor/test_named_handlers.py b/pyro/source/tests/contrib/funsor/test_named_handlers.py new file mode 100644 index 0000000000000000000000000000000000000000..1330676d81d33e10280af1667dbfd4189f22361f --- /dev/null +++ b/pyro/source/tests/contrib/funsor/test_named_handlers.py @@ -0,0 +1,158 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import logging +from collections import OrderedDict + +import pytest +import torch + +# put all funsor-related imports here, so test collection works without funsor +try: + import funsor + from funsor.tensor import Tensor + + import pyro.contrib.funsor + from pyro.contrib.funsor.handlers.named_messenger import NamedMessenger + + funsor.set_backend("torch") + from pyroapi import pyro, pyro_backend +except ImportError: + pytestmark = pytest.mark.skip(reason="funsor is not installed") + + +logger = logging.getLogger(__name__) + + +def test_iteration(): + def testing(): + for i in pyro.markov(range(5)): + v1 = pyro.to_data( + Tensor(torch.ones(2), OrderedDict([(str(i), funsor.Bint[2])]), "real") + ) + v2 = pyro.to_data( + Tensor(torch.zeros(2), OrderedDict([("a", funsor.Bint[2])]), "real") + ) + fv1 = pyro.to_funsor(v1, funsor.Real) + fv2 = pyro.to_funsor(v2, funsor.Real) + print(i, v1.shape) # shapes should alternate + if i % 2 == 0: + assert v1.shape == (2,) + else: + assert v1.shape == (2, 1, 1) + assert v2.shape == (2, 1) + print(i, fv1.inputs) + print("a", v2.shape) # shapes should stay the same + print("a", fv2.inputs) + + with pyro_backend("contrib.funsor"), NamedMessenger(first_available_dim=-1): + testing() + + +def test_nesting(): + def testing(): + with pyro.markov(): + v1 = pyro.to_data( + Tensor(torch.ones(2), OrderedDict([(str(1), funsor.Bint[2])]), "real") + ) + print(1, v1.shape) # shapes should alternate + assert v1.shape == (2,) + + with pyro.markov(): + v2 = pyro.to_data( + Tensor( + torch.ones(2), OrderedDict([(str(2), funsor.Bint[2])]), "real" + ) + ) + print(2, v2.shape) # shapes should alternate + assert v2.shape == (2, 1) + + with pyro.markov(): + v3 = pyro.to_data( + Tensor( + torch.ones(2), + OrderedDict([(str(3), funsor.Bint[2])]), + "real", + ) + ) + print(3, v3.shape) # shapes should alternate + assert v3.shape == (2,) + + with pyro.markov(): + v4 = pyro.to_data( + Tensor( + torch.ones(2), + OrderedDict([(str(4), funsor.Bint[2])]), + "real", + ) + ) + print(4, v4.shape) # shapes should alternate + + assert v4.shape == (2, 1) + + with pyro_backend("contrib.funsor"), NamedMessenger(first_available_dim=-1): + testing() + + +def test_staggered(): + def testing(): + for i in pyro.markov(range(12)): + if i % 4 == 0: + v2 = pyro.to_data( + Tensor(torch.zeros(2), OrderedDict([("a", funsor.Bint[2])]), "real") + ) + fv2 = pyro.to_funsor(v2, funsor.Real) + assert v2.shape == (2,) + print("a", v2.shape) + print("a", fv2.inputs) + + with pyro_backend("contrib.funsor"), NamedMessenger(first_available_dim=-1): + testing() + + +def test_fresh_inputs_to_funsor(): + def testing(): + x = pyro.to_funsor(torch.tensor([0.0, 1.0]), funsor.Real, dim_to_name={-1: "x"}) + assert set(x.inputs) == {"x"} + px = pyro.to_funsor( + torch.ones(2, 3), funsor.Real, dim_to_name={-2: "x", -1: "y"} + ) + assert px.inputs["x"].dtype == 2 and px.inputs["y"].dtype == 3 + + with pyro_backend("contrib.funsor"), NamedMessenger(): + testing() + + +def test_iteration_fresh(): + def testing(): + for i in pyro.markov(range(5)): + fv1 = pyro.to_funsor(torch.zeros(2), funsor.Real, dim_to_name={-1: str(i)}) + fv2 = pyro.to_funsor(torch.ones(2), funsor.Real, dim_to_name={-1: "a"}) + v1 = pyro.to_data(fv1) + v2 = pyro.to_data(fv2) + print(i, v1.shape) # shapes should alternate + if i % 2 == 0: + assert v1.shape == (2,) + else: + assert v1.shape == (2, 1, 1) + assert v2.shape == (2, 1) + print(i, fv1.inputs) + print("a", v2.shape) # shapes should stay the same + print("a", fv2.inputs) + + with pyro_backend("contrib.funsor"), NamedMessenger(first_available_dim=-1): + testing() + + +def test_staggered_fresh(): + def testing(): + for i in pyro.markov(range(12)): + if i % 4 == 0: + fv2 = pyro.to_funsor(torch.zeros(2), funsor.Real, dim_to_name={-1: "a"}) + v2 = pyro.to_data(fv2) + assert v2.shape == (2,) + print("a", v2.shape) + print("a", fv2.inputs) + + with pyro_backend("contrib.funsor"), NamedMessenger(first_available_dim=-1): + testing() diff --git a/pyro/source/tests/contrib/funsor/test_pyroapi_funsor.py b/pyro/source/tests/contrib/funsor/test_pyroapi_funsor.py new file mode 100644 index 0000000000000000000000000000000000000000..21a57f5eced84cfccf654922db373941894a99a2 --- /dev/null +++ b/pyro/source/tests/contrib/funsor/test_pyroapi_funsor.py @@ -0,0 +1,23 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest + +try: + # triggers backend registration + import funsor + + import pyro.contrib.funsor # noqa: F401 + + funsor.set_backend("torch") +except ImportError: + pytestmark = pytest.mark.skip() + +from pyroapi import pyro_backend +from pyroapi.tests import * # noqa F401 + + +@pytest.fixture(params=["contrib.funsor"]) +def backend(request): + with pyro_backend(request.param): + yield diff --git a/pyro/source/tests/contrib/funsor/test_tmc.py b/pyro/source/tests/contrib/funsor/test_tmc.py new file mode 100644 index 0000000000000000000000000000000000000000..81da5a653e690ac37a6d9a641d3082160d57faba --- /dev/null +++ b/pyro/source/tests/contrib/funsor/test_tmc.py @@ -0,0 +1,212 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import logging +import math + +import pytest +import torch +from torch.autograd import grad +from torch.distributions import constraints + +from tests.common import assert_equal + +# put all funsor-related imports here, so test collection works without funsor +try: + import funsor + + import pyro.contrib.funsor + + funsor.set_backend("torch") + from pyroapi import distributions as dist + from pyroapi import infer, pyro, pyro_backend +except ImportError: + pytestmark = pytest.mark.skip(reason="funsor is not installed") + +logger = logging.getLogger(__name__) + + +@pytest.mark.parametrize("depth", [1, 2, 3, 4, 5]) +@pytest.mark.parametrize("num_samples", [None, 200]) +@pytest.mark.parametrize("max_plate_nesting", [2, 3]) +@pytest.mark.parametrize("tmc_strategy", ["diagonal", "mixture"]) +def test_tmc_categoricals(depth, max_plate_nesting, num_samples, tmc_strategy): + def model(): + x = pyro.sample("x0", dist.Categorical(pyro.param("q0"))) + with pyro.plate("local", 3): + for i in range(1, depth): + x = pyro.sample( + "x{}".format(i), + dist.Categorical(pyro.param("q{}".format(i))[..., x, :]), + ) + with pyro.plate("data", 4): + pyro.sample("y", dist.Bernoulli(pyro.param("qy")[..., x]), obs=data) + + with pyro_backend("pyro"): + # initialize + qs = [pyro.param("q0", torch.tensor([0.4, 0.6], requires_grad=True))] + for i in range(1, depth): + qs.append( + pyro.param( + "q{}".format(i), + torch.randn(2, 2).abs().detach().requires_grad_(), + constraint=constraints.simplex, + ) + ) + qs.append(pyro.param("qy", torch.tensor([0.75, 0.25], requires_grad=True))) + qs = [q.unconstrained() for q in qs] + data = (torch.rand(4, 3) > 0.5).to(dtype=qs[-1].dtype, device=qs[-1].device) + + with pyro_backend("pyro"): + elbo = infer.TraceTMC_ELBO(max_plate_nesting=max_plate_nesting) + enum_model = infer.config_enumerate( + model, + default="parallel", + expand=False, + num_samples=num_samples, + tmc=tmc_strategy, + ) + expected_loss = (-elbo.differentiable_loss(enum_model, lambda: None)).exp() + expected_grads = grad(expected_loss, qs) + + with pyro_backend("contrib.funsor"): + tmc = infer.TraceTMC_ELBO(max_plate_nesting=max_plate_nesting) + tmc_model = infer.config_enumerate( + model, + default="parallel", + expand=False, + num_samples=num_samples, + tmc=tmc_strategy, + ) + actual_loss = (-tmc.differentiable_loss(tmc_model, lambda: None)).exp() + actual_grads = grad(actual_loss, qs) + + prec = 0.05 + assert_equal( + actual_loss, + expected_loss, + prec=prec, + msg="".join( + [ + "\nexpected loss = {}".format(expected_loss), + "\n actual loss = {}".format(actual_loss), + ] + ), + ) + + for actual_grad, expected_grad in zip(actual_grads, expected_grads): + assert_equal( + actual_grad, + expected_grad, + prec=prec, + msg="".join( + [ + "\nexpected grad = {}".format(expected_grad.detach().cpu().numpy()), + "\n actual grad = {}".format(actual_grad.detach().cpu().numpy()), + ] + ), + ) + + +@pytest.mark.parametrize("depth", [1, 2, 3, 4]) +@pytest.mark.parametrize("num_samples,expand", [(400, False)]) +@pytest.mark.parametrize("max_plate_nesting", [1]) +@pytest.mark.parametrize("guide_type", ["prior", "factorized", "nonfactorized"]) +@pytest.mark.parametrize("reparameterized", [False, True], ids=["dice", "pathwise"]) +@pytest.mark.parametrize("tmc_strategy", ["diagonal", "mixture"]) +def test_tmc_normals_chain_gradient( + depth, + num_samples, + max_plate_nesting, + expand, + guide_type, + reparameterized, + tmc_strategy, +): + def model(reparameterized): + Normal = ( + dist.Normal + if reparameterized + else dist.testing.fakes.NonreparameterizedNormal + ) + x = pyro.sample("x0", Normal(pyro.param("q2"), math.sqrt(1.0 / depth))) + for i in range(1, depth): + x = pyro.sample("x{}".format(i), Normal(x, math.sqrt(1.0 / depth))) + pyro.sample("y", Normal(x, 1.0), obs=torch.tensor(float(1))) + + def factorized_guide(reparameterized): + Normal = ( + dist.Normal + if reparameterized + else dist.testing.fakes.NonreparameterizedNormal + ) + pyro.sample("x0", Normal(pyro.param("q2"), math.sqrt(1.0 / depth))) + for i in range(1, depth): + pyro.sample("x{}".format(i), Normal(0.0, math.sqrt(float(i + 1) / depth))) + + def nonfactorized_guide(reparameterized): + Normal = ( + dist.Normal + if reparameterized + else dist.testing.fakes.NonreparameterizedNormal + ) + x = pyro.sample("x0", Normal(pyro.param("q2"), math.sqrt(1.0 / depth))) + for i in range(1, depth): + x = pyro.sample("x{}".format(i), Normal(x, math.sqrt(1.0 / depth))) + + with pyro_backend("contrib.funsor"): + # compare reparameterized and nonreparameterized gradient estimates + q2 = pyro.param("q2", torch.tensor(0.5, requires_grad=True)) + qs = (q2.unconstrained(),) + + tmc = infer.TraceTMC_ELBO(max_plate_nesting=max_plate_nesting) + tmc_model = infer.config_enumerate( + model, + default="parallel", + expand=expand, + num_samples=num_samples, + tmc=tmc_strategy, + ) + guide = ( + factorized_guide + if guide_type == "factorized" + else ( + nonfactorized_guide + if guide_type == "nonfactorized" + else lambda *args: None + ) + ) + tmc_guide = infer.config_enumerate( + guide, + default="parallel", + expand=expand, + num_samples=num_samples, + tmc=tmc_strategy, + ) + + # convert to linear space for unbiasedness + actual_loss = ( + -tmc.differentiable_loss(tmc_model, tmc_guide, reparameterized) + ).exp() + actual_grads = grad(actual_loss, qs) + + # gold values from Funsor + expected_grads = ( + torch.tensor({1: 0.0999, 2: 0.0860, 3: 0.0802, 4: 0.0771}[depth]), + ) + + grad_prec = 0.05 if reparameterized else 0.1 + + for actual_grad, expected_grad in zip(actual_grads, expected_grads): + print(actual_loss) + assert_equal( + actual_grad, + expected_grad, + prec=grad_prec, + msg="".join( + [ + "\nexpected grad = {}".format(expected_grad.detach().cpu().numpy()), + "\n actual grad = {}".format(actual_grad.detach().cpu().numpy()), + ] + ), + ) diff --git a/pyro/source/tests/contrib/funsor/test_valid_models_enum.py b/pyro/source/tests/contrib/funsor/test_valid_models_enum.py new file mode 100644 index 0000000000000000000000000000000000000000..bf935280384b7adea8f23ae7b6044cfd52f51425 --- /dev/null +++ b/pyro/source/tests/contrib/funsor/test_valid_models_enum.py @@ -0,0 +1,503 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import contextlib +import logging +import os +from collections import defaultdict +from queue import LifoQueue + +import pytest +import torch + +from pyro.infer.enum import iter_discrete_escape, iter_discrete_extend +from pyro.ops.indexing import Vindex +from pyro.poutine import Trace +from pyro.poutine.util import prune_subsample_sites +from pyro.util import check_traceenum_requirements + +# put all funsor-related imports here, so test collection works without funsor +try: + import funsor + + import pyro.contrib.funsor + from pyro.contrib.funsor.handlers.runtime import _DIM_STACK + + funsor.set_backend("torch") + from pyroapi import distributions as dist + from pyroapi import handlers, infer, pyro, pyro_backend +except ImportError: + pytestmark = pytest.mark.skip(reason="funsor is not installed") + +logger = logging.getLogger(__name__) + +# default to 2, which checks that packed but not unpacked shapes match +_NAMED_TEST_STRENGTH = int(os.environ.get("NAMED_TEST_STRENGTH", 2)) + + +def assert_ok(model, guide=None, max_plate_nesting=None, **kwargs): + """ + Assert that enumeration runs... + """ + with pyro_backend("pyro"): + pyro.clear_param_store() + + if guide is None: + guide = lambda **kwargs: None # noqa: E731 + + q_pyro, q_funsor = LifoQueue(), LifoQueue() + q_pyro.put(Trace()) + q_funsor.put(Trace()) + + while not q_pyro.empty() and not q_funsor.empty(): + with pyro_backend("pyro"): + with handlers.enum(first_available_dim=-max_plate_nesting - 1): + guide_tr_pyro = handlers.trace( + handlers.queue( + guide, + q_pyro, + escape_fn=iter_discrete_escape, + extend_fn=iter_discrete_extend, + ) + ).get_trace(**kwargs) + tr_pyro = handlers.trace( + handlers.replay(model, trace=guide_tr_pyro) + ).get_trace(**kwargs) + + with pyro_backend("contrib.funsor"): + with handlers.enum(first_available_dim=-max_plate_nesting - 1): + guide_tr_funsor = handlers.trace( + handlers.queue( + guide, + q_funsor, + escape_fn=iter_discrete_escape, + extend_fn=iter_discrete_extend, + ) + ).get_trace(**kwargs) + tr_funsor = handlers.trace( + handlers.replay(model, trace=guide_tr_funsor) + ).get_trace(**kwargs) + + # make sure all dimensions were cleaned up + assert _DIM_STACK.local_frame is _DIM_STACK.global_frame + assert ( + not _DIM_STACK.global_frame.name_to_dim + and not _DIM_STACK.global_frame.dim_to_name + ) + assert _DIM_STACK.outermost is None + + tr_pyro = prune_subsample_sites(tr_pyro.copy()) + tr_funsor = prune_subsample_sites(tr_funsor.copy()) + _check_traces(tr_pyro, tr_funsor) + + +def _check_traces(tr_pyro, tr_funsor): + assert tr_pyro.nodes.keys() == tr_funsor.nodes.keys() + tr_pyro.compute_log_prob() + tr_funsor.compute_log_prob() + tr_pyro.pack_tensors() + + symbol_to_name = { + node["infer"]["_enumerate_symbol"]: name + for name, node in tr_pyro.nodes.items() + if node["type"] == "sample" + and not node["is_observed"] + and node["infer"].get("enumerate") == "parallel" + } + symbol_to_name.update( + {symbol: name for name, symbol in tr_pyro.plate_to_symbol.items()} + ) + + if _NAMED_TEST_STRENGTH >= 1: + # coarser check: enumeration requirements satisfied + check_traceenum_requirements(tr_pyro, Trace()) + check_traceenum_requirements(tr_funsor, Trace()) + try: + # coarser check: number of elements and squeezed shapes + for name, pyro_node in tr_pyro.nodes.items(): + if pyro_node["type"] != "sample": + continue + funsor_node = tr_funsor.nodes[name] + assert ( + pyro_node["packed"]["log_prob"].numel() + == funsor_node["log_prob"].numel() + ) + assert ( + pyro_node["packed"]["log_prob"].shape + == funsor_node["log_prob"].squeeze().shape + ) + assert frozenset( + f for f in pyro_node["cond_indep_stack"] if f.vectorized + ) == frozenset( + f for f in funsor_node["cond_indep_stack"] if f.vectorized + ) + except AssertionError: + for name, pyro_node in tr_pyro.nodes.items(): + if pyro_node["type"] != "sample": + continue + funsor_node = tr_funsor.nodes[name] + pyro_packed_shape = pyro_node["packed"]["log_prob"].shape + funsor_packed_shape = funsor_node["log_prob"].squeeze().shape + if pyro_packed_shape != funsor_packed_shape: + err_str = "==> (dep mismatch) {}".format(name) + else: + err_str = name + print( + err_str, + "Pyro: {} vs Funsor: {}".format( + pyro_packed_shape, funsor_packed_shape + ), + ) + raise + + if _NAMED_TEST_STRENGTH >= 2: + try: + # medium check: unordered packed shapes match + for name, pyro_node in tr_pyro.nodes.items(): + if pyro_node["type"] != "sample": + continue + funsor_node = tr_funsor.nodes[name] + pyro_names = frozenset( + symbol_to_name[d] + for d in pyro_node["packed"]["log_prob"]._pyro_dims + ) + funsor_names = frozenset(funsor_node["funsor"]["log_prob"].inputs) + assert pyro_names == frozenset( + name.replace("__PARTICLES", "") for name in funsor_names + ) + except AssertionError: + for name, pyro_node in tr_pyro.nodes.items(): + if pyro_node["type"] != "sample": + continue + funsor_node = tr_funsor.nodes[name] + pyro_names = frozenset( + symbol_to_name[d] + for d in pyro_node["packed"]["log_prob"]._pyro_dims + ) + funsor_names = frozenset(funsor_node["funsor"]["log_prob"].inputs) + if pyro_names != funsor_names: + err_str = "==> (packed mismatch) {}".format(name) + else: + err_str = name + print( + err_str, + "Pyro: {} vs Funsor: {}".format( + sorted(tuple(pyro_names)), sorted(tuple(funsor_names)) + ), + ) + raise + + if _NAMED_TEST_STRENGTH >= 3: + try: + # finer check: exact match with unpacked Pyro shapes + for name, pyro_node in tr_pyro.nodes.items(): + if pyro_node["type"] != "sample": + continue + funsor_node = tr_funsor.nodes[name] + assert pyro_node["log_prob"].shape == funsor_node["log_prob"].shape + assert pyro_node["value"].shape == funsor_node["value"].shape + except AssertionError: + for name, pyro_node in tr_pyro.nodes.items(): + if pyro_node["type"] != "sample": + continue + funsor_node = tr_funsor.nodes[name] + pyro_shape = pyro_node["log_prob"].shape + funsor_shape = funsor_node["log_prob"].shape + if pyro_shape != funsor_shape: + err_str = "==> (unpacked mismatch) {}".format(name) + else: + err_str = name + print( + err_str, "Pyro: {} vs Funsor: {}".format(pyro_shape, funsor_shape) + ) + raise + + +@pytest.mark.parametrize("history", [1, 2, 3]) +def test_enum_recycling_chain_iter(history): + @infer.config_enumerate + def model(): + p = torch.tensor([[0.2, 0.8], [0.1, 0.9]]) + + xs = [0] + for t in pyro.markov(range(100), history=history): + xs.append(pyro.sample("x_{}".format(t), dist.Categorical(p[xs[-1]]))) + assert all(x.dim() <= history + 1 for x in xs[1:]) + + assert_ok(model, max_plate_nesting=0) + + +@pytest.mark.parametrize("history", [2, 3]) +def test_enum_recycling_chain_iter_interleave_parallel_sequential(history): + def model(): + p = torch.tensor([[0.2, 0.8], [0.1, 0.9]]) + + xs = [0] + for t in pyro.markov(range(10), history=history): + xs.append( + pyro.sample( + "x_{}".format(t), + dist.Categorical(p[xs[-1]]), + infer={"enumerate": ("sequential", "parallel")[t % 2]}, + ) + ) + assert all(x.dim() <= history + 1 for x in xs[1:]) + + assert_ok(model, max_plate_nesting=0) + + +@pytest.mark.parametrize("history", [1, 2, 3]) +def test_enum_recycling_chain_while(history): + @infer.config_enumerate + def model(): + p = torch.tensor([[0.2, 0.8], [0.1, 0.9]]) + + xs = [0] + c = pyro.markov(history=history) + with contextlib.ExitStack() as stack: + for t in range(100): + stack.enter_context(c) + xs.append(pyro.sample("x_{}".format(t), dist.Categorical(p[xs[-1]]))) + assert all(x.dim() <= history + 1 for x in xs[1:]) + + assert_ok(model, max_plate_nesting=0) + + +@pytest.mark.parametrize("history", [1, 2, 3]) +def test_enum_recycling_chain_recur(history): + @infer.config_enumerate + def model(): + p = torch.tensor([[0.2, 0.8], [0.1, 0.9]]) + + x = 0 + + @pyro.markov(history=history) + def fn(t, x): + x = pyro.sample("x_{}".format(t), dist.Categorical(p[x])) + assert x.dim() <= history + 1 + return x if t >= 100 else fn(t + 1, x) + + return fn(0, x) + + assert_ok(model, max_plate_nesting=0) + + +@pytest.mark.parametrize("use_vindex", [False, True]) +@pytest.mark.parametrize("markov", [False, True]) +def test_enum_recycling_dbn(markov, use_vindex): + # x --> x --> x enum "state" + # y | y | y | enum "occlusion" + # \ | \ | \ | + # z z z obs + + @infer.config_enumerate + def model(): + p = pyro.param("p", torch.ones(3, 3)) + q = pyro.param("q", torch.ones(2)) + r = pyro.param("r", torch.ones(3, 2, 4)) + + x = 0 + times = pyro.markov(range(100)) if markov else range(11) + for t in times: + x = pyro.sample("x_{}".format(t), dist.Categorical(p[x])) + y = pyro.sample("y_{}".format(t), dist.Categorical(q)) + if use_vindex: + probs = Vindex(r)[x, y] + else: + z_ind = torch.arange(4, dtype=torch.long) + probs = r[x.unsqueeze(-1), y.unsqueeze(-1), z_ind] + pyro.sample( + "z_{}".format(t), dist.Categorical(probs), obs=torch.tensor(0.0) + ) + + assert_ok(model, max_plate_nesting=0) + + +def test_enum_recycling_nested(): + # (x) + # \ + # y0---(y1)--(y2) + # | | | + # z00 z10 z20 + # | | | + # z01 z11 (z21) + # | | | + # z02 z12 z22 <-- what can this depend on? + # + # markov dependencies + # ------------------- + # x: + # y0: x + # z00: x y0 + # z01: x y0 z00 + # z02: x y0 z01 + # y1: x y0 + # z10: x y0 y1 + # z11: x y0 y1 z10 + # z12: x y0 y1 z11 + # y2: x y1 + # z20: x y1 y2 + # z21: x y1 y2 z20 + # z22: x y1 y2 z21 + + @infer.config_enumerate + def model(): + p = pyro.param("p", torch.ones(3, 3)) + x = pyro.sample("x", dist.Categorical(p[0])) + y = x + for i in pyro.markov(range(10)): + y = pyro.sample("y_{}".format(i), dist.Categorical(p[y])) + z = y + for j in pyro.markov(range(10)): + z = pyro.sample("z_{}_{}".format(i, j), dist.Categorical(p[z])) + + assert_ok(model, max_plate_nesting=0) + + +@pytest.mark.xfail(reason="Pyro behavior here appears to be incorrect") +@pytest.mark.parametrize("grid_size", [4, 20]) +@pytest.mark.parametrize("use_vindex", [False, True]) +def test_enum_recycling_grid(grid_size, use_vindex): + # x---x---x---x -----> i + # | | | | | + # x---x---x---x | + # | | | | V + # x---x---x--(x) j + # | | | | + # x---x--(x)--x <-- what can this depend on? + + @infer.config_enumerate + def model(): + p = pyro.param("p_leaf", torch.ones(2, 2, 2)) + x = defaultdict(lambda: torch.tensor(0)) + y_axis = pyro.markov(range(grid_size), keep=True) + for i in pyro.markov(range(grid_size)): + for j in y_axis: + if use_vindex: + probs = Vindex(p)[x[i - 1, j], x[i, j - 1]] + else: + ind = torch.arange(2, dtype=torch.long) + probs = p[x[i - 1, j].unsqueeze(-1), x[i, j - 1].unsqueeze(-1), ind] + x[i, j] = pyro.sample("x_{}_{}".format(i, j), dist.Categorical(probs)) + + assert_ok(model, max_plate_nesting=0) + + +@pytest.mark.parametrize("max_plate_nesting", [0, 1, 2]) +@pytest.mark.parametrize("depth", [3, 5, 7]) +@pytest.mark.parametrize("history", [1, 2]) +def test_enum_recycling_reentrant_history(max_plate_nesting, depth, history): + data = (True, False) + for i in range(depth): + data = (data, data, False) + + def model_(**kwargs): + @pyro.markov(history=history) + def model(data, state=0, address=""): + if isinstance(data, bool): + p = pyro.param("p_leaf", torch.ones(10)) + pyro.sample( + "leaf_{}".format(address), + dist.Bernoulli(p[state]), + obs=torch.tensor(1.0 if data else 0.0), + ) + else: + assert isinstance(data, tuple) + p = pyro.param("p_branch", torch.ones(10, 10)) + for branch, letter in zip(data, "abcdefg"): + next_state = pyro.sample( + "branch_{}".format(address + letter), + dist.Categorical(p[state]), + infer={"enumerate": "parallel"}, + ) + model(branch, next_state, address + letter) + + return model(**kwargs) + + assert_ok(model_, max_plate_nesting=max_plate_nesting, data=data) + + +@pytest.mark.parametrize("max_plate_nesting", [0, 1, 2]) +@pytest.mark.parametrize("depth", [3, 5, 7]) +def test_enum_recycling_mutual_recursion(max_plate_nesting, depth): + data = (True, False) + for i in range(depth): + data = (data, data, False) + + def model_(**kwargs): + def model_leaf(data, state=0, address=""): + p = pyro.param("p_leaf", torch.ones(10)) + pyro.sample( + "leaf_{}".format(address), + dist.Bernoulli(p[state]), + obs=torch.tensor(1.0 if data else 0.0), + ) + + @pyro.markov + def model1(data, state=0, address=""): + if isinstance(data, bool): + model_leaf(data, state, address) + else: + p = pyro.param("p_branch", torch.ones(10, 10)) + for branch, letter in zip(data, "abcdefg"): + next_state = pyro.sample( + "branch_{}".format(address + letter), + dist.Categorical(p[state]), + infer={"enumerate": "parallel"}, + ) + model2(branch, next_state, address + letter) + + @pyro.markov + def model2(data, state=0, address=""): + if isinstance(data, bool): + model_leaf(data, state, address) + else: + p = pyro.param("p_branch", torch.ones(10, 10)) + for branch, letter in zip(data, "abcdefg"): + next_state = pyro.sample( + "branch_{}".format(address + letter), + dist.Categorical(p[state]), + infer={"enumerate": "parallel"}, + ) + model1(branch, next_state, address + letter) + + return model1(**kwargs) + + assert_ok(model_, max_plate_nesting=0, data=data) + + +@pytest.mark.parametrize("max_plate_nesting", [0, 1, 2]) +def test_enum_recycling_interleave(max_plate_nesting): + def model(): + with pyro.markov() as m: + with pyro.markov(): + with m: # error here + pyro.sample( + "x", + dist.Categorical(torch.ones(4)), + infer={"enumerate": "parallel"}, + ) + + assert_ok(model, max_plate_nesting=max_plate_nesting) + + +@pytest.mark.parametrize("max_plate_nesting", [0, 1, 2]) +@pytest.mark.parametrize("history", [2, 3]) +def test_markov_history(max_plate_nesting, history): + @infer.config_enumerate + def model(): + p = pyro.param("p", 0.25 * torch.ones(2, 2)) + q = pyro.param("q", 0.25 * torch.ones(2)) + x_prev = torch.tensor(0) + x_curr = torch.tensor(0) + for t in pyro.markov(range(10), history=history): + probs = p[x_prev, x_curr] + x_prev, x_curr = ( + x_curr, + pyro.sample("x_{}".format(t), dist.Bernoulli(probs)).long(), + ) + pyro.sample( + "y_{}".format(t), dist.Bernoulli(q[x_curr]), obs=torch.tensor(0.0) + ) + + assert_ok(model, max_plate_nesting=max_plate_nesting) diff --git a/pyro/source/tests/contrib/funsor/test_valid_models_plate.py b/pyro/source/tests/contrib/funsor/test_valid_models_plate.py new file mode 100644 index 0000000000000000000000000000000000000000..4b2f75d844428eee2ac0f68e95798db279f62752 --- /dev/null +++ b/pyro/source/tests/contrib/funsor/test_valid_models_plate.py @@ -0,0 +1,200 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import logging + +import pytest +import torch + +from pyro.ops.indexing import Vindex +from tests.common import xfail_param + +# put all funsor-related imports here, so test collection works without funsor +try: + import funsor + + import pyro.contrib.funsor + + funsor.set_backend("torch") + from pyroapi import distributions as dist + from pyroapi import infer, pyro + + from tests.contrib.funsor.test_valid_models_enum import assert_ok +except ImportError: + pytestmark = pytest.mark.skip(reason="funsor is not installed") + +logger = logging.getLogger(__name__) + + +@pytest.mark.parametrize("enumerate_", [None, "parallel", "sequential"]) +def test_enum_discrete_non_enumerated_plate_ok(enumerate_): + def model(): + pyro.sample("w", dist.Bernoulli(0.5), infer={"enumerate": "parallel"}) + + with pyro.plate("non_enum", 2): + a = pyro.sample("a", dist.Bernoulli(0.5), infer={"enumerate": None}) + + p = (1.0 + a.sum(-1)) / (2.0 + a.shape[0]) # introduce dependency of b on a + + with pyro.plate("enum_1", 3): + pyro.sample("b", dist.Bernoulli(p), infer={"enumerate": enumerate_}) + + assert_ok(model, max_plate_nesting=1) + + +@pytest.mark.parametrize( + "plate_dims", + [ + (None, None, None, None), + (-3, None, None, None), + (None, -3, None, None), + (-2, -3, None, None), + ], +) +def test_plate_dim_allocation_ok(plate_dims): + def model(): + p = torch.tensor(0.5, requires_grad=True) + with pyro.plate("plate_outer", 5, dim=plate_dims[0]): + pyro.sample("x", dist.Bernoulli(p)) + with pyro.plate("plate_inner_1", 6, dim=plate_dims[1]): + pyro.sample("y", dist.Bernoulli(p)) + with pyro.plate("plate_inner_2", 7, dim=plate_dims[2]): + pyro.sample("z", dist.Bernoulli(p)) + with pyro.plate("plate_inner_3", 8, dim=plate_dims[3]): + pyro.sample("q", dist.Bernoulli(p)) + + assert_ok(model, max_plate_nesting=4) + + +@pytest.mark.parametrize( + "tmc_strategy", + [None, xfail_param("diagonal", reason="strategy not implemented yet")], +) +@pytest.mark.parametrize("subsampling", [False, True]) +@pytest.mark.parametrize("reuse_plate", [False, True]) +def test_enum_recycling_plate(subsampling, reuse_plate, tmc_strategy): + @infer.config_enumerate( + default="parallel", tmc=tmc_strategy, num_samples=2 if tmc_strategy else None + ) + def model(): + p = pyro.param("p", torch.ones(3, 3)) + q = pyro.param("q", torch.tensor([0.5, 0.5])) + plate_x = pyro.plate( + "plate_x", 4, subsample_size=3 if subsampling else None, dim=-1 + ) + plate_y = pyro.plate( + "plate_y", 5, subsample_size=3 if subsampling else None, dim=-1 + ) + plate_z = pyro.plate( + "plate_z", 6, subsample_size=3 if subsampling else None, dim=-2 + ) + + a = pyro.sample("a", dist.Bernoulli(q[0])).long() + w = 0 + for i in pyro.markov(range(4)): + w = pyro.sample("w_{}".format(i), dist.Categorical(p[w])) + + with plate_x: + b = pyro.sample("b", dist.Bernoulli(q[a])).long() + x = 0 + for i in pyro.markov(range(4)): + x = pyro.sample("x_{}".format(i), dist.Categorical(p[x])) + + with plate_y: + c = pyro.sample("c", dist.Bernoulli(q[a])).long() + y = 0 + for i in pyro.markov(range(4)): + y = pyro.sample("y_{}".format(i), dist.Categorical(p[y])) + + with plate_z: + d = pyro.sample("d", dist.Bernoulli(q[a])).long() + z = 0 + for i in pyro.markov(range(4)): + z = pyro.sample("z_{}".format(i), dist.Categorical(p[z])) + + with plate_x, plate_z: + # this part is tricky: how do we know to preserve b's dimension? + # also, how do we know how to make b and d have different dimensions? + e = pyro.sample("e", dist.Bernoulli(q[b if reuse_plate else a])).long() + xz = 0 + for i in pyro.markov(range(4)): + xz = pyro.sample("xz_{}".format(i), dist.Categorical(p[xz])) + + return a, b, c, d, e + + assert_ok(model, max_plate_nesting=2) + + +@pytest.mark.parametrize("enumerate_", [None, "parallel", "sequential"]) +@pytest.mark.parametrize("reuse_plate", [True, False]) +def test_enum_discrete_plates_dependency_ok(enumerate_, reuse_plate): + @infer.config_enumerate(default=enumerate_) + def model(): + x_plate = pyro.plate("x_plate", 10, dim=-1) + y_plate = pyro.plate("y_plate", 11, dim=-2) + q = pyro.param("q", torch.tensor([0.5, 0.5])) + pyro.sample("a", dist.Bernoulli(0.5)) + with x_plate: + b = pyro.sample("b", dist.Bernoulli(0.5)).long() + with y_plate: + # Note that it is difficult to check that c does not depend on b. + c = pyro.sample("c", dist.Bernoulli(0.5)).long() + with x_plate, y_plate: + pyro.sample("d", dist.Bernoulli(Vindex(q)[b] if reuse_plate else 0.5)) + + assert c.shape != b.shape or enumerate_ == "sequential" + + assert_ok(model, max_plate_nesting=2) + + +@pytest.mark.parametrize("subsampling", [False, True]) +@pytest.mark.parametrize("enumerate_", [None, "parallel", "sequential"]) +def test_enum_discrete_plate_shape_broadcasting_ok(subsampling, enumerate_): + @infer.config_enumerate(default=enumerate_) + def model(): + x_plate = pyro.plate( + "x_plate", 5, subsample_size=2 if subsampling else None, dim=-1 + ) + y_plate = pyro.plate( + "y_plate", 6, subsample_size=3 if subsampling else None, dim=-2 + ) + with pyro.plate("num_particles", 50, dim=-3): + with x_plate: + b = pyro.sample("b", dist.Beta(torch.tensor(1.1), torch.tensor(1.1))) + with y_plate: + c = pyro.sample("c", dist.Bernoulli(0.5)) + with x_plate, y_plate: + d = pyro.sample("d", dist.Bernoulli(b)) + + # check shapes + if enumerate_ == "parallel": + assert b.shape == (50, 1, x_plate.subsample_size) + assert c.shape == (2, 1, 1, 1) + assert d.shape == (2, 1, 1, 1, 1) + elif enumerate_ == "sequential": + assert b.shape == (50, 1, x_plate.subsample_size) + assert c.shape in ((), (1, 1, 1)) # both are valid + assert d.shape in ((), (1, 1, 1)) # both are valid + else: + assert b.shape == (50, 1, x_plate.subsample_size) + assert c.shape == (50, y_plate.subsample_size, 1) + assert d.shape == (50, y_plate.subsample_size, x_plate.subsample_size) + + assert_ok(model, guide=model, max_plate_nesting=3) + + +@pytest.mark.parametrize("subsample_size", [None, 5], ids=["full", "subsample"]) +@pytest.mark.parametrize("num_samples", [None, 2]) +def test_plate_subsample_primitive_ok(subsample_size, num_samples): + @infer.config_enumerate(num_samples=num_samples, tmc="full") + def model(): + with pyro.plate("plate", 10, subsample_size=subsample_size, dim=None): + p0 = torch.tensor(0.0) + p0 = pyro.subsample(p0, event_dim=0) + assert p0.shape == () + p = 0.5 * torch.ones(10) + p = pyro.subsample(p, event_dim=0) + assert len(p) == (subsample_size if subsample_size else 10) + pyro.sample("x", dist.Bernoulli(p)) + + assert_ok(model, max_plate_nesting=1) diff --git a/pyro/source/tests/contrib/funsor/test_valid_models_sequential_plate.py b/pyro/source/tests/contrib/funsor/test_valid_models_sequential_plate.py new file mode 100644 index 0000000000000000000000000000000000000000..44bba9b8d85bf30bae86eca5ae5dc078321b8d25 --- /dev/null +++ b/pyro/source/tests/contrib/funsor/test_valid_models_sequential_plate.py @@ -0,0 +1,126 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import logging + +import pytest +import torch + +from pyro.ops.indexing import Vindex + +# put all funsor-related imports here, so test collection works without funsor +try: + import funsor + + import pyro.contrib.funsor + + funsor.set_backend("torch") + from pyroapi import distributions as dist + from pyroapi import infer, pyro + + from tests.contrib.funsor.test_valid_models_enum import assert_ok +except ImportError: + pytestmark = pytest.mark.skip(reason="funsor is not installed") + +logger = logging.getLogger(__name__) + + +@pytest.mark.parametrize("subsampling", [False, True]) +@pytest.mark.parametrize("enumerate_", [None, "parallel", "sequential"]) +def test_enum_discrete_iplate_plate_dependency_ok(subsampling, enumerate_): + def model(): + pyro.sample("w", dist.Bernoulli(0.5), infer={"enumerate": "parallel"}) + inner_plate = pyro.plate("plate", 10, subsample_size=4 if subsampling else None) + for i in pyro.plate( + "iplate", 10, subsample=torch.arange(3) if subsampling else None + ): + pyro.sample("y_{}".format(i), dist.Bernoulli(0.5)) + with inner_plate: + pyro.sample( + "x_{}".format(i), + dist.Bernoulli(0.5), + infer={"enumerate": enumerate_}, + ) + + assert_ok(model, max_plate_nesting=1) + + +def test_enum_iplate_iplate_ok(): + @infer.config_enumerate + def model(data=None): + probs_a = torch.tensor([0.45, 0.55]) + probs_b = torch.tensor([[0.6, 0.4], [0.4, 0.6]]) + probs_c = torch.tensor([[0.75, 0.25], [0.55, 0.45]]) + probs_d = torch.tensor([[[0.4, 0.6], [0.3, 0.7]], [[0.3, 0.7], [0.2, 0.8]]]) + + b_axis = pyro.plate("b_axis", 2) + c_axis = pyro.plate("c_axis", 2) + a = pyro.sample("a", dist.Categorical(probs_a)) + b = [ + pyro.sample("b_{}".format(i), dist.Categorical(probs_b[a])) for i in b_axis + ] + c = [ + pyro.sample("c_{}".format(j), dist.Categorical(probs_c[a])) for j in c_axis + ] + for i in b_axis: + for j in c_axis: + pyro.sample( + "d_{}_{}".format(i, j), + dist.Categorical(Vindex(probs_d)[b[i], c[j]]), + obs=data[i, j], + ) + + data = torch.tensor([[0, 1], [0, 0]]) + assert_ok(model, max_plate_nesting=1, data=data) + + +def test_enum_plate_iplate_ok(): + @infer.config_enumerate + def model(data=None): + probs_a = torch.tensor([0.45, 0.55]) + probs_b = torch.tensor([[0.6, 0.4], [0.4, 0.6]]) + probs_c = torch.tensor([[0.75, 0.25], [0.55, 0.45]]) + probs_d = torch.tensor([[[0.4, 0.6], [0.3, 0.7]], [[0.3, 0.7], [0.2, 0.8]]]) + + b_axis = pyro.plate("b_axis", 2) + c_axis = pyro.plate("c_axis", 2) + a = pyro.sample("a", dist.Categorical(probs_a)) + with b_axis: + b = pyro.sample("b", dist.Categorical(probs_b[a])) + with b_axis: + for j in c_axis: + c_j = pyro.sample("c_{}".format(j), dist.Categorical(probs_c[a])) + pyro.sample( + "d_{}".format(j), + dist.Categorical(Vindex(probs_d)[b, c_j]), + obs=data[:, j], + ) + + data = torch.tensor([[0, 1], [0, 0]]) + assert_ok(model, max_plate_nesting=1, data=data) + + +def test_enum_iplate_plate_ok(): + @infer.config_enumerate + def model(data=None): + probs_a = torch.tensor([0.45, 0.55]) + probs_b = torch.tensor([[0.6, 0.4], [0.4, 0.6]]) + probs_c = torch.tensor([[0.75, 0.25], [0.55, 0.45]]) + probs_d = torch.tensor([[[0.4, 0.6], [0.3, 0.7]], [[0.3, 0.7], [0.2, 0.8]]]) + + b_axis = pyro.plate("b_axis", 2) + c_axis = pyro.plate("c_axis", 2) + a = pyro.sample("a", dist.Categorical(probs_a)) + with c_axis: + c = pyro.sample("c", dist.Categorical(probs_c[a])) + for i in b_axis: + b_i = pyro.sample("b_{}".format(i), dist.Categorical(probs_b[a])) + with c_axis: + pyro.sample( + "d_{}".format(i), + dist.Categorical(Vindex(probs_d)[b_i, c]), + obs=data[i], + ) + + data = torch.tensor([[0, 1], [0, 0]]) + assert_ok(model, max_plate_nesting=1, data=data) diff --git a/pyro/source/tests/contrib/funsor/test_vectorized_markov.py b/pyro/source/tests/contrib/funsor/test_vectorized_markov.py new file mode 100644 index 0000000000000000000000000000000000000000..1bb79e5308923c904f066c059ed6e5f7d15dc14b --- /dev/null +++ b/pyro/source/tests/contrib/funsor/test_vectorized_markov.py @@ -0,0 +1,849 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch +from pyroapi import pyro_backend +from torch.distributions import constraints + +from pyro.ops.indexing import Vindex + +# put all funsor-related imports here, so test collection works without funsor +try: + import funsor + from funsor.testing import assert_close + + import pyro.contrib.funsor + from pyro.contrib.funsor.infer.traceenum_elbo import terms_from_trace + + funsor.set_backend("torch") + from pyroapi import distributions as dist + from pyroapi import handlers, infer, pyro +except ImportError: + pytestmark = pytest.mark.skip(reason="funsor is not installed") + + +# x[t-1] --> x[t] --> x[t+1] +# | | | +# V V V +# y[t-1] y[t] y[t+1] +def model_0(data, history, vectorized): + x_dim = 3 + init = pyro.param("init", lambda: torch.rand(x_dim), constraint=constraints.simplex) + trans = pyro.param( + "trans", lambda: torch.rand((x_dim, x_dim)), constraint=constraints.simplex + ) + locs = pyro.param("locs", lambda: torch.rand(x_dim)) + + with pyro.plate("sequences", data.shape[0], dim=-3) as sequences: + sequences = sequences[:, None] + x_prev = None + markov_loop = ( + pyro.vectorized_markov( + name="time", size=data.shape[1], dim=-2, history=history + ) + if vectorized + else pyro.markov(range(data.shape[1]), history=history) + ) + for i in markov_loop: + x_curr = pyro.sample( + "x_{}".format(i), + dist.Categorical( + init if isinstance(i, int) and i < 1 else trans[x_prev] + ), + ) + with pyro.plate("tones", data.shape[2], dim=-1): + pyro.sample( + "y_{}".format(i), + dist.Normal(Vindex(locs)[..., x_curr], 1.0), + obs=Vindex(data)[sequences, i], + ) + x_prev = x_curr + + +# x[t-1] --> x[t] --> x[t+1] +# | | | +# V V V +# y[t-1] y[t] y[t+1] +def model_1(data, history, vectorized): + x_dim = 3 + init = pyro.param("init", lambda: torch.rand(x_dim), constraint=constraints.simplex) + trans = pyro.param( + "trans", lambda: torch.rand((x_dim, x_dim)), constraint=constraints.simplex + ) + locs = pyro.param("locs", lambda: torch.rand(x_dim)) + + x_prev = None + markov_loop = ( + pyro.vectorized_markov(name="time", size=len(data), dim=-2, history=history) + if vectorized + else pyro.markov(range(len(data)), history=history) + ) + for i in markov_loop: + x_curr = pyro.sample( + "x_{}".format(i), + dist.Categorical(init if isinstance(i, int) and i < 1 else trans[x_prev]), + ) + with pyro.plate("tones", data.shape[-1], dim=-1): + pyro.sample( + "y_{}".format(i), + dist.Normal(Vindex(locs)[..., x_curr], 1.0), + obs=data[i], + ) + x_prev = x_curr + + +# x[t-1] --> x[t] --> x[t+1] +# | | | +# V V V +# y[t-1] --> y[t] --> y[t+1] +def model_2(data, history, vectorized): + x_dim, y_dim = 3, 2 + x_init = pyro.param( + "x_init", lambda: torch.rand(x_dim), constraint=constraints.simplex + ) + x_trans = pyro.param( + "x_trans", lambda: torch.rand((x_dim, x_dim)), constraint=constraints.simplex + ) + y_init = pyro.param( + "y_init", lambda: torch.rand(x_dim, y_dim), constraint=constraints.simplex + ) + y_trans = pyro.param( + "y_trans", + lambda: torch.rand((x_dim, y_dim, y_dim)), + constraint=constraints.simplex, + ) + + x_prev = y_prev = None + markov_loop = ( + pyro.vectorized_markov(name="time", size=len(data), dim=-2, history=history) + if vectorized + else pyro.markov(range(len(data)), history=history) + ) + for i in markov_loop: + x_curr = pyro.sample( + "x_{}".format(i), + dist.Categorical( + x_init if isinstance(i, int) and i < 1 else x_trans[x_prev] + ), + ) + with pyro.plate("tones", data.shape[-1], dim=-1): + y_curr = pyro.sample( + "y_{}".format(i), + dist.Categorical( + y_init[x_curr] + if isinstance(i, int) and i < 1 + else Vindex(y_trans)[x_curr, y_prev] + ), + obs=data[i], + ) + x_prev, y_prev = x_curr, y_curr + + +# w[t-1] ----> w[t] ---> w[t+1] +# \ x[t-1] --\-> x[t] --\-> x[t+1] +# \ / \ / \ / +# \/ \/ \/ +# y[t-1] y[t] y[t+1] +def model_3(data, history, vectorized): + w_dim, x_dim, y_dim = 2, 3, 2 + w_init = pyro.param( + "w_init", lambda: torch.rand(w_dim), constraint=constraints.simplex + ) + w_trans = pyro.param( + "w_trans", lambda: torch.rand((w_dim, w_dim)), constraint=constraints.simplex + ) + x_init = pyro.param( + "x_init", lambda: torch.rand(x_dim), constraint=constraints.simplex + ) + x_trans = pyro.param( + "x_trans", lambda: torch.rand((x_dim, x_dim)), constraint=constraints.simplex + ) + y_probs = pyro.param( + "y_probs", + lambda: torch.rand(w_dim, x_dim, y_dim), + constraint=constraints.simplex, + ) + + w_prev = x_prev = None + markov_loop = ( + pyro.vectorized_markov(name="time", size=len(data), dim=-2, history=history) + if vectorized + else pyro.markov(range(len(data)), history=history) + ) + for i in markov_loop: + w_curr = pyro.sample( + "w_{}".format(i), + dist.Categorical( + w_init if isinstance(i, int) and i < 1 else w_trans[w_prev] + ), + ) + x_curr = pyro.sample( + "x_{}".format(i), + dist.Categorical( + x_init if isinstance(i, int) and i < 1 else x_trans[x_prev] + ), + ) + with pyro.plate("tones", data.shape[-1], dim=-1): + pyro.sample( + "y_{}".format(i), + dist.Categorical(Vindex(y_probs)[w_curr, x_curr]), + obs=data[i], + ) + x_prev, w_prev = x_curr, w_curr + + +# w[t-1] ----> w[t] ---> w[t+1] +# | \ | \ | \ +# | x[t-1] ----> x[t] ----> x[t+1] +# | / | / | / +# V / V / V / +# y[t-1] y[t] y[t+1] +def model_4(data, history, vectorized): + w_dim, x_dim, y_dim = 2, 3, 2 + w_init = pyro.param( + "w_init", lambda: torch.rand(w_dim), constraint=constraints.simplex + ) + w_trans = pyro.param( + "w_trans", lambda: torch.rand((w_dim, w_dim)), constraint=constraints.simplex + ) + x_init = pyro.param( + "x_init", lambda: torch.rand(w_dim, x_dim), constraint=constraints.simplex + ) + x_trans = pyro.param( + "x_trans", + lambda: torch.rand((w_dim, x_dim, x_dim)), + constraint=constraints.simplex, + ) + y_probs = pyro.param( + "y_probs", + lambda: torch.rand(w_dim, x_dim, y_dim), + constraint=constraints.simplex, + ) + + w_prev = x_prev = None + markov_loop = ( + pyro.vectorized_markov(name="time", size=len(data), dim=-2, history=history) + if vectorized + else pyro.markov(range(len(data)), history=history) + ) + for i in markov_loop: + w_curr = pyro.sample( + "w_{}".format(i), + dist.Categorical( + w_init if isinstance(i, int) and i < 1 else w_trans[w_prev] + ), + ) + x_curr = pyro.sample( + "x_{}".format(i), + dist.Categorical( + x_init[w_curr] + if isinstance(i, int) and i < 1 + else x_trans[w_curr, x_prev] + ), + ) + with pyro.plate("tones", data.shape[-1], dim=-1): + pyro.sample( + "y_{}".format(i), + dist.Categorical(Vindex(y_probs)[w_curr, x_curr]), + obs=data[i], + ) + x_prev, w_prev = x_curr, w_curr + + +# _______>______ +# _____>_____/______ \ +# / / \ \ +# x[t-1] --> x[t] --> x[t+1] --> x[t+2] +# | | | | +# V V V V +# y[t-1] y[t] y[t+1] y[t+2] +def model_5(data, history, vectorized): + x_dim, y_dim = 3, 2 + x_init = pyro.param( + "x_init", lambda: torch.rand(x_dim), constraint=constraints.simplex + ) + x_init_2 = pyro.param( + "x_init_2", lambda: torch.rand(x_dim, x_dim), constraint=constraints.simplex + ) + x_trans = pyro.param( + "x_trans", + lambda: torch.rand((x_dim, x_dim, x_dim)), + constraint=constraints.simplex, + ) + y_probs = pyro.param( + "y_probs", lambda: torch.rand(x_dim, y_dim), constraint=constraints.simplex + ) + + x_prev = x_prev_2 = None + markov_loop = ( + pyro.vectorized_markov(name="time", size=len(data), dim=-2, history=history) + if vectorized + else pyro.markov(range(len(data)), history=history) + ) + for i in markov_loop: + if isinstance(i, int) and i == 0: + x_probs = x_init + elif isinstance(i, int) and i == 1: + x_probs = Vindex(x_init_2)[x_prev] + else: + x_probs = Vindex(x_trans)[x_prev_2, x_prev] + + x_curr = pyro.sample("x_{}".format(i), dist.Categorical(x_probs)) + with pyro.plate("tones", data.shape[-1], dim=-1): + pyro.sample( + "y_{}".format(i), dist.Categorical(Vindex(y_probs)[x_curr]), obs=data[i] + ) + x_prev_2, x_prev = x_prev, x_curr + + +# x_trans is time dependent +# +# x[t-1] --> x[t] --> x[t+1] +# | | | +# V V V +# y[t-1] y[t] y[t+1] +def model_6(data, history, vectorized): + x_dim = 3 + x_init = pyro.param( + "x_init", lambda: torch.rand(x_dim), constraint=constraints.simplex + ) + x_trans = pyro.param( + "x_trans", + lambda: torch.rand((len(data) - 1, x_dim, x_dim)), + constraint=constraints.simplex, + ) + locs = pyro.param("locs", lambda: torch.rand(x_dim)) + + x_prev = None + markov_loop = ( + pyro.vectorized_markov(name="time", size=len(data), dim=-2, history=history) + if vectorized + else pyro.markov(range(len(data)), history=history) + ) + for i in markov_loop: + if isinstance(i, int) and i < 1: + x_probs = x_init + elif isinstance(i, int): + x_probs = x_trans[i - 1, x_prev] + else: + x_probs = Vindex(x_trans)[(i - 1)[:, None], x_prev] + + x_curr = pyro.sample("x_{}".format(i), dist.Categorical(x_probs)) + with pyro.plate("tones", data.shape[-1], dim=-1): + pyro.sample( + "y_{}".format(i), + dist.Normal(Vindex(locs)[..., x_curr], 1.0), + obs=data[i], + ) + x_prev = x_curr + + +# w[t-1] w[t] w[t+1] +# | \ ^ | \ ^ | +# | \ / | \ / | +# v \/ v \/ v +# y[t-1] /\ y[t] /\ y[t+1] +# ^ / \ ^ / \ ^ +# | / v | / v | +# x[t-1] x[t] x[t+1] +def model_7(data, history, vectorized): + w_dim, x_dim, y_dim = 2, 3, 2 + w_init = pyro.param( + "w_init", lambda: torch.rand(w_dim), constraint=constraints.simplex + ) + w_trans = pyro.param( + "w_trans", lambda: torch.rand((x_dim, w_dim)), constraint=constraints.simplex + ) + x_init = pyro.param( + "x_init", lambda: torch.rand(x_dim), constraint=constraints.simplex + ) + x_trans = pyro.param( + "x_trans", lambda: torch.rand((w_dim, x_dim)), constraint=constraints.simplex + ) + y_probs = pyro.param( + "y_probs", + lambda: torch.rand(w_dim, x_dim, y_dim), + constraint=constraints.simplex, + ) + + w_prev = x_prev = None + markov_loop = ( + pyro.vectorized_markov(name="time", size=len(data), dim=-2, history=history) + if vectorized + else pyro.markov(range(len(data)), history=history) + ) + for i in markov_loop: + w_curr = pyro.sample( + "w_{}".format(i), + dist.Categorical( + w_init if isinstance(i, int) and i < 1 else w_trans[x_prev] + ), + ) + x_curr = pyro.sample( + "x_{}".format(i), + dist.Categorical( + x_init if isinstance(i, int) and i < 1 else x_trans[w_prev] + ), + ) + with pyro.plate("tones", data.shape[-1], dim=-1): + pyro.sample( + "y_{}".format(i), + dist.Categorical(Vindex(y_probs)[w_curr, x_curr]), + obs=data[i], + ) + x_prev, w_prev = x_curr, w_curr + + +def _guide_from_model(model): + try: + with pyro_backend("contrib.funsor"): + return handlers.block( + infer.config_enumerate(model, default="parallel"), + lambda msg: msg.get("is_observed", False), + ) + except KeyError: # for test collection without funsor + return model + + +@pytest.mark.parametrize("use_replay", [True, False]) +@pytest.mark.parametrize( + "model,data,var,history", + [ + (model_0, torch.rand(3, 5, 4), "xy", 1), + (model_1, torch.rand(5, 4), "xy", 1), + (model_2, torch.ones((5, 4), dtype=torch.long), "xy", 1), + (model_3, torch.ones((5, 4), dtype=torch.long), "wxy", 1), + (model_4, torch.ones((5, 4), dtype=torch.long), "wxy", 1), + (model_5, torch.ones((5, 4), dtype=torch.long), "xy", 2), + (model_6, torch.rand(5, 4), "xy", 1), + (model_6, torch.rand(100, 4), "xy", 1), + (model_7, torch.ones((5, 4), dtype=torch.long), "wxy", 1), + (model_7, torch.ones((50, 4), dtype=torch.long), "wxy", 1), + ], +) +def test_enumeration(model, data, var, history, use_replay): + pyro.clear_param_store() + + with pyro_backend("contrib.funsor"): + with handlers.enum(): + enum_model = infer.config_enumerate(model, default="parallel") + # sequential trace + trace = handlers.trace(enum_model).get_trace(data, history, False) + # vectorized trace + if use_replay: + guide_trace = handlers.trace(_guide_from_model(model)).get_trace( + data, history, True + ) + vectorized_trace = handlers.trace( + handlers.replay(model, trace=guide_trace) + ).get_trace(data, history, True) + else: + vectorized_trace = handlers.trace(enum_model).get_trace( + data, history, True + ) + + # sequential factors + factors = list() + for i in range(data.shape[-2]): + for v in var: + factors.append(trace.nodes["{}_{}".format(v, i)]["funsor"]["log_prob"]) + + # vectorized factors + vectorized_factors = list() + for i in range(history): + for v in var: + vectorized_factors.append( + vectorized_trace.nodes["{}_{}".format(v, i)]["funsor"]["log_prob"] + ) + for i in range(history, data.shape[-2]): + for v in var: + vectorized_factors.append( + vectorized_trace.nodes[ + "{}_{}".format(v, slice(history, data.shape[-2])) + ]["funsor"]["log_prob"]( + **{"time": i - history}, + **{ + "{}_{}".format( + k, slice(history - j, data.shape[-2] - j) + ): "{}_{}".format(k, i - j) + for j in range(history + 1) + for k in var + } + ) + ) + + # assert correct factors + for f1, f2 in zip(factors, vectorized_factors): + assert_close(f2, f1.align(tuple(f2.inputs))) + + # assert correct step + actual_step = vectorized_trace.nodes["time"]["value"] + # expected step: assume that all but the last var is markov + expected_step = frozenset() + expected_measure_vars = frozenset() + for v in var[:-1]: + v_step = tuple("{}_{}".format(v, i) for i in range(history)) + tuple( + "{}_{}".format(v, slice(j, data.shape[-2] - history + j)) + for j in range(history + 1) + ) + expected_step |= frozenset({v_step}) + # grab measure_vars, found only at sites that are not replayed + if not use_replay: + expected_measure_vars |= frozenset(v_step) + assert actual_step == expected_step + + # check measure_vars + actual_measure_vars = terms_from_trace(vectorized_trace)["measure_vars"] + assert actual_measure_vars == expected_measure_vars + + +# x[i-1] --> x[i] --> x[i+1] +# | | | +# V V V +# y[i-1] y[i] y[i+1] +# +# w[j-1] --> w[j] --> w[j+1] +# | | | +# V V V +# z[j-1] z[j] z[j+1] +def model_8(weeks_data, days_data, history, vectorized): + x_dim, y_dim, w_dim, z_dim = 3, 2, 2, 3 + x_init = pyro.param( + "x_init", lambda: torch.rand(x_dim), constraint=constraints.simplex + ) + x_trans = pyro.param( + "x_trans", lambda: torch.rand((x_dim, x_dim)), constraint=constraints.simplex + ) + y_probs = pyro.param( + "y_probs", lambda: torch.rand(x_dim, y_dim), constraint=constraints.simplex + ) + w_init = pyro.param( + "w_init", lambda: torch.rand(w_dim), constraint=constraints.simplex + ) + w_trans = pyro.param( + "w_trans", lambda: torch.rand((w_dim, w_dim)), constraint=constraints.simplex + ) + z_probs = pyro.param( + "z_probs", lambda: torch.rand(w_dim, z_dim), constraint=constraints.simplex + ) + + x_prev = None + weeks_loop = ( + pyro.vectorized_markov( + name="weeks", size=len(weeks_data), dim=-1, history=history + ) + if vectorized + else pyro.markov(range(len(weeks_data)), history=history) + ) + for i in weeks_loop: + if isinstance(i, int) and i == 0: + x_probs = x_init + else: + x_probs = Vindex(x_trans)[x_prev] + + x_curr = pyro.sample("x_{}".format(i), dist.Categorical(x_probs)) + pyro.sample( + "y_{}".format(i), + dist.Categorical(Vindex(y_probs)[x_curr]), + obs=weeks_data[i], + ) + x_prev = x_curr + + w_prev = None + days_loop = ( + pyro.vectorized_markov( + name="days", size=len(days_data), dim=-1, history=history + ) + if vectorized + else pyro.markov(range(len(days_data)), history=history) + ) + for j in days_loop: + if isinstance(j, int) and j == 0: + w_probs = w_init + else: + w_probs = Vindex(w_trans)[w_prev] + + w_curr = pyro.sample("w_{}".format(j), dist.Categorical(w_probs)) + pyro.sample( + "z_{}".format(j), + dist.Categorical(Vindex(z_probs)[w_curr]), + obs=days_data[j], + ) + w_prev = w_curr + + +@pytest.mark.parametrize("use_replay", [True, False]) +@pytest.mark.parametrize( + "model,weeks_data,days_data,vars1,vars2,history", + [ + (model_8, torch.ones(3), torch.zeros(9), "xy", "wz", 1), + (model_8, torch.ones(30), torch.zeros(50), "xy", "wz", 1), + ], +) +def test_enumeration_multi( + model, weeks_data, days_data, vars1, vars2, history, use_replay +): + pyro.clear_param_store() + + with pyro_backend("contrib.funsor"): + with handlers.enum(): + enum_model = infer.config_enumerate(model, default="parallel") + # sequential factors + trace = handlers.trace(enum_model).get_trace( + weeks_data, days_data, history, False + ) + + # vectorized trace + if use_replay: + guide_trace = handlers.trace(_guide_from_model(model)).get_trace( + weeks_data, days_data, history, True + ) + vectorized_trace = handlers.trace( + handlers.replay(model, trace=guide_trace) + ).get_trace(weeks_data, days_data, history, True) + else: + vectorized_trace = handlers.trace(enum_model).get_trace( + weeks_data, days_data, history, True + ) + + factors = list() + # sequential weeks factors + for i in range(len(weeks_data)): + for v in vars1: + factors.append(trace.nodes["{}_{}".format(v, i)]["funsor"]["log_prob"]) + # sequential days factors + for j in range(len(days_data)): + for v in vars2: + factors.append(trace.nodes["{}_{}".format(v, j)]["funsor"]["log_prob"]) + + vectorized_factors = list() + # vectorized weeks factors + for i in range(history): + for v in vars1: + vectorized_factors.append( + vectorized_trace.nodes["{}_{}".format(v, i)]["funsor"]["log_prob"] + ) + for i in range(history, len(weeks_data)): + for v in vars1: + vectorized_factors.append( + vectorized_trace.nodes[ + "{}_{}".format(v, slice(history, len(weeks_data))) + ]["funsor"]["log_prob"]( + **{"weeks": i - history}, + **{ + "{}_{}".format( + k, slice(history - j, len(weeks_data) - j) + ): "{}_{}".format(k, i - j) + for j in range(history + 1) + for k in vars1 + } + ) + ) + # vectorized days factors + for i in range(history): + for v in vars2: + vectorized_factors.append( + vectorized_trace.nodes["{}_{}".format(v, i)]["funsor"]["log_prob"] + ) + for i in range(history, len(days_data)): + for v in vars2: + vectorized_factors.append( + vectorized_trace.nodes[ + "{}_{}".format(v, slice(history, len(days_data))) + ]["funsor"]["log_prob"]( + **{"days": i - history}, + **{ + "{}_{}".format( + k, slice(history - j, len(days_data) - j) + ): "{}_{}".format(k, i - j) + for j in range(history + 1) + for k in vars2 + } + ) + ) + + # assert correct factors + for f1, f2 in zip(factors, vectorized_factors): + assert_close(f2, f1.align(tuple(f2.inputs))) + + # assert correct step + + expected_measure_vars = frozenset() + actual_weeks_step = vectorized_trace.nodes["weeks"]["value"] + # expected step: assume that all but the last var is markov + expected_weeks_step = frozenset() + for v in vars1[:-1]: + v_step = tuple("{}_{}".format(v, i) for i in range(history)) + tuple( + "{}_{}".format(v, slice(j, len(weeks_data) - history + j)) + for j in range(history + 1) + ) + expected_weeks_step |= frozenset({v_step}) + # grab measure_vars, found only at sites that are not replayed + if not use_replay: + expected_measure_vars |= frozenset(v_step) + + actual_days_step = vectorized_trace.nodes["days"]["value"] + # expected step: assume that all but the last var is markov + expected_days_step = frozenset() + for v in vars2[:-1]: + v_step = tuple("{}_{}".format(v, i) for i in range(history)) + tuple( + "{}_{}".format(v, slice(j, len(days_data) - history + j)) + for j in range(history + 1) + ) + expected_days_step |= frozenset({v_step}) + # grab measure_vars, found only at sites that are not replayed + if not use_replay: + expected_measure_vars |= frozenset(v_step) + + assert actual_weeks_step == expected_weeks_step + assert actual_days_step == expected_days_step + + # check measure_vars + actual_measure_vars = terms_from_trace(vectorized_trace)["measure_vars"] + assert actual_measure_vars == expected_measure_vars + + +def guide_empty(data, history, vectorized): + pass + + +@pytest.mark.xfail(reason="funsor version drift") +@pytest.mark.parametrize( + "model,guide,data,history", + [ + (model_0, guide_empty, torch.rand(3, 5, 4), 1), + (model_1, guide_empty, torch.rand(5, 4), 1), + (model_2, guide_empty, torch.ones((5, 4), dtype=torch.long), 1), + (model_3, guide_empty, torch.ones((5, 4), dtype=torch.long), 1), + (model_4, guide_empty, torch.ones((5, 4), dtype=torch.long), 1), + (model_5, guide_empty, torch.ones((5, 4), dtype=torch.long), 2), + (model_6, guide_empty, torch.rand(5, 4), 1), + (model_6, guide_empty, torch.rand(100, 4), 1), + (model_7, guide_empty, torch.ones((5, 4), dtype=torch.long), 1), + (model_7, guide_empty, torch.ones((50, 4), dtype=torch.long), 1), + ], +) +def test_model_enumerated_elbo(model, guide, data, history): + pyro.clear_param_store() + + with pyro_backend("contrib.funsor"): + model = infer.config_enumerate(model, default="parallel") + elbo = infer.TraceEnum_ELBO(max_plate_nesting=4) + expected_loss = elbo.loss_and_grads(model, guide, data, history, False) + expected_grads = ( + value.grad for name, value in pyro.get_param_store().named_parameters() + ) + + vectorized_elbo = infer.TraceMarkovEnum_ELBO(max_plate_nesting=4) + actual_loss = vectorized_elbo.loss_and_grads(model, guide, data, history, True) + actual_grads = ( + value.grad for name, value in pyro.get_param_store().named_parameters() + ) + + assert_close(actual_loss, expected_loss) + for actual_grad, expected_grad in zip(actual_grads, expected_grads): + assert_close(actual_grad, expected_grad) + + +def guide_empty_multi(weeks_data, days_data, history, vectorized): + pass + + +@pytest.mark.xfail(reason="funsor version drift") +@pytest.mark.parametrize( + "model,guide,weeks_data,days_data,history", + [ + (model_8, guide_empty_multi, torch.ones(3), torch.zeros(9), 1), + (model_8, guide_empty_multi, torch.ones(30), torch.zeros(50), 1), + ], +) +def test_model_enumerated_elbo_multi(model, guide, weeks_data, days_data, history): + pyro.clear_param_store() + + with pyro_backend("contrib.funsor"): + model = infer.config_enumerate(model, default="parallel") + elbo = infer.TraceEnum_ELBO(max_plate_nesting=4) + expected_loss = elbo.loss_and_grads( + model, guide, weeks_data, days_data, history, False + ) + expected_grads = ( + value.grad for name, value in pyro.get_param_store().named_parameters() + ) + + vectorized_elbo = infer.TraceMarkovEnum_ELBO(max_plate_nesting=4) + actual_loss = vectorized_elbo.loss_and_grads( + model, guide, weeks_data, days_data, history, True + ) + actual_grads = ( + value.grad for name, value in pyro.get_param_store().named_parameters() + ) + + assert_close(actual_loss, expected_loss) + for actual_grad, expected_grad in zip(actual_grads, expected_grads): + assert_close(actual_grad, expected_grad) + + +def model_10(data, history, vectorized): + init_probs = torch.tensor([0.5, 0.5]) + transition_probs = pyro.param( + "transition_probs", + torch.tensor([[0.75, 0.25], [0.25, 0.75]]), + constraint=constraints.simplex, + ) + emission_probs = pyro.param( + "emission_probs", + torch.tensor([[0.75, 0.25], [0.25, 0.75]]), + constraint=constraints.simplex, + ) + x = None + markov_loop = ( + pyro.vectorized_markov(name="time", size=len(data), history=history) + if vectorized + else pyro.markov(range(len(data)), history=history) + ) + for i in markov_loop: + probs = init_probs if x is None else transition_probs[x] + x = pyro.sample("x_{}".format(i), dist.Categorical(probs)) + pyro.sample("y_{}".format(i), dist.Categorical(emission_probs[x]), obs=data[i]) + + +@pytest.mark.parametrize( + "model,guide,data,history", + [ + (model_0, _guide_from_model(model_0), torch.rand(3, 5, 4), 1), + (model_1, _guide_from_model(model_1), torch.rand(5, 4), 1), + (model_2, _guide_from_model(model_2), torch.ones((5, 4), dtype=torch.long), 1), + (model_3, _guide_from_model(model_3), torch.ones((5, 4), dtype=torch.long), 1), + (model_4, _guide_from_model(model_4), torch.ones((5, 4), dtype=torch.long), 1), + (model_5, _guide_from_model(model_5), torch.ones((5, 4), dtype=torch.long), 2), + (model_6, _guide_from_model(model_6), torch.rand(5, 4), 1), + (model_7, _guide_from_model(model_7), torch.ones((5, 4), dtype=torch.long), 1), + (model_10, _guide_from_model(model_10), torch.ones(5), 1), + ], +) +def test_guide_enumerated_elbo(model, guide, data, history): + pyro.clear_param_store() + + with pyro_backend("contrib.funsor"), pytest.raises( + NotImplementedError, + match="TraceMarkovEnum_ELBO does not yet support guide side Markov enumeration", + ): + if history > 1: + pytest.xfail(reason="TraceMarkovEnum_ELBO does not yet support history > 1") + + elbo = infer.TraceEnum_ELBO(max_plate_nesting=4) + expected_loss = elbo.loss_and_grads(model, guide, data, history, False) + expected_grads = ( + value.grad for name, value in pyro.get_param_store().named_parameters() + ) + + vectorized_elbo = infer.TraceMarkovEnum_ELBO(max_plate_nesting=4) + actual_loss = vectorized_elbo.loss_and_grads(model, guide, data, history, True) + actual_grads = ( + value.grad for name, value in pyro.get_param_store().named_parameters() + ) + + assert_close(actual_loss, expected_loss) + for actual_grad, expected_grad in zip(actual_grads, expected_grads): + assert_close(actual_grad, expected_grad) diff --git a/pyro/source/tests/contrib/gp/__init__.py b/pyro/source/tests/contrib/gp/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/tests/contrib/gp/test_conditional.py b/pyro/source/tests/contrib/gp/test_conditional.py new file mode 100644 index 0000000000000000000000000000000000000000..a12721c8c2882c5b06c8802663c9bdd16a096afc --- /dev/null +++ b/pyro/source/tests/contrib/gp/test_conditional.py @@ -0,0 +1,87 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from collections import namedtuple + +import pytest +import torch + +import pyro +from pyro.contrib.gp.kernels import Matern52, WhiteNoise +from pyro.contrib.gp.util import conditional +from tests.common import assert_equal + +T = namedtuple( + "TestConditional", ["Xnew", "X", "kernel", "f_loc", "f_scale_tril", "loc", "cov"] +) + +Xnew = torch.tensor([[2.0, 3.0], [4.0, 6.0]]) +X = torch.tensor([[1.0, 5.0], [2.0, 1.0], [3.0, 2.0]]) +kernel = Matern52(input_dim=2) +Kff = kernel(X) + torch.eye(3) * 1e-6 +Lff = torch.linalg.cholesky(Kff) +pyro.set_rng_seed(123) +f_loc = torch.rand(3) +f_scale_tril = torch.rand(3, 3).tril(-1) + torch.rand(3).exp().diag() +f_cov = f_scale_tril.matmul(f_scale_tril.t()) + +TEST_CASES = [ + T(Xnew, X, kernel, torch.zeros(3), Lff, torch.zeros(2), None), + T(Xnew, X, kernel, torch.zeros(3), None, torch.zeros(2), None), + T(Xnew, X, kernel, f_loc, Lff, None, kernel(Xnew)), + T(X, X, kernel, f_loc, f_scale_tril, f_loc, f_cov), + T(X, X, kernel, f_loc, None, f_loc, torch.zeros(3, 3)), + T( + Xnew, + X, + WhiteNoise(input_dim=2), + f_loc, + f_scale_tril, + torch.zeros(2), + torch.eye(2), + ), + T(Xnew, X, WhiteNoise(input_dim=2), f_loc, None, torch.zeros(2), torch.eye(2)), +] + +TEST_IDS = [str(i) for i in range(len(TEST_CASES))] + + +@pytest.mark.parametrize( + "Xnew, X, kernel, f_loc, f_scale_tril, loc, cov", TEST_CASES, ids=TEST_IDS +) +def test_conditional(Xnew, X, kernel, f_loc, f_scale_tril, loc, cov): + loc0, cov0 = conditional(Xnew, X, kernel, f_loc, f_scale_tril, full_cov=True) + loc1, var1 = conditional(Xnew, X, kernel, f_loc, f_scale_tril, full_cov=False) + + if loc is not None: + assert_equal(loc0, loc) + assert_equal(loc1, loc) + n = cov0.shape[-1] + var0 = torch.stack([mat.diag() for mat in cov0.view(-1, n, n)]).reshape( + cov0.shape[:-1] + ) + assert_equal(var0, var1) + if cov is not None: + assert_equal(cov0, cov) + + +@pytest.mark.parametrize( + "Xnew, X, kernel, f_loc, f_scale_tril, loc, cov", TEST_CASES, ids=TEST_IDS +) +def test_conditional_whiten(Xnew, X, kernel, f_loc, f_scale_tril, loc, cov): + if f_scale_tril is None: + return + + loc0, cov0 = conditional( + Xnew, X, kernel, f_loc, f_scale_tril, full_cov=True, whiten=False + ) + Kff = kernel(X) + torch.eye(3) * 1e-6 + Lff = torch.linalg.cholesky(Kff) + whiten_f_loc = Lff.inverse().matmul(f_loc) + whiten_f_scale_tril = Lff.inverse().matmul(f_scale_tril) + loc1, cov1 = conditional( + Xnew, X, kernel, whiten_f_loc, whiten_f_scale_tril, full_cov=True, whiten=True + ) + + assert_equal(loc0, loc1) + assert_equal(cov0, cov1) diff --git a/pyro/source/tests/contrib/gp/test_kernels.py b/pyro/source/tests/contrib/gp/test_kernels.py new file mode 100644 index 0000000000000000000000000000000000000000..c2e606a65dadbebdb08cf522115a30b4713d09fd --- /dev/null +++ b/pyro/source/tests/contrib/gp/test_kernels.py @@ -0,0 +1,152 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from collections import namedtuple + +import pytest +import torch + +from pyro.contrib.gp.kernels import ( + RBF, + Brownian, + Constant, + Coregionalize, + Cosine, + Exponent, + Exponential, + Linear, + Matern32, + Matern52, + Periodic, + Polynomial, + Product, + RationalQuadratic, + Sum, + VerticalScaling, + Warping, + WhiteNoise, +) +from tests.common import assert_equal + +T = namedtuple("TestGPKernel", ["kernel", "X", "Z", "K_sum"]) + +variance = torch.tensor([3.0]) +lengthscale = torch.tensor([2.0, 1.0, 2.0]) +X = torch.tensor([[1.0, 0.0, 1.0], [2.0, 1.0, 3.0]]) +Z = torch.tensor([[4.0, 5.0, 6.0], [3.0, 1.0, 7.0], [3.0, 1.0, 2.0]]) + +TEST_CASES = [ + T(Constant(3, variance), X=X, Z=Z, K_sum=18), + T( + Brownian(1, variance), + # only work on 1D input + X=X[:, 0], + Z=Z[:, 0], + K_sum=27, + ), + T(Cosine(3, variance, lengthscale), X=X, Z=Z, K_sum=-0.193233), + T(Linear(3, variance), X=X, Z=Z, K_sum=291), + T(Exponential(3, variance, lengthscale), X=X, Z=Z, K_sum=2.685679), + T(Matern32(3, variance, lengthscale), X=X, Z=Z, K_sum=3.229314), + T(Matern52(3, variance, lengthscale), X=X, Z=Z, K_sum=3.391847), + T(Periodic(3, variance, lengthscale, period=torch.ones(1)), X=X, Z=Z, K_sum=18), + T(Polynomial(3, variance, degree=2), X=X, Z=Z, K_sum=7017), + T( + RationalQuadratic(3, variance, lengthscale, scale_mixture=torch.ones(1)), + X=X, + Z=Z, + K_sum=5.684670, + ), + T(RBF(3, variance, lengthscale), X=X, Z=Z, K_sum=3.681117), + T(WhiteNoise(3, variance, lengthscale), X=X, Z=Z, K_sum=0), + T(WhiteNoise(3, variance, lengthscale), X=X, Z=None, K_sum=6), + T( + Coregionalize(3, components=torch.eye(3, 3)), + X=torch.tensor([[1.0, 0.0, 0.0], [0.5, 0.0, 0.5]]), + Z=torch.tensor([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]), + K_sum=2.25, + ), + T( + Coregionalize(3, rank=2), + X=torch.tensor([[1.0, 0.0, 0.0], [0.5, 0.0, 0.5]]), + Z=torch.tensor([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]), + K_sum=None, # kernel is randomly initialized + ), + T( + Coregionalize(3), + X=torch.tensor([[1.0, 0.0, 0.0], [0.5, 0.0, 0.5]]), + Z=torch.tensor([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]), + K_sum=None, # kernel is randomly initialized + ), + T( + Coregionalize(3, rank=2, diagonal=0.01 * torch.ones(3)), + X=torch.tensor([[1.0, 0.0, 0.0], [0.5, 0.0, 0.5]]), + Z=torch.tensor([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]), + K_sum=None, # kernel is randomly initialized + ), +] + +TEST_IDS = [t[0].__class__.__name__ for t in TEST_CASES] + + +@pytest.mark.parametrize("kernel, X, Z, K_sum", TEST_CASES, ids=TEST_IDS) +def test_kernel_forward(kernel, X, Z, K_sum): + K = kernel(X, Z) + assert K.shape == (X.shape[0], (X if Z is None else Z).shape[0]) + if K_sum is not None: + assert_equal(K.sum().item(), K_sum) + assert_equal(kernel(X).diag(), kernel(X, diag=True)) + if not isinstance( + kernel, WhiteNoise + ): # WhiteNoise avoids computing a delta function by assuming X != Z + assert_equal(kernel(X), kernel(X, X)) + if Z is not None: + assert_equal(kernel(X, Z), kernel(Z, X).t()) + + +def test_combination(): + k0 = TEST_CASES[0][0] + k5 = TEST_CASES[5][0] # TEST_CASES[1] is Brownian, only work for 1D + k2 = TEST_CASES[2][0] + k3 = TEST_CASES[3][0] + k4 = TEST_CASES[4][0] + + k = Sum(Product(Product(Sum(Sum(k0, k5), k2), 2), k3), Sum(k4, 1)) + + K = 2 * (k0(X, Z) + k5(X, Z) + k2(X, Z)) * k3(X, Z) + (k4(X, Z) + 1) + + assert_equal(K.data, k(X, Z).data) + + +def test_active_dims_overlap_ok(): + k1 = Matern52(2, variance, lengthscale[0], active_dims=[0, 1]) + k2 = Matern32(2, variance, lengthscale[0], active_dims=[1, 2]) + Sum(k1, k2) + + +def test_active_dims_disjoint_ok(): + k1 = Matern52(2, variance, lengthscale[0], active_dims=[0, 1]) + k2 = Matern32(1, variance, lengthscale[0], active_dims=[2]) + Sum(k1, k2) + + +def test_transforming(): + k = TEST_CASES[6][0] + + def vscaling_fn(x): + return x.sum(dim=1) + + def iwarping_fn(x): + return x**2 + + owarping_coef = [2, 0, 1, 3, 0] + + K = k(X, Z) + K_iwarp = k(iwarping_fn(X), iwarping_fn(Z)) + K_owarp = 2 + K**2 + 3 * K**3 + K_vscale = vscaling_fn(X).unsqueeze(1) * K * vscaling_fn(Z).unsqueeze(0) + + assert_equal(K_iwarp.data, Warping(k, iwarping_fn=iwarping_fn)(X, Z).data) + assert_equal(K_owarp.data, Warping(k, owarping_coef=owarping_coef)(X, Z).data) + assert_equal(K_vscale.data, VerticalScaling(k, vscaling_fn=vscaling_fn)(X, Z).data) + assert_equal(K.exp().data, Exponent(k)(X, Z).data) diff --git a/pyro/source/tests/contrib/gp/test_likelihoods.py b/pyro/source/tests/contrib/gp/test_likelihoods.py new file mode 100644 index 0000000000000000000000000000000000000000..b193bdadbb31c3e532ed65b2c15092f6170af7f1 --- /dev/null +++ b/pyro/source/tests/contrib/gp/test_likelihoods.py @@ -0,0 +1,123 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from collections import namedtuple + +import pytest +import torch + +from pyro.contrib.gp.kernels import RBF +from pyro.contrib.gp.likelihoods import Binary, MultiClass, Poisson +from pyro.contrib.gp.models import VariationalGP, VariationalSparseGP +from pyro.contrib.gp.util import train + +T = namedtuple("TestGPLikelihood", ["model_class", "X", "y", "kernel", "likelihood"]) + +X = torch.tensor([[1.0, 5.0, 3.0], [4.0, 3.0, 7.0], [3.0, 4.0, 6.0]]) +kernel = RBF(input_dim=3, variance=torch.tensor(1.0), lengthscale=torch.tensor(3.0)) +noise = torch.tensor(1e-6) +y_binary1D = torch.tensor([0.0, 1.0, 0.0]) +y_binary2D = torch.tensor([[0.0, 1.0, 1.0], [1.0, 0.0, 1.0]]) +binary_likelihood = Binary() +y_count1D = torch.tensor([0.0, 1.0, 4.0]) +y_count2D = torch.tensor([[5.0, 9.0, 3.0], [4.0, 0.0, 1.0]]) +poisson_likelihood = Poisson() +y_multiclass1D = torch.tensor([2.0, 0.0, 1.0]) +y_multiclass2D = torch.tensor([[2.0, 1.0, 1.0], [0.0, 2.0, 1.0]]) +multiclass_likelihood = MultiClass(num_classes=3) + +TEST_CASES = [ + T(VariationalGP, X, y_binary1D, kernel, binary_likelihood), + T(VariationalGP, X, y_binary2D, kernel, binary_likelihood), + T(VariationalGP, X, y_multiclass1D, kernel, multiclass_likelihood), + T(VariationalGP, X, y_multiclass2D, kernel, multiclass_likelihood), + T(VariationalGP, X, y_count1D, kernel, poisson_likelihood), + T(VariationalGP, X, y_count2D, kernel, poisson_likelihood), + T(VariationalSparseGP, X, y_binary1D, kernel, binary_likelihood), + T(VariationalSparseGP, X, y_binary2D, kernel, binary_likelihood), + T(VariationalSparseGP, X, y_multiclass1D, kernel, multiclass_likelihood), + T(VariationalSparseGP, X, y_multiclass2D, kernel, multiclass_likelihood), + T(VariationalSparseGP, X, y_count1D, kernel, poisson_likelihood), + T(VariationalSparseGP, X, y_count2D, kernel, poisson_likelihood), +] + +TEST_IDS = [ + "_".join( + [t[0].__name__, t[4].__class__.__name__.split(".")[-1], str(t[2].dim()) + "D"] + ) + for t in TEST_CASES +] + + +@pytest.mark.parametrize( + "model_class, X, y, kernel, likelihood", TEST_CASES, ids=TEST_IDS +) +def test_inference(model_class, X, y, kernel, likelihood): + if isinstance(likelihood, MultiClass): + latent_shape = y.shape[:-1] + (likelihood.num_classes,) + else: + latent_shape = y.shape[:-1] + if model_class is VariationalSparseGP: + gp = model_class(X, y, kernel, X, likelihood, latent_shape=latent_shape) + else: + gp = model_class(X, y, kernel, likelihood, latent_shape=latent_shape) + + train(gp, num_steps=1) + + +@pytest.mark.parametrize( + "model_class, X, y, kernel, likelihood", TEST_CASES, ids=TEST_IDS +) +def test_inference_with_empty_latent_shape(model_class, X, y, kernel, likelihood): + if isinstance(likelihood, MultiClass): + latent_shape = torch.Size([likelihood.num_classes]) + else: + latent_shape = torch.Size([]) + if model_class is VariationalSparseGP: + gp = model_class(X, y, kernel, X, likelihood, latent_shape=latent_shape) + else: + gp = model_class(X, y, kernel, likelihood, latent_shape=latent_shape) + + train(gp, num_steps=1) + + +@pytest.mark.parametrize( + "model_class, X, y, kernel, likelihood", TEST_CASES, ids=TEST_IDS +) +def test_forward(model_class, X, y, kernel, likelihood): + if isinstance(likelihood, MultiClass): + latent_shape = y.shape[:-1] + (likelihood.num_classes,) + else: + latent_shape = y.shape[:-1] + if model_class is VariationalSparseGP: + gp = model_class(X, y, kernel, X, likelihood, latent_shape=latent_shape) + else: + gp = model_class(X, y, kernel, likelihood, latent_shape=latent_shape) + + Xnew_shape = (X.shape[0] * 2,) + X.shape[1:] + Xnew = torch.rand(Xnew_shape, dtype=X.dtype, device=X.device) + f_loc, f_var = gp(Xnew) + ynew = gp.likelihood(f_loc, f_var) + + assert ynew.shape == y.shape[:-1] + (Xnew.shape[0],) + + +@pytest.mark.parametrize( + "model_class, X, y, kernel, likelihood", TEST_CASES, ids=TEST_IDS +) +def test_forward_with_empty_latent_shape(model_class, X, y, kernel, likelihood): + if isinstance(likelihood, MultiClass): + latent_shape = torch.Size([likelihood.num_classes]) + else: + latent_shape = torch.Size([]) + if model_class is VariationalSparseGP: + gp = model_class(X, y, kernel, X, likelihood, latent_shape=latent_shape) + else: + gp = model_class(X, y, kernel, likelihood, latent_shape=latent_shape) + + Xnew_shape = (X.shape[0] * 2,) + X.shape[1:] + Xnew = torch.rand(Xnew_shape, dtype=X.dtype, device=X.device) + f_loc, f_var = gp(Xnew) + ynew = gp.likelihood(f_loc, f_var) + + assert ynew.shape == (Xnew.shape[0],) diff --git a/pyro/source/tests/contrib/gp/test_models.py b/pyro/source/tests/contrib/gp/test_models.py new file mode 100644 index 0000000000000000000000000000000000000000..e4c8231c2b33a92c9f06ff0624bb71eec26ae991 --- /dev/null +++ b/pyro/source/tests/contrib/gp/test_models.py @@ -0,0 +1,455 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging +from collections import namedtuple + +import pytest +import torch + +import pyro.distributions as dist +from pyro.contrib.gp.kernels import RBF, Cosine, Matern32, WhiteNoise +from pyro.contrib.gp.likelihoods import Gaussian +from pyro.contrib.gp.models import ( + GPLVM, + GPRegression, + SparseGPRegression, + VariationalGP, + VariationalSparseGP, +) +from pyro.contrib.gp.util import train +from pyro.infer.mcmc.api import MCMC +from pyro.infer.mcmc.hmc import HMC +from pyro.nn.module import PyroSample +from tests.common import assert_equal + +logger = logging.getLogger(__name__) + +T = namedtuple("TestGPModel", ["model_class", "X", "y", "kernel", "likelihood"]) + +X = torch.tensor([[1.0, 5.0, 3.0], [4.0, 3.0, 7.0]]) +y1D = torch.tensor([2.0, 1.0]) +y2D = torch.tensor([[1.0, 2.0], [3.0, 3.0], [1.0, 4.0], [-1.0, 1.0]]) +noise = torch.tensor(1e-7) + + +def _kernel(): + return RBF(input_dim=3, variance=torch.tensor(3.0), lengthscale=torch.tensor(2.0)) + + +def _likelihood(): + return Gaussian(torch.tensor(1e-7)) + + +def _TEST_CASES(): + TEST_CASES = [ + T(GPRegression, X, y1D, _kernel(), noise), + T(GPRegression, X, y2D, _kernel(), noise), + T(SparseGPRegression, X, y1D, _kernel(), noise), + T(SparseGPRegression, X, y2D, _kernel(), noise), + T(VariationalGP, X, y1D, _kernel(), _likelihood()), + T(VariationalGP, X, y2D, _kernel(), _likelihood()), + T(VariationalSparseGP, X, y1D, _kernel(), _likelihood()), + T(VariationalSparseGP, X, y2D, _kernel(), _likelihood()), + ] + + return TEST_CASES + + +TEST_IDS = [t[0].__name__ + "_y{}D".format(str(t[2].dim())) for t in _TEST_CASES()] + + +@pytest.mark.parametrize( + "model_class, X, y, kernel, likelihood", _TEST_CASES(), ids=TEST_IDS +) +def test_model(model_class, X, y, kernel, likelihood): + if model_class is SparseGPRegression or model_class is VariationalSparseGP: + gp = model_class(X, None, kernel, X, likelihood) + else: + gp = model_class(X, None, kernel, likelihood) + + loc, var = gp.model() + if model_class is VariationalGP or model_class is VariationalSparseGP: + assert_equal(loc.norm().item(), 0) + assert_equal(var, torch.ones(var.shape[-1]).expand(var.shape)) + else: + assert_equal(loc.norm().item(), 0) + assert_equal(var, kernel(X).diag()) + + +@pytest.mark.parametrize( + "model_class, X, y, kernel, likelihood", _TEST_CASES(), ids=TEST_IDS +) +def test_forward(model_class, X, y, kernel, likelihood): + if model_class is SparseGPRegression or model_class is VariationalSparseGP: + gp = model_class(X, y, kernel, X, likelihood) + else: + gp = model_class(X, y, kernel, likelihood) + + # test shape + Xnew = torch.tensor([[2.0, 3.0, 1.0]]) + loc0, cov0 = gp(Xnew, full_cov=True) + loc1, var1 = gp(Xnew, full_cov=False) + assert loc0.dim() == y.dim() + assert loc0.shape[-1] == Xnew.shape[0] + # test latent shape + assert loc0.shape[:-1] == y.shape[:-1] + assert cov0.shape[:-2] == y.shape[:-1] + assert cov0.shape[-1] == cov0.shape[-2] + assert cov0.shape[-1] == Xnew.shape[0] + assert_equal(loc0, loc1) + n = Xnew.shape[0] + cov0_diag = torch.stack([mat.diag() for mat in cov0.view(-1, n, n)]).reshape( + var1.shape + ) + assert_equal(cov0_diag, var1) + + # test trivial forward: Xnew = X + loc, cov = gp(X, full_cov=True) + if model_class is VariationalGP or model_class is VariationalSparseGP: + assert_equal(loc.norm().item(), 0) + assert_equal(cov, torch.eye(cov.shape[-1]).expand(cov.shape)) + else: + assert_equal(loc, y) + assert_equal(cov.norm().item(), 0) + + # test same input forward: Xnew[0,:] = Xnew[1,:] = ... + Xnew = torch.tensor([[2.0, 3.0, 1.0]]).expand(10, 3) + loc, cov = gp(Xnew, full_cov=True) + loc_diff = loc - loc[..., :1].expand(y.shape[:-1] + (10,)) + assert_equal(loc_diff.norm().item(), 0) + cov_diff = cov - cov[..., :1, :1].expand(y.shape[:-1] + (10, 10)) + assert_equal(cov_diff.norm().item(), 0) + + # test noise kernel forward: kernel = WhiteNoise + gp.kernel = WhiteNoise(input_dim=3, variance=torch.tensor(10.0)) + loc, cov = gp(X, full_cov=True) + assert_equal(loc.norm().item(), 0) + assert_equal(cov, torch.eye(cov.shape[-1]).expand(cov.shape) * 10) + + +@pytest.mark.parametrize( + "model_class, X, y, kernel, likelihood", _TEST_CASES(), ids=TEST_IDS +) +def test_forward_with_empty_latent_shape(model_class, X, y, kernel, likelihood): + # regression models don't use latent_shape, no need for test + if model_class is GPRegression or model_class is SparseGPRegression: + return + elif model_class is VariationalGP: + gp = model_class(X, y, kernel, likelihood, latent_shape=torch.Size([])) + else: # model_class is VariationalSparseGP + gp = model_class(X, y, kernel, X, likelihood, latent_shape=torch.Size([])) + + # test shape + Xnew = torch.tensor([[2.0, 3.0, 1.0]]) + loc0, cov0 = gp(Xnew, full_cov=True) + loc1, var1 = gp(Xnew, full_cov=False) + assert loc0.shape[-1] == Xnew.shape[0] + assert cov0.shape[-1] == cov0.shape[-2] + assert cov0.shape[-1] == Xnew.shape[0] + # test latent shape + assert loc0.shape[:-1] == torch.Size([]) + assert cov0.shape[:-2] == torch.Size([]) + assert_equal(loc0, loc1) + assert_equal(cov0.diag(), var1) + + +@pytest.mark.parametrize( + "model_class, X, y, kernel, likelihood", _TEST_CASES(), ids=TEST_IDS +) +@pytest.mark.init(rng_seed=0) +def test_inference(model_class, X, y, kernel, likelihood): + # skip variational GP models because variance/lengthscale highly + # depend on variational parameters + if model_class is VariationalGP or model_class is VariationalSparseGP: + return + elif model_class is GPRegression: + gp = model_class(X, y, RBF(input_dim=3), likelihood) + else: # model_class is SparseGPRegression + gp = model_class(X, y, RBF(input_dim=3), X, likelihood) + # fix inducing points because variance/lengthscale highly depend on it + gp.Xu.requires_grad_(False) + + generator = dist.MultivariateNormal(torch.zeros(X.shape[0]), kernel(X)) + target_y = generator(sample_shape=torch.Size([1000])).detach() + gp.set_data(X, target_y) + + train(gp) + + y_cov = gp.kernel(X) + target_y_cov = kernel(X) + assert_equal(y_cov, target_y_cov, prec=0.15) + + +@pytest.mark.init(rng_seed=0) +def test_inference_sgpr(): + N = 1000 + X = dist.Uniform(torch.zeros(N), torch.ones(N) * 5).sample() + y = ( + 0.5 * torch.sin(3 * X) + + dist.Normal(torch.zeros(N), torch.ones(N) * 0.5).sample() + ) + kernel = RBF(input_dim=1) + Xu = torch.arange(0.0, 5.5, 0.5) + + sgpr = SparseGPRegression(X, y, kernel, Xu) + train(sgpr) + + Xnew = torch.arange(0.0, 5.05, 0.05) + loc, var = sgpr(Xnew, full_cov=False) + target = 0.5 * torch.sin(3 * Xnew) + + assert_equal((loc - target).abs().mean().item(), 0, prec=0.07) + + +@pytest.mark.init(rng_seed=0) +def test_inference_vsgp(): + N = 1000 + X = dist.Uniform(torch.zeros(N), torch.ones(N) * 5).sample() + y = ( + 0.5 * torch.sin(3 * X) + + dist.Normal(torch.zeros(N), torch.ones(N) * 0.5).sample() + ) + kernel = RBF(input_dim=1) + Xu = torch.arange(0.0, 5.5, 0.5) + + vsgp = VariationalSparseGP(X, y, kernel, Xu, Gaussian()) + optimizer = torch.optim.Adam(vsgp.parameters(), lr=0.03) + train(vsgp, optimizer) + + Xnew = torch.arange(0.0, 5.05, 0.05) + loc, var = vsgp(Xnew, full_cov=False) + target = 0.5 * torch.sin(3 * Xnew) + + assert_equal((loc - target).abs().mean().item(), 0, prec=0.06) + + +@pytest.mark.init(rng_seed=0) +def test_inference_whiten_vsgp(): + N = 1000 + X = dist.Uniform(torch.zeros(N), torch.ones(N) * 5).sample() + y = ( + 0.5 * torch.sin(3 * X) + + dist.Normal(torch.zeros(N), torch.ones(N) * 0.5).sample() + ) + kernel = RBF(input_dim=1) + Xu = torch.arange(0.0, 5.5, 0.5) + + vsgp = VariationalSparseGP(X, y, kernel, Xu, Gaussian(), whiten=True) + train(vsgp) + + Xnew = torch.arange(0.0, 5.05, 0.05) + loc, var = vsgp(Xnew, full_cov=False) + target = 0.5 * torch.sin(3 * Xnew) + + assert_equal((loc - target).abs().mean().item(), 0, prec=0.07) + + +@pytest.mark.parametrize( + "model_class, X, y, kernel, likelihood", _TEST_CASES(), ids=TEST_IDS +) +def test_inference_with_empty_latent_shape(model_class, X, y, kernel, likelihood): + # regression models don't use latent_shape (default=torch.Size([])) + if model_class is GPRegression or model_class is SparseGPRegression: + return + elif model_class is VariationalGP: + gp = model_class(X, y, kernel, likelihood, latent_shape=torch.Size([])) + else: # model_class is VariationalSparseGP + gp = model_class( + X, y, kernel, X.clone(), likelihood, latent_shape=torch.Size([]) + ) + + train(gp, num_steps=1) + + +@pytest.mark.parametrize( + "model_class, X, y, kernel, likelihood", _TEST_CASES(), ids=TEST_IDS +) +def test_inference_with_whiten(model_class, X, y, kernel, likelihood): + # regression models don't use whiten + if model_class is GPRegression or model_class is SparseGPRegression: + return + elif model_class is VariationalGP: + gp = model_class(X, y, kernel, likelihood, whiten=True) + else: # model_class is VariationalSparseGP + gp = model_class(X, y, kernel, X.clone(), likelihood, whiten=True) + + train(gp, num_steps=1) + + +@pytest.mark.parametrize( + "model_class, X, y, kernel, likelihood", _TEST_CASES(), ids=TEST_IDS +) +def test_hmc(model_class, X, y, kernel, likelihood): + if model_class is SparseGPRegression or model_class is VariationalSparseGP: + gp = model_class(X, y, kernel, X.clone(), likelihood) + else: + gp = model_class(X, y, kernel, likelihood) + + kernel.variance = PyroSample(dist.Uniform(torch.tensor(0.5), torch.tensor(1.5))) + kernel.lengthscale = PyroSample(dist.Uniform(torch.tensor(1.0), torch.tensor(3.0))) + + hmc_kernel = HMC(gp.model, step_size=1) + mcmc = MCMC(hmc_kernel, num_samples=10) + mcmc.run() + + for name, param in mcmc.get_samples().items(): + param_mean = torch.mean(param, 0) + logger.info("Posterior mean - {}".format(name)) + logger.info(param_mean) + + +def test_inference_deepGP(): + gp1 = GPRegression( + X, + None, + RBF(input_dim=3, variance=torch.tensor(3.0), lengthscale=torch.tensor(2.0)), + ) + Z, _ = gp1.model() + gp2 = VariationalSparseGP( + Z, y2D, Matern32(input_dim=3), Z.clone(), Gaussian(torch.tensor(1e-6)) + ) + + class DeepGP(torch.nn.Module): + def __init__(self, gp1, gp2): + super().__init__() + self.gp1 = gp1 + self.gp2 = gp2 + + def model(self): + Z, _ = self.gp1.model() + self.gp2.set_data(Z, y2D) + self.gp2.model() + + def guide(self): + self.gp1.guide() + self.gp2.guide() + + deepgp = DeepGP(gp1, gp2) + train(deepgp, num_steps=1) + + +@pytest.mark.parametrize( + "model_class, X, y, kernel, likelihood", _TEST_CASES(), ids=TEST_IDS +) +def test_gplvm(model_class, X, y, kernel, likelihood): + if model_class is SparseGPRegression or model_class is VariationalSparseGP: + gp = model_class(X, y, kernel, X.clone(), likelihood) + else: + gp = model_class(X, y, kernel, likelihood) + + gplvm = GPLVM(gp) + # test inference + train(gplvm, num_steps=1) + # test forward + gplvm(Xnew=X) + + +def _pre_test_mean_function(): + def f(x): + return 2 * x + 3 + 5 * torch.sin(7 * x) + + X = torch.arange(100, dtype=torch.Tensor().dtype) + y = f(X) + Xnew = torch.arange(100, 150, dtype=torch.Tensor().dtype) + ynew = f(Xnew) + + kernel = Cosine(input_dim=1) + + class Trend(torch.nn.Module): + def __init__(self): + super().__init__() + self.a = torch.nn.Parameter(torch.tensor(0.0)) + self.b = torch.nn.Parameter(torch.tensor(1.0)) + + def forward(self, x): + return self.a * x + self.b + + trend = Trend() + return X, y, Xnew, ynew, kernel, trend + + +def _mape(y_true, y_pred): + return ((y_pred - y_true) / y_true).abs().mean() + + +def _post_test_mean_function(gpmodule, Xnew, y_true): + assert_equal(gpmodule.mean_function.a.item(), 2, prec=0.03) + assert_equal(gpmodule.mean_function.b.item(), 3, prec=0.03) + + y_pred, _ = gpmodule(Xnew) + assert_equal(_mape(y_true, y_pred).item(), 0, prec=0.02) + + +def test_mean_function_GPR(): + X, y, Xnew, ynew, kernel, mean_fn = _pre_test_mean_function() + gpmodule = GPRegression(X, y, kernel, mean_function=mean_fn) + train(gpmodule) + _post_test_mean_function(gpmodule, Xnew, ynew) + + +def test_mean_function_SGPR(): + X, y, Xnew, ynew, kernel, mean_fn = _pre_test_mean_function() + Xu = X[::20].clone() + gpmodule = SparseGPRegression(X, y, kernel, Xu, mean_function=mean_fn) + train(gpmodule) + _post_test_mean_function(gpmodule, Xnew, ynew) + + +def test_mean_function_SGPR_DTC(): + X, y, Xnew, ynew, kernel, mean_fn = _pre_test_mean_function() + Xu = X[::20].clone() + gpmodule = SparseGPRegression(X, y, kernel, Xu, mean_function=mean_fn, approx="DTC") + train(gpmodule) + _post_test_mean_function(gpmodule, Xnew, ynew) + + +def test_mean_function_SGPR_FITC(): + X, y, Xnew, ynew, kernel, mean_fn = _pre_test_mean_function() + Xu = X[::20].clone() + gpmodule = SparseGPRegression( + X, y, kernel, Xu, mean_function=mean_fn, approx="FITC" + ) + train(gpmodule) + _post_test_mean_function(gpmodule, Xnew, ynew) + + +def test_mean_function_VGP(): + X, y, Xnew, ynew, kernel, mean_fn = _pre_test_mean_function() + likelihood = Gaussian() + gpmodule = VariationalGP(X, y, kernel, likelihood, mean_function=mean_fn) + train(gpmodule) + _post_test_mean_function(gpmodule, Xnew, ynew) + + +def test_mean_function_VGP_whiten(): + X, y, Xnew, ynew, kernel, mean_fn = _pre_test_mean_function() + likelihood = Gaussian() + gpmodule = VariationalGP( + X, y, kernel, likelihood, mean_function=mean_fn, whiten=True + ) + optimizer = torch.optim.Adam(gpmodule.parameters(), lr=0.1) + train(gpmodule, optimizer) + _post_test_mean_function(gpmodule, Xnew, ynew) + + +def test_mean_function_VSGP(): + X, y, Xnew, ynew, kernel, mean_fn = _pre_test_mean_function() + Xu = X[::20].clone() + likelihood = Gaussian() + gpmodule = VariationalSparseGP(X, y, kernel, Xu, likelihood, mean_function=mean_fn) + optimizer = torch.optim.Adam(gpmodule.parameters(), lr=0.02) + train(gpmodule, optimizer) + _post_test_mean_function(gpmodule, Xnew, ynew) + + +def test_mean_function_VSGP_whiten(): + X, y, Xnew, ynew, kernel, mean_fn = _pre_test_mean_function() + Xu = X[::20].clone() + likelihood = Gaussian() + gpmodule = VariationalSparseGP( + X, y, kernel, Xu, likelihood, mean_function=mean_fn, whiten=True + ) + optimizer = torch.optim.Adam(gpmodule.parameters(), lr=0.1) + train(gpmodule, optimizer) + _post_test_mean_function(gpmodule, Xnew, ynew) diff --git a/pyro/source/tests/contrib/gp/test_parameterized.py b/pyro/source/tests/contrib/gp/test_parameterized.py new file mode 100644 index 0000000000000000000000000000000000000000..f7ab5d3c33712f640007608785aee9c5ee6c5081 --- /dev/null +++ b/pyro/source/tests/contrib/gp/test_parameterized.py @@ -0,0 +1,155 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch +from torch.distributions import constraints +from torch.nn import Parameter + +import pyro +import pyro.distributions as dist +from pyro.contrib.gp.parameterized import Parameterized +from pyro.nn.module import PyroParam, PyroSample +from tests.common import assert_equal + + +def test_parameterized(): + class Linear(Parameterized): + def __init__(self): + super().__init__() + self._pyro_name = "Linear" + self.a = PyroParam(torch.tensor(1.0), constraints.positive) + self.b = PyroSample(dist.Normal(0, 1)) + self.c = PyroSample(dist.Normal(0, 1)) + self.d = PyroSample(dist.Normal(0, 4).expand([1]).to_event()) + self.e = PyroSample(dist.LogNormal(0, 1)) + self.f = PyroSample(dist.MultivariateNormal(torch.zeros(2), torch.eye(2))) + self.g = PyroSample(dist.Exponential(1)) + + def forward(self, x): + return ( + self.a * x + + self.b + + self.c + + self.d + + self.e + + self.f + + self.g + + self.e + ) + + linear = Linear() + linear.autoguide("c", dist.Normal) + linear.autoguide("d", dist.MultivariateNormal) + linear.autoguide("e", dist.Normal) + + assert set(dict(linear.named_parameters()).keys()) == { + "a_unconstrained", + "b_map", + "c_loc", + "c_scale_unconstrained", + "d_loc", + "d_scale_tril_unconstrained", + "e_loc", + "e_scale_unconstrained", + "f_map", + "g_map_unconstrained", + } + + def model(x): + linear.mode = "model" + return linear(x) + + def guide(x): + linear.mode = "guide" + return linear(x) + + model_trace = pyro.poutine.trace(model).get_trace(torch.tensor(5.0)) + guide_trace = pyro.poutine.trace(guide).get_trace(torch.tensor(5.0)) + for p in ["b", "c", "d"]: + assert "Linear.{}".format(p) in model_trace.nodes + assert "Linear.{}".format(p) in guide_trace.nodes + + assert isinstance(guide_trace.nodes["Linear.b"]["fn"], dist.Delta) + c_dist = guide_trace.nodes["Linear.c"]["fn"] + assert isinstance(getattr(c_dist, "base_dist", c_dist), dist.Normal) + d_dist = guide_trace.nodes["Linear.d"]["fn"] + assert isinstance(getattr(d_dist, "base_dist", d_dist), dist.MultivariateNormal) + + +def test_nested_parameterized(): + class Linear(Parameterized): + def __init__(self, a): + super().__init__() + self.a = Parameter(a) + + def forward(self, x): + return self.a * x + + class Quadratic(Parameterized): + def __init__(self, linear1, linear2, a): + super().__init__() + self._pyro_name = "Quadratic" + self.linear1 = linear1 + self.linear2 = linear2 + self.a = Parameter(a) + + def forward(self, x): + return self.linear1(x) * x + self.linear2(self.a) + + linear1 = Linear(torch.tensor(1.0)) + linear1.a = PyroSample(dist.Normal(0, 1)) + linear2 = Linear(torch.tensor(1.0)) + linear2.a = PyroSample(dist.Normal(0, 1)) + q = Quadratic(linear1, linear2, torch.tensor(2.0)) + q.a = PyroSample(dist.Cauchy(0, 1)) + + def model(x): + q.set_mode("model") + return q(x) + + trace = pyro.poutine.trace(model).get_trace(torch.tensor(5.0)) + assert "Quadratic.a" in trace.nodes + assert "Quadratic.linear1.a" in trace.nodes + assert "Quadratic.linear2.a" in trace.nodes + + +def test_inference(): + class Linear(Parameterized): + def __init__(self, a): + super().__init__() + self.a = Parameter(a) + + def forward(self, x): + return self.a * x + + target_a = torch.tensor(2.0) + x_train = torch.rand(100) + y_train = target_a * x_train + torch.rand(100) * 0.001 + linear = Linear(torch.tensor(1.0)) + linear.a = PyroSample(dist.Normal(0, 10)) + linear.autoguide("a", dist.Normal) + + def model(x, y): + linear.set_mode("model") + mu = linear(x) + with pyro.plate("plate"): + return pyro.sample("y", dist.Normal(mu, 0.1), obs=y) + + def guide(x, y): + linear.set_mode("guide") + linear._load_pyro_samples() + + loss_fn = pyro.infer.Trace_ELBO().differentiable_loss + optimizer = torch.optim.Adam(linear.parameters(), lr=0.5) + + def closure(): + optimizer.zero_grad() + loss = loss_fn(model, guide, x_train, y_train) + loss.backward() + return loss + + for i in range(200): + optimizer.step(closure) + + linear.mode = "guide" + assert_equal(linear.a, target_a, prec=0.05) diff --git a/pyro/source/tests/contrib/mue/test_dataloaders.py b/pyro/source/tests/contrib/mue/test_dataloaders.py new file mode 100644 index 0000000000000000000000000000000000000000..7accfbdf1a5865eb8814393cfd471509f7bdfca4 --- /dev/null +++ b/pyro/source/tests/contrib/mue/test_dataloaders.py @@ -0,0 +1,116 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +from pyro.contrib.mue.dataloaders import BiosequenceDataset, alphabets, write + + +@pytest.mark.parametrize("source_type", ["list", "fasta"]) +@pytest.mark.parametrize("alphabet", ["amino-acid", "dna", "ATC"]) +@pytest.mark.parametrize("include_stop", [False, True]) +def test_biosequencedataset(source_type, alphabet, include_stop): + # Define dataset. + seqs = ["AATC", "CA", "T"] + + # Encode dataset, alternate approach. + if alphabet in alphabets: + alphabet_list = list(alphabets[alphabet]) + include_stop * ["*"] + else: + alphabet_list = list(alphabet) + include_stop * ["*"] + L_data_check = [len(seq) + include_stop for seq in seqs] + max_length_check = max(L_data_check) + data_size_check = len(seqs) + seq_data_check = torch.zeros([len(seqs), max_length_check, len(alphabet_list)]) + for i in range(len(seqs)): + for j, s in enumerate(seqs[i] + include_stop * "*"): + seq_data_check[i, j, list(alphabet_list).index(s)] = 1 + + # Setup data source. + if source_type == "fasta": + # Save as external file. + source = "test_seqs.fasta" + with open(source, "w") as fw: + text = """>one +AAT +C +>two +CA +>three +T +""" + fw.write(text) + elif source_type == "list": + source = seqs + + # Load dataset. + dataset = BiosequenceDataset( + source, source_type, alphabet, include_stop=include_stop + ) + + # Check. + assert torch.allclose( + dataset.L_data, torch.tensor(L_data_check, dtype=torch.float64) + ) + assert dataset.max_length == max_length_check + assert len(dataset) == data_size_check + assert dataset.data_size == data_size_check + assert dataset.alphabet_length == len(alphabet_list) + assert torch.allclose(dataset.seq_data, seq_data_check) + ind = torch.tensor([0, 2]) + assert torch.allclose( + dataset[ind][0], + torch.cat([seq_data_check[0, None, :, :], seq_data_check[2, None, :, :]]), + ) + assert torch.allclose( + dataset[ind][1], torch.tensor([4.0 + include_stop, 1.0 + include_stop]) + ) + dataload = torch.utils.data.DataLoader(dataset, batch_size=2) + for seq_data, L_data in dataload: + assert seq_data.shape[0] == L_data.shape[0] + + +def test_write(): + # Define dataset. + seqs = ["AATC*C", "CA*", "T**"] + dataset = BiosequenceDataset(seqs, "list", "ACGT*", include_stop=False) + # With truncation at stop symbol. + # Write. + with open("test_seqs.fasta", "w") as fw: + fw.write("") + write( + dataset.seq_data, + dataset.alphabet, + "test_seqs.fasta", + truncate_stop=True, + append=True, + ) + + # Reload. + dataset2 = BiosequenceDataset("test_seqs.fasta", "fasta", "dna", include_stop=True) + to_stop_lens = [4, 2, 1] + for j, to_stop_len in enumerate(to_stop_lens): + assert torch.allclose( + dataset.seq_data[j, :to_stop_len], dataset2.seq_data[j, :to_stop_len] + ) + assert torch.allclose( + dataset2.seq_data[j, (to_stop_len + 1) :], torch.tensor(0.0) + ) + + # Without truncation at stop symbol. + # Write. + write( + dataset.seq_data, + dataset.alphabet, + "test_seqs.fasta", + truncate_stop=False, + append=False, + ) + + # Reload. + dataset2 = BiosequenceDataset( + "test_seqs.fasta", "fasta", "ACGT*", include_stop=False + ) + for j, to_stop_len in enumerate(to_stop_lens): + assert torch.allclose(dataset.seq_data, dataset2.seq_data) diff --git a/pyro/source/tests/contrib/mue/test_missingdatahmm.py b/pyro/source/tests/contrib/mue/test_missingdatahmm.py new file mode 100644 index 0000000000000000000000000000000000000000..f68074d033da9af6fe2838c520aa7fc3a473fff0 --- /dev/null +++ b/pyro/source/tests/contrib/mue/test_missingdatahmm.py @@ -0,0 +1,556 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +from pyro.contrib.mue.missingdatahmm import MissingDataDiscreteHMM +from pyro.distributions import Categorical, DiscreteHMM + + +def test_hmm_log_prob(): + a0 = torch.tensor([0.9, 0.08, 0.02]) + a = torch.tensor([[0.1, 0.8, 0.1], [0.5, 0.3, 0.2], [0.4, 0.4, 0.2]]) + e = torch.tensor([[0.99, 0.01], [0.01, 0.99], [0.5, 0.5]]) + + x = torch.tensor( + [[0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 0.0]] + ) + + hmm_distr = MissingDataDiscreteHMM(torch.log(a0), torch.log(a), torch.log(e)) + lp = hmm_distr.log_prob(x) + + f = a0 * e[:, 1] + f = torch.matmul(f, a) * e[:, 0] + f = torch.matmul(f, a) * e[:, 1] + f = torch.matmul(f, a) * e[:, 1] + f = torch.matmul(f, a) * e[:, 0] + expected_lp = torch.log(torch.sum(f)) + + assert torch.allclose(lp, expected_lp) + + # Batch values. + x = torch.cat( + [ + x[None, :, :], + torch.tensor( + [[1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0]] + )[None, :, :], + ], + dim=0, + ) + lp = hmm_distr.log_prob(x) + + f = a0 * e[:, 0] + f = torch.matmul(f, a) * e[:, 0] + f = torch.matmul(f, a) * e[:, 0] + expected_lp = torch.cat([expected_lp[None], torch.log(torch.sum(f))[None]]) + + assert torch.allclose(lp, expected_lp) + + # Batch both parameters and values. + a0 = torch.cat([a0[None, :], torch.tensor([0.2, 0.7, 0.1])[None, :]]) + a = torch.cat( + [ + a[None, :, :], + torch.tensor([[0.8, 0.1, 0.1], [0.2, 0.6, 0.2], [0.1, 0.1, 0.8]])[ + None, :, : + ], + ], + dim=0, + ) + e = torch.cat( + [ + e[None, :, :], + torch.tensor([[0.4, 0.6], [0.99, 0.01], [0.7, 0.3]])[None, :, :], + ], + dim=0, + ) + hmm_distr = MissingDataDiscreteHMM(torch.log(a0), torch.log(a), torch.log(e)) + lp = hmm_distr.log_prob(x) + + f = a0[1, :] * e[1, :, 0] + f = torch.matmul(f, a[1, :, :]) * e[1, :, 0] + f = torch.matmul(f, a[1, :, :]) * e[1, :, 0] + expected_lp = torch.cat([expected_lp[0][None], torch.log(torch.sum(f))[None]]) + + assert torch.allclose(lp, expected_lp) + + +@pytest.mark.parametrize("batch_initial", [False, True]) +@pytest.mark.parametrize("batch_transition", [False, True]) +@pytest.mark.parametrize("batch_observation", [False, True]) +@pytest.mark.parametrize("batch_data", [False, True]) +def test_shapes(batch_initial, batch_transition, batch_observation, batch_data): + # Dimensions. + batch_size = 3 + state_dim, observation_dim, num_steps = 4, 5, 6 + + # Model initialization. + initial_logits = torch.randn([batch_size] * batch_initial + [state_dim]) + initial_logits = initial_logits - initial_logits.logsumexp(-1, True) + transition_logits = torch.randn( + [batch_size] * batch_transition + [state_dim, state_dim] + ) + transition_logits = transition_logits - transition_logits.logsumexp(-1, True) + observation_logits = torch.randn( + [batch_size] * batch_observation + [state_dim, observation_dim] + ) + observation_logits = observation_logits - observation_logits.logsumexp(-1, True) + + hmm = MissingDataDiscreteHMM(initial_logits, transition_logits, observation_logits) + + # Random observations. + value = ( + torch.randint( + observation_dim, [batch_size] * batch_data + [num_steps] + ).unsqueeze(-1) + == torch.arange(observation_dim) + ).double() + + # Log probability. + lp = hmm.log_prob(value) + + # Check shapes: + if all( + [not batch_initial, not batch_transition, not batch_observation, not batch_data] + ): + assert lp.shape == () + else: + assert lp.shape == (batch_size,) + + +@pytest.mark.parametrize("batch_initial", [False, True]) +@pytest.mark.parametrize("batch_transition", [False, True]) +@pytest.mark.parametrize("batch_observation", [False, True]) +@pytest.mark.parametrize("batch_data", [False, True]) +def test_DiscreteHMM_comparison( + batch_initial, batch_transition, batch_observation, batch_data +): + # Dimensions. + batch_size = 3 + state_dim, observation_dim, num_steps = 4, 5, 6 + + # -- Model setup --. + transition_logits_vldhmm = torch.randn( + [batch_size] * batch_transition + [state_dim, state_dim] + ) + transition_logits_vldhmm = ( + transition_logits_vldhmm - transition_logits_vldhmm.logsumexp(-1, True) + ) + # Adjust for DiscreteHMM broadcasting convention. + transition_logits_dhmm = transition_logits_vldhmm.unsqueeze(-3) + # Convert between discrete HMM convention for initial state and variable + # length HMM convention. + initial_logits_dhmm = torch.randn([batch_size] * batch_initial + [state_dim]) + initial_logits_dhmm = initial_logits_dhmm - initial_logits_dhmm.logsumexp(-1, True) + initial_logits_vldhmm = ( + initial_logits_dhmm.unsqueeze(-1) + transition_logits_vldhmm + ).logsumexp(-2) + observation_logits = torch.randn( + [batch_size] * batch_observation + [state_dim, observation_dim] + ) + observation_logits = observation_logits - observation_logits.logsumexp(-1, True) + # Create distribution object for DiscreteHMM + observation_dist = Categorical(logits=observation_logits.unsqueeze(-3)) + + vldhmm = MissingDataDiscreteHMM( + initial_logits_vldhmm, transition_logits_vldhmm, observation_logits + ) + dhmm = DiscreteHMM(initial_logits_dhmm, transition_logits_dhmm, observation_dist) + + # Random observations. + value = torch.randint(observation_dim, [batch_size] * batch_data + [num_steps]) + value_oh = (value.unsqueeze(-1) == torch.arange(observation_dim)).double() + + # -- Check. -- + # Log probability. + lp_vldhmm = vldhmm.log_prob(value_oh) + lp_dhmm = dhmm.log_prob(value) + # Shapes. + if all( + [not batch_initial, not batch_transition, not batch_observation, not batch_data] + ): + assert lp_vldhmm.shape == () + else: + assert lp_vldhmm.shape == (batch_size,) + # Values. + assert torch.allclose(lp_vldhmm, lp_dhmm) + # Filter. + filter_dhmm = dhmm.filter(value) + filter_vldhmm = vldhmm.filter(value_oh) + assert torch.allclose(filter_dhmm.logits, filter_vldhmm[..., -1, :]) + # Check other computations run. + vldhmm.sample(value_oh.shape[:-1]) + vldhmm.smooth(value_oh) + vldhmm.sample_states(value_oh) + map_states = vldhmm.map_states(value_oh) + print(value_oh.shape, map_states.shape) + vldhmm.sample_given_states(map_states) + + +@pytest.mark.parametrize("batch_data", [False, True]) +def test_samples(batch_data): + initial_logits = torch.tensor([-100, 0, -100, -100], dtype=torch.float64) + transition_logits = torch.tensor( + [ + [-100, -100, 0, -100], + [-100, -100, -100, 0], + [0, -100, -100, -100], + [-100, 0, -100, -100], + ], + dtype=torch.float64, + ) + obs_logits = torch.tensor( + [[0, -100, -100], [-100, 0, -100], [-100, -100, 0], [-100, -100, 0]], + dtype=torch.float64, + ) + if batch_data: + initial_logits = torch.tensor( + [[-100, 0, -100, -100], [0, -100, -100, -100]], dtype=torch.float64 + ) + transition_logits = transition_logits * torch.ones( + [2] + list(transition_logits.shape) + ) + obs_logits = obs_logits * torch.ones([2] + list(obs_logits.shape)) + + model = MissingDataDiscreteHMM(initial_logits, transition_logits, obs_logits) + + if not batch_data: + sample = model.sample(torch.Size([3])) + print(sample) + assert torch.allclose( + sample, torch.tensor([[0.0, 1.0, 0.0], [0.0, 0.0, 1.0], [0.0, 1.0, 0.0]]) + ) + else: + sample = model.sample(torch.Size([2, 3])) + print(sample[0, :, :]) + assert torch.allclose( + sample[0, :, :], + torch.tensor([[0.0, 1.0, 0.0], [0.0, 0.0, 1.0], [0.0, 1.0, 0.0]]), + ) + print(sample[1, :, :]) + assert torch.allclose( + sample[1, :, :], + torch.tensor([[1.0, 0.0, 0.0], [0.0, 0.0, 1.0], [1.0, 0.0, 0.0]]), + ) + + +def indiv_filter(a0, a, e, x): + alph = torch.zeros((x.shape[0], a0.shape[0])) + for j in range(a0.shape[0]): + vec = a0[j] + if torch.sum(x[0, :]) > 0.5: + vec = vec * torch.dot(x[0, :], e[j, :]) + alph[0, j] = vec + alph[0, :] = alph[0, :] / torch.sum(alph[0, :]) + for t in range(1, x.shape[0]): + for j in range(a0.shape[0]): + vec = torch.sum(alph[t - 1, :] * a[:, j]) + if torch.sum(x[t, :]) > 0.5: + vec = vec * torch.dot(x[t, :], e[j, :]) + alph[t, j] = vec + alph[t, :] = alph[t, :] / torch.sum(alph[t, :]) + return torch.log(alph) + + +def indiv_smooth(a0, a, e, x): + alph = indiv_filter(a0, a, e, x) + beta = torch.zeros(alph.shape) + beta[-1, :] = 1.0 + for t in range(alph.shape[0] - 1, 0, -1): + for i in range(a0.shape[0]): + for j in range(a0.shape[0]): + vec = beta[t, j] * a[i, j] + if torch.sum(x[t, :]) > 0.5: + vec = vec * torch.dot(x[t, :], e[j, :]) + beta[t - 1, i] += vec + smooth = torch.exp(alph) * beta + smooth = smooth / torch.sum(smooth, -1, True) + return torch.log(smooth) + + +def indiv_map_states(a0, a, e, x): + # Viterbi algorithm, implemented without batching or vector operations. + + delta = torch.zeros((x.shape[0], a0.shape[0])) + for j in range(a0.shape[0]): + vec = a0[j] + if torch.sum(x[0, :]) > 0.5: + vec = vec * torch.dot(x[0, :], e[j, :]) + delta[0, j] = vec + traceback = torch.zeros((x.shape[0], a0.shape[0]), dtype=torch.long) + for t in range(1, x.shape[0]): + for j in range(a0.shape[0]): + vec = delta[t - 1, :] * a[:, j] + if torch.sum(x[t, :]) > 0.5: + vec = vec * torch.dot(x[t, :], e[j, :]) + delta[t, j] = torch.max(vec) + traceback[t, j] = torch.argmax(vec) + expected_map_states = torch.zeros(x.shape[0], dtype=torch.long) + expected_map_states[-1] = torch.argmax(delta[-1, :]) + for t in range(x.shape[0] - 1, 0, -1): + expected_map_states[t - 1] = traceback[t, expected_map_states[t]] + + return expected_map_states + + +def test_state_infer(): + # HMM parameters. + a0 = torch.tensor([0.9, 0.08, 0.02]) + a = torch.tensor([[0.1, 0.8, 0.1], [0.5, 0.3, 0.2], [0.4, 0.4, 0.2]]) + e = torch.tensor([[0.9, 0.1], [0.1, 0.9], [0.5, 0.5]]) + # Observed value. + x = torch.tensor( + [[0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 0.0]] + ) + + expected_map_states = indiv_map_states(a0, a, e, x) + expected_filter = indiv_filter(a0, a, e, x) + expected_smooth = indiv_smooth(a0, a, e, x) + + hmm_distr = MissingDataDiscreteHMM(torch.log(a0), torch.log(a), torch.log(e)) + map_states = hmm_distr.map_states(x) + filter = hmm_distr.filter(x) + smooth = hmm_distr.smooth(x) + + assert torch.allclose(map_states, expected_map_states) + assert torch.allclose(filter, expected_filter) + assert torch.allclose(smooth, expected_smooth) + + # Batch values. + x = torch.cat( + [ + x[None, :, :], + torch.tensor( + [[1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0]] + )[None, :, :], + ], + dim=0, + ) + map_states = hmm_distr.map_states(x) + filter = hmm_distr.filter(x) + smooth = hmm_distr.smooth(x) + + expected_map_states = torch.cat( + [ + indiv_map_states(a0, a, e, x[0])[None, :], + indiv_map_states(a0, a, e, x[1])[None, :], + ], + -2, + ) + expected_filter = torch.cat( + [ + indiv_filter(a0, a, e, x[0])[None, :, :], + indiv_filter(a0, a, e, x[1])[None, :, :], + ], + -3, + ) + expected_smooth = torch.cat( + [ + indiv_smooth(a0, a, e, x[0])[None, :, :], + indiv_smooth(a0, a, e, x[1])[None, :, :], + ], + -3, + ) + + assert torch.allclose(map_states, expected_map_states) + assert torch.allclose(filter, expected_filter) + assert torch.allclose(smooth, expected_smooth) + + # Batch parameters. + a0 = torch.cat([a0[None, :], torch.tensor([0.2, 0.7, 0.1])[None, :]]) + a = torch.cat( + [ + a[None, :, :], + torch.tensor([[0.8, 0.1, 0.1], [0.2, 0.6, 0.2], [0.1, 0.1, 0.8]])[ + None, :, : + ], + ], + dim=0, + ) + e = torch.cat( + [ + e[None, :, :], + torch.tensor([[0.4, 0.6], [0.99, 0.01], [0.7, 0.3]])[None, :, :], + ], + dim=0, + ) + hmm_distr = MissingDataDiscreteHMM(torch.log(a0), torch.log(a), torch.log(e)) + map_states = hmm_distr.map_states(x[1]) + filter = hmm_distr.filter(x[1]) + smooth = hmm_distr.smooth(x[1]) + + expected_map_states = torch.cat( + [ + indiv_map_states(a0[0], a[0], e[0], x[1])[None, :], + indiv_map_states(a0[1], a[1], e[1], x[1])[None, :], + ], + -2, + ) + expected_filter = torch.cat( + [ + indiv_filter(a0[0], a[0], e[0], x[1])[None, :, :], + indiv_filter(a0[1], a[1], e[1], x[1])[None, :, :], + ], + -3, + ) + expected_smooth = torch.cat( + [ + indiv_smooth(a0[0], a[0], e[0], x[1])[None, :, :], + indiv_smooth(a0[1], a[1], e[1], x[1])[None, :, :], + ], + -3, + ) + + assert torch.allclose(map_states, expected_map_states) + assert torch.allclose(filter, expected_filter) + assert torch.allclose(smooth, expected_smooth) + + # Batch both parameters and values. + map_states = hmm_distr.map_states(x) + filter = hmm_distr.filter(x) + smooth = hmm_distr.smooth(x) + + expected_map_states = torch.cat( + [ + indiv_map_states(a0[0], a[0], e[0], x[0])[None, :], + indiv_map_states(a0[1], a[1], e[1], x[1])[None, :], + ], + -2, + ) + expected_filter = torch.cat( + [ + indiv_filter(a0[0], a[0], e[0], x[0])[None, :, :], + indiv_filter(a0[1], a[1], e[1], x[1])[None, :, :], + ], + -3, + ) + expected_smooth = torch.cat( + [ + indiv_smooth(a0[0], a[0], e[0], x[0])[None, :, :], + indiv_smooth(a0[1], a[1], e[1], x[1])[None, :, :], + ], + -3, + ) + + assert torch.allclose(map_states, expected_map_states) + assert torch.allclose(filter, expected_filter) + assert torch.allclose(smooth, expected_smooth) + + +def test_sample_given_states(): + a0 = torch.tensor([0.9, 0.08, 0.02]) + a = torch.tensor([[0.1, 0.8, 0.1], [0.5, 0.3, 0.2], [0.4, 0.4, 0.2]]) + eps = 1e-10 + # Effectively deterministic to check sampler. + e = torch.tensor([[1 - eps, eps], [eps, 1 - eps], [eps, 1 - eps]]) + + map_states = torch.tensor([0, 2, 1, 0], dtype=torch.long) + hmm_distr = MissingDataDiscreteHMM(torch.log(a0), torch.log(a), torch.log(e)) + sample = hmm_distr.sample_given_states(map_states) + expected_sample = torch.tensor([[1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0]]) + assert torch.allclose(sample, expected_sample) + + # Batch values + map_states = torch.tensor([[0, 2, 1, 0], [0, 0, 0, 1]], dtype=torch.long) + sample = hmm_distr.sample_given_states(map_states) + expected_sample = torch.tensor( + [ + [[1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0]], + [[1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0]], + ] + ) + assert torch.allclose(sample, expected_sample) + + # Batch parameters + e = torch.cat( + [ + e[None, :, :], + torch.tensor([[eps, 1 - eps], [eps, 1 - eps], [1 - eps, eps]])[None, :, :], + ], + dim=0, + ) + hmm_distr = MissingDataDiscreteHMM(torch.log(a0), torch.log(a), torch.log(e)) + sample = hmm_distr.sample_given_states(map_states[0]) + expected_sample = torch.tensor( + [ + [[1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0]], + [[0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0]], + ] + ) + assert torch.allclose(sample, expected_sample) + + # Batch parameters and values. + sample = hmm_distr.sample_given_states(map_states) + expected_sample = torch.tensor( + [ + [[1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0]], + [[0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0]], + ] + ) + assert torch.allclose(sample, expected_sample) + + +def test_sample_states(): + # Effectively deterministic to check sampler. + eps = 1e-10 + a0 = torch.tensor([1 - eps, eps / 2, eps / 2]) + a = torch.tensor( + [ + [eps / 2, 1 - eps, eps / 2], + [eps, 0.5 - eps / 2, 0.5 - eps / 2], + [eps, 0.5 - eps / 2, 0.5 - eps / 2], + ] + ) + e = torch.tensor([[1 - eps, eps], [1 - eps, eps], [eps, 1 - eps]]) + x = torch.tensor([[1.0, 0.0], [0.0, 0.0], [0.0, 1.0], [0.0, 1.0]]) + + hmm_distr = MissingDataDiscreteHMM(torch.log(a0), torch.log(a), torch.log(e)) + states = hmm_distr.sample_states(x) + expected_states = torch.tensor([0, 1, 2, 2]) + assert torch.allclose(states, expected_states) + + # Batch values. + x = torch.cat( + [ + x[None, :, :], + torch.tensor([[1.0, 0.0], [0.0, 0.0], [0.0, 1.0], [1.0, 0.0]])[None, :, :], + ], + dim=0, + ) + states = hmm_distr.sample_states(x) + expected_states = torch.tensor([[0, 1, 2, 2], [0, 1, 2, 1]]) + assert torch.allclose(states, expected_states) + + # Batch parameters + a0 = torch.cat([a0[None, :], torch.tensor([eps / 2, 1 - eps, eps / 2])[None, :]]) + a = torch.cat( + [ + a[None, :, :], + torch.tensor( + [ + [eps / 2, 1 - eps, eps / 2], + [eps / 2, 1 - eps, eps / 2], + [eps / 2, 1 - eps, eps / 2], + ] + )[None, :, :], + ], + dim=0, + ) + e = torch.cat( + [ + e[None, :, :], + torch.tensor([[1 - eps, eps], [0.5, 0.5], [eps, 1 - eps]])[None, :, :], + ], + dim=0, + ) + hmm_distr = MissingDataDiscreteHMM(torch.log(a0), torch.log(a), torch.log(e)) + states = hmm_distr.sample_states(x[1]) + expected_states = torch.tensor([[0, 1, 2, 1], [1, 1, 1, 1]]) + assert torch.allclose(states, expected_states) + + # Batch both parameters and values. + states = hmm_distr.sample_states(x) + expected_states = torch.tensor([[0, 1, 2, 2], [1, 1, 1, 1]]) + assert torch.allclose(states, expected_states) diff --git a/pyro/source/tests/contrib/mue/test_models.py b/pyro/source/tests/contrib/mue/test_models.py new file mode 100644 index 0000000000000000000000000000000000000000..691313dff98f535eb913d5ac4ea97614cc7d78aa --- /dev/null +++ b/pyro/source/tests/contrib/mue/test_models.py @@ -0,0 +1,107 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import numpy as np +import pytest +import torch +from torch.optim import Adam + +import pyro +from pyro.contrib.mue.dataloaders import BiosequenceDataset +from pyro.contrib.mue.models import FactorMuE, ProfileHMM +from pyro.optim import MultiStepLR + + +@pytest.mark.parametrize("jit", [False, True]) +def test_ProfileHMM_smoke(jit): + # Setup dataset. + seqs = ["BABBA", "BAAB", "BABBB"] + alph = "AB" + dataset = BiosequenceDataset(seqs, "list", alph) + + # Infer. + scheduler = MultiStepLR( + { + "optimizer": Adam, + "optim_args": {"lr": 0.1}, + "milestones": [20, 100, 1000, 2000], + "gamma": 0.5, + } + ) + model = ProfileHMM(int(dataset.max_length * 1.1), dataset.alphabet_length) + n_epochs = 5 + batch_size = 2 + losses = model.fit_svi(dataset, n_epochs, batch_size, scheduler, jit) + + assert not np.isnan(losses[-1]) + + # Evaluate. + train_lp, test_lp, train_perplex, test_perplex = model.evaluate( + dataset, dataset, jit + ) + assert train_lp < 0.0 + assert test_lp < 0.0 + assert train_perplex > 0.0 + assert test_perplex > 0.0 + + +@pytest.mark.parametrize("indel_factor_dependence", [False, True]) +@pytest.mark.parametrize("z_prior_distribution", ["Normal", "Laplace"]) +@pytest.mark.parametrize("ARD_prior", [False, True]) +@pytest.mark.parametrize("substitution_matrix", [False, True]) +@pytest.mark.parametrize("jit", [False, True]) +def test_FactorMuE_smoke( + indel_factor_dependence, z_prior_distribution, ARD_prior, substitution_matrix, jit +): + # Setup dataset. + seqs = ["BABBA", "BAAB", "BABBB"] + alph = "AB" + dataset = BiosequenceDataset(seqs, "list", alph) + + # Infer. + z_dim = 2 + scheduler = MultiStepLR( + { + "optimizer": Adam, + "optim_args": {"lr": 0.1}, + "milestones": [20, 100, 1000, 2000], + "gamma": 0.5, + } + ) + model = FactorMuE( + dataset.max_length, + dataset.alphabet_length, + z_dim, + indel_factor_dependence=indel_factor_dependence, + z_prior_distribution=z_prior_distribution, + ARD_prior=ARD_prior, + substitution_matrix=substitution_matrix, + ) + n_epochs = 5 + anneal_length = 2 + batch_size = 2 + losses = model.fit_svi(dataset, n_epochs, anneal_length, batch_size, scheduler, jit) + + # Reconstruct. + recon = model._reconstruct_regressor_seq(dataset, 1, pyro.param) + + assert not np.isnan(losses[-1]) + assert recon.shape == (1, max([len(seq) for seq in seqs]), len(alph)) + + assert torch.allclose(model._beta_anneal(3, 2, 6, 2), torch.tensor(0.5)) + assert torch.allclose(model._beta_anneal(100, 2, 6, 2), torch.tensor(1.0)) + + # Evaluate. + train_lp, test_lp, train_perplex, test_perplex = model.evaluate( + dataset, dataset, jit + ) + assert train_lp < 0.0 + assert test_lp < 0.0 + assert train_perplex > 0.0 + assert test_perplex > 0.0 + + # Embedding. + z_locs, z_scales = model.embed(dataset) + assert z_locs.shape == (len(dataset), z_dim) + assert z_scales.shape == (len(dataset), z_dim) + assert torch.all(z_scales > 0.0) diff --git a/pyro/source/tests/contrib/mue/test_statearrangers.py b/pyro/source/tests/contrib/mue/test_statearrangers.py new file mode 100644 index 0000000000000000000000000000000000000000..2b0a03acad2e470b4878764525a52b34eb168a66 --- /dev/null +++ b/pyro/source/tests/contrib/mue/test_statearrangers.py @@ -0,0 +1,271 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +from pyro.contrib.mue.statearrangers import Profile, mg2k + + +def simpleprod(lst): + # Product of list of scalar tensors, as numpy would do it. + if len(lst) == 0: + return torch.tensor(1.0) + else: + return torch.prod(torch.cat([elem[None] for elem in lst])) + + +@pytest.mark.parametrize("M", [2, 20]) +@pytest.mark.parametrize("batch_size", [None, 5]) +@pytest.mark.parametrize("substitute", [False, True]) +def test_profile_alternate_imp(M, batch_size, substitute): + # --- Setup random model. --- + pf_arranger = Profile(M) + + u1 = torch.rand((M + 1, 3)) + u1[M, :] = 0 # Assume u_{M+1, j} = 0 for j in {0, 1, 2} in Eqn. S40. + u = torch.cat([(1 - u1)[:, :, None], u1[:, :, None]], dim=2) + r1 = torch.rand((M + 1, 3)) + r1[M, :] = 1 # Assume r_{M+1, j} = 1 for j in {0, 1, 2} in Eqn. S40. + r = torch.cat([(1 - r1)[:, :, None], r1[:, :, None]], dim=2) + s = torch.rand((M, 4)) + s = s / torch.sum(s, dim=1, keepdim=True) + c = torch.rand((M + 1, 4)) + c = c / torch.sum(c, dim=1, keepdim=True) + + if batch_size is not None: + s = torch.rand((batch_size, M, 4)) + s = s / torch.sum(s, dim=2, keepdim=True) + u1 = torch.rand((batch_size, M + 1, 3)) + u1[:, M, :] = 0 + u = torch.cat([(1 - u1)[:, :, :, None], u1[:, :, :, None]], dim=3) + + # Compute forward pass of state arranger to get HMM parameters. + # Don't use dimension M, assumed fixed by statearranger. + if substitute: + ll = torch.rand((4, 5)) + ll = ll / torch.sum(ll, dim=1, keepdim=True) + a0ln, aln, eln = pf_arranger.forward( + torch.log(s), + torch.log(c), + torch.log(r[:-1, :]), + torch.log(u[..., :-1, :, :]), + torch.log(ll), + ) + else: + a0ln, aln, eln = pf_arranger.forward( + torch.log(s), + torch.log(c), + torch.log(r[:-1, :]), + torch.log(u[..., :-1, :, :]), + ) + + # - Remake HMM parameters to check. - + # Here we implement Equation S40 from the MuE paper + # (https://www.biorxiv.org/content/10.1101/2020.07.31.231381v1.full.pdf) + # more directly, iterating over all the indices of the transition matrix + # and initial transition vector. + K = 2 * M + 1 + if batch_size is None: + batch_dim_size = 1 + r1 = r1.unsqueeze(0) + u1 = u1.unsqueeze(0) + s = s.unsqueeze(0) + c = c.unsqueeze(0) + if substitute: + ll = ll.unsqueeze(0) + else: + batch_dim_size = batch_size + r1 = r1[None, :, :] * torch.ones([batch_size, 1, 1]) + c = c[None, :, :] * torch.ones([batch_size, 1, 1]) + if substitute: + ll = ll.unsqueeze(0) + expected_a = torch.zeros((batch_dim_size, K, K)) + expected_a0 = torch.zeros((batch_dim_size, K)) + expected_e = torch.zeros((batch_dim_size, K, 4)) + for b in range(batch_dim_size): + m, g = -1, 0 + u1[b][-1] = 1e-32 + for gp in range(2): + for mp in range(M + gp): + kp = mg2k(mp, gp, M) + if m + 1 - g == mp and gp == 0: + expected_a0[b, kp] = (1 - r1[b, m + 1 - g, g]) * ( + 1 - u1[b, m + 1 - g, g] + ) + elif m + 1 - g < mp and gp == 0: + expected_a0[b, kp] = ( + (1 - r1[b, m + 1 - g, g]) + * u1[b, m + 1 - g, g] + * simpleprod( + [ + (1 - r1[b, mpp, 2]) * u1[b, mpp, 2] + for mpp in range(m + 2 - g, mp) + ] + ) + * (1 - r1[b, mp, 2]) + * (1 - u1[b, mp, 2]) + ) + elif m + 1 - g == mp and gp == 1: + expected_a0[b, kp] = r1[b, m + 1 - g, g] + elif m + 1 - g < mp and gp == 1: + expected_a0[b, kp] = ( + (1 - r1[b, m + 1 - g, g]) + * u1[b, m + 1 - g, g] + * simpleprod( + [ + (1 - r1[b, mpp, 2]) * u1[b, mpp, 2] + for mpp in range(m + 2 - g, mp) + ] + ) + * r1[b, mp, 2] + ) + for g in range(2): + for m in range(M + g): + k = mg2k(m, g, M) + for gp in range(2): + for mp in range(M + gp): + kp = mg2k(mp, gp, M) + if m + 1 - g == mp and gp == 0: + expected_a[b, k, kp] = (1 - r1[b, m + 1 - g, g]) * ( + 1 - u1[b, m + 1 - g, g] + ) + elif m + 1 - g < mp and gp == 0: + expected_a[b, k, kp] = ( + (1 - r1[b, m + 1 - g, g]) + * u1[b, m + 1 - g, g] + * simpleprod( + [ + (1 - r1[b, mpp, 2]) * u1[b, mpp, 2] + for mpp in range(m + 2 - g, mp) + ] + ) + * (1 - r1[b, mp, 2]) + * (1 - u1[b, mp, 2]) + ) + elif m + 1 - g == mp and gp == 1: + expected_a[b, k, kp] = r1[b, m + 1 - g, g] + elif m + 1 - g < mp and gp == 1: + expected_a[b, k, kp] = ( + (1 - r1[b, m + 1 - g, g]) + * u1[b, m + 1 - g, g] + * simpleprod( + [ + (1 - r1[b, mpp, 2]) * u1[b, mpp, 2] + for mpp in range(m + 2 - g, mp) + ] + ) + * r1[b, mp, 2] + ) + elif m == M and mp == M and g == 0 and gp == 0: + expected_a[b, k, kp] = 1.0 + + for g in range(2): + for m in range(M + g): + k = mg2k(m, g, M) + if g == 0: + expected_e[b, k, :] = s[b, m, :] + else: + expected_e[b, k, :] = c[b, m, :] + if substitute: + expected_e = torch.matmul(expected_e, ll) + + # --- Check --- + if batch_size is None: + expected_a = expected_a.squeeze() + expected_a0 = expected_a0.squeeze() + expected_e = expected_e.squeeze() + + assert torch.allclose( + torch.sum(torch.exp(a0ln)), torch.tensor(1.0), atol=1e-3, rtol=1e-3 + ) + assert torch.allclose( + torch.sum(torch.exp(aln), axis=1), + torch.ones(2 * M + 1), + atol=1e-3, + rtol=1e-3, + ) + assert torch.allclose(expected_a0, torch.exp(a0ln)) + assert torch.allclose(expected_a, torch.exp(aln)) + assert torch.allclose(expected_e, torch.exp(eln)) + + +@pytest.mark.parametrize("batch_ancestor_seq", [False, True]) +@pytest.mark.parametrize("batch_insert_seq", [False, True]) +@pytest.mark.parametrize("batch_insert", [False, True]) +@pytest.mark.parametrize("batch_delete", [False, True]) +@pytest.mark.parametrize("batch_substitute", [False, True]) +def test_profile_shapes( + batch_ancestor_seq, batch_insert_seq, batch_insert, batch_delete, batch_substitute +): + M, D, B = 5, 2, 3 + K = 2 * M + 1 + batch_size = 6 + pf_arranger = Profile(M) + sln = torch.randn([batch_size] * batch_ancestor_seq + [M, D]) + sln = sln - sln.logsumexp(-1, True) + cln = torch.randn([batch_size] * batch_insert_seq + [M + 1, D]) + cln = cln - cln.logsumexp(-1, True) + rln = torch.randn([batch_size] * batch_insert + [M, 3, 2]) + rln = rln - rln.logsumexp(-1, True) + uln = torch.randn([batch_size] * batch_delete + [M, 3, 2]) + uln = uln - uln.logsumexp(-1, True) + lln = torch.randn([batch_size] * batch_substitute + [D, B]) + lln = lln - lln.logsumexp(-1, True) + a0ln, aln, eln = pf_arranger.forward(sln, cln, rln, uln, lln) + + if all([not batch_ancestor_seq, not batch_insert_seq, not batch_substitute]): + assert eln.shape == (K, B) + assert torch.allclose(eln.logsumexp(-1), torch.zeros(K)) + else: + assert eln.shape == (batch_size, K, B) + assert torch.allclose(eln.logsumexp(-1), torch.zeros(batch_size, K)) + + if all([not batch_insert, not batch_delete]): + assert a0ln.shape == (K,) + assert torch.allclose(a0ln.logsumexp(-1), torch.zeros(1)) + assert aln.shape == (K, K) + assert torch.allclose(aln.logsumexp(-1), torch.zeros(K)) + else: + assert a0ln.shape == (batch_size, K) + assert torch.allclose(a0ln.logsumexp(-1), torch.zeros(batch_size)) + assert aln.shape == (batch_size, K, K) + assert torch.allclose(aln.logsumexp(-1), torch.zeros((batch_size, K))) + + +@pytest.mark.parametrize("M", [2, 20]) # , 20 +def test_profile_trivial_cases(M): + # Trivial case: indel probabability of zero. Expected value of + # HMM should match ancestral sequence times substitution matrix. + + # --- Setup model. --- + D, B = 2, 2 + batch_size = 5 + pf_arranger = Profile(M) + sln = torch.randn([batch_size, M, D]) + sln = sln - sln.logsumexp(-1, True) + cln = torch.randn([batch_size, M + 1, D]) + cln = cln - cln.logsumexp(-1, True) + rln = torch.cat( + [torch.zeros([M, 3, 1]), -1 / pf_arranger.epsilon * torch.ones([M, 3, 1])], + axis=-1, + ) + uln = torch.cat( + [torch.zeros([M, 3, 1]), -1 / pf_arranger.epsilon * torch.ones([M, 3, 1])], + axis=-1, + ) + lln = torch.randn([D, B]) + lln = lln - lln.logsumexp(-1, True) + + a0ln, aln, eln = pf_arranger.forward(sln, cln, rln, uln, lln) + + # --- Compute expected value per step. --- + Eyln = torch.zeros([batch_size, M, B]) + ai = a0ln + for j in range(M): + Eyln[:, j, :] = torch.logsumexp(ai.unsqueeze(-1) + eln, axis=-2) + ai = torch.logsumexp(ai.unsqueeze(-1) + aln, axis=-2) + + print(aln.exp()) + no_indel = torch.logsumexp(sln.unsqueeze(-1) + lln.unsqueeze(-3), axis=-2) + assert torch.allclose(Eyln, no_indel) diff --git a/pyro/source/tests/contrib/oed/test_ewma.py b/pyro/source/tests/contrib/oed/test_ewma.py new file mode 100644 index 0000000000000000000000000000000000000000..14eb605c0b1200b395750449939ccfe885c74970 --- /dev/null +++ b/pyro/source/tests/contrib/oed/test_ewma.py @@ -0,0 +1,50 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import pytest +import torch + +from pyro.contrib.oed.eig import EwmaLog +from tests.common import assert_equal + + +@pytest.mark.parametrize("alpha", [0.5, 0.9, 0.99]) +def test_ewma(alpha, NS=10000, D=1): + ewma_log = EwmaLog(alpha=alpha) + sigma = torch.tensor(1.0, requires_grad=True) + + for k in range(1000): + exponent = torch.randn(NS, D) * sigma + s, _ = torch.max(exponent, dim=0) + log_eT = s + ewma_log((exponent - s).exp().mean(dim=0), s) + log_eT.backward() + sigma_grad = sigma.grad.clone().cpu().numpy() + sigma.grad.zero_() + if k % 100 == 0: + error = math.fabs(sigma_grad - 1.0) + assert error < 0.07 + + +def test_ewma_log(): + ewma_log = EwmaLog(alpha=0.5) + input1 = torch.tensor(2.0) + ewma_log(input1, torch.tensor(0.0)) + assert_equal(ewma_log.ewma, input1) + input2 = torch.tensor(3.0) + ewma_log(input2, torch.tensor(0.0)) + assert_equal(ewma_log.ewma, torch.tensor(8.0 / 3)) + + +def test_ewma_log_with_s(): + ewma_log = EwmaLog(alpha=0.5) + input1 = torch.tensor(-1.0) + s1 = torch.tensor(210.0) + ewma_log(input1, s1) + assert_equal(ewma_log.ewma, input1) + input2 = torch.tensor(-1.0) + s2 = torch.tensor(210.5) + ewma_log(input2, s2) + true_ewma = (1.0 / 3) * (torch.exp(s1 - s2) * input1 + 2 * input2) + assert_equal(ewma_log.ewma, true_ewma) diff --git a/pyro/source/tests/contrib/oed/test_finite_spaces_eig.py b/pyro/source/tests/contrib/oed/test_finite_spaces_eig.py new file mode 100644 index 0000000000000000000000000000000000000000..5d2d2c984171b02d3dba2929bfa5fea88277e7b9 --- /dev/null +++ b/pyro/source/tests/contrib/oed/test_finite_spaces_eig.py @@ -0,0 +1,272 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from contextlib import ExitStack + +import pytest +import torch + +import pyro +import pyro.distributions as dist +import pyro.optim as optim +from pyro.contrib.oed.eig import ( + donsker_varadhan_eig, + lfire_eig, + marginal_eig, + marginal_likelihood_eig, + nmc_eig, + posterior_eig, + vnmc_eig, +) +from pyro.contrib.util import iter_plates_to_shape +from tests.common import assert_equal + + +@pytest.fixture +def finite_space_model(): + def model(design): + batch_shape = design.shape + with ExitStack() as stack: + for plate in iter_plates_to_shape(batch_shape): + stack.enter_context(plate) + theta = pyro.sample("theta", dist.Bernoulli(0.4).expand(batch_shape)) + y = pyro.sample("y", dist.Bernoulli((design + theta) / 2.0)) + return y + + return model + + +@pytest.fixture +def one_point_design(): + return torch.tensor(0.5) + + +@pytest.fixture +def true_eig(): + return torch.tensor(0.12580366909478014) + + +def posterior_guide(y_dict, design, observation_labels, target_labels): + y = torch.cat(list(y_dict.values()), dim=-1) + a, b = pyro.param("a", torch.tensor(0.0)), pyro.param("b", torch.tensor(0.0)) + pyro.sample("theta", dist.Bernoulli(logits=a + b * y)) + + +def marginal_guide(design, observation_labels, target_labels): + logit_p = pyro.param("logit_p", torch.tensor(0.0)) + pyro.sample("y", dist.Bernoulli(logits=logit_p)) + + +def likelihood_guide(theta_dict, design, observation_labels, target_labels): + theta = torch.cat(list(theta_dict.values()), dim=-1) + a, b = pyro.param("a", torch.tensor(0.0)), pyro.param("b", torch.tensor(0.0)) + pyro.sample("y", dist.Bernoulli(logits=a + b * theta)) + + +def make_lfire_classifier(n_theta_samples): + def lfire_classifier(design, trace, observation_labels, target_labels): + y_dict = {l: trace.nodes[l]["value"] for l in observation_labels} + y = torch.cat(list(y_dict.values()), dim=-1) + a, b = pyro.param("a", torch.zeros(n_theta_samples)), pyro.param( + "b", torch.zeros(n_theta_samples) + ) + + return a + b * y + + return lfire_classifier + + +def dv_critic(design, trace, observation_labels, target_labels): + y_dict = {l: trace.nodes[l]["value"] for l in observation_labels} + y = torch.cat(list(y_dict.values()), dim=-1) + theta_dict = {l: trace.nodes[l]["value"] for l in target_labels} + theta = torch.cat(list(theta_dict.values()), dim=-1) + + w_y = pyro.param("w_y", torch.tensor(0.0)) + w_theta = pyro.param("w_theta", torch.tensor(0.0)) + w_ytheta = pyro.param("w_ytheta", torch.tensor(0.0)) + + return y * w_y + theta * w_theta + y * theta * w_ytheta + + +######################################################################################################################## +# TESTS +######################################################################################################################## + + +def test_posterior_finite_space_model(finite_space_model, one_point_design, true_eig): + pyro.set_rng_seed(42) + pyro.clear_param_store() + # Pre-train (large learning rate) + posterior_eig( + finite_space_model, + one_point_design, + "y", + "theta", + num_samples=10, + num_steps=250, + guide=posterior_guide, + optim=optim.Adam({"lr": 0.1}), + ) + # Finesse (small learning rate) + estimated_eig = posterior_eig( + finite_space_model, + one_point_design, + "y", + "theta", + num_samples=10, + num_steps=250, + guide=posterior_guide, + optim=optim.Adam({"lr": 0.01}), + final_num_samples=1000, + ) + assert_equal(estimated_eig, true_eig, prec=1e-2) + + +def test_marginal_finite_space_model(finite_space_model, one_point_design, true_eig): + pyro.set_rng_seed(42) + pyro.clear_param_store() + # Pre-train (large learning rate) + marginal_eig( + finite_space_model, + one_point_design, + "y", + "theta", + num_samples=10, + num_steps=250, + guide=marginal_guide, + optim=optim.Adam({"lr": 0.1}), + ) + # Finesse (small learning rate) + estimated_eig = marginal_eig( + finite_space_model, + one_point_design, + "y", + "theta", + num_samples=10, + num_steps=250, + guide=marginal_guide, + optim=optim.Adam({"lr": 0.01}), + final_num_samples=1000, + ) + assert_equal(estimated_eig, true_eig, prec=1e-2) + + +def test_marginal_likelihood_finite_space_model( + finite_space_model, one_point_design, true_eig +): + pyro.set_rng_seed(42) + pyro.clear_param_store() + # Pre-train (large learning rate) + marginal_likelihood_eig( + finite_space_model, + one_point_design, + "y", + "theta", + num_samples=10, + num_steps=250, + marginal_guide=marginal_guide, + cond_guide=likelihood_guide, + optim=optim.Adam({"lr": 0.1}), + ) + # Finesse (small learning rate) + estimated_eig = marginal_likelihood_eig( + finite_space_model, + one_point_design, + "y", + "theta", + num_samples=10, + num_steps=250, + marginal_guide=marginal_guide, + cond_guide=likelihood_guide, + optim=optim.Adam({"lr": 0.01}), + final_num_samples=1000, + ) + assert_equal(estimated_eig, true_eig, prec=1e-2) + + +@pytest.mark.xfail( + reason="Bernoullis are not reparametrizable and current VNMC implementation " + "assumes reparametrization" +) +def test_vnmc_finite_space_model(finite_space_model, one_point_design, true_eig): + pyro.set_rng_seed(42) + pyro.clear_param_store() + # Pre-train (large learning rate) + vnmc_eig( + finite_space_model, + one_point_design, + "y", + "theta", + num_samples=[9, 3], + num_steps=250, + guide=posterior_guide, + optim=optim.Adam({"lr": 0.1}), + ) + # Finesse (small learning rate) + estimated_eig = vnmc_eig( + finite_space_model, + one_point_design, + "y", + "theta", + num_samples=[9, 3], + num_steps=250, + guide=posterior_guide, + optim=optim.Adam({"lr": 0.01}), + final_num_samples=[1000, 100], + ) + assert_equal(estimated_eig, true_eig, prec=1e-2) + + +def test_nmc_eig_finite_space_model(finite_space_model, one_point_design, true_eig): + pyro.set_rng_seed(42) + pyro.clear_param_store() + estimated_eig = nmc_eig( + finite_space_model, one_point_design, "y", "theta", M=40, N=40 * 40 + ) + assert_equal(estimated_eig, true_eig, prec=1e-2) + + +def test_lfire_finite_space_model(finite_space_model, one_point_design, true_eig): + pyro.set_rng_seed(42) + pyro.clear_param_store() + estimated_eig = lfire_eig( + finite_space_model, + one_point_design, + "y", + "theta", + num_y_samples=5, + num_theta_samples=50, + num_steps=1000, + classifier=make_lfire_classifier(50), + optim=optim.Adam({"lr": 0.0025}), + final_num_samples=500, + ) + assert_equal(estimated_eig, true_eig, prec=1e-2) + + +def test_dv_finite_space_model(finite_space_model, one_point_design, true_eig): + pyro.set_rng_seed(42) + pyro.clear_param_store() + donsker_varadhan_eig( + finite_space_model, + one_point_design, + "y", + "theta", + num_samples=100, + num_steps=250, + T=dv_critic, + optim=optim.Adam({"lr": 0.1}), + ) + estimated_eig = donsker_varadhan_eig( + finite_space_model, + one_point_design, + "y", + "theta", + num_samples=100, + num_steps=250, + T=dv_critic, + optim=optim.Adam({"lr": 0.01}), + final_num_samples=2000, + ) + assert_equal(estimated_eig, true_eig, prec=1e-2) diff --git a/pyro/source/tests/contrib/oed/test_glmm.py b/pyro/source/tests/contrib/oed/test_glmm.py new file mode 100644 index 0000000000000000000000000000000000000000..f8078a44bc985faf4ae27c8407b58d73757ce00d --- /dev/null +++ b/pyro/source/tests/contrib/oed/test_glmm.py @@ -0,0 +1,177 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch +from torch.distributions.transforms import AffineTransform, SigmoidTransform + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.contrib.oed.glmm import ( + group_linear_model, + known_covariance_linear_model, + logistic_regression_model, + normal_inverse_gamma_linear_model, + sigmoid_model, + zero_mean_unit_obs_sd_lm, +) +from tests.common import assert_equal + + +def lm_2p_10_10_1(design): + w = pyro.sample( + "w", dist.Normal(torch.tensor(0.0), torch.tensor([10.0, 10.0])).to_event(1) + ) + mean = torch.matmul(design, w.unsqueeze(-1)).squeeze(-1) + y = pyro.sample("y", dist.Normal(mean, torch.tensor(1.0)).to_event(1)) + return y + + +def lm_2p_10_10_1_w12(design): + w1 = pyro.sample( + "w1", dist.Normal(torch.tensor([0.0]), torch.tensor(10.0)).to_event(1) + ) + w2 = pyro.sample( + "w2", dist.Normal(torch.tensor([0.0]), torch.tensor(10.0)).to_event(1) + ) + w = torch.cat([w1, w2], dim=-1) + mean = torch.matmul(design, w.unsqueeze(-1)).squeeze(-1) + y = pyro.sample("y", dist.Normal(mean, torch.tensor(1.0)).to_event(1)) + return y + + +def nz_lm_2p_10_10_1(design): + w = pyro.sample( + "w", + dist.Normal(torch.tensor([1.0, -1.0]), torch.tensor([10.0, 10.0])).to_event(1), + ) + mean = torch.matmul(design, w.unsqueeze(-1)).squeeze(-1) + y = pyro.sample("y", dist.Normal(mean, torch.tensor(1.0)).to_event(1)) + return y + + +def normal_inv_gamma_2_2_10_10(design): + tau = pyro.sample("tau", dist.Gamma(torch.tensor(2.0), torch.tensor(2.0))) + obs_sd = 1.0 / torch.sqrt(tau) + w = pyro.sample( + "w", + dist.Normal( + torch.tensor([1.0, -1.0]), obs_sd * torch.tensor([10.0, 10.0]) + ).to_event(1), + ) + mean = torch.matmul(design, w.unsqueeze(-1)).squeeze(-1) + y = pyro.sample("y", dist.Normal(mean, torch.tensor(1.0)).to_event(1)) + return y + + +def lr_10_10(design): + w = pyro.sample( + "w", + dist.Normal(torch.tensor([1.0, -1.0]), torch.tensor([10.0, 10.0])).to_event(1), + ) + mean = torch.matmul(design, w.unsqueeze(-1)).squeeze(-1) + y = pyro.sample("y", dist.Bernoulli(logits=mean).to_event(1)) + return y + + +def sigmoid_example(design): + n = design.shape[-2] + random_effect_k = pyro.sample( + "k", dist.Gamma(2.0 * torch.ones(n), torch.tensor(2.0)) + ) + random_effect_offset = pyro.sample( + "w2", dist.Normal(torch.tensor(0.0), torch.ones(n)) + ) + w1 = pyro.sample( + "w1", + dist.Normal(torch.tensor([1.0, -1.0]), torch.tensor([10.0, 10.0])).to_event(1), + ) + mean = torch.matmul(design[..., :-2], w1.unsqueeze(-1)).squeeze(-1) + offset_mean = mean + random_effect_offset + + base_dist = dist.Normal(offset_mean, torch.tensor(1.0)).to_event(1) + transforms = [ + AffineTransform(loc=torch.tensor(0.0), scale=random_effect_k), + SigmoidTransform(), + ] + response_dist = dist.TransformedDistribution(base_dist, transforms) + y = pyro.sample("y", response_dist) + return y + + +@pytest.mark.parametrize( + "model1,model2,design", + [ + ( + zero_mean_unit_obs_sd_lm(torch.tensor([10.0, 10.0]))[0], + lm_2p_10_10_1, + torch.tensor([[1.0, -1.0]]), + ), + ( + lm_2p_10_10_1, + zero_mean_unit_obs_sd_lm(torch.tensor([10.0, 10.0]))[0], + torch.tensor([[100.0, -100.0]]), + ), + ( + group_linear_model( + torch.tensor(0.0), + torch.tensor([10.0]), + torch.tensor(0.0), + torch.tensor([10.0]), + torch.tensor(1.0), + ), + lm_2p_10_10_1_w12, + torch.tensor([[-1.5, 0.5], [1.5, 0.0]]), + ), + ( + known_covariance_linear_model( + torch.tensor([1.0, -1.0]), torch.tensor([10.0, 10.0]), torch.tensor(1.0) + ), + nz_lm_2p_10_10_1, + torch.tensor([[-1.0, 0.5], [2.5, -2.0]]), + ), + ( + normal_inverse_gamma_linear_model( + torch.tensor([1.0, -1.0]), + torch.tensor(0.1), + torch.tensor(2.0), + torch.tensor(2.0), + ), + normal_inv_gamma_2_2_10_10, + torch.tensor([[1.0, -0.5], [1.5, 2.0]]), + ), + ( + logistic_regression_model(torch.tensor([1.0, -1.0]), torch.tensor(10.0)), + lr_10_10, + torch.tensor([[6.0, -1.5], [0.5, 0.0]]), + ), + ( + sigmoid_model( + torch.tensor([1.0, -1.0]), + torch.tensor([10.0, 10.0]), + torch.tensor(0.0), + torch.tensor([1.0, 1.0]), + torch.tensor(1.0), + torch.tensor(2.0), + torch.tensor(2.0), + torch.eye(2), + ), + sigmoid_example, + torch.cat([torch.tensor([[1.0, 1.0], [0.5, -2.5]]), torch.eye(2)], dim=-1), + ), + ], +) +def test_log_prob_matches(model1, model2, design): + trace = poutine.trace(model1).get_trace(design) + trace.compute_log_prob() + ks = [k for k in trace.nodes.keys() if not k.startswith("_")] + data = {l: trace.nodes[l]["value"] for l in ks} + lp = {l: trace.nodes[l]["log_prob"] for l in ks} + cond_model = pyro.condition(model2, data=data) + cond_trace = poutine.trace(cond_model).get_trace(design) + cond_trace.compute_log_prob() + assert trace.nodes.keys() == cond_trace.nodes.keys() + lp2 = {l: trace.nodes[l]["log_prob"] for l in ks} + for l in lp.keys(): + assert_equal(lp[l], lp2[l]) diff --git a/pyro/source/tests/contrib/oed/test_linear_models_eig.py b/pyro/source/tests/contrib/oed/test_linear_models_eig.py new file mode 100644 index 0000000000000000000000000000000000000000..a6cfa67e91dff3147d9894e16ca528e6f31562a2 --- /dev/null +++ b/pyro/source/tests/contrib/oed/test_linear_models_eig.py @@ -0,0 +1,313 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +import pyro +import pyro.distributions as dist +import pyro.optim as optim +from pyro.contrib.oed.eig import ( + donsker_varadhan_eig, + laplace_eig, + lfire_eig, + marginal_eig, + marginal_likelihood_eig, + nmc_eig, + posterior_eig, + vnmc_eig, +) +from pyro.contrib.oed.glmm import known_covariance_linear_model +from pyro.contrib.oed.glmm.guides import LinearModelLaplaceGuide +from pyro.contrib.oed.util import linear_model_ground_truth +from pyro.contrib.util import rmv, rvv +from pyro.infer import Trace_ELBO +from tests.common import assert_equal + + +@pytest.fixture +def linear_model(): + return known_covariance_linear_model( + coef_means=torch.tensor(0.0), + coef_sds=torch.tensor([1.0, 1.5]), + observation_sd=torch.tensor(1.0), + ) + + +@pytest.fixture +def one_point_design(): + X = torch.zeros(3, 2) + X[0, 0] = X[1, 1] = X[2, 1] = 1.0 + return X + + +def posterior_guide(y_dict, design, observation_labels, target_labels): + y = torch.cat(list(y_dict.values()), dim=-1) + A = pyro.param("A", torch.zeros(2, 3)) + scale_tril = pyro.param( + "scale_tril", + torch.tensor([[1.0, 0.0], [0.0, 1.5]]), + constraint=torch.distributions.constraints.lower_cholesky, + ) + mu = rmv(A, y) + pyro.sample("w", dist.MultivariateNormal(mu, scale_tril=scale_tril)) + + +def marginal_guide(design, observation_labels, target_labels): + mu = pyro.param("mu", torch.zeros(3)) + scale_tril = pyro.param( + "scale_tril", + torch.eye(3), + constraint=torch.distributions.constraints.lower_cholesky, + ) + pyro.sample("y", dist.MultivariateNormal(mu, scale_tril=scale_tril)) + + +def likelihood_guide(theta_dict, design, observation_labels, target_labels): + theta = torch.cat(list(theta_dict.values()), dim=-1) + centre = rmv(design, theta) + + # Need to avoid name collision here + mu = pyro.param("mu_l", torch.zeros(3)) + scale_tril = pyro.param( + "scale_tril_l", + torch.eye(3), + constraint=torch.distributions.constraints.lower_cholesky, + ) + + pyro.sample("y", dist.MultivariateNormal(centre + mu, scale_tril=scale_tril)) + + +# The guide includes some features of the Laplace approximation that would be tiresome to copy across +laplace_guide = LinearModelLaplaceGuide(tuple(), {"w": 2}) + + +def make_lfire_classifier(n_theta_samples): + def lfire_classifier(design, trace, observation_labels, target_labels): + y_dict = {l: trace.nodes[l]["value"] for l in observation_labels} + y = torch.cat(list(y_dict.values()), dim=-1) + + quadratic_coef = pyro.param( + "quadratic_coef", torch.zeros(n_theta_samples, 3, 3) + ) + linear_coef = pyro.param("linear_coef", torch.zeros(n_theta_samples, 3)) + bias = pyro.param("bias", torch.zeros(n_theta_samples)) + + y_quadratic = y.unsqueeze(-1) * y.unsqueeze(-2) + return ( + (quadratic_coef * y_quadratic).sum(-1).sum(-1) + + (linear_coef * y).sum(-1) + + bias + ) + + return lfire_classifier + + +def dv_critic(design, trace, observation_labels, target_labels): + y_dict = {l: trace.nodes[l]["value"] for l in observation_labels} + theta_dict = {l: trace.nodes[l]["value"] for l in target_labels} + x = torch.cat(list(theta_dict.values()) + list(y_dict.values()), dim=-1) + + B = pyro.param("B", torch.zeros(5, 5)) + return rvv(x, rmv(B, x)) + + +######################################################################################################################## +# TESTS +######################################################################################################################## + + +def test_posterior_linear_model(linear_model, one_point_design): + pyro.set_rng_seed(42) + pyro.clear_param_store() + # Pre-train (large learning rate) + posterior_eig( + linear_model, + one_point_design, + "y", + "w", + num_samples=10, + num_steps=250, + guide=posterior_guide, + optim=optim.Adam({"lr": 0.1}), + ) + # Finesse (small learning rate) + estimated_eig = posterior_eig( + linear_model, + one_point_design, + "y", + "w", + num_samples=10, + num_steps=250, + guide=posterior_guide, + optim=optim.Adam({"lr": 0.01}), + final_num_samples=500, + ) + expected_eig = linear_model_ground_truth(linear_model, one_point_design, "y", "w") + assert_equal(estimated_eig, expected_eig, prec=5e-2) + + +def test_marginal_linear_model(linear_model, one_point_design): + pyro.set_rng_seed(42) + pyro.clear_param_store() + # Pre-train (large learning rate) + marginal_eig( + linear_model, + one_point_design, + "y", + "w", + num_samples=10, + num_steps=250, + guide=marginal_guide, + optim=optim.Adam({"lr": 0.1}), + ) + # Finesse (small learning rate) + estimated_eig = marginal_eig( + linear_model, + one_point_design, + "y", + "w", + num_samples=10, + num_steps=250, + guide=marginal_guide, + optim=optim.Adam({"lr": 0.01}), + final_num_samples=500, + ) + expected_eig = linear_model_ground_truth(linear_model, one_point_design, "y", "w") + assert_equal(estimated_eig, expected_eig, prec=5e-2) + + +def test_marginal_likelihood_linear_model(linear_model, one_point_design): + pyro.set_rng_seed(42) + pyro.clear_param_store() + # Pre-train (large learning rate) + marginal_likelihood_eig( + linear_model, + one_point_design, + "y", + "w", + num_samples=10, + num_steps=250, + marginal_guide=marginal_guide, + cond_guide=likelihood_guide, + optim=optim.Adam({"lr": 0.1}), + ) + # Finesse (small learning rate) + estimated_eig = marginal_likelihood_eig( + linear_model, + one_point_design, + "y", + "w", + num_samples=10, + num_steps=250, + marginal_guide=marginal_guide, + cond_guide=likelihood_guide, + optim=optim.Adam({"lr": 0.01}), + final_num_samples=500, + ) + expected_eig = linear_model_ground_truth(linear_model, one_point_design, "y", "w") + assert_equal(estimated_eig, expected_eig, prec=5e-2) + + +def test_vnmc_linear_model(linear_model, one_point_design): + pyro.set_rng_seed(42) + pyro.clear_param_store() + # Pre-train (large learning rate) + vnmc_eig( + linear_model, + one_point_design, + "y", + "w", + num_samples=[9, 3], + num_steps=250, + guide=posterior_guide, + optim=optim.Adam({"lr": 0.1}), + ) + # Finesse (small learning rate) + estimated_eig = vnmc_eig( + linear_model, + one_point_design, + "y", + "w", + num_samples=[9, 3], + num_steps=250, + guide=posterior_guide, + optim=optim.Adam({"lr": 0.01}), + final_num_samples=[500, 100], + ) + expected_eig = linear_model_ground_truth(linear_model, one_point_design, "y", "w") + assert_equal(estimated_eig, expected_eig, prec=5e-2) + + +def test_nmc_eig_linear_model(linear_model, one_point_design): + pyro.set_rng_seed(42) + pyro.clear_param_store() + estimated_eig = nmc_eig(linear_model, one_point_design, "y", "w", M=60, N=60 * 60) + expected_eig = linear_model_ground_truth(linear_model, one_point_design, "y", "w") + assert_equal(estimated_eig, expected_eig, prec=5e-2) + + +def test_laplace_linear_model(linear_model, one_point_design): + pyro.set_rng_seed(42) + pyro.clear_param_store() + # You can use 1 final sample here because linear models have a posterior entropy that is independent of `y` + estimated_eig = laplace_eig( + linear_model, + one_point_design, + "y", + "w", + guide=laplace_guide, + num_steps=250, + final_num_samples=1, + optim=optim.Adam({"lr": 0.05}), + loss=Trace_ELBO().differentiable_loss, + ) + expected_eig = linear_model_ground_truth(linear_model, one_point_design, "y", "w") + assert_equal(estimated_eig, expected_eig, prec=5e-2) + + +def test_lfire_linear_model(linear_model, one_point_design): + pyro.set_rng_seed(42) + pyro.clear_param_store() + estimated_eig = lfire_eig( + linear_model, + one_point_design, + "y", + "w", + num_y_samples=2, + num_theta_samples=50, + num_steps=1200, + classifier=make_lfire_classifier(50), + optim=optim.Adam({"lr": 0.0025}), + final_num_samples=100, + ) + expected_eig = linear_model_ground_truth(linear_model, one_point_design, "y", "w") + assert_equal(estimated_eig, expected_eig, prec=5e-2) + + +def test_dv_linear_model(linear_model, one_point_design): + pyro.set_rng_seed(42) + pyro.clear_param_store() + donsker_varadhan_eig( + linear_model, + one_point_design, + "y", + "w", + num_samples=100, + num_steps=500, + T=dv_critic, + optim=optim.Adam({"lr": 0.1}), + ) + estimated_eig = donsker_varadhan_eig( + linear_model, + one_point_design, + "y", + "w", + num_samples=100, + num_steps=650, + T=dv_critic, + optim=optim.Adam({"lr": 0.001}), + final_num_samples=2000, + ) + expected_eig = linear_model_ground_truth(linear_model, one_point_design, "y", "w") + assert_equal(estimated_eig, expected_eig, prec=5e-2) diff --git a/pyro/source/tests/contrib/oed/test_xexpx.py b/pyro/source/tests/contrib/oed/test_xexpx.py new file mode 100644 index 0000000000000000000000000000000000000000..4d22515286535363fa95d29a02e82de6daf013fb --- /dev/null +++ b/pyro/source/tests/contrib/oed/test_xexpx.py @@ -0,0 +1,19 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +from pyro.contrib.oed.eig import xexpx + + +@pytest.mark.parametrize( + "argument,output", + [ + (torch.tensor([float("-inf")]), torch.tensor([0.0])), + (torch.tensor([0.0]), torch.tensor([0.0])), + (torch.tensor([1.0]), torch.exp(torch.tensor([1.0]))), + ], +) +def test_xexpx(argument, output): + assert xexpx(argument) == output diff --git a/pyro/source/tests/contrib/randomvariable/test_random_variable.py b/pyro/source/tests/contrib/randomvariable/test_random_variable.py new file mode 100644 index 0000000000000000000000000000000000000000..2887bdc9dccbf7c5b34f455ab9193d9bfad0e689 --- /dev/null +++ b/pyro/source/tests/contrib/randomvariable/test_random_variable.py @@ -0,0 +1,83 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import torch + +from pyro.distributions import Uniform + +N_SAMPLES = 100 + + +def test_add(): + X = Uniform(0, 1).rv # (0, 1) + X = X + 1 # (1, 2) + X = 1 + X # (2, 3) + X += 1 # (3, 4) + x = X.dist.sample([N_SAMPLES]) + assert ((3 <= x) & (x <= 4)).all().item() + + +def test_subtract(): + X = Uniform(0, 1).rv # (0, 1) + X = 1 - X # (0, 1) + X = X - 1 # (-1, 0) + X -= 1 # (-2, -1) + x = X.dist.sample([N_SAMPLES]) + assert ((-2 <= x) & (x <= -1)).all().item() + + +def test_multiply_divide(): + X = Uniform(0, 1).rv # (0, 1) + X *= 4 # (0, 4) + X /= 2 # (0, 2) + x = X.dist.sample([N_SAMPLES]) + assert ((0 <= x) & (x <= 2)).all().item() + + +def test_abs(): + X = Uniform(0, 1).rv # (0, 1) + X = 2 * (X - 0.5) # (-1, 1) + X = abs(X) # (0, 1) + x = X.dist.sample([N_SAMPLES]) + assert ((0 <= x) & (x <= 1)).all().item() + + +def test_neg(): + X = Uniform(0, 1).rv # (0, 1) + X = -X # (-1, 0) + x = X.dist.sample([N_SAMPLES]) + assert ((-1 <= x) & (x <= 0)).all().item() + + +def test_pow(): + X = Uniform(0, 1).rv # (0, 1) + X = X**2 # (0, 1) + x = X.dist.sample([N_SAMPLES]) + assert ((0 <= x) & (x <= 1)).all().item() + + +def test_tensor_ops(): + pi = 3.141592654 + X = Uniform(0, 1).expand([5, 5]).rv + a = torch.tensor([[1, 2, 3, 4, 5]]) + b = a.T + X = abs(pi * (-X + a - 3 * b)) + x = X.dist.sample() + assert x.shape == (5, 5) + assert (x >= 0).all().item() + + +def test_chaining(): + X = ( + Uniform(0, 1) + .rv.add(1) # (0, 1) # (1, 2) + .pow(2) # (1, 4) + .mul(2) # (2, 8) + .sub(5) # (-3, 3) + .tanh() # (-1, 1); more like (-0.995, +0.995) + .exp() # (1/e, e) + ) + x = X.dist.sample([N_SAMPLES]) + assert ((1 / math.e <= x) & (x <= math.e)).all().item() diff --git a/pyro/source/tests/contrib/test_hessian.py b/pyro/source/tests/contrib/test_hessian.py new file mode 100644 index 0000000000000000000000000000000000000000..4fc7c3df18568d94cc8d72ba0e645b5fec60bf4d --- /dev/null +++ b/pyro/source/tests/contrib/test_hessian.py @@ -0,0 +1,31 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +import pyro.distributions as dist +from pyro.ops.hessian import hessian +from tests.common import assert_equal + + +def test_hessian_mvn(): + tmp = torch.randn(3, 10) + cov = torch.matmul(tmp, tmp.t()) + mvn = dist.MultivariateNormal(cov.new_zeros(3), cov) + + x = torch.randn(3, requires_grad=True) + y = mvn.log_prob(x) + assert_equal(hessian(y, x), -mvn.precision_matrix) + + +def test_hessian_multi_variables(): + x = torch.randn(3, requires_grad=True) + z = torch.randn(3, requires_grad=True) + y = (x**2 * z + z**3).sum() + + H = hessian(y, (x, z)) + Hxx = (2 * z).diag() + Hxz = (2 * x).diag() + Hzz = (6 * z).diag() + target_H = torch.cat([torch.cat([Hxx, Hxz]), torch.cat([Hxz, Hzz])], dim=1) + assert_equal(H, target_H) diff --git a/pyro/source/tests/contrib/test_minipyro.py b/pyro/source/tests/contrib/test_minipyro.py new file mode 100644 index 0000000000000000000000000000000000000000..d3381ab43a1504efaee5f1455aa0cee29efd481c --- /dev/null +++ b/pyro/source/tests/contrib/test_minipyro.py @@ -0,0 +1,260 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import warnings + +import pytest +import torch +from pytest import approx +from torch.distributions import constraints + +from pyro.generic import distributions as dist +from pyro.generic import infer, ops, optim, pyro, pyro_backend +from tests.common import assert_close, xfail_param + +# This file tests a variety of model,guide pairs with valid and invalid structure. +# See https://github.com/pyro-ppl/pyro/blob/0.3.1/tests/infer/test_valid_models.py + + +def build_svi(model, guide, elbo): + pyro.get_param_store().clear() + adam = optim.Adam({"lr": 1e-6}) + return infer.SVI(model, guide, adam, elbo) + + +def assert_ok(model, guide, elbo, steps=2, *args, **kwargs): + """ + Assert that inference works without warnings or errors. + """ + inference = build_svi(model, guide, elbo) + for i in range(steps): + inference.step(*args, **kwargs) + + +def assert_error(model, guide, elbo, match=None): + """ + Assert that inference fails with an error. + """ + inference = build_svi(model, guide, elbo) + with pytest.raises( + (NotImplementedError, UserWarning, KeyError, ValueError, RuntimeError), + match=match, + ): + inference.step() + + +def assert_warning(model, guide, elbo): + """ + Assert that inference works but with a warning. + """ + inference = build_svi(model, guide, elbo) + with warnings.catch_warnings(record=True) as w: + warnings.simplefilter("always") + inference.step() + assert len(w), "No warnings were raised" + for warning in w: + print(warning) + + +def constrained_model(data): + locs = pyro.param("locs", torch.randn(3), constraint=constraints.real) + scales = pyro.param( + "scales", ops.exp(torch.randn(3)), constraint=constraints.positive + ) + p = torch.tensor([0.5, 0.3, 0.2]) + x = pyro.sample("x", dist.Categorical(p)) + pyro.sample("obs", dist.Normal(locs[x], scales[x]), obs=data) + + +def guide_constrained_model(data): + q = pyro.param("q", ops.exp(torch.randn(3)), constraint=constraints.simplex) + pyro.sample("x", dist.Categorical(q)) + + +@pytest.mark.parametrize("backend", ["pyro", "minipyro"]) +def test_generate_data(backend): + def model(data=None): + loc = pyro.param("loc", torch.tensor(2.0)) + scale = pyro.param("scale", torch.tensor(1.0)) + x = pyro.sample("x", dist.Normal(loc, scale), obs=data) + return x + + with pyro_backend(backend): + data = model().data + assert data.shape == () + + +@pytest.mark.parametrize("backend", ["pyro", "minipyro"]) +def test_generate_data_plate(backend): + num_points = 1000 + expected_mean = 2.0 + + def model(data=None): + loc = pyro.param("loc", torch.tensor(expected_mean)) + scale = pyro.param("scale", torch.tensor(1.0)) + with pyro.plate("data", 1000, dim=-1): + x = pyro.sample("x", dist.Normal(loc, scale), obs=data) + return x + + with pyro_backend(backend): + data = model().data + assert data.shape == (num_points,) + mean = float(ops.sum(data)) / num_points + assert mean == approx(expected_mean, abs=0.1) + + +@pytest.mark.parametrize("jit", [False, True], ids=["py", "jit"]) +@pytest.mark.parametrize("backend", ["pyro", "minipyro"]) +def test_nonempty_model_empty_guide_ok(backend, jit): + def model(data): + loc = pyro.param("loc", torch.tensor(0.0)) + pyro.sample("x", dist.Normal(loc, 1.0), obs=data) + + def guide(data): + pass + + data = torch.tensor(2.0) + with pyro_backend(backend): + Elbo = infer.JitTrace_ELBO if jit else infer.Trace_ELBO + elbo = Elbo(ignore_jit_warnings=True) + steps = 2 + assert_ok(model, guide, elbo, steps, data) + + +@pytest.mark.parametrize("jit", [False, True], ids=["py", "jit"]) +@pytest.mark.parametrize("backend", ["pyro", "minipyro"]) +def test_plate_ok(backend, jit): + data = torch.randn(10) + + def model(): + locs = pyro.param("locs", torch.tensor([0.2, 0.3, 0.5])) + p = torch.tensor([0.2, 0.3, 0.5]) + with pyro.plate("plate", len(data), dim=-1): + x = pyro.sample("x", dist.Categorical(p)) + pyro.sample("obs", dist.Normal(locs[x], 1.0), obs=data) + + def guide(): + p = pyro.param("p", torch.tensor([0.5, 0.3, 0.2])) + with pyro.plate("plate", len(data), dim=-1): + pyro.sample("x", dist.Categorical(p)) + + with pyro_backend(backend): + elbo_factory = infer.JitTrace_ELBO if jit else infer.Trace_ELBO + elbo = elbo_factory(ignore_jit_warnings=True) + assert_ok(model, guide, elbo) + + +@pytest.mark.parametrize("jit", [False, True], ids=["py", "jit"]) +@pytest.mark.parametrize("backend", ["pyro", "minipyro"]) +def test_nested_plate_plate_ok(backend, jit): + data = torch.randn(2, 3) + + def model(): + loc = torch.tensor(3.0) + with pyro.plate("plate_outer", data.size(-1), dim=-1): + x = pyro.sample("x", dist.Normal(loc, 1.0)) + with pyro.plate("plate_inner", data.size(-2), dim=-2): + pyro.sample("y", dist.Normal(x, 1.0), obs=data) + + def guide(): + loc = pyro.param("loc", torch.tensor(0.0)) + scale = pyro.param("scale", torch.tensor(1.0)) + with pyro.plate("plate_outer", data.size(-1), dim=-1): + pyro.sample("x", dist.Normal(loc, scale)) + + with pyro_backend(backend): + Elbo = infer.JitTrace_ELBO if jit else infer.Trace_ELBO + elbo = Elbo(ignore_jit_warnings=True) + assert_ok(model, guide, elbo) + + +@pytest.mark.parametrize("jit", [False, True], ids=["py", "jit"]) +@pytest.mark.parametrize( + "backend", + [ + "pyro", + xfail_param("minipyro", reason="not implemented"), + ], +) +def test_local_param_ok(backend, jit): + data = torch.randn(10) + + def model(): + locs = pyro.param("locs", torch.tensor([-1.0, 0.0, 1.0])) + with pyro.plate("plate", len(data), dim=-1): + x = pyro.sample("x", dist.Categorical(torch.ones(3) / 3)) + pyro.sample("obs", dist.Normal(locs[x], 1.0), obs=data) + + def guide(): + with pyro.plate("plate", len(data), dim=-1): + p = pyro.param("p", torch.ones(len(data), 3) / 3, event_dim=1) + pyro.sample("x", dist.Categorical(p)) + return p + + with pyro_backend(backend): + Elbo = infer.JitTrace_ELBO if jit else infer.Trace_ELBO + elbo = Elbo(ignore_jit_warnings=True) + assert_ok(model, guide, elbo) + + # Check that pyro.param() can be called without init_value. + expected = guide() + actual = pyro.param("p") + assert_close(actual, expected) + + +@pytest.mark.parametrize("jit", [False, True], ids=["py", "jit"]) +@pytest.mark.parametrize("backend", ["pyro", "minipyro"]) +def test_constraints(backend, jit): + data = torch.tensor(0.5) + + with pyro_backend(backend): + Elbo = infer.JitTrace_ELBO if jit else infer.Trace_ELBO + elbo = Elbo(ignore_jit_warnings=True) + steps = 2 + assert_ok(constrained_model, guide_constrained_model, elbo, steps, data) + + +@pytest.mark.parametrize("backend", ["pyro", "minipyro"]) +def test_elbo_jit(backend): + """ + Given model and guide + After 15 iterations of + SVI, JitTrace_ELBO yield + similar results for both pyro and minipyro. + This is a relaxed assertion over + the one reached in test_elbo_equivalence + Note: 15 is the minimun number for iterations for this + to happen. + """ + pyro.set_rng_seed(0) + data = torch.tensor(0.5) + elbo_test_case(backend, jit=True, expected_elbo=0.4780, data=data, steps=50) + + +@pytest.mark.parametrize( + ["backend", "jit"], [("pyro", True), ("pyro", False), ("minipyro", False)] +) +def test_elbo_equivalence(backend, jit): + """ + Given model and guide + Calculating the elbo yields equivalent results + """ + pyro.set_rng_seed(0) + data = torch.tensor(0.5) + elbo_test_case(backend, jit, expected_elbo=0.4780, data=data) + + +def elbo_test_case(backend, jit, expected_elbo, data, steps=None): + if torch.__version__.startswith("2"): + pytest.xfail(reason="https://github.com/pyro-ppl/pyro/issues/3221") + with pyro_backend(backend): + Elbo = infer.JitTrace_ELBO if jit else infer.Trace_ELBO + elbo = Elbo(ignore_jit_warnings=True) + if steps: + assert_ok(constrained_model, guide_constrained_model, elbo, steps, data) + if backend == "pyro": + # TODO: this is a difference between the two implementations + elbo = elbo.loss + with torch.no_grad(): + actual = elbo(constrained_model, guide_constrained_model, data) + assert actual == approx(expected_elbo, rel=0.1) diff --git a/pyro/source/tests/contrib/test_util.py b/pyro/source/tests/contrib/test_util.py new file mode 100644 index 0000000000000000000000000000000000000000..bb122f021d6d23f8a09157f8b9a88a731a20c0a1 --- /dev/null +++ b/pyro/source/tests/contrib/test_util.py @@ -0,0 +1,98 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from collections import OrderedDict + +import pytest +import torch + +from pyro.contrib.util import ( + get_indices, + lexpand, + rdiag, + rexpand, + rmv, + rtril, + rvv, + tensor_to_dict, +) +from tests.common import assert_equal + + +def test_get_indices_sizes(): + sizes = OrderedDict([("a", 2), ("b", 2), ("c", 2)]) + assert_equal(get_indices(["b"], sizes=sizes), torch.tensor([2, 3])) + assert_equal(get_indices(["b", "c"], sizes=sizes), torch.tensor([2, 3, 4, 5])) + tensors = OrderedDict( + [("a", torch.ones(2)), ("b", torch.ones(2)), ("c", torch.ones(2))] + ) + assert_equal(get_indices(["b"], tensors=tensors), torch.tensor([2, 3])) + assert_equal(get_indices(["b", "c"], tensors=tensors), torch.tensor([2, 3, 4, 5])) + + +def test_tensor_to_dict(): + sizes = OrderedDict([("a", 2), ("b", 2), ("c", 2)]) + vector = torch.tensor([1.0, 2, 3, 4, 5, 6]) + assert_equal( + tensor_to_dict(sizes, vector), + { + "a": torch.tensor([1.0, 2.0]), + "b": torch.tensor([3.0, 4.0]), + "c": torch.tensor([5.0, 6.0]), + }, + ) + assert_equal( + tensor_to_dict(sizes, vector, subset=["b"]), {"b": torch.tensor([3.0, 4.0])} + ) + + +@pytest.mark.parametrize( + "A,b", [(torch.tensor([[1.0, 2.0], [2.0, -3.0]]), torch.tensor([-1.0, 2.0]))] +) +def test_rmv(A, b): + assert_equal(rmv(A, b), A.mv(b), prec=1e-8) + batched_A = lexpand(A, 5, 4) + batched_b = lexpand(b, 5, 4) + expected_Ab = lexpand(A.mv(b), 5, 4) + assert_equal(rmv(batched_A, batched_b), expected_Ab, prec=1e-8) + + +@pytest.mark.parametrize("a,b", [(torch.tensor([1.0, 2.0]), torch.tensor([-1.0, 2.0]))]) +def test_rvv(a, b): + assert_equal(rvv(a, b), torch.dot(a, b), prec=1e-8) + batched_a = lexpand(a, 5, 4) + batched_b = lexpand(b, 5, 4) + expected_ab = lexpand(torch.dot(a, b), 5, 4) + assert_equal(rvv(batched_a, batched_b), expected_ab, prec=1e-8) + + +def test_lexpand(): + A = torch.tensor([[1.0, 2.0], [-2.0, 0]]) + assert_equal(lexpand(A), A, prec=1e-8) + assert_equal(lexpand(A, 4), A.expand(4, 2, 2), prec=1e-8) + assert_equal(lexpand(A, 4, 2), A.expand(4, 2, 2, 2), prec=1e-8) + + +def test_rexpand(): + A = torch.tensor([[1.0, 2.0], [-2.0, 0]]) + assert_equal(rexpand(A), A, prec=1e-8) + assert_equal(rexpand(A, 4), A.unsqueeze(-1).expand(2, 2, 4), prec=1e-8) + assert_equal( + rexpand(A, 4, 2), A.unsqueeze(-1).unsqueeze(-1).expand(2, 2, 4, 2), prec=1e-8 + ) + + +def test_rtril(): + A = torch.tensor([[1.0, 2.0], [-2.0, 0]]) + assert_equal(rtril(A), torch.tril(A), prec=1e-8) + expanded = lexpand(A, 5, 4) + expected = lexpand(torch.tril(A), 5, 4) + assert_equal(rtril(expanded), expected, prec=1e-8) + + +def test_rdiag(): + v = torch.tensor([1.0, 2.0, -1.0]) + assert_equal(rdiag(v), torch.diag(v), prec=1e-8) + expanded = lexpand(v, 5, 4) + expeceted = lexpand(torch.diag(v), 5, 4) + assert_equal(rdiag(expanded), expeceted, prec=1e-8) diff --git a/pyro/source/tests/contrib/test_zuko.py b/pyro/source/tests/contrib/test_zuko.py new file mode 100644 index 0000000000000000000000000000000000000000..cee04c177be6f9fc860d4e66c38f6d74cffa0c5e --- /dev/null +++ b/pyro/source/tests/contrib/test_zuko.py @@ -0,0 +1,65 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + + +import pytest +import torch + +import pyro +from pyro.contrib.zuko import ZukoToPyro +from pyro.infer import SVI, Trace_ELBO +from pyro.optim import Adam + + +@pytest.mark.parametrize("multivariate", [True, False]) +@pytest.mark.parametrize("rsample_and_log_prob", [True, False]) +def test_ZukoToPyro(multivariate: bool, rsample_and_log_prob: bool): + # Distribution + if multivariate: + normal = torch.distributions.MultivariateNormal + mu = torch.zeros(3) + sigma = torch.eye(3) + else: + normal = torch.distributions.Normal + mu = torch.zeros(()) + sigma = torch.ones(()) + + dist = normal(mu, sigma) + + if rsample_and_log_prob: + + def dummy(self, shape): + x = self.rsample(shape) + return x, self.log_prob(x) + + dist.rsample_and_log_prob = dummy.__get__(dist) + + # Sample + x1 = pyro.sample("x1", ZukoToPyro(dist)) + + assert x1.shape == dist.event_shape + + # Sample within plate + with pyro.plate("data", 4): + x2 = pyro.sample("x2", ZukoToPyro(dist)) + + assert x2.shape == (4, *dist.event_shape) + + # SVI + def model(): + pyro.sample("a", ZukoToPyro(dist)) + + with pyro.plate("data", 4): + pyro.sample("b", ZukoToPyro(dist)) + + def guide(): + mu_ = pyro.param("mu", mu) + sigma_ = pyro.param("sigma", sigma) + + pyro.sample("a", ZukoToPyro(normal(mu_, sigma_))) + + with pyro.plate("data", 4): + pyro.sample("b", ZukoToPyro(normal(mu_, sigma_))) + + svi = SVI(model, guide, optim=Adam({"lr": 1e-3}), loss=Trace_ELBO()) + svi.step() diff --git a/pyro/source/tests/contrib/timeseries/test_gp.py b/pyro/source/tests/contrib/timeseries/test_gp.py new file mode 100644 index 0000000000000000000000000000000000000000..e931b2ef8d976e1a395e6a5937188282af3e19f5 --- /dev/null +++ b/pyro/source/tests/contrib/timeseries/test_gp.py @@ -0,0 +1,171 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import pytest +import torch + +import pyro +from pyro.contrib.timeseries import ( + DependentMaternGP, + GenericLGSSM, + GenericLGSSMWithGPNoiseModel, + IndependentMaternGP, + LinearlyCoupledMaternGP, +) +from pyro.ops.tensor_utils import block_diag_embed +from tests.common import assert_equal + + +@pytest.mark.parametrize( + "model,obs_dim,nu_statedim", + [ + ("ssmgp", 3, 1.5), + ("ssmgp", 2, 2.5), + ("lcmgp", 3, 1.5), + ("lcmgp", 2, 2.5), + ("imgp", 1, 0.5), + ("imgp", 2, 0.5), + ("imgp", 1, 1.5), + ("imgp", 3, 1.5), + ("imgp", 1, 2.5), + ("imgp", 3, 2.5), + ("dmgp", 1, 1.5), + ("dmgp", 2, 1.5), + ("dmgp", 3, 1.5), + ("glgssm", 1, 3), + ("glgssm", 3, 1), + ], +) +@pytest.mark.parametrize("T", [11, 37]) +def test_timeseries_models(model, nu_statedim, obs_dim, T): + torch.set_default_dtype(torch.float64) + dt = 0.1 + torch.rand(1).item() + + if model == "lcmgp": + num_gps = 2 + gp = LinearlyCoupledMaternGP( + nu=nu_statedim, + obs_dim=obs_dim, + dt=dt, + num_gps=num_gps, + length_scale_init=0.5 + torch.rand(num_gps), + kernel_scale_init=0.5 + torch.rand(num_gps), + obs_noise_scale_init=0.5 + torch.rand(obs_dim), + ) + elif model == "imgp": + gp = IndependentMaternGP( + nu=nu_statedim, + obs_dim=obs_dim, + dt=dt, + length_scale_init=0.5 + torch.rand(obs_dim), + kernel_scale_init=0.5 + torch.rand(obs_dim), + obs_noise_scale_init=0.5 + torch.rand(obs_dim), + ) + elif model == "glgssm": + gp = GenericLGSSM( + state_dim=nu_statedim, + obs_dim=obs_dim, + obs_noise_scale_init=0.5 + torch.rand(obs_dim), + ) + elif model == "ssmgp": + state_dim = {0.5: 4, 1.5: 3, 2.5: 2}[nu_statedim] + gp = GenericLGSSMWithGPNoiseModel( + nu=nu_statedim, + state_dim=state_dim, + obs_dim=obs_dim, + obs_noise_scale_init=0.5 + torch.rand(obs_dim), + ) + elif model == "dmgp": + linearly_coupled = bool(torch.rand(1).item() > 0.5) + gp = DependentMaternGP( + nu=nu_statedim, + obs_dim=obs_dim, + dt=dt, + linearly_coupled=linearly_coupled, + length_scale_init=0.5 + torch.rand(obs_dim), + ) + + targets = torch.randn(T, obs_dim) + gp_log_prob = gp.log_prob(targets) + if model == "imgp": + assert gp_log_prob.shape == (obs_dim,) + else: + assert gp_log_prob.dim() == 0 + + # compare matern log probs to vanilla GP result via multivariate normal + if model == "imgp": + times = dt * torch.arange(T).double() + for dim in range(obs_dim): + lengthscale = gp.kernel.length_scale[dim] + variance = gp.kernel.kernel_scale.pow(2)[dim] + obs_noise = gp.obs_noise_scale.pow(2)[dim] + + kernel = { + 0.5: pyro.contrib.gp.kernels.Exponential, + 1.5: pyro.contrib.gp.kernels.Matern32, + 2.5: pyro.contrib.gp.kernels.Matern52, + }[nu_statedim] + kernel = kernel(input_dim=1, lengthscale=lengthscale, variance=variance) + # XXX kernel(times) loads old parameters from param store + kernel = kernel.forward(times) + obs_noise * torch.eye(T) + + mvn = torch.distributions.MultivariateNormal(torch.zeros(T), kernel) + mvn_log_prob = mvn.log_prob(targets[:, dim]) + assert_equal(mvn_log_prob, gp_log_prob[dim], prec=1e-4) + + for S in [1, 5]: + if model in ["imgp", "lcmgp", "dmgp", "lcdgp"]: + dts = torch.rand(S).cumsum(dim=-1) + predictive = gp.forecast(targets, dts) + else: + predictive = gp.forecast(targets, S) + assert predictive.loc.shape == (S, obs_dim) + if model == "imgp": + assert predictive.scale.shape == (S, obs_dim) + # assert monotonic increase of predictive noise + if S > 1: + delta = predictive.scale[1:S, :] - predictive.scale[0 : S - 1, :] + assert (delta > 0.0).sum() == (S - 1) * obs_dim + else: + assert predictive.covariance_matrix.shape == (S, obs_dim, obs_dim) + # assert monotonic increase of predictive noise + if S > 1: + dets = predictive.covariance_matrix.det() + delta = dets[1:S] - dets[0 : S - 1] + assert (delta > 0.0).sum() == (S - 1) + + if model in ["imgp", "lcmgp", "dmgp", "lcdgp"]: + # the distant future + dts = torch.tensor([500.0]) + predictive = gp.forecast(targets, dts) + # assert mean reverting behavior for GP models + assert_equal(predictive.loc, torch.zeros(1, obs_dim)) + + +@pytest.mark.parametrize("obs_dim", [1, 3]) +def test_dependent_matern_gp(obs_dim): + dt = 0.5 + torch.rand(1).item() + gp = DependentMaternGP( + nu=1.5, obs_dim=obs_dim, dt=dt, length_scale_init=0.5 + torch.rand(obs_dim) + ) + + # make sure stationary covariance matrix satisfies the relevant + # matrix riccati equation + lengthscale = gp.kernel.length_scale.unsqueeze(-1).unsqueeze(-1) + F = torch.tensor([[0.0, 1.0], [0.0, 0.0]]) + mask1 = torch.tensor([[0.0, 0.0], [-3.0, 0.0]]) + mask2 = torch.tensor([[0.0, 0.0], [0.0, -math.sqrt(12.0)]]) + F = block_diag_embed(F + mask1 / lengthscale.pow(2.0) + mask2 / lengthscale) + + stat_cov = gp._stationary_covariance() + wiener_cov = gp._get_wiener_cov() + wiener_cov *= torch.tensor([[0.0, 0.0], [0.0, 1.0]]).repeat(obs_dim, obs_dim) + + expected_zero = ( + torch.matmul(F, stat_cov) + + torch.matmul(stat_cov, F.transpose(-1, -2)) + + wiener_cov + ) + assert_equal(expected_zero, torch.zeros(gp.full_state_dim, gp.full_state_dim)) diff --git a/pyro/source/tests/contrib/timeseries/test_lgssm.py b/pyro/source/tests/contrib/timeseries/test_lgssm.py new file mode 100644 index 0000000000000000000000000000000000000000..8d7c68ea70cf3ff907be07dc5a482e83e57085ce --- /dev/null +++ b/pyro/source/tests/contrib/timeseries/test_lgssm.py @@ -0,0 +1,98 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +from pyro.contrib.timeseries import GenericLGSSM, GenericLGSSMWithGPNoiseModel +from tests.common import assert_equal + + +@pytest.mark.parametrize("model_class", ["lgssm", "lgssmgp"]) +@pytest.mark.parametrize("state_dim", [2, 3]) +@pytest.mark.parametrize("obs_dim", [2, 4]) +@pytest.mark.parametrize("T", [11, 17]) +def test_generic_lgssm_forecast(model_class, state_dim, obs_dim, T): + torch.set_default_dtype(torch.float64) + + if model_class == "lgssm": + model = GenericLGSSM( + state_dim=state_dim, + obs_dim=obs_dim, + obs_noise_scale_init=0.1 + torch.rand(obs_dim), + ) + elif model_class == "lgssmgp": + model = GenericLGSSMWithGPNoiseModel( + state_dim=state_dim, + obs_dim=obs_dim, + nu=1.5, + obs_noise_scale_init=0.1 + torch.rand(obs_dim), + ) + # with these hyperparameters we essentially turn off the GP contributions + model.kernel.length_scale = 1.0e-6 * torch.ones(obs_dim) + model.kernel.kernel_scale = 1.0e-6 * torch.ones(obs_dim) + + targets = torch.randn(T, obs_dim) + filtering_state = model._filter(targets) + + actual_loc, actual_cov = model._forecast( + 3, filtering_state, include_observation_noise=False + ) + + obs_matrix = model.obs_matrix if model_class == "lgssm" else model.z_obs_matrix + trans_matrix = ( + model.trans_matrix if model_class == "lgssm" else model.z_trans_matrix + ) + trans_matrix_sq = torch.mm(trans_matrix, trans_matrix) + trans_matrix_cubed = torch.mm(trans_matrix_sq, trans_matrix) + + trans_obs = torch.mm(trans_matrix, obs_matrix) + trans_trans_obs = torch.mm(trans_matrix_sq, obs_matrix) + trans_trans_trans_obs = torch.mm(trans_matrix_cubed, obs_matrix) + + # we only compute contributions for the state space portion for lgssmgp + fs_loc = ( + filtering_state.loc + if model_class == "lgssm" + else filtering_state.loc[-state_dim:] + ) + + predicted_mean1 = torch.mm(fs_loc.unsqueeze(-2), trans_obs).squeeze(-2) + predicted_mean2 = torch.mm(fs_loc.unsqueeze(-2), trans_trans_obs).squeeze(-2) + predicted_mean3 = torch.mm(fs_loc.unsqueeze(-2), trans_trans_trans_obs).squeeze(-2) + + # check predicted means for 3 timesteps + assert_equal(actual_loc[0], predicted_mean1) + assert_equal(actual_loc[1], predicted_mean2) + assert_equal(actual_loc[2], predicted_mean3) + + # check predicted covariances for 3 timesteps + fs_covar, process_covar = None, None + if model_class == "lgssm": + process_covar = model._get_trans_dist().covariance_matrix + fs_covar = filtering_state.covariance_matrix + elif model_class == "lgssmgp": + # we only compute contributions for the state space portion + process_covar = model.trans_noise_scale_sq.diag_embed() + fs_covar = filtering_state.covariance_matrix[-state_dim:, -state_dim:] + + predicted_covar1 = torch.mm( + trans_obs.t(), torch.mm(fs_covar, trans_obs) + ) + torch.mm(obs_matrix.t(), torch.mm(process_covar, obs_matrix)) + + predicted_covar2 = ( + torch.mm(trans_trans_obs.t(), torch.mm(fs_covar, trans_trans_obs)) + + torch.mm(trans_obs.t(), torch.mm(process_covar, trans_obs)) + + torch.mm(obs_matrix.t(), torch.mm(process_covar, obs_matrix)) + ) + + predicted_covar3 = ( + torch.mm(trans_trans_trans_obs.t(), torch.mm(fs_covar, trans_trans_trans_obs)) + + torch.mm(trans_trans_obs.t(), torch.mm(process_covar, trans_trans_obs)) + + torch.mm(trans_obs.t(), torch.mm(process_covar, trans_obs)) + + torch.mm(obs_matrix.t(), torch.mm(process_covar, obs_matrix)) + ) + + assert_equal(actual_cov[0], predicted_covar1) + assert_equal(actual_cov[1], predicted_covar2) + assert_equal(actual_cov[2], predicted_covar3) diff --git a/pyro/source/tests/contrib/tracking/__init__.py b/pyro/source/tests/contrib/tracking/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/tests/contrib/tracking/test_assignment.py b/pyro/source/tests/contrib/tracking/test_assignment.py new file mode 100644 index 0000000000000000000000000000000000000000..ae92ea85afd9f688d771a4da4556b927a06b9d65 --- /dev/null +++ b/pyro/source/tests/contrib/tracking/test_assignment.py @@ -0,0 +1,357 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging + +import pytest +import torch +from torch.autograd import grad + +import pyro +import pyro.distributions as dist +from pyro.contrib.tracking.assignment import ( + MarginalAssignment, + MarginalAssignmentPersistent, + MarginalAssignmentSparse, +) +from tests.common import assert_equal + +INF = float("inf") +logger = logging.getLogger(__name__) + + +def assert_finite(tensor, name): + assert ((tensor - tensor) == 0).all(), "bad {}: {}".format(tensor, name) + + +def logit(p): + return p.log() - (-p).log1p() + + +def dense_to_sparse(assign_logits): + num_detections, num_objects = assign_logits.shape + edges = assign_logits.new_tensor( + [[j, i] for j in range(num_detections) for i in range(num_objects)], + dtype=torch.long, + ).t() + assign_logits = assign_logits[edges[0], edges[1]] + return edges, assign_logits + + +def sparse_to_dense(num_objects, num_detections, edges, assign_logits): + result = assign_logits.new_empty(num_detections, num_objects).fill_(-INF) + result[edges[0], edges[1]] = assign_logits + return result + + +def test_dense_smoke(): + num_objects = 4 + num_detections = 2 + pyro.set_rng_seed(0) + exists_logits = torch.zeros(num_objects) + assign_logits = logit( + torch.tensor( + [ + [0.5, 0.5, 0.0, 0.0], + [0.0, 0.5, 0.5, 0.5], + ] + ) + ) + assert assign_logits.shape == (num_detections, num_objects) + + solver = MarginalAssignment(exists_logits, assign_logits, bp_iters=5) + + assert solver.exists_dist.batch_shape == (num_objects,) + assert solver.exists_dist.event_shape == () + assert solver.assign_dist.batch_shape == (num_detections,) + assert solver.assign_dist.event_shape == () + assert solver.assign_dist.probs.shape[-1] == num_objects + 1 # true + spurious + + # test dense matches sparse + edges, assign_logits = dense_to_sparse(assign_logits) + other = MarginalAssignmentSparse( + num_objects, num_detections, edges, exists_logits, assign_logits, bp_iters=5 + ) + assert_equal(other.exists_dist.probs, solver.exists_dist.probs, prec=1e-3) + assert_equal(other.assign_dist.probs, solver.assign_dist.probs, prec=1e-3) + + +def test_sparse_smoke(): + num_objects = 4 + num_detections = 2 + pyro.set_rng_seed(0) + exists_logits = torch.zeros(num_objects) + edges = exists_logits.new_tensor( + [ + [0, 0, 1, 0, 1, 0], + [0, 1, 1, 2, 2, 3], + ], + dtype=torch.long, + ) + assign_logits = logit(torch.tensor([0.99, 0.8, 0.2, 0.2, 0.8, 0.9])) + assert assign_logits.shape == edges.shape[1:] + + solver = MarginalAssignmentSparse( + num_objects, num_detections, edges, exists_logits, assign_logits, bp_iters=5 + ) + + assert solver.exists_dist.batch_shape == (num_objects,) + assert solver.exists_dist.event_shape == () + assert solver.assign_dist.batch_shape == (num_detections,) + assert solver.assign_dist.event_shape == () + assert solver.assign_dist.probs.shape[-1] == num_objects + 1 # true + spurious + + # test dense matches sparse + assign_logits = sparse_to_dense(num_objects, num_detections, edges, assign_logits) + other = MarginalAssignment(exists_logits, assign_logits, bp_iters=5) + assert_equal(other.exists_dist.probs, solver.exists_dist.probs, prec=1e-3) + assert_equal(other.assign_dist.probs, solver.assign_dist.probs, prec=1e-3) + + +def test_sparse_grid_smoke(): + def my_existence_prior(ox, oy): + return -0.5 + + def my_assign_prior(ox, oy, dx, dy): + return 0.0 + + num_detections = 3 * 3 + detections = [[0, 1, 2], [3, 4, 5], [6, 7, 8]] + num_objects = 2 * 2 + objects = [[0, 1], [2, 3]] + edges = [] + edge_coords = [] + for x in range(2): + for y in range(2): + object_id = objects[x][y] + for dx in [0, 1]: + for dy in [0, 1]: + detection_id = detections[x + dx][y + dy] + edges.append((detection_id, object_id)) + edge_coords.append((x, y, x + dx, y + dy)) + + exists_logits = torch.empty(num_objects) + edges = exists_logits.new_tensor(edges, dtype=torch.long).t() + assert edges.shape == (2, 4 * 4) + + for x in range(2): + for y in range(2): + object_id = objects[x][y] + exists_logits[object_id] = my_existence_prior(x, y) + assign_logits = exists_logits.new_tensor( + [my_assign_prior(ox, oy, dx, dy) for ox, oy, dx, dy in edge_coords] + ) + assign = MarginalAssignmentSparse( + num_objects, num_detections, edges, exists_logits, assign_logits, bp_iters=10 + ) + assert isinstance(assign.assign_dist, dist.Categorical) + + +@pytest.mark.parametrize("bp_iters", [None, 10], ids=["enum", "bp"]) +def test_persistent_smoke(bp_iters): + exists_logits = torch.tensor([-1.0, -1.0, -2.0], requires_grad=True) + assign_logits = torch.tensor( + [ + [[-1.0, -INF, -INF], [-2.0, -2.0, -INF]], + [[-1.0, -2.0, -3.0], [-2.0, -2.0, -1.0]], + [[-1.0, -2.0, -3.0], [-2.0, -2.0, -1.0]], + [[-1.0, -1.0, 1.0], [1.0, 1.0, -1.0]], + ], + requires_grad=True, + ) + + assignment = MarginalAssignmentPersistent( + exists_logits, assign_logits, bp_iters=bp_iters + ) + assert assignment.num_frames == 4 + assert assignment.num_detections == 2 + assert assignment.num_objects == 3 + + assign_dist = assignment.assign_dist + exists_dist = assignment.exists_dist + assert_finite(exists_dist.probs, "exists_probs") + assert_finite(assign_dist.probs, "assign_probs") + + for exists in exists_dist.enumerate_support(): + log_prob = exists_dist.log_prob(exists).sum() + e_grad, a_grad = grad( + log_prob, [exists_logits, assign_logits], create_graph=True + ) + assert_finite(e_grad, "dexists_probs/dexists_logits") + assert_finite(a_grad, "dexists_probs/dassign_logits") + + for assign in assign_dist.enumerate_support(): + log_prob = assign_dist.log_prob(assign).sum() + e_grad, a_grad = grad( + log_prob, [exists_logits, assign_logits], create_graph=True + ) + assert_finite(e_grad, "dassign_probs/dexists_logits") + assert_finite(a_grad, "dassign_probs/dassign_logits") + + +@pytest.mark.parametrize("e", [-1.0, 0.0, 1.0]) +@pytest.mark.parametrize("a", [-1.0, 0.0, 1.0]) +def test_flat_exact_1_1(e, a): + exists_logits = torch.tensor([e]) + assign_logits = torch.tensor([[a]]) + expected = MarginalAssignment(exists_logits, assign_logits, None) + actual = MarginalAssignment(exists_logits, assign_logits, 10) + assert_equal(expected.exists_dist.probs, actual.exists_dist.probs) + assert_equal(expected.assign_dist.probs, actual.assign_dist.probs) + + +@pytest.mark.parametrize("e", [-1.0, 0.0, 1.0]) +@pytest.mark.parametrize("a11", [-1.0, 0.0, 1.0]) +@pytest.mark.parametrize("a21", [-1.0, 0.0, 1.0]) +def test_flat_exact_2_1(e, a11, a21): + exists_logits = torch.tensor([e]) + assign_logits = torch.tensor([[a11], [a21]]) + expected = MarginalAssignment(exists_logits, assign_logits, None) + actual = MarginalAssignment(exists_logits, assign_logits, 10) + assert_equal(expected.exists_dist.probs, actual.exists_dist.probs) + assert_equal(expected.assign_dist.probs, actual.assign_dist.probs) + + +@pytest.mark.parametrize("e1", [-1.0, 0.0, 1.0]) +@pytest.mark.parametrize("e2", [-1.0, 0.0, 1.0]) +@pytest.mark.parametrize("a11", [-1.0, 0.0, 1.0]) +@pytest.mark.parametrize("a12", [-1.0, 0.0, 1.0]) +def test_flat_exact_1_2(e1, e2, a11, a12): + exists_logits = torch.tensor([e1, e2]) + assign_logits = torch.tensor([[a11, a12]]) + expected = MarginalAssignment(exists_logits, assign_logits, None) + actual = MarginalAssignment(exists_logits, assign_logits, 10) + assert_equal(expected.exists_dist.probs, actual.exists_dist.probs) + assert_equal(expected.assign_dist.probs, actual.assign_dist.probs) + + +@pytest.mark.parametrize("e1", [-1.0, 1.0]) +@pytest.mark.parametrize("e2", [-1.0, 1.0]) +@pytest.mark.parametrize("a11", [-1.0, 1.0]) +@pytest.mark.parametrize("a12", [-1.0, 1.0]) +@pytest.mark.parametrize("a22", [-1.0, 1.0]) +def test_flat_exact_2_2(e1, e2, a11, a12, a22): + a21 = -INF + exists_logits = torch.tensor([e1, e2]) + assign_logits = torch.tensor([[a11, a12], [a21, a22]]) + expected = MarginalAssignment(exists_logits, assign_logits, None) + actual = MarginalAssignment(exists_logits, assign_logits, 10) + assert_equal(expected.exists_dist.probs, actual.exists_dist.probs) + assert_equal(expected.assign_dist.probs, actual.assign_dist.probs) + + +@pytest.mark.parametrize("num_detections", [1, 2, 3, 4]) +@pytest.mark.parametrize("num_objects", [1, 2, 3, 4]) +def test_flat_bp_vs_exact(num_objects, num_detections): + exists_logits = -2 * torch.rand(num_objects) + assign_logits = -2 * torch.rand(num_detections, num_objects) + expected = MarginalAssignment(exists_logits, assign_logits, None) + actual = MarginalAssignment(exists_logits, assign_logits, 10) + # these should only approximately agree + assert_equal(expected.exists_dist.probs, actual.exists_dist.probs, prec=0.01) + assert_equal(expected.assign_dist.probs, actual.assign_dist.probs, prec=0.01) + + +@pytest.mark.parametrize("num_frames", [1, 2, 3, 4]) +@pytest.mark.parametrize("num_objects", [1, 2, 3, 4]) +@pytest.mark.parametrize("bp_iters", [None, 30], ids=["enum", "bp"]) +def test_flat_vs_persistent(num_objects, num_frames, bp_iters): + exists_logits = -2 * torch.rand(num_objects) + assign_logits = -2 * torch.rand(num_frames, num_objects) + flat = MarginalAssignment(exists_logits, assign_logits, bp_iters) + full = MarginalAssignmentPersistent( + exists_logits, assign_logits.unsqueeze(1), bp_iters + ) + assert_equal(flat.exists_dist.probs, full.exists_dist.probs) + assert_equal(flat.assign_dist.probs, full.assign_dist.probs.squeeze(1)) + + +@pytest.mark.parametrize("num_detections", [1, 2, 3, 4]) +@pytest.mark.parametrize("num_frames", [1, 2, 3, 4]) +@pytest.mark.parametrize("num_objects", [1, 2, 3, 4]) +def test_persistent_bp_vs_exact(num_objects, num_frames, num_detections): + exists_logits = -2 * torch.rand(num_objects) + assign_logits = 2 * torch.rand(num_frames, num_detections, num_objects) - 1 + expected = MarginalAssignmentPersistent(exists_logits, assign_logits, None) + actual = MarginalAssignmentPersistent(exists_logits, assign_logits, 30) + # these should only approximately agree + assert_equal(expected.exists_dist.probs, actual.exists_dist.probs, prec=0.05) + assert_equal(expected.assign_dist.probs, actual.assign_dist.probs, prec=0.05) + + +@pytest.mark.parametrize("e1", [-1.0, 1.0]) +@pytest.mark.parametrize("e2", [-1.0, 1.0]) +@pytest.mark.parametrize("e3", [-1.0, 1.0]) +@pytest.mark.parametrize( + "bp_iters, bp_momentum", [(3, 0.0), (30, 0.5)], ids=["momentum", "none"] +) +def test_persistent_exact_5_4_3(e1, e2, e3, bp_iters, bp_momentum): + exists_logits = torch.tensor([e1, e2, e3]) + assign_logits = 2 * torch.rand(5, 4, 3) - 1 + # this has tree-shaped connectivity and should lead to exact inference + mask = torch.tensor( + [ + [[1, 1, 0], [0, 1, 0], [0, 0, 1], [1, 0, 0]], + [[1, 0, 0], [0, 1, 1], [0, 0, 1], [1, 0, 0]], + [[1, 0, 0], [0, 1, 0], [0, 0, 1], [1, 0, 0]], + [[1, 0, 0], [0, 1, 0], [0, 0, 1], [0, 1, 0]], + [[1, 0, 0], [0, 1, 0], [0, 0, 1], [0, 0, 1]], + ], + dtype=torch.bool, + ) + assign_logits[~mask] = -INF + expected = MarginalAssignmentPersistent(exists_logits, assign_logits, None) + actual = MarginalAssignmentPersistent( + exists_logits, assign_logits, bp_iters, bp_momentum + ) + assert_equal(expected.exists_dist.probs, actual.exists_dist.probs) + assert_equal(expected.assign_dist.probs, actual.assign_dist.probs) + logger.debug(actual.exists_dist.probs) + logger.debug(actual.assign_dist.probs) + + +@pytest.mark.parametrize("num_detections", [1, 2, 3]) +@pytest.mark.parametrize("num_frames", [1, 2, 3]) +@pytest.mark.parametrize("num_objects", [1, 2]) +@pytest.mark.parametrize("bp_iters", [None, 30], ids=["enum", "bp"]) +def test_persistent_independent_subproblems( + num_objects, num_frames, num_detections, bp_iters +): + # solve a random assignment problem + exists_logits_1 = -2 * torch.rand(num_objects) + assign_logits_1 = 2 * torch.rand(num_frames, num_detections, num_objects) - 1 + assignment_1 = MarginalAssignmentPersistent( + exists_logits_1, assign_logits_1, bp_iters + ) + exists_probs_1 = assignment_1.exists_dist.probs + assign_probs_1 = assignment_1.assign_dist.probs + + # solve another random assignment problem + exists_logits_2 = -2 * torch.rand(num_objects) + assign_logits_2 = 2 * torch.rand(num_frames, num_detections, num_objects) - 1 + assignment_2 = MarginalAssignmentPersistent( + exists_logits_2, assign_logits_2, bp_iters + ) + exists_probs_2 = assignment_2.exists_dist.probs + assign_probs_2 = assignment_2.assign_dist.probs + + # solve a unioned assignment problem + exists_logits = torch.cat([exists_logits_1, exists_logits_2]) + assign_logits = torch.full((num_frames, num_detections * 2, num_objects * 2), -INF) + assign_logits[:, :num_detections, :num_objects] = assign_logits_1 + assign_logits[:, num_detections:, num_objects:] = assign_logits_2 + assignment = MarginalAssignmentPersistent(exists_logits, assign_logits, bp_iters) + exists_probs = assignment.exists_dist.probs + assign_probs = assignment.assign_dist.probs + + # check agreement + assert_equal(exists_probs_1, exists_probs[:num_objects]) + assert_equal(exists_probs_2, exists_probs[num_objects:]) + assert_equal( + assign_probs_1[:, :, :-1], assign_probs[:, :num_detections, :num_objects] + ) + assert_equal(assign_probs_1[:, :, -1], assign_probs[:, :num_detections, -1]) + assert_equal( + assign_probs_2[:, :, :-1], assign_probs[:, num_detections:, num_objects:-1] + ) + assert_equal(assign_probs_2[:, :, -1], assign_probs[:, num_detections:, -1]) diff --git a/pyro/source/tests/contrib/tracking/test_distributions.py b/pyro/source/tests/contrib/tracking/test_distributions.py new file mode 100644 index 0000000000000000000000000000000000000000..119a7251dcbab9638dbbfd104b73f3bba753747e --- /dev/null +++ b/pyro/source/tests/contrib/tracking/test_distributions.py @@ -0,0 +1,25 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +from pyro.contrib.tracking.distributions import EKFDistribution +from pyro.contrib.tracking.dynamic_models import NcpContinuous, NcvContinuous + + +@pytest.mark.parametrize("Model", [NcpContinuous, NcvContinuous]) +@pytest.mark.parametrize("dim", [2, 3]) +@pytest.mark.parametrize("time", [2, 3]) +def test_EKFDistribution_smoke(Model, dim, time): + x0 = torch.rand(2 * dim) + ys = torch.randn(time, dim) + P0 = torch.eye(2 * dim).requires_grad_() + R = torch.eye(dim).requires_grad_() + model = Model(2 * dim, 2.0) + dist = EKFDistribution(x0, P0, model, R, time_steps=time) + log_prob = dist.log_prob(ys) + assert log_prob.shape == torch.Size() + dP0, dR = torch.autograd.grad(log_prob, [P0, R]) + assert dP0.shape == P0.shape + assert dR.shape == R.shape diff --git a/pyro/source/tests/contrib/tracking/test_dynamic_models.py b/pyro/source/tests/contrib/tracking/test_dynamic_models.py new file mode 100644 index 0000000000000000000000000000000000000000..d307b3e67f40202e6254135d2b732aa402871d7c --- /dev/null +++ b/pyro/source/tests/contrib/tracking/test_dynamic_models.py @@ -0,0 +1,188 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +from pyro.contrib.tracking.dynamic_models import ( + NcpContinuous, + NcpDiscrete, + NcvContinuous, + NcvDiscrete, +) +from tests.common import assert_equal, assert_not_equal + + +def assert_cov_validity(cov, eigenvalue_lbnd=0.0, condition_number_ubnd=1e6): + """ + cov: covariance matrix + eigenvalue_lbnd: eigenvalues should be at least this much greater than + zero. Must be strictly positive. + condition_number_ubnd: inclusive upper bound on matrix condition + number. Must be greater or equal to 1.0. + """ + assert eigenvalue_lbnd >= 0.0, "Covariance eigenvalue lower bound must be > 0.0!" + assert ( + condition_number_ubnd >= 1.0 + ), "Covariance condition number bound must be >= 1.0!" + + # Symmetry + assert (cov.t() == cov).all(), "Covariance must be symmetric!" + # Precompute eigenvalues for subsequent tests. + ws = torch.linalg.eigvalsh(cov) # The eigenvalues of cov + w_min = torch.min(ws) + w_max = torch.max(ws) + + # Strict positivity + assert w_min > 0.0, "Covariance must be strictly positive!" + + # Eigenvalue lower bound + assert w_min >= eigenvalue_lbnd, "Covariance eigenvalues must be >= lower bound!" + + # Condition number upper bound + assert ( + w_max / w_min <= condition_number_ubnd + ), "Condition number must be <= upper bound!" + + +def test_NcpContinuous(): + framerate = 100 # Hz + dt = 1.0 / framerate + d = 3 + ncp = NcpContinuous(dimension=d, sv2=2.0) + assert ncp.dimension == d + assert ncp.dimension_pv == 2 * d + assert ncp.num_process_noise_parameters == 1 + + x = torch.rand(d) + y = ncp(x, dt) + assert_equal(y, x) + + dx = ncp.geodesic_difference(x, y) + assert_equal(dx, torch.zeros(d)) + + x_pv = ncp.mean2pv(x) + assert len(x_pv) == 6 + assert_equal(x, x_pv[:d]) + assert_equal(torch.zeros(d), x_pv[d:]) + + P = torch.eye(d) + P_pv = ncp.cov2pv(P) + assert P_pv.shape == (2 * d, 2 * d) + P_pv_ref = torch.zeros((2 * d, 2 * d)) + P_pv_ref[:d, :d] = P + assert_equal(P_pv_ref, P_pv) + + Q = ncp.process_noise_cov(dt) + Q1 = ncp.process_noise_cov(dt) # Test caching. + assert_equal(Q, Q1) + assert Q1.shape == (d, d) + assert_cov_validity(Q1) + + dx = ncp.process_noise_dist(dt).sample() + assert dx.shape == (ncp.dimension,) + + +def test_NcvContinuous(): + framerate = 100 # Hz + dt = 1.0 / framerate + d = 6 + ncv = NcvContinuous(dimension=d, sa2=2.0) + assert ncv.dimension == d + assert ncv.dimension_pv == d + assert ncv.num_process_noise_parameters == 1 + + x = torch.rand(d) + y = ncv(x, dt) + assert_equal(y[0], x[0] + dt * x[d // 2]) + + dx = ncv.geodesic_difference(x, y) + assert_not_equal(dx, torch.zeros(d)) + + x_pv = ncv.mean2pv(x) + assert len(x_pv) == d + assert_equal(x, x_pv) + + P = torch.eye(d) + P_pv = ncv.cov2pv(P) + assert P_pv.shape == (d, d) + assert_equal(P, P_pv) + + Q = ncv.process_noise_cov(dt) + Q1 = ncv.process_noise_cov(dt) # Test caching. + assert_equal(Q, Q1) + assert Q1.shape == (d, d) + assert_cov_validity(Q1) + + dx = ncv.process_noise_dist(dt).sample() + assert dx.shape == (ncv.dimension,) + + +def test_NcpDiscrete(): + framerate = 100 # Hz + dt = 1.0 / framerate + d = 3 + ncp = NcpDiscrete(dimension=d, sv2=2.0) + assert ncp.dimension == d + assert ncp.dimension_pv == 2 * d + assert ncp.num_process_noise_parameters == 1 + + x = torch.rand(d) + y = ncp(x, dt) + assert_equal(y, x) + + dx = ncp.geodesic_difference(x, y) + assert_equal(dx, torch.zeros(d)) + + x_pv = ncp.mean2pv(x) + assert len(x_pv) == 6 + assert_equal(x, x_pv[:d]) + assert_equal(torch.zeros(d), x_pv[d:]) + + P = torch.eye(d) + P_pv = ncp.cov2pv(P) + assert P_pv.shape == (2 * d, 2 * d) + P_pv_ref = torch.zeros((2 * d, 2 * d)) + P_pv_ref[:d, :d] = P + assert_equal(P_pv_ref, P_pv) + + Q = ncp.process_noise_cov(dt) + Q1 = ncp.process_noise_cov(dt) # Test caching. + assert_equal(Q, Q1) + assert Q1.shape == (d, d) + assert_cov_validity(Q1) + + dx = ncp.process_noise_dist(dt).sample() + assert dx.shape == (ncp.dimension,) + + +def test_NcvDiscrete(): + framerate = 100 # Hz + dt = 1.0 / framerate + dt = 100 + d = 6 + ncv = NcvDiscrete(dimension=d, sa2=2.0) + assert ncv.dimension == d + assert ncv.dimension_pv == d + assert ncv.num_process_noise_parameters == 1 + + x = torch.rand(d) + y = ncv(x, dt) + assert_equal(y[0], x[0] + dt * x[d // 2]) + + dx = ncv.geodesic_difference(x, y) + assert_not_equal(dx, torch.zeros(d)) + + x_pv = ncv.mean2pv(x) + assert len(x_pv) == d + assert_equal(x, x_pv) + + P = torch.eye(d) + P_pv = ncv.cov2pv(P) + assert P_pv.shape == (d, d) + assert_equal(P, P_pv) + + Q = ncv.process_noise_cov(dt) + Q1 = ncv.process_noise_cov(dt) # Test caching. + assert_equal(Q, Q1) + assert Q1.shape == (d, d) + # Q has rank `dimension/2`, so it is not a valid cov matrix diff --git a/pyro/source/tests/contrib/tracking/test_ekf.py b/pyro/source/tests/contrib/tracking/test_ekf.py new file mode 100644 index 0000000000000000000000000000000000000000..c511cdbda53c05920e1115ef943c6c35b7e6aa30 --- /dev/null +++ b/pyro/source/tests/contrib/tracking/test_ekf.py @@ -0,0 +1,73 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +from pyro.contrib.tracking.dynamic_models import NcpContinuous, NcvContinuous +from pyro.contrib.tracking.extended_kalman_filter import EKFState +from pyro.contrib.tracking.measurements import PositionMeasurement +from tests.common import assert_equal, assert_not_equal + + +def test_EKFState_with_NcpContinuous(): + d = 3 + ncp = NcpContinuous(dimension=d, sv2=2.0) + x = torch.rand(d) + P = torch.eye(d) + t = 0.0 + dt = 2.0 + ekf_state = EKFState(dynamic_model=ncp, mean=x, cov=P, time=t) + + assert ekf_state.dynamic_model.__class__ == NcpContinuous + assert ekf_state.dimension == d + assert ekf_state.dimension_pv == 2 * d + + assert_equal(x, ekf_state.mean, prec=1e-5) + assert_equal(P, ekf_state.cov, prec=1e-5) + assert_equal(x, ekf_state.mean_pv[:d], prec=1e-5) + assert_equal(P, ekf_state.cov_pv[:d, :d], prec=1e-5) + assert_equal(t, ekf_state.time, prec=1e-5) + + ekf_state1 = EKFState(ncp, 2 * x, 2 * P, t) + ekf_state2 = ekf_state1.predict(dt) + assert ekf_state2.dynamic_model.__class__ == NcpContinuous + + measurement = PositionMeasurement(mean=torch.rand(d), cov=torch.eye(d), time=t + dt) + log_likelihood = ekf_state2.log_likelihood_of_update(measurement) + assert (log_likelihood < 0.0).all() + ekf_state3, (dz, S) = ekf_state2.update(measurement) + assert dz.shape == (measurement.dimension,) + assert S.shape == (measurement.dimension, measurement.dimension) + assert_not_equal(ekf_state3.mean, ekf_state2.mean, prec=1e-5) + + +def test_EKFState_with_NcvContinuous(): + d = 6 + ncv = NcvContinuous(dimension=d, sa2=2.0) + x = torch.rand(d) + P = torch.eye(d) + t = 0.0 + dt = 2.0 + ekf_state = EKFState(dynamic_model=ncv, mean=x, cov=P, time=t) + + assert ekf_state.dynamic_model.__class__ == NcvContinuous + assert ekf_state.dimension == d + assert ekf_state.dimension_pv == d + + assert_equal(x, ekf_state.mean, prec=1e-5) + assert_equal(P, ekf_state.cov, prec=1e-5) + assert_equal(x, ekf_state.mean_pv, prec=1e-5) + assert_equal(P, ekf_state.cov_pv, prec=1e-5) + assert_equal(t, ekf_state.time, prec=1e-5) + + ekf_state1 = EKFState(ncv, 2 * x, 2 * P, t) + ekf_state2 = ekf_state1.predict(dt) + assert ekf_state2.dynamic_model.__class__ == NcvContinuous + + measurement = PositionMeasurement(mean=torch.rand(d), cov=torch.eye(d), time=t + dt) + log_likelihood = ekf_state2.log_likelihood_of_update(measurement) + assert (log_likelihood < 0.0).all() + ekf_state3, (dz, S) = ekf_state2.update(measurement) + assert dz.shape == (measurement.dimension,) + assert S.shape == (measurement.dimension, measurement.dimension) + assert_not_equal(ekf_state3.mean, ekf_state2.mean, prec=1e-5) diff --git a/pyro/source/tests/contrib/tracking/test_em.py b/pyro/source/tests/contrib/tracking/test_em.py new file mode 100644 index 0000000000000000000000000000000000000000..aa6e12dea27b5ae43a043b988a0eceb9974e3230 --- /dev/null +++ b/pyro/source/tests/contrib/tracking/test_em.py @@ -0,0 +1,227 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging +import math + +import pytest +import torch +from torch.distributions import constraints + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.contrib.tracking.assignment import MarginalAssignment +from pyro.infer import SVI, TraceEnum_ELBO +from pyro.optim import Adam +from pyro.optim.multi import MixedMultiOptimizer, Newton + +logger = logging.getLogger(__name__) + + +def make_args(): + args = type("Args", (), {}) # A fake ArgumentParser.parse_args() + args.max_num_objects = 4 + args.num_real_detections = 13 + args.num_fake_detections = 3 + args.expected_num_objects = 2 + args.init_noise_scale = 0.1 + + # TODO Is it correct to detach gradients of assignments? + # Detaching is indeed required for the Hessian to be block-diagonal, + # but it is unclear whether convergence would be faster if we applied + # a blockwise method (Newton) to the full Hessian, without detaching. + args.assignment_grad = False + + return args + + +def model(detections, args): + noise_scale = pyro.param("noise_scale") + objects = pyro.param("objects_loc").squeeze(-1) + (num_detections,) = detections.shape + (max_num_objects,) = objects.shape + + # Existence part. + p_exists = args.expected_num_objects / max_num_objects + with pyro.plate("objects_plate", max_num_objects): + exists = pyro.sample("exists", dist.Bernoulli(p_exists)) + with poutine.mask(mask=exists.bool()): + pyro.sample("objects", dist.Normal(0.0, 1.0), obs=objects) + + # Assignment part. + p_fake = args.num_fake_detections / num_detections + with pyro.plate("detections_plate", num_detections): + assign_probs = torch.empty(max_num_objects + 1) + assign_probs[:-1] = (1 - p_fake) / max_num_objects + assign_probs[-1] = p_fake + assign = pyro.sample("assign", dist.Categorical(logits=assign_probs)) + is_fake = assign == assign.shape[-1] - 1 + objects_plus_bogus = torch.zeros(max_num_objects + 1) + objects_plus_bogus[:max_num_objects] = objects + real_dist = dist.Normal(objects_plus_bogus[assign], noise_scale) + fake_dist = dist.Normal(0.0, 1.0) + pyro.sample( + "detections", + dist.MaskedMixture(is_fake, real_dist, fake_dist), + obs=detections, + ) + + +# This should match detection_model's existence part. +def compute_exists_logits(objects, args): + p_exists = args.expected_num_objects / args.max_num_objects + real_part = dist.Normal(0.0, 1.0).log_prob(objects) + real_part = real_part + math.log(p_exists) + spurious_part = torch.full(real_part.shape, math.log(1 - p_exists)) + return real_part - spurious_part + + +# This should match detection_model's assignment part. +def compute_assign_logits(objects, detections, noise_scale, args): + num_detections = len(detections) + p_fake = args.num_fake_detections / num_detections + real_part = dist.Normal(objects, noise_scale).log_prob(detections) + real_part = real_part + math.log((1 - p_fake) / args.max_num_objects) + fake_part = dist.Normal(0.0, 1.0).log_prob(detections) + fake_part = fake_part + math.log(p_fake) + return real_part - fake_part + + +def guide(detections, args): + noise_scale = pyro.param("noise_scale") # trained by SVI + objects = pyro.param("objects_loc").squeeze(-1) # trained by M-step of EM + (num_detections,) = detections.shape + (max_num_objects,) = objects.shape + + with torch.set_grad_enabled(args.assignment_grad): + # Evaluate log likelihoods. TODO make this more pyronic. + exists_logits = compute_exists_logits(objects, args) + assign_logits = compute_assign_logits( + objects, detections.unsqueeze(-1), noise_scale, args + ) + assert exists_logits.shape == (max_num_objects,) + assert assign_logits.shape == (num_detections, max_num_objects) + + # Compute soft assignments. + assignment = MarginalAssignment(exists_logits, assign_logits, bp_iters=10) + + with pyro.plate("objects_plate", max_num_objects): + pyro.sample("exists", assignment.exists_dist, infer={"enumerate": "parallel"}) + with pyro.plate("detections_plate", num_detections): + pyro.sample("assign", assignment.assign_dist, infer={"enumerate": "parallel"}) + + +def generate_data(args): + num_objects = args.expected_num_objects + true_objects = torch.randn(num_objects) + true_assign = dist.Categorical( + torch.ones(args.num_real_detections, num_objects) + ).sample() + real_detections = true_objects[true_assign] + real_detections = real_detections + args.init_noise_scale * torch.randn( + real_detections.shape + ) + fake_detections = torch.randn(args.num_fake_detections) + detections = torch.cat([real_detections, fake_detections]) + assert detections.shape == (args.num_real_detections + args.num_fake_detections,) + return detections + + +@pytest.mark.parametrize("assignment_grad", [False, True]) +def test_em(assignment_grad): + args = make_args() + args.assignment_grad = assignment_grad + detections = generate_data(args) + + pyro.clear_param_store() + pyro.param( + "noise_scale", + torch.tensor(args.init_noise_scale), + constraint=constraints.positive, + ) + pyro.param("objects_loc", torch.randn(args.max_num_objects, 1)) + + # Learn object_loc via EM algorithm. + elbo = TraceEnum_ELBO(max_plate_nesting=2) + newton = Newton(trust_radii={"objects_loc": 1.0}) + for step in range(10): + # Detach previous iterations. + objects_loc = pyro.param("objects_loc").detach_().requires_grad_() + loss = elbo.differentiable_loss(model, guide, detections, args) # E-step + newton.step(loss, {"objects_loc": objects_loc}) # M-step + logger.debug("step {}, loss = {}".format(step, loss.item())) + + +@pytest.mark.parametrize("assignment_grad", [False, True]) +def test_em_nested_in_svi(assignment_grad): + args = make_args() + args.assignment_grad = assignment_grad + detections = generate_data(args) + + pyro.clear_param_store() + pyro.param( + "noise_scale", + torch.tensor(args.init_noise_scale), + constraint=constraints.positive, + ) + pyro.param("objects_loc", torch.randn(args.max_num_objects, 1)) + + # Learn object_loc via EM and noise_scale via SVI. + optim = Adam({"lr": 0.1}) + elbo = TraceEnum_ELBO(max_plate_nesting=2) + newton = Newton(trust_radii={"objects_loc": 1.0}) + svi = SVI( + poutine.block(model, hide=["objects_loc"]), + poutine.block(guide, hide=["objects_loc"]), + optim, + elbo, + ) + for svi_step in range(50): + for em_step in range(2): + objects_loc = pyro.param("objects_loc").detach_().requires_grad_() + assert pyro.param("objects_loc").grad_fn is None + loss = elbo.differentiable_loss(model, guide, detections, args) # E-step + updated = newton.get_step(loss, {"objects_loc": objects_loc}) # M-step + assert updated["objects_loc"].grad_fn is not None + pyro.get_param_store()["objects_loc"] = updated["objects_loc"] + assert pyro.param("objects_loc").grad_fn is not None + loss = svi.step(detections, args) + logger.debug( + "step {: >2d}, loss = {:0.6f}, noise_scale = {:0.6f}".format( + svi_step, loss, pyro.param("noise_scale").item() + ) + ) + + +def test_svi_multi(): + args = make_args() + args.assignment_grad = True + detections = generate_data(args) + + pyro.clear_param_store() + pyro.param( + "noise_scale", + torch.tensor(args.init_noise_scale), + constraint=constraints.positive, + ) + pyro.param("objects_loc", torch.randn(args.max_num_objects, 1)) + + # Learn object_loc via Newton and noise_scale via Adam. + elbo = TraceEnum_ELBO(max_plate_nesting=2) + adam = Adam({"lr": 0.1}) + newton = Newton(trust_radii={"objects_loc": 1.0}) + optim = MixedMultiOptimizer([(["noise_scale"], adam), (["objects_loc"], newton)]) + for svi_step in range(50): + with poutine.trace(param_only=True) as param_capture: + loss = elbo.differentiable_loss(model, guide, detections, args) + params = { + name: pyro.param(name).unconstrained() + for name in param_capture.trace.nodes.keys() + } + optim.step(loss, params) + logger.debug( + "step {: >2d}, loss = {:0.6f}, noise_scale = {:0.6f}".format( + svi_step, loss.item(), pyro.param("noise_scale").item() + ) + ) diff --git a/pyro/source/tests/contrib/tracking/test_hashing.py b/pyro/source/tests/contrib/tracking/test_hashing.py new file mode 100644 index 0000000000000000000000000000000000000000..170f8a131c900371a7691f5eaee0927931bf2d60 --- /dev/null +++ b/pyro/source/tests/contrib/tracking/test_hashing.py @@ -0,0 +1,158 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging + +import pytest +import torch + +from pyro.contrib.tracking.hashing import LSH, ApproxSet, merge_points +from tests.common import assert_equal + +logger = logging.getLogger(__name__) + + +@pytest.mark.parametrize("scale", [-1.0, 0.0, -1 * torch.ones(2, 2)]) +def test_lsh_init(scale): + with pytest.raises(ValueError): + LSH(scale) + + +@pytest.mark.parametrize("scale", [0.1, 1, 10, 100]) +def test_lsh_add(scale): + lsh = LSH(scale) + a = torch.rand(10) + lsh.add("a", a) + assert lsh._hash_to_key[lsh._key_to_hash["a"]] == {"a"} + + +@pytest.mark.parametrize("scale", [0.1, 1, 10, 100]) +def test_lsh_hash_nearby(scale): + k = 5 + lsh = LSH(scale) + a = -2 * scale + torch.rand(k) * scale * 0.49 + b = -1 * scale + torch.rand(k) * scale * 0.49 + c = torch.rand(k) * scale * 0.49 + d = scale + torch.rand(k) * scale * 0.49 + e = 2 * scale + torch.rand(k) * scale * 0.49 + f = 4 * scale + torch.rand(k) * scale * 0.49 + + assert_equal(lsh._hash(a), (-2,) * k) + assert_equal(lsh._hash(b), (-1,) * k) + assert_equal(lsh._hash(c), (0,) * k) + assert_equal(lsh._hash(d), (1,) * k) + assert_equal(lsh._hash(e), (2,) * k) + assert_equal(lsh._hash(f), (4,) * k) + + lsh.add("a", a) + lsh.add("b", b) + lsh.add("c", c) + lsh.add("d", d) + lsh.add("e", e) + lsh.add("f", f) + + assert lsh.nearby("a") == {"b"} + assert lsh.nearby("b") == {"a", "c"} + assert lsh.nearby("c") == {"b", "d"} + assert lsh.nearby("d") == {"c", "e"} + assert lsh.nearby("e") == {"d"} + assert lsh.nearby("f") == set() + + +def test_lsh_overwrite(): + lsh = LSH(1) + a = torch.zeros(2) + b = torch.ones(2) + lsh.add("a", a) + lsh.add("b", b) + assert lsh.nearby("a") == {"b"} + b = torch.ones(2) * 4 + lsh.add("b", b) + assert lsh.nearby("a") == set() + + +def test_lsh_remove(): + lsh = LSH(1) + a = torch.zeros(2) + b = torch.ones(2) + lsh.add("a", a) + lsh.add("b", b) + assert lsh.nearby("a") == {"b"} + lsh.remove("b") + assert lsh.nearby("a") == set() + + +@pytest.mark.parametrize("scale", [-1.0, 0.0, -1 * torch.ones(2, 2)]) +def test_aps_init(scale): + with pytest.raises(ValueError): + ApproxSet(scale) + + +@pytest.mark.parametrize("scale", [0.1, 1, 10, 100]) +def test_aps_hash(scale): + k = 10 + aps = ApproxSet(scale) + a = -2 * scale + torch.rand(k) * scale * 0.49 + b = -1 * scale + torch.rand(k) * scale * 0.49 + c = torch.rand(k) * scale * 0.49 + d = scale + torch.rand(k) * scale * 0.49 + e = 2 * scale + torch.rand(k) * scale * 0.49 + f = 4 * scale + torch.rand(k) * scale * 0.49 + + assert_equal(aps._hash(a), (-2,) * k) + assert_equal(aps._hash(b), (-1,) * k) + assert_equal(aps._hash(c), (0,) * k) + assert_equal(aps._hash(d), (1,) * k) + assert_equal(aps._hash(e), (2,) * k) + assert_equal(aps._hash(f), (4,) * k) + + +@pytest.mark.parametrize("scale", [0.1, 1, 10, 100]) +def test_aps_try_add(scale): + k = 10 + aps = ApproxSet(scale) + a = torch.rand(k) * scale * 0.49 + b = torch.rand(k) * scale * 0.49 + c = scale + torch.rand(k) * scale * 0.49 + d = scale + torch.rand(k) * scale * 0.49 + + assert_equal(aps.try_add(a), True) + assert_equal(aps.try_add(b), False) + assert_equal(aps.try_add(c), True) + assert_equal(aps.try_add(d), False) + + +def test_merge_points_small(): + points = torch.tensor( + [ + [0.0, 0.0], + [0.0, 1.0], + [2.0, 0.0], + [2.0, 0.5], + [2.0, 1.0], + ] + ) + merged_points, groups = merge_points(points, radius=1.0) + + assert len(merged_points) == 3 + assert set(map(frozenset, groups)) == set(map(frozenset, [[0], [1], [2, 3, 4]])) + assert_equal(merged_points[0], points[0]) + assert_equal(merged_points[1], points[1]) + assert merged_points[2, 0] == 2 + assert 0.325 <= merged_points[2, 1] <= 0.625 + + +@pytest.mark.parametrize("radius", [0.01, 0.1, 1.0, 10.0, 100.0]) +@pytest.mark.parametrize("dim", [1, 2, 3]) +def test_merge_points_large(dim, radius): + points = 10 * torch.randn(200, dim) + merged_points, groups = merge_points(points, radius) + logger.debug("merged {} -> {}".format(len(points), len(merged_points))) + + assert merged_points.dim() == 2 + assert merged_points.shape[-1] == dim + assert len(groups) == len(merged_points) + assert sum(len(g) for g in groups) == len(points) + assert set(sum(groups, ())) == set(range(len(points))) + d2 = (merged_points.unsqueeze(-2) - merged_points.unsqueeze(-3)).pow(2).sum(-1) + assert d2.min() < radius**2 diff --git a/pyro/source/tests/contrib/tracking/test_measurements.py b/pyro/source/tests/contrib/tracking/test_measurements.py new file mode 100644 index 0000000000000000000000000000000000000000..f946311906478c7e818281dfe04b999287753718 --- /dev/null +++ b/pyro/source/tests/contrib/tracking/test_measurements.py @@ -0,0 +1,29 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +from pyro.contrib.tracking.measurements import PositionMeasurement + + +def test_PositionMeasurement(): + dimension = 3 + time = 0.232 + frame_num = 5 + measurement = PositionMeasurement( + mean=torch.rand(dimension), + cov=torch.eye(dimension), + time=time, + frame_num=frame_num, + ) + assert measurement.dimension == dimension + x = torch.rand(2 * dimension) + assert measurement(x).shape == (dimension,) + assert measurement.mean.shape == (dimension,) + assert measurement.cov.shape == (dimension, dimension) + assert measurement.time == time + assert measurement.frame_num == frame_num + assert measurement.geodesic_difference( + torch.rand(dimension), torch.rand(dimension) + ).shape == (dimension,) + assert measurement.jacobian().shape == (dimension, 2 * dimension) diff --git a/pyro/source/tests/distributions/__init__.py b/pyro/source/tests/distributions/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/tests/distributions/conftest.py b/pyro/source/tests/distributions/conftest.py new file mode 100644 index 0000000000000000000000000000000000000000..58e308cd73d9d611d523216c09a0da044ddda82e --- /dev/null +++ b/pyro/source/tests/distributions/conftest.py @@ -0,0 +1,1081 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math +from math import pi + +import numpy as np +import pytest +import scipy.stats as sp + +import pyro.distributions as dist +from pyro.distributions.testing.naive_dirichlet import NaiveBeta, NaiveDirichlet +from pyro.distributions.testing.rejection_exponential import RejectionExponential +from pyro.distributions.testing.rejection_gamma import ( + ShapeAugmentedBeta, + ShapeAugmentedDirichlet, + ShapeAugmentedGamma, +) +from tests.distributions.dist_fixture import Fixture + + +class FoldedNormal(dist.FoldedDistribution): + arg_constraints = dist.Normal.arg_constraints + + def __init__(self, loc, scale): + super().__init__(dist.Normal(loc, scale)) + + @property + def loc(self): + return self.base_dist.loc + + @property + def scale(self): + return self.base_dist.scale + + +class SparsePoisson(dist.Poisson): + def __init__(self, rate, *, validate_args=None): + super().__init__(rate, is_sparse=True, validate_args=validate_args) + + +class SineSkewedUniform(dist.SineSkewed): + def __init__(self, lower, upper, skewness, *args, **kwargs): + base_dist = dist.Uniform(lower, upper).to_event(lower.ndim) + super().__init__(base_dist, skewness, *args, **kwargs) + + +class SineSkewedVonMises(dist.SineSkewed): + def __init__(self, von_loc, von_conc, skewness): + base_dist = dist.VonMises(von_loc, von_conc).to_event(von_loc.ndim) + super().__init__(base_dist, skewness) + + +continuous_dists = [ + Fixture( + pyro_dist=dist.Uniform, + scipy_dist=sp.uniform, + examples=[ + {"low": [2.0], "high": [2.5], "test_data": [2.2]}, + { + "low": [2.0, 4.0], + "high": [3.0, 5.0], + "test_data": [[[2.5, 4.5]], [[2.5, 4.5]], [[2.5, 4.5]]], + }, + { + "low": [[2.0], [-3.0], [0.0]], + "high": [[2.5], [0.0], [1.0]], + "test_data": [[2.2], [-2], [0.7]], + }, + ], + scipy_arg_fn=lambda low, high: ( + (), + {"loc": np.array(low), "scale": np.array(high) - np.array(low)}, + ), + ), + Fixture( + pyro_dist=dist.Exponential, + scipy_dist=sp.expon, + examples=[ + {"rate": [2.4], "test_data": [5.5]}, + { + "rate": [2.4, 5.5], + "test_data": [[[5.5, 3.2]], [[5.5, 3.2]], [[5.5, 3.2]]], + }, + { + "rate": [[2.4, 5.5]], + "test_data": [[[5.5, 3.2]], [[5.5, 3.2]], [[5.5, 3.2]]], + }, + {"rate": [[2.4], [5.5]], "test_data": [[5.5], [3.2]]}, + ], + scipy_arg_fn=lambda rate: ((), {"scale": 1.0 / np.array(rate)}), + ), + Fixture( + pyro_dist=RejectionExponential, + scipy_dist=sp.expon, + examples=[ + {"rate": [2.4], "factor": [0.5], "test_data": [5.5]}, + { + "rate": [2.4, 5.5], + "factor": [0.5], + "test_data": [[[5.5, 3.2]], [[5.5, 3.2]], [[5.5, 3.2]]], + }, + { + "rate": [[2.4, 5.5]], + "factor": [0.5], + "test_data": [[[5.5, 3.2]], [[5.5, 3.2]], [[5.5, 3.2]]], + }, + {"rate": [[2.4], [5.5]], "factor": [0.5], "test_data": [[5.5], [3.2]]}, + ], + scipy_arg_fn=lambda rate, factor: ((), {"scale": 1.0 / np.array(rate)}), + ), + Fixture( + pyro_dist=dist.Gamma, + scipy_dist=sp.gamma, + examples=[ + {"concentration": [2.4], "rate": [3.2], "test_data": [5.5]}, + { + "concentration": [[2.4, 2.4], [3.2, 3.2]], + "rate": [[2.4, 2.4], [3.2, 3.2]], + "test_data": [[[5.5, 4.4], [5.5, 4.4]]], + }, + { + "concentration": [[2.4], [2.4]], + "rate": [[3.2], [3.2]], + "test_data": [[5.5], [4.4]], + }, + ], + scipy_arg_fn=lambda concentration, rate: ( + (np.array(concentration),), + {"scale": 1.0 / np.array(rate)}, + ), + ), + Fixture( + pyro_dist=ShapeAugmentedGamma, + scipy_dist=sp.gamma, + examples=[ + {"concentration": [2.4], "rate": [3.2], "test_data": [5.5]}, + { + "concentration": [[2.4, 2.4], [3.2, 3.2]], + "rate": [[2.4, 2.4], [3.2, 3.2]], + "test_data": [[[5.5, 4.4], [5.5, 4.4]]], + }, + { + "concentration": [[2.4], [2.4]], + "rate": [[3.2], [3.2]], + "test_data": [[5.5], [4.4]], + }, + ], + scipy_arg_fn=lambda concentration, rate: ( + (np.array(concentration),), + {"scale": 1.0 / np.array(rate)}, + ), + ), + Fixture( + pyro_dist=dist.Beta, + scipy_dist=sp.beta, + examples=[ + {"concentration1": [2.4], "concentration0": [3.6], "test_data": [0.4]}, + { + "concentration1": [[2.4, 2.4], [3.6, 3.6]], + "concentration0": [[2.5, 2.5], [2.5, 2.5]], + "test_data": [[[0.5, 0.4], [0.5, 0.4]]], + }, + { + "concentration1": [[2.4], [3.7]], + "concentration0": [[3.6], [2.5]], + "test_data": [[0.4], [0.6]], + }, + ], + scipy_arg_fn=lambda concentration1, concentration0: ( + (np.array(concentration1), np.array(concentration0)), + {}, + ), + ), + Fixture( + pyro_dist=NaiveBeta, + scipy_dist=sp.beta, + examples=[ + {"concentration1": [2.4], "concentration0": [3.6], "test_data": [0.4]}, + { + "concentration1": [[2.4, 2.4], [3.6, 3.6]], + "concentration0": [[2.5, 2.5], [2.5, 2.5]], + "test_data": [[[0.5, 0.4], [0.5, 0.4]]], + }, + { + "concentration1": [[2.4], [3.7]], + "concentration0": [[3.6], [2.5]], + "test_data": [[0.4], [0.6]], + }, + ], + scipy_arg_fn=lambda concentration1, concentration0: ( + (np.array(concentration1), np.array(concentration0)), + {}, + ), + ), + Fixture( + pyro_dist=ShapeAugmentedBeta, + scipy_dist=sp.beta, + examples=[ + {"concentration1": [2.4], "concentration0": [3.6], "test_data": [0.4]}, + { + "concentration1": [[2.4, 2.4], [3.6, 3.6]], + "concentration0": [[2.5, 2.5], [2.5, 2.5]], + "test_data": [[[0.5, 0.4], [0.5, 0.4]]], + }, + { + "concentration1": [[2.4], [3.7]], + "concentration0": [[3.6], [2.5]], + "test_data": [[0.4], [0.6]], + }, + ], + scipy_arg_fn=lambda concentration1, concentration0: ( + (np.array(concentration1), np.array(concentration0)), + {}, + ), + ), + Fixture( + pyro_dist=dist.LogNormal, + scipy_dist=sp.lognorm, + examples=[ + {"loc": [1.4], "scale": [0.4], "test_data": [5.5]}, + {"loc": [1.4], "scale": [0.4], "test_data": [[5.5]]}, + { + "loc": [[1.4, 0.4], [1.4, 0.4]], + "scale": [[2.6, 0.5], [2.6, 0.5]], + "test_data": [[5.5, 6.4], [5.5, 6.4]], + }, + { + "loc": [[1.4], [0.4]], + "scale": [[2.6], [0.5]], + "test_data": [[5.5], [6.4]], + }, + ], + scipy_arg_fn=lambda loc, scale: ( + (np.array(scale),), + {"scale": np.exp(np.array(loc))}, + ), + ), + Fixture( + pyro_dist=dist.AffineBeta, + scipy_dist=sp.beta, + examples=[ + { + "concentration1": [2.4], + "concentration0": [3.6], + "loc": [-1.0], + "scale": [2.0], + "test_data": [-0.4], + }, + { + "concentration1": [[2.4, 2.4], [3.6, 3.6]], + "concentration0": [[2.5, 2.5], [2.5, 2.5]], + "loc": [[-1.0, -1.0], [2.0, 2.0]], + "scale": [[2.0, 2.0], [1.0, 1.0]], + "test_data": [[[-0.4, 0.4], [2.5, 2.6]]], + }, + { + "concentration1": [[2.4], [3.7]], + "concentration0": [[3.6], [2.5]], + "loc": [[-1.0], [2.0]], + "scale": [[2.0], [2.0]], + "test_data": [[0.0], [3.0]], + }, + ], + scipy_arg_fn=lambda concentration1, concentration0, loc, scale: ( + ( + np.array(concentration1), + np.array(concentration0), + np.array(loc), + np.array(scale), + ), + {}, + ), + ), + Fixture( + pyro_dist=dist.Normal, + scipy_dist=sp.norm, + examples=[ + {"loc": [2.0], "scale": [4.0], "test_data": [2.0]}, + {"loc": [[2.0]], "scale": [[4.0]], "test_data": [[2.0]]}, + {"loc": [[[2.0]]], "scale": [[[4.0]]], "test_data": [[[2.0]]]}, + { + "loc": [2.0, 50.0], + "scale": [4.0, 100.0], + "test_data": [[2.0, 50.0], [2.0, 50.0]], + }, + ], + scipy_arg_fn=lambda loc, scale: ( + (), + {"loc": np.array(loc), "scale": np.array(scale)}, + ), + prec=0.07, + min_samples=50000, + ), + Fixture( + pyro_dist=dist.MultivariateNormal, + scipy_dist=sp.multivariate_normal, + examples=[ + { + "loc": [2.0, 1.0], + "covariance_matrix": [[1.0, 0.5], [0.5, 1.0]], + "test_data": [[2.0, 1.0], [9.0, 3.4]], + }, + ], + # This hack seems to be the best option right now, as 'scale' is not handled well by get_scipy_batch_logpdf + scipy_arg_fn=lambda loc, covariance_matrix=None: ( + (), + {"mean": np.array(loc), "cov": np.array([[1.0, 0.5], [0.5, 1.0]])}, + ), + prec=0.01, + min_samples=500000, + ), + Fixture( + pyro_dist=dist.LowRankMultivariateNormal, + scipy_dist=sp.multivariate_normal, + examples=[ + { + "loc": [2.0, 1.0], + "cov_diag": [0.5, 0.5], + "cov_factor": [[1.0], [0.5]], + "test_data": [[2.0, 1.0], [9.0, 3.4]], + }, + ], + scipy_arg_fn=lambda loc, cov_diag=None, cov_factor=None: ( + (), + {"mean": np.array(loc), "cov": np.array([[1.5, 0.5], [0.5, 0.75]])}, + ), + prec=0.01, + min_samples=500000, + ), + Fixture( + pyro_dist=FoldedNormal, + examples=[ + {"loc": [2.0], "scale": [4.0], "test_data": [2.0]}, + {"loc": [[2.0]], "scale": [[4.0]], "test_data": [[2.0]]}, + {"loc": [[[2.0]]], "scale": [[[4.0]]], "test_data": [[[2.0]]]}, + { + "loc": [2.0, 50.0], + "scale": [4.0, 100.0], + "test_data": [[2.0, 50.0], [2.0, 50.0]], + }, + ], + ), + Fixture( + pyro_dist=dist.Dirichlet, + scipy_dist=sp.dirichlet, + examples=[ + {"concentration": [2.4, 3, 6], "test_data": [0.2, 0.45, 0.35]}, + { + "concentration": [2.4, 3, 6], + "test_data": [[0.2, 0.45, 0.35], [0.2, 0.45, 0.35]], + }, + { + "concentration": [[2.4, 3, 6], [3.2, 1.2, 0.4]], + "test_data": [[0.2, 0.45, 0.35], [0.3, 0.4, 0.3]], + }, + ], + scipy_arg_fn=lambda concentration: ((concentration,), {}), + ), + Fixture( + pyro_dist=NaiveDirichlet, + scipy_dist=sp.dirichlet, + examples=[ + {"concentration": [2.4, 3, 6], "test_data": [0.2, 0.45, 0.35]}, + { + "concentration": [2.4, 3, 6], + "test_data": [[0.2, 0.45, 0.35], [0.2, 0.45, 0.35]], + }, + { + "concentration": [[2.4, 3, 6], [3.2, 1.2, 0.4]], + "test_data": [[0.2, 0.45, 0.35], [0.3, 0.4, 0.3]], + }, + ], + scipy_arg_fn=lambda concentration: ((concentration,), {}), + ), + Fixture( + pyro_dist=ShapeAugmentedDirichlet, + scipy_dist=sp.dirichlet, + examples=[ + {"concentration": [2.4, 3, 6], "test_data": [0.2, 0.45, 0.35]}, + { + "concentration": [2.4, 3, 6], + "test_data": [[0.2, 0.45, 0.35], [0.2, 0.45, 0.35]], + }, + { + "concentration": [[2.4, 3, 6], [3.2, 1.2, 0.4]], + "test_data": [[0.2, 0.45, 0.35], [0.3, 0.4, 0.3]], + }, + ], + scipy_arg_fn=lambda concentration: ((concentration,), {}), + ), + Fixture( + pyro_dist=dist.Cauchy, + scipy_dist=sp.cauchy, + examples=[ + {"loc": [0.5], "scale": [1.2], "test_data": [1.0]}, + { + "loc": [0.5, 0.5], + "scale": [1.2, 1.2], + "test_data": [[1.0, 1.0], [1.0, 1.0]], + }, + { + "loc": [[0.5], [0.3]], + "scale": [[1.2], [1.0]], + "test_data": [[0.4], [0.35]], + }, + ], + scipy_arg_fn=lambda loc, scale: ( + (), + {"loc": np.array(loc), "scale": np.array(scale)}, + ), + ), + Fixture( + pyro_dist=dist.HalfCauchy, + scipy_dist=sp.halfcauchy, + examples=[ + {"scale": [1.2], "test_data": [1.0]}, + {"scale": [1.2, 1.2], "test_data": [[1.0, 2.0], [1.0, 2.0]]}, + {"scale": [[1.2], [1.0]], "test_data": [[0.54], [0.35]]}, + ], + scipy_arg_fn=lambda scale: ((), {"scale": np.array(scale)}), + ), + Fixture( + pyro_dist=dist.VonMises, + scipy_dist=sp.vonmises, + examples=[ + {"loc": [0.5], "concentration": [1.2], "test_data": [1.0]}, + { + "loc": [0.5, 3.0], + "concentration": [2.0, 0.5], + "test_data": [[1.0, 2.0], [1.0, 2.0]], + }, + { + "loc": [[0.5], [0.3]], + "concentration": [[2.0], [0.5]], + "test_data": [[1.0], [2.0]], + }, + ], + scipy_arg_fn=lambda loc, concentration: ( + (), + {"loc": np.array(loc), "kappa": np.array(concentration)}, + ), + ), + Fixture( + pyro_dist=dist.LKJ, + examples=[ + { + "dim": 3, + "concentration": 1.0, + "test_data": [ + [ + [1.0000, -0.8221, 0.7655], + [-0.8221, 1.0000, -0.5293], + [0.7655, -0.5293, 1.0000], + ], + [ + [1.0000, -0.5345, -0.5459], + [-0.5345, 1.0000, -0.0333], + [-0.5459, -0.0333, 1.0000], + ], + [ + [1.0000, -0.3758, -0.2409], + [-0.3758, 1.0000, 0.4653], + [-0.2409, 0.4653, 1.0000], + ], + [ + [1.0000, -0.8800, -0.9493], + [-0.8800, 1.0000, 0.9088], + [-0.9493, 0.9088, 1.0000], + ], + [ + [1.0000, 0.2284, -0.1283], + [0.2284, 1.0000, 0.0146], + [-0.1283, 0.0146, 1.0000], + ], + ], + }, + ], + ), + Fixture( + pyro_dist=dist.LKJCholesky, + examples=[ + { + "dim": 3, + "concentration": 1.0, + "test_data": [ + [ + [1.0, 0.0, 0.0], + [-0.17332135, 0.98486533, 0.0], + [0.43106407, -0.54767312, 0.71710384], + ], + [ + [1.0, 0.0, 0.0], + [-0.31391555, 0.94945091, 0.0], + [-0.31391296, -0.29767500, 0.90158097], + ], + ], + }, + ], + ), + Fixture( + pyro_dist=dist.Stable, + scipy_dist=sp.levy_stable, + examples=[ + # Skew is zero as the default parameterization of the scipy + # implementation is S and cannot be changed via initizalization + # arguments (pyro's default parameterization is S0 which + # gives different results with non-zero skew). + # Testing with non-zero skew is done in + # tests.distributions.test_stable_log_prob and + # tests.distributions.test_stable + {"stability": [1.5], "skew": 0.0, "test_data": [-10.0]}, + { + "stability": [1.5, 0.5], + "skew": 0.0, + "scale": 2.0, + "loc": -2.0, + "test_data": [10.0, -10.0], + }, + ], + scipy_arg_fn=lambda stability, skew, scale, loc: ( + (), + { + "alpha": np.array(stability), + "beta": np.array(skew), + "scale": np.array(scale), + "loc": np.array(loc), + }, + ), + ), + Fixture( + pyro_dist=dist.MultivariateStudentT, + examples=[ + { + "df": 1.5, + "loc": [0.2, 0.3], + "scale_tril": [[0.8, 0.0], [1.3, 0.4]], + "test_data": [-3.0, 2], + }, + ], + ), + Fixture( + pyro_dist=dist.ProjectedNormal, + examples=[ + {"concentration": [0.0, 0.0], "test_data": [1.0, 0.0]}, + {"concentration": [0.2, 0.1], "test_data": [1.0, 0.0]}, + {"concentration": [2.0, 3.0], "test_data": [0.0, 1.0]}, + {"concentration": [0.1, 0.0, 0.0], "test_data": [1.0, 0.0, 0.0]}, + {"concentration": [0.3, 0.2, 0.1], "test_data": [1.0, 0.0, 0.0]}, + {"concentration": [-1.0, 2.0, 3.0], "test_data": [0.0, 0.0, 1.0]}, + {"concentration": [0.0, 0.0, 0.0, 0.0], "test_data": [1.0, 0.0, 0.0, 0.0]}, + {"concentration": [0.4, 0.3, 0.2, 0.1], "test_data": [1.0, 0.0, 0.0, 0.0]}, + { + "concentration": [-1.0, 2.0, 0.5, -0.5], + "test_data": [0.0, 1.0, 0.0, 0.0], + }, + ], + ), + Fixture( + pyro_dist=dist.SineBivariateVonMises, + examples=[ + { + "phi_loc": [0.0], + "psi_loc": [0.0], + "phi_concentration": [5.0], + "psi_concentration": [6.0], + "correlation": [2.0], + "test_data": [[0.0, 0.0]], + }, + { + "phi_loc": [3.003], + "psi_loc": [-1.343], + "phi_concentration": [5.0], + "psi_concentration": [6.0], + "correlation": [2.0], + "test_data": [[0.0, 1.0]], + }, + { + "phi_loc": [-math.pi / 3], + "psi_loc": -1.0, + "phi_concentration": 0.5, + "psi_concentration": 10.0, + "correlation": 0.9, + "test_data": [[1.0, 0.555]], + }, + { + "phi_loc": [math.pi - 0.2, 1.0], + "psi_loc": [0.0, 1.0], + "phi_concentration": [5.0, 5.0], + "psi_concentration": [7.0, 0.5], + "weighted_correlation": [0.5, 0.1], + "test_data": [[[1.0, -3.0], [1.0, 59.0]]], + }, + ], + ), + Fixture( + pyro_dist=dist.SoftLaplace, + examples=[ + {"loc": [2.0], "scale": [4.0], "test_data": [2.0]}, + {"loc": [[2.0]], "scale": [[4.0]], "test_data": [[2.0]]}, + {"loc": [[[2.0]]], "scale": [[[4.0]]], "test_data": [[[2.0]]]}, + { + "loc": [2.0, 50.0], + "scale": [4.0, 100.0], + "test_data": [[2.0, 50.0], [2.0, 50.0]], + }, + ], + ), + Fixture( + pyro_dist=SineSkewedUniform, + examples=[ + { + "lower": [-pi, -pi], + "upper": [pi, pi], + "skewness": [-pi / 4, 0.1], + "test_data": [pi / 2, -2 * pi / 3], + } + ], + ), + Fixture( + pyro_dist=SineSkewedVonMises, + examples=[ + { + "von_loc": [0.0], + "von_conc": [1.0], + "skewness": [0.342355], + "test_data": [0.1], + }, + { + "von_loc": [0.0, -1.234], + "von_conc": [1.0, 10.0], + "skewness": [[0.342355, -0.0001], [0.91, 0.09]], + "test_data": [[0.1, -3.2], [-2.0, 0.0]], + }, + ], + ), + Fixture( + pyro_dist=dist.AsymmetricLaplace, + examples=[ + {"loc": [1.0], "scale": [1.0], "asymmetry": [2.0], "test_data": [2.0]}, + { + "loc": [2.0, -50.0], + "scale": [2.0, 10.0], + "asymmetry": [0.5, 2.5], + "test_data": [[2.0, 10.0], [-1.0, -50.0]], + }, + ], + ), + Fixture( + pyro_dist=dist.SoftAsymmetricLaplace, + examples=[ + {"loc": [1.0], "scale": [1.0], "asymmetry": [2.0], "test_data": [2.0]}, + { + "loc": [2.0, -50.0], + "scale": [2.0, 10.0], + "asymmetry": [0.5, 2.5], + "softness": [0.7, 1.4], + "test_data": [[2.0, 10.0], [-1.0, -50.0]], + }, + ], + ), + Fixture( + pyro_dist=dist.SkewLogistic, + examples=[ + {"loc": [1.0], "scale": [1.0], "asymmetry": [2.0], "test_data": [2.0]}, + { + "loc": [2.0, -50.0], + "scale": [2.0, 10.0], + "asymmetry": [0.5, 2.5], + "test_data": [[2.0, 10.0], [-1.0, -50.0]], + }, + ], + ), + Fixture( + pyro_dist=dist.Logistic, + examples=[ + {"loc": [1.0], "scale": [1.0], "test_data": [2.0]}, + { + "loc": [2.0, -50.0], + "scale": [2.0, 10.0], + "test_data": [[2.0, 10.0], [-1.0, -50.0]], + }, + ], + ), +] + +discrete_dists = [ + Fixture( + pyro_dist=dist.OrderedLogistic, + examples=[ + {"cutpoints": [0.0, 1.0, 2.0], "predictor": [1.0], "test_data": [1]}, + { + "cutpoints": [0.0, 1.0, 2.0], + "predictor": [-0.5, 0.5, 1.5, 2.5], + "test_data": [0, 1, 2, 3], + }, + { + "cutpoints": [0.0, 1.0], + "predictor": [[-0.5, 0.5, 1.5], [-0.5, 0.5, 1.5]], + "test_data": [[0, 1, 2], [0, 1, 2]], + }, + ], + prec=0.05, + min_samples=10000, + is_discrete=True, + ), + Fixture( + pyro_dist=dist.Multinomial, + scipy_dist=sp.multinomial, + examples=[ + {"probs": [0.1, 0.6, 0.3], "test_data": [0.0, 1.0, 0.0]}, + {"probs": [0.1, 0.6, 0.3], "total_count": 8, "test_data": [2.0, 4.0, 2.0]}, + { + "probs": [0.1, 0.6, 0.3], + "total_count": 8, + "test_data": [[2.0, 4.0, 2.0], [2.0, 4.0, 2.0]], + }, + { + "probs": [[0.1, 0.6, 0.3], [0.2, 0.4, 0.4]], + "total_count": 8, + "test_data": [[2.0, 4.0, 2.0], [1.0, 4.0, 3.0]], + }, + ], + scipy_arg_fn=lambda probs, total_count=[1]: ( + (total_count[0], np.array(probs)), + {}, + ), + prec=0.05, + min_samples=10000, + is_discrete=True, + ), + Fixture( + pyro_dist=dist.Bernoulli, + scipy_dist=sp.bernoulli, + examples=[ + {"probs": [0.25], "test_data": [1.0]}, + { + "probs": [0.25, 0.25], + "test_data": [[[0.0, 1.0]], [[1.0, 0.0]], [[0.0, 0.0]]], + }, + { + "logits": [math.log(p / (1 - p)) for p in (0.25, 0.25)], + "test_data": [[[0.0, 1.0]], [[1.0, 0.0]], [[0.0, 0.0]]], + }, + # for now, avoid tests on infinite logits + # {'logits': [-float('inf'), 0], + # 'test_data': [[0, 1], [0, 1], [0, 1]]}, + { + "logits": [ + [math.log(p / (1 - p)) for p in (0.25, 0.25)], + [math.log(p / (1 - p)) for p in (0.3, 0.3)], + ], + "test_data": [[1.0, 1.0], [0.0, 0.0]], + }, + { + "probs": [[0.25, 0.25], [0.3, 0.3]], + "test_data": [[1.0, 1.0], [0.0, 0.0]], + }, + ], + # for now, avoid tests on infinite logits + # test_data_indices=[0, 1, 2, 3], + batch_data_indices=[-1, -2], + scipy_arg_fn=lambda **kwargs: ((), {"p": kwargs["probs"]}), + prec=0.01, + min_samples=10000, + is_discrete=True, + expected_support_non_vec=[[0.0], [1.0]], + expected_support=[[[0.0, 0.0], [0.0, 0.0]], [[1.0, 1.0], [1.0, 1.0]]], + ), + Fixture( + pyro_dist=dist.BetaBinomial, + examples=[ + { + "concentration1": [2.0], + "concentration0": [5.0], + "total_count": 8, + "test_data": [4.0], + }, + { + "concentration1": [2.0], + "concentration0": [5.0], + "total_count": 8, + "test_data": [[2.0], [4.0]], + }, + { + "concentration1": [[2.0], [2.0]], + "concentration0": [[5.0], [5.0]], + "total_count": 8, + "test_data": [[4.0], [3.0]], + }, + { + "concentration1": [2.0, 2.0], + "concentration0": [5.0, 5.0], + "total_count": [0.0, 0.0], + "test_data": [[0.0, 0.0], [0.0, 0.0]], + }, + { + "concentration1": [2.0, 2.0], + "concentration0": [5.0, 5.0], + "total_count": [[8.0, 7.0], [5.0, 9.0]], + "test_data": [[6.0, 3.0], [2.0, 8.0]], + }, + ], + batch_data_indices=[-1, -2], + prec=0.01, + min_samples=10000, + is_discrete=True, + ), + Fixture( + pyro_dist=dist.Binomial, + scipy_dist=sp.binom, + examples=[ + {"probs": [0.6], "total_count": 8, "test_data": [4.0]}, + {"probs": [0.3], "total_count": 8, "test_data": [[2.0], [4.0]]}, + {"probs": [[0.2], [0.4]], "total_count": 8, "test_data": [[4.0], [3.0]]}, + { + "probs": [0.2, 0.4], + "total_count": [0.0, 0.0], + "test_data": [[0.0, 0.0], [0.0, 0.0]], + }, + { + "probs": [0.2, 0.4], + "total_count": [[8.0, 7.0], [5.0, 9.0]], + "test_data": [[6.0, 3.0], [2.0, 8.0]], + }, + ], + scipy_arg_fn=lambda probs, total_count: ((total_count, probs), {}), + prec=0.05, + min_samples=10000, + is_discrete=True, + ), + Fixture( + pyro_dist=dist.ExtendedBetaBinomial, + examples=[ + { + "concentration1": [2.0], + "concentration0": [5.0], + "total_count": 8, + "test_data": [4.0], + }, + { + "concentration1": [2.0], + "concentration0": [5.0], + "total_count": 8, + "test_data": [[2.0], [4.0]], + }, + { + "concentration1": [[2.0], [2.0]], + "concentration0": [[5.0], [5.0]], + "total_count": 8, + "test_data": [[4.0], [3.0]], + }, + { + "concentration1": [2.0, 2.0], + "concentration0": [5.0, 5.0], + "total_count": [0.0, 0.0], + "test_data": [[0.0, 0.0], [0.0, 0.0]], + }, + { + "concentration1": [2.0, 2.0], + "concentration0": [5.0, 5.0], + "total_count": [[8.0, 7.0], [5.0, 9.0]], + "test_data": [[6.0, 3.0], [2.0, 8.0]], + }, + ], + batch_data_indices=[-1, -2], + prec=0.01, + min_samples=10000, + is_discrete=True, + ), + Fixture( + pyro_dist=dist.ExtendedBinomial, + scipy_dist=sp.binom, + examples=[ + {"probs": [0.6], "total_count": 8, "test_data": [4.0]}, + {"probs": [0.3], "total_count": 8, "test_data": [[2.0], [4.0]]}, + {"probs": [[0.2], [0.4]], "total_count": 8, "test_data": [[4.0], [3.0]]}, + { + "probs": [0.2, 0.4], + "total_count": [0.0, 0.0], + "test_data": [[0.0, 0.0], [0.0, 0.0]], + }, + { + "probs": [0.2, 0.4], + "total_count": [[8.0, 7.0], [5.0, 9.0]], + "test_data": [[6.0, 3.0], [2.0, 8.0]], + }, + ], + scipy_arg_fn=lambda probs, total_count: ((total_count, probs), {}), + prec=0.05, + min_samples=10000, + is_discrete=True, + ), + Fixture( + pyro_dist=dist.Categorical, + scipy_dist=sp.multinomial, + examples=[ + {"probs": [0.1, 0.6, 0.3], "test_data": [2]}, + {"logits": list(map(math.log, [0.1, 0.6, 0.3])), "test_data": [2]}, + { + "logits": [ + list(map(math.log, [0.1, 0.6, 0.3])), + list(map(math.log, [0.2, 0.4, 0.4])), + ], + "test_data": [2, 0], + }, + {"probs": [[0.1, 0.6, 0.3], [0.2, 0.4, 0.4]], "test_data": [2, 0]}, + ], + test_data_indices=[0, 1, 2], + batch_data_indices=[-1, -2], + scipy_arg_fn=None, + prec=0.05, + min_samples=10000, + is_discrete=True, + ), + Fixture( + pyro_dist=dist.DirichletMultinomial, + examples=[ + {"concentration": [0.1, 0.6, 0.3], "test_data": [0.0, 1.0, 0.0]}, + { + "concentration": [0.5, 1.0, 2.0], + "total_count": 8, + "test_data": [0.0, 2.0, 6.0], + }, + { + "concentration": [[0.5, 1.0, 2.0], [3.0, 3.0, 0.1]], + "total_count": 8, + "test_data": [[0.0, 2.0, 6.0], [5.0, 2.0, 1.0]], + }, + ], + prec=0.08, + is_discrete=True, + ), + Fixture( + pyro_dist=dist.GammaPoisson, + examples=[ + {"concentration": [1.0], "rate": [2.0], "test_data": [0.0]}, + {"concentration": [1.0], "rate": [2.0], "test_data": [1.0]}, + {"concentration": [1.0], "rate": [2.0], "test_data": [4.0]}, + { + "concentration": [1.0, 1.0, 1.0], + "rate": [2.0, 2.0, 3.0], + "test_data": [[0.0, 1.0, 4.0], [0.0, 1.0, 4.0]], + }, + { + "concentration": [[1.0], [1.0], [1.0]], + "rate": [[2.0], [2.0], [3.0]], + "test_data": [[0.0], [1.0], [4.0]], + }, + ], + prec=0.08, + is_discrete=True, + ), + Fixture( + pyro_dist=dist.OneHotCategorical, + scipy_dist=sp.multinomial, + examples=[ + {"probs": [0.1, 0.6, 0.3], "test_data": [0.0, 0.0, 1.0]}, + { + "logits": list(map(math.log, [0.1, 0.6, 0.3])), + "test_data": [0.0, 0.0, 1.0], + }, + { + "logits": [ + list(map(math.log, [0.1, 0.6, 0.3])), + list(map(math.log, [0.2, 0.4, 0.4])), + ], + "test_data": [[0.0, 0.0, 1.0], [1.0, 0.0, 0.0]], + }, + { + "probs": [[0.1, 0.6, 0.3], [0.2, 0.4, 0.4]], + "test_data": [[0.0, 0.0, 1.0], [1.0, 0.0, 0.0]], + }, + ], + test_data_indices=[0, 1, 2], + batch_data_indices=[-1, -2], + scipy_arg_fn=lambda probs: ((1, np.array(probs)), {}), + prec=0.05, + min_samples=10000, + is_discrete=True, + ), + Fixture( + pyro_dist=dist.Poisson, + scipy_dist=sp.poisson, + examples=[ + {"rate": [2.0], "test_data": [0.0]}, + {"rate": [3.0], "test_data": [1.0]}, + {"rate": [6.0], "test_data": [4.0]}, + {"rate": [2.0, 3.0, 6.0], "test_data": [[0.0, 1.0, 4.0], [0.0, 1.0, 4.0]]}, + {"rate": [[2.0], [3.0], [6.0]], "test_data": [[0.0], [1.0], [4.0]]}, + ], + scipy_arg_fn=lambda rate: ((np.array(rate),), {}), + prec=0.08, + is_discrete=True, + ), + Fixture( + pyro_dist=SparsePoisson, + scipy_dist=sp.poisson, + examples=[ + {"rate": [2.0], "test_data": [0.0]}, + {"rate": [3.0], "test_data": [1.0]}, + {"rate": [6.0], "test_data": [4.0]}, + {"rate": [2.0, 3.0, 6.0], "test_data": [[0.0, 1.0, 4.0], [0.0, 1.0, 4.0]]}, + {"rate": [[2.0], [3.0], [6.0]], "test_data": [[0.0], [1.0], [4.0]]}, + ], + scipy_arg_fn=lambda rate: ((np.array(rate),), {}), + prec=0.08, + is_discrete=True, + ), + Fixture( + pyro_dist=dist.Geometric, + scipy_dist=sp.geom, + examples=[ + {"logits": [2.0], "test_data": [0.0]}, + {"logits": [3.0], "test_data": [1.0]}, + {"logits": [-6.0], "test_data": [4.0]}, + { + "logits": [2.0, 3.0, -6.0], + "test_data": [[0.0, 1.0, 4.0], [0.0, 1.0, 4.0]], + }, + {"logits": [[2.0], [3.0], [-6.0]], "test_data": [[0.0], [1.0], [4.0]]}, + ], + scipy_arg_fn=lambda probs: ((np.array(probs), -1), {}), + prec=0.08, + is_discrete=True, + ), + Fixture( + pyro_dist=dist.LogNormalNegativeBinomial, + examples=[ + { + "logits": [0.6], + "total_count": 8, + "multiplicative_noise_scale": [0.1], + "test_data": [4.0], + }, + { + "logits": [0.2, 0.4], + "multiplicative_noise_scale": [0.1, 0.2], + "total_count": [[8.0, 7.0], [5.0, 9.0]], + "test_data": [[6.0, 3.0], [2.0, 8.0]], + }, + ], + is_discrete=True, + ), +] + + +@pytest.fixture( + name="dist", + params=continuous_dists + discrete_dists, + ids=lambda x: x.get_test_distribution_name(), +) +def all_distributions(request): + return request.param + + +@pytest.fixture( + name="continuous_dist", + params=continuous_dists, + ids=lambda x: x.get_test_distribution_name(), +) +def continuous_distributions(request): + return request.param + + +@pytest.fixture( + name="discrete_dist", + params=discrete_dists, + ids=lambda x: x.get_test_distribution_name(), +) +def discrete_distributions(request): + return request.param + + +def pytest_collection_modifyitems(items): + for item in items: + if item.nodeid.startswith("tests/distributions"): + if "stage" not in item.keywords: + item.add_marker(pytest.mark.stage("unit")) + if "init" not in item.keywords: + item.add_marker(pytest.mark.init(rng_seed=123)) diff --git a/pyro/source/tests/distributions/dist_fixture.py b/pyro/source/tests/distributions/dist_fixture.py new file mode 100644 index 0000000000000000000000000000000000000000..63ac0dfa112acd4e9f358b57adc6ee5d39b84434 --- /dev/null +++ b/pyro/source/tests/distributions/dist_fixture.py @@ -0,0 +1,177 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import numpy as np +import torch +from torch.distributions.utils import logits_to_probs + +from pyro.distributions.util import broadcast_shape + +SINGLE_TEST_DATUM_IDX = [0] +BATCH_TEST_DATA_IDX = [-1] + + +class Fixture: + def __init__( + self, + pyro_dist=None, + scipy_dist=None, + examples=None, + scipy_arg_fn=None, + prec=0.05, + min_samples=None, + is_discrete=False, + expected_support_non_vec=None, + expected_support=None, + test_data_indices=None, + batch_data_indices=None, + ): + self.pyro_dist = pyro_dist + self.scipy_dist = scipy_dist + self.dist_params, self.test_data = self._extract_fixture_data(examples) + self.scipy_arg_fn = scipy_arg_fn + self.min_samples = min_samples + self.prec = prec + self.is_discrete = is_discrete + self.expected_support_non_vec = expected_support_non_vec + self.expected_support = expected_support + self.test_data_indices = test_data_indices + self.batch_data_indices = batch_data_indices + + def __repr__(self): + return f"Fixture({self.pyro_dist.__name__}, ...)" + + def get_batch_data_indices(self): + if not self.batch_data_indices: + return BATCH_TEST_DATA_IDX + return self.batch_data_indices + + def get_test_data_indices(self): + if not self.test_data_indices: + return SINGLE_TEST_DATUM_IDX + return self.test_data_indices + + def _extract_fixture_data(self, examples): + dist_params, test_data = [], [] + for ex in examples: + test_data.append(ex.pop("test_data")) + dist_params.append(ex) + return dist_params, test_data + + def get_num_test_data(self): + return len(self.test_data) + + def get_samples(self, num_samples, **dist_params): + return self.pyro_dist(**dist_params).sample( + sample_shape=torch.Size((num_samples,)) + ) + + def get_test_data(self, idx, wrap_tensor=True): + if not wrap_tensor: + return self.test_data[idx] + return tensor_wrap(self.test_data[idx])[0] + + def get_dist_params(self, idx, wrap_tensor=True): + if not wrap_tensor: + return self.dist_params[idx] + return tensor_wrap(**self.dist_params[idx]) + + def _convert_logits_to_ps(self, dist_params): + if "logits" in dist_params: + logits = torch.tensor(dist_params.pop("logits")) + is_multidimensional = self.get_test_distribution_name() not in [ + "Bernoulli", + "Geometric", + ] + probs = logits_to_probs(logits, is_binary=not is_multidimensional) + dist_params["probs"] = list(probs.detach().cpu().numpy()) + return dist_params + + def get_scipy_logpdf(self, idx): + if not self.scipy_arg_fn: + return + dist_params = self.get_dist_params(idx, wrap_tensor=False) + dist_params = self._convert_logits_to_ps(dist_params) + args, kwargs = self.scipy_arg_fn(**dist_params) + if self.is_discrete: + log_prob = self.scipy_dist.logpmf( + self.get_test_data(idx, wrap_tensor=False), *args, **kwargs + ) + else: + log_prob = self.scipy_dist.logpdf( + self.get_test_data(idx, wrap_tensor=False), *args, **kwargs + ) + return np.sum(log_prob) + + def get_scipy_batch_logpdf(self, idx): + if not self.scipy_arg_fn: + return + dist_params = self.get_dist_params(idx, wrap_tensor=False) + dist_params_wrapped = self.get_dist_params(idx) + dist_params = self._convert_logits_to_ps(dist_params) + test_data = self.get_test_data(idx, wrap_tensor=False) + test_data_wrapped = self.get_test_data(idx) + shape = broadcast_shape( + self.pyro_dist(**dist_params_wrapped).shape(), test_data_wrapped.size() + ) + log_prob = [] + for i in range(len(test_data)): + batch_params = {} + for k in dist_params: + param = np.broadcast_to(dist_params[k], shape) + batch_params[k] = param[i] + args, kwargs = self.scipy_arg_fn(**batch_params) + if self.is_discrete: + log_prob.append(self.scipy_dist.logpmf(test_data[i], *args, **kwargs)) + else: + log_prob.append(self.scipy_dist.logpdf(test_data[i], *args, **kwargs)) + return log_prob + + def get_num_samples(self, idx): + r""" + Number of samples needed to estimate the population variance within the tolerance limit + Sample variance is normally distributed http://stats.stackexchange.com/a/105338/71884 + (see warning below). + Var(s^2) /approx 1/n * (\loc_4 - \scale^4) + Adjust n as per the tolerance needed to estimate the sample variance + warning: does not work for some distributions like bernoulli - https://stats.stackexchange.com/a/104911 + use the min_samples for explicitly controlling the number of samples to be drawn + """ + if self.min_samples: + return self.min_samples + min_samples = 1000 + tol = 10.0 + required_precision = self.prec / tol + if not self.scipy_dist: + return min_samples + args, kwargs = self.scipy_arg_fn(**self.get_dist_params(idx, wrap_tensor=False)) + try: + fourth_moment = np.max(self.scipy_dist.moment(4, *args, **kwargs)) + var = np.max(self.scipy_dist.var(*args, **kwargs)) + min_computed_samples = int( + math.ceil((fourth_moment - math.pow(var, 2)) / required_precision) + ) + except (AttributeError, ValueError): + return min_samples + return max(min_samples, min_computed_samples) + + def get_test_distribution_name(self): + return self.pyro_dist.__name__ + + +def tensor_wrap(*args, **kwargs): + tensor_list, tensor_map = [], {} + for arg in args: + wrapped_arg = torch.tensor(arg) if isinstance(arg, list) else arg + tensor_list.append(wrapped_arg) + for k in kwargs: + kwarg = kwargs[k] + wrapped_kwarg = torch.tensor(kwarg) if isinstance(kwarg, list) else kwarg + tensor_map[k] = wrapped_kwarg + if args and not kwargs: + return tensor_list + if kwargs and not args: + return tensor_map + return tensor_list, tensor_map diff --git a/pyro/source/tests/distributions/test_binomial.py b/pyro/source/tests/distributions/test_binomial.py new file mode 100644 index 0000000000000000000000000000000000000000..5849a3fad76bac24bfb7dcecdb91db020846785d --- /dev/null +++ b/pyro/source/tests/distributions/test_binomial.py @@ -0,0 +1,67 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +import pyro.distributions as dist +from pyro.contrib.epidemiology.distributions import ( + set_approx_log_prob_tol, + set_approx_sample_thresh, +) +from tests.common import assert_close + + +@pytest.mark.parametrize("total_count", [10, 100, 1000, 4000]) +@pytest.mark.parametrize("prob", [0.01, 0.1, 0.5, 0.9, 0.99]) +def test_binomial_approx_sample(total_count, prob): + sample_shape = (10000,) + d = dist.Binomial(total_count, prob) + expected = d.sample(sample_shape) + with set_approx_sample_thresh(200): + actual = d.sample(sample_shape) + + assert_close(expected.mean(), actual.mean(), rtol=0.05) + assert_close(expected.std(), actual.std(), rtol=0.05) + + +@pytest.mark.parametrize("total_count", [10, 100, 1000, 4000]) +@pytest.mark.parametrize("concentration1", [0.1, 1.0, 10.0]) +@pytest.mark.parametrize("concentration0", [0.1, 1.0, 10.0]) +def test_beta_binomial_approx_sample(concentration1, concentration0, total_count): + sample_shape = (10000,) + d = dist.BetaBinomial(concentration1, concentration0, total_count) + expected = d.sample(sample_shape) + with set_approx_sample_thresh(200): + actual = d.sample(sample_shape) + + assert_close(expected.mean(), actual.mean(), rtol=0.1) + assert_close(expected.std(), actual.std(), rtol=0.1) + + +@pytest.mark.parametrize( + "tol", + [ + 1e-8, + 1e-6, + 1e-4, + 1e-2, + 0.02, + 0.05, + 0.1, + 0.2, + 0.1, + 1.0, + ], +) +def test_binomial_approx_log_prob(tol): + logits = torch.linspace(-10.0, 10.0, 100) + k = torch.arange(100.0).unsqueeze(-1) + n_minus_k = torch.arange(100.0).unsqueeze(-1).unsqueeze(-1) + n = k + n_minus_k + + expected = torch.distributions.Binomial(n, logits=logits).log_prob(k) + with set_approx_log_prob_tol(tol): + actual = dist.Binomial(n, logits=logits).log_prob(k) + + assert_close(actual, expected, atol=tol) diff --git a/pyro/source/tests/distributions/test_categorical.py b/pyro/source/tests/distributions/test_categorical.py new file mode 100644 index 0000000000000000000000000000000000000000..e60b4f14c11d430c20bc4d3599d2c590f7a4beda --- /dev/null +++ b/pyro/source/tests/distributions/test_categorical.py @@ -0,0 +1,116 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from unittest import TestCase + +import numpy as np +import pytest +import scipy.stats as sp +import torch + +import pyro.distributions as dist +from tests.common import assert_equal + + +class TestCategorical(TestCase): + """ + Tests methods specific to the Categorical distribution + """ + + def setUp(self): + n = 1 + self.probs = torch.tensor([0.1, 0.6, 0.3]) + self.batch_ps = torch.tensor([[0.1, 0.6, 0.3], [0.2, 0.4, 0.4]]) + self.n = torch.tensor([n]) + self.test_data = torch.tensor([2.0]) + self.analytic_mean = n * self.probs + one = torch.ones(3) + self.analytic_var = n * torch.mul(self.probs, one.sub(self.probs)) + + # Discrete Distribution + self.d_ps = torch.tensor([[0.2, 0.3, 0.5], [0.1, 0.1, 0.8]]) + self.d_test_data = torch.tensor([[0.0], [5.0]]) + + self.n_samples = 50000 + + self.support_non_vec = torch.tensor([0.0, 1.0, 2.0]) + self.support = torch.tensor([[0.0, 0.0], [1.0, 1.0], [2.0, 2.0]]) + + def test_log_prob_sum(self): + log_px_torch = ( + dist.Categorical(self.probs).log_prob(self.test_data).sum().item() + ) + log_px_np = float( + sp.multinomial.logpmf( + np.array([0, 0, 1]), 1, self.probs.detach().cpu().numpy() + ) + ) + assert_equal(log_px_torch, log_px_np, prec=1e-4) + + def test_mean_and_var(self): + torch_samples = [ + dist.Categorical(self.probs).sample().detach().cpu().numpy() + for _ in range(self.n_samples) + ] + _, counts = np.unique(torch_samples, return_counts=True) + computed_mean = float(counts[0]) / self.n_samples + assert_equal( + computed_mean, self.analytic_mean.detach().cpu().numpy()[0], prec=0.05 + ) + + def test_support_non_vectorized(self): + s = dist.Categorical(self.d_ps[0].squeeze(0)).enumerate_support() + assert_equal(s.data, self.support_non_vec) + + def test_support(self): + s = dist.Categorical(self.d_ps).enumerate_support() + assert_equal(s.data, self.support) + + +def wrap_nested(x, dim): + if dim == 0: + return x + return wrap_nested([x], dim - 1) + + +@pytest.fixture(params=[1, 2, 3], ids=lambda x: "dim=" + str(x)) +def dim(request): + return request.param + + +@pytest.fixture(params=[[0.3, 0.5, 0.2]], ids=None) +def probs(request): + return request.param + + +def modify_params_using_dims(probs, dim): + return torch.tensor(wrap_nested(probs, dim - 1)) + + +def test_support_dims(dim, probs): + probs = modify_params_using_dims(probs, dim) + support = dist.Categorical(probs).enumerate_support() + assert_equal(support.size(), torch.Size((probs.size(-1),) + probs.size()[:-1])) + + +def test_sample_dims(dim, probs): + probs = modify_params_using_dims(probs, dim) + sample = dist.Categorical(probs).sample() + expected_shape = dist.Categorical(probs).shape() + assert_equal(sample.size(), expected_shape) + + +def test_batch_log_dims(dim, probs): + probs = modify_params_using_dims(probs, dim) + log_prob_shape = torch.Size((3,) + dist.Categorical(probs).batch_shape) + support = dist.Categorical(probs).enumerate_support() + log_prob = dist.Categorical(probs).log_prob(support) + assert_equal(log_prob.size(), log_prob_shape) + + +def test_view_reshape_bug(): + batch_shape = (1, 2, 1, 3, 1) + sample_shape = (4,) + cardinality = 2 + logits = torch.randn(batch_shape + (cardinality,)) + dist.Categorical(logits=logits).sample(sample_shape) diff --git a/pyro/source/tests/distributions/test_coalescent.py b/pyro/source/tests/distributions/test_coalescent.py new file mode 100644 index 0000000000000000000000000000000000000000..2fe90ad8b53c6e241665b1da26373d9074a5b29f --- /dev/null +++ b/pyro/source/tests/distributions/test_coalescent.py @@ -0,0 +1,277 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import io +import re + +import pytest +import torch + +import pyro +from pyro.distributions import CoalescentTimes, CoalescentTimesWithRate +from pyro.distributions.coalescent import ( + CoalescentRateLikelihood, + CoalescentTimesConstraint, + _sample_coalescent_times, + bio_phylo_to_times, +) +from pyro.distributions.util import broadcast_shape +from tests.common import assert_close + + +@pytest.mark.parametrize("num_leaves", range(2, 30)) +def test_sample_is_valid(num_leaves): + pyro.set_rng_seed(num_leaves) + + # Check with disperse leaves. + leaf_times = torch.randn(num_leaves) + coal_times = _sample_coalescent_times(leaf_times) + assert CoalescentTimesConstraint(leaf_times).check(coal_times) + assert len(set(coal_times.tolist())) == len(coal_times) + + # Check with simultaneous leaves. + leaf_times = torch.zeros(num_leaves) + coal_times = _sample_coalescent_times(leaf_times) + assert CoalescentTimesConstraint(leaf_times).check(coal_times) + assert len(set(coal_times.tolist())) == len(coal_times) + + +@pytest.mark.parametrize("num_steps", [9]) +@pytest.mark.parametrize("sample_shape", [(), (7,), (4, 5)], ids=str) +@pytest.mark.parametrize("batch_shape", [(), (6,), (2, 3)], ids=str) +@pytest.mark.parametrize("num_leaves", [2, 3, 5, 11]) +def test_simple_smoke(num_leaves, num_steps, batch_shape, sample_shape): + leaf_times = torch.rand(batch_shape + (num_leaves,)).pow(0.5) * num_steps + d = CoalescentTimes(leaf_times) + coal_times = d.sample(sample_shape) + assert coal_times.shape == sample_shape + batch_shape + (num_leaves - 1,) + + actual = d.log_prob(coal_times) + assert actual.shape == sample_shape + batch_shape + + +@pytest.mark.parametrize("num_steps", [9]) +@pytest.mark.parametrize("sample_shape", [(), (6,), (4, 5)], ids=str) +@pytest.mark.parametrize("rate_grid_shape", [(), (2,), (3, 1), (3, 2)], ids=str) +@pytest.mark.parametrize("leaf_times_shape", [(), (2,), (3, 1), (3, 2)], ids=str) +@pytest.mark.parametrize("num_leaves", [2, 7, 11]) +def test_with_rate_smoke( + num_leaves, num_steps, leaf_times_shape, rate_grid_shape, sample_shape +): + batch_shape = broadcast_shape(leaf_times_shape, rate_grid_shape) + leaf_times = torch.rand(leaf_times_shape + (num_leaves,)).pow(0.5) * num_steps + rate_grid = torch.rand(rate_grid_shape + (num_steps,)) + d = CoalescentTimesWithRate(leaf_times, rate_grid) + coal_times = _sample_coalescent_times( + leaf_times.expand(sample_shape + batch_shape + (-1,)) + ) + assert coal_times.shape == sample_shape + batch_shape + (num_leaves - 1,) + + actual = d.log_prob(coal_times) + assert actual.shape == sample_shape + batch_shape + + +@pytest.mark.parametrize("num_steps", [9]) +@pytest.mark.parametrize("sample_shape", [(), (5,)], ids=str) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("num_leaves", [2, 7, 11]) +def test_log_prob_unit_rate(num_leaves, num_steps, batch_shape, sample_shape): + leaf_times = torch.rand(batch_shape + (num_leaves,)).pow(0.5) * num_steps + d1 = CoalescentTimes(leaf_times) + + rate_grid = torch.ones(batch_shape + (num_steps,)) + d2 = CoalescentTimesWithRate(leaf_times, rate_grid) + + coal_times = d1.sample(sample_shape) + assert_close(d1.log_prob(coal_times), d2.log_prob(coal_times)) + + +@pytest.mark.parametrize("num_steps", [9]) +@pytest.mark.parametrize("sample_shape", [(), (5,)], ids=str) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("num_leaves", [2, 7, 11]) +def test_log_prob_scale(num_leaves, num_steps, batch_shape, sample_shape): + rate = torch.randn(batch_shape).exp() + + leaf_times_1 = torch.rand(batch_shape + (num_leaves,)).pow(0.5) * num_steps + d1 = CoalescentTimes(leaf_times_1) + coal_times_1 = d1.sample(sample_shape) + log_prob_1 = d1.log_prob(coal_times_1) + + leaf_times_2 = leaf_times_1 / rate.unsqueeze(-1) + coal_times_2 = coal_times_1 / rate.unsqueeze(-1) + d2 = CoalescentTimes(leaf_times_2, rate) + log_prob_2 = d2.log_prob(coal_times_2) + + log_abs_det_jacobian = -coal_times_2.size(-1) * rate.log() + assert_close(log_prob_1 - log_abs_det_jacobian, log_prob_2) + + +@pytest.mark.parametrize("num_steps", [9]) +@pytest.mark.parametrize("sample_shape", [(), (5,)], ids=str) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("num_leaves", [2, 7, 11]) +def test_log_prob_constant_rate_1(num_leaves, num_steps, batch_shape, sample_shape): + rate = torch.randn(batch_shape).exp() + rate_grid = rate.unsqueeze(-1).expand(batch_shape + (num_steps,)) + leaf_times_2 = torch.rand(batch_shape + (num_leaves,)).pow(0.5) * num_steps + leaf_times_1 = leaf_times_2 * rate.unsqueeze(-1) + + d1 = CoalescentTimes(leaf_times_1) + coal_times_1 = d1.sample(sample_shape) + log_prob_1 = d1.log_prob(coal_times_1) + + d2 = CoalescentTimesWithRate(leaf_times_2, rate_grid) + coal_times_2 = coal_times_1 / rate.unsqueeze(-1) + log_prob_2 = d2.log_prob(coal_times_2) + + log_abs_det_jacobian = -coal_times_2.size(-1) * rate.log() + assert_close(log_prob_1 - log_abs_det_jacobian, log_prob_2) + + +@pytest.mark.parametrize("num_steps", [9]) +@pytest.mark.parametrize("sample_shape", [(), (5,)], ids=str) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("num_leaves", [2, 7, 11]) +def test_log_prob_constant_rate_2(num_leaves, num_steps, batch_shape, sample_shape): + rate = torch.randn(batch_shape).exp() + rate_grid = rate.unsqueeze(-1).expand(batch_shape + (num_steps,)) + leaf_times = torch.rand(batch_shape + (num_leaves,)).pow(0.5) * num_steps + + d1 = CoalescentTimes(leaf_times, rate) + coal_times = d1.sample(sample_shape) + log_prob_1 = d1.log_prob(coal_times) + + d2 = CoalescentTimesWithRate(leaf_times, rate_grid) + log_prob_2 = d2.log_prob(coal_times) + + assert_close(log_prob_1, log_prob_2) + + +@pytest.mark.parametrize("clamped", [True, False], ids=["clamped", "unclamped"]) +@pytest.mark.parametrize("num_steps", [2, 5, 10, 20]) +@pytest.mark.parametrize("num_leaves", [2, 5, 10, 20]) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +def test_likelihood_vectorized(num_leaves, num_steps, batch_shape, clamped): + if clamped: + leaf_times = torch.rand(batch_shape + (num_leaves,)).pow(0.5) * num_steps + coal_times = CoalescentTimes(leaf_times).sample().clamp(min=0) + else: + leaf_times = torch.randn(batch_shape + (num_leaves,)) + leaf_times.mul_(0.25).add_(0.75).mul_(num_steps) + coal_times = CoalescentTimes(leaf_times).sample() + + rate_grid = torch.rand(batch_shape + (num_steps,)) + 0.5 + + d = CoalescentTimesWithRate(leaf_times, rate_grid) + expected = d.log_prob(coal_times) + + likelihood = CoalescentRateLikelihood(leaf_times, coal_times, num_steps) + actual = likelihood(rate_grid).sum(-1) + + assert_close(actual, expected) + + +@pytest.mark.parametrize("clamped", [True, False], ids=["clamped", "unclamped"]) +@pytest.mark.parametrize("num_steps", [2, 5, 10, 20]) +@pytest.mark.parametrize("num_leaves", [2, 5, 10, 20]) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +def test_likelihood_sequential(num_leaves, num_steps, batch_shape, clamped): + if clamped: + leaf_times = torch.rand(batch_shape + (num_leaves,)).pow(0.5) * num_steps + coal_times = CoalescentTimes(leaf_times).sample().clamp(min=0) + else: + leaf_times = torch.randn(batch_shape + (num_leaves,)) + leaf_times.mul_(0.25).add_(0.75).mul_(num_steps) + coal_times = CoalescentTimes(leaf_times).sample() + + rate_grid = torch.rand(batch_shape + (num_steps,)) + 0.5 + + d = CoalescentTimesWithRate(leaf_times, rate_grid) + expected = d.log_prob(coal_times) + + likelihood = CoalescentRateLikelihood(leaf_times, coal_times, num_steps) + actual = sum(likelihood(rate_grid[..., t], t) for t in range(num_steps)) + + assert_close(actual, expected) + + +TREE_NEXUS = """ +#NEXUS +Begin Trees; + Tree tree1=((EPI_ISL_408009:0.00000[&date=2020.08], + EPI_ISL_408008:0.00000[&date=2020.08]) NODE_0000004:0.17430[&date=2020.08], + (EPI_ISL_417931:0.28554[&date=2020.21], + (EPI_ISL_417332:0.11102[&date=2020.20], EPI_ISL_413931:0.08643[&date=2020.18]) + NODE_0000005:0.16360[&date=2020.09], ((EPI_ISL_413558:0.11909[&date=2020.16], + (EPI_ISL_413559:0.07179[&date=2020.16], + (EPI_ISL_412862:0.00000[&date=2020.15], + EPI_ISL_413561:0.01093[&date=2020.16]) + NODE_0000011:0.06086[&date=2020.15]) + NODE_0000012:0.04730[&date=2020.09]) NODE_0000007:0.06603[&date=2020.04], + (EPI_ISL_411955:0.09393[&date=2020.11], + (EPI_ISL_417325:0.08372[&date=2020.17], + (EPI_ISL_417318:0.02411[&date=2020.16], + EPI_ISL_417320:0.03504[&date=2020.17]) + NODE_0000009:0.05141[&date=2020.14]) + NODE_0000006:0.07032[&date=2020.09]) + NODE_0000014:0.04474[&date=2020.02]) NODE_0000010:0.04578[&date=2019.97], + (EPI_ISL_417933:0.15496[&date=2020.21], EPI_ISL_414648:0.13583[&date=2020.19], + (EPI_ISL_417932:0.09490[&date=2020.21], + (EPI_ISL_417937:0.05785[&date=2020.21], + EPI_ISL_417331:0.04419[&date=2020.20]) + NODE_0000001:0.03705[&date=2020.15], + (EPI_ISL_417938:0.06860[&date=2020.21], + (EPI_ISL_417939:0.04394[&date=2020.21], + (EPI_ISL_417330:0.00314[&date=2020.20], + (EPI_ISL_416457:0.00000[&date=2020.21], + EPI_ISL_417935:0.00000[&date=2020.21]) + NODE_0000018:0.01680[&date=2020.21]) + NODE_0000017:0.02714[&date=2020.19]) + NODE_0000016:0.02466[&date=2020.17]) + NODE_0000015:0.02630[&date=2020.14]) + NODE_0000000:0.06006[&date=2020.12]) + NODE_0000002:0.13059[&date=2020.06]) + NODE_0000003:0.02264[&date=2019.93]) NODE_0000008:0.10000[&date=2019.90]; +End; +""" + + +@pytest.fixture +def tree(): + Phylo = pytest.importorskip("Bio.Phylo") + tree_file = io.StringIO(TREE_NEXUS) + trees = list(Phylo.parse(tree_file, "nexus")) + assert len(trees) == 1 + return trees[0] + + +def test_bio_phylo_to_times(tree): + leaf_times, coal_times = bio_phylo_to_times(tree) + assert len(coal_times) + 1 == len(leaf_times) + + # Check positivity. + times = torch.cat([coal_times, leaf_times]) + signs = torch.cat([-torch.ones_like(coal_times), torch.ones_like(leaf_times)]) + times, index = times.sort(0) + signs = signs[index] + lineages = signs.flip([0]).cumsum(0).flip([0]) + assert (lineages >= 0).all() + + +def test_bio_phylo_to_times_custom(tree): + # Test a custom time parser. + def get_time(clade): + date_string = re.search(r"date=(\d\d\d\d\.\d\d)", clade.comment).group(1) + return (float(date_string) - 2020) * 365.25 + + leaf_times, coal_times = bio_phylo_to_times(tree, get_time=get_time) + assert len(coal_times) + 1 == len(leaf_times) + + # Check positivity. + times = torch.cat([coal_times, leaf_times]) + signs = torch.cat([-torch.ones_like(coal_times), torch.ones_like(leaf_times)]) + times, index = times.sort(0) + signs = signs[index] + lineages = signs.flip([0]).cumsum(0).flip([0]) + assert (lineages >= 0).all() diff --git a/pyro/source/tests/distributions/test_conjugate.py b/pyro/source/tests/distributions/test_conjugate.py new file mode 100644 index 0000000000000000000000000000000000000000..da3e29a8c2fc383002be3f974d2191c5f33a9c9d --- /dev/null +++ b/pyro/source/tests/distributions/test_conjugate.py @@ -0,0 +1,126 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import pytest +import torch + +import pyro.distributions as dist +from pyro.distributions import BetaBinomial, DirichletMultinomial, GammaPoisson +from tests.common import assert_close + + +@pytest.mark.parametrize( + "dist", + [ + BetaBinomial(2.0, 5.0, 10.0), + BetaBinomial( + torch.tensor([2.0, 4.0]), + torch.tensor([5.0, 8.0]), + torch.tensor([10.0, 12.0]), + ), + DirichletMultinomial(torch.tensor([0.5, 1.0, 2.0]), 5), + DirichletMultinomial( + torch.tensor([[0.5, 1.0, 2.0], [0.2, 0.5, 0.8]]), torch.tensor(10.0) + ), + GammaPoisson(2.0, 2.0), + GammaPoisson(torch.tensor([6.0, 2]), torch.tensor([2.0, 8.0])), + ], +) +def test_mean(dist): + analytic_mean = dist.mean + num_samples = 500000 + sample_mean = dist.sample((num_samples,)).mean(0) + assert_close(sample_mean, analytic_mean, atol=0.01) + + +@pytest.mark.parametrize( + "dist", + [ + BetaBinomial(2.0, 5.0, 10.0), + BetaBinomial( + torch.tensor([2.0, 4.0]), + torch.tensor([5.0, 8.0]), + torch.tensor([10.0, 12.0]), + ), + DirichletMultinomial(torch.tensor([0.5, 1.0, 2.0]), 5), + DirichletMultinomial( + torch.tensor([[0.5, 1.0, 2.0], [0.2, 0.5, 0.8]]), torch.tensor(10.0) + ), + GammaPoisson(2.0, 2.0), + GammaPoisson(torch.tensor([6.0, 2]), torch.tensor([2.0, 8.0])), + ], +) +def test_variance(dist): + analytic_var = dist.variance + num_samples = 500000 + sample_var = dist.sample((num_samples,)).var(0) + assert_close(sample_var, analytic_var, rtol=0.01) + + +@pytest.mark.parametrize( + "dist, values", + [ + (BetaBinomial(2.0, 5.0, 10), None), + (BetaBinomial(2.0, 5.0, 10), None), + (GammaPoisson(2.0, 2.0), torch.arange(10.0)), + (GammaPoisson(6.0, 2.0), torch.arange(20.0)), + ], +) +def test_log_prob_support(dist, values): + if values is None: + values = dist.enumerate_support() + log_probs = dist.log_prob(values) + assert_close(log_probs.logsumexp(0), torch.tensor(0.0), atol=0.01) + + +@pytest.mark.parametrize("total_count", [1, 2, 3, 10]) +@pytest.mark.parametrize("shape", [(1,), (3, 1), (2, 3, 1)]) +def test_beta_binomial_log_prob(total_count, shape): + concentration0 = torch.randn(shape).exp() + concentration1 = torch.randn(shape).exp() + value = torch.arange(1.0 + total_count) + + num_samples = 100000 + probs = dist.Beta(concentration1, concentration0).sample((num_samples,)) + log_probs = dist.Binomial(total_count, probs).log_prob(value) + expected = log_probs.logsumexp(0) - math.log(num_samples) + + actual = BetaBinomial(concentration1, concentration0, total_count).log_prob(value) + assert_close(actual, expected, rtol=0.02) + + +@pytest.mark.parametrize("total_count", [1, 2, 3, 10]) +@pytest.mark.parametrize("batch_shape", [(1,), (3, 1), (2, 3, 1)]) +@pytest.mark.parametrize("is_sparse", [False, True], ids=["dense", "sparse"]) +def test_dirichlet_multinomial_log_prob(total_count, batch_shape, is_sparse): + event_shape = (3,) + concentration = torch.rand(batch_shape + event_shape).exp() + # test on one-hots + value = total_count * torch.eye(3).reshape( + event_shape + (1,) * len(batch_shape) + event_shape + ) + + num_samples = 100000 + probs = dist.Dirichlet(concentration).sample((num_samples, 1)) + log_probs = dist.Multinomial(total_count, probs).log_prob(value) + assert log_probs.shape == (num_samples,) + event_shape + batch_shape + expected = log_probs.logsumexp(0) - math.log(num_samples) + + actual = DirichletMultinomial(concentration, total_count, is_sparse).log_prob(value) + assert_close(actual, expected, atol=0.05) + + +@pytest.mark.parametrize("shape", [(1,), (3, 1), (2, 3, 1)]) +def test_gamma_poisson_log_prob(shape): + gamma_conc = torch.randn(shape).exp() + gamma_rate = torch.randn(shape).exp() + value = torch.arange(20.0) + + num_samples = 300000 + poisson_rate = dist.Gamma(gamma_conc, gamma_rate).sample((num_samples,)) + log_probs = dist.Poisson(poisson_rate).log_prob(value) + expected = log_probs.logsumexp(0) - math.log(num_samples) + actual = GammaPoisson(gamma_conc, gamma_rate).log_prob(value) + assert_close(actual, expected, rtol=0.05) diff --git a/pyro/source/tests/distributions/test_conjugate_update.py b/pyro/source/tests/distributions/test_conjugate_update.py new file mode 100644 index 0000000000000000000000000000000000000000..d467979c89e0f6582889c70529aece6d6308d4fd --- /dev/null +++ b/pyro/source/tests/distributions/test_conjugate_update.py @@ -0,0 +1,56 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +import pyro.distributions as dist +from tests.common import assert_close + + +@pytest.mark.parametrize("sample_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +def test_beta_binomial(sample_shape, batch_shape): + concentration1 = torch.randn(batch_shape).exp() + concentration0 = torch.randn(batch_shape).exp() + total = 10 + obs = dist.Binomial(total, 0.2).sample(sample_shape + batch_shape) + + f = dist.Beta(concentration1, concentration0) + g = dist.Beta(1 + obs, 1 + total - obs) + fg, log_normalizer = f.conjugate_update(g) + + x = fg.sample(sample_shape) + assert_close(f.log_prob(x) + g.log_prob(x), fg.log_prob(x) + log_normalizer) + + +@pytest.mark.parametrize("sample_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +def test_dirichlet_multinomial(sample_shape, batch_shape): + concentration = torch.randn(batch_shape + (3,)).exp() + total = 10 + probs = torch.tensor([0.2, 0.3, 0.5]) + obs = dist.Multinomial(total, probs).sample(sample_shape + batch_shape) + + f = dist.Dirichlet(concentration) + g = dist.Dirichlet(1 + obs) + fg, log_normalizer = f.conjugate_update(g) + + x = fg.sample(sample_shape) + assert_close(f.log_prob(x) + g.log_prob(x), fg.log_prob(x) + log_normalizer) + + +@pytest.mark.parametrize("sample_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +def test_gamma_poisson(sample_shape, batch_shape): + concentration = torch.randn(batch_shape).exp() + rate = torch.randn(batch_shape).exp() + nobs = 5 + obs = dist.Poisson(10.0).sample((nobs,) + sample_shape + batch_shape).sum(0) + + f = dist.Gamma(concentration, rate) + g = dist.Gamma(1 + obs, nobs) + fg, log_normalizer = f.conjugate_update(g) + + x = fg.sample(sample_shape) + assert_close(f.log_prob(x) + g.log_prob(x), fg.log_prob(x) + log_normalizer) diff --git a/pyro/source/tests/distributions/test_constraints.py b/pyro/source/tests/distributions/test_constraints.py new file mode 100644 index 0000000000000000000000000000000000000000..0abe1c90a374aaa17a15e9c489c4c0685a2818ea --- /dev/null +++ b/pyro/source/tests/distributions/test_constraints.py @@ -0,0 +1,36 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +from pyro.distributions import constraints +from pyro.ops.tensor_utils import safe_normalize + + +@pytest.mark.parametrize("dim", [2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 1000, 10000, 100000]) +def test_sphere_check(dim): + data = torch.randn(100, dim) + assert not constraints.sphere.check(data).any() + + data = safe_normalize(data) + actual = constraints.sphere.check(data) + assert actual.all() + assert actual.shape == data.shape[:-1] + + +@pytest.mark.parametrize("batch_shape", [(), (3, 4)]) +@pytest.mark.parametrize( + "constraint, event_shape", + [ + (constraints.positive_ordered_vector, (5,)), + (constraints.corr_matrix, (6,)), + (constraints.positive_definite, (3, 3)), + ], +) +def test_constraints(constraint, batch_shape, event_shape): + x = torch.randn(batch_shape + event_shape) + y = torch.distributions.transform_to(constraint)(x) + actual = constraint.check(y) + assert actual.all() + assert actual.shape == batch_shape diff --git a/pyro/source/tests/distributions/test_cuda.py b/pyro/source/tests/distributions/test_cuda.py new file mode 100644 index 0000000000000000000000000000000000000000..40ee2f0e99a4432cfd10be3aa28d30b3bd2118ad --- /dev/null +++ b/pyro/source/tests/distributions/test_cuda.py @@ -0,0 +1,96 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch +from torch.autograd import grad + +from tests.common import ( + assert_equal, + requires_cuda, + xfail_if_not_implemented, +) + + +@requires_cuda +def test_sample(dist): + for idx in range(len(dist.dist_params)): + # Compute CPU value. + with torch.device("cpu"): + params = dist.get_dist_params(idx) + try: + with xfail_if_not_implemented(): + cpu_value = dist.pyro_dist(**params).sample() + except ValueError as e: + pytest.xfail("CPU version fails: {}".format(e)) + assert not cpu_value.is_cuda + + # Compute GPU value. + with torch.device("cuda"): + params = dist.get_dist_params(idx) + cuda_value = dist.pyro_dist(**params).sample() + assert cuda_value.is_cuda + + assert_equal(cpu_value.size(), cuda_value.size()) + + +@requires_cuda +def test_rsample(dist): + if not dist.pyro_dist.has_rsample: + return + for idx in range(len(dist.dist_params)): + # Compute CPU value. + with torch.device("cpu"): + params = dist.get_dist_params(idx) + grad_params = [ + key + for key, val in params.items() + if torch.is_tensor(val) and val.dtype in (torch.float32, torch.float64) + ] + for key in grad_params: + val = params[key].clone() + val.requires_grad = True + params[key] = val + try: + with xfail_if_not_implemented(): + cpu_value = dist.pyro_dist(**params).rsample() + cpu_grads = grad(cpu_value.sum(), [params[key] for key in grad_params]) + except ValueError as e: + pytest.xfail("CPU version fails: {}".format(e)) + assert not cpu_value.is_cuda + + # Compute GPU value. + with torch.device("cuda"): + params = dist.get_dist_params(idx) + for key in grad_params: + val = params[key].clone() + val.requires_grad = True + params[key] = val + cuda_value = dist.pyro_dist(**params).rsample() + assert cuda_value.is_cuda + assert_equal(cpu_value.size(), cuda_value.size()) + + cuda_grads = grad(cuda_value.sum(), [params[key] for key in grad_params]) + for cpu_grad, cuda_grad in zip(cpu_grads, cuda_grads): + assert_equal(cpu_grad.size(), cuda_grad.size()) + + +@requires_cuda +def test_log_prob(dist): + for idx in range(len(dist.dist_params)): + # Compute CPU value. + with torch.device("cpu"): + data = dist.get_test_data(idx) + params = dist.get_dist_params(idx) + with xfail_if_not_implemented(): + cpu_value = dist.pyro_dist(**params).log_prob(data) + assert not cpu_value.is_cuda + + # Compute GPU value. + with torch.device("cuda"): + data = dist.get_test_data(idx) + params = dist.get_dist_params(idx) + cuda_value = dist.pyro_dist(**params).log_prob(data) + assert cuda_value.is_cuda + + assert_equal(cpu_value, cuda_value.cpu()) diff --git a/pyro/source/tests/distributions/test_delta.py b/pyro/source/tests/distributions/test_delta.py new file mode 100644 index 0000000000000000000000000000000000000000..932a923d1b5db6d1bb86589ba533a0c966306a34 --- /dev/null +++ b/pyro/source/tests/distributions/test_delta.py @@ -0,0 +1,78 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from unittest import TestCase + +import numpy as np +import pytest +import torch + +import pyro.distributions as dist +from tests.common import assert_equal + + +class TestDelta(TestCase): + def setUp(self): + self.v = torch.tensor([3.0]) + self.vs = torch.tensor([[0.0], [1.0], [2.0], [3.0]]) + self.vs_expanded = self.vs.expand(4, 3) + self.test_data = torch.tensor([[3.0], [3.0], [3.0]]) + self.batch_test_data_1 = torch.arange(0.0, 4.0).unsqueeze(1).expand(4, 3) + self.batch_test_data_2 = torch.arange(4.0, 8.0).unsqueeze(1).expand(4, 3) + self.batch_test_data_3 = torch.Tensor([[3.0], [3.0], [3.0], [3.0]]) + self.expected_support = [[[0.0], [1.0], [2.0], [3.0]]] + self.expected_support_non_vec = [[3.0]] + self.analytic_mean = 3.0 + self.analytic_var = 0.0 + self.n_samples = 10 + + def test_log_prob_sum(self): + log_px_torch = dist.Delta(self.v).log_prob(self.test_data).sum() + assert_equal(log_px_torch.item(), 0) + + def test_batch_log_prob(self): + log_px_torch = ( + dist.Delta(self.vs_expanded).log_prob(self.batch_test_data_1).data + ) + assert_equal(log_px_torch.sum().item(), 0) + log_px_torch = ( + dist.Delta(self.vs_expanded).log_prob(self.batch_test_data_2).data + ) + assert_equal(log_px_torch.sum().item(), float("-inf")) + + def test_batch_log_prob_shape(self): + assert dist.Delta(self.vs).log_prob(self.batch_test_data_3).size() == (4, 1) + assert dist.Delta(self.v).log_prob(self.batch_test_data_3).size() == (4, 1) + + def test_mean_and_var(self): + torch_samples = [ + dist.Delta(self.v).sample().detach().cpu().numpy() + for _ in range(self.n_samples) + ] + torch_mean = np.mean(torch_samples) + torch_var = np.var(torch_samples) + assert_equal(torch_mean, self.analytic_mean) + assert_equal(torch_var, self.analytic_var) + + +@pytest.mark.parametrize( + "batch_dim,event_dim", [(b, e) for b in range(4) for e in range(1 + b)] +) +@pytest.mark.parametrize("has_log_density", [False, True]) +def test_shapes(batch_dim, event_dim, has_log_density): + shape = tuple(range(2, 2 + batch_dim + event_dim)) + batch_shape = shape[:batch_dim] + v = torch.randn(shape) + log_density = torch.randn(batch_shape) if has_log_density else 0 + + d = dist.Delta(v, log_density=log_density, event_dim=event_dim) + x = d.rsample() + assert (x == v).all() + assert (d.log_prob(x) == log_density).all() + + +@pytest.mark.parametrize("batch_shape", [(), [], (2,), [2], torch.Size([2]), [2, 3]]) +def test_expand(batch_shape): + d1 = dist.Delta(torch.tensor(1.234)) + d2 = d1.expand(batch_shape) + assert d2.batch_shape == torch.Size(batch_shape) diff --git a/pyro/source/tests/distributions/test_distributions.py b/pyro/source/tests/distributions/test_distributions.py new file mode 100644 index 0000000000000000000000000000000000000000..546803ebc7871d27bd99ef42a5ea87b597cf9301 --- /dev/null +++ b/pyro/source/tests/distributions/test_distributions.py @@ -0,0 +1,444 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import numpy as np +import pytest +import torch + +import pyro +import pyro.distributions as dist +from pyro.distributions import TorchDistribution +from pyro.distributions.testing.gof import auto_goodness_of_fit +from pyro.distributions.util import broadcast_shape +from tests.common import ( + TEST_FAILURE_RATE, + assert_close, + assert_equal, + xfail_if_not_implemented, +) + + +def _log_prob_shape(dist, x_size=torch.Size()): + event_dims = len(dist.event_shape) + expected_shape = broadcast_shape(dist.shape(), x_size, strict=True) + if event_dims > 0: + expected_shape = expected_shape[:-event_dims] + return expected_shape + + +# Distribution tests - all distributions + + +def test_support_shape(dist): + for idx in range(dist.get_num_test_data()): + dist_params = dist.get_dist_params(idx) + d = dist.pyro_dist(**dist_params) + assert d.support.event_dim == d.event_dim + x = dist.get_test_data(idx) + ok = d.support.check(x) + assert ok.shape == broadcast_shape( + d.batch_shape, x.shape[: x.dim() - d.event_dim] + ) + assert ok.all() + + +def test_infer_shapes(dist): + if "LKJ" in dist.pyro_dist.__name__ or "SineSkewed" in dist.pyro_dist.__name__: + pytest.xfail(reason="cannot statically compute shape") + for idx in range(dist.get_num_test_data()): + dist_params = dist.get_dist_params(idx) + arg_shapes = { + k: v.shape if isinstance(v, torch.Tensor) else () + for k, v in dist_params.items() + } + batch_shape, event_shape = dist.pyro_dist.infer_shapes(**arg_shapes) + d = dist.pyro_dist(**dist_params) + assert d.batch_shape == batch_shape + assert d.event_shape == event_shape + + +def test_batch_log_prob(dist): + if dist.scipy_arg_fn is None: + pytest.skip( + "{}.log_prob_sum has no scipy equivalent".format(dist.pyro_dist.__name__) + ) + for idx in dist.get_batch_data_indices(): + dist_params = dist.get_dist_params(idx) + d = dist.pyro_dist(**dist_params) + test_data = dist.get_test_data(idx) + log_prob_sum_pyro = d.log_prob(test_data).sum().item() + log_prob_sum_np = np.sum(dist.get_scipy_batch_logpdf(-1)) + assert_equal(log_prob_sum_pyro, log_prob_sum_np) + + +def test_batch_log_prob_shape(dist): + for idx in range(dist.get_num_test_data()): + dist_params = dist.get_dist_params(idx) + d = dist.pyro_dist(**dist_params) + x = dist.get_test_data(idx) + with xfail_if_not_implemented(): + # Get log_prob shape after broadcasting. + expected_shape = _log_prob_shape(d, x.size()) + log_p_obj = d.log_prob(x) + assert log_p_obj.size() == expected_shape + + +def test_batch_entropy_shape(dist): + for idx in range(dist.get_num_test_data()): + dist_params = dist.get_dist_params(idx) + d = dist.pyro_dist(**dist_params) + with xfail_if_not_implemented(): + # Get entropy shape after broadcasting. + expected_shape = _log_prob_shape(d) + entropy_obj = d.entropy() + assert entropy_obj.size() == expected_shape + + +def test_score_errors_event_dim_mismatch(dist): + for idx in dist.get_batch_data_indices(): + dist_params = dist.get_dist_params(idx) + d = dist.pyro_dist(**dist_params) + test_data_wrong_dims = torch.ones(d.shape() + (1,)) + if len(d.event_shape) > 0: + if dist.get_test_distribution_name() == "MultivariateNormal": + pytest.skip( + "MultivariateNormal does not do shape validation in log_prob." + ) + elif dist.get_test_distribution_name() == "LowRankMultivariateNormal": + pytest.skip( + "LowRankMultivariateNormal does not do shape validation in log_prob." + ) + with pytest.raises((ValueError, RuntimeError)): + d.log_prob(test_data_wrong_dims) + + +def test_score_errors_non_broadcastable_data_shape(dist): + for idx in dist.get_batch_data_indices(): + dist_params = dist.get_dist_params(idx) + d = dist.pyro_dist(**dist_params) + if dist.get_test_distribution_name() == "LKJCholesky": + pytest.skip("https://github.com/pytorch/pytorch/issues/52724") + shape = d.shape() + non_broadcastable_shape = (shape[0] + 1,) + shape[1:] + test_data_non_broadcastable = torch.ones(non_broadcastable_shape) + with pytest.raises((ValueError, RuntimeError)): + d.log_prob(test_data_non_broadcastable) + + +# Distributions tests - continuous distributions + + +def test_support_is_not_discrete(continuous_dist): + Dist = continuous_dist.pyro_dist + for i in range(continuous_dist.get_num_test_data()): + d = Dist(**continuous_dist.get_dist_params(i)) + assert not d.support.is_discrete + + +def test_gof(continuous_dist): + Dist = continuous_dist.pyro_dist + if Dist in [dist.LKJ, dist.LKJCholesky]: + pytest.xfail(reason="incorrect submanifold scaling") + + num_samples = 50000 + for i in range(continuous_dist.get_num_test_data()): + d = Dist(**continuous_dist.get_dist_params(i)) + with torch.random.fork_rng(): + samples = d.sample(torch.Size([num_samples])) + with xfail_if_not_implemented(): + probs = d.log_prob(samples).exp() + + dim = None + if "ProjectedNormal" in Dist.__name__: + dim = samples.size(-1) - 1 + + # Test each batch independently. + probs = probs.reshape(num_samples, -1) + samples = samples.reshape(probs.shape + d.event_shape) + if "Dirichlet" in Dist.__name__: + # The Dirichlet density is over all but one of the probs. + samples = samples[..., :-1] + for b in range(probs.size(-1)): + gof = auto_goodness_of_fit(samples[:, b], probs[:, b], dim=dim) + assert gof > TEST_FAILURE_RATE + + +def test_mean(continuous_dist): + Dist = continuous_dist.pyro_dist + if Dist.__name__ in [ + "Cauchy", + "HalfCauchy", + "SineBivariateVonMises", + "VonMises", + "ProjectedNormal", + "Stable", + ]: + pytest.xfail(reason="Euclidean mean is not defined") + for i in range(continuous_dist.get_num_test_data()): + d = Dist(**continuous_dist.get_dist_params(i)) + with xfail_if_not_implemented(): + actual = d.mean + num_samples = 100000 + if Dist.__name__ == "LogNormal": + num_samples = 200000 + expected = d.sample((num_samples,)).mean(0) + assert_close(actual, expected, atol=0.02, rtol=0.05) + + +def test_variance(continuous_dist): + Dist = continuous_dist.pyro_dist + if Dist.__name__ in [ + "Cauchy", + "HalfCauchy", + "MultivariateStudentT", + "ProjectedNormal", + "Stable", + "VonMises", + ]: + pytest.xfail(reason="Euclidean variance is not defined") + if Dist.__name__ in ["LogNormal"]: + pytest.xfail(reason="high variance estimator") + for i in range(continuous_dist.get_num_test_data()): + d = Dist(**continuous_dist.get_dist_params(i)) + with xfail_if_not_implemented(): + actual = d.variance + expected = d.sample((100000,)).var(0) + assert_close(actual, expected, atol=0.02, rtol=0.05) + + +def test_cdf_icdf(continuous_dist): + Dist = continuous_dist.pyro_dist + for i in range(continuous_dist.get_num_test_data()): + d = Dist(**continuous_dist.get_dist_params(i)) + if d.event_shape.numel() != 1: + continue # only valid for univariate distributions + u = torch.empty((100,) + d.shape()).uniform_() + with xfail_if_not_implemented(): + x = d.icdf(u) + u2 = d.cdf(x) + assert_equal(u, u2) + + +# Distributions tests - discrete distributions + + +def test_support_is_discrete(discrete_dist): + Dist = discrete_dist.pyro_dist + for i in range(discrete_dist.get_num_test_data()): + d = Dist(**discrete_dist.get_dist_params(i)) + assert d.support.is_discrete + + +def test_enumerate_support(discrete_dist): + expected_support = discrete_dist.expected_support + expected_support_non_vec = discrete_dist.expected_support_non_vec + if not expected_support: + pytest.skip("enumerate_support not tested for distribution") + Dist = discrete_dist.pyro_dist + actual_support_non_vec = Dist( + **discrete_dist.get_dist_params(0) + ).enumerate_support() + actual_support = Dist(**discrete_dist.get_dist_params(-1)).enumerate_support() + assert_equal(actual_support.data, torch.tensor(expected_support)) + assert_equal(actual_support_non_vec.data, torch.tensor(expected_support_non_vec)) + + +def test_enumerate_support_shape(dist): + if not dist.pyro_dist.has_enumerate_support: + pytest.skip() + for idx in range(dist.get_num_test_data()): + dist_params = dist.get_dist_params(idx) + d = dist.pyro_dist(**dist_params) + with xfail_if_not_implemented(): + support = d.enumerate_support() + n = support.shape[0] + assert support.shape == (n,) + d.batch_shape + d.event_shape + + support_expanded = d.enumerate_support(expand=True) + assert_equal(support, support_expanded) + + support_unexpanded = d.enumerate_support(expand=False) + assert ( + support_unexpanded.shape + == (n,) + (1,) * len(d.batch_shape) + d.event_shape + ) + assert (support_expanded == support_unexpanded).all() + + +@pytest.mark.parametrize( + "dist_class, args", + [ + (dist.Normal, {"loc": torch.tensor(0.0), "scale": torch.tensor(-1.0)}), + (dist.Gamma, {"concentration": -1.0, "rate": 1.0}), + (dist.Exponential, {"rate": -2}), + ], +) +@pytest.mark.parametrize("validate_args", [True, False]) +def test_distribution_validate_args(dist_class, args, validate_args): + with pyro.validation_enabled(validate_args): + if not validate_args: + dist_class(**args) + else: + with pytest.raises(ValueError): + dist_class(**args) + + +def check_sample_shapes(small, large): + dist_instance = small + if isinstance( + dist_instance, + ( + dist.LogNormal, + dist.LowRankMultivariateNormal, + dist.VonMises, + dist.LogNormalNegativeBinomial, + ), + ): + # Ignore broadcasting bug in LogNormal: + # https://github.com/pytorch/pytorch/pull/7269 + # LogNormalNegativeBinomial has no sample method + return + x = small.sample() + assert_equal(small.log_prob(x).expand(large.batch_shape), large.log_prob(x)) + x = large.sample() + assert_equal(small.log_prob(x), large.log_prob(x)) + + +@pytest.mark.parametrize("sample_shape", [(), (2,), (2, 3)]) +@pytest.mark.parametrize("shape_type", [torch.Size, tuple, list]) +def test_expand_by(dist, sample_shape, shape_type): + for idx in range(dist.get_num_test_data()): + small = dist.pyro_dist(**dist.get_dist_params(idx)) + large = small.expand_by(shape_type(sample_shape)) + assert large.batch_shape == sample_shape + small.batch_shape + check_sample_shapes(small, large) + + +@pytest.mark.parametrize("sample_shape", [(), (2,), (2, 3)]) +@pytest.mark.parametrize("shape_type", [torch.Size, tuple, list]) +@pytest.mark.parametrize("default", [False, True]) +def test_expand_new_dim(dist, sample_shape, shape_type, default): + for idx in range(dist.get_num_test_data()): + small = dist.pyro_dist(**dist.get_dist_params(idx)) + if default: + large = TorchDistribution.expand( + small, shape_type(sample_shape + small.batch_shape) + ) + else: + with xfail_if_not_implemented(): + large = small.expand(shape_type(sample_shape + small.batch_shape)) + assert large.batch_shape == sample_shape + small.batch_shape + check_sample_shapes(small, large) + + +@pytest.mark.parametrize("shape_type", [torch.Size, tuple, list]) +@pytest.mark.parametrize("default", [False, True]) +def test_expand_existing_dim(dist, shape_type, default): + for idx in range(dist.get_num_test_data()): + small = dist.pyro_dist(**dist.get_dist_params(idx)) + for dim, size in enumerate(small.batch_shape): + if size != 1: + continue + batch_shape = list(small.batch_shape) + batch_shape[dim] = 5 + batch_shape = torch.Size(batch_shape) + if default: + large = TorchDistribution.expand(small, shape_type(batch_shape)) + else: + with xfail_if_not_implemented(): + large = small.expand(shape_type(batch_shape)) + assert large.batch_shape == batch_shape + check_sample_shapes(small, large) + + +@pytest.mark.parametrize( + "sample_shapes", + [ + [(2, 1), (2, 3)], + [(2, 1, 1), (2, 1, 3), (2, 5, 3)], + ], +) +@pytest.mark.parametrize("default", [False, True]) +def test_subsequent_expands_ok(dist, sample_shapes, default): + for idx in range(dist.get_num_test_data()): + d = dist.pyro_dist(**dist.get_dist_params(idx)) + original_batch_shape = d.batch_shape + for shape in sample_shapes: + proposed_batch_shape = torch.Size(shape) + original_batch_shape + if default: + n = TorchDistribution.expand(d, proposed_batch_shape) + else: + with xfail_if_not_implemented(): + n = d.expand(proposed_batch_shape) + assert n.batch_shape == proposed_batch_shape + with xfail_if_not_implemented(): + check_sample_shapes(d, n) + d = n + + +@pytest.mark.parametrize( + "initial_shape, proposed_shape", + [ + [(2, 1), (4, 3)], + [(2, 4), (2, 2, 1)], + [(1, 2, 1), (2, 1)], + ], +) +@pytest.mark.parametrize("default", [False, True]) +def test_expand_error(dist, initial_shape, proposed_shape, default): + for idx in range(dist.get_num_test_data()): + small = dist.pyro_dist(**dist.get_dist_params(idx)) + if default: + large = TorchDistribution.expand(small, initial_shape + small.batch_shape) + else: + with xfail_if_not_implemented(): + large = small.expand(torch.Size(initial_shape) + small.batch_shape) + proposed_batch_shape = torch.Size(proposed_shape) + small.batch_shape + with pytest.raises((RuntimeError, ValueError)): + large.expand(proposed_batch_shape) + + +@pytest.mark.parametrize( + "extra_event_dims,expand_shape", + [ + (0, [4, 3, 2, 1]), + (0, [4, 3, 2, 2]), + (1, [5, 4, 3, 2]), + (2, [5, 4, 3]), + ], +) +@pytest.mark.parametrize("default", [False, True]) +def test_expand_reshaped_distribution(extra_event_dims, expand_shape, default): + probs = torch.ones(1, 6) / 6 + d = dist.OneHotCategorical(probs) + full_shape = torch.Size([4, 1, 1, 1, 6]) + if default: + reshaped_dist = TorchDistribution.expand(d, [4, 1, 1, 1]).to_event( + extra_event_dims + ) + else: + reshaped_dist = d.expand_by([4, 1, 1]).to_event(extra_event_dims) + cut = 4 - extra_event_dims + batch_shape, event_shape = full_shape[:cut], full_shape[cut:] + assert reshaped_dist.batch_shape == batch_shape + assert reshaped_dist.event_shape == event_shape + large = reshaped_dist.expand(expand_shape) + assert large.batch_shape == torch.Size(expand_shape) + assert large.event_shape == torch.Size(event_shape) + + # Throws error when batch shape cannot be broadcasted + with pytest.raises((RuntimeError, ValueError)): + reshaped_dist.expand(expand_shape + [3]) + + # Throws error when trying to shrink existing batch shape + with pytest.raises((RuntimeError, ValueError)): + large.expand(expand_shape[1:]) + + +def test_expand_enumerate_support(): + probs = torch.ones(3, 6) / 6 + d = dist.Categorical(probs) + actual_enum_shape = ( + TorchDistribution.expand(d, (4, 3)).enumerate_support(expand=True).shape + ) + assert actual_enum_shape == (6, 4, 3) diff --git a/pyro/source/tests/distributions/test_empirical.py b/pyro/source/tests/distributions/test_empirical.py new file mode 100644 index 0000000000000000000000000000000000000000..2d64e831e392acda15b3a95bc6142ff1be1fe007 --- /dev/null +++ b/pyro/source/tests/distributions/test_empirical.py @@ -0,0 +1,173 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +from pyro.distributions.empirical import Empirical +from tests.common import assert_close, assert_equal + + +@pytest.mark.parametrize("size", [[], [1], [2, 3]]) +@pytest.mark.parametrize("dtype", [torch.float32, torch.float64]) +def test_unweighted_mean_and_var(size, dtype): + samples = [] + for i in range(5): + samples.append(torch.ones(size, dtype=dtype) * i) + samples = torch.stack(samples) + empirical_dist = Empirical(samples, torch.ones(5, dtype=dtype)) + true_mean = torch.ones(size) * 2 + true_var = torch.ones(size) * 2 + assert_equal(empirical_dist.mean, true_mean) + assert_equal(empirical_dist.variance, true_var) + + +@pytest.mark.parametrize( + "batch_shape, event_shape", + [ + ([], []), + ([2], []), + ([2], [5]), + ([2], [5, 3]), + ([2, 5], [3]), + ], +) +@pytest.mark.parametrize("sample_shape", [[], [20], [20, 3, 4]]) +@pytest.mark.parametrize("dtype", [torch.long, torch.float32, torch.float64]) +def test_unweighted_samples(batch_shape, event_shape, sample_shape, dtype): + agg_dim_size = 5 + # empirical samples with desired shape + dim_ordering = list(range(len(batch_shape + event_shape) + 1)) # +1 for agg dim + dim_ordering.insert(len(batch_shape), dim_ordering.pop()) + emp_samples = ( + torch.arange(agg_dim_size, dtype=dtype) + .expand(batch_shape + event_shape + [agg_dim_size]) + .permute(dim_ordering) + ) + # initial weight assignment + weights = torch.ones(batch_shape + [agg_dim_size]) + empirical_dist = Empirical(emp_samples, weights) + samples = empirical_dist.sample(sample_shape=torch.Size(sample_shape)) + assert_equal(samples.size(), torch.Size(sample_shape + batch_shape + event_shape)) + + +@pytest.mark.parametrize( + "sample, weights, expected_mean, expected_var", + [ + ( + torch.tensor([[0.0, 0.0, 0.0], [1.0, 1.0, 1.0]]), + torch.ones(2), + torch.tensor([0.5, 0.5, 0.5]), + torch.tensor([0.25, 0.25, 0.25]), + ), + ( + torch.tensor([[0.0, 0.0, 0.0], [1.0, 1.0, 1.0]]), + torch.ones(2, 3), + torch.tensor([0.0, 1.0]), + torch.tensor([0.0, 0.0]), + ), + ], +) +def test_sample_examples(sample, weights, expected_mean, expected_var): + emp_dist = Empirical(sample, weights) + num_samples = 10000 + assert_equal(emp_dist.mean, expected_mean) + assert_equal(emp_dist.variance, expected_var) + emp_samples = emp_dist.sample((num_samples,)) + assert_close(emp_samples.mean(0), emp_dist.mean, rtol=1e-2) + assert_close(emp_samples.var(0), emp_dist.variance, rtol=1e-2) + + +@pytest.mark.parametrize( + "batch_shape, event_shape", + [ + ([], []), + ([1], []), + ([10], []), + ([10, 8], [3]), + ([10, 8], [3, 4]), + ], +) +@pytest.mark.parametrize("dtype", [torch.long, torch.float32, torch.float64]) +def test_log_prob(batch_shape, event_shape, dtype): + samples = [] + for i in range(5): + samples.append(torch.ones(event_shape, dtype=dtype) * i) + samples = torch.stack(samples).expand(batch_shape + [5] + event_shape) + weights = torch.tensor(1.0).expand(batch_shape + [5]) + empirical_dist = Empirical(samples, weights) + sample_to_score = torch.tensor(1, dtype=dtype).expand(batch_shape + event_shape) + log_prob = empirical_dist.log_prob(sample_to_score) + assert_equal(log_prob, (weights.new_ones(batch_shape + [1]) * 0.2).sum(-1).log()) + + # Value outside support returns -Inf + sample_to_score = torch.tensor(1, dtype=dtype).expand(batch_shape + event_shape) * 6 + log_prob = empirical_dist.log_prob(sample_to_score) + assert log_prob.shape == torch.Size(batch_shape) + assert torch.isinf(log_prob).all() + + # Vectorized ``log_prob`` raises ValueError + with pytest.raises(ValueError): + sample_to_score = torch.ones([3] + batch_shape + event_shape, dtype=dtype) + empirical_dist.log_prob(sample_to_score) + + +@pytest.mark.parametrize("event_shape", [[], [1], [2, 3]]) +@pytest.mark.parametrize("dtype", [torch.long, torch.float32, torch.float64]) +def test_weighted_sample_coherence(event_shape, dtype): + data = [(1.0, 0.5), (0.0, 1.5), (1.0, 0.5), (0.0, 1.5)] + samples, weights = [], [] + for sample, weight in data: + samples.append(sample * torch.ones(event_shape, dtype=dtype)) + weights.append(torch.tensor(weight).log()) + samples, weights = torch.stack(samples), torch.stack(weights) + empirical_dist = Empirical(samples, weights) + assert_equal(empirical_dist.event_shape, torch.Size(event_shape)) + assert_equal(empirical_dist.sample_size, 4) + sample_to_score = torch.ones(event_shape, dtype=dtype) * 1.0 + assert_equal(empirical_dist.log_prob(sample_to_score), torch.tensor(0.25).log()) + samples = empirical_dist.sample(sample_shape=torch.Size((1000,))) + zeros = torch.zeros(event_shape, dtype=dtype) + ones = torch.ones(event_shape, dtype=dtype) + num_zeros = ( + samples.eq(zeros).contiguous().view(1000, -1).min(dim=-1)[0].float().sum() + ) + num_ones = samples.eq(ones).contiguous().view(1000, -1).min(dim=-1)[0].float().sum() + assert_equal(num_zeros.item() / 1000, 0.75, prec=0.02) + assert_equal(num_ones.item() / 1000, 0.25, prec=0.02) + + +@pytest.mark.parametrize("batch_shape", [[], [1], [2], [2, 3]]) +@pytest.mark.parametrize("event_shape", [[], [1], [2, 3]]) +@pytest.mark.parametrize("dtype", [torch.long, torch.float32, torch.float64]) +def test_weighted_mean_var(event_shape, dtype, batch_shape): + data = [(1, 0.5), (0, 1.5), (1, 0.5), (0, 1.5)] + samples, weights = [], [] + for sample, weight in data: + samples.append(sample * torch.ones(event_shape, dtype=dtype)) + weight_dtype = dtype if dtype is not torch.long else None + weights.append(torch.tensor(weight, dtype=weight_dtype).log()) + samples = torch.stack(samples).expand(batch_shape + [4] + event_shape) + weights = torch.stack(weights).expand(batch_shape + [4]) + empirical_dist = Empirical(samples, weights) + if dtype in (torch.float32, torch.float64): + true_mean = torch.ones(batch_shape + event_shape, dtype=dtype) * 0.25 + true_var = torch.ones(batch_shape + event_shape, dtype=dtype) * 0.1875 + assert_equal(empirical_dist.mean, true_mean) + assert_equal(empirical_dist.variance, true_var) + else: + with pytest.raises(ValueError): + empirical_dist.mean + empirical_dist.variance + + +def test_mean_var_non_nan(): + true_mean = torch.randn([1, 2, 3]) + samples, weights = [], [] + for i in range(10): + samples.append(true_mean) + weights.append(torch.tensor(-1000.0)) + samples, weights = torch.stack(samples), torch.stack(weights) + empirical_dist = Empirical(samples, weights) + assert_equal(empirical_dist.mean, true_mean) + assert_equal(empirical_dist.variance, torch.zeros_like(true_mean)) diff --git a/pyro/source/tests/distributions/test_extended.py b/pyro/source/tests/distributions/test_extended.py new file mode 100644 index 0000000000000000000000000000000000000000..dbb1c1eda14cee10bf46542b620285a56f2e4ffb --- /dev/null +++ b/pyro/source/tests/distributions/test_extended.py @@ -0,0 +1,96 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import pytest +import torch +from torch.autograd import grad + +import pyro.distributions as dist +from pyro.contrib.epidemiology.distributions import set_approx_log_prob_tol +from tests.common import assert_equal + + +def check_grad(value, *params): + grads = grad(value.sum(), params, create_graph=True) + assert all(torch.isfinite(g).all() for g in grads) + + +@pytest.mark.parametrize("tol", [0.0, 0.02, 0.05, 0.1]) +def test_extended_binomial(tol): + with set_approx_log_prob_tol(tol): + total_count = torch.tensor([0.0, 1.0, 2.0, 10.0]) + probs = torch.tensor([0.5, 0.5, 0.4, 0.2]).requires_grad_() + + d1 = dist.Binomial(total_count, probs) + d2 = dist.ExtendedBinomial(total_count, probs) + # Check on good data. + data = d1.sample((100,)) + assert_equal(d1.log_prob(data), d2.log_prob(data)) + + # Check on extended data. + data = torch.arange(-10.0, 20.0).unsqueeze(-1) + with pytest.raises(ValueError): + d1.log_prob(data) + log_prob = d2.log_prob(data) + valid = d1.support.check(data) + assert ((log_prob > -math.inf) == valid).all() + check_grad(log_prob, probs) + + # Check on shape error. + with pytest.raises(ValueError): + d2.log_prob(torch.tensor([0.0, 0.0])) + + # Check on value error. + with pytest.raises(ValueError): + d2.log_prob(torch.tensor(0.5)) + + # Check on negative total_count. + total_count = torch.arange(-10, 0.0) + probs = torch.tensor(0.5).requires_grad_() + d = dist.ExtendedBinomial(total_count, probs) + log_prob = d.log_prob(data) + assert (log_prob == -math.inf).all() + check_grad(log_prob, probs) + + +@pytest.mark.parametrize("tol", [0.0, 0.02, 0.05, 0.1]) +def test_extended_beta_binomial(tol): + with set_approx_log_prob_tol(tol): + concentration1 = torch.tensor([0.2, 1.0, 2.0, 1.0]).requires_grad_() + concentration0 = torch.tensor([0.2, 0.5, 1.0, 2.0]).requires_grad_() + total_count = torch.tensor([0.0, 1.0, 2.0, 10.0]) + + d1 = dist.BetaBinomial(concentration1, concentration0, total_count) + d2 = dist.ExtendedBetaBinomial(concentration1, concentration0, total_count) + + # Check on good data. + data = d1.sample((100,)) + assert_equal(d1.log_prob(data), d2.log_prob(data)) + + # Check on extended data. + data = torch.arange(-10.0, 20.0).unsqueeze(-1) + with pytest.raises(ValueError): + d1.log_prob(data) + log_prob = d2.log_prob(data) + valid = d1.support.check(data) + assert ((log_prob > -math.inf) == valid).all() + check_grad(log_prob, concentration1, concentration0) + + # Check on shape error. + with pytest.raises(ValueError): + d2.log_prob(torch.tensor([0.0, 0.0])) + + # Check on value error. + with pytest.raises(ValueError): + d2.log_prob(torch.tensor(0.5)) + + # Check on negative total_count. + concentration1 = torch.tensor(1.5).requires_grad_() + concentration0 = torch.tensor(1.5).requires_grad_() + total_count = torch.arange(-10, 0.0) + d = dist.ExtendedBetaBinomial(concentration1, concentration0, total_count) + log_prob = d.log_prob(data) + assert (log_prob == -math.inf).all() + check_grad(log_prob, concentration1, concentration0) diff --git a/pyro/source/tests/distributions/test_gaussian_mixtures.py b/pyro/source/tests/distributions/test_gaussian_mixtures.py new file mode 100644 index 0000000000000000000000000000000000000000..7623d4e14bc04bf9bff3779b620609f5e95d09bb --- /dev/null +++ b/pyro/source/tests/distributions/test_gaussian_mixtures.py @@ -0,0 +1,236 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging +import math + +import pytest +import torch + +from pyro.distributions import ( + GaussianScaleMixture, + MixtureOfDiagNormals, + MixtureOfDiagNormalsSharedCovariance, +) +from tests.common import assert_equal + +logger = logging.getLogger(__name__) + + +@pytest.mark.parametrize( + "mix_dist", + [MixtureOfDiagNormals, MixtureOfDiagNormalsSharedCovariance, GaussianScaleMixture], +) +@pytest.mark.parametrize("K", [3]) +@pytest.mark.parametrize("D", [2, 4]) +@pytest.mark.parametrize("batch_mode", [True, False]) +@pytest.mark.parametrize("flat_logits", [True, False]) +@pytest.mark.parametrize("cost_function", ["quadratic"]) +def test_mean_gradient(K, D, flat_logits, cost_function, mix_dist, batch_mode): + n_samples = 200000 + if batch_mode: + sample_shape = torch.Size(()) + else: + sample_shape = torch.Size((n_samples,)) + if mix_dist == GaussianScaleMixture: + locs = torch.zeros(K, D, requires_grad=True) + else: + locs = torch.rand(K, D).requires_grad_(True) + if mix_dist == GaussianScaleMixture: + component_scale = 1.5 * torch.ones(K) + 0.5 * torch.rand(K) + component_scale.requires_grad_(True) + else: + component_scale = torch.ones(K, requires_grad=True) + if mix_dist == MixtureOfDiagNormals: + coord_scale = torch.ones(K, D) + 0.5 * torch.rand(K, D) + coord_scale.requires_grad_(True) + else: + coord_scale = torch.ones(D) + 0.5 * torch.rand(D) + coord_scale.requires_grad_(True) + if not flat_logits: + component_logits = (1.5 * torch.rand(K)).requires_grad_(True) + else: + component_logits = (0.1 * torch.rand(K)).requires_grad_(True) + omega = (0.2 * torch.ones(D) + 0.1 * torch.rand(D)).requires_grad_(False) + + _pis = torch.exp(component_logits) + pis = _pis / _pis.sum() + + if cost_function == "cosine": + analytic1 = torch.cos((omega * locs).sum(-1)) + analytic2 = torch.exp( + -0.5 + * torch.pow(omega * coord_scale * component_scale.unsqueeze(-1), 2.0).sum( + -1 + ) + ) + analytic = (pis * analytic1 * analytic2).sum() + analytic.backward() + elif cost_function == "quadratic": + analytic = torch.pow(coord_scale * component_scale.unsqueeze(-1), 2.0).sum( + -1 + ) + torch.pow(locs, 2.0).sum(-1) + analytic = (pis * analytic).sum() + analytic.backward() + + analytic_grads = {} + analytic_grads["locs"] = locs.grad.clone() + analytic_grads["coord_scale"] = coord_scale.grad.clone() + analytic_grads["component_logits"] = component_logits.grad.clone() + analytic_grads["component_scale"] = component_scale.grad.clone() + + assert locs.grad.shape == locs.shape + assert coord_scale.grad.shape == coord_scale.shape + assert component_logits.grad.shape == component_logits.shape + assert component_scale.grad.shape == component_scale.shape + + coord_scale.grad.zero_() + component_logits.grad.zero_() + locs.grad.zero_() + component_scale.grad.zero_() + + if mix_dist == MixtureOfDiagNormalsSharedCovariance: + params = { + "locs": locs, + "coord_scale": coord_scale, + "component_logits": component_logits, + } + if batch_mode: + locs = locs.unsqueeze(0).expand(n_samples, K, D) + coord_scale = coord_scale.unsqueeze(0).expand(n_samples, D) + component_logits = component_logits.unsqueeze(0).expand(n_samples, K) + dist_params = { + "locs": locs, + "coord_scale": coord_scale, + "component_logits": component_logits, + } + else: + dist_params = params + elif mix_dist == MixtureOfDiagNormals: + params = { + "locs": locs, + "coord_scale": coord_scale, + "component_logits": component_logits, + } + if batch_mode: + locs = locs.unsqueeze(0).expand(n_samples, K, D) + coord_scale = coord_scale.unsqueeze(0).expand(n_samples, K, D) + component_logits = component_logits.unsqueeze(0).expand(n_samples, K) + dist_params = { + "locs": locs, + "coord_scale": coord_scale, + "component_logits": component_logits, + } + else: + dist_params = params + elif mix_dist == GaussianScaleMixture: + params = { + "coord_scale": coord_scale, + "component_logits": component_logits, + "component_scale": component_scale, + } + if batch_mode: + return # distribution does not support batched parameters + else: + dist_params = params + + dist = mix_dist(**dist_params) + z = dist.rsample(sample_shape=sample_shape) + assert z.shape == (n_samples, D) + if cost_function == "cosine": + cost = torch.cos((omega * z).sum(-1)).sum() / float(n_samples) + elif cost_function == "quadratic": + cost = torch.pow(z, 2.0).sum() / float(n_samples) + cost.backward() + + assert_equal( + analytic, + cost, + prec=0.1, + msg="bad cost function evaluation for {} test (expected {}, got {})".format( + mix_dist.__name__, analytic.item(), cost.item() + ), + ) + logger.debug( + "analytic_grads_logit: {}".format( + analytic_grads["component_logits"].detach().cpu().numpy() + ) + ) + + for param_name, param in params.items(): + assert_equal( + param.grad, + analytic_grads[param_name], + prec=0.1, + msg="bad {} grad for {} (expected {}, got {})".format( + param_name, mix_dist.__name__, analytic_grads[param_name], param.grad + ), + ) + + +@pytest.mark.parametrize("batch_size", [1, 3]) +def test_mix_of_diag_normals_shared_cov_log_prob(batch_size): + locs = torch.tensor([[-1.0, -1.0], [1.0, 1.0]]) + sigmas = torch.tensor([2.0, 2.0]) + logits = torch.tensor([math.log(0.25), math.log(0.75)]) + value = torch.tensor([0.5, 0.5]) + if batch_size > 1: + locs = locs.unsqueeze(0).expand(batch_size, 2, 2) + sigmas = sigmas.unsqueeze(0).expand(batch_size, 2) + logits = logits.unsqueeze(0).expand(batch_size, 2) + value = value.unsqueeze(0).expand(batch_size, 2) + dist = MixtureOfDiagNormalsSharedCovariance(locs, sigmas, logits) + log_prob = dist.log_prob(value) + correct_log_prob = 0.25 * math.exp(-2.25 / 4.0) + correct_log_prob += 0.75 * math.exp(-0.25 / 4.0) + correct_log_prob /= 8.0 * math.pi + correct_log_prob = math.log(correct_log_prob) + if batch_size > 1: + correct_log_prob = [correct_log_prob] * batch_size + correct_log_prob = torch.tensor(correct_log_prob) + assert_equal( + log_prob, + correct_log_prob, + msg="bad log prob for MixtureOfDiagNormalsSharedCovariance", + ) + + +def test_gsm_log_prob(): + sigmas = torch.tensor([2.0, 2.0]) + component_scale = torch.tensor([1.5, 2.5]) + logits = torch.tensor([math.log(0.25), math.log(0.75)]) + dist = GaussianScaleMixture(sigmas, logits, component_scale) + value = torch.tensor([math.sqrt(0.33), math.sqrt(0.67)]) + log_prob = dist.log_prob(value).item() + correct_log_prob = 0.25 * math.exp(-0.50 / (4.0 * 2.25)) / 2.25 + correct_log_prob += 0.75 * math.exp(-0.50 / (4.0 * 6.25)) / 6.25 + correct_log_prob /= (2.0 * math.pi) * 4.0 + correct_log_prob = math.log(correct_log_prob) + assert_equal( + log_prob, correct_log_prob, msg="bad log prob for GaussianScaleMixture" + ) + + +@pytest.mark.parametrize("batch_size", [1, 3]) +def test_mix_of_diag_normals_log_prob(batch_size): + sigmas = torch.tensor([[2.0, 1.5], [1.5, 2.0]]) + locs = torch.tensor([[0.0, 1.0], [-1.0, 0.0]]) + logits = torch.tensor([math.log(0.25), math.log(0.75)]) + value = torch.tensor([0.5, 0.25]) + if batch_size > 1: + locs = locs.unsqueeze(0).expand(batch_size, 2, 2) + sigmas = sigmas.unsqueeze(0).expand(batch_size, 2, 2) + logits = logits.unsqueeze(0).expand(batch_size, 2) + value = value.unsqueeze(0).expand(batch_size, 2) + dist = MixtureOfDiagNormals(locs, sigmas, logits) + log_prob = dist.log_prob(value) + correct_log_prob = 0.25 * math.exp(-0.5 * (0.25 / 4.0 + 0.5625 / 2.25)) / 3.0 + correct_log_prob += 0.75 * math.exp(-0.5 * (2.25 / 2.25 + 0.0625 / 4.0)) / 3.0 + correct_log_prob /= 2.0 * math.pi + correct_log_prob = math.log(correct_log_prob) + if batch_size > 1: + correct_log_prob = [correct_log_prob] * batch_size + correct_log_prob = torch.tensor(correct_log_prob) + assert_equal( + log_prob, correct_log_prob, msg="bad log prob for MixtureOfDiagNormals" + ) diff --git a/pyro/source/tests/distributions/test_grouped_normal_normal.py b/pyro/source/tests/distributions/test_grouped_normal_normal.py new file mode 100644 index 0000000000000000000000000000000000000000..fc8ea44b510a1cd0e0066d11f89f3539f83d4052 --- /dev/null +++ b/pyro/source/tests/distributions/test_grouped_normal_normal.py @@ -0,0 +1,44 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import torch + +from pyro.distributions import GroupedNormalNormal, Normal +from tests.common import assert_close + + +def test_grouped_normal_normal(num_groups=3, num_samples=10**5): + prior_scale = torch.rand(num_groups) + prior_loc = torch.randn(num_groups) + group_idx = torch.cat( + [torch.arange(num_groups), torch.arange(num_groups), torch.zeros(2).long()] + ) + values = torch.randn(group_idx.shape) + obs_scale = torch.rand(group_idx.shape) + + # shape checks + gnn = GroupedNormalNormal(prior_loc, prior_scale, obs_scale, group_idx) + assert gnn.log_prob(values).shape == () + posterior = gnn.get_posterior(values) + loc, scale = posterior.loc, posterior.scale + assert loc.shape == scale.shape == (num_groups,) + + # test correctness of log_prob + prior_scale = 1 + torch.rand(1).double() + prior_loc = torch.randn(1).double() + group_idx = torch.zeros(2).long() + values = torch.randn(group_idx.shape) + obs_scale = 0.5 + torch.rand(group_idx.shape).double() + + gnn = GroupedNormalNormal(prior_loc, prior_scale, obs_scale, group_idx) + actual = gnn.log_prob(values).item() + + prior = Normal(0.0, prior_scale) + z = prior.sample(sample_shape=(num_samples // 2,)) + z = torch.cat([prior_loc + z, prior_loc - z]) + log_likelihood = Normal(z, obs_scale).log_prob(values).sum(-1) + expected = torch.logsumexp(log_likelihood, dim=-1).item() - math.log(num_samples) + + assert_close(actual, expected, atol=0.001) diff --git a/pyro/source/tests/distributions/test_haar.py b/pyro/source/tests/distributions/test_haar.py new file mode 100644 index 0000000000000000000000000000000000000000..8d6b9c06bb1cadad2d28031f2bff5d331e211089 --- /dev/null +++ b/pyro/source/tests/distributions/test_haar.py @@ -0,0 +1,16 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +from pyro.distributions.transforms import HaarTransform +from tests.common import assert_equal + + +@pytest.mark.parametrize("size", [1, 3, 4, 7, 8, 9]) +def test_haar_ortho(size): + haar = HaarTransform() + eye = torch.eye(size) + mat = haar(eye) + assert_equal(eye, mat @ mat.t()) diff --git a/pyro/source/tests/distributions/test_hmm.py b/pyro/source/tests/distributions/test_hmm.py new file mode 100644 index 0000000000000000000000000000000000000000..01ea3168556260c2bfca542ef1a3af8e67596000 --- /dev/null +++ b/pyro/source/tests/distributions/test_hmm.py @@ -0,0 +1,1026 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging +import operator +from functools import reduce + +import opt_einsum +import pytest +import torch + +import pyro +import pyro.distributions as dist +from pyro.distributions.hmm import ( + _sequential_gamma_gaussian_tensordot, + _sequential_logmatmulexp, +) +from pyro.distributions.util import broadcast_shape +from pyro.infer import TraceEnum_ELBO, config_enumerate +from pyro.ops.gamma_gaussian import ( + gamma_and_mvn_to_gamma_gaussian, + gamma_gaussian_tensordot, + matrix_and_mvn_to_gamma_gaussian, +) +from pyro.ops.gaussian import ( + gaussian_tensordot, + matrix_and_mvn_to_gaussian, + mvn_to_gaussian, +) +from pyro.ops.indexing import Vindex +from tests.common import assert_close +from tests.ops.gamma_gaussian import ( + assert_close_gamma_gaussian, + random_gamma, + random_gamma_gaussian, +) +from tests.ops.gaussian import random_mvn + +logger = logging.getLogger(__name__) + + +def check_expand(old_dist, old_data): + new_batch_shape = (2,) + old_dist.batch_shape + new_dist = old_dist.expand(new_batch_shape) + assert new_dist.batch_shape == new_batch_shape + + old_log_prob = new_dist.log_prob(old_data) + assert old_log_prob.shape == new_batch_shape + + new_data = old_data.expand(new_batch_shape + new_dist.event_shape) + new_log_prob = new_dist.log_prob(new_data) + assert_close(old_log_prob, new_log_prob) + assert new_dist.log_prob(new_data).shape == new_batch_shape + + +def check_sample_shape(d): + if d.duration is None: + return + for sample_shape in [(), (2,), (3,)]: + sample = d.sample(sample_shape) + expected_shape = torch.Size(sample_shape + d.shape()) + assert sample.shape == expected_shape + + +@pytest.mark.parametrize("num_steps", list(range(1, 20))) +@pytest.mark.parametrize("state_dim", [2, 3]) +@pytest.mark.parametrize("batch_shape", [(), (5,), (2, 4)], ids=str) +def test_sequential_logmatmulexp(batch_shape, state_dim, num_steps): + logits = torch.randn(batch_shape + (num_steps, state_dim, state_dim)) + actual = _sequential_logmatmulexp(logits) + assert actual.shape == batch_shape + (state_dim, state_dim) + + # Check against einsum. + operands = list(logits.unbind(-3)) + symbol = (opt_einsum.get_symbol(i) for i in range(1000)) + batch_symbols = "".join(next(symbol) for _ in batch_shape) + state_symbols = [next(symbol) for _ in range(num_steps + 1)] + equation = ( + ",".join( + batch_symbols + state_symbols[t] + state_symbols[t + 1] + for t in range(num_steps) + ) + + "->" + + batch_symbols + + state_symbols[0] + + state_symbols[-1] + ) + expected = opt_einsum.contract( + equation, *operands, backend="pyro.ops.einsum.torch_log" + ) + assert_close(actual, expected) + + +@pytest.mark.parametrize("num_steps", list(range(1, 20))) +@pytest.mark.parametrize("state_dim", [1, 2, 3]) +@pytest.mark.parametrize("batch_shape", [(), (5,), (2, 4)], ids=str) +def test_sequential_gamma_gaussian_tensordot(batch_shape, state_dim, num_steps): + g = random_gamma_gaussian(batch_shape + (num_steps,), state_dim + state_dim) + actual = _sequential_gamma_gaussian_tensordot(g) + assert actual.dim() == g.dim() + assert actual.batch_shape == batch_shape + + # Check against hand computation. + expected = g[..., 0] + for t in range(1, num_steps): + expected = gamma_gaussian_tensordot(expected, g[..., t], state_dim) + assert_close_gamma_gaussian(actual, expected) + + +@pytest.mark.parametrize("state_dim", [2, 3]) +@pytest.mark.parametrize("event_shape", [(), (5,), (2, 3)], ids=str) +@pytest.mark.parametrize( + "ok,init_shape,trans_shape,obs_shape", + [ + (True, (), (), (1,)), + (True, (), (1,), (1,)), + (True, (), (), (7,)), + (True, (), (7,), (7,)), + (True, (), (1,), (7,)), + (True, (), (7,), (11, 7)), + (True, (), (11, 7), (7,)), + (True, (), (11, 7), (11, 7)), + (True, (11,), (7,), (7,)), + (True, (11,), (7,), (11, 7)), + (True, (11,), (11, 7), (7,)), + (True, (11,), (11, 7), (11, 7)), + (True, (4, 1, 1), (3, 1, 7), (2, 7)), + (False, (), (1,), ()), + (False, (), (7,), ()), + (False, (), (7,), (1,)), + (False, (), (7,), (6,)), + (False, (3,), (4, 7), (7,)), + (False, (3,), (7,), (4, 7)), + (False, (), (3, 7), (4, 7)), + ], + ids=str, +) +def test_discrete_hmm_shape( + ok, init_shape, trans_shape, obs_shape, event_shape, state_dim +): + init_logits = torch.randn(init_shape + (state_dim,)) + trans_logits = torch.randn(trans_shape + (state_dim, state_dim)) + obs_logits = torch.randn(obs_shape + (state_dim,) + event_shape) + obs_dist = dist.Bernoulli(logits=obs_logits).to_event(len(event_shape)) + data = obs_dist.sample()[(slice(None),) * len(obs_shape) + (0,)] + + if not ok: + with pytest.raises(ValueError): + d = dist.DiscreteHMM(init_logits, trans_logits, obs_dist) + d.log_prob(data) + return + + d = dist.DiscreteHMM(init_logits, trans_logits, obs_dist) + assert d.support.event_dim == d.event_dim + + actual = d.log_prob(data) + expected_shape = broadcast_shape(init_shape, trans_shape[:-1], obs_shape[:-1]) + assert actual.shape == expected_shape + check_expand(d, data) + check_sample_shape(d) + + final = d.filter(data) + assert isinstance(final, dist.Categorical) + assert final.batch_shape == d.batch_shape + assert final.event_shape == () + assert final.support.upper_bound == state_dim - 1 + + +@pytest.mark.parametrize("event_shape", [(), (5,), (2, 3)], ids=str) +@pytest.mark.parametrize("state_dim", [2, 3]) +@pytest.mark.parametrize("num_steps", [1, 2, 3]) +@pytest.mark.parametrize( + "init_shape,trans_shape,obs_shape", + [ + ((), (), ()), + ((), (1,), ()), + ((), (), (1,)), + ((), (1,), (7, 1)), + ((), (7, 1), (1,)), + ((), (7, 1), (7, 1)), + ((7,), (1,), (1,)), + ((7,), (1,), (7, 1)), + ((7,), (7, 1), (1,)), + ((7,), (7, 1), (7, 1)), + ((4, 1, 1), (3, 1, 1), (2, 1)), + ], + ids=str, +) +def test_discrete_hmm_homogeneous_trick( + init_shape, trans_shape, obs_shape, event_shape, state_dim, num_steps +): + batch_shape = broadcast_shape(init_shape, trans_shape[:-1], obs_shape[:-1]) + init_logits = torch.randn(init_shape + (state_dim,)) + trans_logits = torch.randn(trans_shape + (state_dim, state_dim)) + obs_logits = torch.randn(obs_shape + (state_dim,) + event_shape) + obs_dist = dist.Bernoulli(logits=obs_logits).to_event(len(event_shape)) + + d = dist.DiscreteHMM(init_logits, trans_logits, obs_dist) + assert d.event_shape == (1,) + event_shape + assert d.support.event_dim == d.event_dim + + data = obs_dist.expand(batch_shape + (num_steps, state_dim)).sample() + data = data[(slice(None),) * (len(batch_shape) + 1) + (0,)] + assert data.shape == batch_shape + (num_steps,) + event_shape + actual = d.log_prob(data) + assert actual.shape == batch_shape + + +def empty_guide(*args, **kwargs): + pass + + +@pytest.mark.parametrize("num_steps", list(range(1, 10))) +def test_discrete_hmm_categorical(num_steps): + state_dim = 3 + obs_dim = 4 + init_logits = torch.randn(state_dim) + trans_logits = torch.randn(num_steps, state_dim, state_dim) + obs_dist = dist.Categorical(logits=torch.randn(num_steps, state_dim, obs_dim)) + d = dist.DiscreteHMM(init_logits, trans_logits, obs_dist) + data = dist.Categorical(logits=torch.zeros(num_steps, obs_dim)).sample() + actual = d.log_prob(data) + assert actual.shape == d.batch_shape + check_expand(d, data) + check_sample_shape(d) + + # Check loss against TraceEnum_ELBO. + @config_enumerate + def model(data): + x = pyro.sample("x_init", dist.Categorical(logits=init_logits)) + for t in range(num_steps): + x = pyro.sample( + "x_{}".format(t), + dist.Categorical(logits=Vindex(trans_logits)[..., t, x, :]), + ) + pyro.sample( + "obs_{}".format(t), + dist.Categorical(logits=Vindex(obs_dist.logits)[..., t, x, :]), + obs=data[..., t], + ) + + expected_loss = TraceEnum_ELBO().loss(model, empty_guide, data) + actual_loss = -float(actual.sum()) + assert_close(actual_loss, expected_loss) + + +@pytest.mark.parametrize("num_steps", list(range(1, 10))) +def test_discrete_hmm_diag_normal(num_steps): + state_dim = 3 + event_size = 2 + init_logits = torch.randn(state_dim) + trans_logits = torch.randn(num_steps, state_dim, state_dim) + loc = torch.randn(num_steps, state_dim, event_size) + scale = torch.randn(num_steps, state_dim, event_size).exp() + obs_dist = dist.Normal(loc, scale).to_event(1) + d = dist.DiscreteHMM(init_logits, trans_logits, obs_dist) + data = obs_dist.sample()[:, 0] + actual = d.log_prob(data) + assert actual.shape == d.batch_shape + check_expand(d, data) + check_sample_shape(d) + + # Check loss against TraceEnum_ELBO. + @config_enumerate + def model(data): + x = pyro.sample("x_init", dist.Categorical(logits=init_logits)) + for t in range(num_steps): + x = pyro.sample( + "x_{}".format(t), + dist.Categorical(logits=Vindex(trans_logits)[..., t, x, :]), + ) + pyro.sample( + "obs_{}".format(t), + dist.Normal( + Vindex(loc)[..., t, x, :], Vindex(scale)[..., t, x, :] + ).to_event(1), + obs=data[..., t, :], + ) + + expected_loss = TraceEnum_ELBO().loss(model, empty_guide, data) + actual_loss = -float(actual.sum()) + assert_close(actual_loss, expected_loss) + + +def test_discrete_hmm_distribution(): + init_probs = torch.tensor([0.9, 0.1]) + trans_probs = torch.tensor( + [ + [[0.9, 0.1], [0.1, 0.9]], # noisy identity + [[0.1, 0.9], [0.9, 0.1]], # noisy flip + ] + ) + obs_dist = dist.Normal(torch.tensor([0.0, 1.0]), 0.1) + hmm = dist.DiscreteHMM(init_probs.log(), trans_probs.log(), obs_dist) + actual = hmm.sample([1000000]).mean(0) + expected = torch.tensor([0.1 * 0.9 + 0.9 * 0.1, 0.9**3 + 3 * 0.9 * 0.1**2]) + assert_close(actual, expected, atol=1e-3) + + +@pytest.mark.parametrize("obs_dim", [1, 2]) +@pytest.mark.parametrize("hidden_dim", [1, 3]) +@pytest.mark.parametrize( + "init_shape,trans_mat_shape,trans_mvn_shape,obs_mat_shape,obs_mvn_shape", + [ + ((), (), (), (), ()), + ((), (6,), (), (), ()), + ((), (), (6,), (), ()), + ((), (), (), (6,), ()), + ((), (), (), (), (6,)), + ((), (6,), (6,), (6,), (6,)), + ((5,), (6,), (), (), ()), + ((), (5, 1), (6,), (), ()), + ((), (), (5, 1), (6,), ()), + ((), (), (), (5, 1), (6,)), + ((), (6,), (5, 1), (), ()), + ((), (), (6,), (5, 1), ()), + ((), (), (), (6,), (5, 1)), + ((5,), (), (), (), (6,)), + ((5,), (5, 6), (5, 6), (5, 6), (5, 6)), + ], + ids=str, +) +@pytest.mark.parametrize("diag", [False, True], ids=["full", "diag"]) +def test_gaussian_hmm_shape( + diag, + init_shape, + trans_mat_shape, + trans_mvn_shape, + obs_mat_shape, + obs_mvn_shape, + hidden_dim, + obs_dim, +): + init_dist = random_mvn(init_shape, hidden_dim) + trans_mat = torch.randn(trans_mat_shape + (hidden_dim, hidden_dim)) + trans_dist = random_mvn(trans_mvn_shape, hidden_dim) + obs_mat = torch.randn(obs_mat_shape + (hidden_dim, obs_dim)) + obs_dist = random_mvn(obs_mvn_shape, obs_dim) + if diag: + scale = obs_dist.scale_tril.diagonal(dim1=-2, dim2=-1) + obs_dist = dist.Normal(obs_dist.loc, scale).to_event(1) + d = dist.GaussianHMM( + init_dist, trans_mat, trans_dist, obs_mat, obs_dist, duration=6 + ) + + shape = broadcast_shape( + init_shape + (6,), + trans_mat_shape, + trans_mvn_shape, + obs_mat_shape, + obs_mvn_shape, + ) + expected_batch_shape, time_shape = shape[:-1], shape[-1:] + expected_event_shape = time_shape + (obs_dim,) + assert d.batch_shape == expected_batch_shape + assert d.event_shape == expected_event_shape + assert d.support.event_dim == d.event_dim + + data = obs_dist.expand(shape).sample() + assert data.shape == d.shape() + actual = d.log_prob(data) + assert actual.shape == expected_batch_shape + check_expand(d, data) + check_sample_shape(d) + + x = d.rsample() + assert x.shape == d.shape() + x = d.rsample((6,)) + assert x.shape == (6,) + d.shape() + x = d.expand((6, 5)).rsample() + assert x.shape == (6, 5) + d.event_shape + + likelihood = dist.Normal(data, 1).to_event(2) + p, log_normalizer = d.conjugate_update(likelihood) + assert p.batch_shape == d.batch_shape + assert p.event_shape == d.event_shape + x = p.rsample() + assert x.shape == d.shape() + x = p.rsample((6,)) + assert x.shape == (6,) + d.shape() + x = p.expand((6, 5)).rsample() + assert x.shape == (6, 5) + d.event_shape + + final = d.filter(data) + assert isinstance(final, dist.MultivariateNormal) + assert final.batch_shape == d.batch_shape + assert final.event_shape == (hidden_dim,) + + z = d.rsample_posterior(data) + assert z.shape == expected_batch_shape + time_shape + (hidden_dim,) + + for t in range(1, d.duration - 1): + f = d.duration - t + d2 = d.prefix_condition(data[..., :t, :]) + assert d2.batch_shape == d.batch_shape + assert d2.event_shape == (f, obs_dim) + + +def test_gaussian_hmm_high_obs_dim(): + hidden_dim = 1 + obs_dim = 1000 + duration = 10 + sample_shape = (100,) + init_dist = random_mvn((), hidden_dim) + trans_mat = torch.randn((duration,) + (hidden_dim, hidden_dim)) + trans_dist = random_mvn((duration,), hidden_dim) + obs_mat = torch.randn((duration,) + (hidden_dim, obs_dim)) + loc = torch.randn((duration, obs_dim)) + scale = torch.randn((duration, obs_dim)).exp() + obs_dist = dist.Normal(loc, scale).to_event(1) + d = dist.GaussianHMM( + init_dist, trans_mat, trans_dist, obs_mat, obs_dist, duration=duration + ) + x = d.rsample(sample_shape) + assert x.shape == sample_shape + (duration, obs_dim) + + +@pytest.mark.parametrize("sample_shape", [(), (5,)], ids=str) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("obs_dim", [1, 2]) +@pytest.mark.parametrize("hidden_dim", [1, 2]) +@pytest.mark.parametrize("num_steps", [1, 2, 3, 4]) +@pytest.mark.parametrize("diag", [False, True], ids=["full", "diag"]) +def test_gaussian_hmm_distribution( + diag, sample_shape, batch_shape, num_steps, hidden_dim, obs_dim +): + init_dist = random_mvn(batch_shape, hidden_dim) + trans_mat = torch.randn(batch_shape + (num_steps, hidden_dim, hidden_dim)) + trans_dist = random_mvn(batch_shape + (num_steps,), hidden_dim) + obs_mat = torch.randn(batch_shape + (num_steps, hidden_dim, obs_dim)) + obs_dist = random_mvn(batch_shape + (num_steps,), obs_dim) + if diag: + scale = obs_dist.scale_tril.diagonal(dim1=-2, dim2=-1) + obs_dist = dist.Normal(obs_dist.loc, scale).to_event(1) + d = dist.GaussianHMM( + init_dist, trans_mat, trans_dist, obs_mat, obs_dist, duration=num_steps + ) + if diag: + obs_mvn = dist.MultivariateNormal( + obs_dist.base_dist.loc, scale_tril=obs_dist.base_dist.scale.diag_embed() + ) + else: + obs_mvn = obs_dist + data = obs_dist.sample(sample_shape) + assert data.shape == sample_shape + d.shape() + actual_log_prob = d.log_prob(data) + + # Compare against hand-computed density. + # We will construct enormous unrolled joint gaussians with shapes: + # t | 0 1 2 3 1 2 3 T = 3 in this example + # ------+----------------------------------------- + # init | H + # trans | H H H H H = hidden + # obs | H H H O O O O = observed + # like | O O O + # and then combine these using gaussian_tensordot(). + T = num_steps + init = mvn_to_gaussian(init_dist) + trans = matrix_and_mvn_to_gaussian(trans_mat, trans_dist) + obs = matrix_and_mvn_to_gaussian(obs_mat, obs_mvn) + like_dist = dist.Normal(torch.randn(data.shape), 1).to_event(2) + like = mvn_to_gaussian(like_dist) + + unrolled_trans = reduce( + operator.add, + [ + trans[..., t].event_pad(left=t * hidden_dim, right=(T - t - 1) * hidden_dim) + for t in range(T) + ], + ) + unrolled_obs = reduce( + operator.add, + [ + obs[..., t].event_pad(left=t * obs.dim(), right=(T - t - 1) * obs.dim()) + for t in range(T) + ], + ) + unrolled_like = reduce( + operator.add, + [ + like[..., t].event_pad(left=t * obs_dim, right=(T - t - 1) * obs_dim) + for t in range(T) + ], + ) + # Permute obs from HOHOHO to HHHOOO. + perm = torch.cat( + [torch.arange(hidden_dim) + t * obs.dim() for t in range(T)] + + [torch.arange(obs_dim) + hidden_dim + t * obs.dim() for t in range(T)] + ) + unrolled_obs = unrolled_obs.event_permute(perm) + unrolled_data = data.reshape(data.shape[:-2] + (T * obs_dim,)) + + assert init.dim() == hidden_dim + assert unrolled_trans.dim() == (1 + T) * hidden_dim + assert unrolled_obs.dim() == T * (hidden_dim + obs_dim) + logp = gaussian_tensordot(init, unrolled_trans, hidden_dim) + logp = gaussian_tensordot(logp, unrolled_obs, T * hidden_dim) + expected_log_prob = logp.log_density(unrolled_data) + assert_close(actual_log_prob, expected_log_prob) + + d_posterior, log_normalizer = d.conjugate_update(like_dist) + assert_close( + d.log_prob(data) + like_dist.log_prob(data), + d_posterior.log_prob(data) + log_normalizer, + ) + + if batch_shape or sample_shape: + return + + # Test mean and covariance. + prior = "prior", d, logp + posterior = "posterior", d_posterior, logp + unrolled_like + for name, d, g in [prior, posterior]: + logging.info("testing {} moments".format(name)) + with torch.no_grad(): + num_samples = 100000 + samples = d.sample([num_samples]).reshape(num_samples, T * obs_dim) + actual_mean = samples.mean(0) + delta = samples - actual_mean + actual_cov = (delta.unsqueeze(-1) * delta.unsqueeze(-2)).mean(0) + actual_std = actual_cov.diagonal(dim1=-2, dim2=-1).sqrt() + actual_corr = actual_cov / ( + actual_std.unsqueeze(-1) * actual_std.unsqueeze(-2) + ) + + expected_cov = torch.linalg.cholesky(g.precision).cholesky_inverse() + expected_mean = expected_cov.matmul(g.info_vec.unsqueeze(-1)).squeeze(-1) + expected_std = expected_cov.diagonal(dim1=-2, dim2=-1).sqrt() + expected_corr = expected_cov / ( + expected_std.unsqueeze(-1) * expected_std.unsqueeze(-2) + ) + + assert_close(actual_mean, expected_mean, atol=0.05, rtol=0.02) + assert_close(actual_std, expected_std, atol=0.05, rtol=0.02) + assert_close(actual_corr, expected_corr, atol=0.02) + + +@pytest.mark.parametrize("obs_dim", [1, 2, 3]) +@pytest.mark.parametrize("hidden_dim", [1, 2, 3]) +@pytest.mark.parametrize( + "init_shape,trans_shape,obs_shape", + [ + ((), (7,), ()), + ((), (), (7,)), + ((), (7,), (1,)), + ((), (1,), (7,)), + ((), (7,), (11, 7)), + ((), (11, 7), (7,)), + ((), (11, 7), (11, 7)), + ((11,), (7,), (7,)), + ((11,), (7,), (11, 7)), + ((11,), (11, 7), (7,)), + ((11,), (11, 7), (11, 7)), + ((4, 1, 1), (3, 1, 7), (2, 7)), + ], + ids=str, +) +def test_gaussian_mrf_shape(init_shape, trans_shape, obs_shape, hidden_dim, obs_dim): + init_dist = random_mvn(init_shape, hidden_dim) + trans_dist = random_mvn(trans_shape, hidden_dim + hidden_dim) + obs_dist = random_mvn(obs_shape, hidden_dim + obs_dim) + d = dist.GaussianMRF(init_dist, trans_dist, obs_dist) + + shape = broadcast_shape(init_shape + (1,), trans_shape, obs_shape) + expected_batch_shape, time_shape = shape[:-1], shape[-1:] + expected_event_shape = time_shape + (obs_dim,) + assert d.batch_shape == expected_batch_shape + assert d.event_shape == expected_event_shape + assert d.support.event_dim == d.event_dim + + data = obs_dist.expand(shape).sample()[..., hidden_dim:] + assert data.shape == d.shape() + actual = d.log_prob(data) + assert actual.shape == expected_batch_shape + check_expand(d, data) + + +@pytest.mark.parametrize("sample_shape", [(), (5,)], ids=str) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("obs_dim", [1, 2]) +@pytest.mark.parametrize("hidden_dim", [1, 2]) +@pytest.mark.parametrize("num_steps", [1, 2, 3, 4]) +def test_gaussian_mrf_log_prob( + sample_shape, batch_shape, num_steps, hidden_dim, obs_dim +): + init_dist = random_mvn(batch_shape, hidden_dim) + trans_dist = random_mvn(batch_shape + (num_steps,), hidden_dim + hidden_dim) + obs_dist = random_mvn(batch_shape + (num_steps,), hidden_dim + obs_dim) + d = dist.GaussianMRF(init_dist, trans_dist, obs_dist) + data = obs_dist.sample(sample_shape)[..., hidden_dim:] + assert data.shape == sample_shape + d.shape() + actual_log_prob = d.log_prob(data) + + # Compare against hand-computed density. + # We will construct enormous unrolled joint gaussians with shapes: + # t | 0 1 2 3 1 2 3 T = 3 in this example + # ------+----------------------------------------- + # init | H + # trans | H H H H H = hidden + # obs | H H H O O O O = observed + # and then combine these using gaussian_tensordot(). + T = num_steps + init = mvn_to_gaussian(init_dist) + trans = mvn_to_gaussian(trans_dist) + obs = mvn_to_gaussian(obs_dist) + + unrolled_trans = reduce( + operator.add, + [ + trans[..., t].event_pad(left=t * hidden_dim, right=(T - t - 1) * hidden_dim) + for t in range(T) + ], + ) + unrolled_obs = reduce( + operator.add, + [ + obs[..., t].event_pad(left=t * obs.dim(), right=(T - t - 1) * obs.dim()) + for t in range(T) + ], + ) + # Permute obs from HOHOHO to HHHOOO. + perm = torch.cat( + [torch.arange(hidden_dim) + t * obs.dim() for t in range(T)] + + [torch.arange(obs_dim) + hidden_dim + t * obs.dim() for t in range(T)] + ) + unrolled_obs = unrolled_obs.event_permute(perm) + unrolled_data = data.reshape(data.shape[:-2] + (T * obs_dim,)) + + assert init.dim() == hidden_dim + assert unrolled_trans.dim() == (1 + T) * hidden_dim + assert unrolled_obs.dim() == T * (hidden_dim + obs_dim) + logp_h = gaussian_tensordot(init, unrolled_trans, hidden_dim) + logp_oh = gaussian_tensordot(logp_h, unrolled_obs, T * hidden_dim) + logp_h += unrolled_obs.marginalize(right=T * obs_dim) + expected_log_prob = logp_oh.log_density(unrolled_data) - logp_h.event_logsumexp() + assert_close(actual_log_prob, expected_log_prob) + + +@pytest.mark.parametrize("sample_shape", [(), (5,)], ids=str) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("obs_dim", [1, 2]) +@pytest.mark.parametrize("hidden_dim", [1, 2]) +@pytest.mark.parametrize("num_steps", [1, 2, 3, 4]) +def test_gaussian_mrf_log_prob_block_diag( + sample_shape, batch_shape, num_steps, hidden_dim, obs_dim +): + # Construct a block-diagonal obs dist, so observations are independent of hidden state. + obs_dist = random_mvn(batch_shape + (num_steps,), hidden_dim + obs_dim) + precision = obs_dist.precision_matrix + precision[..., :hidden_dim, hidden_dim:] = 0 + precision[..., hidden_dim:, :hidden_dim] = 0 + obs_dist = dist.MultivariateNormal(obs_dist.loc, precision_matrix=precision) + marginal_obs_dist = dist.MultivariateNormal( + obs_dist.loc[..., hidden_dim:], + precision_matrix=precision[..., hidden_dim:, hidden_dim:], + ) + + init_dist = random_mvn(batch_shape, hidden_dim) + trans_dist = random_mvn(batch_shape + (num_steps,), hidden_dim + hidden_dim) + d = dist.GaussianMRF(init_dist, trans_dist, obs_dist) + data = obs_dist.sample(sample_shape)[..., hidden_dim:] + assert data.shape == sample_shape + d.shape() + actual_log_prob = d.log_prob(data) + expected_log_prob = marginal_obs_dist.log_prob(data).sum(-1) + assert_close(actual_log_prob, expected_log_prob) + + +@pytest.mark.parametrize("obs_dim", [1, 2]) +@pytest.mark.parametrize("hidden_dim", [1, 3]) +@pytest.mark.parametrize( + "scale_shape,init_shape,trans_mat_shape,trans_mvn_shape,obs_mat_shape,obs_mvn_shape", + [ + ((5,), (), (6,), (), (), ()), + ((), (), (6,), (), (), ()), + ((), (), (), (6,), (), ()), + ((), (), (), (), (6,), ()), + ((), (), (), (), (), (6,)), + ((), (), (6,), (6,), (6,), (6,)), + ((), (5,), (6,), (), (), ()), + ((), (), (5, 1), (6,), (), ()), + ((), (), (), (5, 1), (6,), ()), + ((), (), (), (), (5, 1), (6,)), + ((), (), (6,), (5, 1), (), ()), + ((), (), (), (6,), (5, 1), ()), + ((), (), (), (), (6,), (5, 1)), + ((), (5,), (), (), (), (6,)), + ((5,), (5,), (5, 6), (5, 6), (5, 6), (5, 6)), + ], + ids=str, +) +def test_gamma_gaussian_hmm_shape( + scale_shape, + init_shape, + trans_mat_shape, + trans_mvn_shape, + obs_mat_shape, + obs_mvn_shape, + hidden_dim, + obs_dim, +): + init_dist = random_mvn(init_shape, hidden_dim) + trans_mat = torch.randn(trans_mat_shape + (hidden_dim, hidden_dim)) + trans_dist = random_mvn(trans_mvn_shape, hidden_dim) + obs_mat = torch.randn(obs_mat_shape + (hidden_dim, obs_dim)) + obs_dist = random_mvn(obs_mvn_shape, obs_dim) + scale_dist = random_gamma(scale_shape) + d = dist.GammaGaussianHMM( + scale_dist, init_dist, trans_mat, trans_dist, obs_mat, obs_dist + ) + + shape = broadcast_shape( + scale_shape + (1,), + init_shape + (1,), + trans_mat_shape, + trans_mvn_shape, + obs_mat_shape, + obs_mvn_shape, + ) + expected_batch_shape, time_shape = shape[:-1], shape[-1:] + expected_event_shape = time_shape + (obs_dim,) + assert d.batch_shape == expected_batch_shape + assert d.event_shape == expected_event_shape + assert d.support.event_dim == d.event_dim + + data = obs_dist.expand(shape).sample() + assert data.shape == d.shape() + actual = d.log_prob(data) + assert actual.shape == expected_batch_shape + check_expand(d, data) + + mixing, final = d.filter(data) + assert isinstance(mixing, dist.Gamma) + assert mixing.batch_shape == d.batch_shape + assert mixing.event_shape == () + assert isinstance(final, dist.MultivariateNormal) + assert final.batch_shape == d.batch_shape + assert final.event_shape == (hidden_dim,) + + +@pytest.mark.parametrize("sample_shape", [(), (5,)], ids=str) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("obs_dim", [1, 2]) +@pytest.mark.parametrize("hidden_dim", [1, 2]) +@pytest.mark.parametrize("num_steps", [1, 2, 3, 4]) +def test_gamma_gaussian_hmm_log_prob( + sample_shape, batch_shape, num_steps, hidden_dim, obs_dim +): + init_dist = random_mvn(batch_shape, hidden_dim) + trans_mat = torch.randn(batch_shape + (num_steps, hidden_dim, hidden_dim)) + trans_dist = random_mvn(batch_shape + (num_steps,), hidden_dim) + obs_mat = torch.randn(batch_shape + (num_steps, hidden_dim, obs_dim)) + obs_dist = random_mvn(batch_shape + (num_steps,), obs_dim) + scale_dist = random_gamma(batch_shape) + d = dist.GammaGaussianHMM( + scale_dist, init_dist, trans_mat, trans_dist, obs_mat, obs_dist + ) + obs_mvn = obs_dist + data = obs_dist.sample(sample_shape) + assert data.shape == sample_shape + d.shape() + actual_log_prob = d.log_prob(data) + + # Compare against hand-computed density. + # We will construct enormous unrolled joint gaussian-gammas with shapes: + # t | 0 1 2 3 1 2 3 T = 3 in this example + # ------+----------------------------------------- + # init | H + # trans | H H H H H = hidden + # obs | H H H O O O O = observed + # and then combine these using gamma_gaussian_tensordot(). + T = num_steps + init = gamma_and_mvn_to_gamma_gaussian(scale_dist, init_dist) + trans = matrix_and_mvn_to_gamma_gaussian(trans_mat, trans_dist) + obs = matrix_and_mvn_to_gamma_gaussian(obs_mat, obs_mvn) + + unrolled_trans = reduce( + operator.add, + [ + trans[..., t].event_pad(left=t * hidden_dim, right=(T - t - 1) * hidden_dim) + for t in range(T) + ], + ) + unrolled_obs = reduce( + operator.add, + [ + obs[..., t].event_pad(left=t * obs.dim(), right=(T - t - 1) * obs.dim()) + for t in range(T) + ], + ) + # Permute obs from HOHOHO to HHHOOO. + perm = torch.cat( + [torch.arange(hidden_dim) + t * obs.dim() for t in range(T)] + + [torch.arange(obs_dim) + hidden_dim + t * obs.dim() for t in range(T)] + ) + unrolled_obs = unrolled_obs.event_permute(perm) + unrolled_data = data.reshape(data.shape[:-2] + (T * obs_dim,)) + + assert init.dim() == hidden_dim + assert unrolled_trans.dim() == (1 + T) * hidden_dim + assert unrolled_obs.dim() == T * (hidden_dim + obs_dim) + logp = gamma_gaussian_tensordot(init, unrolled_trans, hidden_dim) + logp = gamma_gaussian_tensordot(logp, unrolled_obs, T * hidden_dim) + # compute log_prob of the joint student-t distribution + expected_log_prob = logp.compound().log_prob(unrolled_data) + assert_close(actual_log_prob, expected_log_prob) + + +def random_stable(stability, skew_scale_loc_shape): + skew = dist.Uniform(-1, 1).sample(skew_scale_loc_shape) + scale = torch.rand(skew_scale_loc_shape).exp() + loc = torch.randn(skew_scale_loc_shape) + return dist.Stable(stability, skew, scale, loc) + + +@pytest.mark.parametrize("obs_dim", [1, 2]) +@pytest.mark.parametrize("hidden_dim", [1, 3]) +@pytest.mark.parametrize( + "init_shape,trans_mat_shape,trans_dist_shape,obs_mat_shape,obs_dist_shape", + [ + ((), (), (), (), ()), + ((), (4,), (), (), ()), + ((), (), (4,), (), ()), + ((), (), (), (4,), ()), + ((), (), (), (), (4,)), + ((), (4,), (4,), (4,), (4,)), + ((5,), (4,), (), (), ()), + ((), (5, 1), (4,), (), ()), + ((), (), (5, 1), (4,), ()), + ((), (), (), (5, 1), (4,)), + ((), (4,), (5, 1), (), ()), + ((), (), (4,), (5, 1), ()), + ((), (), (), (4,), (5, 1)), + ((5,), (), (), (), (4,)), + ((5,), (5, 4), (5, 4), (5, 4), (5, 4)), + ], + ids=str, +) +def test_stable_hmm_shape( + init_shape, + trans_mat_shape, + trans_dist_shape, + obs_mat_shape, + obs_dist_shape, + hidden_dim, + obs_dim, +): + stability = dist.Uniform(0, 2).sample() + init_dist = random_stable(stability, init_shape + (hidden_dim,)).to_event(1) + trans_mat = torch.randn(trans_mat_shape + (hidden_dim, hidden_dim)) + trans_dist = random_stable(stability, trans_dist_shape + (hidden_dim,)).to_event(1) + obs_mat = torch.randn(obs_mat_shape + (hidden_dim, obs_dim)) + obs_dist = random_stable(stability, obs_dist_shape + (obs_dim,)).to_event(1) + d = dist.LinearHMM(init_dist, trans_mat, trans_dist, obs_mat, obs_dist, duration=4) + + shape = broadcast_shape( + init_shape + (4,), + trans_mat_shape, + trans_dist_shape, + obs_mat_shape, + obs_dist_shape, + ) + expected_batch_shape, time_shape = shape[:-1], shape[-1:] + expected_event_shape = time_shape + (obs_dim,) + assert d.batch_shape == expected_batch_shape + assert d.event_shape == expected_event_shape + assert d.support.event_dim == d.event_dim + + x = d.rsample() + assert x.shape == d.shape() + x = d.rsample((6,)) + assert x.shape == (6,) + d.shape() + x = d.expand((6, 5)).rsample() + assert x.shape == (6, 5) + d.event_shape + + +def random_studentt(shape): + df = torch.rand(shape).exp() + loc = torch.randn(shape) + scale = torch.rand(shape).exp() + return dist.StudentT(df, loc, scale) + + +@pytest.mark.parametrize("obs_dim", [1, 2]) +@pytest.mark.parametrize("hidden_dim", [1, 3]) +@pytest.mark.parametrize( + "init_shape,trans_mat_shape,trans_dist_shape,obs_mat_shape,obs_dist_shape", + [ + ((), (4,), (), (), ()), + ((), (), (4,), (), ()), + ((), (), (), (4,), ()), + ((), (), (), (), (4,)), + ((), (4,), (4,), (4,), (4,)), + ((5,), (4,), (), (), ()), + ((), (5, 1), (4,), (), ()), + ((), (), (5, 1), (4,), ()), + ((), (), (), (5, 1), (4,)), + ((), (4,), (5, 1), (), ()), + ((), (), (4,), (5, 1), ()), + ((), (), (), (4,), (5, 1)), + ((5,), (), (), (), (4,)), + ((5,), (5, 4), (5, 4), (5, 4), (5, 4)), + ], + ids=str, +) +def test_studentt_hmm_shape( + init_shape, + trans_mat_shape, + trans_dist_shape, + obs_mat_shape, + obs_dist_shape, + hidden_dim, + obs_dim, +): + init_dist = random_studentt(init_shape + (hidden_dim,)).to_event(1) + trans_mat = torch.randn(trans_mat_shape + (hidden_dim, hidden_dim)) + trans_dist = random_studentt(trans_dist_shape + (hidden_dim,)).to_event(1) + obs_mat = torch.randn(obs_mat_shape + (hidden_dim, obs_dim)) + obs_dist = random_studentt(obs_dist_shape + (obs_dim,)).to_event(1) + d = dist.LinearHMM(init_dist, trans_mat, trans_dist, obs_mat, obs_dist) + + shape = broadcast_shape( + init_shape + (1,), + trans_mat_shape, + trans_dist_shape, + obs_mat_shape, + obs_dist_shape, + ) + expected_batch_shape, time_shape = shape[:-1], shape[-1:] + expected_event_shape = time_shape + (obs_dim,) + assert d.batch_shape == expected_batch_shape + assert d.event_shape == expected_event_shape + assert d.support.event_dim == d.event_dim + + x = d.rsample() + assert x.shape == d.shape() + x = d.rsample((6,)) + assert x.shape == (6,) + d.shape() + x = d.expand((6, 5)).rsample() + assert x.shape == (6, 5) + d.event_shape + + +@pytest.mark.parametrize("obs_dim", [1, 3]) +@pytest.mark.parametrize("hidden_dim", [1, 2]) +@pytest.mark.parametrize( + "init_shape,trans_mat_shape,trans_mvn_shape,obs_mat_shape,obs_mvn_shape", + [ + ((), (), (), (), ()), + ((), (6,), (), (), ()), + ((), (), (6,), (), ()), + ((), (), (), (6,), ()), + ((), (), (), (), (6,)), + ((), (6,), (6,), (6,), (6,)), + ((5,), (6,), (), (), ()), + ((), (5, 1), (6,), (), ()), + ((), (), (5, 1), (6,), ()), + ((), (), (), (5, 1), (6,)), + ((), (6,), (5, 1), (), ()), + ((), (), (6,), (5, 1), ()), + ((), (), (), (6,), (5, 1)), + ((5,), (), (), (), (6,)), + ((5,), (5, 6), (5, 6), (5, 6), (5, 6)), + ], + ids=str, +) +def test_independent_hmm_shape( + init_shape, + trans_mat_shape, + trans_mvn_shape, + obs_mat_shape, + obs_mvn_shape, + hidden_dim, + obs_dim, +): + base_init_shape = init_shape + (obs_dim,) + base_trans_mat_shape = trans_mat_shape[:-1] + ( + obs_dim, + trans_mat_shape[-1] if trans_mat_shape else 6, + ) + base_trans_mvn_shape = trans_mvn_shape[:-1] + ( + obs_dim, + trans_mvn_shape[-1] if trans_mvn_shape else 6, + ) + base_obs_mat_shape = obs_mat_shape[:-1] + ( + obs_dim, + obs_mat_shape[-1] if obs_mat_shape else 6, + ) + base_obs_mvn_shape = obs_mvn_shape[:-1] + ( + obs_dim, + obs_mvn_shape[-1] if obs_mvn_shape else 6, + ) + + init_dist = random_mvn(base_init_shape, hidden_dim) + trans_mat = torch.randn(base_trans_mat_shape + (hidden_dim, hidden_dim)) + trans_dist = random_mvn(base_trans_mvn_shape, hidden_dim) + obs_mat = torch.randn(base_obs_mat_shape + (hidden_dim, 1)) + obs_dist = random_mvn(base_obs_mvn_shape, 1) + d = dist.GaussianHMM( + init_dist, trans_mat, trans_dist, obs_mat, obs_dist, duration=6 + ) + d = dist.IndependentHMM(d) + + shape = broadcast_shape( + init_shape + (6,), + trans_mat_shape, + trans_mvn_shape, + obs_mat_shape, + obs_mvn_shape, + ) + expected_batch_shape, time_shape = shape[:-1], shape[-1:] + expected_event_shape = time_shape + (obs_dim,) + assert d.batch_shape == expected_batch_shape + assert d.event_shape == expected_event_shape + assert d.support.event_dim == d.event_dim + + data = torch.randn(shape + (obs_dim,)) + assert data.shape == d.shape() + actual = d.log_prob(data) + assert actual.shape == expected_batch_shape + check_expand(d, data) + check_sample_shape(d) + + x = d.rsample() + assert x.shape == d.shape() + x = d.rsample((6,)) + assert x.shape == (6,) + d.shape() + x = d.expand((6, 5)).rsample() + assert x.shape == (6, 5) + d.event_shape diff --git a/pyro/source/tests/distributions/test_ig.py b/pyro/source/tests/distributions/test_ig.py new file mode 100644 index 0000000000000000000000000000000000000000..c1b2d8de95bf9138519560eef19c3a50a0da416e --- /dev/null +++ b/pyro/source/tests/distributions/test_ig.py @@ -0,0 +1,33 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import pytest +import torch + +from pyro.distributions import Gamma, InverseGamma +from tests.common import assert_equal + + +@pytest.mark.parametrize("concentration", [3.3, 4.0]) +@pytest.mark.parametrize("rate", [2.5, 3.0]) +def test_sample(concentration, rate, n_samples=int(1e6)): + samples = InverseGamma(concentration, rate).sample((n_samples,)) + mean, std = samples.mean().item(), samples.std().item() + expected_mean = rate / (concentration - 1.0) + expected_std = rate / ((concentration - 1.0) * math.sqrt(concentration - 2.0)) + assert_equal(mean, expected_mean, prec=1e-2) + assert_equal(std, expected_std, prec=0.03) + + +@pytest.mark.parametrize("concentration", [2.5, 4.0]) +@pytest.mark.parametrize("rate", [2.5, 3.0]) +@pytest.mark.parametrize("value", [0.5, 1.7]) +def test_log_prob(concentration, rate, value): + value = torch.tensor(value) + log_prob = InverseGamma(concentration, rate).log_prob(value) + expected_log_prob = ( + Gamma(concentration, rate).log_prob(1.0 / value) - 2.0 * value.log() + ) + assert_equal(log_prob, expected_log_prob, prec=1e-6) diff --git a/pyro/source/tests/distributions/test_improper_uniform.py b/pyro/source/tests/distributions/test_improper_uniform.py new file mode 100644 index 0000000000000000000000000000000000000000..64eba1bf974834f1eb8233574530e37d62d4ab67 --- /dev/null +++ b/pyro/source/tests/distributions/test_improper_uniform.py @@ -0,0 +1,32 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch +from torch.distributions import constraints, transform_to + +import pyro.distributions as dist +from tests.common import assert_equal + + +@pytest.mark.parametrize( + "constraint", + [ + constraints.real, + constraints.positive, + constraints.unit_interval, + ], + ids=str, +) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("event_shape", [(), (4,), (3, 2)], ids=str) +def test_improper_uniform(constraint, batch_shape, event_shape): + d = dist.ImproperUniform(constraint, batch_shape, event_shape) + + value = transform_to(constraint)(torch.randn(batch_shape + event_shape)) + assert_equal(d.log_prob(value), torch.zeros(batch_shape)) + + with pytest.raises(NotImplementedError): + d.sample() + with pytest.raises(NotImplementedError): + d.sample(sample_shape=(5, 6)) diff --git a/pyro/source/tests/distributions/test_independent.py b/pyro/source/tests/distributions/test_independent.py new file mode 100644 index 0000000000000000000000000000000000000000..af863a1e64c2a33f44cf368d0da4f3d94d85f812 --- /dev/null +++ b/pyro/source/tests/distributions/test_independent.py @@ -0,0 +1,151 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch +from torch.distributions.utils import _sum_rightmost + +import pyro.distributions as dist +from pyro.util import torch_isnan +from tests.common import assert_equal + + +@pytest.mark.parametrize("sample_shape", [(), (6,), (4, 2)]) +@pytest.mark.parametrize("batch_shape", [(), (7,), (5, 3), (5, 3, 2)]) +@pytest.mark.parametrize("reinterpreted_batch_ndims", [0, 1, 2, 3]) +@pytest.mark.parametrize( + "base_dist", + [ + dist.Normal(1.0, 2.0), + dist.Exponential(2.0), + dist.MultivariateNormal(torch.zeros(2), torch.eye(2)), + ], + ids=["normal", "exponential", "mvn"], +) +def test_independent(base_dist, sample_shape, batch_shape, reinterpreted_batch_ndims): + if batch_shape: + base_dist = base_dist.expand_by(batch_shape) + if reinterpreted_batch_ndims > len(base_dist.batch_shape): + with pytest.raises(ValueError): + d = dist.Independent(base_dist, reinterpreted_batch_ndims) + else: + d = dist.Independent(base_dist, reinterpreted_batch_ndims) + assert ( + d.batch_shape == batch_shape[: len(batch_shape) - reinterpreted_batch_ndims] + ) + assert ( + d.event_shape + == batch_shape[len(batch_shape) - reinterpreted_batch_ndims :] + + base_dist.event_shape + ) + + assert d.sample().shape == batch_shape + base_dist.event_shape + assert d.mean.shape == batch_shape + base_dist.event_shape + assert d.variance.shape == batch_shape + base_dist.event_shape + x = d.sample(sample_shape) + assert x.shape == sample_shape + d.batch_shape + d.event_shape + + log_prob = d.log_prob(x) + assert ( + log_prob.shape + == sample_shape + + batch_shape[: len(batch_shape) - reinterpreted_batch_ndims] + ) + assert not torch_isnan(log_prob) + log_prob_0 = base_dist.log_prob(x) + assert_equal(log_prob, _sum_rightmost(log_prob_0, reinterpreted_batch_ndims)) + + +@pytest.mark.parametrize( + "base_dist", + [ + dist.Normal(1.0, 2.0), + dist.Exponential(2.0), + dist.MultivariateNormal(torch.zeros(2), torch.eye(2)), + ], + ids=["normal", "exponential", "mvn"], +) +def test_to_event(base_dist): + base_dist = base_dist.expand([2, 3]) + d = base_dist + expected_event_dim = d.event_dim + + d = d.to_event(0) + assert d is base_dist + + d = d.to_event(1) + expected_event_dim += 1 + assert d.event_dim == expected_event_dim + assert d.base_dist is base_dist + + d = d.to_event(0) + assert d.event_dim == expected_event_dim + assert d.base_dist is base_dist + + d = d.to_event(1) + expected_event_dim += 1 + assert d.event_dim == expected_event_dim + assert d.base_dist is base_dist + + d = d.to_event(0) + assert d.event_dim == expected_event_dim + assert d.base_dist is base_dist + + d = d.to_event(-1) + expected_event_dim += -1 + assert d.event_dim == expected_event_dim + assert d.base_dist is base_dist + + d = d.to_event(0) + assert d.event_dim == expected_event_dim + assert d.base_dist is base_dist + + d = d.to_event(-1) + expected_event_dim += -1 + assert d is base_dist + + +@pytest.mark.parametrize("event_shape", [(), (2,), (2, 3)]) +@pytest.mark.parametrize("batch_shape", [(), (3,), (5, 3)]) +@pytest.mark.parametrize("sample_shape", [(), (2,), (4, 2)]) +def test_expand(sample_shape, batch_shape, event_shape): + ones_shape = torch.Size((1,) * len(batch_shape)) + zero = torch.zeros(ones_shape + event_shape) + d0 = dist.Uniform(zero - 2, zero + 1).to_event(len(event_shape)) + + assert d0.sample().shape == ones_shape + event_shape + assert d0.mean.shape == ones_shape + event_shape + assert d0.variance.shape == ones_shape + event_shape + assert d0.sample(sample_shape).shape == sample_shape + ones_shape + event_shape + + assert ( + d0.expand(sample_shape + batch_shape).batch_shape == sample_shape + batch_shape + ) + assert ( + d0.expand(sample_shape + batch_shape).sample().shape + == sample_shape + batch_shape + event_shape + ) + assert ( + d0.expand(sample_shape + batch_shape).mean.shape + == sample_shape + batch_shape + event_shape + ) + assert ( + d0.expand(sample_shape + batch_shape).variance.shape + == sample_shape + batch_shape + event_shape + ) + + base_dist = dist.MultivariateNormal( + torch.zeros(2).expand(*(event_shape + (2,))), + torch.eye(2).expand(*(event_shape + (2, 2))), + ) + if len(event_shape) > len(base_dist.batch_shape): + with pytest.raises(ValueError): + base_dist.to_event(len(event_shape)).expand(batch_shape) + else: + expanded = base_dist.to_event(len(event_shape)).expand(batch_shape) + expanded_batch_ndims = getattr(expanded, "reinterpreted_batch_ndims", 0) + assert expanded.batch_shape == batch_shape + assert expanded.event_shape == ( + base_dist.batch_shape[len(base_dist.batch_shape) - expanded_batch_ndims :] + + base_dist.event_shape + ) diff --git a/pyro/source/tests/distributions/test_kl.py b/pyro/source/tests/distributions/test_kl.py new file mode 100644 index 0000000000000000000000000000000000000000..7bcfe729f442b1e5cda84487e6f7c014895ce714 --- /dev/null +++ b/pyro/source/tests/distributions/test_kl.py @@ -0,0 +1,92 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch +from torch.distributions import kl_divergence, transforms + +import pyro.distributions as dist +from pyro.distributions.util import sum_rightmost +from tests.common import assert_close + + +@pytest.mark.parametrize("batch_shape", [(), (4,), (2, 3)], ids=str) +def test_kl_delta_normal_shape(batch_shape): + v = torch.randn(batch_shape) + loc = torch.randn(batch_shape) + scale = torch.randn(batch_shape).exp() + p = dist.Delta(v) + q = dist.Normal(loc, scale) + assert kl_divergence(p, q).shape == batch_shape + + +@pytest.mark.parametrize("batch_shape", [(), (4,), (2, 3)], ids=str) +@pytest.mark.parametrize("size", [1, 2, 3]) +def test_kl_delta_mvn_shape(batch_shape, size): + v = torch.randn(batch_shape + (size,)) + p = dist.Delta(v, event_dim=1) + + loc = torch.randn(batch_shape + (size,)) + cov = torch.randn(batch_shape + (size, size)) + cov = cov @ cov.transpose(-1, -2) + 0.01 * torch.eye(size) + q = dist.MultivariateNormal(loc, covariance_matrix=cov) + assert kl_divergence(p, q).shape == batch_shape + + +@pytest.mark.parametrize("batch_shape", [(), (4,), (2, 3)], ids=str) +@pytest.mark.parametrize("event_shape", [(), (4,), (2, 3)], ids=str) +def test_kl_independent_normal(batch_shape, event_shape): + shape = batch_shape + event_shape + p = dist.Normal(torch.randn(shape), torch.randn(shape).exp()) + q = dist.Normal(torch.randn(shape), torch.randn(shape).exp()) + actual = kl_divergence( + dist.Independent(p, len(event_shape)), dist.Independent(q, len(event_shape)) + ) + expected = sum_rightmost(kl_divergence(p, q), len(event_shape)) + assert_close(actual, expected) + + +@pytest.mark.parametrize("batch_shape", [(), (4,), (2, 3)], ids=str) +@pytest.mark.parametrize("size", [1, 2, 3]) +def test_kl_independent_delta_mvn_shape(batch_shape, size): + v = torch.randn(batch_shape + (size,)) + p = dist.Independent(dist.Delta(v), 1) + + loc = torch.randn(batch_shape + (size,)) + cov = torch.randn(batch_shape + (size, size)) + cov = cov @ cov.transpose(-1, -2) + 0.01 * torch.eye(size) + q = dist.MultivariateNormal(loc, covariance_matrix=cov) + assert kl_divergence(p, q).shape == batch_shape + + +@pytest.mark.parametrize("batch_shape", [(), (4,), (2, 3)], ids=str) +@pytest.mark.parametrize("size", [1, 2, 3]) +def test_kl_independent_normal_mvn(batch_shape, size): + loc = torch.randn(batch_shape + (size,)) + scale = torch.randn(batch_shape + (size,)).exp() + p1 = dist.Normal(loc, scale).to_event(1) + p2 = dist.MultivariateNormal(loc, scale_tril=scale.diag_embed()) + + loc = torch.randn(batch_shape + (size,)) + cov = torch.randn(batch_shape + (size, size)) + cov = cov @ cov.transpose(-1, -2) + 0.01 * torch.eye(size) + q = dist.MultivariateNormal(loc, covariance_matrix=cov) + + actual = kl_divergence(p1, q) + expected = kl_divergence(p2, q) + assert_close(actual, expected) + + +@pytest.mark.parametrize("shape", [(5,), (4, 5), (2, 3, 5)], ids=str) +@pytest.mark.parametrize("event_dim", [0, 1]) +@pytest.mark.parametrize( + "transform", [transforms.ExpTransform(), transforms.StickBreakingTransform()] +) +def test_kl_transformed_transformed(shape, event_dim, transform): + p_base = dist.Normal(torch.zeros(shape), torch.ones(shape)).to_event(event_dim) + q_base = dist.Normal(torch.ones(shape) * 2, torch.ones(shape)).to_event(event_dim) + p = dist.TransformedDistribution(p_base, transform) + q = dist.TransformedDistribution(q_base, transform) + kl = kl_divergence(q, p) + expected_shape = shape[:-1] if max(transform.event_dim, event_dim) == 1 else shape + assert kl.shape == expected_shape diff --git a/pyro/source/tests/distributions/test_lkj.py b/pyro/source/tests/distributions/test_lkj.py new file mode 100644 index 0000000000000000000000000000000000000000..ffbbe02781a067a5578e9623d3e859ed423462f8 --- /dev/null +++ b/pyro/source/tests/distributions/test_lkj.py @@ -0,0 +1,149 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import pytest +import torch +from torch.distributions import ( + AffineTransform, + Beta, + TransformedDistribution, + biject_to, + transform_to, +) + +from pyro.distributions import constraints, transforms +from pyro.distributions.torch import LKJCholesky +from tests.common import assert_equal, assert_tensors_equal + + +@pytest.mark.parametrize("value_shape", [(1, 1), (3, 3), (5, 5)]) +def test_constraint(value_shape): + value = torch.randn(value_shape).clamp(-2, 2).tril() + value.diagonal(dim1=-2, dim2=-1).exp_() + value = value / value.norm(2, dim=-1, keepdim=True) + + assert (constraints.corr_cholesky.check(value) == 1).all() + + +def _autograd_log_det(ys, x): + # computes log_abs_det_jacobian of y w.r.t. x + return ( + torch.stack([torch.autograd.grad(y, (x,), retain_graph=True)[0] for y in ys]) + .det() + .abs() + .log() + ) + + +@pytest.mark.parametrize("y_shape", [(1,), (3, 1), (6,), (1, 6), (2, 6)]) +def test_unconstrained_to_corr_cholesky_transform(y_shape): + transform = transforms.CorrCholeskyTransform() + y = torch.empty(y_shape).uniform_(-4, 4).requires_grad_() + x = transform(y) + + # test codomain + assert (transform.codomain.check(x) == 1).all() + + # test inv + y_prime = transform.inv(x) + assert_tensors_equal(y, y_prime, prec=1e-4) + + # test domain + assert (transform.domain.check(y_prime) == 1).all() + + # test log_abs_det_jacobian + log_det = transform.log_abs_det_jacobian(y, x) + assert log_det.shape == y_shape[:-1] + if len(y_shape) == 1: + triu_index = x.new_ones(x.shape).triu(diagonal=1).to(torch.bool) + x_tril_vector = x.t()[triu_index] + assert_tensors_equal(_autograd_log_det(x_tril_vector, y), log_det, prec=1e-4) + + x_tril_vector = x_tril_vector.detach().requires_grad_() + x = x.new_zeros(x.shape) + x[triu_index] = x_tril_vector + x = x.t() + z = transform.inv(x) + assert_tensors_equal(_autograd_log_det(z, x_tril_vector), -log_det, prec=1e-4) + + +@pytest.mark.parametrize("x_shape", [(1,), (3, 1), (6,), (1, 6), (5, 6)]) +@pytest.mark.parametrize("mapping", [biject_to, transform_to]) +def test_corr_cholesky_transform(x_shape, mapping): + transform = mapping(constraints.corr_cholesky) + x = torch.randn(x_shape, requires_grad=True).clamp(-2, 2) + y = transform(x) + + # test codomain + assert (transform.codomain.check(y) == 1).all() + + # test inv + z = transform.inv(y) + assert_tensors_equal(x, z, prec=1e-4) + + # test domain + assert (transform.domain.check(z) == 1).all() + + # test log_abs_det_jacobian + log_det = transform.log_abs_det_jacobian(x, y) + assert log_det.shape == x_shape[:-1] + + +@pytest.mark.parametrize("dim", [2, 3, 4, 10]) +def test_log_prob_conc1(dim): + dist = LKJCholesky(dim, torch.tensor([1.0])) + + a_sample = dist.sample(torch.Size([100])) + lp = dist.log_prob(a_sample) + + if dim == 2: + assert_equal(lp, lp.new_full(lp.size(), -math.log(2))) + else: + ladj = ( + a_sample.diagonal(dim1=-2, dim2=-1) + .log() + .mul( + torch.linspace( + start=dim - 1, + end=0, + steps=dim, + device=a_sample.device, + dtype=a_sample.dtype, + ) + ) + .sum(-1) + ) + lps_less_ladj = lp - ladj + assert (lps_less_ladj - lps_less_ladj.min()).abs().sum() < 1e-4 + + +@pytest.mark.parametrize("concentration", [0.1, 0.5, 1.0, 2.0, 5.0]) +def test_log_prob_d2(concentration): + dist = LKJCholesky(2, torch.tensor([concentration])) + test_dist = TransformedDistribution( + Beta(concentration, concentration), AffineTransform(loc=-1.0, scale=2.0) + ) + + samples = dist.sample(torch.Size([100])) + lp = dist.log_prob(samples) + x = samples[..., 1, 0] + tst = test_dist.log_prob(x) + # LKJ prevents inf values in log_prob + lp[tst == math.inf] = math.inf # substitute inf for comparison + assert_tensors_equal(lp, tst, prec=1e-3) + + +def test_sample_batch(): + # Regression test for https://github.com/pyro-ppl/pyro/issues/2615 + dist = LKJCholesky(3, concentration=torch.ones(())).expand([12]) + # batch shape and event shape are as you'd expect + assert dist.batch_shape == torch.Size([12]) + assert dist.event_shape == torch.Size([3, 3]) + # samples have correct shape when sample_shape=() + assert dist.shape(()) == torch.Size([12, 3, 3]) + assert dist.sample().shape == torch.Size([12, 3, 3]) + # samples had the wrong shape when sample_shape is non-unit + assert dist.shape((4,)) == torch.Size([4, 12, 3, 3]) + assert dist.sample((4,)).shape == torch.Size([4, 12, 3, 3]) diff --git a/pyro/source/tests/distributions/test_log_normal_negative_binomial.py b/pyro/source/tests/distributions/test_log_normal_negative_binomial.py new file mode 100644 index 0000000000000000000000000000000000000000..1bb680e65cddf8d94b8ae8411a4d11bd6425ea8d --- /dev/null +++ b/pyro/source/tests/distributions/test_log_normal_negative_binomial.py @@ -0,0 +1,47 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +from pyro.distributions import LogNormalNegativeBinomial +from tests.common import assert_close + + +@pytest.mark.parametrize("num_quad_points", [2, 4]) +@pytest.mark.parametrize("shape", [(2,), (4, 3)]) +def test_lnnb_shapes(num_quad_points, shape): + logits = torch.randn(shape) + total_count = 5.0 + multiplicative_noise_scale = torch.rand(shape) + + d = LogNormalNegativeBinomial( + total_count, logits, multiplicative_noise_scale, num_quad_points=num_quad_points + ) + + assert d.batch_shape == shape + assert d.log_prob(torch.ones(shape)).shape == shape + + assert d.expand(shape + shape).batch_shape == shape + shape + assert d.expand(shape + shape).log_prob(torch.ones(shape)).shape == shape + shape + + +@pytest.mark.parametrize("total_count", [0.5, 4.0]) +@pytest.mark.parametrize("multiplicative_noise_scale", [0.01, 0.25]) +def test_lnnb_mean_variance( + total_count, multiplicative_noise_scale, num_quad_points=128, N=512 +): + logits = torch.tensor(2.0) + d = LogNormalNegativeBinomial( + total_count, logits, multiplicative_noise_scale, num_quad_points=num_quad_points + ) + + values = torch.arange(N) + probs = d.log_prob(values).exp() + assert_close(1.0, probs.sum().item(), atol=1.0e-6) + + expected_mean = (probs * values).sum() + assert_close(expected_mean, d.mean, atol=1.0e-6, rtol=1.0e-5) + + expected_var = (probs * (values - d.mean).pow(2.0)).sum() + assert_close(expected_var, d.variance, atol=1.0e-6, rtol=1.0e-5) diff --git a/pyro/source/tests/distributions/test_lowrank_mvn.py b/pyro/source/tests/distributions/test_lowrank_mvn.py new file mode 100644 index 0000000000000000000000000000000000000000..8317886fe3d509216b73cb2170c0317360ac6b9d --- /dev/null +++ b/pyro/source/tests/distributions/test_lowrank_mvn.py @@ -0,0 +1,44 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +from pyro.distributions import LowRankMultivariateNormal, MultivariateNormal +from tests.common import assert_equal + + +def test_scale_tril(): + loc = torch.tensor([1.0, 2.0, 1.0, 2.0, 0.0]) + D = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0]) + W = torch.tensor([[1.0, 2.0], [-1.0, 3.0], [2.0, 1.0], [3.0, 2.0], [4.0, 4.0]]) + cov = D.diag() + W.matmul(W.t()) + + mvn = MultivariateNormal(loc, cov) + lowrank_mvn = LowRankMultivariateNormal(loc, W, D) + + assert_equal(mvn.scale_tril, lowrank_mvn.scale_tril) + + +def test_log_prob(): + loc = torch.tensor([2.0, 1.0, 1.0, 2.0, 2.0]) + D = torch.tensor([1.0, 2.0, 3.0, 1.0, 3.0]) + W = torch.tensor([[1.0, 2.0], [-1.0, 1.0], [2.0, 1.0], [2.0, 2.0], [4.0, 6.0]]) + x = torch.tensor([2.0, 3.0, 4.0, 1.0, 7.0]) + cov = D.diag() + W.matmul(W.t()) + + mvn = MultivariateNormal(loc, cov) + lowrank_mvn = LowRankMultivariateNormal(loc, W, D) + + assert_equal(mvn.log_prob(x), lowrank_mvn.log_prob(x)) + + +def test_variance(): + loc = torch.tensor([1.0, 1.0, 1.0, 2.0, 0.0]) + D = torch.tensor([1.0, 2.0, 2.0, 4.0, 5.0]) + W = torch.tensor([[3.0, 2.0], [-1.0, 3.0], [3.0, 1.0], [3.0, 3.0], [4.0, 4.0]]) + cov = D.diag() + W.matmul(W.t()) + + mvn = MultivariateNormal(loc, cov) + lowrank_mvn = LowRankMultivariateNormal(loc, W, D) + + assert_equal(mvn.variance, lowrank_mvn.variance) diff --git a/pyro/source/tests/distributions/test_mask.py b/pyro/source/tests/distributions/test_mask.py new file mode 100644 index 0000000000000000000000000000000000000000..770acda06d8aa9215064b624a132f43d31bc47af --- /dev/null +++ b/pyro/source/tests/distributions/test_mask.py @@ -0,0 +1,156 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch +from torch import tensor +from torch.distributions import kl_divergence + +from pyro.distributions.torch import Bernoulli, Normal +from pyro.distributions.util import broadcast_shape, scale_and_mask +from tests.common import assert_equal + + +def checker_mask(shape): + mask = tensor(0.0) + for size in shape: + mask = mask.unsqueeze(-1) + torch.arange(float(size)) + return mask.fmod(2).bool() + + +@pytest.mark.parametrize( + "batch_dim,mask_dim", [(b, m) for b in range(3) for m in range(1 + b)] +) +@pytest.mark.parametrize("event_dim", [0, 1, 2]) +def test_mask(batch_dim, event_dim, mask_dim): + # Construct base distribution. + shape = torch.Size([2, 3, 4, 5, 6][: batch_dim + event_dim]) + batch_shape = shape[:batch_dim] + mask_shape = batch_shape[batch_dim - mask_dim :] + base_dist = Bernoulli(0.1).expand_by(shape).to_event(event_dim) + + # Construct masked distribution. + mask = checker_mask(mask_shape) + dist = base_dist.mask(mask) + + # Check shape. + sample = base_dist.sample() + assert dist.batch_shape == base_dist.batch_shape + assert dist.event_shape == base_dist.event_shape + assert sample.shape == sample.shape + assert dist.log_prob(sample).shape == base_dist.log_prob(sample).shape + + # Check values. + assert_equal(dist.mean, base_dist.mean) + assert_equal(dist.variance, base_dist.variance) + assert_equal( + dist.log_prob(sample), scale_and_mask(base_dist.log_prob(sample), mask=mask) + ) + assert_equal( + dist.score_parts(sample), + base_dist.score_parts(sample).scale_and_mask(mask=mask), + prec=0, + ) + if not dist.event_shape: + assert_equal(dist.enumerate_support(), base_dist.enumerate_support()) + assert_equal( + dist.enumerate_support(expand=True), + base_dist.enumerate_support(expand=True), + ) + assert_equal( + dist.enumerate_support(expand=False), + base_dist.enumerate_support(expand=False), + ) + + +@pytest.mark.parametrize("mask", [False, True, torch.tensor(False), torch.tensor(True)]) +def test_mask_type(mask): + p = Normal(torch.randn(2, 2), torch.randn(2, 2).exp()) + p_masked = p.mask(mask) + if isinstance(mask, bool): + mask = torch.tensor(mask) + + x = p.sample() + actual = p_masked.log_prob(x) + expected = p.log_prob(x) * mask.float() + assert_equal(actual, expected) + + actual = p_masked.score_parts(x) + expected = p.score_parts(x) + for a, e in zip(actual, expected): + if isinstance(e, torch.Tensor): + e = e * mask.float() + assert_equal(a, e) + + +@pytest.mark.parametrize("event_shape", [(), (4,)]) +@pytest.mark.parametrize("dist_shape", [(), (3,), (2, 1), (2, 3)]) +@pytest.mark.parametrize("mask_shape", [(), (3,), (2, 1), (2, 3)]) +def test_broadcast(event_shape, dist_shape, mask_shape): + mask = torch.empty(torch.Size(mask_shape)).bernoulli_(0.5).bool() + base_dist = Normal(torch.zeros(dist_shape + event_shape), 1.0) + base_dist = base_dist.to_event(len(event_shape)) + assert base_dist.batch_shape == dist_shape + assert base_dist.event_shape == event_shape + + d = base_dist.mask(mask) + d_shape = broadcast_shape(mask.shape, base_dist.batch_shape) + assert d.batch_shape == d_shape + assert d.event_shape == event_shape + + +def test_kl_divergence(): + mask = torch.tensor([[0, 1], [1, 1]]).bool() + p = Normal(torch.randn(2, 2), torch.randn(2, 2).exp()) + q = Normal(torch.randn(2, 2), torch.randn(2, 2).exp()) + expected = kl_divergence(p.to_event(2), q.to_event(2)) + actual = kl_divergence( + p.mask(mask).to_event(2), q.mask(mask).to_event(2) + ) + kl_divergence(p.mask(~mask).to_event(2), q.mask(~mask).to_event(2)) + assert_equal(actual, expected) + + +@pytest.mark.parametrize( + "p_mask", [False, True, torch.tensor(False), torch.tensor(True)] +) +@pytest.mark.parametrize( + "q_mask", [False, True, torch.tensor(False), torch.tensor(True)] +) +def test_kl_divergence_type(p_mask, q_mask): + p = Normal(torch.randn(2, 2), torch.randn(2, 2).exp()) + q = Normal(torch.randn(2, 2), torch.randn(2, 2).exp()) + mask = ( + (torch.tensor(p_mask) if isinstance(p_mask, bool) else p_mask) + & (torch.tensor(q_mask) if isinstance(q_mask, bool) else q_mask) + ).expand(2, 2) + + expected = kl_divergence(p, q) + expected[~mask] = 0 + + actual = kl_divergence(p.mask(p_mask), q.mask(q_mask)) + if p_mask is False or q_mask is False: + assert isinstance(actual, float) and actual == 0.0 + else: + assert_equal(actual, expected) + + +class NormalBomb(Normal): + def log_prob(self, value): + raise ValueError("Should not be called") + + def score_parts(self, value): + raise ValueError("Should not be called") + + +@pytest.mark.parametrize("shape", [None, (), (4,), (3, 2)], ids=str) +def test_mask_noop(shape): + d = NormalBomb(0, 1).mask(False) + if shape is not None: + d = d.expand(shape) + x = d.sample() + + actual = d.log_prob(x) + assert_equal(actual, torch.zeros(shape if shape else ())) + + actual = d.score_parts(x) + assert_equal(actual.log_prob, torch.zeros(shape if shape else ())) diff --git a/pyro/source/tests/distributions/test_mixture.py b/pyro/source/tests/distributions/test_mixture.py new file mode 100644 index 0000000000000000000000000000000000000000..438cbf055b0ddb4dc281873aefd07645ffefde10 --- /dev/null +++ b/pyro/source/tests/distributions/test_mixture.py @@ -0,0 +1,132 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +import pyro.distributions as dist +from pyro.distributions.util import broadcast_shape +from pyro.util import torch_isnan +from tests.common import assert_equal + + +@pytest.mark.parametrize("sample_shape", [(), (6,), (4, 2)]) +@pytest.mark.parametrize("batch_shape", [(), (7,), (5, 3)]) +@pytest.mark.parametrize( + "component1", + [dist.Normal(1.0, 2.0), dist.Exponential(2.0)], + ids=["normal", "exponential"], +) +@pytest.mark.parametrize( + "component0", + [dist.Normal(1.0, 2.0), dist.Exponential(2.0)], + ids=["normal", "exponential"], +) +def test_masked_mixture_univariate(component0, component1, sample_shape, batch_shape): + if batch_shape: + component0 = component0.expand_by(batch_shape) + component1 = component1.expand_by(batch_shape) + mask = torch.empty(batch_shape).bernoulli_(0.5).bool() + d = dist.MaskedMixture(mask, component0, component1) + assert d.batch_shape == batch_shape + assert d.event_shape == () + + assert d.sample().shape == batch_shape + assert d.mean.shape == batch_shape + assert d.variance.shape == batch_shape + x = d.sample(sample_shape) + assert x.shape == sample_shape + batch_shape + + log_prob = d.log_prob(x) + assert log_prob.shape == sample_shape + batch_shape + assert not torch_isnan(log_prob) + log_prob_0 = component0.log_prob(x) + log_prob_1 = component1.log_prob(x) + mask = mask.expand(sample_shape + batch_shape) + assert_equal(log_prob[mask], log_prob_1[mask]) + assert_equal(log_prob[~mask], log_prob_0[~mask]) + + +@pytest.mark.parametrize("sample_shape", [(), (6,), (4, 2)]) +@pytest.mark.parametrize("batch_shape", [(), (7,), (5, 3)]) +def test_masked_mixture_multivariate(sample_shape, batch_shape): + event_shape = torch.Size((8,)) + component0 = dist.MultivariateNormal( + torch.zeros(event_shape), torch.eye(event_shape[0]) + ) + component1 = dist.Uniform( + torch.zeros(event_shape), torch.ones(event_shape) + ).to_event(1) + if batch_shape: + component0 = component0.expand_by(batch_shape) + component1 = component1.expand_by(batch_shape) + mask = torch.empty(batch_shape).bernoulli_(0.5).bool() + d = dist.MaskedMixture(mask, component0, component1) + assert d.batch_shape == batch_shape + assert d.event_shape == event_shape + + assert d.sample().shape == batch_shape + event_shape + assert d.mean.shape == batch_shape + event_shape + assert d.variance.shape == batch_shape + event_shape + x = d.sample(sample_shape) + assert x.shape == sample_shape + batch_shape + event_shape + + log_prob = d.log_prob(x) + assert log_prob.shape == sample_shape + batch_shape + assert not torch_isnan(log_prob) + log_prob_0 = component0.log_prob(x) + log_prob_1 = component1.log_prob(x) + mask = mask.expand(sample_shape + batch_shape) + assert_equal(log_prob[mask], log_prob_1[mask]) + assert_equal(log_prob[~mask], log_prob_0[~mask]) + + +@pytest.mark.parametrize("value_shape", [(), (5, 1, 1, 1), (6, 1, 1, 1, 1)]) +@pytest.mark.parametrize("component1_shape", [(), (4, 1, 1), (6, 1, 1, 1, 1)]) +@pytest.mark.parametrize("component0_shape", [(), (3, 1), (6, 1, 1, 1, 1)]) +@pytest.mark.parametrize("mask_shape", [(), (2,), (6, 1, 1, 1, 1)]) +def test_broadcast(mask_shape, component0_shape, component1_shape, value_shape): + mask = torch.empty(torch.Size(mask_shape)).bernoulli_(0.5).bool() + component0 = dist.Normal(torch.zeros(component0_shape), 1.0) + component1 = dist.Exponential(torch.ones(component1_shape)) + value = torch.ones(value_shape) + + d = dist.MaskedMixture(mask, component0, component1) + d_shape = broadcast_shape(mask_shape, component0_shape, component1_shape) + assert d.batch_shape == d_shape + + log_prob_shape = broadcast_shape(d_shape, value_shape) + assert d.log_prob(value).shape == log_prob_shape + + +@pytest.mark.parametrize("event_shape", [(), (2,), (2, 3)]) +@pytest.mark.parametrize("batch_shape", [(), (3,), (5, 3)]) +@pytest.mark.parametrize("sample_shape", [(), (2,), (4, 2)]) +def test_expand(sample_shape, batch_shape, event_shape): + ones_shape = torch.Size((1,) * len(batch_shape)) + mask = torch.empty(ones_shape).bernoulli_(0.5).bool() + zero = torch.zeros(ones_shape + event_shape) + d0 = dist.Uniform(zero - 2, zero + 1).to_event(len(event_shape)) + d1 = dist.Uniform(zero - 1, zero + 2).to_event(len(event_shape)) + d = dist.MaskedMixture(mask, d0, d1) + + assert d.sample().shape == ones_shape + event_shape + assert d.mean.shape == ones_shape + event_shape + assert d.variance.shape == ones_shape + event_shape + assert d.sample(sample_shape).shape == sample_shape + ones_shape + event_shape + + assert ( + d.expand(sample_shape + batch_shape).batch_shape == sample_shape + batch_shape + ) + assert ( + d.expand(sample_shape + batch_shape).sample().shape + == sample_shape + batch_shape + event_shape + ) + assert ( + d.expand(sample_shape + batch_shape).mean.shape + == sample_shape + batch_shape + event_shape + ) + assert ( + d.expand(sample_shape + batch_shape).variance.shape + == sample_shape + batch_shape + event_shape + ) diff --git a/pyro/source/tests/distributions/test_mvn.py b/pyro/source/tests/distributions/test_mvn.py new file mode 100644 index 0000000000000000000000000000000000000000..4a68ce262ec0119500c4d5fa5271c4db9d9476de --- /dev/null +++ b/pyro/source/tests/distributions/test_mvn.py @@ -0,0 +1,56 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +from pyro.distributions import MultivariateNormal +from tests.common import assert_equal + + +def random_mvn(loc_shape, cov_shape, dim): + """ + Generate a random MultivariateNormal distribution for testing. + """ + rank = dim + dim + loc = torch.randn(loc_shape + (dim,), requires_grad=True) + cov = torch.randn(cov_shape + (dim, rank), requires_grad=True) + cov = cov.matmul(cov.transpose(-1, -2)) + return MultivariateNormal(loc, cov) + + +@pytest.mark.parametrize( + "loc_shape", + [ + (), + (2,), + (3, 2), + ], +) +@pytest.mark.parametrize( + "cov_shape", + [ + (), + (2,), + (3, 2), + ], +) +@pytest.mark.parametrize( + "dim", + [ + 1, + 3, + 5, + ], +) +def test_shape(loc_shape, cov_shape, dim): + mvn = random_mvn(loc_shape, cov_shape, dim) + assert mvn.loc.shape == mvn.batch_shape + mvn.event_shape + assert mvn.covariance_matrix.shape == mvn.batch_shape + mvn.event_shape * 2 + assert mvn.scale_tril.shape == mvn.covariance_matrix.shape + assert mvn.precision_matrix.shape == mvn.covariance_matrix.shape + + assert_equal(mvn.precision_matrix, mvn.covariance_matrix.inverse()) + + # smoke test for precision/log_prob backward + (mvn.precision_matrix.sum() + mvn.log_prob(torch.zeros(dim)).sum()).backward() diff --git a/pyro/source/tests/distributions/test_mvt.py b/pyro/source/tests/distributions/test_mvt.py new file mode 100644 index 0000000000000000000000000000000000000000..c3f9ae22afb029d0c4aa2dd867af0f80347fec8d --- /dev/null +++ b/pyro/source/tests/distributions/test_mvt.py @@ -0,0 +1,186 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import pytest +import torch +from torch.distributions import Gamma, MultivariateNormal, StudentT + +from pyro.distributions import MultivariateStudentT +from tests.common import assert_equal + + +def random_mvt(df_shape, loc_shape, cov_shape, dim): + """ + Generate a random MultivariateStudentT distribution for testing. + """ + rank = dim + dim + df = torch.rand(df_shape, requires_grad=True).exp() + loc = torch.randn(loc_shape + (dim,), requires_grad=True) + cov = torch.randn(cov_shape + (dim, rank), requires_grad=True) + cov = cov.matmul(cov.transpose(-1, -2)) + scale_tril = torch.linalg.cholesky(cov) + return MultivariateStudentT(df, loc, scale_tril) + + +@pytest.mark.parametrize( + "df_shape", + [ + (), + (2,), + (3, 2), + ], +) +@pytest.mark.parametrize( + "loc_shape", + [ + (), + (2,), + (3, 2), + ], +) +@pytest.mark.parametrize( + "cov_shape", + [ + (), + (2,), + (3, 2), + ], +) +@pytest.mark.parametrize( + "dim", + [ + 1, + 3, + 5, + ], +) +def test_shape(df_shape, loc_shape, cov_shape, dim): + mvt = random_mvt(df_shape, loc_shape, cov_shape, dim) + assert mvt.df.shape == mvt.batch_shape + assert mvt.loc.shape == mvt.batch_shape + mvt.event_shape + assert mvt.covariance_matrix.shape == mvt.batch_shape + mvt.event_shape * 2 + assert mvt.scale_tril.shape == mvt.covariance_matrix.shape + assert mvt.precision_matrix.shape == mvt.covariance_matrix.shape + + assert_equal(mvt.precision_matrix, mvt.covariance_matrix.inverse()) + + # smoke test for precision/log_prob backward + (mvt.precision_matrix.sum() + mvt.log_prob(torch.zeros(dim)).sum()).backward() + + +@pytest.mark.parametrize( + "batch_shape", + [ + (), + (3, 2), + (4,), + ], + ids=str, +) +@pytest.mark.parametrize("dim", [1, 2]) +def test_log_prob(batch_shape, dim): + loc = torch.randn(batch_shape + (dim,)) + A = torch.randn(batch_shape + (dim, dim + dim)) + scale_tril = torch.linalg.cholesky(A.matmul(A.transpose(-2, -1))) + x = torch.randn(batch_shape + (dim,)) + df = torch.randn(batch_shape).exp() + 2 + actual_log_prob = MultivariateStudentT(df, loc, scale_tril).log_prob(x) + + if dim == 1: + expected_log_prob = ( + StudentT(df.unsqueeze(-1), loc, scale_tril[..., 0]).log_prob(x).sum(-1) + ) + assert_equal(actual_log_prob, expected_log_prob) + + # test the fact MVT(df, loc, scale)(x) = int MVN(loc, scale / m)(x) Gamma(df/2,df/2)(m) dm + num_samples = 100000 + gamma_samples = Gamma(df / 2, df / 2).sample(sample_shape=(num_samples,)) + mvn_scale_tril = scale_tril / gamma_samples.sqrt().unsqueeze(-1).unsqueeze(-1) + mvn = MultivariateNormal(loc, scale_tril=mvn_scale_tril) + expected_log_prob = mvn.log_prob(x).logsumexp(0) - math.log(num_samples) + assert_equal(actual_log_prob, expected_log_prob, prec=0.01) + + +@pytest.mark.parametrize("df", [3.9, 9.1]) +@pytest.mark.parametrize("dim", [1, 2]) +def test_rsample(dim, df, num_samples=200 * 1000): + scale_tril = (0.5 * torch.randn(dim)).exp().diag() + 0.1 * torch.randn(dim, dim) + scale_tril = scale_tril.tril(0) + scale_tril.requires_grad_(True) + + d = MultivariateStudentT(torch.tensor(df), torch.zeros(dim), scale_tril) + z = d.rsample(sample_shape=(num_samples,)) + loss = z.pow(2.0).sum(-1).mean() + loss.backward() + + actual_scale_tril_grad = scale_tril.grad.data.clone() + scale_tril.grad.zero_() + + analytic = (df / (df - 2.0)) * torch.mm(scale_tril, scale_tril.t()).diag().sum() + analytic.backward() + expected_scale_tril_grad = scale_tril.grad.data + + assert_equal(expected_scale_tril_grad, actual_scale_tril_grad, prec=0.1) + + +@pytest.mark.parametrize("dim", [1, 2]) +def test_log_prob_normalization(dim, df=6.1, grid_size=2000, domain_width=5.0): + scale_tril = (0.2 * torch.randn(dim) - 1.5).exp().diag() + 0.1 * torch.randn( + dim, dim + ) + scale_tril = 0.1 * scale_tril.tril(0) + + volume_factor = domain_width + prec = 0.01 + if dim == 2: + volume_factor = volume_factor**2 + prec = 0.05 + + sample_shape = (grid_size * grid_size, dim) + z = torch.distributions.Uniform(-0.5 * domain_width, 0.5 * domain_width).sample( + sample_shape + ) + + d = MultivariateStudentT(torch.tensor(df), torch.zeros(dim), scale_tril) + normalizer = d.log_prob(z).exp().mean().item() * volume_factor + + assert_equal(normalizer, 1.0, prec=prec) + + +@pytest.mark.parametrize( + "batch_shape", + [ + (), + (3, 2), + (4,), + ], + ids=str, +) +def test_mean_var(batch_shape): + dim = 2 + loc = torch.randn(batch_shape + (dim,)) + A = torch.randn(batch_shape + (dim, dim + dim)) + scale_tril = torch.linalg.cholesky(A.matmul(A.transpose(-2, -1))) + df = torch.randn(batch_shape).exp() + 4 + num_samples = 100000 + d = MultivariateStudentT(df, loc, scale_tril) + samples = d.sample(sample_shape=(num_samples,)) + expected_mean = samples.mean(0) + expected_variance = samples.var(0) + assert_equal(d.mean, expected_mean, prec=0.1) + assert_equal(d.variance, expected_variance, prec=0.2) + + assert_equal( + MultivariateStudentT(0.5, loc, scale_tril).mean, + torch.full(batch_shape + (dim,), float("nan")), + ) + assert_equal( + MultivariateStudentT(0.5, loc, scale_tril).variance, + torch.full(batch_shape + (dim,), float("nan")), + ) + assert_equal( + MultivariateStudentT(1.5, loc, scale_tril).variance, + torch.full(batch_shape + (dim,), float("inf")), + ) diff --git a/pyro/source/tests/distributions/test_nanmasked.py b/pyro/source/tests/distributions/test_nanmasked.py new file mode 100644 index 0000000000000000000000000000000000000000..845e663594f8000b42d7a13257b50052dab760de --- /dev/null +++ b/pyro/source/tests/distributions/test_nanmasked.py @@ -0,0 +1,97 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import pytest +import torch + +import pyro +import pyro.distributions as dist +from pyro.infer import SVI, Trace_ELBO +from pyro.infer.autoguide import AutoNormal +from pyro.optim import Adam +from tests.common import assert_close + + +@pytest.mark.parametrize("batch_shape", [(), (40,), (11, 9)], ids=str) +def test_normal(batch_shape): + # Test on full data + data = torch.randn(batch_shape) + loc = torch.randn(batch_shape).requires_grad_() + scale = torch.randn(batch_shape).exp().requires_grad_() + d = dist.NanMaskedNormal(loc, scale) + d2 = dist.Normal(loc, scale) + actual = d.log_prob(data) + expected = d2.log_prob(data) + assert_close(actual, expected) + + # Test on partial data. + ok = torch.rand(batch_shape) < 0.5 + data[~ok] = math.nan + actual = d.log_prob(data) + assert actual.shape == expected.shape + assert actual.isfinite().all() + loc_grad, scale_grad = torch.autograd.grad(actual.sum(), [loc, scale]) + assert loc_grad.isfinite().all() + assert scale_grad.isfinite().all() + + # Check identity on fully observed and fully unobserved rows. + assert_close(actual[ok], expected[ok]) + assert_close(actual[~ok], torch.zeros_like(actual[~ok])) + + +@pytest.mark.parametrize("batch_shape", [(), (40,), (11, 9)], ids=str) +@pytest.mark.parametrize("p", [1, 2, 3, 10], ids=str) +def test_multivariate_normal(batch_shape, p): + # Test on full data + data = torch.randn(batch_shape + (p,)) + loc = torch.randn(batch_shape + (p,)).requires_grad_() + scale_tril = torch.randn(batch_shape + (p, p)) + scale_tril.tril_() + scale_tril.diagonal(dim1=-2, dim2=-1).exp_() + scale_tril.requires_grad_() + d = dist.NanMaskedMultivariateNormal(loc, scale_tril=scale_tril) + d2 = dist.MultivariateNormal(loc, scale_tril=scale_tril) + actual = d.log_prob(data) + expected = d2.log_prob(data) + assert_close(actual, expected) + + # Test on partial data. + ok = torch.rand(batch_shape + (p,)) < 0.5 + data[~ok] = math.nan + actual = d.log_prob(data) + assert actual.shape == expected.shape + assert actual.isfinite().all() + loc_grad, scale_tril_grad = torch.autograd.grad(actual.sum(), [loc, scale_tril]) + assert loc_grad.isfinite().all() + assert scale_tril_grad.isfinite().all() + + # Check identity on fully observed and fully unobserved rows. + observed = ok.all(-1) + assert_close(actual[observed], expected[observed]) + unobserved = ~ok.any(-1) + assert_close(actual[unobserved], torch.zeros_like(actual[unobserved])) + + +def test_multivariate_normal_model(): + def model(data): + loc = pyro.sample("loc", dist.Normal(torch.zeros(3), torch.ones(3)).to_event(1)) + scale_tril = torch.eye(3) + with pyro.plate("data", len(data)): + pyro.sample( + "obs", + dist.NanMaskedMultivariateNormal(loc, scale_tril=scale_tril), + obs=data, + ) + + data = torch.randn(100, 3) + ok = torch.rand(100, 3) < 0.5 + assert 100 < ok.long().sum() < 200, "weak test" + data[~ok] = math.nan + + guide = AutoNormal(model) + svi = SVI(model, guide, Adam({"lr": 1e-4}), Trace_ELBO()) + for step in range(3): + loss = svi.step(data) + assert math.isfinite(loss) diff --git a/pyro/source/tests/distributions/test_omt_mvn.py b/pyro/source/tests/distributions/test_omt_mvn.py new file mode 100644 index 0000000000000000000000000000000000000000..24c45457d8ca6ad703766e457c1c6997cda3de89 --- /dev/null +++ b/pyro/source/tests/distributions/test_omt_mvn.py @@ -0,0 +1,128 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import numpy as np +import pytest +import torch + +from pyro.distributions import ( + AVFMultivariateNormal, + MultivariateNormal, + OMTMultivariateNormal, +) +from tests.common import assert_equal + + +def analytic_grad(L11=1.0, L22=1.0, L21=1.0, omega1=1.0, omega2=1.0): + dp = L11 * omega1 + L21 * omega2 + fact_1 = -omega2 * dp + fact_2 = np.exp(-0.5 * (L22 * omega2) ** 2) + fact_3 = np.exp(-0.5 * dp**2) + return fact_1 * fact_2 * fact_3 + + +@pytest.mark.parametrize("L21", [0.4, 1.1]) +@pytest.mark.parametrize("L11", [0.6]) +@pytest.mark.parametrize("omega1", [0.5]) +@pytest.mark.parametrize( + "sample_shape", [torch.Size([1000, 2000]), torch.Size([200000])] +) +@pytest.mark.parametrize("k", [1]) +@pytest.mark.parametrize("mvn_dist", ["OMTMultivariateNormal", "AVFMultivariateNormal"]) +def test_mean_gradient( + mvn_dist, k, sample_shape, L21, omega1, L11, L22=0.8, L33=0.9, omega2=0.75 +): + if mvn_dist == "OMTMultivariateNormal" and k > 1: + return + + omega = torch.tensor([omega1, omega2, 0.0]) + loc = torch.zeros(3, requires_grad=True) + zero_vec = [0.0, 0.0, 0.0] + off_diag = torch.tensor([zero_vec, [L21, 0.0, 0.0], zero_vec], requires_grad=True) + L = torch.diag(torch.tensor([L11, L22, L33])) + off_diag + + if mvn_dist == "OMTMultivariateNormal": + dist = OMTMultivariateNormal(loc, L) + elif mvn_dist == "AVFMultivariateNormal": + CV = (1.1 * torch.rand(2, k, 3)).requires_grad_(True) + dist = AVFMultivariateNormal(loc, L, CV) + + z = dist.rsample(sample_shape) + torch.cos((omega * z).sum(-1)).mean().backward() + + computed_grad = off_diag.grad.cpu().data.numpy()[1, 0] + analytic = analytic_grad(L11=L11, L22=L22, L21=L21, omega1=omega1, omega2=omega2) + assert off_diag.grad.size() == off_diag.size() + assert loc.grad.size() == loc.size() + assert torch.triu(off_diag.grad, 1).sum() == 0.0 + assert_equal( + analytic, + computed_grad, + prec=0.005, + msg="bad cholesky grad for %s (expected %.5f, got %.5f)" + % (mvn_dist, analytic, computed_grad), + ) + + +@pytest.mark.skip(reason="Slow; tests to be run when refactoring") +@pytest.mark.parametrize("L21", [0.4, 1.1]) +@pytest.mark.parametrize("L11", [0.6, 0.95]) +@pytest.mark.parametrize("omega1", [0.5, 0.9]) +@pytest.mark.parametrize("k", [3]) +@pytest.mark.parametrize("mvn_dist", ["OMTMultivariateNormal", "AVFMultivariateNormal"]) +def test_mean_single_gradient( + mvn_dist, k, L21, omega1, L11, L22=0.8, L33=0.9, omega2=0.75, n_samples=20000 +): + omega = torch.tensor([omega1, omega2, 0.0]) + loc = torch.zeros(3, requires_grad=True) + zero_vec = [0.0, 0.0, 0.0] + off_diag = torch.tensor([zero_vec, [L21, 0.0, 0.0], zero_vec], requires_grad=True) + L = torch.diag(torch.tensor([L11, L22, L33])) + off_diag + + if mvn_dist == "OMTMultivariateNormal": + dist = OMTMultivariateNormal(loc, L) + elif mvn_dist == "AVFMultivariateNormal": + CV = (0.2 * torch.rand(2, k, 3)).requires_grad_(True) + dist = AVFMultivariateNormal(loc, L, CV) + + computed_grads = [] + + for _ in range(n_samples): + z = dist.rsample() + torch.cos((omega * z).sum(-1)).mean().backward() + assert off_diag.grad.size() == off_diag.size() + assert loc.grad.size() == loc.size() + assert torch.triu(off_diag.grad, 1).sum() == 0.0 + + computed_grad = off_diag.grad.cpu()[1, 0].item() + computed_grads.append(computed_grad) + off_diag.grad.zero_() + loc.grad.zero_() + + computed_grad = np.mean(computed_grads) + analytic = analytic_grad(L11=L11, L22=L22, L21=L21, omega1=omega1, omega2=omega2) + assert_equal( + analytic, + computed_grad, + prec=0.01, + msg="bad cholesky grad for %s (expected %.5f, got %.5f)" + % (mvn_dist, analytic, computed_grad), + ) + + +@pytest.mark.parametrize("mvn_dist", [OMTMultivariateNormal, AVFMultivariateNormal]) +def test_log_prob(mvn_dist): + loc = torch.tensor([2.0, 1.0, 1.0, 2.0, 2.0]) + D = torch.tensor([1.0, 2.0, 3.0, 1.0, 3.0]) + W = torch.tensor([[1.0, -1.0, 2.0, 2.0, 4.0], [2.0, 1.0, 1.0, 2.0, 6.0]]) + x = torch.tensor([2.0, 3.0, 4.0, 1.0, 7.0]) + L = D.diag() + torch.tril(W.t().matmul(W)) + cov = torch.mm(L, L.t()) + + mvn = MultivariateNormal(loc, cov) + if mvn_dist == OMTMultivariateNormal: + mvn_prime = OMTMultivariateNormal(loc, L) + elif mvn_dist == AVFMultivariateNormal: + CV = 0.2 * torch.rand(2, 2, 5) + mvn_prime = AVFMultivariateNormal(loc, L, CV) + assert_equal(mvn.log_prob(x), mvn_prime.log_prob(x)) diff --git a/pyro/source/tests/distributions/test_one_hot_categorical.py b/pyro/source/tests/distributions/test_one_hot_categorical.py new file mode 100644 index 0000000000000000000000000000000000000000..f206faba5aeaf77d3b9657c3603713ac4d98ff78 --- /dev/null +++ b/pyro/source/tests/distributions/test_one_hot_categorical.py @@ -0,0 +1,115 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from unittest import TestCase + +import numpy as np +import pytest +import torch + +import pyro.distributions as dist +from tests.common import assert_equal + + +class TestOneHotCategorical(TestCase): + """ + Tests methods specific to the OneHotCategorical distribution + """ + + def setUp(self): + n = 1 + self.probs = torch.tensor([0.1, 0.6, 0.3]) + self.batch_ps = torch.tensor([[0.1, 0.6, 0.3], [0.2, 0.4, 0.4]]) + self.n = torch.tensor([n]) + self.test_data = torch.tensor([0.0, 1.0, 0.0]) + self.test_data_nhot = torch.tensor([2.0]) + self.analytic_mean = n * self.probs + one = torch.ones(3) + self.analytic_var = n * torch.mul(self.probs, one.sub(self.probs)) + + # Discrete Distribution + self.d_ps = torch.tensor([[0.2, 0.3, 0.5], [0.1, 0.1, 0.8]]) + self.d_test_data = torch.tensor([[0.0], [5.0]]) + self.d_v_test_data = [["a"], ["f"]] + + self.n_samples = 50000 + + self.support_one_hot_non_vec = torch.tensor( + [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]] + ) + self.support_one_hot = torch.tensor( + [[[1, 0, 0], [1, 0, 0]], [[0, 1, 0], [0, 1, 0]], [[0, 0, 1], [0, 0, 1]]] + ) + self.support_non_vec = torch.LongTensor([[0], [1], [2]]) + self.support = torch.LongTensor([[[0], [0]], [[1], [1]], [[2], [2]]]) + self.discrete_support_non_vec = torch.tensor([[0.0], [1.0], [2.0]]) + self.discrete_support = torch.tensor( + [[[0.0], [3.0]], [[1.0], [4.0]], [[2.0], [5.0]]] + ) + self.discrete_arr_support_non_vec = [["a"], ["b"], ["c"]] + self.discrete_arr_support = [[["a"], ["d"]], [["b"], ["e"]], [["c"], ["f"]]] + + def test_support_non_vectorized(self): + s = dist.OneHotCategorical(self.d_ps[0].squeeze(0)).enumerate_support() + assert_equal(s.data, self.support_one_hot_non_vec) + + def test_support(self): + s = dist.OneHotCategorical(self.d_ps).enumerate_support() + assert_equal(s.data, self.support_one_hot) + + +def wrap_nested(x, dim): + if dim == 0: + return x + return wrap_nested([x], dim - 1) + + +def assert_correct_dimensions(sample, probs): + ps_shape = list(probs.data.size()) + sample_shape = list(sample.shape) + assert_equal(sample_shape, ps_shape) + + +@pytest.fixture(params=[1, 2, 3], ids=lambda x: "dim=" + str(x)) +def dim(request): + return request.param + + +@pytest.fixture(params=[[0.3, 0.5, 0.2]], ids=None) +def probs(request): + return request.param + + +def modify_params_using_dims(probs, dim): + return torch.tensor(wrap_nested(probs, dim - 1)) + + +def test_support_dims(dim, probs): + probs = modify_params_using_dims(probs, dim) + d = dist.OneHotCategorical(probs) + support = d.enumerate_support() + for s in support: + assert_correct_dimensions(s, probs) + n = len(support) + assert support.shape == (n,) + d.batch_shape + d.event_shape + support_expanded = d.enumerate_support(expand=True) + assert support_expanded.shape == (n,) + d.batch_shape + d.event_shape + support_unexpanded = d.enumerate_support(expand=False) + assert support_unexpanded.shape == (n,) + (1,) * len(d.batch_shape) + d.event_shape + + +def test_sample_dims(dim, probs): + probs = modify_params_using_dims(probs, dim) + sample = dist.OneHotCategorical(probs).sample() + assert_correct_dimensions(sample, probs) + + +def test_batch_log_dims(dim, probs): + batch_pdf_shape = (3,) + (1,) * (dim - 1) + expected_log_prob_sum = np.array(wrap_nested(list(np.log(probs)), dim - 1)).reshape( + *batch_pdf_shape + ) + probs = modify_params_using_dims(probs, dim) + support = dist.OneHotCategorical(probs).enumerate_support() + log_prob = dist.OneHotCategorical(probs).log_prob(support) + assert_equal(log_prob.detach().cpu().numpy(), expected_log_prob_sum) diff --git a/pyro/source/tests/distributions/test_one_one_matching.py b/pyro/source/tests/distributions/test_one_one_matching.py new file mode 100644 index 0000000000000000000000000000000000000000..58f0d9d2f433da5188b93a8bb13c095a9b2a590a --- /dev/null +++ b/pyro/source/tests/distributions/test_one_one_matching.py @@ -0,0 +1,156 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import logging +import math + +import pytest +import torch + +import pyro.distributions as dist +from tests.common import assert_close, assert_equal, xfail_if_not_implemented + +BP_ITERS = 50 + + +def _hash(value): + return tuple(value.tolist()) + + +@pytest.mark.parametrize("dtype", [torch.float, torch.double], ids=str) +@pytest.mark.parametrize("num_nodes", [1, 2, 3, 4, 5, 6]) +def test_enumerate(num_nodes, dtype): + logits = torch.randn(num_nodes, num_nodes, dtype=dtype) + d = dist.OneOneMatching(logits) + values = d.enumerate_support() + logging.info("destins = {}, suport size = {}".format(num_nodes, len(values))) + assert d.support.check(values), "invalid" + assert len(set(map(_hash, values))) == len(values), "not unique" + + +@pytest.mark.parametrize("dtype", [torch.float, torch.double], ids=str) +@pytest.mark.parametrize("sample_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("num_nodes", [1, 2, 3, 4, 5, 6]) +@pytest.mark.parametrize("bp_iters", [None, BP_ITERS], ids=["exact", "bp"]) +def test_sample_shape_smoke(num_nodes, sample_shape, dtype, bp_iters): + logits = torch.randn(num_nodes, num_nodes, dtype=dtype) + d = dist.OneOneMatching(logits, bp_iters=bp_iters) + with xfail_if_not_implemented(): + values = d.sample(sample_shape) + assert values.shape == sample_shape + (num_nodes,) + assert d.support.check(values).all() + + +@pytest.mark.parametrize("dtype", [torch.float, torch.double], ids=str) +@pytest.mark.parametrize("num_nodes", [1, 2, 3, 4, 5, 6, 7, 8]) +@pytest.mark.parametrize("bp_iters", [None, BP_ITERS], ids=["exact", "bp"]) +def test_log_prob_full(num_nodes, dtype, bp_iters): + logits = torch.randn(num_nodes, num_nodes, dtype=dtype) * 10 + d = dist.OneOneMatching(logits, bp_iters=bp_iters) + values = d.enumerate_support() + log_total = d.log_prob(values).logsumexp(0).item() + logging.info( + f"log_total = {log_total:0.3g}, " + f"log_Z = {d.log_partition_function:0.3g}" + ) + assert_close(log_total, 0.0, atol=2.0) + + +@pytest.mark.parametrize("dtype", [torch.float, torch.double], ids=str) +@pytest.mark.parametrize("bp_iters", [None, BP_ITERS], ids=["exact", "bp"]) +def test_log_prob_hard(dtype, bp_iters): + logits = [[0.0, 0.0], [0.0, -math.inf]] + logits = torch.tensor(logits, dtype=dtype) + d = dist.OneOneMatching(logits, bp_iters=bp_iters) + values = d.enumerate_support() + log_total = d.log_prob(values).logsumexp(0).item() + logging.info( + f"log_total = {log_total:0.3g}, " + f"log_Z = {d.log_partition_function:0.3g}" + ) + assert_close(log_total, 0.0, atol=0.5) + + +def assert_grads_ok(logits, bp_iters=None): + def fn(logits): + d = dist.OneOneMatching(logits, bp_iters=bp_iters) + return d.log_partition_function + + torch.autograd.gradcheck(fn, logits, atol=1e-3, rtol=1e-3) + + +def assert_grads_agree(logits): + d1 = dist.OneOneMatching(logits) + d2 = dist.OneOneMatching(logits, bp_iters=BP_ITERS) + expected = torch.autograd.grad(d1.log_partition_function, [logits])[0] + actual = torch.autograd.grad(d2.log_partition_function, [logits])[0] + assert torch.allclose( + actual, expected, atol=0.2, rtol=1e-3 + ), f"Expected:\n{expected.numpy()}\nActual:\n{actual.numpy()}" + + +@pytest.mark.parametrize("num_nodes", [2, 3, 4, 5]) +def test_grad_full(num_nodes): + logits = torch.randn(num_nodes, num_nodes) * 10 + logits.requires_grad_() + + assert_grads_ok(logits) + assert_grads_ok(logits, bp_iters=BP_ITERS) + assert_grads_agree(logits) + + +@pytest.mark.parametrize("num_nodes", [2, 3, 4, 5]) +def test_grad_hard(num_nodes): + i = torch.arange(num_nodes) + logits = torch.randn(num_nodes, num_nodes) * 10 + logits[i[:, None] < i] = -100 + logits.requires_grad_() + + assert_grads_ok(logits) + assert_grads_ok(logits, bp_iters=BP_ITERS) + assert_grads_agree(logits) + + +@pytest.mark.parametrize("dtype", [torch.float, torch.double], ids=str) +@pytest.mark.parametrize("num_nodes", [1, 2, 3, 4, 5, 6, 7, 8]) +def test_mode(num_nodes, dtype): + logits = torch.randn(num_nodes, num_nodes, dtype=dtype) * 10 + d = dist.OneOneMatching(logits) + values = d.enumerate_support() + i = d.log_prob(values).max(0).indices.item() + expected = values[i] + actual = d.mode() + assert_equal(actual, expected) + assert (actual == expected).all() + + +@pytest.mark.parametrize("dtype", [torch.float, torch.double], ids=str) +@pytest.mark.parametrize("num_nodes", [3, 5, 8, 13, 100, 1000]) +def test_mode_smoke(num_nodes, dtype): + logits = torch.randn(num_nodes, num_nodes, dtype=dtype) * 10 + d = dist.OneOneMatching(logits) + value = d.mode() + assert d.support.check(value) + + +@pytest.mark.parametrize("dtype", [torch.float, torch.double], ids=str) +@pytest.mark.parametrize("num_nodes", [2, 3, 4, 5, 6]) +@pytest.mark.parametrize("bp_iters", [None, BP_ITERS], ids=["exact", "bp"]) +def test_sample(num_nodes, dtype, bp_iters): + logits = torch.randn(num_nodes, num_nodes, dtype=dtype) * 10 + d = dist.OneOneMatching(logits, bp_iters=bp_iters) + + # Compute an empirical mean. + num_samples = 1000 + s = torch.arange(num_nodes) + actual = torch.zeros_like(logits) + with xfail_if_not_implemented(): + for v in d.sample([num_samples]): + actual[s, v] += 1 / num_samples + + # Compute truth via enumeration. + values = d.enumerate_support() + probs = d.log_prob(values).exp() + probs /= probs.sum() + expected = torch.zeros(num_nodes, num_nodes) + for v, p in zip(values, probs): + expected[s, v] += p + assert_close(actual, expected, atol=0.1) diff --git a/pyro/source/tests/distributions/test_one_two_matching.py b/pyro/source/tests/distributions/test_one_two_matching.py new file mode 100644 index 0000000000000000000000000000000000000000..6c1874ce314dfd76a5fa469fe6381872f46b7741 --- /dev/null +++ b/pyro/source/tests/distributions/test_one_two_matching.py @@ -0,0 +1,268 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import logging +import math + +import pytest +import torch + +import pyro.distributions as dist +from tests.common import assert_close, assert_equal, xfail_if_not_implemented + +BP_ITERS = 50 + + +def _hash(value): + return tuple(value.tolist()) + + +def random_phylo_logits(num_leaves, dtype): + # Construct a random phylogenetic problem. + leaf_times = torch.randn(num_leaves, dtype=dtype) + coal_times = dist.CoalescentTimes(leaf_times).sample() + times = torch.cat([leaf_times, coal_times]).requires_grad_() + assert times.dtype == dtype + + # Convert to a one-two-matching problem. + ids = torch.arange(len(times)) + root = times.min(0).indices.item() + sources = torch.cat([ids[:root], ids[root + 1 :]]) + destins = ids[num_leaves:] + dt = times[sources][:, None] - times[destins] + dt = dt * 10 / dt.detach().std() + logits = torch.where(dt > 0, -dt, dt.new_tensor(-math.inf)) + assert logits.dtype == dtype + logits.data += torch.empty_like(logits).uniform_() # add jitter + + return logits, times + + +@pytest.mark.parametrize("dtype", [torch.float, torch.double], ids=str) +@pytest.mark.parametrize("num_destins", [1, 2, 3, 4, 5]) +def test_enumerate(num_destins, dtype): + num_sources = 2 * num_destins + logits = torch.randn(num_sources, num_destins, dtype=dtype) + d = dist.OneTwoMatching(logits) + values = d.enumerate_support() + logging.info("destins = {}, suport size = {}".format(num_destins, len(values))) + assert d.support.check(values), "invalid" + assert len(set(map(_hash, values))) == len(values), "not unique" + + +@pytest.mark.parametrize("dtype", [torch.float, torch.double], ids=str) +@pytest.mark.parametrize("sample_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("num_destins", [1, 2, 3, 4, 5]) +@pytest.mark.parametrize("bp_iters", [None, BP_ITERS], ids=["exact", "bp"]) +def test_sample_shape_smoke(num_destins, sample_shape, dtype, bp_iters): + num_sources = 2 * num_destins + logits = torch.randn(num_sources, num_destins, dtype=dtype) + d = dist.OneTwoMatching(logits, bp_iters=bp_iters) + with xfail_if_not_implemented(): + values = d.sample(sample_shape) + assert values.shape == sample_shape + (num_sources,) + assert d.support.check(values).all() + + +@pytest.mark.parametrize("dtype", [torch.float, torch.double], ids=str) +@pytest.mark.parametrize("num_destins", [1, 2, 3, 4, 5]) +@pytest.mark.parametrize("bp_iters", [None, BP_ITERS], ids=["exact", "bp"]) +def test_log_prob_full(num_destins, dtype, bp_iters): + num_sources = 2 * num_destins + logits = torch.randn(num_sources, num_destins, dtype=dtype) * 10 + d = dist.OneTwoMatching(logits, bp_iters=bp_iters) + values = d.enumerate_support() + log_total = d.log_prob(values).logsumexp(0).item() + logging.info( + f"log_total = {log_total:0.3g}, " + f"log_Z = {d.log_partition_function:0.3g}" + ) + assert_close(log_total, 0.0, atol=1.0) + + +@pytest.mark.parametrize("dtype", [torch.float, torch.double], ids=str) +@pytest.mark.parametrize("bp_iters", [None, BP_ITERS], ids=["exact", "bp"]) +def test_log_prob_hard(dtype, bp_iters): + logits = [[0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, -math.inf]] + logits = torch.tensor(logits, dtype=dtype) + d = dist.OneTwoMatching(logits, bp_iters=bp_iters) + values = d.enumerate_support() + log_total = d.log_prob(values).logsumexp(0).item() + logging.info( + f"log_total = {log_total:0.3g}, " + f"log_Z = {d.log_partition_function:0.3g}" + ) + assert_close(log_total, 0.0, atol=0.5) + + +@pytest.mark.parametrize("dtype", [torch.float, torch.double], ids=str) +@pytest.mark.parametrize("num_leaves", [2, 3, 4, 5, 6]) +@pytest.mark.parametrize("bp_iters", [None, BP_ITERS], ids=["exact", "bp"]) +def test_log_prob_phylo(num_leaves, dtype, bp_iters): + logits, times = random_phylo_logits(num_leaves, dtype) + d = dist.OneTwoMatching(logits, bp_iters=bp_iters) + values = d.enumerate_support() + log_total = d.log_prob(values).logsumexp(0).item() + logging.info( + f"log_total = {log_total:0.3g}, " + f"log_Z = {d.log_partition_function:0.3g}" + ) + assert_close(log_total, 0.0, atol=1.0) + + +@pytest.mark.parametrize("dtype", [torch.float, torch.double], ids=str) +@pytest.mark.parametrize("num_leaves", [3, 5, 8, 13, 100, 1000]) +def test_log_prob_phylo_smoke(num_leaves, dtype): + logits, times = random_phylo_logits(num_leaves, dtype) + d = dist.OneTwoMatching(logits, bp_iters=10) + logz = d.log_partition_function + assert logz.dtype == dtype + assert not torch.isnan(logz) + dt = torch.autograd.grad(logz, [times])[0] + assert not torch.isnan(dt).any() + + +def assert_grads_ok(logits, bp_iters=None): + def fn(logits): + d = dist.OneTwoMatching(logits, bp_iters=bp_iters) + return d.log_partition_function + + torch.autograd.gradcheck(fn, logits, atol=1e-3, rtol=1e-3) + + +def assert_grads_agree(logits): + d1 = dist.OneTwoMatching(logits) + d2 = dist.OneTwoMatching(logits, bp_iters=BP_ITERS) + expected = torch.autograd.grad(d1.log_partition_function, [logits])[0] + actual = torch.autograd.grad(d2.log_partition_function, [logits])[0] + assert torch.allclose( + actual, expected, atol=0.2, rtol=1e-3 + ), f"Expected:\n{expected.numpy()}\nActual:\n{actual.numpy()}" + + +@pytest.mark.parametrize("num_destins", [2, 3, 4, 5]) +def test_grad_full(num_destins): + num_sources = 2 * num_destins + logits = torch.randn(num_sources, num_destins) * 10 + logits.requires_grad_() + + assert_grads_ok(logits) + assert_grads_ok(logits, bp_iters=BP_ITERS) + assert_grads_agree(logits) + + +@pytest.mark.parametrize("num_destins", [2, 3, 4]) +def test_grad_hard(num_destins): + num_sources = 2 * num_destins + i = torch.arange(num_sources)[:, None] + j = torch.arange(num_destins) + logits = torch.randn(num_sources, num_destins) * 10 + logits[i < j] = -100 + logits.requires_grad_() + + assert_grads_ok(logits) + assert_grads_ok(logits, bp_iters=BP_ITERS) + assert_grads_agree(logits) + + +@pytest.mark.parametrize("num_leaves", [2, 3, 4, 5]) +def test_grad_phylo(num_leaves): + logits, times = random_phylo_logits(num_leaves, torch.double) + logits = logits.detach().requires_grad_() + + assert_grads_ok(logits) + assert_grads_ok(logits, bp_iters=BP_ITERS) + assert_grads_agree(logits) + + +@pytest.mark.parametrize("dtype", [torch.float, torch.double], ids=str) +@pytest.mark.parametrize("num_destins", [1, 2, 3, 4, 5]) +def test_mode_full(num_destins, dtype): + num_sources = 2 * num_destins + logits = torch.randn(num_sources, num_destins, dtype=dtype) * 10 + d = dist.OneTwoMatching(logits) + values = d.enumerate_support() + i = d.log_prob(values).max(0).indices.item() + expected = values[i] + actual = d.mode() + assert_equal(actual, expected) + + +@pytest.mark.parametrize("dtype", [torch.float, torch.double], ids=str) +@pytest.mark.parametrize("num_leaves", [2, 3, 4, 5, 6]) +def test_mode_phylo(num_leaves, dtype): + logits, times = random_phylo_logits(num_leaves, dtype) + d = dist.OneTwoMatching(logits) + values = d.enumerate_support() + i = d.log_prob(values).max(0).indices.item() + expected = values[i] + actual = d.mode() + assert_equal(actual, expected) + + +@pytest.mark.parametrize("dtype", [torch.float, torch.double], ids=str) +@pytest.mark.parametrize("num_destins", [3, 5, 8, 13, 100, 1000]) +def test_mode_full_smoke(num_destins, dtype): + num_sources = 2 * num_destins + logits = torch.randn(num_sources, num_destins, dtype=dtype) * 10 + d = dist.OneTwoMatching(logits) + value = d.mode() + assert d.support.check(value) + + +@pytest.mark.parametrize("dtype", [torch.float, torch.double], ids=str) +@pytest.mark.parametrize("num_leaves", [3, 5, 8, 13, 100, 1000]) +def test_mode_phylo_smoke(num_leaves, dtype): + logits, times = random_phylo_logits(num_leaves, dtype) + d = dist.OneTwoMatching(logits, bp_iters=10) + value = d.mode() + assert d.support.check(value) + + +@pytest.mark.parametrize("dtype", [torch.float, torch.double], ids=str) +@pytest.mark.parametrize("num_destins", [2, 3, 4]) +@pytest.mark.parametrize("bp_iters", [None, BP_ITERS], ids=["exact", "bp"]) +def test_sample_full(num_destins, dtype, bp_iters): + num_sources = 2 * num_destins + logits = torch.randn(num_sources, num_destins, dtype=dtype) * 10 + d = dist.OneTwoMatching(logits, bp_iters=bp_iters) + + # Compute an empirical mean. + num_samples = 1000 + s = torch.arange(num_sources) + actual = torch.zeros_like(logits) + with xfail_if_not_implemented(): + for v in d.sample([num_samples]): + actual[s, v] += 1 / num_samples + + # Compute truth via enumeration. + values = d.enumerate_support() + probs = d.log_prob(values).exp() + probs /= probs.sum() + expected = torch.zeros(num_sources, num_destins) + for v, p in zip(values, probs): + expected[s, v] += p + assert_close(actual, expected, atol=0.1) + + +@pytest.mark.parametrize("dtype", [torch.float, torch.double], ids=str) +@pytest.mark.parametrize("num_leaves", [3, 4, 5]) +@pytest.mark.parametrize("bp_iters", [None, BP_ITERS], ids=["exact", "bp"]) +def test_sample_phylo(num_leaves, dtype, bp_iters): + logits, times = random_phylo_logits(num_leaves, dtype) + num_sources, num_destins = logits.shape + d = dist.OneTwoMatching(logits, bp_iters=bp_iters) + + # Compute an empirical mean. + num_samples = 1000 + s = torch.arange(num_sources) + actual = torch.zeros_like(logits) + with xfail_if_not_implemented(): + for v in d.sample([num_samples]): + actual[s, v] += 1 / num_samples + + # Compute truth via enumeration. + values = d.enumerate_support() + probs = d.log_prob(values).exp() + probs /= probs.sum() + expected = torch.zeros(num_sources, num_destins) + for v, p in zip(values, probs): + expected[s, v] += p + assert_close(actual, expected, atol=0.1) diff --git a/pyro/source/tests/distributions/test_ordered_logistic.py b/pyro/source/tests/distributions/test_ordered_logistic.py new file mode 100644 index 0000000000000000000000000000000000000000..173c0004f913fa26941461bd1f74920f97f5e6e6 --- /dev/null +++ b/pyro/source/tests/distributions/test_ordered_logistic.py @@ -0,0 +1,129 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch +from torch.autograd.functional import jacobian + +from pyro.distributions import Normal, OrderedLogistic +from pyro.distributions.transforms import OrderedTransform + +# Tests for the OrderedLogistic distribution + + +@pytest.mark.parametrize("n_cutpoints", [1, 5, 100]) +@pytest.mark.parametrize("pred_shape", [(1,), (5,), (5, 5), (1, 2, 3)]) +def test_sample(n_cutpoints, pred_shape): + predictor = torch.randn(pred_shape) + cutpoints = torch.sort(torch.randn(n_cutpoints)).values + dist = OrderedLogistic(predictor, cutpoints, validate_args=True) + sample = dist.sample([100]) + assert sample.shape[1:] == pred_shape + assert sample.min().item() >= 0 + assert sample.max().item() <= n_cutpoints + + +def test_constraints(): + predictor = torch.randn(5) + for cp in ( + torch.tensor([1, 2, 3, 4, 0]), + torch.tensor([1, 2, 4, 3, 5]), + torch.tensor([1, 2, 3, 4, 4]), + ): + with pytest.raises(ValueError): + OrderedLogistic(predictor, cp) + + +def test_broadcast(): + predictor = torch.randn(2, 3, 4) + # test scenario where `cutpoints.ndim <= predictor.ndim + 1` + for cp in ( + torch.arange(5), + torch.arange(5).view(1, -1), + torch.stack(4 * [torch.arange(5)]), + torch.sort(torch.randn(3, 4, 5), dim=-1).values, + torch.sort(torch.randn(predictor.shape + (100,)), dim=-1).values, + ): + dist = OrderedLogistic(predictor, cp, validate_args=True) + assert dist.batch_shape == predictor.shape + assert dist.sample().shape == predictor.shape + + # test scenario where `cutpoints.ndim > predictor.ndim + 1` + # interpretation is broadcasting batches of cutpoints + cp = torch.sort(torch.randn(10, 2, 3, 4, 5), dim=-1).values + dist = OrderedLogistic(predictor, cp, validate_args=True) + assert dist.batch_shape == (10,) + predictor.shape + assert dist.sample().shape == (10,) + predictor.shape + + +def test_expand(): + predictor = torch.randn(4, 5) + cutpoints = torch.sort(torch.randn(5, 6)).values + dist = OrderedLogistic(predictor, cutpoints, validate_args=True) + new_batch_shape = (2, 3, 4, 5) + dist = dist.expand(new_batch_shape) + assert dist.batch_shape == torch.Size(new_batch_shape) + assert dist.event_shape == torch.Size(()) + sample = dist.sample([100]) + assert torch.all(sample <= 6).item() + + +def test_autograd(): + predictor = torch.randn(5, requires_grad=True) + order = OrderedTransform() + pre_cutpoints = torch.randn(3, requires_grad=True) + cutpoints = order(pre_cutpoints) + data = torch.tensor([0, 1, 2, 3, 0], dtype=float) + + dist = OrderedLogistic(predictor, cutpoints, validate_args=True) + dist.log_prob(data).sum().backward() + + assert predictor.grad is not None + assert torch.all(predictor.grad != 0).item() + assert pre_cutpoints.grad is not None + assert torch.all(pre_cutpoints.grad != 0).item() + + +# Tests for the OrderedTransform + + +@pytest.mark.parametrize("batch_shape", [(), (1,), (5,), (5, 5), (1, 5), (5, 1)]) +@pytest.mark.parametrize("event_shape", [(1,), (5,), (100,)]) +def test_transform_bijection(batch_shape, event_shape): + tf = OrderedTransform() + assert tf.inv.inv is tf + shape = torch.Size(batch_shape + event_shape) + sample = Normal(0, 1).expand(shape).sample() + tf_sample = tf(sample) + inv_tf_sample = tf.inv(tf_sample) + assert torch.allclose(sample, inv_tf_sample) + + +def cjald(func, X): + """cjald = Computes Jacobian Along Last Dimension + Recursively splits tensor ``X`` along its leading dimensions until we are + left with a vector, computes the jacobian of this vector under the + transformation ``func``, then stitches all the results back together using + ``torch.stack``. + """ + assert X.ndim >= 1 + if X.ndim == 1: + return jacobian(func, X) + else: + return torch.stack([cjald(func, X[i]) for i in range(X.shape[0])], dim=0) + + +@pytest.mark.parametrize("batch_shape", [(), (1,), (5,), (5, 5), (1, 5), (5, 1)]) +@pytest.mark.parametrize("event_shape", [(1,), (5,), (100,)]) +def test_transform_log_abs_det(batch_shape, event_shape): + tf = OrderedTransform() + shape = torch.Size(batch_shape + event_shape) + x = torch.randn(shape, requires_grad=True) + y = tf(x) + log_det = tf.log_abs_det_jacobian(x, y) + assert log_det.shape == batch_shape + # The "log_abs_det_jacobian" above is more like a batch of log abs det + # jacobians, each computed along the last (event) dimension. I'll introduce + # the `cjald` function, defined above, to help compute this. + log_det_actual = cjald(tf, x).det().abs().log() + assert torch.allclose(log_det, log_det_actual) diff --git a/pyro/source/tests/distributions/test_pickle.py b/pyro/source/tests/distributions/test_pickle.py new file mode 100644 index 0000000000000000000000000000000000000000..c9bfd1a49773ce421611c7072c792220909ff6f3 --- /dev/null +++ b/pyro/source/tests/distributions/test_pickle.py @@ -0,0 +1,92 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import inspect +import io +import pickle + +import pytest +import torch + +import pyro.distributions as dist +from pyro.distributions.torch_distribution import TorchDistributionMixin +from tests.common import xfail_param + +# Collect distributions. +BLACKLIST = [ + dist.TorchDistribution, + dist.ExponentialFamily, + dist.OMTMultivariateNormal, +] +XFAIL = { + dist.Gumbel: xfail_param(dist.Gumbel, reason="cannot pickle weakref"), +} +DISTRIBUTIONS = [ + d + for d in dist.__dict__.values() + if isinstance(d, type) + if issubclass(d, TorchDistributionMixin) + if d not in BLACKLIST +] +DISTRIBUTIONS.sort(key=lambda d: d.__name__) +DISTRIBUTIONS = [XFAIL.get(d, d) for d in DISTRIBUTIONS] + +# Provide default args if Dist(1, 1, ..., 1) is known to fail. +ARGS = { + dist.AVFMultivariateNormal: [torch.zeros(3), torch.eye(3), torch.rand(2, 4, 3)], + dist.Bernoulli: [0.5], + dist.Binomial: [2, 0.5], + dist.Categorical: [torch.ones(2)], + dist.Delta: [torch.tensor(0.0)], + dist.Dirichlet: [torch.ones(2)], + dist.GaussianScaleMixture: [torch.ones(2), torch.ones(3), torch.ones(3)], + dist.Geometric: [0.5], + dist.Independent: [dist.Normal(torch.zeros(2), torch.ones(2)), 1], + dist.LowRankMultivariateNormal: [torch.zeros(2), torch.ones(2, 2), torch.ones(2)], + dist.MaskedMixture: [ + torch.tensor([1, 0]).bool(), + dist.Normal(0, 1), + dist.Normal(0, 2), + ], + dist.MixtureOfDiagNormals: [torch.ones(2, 3), torch.ones(2, 3), torch.ones(2)], + dist.MixtureOfDiagNormalsSharedCovariance: [ + torch.ones(2, 3), + torch.ones(3), + torch.ones(2), + ], + dist.Multinomial: [2, torch.ones(2)], + dist.MultivariateNormal: [torch.ones(2), torch.eye(2)], + dist.OneHotCategorical: [torch.ones(2)], + dist.RelaxedBernoulli: [1.0, 0.5], + dist.RelaxedBernoulliStraightThrough: [1.0, 0.5], + dist.RelaxedOneHotCategorical: [1.0, torch.ones(2)], + dist.RelaxedOneHotCategoricalStraightThrough: [1.0, torch.ones(2)], + dist.TransformedDistribution: [ + dist.Normal(0, 1), + torch.distributions.ExpTransform(), + ], + dist.Uniform: [0, 1], + dist.VonMises3D: [torch.tensor([1.0, 0.0, 0.0])], +} + + +@pytest.mark.parametrize("Dist", DISTRIBUTIONS) +def test_pickle(Dist): + if Dist in ARGS: + args = ARGS[Dist] + else: + # Optimistically try to initialize with Dist(1, 1, ..., 1). + spec = list(inspect.signature(Dist.__init__).parameters.values()) + nargs = sum(1 for p in spec if p.default is p.empty) - 1 + args = (1,) * nargs + try: + dist = Dist(*args) + except Exception: + pytest.skip(reason="cannot construct distribution") + + buffer = io.BytesIO() + # Note that pickling torch.Size() requires protocol >= 2 + torch.save(dist, buffer, pickle_protocol=pickle.HIGHEST_PROTOCOL) + buffer.seek(0) + deserialized = torch.load(buffer, weights_only=False) + assert isinstance(deserialized, Dist) diff --git a/pyro/source/tests/distributions/test_polya_gamma.py b/pyro/source/tests/distributions/test_polya_gamma.py new file mode 100644 index 0000000000000000000000000000000000000000..7a19b7615388d03a7aebb29968b247b82a138e98 --- /dev/null +++ b/pyro/source/tests/distributions/test_polya_gamma.py @@ -0,0 +1,27 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +from pyro.distributions import TruncatedPolyaGamma +from tests.common import assert_close + + +@pytest.mark.parametrize("batch_shape", [(), (3,), (2, 1)]) +def test_polya_gamma(batch_shape, num_points=20000): + d = TruncatedPolyaGamma(prototype=torch.ones(1)).expand(batch_shape) + + # test density approximately normalized + x = torch.linspace(1.0e-6, d.truncation_point, num_points).expand( + batch_shape + (num_points,) + ) + prob = (d.truncation_point / num_points) * torch.logsumexp( + d.log_prob(x), dim=-1 + ).exp() + assert_close(prob, torch.tensor(1.0).expand(batch_shape), rtol=1.0e-4) + + # test mean of approximate sampler + z = d.sample(sample_shape=(3000,)) + mean = z.mean(-1) + assert_close(mean, torch.tensor(0.25).expand(batch_shape), rtol=0.07) diff --git a/pyro/source/tests/distributions/test_projected_normal.py b/pyro/source/tests/distributions/test_projected_normal.py new file mode 100644 index 0000000000000000000000000000000000000000..7827e7ce58cc0ce7420fac481ed16c38b3733fed --- /dev/null +++ b/pyro/source/tests/distributions/test_projected_normal.py @@ -0,0 +1,24 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +import pyro.distributions as dist +from tests.common import default_dtype + + +@pytest.mark.parametrize("strength", [0, 1, 10, 100, 1000]) +@pytest.mark.parametrize("dim", [2, 3, 4]) +@pytest.mark.parametrize("dtype", [torch.float, torch.double], ids=str) +def test_log_prob(dtype, dim, strength): + with default_dtype(dtype): + concentration = torch.full((dim,), float(strength), requires_grad=True) + value = dist.ProjectedNormal(torch.zeros_like(concentration)).sample([10000]) + d = dist.ProjectedNormal(concentration) + + logp = d.log_prob(value) + assert logp.max().lt(1 + dim * strength).all() + + logp.sum().backward() + assert not torch.isnan(concentration.grad).any() diff --git a/pyro/source/tests/distributions/test_rejector.py b/pyro/source/tests/distributions/test_rejector.py new file mode 100644 index 0000000000000000000000000000000000000000..f92e63915939234dca91460b19287992f0995892 --- /dev/null +++ b/pyro/source/tests/distributions/test_rejector.py @@ -0,0 +1,177 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch +from torch.autograd import grad + +from pyro.distributions import Exponential, Gamma +from pyro.distributions.testing.rejection_exponential import RejectionExponential +from pyro.distributions.testing.rejection_gamma import ( + RejectionGamma, + RejectionStandardGamma, + ShapeAugmentedBeta, + ShapeAugmentedGamma, +) +from tests.common import assert_equal + +SIZES = list(map(torch.Size, [[], [1], [2], [3], [1, 1], [1, 2], [2, 3, 4]])) + + +@pytest.mark.parametrize("sample_shape", SIZES) +@pytest.mark.parametrize("batch_shape", filter(bool, SIZES)) +def test_rejection_standard_gamma_sample_shape(sample_shape, batch_shape): + alphas = torch.ones(batch_shape) + dist = RejectionStandardGamma(alphas) + x = dist.rsample(sample_shape) + assert x.shape == sample_shape + batch_shape + + +@pytest.mark.parametrize("sample_shape", SIZES) +@pytest.mark.parametrize("batch_shape", filter(bool, SIZES)) +def test_rejection_exponential_sample_shape(sample_shape, batch_shape): + rates = torch.ones(batch_shape) + factors = torch.ones(batch_shape) * 0.5 + dist = RejectionExponential(rates, factors) + x = dist.rsample(sample_shape) + assert x.shape == sample_shape + batch_shape + + +def compute_elbo_grad(model, guide, variables): + x = guide.rsample() + model_log_prob = model.log_prob(x) + guide_log_prob, score_function, entropy_term = guide.score_parts(x) + log_r = model_log_prob - guide_log_prob + surrogate_elbo = model_log_prob + log_r.detach() * score_function - entropy_term + return grad(surrogate_elbo.sum(), variables, create_graph=True) + + +@pytest.mark.parametrize("rate", [0.5, 1.0, 2.0]) +@pytest.mark.parametrize("factor", [0.25, 0.5, 1.0]) +def test_rejector(rate, factor): + num_samples = 200000 + rates = torch.tensor(rate).expand(num_samples, 1) + factors = torch.tensor(factor).expand(num_samples, 1) + + dist1 = Exponential(rates) + dist2 = RejectionExponential(rates, factors) # implemented using Rejector + x1 = dist1.rsample() + x2 = dist2.rsample() + assert_equal(x1.mean(), x2.mean(), prec=0.03, msg="bug in .rsample()") + assert_equal(x1.std(), x2.std(), prec=0.03, msg="bug in .rsample()") + assert_equal(dist1.log_prob(x1), dist2.log_prob(x1), msg="bug in .log_prob()") + + +@pytest.mark.parametrize("rate", [0.5, 1.0, 2.0]) +@pytest.mark.parametrize("factor", [0.25, 0.5, 1.0]) +def test_exponential_elbo(rate, factor): + num_samples = 100000 + rates = torch.full((num_samples, 1), rate).requires_grad_() + factors = torch.full((num_samples, 1), factor).requires_grad_() + model = Exponential(torch.ones(num_samples, 1)) + guide1 = Exponential(rates) + guide2 = RejectionExponential(rates, factors) # implemented using Rejector + + grads = [] + for guide in [guide1, guide2]: + grads.append(compute_elbo_grad(model, guide, [rates])[0]) + expected, actual = grads + assert_equal(actual.mean(), expected.mean(), prec=0.05, msg="bad grad for rate") + + actual = compute_elbo_grad(model, guide2, [factors])[0] + assert_equal(actual.mean().item(), 0.0, prec=0.05, msg="bad grad for factor") + + +@pytest.mark.parametrize("alpha", [1.0, 2.0, 5.0]) +def test_standard_gamma_elbo(alpha): + num_samples = 100000 + alphas = torch.full((num_samples, 1), alpha).requires_grad_() + betas = torch.ones(num_samples, 1) + + model = Gamma(torch.ones(num_samples, 1), betas) + guide1 = Gamma(alphas, betas) + guide2 = RejectionStandardGamma(alphas) # implemented using Rejector + + grads = [] + for guide in [guide1, guide2]: + grads.append(compute_elbo_grad(model, guide, [alphas])[0].data) + expected, actual = grads + assert_equal(actual.mean(), expected.mean(), prec=0.01, msg="bad grad for alpha") + + +@pytest.mark.parametrize("alpha", [1.0, 2.0, 5.0]) +@pytest.mark.parametrize("beta", [0.2, 0.5, 1.0, 2.0, 5.0]) +def test_gamma_elbo(alpha, beta): + num_samples = 100000 + alphas = torch.full((num_samples, 1), alpha).requires_grad_() + betas = torch.full((num_samples, 1), beta).requires_grad_() + + model = Gamma(torch.ones(num_samples, 1), torch.ones(num_samples, 1)) + guide1 = Gamma(alphas, betas) + guide2 = RejectionGamma(alphas, betas) # implemented using Rejector + + grads = [] + for guide in [guide1, guide2]: + grads.append(compute_elbo_grad(model, guide, [alphas, betas])) + expected, actual = grads + expected = [g.mean() for g in expected] + actual = [g.mean() for g in actual] + scale = [(1 + abs(g)) for g in expected] + assert_equal( + actual[0] / scale[0], + expected[0] / scale[0], + prec=0.01, + msg="bad grad for alpha", + ) + assert_equal( + actual[1] / scale[1], expected[1] / scale[1], prec=0.01, msg="bad grad for beta" + ) + + +@pytest.mark.parametrize("alpha", [0.2, 0.5, 1.0, 2.0, 5.0]) +@pytest.mark.parametrize("beta", [0.2, 0.5, 1.0, 2.0, 5.0]) +def test_shape_augmented_gamma_elbo(alpha, beta): + num_samples = 100000 + alphas = torch.full((num_samples, 1), alpha).requires_grad_() + betas = torch.full((num_samples, 1), beta).requires_grad_() + + model = Gamma(torch.ones(num_samples, 1), torch.ones(num_samples, 1)) + guide1 = Gamma(alphas, betas) + guide2 = ShapeAugmentedGamma(alphas, betas) # implemented using Rejector + + grads = [] + for guide in [guide1, guide2]: + grads.append(compute_elbo_grad(model, guide, [alphas, betas])) + expected, actual = grads + expected = [g.mean() for g in expected] + actual = [g.mean() for g in actual] + scale = [(1 + abs(g)) for g in expected] + assert_equal( + actual[0] / scale[0], + expected[0] / scale[0], + prec=0.05, + msg="bad grad for alpha", + ) + assert_equal( + actual[1] / scale[1], expected[1] / scale[1], prec=0.05, msg="bad grad for beta" + ) + + +@pytest.mark.parametrize("alpha", [0.5, 1.0, 4.0]) +@pytest.mark.parametrize("beta", [0.5, 1.0, 4.0]) +def test_shape_augmented_beta(alpha, beta): + num_samples = 10000 + alphas = torch.full((num_samples, 1), alpha).requires_grad_() + betas = torch.full((num_samples, 1), beta).requires_grad_() + dist = ShapeAugmentedBeta(alphas, betas) # implemented using Rejector + z = dist.rsample() + cost = z.sum() + (cost + cost.detach() * dist.score_parts(z)[1]).backward() + mean_alpha_grad = alphas.grad.mean().item() + mean_beta_grad = betas.grad.mean().item() + expected_alpha_grad = beta / (alpha + beta) ** 2 + expected_beta_grad = -alpha / (alpha + beta) ** 2 + assert_equal( + mean_alpha_grad, expected_alpha_grad, prec=0.02, msg="bad grad for alpha" + ) + assert_equal(mean_beta_grad, expected_beta_grad, prec=0.02, msg="bad grad for beta") diff --git a/pyro/source/tests/distributions/test_relaxed_straight_through.py b/pyro/source/tests/distributions/test_relaxed_straight_through.py new file mode 100644 index 0000000000000000000000000000000000000000..ab1ae486e2edd6bc03884d43503a913407e2b97b --- /dev/null +++ b/pyro/source/tests/distributions/test_relaxed_straight_through.py @@ -0,0 +1,127 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch +from torch.autograd import grad +from torch.distributions import constraints + +import pyro +import pyro.optim as optim +from pyro.distributions import ( + OneHotCategorical, + RelaxedBernoulli, + RelaxedBernoulliStraightThrough, + RelaxedOneHotCategorical, + RelaxedOneHotCategoricalStraightThrough, +) +from pyro.infer import SVI, Trace_ELBO +from tests.common import assert_equal + +ONEHOT_PROBS = [ + [0.25, 0.75], + [0.25, 0.5, 0.25], + [[0.25, 0.75], [0.75, 0.25]], + [[[0.25, 0.75]], [[0.75, 0.25]]], + [0.1] * 10, +] + +BERN_PROBS = [[0.25, 0.75], [[0.25, 0.75], [0.75, 0.25]]] + + +@pytest.mark.parametrize("probs", ONEHOT_PROBS) +def test_onehot_shapes(probs): + temperature = torch.tensor(0.5) + probs = torch.tensor(probs, requires_grad=True) + d = RelaxedOneHotCategoricalStraightThrough(temperature, probs=probs) + sample = d.rsample() + log_prob = d.log_prob(sample) + grad_probs = grad(log_prob.sum(), [probs])[0] + assert grad_probs.shape == probs.shape + + +@pytest.mark.parametrize("temp", [0.3, 0.5, 1.0]) +def test_onehot_entropy_grad(temp): + num_samples = 2000000 + q = torch.tensor([0.1, 0.2, 0.3, 0.4], requires_grad=True) + temp = torch.tensor(temp) + + dist_q = RelaxedOneHotCategorical(temperature=temp, probs=q) + z = dist_q.rsample(sample_shape=(num_samples,)) + expected = grad(dist_q.log_prob(z).sum(), [q])[0] / num_samples + + dist_q = RelaxedOneHotCategoricalStraightThrough(temperature=temp, probs=q) + z = dist_q.rsample(sample_shape=(num_samples,)) + actual = grad(dist_q.log_prob(z).sum(), [q])[0] / num_samples + + assert_equal( + expected, + actual, + prec=0.08, + msg="bad grad for RelaxedOneHotCategoricalStraightThrough (expected {}, got {})".format( + expected, actual + ), + ) + + +def test_onehot_svi_usage(): + def model(): + p = torch.tensor([0.25] * 4) + pyro.sample("z", OneHotCategorical(probs=p)) + + def guide(): + q = pyro.param( + "q", torch.tensor([0.1, 0.2, 0.3, 0.4]), constraint=constraints.simplex + ) + temp = torch.tensor(0.10) + pyro.sample( + "z", RelaxedOneHotCategoricalStraightThrough(temperature=temp, probs=q) + ) + + adam = optim.Adam({"lr": 0.001, "betas": (0.95, 0.999)}) + svi = SVI(model, guide, adam, loss=Trace_ELBO()) + + for k in range(6000): + svi.step() + + assert_equal( + pyro.param("q"), + torch.tensor([0.25] * 4), + prec=0.01, + msg="test svi usage of RelaxedOneHotCategoricalStraightThrough failed", + ) + + +@pytest.mark.parametrize("probs", BERN_PROBS) +def test_bernoulli_shapes(probs): + temperature = torch.tensor(0.5) + probs = torch.tensor(probs, requires_grad=True) + d = RelaxedBernoulliStraightThrough(temperature, probs=probs) + sample = d.rsample() + log_prob = d.log_prob(sample) + grad_probs = grad(log_prob.sum(), [probs])[0] + assert grad_probs.shape == probs.shape + + +@pytest.mark.parametrize("temp", [0.5, 1.0]) +def test_bernoulli_entropy_grad(temp): + num_samples = 1500000 + q = torch.tensor([0.1, 0.2, 0.3, 0.4], requires_grad=True) + temp = torch.tensor(temp) + + dist_q = RelaxedBernoulli(temperature=temp, probs=q) + z = dist_q.rsample(sample_shape=(num_samples,)) + expected = grad(dist_q.log_prob(z).sum(), [q])[0] / num_samples + + dist_q = RelaxedBernoulliStraightThrough(temperature=temp, probs=q) + z = dist_q.rsample(sample_shape=(num_samples,)) + actual = grad(dist_q.log_prob(z).sum(), [q])[0] / num_samples + + assert_equal( + expected, + actual, + prec=0.04, + msg="bad grad for RelaxedBernoulliStraightThrough (expected {}, got {})".format( + expected, actual + ), + ) diff --git a/pyro/source/tests/distributions/test_reshape.py b/pyro/source/tests/distributions/test_reshape.py new file mode 100644 index 0000000000000000000000000000000000000000..d0dbdce6dc8e79fa31934e61acf18666adb9d3ee --- /dev/null +++ b/pyro/source/tests/distributions/test_reshape.py @@ -0,0 +1,155 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +from pyro.distributions.torch import Bernoulli +from tests.common import assert_equal + + +def test_sample_shape_order(): + shape12 = torch.Size((1, 2)) + shape34 = torch.Size((3, 4)) + d = Bernoulli(0.5) + + # .expand_by(...) should add dimensions on the left. + actual = d.expand_by(shape34).expand_by(shape12) + expected = d.expand_by(shape12 + shape34) + assert actual.event_shape == expected.event_shape + assert actual.batch_shape == expected.batch_shape + + +@pytest.mark.parametrize("batch_dim", [0, 1, 2]) +@pytest.mark.parametrize("event_dim", [0, 1, 2]) +def test_idempotent(batch_dim, event_dim): + shape = torch.Size((1, 2, 3, 4))[: batch_dim + event_dim] + batch_shape = shape[:batch_dim] + event_shape = shape[batch_dim:] + + # Construct a base dist of desired starting shape. + dist0 = Bernoulli(0.5).expand_by(shape).to_event(event_dim) + assert dist0.batch_shape == batch_shape + assert dist0.event_shape == event_shape + + # Check that an .expand_by() an empty shape is a no-op. + dist = dist0.expand_by([]) + assert dist.batch_shape == dist0.batch_shape + assert dist.event_shape == dist0.event_shape + + +@pytest.mark.parametrize( + "sample_dim,extra_event_dims", [(s, e) for s in range(4) for e in range(4 + s)] +) +def test_reshape(sample_dim, extra_event_dims): + batch_dim = 3 + batch_shape, event_shape = torch.Size((5, 4, 3)), torch.Size() + sample_shape = torch.Size((8, 7, 6))[3 - sample_dim :] + shape = sample_shape + batch_shape + event_shape + + # Construct a base dist of desired starting shape. + dist0 = Bernoulli(0.5 * torch.ones(batch_shape)) + assert dist0.event_shape == event_shape + assert dist0.batch_shape == batch_shape + + # Check that reshaping has the desired final shape. + dist = dist0.expand_by(sample_shape).to_event(extra_event_dims) + sample = dist.sample() + assert sample.shape == shape + assert dist.mean.shape == shape + assert dist.variance.shape == shape + assert ( + dist.log_prob(sample).shape + == shape[: sample_dim + batch_dim - extra_event_dims] + ) + + # Check enumerate support. + if dist.event_shape: + with pytest.raises(NotImplementedError): + dist.enumerate_support() + with pytest.raises(NotImplementedError): + dist.enumerate_support(expand=True) + with pytest.raises(NotImplementedError): + dist.enumerate_support(expand=False) + else: + assert dist.enumerate_support().shape == (2,) + shape + assert dist.enumerate_support(expand=True).shape == (2,) + shape + assert ( + dist.enumerate_support(expand=False).shape + == (2,) + (1,) * len(sample_shape + batch_shape) + event_shape + ) + + +@pytest.mark.parametrize( + "sample_dim,extra_event_dims", [(s, e) for s in range(3) for e in range(3 + s)] +) +def test_reshape_reshape(sample_dim, extra_event_dims): + batch_dim = 2 + batch_shape, event_shape = torch.Size((6, 5)), torch.Size((4, 3)) + sample_shape = torch.Size((8, 7))[2 - sample_dim :] + shape = sample_shape + batch_shape + event_shape + + # Construct a base dist of desired starting shape. + dist0 = Bernoulli(0.5 * torch.ones(event_shape)) + dist1 = dist0.expand_by(batch_shape).to_event(2) + assert dist1.event_shape == event_shape + assert dist1.batch_shape == batch_shape + + # Check that reshaping has the desired final shape. + dist = dist1.expand_by(sample_shape).to_event(extra_event_dims) + sample = dist.sample() + assert sample.shape == shape + assert dist.mean.shape == shape + assert dist.variance.shape == shape + assert ( + dist.log_prob(sample).shape + == shape[: sample_dim + batch_dim - extra_event_dims] + ) + + # Check enumerate support. + if dist.event_shape: + with pytest.raises(NotImplementedError): + dist.enumerate_support() + with pytest.raises(NotImplementedError): + dist.enumerate_support(expand=True) + with pytest.raises(NotImplementedError): + dist.enumerate_support(expand=False) + else: + assert dist.enumerate_support().shape == (2,) + shape + assert dist.enumerate_support(expand=True).shape == (2,) + shape + assert ( + dist.enumerate_support(expand=False).shape + == (2,) + (1,) * len(sample_shape + batch_shape) + event_shape + ) + + +@pytest.mark.parametrize("sample_dim", [0, 1, 2]) +@pytest.mark.parametrize("batch_dim", [0, 1, 2]) +@pytest.mark.parametrize("event_dim", [0, 1, 2]) +def test_extra_event_dim_overflow(sample_dim, batch_dim, event_dim): + shape = torch.Size(range(sample_dim + batch_dim + event_dim)) + sample_shape = shape[:sample_dim] + batch_shape = shape[sample_dim : sample_dim + batch_dim] + event_shape = shape[sample_dim + batch_dim :] + + # Construct a base dist of desired starting shape. + dist0 = Bernoulli(0.5).expand_by(batch_shape + event_shape).to_event(event_dim) + assert dist0.batch_shape == batch_shape + assert dist0.event_shape == event_shape + + # Check .to_event(...) for valid values. + for extra_event_dims in range(1 + sample_dim + batch_dim): + dist = dist0.expand_by(sample_shape).to_event(extra_event_dims) + assert dist.batch_shape == shape[: sample_dim + batch_dim - extra_event_dims] + assert dist.event_shape == shape[sample_dim + batch_dim - extra_event_dims :] + + # Check .to_event(...) for invalid values. + for extra_event_dims in range(1 + sample_dim + batch_dim, 20): + with pytest.raises(ValueError): + dist0.expand_by(sample_shape).to_event(extra_event_dims) + + +def test_independent_entropy(): + dist_univ = Bernoulli(0.5) + dist_multi = Bernoulli(torch.Tensor([0.5, 0.5])).to_event(1) + assert_equal(dist_multi.entropy(), 2 * dist_univ.entropy()) diff --git a/pyro/source/tests/distributions/test_shapes.py b/pyro/source/tests/distributions/test_shapes.py new file mode 100644 index 0000000000000000000000000000000000000000..08b60967f81da0ee06f2ad8d675533a7c0645f5c --- /dev/null +++ b/pyro/source/tests/distributions/test_shapes.py @@ -0,0 +1,95 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +import pyro.distributions as dist + + +def test_categorical_shape(): + probs = torch.ones(3, 2) / 2 + d = dist.Categorical(probs) + assert d.batch_shape == (3,) + assert d.event_shape == () + assert d.shape() == (3,) + assert d.sample().size() == d.shape() + + +def test_one_hot_categorical_shape(): + probs = torch.ones(3, 2) / 2 + d = dist.OneHotCategorical(probs) + assert d.batch_shape == (3,) + assert d.event_shape == (2,) + assert d.shape() == (3, 2) + assert d.sample().size() == d.shape() + + +def test_normal_shape(): + loc = torch.zeros(3, 2) + scale = torch.ones(3, 2) + d = dist.Normal(loc, scale) + assert d.batch_shape == (3, 2) + assert d.event_shape == () + assert d.shape() == (3, 2) + assert d.sample().size() == d.shape() + + +def test_dirichlet_shape(): + alpha = torch.ones(3, 2) / 2 + d = dist.Dirichlet(alpha) + assert d.batch_shape == (3,) + assert d.event_shape == (2,) + assert d.shape() == (3, 2) + assert d.sample().size() == d.shape() + + +def test_zip_shape(): + gate = torch.ones(3, 2) / 2 + rate = torch.ones(3, 2) / 2 + d = dist.ZeroInflatedPoisson(rate, gate=gate) + assert d.batch_shape == (3, 2) + assert d.event_shape == () + assert d.shape() == (3, 2) + assert d.sample().size() == d.shape() + + +def test_bernoulli_log_prob_shape(): + probs = torch.ones(3, 2) + x = torch.ones(3, 2) + d = dist.Bernoulli(probs) + assert d.log_prob(x).size() == (3, 2) + + +def test_categorical_log_prob_shape(): + probs = torch.ones(3, 2, 4) / 4 + x = torch.zeros(3, 2) + d = dist.Categorical(probs) + assert d.log_prob(x).size() == (3, 2) + + +def test_one_hot_categorical_log_prob_shape(): + probs = torch.ones(3, 2, 4) / 4 + x = torch.zeros(3, 2, 4) + x[:, :, 0] = 1 + d = dist.OneHotCategorical(probs) + assert d.log_prob(x).size() == (3, 2) + + +def test_normal_log_prob_shape(): + loc = torch.zeros(3, 2) + scale = torch.ones(3, 2) + x = torch.zeros(3, 2) + d = dist.Normal(loc, scale) + assert d.log_prob(x).size() == (3, 2) + + +def test_diag_normal_log_prob_shape(): + loc1 = torch.zeros(2, 3) + loc2 = torch.zeros(2, 4) + scale = torch.ones(2, 1) + d1 = dist.Normal(loc1, scale.expand_as(loc1)).to_event(1) + d2 = dist.Normal(loc2, scale.expand_as(loc2)).to_event(1) + x1 = d1.sample() + x2 = d2.sample() + assert d1.log_prob(x1).size() == (2,) + assert d2.log_prob(x2).size() == (2,) diff --git a/pyro/source/tests/distributions/test_sine_bivariate_von_mises.py b/pyro/source/tests/distributions/test_sine_bivariate_von_mises.py new file mode 100644 index 0000000000000000000000000000000000000000..93a7e90c30eb2fc2b75463a3f8e9f118456cfd2e --- /dev/null +++ b/pyro/source/tests/distributions/test_sine_bivariate_von_mises.py @@ -0,0 +1,152 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch +from scipy.special import binom +from torch import tensor +from torch.distributions import Beta, HalfNormal, VonMises + +import pyro +from pyro.distributions import Geometric, constraints +from pyro.distributions.sine_bivariate_von_mises import SineBivariateVonMises +from pyro.infer import SVI, Trace_ELBO +from tests.common import assert_equal + + +def _unnorm_log_prob(value, loc1, loc2, conc1, conc2, corr): + phi_val = value[..., 0] + psi_val = value[..., 1] + return ( + conc1 * torch.cos(phi_val - loc1) + + conc2 * torch.cos(psi_val - loc2) + + corr * torch.sin(phi_val - loc1) * torch.sin(psi_val - loc2) + ) + + +@pytest.mark.parametrize("n", [0, 1, 10, 20]) +def test_log_binomial(n): + comp = SineBivariateVonMises._lbinoms(tensor(n)) + act = tensor([binom(2 * i, i) for i in range(n)]).log() + assert_equal(act, comp) + + +@pytest.mark.parametrize("batch_dim", [tuple(), (1,), (10,), (2, 1), (2, 1, 2)]) +def test_bvm_unnorm_log_prob(batch_dim): + vm = VonMises(tensor(0.0), tensor(1.0)) + hn = HalfNormal(tensor(1.0)) + b = Beta(tensor(2.0), tensor(2.0)) + + while True: + phi_psi = vm.sample((*batch_dim, 2)) + locs = vm.sample((2, *batch_dim)) + conc = hn.sample((2, *batch_dim)) + corr = b.sample((*batch_dim,)) + if torch.all(torch.prod(conc, dim=0) > corr**2): + break + bmv = SineBivariateVonMises(locs[0], locs[1], conc[0], conc[1], corr) + assert_equal( + _unnorm_log_prob(phi_psi, locs[0], locs[1], conc[0], conc[1], corr), + bmv.log_prob(phi_psi) + bmv.norm_const, + ) + + +def test_bvm_multidim(): + vm = VonMises(tensor(0.0), tensor(1.0)) + hn = HalfNormal(tensor(1.0)) + b = Beta(tensor(2.0), tensor(2.0)) + g = Geometric(torch.tensor([0.4, 0.2, 0.5])) + for _ in range(25): + while True: + batch_dim = tuple(int(i) for i in g.sample() if i > 0) + sample_dim = tuple(int(i) for i in g.sample() if i > 0) + locs = vm.sample((2, *batch_dim)) + conc = hn.sample((2, *batch_dim)) + corr = b.sample((*batch_dim,)) + if torch.all(torch.prod(conc, dim=0) > corr**2): + break + + bmv = SineBivariateVonMises(locs[0], locs[1], conc[0], conc[1], corr) + assert_equal(bmv.batch_shape, torch.Size(batch_dim)) + assert_equal( + bmv.sample(sample_dim).shape, torch.Size((*sample_dim, *batch_dim, 2)) + ) + + +def test_mle_bvm(): + vm = VonMises(tensor(0.0), tensor(1.0)) + hn = HalfNormal(tensor(0.8)) + b = Beta(tensor(2.0), tensor(5.0)) + while True: + locs = vm.sample((2,)) + conc = hn.sample((2,)) + corr = b.sample() + if torch.prod(conc, dim=-1) >= corr**2: + break + + def mle_model(data): + phi_loc = pyro.param("phi_loc", tensor(0.0), constraints.real) + psi_loc = pyro.param("psi_loc", tensor(0.0), constraints.real) + phi_conc = pyro.param("phi_conc", tensor(1.0), constraints.positive) + psi_conc = pyro.param("psi_conc", tensor(1.0), constraints.positive) + corr = pyro.param("corr", tensor(0.5), constraints.real) + with pyro.plate("data", data.size(-2)): + pyro.sample( + "obs", + SineBivariateVonMises(phi_loc, psi_loc, phi_conc, psi_conc, corr), + obs=data, + ) + + def guide(data): + pass + + bmv = SineBivariateVonMises(locs[0], locs[1], conc[0], conc[1], corr) + data = bmv.sample((10_000,)) + + pyro.clear_param_store() + adam = pyro.optim.Adam({"lr": 0.01}) + svi = SVI(mle_model, guide, adam, loss=Trace_ELBO()) + + losses = [] + steps = 200 + for step in range(steps): + losses.append(svi.step(data)) + + expected = { + "phi_loc": locs[0], + "psi_loc": locs[1], + "phi_conc": conc[0], + "psi_conc": conc[1], + "corr": corr, + } + actuals = {k: v for k, v in pyro.get_param_store().items()} + + for k in expected.keys(): + if k in actuals: + actual = actuals[k] + else: + actual = ( + actuals["corr_weight"] * actuals["phi_conc"] * actuals["psi_conc"] + ) # k == 'corr' + + assert_equal(expected[k].squeeze(), actual.squeeze(), 9e-2) + + +@pytest.mark.parametrize("conc", [1.0, 10.0, 1000.0, 10_000.0, 10_001.0]) +def test_sine_bivariate_von_mises_norm(conc): + if conc > 10_000.0: + try: + dist = SineBivariateVonMises(0, 0, conc, conc, 0.0) + pytest.fail() + except AssertionError: + return + + dist = SineBivariateVonMises(0, 0, conc, conc, 0.0) + num_samples = 500 + x = torch.linspace(-torch.pi, torch.pi, num_samples) + y = torch.linspace(-torch.pi, torch.pi, num_samples) + mesh = torch.stack(torch.meshgrid(x, y, indexing="ij"), axis=-1) + integral_torus = ( + torch.exp(dist.log_prob(mesh)) * (2 * torch.pi) ** 2 / num_samples**2 + ).sum() + assert torch.allclose(integral_torus, torch.tensor(1.0), rtol=1e-2) diff --git a/pyro/source/tests/distributions/test_sine_skewed.py b/pyro/source/tests/distributions/test_sine_skewed.py new file mode 100644 index 0000000000000000000000000000000000000000..72755c209303bacf93c62777b82366db182e7b19 --- /dev/null +++ b/pyro/source/tests/distributions/test_sine_skewed.py @@ -0,0 +1,107 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from math import pi + +import pytest +import torch + +import pyro +from pyro.distributions import Normal, SineSkewed, Uniform, VonMises, constraints +from pyro.infer import SVI, Trace_ELBO +from pyro.optim import Adam +from tests.common import assert_equal + +BASE_DISTS = [(Uniform, [-pi, pi]), (VonMises, (0.0, 1.0))] + + +def _skewness(event_shape): + skewness = torch.zeros(event_shape.numel()) + done = False + while not done: + for i in range(event_shape.numel()): + max_ = 1.0 - skewness.abs().sum(-1) + if torch.any(max_ < 1e-15): + break + skewness[i] = Uniform(-max_, max_).sample() + done = not torch.any(max_ < 1e-15) + + if event_shape == tuple(): + skewness = skewness.reshape(event_shape) + else: + skewness = skewness.view(event_shape) + return skewness + + +@pytest.mark.parametrize( + "expand_shape", + [ + (1,), + (2,), + (4,), + (1, 1), + (1, 2), + (10, 10), + (1, 3, 1), + (10, 1, 5), + (1, 1, 1), + (3, 2, 3), + ], +) +@pytest.mark.parametrize("dist", BASE_DISTS) +def test_ss_multidim_log_prob(expand_shape, dist): + base_dist = dist[0]( + *(torch.tensor(param).expand(expand_shape) for param in dist[1]) + ).to_event(1) + + loc = base_dist.sample((10,)) + Normal(0.0, 1e-3).sample() + + base_prob = base_dist.log_prob(loc) + skewness = _skewness(base_dist.event_shape) + + ss = SineSkewed(base_dist, skewness) + assert_equal(base_prob.shape, ss.log_prob(loc).shape) + assert_equal(ss.sample().shape, torch.Size(expand_shape)) + + +@pytest.mark.parametrize("dist", BASE_DISTS) +@pytest.mark.parametrize("dim", [1, 2]) +def test_ss_mle(dim, dist): + base_dist = dist[0]( + *(torch.tensor(param).expand((dim,)) for param in dist[1]) + ).to_event(1) + + skewness_tar = _skewness(base_dist.event_shape) + data = SineSkewed(base_dist, skewness_tar).sample((1000,)) + + def model(data, batch_shape): + skews = [] + for i in range(dim): + skews.append( + pyro.param( + f"skew{i}", + 0.5 * torch.ones(batch_shape), + constraint=constraints.interval(-1, 1), + ) + ) + + skewness = torch.stack(skews, dim=-1) + with pyro.plate("data", data.size(-len(data.size()))): + pyro.sample("obs", SineSkewed(base_dist, skewness), obs=data) + + def guide(data, batch_shape): + pass + + pyro.clear_param_store() + adam = Adam({"lr": 0.1}) + svi = SVI(model, guide, adam, loss=Trace_ELBO()) + + losses = [] + steps = 80 + for step in range(steps): + losses.append(svi.step(data, base_dist.batch_shape)) + + act_skewness = torch.stack( + [v for k, v in pyro.get_param_store().items() if "skew" in k], dim=-1 + ) + assert_equal(act_skewness, skewness_tar, 1e-1) diff --git a/pyro/source/tests/distributions/test_spanning_tree.py b/pyro/source/tests/distributions/test_spanning_tree.py new file mode 100644 index 0000000000000000000000000000000000000000..9aeb31559a6feffa01ca1a71e1ba288b6cee4fe2 --- /dev/null +++ b/pyro/source/tests/distributions/test_spanning_tree.py @@ -0,0 +1,231 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging +import os +from collections import Counter + +import pytest +import torch + +import pyro +from pyro.distributions.spanning_tree import ( + NUM_SPANNING_TREES, + SpanningTree, + find_best_tree, + make_complete_graph, + sample_tree, +) +from tests.common import assert_equal, xfail_if_not_implemented + +pytestmark = pytest.mark.skipif( + "CUDA_TEST" in os.environ, reason="spanning_tree unsupported on CUDA." +) + + +@pytest.mark.filterwarnings("always") +@pytest.mark.parametrize( + "num_vertices,expected_grid", + [ + (2, [[0], [1]]), + (3, [[0, 0, 1], [1, 2, 2]]), + (4, [[0, 0, 1, 0, 1, 2], [1, 2, 2, 3, 3, 3]]), + ], +) +@pytest.mark.parametrize("backend", ["python", "cpp"]) +def test_make_complete_graph(num_vertices, expected_grid, backend): + V = num_vertices + K = V * (V - 1) // 2 + expected_grid = torch.tensor(expected_grid, dtype=torch.long).reshape(2, K) + + grid = make_complete_graph(V, backend=backend) + assert_equal(grid, expected_grid) + + +@pytest.mark.filterwarnings("always") +@pytest.mark.parametrize("num_edges", [1, 3, 10, 30, 100]) +@pytest.mark.parametrize("backend", ["python", "cpp"]) +def test_sample_tree_mcmc_smoke(num_edges, backend): + pyro.set_rng_seed(num_edges) + E = num_edges + V = 1 + E + K = V * (V - 1) // 2 + edge_logits = torch.rand(K) + edges = torch.tensor([(v, v + 1) for v in range(V - 1)], dtype=torch.long) + for _ in range(10 if backend == "cpp" or num_edges <= 30 else 1): + edges = sample_tree(edge_logits, edges, backend=backend) + + +@pytest.mark.filterwarnings("always") +@pytest.mark.parametrize("num_edges", [1, 3, 10, 30, 100]) +@pytest.mark.parametrize("backend", ["python", "cpp"]) +def test_sample_tree_approx_smoke(num_edges, backend): + pyro.set_rng_seed(num_edges) + E = num_edges + V = 1 + E + K = V * (V - 1) // 2 + edge_logits = torch.rand(K) + for _ in range(10 if backend == "cpp" or num_edges <= 30 else 1): + sample_tree(edge_logits, backend=backend) + + +@pytest.mark.filterwarnings("always") +@pytest.mark.parametrize("num_edges", [1, 3, 10, 30, 100]) +@pytest.mark.parametrize("backend", ["python", "cpp"]) +def test_find_best_tree_smoke(num_edges, backend): + pyro.set_rng_seed(num_edges) + E = num_edges + V = 1 + E + K = V * (V - 1) // 2 + for _ in range(10 if backend == "cpp" or num_edges <= 30 else 1): + edge_logits = torch.rand(K) + find_best_tree(edge_logits, backend=backend) + + +@pytest.mark.parametrize("num_edges", [1, 2, 3, 4, 5, 6]) +def test_enumerate_support(num_edges): + pyro.set_rng_seed(2**32 - num_edges) + E = num_edges + V = 1 + E + K = V * (V - 1) // 2 + edge_logits = torch.randn(K) + d = SpanningTree(edge_logits) + with xfail_if_not_implemented(): + support = d.enumerate_support() + assert support.dim() == 3 + assert support.shape[1:] == d.event_shape + assert support.size(0) == NUM_SPANNING_TREES[V] + + +@pytest.mark.parametrize("num_edges", [1, 2, 3, 4, 5, 6]) +def test_partition_function(num_edges): + pyro.set_rng_seed(2**32 - num_edges) + E = num_edges + V = 1 + E + K = V * (V - 1) // 2 + edge_logits = torch.randn(K) + d = SpanningTree(edge_logits) + with xfail_if_not_implemented(): + support = d.enumerate_support() + v1 = support[..., 0] + v2 = support[..., 1] + k = v1 + v2 * (v2 - 1) // 2 + expected = edge_logits[k].sum(-1).logsumexp(0) + actual = d.log_partition_function + assert (actual - expected).abs() < 1e-6, (actual, expected) + + +@pytest.mark.parametrize("num_edges", [1, 2, 3, 4, 5, 6]) +def test_log_prob(num_edges): + pyro.set_rng_seed(2**32 - num_edges) + E = num_edges + V = 1 + E + K = V * (V - 1) // 2 + edge_logits = torch.randn(K) + d = SpanningTree(edge_logits) + with xfail_if_not_implemented(): + support = d.enumerate_support() + log_probs = d.log_prob(support) + assert log_probs.shape == (len(support),) + log_total = log_probs.logsumexp(0).item() + assert abs(log_total) < 1e-6, log_total + + +@pytest.mark.parametrize("num_edges", [1, 2, 3, 4, 5, 6]) +def test_edge_mean_function(num_edges): + pyro.set_rng_seed(2**32 - num_edges) + E = num_edges + V = 1 + E + K = V * (V - 1) // 2 + edge_logits = torch.randn(K) + d = SpanningTree(edge_logits) + + with xfail_if_not_implemented(): + support = d.enumerate_support() + v1 = support[..., 0] + v2 = support[..., 1] + k = v1 + v2 * (v2 - 1) // 2 + probs = d.log_prob(support).exp()[:, None].expand_as(k) + expected = torch.zeros(K).scatter_add_(0, k.reshape(-1), probs.reshape(-1)) + + actual = d.edge_mean + assert actual.shape == (V, V) + v1, v2 = make_complete_graph(V) + assert (actual[v1, v2] - expected).abs().max() < 1e-5, (actual, expected) + + +@pytest.mark.parametrize("num_edges", [1, 2, 3, 4, 5, 6]) +@pytest.mark.parametrize("backend", ["python", "cpp"]) +def test_mode(num_edges, backend): + pyro.set_rng_seed(2**32 - num_edges) + E = num_edges + V = 1 + E + K = V * (V - 1) // 2 + edge_logits = torch.randn(K) + d = SpanningTree(edge_logits, sampler_options={"backend": backend}) + with xfail_if_not_implemented(): + support = d.enumerate_support() + v1 = support[..., 0] + v2 = support[..., 1] + k = v1 + v2 * (v2 - 1) // 2 + expected = support[edge_logits[k].sum(-1).argmax(0)] + actual = d.mode + assert (actual == expected).all() + + +@pytest.mark.filterwarnings("always") +@pytest.mark.parametrize("pattern", ["uniform", "random", "sparse"]) +@pytest.mark.parametrize("num_edges", [1, 2, 3, 4, 5]) +@pytest.mark.parametrize("backend", ["python", "cpp"]) +@pytest.mark.parametrize("method", ["mcmc", "approx"]) +def test_sample_tree_gof(method, backend, num_edges, pattern): + goftests = pytest.importorskip("goftests") + pyro.set_rng_seed(2**32 - num_edges) + E = num_edges + V = 1 + E + K = V * (V - 1) // 2 + + if pattern == "uniform": + edge_logits = torch.zeros(K) + num_samples = 10 * NUM_SPANNING_TREES[V] + elif pattern == "random": + edge_logits = torch.rand(K) + num_samples = 30 * NUM_SPANNING_TREES[V] + elif pattern == "sparse": + edge_logits = torch.rand(K) + for v2 in range(V): + for v1 in range(v2): + if v1 + 1 < v2: + edge_logits[v1 + v2 * (v2 - 1) // 2] = -float("inf") + num_samples = 10 * NUM_SPANNING_TREES[V] + + # Generate many samples. + counts = Counter() + tensors = {} + # Initialize using approximate sampler, to ensure feasibility. + edges = sample_tree(edge_logits, backend=backend) + for _ in range(num_samples): + if method == "approx": + # Reset the chain with an approximate sample, then perform 1 step of mcmc. + edges = sample_tree(edge_logits, backend=backend) + edges = sample_tree(edge_logits, edges, backend=backend) + key = tuple((v1.item(), v2.item()) for v1, v2 in edges) + counts[key] += 1 + tensors[key] = edges + if pattern != "sparse": + assert len(counts) == NUM_SPANNING_TREES[V] + + # Check accuracy using a Pearson's chi-squared test. + keys = [k for k, _ in counts.most_common(100)] + truncated = len(keys) < len(counts) + counts = torch.tensor([counts[k] for k in keys]) + tensors = torch.stack([tensors[k] for k in keys]) + probs = SpanningTree(edge_logits).log_prob(tensors).exp() + gof = goftests.multinomial_goodness_of_fit( + probs.numpy(), counts.numpy(), num_samples, plot=True, truncated=truncated + ) + logging.info("gof = {}".format(gof)) + if method == "approx": + assert gof >= 0.0001 + else: + assert gof >= 0.005 diff --git a/pyro/source/tests/distributions/test_stable.py b/pyro/source/tests/distributions/test_stable.py new file mode 100644 index 0000000000000000000000000000000000000000..d78c7684c377dc03ae202f98f8fb5dcd0b9ce21e --- /dev/null +++ b/pyro/source/tests/distributions/test_stable.py @@ -0,0 +1,151 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import warnings + +import pytest +import torch +from scipy.integrate.quadpack import IntegrationWarning +from scipy.stats import ks_2samp, kstest, levy_stable + +import pyro.distributions as dist +import pyro.distributions.stable +from tests.common import assert_close + + +@pytest.mark.parametrize("sample_shape", [(), (7,), (6, 5)]) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)]) +def test_shape(sample_shape, batch_shape): + stability = torch.empty(batch_shape).uniform_(0, 2).requires_grad_() + skew = torch.empty(batch_shape).uniform_(-1, 1).requires_grad_() + scale = torch.randn(batch_shape).exp().requires_grad_() + loc = torch.randn(batch_shape).requires_grad_() + + d = dist.Stable(stability, skew, scale, loc) + assert d.batch_shape == batch_shape + + x = d.rsample(sample_shape) + assert x.shape == sample_shape + batch_shape + + x.sum().backward() + + +@pytest.mark.parametrize("beta", [-1.0, -0.5, 0.0, 0.5, 1.0]) +@pytest.mark.parametrize("alpha", [0.1, 0.4, 0.8, 0.99, 1.0, 1.01, 1.3, 1.7, 2.0]) +def test_sample(alpha, beta): + num_samples = 100 + d = dist.Stable(alpha, beta, coords="S") + # Temporarily increase radius to test hole-patching logic. + # Scipy doesn't handle values of alpha very close to 1. + try: + old = pyro.distributions.stable.RADIUS + pyro.distributions.stable.RADIUS = 0.02 + samples = d.sample((num_samples,)) + finally: + pyro.distributions.stable.RADIUS = old + + def cdf(x): + with warnings.catch_warnings(record=True) as w: + warnings.simplefilter("always", category=IntegrationWarning) + result = levy_stable.cdf(x, alpha, beta) + # Scipy has only an experimental .cdf() function for alpha=1, beta!=0. + # It sometimes passes and sometimes xfails. + if w and alpha == 1 and beta != 0: + pytest.xfail(reason="scipy.stats.levy_stable.cdf is unstable") + return result + + assert kstest(samples, cdf).pvalue > 0.1 + + +@pytest.mark.parametrize("beta", [-1.0, -0.5, 0.0, 0.5, 1.0]) +@pytest.mark.parametrize( + "alpha", + [ + 0.1, + 0.4, + 0.8, + 0.99, + 0.999999, + 1.000001, # scipy sampler is buggy very close to 1 + 1.01, + 1.3, + 1.7, + 2.0, + ], +) +def test_sample_2(alpha, beta): + num_samples = 10000 + + d = dist.Stable(alpha, beta, coords="S") + # Temporarily increase radius to test hole-patching logic. + # Scipy doesn't handle values of alpha very close to 1. + try: + old = pyro.distributions.stable.RADIUS + pyro.distributions.stable.RADIUS = 0.02 + actual = d.sample([num_samples]) + finally: + pyro.distributions.stable.RADIUS = old + actual = d.sample([num_samples]) + + expected = levy_stable.rvs(alpha, beta, size=num_samples) + + assert ks_2samp(expected, actual).pvalue > 0.05 + + +@pytest.mark.parametrize("loc", [0, 1, -1, 2, 2]) +@pytest.mark.parametrize("scale", [0.5, 1, 2]) +def test_normal(loc, scale): + num_samples = 100000 + expected = dist.Normal(loc, scale).sample([num_samples]) + actual = dist.Stable(2, 0, scale * 0.5**0.5, loc).sample([num_samples]) + assert_close(actual.mean(), expected.mean(), atol=0.01) + assert_close(actual.std(), expected.std(), atol=0.01) + + +@pytest.mark.parametrize("skew0", [-0.9, -0.5, 0.0, 0.5, 0.9]) +@pytest.mark.parametrize("skew1", [-0.9, -0.5, 0.0, 0.5, 0.9]) +@pytest.mark.parametrize( + "scale0,scale1", [(0.1, 0.9), (0.2, 0.8), (0.4, 0.6), (0.5, 0.5)] +) +@pytest.mark.parametrize("stability", [0.5, 0.99, 1.01, 1.5, 1.9]) +def test_additive(stability, skew0, skew1, scale0, scale1): + num_samples = 10000 + d0 = dist.Stable(stability, skew0, scale0, coords="S") + d1 = dist.Stable(stability, skew1, scale1, coords="S") + expected = d0.sample([num_samples]) + d1.sample([num_samples]) + + scale = (scale0**stability + scale1**stability) ** (1 / stability) + skew = (skew0 * scale0**stability + skew1 * scale1**stability) / ( + scale0**stability + scale1**stability + ) + d = dist.Stable(stability, skew, scale, coords="S") + actual = d.sample([num_samples]) + + assert ks_2samp(expected, actual).pvalue > 0.03 + + +@pytest.mark.parametrize("scale", [0.5, 1.5]) +@pytest.mark.parametrize("skew", [-0.5, 0.0, 0.5, 0.9]) +@pytest.mark.parametrize("stability", [0.5, 1.0, 1.7, 2.0]) +@pytest.mark.parametrize("coords", ["S0", "S"]) +def test_mean(stability, skew, scale, coords): + loc = torch.randn(10) + d = dist.Stable(stability, skew, scale, loc, coords=coords) + if stability <= 1: + assert torch.isnan(d.mean).all() + else: + expected = d.sample((100000,)).mean(0) + assert_close(d.mean, expected, atol=0.1) + + +@pytest.mark.parametrize("scale", [0.5, 1.5]) +@pytest.mark.parametrize("stability", [1.7, 2.0]) +def test_variance(stability, scale): + skew = dist.Uniform(-1, 1).sample((10,)) + loc = torch.randn(10) + d = dist.Stable(stability, skew, scale, loc) + if stability < 2: + assert torch.isinf(d.variance).all() + else: + expected = d.sample((100000,)).var(0) + assert_close(d.variance, expected, rtol=0.02) diff --git a/pyro/source/tests/distributions/test_stable_log_prob.py b/pyro/source/tests/distributions/test_stable_log_prob.py new file mode 100644 index 0000000000000000000000000000000000000000..30be413f574e6387d658b374db2b4e658bbc02ae --- /dev/null +++ b/pyro/source/tests/distributions/test_stable_log_prob.py @@ -0,0 +1,145 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import logging + +import pytest +import torch +from scipy.stats import levy_stable + +import pyro +import pyro.distributions +import pyro.distributions.stable_log_prob +from pyro.distributions import Stable, constraints +from pyro.infer import SVI, Trace_ELBO +from pyro.infer.autoguide import AutoNormal +from tests.common import assert_close +from tests.distributions.test_distributions import auto_goodness_of_fit + +TEST_FAILURE_RATE = 5e-4 + + +torch.set_default_dtype(torch.float64) + + +@pytest.mark.parametrize("stability", [0.1, 0.95, 1.00, 1.05, 1.99]) +@pytest.mark.parametrize("skew", [-0.8, 0.0, 0.8]) +def test_stable_gof(stability, skew): + num_samples = 100000 + # Use less samples for scipy as its log-probability calculation is much slower than pyro's + num_samples_scipy = 10000 + pyro.set_rng_seed(20240527) + + # Create distributions and samples + dist = Stable(stability, skew).expand(torch.Size([num_samples])) + dist_scipy = levy_stable(stability, skew) + dist_scipy.dist.parameterization = "S0" + samples = dist.sample() + samples_scipy = samples[:num_samples_scipy] + + # Check goodness of fit of samples to scipy's implementation of the log-probability calculation. + logging.info( + f"Calculating log-probability of (stablity={stability}, " + f"skew={skew}) for {len(samples_scipy)} samples with scipy" + ) + probs_scipy = torch.Tensor(dist_scipy.pdf(samples_scipy)) + gof_scipy = auto_goodness_of_fit(samples_scipy, probs_scipy) + assert gof_scipy > TEST_FAILURE_RATE + logging.info( + f"Goodness of fit failure rate is {gof_scipy} > {TEST_FAILURE_RATE} with scipy" + ) + + # Check goodness of fit of pyro's implementation of the log-probability calculation to generated samples. + logging.info( + f"Calculating log-probability of (stablity={stability}, " + f"skew={skew}) for {len(samples)} samples with pyro" + ) + probs = dist.log_prob(samples).exp() + gof = auto_goodness_of_fit(samples, probs) + assert gof > TEST_FAILURE_RATE + logging.info( + f"Goodness of fit failure rate is {gof} > {TEST_FAILURE_RATE} with pyro" + ) + + +@pytest.mark.parametrize( + "alpha, beta, c, mu", + [ + (1.00, 0.8, 2.0, 3.0), + (1.02, -0.8, 2.0, -3.0), + (0.98, 0.5, 1.0, -3.0), + (0.95, -0.5, 1.0, 3.0), + (1.10, 0.0, 1.0, 0.0), + (1.80, -0.5, 1.0, -2.0), + (0.50, 0.0, 1.0, 2.0), + ], +) +@pytest.mark.parametrize( + "alpha_0, beta_0, c_0, mu_0", + [ + (1.3, 0.0, 1.0, 0.0), + ], +) +def test_stable_with_log_prob_param_fit(alpha, beta, c, mu, alpha_0, beta_0, c_0, mu_0): + # Sample test data + n = 10000 + pyro.set_rng_seed(20240520) + data = Stable(alpha, beta, c, mu).sample((n,)) + + def model(data): + alpha = pyro.param( + "alpha", torch.tensor(alpha_0), constraint=constraints.interval(0, 2) + ) + beta = pyro.param( + "beta", torch.tensor(beta_0), constraint=constraints.interval(-1, 1) + ) + c = pyro.param("c", torch.tensor(c_0), constraint=constraints.positive) + mu = pyro.param("mu", torch.tensor(mu_0), constraint=constraints.real) + with pyro.plate("data", data.shape[0]): + pyro.sample("obs", Stable(alpha, beta, c, mu), obs=data) + + def train(model, guide, num_steps=400, lr=0.03): + pyro.clear_param_store() + pyro.set_rng_seed(20240520) + + # set up ELBO, and optimizer + elbo = Trace_ELBO() + elbo.loss(model, guide, data=data) + optim = pyro.optim.Adam({"lr": lr}) + svi = SVI(model, guide, optim, loss=elbo) + + # optimize + for i in range(num_steps): + loss = svi.step(data) / data.numel() + if i % 10 == 0: + logging.info(f"step {i} loss = {loss:0.6g}") + log_progress() + + logging.info(f"Parameter estimates (n = {n}):") + log_progress() + + def log_progress(): + logging.info(f"alpha: Estimate = {pyro.param('alpha')}, true = {alpha}") + logging.info(f"beta: Estimate = {pyro.param('beta')}, true = {beta}") + logging.info(f"c: Estimate = {pyro.param('c')}, true = {c}") + logging.info(f"mu: Estimate = {pyro.param('mu')}, true = {mu}") + + # Fit model to data + guide = AutoNormal(model) + train(model, guide) + + # Verify fit accuracy + assert_close(alpha, pyro.param("alpha").item(), atol=0.04) + assert_close(beta, pyro.param("beta").item(), atol=0.06) + assert_close(c, pyro.param("c").item(), atol=0.2) + assert_close(mu, pyro.param("mu").item(), atol=0.2) + + +# # The below tests will be executed: +# test_stable_with_log_prob_param_fit(1.00, 0.8, 2.0, 3.0, 1.3, 0.0, 1.0, 0.0) +# test_stable_with_log_prob_param_fit(1.02, -0.8, 2.0, -3.0, 1.3, 0.0, 1.0, 0.0) +# test_stable_with_log_prob_param_fit(0.98, 0.5, 1.0, -3.0, 1.3, 0.0, 1.0, 0.0) +# test_stable_with_log_prob_param_fit(0.95, -0.5, 1.0, 3.0, 1.3, 0.0, 1.0, 0.0) +# test_stable_with_log_prob_param_fit(1.10, 0.0, 1.0, 0.0, 1.3, 0.0, 1.0, 0.0) +# test_stable_with_log_prob_param_fit(1.80, -0.5, 1.0, -2.0, 1.3, 0.0, 1.0, 0.0) +# test_stable_with_log_prob_param_fit(0.50, 0.0, 1.0, 2.0, 1.3, 0.0, 1.0, 0.0) diff --git a/pyro/source/tests/distributions/test_tensor_type.py b/pyro/source/tests/distributions/test_tensor_type.py new file mode 100644 index 0000000000000000000000000000000000000000..3955746812d124a0c9579345b3be7f0a428ce550 --- /dev/null +++ b/pyro/source/tests/distributions/test_tensor_type.py @@ -0,0 +1,77 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import scipy.stats as sp +import torch + +import pyro.distributions as dist +from tests.common import assert_equal + + +@pytest.fixture() +def test_data(): + return torch.DoubleTensor([0.4]) + + +@pytest.fixture() +def alpha(): + """ + alpha parameter for the Beta distribution. + """ + return torch.DoubleTensor([2.4]) + + +@pytest.fixture() +def beta(): + """ + beta parameter for the Beta distribution. + """ + return torch.DoubleTensor([3.7]) + + +@pytest.fixture() +def float_test_data(test_data): + return torch.FloatTensor(test_data.detach().cpu().numpy()) + + +@pytest.fixture() +def float_alpha(alpha): + return torch.FloatTensor(alpha.detach().cpu().numpy()) + + +@pytest.fixture() +def float_beta(beta): + return torch.FloatTensor(beta.detach().cpu().numpy()) + + +def test_double_type(test_data, alpha, beta): + log_px_torch = dist.Beta(alpha, beta).log_prob(test_data).data + assert isinstance(log_px_torch, torch.DoubleTensor) + log_px_val = log_px_torch.numpy() + log_px_np = sp.beta.logpdf( + test_data.detach().cpu().numpy(), + alpha.detach().cpu().numpy(), + beta.detach().cpu().numpy(), + ) + assert_equal(log_px_val, log_px_np, prec=1e-4) + + +def test_float_type(float_test_data, float_alpha, float_beta, test_data, alpha, beta): + log_px_torch = dist.Beta(float_alpha, float_beta).log_prob(float_test_data).data + assert isinstance(log_px_torch, torch.FloatTensor) + log_px_val = log_px_torch.numpy() + log_px_np = sp.beta.logpdf( + test_data.detach().cpu().numpy(), + alpha.detach().cpu().numpy(), + beta.detach().cpu().numpy(), + ) + assert_equal(log_px_val, log_px_np, prec=1e-4) + + +@pytest.mark.xfail( + reason="https://github.com/pytorch/pytorch/issues/43138#issuecomment-677804776" +) +def test_conflicting_types(test_data, float_alpha, beta): + with pytest.raises((TypeError, RuntimeError)): + dist.Beta(float_alpha, beta).log_prob(test_data) diff --git a/pyro/source/tests/distributions/test_torch_patch.py b/pyro/source/tests/distributions/test_torch_patch.py new file mode 100644 index 0000000000000000000000000000000000000000..c6c65ed93d6d2324fa0877cfcf68aa03da793517 --- /dev/null +++ b/pyro/source/tests/distributions/test_torch_patch.py @@ -0,0 +1,35 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +import pyro.distributions as dist +from tests.common import assert_close, requires_cuda + + +@requires_cuda +def test_dirichlet_grad_cuda(): + concentration = torch.ones(3, requires_grad=True) + dist.Dirichlet(concentration).rsample().sum().backward() + + +@requires_cuda +def test_linspace(): + x = torch.linspace(-1.0, 1.0, 100, device="cuda") + assert x.device.type == "cuda" + + +@pytest.mark.parametrize("batch_shape", [(), (5,), (2, 3)], ids=str) +@pytest.mark.parametrize("dim", [1, 2, 3, 4]) +def test_lower_cholesky_transform(batch_shape, dim): + t = torch.distributions.transform_to(torch.distributions.constraints.lower_cholesky) + x = torch.randn(batch_shape + (dim, dim)) + y = t(x) + assert y.shape == x.shape + actual = torch.linalg.cholesky(y.matmul(y.transpose(-1, -2))) + assert_close(actual, y) + x2 = t.inv(y) + assert x2.shape == x.shape + y2 = t(x2) + assert_close(y2, y) diff --git a/pyro/source/tests/distributions/test_transforms.py b/pyro/source/tests/distributions/test_transforms.py new file mode 100644 index 0000000000000000000000000000000000000000..67f4c5167b234503e5f18ec82d95251dcf34f2d5 --- /dev/null +++ b/pyro/source/tests/distributions/test_transforms.py @@ -0,0 +1,581 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import operator +from functools import partial, reduce +from unittest import TestCase + +import pytest +import torch + +import pyro.distributions as dist +import pyro.distributions.transforms as T +from pyro.distributions import constraints +from tests.common import assert_close + +pytestmark = pytest.mark.init(rng_seed=123) + + +class Flatten(dist.TransformModule): + """ + Used to handle transforms with `event_dim > 1` until we have a Reshape transform in PyTorch + """ + + domain = constraints.real_vector + codomain = constraints.real_vector + + def __init__(self, transform, input_shape): + super().__init__(cache_size=1) + assert transform.domain.event_dim == len(input_shape) + output_shape = transform.forward_shape(input_shape) + assert len(output_shape) >= transform.codomain.event_dim + output_shape = output_shape[len(output_shape) - transform.codomain.event_dim :] + + self.transform = transform + self.input_shape = input_shape + self.output_shape = output_shape + + def _call(self, x): + x = x.reshape(x.shape[:-1] + self.input_shape) + y = self.transform._call(x) + y = y.reshape(y.shape[: y.dim() - len(self.output_shape)] + (-1,)) + return y + + def _inverse(self, y): + y = y.reshape(y.shape[:-1] + self.output_shape) + x = self.transform._inverse(y) + x = x.reshape(x.shape[: x.dim() - len(self.input_shape)] + (-1,)) + return x + + def log_abs_det_jacobian(self, x, y): + x = x.reshape(x.shape[:-1] + self.input_shape) + y = y.reshape(y.shape[:-1] + self.output_shape) + return self.transform.log_abs_det_jacobian(x, y) + + def parameters(self): + return self.transform.parameters() + + +class TransformTests(TestCase): + def setUp(self): + # Epsilon is used to compare numerical gradient to analytical one + self.epsilon = 1e-4 + + # Delta is tolerance for testing inverse, f(f^{-1}(x)) = x + self.delta = 1e-6 + + def _test_jacobian(self, input_dim, transform): + jacobian = torch.zeros(input_dim, input_dim) + + def nonzero(x): + return torch.sign(torch.abs(x)) + + x = torch.randn(1, input_dim) + y = transform(x) + if transform.event_dim == 1: + analytic_ldt = transform.log_abs_det_jacobian(x, y).data + else: + analytic_ldt = transform.log_abs_det_jacobian(x, y).sum(-1).data + + for j in range(input_dim): + for k in range(input_dim): + epsilon_vector = torch.zeros(1, input_dim) + epsilon_vector[0, j] = self.epsilon + delta = ( + transform(x + 0.5 * epsilon_vector) + - transform(x - 0.5 * epsilon_vector) + ) / self.epsilon + jacobian[j, k] = float(delta[0, k].data.sum()) + + # Apply permutation for autoregressive flows with a network + if hasattr(transform, "arn") and "get_permutation" in dir(transform.arn): + permutation = transform.arn.get_permutation() + permuted_jacobian = jacobian.clone() + for j in range(input_dim): + for k in range(input_dim): + permuted_jacobian[j, k] = jacobian[permutation[j], permutation[k]] + jacobian = permuted_jacobian + + # For autoregressive flow, Jacobian is sum of diagonal, otherwise need full determinate + if hasattr(transform, "autoregressive") and transform.autoregressive: + numeric_ldt = torch.sum(torch.log(torch.diag(jacobian))) + else: + numeric_ldt = torch.log(torch.abs(jacobian.det())) + + ldt_discrepancy = (analytic_ldt - numeric_ldt).abs() + assert ldt_discrepancy < self.epsilon + + # Test that lower triangular with unit diagonal for autoregressive flows + if hasattr(transform, "autoregressive"): + diag_sum = torch.sum(torch.diag(nonzero(jacobian))) + lower_sum = torch.sum(torch.tril(nonzero(jacobian), diagonal=-1)) + assert diag_sum == float(input_dim) + assert lower_sum == float(0.0) + + def _test_inverse(self, shape, transform, base_dist_type="normal"): + # Test g^{-1}(g(x)) = x + # NOTE: Calling _call and _inverse directly bypasses caching + if base_dist_type == "dirichlet": + base_dist = dist.Dirichlet(torch.ones(shape) * 10.0) + elif base_dist_type == "normal": + base_dist = dist.Normal(torch.zeros(shape), torch.ones(shape)) + else: + raise ValueError(f"Unknown base distribution type: {base_dist_type}") + x_true = base_dist.sample(torch.Size([10])) + y = transform._call(x_true) + x_calculated = transform._inverse(y) + if transform.bijective: + assert (x_true - x_calculated).abs().max().item() < self.delta + else: + # Check the weaker pseudoinverse equation. + y2 = transform._call(x_calculated) + assert (y - y2).abs().max().item() < self.delta + + if transform.bijective: + # Test that Jacobian after inverse op is same as after forward + J_1 = transform.log_abs_det_jacobian(x_true, y) + J_2 = transform.log_abs_det_jacobian(x_calculated, y) + assert (J_1 - J_2).abs().max().item() < self.delta + + def _test_shape(self, base_shape, transform, base_dist_type="normal"): + if base_dist_type == "dirichlet": + base_dist = dist.Dirichlet(torch.ones(base_shape) * 10.0) + elif base_dist_type == "normal": + base_dist = dist.Normal(torch.zeros(base_shape), torch.ones(base_shape)) + else: + raise ValueError(f"Unknown base distribution type: {base_dist_type}") + sample = dist.TransformedDistribution(base_dist, [transform]).sample() + assert sample.shape == base_shape + + batch_shape = base_shape[: len(base_shape) - transform.domain.event_dim] + input_event_shape = base_shape[len(base_shape) - transform.domain.event_dim :] + output_event_shape = base_shape[ + len(base_shape) - transform.codomain.event_dim : + ] + output_shape = batch_shape + output_event_shape + assert transform.forward_shape(input_event_shape) == output_event_shape + assert transform.forward_shape(base_shape) == output_shape + assert transform.inverse_shape(output_event_shape) == input_event_shape + assert transform.inverse_shape(output_shape) == base_shape + + def _test_autodiff( + self, input_dim, transform, inverse=False, base_dist_type="normal" + ): + """ + This method essentially tests whether autodiff will not throw any errors + when you're doing maximum-likelihood learning with the transform. Many + transforms have only one direction with an explicit inverse, hence why we + pass in the inverse flag. + """ + temp_transform = transform + if inverse: + transform = transform.inv + + if base_dist_type == "dirichlet": + base_dist = dist.Dirichlet(torch.ones(input_dim) * 10.0) + elif base_dist_type == "normal": + base_dist = dist.Normal(torch.zeros(input_dim), torch.ones(input_dim)) + else: + raise ValueError(f"Unknown base distribution type: {base_dist_type}") + flow_dist = dist.TransformedDistribution(base_dist, [transform]) + optimizer = torch.optim.Adam(temp_transform.parameters()) + x = torch.rand(1, input_dim) + for _ in range(3): + optimizer.zero_grad() + loss = -flow_dist.log_prob(x.detach()).mean() + loss.backward() + optimizer.step() + + def _test( + self, + transform_factory, + shape=True, + jacobian=True, + inverse=True, + autodiff=True, + event_dim=1, + base_dist_type="normal", + ): + for event_shape in [(2,), (5,)]: + if event_dim > 1: + event_shape = tuple([event_shape[0] + i for i in range(event_dim)]) + transform = transform_factory( + event_shape[0] if len(event_shape) == 1 else event_shape + ) + + if inverse: + self._test_inverse( + event_shape, transform, base_dist_type=base_dist_type + ) + if shape: + for shape in [(3,), (3, 4), (3, 4, 5)]: + base_shape = shape + event_shape + self._test_shape( + base_shape, transform, base_dist_type=base_dist_type + ) + if jacobian and transform.bijective: + if event_dim > 1: + transform = Flatten(transform, event_shape) + self._test_jacobian(reduce(operator.mul, event_shape, 1), transform) + if isinstance(transform, dist.TransformModule) and autodiff: + # If the function doesn't have an explicit inverse, then use the forward op for autodiff + self._test_autodiff( + reduce(operator.mul, event_shape, 1), + transform, + inverse=not inverse, + base_dist_type=base_dist_type, + ) + + def _test_conditional( + self, conditional_transform_factory, context_dim=3, event_dim=1, **kwargs + ): + def transform_factory(input_dim, context_dim=context_dim): + z = torch.rand(1, context_dim) + cond_transform = conditional_transform_factory(input_dim, context_dim) + transform = cond_transform.condition(z) + + # A bit of a hack since conditioned transforms don't expose .parameters() + transform.parameters = lambda: cond_transform.parameters() + + return transform + + self._test(transform_factory, event_dim=event_dim, **kwargs) + + def test_affine_autoregressive(self): + for stable in [True, False]: + self._test(partial(T.affine_autoregressive, stable=stable)) + + def test_affine_coupling(self): + for dim in [-1, -2]: + self._test(partial(T.affine_coupling, dim=dim), event_dim=-dim) + + def test_batchnorm(self): + # Need to make moving average statistics non-zeros/ones and set to eval so inverse is valid + # (see the docs about the differing behaviour of BatchNorm in train and eval modes) + def transform_factory(input_dim): + transform = T.batchnorm(input_dim) + transform._inverse( + torch.normal( + torch.arange(0.0, input_dim), + torch.arange(1.0, 1.0 + input_dim) / input_dim, + ) + ) + transform.eval() + return transform + + self._test(transform_factory) + + def test_block_autoregressive_jacobians(self): + for activation in ["ELU", "LeakyReLU", "sigmoid", "tanh"]: + self._test( + partial(T.block_autoregressive, activation=activation), inverse=False + ) + + for residual in [None, "normal", "gated"]: + self._test( + partial(T.block_autoregressive, residual=residual), inverse=False + ) + + def test_conditional_affine_autoregressive(self): + self._test_conditional(T.conditional_affine_autoregressive) + + def test_conditional_affine_coupling(self): + for dim in [-1, -2]: + self._test_conditional( + partial(T.conditional_affine_coupling, dim=dim), event_dim=-dim + ) + + def test_conditional_generalized_channel_permute(self, context_dim=3): + for shape in [(3, 16, 16), (1, 3, 32, 32), (2, 5, 3, 64, 64)]: + # NOTE: Without changing the interface to generalized_channel_permute I can't reuse general + # test for `event_dim > 1` transforms + z = torch.rand(context_dim) + transform = T.conditional_generalized_channel_permute( + context_dim=3, channels=shape[-3] + ).condition(z) + self._test_shape(shape, transform) + self._test_inverse(shape, transform) + + for width_dim in [2, 4, 6]: + input_dim = (width_dim**2) * 3 + self._test_jacobian( + input_dim, Flatten(transform, (3, width_dim, width_dim)) + ) + + def test_conditional_householder(self): + self._test_conditional(T.conditional_householder) + self._test_conditional(partial(T.conditional_householder, count_transforms=2)) + + def test_conditional_matrix_exponential(self): + self._test_conditional(T.conditional_matrix_exponential) + + def test_conditional_neural_autoregressive(self): + self._test_conditional(T.conditional_neural_autoregressive, inverse=False) + + def test_conditional_planar(self): + self._test_conditional(T.conditional_planar, inverse=False) + + def test_conditional_radial(self): + self._test_conditional(T.conditional_radial, inverse=False) + + def test_conditional_spline(self): + for order in ["linear", "quadratic"]: + self._test_conditional(partial(T.conditional_spline, order=order)) + + def test_conditional_spline_autoregressive(self): + self._test_conditional(T.conditional_spline_autoregressive) + + def test_discrete_cosine(self): + # NOTE: Need following since helper function unimplemented + for smooth in [0.0, 0.5, 1.0, 2.0]: + self._test( + lambda input_dim: T.DiscreteCosineTransform(smooth=smooth), + autodiff=False, + ) + + def test_haar_transform(self): + # NOTE: Need following since helper function unimplemented + for flip in [True, False]: + self._test(lambda input_dim: T.HaarTransform(flip=flip), autodiff=False) + + def test_elu(self): + # NOTE: Need following since helper function mistakenly doesn't take input dim + self._test(lambda input_dim: T.elu(), autodiff=False) + + def test_generalized_channel_permute(self): + for shape in [(3, 16, 16), (1, 3, 32, 32), (2, 5, 3, 64, 64)]: + # NOTE: Without changing the interface to generalized_channel_permute I can't reuse general + # test for `event_dim > 1` transforms + transform = T.generalized_channel_permute(channels=shape[-3]) + self._test_shape(shape, transform) + self._test_inverse(shape, transform) + + for width_dim in [2, 4, 6]: + input_dim = (width_dim**2) * 3 + self._test_jacobian( + input_dim, Flatten(transform, (3, width_dim, width_dim)) + ) + + def test_householder(self): + self._test(partial(T.householder, count_transforms=2)) + + def test_leaky_relu(self): + # NOTE: Need following since helper function mistakenly doesn't take input dim + self._test(lambda input_dim: T.leaky_relu(), autodiff=False) + + def test_lower_cholesky_affine(self): + # NOTE: Need following since helper function unimplemented + def transform_factory(input_dim): + loc = torch.randn(input_dim) + scale_tril = torch.randn(input_dim).exp().diag() + 0.03 * torch.randn( + input_dim, input_dim + ) + scale_tril = scale_tril.tril(0) + return T.LowerCholeskyAffine(loc, scale_tril) + + self._test(transform_factory, autodiff=False) + + def test_matrix_exponential(self): + self._test(T.matrix_exponential) + + def test_neural_autoregressive(self): + for activation in ["ELU", "LeakyReLU", "sigmoid", "tanh"]: + self._test( + partial(T.neural_autoregressive, activation=activation), inverse=False + ) + + def test_ordered_transform(self): + # NOTE: Need following since transform takes no input parameters + self._test(lambda event_shape: T.OrderedTransform(), autodiff=False) + + def test_permute(self): + for dim in [-1, -2]: + self._test(partial(T.permute, dim=dim), event_dim=-dim, autodiff=False) + + def test_planar(self): + self._test(T.planar, inverse=False) + + def test_polynomial(self): + self._test(T.polynomial, inverse=False) + + def test_radial(self): + self._test(T.radial, inverse=False) + + def test_simplex_to_ordered(self): + self._test( + lambda event_shape: T.SimplexToOrderedTransform(), + shape=False, + autodiff=False, + base_dist_type="dirichlet", + ) + # Unique shape behavior: + assert T.SimplexToOrderedTransform().forward_shape((4, 3, 3)) == (4, 3, 2) + assert T.SimplexToOrderedTransform().forward_shape((2,)) == (1,) + assert T.SimplexToOrderedTransform().inverse_shape((2,)) == (3,) + assert T.SimplexToOrderedTransform().inverse_shape((4, 3, 3)) == (4, 3, 4) + + def test_spline(self): + for order in ["linear", "quadratic"]: + self._test(partial(T.spline, order=order)) + + def test_spline_coupling(self): + self._test(T.spline_coupling) + + def test_spline_autoregressive(self): + self._test(T.spline_autoregressive) + + def test_sylvester(self): + self._test(T.sylvester, inverse=False) + + def test_normalize_transform(self): + self._test(lambda p: T.Normalize(p=p)) + + def test_softplus(self): + self._test(lambda _: T.SoftplusTransform()) + + def test_positive_power(self): + for p in [0.3, 1.0, 3.0]: + self._test(lambda _: T.PositivePowerTransform(p), event_dim=0) + + +@pytest.mark.parametrize("batch_shape", [(), (7,), (6, 5)]) +@pytest.mark.parametrize("dim", [2, 3, 5]) +@pytest.mark.parametrize( + "transform", + [ + T.CholeskyTransform(), + T.CorrMatrixCholeskyTransform(), + ], + ids=lambda t: type(t).__name__, +) +def test_cholesky_transform(batch_shape, dim, transform): + arange = torch.arange(dim) + domain = transform.domain + z = torch.randn(batch_shape + (dim * (dim - 1) // 2,)) + if domain is dist.constraints.corr_matrix: + tril_mask = arange < arange.view(-1, 1) + else: + tril_mask = arange < arange.view(-1, 1) + 1 + x = transform.inv(T.CorrCholeskyTransform()(z)) # creates corr_matrix + + def vec_to_mat(x_vec): + x_mat = x_vec.new_zeros(batch_shape + (dim, dim)) + x_mat[..., tril_mask] = x_vec + x_mat = ( + x_mat + + x_mat.transpose(-2, -1) + - x_mat.diagonal(dim1=-2, dim2=-1).diag_embed() + ) + if domain == dist.constraints.corr_matrix: + x_mat = x_mat + x_mat.new_ones(x_mat.shape[-1]).diag_embed() + return x_mat + + def transform_to_vec(x_vec): + x_mat = vec_to_mat(x_vec) + return transform(x_mat)[..., tril_mask] + + x_vec = x[..., tril_mask].clone().requires_grad_() + x_mat = vec_to_mat(x_vec) + y = transform(x_mat) + log_det = transform.log_abs_det_jacobian(x_mat, y) + if batch_shape == (): + jacobian = torch.autograd.functional.jacobian(transform_to_vec, x_vec) + assert_close(log_det, torch.slogdet(jacobian)[1]) + + assert log_det.shape == batch_shape + assert_close(y, torch.linalg.cholesky(x_mat)) + assert_close(transform.inv(y), x_mat) + + +@pytest.mark.parametrize("batch_shape", [(), (7,), (6, 5)]) +@pytest.mark.parametrize("dim", [2, 3, 5]) +@pytest.mark.parametrize( + "transform", + [ + T.LowerCholeskyTransform(), + T.SoftplusLowerCholeskyTransform(), + T.UnitLowerCholeskyTransform(), + ], + ids=lambda t: type(t).__name__, +) +def test_lower_cholesky_transform(transform, batch_shape, dim): + shape = batch_shape + (dim, dim) + x = torch.randn(shape) + y = transform(x) + assert y.shape == shape + x2 = transform.inv(y) + assert x2.shape == shape + y2 = transform(x2) + assert y2.shape == shape + assert_close(y, y2) + + +@pytest.mark.parametrize("batch_shape", [(), (7,), (6, 7)]) +@pytest.mark.parametrize("input_dim", [2, 3, 5]) +@pytest.mark.parametrize("context_dim", [2, 3, 5]) +def test_inverse_conditional_transform_module(batch_shape, input_dim, context_dim): + cond_transform = T.conditional_spline(input_dim, context_dim, [6]) + + noise = torch.rand(batch_shape + (input_dim,)) + context = torch.rand(batch_shape + (context_dim,)) + + assert_close( + cond_transform.inv.condition(context)(noise), + cond_transform.condition(context).inv(noise), + ) + + assert cond_transform.inv.inv is cond_transform + assert_close( + cond_transform.inv.condition(context).inv(noise), + cond_transform.condition(context).inv.inv(noise), + ) + + +@pytest.mark.parametrize("batch_shape", [(), (7,), (6, 7)]) +@pytest.mark.parametrize("input_dim", [2, 3, 5]) +@pytest.mark.parametrize("context_dim", [2, 3, 5]) +@pytest.mark.parametrize("cache_size", [0, 1]) +def test_conditional_compose_transform_module( + batch_shape, input_dim, context_dim, cache_size +): + conditional_transforms = [ + T.AffineTransform(1.0, 2.0), + T.Spline(input_dim), + T.conditional_spline(input_dim, context_dim, [5]), + T.SoftplusTransform(), + T.conditional_spline(input_dim, context_dim, [6]), + ] + cond_transform = dist.conditional.ConditionalComposeTransformModule( + conditional_transforms, cache_size=cache_size + ) + + base_dist = dist.Normal(0, 1).expand(batch_shape + (input_dim,)).to_event(1) + cond_dist = dist.ConditionalTransformedDistribution(base_dist, [cond_transform]) + + context = torch.rand(batch_shape + (context_dim,)) + d = cond_dist.condition(context) + transform = d.transforms[0] + assert isinstance(transform, T.ComposeTransformModule) + + data = d.rsample() + assert data.shape == batch_shape + (input_dim,) + assert d.log_prob(data).shape == batch_shape + + actual_params = set(cond_transform.parameters()) + expected_params = set( + torch.nn.ModuleList( + [t for t in conditional_transforms if isinstance(t, torch.nn.Module)] + ).parameters() + ) + assert set() != actual_params == expected_params + + noise = base_dist.rsample() + expected = noise + for t in conditional_transforms: + expected = (t.condition(context) if hasattr(t, "condition") else t)(expected) + + actual = transform(noise) + assert_close(actual, expected) + + assert_close(cond_transform.inv.condition(context)(actual), noise) + assert_close(cond_transform.condition(context).inv(expected), noise) diff --git a/pyro/source/tests/distributions/test_unit.py b/pyro/source/tests/distributions/test_unit.py new file mode 100644 index 0000000000000000000000000000000000000000..f2b45c5ac91224f972938d016ace7a036584966d --- /dev/null +++ b/pyro/source/tests/distributions/test_unit.py @@ -0,0 +1,32 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +import pyro.distributions as dist +from tests.common import assert_equal + + +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)]) +def test_shapes(batch_shape): + log_factor = torch.randn(batch_shape) + + d = dist.Unit(log_factor=log_factor) + x = d.sample() + assert x.shape == batch_shape + (0,) + assert (d.log_prob(x) == log_factor).all() + + +@pytest.mark.parametrize("sample_shape", [(), (4,), (3, 2)]) +@pytest.mark.parametrize("batch_shape", [(), (7,), (6, 5)]) +def test_expand(sample_shape, batch_shape): + log_factor = torch.randn(batch_shape) + d1 = dist.Unit(log_factor) + v1 = d1.sample() + + d2 = d1.expand(sample_shape + batch_shape) + assert d2.batch_shape == sample_shape + batch_shape + v2 = d2.sample() + assert v2.shape == sample_shape + batch_shape + (0,) + assert_equal(d1.log_prob(v2), d2.log_prob(v1)) diff --git a/pyro/source/tests/distributions/test_util.py b/pyro/source/tests/distributions/test_util.py new file mode 100644 index 0000000000000000000000000000000000000000..62813e250aea95b7b52500c53ef9bafface27dcc --- /dev/null +++ b/pyro/source/tests/distributions/test_util.py @@ -0,0 +1,418 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import weakref + +import numpy as np +import pytest +import torch +from torch.autograd import grad + +import pyro.distributions as dist +from pyro.distributions import constraints +from pyro.distributions.util import ( + broadcast_shape, + deep_to, + detach, + sum_leftmost, + sum_rightmost, + weakmethod, +) +from pyro.nn.module import PyroModule, PyroParam, PyroSample +from tests.common import assert_equal + +INF = float("inf") + + +@pytest.mark.parametrize( + "shapes", + [ + ([],), + ([1],), + ([2],), + ([], []), + ([], [1]), + ([], [2]), + ([1], []), + ([2], []), + ([1], [2]), + ([2], [1]), + ([2], [2]), + ([2], [3, 1]), + ([2, 1], [3]), + ([2, 1], [1, 3]), + ([1, 2, 4, 1, 3], [6, 7, 1, 1, 5, 1]), + ([], [3, 1], [2], [4, 3, 1], [5, 4, 1, 1]), + ], +) +def test_broadcast_shape(shapes): + assert broadcast_shape(*shapes) == np.broadcast(*map(np.empty, shapes)).shape + + +@pytest.mark.parametrize( + "shapes", + [ + ([3], [4]), + ([2, 1], [1, 3, 1]), + ], +) +def test_broadcast_shape_error(shapes): + with pytest.raises((ValueError, RuntimeError)): + broadcast_shape(*shapes) + + +@pytest.mark.parametrize( + "shapes", + [ + ([],), + ([1],), + ([2],), + ([], []), + ([], [1]), + ([], [2]), + ([1], []), + ([2], []), + ([1], [1]), + ([2], [2]), + ([2], [2]), + ([2], [3, 2]), + ([2, 3], [3]), + ([2, 3], [2, 3]), + ([4], [1, 2, 3, 4], [2, 3, 4], [3, 4]), + ], +) +def test_broadcast_shape_strict(shapes): + assert ( + broadcast_shape(*shapes, strict=True) + == np.broadcast(*map(np.empty, shapes)).shape + ) + + +@pytest.mark.parametrize( + "shapes", + [ + ([1], [2]), + ([2], [1]), + ([3], [4]), + ([2], [3, 1]), + ([2, 1], [3]), + ([2, 1], [1, 3]), + ([2, 1], [1, 3, 1]), + ([1, 2, 4, 1, 3], [6, 7, 1, 1, 5, 1]), + ([], [3, 1], [2], [4, 3, 1], [5, 4, 1, 1]), + ], +) +def test_broadcast_shape_strict_error(shapes): + with pytest.raises(ValueError): + broadcast_shape(*shapes, strict=True) + + +def test_sum_rightmost(): + x = torch.ones(2, 3, 4) + assert sum_rightmost(x, 0).shape == (2, 3, 4) + assert sum_rightmost(x, 1).shape == (2, 3) + assert sum_rightmost(x, 2).shape == (2,) + assert sum_rightmost(x, -1).shape == (2,) + assert sum_rightmost(x, -2).shape == (2, 3) + assert sum_rightmost(x, INF).shape == () + + +def test_sum_leftmost(): + x = torch.ones(2, 3, 4) + assert sum_leftmost(x, 0).shape == (2, 3, 4) + assert sum_leftmost(x, 1).shape == (3, 4) + assert sum_leftmost(x, 2).shape == (4,) + assert sum_leftmost(x, -1).shape == (4,) + assert sum_leftmost(x, -2).shape == (3, 4) + assert sum_leftmost(x, INF).shape == () + + +def test_weakmethod(): + class Foo: + def __init__(self, state): + self.state = state + self.method = self._method + + @weakmethod + def _method(self, *args, **kwargs): + return self.state, args, kwargs + + foo = Foo(42) + assert foo.method(1, 2, 3, x=0) == (42, (1, 2, 3), {"x": 0}) + + foo_ref = weakref.ref(foo) + assert foo_ref() is foo + del foo + assert foo_ref() is None + + +@pytest.mark.parametrize("shape", [None, (), (4,), (3, 2)], ids=str) +def test_detach_normal(shape): + loc = torch.tensor(0.0, requires_grad=True) + scale = torch.tensor(1.0, requires_grad=True) + d1 = dist.Normal(loc, scale) + if shape is not None: + d1 = d1.expand(shape) + + d2 = detach(d1) + assert type(d1) is type(d2) + assert_equal(d1.loc, d2.loc) + assert_equal(d1.scale, d2.scale) + assert not d2.loc.requires_grad + assert not d2.scale.requires_grad + + +@pytest.mark.parametrize("shape", [None, (), (4,), (3, 2)], ids=str) +def test_detach_beta(shape): + concentration1 = torch.tensor(0.5, requires_grad=True) + concentration0 = torch.tensor(2.0, requires_grad=True) + d1 = dist.Beta(concentration1, concentration0) + if shape is not None: + d1 = d1.expand(shape) + + d2 = detach(d1) + assert type(d1) is type(d2) + assert d2.batch_shape == d1.batch_shape + assert_equal(d1.concentration1, d2.concentration1) + assert_equal(d1.concentration0, d2.concentration0) + assert not d2.concentration1.requires_grad + assert not d2.concentration0.requires_grad + + +@pytest.mark.parametrize("shape", [None, (), (4,), (3, 2)], ids=str) +def test_detach_transformed(shape): + loc = torch.tensor(0.0, requires_grad=True) + scale = torch.tensor(1.0, requires_grad=True) + a = torch.tensor(2.0, requires_grad=True) + b = torch.tensor(3.0, requires_grad=True) + d1 = dist.TransformedDistribution( + dist.Normal(loc, scale), dist.transforms.AffineTransform(a, b) + ) + if shape is not None: + d1 = d1.expand(shape) + + d2 = detach(d1) + assert type(d1) is type(d2) + assert d2.event_shape == d1.event_shape + assert d2.batch_shape == d1.batch_shape + assert type(d1.base_dist) is type(d2.base_dist) + assert len(d1.transforms) == len(d2.transforms) + assert_equal(d1.base_dist.loc, d2.base_dist.loc) + assert_equal(d1.base_dist.scale, d2.base_dist.scale) + assert_equal(d1.transforms[0].loc, d2.transforms[0].loc) + assert_equal(d1.transforms[0].scale, d2.transforms[0].scale) + assert not d2.base_dist.loc.requires_grad + assert not d2.base_dist.scale.requires_grad + assert not d2.transforms[0].loc.requires_grad + assert not d2.transforms[0].scale.requires_grad + + +@pytest.mark.parametrize("shape", [None, (), (4,), (3, 2)], ids=str) +def test_detach_jit(shape): + loc = torch.tensor(0.0, requires_grad=True) + scale = torch.tensor(1.0, requires_grad=True) + data = torch.randn(5, 1, 1) + + def fn(loc, scale, data): + d = dist.Normal(loc, scale, validate_args=False) + if shape is not None: + d = d.expand(shape) + return detach(d).log_prob(data) + + jit_fn = torch.jit.trace(fn, (loc, scale, data)) + + expected = fn(loc, scale, data) + actual = jit_fn(loc, scale, data) + assert not expected.requires_grad + assert not actual.requires_grad + assert_equal(actual, expected) + + +@pytest.mark.parametrize("shape", [None, (), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("dtype", [torch.float, torch.double], ids=str) +def test_deep_to_normal(shape, dtype): + loc = torch.tensor(0.0, requires_grad=True) + scale = torch.tensor(1.0, requires_grad=False) + d1 = dist.Normal(loc, scale) + if shape is not None: + d1 = d1.expand(shape) + + # Pass dtype positionally. + d2 = deep_to(d1, dtype) + d2.log_prob(d2.sample().detach()) # smoke test + assert type(d1) is type(d2) + assert d2.loc.dtype == dtype + assert d2.scale.dtype == dtype + assert_equal(d1.loc.to(dtype), d2.loc) + assert_equal(d1.scale.to(dtype), d2.scale) + assert d2.loc.requires_grad + assert not d2.scale.requires_grad + + # Pass dtype by keyword. + d2 = deep_to(d1, dtype=dtype) + d2.log_prob(d2.sample().detach()) # smoke test + assert type(d1) is type(d2) + assert d2.loc.dtype == dtype + assert d2.scale.dtype == dtype + assert_equal(d1.loc.to(dtype), d2.loc) + assert_equal(d1.scale.to(dtype), d2.scale) + assert d2.loc.requires_grad + assert not d2.scale.requires_grad + + +@pytest.mark.parametrize("shape", [None, (), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("dtype", [torch.float, torch.double], ids=str) +def test_deep_to_beta(shape, dtype): + concentration1 = torch.tensor(0.5, requires_grad=True) + concentration0 = torch.tensor(2.0, requires_grad=False) + d1 = dist.Beta(concentration1, concentration0) + if shape is not None: + d1 = d1.expand(shape) + + d2 = deep_to(d1, dtype) + d2.log_prob(d2.sample().detach()) # smoke test + assert type(d1) is type(d2) + assert d2.batch_shape == d1.batch_shape + assert_equal(d1.concentration1.to(dtype), d2.concentration1) + assert_equal(d1.concentration0.to(dtype), d2.concentration0) + assert d2.concentration1.requires_grad == d1.concentration1.requires_grad + assert d2.concentration0.requires_grad == d1.concentration0.requires_grad + + +@pytest.mark.parametrize("shape", [None, (), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("dtype", [torch.float, torch.double], ids=str) +def test_deep_to_transformed(shape, dtype): + loc = torch.tensor(0.0, requires_grad=True) + scale = torch.tensor(1.0, requires_grad=False) + a = torch.tensor(2.0, requires_grad=True) + b = torch.tensor(3.0, requires_grad=False) + d1 = dist.TransformedDistribution( + dist.Normal(loc, scale), dist.transforms.AffineTransform(a, b) + ) + if shape is not None: + d1 = d1.expand(shape) + + d2 = deep_to(d1, dtype) + d2.log_prob(d2.sample().detach()) # smoke test + assert type(d1) is type(d2) + assert d2.event_shape == d1.event_shape + assert d2.batch_shape == d1.batch_shape + assert type(d1.base_dist) is type(d2.base_dist) + assert len(d1.transforms) == len(d2.transforms) + assert_equal(d1.base_dist.loc.to(dtype), d2.base_dist.loc) + assert_equal(d1.base_dist.scale.to(dtype), d2.base_dist.scale) + assert_equal(d1.transforms[0].loc.to(dtype), d2.transforms[0].loc) + assert_equal(d1.transforms[0].scale.to(dtype), d2.transforms[0].scale) + assert d2.base_dist.loc.requires_grad + assert not d2.base_dist.scale.requires_grad + assert d2.transforms[0].loc.requires_grad + assert not d2.transforms[0].scale.requires_grad + + +@pytest.mark.parametrize("dtype", [torch.float, torch.double], ids=str) +def test_deep_to_structure(dtype): + data = [ + None, + True, + "foo", + 1.0, + {False}, + torch.tensor(0.0), + (torch.tensor(1.0), torch.tensor([2.0, 3.0])), + [torch.tensor(4.0)], + {"bar": torch.tensor(5.0)}, + ] + actual = deep_to(data) + expected = [ + None, + True, + "foo", + 1.0, + {False}, + torch.tensor(0.0).to(dtype), + (torch.tensor(1.0).to(dtype), torch.tensor([2.0, 3.0]).to(dtype)), + [torch.tensor(4.0).to(dtype)], + {"bar": torch.tensor(5.0).to(dtype)}, + ] + assert_equal(actual, expected) + + +@pytest.mark.parametrize("shape", [None, (), (4,), (3, 2)], ids=str) +def test_deep_to_jit(shape): + loc = torch.tensor(0.0, requires_grad=True) + scale = torch.tensor(1.0, requires_grad=True) + data = torch.randn(5, 1, 1) + + def fn(loc, scale, data): + d = dist.Normal(loc, scale, validate_args=False) + if shape is not None: + d = d.expand(shape) + d = deep_to(d) + # do some arbitrary math + y = (data - d.rsample()) / 2 + return d.log_prob(y) + d.entropy() + + jit_fn = torch.jit.trace(fn, (loc, scale, data), check_trace=False) + + # Check value. + torch.manual_seed(12345) + expected = fn(loc, scale, data) + torch.manual_seed(12345) + actual = jit_fn(loc, scale, data) + assert_equal(actual, expected) + + # Check grads. + actual_grads = grad(actual.sum(), [loc, scale], retain_graph=True) + expected_grads = grad(actual.sum(), [loc, scale]) + for a, e in zip(actual_grads, expected_grads): + assert_equal(a, e) + + +@pytest.mark.parametrize("dtype", [torch.float, torch.double], ids=str) +def test_deep_to_module(dtype): + class ExampleModule(torch.nn.Module): + def __init__(self): + super().__init__() + self.a = torch.nn.Parameter(torch.zeros(2)) + self.register_buffer("b", torch.zeros(3)) + self.c = torch.randn(4) # this wouldn't work with torch.nn.Module.to() + self.d = dist.Normal(0, 1) + + module = ExampleModule() + module = deep_to(module, dtype=dtype) + assert isinstance(module, ExampleModule) + assert module.a.dtype == dtype + assert module.b.dtype == dtype + assert module.c.dtype == dtype + assert module.d.loc.dtype == dtype + assert module.d.scale.dtype == dtype + + +@pytest.mark.parametrize("dtype", [torch.float, torch.double], ids=str) +def test_deep_to_pyro_module(dtype): + class ExampleModule(PyroModule): + def __init__(self): + super().__init__() + self.a = torch.nn.Parameter(torch.zeros(2)) + self.register_buffer("b", torch.zeros(3)) + self.c = torch.randn(4) # this wouldn't work with torch.nn.Module.to() + self.d = dist.Normal(0, 1) + self.e = PyroParam( + torch.randn(()), + constraint=constraints.greater_than(torch.tensor(0.5)), + ) + self.f = PyroSample(dist.Normal(0, 1)) + self.g = PyroSample(lambda self: dist.Normal(self.f, 1)) + + module = ExampleModule() + module = deep_to(module, dtype=dtype) + assert isinstance(module, ExampleModule) + assert module.a.dtype == dtype + assert module.b.dtype == dtype + assert module.c.dtype == dtype + assert module.d.loc.dtype == dtype + assert module.d.scale.dtype == dtype + assert module._pyro_params["e"][0].lower_bound.dtype == dtype + assert module.e.dtype == dtype + assert module.f.dtype == dtype + assert module.g.dtype == dtype diff --git a/pyro/source/tests/distributions/test_von_mises.py b/pyro/source/tests/distributions/test_von_mises.py new file mode 100644 index 0000000000000000000000000000000000000000..4b3b418aaa9137e5a54c79378fbab50c06178373 --- /dev/null +++ b/pyro/source/tests/distributions/test_von_mises.py @@ -0,0 +1,198 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math +import os + +import pytest +import torch +from torch import optim + +from pyro.distributions import VonMises, VonMises3D +from pyro.distributions.testing.gof import auto_goodness_of_fit +from tests.common import TEST_FAILURE_RATE, skipif_param, xfail_if_not_implemented + + +def _eval_poly(y, coef): + coef = list(coef) + result = coef.pop() + while coef: + result = coef.pop() + y * result + return result + + +_I0_COEF_SMALL = [ + 1.0, + 3.5156229, + 3.0899424, + 1.2067492, + 0.2659732, + 0.360768e-1, + 0.45813e-2, +] +_I0_COEF_LARGE = [ + 0.39894228, + 0.1328592e-1, + 0.225319e-2, + -0.157565e-2, + 0.916281e-2, + -0.2057706e-1, + 0.2635537e-1, + -0.1647633e-1, + 0.392377e-2, +] +_I1_COEF_SMALL = [ + 0.5, + 0.87890594, + 0.51498869, + 0.15084934, + 0.2658733e-1, + 0.301532e-2, + 0.32411e-3, +] +_I1_COEF_LARGE = [ + 0.39894228, + -0.3988024e-1, + -0.362018e-2, + 0.163801e-2, + -0.1031555e-1, + 0.2282967e-1, + -0.2895312e-1, + 0.1787654e-1, + -0.420059e-2, +] + +_COEF_SMALL = [_I0_COEF_SMALL, _I1_COEF_SMALL] +_COEF_LARGE = [_I0_COEF_LARGE, _I1_COEF_LARGE] + + +def _log_modified_bessel_fn(x, order=0): + """ + Returns ``log(I_order(x))`` for ``x > 0``, + where `order` is either 0 or 1. + """ + assert order == 0 or order == 1 + + # compute small solution + y = (x / 3.75).pow(2) + small = _eval_poly(y, _COEF_SMALL[order]) + if order == 1: + small = x.abs() * small + small = small.log() + + # compute large solution + y = 3.75 / x + large = x - 0.5 * x.log() + _eval_poly(y, _COEF_LARGE[order]).log() + + mask = x < 3.75 + result = large + if mask.any(): + result[mask] = small[mask] + return result + + +def _fit_params_from_samples(samples, n_iter): + assert samples.dim() == 1 + samples_count = samples.size(0) + samples_cs = samples.cos().sum() + samples_ss = samples.sin().sum() + mu = torch.atan2(samples_ss / samples_count, samples_cs / samples_count) + samples_r = (samples_cs**2 + samples_ss**2).sqrt() / samples_count + # From Banerjee, Arindam, et al. + # "Clustering on the unit hypersphere using von Mises-Fisher distributions." + # Journal of Machine Learning Research 6.Sep (2005): 1345-1382. + # By mic (https://stats.stackexchange.com/users/67168/mic), + # Estimating kappa of von Mises distribution, URL (version: 2015-06-12): + # https://stats.stackexchange.com/q/156692 + kappa = (samples_r * 2 - samples_r**3) / (1 - samples_r**2) + lr = 1e-2 + kappa.requires_grad = True + bfgs = optim.LBFGS([kappa], lr=lr) + + def bfgs_closure(): + bfgs.zero_grad() + obj = _log_modified_bessel_fn(kappa, order=1) - _log_modified_bessel_fn( + kappa, order=0 + ) + obj = (obj - samples_r.log()).abs() + obj.backward() + return obj + + for i in range(n_iter): + bfgs.step(bfgs_closure) + return mu, kappa.detach() + + +@pytest.mark.parametrize("loc", [-math.pi / 2.0, 0.0, math.pi / 2.0]) +@pytest.mark.parametrize( + "concentration", + [ + skipif_param( + 0.01, condition="CUDA_TEST" in os.environ, reason="low precision." + ), + 0.03, + 0.1, + 0.3, + 1.0, + 3.0, + 10.0, + 30.0, + 100.0, + ], +) +def test_sample(loc, concentration, n_samples=int(1e6), n_iter=50): + prob = VonMises(loc, concentration) + samples = prob.sample((n_samples,)) + mu, kappa = _fit_params_from_samples(samples, n_iter=n_iter) + assert abs(loc - mu) < 0.1 + assert abs(concentration - kappa) < concentration * 0.1 + + +@pytest.mark.parametrize( + "concentration", [0.01, 0.03, 0.1, 0.3, 1.0, 3.0, 10.0, 30.0, 100.0] +) +def test_log_prob_normalized(concentration): + grid = torch.arange(0.0, 2 * math.pi, 1e-4) + prob = VonMises(0.0, concentration).log_prob(grid).exp() + norm = prob.mean().item() * 2 * math.pi + assert abs(norm - 1) < 1e-3, norm + + +@pytest.mark.parametrize("loc", [-math.pi / 2.0, 0.0, math.pi / 2.0]) +@pytest.mark.parametrize("concentration", [0.03, 0.1, 0.3, 1.0, 3.0, 10.0, 30.0]) +def test_von_mises_gof(loc, concentration): + d = VonMises(loc, concentration) + samples = d.sample(torch.Size([100000])) + probs = d.log_prob(samples).exp() + gof = auto_goodness_of_fit(samples, probs, dim=1) + assert gof > TEST_FAILURE_RATE + + +@pytest.mark.parametrize("scale", [0.1, 0.5, 0.9, 1.0, 1.1, 2.0, 10.0]) +def test_von_mises_3d(scale): + concentration = torch.randn(3) + concentration = concentration * (scale / concentration.norm(2)) + + num_samples = 100000 + samples = torch.randn(num_samples, 3) + samples = samples / samples.norm(2, dim=-1, keepdim=True) + + d = VonMises3D(concentration, validate_args=True) + actual_total = d.log_prob(samples).exp().mean() + expected_total = 1 / (4 * math.pi) + ratio = actual_total / expected_total + assert torch.abs(ratio - 1) < 0.01, ratio + + +@pytest.mark.parametrize("scale", [0.1, 0.5, 0.9, 1.0, 1.1, 2.0, 10.0]) +def test_von_mises_3d_gof(scale): + concentration = torch.randn(3) + concentration = concentration * (scale / concentration.norm(2)) + d = VonMises3D(concentration, validate_args=True) + + with xfail_if_not_implemented(): + samples = d.sample(torch.Size([2000])) + probs = d.log_prob(samples).exp() + + gof = auto_goodness_of_fit(samples, probs, dim=2) + assert gof > TEST_FAILURE_RATE diff --git a/pyro/source/tests/distributions/test_zero_inflated.py b/pyro/source/tests/distributions/test_zero_inflated.py new file mode 100644 index 0000000000000000000000000000000000000000..f7872add6b57f195351000046462fb3eaee0a438 --- /dev/null +++ b/pyro/source/tests/distributions/test_zero_inflated.py @@ -0,0 +1,140 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import pytest +import torch + +from pyro.distributions import ( + Delta, + NegativeBinomial, + Normal, + Poisson, + ZeroInflatedDistribution, + ZeroInflatedNegativeBinomial, + ZeroInflatedPoisson, +) +from pyro.distributions.util import broadcast_shape +from tests.common import assert_close + + +@pytest.mark.parametrize("gate_shape", [(), (2,), (3, 1), (3, 2)]) +@pytest.mark.parametrize("base_shape", [(), (2,), (3, 1), (3, 2)]) +def test_zid_shape(gate_shape, base_shape): + gate = torch.rand(gate_shape) + base_dist = Normal(torch.randn(base_shape), torch.randn(base_shape).exp()) + + d = ZeroInflatedDistribution(base_dist, gate=gate) + assert d.batch_shape == broadcast_shape(gate_shape, base_shape) + assert d.support == base_dist.support + + d2 = d.expand([4, 3, 2]) + assert d2.batch_shape == (4, 3, 2) + + +@pytest.mark.parametrize("rate", [0.1, 0.5, 0.9, 1.0, 1.1, 2.0, 10.0]) +def test_zip_0_gate(rate): + # if gate is 0 ZIP is Poisson + zip1 = ZeroInflatedPoisson(torch.tensor(rate), gate=torch.zeros(1)) + zip2 = ZeroInflatedPoisson(torch.tensor(rate), gate_logits=torch.tensor(-99.9)) + pois = Poisson(torch.tensor(rate)) + s = pois.sample((20,)) + zip1_prob = zip1.log_prob(s) + zip2_prob = zip2.log_prob(s) + pois_prob = pois.log_prob(s) + assert_close(zip1_prob, pois_prob) + assert_close(zip2_prob, pois_prob) + + +@pytest.mark.parametrize("rate", [0.1, 0.5, 0.9, 1.0, 1.1, 2.0, 10.0]) +def test_zip_1_gate(rate): + # if gate is 1 ZIP is Delta(0) + zip1 = ZeroInflatedPoisson(torch.tensor(rate), gate=torch.ones(1)) + zip2 = ZeroInflatedPoisson(torch.tensor(rate), gate_logits=torch.tensor(math.inf)) + delta = Delta(torch.zeros(1)) + s = torch.tensor([0.0, 1.0]) + zip1_prob = zip1.log_prob(s) + zip2_prob = zip2.log_prob(s) + delta_prob = delta.log_prob(s) + assert_close(zip1_prob, delta_prob) + assert_close(zip2_prob, delta_prob) + + +@pytest.mark.parametrize("gate", [0.0, 0.25, 0.5, 0.75, 1.0]) +@pytest.mark.parametrize("rate", [0.1, 0.5, 0.9, 1.0, 1.1, 2.0, 10.0]) +def test_zip_mean_variance(gate, rate): + num_samples = 1000000 + zip_ = ZeroInflatedPoisson(torch.tensor(rate), gate=torch.tensor(gate)) + s = zip_.sample((num_samples,)) + expected_mean = zip_.mean + estimated_mean = s.mean() + expected_std = zip_.stddev + estimated_std = s.std() + assert_close(expected_mean, estimated_mean, atol=1e-02) + assert_close(expected_std, estimated_std, atol=1e-02) + + +@pytest.mark.parametrize("total_count", [0.1, 0.5, 0.9, 1.0, 1.1, 2.0, 10.0]) +@pytest.mark.parametrize("probs", [0.1, 0.5, 0.9]) +def test_zinb_0_gate(total_count, probs): + # if gate is 0 ZINB is NegativeBinomial + zinb1 = ZeroInflatedNegativeBinomial( + total_count=torch.tensor(total_count), + gate=torch.zeros(1), + probs=torch.tensor(probs), + ) + zinb2 = ZeroInflatedNegativeBinomial( + total_count=torch.tensor(total_count), + gate_logits=torch.tensor(-99.9), + probs=torch.tensor(probs), + ) + neg_bin = NegativeBinomial(torch.tensor(total_count), probs=torch.tensor(probs)) + s = neg_bin.sample((20,)) + zinb1_prob = zinb1.log_prob(s) + zinb2_prob = zinb2.log_prob(s) + neg_bin_prob = neg_bin.log_prob(s) + assert_close(zinb1_prob, neg_bin_prob) + assert_close(zinb2_prob, neg_bin_prob) + + +@pytest.mark.parametrize("total_count", [0.1, 0.5, 0.9, 1.0, 1.1, 2.0, 10.0]) +@pytest.mark.parametrize("probs", [0.1, 0.5, 0.9]) +def test_zinb_1_gate(total_count, probs): + # if gate is 1 ZINB is Delta(0) + zinb1 = ZeroInflatedNegativeBinomial( + total_count=torch.tensor(total_count), + gate=torch.ones(1), + probs=torch.tensor(probs), + ) + zinb2 = ZeroInflatedNegativeBinomial( + total_count=torch.tensor(total_count), + gate_logits=torch.tensor(math.inf), + probs=torch.tensor(probs), + ) + delta = Delta(torch.zeros(1)) + s = torch.tensor([0.0, 1.0]) + zinb1_prob = zinb1.log_prob(s) + zinb2_prob = zinb2.log_prob(s) + delta_prob = delta.log_prob(s) + assert_close(zinb1_prob, delta_prob) + assert_close(zinb2_prob, delta_prob) + + +@pytest.mark.parametrize("gate", [0.0, 0.25, 0.5, 0.75, 1.0]) +@pytest.mark.parametrize("total_count", [0.1, 0.5, 0.9, 1.0, 1.1, 2.0, 10.0]) +@pytest.mark.parametrize("logits", [-0.5, 0.5, -0.9, 1.9]) +def test_zinb_mean_variance(gate, total_count, logits): + num_samples = 1000000 + zinb_ = ZeroInflatedNegativeBinomial( + total_count=torch.tensor(total_count), + gate=torch.tensor(gate), + logits=torch.tensor(logits), + ) + s = zinb_.sample((num_samples,)) + expected_mean = zinb_.mean + estimated_mean = s.mean() + expected_std = zinb_.stddev + estimated_std = s.std() + assert_close(expected_mean, estimated_mean, atol=1e-01) + assert_close(expected_std, estimated_std, atol=1e-1) diff --git a/pyro/source/tests/distributions/testing/test_gof.py b/pyro/source/tests/distributions/testing/test_gof.py new file mode 100644 index 0000000000000000000000000000000000000000..f8242764b6ec9864c5ce8e718bc37a7b3723544c --- /dev/null +++ b/pyro/source/tests/distributions/testing/test_gof.py @@ -0,0 +1,20 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import torch +import torch.distributions as dist + +from pyro.distributions.testing.gof import multinomial_goodness_of_fit + + +def test_multinomial_goodness_of_fit(): + N = 100000 + K = 20 + logits = torch.randn(K) + probs = (logits - logits.logsumexp(-1)).exp() + d = dist.Categorical(probs) + samples = d.sample((N,)) + counts = torch.zeros(K, dtype=torch.long) + counts.scatter_add_(0, samples, torch.ones(N, dtype=torch.long)) + gof = multinomial_goodness_of_fit(probs, counts, plot=True) + assert gof > 0.1 diff --git a/pyro/source/tests/distributions/testing/test_special.py b/pyro/source/tests/distributions/testing/test_special.py new file mode 100644 index 0000000000000000000000000000000000000000..230fcda21bee9419f09321ed08a85fe8f98060f9 --- /dev/null +++ b/pyro/source/tests/distributions/testing/test_special.py @@ -0,0 +1,17 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import itertools + +import numpy as np +import scipy + +from pyro.distributions.testing.special import chi2sf +from tests.common import assert_close + + +def test_chi2sf(): + xlist = np.linspace(0, 100, 500) + slist = np.arange(1, 41, 1.5) + for s, x in itertools.product(slist, xlist): + assert_close(scipy.stats.chi2.sf(x, s), chi2sf(x, s)) diff --git a/pyro/source/tests/doctest_fixtures.py b/pyro/source/tests/doctest_fixtures.py new file mode 100644 index 0000000000000000000000000000000000000000..30d65650d283d522daefc07637755d7419ebbe12 --- /dev/null +++ b/pyro/source/tests/doctest_fixtures.py @@ -0,0 +1,35 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import numpy +import pytest +import torch + +import pyro +import pyro.contrib.autoname.named as named +import pyro.contrib.gp as gp +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.infer import EmpiricalMarginal +from pyro.infer.mcmc import HMC, NUTS +from pyro.infer.mcmc.api import MCMC +from pyro.params import param_with_module_name + +# Fix seed for all doctest runs. +pyro.set_rng_seed(0) + + +@pytest.fixture(autouse=True) +def add_imports(doctest_namespace): + doctest_namespace["dist"] = dist + doctest_namespace["gp"] = gp + doctest_namespace["named"] = named + doctest_namespace["np"] = numpy + doctest_namespace["param_with_module_name"] = param_with_module_name + doctest_namespace["poutine"] = poutine + doctest_namespace["pyro"] = pyro + doctest_namespace["torch"] = torch + doctest_namespace["EmpiricalMarginal"] = EmpiricalMarginal + doctest_namespace["HMC"] = HMC + doctest_namespace["MCMC"] = MCMC + doctest_namespace["NUTS"] = NUTS diff --git a/pyro/source/tests/infer/__init__.py b/pyro/source/tests/infer/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/tests/infer/autoguide/__init__.py b/pyro/source/tests/infer/autoguide/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/tests/infer/autoguide/conftest.py b/pyro/source/tests/infer/autoguide/conftest.py new file mode 100644 index 0000000000000000000000000000000000000000..17f112a1adcff10d70cedf6655fb5ddbf4fcab0c --- /dev/null +++ b/pyro/source/tests/infer/autoguide/conftest.py @@ -0,0 +1,13 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest + + +def pytest_collection_modifyitems(items): + for item in items: + if item.nodeid.startswith("tests/infer/autoguide"): + if "stage" not in item.keywords: + item.add_marker(pytest.mark.stage("unit")) + if "init" not in item.keywords: + item.add_marker(pytest.mark.init(rng_seed=123)) diff --git a/pyro/source/tests/infer/autoguide/test_gaussian.py b/pyro/source/tests/infer/autoguide/test_gaussian.py new file mode 100644 index 0000000000000000000000000000000000000000..b0bb1284d7203bedec2acd50f2fdac686e3761d2 --- /dev/null +++ b/pyro/source/tests/infer/autoguide/test_gaussian.py @@ -0,0 +1,874 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from collections import OrderedDict, namedtuple + +import pytest +import torch + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.infer import SVI, JitTrace_ELBO, Predictive, Trace_ELBO +from pyro.infer.autoguide import AutoGaussian, AutoGuideList +from pyro.infer.autoguide.gaussian import ( + AutoGaussianDense, + AutoGaussianFunsor, + _break_plates, +) +from pyro.infer.reparam import LocScaleReparam +from pyro.optim import ClippedAdam +from tests.common import assert_close, assert_equal, xfail_if_not_implemented + +BACKENDS = [ + "dense", + pytest.param("funsor", marks=[pytest.mark.stage("funsor")]), +] + + +def test_break_plates(): + shape = torch.Size([5, 4, 3, 2]) + x = torch.arange(shape.numel()).reshape(shape) + + MockPlate = namedtuple("MockPlate", "dim, size") + h = MockPlate(-4, 6) + i = MockPlate(-3, 5) + j = MockPlate(-2, 4) + k = MockPlate(-1, 3) + + actual = _break_plates(x, {i, j, k}, set()) + expected = x.reshape(-1) + assert_equal(actual, expected) + + actual = _break_plates(x, {i, j, k}, {i}) + expected = x.reshape(5, 1, 1, -1) + assert_equal(actual, expected) + + actual = _break_plates(x, {i, j, k}, {j}) + expected = x.permute((1, 0, 2, 3)).reshape(4, 1, -1) + assert_equal(actual, expected) + + actual = _break_plates(x, {i, j, k}, {k}) + expected = x.permute((2, 0, 1, 3)).reshape(3, -1) + assert_equal(actual, expected) + + actual = _break_plates(x, {i, j, k}, {i, j}) + expected = x.reshape(5, 4, 1, -1) + assert_equal(actual, expected) + + actual = _break_plates(x, {i, j, k}, {i, k}) + expected = x.permute((0, 2, 1, 3)).reshape(5, 1, 3, -1) + assert_equal(actual, expected) + + actual = _break_plates(x, {i, j, k}, {j, k}) + expected = x.permute((1, 2, 0, 3)).reshape(4, 3, -1) + assert_equal(actual, expected) + + actual = _break_plates(x, {i, j, k}, {i, j, k}) + expected = x + assert_equal(actual, expected) + + actual = _break_plates(x, {i, j, k}, {h, i, j, k}) + expected = x + assert_equal(actual, expected) + + +@pytest.mark.parametrize("backend", BACKENDS) +def test_backend_dispatch(backend): + def model(): + pyro.sample("x", dist.Normal(0, 1)) + + guide = AutoGaussian(model, backend=backend) + if backend == "dense": + assert isinstance(guide, AutoGaussianDense) + guide = AutoGaussianDense(model) + assert isinstance(guide, AutoGaussianDense) + elif backend == "funsor": + assert isinstance(guide, AutoGaussianFunsor) + guide = AutoGaussianFunsor(model) + assert isinstance(guide, AutoGaussianFunsor) + else: + raise ValueError(f"Unknown backend: {backend}") + + +def check_structure(model, expected_str, expected_dependencies=None): + guide = AutoGaussian(model, backend="dense") + guide() # initialize + if expected_dependencies is not None: + assert guide.dependencies == expected_dependencies + + # Inject random noise into all unconstrained parameters. + for parameter in guide.parameters(): + parameter.data.normal_() + + with torch.no_grad(): + # Check flatten & unflatten. + mvn = guide._dense_get_mvn() + expected = mvn.sample() + samples = guide._dense_unflatten(expected) + actual = guide._dense_flatten(samples) + assert_equal(actual, expected) + + # Check sparsity structure. + precision = mvn.precision_matrix + actual = precision.abs().gt(1e-5).long() + str_to_number = {"?": 1, ".": 0} + expected = torch.tensor( + [[str_to_number[c] for c in row if c != " "] for row in expected_str] + ) + assert (actual == expected).all() + + +def check_backends_agree(model): + guide1 = AutoGaussian(model, backend="dense") + guide2 = AutoGaussian(model, backend="funsor") + guide1() + with xfail_if_not_implemented(): + guide2() + + # Inject random noise into all unconstrained parameters. + params1 = dict(guide1.named_parameters()) + params2 = dict(guide2.named_parameters()) + assert set(params1) == set(params2) + for k, v in params1.items(): + v.data.add_(torch.zeros_like(v).normal_()) + params2[k].data.copy_(v.data) + names = sorted(params1) + + # Check densities agree between backends. + with torch.no_grad(), poutine.trace() as tr: + aux = guide2._sample_aux_values(temperature=1.0) + flat = guide1._dense_flatten(aux) + tr.trace.compute_log_prob() + log_prob_funsor = tr.trace.nodes["_AutoGaussianFunsor_latent"]["log_prob"] + with torch.no_grad(), poutine.trace() as tr: + with poutine.condition(data={"_AutoGaussianDense_latent": flat}): + guide1._sample_aux_values(temperature=1.0) + tr.trace.compute_log_prob() + log_prob_dense = tr.trace.nodes["_AutoGaussianDense_latent"]["log_prob"] + assert_equal(log_prob_funsor, log_prob_dense) + + # Check Monte Carlo estimate of entropy. + entropy1 = guide1._dense_get_mvn().entropy() + with pyro.plate("particle", 100000, dim=-3), poutine.trace() as tr: + guide2._sample_aux_values(temperature=1.0) + tr.trace.compute_log_prob() + entropy2 = -tr.trace.nodes["_AutoGaussianFunsor_latent"]["log_prob"].mean() + assert_close(entropy1, entropy2, atol=1e-2) + grads1 = torch.autograd.grad( + entropy1, [params1[k] for k in names], allow_unused=True + ) + grads2 = torch.autograd.grad( + entropy2, [params2[k] for k in names], allow_unused=True + ) + for name, grad1, grad2 in zip(names, grads1, grads2): + # Gradients should agree to very high precision. + if grad1 is None and grad2 is not None: + grad1 = torch.zeros_like(grad2) + elif grad2 is None and grad1 is not None: + grad2 = torch.zeros_like(grad1) + assert_close(grad1, grad2, msg=f"{name}:\n{grad1} vs {grad2}") + + # Check elbos agree between backends. + elbo = Trace_ELBO(num_particles=1000000, vectorize_particles=True) + loss1 = elbo.differentiable_loss(model, guide1) + loss2 = elbo.differentiable_loss(model, guide2) + assert_close(loss1, loss2, atol=1e-2, rtol=0.05) + grads1 = torch.autograd.grad(loss1, [params1[k] for k in names], allow_unused=True) + grads2 = torch.autograd.grad(loss2, [params2[k] for k in names], allow_unused=True) + for name, grad1, grad2 in zip(names, grads1, grads2): + assert_close( + grad1, grad2, atol=0.05, rtol=0.05, msg=f"{name}:\n{grad1} vs {grad2}" + ) + + +@pytest.mark.parametrize("backend", BACKENDS) +def test_structure_0(backend): + def model(): + a = pyro.sample("a", dist.Normal(0, 1)) + pyro.sample("b", dist.Normal(a, 1), obs=torch.ones(())) + + # size = 1 + structure = [ + "?", + ] + dependencies = { + "a": {"a": set()}, + "b": {"b": set(), "a": set()}, + } + if backend == "funsor": + check_backends_agree(model) + else: + check_structure(model, structure, dependencies) + + +@pytest.mark.parametrize("backend", BACKENDS) +def test_structure_1(backend): + def model(): + a = pyro.sample("a", dist.Normal(0, 1)) + with pyro.plate("i", 3): + pyro.sample("b", dist.Normal(a, 1), obs=torch.ones(3)) + + # size = 1 + structure = [ + "?", + ] + dependencies = { + "a": {"a": set()}, + "b": {"b": set(), "a": set()}, + } + if backend == "funsor": + check_backends_agree(model) + else: + check_structure(model, structure, dependencies) + + +@pytest.mark.parametrize("backend", BACKENDS) +def test_structure_2(backend): + def model(): + a = pyro.sample("a", dist.Normal(0, 1)) + b = pyro.sample("b", dist.Normal(a, 1)) + c = pyro.sample("c", dist.Normal(b, 1)) + pyro.sample("d", dist.Normal(c, 1), obs=torch.tensor(1.0)) + + # size = 1 + 1 + 1 = 3 + structure = [ + "? ? .", + "? ? ?", + ". ? ?", + ] + dependencies = { + "a": {"a": set()}, + "b": {"b": set(), "a": set()}, + "c": {"c": set(), "b": set()}, + "d": {"c": set(), "d": set()}, + } + if backend == "funsor": + check_backends_agree(model) + else: + check_structure(model, structure, dependencies) + + +@pytest.mark.parametrize("backend", BACKENDS) +def test_structure_3(backend): + def model(): + with pyro.plate("i", 2): + a = pyro.sample("a", dist.Normal(0, 1)) + b = pyro.sample("b", dist.Normal(a, 1)) + c = pyro.sample("c", dist.Normal(b, 1)) + pyro.sample("d", dist.Normal(c, 1), obs=torch.tensor(1.0)) + + # size = 2 + 2 + 2 = 6 + structure = [ + "? . ? . . .", + ". ? . ? . .", + "? . ? . ? .", + ". ? . ? . ?", + ". . ? . ? .", + ". . . ? . ?", + ] + dependencies = { + "a": {"a": set()}, + "b": {"b": set(), "a": set()}, + "c": {"c": set(), "b": set()}, + "d": {"c": set(), "d": set()}, + } + if backend == "funsor": + check_backends_agree(model) + else: + check_structure(model, structure, dependencies) + + +@pytest.mark.parametrize("backend", BACKENDS) +def test_structure_4(backend): + def model(): + a = pyro.sample("a", dist.Normal(0, 1)) + with pyro.plate("i", 2): + b = pyro.sample("b", dist.Normal(a, 1)) + c = pyro.sample("c", dist.Normal(b, 1)) + pyro.sample("d", dist.Normal(c.sum(), 1), obs=torch.tensor(1.0)) + + # size = 1 + 2 + 2 = 5 + structure = [ + "? ? ? . .", + "? ? . ? .", + "? . ? . ?", + ". ? . ? ?", + ". . ? ? ?", + ] + dependencies = { + "a": {"a": set()}, + "b": {"b": set(), "a": set()}, + "c": {"c": set(), "b": set()}, + "d": {"c": set(), "d": set()}, + } + if backend == "funsor": + check_backends_agree(model) + else: + check_structure(model, structure, dependencies) + + +@pytest.mark.parametrize("backend", BACKENDS) +def test_structure_5(backend): + def model(): + a = pyro.sample("a", dist.Normal(0, 1)) + b = pyro.sample("b", dist.Normal(0, 1)) + with pyro.plate("i", 2): + c = pyro.sample("c", dist.Normal(a, b.exp())) + pyro.sample("d", dist.Normal(c, 1), obs=torch.tensor(1.0)) + + # size = 1 + 1 + 2 = 4 + structure = [ + "? ? ? ?", + "? ? ? ?", + "? ? ? .", + "? ? . ?", + ] + if backend == "funsor": + check_backends_agree(model) + else: + check_structure(model, structure) + + +@pytest.mark.parametrize("backend", BACKENDS) +def test_structure_6(backend): + I, J = 2, 3 + + def model(): + i_plate = pyro.plate("i", I, dim=-1) + j_plate = pyro.plate("j", J, dim=-2) + with i_plate: + w = pyro.sample("w", dist.Normal(0, 1)) + with j_plate: + x = pyro.sample("x", dist.Normal(0, 1)) + with i_plate, j_plate: + y = pyro.sample("y", dist.Normal(w, x.exp())) + pyro.sample("z", dist.Normal(1, 1), obs=y) + + # size = 2 + 3 + 2 * 3 = 2 + 3 + 6 = 11 + structure = [ + "? . ? ? ? ? . ? . ? .", + ". ? ? ? ? . ? . ? . ?", + "? ? ? . . ? ? . . . .", + "? ? . ? . . . ? ? . .", + "? ? . . ? . . . . ? ?", + "? . ? . . ? . . . . .", + ". ? ? . . . ? . . . .", + "? . . ? . . . ? . . .", + ". ? . ? . . . . ? . .", + "? . . . ? . . . . ? .", + ". ? . . ? . . . . . ?", + ] + if backend == "funsor": + check_backends_agree(model) + else: + check_structure(model, structure) + + +@pytest.mark.parametrize("backend", BACKENDS) +def test_structure_7(backend): + I, J = 2, 3 + + def model(): + i_plate = pyro.plate("i", I, dim=-1) + j_plate = pyro.plate("j", J, dim=-2) + a = pyro.sample("a", dist.Normal(0, 1)) + with i_plate: + b = pyro.sample("b", dist.Normal(a, 1)) + with j_plate: + c = pyro.sample("c", dist.Normal(b.mean(), 1)) + d = pyro.sample("d", dist.Normal(c.mean(), 1)) + pyro.sample("e", dist.Normal(1, 1), obs=d) + + # size = 1 + 2 + 3 + 1 = 7 + structure = [ + "? ? ? . . . .", + "? ? ? ? ? ? .", + "? ? ? ? ? ? .", + ". ? ? ? ? ? ?", + ". ? ? ? ? ? ?", + ". ? ? ? ? ? ?", + ". . . ? ? ? ?", + ] + if backend == "funsor": + check_backends_agree(model) + else: + check_structure(model, structure) + + +@pytest.mark.parametrize("backend", BACKENDS) +def test_structure_8(backend): + def model(): + i_plate = pyro.plate("i", 2, dim=-1) + with i_plate: + a = pyro.sample("a", dist.Normal(0, 1)) + b = pyro.sample("b", dist.Normal(a.mean(-1), 1)) + with i_plate: + pyro.sample("c", dist.Normal(b, 1), obs=torch.ones(2)) + + # size = 2 + 1 = 3 + structure = [ + "? ? ?", + "? ? ?", + "? ? ?", + ] + if backend == "funsor": + check_backends_agree(model) + else: + check_structure(model, structure) + + +@pytest.mark.parametrize("backend", BACKENDS) +def test_broken_plates_smoke(backend): + def model(): + with pyro.plate("i", 2): + a = pyro.sample("a", dist.Normal(0, 1)) + pyro.sample("b", dist.Normal(a.mean(-1), 1), obs=torch.tensor(0.0)) + + guide = AutoGaussian(model, backend=backend) + svi = SVI(model, guide, ClippedAdam({"lr": 1e-8}), Trace_ELBO()) + for step in range(2): + with xfail_if_not_implemented(): + svi.step() + guide() + predictive = Predictive(model, guide=guide, num_samples=2) + predictive() + + +@pytest.mark.parametrize("backend", BACKENDS) +def test_intractable_smoke(backend): + def model(): + i_plate = pyro.plate("i", 2, dim=-1) + j_plate = pyro.plate("j", 3, dim=-2) + with i_plate: + a = pyro.sample("a", dist.Normal(0, 1)) + with j_plate: + b = pyro.sample("b", dist.Normal(0, 1)) + with i_plate, j_plate: + c = pyro.sample("c", dist.Normal(a + b, 1)) + pyro.sample("d", dist.Normal(c, 1), obs=torch.zeros(3, 2)) + + guide = AutoGaussian(model, backend=backend) + svi = SVI(model, guide, ClippedAdam({"lr": 1e-8}), Trace_ELBO()) + for step in range(2): + with xfail_if_not_implemented(): + svi.step() + guide() + predictive = Predictive(model, guide=guide, num_samples=2) + predictive() + + +# Simplified from https://github.com/pyro-cov/tree/master/pyrocov/mutrans.py +def pyrocov_model(dataset): + # Tensor shapes are commented at the end of some lines. + features = dataset["features"] + local_time = dataset["local_time"][..., None] # [T, P, 1] + T, P, _ = local_time.shape + S, F = features.shape + weekly_strains = dataset["weekly_strains"] + assert weekly_strains.shape == (T, P, S) + + # Sample global random variables. + coef_scale = pyro.sample("coef_scale", dist.InverseGamma(5e3, 1e2))[..., None] + rate_scale = pyro.sample("rate_scale", dist.LogNormal(-4, 2))[..., None] + init_loc_scale = pyro.sample("init_loc_scale", dist.LogNormal(0, 2))[..., None] + init_scale = pyro.sample("init_scale", dist.LogNormal(0, 2))[..., None] + + # Assume relative growth rate depends strongly on mutations and weakly on place. + coef_loc = torch.zeros(F) + coef = pyro.sample("coef", dist.Logistic(coef_loc, coef_scale).to_event(1)) # [F] + rate_loc = pyro.deterministic( + "rate_loc", 0.01 * coef @ features.T, event_dim=1 + ) # [S] + + # Assume initial infections depend strongly on strain and place. + init_loc = pyro.sample( + "init_loc", dist.Normal(torch.zeros(S), init_loc_scale).to_event(1) + ) # [S] + with pyro.plate("place", P, dim=-1): + rate = pyro.sample( + "rate", dist.Normal(rate_loc, rate_scale).to_event(1) + ) # [P, S] + init = pyro.sample( + "init", dist.Normal(init_loc, init_scale).to_event(1) + ) # [P, S] + + # Finally observe counts. + with pyro.plate("time", T, dim=-2): + logits = init + rate * local_time # [T, P, S] + pyro.sample( + "obs", + dist.Multinomial(logits=logits, validate_args=False), + obs=weekly_strains, + ) + + +# This is modified by relaxing rate from deterministic to latent. +def pyrocov_model_relaxed(dataset): + # Tensor shapes are commented at the end of some lines. + features = dataset["features"] + local_time = dataset["local_time"][..., None] # [T, P, 1] + T, P, _ = local_time.shape + S, F = features.shape + weekly_strains = dataset["weekly_strains"] + assert weekly_strains.shape == (T, P, S) + + # Sample global random variables. + coef_scale = pyro.sample("coef_scale", dist.InverseGamma(5e3, 1e2))[..., None] + rate_loc_scale = pyro.sample("rate_loc_scale", dist.LogNormal(-4, 2))[..., None] + rate_scale = pyro.sample("rate_scale", dist.LogNormal(-4, 2))[..., None] + init_loc_scale = pyro.sample("init_loc_scale", dist.LogNormal(0, 2))[..., None] + init_scale = pyro.sample("init_scale", dist.LogNormal(0, 2))[..., None] + + # Assume relative growth rate depends strongly on mutations and weakly on place. + coef_loc = torch.zeros(F) + coef = pyro.sample("coef", dist.Logistic(coef_loc, coef_scale).to_event(1)) # [F] + rate_loc = pyro.sample( + "rate_loc", + dist.Normal(0.01 * coef @ features.T, rate_loc_scale).to_event(1), + ) # [S] + + # Assume initial infections depend strongly on strain and place. + init_loc = pyro.sample( + "init_loc", dist.Normal(torch.zeros(S), init_loc_scale).to_event(1) + ) # [S] + with pyro.plate("place", P, dim=-1): + rate = pyro.sample( + "rate", dist.Normal(rate_loc, rate_scale).to_event(1) + ) # [P, S] + init = pyro.sample( + "init", dist.Normal(init_loc, init_scale).to_event(1) + ) # [P, S] + + # Finally observe counts. + with pyro.plate("time", T, dim=-2): + logits = init + rate * local_time # [T, P, S] + pyro.sample( + "obs", + dist.Multinomial(logits=logits, validate_args=False), + obs=weekly_strains, + ) + + +# This is modified by more precisely tracking plates for features and strains. +def pyrocov_model_plated(dataset): + # Tensor shapes are commented at the end of some lines. + features = dataset["features"] + local_time = dataset["local_time"][..., None] # [T, P, 1] + T, P, _ = local_time.shape + S, F = features.shape + weekly_strains = dataset["weekly_strains"] # [T, P, S] + assert weekly_strains.shape == (T, P, S) + feature_plate = pyro.plate("feature", F, dim=-1) + strain_plate = pyro.plate("strain", S, dim=-1) + place_plate = pyro.plate("place", P, dim=-2) + time_plate = pyro.plate("time", T, dim=-3) + + # Sample global random variables. + coef_scale = pyro.sample("coef_scale", dist.InverseGamma(5e3, 1e2)) + rate_loc_scale = pyro.sample("rate_loc_scale", dist.LogNormal(-4, 2)) + rate_scale = pyro.sample("rate_scale", dist.LogNormal(-4, 2)) + init_loc_scale = pyro.sample("init_loc_scale", dist.LogNormal(0, 2)) + init_scale = pyro.sample("init_scale", dist.LogNormal(0, 2)) + + with feature_plate: + coef = pyro.sample("coef", dist.Logistic(0, coef_scale)) # [F] + rate_loc_loc = 0.01 * coef @ features.T + with strain_plate: + rate_loc = pyro.sample( + "rate_loc", dist.Normal(rate_loc_loc, rate_loc_scale) + ) # [S] + init_loc = pyro.sample("init_loc", dist.Normal(0, init_loc_scale)) # [S] + with place_plate, strain_plate: + rate = pyro.sample("rate", dist.Normal(rate_loc, rate_scale)) # [P, S] + init = pyro.sample("init", dist.Normal(init_loc, init_scale)) # [P, S] + + # Finally observe counts. + with time_plate, place_plate: + logits = (init + rate * local_time)[..., None, :] # [T, P, 1, S] + pyro.sample( + "obs", + dist.Multinomial(logits=logits, validate_args=False), + obs=weekly_strains[..., None, :], + ) + + +# This is modified by replacing the multinomial likelihood with poisson. +def pyrocov_model_poisson(dataset): + # Tensor shapes are commented at the end of some lines. + features = dataset["features"] + local_time = dataset["local_time"][..., None] # [T, P, 1] + T, P, _ = local_time.shape + S, F = features.shape + weekly_strains = dataset["weekly_strains"] # [T, P, S] + if not torch._C._get_tracing_state(): + assert weekly_strains.shape == (T, P, S) + strain_plate = pyro.plate("strain", S, dim=-1) + place_plate = pyro.plate("place", P, dim=-2) + time_plate = pyro.plate("time", T, dim=-3) + + # Sample global random variables. + coef_scale = pyro.sample("coef_scale", dist.LogNormal(-4, 2)) + rate_loc_scale = pyro.sample("rate_loc_scale", dist.LogNormal(-4, 2)) + rate_scale = pyro.sample("rate_scale", dist.LogNormal(-4, 2)) + init_loc_scale = pyro.sample("init_loc_scale", dist.LogNormal(0, 2)) + init_scale = pyro.sample("init_scale", dist.LogNormal(0, 2)) + pois_loc = pyro.sample("pois_loc", dist.Normal(0, 2)) + pois_scale = pyro.sample("pois_scale", dist.LogNormal(0, 2)) + + coef = pyro.sample( + "coef", dist.Logistic(torch.zeros(F), coef_scale).to_event(1) + ) # [F] + rate_loc_loc = 0.01 * coef @ features.T + with strain_plate: + rate_loc = pyro.sample( + "rate_loc", dist.Normal(rate_loc_loc, rate_loc_scale) + ) # [S] + init_loc = pyro.sample("init_loc", dist.Normal(0, init_loc_scale)) # [S] + with place_plate, strain_plate: + rate = pyro.sample("rate", dist.Normal(rate_loc, rate_scale)) # [P, S] + init = pyro.sample("init", dist.Normal(init_loc, init_scale)) # [P, S] + + # Finally observe counts. + with time_plate, place_plate: + pois = pyro.sample("pois", dist.LogNormal(pois_loc, pois_scale)) + with time_plate, place_plate, strain_plate: + # Note .softmax() breaks conditional independence over strain, but only + # weakly. We could directly call .exp(), but .softmax is more + # numerically stable. + logits = pois * (init + rate * local_time).softmax(-1) # [T, P, S] + pyro.sample("obs", dist.Poisson(logits), obs=weekly_strains) + + +class PoissonGuide(AutoGuideList): + def __init__(self, model, backend): + super().__init__(model) + self.append( + AutoGaussian(poutine.block(model, hide_fn=self.hide_fn_1), backend=backend) + ) + self.append( + AutoGaussian(poutine.block(model, hide_fn=self.hide_fn_2), backend=backend) + ) + + @staticmethod + def hide_fn_1(msg): + return msg["type"] == "sample" and "pois" in msg["name"] + + @staticmethod + def hide_fn_2(msg): + return msg["type"] == "sample" and "pois" not in msg["name"] + + +PYRO_COV_MODELS = [ + (pyrocov_model, AutoGaussian), + (pyrocov_model_relaxed, AutoGaussian), + (pyrocov_model_plated, AutoGaussian), + (pyrocov_model_poisson, PoissonGuide), +] + + +@pytest.mark.parametrize("model, Guide", PYRO_COV_MODELS) +@pytest.mark.parametrize("backend", BACKENDS) +def test_pyrocov_smoke(model, Guide, backend): + T, P, S, F = 3, 4, 5, 6 + dataset = { + "features": torch.randn(S, F), + "local_time": torch.randn(T, P), + "weekly_strains": torch.randn(T, P, S).exp().round(), + } + + guide = Guide(model, backend=backend) + svi = SVI(model, guide, ClippedAdam({"lr": 1e-8}), Trace_ELBO()) + for step in range(2): + with xfail_if_not_implemented(): + svi.step(dataset) + guide(dataset) + predictive = Predictive(model, guide=guide, num_samples=2) + predictive(dataset) + + +@pytest.mark.parametrize("model, Guide", PYRO_COV_MODELS) +@pytest.mark.parametrize("backend", BACKENDS) +def test_pyrocov_reparam(model, Guide, backend): + T, P, S, F = 2, 3, 4, 5 + dataset = { + "features": torch.randn(S, F), + "local_time": torch.randn(T, P), + "weekly_strains": torch.randn(T, P, S).exp().round(), + } + + # Reparametrize the model. + config = { + "coef": LocScaleReparam(), + "rate_loc": None if model is pyrocov_model else LocScaleReparam(), + "rate": LocScaleReparam(), + "init_loc": LocScaleReparam(), + "init": LocScaleReparam(), + } + model = poutine.reparam(model, config) + guide = Guide(model, backend=backend) + svi = SVI(model, guide, ClippedAdam({"lr": 1e-8}), Trace_ELBO()) + for step in range(2): + with xfail_if_not_implemented(): + svi.step(dataset) + guide(dataset) + predictive = Predictive(model, guide=guide, num_samples=2) + predictive(dataset) + + +@pytest.mark.stage("funsor") +def test_pyrocov_structure(): + from funsor import Bint, Real, Reals + + T, P, S, F = 2, 3, 4, 5 + dataset = { + "features": torch.randn(S, F), + "local_time": torch.randn(T, P), + "weekly_strains": torch.randn(T, P, S).exp().round(), + } + + guide = PoissonGuide(pyrocov_model_poisson, backend="funsor") + guide(dataset) # initialize + guide = guide[0] # pull out AutoGaussian part of PoissonGuide + + expected_plates = frozenset(["place", "strain"]) + assert guide._funsor_plates == expected_plates + + expected_eliminate = frozenset( + [ + "coef", + "coef_scale", + "init", + "init_loc", + "init_loc_scale", + "init_scale", + "place", + "rate", + "rate_loc", + "rate_loc_scale", + "rate_scale", + "strain", + ] + ) + assert guide._funsor_eliminate == expected_eliminate + + expected_factor_inputs = { + "coef_scale": OrderedDict([("coef_scale", Real)]), + "rate_loc_scale": OrderedDict([("rate_loc_scale", Real)]), + "rate_scale": OrderedDict([("rate_scale", Real)]), + "init_loc_scale": OrderedDict([("init_loc_scale", Real)]), + "init_scale": OrderedDict([("init_scale", Real)]), + "coef": OrderedDict([("coef", Reals[5]), ("coef_scale", Real)]), + "rate_loc": OrderedDict( + [ + ("strain", Bint[4]), + ("rate_loc", Real), + ("rate_loc_scale", Real), + ("coef", Reals[5]), + ] + ), + "init_loc": OrderedDict( + [ + ("strain", Bint[4]), + ("init_loc", Real), + ("init_loc_scale", Real), + ] + ), + "rate": OrderedDict( + [ + ("place", Bint[3]), + ("strain", Bint[4]), + ("rate", Real), + ("rate_scale", Real), + ("rate_loc", Real), + ] + ), + "init": OrderedDict( + [ + ("place", Bint[3]), + ("strain", Bint[4]), + ("init", Real), + ("init_scale", Real), + ("init_loc", Real), + ] + ), + "obs": OrderedDict( + [ + ("place", Bint[3]), + ("strain", Bint[4]), + ("rate", Real), + ("init", Real), + ] + ), + } + assert guide._funsor_factor_inputs == expected_factor_inputs + + +@pytest.mark.parametrize("jit", [False, True], ids=["nojit", "jit"]) +@pytest.mark.parametrize("backend", BACKENDS) +def test_profile(backend, jit, n=1, num_steps=1, log_every=1): + """ + Helper function for profiling. + """ + print("Generating fake data") + model = pyrocov_model_poisson + T, P, S, F = min(n, 50), n + 1, n + 2, n + 3 + dataset = { + "features": torch.randn(S, F), + "local_time": torch.randn(T, P), + "weekly_strains": torch.randn(T, P, S).exp().round(), + } + + print("Initializing guide") + guide = PoissonGuide(model, backend=backend) + guide(dataset) # initialize + print("Parameter shapes:") + for name, param in guide.named_parameters(): + print(f" {name}: {tuple(param.shape)}") + + print("Training") + Elbo = JitTrace_ELBO if jit else Trace_ELBO + elbo = Elbo(max_plate_nesting=3, ignore_jit_warnings=True) + svi = SVI(model, guide, ClippedAdam({"lr": 1e-8}), elbo) + for step in range(num_steps): + loss = svi.step(dataset) + if log_every and step % log_every == 0: + print(f"step {step} loss = {loss}") + + +if __name__ == "__main__": + import argparse + import cProfile + + # Usage: time python -m tests.infer.autoguide.test_autoguide + parser = argparse.ArgumentParser(description="Profiler for pyro-cov model") + parser.add_argument("-b", "--backend", default="funsor") + parser.add_argument("-s", "--size", default=10, type=int) + parser.add_argument("-n", "--num-steps", default=1001, type=int) + parser.add_argument("-fp64", "--double", action="store_true") + parser.add_argument("-fp32", "--float", action="store_false", dest="double") + parser.add_argument("--cuda", action="store_true") + parser.add_argument("--cpu", dest="cuda", action="store_false") + parser.add_argument("--jit", default=True, action="store_true") + parser.add_argument("--no-jit", dest="jit", action="store_false") + parser.add_argument("-l", "--log-every", default=1, type=int) + parser.add_argument("-p", "--profile") + args = parser.parse_args() + + torch.set_default_dtype(torch.double if args.double else torch.float) + if args.cuda: + torch.set_default_device("cuda") + + if args.profile: + p = cProfile.Profile() + p.enable() + test_profile( + backend=args.backend, + jit=args.jit, + n=args.size, + num_steps=args.num_steps, + log_every=args.log_every, + ) + if args.profile: + p.disable() + p.dump_stats(args.profile) diff --git a/pyro/source/tests/infer/autoguide/test_inference.py b/pyro/source/tests/infer/autoguide/test_inference.py new file mode 100644 index 0000000000000000000000000000000000000000..17c0ffbeb1b3bec66935cf6add671af2c414bbe8 --- /dev/null +++ b/pyro/source/tests/infer/autoguide/test_inference.py @@ -0,0 +1,255 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging +from functools import partial + +import numpy as np +import pytest +import torch +from torch.distributions import biject_to, constraints + +import pyro +import pyro.distributions as dist +import pyro.optim as optim +from pyro.distributions.transforms import block_autoregressive, iterated +from pyro.infer import SVI, Trace_ELBO, TraceMeanField_ELBO +from pyro.infer.autoguide import ( + AutoDiagonalNormal, + AutoIAFNormal, + AutoLaplaceApproximation, + AutoLowRankMultivariateNormal, + AutoMultivariateNormal, +) +from pyro.infer.autoguide.guides import AutoNormalizingFlow +from tests.common import assert_equal +from tests.integration_tests.test_conjugate_gaussian_models import GaussianChain + +logger = logging.getLogger(__name__) +pytestmark = pytest.mark.stage("integration", "integration_batch_2") + + +# conjugate model to test AutoGuide logic from end-to-end (this has a non-mean-field posterior) +class AutoGaussianChain(GaussianChain): + # this is gross but we need to convert between different posterior factorizations + def compute_target(self, N): + self.target_auto_mus = torch.zeros(N + 1) + self.target_auto_diag_cov = torch.zeros(N + 1) + self.target_auto_mus[-1] = self.target_mus[N].item() + self.target_auto_diag_cov[-1] = 1.0 / self.lambda_posts[-1].item() + for n in range(N - 1, 0, -1): + self.target_auto_mus[n] += self.target_mus[n].item() + self.target_auto_mus[n] += ( + self.target_kappas[n].item() * self.target_auto_mus[n + 1] + ) + self.target_auto_diag_cov[n] += 1.0 / self.lambda_posts[n].item() + self.target_auto_diag_cov[n] += ( + self.target_kappas[n].item() ** 2 + ) * self.target_auto_diag_cov[n + 1] + + def test_multivariatate_normal_auto(self): + self.do_test_auto(3, reparameterized=True, n_steps=1001) + + def do_test_auto(self, N, reparameterized, n_steps): + logger.debug("\nGoing to do AutoGaussianChain test...") + pyro.clear_param_store() + self.setUp() + self.setup_chain(N) + self.compute_target(N) + self.guide = AutoMultivariateNormal(self.model) + logger.debug( + "target auto_loc: {}".format( + self.target_auto_mus[1:].detach().cpu().numpy() + ) + ) + logger.debug( + "target auto_diag_cov: {}".format( + self.target_auto_diag_cov[1:].detach().cpu().numpy() + ) + ) + + # TODO speed up with parallel num_particles > 1 + adam = optim.Adam({"lr": 0.01, "betas": (0.95, 0.999)}) + elbo = Trace_ELBO(num_particles=100, vectorize_particles=True) + svi = SVI(self.model, self.guide, adam, elbo) + + for k in range(n_steps): + loss = svi.step(reparameterized) + assert np.isfinite(loss), loss + + if k % 100 == 0 and k > 0 or k == n_steps - 1: + logger.debug( + "[step {}] guide mean parameter: {}".format( + k, self.guide.loc.detach().cpu().numpy() + ) + ) + L = self.guide.scale_tril * self.guide.scale[:, None] + diag_cov = torch.mm(L, L.t()).diag() + logger.debug( + "[step {}] auto_diag_cov: {}".format( + k, diag_cov.detach().cpu().numpy() + ) + ) + + assert_equal( + self.guide.loc.detach(), + self.target_auto_mus[1:], + prec=0.05, + msg="guide mean off", + ) + assert_equal( + diag_cov, + self.target_auto_diag_cov[1:], + prec=0.07, + msg="guide covariance off", + ) + + +@pytest.mark.parametrize( + "auto_class", + [ + AutoDiagonalNormal, + AutoMultivariateNormal, + AutoLowRankMultivariateNormal, + AutoLaplaceApproximation, + ], +) +@pytest.mark.parametrize("Elbo", [Trace_ELBO, TraceMeanField_ELBO]) +def test_auto_diagonal_gaussians(auto_class, Elbo): + n_steps = 3001 + + def model(): + pyro.sample("x", dist.Normal(-0.2, 1.2)) + pyro.sample("y", dist.Normal(0.2, 0.7)) + + if auto_class is AutoLowRankMultivariateNormal: + guide = auto_class(model, rank=1) + else: + guide = auto_class(model) + adam = optim.ClippedAdam( + {"lr": 0.01, "betas": (0.95, 0.999), "lrd": 0.1 ** (1 / n_steps)} + ) + svi = SVI(model, guide, adam, loss=Elbo()) + + for k in range(n_steps): + loss = svi.step() + assert np.isfinite(loss), loss + + if auto_class is AutoLaplaceApproximation: + guide = guide.laplace_approximation() + + loc, scale = guide._loc_scale() + + expected_loc = torch.tensor([-0.2, 0.2]) + assert_equal( + loc.detach(), + expected_loc, + prec=0.05, + msg="\n".join( + [ + "Incorrect guide loc. Expected:", + str(expected_loc.cpu().numpy()), + "Actual:", + str(loc.detach().cpu().numpy()), + ] + ), + ) + expected_scale = torch.tensor([1.2, 0.7]) + assert_equal( + scale.detach(), + expected_scale, + prec=0.08, + msg="\n".join( + [ + "Incorrect guide scale. Expected:", + str(expected_scale.cpu().numpy()), + "Actual:", + str(scale.detach().cpu().numpy()), + ] + ), + ) + + +@pytest.mark.parametrize( + "auto_class", + [ + AutoDiagonalNormal, + AutoMultivariateNormal, + AutoLowRankMultivariateNormal, + AutoLaplaceApproximation, + ], +) +def test_auto_transform(auto_class): + n_steps = 3500 + + def model(): + pyro.sample("x", dist.LogNormal(0.2, 0.7)) + + if auto_class is AutoLowRankMultivariateNormal: + guide = auto_class(model, rank=1) + else: + guide = auto_class(model) + adam = optim.Adam({"lr": 0.001, "betas": (0.90, 0.999)}) + svi = SVI(model, guide, adam, loss=Trace_ELBO()) + + for k in range(n_steps): + loss = svi.step() + assert np.isfinite(loss), loss + + if auto_class is AutoLaplaceApproximation: + guide = guide.laplace_approximation() + + loc, scale = guide._loc_scale() + assert_equal(loc.detach(), torch.tensor([0.2]), prec=0.04, msg="guide mean off") + assert_equal( + scale.detach(), torch.tensor([0.7]), prec=0.04, msg="guide covariance off" + ) + + +@pytest.mark.parametrize( + "auto_class", + [ + AutoDiagonalNormal, + AutoIAFNormal, + AutoMultivariateNormal, + AutoLowRankMultivariateNormal, + AutoLaplaceApproximation, + lambda m: AutoNormalizingFlow(m, partial(iterated, 2, block_autoregressive)), + ], +) +@pytest.mark.parametrize("Elbo", [Trace_ELBO, TraceMeanField_ELBO]) +def test_auto_dirichlet(auto_class, Elbo): + num_steps = 2000 + prior = torch.tensor([0.5, 1.0, 1.5, 3.0]) + data = torch.tensor([0] * 4 + [1] * 2 + [2] * 5).long() + posterior = torch.tensor([4.5, 3.0, 6.5, 3.0]) + + def model(data): + p = pyro.sample("p", dist.Dirichlet(prior)) + with pyro.plate("data_plate"): + pyro.sample("data", dist.Categorical(p).expand_by(data.shape), obs=data) + + guide = auto_class(model) + svi = SVI(model, guide, optim.Adam({"lr": 0.003}), loss=Elbo()) + + for _ in range(num_steps): + loss = svi.step(data) + assert np.isfinite(loss), loss + + expected_mean = posterior / posterior.sum() + if isinstance(guide, (AutoIAFNormal, AutoNormalizingFlow)): + loc = guide.transform(torch.zeros(guide.latent_dim)) + else: + loc = guide.loc + actual_mean = biject_to(constraints.simplex)(loc) + assert_equal( + actual_mean, + expected_mean, + prec=0.2, + msg="".join( + [ + "\nexpected {}".format(expected_mean.detach().cpu().numpy()), + "\n actual {}".format(actual_mean.detach().cpu().numpy()), + ] + ), + ) diff --git a/pyro/source/tests/infer/autoguide/test_mean_field_entropy.py b/pyro/source/tests/infer/autoguide/test_mean_field_entropy.py new file mode 100644 index 0000000000000000000000000000000000000000..0558ef46048bf09795476bb5f898658e00325309 --- /dev/null +++ b/pyro/source/tests/infer/autoguide/test_mean_field_entropy.py @@ -0,0 +1,38 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import scipy.special as sc +import torch + +import pyro +import pyro.distributions as dist +from pyro.infer.autoguide.utils import mean_field_entropy +from tests.common import assert_equal + + +def mean_field_guide(batch_tensor, design): + # A batched variable + w_p = pyro.param("w_p", 0.2 * torch.ones(batch_tensor.shape)) + u_p = pyro.param("u_p", 0.5 * torch.ones(batch_tensor.shape)) + pyro.sample("w", dist.Bernoulli(w_p)) + pyro.sample("u", dist.Bernoulli(u_p)) + + +def h(p): + return -(sc.xlogy(p, p) + sc.xlog1py(1 - p, -p)) + + +@pytest.mark.parametrize( + "guide,args,expected_entropy", + [ + ( + mean_field_guide, + (torch.Tensor([0.0]), None), + torch.Tensor([h(0.2) + h(0.5)]), + ), + (mean_field_guide, (torch.eye(2), None), (h(0.2) + h(0.5)) * torch.ones(2, 2)), + ], +) +def test_guide_entropy(guide, args, expected_entropy): + assert_equal(mean_field_entropy(guide, args), expected_entropy) diff --git a/pyro/source/tests/infer/conftest.py b/pyro/source/tests/infer/conftest.py new file mode 100644 index 0000000000000000000000000000000000000000..347a09819a8d813052a7bca70e056fc21b68ec66 --- /dev/null +++ b/pyro/source/tests/infer/conftest.py @@ -0,0 +1,13 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest + + +def pytest_collection_modifyitems(items): + for item in items: + if item.nodeid.startswith("tests/infer"): + if "stage" not in item.keywords: + item.add_marker(pytest.mark.stage("unit")) + if "init" not in item.keywords: + item.add_marker(pytest.mark.init(rng_seed=123)) diff --git a/pyro/source/tests/infer/enum_growth.ipynb b/pyro/source/tests/infer/enum_growth.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..c19b9a8e22a8ab9a1dead32157cafa88f9ac8bf8 --- /dev/null +++ b/pyro/source/tests/infer/enum_growth.ipynb @@ -0,0 +1,734 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Complexity of large contractions\n", + "\n", + "This notebook assesses computational complexity of `einsum` on large contractions. To generate data (pasted in the cells below), run:\n", + "```sh\n", + "GROWTH_SIZE=50 pytest -s tests/infer/test_enum.py -k growth\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from matplotlib import pyplot\n", + "\n", + "%matplotlib inline\n", + "%config InlineBackend.figure_format = 'svg'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sizes = None\n", + "costs = None\n", + "times1 = None\n", + "times2 = None\n", + "\n", + "\n", + "def plot(title):\n", + " pyplot.figure(figsize=(8, 5)).patch.set_color(\"white\")\n", + " pyplot.title(\"{} data structures\".format(title))\n", + " for name, series in sorted(costs.items()):\n", + " pyplot.plot(sizes, series, label=name)\n", + " pyplot.xlabel(\"problem size\")\n", + " pyplot.xlim(0, max(sizes))\n", + " pyplot.legend(loc=\"best\")\n", + " pyplot.tight_layout()\n", + "\n", + " pyplot.figure(figsize=(8, 5)).patch.set_color(\"white\")\n", + " pyplot.title(\"{} run time\".format(title))\n", + " pyplot.plot(sizes, times1, label=\"optim + compute\")\n", + " pyplot.plot(sizes, times2, label=\"compute\")\n", + " pyplot.xlim(0, max(sizes))\n", + " pyplot.xlabel(\"problem size\")\n", + " pyplot.ylabel(\"time (sec)\")\n", + " pyplot.legend(loc=\"best\")\n", + " pyplot.tight_layout()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sizes = [\n", + " 3,\n", + " 4,\n", + " 5,\n", + " 6,\n", + " 7,\n", + " 8,\n", + " 9,\n", + " 10,\n", + " 11,\n", + " 12,\n", + " 13,\n", + " 14,\n", + " 15,\n", + " 16,\n", + " 17,\n", + " 18,\n", + " 19,\n", + " 20,\n", + " 21,\n", + " 22,\n", + " 23,\n", + " 24,\n", + " 25,\n", + " 26,\n", + " 27,\n", + " 28,\n", + " 29,\n", + " 30,\n", + " 31,\n", + " 32,\n", + " 33,\n", + " 34,\n", + " 35,\n", + " 36,\n", + " 37,\n", + " 38,\n", + " 39,\n", + " 40,\n", + " 41,\n", + " 42,\n", + " 43,\n", + " 44,\n", + " 45,\n", + " 46,\n", + " 47,\n", + " 48,\n", + " 49,\n", + " 50,\n", + "]\n", + "costs = {\n", + " \"einsum\": [\n", + " 1,\n", + " 2,\n", + " 3,\n", + " 4,\n", + " 5,\n", + " 6,\n", + " 7,\n", + " 8,\n", + " 9,\n", + " 10,\n", + " 11,\n", + " 12,\n", + " 13,\n", + " 14,\n", + " 15,\n", + " 16,\n", + " 17,\n", + " 18,\n", + " 19,\n", + " 20,\n", + " 21,\n", + " 22,\n", + " 23,\n", + " 24,\n", + " 25,\n", + " 26,\n", + " 27,\n", + " 28,\n", + " 29,\n", + " 30,\n", + " 31,\n", + " 32,\n", + " 33,\n", + " 34,\n", + " 35,\n", + " 36,\n", + " 37,\n", + " 38,\n", + " 39,\n", + " 40,\n", + " 41,\n", + " 42,\n", + " 43,\n", + " 44,\n", + " 45,\n", + " 46,\n", + " 47,\n", + " 48,\n", + " ],\n", + " \"tensordot\": [\n", + " 12,\n", + " 16,\n", + " 20,\n", + " 24,\n", + " 28,\n", + " 32,\n", + " 36,\n", + " 40,\n", + " 44,\n", + " 48,\n", + " 52,\n", + " 56,\n", + " 60,\n", + " 64,\n", + " 68,\n", + " 72,\n", + " 76,\n", + " 80,\n", + " 84,\n", + " 88,\n", + " 92,\n", + " 96,\n", + " 100,\n", + " 104,\n", + " 108,\n", + " 112,\n", + " 116,\n", + " 120,\n", + " 124,\n", + " 128,\n", + " 132,\n", + " 136,\n", + " 140,\n", + " 144,\n", + " 148,\n", + " 152,\n", + " 156,\n", + " 160,\n", + " 164,\n", + " 168,\n", + " 172,\n", + " 176,\n", + " 180,\n", + " 184,\n", + " 188,\n", + " 192,\n", + " 196,\n", + " 200,\n", + " ],\n", + " \"tensor\": [\n", + " 22,\n", + " 31,\n", + " 40,\n", + " 49,\n", + " 58,\n", + " 67,\n", + " 76,\n", + " 85,\n", + " 94,\n", + " 103,\n", + " 112,\n", + " 121,\n", + " 130,\n", + " 139,\n", + " 148,\n", + " 157,\n", + " 166,\n", + " 175,\n", + " 184,\n", + " 193,\n", + " 202,\n", + " 211,\n", + " 220,\n", + " 229,\n", + " 238,\n", + " 247,\n", + " 256,\n", + " 265,\n", + " 274,\n", + " 283,\n", + " 292,\n", + " 301,\n", + " 310,\n", + " 319,\n", + " 328,\n", + " 337,\n", + " 346,\n", + " 355,\n", + " 364,\n", + " 373,\n", + " 382,\n", + " 391,\n", + " 400,\n", + " 409,\n", + " 418,\n", + " 427,\n", + " 436,\n", + " 445,\n", + " ],\n", + "}\n", + "times1 = [\n", + " 0.01864790916442871,\n", + " 0.015166997909545898,\n", + " 0.017799854278564453,\n", + " 0.021364927291870117,\n", + " 0.0234529972076416,\n", + " 0.03243708610534668,\n", + " 0.03485298156738281,\n", + " 0.03809309005737305,\n", + " 0.04254293441772461,\n", + " 0.043493032455444336,\n", + " 0.04782605171203613,\n", + " 0.051072120666503906,\n", + " 0.05495715141296387,\n", + " 0.06077980995178223,\n", + " 0.06451010704040527,\n", + " 0.06647181510925293,\n", + " 0.07750391960144043,\n", + " 0.10012388229370117,\n", + " 0.09436392784118652,\n", + " 0.08780503273010254,\n", + " 0.09475111961364746,\n", + " 0.08931398391723633,\n", + " 0.1099538803100586,\n", + " 0.10660696029663086,\n", + " 0.10943722724914551,\n", + " 0.11156201362609863,\n", + " 0.11216998100280762,\n", + " 0.11894893646240234,\n", + " 0.12170791625976562,\n", + " 0.1290268898010254,\n", + " 0.13869500160217285,\n", + " 0.1344318389892578,\n", + " 0.13837814331054688,\n", + " 0.14883112907409668,\n", + " 0.14552593231201172,\n", + " 0.1480569839477539,\n", + " 0.14761590957641602,\n", + " 0.15995121002197266,\n", + " 0.16048288345336914,\n", + " 0.16365408897399902,\n", + " 0.16843199729919434,\n", + " 0.2130718231201172,\n", + " 0.17986297607421875,\n", + " 0.1792001724243164,\n", + " 0.1941969394683838,\n", + " 0.2153019905090332,\n", + " 0.20756793022155762,\n", + " 0.19938111305236816,\n", + "]\n", + "times2 = [\n", + " 0.010827064514160156,\n", + " 0.014249086380004883,\n", + " 0.016450166702270508,\n", + " 0.020006895065307617,\n", + " 0.025799989700317383,\n", + " 0.02879500389099121,\n", + " 0.03235912322998047,\n", + " 0.036743879318237305,\n", + " 0.04072308540344238,\n", + " 0.04432511329650879,\n", + " 0.04558587074279785,\n", + " 0.051867008209228516,\n", + " 0.05726289749145508,\n", + " 0.058149099349975586,\n", + " 0.06532096862792969,\n", + " 0.0634920597076416,\n", + " 0.07218098640441895,\n", + " 0.12434697151184082,\n", + " 0.07972311973571777,\n", + " 0.08487296104431152,\n", + " 0.08191704750061035,\n", + " 0.13434886932373047,\n", + " 0.10629105567932129,\n", + " 0.10842609405517578,\n", + " 0.10170793533325195,\n", + " 0.10760092735290527,\n", + " 0.11115694046020508,\n", + " 0.1158750057220459,\n", + " 0.12462496757507324,\n", + " 0.1272139549255371,\n", + " 0.13429498672485352,\n", + " 0.1305849552154541,\n", + " 0.14617490768432617,\n", + " 0.18872499465942383,\n", + " 0.1460709571838379,\n", + " 0.13549304008483887,\n", + " 0.1373729705810547,\n", + " 0.15271997451782227,\n", + " 0.15703701972961426,\n", + " 0.1608130931854248,\n", + " 0.21175909042358398,\n", + " 0.18168210983276367,\n", + " 0.17579412460327148,\n", + " 0.17799592018127441,\n", + " 0.1961660385131836,\n", + " 0.20264911651611328,\n", + " 0.25041794776916504,\n", + " 0.1808319091796875,\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plot(\"HMM\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sizes = [\n", + " 3,\n", + " 4,\n", + " 5,\n", + " 6,\n", + " 7,\n", + " 8,\n", + " 9,\n", + " 10,\n", + " 11,\n", + " 12,\n", + " 13,\n", + " 14,\n", + " 15,\n", + " 16,\n", + " 17,\n", + " 18,\n", + " 19,\n", + " 20,\n", + " 21,\n", + " 22,\n", + " 23,\n", + " 24,\n", + " 25,\n", + " 26,\n", + " 27,\n", + " 28,\n", + " 29,\n", + " 30,\n", + " 31,\n", + " 32,\n", + " 33,\n", + " 34,\n", + " 35,\n", + " 36,\n", + " 37,\n", + " 38,\n", + " 39,\n", + " 40,\n", + " 41,\n", + " 42,\n", + " 43,\n", + " 44,\n", + " 45,\n", + " 46,\n", + " 47,\n", + " 48,\n", + " 49,\n", + " 50,\n", + "]\n", + "costs = {\n", + " \"einsum\": [\n", + " 7,\n", + " 9,\n", + " 13,\n", + " 15,\n", + " 19,\n", + " 21,\n", + " 25,\n", + " 27,\n", + " 31,\n", + " 33,\n", + " 37,\n", + " 39,\n", + " 43,\n", + " 45,\n", + " 49,\n", + " 51,\n", + " 55,\n", + " 57,\n", + " 61,\n", + " 63,\n", + " 67,\n", + " 69,\n", + " 73,\n", + " 75,\n", + " 79,\n", + " 81,\n", + " 85,\n", + " 87,\n", + " 91,\n", + " 93,\n", + " 97,\n", + " 99,\n", + " 103,\n", + " 105,\n", + " 109,\n", + " 111,\n", + " 115,\n", + " 117,\n", + " 121,\n", + " 123,\n", + " 127,\n", + " 129,\n", + " 133,\n", + " 135,\n", + " 139,\n", + " 141,\n", + " 145,\n", + " 147,\n", + " ],\n", + " \"tensordot\": [\n", + " 18,\n", + " 25,\n", + " 30,\n", + " 37,\n", + " 42,\n", + " 49,\n", + " 54,\n", + " 61,\n", + " 66,\n", + " 73,\n", + " 78,\n", + " 85,\n", + " 90,\n", + " 97,\n", + " 102,\n", + " 109,\n", + " 114,\n", + " 121,\n", + " 126,\n", + " 133,\n", + " 138,\n", + " 145,\n", + " 150,\n", + " 157,\n", + " 162,\n", + " 169,\n", + " 174,\n", + " 181,\n", + " 186,\n", + " 193,\n", + " 198,\n", + " 205,\n", + " 210,\n", + " 217,\n", + " 222,\n", + " 229,\n", + " 234,\n", + " 241,\n", + " 246,\n", + " 253,\n", + " 258,\n", + " 265,\n", + " 270,\n", + " 277,\n", + " 282,\n", + " 289,\n", + " 294,\n", + " 301,\n", + " ],\n", + " \"tensor\": [\n", + " 46,\n", + " 63,\n", + " 80,\n", + " 97,\n", + " 114,\n", + " 131,\n", + " 148,\n", + " 165,\n", + " 182,\n", + " 199,\n", + " 216,\n", + " 233,\n", + " 250,\n", + " 267,\n", + " 284,\n", + " 301,\n", + " 318,\n", + " 335,\n", + " 352,\n", + " 369,\n", + " 386,\n", + " 403,\n", + " 420,\n", + " 437,\n", + " 454,\n", + " 471,\n", + " 488,\n", + " 505,\n", + " 522,\n", + " 539,\n", + " 556,\n", + " 573,\n", + " 590,\n", + " 607,\n", + " 624,\n", + " 641,\n", + " 658,\n", + " 675,\n", + " 692,\n", + " 709,\n", + " 726,\n", + " 743,\n", + " 760,\n", + " 777,\n", + " 794,\n", + " 811,\n", + " 828,\n", + " 845,\n", + " ],\n", + "}\n", + "times1 = [\n", + " 0.02198004722595215,\n", + " 0.03037405014038086,\n", + " 0.03350090980529785,\n", + " 0.04224896430969238,\n", + " 0.04834318161010742,\n", + " 0.05909299850463867,\n", + " 0.06626009941101074,\n", + " 0.08351302146911621,\n", + " 0.09097099304199219,\n", + " 0.08897876739501953,\n", + " 0.09535503387451172,\n", + " 0.10136294364929199,\n", + " 0.13000011444091797,\n", + " 0.12712597846984863,\n", + " 0.13105392456054688,\n", + " 0.1476750373840332,\n", + " 0.14663481712341309,\n", + " 0.15439701080322266,\n", + " 0.15521693229675293,\n", + " 0.1650080680847168,\n", + " 0.1742238998413086,\n", + " 0.17893004417419434,\n", + " 0.18517208099365234,\n", + " 0.19159197807312012,\n", + " 0.20879316329956055,\n", + " 0.2737429141998291,\n", + " 0.23352789878845215,\n", + " 0.22190213203430176,\n", + " 0.23365497589111328,\n", + " 0.23900103569030762,\n", + " 0.2523791790008545,\n", + " 0.26091718673706055,\n", + " 0.2820899486541748,\n", + " 0.3140451908111572,\n", + " 0.28127598762512207,\n", + " 0.2906830310821533,\n", + " 0.34561610221862793,\n", + " 0.4711790084838867,\n", + " 0.3032550811767578,\n", + " 0.31789112091064453,\n", + " 0.34140491485595703,\n", + " 0.34586501121520996,\n", + " 0.3419170379638672,\n", + " 0.35588693618774414,\n", + " 0.36873412132263184,\n", + " 0.36976003646850586,\n", + " 0.3961608409881592,\n", + " 0.3883850574493408,\n", + "]\n", + "times2 = [\n", + " 0.022389888763427734,\n", + " 0.026437997817993164,\n", + " 0.03232693672180176,\n", + " 0.041667938232421875,\n", + " 0.05160379409790039,\n", + " 0.055931806564331055,\n", + " 0.07128310203552246,\n", + " 0.08053183555603027,\n", + " 0.08122706413269043,\n", + " 0.0810542106628418,\n", + " 0.0922250747680664,\n", + " 0.10212492942810059,\n", + " 0.11983704566955566,\n", + " 0.1128089427947998,\n", + " 0.13935494422912598,\n", + " 0.12748098373413086,\n", + " 0.13879609107971191,\n", + " 0.1859588623046875,\n", + " 0.14890193939208984,\n", + " 0.15740394592285156,\n", + " 0.16302895545959473,\n", + " 0.17653393745422363,\n", + " 0.1802539825439453,\n", + " 0.18121719360351562,\n", + " 0.20098400115966797,\n", + " 0.19684600830078125,\n", + " 0.2023460865020752,\n", + " 0.22677183151245117,\n", + " 0.23773717880249023,\n", + " 0.23118090629577637,\n", + " 0.23914885520935059,\n", + " 0.2430558204650879,\n", + " 0.31301093101501465,\n", + " 0.2789499759674072,\n", + " 0.26804518699645996,\n", + " 0.28461790084838867,\n", + " 0.3887619972229004,\n", + " 0.31357502937316895,\n", + " 0.2947719097137451,\n", + " 0.3141598701477051,\n", + " 0.4249720573425293,\n", + " 0.32235097885131836,\n", + " 0.3292689323425293,\n", + " 0.32982301712036133,\n", + " 0.39942502975463867,\n", + " 0.3410038948059082,\n", + " 0.3757472038269043,\n", + " 0.38117194175720215,\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plot(\"DBN\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:root] *", + "language": "python", + "name": "conda-root-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tests/infer/mcmc/__init__.py b/pyro/source/tests/infer/mcmc/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/tests/infer/mcmc/test_adaptation.py b/pyro/source/tests/infer/mcmc/test_adaptation.py new file mode 100644 index 0000000000000000000000000000000000000000..36cdb11aa3a60642408a7b85b5690cbec87b192c --- /dev/null +++ b/pyro/source/tests/infer/mcmc/test_adaptation.py @@ -0,0 +1,72 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +from pyro.infer.mcmc.adaptation import ( + ArrowheadMassMatrix, + BlockMassMatrix, + WarmupAdapter, + adapt_window, +) +from tests.common import assert_close, assert_equal + + +@pytest.mark.parametrize( + "adapt_step_size, adapt_mass, warmup_steps, expected", + [ + (False, False, 100, []), + (False, True, 50, [(0, 6), (7, 44), (45, 49)]), + (True, False, 150, [(0, 74), (75, 99), (100, 149)]), + (True, True, 200, [(0, 74), (75, 99), (100, 149), (150, 199)]), + (True, True, 280, [(0, 74), (75, 99), (100, 229), (230, 279)]), + (True, True, 18, [(0, 17)]), + ], +) +def test_adaptation_schedule(adapt_step_size, adapt_mass, warmup_steps, expected): + adapter = WarmupAdapter( + 0.1, adapt_step_size=adapt_step_size, adapt_mass_matrix=adapt_mass + ) + adapter.configure(warmup_steps, mass_matrix_shape={"z": (5, 5)}) + expected_schedule = [adapt_window(i, j) for i, j in expected] + assert_equal(adapter.adaptation_schedule, expected_schedule, prec=0) + + +@pytest.mark.parametrize("diagonal", [True, False]) +def test_arrowhead_mass_matrix(diagonal): + shape = (2, 3) + num_samples = 1000 + + size = shape[0] * shape[1] + block_adapter = BlockMassMatrix() + arrowhead_adapter = ArrowheadMassMatrix() + mass_matrix_shape = (size,) if diagonal else (size, size) + block_adapter.configure({("z",): mass_matrix_shape}) + arrowhead_adapter.configure({("z",): mass_matrix_shape}) + + cov = torch.randn(size, size) + cov = torch.mm(cov, cov.t()) + if diagonal: + cov = cov.diag().diag() + z_dist = torch.distributions.MultivariateNormal( + torch.zeros(size), covariance_matrix=cov + ) + g_dist = torch.distributions.MultivariateNormal( + torch.zeros(size), precision_matrix=cov + ) + z_samples = z_dist.sample((num_samples,)).reshape((num_samples,) + shape) + g_samples = g_dist.sample((num_samples,)).reshape((num_samples,) + shape) + + for i in range(num_samples): + block_adapter.update({"z": z_samples[i]}, {"z": g_samples[i]}) + arrowhead_adapter.update({"z": z_samples[i]}, {"z": g_samples[i]}) + block_adapter.end_adaptation() + arrowhead_adapter.end_adaptation() + + assert_close( + arrowhead_adapter.inverse_mass_matrix[("z",)], + block_adapter.inverse_mass_matrix[("z",)], + atol=0.3, + rtol=0.3, + ) diff --git a/pyro/source/tests/infer/mcmc/test_hmc.py b/pyro/source/tests/infer/mcmc/test_hmc.py new file mode 100644 index 0000000000000000000000000000000000000000..6dbc5eb23695f5182e3d776fc386147e2b5b6eaa --- /dev/null +++ b/pyro/source/tests/infer/mcmc/test_hmc.py @@ -0,0 +1,362 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging +import os +from collections import namedtuple + +import pytest +import torch + +import pyro +import pyro.distributions as dist +from pyro.infer.mcmc import NUTS +from pyro.infer.mcmc.api import MCMC +from pyro.infer.mcmc.hmc import HMC +from tests.common import assert_close, assert_equal + +logger = logging.getLogger(__name__) + + +def mark_jit(*args, **kwargs): + jit_markers = kwargs.pop("marks", []) + jit_markers += [ + pytest.mark.skipif("CI" in os.environ, reason="to reduce running time on CI") + ] + kwargs["marks"] = jit_markers + return pytest.param(*args, **kwargs) + + +def jit_idfn(param): + return "JIT={}".format(param) + + +class GaussianChain: + def __init__(self, dim, chain_len, num_obs): + self.dim = dim + self.chain_len = chain_len + self.num_obs = num_obs + self.loc_0 = torch.zeros(self.dim) + self.lambda_prec = torch.ones(self.dim) + + def model(self, data): + loc = self.loc_0 + lambda_prec = self.lambda_prec + for i in range(1, self.chain_len + 1): + loc = pyro.sample( + "loc_{}".format(i), dist.Normal(loc=loc, scale=lambda_prec) + ) + pyro.sample("obs", dist.Normal(loc, lambda_prec), obs=data) + + @property + def data(self): + return torch.ones(self.num_obs, self.dim) + + def id_fn(self): + return "dim={}_chain-len={}_num_obs={}".format( + self.dim, self.chain_len, self.num_obs + ) + + +def rmse(t1, t2): + return (t1 - t2).pow(2).mean().sqrt() + + +T = namedtuple( + "TestExample", + [ + "fixture", + "num_samples", + "warmup_steps", + "hmc_params", + "expected_means", + "expected_precs", + "mean_tol", + "std_tol", + ], +) + +TEST_CASES = [ + T( + GaussianChain(dim=10, chain_len=3, num_obs=1), + num_samples=800, + warmup_steps=200, + hmc_params={"step_size": 0.5, "num_steps": 4}, + expected_means=[0.25, 0.50, 0.75], + expected_precs=[1.33, 1, 1.33], + mean_tol=0.08, + std_tol=0.08, + ), + T( + GaussianChain(dim=10, chain_len=4, num_obs=1), + num_samples=1600, + warmup_steps=300, + hmc_params={"step_size": 0.46, "num_steps": 5}, + expected_means=[0.20, 0.40, 0.60, 0.80], + expected_precs=[1.25, 0.83, 0.83, 1.25], + mean_tol=0.08, + std_tol=0.08, + ), + T( + GaussianChain(dim=5, chain_len=2, num_obs=100), + num_samples=2000, + warmup_steps=1000, + hmc_params={"num_steps": 15, "step_size": 0.7}, + expected_means=[0.5, 1.0], + expected_precs=[2.0, 100], + mean_tol=0.08, + std_tol=0.08, + ), + T( + GaussianChain(dim=5, chain_len=9, num_obs=1), + num_samples=3000, + warmup_steps=500, + hmc_params={"step_size": 0.2, "num_steps": 15}, + expected_means=[0.10, 0.20, 0.30, 0.40, 0.50, 0.60, 0.70, 0.80, 0.90], + expected_precs=[1.11, 0.63, 0.48, 0.42, 0.4, 0.42, 0.48, 0.63, 1.11], + mean_tol=0.11, + std_tol=0.11, + ), +] + +TEST_IDS = [ + t[0].id_fn() if type(t).__name__ == "TestExample" else t[0][0].id_fn() + for t in TEST_CASES +] + + +@pytest.mark.parametrize( + "fixture, num_samples, warmup_steps, hmc_params, expected_means, expected_precs, mean_tol, std_tol", + TEST_CASES, + ids=TEST_IDS, +) +@pytest.mark.skip(reason="Slow test (https://github.com/pytorch/pytorch/issues/12190)") +@pytest.mark.disable_validation() +def test_hmc_conjugate_gaussian( + fixture, + num_samples, + warmup_steps, + hmc_params, + expected_means, + expected_precs, + mean_tol, + std_tol, +): + pyro.get_param_store().clear() + hmc_kernel = HMC(fixture.model, **hmc_params) + samples = MCMC(hmc_kernel, num_samples, warmup_steps).run(fixture.data) + for i in range(1, fixture.chain_len + 1): + param_name = "loc_" + str(i) + marginal = samples[param_name] + latent_loc = marginal.mean(0) + latent_std = marginal.var(0).sqrt() + expected_mean = torch.ones(fixture.dim) * expected_means[i - 1] + expected_std = 1 / torch.sqrt(torch.ones(fixture.dim) * expected_precs[i - 1]) + + # Actual vs expected posterior means for the latents + logger.debug("Posterior mean (actual) - {}".format(param_name)) + logger.debug(latent_loc) + logger.debug("Posterior mean (expected) - {}".format(param_name)) + logger.debug(expected_mean) + assert_equal(rmse(latent_loc, expected_mean).item(), 0.0, prec=mean_tol) + + # Actual vs expected posterior precisions for the latents + logger.debug("Posterior std (actual) - {}".format(param_name)) + logger.debug(latent_std) + logger.debug("Posterior std (expected) - {}".format(param_name)) + logger.debug(expected_std) + assert_equal(rmse(latent_std, expected_std).item(), 0.0, prec=std_tol) + + +@pytest.mark.parametrize( + "step_size, trajectory_length, num_steps, adapt_step_size, adapt_mass_matrix, full_mass", + [ + (0.0855, None, 4, False, False, False), + (0.0855, None, 4, False, True, False), + (None, 1, None, True, False, False), + (None, 1, None, True, True, False), + (None, 1, None, True, True, True), + ], +) +def test_logistic_regression( + step_size, + trajectory_length, + num_steps, + adapt_step_size, + adapt_mass_matrix, + full_mass, +): + dim = 3 + data = torch.randn(2000, dim) + true_coefs = torch.arange(1.0, dim + 1.0) + labels = dist.Bernoulli(logits=(true_coefs * data).sum(-1)).sample() + + def model(data): + coefs_mean = pyro.param("coefs_mean", torch.zeros(dim)) + coefs = pyro.sample("beta", dist.Normal(coefs_mean, torch.ones(dim))) + y = pyro.sample("y", dist.Bernoulli(logits=(coefs * data).sum(-1)), obs=labels) + return y + + hmc_kernel = HMC( + model, + step_size=step_size, + trajectory_length=trajectory_length, + num_steps=num_steps, + adapt_step_size=adapt_step_size, + adapt_mass_matrix=adapt_mass_matrix, + full_mass=full_mass, + ) + mcmc = MCMC(hmc_kernel, num_samples=500, warmup_steps=100, disable_progbar=True) + mcmc.run(data) + samples = mcmc.get_samples()["beta"] + assert_equal(rmse(true_coefs, samples.mean(0)).item(), 0.0, prec=0.1) + + +@pytest.mark.parametrize("jit", [False, mark_jit(True)], ids=jit_idfn) +def test_dirichlet_categorical(jit): + def model(data): + concentration = torch.tensor([1.0, 1.0, 1.0]) + p_latent = pyro.sample("p_latent", dist.Dirichlet(concentration)) + pyro.sample("obs", dist.Categorical(p_latent), obs=data) + return p_latent + + true_probs = torch.tensor([0.1, 0.6, 0.3]) + data = dist.Categorical(true_probs).sample(sample_shape=(torch.Size((2000,)))) + hmc_kernel = HMC( + model, trajectory_length=1, jit_compile=jit, ignore_jit_warnings=True + ) + mcmc = MCMC(hmc_kernel, num_samples=200, warmup_steps=100) + mcmc.run(data) + samples = mcmc.get_samples() + assert_equal(samples["p_latent"].mean(0), true_probs, prec=0.02) + + +@pytest.mark.parametrize("jit", [False, mark_jit(True)], ids=jit_idfn) +def test_beta_bernoulli(jit): + def model(data): + alpha = torch.tensor([1.1, 1.1]) + beta = torch.tensor([1.1, 1.1]) + p_latent = pyro.sample("p_latent", dist.Beta(alpha, beta)) + with pyro.plate("data", data.shape[0], dim=-2): + pyro.sample("obs", dist.Bernoulli(p_latent), obs=data) + return p_latent + + true_probs = torch.tensor([0.9, 0.1]) + data = dist.Bernoulli(true_probs).sample(sample_shape=(torch.Size((1000,)))) + hmc_kernel = HMC( + model, + trajectory_length=1, + max_plate_nesting=2, + jit_compile=jit, + ignore_jit_warnings=True, + ) + mcmc = MCMC(hmc_kernel, num_samples=800, warmup_steps=500) + mcmc.run(data) + samples = mcmc.get_samples() + assert_equal(samples["p_latent"].mean(0), true_probs, prec=0.05) + + +def test_gamma_normal(): + def model(data): + rate = torch.tensor([1.0, 1.0]) + concentration = torch.tensor([1.0, 1.0]) + p_latent = pyro.sample("p_latent", dist.Gamma(rate, concentration)) + pyro.sample("obs", dist.Normal(3, p_latent), obs=data) + return p_latent + + true_std = torch.tensor([0.5, 2]) + data = dist.Normal(3, true_std).sample(sample_shape=(torch.Size((2000,)))) + hmc_kernel = HMC(model, num_steps=15, step_size=0.01, adapt_step_size=True) + mcmc = MCMC(hmc_kernel, num_samples=200, warmup_steps=200) + mcmc.run(data) + samples = mcmc.get_samples() + assert_equal(samples["p_latent"].mean(0), true_std, prec=0.05) + + +@pytest.mark.parametrize("jit", [False, mark_jit(True)], ids=jit_idfn) +def test_bernoulli_latent_model(jit): + def model(data): + y_prob = pyro.sample("y_prob", dist.Beta(1.0, 1.0)) + y = pyro.sample("y", dist.Bernoulli(y_prob)) + with pyro.plate("data", data.shape[0]): + z = pyro.sample("z", dist.Bernoulli(0.65 * y + 0.1)) + pyro.sample("obs", dist.Normal(2.0 * z, 1.0), obs=data) + pyro.sample("nuisance", dist.Bernoulli(0.3)) + + N = 2000 + y_prob = torch.tensor(0.3) + y = dist.Bernoulli(y_prob).sample(torch.Size((N,))) + z = dist.Bernoulli(0.65 * y + 0.1).sample() + data = dist.Normal(2.0 * z, 1.0).sample() + hmc_kernel = HMC( + model, + trajectory_length=1, + max_plate_nesting=1, + jit_compile=jit, + ignore_jit_warnings=True, + ) + mcmc = MCMC(hmc_kernel, num_samples=600, warmup_steps=200) + mcmc.run(data) + samples = mcmc.get_samples() + assert_equal(samples["y_prob"].mean(0), y_prob, prec=0.06) + + +@pytest.mark.parametrize("kernel", [HMC, NUTS]) +@pytest.mark.parametrize("jit", [False, mark_jit(True)], ids=jit_idfn) +@pytest.mark.skipif( + "CUDA_TEST" in os.environ, reason="https://github.com/pytorch/pytorch/issues/22811" +) +def test_unnormalized_normal(kernel, jit): + true_mean, true_std = torch.tensor(5.0), torch.tensor(1.0) + init_params = {"z": torch.tensor(0.0)} + + def potential_energy(params): + return 0.5 * torch.sum(((params["z"] - true_mean) / true_std) ** 2) + + potential_fn = ( + potential_energy if not jit else torch.jit.trace(potential_energy, init_params) + ) + hmc_kernel = kernel(model=None, potential_fn=potential_fn) + + samples = init_params + warmup_steps = 400 + hmc_kernel.initial_params = samples + hmc_kernel.setup(warmup_steps) + + for i in range(warmup_steps): + samples = hmc_kernel(samples) + + posterior = [] + for i in range(2000): + hmc_kernel.clear_cache() + samples = hmc_kernel(samples) + posterior.append(samples) + + posterior = torch.stack([sample["z"] for sample in posterior]) + assert_close(torch.mean(posterior), true_mean, rtol=0.05) + assert_close(torch.std(posterior), true_std, rtol=0.05) + + +@pytest.mark.parametrize("jit", [False, mark_jit(True)], ids=jit_idfn) +@pytest.mark.parametrize("op", [torch.inverse, torch.linalg.cholesky]) +def test_singular_matrix_catch(jit, op): + def potential_energy(z): + return op(z["cov"]).sum() + + init_params = {"cov": torch.eye(3)} + potential_fn = ( + potential_energy if not jit else torch.jit.trace(potential_energy, init_params) + ) + hmc_kernel = HMC( + potential_fn=potential_fn, adapt_step_size=False, num_steps=10, step_size=1e-20 + ) + hmc_kernel.initial_params = init_params + hmc_kernel.setup(warmup_steps=0) + # setup an invalid cache to trigger singular error for torch.inverse + hmc_kernel._cache( + {"cov": torch.ones(3, 3)}, torch.tensor(0.0), {"cov": torch.zeros(3, 3)} + ) + + samples = init_params + for i in range(10): + samples = hmc_kernel.sample(samples) diff --git a/pyro/source/tests/infer/mcmc/test_mcmc_api.py b/pyro/source/tests/infer/mcmc/test_mcmc_api.py new file mode 100644 index 0000000000000000000000000000000000000000..16947867f541ad326078a4c9c06d1b2213521f76 --- /dev/null +++ b/pyro/source/tests/infer/mcmc/test_mcmc_api.py @@ -0,0 +1,413 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import os +from functools import partial + +import pytest +import torch + +import pyro +import pyro.distributions as dist +from pyro import poutine +from pyro.infer.mcmc import HMC, NUTS +from pyro.infer.mcmc.api import MCMC, StreamingMCMC, _MultiSampler, _UnarySampler +from pyro.infer.mcmc.mcmc_kernel import MCMCKernel +from pyro.infer.mcmc.util import initialize_model, select_samples +from pyro.ops.streaming import StackStats, StatsOfDict +from pyro.util import optional +from tests.common import assert_close + + +class PriorKernel(MCMCKernel): + """ + Disregards the value of the current trace (or observed data) and + samples a value from the model's prior. + """ + + def __init__(self, model): + self.model = model + self.data = None + self._initial_params = None + self._prototype_trace = None + self.transforms = None + + def setup(self, warmup_steps, data): + self.data = data + init_params, potential_fn, transforms, model_trace = initialize_model( + self.model, model_args=(data,) + ) + if self._initial_params is None: + self._initial_params = init_params + if self.transforms is None: + self.transforms = transforms + self._prototype_trace = model_trace + + def diagnostics(self): + return {"dummy_key": "dummy_value"} + + @property + def initial_params(self): + return self._initial_params + + @initial_params.setter + def initial_params(self, params): + self._initial_params = params + + def cleanup(self): + self.data = None + + def sample_params(self): + trace = poutine.trace(self.model).get_trace(self.data) + return {k: v["value"] for k, v in trace.iter_stochastic_nodes()} + + def sample(self, params): + new_params = self.sample_params() + assert params.keys() == new_params.keys() + for k, v in params.items(): + assert new_params[k].shape == v.shape + return new_params + + +def normal_normal_model(data): + x = torch.tensor([0.0]) + y = pyro.sample("y", dist.Normal(x, torch.ones(data.shape))) + pyro.sample("obs", dist.Normal(y, torch.tensor([1.0])), obs=data) + return y + + +def run_default_mcmc( + data, + kernel, + num_samples, + warmup_steps=None, + initial_params=None, + num_chains=1, + hook_fn=None, + mp_context=None, + transforms=None, + num_draws=None, + group_by_chain=False, +): + mcmc = MCMC( + kernel=kernel, + num_samples=num_samples, + warmup_steps=warmup_steps, + initial_params=initial_params, + num_chains=num_chains, + hook_fn=hook_fn, + mp_context=mp_context, + transforms=transforms, + ) + mcmc.run(data) + return mcmc.get_samples(num_draws, group_by_chain=group_by_chain), mcmc.num_chains + + +def run_streaming_mcmc( + data, + kernel, + num_samples, + warmup_steps=None, + initial_params=None, + num_chains=1, + hook_fn=None, + mp_context=None, + transforms=None, + num_draws=None, + group_by_chain=False, +): + mcmc = StreamingMCMC( + kernel=kernel, + num_samples=num_samples, + warmup_steps=warmup_steps, + initial_params=initial_params, + statistics=StatsOfDict(default=StackStats), + num_chains=num_chains, + hook_fn=hook_fn, + transforms=transforms, + ) + mcmc.run(data) + statistics = mcmc.get_statistics(group_by_chain=group_by_chain) + + if group_by_chain: + samples = {} + agg = {} + for (_, name), stat in statistics.items(): + if name in agg: + agg[name].append(stat["samples"]) + else: + agg[name] = [stat["samples"]] + for name, l in agg.items(): + samples[name] = torch.stack(l) + else: + samples = {name: stat["samples"] for name, stat in statistics.items()} + + samples = select_samples(samples, num_draws, group_by_chain) + + if not group_by_chain: + samples = {name: stat.unsqueeze(-1) for name, stat in samples.items()} + + return samples, mcmc.num_chains + + +@pytest.mark.parametrize("run_mcmc_cls", [run_default_mcmc, run_streaming_mcmc]) +@pytest.mark.parametrize("num_draws", [None, 1800, 2200]) +@pytest.mark.parametrize("group_by_chain", [False, True]) +@pytest.mark.parametrize("num_chains", [1, 2]) +@pytest.mark.filterwarnings("ignore:num_chains") +def test_mcmc_interface(run_mcmc_cls, num_draws, group_by_chain, num_chains): + num_samples = 2000 + data = torch.tensor([1.0]) + initial_params, _, transforms, _ = initialize_model( + normal_normal_model, model_args=(data,), num_chains=num_chains + ) + kernel = PriorKernel(normal_normal_model) + samples, mcmc_num_chains = run_mcmc_cls( + data, + kernel, + num_samples=num_samples, + warmup_steps=100, + initial_params=initial_params, + num_chains=num_chains, + mp_context="spawn", + transforms=transforms, + num_draws=num_draws, + group_by_chain=group_by_chain, + ) + # test sample shape + expected_samples = num_draws if num_draws is not None else num_samples + if group_by_chain: + expected_shape = (mcmc_num_chains, expected_samples, 1) + elif num_draws is not None: + # FIXME: what is the expected behavior of num_draw is not None and group_by_chain=False? + expected_shape = (expected_samples, 1) + else: + expected_shape = (mcmc_num_chains * expected_samples, 1) + assert samples["y"].shape == expected_shape + + # test sample stats + if group_by_chain: + samples = {k: v.reshape((-1,) + v.shape[2:]) for k, v in samples.items()} + sample_mean = samples["y"].mean() + sample_std = samples["y"].std() + assert_close(sample_mean, torch.tensor(0.0), atol=0.1) + assert_close(sample_std, torch.tensor(1.0), atol=0.1) + + +@pytest.mark.parametrize( + "num_chains, cpu_count", + [ + (1, 2), + (2, 1), + (2, 2), + (2, 3), + ], +) +@pytest.mark.parametrize("default_init_params", [True, False]) +def test_num_chains(num_chains, cpu_count, default_init_params, monkeypatch): + monkeypatch.setattr(torch.multiprocessing, "cpu_count", lambda: cpu_count) + data = torch.tensor([1.0]) + initial_params, _, transforms, _ = initialize_model( + normal_normal_model, model_args=(data,), num_chains=num_chains + ) + if default_init_params: + initial_params = None + kernel = PriorKernel(normal_normal_model) + available_cpu = max(1, cpu_count - 1) + mp_context = "spawn" + with optional(pytest.warns(UserWarning), available_cpu < num_chains): + mcmc = MCMC( + kernel, + num_samples=10, + warmup_steps=10, + num_chains=num_chains, + initial_params=initial_params, + transforms=transforms, + mp_context=mp_context, + ) + mcmc.run(data) + assert mcmc.num_chains == num_chains + if mcmc.num_chains == 1 or available_cpu < num_chains: + assert isinstance(mcmc.sampler, _UnarySampler) + else: + assert isinstance(mcmc.sampler, _MultiSampler) + + +def _empty_model(): + return torch.tensor(1) + + +def _hook(iters, kernel, samples, stage, i): + assert samples == {} + iters.append((stage, i)) + + +@pytest.mark.parametrize("run_mcmc_cls", [run_default_mcmc, run_streaming_mcmc]) +@pytest.mark.parametrize( + "kernel, model", + [ + (HMC, _empty_model), + (NUTS, _empty_model), + ], +) +@pytest.mark.parametrize("jit", [False, True]) +@pytest.mark.parametrize("num_chains", [1, 2]) +@pytest.mark.filterwarnings("ignore:num_chains") +def test_null_model_with_hook(run_mcmc_cls, kernel, model, jit, num_chains): + num_warmup, num_samples = 10, 10 + initial_params, potential_fn, transforms, _ = initialize_model( + model, num_chains=num_chains + ) + + iters = [] + hook = partial(_hook, iters) + + mp_context = "spawn" if "CUDA_TEST" in os.environ else None + + kern = kernel(potential_fn=potential_fn, transforms=transforms, jit_compile=jit) + samples, _ = run_mcmc_cls( + data=None, + kernel=kern, + num_samples=num_samples, + warmup_steps=num_warmup, + initial_params=initial_params, + hook_fn=hook, + num_chains=num_chains, + mp_context=mp_context, + ) + assert samples == {} + if num_chains == 1: + expected = [("Warmup", i) for i in range(num_warmup)] + [ + ("Sample", i) for i in range(num_samples) + ] + assert iters == expected + + +@pytest.mark.parametrize("run_mcmc_cls", [run_default_mcmc, run_streaming_mcmc]) +@pytest.mark.parametrize("num_chains", [1, 2]) +@pytest.mark.filterwarnings("ignore:num_chains") +def test_mcmc_diagnostics(run_mcmc_cls, num_chains): + data = torch.tensor([2.0]).repeat(3) + initial_params, _, transforms, _ = initialize_model( + normal_normal_model, model_args=(data,), num_chains=num_chains + ) + kernel = PriorKernel(normal_normal_model) + if run_mcmc_cls == run_default_mcmc: + mcmc = MCMC( + kernel, + num_samples=10, + warmup_steps=10, + num_chains=num_chains, + mp_context="spawn", + initial_params=initial_params, + transforms=transforms, + ) + else: + mcmc = StreamingMCMC( + kernel, + num_samples=10, + warmup_steps=10, + num_chains=num_chains, + initial_params=initial_params, + transforms=transforms, + ) + mcmc.run(data) + if not torch.backends.mkl.is_available(): + pytest.skip() + diagnostics = mcmc.diagnostics() + if run_mcmc_cls == run_default_mcmc: # TODO n_eff for streaming MCMC + assert diagnostics["y"]["n_eff"].shape == data.shape + assert diagnostics["y"]["r_hat"].shape == data.shape + assert diagnostics["dummy_key"] == { + "chain {}".format(i): "dummy_value" for i in range(num_chains) + } + + +@pytest.mark.parametrize("run_mcmc_cls", [run_default_mcmc, run_streaming_mcmc]) +@pytest.mark.filterwarnings("ignore:num_chains") +def test_sequential_consistent(run_mcmc_cls, monkeypatch): + # test if there is no stuff left from the previous chain + monkeypatch.setattr(torch.multiprocessing, "cpu_count", lambda: 1) + + class FirstKernel(NUTS): + def setup(self, warmup_steps, *args, **kwargs): + self._chain_id = 0 if "_chain_id" not in self.__dict__ else 1 + pyro.set_rng_seed(self._chain_id) + super().setup(warmup_steps, *args, **kwargs) + + class SecondKernel(NUTS): + def setup(self, warmup_steps, *args, **kwargs): + self._chain_id = 1 if "_chain_id" not in self.__dict__ else 0 + pyro.set_rng_seed(self._chain_id) + super().setup(warmup_steps, *args, **kwargs) + + data = torch.tensor([1.0]) + kernel = FirstKernel(normal_normal_model) + samples1, _ = run_mcmc_cls( + data, + kernel, + num_samples=100, + warmup_steps=100, + num_chains=2, + group_by_chain=True, + ) + + kernel = SecondKernel(normal_normal_model) + samples2, _ = run_mcmc_cls( + data, + kernel, + num_samples=100, + warmup_steps=100, + num_chains=2, + group_by_chain=True, + ) + + assert_close(samples1["y"][0], samples2["y"][1]) + assert_close(samples1["y"][1], samples2["y"][0]) + + +@pytest.mark.parametrize("run_mcmc_cls", [run_default_mcmc, run_streaming_mcmc]) +def test_model_with_potential_fn(run_mcmc_cls): + init_params = {"z": torch.tensor(0.0)} + + def potential_fn(params): + return params["z"] + + run_mcmc_cls( + data=None, + kernel=HMC(potential_fn=potential_fn), + num_samples=10, + warmup_steps=10, + initial_params=init_params, + ) + + +@pytest.mark.parametrize("save_params", ["xy", "x", "y", "xy"]) +@pytest.mark.parametrize( + "Kernel,options", + [ + (HMC, {}), + (NUTS, {"max_tree_depth": 2}), + ], +) +def test_save_params(save_params, Kernel, options): + save_params = list(save_params) + + def model(): + x = pyro.sample("x", dist.Normal(0, 1)) + with pyro.plate("plate", 2): + y = pyro.sample("y", dist.Normal(x, 1)) + pyro.sample("obs", dist.Normal(y, 1), obs=torch.zeros(2)) + + kernel = Kernel(model, **options) + mcmc = MCMC(kernel, warmup_steps=2, num_samples=4, save_params=save_params) + mcmc.run() + + samples = mcmc.get_samples() + assert set(samples.keys()) == set(save_params) + + diagnostics = mcmc.diagnostics() + diagnostics = {k: v for k, v in diagnostics.items() if k in "xy"} + assert set(diagnostics.keys()) == set(save_params) + + mcmc.summary() # smoke test diff --git a/pyro/source/tests/infer/mcmc/test_mcmc_util.py b/pyro/source/tests/infer/mcmc/test_mcmc_util.py new file mode 100644 index 0000000000000000000000000000000000000000..afed008993cad46e6ebf1f92046e90593b560019 --- /dev/null +++ b/pyro/source/tests/infer/mcmc/test_mcmc_util.py @@ -0,0 +1,138 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from functools import partial + +import pytest +import torch + +import pyro +import pyro.distributions as dist +from pyro.infer import Predictive +from pyro.infer.autoguide import ( + init_to_feasible, + init_to_generated, + init_to_mean, + init_to_median, + init_to_sample, + init_to_uniform, + init_to_value, +) +from pyro.infer.mcmc import NUTS +from pyro.infer.mcmc.api import MCMC +from pyro.infer.mcmc.util import initialize_model +from pyro.util import optional +from tests.common import assert_close, str_erase_pointers + + +def beta_bernoulli(): + N = 1000 + true_probs = torch.tensor([0.2, 0.3, 0.4, 0.8, 0.5]) + data = dist.Bernoulli(true_probs).sample([N]) + + def model(data=None): + with pyro.plate("num_components", 5): + beta = pyro.sample("beta", dist.Beta(1.0, 1.0)) + with pyro.plate("data", N): + pyro.sample("obs", dist.Bernoulli(beta), obs=data) + + return model, data, true_probs + + +@pytest.mark.parametrize("num_samples", [100, 200, None]) +@pytest.mark.parametrize("parallel", [False, True]) +def test_predictive(num_samples, parallel): + model, data, true_probs = beta_bernoulli() + init_params, potential_fn, transforms, _ = initialize_model( + model, model_args=(data,) + ) + nuts_kernel = NUTS(potential_fn=potential_fn, transforms=transforms) + mcmc = MCMC(nuts_kernel, 100, initial_params=init_params, warmup_steps=100) + mcmc.run(data) + samples = mcmc.get_samples() + with optional(pytest.warns(UserWarning), num_samples not in (None, 100)): + predictive = Predictive( + model, + samples, + num_samples=num_samples, + return_sites=["beta", "obs"], + parallel=parallel, + ) + predictive_samples = predictive() + + # check shapes + assert predictive_samples["beta"].shape == (100, 1, 5) + assert predictive_samples["obs"].shape == (100, 1000, 5) + + # check sample mean + assert_close( + predictive_samples["obs"].reshape([-1, 5]).mean(0), true_probs, rtol=0.1 + ) + + +def model_with_param(): + x = pyro.param("x", torch.tensor(1.0)) + pyro.sample("y", dist.Normal(x, 1)) + + +@pytest.mark.parametrize("jit_compile", [False, True]) +@pytest.mark.parametrize("num_chains", [1, 2]) +@pytest.mark.filterwarnings("ignore:num_chains") +def test_model_with_param(jit_compile, num_chains): + kernel = NUTS(model_with_param, jit_compile=jit_compile, ignore_jit_warnings=True) + mcmc = MCMC(kernel, 10, num_chains=num_chains, mp_context="spawn") + mcmc.run() + + +@pytest.mark.parametrize("subsample_size", [10, 5]) +def test_model_with_subsample(subsample_size): + size = 10 + + def model(): + with pyro.plate("J", size, subsample_size=subsample_size): + pyro.sample("x", dist.Normal(0, 1)) + + kernel = NUTS(model) + mcmc = MCMC(kernel, 10) + if subsample_size < size: + with pytest.raises(RuntimeError, match="subsample"): + mcmc.run() + else: + mcmc.run() + + +def test_init_to_value(): + def model(): + pyro.sample("x", dist.LogNormal(0, 1)) + + value = torch.randn(()).exp() * 10 + kernel = NUTS(model, init_strategy=partial(init_to_value, values={"x": value})) + kernel.setup(warmup_steps=10) + assert_close(value, kernel.initial_params["x"].exp()) + + +@pytest.mark.parametrize( + "init_strategy", + [ + init_to_feasible, + init_to_mean, + init_to_median, + init_to_sample, + init_to_uniform, + init_to_value, + init_to_feasible(), + init_to_mean(), + init_to_median(num_samples=4), + init_to_sample(), + init_to_uniform(radius=0.1), + init_to_value(values={"x": torch.tensor(3.0)}), + init_to_generated(generate=lambda: init_to_value(values={"x": torch.rand(())})), + ], + ids=str_erase_pointers, +) +def test_init_strategy_smoke(init_strategy): + def model(): + pyro.sample("x", dist.LogNormal(0, 1)) + + kernel = NUTS(model, init_strategy=init_strategy) + kernel.setup(warmup_steps=10) diff --git a/pyro/source/tests/infer/mcmc/test_nuts.py b/pyro/source/tests/infer/mcmc/test_nuts.py new file mode 100644 index 0000000000000000000000000000000000000000..646f8e3b7284ac16613d1902e755e3073613bb9d --- /dev/null +++ b/pyro/source/tests/infer/mcmc/test_nuts.py @@ -0,0 +1,565 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging +import os +from collections import namedtuple + +import pytest +import torch + +import pyro +import pyro.distributions as dist +import pyro.optim as optim +import pyro.poutine as poutine +from pyro.contrib.conjugate.infer import ( + BetaBinomialPair, + GammaPoissonPair, + collapse_conjugate, + posterior_replay, +) +from pyro.infer import SVI, TraceEnum_ELBO +from pyro.infer.autoguide import AutoDelta +from pyro.infer.mcmc import MCMC, NUTS, ArrowheadMassMatrix +from pyro.util import ignore_jit_warnings +from tests.common import assert_close, assert_equal + +from .test_hmc import GaussianChain, rmse + +logger = logging.getLogger(__name__) + + +T = namedtuple( + "TestExample", + [ + "fixture", + "num_samples", + "warmup_steps", + "expected_means", + "expected_precs", + "mean_tol", + "std_tol", + ], +) + +TEST_CASES = [ + T( + GaussianChain(dim=10, chain_len=3, num_obs=1), + num_samples=800, + warmup_steps=200, + expected_means=[0.25, 0.50, 0.75], + expected_precs=[1.33, 1, 1.33], + mean_tol=0.09, + std_tol=0.09, + ), + T( + GaussianChain(dim=10, chain_len=4, num_obs=1), + num_samples=1600, + warmup_steps=200, + expected_means=[0.20, 0.40, 0.60, 0.80], + expected_precs=[1.25, 0.83, 0.83, 1.25], + mean_tol=0.07, + std_tol=0.06, + ), + T( + GaussianChain(dim=5, chain_len=2, num_obs=10000), + num_samples=800, + warmup_steps=200, + expected_means=[0.5, 1.0], + expected_precs=[2.0, 10000], + mean_tol=0.05, + std_tol=0.05, + ), + T( + GaussianChain(dim=5, chain_len=9, num_obs=1), + num_samples=1400, + warmup_steps=200, + expected_means=[0.10, 0.20, 0.30, 0.40, 0.50, 0.60, 0.70, 0.80, 0.90], + expected_precs=[1.11, 0.63, 0.48, 0.42, 0.4, 0.42, 0.48, 0.63, 1.11], + mean_tol=0.08, + std_tol=0.08, + ), +] + + +TEST_IDS = [ + t[0].id_fn() if type(t).__name__ == "TestExample" else t[0][0].id_fn() + for t in TEST_CASES +] + + +def mark_jit(*args, **kwargs): + jit_markers = kwargs.pop("marks", []) + jit_markers += [ + pytest.mark.skipif("CI" in os.environ, reason="to reduce running time on CI") + ] + kwargs["marks"] = jit_markers + return pytest.param(*args, **kwargs) + + +def jit_idfn(param): + return "JIT={}".format(param) + + +@pytest.mark.parametrize( + "fixture, num_samples, warmup_steps, expected_means, expected_precs, mean_tol, std_tol", + TEST_CASES, + ids=TEST_IDS, +) +@pytest.mark.skip(reason="Slow test (https://github.com/pytorch/pytorch/issues/12190)") +@pytest.mark.disable_validation() +def test_nuts_conjugate_gaussian( + fixture, + num_samples, + warmup_steps, + expected_means, + expected_precs, + mean_tol, + std_tol, +): + pyro.get_param_store().clear() + nuts_kernel = NUTS(fixture.model) + mcmc = MCMC(nuts_kernel, num_samples, warmup_steps) + mcmc.run(fixture.data) + samples = mcmc.get_samples() + for i in range(1, fixture.chain_len + 1): + param_name = "loc_" + str(i) + latent = samples[param_name] + latent_loc = latent.mean(0) + latent_std = latent.std(0) + expected_mean = torch.ones(fixture.dim) * expected_means[i - 1] + expected_std = 1 / torch.sqrt(torch.ones(fixture.dim) * expected_precs[i - 1]) + + # Actual vs expected posterior means for the latents + logger.debug("Posterior mean (actual) - {}".format(param_name)) + logger.debug(latent_loc) + logger.debug("Posterior mean (expected) - {}".format(param_name)) + logger.debug(expected_mean) + assert_equal(rmse(latent_loc, expected_mean).item(), 0.0, prec=mean_tol) + + # Actual vs expected posterior precisions for the latents + logger.debug("Posterior std (actual) - {}".format(param_name)) + logger.debug(latent_std) + logger.debug("Posterior std (expected) - {}".format(param_name)) + logger.debug(expected_std) + assert_equal(rmse(latent_std, expected_std).item(), 0.0, prec=std_tol) + + +@pytest.mark.parametrize("jit", [False, mark_jit(True)], ids=jit_idfn) +@pytest.mark.parametrize("use_multinomial_sampling", [True, False]) +def test_logistic_regression(jit, use_multinomial_sampling): + dim = 3 + data = torch.randn(2000, dim) + true_coefs = torch.arange(1.0, dim + 1.0) + labels = dist.Bernoulli(logits=(true_coefs * data).sum(-1)).sample() + + def model(data): + coefs_mean = torch.zeros(dim) + coefs = pyro.sample("beta", dist.Normal(coefs_mean, torch.ones(dim))) + y = pyro.sample("y", dist.Bernoulli(logits=(coefs * data).sum(-1)), obs=labels) + return y + + nuts_kernel = NUTS( + model, + use_multinomial_sampling=use_multinomial_sampling, + jit_compile=jit, + ignore_jit_warnings=True, + ) + mcmc = MCMC(nuts_kernel, num_samples=500, warmup_steps=100) + mcmc.run(data) + samples = mcmc.get_samples() + assert_equal(rmse(true_coefs, samples["beta"].mean(0)).item(), 0.0, prec=0.1) + + +@pytest.mark.parametrize( + "step_size, adapt_step_size, adapt_mass_matrix, full_mass", + [ + (0.1, False, False, False), + (0.5, False, True, False), + (None, True, False, False), + (None, True, True, False), + (None, True, True, True), + ], +) +def test_beta_bernoulli(step_size, adapt_step_size, adapt_mass_matrix, full_mass): + def model(data): + alpha = torch.tensor([1.1, 1.1]) + beta = torch.tensor([1.1, 1.1]) + p_latent = pyro.sample("p_latent", dist.Beta(alpha, beta)) + pyro.sample("obs", dist.Bernoulli(p_latent), obs=data) + return p_latent + + true_probs = torch.tensor([0.9, 0.1]) + data = dist.Bernoulli(true_probs).sample(sample_shape=(torch.Size((1000,)))) + nuts_kernel = NUTS( + model, + step_size=step_size, + adapt_step_size=adapt_step_size, + adapt_mass_matrix=adapt_mass_matrix, + full_mass=full_mass, + ) + mcmc = MCMC(nuts_kernel, num_samples=400, warmup_steps=200) + mcmc.run(data) + samples = mcmc.get_samples() + assert_equal(samples["p_latent"].mean(0), true_probs, prec=0.02) + + +@pytest.mark.parametrize("jit", [False, mark_jit(True)], ids=jit_idfn) +@pytest.mark.parametrize("use_multinomial_sampling", [True, False]) +def test_gamma_normal(jit, use_multinomial_sampling): + def model(data): + rate = torch.tensor([1.0, 1.0]) + concentration = torch.tensor([1.0, 1.0]) + p_latent = pyro.sample("p_latent", dist.Gamma(rate, concentration)) + pyro.sample("obs", dist.Normal(3, p_latent), obs=data) + return p_latent + + true_std = torch.tensor([0.5, 2]) + data = dist.Normal(3, true_std).sample(sample_shape=(torch.Size((2000,)))) + nuts_kernel = NUTS( + model, + use_multinomial_sampling=use_multinomial_sampling, + jit_compile=jit, + ignore_jit_warnings=True, + ) + mcmc = MCMC(nuts_kernel, num_samples=200, warmup_steps=100) + mcmc.run(data) + samples = mcmc.get_samples() + assert_equal(samples["p_latent"].mean(0), true_std, prec=0.05) + + +@pytest.mark.parametrize("jit", [False, mark_jit(True)], ids=jit_idfn) +def test_dirichlet_categorical(jit): + def model(data): + concentration = torch.tensor([1.0, 1.0, 1.0]) + p_latent = pyro.sample("p_latent", dist.Dirichlet(concentration)) + pyro.sample("obs", dist.Categorical(p_latent), obs=data) + return p_latent + + true_probs = torch.tensor([0.1, 0.6, 0.3]) + data = dist.Categorical(true_probs).sample(sample_shape=(torch.Size((2000,)))) + nuts_kernel = NUTS(model, jit_compile=jit, ignore_jit_warnings=True) + mcmc = MCMC(nuts_kernel, num_samples=200, warmup_steps=100) + mcmc.run(data) + samples = mcmc.get_samples() + posterior = samples["p_latent"] + assert_equal(posterior.mean(0), true_probs, prec=0.02) + + +@pytest.mark.parametrize("jit", [False, mark_jit(True)], ids=jit_idfn) +def test_gamma_beta(jit): + def model(data): + alpha_prior = pyro.sample("alpha", dist.Gamma(concentration=1.0, rate=1.0)) + beta_prior = pyro.sample("beta", dist.Gamma(concentration=1.0, rate=1.0)) + pyro.sample( + "x", + dist.Beta(concentration1=alpha_prior, concentration0=beta_prior), + obs=data, + ) + + true_alpha = torch.tensor(5.0) + true_beta = torch.tensor(1.0) + data = dist.Beta(concentration1=true_alpha, concentration0=true_beta).sample( + torch.Size((5000,)) + ) + nuts_kernel = NUTS(model, jit_compile=jit, ignore_jit_warnings=True) + mcmc = MCMC(nuts_kernel, num_samples=500, warmup_steps=200) + mcmc.run(data) + samples = mcmc.get_samples() + assert_equal(samples["alpha"].mean(0), true_alpha, prec=0.08) + assert_equal(samples["beta"].mean(0), true_beta, prec=0.05) + + +@pytest.mark.parametrize("jit", [False, mark_jit(True)], ids=jit_idfn) +def test_gaussian_mixture_model(jit): + K, N = 3, 1000 + + def gmm(data): + mix_proportions = pyro.sample("phi", dist.Dirichlet(torch.ones(K))) + with pyro.plate("num_clusters", K): + cluster_means = pyro.sample( + "cluster_means", dist.Normal(torch.arange(float(K)), 1.0) + ) + with pyro.plate("data", data.shape[0]): + assignments = pyro.sample("assignments", dist.Categorical(mix_proportions)) + pyro.sample("obs", dist.Normal(cluster_means[assignments], 1.0), obs=data) + return cluster_means + + true_cluster_means = torch.tensor([1.0, 5.0, 10.0]) + true_mix_proportions = torch.tensor([0.1, 0.3, 0.6]) + cluster_assignments = dist.Categorical(true_mix_proportions).sample( + torch.Size((N,)) + ) + data = dist.Normal(true_cluster_means[cluster_assignments], 1.0).sample() + nuts_kernel = NUTS( + gmm, max_plate_nesting=1, jit_compile=jit, ignore_jit_warnings=True + ) + mcmc = MCMC(nuts_kernel, num_samples=300, warmup_steps=100) + mcmc.run(data) + samples = mcmc.get_samples() + assert_equal(samples["phi"].mean(0).sort()[0], true_mix_proportions, prec=0.05) + assert_equal( + samples["cluster_means"].mean(0).sort()[0], true_cluster_means, prec=0.2 + ) + + +@pytest.mark.parametrize("jit", [False, mark_jit(True)], ids=jit_idfn) +def test_bernoulli_latent_model(jit): + @poutine.broadcast + def model(data): + y_prob = pyro.sample("y_prob", dist.Beta(1.0, 1.0)) + with pyro.plate("data", data.shape[0]): + y = pyro.sample("y", dist.Bernoulli(y_prob)) + z = pyro.sample("z", dist.Bernoulli(0.65 * y + 0.1)) + pyro.sample("obs", dist.Normal(2.0 * z, 1.0), obs=data) + + N = 2000 + y_prob = torch.tensor(0.3) + y = dist.Bernoulli(y_prob).sample(torch.Size((N,))) + z = dist.Bernoulli(0.65 * y + 0.1).sample() + data = dist.Normal(2.0 * z, 1.0).sample() + nuts_kernel = NUTS( + model, max_plate_nesting=1, jit_compile=jit, ignore_jit_warnings=True + ) + mcmc = MCMC(nuts_kernel, num_samples=600, warmup_steps=200) + mcmc.run(data) + samples = mcmc.get_samples() + assert_equal(samples["y_prob"].mean(0), y_prob, prec=0.05) + + +@pytest.mark.parametrize("num_steps", [2, 3, 30]) +def test_gaussian_hmm(num_steps): + dim = 4 + + def model(data): + initialize = pyro.sample("initialize", dist.Dirichlet(torch.ones(dim))) + with pyro.plate("states", dim): + transition = pyro.sample("transition", dist.Dirichlet(torch.ones(dim, dim))) + emission_loc = pyro.sample( + "emission_loc", dist.Normal(torch.zeros(dim), torch.ones(dim)) + ) + emission_scale = pyro.sample( + "emission_scale", dist.LogNormal(torch.zeros(dim), torch.ones(dim)) + ) + x = None + with ignore_jit_warnings([("Iterating over a tensor", RuntimeWarning)]): + for t, y in pyro.markov(enumerate(data)): + x = pyro.sample( + "x_{}".format(t), + dist.Categorical(initialize if x is None else transition[x]), + infer={"enumerate": "parallel"}, + ) + pyro.sample( + "y_{}".format(t), + dist.Normal(emission_loc[x], emission_scale[x]), + obs=y, + ) + + def _get_initial_trace(): + guide = AutoDelta( + poutine.block( + model, + expose_fn=lambda msg: not msg["name"].startswith("x") + and not msg["name"].startswith("y"), + ) + ) + elbo = TraceEnum_ELBO(max_plate_nesting=1) + svi = SVI(model, guide, optim.Adam({"lr": 0.01}), elbo) + for _ in range(100): + svi.step(data) + return poutine.trace(guide).get_trace(data) + + def _generate_data(): + transition_probs = torch.rand(dim, dim) + emissions_loc = torch.arange(dim, dtype=torch.Tensor().dtype) + emissions_scale = 1.0 + state = torch.tensor(1) + obs = [dist.Normal(emissions_loc[state], emissions_scale).sample()] + for _ in range(num_steps): + state = dist.Categorical(transition_probs[state]).sample() + obs.append(dist.Normal(emissions_loc[state], emissions_scale).sample()) + return torch.stack(obs) + + data = _generate_data() + nuts_kernel = NUTS( + model, max_plate_nesting=1, jit_compile=True, ignore_jit_warnings=True + ) + if num_steps == 30: + nuts_kernel.initial_trace = _get_initial_trace() + mcmc = MCMC(nuts_kernel, num_samples=5, warmup_steps=5) + mcmc.run(data) + + +@pytest.mark.parametrize("hyperpriors", [False, True]) +def test_beta_binomial(hyperpriors): + def model(data): + with pyro.plate("plate_0", data.shape[-1]): + alpha = ( + pyro.sample("alpha", dist.HalfCauchy(1.0)) + if hyperpriors + else torch.tensor([1.0, 1.0]) + ) + beta = ( + pyro.sample("beta", dist.HalfCauchy(1.0)) + if hyperpriors + else torch.tensor([1.0, 1.0]) + ) + beta_binom = BetaBinomialPair() + with pyro.plate("plate_1", data.shape[-2]): + probs = pyro.sample("probs", beta_binom.latent(alpha, beta)) + with pyro.plate("data", data.shape[0]): + pyro.sample( + "binomial", + beta_binom.conditional(probs=probs, total_count=total_count), + obs=data, + ) + + true_probs = torch.tensor([[0.7, 0.4], [0.6, 0.4]]) + total_count = torch.tensor([[1000, 600], [400, 800]]) + num_samples = 80 + data = dist.Binomial(total_count=total_count, probs=true_probs).sample( + sample_shape=(torch.Size((10,))) + ) + hmc_kernel = NUTS( + collapse_conjugate(model), jit_compile=True, ignore_jit_warnings=True + ) + mcmc = MCMC(hmc_kernel, num_samples=num_samples, warmup_steps=50) + mcmc.run(data) + samples = mcmc.get_samples() + posterior = posterior_replay(model, samples, data, num_samples=num_samples) + assert_equal(posterior["probs"].mean(0), true_probs, prec=0.05) + + +@pytest.mark.parametrize("hyperpriors", [False, True]) +def test_gamma_poisson(hyperpriors): + def model(data): + with pyro.plate("latent_dim", data.shape[1]): + alpha = ( + pyro.sample("alpha", dist.HalfCauchy(1.0)) + if hyperpriors + else torch.tensor([1.0, 1.0]) + ) + beta = ( + pyro.sample("beta", dist.HalfCauchy(1.0)) + if hyperpriors + else torch.tensor([1.0, 1.0]) + ) + gamma_poisson = GammaPoissonPair() + rate = pyro.sample("rate", gamma_poisson.latent(alpha, beta)) + with pyro.plate("data", data.shape[0]): + pyro.sample("obs", gamma_poisson.conditional(rate), obs=data) + + true_rate = torch.tensor([3.0, 10.0]) + num_samples = 100 + data = dist.Poisson(rate=true_rate).sample(sample_shape=(torch.Size((100,)))) + hmc_kernel = NUTS( + collapse_conjugate(model), jit_compile=True, ignore_jit_warnings=True + ) + mcmc = MCMC(hmc_kernel, num_samples=num_samples, warmup_steps=50) + mcmc.run(data) + samples = mcmc.get_samples() + posterior = posterior_replay(model, samples, data, num_samples=num_samples) + assert_equal(posterior["rate"].mean(0), true_rate, prec=0.3) + + +def test_structured_mass(): + def model(cov): + w = pyro.sample("w", dist.Normal(0, 1000).expand([2]).to_event(1)) + x = pyro.sample("x", dist.Normal(0, 1000).expand([1]).to_event(1)) + y = pyro.sample("y", dist.Normal(0, 1000).expand([1]).to_event(1)) + z = pyro.sample("z", dist.Normal(0, 1000).expand([1]).to_event(1)) + wxyz = torch.cat([w, x, y, z]) + pyro.sample("obs", dist.MultivariateNormal(torch.zeros(5), cov), obs=wxyz) + + w_cov = torch.tensor([[1.5, 0.5], [0.5, 1.5]]) + xy_cov = torch.tensor([[2.0, 1.0], [1.0, 3.0]]) + z_var = torch.tensor([2.5]) + cov = torch.zeros(5, 5) + cov[:2, :2] = w_cov + cov[2:4, 2:4] = xy_cov + cov[4, 4] = z_var + + # smoke tests + for dense_mass in [True, False]: + kernel = NUTS( + model, jit_compile=True, ignore_jit_warnings=True, full_mass=dense_mass + ) + mcmc = MCMC(kernel, num_samples=1, warmup_steps=1) + mcmc.run(cov) + assert kernel.inverse_mass_matrix[("w", "x", "y", "z")].dim() == 1 + int( + dense_mass + ) + + kernel = NUTS( + model, + jit_compile=True, + ignore_jit_warnings=True, + full_mass=[("w",), ("x", "y")], + ) + mcmc = MCMC(kernel, num_samples=1, warmup_steps=1000) + mcmc.run(cov) + assert_close(kernel.inverse_mass_matrix[("w",)], w_cov, atol=0.5, rtol=0.5) + assert_close(kernel.inverse_mass_matrix[("x", "y")], xy_cov, atol=0.5, rtol=0.5) + assert_close(kernel.inverse_mass_matrix[("z",)], z_var, atol=0.5, rtol=0.5) + + +def test_arrowhead_mass(): + def model(prec): + w = pyro.sample("w", dist.Normal(0, 1000).expand([2]).to_event(1)) + x = pyro.sample("x", dist.Normal(0, 1000).expand([1]).to_event(1)) + y = pyro.sample("y", dist.Normal(0, 1000).expand([1]).to_event(1)) + z = pyro.sample("z", dist.Normal(0, 1000).expand([2]).to_event(1)) + wyxz = torch.cat([w, y, x, z]) + pyro.sample( + "obs", + dist.MultivariateNormal(torch.zeros(6), precision_matrix=prec), + obs=wyxz, + ) + + A = torch.randn(6, 12) + prec = A @ A.t() * 0.1 + + # smoke tests + for dense_mass in [True, False]: + kernel = NUTS( + model, jit_compile=True, ignore_jit_warnings=True, full_mass=dense_mass + ) + mcmc = MCMC(kernel, num_samples=1, warmup_steps=1) + mcmc.run(prec) + assert kernel.inverse_mass_matrix[("w", "x", "y", "z")].dim() == 1 + int( + dense_mass + ) + + kernel = NUTS( + model, + jit_compile=True, + ignore_jit_warnings=True, + full_mass=[("w",), ("y", "x")], + ) + kernel.mass_matrix_adapter = ArrowheadMassMatrix() + mcmc = MCMC(kernel, num_samples=1, warmup_steps=1000) + mcmc.run(prec) + assert ("w", "y", "x", "z") in kernel.inverse_mass_matrix + mass_matrix = kernel.mass_matrix_adapter.mass_matrix[("w", "y", "x", "z")] + assert mass_matrix.top.shape == (4, 6) + assert mass_matrix.bottom_diag.shape == (2,) + assert_close(mass_matrix.top, prec[:4], atol=0.2, rtol=0.2) + assert_close(mass_matrix.bottom_diag, prec.diag()[4:], atol=0.2, rtol=0.2) + + +def test_dirichlet_categorical_grad_adapt(): + def model(data): + concentration = torch.tensor([1.0, 1.0, 1.0]) + p_latent = pyro.sample("p_latent", dist.Dirichlet(concentration)) + pyro.sample("obs", dist.Categorical(p_latent), obs=data) + return p_latent + + true_probs = torch.tensor([0.1, 0.6, 0.3]) + data = dist.Categorical(true_probs).sample(sample_shape=(torch.Size((2000,)))) + nuts_kernel = NUTS(model, jit_compile=True, ignore_jit_warnings=True) + nuts_kernel.mass_matrix_adapter = ArrowheadMassMatrix() + mcmc = MCMC(nuts_kernel, num_samples=200, warmup_steps=100) + mcmc.run(data) + samples = mcmc.get_samples() + posterior = samples["p_latent"] + assert_equal(posterior.mean(0), true_probs, prec=0.02) diff --git a/pyro/source/tests/infer/mcmc/test_rwkernel.py b/pyro/source/tests/infer/mcmc/test_rwkernel.py new file mode 100644 index 0000000000000000000000000000000000000000..08490703e6c78f7676e68895bd19365b0ddc2048 --- /dev/null +++ b/pyro/source/tests/infer/mcmc/test_rwkernel.py @@ -0,0 +1,40 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +import pyro +import pyro.distributions as dist +from pyro.infer.mcmc.api import MCMC +from pyro.infer.mcmc.rwkernel import RandomWalkKernel +from tests.common import assert_equal + + +def test_beta_bernoulli(): + alpha = torch.tensor([1.1, 2.2]) + beta = torch.tensor([1.1, 2.2]) + + def model(data): + p_latent = pyro.sample("p_latent", dist.Beta(alpha, beta)) + with pyro.plate("data", data.shape[0], dim=-2): + pyro.sample("obs", dist.Bernoulli(p_latent), obs=data) + + num_data = 5 + true_probs = torch.tensor([0.9, 0.1]) + data = dist.Bernoulli(true_probs).sample(sample_shape=(torch.Size((num_data,)))) + + kernel = RandomWalkKernel(model) + mcmc = MCMC(kernel, num_samples=2000, warmup_steps=500) + mcmc.run(data) + samples = mcmc.get_samples() + + data_sum = data.sum(0) + alpha_post = alpha + data_sum + beta_post = beta + num_data - data_sum + expected_mean = alpha_post / (alpha_post + beta_post) + expected_var = ( + expected_mean.pow(2) * beta_post / (alpha_post * (1 + alpha_post + beta_post)) + ) + + assert_equal(samples["p_latent"].mean(0), expected_mean, prec=0.03) + assert_equal(samples["p_latent"].var(0), expected_var, prec=0.005) diff --git a/pyro/source/tests/infer/mcmc/test_valid_models.py b/pyro/source/tests/infer/mcmc/test_valid_models.py new file mode 100644 index 0000000000000000000000000000000000000000..0e9b160860cc3bb3ca176e54fedd8a78117cb456 --- /dev/null +++ b/pyro/source/tests/infer/mcmc/test_valid_models.py @@ -0,0 +1,494 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import io +import logging + +import pytest +import torch + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.infer import config_enumerate +from pyro.infer.mcmc import HMC, NUTS +from pyro.infer.mcmc.api import MCMC +from pyro.infer.mcmc.util import ( + TraceEinsumEvaluator, + TraceTreeEvaluator, + initialize_model, +) +from pyro.infer.reparam import LatentStableReparam +from pyro.poutine.subsample_messenger import _Subsample +from tests.common import assert_close, assert_equal, xfail_param + +logger = logging.getLogger(__name__) + + +def assert_ok(mcmc_kernel): + """ + Assert that inference works without warnings or errors. + """ + MCMC(mcmc_kernel, num_samples=10, warmup_steps=10).run() + + +def assert_error(mcmc_kernel): + """ + Assert that inference fails with an error. + """ + with pytest.raises(ValueError): + MCMC(mcmc_kernel, num_samples=10, warmup_steps=10).run() + + +def print_debug_info(model_trace): + model_trace.compute_log_prob() + for name, site in model_trace.nodes.items(): + if site["type"] == "sample" and not isinstance(site["fn"], _Subsample): + logger.debug("prob( {} ):\n {}".format(name, site["log_prob"].exp())) + + +@pytest.mark.parametrize( + "kernel, kwargs", + [ + (HMC, {"adapt_step_size": True, "num_steps": 3}), + (NUTS, {"adapt_step_size": True}), + ], +) +def test_model_error_stray_batch_dims(kernel, kwargs): + def gmm(): + data = torch.tensor([0.0, 0.0, 3.0, 3.0, 3.0, 5.0, 5.0]) + mix_proportions = pyro.sample("phi", dist.Dirichlet(torch.ones(3))) + cluster_means = pyro.sample( + "cluster_means", dist.Normal(torch.arange(3.0), 1.0) + ) + with pyro.plate("data", data.shape[0]): + assignments = pyro.sample("assignments", dist.Categorical(mix_proportions)) + pyro.sample("obs", dist.Normal(cluster_means[assignments], 1.0), obs=data) + return cluster_means + + mcmc_kernel = kernel(gmm, **kwargs) + # Error due to non finite value for `max_plate_nesting`. + assert_error(mcmc_kernel) + # Error due to batch dims not inside plate. + mcmc_kernel = kernel(gmm, max_plate_nesting=1, **kwargs) + assert_error(mcmc_kernel) + + +@pytest.mark.parametrize( + "kernel, kwargs", + [ + (HMC, {"adapt_step_size": True, "num_steps": 3}), + (NUTS, {"adapt_step_size": True}), + ], +) +def test_model_error_enum_dim_clash(kernel, kwargs): + def gmm(): + data = torch.tensor([0.0, 0.0, 3.0, 3.0, 3.0, 5.0, 5.0]) + with pyro.plate("num_clusters", 3): + mix_proportions = pyro.sample("phi", dist.Dirichlet(torch.tensor(1.0))) + cluster_means = pyro.sample( + "cluster_means", dist.Normal(torch.arange(3.0), 1.0) + ) + with pyro.plate("data", data.shape[0]): + assignments = pyro.sample("assignments", dist.Categorical(mix_proportions)) + pyro.sample("obs", dist.Normal(cluster_means[assignments], 1.0), obs=data) + return cluster_means + + mcmc_kernel = kernel(gmm, max_plate_nesting=0, **kwargs) + assert_error(mcmc_kernel) + + +def test_log_prob_eval_iterates_in_correct_order(): + @poutine.enum(first_available_dim=-5) + @config_enumerate + @poutine.condition(data={"p": torch.tensor(0.4)}) + def model(): + outer = pyro.plate("outer", 3, dim=-1) + inner1 = pyro.plate("inner1", 4, dim=-3) + inner2 = pyro.plate("inner2", 5, dim=-2) + inner3 = pyro.plate("inner3", 6, dim=-4) + + p = pyro.sample("p", dist.Uniform(0.0, 1.0)) + y = pyro.sample("y", dist.Bernoulli(p)) + q = 0.5 + 0.25 * y + with outer, inner2: + z0 = pyro.sample("z0", dist.Bernoulli(q)) + pyro.sample("obs0", dist.Normal(2 * z0 - 1, 1.0), obs=torch.ones(5, 3)) + with outer: + v = pyro.sample("v", dist.Bernoulli(q)) + r = 0.4 + 0.1 * v + with inner1, inner3: + z1 = pyro.sample("z1", dist.Bernoulli(r)) + pyro.sample( + "obs1", dist.Normal(2 * z1 - 1, 1.0), obs=torch.ones(6, 4, 1, 3) + ) + with inner2: + z2 = pyro.sample("z2", dist.Bernoulli(r)) + pyro.sample("obs2", dist.Normal(2 * z2 - 1, 1.0), obs=torch.ones(5, 3)) + + model_trace = poutine.trace(model).get_trace() + trace_prob_evaluator = TraceTreeEvaluator(model_trace, True, 4) + trace_prob_evaluator.log_prob(model_trace) + plate_dims, enum_dims = [], [] + for key in reversed( + sorted(trace_prob_evaluator._log_probs.keys(), key=lambda x: (len(x), x)) + ): + plate_dims.append(trace_prob_evaluator._plate_dims[key]) + enum_dims.append(trace_prob_evaluator._enum_dims[key]) + # The reduction operation returns a singleton with dimensions preserved. + assert not any( + i != 1 for i in trace_prob_evaluator._aggregate_log_probs(frozenset()).shape + ) + assert plate_dims == [[-4, -3], [-2], [-1], []] + assert enum_dims, [[-8], [-9, -6], [-7], [-5]] + + +@pytest.mark.parametrize("Eval", [TraceTreeEvaluator, TraceEinsumEvaluator]) +def test_all_discrete_sites_log_prob(Eval): + p = 0.3 + + @poutine.enum(first_available_dim=-4) + @config_enumerate + def model(): + d = dist.Bernoulli(p) + context1 = pyro.plate("outer", 2, dim=-1) + context2 = pyro.plate("inner1", 1, dim=-2) + context3 = pyro.plate("inner2", 1, dim=-3) + pyro.sample("w", d) + with context1: + pyro.sample("x", d) + with context1, context2: + pyro.sample("y", d) + with context1, context3: + pyro.sample("z", d) + + model_trace = poutine.trace(model).get_trace() + print_debug_info(model_trace) + trace_prob_evaluator = Eval(model_trace, True, 3) + # all discrete sites enumerated out. + assert_equal(trace_prob_evaluator.log_prob(model_trace), torch.tensor(0.0)) + + +@pytest.mark.parametrize( + "Eval", + [ + TraceTreeEvaluator, + xfail_param(TraceEinsumEvaluator, reason="TODO: Debug this failure case."), + ], +) +def test_enumeration_in_tree(Eval): + @poutine.enum(first_available_dim=-5) + @config_enumerate + @poutine.condition( + data={ + "sample1": torch.tensor(0.0), + "sample2": torch.tensor(1.0), + "sample3": torch.tensor(2.0), + } + ) + def model(): + outer = pyro.plate("outer", 2, dim=-1) + inner1 = pyro.plate("inner1", 2, dim=-3) + inner2 = pyro.plate("inner2", 3, dim=-2) + inner3 = pyro.plate("inner3", 2, dim=-4) + + d = dist.Bernoulli(0.3) + n = dist.Normal(0.0, 1.0) + pyro.sample("y", d) + pyro.sample("sample1", n) + with outer, inner2: + pyro.sample("z0", d) + pyro.sample("sample2", n) + with outer: + pyro.sample("z1", d) + pyro.sample("sample3", n) + with inner1, inner3: + pyro.sample("z2", d) + with inner2: + pyro.sample("z3", d) + + model_trace = poutine.trace(model).get_trace() + print_debug_info(model_trace) + trace_prob_evaluator = Eval(model_trace, True, 4) + # p_n(0.) * p_n(2.)^2 * p_n(1.)^6 + assert_equal( + trace_prob_evaluator.log_prob(model_trace), torch.tensor(-15.2704), prec=1e-4 + ) + + +@pytest.mark.xfail(reason="Enumeration currently does not work for general DAGs") +@pytest.mark.parametrize("Eval", [TraceTreeEvaluator, TraceEinsumEvaluator]) +def test_enumeration_in_dag(Eval): + p = 0.3 + + @poutine.enum(first_available_dim=-3) + @config_enumerate + @poutine.condition(data={"b": torch.tensor(0.4), "c": torch.tensor(0.4)}) + def model(): + d = dist.Bernoulli(p) + context1 = pyro.plate("outer", 3, dim=-1) + context2 = pyro.plate("inner", 2, dim=-2) + pyro.sample("w", d) + pyro.sample("b", dist.Beta(1.1, 1.1)) + with context1: + pyro.sample("x", d) + with context2: + pyro.sample("c", dist.Beta(1.1, 1.1)) + pyro.sample("y", d) + with context1, context2: + pyro.sample("z", d) + + model_trace = poutine.trace(model).get_trace() + print_debug_info(model_trace) + trace_prob_evaluator = Eval(model_trace, True, 2) + assert_equal( + trace_prob_evaluator.log_prob(model_trace), torch.tensor(0.16196) + ) # p_beta(0.3)^3 + + +@pytest.mark.parametrize( + "data, expected_log_prob", + [ + (torch.tensor([1.0]), torch.tensor(-1.3434)), + (torch.tensor([0.0]), torch.tensor(-1.4189)), + (torch.tensor([1.0, 0.0, 0.0]), torch.tensor(-4.1813)), + ], +) +@pytest.mark.parametrize("Eval", [TraceTreeEvaluator, TraceEinsumEvaluator]) +def test_enum_log_prob_continuous_observed(data, expected_log_prob, Eval): + @poutine.enum(first_available_dim=-2) + @config_enumerate + @poutine.condition(data={"p": torch.tensor(0.4)}) + def model(data): + p = pyro.sample("p", dist.Uniform(0.0, 1.0)) + y = pyro.sample("y", dist.Bernoulli(p)) + q = 0.5 + 0.25 * y + with pyro.plate("data", len(data)): + z = pyro.sample("z", dist.Bernoulli(q)) + mean = 2 * z - 1 + pyro.sample("obs", dist.Normal(mean, 1.0), obs=data) + + model_trace = poutine.trace(model).get_trace(data) + print_debug_info(model_trace) + trace_prob_evaluator = Eval(model_trace, True, 1) + assert_equal( + trace_prob_evaluator.log_prob(model_trace), expected_log_prob, prec=1e-3 + ) + + +@pytest.mark.parametrize( + "data, expected_log_prob", + [ + (torch.tensor([1.0]), torch.tensor(-3.5237)), + (torch.tensor([0.0]), torch.tensor(-3.7091)), + (torch.tensor([1.0, 1.0]), torch.tensor(-3.9699)), + (torch.tensor([1.0, 0.0, 0.0]), torch.tensor(-5.3357)), + ], +) +@pytest.mark.parametrize("Eval", [TraceTreeEvaluator, TraceEinsumEvaluator]) +def test_enum_log_prob_continuous_sampled(data, expected_log_prob, Eval): + @poutine.enum(first_available_dim=-2) + @config_enumerate + @poutine.condition( + data={"p": torch.tensor(0.4), "n": torch.tensor([[1.0], [-1.0]])} + ) + def model(data): + p = pyro.sample("p", dist.Uniform(0.0, 1.0)) + y = pyro.sample("y", dist.Bernoulli(p)) + mean = 2 * y - 1 + n = pyro.sample("n", dist.Normal(mean, 1.0)) + with pyro.plate("data", len(data)): + pyro.sample("obs", dist.Bernoulli(torch.sigmoid(n)), obs=data) + + model_trace = poutine.trace(model).get_trace(data) + print_debug_info(model_trace) + trace_prob_evaluator = Eval(model_trace, True, 1) + assert_equal( + trace_prob_evaluator.log_prob(model_trace), expected_log_prob, prec=1e-3 + ) + + +@pytest.mark.parametrize( + "data, expected_log_prob", + [ + (torch.tensor([1.0]), torch.tensor(-0.5108)), + (torch.tensor([1.0, 1.0]), torch.tensor(-0.9808)), + (torch.tensor([1.0, 0.0, 0.0]), torch.tensor(-2.3671)), + ], +) +@pytest.mark.parametrize("Eval", [TraceTreeEvaluator, TraceEinsumEvaluator]) +def test_enum_log_prob_discrete_observed(data, expected_log_prob, Eval): + @poutine.enum(first_available_dim=-2) + @config_enumerate + @poutine.condition(data={"p": torch.tensor(0.4)}) + def model(data): + p = pyro.sample("p", dist.Uniform(0.0, 1.0)) + y = pyro.sample("y", dist.Bernoulli(p)) + q = 0.25 * y + 0.5 + with pyro.plate("data", len(data)): + pyro.sample("obs", dist.Bernoulli(q), obs=data) + + model_trace = poutine.trace(model).get_trace(data) + print_debug_info(model_trace) + trace_prob_evaluator = Eval(model_trace, True, 1) + assert_equal( + trace_prob_evaluator.log_prob(model_trace), expected_log_prob, prec=1e-3 + ) + + +@pytest.mark.parametrize( + "data, expected_log_prob", + [ + (torch.tensor([1.0]), torch.tensor(-1.15)), + (torch.tensor([0.0]), torch.tensor(-1.46)), + (torch.tensor([1.0, 1.0]), torch.tensor(-2.1998)), + ], +) +@pytest.mark.parametrize("Eval", [TraceTreeEvaluator, TraceEinsumEvaluator]) +def test_enum_log_prob_multiple_plate(data, expected_log_prob, Eval): + @poutine.enum(first_available_dim=-2) + @config_enumerate + @poutine.condition(data={"p": torch.tensor(0.4)}) + def model(data): + p = pyro.sample("p", dist.Beta(1.1, 1.1)) + y = pyro.sample("y", dist.Bernoulli(p)) + q = 0.5 + 0.25 * y + r = 0.4 + 0.2 * y + with pyro.plate("data1", len(data)): + pyro.sample("obs1", dist.Bernoulli(q), obs=data) + with pyro.plate("data2", len(data)): + pyro.sample("obs2", dist.Bernoulli(r), obs=data) + + model_trace = poutine.trace(model).get_trace(data) + print_debug_info(model_trace) + trace_prob_evaluator = Eval(model_trace, True, 1) + assert_equal( + trace_prob_evaluator.log_prob(model_trace), expected_log_prob, prec=1e-3 + ) + + +@pytest.mark.parametrize( + "data, expected_log_prob", + [ + (torch.tensor([1.0]), torch.tensor(-1.5478)), + (torch.tensor([0.0]), torch.tensor(-1.4189)), + (torch.tensor([1.0, 0.0, 0.0]), torch.tensor(-4.3857)), + ], +) +@pytest.mark.parametrize("Eval", [TraceTreeEvaluator, TraceEinsumEvaluator]) +def test_enum_log_prob_nested_plate(data, expected_log_prob, Eval): + @poutine.enum(first_available_dim=-3) + @config_enumerate + @poutine.condition(data={"p": torch.tensor(0.4)}) + def model(data): + p = pyro.sample("p", dist.Uniform(0.0, 1.0)) + y = pyro.sample("y", dist.Bernoulli(p)) + q = 0.5 + 0.25 * y + with pyro.plate("intermediate", 1, dim=-2): + v = pyro.sample("v", dist.Bernoulli(q)) + with pyro.plate("data", len(data), dim=-1): + r = 0.4 + 0.1 * v + z = pyro.sample("z", dist.Bernoulli(r)) + pyro.sample("obs", dist.Normal(2 * z - 1, 1.0), obs=data) + + model_trace = poutine.trace(model).get_trace(data) + print_debug_info(model_trace) + trace_prob_evaluator = Eval(model_trace, True, 2) + assert_equal( + trace_prob_evaluator.log_prob(model_trace), expected_log_prob, prec=1e-3 + ) + + +def _beta_bernoulli(data): + alpha = torch.tensor([1.1, 1.1]) + beta = torch.tensor([1.1, 1.1]) + p_latent = pyro.sample("p_latent", dist.Beta(alpha, beta)) + with pyro.plate("data", data.shape[0], dim=-2): + pyro.sample("obs", dist.Bernoulli(p_latent), obs=data) + return p_latent + + +@pytest.mark.parametrize("jit", [False, True]) +def test_potential_fn_pickling(jit): + data = dist.Bernoulli(torch.tensor([0.8, 0.2])).sample( + sample_shape=(torch.Size((1000,))) + ) + _, potential_fn, _, _ = initialize_model( + _beta_bernoulli, (data,), jit_compile=jit, skip_jit_warnings=True + ) + test_data = {"p_latent": torch.tensor([0.2, 0.6])} + buffer = io.BytesIO() + torch.save(potential_fn, buffer) + buffer.seek(0) + deser_potential_fn = torch.load(buffer, weights_only=False) + assert_close(deser_potential_fn(test_data), potential_fn(test_data)) + + +@pytest.mark.parametrize( + "kernel, kwargs", + [ + (HMC, {"adapt_step_size": True, "num_steps": 3}), + (NUTS, {"adapt_step_size": True}), + ], +) +def test_reparam_stable(kernel, kwargs): + @poutine.reparam(config={"z": LatentStableReparam()}) + def model(): + stability = pyro.sample("stability", dist.Uniform(0.0, 2.0)) + skew = pyro.sample("skew", dist.Uniform(-1.0, 1.0)) + y = pyro.sample("z", dist.Stable(stability, skew)) + pyro.sample("x", dist.Poisson(y.abs()), obs=torch.tensor(1.0)) + + mcmc_kernel = kernel(model, max_plate_nesting=0, **kwargs) + assert_ok(mcmc_kernel) + + +# Regression test for https://github.com/pyro-ppl/pyro/issues/2627 +@pytest.mark.parametrize("Kernel", [HMC, NUTS]) +def test_potential_fn_initial_params(Kernel): + target = torch.distributions.Normal( + loc=torch.tensor([10.0, 0.0]), scale=torch.tensor([1.0, 1.0]) + ) + + def potential_fn(z): + z = z["points"] + return -target.log_prob(z).sum(1)[None] + + initial_params = {"points": torch.tensor([[0.0, 0.0]])} + kernel = Kernel(potential_fn=potential_fn) + mcmc = MCMC( + kernel=kernel, warmup_steps=20, initial_params=initial_params, num_samples=10 + ) + + mcmc.run() + mcmc.get_samples()["points"] + + +@pytest.mark.parametrize( + "mask", + [ + torch.tensor(True), + torch.tensor(False), + torch.tensor([True]), + torch.tensor([False]), + torch.tensor([False, True, False]), + ], +) +@pytest.mark.parametrize( + "Kernel, options", + [ + (HMC, {"adapt_step_size": True, "num_steps": 3}), + (NUTS, {"adapt_step_size": True, "max_tree_depth": 3}), + ], +) +def test_obs_mask_ok(Kernel, options, mask): + data = torch.tensor([7.0, 7.0, 7.0]) + + def model(): + x = pyro.sample("x", dist.Normal(0.0, 1.0)) + with pyro.plate("plate", len(data)): + y = pyro.sample("y", dist.Normal(x, 1.0), obs=data, obs_mask=mask) + assert ((y == data) == mask).all() + + mcmc_kernel = Kernel(model, max_plate_nesting=0, **options) + assert_ok(mcmc_kernel) diff --git a/pyro/source/tests/infer/reparam/__init__.py b/pyro/source/tests/infer/reparam/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/tests/infer/reparam/test_conjugate.py b/pyro/source/tests/infer/reparam/test_conjugate.py new file mode 100644 index 0000000000000000000000000000000000000000..301b8e1b0a3ca07da8e01223c8392d0c63884f17 --- /dev/null +++ b/pyro/source/tests/infer/reparam/test_conjugate.py @@ -0,0 +1,252 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.infer import Predictive, Trace_ELBO +from pyro.infer.autoguide import AutoDiagonalNormal +from pyro.infer.mcmc.api import MCMC +from pyro.infer.mcmc.hmc import HMC +from pyro.infer.reparam import ConjugateReparam, LinearHMMReparam, StableReparam +from tests.common import assert_close +from tests.ops.gaussian import random_mvn + +from .util import check_init_reparam + + +def test_beta_binomial_static_sample(): + total = 10 + counts = dist.Binomial(total, 0.3).sample() + concentration1 = torch.tensor(0.5) + concentration0 = torch.tensor(1.5) + + prior = dist.Beta(concentration1, concentration0) + likelihood = dist.Beta(1 + counts, 1 + total - counts) + posterior = dist.Beta(concentration1 + counts, concentration0 + total - counts) + + def model(): + prob = pyro.sample("prob", prior) + pyro.sample("counts", dist.Binomial(total, prob), obs=counts) + + reparam_model = poutine.reparam(model, {"prob": ConjugateReparam(likelihood)}) + + with poutine.trace() as tr, pyro.plate("particles", 10000): + reparam_model() + samples = tr.trace.nodes["prob"]["value"] + + assert_close(samples.mean(), posterior.mean, atol=0.01) + assert_close(samples.std(), posterior.variance.sqrt(), atol=0.01) + + +def test_beta_binomial_dependent_sample(): + total = 10 + counts = dist.Binomial(total, 0.3).sample() + concentration1 = torch.tensor(0.5) + concentration0 = torch.tensor(1.5) + + prior = dist.Beta(concentration1, concentration0) + posterior = dist.Beta(concentration1 + counts, concentration0 + total - counts) + + def model(counts): + prob = pyro.sample("prob", prior) + pyro.sample("counts", dist.Binomial(total, prob), obs=counts) + + reparam_model = poutine.reparam( + model, + { + "prob": ConjugateReparam( + lambda counts: dist.Beta(1 + counts, 1 + total - counts) + ), + }, + ) + + with poutine.trace() as tr, pyro.plate("particles", 10000): + reparam_model(counts) + samples = tr.trace.nodes["prob"]["value"] + + assert_close(samples.mean(), posterior.mean, atol=0.01) + assert_close(samples.std(), posterior.variance.sqrt(), atol=0.01) + + +def test_beta_binomial_elbo(): + total = 10 + counts = dist.Binomial(total, 0.3).sample() + concentration1 = torch.tensor(0.5, requires_grad=True) + concentration0 = torch.tensor(1.5, requires_grad=True) + + prior = dist.Beta(concentration1, concentration0) + likelihood = dist.Beta(1 + counts, 1 + total - counts) + posterior = dist.Beta(concentration1 + counts, concentration0 + total - counts) + + def model(): + prob = pyro.sample("prob", prior) + pyro.sample("counts", dist.Binomial(total, prob), obs=counts) + + def guide(): + pyro.sample("prob", posterior) + + reparam_model = poutine.reparam(model, {"prob": ConjugateReparam(likelihood)}) + + def reparam_guide(): + pass + + elbo = Trace_ELBO( + num_particles=10000, vectorize_particles=True, max_plate_nesting=0 + ) + expected_loss = elbo.differentiable_loss(model, guide) + actual_loss = elbo.differentiable_loss(reparam_model, reparam_guide) + assert_close(actual_loss, expected_loss, atol=0.01) + + params = [concentration1, concentration0] + expected_grads = torch.autograd.grad(expected_loss, params, retain_graph=True) + actual_grads = torch.autograd.grad(actual_loss, params, retain_graph=True) + for a, e in zip(actual_grads, expected_grads): + assert_close(a, e, rtol=0.01) + + +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("hidden_dim,obs_dim", [(1, 1), (3, 2)], ids=str) +@pytest.mark.parametrize("num_steps", range(1, 6)) +def test_gaussian_hmm_elbo(batch_shape, num_steps, hidden_dim, obs_dim): + init_dist = random_mvn(batch_shape, hidden_dim) + trans_mat = torch.randn( + batch_shape + (num_steps, hidden_dim, hidden_dim), requires_grad=True + ) + trans_dist = random_mvn(batch_shape + (num_steps,), hidden_dim) + obs_mat = torch.randn( + batch_shape + (num_steps, hidden_dim, obs_dim), requires_grad=True + ) + obs_dist = random_mvn(batch_shape + (num_steps,), obs_dim) + + data = obs_dist.sample() + assert data.shape == batch_shape + (num_steps, obs_dim) + prior = dist.GaussianHMM(init_dist, trans_mat, trans_dist, obs_mat, obs_dist) + likelihood = dist.Normal(data, 1).to_event(2) + posterior, log_normalizer = prior.conjugate_update(likelihood) + + def model(data): + with pyro.plate_stack("plates", batch_shape): + z = pyro.sample("z", prior) + pyro.sample("x", dist.Normal(z, 1).to_event(2), obs=data) + + def guide(data): + with pyro.plate_stack("plates", batch_shape): + pyro.sample("z", posterior) + + reparam_model = poutine.reparam(model, {"z": ConjugateReparam(likelihood)}) + + def reparam_guide(data): + pass + + elbo = Trace_ELBO(num_particles=1000, vectorize_particles=True) + expected_loss = elbo.differentiable_loss(model, guide, data) + actual_loss = elbo.differentiable_loss(reparam_model, reparam_guide, data) + assert_close(actual_loss, expected_loss, atol=0.01) + + params = [trans_mat, obs_mat] + expected_grads = torch.autograd.grad(expected_loss, params, retain_graph=True) + actual_grads = torch.autograd.grad(actual_loss, params, retain_graph=True) + for a, e in zip(actual_grads, expected_grads): + assert_close(a, e, rtol=0.01) + + +def random_stable(shape): + stability = dist.Uniform(1.4, 1.9).sample(shape) + skew = dist.Uniform(-1, 1).sample(shape) + scale = torch.rand(shape).exp() + loc = torch.randn(shape) + return dist.Stable(stability, skew, scale, loc) + + +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("hidden_dim,obs_dim", [(1, 1), (2, 3)], ids=str) +@pytest.mark.parametrize("num_steps", range(1, 6)) +def test_stable_hmm_smoke(batch_shape, num_steps, hidden_dim, obs_dim): + init_dist = random_stable(batch_shape + (hidden_dim,)).to_event(1) + trans_mat = torch.randn( + batch_shape + (num_steps, hidden_dim, hidden_dim), requires_grad=True + ) + trans_dist = random_stable(batch_shape + (num_steps, hidden_dim)).to_event(1) + obs_mat = torch.randn( + batch_shape + (num_steps, hidden_dim, obs_dim), requires_grad=True + ) + obs_dist = random_stable(batch_shape + (num_steps, obs_dim)).to_event(1) + data = obs_dist.sample() + assert data.shape == batch_shape + (num_steps, obs_dim) + + def model(data): + hmm = dist.LinearHMM( + init_dist, trans_mat, trans_dist, obs_mat, obs_dist, duration=num_steps + ) + with pyro.plate_stack("plates", batch_shape): + z = pyro.sample("z", hmm) + pyro.sample("x", dist.Normal(z, 1).to_event(2), obs=data) + + # Test that we can combine these two reparameterizers. + reparam_model = poutine.reparam( + model, + { + "z": LinearHMMReparam(StableReparam(), StableReparam(), StableReparam()), + }, + ) + reparam_model = poutine.reparam( + reparam_model, + { + "z": ConjugateReparam(dist.Normal(data, 1).to_event(2)), + }, + ) + reparam_guide = AutoDiagonalNormal(reparam_model) # Models auxiliary variables. + + # Smoke test only. + elbo = Trace_ELBO(num_particles=5, vectorize_particles=True) + loss = elbo.differentiable_loss(reparam_model, reparam_guide, data) + params = [trans_mat, obs_mat] + torch.autograd.grad(loss, params, retain_graph=True) + + +def test_beta_binomial_hmc(): + num_samples = 1000 + total = 10 + counts = dist.Binomial(total, 0.3).sample() + concentration1 = torch.tensor(0.5) + concentration0 = torch.tensor(1.5) + + prior = dist.Beta(concentration1, concentration0) + likelihood = dist.Beta(1 + counts, 1 + total - counts) + posterior = dist.Beta(concentration1 + counts, concentration0 + total - counts) + + def model(): + prob = pyro.sample("prob", prior) + pyro.sample("counts", dist.Binomial(total, prob), obs=counts) + + reparam_model = poutine.reparam(model, {"prob": ConjugateReparam(likelihood)}) + + kernel = HMC(reparam_model) + samples = MCMC(kernel, num_samples, warmup_steps=0).run() + pred = Predictive(reparam_model, samples, num_samples=num_samples) + trace = pred.get_vectorized_trace() + samples = trace.nodes["prob"]["value"] + + assert_close(samples.mean(), posterior.mean, atol=0.01) + assert_close(samples.std(), posterior.variance.sqrt(), atol=0.01) + + +def test_init(): + total = 10 + counts = dist.Binomial(total, 0.3).sample() + concentration1 = torch.tensor(0.5) + concentration0 = torch.tensor(1.5) + + prior = dist.Beta(concentration1, concentration0) + likelihood = dist.Beta(1 + counts, 1 + total - counts) + + def model(): + x = pyro.sample("x", prior) + pyro.sample("counts", dist.Binomial(total, x), obs=counts) + return x + + check_init_reparam(model, ConjugateReparam(likelihood)) diff --git a/pyro/source/tests/infer/reparam/test_discrete_cosine.py b/pyro/source/tests/infer/reparam/test_discrete_cosine.py new file mode 100644 index 0000000000000000000000000000000000000000..17217e74a194f5b28fb256c7af769dd876115ac3 --- /dev/null +++ b/pyro/source/tests/infer/reparam/test_discrete_cosine.py @@ -0,0 +1,136 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch +from torch.autograd import grad + +import pyro +import pyro.distributions as dist +from pyro import poutine +from pyro.infer.reparam import DiscreteCosineReparam +from tests.common import assert_close + +from .util import check_init_reparam + + +# Test helper to extract central moments from samples. +def get_moments(x): + n = x.size(0) + x = x.reshape(n, -1) + mean = x.mean(0) + x = x - mean + std = (x * x).mean(0).sqrt() + x = x / std + corr = (x.unsqueeze(-1) * x.unsqueeze(-2)).mean(0).reshape(-1) + return torch.cat([mean, std, corr]) + + +@pytest.mark.parametrize("smooth", [0.0, 0.5, 1.0, 2.0]) +@pytest.mark.parametrize( + "shape,dim", + [ + ((6,), -1), + ( + ( + 2, + 5, + ), + -1, + ), + ((4, 2), -2), + ((2, 3, 1), -2), + ], + ids=str, +) +def test_normal(shape, dim, smooth): + loc = torch.empty(shape).uniform_(-1.0, 1.0).requires_grad_() + scale = torch.empty(shape).uniform_(0.5, 1.5).requires_grad_() + + def model(): + with pyro.plate_stack("plates", shape[:dim]): + with pyro.plate("particles", 10000): + pyro.sample("x", dist.Normal(loc, scale).expand(shape).to_event(-dim)) + + value = poutine.trace(model).get_trace().nodes["x"]["value"] + expected_probe = get_moments(value) + + rep = DiscreteCosineReparam(dim=dim, smooth=smooth) + reparam_model = poutine.reparam(model, {"x": rep}) + trace = poutine.trace(reparam_model).get_trace() + assert isinstance(trace.nodes["x_dct"]["fn"], dist.TransformedDistribution) + assert isinstance(trace.nodes["x"]["fn"], dist.Delta) + value = trace.nodes["x"]["value"] + actual_probe = get_moments(value) + assert_close(actual_probe, expected_probe, atol=0.1) + + for actual_m, expected_m in zip(actual_probe[:10], expected_probe[:10]): + expected_grads = grad(expected_m.sum(), [loc, scale], retain_graph=True) + actual_grads = grad(actual_m.sum(), [loc, scale], retain_graph=True) + assert_close(actual_grads[0], expected_grads[0], atol=0.05) + assert_close(actual_grads[1], expected_grads[1], atol=0.05) + + +@pytest.mark.parametrize("smooth", [0.0, 0.5, 1.0, 2.0]) +@pytest.mark.parametrize( + "shape,dim", + [ + ((6,), -1), + ( + ( + 2, + 5, + ), + -1, + ), + ((4, 2), -2), + ((2, 3, 1), -2), + ], + ids=str, +) +def test_uniform(shape, dim, smooth): + def model(): + with pyro.plate_stack("plates", shape[:dim]): + with pyro.plate("particles", 10000): + pyro.sample("x", dist.Uniform(0, 1).expand(shape).to_event(-dim)) + + value = poutine.trace(model).get_trace().nodes["x"]["value"] + expected_probe = get_moments(value) + + reparam_model = poutine.reparam( + model, {"x": DiscreteCosineReparam(dim=dim, smooth=smooth)} + ) + trace = poutine.trace(reparam_model).get_trace() + assert isinstance(trace.nodes["x_dct"]["fn"], dist.TransformedDistribution) + assert isinstance(trace.nodes["x"]["fn"], dist.Delta) + value = trace.nodes["x"]["value"] + actual_probe = get_moments(value) + assert_close(actual_probe, expected_probe, atol=0.1) + + +@pytest.mark.parametrize("smooth", [0.0, 0.5, 1.0, 2.0]) +@pytest.mark.parametrize( + "shape,dim", + [ + ((6,), -1), + ( + ( + 2, + 5, + ), + -1, + ), + ((4, 2), -2), + ((2, 3, 1), -2), + ], + ids=str, +) +def test_init(shape, dim, smooth): + loc = torch.empty(shape).uniform_(-1.0, 1.0).requires_grad_() + scale = torch.empty(shape).uniform_(0.5, 1.5).requires_grad_() + + def model(): + with pyro.plate_stack("plates", shape[:dim]): + return pyro.sample("x", dist.Normal(loc, scale).to_event(-dim)) + + check_init_reparam(model, DiscreteCosineReparam(dim=dim, smooth=smooth)) diff --git a/pyro/source/tests/infer/reparam/test_haar.py b/pyro/source/tests/infer/reparam/test_haar.py new file mode 100644 index 0000000000000000000000000000000000000000..f981c9ee545d55141a15e381afdceeb426222696 --- /dev/null +++ b/pyro/source/tests/infer/reparam/test_haar.py @@ -0,0 +1,188 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch +from torch.autograd import grad + +import pyro +import pyro.distributions as dist +from pyro import poutine +from pyro.distributions.transforms.haar import HaarTransform +from pyro.infer.autoguide.initialization import InitMessenger, init_to_value +from pyro.infer.reparam import HaarReparam +from tests.common import assert_close + +from .util import check_init_reparam + + +# Test helper to extract central moments from samples. +def get_moments(x): + n = x.size(0) + x = x.reshape(n, -1) + mean = x.mean(0) + x = x - mean + std = (x * x).mean(0).sqrt() + x = x / std + corr = (x.unsqueeze(-1) * x.unsqueeze(-2)).mean(0).reshape(-1) + return torch.cat([mean, std, corr]) + + +@pytest.mark.parametrize("flip", [False, True]) +@pytest.mark.parametrize( + "shape,dim", + [ + ((6,), -1), + ( + ( + 2, + 5, + ), + -1, + ), + ((4, 2), -2), + ((2, 3, 1), -2), + ], + ids=str, +) +def test_normal(shape, dim, flip): + loc = torch.empty(shape).uniform_(-1.0, 1.0).requires_grad_() + scale = torch.empty(shape).uniform_(0.5, 1.5).requires_grad_() + + def model(): + with pyro.plate_stack("plates", shape[:dim]): + with pyro.plate("particles", 10000): + pyro.sample("x", dist.Normal(loc, scale).expand(shape).to_event(-dim)) + + value = poutine.trace(model).get_trace().nodes["x"]["value"] + expected_probe = get_moments(value) + + rep = HaarReparam(dim=dim, flip=flip) + reparam_model = poutine.reparam(model, {"x": rep}) + trace = poutine.trace(reparam_model).get_trace() + assert isinstance(trace.nodes["x_haar"]["fn"], dist.TransformedDistribution) + assert isinstance(trace.nodes["x"]["fn"], dist.Delta) + value = trace.nodes["x"]["value"] + actual_probe = get_moments(value) + assert_close(actual_probe, expected_probe, atol=0.1) + + for actual_m, expected_m in zip(actual_probe[:10], expected_probe[:10]): + expected_grads = grad(expected_m.sum(), [loc, scale], retain_graph=True) + actual_grads = grad(actual_m.sum(), [loc, scale], retain_graph=True) + assert_close(actual_grads[0], expected_grads[0], atol=0.05) + assert_close(actual_grads[1], expected_grads[1], atol=0.05) + + +@pytest.mark.parametrize("flip", [False, True]) +@pytest.mark.parametrize( + "shape,dim", + [ + ((6,), -1), + ( + ( + 2, + 5, + ), + -1, + ), + ((4, 2), -2), + ((2, 3, 1), -2), + ], + ids=str, +) +def test_uniform(shape, dim, flip): + def model(): + with pyro.plate_stack("plates", shape[:dim]): + with pyro.plate("particles", 10000): + pyro.sample("x", dist.Uniform(0, 1).expand(shape).to_event(-dim)) + + value = poutine.trace(model).get_trace().nodes["x"]["value"] + expected_probe = get_moments(value) + + reparam_model = poutine.reparam(model, {"x": HaarReparam(dim=dim, flip=flip)}) + trace = poutine.trace(reparam_model).get_trace() + assert isinstance(trace.nodes["x_haar"]["fn"], dist.TransformedDistribution) + assert isinstance(trace.nodes["x"]["fn"], dist.Delta) + value = trace.nodes["x"]["value"] + actual_probe = get_moments(value) + assert_close(actual_probe, expected_probe, atol=0.1) + + +@pytest.mark.parametrize("flip", [False, True]) +@pytest.mark.parametrize( + "shape,dim", + [ + ((6,), -1), + ( + ( + 2, + 5, + ), + -1, + ), + ((4, 2), -2), + ((2, 3, 1), -2), + ], + ids=str, +) +def test_init(shape, dim, flip): + loc = torch.empty(shape).uniform_(-1.0, 1.0).requires_grad_() + scale = torch.empty(shape).uniform_(0.5, 1.5).requires_grad_() + + def model(): + with pyro.plate_stack("plates", shape[:dim]): + return pyro.sample("x", dist.Normal(loc, scale).to_event(-dim)) + + check_init_reparam(model, HaarReparam(dim=dim, flip=flip)) + + +def test_nested(): + shape = (5, 6) + + @poutine.reparam(config={"x": HaarReparam(dim=-1), "x_haar": HaarReparam(dim=-2)}) + def model(): + pyro.sample("x", dist.Normal(torch.zeros(shape), 1).to_event(2)) + + # Try without initialization, e.g. in AutoGuide._setup_prototype(). + trace = poutine.trace(model).get_trace() + assert {"x", "x_haar", "x_haar_haar"}.issubset(trace.nodes) + assert trace.nodes["x"]["is_observed"] + assert trace.nodes["x_haar"]["is_observed"] + assert not trace.nodes["x_haar_haar"]["is_observed"] + assert trace.nodes["x"]["value"].shape == shape + + # Try conditioning on x_haar_haar, e.g. in Predictive. + x = torch.randn(shape) + x_haar = HaarTransform(dim=-1)(x) + x_haar_haar = HaarTransform(dim=-2)(x_haar) + with poutine.condition(data={"x_haar_haar": x_haar_haar}): + trace = poutine.trace(model).get_trace() + assert {"x", "x_haar", "x_haar_haar"}.issubset(trace.nodes) + assert trace.nodes["x"]["is_observed"] + assert trace.nodes["x_haar"]["is_observed"] + assert trace.nodes["x_haar_haar"]["is_observed"] + assert_close(trace.nodes["x"]["value"], x) + assert_close(trace.nodes["x_haar"]["value"], x_haar) + assert_close(trace.nodes["x_haar_haar"]["value"], x_haar_haar) + + # Try with custom initialization. + # This is required for autoguides and MCMC. + with InitMessenger(init_to_value(values={"x": x})): + trace = poutine.trace(model).get_trace() + assert {"x", "x_haar", "x_haar_haar"}.issubset(trace.nodes) + assert trace.nodes["x"]["is_observed"] + assert trace.nodes["x_haar"]["is_observed"] + assert not trace.nodes["x_haar_haar"]["is_observed"] + assert_close(trace.nodes["x"]["value"], x) + + # Try conditioning on x. + x = torch.randn(shape) + with poutine.condition(data={"x": x}): + trace = poutine.trace(model).get_trace() + assert {"x", "x_haar", "x_haar_haar"}.issubset(trace.nodes) + assert trace.nodes["x"]["is_observed"] + assert trace.nodes["x_haar"]["is_observed"] + # TODO Decide whether it is worth fixing this failing assertion. + # See https://github.com/pyro-ppl/pyro/issues/2878 + # assert trace.nodes["x_haar_haar"]["is_observed"] + assert_close(trace.nodes["x"]["value"], x) diff --git a/pyro/source/tests/infer/reparam/test_hmm.py b/pyro/source/tests/infer/reparam/test_hmm.py new file mode 100644 index 0000000000000000000000000000000000000000..719210377e6f4a77891f11a47a00ee2e8b36bdf4 --- /dev/null +++ b/pyro/source/tests/infer/reparam/test_hmm.py @@ -0,0 +1,297 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +import pyro +import pyro.distributions as dist +from pyro import poutine +from pyro.infer.reparam import ( + LinearHMMReparam, + StableReparam, + StudentTReparam, + SymmetricStableReparam, +) +from tests.common import assert_close +from tests.ops.gaussian import random_mvn + +from .util import check_init_reparam + + +def random_studentt(shape): + df = torch.rand(shape).exp() + loc = torch.randn(shape) + scale = torch.rand(shape).exp() + return dist.StudentT(df, loc, scale) + + +def random_stable(shape, stability, skew=None): + if skew is None: + skew = dist.Uniform(-1, 1).sample(shape) + scale = torch.rand(shape).exp() + loc = torch.randn(shape) + return dist.Stable(stability, skew, scale, loc) + + +@pytest.mark.parametrize("duration", [1, 2, 3, 4, 5, 6]) +@pytest.mark.parametrize("obs_dim", [1, 2]) +@pytest.mark.parametrize("hidden_dim", [1, 3]) +@pytest.mark.parametrize("batch_shape", [(), (4,), (2, 3)], ids=str) +def test_transformed_hmm_shape(batch_shape, duration, hidden_dim, obs_dim): + init_dist = random_mvn(batch_shape, hidden_dim) + trans_mat = torch.randn(batch_shape + (duration, hidden_dim, hidden_dim)) + trans_dist = random_mvn(batch_shape + (duration,), hidden_dim) + obs_mat = torch.randn(batch_shape + (duration, hidden_dim, obs_dim)) + obs_dist = dist.LogNormal( + torch.randn(batch_shape + (duration, obs_dim)), + torch.rand(batch_shape + (duration, obs_dim)).exp(), + ).to_event(1) + hmm = dist.LinearHMM( + init_dist, trans_mat, trans_dist, obs_mat, obs_dist, duration=duration + ) + + def model(data=None): + with pyro.plate_stack("plates", batch_shape): + return pyro.sample("x", hmm, obs=data) + + data = model() + with poutine.trace() as tr: + with poutine.reparam(config={"x": LinearHMMReparam()}): + model(data) + fn = tr.trace.nodes["x"]["fn"] + assert isinstance(fn, dist.TransformedDistribution) + assert isinstance(fn.base_dist, dist.GaussianHMM) + tr.trace.compute_log_prob() # smoke test only + + +@pytest.mark.parametrize("duration", [1, 2, 3, 4, 5, 6]) +@pytest.mark.parametrize("obs_dim", [1, 2]) +@pytest.mark.parametrize("hidden_dim", [1, 3]) +@pytest.mark.parametrize("batch_shape", [(), (4,), (2, 3)], ids=str) +def test_studentt_hmm_shape(batch_shape, duration, hidden_dim, obs_dim): + init_dist = random_studentt(batch_shape + (hidden_dim,)).to_event(1) + trans_mat = torch.randn(batch_shape + (duration, hidden_dim, hidden_dim)) + trans_dist = random_studentt(batch_shape + (duration, hidden_dim)).to_event(1) + obs_mat = torch.randn(batch_shape + (duration, hidden_dim, obs_dim)) + obs_dist = random_studentt(batch_shape + (duration, obs_dim)).to_event(1) + hmm = dist.LinearHMM( + init_dist, trans_mat, trans_dist, obs_mat, obs_dist, duration=duration + ) + + def model(data=None): + with pyro.plate_stack("plates", batch_shape): + return pyro.sample("x", hmm, obs=data) + + data = model() + rep = StudentTReparam() + with poutine.trace() as tr: + with poutine.reparam(config={"x": LinearHMMReparam(rep, rep, rep)}): + model(data) + + assert isinstance(tr.trace.nodes["x"]["fn"], dist.GaussianHMM) + assert tr.trace.nodes["x_init_gamma"]["fn"].event_shape == (hidden_dim,) + assert tr.trace.nodes["x_trans_gamma"]["fn"].event_shape == (duration, hidden_dim) + assert tr.trace.nodes["x_obs_gamma"]["fn"].event_shape == (duration, obs_dim) + tr.trace.compute_log_prob() # smoke test only + + +@pytest.mark.parametrize("duration", [1, 2, 3, 4, 5, 6]) +@pytest.mark.parametrize("obs_dim", [1, 2]) +@pytest.mark.parametrize("hidden_dim", [1, 3]) +@pytest.mark.parametrize("batch_shape", [(), (4,), (2, 3)], ids=str) +@pytest.mark.parametrize("skew", [0, None], ids=["symmetric", "skewed"]) +def test_stable_hmm_shape(skew, batch_shape, duration, hidden_dim, obs_dim): + stability = dist.Uniform(0.5, 2).sample(batch_shape) + init_dist = random_stable( + batch_shape + (hidden_dim,), stability.unsqueeze(-1), skew=skew + ).to_event(1) + trans_mat = torch.randn(batch_shape + (duration, hidden_dim, hidden_dim)) + trans_dist = random_stable( + batch_shape + (duration, hidden_dim), + stability.unsqueeze(-1).unsqueeze(-1), + skew=skew, + ).to_event(1) + obs_mat = torch.randn(batch_shape + (duration, hidden_dim, obs_dim)) + obs_dist = random_stable( + batch_shape + (duration, obs_dim), + stability.unsqueeze(-1).unsqueeze(-1), + skew=skew, + ).to_event(1) + hmm = dist.LinearHMM( + init_dist, trans_mat, trans_dist, obs_mat, obs_dist, duration=duration + ) + assert hmm.batch_shape == batch_shape + assert hmm.event_shape == (duration, obs_dim) + + def model(data=None): + with pyro.plate_stack("plates", batch_shape): + return pyro.sample("x", hmm, obs=data) + + data = torch.randn(duration, obs_dim) + rep = SymmetricStableReparam() if skew == 0 else StableReparam() + with poutine.trace() as tr: + with poutine.reparam(config={"x": LinearHMMReparam(rep, rep, rep)}): + model(data) + assert isinstance(tr.trace.nodes["x"]["fn"], dist.GaussianHMM) + tr.trace.compute_log_prob() # smoke test only + + +@pytest.mark.parametrize("duration", [1, 2, 3, 4, 5, 6]) +@pytest.mark.parametrize("obs_dim", [1, 2]) +@pytest.mark.parametrize("hidden_dim", [1, 3]) +@pytest.mark.parametrize("batch_shape", [(), (4,), (2, 3)], ids=str) +@pytest.mark.parametrize("skew", [0, None], ids=["symmetric", "skewed"]) +def test_independent_hmm_shape(skew, batch_shape, duration, hidden_dim, obs_dim): + base_batch_shape = batch_shape + (obs_dim,) + stability = dist.Uniform(0.5, 2).sample(base_batch_shape) + init_dist = random_stable( + base_batch_shape + (hidden_dim,), stability.unsqueeze(-1), skew=skew + ).to_event(1) + trans_mat = torch.randn(base_batch_shape + (duration, hidden_dim, hidden_dim)) + trans_dist = random_stable( + base_batch_shape + (duration, hidden_dim), + stability.unsqueeze(-1).unsqueeze(-1), + skew=skew, + ).to_event(1) + obs_mat = torch.randn(base_batch_shape + (duration, hidden_dim, 1)) + obs_dist = random_stable( + base_batch_shape + (duration, 1), + stability.unsqueeze(-1).unsqueeze(-1), + skew=skew, + ).to_event(1) + hmm = dist.LinearHMM( + init_dist, trans_mat, trans_dist, obs_mat, obs_dist, duration=duration + ) + assert hmm.batch_shape == base_batch_shape + assert hmm.event_shape == (duration, 1) + + hmm = dist.IndependentHMM(hmm) + assert hmm.batch_shape == batch_shape + assert hmm.event_shape == (duration, obs_dim) + + def model(data=None): + with pyro.plate_stack("plates", batch_shape): + return pyro.sample("x", hmm, obs=data) + + data = torch.randn(duration, obs_dim) + rep = SymmetricStableReparam() if skew == 0 else StableReparam() + with poutine.trace() as tr: + with poutine.reparam(config={"x": LinearHMMReparam(rep, rep, rep)}): + model(data) + assert isinstance(tr.trace.nodes["x"]["fn"], dist.IndependentHMM) + tr.trace.compute_log_prob() # smoke test only + + +# Test helper to extract a few fractional moments from joint samples. +# This uses fractional moments because Stable variance is infinite. +def get_hmm_moments(samples): + loc = samples.median(0).values + delta = samples - loc + cov = (delta.unsqueeze(-1) * delta.unsqueeze(-2)).sqrt().mean(0) + scale = cov.diagonal(dim1=-2, dim2=-1) + sigma = scale.sqrt() + corr = cov / (sigma.unsqueeze(-1) * sigma.unsqueeze(-2)) + return loc, scale, corr + + +@pytest.mark.parametrize("duration", [1, 2, 3]) +@pytest.mark.parametrize("obs_dim", [1, 2]) +@pytest.mark.parametrize("hidden_dim", [1, 2]) +@pytest.mark.parametrize("stability", [1.9, 1.6]) +@pytest.mark.parametrize("skew", [0, None], ids=["symmetric", "skewed"]) +def test_stable_hmm_distribution(stability, skew, duration, hidden_dim, obs_dim): + init_dist = random_stable((hidden_dim,), stability, skew=skew).to_event(1) + trans_mat = torch.randn(duration, hidden_dim, hidden_dim) + trans_dist = random_stable((duration, hidden_dim), stability, skew=skew).to_event(1) + obs_mat = torch.randn(duration, hidden_dim, obs_dim) + obs_dist = random_stable((duration, obs_dim), stability, skew=skew).to_event(1) + hmm = dist.LinearHMM( + init_dist, trans_mat, trans_dist, obs_mat, obs_dist, duration=duration + ) + + num_samples = 200000 + expected_samples = hmm.sample([num_samples]).reshape( + num_samples, duration * obs_dim + ) + expected_loc, expected_scale, expected_corr = get_hmm_moments(expected_samples) + + rep = SymmetricStableReparam() if skew == 0 else StableReparam() + with pyro.plate("samples", num_samples): + with poutine.reparam(config={"x": LinearHMMReparam(rep, rep, rep)}): + actual_samples = pyro.sample("x", hmm).reshape( + num_samples, duration * obs_dim + ) + actual_loc, actual_scale, actual_corr = get_hmm_moments(actual_samples) + + assert_close(actual_loc, expected_loc, atol=0.05, rtol=0.05) + assert_close(actual_scale, expected_scale, atol=0.05, rtol=0.05) + assert_close(actual_corr, expected_corr, atol=0.01) + + +@pytest.mark.parametrize("duration", [1, 2, 3, 4, 5, 6]) +@pytest.mark.parametrize("obs_dim", [1, 2]) +@pytest.mark.parametrize("hidden_dim", [1, 3]) +@pytest.mark.parametrize("batch_shape", [(), (4,), (2, 3)], ids=str) +def test_stable_hmm_shape_error(batch_shape, duration, hidden_dim, obs_dim): + stability = dist.Uniform(0.5, 2).sample(batch_shape) + init_dist = random_stable( + batch_shape + (hidden_dim,), stability.unsqueeze(-1) + ).to_event(1) + trans_mat = torch.randn(batch_shape + (1, hidden_dim, hidden_dim)) + trans_dist = random_stable( + batch_shape + (1, hidden_dim), stability.unsqueeze(-1).unsqueeze(-1) + ).to_event(1) + obs_mat = torch.randn(batch_shape + (1, hidden_dim, obs_dim)) + obs_dist = random_stable( + batch_shape + (1, obs_dim), stability.unsqueeze(-1).unsqueeze(-1) + ).to_event(1) + hmm = dist.LinearHMM(init_dist, trans_mat, trans_dist, obs_mat, obs_dist) + assert hmm.batch_shape == batch_shape + assert hmm.event_shape == (1, obs_dim) + + def model(data=None): + with pyro.plate_stack("plates", batch_shape): + return pyro.sample("x", hmm, obs=data) + + data = torch.randn(duration, obs_dim) + rep = StableReparam() + with poutine.reparam(config={"x": LinearHMMReparam(rep, rep, rep)}): + with pytest.raises(ValueError): + model(data) + + +@pytest.mark.parametrize("duration", [1, 2, 3, 4, 5, 6]) +@pytest.mark.parametrize("obs_dim", [1, 2]) +@pytest.mark.parametrize("hidden_dim", [1, 3]) +@pytest.mark.parametrize("batch_shape", [(), (4,), (2, 3)], ids=str) +@pytest.mark.parametrize("skew", [0, None], ids=["symmetric", "skewed"]) +def test_init_shape(skew, batch_shape, duration, hidden_dim, obs_dim): + stability = dist.Uniform(0.5, 2).sample(batch_shape) + init_dist = random_stable( + batch_shape + (hidden_dim,), stability.unsqueeze(-1), skew=skew + ).to_event(1) + trans_mat = torch.randn(batch_shape + (duration, hidden_dim, hidden_dim)) + trans_dist = random_stable( + batch_shape + (duration, hidden_dim), + stability.unsqueeze(-1).unsqueeze(-1), + skew=skew, + ).to_event(1) + obs_mat = torch.randn(batch_shape + (duration, hidden_dim, obs_dim)) + obs_dist = random_stable( + batch_shape + (duration, obs_dim), + stability.unsqueeze(-1).unsqueeze(-1), + skew=skew, + ).to_event(1) + hmm = dist.LinearHMM( + init_dist, trans_mat, trans_dist, obs_mat, obs_dist, duration=duration + ) + assert hmm.batch_shape == batch_shape + assert hmm.event_shape == (duration, obs_dim) + + def model(): + with pyro.plate_stack("plates", batch_shape): + return pyro.sample("x", hmm) + + rep = SymmetricStableReparam() if skew == 0 else StableReparam() + check_init_reparam(model, LinearHMMReparam(rep, rep, rep)) diff --git a/pyro/source/tests/infer/reparam/test_loc_scale.py b/pyro/source/tests/infer/reparam/test_loc_scale.py new file mode 100644 index 0000000000000000000000000000000000000000..d956a6ff76b51374005b39319573bd4bcb0dd7a3 --- /dev/null +++ b/pyro/source/tests/infer/reparam/test_loc_scale.py @@ -0,0 +1,109 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch +from torch.autograd import grad + +import pyro +import pyro.distributions as dist +from pyro import poutine +from pyro.distributions.util import is_identically_one +from pyro.infer.autoguide.initialization import InitMessenger, init_to_uniform +from pyro.infer.reparam import LocScaleReparam +from tests.common import assert_close + +from .util import check_init_reparam + + +# Test helper to extract a few central moments from samples. +def get_moments(x): + m1 = x.mean(0) + x = x - m1 + xx = x * x + xxx = x * xx + xxxx = xx * xx + m2 = xx.mean(0) + m3 = xxx.mean(0) / m2**1.5 + m4 = xxxx.mean(0) / m2**2 + return torch.stack([m1, m2, m3, m4]) + + +@pytest.mark.parametrize("shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("centered", [0.0, 0.6, 1.0, torch.tensor(0.4), None]) +@pytest.mark.parametrize("dist_type", ["Normal", "StudentT", "AsymmetricLaplace"]) +def test_moments(dist_type, centered, shape): + loc = torch.empty(shape).uniform_(-1.0, 1.0).requires_grad_() + scale = torch.empty(shape).uniform_(0.5, 1.5).requires_grad_() + if isinstance(centered, torch.Tensor): + centered = centered.expand(shape) + + def model(): + with pyro.plate_stack("plates", shape): + with pyro.plate("particles", 200000): + if "dist_type" == "Normal": + pyro.sample("x", dist.Normal(loc, scale)) + elif "dist_type" == "StudentT": + pyro.sample("x", dist.StudentT(10.0, loc, scale)) + else: + pyro.sample("x", dist.AsymmetricLaplace(loc, scale, 1.5)) + + value = poutine.trace(model).get_trace().nodes["x"]["value"] + expected_probe = get_moments(value) + + reparam = LocScaleReparam(centered) + reparam_model = poutine.reparam(model, {"x": reparam}) + value = poutine.trace(reparam_model).get_trace().nodes["x"]["value"] + actual_probe = get_moments(value) + + if not is_identically_one(centered): + if "dist_type" == "Normal": + assert reparam.shape_params == () + elif "dist_type" == "StudentT": + assert reparam.shape_params == ("df",) + else: + assert reparam.shape_params == ("asymmetry",) + + assert_close(actual_probe, expected_probe, atol=0.1, rtol=0.05) + + for actual_m, expected_m in zip(actual_probe, expected_probe): + expected_grads = grad(expected_m.sum(), [loc, scale], retain_graph=True) + actual_grads = grad(actual_m.sum(), [loc, scale], retain_graph=True) + assert_close(actual_grads[0], expected_grads[0], atol=0.1, rtol=0.05) + assert_close(actual_grads[1], expected_grads[1], atol=0.1, rtol=0.05) + + +@pytest.mark.parametrize("shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("centered", [0.0, 0.6, 1.0, torch.tensor(0.4), None]) +@pytest.mark.parametrize("dist_type", ["Normal", "StudentT", "AsymmetricLaplace"]) +def test_init(dist_type, centered, shape): + loc = torch.empty(shape).uniform_(-1.0, 1.0) + scale = torch.empty(shape).uniform_(0.5, 1.5) + + def model(): + with pyro.plate_stack("plates", shape): + if "dist_type" == "Normal": + return pyro.sample("x", dist.Normal(loc, scale)) + elif "dist_type" == "StudentT": + return pyro.sample("x", dist.StudentT(10.0, loc, scale)) + else: + return pyro.sample("x", dist.AsymmetricLaplace(loc, scale, 1.5)) + + check_init_reparam(model, LocScaleReparam(centered)) + + +@pytest.mark.xfail( + reason=( + "reparam inside plate not compatible with init messenger," + " issue https://github.com/pyro-ppl/pyro/issues/2990" + ) +) +def test_init_with_reparam_inside_plate(): + def model(): + with pyro.plate("N", 10): + with poutine.reparam(config={"x": LocScaleReparam(centered=0.0)}): + return pyro.sample("x", dist.Normal(0, 1)) + + with InitMessenger(init_to_uniform()): + actual = model() + assert actual.shape == (10,) diff --git a/pyro/source/tests/infer/reparam/test_neutra.py b/pyro/source/tests/infer/reparam/test_neutra.py new file mode 100644 index 0000000000000000000000000000000000000000..397ecc860f4f40ccc652077400f9ac8330fa2256 --- /dev/null +++ b/pyro/source/tests/infer/reparam/test_neutra.py @@ -0,0 +1,96 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +import pyro +import pyro.distributions as dist +from pyro import optim +from pyro.distributions.transforms import ComposeTransform +from pyro.infer import MCMC, NUTS, SVI, Trace_ELBO +from pyro.infer.autoguide import ( + AutoDiagonalNormal, + AutoIAFNormal, + AutoMultivariateNormal, +) +from pyro.infer.mcmc.util import initialize_model +from pyro.infer.reparam import NeuTraReparam +from tests.common import assert_close + +from .util import check_init_reparam + + +def neals_funnel(dim=10): + y = pyro.sample("y", dist.Normal(0, 3)) + with pyro.plate("D", dim): + return pyro.sample("x", dist.Normal(0, torch.exp(y / 2))) + + +def dirichlet_categorical(data): + concentration = torch.tensor([1.0, 1.0, 1.0]) + p_latent = pyro.sample("p", dist.Dirichlet(concentration)) + with pyro.plate("N", data.shape[0]): + pyro.sample("obs", dist.Categorical(p_latent), obs=data) + return p_latent + + +@pytest.mark.parametrize("jit", [False, True]) +@pytest.mark.parametrize( + "Guide", + [AutoDiagonalNormal, AutoMultivariateNormal, AutoIAFNormal], +) +def test_neals_funnel_smoke(Guide, jit): + dim = 10 + + guide = Guide(neals_funnel) + svi = SVI(neals_funnel, guide, optim.Adam({"lr": 1e-10}), Trace_ELBO()) + for _ in range(10): + svi.step(dim) + + neutra = NeuTraReparam(guide.requires_grad_(False)) + model = neutra.reparam(neals_funnel) + nuts = NUTS(model, jit_compile=jit, ignore_jit_warnings=True) + mcmc = MCMC(nuts, num_samples=10, warmup_steps=10) + mcmc.run(dim) + samples = mcmc.get_samples() + # XXX: `MCMC.get_samples` adds a leftmost batch dim to all sites, not uniformly at -max_plate_nesting-1; + # hence the unsqueeze + transformed_samples = neutra.transform_sample( + samples["y_shared_latent"].unsqueeze(-2) + ) + assert "x" in transformed_samples + assert "y" in transformed_samples + + +@pytest.mark.parametrize( + "model, kwargs", + [ + (neals_funnel, {"dim": 10}), + (dirichlet_categorical, {"data": torch.ones(10)}), + ], +) +def test_reparam_log_joint(model, kwargs): + guide = AutoIAFNormal(model) + guide(**kwargs) + neutra = NeuTraReparam(guide) + reparam_model = neutra.reparam(model) + _, pe_fn, transforms, _ = initialize_model(model, model_kwargs=kwargs) + init_params, pe_fn_neutra, _, _ = initialize_model( + reparam_model, model_kwargs=kwargs + ) + latent_x = list(init_params.values())[0] + transformed_params = neutra.transform_sample(latent_x) + pe_transformed = pe_fn_neutra(init_params) + neutra_transform = ComposeTransform(guide.get_posterior(**kwargs).transforms) + latent_y = neutra_transform(latent_x) + log_det_jacobian = neutra_transform.log_abs_det_jacobian(latent_x, latent_y) + pe = pe_fn({k: transforms[k](v) for k, v in transformed_params.items()}) + assert_close(pe_transformed, pe - log_det_jacobian) + + +def test_init(): + guide = AutoIAFNormal(neals_funnel) + guide() + + check_init_reparam(neals_funnel, NeuTraReparam(guide)) diff --git a/pyro/source/tests/infer/reparam/test_projected_normal.py b/pyro/source/tests/infer/reparam/test_projected_normal.py new file mode 100644 index 0000000000000000000000000000000000000000..02c40cc10490e872d90b778bacc4f9a717e4ce35 --- /dev/null +++ b/pyro/source/tests/infer/reparam/test_projected_normal.py @@ -0,0 +1,61 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch +from torch.autograd import grad + +import pyro +import pyro.distributions as dist +from pyro import poutine +from pyro.infer.reparam import ProjectedNormalReparam +from tests.common import assert_close + +from .util import check_init_reparam + + +# Test helper to extract a few central moments from samples. +def get_moments(x): + m1 = x.mean(0) + x = x - m1 + xx = x[..., None] * x[..., None, :] + m2 = xx.mean(0) + return torch.cat([m1.reshape(-1), m2.reshape(-1)]) + + +@pytest.mark.parametrize("shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("dim", [2, 3, 4]) +def test_projected_normal(shape, dim): + concentration = torch.randn(shape + (dim,)).requires_grad_() + + def model(): + with pyro.plate_stack("plates", shape): + with pyro.plate("particles", 10000): + pyro.sample("x", dist.ProjectedNormal(concentration)) + + value = poutine.trace(model).get_trace().nodes["x"]["value"] + assert dist.ProjectedNormal.support.check(value).all() + expected_probe = get_moments(value) + + reparam_model = poutine.reparam(model, {"x": ProjectedNormalReparam()}) + value = poutine.trace(reparam_model).get_trace().nodes["x"]["value"] + assert dist.ProjectedNormal.support.check(value).all() + actual_probe = get_moments(value) + assert_close(actual_probe, expected_probe, atol=0.05) + + for actual_m, expected_m in zip(actual_probe, expected_probe): + expected_grad = grad(expected_m, [concentration], retain_graph=True) + actual_grad = grad(actual_m, [concentration], retain_graph=True) + assert_close(actual_grad, expected_grad, atol=0.1) + + +@pytest.mark.parametrize("shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("dim", [2, 3, 4]) +def test_init(shape, dim): + concentration = torch.randn(shape + (dim,)).requires_grad_() + + def model(): + with pyro.plate_stack("plates", shape): + return pyro.sample("x", dist.ProjectedNormal(concentration)) + + check_init_reparam(model, ProjectedNormalReparam()) diff --git a/pyro/source/tests/infer/reparam/test_softmax.py b/pyro/source/tests/infer/reparam/test_softmax.py new file mode 100644 index 0000000000000000000000000000000000000000..5e933709e46c761b143fafb9fb1a1784924746f2 --- /dev/null +++ b/pyro/source/tests/infer/reparam/test_softmax.py @@ -0,0 +1,67 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch +from torch.autograd import grad + +import pyro +import pyro.distributions as dist +from pyro import poutine +from pyro.infer.reparam import GumbelSoftmaxReparam +from tests.common import assert_close + +from .util import check_init_reparam + + +# Test helper to extract a few central moments from samples. +def get_moments(x): + m1 = x.mean(0) + x = x - m1 + xx = x[..., None] * x[..., None, :] + m2 = xx.mean(0) + return torch.cat([m1.reshape(-1), m2.reshape(-1)]) + + +@pytest.mark.parametrize("shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("temperature", [0.01, 0.1, 1.0]) +@pytest.mark.parametrize("dim", [2, 3]) +def test_gumbel_softmax(temperature, shape, dim): + temperature = torch.tensor(temperature) + logits = torch.randn(shape + (dim,)).requires_grad_() + + def model(): + with pyro.plate_stack("plates", shape): + with pyro.plate("particles", 10000): + pyro.sample( + "x", dist.RelaxedOneHotCategorical(temperature, logits=logits) + ) + + value = poutine.trace(model).get_trace().nodes["x"]["value"] + expected_probe = get_moments(value) + + reparam_model = poutine.reparam(model, {"x": GumbelSoftmaxReparam()}) + value = poutine.trace(reparam_model).get_trace().nodes["x"]["value"] + actual_probe = get_moments(value) + assert_close(actual_probe, expected_probe, atol=0.05) + + for actual_m, expected_m in zip(actual_probe, expected_probe): + expected_grad = grad(expected_m, [logits], retain_graph=True) + actual_grad = grad(actual_m, [logits], retain_graph=True) + assert_close(actual_grad, expected_grad, atol=0.05) + + +@pytest.mark.parametrize("shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("temperature", [0.01, 0.1, 1.0]) +@pytest.mark.parametrize("dim", [2, 3]) +def test_init(temperature, shape, dim): + temperature = torch.tensor(temperature) + logits = torch.randn(shape + (dim,)).requires_grad_() + + def model(): + with pyro.plate_stack("plates", shape): + return pyro.sample( + "x", dist.RelaxedOneHotCategorical(temperature, logits=logits) + ) + + check_init_reparam(model, GumbelSoftmaxReparam()) diff --git a/pyro/source/tests/infer/reparam/test_split.py b/pyro/source/tests/infer/reparam/test_split.py new file mode 100644 index 0000000000000000000000000000000000000000..86d7c915460cc7dcb3d080c40bb5997e2967bfe0 --- /dev/null +++ b/pyro/source/tests/infer/reparam/test_split.py @@ -0,0 +1,216 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch +from torch.autograd import grad + +import pyro +import pyro.distributions as dist +from pyro import poutine +from pyro.infer.autoguide.initialization import InitMessenger, init_to_median +from pyro.infer.reparam import SplitReparam +from tests.common import assert_close + +from .util import check_init_reparam + +event_shape_splits_dim = pytest.mark.parametrize( + "event_shape,splits,dim", + [ + ((6,), [2, 1, 3], -1), + ( + ( + 2, + 5, + ), + [2, 3], + -1, + ), + ((4, 2), [1, 3], -2), + ((2, 3, 1), [1, 2], -2), + ], + ids=str, +) + + +batch_shape = pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) + + +@event_shape_splits_dim +@batch_shape +def test_normal(batch_shape, event_shape, splits, dim): + shape = batch_shape + event_shape + loc = torch.empty(shape).uniform_(-1.0, 1.0).requires_grad_() + scale = torch.empty(shape).uniform_(0.5, 1.5).requires_grad_() + + def model(): + with pyro.plate_stack("plates", batch_shape): + pyro.sample("x", dist.Normal(loc, scale).to_event(len(event_shape))) + + # Run without reparam. + trace = poutine.trace(model).get_trace() + expected_value = trace.nodes["x"]["value"] + expected_log_prob = trace.log_prob_sum() + expected_grads = grad(expected_log_prob, [loc, scale], create_graph=True) + + # Run with reparam. + split_values = { + "x_split_{}".format(i): xi + for i, xi in enumerate(expected_value.split(splits, dim)) + } + rep = SplitReparam(splits, dim) + reparam_model = poutine.reparam(model, {"x": rep}) + reparam_model = poutine.condition(reparam_model, split_values) + trace = poutine.trace(reparam_model).get_trace() + assert all(name in trace.nodes for name in split_values) + assert isinstance(trace.nodes["x"]["fn"], dist.Delta) + assert trace.nodes["x"]["fn"].batch_shape == batch_shape + assert trace.nodes["x"]["fn"].event_shape == event_shape + + # Check values. + actual_value = trace.nodes["x"]["value"] + assert_close(actual_value, expected_value, atol=0.1) + + # Check log prob. + actual_log_prob = trace.log_prob_sum() + assert_close(actual_log_prob, expected_log_prob) + actual_grads = grad(actual_log_prob, [loc, scale], create_graph=True) + assert_close(actual_grads, expected_grads) + + +@event_shape_splits_dim +@batch_shape +def test_init(batch_shape, event_shape, splits, dim): + shape = batch_shape + event_shape + loc = torch.empty(shape).uniform_(-1.0, 1.0) + scale = torch.empty(shape).uniform_(0.5, 1.5) + + def model(): + with pyro.plate_stack("plates", batch_shape): + return pyro.sample("x", dist.Normal(loc, scale).to_event(len(event_shape))) + + check_init_reparam(model, SplitReparam(splits, dim)) + + +def test_observe(): + def model(): + x_dist = dist.TransformedDistribution( + dist.Normal(0, 1).expand((8,)).to_event(1), dist.transforms.HaarTransform() + ) + return pyro.sample("x", x_dist) + + # Build reparameterized model + rep = SplitReparam([6, 2], -1) + reparam_model = poutine.reparam(model, {"x": rep}) + + # Sample from the reparameterized model to create an observation + initialized_reparam_model = InitMessenger(init_to_median)(reparam_model) + trace = poutine.trace(initialized_reparam_model).get_trace() + observation = {"x_split_1": trace.nodes["x_split_1"]["value"]} + + # Create a model conditioned on the observation + conditioned_reparam_model = poutine.condition(reparam_model, observation) + + # Fit a guide for the conditioned model + guide = pyro.infer.autoguide.AutoMultivariateNormal(conditioned_reparam_model) + optim = pyro.optim.Adam(dict(lr=0.1)) + loss = pyro.infer.Trace_ELBO(num_particles=20, vectorize_particles=True) + svi = pyro.infer.SVI(conditioned_reparam_model, guide, optim, loss) + for iter_count in range(10): + svi.step() + + +@batch_shape +def test_transformed_distribution(batch_shape): + num_samples = 10 + + transform = dist.transforms.StackTransform( + [ + dist.transforms.OrderedTransform(), + dist.transforms.DiscreteCosineTransform(), + dist.transforms.HaarTransform(), + ], + dim=-1, + ) + + num_transforms = len(transform.transforms) + + def model(): + scale_tril = pyro.sample("scale_tril", dist.LKJCholesky(num_transforms, 1)) + with pyro.plate_stack("plates", batch_shape): + x_dist = dist.TransformedDistribution( + dist.MultivariateNormal( + torch.zeros(num_samples, num_transforms), scale_tril=scale_tril + ).to_event(1), + [transform], + ) + return pyro.sample("x", x_dist) + + assert model().shape == batch_shape + (num_samples, num_transforms) + + pyro.clear_param_store() + guide = pyro.infer.autoguide.AutoMultivariateNormal(model) + guide_sites = guide() + + assert guide_sites["x"].shape == batch_shape + (num_samples, num_transforms) + + for sections in [[1, 1, 1], [1, 2], [2, 1]]: + split_model = pyro.poutine.reparam( + model, config={"x": SplitReparam(sections, -1)} + ) + + pyro.clear_param_store() + guide = pyro.infer.autoguide.AutoMultivariateNormal(split_model) + guide_sites = guide() + + for n, section in enumerate(sections): + assert guide_sites[f"x_split_{n}"].shape == batch_shape + ( + num_samples, + section, + ) + + +@event_shape_splits_dim +@batch_shape +def test_predictive(batch_shape, event_shape, splits, dim): + shape = batch_shape + event_shape + loc = torch.empty(shape).uniform_(-1.0, 1.0) + scale = torch.empty(shape).uniform_(0.5, 1.5) + + def model(): + with pyro.plate_stack("plates", batch_shape): + pyro.sample("x", dist.Normal(loc, scale).to_event(len(event_shape))) + + # Reparametrize model + rep = SplitReparam(splits, dim) + reparam_model = poutine.reparam(model, {"x": rep}) + + # Fit guide to reparametrized model + guide = pyro.infer.autoguide.guides.AutoMultivariateNormal(reparam_model) + optimizer = pyro.optim.Adam(dict(lr=0.01)) + loss = pyro.infer.JitTrace_ELBO( + num_particles=20, vectorize_particles=True, ignore_jit_warnings=True + ) + svi = pyro.infer.SVI(reparam_model, guide, optimizer, loss) + for count in range(1001): + loss = svi.step() + if count % 100 == 0: + print(f"iteration {count} loss = {loss}") + + # Sample from model using the guide + num_samples = 100000 + parallel = True + sites = ["x_split_{}".format(i) for i in range(len(splits))] + values = pyro.infer.Predictive( + reparam_model, + guide=guide, + num_samples=num_samples, + parallel=parallel, + return_sites=sites, + )() + + # Verify sampling + mean = torch.cat([values[site].mean(0) for site in sites], dim=dim) + std = torch.cat([values[site].std(0) for site in sites], dim=dim) + assert_close(mean, loc, atol=0.1) + assert_close(std, scale, rtol=0.1) diff --git a/pyro/source/tests/infer/reparam/test_stable.py b/pyro/source/tests/infer/reparam/test_stable.py new file mode 100644 index 0000000000000000000000000000000000000000..efaa810da02cd0fdce5bc1b63979e3c874237c12 --- /dev/null +++ b/pyro/source/tests/infer/reparam/test_stable.py @@ -0,0 +1,167 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch +from scipy.stats import ks_2samp +from torch.autograd import grad + +import pyro +import pyro.distributions as dist +from pyro import poutine +from pyro.distributions.torch_distribution import MaskedDistribution +from pyro.infer import Trace_ELBO +from pyro.infer.autoguide import AutoNormal +from pyro.infer.reparam import ( + LatentStableReparam, + StableReparam, + SymmetricStableReparam, +) +from tests.common import assert_close, xfail_param + +from .util import check_init_reparam + + +# Test helper to extract a few absolute moments from univariate samples. +# This uses abs moments because Stable variance is infinite. +def get_moments(x): + points = torch.tensor([-4.0, -1.0, 0.0, 1.0, 4.0]) + points = points.reshape((-1,) + (1,) * x.dim()) + return torch.cat([x.mean(0, keepdim=True), (x - points).abs().mean(1)]) + + +@pytest.mark.parametrize( + "shape", + [ + (), + xfail_param(4, reason="flaky, https://github.com/pyro-ppl/pyro/issues/3214"), + (2, 3), + ], + ids=str, +) +@pytest.mark.parametrize("Reparam", [LatentStableReparam, StableReparam]) +def test_stable(Reparam, shape): + stability = torch.empty(shape).uniform_(1.5, 2.0).requires_grad_() + skew = torch.empty(shape).uniform_(-0.5, 0.5).requires_grad_() + # test edge case when skew is 0 + if skew.dim() > 0 and skew.shape[-1] > 0: + skew.data[..., 0] = 0.0 + scale = torch.empty(shape).uniform_(0.5, 1.0).requires_grad_() + loc = torch.empty(shape).uniform_(-1.0, 1.0).requires_grad_() + params = [stability, skew, scale, loc] + + def model(): + with pyro.plate_stack("plates", shape): + with pyro.plate("particles", 200000): + return pyro.sample("x", dist.Stable(stability, skew, scale, loc)) + + value = model() + expected_moments = get_moments(value) + + reparam_model = poutine.reparam(model, {"x": Reparam()}) + trace = poutine.trace(reparam_model).get_trace() + if Reparam is LatentStableReparam: + assert isinstance(trace.nodes["x"]["fn"], MaskedDistribution) + assert isinstance(trace.nodes["x"]["fn"].base_dist, dist.Delta) + else: + assert isinstance(trace.nodes["x"]["fn"], dist.Normal) + trace.compute_log_prob() # smoke test only + value = trace.nodes["x"]["value"] + actual_moments = get_moments(value) + assert_close(actual_moments, expected_moments, atol=0.07) + + for actual_m, expected_m in zip(actual_moments, expected_moments): + expected_grads = grad(expected_m.sum(), params, retain_graph=True) + actual_grads = grad(actual_m.sum(), params, retain_graph=True) + assert_close(actual_grads[0], expected_grads[0], atol=0.3) + assert_close(actual_grads[1][skew != 0], expected_grads[1][skew != 0], atol=0.1) + assert_close(actual_grads[1][skew == 0], expected_grads[1][skew == 0], atol=0.3) + assert_close(actual_grads[2], expected_grads[2], atol=0.1) + assert_close(actual_grads[3], expected_grads[3], atol=0.1) + + +@pytest.mark.parametrize("shape", [(), (4,), (2, 3)], ids=str) +def test_symmetric_stable(shape): + stability = torch.empty(shape).uniform_(1.6, 1.9).requires_grad_() + scale = torch.empty(shape).uniform_(0.5, 1.0).requires_grad_() + loc = torch.empty(shape).uniform_(-1.0, 1.0).requires_grad_() + params = [stability, scale, loc] + + def model(): + with pyro.plate_stack("plates", shape): + with pyro.plate("particles", 300000): + return pyro.sample("x", dist.Stable(stability, 0, scale, loc)) + + value = model() + expected_moments = get_moments(value) + + reparam_model = poutine.reparam(model, {"x": SymmetricStableReparam()}) + trace = poutine.trace(reparam_model).get_trace() + assert isinstance(trace.nodes["x"]["fn"], dist.Normal) + trace.compute_log_prob() # smoke test only + value = trace.nodes["x"]["value"] + actual_moments = get_moments(value) + assert_close(actual_moments, expected_moments, atol=0.07) + + for actual_m, expected_m in zip(actual_moments, expected_moments): + expected_grads = grad(expected_m.sum(), params, retain_graph=True) + actual_grads = grad(actual_m.sum(), params, retain_graph=True) + assert_close(actual_grads[0], expected_grads[0], atol=0.2) + assert_close(actual_grads[1], expected_grads[1], atol=0.1) + assert_close(actual_grads[2], expected_grads[2], atol=0.1) + + +@pytest.mark.parametrize("skew", [-1.0, -0.5, 0.0, 0.5, 1.0]) +@pytest.mark.parametrize("stability", [0.1, 0.4, 0.8, 0.99, 1.0, 1.01, 1.3, 1.7, 2.0]) +@pytest.mark.parametrize( + "Reparam", [LatentStableReparam, SymmetricStableReparam, StableReparam] +) +def test_distribution(stability, skew, Reparam): + if Reparam is SymmetricStableReparam and (skew != 0 or stability == 2): + pytest.skip() + if stability == 2 and skew in (-1, 1): + pytest.skip() + + def model(): + with pyro.plate("particles", 20000): + return pyro.sample("x", dist.Stable(stability, skew)) + + expected = model() + with poutine.reparam(config={"x": Reparam()}): + actual = model() + assert ks_2samp(expected, actual).pvalue > 0.03 + + +@pytest.mark.parametrize("subsample", [False, True], ids=["full", "subsample"]) +@pytest.mark.parametrize( + "Reparam", [LatentStableReparam, SymmetricStableReparam, StableReparam] +) +def test_subsample_smoke(Reparam, subsample): + def model(): + with poutine.reparam(config={"x": Reparam()}): + with pyro.plate("plate", 10): + return pyro.sample("x", dist.Stable(1.5, 0)) + + def create_plates(): + return pyro.plate("plate", 10, subsample_size=3) + + guide = AutoNormal(model, create_plates=create_plates if subsample else None) + Trace_ELBO().loss(model, guide) # smoke test + + +@pytest.mark.parametrize("skew", [-1.0, -0.5, 0.0, 0.5, 1.0]) +@pytest.mark.parametrize("stability", [0.1, 0.4, 0.8, 0.99, 1.0, 1.01, 1.3, 1.7, 2.0]) +@pytest.mark.parametrize( + "Reparam", + [LatentStableReparam, SymmetricStableReparam, StableReparam], +) +def test_init(stability, skew, Reparam): + if Reparam is SymmetricStableReparam and (skew != 0 or stability == 2): + pytest.skip() + if stability == 2 and skew in (-1, 1): + pytest.skip() + + def model(): + return pyro.sample("x", dist.Stable(stability, skew)) + + check_init_reparam(model, Reparam()) diff --git a/pyro/source/tests/infer/reparam/test_strategies.py b/pyro/source/tests/infer/reparam/test_strategies.py new file mode 100644 index 0000000000000000000000000000000000000000..e374933fe0fe3168247b746697c851422c6f6ae3 --- /dev/null +++ b/pyro/source/tests/infer/reparam/test_strategies.py @@ -0,0 +1,341 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +import pyro +import pyro.distributions as dist +from pyro import poutine +from pyro.infer import SVI, Predictive, Trace_ELBO +from pyro.infer.autoguide import AutoNormal +from pyro.infer.reparam import AutoReparam, MinimalReparam +from pyro.optim import Adam + + +def trace_name_is_observed(model): + trace = poutine.trace(model).get_trace() + return [ + (name, site["is_observed"]) + for name, site in trace.nodes.items() + if site["type"] == "sample" and type(site["fn"]).__name__ != "_Subsample" + ] + + +def normal_model(): + zero = torch.zeros(2) + a = pyro.sample("a", dist.Normal(0, 1)) + b = pyro.sample("b", dist.LogNormal(0, 1)) + c = pyro.sample("c", dist.Normal(a, b)) + d = pyro.sample("d", dist.LogNormal(a, b)) + e = pyro.sample("e", dist.Normal(zero, b).to_event(1)) + f = pyro.sample("f", dist.LogNormal(zero, b).to_event(1)) + g = pyro.sample("g", dist.Normal(0, 1), obs=a) + h = pyro.sample("h", dist.LogNormal(0, 1), obs=b) + with pyro.plate("plate", 5): + i = pyro.sample("i", dist.Normal(a, b)) + j = pyro.sample("j", dist.LogNormal(a, b)) + return a, b, c, d, e, f, g, h, i, j + + +def test_normal_minimal(): + model = MinimalReparam()(normal_model) + actual = trace_name_is_observed(model) + expected = [ + ("a", False), + ("b", False), + ("c", False), + ("d", False), + ("e", False), + ("f", False), + ("g", True), + ("h", True), + ("i", False), + ("j", False), + ] + assert actual == expected + + +@pytest.mark.parametrize("centered", [None, 0.0, 1.0]) +def test_normal_auto(centered): + strategy = AutoReparam(centered=centered) + model = strategy(normal_model) + actual = trace_name_is_observed(model) + if centered == 1.0: # i.e. no decentering + expected = [ + ("a", False), + ("b_base", False), + ("b", True), + ("c", False), + ("d_base", False), + ("d", True), + ("e", False), + ("f_base", False), + ("f", True), + ("g", True), + ("h", True), + ("i", False), + ("j_base", False), + ("j", True), + ] + else: + expected = [ + ("a_decentered", False), + ("a", True), + ("b_base_decentered", False), + ("b_base", True), + ("b", True), + ("c_decentered", False), + ("c", True), + ("d_base_decentered", False), + ("d_base", True), + ("d", True), + ("e_decentered", False), + ("e", True), + ("f_base_decentered", False), + ("f_base", True), + ("f", True), + ("g", True), + ("h", True), + ("i_decentered", False), + ("i", True), + ("j_base_decentered", False), + ("j_base", True), + ("j", True), + ] + assert actual == expected + + # Also check that the config dict has been constructed. + config = strategy.config + assert isinstance(config, dict) + model = poutine.reparam(normal_model, config) + actual = trace_name_is_observed(model) + assert actual == expected + + +def stable_model(): + zero = torch.zeros(2) + a = pyro.sample("a", dist.Normal(0, 1)) + b = pyro.sample("b", dist.LogNormal(0, 1)) + c = pyro.sample("c", dist.Stable(1.5, 0.0, b, a)) + d = pyro.sample("d", dist.Stable(1.5, 0.0, b, 0.0), obs=a) + e = pyro.sample("e", dist.Stable(1.5, 0.1, b, a)) + f = pyro.sample("f", dist.Stable(1.5, 0.1, b, 0.0), obs=a) + g = pyro.sample("g", dist.Stable(1.5, zero, b, a).to_event(1)) + h = pyro.sample("h", dist.Stable(1.5, zero, b, 0).to_event(1), obs=a) + i = pyro.sample( + "i", + dist.TransformedDistribution( + dist.Stable(1.5, 0, b, a), dist.transforms.ExpTransform() + ), + ) + j = pyro.sample( + "j", + dist.TransformedDistribution( + dist.Stable(1.5, 0, b, a), dist.transforms.ExpTransform() + ), + obs=a.exp(), + ) + k = pyro.sample( + "k", + dist.TransformedDistribution( + dist.Stable(1.5, zero, b, a), dist.transforms.ExpTransform() + ).to_event(1), + ) + l = pyro.sample( + "l", + dist.TransformedDistribution( + dist.Stable(1.5, zero, b, a), dist.transforms.ExpTransform() + ).to_event(1), + obs=a.exp() + zero, + ) + return a, b, c, d, e, f, g, h, i, j, k, l + + +def test_stable_minimal(): + model = MinimalReparam()(stable_model) + actual = trace_name_is_observed(model) + expected = [ + ("a", False), + ("b", False), + ("c_uniform", False), + ("c_exponential", False), + ("c", True), + ("d_uniform", False), + ("d_exponential", False), + ("d", True), + ("e_uniform", False), + ("e_exponential", False), + ("e", True), + ("f_z_uniform", False), + ("f_z_exponential", False), + ("f_t_uniform", False), + ("f_t_exponential", False), + ("f", True), + ("g_uniform", False), + ("g_exponential", False), + ("g", True), + ("h_uniform", False), + ("h_exponential", False), + ("h", True), + ("i_base_uniform", False), + ("i_base_exponential", False), + ("i_base", True), + ("i", True), + ("j_base_uniform", False), + ("j_base_exponential", False), + ("j_base", True), + ("j", True), + ("k_base_uniform", False), + ("k_base_exponential", False), + ("k_base", True), + ("k", True), + ("l_base_uniform", False), + ("l_base_exponential", False), + ("l_base", True), + ("l", True), + ] + assert actual == expected + + +def test_stable_auto(): + model = AutoReparam()(stable_model) + actual = trace_name_is_observed(model) + expected = [ + ("a_decentered", False), + ("a", True), + ("b_base_decentered", False), + ("b_base", True), + ("b", True), + ("c_decentered_uniform", False), + ("c_decentered_exponential", False), + ("c_decentered", True), + ("c", True), + ("d_uniform", False), + ("d_exponential", False), + ("d", True), + ("e_decentered_uniform", False), + ("e_decentered_exponential", False), + ("e_decentered", True), + ("e", True), + ("f_z_uniform", False), + ("f_z_exponential", False), + ("f_t_uniform", False), + ("f_t_exponential", False), + ("f", True), + ("g_decentered_uniform", False), + ("g_decentered_exponential", False), + ("g_decentered", True), + ("g", True), + ("h_uniform", False), + ("h_exponential", False), + ("h", True), + ("i_base_decentered_uniform", False), + ("i_base_decentered_exponential", False), + ("i_base_decentered", True), + ("i_base", True), + ("i", True), + ("j_base_uniform", False), + ("j_base_exponential", False), + ("j_base", True), + ("j", True), + ("k_base_decentered_uniform", False), + ("k_base_decentered_exponential", False), + ("k_base_decentered", True), + ("k_base", True), + ("k", True), + ("l_base_uniform", False), + ("l_base_exponential", False), + ("l_base", True), + ("l", True), + ] + assert actual == expected + + +def projected_normal_model(): + a = pyro.sample("a", dist.MultivariateNormal(torch.zeros(3), torch.eye(3))) + b = pyro.sample("b", dist.ProjectedNormal(a)) + c = pyro.sample("c", dist.ProjectedNormal(torch.ones(3))) + return a, b, c + + +def test_projected_normal_minimal(): + model = MinimalReparam()(projected_normal_model) + actual = trace_name_is_observed(model) + expected = [ + ("a", False), + ("b_normal", False), + ("b", True), + ("c_normal", False), + ("c", True), + ] + assert actual == expected + + +def test_projected_normal_auto(): + strategy = AutoReparam() + model = strategy(projected_normal_model) + actual = trace_name_is_observed(model) + expected = [ + ("a", False), + ("b_normal_decentered", False), + ("b_normal", True), + ("b", True), + ("c_normal_decentered", False), + ("c_normal", True), + ("c", True), + ] + assert actual == expected + + +def softmax_model(): + a = pyro.sample("a", dist.Dirichlet(torch.ones(6))) + b = pyro.sample("b", dist.RelaxedOneHotCategorical(probs=a, temperature=2.0)) + c = pyro.sample("c", dist.Normal(torch.ones(7), 1).to_event(1)) + d = pyro.sample("d", dist.RelaxedOneHotCategorical(logits=c, temperature=1.0)) + e = pyro.sample( + "e", dist.RelaxedOneHotCategorical(logits=c, temperature=0.5), obs=d.round() + ) + return a, b, c, d, e + + +def test_softmax_minimal(): + model = MinimalReparam()(softmax_model) + actual = trace_name_is_observed(model) + expected = [("a", False), ("b", False), ("c", False), ("d", False), ("e", True)] + assert actual == expected + + +def test_softmax_auto(): + strategy = AutoReparam() + model = strategy(softmax_model) + actual = trace_name_is_observed(model) + expected = [ + ("a", False), + ("b_uniform", False), + ("b", True), + ("c_decentered", False), + ("c", True), + ("d_uniform", False), + ("d", True), + ("e", True), + ] + assert actual == expected + + +@pytest.mark.filterwarnings( + "ignore:.*falling back to default initialization.*:RuntimeWarning" +) +@pytest.mark.parametrize("model", [normal_model, stable_model, projected_normal_model]) +def test_end_to_end(model): + # Test training. + model = AutoReparam()(model) + guide = AutoNormal(model) + svi = SVI(model, guide, Adam({"lr": 1e-9}), Trace_ELBO()) + for step in range(3): + svi.step() + + # Test prediction. + predictive = Predictive(model, guide=guide, num_samples=2) + samples = predictive() + assert set("abc").issubset(samples.keys()) diff --git a/pyro/source/tests/infer/reparam/test_structured.py b/pyro/source/tests/infer/reparam/test_structured.py new file mode 100644 index 0000000000000000000000000000000000000000..1ab9d260651ff274b2c9c82c450748b1cdc1b2a7 --- /dev/null +++ b/pyro/source/tests/infer/reparam/test_structured.py @@ -0,0 +1,65 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +import pyro +import pyro.distributions as dist +from pyro import optim +from pyro.infer import MCMC, NUTS, SVI, JitTrace_ELBO, Trace_ELBO +from pyro.infer.autoguide import AutoStructured +from pyro.infer.reparam import StructuredReparam + +from .util import check_init_reparam + + +def neals_funnel(dim=10): + y = pyro.sample("y", dist.Normal(0, 3)) + with pyro.plate("D", dim): + return pyro.sample("x", dist.Normal(0, torch.exp(y / 2))) + + +@pytest.mark.parametrize("jit", [False, True]) +def test_neals_funnel_smoke(jit): + dim = 10 + + guide = AutoStructured( + neals_funnel, + conditionals={"y": "normal", "x": "mvn"}, + dependencies={"x": {"y": "linear"}}, + ) + Elbo = JitTrace_ELBO if jit else Trace_ELBO + svi = SVI(neals_funnel, guide, optim.Adam({"lr": 1e-10}), Elbo()) + for _ in range(1000): + try: + svi.step(dim=dim) + except SystemError as e: + if "returned a result with an error set" in str(e): + pytest.xfail(reason="PyTorch jit bug") + else: + raise e from None + + rep = StructuredReparam(guide) + model = rep.reparam(neals_funnel) + nuts = NUTS(model, max_tree_depth=3, jit_compile=jit) + mcmc = MCMC(nuts, num_samples=50, warmup_steps=50) + mcmc.run(dim) + samples = mcmc.get_samples() + # XXX: `MCMC.get_samples` adds a leftmost batch dim to all sites, + # not uniformly at -max_plate_nesting-1; hence the unsqueeze. + samples = {k: v.unsqueeze(1) for k, v in samples.items()} + transformed_samples = rep.transform_samples(samples) + assert isinstance(transformed_samples, dict) + assert set(transformed_samples) == {"x", "y"} + + +def test_init(): + guide = AutoStructured( + neals_funnel, + conditionals={"y": "normal", "x": "mvn"}, + dependencies={"x": {"y": "linear"}}, + ) + guide() + + check_init_reparam(neals_funnel, StructuredReparam(guide)) diff --git a/pyro/source/tests/infer/reparam/test_studentt.py b/pyro/source/tests/infer/reparam/test_studentt.py new file mode 100644 index 0000000000000000000000000000000000000000..6e46eb67d9eb900d211d510d8abc156e150bdb5a --- /dev/null +++ b/pyro/source/tests/infer/reparam/test_studentt.py @@ -0,0 +1,81 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch +from scipy.stats import ks_2samp +from torch.autograd import grad + +import pyro +import pyro.distributions as dist +from pyro import poutine +from pyro.infer.reparam import StudentTReparam +from tests.common import assert_close + +from .util import check_init_reparam + + +# Test helper to extract a few absolute moments from univariate samples. +# This uses abs moments because StudentT variance may be infinite. +def get_moments(x): + points = torch.tensor([-4.0, -1.0, 0.0, 1.0, 4.0]) + points = points.reshape((-1,) + (1,) * x.dim()) + return torch.cat([x.mean(0, keepdim=True), (x - points).abs().mean(1)]) + + +@pytest.mark.parametrize("shape", [(), (4,), (2, 3)], ids=str) +def test_moments(shape): + df = torch.empty(shape).uniform_(1.8, 5).requires_grad_() + loc = torch.empty(shape).uniform_(-1.0, 1.0).requires_grad_() + scale = torch.empty(shape).uniform_(0.5, 1.0).requires_grad_() + params = [df, loc, scale] + + def model(): + with pyro.plate_stack("plates", shape): + with pyro.plate("particles", 100000): + return pyro.sample("x", dist.StudentT(df, loc, scale)) + + value = model() + expected_moments = get_moments(value) + + reparam_model = poutine.reparam(model, {"x": StudentTReparam()}) + trace = poutine.trace(reparam_model).get_trace() + assert isinstance(trace.nodes["x"]["fn"], dist.Normal) + trace.compute_log_prob() # smoke test only + value = trace.nodes["x"]["value"] + actual_moments = get_moments(value) + assert_close(actual_moments, expected_moments, atol=0.05) + + for actual_m, expected_m in zip(actual_moments, expected_moments): + expected_grads = grad(expected_m.sum(), params, retain_graph=True) + actual_grads = grad(actual_m.sum(), params, retain_graph=True) + assert_close(actual_grads[0], expected_grads[0], atol=0.2) + assert_close(actual_grads[1], expected_grads[1], atol=0.1) + assert_close(actual_grads[2], expected_grads[2], atol=0.1) + + +@pytest.mark.parametrize("df", [0.5, 1.0, 1.5, 2.0, 3.0]) +@pytest.mark.parametrize("scale", [0.1, 1.0, 2.0]) +@pytest.mark.parametrize("loc", [0.0, 1.234]) +def test_distribution(df, loc, scale): + def model(): + with pyro.plate("particles", 20000): + return pyro.sample("x", dist.StudentT(df, loc, scale)) + + expected = model() + with poutine.reparam(config={"x": StudentTReparam()}): + actual = model() + assert ks_2samp(expected, actual).pvalue > 0.05 + + +@pytest.mark.parametrize("shape", [(), (4,), (2, 3)], ids=str) +def test_init(shape): + df = torch.empty(shape).uniform_(1.8, 5).requires_grad_() + loc = torch.empty(shape).uniform_(-1.0, 1.0).requires_grad_() + scale = torch.empty(shape).uniform_(0.5, 1.0).requires_grad_() + + def model(): + with pyro.plate_stack("plates", shape): + return pyro.sample("x", dist.StudentT(df, loc, scale)) + + check_init_reparam(model, StudentTReparam()) diff --git a/pyro/source/tests/infer/reparam/test_transform.py b/pyro/source/tests/infer/reparam/test_transform.py new file mode 100644 index 0000000000000000000000000000000000000000..24531e3e7ae51c95e88184b8c6e43f0a6aee0862 --- /dev/null +++ b/pyro/source/tests/infer/reparam/test_transform.py @@ -0,0 +1,82 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.distributions.transforms import AffineTransform, ExpTransform +from pyro.infer.reparam import TransformReparam +from tests.common import assert_close + +from .util import check_init_reparam + + +# Test helper to extract a few log central moments from samples. +def get_moments(x): + assert (x > 0).all() + x = x.log() + m1 = x.mean(0) + x = x - m1 + xx = x * x + xxx = x * xx + xxxx = xx * xx + m2 = xx.mean(0) + m3 = xxx.mean(0) / m2**1.5 + m4 = xxxx.mean(0) / m2**2 + return torch.stack([m1, m2, m3, m4]) + + +@pytest.mark.parametrize("batch_shape", [(), (4,), (2, 3)], ids=str) +@pytest.mark.parametrize("event_shape", [(), (5,)], ids=str) +def test_log_normal(batch_shape, event_shape): + shape = batch_shape + event_shape + loc = torch.empty(shape).uniform_(-1, 1) + scale = torch.empty(shape).uniform_(0.5, 1.5) + + def model(): + fn = dist.TransformedDistribution( + dist.Normal(torch.zeros_like(loc), torch.ones_like(scale)), + [AffineTransform(loc, scale), ExpTransform()], + ) + if event_shape: + fn = fn.to_event(len(event_shape)) + with pyro.plate_stack("plates", batch_shape): + with pyro.plate("particles", 200000): + return pyro.sample("x", fn) + + with poutine.trace() as tr: + value = model() + assert isinstance( + tr.trace.nodes["x"]["fn"], (dist.TransformedDistribution, dist.Independent) + ) + expected_moments = get_moments(value) + + with poutine.reparam(config={"x": TransformReparam()}): + with poutine.trace() as tr: + value = model() + assert isinstance(tr.trace.nodes["x"]["fn"], (dist.Delta, dist.MaskedDistribution)) + actual_moments = get_moments(value) + assert_close(actual_moments, expected_moments, atol=0.05) + + +@pytest.mark.parametrize("batch_shape", [(), (4,), (2, 3)], ids=str) +@pytest.mark.parametrize("event_shape", [(), (5,)], ids=str) +def test_init(batch_shape, event_shape): + shape = batch_shape + event_shape + loc = torch.empty(shape).uniform_(-1, 1) + scale = torch.empty(shape).uniform_(0.5, 1.5) + + def model(): + fn = dist.TransformedDistribution( + dist.Normal(torch.zeros_like(loc), torch.ones_like(scale)), + [AffineTransform(loc, scale), ExpTransform()], + ) + if event_shape: + fn = fn.to_event(len(event_shape)) + with pyro.plate_stack("plates", batch_shape): + return pyro.sample("x", fn) + + check_init_reparam(model, TransformReparam()) diff --git a/pyro/source/tests/infer/reparam/test_unit_jacobian.py b/pyro/source/tests/infer/reparam/test_unit_jacobian.py new file mode 100644 index 0000000000000000000000000000000000000000..ffe9f63e06ebea42ad08736a3e89e92f5ac22a88 --- /dev/null +++ b/pyro/source/tests/infer/reparam/test_unit_jacobian.py @@ -0,0 +1,71 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch +from torch.autograd import grad + +import pyro +import pyro.distributions as dist +from pyro import poutine +from pyro.distributions.transforms import Permute +from pyro.infer.reparam import UnitJacobianReparam +from tests.common import assert_close + +from .util import check_init_reparam + + +# Test helper to extract central moments from samples. +def get_moments(x): + n = x.size(0) + x = x.reshape(n, -1) + mean = x.mean(0) + x = x - mean + std = (x * x).mean(0).sqrt() + x = x / std + corr = (x.unsqueeze(-1) * x.unsqueeze(-2)).mean(0).reshape(-1) + return torch.cat([mean, std, corr]) + + +@pytest.mark.parametrize("shape", [(6,), (4, 5), (2, 1, 3)], ids=str) +def test_normal(shape): + loc = torch.empty(shape).uniform_(-1.0, 1.0).requires_grad_() + scale = torch.empty(shape).uniform_(0.5, 1.5).requires_grad_() + + def model(): + with pyro.plate_stack("plates", shape[:-1]): + with pyro.plate("particles", 10000): + pyro.sample("x", dist.Normal(loc, scale).expand(shape).to_event(1)) + + value = poutine.trace(model).get_trace().nodes["x"]["value"] + expected_probe = get_moments(value) + + transform = Permute(torch.randperm(shape[-1])) + rep = UnitJacobianReparam(transform) + reparam_model = poutine.reparam(model, {"x": rep}) + trace = poutine.trace(reparam_model).get_trace() + assert isinstance(trace.nodes["x_transformed"]["fn"], dist.TransformedDistribution) + assert isinstance(trace.nodes["x"]["fn"], dist.Delta) + value = trace.nodes["x"]["value"] + actual_probe = get_moments(value) + assert_close(actual_probe, expected_probe, atol=0.1) + + for actual_m, expected_m in zip(actual_probe[:10], expected_probe[:10]): + expected_grads = grad(expected_m.sum(), [loc, scale], retain_graph=True) + actual_grads = grad(actual_m.sum(), [loc, scale], retain_graph=True) + assert_close(actual_grads[0], expected_grads[0], atol=0.05) + assert_close(actual_grads[1], expected_grads[1], atol=0.05) + + +@pytest.mark.parametrize("shape", [(6,), (4, 5), (2, 1, 3)], ids=str) +def test_init(shape): + loc = torch.empty(shape).uniform_(-1.0, 1.0).requires_grad_() + scale = torch.empty(shape).uniform_(0.5, 1.5).requires_grad_() + + def model(): + with pyro.plate_stack("plates", shape[:-1]): + return pyro.sample("x", dist.Normal(loc, scale).to_event(1)) + + transform = Permute(torch.randperm(shape[-1])) + rep = UnitJacobianReparam(transform) + check_init_reparam(model, rep) diff --git a/pyro/source/tests/infer/reparam/util.py b/pyro/source/tests/infer/reparam/util.py new file mode 100644 index 0000000000000000000000000000000000000000..d8c65866e49f1ed70cb608d349f9d4fa1a0b3c01 --- /dev/null +++ b/pyro/source/tests/infer/reparam/util.py @@ -0,0 +1,34 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import warnings + +import pytest + +from pyro import poutine +from pyro.infer.autoguide.initialization import InitMessenger, init_to_value +from pyro.infer.reparam.reparam import Reparam +from tests.common import assert_close + + +def check_init_reparam(model, reparam): + assert isinstance(reparam, Reparam) + with poutine.block(): + init_value = model() + with InitMessenger(init_to_value(values={"x": init_value})): + # Sanity check without reparametrizing. + actual = model() + assert_close(actual, init_value) + + # Check with reparametrizing. + with poutine.reparam(config={"x": reparam}): + with warnings.catch_warnings(record=True) as ws: + warnings.simplefilter("always", category=RuntimeWarning) + actual = model() + for w in ws: + if w.category == RuntimeWarning and "falling back to default" in str(w): + pytest.skip("overwriting initial value") + else: + warnings.warn(str(w.message), category=w.category) + + assert_close(actual, init_value) diff --git a/pyro/source/tests/infer/test_abstract_infer.py b/pyro/source/tests/infer/test_abstract_infer.py new file mode 100644 index 0000000000000000000000000000000000000000..771c8ddca58f4d7108816048ed830c40104291cd --- /dev/null +++ b/pyro/source/tests/infer/test_abstract_infer.py @@ -0,0 +1,95 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +import pyro +import pyro.distributions as dist +import pyro.optim as optim +import pyro.poutine as poutine +from pyro.infer import SVI, Trace_ELBO +from pyro.infer.autoguide import AutoLaplaceApproximation +from pyro.infer.mcmc import MCMC, NUTS +from tests.common import assert_equal + +pytestmark = pytest.mark.filterwarnings("ignore::PendingDeprecationWarning") + + +def model(num_trials): + with pyro.plate("data", num_trials.size(0)): + phi_prior = dist.Uniform(num_trials.new_tensor(0.0), num_trials.new_tensor(1.0)) + success_prob = pyro.sample("phi", phi_prior) + return pyro.sample("obs", dist.Binomial(num_trials, success_prob)) + + +def test_nesting(): + def nested(): + true_probs = torch.ones(5) * 0.7 + num_trials = torch.ones(5) * 1000 + num_success = dist.Binomial(num_trials, true_probs).sample() + conditioned_model = poutine.condition(model, data={"obs": num_success}) + nuts_kernel = NUTS(conditioned_model, adapt_step_size=True) + mcmc_run = MCMC(nuts_kernel, num_samples=10, warmup_steps=2).run(num_trials) + return mcmc_run + + with poutine.trace() as tp: + nested() + nested() + + assert len(tp.trace.nodes) == 0 + + +# TODO: Make this available directly in `SVI` if needed. +@pytest.mark.filterwarnings("ignore::FutureWarning") +def test_information_criterion(): + # milk dataset: https://github.com/rmcelreath/rethinking/blob/master/data/milk.csv + kcal = torch.tensor( + [ + 0.49, + 0.47, + 0.56, + 0.89, + 0.92, + 0.8, + 0.46, + 0.71, + 0.68, + 0.97, + 0.84, + 0.62, + 0.54, + 0.49, + 0.48, + 0.55, + 0.71, + ] + ) + kcal_mean = kcal.mean() + kcal_logstd = kcal.std().log() + + def model(): + mu = pyro.sample("mu", dist.Normal(kcal_mean, 1)) + log_sigma = pyro.sample("log_sigma", dist.Normal(kcal_logstd, 1)) + with pyro.plate("plate"): + pyro.sample("kcal", dist.Normal(mu, log_sigma.exp()), obs=kcal) + + delta_guide = AutoLaplaceApproximation(model) + + svi = SVI( + model, + delta_guide, + optim.Adam({"lr": 0.05}), + loss=Trace_ELBO(), + num_steps=0, + num_samples=3000, + ) + for i in range(100): + svi.step() + + svi.guide = delta_guide.laplace_approximation() + posterior = svi.run() + + ic = posterior.information_criterion() + assert_equal(ic["waic"], torch.tensor(-8.3), prec=0.2) + assert_equal(ic["p_waic"], torch.tensor(1.8), prec=0.2) diff --git a/pyro/source/tests/infer/test_autoguide.py b/pyro/source/tests/infer/test_autoguide.py new file mode 100644 index 0000000000000000000000000000000000000000..9b640e6fcbd8f1f9640e97cb004e9ba61d8f4421 --- /dev/null +++ b/pyro/source/tests/infer/test_autoguide.py @@ -0,0 +1,1619 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import functools +import io +import warnings + +import numpy as np +import pytest +import torch +from torch import nn +from torch.distributions import constraints + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.infer import ( + SVI, + JitTrace_ELBO, + JitTraceEnum_ELBO, + JitTraceGraph_ELBO, + Predictive, + Trace_ELBO, + TraceEnum_ELBO, + TraceGraph_ELBO, +) +from pyro.infer.autoguide import ( + AutoCallable, + AutoDelta, + AutoDiagonalNormal, + AutoDiscreteParallel, + AutoGaussian, + AutoGuide, + AutoGuideList, + AutoHierarchicalNormalMessenger, + AutoIAFNormal, + AutoLaplaceApproximation, + AutoLowRankMultivariateNormal, + AutoMultivariateNormal, + AutoNormal, + AutoNormalMessenger, + AutoRegressiveMessenger, + AutoStructured, + init_to_feasible, + init_to_mean, + init_to_median, + init_to_sample, +) +from pyro.infer.autoguide.gaussian import AutoGaussianFunsor +from pyro.infer.reparam import ProjectedNormalReparam +from pyro.nn.module import PyroModule, PyroParam, PyroSample +from pyro.ops.gaussian import Gaussian +from pyro.optim import Adam, ClippedAdam +from pyro.poutine.util import prune_subsample_sites +from pyro.util import check_model_guide_match +from tests.common import ( + assert_close, + assert_equal, + xfail_if_not_implemented, + xfail_param, +) + +AutoGaussianFunsor = pytest.param( + AutoGaussianFunsor, marks=[pytest.mark.stage("funsor")] +) + + +def xfail_messenger(auto_class, Elbo): + if isinstance(auto_class, type): + if issubclass(auto_class, poutine.messenger.Messenger): + if Elbo in (TraceEnum_ELBO, JitTraceEnum_ELBO): + pytest.xfail(reason="not implemented") + + +@pytest.mark.parametrize( + "auto_class", + [ + AutoDiagonalNormal, + AutoMultivariateNormal, + AutoNormal, + AutoLowRankMultivariateNormal, + AutoIAFNormal, + ], +) +def test_scores(auto_class): + def model(): + if auto_class is AutoIAFNormal: + pyro.sample("z", dist.Normal(0.0, 1.0).expand([10])) + else: + pyro.sample("z", dist.Normal(0.0, 1.0)) + + guide = auto_class(model) + guide_trace = poutine.trace(guide).get_trace() + model_trace = poutine.trace(poutine.replay(model, guide_trace)).get_trace() + + guide_trace.compute_log_prob() + model_trace.compute_log_prob() + + prefix = auto_class.__name__ + if prefix != "AutoNormal": + assert "_{}_latent".format(prefix) not in model_trace.nodes + assert ( + guide_trace.nodes["_{}_latent".format(prefix)]["log_prob_sum"].item() != 0.0 + ) + assert model_trace.nodes["z"]["log_prob_sum"].item() != 0.0 + assert guide_trace.nodes["z"]["log_prob_sum"].item() == 0.0 + + +@pytest.mark.parametrize("Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO]) +@pytest.mark.parametrize( + "auto_class", + [ + AutoDelta, + AutoDiagonalNormal, + AutoMultivariateNormal, + AutoNormal, + AutoLowRankMultivariateNormal, + AutoIAFNormal, + AutoLaplaceApproximation, + AutoGaussian, + AutoGaussianFunsor, + AutoNormalMessenger, + AutoHierarchicalNormalMessenger, + AutoRegressiveMessenger, + ], +) +def test_factor(auto_class, Elbo): + xfail_messenger(auto_class, Elbo) + + def model(log_factor): + pyro.sample("z1", dist.Normal(0.0, 1.0)) + pyro.factor("f1", log_factor) + pyro.sample("z2", dist.Normal(torch.zeros(2), torch.ones(2)).to_event(1)) + with pyro.plate("plate", 3): + pyro.factor("f2", log_factor) + pyro.sample("z3", dist.Normal(torch.zeros(3), torch.ones(3))) + + guide = auto_class(model) + elbo = Elbo(strict_enumeration_warning=False) + elbo.loss(model, guide, torch.tensor(0.0)) # initialize param store + + pyro.set_rng_seed(123) + loss_5 = elbo.loss(model, guide, torch.tensor(5.0)) + pyro.set_rng_seed(123) + loss_4 = elbo.loss(model, guide, torch.tensor(4.0)) + assert_close(loss_5 - loss_4, -1 - 3) + + +# helper for test_shapes() +class AutoStructured_shapes(AutoStructured): + def __init__(self, model, *, init_loc_fn): + def conditional_z4(): + return pyro.param("z4_aux", torch.tensor(0.0)) + + class ConditionalZ5(torch.nn.Module): + def __init__(self): + super().__init__() + self.log_scale = torch.nn.Parameter(torch.zeros(2)) + + def forward(self): + scale = self.log_scale.exp() + return pyro.sample("z5_aux", dist.Normal(0, scale).to_event(1)) + + class ConditionalZ6(PyroModule): + def __init__(self): + super().__init__() + self.scale = PyroParam(torch.ones(2), constraint=constraints.positive) + self.z6_aux = PyroSample(lambda s: dist.Normal(0, s.scale).to_event(1)) + + def forward(self): + return self.z6_aux + + def dependency_z6_z5(z5): + weight = pyro.param("z6_z5_weight", torch.zeros(2)) + return weight * z5 + + dependency_z6_z3 = torch.nn.Linear(3, 2) + + super().__init__( + model, + conditionals={ + "z1": "delta", + "z2": "normal", + "z3": "mvn", + "z4": conditional_z4, + "z5": ConditionalZ5(), + "z6": ConditionalZ6(), + "z7": "mvn", + }, + dependencies={ + "z3": {"z2": "linear"}, + "z4": {"z3": "linear", "z2": "linear"}, + "z6": {"z3": dependency_z6_z3, "z5": dependency_z6_z5}, + "z7": {"z6": "linear"}, + }, + init_loc_fn=init_loc_fn, + ) + + +@pytest.mark.parametrize("num_particles", [1, 10]) +@pytest.mark.parametrize("Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO]) +@pytest.mark.parametrize( + "init_loc_fn", + [ + init_to_feasible, + init_to_mean, + init_to_median, + init_to_sample, + ], +) +@pytest.mark.parametrize( + "auto_class", + [ + AutoDelta, + AutoDiagonalNormal, + AutoMultivariateNormal, + AutoNormal, + AutoLowRankMultivariateNormal, + AutoIAFNormal, + AutoLaplaceApproximation, + AutoStructured, + AutoStructured_shapes, + AutoGaussian, + AutoGaussianFunsor, + AutoRegressiveMessenger, + ], +) +@pytest.mark.filterwarnings("ignore::FutureWarning") +def test_shapes(auto_class, init_loc_fn, Elbo, num_particles): + xfail_messenger(auto_class, Elbo) + + def model(): + pyro.sample("z1", dist.Normal(0.0, 1.0)) + pyro.sample("z2", dist.Normal(torch.zeros(2), torch.ones(2)).to_event(1)) + with pyro.plate("plate", 3): + pyro.sample("z3", dist.Normal(torch.zeros(3), torch.ones(3))) + pyro.sample("z4", dist.MultivariateNormal(torch.zeros(2), torch.eye(2))) + pyro.sample("z5", dist.Dirichlet(torch.ones(3))) + pyro.sample( + "z6", dist.Normal(0, 1).expand((2,)).mask(torch.arange(2) > 0).to_event(1) + ) + pyro.sample("z7", dist.LKJCholesky(2, torch.tensor(1.0))) + + guide = auto_class(model, init_loc_fn=init_loc_fn) + elbo = Elbo( + num_particles=num_particles, + vectorize_particles=True, + strict_enumeration_warning=False, + ) + loss = elbo.loss(model, guide) + assert np.isfinite(loss), loss + + +@pytest.mark.xfail(reason="sequential plate is not yet supported") +@pytest.mark.parametrize( + "auto_class", + [ + AutoDelta, + AutoDiagonalNormal, + AutoMultivariateNormal, + AutoNormal, + AutoLowRankMultivariateNormal, + AutoIAFNormal, + AutoLaplaceApproximation, + AutoGaussian, + AutoGaussianFunsor, + ], +) +@pytest.mark.parametrize("Elbo", [Trace_ELBO, TraceGraph_ELBO]) +def test_iplate_smoke(auto_class, Elbo): + def model(): + x = pyro.sample("x", dist.Normal(0, 1)) + assert x.shape == () + + for i in pyro.plate("plate", 3): + y = pyro.sample( + "y_{}".format(i), dist.Normal(0, 1).expand_by([2, 1 + i, 2]).to_event(3) + ) + assert y.shape == (2, 1 + i, 2) + + z = pyro.sample("z", dist.Normal(0, 1).expand_by([2]).to_event(1)) + assert z.shape == (2,) + + pyro.sample("obs", dist.Bernoulli(0.1), obs=torch.tensor(0)) + + guide = auto_class(model) + infer = SVI( + model, guide, Adam({"lr": 1e-6}), Elbo(strict_enumeration_warning=False) + ) + infer.step() + + +def auto_guide_list_x(model): + guide = AutoGuideList(model) + guide.append(AutoDelta(poutine.block(model, expose=["x"]))) + guide.append(AutoDiagonalNormal(poutine.block(model, hide=["x"]))) + return guide + + +def auto_guide_callable(model): + def guide_x(): + x_loc = pyro.param("x_loc", torch.tensor(1.0)) + x_scale = pyro.param( + "x_scale", torch.tensor(0.1), constraint=constraints.positive + ) + pyro.sample("x", dist.Normal(x_loc, x_scale)) + + def median_x(): + return {"x": pyro.param("x_loc", torch.tensor(1.0))} + + guide = AutoGuideList(model) + guide.append(AutoCallable(model, guide_x, median_x)) + guide.append(AutoDiagonalNormal(poutine.block(model, hide=["x"]))) + return guide + + +class GuideX(AutoGuide): + def __init__(self, model): + super().__init__(model) + self.x_loc = nn.Parameter(torch.tensor(1.0)) + self.x_scale = PyroParam(torch.tensor(0.1), constraint=constraints.positive) + + def forward(self, *args, **kwargs): + return {"x": pyro.sample("x", dist.Normal(self.x_loc, self.x_scale))} + + def median(self, *args, **kwargs): + return {"x": self.x_loc.detach()} + + +def auto_guide_module_callable(model): + guide = AutoGuideList(model) + guide.custom = GuideX(model) + guide.diagnorm = AutoDiagonalNormal(poutine.block(model, hide=["x"])) + return guide + + +def nested_auto_guide_callable(model): + guide = AutoGuideList(model) + guide.append(AutoDelta(poutine.block(model, expose=["x"]))) + guide_y = AutoGuideList(poutine.block(model, expose=["y"])) + guide_y.z = AutoIAFNormal(poutine.block(model, expose=["y"])) + guide.append(guide_y) + return guide + + +class AutoStructured_median(AutoStructured): + def __init__(self, model): + super().__init__( + model, + conditionals={ + "x": "delta", + "y": "normal", + "z": "mvn", + }, + dependencies={ + "x": {"z": "linear", "y": "linear"}, + "y": {"z": "linear"}, + }, + ) + + +@pytest.mark.parametrize( + "auto_class", + [ + AutoDelta, + AutoDiagonalNormal, + AutoMultivariateNormal, + AutoNormal, + AutoLowRankMultivariateNormal, + AutoLaplaceApproximation, + auto_guide_list_x, + auto_guide_callable, + auto_guide_module_callable, + functools.partial(AutoDiagonalNormal, init_loc_fn=init_to_feasible), + functools.partial(AutoDiagonalNormal, init_loc_fn=init_to_mean), + functools.partial(AutoDiagonalNormal, init_loc_fn=init_to_median), + functools.partial(AutoDiagonalNormal, init_loc_fn=init_to_sample), + AutoStructured, + AutoStructured_median, + AutoGaussian, + AutoGaussianFunsor, + AutoNormalMessenger, + AutoHierarchicalNormalMessenger, + ], +) +@pytest.mark.parametrize("Elbo", [JitTrace_ELBO, JitTraceGraph_ELBO, JitTraceEnum_ELBO]) +def test_median(auto_class, Elbo): + xfail_messenger(auto_class, Elbo) + + def model(): + pyro.sample("x", dist.Normal(0.0, 1.0)) + pyro.sample("y", dist.LogNormal(0.0, 1.0)) + pyro.sample("z", dist.Beta(2.0, 2.0)) + + guide = auto_class(model) + optim = Adam({"lr": 0.02, "betas": (0.8, 0.99)}) + elbo = Elbo( + strict_enumeration_warning=False, + num_particles=500, + vectorize_particles=True, + ignore_jit_warnings=True, + ) + infer = SVI(model, guide, optim, elbo) + for _ in range(100): + infer.step() + + if auto_class is AutoLaplaceApproximation: + guide = guide.laplace_approximation() + + with xfail_if_not_implemented(): + median = guide.median() + assert_equal(median["x"], torch.tensor(0.0), prec=0.1) + if auto_class is AutoDelta: + assert_equal(median["y"], torch.tensor(-1.0).exp(), prec=0.1) + else: + assert_equal(median["y"], torch.tensor(1.0), prec=0.1) + assert_equal(median["z"], torch.tensor(0.5), prec=0.1) + + +def serialization_model(): + pyro.sample("x", dist.Normal(0.0, 1.0)) + with pyro.plate("plate", 2): + pyro.sample("y", dist.LogNormal(0.0, 1.0)) + pyro.sample("z", dist.Beta(2.0, 2.0)) + + +@pytest.mark.parametrize("jit", [False, True], ids=["nojit", "jit"]) +@pytest.mark.parametrize( + "auto_class", + [ + AutoDelta, + AutoDiagonalNormal, + AutoMultivariateNormal, + AutoNormal, + AutoLowRankMultivariateNormal, + AutoLaplaceApproximation, + auto_guide_list_x, + auto_guide_module_callable, + nested_auto_guide_callable, + functools.partial(AutoDiagonalNormal, init_loc_fn=init_to_feasible), + functools.partial(AutoDiagonalNormal, init_loc_fn=init_to_mean), + functools.partial(AutoDiagonalNormal, init_loc_fn=init_to_median), + functools.partial(AutoDiagonalNormal, init_loc_fn=init_to_sample), + AutoStructured, + AutoStructured_median, + AutoGaussian, + pytest.param( + AutoGaussianFunsor[0], + marks=[ + pytest.mark.stage("funsor"), + pytest.mark.xfail( + reason="https://github.com/pyro-ppl/pyro/issues/2945" + ), + ], + ), + AutoNormalMessenger, + AutoHierarchicalNormalMessenger, + xfail_param(AutoRegressiveMessenger, reason="jit does not support _Dirichlet"), + ], +) +def test_serialization(auto_class, jit): + guide = auto_class(serialization_model) + guide() + if auto_class is AutoLaplaceApproximation: + guide = guide.laplace_approximation() + pyro.set_rng_seed(0) + expected = guide.call() + latent_names = sorted(guide()) + expected_params = {k: v.data for k, v in guide.named_parameters()} + + if jit: + # Ignore tracer warnings + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", category=torch.jit.TracerWarning) + # XXX: check_trace=True fails for AutoLaplaceApproximation + traced_guide = torch.jit.trace_module( + guide, {"call": ()}, check_trace=False + ) + f = io.BytesIO() + torch.jit.save(traced_guide, f) + del guide, traced_guide + pyro.clear_param_store() + f.seek(0) + guide_deser = torch.jit.load(f) + else: + # Work around https://github.com/pytorch/pytorch/issues/27972 + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", category=UserWarning) + f = io.BytesIO() + torch.save(guide, f) + f.seek(0) + guide_deser = torch.load(f, weights_only=False) + + # Check .call() result. + pyro.set_rng_seed(0) + actual = guide_deser.call() + assert len(actual) == len(expected) + for name, a, e in zip(latent_names, actual, expected): + assert_equal(a, e, msg="{}: {} vs {}".format(name, a, e)) + + # Check named_parameters. + actual_params = {k: v.data for k, v in guide_deser.named_parameters()} + assert set(actual_params) == set(expected_params) + for name, expected in expected_params.items(): + actual = actual_params[name] + assert_equal(actual, expected) + + +def AutoGuideList_x(model): + guide = AutoGuideList(model) + guide.append(AutoNormal(poutine.block(model, expose=["x"]))) + guide.append(AutoLowRankMultivariateNormal(poutine.block(model, hide=["x"]))) + return guide + + +@pytest.mark.parametrize( + "auto_class", + [ + AutoDiagonalNormal, + AutoMultivariateNormal, + AutoNormal, + AutoLowRankMultivariateNormal, + AutoLaplaceApproximation, + AutoGuideList_x, + ], +) +@pytest.mark.parametrize("Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO]) +def test_quantiles(auto_class, Elbo): + def model(): + pyro.sample("y", dist.LogNormal(0.0, 1.0)) + pyro.sample("z", dist.Beta(2.0, 2.0).expand([2]).to_event(1)) + pyro.sample("x", dist.Normal(0.0, 1.0)) + + guide = auto_class(model) + optim = Adam({"lr": 0.05, "betas": (0.8, 0.99)}) + elbo = Elbo( + strict_enumeration_warning=False, num_particles=100, vectorize_particles=True + ) + infer = SVI(model, guide, optim, elbo) + for _ in range(100): + infer.step() + + if auto_class is AutoLaplaceApproximation: + guide = guide.laplace_approximation() + + if hasattr(auto_class, "get_posterior"): + posterior = guide.get_posterior() + posterior_scale = posterior.variance[-1].sqrt() + q = guide.quantiles([0.158655, 0.8413447]) + quantile_scale = 0.5 * (q["x"][1] - q["x"][0]) # only x is unconstrained + assert_close(quantile_scale, posterior_scale, atol=1.0e-6) + + quantiles = guide.quantiles([0.1, 0.5, 0.9]) + median = guide.median() + for name in ["x", "y", "z"]: + assert not median[name].requires_grad + assert torch.is_tensor(quantiles[name]) + assert len(quantiles[name]) == 3 + for q in quantiles[name]: + assert not q.requires_grad + assert q.shape == (() if name != "z" else (2,)) + assert_equal(median[name], quantiles[name][1]) + + assert -3.0 < quantiles["x"][0] + assert quantiles["x"][0] + 1.0 < quantiles["x"][1] + assert quantiles["x"][1] + 1.0 < quantiles["x"][2] + assert quantiles["x"][2] < 3.0 + + assert 0.01 < quantiles["y"][0] + assert quantiles["y"][0] * 2.0 < quantiles["y"][1] + assert quantiles["y"][1] * 2.0 < quantiles["y"][2] + assert quantiles["y"][2] < 100.0 + + assert (0.01 < quantiles["z"][0]).all() + assert (quantiles["z"][0] + 0.1 < quantiles["z"][1]).all() + assert (quantiles["z"][1] + 0.1 < quantiles["z"][2]).all() + assert (quantiles["z"][2] < 0.99).all() + + +@pytest.mark.parametrize( + "continuous_class", + [ + AutoDelta, + AutoDiagonalNormal, + AutoMultivariateNormal, + AutoNormal, + AutoLowRankMultivariateNormal, + AutoIAFNormal, + AutoLaplaceApproximation, + AutoGaussian, + AutoGaussianFunsor, + ], +) +def test_discrete_parallel(continuous_class): + K = 2 + data = torch.tensor([0.0, 1.0, 10.0, 11.0, 12.0]) + + def model(data): + weights = pyro.sample("weights", dist.Dirichlet(0.5 * torch.ones(K))) + locs = pyro.sample("locs", dist.Normal(0, 10).expand_by([K]).to_event(1)) + scale = pyro.sample("scale", dist.LogNormal(0, 1)) + + with pyro.plate("data", len(data)): + weights = weights.expand(torch.Size((len(data),)) + weights.shape) + assignment = pyro.sample("assignment", dist.Categorical(weights)) + pyro.sample("obs", dist.Normal(locs[assignment], scale), obs=data) + + guide = AutoGuideList(model) + guide.append(continuous_class(poutine.block(model, hide=["assignment"]))) + guide.append(AutoDiscreteParallel(poutine.block(model, expose=["assignment"]))) + + elbo = TraceEnum_ELBO(max_plate_nesting=1) + loss = elbo.loss_and_grads(model, guide, data) + assert np.isfinite(loss), loss + + +@pytest.mark.parametrize( + "auto_class", + [ + AutoDelta, + AutoDiagonalNormal, + AutoMultivariateNormal, + AutoNormal, + AutoLowRankMultivariateNormal, + AutoIAFNormal, + AutoLaplaceApproximation, + AutoGaussian, + AutoGaussianFunsor, + ], +) +def test_guide_list(auto_class): + def model(): + pyro.sample("x", dist.Normal(0.0, 1.0).expand([2]).to_event(1)) + pyro.sample("y", dist.MultivariateNormal(torch.zeros(5), torch.eye(5, 5))) + + guide = AutoGuideList(model) + guide.append(auto_class(poutine.block(model, expose=["x"]))) + guide.append(auto_class(poutine.block(model, expose=["y"]))) + guide() + + +@pytest.mark.parametrize( + "auto_class", + [ + AutoDelta, + AutoDiagonalNormal, + AutoNormal, + AutoMultivariateNormal, + AutoLowRankMultivariateNormal, + AutoLaplaceApproximation, + AutoGaussian, + AutoGaussianFunsor, + ], +) +def test_callable(auto_class): + def model(): + pyro.sample("x", dist.Normal(0.0, 1.0)) + pyro.sample("y", dist.MultivariateNormal(torch.zeros(5), torch.eye(5, 5))) + + def guide_x(): + x_loc = pyro.param("x_loc", torch.tensor(0.0)) + pyro.sample("x", dist.Delta(x_loc)) + + guide = AutoGuideList(model) + guide.append(guide_x) + guide.append(auto_class(poutine.block(model, expose=["y"]))) + values = guide() + assert set(values) == set(["y"]) + + +@pytest.mark.parametrize( + "auto_class", + [ + AutoDelta, + AutoNormal, + AutoDiagonalNormal, + AutoMultivariateNormal, + AutoNormal, + AutoLowRankMultivariateNormal, + AutoLaplaceApproximation, + AutoGaussian, + AutoGaussianFunsor, + ], +) +def test_callable_return_dict(auto_class): + def model(): + pyro.sample("x", dist.Normal(0.0, 1.0)) + pyro.sample("y", dist.MultivariateNormal(torch.zeros(5), torch.eye(5, 5))) + + def guide_x(): + x_loc = pyro.param("x_loc", torch.tensor(0.0)) + x = pyro.sample("x", dist.Delta(x_loc)) + return {"x": x} + + guide = AutoGuideList(model) + guide.append(guide_x) + guide.append(auto_class(poutine.block(model, expose=["y"]))) + values = guide() + assert set(values) == set(["x", "y"]) + + +def test_empty_model_error(): + def model(): + pass + + guide = AutoDiagonalNormal(model) + with pytest.raises(RuntimeError): + guide() + + +def test_unpack_latent(): + def model(): + return pyro.sample("x", dist.LKJCholesky(2, torch.tensor(1.0))) + + guide = AutoDiagonalNormal(model) + assert guide()["x"].shape == model().shape + latent = guide.sample_latent() + assert list(guide._unpack_latent(latent))[0][1].shape == (1,) + + +@pytest.mark.parametrize( + "auto_class", + [ + AutoDelta, + AutoNormal, + AutoDiagonalNormal, + AutoMultivariateNormal, + AutoLowRankMultivariateNormal, + AutoGaussian, + AutoGaussianFunsor, + AutoNormalMessenger, + AutoHierarchicalNormalMessenger, + ], +) +def test_init_loc_fn(auto_class): + def model(): + pyro.sample("x", dist.Normal(0.0, 1.0)) + pyro.sample("y", dist.MultivariateNormal(torch.zeros(5), torch.eye(5, 5))) + + inits = {"x": torch.randn(()), "y": torch.randn(5)} + + def init_loc_fn(site): + return inits[site["name"]] + + guide = auto_class(model, init_loc_fn=init_loc_fn) + guide() + median = guide.median() + assert_equal(median["x"], inits["x"]) + assert_equal(median["y"], inits["y"]) + + +# testing helper +class AutoLowRankMultivariateNormal_100(AutoLowRankMultivariateNormal): + def __init__(self, *args, **kwargs): + return super().__init__(*args, **kwargs, rank=100) + + +@pytest.mark.parametrize("init_scale", [1e-1, 1e-4, 1e-8]) +@pytest.mark.parametrize( + "auto_class", + [ + AutoDiagonalNormal, + AutoMultivariateNormal, + AutoLowRankMultivariateNormal, + AutoLowRankMultivariateNormal_100, + ], +) +def test_init_scale(auto_class, init_scale): + def model(): + pyro.sample("x", dist.Normal(0.0, 1.0)) + pyro.sample("y", dist.MultivariateNormal(torch.zeros(5), torch.eye(5, 5))) + with pyro.plate("plate", 100): + pyro.sample("z", dist.Normal(0.0, 1.0)) + + guide = auto_class(model, init_scale=init_scale) + guide() + loc, scale = guide._loc_scale() + scale_rms = scale.pow(2).mean().sqrt().item() + assert init_scale * 0.5 < scale_rms < 2.0 * init_scale + + +@pytest.mark.parametrize( + "auto_class", + [ + AutoDelta, + AutoDiagonalNormal, + AutoMultivariateNormal, + AutoLowRankMultivariateNormal, + AutoLaplaceApproximation, + auto_guide_list_x, + auto_guide_callable, + auto_guide_module_callable, + functools.partial(AutoDiagonalNormal, init_loc_fn=init_to_mean), + functools.partial(AutoDiagonalNormal, init_loc_fn=init_to_median), + functools.partial(AutoNormal, init_loc_fn=init_to_median), + functools.partial(AutoGaussian, init_loc_fn=init_to_median), + AutoNormalMessenger, + AutoHierarchicalNormalMessenger, + ], +) +@pytest.mark.parametrize("Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO]) +def test_median_module(auto_class, Elbo): + xfail_messenger(auto_class, Elbo) + + class Model(PyroModule): + def __init__(self): + super().__init__() + self.x_loc = nn.Parameter(torch.tensor(1.0)) + self.x_scale = PyroParam(torch.tensor(0.1), constraints.positive) + + def forward(self): + x = pyro.sample("x", dist.Normal(self.x_loc, self.x_scale)) + pyro.sample("y", dist.Normal(2.0, 0.1)) + pyro.sample("z", dist.Normal(1.0, 0.1), obs=x) + + model = Model() + guide = auto_class(model) + infer = SVI( + model, guide, Adam({"lr": 0.005}), Elbo(strict_enumeration_warning=False) + ) + for _ in range(20): + infer.step() + + if auto_class is AutoLaplaceApproximation: + guide = guide.laplace_approximation() + + median = guide.median() + assert_equal(median["x"].detach(), torch.tensor(1.0), prec=0.1) + assert_equal(median["y"].detach(), torch.tensor(2.0), prec=0.1) + + +@pytest.mark.parametrize("Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO]) +def test_nested_autoguide(Elbo): + class Model(PyroModule): + def __init__(self): + super().__init__() + self.x_loc = nn.Parameter(torch.tensor(1.0)) + self.x_scale = PyroParam(torch.tensor(0.1), constraints.positive) + + def forward(self): + pyro.sample("x", dist.Normal(self.x_loc, self.x_scale)) + with pyro.plate("plate", 2): + pyro.sample("y", dist.Normal(2.0, 0.1)) + + model = Model() + guide = nested_auto_guide_callable(model) + + # Check master ref for all nested components. + for _, m in guide.named_modules(): + if m is guide: + continue + assert ( + m.master is not None and m.master() is guide + ), "master ref wrong for {}".format(m._pyro_name) + + infer = SVI( + model, guide, Adam({"lr": 0.005}), Elbo(strict_enumeration_warning=False) + ) + for _ in range(20): + infer.step() + + guide_trace = poutine.trace(guide).get_trace() + model_trace = poutine.trace(model).get_trace() + check_model_guide_match(model_trace, guide_trace) + assert all( + p.startswith("AutoGuideList.0") or p.startswith("AutoGuideList.1.z") + for p in guide_trace.param_nodes + ) + stochastic_nodes = set(guide_trace.stochastic_nodes) + assert "x" in stochastic_nodes + assert "y" in stochastic_nodes + # Only latent sampled is for the IAF. + assert "_AutoGuideList.1.z_latent" in stochastic_nodes + + +@pytest.mark.parametrize( + "auto_class", + [ + AutoDelta, + AutoDiagonalNormal, + AutoMultivariateNormal, + AutoNormal, + AutoLowRankMultivariateNormal, + AutoLaplaceApproximation, + functools.partial(AutoDiagonalNormal, init_loc_fn=init_to_mean), + functools.partial(AutoDiagonalNormal, init_loc_fn=init_to_median), + AutoGaussian, + AutoGaussianFunsor, + AutoNormalMessenger, + AutoHierarchicalNormalMessenger, + AutoRegressiveMessenger, + ], +) +@pytest.mark.parametrize("Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO]) +def test_linear_regression_smoke(auto_class, Elbo): + xfail_messenger(auto_class, Elbo) + N, D = 10, 3 + + class RandomLinear(nn.Linear, PyroModule): + def __init__(self, in_features, out_features): + super().__init__(in_features, out_features) + self.weight = PyroSample( + dist.Normal(0.0, 1.0).expand([out_features, in_features]).to_event(2) + ) + self.bias = PyroSample( + dist.Normal(0.0, 10.0).expand([out_features]).to_event(1) + ) + + class LinearRegression(PyroModule): + def __init__(self): + super().__init__() + self.linear = RandomLinear(D, 1) + + def forward(self, x, y=None): + mean = self.linear(x).squeeze(-1) + sigma = pyro.sample("sigma", dist.LogNormal(0.0, 1.0)) + with pyro.plate("plate", N): + return pyro.sample("obs", dist.Normal(mean, sigma), obs=y) + + x, y = torch.randn(N, D), torch.randn(N) + model = LinearRegression() + guide = auto_class(model) + infer = SVI( + model, guide, Adam({"lr": 0.005}), Elbo(strict_enumeration_warning=False) + ) + infer.step(x, y) + + +class AutoStructured_predictive(AutoStructured): + def __init__(self, model): + super().__init__( + model, + conditionals={ + "linear.weight": "mvn", + "linear.bias": "normal", + "sigma": "delta", + }, + dependencies={ + "linear.bias": {"linear.weight": "linear"}, + }, + ) + + +@pytest.mark.parametrize( + "auto_class", + [ + AutoDelta, + AutoDiagonalNormal, + AutoMultivariateNormal, + AutoNormal, + AutoLowRankMultivariateNormal, + AutoLaplaceApproximation, + functools.partial(AutoDiagonalNormal, init_loc_fn=init_to_mean), + functools.partial(AutoDiagonalNormal, init_loc_fn=init_to_median), + AutoStructured, + AutoStructured_predictive, + AutoGaussian, + pytest.param( + AutoGaussianFunsor[0], + marks=[ + pytest.mark.stage("funsor"), + pytest.mark.xfail( + reason="https://github.com/pyro-ppl/pyro/issues/2945" + ), + ], + ), + ], +) +def test_predictive(auto_class): + N, D = 3, 2 + + class RandomLinear(nn.Linear, PyroModule): + def __init__(self, in_features, out_features): + super().__init__(in_features, out_features) + self.weight = PyroSample( + dist.Normal(0.0, 1.0).expand([out_features, in_features]).to_event(2) + ) + self.bias = PyroSample( + dist.Normal(0.0, 10.0).expand([out_features]).to_event(1) + ) + + class LinearRegression(PyroModule): + def __init__(self): + super().__init__() + self.linear = RandomLinear(D, 1) + + def forward(self, x, y=None): + mean = self.linear(x).squeeze(-1) + sigma = pyro.sample("sigma", dist.LogNormal(0.0, 1.0)) + with pyro.plate("plate", N): + return pyro.sample("obs", dist.Normal(mean, sigma), obs=y) + + x, y = torch.randn(N, D), torch.randn(N) + model = LinearRegression() + guide = auto_class(model) + # XXX: Record `y` as observed in the prototype trace + # Is there a better pattern to follow? + guide(x, y=y) + # Test predictive module + model_trace = poutine.trace(model).get_trace(x, y=None) + predictive = Predictive(model, guide=guide, num_samples=10) + pyro.set_rng_seed(0) + samples = predictive(x) + for site in prune_subsample_sites(model_trace).stochastic_nodes: + assert site in samples + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", category=torch.jit.TracerWarning) + traced_predictive = torch.jit.trace_module(predictive, {"call": (x,)}) + f = io.BytesIO() + torch.jit.save(traced_predictive, f) + f.seek(0) + predictive_deser = torch.jit.load(f) + pyro.set_rng_seed(0) + samples_deser = predictive_deser.call(x) + # Note that the site values are different in the serialized guide + assert len(samples) == len(samples_deser) + + +@pytest.mark.parametrize("sample_shape", [(), (6,), (5, 4)], ids=str) +@pytest.mark.parametrize( + "auto_class", + [ + AutoDelta, + AutoDiagonalNormal, + AutoMultivariateNormal, + AutoNormal, + AutoLowRankMultivariateNormal, + AutoLaplaceApproximation, + functools.partial(AutoDiagonalNormal, init_loc_fn=init_to_mean), + functools.partial(AutoDiagonalNormal, init_loc_fn=init_to_median), + AutoStructured, + AutoGaussian, + AutoGaussianFunsor, + AutoNormalMessenger, + AutoHierarchicalNormalMessenger, + AutoRegressiveMessenger, + ], +) +def test_replay_plates(auto_class, sample_shape): + def model(): + a = pyro.sample("a", dist.Normal(0, 1)) + b = pyro.sample("b", dist.Normal(a[..., None], torch.ones(3)).to_event(1)) + c = pyro.sample( + "c", dist.MultivariateNormal(torch.zeros(3) + a[..., None], torch.eye(3)) + ) + with pyro.plate("i", 2): + d = pyro.sample("d", dist.Dirichlet((b + c).exp())) + pyro.sample("e", dist.Categorical(logits=d), obs=torch.tensor([0, 0])) + return a, b, c, d + + guide = auto_class(model) + with pyro.plate_stack("particles", sample_shape, rightmost_dim=-2): + guide_trace = poutine.trace(guide).get_trace() + a, b, c, d = poutine.replay(model, guide_trace)() + assert a.shape == (sample_shape + (1,) if sample_shape else ()) + assert b.shape == (sample_shape + (1, 3) if sample_shape else (3,)) + assert c.shape == (sample_shape + (1, 3) if sample_shape else (3,)) + assert d.shape == sample_shape + (2, 3) + + +@pytest.mark.parametrize( + "auto_class", + [ + AutoDelta, + AutoNormal, + AutoNormalMessenger, + AutoHierarchicalNormalMessenger, + AutoRegressiveMessenger, + ], +) +def test_subsample_model(auto_class): + def model(x, y=None, batch_size=None): + loc = pyro.param("loc", lambda: torch.tensor(0.0)) + scale = pyro.param( + "scale", lambda: torch.tensor(1.0), constraint=constraints.positive + ) + with pyro.plate("batch", len(x), subsample_size=batch_size): + batch_x = pyro.subsample(x, event_dim=0) + batch_y = pyro.subsample(y, event_dim=0) if y is not None else None + mean = loc + scale * batch_x + sigma = pyro.sample("sigma", dist.LogNormal(0.0, 1.0)) + return pyro.sample("obs", dist.Normal(mean, sigma), obs=batch_y) + + guide = auto_class(model) + + full_size = 50 + batch_size = 20 + pyro.set_rng_seed(123456789) + x = torch.randn(full_size) + with torch.no_grad(): + y = model(x) + assert y.shape == x.shape + + pyro.get_param_store().clear() + pyro.set_rng_seed(123456789) + svi = SVI(model, guide, Adam({"lr": 0.02}), Trace_ELBO()) + for step in range(5): + svi.step(x, y, batch_size=batch_size) + + +@pytest.mark.parametrize( + "auto_class", + [ + AutoNormalMessenger, + AutoHierarchicalNormalMessenger, + AutoRegressiveMessenger, + ], +) +def test_subsample_model_amortized(auto_class): + def model(x, y=None, batch_size=None): + loc = pyro.param("loc", lambda: torch.tensor(0.0)) + scale = pyro.param( + "scale", lambda: torch.tensor(1.0), constraint=constraints.positive + ) + with pyro.plate("batch", len(x), subsample_size=batch_size): + batch_x = pyro.subsample(x, event_dim=0) + batch_y = pyro.subsample(y, event_dim=0) if y is not None else None + mean = loc + scale * batch_x + sigma = pyro.sample("sigma", dist.LogNormal(0.0, 1.0)) + return pyro.sample("obs", dist.Normal(mean, sigma), obs=batch_y) + + guide1 = auto_class(model) + guide2 = auto_class(model, amortized_plates=("batch",)) + + full_size = 50 + batch_size = 20 + pyro.set_rng_seed(123456789) + x = torch.randn(full_size) + with torch.no_grad(): + y = model(x) + assert y.shape == x.shape + + for guide in guide1, guide2: + pyro.get_param_store().clear() + pyro.set_rng_seed(123456789) + svi = SVI(model, guide, Adam({"lr": 0.02}), Trace_ELBO()) + for step in range(5): + svi.step(x, y, batch_size=batch_size) + + params1 = dict(guide1.named_parameters()) + params2 = dict(guide2.named_parameters()) + assert params1["locs.sigma_unconstrained"].shape == (50,) + assert params2["locs.sigma_unconstrained"].shape == () + + +@pytest.mark.parametrize("init_fn", [None, init_to_mean, init_to_median]) +@pytest.mark.parametrize("auto_class", [AutoDelta, AutoNormal, AutoGuideList]) +def test_subsample_guide(auto_class, init_fn): + # The model from tutorial/source/easyguide.ipynb + def model(batch, subsample, full_size): + num_time_steps = len(batch) + result = [None] * num_time_steps + drift = pyro.sample("drift", dist.LogNormal(-1, 0.5)) + data_plate = pyro.plate("data", full_size, subsample=subsample) + assert data_plate.size == 50 + with data_plate: + z = 0.0 + for t in range(num_time_steps): + z = pyro.sample("state_{}".format(t), dist.Normal(z, drift)) + result[t] = pyro.sample( + "obs_{}".format(t), dist.Bernoulli(logits=z), obs=batch[t] + ) + + return torch.stack(result) + + def create_plates(batch, subsample, full_size): + return pyro.plate("data", full_size, subsample=subsample) + + if auto_class == AutoGuideList: + guide = AutoGuideList(model, create_plates=create_plates) + guide.append(AutoDelta(poutine.block(model, expose=["drift"]))) + guide.append(AutoNormal(poutine.block(model, hide=["drift"]))) + else: + guide = auto_class(model, create_plates=create_plates) + + full_size = 50 + batch_size = 20 + num_time_steps = 8 + pyro.set_rng_seed(123456789) + data = model([None] * num_time_steps, torch.arange(full_size), full_size) + assert data.shape == (num_time_steps, full_size) + + pyro.get_param_store().clear() + pyro.set_rng_seed(123456789) + svi = SVI(model, guide, Adam({"lr": 0.02}), Trace_ELBO()) + for epoch in range(2): + beg = 0 + while beg < full_size: + end = min(full_size, beg + batch_size) + subsample = torch.arange(beg, end) + batch = data[:, beg:end] + beg = end + svi.step(batch, subsample, full_size=full_size) + + +@pytest.mark.parametrize("independent", [True, False], ids=["independent", "dependent"]) +@pytest.mark.parametrize("auto_class", [AutoDelta, AutoNormal]) +def test_subsample_guide_2(auto_class, independent): + # Simplified from Model2 in tutorial/source/forecasting_iii.ipynb + def model(data): + size, size = data.shape + origin_plate = pyro.plate("origin", size, dim=-2) + destin_plate = pyro.plate("destin", size, dim=-1) + with origin_plate, destin_plate: + batch = pyro.subsample(data, event_dim=0) + assert batch.size(0) == batch.size(1), batch.shape + pyro.sample("obs", dist.Normal(0, 1), obs=batch) + + def create_plates(data): + size, size = data.shape + origin_plate = pyro.plate("origin", size, subsample_size=5, dim=-2) + if independent: + destin_plate = pyro.plate("destin", size, subsample_size=5, dim=-1) + else: + with origin_plate as subsample: + pass + destin_plate = pyro.plate("destin", size, subsample=subsample, dim=-1) + return origin_plate, destin_plate + + guide = auto_class(model, create_plates=create_plates) + svi = SVI(model, guide, Adam({"lr": 0.01}), Trace_ELBO()) + + data = torch.randn(10, 10) + for step in range(2): + svi.step(data) + + +@pytest.mark.parametrize( + "auto_class", + [ + AutoDelta, + AutoDiagonalNormal, + AutoMultivariateNormal, + AutoNormal, + AutoLowRankMultivariateNormal, + AutoLaplaceApproximation, + AutoGaussian, + AutoGaussianFunsor, + ], +) +@pytest.mark.parametrize( + "init_loc_fn", + [ + init_to_feasible, + init_to_mean, + init_to_median, + init_to_sample, + ], +) +def test_discrete_helpful_error(auto_class, init_loc_fn): + def model(): + p = pyro.sample("p", dist.Beta(2.0, 2.0)) + x = pyro.sample("x", dist.Bernoulli(p)) + pyro.sample( + "obs", + dist.Bernoulli(p * x + (1 - p) * (1 - x)), + obs=torch.tensor([1.0, 0.0]), + ) + + guide = auto_class(model, init_loc_fn=init_loc_fn) + with pytest.raises(ValueError, match=".*enumeration.html.*"): + guide() + + +@pytest.mark.parametrize( + "auto_class", + [ + AutoDiagonalNormal, + AutoMultivariateNormal, + AutoNormal, + AutoLowRankMultivariateNormal, + AutoLaplaceApproximation, + AutoGaussian, + AutoGaussianFunsor, + AutoNormalMessenger, + AutoHierarchicalNormalMessenger, + AutoRegressiveMessenger, + ], +) +@pytest.mark.parametrize( + "init_loc_fn", + [ + init_to_feasible, + init_to_mean, + init_to_median, + init_to_sample, + ], +) +def test_sphere_helpful_error(auto_class, init_loc_fn): + def model(): + x = pyro.sample("x", dist.Normal(0.0, 1.0).expand([2]).to_event(1)) + y = pyro.sample("y", dist.ProjectedNormal(x)) + pyro.sample("obs", dist.Normal(y, 1), obs=torch.tensor([1.0, 0.0])) + + guide = auto_class(model, init_loc_fn=init_loc_fn) + with pytest.raises(ValueError, match=".*ProjectedNormalReparam.*"): + guide() + + +@pytest.mark.parametrize( + "auto_class", + [ + AutoDelta, + AutoDiagonalNormal, + AutoMultivariateNormal, + AutoNormal, + AutoLowRankMultivariateNormal, + AutoLaplaceApproximation, + AutoGaussian, + AutoGaussianFunsor, + AutoNormalMessenger, + AutoHierarchicalNormalMessenger, + AutoRegressiveMessenger, + ], +) +@pytest.mark.parametrize( + "init_loc_fn", + [ + init_to_feasible, + init_to_mean, + init_to_median, + init_to_sample, + ], +) +def test_sphere_reparam_ok(auto_class, init_loc_fn): + def model(): + x = pyro.sample("x", dist.Normal(0.0, 1.0).expand([3]).to_event(1)) + y = pyro.sample("y", dist.ProjectedNormal(x)) + pyro.sample( + "obs", dist.Normal(y, 1).to_event(1), obs=torch.tensor([1.0, 0.0, 0.0]) + ) + + model = poutine.reparam(model, {"y": ProjectedNormalReparam()}) + guide = auto_class(model) + poutine.trace(guide).get_trace().compute_log_prob() + + +@pytest.mark.parametrize("auto_class", [AutoDelta]) +@pytest.mark.parametrize( + "init_loc_fn", + [ + init_to_feasible, + init_to_mean, + init_to_median, + init_to_sample, + ], +) +def test_sphere_raw_ok(auto_class, init_loc_fn): + def model(): + x = pyro.sample("x", dist.Normal(0.0, 1.0).expand([3]).to_event(1)) + y = pyro.sample("y", dist.ProjectedNormal(x)) + pyro.sample( + "obs", dist.Normal(y, 1).to_event(1), obs=torch.tensor([1.0, 0.0, 0.0]) + ) + + guide = auto_class(model, init_loc_fn=init_loc_fn) + poutine.trace(guide).get_trace().compute_log_prob() + + +class AutoStructured_exact_normal(AutoStructured): + def __init__(self, model): + super().__init__( + model, + conditionals={"loc": "normal"}, + dependencies={}, + ) + + +class AutoStructured_exact_mvn(AutoStructured): + def __init__(self, model): + super().__init__( + model, + conditionals={"loc": "mvn"}, + dependencies={}, + ) + + +@pytest.mark.parametrize( + "Guide", + [ + AutoNormal, + AutoDiagonalNormal, + AutoMultivariateNormal, + AutoLowRankMultivariateNormal, + AutoStructured_exact_normal, + AutoStructured_exact_mvn, + AutoGaussian, + AutoGaussianFunsor, + AutoNormalMessenger, + AutoHierarchicalNormalMessenger, + AutoRegressiveMessenger, + ], +) +def test_exact(Guide): + def model(data): + loc = pyro.sample("loc", dist.Normal(0, 1)) + with pyro.plate("data", len(data)): + pyro.sample("obs", dist.Normal(loc, 1), obs=data) + return loc + + data = torch.randn(3) + expected_mean = (0 + data.sum().item()) / (1 + len(data)) + expected_std = (1 + len(data)) ** (-0.5) + g = Gaussian( + log_normalizer=torch.zeros(()), + info_vec=torch.zeros(4), + precision=torch.tensor( + [ + [4, -1, -1, -1], + [-1, 1, 0, 0], + [-1, 0, 1, 0], + [-1, 0, 0, 1], + ], + dtype=data.dtype, + ), + ) + expected_loss = float(g.event_logsumexp() - g.condition(data).event_logsumexp()) + + guide = Guide(model) + Elbo = JitTrace_ELBO + if Guide is AutoRegressiveMessenger: + Elbo = Trace_ELBO # currently fails with jit + elbo = Elbo(num_particles=100, vectorize_particles=True, ignore_jit_warnings=True) + num_steps = 500 + optim = ClippedAdam({"lr": 0.05, "lrd": 0.1 ** (1 / num_steps)}) + svi = SVI(model, guide, optim, elbo) + for step in range(num_steps): + svi.step(data) + + guide.requires_grad_(False) + with torch.no_grad(): + # Check moments. + vectorize = pyro.plate("particles", 10000, dim=-2) + guide_trace = poutine.trace(vectorize(guide)).get_trace(data) + samples = poutine.replay(vectorize(model), guide_trace)(data) + actual_mean = samples.mean().item() + actual_std = samples.std().item() + assert_close(actual_mean, expected_mean, atol=0.05) + assert_close(actual_std, expected_std, rtol=0.05) + + # Check ELBO loss. + actual_loss = elbo.loss(model, guide, data) + assert_close(actual_loss, expected_loss, atol=0.01) + + +@pytest.mark.parametrize( + "Guide", + [ + AutoNormal, + AutoDiagonalNormal, + AutoMultivariateNormal, + AutoLowRankMultivariateNormal, + AutoStructured_exact_normal, + AutoStructured_exact_mvn, + AutoGaussian, + AutoGaussianFunsor, + AutoNormalMessenger, + AutoHierarchicalNormalMessenger, + AutoRegressiveMessenger, + ], +) +def test_exact_batch(Guide): + def model(data): + with pyro.plate("data", len(data)): + loc = pyro.sample("loc", dist.Normal(0, 1)) + pyro.sample("obs", dist.Normal(loc, 1), obs=data) + return loc + + data = torch.randn(3) + expected_mean = (0 + data) / (1 + 1) + expected_std = (1 + torch.ones_like(data)) ** (-0.5) + g = Gaussian( + log_normalizer=torch.zeros(3), + info_vec=torch.zeros(3, 2), + precision=torch.tensor( + [[[2, -1], [-1, 1]]] * 3, + dtype=data.dtype, + ), + ) + expected_loss = float( + g.event_logsumexp().sum() - g.condition(data[:, None]).event_logsumexp().sum() + ) + + guide = Guide(model) + Elbo = JitTrace_ELBO + if Guide is AutoRegressiveMessenger: + Elbo = Trace_ELBO # currently fails with jit + elbo = Elbo(num_particles=100, vectorize_particles=True, ignore_jit_warnings=True) + num_steps = 500 + optim = ClippedAdam({"lr": 0.05, "lrd": 0.1 ** (1 / num_steps)}) + svi = SVI(model, guide, optim, elbo) + for step in range(num_steps): + svi.step(data) + + guide.requires_grad_(False) + with torch.no_grad(): + # Check moments. + vectorize = pyro.plate("particles", 10000, dim=-2) + guide_trace = poutine.trace(vectorize(guide)).get_trace(data) + samples = poutine.replay(vectorize(model), guide_trace)(data) + actual_mean = samples.mean(0) + actual_std = samples.std(0) + assert_close(actual_mean, expected_mean, atol=0.05) + assert_close(actual_std, expected_std, rtol=0.05) + + # Check ELBO loss. + actual_loss = elbo.loss(model, guide, data) + assert_close(actual_loss, expected_loss, atol=0.01) + + +@pytest.mark.parametrize( + "Guide", + [ + AutoNormal, + AutoDiagonalNormal, + AutoMultivariateNormal, + AutoLowRankMultivariateNormal, + AutoStructured, + AutoGaussian, + AutoGaussianFunsor, + AutoNormalMessenger, + AutoHierarchicalNormalMessenger, + AutoRegressiveMessenger, + ], +) +def test_exact_tree(Guide): + is_exact = Guide not in ( + AutoNormal, + AutoDiagonalNormal, + AutoNormalMessenger, + AutoHierarchicalNormalMessenger, + AutoRegressiveMessenger, + ) + + def model(data): + x = pyro.sample("x", dist.Normal(0, 1)) + with pyro.plate("data", len(data)): + y = pyro.sample("y", dist.Normal(x, 1)) + pyro.sample("obs", dist.Normal(y, 1), obs=data) + return {"x": x, "y": y} + + data = torch.randn(2) + g = Gaussian( + log_normalizer=torch.zeros(()), + info_vec=torch.zeros(5), + precision=torch.tensor( + [ + [3, -1, -1, 0, 0], # x + [-1, 2, 0, -1, 0], # y[0] + [-1, 0, 2, 0, -1], # y[1] + [0, -1, 0, 1, 0], # obs[0] + [0, 0, -1, 0, 1], # obs[1] + ], + dtype=data.dtype, + ), + ) + g_cond = g.condition(data) + mean = torch.linalg.solve(g_cond.precision, g_cond.info_vec) + std = torch.inverse(g_cond.precision).diag().sqrt() + expected_mean = {"x": mean[0], "y": mean[1:]} + expected_std = {"x": std[0], "y": std[1:]} + expected_loss = float(g.event_logsumexp() - g_cond.event_logsumexp()) + + guide = Guide(model) + Elbo = JitTrace_ELBO + if Guide is AutoRegressiveMessenger: + Elbo = Trace_ELBO # currently fails with jit + elbo = Elbo(num_particles=100, vectorize_particles=True, ignore_jit_warnings=True) + num_steps = 500 + optim = ClippedAdam({"lr": 0.05, "lrd": 0.1 ** (1 / num_steps)}) + svi = SVI(model, guide, optim, elbo) + for step in range(num_steps): + svi.step(data) + + guide.train(False) + guide.requires_grad_(False) + with torch.no_grad(): + # Check moments. + vectorize = pyro.plate("particles", 50000, dim=-2) + guide_trace = poutine.trace(vectorize(guide)).get_trace(data) + samples = poutine.replay(vectorize(model), guide_trace)(data) + for name in ["x", "y"]: + actual_mean = samples[name].mean(0).squeeze() + actual_std = samples[name].std(0).squeeze() + assert_close(actual_mean, expected_mean[name], atol=0.05) + if is_exact: + assert_close(actual_std, expected_std[name], rtol=0.05) + + if is_exact: + # Check ELBO loss. + actual_loss = elbo.loss(model, guide, data) + assert_close(actual_loss, expected_loss, atol=0.01) + + +def test_autonormal_dynamic_model(): + def model1(): + x = pyro.sample("x", dist.Normal(0, 1)) + pyro.sample("obs", dist.Normal(x, 1), obs=torch.tensor(0.0)) + + def model2(): + x = pyro.sample("x", dist.Normal(0, 1)) + y = pyro.sample("y", dist.Normal(0, 1)) + pyro.sample("obs", dist.Normal(x + y, 1), obs=torch.tensor(0.0)) + + guide = AutoNormal(model1) + guide() # initialize + + assert hasattr(guide.locs, "x") + assert not hasattr(guide.locs, "y") + assert guide.locs.x.shape == () + expected = torch.tensor(12.345) + guide.locs.x = expected + + guide = AutoNormal(model2) + guide() # initialize + + assert hasattr(guide.locs, "x") + assert hasattr(guide.locs, "y") + assert_equal(guide.locs.x.data, expected) diff --git a/pyro/source/tests/infer/test_compute_downstream_costs.py b/pyro/source/tests/infer/test_compute_downstream_costs.py new file mode 100644 index 0000000000000000000000000000000000000000..4d6ddbf5f22545f86007877a2129a73ad808e97c --- /dev/null +++ b/pyro/source/tests/infer/test_compute_downstream_costs.py @@ -0,0 +1,787 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math +from collections import defaultdict + +import pytest +import torch + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.infer.tracegraph_elbo import TrackNonReparam, _compute_downstream_costs +from pyro.infer.util import MultiFrameTensor, get_plate_stacks +from pyro.ops.provenance import get_provenance +from pyro.poutine.util import prune_subsample_sites +from tests.common import assert_equal + + +def _brute_force_compute_downstream_costs( + model_trace, guide_trace, non_reparam_nodes # +): + guide_nodes = [ + x for x in guide_trace.nodes if guide_trace.nodes[x]["type"] == "sample" + ] + downstream_costs, downstream_guide_cost_nodes = {}, {} + stacks = get_plate_stacks(model_trace) + + for node in guide_nodes: + downstream_costs[node] = MultiFrameTensor( + ( + stacks[node], + model_trace.nodes[node]["log_prob"] + - guide_trace.nodes[node]["log_prob"], + ) + ) + downstream_guide_cost_nodes[node] = set([node]) + + descendants = guide_trace.successors(node) + + for desc in descendants: + desc_mft = MultiFrameTensor( + ( + stacks[desc], + model_trace.nodes[desc]["log_prob"] + - guide_trace.nodes[desc]["log_prob"], + ) + ) + downstream_costs[node].add(*desc_mft.items()) + downstream_guide_cost_nodes[node].update([desc]) + + for site in non_reparam_nodes: + children_in_model = set() + for node in downstream_guide_cost_nodes[site]: + children_in_model.update(model_trace.successors(node)) + children_in_model.difference_update(downstream_guide_cost_nodes[site]) + for child in children_in_model: + assert model_trace.nodes[child]["type"] == "sample" + child_mft = MultiFrameTensor( + (stacks[child], model_trace.nodes[child]["log_prob"]) + ) + downstream_costs[site].add(*child_mft.items()) + downstream_guide_cost_nodes[site].update([child]) + + for k in non_reparam_nodes: + downstream_costs[k] = downstream_costs[k].sum_to( + guide_trace.nodes[k]["cond_indep_stack"] + ) + + return downstream_costs, downstream_guide_cost_nodes + + +def _provenance_compute_downstream_costs(model_trace, guide_trace): + # replicate the logic from TraceGraph_ELBO + # additionally compute downstream_guide_cost_nodes + downstream_costs = defaultdict(lambda: MultiFrameTensor()) + downstream_guide_cost_nodes = defaultdict(lambda: set()) + for name, site in model_trace.nodes.items(): + if site["type"] == "sample": + # add the log_prob to each non-reparam sample site upstream + for key in get_provenance(site["log_prob_sum"]): + downstream_costs[key].add((site["cond_indep_stack"], site["log_prob"])) + downstream_guide_cost_nodes[key] |= {name} + for name, site in guide_trace.nodes.items(): + if site["type"] == "sample": + # add the -log_prob to each non-reparam sample site upstream + for key in get_provenance(site["log_prob_sum"]): + downstream_costs[key].add((site["cond_indep_stack"], -site["log_prob"])) + downstream_guide_cost_nodes[key] |= {name} + + for node, downstream_cost in downstream_costs.items(): + guide_site = guide_trace.nodes[node] + downstream_costs[node] = downstream_cost.sum_to(guide_site["cond_indep_stack"]) + + return downstream_costs, downstream_guide_cost_nodes + + +def big_model_guide( + include_obs=True, + include_single=False, + include_inner_1=False, + flip_c23=False, + include_triple=False, + include_z1=False, +): + p0 = torch.tensor(math.exp(-0.20), requires_grad=True) + p1 = torch.tensor(math.exp(-0.33), requires_grad=True) + p2 = torch.tensor(math.exp(-0.70), requires_grad=True) + if include_triple: + with pyro.plate("plate_triple1", 6) as ind_triple1: + with pyro.plate("plate_triple2", 7) as ind_triple2: + if include_z1: + pyro.sample( + "z1", + dist.Bernoulli(p2).expand_by( + [len(ind_triple2), len(ind_triple1)] + ), + ) + with pyro.plate("plate_triple3", 9) as ind_triple3: + pyro.sample( + "z0", + dist.Bernoulli(p2).expand_by( + [len(ind_triple3), len(ind_triple2), len(ind_triple1)] + ), + ) + pyro.sample("a1", dist.Bernoulli(p0)) + if include_single: + with pyro.plate("plate_single", 5) as ind_single: + b0 = pyro.sample("b0", dist.Bernoulli(p0).expand_by([len(ind_single)])) + assert b0.shape == (5,) + with pyro.plate("plate_outer", 2) as ind_outer: + pyro.sample("b1", dist.Bernoulli(p0).expand_by([len(ind_outer)])) + if include_inner_1: + with pyro.plate("plate_inner_1", 3) as ind_inner: + pyro.sample( + "c1", dist.Bernoulli(p1).expand_by([len(ind_inner), len(ind_outer)]) + ) + if flip_c23 and not include_obs: + pyro.sample( + "c3", + dist.Bernoulli(p0).expand_by([len(ind_inner), len(ind_outer)]), + ) + pyro.sample( + "c2", + dist.Bernoulli(p1).expand_by([len(ind_inner), len(ind_outer)]), + ) + else: + pyro.sample( + "c2", + dist.Bernoulli(p0).expand_by([len(ind_inner), len(ind_outer)]), + ) + pyro.sample( + "c3", + dist.Bernoulli(p2).expand_by([len(ind_inner), len(ind_outer)]), + ) + with pyro.plate("plate_inner_2", 4) as ind_inner: + pyro.sample( + "d1", dist.Bernoulli(p0).expand_by([len(ind_inner), len(ind_outer)]) + ) + d2 = pyro.sample( + "d2", dist.Bernoulli(p2).expand_by([len(ind_inner), len(ind_outer)]) + ) + assert d2.shape == (4, 2) + if include_obs: + pyro.sample( + "obs", + dist.Bernoulli(p0).expand_by([len(ind_inner), len(ind_outer)]), + obs=torch.ones(d2.size()), + ) + + +@pytest.mark.parametrize("include_inner_1", [True, False]) +@pytest.mark.parametrize("include_single", [True, False]) +@pytest.mark.parametrize("flip_c23", [True, False]) +@pytest.mark.parametrize("include_triple", [True, False]) +@pytest.mark.parametrize("include_z1", [True, False]) +def test_compute_downstream_costs_big_model_guide_pair( + include_inner_1, include_single, flip_c23, include_triple, include_z1 +): + with TrackNonReparam(): + guide_trace = poutine.trace(big_model_guide, graph_type="dense").get_trace( + include_obs=False, + include_inner_1=include_inner_1, + include_single=include_single, + flip_c23=flip_c23, + include_triple=include_triple, + include_z1=include_z1, + ) + model_trace = poutine.trace( + poutine.replay(big_model_guide, trace=guide_trace), graph_type="dense" + ).get_trace( + include_obs=True, + include_inner_1=include_inner_1, + include_single=include_single, + flip_c23=flip_c23, + include_triple=include_triple, + include_z1=include_z1, + ) + + guide_trace = prune_subsample_sites(guide_trace) + model_trace = prune_subsample_sites(model_trace) + model_trace.compute_log_prob() + guide_trace.compute_log_prob() + non_reparam_nodes = set(guide_trace.nonreparam_stochastic_nodes) + + dc, dc_nodes = _compute_downstream_costs( + model_trace, guide_trace, non_reparam_nodes + ) + + dc_brute, dc_nodes_brute = _brute_force_compute_downstream_costs( + model_trace, guide_trace, non_reparam_nodes + ) + + dc_provenance, dc_nodes_provenance = _provenance_compute_downstream_costs( + model_trace, guide_trace + ) + + assert dc_nodes == dc_nodes_brute + + for name, nodes in dc_nodes_provenance.items(): + assert nodes.issubset(dc_nodes[name]) + assert nodes == {name} + + expected_nodes_full_model = { + "a1": {"c2", "a1", "d1", "c1", "obs", "b1", "d2", "c3", "b0"}, + "d2": {"obs", "d2"}, + "d1": {"obs", "d1", "d2"}, + "c3": {"d2", "obs", "d1", "c3"}, + "b0": {"b0", "d1", "c1", "obs", "b1", "d2", "c3", "c2"}, + "b1": {"obs", "b1", "d1", "d2", "c3", "c1", "c2"}, + "c1": {"d1", "c1", "obs", "d2", "c3", "c2"}, + "c2": {"obs", "d1", "c3", "d2", "c2"}, + } + if not include_triple and include_inner_1 and include_single and not flip_c23: + assert dc_nodes == expected_nodes_full_model + + expected_b1 = ( + model_trace.nodes["b1"]["log_prob"] - guide_trace.nodes["b1"]["log_prob"] + ) + expected_b1 += ( + model_trace.nodes["d2"]["log_prob"] - guide_trace.nodes["d2"]["log_prob"] + ).sum(0) + expected_b1 += ( + model_trace.nodes["d1"]["log_prob"] - guide_trace.nodes["d1"]["log_prob"] + ).sum(0) + expected_b1 += model_trace.nodes["obs"]["log_prob"].sum(0, keepdim=False) + if include_inner_1: + expected_b1 += ( + model_trace.nodes["c1"]["log_prob"] - guide_trace.nodes["c1"]["log_prob"] + ).sum(0) + expected_b1 += ( + model_trace.nodes["c2"]["log_prob"] - guide_trace.nodes["c2"]["log_prob"] + ).sum(0) + expected_b1 += ( + model_trace.nodes["c3"]["log_prob"] - guide_trace.nodes["c3"]["log_prob"] + ).sum(0) + assert_equal(expected_b1, dc["b1"], prec=1.0e-6) + + if include_single: + expected_b0 = ( + model_trace.nodes["b0"]["log_prob"] - guide_trace.nodes["b0"]["log_prob"] + ) + expected_b0 += ( + model_trace.nodes["b1"]["log_prob"] - guide_trace.nodes["b1"]["log_prob"] + ).sum() + expected_b0 += ( + model_trace.nodes["d2"]["log_prob"] - guide_trace.nodes["d2"]["log_prob"] + ).sum() + expected_b0 += ( + model_trace.nodes["d1"]["log_prob"] - guide_trace.nodes["d1"]["log_prob"] + ).sum() + expected_b0 += model_trace.nodes["obs"]["log_prob"].sum() + if include_inner_1: + expected_b0 += ( + model_trace.nodes["c1"]["log_prob"] + - guide_trace.nodes["c1"]["log_prob"] + ).sum() + expected_b0 += ( + model_trace.nodes["c2"]["log_prob"] + - guide_trace.nodes["c2"]["log_prob"] + ).sum() + expected_b0 += ( + model_trace.nodes["c3"]["log_prob"] + - guide_trace.nodes["c3"]["log_prob"] + ).sum() + assert_equal(expected_b0, dc["b0"], prec=1.0e-6) + assert dc["b0"].size() == (5,) + + if include_inner_1: + expected_c3 = ( + model_trace.nodes["c3"]["log_prob"] - guide_trace.nodes["c3"]["log_prob"] + ) + expected_c3 += ( + model_trace.nodes["d1"]["log_prob"] - guide_trace.nodes["d1"]["log_prob"] + ).sum(0) + expected_c3 += ( + model_trace.nodes["d2"]["log_prob"] - guide_trace.nodes["d2"]["log_prob"] + ).sum(0) + expected_c3 += model_trace.nodes["obs"]["log_prob"].sum(0) + + expected_c2 = ( + model_trace.nodes["c2"]["log_prob"] - guide_trace.nodes["c2"]["log_prob"] + ) + expected_c2 += ( + model_trace.nodes["d1"]["log_prob"] - guide_trace.nodes["d1"]["log_prob"] + ).sum(0) + expected_c2 += ( + model_trace.nodes["d2"]["log_prob"] - guide_trace.nodes["d2"]["log_prob"] + ).sum(0) + expected_c2 += model_trace.nodes["obs"]["log_prob"].sum(0) + + expected_c1 = ( + model_trace.nodes["c1"]["log_prob"] - guide_trace.nodes["c1"]["log_prob"] + ) + + if flip_c23: + expected_c3 += ( + model_trace.nodes["c2"]["log_prob"] + - guide_trace.nodes["c2"]["log_prob"] + ) + expected_c2 += model_trace.nodes["c3"]["log_prob"] + else: + expected_c2 += ( + model_trace.nodes["c3"]["log_prob"] + - guide_trace.nodes["c3"]["log_prob"] + ) + expected_c2 += ( + model_trace.nodes["c2"]["log_prob"] + - guide_trace.nodes["c2"]["log_prob"] + ) + expected_c1 += expected_c3 + + assert_equal(expected_c1, dc["c1"], prec=1.0e-6) + assert_equal(expected_c2, dc["c2"], prec=1.0e-6) + assert_equal(expected_c3, dc["c3"], prec=1.0e-6) + + expected_d1 = ( + model_trace.nodes["d1"]["log_prob"] - guide_trace.nodes["d1"]["log_prob"] + ) + expected_d1 += ( + model_trace.nodes["d2"]["log_prob"] - guide_trace.nodes["d2"]["log_prob"] + ) + expected_d1 += model_trace.nodes["obs"]["log_prob"] + + expected_d2 = ( + model_trace.nodes["d2"]["log_prob"] - guide_trace.nodes["d2"]["log_prob"] + ) + expected_d2 += model_trace.nodes["obs"]["log_prob"] + + if include_triple: + expected_z0 = ( + dc["a1"] + + model_trace.nodes["z0"]["log_prob"] + - guide_trace.nodes["z0"]["log_prob"] + ) + assert_equal(expected_z0, dc["z0"], prec=1.0e-6) + assert_equal(expected_d2, dc["d2"], prec=1.0e-6) + assert_equal(expected_d1, dc["d1"], prec=1.0e-6) + + assert dc["b1"].size() == (2,) + assert dc["d2"].size() == (4, 2) + + for k in dc: + assert guide_trace.nodes[k]["log_prob"].size() == dc[k].size() + assert_equal(dc[k], dc_brute[k]) + # expected downstream cost provenance + expected_dc_provenance = MultiFrameTensor( + ( + model_trace.nodes[k]["cond_indep_stack"], + model_trace.nodes[k]["log_prob"], + ), + ( + guide_trace.nodes[k]["cond_indep_stack"], + -guide_trace.nodes[k]["log_prob"], + ), + ).sum_to(guide_trace.nodes[k]["cond_indep_stack"]) + assert_equal(dc_provenance[k], expected_dc_provenance) + + +def diamond_model(dim): + p0 = torch.tensor(math.exp(-0.20), requires_grad=True) + p1 = torch.tensor(math.exp(-0.33), requires_grad=True) + pyro.sample("a1", dist.Bernoulli(p0)) + pyro.sample("c1", dist.Bernoulli(p1)) + for i in pyro.plate("plate", 2): + b_i = pyro.sample("b{}".format(i), dist.Bernoulli(p0 * p1)) + assert b_i.shape == () + pyro.sample("obs", dist.Bernoulli(p0), obs=torch.tensor(1.0)) + + +def diamond_guide(dim): + p0 = torch.tensor(math.exp(-0.70), requires_grad=True) + p1 = torch.tensor(math.exp(-0.43), requires_grad=True) + pyro.sample("a1", dist.Bernoulli(p0)) + for i in pyro.plate("plate", dim): + pyro.sample("b{}".format(i), dist.Bernoulli(p1)) + pyro.sample("c1", dist.Bernoulli(p0)) + + +@pytest.mark.parametrize("dim", [2, 3, 7, 11]) +def test_compute_downstream_costs_duplicates(dim): + with TrackNonReparam(): + guide_trace = poutine.trace(diamond_guide, graph_type="dense").get_trace( + dim=dim + ) + model_trace = poutine.trace( + poutine.replay(diamond_model, trace=guide_trace), graph_type="dense" + ).get_trace(dim=dim) + + guide_trace = prune_subsample_sites(guide_trace) + model_trace = prune_subsample_sites(model_trace) + model_trace.compute_log_prob() + guide_trace.compute_log_prob() + + non_reparam_nodes = set(guide_trace.nonreparam_stochastic_nodes) + + dc, dc_nodes = _compute_downstream_costs( + model_trace, guide_trace, non_reparam_nodes + ) + dc_brute, dc_nodes_brute = _brute_force_compute_downstream_costs( + model_trace, guide_trace, non_reparam_nodes + ) + + dc_provenance, dc_nodes_provenance = _provenance_compute_downstream_costs( + model_trace, guide_trace + ) + + assert dc_nodes == dc_nodes_brute + + for name, nodes in dc_nodes_provenance.items(): + assert nodes.issubset(dc_nodes[name]) + assert nodes == {name} + + expected_a1 = ( + model_trace.nodes["a1"]["log_prob"] - guide_trace.nodes["a1"]["log_prob"] + ) + for d in range(dim): + expected_a1 += model_trace.nodes["b{}".format(d)]["log_prob"] + expected_a1 -= guide_trace.nodes["b{}".format(d)]["log_prob"] + expected_a1 += ( + model_trace.nodes["c1"]["log_prob"] - guide_trace.nodes["c1"]["log_prob"] + ) + expected_a1 += model_trace.nodes["obs"]["log_prob"] + + expected_b1 = -guide_trace.nodes["b1"]["log_prob"] + for d in range(dim): + expected_b1 += model_trace.nodes["b{}".format(d)]["log_prob"] + expected_b1 += ( + model_trace.nodes["c1"]["log_prob"] - guide_trace.nodes["c1"]["log_prob"] + ) + expected_b1 += model_trace.nodes["obs"]["log_prob"] + + expected_c1 = ( + model_trace.nodes["c1"]["log_prob"] - guide_trace.nodes["c1"]["log_prob"] + ) + for d in range(dim): + expected_c1 += model_trace.nodes["b{}".format(d)]["log_prob"] + expected_c1 += model_trace.nodes["obs"]["log_prob"] + + assert_equal(expected_a1, dc["a1"], prec=1.0e-6) + assert_equal(expected_b1, dc["b1"], prec=1.0e-6) + assert_equal(expected_c1, dc["c1"], prec=1.0e-6) + + for k in dc: + assert guide_trace.nodes[k]["log_prob"].size() == dc[k].size() + assert_equal(dc[k], dc_brute[k]) + # expected downstream cost provenance + expected_dc_provenance = MultiFrameTensor( + ( + model_trace.nodes[k]["cond_indep_stack"], + model_trace.nodes[k]["log_prob"], + ), + ( + guide_trace.nodes[k]["cond_indep_stack"], + -guide_trace.nodes[k]["log_prob"], + ), + ).sum_to(guide_trace.nodes[k]["cond_indep_stack"]) + assert_equal(dc_provenance[k], expected_dc_provenance) + + +def nested_model_guide(include_obs=True, dim1=11, dim2=7): + p0 = torch.tensor(math.exp(-0.40 - include_obs * 0.2), requires_grad=True) + p1 = torch.tensor(math.exp(-0.33 - include_obs * 0.1), requires_grad=True) + pyro.sample("a1", dist.Bernoulli(p0 * p1)) + for i in pyro.plate("plate", dim1): + pyro.sample("b{}".format(i), dist.Bernoulli(p0)) + with pyro.plate("plate_{}".format(i), dim2 + i) as ind: + c_i = pyro.sample("c{}".format(i), dist.Bernoulli(p1).expand_by([len(ind)])) + assert c_i.shape == (dim2 + i,) + if include_obs: + obs_i = pyro.sample( + "obs{}".format(i), dist.Bernoulli(c_i), obs=torch.ones(c_i.size()) + ) + assert obs_i.shape == (dim2 + i,) + + +@pytest.mark.parametrize("dim1", [2, 5, 9]) +def test_compute_downstream_costs_plate_in_iplate(dim1): + with TrackNonReparam(): + guide_trace = poutine.trace(nested_model_guide, graph_type="dense").get_trace( + include_obs=False, dim1=dim1 + ) + model_trace = poutine.trace( + poutine.replay(nested_model_guide, trace=guide_trace), graph_type="dense" + ).get_trace(include_obs=True, dim1=dim1) + + guide_trace = prune_subsample_sites(guide_trace) + model_trace = prune_subsample_sites(model_trace) + model_trace.compute_log_prob() + guide_trace.compute_log_prob() + + non_reparam_nodes = set(guide_trace.nonreparam_stochastic_nodes) + + dc, dc_nodes = _compute_downstream_costs( + model_trace, guide_trace, non_reparam_nodes + ) + dc_brute, dc_nodes_brute = _brute_force_compute_downstream_costs( + model_trace, guide_trace, non_reparam_nodes + ) + + dc_provenance, dc_nodes_provenance = _provenance_compute_downstream_costs( + model_trace, guide_trace + ) + + assert dc_nodes == dc_nodes_brute + + for name, nodes in dc_nodes_provenance.items(): + assert nodes.issubset(dc_nodes[name]) + if name.startswith("c"): + i = int(name[1:]) + assert nodes == {name, f"obs{i}"} + else: + assert nodes == {name} + + expected_c1 = ( + model_trace.nodes["c1"]["log_prob"] - guide_trace.nodes["c1"]["log_prob"] + ) + expected_c1 += model_trace.nodes["obs1"]["log_prob"] + + expected_b1 = ( + model_trace.nodes["b1"]["log_prob"] - guide_trace.nodes["b1"]["log_prob"] + ) + expected_b1 += ( + model_trace.nodes["c1"]["log_prob"] - guide_trace.nodes["c1"]["log_prob"] + ).sum() + expected_b1 += model_trace.nodes["obs1"]["log_prob"].sum() + + expected_c0 = ( + model_trace.nodes["c0"]["log_prob"] - guide_trace.nodes["c0"]["log_prob"] + ) + expected_c0 += model_trace.nodes["obs0"]["log_prob"] + + expected_b0 = ( + model_trace.nodes["b0"]["log_prob"] - guide_trace.nodes["b0"]["log_prob"] + ) + expected_b0 += ( + model_trace.nodes["c0"]["log_prob"] - guide_trace.nodes["c0"]["log_prob"] + ).sum() + expected_b0 += model_trace.nodes["obs0"]["log_prob"].sum() + + assert_equal(expected_c1, dc["c1"], prec=1.0e-6) + assert_equal(expected_b1, dc["b1"], prec=1.0e-6) + assert_equal(expected_c0, dc["c0"], prec=1.0e-6) + assert_equal(expected_b0, dc["b0"], prec=1.0e-6) + + for k in dc: + assert guide_trace.nodes[k]["log_prob"].size() == dc[k].size() + assert_equal(dc[k], dc_brute[k]) + # expected downstream cost provenance + expected_dc_provenance = MultiFrameTensor( + ( + model_trace.nodes[k]["cond_indep_stack"], + model_trace.nodes[k]["log_prob"], + ), + ( + guide_trace.nodes[k]["cond_indep_stack"], + -guide_trace.nodes[k]["log_prob"], + ), + ) + if k.startswith("c"): + i = int(k[1:]) + expected_dc_provenance.add( + ( + model_trace.nodes[f"obs{i}"]["cond_indep_stack"], + model_trace.nodes[f"obs{i}"]["log_prob"], + ) + ) + expected_dc_provenance = expected_dc_provenance.sum_to( + guide_trace.nodes[k]["cond_indep_stack"] + ) + assert_equal(dc_provenance[k], expected_dc_provenance) + + +def nested_model_guide2(include_obs=True, dim1=3, dim2=2): + p0 = torch.tensor(math.exp(-0.40 - include_obs * 0.2), requires_grad=True) + p1 = torch.tensor(math.exp(-0.33 - include_obs * 0.1), requires_grad=True) + pyro.sample("a1", dist.Bernoulli(p0 * p1)) + with pyro.plate("plate1", dim1) as ind: + c = pyro.sample("c", dist.Bernoulli(p1).expand_by([len(ind)])) + assert c.shape == (dim1,) + for i in pyro.plate("plate2", dim2): + b_i = pyro.sample("b{}".format(i), dist.Bernoulli(p0).expand_by([len(ind)])) + assert b_i.shape == (dim1,) + if include_obs: + obs_i = pyro.sample( + "obs{}".format(i), dist.Bernoulli(b_i), obs=torch.ones(b_i.size()) + ) + assert obs_i.shape == (dim1,) + + +@pytest.mark.parametrize("dim1", [2, 5]) +@pytest.mark.parametrize("dim2", [3, 4]) +def test_compute_downstream_costs_iplate_in_plate(dim1, dim2): + with TrackNonReparam(): + guide_trace = poutine.trace(nested_model_guide2, graph_type="dense").get_trace( + include_obs=False, dim1=dim1, dim2=dim2 + ) + model_trace = poutine.trace( + poutine.replay(nested_model_guide2, trace=guide_trace), graph_type="dense" + ).get_trace(include_obs=True, dim1=dim1, dim2=dim2) + + guide_trace = prune_subsample_sites(guide_trace) + model_trace = prune_subsample_sites(model_trace) + model_trace.compute_log_prob() + guide_trace.compute_log_prob() + + non_reparam_nodes = set(guide_trace.nonreparam_stochastic_nodes) + dc, dc_nodes = _compute_downstream_costs( + model_trace, guide_trace, non_reparam_nodes + ) + dc_brute, dc_nodes_brute = _brute_force_compute_downstream_costs( + model_trace, guide_trace, non_reparam_nodes + ) + dc_provenance, dc_nodes_provenance = _provenance_compute_downstream_costs( + model_trace, guide_trace + ) + + assert dc_nodes == dc_nodes_brute + + for name, nodes in dc_nodes_provenance.items(): + assert nodes.issubset(dc_nodes[name]) + if name.startswith("b"): + i = int(name[1:]) + assert nodes == {name, f"obs{i}"} + else: + assert nodes == {name} + + for k in dc: + assert guide_trace.nodes[k]["log_prob"].size() == dc[k].size() + assert_equal(dc[k], dc_brute[k]) + # expected downstream cost provenance + expected_dc_provenance = MultiFrameTensor( + ( + model_trace.nodes[k]["cond_indep_stack"], + model_trace.nodes[k]["log_prob"], + ), + ( + guide_trace.nodes[k]["cond_indep_stack"], + -guide_trace.nodes[k]["log_prob"], + ), + ) + if k.startswith("b"): + i = int(k[1:]) + expected_dc_provenance.add( + ( + model_trace.nodes[f"obs{i}"]["cond_indep_stack"], + model_trace.nodes[f"obs{i}"]["log_prob"], + ) + ) + expected_dc_provenance = expected_dc_provenance.sum_to( + guide_trace.nodes[k]["cond_indep_stack"] + ) + assert_equal(dc_provenance[k], expected_dc_provenance) + + expected_b1 = ( + model_trace.nodes["b1"]["log_prob"] - guide_trace.nodes["b1"]["log_prob"] + ) + expected_b1 += model_trace.nodes["obs1"]["log_prob"] + assert_equal(expected_b1, dc["b1"]) + + expected_c = model_trace.nodes["c"]["log_prob"] - guide_trace.nodes["c"]["log_prob"] + for i in range(dim2): + expected_c += ( + model_trace.nodes["b{}".format(i)]["log_prob"] + - guide_trace.nodes["b{}".format(i)]["log_prob"] + ) + expected_c += model_trace.nodes["obs{}".format(i)]["log_prob"] + assert_equal(expected_c, dc["c"]) + + expected_a1 = ( + model_trace.nodes["a1"]["log_prob"] - guide_trace.nodes["a1"]["log_prob"] + ) + expected_a1 += expected_c.sum() + assert_equal(expected_a1, dc["a1"]) + + +def plate_reuse_model_guide(include_obs=True, dim1=3, dim2=2): + p0 = torch.tensor(math.exp(-0.40 - include_obs * 0.2), requires_grad=True) + p1 = torch.tensor(math.exp(-0.33 - include_obs * 0.1), requires_grad=True) + pyro.sample("a1", dist.Bernoulli(p0 * p1)) + my_plate1 = pyro.plate("plate1", dim1) + my_plate2 = pyro.plate("plate2", dim2) + with my_plate1 as ind1: + with my_plate2 as ind2: + pyro.sample("c1", dist.Bernoulli(p1).expand_by([len(ind2), len(ind1)])) + pyro.sample("b1", dist.Bernoulli(p0 * p1)) + with my_plate2 as ind2: + with my_plate1 as ind1: + c2 = pyro.sample("c2", dist.Bernoulli(p1).expand_by([len(ind2), len(ind1)])) + if include_obs: + pyro.sample("obs", dist.Bernoulli(c2), obs=torch.ones(c2.size())) + + +@pytest.mark.parametrize("dim1", [2, 5]) +@pytest.mark.parametrize("dim2", [3, 4]) +def test_compute_downstream_costs_plate_reuse(dim1, dim2): + with TrackNonReparam(): + guide_trace = poutine.trace( + plate_reuse_model_guide, graph_type="dense" + ).get_trace(include_obs=False, dim1=dim1, dim2=dim2) + model_trace = poutine.trace( + poutine.replay(plate_reuse_model_guide, trace=guide_trace), + graph_type="dense", + ).get_trace(include_obs=True, dim1=dim1, dim2=dim2) + + guide_trace = prune_subsample_sites(guide_trace) + model_trace = prune_subsample_sites(model_trace) + model_trace.compute_log_prob() + guide_trace.compute_log_prob() + + non_reparam_nodes = set(guide_trace.nonreparam_stochastic_nodes) + dc, dc_nodes = _compute_downstream_costs( + model_trace, guide_trace, non_reparam_nodes + ) + dc_brute, dc_nodes_brute = _brute_force_compute_downstream_costs( + model_trace, guide_trace, non_reparam_nodes + ) + dc_provenance, dc_nodes_provenance = _provenance_compute_downstream_costs( + model_trace, guide_trace + ) + + assert dc_nodes == dc_nodes_brute + + for name, nodes in dc_nodes_provenance.items(): + assert nodes.issubset(dc_nodes[name]) + if name == "c2": + assert nodes == {"c2", "obs"} + else: + assert nodes == {name} + + for k in dc: + assert guide_trace.nodes[k]["log_prob"].size() == dc[k].size() + assert_equal(dc[k], dc_brute[k]) + # expected downstream cost provenance + expected_dc_provenance = MultiFrameTensor( + ( + model_trace.nodes[k]["cond_indep_stack"], + model_trace.nodes[k]["log_prob"], + ), + ( + guide_trace.nodes[k]["cond_indep_stack"], + -guide_trace.nodes[k]["log_prob"], + ), + ) + if k == "c2": + expected_dc_provenance.add( + ( + model_trace.nodes["obs"]["cond_indep_stack"], + model_trace.nodes["obs"]["log_prob"], + ) + ) + expected_dc_provenance = expected_dc_provenance.sum_to( + guide_trace.nodes[k]["cond_indep_stack"] + ) + assert_equal(dc_provenance[k], expected_dc_provenance) + + expected_c1 = ( + model_trace.nodes["c1"]["log_prob"] - guide_trace.nodes["c1"]["log_prob"] + ) + expected_c1 += ( + model_trace.nodes["b1"]["log_prob"] - guide_trace.nodes["b1"]["log_prob"] + ).sum() + expected_c1 += ( + model_trace.nodes["c2"]["log_prob"] - guide_trace.nodes["c2"]["log_prob"] + ) + expected_c1 += model_trace.nodes["obs"]["log_prob"] + assert_equal(expected_c1, dc["c1"]) diff --git a/pyro/source/tests/infer/test_conjugate_gradients.py b/pyro/source/tests/infer/test_conjugate_gradients.py new file mode 100644 index 0000000000000000000000000000000000000000..4d5ef116b8670fe22e120731ba2c774e131ce885 --- /dev/null +++ b/pyro/source/tests/infer/test_conjugate_gradients.py @@ -0,0 +1,43 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pyro +from pyro.infer.tracegraph_elbo import TraceGraph_ELBO +from tests.common import assert_equal +from tests.integration_tests.test_conjugate_gaussian_models import GaussianChain + + +class ConjugateChainGradientTests(GaussianChain): + def test_gradients(self): + for N in [3, 5]: + for reparameterized in [True, False]: + self.do_test_gradients(N, reparameterized) + + def do_test_gradients(self, N, reparameterized): + pyro.clear_param_store() + self.setup_chain(N) + + elbo = TraceGraph_ELBO( + num_particles=100000, vectorize_particles=True, max_plate_nesting=1 + ) + elbo.loss_and_grads(self.model, self.guide, reparameterized=reparameterized) + + for i in range(1, N + 1): + for param_prefix in ["loc_q_%d", "log_sig_q_%d", "kappa_q_%d"]: + if i == N and param_prefix == "kappa_q_%d": + continue + actual_grad = pyro.param(param_prefix % i).grad + assert_equal( + actual_grad, + 0.0 * actual_grad, + prec=0.10, + msg="".join( + [ + "parameter %s%d" % (param_prefix[:-2], i), + "\nexpected = zero vector", + "\n actual = {}".format( + actual_grad.detach().cpu().numpy() + ), + ] + ), + ) diff --git a/pyro/source/tests/infer/test_csis.py b/pyro/source/tests/infer/test_csis.py new file mode 100644 index 0000000000000000000000000000000000000000..5c555ad440b1b9106b30c65a6ed7cd18c97f6593 --- /dev/null +++ b/pyro/source/tests/infer/test_csis.py @@ -0,0 +1,69 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch +import torch.nn as nn + +import pyro +import pyro.distributions as dist +import pyro.infer +import pyro.optim +from tests.common import assert_equal, assert_not_equal + + +def model(observations={"y1": 0, "y2": 0}): + x = pyro.sample("x", dist.Normal(torch.tensor(0.0), torch.tensor(5**0.5))) + pyro.sample("y1", dist.Normal(x, torch.tensor(2**0.5)), obs=observations["y1"]) + pyro.sample("y2", dist.Normal(x, torch.tensor(2**0.5)), obs=observations["y2"]) + return x + + +class Guide(nn.Module): + def __init__(self): + super().__init__() + self.linear = torch.nn.Linear(1, 1, bias=False) + self.std = torch.nn.Parameter(torch.tensor(1.0)) + + def forward(self, observations={"y1": 0, "y2": 0}): + pyro.module("guide", self) + summed_obs = observations["y1"] + observations["y2"] + mean = self.linear(summed_obs.view(1, 1))[0, 0] + pyro.sample("x", dist.Normal(mean, self.std)) + + +@pytest.mark.init(rng_seed=7) +def test_csis_sampling(): + pyro.clear_param_store() + guide = Guide() + csis = pyro.infer.CSIS(model, guide, pyro.optim.Adam({}), num_inference_samples=500) + # observations chosen so that proposal distribution and true posterior will both have zero mean + posterior = csis.run({"y1": torch.tensor(-1.0), "y2": torch.tensor(1.0)}) + assert_equal(len(posterior.exec_traces), 500) + marginal = pyro.infer.EmpiricalMarginal(posterior, "x") + assert_equal(marginal.mean, torch.tensor(0.0), prec=0.1) + + +@pytest.mark.init(rng_seed=7) +def test_csis_parameter_update(): + pyro.clear_param_store() + guide = Guide() + initial_parameters = {k: v.item() for k, v in guide.named_parameters()} + csis = pyro.infer.CSIS(model, guide, pyro.optim.Adam({"lr": 1e-2})) + csis.step() + updated_parameters = {k: v.item() for k, v in guide.named_parameters()} + for k, init_v in initial_parameters.items(): + assert_not_equal(init_v, updated_parameters[k]) + + +@pytest.mark.init(rng_seed=7) +def test_csis_validation_batch(): + pyro.clear_param_store() + guide = Guide() + csis = pyro.infer.CSIS(model, guide, pyro.optim.Adam({}), validation_batch_size=5) + init_loss_1 = csis.validation_loss() + init_loss_2 = csis.validation_loss() + csis.step() + next_loss = csis.validation_loss() + assert_equal(init_loss_1, init_loss_2) + assert_not_equal(init_loss_1, next_loss) diff --git a/pyro/source/tests/infer/test_discrete.py b/pyro/source/tests/infer/test_discrete.py new file mode 100644 index 0000000000000000000000000000000000000000..416ecba73ea680a2ba7525092ada81d3a9067d8a --- /dev/null +++ b/pyro/source/tests/infer/test_discrete.py @@ -0,0 +1,423 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging +import math +import warnings + +import pytest +import torch +from torch.autograd import grad + +import pyro +import pyro.distributions as dist +from pyro import poutine +from pyro.infer import TraceEnum_ELBO +from pyro.infer.discrete import TraceEnumSample_ELBO, infer_discrete +from pyro.infer.enum import config_enumerate +from tests.common import assert_equal + +logger = logging.getLogger(__name__) + + +def elbo_infer_discrete(model, first_available_dim, temperature): + """ + Wrapper around ``TraceEnumSample_ELBO`` to test agreement with + ``TraceEnum_ELBO`` and then return ``.sample_saved()``. + """ + assert temperature == 1 + max_plate_nesting = -first_available_dim - 1 + expected_elbo = TraceEnum_ELBO(max_plate_nesting=max_plate_nesting) + actual_elbo = TraceEnumSample_ELBO(max_plate_nesting=max_plate_nesting) + + def empty_guide(*args, **kwargs): + pass + + def inferred_model(*args, **kwargs): + with poutine.block(): + expected_loss = expected_elbo.loss(model, empty_guide, *args, **kwargs) + actual_loss = actual_elbo.loss(model, empty_guide, *args, **kwargs) + assert_equal(actual_loss, expected_loss) + return actual_elbo.sample_saved() + + return inferred_model + + +def log_mean_prob(trace, particle_dim): + """ + Marginalizes out particle_dim from a trace. + """ + assert particle_dim < 0 + trace.compute_log_prob() + total = 0.0 + for node in trace.nodes.values(): + if node["type"] == "sample" and type(node["fn"]).__name__ != "_Subsample": + log_prob = node["log_prob"] + assert log_prob.dim() == -particle_dim + num_particles = log_prob.size(0) + total = total + log_prob.reshape(num_particles, -1).sum(-1) + return total.logsumexp(0) - math.log(num_particles) + + +@pytest.mark.parametrize( + "infer,temperature", + [ + (infer_discrete, 0), + (infer_discrete, 1), + (elbo_infer_discrete, 1), + ], + ids=["map", "sample", "sample-elbo"], +) +@pytest.mark.parametrize("plate_size", [2]) +def test_plate_smoke(infer, temperature, plate_size): + # +-----------------+ + # z1 --|--> z2 ---> x2 | + # | N | for N in {1,2} + # +-----------------+ + + @config_enumerate + def model(): + p = pyro.param("p", torch.tensor([0.25, 0.75])) + q = pyro.param("q", torch.tensor([[0.25, 0.75], [0.75, 0.25]])) + loc = pyro.param("loc", torch.tensor([-1.0, 1.0])) + z1 = pyro.sample("z1", dist.Categorical(p)) + with pyro.plate("plate", plate_size): + z2 = pyro.sample("z2", dist.Categorical(q[z1])) + pyro.sample("x2", dist.Normal(loc[z2], 1.0), obs=torch.ones(plate_size)) + + first_available_dim = -2 + infer(model, first_available_dim, temperature)() + + +@pytest.mark.parametrize( + "infer,temperature", + [ + (infer_discrete, 0), + (infer_discrete, 1), + (elbo_infer_discrete, 1), + ], + ids=["map", "sample", "sample-elbo"], +) +def test_distribution_1(infer, temperature): + # +-------+ + # z --|--> x | + # +-------+ + num_particles = 10000 + data = torch.tensor([1.0, 2.0, 3.0]) + + @config_enumerate + def model(num_particles=1, z=None): + p = pyro.param("p", torch.tensor(0.25)) + with pyro.plate("num_particles", num_particles, dim=-2): + z = pyro.sample("z", dist.Bernoulli(p), obs=z) + logger.info("z.shape = {}".format(z.shape)) + with pyro.plate("data", 3): + pyro.sample("x", dist.Normal(z, 1.0), obs=data) + + first_available_dim = -3 + sampled_model = infer(model, first_available_dim, temperature) + sampled_trace = poutine.trace(sampled_model).get_trace(num_particles) + conditioned_traces = { + z: poutine.trace(model).get_trace(z=torch.tensor(z)) for z in [0.0, 1.0] + } + + # Check posterior over z. + actual_z_mean = sampled_trace.nodes["z"]["value"].mean() + if temperature: + expected_z_mean = 1 / ( + 1 + + ( + conditioned_traces[0].log_prob_sum() + - conditioned_traces[1].log_prob_sum() + ).exp() + ) + else: + expected_z_mean = ( + conditioned_traces[1].log_prob_sum() > conditioned_traces[0].log_prob_sum() + ).float() + assert_equal(actual_z_mean, expected_z_mean, prec=1e-2) + + +@pytest.mark.parametrize( + "infer,temperature", + [ + (infer_discrete, 0), + (infer_discrete, 1), + (elbo_infer_discrete, 1), + ], + ids=["map", "sample", "sample-elbo"], +) +def test_distribution_2(infer, temperature): + # +--------+ + # z1 --|--> x1 | + # | | | + # V | | + # z2 --|--> x2 | + # +--------+ + num_particles = 10000 + data = torch.tensor([[-1.0, -1.0, 0.0], [-1.0, 1.0, 1.0]]) + + @config_enumerate + def model(num_particles=1, z1=None, z2=None): + p = pyro.param("p", torch.tensor([[0.25, 0.75], [0.1, 0.9]])) + loc = pyro.param("loc", torch.tensor([-1.0, 1.0])) + with pyro.plate("num_particles", num_particles, dim=-2): + z1 = pyro.sample("z1", dist.Categorical(p[0]), obs=z1) + z2 = pyro.sample("z2", dist.Categorical(p[z1]), obs=z2) + logger.info("z1.shape = {}".format(z1.shape)) + logger.info("z2.shape = {}".format(z2.shape)) + with pyro.plate("data", 3): + pyro.sample("x1", dist.Normal(loc[z1], 1.0), obs=data[0]) + pyro.sample("x2", dist.Normal(loc[z2], 1.0), obs=data[1]) + + first_available_dim = -3 + sampled_model = infer(model, first_available_dim, temperature) + sampled_trace = poutine.trace(sampled_model).get_trace(num_particles) + conditioned_traces = { + (z1, z2): poutine.trace(model).get_trace( + z1=torch.tensor(z1), z2=torch.tensor(z2) + ) + for z1 in [0, 1] + for z2 in [0, 1] + } + + # Check joint posterior over (z1, z2). + actual_probs = torch.empty(2, 2) + expected_probs = torch.empty(2, 2) + for (z1, z2), tr in conditioned_traces.items(): + expected_probs[z1, z2] = tr.log_prob_sum().exp() + actual_probs[z1, z2] = ( + ( + (sampled_trace.nodes["z1"]["value"] == z1) + & (sampled_trace.nodes["z2"]["value"] == z2) + ) + .float() + .mean() + ) + if temperature: + expected_probs = expected_probs / expected_probs.sum() + else: + argmax = expected_probs.reshape(-1).max(0)[1] + expected_probs[:] = 0 + expected_probs.reshape(-1)[argmax] = 1 + assert_equal(expected_probs, actual_probs, prec=1e-2) + + +@pytest.mark.parametrize( + "infer,temperature", + [ + (infer_discrete, 0), + (infer_discrete, 1), + (elbo_infer_discrete, 1), + ], + ids=["map", "sample", "sample-elbo"], +) +def test_distribution_3(infer, temperature): + # +---------+ +---------------+ + # z1 --|--> x1 | | z2 ---> x2 | + # | 3 | | 2 | + # +---------+ +---------------+ + num_particles = 10000 + data = [torch.tensor([-1.0, -1.0, 0.0]), torch.tensor([-1.0, 1.0])] + + @config_enumerate + def model(num_particles=1, z1=None, z2=None): + p = pyro.param("p", torch.tensor([0.25, 0.75])) + loc = pyro.param("loc", torch.tensor([-1.0, 1.0])) + with pyro.plate("num_particles", num_particles, dim=-2): + z1 = pyro.sample("z1", dist.Categorical(p), obs=z1) + with pyro.plate("data[0]", 3): + pyro.sample("x1", dist.Normal(loc[z1], 1.0), obs=data[0]) + with pyro.plate("data[1]", 2): + z2 = pyro.sample("z2", dist.Categorical(p), obs=z2) + pyro.sample("x2", dist.Normal(loc[z2], 1.0), obs=data[1]) + + first_available_dim = -3 + sampled_model = infer(model, first_available_dim, temperature) + sampled_trace = poutine.trace(sampled_model).get_trace(num_particles) + conditioned_traces = { + (z1, z20, z21): poutine.trace(model).get_trace( + z1=torch.tensor(z1), z2=torch.tensor([z20, z21]) + ) + for z1 in [0, 1] + for z20 in [0, 1] + for z21 in [0, 1] + } + + # Check joint posterior over (z1, z2[0], z2[1]). + actual_probs = torch.empty(2, 2, 2) + expected_probs = torch.empty(2, 2, 2) + for (z1, z20, z21), tr in conditioned_traces.items(): + expected_probs[z1, z20, z21] = tr.log_prob_sum().exp() + actual_probs[z1, z20, z21] = ( + ( + (sampled_trace.nodes["z1"]["value"] == z1) + & (sampled_trace.nodes["z2"]["value"][..., :1] == z20) + & (sampled_trace.nodes["z2"]["value"][..., 1:] == z21) + ) + .float() + .mean() + ) + if temperature: + expected_probs = expected_probs / expected_probs.sum() + else: + argmax = expected_probs.reshape(-1).max(0)[1] + expected_probs[:] = 0 + expected_probs.reshape(-1)[argmax] = 1 + assert_equal(expected_probs.reshape(-1), actual_probs.reshape(-1), prec=1e-2) + + +@pytest.mark.parametrize( + "infer,temperature", + [ + (infer_discrete, 0), + (infer_discrete, 1), + (elbo_infer_discrete, 1), + ], + ids=["map", "sample", "sample-elbo"], +) +def test_distribution_masked(infer, temperature): + # +-------+ + # z --|--> x | + # +-------+ + num_particles = 10000 + data = torch.tensor([1.0, 2.0, 3.0]) + mask = torch.tensor([True, False, False]) + + @config_enumerate + def model(num_particles=1, z=None): + p = pyro.param("p", torch.tensor(0.25)) + with pyro.plate("num_particles", num_particles, dim=-2): + z = pyro.sample("z", dist.Bernoulli(p), obs=z) + logger.info("z.shape = {}".format(z.shape)) + with pyro.plate("data", 3), poutine.mask(mask=mask): + pyro.sample("x", dist.Normal(z, 1.0), obs=data) + + first_available_dim = -3 + sampled_model = infer(model, first_available_dim, temperature) + sampled_trace = poutine.trace(sampled_model).get_trace(num_particles) + conditioned_traces = { + z: poutine.trace(model).get_trace(z=torch.tensor(z)) for z in [0.0, 1.0] + } + + # Check posterior over z. + actual_z_mean = sampled_trace.nodes["z"]["value"].mean() + if temperature: + expected_z_mean = 1 / ( + 1 + + ( + conditioned_traces[0].log_prob_sum() + - conditioned_traces[1].log_prob_sum() + ).exp() + ) + else: + expected_z_mean = ( + conditioned_traces[1].log_prob_sum() > conditioned_traces[0].log_prob_sum() + ).float() + assert_equal(actual_z_mean, expected_z_mean, prec=1e-2) + + +@pytest.mark.parametrize("length", [1, 2, 10, 100]) +@pytest.mark.parametrize( + "infer,temperature", + [ + (infer_discrete, 0), + (infer_discrete, 1), + (elbo_infer_discrete, 1), + ], + ids=["map", "sample", "sample-elbo"], +) +def test_hmm_smoke(infer, temperature, length): + # This should match the example in the infer_discrete docstring. + def hmm(data, hidden_dim=10): + transition = 0.3 / hidden_dim + 0.7 * torch.eye(hidden_dim) + means = torch.arange(float(hidden_dim)) + states = [0] + for t in pyro.markov(range(len(data))): + states.append( + pyro.sample( + "states_{}".format(t), dist.Categorical(transition[states[-1]]) + ) + ) + data[t] = pyro.sample( + "obs_{}".format(t), dist.Normal(means[states[-1]], 1.0), obs=data[t] + ) + return states, data + + true_states, data = hmm([None] * length) + assert len(data) == length + assert len(true_states) == 1 + len(data) + + decoder = infer( + config_enumerate(hmm), first_available_dim=-1, temperature=temperature + ) + inferred_states, _ = decoder(data) + assert len(inferred_states) == len(true_states) + + logger.info("true states: {}".format(list(map(int, true_states)))) + logger.info("inferred states: {}".format(list(map(int, inferred_states)))) + + +@pytest.mark.xfail(reason="infer_discrete log_prob is incorrect") +@pytest.mark.parametrize("nderivs", [0, 1], ids=["value", "grad"]) +def test_prob(nderivs): + # +-------+ + # z --|--> x | + # +-------+ + num_particles = 10000 + data = torch.tensor([0.5, 1.0, 1.5]) + p = pyro.param("p", torch.tensor(0.25)) + + @config_enumerate + def model(num_particles): + p = pyro.param("p") + with pyro.plate("num_particles", num_particles, dim=-2): + z = pyro.sample("z", dist.Bernoulli(p)) + with pyro.plate("data", 3): + pyro.sample("x", dist.Normal(z, 1.0), obs=data) + + def guide(num_particles): + pass + + elbo = TraceEnum_ELBO(max_plate_nesting=2) + expected_logprob = -elbo.differentiable_loss(model, guide, num_particles=1) + + posterior_model = infer_discrete( + config_enumerate(model, "parallel"), first_available_dim=-3 + ) + posterior_trace = poutine.trace(posterior_model).get_trace( + num_particles=num_particles + ) + actual_logprob = log_mean_prob(posterior_trace, particle_dim=-2) + + if nderivs == 0: + assert_equal(expected_logprob, actual_logprob, prec=1e-3) + elif nderivs == 1: + expected_grad = grad(expected_logprob, [p])[0] + actual_grad = grad(actual_logprob, [p])[0] + assert_equal(expected_grad, actual_grad, prec=1e-3) + + +def test_warning(): + data = torch.randn(4) + + def model(): + x = pyro.sample("x", dist.Categorical(torch.ones(3))) + with pyro.plate("data", len(data)): + pyro.sample("obs", dist.Normal(x.float(), 1), obs=data) + + model_1 = infer_discrete(model, first_available_dim=-2) + model_2 = infer_discrete( + model, first_available_dim=-2, strict_enumeration_warning=False + ) + model_3 = infer_discrete(config_enumerate(model), first_available_dim=-2) + + # model_1 should raise warnings. + with warnings.catch_warnings(record=True) as w: + warnings.simplefilter("always") + model_1() + assert w, "No warnings were raised" + + # model_2 and model_3 should both be valid. + model_2() + model_3() diff --git a/pyro/source/tests/infer/test_elbo_mapdata.py b/pyro/source/tests/infer/test_elbo_mapdata.py new file mode 100644 index 0000000000000000000000000000000000000000..17ce72b1239c8c1e504910c30c655b450eedfc1c --- /dev/null +++ b/pyro/source/tests/infer/test_elbo_mapdata.py @@ -0,0 +1,129 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging + +import pytest +import torch + +import pyro +import pyro.distributions as dist +import pyro.optim as optim +from pyro.infer import SVI, TraceGraph_ELBO +from tests.common import assert_equal + +logger = logging.getLogger(__name__) + + +@pytest.mark.stage("integration", "integration_batch_1") +@pytest.mark.init(rng_seed=161) +@pytest.mark.parametrize( + "map_type,batch_size,n_steps,lr", + [ + ("iplate", 3, 7000, 0.0008), + ("iplate", 8, 100, 0.018), + ("iplate", None, 100, 0.013), + ("range", 3, 100, 0.018), + ("range", 8, 100, 0.01), + ("range", None, 100, 0.011), + ("plate", 3, 7000, 0.0008), + ("plate", 8, 7000, 0.0008), + ("plate", None, 7000, 0.0008), + ], +) +def test_elbo_mapdata(map_type, batch_size, n_steps, lr): + # normal-normal: known covariance + lam0 = torch.tensor([0.1, 0.1]) # precision of prior + loc0 = torch.tensor([0.0, 0.5]) # prior mean + # known precision of observation noise + lam = torch.tensor([6.0, 4.0]) + data = [] + sum_data = torch.zeros(2) + + def add_data_point(x, y): + data.append(torch.tensor([x, y])) + sum_data.data.add_(data[-1].data) + + add_data_point(0.1, 0.21) + add_data_point(0.16, 0.11) + add_data_point(0.06, 0.31) + add_data_point(-0.01, 0.07) + add_data_point(0.23, 0.25) + add_data_point(0.19, 0.18) + add_data_point(0.09, 0.41) + add_data_point(-0.04, 0.17) + + data = torch.stack(data) + n_data = torch.tensor([float(len(data))]) + analytic_lam_n = lam0 + n_data.expand_as(lam) * lam + analytic_log_sig_n = -0.5 * torch.log(analytic_lam_n) + analytic_loc_n = sum_data * (lam / analytic_lam_n) + loc0 * (lam0 / analytic_lam_n) + + logger.debug( + "DOING ELBO TEST [bs = {}, map_type = {}]".format(batch_size, map_type) + ) + pyro.clear_param_store() + + def model(): + loc_latent = pyro.sample( + "loc_latent", dist.Normal(loc0, torch.pow(lam0, -0.5)).to_event(1) + ) + if map_type == "iplate": + for i in pyro.plate("aaa", len(data), batch_size): + pyro.sample( + "obs_%d" % i, + dist.Normal(loc_latent, torch.pow(lam, -0.5)).to_event(1), + obs=data[i], + ), + elif map_type == "plate": + with pyro.plate("aaa", len(data), batch_size) as ind: + pyro.sample( + "obs", + dist.Normal(loc_latent, torch.pow(lam, -0.5)).to_event(1), + obs=data[ind], + ), + else: + for i, x in enumerate(data): + pyro.sample( + "obs_%d" % i, + dist.Normal(loc_latent, torch.pow(lam, -0.5)).to_event(1), + obs=x, + ) + return loc_latent + + def guide(): + loc_q = pyro.param( + "loc_q", analytic_loc_n.detach().clone() + torch.tensor([-0.18, 0.23]) + ) + log_sig_q = pyro.param( + "log_sig_q", + analytic_log_sig_n.detach().clone() - torch.tensor([-0.18, 0.23]), + ) + sig_q = torch.exp(log_sig_q) + pyro.sample("loc_latent", dist.Normal(loc_q, sig_q).to_event(1)) + if map_type == "iplate" or map_type is None: + for i in pyro.plate("aaa", len(data), batch_size): + pass + elif map_type == "plate": + # dummy plate to do subsampling for observe + with pyro.plate("aaa", len(data), batch_size): + pass + else: + pass + + adam = optim.Adam({"lr": lr}) + svi = SVI(model, guide, adam, loss=TraceGraph_ELBO()) + + for k in range(n_steps): + svi.step() + + loc_error = torch.sum(torch.pow(analytic_loc_n - pyro.param("loc_q"), 2.0)) + log_sig_error = torch.sum( + torch.pow(analytic_log_sig_n - pyro.param("log_sig_q"), 2.0) + ) + + if k % 500 == 0: + logger.debug("errors - {}, {}".format(loc_error, log_sig_error)) + + assert_equal(loc_error.item(), 0, prec=0.05) + assert_equal(log_sig_error.item(), 0, prec=0.06) diff --git a/pyro/source/tests/infer/test_enum.py b/pyro/source/tests/infer/test_enum.py new file mode 100644 index 0000000000000000000000000000000000000000..be176c9ca9c88fe19417572df7d0bc48fc0bb0f7 --- /dev/null +++ b/pyro/source/tests/infer/test_enum.py @@ -0,0 +1,4102 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging +import math +import os +import timeit +from collections import defaultdict +from contextlib import ExitStack # python 3 + +import pytest +import torch +from torch.autograd import grad +from torch.distributions import constraints, kl_divergence + +import pyro +import pyro.distributions as dist +import pyro.optim +import pyro.poutine as poutine +from pyro import infer +from pyro.distributions.testing.rejection_gamma import ShapeAugmentedGamma +from pyro.infer import SVI, config_enumerate +from pyro.infer.enum import iter_discrete_traces +from pyro.infer.importance import vectorized_importance_weights +from pyro.infer.trace_elbo import Trace_ELBO +from pyro.infer.traceenum_elbo import TraceEnum_ELBO +from pyro.infer.util import LAST_CACHE_SIZE +from pyro.ops.indexing import Vindex +from pyro.util import torch_isnan +from tests.common import assert_equal, skipif_param + +logger = logging.getLogger(__name__) + + +def _skip_cuda(*args): + return skipif_param( + *args, + condition="CUDA_TEST" in os.environ, + reason="https://github.com/pyro-ppl/pyro/issues/1380" + ) + + +@pytest.mark.parametrize("depth", [1, 2, 3, 4, 5]) +@pytest.mark.parametrize("graph_type", ["flat", "dense"]) +def test_iter_discrete_traces_order(depth, graph_type): + @config_enumerate(default="sequential") + def model(depth): + for i in range(depth): + pyro.sample("x{}".format(i), dist.Bernoulli(0.5)) + + traces = list(iter_discrete_traces(graph_type, model, depth)) + + assert len(traces) == 2**depth + for trace in traces: + sites = [name for name, site in trace.nodes.items() if site["type"] == "sample"] + assert sites == ["x{}".format(i) for i in range(depth)] + + +@pytest.mark.parametrize("graph_type", ["flat", "dense"]) +def test_iter_discrete_traces_scalar(graph_type): + pyro.clear_param_store() + + @config_enumerate(default="sequential") + def model(): + p = pyro.param("p", torch.tensor(0.05)) + probs = pyro.param("probs", torch.tensor([0.1, 0.2, 0.3, 0.4])) + x = pyro.sample("x", dist.Bernoulli(p)) + y = pyro.sample("y", dist.Categorical(probs)) + return dict(x=x, y=y) + + traces = list(iter_discrete_traces(graph_type, model)) + + probs = pyro.param("probs") + assert len(traces) == 2 * len(probs) + + +@pytest.mark.parametrize("graph_type", ["flat", "dense"]) +@pytest.mark.parametrize("expand", [False, True]) +def test_iter_discrete_traces_vector(expand, graph_type): + pyro.clear_param_store() + + @config_enumerate(default="sequential", expand=expand) + def model(): + p = pyro.param("p", torch.tensor([0.05, 0.15])) + probs = pyro.param( + "probs", torch.tensor([[0.1, 0.2, 0.3, 0.4], [0.4, 0.3, 0.2, 0.1]]) + ) + with pyro.plate("plate", 2): + x = pyro.sample("x", dist.Bernoulli(p)) + y = pyro.sample("y", dist.Categorical(probs)) + if expand: + assert x.size() == (2,) + assert y.size() == (2,) + else: + assert x.shape == (1,) + assert y.shape == (1,) + return dict(x=x, y=y) + + traces = list(iter_discrete_traces(graph_type, model)) + + probs = pyro.param("probs") + assert len(traces) == 2 * probs.size(-1) + + +def test_enumerate_sequential_guide(): + values = [] + + def model(): + x = pyro.sample("x", dist.Bernoulli(0.5)) + values.append(float(x)) + + def guide(): + pyro.sample("x", dist.Bernoulli(0.5), infer={"enumerate": "sequential"}) + + elbo = TraceEnum_ELBO(max_plate_nesting=0) + elbo.loss(model, guide) + assert len(values) == 2, values + + +def test_enumerate_sequential_model(): + def model(): + pyro.sample("x", dist.Bernoulli(0.5), infer={"enumerate": "sequential"}) + + def guide(): + pass + + with pytest.raises(NotImplementedError): + elbo = TraceEnum_ELBO(max_plate_nesting=0) + elbo.loss(model, guide) + + +# The usual dist.Bernoulli avoids NANs by clamping log prob. This unsafe version +# allows us to test additional NAN avoidance in _compute_dice_elbo(). +class UnsafeBernoulli(dist.Bernoulli): + def log_prob(self, value): + i = value.long() + j = torch.arange(len(self.probs), dtype=torch.long) + return torch.stack([(-self.probs).log1p(), self.probs.log()])[i, j] + + +@pytest.mark.parametrize("sample_shape", [(), (2,), (3, 4)]) +def test_unsafe_bernoulli(sample_shape): + logits = torch.randn(10) + p = dist.Bernoulli(logits=logits) + q = UnsafeBernoulli(logits=logits) + x = p.sample(sample_shape) + assert_equal(p.log_prob(x), q.log_prob(x)) + + +@pytest.mark.parametrize("enumerate1", [None, "sequential", "parallel"]) +def test_avoid_nan(enumerate1): + pyro.clear_param_store() + + def model(): + p = torch.tensor([0.0, 0.5, 1.0]) + with pyro.plate("batch", 3): + pyro.sample("z", UnsafeBernoulli(p)) + + @config_enumerate(default=enumerate1) + def guide(): + p = pyro.param("p", torch.tensor([0.0, 0.5, 1.0], requires_grad=True)) + with pyro.plate("batch", 3): + pyro.sample("z", UnsafeBernoulli(p)) + + elbo = TraceEnum_ELBO(strict_enumeration_warning=any([enumerate1])) + loss = elbo.loss(model, guide) + assert not math.isnan(loss), loss + loss = elbo.differentiable_loss(model, guide) + assert not torch_isnan(loss), loss + loss = elbo.loss_and_grads(model, guide) + assert not math.isnan(loss), loss + + +# A simple Gaussian mixture model, with no vectorization. +def gmm_model(data, verbose=False): + p = pyro.param("p", torch.tensor(0.3, requires_grad=True)) + scale = pyro.param("scale", torch.tensor(1.0, requires_grad=True)) + mus = torch.tensor([-1.0, 1.0]) + for i in pyro.plate("data", len(data)): + z = pyro.sample("z_{}".format(i), dist.Bernoulli(p)) + z = z.long() + if verbose: + logger.debug("M{} z_{} = {}".format(" " * int(i), int(i), z.cpu().numpy())) + pyro.sample("x_{}".format(i), dist.Normal(mus[z], scale), obs=data[i]) + + +def gmm_guide(data, verbose=False): + for i in pyro.plate("data", len(data)): + p = pyro.param("p_{}".format(i), torch.tensor(0.6, requires_grad=True)) + z = pyro.sample("z_{}".format(i), dist.Bernoulli(p)) + z = z.long() + if verbose: + logger.debug("G{} z_{} = {}".format(" " * int(i), int(i), z.cpu().numpy())) + + +@pytest.mark.parametrize("data_size", [1, 2, 3]) +@pytest.mark.parametrize("graph_type", ["flat", "dense"]) +@pytest.mark.parametrize("model", [gmm_model, gmm_guide]) +def test_gmm_iter_discrete_traces(data_size, graph_type, model): + pyro.clear_param_store() + data = torch.arange(0.0, float(data_size)) + model = config_enumerate(model, "sequential") + traces = list(iter_discrete_traces(graph_type, model, data=data, verbose=True)) + # This non-vectorized version is exponential in data_size: + assert len(traces) == 2**data_size + + +# A Gaussian mixture model, with vectorized batching. +def gmm_batch_model(data): + p = pyro.param("p", torch.tensor([0.3], requires_grad=True)) + p = torch.cat([p, 1 - p]) + scale = pyro.param("scale", torch.tensor([1.0], requires_grad=True)) + mus = torch.tensor([-1.0, 1.0]) + with pyro.plate("data", len(data)) as batch: + n = len(batch) + z = pyro.sample("z", dist.OneHotCategorical(p).expand_by([n])) + assert z.shape[-1] == 2 + loc = (z * mus).sum(-1) + pyro.sample("x", dist.Normal(loc, scale.expand(n)), obs=data[batch]) + + +def gmm_batch_guide(data): + with pyro.plate("data", len(data)) as batch: + n = len(batch) + probs = pyro.param("probs", torch.ones(n, 1) * 0.6) + probs = torch.cat([probs, 1 - probs], dim=1) + z = pyro.sample("z", dist.OneHotCategorical(probs)) + assert z.shape[-1] == 2 + + +@pytest.mark.parametrize("data_size", [1, 2, 3]) +@pytest.mark.parametrize("graph_type", ["flat", "dense"]) +@pytest.mark.parametrize("model", [gmm_batch_model, gmm_batch_guide]) +def test_gmm_batch_iter_discrete_traces(model, data_size, graph_type): + pyro.clear_param_store() + data = torch.arange(0.0, float(data_size)) + model = config_enumerate(model, "sequential") + traces = list(iter_discrete_traces(graph_type, model, data=data)) + # This vectorized version is independent of data_size: + assert len(traces) == 2 + + +@pytest.mark.parametrize( + "model,guide", + [ + (gmm_model, gmm_guide), + (gmm_batch_model, gmm_batch_guide), + ], + ids=["single", "batch"], +) +@pytest.mark.parametrize("enumerate1", [None, "sequential", "parallel"]) +def test_svi_step_smoke(model, guide, enumerate1): + pyro.clear_param_store() + data = torch.tensor([0.0, 1.0, 9.0]) + + guide = config_enumerate(guide, default=enumerate1) + optimizer = pyro.optim.Adam({"lr": 0.001}) + elbo = TraceEnum_ELBO(strict_enumeration_warning=any([enumerate1])) + inference = SVI(model, guide, optimizer, loss=elbo) + inference.step(data) + + +@pytest.mark.parametrize( + "model,guide", + [ + (gmm_model, gmm_guide), + (gmm_batch_model, gmm_batch_guide), + ], + ids=["single", "batch"], +) +@pytest.mark.parametrize("enumerate1", [None, "sequential", "parallel"]) +def test_differentiable_loss(model, guide, enumerate1): + pyro.clear_param_store() + data = torch.tensor([0.0, 1.0, 9.0]) + + guide = config_enumerate(guide, default=enumerate1) + elbo = TraceEnum_ELBO( + max_plate_nesting=1, strict_enumeration_warning=any([enumerate1]) + ) + + pyro.set_rng_seed(0) + loss = elbo.differentiable_loss(model, guide, data) + param_names = sorted(pyro.get_param_store()) + actual_loss = loss.item() + actual_grads = grad( + loss, [pyro.param(name).unconstrained() for name in param_names] + ) + + pyro.set_rng_seed(0) + expected_loss = elbo.loss_and_grads(model, guide, data) + expected_grads = [pyro.param(name).unconstrained().grad for name in param_names] + + assert_equal(actual_loss, expected_loss) + for name, actual_grad, expected_grad in zip( + param_names, actual_grads, expected_grads + ): + assert_equal( + actual_grad, + expected_grad, + msg="bad {} gradient. Expected:\n{}\nActual:\n{}".format( + name, expected_grad, actual_grad + ), + ) + + +@pytest.mark.parametrize("enumerate1", [None, "sequential", "parallel"]) +def test_svi_step_guide_uses_grad(enumerate1): + data = torch.tensor([0.0, 1.0, 3.0]) + + def model(): + scale = pyro.param("scale") + loc = pyro.sample("loc", dist.Normal(0.0, 10.0)) + pyro.sample("b", dist.Bernoulli(0.5)) + with pyro.plate("data", len(data)): + pyro.sample("obs", dist.Normal(loc, scale), obs=data) + + @config_enumerate(default=enumerate1) + def guide(): + p = pyro.param("p", torch.tensor(0.5), constraint=constraints.unit_interval) + scale = pyro.param("scale", torch.tensor(1.0), constraint=constraints.positive) + var = pyro.param("var", torch.tensor(1.0), constraint=constraints.positive) + + x = torch.tensor(0.0, requires_grad=True) + prior = dist.Normal(0.0, 10.0).log_prob(x) + likelihood = dist.Normal(x, scale).log_prob(data).sum() + loss = -(prior + likelihood) + g = grad(loss, [x], create_graph=True)[0] + H = grad(g, [x], create_graph=True)[0] + loc = x.detach() - g / H # newton step + pyro.sample("loc", dist.Normal(loc, var)) + pyro.sample("b", dist.Bernoulli(p)) + + elbo = TraceEnum_ELBO(strict_enumeration_warning=any([enumerate1])) + inference = SVI(model, guide, pyro.optim.Adam({}), elbo) + inference.step() + + +@pytest.mark.parametrize("scale", [1, 10]) +@pytest.mark.parametrize("method", ["loss", "differentiable_loss", "loss_and_grads"]) +@pytest.mark.parametrize("enumerate1", [None, "sequential", "parallel"]) +def test_elbo_bern(method, enumerate1, scale): + pyro.clear_param_store() + num_particles = 1 if enumerate1 else 10000 + prec = 0.001 if enumerate1 else 0.22 + q = pyro.param("q", torch.tensor(0.5, requires_grad=True)) + kl = kl_divergence(dist.Bernoulli(q), dist.Bernoulli(0.25)) + + @poutine.scale(scale=scale) + def model(): + with pyro.plate("particles", num_particles): + pyro.sample("z", dist.Bernoulli(0.25).expand_by([num_particles])) + + @config_enumerate(default=enumerate1) + @poutine.scale(scale=scale) + def guide(): + q = pyro.param("q") + with pyro.plate("particles", num_particles): + pyro.sample("z", dist.Bernoulli(q).expand_by([num_particles])) + + elbo = TraceEnum_ELBO(strict_enumeration_warning=any([enumerate1])) + + if method == "loss": + actual = elbo.loss(model, guide) / num_particles + expected = kl.item() * scale + assert_equal( + actual, + expected, + prec=prec, + msg="".join( + [ + "\nexpected = {}".format(expected), + "\n actual = {}".format(actual), + ] + ), + ) + else: + if method == "differentiable_loss": + loss = elbo.differentiable_loss(model, guide) + actual = grad(loss, [q])[0] / num_particles + elif method == "loss_and_grads": + elbo.loss_and_grads(model, guide) + actual = q.grad / num_particles + expected = grad(kl, [q])[0] * scale + assert_equal( + actual, + expected, + prec=prec, + msg="".join( + [ + "\nexpected = {}".format(expected.detach().cpu().numpy()), + "\n actual = {}".format(actual.detach().cpu().numpy()), + ] + ), + ) + + +@pytest.mark.parametrize("method", ["loss", "differentiable_loss", "loss_and_grads"]) +@pytest.mark.parametrize("enumerate1", [None, "parallel"]) +def test_elbo_normal(method, enumerate1): + pyro.clear_param_store() + num_particles = 1 if enumerate1 else 10000 + prec = 0.01 + q = pyro.param("q", torch.tensor(1.0, requires_grad=True)) + kl = kl_divergence(dist.Normal(q, 1.0), dist.Normal(0.0, 1.0)) + + def model(): + with pyro.plate("particles", num_particles): + pyro.sample("z", dist.Normal(0.0, 1.0).expand_by([num_particles])) + + @config_enumerate(default=enumerate1, num_samples=20000) + def guide(): + q = pyro.param("q") + with pyro.plate("particles", num_particles): + pyro.sample("z", dist.Normal(q, 1.0).expand_by([num_particles])) + + elbo = TraceEnum_ELBO(strict_enumeration_warning=any([enumerate1])) + + if method == "loss": + actual = elbo.loss(model, guide) / num_particles + expected = kl.item() + assert_equal( + actual, + expected, + prec=prec, + msg="".join( + [ + "\nexpected = {}".format(expected), + "\n actual = {}".format(actual), + ] + ), + ) + else: + if method == "differentiable_loss": + loss = elbo.differentiable_loss(model, guide) + actual = grad(loss, [q])[0] / num_particles + elif method == "loss_and_grads": + elbo.loss_and_grads(model, guide) + actual = q.grad / num_particles + expected = grad(kl, [q])[0] + assert_equal( + actual, + expected, + prec=prec, + msg="".join( + [ + "\nexpected = {}".format(expected.detach().cpu().numpy()), + "\n actual = {}".format(actual.detach().cpu().numpy()), + ] + ), + ) + + +@pytest.mark.parametrize( + "enumerate1,num_samples1", + [ + (None, None), + ("sequential", None), + ("parallel", None), + ("parallel", 300), + ], +) +@pytest.mark.parametrize( + "enumerate2,num_samples2", + [ + (None, None), + ("sequential", None), + ("parallel", None), + ("parallel", 300), + ], +) +@pytest.mark.parametrize("method", ["differentiable_loss", "loss_and_grads"]) +def test_elbo_bern_bern(method, enumerate1, enumerate2, num_samples1, num_samples2): + pyro.clear_param_store() + if enumerate1 and enumerate2 and num_samples1 is None and num_samples2 is None: + num_particles = 1 + prec = 0.001 + else: + num_particles = 2 * 300 * 300 + for n in [num_samples1, num_samples2]: + if n is not None: + num_particles = num_particles // n + prec = 0.2 + + q = pyro.param("q", torch.tensor(0.75, requires_grad=True)) + + def model(): + pyro.sample("x1", dist.Bernoulli(0.2)) + pyro.sample("x2", dist.Bernoulli(0.4)) + + def guide(): + q = pyro.param("q") + pyro.sample( + "x1", + dist.Bernoulli(q), + infer={"enumerate": enumerate1, "num_samples": num_samples1}, + ) + pyro.sample( + "x2", + dist.Bernoulli(q), + infer={"enumerate": enumerate2, "num_samples": num_samples2}, + ) + + kl = sum(kl_divergence(dist.Bernoulli(q), dist.Bernoulli(p)) for p in [0.2, 0.4]) + expected_loss = kl.item() + expected_grad = grad(kl, [q])[0] + + elbo = TraceEnum_ELBO( + num_particles=num_particles, + vectorize_particles=True, + strict_enumeration_warning=any([enumerate1, enumerate2]), + ) + if method == "differentiable_loss": + loss = elbo.differentiable_loss(model, guide) + actual_loss = loss.item() + actual_grad = grad(loss, [q])[0] + else: + actual_loss = elbo.loss_and_grads(model, guide) + actual_grad = q.grad + + assert_equal( + actual_loss, + expected_loss, + prec=prec, + msg="".join( + [ + "\nexpected loss = {}".format(expected_loss), + "\n actual loss = {}".format(actual_loss), + ] + ), + ) + assert_equal( + actual_grad, + expected_grad, + prec=prec, + msg="".join( + [ + "\nexpected grads = {}".format(expected_grad.detach().cpu().numpy()), + "\n actual grads = {}".format(actual_grad.detach().cpu().numpy()), + ] + ), + ) + + +@pytest.mark.parametrize( + "enumerate1,enumerate2,enumerate3,num_samples", + [ + (e1, e2, e3, num_samples) + for e1 in [None, "sequential", "parallel"] + for e2 in [None, "sequential", "parallel"] + for e3 in [None, "sequential", "parallel"] + for num_samples in [None, 10000] + if num_samples is None or (e1, e2, e3) == ("parallel", "parallel", "parallel") + ], +) +@pytest.mark.parametrize("method", ["differentiable_loss", "loss_and_grads"]) +def test_elbo_berns(method, enumerate1, enumerate2, enumerate3, num_samples): + pyro.clear_param_store() + num_particles = 1 if all([enumerate1, enumerate2, enumerate3]) else 10000 + prec = ( + 0.001 if all([enumerate1, enumerate2, enumerate3]) and not num_samples else 0.1 + ) + q = pyro.param("q", torch.tensor(0.75, requires_grad=True)) + + def model(): + pyro.sample("x1", dist.Bernoulli(0.1)) + pyro.sample("x2", dist.Bernoulli(0.2)) + pyro.sample("x3", dist.Bernoulli(0.3)) + + def guide(): + q = pyro.param("q") + pyro.sample( + "x1", + dist.Bernoulli(q), + infer={"enumerate": enumerate1, "num_samples": num_samples}, + ) + pyro.sample( + "x2", + dist.Bernoulli(q), + infer={"enumerate": enumerate2, "num_samples": num_samples}, + ) + pyro.sample( + "x3", + dist.Bernoulli(q), + infer={"enumerate": enumerate3, "num_samples": num_samples}, + ) + + kl = sum( + kl_divergence(dist.Bernoulli(q), dist.Bernoulli(p)) for p in [0.1, 0.2, 0.3] + ) + expected_loss = kl.item() + expected_grad = grad(kl, [q])[0] + + elbo = TraceEnum_ELBO( + num_particles=num_particles, + vectorize_particles=True, + strict_enumeration_warning=any([enumerate1, enumerate2, enumerate3]), + ) + if method == "differentiable_loss": + loss = elbo.differentiable_loss(model, guide) + actual_loss = loss.item() + actual_grad = grad(loss, [q])[0] + else: + actual_loss = elbo.loss_and_grads(model, guide) + actual_grad = q.grad + + assert_equal( + actual_loss, + expected_loss, + prec=prec, + msg="".join( + [ + "\nexpected loss = {}".format(expected_loss), + "\n actual loss = {}".format(actual_loss), + ] + ), + ) + assert_equal( + actual_grad, + expected_grad, + prec=prec, + msg="".join( + [ + "\nexpected grads = {}".format(expected_grad.detach().cpu().numpy()), + "\n actual grads = {}".format(actual_grad.detach().cpu().numpy()), + ] + ), + ) + + +@pytest.mark.parametrize("num_samples", [None, 2000]) +@pytest.mark.parametrize("max_plate_nesting", [0, 1]) +@pytest.mark.parametrize("enumerate1", ["sequential", "parallel"]) +@pytest.mark.parametrize("enumerate2", ["sequential", "parallel"]) +@pytest.mark.parametrize("enumerate3", ["sequential", "parallel"]) +def test_elbo_categoricals( + enumerate1, enumerate2, enumerate3, max_plate_nesting, num_samples +): + pyro.clear_param_store() + p1 = torch.tensor([0.6, 0.4]) + p2 = torch.tensor([0.3, 0.3, 0.4]) + p3 = torch.tensor([0.1, 0.2, 0.3, 0.4]) + q1 = pyro.param("q1", torch.tensor([0.4, 0.6], requires_grad=True)) + q2 = pyro.param("q2", torch.tensor([0.4, 0.3, 0.3], requires_grad=True)) + q3 = pyro.param("q3", torch.tensor([0.4, 0.3, 0.2, 0.1], requires_grad=True)) + + def model(): + pyro.sample("x1", dist.Categorical(p1)) + pyro.sample("x2", dist.Categorical(p2)) + pyro.sample("x3", dist.Categorical(p3)) + + def guide(): + pyro.sample( + "x1", + dist.Categorical(pyro.param("q1")), + infer={ + "enumerate": enumerate1, + "num_samples": num_samples if enumerate1 == "parallel" else None, + }, + ) + pyro.sample( + "x2", + dist.Categorical(pyro.param("q2")), + infer={ + "enumerate": enumerate2, + "num_samples": num_samples if enumerate2 == "parallel" else None, + }, + ) + pyro.sample( + "x3", + dist.Categorical(pyro.param("q3")), + infer={ + "enumerate": enumerate3, + "num_samples": num_samples if enumerate3 == "parallel" else None, + }, + ) + + kl = ( + kl_divergence(dist.Categorical(q1), dist.Categorical(p1)) + + kl_divergence(dist.Categorical(q2), dist.Categorical(p2)) + + kl_divergence(dist.Categorical(q3), dist.Categorical(p3)) + ) + expected_loss = kl.item() + expected_grads = grad(kl, [q1, q2, q3]) + + elbo = TraceEnum_ELBO( + max_plate_nesting=max_plate_nesting, + strict_enumeration_warning=any([enumerate1, enumerate2, enumerate3]), + ) + actual_loss = elbo.loss_and_grads(model, guide) + actual_grads = [q1.grad, q2.grad, q3.grad] + + assert_equal( + actual_loss, + expected_loss, + prec=0.001 if not num_samples else 0.1, + msg="".join( + [ + "\nexpected loss = {}".format(expected_loss), + "\n actual loss = {}".format(actual_loss), + ] + ), + ) + for actual_grad, expected_grad in zip(actual_grads, expected_grads): + assert_equal( + actual_grad, + expected_grad, + prec=0.001 if not num_samples else 0.1, + msg="".join( + [ + "\nexpected grad = {}".format(expected_grad.detach().cpu().numpy()), + "\n actual grad = {}".format(actual_grad.detach().cpu().numpy()), + ] + ), + ) + + +@pytest.mark.parametrize("enumerate1", [None, "parallel"]) +@pytest.mark.parametrize("enumerate2", [None, "parallel"]) +@pytest.mark.parametrize("enumerate3", [None, "parallel"]) +@pytest.mark.parametrize("method", ["differentiable_loss", "loss_and_grads"]) +def test_elbo_normals(method, enumerate1, enumerate2, enumerate3): + pyro.clear_param_store() + num_particles = 100 * 10 ** sum( + 1 for e in [enumerate1, enumerate2, enumerate3] if not e + ) + prec = 0.1 + q = pyro.param("q", torch.tensor(0.0, requires_grad=True)) + + def model(): + pyro.sample("x1", dist.Normal(0.25, 1.0)) + pyro.sample("x2", dist.Normal(0.5, 1.0)) + pyro.sample("x3", dist.Normal(1.0, 1.0)) + + def guide(): + q = pyro.param("q") + pyro.sample( + "x1", + dist.Normal(q, 1.0), + infer={"enumerate": enumerate1, "num_samples": 10}, + ) + pyro.sample( + "x2", + dist.Normal(q, 1.0), + infer={"enumerate": enumerate2, "num_samples": 10}, + ) + pyro.sample( + "x3", + dist.Normal(q, 1.0), + infer={"enumerate": enumerate3, "num_samples": 10}, + ) + + kl = sum( + kl_divergence(dist.Normal(q, 1.0), dist.Normal(p, 1.0)) + for p in [0.25, 0.5, 1.0] + ) + expected_loss = kl.item() + expected_grad = grad(kl, [q])[0] + + elbo = TraceEnum_ELBO( + num_particles=num_particles, + vectorize_particles=True, + strict_enumeration_warning=any([enumerate1, enumerate2, enumerate3]), + ) + if method == "differentiable_loss": + loss = elbo.differentiable_loss(model, guide) + actual_loss = loss.item() + actual_grad = grad(loss, [q])[0] + else: + actual_loss = elbo.loss_and_grads(model, guide) + actual_grad = q.grad + + assert_equal( + actual_loss, + expected_loss, + prec=prec, + msg="".join( + [ + "\nexpected loss = {}".format(expected_loss), + "\n actual loss = {}".format(actual_loss), + ] + ), + ) + assert_equal( + actual_grad, + expected_grad, + prec=prec, + msg="".join( + [ + "\nexpected grads = {}".format(expected_grad.detach().cpu().numpy()), + "\n actual grads = {}".format(actual_grad.detach().cpu().numpy()), + ] + ), + ) + + +@pytest.mark.parametrize( + "enumerate1,enumerate2,num_samples", + [ + (e1, e2, num_samples) + for e1 in [None, "sequential", "parallel"] + for e2 in [None, "sequential", "parallel"] + for num_samples in [None, 10000] + if num_samples is None or (e1, e2) == ("parallel", "parallel") + ], +) +@pytest.mark.parametrize("plate_dim", [1, 2]) +def test_elbo_plate(plate_dim, enumerate1, enumerate2, num_samples): + pyro.clear_param_store() + num_particles = 1 if all([enumerate1, enumerate2]) else 10000 + q = pyro.param("q", torch.tensor(0.75, requires_grad=True)) + p = 0.2693204236205713 # for which kl(Bernoulli(q), Bernoulli(p)) = 0.5 + + def model(): + with pyro.plate("particles", num_particles): + pyro.sample("y", dist.Bernoulli(p).expand_by([num_particles])) + with pyro.plate("plate", plate_dim): + pyro.sample( + "z", dist.Bernoulli(p).expand_by([plate_dim, num_particles]) + ) + + def guide(): + q = pyro.param("q") + with pyro.plate("particles", num_particles): + pyro.sample( + "y", + dist.Bernoulli(q).expand_by([num_particles]), + infer={"enumerate": enumerate1, "num_samples": num_samples}, + ) + with pyro.plate("plate", plate_dim): + pyro.sample( + "z", + dist.Bernoulli(q).expand_by([plate_dim, num_particles]), + infer={"enumerate": enumerate2, "num_samples": num_samples}, + ) + + kl = (1 + plate_dim) * kl_divergence(dist.Bernoulli(q), dist.Bernoulli(p)) + expected_loss = kl.item() + expected_grad = grad(kl, [q])[0] + + elbo = TraceEnum_ELBO(strict_enumeration_warning=any([enumerate1, enumerate2])) + actual_loss = elbo.loss_and_grads(model, guide) / num_particles + actual_grad = pyro.param("q").grad / num_particles + + assert_equal( + actual_loss, + expected_loss, + prec=0.1, + msg="".join( + [ + "\nexpected loss = {}".format(expected_loss), + "\n actual loss = {}".format(actual_loss), + ] + ), + ) + assert_equal( + actual_grad, + expected_grad, + prec=0.1, + msg="".join( + [ + "\nexpected grad = {}".format(expected_grad.detach().cpu().numpy()), + "\n actual grad = {}".format(actual_grad.detach().cpu().numpy()), + ] + ), + ) + + +@pytest.mark.parametrize("enumerate2", [None, "sequential", "parallel"]) +@pytest.mark.parametrize("enumerate1", [None, "sequential", "parallel"]) +@pytest.mark.parametrize("plate_dim", [1, 2]) +def test_elbo_iplate(plate_dim, enumerate1, enumerate2): + pyro.clear_param_store() + num_particles = 1 if all([enumerate1, enumerate2]) else 20000 + q = pyro.param("q", torch.tensor(0.75, requires_grad=True)) + p = 0.2693204236205713 # for which kl(Bernoulli(q), Bernoulli(p)) = 0.5 + + def model(): + with pyro.plate("particles", num_particles): + pyro.sample("x", dist.Bernoulli(p).expand_by([num_particles])) + for i in pyro.plate("plate", plate_dim): + pyro.sample( + "y_{}".format(i), dist.Bernoulli(p).expand_by([num_particles]) + ) + + def guide(): + q = pyro.param("q") + with pyro.plate("particles", num_particles): + pyro.sample( + "x", + dist.Bernoulli(q).expand_by([num_particles]), + infer={"enumerate": enumerate1}, + ) + for i in pyro.plate("plate", plate_dim): + pyro.sample( + "y_{}".format(i), + dist.Bernoulli(q).expand_by([num_particles]), + infer={"enumerate": enumerate2}, + ) + + kl = (1 + plate_dim) * kl_divergence(dist.Bernoulli(q), dist.Bernoulli(p)) + expected_loss = kl.item() + expected_grad = grad(kl, [q])[0] + + elbo = TraceEnum_ELBO(strict_enumeration_warning=any([enumerate1, enumerate2])) + actual_loss = elbo.loss_and_grads(model, guide) / num_particles + actual_grad = pyro.param("q").grad / num_particles + + assert_equal( + actual_loss, + expected_loss, + prec=0.1, + msg="".join( + [ + "\nexpected loss = {}".format(expected_loss), + "\n actual loss = {}".format(actual_loss), + ] + ), + ) + assert_equal( + actual_grad, + expected_grad, + prec=0.1, + msg="".join( + [ + "\nexpected grad = {}".format(expected_grad.detach().cpu().numpy()), + "\n actual grad = {}".format(actual_grad.detach().cpu().numpy()), + ] + ), + ) + + +@pytest.mark.parametrize( + "enumerate1,enumerate2,enumerate3,enumerate4,num_samples", + [ + (e1, e2, e3, e4, num_samples) + for e1 in [None, "sequential", "parallel"] + for e2 in [None, "sequential", "parallel"] + for e3 in [None, "sequential", "parallel"] + for e4 in [None, "sequential", "parallel"] + for num_samples in [None, 10000] + if num_samples is None or (e1, e2, e3, e4) == ("parallel",) * 4 + ], +) +@pytest.mark.parametrize("inner_dim", [2]) +@pytest.mark.parametrize("outer_dim", [2]) +def test_elbo_plate_plate( + outer_dim, inner_dim, enumerate1, enumerate2, enumerate3, enumerate4, num_samples +): + pyro.clear_param_store() + num_particles = ( + 1 if all([enumerate1, enumerate2, enumerate3, enumerate4]) else 100000 + ) + q = pyro.param("q", torch.tensor(0.75, requires_grad=True)) + p = 0.2693204236205713 # for which kl(Bernoulli(q), Bernoulli(p)) = 0.5 + + def model(): + d = dist.Bernoulli(p) + context1 = pyro.plate("outer", outer_dim, dim=-1) + context2 = pyro.plate("inner", inner_dim, dim=-2) + pyro.sample("w", d) + with context1: + pyro.sample("x", d) + with context2: + pyro.sample("y", d) + with context1, context2: + pyro.sample("z", d) + + def guide(): + d = dist.Bernoulli(pyro.param("q")) + context1 = pyro.plate("outer", outer_dim, dim=-1) + context2 = pyro.plate("inner", inner_dim, dim=-2) + pyro.sample("w", d, infer={"enumerate": enumerate1, "num_samples": num_samples}) + with context1: + pyro.sample( + "x", d, infer={"enumerate": enumerate2, "num_samples": num_samples} + ) + with context2: + pyro.sample( + "y", d, infer={"enumerate": enumerate3, "num_samples": num_samples} + ) + with context1, context2: + pyro.sample( + "z", d, infer={"enumerate": enumerate4, "num_samples": num_samples} + ) + + kl_node = kl_divergence(dist.Bernoulli(q), dist.Bernoulli(p)) + kl = (1 + outer_dim + inner_dim + outer_dim * inner_dim) * kl_node + expected_loss = kl.item() + expected_grad = grad(kl, [q])[0] + + elbo = TraceEnum_ELBO( + num_particles=num_particles, + vectorize_particles=True, + strict_enumeration_warning=any([enumerate1, enumerate2, enumerate3]), + ) + actual_loss = elbo.loss_and_grads(model, guide) + actual_grad = pyro.param("q").grad + + assert_equal( + actual_loss, + expected_loss, + prec=0.1, + msg="".join( + [ + "\nexpected loss = {}".format(expected_loss), + "\n actual loss = {}".format(actual_loss), + ] + ), + ) + assert_equal( + actual_grad, + expected_grad, + prec=0.1, + msg="".join( + [ + "\nexpected grad = {}".format(expected_grad.detach().cpu().numpy()), + "\n actual grad = {}".format(actual_grad.detach().cpu().numpy()), + ] + ), + ) + + +@pytest.mark.parametrize( + "enumerate1,enumerate2,enumerate3,num_samples", + [ + (e1, e2, e3, num_samples) + for e1 in [None, "sequential", "parallel"] + for e2 in [None, "sequential", "parallel"] + for e3 in [None, "sequential", "parallel"] + for num_samples in [None, 2000] + if num_samples is None or (e1, e2, e3) == ("parallel",) * 3 + ], +) +@pytest.mark.parametrize("inner_dim", [2]) +@pytest.mark.parametrize("outer_dim", [3]) +def test_elbo_plate_iplate( + outer_dim, inner_dim, enumerate1, enumerate2, enumerate3, num_samples +): + pyro.clear_param_store() + num_particles = 1 if all([enumerate1, enumerate2, enumerate3]) else 100000 + q = pyro.param("q", torch.tensor(0.75, requires_grad=True)) + p = 0.2693204236205713 # for which kl(Bernoulli(q), Bernoulli(p)) = 0.5 + + def model(): + with pyro.plate("particles", num_particles): + pyro.sample("x", dist.Bernoulli(p).expand_by([num_particles])) + with pyro.plate("outer", outer_dim): + pyro.sample( + "y", dist.Bernoulli(p).expand_by([outer_dim, num_particles]) + ) + for i in pyro.plate("inner", inner_dim): + pyro.sample( + "z_{}".format(i), + dist.Bernoulli(p).expand_by([outer_dim, num_particles]), + ) + + def guide(): + q = pyro.param("q") + with pyro.plate("particles", num_particles): + pyro.sample( + "x", + dist.Bernoulli(q).expand_by([num_particles]), + infer={"enumerate": enumerate1, "num_samples": num_samples}, + ) + with pyro.plate("outer", outer_dim): + pyro.sample( + "y", + dist.Bernoulli(q).expand_by([outer_dim, num_particles]), + infer={"enumerate": enumerate2, "num_samples": num_samples}, + ) + for i in pyro.plate("inner", inner_dim): + pyro.sample( + "z_{}".format(i), + dist.Bernoulli(q).expand_by([outer_dim, num_particles]), + infer={"enumerate": enumerate3, "num_samples": num_samples}, + ) + + kl = (1 + outer_dim * (1 + inner_dim)) * kl_divergence( + dist.Bernoulli(q), dist.Bernoulli(p) + ) + expected_loss = kl.item() + expected_grad = grad(kl, [q])[0] + + elbo = TraceEnum_ELBO( + strict_enumeration_warning=any([enumerate1, enumerate2, enumerate3]) + ) + actual_loss = elbo.loss_and_grads(model, guide) / num_particles + actual_grad = pyro.param("q").grad / num_particles + + assert_equal( + actual_loss, + expected_loss, + prec=0.1, + msg="".join( + [ + "\nexpected loss = {}".format(expected_loss), + "\n actual loss = {}".format(actual_loss), + ] + ), + ) + assert_equal( + actual_grad, + expected_grad, + prec=0.1, + msg="".join( + [ + "\nexpected grad = {}".format(expected_grad.detach().cpu().numpy()), + "\n actual grad = {}".format(actual_grad.detach().cpu().numpy()), + ] + ), + ) + + +@pytest.mark.parametrize("enumerate3", [None, "sequential", "parallel"]) +@pytest.mark.parametrize("enumerate2", [None, "sequential", "parallel"]) +@pytest.mark.parametrize("enumerate1", [None, "sequential", "parallel"]) +@pytest.mark.parametrize("inner_dim", [2]) +@pytest.mark.parametrize("outer_dim", [2]) +def test_elbo_iplate_plate(outer_dim, inner_dim, enumerate1, enumerate2, enumerate3): + pyro.clear_param_store() + num_particles = 1 if all([enumerate1, enumerate2, enumerate3]) else 50000 + q = pyro.param("q", torch.tensor(0.75, requires_grad=True)) + p = 0.2693204236205713 # for which kl(Bernoulli(q), Bernoulli(p)) = 0.5 + + def model(): + with pyro.plate("particles", num_particles): + pyro.sample("x", dist.Bernoulli(p).expand_by([num_particles])) + inner_plate = pyro.plate("inner", inner_dim) + for i in pyro.plate("outer", outer_dim): + pyro.sample( + "y_{}".format(i), dist.Bernoulli(p).expand_by([num_particles]) + ) + with inner_plate: + pyro.sample( + "z_{}".format(i), + dist.Bernoulli(p).expand_by([inner_dim, num_particles]), + ) + + def guide(): + q = pyro.param("q") + with pyro.plate("particles", num_particles): + pyro.sample( + "x", + dist.Bernoulli(q).expand_by([num_particles]), + infer={"enumerate": enumerate1}, + ) + inner_plate = pyro.plate("inner", inner_dim) + for i in pyro.plate("outer", outer_dim): + pyro.sample( + "y_{}".format(i), + dist.Bernoulli(q).expand_by([num_particles]), + infer={"enumerate": enumerate2}, + ) + with inner_plate: + pyro.sample( + "z_{}".format(i), + dist.Bernoulli(q).expand_by([inner_dim, num_particles]), + infer={"enumerate": enumerate3}, + ) + + kl = (1 + outer_dim * (1 + inner_dim)) * kl_divergence( + dist.Bernoulli(q), dist.Bernoulli(p) + ) + expected_loss = kl.item() + expected_grad = grad(kl, [q])[0] + + elbo = TraceEnum_ELBO( + strict_enumeration_warning=any([enumerate1, enumerate2, enumerate3]) + ) + actual_loss = elbo.loss_and_grads(model, guide) / num_particles + actual_grad = pyro.param("q").grad / num_particles + + assert_equal( + actual_loss, + expected_loss, + prec=0.1, + msg="".join( + [ + "\nexpected loss = {}".format(expected_loss), + "\n actual loss = {}".format(actual_loss), + ] + ), + ) + assert_equal( + actual_grad, + expected_grad, + prec=0.1, + msg="".join( + [ + "\nexpected grad = {}".format(expected_grad.detach().cpu().numpy()), + "\n actual grad = {}".format(actual_grad.detach().cpu().numpy()), + ] + ), + ) + + +@pytest.mark.parametrize("enumerate3", [None, "sequential", "parallel"]) +@pytest.mark.parametrize("enumerate2", [None, "sequential", "parallel"]) +@pytest.mark.parametrize("enumerate1", [None, "sequential", "parallel"]) +@pytest.mark.parametrize("inner_dim", [2]) +@pytest.mark.parametrize("outer_dim", [2]) +def test_elbo_iplate_iplate(outer_dim, inner_dim, enumerate1, enumerate2, enumerate3): + pyro.clear_param_store() + num_particles = 1 if all([enumerate1, enumerate2, enumerate3]) else 150000 + q = pyro.param("q", torch.tensor(0.75, requires_grad=True)) + p = 0.2693204236205713 # for which kl(Bernoulli(q), Bernoulli(p)) = 0.5 + + def model(): + with pyro.plate("particles", num_particles): + pyro.sample("x", dist.Bernoulli(p).expand_by([num_particles])) + inner_iplate = pyro.plate("inner", outer_dim) + for i in pyro.plate("outer", inner_dim): + pyro.sample( + "y_{}".format(i), dist.Bernoulli(p).expand_by([num_particles]) + ) + for j in inner_iplate: + pyro.sample( + "z_{}_{}".format(i, j), + dist.Bernoulli(p).expand_by([num_particles]), + ) + + def guide(): + q = pyro.param("q") + with pyro.plate("particles", num_particles): + pyro.sample( + "x", + dist.Bernoulli(q).expand_by([num_particles]), + infer={"enumerate": enumerate1}, + ) + inner_iplate = pyro.plate("inner", inner_dim) + for i in pyro.plate("outer", outer_dim): + pyro.sample( + "y_{}".format(i), + dist.Bernoulli(q).expand_by([num_particles]), + infer={"enumerate": enumerate2}, + ) + for j in inner_iplate: + pyro.sample( + "z_{}_{}".format(i, j), + dist.Bernoulli(q).expand_by([num_particles]), + infer={"enumerate": enumerate3}, + ) + + kl = (1 + outer_dim * (1 + inner_dim)) * kl_divergence( + dist.Bernoulli(q), dist.Bernoulli(p) + ) + expected_loss = kl.item() + expected_grad = grad(kl, [q])[0] + + elbo = TraceEnum_ELBO( + strict_enumeration_warning=any([enumerate1, enumerate2, enumerate3]) + ) + actual_loss = elbo.loss_and_grads(model, guide) / num_particles + actual_grad = pyro.param("q").grad / num_particles + + assert_equal( + actual_loss, + expected_loss, + prec=0.1, + msg="".join( + [ + "\nexpected loss = {}".format(expected_loss), + "\n actual loss = {}".format(actual_loss), + ] + ), + ) + assert_equal( + actual_grad, + expected_grad, + prec=0.2, + msg="".join( + [ + "\nexpected grad = {}".format(expected_grad.detach().cpu().numpy()), + "\n actual grad = {}".format(actual_grad.detach().cpu().numpy()), + ] + ), + ) + + +@pytest.mark.parametrize("pi1", [0.33, 0.43]) +@pytest.mark.parametrize("pi2", [0.55, 0.27]) +@pytest.mark.parametrize("enumerate1", [None, "sequential", "parallel"]) +def test_non_mean_field_bern_bern_elbo_gradient(enumerate1, pi1, pi2): + pyro.clear_param_store() + num_particles = 1 if enumerate1 else 20000 + + def model(): + with pyro.plate("particles", num_particles): + y = pyro.sample("y", dist.Bernoulli(0.33).expand_by([num_particles])) + pyro.sample("z", dist.Bernoulli(0.55 * y + 0.10)) + + def guide(): + q1 = pyro.param("q1", torch.tensor(pi1, requires_grad=True)) + q2 = pyro.param("q2", torch.tensor(pi2, requires_grad=True)) + with pyro.plate("particles", num_particles): + y = pyro.sample("y", dist.Bernoulli(q1).expand_by([num_particles])) + pyro.sample("z", dist.Bernoulli(q2 * y + 0.10)) + + logger.info("Computing gradients using surrogate loss") + elbo = TraceEnum_ELBO(strict_enumeration_warning=any([enumerate1])) + elbo.loss_and_grads(model, config_enumerate(guide, default=enumerate1)) + actual_grad_q1 = pyro.param("q1").grad / num_particles + actual_grad_q2 = pyro.param("q2").grad / num_particles + + logger.info("Computing analytic gradients") + q1 = torch.tensor(pi1, requires_grad=True) + q2 = torch.tensor(pi2, requires_grad=True) + elbo = kl_divergence(dist.Bernoulli(q1), dist.Bernoulli(0.33)) + elbo = elbo + q1 * kl_divergence(dist.Bernoulli(q2 + 0.10), dist.Bernoulli(0.65)) + elbo = elbo + (1.0 - q1) * kl_divergence(dist.Bernoulli(0.10), dist.Bernoulli(0.10)) + expected_grad_q1, expected_grad_q2 = grad(elbo, [q1, q2]) + + prec = 0.03 if enumerate1 is None else 0.001 + + assert_equal( + actual_grad_q1, + expected_grad_q1, + prec=prec, + msg="".join( + [ + "\nq1 expected = {}".format(expected_grad_q1.data.cpu().numpy()), + "\nq1 actual = {}".format(actual_grad_q1.data.cpu().numpy()), + ] + ), + ) + assert_equal( + actual_grad_q2, + expected_grad_q2, + prec=prec, + msg="".join( + [ + "\nq2 expected = {}".format(expected_grad_q2.data.cpu().numpy()), + "\nq2 actual = {}".format(actual_grad_q2.data.cpu().numpy()), + ] + ), + ) + + +@pytest.mark.parametrize("pi1", [0.33, 0.44]) +@pytest.mark.parametrize("pi2", [0.55, 0.39]) +@pytest.mark.parametrize("pi3", [0.22, 0.29]) +@pytest.mark.parametrize( + "enumerate1,num_samples", + [ + (None, None), + ("sequential", None), + ("parallel", None), + ("parallel", 2), + ], +) +def test_non_mean_field_bern_normal_elbo_gradient( + enumerate1, pi1, pi2, pi3, num_samples +): + pyro.clear_param_store() + include_z = True + num_particles = 10000 + + def model(): + with pyro.plate("particles", num_particles): + q3 = pyro.param("q3", torch.tensor(pi3, requires_grad=True)) + y = pyro.sample("y", dist.Bernoulli(q3).expand_by([num_particles])) + if include_z: + pyro.sample("z", dist.Normal(0.55 * y + q3, 1.0)) + + def guide(): + q1 = pyro.param("q1", torch.tensor(pi1, requires_grad=True)) + q2 = pyro.param("q2", torch.tensor(pi2, requires_grad=True)) + with pyro.plate("particles", num_particles): + y = pyro.sample( + "y", + dist.Bernoulli(q1).expand_by([num_particles]), + infer={"enumerate": enumerate1}, + ) + if include_z: + pyro.sample("z", dist.Normal(q2 * y + 0.10, 1.0)) + + logger.info("Computing gradients using surrogate loss") + elbo = TraceEnum_ELBO(strict_enumeration_warning=any([enumerate1])) + elbo.loss_and_grads(model, guide) + actual_grad_q1 = pyro.param("q1").grad / num_particles + if include_z: + actual_grad_q2 = pyro.param("q2").grad / num_particles + actual_grad_q3 = pyro.param("q3").grad / num_particles + + logger.info("Computing analytic gradients") + q1 = torch.tensor(pi1, requires_grad=True) + q2 = torch.tensor(pi2, requires_grad=True) + q3 = torch.tensor(pi3, requires_grad=True) + elbo = kl_divergence(dist.Bernoulli(q1), dist.Bernoulli(q3)) + if include_z: + elbo = elbo + q1 * kl_divergence( + dist.Normal(q2 + 0.10, 1.0), dist.Normal(q3 + 0.55, 1.0) + ) + elbo = elbo + (1.0 - q1) * kl_divergence( + dist.Normal(0.10, 1.0), dist.Normal(q3, 1.0) + ) + expected_grad_q1, expected_grad_q2, expected_grad_q3 = grad(elbo, [q1, q2, q3]) + else: + expected_grad_q1, expected_grad_q3 = grad(elbo, [q1, q3]) + + prec = 0.04 if enumerate1 is None else 0.02 + + assert_equal( + actual_grad_q1, + expected_grad_q1, + prec=prec, + msg="".join( + [ + "\nq1 expected = {}".format(expected_grad_q1.data.cpu().numpy()), + "\nq1 actual = {}".format(actual_grad_q1.data.cpu().numpy()), + ] + ), + ) + if include_z: + assert_equal( + actual_grad_q2, + expected_grad_q2, + prec=prec, + msg="".join( + [ + "\nq2 expected = {}".format(expected_grad_q2.data.cpu().numpy()), + "\nq2 actual = {}".format(actual_grad_q2.data.cpu().numpy()), + ] + ), + ) + assert_equal( + actual_grad_q3, + expected_grad_q3, + prec=prec, + msg="".join( + [ + "\nq3 expected = {}".format(expected_grad_q3.data.cpu().numpy()), + "\nq3 actual = {}".format(actual_grad_q3.data.cpu().numpy()), + ] + ), + ) + + +@pytest.mark.parametrize("pi1", [0.33, 0.41]) +@pytest.mark.parametrize("pi2", [0.44, 0.17]) +@pytest.mark.parametrize("pi3", [0.22, 0.29]) +def test_non_mean_field_normal_bern_elbo_gradient(pi1, pi2, pi3): + def model(num_particles): + with pyro.plate("particles", num_particles): + q3 = pyro.param("q3", torch.tensor(pi3, requires_grad=True)) + q4 = pyro.param("q4", torch.tensor(0.5 * (pi1 + pi2), requires_grad=True)) + z = pyro.sample("z", dist.Normal(q3, 1.0).expand_by([num_particles])) + zz = torch.exp(z) / (1.0 + torch.exp(z)) + pyro.sample("y", dist.Bernoulli(q4 * zz)) + + def guide(num_particles): + q1 = pyro.param("q1", torch.tensor(pi1, requires_grad=True)) + q2 = pyro.param("q2", torch.tensor(pi2, requires_grad=True)) + with pyro.plate("particles", num_particles): + z = pyro.sample("z", dist.Normal(q2, 1.0).expand_by([num_particles])) + zz = torch.exp(z) / (1.0 + torch.exp(z)) + pyro.sample("y", dist.Bernoulli(q1 * zz)) + + qs = ["q1", "q2", "q3", "q4"] + results = {} + + for ed, num_particles in zip( + [None, "parallel", "sequential"], [30000, 20000, 20000] + ): + pyro.clear_param_store() + elbo = TraceEnum_ELBO(strict_enumeration_warning=any([ed])) + elbo.loss_and_grads(model, config_enumerate(guide, default=ed), num_particles) + results[str(ed)] = {} + for q in qs: + results[str(ed)]["actual_grad_%s" % q] = ( + pyro.param(q).grad.detach().cpu().numpy() / num_particles + ) + + prec = 0.03 + for ed in ["parallel", "sequential"]: + logger.info("\n*** {} ***".format(ed)) + for q in qs: + logger.info("[{}] actual: {}".format(q, results[ed]["actual_grad_%s" % q])) + assert_equal( + results[ed]["actual_grad_%s" % q], + results["None"]["actual_grad_%s" % q], + prec=prec, + msg="".join( + [ + "\nexpected (MC estimate) = {}".format( + results["None"]["actual_grad_%s" % q] + ), + "\n actual ({} estimate) = {}".format( + ed, results[ed]["actual_grad_%s" % q] + ), + ] + ), + ) + + +@pytest.mark.parametrize("enumerate1", [None, "sequential", "parallel"]) +def test_elbo_rsvi(enumerate1): + pyro.clear_param_store() + num_particles = 40000 + prec = 0.01 if enumerate1 else 0.022 + q = pyro.param("q", torch.tensor(0.5, requires_grad=True)) + a = pyro.param("a", torch.tensor(1.5, requires_grad=True)) + kl1 = kl_divergence(dist.Bernoulli(q), dist.Bernoulli(0.25)) + kl2 = kl_divergence(dist.Gamma(a, 1.0), dist.Gamma(0.5, 1.0)) + + def model(): + with pyro.plate("particles", num_particles): + pyro.sample("z", dist.Bernoulli(0.25).expand_by([num_particles])) + pyro.sample("y", dist.Gamma(0.50, 1.0).expand_by([num_particles])) + + @config_enumerate(default=enumerate1) + def guide(): + q = pyro.param("q") + a = pyro.param("a") + with pyro.plate("particles", num_particles): + pyro.sample("z", dist.Bernoulli(q).expand_by([num_particles])) + pyro.sample( + "y", + ShapeAugmentedGamma(a, torch.tensor(1.0)).expand_by([num_particles]), + ) + + elbo = TraceEnum_ELBO(strict_enumeration_warning=any([enumerate1])) + elbo.loss_and_grads(model, guide) + + actual_q = q.grad / num_particles + expected_q = grad(kl1, [q])[0] + assert_equal( + actual_q, + expected_q, + prec=prec, + msg="".join( + [ + "\nexpected q.grad = {}".format(expected_q.detach().cpu().numpy()), + "\n actual q.grad = {}".format(actual_q.detach().cpu().numpy()), + ] + ), + ) + actual_a = a.grad / num_particles + expected_a = grad(kl2, [a])[0] + assert_equal( + actual_a, + expected_a, + prec=prec, + msg="".join( + [ + "\nexpected a.grad= {}".format(expected_a.detach().cpu().numpy()), + "\n actual a.grad = {}".format(actual_a.detach().cpu().numpy()), + ] + ), + ) + + +@pytest.mark.parametrize( + "enumerate1,num_steps,expand", + [ + ("sequential", 2, True), + ("sequential", 2, False), + ("sequential", 3, True), + ("sequential", 3, False), + ("parallel", 2, True), + ("parallel", 2, False), + ("parallel", 3, True), + ("parallel", 3, False), + ("parallel", 10, False), + ("parallel", 20, False), + _skip_cuda("parallel", 30, False), + ], +) +def test_elbo_hmm_in_model(enumerate1, num_steps, expand): + pyro.clear_param_store() + data = torch.ones(num_steps) + init_probs = torch.tensor([0.5, 0.5]) + + def model(data): + transition_probs = pyro.param( + "transition_probs", + torch.tensor([[0.9, 0.1], [0.1, 0.9]]), + constraint=constraints.simplex, + ) + locs = pyro.param("obs_locs", torch.tensor([-1.0, 1.0])) + scale = pyro.param( + "obs_scale", torch.tensor(1.0), constraint=constraints.positive + ) + + x = None + for i, y in pyro.markov(enumerate(data)): + probs = init_probs if x is None else transition_probs[x] + x = pyro.sample("x_{}".format(i), dist.Categorical(probs)) + pyro.sample("y_{}".format(i), dist.Normal(locs[x], scale), obs=y) + + @config_enumerate(default=enumerate1, expand=expand) + def guide(data): + mean_field_probs = pyro.param( + "mean_field_probs", + torch.ones(num_steps, 2) / 2, + constraint=constraints.simplex, + ) + for i in pyro.markov(range(num_steps)): + pyro.sample("x_{}".format(i), dist.Categorical(mean_field_probs[i])) + + elbo = TraceEnum_ELBO() + elbo.loss_and_grads(model, guide, data) + + expected_unconstrained_grads = { + "transition_probs": torch.tensor([[0.2, -0.2], [-0.2, 0.2]]) * (num_steps - 1), + "obs_locs": torch.tensor([-num_steps, 0]), + "obs_scale": torch.tensor(-num_steps), + "mean_field_probs": torch.tensor([[0.5, -0.5]] * num_steps), + } + + for name, value in pyro.get_param_store().named_parameters(): + actual = value.grad + expected = expected_unconstrained_grads[name] + assert_equal( + actual, + expected, + msg="".join( + [ + "\nexpected {}.grad = {}".format(name, expected.cpu().numpy()), + "\n actual {}.grad = {}".format( + name, actual.detach().cpu().numpy() + ), + ] + ), + ) + + +@pytest.mark.parametrize( + "enumerate1,num_steps,expand", + [ + ("sequential", 2, True), + ("sequential", 2, False), + ("sequential", 3, True), + ("sequential", 3, False), + ("parallel", 2, True), + ("parallel", 2, False), + ("parallel", 3, True), + ("parallel", 3, False), + ("parallel", 10, False), + ("parallel", 20, False), + _skip_cuda("parallel", 30, False), + _skip_cuda("parallel", 40, False), + _skip_cuda("parallel", 50, False), + ], +) +def test_elbo_hmm_in_guide(enumerate1, num_steps, expand): + pyro.clear_param_store() + data = torch.ones(num_steps) + init_probs = torch.tensor([0.5, 0.5]) + + def model(data): + transition_probs = pyro.param( + "transition_probs", + torch.tensor([[0.75, 0.25], [0.25, 0.75]]), + constraint=constraints.simplex, + ) + emission_probs = pyro.param( + "emission_probs", + torch.tensor([[0.75, 0.25], [0.25, 0.75]]), + constraint=constraints.simplex, + ) + x = None + for i, y in pyro.markov(enumerate(data)): + probs = init_probs if x is None else transition_probs[x] + x = pyro.sample("x_{}".format(i), dist.Categorical(probs)) + pyro.sample("y_{}".format(i), dist.Categorical(emission_probs[x]), obs=y) + + @config_enumerate(default=enumerate1, expand=expand) + def guide(data): + transition_probs = pyro.param( + "transition_probs", + torch.tensor([[0.75, 0.25], [0.25, 0.75]]), + constraint=constraints.simplex, + ) + x = None + for i, y in pyro.markov(enumerate(data)): + probs = init_probs if x is None else transition_probs[x] + x = pyro.sample("x_{}".format(i), dist.Categorical(probs)) + + elbo = TraceEnum_ELBO() + elbo.loss_and_grads(model, guide, data) + + # These golden values simply test agreement between parallel and sequential. + expected_grads = { + 2: { + "transition_probs": [[0.1029949, -0.1029949], [0.1029949, -0.1029949]], + "emission_probs": [[0.75, -0.75], [0.25, -0.25]], + }, + 3: { + "transition_probs": [[0.25748726, -0.25748726], [0.25748726, -0.25748726]], + "emission_probs": [[1.125, -1.125], [0.375, -0.375]], + }, + 10: { + "transition_probs": [[1.64832076, -1.64832076], [1.64832076, -1.64832076]], + "emission_probs": [[3.75, -3.75], [1.25, -1.25]], + }, + 20: { + "transition_probs": [[3.70781687, -3.70781687], [3.70781687, -3.70781687]], + "emission_probs": [[7.5, -7.5], [2.5, -2.5]], + }, + 22: { + "transition_probs": [[4.11979618, -4.11979618], [4.11979618, -4.11979618]], + "emission_probs": [[8.25, -8.25], [2.75, -2.75]], + }, + 30: { + "transition_probs": [[5.76771452, -5.76771452], [5.76771452, -5.76771452]], + "emission_probs": [[11.25, -11.25], [3.75, -3.75]], + }, + } + + if num_steps not in expected_grads: + return + for name, value in pyro.get_param_store().named_parameters(): + actual = value.grad + expected = torch.tensor(expected_grads[num_steps][name]) + assert_equal( + actual, + expected, + msg="".join( + [ + "\nexpected {}.grad = {}".format(name, expected.cpu().numpy()), + "\n actual {}.grad = {}".format( + name, actual.detach().cpu().numpy() + ), + ] + ), + ) + + +@pytest.mark.parametrize("num_steps", [2, 3, 4, 5, 10, 20, _skip_cuda(30)]) +def test_hmm_enumerate_model(num_steps): + data = dist.Categorical(torch.tensor([0.5, 0.5])).sample((num_steps,)) + + @config_enumerate + def model(data): + transition_probs = pyro.param( + "transition_probs", + torch.tensor([[0.75, 0.25], [0.25, 0.75]]), + constraint=constraints.simplex, + ) + emission_probs = pyro.param( + "emission_probs", + torch.tensor([[0.75, 0.25], [0.25, 0.75]]), + constraint=constraints.simplex, + ) + x = 0 + for t, y in pyro.markov(enumerate(data)): + x = pyro.sample("x_{}".format(t), dist.Categorical(transition_probs[x])) + pyro.sample("y_{}".format(t), dist.Categorical(emission_probs[x]), obs=y) + logger.debug("{}\t{}".format(t, tuple(x.shape))) + + def guide(data): + pass + + elbo = TraceEnum_ELBO() + elbo.differentiable_loss(model, guide, data) + + +@pytest.mark.parametrize("num_steps", [2, 3, 4, 5, 10, 20, _skip_cuda(30)]) +def test_hmm_enumerate_model_and_guide(num_steps): + data = dist.Categorical(torch.tensor([0.5, 0.5])).sample((num_steps,)) + + def model(data): + transition_probs = pyro.param( + "transition_probs", + torch.tensor([[0.75, 0.25], [0.25, 0.75]]), + constraint=constraints.simplex, + ) + emission_probs = pyro.param( + "emission_probs", + torch.tensor([[0.75, 0.25], [0.25, 0.75]]), + constraint=constraints.simplex, + ) + x = pyro.sample("x", dist.Categorical(torch.tensor([0.5, 0.5]))) + logger.debug("-1\t{}".format(tuple(x.shape))) + for t, y in pyro.markov(enumerate(data)): + x = pyro.sample( + "x_{}".format(t), + dist.Categorical(transition_probs[x]), + infer={"enumerate": "parallel"}, + ) + pyro.sample("y_{}".format(t), dist.Categorical(emission_probs[x]), obs=y) + logger.debug("{}\t{}".format(t, tuple(x.shape))) + + def guide(data): + init_probs = pyro.param( + "init_probs", torch.tensor([0.75, 0.25]), constraint=constraints.simplex + ) + pyro.sample("x", dist.Categorical(init_probs), infer={"enumerate": "parallel"}) + + elbo = TraceEnum_ELBO() + elbo.differentiable_loss(model, guide, data) + + +def _check_loss_and_grads(expected_loss, actual_loss): + assert_equal( + actual_loss, + expected_loss, + msg="Expected:\n{}\nActual:\n{}".format( + expected_loss.detach().cpu().numpy(), actual_loss.detach().cpu().numpy() + ), + ) + + names = pyro.get_param_store().keys() + params = [pyro.param(name).unconstrained() for name in names] + actual_grads = grad(actual_loss, params, allow_unused=True, retain_graph=True) + expected_grads = grad(expected_loss, params, allow_unused=True, retain_graph=True) + for name, actual_grad, expected_grad in zip(names, actual_grads, expected_grads): + if actual_grad is None or expected_grad is None: + continue + assert_equal( + actual_grad, + expected_grad, + msg="{}\nExpected:\n{}\nActual:\n{}".format( + name, + expected_grad.detach().cpu().numpy(), + actual_grad.detach().cpu().numpy(), + ), + ) + + +@pytest.mark.parametrize("scale", [1, 10]) +def test_elbo_enumerate_1(scale): + pyro.param( + "guide_probs_x", torch.tensor([0.1, 0.9]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_x", torch.tensor([0.4, 0.6]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_y", + torch.tensor([[0.75, 0.25], [0.55, 0.45]]), + constraint=constraints.simplex, + ) + pyro.param( + "model_probs_z", torch.tensor([0.3, 0.7]), constraint=constraints.simplex + ) + + @poutine.scale(scale=scale) + def auto_model(): + probs_x = pyro.param("model_probs_x") + probs_y = pyro.param("model_probs_y") + probs_z = pyro.param("model_probs_z") + x = pyro.sample("x", dist.Categorical(probs_x)) + pyro.sample("y", dist.Categorical(probs_y[x]), infer={"enumerate": "parallel"}) + pyro.sample("z", dist.Categorical(probs_z), obs=torch.tensor(0)) + + @poutine.scale(scale=scale) + def hand_model(): + probs_x = pyro.param("model_probs_x") + probs_z = pyro.param("model_probs_z") + pyro.sample("x", dist.Categorical(probs_x)) + pyro.sample("z", dist.Categorical(probs_z), obs=torch.tensor(0)) + + @config_enumerate + @poutine.scale(scale=scale) + def guide(): + probs_x = pyro.param("guide_probs_x") + pyro.sample("x", dist.Categorical(probs_x)) + + elbo = TraceEnum_ELBO(strict_enumeration_warning=False) + auto_loss = elbo.differentiable_loss(auto_model, guide) + hand_loss = elbo.differentiable_loss(hand_model, guide) + _check_loss_and_grads(hand_loss, auto_loss) + + +@pytest.mark.parametrize("scale", [1, 10]) +def test_elbo_enumerate_2(scale): + pyro.param( + "guide_probs_x", torch.tensor([0.1, 0.9]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_x", torch.tensor([0.4, 0.6]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_y", + torch.tensor([[0.75, 0.25], [0.55, 0.45]]), + constraint=constraints.simplex, + ) + pyro.param( + "model_probs_z", + torch.tensor([[0.3, 0.7], [0.2, 0.8]]), + constraint=constraints.simplex, + ) + + @poutine.scale(scale=scale) + def auto_model(): + probs_x = pyro.param("model_probs_x") + probs_y = pyro.param("model_probs_y") + probs_z = pyro.param("model_probs_z") + x = pyro.sample("x", dist.Categorical(probs_x)) + y = pyro.sample( + "y", dist.Categorical(probs_y[x]), infer={"enumerate": "parallel"} + ) + pyro.sample("z", dist.Categorical(probs_z[y]), obs=torch.tensor(0)) + + @poutine.scale(scale=scale) + def hand_model(): + probs_x = pyro.param("model_probs_x") + probs_y = pyro.param("model_probs_y") + probs_z = pyro.param("model_probs_z") + probs_yz = probs_y.mm(probs_z) + x = pyro.sample("x", dist.Categorical(probs_x)) + pyro.sample("z", dist.Categorical(probs_yz[x]), obs=torch.tensor(0)) + + @config_enumerate + @poutine.scale(scale=scale) + def guide(): + probs_x = pyro.param("guide_probs_x") + pyro.sample("x", dist.Categorical(probs_x)) + + elbo = TraceEnum_ELBO(strict_enumeration_warning=False) + auto_loss = elbo.differentiable_loss(auto_model, guide) + hand_loss = elbo.differentiable_loss(hand_model, guide) + _check_loss_and_grads(hand_loss, auto_loss) + + +@pytest.mark.parametrize("scale", [1, 10]) +def test_elbo_enumerate_3(scale): + pyro.param( + "guide_probs_x", torch.tensor([0.1, 0.9]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_x", torch.tensor([0.4, 0.6]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_y", + torch.tensor([[0.75, 0.25], [0.55, 0.45]]), + constraint=constraints.simplex, + ) + pyro.param( + "model_probs_z", + torch.tensor([[0.3, 0.7], [0.2, 0.8]]), + constraint=constraints.simplex, + ) + + def auto_model(): + probs_x = pyro.param("model_probs_x") + probs_y = pyro.param("model_probs_y") + probs_z = pyro.param("model_probs_z") + x = pyro.sample("x", dist.Categorical(probs_x)) + with poutine.scale(scale=scale): + y = pyro.sample( + "y", dist.Categorical(probs_y[x]), infer={"enumerate": "parallel"} + ) + pyro.sample("z", dist.Categorical(probs_z[y]), obs=torch.tensor(0)) + + def hand_model(): + probs_x = pyro.param("model_probs_x") + probs_y = pyro.param("model_probs_y") + probs_z = pyro.param("model_probs_z") + probs_yz = probs_y.mm(probs_z) + x = pyro.sample("x", dist.Categorical(probs_x)) + with poutine.scale(scale=scale): + pyro.sample("z", dist.Categorical(probs_yz[x]), obs=torch.tensor(0)) + + @config_enumerate + def guide(): + probs_x = pyro.param("guide_probs_x") + pyro.sample("x", dist.Categorical(probs_x)) + + elbo = TraceEnum_ELBO(strict_enumeration_warning=False) + auto_loss = elbo.differentiable_loss(auto_model, guide) + hand_loss = elbo.differentiable_loss(hand_model, guide) + _check_loss_and_grads(hand_loss, auto_loss) + + +@pytest.mark.parametrize("scale", [1, 10]) +@pytest.mark.parametrize( + "num_samples,num_masked", + [(1, 1), (2, 2), (3, 2)], + ids=["single", "batch", "masked"], +) +def test_elbo_enumerate_plate_1(num_samples, num_masked, scale): + # +---------+ + # x ----> y ----> z | + # | N | + # +---------+ + pyro.param( + "guide_probs_x", torch.tensor([0.1, 0.9]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_x", torch.tensor([0.4, 0.6]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_y", + torch.tensor([[0.75, 0.25], [0.55, 0.45]]), + constraint=constraints.simplex, + ) + pyro.param( + "model_probs_z", + torch.tensor([[0.3, 0.7], [0.2, 0.8]]), + constraint=constraints.simplex, + ) + + def auto_model(data): + probs_x = pyro.param("model_probs_x") + probs_y = pyro.param("model_probs_y") + probs_z = pyro.param("model_probs_z") + x = pyro.sample("x", dist.Categorical(probs_x)) + with poutine.scale(scale=scale): + y = pyro.sample( + "y", dist.Categorical(probs_y[x]), infer={"enumerate": "parallel"} + ) + if num_masked == num_samples: + with pyro.plate("data", len(data)): + pyro.sample("z", dist.Categorical(probs_z[y]), obs=data) + else: + with pyro.plate("data", len(data)): + with poutine.mask(mask=torch.arange(num_samples) < num_masked): + pyro.sample("z", dist.Categorical(probs_z[y]), obs=data) + + def hand_model(data): + probs_x = pyro.param("model_probs_x") + probs_y = pyro.param("model_probs_y") + probs_z = pyro.param("model_probs_z") + x = pyro.sample("x", dist.Categorical(probs_x)) + with poutine.scale(scale=scale): + y = pyro.sample( + "y", dist.Categorical(probs_y[x]), infer={"enumerate": "parallel"} + ) + for i in pyro.plate("data", num_masked): + pyro.sample("z_{}".format(i), dist.Categorical(probs_z[y]), obs=data[i]) + + @config_enumerate + def guide(data): + probs_x = pyro.param("guide_probs_x") + pyro.sample("x", dist.Categorical(probs_x)) + + data = dist.Categorical(torch.tensor([0.3, 0.7])).sample((num_samples,)) + elbo = TraceEnum_ELBO(max_plate_nesting=1) + auto_loss = elbo.differentiable_loss(auto_model, guide, data) + elbo = TraceEnum_ELBO(max_plate_nesting=0) + hand_loss = elbo.differentiable_loss(hand_model, guide, data) + _check_loss_and_grads(hand_loss, auto_loss) + + +@pytest.mark.parametrize("scale", [1, 10]) +@pytest.mark.parametrize( + "num_samples,num_masked", + [(1, 1), (2, 2), (3, 2)], + ids=["single", "batch", "masked"], +) +def test_elbo_enumerate_plate_2(num_samples, num_masked, scale): + # +-----------------+ + # x ----> y ----> z | + # | N | + # +-----------------+ + pyro.param( + "guide_probs_x", torch.tensor([0.1, 0.9]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_x", torch.tensor([0.4, 0.6]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_y", + torch.tensor([[0.75, 0.25], [0.55, 0.45]]), + constraint=constraints.simplex, + ) + pyro.param( + "model_probs_z", + torch.tensor([[0.3, 0.7], [0.2, 0.8]]), + constraint=constraints.simplex, + ) + + def auto_model(data): + probs_x = pyro.param("model_probs_x") + probs_y = pyro.param("model_probs_y") + probs_z = pyro.param("model_probs_z") + x = pyro.sample("x", dist.Categorical(probs_x)) + with poutine.scale(scale=scale): + with pyro.plate("data", len(data)): + if num_masked == num_samples: + y = pyro.sample( + "y", + dist.Categorical(probs_y[x]), + infer={"enumerate": "parallel"}, + ) + pyro.sample("z", dist.Categorical(probs_z[y]), obs=data) + else: + with poutine.mask(mask=torch.arange(num_samples) < num_masked): + y = pyro.sample( + "y", + dist.Categorical(probs_y[x]), + infer={"enumerate": "parallel"}, + ) + pyro.sample("z", dist.Categorical(probs_z[y]), obs=data) + + def hand_model(data): + probs_x = pyro.param("model_probs_x") + probs_y = pyro.param("model_probs_y") + probs_z = pyro.param("model_probs_z") + x = pyro.sample("x", dist.Categorical(probs_x)) + with poutine.scale(scale=scale): + for i in pyro.plate("data", num_masked): + y = pyro.sample( + "y_{}".format(i), + dist.Categorical(probs_y[x]), + infer={"enumerate": "parallel"}, + ) + pyro.sample("z_{}".format(i), dist.Categorical(probs_z[y]), obs=data[i]) + + @config_enumerate + def guide(data): + probs_x = pyro.param("guide_probs_x") + pyro.sample("x", dist.Categorical(probs_x)) + + data = dist.Categorical(torch.tensor([0.3, 0.7])).sample((num_samples,)) + elbo = TraceEnum_ELBO(max_plate_nesting=1) + auto_loss = elbo.differentiable_loss(auto_model, guide, data) + hand_loss = elbo.differentiable_loss(hand_model, guide, data) + _check_loss_and_grads(hand_loss, auto_loss) + + +@pytest.mark.parametrize("scale", [1, 10]) +@pytest.mark.parametrize( + "num_samples,num_masked", + [(1, 1), (2, 2), (3, 2)], + ids=["single", "batch", "masked"], +) +def test_elbo_enumerate_plate_3(num_samples, num_masked, scale): + # +-----------------------+ + # | x ----> y ----> z | + # | N | + # +-----------------------+ + # This plate should remain unreduced since all enumeration is in a single plate. + pyro.param( + "guide_probs_x", torch.tensor([0.1, 0.9]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_x", torch.tensor([0.4, 0.6]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_y", + torch.tensor([[0.75, 0.25], [0.55, 0.45]]), + constraint=constraints.simplex, + ) + pyro.param( + "model_probs_z", + torch.tensor([[0.3, 0.7], [0.2, 0.8]]), + constraint=constraints.simplex, + ) + + @poutine.scale(scale=scale) + def auto_model(data): + probs_x = pyro.param("model_probs_x") + probs_y = pyro.param("model_probs_y") + probs_z = pyro.param("model_probs_z") + with pyro.plate("data", len(data)): + if num_masked == num_samples: + x = pyro.sample("x", dist.Categorical(probs_x)) + y = pyro.sample( + "y", dist.Categorical(probs_y[x]), infer={"enumerate": "parallel"} + ) + pyro.sample("z", dist.Categorical(probs_z[y]), obs=data) + else: + with poutine.mask(mask=torch.arange(num_samples) < num_masked): + x = pyro.sample("x", dist.Categorical(probs_x)) + y = pyro.sample( + "y", + dist.Categorical(probs_y[x]), + infer={"enumerate": "parallel"}, + ) + pyro.sample("z", dist.Categorical(probs_z[y]), obs=data) + + @poutine.scale(scale=scale) + @config_enumerate + def auto_guide(data): + probs_x = pyro.param("guide_probs_x") + with pyro.plate("data", len(data)): + if num_masked == num_samples: + pyro.sample("x", dist.Categorical(probs_x)) + else: + with poutine.mask(mask=torch.arange(num_samples) < num_masked): + pyro.sample("x", dist.Categorical(probs_x)) + + @poutine.scale(scale=scale) + def hand_model(data): + probs_x = pyro.param("model_probs_x") + probs_y = pyro.param("model_probs_y") + probs_z = pyro.param("model_probs_z") + for i in pyro.plate("data", num_masked): + x = pyro.sample("x_{}".format(i), dist.Categorical(probs_x)) + y = pyro.sample( + "y_{}".format(i), + dist.Categorical(probs_y[x]), + infer={"enumerate": "parallel"}, + ) + pyro.sample("z_{}".format(i), dist.Categorical(probs_z[y]), obs=data[i]) + + @poutine.scale(scale=scale) + @config_enumerate + def hand_guide(data): + probs_x = pyro.param("guide_probs_x") + for i in pyro.plate("data", num_masked): + pyro.sample("x_{}".format(i), dist.Categorical(probs_x)) + + data = dist.Categorical(torch.tensor([0.3, 0.7])).sample((num_samples,)) + elbo = TraceEnum_ELBO(max_plate_nesting=1, strict_enumeration_warning=False) + auto_loss = elbo.differentiable_loss(auto_model, auto_guide, data) + hand_loss = elbo.differentiable_loss(hand_model, hand_guide, data) + _check_loss_and_grads(hand_loss, auto_loss) + + +@pytest.mark.parametrize("scale", [1, 10]) +@pytest.mark.parametrize( + "outer_obs,inner_obs", [(False, True), (True, False), (True, True)] +) +def test_elbo_enumerate_plate_4(outer_obs, inner_obs, scale): + # a ---> outer_obs + # \ + # +-----\------------------+ + # | \ | + # | b ---> inner_obs N=2 | + # +------------------------+ + # This tests two different observations, one outside and one inside an plate. + pyro.param("probs_a", torch.tensor([0.4, 0.6]), constraint=constraints.simplex) + pyro.param("probs_b", torch.tensor([0.6, 0.4]), constraint=constraints.simplex) + pyro.param("locs", torch.tensor([-1.0, 1.0])) + pyro.param("scales", torch.tensor([1.0, 2.0]), constraint=constraints.positive) + outer_data = torch.tensor(2.0) + inner_data = torch.tensor([0.5, 1.5]) + + @poutine.scale(scale=scale) + def auto_model(): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + locs = pyro.param("locs") + scales = pyro.param("scales") + a = pyro.sample("a", dist.Categorical(probs_a), infer={"enumerate": "parallel"}) + if outer_obs: + pyro.sample("outer_obs", dist.Normal(0.0, scales[a]), obs=outer_data) + with pyro.plate("inner", 2): + b = pyro.sample( + "b", dist.Categorical(probs_b), infer={"enumerate": "parallel"} + ) + if inner_obs: + pyro.sample( + "inner_obs", dist.Normal(locs[b], scales[a]), obs=inner_data + ) + + @poutine.scale(scale=scale) + def hand_model(): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + locs = pyro.param("locs") + scales = pyro.param("scales") + a = pyro.sample("a", dist.Categorical(probs_a), infer={"enumerate": "parallel"}) + if outer_obs: + pyro.sample("outer_obs", dist.Normal(0.0, scales[a]), obs=outer_data) + for i in pyro.plate("inner", 2): + b = pyro.sample( + "b_{}".format(i), + dist.Categorical(probs_b), + infer={"enumerate": "parallel"}, + ) + if inner_obs: + pyro.sample( + "inner_obs_{}".format(i), + dist.Normal(locs[b], scales[a]), + obs=inner_data[i], + ) + + def guide(): + pass + + elbo = TraceEnum_ELBO(max_plate_nesting=1) + auto_loss = elbo.differentiable_loss(auto_model, guide) + elbo = TraceEnum_ELBO(max_plate_nesting=0) + hand_loss = elbo.differentiable_loss(hand_model, guide) + _check_loss_and_grads(hand_loss, auto_loss) + + +def test_elbo_enumerate_plate_5(): + # Guide Model + # a + # +---------------|--+ + # | M=2 V | + # | b ----> c | + # +------------------+ + pyro.param( + "model_probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_b", torch.tensor([0.6, 0.4]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_c", + torch.tensor( + [[[0.4, 0.5, 0.1], [0.3, 0.5, 0.2]], [[0.3, 0.4, 0.3], [0.4, 0.4, 0.2]]] + ), + constraint=constraints.simplex, + ) + pyro.param( + "guide_probs_b", torch.tensor([0.8, 0.2]), constraint=constraints.simplex + ) + data = torch.tensor([1, 2]) + + @config_enumerate + def model_plate(): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + with pyro.plate("b_axis", 2): + b = pyro.sample("b", dist.Categorical(probs_b)) + pyro.sample("c", dist.Categorical(Vindex(probs_c)[a, b]), obs=data) + + @config_enumerate + def guide_plate(): + probs_b = pyro.param("guide_probs_b") + with pyro.plate("b_axis", 2): + pyro.sample("b", dist.Categorical(probs_b)) + + @config_enumerate + def model_iplate(): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + for i in pyro.plate("b_axis", 2): + b = pyro.sample("b_{}".format(i), dist.Categorical(probs_b)) + pyro.sample( + "c_{}".format(i), dist.Categorical(Vindex(probs_c)[a, b]), obs=data[i] + ) + + @config_enumerate + def guide_iplate(): + probs_b = pyro.param("guide_probs_b") + for i in pyro.plate("b_axis", 2): + pyro.sample("b_{}".format(i), dist.Categorical(probs_b)) + + elbo = TraceEnum_ELBO(max_plate_nesting=0) + expected_loss = elbo.differentiable_loss(model_iplate, guide_iplate) + elbo = TraceEnum_ELBO(max_plate_nesting=1) + with pytest.raises( + ValueError, match="Expected model enumeration to be no more global than guide" + ): + actual_loss = elbo.differentiable_loss(model_plate, guide_plate) + # This never gets run because we don't support this yet. + _check_loss_and_grads(expected_loss, actual_loss) + + +@pytest.mark.parametrize("enumerate1", ["parallel", "sequential"]) +def test_elbo_enumerate_plate_6(enumerate1): + # Guide Model + # +-------+ + # b ----> c <---- a + # | M=2 | + # +-------+ + # This tests that sequential enumeration over b works, even though + # model-side enumeration moves c into b's plate via contraction. + pyro.param( + "model_probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_b", torch.tensor([0.6, 0.4]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_c", + torch.tensor( + [[[0.4, 0.5, 0.1], [0.3, 0.5, 0.2]], [[0.3, 0.4, 0.3], [0.4, 0.4, 0.2]]] + ), + constraint=constraints.simplex, + ) + pyro.param( + "guide_probs_b", torch.tensor([0.8, 0.2]), constraint=constraints.simplex + ) + data = torch.tensor([1, 2]) + + @config_enumerate + def model_plate(): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + b = pyro.sample("b", dist.Categorical(probs_b)) + with pyro.plate("b_axis", 2): + pyro.sample("c", dist.Categorical(Vindex(probs_c)[a, b]), obs=data) + + @config_enumerate + def model_iplate(): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + b = pyro.sample("b", dist.Categorical(probs_b)) + for i in pyro.plate("b_axis", 2): + pyro.sample( + "c_{}".format(i), dist.Categorical(Vindex(probs_c)[a, b]), obs=data[i] + ) + + @config_enumerate(default=enumerate1) + def guide(): + probs_b = pyro.param("guide_probs_b") + pyro.sample("b", dist.Categorical(probs_b)) + + elbo = TraceEnum_ELBO(max_plate_nesting=0) + expected_loss = elbo.differentiable_loss(model_iplate, guide) + elbo = TraceEnum_ELBO(max_plate_nesting=1) + actual_loss = elbo.differentiable_loss(model_plate, guide) + _check_loss_and_grads(expected_loss, actual_loss) + + +@pytest.mark.parametrize("scale", [1, 10]) +def test_elbo_enumerate_plate_7(scale): + # Guide Model + # a -----> b + # | | + # +-|--------|----------------+ + # | V V | + # | c -----> d -----> e N=2 | + # +---------------------------+ + # This tests a mixture of model and guide enumeration. + pyro.param( + "model_probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_b", + torch.tensor([[0.6, 0.4], [0.4, 0.6]]), + constraint=constraints.simplex, + ) + pyro.param( + "model_probs_c", + torch.tensor([[0.75, 0.25], [0.55, 0.45]]), + constraint=constraints.simplex, + ) + pyro.param( + "model_probs_d", + torch.tensor([[[0.4, 0.6], [0.3, 0.7]], [[0.3, 0.7], [0.2, 0.8]]]), + constraint=constraints.simplex, + ) + pyro.param( + "model_probs_e", + torch.tensor([[0.75, 0.25], [0.55, 0.45]]), + constraint=constraints.simplex, + ) + pyro.param( + "guide_probs_a", torch.tensor([0.35, 0.64]), constraint=constraints.simplex + ) + pyro.param( + "guide_probs_c", + torch.tensor([[0.0, 1.0], [1.0, 0.0]]), # deterministic + constraint=constraints.simplex, + ) + + @poutine.scale(scale=scale) + def auto_model(data): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + probs_d = pyro.param("model_probs_d") + probs_e = pyro.param("model_probs_e") + a = pyro.sample("a", dist.Categorical(probs_a)) + b = pyro.sample( + "b", dist.Categorical(probs_b[a]), infer={"enumerate": "parallel"} + ) + with pyro.plate("data", 2): + c = pyro.sample("c", dist.Categorical(probs_c[a])) + d = pyro.sample( + "d", + dist.Categorical(Vindex(probs_d)[b, c]), + infer={"enumerate": "parallel"}, + ) + pyro.sample("obs", dist.Categorical(probs_e[d]), obs=data) + + @poutine.scale(scale=scale) + def auto_guide(data): + probs_a = pyro.param("guide_probs_a") + probs_c = pyro.param("guide_probs_c") + a = pyro.sample("a", dist.Categorical(probs_a), infer={"enumerate": "parallel"}) + with pyro.plate("data", 2): + pyro.sample("c", dist.Categorical(probs_c[a])) + + @poutine.scale(scale=scale) + def hand_model(data): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + probs_d = pyro.param("model_probs_d") + probs_e = pyro.param("model_probs_e") + a = pyro.sample("a", dist.Categorical(probs_a)) + b = pyro.sample( + "b", dist.Categorical(probs_b[a]), infer={"enumerate": "parallel"} + ) + for i in pyro.plate("data", 2): + c = pyro.sample("c_{}".format(i), dist.Categorical(probs_c[a])) + d = pyro.sample( + "d_{}".format(i), + dist.Categorical(Vindex(probs_d)[b, c]), + infer={"enumerate": "parallel"}, + ) + pyro.sample("obs_{}".format(i), dist.Categorical(probs_e[d]), obs=data[i]) + + @poutine.scale(scale=scale) + def hand_guide(data): + probs_a = pyro.param("guide_probs_a") + probs_c = pyro.param("guide_probs_c") + a = pyro.sample("a", dist.Categorical(probs_a), infer={"enumerate": "parallel"}) + for i in pyro.plate("data", 2): + pyro.sample("c_{}".format(i), dist.Categorical(probs_c[a])) + + data = torch.tensor([0, 0]) + elbo = TraceEnum_ELBO(max_plate_nesting=1) + auto_loss = elbo.differentiable_loss(auto_model, auto_guide, data) + elbo = TraceEnum_ELBO(max_plate_nesting=0) + hand_loss = elbo.differentiable_loss(hand_model, hand_guide, data) + _check_loss_and_grads(hand_loss, auto_loss) + + +@pytest.mark.parametrize("scale", [1, 10]) +def test_elbo_enumerate_plates_1(scale): + # +-----------------+ + # | a ----> b M=2 | + # +-----------------+ + # +-----------------+ + # | c ----> d N=3 | + # +-----------------+ + # This tests two unrelated plates. + # Each should remain uncontracted. + pyro.param("probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex) + pyro.param( + "probs_b", + torch.tensor([[0.6, 0.4], [0.4, 0.6]]), + constraint=constraints.simplex, + ) + pyro.param("probs_c", torch.tensor([0.75, 0.25]), constraint=constraints.simplex) + pyro.param( + "probs_d", + torch.tensor([[0.4, 0.6], [0.3, 0.7]]), + constraint=constraints.simplex, + ) + b_data = torch.tensor([0, 1]) + d_data = torch.tensor([0, 0, 1]) + + @config_enumerate + @poutine.scale(scale=scale) + def auto_model(): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + probs_d = pyro.param("probs_d") + with pyro.plate("a_axis", 2): + a = pyro.sample("a", dist.Categorical(probs_a)) + pyro.sample("b", dist.Categorical(probs_b[a]), obs=b_data) + with pyro.plate("c_axis", 3): + c = pyro.sample("c", dist.Categorical(probs_c)) + pyro.sample("d", dist.Categorical(probs_d[c]), obs=d_data) + + @config_enumerate + @poutine.scale(scale=scale) + def hand_model(): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + probs_d = pyro.param("probs_d") + for i in pyro.plate("a_axis", 2): + a = pyro.sample("a_{}".format(i), dist.Categorical(probs_a)) + pyro.sample("b_{}".format(i), dist.Categorical(probs_b[a]), obs=b_data[i]) + for j in pyro.plate("c_axis", 3): + c = pyro.sample("c_{}".format(j), dist.Categorical(probs_c)) + pyro.sample("d_{}".format(j), dist.Categorical(probs_d[c]), obs=d_data[j]) + + def guide(): + pass + + elbo = TraceEnum_ELBO(max_plate_nesting=1) + auto_loss = elbo.differentiable_loss(auto_model, guide) + elbo = TraceEnum_ELBO(max_plate_nesting=0) + hand_loss = elbo.differentiable_loss(hand_model, guide) + _check_loss_and_grads(hand_loss, auto_loss) + + +@pytest.mark.parametrize("scale", [1, 10]) +def test_elbo_enumerate_plates_2(scale): + # +---------+ +---------+ + # | b <---- a ----> c | + # | M=2 | | N=3 | + # +---------+ +---------+ + # This tests two different plates with recycled dimension. + pyro.param("probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex) + pyro.param( + "probs_b", + torch.tensor([[0.6, 0.4], [0.4, 0.6]]), + constraint=constraints.simplex, + ) + pyro.param( + "probs_c", + torch.tensor([[0.75, 0.25], [0.55, 0.45]]), + constraint=constraints.simplex, + ) + b_data = torch.tensor([0, 1]) + c_data = torch.tensor([0, 0, 1]) + + @config_enumerate + @poutine.scale(scale=scale) + def auto_model(): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + with pyro.plate("b_axis", 2): + pyro.sample("b", dist.Categorical(probs_b[a]), obs=b_data) + with pyro.plate("c_axis", 3): + pyro.sample("c", dist.Categorical(probs_c[a]), obs=c_data) + + @config_enumerate + @poutine.scale(scale=scale) + def hand_model(): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + for i in pyro.plate("b_axis", 2): + pyro.sample("b_{}".format(i), dist.Categorical(probs_b[a]), obs=b_data[i]) + for j in pyro.plate("c_axis", 3): + pyro.sample("c_{}".format(j), dist.Categorical(probs_c[a]), obs=c_data[j]) + + def guide(): + pass + + elbo = TraceEnum_ELBO(max_plate_nesting=1) + auto_loss = elbo.differentiable_loss(auto_model, guide) + elbo = TraceEnum_ELBO(max_plate_nesting=0) + hand_loss = elbo.differentiable_loss(hand_model, guide) + _check_loss_and_grads(hand_loss, auto_loss) + + +@pytest.mark.parametrize("scale", [1, 10]) +def test_elbo_enumerate_plates_3(scale): + # +--------------------+ + # | +----------+ | + # a -------> b | | + # | | N=2 | | + # | +----------+ M=2 | + # +--------------------+ + # This is tests the case of multiple plate contractions in + # a single step. + pyro.param("probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex) + pyro.param( + "probs_b", + torch.tensor([[0.6, 0.4], [0.4, 0.6]]), + constraint=constraints.simplex, + ) + data = torch.tensor([[0, 1], [0, 0]]) + + @config_enumerate + @poutine.scale(scale=scale) + def auto_model(): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + a = pyro.sample("a", dist.Categorical(probs_a)) + with pyro.plate("outer", 2): + with pyro.plate("inner", 2): + pyro.sample("b", dist.Categorical(probs_b[a]), obs=data) + + @config_enumerate + @poutine.scale(scale=scale) + def hand_model(): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + inner = pyro.plate("inner", 2) + a = pyro.sample("a", dist.Categorical(probs_a)) + for i in pyro.plate("outer", 2): + for j in inner: + pyro.sample( + "b_{}_{}".format(i, j), dist.Categorical(probs_b[a]), obs=data[i, j] + ) + + def guide(): + pass + + elbo = TraceEnum_ELBO(max_plate_nesting=2) + auto_loss = elbo.differentiable_loss(auto_model, guide) + elbo = TraceEnum_ELBO(max_plate_nesting=0) + hand_loss = elbo.differentiable_loss(hand_model, guide) + _check_loss_and_grads(hand_loss, auto_loss) + + +@pytest.mark.parametrize("scale", [1, 10]) +def test_elbo_enumerate_plates_4(scale): + # +--------------------+ + # | +----------+ | + # a ----> b ----> c | | + # | | N=2 | | + # | M=2 +----------+ | + # +--------------------+ + pyro.param("probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex) + pyro.param( + "probs_b", + torch.tensor([[0.6, 0.4], [0.4, 0.6]]), + constraint=constraints.simplex, + ) + pyro.param( + "probs_c", + torch.tensor([[0.4, 0.6], [0.3, 0.7]]), + constraint=constraints.simplex, + ) + + @config_enumerate + @poutine.scale(scale=scale) + def auto_model(data): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + with pyro.plate("outer", 2): + b = pyro.sample("b", dist.Categorical(probs_b[a])) + with pyro.plate("inner", 2): + pyro.sample("c", dist.Categorical(probs_c[b]), obs=data) + + @config_enumerate + @poutine.scale(scale=scale) + def hand_model(data): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + inner = pyro.plate("inner", 2) + a = pyro.sample("a", dist.Categorical(probs_a)) + for i in pyro.plate("outer", 2): + b = pyro.sample("b_{}".format(i), dist.Categorical(probs_b[a])) + for j in inner: + pyro.sample( + "c_{}_{}".format(i, j), dist.Categorical(probs_c[b]), obs=data[i, j] + ) + + def guide(data): + pass + + data = torch.tensor([[0, 1], [0, 0]]) + elbo = TraceEnum_ELBO(max_plate_nesting=2) + auto_loss = elbo.differentiable_loss(auto_model, guide, data) + elbo = TraceEnum_ELBO(max_plate_nesting=0) + hand_loss = elbo.differentiable_loss(hand_model, guide, data) + _check_loss_and_grads(hand_loss, auto_loss) + + +@pytest.mark.parametrize("scale", [1, 10]) +def test_elbo_enumerate_plates_5(scale): + # a + # | \ + # +--|---\------------+ + # | V +-\--------+ | + # | b ----> c | | + # | | N=2 | | + # | M=2 +----------+ | + # +-------------------+ + pyro.param("probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex) + pyro.param( + "probs_b", + torch.tensor([[0.6, 0.4], [0.4, 0.6]]), + constraint=constraints.simplex, + ) + pyro.param( + "probs_c", + torch.tensor([[[0.4, 0.6], [0.3, 0.7]], [[0.2, 0.8], [0.1, 0.9]]]), + constraint=constraints.simplex, + ) + data = torch.tensor([[0, 1], [0, 0]]) + + @config_enumerate + @poutine.scale(scale=scale) + def auto_model(): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + with pyro.plate("outer", 2): + b = pyro.sample("b", dist.Categorical(probs_b[a])) + with pyro.plate("inner", 2): + pyro.sample("c", dist.Categorical(Vindex(probs_c)[a, b]), obs=data) + + @config_enumerate + @poutine.scale(scale=scale) + def hand_model(): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + inner = pyro.plate("inner", 2) + a = pyro.sample("a", dist.Categorical(probs_a)) + for i in pyro.plate("outer", 2): + b = pyro.sample("b_{}".format(i), dist.Categorical(probs_b[a])) + for j in inner: + pyro.sample( + "c_{}_{}".format(i, j), + dist.Categorical(Vindex(probs_c)[a, b]), + obs=data[i, j], + ) + + def guide(): + pass + + elbo = TraceEnum_ELBO(max_plate_nesting=2) + auto_loss = elbo.differentiable_loss(auto_model, guide) + elbo = TraceEnum_ELBO(max_plate_nesting=0) + hand_loss = elbo.differentiable_loss(hand_model, guide) + _check_loss_and_grads(hand_loss, auto_loss) + + +@pytest.mark.parametrize("scale", [1, 10]) +def test_elbo_enumerate_plates_6(scale): + # +----------+ + # | M=2 | + # a ----> b | + # | | | | + # +--|-------|--+ | + # | V | V | | + # | c ----> d | | + # | | | | + # | N=2 +------|---+ + # +-------------+ + # This tests different ways of mixing two independence contexts, + # where each can be either sequential or vectorized plate. + pyro.param("probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex) + pyro.param( + "probs_b", + torch.tensor([[0.6, 0.4], [0.4, 0.6]]), + constraint=constraints.simplex, + ) + pyro.param( + "probs_c", + torch.tensor([[0.75, 0.25], [0.55, 0.45]]), + constraint=constraints.simplex, + ) + pyro.param( + "probs_d", + torch.tensor([[[0.4, 0.6], [0.3, 0.7]], [[0.3, 0.7], [0.2, 0.8]]]), + constraint=constraints.simplex, + ) + + @config_enumerate + @poutine.scale(scale=scale) + def model_iplate_iplate(data): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + probs_d = pyro.param("probs_d") + b_axis = pyro.plate("b_axis", 2) + c_axis = pyro.plate("c_axis", 2) + a = pyro.sample("a", dist.Categorical(probs_a)) + b = [ + pyro.sample("b_{}".format(i), dist.Categorical(probs_b[a])) for i in b_axis + ] + c = [ + pyro.sample("c_{}".format(j), dist.Categorical(probs_c[a])) for j in c_axis + ] + for i in b_axis: + for j in c_axis: + pyro.sample( + "d_{}_{}".format(i, j), + dist.Categorical(Vindex(probs_d)[b[i], c[j]]), + obs=data[i, j], + ) + + @config_enumerate + @poutine.scale(scale=scale) + def model_iplate_plate(data): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + probs_d = pyro.param("probs_d") + b_axis = pyro.plate("b_axis", 2) + c_axis = pyro.plate("c_axis", 2) + a = pyro.sample("a", dist.Categorical(probs_a)) + b = [ + pyro.sample("b_{}".format(i), dist.Categorical(probs_b[a])) for i in b_axis + ] + with c_axis: + c = pyro.sample("c", dist.Categorical(probs_c[a])) + for i in b_axis: + with c_axis: + pyro.sample( + "d_{}".format(i), + dist.Categorical(Vindex(probs_d)[b[i], c]), + obs=data[i], + ) + + @config_enumerate + @poutine.scale(scale=scale) + def model_plate_iplate(data): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + probs_d = pyro.param("probs_d") + b_axis = pyro.plate("b_axis", 2) + c_axis = pyro.plate("c_axis", 2) + a = pyro.sample("a", dist.Categorical(probs_a)) + with b_axis: + b = pyro.sample("b", dist.Categorical(probs_b[a])) + c = [ + pyro.sample("c_{}".format(j), dist.Categorical(probs_c[a])) for j in c_axis + ] + with b_axis: + for j in c_axis: + pyro.sample( + "d_{}".format(j), + dist.Categorical(Vindex(probs_d)[b, c[j]]), + obs=data[:, j], + ) + + @config_enumerate + @poutine.scale(scale=scale) + def model_plate_plate(data): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + probs_d = pyro.param("probs_d") + b_axis = pyro.plate("b_axis", 2, dim=-1) + c_axis = pyro.plate("c_axis", 2, dim=-2) + a = pyro.sample("a", dist.Categorical(probs_a)) + with b_axis: + b = pyro.sample("b", dist.Categorical(probs_b[a])) + with c_axis: + c = pyro.sample("c", dist.Categorical(probs_c[a])) + with b_axis, c_axis: + pyro.sample("d", dist.Categorical(Vindex(probs_d)[b, c]), obs=data) + + def guide(data): + pass + + # Check that either one of the sequential plates can be promoted to be vectorized. + data = torch.tensor([[0, 1], [0, 0]]) + elbo = TraceEnum_ELBO(max_plate_nesting=0) + loss_iplate_iplate = elbo.differentiable_loss(model_iplate_iplate, guide, data) + elbo = TraceEnum_ELBO(max_plate_nesting=1) + loss_plate_iplate = elbo.differentiable_loss(model_plate_iplate, guide, data) + loss_iplate_plate = elbo.differentiable_loss(model_iplate_plate, guide, data) + _check_loss_and_grads(loss_iplate_iplate, loss_plate_iplate) + _check_loss_and_grads(loss_iplate_iplate, loss_iplate_plate) + + # But promoting both to plates should result in an error. + elbo = TraceEnum_ELBO(max_plate_nesting=2) + with pytest.raises( + NotImplementedError, match="Expected tree-structured plate nesting.*" + ): + elbo.differentiable_loss(model_plate_plate, guide, data) + + +@pytest.mark.parametrize("scale", [1, 10]) +def test_elbo_enumerate_plates_7(scale): + # +-------------+ + # | N=2 | + # a -------> c | + # | | | | + # +--|----------|--+ | + # | | | V | | + # | V | e | | + # | b ----> d | | + # | | | | + # | M=2 +---------|---+ + # +----------------+ + # This tests tree-structured dependencies among variables but + # non-tree dependencies among plate nestings. + pyro.param("probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex) + pyro.param( + "probs_b", + torch.tensor([[0.6, 0.4], [0.4, 0.6]]), + constraint=constraints.simplex, + ) + pyro.param( + "probs_c", + torch.tensor([[0.75, 0.25], [0.55, 0.45]]), + constraint=constraints.simplex, + ) + pyro.param( + "probs_d", + torch.tensor([[0.3, 0.7], [0.2, 0.8]]), + constraint=constraints.simplex, + ) + pyro.param( + "probs_e", + torch.tensor([[0.4, 0.6], [0.3, 0.7]]), + constraint=constraints.simplex, + ) + + @config_enumerate + @poutine.scale(scale=scale) + def model_iplate_iplate(data): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + probs_d = pyro.param("probs_d") + probs_e = pyro.param("probs_e") + b_axis = pyro.plate("b_axis", 2) + c_axis = pyro.plate("c_axis", 2) + a = pyro.sample("a", dist.Categorical(probs_a)) + b = [ + pyro.sample("b_{}".format(i), dist.Categorical(probs_b[a])) for i in b_axis + ] + c = [ + pyro.sample("c_{}".format(j), dist.Categorical(probs_c[a])) for j in c_axis + ] + for i in b_axis: + for j in c_axis: + pyro.sample( + "d_{}_{}".format(i, j), + dist.Categorical(probs_d[b[i]]), + obs=data[i, j], + ) + pyro.sample( + "e_{}_{}".format(i, j), + dist.Categorical(probs_e[c[j]]), + obs=data[i, j], + ) + + @config_enumerate + @poutine.scale(scale=scale) + def model_iplate_plate(data): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + probs_d = pyro.param("probs_d") + probs_e = pyro.param("probs_e") + b_axis = pyro.plate("b_axis", 2) + c_axis = pyro.plate("c_axis", 2) + a = pyro.sample("a", dist.Categorical(probs_a)) + b = [ + pyro.sample("b_{}".format(i), dist.Categorical(probs_b[a])) for i in b_axis + ] + with c_axis: + c = pyro.sample("c", dist.Categorical(probs_c[a])) + for i in b_axis: + with c_axis: + pyro.sample( + "d_{}".format(i), dist.Categorical(probs_d[b[i]]), obs=data[i] + ) + pyro.sample("e_{}".format(i), dist.Categorical(probs_e[c]), obs=data[i]) + + @config_enumerate + @poutine.scale(scale=scale) + def model_plate_iplate(data): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + probs_d = pyro.param("probs_d") + probs_e = pyro.param("probs_e") + b_axis = pyro.plate("b_axis", 2) + c_axis = pyro.plate("c_axis", 2) + a = pyro.sample("a", dist.Categorical(probs_a)) + with b_axis: + b = pyro.sample("b", dist.Categorical(probs_b[a])) + c = [ + pyro.sample("c_{}".format(j), dist.Categorical(probs_c[a])) for j in c_axis + ] + with b_axis: + for j in c_axis: + pyro.sample( + "d_{}".format(j), dist.Categorical(probs_d[b]), obs=data[:, j] + ) + pyro.sample( + "e_{}".format(j), dist.Categorical(probs_e[c[j]]), obs=data[:, j] + ) + + @config_enumerate + @poutine.scale(scale=scale) + def model_plate_plate(data): + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + probs_d = pyro.param("probs_d") + probs_e = pyro.param("probs_e") + b_axis = pyro.plate("b_axis", 2, dim=-1) + c_axis = pyro.plate("c_axis", 2, dim=-2) + a = pyro.sample("a", dist.Categorical(probs_a)) + with b_axis: + b = pyro.sample("b", dist.Categorical(probs_b[a])) + with c_axis: + c = pyro.sample("c", dist.Categorical(probs_c[a])) + with b_axis, c_axis: + pyro.sample("d", dist.Categorical(probs_d[b]), obs=data) + pyro.sample("e", dist.Categorical(probs_e[c]), obs=data) + + def guide(data): + pass + + # Check that any combination of sequential plates can be promoted to be vectorized. + data = torch.tensor([[0, 1], [0, 0]]) + elbo = TraceEnum_ELBO(max_plate_nesting=0) + loss_iplate_iplate = elbo.differentiable_loss(model_iplate_iplate, guide, data) + elbo = TraceEnum_ELBO(max_plate_nesting=1) + loss_plate_iplate = elbo.differentiable_loss(model_plate_iplate, guide, data) + loss_iplate_plate = elbo.differentiable_loss(model_iplate_plate, guide, data) + elbo = TraceEnum_ELBO(max_plate_nesting=2) + loss_plate_plate = elbo.differentiable_loss(model_plate_plate, guide, data) + _check_loss_and_grads(loss_iplate_iplate, loss_plate_iplate) + _check_loss_and_grads(loss_iplate_iplate, loss_iplate_plate) + _check_loss_and_grads(loss_iplate_iplate, loss_plate_plate) + + +@pytest.mark.parametrize("guide_scale", [1]) +@pytest.mark.parametrize("model_scale", [1]) +@pytest.mark.parametrize( + "outer_vectorized,inner_vectorized,xfail", + [(False, True, False), (True, False, True), (True, True, True)], + ids=["iplate-plate", "plate-iplate", "plate-plate"], +) +def test_elbo_enumerate_plates_8( + model_scale, guide_scale, inner_vectorized, outer_vectorized, xfail +): + # Guide Model + # a + # +-----------|--------+ + # | M=2 +---|------+ | + # | | V N=2 | | + # | b ----> c | | + # | +----------+ | + # +--------------------+ + pyro.param( + "model_probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_b", torch.tensor([0.6, 0.4]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_c", + torch.tensor( + [[[0.4, 0.5, 0.1], [0.3, 0.5, 0.2]], [[0.3, 0.4, 0.3], [0.4, 0.4, 0.2]]] + ), + constraint=constraints.simplex, + ) + pyro.param( + "guide_probs_b", torch.tensor([0.8, 0.2]), constraint=constraints.simplex + ) + data = torch.tensor([[0, 1], [0, 2]]) + + @config_enumerate + @poutine.scale(scale=model_scale) + def model_plate_plate(): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + with pyro.plate("outer", 2): + b = pyro.sample("b", dist.Categorical(probs_b)) + with pyro.plate("inner", 2): + pyro.sample("c", dist.Categorical(Vindex(probs_c)[a, b]), obs=data) + + @config_enumerate + @poutine.scale(scale=model_scale) + def model_iplate_plate(): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + inner = pyro.plate("inner", 2) + a = pyro.sample("a", dist.Categorical(probs_a)) + for i in pyro.plate("outer", 2): + b = pyro.sample("b_{}".format(i), dist.Categorical(probs_b)) + with inner: + pyro.sample( + "c_{}".format(i), + dist.Categorical(Vindex(probs_c)[a, b]), + obs=data[:, i], + ) + + @config_enumerate + @poutine.scale(scale=model_scale) + def model_plate_iplate(): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + with pyro.plate("outer", 2): + b = pyro.sample("b", dist.Categorical(probs_b)) + for j in pyro.plate("inner", 2): + pyro.sample( + "c_{}".format(j), + dist.Categorical(Vindex(probs_c)[a, b]), + obs=data[j], + ) + + @config_enumerate + @poutine.scale(scale=model_scale) + def model_iplate_iplate(): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + inner = pyro.plate("inner", 2) + a = pyro.sample("a", dist.Categorical(probs_a)) + for i in pyro.plate("outer", 2): + b = pyro.sample("b_{}".format(i), dist.Categorical(probs_b)) + for j in inner: + pyro.sample( + "c_{}_{}".format(i, j), + dist.Categorical(Vindex(probs_c)[a, b]), + obs=data[j, i], + ) + + @config_enumerate + @poutine.scale(scale=guide_scale) + def guide_plate(): + probs_b = pyro.param("guide_probs_b") + with pyro.plate("outer", 2): + pyro.sample("b", dist.Categorical(probs_b)) + + @config_enumerate + @poutine.scale(scale=guide_scale) + def guide_iplate(): + probs_b = pyro.param("guide_probs_b") + for i in pyro.plate("outer", 2): + pyro.sample("b_{}".format(i), dist.Categorical(probs_b)) + + elbo = TraceEnum_ELBO(max_plate_nesting=0) + expected_loss = elbo.differentiable_loss(model_iplate_iplate, guide_iplate) + with ExitStack() as stack: + if xfail: + stack.enter_context( + pytest.raises( + ValueError, + match="Expected model enumeration to be no more global than guide", + ) + ) + if inner_vectorized: + if outer_vectorized: + elbo = TraceEnum_ELBO(max_plate_nesting=2) + actual_loss = elbo.differentiable_loss(model_plate_plate, guide_plate) + else: + elbo = TraceEnum_ELBO(max_plate_nesting=1) + actual_loss = elbo.differentiable_loss(model_iplate_plate, guide_iplate) + else: + elbo = TraceEnum_ELBO(max_plate_nesting=1) + actual_loss = elbo.differentiable_loss(model_plate_iplate, guide_plate) + _check_loss_and_grads(expected_loss, actual_loss) + + +def test_elbo_scale(): + # Consider a mixture model with two components, toggled by `which`. + def component_model(data, which, suffix=""): + loc = pyro.param("locs", torch.tensor([-1.0, 1.0]))[which] + with pyro.plate("data" + suffix, len(data)): + pyro.sample("obs" + suffix, dist.Normal(loc, 1.0), obs=data) + + pyro.param( + "mixture_probs", torch.tensor([0.25, 0.75]), constraint=constraints.simplex + ) + + # We can implement this in two ways. + # First consider automatic enumeration in the guide. + def auto_model(data): + mixture_probs = pyro.param("mixture_probs") + which = pyro.sample("which", dist.Categorical(mixture_probs)) + component_model(data, which) + + def auto_guide(data): + mixture_probs = pyro.param("mixture_probs") + pyro.sample( + "which", dist.Categorical(mixture_probs), infer={"enumerate": "parallel"} + ) + + # Second consider explicit enumeration in the model, where we + # marginalize out the `which` variable by hand. + def hand_model(data): + mixture_probs = pyro.param("mixture_probs") + for which in pyro.plate("which", len(mixture_probs)): + with pyro.poutine.scale(scale=mixture_probs[which]): + component_model(data, which, suffix="_{}".format(which)) + + def hand_guide(data): + pass + + data = dist.Normal(0.0, 2.0).sample((3,)) + elbo = TraceEnum_ELBO(max_plate_nesting=1, strict_enumeration_warning=False) + auto_loss = elbo.differentiable_loss(auto_model, auto_guide, data) + hand_loss = elbo.differentiable_loss(hand_model, hand_guide, data) + _check_loss_and_grads(hand_loss, auto_loss) + + +def test_elbo_hmm_growth(): + pyro.clear_param_store() + init_probs = torch.tensor([0.5, 0.5]) + elbo = TraceEnum_ELBO(max_plate_nesting=0) + + def model(data): + transition_probs = pyro.param( + "transition_probs", + torch.tensor([[0.75, 0.25], [0.25, 0.75]]), + constraint=constraints.simplex, + ) + emission_probs = pyro.param( + "emission_probs", + torch.tensor([[0.75, 0.25], [0.25, 0.75]]), + constraint=constraints.simplex, + ) + x = None + for i, y in pyro.markov(enumerate(data)): + probs = init_probs if x is None else transition_probs[x] + x = pyro.sample("x_{}".format(i), dist.Categorical(probs)) + pyro.sample("y_{}".format(i), dist.Categorical(emission_probs[x]), obs=y) + + @config_enumerate + def guide(data): + transition_probs = pyro.param( + "transition_probs", + torch.tensor([[0.75, 0.25], [0.25, 0.75]]), + constraint=constraints.simplex, + ) + x = None + for i, y in pyro.markov(enumerate(data)): + probs = init_probs if x is None else transition_probs[x] + x = pyro.sample("x_{}".format(i), dist.Categorical(probs)) + + sizes = range(3, 1 + int(os.environ.get("GROWTH_SIZE", 15))) + costs = [] + times1 = [] + times2 = [] + for size in sizes: + data = torch.ones(size) + + time0 = timeit.default_timer() + elbo.loss_and_grads(model, guide, data) # compiles paths + time1 = timeit.default_timer() + elbo.loss_and_grads(model, guide, data) # reuses compiled path + time2 = timeit.default_timer() + + times1.append(time1 - time0) + times2.append(time2 - time1) + costs.append(LAST_CACHE_SIZE[0]) + + collated_costs = defaultdict(list) + for counts in costs: + for key, cost in counts.items(): + collated_costs[key].append(cost) + logger.debug( + "\n".join( + [ + "HMM Growth:", + "sizes = {}".format(repr(sizes)), + "costs = {}".format(repr(dict(collated_costs))), + "times1 = {}".format(repr(times1)), + "times2 = {}".format(repr(times2)), + ] + ) + ) + + +@pytest.mark.skipif( + "CUDA_TEST" in os.environ, reason="https://github.com/pyro-ppl/pyro/issues/1380" +) +def test_elbo_dbn_growth(): + pyro.clear_param_store() + elbo = TraceEnum_ELBO(max_plate_nesting=0) + + def model(data): + uniform = torch.tensor([0.5, 0.5]) + probs_z = pyro.param( + "probs_z", + torch.tensor([[0.75, 0.25], [0.25, 0.75]]), + constraint=constraints.simplex, + ) + for i, z in pyro.markov(enumerate(data)): + pyro.sample("x_{}".format(i), dist.Categorical(uniform)) + y = pyro.sample("y_{}".format(i), dist.Categorical(uniform)) + pyro.sample("z_{}".format(i), dist.Categorical(probs_z[y]), obs=z) + + @config_enumerate + def guide(data): + probs_x = pyro.param( + "probs_x", + torch.tensor([[0.75, 0.25], [0.25, 0.75]]), + constraint=constraints.simplex, + ) + probs_y = pyro.param( + "probs_y", + torch.tensor([[[0.75, 0.25], [0.45, 0.55]], [[0.55, 0.45], [0.25, 0.75]]]), + constraint=constraints.simplex, + ) + x = 0 + y = 0 + for i in pyro.markov(range(len(data))): + x = pyro.sample("x_{}".format(i), dist.Categorical(probs_x[x])) + y = pyro.sample("y_{}".format(i), dist.Categorical(probs_y[x, y])) + + sizes = range(3, 1 + int(os.environ.get("GROWTH_SIZE", 15))) + costs = [] + times1 = [] + times2 = [] + for size in sizes: + data = torch.ones(size) + + time0 = timeit.default_timer() + elbo.loss_and_grads(model, guide, data) # compiles paths + time1 = timeit.default_timer() + elbo.loss_and_grads(model, guide, data) # reuses compiled path + time2 = timeit.default_timer() + + times1.append(time1 - time0) + times2.append(time2 - time1) + costs.append(LAST_CACHE_SIZE[0]) + + collated_costs = defaultdict(list) + for counts in costs: + for key, cost in counts.items(): + collated_costs[key].append(cost) + logger.debug( + "\n".join( + [ + "DBN Growth:", + "sizes = {}".format(repr(sizes)), + "costs = {}".format(repr(dict(collated_costs))), + "times1 = {}".format(repr(times1)), + "times2 = {}".format(repr(times2)), + ] + ) + ) + + +@pytest.mark.parametrize("pi_a", [0.33]) +@pytest.mark.parametrize("pi_b", [0.51, 0.77]) +@pytest.mark.parametrize("pi_c", [0.37]) +@pytest.mark.parametrize("N_b", [3, 4]) +@pytest.mark.parametrize("N_c", [5, 6]) +@pytest.mark.parametrize("enumerate1", ["sequential", "parallel"]) +@pytest.mark.parametrize("expand", [True, False]) +def test_bernoulli_pyramid_elbo_gradient( + enumerate1, N_b, N_c, pi_a, pi_b, pi_c, expand +): + pyro.clear_param_store() + + def model(): + a = pyro.sample("a", dist.Bernoulli(0.33)) + with pyro.plate("b_plate", N_b): + b = pyro.sample("b", dist.Bernoulli(0.25 * a + 0.50)) + with pyro.plate("c_plate", N_c): + pyro.sample("c", dist.Bernoulli(0.15 * a + 0.20 * b + 0.32)) + + def guide(): + qa = pyro.param("qa", torch.tensor(pi_a, requires_grad=True)) + qb = pyro.param("qb", torch.tensor(pi_b, requires_grad=True)) + qc = pyro.param("qc", torch.tensor(pi_c, requires_grad=True)) + pyro.sample("a", dist.Bernoulli(qa)) + with pyro.plate("b_plate", N_b): + pyro.sample("b", dist.Bernoulli(qb).expand_by([N_b])) + with pyro.plate("c_plate", N_c): + pyro.sample("c", dist.Bernoulli(qc).expand_by([N_c, N_b])) + + logger.info("Computing gradients using surrogate loss") + elbo = TraceEnum_ELBO(max_plate_nesting=2, strict_enumeration_warning=True) + elbo.loss_and_grads( + model, config_enumerate(guide, default=enumerate1, expand=expand) + ) + actual_grad_qa = pyro.param("qa").grad + actual_grad_qb = pyro.param("qb").grad + actual_grad_qc = pyro.param("qc").grad + + logger.info("Computing analytic gradients") + qa = torch.tensor(pi_a, requires_grad=True) + qb = torch.tensor(pi_b, requires_grad=True) + qc = torch.tensor(pi_c, requires_grad=True) + elbo = kl_divergence(dist.Bernoulli(qa), dist.Bernoulli(0.33)) + elbo = elbo + N_b * qa * kl_divergence(dist.Bernoulli(qb), dist.Bernoulli(0.75)) + elbo = elbo + N_b * (1.0 - qa) * kl_divergence( + dist.Bernoulli(qb), dist.Bernoulli(0.50) + ) + elbo = elbo + N_c * N_b * qa * qb * kl_divergence( + dist.Bernoulli(qc), dist.Bernoulli(0.67) + ) + elbo = elbo + N_c * N_b * (1.0 - qa) * qb * kl_divergence( + dist.Bernoulli(qc), dist.Bernoulli(0.52) + ) + elbo = elbo + N_c * N_b * qa * (1.0 - qb) * kl_divergence( + dist.Bernoulli(qc), dist.Bernoulli(0.47) + ) + elbo = elbo + N_c * N_b * (1.0 - qa) * (1.0 - qb) * kl_divergence( + dist.Bernoulli(qc), dist.Bernoulli(0.32) + ) + expected_grad_qa, expected_grad_qb, expected_grad_qc = grad(elbo, [qa, qb, qc]) + + prec = 0.001 + + assert_equal( + actual_grad_qa, + expected_grad_qa, + prec=prec, + msg="".join( + [ + "\nqa expected = {}".format(expected_grad_qa.data.cpu().numpy()), + "\nqa actual = {}".format(actual_grad_qa.data.cpu().numpy()), + ] + ), + ) + assert_equal( + actual_grad_qb, + expected_grad_qb, + prec=prec, + msg="".join( + [ + "\nqb expected = {}".format(expected_grad_qb.data.cpu().numpy()), + "\nqb actual = {}".format(actual_grad_qb.data.cpu().numpy()), + ] + ), + ) + assert_equal( + actual_grad_qc, + expected_grad_qc, + prec=prec, + msg="".join( + [ + "\nqc expected = {}".format(expected_grad_qc.data.cpu().numpy()), + "\nqc actual = {}".format(actual_grad_qc.data.cpu().numpy()), + ] + ), + ) + + +@pytest.mark.parametrize("pi_a", [0.33]) +@pytest.mark.parametrize("pi_b", [0.51]) +@pytest.mark.parametrize("pi_c", [0.37]) +@pytest.mark.parametrize("pi_d", [0.29]) +@pytest.mark.parametrize("b_factor", [0.03, 0.04]) +@pytest.mark.parametrize("c_factor", [0.04, 0.06]) +@pytest.mark.parametrize("d_offset", [0.32]) +@pytest.mark.parametrize("enumerate1", ["sequential", "parallel"]) +@pytest.mark.parametrize("expand", [True, False]) +def test_bernoulli_non_tree_elbo_gradient( + enumerate1, + b_factor, + c_factor, + pi_a, + pi_b, + pi_c, + pi_d, + expand, + d_offset, + N_b=2, + N_c=2, +): + pyro.clear_param_store() + + def model(): + a = pyro.sample("a", dist.Bernoulli(0.33)) + b = pyro.sample("b", dist.Bernoulli(0.25 * a + 0.50)) + c = pyro.sample("c", dist.Bernoulli(0.25 * a + 0.10 * b + 0.50)) + pyro.sample("d", dist.Bernoulli(b_factor * b + c_factor * c + d_offset)) + + def guide(): + qa = pyro.param("qa", torch.tensor(pi_a, requires_grad=True)) + qb = pyro.param("qb", torch.tensor(pi_b, requires_grad=True)) + qc = pyro.param("qc", torch.tensor(pi_c, requires_grad=True)) + qd = pyro.param("qd", torch.tensor(pi_d, requires_grad=True)) + pyro.sample("a", dist.Bernoulli(qa)) + pyro.sample("b", dist.Bernoulli(qb)) + pyro.sample("c", dist.Bernoulli(qc)) + pyro.sample("d", dist.Bernoulli(qd)) + + logger.info("Computing gradients using surrogate loss") + elbo = TraceEnum_ELBO(max_plate_nesting=2, strict_enumeration_warning=True) + elbo.loss_and_grads( + model, config_enumerate(guide, default=enumerate1, expand=expand) + ) + actual_grad_qa = pyro.param("qa").grad + actual_grad_qb = pyro.param("qb").grad + actual_grad_qc = pyro.param("qc").grad + actual_grad_qd = pyro.param("qd").grad + + logger.info("Computing analytic gradients") + qa = torch.tensor(pi_a, requires_grad=True) + qb = torch.tensor(pi_b, requires_grad=True) + qc = torch.tensor(pi_c, requires_grad=True) + qd = torch.tensor(pi_d, requires_grad=True) + + elbo = kl_divergence(dist.Bernoulli(qa), dist.Bernoulli(0.33)) + elbo = elbo + qa * kl_divergence(dist.Bernoulli(qb), dist.Bernoulli(0.75)) + elbo = elbo + (1.0 - qa) * kl_divergence(dist.Bernoulli(qb), dist.Bernoulli(0.50)) + + elbo = elbo + qa * qb * kl_divergence(dist.Bernoulli(qc), dist.Bernoulli(0.85)) + elbo = elbo + (1.0 - qa) * qb * kl_divergence( + dist.Bernoulli(qc), dist.Bernoulli(0.60) + ) + elbo = elbo + qa * (1.0 - qb) * kl_divergence( + dist.Bernoulli(qc), dist.Bernoulli(0.75) + ) + elbo = elbo + (1.0 - qa) * (1.0 - qb) * kl_divergence( + dist.Bernoulli(qc), dist.Bernoulli(0.50) + ) + + elbo = elbo + qb * qc * kl_divergence( + dist.Bernoulli(qd), dist.Bernoulli(b_factor + c_factor + d_offset) + ) + elbo = elbo + (1.0 - qb) * qc * kl_divergence( + dist.Bernoulli(qd), dist.Bernoulli(c_factor + d_offset) + ) + elbo = elbo + qb * (1.0 - qc) * kl_divergence( + dist.Bernoulli(qd), dist.Bernoulli(b_factor + d_offset) + ) + elbo = elbo + (1.0 - qb) * (1.0 - qc) * kl_divergence( + dist.Bernoulli(qd), dist.Bernoulli(d_offset) + ) + + expected_grad_qa, expected_grad_qb, expected_grad_qc, expected_grad_qd = grad( + elbo, [qa, qb, qc, qd] + ) + + prec = 0.0001 + + assert_equal( + actual_grad_qa, + expected_grad_qa, + prec=prec, + msg="".join( + [ + "\nqa expected = {}".format(expected_grad_qa.data.cpu().numpy()), + "\nqa actual = {}".format(actual_grad_qa.data.cpu().numpy()), + ] + ), + ) + assert_equal( + actual_grad_qb, + expected_grad_qb, + prec=prec, + msg="".join( + [ + "\nqb expected = {}".format(expected_grad_qb.data.cpu().numpy()), + "\nqb actual = {}".format(actual_grad_qb.data.cpu().numpy()), + ] + ), + ) + assert_equal( + actual_grad_qc, + expected_grad_qc, + prec=prec, + msg="".join( + [ + "\nqc expected = {}".format(expected_grad_qc.data.cpu().numpy()), + "\nqc actual = {}".format(actual_grad_qc.data.cpu().numpy()), + ] + ), + ) + assert_equal( + actual_grad_qd, + expected_grad_qd, + prec=prec, + msg="".join( + [ + "\nqd expected = {}".format(expected_grad_qd.data.cpu().numpy()), + "\nqd actual = {}".format(actual_grad_qd.data.cpu().numpy()), + ] + ), + ) + + +@pytest.mark.parametrize("gate", [0.1, 0.25, 0.5, 0.75, 0.9]) +@pytest.mark.parametrize("rate", [0.1, 1.0, 3.0]) +def test_elbo_zip(gate, rate): + # test for ZIP distribution + def zip_model(data): + gate = pyro.param("gate") + rate = pyro.param("rate") + with pyro.plate("data", len(data)): + pyro.sample("obs", dist.ZeroInflatedPoisson(rate, gate=gate), obs=data) + + def composite_model(data): + gate = pyro.param("gate") + rate = pyro.param("rate") + dist1 = dist.Delta(torch.tensor(0.0)) + dist0 = dist.Poisson(rate) + with pyro.plate("data", len(data)): + mask = pyro.sample( + "mask", dist.Bernoulli(gate), infer={"enumerate": "parallel"} + ).bool() + pyro.sample("obs", dist.MaskedMixture(mask, dist0, dist1), obs=data) + + def guide(data): + pass + + pyro.param("gate", torch.tensor(gate), constraint=constraints.unit_interval) + pyro.param("rate", torch.tensor(rate), constraint=constraints.positive) + + data = torch.tensor([0.0, 1.0, 2.0]) + elbo = TraceEnum_ELBO(max_plate_nesting=1, strict_enumeration_warning=False) + zip_loss = elbo.differentiable_loss(zip_model, guide, data) + composite_loss = elbo.differentiable_loss(composite_model, guide, data) + _check_loss_and_grads(zip_loss, composite_loss) + + +@pytest.mark.parametrize( + "mixture,scale", + [ + (dist.MixtureOfDiagNormals, [[2.0, 1.0], [1.0, 2], [4.0, 4.0]]), + (dist.MixtureOfDiagNormalsSharedCovariance, [2.0, 1.0]), + ], +) +def test_mixture_of_diag_normals(mixture, scale): + # K = 3, D = 2 + pyro.param("locs", torch.tensor([[0.0, 0.0], [0.0, 1.0], [0.0, 10.0]])) + pyro.param("coord_scale", torch.tensor(scale), constraint=constraints.positive) + pyro.param("component_logits", torch.tensor([0.0, -1.0, 2.0])) + data = torch.tensor([[0.0, 0.0], [1.0, 1.0], [2.0, 3.0], [1.0, 11.0]]) + + def auto_model(): + locs = pyro.param("locs") + coord_scale = pyro.param("coord_scale") + component_logits = pyro.param("component_logits") + with pyro.plate("data", len(data)): + pyro.sample("obs", mixture(locs, coord_scale, component_logits), obs=data) + + def hand_model(): + locs = pyro.param("locs") + coord_scale = pyro.param("coord_scale") + component_logits = pyro.param("component_logits") + with pyro.plate("data", len(data), dim=-2): + which = pyro.sample( + "mask", + dist.Categorical(logits=component_logits), + infer={"enumerate": "parallel"}, + ) + with pyro.plate( + "components", len(component_logits), dim=-1 + ) as component_ind: + with poutine.mask(mask=(which == component_ind)): + pyro.sample( + "obs", + dist.Normal(locs, coord_scale).to_event(1), + obs=data.unsqueeze(-2), + ) + + def guide(): + pass + + elbo = TraceEnum_ELBO(max_plate_nesting=2, strict_enumeration_warning=False) + auto_loss = elbo.differentiable_loss(auto_model, guide) + hand_loss = elbo.differentiable_loss(hand_model, guide) + _check_loss_and_grads(hand_loss, auto_loss) + + +@pytest.mark.parametrize( + "Dist, prior", + [ + (dist.Bernoulli, 0.2), + (dist.Categorical, [0.2, 0.8]), + (dist.Categorical, [0.2, 0.3, 0.5]), + (dist.Categorical, [0.2, 0.3, 0.3, 0.2]), + (dist.OneHotCategorical, [0.2, 0.8]), + (dist.OneHotCategorical, [0.2, 0.3, 0.5]), + (dist.OneHotCategorical, [0.2, 0.3, 0.3, 0.2]), + ], +) +def test_compute_marginals_single(Dist, prior): + prior = torch.tensor(prior) + data = torch.tensor([0.0, 0.1, 0.2, 0.9, 1.0, 1.1]) + + @config_enumerate + def model(): + locs = torch.tensor([-1.0, 0.0, 1.0, 2.0]) + x = pyro.sample("x", Dist(prior)) + if Dist is dist.Bernoulli: + x = x.long() + elif Dist is dist.OneHotCategorical: + x = x.max(-1)[1] + with pyro.plate("data", len(data)): + pyro.sample("obs", dist.Normal(locs[x], 1.0), obs=data) + + # First compute marginals using an empty guide. + def empty_guide(): + pass + + elbo = TraceEnum_ELBO(max_plate_nesting=1) + marginals = elbo.compute_marginals(model, empty_guide) + assert len(marginals) == 1 + assert type(marginals["x"]) is Dist + probs = marginals["x"].probs + assert probs.shape == prior.shape + + # Next insert the computed marginals in an enumerating guide + # and ensure that they are exact, or at least locally optimal. + pyro.param("probs", probs) + + @config_enumerate + def exact_guide(): + probs = pyro.param("probs") + pyro.sample("x", Dist(probs)) + + loss = elbo.differentiable_loss(model, exact_guide) + assert_equal(grad(loss, [pyro.param("probs")])[0], torch.zeros_like(probs)) + + +@pytest.mark.parametrize( + "ok,enumerate_guide,num_particles,vectorize_particles", + [ + (True, None, 1, False), + (False, "sequential", 1, False), + (False, "parallel", 1, False), + (False, None, 2, False), + (False, None, 2, True), + ], +) +def test_compute_marginals_restrictions( + ok, enumerate_guide, num_particles, vectorize_particles +): + @config_enumerate + def model(): + w = pyro.sample("w", dist.Bernoulli(0.1)) + x = pyro.sample("x", dist.Bernoulli(0.2)) + y = pyro.sample("y", dist.Bernoulli(0.3)) + z = pyro.sample("z", dist.Bernoulli(0.4)) + pyro.sample("obs", dist.Normal(0.0, 1.0), obs=w + x + y + z) + + @config_enumerate(default=enumerate_guide) + def guide(): + pyro.sample("w", dist.Bernoulli(0.4)) + pyro.sample("y", dist.Bernoulli(0.7)) + + # Check that the ELBO works fine. + elbo = TraceEnum_ELBO( + max_plate_nesting=0, + num_particles=num_particles, + vectorize_particles=vectorize_particles, + ) + loss = elbo.loss(model, guide) + assert not torch_isnan(loss) + + if ok: + marginals = elbo.compute_marginals(model, guide) + assert set(marginals.keys()) == {"x", "z"} + else: + with pytest.raises(NotImplementedError, match="compute_marginals"): + elbo.compute_marginals(model, guide) + + +@pytest.mark.parametrize("size", [1, 2, 3, 4, 10, 20, _skip_cuda(30)]) +def test_compute_marginals_hmm(size): + @config_enumerate + def model(data): + transition_probs = torch.tensor([[0.75, 0.25], [0.25, 0.75]]) + emission_probs = torch.tensor([[0.75, 0.25], [0.25, 0.75]]) + x = torch.tensor(0) + for i in pyro.markov(range(len(data) + 1)): + if i < len(data): + x = pyro.sample("x_{}".format(i), dist.Categorical(transition_probs[x])) + pyro.sample( + "y_{}".format(i), dist.Categorical(emission_probs[x]), obs=data[i] + ) + else: + pyro.sample( + "x_{}".format(i), + dist.Categorical(transition_probs[x]), + obs=torch.tensor(1), + ) + + def guide(data): + pass + + data = torch.zeros(size, dtype=torch.long) + elbo = TraceEnum_ELBO(max_plate_nesting=0) + marginals = elbo.compute_marginals(model, guide, data) + assert set(marginals.keys()) == {"x_{}".format(i) for i in range(size)} + for i in range(size): + d = marginals["x_{}".format(i)] + assert d.batch_shape == () + + # The x's should be monotonically increasing, since we've observed x[-1]==0 + # and x[size]==1, and since the y's are constant. + for i in range(size - 1): + d1 = marginals["x_{}".format(i)] + d2 = marginals["x_{}".format(i + 1)] + assert d1.probs[0] > d2.probs[0] + assert d1.probs[1] < d2.probs[1] + + +@pytest.mark.parametrize("observed", ["", "a", "b", "ab"]) +def test_marginals_2678(observed): + @config_enumerate + def model(a=None, b=None): + a = pyro.sample("a", dist.Bernoulli(0.75), obs=a) + pyro.sample("b", dist.Bernoulli(1 - 0.25 * a), obs=b) + + def guide(a=None, b=None): + pass + + kwargs = {name: torch.tensor(1.0) for name in observed} + elbo = TraceEnum_ELBO(strict_enumeration_warning=False) + elbo.compute_marginals(model, guide, **kwargs) + + +@pytest.mark.parametrize( + "data", + [ + [None, None], + [torch.tensor(0.0), None], + [None, torch.tensor(0.0)], + [torch.tensor(0.0), torch.tensor(0)], + ], +) +def test_backwardsample_posterior_smoke(data): + @config_enumerate + def model(data): + xs = list(data) + zs = [] + for i in range(2): + K = i + 2 # number of mixture components + zs.append(pyro.sample("z_{}".format(i), dist.Categorical(torch.ones(K)))) + if i == 0: + loc = pyro.param("loc", torch.randn(K))[zs[i]] + xs[i] = pyro.sample( + "x_{}".format(i), dist.Normal(loc, 1.0), obs=data[i] + ) + elif i == 1: + logits = pyro.param("logits", torch.randn(K, 2))[zs[i]] + xs[i] = pyro.sample( + "x_{}".format(i), dist.Categorical(logits=logits), obs=data[i] + ) + + z12 = zs[0] + 2 * zs[1] + pyro.sample("z_12", dist.Categorical(torch.arange(6.0)), obs=z12) + return xs, zs + + def guide(data): + pass + + elbo = TraceEnum_ELBO(max_plate_nesting=1) + xs, zs = elbo.sample_posterior(model, guide, data) + for x, datum in zip(xs, data): + assert datum is None or datum is x + for z in zs: + assert z.shape == () + + +def test_backwardsample_posterior_2(): + num_particles = 10000 + + @config_enumerate + def model(data): + with pyro.plate("particles", num_particles): + p_z = torch.tensor([0.1, 0.9]) + x = pyro.sample("x", dist.Categorical(torch.tensor([0.5, 0.5]))) + z = pyro.sample("z", dist.Bernoulli(p_z[x]), obs=data) + return x, z + + def guide(data): + pass + + elbo = TraceEnum_ELBO(max_plate_nesting=1) + x, z = elbo.sample_posterior(model, guide, data=torch.zeros(num_particles)) + expected = 0.9 + actual = (x.type_as(z) == z).float().mean().item() + assert abs(expected - actual) < 0.05 + + +def test_backwardsample_posterior_3(): + num_particles = 10000 + + @config_enumerate + def model(data): + with pyro.plate("particles", num_particles): + p_z = torch.tensor([[0.9, 0.1], [0.1, 0.9]]) + x = pyro.sample("x", dist.Categorical(torch.tensor([0.5, 0.5]))) + y = pyro.sample("y", dist.Categorical(torch.tensor([0.5, 0.5]))) + z = pyro.sample("z", dist.Bernoulli(p_z[x, y]), obs=data) + return x, y, z + + def guide(data): + pass + + elbo = TraceEnum_ELBO(max_plate_nesting=1) + + x, y, z = elbo.sample_posterior(model, guide, data=torch.ones(num_particles)) + expected = 0.9 + actual = (x == y).float().mean().item() + assert abs(expected - actual) < 0.05 + + x, y, z = elbo.sample_posterior(model, guide, data=torch.zeros(num_particles)) + expected = 0.1 + actual = (x == y).float().mean().item() + assert abs(expected - actual) < 0.05 + + +@pytest.mark.parametrize( + "ok,enumerate_guide,num_particles,vectorize_particles", + [ + (True, None, 1, False), + (False, "sequential", 1, False), + (False, "parallel", 1, False), + (False, None, 2, False), + (False, None, 2, True), + ], +) +def test_backwardsample_posterior_restrictions( + ok, enumerate_guide, num_particles, vectorize_particles +): + @config_enumerate + def model(): + w = pyro.sample("w", dist.Bernoulli(0.1)) + x = pyro.sample("x", dist.Bernoulli(0.2)) + y = pyro.sample("y", dist.Bernoulli(0.3)) + z = pyro.sample("z", dist.Bernoulli(0.4)) + pyro.sample("obs", dist.Normal(0.0, 1.0), obs=w + x + y + z) + return w, x, y, z + + @config_enumerate(default=enumerate_guide) + def guide(): + pyro.sample("w", dist.Bernoulli(0.4)) + pyro.sample("y", dist.Bernoulli(0.7)) + + # Check that the ELBO works fine. + elbo = TraceEnum_ELBO( + max_plate_nesting=0, + num_particles=num_particles, + vectorize_particles=vectorize_particles, + ) + loss = elbo.loss(model, guide) + assert not torch_isnan(loss) + + if ok: + w, x, y, z = elbo.sample_posterior(model, guide) + assert w.shape == () + assert x.shape == () + assert y.shape == () + assert z.shape == () + else: + with pytest.raises(NotImplementedError, match="sample_posterior"): + elbo.sample_posterior(model, guide) + + +@pytest.mark.parametrize("num_samples", [10000, 100000]) +def test_vectorized_importance(num_samples): + pyro.param( + "model_probs_a", torch.tensor([0.45, 0.55]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_b", torch.tensor([0.6, 0.4]), constraint=constraints.simplex + ) + pyro.param( + "model_probs_c", + torch.tensor( + [[[0.4, 0.5, 0.1], [0.3, 0.5, 0.2]], [[0.3, 0.4, 0.3], [0.4, 0.4, 0.2]]] + ), + constraint=constraints.simplex, + ) + + pyro.param( + "guide_probs_a", torch.tensor([0.33, 0.67]), constraint=constraints.simplex + ) + + pyro.param( + "guide_probs_b", torch.tensor([0.8, 0.2]), constraint=constraints.simplex + ) + + data = torch.tensor([[0, 1], [0, 2]]) + + def model(): + probs_a = pyro.param("model_probs_a") + probs_b = pyro.param("model_probs_b") + probs_c = pyro.param("model_probs_c") + a = pyro.sample("a", dist.Categorical(probs_a)) + with pyro.plate("outer", 2): + b = pyro.sample("b", dist.Categorical(probs_b)) + with pyro.plate("inner", 2): + pyro.sample("c", dist.Categorical(Vindex(probs_c)[a, b]), obs=data) + + def guide(): + probs_a = pyro.param("guide_probs_a") + pyro.sample("a", dist.Categorical(probs_a)) + probs_b = pyro.param("guide_probs_b") + with pyro.plate("outer", 2): + pyro.sample("b", dist.Categorical(probs_b)) + + vectorized_weights, _, _ = vectorized_importance_weights( + model, guide, max_plate_nesting=4, num_samples=num_samples + ) + + elbo = Trace_ELBO(vectorize_particles=True, num_particles=num_samples).loss( + model, guide + ) + + assert_equal(vectorized_weights.sum().item() / num_samples, -elbo, prec=0.02) + + +def test_multi_dependence_enumeration(): + """ + This test checks whether enumeration works correctly in the case where multiple downstream + variables are coupled to the same random discrete variable. + This is based on [issue 2223](https://github.com/pyro-ppl/pyro/issues/2223), and should + pass when it has been resolved + """ + K = 5 + d = 2 + N_obs = 3 + + @config_enumerate + def model(N=1): + with pyro.plate("data_plate", N, dim=-2): + mixing_weights = pyro.param( + "pi", torch.ones(K) / K, constraint=constraints.simplex + ) + means = pyro.sample( + "mu", dist.Normal(torch.zeros(K, d), torch.ones(K, d)).to_event(2) + ) + + with pyro.plate("observations", N_obs, dim=-1): + s = pyro.sample("s", dist.Categorical(mixing_weights)) + + pyro.sample("x", dist.Normal(Vindex(means)[..., s, :], 0.1).to_event(1)) + pyro.sample("y", dist.Normal(Vindex(means)[..., s, :], 0.1).to_event(1)) + + x = poutine.trace(model).get_trace(N=2).nodes["x"]["value"] + + pyro.clear_param_store() + conditioned_model = pyro.condition(model, data={"x": x}) + guide = infer.autoguide.AutoDelta(poutine.block(conditioned_model, hide=["s"])) + + elbo = infer.TraceEnum_ELBO(max_plate_nesting=2) + + elbo.loss_and_grads(conditioned_model, guide, x.size(0)) + assert pyro.get_param_store()._params["pi"].grad is not None diff --git a/pyro/source/tests/infer/test_gradient.py b/pyro/source/tests/infer/test_gradient.py new file mode 100644 index 0000000000000000000000000000000000000000..f6bd6f3024343731a50b017b9f80a8db7b908d6d --- /dev/null +++ b/pyro/source/tests/infer/test_gradient.py @@ -0,0 +1,431 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging + +import numpy as np +import pytest +import torch +import torch.optim +from torch.distributions import constraints + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.distributions.testing import fakes +from pyro.infer import ( + SVI, + JitTrace_ELBO, + JitTraceEnum_ELBO, + JitTraceGraph_ELBO, + JitTraceMeanField_ELBO, + Trace_ELBO, + TraceEnum_ELBO, + TraceGraph_ELBO, + TraceMeanField_ELBO, + config_enumerate, +) +from pyro.optim import Adam +from tests.common import assert_equal, xfail_if_not_implemented, xfail_param + +logger = logging.getLogger(__name__) + + +def DiffTrace_ELBO(*args, **kwargs): + return Trace_ELBO(*args, **kwargs).differentiable_loss + + +@pytest.mark.parametrize( + "reparameterized,has_rsample", + [(True, None), (True, False), (True, True), (False, None)], + ids=["reparam", "reparam-False", "reparam-True", "nonreparam"], +) +@pytest.mark.parametrize( + "Elbo", + [ + Trace_ELBO, + TraceEnum_ELBO, + ], +) +def test_particle_gradient(Elbo, reparameterized, has_rsample): + pyro.clear_param_store() + data = torch.tensor([-0.5, 2.0]) + Normal = dist.Normal if reparameterized else fakes.NonreparameterizedNormal + + def model(): + with pyro.plate("data", len(data)) as ind: + x = data[ind] + z = pyro.sample("z", Normal(0, 1)) + pyro.sample("x", Normal(z, 1), obs=x) + + def guide(): + scale = pyro.param("scale", lambda: torch.tensor([1.0])) + with pyro.plate("data", len(data)): + loc = pyro.param("loc", lambda: torch.zeros(len(data)), event_dim=0) + z_dist = Normal(loc, scale) + if has_rsample is not None: + z_dist.has_rsample_(has_rsample) + pyro.sample("z", z_dist) + + elbo = Elbo( + max_plate_nesting=1, # set this to ensure rng agrees across runs + num_particles=1, + strict_enumeration_warning=False, + ) + + # Elbo gradient estimator + pyro.set_rng_seed(0) + elbo.loss_and_grads(model, guide) + params = dict(pyro.get_param_store().named_parameters()) + actual_grads = {name: param.grad.detach().cpu() for name, param in params.items()} + + # capture sample values and log_probs + pyro.set_rng_seed(0) + guide_tr = poutine.trace(guide).get_trace() + model_tr = poutine.trace(poutine.replay(model, guide_tr)).get_trace() + guide_tr.compute_log_prob() + model_tr.compute_log_prob() + x = data + z = guide_tr.nodes["z"]["value"].data + loc = pyro.param("loc").data + scale = pyro.param("scale").data + + # expected grads + if reparameterized and has_rsample is not False: + # pathwise gradient estimator + expected_grads = { + "scale": ( + -(-z * (z - loc) + (x - z) * (z - loc) + 1).sum(0, keepdim=True) / scale + ), + "loc": -(-z + (x - z)), + } + else: + # score function gradient estimator + elbo = ( + model_tr.nodes["x"]["log_prob"].data + + model_tr.nodes["z"]["log_prob"].data + - guide_tr.nodes["z"]["log_prob"].data + ) + dlogq_dloc = (z - loc) / scale**2 + dlogq_dscale = (z - loc) ** 2 / scale**3 - 1 / scale + if Elbo is TraceEnum_ELBO: + expected_grads = { + "scale": -(dlogq_dscale * elbo - dlogq_dscale).sum(0, keepdim=True), + "loc": -(dlogq_dloc * elbo - dlogq_dloc), + } + elif Elbo is Trace_ELBO: + # expected value of dlogq_dscale and dlogq_dloc is zero + expected_grads = { + "scale": -(dlogq_dscale * elbo).sum(0, keepdim=True), + "loc": -(dlogq_dloc * elbo), + } + + for name in sorted(params): + logger.info("expected {} = {}".format(name, expected_grads[name])) + logger.info("actual {} = {}".format(name, actual_grads[name])) + + assert_equal(actual_grads, expected_grads, prec=1e-4) + + +@pytest.mark.parametrize("scale", [1.0, 2.0], ids=["unscaled", "scaled"]) +@pytest.mark.parametrize( + "reparameterized,has_rsample", + [(True, None), (True, False), (True, True), (False, None)], + ids=["reparam", "reparam-False", "reparam-True", "nonreparam"], +) +@pytest.mark.parametrize("subsample", [False, True], ids=["full", "subsample"]) +@pytest.mark.parametrize( + "Elbo,local_samples", + [ + (Trace_ELBO, False), + (DiffTrace_ELBO, False), + (TraceGraph_ELBO, False), + (TraceMeanField_ELBO, False), + (TraceEnum_ELBO, False), + (TraceEnum_ELBO, True), + ], +) +def test_subsample_gradient( + Elbo, reparameterized, has_rsample, subsample, local_samples, scale +): + pyro.clear_param_store() + data = torch.tensor([-0.5, 2.0]) + subsample_size = 1 if subsample else len(data) + precision = 0.06 * scale + Normal = dist.Normal if reparameterized else fakes.NonreparameterizedNormal + + def model(subsample): + with pyro.plate("data", len(data), subsample_size, subsample) as ind: + x = data[ind] + z = pyro.sample("z", Normal(0, 1)) + pyro.sample("x", Normal(z, 1), obs=x) + + def guide(subsample): + scale = pyro.param("scale", lambda: torch.tensor([1.0])) + with pyro.plate("data", len(data), subsample_size, subsample): + loc = pyro.param("loc", lambda: torch.zeros(len(data)), event_dim=0) + z_dist = Normal(loc, scale) + if has_rsample is not None: + z_dist.has_rsample_(has_rsample) + pyro.sample("z", z_dist) + + if scale != 1.0: + model = poutine.scale(model, scale=scale) + guide = poutine.scale(guide, scale=scale) + + num_particles = 50000 + if local_samples: + guide = config_enumerate(guide, num_samples=num_particles) + num_particles = 1 + + optim = Adam({"lr": 0.1}) + elbo = Elbo( + max_plate_nesting=1, # set this to ensure rng agrees across runs + num_particles=num_particles, + vectorize_particles=True, + strict_enumeration_warning=False, + ) + inference = SVI(model, guide, optim, loss=elbo) + with xfail_if_not_implemented(): + if subsample_size == 1: + inference.loss_and_grads( + model, guide, subsample=torch.tensor([0], dtype=torch.long) + ) + inference.loss_and_grads( + model, guide, subsample=torch.tensor([1], dtype=torch.long) + ) + else: + inference.loss_and_grads( + model, guide, subsample=torch.tensor([0, 1], dtype=torch.long) + ) + params = dict(pyro.get_param_store().named_parameters()) + normalizer = 2 if subsample else 1 + actual_grads = { + name: param.grad.detach().cpu().numpy() / normalizer + for name, param in params.items() + } + + expected_grads = { + "loc": scale * np.array([0.5, -2.0]), + "scale": scale * np.array([2.0]), + } + for name in sorted(params): + logger.info("expected {} = {}".format(name, expected_grads[name])) + logger.info("actual {} = {}".format(name, actual_grads[name])) + assert_equal(actual_grads, expected_grads, prec=precision) + + +@pytest.mark.parametrize( + "reparameterized", [True, False], ids=["reparam", "nonreparam"] +) +@pytest.mark.parametrize( + "Elbo", [Trace_ELBO, DiffTrace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO] +) +def test_plate(Elbo, reparameterized): + pyro.clear_param_store() + data = torch.tensor([-0.5, 2.0]) + num_particles = 200000 + precision = 0.06 + Normal = dist.Normal if reparameterized else fakes.NonreparameterizedNormal + + def model(): + particles_plate = pyro.plate("particles", num_particles, dim=-2) + data_plate = pyro.plate("data", len(data), dim=-1) + + pyro.sample("nuisance_a", Normal(0, 1)) + with particles_plate, data_plate: + z = pyro.sample("z", Normal(0, 1)) + pyro.sample("nuisance_b", Normal(2, 3)) + with data_plate, particles_plate: + pyro.sample("x", Normal(z, 1), obs=data) + pyro.sample("nuisance_c", Normal(4, 5)) + + def guide(): + loc = pyro.param("loc", torch.zeros(len(data))) + scale = pyro.param("scale", torch.tensor([1.0])) + + pyro.sample("nuisance_c", Normal(4, 5)) + with pyro.plate("particles", num_particles, dim=-2): + with pyro.plate("data", len(data), dim=-1): + pyro.sample("z", Normal(loc, scale)) + pyro.sample("nuisance_b", Normal(2, 3)) + pyro.sample("nuisance_a", Normal(0, 1)) + + optim = Adam({"lr": 0.1}) + elbo = Elbo(strict_enumeration_warning=False) + inference = SVI(model, guide, optim, loss=elbo) + inference.loss_and_grads(model, guide) + params = dict(pyro.get_param_store().named_parameters()) + actual_grads = { + name: param.grad.detach().cpu().numpy() / num_particles + for name, param in params.items() + } + + expected_grads = {"loc": np.array([0.5, -2.0]), "scale": np.array([2.0])} + for name in sorted(params): + logger.info("expected {} = {}".format(name, expected_grads[name])) + logger.info("actual {} = {}".format(name, actual_grads[name])) + assert_equal(actual_grads, expected_grads, prec=precision) + + +@pytest.mark.parametrize( + "reparameterized", [True, False], ids=["reparam", "nonreparam"] +) +@pytest.mark.parametrize( + "Elbo", [Trace_ELBO, DiffTrace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO] +) +def test_plate_elbo_vectorized_particles(Elbo, reparameterized): + pyro.clear_param_store() + data = torch.tensor([-0.5, 2.0]) + num_particles = 200000 + precision = 0.06 + Normal = dist.Normal if reparameterized else fakes.NonreparameterizedNormal + + def model(): + data_plate = pyro.plate("data", len(data)) + + pyro.sample("nuisance_a", Normal(0, 1)) + with data_plate: + z = pyro.sample("z", Normal(0, 1)) + pyro.sample("nuisance_b", Normal(2, 3)) + with data_plate: + pyro.sample("x", Normal(z, 1), obs=data) + pyro.sample("nuisance_c", Normal(4, 5)) + + def guide(): + loc = pyro.param("loc", torch.zeros(len(data))) + scale = pyro.param("scale", torch.tensor([1.0])) + + pyro.sample("nuisance_c", Normal(4, 5)) + with pyro.plate("data", len(data)): + pyro.sample("z", Normal(loc, scale)) + pyro.sample("nuisance_b", Normal(2, 3)) + pyro.sample("nuisance_a", Normal(0, 1)) + + optim = Adam({"lr": 0.1}) + loss = Elbo( + num_particles=num_particles, + vectorize_particles=True, + strict_enumeration_warning=False, + ) + inference = SVI(model, guide, optim, loss=loss) + inference.loss_and_grads(model, guide) + params = dict(pyro.get_param_store().named_parameters()) + actual_grads = { + name: param.grad.detach().cpu().numpy() for name, param in params.items() + } + + expected_grads = {"loc": np.array([0.5, -2.0]), "scale": np.array([2.0])} + for name in sorted(params): + logger.info("expected {} = {}".format(name, expected_grads[name])) + logger.info("actual {} = {}".format(name, actual_grads[name])) + assert_equal(actual_grads, expected_grads, prec=precision) + + +@pytest.mark.parametrize( + "reparameterized", [True, False], ids=["reparam", "nonreparam"] +) +@pytest.mark.parametrize("subsample", [False, True], ids=["full", "subsample"]) +@pytest.mark.parametrize( + "Elbo", + [ + Trace_ELBO, + TraceGraph_ELBO, + TraceEnum_ELBO, + TraceMeanField_ELBO, + xfail_param( + JitTrace_ELBO, + reason="in broadcast_all: RuntimeError: expected int at position 0, but got: Tensor", + ), + xfail_param( + JitTraceGraph_ELBO, + reason="in broadcast_all: RuntimeError: expected int at position 0, but got: Tensor", + ), + xfail_param( + JitTraceEnum_ELBO, + reason="in broadcast_all: RuntimeError: expected int at position 0, but got: Tensor", + ), + xfail_param( + JitTraceMeanField_ELBO, + reason="in broadcast_all: RuntimeError: expected int at position 0, but got: Tensor", + ), + ], +) +def test_subsample_gradient_sequential(Elbo, reparameterized, subsample): + pyro.clear_param_store() + data = torch.tensor([-0.5, 2.0]) + subsample_size = 1 if subsample else len(data) + num_particles = 5000 + precision = 0.333 + Normal = dist.Normal if reparameterized else fakes.NonreparameterizedNormal + + def model(): + with pyro.plate("data", len(data), subsample_size) as ind: + x = data[ind] + z = pyro.sample("z", Normal(0, 1).expand_by(x.shape)) + pyro.sample("x", Normal(z, 1), obs=x) + + def guide(): + loc = pyro.param("loc", lambda: torch.zeros(len(data), requires_grad=True)) + scale = pyro.param("scale", lambda: torch.tensor([1.0], requires_grad=True)) + with pyro.plate("data", len(data), subsample_size) as ind: + pyro.sample("z", Normal(loc[ind], scale)) + + optim = Adam({"lr": 0.1}) + elbo = Elbo(num_particles=10, strict_enumeration_warning=False) + inference = SVI(model, guide, optim, elbo) + iters = num_particles // 10 + with xfail_if_not_implemented(): + for _ in range(iters): + inference.loss_and_grads(model, guide) + + params = dict(pyro.get_param_store().named_parameters()) + actual_grads = { + name: param.grad.detach().cpu().numpy() / iters + for name, param in params.items() + } + + expected_grads = {"loc": np.array([0.5, -2.0]), "scale": np.array([2.0])} + for name in sorted(params): + logger.info("expected {} = {}".format(name, expected_grads[name])) + logger.info("actual {} = {}".format(name, actual_grads[name])) + assert_equal(actual_grads, expected_grads, prec=precision) + + +@pytest.mark.stage("funsor") +def test_collapse_beta_binomial(): + pytest.importorskip("funsor") + + total_count = 10 + data = torch.tensor(3.0) + + def model1(): + c1 = pyro.param("c1", torch.tensor(0.5), constraint=constraints.positive) + c0 = pyro.param("c0", torch.tensor(1.5), constraint=constraints.positive) + with poutine.collapse(): + probs = pyro.sample("probs", dist.Beta(c1, c0)) + pyro.sample("obs", dist.Binomial(total_count, probs), obs=data) + + def model2(): + c1 = pyro.param("c1", torch.tensor(0.5), constraint=constraints.positive) + c0 = pyro.param("c0", torch.tensor(1.5), constraint=constraints.positive) + pyro.sample("obs", dist.BetaBinomial(c1, c0, total_count), obs=data) + + trace1 = poutine.trace(model1).get_trace() + trace2 = poutine.trace(model2).get_trace() + assert "probs" in trace1.nodes + assert "obs" not in trace1.nodes + assert "probs" not in trace2.nodes + assert "obs" in trace2.nodes + + logp1 = trace1.log_prob_sum() + logp2 = trace2.log_prob_sum() + assert_equal(logp1.detach().item(), logp2.detach().item()) + + log_c1 = pyro.param("c1").unconstrained() + log_c0 = pyro.param("c0").unconstrained() + grads1 = torch.autograd.grad(logp1, [log_c1, log_c0], retain_graph=True) + grads2 = torch.autograd.grad(logp2, [log_c1, log_c0], retain_graph=True) + for g1, g2, name in zip(grads1, grads2, ["log(c1)", "log(c0)"]): + print(g1, g2) + assert_equal(g1, g2, msg=name) diff --git a/pyro/source/tests/infer/test_inference.py b/pyro/source/tests/infer/test_inference.py new file mode 100644 index 0000000000000000000000000000000000000000..a598ea9c5425f5559d934308d428ac5f919de5c1 --- /dev/null +++ b/pyro/source/tests/infer/test_inference.py @@ -0,0 +1,1007 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging +import math +from unittest import TestCase + +import pytest +import torch +from torch.distributions import constraints + +import pyro +import pyro.contrib.gp.kernels as kernels +import pyro.distributions as dist +import pyro.optim as optim +from pyro import poutine +from pyro.distributions.testing import fakes +from pyro.distributions.testing.rejection_gamma import ShapeAugmentedGamma +from pyro.infer import ( + SVI, + EnergyDistance, + JitTrace_ELBO, + JitTraceEnum_ELBO, + JitTraceGraph_ELBO, + RenyiELBO, + ReweightedWakeSleep, + Trace_ELBO, + Trace_MMD, + TraceEnum_ELBO, + TraceGraph_ELBO, + TraceMeanField_ELBO, + TraceTailAdaptive_ELBO, +) +from pyro.infer.autoguide import AutoDelta +from pyro.infer.reparam import LatentStableReparam +from pyro.infer.util import torch_item +from tests.common import ( + assert_close, + assert_equal, + xfail_if_not_implemented, + xfail_param, +) + +logger = logging.getLogger(__name__) + + +def param_mse(name, target): + return torch.sum(torch.pow(target - pyro.param(name), 2.0)).item() + + +def param_abs_error(name, target): + return torch.sum(torch.abs(target - pyro.param(name))).item() + + +@pytest.mark.stage("integration", "integration_batch_1") +class NormalNormalTests(TestCase): + def setUp(self): + # normal-normal; known covariance + self.lam0 = torch.tensor([0.1, 0.1]) # precision of prior + self.loc0 = torch.tensor([0.0, 0.5]) # prior mean + # known precision of observation noise + self.lam = torch.tensor([6.0, 4.0]) + self.data = torch.tensor([[-0.1, 0.3], [0.00, 0.4], [0.20, 0.5], [0.10, 0.7]]) + self.n_data = torch.tensor([float(len(self.data))]) + self.data_sum = self.data.sum(0) + self.analytic_lam_n = self.lam0 + self.n_data.expand_as(self.lam) * self.lam + self.analytic_log_sig_n = -0.5 * torch.log(self.analytic_lam_n) + self.analytic_loc_n = self.data_sum * ( + self.lam / self.analytic_lam_n + ) + self.loc0 * (self.lam0 / self.analytic_lam_n) + self.batch_size = 4 + self.sample_batch_size = 2 + + def test_elbo_reparameterized(self): + self.do_elbo_test(True, 5000, Trace_ELBO()) + + def test_elbo_analytic_kl(self): + self.do_elbo_test(True, 3000, TraceMeanField_ELBO()) + + def test_elbo_tail_adaptive(self): + self.do_elbo_test( + True, + 3000, + TraceTailAdaptive_ELBO(num_particles=10, vectorize_particles=True), + ) + + def test_elbo_nonreparameterized(self): + self.do_elbo_test(False, 15000, Trace_ELBO()) + + def test_renyi_reparameterized(self): + self.do_elbo_test( + True, 2500, RenyiELBO(num_particles=3, vectorize_particles=False) + ) + + def test_renyi_nonreparameterized(self): + self.do_elbo_test( + False, 7500, RenyiELBO(num_particles=3, vectorize_particles=True) + ) + + def test_rws_reparameterized(self): + self.do_elbo_test(True, 2500, ReweightedWakeSleep(num_particles=3)) + + def test_rws_nonreparameterized(self): + self.do_elbo_test(False, 7500, ReweightedWakeSleep(num_particles=3)) + + def test_mmd_vectorized(self): + z_size = self.loc0.shape[0] + self.do_fit_prior_test( + True, + 1000, + Trace_MMD( + kernel=kernels.RBF( + z_size, + lengthscale=torch.sqrt(torch.tensor(z_size, dtype=torch.float)), + ), + vectorize_particles=True, + num_particles=100, + ), + ) + + def test_mmd_nonvectorized(self): + z_size = self.loc0.shape[0] + self.do_fit_prior_test( + True, + 100, + Trace_MMD( + kernel=kernels.RBF( + z_size, + lengthscale=torch.sqrt(torch.tensor(z_size, dtype=torch.float)), + ), + vectorize_particles=False, + num_particles=100, + ), + lr=0.0146, + ) + + def do_elbo_test(self, reparameterized, n_steps, loss): + pyro.clear_param_store() + + def model(): + loc_latent = pyro.sample( + "loc_latent", + dist.Normal(self.loc0, torch.pow(self.lam0, -0.5)).to_event(1), + ) + with pyro.plate("data", self.batch_size): + pyro.sample( + "obs", + dist.Normal(loc_latent, torch.pow(self.lam, -0.5)).to_event(1), + obs=self.data, + ) + return loc_latent + + def guide(): + loc_q = pyro.param("loc_q", self.analytic_loc_n.detach() + 0.134) + log_sig_q = pyro.param( + "log_sig_q", self.analytic_log_sig_n.data.detach() - 0.14 + ) + sig_q = torch.exp(log_sig_q) + Normal = dist.Normal if reparameterized else fakes.NonreparameterizedNormal + pyro.sample("loc_latent", Normal(loc_q, sig_q).to_event(1)) + + adam = optim.Adam({"lr": 0.001}) + svi = SVI(model, guide, adam, loss=loss) + + for k in range(n_steps): + svi.step() + + loc_error = param_mse("loc_q", self.analytic_loc_n) + log_sig_error = param_mse("log_sig_q", self.analytic_log_sig_n) + + assert_equal(0.0, loc_error, prec=0.05) + assert_equal(0.0, log_sig_error, prec=0.05) + + def do_fit_prior_test(self, reparameterized, n_steps, loss, debug=False, lr=0.001): + pyro.clear_param_store() + + def model(): + with pyro.plate("samples", self.sample_batch_size): + pyro.sample( + "loc_latent", + dist.Normal( + torch.stack([self.loc0] * self.sample_batch_size, dim=0), + torch.stack( + [torch.pow(self.lam0, -0.5)] * self.sample_batch_size, dim=0 + ), + ).to_event(1), + ) + + def guide(): + loc_q = pyro.param("loc_q", self.loc0.detach() + 0.134) + log_sig_q = pyro.param( + "log_sig_q", -0.5 * torch.log(self.lam0).data.detach() - 0.14 + ) + sig_q = torch.exp(log_sig_q) + Normal = dist.Normal if reparameterized else fakes.NonreparameterizedNormal + with pyro.plate("samples", self.sample_batch_size): + pyro.sample( + "loc_latent", + Normal( + torch.stack([loc_q] * self.sample_batch_size, dim=0), + torch.stack([sig_q] * self.sample_batch_size, dim=0), + ).to_event(1), + ) + + adam = optim.Adam({"lr": lr}) + svi = SVI(model, guide, adam, loss=loss) + + alpha = 0.99 + for k in range(n_steps): + svi.step() + if debug: + loc_error = param_mse("loc_q", self.loc0) + log_sig_error = param_mse("log_sig_q", -0.5 * torch.log(self.lam0)) + with torch.no_grad(): + if k == 0: + ( + avg_loglikelihood, + avg_penalty, + ) = loss._differentiable_loss_parts(model, guide) + avg_loglikelihood = torch_item(avg_loglikelihood) + avg_penalty = torch_item(avg_penalty) + loglikelihood, penalty = loss._differentiable_loss_parts( + model, guide + ) + avg_loglikelihood = alpha * avg_loglikelihood + ( + 1 - alpha + ) * torch_item(loglikelihood) + avg_penalty = alpha * avg_penalty + (1 - alpha) * torch_item( + penalty + ) + if k % 100 == 0: + print(loc_error, log_sig_error) + print(avg_loglikelihood, avg_penalty) + print() + + loc_error = param_mse("loc_q", self.loc0) + log_sig_error = param_mse("log_sig_q", -0.5 * torch.log(self.lam0)) + assert_equal(0.0, loc_error, prec=0.05) + assert_equal(0.0, log_sig_error, prec=0.05) + + +class TestFixedModelGuide(TestCase): + def setUp(self): + self.data = torch.tensor([2.0]) + self.alpha_q_log_0 = 0.17 * torch.ones(1) + self.beta_q_log_0 = 0.19 * torch.ones(1) + self.alpha_p_log_0 = 0.11 * torch.ones(1) + self.beta_p_log_0 = 0.13 * torch.ones(1) + + def do_test_fixedness(self, fixed_parts): + pyro.clear_param_store() + + def model(): + alpha_p_log = pyro.param("alpha_p_log", self.alpha_p_log_0.clone()) + beta_p_log = pyro.param("beta_p_log", self.beta_p_log_0.clone()) + alpha_p, beta_p = torch.exp(alpha_p_log), torch.exp(beta_p_log) + lambda_latent = pyro.sample("lambda_latent", dist.Gamma(alpha_p, beta_p)) + pyro.sample("obs", dist.Poisson(lambda_latent), obs=self.data) + return lambda_latent + + def guide(): + alpha_q_log = pyro.param("alpha_q_log", self.alpha_q_log_0.clone()) + beta_q_log = pyro.param("beta_q_log", self.beta_q_log_0.clone()) + alpha_q, beta_q = torch.exp(alpha_q_log), torch.exp(beta_q_log) + pyro.sample("lambda_latent", dist.Gamma(alpha_q, beta_q)) + + def per_param_args(param_name): + if "model" in fixed_parts and "p_" in param_name: + return {"lr": 0.0} + if "guide" in fixed_parts and "q_" in param_name: + return {"lr": 0.0} + return {"lr": 0.01} + + adam = optim.Adam(per_param_args) + svi = SVI(model, guide, adam, loss=Trace_ELBO()) + + for _ in range(3): + svi.step() + + model_unchanged = ( + torch.equal(pyro.param("alpha_p_log").data, self.alpha_p_log_0) + ) and (torch.equal(pyro.param("beta_p_log").data, self.beta_p_log_0)) + guide_unchanged = ( + torch.equal(pyro.param("alpha_q_log").data, self.alpha_q_log_0) + ) and (torch.equal(pyro.param("beta_q_log").data, self.beta_q_log_0)) + model_changed = not model_unchanged + guide_changed = not guide_unchanged + error = ("model" in fixed_parts and model_changed) or ( + "guide" in fixed_parts and guide_changed + ) + return not error + + def test_model_fixed(self): + assert self.do_test_fixedness(fixed_parts=["model"]) + + def test_guide_fixed(self): + assert self.do_test_fixedness(fixed_parts=["guide"]) + + def test_guide_and_model_both_fixed(self): + assert self.do_test_fixedness(fixed_parts=["model", "guide"]) + + def test_guide_and_model_free(self): + assert self.do_test_fixedness(fixed_parts=["bogus_tag"]) + + +@pytest.mark.stage("integration", "integration_batch_2") +class PoissonGammaTests(TestCase): + def setUp(self): + # poisson-gamma model + # gamma prior hyperparameter + self.alpha0 = torch.tensor(1.0) + # gamma prior hyperparameter + self.beta0 = torch.tensor(1.0) + self.data = torch.tensor([1.0, 2.0, 3.0]) + self.n_data = len(self.data) + data_sum = self.data.sum(0) + self.alpha_n = self.alpha0 + data_sum # posterior alpha + self.beta_n = self.beta0 + torch.tensor(float(self.n_data)) # posterior beta + self.sample_batch_size = 2 + + def test_elbo_reparameterized(self): + self.do_elbo_test(True, 10000, Trace_ELBO()) + + def test_elbo_nonreparameterized(self): + self.do_elbo_test(False, 25000, Trace_ELBO()) + + def test_renyi_reparameterized(self): + self.do_elbo_test(True, 5000, RenyiELBO(num_particles=2)) + + def test_renyi_nonreparameterized(self): + self.do_elbo_test(False, 12500, RenyiELBO(alpha=0.2, num_particles=2)) + + def test_rws_reparameterized(self): + self.do_elbo_test(True, 5000, ReweightedWakeSleep(num_particles=2)) + + def test_rws_nonreparameterized(self): + self.do_elbo_test(False, 12500, ReweightedWakeSleep(num_particles=2)) + + def test_mmd_vectorized(self): + z_size = 1 + self.do_fit_prior_test( + True, + 500, + Trace_MMD( + kernel=kernels.RBF( + z_size, + lengthscale=torch.sqrt(torch.tensor(z_size, dtype=torch.float)), + ), + vectorize_particles=True, + num_particles=100, + ), + debug=True, + lr=0.09, + ) + + def do_elbo_test(self, reparameterized, n_steps, loss): + pyro.clear_param_store() + Gamma = dist.Gamma if reparameterized else fakes.NonreparameterizedGamma + + def model(): + lambda_latent = pyro.sample("lambda_latent", Gamma(self.alpha0, self.beta0)) + with pyro.plate("data", self.n_data): + pyro.sample("obs", dist.Poisson(lambda_latent), obs=self.data) + return lambda_latent + + def guide(): + alpha_q = pyro.param( + "alpha_q", + self.alpha_n.detach() + math.exp(0.17), + constraint=constraints.positive, + ) + beta_q = pyro.param( + "beta_q", + self.beta_n.detach() / math.exp(0.143), + constraint=constraints.positive, + ) + pyro.sample("lambda_latent", Gamma(alpha_q, beta_q)) + + adam = optim.Adam({"lr": 0.0002, "betas": (0.97, 0.999)}) + svi = SVI(model, guide, adam, loss) + + for k in range(n_steps): + svi.step() + + assert_equal( + pyro.param("alpha_q"), + self.alpha_n, + prec=0.2, + msg="{} vs {}".format( + pyro.param("alpha_q").detach().cpu().numpy(), + self.alpha_n.detach().cpu().numpy(), + ), + ) + assert_equal( + pyro.param("beta_q"), + self.beta_n, + prec=0.15, + msg="{} vs {}".format( + pyro.param("beta_q").detach().cpu().numpy(), + self.beta_n.detach().cpu().numpy(), + ), + ) + + def do_fit_prior_test(self, reparameterized, n_steps, loss, debug=False, lr=0.0002): + pyro.clear_param_store() + Gamma = dist.Gamma if reparameterized else fakes.NonreparameterizedGamma + + def model(): + with pyro.plate("samples", self.sample_batch_size): + pyro.sample( + "lambda_latent", + Gamma( + torch.stack( + [torch.stack([self.alpha0])] * self.sample_batch_size + ), + torch.stack( + [torch.stack([self.beta0])] * self.sample_batch_size + ), + ).to_event(1), + ) + + def guide(): + alpha_q = pyro.param( + "alpha_q", + self.alpha0.detach() + math.exp(0.17), + constraint=constraints.positive, + ) + beta_q = pyro.param( + "beta_q", + self.beta0.detach() / math.exp(0.143), + constraint=constraints.positive, + ) + with pyro.plate("samples", self.sample_batch_size): + pyro.sample( + "lambda_latent", + Gamma( + torch.stack([torch.stack([alpha_q])] * self.sample_batch_size), + torch.stack([torch.stack([beta_q])] * self.sample_batch_size), + ).to_event(1), + ) + + adam = optim.Adam({"lr": lr, "betas": (0.97, 0.999)}) + svi = SVI(model, guide, adam, loss) + + alpha = 0.99 + for k in range(n_steps): + svi.step() + if debug: + alpha_error = param_mse("alpha_q", self.alpha0) + beta_error = param_mse("beta_q", self.beta0) + with torch.no_grad(): + if k == 0: + ( + avg_loglikelihood, + avg_penalty, + ) = loss._differentiable_loss_parts(model, guide, (), {}) + avg_loglikelihood = torch_item(avg_loglikelihood) + avg_penalty = torch_item(avg_penalty) + loglikelihood, penalty = loss._differentiable_loss_parts( + model, guide, (), {} + ) + avg_loglikelihood = alpha * avg_loglikelihood + ( + 1 - alpha + ) * torch_item(loglikelihood) + avg_penalty = alpha * avg_penalty + (1 - alpha) * torch_item( + penalty + ) + if k % 100 == 0: + print(alpha_error, beta_error) + print(avg_loglikelihood, avg_penalty) + print() + + assert_equal( + pyro.param("alpha_q"), + self.alpha0, + prec=0.2, + msg="{} vs {}".format( + pyro.param("alpha_q").detach().cpu().numpy(), + self.alpha0.detach().cpu().numpy(), + ), + ) + assert_equal( + pyro.param("beta_q"), + self.beta0, + prec=0.15, + msg="{} vs {}".format( + pyro.param("beta_q").detach().cpu().numpy(), + self.beta0.detach().cpu().numpy(), + ), + ) + + +@pytest.mark.stage("integration", "integration_batch_1") +@pytest.mark.parametrize( + "elbo_impl", + [ + xfail_param(JitTrace_ELBO, reason="incorrect gradients", run=False), + xfail_param(JitTraceGraph_ELBO, reason="incorrect gradients", run=False), + xfail_param(JitTraceEnum_ELBO, reason="incorrect gradients", run=False), + Trace_ELBO, + TraceGraph_ELBO, + TraceEnum_ELBO, + RenyiELBO, + ReweightedWakeSleep, + ], +) +@pytest.mark.parametrize( + "gamma_dist,n_steps", + [ + (dist.Gamma, 5000), + (fakes.NonreparameterizedGamma, 10000), + (ShapeAugmentedGamma, 5000), + ], + ids=["reparam", "nonreparam", "rsvi"], +) +def test_exponential_gamma(gamma_dist, n_steps, elbo_impl): + pyro.clear_param_store() + + # gamma prior hyperparameter + alpha0 = torch.tensor(1.0) + # gamma prior hyperparameter + beta0 = torch.tensor(1.0) + n_data = 2 + data = torch.tensor([3.0, 2.0]) # two observations + alpha_n = alpha0 + torch.tensor(float(n_data)) # posterior alpha + beta_n = beta0 + torch.sum(data) # posterior beta + prec = 0.2 if gamma_dist.has_rsample else 0.25 + + def model(alpha0, beta0, alpha_n, beta_n): + lambda_latent = pyro.sample("lambda_latent", gamma_dist(alpha0, beta0)) + with pyro.plate("data", n_data): + pyro.sample("obs", dist.Exponential(lambda_latent), obs=data) + return lambda_latent + + def guide(alpha0, beta0, alpha_n, beta_n): + alpha_q = pyro.param( + "alpha_q", alpha_n * math.exp(0.17), constraint=constraints.positive + ) + beta_q = pyro.param( + "beta_q", beta_n / math.exp(0.143), constraint=constraints.positive + ) + pyro.sample("lambda_latent", gamma_dist(alpha_q, beta_q)) + + adam = optim.Adam({"lr": 0.0003, "betas": (0.97, 0.999)}) + if elbo_impl is RenyiELBO: + elbo = elbo_impl( + alpha=0.2, + num_particles=3, + max_plate_nesting=1, + strict_enumeration_warning=False, + ) + elif elbo_impl is ReweightedWakeSleep: + if gamma_dist is ShapeAugmentedGamma: + pytest.xfail( + reason="ShapeAugmentedGamma not suported for ReweightedWakeSleep" + ) + else: + elbo = elbo_impl( + num_particles=3, max_plate_nesting=1, strict_enumeration_warning=False + ) + else: + elbo = elbo_impl(max_plate_nesting=1, strict_enumeration_warning=False) + svi = SVI(model, guide, adam, loss=elbo) + + with xfail_if_not_implemented(): + for k in range(n_steps): + svi.step(alpha0, beta0, alpha_n, beta_n) + + assert_equal( + pyro.param("alpha_q"), + alpha_n, + prec=prec, + msg="{} vs {}".format( + pyro.param("alpha_q").detach().cpu().numpy(), alpha_n.detach().cpu().numpy() + ), + ) + assert_equal( + pyro.param("beta_q"), + beta_n, + prec=prec, + msg="{} vs {}".format( + pyro.param("beta_q").detach().cpu().numpy(), beta_n.detach().cpu().numpy() + ), + ) + + +@pytest.mark.stage("integration", "integration_batch_2") +class BernoulliBetaTests(TestCase): + def setUp(self): + # bernoulli-beta model + # beta prior hyperparameter + self.alpha0 = torch.tensor(1.0) + self.beta0 = torch.tensor(1.0) # beta prior hyperparameter + self.data = torch.tensor([0.0, 1.0, 1.0, 1.0]) + self.n_data = len(self.data) + self.batch_size = 4 + data_sum = self.data.sum() + self.alpha_n = self.alpha0 + data_sum # posterior alpha + self.beta_n = self.beta0 - data_sum + torch.tensor(float(self.n_data)) + # posterior beta + self.log_alpha_n = torch.log(self.alpha_n) + self.log_beta_n = torch.log(self.beta_n) + self.sample_batch_size = 2 + + def test_elbo_reparameterized(self): + self.do_elbo_test(True, 10000, Trace_ELBO()) + + def test_elbo_nonreparameterized(self): + self.do_elbo_test(False, 10000, Trace_ELBO()) + + # this is used to detect bugs related to https://github.com/pytorch/pytorch/issues/9521 + def test_elbo_reparameterized_vectorized(self): + self.do_elbo_test( + True, + 5000, + Trace_ELBO(num_particles=2, vectorize_particles=True, max_plate_nesting=1), + ) + + # this is used to detect bugs related to https://github.com/pytorch/pytorch/issues/9521 + def test_elbo_nonreparameterized_vectorized(self): + self.do_elbo_test( + False, + 5000, + Trace_ELBO(num_particles=2, vectorize_particles=True, max_plate_nesting=1), + ) + + def test_renyi_reparameterized(self): + self.do_elbo_test(True, 5000, RenyiELBO(num_particles=2)) + + def test_renyi_nonreparameterized(self): + self.do_elbo_test(False, 5000, RenyiELBO(alpha=0.2, num_particles=2)) + + def test_renyi_reparameterized_vectorized(self): + self.do_elbo_test( + True, + 5000, + RenyiELBO(num_particles=2, vectorize_particles=True, max_plate_nesting=1), + ) + + def test_renyi_nonreparameterized_vectorized(self): + self.do_elbo_test( + False, + 5000, + RenyiELBO( + alpha=0.2, + num_particles=2, + vectorize_particles=True, + max_plate_nesting=1, + ), + ) + + def test_rws_reparameterized(self): + self.do_elbo_test(True, 5000, ReweightedWakeSleep(num_particles=2)) + + def test_rws_nonreparameterized(self): + self.do_elbo_test(False, 5000, ReweightedWakeSleep(num_particles=2)) + + def test_rws_reparameterized_vectorized(self): + self.do_elbo_test( + True, + 5000, + ReweightedWakeSleep( + num_particles=2, vectorize_particles=True, max_plate_nesting=1 + ), + ) + + def test_rws_nonreparameterized_vectorized(self): + self.do_elbo_test( + False, + 5000, + ReweightedWakeSleep( + num_particles=2, vectorize_particles=True, max_plate_nesting=1 + ), + ) + + def test_mmd_vectorized(self): + z_size = 1 + self.do_fit_prior_test( + True, + 2500, + Trace_MMD( + kernel=kernels.RBF( + z_size, + lengthscale=torch.sqrt(torch.tensor(z_size, dtype=torch.float)), + ), + vectorize_particles=True, + num_particles=100, + ), + ) + + def do_elbo_test(self, reparameterized, n_steps, loss): + pyro.clear_param_store() + Beta = dist.Beta if reparameterized else fakes.NonreparameterizedBeta + + def model(): + p_latent = pyro.sample("p_latent", Beta(self.alpha0, self.beta0)) + with pyro.plate("data", self.batch_size): + pyro.sample("obs", dist.Bernoulli(p_latent), obs=self.data) + return p_latent + + def guide(): + alpha_q_log = pyro.param("alpha_q_log", self.log_alpha_n + 0.17) + beta_q_log = pyro.param("beta_q_log", self.log_beta_n - 0.143) + alpha_q, beta_q = torch.exp(alpha_q_log), torch.exp(beta_q_log) + pyro.sample("p_latent", Beta(alpha_q, beta_q)) + + adam = optim.Adam({"lr": 0.001, "betas": (0.97, 0.999)}) + svi = SVI(model, guide, adam, loss=loss) + + for k in range(n_steps): + svi.step() + + alpha_error = param_abs_error("alpha_q_log", self.log_alpha_n) + beta_error = param_abs_error("beta_q_log", self.log_beta_n) + assert_equal(0.0, alpha_error, prec=0.08) + assert_equal(0.0, beta_error, prec=0.08) + + def do_fit_prior_test(self, reparameterized, n_steps, loss, debug=False): + pyro.clear_param_store() + Beta = dist.Beta if reparameterized else fakes.NonreparameterizedBeta + + def model(): + with pyro.plate("samples", self.sample_batch_size): + pyro.sample( + "p_latent", + Beta( + torch.stack( + [torch.stack([self.alpha0])] * self.sample_batch_size + ), + torch.stack( + [torch.stack([self.beta0])] * self.sample_batch_size + ), + ).to_event(1), + ) + + def guide(): + alpha_q_log = pyro.param("alpha_q_log", torch.log(self.alpha0) + 0.17) + beta_q_log = pyro.param("beta_q_log", torch.log(self.beta0) - 0.143) + alpha_q, beta_q = torch.exp(alpha_q_log), torch.exp(beta_q_log) + with pyro.plate("samples", self.sample_batch_size): + pyro.sample( + "p_latent", + Beta( + torch.stack([torch.stack([alpha_q])] * self.sample_batch_size), + torch.stack([torch.stack([beta_q])] * self.sample_batch_size), + ).to_event(1), + ) + + adam = optim.Adam({"lr": 0.001, "betas": (0.97, 0.999)}) + svi = SVI(model, guide, adam, loss=loss) + + alpha = 0.99 + for k in range(n_steps): + svi.step() + if debug: + alpha_error = param_abs_error("alpha_q_log", torch.log(self.alpha0)) + beta_error = param_abs_error("beta_q_log", torch.log(self.beta0)) + with torch.no_grad(): + if k == 0: + ( + avg_loglikelihood, + avg_penalty, + ) = loss._differentiable_loss_parts(model, guide) + avg_loglikelihood = torch_item(avg_loglikelihood) + avg_penalty = torch_item(avg_penalty) + loglikelihood, penalty = loss._differentiable_loss_parts( + model, guide + ) + avg_loglikelihood = alpha * avg_loglikelihood + ( + 1 - alpha + ) * torch_item(loglikelihood) + avg_penalty = alpha * avg_penalty + (1 - alpha) * torch_item( + penalty + ) + if k % 100 == 0: + print(alpha_error, beta_error) + print(avg_loglikelihood, avg_penalty) + print() + + alpha_error = param_abs_error("alpha_q_log", torch.log(self.alpha0)) + beta_error = param_abs_error("beta_q_log", torch.log(self.beta0)) + assert_equal(0.0, alpha_error, prec=0.08) + assert_equal(0.0, beta_error, prec=0.08) + + +class SafetyTests(TestCase): + def setUp(self): + # normal-normal; known covariance + def model_dup(): + pyro.param("loc_q", torch.ones(1, requires_grad=True)) + pyro.sample("loc_q", dist.Normal(torch.zeros(1), torch.ones(1))) + + def model_obs_dup(): + pyro.sample("loc_q", dist.Normal(torch.zeros(1), torch.ones(1))) + pyro.sample( + "loc_q", dist.Normal(torch.zeros(1), torch.ones(1)), obs=torch.zeros(1) + ) + + def model(): + pyro.sample("loc_q", dist.Normal(torch.zeros(1), torch.ones(1))) + + def guide(): + p = pyro.param("p", torch.ones(1, requires_grad=True)) + pyro.sample("loc_q", dist.Normal(torch.zeros(1), p)) + pyro.sample("loc_q_2", dist.Normal(torch.zeros(1), p)) + + self.duplicate_model = model_dup + self.duplicate_obs = model_obs_dup + self.model = model + self.guide = guide + + def test_duplicate_names(self): + pyro.clear_param_store() + + adam = optim.Adam({"lr": 0.001}) + svi = SVI(self.duplicate_model, self.guide, adam, loss=Trace_ELBO()) + + with pytest.raises(RuntimeError): + svi.step() + + def test_extra_samples(self): + pyro.clear_param_store() + + adam = optim.Adam({"lr": 0.001}) + svi = SVI(self.model, self.guide, adam, loss=Trace_ELBO()) + + with pytest.warns(Warning): + svi.step() + + def test_duplicate_obs_name(self): + pyro.clear_param_store() + + adam = optim.Adam({"lr": 0.001}) + svi = SVI(self.duplicate_obs, self.guide, adam, loss=Trace_ELBO()) + + with pytest.raises(RuntimeError): + svi.step() + + +@pytest.mark.stage("integration", "integration_batch_1") +@pytest.mark.parametrize("prior_scale", [0, 1e-4]) +def test_energy_distance_univariate(prior_scale): + def model(data): + loc = pyro.sample("loc", dist.Normal(0, 100)) + scale = pyro.sample("scale", dist.LogNormal(0, 1)) + with pyro.plate("data", len(data)): + pyro.sample("obs", dist.Normal(loc, scale), obs=data) + + def guide(data): + loc_loc = pyro.param("loc_loc", torch.tensor(0.0)) + loc_scale = pyro.param( + "loc_scale", torch.tensor(1.0), constraint=constraints.positive + ) + log_scale_loc = pyro.param("log_scale_loc", torch.tensor(0.0)) + log_scale_scale = pyro.param( + "log_scale_scale", torch.tensor(1.0), constraint=constraints.positive + ) + pyro.sample("loc", dist.Normal(loc_loc, loc_scale)) + pyro.sample("scale", dist.LogNormal(log_scale_loc, log_scale_scale)) + + data = 10.0 + torch.randn(8) + adam = optim.Adam({"lr": 0.1}) + loss_fn = EnergyDistance(num_particles=32, prior_scale=prior_scale) + svi = SVI(model, guide, adam, loss_fn) + for step in range(2001): + loss = svi.step(data) + if step % 20 == 0: + logger.info( + "step {} loss = {:0.4g}, loc = {:0.4g}, scale = {:0.4g}".format( + step, + loss, + pyro.param("loc_loc").item(), + pyro.param("log_scale_loc").exp().item(), + ) + ) + + expected_loc = data.mean() + expected_scale = data.std() + actual_loc = pyro.param("loc_loc").detach() + actual_scale = pyro.param("log_scale_loc").exp().detach() + assert_close(actual_loc, expected_loc, atol=0.05) + assert_close(actual_scale, expected_scale, rtol=0.1 if prior_scale else 0.05) + + +@pytest.mark.stage("integration", "integration_batch_1") +@pytest.mark.parametrize("prior_scale", [0, 1]) +def test_energy_distance_multivariate(prior_scale): + def model(data): + loc = torch.zeros(2) + cov = pyro.sample("cov", dist.Normal(0, 100).expand([2, 2]).to_event(2)) + with pyro.plate("data", len(data)): + pyro.sample("obs", dist.MultivariateNormal(loc, cov), obs=data) + + def guide(data): + scale_tril = pyro.param( + "scale_tril", torch.eye(2), constraint=constraints.lower_cholesky + ) + pyro.sample("cov", dist.Delta(scale_tril @ scale_tril.t(), event_dim=2)) + + cov = torch.tensor([[1, 0.8], [0.8, 1]]) + data = dist.MultivariateNormal(torch.zeros(2), cov).sample([10]) + loss_fn = EnergyDistance(num_particles=32, prior_scale=prior_scale) + svi = SVI(model, guide, optim.Adam({"lr": 0.1}), loss_fn) + for step in range(2001): + loss = svi.step(data) + if step % 20 == 0: + logger.info("step {} loss = {:0.4g}".format(step, loss)) + + delta = data - data.mean(0) + expected_cov = (delta.t() @ delta) / len(data) + scale_tril = pyro.param("scale_tril").detach() + actual_cov = scale_tril @ scale_tril.t() + assert_close(actual_cov, expected_cov, atol=0.2) + + +@pytest.mark.stage("integration", "integration_batch_1") +def test_reparam_stable(): + data = dist.Poisson(torch.randn(8).exp()).sample() + + @poutine.reparam(config={"dz": LatentStableReparam(), "y": LatentStableReparam()}) + def model(): + stability = pyro.sample("stability", dist.Uniform(1.0, 2.0)) + trans_skew = pyro.sample("trans_skew", dist.Uniform(-1.0, 1.0)) + obs_skew = pyro.sample("obs_skew", dist.Uniform(-1.0, 1.0)) + scale = pyro.sample("scale", dist.Gamma(3, 1)) + + # We use separate plates because the .cumsum() op breaks independence. + with pyro.plate("time1", len(data)): + dz = pyro.sample("dz", dist.Stable(stability, trans_skew)) + z = dz.cumsum(-1) + with pyro.plate("time2", len(data)): + y = pyro.sample("y", dist.Stable(stability, obs_skew, scale, z)) + pyro.sample("x", dist.Poisson(y.abs()), obs=data) + + guide = AutoDelta(model) + svi = SVI(model, guide, optim.Adam({"lr": 0.01}), Trace_ELBO()) + for step in range(100): + loss = svi.step() + if step % 20 == 0: + logger.info("step {} loss = {:0.4g}".format(step, loss)) + + +@pytest.mark.stage("integration", "integration_batch_1") +def test_sequential_plating_sum(): + """Example from https://github.com/pyro-ppl/pyro/issues/2361""" + + def model(data): + x = pyro.sample("x", dist.Bernoulli(torch.tensor(0.5))) + for i in pyro.plate("data_plate", len(data)): + pyro.sample( + "data_{:d}".format(i), + dist.Normal(x, scale=torch.tensor(0.1)), + obs=data[i], + ) + + def guide(data): + p = pyro.param("p", torch.tensor(0.5)) + pyro.sample("x", pyro.distributions.Bernoulli(p)) + + data = torch.cat([torch.randn([5]), 1.0 + torch.randn([5])]) + adam = optim.Adam({"lr": 0.01}) + loss_fn = RenyiELBO(alpha=0, num_particles=30, vectorize_particles=True) + svi = SVI(model, guide, adam, loss_fn) + + for step in range(1): + loss = svi.step(data) + if step % 20 == 0: + logger.info("step {} loss = {:0.4g}".format(step, loss)) + + +@pytest.mark.stage("integration", "integration_batch_1") +def test_non_nested_plating_sum(): + """Example from https://github.com/pyro-ppl/pyro/issues/2361""" + + # Generative model: data = x @ weights + eps + def model(data, weights): + loc = torch.tensor(1.0) + scale = torch.tensor(0.1) + + # Sample latents (shares no dimensions with data) + with pyro.plate("x_plate", weights.shape[0]): + x = pyro.sample("x", pyro.distributions.Normal(loc, scale)) + + # Combine with weights and sample + with pyro.plate("data_plate_1", data.shape[-1]): + with pyro.plate("data_plate_2", data.shape[-2]): + pyro.sample( + "data", pyro.distributions.Normal(x @ weights, scale), obs=data + ) + + def guide(data, weights): + loc = pyro.param("x_loc", torch.tensor(0.5)) + scale = torch.tensor(0.1) + + with pyro.plate("x_plate", weights.shape[0]): + pyro.sample("x", pyro.distributions.Normal(loc, scale)) + + data = torch.randn([5, 3]) + weights = torch.randn([2, 3]) + adam = optim.Adam({"lr": 0.01}) + loss_fn = RenyiELBO(num_particles=30, vectorize_particles=True) + svi = SVI(model, guide, adam, loss_fn) + + for step in range(1): + loss = svi.step(data, weights) + if step % 20 == 0: + logger.info("step {} loss = {:0.4g}".format(step, loss)) diff --git a/pyro/source/tests/infer/test_initialization.py b/pyro/source/tests/infer/test_initialization.py new file mode 100644 index 0000000000000000000000000000000000000000..323a6225dc9a02e654a8a9148ab228588e8f2660 --- /dev/null +++ b/pyro/source/tests/infer/test_initialization.py @@ -0,0 +1,40 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +import pyro +import pyro.distributions as dist +from pyro.infer.autoguide.initialization import ( + InitMessenger, + init_to_generated, + init_to_value, +) + + +def test_init_to_generated(): + def model(): + x = pyro.sample("x", dist.Normal(0, 1)) + y = pyro.sample("y", dist.Normal(0, 1)) + z = pyro.sample("z", dist.Normal(0, 1)) + return x, y, z + + class MockGenerate: + def __init__(self): + self.counter = 0 + + def __call__(self): + values = { + "x": torch.tensor(self.counter + 0.0), + "y": torch.tensor(self.counter + 0.5), + } + self.counter += 1 + return init_to_value(values=values) + + mock_generate = MockGenerate() + with InitMessenger(init_to_generated(generate=mock_generate)): + for i in range(5): + x, y, z = model() + assert x == i + assert y == i + 0.5 + assert mock_generate.counter == 5 diff --git a/pyro/source/tests/infer/test_inspect.py b/pyro/source/tests/infer/test_inspect.py new file mode 100644 index 0000000000000000000000000000000000000000..8b72c621ca1e26c85764385032e31f70424fa0da --- /dev/null +++ b/pyro/source/tests/infer/test_inspect.py @@ -0,0 +1,558 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +import pyro +import pyro.distributions as dist +from pyro.distributions.testing.fakes import NonreparameterizedNormal +from pyro.infer.inspect import _deep_merge, get_dependencies, get_model_relations + + +@pytest.mark.parametrize("grad_enabled", [True, False]) +def test_get_dependencies(grad_enabled): + def model(data): + a = pyro.sample("a", dist.Normal(0, 1)) + b = pyro.sample("b", NonreparameterizedNormal(a, 0)) + c = pyro.sample("c", dist.Normal(b, 1)) + d = pyro.sample("d", dist.Normal(a, c.exp())) + + e = pyro.sample("e", dist.Normal(0, 1)) + f = pyro.sample("f", dist.Normal(0, 1)) + g = pyro.sample("g", dist.Bernoulli(logits=e + f), obs=torch.tensor(0.0)) + + with pyro.plate("p", len(data)): + d_ = d.detach() # this results in a known failure + h = pyro.sample("h", dist.Normal(c, d_.exp())) + i = pyro.deterministic("i", h + 1) + j = pyro.sample("j", dist.Delta(h + 1), obs=h + 1) + k = pyro.sample("k", dist.Normal(a, j.exp()), obs=data) + + return [a, b, c, d, e, f, g, h, i, j, k] + + data = torch.randn(3) + with torch.set_grad_enabled(grad_enabled): + actual = get_dependencies(model, (data,)) + _ = set() + expected = { + "prior_dependencies": { + "a": {"a": _}, + "b": {"b": _, "a": _}, + "c": {"c": _, "b": _}, + "d": {"d": _, "c": _, "a": _}, + "e": {"e": _}, + "f": {"f": _}, + "g": {"g": _, "e": _, "f": _}, + "h": {"h": _, "c": _, "d": _}, + "k": {"k": _, "a": _, "h": _}, + }, + "posterior_dependencies": { + "a": {"a": _, "b": _, "c": _, "d": _, "h": _, "k": _}, + "b": {"b": _, "c": _}, + "c": {"c": _, "d": _, "h": _}, + "d": {"d": _, "h": _}, + "e": {"e": _, "g": _, "f": _}, + "f": {"f": _, "g": _}, + "h": {"h": _, "k": _}, + }, + } + assert actual == expected + + +def test_docstring_example_1(): + def model_1(): + a = pyro.sample("a", dist.Normal(0, 1)) + pyro.sample("b", dist.Normal(a, 1), obs=torch.tensor(0.0)) + + actual = get_dependencies(model_1) + expected = { + "prior_dependencies": { + "a": {"a": set()}, + "b": {"a": set(), "b": set()}, + }, + "posterior_dependencies": { + "a": {"a": set(), "b": set()}, + }, + } + assert actual == expected + + +def test_docstring_example_2(): + def model_2(): + a = pyro.sample("a", dist.Normal(0, 1)) + b = pyro.sample("b", dist.LogNormal(0, 1)) + c = pyro.sample("c", dist.Normal(a, b)) + pyro.sample("d", dist.Normal(c, 1), obs=torch.tensor(0.0)) + + actual = get_dependencies(model_2) + expected = { + "prior_dependencies": { + "a": {"a": set()}, + "b": {"b": set()}, + "c": {"a": set(), "b": set(), "c": set()}, + "d": {"c": set(), "d": set()}, + }, + "posterior_dependencies": { + "a": {"a": set(), "b": set(), "c": set()}, + "b": {"b": set(), "c": set()}, + "c": {"c": set(), "d": set()}, + }, + } + assert actual == expected + + +def test_docstring_example_3(): + def model_3(): + with pyro.plate("p", 5): + a = pyro.sample("a", dist.Normal(0, 1)) + pyro.sample("b", dist.Normal(a.sum(), 1), obs=torch.tensor(0.0)) + + actual = get_dependencies(model_3) + expected = { + "prior_dependencies": { + "a": {"a": set()}, + "b": {"a": set(), "b": set()}, + }, + "posterior_dependencies": { + "a": {"a": {"p"}, "b": set()}, + }, + } + assert actual == expected + + +def test_factor(): + def model(): + a = pyro.sample("a", dist.Normal(0, 1)) + pyro.factor("b", torch.tensor(0.0)) + pyro.factor("c", a) + + actual = get_dependencies(model) + expected = { + "prior_dependencies": { + "a": {"a": set()}, + "b": {"b": set()}, + "c": {"c": set(), "a": set()}, + }, + "posterior_dependencies": { + "a": {"a": set(), "c": set()}, + }, + } + assert actual == expected + + +def test_discrete_obs(): + def model(): + a = pyro.sample("a", dist.Normal(0, 1)) + b = pyro.sample("b", dist.Normal(a[..., None], torch.ones(3)).to_event(1)) + c = pyro.sample( + "c", dist.MultivariateNormal(torch.zeros(3) + a[..., None], torch.eye(3)) + ) + with pyro.plate("i", 2): + d = pyro.sample("d", dist.Dirichlet((b + c).exp())) + pyro.sample("e", dist.Categorical(logits=d), obs=torch.tensor([0, 0])) + return a, b, c, d + + actual = get_dependencies(model) + expected = { + "prior_dependencies": { + "a": {"a": set()}, + "b": {"a": set(), "b": set()}, + "c": {"a": set(), "c": set()}, + "d": {"b": set(), "c": set(), "d": set()}, + "e": {"d": set(), "e": set()}, + }, + "posterior_dependencies": { + "a": {"a": set(), "b": set(), "c": set()}, + "b": {"b": set(), "c": set(), "d": set()}, + "c": {"c": set(), "d": set()}, + "d": {"d": set(), "e": set()}, + }, + } + assert actual == expected + + +def test_discrete(): + def model(): + a = pyro.sample("a", dist.Dirichlet(torch.ones(3))) + b = pyro.sample("b", dist.Categorical(a)) + c = pyro.sample("c", dist.Normal(torch.zeros(3), 1).to_event(1)) + d = pyro.sample("d", dist.Poisson(c[b].exp())) + pyro.sample("e", dist.Normal(d, 1), obs=torch.ones(())) + + actual = get_dependencies(model) + expected = { + "prior_dependencies": { + "a": {"a": set()}, + "b": {"a": set(), "b": set()}, + "c": {"c": set()}, + "d": {"b": set(), "c": set(), "d": set()}, + "e": {"d": set(), "e": set()}, + }, + "posterior_dependencies": { + "a": {"a": set(), "b": set()}, + "b": {"b": set(), "c": set(), "d": set()}, + "c": {"c": set(), "d": set()}, + "d": {"d": set(), "e": set()}, + }, + } + assert actual == expected + + +def test_plate_coupling(): + # x x + # || + # y + # + # This results in posterior dependency structure: + # + # x x y + # x ? ? ? + # x ? ? ? + + def model(data): + with pyro.plate("p", len(data)): + x = pyro.sample("x", dist.Normal(0, 1)) + pyro.sample("y", dist.Normal(x.sum(), 1), obs=data.sum()) + + data = torch.randn(2) + actual = get_dependencies(model, (data,)) + expected = { + "prior_dependencies": { + "x": {"x": set()}, + "y": {"y": set(), "x": set()}, + }, + "posterior_dependencies": { + "x": {"x": {"p"}, "y": set()}, + }, + } + assert actual == expected + + +def test_plate_coupling_2(): + # x x + # \\ y y + # \\ // + # z + # + # This results in posterior dependency structure: + # + # x x y y z + # x ? ? ? ? ? + # x ? ? ? ? ? + # y ? ? ? + # y ? ? ? + + def model(data): + with pyro.plate("p", len(data)): + x = pyro.sample("x", dist.Normal(0, 1)) + y = pyro.sample("y", dist.Normal(0, 1)) + pyro.sample("z", dist.Normal(x.sum(), y.sum().exp()), obs=data.sum()) + + data = torch.randn(2) + actual = get_dependencies(model, (data,)) + expected = { + "prior_dependencies": { + "x": {"x": set()}, + "y": {"y": set()}, + "z": {"z": set(), "x": set(), "y": set()}, + }, + "posterior_dependencies": { + "x": {"x": {"p"}, "y": {"p"}, "z": set()}, + "y": {"y": {"p"}, "z": set()}, + }, + } + assert actual == expected + + +def test_plate_coupling_3(): + # x x x x + # // \\ + # y y z z + # + # This results in posterior dependency structure: + # + # x x y y z + # x ? ? ? ? ? + # x ? ? ? ? ? + # y ? ? ? + # y ? ? ? + + def model(data): + i_plate = pyro.plate("i", data.shape[0], dim=-2) + j_plate = pyro.plate("j", data.shape[1], dim=-1) + with i_plate, j_plate: + x = pyro.sample("x", dist.Normal(0, 1)) + with i_plate: + pyro.sample("y", dist.Normal(x.sum(-1, True), 1), obs=data.sum(-1, True)) + with j_plate: + pyro.sample("z", dist.Normal(x.sum(-2, True), 1), obs=data.sum(-2, True)) + + data = torch.randn(3, 2) + actual = get_dependencies(model, (data,)) + expected = { + "prior_dependencies": { + "x": {"x": set()}, + "y": {"y": set(), "x": set()}, + "z": {"z": set(), "x": set()}, + }, + "posterior_dependencies": { + "x": {"x": {"i", "j"}, "y": set(), "z": set()}, + }, + } + assert actual == expected + + +def test_plate_collider(): + # x x y y + # \\ // + # zzzz + # + # This results in posterior dependency structure: + # + # x x y y z z z z + # x ? ? ? ? ? + # x ? ? ? ? ? + # y ? ? ? + # y ? ? ? + + def model(data): + i_plate = pyro.plate("i", data.shape[0], dim=-2) + j_plate = pyro.plate("j", data.shape[1], dim=-1) + + with i_plate: + x = pyro.sample("x", dist.Normal(0, 1)) + with j_plate: + y = pyro.sample("y", dist.Normal(0, 1)) + with i_plate, j_plate: + pyro.sample("z", dist.Normal(x, y.exp()), obs=data) + + data = torch.randn(3, 2) + actual = get_dependencies(model, (data,)) + _ = set() + expected = { + "prior_dependencies": { + "x": {"x": _}, + "y": {"y": _}, + "z": {"x": _, "y": _, "z": _}, + }, + "posterior_dependencies": { + "x": {"x": _, "y": _, "z": _}, + "y": {"y": _, "z": _}, + }, + } + assert actual == expected + + +def test_plate_dependency(): + # w w + # \ x1 x2 unroll x1 / \ x2 + # \ || y1 y2 =====> y1 | / \ | y2 + # \ || // \|/ \|/ + # z1 z2 z1 z2 + # + # This allows posterior dependency structure: + # + # w x x y y z z + # w ? ? ? ? ? ? ? + # x ? ? ? + # x ? ? ? + # y ? ? + # y ? ? + + def model(data): + w = pyro.sample("w", dist.Normal(0, 1)) + with pyro.plate("p", len(data)): + x = pyro.sample("x", dist.Normal(0, 1)) + y = pyro.sample("y", dist.Normal(0, 1)) + pyro.sample("z", dist.Normal(w + x + y, 1), obs=data) + + data = torch.rand(2) + actual = get_dependencies(model, (data,)) + _ = set() + expected = { + "prior_dependencies": { + "w": {"w": _}, + "x": {"x": _}, + "y": {"y": _}, + "z": {"w": _, "x": _, "y": _, "z": _}, + }, + "posterior_dependencies": { + "w": {"w": _, "x": _, "y": _, "z": _}, + "x": {"x": _, "y": _, "z": _}, + "y": {"y": _, "z": _}, + }, + } + assert actual == expected + + +def test_nested_plate_collider(): + # a a b b + # a a b b + # \\ // + # c c + # | + # d + + def model(): + plate_i = pyro.plate("i", 2, dim=-1) + plate_j = pyro.plate("j", 3, dim=-2) + plate_k = pyro.plate("k", 3, dim=-2) + + with plate_i: + with plate_j: + a = pyro.sample("a", dist.Normal(0, 1)) + with plate_k: + b = pyro.sample("b", dist.Normal(0, 1)) + c = pyro.sample("c", dist.Normal(a.sum(0) + b.sum([0, 1]), 1)) + pyro.sample("d", dist.Normal(c.sum(), 1), obs=torch.zeros(())) + + actual = get_dependencies(model) + _ = set() + expected = { + "prior_dependencies": { + "a": {"a": _}, + "b": {"b": _}, + "c": {"c": _, "a": _, "b": _}, + "d": {"d": _, "c": _}, + }, + "posterior_dependencies": { + "a": {"a": {"j"}, "b": _, "c": _}, + "b": {"b": {"k"}, "c": _}, + "c": {"c": {"i"}, "d": _}, + }, + } + assert actual == expected + + +DEEP_MERGE_EXAMPLES = [ + ([True], True), + ([False], False), + ([True, True], True), + ([True, False], None), + ([False, False], False), + ([{"a": True}], {"a": True}), + ([{"a": True}, {"a": True}], {"a": True}), + ([{"a": True}, {"a": False}], {"a": None}), + ( + [ + {"a": True, "b": {"c": True}, "d": False, "e": 0}, + {"a": True, "b": {"c": True}, "d": True, "e": 1}, + {"a": True, "b": {"c": False}, "d": False, "e": 2}, + {"a": True, "b": {"c": True}, "d": False, "e": 3}, + ], + {"a": True, "b": {"c": None}, "d": None, "e": 0}, + ), +] + + +@pytest.mark.parametrize("things, expected", DEEP_MERGE_EXAMPLES) +def test_deep_merge(things, expected): + actual = _deep_merge(things) + assert actual == expected + + +@pytest.mark.parametrize("include_deterministic", [True, False]) +def test_get_model_relations(include_deterministic): + def model(data): + a = pyro.sample("a", dist.Normal(0, 1)) + b = pyro.sample("b", dist.Normal(a, 1)) + c = pyro.sample("c", dist.Normal(a, b.exp())) + d = pyro.sample("d", dist.Bernoulli(logits=c), obs=torch.tensor(0.0)) + + with pyro.plate("p", len(data)): + e = pyro.sample("e", dist.Normal(a, b.exp())) + f = pyro.deterministic("f", e + 1) + g = pyro.sample("g", dist.Delta(e + 1), obs=e + 1) + h = pyro.sample("h", dist.Delta(e + 1)) + i = pyro.sample("i", dist.Normal(e, (f + g + h).exp()), obs=data) + + return [a, b, c, d, e, f, g, h, i] + + data = torch.randn(3) + actual = get_model_relations( + model, + (data,), + include_deterministic=include_deterministic, + ) + + if include_deterministic: + expected = { + "observed": ["d", "f", "g", "i"], + "param_constraint": {}, + "plate_sample": {"p": ["e", "f", "g", "h", "i"]}, + "sample_dist": { + "a": "Normal", + "b": "Normal", + "c": "Normal", + "d": "Bernoulli", + "e": "Normal", + "f": "Deterministic", + "g": "Delta", + "h": "Delta", + "i": "Normal", + }, + "sample_param": { + "a": [], + "b": [], + "c": [], + "d": [], + "e": [], + "f": [], + "g": [], + "h": [], + "i": [], + }, + "sample_sample": { + "a": [], + "b": ["a"], + "c": ["a", "b"], + "d": ["c"], + "e": ["a", "b"], + "f": ["e"], + "g": ["e"], + "h": ["e"], + "i": ["e", "f", "g", "h"], + }, + } + else: + expected = { + "sample_sample": { + "a": [], + "b": ["a"], + "c": ["a", "b"], + "d": ["c"], + "e": ["a", "b"], + "f": ["e"], + "g": ["e"], + "h": ["e"], + "i": ["e"], + }, + "sample_param": { + "a": [], + "b": [], + "c": [], + "d": [], + "e": [], + "f": [], + "g": [], + "h": [], + "i": [], + }, + "sample_dist": { + "a": "Normal", + "b": "Normal", + "c": "Normal", + "d": "Bernoulli", + "e": "Normal", + "f": "Deterministic", + "g": "Delta", + "h": "Delta", + "i": "Normal", + }, + "param_constraint": {}, + "plate_sample": {"p": ["e", "f", "g", "h", "i"]}, + "observed": ["d", "f", "g", "i"], + } + + assert actual == expected diff --git a/pyro/source/tests/infer/test_jit.py b/pyro/source/tests/infer/test_jit.py new file mode 100644 index 0000000000000000000000000000000000000000..fa013339c6645305bf4d875be7019f41f566b0e2 --- /dev/null +++ b/pyro/source/tests/infer/test_jit.py @@ -0,0 +1,613 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging +import warnings + +import pytest +import torch +from torch.autograd import grad +from torch.distributions import constraints, kl_divergence + +import pyro +import pyro.distributions as dist +import pyro.ops.jit +import pyro.poutine as poutine +from pyro.distributions.util import scale_and_mask +from pyro.infer import ( + SVI, + JitTrace_ELBO, + JitTraceEnum_ELBO, + JitTraceGraph_ELBO, + JitTraceMeanField_ELBO, + Trace_ELBO, + TraceEnum_ELBO, + TraceGraph_ELBO, + TraceMeanField_ELBO, + TraceTMC_ELBO, + infer_discrete, +) +from pyro.optim import Adam +from pyro.poutine.indep_messenger import CondIndepStackFrame +from pyro.util import ignore_jit_warnings +from tests.common import assert_close, assert_equal + + +def constant(*args, **kwargs): + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", category=torch.jit.TracerWarning) + return torch.tensor(*args, **kwargs) + + +logger = logging.getLogger(__name__) + + +def test_simple(): + y = torch.ones(2) + + def f(x): + logger.debug("Inside f") + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", category=torch.jit.TracerWarning) + assert x is y + return y + 1.0 + + logger.debug("Compiling f") + f = torch.jit.trace(f, (y,), check_trace=False) + logger.debug("Calling f(y)") + assert_equal(f(y), torch.tensor([2.0, 2.0])) + logger.debug("Calling f(y)") + assert_equal(f(y), torch.tensor([2.0, 2.0])) + logger.debug("Calling f(torch.zeros(2))") + assert_equal(f(torch.zeros(2)), torch.tensor([1.0, 1.0])) + logger.debug("Calling f(torch.zeros(5))") + assert_equal(f(torch.ones(5)), torch.tensor([2.0, 2.0, 2.0, 2.0, 2.0])) + + +def test_multi_output(): + y = torch.ones(2) + + def f(x): + logger.debug("Inside f") + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", category=torch.jit.TracerWarning) + assert x is y + return y - 1.0, y + 1.0 + + logger.debug("Compiling f") + f = torch.jit.trace(f, (y,), check_trace=False) + logger.debug("Calling f(y)") + assert_equal(f(y)[1], torch.tensor([2.0, 2.0])) + logger.debug("Calling f(y)") + assert_equal(f(y)[1], torch.tensor([2.0, 2.0])) + logger.debug("Calling f(torch.zeros(2))") + assert_equal(f(torch.zeros(2))[1], torch.tensor([1.0, 1.0])) + logger.debug("Calling f(torch.zeros(5))") + assert_equal(f(torch.ones(5))[1], torch.tensor([2.0, 2.0, 2.0, 2.0, 2.0])) + + +def test_backward(): + y = torch.ones(2, requires_grad=True) + + def f(x): + logger.debug("Inside f") + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", category=torch.jit.TracerWarning) + assert x is y + return (y + 1.0).sum() + + logger.debug("Compiling f") + f = torch.jit.trace(f, (y,), check_trace=False) + logger.debug("Calling f(y)") + f(y).backward() + logger.debug("Calling f(y)") + f(y) + logger.debug("Calling f(torch.zeros(2))") + f(torch.zeros(2, requires_grad=True)) + logger.debug("Calling f(torch.zeros(5))") + f(torch.ones(5, requires_grad=True)) + + +@pytest.mark.xfail(reason="grad cannot appear in jitted code") +def test_grad(): + def f(x, y): + logger.debug("Inside f") + loss = (x - y).pow(2).sum() + return torch.autograd.grad(loss, [x, y], allow_unused=True) + + logger.debug("Compiling f") + f = torch.jit.trace( + f, (torch.zeros(2, requires_grad=True), torch.ones(2, requires_grad=True)) + ) + logger.debug("Invoking f") + f(torch.zeros(2, requires_grad=True), torch.ones(2, requires_grad=True)) + logger.debug("Invoking f") + f(torch.zeros(2, requires_grad=True), torch.zeros(2, requires_grad=True)) + + +@pytest.mark.xfail(reason="grad cannot appear in jitted code") +def test_grad_expand(): + def f(x, y): + logger.debug("Inside f") + loss = (x - y).pow(2).sum() + return torch.autograd.grad(loss, [x, y], allow_unused=True) + + logger.debug("Compiling f") + f = torch.jit.trace( + f, (torch.zeros(2, requires_grad=True), torch.ones(1, requires_grad=True)) + ) + logger.debug("Invoking f") + f(torch.zeros(2, requires_grad=True), torch.ones(1, requires_grad=True)) + logger.debug("Invoking f") + f(torch.zeros(2, requires_grad=True), torch.zeros(1, requires_grad=True)) + + +def test_scale_and_mask(): + def f(tensor, scale, mask): + return scale_and_mask(tensor, scale=scale, mask=mask) + + x = torch.tensor([-float("inf"), -1.0, 0.0, 1.0, float("inf")]) + y = x / x.unsqueeze(-1) + mask = y == y + scale = torch.ones(y.shape) + jit_f = torch.jit.trace(f, (y, scale, mask)) + assert_equal(jit_f(y, scale, mask), f(y, scale, mask)) + + mask = torch.tensor([True]) + y = torch.tensor([1.5, 2.5, 3.5, 4.5, 5.5, 6.5]) + scale = torch.ones(y.shape) + assert_equal(jit_f(y, scale, mask), f(y, scale, mask)) + + +def test_masked_fill(): + def f(y, mask): + return y.clone().masked_fill_(mask, 0.0) + + x = torch.tensor([-float("inf"), -1.0, 0.0, 1.0, float("inf")]) + y = x / x.unsqueeze(-1) + mask = ~(y == y) + jit_f = torch.jit.trace(f, (y, mask)) + assert_equal(jit_f(y, mask), f(y, mask)) + + mask = torch.tensor([True, False, False, True, False, False]) + y = torch.tensor([1.5, 2.5, 3.5, 4.5, 5.5, 6.5]) + assert_equal(jit_f(y, mask), f(y, mask)) + + +def test_scatter(): + def make_one_hot(x, i): + return torch.zeros_like(x).scatter(-1, i.unsqueeze(-1), 1.0) + + x = torch.randn(5, 4, 3) + i = torch.randint(0, 3, torch.Size((5, 4))) + torch.jit.trace(make_one_hot, (x, i)) + + +@pytest.mark.filterwarnings("ignore:Converting a tensor to a Python integer") +def test_scatter_workaround(): + def make_one_hot_expected(x, i): + return torch.zeros_like(x).scatter(-1, i.unsqueeze(-1), 1.0) + + def make_one_hot_actual(x, i): + eye = torch.eye(x.shape[-1], dtype=x.dtype, device=x.device) + return eye[i].clone() + + x = torch.randn(5, 4, 3) + i = torch.randint(0, 3, torch.Size((5, 4))) + torch.jit.trace(make_one_hot_actual, (x, i)) + expected = make_one_hot_expected(x, i) + actual = make_one_hot_actual(x, i) + assert_equal(actual, expected) + + +@pytest.mark.parametrize("expand", [False, True]) +@pytest.mark.parametrize("shape", [(), (4,), (5, 4)]) +@pytest.mark.filterwarnings("ignore:Converting a tensor to a Python boolean") +def test_bernoulli_enumerate(shape, expand): + shape = torch.Size(shape) + probs = torch.full(shape, 0.25) + + @pyro.ops.jit.trace + def f(probs): + d = dist.Bernoulli(probs) + support = d.enumerate_support(expand=expand) + return d.log_prob(support) + + log_prob = f(probs) + assert log_prob.shape == (2,) + shape + + +@pytest.mark.parametrize("expand", [False, True]) +@pytest.mark.parametrize("shape", [(3,), (4, 3), (5, 4, 3)]) +def test_categorical_enumerate(shape, expand): + shape = torch.Size(shape) + probs = torch.ones(shape) + + @pyro.ops.jit.trace + def f(probs): + d = dist.Categorical(probs) + support = d.enumerate_support(expand=expand) + return d.log_prob(support) + + log_prob = f(probs) + batch_shape = shape[:-1] + assert log_prob.shape == shape[-1:] + batch_shape + + +@pytest.mark.parametrize("expand", [False, True]) +@pytest.mark.parametrize("shape", [(3,), (4, 3), (5, 4, 3)]) +@pytest.mark.filterwarnings("ignore:Converting a tensor to a Python integer") +def test_one_hot_categorical_enumerate(shape, expand): + shape = torch.Size(shape) + probs = torch.ones(shape) + + @pyro.ops.jit.trace + def f(probs): + d = dist.OneHotCategorical(probs) + support = d.enumerate_support(expand=expand) + return d.log_prob(support) + + log_prob = f(probs) + batch_shape = shape[:-1] + assert log_prob.shape == shape[-1:] + batch_shape + + +@pytest.mark.parametrize( + "Elbo", + [ + Trace_ELBO, + JitTrace_ELBO, + TraceGraph_ELBO, + JitTraceGraph_ELBO, + TraceEnum_ELBO, + JitTraceEnum_ELBO, + TraceMeanField_ELBO, + JitTraceMeanField_ELBO, + TraceTMC_ELBO, + ], +) +def test_loss(Elbo): + pyro.clear_param_store() + data = torch.tensor(1.0) + + def model(data): + loc = pyro.sample("loc", dist.Normal(0, 1)) + scale = pyro.sample("scale", dist.LogNormal(0, 1)) + pyro.sample("obs", dist.Normal(loc, scale), obs=data) + + def guide(data): + loc_loc = pyro.param("loc_loc", lambda: torch.tensor(1.0)) + scale_loc = pyro.param("scale_loc", lambda: torch.tensor(-1.0)) + pyro.sample("loc", dist.Normal(loc_loc, 2)) + pyro.sample("scale", dist.LogNormal(scale_loc, 0.1)) + + elbo = Elbo( + num_particles=10_000, + vectorize_particles=True, + max_plate_nesting=0, + strict_enumeration_warning=False, + ) + expected = 18.611 + + try: + actual = elbo.loss(model, guide, data) + assert_close(actual, expected, rtol=0.1) + except NotImplementedError: + pass + + actual = elbo.loss_and_grads(model, guide, data) + assert_close(actual, expected, rtol=0.1) + + +@pytest.mark.parametrize("num_particles", [1, 10]) +@pytest.mark.parametrize( + "Elbo", + [ + Trace_ELBO, + JitTrace_ELBO, + TraceGraph_ELBO, + JitTraceGraph_ELBO, + TraceEnum_ELBO, + JitTraceEnum_ELBO, + TraceMeanField_ELBO, + JitTraceMeanField_ELBO, + ], +) +def test_svi(Elbo, num_particles): + pyro.clear_param_store() + data = torch.arange(10.0) + + def model(data): + loc = pyro.param("loc", constant(0.0)) + scale = pyro.param("scale", constant(1.0), constraint=constraints.positive) + pyro.sample( + "x", dist.Normal(loc, scale).expand_by(data.shape).to_event(1), obs=data + ) + + def guide(data): + pass + + elbo = Elbo(num_particles=num_particles, strict_enumeration_warning=False) + inference = SVI(model, guide, Adam({"lr": 1e-6}), elbo) + for i in range(100): + inference.step(data) + + +@pytest.mark.parametrize("enumerate2", ["sequential", "parallel"]) +@pytest.mark.parametrize("enumerate1", ["sequential", "parallel"]) +@pytest.mark.parametrize("plate_dim", [1, 2]) +def test_svi_enum(plate_dim, enumerate1, enumerate2): + pyro.clear_param_store() + num_particles = 10 + q = pyro.param("q", constant(0.75), constraint=constraints.unit_interval) + p = 0.2693204236205713 # for which kl(Bernoulli(q), Bernoulli(p)) = 0.5 + + def model(): + pyro.sample("x", dist.Bernoulli(p)) + for i in pyro.plate("plate", plate_dim): + pyro.sample("y_{}".format(i), dist.Bernoulli(p)) + + def guide(): + q = pyro.param("q") + pyro.sample("x", dist.Bernoulli(q), infer={"enumerate": enumerate1}) + for i in pyro.plate("plate", plate_dim): + pyro.sample( + "y_{}".format(i), dist.Bernoulli(q), infer={"enumerate": enumerate2} + ) + + kl = (1 + plate_dim) * kl_divergence(dist.Bernoulli(q), dist.Bernoulli(p)) + expected_loss = kl.item() + expected_grad = grad(kl, [q.unconstrained()])[0] + + inner_particles = 2 + outer_particles = num_particles // inner_particles + elbo = TraceEnum_ELBO( + max_plate_nesting=0, + strict_enumeration_warning=any([enumerate1, enumerate2]), + num_particles=inner_particles, + ignore_jit_warnings=True, + ) + actual_loss = ( + sum(elbo.loss_and_grads(model, guide) for i in range(outer_particles)) + / outer_particles + ) + actual_grad = q.unconstrained().grad / outer_particles + + assert_equal( + actual_loss, + expected_loss, + prec=0.3, + msg="".join( + [ + "\nexpected loss = {}".format(expected_loss), + "\n actual loss = {}".format(actual_loss), + ] + ), + ) + assert_equal( + actual_grad, + expected_grad, + prec=0.5, + msg="".join( + [ + "\nexpected grad = {}".format(expected_grad.detach().cpu().numpy()), + "\n actual grad = {}".format(actual_grad.detach().cpu().numpy()), + ] + ), + ) + + +@pytest.mark.parametrize("vectorized", [False, True]) +@pytest.mark.parametrize("Elbo", [TraceEnum_ELBO, JitTraceEnum_ELBO]) +def test_beta_bernoulli(Elbo, vectorized): + pyro.clear_param_store() + data = torch.tensor([1.0] * 6 + [0.0] * 4) + + def model1(data): + alpha0 = constant(10.0) + beta0 = constant(10.0) + f = pyro.sample("latent_fairness", dist.Beta(alpha0, beta0)) + for i in pyro.plate("plate", len(data)): + pyro.sample("obs_{}".format(i), dist.Bernoulli(f), obs=data[i]) + + def model2(data): + alpha0 = constant(10.0) + beta0 = constant(10.0) + f = pyro.sample("latent_fairness", dist.Beta(alpha0, beta0)) + pyro.sample( + "obs", dist.Bernoulli(f).expand_by(data.shape).to_event(1), obs=data + ) + + model = model2 if vectorized else model1 + + def guide(data): + alpha_q = pyro.param("alpha_q", constant(15.0), constraint=constraints.positive) + beta_q = pyro.param("beta_q", constant(15.0), constraint=constraints.positive) + pyro.sample("latent_fairness", dist.Beta(alpha_q, beta_q)) + + elbo = Elbo( + num_particles=7, strict_enumeration_warning=False, ignore_jit_warnings=True + ) + optim = Adam({"lr": 0.0005, "betas": (0.90, 0.999)}) + svi = SVI(model, guide, optim, elbo) + for step in range(40): + svi.step(data) + + +@pytest.mark.parametrize( + "Elbo", + [ + Trace_ELBO, + JitTrace_ELBO, + TraceGraph_ELBO, + JitTraceGraph_ELBO, + TraceEnum_ELBO, + JitTraceEnum_ELBO, + TraceMeanField_ELBO, + JitTraceMeanField_ELBO, + ], +) +def test_svi_irregular_batch_size(Elbo): + pyro.clear_param_store() + + @poutine.broadcast + def model(data): + loc = pyro.param("loc", constant(0.0)) + scale = pyro.param("scale", constant(1.0), constraint=constraints.positive) + with pyro.plate("data", data.shape[0]): + pyro.sample("x", dist.Normal(loc, scale).expand([data.shape[0]]), obs=data) + + def guide(data): + pass + + pyro.clear_param_store() + elbo = Elbo(strict_enumeration_warning=False, max_plate_nesting=1) + inference = SVI(model, guide, Adam({"lr": 1e-6}), elbo) + inference.step(torch.ones(10)) + inference.step(torch.ones(3)) + + +@pytest.mark.parametrize("vectorized", [False, True]) +@pytest.mark.parametrize("Elbo", [TraceEnum_ELBO, JitTraceEnum_ELBO]) +def test_dirichlet_bernoulli(Elbo, vectorized): + pyro.clear_param_store() + data = torch.tensor([1.0] * 6 + [0.0] * 4) + + def model1(data): + concentration0 = constant([10.0, 10.0]) + f = pyro.sample("latent_fairness", dist.Dirichlet(concentration0))[1] + for i in pyro.plate("plate", len(data)): + pyro.sample("obs_{}".format(i), dist.Bernoulli(f), obs=data[i]) + + def model2(data): + concentration0 = constant([10.0, 10.0]) + f = pyro.sample("latent_fairness", dist.Dirichlet(concentration0))[1] + pyro.sample( + "obs", dist.Bernoulli(f).expand_by(data.shape).to_event(1), obs=data + ) + + model = model2 if vectorized else model1 + + def guide(data): + concentration_q = pyro.param( + "concentration_q", constant([15.0, 15.0]), constraint=constraints.positive + ) + pyro.sample("latent_fairness", dist.Dirichlet(concentration_q)) + + elbo = Elbo( + num_particles=7, strict_enumeration_warning=False, ignore_jit_warnings=True + ) + optim = Adam({"lr": 0.0005, "betas": (0.90, 0.999)}) + svi = SVI(model, guide, optim, elbo) + for step in range(40): + svi.step(data) + + +@pytest.mark.parametrize("length", [1, 2, 10]) +def test_traceenum_elbo(length): + hidden_dim = 10 + transition = pyro.param( + "transition", + 0.3 / hidden_dim + 0.7 * torch.eye(hidden_dim), + constraint=constraints.positive, + ) + means = pyro.param("means", torch.arange(float(hidden_dim))) + data = 1 + 2 * torch.randn(length) + + @ignore_jit_warnings() + def model(data): + transition = pyro.param("transition") + means = pyro.param("means") + states = [torch.tensor(0)] + for t in pyro.markov(range(len(data))): + states.append( + pyro.sample( + "states_{}".format(t), + dist.Categorical(transition[states[-1]]), + infer={"enumerate": "parallel"}, + ) + ) + pyro.sample( + "obs_{}".format(t), dist.Normal(means[states[-1]], 1.0), obs=data[t] + ) + return tuple(states) + + def guide(data): + pass + + expected_loss = TraceEnum_ELBO(max_plate_nesting=0).differentiable_loss( + model, guide, data + ) + actual_loss = JitTraceEnum_ELBO(max_plate_nesting=0).differentiable_loss( + model, guide, data + ) + assert_equal(expected_loss, actual_loss) + + expected_grads = grad(expected_loss, [transition, means], allow_unused=True) + actual_grads = grad(actual_loss, [transition, means], allow_unused=True) + for e, a, name in zip(expected_grads, actual_grads, ["transition", "means"]): + assert_equal(e, a, msg="bad gradient for {}".format(name)) + + +@pytest.mark.parametrize("length", [1, 2, 10]) +@pytest.mark.parametrize("temperature", [0, 1], ids=["map", "sample"]) +def test_infer_discrete(temperature, length): + @ignore_jit_warnings() + def hmm(transition, means, data): + states = [torch.tensor(0)] + for t in pyro.markov(range(len(data))): + states.append( + pyro.sample( + "states_{}".format(t), + dist.Categorical(transition[states[-1]]), + infer={"enumerate": "parallel"}, + ) + ) + pyro.sample( + "obs_{}".format(t), dist.Normal(means[states[-1]], 1.0), obs=data[t] + ) + return tuple(states) + + hidden_dim = 10 + transition = 0.3 / hidden_dim + 0.7 * torch.eye(hidden_dim) + means = torch.arange(float(hidden_dim)) + data = 1 + 2 * torch.randn(length) + + decoder = infer_discrete(hmm, first_available_dim=-1, temperature=temperature) + jit_decoder = pyro.ops.jit.trace(decoder) + + states = decoder(transition, means, data) + jit_states = jit_decoder(transition, means, data) + assert len(states) == len(jit_states) + for state, jit_state in zip(states, jit_states): + assert state.shape == jit_state.shape + if temperature == 0: + assert_equal(state, jit_state) + + +@pytest.mark.parametrize( + "x,y", + [ + ( + CondIndepStackFrame("a", -1, torch.tensor(2000), 2), + CondIndepStackFrame("a", -1, 2000, 2), + ), + ( + CondIndepStackFrame("a", -1, 1, 2), + CondIndepStackFrame("a", -1, torch.tensor(1), 2), + ), + ], +) +def test_cond_indep_equality(x, y): + assert x == y + assert not x != y + assert hash(x) == hash(y) + + +def test_jit_arange_workaround(): + def fn(x): + y = torch.ones(x.shape[0], dtype=torch.long, device=x.device) + return torch.cumsum(y, 0) - 1 + + compiled = torch.jit.trace(fn, torch.ones(3)) + assert_equal(compiled(torch.ones(10)), torch.arange(10)) diff --git a/pyro/source/tests/infer/test_multi_sample_elbos.py b/pyro/source/tests/infer/test_multi_sample_elbos.py new file mode 100644 index 0000000000000000000000000000000000000000..5b56e682673252c38219ed8ba361155583475c6f --- /dev/null +++ b/pyro/source/tests/infer/test_multi_sample_elbos.py @@ -0,0 +1,58 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +import pyro +import pyro.distributions as dist +from pyro.infer import RenyiELBO +from tests.common import assert_close + + +def check_elbo(model, guide, Elbo): + elbo = Elbo(num_particles=2, vectorize_particles=False) + pyro.set_rng_seed(123) + loss1 = elbo.loss(model, guide) + pyro.set_rng_seed(123) + loss2 = elbo.loss_and_grads(model, guide) + assert_close(loss1, loss2) + + elbo = Elbo(num_particles=10000, vectorize_particles=True) + loss1 = elbo.loss(model, guide) + loss2 = elbo.loss_and_grads(model, guide) + assert_close(loss1, loss2, atol=0.1) + + +@pytest.mark.parametrize("Elbo", [RenyiELBO]) +def test_inner_outer(Elbo): + data = torch.randn(2, 3) + + def model(): + with pyro.plate("outer", 3, dim=-1): + x = pyro.sample("x", dist.Normal(0, 1)) + with pyro.plate("inner", 2, dim=-2): + pyro.sample("y", dist.Normal(x, 1), obs=data) + + def guide(): + with pyro.plate("outer", 3, dim=-1): + pyro.sample("x", dist.Normal(1, 1)) + + check_elbo(model, guide, Elbo) + + +@pytest.mark.parametrize("Elbo", [RenyiELBO]) +def test_outer_inner(Elbo): + data = torch.randn(2, 3) + + def model(): + with pyro.plate("outer", 2, dim=-2): + x = pyro.sample("x", dist.Normal(0, 1)) + with pyro.plate("inner", 3, dim=-1): + pyro.sample("y", dist.Normal(x, 1), obs=data) + + def guide(): + with pyro.plate("outer", 2, dim=-2): + pyro.sample("x", dist.Normal(1, 1)) + + check_elbo(model, guide, Elbo) diff --git a/pyro/source/tests/infer/test_predictive.py b/pyro/source/tests/infer/test_predictive.py new file mode 100644 index 0000000000000000000000000000000000000000..ca155ed2fde832f740465441142bbbf8fd42d858 --- /dev/null +++ b/pyro/source/tests/infer/test_predictive.py @@ -0,0 +1,310 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging + +import pytest +import torch + +import pyro +import pyro.distributions as dist +import pyro.optim as optim +import pyro.poutine as poutine +from pyro.infer import SVI, MHResampler, Predictive, Trace_ELBO, WeighedPredictive +from pyro.infer.autoguide import AutoDelta, AutoDiagonalNormal +from pyro.ops.stats import quantile, weighed_quantile +from tests.common import assert_close + + +def model(num_trials): + with pyro.plate("data", num_trials.size(0)): + phi_prior = dist.Uniform(num_trials.new_tensor(0.0), num_trials.new_tensor(1.0)) + success_prob = pyro.sample("phi", phi_prior) + return pyro.sample("obs", dist.Binomial(num_trials, success_prob)) + + +def one_hot_model(pseudocounts, classes=None): + probs_prior = dist.Dirichlet(pseudocounts) + probs = pyro.sample("probs", probs_prior) + with pyro.plate("classes", classes.size(0) if classes is not None else 1, dim=-1): + return pyro.sample("obs", dist.OneHotCategorical(probs), obs=classes) + + +def beta_guide(num_trials): + phi_c0 = pyro.param( + "phi_c0", num_trials.new_tensor(5.0).expand([num_trials.size(0)]) + ) + phi_c1 = pyro.param( + "phi_c1", num_trials.new_tensor(5.0).expand([num_trials.size(0)]) + ) + with pyro.plate("data", num_trials.size(0)): + phi_posterior = dist.Beta(concentration0=phi_c0, concentration1=phi_c1) + pyro.sample("phi", phi_posterior) + + +@pytest.mark.parametrize( + "predictive, num_svi_steps, test_unweighed_convergence", + [ + (Predictive, 5000, None), + (WeighedPredictive, 5000, True), + (WeighedPredictive, 1000, False), + ], +) +@pytest.mark.parametrize("parallel", [False, True]) +def test_posterior_predictive_svi_manual_guide( + parallel, predictive, num_svi_steps, test_unweighed_convergence +): + true_probs = torch.ones(5) * 0.7 + num_trials = ( + torch.ones(5) * 400 + ) # Reduced to 400 from 1000 in order for guide optimization to converge + num_samples = 10000 + num_success = dist.Binomial(num_trials, true_probs).sample() + conditioned_model = poutine.condition(model, data={"obs": num_success}) + elbo = Trace_ELBO(num_particles=100, vectorize_particles=True) + svi = SVI(conditioned_model, beta_guide, optim.Adam(dict(lr=3.0)), elbo) + for i in range(num_svi_steps): + svi.step(num_trials) + posterior_predictive = predictive( + model, + guide=beta_guide, + num_samples=num_samples, + parallel=parallel, + return_sites=["_RETURN"], + ) + if predictive is Predictive: + marginal_return_vals = posterior_predictive(num_trials)["_RETURN"] + else: + weighed_samples = posterior_predictive( + num_trials, model_guide=conditioned_model + ) + marginal_return_vals = weighed_samples.samples["_RETURN"] + assert marginal_return_vals.shape[:1] == weighed_samples.log_weights.shape + # Resample weighed samples + resampler = MHResampler(posterior_predictive) + num_mh_steps = 10 + for mh_step_count in range(num_mh_steps): + resampled_weighed_samples = resampler( + num_trials, model_guide=conditioned_model + ) + resampled_marginal_return_vals = resampled_weighed_samples.samples["_RETURN"] + # Calculate CDF quantiles + quantile_test_point = 0.95 + quantile_test_point_value = quantile( + marginal_return_vals, [quantile_test_point] + )[0] + weighed_quantile_test_point_value = weighed_quantile( + marginal_return_vals, [quantile_test_point], weighed_samples.log_weights + )[0] + resampled_quantile_test_point_value = quantile( + resampled_marginal_return_vals, [quantile_test_point] + )[0] + logging.info( + "Unweighed quantile at test point is: " + str(quantile_test_point_value) + ) + logging.info( + "Weighed quantile at test point is: " + + str(weighed_quantile_test_point_value) + ) + logging.info( + "Resampled quantile at test point is: " + + str(resampled_quantile_test_point_value) + ) + # Weighed and resampled quantiles should match + assert_close( + weighed_quantile_test_point_value, + resampled_quantile_test_point_value, + rtol=0.01, + ) + if test_unweighed_convergence: + # Weights should be uniform as the guide has the same distribution as the model + assert weighed_samples.log_weights.std() < 0.6 + # Effective sample size should be close to actual number of samples taken from the guide + assert weighed_samples.get_ESS() > 0.8 * num_samples + # Weighed and unweighed quantiles should match if guide converged to true model + assert_close( + quantile_test_point_value, + resampled_quantile_test_point_value, + rtol=0.01, + ) + assert_close(marginal_return_vals.mean(dim=0), torch.ones(5) * 280, rtol=0.1) + + +@pytest.mark.parametrize("predictive", [Predictive, WeighedPredictive]) +@pytest.mark.parametrize("parallel", [False, True]) +def test_posterior_predictive_svi_auto_delta_guide(parallel, predictive): + true_probs = torch.ones(5) * 0.7 + num_trials = torch.ones(5) * 1000 + num_success = dist.Binomial(num_trials, true_probs).sample() + conditioned_model = poutine.condition(model, data={"obs": num_success}) + guide = AutoDelta(conditioned_model) + svi = SVI(conditioned_model, guide, optim.Adam(dict(lr=1.0)), Trace_ELBO()) + for i in range(1000): + svi.step(num_trials) + posterior_predictive = predictive( + model, guide=guide, num_samples=10000, parallel=parallel + ) + if predictive is Predictive: + marginal_return_vals = posterior_predictive.get_samples(num_trials)["obs"] + else: + weighed_samples = posterior_predictive.get_samples( + num_trials, model_guide=conditioned_model + ) + marginal_return_vals = weighed_samples.samples["obs"] + assert marginal_return_vals.shape[:1] == weighed_samples.log_weights.shape + assert_close(marginal_return_vals.mean(dim=0), torch.ones(5) * 700, rtol=0.05) + + +@pytest.mark.parametrize("predictive", [Predictive, WeighedPredictive]) +@pytest.mark.parametrize("return_trace", [False, True]) +def test_posterior_predictive_svi_auto_diag_normal_guide(return_trace, predictive): + true_probs = torch.ones(5) * 0.7 + num_trials = torch.ones(5) * 1000 + num_success = dist.Binomial(num_trials, true_probs).sample() + conditioned_model = poutine.condition(model, data={"obs": num_success}) + guide = AutoDiagonalNormal(conditioned_model) + svi = SVI(conditioned_model, guide, optim.Adam(dict(lr=0.1)), Trace_ELBO()) + for i in range(1000): + svi.step(num_trials) + posterior_predictive = predictive( + model, guide=guide, num_samples=10000, parallel=True + ) + if return_trace: + marginal_return_vals = posterior_predictive.get_vectorized_trace( + num_trials + ).nodes["obs"]["value"] + else: + if predictive is Predictive: + marginal_return_vals = posterior_predictive.get_samples(num_trials)["obs"] + else: + weighed_samples = posterior_predictive.get_samples( + num_trials, model_guide=conditioned_model + ) + marginal_return_vals = weighed_samples.samples["obs"] + assert marginal_return_vals.shape[:1] == weighed_samples.log_weights.shape + assert_close(marginal_return_vals.mean(dim=0), torch.ones(5) * 700, rtol=0.05) + + +def test_posterior_predictive_svi_one_hot(): + pseudocounts = torch.ones(3) * 0.1 + true_probs = torch.tensor([0.15, 0.6, 0.25]) + classes = dist.OneHotCategorical(true_probs).sample((10000,)) + guide = AutoDelta(one_hot_model) + svi = SVI(one_hot_model, guide, optim.Adam(dict(lr=0.1)), Trace_ELBO()) + for i in range(1000): + svi.step(pseudocounts, classes=classes) + posterior_samples = Predictive(guide, num_samples=10000).get_samples(pseudocounts) + posterior_predictive = Predictive(one_hot_model, posterior_samples) + marginal_return_vals = posterior_predictive.get_samples(pseudocounts)["obs"] + assert_close(marginal_return_vals.mean(dim=0), true_probs.unsqueeze(0), rtol=0.1) + + +@pytest.mark.parametrize("predictive", [Predictive, WeighedPredictive]) +@pytest.mark.parametrize("parallel", [False, True]) +def test_shapes(parallel, predictive): + num_samples = 10 + + def model(): + x = pyro.sample("x", dist.Normal(0, 1).expand([2]).to_event(1)) + with pyro.plate("plate", 5): + loc, log_scale = x.unbind(-1) + y = pyro.sample("y", dist.Normal(loc, log_scale.exp())) + return dict(x=x, y=y) + + guide = AutoDiagonalNormal(model) + + # Compute by hand. + vectorize = pyro.plate("_vectorize", num_samples, dim=-2) + trace = poutine.trace(vectorize(guide)).get_trace() + expected = poutine.replay(vectorize(model), trace)() + + # Use Predictive. + actual = predictive( + model, + guide=guide, + return_sites=["x", "y"], + num_samples=num_samples, + parallel=parallel, + )() + if predictive is WeighedPredictive: + assert actual.samples["x"].shape[:1] == actual.log_weights.shape + assert actual.samples["y"].shape[:1] == actual.log_weights.shape + actual = actual.samples + assert set(actual) == set(expected) + assert actual["x"].shape == expected["x"].shape + assert actual["y"].shape == expected["y"].shape + + +@pytest.mark.parametrize("predictive", [Predictive, WeighedPredictive]) +@pytest.mark.parametrize("with_plate", [True, False]) +@pytest.mark.parametrize("event_shape", [(), (2,)]) +def test_deterministic(with_plate, event_shape, predictive): + def model(y=None): + with pyro.util.optional(pyro.plate("plate", 3), with_plate): + x = pyro.sample("x", dist.Normal(0, 1).expand(event_shape).to_event()) + x2 = pyro.deterministic("x2", x**2, event_dim=len(event_shape)) + + pyro.deterministic("x3", x2) + return pyro.sample("obs", dist.Normal(x2, 0.1).to_event(), obs=y) + + y = torch.tensor(4.0) + guide = AutoDiagonalNormal(model) + svi = SVI(model, guide, optim.Adam(dict(lr=0.1)), Trace_ELBO()) + for i in range(100): + svi.step(y) + + actual = predictive( + model, guide=guide, return_sites=["x2", "x3"], num_samples=1000 + )() + if predictive is WeighedPredictive: + assert actual.samples["x2"].shape[:1] == actual.log_weights.shape + assert actual.samples["x3"].shape[:1] == actual.log_weights.shape + actual = actual.samples + x2_batch_shape = (3,) if with_plate else () + assert actual["x2"].shape == (1000,) + x2_batch_shape + event_shape + # x3 shape is prepended 1 to match Pyro shape semantics + x3_batch_shape = (1, 3) if with_plate else () + assert actual["x3"].shape == (1000,) + x3_batch_shape + event_shape + assert_close(actual["x2"].mean(), y, rtol=0.1) + assert_close(actual["x3"].mean(), y, rtol=0.1) + + +def test_get_mask_optimization(): + def model(): + x = pyro.sample("x", dist.Normal(0, 1)) + pyro.sample("y", dist.Normal(x, 1), obs=torch.tensor(0.0)) + called.add("model-always") + if poutine.get_mask() is not False: + called.add("model-sometimes") + pyro.factor("f", x + 1) + + def guide(): + x = pyro.sample("x", dist.Normal(0, 1)) + called.add("guide-always") + if poutine.get_mask() is not False: + called.add("guide-sometimes") + pyro.factor("g", 2 - x) + + called = set() + trace = poutine.trace(guide).get_trace() + poutine.replay(model, trace)() + assert "model-always" in called + assert "guide-always" in called + assert "model-sometimes" in called + assert "guide-sometimes" in called + + called = set() + with poutine.mask(mask=False): + trace = poutine.trace(guide).get_trace() + poutine.replay(model, trace)() + assert "model-always" in called + assert "guide-always" in called + assert "model-sometimes" not in called + assert "guide-sometimes" not in called + + called = set() + Predictive(model, guide=guide, num_samples=2, parallel=True)() + assert "model-always" in called + assert "guide-always" in called + assert "model-sometimes" not in called + assert "guide-sometimes" not in called diff --git a/pyro/source/tests/infer/test_resampler.py b/pyro/source/tests/infer/test_resampler.py new file mode 100644 index 0000000000000000000000000000000000000000..89393465038b0ac9a9ebf67781b1748e21dd0f41 --- /dev/null +++ b/pyro/source/tests/infer/test_resampler.py @@ -0,0 +1,43 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import functools + +import pytest +import torch + +import pyro +import pyro.distributions as dist +from pyro.infer.resampler import Resampler +from tests.common import assert_close + + +@pytest.mark.parametrize("stable", [False, True]) +def test_resampling_cache(stable): + def model_(a): + pyro.sample("alpha", dist.Dirichlet(a)) + + def simulator(): + a = torch.tensor([2.0, 1.0, 1.0, 2.0]) + alpha = pyro.sample("alpha", dist.Dirichlet(a)) + pyro.sample("x", dist.Normal(alpha, 0.01).to_event(1)) + + # initialize + a = torch.tensor([1.0, 2.0, 1.0, 1.0]) + guide = functools.partial(model_, a) + resampler = Resampler(guide, simulator, num_guide_samples=10000) + + # resample + b = torch.tensor([1.0, 2.0, 3.0, 4.0]) + model = functools.partial(model_, b) + samples = resampler.sample(model, 1000) + assert all(v.shape[:1] == (1000,) for v in samples.values()) + num_unique = len(set(map(tuple, samples["alpha"].tolist()))) + assert num_unique >= 500 + + # check moments + expected_mean = b / b.sum() + actual_mean = samples["alpha"].mean(0) + assert_close(actual_mean, expected_mean, atol=0.01) + actual_mean = samples["x"].mean(0) + assert_close(actual_mean, expected_mean, atol=0.01) diff --git a/pyro/source/tests/infer/test_sampling.py b/pyro/source/tests/infer/test_sampling.py new file mode 100644 index 0000000000000000000000000000000000000000..f3cf071ea90d6e326a745fe8eea4c942a30c7f73 --- /dev/null +++ b/pyro/source/tests/infer/test_sampling.py @@ -0,0 +1,103 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from unittest import TestCase + +import pytest +import torch + +import pyro +import pyro.infer +from pyro.distributions import Bernoulli, Normal +from pyro.infer import EmpiricalMarginal +from tests.common import assert_equal + + +class HMMSamplingTestCase(TestCase): + def setUp(self): + # simple Gaussian-emission HMM + def model(): + p_latent = pyro.param("p1", torch.tensor([[0.7], [0.3]])) + p_obs = pyro.param("p2", torch.tensor([[0.9], [0.1]])) + + latents = [torch.ones(1, 1)] + observes = [] + for t in range(self.model_steps): + latents.append( + pyro.sample( + "latent_{}".format(str(t)), + Bernoulli( + torch.index_select(p_latent, 0, latents[-1].view(-1).long()) + ), + ) + ) + + observes.append( + pyro.sample( + "observe_{}".format(str(t)), + Bernoulli( + torch.index_select(p_obs, 0, latents[-1].view(-1).long()) + ), + obs=self.data[t], + ) + ) + return torch.sum(torch.cat(latents)) + + self.model_steps = 3 + self.data = [torch.ones(1, 1) for _ in range(self.model_steps)] + self.model = model + + +class NormalNormalSamplingTestCase(TestCase): + def setUp(self): + pyro.clear_param_store() + + def model(): + loc = pyro.sample("loc", Normal(torch.zeros(1), torch.ones(1))) + xd = Normal(loc, torch.ones(1)) + pyro.sample("xs", xd, obs=self.data) + return loc + + def guide(): + return pyro.sample("loc", Normal(torch.zeros(1), torch.ones(1))) + + # data + self.data = torch.zeros(50, 1) + self.loc_mean = torch.zeros(1) + self.loc_stddev = torch.sqrt(torch.ones(1) / 51.0) + + # model and guide + self.model = model + self.guide = guide + + +class ImportanceTest(NormalNormalSamplingTestCase): + @pytest.mark.init(rng_seed=0) + def test_importance_guide(self): + posterior = pyro.infer.Importance( + self.model, guide=self.guide, num_samples=5000 + ).run() + marginal = EmpiricalMarginal(posterior) + assert_equal( + 0, torch.linalg.norm(marginal.mean - self.loc_mean).item(), prec=0.01 + ) + assert_equal( + 0, + torch.linalg.norm(marginal.variance.sqrt() - self.loc_stddev).item(), + prec=0.1, + ) + + @pytest.mark.init(rng_seed=0) + def test_importance_prior(self): + posterior = pyro.infer.Importance( + self.model, guide=None, num_samples=10000 + ).run() + marginal = EmpiricalMarginal(posterior) + assert_equal( + 0, torch.linalg.norm(marginal.mean - self.loc_mean).item(), prec=0.01 + ) + assert_equal( + 0, + torch.linalg.norm(marginal.variance.sqrt() - self.loc_stddev).item(), + prec=0.1, + ) diff --git a/pyro/source/tests/infer/test_smcfilter.py b/pyro/source/tests/infer/test_smcfilter.py new file mode 100644 index 0000000000000000000000000000000000000000..62431a17fe38198d3cdbce3f16725fafe2c849c0 --- /dev/null +++ b/pyro/source/tests/infer/test_smcfilter.py @@ -0,0 +1,272 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.infer import SMCFilter +from pyro.infer.smcfilter import _systematic_sample +from tests.common import assert_close + + +@pytest.mark.parametrize("size", range(1, 32)) +def test_systematic_sample(size): + pyro.set_rng_seed(size) + probs = torch.randn(size).exp() + probs /= probs.sum() + + num_samples = 20000 + index = _systematic_sample(probs.expand(num_samples, size)) + histogram = torch.zeros_like(probs) + histogram.scatter_add_( + -1, index.reshape(-1), probs.new_ones(1).expand(num_samples * size) + ) + + expected = probs * size + actual = histogram / num_samples + assert_close(actual, expected, atol=0.01) + + +class SmokeModel: + def __init__(self, state_size, plate_size): + self.state_size = state_size + self.plate_size = plate_size + + def init(self, state): + self.t = 0 + state["x_mean"] = pyro.sample("x_mean", dist.Normal(0.0, 1.0)) + state["y_mean"] = pyro.sample( + "y_mean", + dist.MultivariateNormal( + torch.zeros(self.state_size), torch.eye(self.state_size) + ), + ) + + def step(self, state, x=None, y=None): + v = pyro.sample("v_{}".format(self.t), dist.Normal(0.0, 1.0)) + with pyro.plate("plate", self.plate_size): + w = pyro.sample("w_{}".format(self.t), dist.Normal(v, 1.0)) + x = pyro.sample( + "x_{}".format(self.t), dist.Normal(state["x_mean"] + w, 1), obs=x + ) + y = pyro.sample( + "y_{}".format(self.t), + dist.MultivariateNormal( + state["y_mean"] + w.unsqueeze(-1), torch.eye(self.state_size) + ), + obs=y, + ) + self.t += 1 + return x, y + + +class SmokeGuide: + def __init__(self, state_size, plate_size): + self.state_size = state_size + self.plate_size = plate_size + + def init(self, state): + self.t = 0 + pyro.sample("x_mean", dist.Normal(0.0, 2.0)) + pyro.sample( + "y_mean", + dist.MultivariateNormal( + torch.zeros(self.state_size), 2.0 * torch.eye(self.state_size) + ), + ) + + def step(self, state, x=None, y=None): + v = pyro.sample("v_{}".format(self.t), dist.Normal(0.0, 2.0)) + with pyro.plate("plate", self.plate_size): + pyro.sample("w_{}".format(self.t), dist.Normal(v, 2.0)) + self.t += 1 + + +@pytest.mark.parametrize("max_plate_nesting", [1, 2]) +@pytest.mark.parametrize("state_size", [2, 5, 1]) +@pytest.mark.parametrize("plate_size", [3, 7, 1]) +@pytest.mark.parametrize("num_steps", [1, 2, 10]) +def test_smoke(max_plate_nesting, state_size, plate_size, num_steps): + model = SmokeModel(state_size, plate_size) + guide = SmokeGuide(state_size, plate_size) + + smc = SMCFilter( + model, guide, num_particles=100, max_plate_nesting=max_plate_nesting + ) + + true_model = SmokeModel(state_size, plate_size) + + state = {} + true_model.init(state) + truth = [true_model.step(state) for t in range(num_steps)] + + smc.init() + assert set(smc.state) == {"x_mean", "y_mean"} + for x, y in truth: + smc.step(x, y) + assert set(smc.state) == {"x_mean", "y_mean"} + smc.get_empirical() + + +class HarmonicModel: + def __init__(self): + self.A = torch.tensor([[0.0, 1.0], [-1.0, 0.0]]) + self.B = torch.tensor([3.0, 3.0]) + self.sigma_z = torch.tensor(1.0) + self.sigma_y = torch.tensor(1.0) + + def init(self, state): + self.t = 0 + state["z"] = pyro.sample( + "z_init", dist.Delta(torch.tensor([1.0, 0.0]), event_dim=1) + ) + + def step(self, state, y=None): + self.t += 1 + state["z"] = pyro.sample( + "z_{}".format(self.t), + dist.Normal(state["z"].matmul(self.A), self.B * self.sigma_z).to_event(1), + ) + y = pyro.sample( + "y_{}".format(self.t), dist.Normal(state["z"][..., 0], self.sigma_y), obs=y + ) + + state["z_{}".format(self.t)] = state["z"] # saved for testing + + return state["z"], y + + +class HarmonicGuide: + def __init__(self): + self.model = HarmonicModel() + + def init(self, state): + self.t = 0 + pyro.sample("z_init", dist.Delta(torch.tensor([1.0, 0.0]), event_dim=1)) + + def step(self, state, y=None): + self.t += 1 + + # Proposal distribution + pyro.sample( + "z_{}".format(self.t), + dist.Normal( + state["z"].matmul(self.model.A), torch.tensor([2.0, 2.0]) + ).to_event(1), + ) + + +def generate_data(): + model = HarmonicModel() + + state = {} + model.init(state) + zs = [torch.tensor([1.0, 0.0])] + ys = [None] + for t in range(50): + z, y = model.step(state) + zs.append(z) + ys.append(y) + + return zs, ys + + +def score_latent(zs, ys): + model = HarmonicModel() + with poutine.trace() as trace: + with poutine.condition(data={"z_{}".format(t): z for t, z in enumerate(zs)}): + state = {} + model.init(state) + for y in ys[1:]: + model.step(state, y) + + return trace.trace.log_prob_sum() + + +def test_likelihood_ratio(): + model = HarmonicModel() + guide = HarmonicGuide() + + smc = SMCFilter(model, guide, num_particles=100, max_plate_nesting=0) + + zs, ys = generate_data() + zs_true, ys_true = generate_data() + smc.init() + for y in ys_true[1:]: + smc.step(y) + i = smc.state._log_weights.max(0)[1] + values = {k: v[i] for k, v in smc.state.items()} + + zs_pred = [torch.tensor([1.0, 0.0])] + zs_pred += [values["z_{}".format(t)] for t in range(1, 51)] + + assert score_latent(zs_true, ys_true) > score_latent(zs, ys_true) + assert score_latent(zs_pred, ys_true) > score_latent(zs_pred, ys) + assert score_latent(zs_pred, ys_true) > score_latent(zs, ys_true) + + +def test_gaussian_filter(): + dim = 4 + init_dist = dist.MultivariateNormal( + torch.zeros(dim), scale_tril=torch.eye(dim) * 10 + ) + trans_mat = torch.eye(dim) + trans_dist = dist.MultivariateNormal(torch.zeros(dim), scale_tril=torch.eye(dim)) + obs_mat = torch.eye(dim) + obs_dist = dist.MultivariateNormal(torch.zeros(dim), scale_tril=torch.eye(dim) * 2) + hmm = dist.GaussianHMM(init_dist, trans_mat, trans_dist, obs_mat, obs_dist) + + class Model: + def init(self, state): + state["z"] = pyro.sample("z_init", init_dist) + self.t = 0 + + def step(self, state, datum=None): + state["z"] = pyro.sample( + "z_{}".format(self.t), + dist.MultivariateNormal(state["z"], scale_tril=trans_dist.scale_tril), + ) + datum = pyro.sample( + "obs_{}".format(self.t), + dist.MultivariateNormal(state["z"], scale_tril=obs_dist.scale_tril), + obs=datum, + ) + self.t += 1 + return datum + + class Guide: + def init(self, state): + pyro.sample("z_init", init_dist) + self.t = 0 + + def step(self, state, datum): + pyro.sample( + "z_{}".format(self.t), + dist.MultivariateNormal( + state["z"], scale_tril=trans_dist.scale_tril * 2 + ), + ) + self.t += 1 + + # Generate data. + num_steps = 20 + model = Model() + state = {} + model.init(state) + data = torch.stack([model.step(state) for _ in range(num_steps)]) + + # Perform inference. + model = Model() + guide = Guide() + smc = SMCFilter(model, guide, num_particles=1000, max_plate_nesting=0) + smc.init() + for t, datum in enumerate(data): + smc.step(datum) + expected = hmm.filter(data[: 1 + t]) + actual = smc.get_empirical()["z"] + assert_close(actual.variance**0.5, expected.variance**0.5, atol=0.1, rtol=0.5) + sigma = actual.variance.max().item() ** 0.5 + assert_close(actual.mean, expected.mean, atol=3 * sigma) diff --git a/pyro/source/tests/infer/test_svgd.py b/pyro/source/tests/infer/test_svgd.py new file mode 100644 index 0000000000000000000000000000000000000000..d90efb0c8c1c8d1c7051fa944d13b930238448db --- /dev/null +++ b/pyro/source/tests/infer/test_svgd.py @@ -0,0 +1,149 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +import pyro +import pyro.distributions as dist +from pyro.infer import SVGD, IMQSteinKernel, RBFSteinKernel +from pyro.infer.autoguide.utils import _product +from pyro.optim import Adam +from tests.common import assert_equal + + +@pytest.mark.parametrize( + "latent_dist", + [ + dist.Normal(torch.zeros(2), torch.ones(2)).to_event(1), + dist.LogNormal(torch.tensor([-1.0]), torch.tensor([0.7])).to_event(1), + dist.LogNormal(torch.tensor(-1.0), torch.tensor(0.7)), + dist.Beta(torch.tensor([0.3]), torch.tensor([0.7])).to_event(1), + ], +) +@pytest.mark.parametrize("mode", ["univariate", "multivariate"]) +@pytest.mark.parametrize("stein_kernel", [RBFSteinKernel, IMQSteinKernel]) +def test_mean_variance(latent_dist, mode, stein_kernel, verbose=True): + pyro.clear_param_store() + + def model(): + pyro.sample("z", latent_dist) + + kernel = stein_kernel() + adam = Adam({"lr": 0.05}) + svgd = SVGD(model, kernel, adam, 200, 0, mode=mode) + + bandwidth_start = 1.0 + bandwidth_end = 5.0 + n_steps = 301 + + # scramble initial particles + svgd.step() + pyro.param("svgd_particles").unconstrained().data *= 1.3 + pyro.param("svgd_particles").unconstrained().data += 0.7 + + for step in range(n_steps): + kernel.bandwidth_factor = bandwidth_start + (step / n_steps) * ( + bandwidth_end - bandwidth_start + ) + squared_gradients = svgd.step() + if step % 125 == 0: + print("[step %03d] " % step, squared_gradients) + + final_particles = svgd.get_named_particles()["z"] + + if verbose: + print( + "[mean]: actual, expected = ", + final_particles.mean(0).data.numpy(), + latent_dist.mean.data.numpy(), + ) + print( + "[var]: actual, expected = ", + final_particles.var(0).data.numpy(), + latent_dist.variance.data.numpy(), + ) + + assert_equal(final_particles.mean(0), latent_dist.mean, prec=0.01) + prec = 0.05 if mode == "multivariate" else 0.02 + assert_equal(final_particles.var(0), latent_dist.variance, prec=prec) + + +@pytest.mark.parametrize("shape", [(1, 1), (2, 1, 3), (4, 2), (1, 2, 1, 3)]) +@pytest.mark.parametrize("stein_kernel", [RBFSteinKernel, IMQSteinKernel]) +def test_shapes(shape, stein_kernel): + pyro.clear_param_store() + shape1, shape2 = (5,) + shape, shape + (6,) + + mean_init1 = torch.arange(_product(shape1)).double().reshape(shape1) / 100.0 + mean_init2 = torch.arange(_product(shape2)).double().reshape(shape2) + + def model(): + pyro.sample("z1", dist.LogNormal(mean_init1, 1.0e-8).to_event(len(shape1))) + pyro.sample("scalar", dist.Normal(0.0, 1.0)) + pyro.sample("z2", dist.Normal(mean_init2, 1.0e-8).to_event(len(shape2))) + + num_particles = 7 + svgd = SVGD(model, stein_kernel(), Adam({"lr": 0.0}), num_particles, 0) + + for step in range(2): + svgd.step() + + particles = svgd.get_named_particles() + assert particles["z1"].shape == (num_particles,) + shape1 + assert particles["z2"].shape == (num_particles,) + shape2 + + for particle in range(num_particles): + assert_equal(particles["z1"][particle, ...], mean_init1.exp(), prec=1.0e-6) + assert_equal(particles["z2"][particle, ...], mean_init2, prec=1.0e-6) + + +@pytest.mark.parametrize("mode", ["univariate", "multivariate"]) +@pytest.mark.parametrize("stein_kernel", [RBFSteinKernel, IMQSteinKernel]) +def test_conjugate(mode, stein_kernel, verbose=False): + data = torch.tensor([1.0, 2.0, 3.0, 3.0, 5.0]).unsqueeze(-1).expand(5, 3) + alpha0 = torch.tensor([1.0, 1.8, 2.3]) + beta0 = torch.tensor([2.3, 1.5, 1.2]) + alpha_n = alpha0 + data.sum(0) # posterior alpha + beta_n = beta0 + data.size(0) # posterior beta + + def model(): + with pyro.plate("rates", alpha0.size(0)): + latent = pyro.sample("latent", dist.Gamma(alpha0, beta0)) + with pyro.plate("data", data.size(0)): + pyro.sample("obs", dist.Poisson(latent), obs=data) + + kernel = stein_kernel() + adam = Adam({"lr": 0.05}) + svgd = SVGD(model, kernel, adam, 200, 2, mode=mode) + + bandwidth_start = 1.0 + bandwidth_end = 5.0 + n_steps = 451 + + for step in range(n_steps): + kernel.bandwidth_factor = bandwidth_start + (step / n_steps) * ( + bandwidth_end - bandwidth_start + ) + squared_gradients = svgd.step() + if step % 150 == 0: + print("[step %03d] " % step, squared_gradients) + + final_particles = svgd.get_named_particles()["latent"] + posterior_dist = dist.Gamma(alpha_n, beta_n) + + if verbose: + print( + "[mean]: actual, expected = ", + final_particles.mean(0).data.numpy(), + posterior_dist.mean.data.numpy(), + ) + print( + "[var]: actual, expected = ", + final_particles.var(0).data.numpy(), + posterior_dist.variance.data.numpy(), + ) + + assert_equal(final_particles.mean(0)[0], posterior_dist.mean, prec=0.02) + prec = 0.05 if mode == "multivariate" else 0.02 + assert_equal(final_particles.var(0)[0], posterior_dist.variance, prec=prec) diff --git a/pyro/source/tests/infer/test_tmc.py b/pyro/source/tests/infer/test_tmc.py new file mode 100644 index 0000000000000000000000000000000000000000..eddf64f9a01fdf4d6f89697e224ceab759aebf4b --- /dev/null +++ b/pyro/source/tests/infer/test_tmc.py @@ -0,0 +1,298 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging +import math + +import pytest +import torch +from torch.autograd import grad +from torch.distributions import constraints + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.distributions.testing import fakes +from pyro.infer import config_enumerate +from pyro.infer.importance import vectorized_importance_weights +from pyro.infer.traceenum_elbo import TraceEnum_ELBO +from pyro.infer.tracetmc_elbo import TraceTMC_ELBO +from tests.common import assert_equal + +logger = logging.getLogger(__name__) + + +@pytest.mark.parametrize("depth", [1, 2, 3, 4, 5]) +@pytest.mark.parametrize("num_samples", [None, 200]) +@pytest.mark.parametrize("max_plate_nesting", [2, 3]) +@pytest.mark.parametrize("tmc_strategy", ["diagonal", "mixture"]) +def test_tmc_categoricals(depth, max_plate_nesting, num_samples, tmc_strategy): + qs = [pyro.param("q0", torch.tensor([0.4, 0.6], requires_grad=True))] + for i in range(1, depth): + qs.append( + pyro.param( + "q{}".format(i), + torch.randn(2, 2).abs().detach().requires_grad_(), + constraint=constraints.simplex, + ) + ) + qs.append(pyro.param("qy", torch.tensor([0.75, 0.25], requires_grad=True))) + + qs = [q.unconstrained() for q in qs] + + data = (torch.rand(4, 3) > 0.5).to(dtype=qs[-1].dtype, device=qs[-1].device) + + def model(): + x = pyro.sample("x0", dist.Categorical(pyro.param("q0"))) + with pyro.plate("local", 3): + for i in range(1, depth): + x = pyro.sample( + "x{}".format(i), + dist.Categorical(pyro.param("q{}".format(i))[..., x, :]), + ) + with pyro.plate("data", 4): + pyro.sample("y", dist.Bernoulli(pyro.param("qy")[..., x]), obs=data) + + elbo = TraceEnum_ELBO(max_plate_nesting=max_plate_nesting) + enum_model = config_enumerate( + model, default="parallel", expand=False, num_samples=None, tmc=tmc_strategy + ) + expected_loss = (-elbo.differentiable_loss(enum_model, lambda: None)).exp() + expected_grads = grad(expected_loss, qs) + + tmc = TraceTMC_ELBO(max_plate_nesting=max_plate_nesting) + tmc_model = config_enumerate( + model, + default="parallel", + expand=False, + num_samples=num_samples, + tmc=tmc_strategy, + ) + actual_loss = (-tmc.differentiable_loss(tmc_model, lambda: None)).exp() + actual_grads = grad(actual_loss, qs) + + prec = 0.05 + assert_equal( + actual_loss, + expected_loss, + prec=prec, + msg="".join( + [ + "\nexpected loss = {}".format(expected_loss), + "\n actual loss = {}".format(actual_loss), + ] + ), + ) + + for actual_grad, expected_grad in zip(actual_grads, expected_grads): + assert_equal( + actual_grad, + expected_grad, + prec=prec, + msg="".join( + [ + "\nexpected grad = {}".format(expected_grad.detach().cpu().numpy()), + "\n actual grad = {}".format(actual_grad.detach().cpu().numpy()), + ] + ), + ) + + +@pytest.mark.parametrize("depth", [1, 2]) +@pytest.mark.parametrize("num_samples,expand", [(1000, False)]) +@pytest.mark.parametrize("max_plate_nesting", [0]) +@pytest.mark.parametrize("reparameterized", [True, False]) +@pytest.mark.parametrize("guide_type", ["prior", "factorized", "nonfactorized"]) +@pytest.mark.parametrize("tmc_strategy", ["diagonal", "mixture"]) +def test_tmc_normals_chain_iwae( + depth, + num_samples, + max_plate_nesting, + reparameterized, + guide_type, + expand, + tmc_strategy, +): + # compare iwae and tmc + q2 = pyro.param("q2", torch.tensor(0.5, requires_grad=True)) + qs = (q2.unconstrained(),) + + def model(reparameterized): + Normal = dist.Normal if reparameterized else fakes.NonreparameterizedNormal + x = pyro.sample("x0", Normal(pyro.param("q2"), math.sqrt(1.0 / depth))) + for i in range(1, depth): + x = pyro.sample("x{}".format(i), Normal(x, math.sqrt(1.0 / depth))) + pyro.sample("y", Normal(x, 1.0), obs=torch.tensor(float(1))) + + def factorized_guide(reparameterized): + Normal = dist.Normal if reparameterized else fakes.NonreparameterizedNormal + pyro.sample("x0", Normal(pyro.param("q2"), math.sqrt(1.0 / depth))) + for i in range(1, depth): + pyro.sample("x{}".format(i), Normal(0.0, math.sqrt(float(i + 1) / depth))) + + def nonfactorized_guide(reparameterized): + Normal = dist.Normal if reparameterized else fakes.NonreparameterizedNormal + x = pyro.sample("x0", Normal(pyro.param("q2"), math.sqrt(1.0 / depth))) + for i in range(1, depth): + x = pyro.sample("x{}".format(i), Normal(x, math.sqrt(1.0 / depth))) + + guide = ( + factorized_guide + if guide_type == "factorized" + else ( + nonfactorized_guide + if guide_type == "nonfactorized" + else poutine.block( + model, + hide_fn=lambda msg: msg["type"] == "sample" and msg["is_observed"], + ) + ) + ) + flat_num_samples = num_samples ** min(depth, 2) # don't use too many, expensive + vectorized_log_weights, _, _ = vectorized_importance_weights( + model, + guide, + True, + max_plate_nesting=max_plate_nesting, + num_samples=flat_num_samples, + ) + assert vectorized_log_weights.shape == (flat_num_samples,) + expected_loss = ( + vectorized_log_weights.logsumexp(dim=-1) - math.log(float(flat_num_samples)) + ).exp() + expected_grads = grad(expected_loss, qs) + + tmc = TraceTMC_ELBO(max_plate_nesting=max_plate_nesting) + tmc_model = config_enumerate( + model, + default="parallel", + expand=expand, + num_samples=num_samples, + tmc=tmc_strategy, + ) + tmc_guide = config_enumerate( + guide, + default="parallel", + expand=expand, + num_samples=num_samples, + tmc=tmc_strategy, + ) + actual_loss = ( + -tmc.differentiable_loss(tmc_model, tmc_guide, reparameterized) + ).exp() + actual_grads = grad(actual_loss, qs) + + assert_equal( + actual_loss, + expected_loss, + prec=0.05, + msg="".join( + [ + "\nexpected loss = {}".format(expected_loss), + "\n actual loss = {}".format(actual_loss), + ] + ), + ) + + grad_prec = 0.05 if reparameterized else 0.1 + for actual_grad, expected_grad in zip(actual_grads, expected_grads): + assert_equal( + actual_grad, + expected_grad, + prec=grad_prec, + msg="".join( + [ + "\nexpected grad = {}".format(expected_grad.detach().cpu().numpy()), + "\n actual grad = {}".format(actual_grad.detach().cpu().numpy()), + ] + ), + ) + + +@pytest.mark.parametrize("depth", [1, 2, 3, 4]) +@pytest.mark.parametrize("num_samples,expand", [(200, False)]) +@pytest.mark.parametrize("max_plate_nesting", [0]) +@pytest.mark.parametrize("guide_type", ["prior", "factorized", "nonfactorized"]) +@pytest.mark.parametrize("reparameterized", [False, True]) +@pytest.mark.parametrize("tmc_strategy", ["diagonal", "mixture"]) +def test_tmc_normals_chain_gradient( + depth, + num_samples, + max_plate_nesting, + expand, + guide_type, + reparameterized, + tmc_strategy, +): + # compare reparameterized and nonreparameterized gradient estimates + q2 = pyro.param("q2", torch.tensor(0.5, requires_grad=True)) + qs = (q2.unconstrained(),) + + def model(reparameterized): + Normal = dist.Normal if reparameterized else fakes.NonreparameterizedNormal + x = pyro.sample("x0", Normal(pyro.param("q2"), math.sqrt(1.0 / depth))) + for i in range(1, depth): + x = pyro.sample("x{}".format(i), Normal(x, math.sqrt(1.0 / depth))) + pyro.sample("y", Normal(x, 1.0), obs=torch.tensor(float(1))) + + def factorized_guide(reparameterized): + Normal = dist.Normal if reparameterized else fakes.NonreparameterizedNormal + pyro.sample("x0", Normal(pyro.param("q2"), math.sqrt(1.0 / depth))) + for i in range(1, depth): + pyro.sample("x{}".format(i), Normal(0.0, math.sqrt(float(i + 1) / depth))) + + def nonfactorized_guide(reparameterized): + Normal = dist.Normal if reparameterized else fakes.NonreparameterizedNormal + x = pyro.sample("x0", Normal(pyro.param("q2"), math.sqrt(1.0 / depth))) + for i in range(1, depth): + x = pyro.sample("x{}".format(i), Normal(x, math.sqrt(1.0 / depth))) + + tmc = TraceTMC_ELBO(max_plate_nesting=max_plate_nesting) + tmc_model = config_enumerate( + model, + default="parallel", + expand=expand, + num_samples=num_samples, + tmc=tmc_strategy, + ) + guide = ( + factorized_guide + if guide_type == "factorized" + else ( + nonfactorized_guide if guide_type == "nonfactorized" else lambda *args: None + ) + ) + tmc_guide = config_enumerate( + guide, + default="parallel", + expand=expand, + num_samples=num_samples, + tmc=tmc_strategy, + ) + + # gold values from Funsor + expected_grads = ( + torch.tensor({1: 0.0999, 2: 0.0860, 3: 0.0802, 4: 0.0771}[depth]), + ) + + # convert to linear space for unbiasedness + actual_loss = ( + -tmc.differentiable_loss(tmc_model, tmc_guide, reparameterized) + ).exp() + actual_grads = grad(actual_loss, qs) + + grad_prec = 0.05 if reparameterized else 0.1 + + for actual_grad, expected_grad in zip(actual_grads, expected_grads): + print(actual_loss) + assert_equal( + actual_grad, + expected_grad, + prec=grad_prec, + msg="".join( + [ + "\nexpected grad = {}".format(expected_grad.detach().cpu().numpy()), + "\n actual grad = {}".format(actual_grad.detach().cpu().numpy()), + ] + ), + ) diff --git a/pyro/source/tests/infer/test_util.py b/pyro/source/tests/infer/test_util.py new file mode 100644 index 0000000000000000000000000000000000000000..519fa6b251d68928dacd78e3605a97335d7a0f32 --- /dev/null +++ b/pyro/source/tests/infer/test_util.py @@ -0,0 +1,84 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import pytest +import torch + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.infer.importance import psis_diagnostic +from pyro.infer.util import MultiFrameTensor +from tests.common import assert_equal + + +def xy_model(): + d = dist.Bernoulli(0.5) + x_axis = pyro.plate("x_axis", 2, dim=-1) + y_axis = pyro.plate("y_axis", 3, dim=-2) + pyro.sample("b", d) + with x_axis: + pyro.sample("bx", d.expand_by([2])) + with y_axis: + pyro.sample("by", d.expand_by([3, 1])) + with x_axis, y_axis: + pyro.sample("bxy", d.expand_by([3, 2])) + + +def test_multi_frame_tensor(): + stacks = {} + actual = MultiFrameTensor() + tr = poutine.trace(xy_model).get_trace() + for name, site in tr.nodes.items(): + if site["type"] == "sample": + log_prob = site["fn"].log_prob(site["value"]) + stacks[name] = site["cond_indep_stack"] + actual.add((site["cond_indep_stack"], log_prob)) + + assert len(actual) == 4 + + logp = math.log(0.5) + expected = { + "b": torch.ones(torch.Size()) * logp * (1 + 2 + 3 + 6), + "bx": torch.ones(torch.Size((2,))) * logp * (1 + 1 + 3 + 3), + "by": torch.ones(torch.Size((3, 1))) * logp * (1 + 2 + 1 + 2), + "bxy": torch.ones(torch.Size((3, 2))) * logp * (1 + 1 + 1 + 1), + } + for name, expected_sum in expected.items(): + actual_sum = actual.sum_to(stacks[name]) + assert_equal(actual_sum, expected_sum, msg=name) + + +@pytest.mark.parametrize("max_particles", [250 * 1000, 500 * 1000]) +@pytest.mark.parametrize("scale,krange", [(0.5, (0.7, 0.9)), (0.95, (0.05, 0.2))]) +@pytest.mark.parametrize("zdim", [1, 5]) +def test_psis_diagnostic(scale, krange, zdim, max_particles, num_particles=500 * 1000): + def model(zdim=1, scale=1.0): + with pyro.plate("x_axis", zdim, dim=-1): + pyro.sample("z", dist.Normal(0.0, 1.0).expand([zdim])) + + def guide(zdim=1, scale=1.0): + with pyro.plate("x_axis", zdim, dim=-1): + pyro.sample("z", dist.Normal(0.0, scale).expand([zdim])) + + k = psis_diagnostic( + model, + guide, + num_particles=num_particles, + max_simultaneous_particles=max_particles, + zdim=zdim, + scale=scale, + ) + assert k > krange[0] and k < krange[1] + + +def test_render_model_deterministic_param(): + def model(): + value = pyro.param("param", torch.tensor(0.0)) + pyro.deterministic("deterministic", value) + + graph = pyro.render_model(model, render_params=True, render_deterministic=True) + + assert "\tparam -> deterministic\n" in graph.body diff --git a/pyro/source/tests/infer/test_valid_models.py b/pyro/source/tests/infer/test_valid_models.py new file mode 100644 index 0000000000000000000000000000000000000000..3c6cfa8cdc1a2dbb37c6dd3c8edce2b72393f12e --- /dev/null +++ b/pyro/source/tests/infer/test_valid_models.py @@ -0,0 +1,2782 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging +import warnings +from collections import defaultdict + +import pytest +import torch +from torch.distributions import constraints + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.distributions.testing import fakes +from pyro.infer import ( + SVI, + EnergyDistance, + Trace_ELBO, + TraceEnum_ELBO, + TraceGraph_ELBO, + TraceMeanField_ELBO, + TraceTailAdaptive_ELBO, + config_enumerate, +) +from pyro.infer.reparam import LatentStableReparam +from pyro.infer.tracetmc_elbo import TraceTMC_ELBO +from pyro.infer.util import torch_item +from pyro.ops.indexing import Vindex +from pyro.optim import Adam +from pyro.poutine.plate_messenger import block_plate +from tests.common import assert_close + +logger = logging.getLogger(__name__) + +# This file tests a variety of model,guide pairs with valid and invalid structure. + + +def EnergyDistance_prior(**kwargs): + kwargs["prior_scale"] = 0.0 + kwargs.pop("strict_enumeration_warning", None) + return EnergyDistance(**kwargs) + + +def EnergyDistance_noprior(**kwargs): + kwargs["prior_scale"] = 1.0 + kwargs.pop("strict_enumeration_warning", None) + return EnergyDistance(**kwargs) + + +def assert_ok(model, guide, elbo, **kwargs): + """ + Assert that inference works without warnings or errors. + """ + pyro.clear_param_store() + inference = SVI(model, guide, Adam({"lr": 1e-6}), elbo) + inference.step(**kwargs) + try: + pyro.set_rng_seed(0) + loss = elbo.loss(model, guide, **kwargs) + if hasattr(elbo, "differentiable_loss"): + try: + pyro.set_rng_seed(0) + differentiable_loss = torch_item( + elbo.differentiable_loss(model, guide, **kwargs) + ) + except ValueError: + pass # Ignore cases where elbo cannot be differentiated + else: + assert_close(differentiable_loss, loss, atol=0.01) + if hasattr(elbo, "loss_and_grads"): + pyro.set_rng_seed(0) + loss_and_grads = elbo.loss_and_grads(model, guide, **kwargs) + assert_close(loss_and_grads, loss, atol=0.01) + except NotImplementedError: + pass # Ignore cases where loss isn't implemented, eg. TraceTailAdaptive_ELBO + + +def assert_error(model, guide, elbo, match=None): + """ + Assert that inference fails with an error. + """ + pyro.clear_param_store() + inference = SVI(model, guide, Adam({"lr": 1e-6}), elbo) + with pytest.raises( + (NotImplementedError, UserWarning, KeyError, ValueError, RuntimeError), + match=match, + ): + inference.step() + + +def assert_warning(model, guide, elbo): + """ + Assert that inference works but with a warning. + """ + pyro.clear_param_store() + inference = SVI(model, guide, Adam({"lr": 1e-6}), elbo) + with warnings.catch_warnings(record=True) as w: + warnings.simplefilter("always") + inference.step() + assert len(w), "No warnings were raised" + for warning in w: + logger.info(warning) + + +@pytest.mark.parametrize( + "Elbo", + [ + Trace_ELBO, + TraceGraph_ELBO, + TraceEnum_ELBO, + TraceTMC_ELBO, + EnergyDistance_prior, + EnergyDistance_noprior, + ], +) +@pytest.mark.parametrize("strict_enumeration_warning", [True, False]) +def test_nonempty_model_empty_guide_ok(Elbo, strict_enumeration_warning): + def model(): + loc = torch.tensor([0.0, 0.0]) + scale = torch.tensor([1.0, 1.0]) + pyro.sample("x", dist.Normal(loc, scale).to_event(1), obs=loc) + + def guide(): + pass + + elbo = Elbo(strict_enumeration_warning=strict_enumeration_warning) + if strict_enumeration_warning and Elbo in (TraceEnum_ELBO, TraceTMC_ELBO): + assert_warning(model, guide, elbo) + else: + assert_ok(model, guide, elbo) + + +@pytest.mark.parametrize( + "Elbo", + [ + Trace_ELBO, + TraceGraph_ELBO, + TraceEnum_ELBO, + TraceTMC_ELBO, + EnergyDistance_prior, + EnergyDistance_noprior, + ], +) +@pytest.mark.parametrize("strict_enumeration_warning", [True, False]) +def test_nonempty_model_empty_guide_error(Elbo, strict_enumeration_warning): + def model(): + pyro.sample("x", dist.Normal(0, 1)) + + def guide(): + pass + + elbo = Elbo(strict_enumeration_warning=strict_enumeration_warning) + assert_error(model, guide, elbo) + + +@pytest.mark.parametrize( + "Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO, TraceTMC_ELBO] +) +@pytest.mark.parametrize("strict_enumeration_warning", [True, False]) +def test_empty_model_empty_guide_ok(Elbo, strict_enumeration_warning): + def model(): + pass + + def guide(): + pass + + elbo = Elbo(strict_enumeration_warning=strict_enumeration_warning) + if strict_enumeration_warning and Elbo in (TraceEnum_ELBO, TraceTMC_ELBO): + assert_warning(model, guide, elbo) + else: + assert_ok(model, guide, elbo) + + +@pytest.mark.parametrize( + "Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO, TraceTMC_ELBO] +) +def test_variable_clash_in_model_error(Elbo): + def model(): + p = torch.tensor(0.5) + pyro.sample("x", dist.Bernoulli(p)) + pyro.sample("x", dist.Bernoulli(p)) # Should error here. + + def guide(): + p = pyro.param("p", torch.tensor(0.5, requires_grad=True)) + pyro.sample("x", dist.Bernoulli(p)) + + assert_error(model, guide, Elbo(), match="Multiple sample sites named") + + +@pytest.mark.parametrize( + "Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO, TraceTMC_ELBO] +) +def test_model_guide_dim_mismatch_error(Elbo): + def model(): + loc = torch.zeros(2) + scale = torch.ones(2) + pyro.sample("x", dist.Normal(loc, scale).to_event(1)) + + def guide(): + loc = pyro.param("loc", torch.zeros(2, 1, requires_grad=True)) + scale = pyro.param("scale", torch.ones(2, 1, requires_grad=True)) + pyro.sample("x", dist.Normal(loc, scale).to_event(2)) + + assert_error( + model, + guide, + Elbo(strict_enumeration_warning=False), + match="invalid log_prob shape|Model and guide event_dims disagree", + ) + + +@pytest.mark.parametrize( + "Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO, TraceTMC_ELBO] +) +def test_model_guide_shape_mismatch_error(Elbo): + def model(): + loc = torch.zeros(1, 2) + scale = torch.ones(1, 2) + pyro.sample("x", dist.Normal(loc, scale).to_event(2)) + + def guide(): + loc = pyro.param("loc", torch.zeros(2, 1, requires_grad=True)) + scale = pyro.param("scale", torch.ones(2, 1, requires_grad=True)) + pyro.sample("x", dist.Normal(loc, scale).to_event(2)) + + assert_error( + model, + guide, + Elbo(strict_enumeration_warning=False), + match="Model and guide shapes disagree", + ) + + +@pytest.mark.parametrize("Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO]) +def test_variable_clash_in_guide_error(Elbo): + def model(): + p = torch.tensor(0.5) + pyro.sample("x", dist.Bernoulli(p)) + + def guide(): + p = pyro.param("p", torch.tensor(0.5, requires_grad=True)) + pyro.sample("x", dist.Bernoulli(p)) + pyro.sample("x", dist.Bernoulli(p)) # Should error here. + + assert_error(model, guide, Elbo(), match="Multiple sample sites named") + + +@pytest.mark.parametrize("has_rsample", [False, True]) +@pytest.mark.parametrize( + "Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO, TraceTMC_ELBO] +) +def test_set_has_rsample_ok(has_rsample, Elbo): + # This model has sparse gradients, so users may want to disable + # reparametrized sampling to reduce variance of gradient estimates. + # However both versions should be correct, i.e. with or without has_rsample. + def model(): + z = pyro.sample("z", dist.Normal(0, 1)) + loc = (z * 100).clamp(min=0, max=1) # sparse gradients + pyro.sample("x", dist.Normal(loc, 1), obs=torch.tensor(0.0)) + + def guide(): + loc = pyro.param("loc", torch.tensor(0.0)) + pyro.sample("z", dist.Normal(loc, 1).has_rsample_(has_rsample)) + + if Elbo is TraceEnum_ELBO: + guide = config_enumerate(guide) + elif Elbo is TraceTMC_ELBO: + guide = config_enumerate(guide, num_samples=2) + + assert_ok(model, guide, Elbo(strict_enumeration_warning=False)) + + +@pytest.mark.parametrize( + "Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO, TraceTMC_ELBO] +) +def test_not_has_rsample_ok(Elbo): + def model(): + z = pyro.sample("z", dist.Normal(0, 1)) + p = z.round().clamp(min=0.2, max=0.8) # discontinuous + pyro.sample("x", dist.Bernoulli(p), obs=torch.tensor(0.0)) + + def guide(): + loc = pyro.param("loc", torch.tensor(0.0)) + pyro.sample("z", dist.Normal(loc, 1).has_rsample_(False)) + + if Elbo is TraceEnum_ELBO: + guide = config_enumerate(guide) + elif Elbo is TraceTMC_ELBO: + guide = config_enumerate(guide, num_samples=2) + + assert_ok(model, guide, Elbo(strict_enumeration_warning=False)) + + +@pytest.mark.parametrize("subsample_size", [None, 2], ids=["full", "subsample"]) +@pytest.mark.parametrize( + "Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO, TraceTMC_ELBO] +) +def test_iplate_ok(subsample_size, Elbo): + def model(): + p = torch.tensor(0.5) + for i in pyro.plate("plate", 4, subsample_size): + pyro.sample("x_{}".format(i), dist.Bernoulli(p)) + + def guide(): + p = pyro.param("p", torch.tensor(0.5, requires_grad=True)) + for i in pyro.plate("plate", 4, subsample_size): + pyro.sample("x_{}".format(i), dist.Bernoulli(p)) + + if Elbo is TraceEnum_ELBO: + guide = config_enumerate(guide) + elif Elbo is TraceTMC_ELBO: + guide = config_enumerate(guide, num_samples=2) + + assert_ok(model, guide, Elbo()) + + +@pytest.mark.parametrize( + "Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO, TraceTMC_ELBO] +) +def test_iplate_variable_clash_error(Elbo): + def model(): + p = torch.tensor(0.5) + for i in pyro.plate("plate", 2): + # Each loop iteration should give the sample site a different name. + pyro.sample("x", dist.Bernoulli(p)) + + def guide(): + p = pyro.param("p", torch.tensor(0.5, requires_grad=True)) + for i in pyro.plate("plate", 2): + # Each loop iteration should give the sample site a different name. + pyro.sample("x", dist.Bernoulli(p)) + + if Elbo is TraceEnum_ELBO: + guide = config_enumerate(guide) + elif Elbo is TraceTMC_ELBO: + guide = config_enumerate(guide, num_samples=2) + + assert_error(model, guide, Elbo(), match="Multiple sample sites named") + + +@pytest.mark.parametrize("subsample_size", [None, 5], ids=["full", "subsample"]) +@pytest.mark.parametrize( + "Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO, TraceTMC_ELBO] +) +def test_plate_ok(subsample_size, Elbo): + def model(): + p = torch.tensor(0.5) + with pyro.plate("plate", 10, subsample_size) as ind: + pyro.sample("x", dist.Bernoulli(p).expand_by([len(ind)])) + + def guide(): + p = pyro.param("p", torch.tensor(0.5, requires_grad=True)) + with pyro.plate("plate", 10, subsample_size) as ind: + pyro.sample("x", dist.Bernoulli(p).expand_by([len(ind)])) + + if Elbo is TraceEnum_ELBO: + guide = config_enumerate(guide) + elif Elbo is TraceTMC_ELBO: + guide = config_enumerate(guide, num_samples=2) + + assert_ok(model, guide, Elbo()) + + +@pytest.mark.parametrize("subsample_size", [None, 5], ids=["full", "subsample"]) +@pytest.mark.parametrize( + "Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO, TraceTMC_ELBO] +) +def test_plate_subsample_param_ok(subsample_size, Elbo): + def model(): + p = torch.tensor(0.5) + with pyro.plate("plate", 10, subsample_size): + pyro.sample("x", dist.Bernoulli(p)) + + def guide(): + with pyro.plate("plate", 10, subsample_size) as ind: + p0 = pyro.param("p0", torch.tensor(0.0), event_dim=0) + assert p0.shape == () + p = pyro.param("p", 0.5 * torch.ones(10), event_dim=0) + assert len(p) == len(ind) + pyro.sample("x", dist.Bernoulli(p)) + + if Elbo is TraceEnum_ELBO: + guide = config_enumerate(guide) + elif Elbo is TraceTMC_ELBO: + guide = config_enumerate(guide, num_samples=2) + + assert_ok(model, guide, Elbo()) + + +@pytest.mark.parametrize("subsample_size", [None, 5], ids=["full", "subsample"]) +@pytest.mark.parametrize( + "Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO, TraceTMC_ELBO] +) +def test_plate_subsample_primitive_ok(subsample_size, Elbo): + def model(): + p = torch.tensor(0.5) + with pyro.plate("plate", 10, subsample_size): + pyro.sample("x", dist.Bernoulli(p)) + + def guide(): + with pyro.plate("plate", 10, subsample_size) as ind: + p0 = torch.tensor(0.0) + p0 = pyro.subsample(p0, event_dim=0) + assert p0.shape == () + p = 0.5 * torch.ones(10) + p = pyro.subsample(p, event_dim=0) + assert len(p) == len(ind) + pyro.sample("x", dist.Bernoulli(p)) + + if Elbo is TraceEnum_ELBO: + guide = config_enumerate(guide) + elif Elbo is TraceTMC_ELBO: + guide = config_enumerate(guide, num_samples=2) + + assert_ok(model, guide, Elbo()) + + +@pytest.mark.parametrize("subsample_size", [None, 5], ids=["full", "subsample"]) +@pytest.mark.parametrize( + "Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO, TraceTMC_ELBO] +) +@pytest.mark.parametrize( + "shape,ok", + [ + ((), True), + ((1,), True), + ((10,), True), + ((3, 1), True), + ((3, 10), True), + ((5), False), + ((3, 5), False), + ], +) +def test_plate_param_size_mismatch_error(subsample_size, Elbo, shape, ok): + def model(): + p = torch.tensor(0.5) + with pyro.plate("plate", 10, subsample_size): + pyro.sample("x", dist.Bernoulli(p)) + + def guide(): + with pyro.plate("plate", 10, subsample_size): + pyro.param("p0", torch.ones(shape), event_dim=0) + p = pyro.param("p", torch.ones(10), event_dim=0) + pyro.sample("x", dist.Bernoulli(p)) + + if Elbo is TraceEnum_ELBO: + guide = config_enumerate(guide) + elif Elbo is TraceTMC_ELBO: + guide = config_enumerate(guide, num_samples=2) + + if ok: + assert_ok(model, guide, Elbo()) + else: + assert_error(model, guide, Elbo(), match="invalid shape of pyro.param") + + +@pytest.mark.parametrize( + "Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO, TraceTMC_ELBO] +) +def test_plate_no_size_ok(Elbo): + def model(): + p = torch.tensor(0.5) + with pyro.plate("plate"): + pyro.sample("x", dist.Bernoulli(p).expand_by([10])) + + def guide(): + p = pyro.param("p", torch.tensor(0.5, requires_grad=True)) + with pyro.plate("plate"): + pyro.sample("x", dist.Bernoulli(p).expand_by([10])) + + if Elbo is TraceEnum_ELBO: + guide = config_enumerate(guide) + elif Elbo is TraceTMC_ELBO: + guide = config_enumerate(guide, default="parallel", num_samples=2) + + assert_ok(model, guide, Elbo()) + + +@pytest.mark.parametrize("max_plate_nesting", [0, float("inf")]) +@pytest.mark.parametrize("subsample_size", [None, 2], ids=["full", "subsample"]) +@pytest.mark.parametrize( + "Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO, TraceTMC_ELBO] +) +def test_iplate_iplate_ok(subsample_size, Elbo, max_plate_nesting): + def model(): + p = torch.tensor(0.5) + outer_iplate = pyro.plate("plate_0", 3, subsample_size) + inner_iplate = pyro.plate("plate_1", 3, subsample_size) + for i in outer_iplate: + for j in inner_iplate: + pyro.sample("x_{}_{}".format(i, j), dist.Bernoulli(p)) + + def guide(): + p = pyro.param("p", torch.tensor(0.5, requires_grad=True)) + outer_iplate = pyro.plate("plate_0", 3, subsample_size) + inner_iplate = pyro.plate("plate_1", 3, subsample_size) + for i in outer_iplate: + for j in inner_iplate: + pyro.sample("x_{}_{}".format(i, j), dist.Bernoulli(p)) + + if Elbo is TraceEnum_ELBO: + guide = config_enumerate(guide, "parallel") + elif Elbo is TraceTMC_ELBO: + guide = config_enumerate(guide, num_samples=2) + + assert_ok(model, guide, Elbo(max_plate_nesting=max_plate_nesting)) + + +@pytest.mark.parametrize("max_plate_nesting", [0, float("inf")]) +@pytest.mark.parametrize("subsample_size", [None, 2], ids=["full", "subsample"]) +@pytest.mark.parametrize( + "Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO, TraceTMC_ELBO] +) +def test_iplate_iplate_swap_ok(subsample_size, Elbo, max_plate_nesting): + def model(): + p = torch.tensor(0.5) + outer_iplate = pyro.plate("plate_0", 3, subsample_size) + inner_iplate = pyro.plate("plate_1", 3, subsample_size) + for i in outer_iplate: + for j in inner_iplate: + pyro.sample("x_{}_{}".format(i, j), dist.Bernoulli(p)) + + def guide(): + p = pyro.param("p", torch.tensor(0.5, requires_grad=True)) + outer_iplate = pyro.plate("plate_0", 3, subsample_size) + inner_iplate = pyro.plate("plate_1", 3, subsample_size) + for j in inner_iplate: + for i in outer_iplate: + pyro.sample("x_{}_{}".format(i, j), dist.Bernoulli(p)) + + if Elbo is TraceEnum_ELBO: + guide = config_enumerate(guide, "parallel") + elif Elbo is TraceTMC_ELBO: + guide = config_enumerate(guide, default="parallel", num_samples=2) + + assert_ok(model, guide, Elbo(max_plate_nesting=max_plate_nesting)) + + +@pytest.mark.parametrize("subsample_size", [None, 5], ids=["full", "subsample"]) +@pytest.mark.parametrize( + "Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO, TraceTMC_ELBO] +) +def test_iplate_in_model_not_guide_ok(subsample_size, Elbo): + def model(): + p = torch.tensor(0.5) + for i in pyro.plate("plate", 10, subsample_size): + pass + pyro.sample("x", dist.Bernoulli(p)) + + def guide(): + p = pyro.param("p", torch.tensor(0.5, requires_grad=True)) + pyro.sample("x", dist.Bernoulli(p)) + + if Elbo is TraceEnum_ELBO: + guide = config_enumerate(guide) + elif Elbo is TraceTMC_ELBO: + guide = config_enumerate(guide, num_samples=2) + + assert_ok(model, guide, Elbo()) + + +@pytest.mark.parametrize("subsample_size", [None, 5], ids=["full", "subsample"]) +@pytest.mark.parametrize( + "Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO, TraceTMC_ELBO] +) +@pytest.mark.parametrize("is_validate", [True, False]) +def test_iplate_in_guide_not_model_error(subsample_size, Elbo, is_validate): + def model(): + p = torch.tensor(0.5) + pyro.sample("x", dist.Bernoulli(p)) + + def guide(): + p = pyro.param("p", torch.tensor(0.5, requires_grad=True)) + for i in pyro.plate("plate", 10, subsample_size): + pass + pyro.sample("x", dist.Bernoulli(p)) + + with pyro.validation_enabled(is_validate): + if is_validate: + assert_error( + model, + guide, + Elbo(), + match="Found plate statements in guide but not model", + ) + else: + assert_ok(model, guide, Elbo()) + + +@pytest.mark.parametrize("Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO]) +def test_plate_broadcast_error(Elbo): + def model(): + p = torch.tensor(0.5, requires_grad=True) + with pyro.plate("plate", 10, 5): + pyro.sample("x", dist.Bernoulli(p).expand_by([2])) + + assert_error(model, model, Elbo(), match="Shape mismatch inside plate") + + +@pytest.mark.parametrize( + "Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO, TraceTMC_ELBO] +) +def test_plate_iplate_ok(Elbo): + def model(): + p = torch.tensor(0.5) + with pyro.plate("plate", 3, 2) as ind: + for i in pyro.plate("iplate", 3, 2): + pyro.sample("x_{}".format(i), dist.Bernoulli(p).expand_by([len(ind)])) + + def guide(): + p = pyro.param("p", torch.tensor(0.5, requires_grad=True)) + with pyro.plate("plate", 3, 2) as ind: + for i in pyro.plate("iplate", 3, 2): + pyro.sample("x_{}".format(i), dist.Bernoulli(p).expand_by([len(ind)])) + + if Elbo is TraceEnum_ELBO: + guide = config_enumerate(guide) + elif Elbo is TraceTMC_ELBO: + guide = config_enumerate(guide, num_samples=2) + + assert_ok(model, guide, Elbo()) + + +@pytest.mark.parametrize( + "Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO, TraceTMC_ELBO] +) +def test_iplate_plate_ok(Elbo): + def model(): + p = torch.tensor(0.5) + inner_plate = pyro.plate("plate", 3, 2) + for i in pyro.plate("iplate", 3, 2): + with inner_plate as ind: + pyro.sample("x_{}".format(i), dist.Bernoulli(p).expand_by([len(ind)])) + + def guide(): + p = pyro.param("p", torch.tensor(0.5, requires_grad=True)) + inner_plate = pyro.plate("plate", 3, 2) + for i in pyro.plate("iplate", 3, 2): + with inner_plate as ind: + pyro.sample("x_{}".format(i), dist.Bernoulli(p).expand_by([len(ind)])) + + if Elbo is TraceEnum_ELBO: + guide = config_enumerate(guide) + elif Elbo is TraceTMC_ELBO: + guide = config_enumerate(guide, num_samples=2) + + assert_ok(model, guide, Elbo()) + + +@pytest.mark.parametrize( + "Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO, TraceTMC_ELBO] +) +@pytest.mark.parametrize("sizes", [(3,), (3, 4), (3, 4, 5)]) +def test_plate_stack_ok(Elbo, sizes): + def model(): + p = torch.tensor(0.5) + with pyro.plate_stack("plate_stack", sizes): + pyro.sample("x", dist.Bernoulli(p)) + + def guide(): + p = pyro.param("p", torch.tensor(0.5, requires_grad=True)) + with pyro.plate_stack("plate_stack", sizes): + pyro.sample("x", dist.Bernoulli(p)) + + if Elbo is TraceEnum_ELBO: + guide = config_enumerate(guide) + elif Elbo is TraceTMC_ELBO: + guide = config_enumerate(guide, num_samples=2) + + assert_ok(model, guide, Elbo()) + + +@pytest.mark.parametrize( + "Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO, TraceTMC_ELBO] +) +@pytest.mark.parametrize("sizes", [(3,), (3, 4), (3, 4, 5)]) +def test_plate_stack_and_plate_ok(Elbo, sizes): + def model(): + p = torch.tensor(0.5) + with pyro.plate_stack("plate_stack", sizes): + with pyro.plate("plate", 7): + pyro.sample("x", dist.Bernoulli(p)) + + def guide(): + p = pyro.param("p", torch.tensor(0.5, requires_grad=True)) + with pyro.plate_stack("plate_stack", sizes): + with pyro.plate("plate", 7): + pyro.sample("x", dist.Bernoulli(p)) + + if Elbo is TraceEnum_ELBO: + guide = config_enumerate(guide) + elif Elbo is TraceTMC_ELBO: + guide = config_enumerate(guide, num_samples=2) + + assert_ok(model, guide, Elbo()) + + +@pytest.mark.parametrize("sizes", [(3,), (3, 4), (3, 4, 5)]) +def test_plate_stack_sizes(sizes): + def model(): + p = 0.5 * torch.ones(3) + with pyro.plate_stack("plate_stack", sizes): + x = pyro.sample("x", dist.Bernoulli(p).to_event(1)) + assert x.shape == sizes + (3,) + + model() + + +@pytest.mark.parametrize( + "Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO, TraceTMC_ELBO] +) +def test_nested_plate_plate_ok(Elbo): + def model(): + p = torch.tensor(0.5, requires_grad=True) + with pyro.plate("plate_outer", 10, 5) as ind_outer: + pyro.sample("x", dist.Bernoulli(p).expand_by([len(ind_outer)])) + with pyro.plate("plate_inner", 11, 6) as ind_inner: + pyro.sample( + "y", dist.Bernoulli(p).expand_by([len(ind_inner), len(ind_outer)]) + ) + + if Elbo is TraceEnum_ELBO: + guide = config_enumerate(model) + elif Elbo is TraceTMC_ELBO: + guide = config_enumerate(model, num_samples=2) + else: + guide = model + + assert_ok(model, guide, Elbo()) + + +@pytest.mark.parametrize( + "Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO, TraceTMC_ELBO] +) +def test_plate_reuse_ok(Elbo): + def model(): + p = torch.tensor(0.5, requires_grad=True) + plate_outer = pyro.plate("plate_outer", 10, 5, dim=-1) + plate_inner = pyro.plate("plate_inner", 11, 6, dim=-2) + with plate_outer as ind_outer: + pyro.sample("x", dist.Bernoulli(p).expand_by([len(ind_outer)])) + with plate_inner as ind_inner: + pyro.sample("y", dist.Bernoulli(p).expand_by([len(ind_inner), 1])) + with plate_outer as ind_outer, plate_inner as ind_inner: + pyro.sample( + "z", dist.Bernoulli(p).expand_by([len(ind_inner), len(ind_outer)]) + ) + + if Elbo is TraceEnum_ELBO: + guide = config_enumerate(model) + elif Elbo is TraceTMC_ELBO: + guide = config_enumerate(model, num_samples=2) + else: + guide = model + + assert_ok(model, guide, Elbo()) + + +@pytest.mark.parametrize( + "Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO, TraceTMC_ELBO] +) +def test_nested_plate_plate_dim_error_1(Elbo): + def model(): + p = torch.tensor([0.5], requires_grad=True) + with pyro.plate("plate_outer", 10, 5) as ind_outer: + pyro.sample( + "x", dist.Bernoulli(p).expand_by([len(ind_outer)]) + ) # error here + with pyro.plate("plate_inner", 11, 6) as ind_inner: + pyro.sample("y", dist.Bernoulli(p).expand_by([len(ind_inner)])) + pyro.sample( + "z", dist.Bernoulli(p).expand_by([len(ind_outer), len(ind_inner)]) + ) + + if Elbo is TraceEnum_ELBO: + guide = config_enumerate(model) + elif Elbo is TraceTMC_ELBO: + guide = config_enumerate(model, num_samples=2) + else: + guide = model + + assert_error(model, guide, Elbo(), match="invalid log_prob shape") + + +@pytest.mark.parametrize("Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO]) +def test_nested_plate_plate_dim_error_2(Elbo): + def model(): + p = torch.tensor([0.5], requires_grad=True) + with pyro.plate("plate_outer", 10, 5) as ind_outer: + pyro.sample("x", dist.Bernoulli(p).expand_by([len(ind_outer), 1])) + with pyro.plate("plate_inner", 11, 6) as ind_inner: + pyro.sample( + "y", dist.Bernoulli(p).expand_by([len(ind_outer)]) + ) # error here + pyro.sample( + "z", dist.Bernoulli(p).expand_by([len(ind_outer), len(ind_inner)]) + ) + + guide = config_enumerate(model) if Elbo is TraceEnum_ELBO else model + assert_error(model, guide, Elbo(), match="Shape mismatch inside plate") + + +@pytest.mark.parametrize("Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO]) +def test_nested_plate_plate_dim_error_3(Elbo): + def model(): + p = torch.tensor([0.5], requires_grad=True) + with pyro.plate("plate_outer", 10, 5) as ind_outer: + pyro.sample("x", dist.Bernoulli(p).expand_by([len(ind_outer), 1])) + with pyro.plate("plate_inner", 11, 6) as ind_inner: + pyro.sample("y", dist.Bernoulli(p).expand_by([len(ind_inner)])) + pyro.sample( + "z", dist.Bernoulli(p).expand_by([len(ind_inner), 1]) + ) # error here + + guide = config_enumerate(model) if Elbo is TraceEnum_ELBO else model + assert_error(model, guide, Elbo(), match="invalid log_prob shape|shape mismatch") + + +@pytest.mark.parametrize("Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO]) +def test_nested_plate_plate_dim_error_4(Elbo): + def model(): + p = torch.tensor([0.5], requires_grad=True) + with pyro.plate("plate_outer", 10, 5) as ind_outer: + pyro.sample("x", dist.Bernoulli(p).expand_by([len(ind_outer), 1])) + with pyro.plate("plate_inner", 11, 6) as ind_inner: + pyro.sample("y", dist.Bernoulli(p).expand_by([len(ind_inner)])) + pyro.sample( + "z", dist.Bernoulli(p).expand_by([len(ind_outer), len(ind_outer)]) + ) # error here + + guide = config_enumerate(model) if Elbo is TraceEnum_ELBO else model + assert_error(model, guide, Elbo(), match="hape mismatch inside plate") + + +@pytest.mark.parametrize("Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO]) +def test_nested_plate_plate_subsample_param_ok(Elbo): + def model(): + with pyro.plate("plate_outer", 10, 5): + pyro.sample("x", dist.Bernoulli(0.2)) + with pyro.plate("plate_inner", 11, 6): + pyro.sample("y", dist.Bernoulli(0.2)) + + def guide(): + p0 = pyro.param("p0", 0.5 * torch.ones(4, 5), event_dim=2) + assert p0.shape == (4, 5) + with pyro.plate("plate_outer", 10, 5): + p1 = pyro.param("p1", 0.5 * torch.ones(10, 3), event_dim=1) + assert p1.shape == (5, 3) + px = pyro.param("px", 0.5 * torch.ones(10), event_dim=0) + assert px.shape == (5,) + pyro.sample("x", dist.Bernoulli(px)) + with pyro.plate("plate_inner", 11, 6): + py = pyro.param("py", 0.5 * torch.ones(11, 10), event_dim=0) + assert py.shape == (6, 5) + pyro.sample("y", dist.Bernoulli(py)) + + if Elbo is TraceEnum_ELBO: + guide = config_enumerate(guide) + assert_ok(model, guide, Elbo()) + + +@pytest.mark.parametrize("Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO]) +def test_nonnested_plate_plate_ok(Elbo): + def model(): + p = torch.tensor(0.5, requires_grad=True) + with pyro.plate("plate_0", 10, 5) as ind1: + pyro.sample("x0", dist.Bernoulli(p).expand_by([len(ind1)])) + with pyro.plate("plate_1", 11, 6) as ind2: + pyro.sample("x1", dist.Bernoulli(p).expand_by([len(ind2)])) + + guide = config_enumerate(model) if Elbo is TraceEnum_ELBO else model + assert_ok(model, guide, Elbo()) + + +def test_three_indep_plate_at_different_depths_ok(): + r""" + /\ + /\ ia + ia ia + """ + + def model(): + p = torch.tensor(0.5) + inner_plate = pyro.plate("plate2", 10, 5) + for i in pyro.plate("plate0", 2): + pyro.sample("x_%d" % i, dist.Bernoulli(p)) + if i == 0: + for j in pyro.plate("plate1", 2): + with inner_plate as ind: + pyro.sample("y_%d" % j, dist.Bernoulli(p).expand_by([len(ind)])) + elif i == 1: + with inner_plate as ind: + pyro.sample("z", dist.Bernoulli(p).expand_by([len(ind)])) + + def guide(): + p = pyro.param("p", torch.tensor(0.5, requires_grad=True)) + inner_plate = pyro.plate("plate2", 10, 5) + for i in pyro.plate("plate0", 2): + pyro.sample("x_%d" % i, dist.Bernoulli(p)) + if i == 0: + for j in pyro.plate("plate1", 2): + with inner_plate as ind: + pyro.sample("y_%d" % j, dist.Bernoulli(p).expand_by([len(ind)])) + elif i == 1: + with inner_plate as ind: + pyro.sample("z", dist.Bernoulli(p).expand_by([len(ind)])) + + assert_ok(model, guide, TraceGraph_ELBO()) + + +def test_plate_wrong_size_error(): + def model(): + p = torch.tensor(0.5) + with pyro.plate("plate", 10, 5) as ind: + pyro.sample("x", dist.Bernoulli(p).expand_by([1 + len(ind)])) + + def guide(): + p = pyro.param("p", torch.tensor(0.5, requires_grad=True)) + with pyro.plate("plate", 10, 5) as ind: + pyro.sample("x", dist.Bernoulli(p).expand_by([1 + len(ind)])) + + assert_error(model, guide, TraceGraph_ELBO(), match="Shape mismatch inside plate") + + +def test_block_plate_name_ok(): + def model(): + a = pyro.sample("a", dist.Normal(0, 1)) + assert a.shape == () + with pyro.plate("plate", 2): + b = pyro.sample("b", dist.Normal(0, 1)) + assert b.shape == (2,) + with block_plate("plate"): + c = pyro.sample("c", dist.Normal(0, 1)) + assert c.shape == () + + def guide(): + c = pyro.sample("c", dist.Normal(0, 1)) + assert c.shape == () + with pyro.plate("plate", 2): + b = pyro.sample("b", dist.Normal(0, 1)) + assert b.shape == (2,) + with block_plate("plate"): + a = pyro.sample("a", dist.Normal(0, 1)) + assert a.shape == () + + assert_ok(model, guide, Trace_ELBO()) + + +def test_block_plate_dim_ok(): + def model(): + a = pyro.sample("a", dist.Normal(0, 1)) + assert a.shape == () + with pyro.plate("plate", 2): + b = pyro.sample("b", dist.Normal(0, 1)) + assert b.shape == (2,) + with block_plate(dim=-1): + c = pyro.sample("c", dist.Normal(0, 1)) + assert c.shape == () + + def guide(): + c = pyro.sample("c", dist.Normal(0, 1)) + assert c.shape == () + with pyro.plate("plate", 2): + b = pyro.sample("b", dist.Normal(0, 1)) + assert b.shape == (2,) + with block_plate(dim=-1): + a = pyro.sample("a", dist.Normal(0, 1)) + assert a.shape == () + + assert_ok(model, guide, Trace_ELBO()) + + +def test_block_plate_missing_error(): + def model(): + with block_plate("plate"): + pyro.sample("a", dist.Normal(0, 1)) + + def guide(): + pyro.sample("a", dist.Normal(0, 1)) + + assert_error(model, guide, Trace_ELBO(), match="block_plate matched 0 messengers") + + +@pytest.mark.parametrize("enumerate_", [None, "sequential", "parallel"]) +@pytest.mark.parametrize("Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO]) +def test_enum_discrete_misuse_warning(Elbo, enumerate_): + def model(): + p = torch.tensor(0.5) + pyro.sample("x", dist.Bernoulli(p)) + + def guide(): + p = pyro.param("p", torch.tensor(0.5, requires_grad=True)) + pyro.sample("x", dist.Bernoulli(p), infer={"enumerate": enumerate_}) + + if (enumerate_ is None) == (Elbo is TraceEnum_ELBO): + assert_warning(model, guide, Elbo(max_plate_nesting=0)) + else: + assert_ok(model, guide, Elbo(max_plate_nesting=0)) + + +def test_enum_discrete_single_ok(): + def model(): + p = torch.tensor(0.5) + pyro.sample("x", dist.Bernoulli(p)) + + def guide(): + p = pyro.param("p", torch.tensor(0.5, requires_grad=True)) + pyro.sample("x", dist.Bernoulli(p)) + + assert_ok(model, config_enumerate(guide), TraceEnum_ELBO()) + + +@pytest.mark.parametrize("strict_enumeration_warning", [False, True]) +def test_enum_discrete_missing_config_warning(strict_enumeration_warning): + def model(): + p = torch.tensor(0.5) + pyro.sample("x", dist.Bernoulli(p)) + + def guide(): + p = pyro.param("p", torch.tensor(0.5, requires_grad=True)) + pyro.sample("x", dist.Bernoulli(p)) + + elbo = TraceEnum_ELBO(strict_enumeration_warning=strict_enumeration_warning) + if strict_enumeration_warning: + assert_warning(model, guide, elbo) + else: + assert_ok(model, guide, elbo) + + +def test_enum_discrete_single_single_ok(): + def model(): + p = torch.tensor(0.5) + pyro.sample("x", dist.Bernoulli(p)) + pyro.sample("y", dist.Bernoulli(p)) + + def guide(): + p = pyro.param("p", torch.tensor(0.5, requires_grad=True)) + pyro.sample("x", dist.Bernoulli(p)) + pyro.sample("y", dist.Bernoulli(p)) + + assert_ok(model, config_enumerate(guide), TraceEnum_ELBO()) + + +def test_enum_discrete_iplate_single_ok(): + def model(): + p = torch.tensor(0.5) + for i in pyro.plate("plate", 10, 5): + pyro.sample("x_{}".format(i), dist.Bernoulli(p)) + + def guide(): + p = pyro.param("p", torch.tensor(0.5, requires_grad=True)) + for i in pyro.plate("plate", 10, 5): + pyro.sample("x_{}".format(i), dist.Bernoulli(p)) + + assert_ok(model, config_enumerate(guide), TraceEnum_ELBO()) + + +def test_plate_enum_discrete_batch_ok(): + def model(): + p = torch.tensor(0.5) + with pyro.plate("plate", 10, 5) as ind: + pyro.sample("x", dist.Bernoulli(p).expand_by([len(ind)])) + + def guide(): + p = pyro.param("p", torch.tensor(0.5, requires_grad=True)) + with pyro.plate("plate", 10, 5) as ind: + pyro.sample("x", dist.Bernoulli(p).expand_by([len(ind)])) + + assert_ok(model, config_enumerate(guide), TraceEnum_ELBO()) + + +@pytest.mark.parametrize("strict_enumeration_warning", [False, True]) +def test_plate_enum_discrete_no_discrete_vars_warning(strict_enumeration_warning): + def model(): + loc = torch.tensor(0.0) + scale = torch.tensor(1.0) + with pyro.plate("plate", 10, 5) as ind: + pyro.sample("x", dist.Normal(loc, scale).expand_by([len(ind)])) + + @config_enumerate(default="sequential") + def guide(): + loc = pyro.param("loc", torch.tensor(1.0, requires_grad=True)) + scale = pyro.param("scale", torch.tensor(2.0, requires_grad=True)) + with pyro.plate("plate", 10, 5) as ind: + pyro.sample("x", dist.Normal(loc, scale).expand_by([len(ind)])) + + elbo = TraceEnum_ELBO(strict_enumeration_warning=strict_enumeration_warning) + if strict_enumeration_warning: + assert_warning(model, guide, elbo) + else: + assert_ok(model, guide, elbo) + + +def test_no_plate_enum_discrete_batch_error(): + def model(): + p = torch.tensor(0.5) + pyro.sample("x", dist.Bernoulli(p).expand_by([5])) + + def guide(): + p = pyro.param("p", torch.tensor(0.5, requires_grad=True)) + pyro.sample("x", dist.Bernoulli(p).expand_by([5])) + + assert_error( + model, config_enumerate(guide), TraceEnum_ELBO(), match="invalid log_prob shape" + ) + + +@pytest.mark.parametrize("max_plate_nesting", [0, 1, 2, float("inf")]) +def test_enum_discrete_parallel_ok(max_plate_nesting): + guessed_nesting = 0 if max_plate_nesting == float("inf") else max_plate_nesting + plate_shape = torch.Size([1] * guessed_nesting) + + def model(): + p = torch.tensor(0.5) + x = pyro.sample("x", dist.Bernoulli(p)) + if max_plate_nesting != float("inf"): + assert x.shape == torch.Size([2]) + plate_shape + + def guide(): + p = pyro.param("p", torch.tensor(0.5, requires_grad=True)) + x = pyro.sample("x", dist.Bernoulli(p)) + if max_plate_nesting != float("inf"): + assert x.shape == torch.Size([2]) + plate_shape + + assert_ok( + model, + config_enumerate(guide, "parallel"), + TraceEnum_ELBO(max_plate_nesting=max_plate_nesting), + ) + + +@pytest.mark.parametrize("max_plate_nesting", [0, 1, 2, float("inf")]) +def test_enum_discrete_parallel_nested_ok(max_plate_nesting): + guessed_nesting = 0 if max_plate_nesting == float("inf") else max_plate_nesting + plate_shape = torch.Size([1] * guessed_nesting) + + def model(): + p2 = torch.ones(2) / 2 + p3 = torch.ones(3) / 3 + x2 = pyro.sample("x2", dist.OneHotCategorical(p2)) + x3 = pyro.sample("x3", dist.OneHotCategorical(p3)) + if max_plate_nesting != float("inf"): + assert x2.shape == torch.Size([2]) + plate_shape + p2.shape + assert x3.shape == torch.Size([3, 1]) + plate_shape + p3.shape + + assert_ok( + model, + config_enumerate(model, "parallel"), + TraceEnum_ELBO(max_plate_nesting=max_plate_nesting), + ) + + +@pytest.mark.parametrize( + "enumerate_,expand,num_samples", + [ + (None, False, None), + ("sequential", False, None), + ("sequential", True, None), + ("parallel", False, None), + ("parallel", True, None), + ("parallel", True, 3), + ], +) +def test_enumerate_parallel_plate_ok(enumerate_, expand, num_samples): + def model(): + p2 = torch.ones(2) / 2 + p34 = torch.ones(3, 4) / 4 + p536 = torch.ones(5, 3, 6) / 6 + + x2 = pyro.sample("x2", dist.Categorical(p2)) + with pyro.plate("outer", 3): + x34 = pyro.sample("x34", dist.Categorical(p34)) + with pyro.plate("inner", 5): + x536 = pyro.sample("x536", dist.Categorical(p536)) + + # check shapes + if enumerate_ == "parallel": + if num_samples: + n = num_samples + # Meaning of dimensions: [ enum dims | plate dims ] + assert x2.shape == torch.Size([n, 1, 1]) # noqa: E201 + assert x34.shape == torch.Size([n, 1, 1, 3]) # noqa: E201 + assert x536.shape == torch.Size([n, 1, 1, 5, 3]) # noqa: E201 + elif expand: + # Meaning of dimensions: [ enum dims | plate dims ] + assert x2.shape == torch.Size([2, 1, 1]) # noqa: E201 + assert x34.shape == torch.Size([4, 1, 1, 3]) # noqa: E201 + assert x536.shape == torch.Size([6, 1, 1, 5, 3]) # noqa: E201 + else: + # Meaning of dimensions: [ enum dims | plate placeholders ] + assert x2.shape == torch.Size([2, 1, 1]) # noqa: E201 + assert x34.shape == torch.Size([4, 1, 1, 1]) # noqa: E201 + assert x536.shape == torch.Size([6, 1, 1, 1, 1]) # noqa: E201 + elif enumerate_ == "sequential": + if expand: + # All dimensions are plate dimensions. + assert x2.shape == torch.Size([]) + assert x34.shape == torch.Size([3]) + assert x536.shape == torch.Size([5, 3]) + else: + # All dimensions are plate placeholders. + assert x2.shape == torch.Size([]) + assert x34.shape == torch.Size([1]) + assert x536.shape == torch.Size([1, 1]) + else: + # All dimensions are plate dimensions. + assert x2.shape == torch.Size([]) + assert x34.shape == torch.Size([3]) + assert x536.shape == torch.Size([5, 3]) + + elbo = TraceEnum_ELBO(max_plate_nesting=2, strict_enumeration_warning=enumerate_) + guide = config_enumerate(model, enumerate_, expand, num_samples) + assert_ok(model, guide, elbo) + + +@pytest.mark.parametrize("max_plate_nesting", [1, float("inf")]) +@pytest.mark.parametrize("enumerate_", [None, "sequential", "parallel"]) +@pytest.mark.parametrize("is_validate", [True, False]) +def test_enum_discrete_plate_dependency_warning( + enumerate_, is_validate, max_plate_nesting +): + def model(): + pyro.sample("w", dist.Bernoulli(0.5), infer={"enumerate": "parallel"}) + with pyro.plate("plate", 10, 5): + x = pyro.sample( + "x", dist.Bernoulli(0.5).expand_by([5]), infer={"enumerate": enumerate_} + ) + pyro.sample("y", dist.Bernoulli(x.mean())) # user should move this line up + + with pyro.validation_enabled(is_validate): + elbo = TraceEnum_ELBO(max_plate_nesting=max_plate_nesting) + if enumerate_ and is_validate: + assert_warning(model, model, elbo) + else: + assert_ok(model, model, elbo) + + +@pytest.mark.parametrize("max_plate_nesting", [1, float("inf")]) +@pytest.mark.parametrize("enumerate_", [None, "sequential", "parallel"]) +def test_enum_discrete_iplate_plate_dependency_ok(enumerate_, max_plate_nesting): + def model(): + pyro.sample("w", dist.Bernoulli(0.5), infer={"enumerate": "parallel"}) + inner_plate = pyro.plate("plate", 10, 5) + for i in pyro.plate("iplate", 3): + pyro.sample("y_{}".format(i), dist.Bernoulli(0.5)) + with inner_plate: + pyro.sample( + "x_{}".format(i), + dist.Bernoulli(0.5).expand_by([5]), + infer={"enumerate": enumerate_}, + ) + + assert_ok(model, model, TraceEnum_ELBO(max_plate_nesting=max_plate_nesting)) + + +@pytest.mark.parametrize("max_plate_nesting", [1, float("inf")]) +@pytest.mark.parametrize("enumerate_", [None, "sequential", "parallel"]) +@pytest.mark.parametrize("is_validate", [True, False]) +def test_enum_discrete_iplates_plate_dependency_warning( + enumerate_, is_validate, max_plate_nesting +): + def model(): + pyro.sample("w", dist.Bernoulli(0.5), infer={"enumerate": "parallel"}) + inner_plate = pyro.plate("plate", 10, 5) + + for i in pyro.plate("iplate1", 2): + with inner_plate: + pyro.sample( + "x_{}".format(i), + dist.Bernoulli(0.5).expand_by([5]), + infer={"enumerate": enumerate_}, + ) + + for i in pyro.plate("iplate2", 2): + pyro.sample("y_{}".format(i), dist.Bernoulli(0.5)) + + with pyro.validation_enabled(is_validate): + elbo = TraceEnum_ELBO(max_plate_nesting=max_plate_nesting) + if enumerate_ and is_validate: + assert_warning(model, model, elbo) + else: + assert_ok(model, model, elbo) + + +@pytest.mark.parametrize("enumerate_", [None, "sequential", "parallel"]) +def test_enum_discrete_plates_dependency_ok(enumerate_): + def model(): + pyro.sample("w", dist.Bernoulli(0.5), infer={"enumerate": "parallel"}) + x_plate = pyro.plate("x_plate", 10, 5, dim=-1) + y_plate = pyro.plate("y_plate", 11, 6, dim=-2) + pyro.sample("a", dist.Bernoulli(0.5)) + with x_plate: + pyro.sample("b", dist.Bernoulli(0.5).expand_by([5])) + with y_plate: + # Note that it is difficult to check that c does not depend on b. + pyro.sample("c", dist.Bernoulli(0.5).expand_by([6, 1])) + with x_plate, y_plate: + pyro.sample("d", dist.Bernoulli(0.5).expand_by([6, 5])) + + assert_ok(model, model, TraceEnum_ELBO(max_plate_nesting=2)) + + +@pytest.mark.parametrize("enumerate_", [None, "sequential", "parallel"]) +def test_enum_discrete_non_enumerated_plate_ok(enumerate_): + def model(): + pyro.sample("w", dist.Bernoulli(0.5), infer={"enumerate": "parallel"}) + + with pyro.plate("non_enum", 2): + a = pyro.sample( + "a", dist.Bernoulli(0.5).expand_by([2]), infer={"enumerate": None} + ) + + p = (1.0 + a.sum(-1)) / (2.0 + a.size(0)) # introduce dependency of b on a + + with pyro.plate("enum_1", 3): + pyro.sample( + "b", dist.Bernoulli(p).expand_by([3]), infer={"enumerate": enumerate_} + ) + + with pyro.validation_enabled(): + assert_ok(model, model, TraceEnum_ELBO(max_plate_nesting=1)) + + +def test_plate_shape_broadcasting(): + data = torch.ones(1000, 2) + + def model(): + with pyro.plate("num_particles", 10, dim=-3): + with pyro.plate("components", 2, dim=-1): + p = pyro.sample("p", dist.Beta(torch.tensor(1.1), torch.tensor(1.1))) + assert p.shape == torch.Size((10, 1, 2)) + with pyro.plate("data", data.shape[0], dim=-2): + pyro.sample("obs", dist.Bernoulli(p), obs=data) + + def guide(): + with pyro.plate("num_particles", 10, dim=-3): + with pyro.plate("components", 2, dim=-1): + pyro.sample("p", dist.Beta(torch.tensor(1.1), torch.tensor(1.1))) + + assert_ok(model, guide, Trace_ELBO()) + + +@pytest.mark.parametrize( + "enumerate_,expand,num_samples", + [ + (None, True, None), + ("sequential", True, None), + ("sequential", False, None), + ("parallel", True, None), + ("parallel", False, None), + ("parallel", True, 3), + ], +) +def test_enum_discrete_plate_shape_broadcasting_ok(enumerate_, expand, num_samples): + def model(): + x_plate = pyro.plate("x_plate", 10, 5, dim=-1) + y_plate = pyro.plate("y_plate", 11, 6, dim=-2) + with pyro.plate("num_particles", 50, dim=-3): + with x_plate: + b = pyro.sample("b", dist.Beta(torch.tensor(1.1), torch.tensor(1.1))) + with y_plate: + c = pyro.sample("c", dist.Bernoulli(0.5)) + with x_plate, y_plate: + d = pyro.sample("d", dist.Bernoulli(b)) + + # check shapes + if enumerate_ == "parallel": + if num_samples and expand: + assert b.shape == (num_samples, 50, 1, 5) + assert c.shape == (num_samples, 1, 50, 6, 1) + assert d.shape == (num_samples, 1, num_samples, 50, 6, 5) + elif num_samples and not expand: + assert b.shape == (num_samples, 50, 1, 5) + assert c.shape == (num_samples, 1, 50, 6, 1) + assert d.shape == (num_samples, 1, 1, 50, 6, 5) + elif expand: + assert b.shape == (50, 1, 5) + assert c.shape == (2, 50, 6, 1) + assert d.shape == (2, 1, 50, 6, 5) + else: + assert b.shape == (50, 1, 5) + assert c.shape == (2, 1, 1, 1) + assert d.shape == (2, 1, 1, 1, 1) + elif enumerate_ == "sequential": + if expand: + assert b.shape == (50, 1, 5) + assert c.shape == (50, 6, 1) + assert d.shape == (50, 6, 5) + else: + assert b.shape == (50, 1, 5) + assert c.shape == (1, 1, 1) + assert d.shape == (1, 1, 1) + else: + assert b.shape == (50, 1, 5) + assert c.shape == (50, 6, 1) + assert d.shape == (50, 6, 5) + + guide = config_enumerate( + model, default=enumerate_, expand=expand, num_samples=num_samples + ) + elbo = TraceEnum_ELBO( + max_plate_nesting=3, strict_enumeration_warning=(enumerate_ == "parallel") + ) + assert_ok(model, guide, elbo) + + +@pytest.mark.parametrize( + "Elbo,expand", + [ + (Trace_ELBO, False), + (TraceGraph_ELBO, False), + (TraceEnum_ELBO, False), + (TraceEnum_ELBO, True), + ], +) +def test_dim_allocation_ok(Elbo, expand): + enumerate_ = Elbo is TraceEnum_ELBO + + def model(): + p = torch.tensor(0.5, requires_grad=True) + with pyro.plate("plate_outer", 10, 5, dim=-3): + x = pyro.sample("x", dist.Bernoulli(p)) + with pyro.plate("plate_inner_1", 11, 6): + y = pyro.sample("y", dist.Bernoulli(p)) + # allocated dim is rightmost available, i.e. -1 + with pyro.plate("plate_inner_2", 12, 7): + z = pyro.sample("z", dist.Bernoulli(p)) + # allocated dim is next rightmost available, i.e. -2 + # since dim -3 is already allocated, use dim=-4 + with pyro.plate("plate_inner_3", 13, 8): + q = pyro.sample("q", dist.Bernoulli(p)) + + # check shapes + if enumerate_ and not expand: + assert x.shape == (1, 1, 1) + assert y.shape == (1, 1, 1) + assert z.shape == (1, 1, 1) + assert q.shape == (1, 1, 1, 1) + else: + assert x.shape == (5, 1, 1) + assert y.shape == (5, 1, 6) + assert z.shape == (5, 7, 6) + assert q.shape == (8, 5, 7, 6) + + guide = ( + config_enumerate(model, "sequential", expand=expand) if enumerate_ else model + ) + assert_ok(model, guide, Elbo(max_plate_nesting=4)) + + +@pytest.mark.parametrize( + "Elbo,expand", + [ + (Trace_ELBO, False), + (TraceGraph_ELBO, False), + (TraceEnum_ELBO, False), + (TraceEnum_ELBO, True), + ], +) +def test_dim_allocation_error(Elbo, expand): + enumerate_ = Elbo is TraceEnum_ELBO + + def model(): + p = torch.tensor(0.5, requires_grad=True) + with pyro.plate("plate_outer", 10, 5, dim=-2): + x = pyro.sample("x", dist.Bernoulli(p)) + # allocated dim is rightmost available, i.e. -1 + with pyro.plate("plate_inner_1", 11, 6): + y = pyro.sample("y", dist.Bernoulli(p)) + # throws an error as dim=-1 is already occupied + with pyro.plate("plate_inner_2", 12, 7, dim=-1): + pyro.sample("z", dist.Bernoulli(p)) + + # check shapes + if enumerate_ and not expand: + assert x.shape == (1, 1) + assert y.shape == (1, 1) + else: + assert x.shape == (5, 1) + assert y.shape == (5, 6) + + guide = config_enumerate(model, expand=expand) if Elbo is TraceEnum_ELBO else model + assert_error(model, guide, Elbo(), match="collide at dim=") + + +def test_enum_in_model_ok(): + infer = {"enumerate": "parallel"} + + def model(): + p = pyro.param("p", torch.tensor(0.25)) + a = pyro.sample("a", dist.Bernoulli(p)) + b = pyro.sample("b", dist.Bernoulli(p + a / 2)) + c = pyro.sample("c", dist.Bernoulli(p + b / 2), infer=infer) + d = pyro.sample("d", dist.Bernoulli(p + c / 2)) + e = pyro.sample("e", dist.Bernoulli(p + d / 2)) + f = pyro.sample("f", dist.Bernoulli(p + e / 2), infer=infer) + g = pyro.sample("g", dist.Bernoulli(p + f / 2), obs=torch.tensor(0.0)) + + # check shapes + assert a.shape == () + assert b.shape == (2,) + assert c.shape == (2, 1, 1) + assert d.shape == (2,) + assert e.shape == (2, 1) + assert f.shape == (2, 1, 1, 1) + assert g.shape == () + + def guide(): + p = pyro.param("p", torch.tensor(0.25)) + a = pyro.sample("a", dist.Bernoulli(p)) + b = pyro.sample("b", dist.Bernoulli(p + a / 2), infer=infer) + d = pyro.sample("d", dist.Bernoulli(p + b / 2)) + e = pyro.sample("e", dist.Bernoulli(p + d / 2), infer=infer) + + # check shapes + assert a.shape == () + assert b.shape == (2,) + assert d.shape == (2,) + assert e.shape == (2, 1) + + assert_ok(model, guide, TraceEnum_ELBO(max_plate_nesting=0)) + + +def test_enum_in_model_plate_ok(): + infer = {"enumerate": "parallel"} + + def model(): + p = pyro.param("p", torch.tensor(0.25)) + a = pyro.sample("a", dist.Bernoulli(p)) + b = pyro.sample("b", dist.Bernoulli(p + a / 2)) + with pyro.plate("data", 3): + c = pyro.sample("c", dist.Bernoulli(p + b / 2), infer=infer) + d = pyro.sample("d", dist.Bernoulli(p + c / 2)) + e = pyro.sample("e", dist.Bernoulli(p + d / 2)) + f = pyro.sample("f", dist.Bernoulli(p + e / 2), infer=infer) + g = pyro.sample("g", dist.Bernoulli(p + f / 2), obs=torch.zeros(3)) + + # check shapes + assert a.shape == () + assert b.shape == (2, 1) + assert c.shape == (2, 1, 1, 1) + assert d.shape == (2, 3) + assert e.shape == (2, 1, 1) + assert f.shape == (2, 1, 1, 1, 1) + assert g.shape == (3,) + + def guide(): + p = pyro.param("p", torch.tensor(0.25)) + a = pyro.sample("a", dist.Bernoulli(p)) + b = pyro.sample("b", dist.Bernoulli(p + a / 2), infer=infer) + with pyro.plate("data", 3): + d = pyro.sample("d", dist.Bernoulli(p + b / 2)) + e = pyro.sample("e", dist.Bernoulli(p + d / 2), infer=infer) + + # check shapes + assert a.shape == () + assert b.shape == (2, 1) + assert d.shape == (2, 3) + assert e.shape == (2, 1, 1) + + assert_ok(model, guide, TraceEnum_ELBO(max_plate_nesting=1)) + + +def test_enum_sequential_in_model_error(): + def model(): + p = pyro.param("p", torch.tensor(0.25)) + pyro.sample("a", dist.Bernoulli(p), infer={"enumerate": "sequential"}) + + def guide(): + pass + + assert_error( + model, + guide, + TraceEnum_ELBO(max_plate_nesting=0), + match="At site .*, model-side sequential enumeration is not implemented", + ) + + +def test_enum_in_model_plate_reuse_ok(): + @config_enumerate + def model(): + p = pyro.param("p", torch.tensor([0.2, 0.8])) + a = pyro.sample("a", dist.Bernoulli(0.3)).long() + with pyro.plate("b_axis", 2): + pyro.sample("b", dist.Bernoulli(p[a]), obs=torch.tensor([0.0, 1.0])) + c = pyro.sample("c", dist.Bernoulli(0.3)).long() + with pyro.plate("c_axis", 2): + pyro.sample("d", dist.Bernoulli(p[c]), obs=torch.tensor([0.0, 0.0])) + + def guide(): + pass + + assert_ok(model, guide, TraceEnum_ELBO(max_plate_nesting=1)) + + +def test_enum_in_model_multi_scale_error(): + @config_enumerate + def model(): + p = pyro.param("p", torch.tensor([0.2, 0.8])) + x = pyro.sample("x", dist.Bernoulli(0.3)).long() + with poutine.scale(scale=2.0): + pyro.sample("y", dist.Bernoulli(p[x]), obs=torch.tensor(0.0)) + + def guide(): + pass + + assert_error( + model, + guide, + TraceEnum_ELBO(max_plate_nesting=0), + match="Expected all enumerated sample sites to share a common poutine.scale", + ) + + +@pytest.mark.parametrize("use_vindex", [False, True]) +def test_enum_in_model_diamond_error(use_vindex): + data = torch.tensor([[0, 1], [0, 0]]) + + @config_enumerate + def model(): + pyro.param("probs_a", torch.tensor([0.45, 0.55])) + pyro.param("probs_b", torch.tensor([[0.6, 0.4], [0.4, 0.6]])) + pyro.param("probs_c", torch.tensor([[0.75, 0.25], [0.55, 0.45]])) + pyro.param( + "probs_d", + torch.tensor([[[0.4, 0.6], [0.3, 0.7]], [[0.3, 0.7], [0.2, 0.8]]]), + ) + probs_a = pyro.param("probs_a") + probs_b = pyro.param("probs_b") + probs_c = pyro.param("probs_c") + probs_d = pyro.param("probs_d") + b_axis = pyro.plate("b_axis", 2, dim=-1) + c_axis = pyro.plate("c_axis", 2, dim=-2) + a = pyro.sample("a", dist.Categorical(probs_a)) + with b_axis: + b = pyro.sample("b", dist.Categorical(probs_b[a])) + with c_axis: + c = pyro.sample("c", dist.Categorical(probs_c[a])) + with b_axis, c_axis: + if use_vindex: + probs = Vindex(probs_d)[b, c] + else: + d_ind = torch.arange(2, dtype=torch.long) + probs = probs_d[b.unsqueeze(-1), c.unsqueeze(-1), d_ind] + pyro.sample("d", dist.Categorical(probs), obs=data) + + def guide(): + pass + + assert_error( + model, + guide, + TraceEnum_ELBO(max_plate_nesting=2), + match="Expected tree-structured plate nesting", + ) + + +@pytest.mark.parametrize("Elbo", [Trace_ELBO, TraceGraph_ELBO, TraceEnum_ELBO]) +def test_vectorized_num_particles(Elbo): + data = torch.ones(1000, 2) + + def model(): + with pyro.plate("components", 2): + p = pyro.sample("p", dist.Beta(torch.tensor(1.1), torch.tensor(1.1))) + assert p.shape == torch.Size((10, 1, 2)) + with pyro.plate("data", data.shape[0]): + pyro.sample("obs", dist.Bernoulli(p), obs=data) + + def guide(): + with pyro.plate("components", 2): + pyro.sample("p", dist.Beta(torch.tensor(1.1), torch.tensor(1.1))) + + pyro.clear_param_store() + guide = config_enumerate(guide) if Elbo is TraceEnum_ELBO else guide + assert_ok( + model, + guide, + Elbo( + num_particles=10, + vectorize_particles=True, + max_plate_nesting=2, + strict_enumeration_warning=False, + ), + ) + + +@pytest.mark.parametrize( + "enumerate_,expand,num_samples", + [ + (None, False, None), + ("sequential", False, None), + ("sequential", True, None), + ("parallel", False, None), + ("parallel", True, None), + ("parallel", True, 3), + ], +) +@pytest.mark.parametrize("num_particles", [1, 50]) +def test_enum_discrete_vectorized_num_particles( + enumerate_, expand, num_samples, num_particles +): + @config_enumerate(default=enumerate_, expand=expand, num_samples=num_samples) + def model(): + x_plate = pyro.plate("x_plate", 10, 5, dim=-1) + y_plate = pyro.plate("y_plate", 11, 6, dim=-2) + with x_plate: + b = pyro.sample("b", dist.Beta(torch.tensor(1.1), torch.tensor(1.1))) + with y_plate: + c = pyro.sample("c", dist.Bernoulli(0.5)) + with x_plate, y_plate: + d = pyro.sample("d", dist.Bernoulli(b)) + + # check shapes + if num_particles > 1: + if enumerate_ == "parallel": + if num_samples and expand: + assert b.shape == (num_samples, num_particles, 1, 5) + assert c.shape == (num_samples, 1, num_particles, 6, 1) + assert d.shape == (num_samples, 1, num_samples, num_particles, 6, 5) + elif num_samples and not expand: + assert b.shape == (num_samples, num_particles, 1, 5) + assert c.shape == (num_samples, 1, num_particles, 6, 1) + assert d.shape == (num_samples, 1, 1, num_particles, 6, 5) + elif expand: + assert b.shape == (num_particles, 1, 5) + assert c.shape == (2, num_particles, 6, 1) + assert d.shape == (2, 1, num_particles, 6, 5) + else: + assert b.shape == (num_particles, 1, 5) + assert c.shape == (2, 1, 1, 1) + assert d.shape == (2, 1, 1, 1, 1) + elif enumerate_ == "sequential": + if expand: + assert b.shape == (num_particles, 1, 5) + assert c.shape == (num_particles, 6, 1) + assert d.shape == (num_particles, 6, 5) + else: + assert b.shape == (num_particles, 1, 5) + assert c.shape == (1, 1, 1) + assert d.shape == (1, 1, 1) + else: + assert b.shape == (num_particles, 1, 5) + assert c.shape == (num_particles, 6, 1) + assert d.shape == (num_particles, 6, 5) + else: + if enumerate_ == "parallel": + if num_samples and expand: + assert b.shape == ( + num_samples, + 1, + 5, + ) + assert c.shape == (num_samples, 1, 6, 1) + assert d.shape == (num_samples, 1, num_samples, 6, 5) + elif num_samples and not expand: + assert b.shape == ( + num_samples, + 1, + 5, + ) + assert c.shape == (num_samples, 1, 6, 1) + assert d.shape == (num_samples, 1, 1, 6, 5) + elif expand: + assert b.shape == (5,) + assert c.shape == (2, 6, 1) + assert d.shape == (2, 1, 6, 5) + else: + assert b.shape == (5,) + assert c.shape == (2, 1, 1) + assert d.shape == (2, 1, 1, 1) + elif enumerate_ == "sequential": + if expand: + assert b.shape == (5,) + assert c.shape == (6, 1) + assert d.shape == (6, 5) + else: + assert b.shape == (5,) + assert c.shape == (1, 1) + assert d.shape == (1, 1) + else: + assert b.shape == (5,) + assert c.shape == (6, 1) + assert d.shape == (6, 5) + + assert_ok( + model, + model, + TraceEnum_ELBO( + max_plate_nesting=2, + num_particles=num_particles, + vectorize_particles=True, + strict_enumeration_warning=(enumerate_ == "parallel"), + ), + ) + + +def test_enum_recycling_chain(): + @config_enumerate + def model(): + p = pyro.param("p", torch.tensor([[0.2, 0.8], [0.1, 0.9]])) + + x = 0 + for t in pyro.markov(range(100)): + x = pyro.sample("x_{}".format(t), dist.Categorical(p[x])) + assert x.dim() <= 2 + + def guide(): + pass + + assert_ok(model, guide, TraceEnum_ELBO(max_plate_nesting=0)) + + +@pytest.mark.parametrize("use_vindex", [False, True]) +@pytest.mark.parametrize("markov", [False, True]) +def test_enum_recycling_dbn(markov, use_vindex): + # x --> x --> x enum "state" + # y | y | y | enum "occlusion" + # \ | \ | \ | + # z z z obs + + @config_enumerate + def model(): + p = pyro.param("p", torch.ones(3, 3)) + q = pyro.param("q", torch.ones(2)) + r = pyro.param("r", torch.ones(3, 2, 4)) + + x = 0 + times = pyro.markov(range(100)) if markov else range(11) + for t in times: + x = pyro.sample("x_{}".format(t), dist.Categorical(p[x])) + y = pyro.sample("y_{}".format(t), dist.Categorical(q)) + if use_vindex: + probs = Vindex(r)[x, y] + else: + z_ind = torch.arange(4, dtype=torch.long) + probs = r[x.unsqueeze(-1), y.unsqueeze(-1), z_ind] + pyro.sample( + "z_{}".format(t), dist.Categorical(probs), obs=torch.tensor(0.0) + ) + + def guide(): + pass + + assert_ok(model, guide, TraceEnum_ELBO(max_plate_nesting=0)) + + +def test_enum_recycling_nested(): + # (x) + # \ + # y0---(y1)--(y2) + # | | | + # z00 z10 z20 + # | | | + # z01 z11 (z21) + # | | | + # z02 z12 z22 <-- what can this depend on? + # + # markov dependencies + # ------------------- + # x: + # y0: x + # z00: x y0 + # z01: x y0 z00 + # z02: x y0 z01 + # y1: x y0 + # z10: x y0 y1 + # z11: x y0 y1 z10 + # z12: x y0 y1 z11 + # y2: x y1 + # z20: x y1 y2 + # z21: x y1 y2 z20 + # z22: x y1 y2 z21 + + @config_enumerate + def model(): + p = pyro.param("p", torch.ones(3, 3)) + x = pyro.sample("x", dist.Categorical(p[0])) + y = x + for i in pyro.markov(range(10)): + y = pyro.sample("y_{}".format(i), dist.Categorical(p[y])) + z = y + for j in pyro.markov(range(10)): + z = pyro.sample("z_{}_{}".format(i, j), dist.Categorical(p[z])) + + def guide(): + pass + + assert_ok(model, guide, TraceEnum_ELBO(max_plate_nesting=0)) + + +@pytest.mark.parametrize("use_vindex", [False, True]) +def test_enum_recycling_grid(use_vindex): + # x---x---x---x -----> i + # | | | | | + # x---x---x---x | + # | | | | V + # x---x---x--(x) j + # | | | | + # x---x--(x)--x <-- what can this depend on? + + @config_enumerate + def model(): + p = pyro.param("p_leaf", torch.ones(2, 2, 2)) + x = defaultdict(lambda: torch.tensor(0)) + y_axis = pyro.markov(range(4), keep=True) + for i in pyro.markov(range(4)): + for j in y_axis: + if use_vindex: + probs = Vindex(p)[x[i - 1, j], x[i, j - 1]] + else: + ind = torch.arange(2, dtype=torch.long) + probs = p[x[i - 1, j].unsqueeze(-1), x[i, j - 1].unsqueeze(-1), ind] + x[i, j] = pyro.sample("x_{}_{}".format(i, j), dist.Categorical(probs)) + + def guide(): + pass + + assert_ok(model, guide, TraceEnum_ELBO(max_plate_nesting=0)) + + +def test_enum_recycling_reentrant(): + data = (True, False) + for i in range(5): + data = (data, data, False) + + @pyro.markov + def model(data, state=0, address=""): + if isinstance(data, bool): + p = pyro.param("p_leaf", torch.ones(10)) + pyro.sample( + "leaf_{}".format(address), + dist.Bernoulli(p[state]), + obs=torch.tensor(1.0 if data else 0.0), + ) + else: + p = pyro.param("p_branch", torch.ones(10, 10)) + for branch, letter in zip(data, "abcdefg"): + next_state = pyro.sample( + "branch_{}".format(address + letter), + dist.Categorical(p[state]), + infer={"enumerate": "parallel"}, + ) + model(branch, next_state, address + letter) + + def guide(data): + pass + + assert_ok(model, guide, TraceEnum_ELBO(max_plate_nesting=0), data=data) + + +@pytest.mark.parametrize("history", [1, 2]) +def test_enum_recycling_reentrant_history(history): + data = (True, False) + for i in range(5): + data = (data, data, False) + + @pyro.markov(history=history) + def model(data, state=0, address=""): + if isinstance(data, bool): + p = pyro.param("p_leaf", torch.ones(10)) + pyro.sample( + "leaf_{}".format(address), + dist.Bernoulli(p[state]), + obs=torch.tensor(1.0 if data else 0.0), + ) + else: + assert isinstance(data, tuple) + p = pyro.param("p_branch", torch.ones(10, 10)) + for branch, letter in zip(data, "abcdefg"): + next_state = pyro.sample( + "branch_{}".format(address + letter), + dist.Categorical(p[state]), + infer={"enumerate": "parallel"}, + ) + model(branch, next_state, address + letter) + + def guide(data): + pass + + assert_ok(model, guide, TraceEnum_ELBO(max_plate_nesting=0), data=data) + + +def test_enum_recycling_mutual_recursion(): + data = (True, False) + for i in range(5): + data = (data, data, False) + + def model_leaf(data, state=0, address=""): + p = pyro.param("p_leaf", torch.ones(10)) + pyro.sample( + "leaf_{}".format(address), + dist.Bernoulli(p[state]), + obs=torch.tensor(1.0 if data else 0.0), + ) + + @pyro.markov + def model1(data, state=0, address=""): + if isinstance(data, bool): + model_leaf(data, state, address) + else: + p = pyro.param("p_branch", torch.ones(10, 10)) + for branch, letter in zip(data, "abcdefg"): + next_state = pyro.sample( + "branch_{}".format(address + letter), + dist.Categorical(p[state]), + infer={"enumerate": "parallel"}, + ) + model2(branch, next_state, address + letter) + + @pyro.markov + def model2(data, state=0, address=""): + if isinstance(data, bool): + model_leaf(data, state, address) + else: + p = pyro.param("p_branch", torch.ones(10, 10)) + for branch, letter in zip(data, "abcdefg"): + next_state = pyro.sample( + "branch_{}".format(address + letter), + dist.Categorical(p[state]), + infer={"enumerate": "parallel"}, + ) + model1(branch, next_state, address + letter) + + def guide(data): + pass + + assert_ok(model1, guide, TraceEnum_ELBO(max_plate_nesting=0), data=data) + + +def test_enum_recycling_interleave(): + def model(): + with pyro.markov() as m: + with pyro.markov(): + with m: # error here + pyro.sample( + "x", + dist.Categorical(torch.ones(4)), + infer={"enumerate": "parallel"}, + ) + + def guide(): + pass + + assert_ok( + model, + guide, + TraceEnum_ELBO(max_plate_nesting=0, strict_enumeration_warning=False), + ) + + +def test_enum_recycling_plate(): + @config_enumerate + def model(): + p = pyro.param("p", torch.ones(3, 3)) + q = pyro.param("q", torch.tensor([0.5, 0.5])) + plate_x = pyro.plate("plate_x", 2, dim=-1) + plate_y = pyro.plate("plate_y", 3, dim=-1) + plate_z = pyro.plate("plate_z", 4, dim=-2) + + a = pyro.sample("a", dist.Bernoulli(q[0])).long() + w = 0 + for i in pyro.markov(range(5)): + w = pyro.sample("w_{}".format(i), dist.Categorical(p[w])) + + with plate_x: + b = pyro.sample("b", dist.Bernoulli(q[a])).long() + x = 0 + for i in pyro.markov(range(6)): + x = pyro.sample("x_{}".format(i), dist.Categorical(p[x])) + + with plate_y: + c = pyro.sample("c", dist.Bernoulli(q[a])).long() + y = 0 + for i in pyro.markov(range(7)): + y = pyro.sample("y_{}".format(i), dist.Categorical(p[y])) + + with plate_z: + d = pyro.sample("d", dist.Bernoulli(q[a])).long() + z = 0 + for i in pyro.markov(range(8)): + z = pyro.sample("z_{}".format(i), dist.Categorical(p[z])) + + with plate_x, plate_z: + e = pyro.sample("e", dist.Bernoulli(q[b])).long() + xz = 0 + for i in pyro.markov(range(9)): + xz = pyro.sample("xz_{}".format(i), dist.Categorical(p[xz])) + + return a, b, c, d, e + + def guide(): + pass + + assert_ok(model, guide, TraceEnum_ELBO(max_plate_nesting=2)) + + +@pytest.mark.parametrize( + "Elbo", + [ + Trace_ELBO, + TraceGraph_ELBO, + TraceEnum_ELBO, + TraceTMC_ELBO, + ], +) +def test_factor_in_model_ok(Elbo): + def model(): + pyro.factor("f", torch.tensor(0.0)) + + def guide(): + pass + + elbo = Elbo(strict_enumeration_warning=False) + assert_ok(model, guide, elbo) + + +@pytest.mark.parametrize( + "Elbo", + [ + Trace_ELBO, + TraceGraph_ELBO, + TraceEnum_ELBO, + TraceTMC_ELBO, + ], +) +def test_factor_in_guide_error(Elbo): + def model(): + pass + + def guide(): + pyro.factor("f", torch.tensor(0.0)) + + elbo = Elbo(strict_enumeration_warning=False) + assert_error(model, guide, elbo, match=".*missing specification of has_rsample.*") + + +@pytest.mark.parametrize( + "Elbo", + [ + Trace_ELBO, + TraceGraph_ELBO, + TraceEnum_ELBO, + TraceTMC_ELBO, + ], +) +@pytest.mark.parametrize("has_rsample", [False, True]) +def test_factor_in_guide_ok(Elbo, has_rsample): + def model(): + pass + + def guide(): + pyro.factor("f", torch.tensor(0.0), has_rsample=has_rsample) + + elbo = Elbo(strict_enumeration_warning=False) + assert_ok(model, guide, elbo) + + +@pytest.mark.parametrize("history", [0, 1, 2, 3]) +def test_markov_history(history): + @config_enumerate + def model(): + p = pyro.param("p", 0.25 * torch.ones(2, 2)) + q = pyro.param("q", 0.25 * torch.ones(2)) + x_prev = torch.tensor(0) + x_curr = torch.tensor(0) + for t in pyro.markov(range(10), history=history): + probs = p[x_prev, x_curr] + x_prev, x_curr = ( + x_curr, + pyro.sample("x_{}".format(t), dist.Bernoulli(probs)).long(), + ) + pyro.sample( + "y_{}".format(t), dist.Bernoulli(q[x_curr]), obs=torch.tensor(0.0) + ) + + def guide(): + pass + + if history < 2: + assert_error( + model, + guide, + TraceEnum_ELBO(max_plate_nesting=0), + match="Enumeration dim conflict", + ) + else: + assert_ok(model, guide, TraceEnum_ELBO(max_plate_nesting=0)) + + +def test_mean_field_ok(): + def model(): + x = pyro.sample("x", dist.Normal(0.0, 1.0)) + pyro.sample("y", dist.Normal(x, 1.0)) + + def guide(): + loc = pyro.param("loc", torch.tensor(0.0)) + x = pyro.sample("x", dist.Normal(loc, 1.0)) + pyro.sample("y", dist.Normal(x, 1.0)) + + assert_ok(model, guide, TraceMeanField_ELBO()) + + +@pytest.mark.parametrize("mask", [True, False]) +def test_mean_field_mask_ok(mask): + def model(): + x = pyro.sample("x", dist.Normal(0.0, 1.0).mask(mask)) + pyro.sample("y", dist.Normal(x, 1.0)) + + def guide(): + loc = pyro.param("loc", torch.tensor(0.0)) + x = pyro.sample("x", dist.Normal(loc, 1.0).mask(mask)) + pyro.sample("y", dist.Normal(x, 1.0)) + + assert_ok(model, guide, TraceMeanField_ELBO()) + + +def test_mean_field_warn(): + def model(): + x = pyro.sample("x", dist.Normal(0.0, 1.0)) + pyro.sample("y", dist.Normal(x, 1.0)) + + def guide(): + loc = pyro.param("loc", torch.tensor(0.0)) + y = pyro.sample("y", dist.Normal(loc, 1.0)) + pyro.sample("x", dist.Normal(y, 1.0)) + + assert_warning(model, guide, TraceMeanField_ELBO()) + + +def test_tail_adaptive_ok(): + def plateless_model(): + pyro.sample("x", dist.Normal(0.0, 1.0)) + + def plate_model(): + x = pyro.sample("x", dist.Normal(0.0, 1.0)) + with pyro.plate("observe_data"): + pyro.sample("obs", dist.Normal(x, 1.0), obs=torch.arange(5).type_as(x)) + + def rep_guide(): + pyro.sample("x", dist.Normal(0.0, 2.0)) + + assert_ok( + plateless_model, + rep_guide, + TraceTailAdaptive_ELBO(vectorize_particles=True, num_particles=2), + ) + assert_ok( + plate_model, + rep_guide, + TraceTailAdaptive_ELBO(vectorize_particles=True, num_particles=2), + ) + + +def test_tail_adaptive_error(): + def plateless_model(): + pyro.sample("x", dist.Normal(0.0, 1.0)) + + def rep_guide(): + pyro.sample("x", dist.Normal(0.0, 2.0)) + + def nonrep_guide(): + pyro.sample("x", fakes.NonreparameterizedNormal(0.0, 2.0)) + + assert_error( + plateless_model, + rep_guide, + TraceTailAdaptive_ELBO(vectorize_particles=False, num_particles=2), + ) + assert_error( + plateless_model, + nonrep_guide, + TraceTailAdaptive_ELBO(vectorize_particles=True, num_particles=2), + ) + + +def test_tail_adaptive_warning(): + def plateless_model(): + pyro.sample("x", dist.Normal(0.0, 1.0)) + + def rep_guide(): + pyro.sample("x", dist.Normal(0.0, 2.0)) + + assert_warning( + plateless_model, + rep_guide, + TraceTailAdaptive_ELBO(vectorize_particles=True, num_particles=1), + ) + + +@pytest.mark.parametrize( + "Elbo", + [ + Trace_ELBO, + TraceMeanField_ELBO, + EnergyDistance_prior, + EnergyDistance_noprior, + ], +) +def test_reparam_ok(Elbo): + def model(): + x = pyro.sample("x", dist.Normal(0.0, 1.0)) + pyro.sample("y", dist.Normal(x, 1.0), obs=torch.tensor(0.0)) + + def guide(): + loc = pyro.param("loc", torch.tensor(0.0)) + pyro.sample("x", dist.Normal(loc, 1.0)) + + assert_ok(model, guide, Elbo()) + + +@pytest.mark.parametrize("mask", [True, False, torch.tensor(True), torch.tensor(False)]) +@pytest.mark.parametrize( + "Elbo", + [ + Trace_ELBO, + TraceMeanField_ELBO, + EnergyDistance_prior, + EnergyDistance_noprior, + ], +) +def test_reparam_mask_ok(Elbo, mask): + def model(): + x = pyro.sample("x", dist.Normal(0.0, 1.0)) + with poutine.mask(mask=mask): + pyro.sample("y", dist.Normal(x, 1.0), obs=torch.tensor(0.0)) + + def guide(): + loc = pyro.param("loc", torch.tensor(0.0)) + pyro.sample("x", dist.Normal(loc, 1.0)) + + assert_ok(model, guide, Elbo()) + + +@pytest.mark.parametrize( + "mask", + [ + True, + False, + torch.tensor(True), + torch.tensor(False), + torch.tensor([False, True]), + ], +) +@pytest.mark.parametrize( + "Elbo", + [ + Trace_ELBO, + TraceMeanField_ELBO, + EnergyDistance_prior, + EnergyDistance_noprior, + ], +) +def test_reparam_mask_plate_ok(Elbo, mask): + data = torch.randn(2, 3).exp() + data /= data.sum(-1, keepdim=True) + + def model(): + c = pyro.sample("c", dist.LogNormal(0.0, 1.0).expand([3]).to_event(1)) + with pyro.plate("data", len(data)), poutine.mask(mask=mask): + pyro.sample("obs", dist.Dirichlet(c), obs=data) + + def guide(): + loc = pyro.param("loc", torch.zeros(3)) + scale = pyro.param("scale", torch.ones(3), constraint=constraints.positive) + pyro.sample("c", dist.LogNormal(loc, scale).to_event(1)) + + assert_ok(model, guide, Elbo()) + + +@pytest.mark.parametrize("num_particles", [1, 2]) +@pytest.mark.parametrize( + "mask", + [ + torch.tensor(True), + torch.tensor(False), + torch.tensor([True]), + torch.tensor([False]), + torch.tensor([False, True, False]), + ], +) +@pytest.mark.parametrize( + "Elbo", + [ + Trace_ELBO, + TraceEnum_ELBO, + TraceGraph_ELBO, + TraceMeanField_ELBO, + ], +) +def test_obs_mask_ok(Elbo, mask, num_particles): + data = torch.tensor([7.0, 7.0, 7.0]) + + def model(): + x = pyro.sample("x", dist.Normal(0.0, 1.0)) + with pyro.plate("plate", len(data)): + y = pyro.sample("y", dist.Normal(x, 1.0), obs=data, obs_mask=mask) + assert ((y == data) == mask).all() + + def guide(): + loc = pyro.param("loc", torch.zeros(())) + scale = pyro.param("scale", torch.ones(()), constraint=constraints.positive) + x = pyro.sample("x", dist.Normal(loc, scale)) + with pyro.plate("plate", len(data)): + with poutine.mask(mask=~mask): + pyro.sample("y_unobserved", dist.Normal(x, 1.0)) + + elbo = Elbo( + num_particles=num_particles, + vectorize_particles=True, + strict_enumeration_warning=False, + ) + assert_ok(model, guide, elbo) + + +@pytest.mark.parametrize("num_particles", [1, 2]) +@pytest.mark.parametrize( + "mask", + [ + torch.tensor(True), + torch.tensor(False), + torch.tensor([True]), + torch.tensor([False]), + torch.tensor([False, True, True, False]), + ], +) +@pytest.mark.parametrize( + "Elbo", + [ + Trace_ELBO, + TraceEnum_ELBO, + TraceGraph_ELBO, + TraceMeanField_ELBO, + ], +) +def test_obs_mask_multivariate_ok(Elbo, mask, num_particles): + data = torch.full((4, 3), 7.0) + + def model(): + x = pyro.sample("x", dist.MultivariateNormal(torch.zeros(3), torch.eye(3))) + with pyro.plate("plate", len(data)): + y = pyro.sample( + "y", dist.MultivariateNormal(x, torch.eye(3)), obs=data, obs_mask=mask + ) + assert ((y == data).all(-1) == mask).all() + + def guide(): + loc = pyro.param("loc", torch.zeros(3)) + cov = pyro.param("cov", torch.eye(3), constraint=constraints.positive_definite) + x = pyro.sample("x", dist.MultivariateNormal(loc, cov)) + with pyro.plate("plate", len(data)): + with poutine.mask(mask=~mask): + pyro.sample("y_unobserved", dist.MultivariateNormal(x, torch.eye(3))) + + elbo = Elbo( + num_particles=num_particles, + vectorize_particles=True, + strict_enumeration_warning=False, + ) + assert_ok(model, guide, elbo) + + +@pytest.mark.parametrize( + "Elbo", + [ + Trace_ELBO, + TraceEnum_ELBO, + TraceGraph_ELBO, + TraceMeanField_ELBO, + ], +) +def test_obs_mask_multivariate_error(Elbo): + data = torch.full((3, 2), 7.0) + # This mask is invalid because it includes event shape. + mask = torch.tensor([[False, False], [False, True], [True, False]]) + + def model(): + x = pyro.sample("x", dist.MultivariateNormal(torch.zeros(2), torch.eye(2))) + with pyro.plate("plate", len(data)): + pyro.sample( + "y", dist.MultivariateNormal(x, torch.eye(2)), obs=data, obs_mask=mask + ) + + def guide(): + loc = pyro.param("loc", torch.zeros(2)) + x = pyro.sample("x", dist.MultivariateNormal(loc, torch.eye(2))) + with pyro.plate("plate", len(data)): + with poutine.mask(mask=~mask): + pyro.sample("y_unobserved", dist.MultivariateNormal(x, torch.eye(2))) + + elbo = Elbo(strict_enumeration_warning=False) + assert_error(model, guide, elbo, match="Invalid obs_mask shape") + + +@pytest.mark.parametrize("scale", [1, 0.1, torch.tensor(0.5)]) +@pytest.mark.parametrize( + "Elbo", + [ + Trace_ELBO, + TraceMeanField_ELBO, + EnergyDistance_prior, + EnergyDistance_noprior, + ], +) +def test_reparam_scale_ok(Elbo, scale): + def model(): + x = pyro.sample("x", dist.Normal(0.0, 1.0)) + with poutine.scale(scale=scale): + pyro.sample("y", dist.Normal(x, 1.0), obs=torch.tensor(0.0)) + + def guide(): + loc = pyro.param("loc", torch.tensor(0.0)) + pyro.sample("x", dist.Normal(loc, 1.0)) + + assert_ok(model, guide, Elbo()) + + +@pytest.mark.parametrize( + "scale", + [ + 1, + 0.1, + torch.tensor(0.5), + torch.tensor([0.1, 0.9]), + ], +) +@pytest.mark.parametrize( + "Elbo", + [ + Trace_ELBO, + TraceMeanField_ELBO, + EnergyDistance_prior, + EnergyDistance_noprior, + ], +) +def test_reparam_scale_plate_ok(Elbo, scale): + data = torch.randn(2, 3).exp() + data /= data.sum(-1, keepdim=True) + + def model(): + c = pyro.sample("c", dist.LogNormal(0.0, 1.0).expand([3]).to_event(1)) + with pyro.plate("data", len(data)), poutine.scale(scale=scale): + pyro.sample("obs", dist.Dirichlet(c), obs=data) + + def guide(): + loc = pyro.param("loc", torch.zeros(3)) + scale = pyro.param("scale", torch.ones(3), constraint=constraints.positive) + pyro.sample("c", dist.LogNormal(loc, scale).to_event(1)) + + assert_ok(model, guide, Elbo()) + + +@pytest.mark.parametrize( + "Elbo", + [ + EnergyDistance_prior, + EnergyDistance_noprior, + ], +) +def test_no_log_prob_ok(Elbo): + def model(data): + loc = pyro.sample("loc", dist.Normal(0, 1)) + scale = pyro.sample("scale", dist.LogNormal(0, 1)) + with pyro.plate("data", len(data)): + pyro.sample("obs", dist.Stable(1.5, 0.5, scale, loc), obs=data) + + def guide(data): + map_loc = pyro.param("map_loc", torch.tensor(0.0)) + map_scale = pyro.param( + "map_scale", torch.tensor(1.0), constraint=constraints.positive + ) + pyro.sample("loc", dist.Delta(map_loc)) + pyro.sample("scale", dist.Delta(map_scale)) + + data = torch.randn(10) + assert_ok(model, guide, Elbo(), data=data) + + +def test_reparam_stable(): + @poutine.reparam(config={"z": LatentStableReparam()}) + def model(): + stability = pyro.sample("stability", dist.Uniform(0.0, 2.0)) + skew = pyro.sample("skew", dist.Uniform(-1.0, 1.0)) + y = pyro.sample("z", dist.Stable(stability, skew)) + pyro.sample("x", dist.Poisson(y.abs()), obs=torch.tensor(1.0)) + + def guide(): + pyro.sample("stability", dist.Delta(torch.tensor(1.5))) + pyro.sample("skew", dist.Delta(torch.tensor(0.0))) + pyro.sample("z_uniform", dist.Delta(torch.tensor(0.1))) + pyro.sample("z_exponential", dist.Delta(torch.tensor(1.0))) + + assert_ok(model, guide, Trace_ELBO()) + + +@pytest.mark.stage("funsor") +@pytest.mark.parametrize("num_particles", [1, 2]) +def test_collapse_normal_normal(num_particles): + pytest.importorskip("funsor") + data = torch.tensor(0.0) + + def model(): + x = pyro.sample("x", dist.Normal(0.0, 1.0)) + with poutine.collapse(): + y = pyro.sample("y", dist.Normal(x, 1.0)) + pyro.sample("z", dist.Normal(y, 1.0), obs=data) + + def guide(): + loc = pyro.param("loc", torch.tensor(0.0)) + scale = pyro.param("scale", torch.tensor(1.0), constraint=constraints.positive) + pyro.sample("x", dist.Normal(loc, scale)) + + elbo = Trace_ELBO(num_particles=num_particles, vectorize_particles=True) + assert_ok(model, guide, elbo) + + +@pytest.mark.stage("funsor") +@pytest.mark.parametrize("num_particles", [1, 2]) +def test_collapse_normal_normal_plate(num_particles): + pytest.importorskip("funsor") + data = torch.randn(5) + + def model(): + x = pyro.sample("x", dist.Normal(0.0, 1.0)) + with poutine.collapse(): + y = pyro.sample("y", dist.Normal(x, 1.0)) + with pyro.plate("data", len(data), dim=-1): + pyro.sample("z", dist.Normal(y, 1.0), obs=data) + + def guide(): + loc = pyro.param("loc", torch.tensor(0.0)) + scale = pyro.param("scale", torch.tensor(1.0), constraint=constraints.positive) + pyro.sample("x", dist.Normal(loc, scale)) + + elbo = Trace_ELBO( + num_particles=num_particles, vectorize_particles=True, max_plate_nesting=1 + ) + assert_ok(model, guide, elbo) + + +@pytest.mark.stage("funsor") +@pytest.mark.parametrize("num_particles", [1, 2]) +def test_collapse_normal_plate_normal(num_particles): + pytest.importorskip("funsor") + data = torch.randn(5) + + def model(): + x = pyro.sample("x", dist.Normal(0.0, 1.0)) + with poutine.collapse(): + with pyro.plate("data", len(data), dim=-1): + y = pyro.sample("y", dist.Normal(x, 1.0)) + pyro.sample("z", dist.Normal(y, 1.0), obs=data) + + def guide(): + loc = pyro.param("loc", torch.tensor(0.0)) + scale = pyro.param("scale", torch.tensor(1.0), constraint=constraints.positive) + pyro.sample("x", dist.Normal(loc, scale)) + + elbo = Trace_ELBO( + num_particles=num_particles, vectorize_particles=True, max_plate_nesting=1 + ) + assert_ok(model, guide, elbo) + + +@pytest.mark.stage("funsor") +@pytest.mark.parametrize("num_particles", [1, 2]) +def test_collapse_beta_bernoulli(num_particles): + pytest.importorskip("funsor") + data = torch.tensor(0.0) + + def model(): + c = pyro.sample("c", dist.Gamma(1, 1)) + with poutine.collapse(): + probs = pyro.sample("probs", dist.Beta(c, 2)) + pyro.sample("obs", dist.Bernoulli(probs), obs=data) + + def guide(): + a = pyro.param("a", torch.tensor(1.0), constraint=constraints.positive) + b = pyro.param("b", torch.tensor(1.0), constraint=constraints.positive) + pyro.sample("c", dist.Gamma(a, b)) + + elbo = Trace_ELBO(num_particles=num_particles, vectorize_particles=True) + assert_ok(model, guide, elbo) + + +@pytest.mark.stage("funsor") +@pytest.mark.parametrize("num_particles", [1, 2]) +def test_collapse_beta_binomial(num_particles): + pytest.importorskip("funsor") + data = torch.tensor(5.0) + + def model(): + c = pyro.sample("c", dist.Gamma(1, 1)) + with poutine.collapse(): + probs = pyro.sample("probs", dist.Beta(c, 2)) + pyro.sample("obs", dist.Binomial(10, probs), obs=data) + + def guide(): + a = pyro.param("a", torch.tensor(1.0), constraint=constraints.positive) + b = pyro.param("b", torch.tensor(1.0), constraint=constraints.positive) + pyro.sample("c", dist.Gamma(a, b)) + + elbo = Trace_ELBO(num_particles=num_particles, vectorize_particles=True) + assert_ok(model, guide, elbo) + + +@pytest.mark.stage("funsor") +@pytest.mark.parametrize("num_particles", [1, 2]) +def test_collapse_beta_binomial_plate(num_particles): + pytest.importorskip("funsor") + data = torch.tensor([0.0, 1.0, 5.0, 5.0]) + + def model(): + c = pyro.sample("c", dist.Gamma(1, 1)) + with poutine.collapse(): + probs = pyro.sample("probs", dist.Beta(c, 2)) + with pyro.plate("plate", len(data)): + pyro.sample("obs", dist.Binomial(10, probs), obs=data) + + def guide(): + a = pyro.param("a", torch.tensor(1.0), constraint=constraints.positive) + b = pyro.param("b", torch.tensor(1.0), constraint=constraints.positive) + pyro.sample("c", dist.Gamma(a, b)) + + elbo = Trace_ELBO( + num_particles=num_particles, vectorize_particles=True, max_plate_nesting=1 + ) + assert_ok(model, guide, elbo) + + +@pytest.mark.stage("funsor") +@pytest.mark.parametrize("num_particles", [1, 2]) +def test_collapse_barrier(num_particles): + pytest.importorskip("funsor") + data = torch.tensor([0.0, 1.0, 5.0, 5.0]) + + def model(): + with poutine.collapse(): + z = pyro.sample("z_init", dist.Normal(0, 1)) + for t, x in enumerate(data): + z = pyro.sample("z_{}".format(t), dist.Normal(z, 1)) + pyro.sample("x_t{}".format(t), dist.Normal(z, 1), obs=x) + z = pyro.barrier(z) + z = torch.sigmoid(z) + return z + + def guide(): + pass + + elbo = Trace_ELBO(num_particles=num_particles, vectorize_particles=True) + assert_ok(model, guide, elbo) + + +def test_ordered_logistic_plate(): + N = 5 # num data points/batch size + K = 4 # num categories + data = (K * torch.rand(N)).long().float() + + def model(): + predictor = pyro.sample( + "predictor", dist.Normal(0.0, 1.0).expand([N]).to_event(1) + ) + cutpoints = pyro.sample( + "cutpoints", dist.Normal(0.0, 1.0).expand([K - 1]).to_event(1) + ) + # would have identifiability issues, but this isn't a real model... + cutpoints = torch.sort(cutpoints, dim=-1).values + with pyro.plate("obs_plate", N): + pyro.sample("obs", dist.OrderedLogistic(predictor, cutpoints), obs=data) + + def guide(): + # parameters + pred_mu = pyro.param("pred_mu", torch.zeros(N)) + pred_std = pyro.param("pred_std", torch.ones(N)) + cp_mu = pyro.param("cp_mu", torch.zeros(K - 1)) + cp_std = pyro.param("cp_std", torch.ones(K - 1)) + # sample + pyro.sample("predictor", dist.Normal(pred_mu, pred_std).to_event(1)) + pyro.sample("cutpoints", dist.Normal(cp_mu, cp_std).to_event(1)) + + assert_ok(model, guide, Trace_ELBO()) diff --git a/pyro/source/tests/integration_tests/__init__.py b/pyro/source/tests/integration_tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/tests/integration_tests/conftest.py b/pyro/source/tests/integration_tests/conftest.py new file mode 100644 index 0000000000000000000000000000000000000000..aa7c9285a80d6b13875f4f73e4d1813b33c9d611 --- /dev/null +++ b/pyro/source/tests/integration_tests/conftest.py @@ -0,0 +1,13 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest + + +def pytest_collection_modifyitems(items): + for item in items: + if item.nodeid.startswith("tests/integration_tests"): + if "stage" not in item.keywords: + item.add_marker(pytest.mark.stage("integration")) + if "init" not in item.keywords: + item.add_marker(pytest.mark.init(rng_seed=123)) diff --git a/pyro/source/tests/integration_tests/test_conjugate_gaussian_models.py b/pyro/source/tests/integration_tests/test_conjugate_gaussian_models.py new file mode 100644 index 0000000000000000000000000000000000000000..acb23da814e711be66301fbd0aa88737888f78e0 --- /dev/null +++ b/pyro/source/tests/integration_tests/test_conjugate_gaussian_models.py @@ -0,0 +1,652 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging +import os +import time +from unittest import TestCase + +import numpy as np +import pytest +import torch + +import pyro +import pyro.distributions as dist +import pyro.optim as optim +from pyro.distributions.testing import fakes +from pyro.infer import SVI, TraceGraph_ELBO +from pyro.poutine import Trace +from tests.common import assert_equal + +logger = logging.getLogger(__name__) + + +def param_mse(name, target): + return torch.sum(torch.pow(target - pyro.param(name), 2.0)).detach().cpu().item() + + +class GaussianChain(TestCase): + # chain of normals with known covariances and latent means + + def setUp(self): + self.loc0 = torch.tensor([0.2]) + self.data = torch.tensor([-0.1, 0.03, 0.20, 0.10]) + self.n_data = self.data.size(0) + self.sum_data = self.data.sum() + + def setup_chain(self, N): + self.N = N # number of latent variables in the chain + lambdas = [1.5 * (k + 1) / N for k in range(N + 1)] + self.lambdas = list(map(lambda x: torch.tensor([x]), lambdas)) + self.lambda_tilde_posts = [self.lambdas[0]] + for k in range(1, self.N): + lambda_tilde_k = (self.lambdas[k] * self.lambda_tilde_posts[k - 1]) / ( + self.lambdas[k] + self.lambda_tilde_posts[k - 1] + ) + self.lambda_tilde_posts.append(lambda_tilde_k) + self.lambda_posts = [ + None + ] # this is never used (just a way of shifting the indexing by 1) + for k in range(1, self.N): + lambda_k = self.lambdas[k] + self.lambda_tilde_posts[k - 1] + self.lambda_posts.append(lambda_k) + lambda_N_post = ( + self.n_data * torch.tensor(1.0).expand_as(self.lambdas[N]) * self.lambdas[N] + ) + self.lambda_tilde_posts[N - 1] + self.lambda_posts.append(lambda_N_post) + self.target_kappas = [None] + self.target_kappas.extend( + [self.lambdas[k] / self.lambda_posts[k] for k in range(1, self.N)] + ) + self.target_mus = [None] + self.target_mus.extend( + [ + self.loc0 * self.lambda_tilde_posts[k - 1] / self.lambda_posts[k] + for k in range(1, self.N) + ] + ) + target_loc_N = ( + self.sum_data * self.lambdas[N] / lambda_N_post + + self.loc0 * self.lambda_tilde_posts[N - 1] / lambda_N_post + ) + self.target_mus.append(target_loc_N) + self.which_nodes_reparam = self.setup_reparam_mask(N) + + # controls which nodes are reparameterized + def setup_reparam_mask(self, N): + while True: + mask = torch.bernoulli(0.30 * torch.ones(N)) + if torch.sum(mask) < 0.40 * N and torch.sum(mask) > 0.5: + return mask + + def model(self, reparameterized, difficulty=0.0): + next_mean = self.loc0 + for k in range(1, self.N + 1): + latent_dist = dist.Normal(next_mean, torch.pow(self.lambdas[k - 1], -0.5)) + loc_latent = pyro.sample("loc_latent_%d" % k, latent_dist) + next_mean = loc_latent + + loc_N = next_mean + with pyro.plate("data", self.data.size(0)): + pyro.sample( + "obs", + dist.Normal(loc_N, torch.pow(self.lambdas[self.N], -0.5)), + obs=self.data, + ) + return loc_N + + def guide(self, reparameterized, difficulty=0.0): + previous_sample = None + for k in reversed(range(1, self.N + 1)): + loc_q = pyro.param( + "loc_q_%d" % k, + self.target_mus[k].detach() + + difficulty * (0.1 * torch.randn(1) - 0.53), + ) + log_sig_q = pyro.param( + "log_sig_q_%d" % k, + -0.5 * torch.log(self.lambda_posts[k]).data + + difficulty * (0.1 * torch.randn(1) - 0.53), + ) + sig_q = torch.exp(log_sig_q) + kappa_q = None + if k != self.N: + kappa_q = pyro.param( + "kappa_q_%d" % k, + self.target_kappas[k].data + + difficulty * (0.1 * torch.randn(1) - 0.53), + ) + mean_function = loc_q if k == self.N else kappa_q * previous_sample + loc_q + node_flagged = True if self.which_nodes_reparam[k - 1] == 1.0 else False + Normal = ( + dist.Normal + if reparameterized or node_flagged + else fakes.NonreparameterizedNormal + ) + loc_latent = pyro.sample( + "loc_latent_%d" % k, + Normal(mean_function, sig_q), + infer=dict(baseline=dict(use_decaying_avg_baseline=True)), + ) + previous_sample = loc_latent + return previous_sample + + +@pytest.mark.stage("integration", "integration_batch_1") +@pytest.mark.init(rng_seed=0) +class GaussianChainTests(GaussianChain): + def test_elbo_reparameterized_N_is_3(self): + self.setup_chain(3) + self.do_elbo_test(True, 1100, 0.0058, 0.03, difficulty=1.0) + + def test_elbo_reparameterized_N_is_8(self): + self.setup_chain(8) + self.do_elbo_test(True, 1100, 0.0059, 0.03, difficulty=1.0) + + @pytest.mark.skipif( + "CI" in os.environ and os.environ["CI"] == "true", + reason="Skip slow test in travis.", + ) + def test_elbo_reparameterized_N_is_17(self): + self.setup_chain(17) + self.do_elbo_test(True, 2700, 0.0044, 0.03, difficulty=1.0) + + def test_elbo_nonreparameterized_N_is_3(self): + self.setup_chain(3) + self.do_elbo_test(False, 1700, 0.0049, 0.04, difficulty=0.6) + + def test_elbo_nonreparameterized_N_is_5(self): + self.setup_chain(5) + self.do_elbo_test(False, 1000, 0.0061, 0.06, difficulty=0.6) + + @pytest.mark.skipif( + "CI" in os.environ and os.environ["CI"] == "true", + reason="Skip slow test in travis.", + ) + def test_elbo_nonreparameterized_N_is_7(self): + self.setup_chain(7) + self.do_elbo_test(False, 1800, 0.0035, 0.05, difficulty=0.6) + + def do_elbo_test(self, reparameterized, n_steps, lr, prec, difficulty=1.0): + n_repa_nodes = ( + torch.sum(self.which_nodes_reparam) if not reparameterized else self.N + ) + logger.info( + " - - - - - DO GAUSSIAN %d-CHAIN ELBO TEST [reparameterized = %s; %d/%d] - - - - - " + % (self.N, reparameterized, n_repa_nodes, self.N) + ) + if self.N < 0: + + def array_to_string(y): + return str(map(lambda x: "%.3f" % x.detach().cpu().numpy()[0], y)) + + logger.debug("lambdas: " + array_to_string(self.lambdas)) + logger.debug("target_mus: " + array_to_string(self.target_mus[1:])) + logger.debug("target_kappas: " + array_to_string(self.target_kappas[1:])) + logger.debug("lambda_posts: " + array_to_string(self.lambda_posts[1:])) + logger.debug( + "lambda_tilde_posts: " + array_to_string(self.lambda_tilde_posts) + ) + pyro.clear_param_store() + + adam = optim.Adam({"lr": lr, "betas": (0.95, 0.999)}) + elbo = TraceGraph_ELBO() + loss_and_grads = elbo.loss_and_grads + # loss_and_grads = elbo.jit_loss_and_grads # This fails. + svi = SVI( + self.model, self.guide, adam, loss=elbo.loss, loss_and_grads=loss_and_grads + ) + + for step in range(n_steps): + t0 = time.time() + svi.step(reparameterized=reparameterized, difficulty=difficulty) + + if step % 5000 == 0 or step == n_steps - 1: + kappa_errors, log_sig_errors, loc_errors = [], [], [] + for k in range(1, self.N + 1): + if k != self.N: + kappa_error = param_mse("kappa_q_%d" % k, self.target_kappas[k]) + kappa_errors.append(kappa_error) + + loc_errors.append(param_mse("loc_q_%d" % k, self.target_mus[k])) + log_sig_error = param_mse( + "log_sig_q_%d" % k, -0.5 * torch.log(self.lambda_posts[k]) + ) + log_sig_errors.append(log_sig_error) + + max_errors = ( + np.max(loc_errors), + np.max(log_sig_errors), + np.max(kappa_errors), + ) + min_errors = ( + np.min(loc_errors), + np.min(log_sig_errors), + np.min(kappa_errors), + ) + mean_errors = ( + np.mean(loc_errors), + np.mean(log_sig_errors), + np.mean(kappa_errors), + ) + logger.debug( + "[max errors] (loc, log_scale, kappa) = (%.4f, %.4f, %.4f)" + % max_errors + ) + logger.debug( + "[min errors] (loc, log_scale, kappa) = (%.4f, %.4f, %.4f)" + % min_errors + ) + logger.debug( + "[mean errors] (loc, log_scale, kappa) = (%.4f, %.4f, %.4f)" + % mean_errors + ) + logger.debug( + "[step time = %.3f; N = %d; step = %d]\n" + % (time.time() - t0, self.N, step) + ) + + assert_equal(0.0, max_errors[0], prec=prec) + assert_equal(0.0, max_errors[1], prec=prec) + assert_equal(0.0, max_errors[2], prec=prec) + + +@pytest.mark.stage("integration", "integration_batch_2") +@pytest.mark.init(rng_seed=0) +class GaussianPyramidTests(TestCase): + def setUp(self): + self.loc0 = torch.tensor([0.52]) + + def setup_pyramid(self, N): + # pyramid of normals with known covariances and latent means + assert N > 1 + self.N = N # number of layers in the pyramid + lambdas = [1.1 * (k + 1) / N for k in range(N + 2)] + self.lambdas = list(map(lambda x: torch.tensor([x]), lambdas)) + # generate data + self.data = [] + self.N_data = 3 + bottom_layer_size = 2 ** (N - 1) + for i in range(bottom_layer_size): + data_i = [] + for k in range(self.N_data): + data_i.append( + torch.tensor([0.25]) + + (0.1 + 0.4 * (i + 1) / bottom_layer_size) * torch.randn(1) + ) + self.data.append(data_i) + self.data_sums = [sum(self.data[i]) for i in range(bottom_layer_size)] + self.N_data = torch.tensor([float(self.N_data)]) + self.q_dag = self.construct_q_dag() + # compute the order in which guide samples are generated + self.q_topo_sort = self.q_dag.topological_sort() + self.which_nodes_reparam = self.setup_reparam_mask(len(self.q_topo_sort)) + self.calculate_variational_targets() + self.set_model_permutations() + + # for choosing which latents should be reparameterized + def setup_reparam_mask(self, n): + while True: + mask = torch.bernoulli(0.30 * torch.ones(n)) + if torch.sum(mask) < 0.40 * n and torch.sum(mask) > 0.5: + return mask + + # for doing model sampling in different sequential orders + def set_model_permutations(self): + self.model_permutations = [] + self.model_unpermutations = [] + for n in range(1, self.N): + permutation = list(range(2 ** (n - 1))) + if n > 1: + while permutation == list(range(2 ** (n - 1))): + permutation = torch.randperm(2 ** (n - 1)).numpy().tolist() + self.model_permutations.append(permutation) + + unpermutation = list(range(len(permutation))) + for i in range(len(permutation)): + unpermutation[permutation[i]] = i + self.model_unpermutations.append(unpermutation) + + def test_elbo_reparameterized_three_layers(self): + self.setup_pyramid(3) + self.do_elbo_test( + True, 1700, 0.01, 0.04, 0.92, difficulty=0.8, model_permutation=False + ) + + @pytest.mark.skipif("CI" in os.environ, reason="slow test") + def test_elbo_reparameterized_four_layers(self): + self.setup_pyramid(4) + self.do_elbo_test( + True, 20000, 0.0015, 0.04, 0.92, difficulty=0.8, model_permutation=False + ) + + @pytest.mark.stage("integration", "integration_batch_1") + def test_elbo_nonreparameterized_two_layers(self): + self.setup_pyramid(2) + self.do_elbo_test( + False, 500, 0.012, 0.04, 0.95, difficulty=0.5, model_permutation=False + ) + + def test_elbo_nonreparameterized_three_layers(self): + self.setup_pyramid(3) + self.do_elbo_test( + False, 9100, 0.00506, 0.04, 0.95, difficulty=0.5, model_permutation=False + ) + + def test_elbo_nonreparameterized_two_layers_model_permuted(self): + self.setup_pyramid(2) + self.do_elbo_test( + False, 700, 0.018, 0.05, 0.96, difficulty=0.5, model_permutation=True + ) + + @pytest.mark.skipif( + "CI" in os.environ and os.environ["CI"] == "true", + reason="Skip slow test in travis.", + ) + def test_elbo_nonreparameterized_three_layers_model_permuted(self): + self.setup_pyramid(3) + self.do_elbo_test( + False, 6500, 0.0071, 0.05, 0.96, difficulty=0.4, model_permutation=True + ) + + def calculate_variational_targets(self): + # calculate (some of the) variational parameters corresponding to exact posterior + + def calc_lambda_A(lA, lB, lC): + return lA + lB + lC + + def calc_lambda_B(lA, lB): + return (lA * lB) / (lA + lB) + + def calc_lambda_C(lA, lB, lC): + return ((lA + lB) * lC) / (lA + lB + lC) + + self.target_lambdas = {"1": self.lambdas[0]} + previous_names = ["1"] + for n in range(2, self.N + 1): + new_names = [] + for prev_name in previous_names: + for LR in ["L", "R"]: + new_names.append(prev_name + LR) + self.target_lambdas[new_names[-1]] = self.lambdas[n - 1] + previous_names = new_names + + # recursion to compute the target precisions + previous_names = ["1"] + old_left_pivot_lambda = None + for n in range(2, self.N + 1): + new_names = [] + for prev_name in previous_names: + BC_names = [] + for LR in ["L", "R"]: + new_names.append(prev_name + LR) + BC_names.append(new_names[-1]) + lambda_A0 = self.target_lambdas[prev_name] + if n == self.N: + old_left_pivot_lambda = lambda_A0 + lambda_B0 = self.target_lambdas[BC_names[0]] + lambda_C0 = self.target_lambdas[BC_names[1]] + lambda_A = calc_lambda_A(lambda_A0, lambda_B0, lambda_C0) + lambda_B = calc_lambda_B(lambda_A0, lambda_B0) + lambda_C = calc_lambda_C(lambda_A0, lambda_B0, lambda_C0) + self.target_lambdas[prev_name] = lambda_A + self.target_lambdas[BC_names[0]] = lambda_B + self.target_lambdas[BC_names[1]] = lambda_C + previous_names = new_names + + for prev_name in previous_names: + new_lambda = self.N_data * self.lambdas[-1] + self.target_lambdas[prev_name] + self.target_lambdas[prev_name] = new_lambda + + leftmost_node_suffix = self.q_topo_sort[0][11:] + leftmost_lambda = self.target_lambdas[leftmost_node_suffix] + self.target_leftmost_constant = ( + self.data_sums[0] * self.lambdas[-1] / leftmost_lambda + ) + self.target_leftmost_constant += ( + self.loc0 + * (leftmost_lambda - self.N_data * self.lambdas[-1]) + / leftmost_lambda + ) + + almost_leftmost_node_suffix = leftmost_node_suffix[:-1] + "R" + almost_leftmost_lambda = self.target_lambdas[almost_leftmost_node_suffix] + result = self.lambdas[-1] * self.data_sums[1] + result += ( + (almost_leftmost_lambda - self.N_data * self.lambdas[-1]) + * self.loc0 + * old_left_pivot_lambda + / (old_left_pivot_lambda + self.lambdas[-2]) + ) + self.target_almost_leftmost_constant = result / almost_leftmost_lambda + + # construct dependency structure for the guide + def construct_q_dag(self): + g = Trace() + + def add_edge(s): + deps = [] + if s == "1": + deps.extend(["1L", "1R"]) + else: + if s[-1] == "R": + deps.append(s[0:-1] + "L") + if len(s) < self.N: + deps.extend([s + "L", s + "R"]) + for k in range(len(s) - 2): + base = s[1 : -1 - k] + if base[-1] == "R": + deps.append("1" + base[:-1] + "L") + for dep in deps: + g.add_edge("loc_latent_" + dep, "loc_latent_" + s) + + previous_names = ["1"] + add_edge("1") + for n in range(2, self.N + 1): + new_names = [] + for prev_name in previous_names: + for LR in ["L", "R"]: + new_name = prev_name + LR + new_names.append(new_name) + add_edge(new_name) + previous_names = new_names + + return g + + def model(self, reparameterized, model_permutation, difficulty=0.0): + top_latent_dist = dist.Normal(self.loc0, torch.pow(self.lambdas[0], -0.5)) + previous_names = ["loc_latent_1"] + top_latent = pyro.sample(previous_names[0], top_latent_dist) + previous_latents_and_names = list(zip([top_latent], previous_names)) + + # for sampling model variables in different sequential orders + def permute(x, n): + if model_permutation: + return [x[self.model_permutations[n - 1][i]] for i in range(len(x))] + return x + + def unpermute(x, n): + if model_permutation: + return [x[self.model_unpermutations[n - 1][i]] for i in range(len(x))] + return x + + for n in range(2, self.N + 1): + new_latents_and_names = [] + for prev_latent, prev_name in permute(previous_latents_and_names, n - 1): + latent_dist = dist.Normal( + prev_latent, torch.pow(self.lambdas[n - 1], -0.5) + ) + couple = [] + for LR in ["L", "R"]: + new_name = prev_name + LR + loc_latent_LR = pyro.sample(new_name, latent_dist) + couple.append([loc_latent_LR, new_name]) + new_latents_and_names.append(couple) + _previous_latents_and_names = unpermute(new_latents_and_names, n - 1) + previous_latents_and_names = [] + for x in _previous_latents_and_names: + previous_latents_and_names.append(x[0]) + previous_latents_and_names.append(x[1]) + + for i, data_i in enumerate(self.data): + for k, x in enumerate(data_i): + pyro.sample( + "obs_%s_%d" % (previous_latents_and_names[i][1], k), + dist.Normal( + previous_latents_and_names[i][0], + torch.pow(self.lambdas[-1], -0.5), + ), + obs=x, + ) + return top_latent + + def guide(self, reparameterized, model_permutation, difficulty=0.0): + latents_dict = {} + + n_nodes = len(self.q_topo_sort) + for i, node in enumerate(self.q_topo_sort): + deps = self.q_dag.predecessors(node) + node_suffix = node[11:] + log_sig_node = pyro.param( + "log_sig_" + node_suffix, + -0.5 * torch.log(self.target_lambdas[node_suffix]) + + difficulty * (torch.Tensor([-0.3]) - 0.3 * (torch.randn(1) ** 2)), + ) + mean_function_node = pyro.param( + "constant_term_" + node, + self.loc0 + torch.Tensor([difficulty * i / n_nodes]), + ) + for dep in deps: + kappa_dep = pyro.param( + "kappa_" + node_suffix + "_" + dep[11:], + torch.tensor([0.5 + difficulty * i / n_nodes]), + ) + mean_function_node = mean_function_node + kappa_dep * latents_dict[dep] + node_flagged = True if self.which_nodes_reparam[i] == 1.0 else False + Normal = ( + dist.Normal + if reparameterized or node_flagged + else fakes.NonreparameterizedNormal + ) + latent_node = pyro.sample( + node, + Normal(mean_function_node, torch.exp(log_sig_node)), + infer=dict( + baseline=dict(use_decaying_avg_baseline=True, baseline_beta=0.96) + ), + ) + latents_dict[node] = latent_node + + return latents_dict["loc_latent_1"] + + def do_elbo_test( + self, + reparameterized, + n_steps, + lr, + prec, + beta1, + difficulty=1.0, + model_permutation=False, + ): + n_repa_nodes = ( + torch.sum(self.which_nodes_reparam) + if not reparameterized + else len(self.q_topo_sort) + ) + logger.info( + ( + " - - - DO GAUSSIAN %d-LAYERED PYRAMID ELBO TEST " + + "(with a total of %d RVs) [reparameterized=%s; %d/%d; perm=%s] - - -" + ) + % ( + self.N, + (2**self.N) - 1, + reparameterized, + n_repa_nodes, + len(self.q_topo_sort), + model_permutation, + ) + ) + pyro.clear_param_store() + + # check graph structure is as expected but only for N=2 + if self.N == 2: + guide_trace = pyro.poutine.trace(self.guide, graph_type="dense").get_trace( + reparameterized=reparameterized, + model_permutation=model_permutation, + difficulty=difficulty, + ) + expected_nodes = set( + [ + "log_sig_1R", + "kappa_1_1L", + "_INPUT", + "constant_term_loc_latent_1R", + "_RETURN", + "loc_latent_1R", + "loc_latent_1", + "constant_term_loc_latent_1", + "loc_latent_1L", + "constant_term_loc_latent_1L", + "log_sig_1L", + "kappa_1_1R", + "kappa_1R_1L", + "log_sig_1", + ] + ) + expected_edges = set( + [ + ("loc_latent_1R", "loc_latent_1"), + ("loc_latent_1L", "loc_latent_1R"), + ("loc_latent_1L", "loc_latent_1"), + ] + ) + assert expected_nodes == set(guide_trace.nodes) + assert expected_edges == set(guide_trace.edges) + + adam = optim.Adam({"lr": lr, "betas": (beta1, 0.999)}) + svi = SVI(self.model, self.guide, adam, loss=TraceGraph_ELBO()) + + for step in range(n_steps): + t0 = time.time() + svi.step( + reparameterized=reparameterized, + model_permutation=model_permutation, + difficulty=difficulty, + ) + + if step % 5000 == 0 or step == n_steps - 1: + log_sig_errors = [] + for node in self.target_lambdas: + target_log_sig = -0.5 * torch.log(self.target_lambdas[node]) + log_sig_error = param_mse("log_sig_" + node, target_log_sig) + log_sig_errors.append(log_sig_error) + max_log_sig_error = np.max(log_sig_errors) + min_log_sig_error = np.min(log_sig_errors) + mean_log_sig_error = np.mean(log_sig_errors) + leftmost_node = self.q_topo_sort[0] + leftmost_constant_error = param_mse( + "constant_term_" + leftmost_node, self.target_leftmost_constant + ) + almost_leftmost_constant_error = param_mse( + "constant_term_" + leftmost_node[:-1] + "R", + self.target_almost_leftmost_constant, + ) + + logger.debug( + "[mean function constant errors (partial)] %.4f %.4f" + % (leftmost_constant_error, almost_leftmost_constant_error) + ) + logger.debug( + "[min/mean/max log(scale) errors] %.4f %.4f %.4f" + % (min_log_sig_error, mean_log_sig_error, max_log_sig_error) + ) + logger.debug( + "[step time = %.3f; N = %d; step = %d]\n" + % (time.time() - t0, self.N, step) + ) + + assert_equal(0.0, max_log_sig_error, prec=prec) + assert_equal(0.0, leftmost_constant_error, prec=prec) + assert_equal(0.0, almost_leftmost_constant_error, prec=prec) diff --git a/pyro/source/tests/integration_tests/test_tracegraph_elbo.py b/pyro/source/tests/integration_tests/test_tracegraph_elbo.py new file mode 100644 index 0000000000000000000000000000000000000000..b42058316fc1990652d7d2303e571b165a056566 --- /dev/null +++ b/pyro/source/tests/integration_tests/test_tracegraph_elbo.py @@ -0,0 +1,632 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging +from unittest import TestCase + +import numpy as np +import pytest +import torch +from torch import nn as nn + +import pyro +import pyro.distributions as dist +import pyro.optim as optim +from pyro.distributions.testing import fakes +from pyro.infer import SVI, TraceGraph_ELBO +from tests.common import assert_equal + +pytestmark = pytest.mark.stage("integration", "integration_batch_2") +logger = logging.getLogger(__name__) + + +def param_mse(name, target): + return torch.sum(torch.pow(target - pyro.param(name), 2.0)).item() + + +def param_abs_error(name, target): + return torch.sum(torch.abs(target - pyro.param(name))).item() + + +class NormalNormalTests(TestCase): + def setUp(self): + # normal-normal; known covariance + self.lam0 = torch.tensor([0.1, 0.1]) # precision of prior + self.loc0 = torch.tensor([0.0, 0.5]) # prior mean + # known precision of observation noise + self.lam = torch.tensor([6.0, 4.0]) + self.data = [] + self.data.append(torch.tensor([-0.1, 0.3])) + self.data.append(torch.tensor([0.00, 0.4])) + self.data.append(torch.tensor([0.20, 0.5])) + self.data.append(torch.tensor([0.10, 0.7])) + self.n_data = torch.tensor(float(len(self.data))) + self.sum_data = self.data[0] + self.data[1] + self.data[2] + self.data[3] + self.analytic_lam_n = self.lam0 + self.n_data.expand_as(self.lam) * self.lam + self.analytic_log_sig_n = -0.5 * torch.log(self.analytic_lam_n) + self.analytic_loc_n = self.sum_data * ( + self.lam / self.analytic_lam_n + ) + self.loc0 * (self.lam0 / self.analytic_lam_n) + + def test_elbo_reparameterized(self): + self.do_elbo_test(True, 1500, 0.02) + + @pytest.mark.init(rng_seed=0) + def test_elbo_nonreparameterized(self): + self.do_elbo_test(False, 5000, 0.05) + + def do_elbo_test(self, reparameterized, n_steps, prec): + logger.info( + " - - - - - DO NORMALNORMAL ELBO TEST [reparameterized = %s] - - - - - " + % reparameterized + ) + pyro.clear_param_store() + Normal = dist.Normal if reparameterized else fakes.NonreparameterizedNormal + + def model(): + with pyro.plate("plate", 2): + loc_latent = pyro.sample( + "loc_latent", Normal(self.loc0, torch.pow(self.lam0, -0.5)) + ) + for i, x in enumerate(self.data): + pyro.sample( + "obs_%d" % i, + dist.Normal(loc_latent, torch.pow(self.lam, -0.5)), + obs=x, + ) + return loc_latent + + def guide(): + loc_q = pyro.param("loc_q", self.analytic_loc_n.expand(2) + 0.334) + log_sig_q = pyro.param( + "log_sig_q", self.analytic_log_sig_n.expand(2) - 0.29 + ) + sig_q = torch.exp(log_sig_q) + with pyro.plate("plate", 2): + loc_latent = pyro.sample("loc_latent", Normal(loc_q, sig_q)) + return loc_latent + + adam = optim.Adam({"lr": 0.0015, "betas": (0.97, 0.999)}) + svi = SVI(model, guide, adam, loss=TraceGraph_ELBO()) + + for k in range(n_steps): + svi.step() + + loc_error = param_mse("loc_q", self.analytic_loc_n) + log_sig_error = param_mse("log_sig_q", self.analytic_log_sig_n) + if k % 250 == 0: + logger.debug( + "loc error, log(scale) error: %.4f, %.4f" + % (loc_error, log_sig_error) + ) + + assert_equal(0.0, loc_error, prec=prec) + assert_equal(0.0, log_sig_error, prec=prec) + + +class NormalNormalNormalTests(TestCase): + def setUp(self): + # normal-normal-normal; known covariance + self.lam0 = torch.tensor([0.1, 0.1]) # precision of prior + self.loc0 = torch.tensor([0.0, 0.5]) # prior mean + # known precision of observation noise + self.lam = torch.tensor([6.0, 4.0]) + self.data = torch.tensor([[-0.1, 0.3], [0.00, 0.4], [0.20, 0.5], [0.10, 0.7]]) + self.analytic_lam_n = self.lam0 + float(len(self.data)) * self.lam + self.analytic_log_sig_n = -0.5 * torch.log(self.analytic_lam_n) + self.analytic_loc_n = self.data.sum(0) * ( + self.lam / self.analytic_lam_n + ) + self.loc0 * (self.lam0 / self.analytic_lam_n) + + def test_elbo_reparameterized(self): + self.do_elbo_test(True, True, 3000, 0.02, 0.002, False, False) + + def test_elbo_nonreparameterized_both_baselines(self): + self.do_elbo_test( + False, + False, + 3000, + 0.04, + 0.001, + use_nn_baseline=True, + use_decaying_avg_baseline=True, + ) + + def test_elbo_nonreparameterized_decaying_baseline(self): + self.do_elbo_test( + True, + False, + 4000, + 0.04, + 0.0015, + use_nn_baseline=False, + use_decaying_avg_baseline=True, + ) + + def test_elbo_nonreparameterized_nn_baseline(self): + self.do_elbo_test( + False, + True, + 4000, + 0.04, + 0.0015, + use_nn_baseline=True, + use_decaying_avg_baseline=False, + ) + + def do_elbo_test( + self, + repa1, + repa2, + n_steps, + prec, + lr, + use_nn_baseline, + use_decaying_avg_baseline, + ): + logger.info(" - - - - - DO NORMALNORMALNORMAL ELBO TEST - - - - - -") + logger.info( + "[reparameterized = %s, %s; nn_baseline = %s, decaying_baseline = %s]" + % (repa1, repa2, use_nn_baseline, use_decaying_avg_baseline) + ) + pyro.clear_param_store() + Normal1 = dist.Normal if repa1 else fakes.NonreparameterizedNormal + Normal2 = dist.Normal if repa2 else fakes.NonreparameterizedNormal + + if use_nn_baseline: + + class VanillaBaselineNN(nn.Module): + def __init__(self, dim_input, dim_h): + super().__init__() + self.lin1 = nn.Linear(dim_input, dim_h) + self.lin2 = nn.Linear(dim_h, 2) + self.sigmoid = nn.Sigmoid() + + def forward(self, x): + h = self.sigmoid(self.lin1(x)) + return self.lin2(h) + + loc_prime_baseline = pyro.module( + "loc_prime_baseline", VanillaBaselineNN(2, 5) + ) + else: + loc_prime_baseline = None + + def model(): + with pyro.plate("plate", 2): + loc_latent_prime = pyro.sample( + "loc_latent_prime", Normal1(self.loc0, torch.pow(self.lam0, -0.5)) + ) + loc_latent = pyro.sample( + "loc_latent", Normal2(loc_latent_prime, torch.pow(self.lam0, -0.5)) + ) + with pyro.plate("data", len(self.data)): + pyro.sample( + "obs", + dist.Normal(loc_latent, torch.pow(self.lam, -0.5)).expand_by( + self.data.shape[:1] + ), + obs=self.data, + ) + return loc_latent + + # note that the exact posterior is not mean field! + def guide(): + loc_q = pyro.param("loc_q", self.analytic_loc_n.expand(2) + 0.334) + log_sig_q = pyro.param( + "log_sig_q", self.analytic_log_sig_n.expand(2) - 0.29 + ) + loc_q_prime = pyro.param("loc_q_prime", torch.tensor([-0.34, 0.52])) + kappa_q = pyro.param("kappa_q", torch.tensor([0.74])) + log_sig_q_prime = pyro.param( + "log_sig_q_prime", -0.5 * torch.log(1.2 * self.lam0) + ) + sig_q, sig_q_prime = torch.exp(log_sig_q), torch.exp(log_sig_q_prime) + with pyro.plate("plate", 2): + loc_latent = pyro.sample( + "loc_latent", + Normal2(loc_q, sig_q), + infer=dict( + baseline=dict( + use_decaying_avg_baseline=use_decaying_avg_baseline + ) + ), + ) + pyro.sample( + "loc_latent_prime", + Normal1( + kappa_q.expand_as(loc_latent) * loc_latent + loc_q_prime, + sig_q_prime, + ), + infer=dict( + baseline=dict( + nn_baseline=loc_prime_baseline, + nn_baseline_input=loc_latent, + use_decaying_avg_baseline=use_decaying_avg_baseline, + ) + ), + ) + with pyro.plate("data", len(self.data)): + pass + + return loc_latent + + adam = optim.Adam({"lr": 0.0015, "betas": (0.97, 0.999)}) + svi = SVI(model, guide, adam, loss=TraceGraph_ELBO()) + + for k in range(n_steps): + svi.step() + + loc_error = param_mse("loc_q", self.analytic_loc_n) + log_sig_error = param_mse("log_sig_q", self.analytic_log_sig_n) + loc_prime_error = param_mse("loc_q_prime", 0.5 * self.loc0) + kappa_error = param_mse("kappa_q", 0.5 * torch.ones(1)) + log_sig_prime_error = param_mse( + "log_sig_q_prime", -0.5 * torch.log(2.0 * self.lam0) + ) + + if k % 500 == 0: + logger.debug("errors: %.4f, %.4f" % (loc_error, log_sig_error)) + logger.debug(", %.4f, %.4f" % (loc_prime_error, log_sig_prime_error)) + logger.debug(", %.4f" % kappa_error) + + assert_equal(0.0, loc_error, prec=prec) + assert_equal(0.0, log_sig_error, prec=prec) + assert_equal(0.0, loc_prime_error, prec=prec) + assert_equal(0.0, log_sig_prime_error, prec=prec) + assert_equal(0.0, kappa_error, prec=prec) + + +class BernoulliBetaTests(TestCase): + def setUp(self): + # bernoulli-beta model + # beta prior hyperparameter + self.alpha0 = torch.tensor(1.0) + self.beta0 = torch.tensor(1.0) # beta prior hyperparameter + self.data = torch.tensor([0.0, 1.0, 1.0, 1.0]) + self.n_data = float(len(self.data)) + data_sum = self.data.sum() + self.alpha_n = self.alpha0 + data_sum # posterior alpha + self.beta_n = ( + self.beta0 - data_sum + torch.tensor(self.n_data) + ) # posterior beta + self.log_alpha_n = torch.log(self.alpha_n) + self.log_beta_n = torch.log(self.beta_n) + + def test_elbo_reparameterized(self): + self.do_elbo_test(True, 3000, 0.92, 0.0007) + + def test_elbo_nonreparameterized(self): + self.do_elbo_test(False, 3000, 0.95, 0.0007) + + def do_elbo_test(self, reparameterized, n_steps, beta1, lr): + logger.info( + " - - - - - DO BETA-BERNOULLI ELBO TEST [repa = %s] - - - - - " + % reparameterized + ) + pyro.clear_param_store() + Beta = dist.Beta if reparameterized else fakes.NonreparameterizedBeta + + def model(): + p_latent = pyro.sample("p_latent", Beta(self.alpha0, self.beta0)) + with pyro.plate("data", len(self.data)): + pyro.sample("obs", dist.Bernoulli(p_latent), obs=self.data) + return p_latent + + def guide(): + alpha_q_log = pyro.param("alpha_q_log", self.log_alpha_n + 0.17) + beta_q_log = pyro.param("beta_q_log", self.log_beta_n - 0.143) + alpha_q, beta_q = torch.exp(alpha_q_log), torch.exp(beta_q_log) + p_latent = pyro.sample( + "p_latent", + Beta(alpha_q, beta_q), + infer=dict(baseline=dict(use_decaying_avg_baseline=True)), + ) + with pyro.plate("data", len(self.data)): + pass + return p_latent + + adam = optim.Adam({"lr": lr, "betas": (beta1, 0.999)}) + svi = SVI(model, guide, adam, loss=TraceGraph_ELBO()) + + for k in range(n_steps): + svi.step() + alpha_error = param_abs_error("alpha_q_log", self.log_alpha_n) + beta_error = param_abs_error("beta_q_log", self.log_beta_n) + if k % 500 == 0: + logger.debug( + "alpha_error, beta_error: %.4f, %.4f" % (alpha_error, beta_error) + ) + + assert_equal(0.0, alpha_error, prec=0.03) + assert_equal(0.0, beta_error, prec=0.04) + + +class ExponentialGammaTests(TestCase): + def setUp(self): + # exponential-gamma model + # gamma prior hyperparameter + self.alpha0 = torch.tensor(1.0) + # gamma prior hyperparameter + self.beta0 = torch.tensor(1.0) + self.n_data = 2 + self.data = torch.tensor([3.0, 2.0]) # two observations + self.alpha_n = self.alpha0 + self.n_data # posterior alpha + self.beta_n = self.beta0 + self.data.sum() # posterior beta + self.log_alpha_n = torch.log(self.alpha_n) + self.log_beta_n = torch.log(self.beta_n) + + def test_elbo_reparameterized(self): + self.do_elbo_test(True, 8000, 0.90, 0.0007) + + def test_elbo_nonreparameterized(self): + self.do_elbo_test(False, 8000, 0.95, 0.0007) + + def do_elbo_test(self, reparameterized, n_steps, beta1, lr): + logger.info( + " - - - - - DO EXPONENTIAL-GAMMA ELBO TEST [repa = %s] - - - - - " + % reparameterized + ) + pyro.clear_param_store() + Gamma = dist.Gamma if reparameterized else fakes.NonreparameterizedGamma + + def model(): + lambda_latent = pyro.sample("lambda_latent", Gamma(self.alpha0, self.beta0)) + with pyro.plate("data", len(self.data)): + pyro.sample("obs", dist.Exponential(lambda_latent), obs=self.data) + return lambda_latent + + def guide(): + alpha_q_log = pyro.param("alpha_q_log", self.log_alpha_n + 0.17) + beta_q_log = pyro.param("beta_q_log", self.log_beta_n - 0.143) + alpha_q, beta_q = torch.exp(alpha_q_log), torch.exp(beta_q_log) + pyro.sample( + "lambda_latent", + Gamma(alpha_q, beta_q), + infer=dict(baseline=dict(use_decaying_avg_baseline=True)), + ) + with pyro.plate("data", len(self.data)): + pass + + adam = optim.Adam({"lr": lr, "betas": (beta1, 0.999)}) + svi = SVI(model, guide, adam, loss=TraceGraph_ELBO()) + + for k in range(n_steps): + svi.step() + alpha_error = param_abs_error("alpha_q_log", self.log_alpha_n) + beta_error = param_abs_error("beta_q_log", self.log_beta_n) + if k % 500 == 0: + logger.debug( + "alpha_error, beta_error: %.4f, %.4f" % (alpha_error, beta_error) + ) + + assert_equal(0.0, alpha_error, prec=0.04) + assert_equal(0.0, beta_error, prec=0.04) + + +@pytest.mark.init(rng_seed=0) +@pytest.mark.stage("integration", "integration_batch_1") +class RaoBlackwellizationTests(TestCase): + def setUp(self): + # normal-normal; known covariance + self.lam0 = torch.tensor([0.1, 0.1]) # precision of prior + self.loc0 = torch.tensor([0.0, 0.5]) # prior mean + # known precision of observation noise + self.lam = torch.tensor([6.0, 4.0]) + self.n_outer = 3 + self.n_inner = 3 + self.n_data = torch.tensor(float(self.n_outer * self.n_inner)) + self.data = [] + self.sum_data = torch.zeros(2) + for _out in range(self.n_outer): + data_in = [] + for _in in range(self.n_inner): + data_in.append( + torch.tensor([-0.1, 0.3]) + + torch.empty(torch.Size((2,))).normal_() / self.lam.sqrt() + ) + self.sum_data += data_in[-1] + self.data.append(data_in) + self.analytic_lam_n = self.lam0 + self.n_data.expand_as(self.lam) * self.lam + self.analytic_log_sig_n = -0.5 * torch.log(self.analytic_lam_n) + self.analytic_loc_n = self.sum_data * ( + self.lam / self.analytic_lam_n + ) + self.loc0 * (self.lam0 / self.analytic_lam_n) + + # this tests rao-blackwellization in elbo for nested sequential plates + def test_nested_iplate_in_elbo(self, n_steps=4000): + pyro.clear_param_store() + + def model(): + loc_latent = pyro.sample( + "loc_latent", + fakes.NonreparameterizedNormal( + self.loc0, torch.pow(self.lam0, -0.5) + ).to_event(1), + ) + for i in pyro.plate("outer", self.n_outer): + for j in pyro.plate("inner_%d" % i, self.n_inner): + pyro.sample( + "obs_%d_%d" % (i, j), + dist.Normal(loc_latent, torch.pow(self.lam, -0.5)).to_event(1), + obs=self.data[i][j], + ) + + def guide(): + loc_q = pyro.param("loc_q", self.analytic_loc_n.expand(2) + 0.234) + log_sig_q = pyro.param( + "log_sig_q", self.analytic_log_sig_n.expand(2) - 0.27 + ) + sig_q = torch.exp(log_sig_q) + pyro.sample( + "loc_latent", + fakes.NonreparameterizedNormal(loc_q, sig_q).to_event(1), + infer=dict(baseline=dict(use_decaying_avg_baseline=True)), + ) + + for i in pyro.plate("outer", self.n_outer): + for j in pyro.plate("inner_%d" % i, self.n_inner): + pass + + guide_trace = pyro.poutine.trace(guide, graph_type="dense").get_trace() + model_trace = pyro.poutine.trace( + pyro.poutine.replay(model, trace=guide_trace), graph_type="dense" + ).get_trace() + assert len(list(model_trace.edges)) == 9 + assert len(model_trace.nodes) == 16 + assert len(list(guide_trace.edges)) == 0 + assert len(guide_trace.nodes) == 9 + + adam = optim.Adam({"lr": 0.0008, "betas": (0.96, 0.999)}) + svi = SVI(model, guide, adam, loss=TraceGraph_ELBO()) + + for k in range(n_steps): + svi.step() + loc_error = param_mse("loc_q", self.analytic_loc_n) + log_sig_error = param_mse("log_sig_q", self.analytic_log_sig_n) + if k % 500 == 0: + logger.debug( + "loc error, log(scale) error: %.4f, %.4f" + % (loc_error, log_sig_error) + ) + + assert_equal(0.0, loc_error, prec=0.04) + assert_equal(0.0, log_sig_error, prec=0.04) + + # this tests rao-blackwellization and baselines for plate + # inside of a sequential plate with superfluous random torch.tensors to complexify the + # graph structure and introduce additional baselines + def test_plate_in_elbo_with_superfluous_rvs(self): + self._test_plate_in_elbo( + n_superfluous_top=1, n_superfluous_bottom=1, n_steps=2000, lr=0.0113 + ) + + def _test_plate_in_elbo( + self, n_superfluous_top, n_superfluous_bottom, n_steps, lr=0.0012 + ): + pyro.clear_param_store() + self.data_tensor = torch.zeros(9, 2) + for _out in range(self.n_outer): + for _in in range(self.n_inner): + self.data_tensor[3 * _out + _in, :] = self.data[_out][_in] + self.data_as_list = [ + self.data_tensor[0:4, :], + self.data_tensor[4:7, :], + self.data_tensor[7:9, :], + ] + + def model(): + loc_latent = pyro.sample( + "loc_latent", + fakes.NonreparameterizedNormal( + self.loc0, torch.pow(self.lam0, -0.5) + ).to_event(1), + ) + + for i in pyro.plate("outer", 3): + x_i = self.data_as_list[i] + with pyro.plate("inner_%d" % i, x_i.size(0)): + for k in range(n_superfluous_top): + z_i_k = pyro.sample( + "z_%d_%d" % (i, k), + fakes.NonreparameterizedNormal(0, 1).expand_by([4 - i]), + ) + assert z_i_k.shape == (4 - i,) + obs_i = pyro.sample( + "obs_%d" % i, + dist.Normal(loc_latent, torch.pow(self.lam, -0.5)).to_event(1), + obs=x_i, + ) + assert obs_i.shape == (4 - i, 2) + for k in range( + n_superfluous_top, n_superfluous_top + n_superfluous_bottom + ): + z_i_k = pyro.sample( + "z_%d_%d" % (i, k), + fakes.NonreparameterizedNormal(0, 1).expand_by([4 - i]), + ) + assert z_i_k.shape == (4 - i,) + + pt_loc_baseline = torch.nn.Linear(1, 1) + pt_superfluous_baselines = [] + for k in range(n_superfluous_top + n_superfluous_bottom): + pt_superfluous_baselines.extend( + [torch.nn.Linear(2, 4), torch.nn.Linear(2, 3), torch.nn.Linear(2, 2)] + ) + + def guide(): + loc_q = pyro.param("loc_q", self.analytic_loc_n.expand(2) + 0.094) + log_sig_q = pyro.param( + "log_sig_q", self.analytic_log_sig_n.expand(2) - 0.07 + ) + sig_q = torch.exp(log_sig_q) + trivial_baseline = pyro.module("loc_baseline", pt_loc_baseline) + baseline_value = trivial_baseline(torch.ones(1)).squeeze() + loc_latent = pyro.sample( + "loc_latent", + fakes.NonreparameterizedNormal(loc_q, sig_q).to_event(1), + infer=dict(baseline=dict(baseline_value=baseline_value)), + ) + + for i in pyro.plate("outer", 3): + with pyro.plate("inner_%d" % i, 4 - i): + for k in range(n_superfluous_top + n_superfluous_bottom): + z_baseline = pyro.module( + "z_baseline_%d_%d" % (i, k), + pt_superfluous_baselines[3 * k + i], + ) + baseline_value = z_baseline(loc_latent.detach()) + mean_i = pyro.param( + "mean_%d_%d" % (i, k), 0.5 * torch.ones(4 - i) + ) + z_i_k = pyro.sample( + "z_%d_%d" % (i, k), + fakes.NonreparameterizedNormal(mean_i, 1), + infer=dict(baseline=dict(baseline_value=baseline_value)), + ) + assert z_i_k.shape == (4 - i,) + + def per_param_callable(param_name): + if "baseline" in param_name: + return {"lr": 0.010, "betas": (0.95, 0.999)} + else: + return {"lr": lr, "betas": (0.95, 0.999)} + + adam = optim.Adam(per_param_callable) + svi = SVI(model, guide, adam, loss=TraceGraph_ELBO()) + + for step in range(n_steps): + svi.step() + + loc_error = param_abs_error("loc_q", self.analytic_loc_n) + log_sig_error = param_abs_error("log_sig_q", self.analytic_log_sig_n) + + if n_superfluous_top > 0 or n_superfluous_bottom > 0: + superfluous_errors = [] + for k in range(n_superfluous_top + n_superfluous_bottom): + mean_0_error = torch.sum( + torch.pow(pyro.param("mean_0_%d" % k), 2.0) + ) + mean_1_error = torch.sum( + torch.pow(pyro.param("mean_1_%d" % k), 2.0) + ) + mean_2_error = torch.sum( + torch.pow(pyro.param("mean_2_%d" % k), 2.0) + ) + superfluous_error = torch.max( + torch.max(mean_0_error, mean_1_error), mean_2_error + ) + superfluous_errors.append(superfluous_error.detach().cpu().numpy()) + + if step % 500 == 0: + logger.debug( + "loc error, log(scale) error: %.4f, %.4f" + % (loc_error, log_sig_error) + ) + if n_superfluous_top > 0 or n_superfluous_bottom > 0: + logger.debug("superfluous error: %.4f" % np.max(superfluous_errors)) + + assert_equal(0.0, loc_error, prec=0.04) + assert_equal(0.0, log_sig_error, prec=0.05) + if n_superfluous_top > 0 or n_superfluous_bottom > 0: + assert_equal(0.0, np.max(superfluous_errors), prec=0.04) diff --git a/pyro/source/tests/nn/__init__.py b/pyro/source/tests/nn/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/tests/nn/conftest.py b/pyro/source/tests/nn/conftest.py new file mode 100644 index 0000000000000000000000000000000000000000..dfda40984da67edd4765a0769ff7007061904c6e --- /dev/null +++ b/pyro/source/tests/nn/conftest.py @@ -0,0 +1,13 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest + + +def pytest_collection_modifyitems(items): + for item in items: + if item.nodeid.startswith("tests/nn"): + if "stage" not in item.keywords: + item.add_marker(pytest.mark.stage("unit")) + if "init" not in item.keywords: + item.add_marker(pytest.mark.init(rng_seed=123)) diff --git a/pyro/source/tests/nn/test_autoregressive.py b/pyro/source/tests/nn/test_autoregressive.py new file mode 100644 index 0000000000000000000000000000000000000000..573a01593901601fcdce1c77b4deb0932d29a4ef --- /dev/null +++ b/pyro/source/tests/nn/test_autoregressive.py @@ -0,0 +1,139 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from unittest import TestCase + +import pytest +import torch + +from pyro.nn import AutoRegressiveNN, ConditionalAutoRegressiveNN +from pyro.nn.auto_reg_nn import create_mask + +pytestmark = pytest.mark.init(rng_seed=123) + + +class AutoRegressiveNNTests(TestCase): + def setUp(self): + self.epsilon = 1.0e-3 + + def _test_jacobian(self, input_dim, observed_dim, hidden_dim, param_dim): + jacobian = torch.zeros(input_dim, input_dim) + if observed_dim > 0: + arn = ConditionalAutoRegressiveNN( + input_dim, observed_dim, [hidden_dim], param_dims=[param_dim] + ) + else: + arn = AutoRegressiveNN(input_dim, [hidden_dim], param_dims=[param_dim]) + + def nonzero(x): + return torch.sign(torch.abs(x)) + + x = torch.randn(1, input_dim) + y = torch.randn(1, observed_dim) + + for output_index in range(param_dim): + for j in range(input_dim): + for k in range(input_dim): + epsilon_vector = torch.zeros(1, input_dim) + epsilon_vector[0, j] = self.epsilon + if observed_dim > 0: + delta = ( + arn(x + 0.5 * epsilon_vector, y) + - arn(x - 0.5 * epsilon_vector, y) + ) / self.epsilon + else: + delta = ( + arn(x + 0.5 * epsilon_vector) + - arn(x - 0.5 * epsilon_vector) + ) / self.epsilon + jacobian[j, k] = float(delta[0, output_index, k]) + + permutation = arn.get_permutation() + permuted_jacobian = jacobian.clone() + for j in range(input_dim): + for k in range(input_dim): + permuted_jacobian[j, k] = jacobian[permutation[j], permutation[k]] + + lower_sum = torch.sum(torch.tril(nonzero(permuted_jacobian), diagonal=0)) + + assert lower_sum == float(0.0) + + def _test_masks( + self, input_dim, observed_dim, hidden_dims, permutation, output_dim_multiplier + ): + masks, mask_skip = create_mask( + input_dim, observed_dim, hidden_dims, permutation, output_dim_multiplier + ) + + # First test that hidden layer masks are adequately connected + # Tracing backwards, works out what inputs each output is connected to + # It's a dictionary of sets indexed by a tuple (input_dim, param_dim) + permutation = list(permutation.numpy()) + + # Loop over variables + for idx in range(input_dim): + # Calculate correct answer + correct = torch.cat( + ( + torch.arange(observed_dim, dtype=torch.long), + torch.tensor( + sorted(permutation[0 : permutation.index(idx)]), + dtype=torch.long, + ) + + observed_dim, + ) + ) + + # Loop over parameters for each variable + for jdx in range(output_dim_multiplier): + prev_connections = set() + # Do output-to-penultimate hidden layer mask + for kdx in range(masks[-1].size(1)): + if masks[-1][idx + jdx * input_dim, kdx]: + prev_connections.add(kdx) + + # Do hidden-to-hidden, and hidden-to-input layer masks + for m in reversed(masks[:-1]): + this_connections = set() + for kdx in prev_connections: + for ldx in range(m.size(1)): + if m[kdx, ldx]: + this_connections.add(ldx) + prev_connections = this_connections + + assert ( + torch.tensor(list(sorted(prev_connections)), dtype=torch.long) + == correct + ).all() + + # Test the skip-connections mask + skip_connections = set() + for kdx in range(mask_skip.size(1)): + if mask_skip[idx + jdx * input_dim, kdx]: + skip_connections.add(kdx) + assert ( + torch.tensor(list(sorted(skip_connections)), dtype=torch.long) + == correct + ).all() + + def test_jacobians(self): + for observed_dim in [0, 5]: + for input_dim in [2, 3, 5, 7, 9, 11]: + self._test_jacobian(input_dim, observed_dim, 3 * input_dim + 1, 2) + + def test_masks(self): + for input_dim in [1, 3, 5]: + for observed_dim in [0, 3]: + for num_layers in [1, 3]: + for output_dim_multiplier in [1, 2, 3]: + # NOTE: the hidden dimension must be greater than the input_dim for the + # masks to be well-defined! + hidden_dim = input_dim * 5 + permutation = torch.randperm(input_dim, device="cpu") + self._test_masks( + input_dim, + observed_dim, + [hidden_dim] * num_layers, + permutation, + output_dim_multiplier, + ) diff --git a/pyro/source/tests/nn/test_module.py b/pyro/source/tests/nn/test_module.py new file mode 100644 index 0000000000000000000000000000000000000000..64520033d37211fff6ab23488c7041750c1eb570 --- /dev/null +++ b/pyro/source/tests/nn/test_module.py @@ -0,0 +1,1086 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import io +import math +import warnings +from typing import Callable, Iterable + +import pytest +import torch +from torch import nn +from torch.distributions import constraints, transform_to + +import pyro +import pyro.distributions as dist +from pyro import poutine +from pyro.infer import SVI, Trace_ELBO +from pyro.infer.autoguide.guides import AutoDiagonalNormal +from pyro.nn.module import PyroModule, PyroParam, PyroSample, clear, to_pyro_module_ +from pyro.optim import Adam +from tests.common import assert_equal, xfail_param + + +def test_svi_smoke(): + class Model(PyroModule): + def __init__(self): + super().__init__() + self.loc = nn.Parameter(torch.zeros(2)) + self.scale = PyroParam(torch.ones(2), constraint=constraints.positive) + self.z = PyroSample( + lambda self: dist.Normal(self.loc, self.scale).to_event(1) + ) + + def forward(self, data): + loc, log_scale = self.z.unbind(-1) + with pyro.plate("data"): + pyro.sample("obs", dist.Cauchy(loc, log_scale.exp()), obs=data) + + class Guide(PyroModule): + def __init__(self): + super().__init__() + self.loc = nn.Parameter(torch.zeros(2)) + self.scale = PyroParam(torch.ones(2), constraint=constraints.positive) + self.z = PyroSample( + lambda self: dist.Normal(self.loc, self.scale).to_event(1) + ) + + def forward(self, *args, **kwargs): + return self.z + + data = torch.randn(5) + model = Model() + trace = poutine.trace(model).get_trace(data) + assert "loc" in trace.nodes.keys() + assert trace.nodes["loc"]["type"] == "param" + assert "scale" in trace.nodes + assert trace.nodes["scale"]["type"] == "param" + + guide = Guide() + trace = poutine.trace(guide).get_trace(data) + assert "loc" in trace.nodes.keys() + assert trace.nodes["loc"]["type"] == "param" + assert "scale" in trace.nodes + assert trace.nodes["scale"]["type"] == "param" + + optim = Adam({"lr": 0.01}) + svi = SVI(model, guide, optim, Trace_ELBO()) + for step in range(3): + svi.step(data) + + +@pytest.mark.parametrize("local_params", [True, False]) +@pytest.mark.parametrize("num_particles", [1, 2]) +@pytest.mark.parametrize("vectorize_particles", [True, False]) +@pytest.mark.parametrize("Autoguide", [pyro.infer.autoguide.AutoNormal]) +def test_svi_elbomodule_interface( + local_params, num_particles, vectorize_particles, Autoguide +): + class Model(PyroModule): + def __init__(self): + super().__init__() + self.loc = nn.Parameter(torch.zeros(2)) + self.scale = PyroParam(torch.ones(2), constraint=constraints.positive) + self.z = PyroSample( + lambda self: dist.Normal(self.loc, self.scale).to_event(1) + ) + + def forward(self, data): + loc, log_scale = self.z.unbind(-1) + with pyro.plate("data"): + pyro.sample("obs", dist.Cauchy(loc, log_scale.exp()), obs=data) + + with pyro.settings.context(module_local_params=local_params): + data = torch.randn(5) + model = Model() + model(data) # initialize + + guide = Autoguide(model) + guide(data) # initialize + + elbo = Trace_ELBO( + vectorize_particles=vectorize_particles, num_particles=num_particles + ) + elbo = elbo(model, guide) + assert isinstance(elbo, torch.nn.Module) + assert set( + k[: -len("_unconstrained")] if k.endswith("_unconstrained") else k + for k, v in elbo.named_parameters() + ) == set("model." + k for k, v in model.named_pyro_params()) | set( + "guide." + k for k, v in guide.named_pyro_params() + ) + + adam = torch.optim.Adam(elbo.parameters(), lr=0.0001) + for _ in range(3): + adam.zero_grad() + loss = elbo(data) + loss.backward() + adam.step() + + guide2 = Autoguide(model) + guide2(data) # initialize + if local_params: + assert set(pyro.get_param_store().keys()) == set() + for (name, p), (name2, p2) in zip( + guide.named_parameters(), guide2.named_parameters() + ): + assert name == name2 + assert not torch.allclose(p, p2) + else: + assert set(pyro.get_param_store().keys()) != set() + for (name, p), (name2, p2) in zip( + guide.named_parameters(), guide2.named_parameters() + ): + assert name == name2 + assert torch.allclose(p, p2) + + +@pytest.mark.parametrize("local_params", [True, False]) +def test_local_param_global_behavior_fails(local_params): + class Model(PyroModule): + def __init__(self): + super().__init__() + self.global_nn_param = nn.Parameter(torch.zeros(2)) + + def forward(self): + global_param = pyro.param("_global_param", lambda: torch.randn(2)) + global_nn_param = pyro.param("global_nn_param", self.global_nn_param) + return global_param, global_nn_param + + with pyro.settings.context(module_local_params=local_params): + model = Model() + if local_params: + assert pyro.settings.get("module_local_params") + with pytest.raises(NotImplementedError): + model() + else: + assert not pyro.settings.get("module_local_params") + model() + + +@pytest.mark.parametrize("local_params", [True, False]) +def test_names(local_params): + class Model(PyroModule): + def __init__(self): + super().__init__() + self.x = nn.Parameter(torch.tensor(0.0)) + self.y = PyroParam(torch.tensor(1.0), constraint=constraints.positive) + self.m = nn.Module() + self.m.u = nn.Parameter(torch.tensor(2.0)) + self.p = PyroModule() + self.p.v = nn.Parameter(torch.tensor(3.0)) + self.p.w = PyroParam(torch.tensor(4.0), constraint=constraints.positive) + + def forward(self): + # trigger .__getattr__() + self.x + self.y + self.m + self.p.v + self.p.w + + with pyro.settings.context(module_local_params=local_params): + model = Model() + + # Check named_parameters. + expected = { + "x", + "y_unconstrained", + "m.u", + "p.v", + "p.w_unconstrained", + } + actual = set(name for name, _ in model.named_parameters()) + assert actual == expected + + # Check pyro.param names. + expected = {"x", "y", "m$$$u", "p.v", "p.w"} + with poutine.trace(param_only=True) as param_capture: + model() + actual = { + name + for name, site in param_capture.trace.nodes.items() + if site["type"] == "param" + } + assert actual == expected + if local_params: + assert set(pyro.get_param_store().keys()) == set() + else: + assert set(pyro.get_param_store().keys()) == expected + + # Check pyro_parameters method + expected = {"x", "y", "m.u", "p.v", "p.w"} + actual = set(k for k, v in model.named_pyro_params()) + assert actual == expected + + +def test_delete(): + m = PyroModule() + m.a = PyroParam(torch.tensor(1.0)) + del m.a + m.a = PyroParam(torch.tensor(0.1)) + assert_equal(m.a.detach(), torch.tensor(0.1)) + + +def test_nested(): + class Child(PyroModule): + def __init__(self, a): + super().__init__() + self.a = PyroParam(a, constraints.positive) + + class Family(PyroModule): + def __init__(self): + super().__init__() + self.child1 = Child(torch.tensor(1.0)) + self.child2 = Child(torch.tensor(2.0)) + + f = Family() + assert_equal(f.child1.a.detach(), torch.tensor(1.0)) + assert_equal(f.child2.a.detach(), torch.tensor(2.0)) + + +def test_module_cache(): + class Child(PyroModule): + def __init__(self, x): + super().__init__() + self.a = PyroParam(torch.tensor(x)) + + def forward(self): + return self.a + + class Family(PyroModule): + def __init__(self): + super().__init__() + self.c = Child(1.0) + + def forward(self): + return self.c.a + + f = Family() + assert_equal(f().detach(), torch.tensor(1.0)) + f.c = Child(3.0) + assert_equal(f().detach(), torch.tensor(3.0)) + assert_equal(f.c().detach(), torch.tensor(3.0)) + + +def test_submodule_contains_torch_module(): + submodule = PyroModule() + submodule.linear = nn.Linear(1, 1) + module = PyroModule() + module.child = submodule + + +def test_hierarchy_prior_cached(): + def hierarchy_prior(module): + latent = pyro.sample("a", dist.Normal(0, 1)) + return dist.Normal(latent, 1) + + class Model(PyroModule): + def __init__(self): + super().__init__() + self.b = PyroSample(hierarchy_prior) + + def forward(self): + return self.b + self.b + + model = Model() + trace = poutine.trace(model).get_trace() + assert "a" in trace.nodes + + +SHAPE_CONSTRAINT = [ + ((), constraints.real), + ((4,), constraints.real), + ((3, 2), constraints.real), + ((), constraints.positive), + ((4,), constraints.positive), + ((3, 2), constraints.positive), + ((5,), constraints.simplex), + ( + ( + 2, + 5, + ), + constraints.simplex, + ), + ((5, 5), constraints.lower_cholesky), + ((2, 5, 5), constraints.lower_cholesky), + ((10,), constraints.greater_than(-torch.randn(10).exp())), + ((4, 10), constraints.greater_than(-torch.randn(10).exp())), + ((4, 10), constraints.greater_than(-torch.randn(4, 10).exp())), + ((3, 2, 10), constraints.greater_than(-torch.randn(10).exp())), + ((3, 2, 10), constraints.greater_than(-torch.randn(2, 10).exp())), + ((3, 2, 10), constraints.greater_than(-torch.randn(3, 1, 10).exp())), + ((3, 2, 10), constraints.greater_than(-torch.randn(3, 2, 10).exp())), + ((5,), constraints.real_vector), + ( + ( + 2, + 5, + ), + constraints.real_vector, + ), + ((), constraints.unit_interval), + ((4,), constraints.unit_interval), + ((3, 2), constraints.unit_interval), + ((10,), constraints.interval(-torch.randn(10).exp(), torch.randn(10).exp())), + ((4, 10), constraints.interval(-torch.randn(10).exp(), torch.randn(10).exp())), + ((3, 2, 10), constraints.interval(-torch.randn(10).exp(), torch.randn(10).exp())), +] + + +@pytest.mark.parametrize("shape,constraint_", SHAPE_CONSTRAINT) +def test_constraints(shape, constraint_): + module = PyroModule() + module.x = PyroParam(torch.full(shape, 1e-4), constraint_) + + assert isinstance(module.x, torch.Tensor) + assert isinstance(module.x_unconstrained, nn.Parameter) + assert module.x.shape == shape + assert constraint_.check(module.x).all() + + module.x = torch.randn(shape).exp() * 1e-6 + assert isinstance(module.x_unconstrained, nn.Parameter) + assert isinstance(module.x, torch.Tensor) + assert module.x.shape == shape + assert constraint_.check(module.x).all() + + assert isinstance(module.x_unconstrained, torch.Tensor) + y = module.x_unconstrained.data.normal_() + assert_equal(module.x.data, transform_to(constraint_)(y)) + assert constraint_.check(module.x).all() + + del module.x + assert "x" not in module._pyro_params + assert not hasattr(module, "x") + assert not hasattr(module, "x_unconstrained") + + +@pytest.mark.parametrize("local_params", [True, False]) +def test_clear(local_params): + class Model(PyroModule): + def __init__(self): + super().__init__() + self.x = nn.Parameter(torch.tensor(0.0)) + self.m = torch.nn.Linear(2, 3) + self.m.weight.data.fill_(1.0) + self.m.bias.data.fill_(2.0) + self.p = PyroModule() + self.p.x = nn.Parameter(torch.tensor(3.0)) + + def forward(self): + return [x.clone() for x in [self.x, self.m.weight, self.m.bias, self.p.x]] + + with pyro.settings.context(module_local_params=local_params): + m = Model() + state0 = m() + + # mutate + for _, x in m.named_pyro_params(): + if hasattr(x, "unconstrained"): + x = x.unconstrained() + x.data += torch.randn(x.shape) + state1 = m() + for x, y in zip(state0, state1): + assert not (x == y).all() + + if local_params: + assert set(pyro.get_param_store().keys()) == set() + else: + assert set(pyro.get_param_store().keys()) == { + "x", + "m$$$weight", + "m$$$bias", + "p.x", + } + clear(m) + del m + assert set(pyro.get_param_store().keys()) == set() + + m = Model() + state2 = m() + if local_params: + assert set(pyro.get_param_store().keys()) == set() + else: + assert set(pyro.get_param_store().keys()) == { + "x", + "m$$$weight", + "m$$$bias", + "p.x", + } + for actual, expected in zip(state2, state0): + assert_equal(actual, expected) + + +def test_sample(): + class Model(nn.Linear, PyroModule): + def __init__(self, in_features, out_features): + super().__init__(in_features, out_features) + self.weight = PyroSample( + lambda self: dist.Normal(0, 1) + .expand([self.out_features, self.in_features]) + .to_event(2) + ) + + class Guide(nn.Linear, PyroModule): + def __init__(self, in_features, out_features): + super().__init__(in_features, out_features) + self.loc = PyroParam(torch.zeros_like(self.weight)) + self.scale = PyroParam( + torch.ones_like(self.weight), constraint=constraints.positive + ) + self.weight = PyroSample( + lambda self: dist.Normal(self.loc, self.scale).to_event(2) + ) + + data = torch.randn(8) + model = Model(8, 2) + guide = Guide(8, 2) + + optim = Adam({"lr": 0.01}) + svi = SVI(model, guide, optim, Trace_ELBO()) + for step in range(3): + svi.step(data) + + +def test_cache(): + class MyModule(PyroModule): + def forward(self): + return [self.gather(), self.gather()] + + def gather(self): + return { + "a": self.a, + "b": self.b, + "c": self.c, + "p.d": self.p.d, + "p.e": self.p.e, + "p.f": self.p.f, + } + + module = MyModule() + module.a = nn.Parameter(torch.tensor(0.0)) + module.b = PyroParam(torch.tensor(1.0), constraint=constraints.positive) + module.c = PyroSample(dist.Normal(0, 1)) + module.p = PyroModule() + module.p.d = nn.Parameter(torch.tensor(3.0)) + module.p.e = PyroParam(torch.tensor(4.0), constraint=constraints.positive) + module.p.f = PyroSample(dist.Normal(0, 1)) + + assert module._pyro_context is module.p._pyro_context + + # Check that results are cached with an invocation of .__call__(). + result1 = module() + actual, expected = result1 + for key in ["a", "c", "p.d", "p.f"]: + assert actual[key] is expected[key], key + + # Check that results are not cached across invocations of .__call__(). + result2 = module() + for key in ["b", "c", "p.e", "p.f"]: + assert result1[0] is not result2[0], key + + +class AttributeModel(PyroModule): + def __init__(self, size): + super().__init__() + self.x = PyroParam(torch.zeros(size)) + self.y = PyroParam(lambda: torch.randn(size)) + self.z = PyroParam( + torch.ones(size), constraint=constraints.positive, event_dim=1 + ) + self.s = PyroSample(dist.Normal(0, 1)) + self.t = PyroSample(lambda self: dist.Normal(self.s, self.z)) + self.u = PyroSample(lambda self: self.t**2) + + def forward(self): + return self.x + self.y + self.u + + +class DecoratorModel(PyroModule): + def __init__(self, size): + super().__init__() + self.size = size + + @PyroParam + def x(self): + return torch.zeros(self.size) + + @PyroParam + def y(self): + return torch.randn(self.size) + + @PyroParam(constraint=constraints.positive, event_dim=1) + def z(self): + return torch.ones(self.size) + + @PyroSample + def s(self): + return dist.Normal(0, 1) + + @PyroSample + def t(self): + return dist.Normal(self.s, self.z).to_event(1) + + @PyroSample + def u(self): + return self.t**2 + + def forward(self): + return self.x + self.y + self.u + + +@pytest.mark.parametrize("Model", [AttributeModel, DecoratorModel]) +@pytest.mark.parametrize("size", [1, 2]) +def test_decorator(Model, size): + model = Model(size) + for i in range(2): + trace = poutine.trace(model).get_trace() + assert set(trace.nodes.keys()) == { + "_INPUT", + "x", + "y", + "z", + "s", + "t", + "u", + "_RETURN", + } + + assert trace.nodes["x"]["type"] == "param" + assert trace.nodes["y"]["type"] == "param" + assert trace.nodes["z"]["type"] == "param" + assert trace.nodes["s"]["type"] == "sample" + assert trace.nodes["t"]["type"] == "sample" + assert trace.nodes["u"]["type"] == "sample" + + assert trace.nodes["x"]["value"].shape == (size,) + assert trace.nodes["y"]["value"].shape == (size,) + assert trace.nodes["z"]["value"].shape == (size,) + assert trace.nodes["s"]["value"].shape == () + assert trace.nodes["t"]["value"].shape == (size,) + assert trace.nodes["u"]["value"].shape == (size,) + + assert trace.nodes["u"]["infer"] == {"_deterministic": True} + + +def test_mixin_factory(): + assert PyroModule[nn.Module] is PyroModule + assert PyroModule[PyroModule] is PyroModule + + module = PyroModule[nn.Sequential]( + PyroModule[nn.Linear](28 * 28, 200), + PyroModule[nn.Sigmoid](), + PyroModule[nn.Linear](200, 200), + PyroModule[nn.Sigmoid](), + PyroModule[nn.Linear](200, 10), + ) + + assert isinstance(module, nn.Sequential) + assert isinstance(module, PyroModule) + assert type(module).__name__ == "PyroSequential" + assert PyroModule[type(module)] is type(module) + + assert isinstance(module[0], nn.Linear) + assert isinstance(module[0], PyroModule) + assert type(module[0]).__name__ == "PyroLinear" + assert type(module[2]) is type(module[0]) # noqa: E721 + assert module[0]._pyro_name == "0" + assert module[1]._pyro_name == "1" + + # Ensure new types are serializable. + data = torch.randn(28 * 28) + expected = module(data) + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", category=UserWarning) + f = io.BytesIO() + torch.save(module, f) + del module + pyro.clear_param_store() + f.seek(0) + module = torch.load(f, weights_only=False) + assert type(module).__name__ == "PyroSequential" + actual = module(data) + assert_equal(actual, expected) + + +def test_to_pyro_module_(): + pyro.set_rng_seed(123) + actual = nn.Sequential( + nn.Linear(28 * 28, 200), + nn.Sigmoid(), + nn.Linear(200, 200), + nn.Sigmoid(), + nn.Linear(200, 10), + ) + to_pyro_module_(actual) + pyro.clear_param_store() + + pyro.set_rng_seed(123) + expected = PyroModule[nn.Sequential]( + PyroModule[nn.Linear](28 * 28, 200), + PyroModule[nn.Sigmoid](), + PyroModule[nn.Linear](200, 200), + PyroModule[nn.Sigmoid](), + PyroModule[nn.Linear](200, 10), + ) + pyro.clear_param_store() + + def assert_identical(a, e): + assert type(a) is type(e) + if isinstance(a, dict): + assert set(a) == set(e) + for key in a: + assert_identical(a[key], e[key]) + elif isinstance(a, nn.Module): + assert_identical(a.__dict__, e.__dict__) + elif isinstance(a, (str, int, float, torch.Tensor)): + assert_equal(a, e) + + assert_identical(actual, expected) + + # check output + data = torch.randn(28 * 28) + actual_out = actual(data) + pyro.clear_param_store() + expected_out = expected(data) + assert_equal(actual_out, expected_out) + + # check randomization + def randomize(model): + for m in model.modules(): + for name, value in list(m.named_parameters(recurse=False)): + setattr( + m, + name, + PyroSample( + prior=dist.Normal(0, 1) + .expand(value.shape) + .to_event(value.dim()) + ), + ) + + randomize(actual) + randomize(expected) + assert_identical(actual, expected) + + +@pytest.mark.parametrize("local_params", [True, False]) +def test_torch_serialize_attributes(local_params): + with pyro.settings.context(module_local_params=local_params): + module = PyroModule() + module.x = PyroParam(torch.tensor(1.234), constraints.positive) + module.y = nn.Parameter(torch.randn(3)) + assert isinstance(module.x, torch.Tensor) + + # Work around https://github.com/pytorch/pytorch/issues/27972 + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", category=UserWarning) + f = io.BytesIO() + torch.save(module, f) + pyro.clear_param_store() + f.seek(0) + actual = torch.load(f, weights_only=False) + + assert_equal(actual.x, module.x) + actual_names = {name for name, _ in actual.named_parameters()} + expected_names = {name for name, _ in module.named_parameters()} + assert actual_names == expected_names + + +@pytest.mark.parametrize("local_params", [True, False]) +def test_torch_serialize_decorators(local_params): + with pyro.settings.context(module_local_params=local_params): + module = DecoratorModel(3) + module() # initialize + + module2 = DecoratorModel(3) + module2() # initialize + + # Work around https://github.com/pytorch/pytorch/issues/27972 + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", category=UserWarning) + f = io.BytesIO() + torch.save(module, f) + pyro.clear_param_store() + f.seek(0) + actual = torch.load(f, weights_only=False) + + assert_equal(actual.x, module.x) + assert_equal(actual.y, module.y) + assert_equal(actual.z, module.z) + assert actual.s.shape == module.s.shape + assert actual.t.shape == module.t.shape + actual_names = {name for name, _ in actual.named_parameters()} + expected_names = {name for name, _ in module.named_parameters()} + assert actual_names == expected_names + + actual() + if local_params: + assert len(set(pyro.get_param_store().keys())) == 0 + assert torch.all(module.y != module2.y) + assert torch.all(actual.y != module2.y) + else: + assert len(set(pyro.get_param_store().keys())) > 0 + assert_equal(module.y, module2.y) + assert_equal(actual.y, module2.y) + + +def test_pyro_serialize(): + class MyModule(PyroModule): + def __init__(self): + super().__init__() + self.x = PyroParam(torch.tensor(1.234), constraints.positive) + self.y = nn.Parameter(torch.randn(3)) + + def forward(self): + return self.x, self.y + + module = MyModule() + assert len(pyro.get_param_store()) == 0 + + assert isinstance(module.x, torch.Tensor) + assert len(pyro.get_param_store()) == 0 + + actual = module() # triggers saving in param store + assert_equal(actual[0], module.x) + assert_equal(actual[1], module.y) + assert set(pyro.get_param_store().keys()) == {"x", "y"} + assert_equal(pyro.param("x").detach(), module.x.detach()) + assert_equal(pyro.param("y").detach(), module.y.detach()) + + pyro.get_param_store().save("/tmp/pyro_module.pt") + pyro.clear_param_store() + assert len(pyro.get_param_store()) == 0 + pyro.get_param_store().load("/tmp/pyro_module.pt") + assert set(pyro.get_param_store().keys()) == {"x", "y"} + actual = MyModule() + actual() + + assert_equal(actual.x, module.x) + actual_names = {name for name, _ in actual.named_parameters()} + expected_names = {name for name, _ in module.named_parameters()} + assert actual_names == expected_names + + +def test_bayesian_gru(): + input_size = 2 + hidden_size = 3 + batch_size = 4 + seq_len = 5 + + # Construct a simple GRU. + gru = nn.GRU(input_size, hidden_size) + input_ = torch.randn(seq_len, batch_size, input_size) + output, _ = gru(input_) + assert output.shape == (seq_len, batch_size, hidden_size) + output2, _ = gru(input_) + assert torch.allclose(output2, output) + + # Make it Bayesian. + to_pyro_module_(gru) + for name, value in list(gru.named_parameters(recurse=False)): + prior = dist.Normal(0, 1).expand(value.shape).to_event(value.dim()) + setattr(gru, name, PyroSample(prior=prior)) + output, _ = gru(input_) + assert output.shape == (seq_len, batch_size, hidden_size) + output2, _ = gru(input_) + assert not torch.allclose(output2, output) + + +@pytest.mark.parametrize( + "use_local_params", + [ + True, + xfail_param( + False, reason="torch.func not compatible with global parameter store" + ), + ], +) +def test_functorch_pyroparam(use_local_params): + class ParamModule(PyroModule): + def __init__(self): + super().__init__() + self.a2 = PyroParam(torch.tensor(0.678), constraints.positive) + + @PyroParam(constraint=constraints.real) + def a1(self): + return torch.tensor(0.456) + + class Model(PyroModule): + def __init__(self): + super().__init__() + self.param_module = ParamModule() + self.b1 = PyroParam(torch.tensor(0.123), constraints.positive) + self.b3 = torch.nn.Parameter(torch.tensor(0.789)) + self.c = torch.nn.Linear(1, 1) + + @PyroParam(constraint=constraints.positive) + def b2(self): + return torch.tensor(1.234) + + def forward(self, x, y): + return ( + (self.param_module.a1 + self.param_module.a2) * x + + self.b1 + + self.b2 + + self.b3 + - self.c(y.unsqueeze(-1)).squeeze(-1) + ) ** 2 + + with pyro.settings.context(module_local_params=use_local_params): + model = Model() + x, y = torch.tensor(1.3), torch.tensor(0.2) + + with pyro.poutine.trace() as tr: + model(x, y) + + params = dict(model.named_parameters()) + + # Check that all parameters appear in the trace for SVI compatibility + assert len(params) == len( + { + name: node + for name, node in tr.trace.nodes.items() + if node["type"] == "param" + } + ) + + grad_model = torch.func.grad( + lambda p, x, y: torch.func.functional_call(model, p, (x, y)) + ) + grad_params_func = grad_model(params, x, y) + + gs = torch.autograd.grad(model(x, y), tuple(params.values())) + grad_params_autograd = dict(zip(params.keys(), gs)) + + assert len(grad_params_autograd) == len(grad_params_func) != 0 + assert ( + set(grad_params_autograd.keys()) + == set(grad_params_func.keys()) + == set(params.keys()) + ) + for k in grad_params_autograd.keys(): + assert not torch.allclose( + grad_params_func[k], torch.zeros_like(grad_params_func[k]) + ), k + assert torch.allclose(grad_params_autograd[k], grad_params_func[k]), k + + +class BNN(PyroModule): + # this is a vanilla Bayesian neural network implementation, nothing new or exiting here + def __init__( + self, + input_size: int, + hidden_layer_sizes: Iterable[int], + output_size: int, + use_new_module_list_type: bool, + ) -> None: + super().__init__() + + layer_sizes = ( + [(input_size, hidden_layer_sizes[0])] + + list(zip(hidden_layer_sizes[:-1], hidden_layer_sizes[1:])) + + [(hidden_layer_sizes[-1], output_size)] + ) + + layers = [ + pyro.nn.module.PyroModule[torch.nn.Linear](in_size, out_size) + for in_size, out_size in layer_sizes + ] + if use_new_module_list_type: + self.layers = pyro.nn.module.PyroModuleList(layers) + else: + self.layers = pyro.nn.module.PyroModule[torch.nn.ModuleList](layers) + + # make the layers Bayesian + for layer_idx, layer in enumerate(self.layers): + layer.weight = pyro.nn.module.PyroSample( + dist.Normal(0.0, 5.0 * math.sqrt(2 / layer_sizes[layer_idx][0])) + .expand( + [ + layer_sizes[layer_idx][1], + layer_sizes[layer_idx][0], + ] + ) + .to_event(2) + ) + layer.bias = pyro.nn.module.PyroSample( + dist.Normal(0.0, 5.0).expand([layer_sizes[layer_idx][1]]).to_event(1) + ) + + self.activation = torch.nn.Tanh() + self.output_size = output_size + + def forward(self, x: torch.Tensor, obs=None) -> torch.Tensor: + mean = self.layers[-1](x) + + if obs is not None: + with pyro.plate("data", x.shape[0]): + pyro.sample( + "obs", dist.Normal(mean, 0.1).to_event(self.output_size), obs=obs + ) + + return mean + + +class SliceIndexingModuleListBNN(BNN): + # I claim that it makes a difference whether slice-indexing is used or whether position-indexing is used + # when sub-pyromodule are wrapped in a PyroModule[torch.nn.ModuleList] + def __init__( + self, + input_size: int, + hidden_layer_sizes: Iterable[int], + output_size: int, + use_new_module_list_type: bool, + ) -> None: + super().__init__( + input_size, hidden_layer_sizes, output_size, use_new_module_list_type + ) + + def forward(self, x: torch.Tensor, obs=None) -> torch.Tensor: + for layer in self.layers[:-1]: + x = layer(x) + x = self.activation(x) + + return super().forward(x, obs=obs) + + +class PositionIndexingModuleListBNN(BNN): + # I claim that it makes a difference whether slice-indexing is used or whether position-indexing is used + # when sub-pyromodule are wrapped in a PyroModule[torch.nn.ModuleList] + def __init__( + self, + input_size: int, + hidden_layer_sizes: Iterable[int], + output_size: int, + use_new_module_list_type: bool, + ) -> None: + super().__init__( + input_size, hidden_layer_sizes, output_size, use_new_module_list_type + ) + + def forward(self, x: torch.Tensor, obs=None) -> torch.Tensor: + for i in range(len(self.layers) - 1): + x = self.layers[i](x) + x = self.activation(x) + + return super().forward(x, obs=obs) + + +class NestedBNN(pyro.nn.module.PyroModule): + # finally, the issue I want to describe occurs after the second "layer of nesting", + # i.e. when a PyroModule[ModuleList] is wrapped in a PyroModule[ModuleList] + def __init__(self, bnns: Iterable[BNN], use_new_module_list_type: bool) -> None: + super().__init__() + if use_new_module_list_type: + self.bnns = pyro.nn.module.PyroModuleList(bnns) + else: + self.bnns = pyro.nn.module.PyroModule[torch.nn.ModuleList](bnns) + + def forward(self, x: torch.Tensor, obs=None) -> torch.Tensor: + mean = sum([bnn(x) for bnn in self.bnns]) / len(self.bnns) + + with pyro.plate("data", x.shape[0]): + pyro.sample("obs", dist.Normal(mean, 0.1).to_event(1), obs=obs) + + return mean + + +def train_bnn(model: BNN, input_size: int) -> None: + pyro.clear_param_store() + + # small numbers for demo purposes + num_points = 20 + num_svi_iterations = 100 + + x = torch.linspace(0, 1, num_points).reshape((-1, input_size)) + y = torch.sin(2 * math.pi * x) + torch.randn(x.size()) * 0.1 + + guide = AutoDiagonalNormal(model) + adam = pyro.optim.Adam({"lr": 0.03}) + svi = SVI(model, guide, adam, loss=Trace_ELBO()) + + for _ in range(num_svi_iterations): + svi.step(x, y) + + +class ModuleListTester: + def setup(self, use_new_module_list_type: bool) -> None: + self.input_size = 1 + self.output_size = 1 + self.hidden_size = 3 + self.num_hidden_layers = 3 + self.use_new_module_list_type = use_new_module_list_type + + def get_position_indexing_modulelist_bnn(self) -> PositionIndexingModuleListBNN: + return PositionIndexingModuleListBNN( + self.input_size, + [self.hidden_size] * self.num_hidden_layers, + self.output_size, + self.use_new_module_list_type, + ) + + def get_slice_indexing_modulelist_bnn(self) -> SliceIndexingModuleListBNN: + return SliceIndexingModuleListBNN( + self.input_size, + [self.hidden_size] * self.num_hidden_layers, + self.output_size, + self.use_new_module_list_type, + ) + + def train_nested_bnn(self, module_getter: Callable[[], BNN]) -> None: + train_bnn( + NestedBNN( + [module_getter() for _ in range(2)], + use_new_module_list_type=self.use_new_module_list_type, + ), + self.input_size, + ) + + +class TestTorchModuleList(ModuleListTester): + def test_with_position_indexing(self) -> None: + self.setup(False) + self.train_nested_bnn(self.get_position_indexing_modulelist_bnn) + + def test_with_slice_indexing(self) -> None: + self.setup(False) + # with pytest.raises(RuntimeError): + # error no longer gets raised + self.train_nested_bnn(self.get_slice_indexing_modulelist_bnn) + + +class TestPyroModuleList(ModuleListTester): + def test_with_position_indexing(self) -> None: + self.setup(True) + self.train_nested_bnn(self.get_position_indexing_modulelist_bnn) + + def test_with_slice_indexing(self) -> None: + self.setup(True) + self.train_nested_bnn(self.get_slice_indexing_modulelist_bnn) + + +def test_module_list() -> None: + assert PyroModule[torch.nn.ModuleList] is pyro.nn.PyroModuleList + + +@pytest.mark.parametrize("use_module_local_params", [True, False]) +def test_render_constrained_param(use_module_local_params): + + class Model(PyroModule): + + @PyroParam(constraint=constraints.positive) + def x(self): + return torch.tensor(1.234) + + @PyroParam(constraint=constraints.real) + def y(self): + return torch.tensor(0.456) + + def forward(self): + return self.x + self.y + + with pyro.settings.context(module_local_params=use_module_local_params): + model = Model() + pyro.render_model(model) diff --git a/pyro/source/tests/ops/__init__.py b/pyro/source/tests/ops/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/tests/ops/conftest.py b/pyro/source/tests/ops/conftest.py new file mode 100644 index 0000000000000000000000000000000000000000..a62c8dff0de94d5f1d09f6f4462ec7fb3199bdcb --- /dev/null +++ b/pyro/source/tests/ops/conftest.py @@ -0,0 +1,13 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest + + +def pytest_collection_modifyitems(items): + for item in items: + if item.nodeid.startswith("tests/ops"): + if "stage" not in item.keywords: + item.add_marker(pytest.mark.stage("unit")) + if "init" not in item.keywords: + item.add_marker(pytest.mark.init(rng_seed=123)) diff --git a/pyro/source/tests/ops/einsum/conftest.py b/pyro/source/tests/ops/einsum/conftest.py new file mode 100644 index 0000000000000000000000000000000000000000..85b4cef1956a91731d08043ad0fe939d78c355b5 --- /dev/null +++ b/pyro/source/tests/ops/einsum/conftest.py @@ -0,0 +1,13 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest + + +def pytest_collection_modifyitems(items): + for item in items: + if item.nodeid.startswith("tests/ops/einsum"): + if "stage" not in item.keywords: + item.add_marker(pytest.mark.stage("unit")) + if "init" not in item.keywords: + item.add_marker(pytest.mark.init(rng_seed=123)) diff --git a/pyro/source/tests/ops/einsum/test_adjoint.py b/pyro/source/tests/ops/einsum/test_adjoint.py new file mode 100644 index 0000000000000000000000000000000000000000..9c71432020d3ed8cd6a55b27b5f15c8c7e1376e7 --- /dev/null +++ b/pyro/source/tests/ops/einsum/test_adjoint.py @@ -0,0 +1,143 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import gc +import itertools + +import pytest +import torch + +from pyro.ops.einsum import contract +from pyro.ops.einsum.adjoint import require_backward +from tests.common import assert_equal + +EQUATIONS = [ + "->", + "w->", + ",w->", + "w,w->", + "w,x->", + "w,wx,x->", + "w,wx,xy,yz->", + "wx,xy,yz,zw->", + "i->i", + "wi->i", + "i,wi->i", + "wi,wi->i", + "wi,xi->i", + "wi,wxi,xi->i", + "wi,wxi,xyi,yzi->i", + "wxi,xyi,yzi,zwi->i", + "ij->ij", + "iwj->ij", + "ij,iwj->ij", + "iwj,iwj->ij", + "iwj,ixj->ij", + "iwj,iwxj,ixj->ij", + "iwj,iwxj,ixyj,iyzj->ij", + "iwxj,ixyj,iyzj,izwj->ij", + "ij->ji", + "iwj->ji", + "ji,iwj->ji", + "iwj,iwj->ji", + "iwj,ixj->ji", + "iwj,iwxj,ixj->ji", + "iwj,iwxj,ixyj,iyzj->ji", + "iwxj,ixyj,iyzj,izwj->ji", +] + + +@pytest.mark.parametrize("equation", EQUATIONS) +@pytest.mark.parametrize("backend", ["map", "sample", "marginal"]) +def test_shape(backend, equation): + backend = "pyro.ops.einsum.torch_{}".format(backend) + inputs, output = equation.split("->") + inputs = inputs.split(",") + symbols = sorted(set(equation) - set(",->")) + sizes = dict(zip(symbols, itertools.count(2))) + input_shapes = [torch.Size(sizes[dim] for dim in dims) for dims in inputs] + operands = [torch.randn(shape) for shape in input_shapes] + for input_, x in zip(inputs, operands): + x._pyro_dims = input_ + + # check forward pass + for x in operands: + require_backward(x) + expected = contract(equation, *operands, backend="pyro.ops.einsum.torch_log") + actual = contract(equation, *operands, backend=backend) + if backend.endswith("map"): + assert actual.dtype == expected.dtype + assert actual.shape == expected.shape + else: + assert_equal(actual, expected) + + # check backward pass + actual._pyro_backward() + for input_, x in zip(inputs, operands): + backward_result = x._pyro_backward_result + if backend.endswith("marginal"): + assert backward_result.shape == x.shape + else: + contract_dims = set(input_) - set(output) + if contract_dims: + assert backward_result.size(0) == len(contract_dims) + assert set(backward_result._pyro_dims[1:]) == set(output) + for sample, dim in zip( + backward_result, backward_result._pyro_sample_dims + ): + assert sample.min() >= 0 + assert sample.max() < sizes[dim] + else: + assert backward_result is None + + +@pytest.mark.parametrize("equation", EQUATIONS) +def test_marginal(equation): + inputs, output = equation.split("->") + inputs = inputs.split(",") + operands = [torch.randn(torch.Size((2,) * len(input_))) for input_ in inputs] + for input_, x in zip(inputs, operands): + x._pyro_dims = input_ + + # check forward pass + for x in operands: + require_backward(x) + actual = contract(equation, *operands, backend="pyro.ops.einsum.torch_marginal") + expected = contract(equation, *operands, backend="pyro.ops.einsum.torch_log") + assert_equal(expected, actual) + + # check backward pass + actual._pyro_backward() + for input_, operand in zip(inputs, operands): + marginal_equation = ",".join(inputs) + "->" + input_ + expected = contract( + marginal_equation, *operands, backend="pyro.ops.einsum.torch_log" + ) + actual = operand._pyro_backward_result + assert_equal(expected, actual) + + +@pytest.mark.filterwarnings("ignore:.*reduce_op`? is deprecated") +def test_require_backward_memory_leak(): + tensors = [o for o in gc.get_objects() if torch.is_tensor(o)] + num_global_tensors = len(tensors) + del tensors + + # Using clone resolves memory leak. + for i in range(10): + x = torch.tensor(0.0) + require_backward(x) + x._pyro_backward.process(x.clone()) + + tensors = [o for o in gc.get_objects() if torch.is_tensor(o)] + assert len(tensors) <= 5 + num_global_tensors + del tensors + + # Using [...] creates memory leak. + for i in range(10): + x = torch.tensor(0.0) + require_backward(x) + x._pyro_backward.process(x[...]) + + tensors = [o for o in gc.get_objects() if torch.is_tensor(o)] + assert len(tensors) >= 15 + num_global_tensors diff --git a/pyro/source/tests/ops/einsum/test_torch_log.py b/pyro/source/tests/ops/einsum/test_torch_log.py new file mode 100644 index 0000000000000000000000000000000000000000..ed23d6eafba5eab073d101597140cfbfc3bc4ef1 --- /dev/null +++ b/pyro/source/tests/ops/einsum/test_torch_log.py @@ -0,0 +1,57 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import itertools + +import pytest +import torch + +from pyro.infer.util import torch_exp +from pyro.ops.einsum import contract +from tests.common import assert_equal + + +@pytest.mark.parametrize("min_size", [1, 2]) +@pytest.mark.parametrize( + "equation", + [ + ",ab->ab", + "ab,,bc->a", + "ab,,bc->b", + "ab,,bc->c", + "ab,,bc->ac", + "ab,,b,bc->ac", + "a,ab->ab", + "ab,b,bc->a", + "ab,b,bc->b", + "ab,b,bc->c", + "ab,b,bc->ac", + "ab,bc->ac", + "ab,bc,cd->", + "ab,bc,cd->a", + "ab,bc,cd->b", + "ab,bc,cd->c", + "ab,bc,cd->d", + "ab,bc,cd->ac", + "ab,bc,cd->ad", + "ab,bc,cd->bc", + "a,a,ab,b,b,b,b->a", + ], +) +@pytest.mark.parametrize("infinite", [False, True], ids=["finite", "infinite"]) +def test_einsum(equation, min_size, infinite): + inputs, output = equation.split("->") + inputs = inputs.split(",") + symbols = sorted(set(equation) - set(",->")) + sizes = dict(zip(symbols, itertools.count(min_size))) + shapes = [torch.Size(tuple(sizes[dim] for dim in dims)) for dims in inputs] + operands = [ + torch.full(shape, -float("inf")) if infinite else torch.randn(shape) + for shape in shapes + ] + + expected = contract( + equation, *(torch_exp(x) for x in operands), backend="torch" + ).log() + actual = contract(equation, *operands, backend="pyro.ops.einsum.torch_log") + assert_equal(actual, expected) diff --git a/pyro/source/tests/ops/gamma_gaussian.py b/pyro/source/tests/ops/gamma_gaussian.py new file mode 100644 index 0000000000000000000000000000000000000000..c202eb4231c76db45d581ce8bd330a3c31f3c06d --- /dev/null +++ b/pyro/source/tests/ops/gamma_gaussian.py @@ -0,0 +1,51 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +import pyro.distributions as dist +from pyro.ops.gamma_gaussian import GammaGaussian +from tests.common import assert_close + + +def random_gamma_gaussian(batch_shape, dim, rank=None): + """ + Generate a random Gaussian for testing. + """ + if rank is None: + rank = dim + dim + log_normalizer = torch.randn(batch_shape) + loc = torch.randn(batch_shape + (dim,)) + samples = torch.randn(batch_shape + (dim, rank)) + precision = torch.matmul(samples, samples.transpose(-2, -1)) + if dim > 0: + info_vec = precision.matmul(loc.unsqueeze(-1)).squeeze(-1) + else: + info_vec = loc + alpha = torch.randn(batch_shape).exp() + 0.5 * dim - 1 + beta = torch.randn(batch_shape).exp() + 0.5 * (info_vec * loc).sum(-1) + result = GammaGaussian(log_normalizer, info_vec, precision, alpha, beta) + assert result.dim() == dim + assert result.batch_shape == batch_shape + return result + + +def random_gamma(batch_shape): + """ + Generate a random Gamma distribution for testing. + """ + concentration = torch.randn(batch_shape).exp() + rate = torch.randn(batch_shape).exp() + return dist.Gamma(concentration, rate) + + +def assert_close_gamma_gaussian(actual, expected): + assert isinstance(actual, GammaGaussian) + assert isinstance(expected, GammaGaussian) + assert actual.dim() == expected.dim() + assert actual.batch_shape == expected.batch_shape + assert_close(actual.log_normalizer, expected.log_normalizer) + assert_close(actual.info_vec, expected.info_vec) + assert_close(actual.precision, expected.precision) + assert_close(actual.alpha, expected.alpha) + assert_close(actual.beta, expected.beta) diff --git a/pyro/source/tests/ops/gaussian.py b/pyro/source/tests/ops/gaussian.py new file mode 100644 index 0000000000000000000000000000000000000000..040273b78a63b6866750a903177ad4aff0ab88f9 --- /dev/null +++ b/pyro/source/tests/ops/gaussian.py @@ -0,0 +1,47 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +import pyro.distributions as dist +from pyro.ops.gaussian import Gaussian +from tests.common import assert_close + + +def random_gaussian(batch_shape, dim, rank=None, *, requires_grad=False): + """ + Generate a random Gaussian for testing. + """ + if rank is None: + rank = dim + dim + log_normalizer = torch.randn(batch_shape, requires_grad=requires_grad) + info_vec = torch.randn(batch_shape + (dim,), requires_grad=requires_grad) + samples = torch.randn(batch_shape + (dim, rank)) + precision = torch.matmul(samples, samples.transpose(-2, -1)) + precision.requires_grad_(requires_grad) + result = Gaussian(log_normalizer, info_vec, precision) + assert result.dim() == dim + assert result.batch_shape == batch_shape + return result + + +def random_mvn(batch_shape, dim, *, requires_grad=False): + """ + Generate a random MultivariateNormal distribution for testing. + """ + rank = dim + dim + loc = torch.randn(batch_shape + (dim,), requires_grad=requires_grad) + cov = torch.randn(batch_shape + (dim, rank)) + cov = cov.matmul(cov.transpose(-1, -2)) + cov.requires_grad_(requires_grad) + return dist.MultivariateNormal(loc, cov) + + +def assert_close_gaussian(actual, expected): + assert isinstance(actual, Gaussian) + assert isinstance(expected, Gaussian) + assert actual.dim() == expected.dim() + assert actual.batch_shape == expected.batch_shape + assert_close(actual.log_normalizer, expected.log_normalizer) + assert_close(actual.info_vec, expected.info_vec) + assert_close(actual.precision, expected.precision) diff --git a/pyro/source/tests/ops/test_arrowhead.py b/pyro/source/tests/ops/test_arrowhead.py new file mode 100644 index 0000000000000000000000000000000000000000..f3927157f3c9888084bc516fad1355efca1e0b0e --- /dev/null +++ b/pyro/source/tests/ops/test_arrowhead.py @@ -0,0 +1,58 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +from pyro.ops.arrowhead import ( + SymmArrowhead, + sqrt, + triu_gram, + triu_inverse, + triu_matvecmul, +) +from tests.common import assert_close + + +@pytest.mark.parametrize("head_size", [0, 2, 5]) +def test_utilities(head_size): + size = 5 + cov = torch.randn(size, size) + cov = torch.mm(cov, cov.t()) + + mask = torch.ones(size, size) + mask[head_size:, head_size:] = 0.0 + mask.view(-1)[:: size + 1][head_size:] = 1.0 + arrowhead_full = mask * cov + expected = torch.flip( + torch.linalg.cholesky(torch.flip(arrowhead_full, (-2, -1))), (-2, -1) + ) + # test if those flip ops give expected upper triangular values + assert_close(expected.triu(), expected) + assert_close(expected.matmul(expected.t()), arrowhead_full) + + # test sqrt + arrowhead = SymmArrowhead(cov[:head_size], cov.diag()[head_size:]) + actual = sqrt(arrowhead) + assert_close(actual.top, expected[:head_size]) + assert_close(actual.bottom_diag, expected.diag()[head_size:]) + + # test triu_inverse + expected = expected.inverse() + actual = triu_inverse(actual) + assert_close(actual.top, expected[:head_size]) + assert_close(actual.bottom_diag, expected.diag()[head_size:]) + + # test triu_matvecmul + v = torch.randn(size) + assert_close(triu_matvecmul(actual, v), expected.matmul(v)) + assert_close(triu_matvecmul(actual, v, transpose=True), expected.t().matmul(v)) + + # test triu_gram + actual = triu_gram(actual) + expected = ( + arrowhead_full.inverse() + if head_size > 0 + else arrowhead_full.diag().reciprocal() + ) + assert_close(actual, expected) diff --git a/pyro/source/tests/ops/test_contract.py b/pyro/source/tests/ops/test_contract.py new file mode 100644 index 0000000000000000000000000000000000000000..8b5525fee40d534fe599bde287f09dd9a85be94c --- /dev/null +++ b/pyro/source/tests/ops/test_contract.py @@ -0,0 +1,835 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import itertools +import numbers +from collections import OrderedDict + +import opt_einsum +import pytest +import torch + +import pyro.ops.jit +from pyro.distributions.util import logsumexp +from pyro.ops.contract import ( + _partition_terms, + contract_tensor_tree, + contract_to_tensor, + einsum, + naive_ubersum, + ubersum, +) +from pyro.ops.einsum.adjoint import require_backward +from pyro.ops.rings import LogRing +from pyro.poutine.indep_messenger import CondIndepStackFrame +from pyro.util import optional +from tests.common import assert_equal + + +def deep_copy(x): + """ + Deep copy to detect mutation, assuming tensors will not be mutated. + """ + if isinstance(x, (tuple, frozenset, numbers.Number, torch.Tensor)): + return x # assume x is immutable + if isinstance(x, (list, set)): + return type(x)(deep_copy(value) for value in x) + if isinstance(x, (dict, OrderedDict)): + return type(x)((deep_copy(key), deep_copy(value)) for key, value in x.items()) + if isinstance(x, str): + return x + raise TypeError(type(x)) + + +def deep_equal(x, y): + """ + Deep comparison, assuming tensors will not be mutated. + """ + if type(x) != type(y): + return False + if isinstance(x, (tuple, frozenset, set, numbers.Number)): + return x == y + if isinstance(x, torch.Tensor): + return x is y + if isinstance(x, list): + if len(x) != len(y): + return False + return all((deep_equal(xi, yi) for xi, yi in zip(x, y))) + if isinstance(x, (dict, OrderedDict)): + if len(x) != len(y): + return False + if any(key not in y for key in x): + return False + return all(deep_equal(x[key], y[key]) for key in x) + raise TypeError(type(x)) + + +def assert_immutable(fn): + """ + Decorator to check that function args are not mutated. + """ + + def checked_fn(*args): + copies = tuple(deep_copy(arg) for arg in args) + result = fn(*args) + for pos, (arg, copy) in enumerate(zip(args, copies)): + if not deep_equal(arg, copy): + raise AssertionError( + "{} mutated arg {} of type {}.\nOld:\n{}\nNew:\n{}".format( + fn.__name__, pos, type(arg).__name__, copy, arg + ) + ) + return result + + return checked_fn + + +def _normalize(tensor, dims, plates): + total = tensor + for i, dim in enumerate(dims): + if dim not in plates: + total = logsumexp(total, i, keepdim=True) + return tensor - total + + +@pytest.mark.parametrize( + "inputs,dims,expected_num_components", + [ + ([""], set(), 1), + (["a"], set(), 1), + (["a"], set("a"), 1), + (["a", "a"], set(), 2), + (["a", "a"], set("a"), 1), + (["a", "a", "b", "b"], set(), 4), + (["a", "a", "b", "b"], set("a"), 3), + (["a", "a", "b", "b"], set("b"), 3), + (["a", "a", "b", "b"], set("ab"), 2), + (["a", "ab", "b"], set(), 3), + (["a", "ab", "b"], set("a"), 2), + (["a", "ab", "b"], set("b"), 2), + (["a", "ab", "b"], set("ab"), 1), + (["a", "ab", "bc", "c"], set(), 4), + (["a", "ab", "bc", "c"], set("c"), 3), + (["a", "ab", "bc", "c"], set("b"), 3), + (["a", "ab", "bc", "c"], set("a"), 3), + (["a", "ab", "bc", "c"], set("ac"), 2), + (["a", "ab", "bc", "c"], set("abc"), 1), + ], +) +def test_partition_terms(inputs, dims, expected_num_components): + ring = LogRing() + symbol_to_size = dict(zip("abc", [2, 3, 4])) + shapes = [tuple(symbol_to_size[s] for s in input_) for input_ in inputs] + tensors = [torch.randn(shape) for shape in shapes] + for input_, tensor in zip(inputs, tensors): + tensor._pyro_dims = input_ + components = list(_partition_terms(ring, tensors, dims)) + + # Check that result is a partition. + expected_terms = sorted(tensors, key=id) + actual_terms = sorted((x for c in components for x in c[0]), key=id) + assert actual_terms == expected_terms + assert dims == set.union(set(), *(c[1] for c in components)) + + # Check that the partition is not too coarse. + assert len(components) == expected_num_components + + # Check that partition is not too fine. + component_dict = {x: i for i, (terms, _) in enumerate(components) for x in terms} + for x in tensors: + for y in tensors: + if x is not y: + if dims.intersection(x._pyro_dims, y._pyro_dims): + assert component_dict[x] == component_dict[y] + + +def frame(dim, size): + return CondIndepStackFrame( + name="plate_{}".format(size), dim=dim, size=size, counter=0 + ) + + +EXAMPLES = [ + # ------------------------------------------------------ + # y max_plate_nesting=1 + # | 4 x, y are enumerated in dims: + # x a, b + { + "shape_tree": { + frozenset(): ["a"], + frozenset("i"): ["abi"], + }, + "sum_dims": set("ab"), + "target_dims": set(), + "target_ordinal": frozenset(), + "expected_dims": (), + }, + { + "shape_tree": { + frozenset(): ["a"], + frozenset("i"): ["abi"], + }, + "sum_dims": set("ab"), + "target_dims": set("a"), + "target_ordinal": frozenset(), + "expected_dims": "a", + }, + { + "shape_tree": { + frozenset(): ["a"], + frozenset("i"): ["abi"], + }, + "sum_dims": set("ab"), + "target_dims": set("b"), + "target_ordinal": frozenset("i"), + "expected_dims": "bi", + }, + { + "shape_tree": { + frozenset(): ["a"], + frozenset("i"): ["abi"], + }, + "sum_dims": set("ab"), + "target_dims": set("ab"), + "target_ordinal": frozenset("i"), + "expected_dims": "abi", + }, + # ------------------------------------------------------ + # z + # | 4 max_plate_nesting=2 + # x y w, x, y, z are all enumerated in dims: + # 2 \ / 3 a, b, c, d + # w + { + "shape_tree": { + frozenset(): ["a"], # w + frozenset("i"): ["abi"], # x + frozenset("j"): ["acj"], # y + frozenset("ij"): ["cdij"], # z + }, + # query for w + "sum_dims": set("abcd"), + "target_dims": set("a"), + "target_ordinal": frozenset(), + "expected_dims": "a", + }, + { + "shape_tree": { + frozenset(): ["a"], # w + frozenset("i"): ["abi"], # x + frozenset("j"): ["acj"], # y + frozenset("ij"): ["cdij"], # z + }, + # query for x + "sum_dims": set("abcd"), + "target_dims": set("b"), + "target_ordinal": frozenset("i"), + "expected_dims": "bi", + }, + { + "shape_tree": { + frozenset(): ["a"], # w + frozenset("i"): ["abi"], # x + frozenset("j"): ["acj"], # y + frozenset("ij"): ["cdij"], # z + }, + # query for y + "sum_dims": set("abcd"), + "target_dims": set("c"), + "target_ordinal": frozenset("j"), + "expected_dims": "cj", + }, + { + "shape_tree": { + frozenset(): ["a"], # w + frozenset("i"): ["abi"], # x + frozenset("j"): ["acj"], # y + frozenset("ij"): ["cdij"], # z + }, + # query for z + "sum_dims": set("abcd"), + "target_dims": set("d"), + "target_ordinal": frozenset("ij"), + "expected_dims": "dij", + }, +] + + +@pytest.mark.parametrize("example", EXAMPLES) +def test_contract_to_tensor(example): + symbol_to_size = dict(zip("abcdij", [4, 5, 6, 7, 2, 3])) + tensor_tree = OrderedDict() + for t, shapes in example["shape_tree"].items(): + for dims in shapes: + tensor = torch.randn(tuple(symbol_to_size[s] for s in dims)) + tensor._pyro_dims = dims + tensor_tree.setdefault(t, []).append(tensor) + sum_dims = example["sum_dims"] + target_dims = example["target_dims"] + target_ordinal = example["target_ordinal"] + expected_dims = example["expected_dims"] + + actual = assert_immutable(contract_to_tensor)( + tensor_tree, sum_dims, target_ordinal, target_dims + ) + assert set(actual._pyro_dims) == set(expected_dims) + + +@pytest.mark.parametrize("example", EXAMPLES) +def test_contract_tensor_tree(example): + symbol_to_size = dict(zip("abcdij", [4, 5, 6, 7, 2, 3])) + tensor_tree = OrderedDict() + for t, shapes in example["shape_tree"].items(): + for dims in shapes: + tensor = torch.randn(tuple(symbol_to_size[s] for s in dims)) + tensor._pyro_dims = dims + tensor_tree.setdefault(t, []).append(tensor) + sum_dims = example["sum_dims"] + + tensor_tree = assert_immutable(contract_tensor_tree)(tensor_tree, sum_dims) + assert tensor_tree + for ordinal, terms in tensor_tree.items(): + for term in terms: + for frame in ordinal: + assert term.shape[frame.dim] == frame.size + + +# Let abcde be enum dims and ijk be plates. +UBERSUM_EXAMPLES = [ + ("->", ""), + ("a->,a", ""), + ("ab->,a,b,ab,ba", ""), + ("ab,bc->,a,b,c,ab,bc,ac,abc", ""), + ("ab,bc,cd->,a,b,c,d,ab,ac,ad,bc,bd,cd,abc,acd,bcd,abcd", ""), + ("i->,i", "i"), + (",i->,i", "i"), + (",i,i->,i", "i"), + (",i,ia->,i,ia", "i"), + (",i,i,ia,ia->,i,ia", "i"), + ("bi,ia->,i,ia,ib,iab", "i"), + ("abi,b->,b,ai,abi", "i"), + ("ia,ja,ija->,a,i,ia,j,ja,ija", "ij"), + ("i,jb,ijab->,i,j,jb,ij,ija,ijb,ijab", "ij"), + ("ia,jb,ijab->,i,ia,j,jb,ij,ija,ijb,ijab", "ij"), + (",i,j,a,ij,ia,ja,ija->,a,i,j,ia,ja,ij,ija", "ij"), + ("a,b,c,di,ei,fj->,a,b,c,di,ei,fj", "ij"), + # {ij} {ik} + # a\ /a + # {i} + ("ija,ika->,i,j,k,ij,ik,ijk,ia,ija,ika,ijka", "ijk"), + # {ij} {ik} + # a\ /a + # {i} {} + (",ia,ija,ika->,i,j,k,ij,ik,ijk,ia,ija,ika,ijka", "ijk"), + # {i} c + # |b + # {} a + ("ab,bci->,a,b,ab,i,ai,bi,ci,abi,bci,abci", "i"), + # {i} cd + # |b + # {} a + ("ab,bci,bdi->,a,b,ab,i,ai,bi,ci,abi,bci,bdi,cdi,abci,abdi,abcdi", "i"), + # {ij} c + # |b + # {} a + ("ab,bcij->,a,b,ab,i,j,ij,ai,aj,aij,bi,bj,aij,bij,cij,abij,acij,bcij,abcij", "ij"), + # {ij} c + # |b + # {i} a + ("abi,bcij->,i,ai,bi,abi,j,ij,aij,bij,cij,abij,bcij,abcij", "ij"), + # {ij} e + # |d + # {i} c + # |b + # {} a + ("ab,bcdi,deij->,a,b,ci,di,eij", "ij"), + # {ijk} g + # |f + # {ij} e + # |d + # {i} c + # |b + # {} a + ("ab,bcdi,defij,fgijk->,a,b,ci,di,eij,fij,gijk", "ijk"), + # {ik} {ij} {ij} + # a\ /b /e + # {i} {j} + # c\ /d + # {} + ("aik,bij,abci,cd,dej,eij->,ai,bi,ej,aik,bij,eij", "ijk"), + # {ij} {ij} + # a| |d + # {i} {j} + # b\ /c + # {} + ("aij,abi,bc,cdj,dij->,bi,cj,aij,dij,adij", "ij"), +] + + +def make_example(equation, fill=None, sizes=(2, 3)): + symbols = sorted(set(equation) - set(",->")) + sizes = {dim: size for dim, size in zip(symbols, itertools.cycle(sizes))} + inputs, outputs = equation.split("->") + inputs = inputs.split(",") + outputs = outputs.split(",") + operands = [] + for dims in inputs: + shape = tuple(sizes[dim] for dim in dims) + operands.append(torch.randn(shape) if fill is None else torch.full(shape, fill)) + return inputs, outputs, operands, sizes + + +@pytest.mark.parametrize("equation,plates", UBERSUM_EXAMPLES) +def test_naive_ubersum(equation, plates): + inputs, outputs, operands, sizes = make_example(equation) + + actual = naive_ubersum(equation, *operands, plates=plates) + + assert isinstance(actual, tuple) + assert len(actual) == len(outputs) + for output, actual_part in zip(outputs, actual): + expected_shape = tuple(sizes[dim] for dim in output) + assert actual_part.shape == expected_shape + if not plates: + equation_part = ",".join(inputs) + "->" + output + expected_part = opt_einsum.contract( + equation_part, *operands, backend="pyro.ops.einsum.torch_log" + ) + assert_equal( + expected_part, + actual_part, + msg="For output '{}':\nExpected:\n{}\nActual:\n{}".format( + output, expected_part.detach().cpu(), actual_part.detach().cpu() + ), + ) + + +@pytest.mark.parametrize("equation,plates", UBERSUM_EXAMPLES) +def test_ubersum(equation, plates): + inputs, outputs, operands, sizes = make_example(equation) + + try: + actual = ubersum(equation, *operands, plates=plates, modulo_total=True) + except NotImplementedError: + pytest.skip() + + assert isinstance(actual, tuple) + assert len(actual) == len(outputs) + expected = naive_ubersum(equation, *operands, plates=plates) + for output, expected_part, actual_part in zip(outputs, expected, actual): + actual_part = _normalize(actual_part, output, plates) + expected_part = _normalize(expected_part, output, plates) + assert_equal( + expected_part, + actual_part, + msg="For output '{}':\nExpected:\n{}\nActual:\n{}".format( + output, expected_part.detach().cpu(), actual_part.detach().cpu() + ), + ) + + +@pytest.mark.parametrize("equation,plates", UBERSUM_EXAMPLES) +def test_einsum_linear(equation, plates): + inputs, outputs, log_operands, sizes = make_example(equation) + operands = [x.exp() for x in log_operands] + + try: + log_expected = ubersum( + equation, *log_operands, plates=plates, modulo_total=True + ) + expected = [x.exp() for x in log_expected] + except NotImplementedError: + pytest.skip() + + # einsum() is in linear space whereas ubersum() is in log space. + actual = einsum(equation, *operands, plates=plates, modulo_total=True) + assert isinstance(actual, tuple) + assert len(actual) == len(outputs) + for output, expected_part, actual_part in zip(outputs, expected, actual): + assert_equal( + expected_part.log(), + actual_part.log(), + msg="For output '{}':\nExpected:\n{}\nActual:\n{}".format( + output, expected_part.detach().cpu(), actual_part.detach().cpu() + ), + ) + + +@pytest.mark.parametrize("equation,plates", UBERSUM_EXAMPLES) +def test_ubersum_jit(equation, plates): + inputs, outputs, operands, sizes = make_example(equation) + + try: + expected = ubersum(equation, *operands, plates=plates, modulo_total=True) + except NotImplementedError: + pytest.skip() + + @pyro.ops.jit.trace + def jit_ubersum(*operands): + return ubersum(equation, *operands, plates=plates, modulo_total=True) + + actual = jit_ubersum(*operands) + + if not isinstance(actual, tuple): + pytest.xfail(reason="https://github.com/pytorch/pytorch/issues/14875") + assert len(expected) == len(actual) + for e, a in zip(expected, actual): + assert_equal(e, a) + + +@pytest.mark.parametrize( + "equation,plates", + [ + ("i->", "i"), + ("i->i", "i"), + (",i->", "i"), + (",i->i", "i"), + ("ai->", "i"), + ("ai->i", "i"), + ("ai->ai", "i"), + (",ai,abij->aij", "ij"), + ("a,ai,bij->bij", "ij"), + ("a,ai,abij->bij", "ij"), + ("a,abi,bcij->a", "ij"), + ("a,abi,bcij->bi", "ij"), + ("a,abi,bcij->bij", "ij"), + ("a,abi,bcij->cij", "ij"), + ("ab,bcdi,deij->eij", "ij"), + ], +) +def test_ubersum_total(equation, plates): + inputs, outputs, operands, sizes = make_example(equation, fill=1.0, sizes=(2,)) + output = outputs[0] + + expected = naive_ubersum(equation, *operands, plates=plates)[0] + actual = ubersum(equation, *operands, plates=plates, modulo_total=True)[0] + expected = _normalize(expected, output, plates) + actual = _normalize(actual, output, plates) + assert_equal( + expected, + actual, + msg="Expected:\n{}\nActual:\n{}".format( + expected.detach().cpu(), actual.detach().cpu() + ), + ) + + +@pytest.mark.parametrize("a", [2, 1]) +@pytest.mark.parametrize("b", [3, 1]) +@pytest.mark.parametrize("c", [3, 1]) +@pytest.mark.parametrize("d", [4, 1]) +@pytest.mark.parametrize("impl", [naive_ubersum, ubersum]) +def test_ubersum_sizes(impl, a, b, c, d): + X = torch.randn(a, b) + Y = torch.randn(b, c) + Z = torch.randn(c, d) + actual = impl("ab,bc,cd->a,b,c,d", X, Y, Z, plates="ad", modulo_total=True) + actual_a, actual_b, actual_c, actual_d = actual + assert actual_a.shape == (a,) + assert actual_b.shape == (b,) + assert actual_c.shape == (c,) + assert actual_d.shape == (d,) + + +@pytest.mark.parametrize("impl", [naive_ubersum, ubersum]) +def test_ubersum_1(impl): + # y {a} z {b} + # \ / + # x {} <--- target + a, b, c, d, e = 2, 3, 4, 5, 6 + x = torch.randn(c) + y = torch.randn(c, d, a) + z = torch.randn(e, c, b) + (actual,) = impl("c,cda,ecb->", x, y, z, plates="ab", modulo_total=True) + expected = logsumexp(x + logsumexp(y, -2).sum(-1) + logsumexp(z, -3).sum(-1), -1) + assert_equal(actual, expected) + + +@pytest.mark.parametrize("impl", [naive_ubersum, ubersum]) +def test_ubersum_2(impl): + # y {a} z {b} <--- target + # \ / + # x {} + a, b, c, d, e = 2, 3, 4, 5, 6 + x = torch.randn(c) + y = torch.randn(c, d, a) + z = torch.randn(e, c, b) + (actual,) = impl("c,cda,ecb->b", x, y, z, plates="ab", modulo_total=True) + xyz = logsumexp(x + logsumexp(y, -2).sum(-1) + logsumexp(z, -3).sum(-1), -1) + expected = xyz.expand(b) + assert_equal(actual, expected) + + +@pytest.mark.parametrize("impl", [naive_ubersum, ubersum]) +def test_ubersum_3(impl): + # z {b,c} + # | + # w {a} y {b} <--- target + # \ / + # x {} + a, b, c, d, e = 2, 3, 4, 5, 6 + w = torch.randn(a, e) + x = torch.randn(d) + y = torch.randn(b, d) + z = torch.randn(b, c, d, e) + (actual,) = impl("ae,d,bd,bcde->be", w, x, y, z, plates="abc", modulo_total=True) + yz = y.reshape(b, d, 1) + z.sum(-3) # eliminate c + assert yz.shape == (b, d, e) + yz = yz.sum(0) # eliminate b + assert yz.shape == (d, e) + wxyz = w.sum(0) + x.reshape(d, 1) + yz # eliminate a + assert wxyz.shape == (d, e) + wxyz = logsumexp(wxyz, 0) # eliminate d + assert wxyz.shape == (e,) + expected = wxyz.expand(b, e) # broadcast to b + assert_equal(actual, expected) + + +@pytest.mark.parametrize("impl", [naive_ubersum, ubersum]) +def test_ubersum_4(impl): + # x,y {b} <--- target + # | + # {} + a, b, c, d = 2, 3, 4, 5 + x = torch.randn(a, b) + y = torch.randn(d, b, c) + (actual,) = impl("ab,dbc->dc", x, y, plates="d", modulo_total=True) + x_b1 = logsumexp(x, 0).unsqueeze(-1) + assert x_b1.shape == (b, 1) + y_db1 = logsumexp(y, 2, keepdim=True) + assert y_db1.shape == (d, b, 1) + y_dbc = y_db1.sum(0) - y_db1 + y # inclusion-exclusion + assert y_dbc.shape == (d, b, c) + xy_dc = logsumexp(x_b1 + y_dbc, 1) + assert xy_dc.shape == (d, c) + expected = xy_dc + assert_equal(actual, expected) + + +@pytest.mark.parametrize("impl", [naive_ubersum, ubersum]) +def test_ubersum_5(impl): + # z {ij} <--- target + # | + # y {i} + # | + # x {} + i, j, a, b, c = 2, 3, 6, 5, 4 + x = torch.randn(a) + y = torch.randn(a, b, i) + z = torch.randn(b, c, i, j) + (actual,) = impl("a,abi,bcij->cij", x, y, z, plates="ij", modulo_total=True) + + # contract plate j + s1 = logsumexp(z, 1) + assert s1.shape == (b, i, j) + p1 = s1.sum(2) + assert p1.shape == (b, i) + q1 = z - s1.unsqueeze(-3) + assert q1.shape == (b, c, i, j) + + # contract plate i + x2 = y + p1 + assert x2.shape == (a, b, i) + s2 = logsumexp(x2, 1) + assert s2.shape == (a, i) + p2 = s2.sum(1) + assert p2.shape == (a,) + q2 = x2 - s2.unsqueeze(-2) + assert q2.shape == (a, b, i) + + expected = opt_einsum.contract( + "a,a,abi,bcij->cij", x, p2, q2, q1, backend="pyro.ops.einsum.torch_log" + ) + assert_equal(actual, expected) + + +@pytest.mark.parametrize("impl,implemented", [(naive_ubersum, True), (ubersum, False)]) +def test_ubersum_collide_implemented(impl, implemented): + # Non-tree plates cause exponential blowup, + # so ubersum() refuses to evaluate them. + # + # z {a,b} + # / \ + # x {a} y {b} + # \ / + # {} <--- target + a, b, c, d = 2, 3, 4, 5 + x = torch.randn(a, c) + y = torch.randn(b, d) + z = torch.randn(a, b, c, d) + raises = pytest.raises( + NotImplementedError, match="Expected tree-structured plate nesting" + ) + with optional(raises, not implemented): + impl("ac,bd,abcd->", x, y, z, plates="ab", modulo_total=True) + + +@pytest.mark.parametrize("impl", [naive_ubersum, ubersum]) +def test_ubersum_collide_ok_1(impl): + # The following is ok because it splits into connected components + # {x,z1} and {y,z2}, thereby avoiding exponential blowup. + # + # z1,z2 {a,b} + # / \ + # x {a} y {b} + # \ / + # {} <--- target + a, b, c, d = 2, 3, 4, 5 + x = torch.randn(a, c) + y = torch.randn(b, d) + z1 = torch.randn(a, b, c) + z2 = torch.randn(a, b, d) + impl("ac,bd,abc,abd->", x, y, z1, z2, plates="ab", modulo_total=True) + + +@pytest.mark.parametrize("impl", [naive_ubersum, ubersum]) +def test_ubersum_collide_ok_2(impl): + # The following is ok because z1 can be contracted to x and + # z2 can be contracted to y. + # + # z1,z2 {a,b} + # / \ + # x {a} y {b} + # \ / + # w {} <--- target + a, b, c, d = 2, 3, 4, 5 + w = torch.randn(c, d) + x = torch.randn(a, c) + y = torch.randn(b, d) + z1 = torch.randn(a, b, c) + z2 = torch.randn(a, b, d) + impl("cd,ac,bd,abc,abd->", w, x, y, z1, z2, plates="ab", modulo_total=True) + + +@pytest.mark.parametrize("impl", [naive_ubersum, ubersum]) +def test_ubersum_collide_ok_3(impl): + # The following is ok because x, y, and z can be independently contracted to w. + # + # z {a,b} + # x {a} | y {b} + # \ | / + # \ | / + # w {} <--- target + a, b, c = 2, 3, 4 + w = torch.randn(c) + x = torch.randn(a, c) + y = torch.randn(b, c) + z = torch.randn(a, b, c) + impl("c,ac,bc,abc->", w, x, y, z, plates="ab", modulo_total=True) + + +UBERSUM_SHAPE_ERRORS = [ + ("ab,bc->", [(2, 3), (4, 5)], ""), + ("ab,bc->", [(2, 3), (4, 5)], "b"), +] + + +@pytest.mark.parametrize("equation,shapes,plates", UBERSUM_SHAPE_ERRORS) +@pytest.mark.parametrize("impl", [naive_ubersum, ubersum]) +def test_ubersum_size_error(impl, equation, shapes, plates): + operands = [torch.randn(shape) for shape in shapes] + with pytest.raises(ValueError, match="Dimension size mismatch|Size of label"): + impl(equation, *operands, plates=plates, modulo_total=True) + + +UBERSUM_BATCH_ERRORS = [ + ("ai->a", "i"), + (",ai->a", "i"), + ("bi,abi->b", "i"), + (",bi,abi->b", "i"), + ("aij->ai", "ij"), + ("aij->aj", "ij"), +] + + +@pytest.mark.parametrize("equation,plates", UBERSUM_BATCH_ERRORS) +@pytest.mark.parametrize("impl", [naive_ubersum, ubersum]) +def test_ubersum_plate_error(impl, equation, plates): + inputs, outputs = equation.split("->") + operands = [ + torch.randn(torch.Size((2,) * len(input_))) for input_ in inputs.split(",") + ] + with pytest.raises(ValueError, match="It is nonsensical to preserve a plated dim"): + impl(equation, *operands, plates=plates, modulo_total=True) + + +ADJOINT_EXAMPLES = [ + ("a->", ""), + ("a,a->", ""), + ("ab,bc->", ""), + ("a,abi->", "i"), + ("a,abi,bcij->", "ij"), + ("a,abi,bcij,bdik->", "ijk"), + ("ai,ai->i", "i"), + ("ai,abij->i", "ij"), + ("ai,abij,acik->i", "ijk"), +] + + +@pytest.mark.parametrize("equation,plates", ADJOINT_EXAMPLES) +@pytest.mark.parametrize("backend", ["map", "sample", "marginal"]) +def test_adjoint_shape(backend, equation, plates): + backend = "pyro.ops.einsum.torch_{}".format(backend) + inputs, output = equation.split("->") + inputs = inputs.split(",") + operands = [torch.randn(torch.Size((2,) * len(input_))) for input_ in inputs] + for input_, x in zip(inputs, operands): + x._pyro_dims = input_ + + # run forward-backward algorithm + for x in operands: + require_backward(x) + (result,) = ubersum( + equation, *operands, plates=plates, modulo_total=True, backend=backend + ) + result._pyro_backward() + + for input_, x in zip(inputs, operands): + backward_result = x._pyro_backward_result + contract_dims = set(input_) - set(output) - set(plates) + if contract_dims: + assert backward_result is not None + else: + assert backward_result is None + + +@pytest.mark.parametrize("equation,plates", ADJOINT_EXAMPLES) +def test_adjoint_marginal(equation, plates): + inputs, output = equation.split("->") + inputs = inputs.split(",") + operands = [torch.randn(torch.Size((2,) * len(input_))) for input_ in inputs] + for input_, x in zip(inputs, operands): + x._pyro_dims = input_ + + # check forward pass + for x in operands: + require_backward(x) + (actual,) = ubersum( + equation, + *operands, + plates=plates, + modulo_total=True, + backend="pyro.ops.einsum.torch_marginal" + ) + (expected,) = ubersum( + equation, + *operands, + plates=plates, + modulo_total=True, + backend="pyro.ops.einsum.torch_log" + ) + assert_equal(expected, actual) + + # check backward pass + actual._pyro_backward() + for input_, operand in zip(inputs, operands): + marginal_equation = ",".join(inputs) + "->" + input_ + (expected,) = ubersum( + marginal_equation, + *operands, + plates=plates, + modulo_total=True, + backend="pyro.ops.einsum.torch_log" + ) + actual = operand._pyro_backward_result + assert_equal(expected, actual) diff --git a/pyro/source/tests/ops/test_gamma_gaussian.py b/pyro/source/tests/ops/test_gamma_gaussian.py new file mode 100644 index 0000000000000000000000000000000000000000..8dbee010df0518e668a4b742e672544bd19cff70 --- /dev/null +++ b/pyro/source/tests/ops/test_gamma_gaussian.py @@ -0,0 +1,358 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import pytest +import torch +from torch.nn.functional import pad + +import pyro.distributions as dist +from pyro.distributions.util import broadcast_shape +from pyro.ops.gamma_gaussian import ( + GammaGaussian, + gamma_and_mvn_to_gamma_gaussian, + gamma_gaussian_tensordot, + matrix_and_mvn_to_gamma_gaussian, +) +from tests.common import assert_close +from tests.ops.gamma_gaussian import ( + assert_close_gamma_gaussian, + random_gamma, + random_gamma_gaussian, +) +from tests.ops.gaussian import random_mvn + + +@pytest.mark.parametrize("extra_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize( + "log_normalizer_shape,info_vec_shape,precision_shape,alpha_shape,beta_shape", + [ + ((), (), (), (), ()), + ((5,), (), (), (), ()), + ((), (5,), (), (), ()), + ((), (), (5,), (), ()), + ((), (), (), (5,), ()), + ((), (), (), (), (5,)), + ((3, 1, 1), (1, 4, 1), (1, 1, 5), (3, 4, 1), (1, 4, 5)), + ], + ids=str, +) +@pytest.mark.parametrize("dim", [1, 2, 3]) +def test_expand( + extra_shape, + log_normalizer_shape, + info_vec_shape, + precision_shape, + alpha_shape, + beta_shape, + dim, +): + rank = dim + dim + log_normalizer = torch.randn(log_normalizer_shape) + info_vec = torch.randn(info_vec_shape + (dim,)) + precision = torch.randn(precision_shape + (dim, rank)) + precision = precision.matmul(precision.transpose(-1, -2)) + alpha = torch.randn(alpha_shape).exp() + beta = torch.randn(beta_shape).exp() + gamma_gaussian = GammaGaussian(log_normalizer, info_vec, precision, alpha, beta) + + expected_shape = extra_shape + broadcast_shape( + log_normalizer_shape, info_vec_shape, precision_shape, alpha_shape, beta_shape + ) + actual = gamma_gaussian.expand(expected_shape) + assert actual.batch_shape == expected_shape + + +@pytest.mark.parametrize( + "old_shape,new_shape", + [ + ((6,), (3, 2)), + ((5, 6), (5, 3, 2)), + ], + ids=str, +) +@pytest.mark.parametrize("dim", [1, 2, 3]) +def test_reshape(old_shape, new_shape, dim): + gamma_gaussian = random_gamma_gaussian(old_shape, dim) + + # reshape to new + new = gamma_gaussian.reshape(new_shape) + assert new.batch_shape == new_shape + + # reshape back to old + g = new.reshape(old_shape) + assert_close_gamma_gaussian(g, gamma_gaussian) + + +@pytest.mark.parametrize( + "shape,cat_dim,split", + [ + ((4, 7, 6), -1, (2, 1, 3)), + ((4, 7, 6), -2, (1, 1, 2, 3)), + ((4, 7, 6), 1, (1, 1, 2, 3)), + ], + ids=str, +) +@pytest.mark.parametrize("dim", [1, 2, 3]) +def test_cat(shape, cat_dim, split, dim): + assert sum(split) == shape[cat_dim] + gamma_gaussian = random_gamma_gaussian(shape, dim) + parts = [] + end = 0 + for size in split: + beg, end = end, end + size + if cat_dim == -1: + part = gamma_gaussian[..., beg:end] + elif cat_dim == -2: + part = gamma_gaussian[..., beg:end, :] + elif cat_dim == 1: + part = gamma_gaussian[:, beg:end] + else: + raise ValueError + parts.append(part) + + actual = GammaGaussian.cat(parts, cat_dim) + assert_close_gamma_gaussian(actual, gamma_gaussian) + + +@pytest.mark.parametrize("shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("dim", [1, 2, 3]) +@pytest.mark.parametrize("left", [0, 1, 2]) +@pytest.mark.parametrize("right", [0, 1, 2]) +def test_pad(shape, left, right, dim): + expected = random_gamma_gaussian(shape, dim) + padded = expected.event_pad(left=left, right=right) + assert padded.batch_shape == expected.batch_shape + assert padded.dim() == left + expected.dim() + right + mid = slice(left, padded.dim() - right) + assert_close(padded.info_vec[..., mid], expected.info_vec) + assert_close(padded.precision[..., mid, mid], expected.precision) + + +@pytest.mark.parametrize("shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("dim", [1, 2, 3]) +def test_add(shape, dim): + x = random_gamma_gaussian(shape, dim) + y = random_gamma_gaussian(shape, dim) + value = torch.randn(dim) + s = torch.randn(()).exp() + assert_close( + (x + y).log_density(value, s), x.log_density(value, s) + y.log_density(value, s) + ) + + +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("left", [1, 2, 3]) +@pytest.mark.parametrize("right", [1, 2, 3]) +def test_marginalize_shape(batch_shape, left, right): + dim = left + right + g = random_gamma_gaussian(batch_shape, dim) + assert g.marginalize(left=left).dim() == right + assert g.marginalize(right=right).dim() == left + + +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("left", [1, 2, 3]) +@pytest.mark.parametrize("right", [1, 2, 3]) +def test_marginalize(batch_shape, left, right): + dim = left + right + g = random_gamma_gaussian(batch_shape, dim) + s = torch.randn(batch_shape).exp() + assert_close( + g.marginalize(left=left).event_logsumexp().log_density(s), + g.event_logsumexp().log_density(s), + ) + assert_close( + g.marginalize(right=right).event_logsumexp().log_density(s), + g.event_logsumexp().log_density(s), + ) + + +@pytest.mark.parametrize("sample_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("left", [1, 2, 3]) +@pytest.mark.parametrize("right", [1, 2, 3]) +def test_marginalize_condition(sample_shape, batch_shape, left, right): + dim = left + right + g = random_gamma_gaussian(batch_shape, dim) + x = torch.randn(sample_shape + (1,) * len(batch_shape) + (right,)) + s = torch.randn(batch_shape).exp() + assert_close( + g.marginalize(left=left).log_density(x, s), + g.condition(x).event_logsumexp().log_density(s), + ) + + +@pytest.mark.parametrize("sample_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("left", [1, 2, 3]) +@pytest.mark.parametrize("right", [1, 2, 3]) +def test_condition(sample_shape, batch_shape, left, right): + dim = left + right + g = random_gamma_gaussian(batch_shape, dim) + g.precision += torch.eye(dim) * 0.1 + value = torch.randn(sample_shape + (1,) * len(batch_shape) + (dim,)) + left_value, right_value = value[..., :left], value[..., left:] + + conditioned = g.condition(right_value) + assert conditioned.batch_shape == sample_shape + g.batch_shape + assert conditioned.dim() == left + + s = torch.randn(batch_shape).exp() + actual = conditioned.log_density(left_value, s) + expected = g.log_density(value, s) + assert_close(actual, expected) + + +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("dim", [1, 2, 3]) +def test_logsumexp(batch_shape, dim): + g = random_gamma_gaussian(batch_shape, dim) + g.info_vec *= 0.1 # approximately centered + g.precision += torch.eye(dim) * 0.1 + s = torch.randn(batch_shape).exp() + 0.2 + + num_samples = 200000 + scale = 10 + samples = ( + torch.rand((num_samples,) + (1,) * len(batch_shape) + (dim,)) * scale + - scale / 2 + ) + expected = g.log_density(samples, s).logsumexp(0) + math.log( + scale**dim / num_samples + ) + actual = g.event_logsumexp().log_density(s) + assert_close(actual, expected, atol=0.05, rtol=0.05) + + +@pytest.mark.parametrize("sample_shape", [(), (7,), (6, 5)], ids=str) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("dim", [1, 2, 3]) +def test_gamma_and_mvn_to_gamma_gaussian(sample_shape, batch_shape, dim): + gamma = random_gamma(batch_shape) + mvn = random_mvn(batch_shape, dim) + g = gamma_and_mvn_to_gamma_gaussian(gamma, mvn) + value = mvn.sample(sample_shape) + s = gamma.sample(sample_shape) + actual_log_prob = g.log_density(value, s) + + s_log_prob = gamma.log_prob(s) + scaled_prec = mvn.precision_matrix * s.unsqueeze(-1).unsqueeze(-1) + mvn_log_prob = dist.MultivariateNormal( + mvn.loc, precision_matrix=scaled_prec + ).log_prob(value) + expected_log_prob = s_log_prob + mvn_log_prob + assert_close(actual_log_prob, expected_log_prob) + + +@pytest.mark.parametrize("sample_shape", [(), (7,), (6, 5)], ids=str) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("x_dim", [1, 2, 3]) +@pytest.mark.parametrize("y_dim", [1, 2, 3]) +def test_matrix_and_mvn_to_gamma_gaussian(sample_shape, batch_shape, x_dim, y_dim): + matrix = torch.randn(batch_shape + (x_dim, y_dim)) + y_mvn = random_mvn(batch_shape, y_dim) + g = matrix_and_mvn_to_gamma_gaussian(matrix, y_mvn) + xy = torch.randn(sample_shape + batch_shape + (x_dim + y_dim,)) + s = torch.rand(sample_shape + batch_shape) + actual_log_prob = g.log_density(xy, s) + + x, y = xy[..., :x_dim], xy[..., x_dim:] + y_pred = x.unsqueeze(-2).matmul(matrix).squeeze(-2) + loc = y_pred + y_mvn.loc + scaled_prec = y_mvn.precision_matrix * s.unsqueeze(-1).unsqueeze(-1) + expected_log_prob = dist.MultivariateNormal( + loc, precision_matrix=scaled_prec + ).log_prob(y) + assert_close(actual_log_prob, expected_log_prob) + + +@pytest.mark.parametrize( + "x_batch_shape,y_batch_shape", + [ + ((), ()), + ((3,), ()), + ((), (3,)), + ((2, 1), (3,)), + ( + (2, 3), + ( + 2, + 3, + ), + ), + ], + ids=str, +) +@pytest.mark.parametrize( + "x_dim,y_dim,dot_dims", + [ + (0, 0, 0), + (0, 2, 0), + (1, 0, 0), + (2, 1, 0), + (3, 3, 3), + (3, 2, 1), + (3, 2, 2), + (5, 4, 2), + ], + ids=str, +) +@pytest.mark.parametrize("x_rank,y_rank", [(1, 1), (4, 1), (1, 4), (4, 4)], ids=str) +def test_gamma_gaussian_tensordot( + dot_dims, x_batch_shape, x_dim, x_rank, y_batch_shape, y_dim, y_rank +): + x_rank = min(x_rank, x_dim) + y_rank = min(y_rank, y_dim) + x = random_gamma_gaussian(x_batch_shape, x_dim, x_rank) + y = random_gamma_gaussian(y_batch_shape, y_dim, y_rank) + na = x_dim - dot_dims + nb = dot_dims + nc = y_dim - dot_dims + try: + torch.linalg.cholesky(x.precision[..., na:, na:] + y.precision[..., :nb, :nb]) + except RuntimeError: + pytest.skip("Cannot marginalize the common variables of two Gaussians.") + + z = gamma_gaussian_tensordot(x, y, dot_dims) + assert z.dim() == x_dim + y_dim - 2 * dot_dims + + # We make these precision matrices positive definite to test the math + x.precision = x.precision + 3 * torch.eye(x.dim()) + y.precision = y.precision + 3 * torch.eye(y.dim()) + z = gamma_gaussian_tensordot(x, y, dot_dims) + # compare against broadcasting, adding, and marginalizing + precision = pad(x.precision, (0, nc, 0, nc)) + pad(y.precision, (na, 0, na, 0)) + info_vec = pad(x.info_vec, (0, nc)) + pad(y.info_vec, (na, 0)) + covariance = torch.inverse(precision) + loc = ( + covariance.matmul(info_vec.unsqueeze(-1)).squeeze(-1) + if info_vec.size(-1) > 0 + else info_vec + ) + z_covariance = torch.inverse(z.precision) + z_loc = z_covariance.matmul( + z.info_vec.view(z.info_vec.shape + (int(z.dim() > 0),)) + ).sum(-1) + assert_close(loc[..., :na], z_loc[..., :na]) + assert_close(loc[..., x_dim:], z_loc[..., na:]) + assert_close(covariance[..., :na, :na], z_covariance[..., :na, :na]) + assert_close(covariance[..., :na, x_dim:], z_covariance[..., :na, na:]) + assert_close(covariance[..., x_dim:, :na], z_covariance[..., na:, :na]) + assert_close(covariance[..., x_dim:, x_dim:], z_covariance[..., na:, na:]) + + s = torch.randn(z.batch_shape).exp() + # Assume a = c = 0, integrate out b + num_samples = 200000 + scale = 10 + # generate samples in [-10, 10] + value_b = torch.rand((num_samples,) + z.batch_shape + (nb,)) * scale - scale / 2 + value_x = pad(value_b, (na, 0)) + value_y = pad(value_b, (0, nc)) + expect = torch.logsumexp( + x.log_density(value_x, s) + y.log_density(value_y, s), dim=0 + ) + expect += math.log(scale**nb / num_samples) + actual = z.log_density(torch.zeros(z.batch_shape + (z.dim(),)), s) + assert_close(actual.clamp(max=10.0), expect.clamp(max=10.0), atol=0.1, rtol=0.1) diff --git a/pyro/source/tests/ops/test_gaussian.py b/pyro/source/tests/ops/test_gaussian.py new file mode 100644 index 0000000000000000000000000000000000000000..0982d8eb91b2ec445c3438461c737da64939f68c --- /dev/null +++ b/pyro/source/tests/ops/test_gaussian.py @@ -0,0 +1,612 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math +from collections import OrderedDict + +import pytest +import torch +from torch.distributions import constraints, transform_to +from torch.nn.functional import pad + +import pyro.distributions as dist +from pyro.distributions.util import broadcast_shape +from pyro.ops.gaussian import ( + AffineNormal, + Gaussian, + gaussian_tensordot, + matrix_and_gaussian_to_gaussian, + matrix_and_mvn_to_gaussian, + mvn_to_gaussian, + sequential_gaussian_filter_sample, + sequential_gaussian_tensordot, +) +from tests.common import assert_close +from tests.ops.gaussian import assert_close_gaussian, random_gaussian, random_mvn + + +@pytest.mark.parametrize("extra_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize( + "log_normalizer_shape,info_vec_shape,precision_shape", + [ + ((), (), ()), + ((5,), (), ()), + ((), (5,), ()), + ((), (), (5,)), + ((3, 1, 1), (1, 4, 1), (1, 1, 5)), + ], + ids=str, +) +@pytest.mark.parametrize("dim", [1, 2, 3]) +def test_expand( + extra_shape, log_normalizer_shape, info_vec_shape, precision_shape, dim +): + rank = dim + dim + log_normalizer = torch.randn(log_normalizer_shape) + info_vec = torch.randn(info_vec_shape + (dim,)) + precision = torch.randn(precision_shape + (dim, rank)) + precision = precision.matmul(precision.transpose(-1, -2)) + gaussian = Gaussian(log_normalizer, info_vec, precision) + + expected_shape = extra_shape + broadcast_shape( + log_normalizer_shape, info_vec_shape, precision_shape + ) + actual = gaussian.expand(expected_shape) + assert actual.batch_shape == expected_shape + + +@pytest.mark.parametrize( + "old_shape,new_shape", + [ + ((6,), (3, 2)), + ((5, 6), (5, 3, 2)), + ], + ids=str, +) +@pytest.mark.parametrize("dim", [1, 2, 3]) +def test_reshape(old_shape, new_shape, dim): + gaussian = random_gaussian(old_shape, dim) + + # reshape to new + new = gaussian.reshape(new_shape) + assert new.batch_shape == new_shape + + # reshape back to old + g = new.reshape(old_shape) + assert_close_gaussian(g, gaussian) + + +@pytest.mark.parametrize( + "shape,cat_dim,split", + [ + ((4, 7, 6), -1, (2, 1, 3)), + ((4, 7, 6), -2, (1, 1, 2, 3)), + ((4, 7, 6), 1, (1, 1, 2, 3)), + ], + ids=str, +) +@pytest.mark.parametrize("dim", [1, 2, 3]) +def test_cat(shape, cat_dim, split, dim): + assert sum(split) == shape[cat_dim] + gaussian = random_gaussian(shape, dim) + parts = [] + end = 0 + for size in split: + beg, end = end, end + size + if cat_dim == -1: + part = gaussian[..., beg:end] + elif cat_dim == -2: + part = gaussian[..., beg:end, :] + elif cat_dim == 1: + part = gaussian[:, beg:end] + else: + raise ValueError + parts.append(part) + + actual = Gaussian.cat(parts, cat_dim) + assert_close_gaussian(actual, gaussian) + + +@pytest.mark.parametrize("shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("dim", [1, 2, 3]) +@pytest.mark.parametrize("left", [0, 1, 2]) +@pytest.mark.parametrize("right", [0, 1, 2]) +def test_pad(shape, left, right, dim): + expected = random_gaussian(shape, dim) + padded = expected.event_pad(left=left, right=right) + assert padded.batch_shape == expected.batch_shape + assert padded.dim() == left + expected.dim() + right + mid = slice(left, padded.dim() - right) + assert_close(padded.info_vec[..., mid], expected.info_vec) + assert_close(padded.precision[..., mid, mid], expected.precision) + + +@pytest.mark.parametrize("shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("dim", [1, 2, 3]) +def test_add(shape, dim): + x = random_gaussian(shape, dim) + y = random_gaussian(shape, dim) + value = torch.randn(dim) + assert_close( + (x + y).log_density(value), x.log_density(value) + y.log_density(value) + ) + + +@pytest.mark.parametrize("sample_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("dim", [1, 2, 3]) +def test_rsample_shape(sample_shape, batch_shape, dim): + mvn = random_mvn(batch_shape, dim) + g = mvn_to_gaussian(mvn) + expected = mvn.rsample(sample_shape) + actual = g.rsample(sample_shape) + assert actual.dtype == expected.dtype + assert actual.shape == expected.shape + + +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("dim", [1, 2, 3]) +def test_rsample_distribution(batch_shape, dim): + num_samples = 20000 + mvn = random_mvn(batch_shape, dim) + g = mvn_to_gaussian(mvn) + expected = mvn.rsample((num_samples,)) + actual = g.rsample((num_samples,)) + + def get_moments(x): + mean = x.mean(0) + x = x - mean + cov = (x.unsqueeze(-1) * x.unsqueeze(-2)).mean(0) + std = cov.diagonal(dim1=-1, dim2=-2).sqrt() + corr = cov / (std.unsqueeze(-1) * std.unsqueeze(-2)) + return mean, std, corr + + expected_mean, expected_std, expected_corr = get_moments(expected) + actual_mean, actual_std, actual_corr = get_moments(actual) + assert_close(actual_mean, expected_mean, atol=0.1, rtol=0.02) + assert_close(actual_std, expected_std, atol=0.1, rtol=0.02) + assert_close(actual_corr, expected_corr, atol=0.05) + + +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("left", [1, 2, 3]) +@pytest.mark.parametrize("right", [1, 2, 3]) +def test_marginalize_shape(batch_shape, left, right): + dim = left + right + g = random_gaussian(batch_shape, dim) + assert g.marginalize(left=left).dim() == right + assert g.marginalize(right=right).dim() == left + + +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("left", [1, 2, 3]) +@pytest.mark.parametrize("right", [1, 2, 3]) +def test_marginalize(batch_shape, left, right): + dim = left + right + g = random_gaussian(batch_shape, dim) + assert_close(g.marginalize(left=left).event_logsumexp(), g.event_logsumexp()) + assert_close(g.marginalize(right=right).event_logsumexp(), g.event_logsumexp()) + + +@pytest.mark.parametrize("sample_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("left", [1, 2, 3]) +@pytest.mark.parametrize("right", [1, 2, 3]) +def test_marginalize_condition(sample_shape, batch_shape, left, right): + dim = left + right + g = random_gaussian(batch_shape, dim) + x = torch.randn(sample_shape + (1,) * len(batch_shape) + (right,)) + assert_close( + g.marginalize(left=left).log_density(x), g.condition(x).event_logsumexp() + ) + + +@pytest.mark.parametrize("sample_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("left", [1, 2, 3]) +@pytest.mark.parametrize("right", [1, 2, 3]) +def test_condition(sample_shape, batch_shape, left, right): + dim = left + right + gaussian = random_gaussian(batch_shape, dim) + gaussian.precision += torch.eye(dim) * 0.1 + value = torch.randn(sample_shape + (1,) * len(batch_shape) + (dim,)) + left_value, right_value = value[..., :left], value[..., left:] + + conditioned = gaussian.condition(right_value) + assert conditioned.batch_shape == sample_shape + gaussian.batch_shape + assert conditioned.dim() == left + + actual = conditioned.log_density(left_value) + expected = gaussian.log_density(value) + assert_close(actual, expected) + + # test left_condition + permute_conditioned = gaussian.left_condition(left_value) + assert permute_conditioned.batch_shape == sample_shape + gaussian.batch_shape + assert permute_conditioned.dim() == right + + permute_actual = permute_conditioned.log_density(right_value) + assert_close(permute_actual, expected) + + +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("dim", [1, 2, 3]) +def test_logsumexp(batch_shape, dim): + gaussian = random_gaussian(batch_shape, dim) + gaussian.info_vec *= 0.1 # approximately centered + gaussian.precision += torch.eye(dim) * 0.1 + + num_samples = 200000 + scale = 10 + samples = ( + torch.rand((num_samples,) + (1,) * len(batch_shape) + (dim,)) * scale + - scale / 2 + ) + expected = gaussian.log_density(samples).logsumexp(0) + math.log( + scale**dim / num_samples + ) + actual = gaussian.event_logsumexp() + assert_close(actual, expected, atol=0.05, rtol=0.05) + + +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("x_dim", [1, 2, 3]) +@pytest.mark.parametrize("y_dim", [1, 2, 3]) +def test_affine_normal(batch_shape, x_dim, y_dim): + matrix = torch.randn(batch_shape + (x_dim, y_dim)) + loc = torch.randn(batch_shape + (y_dim,)) + scale = torch.randn(batch_shape + (y_dim,)).exp() + y = torch.randn(batch_shape + (y_dim,)) + + normal = dist.Normal(loc, scale).to_event(1) + actual = matrix_and_mvn_to_gaussian(matrix, normal) + assert isinstance(actual, AffineNormal) + actual_like = actual.condition(y) + assert isinstance(actual_like, Gaussian) + + mvn = dist.MultivariateNormal(loc, scale_tril=scale.diag_embed()) + expected = matrix_and_mvn_to_gaussian(matrix, mvn) + assert isinstance(expected, Gaussian) + expected_like = expected.condition(y) + assert isinstance(expected_like, Gaussian) + + assert_close(actual_like.log_normalizer, expected_like.log_normalizer) + assert_close(actual_like.info_vec, expected_like.info_vec) + assert_close(actual_like.precision, expected_like.precision) + + x = torch.randn(batch_shape + (x_dim,)) + permute_actual = actual.left_condition(x) + assert isinstance(permute_actual, AffineNormal) + permute_actual = permute_actual.to_gaussian() + + permute_expected = expected.left_condition(y) + assert isinstance(permute_expected, Gaussian) + + assert_close(permute_actual.log_normalizer, permute_actual.log_normalizer) + assert_close(permute_actual.info_vec, permute_actual.info_vec) + assert_close(permute_actual.precision, permute_actual.precision) + + +@pytest.mark.parametrize("sample_shape", [(), (7,), (6, 5)], ids=str) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("dim", [1, 2, 3]) +def test_mvn_to_gaussian(sample_shape, batch_shape, dim): + mvn = random_mvn(batch_shape, dim) + gaussian = mvn_to_gaussian(mvn) + value = mvn.sample(sample_shape) + actual_log_prob = gaussian.log_density(value) + expected_log_prob = mvn.log_prob(value) + assert_close(actual_log_prob, expected_log_prob) + + +@pytest.mark.parametrize("sample_shape", [(), (7,), (6, 5)], ids=str) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("x_dim", [1, 2, 3]) +@pytest.mark.parametrize("y_dim", [1, 2, 3]) +def test_matrix_and_mvn_to_gaussian(sample_shape, batch_shape, x_dim, y_dim): + matrix = torch.randn(batch_shape + (x_dim, y_dim)) + y_mvn = random_mvn(batch_shape, y_dim) + xy_mvn = random_mvn(batch_shape, x_dim + y_dim) + gaussian = matrix_and_mvn_to_gaussian(matrix, y_mvn) + mvn_to_gaussian(xy_mvn) + xy = torch.randn(sample_shape + (1,) * len(batch_shape) + (x_dim + y_dim,)) + x, y = xy[..., :x_dim], xy[..., x_dim:] + y_pred = x.unsqueeze(-2).matmul(matrix).squeeze(-2) + actual_log_prob = gaussian.log_density(xy) + expected_log_prob = xy_mvn.log_prob(xy) + y_mvn.log_prob(y - y_pred) + assert_close(actual_log_prob, expected_log_prob) + + +@pytest.mark.parametrize("sample_shape", [(), (7,), (6, 5)], ids=str) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("x_dim", [1, 2, 3]) +@pytest.mark.parametrize("y_dim", [1, 2, 3]) +def test_matrix_and_mvn_to_gaussian_2(sample_shape, batch_shape, x_dim, y_dim): + matrix = torch.randn(batch_shape + (x_dim, y_dim)) + y_mvn = random_mvn(batch_shape, y_dim) + x_mvn = random_mvn(batch_shape, x_dim) + Mx_cov = matrix.transpose(-2, -1).matmul(x_mvn.covariance_matrix).matmul(matrix) + Mx_loc = matrix.transpose(-2, -1).matmul(x_mvn.loc.unsqueeze(-1)).squeeze(-1) + mvn = dist.MultivariateNormal(Mx_loc + y_mvn.loc, Mx_cov + y_mvn.covariance_matrix) + expected = mvn_to_gaussian(mvn) + + actual = gaussian_tensordot( + mvn_to_gaussian(x_mvn), matrix_and_mvn_to_gaussian(matrix, y_mvn), dims=x_dim + ) + assert_close_gaussian(expected, actual) + + +@pytest.mark.parametrize( + "x_batch_shape,y_batch_shape", + [ + ((), ()), + ((3,), ()), + ((), (3,)), + ((2, 1), (3,)), + ( + (2, 3), + ( + 2, + 3, + ), + ), + ], + ids=str, +) +@pytest.mark.parametrize( + "x_dim,y_dim,dot_dims", + [ + (0, 0, 0), + (0, 2, 0), + (1, 0, 0), + (2, 1, 0), + (3, 3, 3), + (3, 2, 1), + (3, 2, 2), + (5, 4, 2), + ], + ids=str, +) +@pytest.mark.parametrize("x_rank,y_rank", [(1, 1), (4, 1), (1, 4), (4, 4)], ids=str) +def test_gaussian_tensordot( + dot_dims, x_batch_shape, x_dim, x_rank, y_batch_shape, y_dim, y_rank +): + x_rank = min(x_rank, x_dim) + y_rank = min(y_rank, y_dim) + x = random_gaussian(x_batch_shape, x_dim, x_rank) + y = random_gaussian(y_batch_shape, y_dim, y_rank) + na = x_dim - dot_dims + nb = dot_dims + nc = y_dim - dot_dims + try: + torch.linalg.cholesky(x.precision[..., na:, na:] + y.precision[..., :nb, :nb]) + except Exception: + pytest.skip("Cannot marginalize the common variables of two Gaussians.") + + z = gaussian_tensordot(x, y, dot_dims) + assert z.dim() == x_dim + y_dim - 2 * dot_dims + + # We make these precision matrices positive definite to test the math + x.precision = x.precision + 1e-1 * torch.eye(x.dim()) + y.precision = y.precision + 1e-1 * torch.eye(y.dim()) + z = gaussian_tensordot(x, y, dot_dims) + # compare against broadcasting, adding, and marginalizing + precision = pad(x.precision, (0, nc, 0, nc)) + pad(y.precision, (na, 0, na, 0)) + info_vec = pad(x.info_vec, (0, nc)) + pad(y.info_vec, (na, 0)) + covariance = torch.inverse(precision) + loc = ( + covariance.matmul(info_vec.unsqueeze(-1)).squeeze(-1) + if info_vec.size(-1) > 0 + else info_vec + ) + z_covariance = torch.inverse(z.precision) + z_loc = z_covariance.matmul( + z.info_vec.view(z.info_vec.shape + (int(z.dim() > 0),)) + ).sum(-1) + assert_close(loc[..., :na], z_loc[..., :na]) + assert_close(loc[..., x_dim:], z_loc[..., na:]) + assert_close(covariance[..., :na, :na], z_covariance[..., :na, :na]) + assert_close(covariance[..., :na, x_dim:], z_covariance[..., :na, na:]) + assert_close(covariance[..., x_dim:, :na], z_covariance[..., na:, :na]) + assert_close(covariance[..., x_dim:, x_dim:], z_covariance[..., na:, na:]) + + # Assume a = c = 0, integrate out b + # FIXME: this might be not a stable way to compute integral + num_samples = 200000 + scale = 20 + # generate samples in [-10, 10] + value_b = torch.rand((num_samples,) + z.batch_shape + (nb,)) * scale - scale / 2 + value_x = pad(value_b, (na, 0)) + value_y = pad(value_b, (0, nc)) + expect = torch.logsumexp(x.log_density(value_x) + y.log_density(value_y), dim=0) + expect += math.log(scale**nb / num_samples) + actual = z.log_density(torch.zeros(z.batch_shape + (z.dim(),))) + # TODO(fehiepsi): find some condition to make this test stable, so we can compare large value + # log densities. + assert_close(actual.clamp(max=10.0), expect.clamp(max=10.0), atol=0.1, rtol=0.1) + + +@pytest.mark.stage("funsor") +@pytest.mark.parametrize("batch_shape", [(), (5,), (4, 2)], ids=str) +@pytest.mark.filterwarnings("ignore:torch.triangular_solve is deprecated") +def test_gaussian_funsor(batch_shape): + # This tests sample distribution, rsample gradients, log_prob, and log_prob + # gradients for both Pyro's and Funsor's Gaussian. + import funsor + + funsor.set_backend("torch") + num_samples = 100000 + + # Declare unconstrained parameters. + loc = torch.randn(batch_shape + (3,)).requires_grad_() + t = transform_to(constraints.positive_definite) + m = torch.randn(batch_shape + (3, 3)) + precision_unconstrained = t.inv(m @ m.transpose(-1, -2)).requires_grad_() + + # Transform to constrained space. + log_normalizer = torch.zeros(batch_shape) + precision = t(precision_unconstrained) + info_vec = (precision @ loc[..., None])[..., 0] + + def check_equal(actual, expected, atol=0.01, rtol=0): + assert_close(actual.data, expected.data, atol=atol, rtol=rtol) + grads = torch.autograd.grad( + (actual - expected).abs().sum(), + [loc, precision_unconstrained], + retain_graph=True, + ) + for grad in grads: + assert grad.abs().max() < atol + + entropy = dist.MultivariateNormal(loc, precision_matrix=precision).entropy() + + # Monte carlo estimate entropy via pyro. + p_gaussian = Gaussian(log_normalizer, info_vec, precision) + p_log_Z = p_gaussian.event_logsumexp() + p_rsamples = p_gaussian.rsample((num_samples,)) + pp_entropy = (p_log_Z - p_gaussian.log_density(p_rsamples)).mean(0) + check_equal(pp_entropy, entropy) + + # Monte carlo estimate entropy via funsor. + inputs = OrderedDict([(k, funsor.Bint[v]) for k, v in zip("ij", batch_shape)]) + inputs["x"] = funsor.Reals[3] + f_gaussian = funsor.gaussian.Gaussian(mean=loc, precision=precision, inputs=inputs) + f_log_Z = f_gaussian.reduce(funsor.ops.logaddexp, "x") + sample_inputs = OrderedDict(particle=funsor.Bint[num_samples]) + deltas = f_gaussian.sample("x", sample_inputs) + f_rsamples = funsor.montecarlo.extract_samples(deltas)["x"] + ff_entropy = (f_log_Z - f_gaussian(x=f_rsamples)).reduce( + funsor.ops.mean, "particle" + ) + check_equal(ff_entropy.data, entropy) + + # Check Funsor's .rsample against Pyro's .log_prob. + pf_entropy = (p_log_Z - p_gaussian.log_density(f_rsamples.data)).mean(0) + check_equal(pf_entropy, entropy) + + # Check Pyro's .rsample against Funsor's .log_prob. + fp_rsamples = funsor.Tensor(p_rsamples)["particle"] + for i in "ij"[: len(batch_shape)]: + fp_rsamples = fp_rsamples[i] + fp_entropy = (f_log_Z - f_gaussian(x=fp_rsamples)).reduce( + funsor.ops.mean, "particle" + ) + check_equal(fp_entropy.data, entropy) + + +@pytest.mark.parametrize("num_steps", list(range(1, 20))) +@pytest.mark.parametrize("state_dim", [1, 2, 3]) +@pytest.mark.parametrize("batch_shape", [(), (5,), (2, 4)], ids=str) +def test_sequential_gaussian_tensordot(batch_shape, state_dim, num_steps): + g = random_gaussian(batch_shape + (num_steps,), state_dim + state_dim) + actual = sequential_gaussian_tensordot(g) + assert actual.dim() == g.dim() + assert actual.batch_shape == batch_shape + + # Check against hand computation. + expected = g[..., 0] + for t in range(1, num_steps): + expected = gaussian_tensordot(expected, g[..., t], state_dim) + assert_close_gaussian(actual, expected) + + +@pytest.mark.parametrize("num_steps", list(range(1, 20))) +@pytest.mark.parametrize("state_dim", [1, 2, 3]) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("sample_shape", [(), (4,), (3, 2)], ids=str) +def test_sequential_gaussian_filter_sample( + sample_shape, batch_shape, state_dim, num_steps +): + init = random_gaussian(batch_shape, state_dim, requires_grad=True) + trans = random_gaussian( + batch_shape + (num_steps,), state_dim + state_dim, requires_grad=True + ) + duration = 1 + num_steps + + # Check shape. + sample = sequential_gaussian_filter_sample(init, trans, sample_shape) + assert sample.shape == sample_shape + batch_shape + (duration, state_dim) + + # Check gradients. + assert sample.requires_grad + loss = (torch.randn_like(sample) * sample).sum() + params = [init.info_vec, init.precision, trans.info_vec, trans.precision] + torch.autograd.grad(loss, params) + + +@pytest.mark.parametrize("num_steps", list(range(1, 20))) +@pytest.mark.parametrize("state_dim", [1, 2, 3]) +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)], ids=str) +@pytest.mark.parametrize("sample_shape", [(), (4,), (3, 2)], ids=str) +def test_sequential_gaussian_filter_sample_antithetic( + sample_shape, batch_shape, state_dim, num_steps +): + init = random_gaussian(batch_shape, state_dim) + trans = random_gaussian(batch_shape + (num_steps,), state_dim + state_dim) + duration = 1 + num_steps + + noise = torch.randn(sample_shape + batch_shape + (duration, state_dim)) + zero = torch.zeros_like(noise) + sample = sequential_gaussian_filter_sample(init, trans, sample_shape, noise) + mean = sequential_gaussian_filter_sample(init, trans, sample_shape, zero) + assert sample.shape == sample_shape + batch_shape + (duration, state_dim) + assert mean.shape == sample_shape + batch_shape + (duration, state_dim) + + # Check that antithetic sampling works as expected. + noise3 = torch.stack([noise, zero, -noise]) + sample3 = sequential_gaussian_filter_sample( + init, trans, (3,) + sample_shape, noise3 + ) + expected = torch.stack([sample, mean, 2 * mean - sample]) + assert torch.allclose(sample3, expected) + + +@pytest.mark.filterwarnings("ignore:Singular matrix in cholesky") +@pytest.mark.parametrize("num_steps", [10, 100, 1000, 10000, 100000, 1000000]) +def test_sequential_gaussian_filter_sample_stability(num_steps): + # This tests long-chain filtering at low precision. + zero = torch.zeros((), dtype=torch.float) + eye = torch.eye(4, dtype=torch.float) + noise = torch.randn(num_steps, 4, dtype=torch.float, requires_grad=True) + trans_matrix = torch.tensor( + [ + [ + 0.8571434617042542, + -0.23285813629627228, + 0.05360094830393791, + -0.017088839784264565, + ], + [ + 0.7609677314758301, + 0.6596274971961975, + -0.022656921297311783, + 0.05166701227426529, + ], + [ + 3.0979342460632324, + 5.446939945220947, + -0.3425334692001343, + 0.01096670888364315, + ], + [ + -1.8180007934570312, + -0.4965082108974457, + -0.006048532668501139, + -0.08525419235229492, + ], + ], + dtype=torch.float, + requires_grad=True, + ) + + init = Gaussian(zero, zero.expand(4), eye) + trans = matrix_and_gaussian_to_gaussian( + trans_matrix, Gaussian(zero, zero.expand(4), eye) + ).expand((num_steps - 1,)) + + # Check numerically stabilized value. + x = sequential_gaussian_filter_sample(init, trans, (), noise) + assert torch.isfinite(x).all() + + # Check gradients. + grads = torch.autograd.grad(x.sum(), [trans_matrix, noise]) + assert all(torch.isfinite(g).all() for g in grads) diff --git a/pyro/source/tests/ops/test_indexing.py b/pyro/source/tests/ops/test_indexing.py new file mode 100644 index 0000000000000000000000000000000000000000..133158f4496802b0908dd1478682c49a4fa15a66 --- /dev/null +++ b/pyro/source/tests/ops/test_indexing.py @@ -0,0 +1,169 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import itertools + +import pytest +import torch + +import pyro.distributions as dist +from pyro.distributions.util import broadcast_shape +from pyro.ops.indexing import Index, Vindex +from tests.common import assert_equal + + +class TensorMock: + def __getitem__(self, args): + return args + + +tensor_mock = TensorMock() + + +def z(*args): + return torch.zeros(*args, dtype=torch.long) + + +SHAPE_EXAMPLES = [ + ("Vindex(z(()))[...]", ()), + ("Vindex(z(2))[...]", (2,)), + ("Vindex(z(2))[...,0]", ()), + ("Vindex(z(2))[...,:]", (2,)), + ("Vindex(z(2))[...,z(3)]", (3,)), + ("Vindex(z(2))[0]", ()), + ("Vindex(z(2))[:]", (2,)), + ("Vindex(z(2))[z(3)]", (3,)), + ("Vindex(z(2,3))[...]", (2, 3)), + ("Vindex(z(2,3))[...,0]", (2,)), + ("Vindex(z(2,3))[...,:]", (2, 3)), + ("Vindex(z(2,3))[...,z(2)]", (2,)), + ("Vindex(z(2,3))[...,z(4,1)]", (4, 2)), + ("Vindex(z(2,3))[...,0,0]", ()), + ("Vindex(z(2,3))[...,0,:]", (3,)), + ("Vindex(z(2,3))[...,0,z(4)]", (4,)), + ("Vindex(z(2,3))[...,:,0]", (2,)), + ("Vindex(z(2,3))[...,:,:]", (2, 3)), + ("Vindex(z(2,3))[...,:,z(4)]", (4, 2)), + ("Vindex(z(2,3))[...,z(4),0]", (4,)), + ("Vindex(z(2,3))[...,z(4),:]", (4, 3)), + ("Vindex(z(2,3))[...,z(4),z(4)]", (4,)), + ("Vindex(z(2,3))[...,z(5,1),z(4)]", (5, 4)), + ("Vindex(z(2,3))[...,z(4),z(5,1)]", (5, 4)), + ("Vindex(z(2,3))[0,0]", ()), + ("Vindex(z(2,3))[0,:]", (3,)), + ("Vindex(z(2,3))[0,z(4)]", (4,)), + ("Vindex(z(2,3))[:,0]", (2,)), + ("Vindex(z(2,3))[:,:]", (2, 3)), + ("Vindex(z(2,3))[:,z(4)]", (4, 2)), + ("Vindex(z(2,3))[z(4),0]", (4,)), + ("Vindex(z(2,3))[z(4),:]", (4, 3)), + ("Vindex(z(2,3))[z(4)]", (4, 3)), + ("Vindex(z(2,3))[z(4),z(4)]", (4,)), + ("Vindex(z(2,3))[z(5,1),z(4)]", (5, 4)), + ("Vindex(z(2,3))[z(4),z(5,1)]", (5, 4)), + ("Vindex(z(2,3,4))[...]", (2, 3, 4)), + ("Vindex(z(2,3,4))[...,z(3)]", (2, 3)), + ("Vindex(z(2,3,4))[...,z(2,1)]", (2, 3)), + ("Vindex(z(2,3,4))[...,z(2,3)]", (2, 3)), + ("Vindex(z(2,3,4))[...,z(5,1,1)]", (5, 2, 3)), + ("Vindex(z(2,3,4))[...,z(2),0]", (2,)), + ("Vindex(z(2,3,4))[...,z(5,1),0]", (5, 2)), + ("Vindex(z(2,3,4))[...,z(2),:]", (2, 4)), + ("Vindex(z(2,3,4))[...,z(5,1),:]", (5, 2, 4)), + ("Vindex(z(2,3,4))[...,z(5),0,0]", (5,)), + ("Vindex(z(2,3,4))[...,z(5),0,:]", (5, 4)), + ("Vindex(z(2,3,4))[...,z(5),:,0]", (5, 3)), + ("Vindex(z(2,3,4))[...,z(5),:,:]", (5, 3, 4)), + ("Vindex(z(2,3,4))[0,0,z(5)]", (5,)), + ("Vindex(z(2,3,4))[0,:,z(5)]", (5, 3)), + ("Vindex(z(2,3,4))[0,z(5),0]", (5,)), + ("Vindex(z(2,3,4))[0,z(5),:]", (5, 4)), + ("Vindex(z(2,3,4))[0,z(5),z(5)]", (5,)), + ("Vindex(z(2,3,4))[0,z(5,1),z(6)]", (5, 6)), + ("Vindex(z(2,3,4))[0,z(6),z(5,1)]", (5, 6)), + ("Vindex(z(2,3,4))[:,0,z(5)]", (5, 2)), + ("Vindex(z(2,3,4))[:,:,z(5)]", (5, 2, 3)), + ("Vindex(z(2,3,4))[:,z(5),0]", (5, 2)), + ("Vindex(z(2,3,4))[:,z(5),:]", (5, 2, 4)), + ("Vindex(z(2,3,4))[:,z(5),z(5)]", (5, 2)), + ("Vindex(z(2,3,4))[:,z(5,1),z(6)]", (5, 6, 2)), + ("Vindex(z(2,3,4))[:,z(6),z(5,1)]", (5, 6, 2)), + ("Vindex(z(2,3,4))[z(5),0,0]", (5,)), + ("Vindex(z(2,3,4))[z(5),0,:]", (5, 4)), + ("Vindex(z(2,3,4))[z(5),:,0]", (5, 3)), + ("Vindex(z(2,3,4))[z(5),:,:]", (5, 3, 4)), + ("Vindex(z(2,3,4))[z(5),0,z(5)]", (5,)), + ("Vindex(z(2,3,4))[z(5,1),0,z(6)]", (5, 6)), + ("Vindex(z(2,3,4))[z(6),0,z(5,1)]", (5, 6)), + ("Vindex(z(2,3,4))[z(5),:,z(5)]", (5, 3)), + ("Vindex(z(2,3,4))[z(5,1),:,z(6)]", (5, 6, 3)), + ("Vindex(z(2,3,4))[z(6),:,z(5,1)]", (5, 6, 3)), +] + + +@pytest.mark.parametrize("expression,expected_shape", SHAPE_EXAMPLES, ids=str) +def test_shape(expression, expected_shape): + result = eval(expression) + assert result.shape == expected_shape + + +@pytest.mark.parametrize("event_shape", [(), (7,)], ids=str) +@pytest.mark.parametrize("j_shape", [(), (2,), (3, 1), (4, 1, 1), (4, 3, 2)], ids=str) +@pytest.mark.parametrize("i_shape", [(), (2,), (3, 1), (4, 1, 1), (4, 3, 2)], ids=str) +@pytest.mark.parametrize("x_shape", [(), (2,), (3, 1), (4, 1, 1), (4, 3, 2)], ids=str) +def test_value(x_shape, i_shape, j_shape, event_shape): + x = torch.rand(x_shape + (5, 6) + event_shape) + i = dist.Categorical(torch.ones(5)).sample(i_shape) + j = dist.Categorical(torch.ones(6)).sample(j_shape) + if event_shape: + actual = Vindex(x)[..., i, j, :] + else: + actual = Vindex(x)[..., i, j] + + shape = broadcast_shape(x_shape, i_shape, j_shape) + x = x.expand(shape + (5, 6) + event_shape) + i = i.expand(shape) + j = j.expand(shape) + expected = x.new_empty(shape + event_shape) + for ind in itertools.product(*map(range, shape)) if shape else [()]: + expected[ind] = x[ind + (i[ind].item(), j[ind].item())] + assert_equal(actual, expected) + + +@pytest.mark.parametrize("prev_enum_dim,curr_enum_dim", [(-3, -4), (-4, -5), (-5, -3)]) +def test_hmm_example(prev_enum_dim, curr_enum_dim): + hidden_dim = 8 + probs_x = torch.rand(hidden_dim, hidden_dim, hidden_dim) + x_prev = torch.arange(hidden_dim).reshape((-1,) + (1,) * (-1 - prev_enum_dim)) + x_curr = torch.arange(hidden_dim).reshape((-1,) + (1,) * (-1 - curr_enum_dim)) + + expected = probs_x[ + x_prev.unsqueeze(-1), x_curr.unsqueeze(-1), torch.arange(hidden_dim) + ] + actual = Vindex(probs_x)[x_prev, x_curr, :] + assert_equal(actual, expected) + + +@pytest.mark.parametrize( + "args,expected", + [ + (0, 0), + (1, 1), + (None, None), + (slice(1, 2, 3), slice(1, 2, 3)), + (Ellipsis, Ellipsis), + ( + (0, 1, None, slice(1, 2, 3), Ellipsis), + (0, 1, None, slice(1, 2, 3), Ellipsis), + ), + ( + ((0, 1), (None, slice(1, 2, 3)), Ellipsis), + (0, 1, None, slice(1, 2, 3), Ellipsis), + ), + ((Ellipsis, None), (Ellipsis, None)), + ((Ellipsis, (Ellipsis, None)), (Ellipsis, None)), + ((Ellipsis, (Ellipsis, None, None)), (Ellipsis, None, None)), + ], +) +def test_index(args, expected): + assert Index(tensor_mock)[args] == expected diff --git a/pyro/source/tests/ops/test_integrator.py b/pyro/source/tests/ops/test_integrator.py new file mode 100644 index 0000000000000000000000000000000000000000..db1053d86c8021ee01190e6c26f694de0ec8be3e --- /dev/null +++ b/pyro/source/tests/ops/test_integrator.py @@ -0,0 +1,180 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging +from collections import namedtuple + +import pytest +import torch + +from pyro.ops.integrator import velocity_verlet +from tests.common import assert_equal + +logger = logging.getLogger(__name__) + + +TEST_EXAMPLES = [] +EXAMPLE_IDS = [] + +ModelArgs = namedtuple( + "model_args", ["step_size", "num_steps", "q_i", "p_i", "q_f", "p_f", "prec"] +) +Example = namedtuple("test_case", ["model", "args"]) + + +def register_model(init_args): + """ + Register the model along with each of the model arguments + as test examples. + """ + + def register_fn(model): + for args in init_args: + test_example = Example(model, args) + TEST_EXAMPLES.append(test_example) + EXAMPLE_IDS.append(model.__name__) + + return register_fn + + +@register_model( + [ + ModelArgs( + step_size=0.01, + num_steps=100, + q_i={"x": torch.tensor([0.0])}, + p_i={"x": torch.tensor([1.0])}, + q_f={"x": torch.sin(torch.tensor([1.0]))}, + p_f={"x": torch.cos(torch.tensor([1.0]))}, + prec=1e-4, + ) + ] +) +class HarmonicOscillator: + @staticmethod + def kinetic_grad(p): + return p + + @staticmethod + def energy(q, p): + return 0.5 * p["x"] ** 2 + 0.5 * q["x"] ** 2 + + @staticmethod + def potential_fn(q): + return 0.5 * q["x"] ** 2 + + +@register_model( + [ + ModelArgs( + step_size=0.01, + num_steps=628, + q_i={"x": torch.tensor([1.0]), "y": torch.tensor([0.0])}, + p_i={"x": torch.tensor([0.0]), "y": torch.tensor([1.0])}, + q_f={"x": torch.tensor([1.0]), "y": torch.tensor([0.0])}, + p_f={"x": torch.tensor([0.0]), "y": torch.tensor([1.0])}, + prec=5.0e-3, + ) + ] +) +class CircularPlanetaryMotion: + @staticmethod + def kinetic_grad(p): + return p + + @staticmethod + def energy(q, p): + return ( + 0.5 * p["x"] ** 2 + + 0.5 * p["y"] ** 2 + - 1.0 / torch.pow(q["x"] ** 2 + q["y"] ** 2, 0.5) + ) + + @staticmethod + def potential_fn(q): + return -1.0 / torch.pow(q["x"] ** 2 + q["y"] ** 2, 0.5) + + +@register_model( + [ + ModelArgs( + step_size=0.1, + num_steps=1810, + q_i={"x": torch.tensor([0.02])}, + p_i={"x": torch.tensor([0.0])}, + q_f={"x": torch.tensor([-0.02])}, + p_f={"x": torch.tensor([0.0])}, + prec=1.0e-4, + ) + ] +) +class QuarticOscillator: + @staticmethod + def kinetic_grad(p): + return p + + @staticmethod + def energy(q, p): + return 0.5 * p["x"] ** 2 + 0.25 * torch.pow(q["x"], 4.0) + + @staticmethod + def potential_fn(q): + return 0.25 * torch.pow(q["x"], 4.0) + + +@pytest.mark.parametrize("example", TEST_EXAMPLES, ids=EXAMPLE_IDS) +def test_trajectory(example): + model, args = example + q_f, p_f, _, _ = velocity_verlet( + args.q_i, + args.p_i, + model.potential_fn, + model.kinetic_grad, + args.step_size, + args.num_steps, + ) + logger.info("initial q: {}".format(args.q_i)) + logger.info("final q: {}".format(q_f)) + assert_equal(q_f, args.q_f, args.prec) + assert_equal(p_f, args.p_f, args.prec) + + +@pytest.mark.parametrize("example", TEST_EXAMPLES, ids=EXAMPLE_IDS) +def test_energy_conservation(example): + model, args = example + q_f, p_f, _, _ = velocity_verlet( + args.q_i, + args.p_i, + model.potential_fn, + model.kinetic_grad, + args.step_size, + args.num_steps, + ) + energy_initial = model.energy(args.q_i, args.p_i) + energy_final = model.energy(q_f, p_f) + logger.info("initial energy: {}".format(energy_initial.item())) + logger.info("final energy: {}".format(energy_final.item())) + assert_equal(energy_final, energy_initial) + + +@pytest.mark.parametrize("example", TEST_EXAMPLES, ids=EXAMPLE_IDS) +def test_time_reversibility(example): + model, args = example + q_forward, p_forward, _, _ = velocity_verlet( + args.q_i, + args.p_i, + model.potential_fn, + model.kinetic_grad, + args.step_size, + args.num_steps, + ) + p_reverse = {key: -val for key, val in p_forward.items()} + q_f, p_f, _, _ = velocity_verlet( + q_forward, + p_reverse, + model.potential_fn, + model.kinetic_grad, + args.step_size, + args.num_steps, + ) + assert_equal(q_f, args.q_i, 1e-5) diff --git a/pyro/source/tests/ops/test_jit.py b/pyro/source/tests/ops/test_jit.py new file mode 100644 index 0000000000000000000000000000000000000000..45cb42f0c424dba7f8d70c8da2a70f6ed1a91a94 --- /dev/null +++ b/pyro/source/tests/ops/test_jit.py @@ -0,0 +1,42 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +import pyro.ops.jit +from tests.common import assert_equal + + +def test_varying_len_args(): + def fn(*args): + return sum(args) + + jit_fn = pyro.ops.jit.trace(fn) + examples = [ + [torch.tensor(1.0)], + [torch.tensor(2.0), torch.tensor(3.0)], + [torch.tensor(4.0), torch.tensor(5.0), torch.tensor(6.0)], + ] + for args in examples: + assert_equal(jit_fn(*args), fn(*args)) + + +def test_varying_kwargs(): + def fn(x, scale=1.0): + return x * scale + + jit_fn = pyro.ops.jit.trace(fn) + x = torch.tensor(1.0) + for scale in [-1.0, 0.0, 1.0, 10.0]: + assert_equal(jit_fn(x, scale=scale), fn(x, scale=scale)) + + +def test_varying_unhashable_kwargs(): + def fn(x, config={}): + return x * config.get(scale, 1.0) + + jit_fn = pyro.ops.jit.trace(fn) + x = torch.tensor(1.0) + for scale in [-1.0, 0.0, 1.0, 10.0]: + config = {"scale": scale} + assert_equal(jit_fn(x, config=config), fn(x, config=config)) diff --git a/pyro/source/tests/ops/test_linalg.py b/pyro/source/tests/ops/test_linalg.py new file mode 100644 index 0000000000000000000000000000000000000000..5b4497567dacf906d2532da817023166ecd2d171 --- /dev/null +++ b/pyro/source/tests/ops/test_linalg.py @@ -0,0 +1,37 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +from pyro.ops.linalg import rinverse +from tests.common import assert_equal + + +@pytest.mark.parametrize( + "A", + [ + torch.tensor([[17.0]]), + torch.tensor([[1.0, 2.0], [2.0, -3.0]]), + torch.tensor([[1.0, 2, 0], [2, -2, 4], [0, 4, 5]]), + torch.tensor([[1.0, 2, 0, 7], [2, -2, 4, -1], [0, 4, 5, 8], [7, -1, 8, 1]]), + torch.tensor( + [ + [1.0, 2, 0, 7, 0], + [2, -2, 4, -1, 2], + [0, 4, 5, 8, -4], + [7, -1, 8, 1, -3], + [0, 2, -4, -3, -1], + ] + ), + torch.eye(40), + ], +) +@pytest.mark.parametrize("use_sym", [True, False]) +def test_sym_rinverse(A, use_sym): + d = A.shape[-1] + assert_equal(rinverse(A, sym=use_sym), torch.inverse(A), prec=1e-8) + assert_equal(torch.mm(A, rinverse(A, sym=use_sym)), torch.eye(d), prec=1e-8) + batched_A = A.unsqueeze(0).unsqueeze(0).expand(5, 4, d, d) + expected_A = torch.inverse(A).unsqueeze(0).unsqueeze(0).expand(5, 4, d, d) + assert_equal(rinverse(batched_A, sym=use_sym), expected_A, prec=1e-8) diff --git a/pyro/source/tests/ops/test_newton.py b/pyro/source/tests/ops/test_newton.py new file mode 100644 index 0000000000000000000000000000000000000000..879919602e268e8308ae79f1543bde94ea7f5023 --- /dev/null +++ b/pyro/source/tests/ops/test_newton.py @@ -0,0 +1,141 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import itertools +import logging + +import pytest +import torch +from torch.autograd import grad + +from pyro.ops.newton import newton_step +from tests.common import assert_equal + +logger = logging.getLogger(__name__) + + +def random_inside_unit_circle(shape, requires_grad=False): + x = torch.randn(shape) + x = x / (1 + x.pow(2).sum(-1, True)) + assert (x.pow(2).sum(-1) < 1).all() + x = x.detach() + if requires_grad: + x.requires_grad = requires_grad + return x + + +@pytest.mark.parametrize("batch_shape", [(), (1,), (2,), (10,), (3, 2), (2, 3)]) +@pytest.mark.parametrize("trust_radius", [None, 2.0, 100.0]) +@pytest.mark.parametrize("dims", [1, 2, 3]) +def test_newton_step(batch_shape, trust_radius, dims): + batch_shape = torch.Size(batch_shape) + mode = 0.5 * random_inside_unit_circle(batch_shape + (dims,), requires_grad=True) + x = 0.5 * random_inside_unit_circle(batch_shape + (dims,), requires_grad=True) + if trust_radius is not None: + assert trust_radius >= 2, "(x, mode) may be farther apart than trust_radius" + + # create a quadratic loss function + flat_x = x.reshape(-1, dims) + flat_mode = mode.reshape(-1, dims) + noise = torch.randn(flat_x.shape[0], dims, 1) + flat_hessian = noise.matmul(noise.transpose(-1, -2)) + torch.eye(dims) + hessian = flat_hessian.reshape(batch_shape + (dims, dims)) + diff = (flat_x - flat_mode).unsqueeze(-2) + loss = 0.5 * diff.bmm(flat_hessian).bmm(diff.transpose(-1, -2)).sum() + + # run method under test + x_updated, cov = newton_step(loss, x, trust_radius=trust_radius) + + # check shapes + assert x_updated.shape == x.shape + assert cov.shape == hessian.shape + + # check values + assert_equal(x_updated, mode, prec=1e-6, msg="{} vs {}".format(x_updated, mode)) + flat_cov = cov.reshape(flat_hessian.shape) + assert_equal( + flat_cov, + flat_cov.transpose(-1, -2), + msg="covariance is not symmetric: {}".format(flat_cov), + ) + actual_eye = torch.bmm(flat_cov, flat_hessian) + expected_eye = torch.eye(dims).expand(actual_eye.shape) + assert_equal( + actual_eye, expected_eye, prec=1e-4, msg="bad covariance {}".format(actual_eye) + ) + + # check gradients + for i in itertools.product(*map(range, mode.shape)): + expected_grad = torch.zeros(mode.shape) + expected_grad[i] = 1 + actual_grad = grad(x_updated[i], [mode], create_graph=True)[0] + assert_equal( + actual_grad, + expected_grad, + prec=1e-5, + msg="\n".join( + [ + "bad gradient at index {}".format(i), + "expected {}".format(expected_grad), + "actual {}".format(actual_grad), + ] + ), + ) + + +@pytest.mark.parametrize("trust_radius", [None, 0.1, 1.0, 10.0]) +@pytest.mark.parametrize("dims", [1, 2, 3]) +def test_newton_step_trust(trust_radius, dims): + batch_size = 100 + batch_shape = torch.Size((batch_size,)) + mode = random_inside_unit_circle(batch_shape + (dims,), requires_grad=True) + 1 + x = random_inside_unit_circle(batch_shape + (dims,), requires_grad=True) - 1 + + # create a quadratic loss function + noise = torch.randn(batch_size, dims, dims) + hessian = noise + noise.transpose(-1, -2) + diff = (x - mode).unsqueeze(-2) + loss = 0.5 * diff.bmm(hessian).bmm(diff.transpose(-1, -2)).sum() + + # run method under test + x_updated, cov = newton_step(loss, x, trust_radius=trust_radius) + + # check shapes + assert x_updated.shape == x.shape + assert cov.shape == hessian.shape + + # check values + if trust_radius is None: + assert ((x - x_updated).pow(2).sum(-1) > 1.0).any(), "test is too weak" + else: + assert ( + (x - x_updated).pow(2).sum(-1) <= 1e-8 + trust_radius**2 + ).all(), "trust region violated" + + +@pytest.mark.parametrize("trust_radius", [None, 0.1, 1.0, 10.0]) +@pytest.mark.parametrize("dims", [1, 2, 3]) +def test_newton_step_converges(trust_radius, dims): + batch_size = 100 + batch_shape = torch.Size((batch_size,)) + mode = random_inside_unit_circle(batch_shape + (dims,), requires_grad=True) - 1 + x = random_inside_unit_circle(batch_shape + (dims,), requires_grad=True) + 1 + + # create a quadratic loss function + noise = torch.randn(batch_size, dims, 1) + hessian = noise.matmul(noise.transpose(-1, -2)) + 0.01 * torch.eye(dims) + + def loss_fn(x): + diff = (x - mode).unsqueeze(-2) + return 0.5 * diff.bmm(hessian).bmm(diff.transpose(-1, -2)).sum() + + # check convergence + for i in range(100): + x = x.detach() + x.requires_grad = True + loss = loss_fn(x) + x, cov = newton_step(loss, x, trust_radius=trust_radius) + if ((x - mode).pow(2).sum(-1) < 1e-4).all(): + logger.debug("Newton iteration converged after {} steps".format(2 + i)) + return + pytest.fail("Newton iteration did not converge") diff --git a/pyro/source/tests/ops/test_packed.py b/pyro/source/tests/ops/test_packed.py new file mode 100644 index 0000000000000000000000000000000000000000..56564d6aed2340ac6a5f00ca029f80375bc69f51 --- /dev/null +++ b/pyro/source/tests/ops/test_packed.py @@ -0,0 +1,74 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import itertools +import random + +import pytest +import torch +from torch.distributions.utils import broadcast_all + +from pyro.ops import packed +from tests.common import assert_equal + +EXAMPLE_DIMS = [ + "".join(dims) + for num_dims in range(5) + for dims in itertools.permutations("abcd"[:num_dims]) +] + + +@pytest.mark.parametrize("dims", EXAMPLE_DIMS) +def test_unpack_pack(dims): + dim_to_symbol = {} + symbol_to_dim = {} + for symbol, dim in zip("abcd", range(-1, -5, -1)): + dim_to_symbol[dim] = symbol + symbol_to_dim[symbol] = dim + shape = tuple(range(2, 2 + len(dims))) + x = torch.randn(shape) + + pack_x = packed.pack(x, dim_to_symbol) + unpack_pack_x = packed.unpack(pack_x, symbol_to_dim) + assert_equal(unpack_pack_x, x) + + sort_dims = "".join(sorted(dims)) + if sort_dims != pack_x._pyro_dims: + sort_pack_x = pack_x.permute(*(pack_x._pyro_dims.index(d) for d in sort_dims)) + sort_pack_x._pyro_dims = sort_dims + unpack_sort_pack_x = packed.unpack(sort_pack_x, symbol_to_dim) + assert_equal(unpack_sort_pack_x, x) + + +EXAMPLE_SHAPES = [ + [], + [()], + [(), ()], + [(2,), (3, 1)], + [(2,), (3, 1), (3, 2)], +] + + +def make_inputs(shapes, num_numbers=0): + inputs = [torch.randn(shape) for shape in shapes] + num_symbols = max(map(len, shapes)) if shapes else 0 + for _ in range(num_numbers): + inputs.append(random.random()) + dim_to_symbol = {} + symbol_to_dim = {} + for dim, symbol in zip(range(-num_symbols, 0), "abcdefghijklmnopqrstuvwxyz"): + dim_to_symbol[dim] = symbol + symbol_to_dim[symbol] = dim + return inputs, dim_to_symbol, symbol_to_dim + + +@pytest.mark.parametrize("shapes", EXAMPLE_SHAPES) +def test_broadcast_all(shapes): + inputs, dim_to_symbol, symbol_to_dim = make_inputs(shapes) + packed_inputs = [packed.pack(x, dim_to_symbol) for x in inputs] + packed_outputs = packed.broadcast_all(*packed_inputs) + actual = tuple(packed.unpack(x, symbol_to_dim) for x in packed_outputs) + expected = broadcast_all(*inputs) if inputs else [] + assert len(actual) == len(expected) + for a, e in zip(actual, expected): + assert_equal(a, e) diff --git a/pyro/source/tests/ops/test_provenance.py b/pyro/source/tests/ops/test_provenance.py new file mode 100644 index 0000000000000000000000000000000000000000..478ae27f0560b32535d6991d167545cfe0f9b055 --- /dev/null +++ b/pyro/source/tests/ops/test_provenance.py @@ -0,0 +1,68 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +from pyro.ops.provenance import ProvenanceTensor, get_provenance, track_provenance +from tests.common import assert_equal, requires_cuda + + +@requires_cuda +@pytest.mark.parametrize( + "dtype1", + [ + torch.float16, + torch.float32, + torch.float64, + torch.int8, + torch.int16, + torch.int32, + torch.int64, + torch.uint8, + ], +) +@pytest.mark.parametrize( + "dtype2", + [ + torch.float16, + torch.float32, + torch.float64, + torch.int8, + torch.int16, + torch.int32, + torch.int64, + torch.uint8, + ], +) +def test_provenance_tensor(dtype1, dtype2): + device = torch.device("cuda") + x = torch.tensor([1, 2, 3], dtype=dtype1) + y = ProvenanceTensor(x, frozenset(["x"])) + z = torch.as_tensor(y, device=device, dtype=dtype2) + + assert x.shape == y.shape == z.shape + assert_equal(x, z.cpu()) + + +@pytest.mark.parametrize( + "x", + [ + torch.tensor([1, 2, 3]), + track_provenance(torch.tensor([1, 2, 3]), frozenset("y")), + frozenset([torch.tensor([0, 1]), torch.tensor([2, 3])]), + set([torch.tensor([0, 1]), torch.tensor([2, 3])]), + [torch.tensor([0, 1]), torch.tensor([2, 3])], + (torch.tensor([0, 1]), torch.tensor([2, 3])), + {"a": torch.tensor([0, 1]), "b": torch.tensor([2, 3])}, + { + "a": track_provenance(torch.tensor([0, 1]), frozenset("y")), + "b": [torch.tensor([2, 3]), torch.tensor([4, 5])], + }, + ], +) +def test_track_provenance(x): + new_provenance = frozenset("x") + old_provenance = get_provenance(x) + provenance = old_provenance | new_provenance + assert provenance == get_provenance(track_provenance(x, new_provenance)) diff --git a/pyro/source/tests/ops/test_special.py b/pyro/source/tests/ops/test_special.py new file mode 100644 index 0000000000000000000000000000000000000000..111ee7cc9d8d947ec378d096615da3516062b68e --- /dev/null +++ b/pyro/source/tests/ops/test_special.py @@ -0,0 +1,103 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch +from scipy.special import iv +from torch import tensor +from torch.autograd import grad + +from pyro.ops.special import get_quad_rule, log_beta, log_binomial, log_I1, safe_log +from tests.common import assert_equal + + +def test_safe_log(): + # Test values. + x = torch.randn(1000).exp().requires_grad_() + expected = x.log() + actual = safe_log(x) + assert_equal(actual, expected) + assert_equal(grad(actual.sum(), [x])[0], grad(expected.sum(), [x])[0]) + + # Test gradients. + x = torch.tensor(0.0, requires_grad=True) + assert not torch.isfinite(grad(x.log(), [x])[0]) + assert torch.isfinite(grad(safe_log(x), [x])[0]) + + +@pytest.mark.parametrize( + "tol", + [ + 1e-8, + 1e-6, + 1e-4, + 1e-2, + 0.02, + 0.05, + 0.1, + 0.2, + 0.1, + 1.0, + ], +) +def test_log_beta_stirling(tol): + x = torch.logspace(-5, 5, 200) + y = x.unsqueeze(-1) + + expected = log_beta(x, y) + actual = log_beta(x, y, tol=tol) + + assert (actual <= expected).all() + assert (expected < actual + tol).all() + + +@pytest.mark.parametrize( + "tol", + [ + 1e-8, + 1e-6, + 1e-4, + 1e-2, + 0.02, + 0.05, + 0.1, + 0.2, + 0.1, + 1.0, + ], +) +def test_log_binomial_stirling(tol): + k = torch.arange(200.0) + n_minus_k = k.unsqueeze(-1) + n = k + n_minus_k + + # Test binomial coefficient choose(n, k). + expected = (n + 1).lgamma() - (k + 1).lgamma() - (n_minus_k + 1).lgamma() + actual = log_binomial(n, k, tol=tol) + + assert (actual - expected).abs().max() < tol + + +@pytest.mark.parametrize("order", [0, 1, 5, 10, 20]) +@pytest.mark.parametrize("value", [0.01, 0.1, 1.0, 10.0, 100.0]) +def test_log_I1(order, value): + value = tensor([value]) + expected = torch.tensor([iv(i, value.numpy()) for i in range(order + 1)]).log() + actual = log_I1(order, value) + assert_equal(actual, expected) + + +def test_log_I1_shapes(): + assert_equal(log_I1(10, tensor(0.6)).shape, torch.Size([11, 1])) + assert_equal(log_I1(10, tensor([0.6])).shape, torch.Size([11, 1])) + assert_equal(log_I1(10, tensor([[0.6]])).shape, torch.Size([11, 1, 1])) + assert_equal(log_I1(10, tensor([0.6, 0.2])).shape, torch.Size([11, 2])) + assert_equal(log_I1(0, tensor(0.6)).shape, torch.Size((1, 1))) + + +@pytest.mark.parametrize("sigma", [0.5, 1.25]) +def test_get_quad_rule(sigma): + quad_points, log_weights = get_quad_rule(32, torch.zeros(1)) + quad_points *= sigma # transform to N(0, sigma) gaussian + variance = torch.logsumexp(quad_points.pow(2.0).log() + log_weights, axis=0).exp() + assert_equal(sigma**2, variance.item()) diff --git a/pyro/source/tests/ops/test_ssm_gp.py b/pyro/source/tests/ops/test_ssm_gp.py new file mode 100644 index 0000000000000000000000000000000000000000..1a792f80d52e8f138d20bb8d607304ad9b0fd2b2 --- /dev/null +++ b/pyro/source/tests/ops/test_ssm_gp.py @@ -0,0 +1,35 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +from pyro.ops.ssm_gp import MaternKernel +from tests.common import assert_equal + + +@pytest.mark.parametrize("num_gps", [1, 2, 3]) +@pytest.mark.parametrize("nu", [0.5, 1.5, 2.5]) +def test_matern_kernel(num_gps, nu): + mk = MaternKernel( + nu=nu, num_gps=num_gps, length_scale_init=0.1 + torch.rand(num_gps) + ) + + dt = torch.rand(1).item() + forward = mk.transition_matrix(dt) + backward = mk.transition_matrix(-dt) + forward_backward = torch.matmul(forward, backward) + + # going forward dt in time and then backward dt in time should bring us back to the identity + eye = ( + torch.eye(mk.state_dim).unsqueeze(0).expand(num_gps, mk.state_dim, mk.state_dim) + ) + assert_equal(forward_backward, eye) + + # let's just check that these are PSD + torch.linalg.cholesky(mk.stationary_covariance()) + torch.linalg.cholesky(mk.process_covariance(forward)) + + # evolving forward infinitesimally should yield the identity + nudge = mk.transition_matrix(torch.tensor([1.0e-9])) + assert_equal(nudge, eye) diff --git a/pyro/source/tests/ops/test_stats.py b/pyro/source/tests/ops/test_stats.py new file mode 100644 index 0000000000000000000000000000000000000000..d52ea0f6f277e834c18fc535c341011724bd195e --- /dev/null +++ b/pyro/source/tests/ops/test_stats.py @@ -0,0 +1,375 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import warnings + +import pytest +import torch + +from pyro.ops.stats import ( + _cummin, + autocorrelation, + autocovariance, + crps_empirical, + effective_sample_size, + energy_score_empirical, + fit_generalized_pareto, + gelman_rubin, + hpdi, + pi, + quantile, + resample, + split_gelman_rubin, + waic, + weighed_quantile, +) +from tests.common import assert_close, assert_equal, xfail_if_not_implemented + + +@pytest.mark.parametrize("replacement", [True, False]) +def test_resample(replacement): + x = torch.empty(10000, 2) + x[:, 0].normal_(3, 4) + x[:, 1].normal_(5, 6) + + num_samples = 5000 + y = resample(x, num_samples=num_samples, replacement=replacement) + z = resample(x.t(), num_samples=num_samples, dim=1, replacement=replacement) + if not replacement: + assert_equal(torch.unique(y.reshape(-1)).numel(), y.numel()) + assert_equal(torch.unique(z.reshape(-1)).numel(), z.numel()) + assert_equal(y.shape, torch.Size([num_samples, 2])) + assert_equal(z.shape, torch.Size([2, num_samples])) + assert_equal(y.mean(dim=0), torch.tensor([3.0, 5.0]), prec=0.2) + assert_equal(z.mean(dim=1), torch.tensor([3.0, 5.0]), prec=0.2) + assert_equal(y.std(dim=0), torch.tensor([4.0, 6.0]), prec=0.2) + assert_equal(z.std(dim=1), torch.tensor([4.0, 6.0]), prec=0.2) + + +@pytest.mark.init(rng_seed=3) +def test_quantile(): + x = torch.tensor([0.0, 1.0, 2.0]) + y = torch.rand(2000) + z = torch.randn(2000) + + assert_equal( + quantile(x, probs=[0.0, 0.4, 0.5, 1.0]), torch.tensor([0.0, 0.8, 1.0, 2.0]) + ) + assert_equal(quantile(y, probs=0.2), torch.tensor(0.2), prec=0.02) + assert_equal(quantile(z, probs=0.8413), torch.tensor(1.0), prec=0.02) + + +@pytest.mark.init(rng_seed=3) +def test_weighed_quantile(): + # Fixed values test + input = torch.Tensor([[10, 50, 40], [20, 30, 0]]) + probs = [0.2, 0.8] + log_weights = torch.Tensor([0.4, 0.5, 0.1]).log() + result = weighed_quantile(input, probs, log_weights, -1) + assert_equal(result, torch.Tensor([[40.4, 47.6], [9.0, 26.4]])) + + # Random values test + dist = torch.distributions.normal.Normal(0, 1) + input = dist.sample((100000,)) + probs = [0.1, 0.7, 0.95] + log_weights = dist.log_prob(input) + result = weighed_quantile(input, probs, log_weights) + result_dist = torch.distributions.normal.Normal(0, torch.tensor(0.5).sqrt()) + assert_equal(result, result_dist.icdf(torch.Tensor(probs)), prec=0.01) + + +def test_pi(): + x = torch.randn(1000).exp() + assert_equal(pi(x, prob=0.8), quantile(x, probs=[0.1, 0.9])) + + +@pytest.mark.init(rng_seed=3) +def test_hpdi(): + x = torch.randn(20000) + assert_equal(hpdi(x, prob=0.8), pi(x, prob=0.8), prec=0.01) + + x = torch.empty(20000).exponential_(1) + assert_equal(hpdi(x, prob=0.2), torch.tensor([0.0, 0.22]), prec=0.01) + + +def _quantile(x, dim=0): + return quantile(x, probs=[0.1, 0.6], dim=dim) + + +def _pi(x, dim=0): + return pi(x, prob=0.8, dim=dim) + + +def _hpdi(x, dim=0): + return hpdi(x, prob=0.8, dim=dim) + + +@pytest.mark.parametrize("statistics", [_quantile, _pi, _hpdi]) +@pytest.mark.parametrize("sample_shape", [(), (3,), (2, 3)]) +def test_statistics_A_ok_with_sample_shape(statistics, sample_shape): + xs = torch.rand((10,) + torch.Size(sample_shape)) + y = statistics(xs) + + # test correct shape + assert_equal(y.shape, torch.Size([2]) + xs.shape[1:]) + + # test correct batch calculation + batch_statistics = [] + for x in xs.reshape(10, -1).split(1, dim=1): + batch_statistics.append(statistics(x)) + assert_equal(torch.cat(batch_statistics, dim=1).reshape(y.shape), y) + + # test dim=-1 + a = xs.transpose(0, -1) + assert_equal(statistics(a, dim=-1), y.transpose(0, -1)) + + +def test_autocorrelation(): + x = torch.arange(10.0) + actual = autocorrelation(x) + assert_equal( + actual, + torch.tensor([1, 0.78, 0.52, 0.21, -0.13, -0.52, -0.94, -1.4, -1.91, -2.45]), + prec=0.01, + ) + + +def test_autocorrelation_trivial(): + x = torch.zeros(10) + actual = autocorrelation(x) + assert_equal(actual, torch.ones(10), prec=0.01) + + +def test_autocorrelation_vectorized(): + # make a mostly noisy x with a couple constant series + x = torch.randn(3, 4, 5) + x[1, 2] = 0 + x[2, 3] = 1 + + actual = autocorrelation(x, dim=-1) + expected = torch.tensor([[autocorrelation(xij).tolist() for xij in xi] for xi in x]) + assert_equal(actual, expected) + + assert (actual[1, 2] == 1).all() + assert (actual[2, 3] == 1).all() + + +def test_autocovariance(): + x = torch.arange(10.0) + with xfail_if_not_implemented(): + actual = autocovariance(x) + assert_equal( + actual, + torch.tensor( + [8.25, 6.42, 4.25, 1.75, -1.08, -4.25, -7.75, -11.58, -15.75, -20.25] + ), + prec=0.01, + ) + + +def test_cummin(): + x = torch.rand(10) + y = torch.empty(x.shape) + y[0] = x[0] + for i in range(1, x.size(0)): + y[i] = min(x[i], y[i - 1]) + + assert_equal(_cummin(x), y) + + +@pytest.mark.parametrize("statistics", [autocorrelation, autocovariance, _cummin]) +@pytest.mark.parametrize("sample_shape", [(), (3,), (2, 3)]) +def test_statistics_B_ok_with_sample_shape(statistics, sample_shape): + xs = torch.rand((10,) + torch.Size(sample_shape)) + with xfail_if_not_implemented(): + y = statistics(xs) + + # test correct shape + assert_equal(y.shape, xs.shape) + + # test correct batch calculation + batch_statistics = [] + for x in xs.reshape(10, -1).split(1, dim=1): + batch_statistics.append(statistics(x)) + assert_equal(torch.cat(batch_statistics, dim=1).reshape(xs.shape), y) + + # test dim=-1 + if statistics is not _cummin: + a = xs.transpose(0, -1) + assert_equal(statistics(a, dim=-1), y.transpose(0, -1)) + + +def test_gelman_rubin(): + # only need to test precision for small data + x = torch.empty(2, 10) + x[0, :] = torch.arange(10.0) + x[1, :] = torch.arange(10.0) + 1 + + r_hat = gelman_rubin(x) + assert_equal(r_hat.item(), 0.98, prec=0.01) + + +def test_split_gelman_rubin_agree_with_gelman_rubin(): + x = torch.rand(2, 10) + r_hat1 = gelman_rubin(x.reshape(2, 2, 5).reshape(4, 5)) + r_hat2 = split_gelman_rubin(x) + assert_equal(r_hat1, r_hat2) + + +def test_effective_sample_size(): + x = torch.arange(1000.0).reshape(100, 10) + + with xfail_if_not_implemented(): + # test against arviz + assert_equal(effective_sample_size(x).item(), 52.64, prec=0.01) + + +@pytest.mark.parametrize( + "diagnostics", [gelman_rubin, split_gelman_rubin, effective_sample_size] +) +@pytest.mark.parametrize("sample_shape", [(), (3,), (2, 3)]) +def test_diagnostics_ok_with_sample_shape(diagnostics, sample_shape): + sample_shape = torch.Size(sample_shape) + xs = torch.rand((4, 100) + sample_shape) + + with xfail_if_not_implemented(): + y = diagnostics(xs) + + # test correct shape + assert_equal(y.shape, sample_shape) + + # test correct batch calculation + batch_diagnostics = [] + for x in xs.reshape(4, 100, -1).split(1, dim=2): + batch_diagnostics.append(diagnostics(x)) + assert_equal(torch.cat(batch_diagnostics, dim=0).reshape(sample_shape), y) + + # test chain_dim, sample_dim at different positions + a = xs.transpose(0, 1) + b = xs.unsqueeze(-1).transpose(0, -1).squeeze(0) + c = xs.unsqueeze(-1).transpose(1, -1).squeeze(1) + assert_equal(diagnostics(a, chain_dim=1, sample_dim=0), y) + assert_equal(diagnostics(b, chain_dim=-1, sample_dim=0), y) + assert_equal(diagnostics(c, sample_dim=-1), y) + + +def test_waic(): + x = -torch.arange(1.0, 101).log().reshape(25, 4) + w_pw, p_pw = waic(x, pointwise=True) + w, p = waic(x) + w1, p1 = waic(x.t(), dim=1) + + # test against loo package: http://mc-stan.org/loo/reference/waic.html + assert_equal(w_pw, torch.tensor([7.49, 7.75, 7.86, 7.92]), prec=0.01) + assert_equal(p_pw, torch.tensor([1.14, 0.91, 0.79, 0.70]), prec=0.01) + + assert_equal(w, w_pw.sum()) + assert_equal(p, p_pw.sum()) + + assert_equal(w, w1) + assert_equal(p, p1) + + +def test_weighted_waic(): + a = 1 + torch.rand(10) + b = 1 + torch.rand(10) + c = 1 + torch.rand(10) + expanded_x = torch.stack([a, b, c, a, b, a, c, a, c]).log() + x = torch.stack([a, b, c]).log() + log_weights = torch.tensor([4.0, 2, 3]).log() + # assume weights are unnormalized + log_weights = log_weights - torch.randn(1) + + w1, p1 = waic(x, log_weights) + w2, p2 = waic(expanded_x) + + # test lpd + lpd1 = -0.5 * w1 + p1 + lpd2 = -0.5 * w2 + p2 + assert_equal(lpd1, lpd2) + + # test p_waic (also test for weighted_variance) + unbiased_p1 = p1 * 2 / 3 + unbiased_p2 = p2 * 8 / 9 + assert_equal(unbiased_p1, unbiased_p2) + + # test correctness for dim=-1 + w3, p3 = waic(x.t(), log_weights, dim=-1) + assert_equal(w1, w3) + assert_equal(p1, p3) + + +@pytest.mark.parametrize("k", [0.2, 0.5]) +@pytest.mark.parametrize("sigma", [0.8, 1.3]) +def test_fit_generalized_pareto(k, sigma, n_samples=5000): + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", category=RuntimeWarning) + from scipy.stats import genpareto + + X = genpareto.rvs(c=k, scale=sigma, size=n_samples) + fit_k, fit_sigma = fit_generalized_pareto(torch.tensor(X)) + assert_equal(k, fit_k, prec=0.02) + assert_equal(sigma, fit_sigma, prec=0.02) + + +@pytest.mark.parametrize("event_shape", [(), (4,), (3, 2)]) +@pytest.mark.parametrize("num_samples", [1, 2, 3, 4, 10]) +def test_crps_univariate_energy_score_empirical(num_samples, event_shape): + truth = torch.randn(event_shape) + pred = truth + 0.1 * torch.randn((num_samples,) + event_shape) + + actual = crps_empirical(pred, truth) + assert actual.shape == truth.shape + + expected = (pred - truth).abs().mean(0) - 0.5 * ( + pred - pred.unsqueeze(1) + ).abs().mean([0, 1]) + assert_close(actual, expected) + + expected = energy_score_empirical( + pred[..., None].swapaxes(0, -1)[0, ..., None], truth[..., None] + ) + assert_close(actual, expected) + + +@pytest.mark.parametrize("sample_dim", [3, 10, 30, 100]) +def test_multivariate_energy_score(sample_dim, num_samples=10000): + pred_uncorrelated = torch.randn(num_samples, sample_dim) + + pred = torch.randn(num_samples, 1) + pred = pred.expand(pred_uncorrelated.shape) + + truth = torch.randn(num_samples, 1) + truth = truth.expand(pred_uncorrelated.shape) + + energy_score = energy_score_empirical(pred, truth).mean() + energy_score_uncorrelated = energy_score_empirical(pred_uncorrelated, truth).mean() + + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", category=RuntimeWarning) + from scipy.stats import chi + + assert_close( + energy_score, + torch.tensor(0.5 * chi(1).mean() * (2 * sample_dim) ** 0.5), + rtol=0.02, + ) + assert energy_score * 1.02 < energy_score_uncorrelated + + +@pytest.mark.parametrize("batch_shape", [(), (4,), (3, 2)]) +@pytest.mark.parametrize("sample_dim", [30, 100]) +@pytest.mark.parametrize( + "num_samples, pred_batch_size", [(100, 10), (100, 30), (100, 100), (100, 200)] +) +def test_energy_score_empirical_batched_calculation( + batch_shape, sample_dim, num_samples, pred_batch_size +): + # Generate data + truth = torch.randn(batch_shape + (sample_dim,)) + pred = torch.randn(batch_shape + (num_samples, sample_dim)) + # Do batched and regular calculation + expected = energy_score_empirical(pred, truth) + actual = energy_score_empirical(pred, truth, pred_batch_size=pred_batch_size) + # Check accuracy + assert_close(actual, expected) diff --git a/pyro/source/tests/ops/test_streaming.py b/pyro/source/tests/ops/test_streaming.py new file mode 100644 index 0000000000000000000000000000000000000000..500776e77a4965fe852ad979214e5fe1ea178fc3 --- /dev/null +++ b/pyro/source/tests/ops/test_streaming.py @@ -0,0 +1,109 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import functools + +import pytest +import torch + +from pyro.ops.streaming import ( + CountMeanStats, + CountMeanVarianceStats, + CountStats, + StackStats, + StatsOfDict, +) +from tests.common import assert_close + + +def generate_data(num_samples): + shapes = {"aaa": (), "bbb": (4,), "ccc": (3, 2), "ddd": (5, 1)} + return [{k: torch.randn(v) for k, v in shapes.items()} for _ in range(num_samples)] + + +EXAMPLE_STATS = [ + CountStats, + functools.partial(StatsOfDict, default=CountMeanStats), + functools.partial(StatsOfDict, default=CountMeanVarianceStats), + functools.partial(StatsOfDict, default=StackStats), + StatsOfDict, + functools.partial( + StatsOfDict, {"aaa": CountMeanStats, "bbb": CountMeanVarianceStats} + ), +] +EXAMPLE_STATS_IDS = [ + "CountStats", + "CountMeanStats", + "CountMeanVarianceStats", + "StackStats", + "StatsOfDict1", + "StatsOfDict2", +] + + +def sort_samples_in_place(x): + for key, value in list(x.items()): + if isinstance(key, str) and key == "samples": + x[key] = value.sort(0).values + elif isinstance(value, dict): + sort_samples_in_place(value) + + +@pytest.mark.parametrize("size", [0, 10]) +@pytest.mark.parametrize("make_stats", EXAMPLE_STATS, ids=EXAMPLE_STATS_IDS) +def test_update_get(make_stats, size): + samples = generate_data(size) + + expected_stats = make_stats() + for sample in samples: + expected_stats.update(sample) + expected = expected_stats.get() + + actual_stats = make_stats() + for i in torch.randperm(len(samples)).tolist(): + actual_stats.update(samples[i]) + actual = actual_stats.get() + + # Sort samples in case of StackStats. + sort_samples_in_place(expected) + sort_samples_in_place(actual) + + assert_close(actual, expected) + + +@pytest.mark.parametrize("left_size, right_size", [(3, 5), (0, 8), (8, 0), (0, 0)]) +@pytest.mark.parametrize("make_stats", EXAMPLE_STATS, ids=EXAMPLE_STATS_IDS) +def test_update_merge_get(make_stats, left_size, right_size): + left_samples = generate_data(left_size) + right_samples = generate_data(right_size) + + expected_stats = make_stats() + for sample in left_samples + right_samples: + expected_stats.update(sample) + expected = expected_stats.get() + + left_stats = make_stats() + for sample in left_samples: + left_stats.update(sample) + right_stats = make_stats() + for sample in right_samples: + right_stats.update(sample) + actual_stats = left_stats.merge(right_stats) + assert isinstance(actual_stats, type(expected_stats)) + + actual = actual_stats.get() + assert_close(actual, expected) + + +def test_stats_of_dict(): + stats = StatsOfDict(types={"aaa": CountMeanStats}, default=CountStats) + stats.update({"aaa": torch.tensor(0.0)}) + stats.update({"aaa": torch.tensor(1.0), "bbb": torch.randn(3, 3)}) + stats.update({"aaa": torch.tensor(2.0), "bbb": torch.randn(3, 3)}) + actual = stats.get() + + expected = { + "aaa": {"count": 3, "mean": torch.tensor(1.0)}, + "bbb": {"count": 2}, + } + assert_close(actual, expected) diff --git a/pyro/source/tests/ops/test_tensor_utils.py b/pyro/source/tests/ops/test_tensor_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..e3531d2cf2c16d48ddfbcf18db77a7bde05b69bb --- /dev/null +++ b/pyro/source/tests/ops/test_tensor_utils.py @@ -0,0 +1,196 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import math + +import numpy as np +import pytest +import scipy.fftpack as fftpack +import torch + +import pyro +from pyro.ops.tensor_utils import ( + block_diag_embed, + block_diagonal, + convolve, + dct, + idct, + next_fast_len, + periodic_cumsum, + periodic_features, + periodic_repeat, + precision_to_scale_tril, + repeated_matmul, +) +from tests.common import assert_close, assert_equal + +pytestmark = pytest.mark.stage("unit") + + +@pytest.mark.parametrize("batch_size", [1, 2, 3]) +@pytest.mark.parametrize( + "block_size", [torch.Size([2, 2]), torch.Size([3, 1]), torch.Size([4, 2])] +) +def test_block_diag_embed(batch_size, block_size): + m = torch.randn(block_size).unsqueeze(0).expand((batch_size,) + block_size) + b = block_diag_embed(m) + + assert b.shape == (batch_size * block_size[0], batch_size * block_size[1]) + + assert_equal(b.sum(), m.sum()) + + for k in range(batch_size): + bottom, top = k * block_size[0], (k + 1) * block_size[0] + left, right = k * block_size[1], (k + 1) * block_size[1] + assert_equal(b[bottom:top, left:right], m[k]) + + +@pytest.mark.parametrize("batch_shape", [torch.Size([]), torch.Size([7])]) +@pytest.mark.parametrize( + "mat_size,block_size", + [(torch.Size([2, 2]), 2), (torch.Size([3, 1]), 1), (torch.Size([6, 3]), 3)], +) +def test_block_diag(batch_shape, mat_size, block_size): + mat = torch.randn(batch_shape + (block_size,) + mat_size) + mat_embed = block_diag_embed(mat) + mat_embed_diag = block_diagonal(mat_embed, block_size) + assert_equal(mat_embed_diag, mat) + + +@pytest.mark.parametrize("size", [5, 6, 7, 8]) +@pytest.mark.parametrize("period", [2, 3, 4]) +@pytest.mark.parametrize("left_shape", [(), (6,), (3, 2)], ids=str) +@pytest.mark.parametrize("right_shape", [(), (7,), (5, 4)], ids=str) +def test_periodic_repeat(period, size, left_shape, right_shape): + dim = -1 - len(right_shape) + tensor = torch.randn(left_shape + (period,) + right_shape) + actual = periodic_repeat(tensor, size, dim) + assert actual.shape == left_shape + (size,) + right_shape + dots = (slice(None),) * len(left_shape) + for t in range(size): + assert_equal(actual[dots + (t,)], tensor[dots + (t % period,)]) + + +@pytest.mark.parametrize("duration", range(3, 100)) +def test_periodic_features(duration): + pyro.set_rng_seed(duration) + max_period = torch.distributions.Uniform(2, duration).sample().item() + for max_period in [max_period, duration]: + min_period = torch.distributions.Uniform(2, max_period).sample().item() + for min_period in [min_period, 2]: + actual = periodic_features(duration, max_period, min_period) + assert actual.shape == ( + duration, + 2 * math.ceil(max_period / min_period) - 2, + ) + assert (-1 <= actual).all() + assert (actual <= 1).all() + + +@pytest.mark.parametrize("size", [5, 6, 7, 8]) +@pytest.mark.parametrize("period", [2, 3, 4]) +@pytest.mark.parametrize("left_shape", [(), (6,), (3, 2)], ids=str) +@pytest.mark.parametrize("right_shape", [(), (7,), (5, 4)], ids=str) +def test_periodic_cumsum(period, size, left_shape, right_shape): + dim = -1 - len(right_shape) + tensor = torch.randn(left_shape + (size,) + right_shape) + actual = periodic_cumsum(tensor, period, dim) + assert actual.shape == tensor.shape + dots = (slice(None),) * len(left_shape) + for t in range(period): + assert_equal(actual[dots + (t,)], tensor[dots + (t,)]) + for t in range(period, size): + assert_close( + actual[dots + (t,)], tensor[dots + (t,)] + actual[dots + (t - period,)] + ) + + +@pytest.mark.parametrize("m", [2, 3, 4, 5, 6, 10]) +@pytest.mark.parametrize("n", [2, 3, 4, 5, 6, 10]) +@pytest.mark.parametrize("mode", ["full", "valid", "same"]) +def test_convolve_shape(m, n, mode): + signal = torch.randn(m) + kernel = torch.randn(n) + actual = convolve(signal, kernel, mode) + expected = np.convolve(signal, kernel, mode=mode) + assert actual.shape == expected.shape + + +@pytest.mark.parametrize("m", [2, 3, 4, 5, 6, 10]) +@pytest.mark.parametrize("n", [2, 3, 4, 5, 6, 10]) +@pytest.mark.parametrize("batch_shape", [(), (4,), (2, 3)], ids=str) +@pytest.mark.parametrize("mode", ["full", "valid", "same"]) +def test_convolve(batch_shape, m, n, mode): + signal = torch.randn(*batch_shape, m) + kernel = torch.randn(*batch_shape, n) + actual = convolve(signal, kernel, mode) + expected = torch.stack( + [ + torch.tensor(np.convolve(s, k, mode=mode)) + for s, k in zip(signal.reshape(-1, m), kernel.reshape(-1, n)) + ] + ).reshape(*batch_shape, -1) + assert_close(actual, expected) + + +@pytest.mark.parametrize( + "size", [torch.Size([2, 2]), torch.Size([4, 3, 3]), torch.Size([4, 1, 2, 2])] +) +@pytest.mark.parametrize("n", [1, 2, 3, 7, 8]) +def test_repeated_matmul(size, n): + M = torch.randn(size) + result = repeated_matmul(M, n) + assert result.shape == ((n,) + size) + + serial_result = M + for i in range(n): + assert_equal(result[i, ...], serial_result) + serial_result = torch.matmul(serial_result, M) + + +@pytest.mark.parametrize("shape", [(3, 4), (5,), (2, 1, 6)]) +def test_dct(shape): + x = torch.randn(shape) + actual = dct(x) + expected = torch.from_numpy(fftpack.dct(x.numpy(), norm="ortho")) + assert_close(actual, expected) + + +@pytest.mark.parametrize("shape", [(3, 4), (5,), (2, 1, 6)]) +def test_idct(shape): + x = torch.randn(shape) + actual = idct(x) + expected = torch.from_numpy(fftpack.idct(x.numpy(), norm="ortho")) + assert_close(actual, expected) + + +@pytest.mark.parametrize("dim", [-4, -3, -2, -1, 0, 1, 2, 3]) +@pytest.mark.parametrize("fn", [dct, idct]) +def test_dct_dim(fn, dim): + x = torch.randn(4, 5, 6, 7) + actual = fn(x, dim=dim) + if dim == -1 or dim == 3: + expected = fn(x) + else: + expected = fn(x.transpose(-1, dim)).transpose(-1, dim) + assert_close(actual, expected) + + +def test_next_fast_len(): + for size in range(1, 1000): + assert next_fast_len(size) == fftpack.next_fast_len(size) + + +@pytest.mark.parametrize( + "batch_shape,event_shape", + [ + ((), (5,)), + ((3,), (4,)), + ], +) +def test_precision_to_scale_tril(batch_shape, event_shape): + x = torch.randn(batch_shape + event_shape + event_shape) + precision = x.matmul(x.transpose(-2, -1)) + actual = precision_to_scale_tril(precision) + expected = torch.linalg.cholesky(precision.inverse()) + assert_close(actual, expected) diff --git a/pyro/source/tests/ops/test_welford.py b/pyro/source/tests/ops/test_welford.py new file mode 100644 index 0000000000000000000000000000000000000000..b0eadc8166eaaba58dc18ea9ef8524d509e34399 --- /dev/null +++ b/pyro/source/tests/ops/test_welford.py @@ -0,0 +1,82 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import numpy as np +import pytest +import torch + +from pyro.ops.welford import WelfordArrowheadCovariance, WelfordCovariance +from pyro.util import optional +from tests.common import assert_equal + + +@pytest.mark.filterwarnings("ignore:.*degrees of freedom is <= 0") +@pytest.mark.parametrize("n_samples,dim_size", [(1000, 1), (1000, 7), (1, 1)]) +@pytest.mark.init(rng_seed=7) +def test_welford_diagonal(n_samples, dim_size): + w = WelfordCovariance(diagonal=True) + loc = torch.zeros(dim_size) + cov_diagonal = torch.rand(dim_size) + cov = torch.diag(cov_diagonal) + dist = torch.distributions.MultivariateNormal(loc=loc, covariance_matrix=cov) + samples = [] + for _ in range(n_samples): + sample = dist.sample() + samples.append(sample) + w.update(sample) + + sample_variance = torch.stack(samples).var(dim=0, unbiased=True) + with optional(pytest.raises(RuntimeError), n_samples == 1): + estimates = w.get_covariance(regularize=False) + assert_equal(estimates, sample_variance) + + +@pytest.mark.parametrize("n_samples,dim_size", [(1000, 1), (1000, 7), (1, 1)]) +@pytest.mark.init(rng_seed=7) +def test_welford_dense(n_samples, dim_size): + w = WelfordCovariance(diagonal=False) + loc = torch.zeros(dim_size) + cov = torch.randn(dim_size, dim_size) + cov = torch.mm(cov, cov.t()) + dist = torch.distributions.MultivariateNormal(loc=loc, covariance_matrix=cov) + samples = dist.sample(torch.Size([n_samples])) + for sample in samples: + w.update(sample) + + with optional(pytest.raises(RuntimeError), n_samples == 1): + estimates = w.get_covariance(regularize=False).cpu().numpy() + sample_cov = np.cov(samples.cpu().numpy(), bias=False, rowvar=False) + assert_equal(estimates, sample_cov) + + +@pytest.mark.parametrize( + "n_samples,dim_size,head_size", + [(1000, 5, 0), (1000, 5, 1), (1000, 5, 4), (1000, 5, 5)], +) +@pytest.mark.parametrize("regularize", [True, False]) +def test_welford_arrowhead(n_samples, dim_size, head_size, regularize): + adapt_scheme = WelfordArrowheadCovariance(head_size=head_size) + loc = torch.zeros(dim_size) + cov = torch.randn(dim_size, dim_size) + cov = torch.mm(cov, cov.t()) + dist = torch.distributions.MultivariateNormal(loc=loc, covariance_matrix=cov) + samples = dist.sample(sample_shape=torch.Size([n_samples])) + + for sample in samples: + adapt_scheme.update(sample) + top, bottom_diag = adapt_scheme.get_covariance(regularize=regularize) + actual = torch.cat( + [top, torch.cat([top[:, head_size:].t(), bottom_diag.diag()], -1)] + ) + + mask = torch.ones(dim_size, dim_size) + mask[head_size:, head_size:] = 0.0 + mask.view(-1)[:: dim_size + 1][head_size:] = 1.0 + expected = np.cov(samples.cpu().numpy(), bias=False, rowvar=False) + expected = torch.from_numpy(expected).type_as(mask) + if regularize: + expected = (expected * n_samples + 1e-3 * torch.eye(dim_size) * 5) / ( + n_samples + 5 + ) + expected = expected * mask + assert_equal(actual, expected) diff --git a/pyro/source/tests/optim/__init__.py b/pyro/source/tests/optim/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/tests/optim/conftest.py b/pyro/source/tests/optim/conftest.py new file mode 100644 index 0000000000000000000000000000000000000000..238deb176e5d0c4154eac4f82cc85c128d2694d6 --- /dev/null +++ b/pyro/source/tests/optim/conftest.py @@ -0,0 +1,23 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest + + +def pytest_collection_modifyitems(items): + for item in items: + if item.nodeid.startswith("tests/optim"): + if "stage" not in item.keywords: + item.add_marker(pytest.mark.stage("unit")) + if "init" not in item.keywords: + item.add_marker(pytest.mark.init(rng_seed=123)) + + +def pytest_addoption(parser): + parser.addoption("--plot", action="store", default="FALSE") + + +def pytest_generate_tests(metafunc): + option_value = metafunc.config.option.plot != "FALSE" + if "plot" in metafunc.fixturenames and option_value is not None: + metafunc.parametrize("plot", [option_value]) diff --git a/pyro/source/tests/optim/test_multi.py b/pyro/source/tests/optim/test_multi.py new file mode 100644 index 0000000000000000000000000000000000000000..07de5a7f53df2a5b72f57fa7c4e4ca61264845ac --- /dev/null +++ b/pyro/source/tests/optim/test_multi.py @@ -0,0 +1,89 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch +from torch.distributions import constraints + +import pyro +import pyro.distributions as dist +import pyro.optim +import pyro.poutine as poutine +from pyro.optim.multi import ( + MixedMultiOptimizer, + Newton, + PyroMultiOptimizer, + TorchMultiOptimizer, +) +from tests.common import assert_equal + +FACTORIES = [ + lambda: PyroMultiOptimizer(pyro.optim.Adam({"lr": 0.05})), + lambda: TorchMultiOptimizer(torch.optim.Adam, {"lr": 0.05}), + lambda: Newton(trust_radii={"z": 0.2}), + lambda: MixedMultiOptimizer( + [ + (["y"], PyroMultiOptimizer(pyro.optim.Adam({"lr": 0.05}))), + (["x", "z"], Newton()), + ] + ), + lambda: MixedMultiOptimizer( + [(["y"], pyro.optim.Adam({"lr": 0.05})), (["x", "z"], Newton())] + ), +] + + +@pytest.mark.parametrize("factory", FACTORIES) +def test_optimizers(factory): + optim = factory() + + def model(loc, cov): + x = pyro.param("x", torch.randn(2)) + y = pyro.param("y", torch.randn(3, 2)) + z = pyro.param( + "z", torch.randn(4, 2).abs(), constraint=constraints.greater_than(-1) + ) + pyro.sample("obs_x", dist.MultivariateNormal(loc, cov), obs=x) + with pyro.plate("y_plate", 3): + pyro.sample("obs_y", dist.MultivariateNormal(loc, cov), obs=y) + with pyro.plate("z_plate", 4): + pyro.sample("obs_z", dist.MultivariateNormal(loc, cov), obs=z) + + loc = torch.tensor([-0.5, 0.5]) + cov = torch.tensor([[1.0, 0.09], [0.09, 0.1]]) + for step in range(200): + tr = poutine.trace(model).get_trace(loc, cov) + loss = -tr.log_prob_sum() + params = { + name: site["value"].unconstrained() + for name, site in tr.nodes.items() + if site["type"] == "param" + } + optim.step(loss, params) + + for name in ["x", "y", "z"]: + actual = pyro.param(name) + expected = loc.expand(actual.shape) + assert_equal( + actual, + expected, + prec=1e-2, + msg="{} in correct: {} vs {}".format(name, actual, expected), + ) + + +def test_multi_optimizer_disjoint_ok(): + parts = [ + (["w", "x"], pyro.optim.Adam({"lr": 0.1})), + (["y", "z"], pyro.optim.Adam({"lr": 0.01})), + ] + MixedMultiOptimizer(parts) + + +def test_multi_optimizer_overlap_error(): + parts = [ + (["x", "y"], pyro.optim.Adam({"lr": 0.1})), + (["y", "z"], pyro.optim.Adam({"lr": 0.01})), + ] + with pytest.raises(ValueError): + MixedMultiOptimizer(parts) diff --git a/pyro/source/tests/optim/test_optim.py b/pyro/source/tests/optim/test_optim.py new file mode 100644 index 0000000000000000000000000000000000000000..c0acefd7ef88cb1f6d8c5d4125fc3a3d6613d3bb --- /dev/null +++ b/pyro/source/tests/optim/test_optim.py @@ -0,0 +1,560 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import os +from tempfile import TemporaryDirectory +from unittest import TestCase + +import pytest +import torch +from torch.distributions import constraints + +import pyro +import pyro.distributions as dist +import pyro.optim as optim +from pyro import poutine +from pyro.distributions import Normal, Uniform +from pyro.infer import SVI, Trace_ELBO, TraceGraph_ELBO +from pyro.nn.module import PyroModule, PyroParam, to_pyro_module_ +from pyro.optim.optim import is_scheduler +from tests.common import assert_equal + + +class OptimTests(TestCase): + def setUp(self): + # normal-normal; known covariance + self.lam0 = torch.tensor([0.1]) # precision of prior + self.loc0 = torch.tensor([0.5]) # prior mean + # known precision of observation noise + self.lam = torch.tensor([6.0]) + self.data = torch.tensor([1.0]) # a single observation + + def test_per_param_optim(self): + self.do_test_per_param_optim("loc_q", "log_sig_q") + self.do_test_per_param_optim("log_sig_q", "loc_q") + + # make sure lr=0 gets propagated correctly to parameters of our choice + def do_test_per_param_optim(self, fixed_param, free_param): + pyro.clear_param_store() + + def model(): + prior_dist = Normal(self.loc0, torch.pow(self.lam0, -0.5)) + loc_latent = pyro.sample("loc_latent", prior_dist) + x_dist = Normal(loc_latent, torch.pow(self.lam, -0.5)) + pyro.sample("obs", x_dist, obs=self.data) + return loc_latent + + def guide(): + loc_q = pyro.param("loc_q", torch.zeros(1, requires_grad=True)) + log_sig_q = pyro.param("log_sig_q", torch.zeros(1, requires_grad=True)) + sig_q = torch.exp(log_sig_q) + pyro.sample("loc_latent", Normal(loc_q, sig_q)) + + def optim_params(param_name): + if param_name == fixed_param: + return {"lr": 0.00} + elif param_name == free_param: + return {"lr": 0.01} + + def get_steps(adam): + state = adam.get_state()["loc_q"]["state"] + return int(list(state.values())[0]["step"]) + + adam = optim.Adam(optim_params) + adam2 = optim.Adam(optim_params) + svi = SVI(model, guide, adam, loss=TraceGraph_ELBO()) + svi2 = SVI(model, guide, adam2, loss=TraceGraph_ELBO()) + + svi.step() + adam_initial_step_count = get_steps(adam) + with TemporaryDirectory() as tempdir: + filename = os.path.join(tempdir, "optimizer_state.pt") + adam.save(filename) + svi.step() + adam_final_step_count = get_steps(adam) + adam2.load(filename) + svi2.step() + adam2_step_count_after_load_and_step = get_steps(adam2) + + assert adam_initial_step_count == 1 + assert adam_final_step_count == 2 + assert adam2_step_count_after_load_and_step == 2 + + free_param_unchanged = torch.equal(pyro.param(free_param).data, torch.zeros(1)) + fixed_param_unchanged = torch.equal( + pyro.param(fixed_param).data, torch.zeros(1) + ) + assert fixed_param_unchanged and not free_param_unchanged + + +@pytest.mark.parametrize( + "scheduler", + [ + optim.LambdaLR( + { + "optimizer": torch.optim.SGD, + "optim_args": {"lr": 0.01}, + "lr_lambda": lambda epoch: 2.0**epoch, + } + ), + optim.StepLR( + { + "optimizer": torch.optim.SGD, + "optim_args": {"lr": 0.01}, + "gamma": 2, + "step_size": 1, + } + ), + optim.ExponentialLR( + {"optimizer": torch.optim.SGD, "optim_args": {"lr": 0.01}, "gamma": 2} + ), + optim.ReduceLROnPlateau( + { + "optimizer": torch.optim.SGD, + "optim_args": {"lr": 1.0}, + "factor": 0.1, + "patience": 1, + } + ), + ], +) +def test_dynamic_lr(scheduler): + pyro.clear_param_store() + + def model(): + sample = pyro.sample("latent", Normal(torch.tensor(0.0), torch.tensor(0.3))) + return pyro.sample( + "obs", Normal(sample, torch.tensor(0.2)), obs=torch.tensor(0.1) + ) + + def guide(): + loc = pyro.param("loc", torch.tensor(0.0)) + scale = pyro.param("scale", torch.tensor(0.5), constraint=constraints.positive) + pyro.sample("latent", Normal(loc, scale)) + + svi = SVI(model, guide, scheduler, loss=TraceGraph_ELBO()) + for epoch in range(4): + svi.step() + svi.step() + loc = pyro.param("loc").unconstrained() + opt_loc = scheduler.optim_objs[loc].optimizer + opt_scale = scheduler.optim_objs[loc].optimizer + if issubclass( + scheduler.pt_scheduler_constructor, + torch.optim.lr_scheduler.ReduceLROnPlateau, + ): + scheduler.step(1.0) + if epoch == 2: + assert opt_loc.state_dict()["param_groups"][0]["lr"] == 0.1 + assert opt_scale.state_dict()["param_groups"][0]["lr"] == 0.1 + if epoch == 4: + assert opt_loc.state_dict()["param_groups"][0]["lr"] == 0.01 + assert opt_scale.state_dict()["param_groups"][0]["lr"] == 0.01 + continue + assert opt_loc.state_dict()["param_groups"][0]["initial_lr"] == 0.01 + assert opt_scale.state_dict()["param_groups"][0]["initial_lr"] == 0.01 + if epoch == 0: + scheduler.step() + assert opt_loc.state_dict()["param_groups"][0]["lr"] == 0.02 + assert opt_scale.state_dict()["param_groups"][0]["lr"] == 0.02 + assert abs(pyro.param("loc").item()) > 1e-5 + assert abs(pyro.param("scale").item() - 0.5) > 1e-5 + if epoch == 2: + scheduler.step() + assert opt_loc.state_dict()["param_groups"][0]["lr"] == 0.04 + assert opt_scale.state_dict()["param_groups"][0]["lr"] == 0.04 + + +@pytest.mark.parametrize( + "factory", [optim.Adam, optim.ClippedAdam, optim.DCTAdam, optim.RMSprop, optim.SGD] +) +def test_autowrap(factory): + instance = factory({}) + assert instance.pt_optim_constructor.__name__ == factory.__name__ + + +@pytest.mark.parametrize("pyro_optim", [optim.Adam, optim.SGD]) +@pytest.mark.parametrize("clip", ["clip_norm", "clip_value"]) +@pytest.mark.parametrize("value", [1.0, 3.0, 5.0]) +def test_clip_norm(pyro_optim, clip, value): + x1 = torch.tensor(0.0, requires_grad=True) + x2 = torch.tensor(0.0, requires_grad=True) + opt_c = pyro_optim({"lr": 1.0}, {clip: value}) + opt = pyro_optim({"lr": 1.0}) + for step in range(3): + x1.backward(Uniform(value, value + 3.0).sample()) + x2.backward(torch.tensor(value)) + opt_c([x1]) + opt([x2]) + assert_equal(x1.grad, torch.tensor(value)) + assert_equal(x2.grad, torch.tensor(value)) + assert_equal(x1, x2) + opt_c.optim_objs[x1].zero_grad() + opt.optim_objs[x2].zero_grad() + + +@pytest.mark.parametrize("clip_norm", [1.0, 3.0, 5.0]) +def test_clippedadam_clip(clip_norm): + x1 = torch.tensor(0.0, requires_grad=True) + x2 = torch.tensor(0.0, requires_grad=True) + opt_ca = optim.clipped_adam.ClippedAdam( + params=[x1], lr=1.0, lrd=1.0, clip_norm=clip_norm + ) + opt_a = torch.optim.Adam(params=[x2], lr=1.0) + for step in range(3): + opt_ca.zero_grad() + opt_a.zero_grad() + x1.backward(Uniform(clip_norm, clip_norm + 3.0).sample()) + x2.backward(torch.tensor(clip_norm)) + opt_ca.step() + opt_a.step() + assert_equal(x1, x2) + + +@pytest.mark.parametrize("clip_norm", [1.0, 3.0, 5.0]) +def test_clippedadam_pass(clip_norm): + x1 = torch.tensor(0.0, requires_grad=True) + x2 = torch.tensor(0.0, requires_grad=True) + opt_ca = optim.clipped_adam.ClippedAdam( + params=[x1], lr=1.0, lrd=1.0, clip_norm=clip_norm + ) + opt_a = torch.optim.Adam(params=[x2], lr=1.0) + for step in range(3): + g = Uniform(-clip_norm, clip_norm).sample() + opt_ca.zero_grad() + opt_a.zero_grad() + x1.backward(g) + x2.backward(g) + opt_ca.step() + opt_a.step() + assert_equal(x1, x2) + + +@pytest.mark.parametrize("lrd", [1.0, 3.0, 5.0]) +def test_clippedadam_lrd(lrd): + x1 = torch.tensor(0.0, requires_grad=True) + orig_lr = 1.0 + opt_ca = optim.clipped_adam.ClippedAdam(params=[x1], lr=orig_lr, lrd=lrd) + for step in range(3): + g = Uniform(-5.0, 5.0).sample() + x1.backward(g) + opt_ca.step() + assert opt_ca.param_groups[0]["lr"] == orig_lr * lrd ** (step + 1) + + +def test_dctadam_param_subsample(): + outer_size = 7 + middle_size = 2 + inner_size = 11 + outer_subsize = 3 + inner_subsize = 4 + event_size = 5 + + def model(): + with pyro.plate("outer", outer_size, subsample_size=outer_subsize, dim=-3): + with pyro.plate("inner", inner_size, subsample_size=inner_subsize, dim=-1): + pyro.param( + "loc", + torch.randn(outer_size, middle_size, inner_size, event_size), + event_dim=1, + ) + + optimizer = optim.DCTAdam({"lr": 1.0, "subsample_aware": True}) + model() + param = pyro.param("loc").unconstrained() + param.sum().backward() + pre_optimized_value = param.detach().clone() + optimizer({param}) + expected_num_changes = outer_subsize * middle_size * inner_subsize * event_size + actual_num_changes = ((param - pre_optimized_value) != 0).sum().item() + assert actual_num_changes == expected_num_changes + + for i in range(1000): + pyro.infer.util.zero_grads({param}) + model() # generate new subsample indices + param.pow(2).sum().backward() + optimizer({param}) + + assert_equal(param, param.new_zeros(param.shape), prec=1e-2) + + +def test_name_preserved_by_to_pyro_module(): + features = torch.randn(4) + data = torch.randn(3) + + class Model(PyroModule): + def __init__(self): + super().__init__() + self.scale = PyroParam(torch.ones(3), constraints.positive) + self.loc = torch.nn.Linear(4, 3) + + def forward(self, features, data): + loc = self.loc(features) + scale = self.scale + with pyro.plate("data", len(data)): + pyro.sample("obs", dist.Normal(loc, scale), obs=data) + + model = Model() + params = list(model.parameters()) + param_names = set() + + def optim_config(param_name): + param_names.add(param_name) + return {"lr": 0.0} + + # Record while model.loc is an nn.Module. + loss = poutine.trace(model).get_trace(features, data).log_prob_sum() + loss.backward() + adam = optim.Adam(optim_config) + adam(params) + assert param_names + expected_param_names = param_names.copy() + del adam, loss + param_names.clear() + pyro.clear_param_store() + + # Record while model.loc is a PyroModule. + to_pyro_module_(model.loc) + loss = poutine.trace(model).get_trace(features, data).log_prob_sum() + loss.backward() + adam = optim.Adam(optim_config) + adam(params) + assert param_names + actual_param_names = param_names.copy() + del adam, loss + param_names.clear() + pyro.clear_param_store() + + assert actual_param_names == {"scale", "loc.weight", "loc.bias"} + assert actual_param_names == expected_param_names + + +@pytest.mark.parametrize( + "Optim, config", + [ + (optim.Adam, {"lr": 0.01}), + (optim.ClippedAdam, {"lr": 0.01}), + (optim.DCTAdam, {"lr": 0.01}), + (optim.RMSprop, {"lr": 0.01}), + (optim.SGD, {"lr": 0.01}), + ( + optim.LambdaLR, + { + "optimizer": torch.optim.SGD, + "optim_args": {"lr": 0.01}, + "lr_lambda": lambda epoch: 0.9**epoch, + }, + ), + ( + optim.StepLR, + { + "optimizer": torch.optim.SGD, + "optim_args": {"lr": 0.01}, + "gamma": 0.9, + "step_size": 1, + }, + ), + ( + optim.ExponentialLR, + {"optimizer": torch.optim.SGD, "optim_args": {"lr": 0.01}, "gamma": 0.9}, + ), + ( + optim.ReduceLROnPlateau, + { + "optimizer": torch.optim.SGD, + "optim_args": {"lr": 1.0}, + "factor": 0.1, + "patience": 1, + }, + ), + ], +) +def test_checkpoint(Optim, config): + def model(): + x_scale = pyro.param( + "x_scale", torch.tensor(1.0), constraint=constraints.positive + ) + z = pyro.sample("z", Normal(0, 1)) + return pyro.sample("x", Normal(z, x_scale), obs=torch.tensor(0.1)) + + def guide(): + z_loc = pyro.param("z_loc", torch.tensor(0.0)) + z_scale = pyro.param( + "z_scale", torch.tensor(0.5), constraint=constraints.positive + ) + pyro.sample("z", Normal(z_loc, z_scale)) + + store = pyro.get_param_store() + + def step(svi, optimizer): + svi.step() + if is_scheduler(optimizer): + if issubclass( + optimizer.pt_scheduler_constructor, + torch.optim.lr_scheduler.ReduceLROnPlateau, + ): + optimizer.step(1.0) + else: + optimizer.step() + snapshot = {k: v.data.clone() for k, v in store.items()} + return snapshot + + # Try without a checkpoint. + expected = [] + store.clear() + pyro.set_rng_seed(20210811) + optimizer = Optim(config.copy()) + svi = SVI(model, guide, optimizer, Trace_ELBO()) + for _ in range(5 + 10): + expected.append(step(svi, optimizer)) + del svi, optimizer + + # Try with a checkpoint. + actual = [] + store.clear() + pyro.set_rng_seed(20210811) + optimizer = Optim(config.copy()) + svi = SVI(model, guide, optimizer, Trace_ELBO()) + for _ in range(5): + actual.append(step(svi, optimizer)) + # checkpoint + with TemporaryDirectory() as tempdir: + optim_filename = os.path.join(tempdir, "optimizer_state.pt") + param_filename = os.path.join(tempdir, "param_store.pt") + + optimizer.save(optim_filename) + store.save(param_filename) + del optimizer, svi + store.clear() + + store.load(param_filename) + optimizer = Optim(config.copy()) + optimizer.load(optim_filename) + svi = SVI(model, guide, optimizer, Trace_ELBO()) + for _ in range(10): + actual.append(step(svi, optimizer)) + + assert_equal(actual, expected) + + +def test_centered_clipped_adam(plot): + """ + Test the centered variance option of the ClippedAdam optimizer. + In order to create plots run pytest with the plot command line + option set to True, i.e. by executing + + 'pytest tests/optim/test_optim.py::test_centered_clipped_adam --plot True' + + """ + if not plot: + lr_vec = [0.1, 0.001] + else: + lr_vec = [0.1, 0.05, 0.02, 0.01, 0.005, 0.002, 0.001] + + w = torch.Tensor([1, 500]) + + def loss_fn(p): + return (1 + w * p * p).sqrt().sum() - len(w) + + def fit(lr, centered_variance, num_iter=5000): + loss_vec = [] + p = torch.nn.Parameter(torch.Tensor([10, 1])) + optim = pyro.optim.clipped_adam.ClippedAdam( + lr=lr, params=[p], centered_variance=centered_variance + ) + for count in range(num_iter): + optim.zero_grad() + loss = loss_fn(p) + loss.backward() + optim.step() + loss_vec.append(loss) + return torch.Tensor(loss_vec) + + def calc_convergence(loss_vec, tail_len=100, threshold=0.01): + """ + Calculate the number of iterations needed in order to reach the + ultimate loss plus a small threshold, and the convergence rate + which is the mean per iteration improvement of the gap between + the loss and the ultimate loss. + """ + ultimate_loss = loss_vec[-tail_len:].mean() + convergence_iter = (loss_vec < (ultimate_loss + threshold)).nonzero().min() + convergence_vec = loss_vec[:convergence_iter] - ultimate_loss + convergence_rate = (convergence_vec[:-1] / convergence_vec[1:]).log().mean() + return ultimate_loss, convergence_rate, convergence_iter + + def get_convergence_vec(lr_vec, centered_variance): + """ + Fit parameters for a vector of learning rates, with or without centered variance, + and calculate the convergence properties for each learning rate. + """ + ultimate_loss_vec, convergence_rate_vec, convergence_iter_vec = [], [], [] + for lr in lr_vec: + loss_vec = fit(lr=lr, centered_variance=centered_variance) + ultimate_loss, convergence_rate, convergence_iter = calc_convergence( + loss_vec + ) + ultimate_loss_vec.append(ultimate_loss) + convergence_rate_vec.append(convergence_rate) + convergence_iter_vec.append(convergence_iter) + return ( + torch.Tensor(ultimate_loss_vec), + torch.Tensor(convergence_rate_vec), + convergence_iter_vec, + ) + + ( + centered_ultimate_loss_vec, + centered_convergence_rate_vec, + centered_convergence_iter_vec, + ) = get_convergence_vec(lr_vec=lr_vec, centered_variance=True) + ultimate_loss_vec, convergence_rate_vec, convergence_iter_vec = get_convergence_vec( + lr_vec=lr_vec, centered_variance=False + ) + + # ALl centered variance results should converge + assert (centered_ultimate_loss_vec < 0.01).all() + # Some uncentered variance results do not converge + assert (ultimate_loss_vec > 0.01).any() + # Verify convergence rate improvement + assert ( + (centered_convergence_rate_vec / convergence_rate_vec) + > ((0.12 / torch.Tensor(lr_vec)).log() * 1.08) + ).all() + + if plot: + from matplotlib import pyplot as plt + + plt.figure(figsize=(6, 8)) + plt.subplot(3, 1, 1) + plt.loglog( + lr_vec, centered_convergence_iter_vec, "b.-", label="Centered Variance" + ) + plt.loglog(lr_vec, convergence_iter_vec, "r.-", label="Uncentered Variance") + plt.xlabel("Learning Rate") + plt.ylabel("Convergence Iteration") + plt.title("Convergence Iteration vs Learning Rate") + plt.grid() + plt.legend(loc="best") + plt.subplot(3, 1, 2) + plt.loglog( + lr_vec, centered_convergence_rate_vec, "b.-", label="Centered Variance" + ) + plt.loglog(lr_vec, convergence_rate_vec, "r.-", label="Uncentered Variance") + plt.xlabel("Learning Rate") + plt.ylabel("Convergence Rate") + plt.title("Convergence Rate vs Learning Rate") + plt.grid() + plt.legend(loc="best") + plt.subplot(3, 1, 3) + plt.semilogx( + lr_vec, centered_ultimate_loss_vec, "b.-", label="Centered Variance" + ) + plt.semilogx(lr_vec, ultimate_loss_vec, "r.-", label="Uncentered Variance") + plt.xlabel("Learning Rate") + plt.ylabel("Ultimate Loss") + plt.title("Ultimate Loss vs Learning Rate") + plt.grid() + plt.legend(loc="best") + plt.tight_layout() + plt.savefig("test_centered_variance.png") diff --git a/pyro/source/tests/params/__init__.py b/pyro/source/tests/params/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/tests/params/conftest.py b/pyro/source/tests/params/conftest.py new file mode 100644 index 0000000000000000000000000000000000000000..2f5f4429ff84691094a97769e008c13cfec26a87 --- /dev/null +++ b/pyro/source/tests/params/conftest.py @@ -0,0 +1,13 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest + + +def pytest_collection_modifyitems(items): + for item in items: + if item.nodeid.startswith("tests/params"): + if "stage" not in item.keywords: + item.add_marker(pytest.mark.stage("unit")) + if "init" not in item.keywords: + item.add_marker(pytest.mark.init(rng_seed=123)) diff --git a/pyro/source/tests/params/test_module.py b/pyro/source/tests/params/test_module.py new file mode 100644 index 0000000000000000000000000000000000000000..5ab792b86acd9aa1068f7f890420d7196b681bd2 --- /dev/null +++ b/pyro/source/tests/params/test_module.py @@ -0,0 +1,94 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch +import torch.nn as nn +from torch.nn import Parameter + +import pyro +import pyro.distributions as dist +import pyro.optim + + +class outest(nn.Module): + def __init__(self): + super().__init__() + self.l0 = outer() + self.l1 = nn.Linear(2, 2) + self.l2 = inner() + + def forward(self, s): + pass + + +class outer(torch.nn.Module): + def __init__(self): + super().__init__() + self.l0 = inner() + self.l1 = nn.Linear(2, 2) + + def forward(self, s): + pass + + +class inner(torch.nn.Module): + def __init__(self): + super().__init__() + self.l0 = nn.Linear(2, 2) + self.l1 = nn.ReLU() + + def forward(self, s): + pass + + +sequential = nn.Sequential(nn.Conv2d(1, 20, 5), nn.ReLU(), nn.Conv2d(20, 64, 5)) + + +@pytest.mark.parametrize("nn_module", [outest, outer]) +def test_module_nn(nn_module): + pyro.clear_param_store() + nn_module = nn_module() + assert pyro.get_param_store()._params == {} + pyro.module("module", nn_module) + for name in pyro.get_param_store(): + assert pyro.params.user_param_name(name) in nn_module.state_dict().keys() + + +@pytest.mark.parametrize("nn_module", [outest, outer]) +def test_param_no_grad(nn_module): + class net(torch.nn.Module): + def __init__(self): + super().__init__() + self.x = Parameter(torch.zeros(1)) + self.y = Parameter(torch.zeros(1), requires_grad=False) + + def forward(self, s): + pass + + with pytest.warns(UserWarning): + pyro.module("net", net()) + assert "net$$$x" in pyro.get_param_store().keys() + assert "net$$$y" not in pyro.get_param_store().keys() + + +@pytest.mark.parametrize("nn_module", [sequential]) +def test_module_sequential(nn_module): + pyro.clear_param_store() + assert pyro.get_param_store()._params == {} + pyro.module("module", nn_module) + for name in pyro.get_param_store(): + assert pyro.params.user_param_name(name) in nn_module.state_dict().keys() + + +@pytest.mark.parametrize("nn_module", [outest, outer]) +@pytest.mark.filterwarnings("ignore::FutureWarning") +def test_random_module(nn_module): + pyro.clear_param_store() + nn_module = nn_module() + p = torch.ones(2, 2) + prior = dist.Bernoulli(p) + lifted_mod = pyro.random_module("module", nn_module, prior) + nn_module = lifted_mod() + for name, parameter in nn_module.named_parameters(): + assert torch.equal(torch.ones(2, 2), parameter.data) diff --git a/pyro/source/tests/params/test_param.py b/pyro/source/tests/params/test_param.py new file mode 100644 index 0000000000000000000000000000000000000000..a5bfc6c494b94133f84edaf9e3d5ff2caef90788 --- /dev/null +++ b/pyro/source/tests/params/test_param.py @@ -0,0 +1,245 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +from copy import copy +from unittest import TestCase + +import numpy as np +import torch +import torch.optim +from torch import nn as nn +from torch.distributions import constraints + +import pyro +from tests.common import assert_equal + + +class ParamStoreDictTests(TestCase): + def setUp(self): + pyro.clear_param_store() + self.linear_module = nn.Linear(3, 2) + self.linear_module2 = nn.Linear(3, 2) + self.linear_module3 = nn.Linear(3, 2) + + def test_save_and_load(self): + lin = pyro.module("mymodule", self.linear_module) + pyro.module("mymodule2", self.linear_module2) + x = torch.randn(1, 3) + myparam = pyro.param("myparam", 1.234 * torch.ones(1)) + + cost = torch.sum(torch.pow(lin(x), 2.0)) * torch.pow(myparam, 4.0) + cost.backward() + params = list(self.linear_module.parameters()) + [myparam] + optim = torch.optim.Adam(params, lr=0.01) + myparam_copy_stale = copy(pyro.param("myparam").detach().cpu().numpy()) + + optim.step() + + myparam_copy = copy(pyro.param("myparam").detach().cpu().numpy()) + param_store_params = copy(pyro.get_param_store()._params) + param_store_param_to_name = copy(pyro.get_param_store()._param_to_name) + assert len(list(param_store_params.keys())) == 5 + assert len(list(param_store_param_to_name.values())) == 5 + + pyro.get_param_store().save("paramstore.unittest.out") + pyro.clear_param_store() + assert len(list(pyro.get_param_store()._params)) == 0 + assert len(list(pyro.get_param_store()._param_to_name)) == 0 + pyro.get_param_store().load("paramstore.unittest.out") + + def modules_are_equal(): + weights_equal = ( + np.sum( + np.fabs( + self.linear_module3.weight.detach().cpu().numpy() + - self.linear_module.weight.detach().cpu().numpy() + ) + ) + == 0.0 + ) + bias_equal = ( + np.sum( + np.fabs( + self.linear_module3.bias.detach().cpu().numpy() + - self.linear_module.bias.detach().cpu().numpy() + ) + ) + == 0.0 + ) + return weights_equal and bias_equal + + assert not modules_are_equal() + pyro.module("mymodule", self.linear_module3, update_module_params=False) + assert id(self.linear_module3.weight) != id(pyro.param("mymodule$$$weight")) + assert not modules_are_equal() + pyro.module("mymodule", self.linear_module3, update_module_params=True) + assert id(self.linear_module3.weight) == id(pyro.param("mymodule$$$weight")) + assert modules_are_equal() + + myparam = pyro.param("myparam") + store = pyro.get_param_store() + assert myparam_copy_stale != myparam.detach().cpu().numpy() + assert myparam_copy == myparam.detach().cpu().numpy() + assert sorted(param_store_params.keys()) == sorted(store._params.keys()) + assert sorted(param_store_param_to_name.values()) == sorted( + store._param_to_name.values() + ) + assert sorted(store._params.keys()) == sorted(store._param_to_name.values()) + + +def test_dict_interface(): + param_store = pyro.get_param_store() + + # start empty + param_store.clear() + assert not param_store + assert len(param_store) == 0 + assert "x" not in param_store + assert "y" not in param_store + assert list(param_store.items()) == [] + assert list(param_store.keys()) == [] + assert list(param_store.values()) == [] + + # add x + param_store["x"] = torch.zeros(1, 2, 3) + assert param_store + assert len(param_store) == 1 + assert "x" in param_store + assert "y" not in param_store + assert list(param_store.keys()) == ["x"] + assert [key for key, value in param_store.items()] == ["x"] + assert len(list(param_store.values())) == 1 + assert param_store["x"].shape == (1, 2, 3) + assert_equal(param_store.setdefault("x", torch.ones(1, 2, 3)), torch.zeros(1, 2, 3)) + assert param_store["x"].unconstrained() is param_store["x"] + + # add y + param_store.setdefault("y", torch.ones(4, 5), constraint=constraints.positive) + assert param_store + assert len(param_store) == 2 + assert "x" in param_store + assert "y" in param_store + assert sorted(param_store.keys()) == ["x", "y"] + assert sorted(key for key, value in param_store.items()) == ["x", "y"] + assert len(list(param_store.values())) == 2 + assert param_store["x"].shape == (1, 2, 3) + assert param_store["y"].shape == (4, 5) + assert_equal(param_store.setdefault("y", torch.zeros(4, 5)), torch.ones(4, 5)) + assert_equal(param_store["y"].unconstrained(), torch.zeros(4, 5)) + + # remove x + del param_store["x"] + assert param_store + assert len(param_store) == 1 + assert "x" not in param_store + assert "y" in param_store + assert list(param_store.keys()) == ["y"] + assert list(key for key, value in param_store.items()) == ["y"] + assert len(list(param_store.values())) == 1 + assert param_store["y"].shape == (4, 5) + assert_equal(param_store.setdefault("y", torch.zeros(4, 5)), torch.ones(4, 5)) + assert_equal(param_store["y"].unconstrained(), torch.zeros(4, 5)) + + # remove y + del param_store["y"] + assert not param_store + assert len(param_store) == 0 + assert "x" not in param_store + assert "y" not in param_store + assert list(param_store.keys()) == [] + assert list(key for key, value in param_store.items()) == [] + assert len(list(param_store.values())) == 0 + + +def test_scope(): + x0 = torch.randn(()) + z0 = torch.randn(5).exp() + x1 = torch.randn(3) + y1 = torch.randn(2, 1).exp() + y2 = torch.randn(2, 1).exp() + z2 = torch.randn(1, 4).exp() + z2 /= z2.sum() + + constraint_table = { + "z0": constraints.positive, + "y1": constraints.positive, + "y2": constraints.positive, + "z2": constraints.simplex, + } + + def check_constraint(name): + expected = constraint_table.get(name, constraints.real) + actual = param_store._constraints[name[:1]] + assert actual == expected + + param_store = pyro.get_param_store() + + # Create base scope. + assert not param_store + pyro.param("x", x0) + pyro.param("z", z0, constraint=constraints.positive) + assert set(param_store) == {"x", "z"} + assert_equal(pyro.param("x"), x0) + assert_equal(pyro.param("z"), z0) + check_constraint("x0") + check_constraint("z0") + + # Create scope1. + with param_store.scope() as scope1: + assert not param_store + pyro.param("x", x1) + pyro.param("y", y1, constraint=constraints.positive) + assert set(param_store) == {"x", "y"} + assert_equal(pyro.param("x"), x1) + assert_equal(pyro.param("y"), y1) + check_constraint("x1") + check_constraint("y1") + assert set(param_store) == {"x", "z"} + assert_equal(pyro.param("x"), x0) + assert_equal(pyro.param("z"), z0) + check_constraint("x0") + check_constraint("z0") + + # Create scope2. + with param_store.scope() as scope2: + assert not param_store + pyro.param("y", y2, constraint=constraints.positive) + pyro.param("z", z2, constraint=constraints.simplex) + assert set(param_store) == {"y", "z"} + assert_equal(pyro.param("y"), y2) + assert_equal(pyro.param("z"), z2) + check_constraint("y2") + check_constraint("z2") + assert set(param_store) == {"x", "z"} + assert_equal(pyro.param("x"), x0) + assert_equal(pyro.param("z"), z0) + check_constraint("x0") + check_constraint("z0") + + # Reload scope1. + with param_store.scope(scope1) as s: + assert s is scope1 + assert set(param_store) == {"x", "y"} + assert_equal(pyro.param("x"), x1) + assert_equal(pyro.param("y"), y1) + check_constraint("x1") + check_constraint("y1") + assert set(param_store) == {"x", "z"} + assert_equal(pyro.param("x"), x0) + assert_equal(pyro.param("z"), z0) + check_constraint("x0") + check_constraint("z0") + + # Reload scope2. + with param_store.scope(scope2) as s: + assert s is scope2 + assert set(param_store) == {"y", "z"} + assert_equal(pyro.param("y"), y2) + assert_equal(pyro.param("z"), z2) + check_constraint("y2") + check_constraint("z2") + assert set(param_store) == {"x", "z"} + assert_equal(pyro.param("x"), x0) + assert_equal(pyro.param("z"), z0) + check_constraint("x0") + check_constraint("z0") diff --git a/pyro/source/tests/perf/__init__.py b/pyro/source/tests/perf/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/tests/perf/conftest.py b/pyro/source/tests/perf/conftest.py new file mode 100644 index 0000000000000000000000000000000000000000..7178ccac7967adf173131d33a3448a4dedd5bcb0 --- /dev/null +++ b/pyro/source/tests/perf/conftest.py @@ -0,0 +1,13 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest + + +def pytest_collection_modifyitems(items): + for item in items: + if item.nodeid.startswith("tests/perf"): + if "perf" not in item.keywords: + item.add_marker(pytest.mark.stage("perf")) + if "init" not in item.keywords: + item.add_marker(pytest.mark.init(rng_seed=123)) diff --git a/pyro/source/tests/perf/test_benchmark.py b/pyro/source/tests/perf/test_benchmark.py new file mode 100644 index 0000000000000000000000000000000000000000..3eeb7250a21a5ed89fe9bc8b64dcf49deda61380 --- /dev/null +++ b/pyro/source/tests/perf/test_benchmark.py @@ -0,0 +1,208 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import argparse +import cProfile +import os +import re +from collections import namedtuple + +import pytest +import torch + +import pyro +import pyro.contrib.gp as gp +import pyro.distributions as dist +import pyro.optim as optim +from pyro.distributions.testing import fakes +from pyro.infer import SVI, Trace_ELBO, TraceGraph_ELBO +from pyro.infer.mcmc.api import MCMC +from pyro.infer.mcmc.hmc import HMC +from pyro.infer.mcmc.nuts import NUTS + +pytestmark = pytest.mark.stage("benchmark") + +Model = namedtuple("TestModel", ["model", "model_args", "model_id"]) + + +TEST_MODELS = [] +MODEL_IDS = [] +ROOT_DIR = os.path.abspath( + os.path.join(os.path.dirname(__file__), os.pardir, os.pardir) +) +PROF_DIR = os.path.join(ROOT_DIR, ".benchmarks") +if not os.path.exists(PROF_DIR): + os.makedirs(PROF_DIR) + + +def register_model(**model_kwargs): + def register_fn(model): + model_id = model_kwargs.pop("id") + test_model = Model(model, model_kwargs, model_id) + TEST_MODELS.append(test_model) + MODEL_IDS.append(model_id) + return model + + return register_fn + + +@register_model( + reparameterized=True, + Elbo=TraceGraph_ELBO, + id="PoissonGamma::reparam=True_TraceGraph", +) +@register_model( + reparameterized=True, Elbo=Trace_ELBO, id="PoissonGamma::reparam=True_Trace" +) +@register_model( + reparameterized=False, + Elbo=TraceGraph_ELBO, + id="PoissonGamma::reparam=False_TraceGraph", +) +@register_model( + reparameterized=False, Elbo=Trace_ELBO, id="PoissonGamma::reparam=False_Trace" +) +def poisson_gamma_model(reparameterized, Elbo): + pyro.set_rng_seed(0) + alpha0 = torch.tensor(1.0) + beta0 = torch.tensor(1.0) + data = torch.tensor([1.0, 2.0, 3.0]) + n_data = len(data) + data_sum = data.sum(0) + alpha_n = alpha0 + data_sum # posterior alpha + beta_n = beta0 + torch.tensor(float(n_data)) # posterior beta + log_alpha_n = torch.log(alpha_n) + log_beta_n = torch.log(beta_n) + + pyro.clear_param_store() + Gamma = dist.Gamma if reparameterized else fakes.NonreparameterizedGamma + + def model(): + lambda_latent = pyro.sample("lambda_latent", Gamma(alpha0, beta0)) + with pyro.plate("data", n_data): + pyro.sample("obs", dist.Poisson(lambda_latent), obs=data) + return lambda_latent + + def guide(): + alpha_q_log = pyro.param("alpha_q_log", log_alpha_n + 0.17) + beta_q_log = pyro.param("beta_q_log", log_beta_n - 0.143) + alpha_q, beta_q = torch.exp(alpha_q_log), torch.exp(beta_q_log) + pyro.sample("lambda_latent", Gamma(alpha_q, beta_q)) + + adam = optim.Adam({"lr": 0.0002, "betas": (0.97, 0.999)}) + svi = SVI(model, guide, adam, loss=Elbo()) + for k in range(3000): + svi.step() + + +@register_model(kernel=NUTS, step_size=0.02, num_samples=300, id="BernoulliBeta::NUTS") +@register_model( + kernel=HMC, step_size=0.02, num_steps=3, num_samples=1000, id="BernoulliBeta::HMC" +) +def bernoulli_beta_hmc(**kwargs): + def model(data): + alpha = pyro.param("alpha", torch.tensor([1.1, 1.1])) + beta = pyro.param("beta", torch.tensor([1.1, 1.1])) + p_latent = pyro.sample("p_latent", dist.Beta(alpha, beta)) + pyro.sample("obs", dist.Bernoulli(p_latent), obs=data) + return p_latent + + pyro.set_rng_seed(0) + true_probs = torch.tensor([0.9, 0.1]) + data = dist.Bernoulli(true_probs).sample(sample_shape=(torch.Size((1000,)))) + kernel = kwargs.pop("kernel") + num_samples = kwargs.pop("num_samples") + mcmc_kernel = kernel(model, **kwargs) + mcmc = MCMC(mcmc_kernel, num_samples=num_samples, warmup_steps=100) + mcmc.run(data) + return mcmc.get_samples()["p_latent"] + + +@register_model(num_steps=2000, whiten=False, id="VSGP::MultiClass_whiten=False") +@register_model(num_steps=2000, whiten=True, id="VSGP::MultiClass_whiten=True") +def vsgp_multiclass(num_steps, whiten): + # adapted from http://gpflow.readthedocs.io/en/latest/notebooks/multiclass.html + pyro.set_rng_seed(0) + X = torch.rand(100, 1) + K = (-0.5 * (X - X.t()).pow(2) / 0.01).exp() + torch.eye(100) * 1e-6 + f = torch.linalg.cholesky(K).matmul(torch.randn(100, 3)) + y = f.argmax(dim=-1) + + kernel = gp.kernels.Sum( + gp.kernels.Matern32(1), gp.kernels.WhiteNoise(1, variance=torch.tensor(0.01)) + ) + likelihood = gp.likelihoods.MultiClass(num_classes=3) + Xu = X[::5].clone() + + gpmodule = gp.models.VariationalSparseGP( + X, y, kernel, Xu, likelihood, latent_shape=torch.Size([3]), whiten=whiten + ) + + gpmodule.Xu.requires_grad_(False) + gpmodule.kernel.kern1.variance_unconstrained.requires_grad_(False) + + optimizer = torch.optim.Adam(gpmodule.parameters(), lr=0.0001) + gp.util.train(gpmodule, optimizer, num_steps=num_steps) + + +@pytest.mark.parametrize("model, model_args, id", TEST_MODELS, ids=MODEL_IDS) +@pytest.mark.benchmark( + min_rounds=5, + disable_gc=True, +) +@pytest.mark.disable_validation() +def test_benchmark(benchmark, model, model_args, id): + print("Running - {}".format(id)) + benchmark(model, **model_args) + + +def profile_fn(test_model): + def wrapped(): + test_model.model(**test_model.model_args) + + return wrapped + + +if __name__ == "__main__": + """ + This script is invoked to run cProfile on one of the models specified above. + """ + parser = argparse.ArgumentParser(description="Profiling different Pyro models.") + parser.add_argument( + "-m", + "--models", + nargs="*", + help="model name to match against model id, partial match (e.g. *NAME*) is acceptable.", + ) + parser.add_argument( + "-b", + "--suffix", + default="current_branch", + help="suffix to append to the cprofile output dump.", + ) + parser.add_argument( + "-d", + "--benchmark_dir", + default=PROF_DIR, + help="directory to save profiling benchmarks.", + ) + args = parser.parse_args() + search_regexp = [re.compile(".*" + m + ".*") for m in args.models] + profile_ids = [] + for r in search_regexp: + profile_ids.append(filter(r.match, MODEL_IDS)) + profile_ids = set().union(*profile_ids) + to_profile = [m for m in TEST_MODELS if m.model_id in profile_ids] + # run cProfile for all models if not specified + if not args.models: + to_profile = TEST_MODELS + for test_model in to_profile: + print("Running model - {}".format(test_model.model_id)) + pr = cProfile.Profile() + fn = profile_fn(test_model) + pr.runctx("fn()", globals(), locals()) + profile_file = os.path.join( + args.benchmark_dir, test_model.model_id + "#" + args.suffix + ".prof" + ) + pr.dump_stats(profile_file) + print("Results in - {}".format(profile_file)) diff --git a/pyro/source/tests/poutine/__init__.py b/pyro/source/tests/poutine/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyro/source/tests/poutine/conftest.py b/pyro/source/tests/poutine/conftest.py new file mode 100644 index 0000000000000000000000000000000000000000..25dddd4dfca238f26ad86a4ecb3ef924c871b461 --- /dev/null +++ b/pyro/source/tests/poutine/conftest.py @@ -0,0 +1,13 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest + + +def pytest_collection_modifyitems(items): + for item in items: + if item.nodeid.startswith("tests/poutine"): + if "stage" not in item.keywords: + item.add_marker(pytest.mark.stage("unit")) + if "init" not in item.keywords: + item.add_marker(pytest.mark.init(rng_seed=123)) diff --git a/pyro/source/tests/poutine/test_counterfactual.py b/pyro/source/tests/poutine/test_counterfactual.py new file mode 100644 index 0000000000000000000000000000000000000000..3d171bfc3c1aef7cae97606a2593c27026377a94 --- /dev/null +++ b/pyro/source/tests/poutine/test_counterfactual.py @@ -0,0 +1,102 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from tests.common import assert_equal, assert_not_equal + + +def _item(x): + if isinstance(x, torch.Tensor): + x = x.item() + return x + + +@pytest.mark.parametrize( + "intervene,observe,flip", + [ + (True, False, False), + (False, True, False), + (True, True, False), + (True, True, True), + ], +) +def test_counterfactual_query(intervene, observe, flip): + # x -> y -> z -> w + + sites = ["x", "y", "z", "w"] + observations = {"x": 1.0, "y": None, "z": 1.0, "w": 1.0} + interventions = {"x": None, "y": 0.0, "z": 2.0, "w": 1.0} + + def model(): + x = _item(pyro.sample("x", dist.Normal(0, 1))) + y = _item(pyro.sample("y", dist.Normal(x, 1))) + z = _item(pyro.sample("z", dist.Normal(y, 1))) + w = _item(pyro.sample("w", dist.Normal(z, 1))) + return dict(x=x, y=y, z=z, w=w) + + if not flip: + if intervene: + model = poutine.do(model, data=interventions) + if observe: + model = poutine.condition(model, data=observations) + elif flip and intervene and observe: + model = poutine.do( + poutine.condition(model, data=observations), data=interventions + ) + + tr = poutine.trace(model).get_trace() + actual_values = tr.nodes["_RETURN"]["value"] + for name in sites: + # case 1: purely observational query like poutine.condition + if not intervene and observe: + if observations[name] is not None: + assert tr.nodes[name]["is_observed"] + assert_equal(observations[name], actual_values[name]) + assert_equal(observations[name], tr.nodes[name]["value"]) + if interventions[name] != observations[name]: + assert_not_equal(interventions[name], actual_values[name]) + # case 2: purely interventional query like old poutine.do + elif intervene and not observe: + assert not tr.nodes[name]["is_observed"] + if interventions[name] is not None: + assert_equal(interventions[name], actual_values[name]) + assert_not_equal(observations[name], tr.nodes[name]["value"]) + assert_not_equal(interventions[name], tr.nodes[name]["value"]) + # case 3: counterfactual query mixing intervention and observation + elif intervene and observe: + if observations[name] is not None: + assert tr.nodes[name]["is_observed"] + assert_equal(observations[name], tr.nodes[name]["value"]) + if interventions[name] is not None: + assert_equal(interventions[name], actual_values[name]) + if interventions[name] != observations[name]: + assert_not_equal(interventions[name], tr.nodes[name]["value"]) + + +def test_plate_duplication_smoke(): + def model(N): + with pyro.plate("x_plate", N): + z1 = pyro.sample( + "z1", dist.MultivariateNormal(torch.zeros(2), torch.eye(2)) + ) + z2 = pyro.sample( + "z2", dist.MultivariateNormal(torch.zeros(2), torch.eye(2)) + ) + return pyro.sample("x", dist.MultivariateNormal(z1 + z2, torch.eye(2))) + + fix_z1 = torch.tensor([[-6.1258, -6.1524], [-4.1513, -4.3080]]) + + obs_x = torch.tensor([[-6.1258, -6.1524], [-4.1513, -4.3080]]) + + do_model = poutine.do(model, data={"z1": fix_z1}) + do_model = poutine.condition(do_model, data={"x": obs_x}) + do_auto = pyro.infer.autoguide.AutoMultivariateNormal(do_model) + optim = pyro.optim.Adam({"lr": 0.05}) + + svi = pyro.infer.SVI(do_model, do_auto, optim, pyro.infer.Trace_ELBO()) + svi.step(len(obs_x)) diff --git a/pyro/source/tests/poutine/test_mapdata.py b/pyro/source/tests/poutine/test_mapdata.py new file mode 100644 index 0000000000000000000000000000000000000000..8d7543e2d4db10a0a79405334bd04cf558eda3a8 --- /dev/null +++ b/pyro/source/tests/poutine/test_mapdata.py @@ -0,0 +1,185 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging + +import pytest +import torch + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from tests.common import requires_cuda + +logger = logging.getLogger(__name__) + + +def test_nested_iplate(): + means = [torch.randn(2) for i in range(8)] + mean_batch_size = 2 + stds = [torch.abs(torch.randn(2)) for i in range(6)] + std_batch_size = 3 + + def model(means, stds): + a_plate = pyro.plate("a", len(means), mean_batch_size) + b_plate = pyro.plate("b", len(stds), std_batch_size) + return [ + [ + pyro.sample("x_{}{}".format(i, j), dist.Normal(means[i], stds[j])) + for j in b_plate + ] + for i in a_plate + ] + + xs = model(means, stds) + assert len(xs) == mean_batch_size + assert len(xs[0]) == std_batch_size + + tr = poutine.trace(model).get_trace(means, stds) + for name in tr.nodes.keys(): + if tr.nodes[name]["type"] == "sample" and name.startswith("x_"): + assert tr.nodes[name]["scale"] == 4.0 * 2.0 + + +def plate_model(subsample_size): + loc = torch.zeros(20) + scale = torch.ones(20) + with pyro.plate("plate", 20, subsample_size) as batch: + pyro.sample("x", dist.Normal(loc[batch], scale[batch])) + result = list(batch.data) + return result + + +def iplate_model(subsample_size): + loc = torch.zeros(20) + scale = torch.ones(20) + result = [] + for i in pyro.plate("plate", 20, subsample_size): + pyro.sample("x_{}".format(i), dist.Normal(loc[i], scale[i])) + result.append(i) + return result + + +def nested_iplate_model(subsample_size): + loc = torch.zeros(20) + scale = torch.ones(20) + result = [] + inner_iplate = pyro.plate("inner", 20, 5) + for i in pyro.plate("outer", 20, subsample_size): + result.append([]) + for j in inner_iplate: + pyro.sample( + "x_{}_{}".format(i, j), + dist.Normal(loc[i] + loc[j], scale[i] + scale[j]), + ) + result[-1].append(j) + return result + + +@pytest.mark.parametrize("subsample_size", [5, 20]) +@pytest.mark.parametrize( + "model", + [plate_model, iplate_model, nested_iplate_model], + ids=["plate", "iplate", "nested_iplate"], +) +def test_cond_indep_stack(model, subsample_size): + tr = poutine.trace(model).get_trace(subsample_size) + for name, node in tr.nodes.items(): + if name.startswith("x"): + assert node[ + "cond_indep_stack" + ], "missing cond_indep_stack at node {}".format(name) + + +@pytest.mark.parametrize("subsample_size", [5, 20]) +@pytest.mark.parametrize( + "model", + [plate_model, iplate_model, nested_iplate_model], + ids=["plate", "iplate", "nested_iplate"], +) +def test_replay(model, subsample_size): + pyro.set_rng_seed(0) + + traced_model = poutine.trace(model) + original = traced_model(subsample_size) + + replayed = poutine.replay(model, trace=traced_model.trace)(subsample_size) + assert replayed == original + + if subsample_size < 20: + different = traced_model(subsample_size) + assert different != original + + +def plate_custom_model(subsample): + with pyro.plate("plate", 20, subsample=subsample) as batch: + result = batch + return result + + +def iplate_custom_model(subsample): + result = [] + for i in pyro.plate("plate", 20, subsample=subsample): + result.append(i) + return result + + +@pytest.mark.parametrize( + "model", [plate_custom_model, iplate_custom_model], ids=["plate", "iplate"] +) +def test_custom_subsample(model): + pyro.set_rng_seed(0) + + subsample = [1, 3, 5, 7] + assert model(subsample) == subsample + assert poutine.trace(model)(subsample) == subsample + + +def plate_cuda_model(subsample_size): + loc = torch.zeros(20).cuda() + scale = torch.ones(20).cuda() + with pyro.plate("data", 20, subsample_size, device=loc.device) as batch: + pyro.sample("x", dist.Normal(loc[batch], scale[batch])) + + +def iplate_cuda_model(subsample_size): + loc = torch.zeros(20).cuda() + scale = torch.ones(20).cuda() + for i in pyro.plate("data", 20, subsample_size, device=loc.device): + pyro.sample("x_{}".format(i), dist.Normal(loc[i], scale[i])) + + +@requires_cuda +@pytest.mark.parametrize("subsample_size", [5, 20]) +@pytest.mark.parametrize( + "model", [plate_cuda_model, iplate_cuda_model], ids=["plate", "iplate"] +) +def test_cuda(model, subsample_size): + tr = poutine.trace(model).get_trace(subsample_size) + assert tr.log_prob_sum().is_cuda + + +@pytest.mark.parametrize("model", [plate_model, iplate_model], ids=["plate", "iplate"]) +@pytest.mark.parametrize( + "behavior,model_size,guide_size", + [ + ("error", 20, 5), + ("error", 5, 20), + ("error", 5, None), + ("ok", 20, 20), + ("ok", 20, None), + ("ok", 5, 5), + ("ok", None, 20), + ("ok", None, 5), + ("ok", None, None), + ], +) +def test_model_guide_mismatch(behavior, model_size, guide_size, model): + model = poutine.trace(model) + expected_ind = model(guide_size) + if behavior == "ok": + actual_ind = poutine.replay(model, trace=model.trace)(model_size) + assert actual_ind == expected_ind + else: + with pytest.raises(ValueError): + poutine.replay(model, trace=model.trace)(model_size) diff --git a/pyro/source/tests/poutine/test_nesting.py b/pyro/source/tests/poutine/test_nesting.py new file mode 100644 index 0000000000000000000000000000000000000000..8d04a05f4ca4070c82dfaa094754b3843159e918 --- /dev/null +++ b/pyro/source/tests/poutine/test_nesting.py @@ -0,0 +1,31 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +import pyro.poutine.runtime + +logger = logging.getLogger(__name__) + + +def test_nested_reset(): + def nested_model(): + pyro.sample("internal0", dist.Bernoulli(0.5)) + with poutine.escape(escape_fn=lambda msg: msg["name"] == "internal2"): + pyro.sample("internal1", dist.Bernoulli(0.5)) + pyro.sample("internal2", dist.Bernoulli(0.5)) + pyro.sample("internal3", dist.Bernoulli(0.5)) + + with poutine.trace() as t2: + with poutine.block(hide=["internal2"]): + with poutine.trace() as t1: + try: + nested_model() + except poutine.NonlocalExit as site_container: + site_container.reset_stack() + logger.debug(pyro.poutine.runtime._PYRO_STACK) + assert "internal1" not in t1.trace + assert "internal1" in t2.trace diff --git a/pyro/source/tests/poutine/test_poutines.py b/pyro/source/tests/poutine/test_poutines.py new file mode 100644 index 0000000000000000000000000000000000000000..311837bc8774d22537a00a836a2e571b6da9707f --- /dev/null +++ b/pyro/source/tests/poutine/test_poutines.py @@ -0,0 +1,1113 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import functools +import io +import logging +import pickle +import warnings +from queue import Queue +from unittest import TestCase + +import pytest +import torch +import torch.nn as nn + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.distributions import Bernoulli, Categorical, Normal +from pyro.poutine.runtime import _DIM_ALLOCATOR, NonlocalExit +from pyro.poutine.util import all_escape, discrete_escape +from tests.common import assert_close, assert_equal, assert_not_equal + +logger = logging.getLogger(__name__) + + +def eq(x, y, prec=1e-10): + return torch.linalg.norm(x - y).item() < prec + + +# XXX name is a bit silly +class NormalNormalNormalHandlerTestCase(TestCase): + def setUp(self): + pyro.clear_param_store() + + def model(): + latent1 = pyro.sample("latent1", Normal(torch.zeros(2), torch.ones(2))) + latent2 = pyro.sample("latent2", Normal(latent1, 5 * torch.ones(2))) + x_dist = Normal(latent2, torch.ones(2)) + pyro.sample("obs", x_dist, obs=torch.ones(2)) + return latent1 + + def guide(): + loc1 = pyro.param("loc1", torch.randn(2, requires_grad=True)) + scale1 = pyro.param("scale1", torch.ones(2, requires_grad=True)) + pyro.sample("latent1", Normal(loc1, scale1)) + + loc2 = pyro.param("loc2", torch.randn(2, requires_grad=True)) + scale2 = pyro.param("scale2", torch.ones(2, requires_grad=True)) + latent2 = pyro.sample("latent2", Normal(loc2, scale2)) + return latent2 + + self.model = model + self.guide = guide + + self.model_sites = ["latent1", "latent2", "obs", "_INPUT", "_RETURN"] + + self.guide_sites = [ + "latent1", + "latent2", + "loc1", + "scale1", + "loc2", + "scale2", + "_INPUT", + "_RETURN", + ] + + self.full_sample_sites = {"latent1": "latent1", "latent2": "latent2"} + self.partial_sample_sites = {"latent1": "latent1"} + + +class TraceHandlerTests(NormalNormalNormalHandlerTestCase): + def test_trace_full(self): + guide_trace = poutine.trace(self.guide).get_trace() + model_trace = poutine.trace(self.model).get_trace() + for name in model_trace.nodes.keys(): + assert name in self.model_sites + + for name in guide_trace.nodes.keys(): + assert name in self.guide_sites + assert guide_trace.nodes[name]["type"] in ( + "args", + "return", + "sample", + "param", + ) + if guide_trace.nodes[name]["type"] == "sample": + assert not guide_trace.nodes[name]["is_observed"] + + def test_trace_return(self): + model_trace = poutine.trace(self.model).get_trace() + assert_equal( + model_trace.nodes["latent1"]["value"], model_trace.nodes["_RETURN"]["value"] + ) + + def test_trace_param_only(self): + model_trace = poutine.trace(self.model, param_only=True).get_trace() + assert all(site["type"] == "param" for site in model_trace.nodes.values()) + + +class ReplayHandlerTests(NormalNormalNormalHandlerTestCase): + def test_replay_full(self): + guide_trace = poutine.trace(self.guide).get_trace() + model_trace = poutine.trace( + poutine.replay(self.model, trace=guide_trace) + ).get_trace() + for name in self.full_sample_sites.keys(): + assert_equal( + model_trace.nodes[name]["value"], guide_trace.nodes[name]["value"] + ) + + def test_replay_full_repeat(self): + model_trace = poutine.trace(self.model).get_trace() + ftr = poutine.trace(poutine.replay(self.model, trace=model_trace)) + tr11 = ftr.get_trace() + tr12 = ftr.get_trace() + tr2 = poutine.trace(poutine.replay(self.model, trace=model_trace)).get_trace() + for name in self.full_sample_sites.keys(): + assert_equal(tr11.nodes[name]["value"], tr12.nodes[name]["value"]) + assert_equal(tr11.nodes[name]["value"], tr2.nodes[name]["value"]) + assert_equal(model_trace.nodes[name]["value"], tr11.nodes[name]["value"]) + assert_equal(model_trace.nodes[name]["value"], tr2.nodes[name]["value"]) + + +class BlockHandlerTests(NormalNormalNormalHandlerTestCase): + def test_block_hide_fn(self): + model_trace = poutine.trace( + poutine.block( + self.model, + hide_fn=lambda msg: "latent" in msg["name"], + expose=["latent1"], + ) + ).get_trace() + assert "latent1" not in model_trace + assert "latent2" not in model_trace + assert "obs" in model_trace + + def test_block_expose_fn(self): + model_trace = poutine.trace( + poutine.block( + self.model, + expose_fn=lambda msg: "latent" in msg["name"], + hide=["latent1"], + ) + ).get_trace() + assert "latent1" in model_trace + assert "latent2" in model_trace + assert "obs" not in model_trace + + def test_block_full(self): + model_trace = poutine.trace(poutine.block(self.model)).get_trace() + guide_trace = poutine.trace(poutine.block(self.guide)).get_trace() + for name in model_trace.nodes.keys(): + assert model_trace.nodes[name]["type"] in ("args", "return") + for name in guide_trace.nodes.keys(): + assert guide_trace.nodes[name]["type"] in ("args", "return") + + def test_block_full_hide(self): + model_trace = poutine.trace( + poutine.block(self.model, hide=self.model_sites) + ).get_trace() + guide_trace = poutine.trace( + poutine.block(self.guide, hide=self.guide_sites) + ).get_trace() + for name in model_trace.nodes.keys(): + assert model_trace.nodes[name]["type"] in ("args", "return") + for name in guide_trace.nodes.keys(): + assert guide_trace.nodes[name]["type"] in ("args", "return") + + def test_block_full_expose(self): + model_trace = poutine.trace( + poutine.block(self.model, expose=self.model_sites) + ).get_trace() + guide_trace = poutine.trace( + poutine.block(self.guide, expose=self.guide_sites) + ).get_trace() + for name in self.model_sites: + assert name in model_trace + for name in self.guide_sites: + assert name in guide_trace + + def test_block_full_hide_expose(self): + try: + poutine.block( + self.model, + hide=self.partial_sample_sites.keys(), + expose=self.partial_sample_sites.keys(), + )() + assert False + except AssertionError: + assert True + + def test_block_partial_hide(self): + model_trace = poutine.trace( + poutine.block(self.model, hide=self.partial_sample_sites.keys()) + ).get_trace() + guide_trace = poutine.trace( + poutine.block(self.guide, hide=self.partial_sample_sites.keys()) + ).get_trace() + for name in self.full_sample_sites.keys(): + if name in self.partial_sample_sites: + assert name not in model_trace + assert name not in guide_trace + else: + assert name in model_trace + assert name in guide_trace + + def test_block_partial_expose(self): + model_trace = poutine.trace( + poutine.block(self.model, expose=self.partial_sample_sites.keys()) + ).get_trace() + guide_trace = poutine.trace( + poutine.block(self.guide, expose=self.partial_sample_sites.keys()) + ).get_trace() + for name in self.full_sample_sites.keys(): + if name in self.partial_sample_sites: + assert name in model_trace + assert name in guide_trace + else: + assert name not in model_trace + assert name not in guide_trace + + def test_block_tutorial_case(self): + model_trace = poutine.trace(self.model).get_trace() + guide_trace = poutine.trace( + poutine.block(self.guide, hide_types=["observe"]) + ).get_trace() + + assert "latent1" in model_trace + assert "latent1" in guide_trace + assert "obs" in model_trace + assert "obs" not in guide_trace + + +class QueueHandlerDiscreteTest(TestCase): + def setUp(self): + # simple Gaussian-mixture HMM + def model(): + probs = pyro.param("probs", torch.tensor([[0.8], [0.3]])) + loc = pyro.param("loc", torch.tensor([[-0.1], [0.9]])) + scale = torch.ones(1, 1) + + latents = [torch.ones(1)] + observes = [] + for t in range(3): + latents.append( + pyro.sample( + "latent_{}".format(str(t)), + Bernoulli(probs[latents[-1][0].long().data]), + ) + ) + + observes.append( + pyro.sample( + "observe_{}".format(str(t)), + Normal(loc[latents[-1][0].long().data], scale), + obs=torch.ones(1), + ) + ) + return latents + + self.sites = ( + ["observe_{}".format(str(t)) for t in range(3)] + + ["latent_{}".format(str(t)) for t in range(3)] + + ["_INPUT", "_RETURN"] + ) + self.model = model + self.queue = Queue() + self.queue.put(poutine.Trace()) + + def test_queue_single(self): + f = poutine.trace(poutine.queue(self.model, queue=self.queue)) + tr = f.get_trace() + for name in self.sites: + assert name in tr + + def test_queue_enumerate(self): + f = poutine.trace(poutine.queue(self.model, queue=self.queue)) + trs = [] + while not self.queue.empty(): + trs.append(f.get_trace()) + assert len(trs) == 2**3 + + true_latents = set() + for i1 in range(2): + for i2 in range(2): + for i3 in range(2): + true_latents.add((i1, i2, i3)) + + tr_latents = [] + for tr in trs: + tr_latents.append( + tuple( + [ + int(tr.nodes[name]["value"].view(-1).item()) + for name in tr + if tr.nodes[name]["type"] == "sample" + and not tr.nodes[name]["is_observed"] + ] + ) + ) + + assert true_latents == set(tr_latents) + + def test_queue_max_tries(self): + f = poutine.queue(self.model, queue=self.queue, max_tries=3) + with pytest.raises(ValueError): + f() + + +class Model(nn.Module): + def __init__(self): + super().__init__() + self.fc = nn.Linear(2, 1) + + def forward(self, x): + return self.fc(x) + + +class LiftHandlerTests(TestCase): + def setUp(self): + pyro.clear_param_store() + + def loc1_prior(tensor, *args, **kwargs): + flat_tensor = tensor.view(-1) + m = torch.zeros(flat_tensor.size(0)) + s = torch.ones(flat_tensor.size(0)) + return Normal(m, s).sample().view(tensor.size()) + + def scale1_prior(tensor, *args, **kwargs): + flat_tensor = tensor.view(-1) + m = torch.zeros(flat_tensor.size(0)) + s = torch.ones(flat_tensor.size(0)) + return Normal(m, s).sample().view(tensor.size()).exp() + + def loc2_prior(tensor, *args, **kwargs): + flat_tensor = tensor.view(-1) + m = torch.zeros(flat_tensor.size(0)) + return Bernoulli(m).sample().view(tensor.size()) + + def scale2_prior(tensor, *args, **kwargs): + return scale1_prior(tensor) + + def bias_prior(tensor, *args, **kwargs): + return loc2_prior(tensor) + + def weight_prior(tensor, *args, **kwargs): + return scale1_prior(tensor) + + def stoch_fn(tensor, *args, **kwargs): + loc = torch.zeros(tensor.size()) + scale = torch.ones(tensor.size()) + return pyro.sample("sample", Normal(loc, scale)) + + def guide(): + loc1 = pyro.param("loc1", torch.randn(2, requires_grad=True)) + scale1 = pyro.param("scale1", torch.ones(2, requires_grad=True)) + pyro.sample("latent1", Normal(loc1, scale1)) + + loc2 = pyro.param("loc2", torch.randn(2, requires_grad=True)) + scale2 = pyro.param("scale2", torch.ones(2, requires_grad=True)) + latent2 = pyro.sample("latent2", Normal(loc2, scale2)) + return latent2 + + def dup_param_guide(): + a = pyro.param("loc") + b = pyro.param("loc") + assert a == b + + self.model = Model() + self.guide = guide + self.dup_param_guide = dup_param_guide + self.prior = scale1_prior + self.prior_dict = { + "loc1": loc1_prior, + "scale1": scale1_prior, + "loc2": loc2_prior, + "scale2": scale2_prior, + } + self.partial_dict = {"loc1": loc1_prior, "scale1": scale1_prior} + self.nn_prior = {"fc.bias": bias_prior, "fc.weight": weight_prior} + self.fn = stoch_fn + self.data = torch.randn(2, 2) + + def test_splice(self): + tr = poutine.trace(self.guide).get_trace() + lifted_tr = poutine.trace( + poutine.lift(self.guide, prior=self.prior) + ).get_trace() + for name in tr.nodes.keys(): + if name in ("loc1", "loc2", "scale1", "scale2"): + assert name not in lifted_tr + else: + assert name in lifted_tr + + def test_memoize(self): + poutine.trace(poutine.lift(self.dup_param_guide, prior=dist.Normal(0, 1)))() + + def test_prior_dict(self): + tr = poutine.trace(self.guide).get_trace() + lifted_tr = poutine.trace( + poutine.lift(self.guide, prior=self.prior_dict) + ).get_trace() + for name in tr.nodes.keys(): + assert name in lifted_tr + if name in {"scale1", "loc1", "scale2", "loc2"}: + assert name + "_prior" == lifted_tr.nodes[name]["fn"].__name__ + if tr.nodes[name]["type"] == "param": + assert lifted_tr.nodes[name]["type"] == "sample" + assert not lifted_tr.nodes[name]["is_observed"] + + def test_unlifted_param(self): + tr = poutine.trace(self.guide).get_trace() + lifted_tr = poutine.trace( + poutine.lift(self.guide, prior=self.partial_dict) + ).get_trace() + for name in tr.nodes.keys(): + assert name in lifted_tr + if name in ("scale1", "loc1"): + assert name + "_prior" == lifted_tr.nodes[name]["fn"].__name__ + assert lifted_tr.nodes[name]["type"] == "sample" + assert not lifted_tr.nodes[name]["is_observed"] + if name in ("scale2", "loc2"): + assert lifted_tr.nodes[name]["type"] == "param" + + @pytest.mark.filterwarnings("ignore::FutureWarning") + def test_random_module(self): + pyro.clear_param_store() + with pyro.validation_enabled(): + lifted_tr = poutine.trace( + pyro.random_module("name", self.model, prior=self.prior) + ).get_trace() + for name in lifted_tr.nodes.keys(): + if lifted_tr.nodes[name]["type"] == "param": + assert lifted_tr.nodes[name]["type"] == "sample" + assert not lifted_tr.nodes[name]["is_observed"] + + @pytest.mark.filterwarnings("ignore::FutureWarning") + def test_random_module_warn(self): + pyro.clear_param_store() + bad_prior = {"foo": None} + with warnings.catch_warnings(record=True) as w: + warnings.simplefilter("always") + with pyro.validation_enabled(): + poutine.trace( + pyro.random_module("name", self.model, prior=bad_prior) + ).get_trace() + assert len(w), "No warnings were raised" + for warning in w: + logger.info(warning) + + @pytest.mark.filterwarnings("ignore::FutureWarning") + def test_random_module_prior_dict(self): + pyro.clear_param_store() + lifted_nn = pyro.random_module("name", self.model, prior=self.nn_prior) + lifted_tr = poutine.trace(lifted_nn).get_trace() + for key_name in lifted_tr.nodes.keys(): + name = pyro.params.user_param_name(key_name) + if name in {"fc.weight", "fc.prior"}: + dist_name = name[3:] + assert dist_name + "_prior" == lifted_tr.nodes[key_name]["fn"].__name__ + assert lifted_tr.nodes[key_name]["type"] == "sample" + assert not lifted_tr.nodes[key_name]["is_observed"] + + +class QueueHandlerMixedTest(TestCase): + def setUp(self): + # Simple model with 1 continuous + 1 discrete + 1 continuous variable. + def model(): + p = torch.tensor([0.5]) + loc = torch.zeros(1) + scale = torch.ones(1) + + x = pyro.sample("x", Normal(loc, scale)) # Before the discrete variable. + y = pyro.sample("y", Bernoulli(p)) + z = pyro.sample("z", Normal(loc, scale)) # After the discrete variable. + return dict(x=x, y=y, z=z) + + self.sites = ["x", "y", "z", "_INPUT", "_RETURN"] + self.model = model + self.queue = Queue() + self.queue.put(poutine.Trace()) + + def test_queue_single(self): + f = poutine.trace(poutine.queue(self.model, queue=self.queue)) + tr = f.get_trace() + for name in self.sites: + assert name in tr + + def test_queue_enumerate(self): + f = poutine.trace(poutine.queue(self.model, queue=self.queue)) + trs = [] + while not self.queue.empty(): + trs.append(f.get_trace()) + assert len(trs) == 2 + + values = [ + { + name: tr.nodes[name]["value"].view(-1).item() + for name in tr.nodes.keys() + if tr.nodes[name]["type"] == "sample" + } + for tr in trs + ] + + expected_ys = set([0, 1]) + actual_ys = set([value["y"] for value in values]) + assert actual_ys == expected_ys + + # Check that x was sampled the same on all each paths. + assert values[0]["x"] == values[1]["x"] + + # Check that y was sampled differently on each path. + assert values[0]["z"] != values[1]["z"] # Almost surely true. + + +class IndirectLambdaHandlerTests(TestCase): + def setUp(self): + def model(batch_size_outer=2, batch_size_inner=2): + data = [[torch.ones(1)] * 2] * 2 + loc_latent = pyro.sample( + "loc_latent", dist.Normal(torch.zeros(1), torch.ones(1)) + ) + for i in pyro.plate("plate_outer", 2, batch_size_outer): + for j in pyro.plate("plate_inner_%d" % i, 2, batch_size_inner): + pyro.sample( + "z_%d_%d" % (i, j), + dist.Normal(loc_latent + data[i][j], torch.ones(1)), + ) + + self.model = model + self.expected_nodes = set( + ["z_0_0", "z_0_1", "z_1_0", "z_1_1", "loc_latent", "_INPUT", "_RETURN"] + ) + self.expected_edges = set( + [ + ("loc_latent", "z_0_0"), + ("loc_latent", "z_0_1"), + ("loc_latent", "z_1_0"), + ("loc_latent", "z_1_1"), + ] + ) + + def test_graph_structure(self): + tracegraph = poutine.trace(self.model, graph_type="dense").get_trace() + # Ignore structure on plate_* nodes. + actual_nodes = set(n for n in tracegraph.nodes if not n.startswith("plate_")) + actual_edges = set( + (n1, n2) + for n1, n2 in tracegraph.edges + if not n1.startswith("plate_") + if not n2.startswith("plate_") + ) + assert actual_nodes == self.expected_nodes + assert actual_edges == self.expected_edges + + def test_scale_factors(self): + def _test_scale_factor(batch_size_outer, batch_size_inner, expected): + trace = poutine.trace(self.model, graph_type="dense").get_trace( + batch_size_outer=batch_size_outer, batch_size_inner=batch_size_inner + ) + scale_factors = [] + for node in ["z_0_0", "z_0_1", "z_1_0", "z_1_1"]: + if node in trace: + scale_factors.append(trace.nodes[node]["scale"]) + assert scale_factors == expected + + _test_scale_factor(1, 1, [4.0]) + _test_scale_factor(2, 2, [1.0] * 4) + _test_scale_factor(1, 2, [2.0] * 2) + _test_scale_factor(2, 1, [2.0] * 2) + + +class SubstituteHandlerTests(NormalNormalNormalHandlerTestCase): + def test_substitute(self): + data = {"loc1": torch.randn(2)} + tr2 = poutine.trace(poutine.substitute(self.guide, data=data)).get_trace() + assert "loc1" in tr2 + assert tr2.nodes["loc1"]["type"] == "param" + assert tr2.nodes["loc1"]["value"] is data["loc1"] + + def test_stack_overwrite_behavior(self): + data1 = {"loc1": torch.randn(2)} + data2 = {"loc1": torch.randn(2)} + with poutine.trace() as tr: + cm = poutine.substitute( + poutine.substitute(self.guide, data=data1), data=data2 + ) + cm() + assert tr.trace.nodes["loc1"]["value"] is data2["loc1"] + + def test_stack_success(self): + data1 = {"loc1": torch.randn(2)} + data2 = {"loc2": torch.randn(2)} + tr = poutine.trace( + poutine.substitute(poutine.substitute(self.guide, data=data1), data=data2) + ).get_trace() + assert tr.nodes["loc1"]["type"] == "param" + assert tr.nodes["loc1"]["value"] is data1["loc1"] + assert tr.nodes["loc2"]["type"] == "param" + assert tr.nodes["loc2"]["value"] is data2["loc2"] + + +class ConditionHandlerTests(NormalNormalNormalHandlerTestCase): + def test_condition(self): + data = {"latent2": torch.randn(2)} + tr2 = poutine.trace(poutine.condition(self.model, data=data)).get_trace() + assert "latent2" in tr2 + assert ( + tr2.nodes["latent2"]["type"] == "sample" + and tr2.nodes["latent2"]["is_observed"] + ) + assert tr2.nodes["latent2"]["value"] is data["latent2"] + + def test_trace_data(self): + tr1 = poutine.trace( + poutine.block(self.model, expose_types=["sample"]) + ).get_trace() + tr2 = poutine.trace(poutine.condition(self.model, data=tr1)).get_trace() + assert ( + tr2.nodes["latent2"]["type"] == "sample" + and tr2.nodes["latent2"]["is_observed"] + ) + assert tr2.nodes["latent2"]["value"] is tr1.nodes["latent2"]["value"] + + def test_stack_overwrite_behavior(self): + data1 = {"latent2": torch.randn(2)} + data2 = {"latent2": torch.randn(2)} + with poutine.trace() as tr: + cm = poutine.condition( + poutine.condition(self.model, data=data1), data=data2 + ) + cm() + assert tr.trace.nodes["latent2"]["value"] is data2["latent2"] + + def test_stack_success(self): + data1 = {"latent1": torch.randn(2)} + data2 = {"latent2": torch.randn(2)} + tr = poutine.trace( + poutine.condition(poutine.condition(self.model, data=data1), data=data2) + ).get_trace() + assert ( + tr.nodes["latent1"]["type"] == "sample" + and tr.nodes["latent1"]["is_observed"] + ) + assert tr.nodes["latent1"]["value"] is data1["latent1"] + assert ( + tr.nodes["latent2"]["type"] == "sample" + and tr.nodes["latent2"]["is_observed"] + ) + assert tr.nodes["latent2"]["value"] is data2["latent2"] + + +class UnconditionHandlerTests(NormalNormalNormalHandlerTestCase): + def test_uncondition(self): + unconditioned_model = poutine.uncondition(self.model) + unconditioned_trace = poutine.trace(unconditioned_model).get_trace() + conditioned_trace = poutine.trace(self.model).get_trace() + assert_equal(conditioned_trace.nodes["obs"]["value"], torch.ones(2)) + assert_not_equal(unconditioned_trace.nodes["obs"]["value"], torch.ones(2)) + + def test_undo_uncondition(self): + unconditioned_model = poutine.uncondition(self.model) + reconditioned_model = pyro.condition( + unconditioned_model, {"obs": torch.ones(2)} + ) + reconditioned_trace = poutine.trace(reconditioned_model).get_trace() + assert_equal(reconditioned_trace.nodes["obs"]["value"], torch.ones(2)) + + +class EscapeHandlerTests(TestCase): + def setUp(self): + # Simple model with 1 continuous + 1 discrete + 1 continuous variable. + def model(): + p = torch.tensor([0.5]) + loc = torch.zeros(1) + scale = torch.ones(1) + + x = pyro.sample("x", Normal(loc, scale)) # Before the discrete variable. + y = pyro.sample("y", Bernoulli(p)) + z = pyro.sample("z", Normal(loc, scale)) # After the discrete variable. + return dict(x=x, y=y, z=z) + + self.sites = ["x", "y", "z", "_INPUT", "_RETURN"] + self.model = model + + def test_discrete_escape(self): + try: + poutine.escape( + self.model, + escape_fn=functools.partial(discrete_escape, poutine.Trace()), + )() + assert False + except NonlocalExit as e: + assert e.site["name"] == "y" + + def test_all_escape(self): + try: + poutine.escape( + self.model, escape_fn=functools.partial(all_escape, poutine.Trace()) + )() + assert False + except NonlocalExit as e: + assert e.site["name"] == "x" + + def test_trace_compose(self): + tm = poutine.trace(self.model) + try: + poutine.escape( + tm, escape_fn=functools.partial(all_escape, poutine.Trace()) + )() + assert False + except NonlocalExit: + assert "x" in tm.trace + try: + tem = poutine.trace( + poutine.escape( + self.model, + escape_fn=functools.partial(all_escape, poutine.Trace()), + ) + ) + tem() + assert False + except NonlocalExit: + assert "x" not in tem.trace + + +class InferConfigHandlerTests(TestCase): + def setUp(self): + def model(): + pyro.param("p", torch.zeros(1, requires_grad=True)) + pyro.sample( + "a", Bernoulli(torch.tensor([0.5])), infer={"enumerate": "parallel"} + ) + pyro.sample("b", Bernoulli(torch.tensor([0.5]))) + + self.model = model + + def config_fn(site): + if site["type"] == "sample": + return {"blah": True} + else: + return {} + + self.config_fn = config_fn + + def test_infer_config_sample(self): + cfg_model = poutine.infer_config(self.model, config_fn=self.config_fn) + + tr = poutine.trace(cfg_model).get_trace() + + assert tr.nodes["a"]["infer"] == {"enumerate": "parallel", "blah": True} + assert tr.nodes["b"]["infer"] == {"blah": True} + assert tr.nodes["p"]["infer"] == {} + + +class EqualizeHandlerTests(TestCase): + def setUp(self): + def per_category_model(category): + shift = pyro.param(f"{category}_shift", torch.randn(1)) + mean = pyro.sample(f"{category}_mean", pyro.distributions.Normal(0, 1)) + std = pyro.sample(f"{category}_std", pyro.distributions.LogNormal(0, 1)) + with pyro.plate(f"{category}_num_samples", 5): + return pyro.sample( + f"{category}_values", pyro.distributions.Normal(mean + shift, std) + ) + + def model(categories=["dogs", "cats"]): + return {category: per_category_model(category) for category in categories} + + self.model = model + + def test_sample_site_equalization(self): + pyro.set_rng_seed(20240616) + pyro.clear_param_store() + model = poutine.equalize(self.model, ".+_std") + tr = pyro.poutine.trace(model).get_trace() + assert_equal(tr.nodes["cats_std"]["value"], tr.nodes["dogs_std"]["value"]) + assert_not_equal( + tr.nodes["cats_shift"]["value"], tr.nodes["dogs_shift"]["value"] + ) + guide = pyro.infer.autoguide.AutoNormal(model) + guide_sites = [*guide()] + assert guide_sites == [ + "dogs_mean", + "dogs_std", + "dogs_values", + "cats_mean", + "cats_values", + ] + + def test_param_equalization(self): + pyro.set_rng_seed(20240616) + pyro.clear_param_store() + model = poutine.equalize(self.model, ".+_shift", "param") + tr = pyro.poutine.trace(model).get_trace() + assert_equal(tr.nodes["cats_shift"]["value"], tr.nodes["dogs_shift"]["value"]) + assert_not_equal(tr.nodes["cats_std"]["value"], tr.nodes["dogs_std"]["value"]) + + def test_render_model(self): + pyro.set_rng_seed(20240616) + pyro.clear_param_store() + model = poutine.equalize(self.model, ".+_std") + pyro.render_model(model) + + +@pytest.mark.parametrize("keep_dist", [False, True]) +@pytest.mark.parametrize( + "loc_x, scale_x, loc_y, scale_y", [(0.0, 1.0, 5.0, 2.0), (5.0, 2.0, 0.0, 1.0)] +) +def test_condition_by_equalize(loc_x, scale_x, loc_y, scale_y, keep_dist): + # Create model and equalize it. + def model(): + x = pyro.sample("x", dist.Normal(loc_x, scale_x)) + y = pyro.sample("y", dist.Normal(loc_y, scale_y)) + return x, y + + equalized_model = pyro.poutine.equalize(model, ["x", "y"], keep_dist=keep_dist) + + # Fit guide to model + guide = pyro.infer.autoguide.AutoNormal(equalized_model) + optim = pyro.optim.Adam(dict(lr=0.1)) + svi = pyro.infer.SVI( + equalized_model, + guide, + optim, + loss=pyro.infer.TraceGraph_ELBO(num_particles=1000, vectorize_particles=True), + ) + for step_num in range(100): + svi.step() + + # Get guide distribution parameters + loc, scale = guide._get_loc_and_scale("x") + loc = float(loc.detach().numpy()) + scale = float(scale.detach().numpy()) + + # Verify against expected distribution parameters + if keep_dist: + # Both 'x' and 'y' are sampled and the model is conditioned on 'x' and 'y' having the same value. + expected_var = 1 / (1 / scale_x**2 + 1 / scale_y**2) + expected_loc = (loc_x / scale_x**2 + loc_y / scale_y**2) * expected_var + expected_scale = expected_var**0.5 + else: + # The random variable 'x' is sampled and its value is assigned to 'y'. + expected_loc = loc_x + expected_scale = scale_x + assert_close(loc, expected_loc, atol=0.05) + assert_close(scale, expected_scale, atol=0.05) + + +@pytest.mark.parametrize("first_available_dim", [-1, -2, -3]) +@pytest.mark.parametrize("depth", [0, 1, 2]) +def test_enumerate_poutine(depth, first_available_dim): + num_particles = 2 + + def model(): + pyro.sample("x", Bernoulli(0.5)) + for i in range(depth): + pyro.sample( + "a_{}".format(i), Bernoulli(0.5), infer={"enumerate": "parallel"} + ) + + model = poutine.enum(model, first_available_dim=first_available_dim) + model = poutine.trace(model) + + for i in range(num_particles): + tr = model.get_trace() + tr.compute_log_prob() + log_prob = sum(site["log_prob"] for name, site in tr.iter_stochastic_nodes()) + actual_shape = log_prob.shape + expected_shape = (2,) * depth + if depth: + expected_shape = expected_shape + (1,) * (-1 - first_available_dim) + assert actual_shape == expected_shape, "error on iteration {}".format(i) + + +@pytest.mark.parametrize("first_available_dim", [-1, -2, -3]) +@pytest.mark.parametrize("depth", [0, 1, 2]) +def test_replay_enumerate_poutine(depth, first_available_dim): + num_particles = 2 + y_dist = Categorical(torch.tensor([0.5, 0.25, 0.25])) + + def guide(): + pyro.sample("y", y_dist, infer={"enumerate": "parallel"}) + + guide = poutine.enum(guide, first_available_dim=first_available_dim - depth) + guide = poutine.trace(guide) + guide_trace = guide.get_trace() + + def model(): + pyro.sample("x", Bernoulli(0.5)) + for i in range(depth): + pyro.sample( + "a_{}".format(i), Bernoulli(0.5), infer={"enumerate": "parallel"} + ) + pyro.sample("y", y_dist, infer={"enumerate": "parallel"}) + for i in range(depth): + pyro.sample( + "b_{}".format(i), Bernoulli(0.5), infer={"enumerate": "parallel"} + ) + + model = poutine.enum(model, first_available_dim=first_available_dim) + model = poutine.replay(model, trace=guide_trace) + model = poutine.trace(model) + + for i in range(num_particles): + tr = model.get_trace() + assert tr.nodes["y"]["value"] is guide_trace.nodes["y"]["value"] + tr.compute_log_prob() + log_prob = sum(site["log_prob"] for name, site in tr.iter_stochastic_nodes()) + actual_shape = log_prob.shape + expected_shape = ( + (2,) * depth + (3,) + (2,) * depth + (1,) * (-1 - first_available_dim) + ) + assert actual_shape == expected_shape, "error on iteration {}".format(i) + + +@pytest.mark.parametrize("has_rsample", [False, True]) +@pytest.mark.parametrize("depth", [0, 1, 2]) +def test_plate_preserves_has_rsample(has_rsample, depth): + def guide(): + loc = pyro.param("loc", torch.tensor(0.0)) + with pyro.plate_stack("plates", (2,) * depth): + return pyro.sample("x", dist.Normal(loc, 1).has_rsample_(has_rsample)) + + x = guide() + assert x.dim() == depth + assert x.requires_grad == has_rsample + + +def test_plate_error_on_enter(): + def model(): + with pyro.plate("foo", 0): + pass + + assert len(_DIM_ALLOCATOR._stack) == 0 + with pytest.raises(ZeroDivisionError): + poutine.trace(model)() + assert len(_DIM_ALLOCATOR._stack) == 0, "stack was not cleaned on error" + + +@pytest.mark.parametrize( + "graph_type, expected", [("flat", set()), ("dense", {"x", "y"})] +) +def test_trace_plate(graph_type: str, expected: set): + def model(): + with pyro.plate("plate", 2): + x = pyro.sample("x", dist.Normal(0, 1)) + pyro.sample("y", dist.Normal(x, 1)) + + trace = poutine.trace(model, graph_type=graph_type).get_trace() + nodes = set().union(*trace._succ.values(), *trace._pred.values()) + assert nodes == expected + + +def test_decorator_interface_primitives(): + @poutine.trace + def model(): + pyro.param("p", torch.zeros(1, requires_grad=True)) + pyro.sample( + "a", Bernoulli(torch.tensor([0.5])), infer={"enumerate": "parallel"} + ) + pyro.sample("b", Bernoulli(torch.tensor([0.5]))) + + tr = model.get_trace() + assert isinstance(tr, poutine.Trace) + assert tr.graph_type == "flat" + + @poutine.trace(graph_type="dense") + def model(): + pyro.param("p", torch.zeros(1, requires_grad=True)) + pyro.sample( + "a", Bernoulli(torch.tensor([0.5])), infer={"enumerate": "parallel"} + ) + pyro.sample("b", Bernoulli(torch.tensor([0.5]))) + + tr = model.get_trace() + assert isinstance(tr, poutine.Trace) + assert tr.graph_type == "dense" + + tr2 = poutine.trace(poutine.replay(model, trace=tr)).get_trace() + + assert_equal(tr2.nodes["a"]["value"], tr.nodes["a"]["value"]) + + +def test_decorator_interface_queue(): + sites = ["x", "y", "z", "_INPUT", "_RETURN"] + queue = Queue() + queue.put(poutine.Trace()) + + @poutine.queue(queue=queue) + def model(): + p = torch.tensor([0.5]) + loc = torch.zeros(1) + scale = torch.ones(1) + + x = pyro.sample("x", Normal(loc, scale)) + y = pyro.sample("y", Bernoulli(p)) + z = pyro.sample("z", Normal(loc, scale)) + return dict(x=x, y=y, z=z) + + tr = poutine.trace(model).get_trace() + for name in sites: + assert name in tr + + +def test_method_decorator_interface_condition(): + class cls_model: + @poutine.condition(data={"b": torch.tensor(1.0)}) + def model(self, p): + self._model(p) + + def _model(self, p): + pyro.sample("a", Bernoulli(p)) + pyro.sample("b", Bernoulli(torch.tensor([0.5]))) + + tr = poutine.trace(cls_model().model).get_trace(0.5) + assert isinstance(tr, poutine.Trace) + assert tr.graph_type == "flat" + assert tr.nodes["b"]["is_observed"] and tr.nodes["b"]["value"].item() == 1.0 + + +def test_trace_log_prob_err_msg(): + def model(v): + pyro.sample("test_site", dist.Beta(1.0, 1.0), obs=v) + + tr = poutine.trace(model).get_trace(torch.tensor(2.0)) + exp_msg = r"Error while computing log_prob at site 'test_site':.*" + with pytest.raises(ValueError, match=exp_msg): + tr.compute_log_prob() + + +def test_trace_log_prob_sum_err_msg(): + def model(v): + pyro.sample("test_site", dist.Beta(1.0, 1.0), obs=v) + + tr = poutine.trace(model).get_trace(torch.tensor(2.0)) + exp_msg = r"Error while computing log_prob_sum at site 'test_site':.*" + with pytest.raises(ValueError, match=exp_msg): + tr.log_prob_sum() + + +def test_trace_score_parts_err_msg(): + def guide(v): + pyro.sample("test_site", dist.Beta(1.0, 1.0), obs=v) + + tr = poutine.trace(guide).get_trace(torch.tensor(2.0)) + exp_msg = r"Error while computing score_parts at site 'test_site':.*" + with pytest.raises(ValueError, match=exp_msg): + tr.compute_score_parts() + + +def _model(a=torch.tensor(1.0), b=torch.tensor(1.0)): + latent = pyro.sample("latent", dist.Beta(a, b)) + return pyro.sample("test_site", dist.Bernoulli(latent), obs=torch.tensor(1)) + + +@pytest.mark.parametrize( + "wrapper", + [ + lambda fn: poutine.block(fn), + lambda fn: poutine.condition(fn, {"latent": 0.9}), + lambda fn: poutine.enum(fn, -1), + lambda fn: poutine.replay(fn, poutine.trace(fn).get_trace()), + ], +) +def test_pickling(wrapper): + wrapped = wrapper(_model) + buffer = io.BytesIO() + # default protocol cannot serialize torch.Size objects (see https://github.com/pytorch/pytorch/issues/20823) + torch.save(wrapped, buffer, pickle_protocol=pickle.HIGHEST_PROTOCOL) + buffer.seek(0) + deserialized = torch.load(buffer, weights_only=False) + obs = torch.tensor(0.5) + pyro.set_rng_seed(0) + actual_trace = poutine.trace(deserialized).get_trace(obs) + pyro.set_rng_seed(0) + expected_trace = poutine.trace(wrapped).get_trace(obs) + assert tuple(actual_trace) == tuple(expected_trace.nodes) + assert_close( + [actual_trace.nodes[site]["value"] for site in actual_trace.stochastic_nodes], + [ + expected_trace.nodes[site]["value"] + for site in expected_trace.stochastic_nodes + ], + ) + + +def test_arg_kwarg_error(): + def model(): + pyro.param("p", torch.zeros(1, requires_grad=True)) + pyro.sample( + "a", Bernoulli(torch.tensor([0.5])), infer={"enumerate": "parallel"} + ) + pyro.sample("b", Bernoulli(torch.tensor([0.5]))) + + with pytest.raises(ValueError, match="not callable"): + with poutine.mask(False): + model() + + with poutine.mask(mask=False): + model() + + +def test_block_class_method(): + class A: + @poutine.block + def run(self): + return 1 + + a = A() + a.run() diff --git a/pyro/source/tests/poutine/test_properties.py b/pyro/source/tests/poutine/test_properties.py new file mode 100644 index 0000000000000000000000000000000000000000..7aa4d303167a97f11a4cc1214ebf3b0509c9010d --- /dev/null +++ b/pyro/source/tests/poutine/test_properties.py @@ -0,0 +1,146 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +import torch + +import pyro +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.util import set_rng_seed +from tests.common import assert_equal + +EXAMPLE_MODELS = [] +EXAMPLE_MODEL_IDS = [] + + +class ExampleModel: + def __init__(self, fn, poutine_kwargs): + self.fn = fn + self.poutine_kwargs = poutine_kwargs + + def __call__(self, *args, **kwargs): + return self.fn(*args, **kwargs) + + def bind_poutine(self, poutine_name): + """ + Bind model-specific kwargs to the poutine. + """ + p = getattr(poutine, poutine_name) + kwargs = self.poutine_kwargs.get(poutine_name, {}) + return lambda fn: p(fn, **kwargs) + + +def register_model(**poutine_kwargs): + """ + Decorator to register a model as an example model for testing. + """ + + def register_fn(fn): + model = ExampleModel(fn, poutine_kwargs) + EXAMPLE_MODELS.append(model) + EXAMPLE_MODEL_IDS.append(model.fn.__name__) + return model + + return register_fn + + +@register_model( + replay={"trace": poutine.Trace()}, block={}, condition={"data": {}}, do={"data": {}} +) +def trivial_model(): + return [] + + +tr_normal = poutine.Trace() +tr_normal.add_node( + "normal_0", type="sample", is_observed=False, value=torch.zeros(1), infer={} +) + + +@register_model( + replay={"trace": tr_normal}, + block={"hide": ["normal_0"]}, + condition={"data": {"normal_0": torch.zeros(1)}}, + do={"data": {"normal_0": torch.zeros(1)}}, +) +def normal_model(): + normal_0 = pyro.sample("normal_0", dist.Normal(torch.zeros(1), torch.ones(1))) + return [normal_0] + + +tr_normal_normal = poutine.Trace() +tr_normal_normal.add_node( + "normal_0", type="sample", is_observed=False, value=torch.zeros(1), infer={} +) + + +@register_model( + replay={"trace": tr_normal_normal}, + block={"hide": ["normal_0"]}, + condition={"data": {"normal_0": torch.zeros(1)}}, + do={"data": {"normal_0": torch.zeros(1)}}, +) +def normal_normal_model(): + normal_0 = pyro.sample("normal_0", dist.Normal(torch.zeros(1), torch.ones(1))) + normal_1 = torch.ones(1) + pyro.sample("normal_1", dist.Normal(normal_0, torch.ones(1)), obs=normal_1) + return [normal_0, normal_1] + + +tr_bernoulli_normal = poutine.Trace() +tr_bernoulli_normal.add_node( + "bern_0", type="sample", is_observed=False, value=torch.ones(1), infer={} +) + + +@register_model( + replay={"trace": tr_bernoulli_normal}, + block={"hide": ["bern_0"]}, + condition={"data": {"bern_0": torch.ones(1)}}, + do={"data": {"bern_0": torch.ones(1)}}, +) +def bernoulli_normal_model(): + bern_0 = pyro.sample("bern_0", dist.Bernoulli(torch.zeros(1) * 1e-2)) + loc = torch.ones(1) if bern_0.item() else -torch.ones(1) + normal_0 = torch.ones(1) + pyro.sample("normal_0", dist.Normal(loc, torch.ones(1) * 1e-2), obs=normal_0) + return [bern_0, normal_0] + + +def get_trace(fn, *args, **kwargs): + set_rng_seed(123) + return poutine.trace(fn).get_trace(*args, **kwargs) + + +@pytest.mark.parametrize("model", EXAMPLE_MODELS, ids=EXAMPLE_MODEL_IDS) +@pytest.mark.parametrize( + "poutine_name", + [ + "block", + "replay", + "trace", + ], +) +def test_idempotent(poutine_name, model): + p = model.bind_poutine(poutine_name) + expected_trace = get_trace(p(model)) + actual_trace = get_trace(p(p(model))) + assert_equal(actual_trace, expected_trace, prec=0) + + +@pytest.mark.parametrize("model", EXAMPLE_MODELS, ids=EXAMPLE_MODEL_IDS) +@pytest.mark.parametrize( + "p1_name,p2_name", + [ + ("trace", "condition"), + ("trace", "do"), + ("trace", "replay"), + ], +) +def test_commutes(p1_name, p2_name, model): + p1 = model.bind_poutine(p1_name) + p2 = model.bind_poutine(p2_name) + expected_trace = get_trace(p1(p2(model))) + actual_trace = get_trace(p2(p1(model))) + assert_equal(actual_trace, expected_trace, prec=0) diff --git a/pyro/source/tests/poutine/test_runtime.py b/pyro/source/tests/poutine/test_runtime.py new file mode 100644 index 0000000000000000000000000000000000000000..1cd43952873f9f0948b88eecb4ab33b126aa069d --- /dev/null +++ b/pyro/source/tests/poutine/test_runtime.py @@ -0,0 +1,39 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import torch + +import pyro +import pyro.poutine as poutine +from pyro.poutine.runtime import get_mask, get_plates +from tests.common import assert_equal + + +def test_get_mask(): + assert get_mask() is None + + with poutine.mask(mask=True): + assert get_mask() is True + with poutine.mask(mask=False): + assert get_mask() is False + + with pyro.plate("i", 2, dim=-1): + mask1 = torch.tensor([False, True, True]) + mask2 = torch.tensor([True, True, False]) + with poutine.mask(mask=mask1): + assert_equal(get_mask(), mask1) + with poutine.mask(mask=mask2): + assert_equal(get_mask(), mask1 & mask2) + + +def test_get_plates(): + def get_plate_names(): + plates = get_plates() + assert isinstance(plates, tuple) + return {f.name for f in plates} + + assert get_plate_names() == set() + with pyro.plate("foo", 5): + assert get_plate_names() == {"foo"} + with pyro.plate("bar", 3): + assert get_plate_names() == {"foo", "bar"} diff --git a/pyro/source/tests/poutine/test_trace_struct.py b/pyro/source/tests/poutine/test_trace_struct.py new file mode 100644 index 0000000000000000000000000000000000000000..9bdd7f2ba67783ad212d5011ef8803dae955bfb4 --- /dev/null +++ b/pyro/source/tests/poutine/test_trace_struct.py @@ -0,0 +1,69 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import itertools + +import pytest + +from pyro.poutine import Trace +from tests.common import assert_equal + +EDGE_SETS = [ + # 1 + # / \ + # 2 3 + # / \ + # 4 5 + # / \ + # 6 7 + [(1, 2), (1, 3), (3, 4), (3, 5), (4, 6), (4, 7)], + # 1 + # /|\ + # 2 3 4 + # | + # 5 + # | + # 6 + # | + # 7 + [(1, 2), (3, 5), (1, 4), (1, 3), (5, 6), (6, 7)], +] + + +@pytest.mark.parametrize( + "edges", [perm for edges in EDGE_SETS for perm in itertools.permutations(edges)] +) +def test_topological_sort(edges): + tr = Trace() + for n1, n2 in edges: + tr.add_edge(n1, n2) + top_sort = tr.topological_sort() + + # check all nodes are accounted for exactly once + expected_nodes = set().union(*edges) + assert len(top_sort) == len(expected_nodes) + assert set(top_sort) == expected_nodes + + # check no edge ordering is violated + ranks = {n: rank for rank, n in enumerate(top_sort)} + for n1, n2 in edges: + assert ranks[n1] < ranks[n2] + + +@pytest.mark.parametrize( + "edges", [perm for edges in EDGE_SETS for perm in itertools.permutations(edges)] +) +def test_connectivity_on_removal(edges): + # check that when nodes are removed in reverse topological order + # connectivity of the DAG is maintained, i.e. remaining nodes + # are reachable from the root. + root = 1 + tr = Trace() + for e1, e2 in edges: + tr.add_edge(e1, e2) + top_sort = tr.topological_sort() + while top_sort: + num_nodes = len([n for n in tr._dfs(root, set())]) + num_expected = len(top_sort) + assert_equal(num_nodes, num_expected) + tr.remove_node(top_sort.pop()) diff --git a/pyro/source/tests/pyroapi/conftest.py b/pyro/source/tests/pyroapi/conftest.py new file mode 100644 index 0000000000000000000000000000000000000000..371da18fad77d2d0e014e73f8c9a9d4f167c542c --- /dev/null +++ b/pyro/source/tests/pyroapi/conftest.py @@ -0,0 +1,11 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest + + +def pytest_runtest_call(item): + try: + item.runtest() + except NotImplementedError as e: + pytest.xfail(str(e)) diff --git a/pyro/source/tests/pyroapi/test_pyroapi.py b/pyro/source/tests/pyroapi/test_pyroapi.py new file mode 100644 index 0000000000000000000000000000000000000000..682c48b94d7867a6ff56d5783a036d4180f8b15b --- /dev/null +++ b/pyro/source/tests/pyroapi/test_pyroapi.py @@ -0,0 +1,14 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +from pyroapi import pyro_backend +from pyroapi.tests import * # noqa F401 + +pytestmark = pytest.mark.stage("unit") + + +@pytest.fixture(params=["pyro", "minipyro"]) +def backend(request): + with pyro_backend(request.param): + yield diff --git a/pyro/source/tests/test_examples.py b/pyro/source/tests/test_examples.py new file mode 100644 index 0000000000000000000000000000000000000000..731665cd72d60042dccdbc1bb19ec739041c6a58 --- /dev/null +++ b/pyro/source/tests/test_examples.py @@ -0,0 +1,409 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import logging +import os +import sys +from subprocess import check_call + +import pytest +import torch + +from tests.common import ( + EXAMPLES_DIR, + requires_cuda, + requires_funsor, + requires_horovod, + requires_lightning, + xfail_param, +) + +logger = logging.getLogger(__name__) +pytestmark = pytest.mark.stage("test_examples") + + +CPU_EXAMPLES = [ + "air/main.py --num-steps=1", + "air/main.py --num-steps=1 --no-baseline", + "baseball.py --num-samples=200 --warmup-steps=100 --num-chains=2", + "lkj.py --n=50 --num-chains=1 --warmup-steps=100 --num-samples=200", + "capture_recapture/cjs.py --num-steps=1 -m 1", + "capture_recapture/cjs.py --num-steps=1 -m 2", + "capture_recapture/cjs.py --num-steps=1 -m 3", + "capture_recapture/cjs.py --num-steps=1 -m 4", + "capture_recapture/cjs.py --num-steps=1 -m 5", + "capture_recapture/cjs.py --num-steps=1 -m 1 --tmc --tmc-num-samples=2", + "capture_recapture/cjs.py --num-steps=1 -m 2 --tmc --tmc-num-samples=2", + "capture_recapture/cjs.py --num-steps=1 -m 3 --tmc --tmc-num-samples=2", + "capture_recapture/cjs.py --num-steps=1 -m 4 --tmc --tmc-num-samples=2", + "capture_recapture/cjs.py --num-steps=1 -m 5 --tmc --tmc-num-samples=2", + "contrib/autoname/scoping_mixture.py --num-epochs=1", + "contrib/autoname/mixture.py --num-epochs=1", + "contrib/autoname/tree_data.py --num-epochs=1", + "contrib/cevae/synthetic.py --num-epochs=1", + "contrib/epidemiology/sir.py --nojit -np=128 -t=2 -w=2 -n=4 -d=20 -p=1000 -f 2", + "contrib/epidemiology/sir.py --nojit -np=128 -t=2 -w=2 -n=4 -d=20 -p=1000 -f 2 -c=2", + "contrib/epidemiology/sir.py --nojit -np=128 -t=2 -w=2 -n=4 -d=20 -p=1000 -f 2 -e=2", + "contrib/epidemiology/sir.py --nojit -np=128 -t=2 -w=2 -n=4 -d=20 -p=1000 -f 2 -k=1", + "contrib/epidemiology/sir.py --nojit -np=128 -t=2 -w=2 -n=4 -d=20 -p=1000 -f 2 -e=2 -k=1", + "contrib/epidemiology/sir.py --nojit -np=128 -t=2 -w=2 -n=4 -d=20 -p=1000 -f 2 --haar", + "contrib/epidemiology/sir.py --nojit -np=128 -t=2 -w=2 -n=4 -d=20 -p=1000 -f 2 -nb=4", + "contrib/epidemiology/sir.py --nojit -np=128 -t=2 -w=2 -n=4 -d=20 -p=1000 -f 2 -hfm=3", + "contrib/epidemiology/sir.py --nojit -np=128 -t=2 -w=2 -n=4 -d=20 -p=1000 -f 2 -a", + "contrib/epidemiology/sir.py --nojit -np=128 -t=2 -w=2 -n=4 -d=20 -p=1000 -f 2 -o=0.2", + "contrib/epidemiology/sir.py --nojit -np=128 -ss=2 -n=4 -d=20 -p=1000 -f 2 --svi", + "contrib/epidemiology/regional.py --nojit -t=2 -w=2 -n=4 -r=3 -d=20 -p=1000 -f 2", + "contrib/epidemiology/regional.py --nojit -t=2 -w=2 -n=4 -r=3 -d=20 -p=1000 -f 2 --haar", + "contrib/epidemiology/regional.py --nojit -t=2 -w=2 -n=4 -r=3 -d=20 -p=1000 -f 2 -hfm=3", + "contrib/epidemiology/regional.py --nojit -t=2 -w=2 -n=4 -r=3 -d=20 -p=1000 -f 2 -nb=4", + "contrib/epidemiology/regional.py --nojit -ss=2 -n=4 -r=3 -d=20 -p=1000 -f 2 --svi", + "contrib/forecast/bart.py --num-steps=2 --stride=99999", + "contrib/gp/sv-dkl.py --epochs=1 --num-inducing=4 --batch-size=1000", + "contrib/gp/sv-dkl.py --binary --epochs=1 --num-inducing=4 --batch-size=1000", + "contrib/mue/FactorMuE.py --test --small --include-stop --no-plots --no-save", + "contrib/mue/FactorMuE.py --test --small -ard -idfac --no-substitution-matrix --no-plots --no-save", + "contrib/mue/ProfileHMM.py --test --small --no-plots --no-save", + "contrib/mue/ProfileHMM.py --test --small --include-stop --no-plots --no-save", + "contrib/oed/ab_test.py --num-vi-steps=10 --num-bo-steps=2", + "contrib/timeseries/gp_models.py -m imgp --test --num-steps=2", + "contrib/timeseries/gp_models.py -m lcmgp --test --num-steps=2", + "dmm.py --num-epochs=1", + "dmm.py --num-epochs=1 --tmcelbo --tmc-num-samples=2", + "dmm.py --num-epochs=1 --num-iafs=1", + "dmm.py --num-epochs=1 --tmc --tmc-num-samples=2", + "dmm.py --num-epochs=1 --tmcelbo --tmc-num-samples=2", + "eight_schools/mcmc.py --num-samples=500 --warmup-steps=100", + "eight_schools/svi.py --num-epochs=1", + "einsum.py", + "hmm.py --num-steps=1 --truncate=10 --model=0", + "hmm.py --num-steps=1 --truncate=10 --model=1", + "hmm.py --num-steps=1 --truncate=10 --model=2", + "hmm.py --num-steps=1 --truncate=10 --model=3", + "hmm.py --num-steps=1 --truncate=10 --model=4", + "hmm.py --num-steps=1 --truncate=10 --model=5", + "hmm.py --num-steps=1 --truncate=10 --model=6", + "hmm.py --num-steps=1 --truncate=10 --model=6 --raftery-parameterization", + "hmm.py --num-steps=1 --truncate=10 --model=7", + "hmm.py --num-steps=1 --truncate=10 --model=0 --tmc --tmc-num-samples=2", + "hmm.py --num-steps=1 --truncate=10 --model=1 --tmc --tmc-num-samples=2", + "hmm.py --num-steps=1 --truncate=10 --model=2 --tmc --tmc-num-samples=2", + "hmm.py --num-steps=1 --truncate=10 --model=3 --tmc --tmc-num-samples=2", + "hmm.py --num-steps=1 --truncate=10 --model=4 --tmc --tmc-num-samples=2", + "hmm.py --num-steps=1 --truncate=10 --model=5 --tmc --tmc-num-samples=2", + "hmm.py --num-steps=1 --truncate=10 --model=6 --tmc --tmc-num-samples=2", + "inclined_plane.py --num-samples=1", + "lda.py --num-steps=2 --num-words=100 --num-docs=100 --num-words-per-doc=8", + "minipyro.py --backend=pyro", + "minipyro.py", + "mixed_hmm/experiment.py --timesteps=1", + "neutra.py -n 10 --num-warmup 10 --num-samples 10", + "rsa/generics.py --num-samples=10", + "rsa/hyperbole.py --price=10000", + "rsa/schelling.py --num-samples=10", + "rsa/schelling_false.py --num-samples=10", + "rsa/semantic_parsing.py --num-samples=10", + "scanvi/scanvi.py --num-epochs 1 --dataset mock", + "sir_hmc.py -t=2 -w=2 -n=4 -d=2 -m=1 --enum", + "sir_hmc.py -t=2 -w=2 -n=4 -d=2 -p=10000 --sequential", + "sir_hmc.py -t=2 -w=2 -n=4 -d=100 -p=10000 -f 2", + "smcfilter.py --num-timesteps=3 --num-particles=10", + "sparse_gamma_def.py --num-epochs=2 --eval-particles=2 --eval-frequency=1 --guide custom", + "sparse_gamma_def.py --num-epochs=2 --eval-particles=2 --eval-frequency=1 --guide auto", + "sparse_gamma_def.py --num-epochs=2 --eval-particles=2 --eval-frequency=1 --guide easy", + "svi_torch.py --num-epochs=2 --size=400", + "svi_horovod.py --num-epochs=2 --size=400 --no-horovod", + pytest.param( + "svi_lightning.py --max_epochs=2 --size=400 --accelerator cpu --devices 1", + marks=[requires_lightning], + ), + "toy_mixture_model_discrete_enumeration.py --num-steps=1", + "sparse_regression.py --num-steps=100 --num-data=100 --num-dimensions 11", + "vae/ss_vae_M2.py --num-epochs=1", + "vae/ss_vae_M2.py --num-epochs=1 --aux-loss", + "vae/ss_vae_M2.py --num-epochs=1 --enum-discrete=parallel", + "vae/ss_vae_M2.py --num-epochs=1 --enum-discrete=sequential", + "vae/vae.py --num-epochs=1", + "vae/vae_comparison.py --num-epochs=1", + "cvae/main.py --num-quadrant-inputs=1 --num-epochs=1", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=0 ", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=1 ", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=2 ", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=3 ", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=4 ", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=5 ", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=6 ", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=6 --raftery-parameterization ", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=1 --tmc --tmc-num-samples=2 ", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=2 --tmc --tmc-num-samples=2 ", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=3 --tmc --tmc-num-samples=2 ", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=4 --tmc --tmc-num-samples=2 ", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=5 --tmc --tmc-num-samples=2 ", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=6 --tmc --tmc-num-samples=2 ", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=6 --tmc --tmc-num-samples=2 -rp", +] + +CUDA_EXAMPLES = [ + "air/main.py --num-steps=1 --cuda", + "baseball.py --num-samples=200 --warmup-steps=100 --num-chains=2 --cuda", + "contrib/cevae/synthetic.py --num-epochs=1 --cuda", + "contrib/epidemiology/sir.py --nojit -t=2 -w=2 -n=4 -d=20 -p=1000 -f 2 --cuda", + "contrib/epidemiology/sir.py --nojit -t=2 -w=2 -n=4 -d=20 -p=1000 -f 2 -nb=16 --cuda", + "contrib/epidemiology/sir.py --nojit -t=2 -w=2 -n=4 -d=20 -p=1000 -f 2 --haar --cuda", + "contrib/epidemiology/regional.py --nojit -t=2 -w=2 -n=4 -r=3 -d=20 -p=1000 -f 2 --cuda", + "contrib/epidemiology/regional.py --nojit -t=2 -w=2 -n=4 -r=3 -d=20 -p=1000 -f 2 --haar --cuda", + "contrib/gp/sv-dkl.py --epochs=1 --num-inducing=4 --cuda", + "contrib/mue/FactorMuE.py --test --small --include-stop --no-plots --no-save --cuda --cpu-data --pin-mem", + "contrib/mue/FactorMuE.py --test --small -ard -idfac --no-substitution-matrix --no-plots --no-save --cuda", + "contrib/mue/ProfileHMM.py --test --small --no-plots --no-save --cuda --cpu-data --pin-mem", + "contrib/mue/ProfileHMM.py --test --small --include-stop --no-plots --no-save --cuda", + "lkj.py --n=50 --num-chains=1 --warmup-steps=100 --num-samples=200 --cuda", + "dmm.py --num-epochs=1 --cuda", + "dmm.py --num-epochs=1 --num-iafs=1 --cuda", + "dmm.py --num-epochs=1 --tmc --tmc-num-samples=2 --cuda", + "dmm.py --num-epochs=1 --tmcelbo --tmc-num-samples=2 --cuda", + "einsum.py --cuda", + "hmm.py --num-steps=1 --truncate=10 --model=0 --cuda", + "hmm.py --num-steps=1 --truncate=10 --model=1 --cuda", + "hmm.py --num-steps=1 --truncate=10 --model=2 --cuda", + "hmm.py --num-steps=1 --truncate=10 --model=3 --cuda", + "hmm.py --num-steps=1 --truncate=10 --model=4 --cuda", + "hmm.py --num-steps=1 --truncate=10 --model=5 --cuda", + "hmm.py --num-steps=1 --truncate=10 --model=6 --cuda", + "hmm.py --num-steps=1 --truncate=10 --model=6 --cuda --raftery-parameterization", + "hmm.py --num-steps=1 --truncate=10 --model=7 --cuda", + "hmm.py --num-steps=1 --truncate=10 --model=0 --tmc --tmc-num-samples=2 --cuda", + "hmm.py --num-steps=1 --truncate=10 --model=1 --tmc --tmc-num-samples=2 --cuda", + "hmm.py --num-steps=1 --truncate=10 --model=2 --tmc --tmc-num-samples=2 --cuda", + "hmm.py --num-steps=1 --truncate=10 --model=3 --tmc --tmc-num-samples=2 --cuda", + "hmm.py --num-steps=1 --truncate=10 --model=4 --tmc --tmc-num-samples=2 --cuda", + "hmm.py --num-steps=1 --truncate=10 --model=5 --tmc --tmc-num-samples=2 --cuda", + "hmm.py --num-steps=1 --truncate=10 --model=6 --tmc --tmc-num-samples=2 --cuda", + "scanvi/scanvi.py --num-epochs 1 --dataset mock --cuda", + "sir_hmc.py -t=2 -w=2 -n=4 -d=2 -m=1 --enum --cuda", + "sir_hmc.py -t=2 -w=2 -n=4 -d=2 -p=10000 --sequential --cuda", + "sir_hmc.py -t=2 -w=2 -n=4 -d=100 -p=10000 --cuda", + "svi_torch.py --num-epochs=2 --size=400 --cuda", + "svi_horovod.py --num-epochs=2 --size=400 --cuda --no-horovod", + pytest.param( + "svi_lightning.py --max_epochs=2 --size=400 --accelerator gpu --devices 1", + marks=[requires_lightning], + ), + "vae/vae.py --num-epochs=1 --cuda", + "vae/ss_vae_M2.py --num-epochs=1 --cuda", + "vae/ss_vae_M2.py --num-epochs=1 --aux-loss --cuda", + "vae/ss_vae_M2.py --num-epochs=1 --enum-discrete=parallel --cuda", + "vae/ss_vae_M2.py --num-epochs=1 --enum-discrete=sequential --cuda", + "cvae/main.py --num-quadrant-inputs=1 --num-epochs=1 --cuda", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=0 --cuda", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=1 --cuda", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=2 --cuda", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=3 --cuda", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=4 --cuda", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=5 --cuda", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=6 --cuda", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=6 --cuda --raftery-parameterization ", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=1 --cuda--tmc --tmc-num-samples=2 ", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=2 --cuda--tmc --tmc-num-samples=2 ", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=3 --cuda--tmc --tmc-num-samples=2 ", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=4 --cuda--tmc --tmc-num-samples=2 ", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=5 --cuda--tmc --tmc-num-samples=2 ", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=6 --cuda--tmc --tmc-num-samples=2 ", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=6 --cuda--tmc --tmc-num-samples=2 -rp", +] + + +def xfail_jit(*args, **kwargs): + reason = kwargs.pop("reason", "not jittable") + return pytest.param( + *args, + marks=[ + pytest.mark.xfail(reason=reason), + pytest.mark.skipif("CI" in os.environ, reason="slow test"), + ] + ) + + +JIT_EXAMPLES = [ + "air/main.py --num-steps=1 --jit", + xfail_jit( + "baseball.py --num-samples=200 --warmup-steps=100 --jit", + reason="unreproducible RuntimeError on CI", + ), + "contrib/autoname/mixture.py --num-epochs=1 --jit", + "contrib/cevae/synthetic.py --num-epochs=1 --jit", + "contrib/epidemiology/sir.py --jit -np=128 -t=2 -w=2 -n=4 -d=20 -p=1000 -f 2", + "contrib/epidemiology/sir.py --jit -np=128 -ss=2 -n=4 -d=20 -p=1000 -f 2 --svi", + "contrib/epidemiology/regional.py --jit -t=2 -w=2 -n=4 -r=3 -d=20 -p=1000 -f 2", + "contrib/epidemiology/regional.py --jit -ss=2 -n=4 -r=3 -d=20 -p=1000 -f 2 --svi", + xfail_jit("contrib/gp/sv-dkl.py --epochs=1 --num-inducing=4 --jit"), + "contrib/mue/FactorMuE.py --test --small --include-stop --no-plots --no-save --jit", + "contrib/mue/FactorMuE.py --test --small -ard -idfac --no-substitution-matrix --no-plots --no-save --jit", + "contrib/mue/ProfileHMM.py --test --small --no-plots --no-save --jit", + "contrib/mue/ProfileHMM.py --test --small --include-stop --no-plots --no-save --jit", + xfail_jit("dmm.py --num-epochs=1 --jit"), + xfail_jit("dmm.py --num-epochs=1 --num-iafs=1 --jit"), + "eight_schools/mcmc.py --num-samples=500 --warmup-steps=100 --jit", + "eight_schools/svi.py --num-epochs=1 --jit", + "hmm.py --num-steps=1 --truncate=10 --model=1 --jit", + "hmm.py --num-steps=1 --truncate=10 --model=2 --jit", + "hmm.py --num-steps=1 --truncate=10 --model=3 --jit", + "hmm.py --num-steps=1 --truncate=10 --model=4 --jit", + "hmm.py --num-steps=1 --truncate=10 --model=5 --jit", + "hmm.py --num-steps=1 --truncate=10 --model=7 --jit", + xfail_jit( + "hmm.py --num-steps=1 --truncate=10 --model=1 --tmc --tmc-num-samples=2 --jit" + ), + xfail_jit( + "hmm.py --num-steps=1 --truncate=10 --model=2 --tmc --tmc-num-samples=2 --jit" + ), + xfail_jit( + "hmm.py --num-steps=1 --truncate=10 --model=3 --tmc --tmc-num-samples=2 --jit" + ), + xfail_jit( + "hmm.py --num-steps=1 --truncate=10 --model=4 --tmc --tmc-num-samples=2 --jit" + ), + "lda.py --num-steps=2 --num-words=100 --num-docs=100 --num-words-per-doc=8 --jit", + "minipyro.py --backend=pyro --jit", + "minipyro.py --jit", + "sir_hmc.py -t=2 -w=2 -n=4 -d=2 -m=1 --enum --jit", + "sir_hmc.py -t=2 -w=2 -n=4 -d=2 -p=10000 --sequential --jit", + xfail_jit("sir_hmc.py -t=2 -w=2 -n=4 -p=10000 --jit"), + xfail_jit("vae/ss_vae_M2.py --num-epochs=1 --aux-loss --jit"), + "vae/ss_vae_M2.py --num-epochs=1 --enum-discrete=parallel --jit", + "vae/ss_vae_M2.py --num-epochs=1 --enum-discrete=sequential --jit", + "vae/ss_vae_M2.py --num-epochs=1 --jit", + "vae/vae.py --num-epochs=1 --jit", + "vae/vae_comparison.py --num-epochs=1 --jit", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=1 --jit", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=2 --jit", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=3 --jit", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=4 --jit", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=5 --jit", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=6 --jit", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=6 --jit --raftery-parameterization ", +] + +HOROVOD_EXAMPLES = [ + "svi_horovod.py --num-epochs=2 --size=400", + pytest.param( + "svi_horovod.py --num-epochs=2 --size=400 --cuda", marks=[requires_cuda] + ), +] + +FUNSOR_EXAMPLES = [ + xfail_param( + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=0 --funsor", + reason="unreproducible recursion error on travis?", + ), + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=1 --funsor", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=2 --funsor", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=3 --funsor", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=4 --funsor", + xfail_param( + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=5 --funsor", + reason="https://github.com/pyro-ppl/pyro/issues/3046", + run=False, + ), + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=6 --funsor", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=6 --raftery-parameterization --funsor", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=6 --jit --funsor", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=6 --jit --raftery-parameterization --funsor", + xfail_param( + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=0 --tmc --tmc-num-samples=2 --funsor", + reason="unreproducible recursion error on travis?", + ), + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=1 --tmc --tmc-num-samples=2 --funsor", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=2 --tmc --tmc-num-samples=2 --funsor", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=3 --tmc --tmc-num-samples=2 --funsor", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=4 --tmc --tmc-num-samples=2 --funsor", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=5 --tmc --tmc-num-samples=2 --funsor", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=6 --tmc --tmc-num-samples=2 --funsor", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=6 --tmc --tmc-num-samples=2 --funsor -rp", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=6 --jit --tmc --tmc-num-samples=2 --funsor", + "contrib/funsor/hmm.py --num-steps=1 --truncate=10 --model=6 --jit --tmc --tmc-num-samples=2 --funsor -rp", +] + + +def test_coverage(): + cpu_tests = set( + (e if isinstance(e, str) else e.values[0]).split()[0] for e in CPU_EXAMPLES + ) + cuda_tests = set( + (e if isinstance(e, str) else e.values[0]).split()[0] for e in CUDA_EXAMPLES + ) + jit_tests = set( + (e if isinstance(e, str) else e.values[0]).split()[0] for e in JIT_EXAMPLES + ) + for root, dirs, files in os.walk(EXAMPLES_DIR): + for basename in files: + if not basename.endswith(".py"): + continue + path = os.path.join(root, basename) + with open(path) as f: + text = f.read() + example = os.path.relpath(path, EXAMPLES_DIR) + if "__main__" in text: + if example not in cpu_tests: + pytest.fail( + "Example: {} not covered in CPU_EXAMPLES.".format(example) + ) + if "--cuda" in text and example not in cuda_tests: + pytest.fail( + "Example: {} not covered by CUDA_EXAMPLES.".format(example) + ) + if "--jit" in text and example not in jit_tests: + pytest.fail( + "Example: {} not covered by JIT_EXAMPLES.".format(example) + ) + + +@pytest.mark.parametrize("example", CPU_EXAMPLES) +def test_cpu(example): + logger.info("Running:\npython examples/{}".format(example)) + example = example.split() + filename, args = example[0], example[1:] + filename = os.path.join(EXAMPLES_DIR, filename) + check_call([sys.executable, filename] + args) + + +@requires_cuda +@pytest.mark.parametrize("example", CUDA_EXAMPLES) +def test_cuda(example): + logger.info("Running:\npython examples/{}".format(example)) + example = example.split() + filename, args = example[0], example[1:] + filename = os.path.join(EXAMPLES_DIR, filename) + check_call([sys.executable, filename] + args) + + +@pytest.mark.parametrize("example", JIT_EXAMPLES) +def test_jit(example): + logger.info("Running:\npython examples/{}".format(example)) + example = example.split() + filename, args = example[0], example[1:] + filename = os.path.join(EXAMPLES_DIR, filename) + check_call([sys.executable, filename] + args) + + +@requires_horovod +@pytest.mark.parametrize("np", [1, 2]) +@pytest.mark.parametrize("example", HOROVOD_EXAMPLES) +def test_horovod(np, example): + if "cuda" in example and np > torch.cuda.device_count(): + pytest.skip() + horovodrun = "horovodrun -np {} --mpi-args=--oversubscribe".format(np) + logger.info("Running:\n{} python examples/{}".format(horovodrun, example)) + example = example.split() + filename, args = example[0], example[1:] + filename = os.path.join(EXAMPLES_DIR, filename) + check_call(horovodrun.split() + [sys.executable, filename] + args) + + +@requires_funsor +@pytest.mark.parametrize("example", FUNSOR_EXAMPLES) +def test_funsor(example): + logger.info("Running:\npython examples/{}".format(example)) + example = example.split() + filename, args = example[0], example[1:] + filename = os.path.join(EXAMPLES_DIR, filename) + check_call([sys.executable, filename] + args) diff --git a/pyro/source/tests/test_generic.py b/pyro/source/tests/test_generic.py new file mode 100644 index 0000000000000000000000000000000000000000..1eaa8663c0e45c4f4fe727ff0d569c5f66ce6a48 --- /dev/null +++ b/pyro/source/tests/test_generic.py @@ -0,0 +1,93 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import pytest +from pyroapi.testing import MODELS + +from pyro.generic import handlers, infer, ops, pyro, pyro_backend +from tests.common import xfail_if_not_implemented + +pytestmark = pytest.mark.stage("unit") + + +@pytest.mark.filterwarnings("ignore", category=UserWarning) +@pytest.mark.parametrize("model", MODELS) +@pytest.mark.parametrize("backend", ["pyro"]) +def test_mcmc_interface(model, backend): + with pyro_backend(backend), handlers.seed(rng_seed=20): + f = MODELS[model]() + model, args, kwargs = ( + f["model"], + f.get("model_args", ()), + f.get("model_kwargs", {}), + ) + nuts_kernel = infer.NUTS(model=model) + mcmc = infer.MCMC(nuts_kernel, num_samples=10, warmup_steps=10) + mcmc.run(*args, **kwargs) + mcmc.summary() + + +@pytest.mark.parametrize("backend", ["pyro", "minipyro"]) +def test_not_implemented(backend): + with pyro_backend(backend): + pyro.sample # should be implemented + pyro.param # should be implemented + with pytest.raises(NotImplementedError): + pyro.nonexistent_primitive + + +@pytest.mark.parametrize("model", MODELS) +@pytest.mark.parametrize("backend", ["minipyro", "pyro"]) +def test_model_sample(model, backend): + with pyro_backend(backend), handlers.seed(rng_seed=2), xfail_if_not_implemented(): + f = MODELS[model]() + model, model_args = f["model"], f.get("model_args", ()) + model(*model_args) + + +@pytest.mark.parametrize("model", MODELS) +@pytest.mark.parametrize("backend", ["minipyro", "pyro"]) +def test_rng_seed(model, backend): + with pyro_backend(backend), handlers.seed(rng_seed=2), xfail_if_not_implemented(): + f = MODELS[model]() + model, model_args = f["model"], f.get("model_args", ()) + with handlers.seed(rng_seed=0): + expected = model(*model_args) + if expected is None: + pytest.skip() + with handlers.seed(rng_seed=0): + actual = model(*model_args) + assert ops.allclose(actual, expected) + + +@pytest.mark.parametrize("model", MODELS) +@pytest.mark.parametrize("backend", ["minipyro", "pyro"]) +def test_rng_state(model, backend): + with pyro_backend(backend), handlers.seed(rng_seed=2), xfail_if_not_implemented(): + f = MODELS[model]() + model, model_args = f["model"], f.get("model_args", ()) + with handlers.seed(rng_seed=0): + model(*model_args) + expected = model(*model_args) + if expected is None: + pytest.skip() + with handlers.seed(rng_seed=0): + model(*model_args) + with handlers.seed(rng_seed=0): + model(*model_args) + actual = model(*model_args) + assert ops.allclose(actual, expected) + + +@pytest.mark.parametrize("model", MODELS) +@pytest.mark.parametrize("backend", ["minipyro", "pyro"]) +def test_trace_handler(model, backend): + with pyro_backend(backend), handlers.seed(rng_seed=2), xfail_if_not_implemented(): + f = MODELS[model]() + model, model_args, model_kwargs = ( + f["model"], + f.get("model_args", ()), + f.get("model_kwargs", {}), + ) + # should be implemented + handlers.trace(model).get_trace(*model_args, **model_kwargs) diff --git a/pyro/source/tests/test_primitives.py b/pyro/source/tests/test_primitives.py new file mode 100644 index 0000000000000000000000000000000000000000..c208a2cfa2eb999aa8fcd02c8d73b558a6fee857 --- /dev/null +++ b/pyro/source/tests/test_primitives.py @@ -0,0 +1,63 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +from typing import Optional + +import pytest +import torch + +import pyro +import pyro.distributions as dist +from pyro import poutine + +pytestmark = pytest.mark.stage("unit") + + +def test_sample_ok(): + x = pyro.sample("x", dist.Normal(0, 1)) + assert isinstance(x, torch.Tensor) + assert x.shape == () + + +def test_observe_warn(): + with pytest.warns(RuntimeWarning): + pyro.sample("x", dist.Normal(0, 1), obs=torch.tensor(0.0)) + + +def test_param_ok(): + x = pyro.param("x", torch.tensor(0.0)) + assert isinstance(x, torch.Tensor) + assert x.shape == () + + +def test_deterministic_ok(): + x = pyro.deterministic("x", torch.tensor(0.0)) + assert isinstance(x, torch.Tensor) + assert x.shape == () + + +@pytest.mark.parametrize( + "mask", + [ + None, + torch.tensor(True), + torch.tensor([True]), + torch.tensor([True, False, True]), + ], +) +def test_obs_mask_shape(mask: Optional[torch.Tensor]): + data = torch.randn(3, 2) + + def model(): + with pyro.plate("data", 3): + pyro.sample( + "y", + dist.MultivariateNormal(torch.zeros(2), scale_tril=torch.eye(2)), + obs=data, + obs_mask=mask, + ) + + trace = poutine.trace(model).get_trace() + y_dist = trace.nodes["y"]["fn"] + assert y_dist.batch_shape == (3,) + assert y_dist.event_shape == (2,) diff --git a/pyro/source/tests/test_settings.py b/pyro/source/tests/test_settings.py new file mode 100644 index 0000000000000000000000000000000000000000..fa584b7aa9a12d1eec07c76607ce3a28c793e158 --- /dev/null +++ b/pyro/source/tests/test_settings.py @@ -0,0 +1,50 @@ +# Copyright Contributors to the Pyro project. +# SPDX-License-Identifier: Apache-2.0 + +import pytest + +from pyro import settings + +_TEST_SETTING: float = 0.1 + +pytestmark = pytest.mark.stage("unit") + + +def test_settings(): + v0 = settings.get() + assert isinstance(v0, dict) + assert all(isinstance(alias, str) for alias in v0) + assert settings.get("validate_distributions_pyro") is True + assert settings.get("validate_distributions_torch") is True + assert settings.get("validate_poutine") is True + assert settings.get("validate_infer") is True + + +def test_register(): + with pytest.raises(KeyError): + settings.get("test_setting") + + @settings.register("test_setting", "tests.test_settings", "_TEST_SETTING") + def _validate(value): + assert isinstance(value, float) + assert 0 < value + + # Test simple get and set. + assert settings.get("test_setting") == 0.1 + settings.set(test_setting=0.2) + assert settings.get("test_setting") == 0.2 + with pytest.raises(AssertionError): + settings.set(test_setting=-0.1) + + # Test context manager. + with settings.context(test_setting=0.3): + assert settings.get("test_setting") == 0.3 + assert settings.get("test_setting") == 0.2 + + # Test decorator. + @settings.context(test_setting=0.4) + def fn(): + assert settings.get("test_setting") == 0.4 + + fn() + assert settings.get("test_setting") == 0.2 diff --git a/pyro/source/tests/test_util.py b/pyro/source/tests/test_util.py new file mode 100644 index 0000000000000000000000000000000000000000..edc14690b0bf7a4ceb69d088f7e26790edb715fc --- /dev/null +++ b/pyro/source/tests/test_util.py @@ -0,0 +1,105 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import warnings + +import pytest +import torch + +from pyro import util + +pytestmark = pytest.mark.stage("unit") + + +def test_warn_if_nan(): + # scalar case + with warnings.catch_warnings(record=True) as w: + warnings.simplefilter("always") + x = float("inf") + msg = "example message" + y = util.warn_if_nan(x, msg) + assert y is x + assert len(w) == 0 + + x = float("nan") + util.warn_if_nan(x, msg) + # Verify some things + assert len(w) == 1 + assert msg in str(w[-1].message) + + # tensor case + with warnings.catch_warnings(record=True) as w: + warnings.simplefilter("always") + x = torch.ones(2) + msg = "example message" + util.warn_if_nan(x, msg) + x[1] = float("nan") + util.warn_if_nan(x, msg) + assert len(w) == 1 + assert msg in str(w[-1].message) + + # grad case + with warnings.catch_warnings(record=True) as w: + warnings.simplefilter("always") + x = torch.ones(2, requires_grad=True) + util.warn_if_nan(x, msg) + y = x.sum() + y.backward([torch.tensor(float("nan"))]) + assert len(w) == 1 + assert msg in str(w[-1].message) + + +def test_warn_if_inf(): + # scalar case + with warnings.catch_warnings(record=True) as w: + warnings.simplefilter("always") + x = 3 + msg = "example message" + y = util.warn_if_inf(x, msg, allow_posinf=True, allow_neginf=True) + assert y is x + assert len(w) == 0 + x = float("inf") + util.warn_if_inf(x, msg, allow_posinf=True) + assert len(w) == 0 + util.warn_if_inf(x, msg, allow_neginf=True) + assert len(w) == 1 + assert msg in str(w[-1].message) + + # tensor case + with warnings.catch_warnings(record=True) as w: + warnings.simplefilter("always") + x = torch.ones(2) + util.warn_if_inf(x, msg, allow_posinf=True, allow_neginf=True) + assert len(w) == 0 + x[0] = float("inf") + util.warn_if_inf(x, msg, allow_posinf=True) + assert len(w) == 0 + util.warn_if_inf(x, msg, allow_neginf=True) + assert len(w) == 1 + assert msg in str(w[-1].message) + + # grad case + with warnings.catch_warnings(record=True) as w: + warnings.simplefilter("always") + x = torch.ones(2, requires_grad=True) + util.warn_if_inf(x, msg, allow_posinf=True) + y = x.sum() + y.backward([torch.tensor(float("inf"))]) + assert len(w) == 0 + + x.grad = None + y.backward([torch.tensor(-float("inf"))]) + assert len(w) == 1 + assert msg in str(w[-1].message) + + with warnings.catch_warnings(record=True) as w: + warnings.simplefilter("always") + z = torch.ones(2, requires_grad=True) + y = z.sum() + util.warn_if_inf(z, msg, allow_neginf=True) + y.backward([torch.tensor(-float("inf"))]) + assert len(w) == 0 + z.grad = None + y.backward([torch.tensor(float("inf"))]) + assert len(w) == 1 + assert msg in str(w[-1].message) diff --git a/pyro/source/tutorial/Makefile b/pyro/source/tutorial/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..a1410d5f0e5af68f2d8099c2e8b4d12b1cb490fc --- /dev/null +++ b/pyro/source/tutorial/Makefile @@ -0,0 +1,24 @@ +# Copyright Contributors to the Pyro project. +# +# SPDX-License-Identifier: Apache-2.0 + +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS ?= -E -W -j 8 +SPHINXBUILD = python -msphinx +SPHINXPROJ = PyroTutorials +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M -a -E help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/pyro/source/tutorial/README.md b/pyro/source/tutorial/README.md new file mode 100644 index 0000000000000000000000000000000000000000..190fbe2beb511af59058b67799fbb3d0f3ed7755 --- /dev/null +++ b/pyro/source/tutorial/README.md @@ -0,0 +1,7 @@ + + +[http://pyro.ai/examples](http://pyro.ai/examples) diff --git a/pyro/source/tutorial/source/RSA-hyperbole.ipynb b/pyro/source/tutorial/source/RSA-hyperbole.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..e13460bdb9bd52037f71a36a0dc54586738f97bf --- /dev/null +++ b/pyro/source/tutorial/source/RSA-hyperbole.ipynb @@ -0,0 +1,463 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Understanding Hyperbole using RSA\n", + "\n", + " \"My new kettle cost a million dollars.\"\n", + "\n", + "Hyperbole -- using an exagerated utterance to convey strong opinions -- is a common non-literal use of language. Yet non-literal uses of langauge are impossible under the simplest RSA model. Kao, et al, suggested that two ingredients could be added to ennable RSA to capture hyperbole. First, the state conveyed by the speaker and reasoned about by the listener should include affective dimensions. Second, the speaker only intends to convey information relevant to a particular topic, such as \"how expensive was it?\" or \"how am I feeling about the price?\"; pragmatic listeners hence jointly reason about this topic and the state." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "#first some imports\n", + "import torch\n", + "torch.set_default_dtype(torch.float64) # double precision for numerical stability\n", + "\n", + "import collections\n", + "import argparse\n", + "import matplotlib.pyplot as plt\n", + "\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "import pyro.poutine as poutine\n", + "\n", + "from search_inference import HashingMarginal, memoize, Search" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As in the simple RSA example, the inferece helper `Marginal` takes an un-normalized stochastic function, constructs the distribution over execution traces by using `Search`, and constructs the marginal distribution on return values (via `HashingMarginal`)." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def Marginal(fn):\n", + " return memoize(lambda *args: HashingMarginal(Search(fn).run(*args)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The domain for this example will be states consisting of price (e.g. of a tea kettle) and the speaker's emotional arousal (whether the speaker thinks this price is irritatingly expensive). Priors here are adapted from experimental data." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "State = collections.namedtuple(\"State\", [\"price\", \"arousal\"])\n", + "\n", + "def price_prior():\n", + " values = [50, 51, 500, 501, 1000, 1001, 5000, 5001, 10000, 10001]\n", + " probs = torch.tensor([0.4205, 0.3865, 0.0533, 0.0538, 0.0223, 0.0211, 0.0112, 0.0111, 0.0083, 0.0120])\n", + " ix = pyro.sample(\"price\", dist.Categorical(probs=probs))\n", + " return values[ix]\n", + "\n", + "def arousal_prior(price):\n", + " probs = {\n", + " 50: 0.3173,\n", + " 51: 0.3173,\n", + " 500: 0.7920,\n", + " 501: 0.7920,\n", + " 1000: 0.8933,\n", + " 1001: 0.8933,\n", + " 5000: 0.9524,\n", + " 5001: 0.9524,\n", + " 10000: 0.9864,\n", + " 10001: 0.9864\n", + " }\n", + " return pyro.sample(\"arousal\", dist.Bernoulli(probs=probs[price])).item() == 1\n", + "\n", + "def state_prior():\n", + " price = price_prior()\n", + " state = State(price=price, arousal=arousal_prior(price))\n", + " return state" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we define a version of the RSA speaker that only produces *relevant* information for the literal listener. We define relevance with respect to a Question Under Discussion (QUD) -- this can be thought of as defining the speaker's current attention or topic.\n", + "\n", + "The speaker is defined mathematically by:\n", + "\n", + "$$P_S(u|s,q) \\propto \\left[ \\sum_{w'} \\delta_{q(w')=q(w)} P_\\text{Lit}(w'|u) p(u) \\right]^\\alpha $$\n", + "\n", + "To implement this as a probabilistic program, we start with a helper function `project`, which takes a distribution over some (discrete) domain and a function `qud` on this domain. It creates the push-forward distribution, using `Marginal` (as a Python decorator). The speaker's relevant information is then simply information about the state in this projection." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "@Marginal\n", + "def project(dist,qud):\n", + " v = pyro.sample(\"proj\",dist)\n", + " return qud_fns[qud](v)\n", + "\n", + "@Marginal\n", + "def literal_listener(utterance):\n", + " state=state_prior()\n", + " pyro.factor(\"literal_meaning\", 0. if meaning(utterance, state.price) else -999999.)\n", + " return state\n", + "\n", + "@Marginal\n", + "def speaker(state, qud):\n", + " alpha = 1.\n", + " qudValue = qud_fns[qud](state)\n", + " with poutine.scale(scale=torch.tensor(alpha)):\n", + " utterance = utterance_prior()\n", + " literal_marginal = literal_listener(utterance)\n", + " projected_literal = project(literal_marginal, qud)\n", + " pyro.sample(\"listener\", projected_literal, obs=qudValue)\n", + " return utterance\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The possible QUDs capture that the speaker may be attending to the price, her affect, or some combination of these. We assume a uniform QUD prior." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "#The QUD functions we consider:\n", + "qud_fns = {\n", + " \"price\": lambda state: State(price=state.price, arousal=None),\n", + " \"arousal\": lambda state: State(price=None, arousal=state.arousal),\n", + " \"priceArousal\": lambda state: State(price=state.price, arousal=state.arousal),\n", + "}\n", + "\n", + "def qud_prior():\n", + " values = list(qud_fns.keys())\n", + " ix = pyro.sample(\"qud\", dist.Categorical(probs=torch.ones(len(values)) / len(values)))\n", + " return values[ix]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we specify the utterance meanings (standard number word denotations: \"N\" means exactly $N$) and a uniform utterance prior. " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "def utterance_prior():\n", + " utterances = [50, 51, 500, 501, 1000, 1001, 5000, 5001, 10000, 10001]\n", + " ix = pyro.sample(\"utterance\", dist.Categorical(probs=torch.ones(len(utterances)) / len(utterances)))\n", + " return utterances[ix]\n", + "\n", + "def meaning(utterance, price):\n", + " return utterance == price" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "OK, let's see what number term this speaker will say to express different states and QUDs." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEPCAYAAACukxSbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAGeJJREFUeJzt3X+4XFV97/H3x4SEAAqYHOVHEhJNoD1RUDgGqwWpPEICwgFNagJFQGq0ml4VfxC9JVjs8wi2FVsN1VSgSISQQvXmloOphfbqRYEcuAgEjD0ikgR/hEBR9EII+faPtQ7MMz1w5uTMnhnO+ryeZ57M3nvNWd+ZzHxmz1p79igiMDOzMryk3QWYmVnrOPTNzAri0DczK4hD38ysIA59M7OCOPTNzAri0DczK4hD38ysIA59M7OCjG93AfWmTJkSM2bMaHcZZmYvKnfccccjEdE1XLuOC/0ZM2bQ39/f7jLMzF5UJP20kXYe3jEzK4hD38ysIA59M7OCOPTNzAri0DczK4hD38ysIA59M7OCOPTNzArScV/OMjNrphnLbmio3YMXnTimaxjkPX0zs4I49M3MCuLQNzMriEPfzKwgDn0zs4I0FPqS5knaKGlA0rIhth8t6U5JOyQtqFn/Oknfl7RB0t2S3tXM4s3MbGSGDX1J44AVwHygG1gsqbuu2UPAWcDVdet/C7w7IuYA84AvSNpntEWbmdmuaeQ4/bnAQEQ8ACBpNdAL3DfYICIezNt21t4wIn5Uc/1hSb8EuoD/HHXlZjasTjg+vBNqsOc0MrxzILCpZnlzXjcikuYCE4AfD7FtiaR+Sf1bt24d6Z82M7MGtWQiV9L+wFXA2RGxs357RKyMiJ6I6OnqGvYnHs3MbBc1EvpbgGk1y1PzuoZIehlwA/A/I+LWkZVnZmbN1EjorwdmS5opaQKwCFjbyB/P7b8BfC0irtv1Ms3MrBmGDf2I2AEsBdYB9wNrImKDpAslnQwg6Q2SNgMLga9I2pBv/ofA0cBZku7Kl9dVck/MzGxYDZ1lMyL6gL66dctrrq8nDfvU324VsGqUNZqZWZP4G7lmZgVx6JuZFcShb2ZWEIe+mVlBHPpmZgXxb+TamNXIOV98zhkrjff0zcwK4tA3MyuIQ9/MrCAOfTOzgjj0zcwK4tA3MyuIQ9/MrCAOfTOzgjj0zcwK4tA3MyuIQ9/MrCAOfTOzgjj0zcwK4tA3MyuIQ9/MrCAOfTOzgjj0zcwK4tA3MytIQ6EvaZ6kjZIGJC0bYvvRku6UtEPSgrptZ0r6j3w5s1mFm5nZyA0b+pLGASuA+UA3sFhSd12zh4CzgKvrbvty4ALgSGAucIGkfUdftpmZ7YpGfhh9LjAQEQ8ASFoN9AL3DTaIiAfztp11tz0e+HZEPJq3fxuYB1wz6srteXXCD3J3Qg1m9t81MrxzILCpZnlzXteIhm4raYmkfkn9W7dubfBPm5nZSHXERG5ErIyInojo6erqanc5ZmZjViOhvwWYVrM8Na9rxGhua2ZmTdZI6K8HZkuaKWkCsAhY2+DfXwccJ2nfPIF7XF5nZmZtMGzoR8QOYCkprO8H1kTEBkkXSjoZQNIbJG0GFgJfkbQh3/ZR4DOkN471wIWDk7pmZtZ6jRy9Q0T0AX1165bXXF9PGroZ6raXA5ePokYzM2uSjpjINTOz1nDom5kVxKFvZlYQh76ZWUEc+mZmBXHom5kVxKFvZlYQh76ZWUEc+mZmBXHom5kVxKFvZlYQh76ZWUEc+mZmBXHom5kVxKFvZlYQh76ZWUEc+mZmBXHom5kVxKFvZlYQh76ZWUEc+mZmBXHom5kVxKFvZlYQh76ZWUEaCn1J8yRtlDQgadkQ2ydKujZvv03SjLx+N0lXSrpH0v2SPtnc8s3MbCSGDX1J44AVwHygG1gsqbuu2TnAYxExC7gEuDivXwhMjIjXAkcA7xt8QzAzs9ZrZE9/LjAQEQ9ExHZgNdBb16YXuDJfvw44VpKAAPaUNB6YBGwHftWUys3MbMQaCf0DgU01y5vzuiHbRMQO4HFgMukN4DfAz4CHgL+KiEfrO5C0RFK/pP6tW7eO+E6YmVljqp7InQs8AxwAzAQ+KulV9Y0iYmVE9ERET1dXV8UlmZmVq5HQ3wJMq1memtcN2SYP5ewNbANOA74VEU9HxC+BW4Ce0RZtZma7ppHQXw/MljRT0gRgEbC2rs1a4Mx8fQFwc0QEaUjnrQCS9gTeCPywGYWbmdnIDRv6eYx+KbAOuB9YExEbJF0o6eTc7DJgsqQB4Fxg8LDOFcBekjaQ3jyuiIi7m30nzMysMeMbaRQRfUBf3brlNdefJB2eWX+7J4Zab2Zm7eFv5JqZFcShb2ZWEIe+mVlBHPpmZgVx6JuZFcShb2ZWEIe+mVlBHPpmZgVx6JuZFcShb2ZWEIe+mVlBHPpmZgVx6JuZFcShb2ZWEIe+mVlBHPpmZgVx6JuZFcShb2ZWEIe+mVlBHPpmZgVx6JuZFcShb2ZWEIe+mVlBHPpmZgVpKPQlzZO0UdKApGVDbJ8o6dq8/TZJM2q2HSrp+5I2SLpH0u7NK9/MzEZi2NCXNA5YAcwHuoHFkrrrmp0DPBYRs4BLgIvzbccDq4D3R8Qc4Bjg6aZVb2ZmI9LInv5cYCAiHoiI7cBqoLeuTS9wZb5+HXCsJAHHAXdHxA8AImJbRDzTnNLNzGykGgn9A4FNNcub87oh20TEDuBxYDJwMBCS1km6U9InhupA0hJJ/ZL6t27dOtL7YGZmDap6Inc88PvA6fnfUyUdW98oIlZGRE9E9HR1dVVckplZuRoJ/S3AtJrlqXndkG3yOP7ewDbSp4LvRMQjEfFboA84fLRFm5nZrmkk9NcDsyXNlDQBWASsrWuzFjgzX18A3BwRAawDXitpj/xm8BbgvuaUbmZmIzV+uAYRsUPSUlKAjwMuj4gNki4E+iNiLXAZcJWkAeBR0hsDEfGYpM+T3jgC6IuIGyq6L2ZmNoxhQx8gIvpIQzO165bXXH8SWPg8t11FOmzTzMzazN/INTMriEPfzKwgDn0zs4I49M3MCuLQNzMriEPfzKwgDn0zs4I49M3MCuLQNzMriEPfzKwgDn0zs4I49M3MCuLQNzMriEPfzKwgDn0zs4I49M3MCuLQNzMriEPfzKwgDn0zs4I49M3MCuLQNzMriEPfzKwgDn0zs4I49M3MCtJQ6EuaJ2mjpAFJy4bYPlHStXn7bZJm1G2fLukJSR9rTtlmZrYrhg19SeOAFcB8oBtYLKm7rtk5wGMRMQu4BLi4bvvngRtHX66ZmY1GI3v6c4GBiHggIrYDq4Heuja9wJX5+nXAsZIEIOkU4CfAhuaUbGZmu2p8A20OBDbVLG8Gjny+NhGxQ9LjwGRJTwLnAW8DnndoR9ISYAnA9OnTGy5+KDOW3TBsmwcvOnFUfYy2/6prMDN7PlVP5H4auCQinnihRhGxMiJ6IqKnq6ur4pLMzMrVyJ7+FmBazfLUvG6oNpsljQf2BraRPhEskPQ5YB9gp6QnI+JLo67czMxGrJHQXw/MljSTFO6LgNPq2qwFzgS+DywAbo6IAI4abCDp08ATDnwzs/YZNvTzGP1SYB0wDrg8IjZIuhDoj4i1wGXAVZIGgEdJbwxmZtZhGtnTJyL6gL66dctrrj8JLBzmb3x6F+ozM7Mm8jdyzcwK4tA3MyuIQ9/MrCAOfTOzgjj0zcwK4tA3MyuIQ9/MrCAOfTOzgjj0zcwK4tA3MyuIQ9/MrCAOfTOzgjj0zcwK4tA3MyuIQ9/MrCAOfTOzgjj0zcwK4tA3MyuIQ9/MrCAOfTOzgjj0zcwK4tA3MyuIQ9/MrCAOfTOzgjQU+pLmSdooaUDSsiG2T5R0bd5+m6QZef3bJN0h6Z7871ubW76ZmY3EsKEvaRywApgPdAOLJXXXNTsHeCwiZgGXABfn9Y8AJ0XEa4EzgauaVbiZmY1cI3v6c4GBiHggIrYDq4Heuja9wJX5+nXAsZIUEf8vIh7O6zcAkyRNbEbhZmY2co2E/oHApprlzXndkG0iYgfwODC5rs07gTsj4qn6DiQtkdQvqX/r1q2N1m5mZiPUkolcSXNIQz7vG2p7RKyMiJ6I6Onq6mpFSWZmRWok9LcA02qWp+Z1Q7aRNB7YG9iWl6cC3wDeHRE/Hm3BZma26xoJ/fXAbEkzJU0AFgFr69qsJU3UAiwAbo6IkLQPcAOwLCJuaVbRZma2a4YN/TxGvxRYB9wPrImIDZIulHRybnYZMFnSAHAuMHhY51JgFrBc0l358oqm3wszM2vI+EYaRUQf0Fe3bnnN9SeBhUPc7i+AvxhljWZm1iT+Rq6ZWUEc+mZmBXHom5kVxKFvZlYQh76ZWUEc+mZmBXHom5kVxKFvZlYQh76ZWUEc+mZmBXHom5kVxKFvZlYQh76ZWUEc+mZmBXHom5kVxKFvZlYQh76ZWUEc+mZmBXHom5kVxKFvZlYQh76ZWUEc+mZmBXHom5kVxKFvZlaQhkJf0jxJGyUNSFo2xPaJkq7N22+TNKNm2yfz+o2Sjm9e6WZmNlLDhr6kccAKYD7QDSyW1F3X7BzgsYiYBVwCXJxv2w0sAuYA84BL898zM7M2aGRPfy4wEBEPRMR2YDXQW9emF7gyX78OOFaS8vrVEfFURPwEGMh/z8zM2kAR8cINpAXAvIj447x8BnBkRCytaXNvbrM5L/8YOBL4NHBrRKzK6y8DboyI6+r6WAIsyYuHABtHf9de0BTgkYr7cA0vjhra3b9r6Jwa2t3/aGs4KCK6hms0fhf/eFNFxEpgZav6k9QfET2t6s81dG4N7e7fNXRODe3uv1U1NDK8swWYVrM8Na8bso2k8cDewLYGb2tmZi3SSOivB2ZLmilpAmlidm1dm7XAmfn6AuDmSONGa4FF+eiemcBs4PbmlG5mZiM17PBOROyQtBRYB4wDLo+IDZIuBPojYi1wGXCVpAHgUdIbA7ndGuA+YAfwwYh4pqL7MhItG0p6Aa4haXcN7e4fXMOgdtfQ7v6hBTUMO5FrZmZjh7+Ra2ZWEIe+mVlBHPpmZgVx6JtZ0fLZA4pR1ESupGnAL4DdIuI3kl4SETtbXIOijQ+6pGOAVwDjI+LqNtUwFfh1RDzejv7ramn5c6CTSNoDeCYinmpzHUX/P0A6z1krjm4sZk9f0onAjcCXgCskHRIROyW17DHINXxE0l6t6rOu/z8ArgGmA+dKulTSAS2u4RTgX4FzJE1pZd81NRwkaQ7AYNC0em9P0qR29FtXwzuAVcCNkt4u6VUt7v9oSe+B9P/QytdiTQ3HSPqspHdIel2r+881dANExDOtOCHlmA99JdOAi4ClwPmkL4j9u6Q5rXqySXoDsAb4AHBaq4M/h8t84HMR8VfA75O+Ob1M0itr2lRZQxfwp8D3gX1JX9xrafBLeifwL8AKSddIOkXSXhERrQpgSScAayS9vpX91tUwk/Sa+CxwOem5cYak17eo/+OA/wWcKemj0Prgl/RW0k7QNuB40o7QOa3qP9dwInCvpBuhNcE/5kM/kk2koPkR8MscehcB/yLp4BZ9rJwEnEr6xvJi0pP92eCv+smeh5TuBA6R9MqIeBJ4L2mo54KaNlV6HPgw8H7gLtI3tBdLegW05E1nT+DdwOkRcQxwK/AW4PTB4K+y/1zDEcDXgK3A+W0M/pcBmyNifT4h4hWkL2ueJOmgFvQ/C/gc6fnwe20K/v2Bv8x5cAFwNdA7+OmjapJeDrwLWJiX++DZ4K/svGhjOvQlnSTpI5J2Iz3Jzxp8YUfE3wB/A3xK0u5VvehyDR8Avkv6BvNdwHnAO4GzaoJ/YkX9T8unwZhEeuN7KXCopEkR8VvgbOBISSdX0X+uYXo+hcf4iLgnn2r7euA7pOB/V256WFU1ZDuBfYBXw7PPgduB3yGFf+VvvqRzT30K+CTpOfHnkg5vdfBHxA+A/5T0p3m5n3TalGmkx6Pq/i8FLgXuJQ25vlHSx/O2nZJ2r7oG0mtukaTxEfFz0vPx74CjJP1u1Z1HxKPAlyLi+oiYD+xVE/w7qup3zIZ+/vj4GeC+iHgaWAa8X9J5Nc3WAE8BT1Wxl1dTw0D+xPEoQETcDvwZ8A7g7UqnuVjZ7Hf3mnmML5I+wm8nfZz9EOmJvX9E/H/gJqCSCaRcQx/PzaU8Gyg5+P8P0CXpm8B3q5hjyEN84/J9/SJwtKTD8+bVwMOkTwDPjvFXVMNuOVyuiIhfAF8HbiYF/xE5+Per6uN9Hr/+Q6XTo0P6xHGQpMHTpqwn7Rh8IO8oVdX/H+X+Hs+vzVtJbwBzJZ0taSGwsIo3YKX5nNfk/i/PfV8haWLeCfoB6RPPjGb3XVfDobmGZ89FFhFHUxP8kt4sqfln3IyIMXcB3kQ6SmduXp5C+o88HPgZcC5wMHAW0A/s24Ia9gYOIu1pT8jrDsr1bAIObWLfIu2x3QMcA7wS+ETu50DgRNIL/mukMd3NwMFNvv9D1fCxfH/n1LVdBTwIvLaC/4de0tDFFcCbc00XkH7r4YiadjcBr6ro+Vhbw1F12/YnDXFcDfx1fiz2qKCGP8iP/ceAO4DPA78LfDD3+9HcbjHpzWhChf33k0L+wJrtE3M9PyQNA76mgsfgnaTf6vh30g7fSbnPi2vvM2nY6VMVPRdqa7gGOAXYq67Njfm1+iNgRtNrqOKOtftC+iGWzfnFNhn4N+DbwBdIe95fJ32MW19F0LxADX35yfae3ObNpBPUzamohpXAATx3aO65wE9z0ByQa1sOHFLh/0V9DR8iDXEcnJf3J52Q73UV9H1YDpETgD8hvQGdkgNoOfD3wBk56DYAL6+4hveThjNOA15a1+6bpJ2EKh4H5SD7SF7ePQfOZ/PzdH7u/6b8f/H6FvT/deBvgf1q2r0PeAjoruAx2JM0cdyTlz9MerP7k/wYfJE01HcxFewEPU8NHyL9vOz7qAl+0qfOR6jgjS9ijIZ+fuAOAx7I/4HvJQ1lLSH93u+03Kbpe/gN1PCe/ILbj/RpYFaT+zwJ+AiwG2no4lN12z9JGuqZWOH9Hq6GTwD/AEzKy3tVVMfxwDdrlk8gvfH2kj55nAz8c/7/aGrQvUAN80h7cotr1r09P0cqeZHnPhYBXwZemZf3IO2AXFLTZjYwuYX9rwYurWnzYarbCZtEGkp8V82603PwH5+XF+TnRCU7Qc9Tw+Ic/Cfm5VeT3hCb9sn/v9VR1R/uhAvph9yX1q1bBxyer6tNNXyrihc4cBzpqJjBJ/EM0p7TeTVtZpD2viu57yOo4StVP/452L9G+unOl+R1J5D26n8vL0+kyUMZDdQwn7RHPVjDATT5zT//3Wn5/k0iDSV+HXgbz73Z7kEa6jm1ovs+XP+Tcv+9FT7+Asbl6wtIO32H12z7BHB9xc/D4Wr4OHBtTfuXVllPR/xcYlUi4j7Siwt49hjtKeRf74r8CLehhi6a/Fuckt4EXAWcFBG35+PfN5OGM26Q9DRpr/ZNpLmNfYDH2ljDERXVcCRp+OA3EdEv6UHS0UG/kLQpIvokzSJNFN4aFXwTtYEabqyp4faIeLiCGk4kDVV8jzSPdC7PTeJL0j0R8TNJN5Em+NvZfyVHqkjqJT33kPRV4DZgDnCyJEXEHcDnJN0k6dUR8eM21fCXuYbZEfEfEfHrZtdRa0yH/qB8KNzZpEmkhZGOnGh3DT9vchfbgKeB/SVNBv6R9GLaAHyVFLKzgR7g7Ihoath2Qg2S5pPGif8N2E/SQEScK+nLwP8AvkE6THInaXiriiO2Gq0hcg1NPWoqP8+m8tyXEe8n/ard7cAbSXNZf5TbbiHNL3x1rPRfU8dhpDedc0mfMr5M+mLmd4CjSEfyfYf0/NyPJu987GIN25pdw5Cq/BjRKRfSR6hjgN8ZyzXQufMYlddA+lW31cAZefllpMPx/j4vn086MuZbpDehw8ZiDTW1tHUSvwP678T5nJbXMGRdrerIlxb9h3buPEblNZC+9HZG3brvkb51CenUD0cBUyu8722rgTZP4re7/7q+OnU+p6U1DHUZs1/OKlVE3BcRXxpcbtc8RqtqkHRwzeIW4DxJ02vWnQy8WlJ3RDwWEd+NiM3N6r+Damjky4jXkIYSqhjDb2v/uYYjJb1FUk+kIdwHSXMp0/OX8/pIBxAszOPpT0VEU2vphBqGU8SYfok6dB6jqTVIejvpxGVrI2JRRKySdAhwi6Q3R8RDEfGIpO1AJSe465Aa2jqJ3+7+cw0vpvmcympoqM429WsVy4H7FuDnEfHDsVaD0snTrgf+iRQmEyNicd72GdLe9aWkTxink46D/slYqyH3dQjpi1UfBP4vcB3PTaD/GngV8CvSBPp7IuKeMdb/ONLhoDdExFWSXkY6k+o9EfFeSeeTvoA1hXQY6WmRzj00pmpouFaHvr1YKZ2n51ekwyO/DDxdE7qnko6IOAL4QkTcO1ZryH0dRtqTnAD8OXAZ8MekifWLImKTpH2jmqO2OqH/84CHI+KqmnXfA26JiI9L2hd4DfCTZg+tdVINDWnlBIIvvlR1IZ3q4nrgmrw8BziopBpo8yR+q/un5lQJpMNA7wWm16ybQvoU1vTTOnRSDSO9eCLXxoSI2EY6h8mTkjaSznFS+U/PdVIN0eZJ/Fb2n+dS7pK0Ov/tVaRPGrcMTqJHxCOkSeMq53PaWsOu8ESujRmRJkzvJp3m4G3Rho/QnVBDuyfxWzCBvyfpi18fBt4k6ZqIWBwR56eu+d+SBudSDiX9YE1TdUINu8pj+jZm5DHTNaTTBN9dcA1tncRvRf+dMJfSCTXsCoe+jSmSdo/0U5BF11ASpVN+rAS2R8RipR+9fyIiflpSDY3ymL6NKZ0Qtp1QQ0naPZfSKTU0yqFvZi96ecL0btIv1J3arvmcdtfQCIe+mb3o5bmUE4Djoslf/nox1dAIj+mb2ZjQCXMpnVDDcBz6ZmYF8fCOmVlBHPpmZgVx6JuZFcShb2ZWEIe+mVlBHPpmZgX5L7x4yytpS2R0AAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#silly plotting helper:\n", + "def plot_dist(d):\n", + " support = d.enumerate_support()\n", + " data = [d.log_prob(s).exp().item() for s in d.enumerate_support()]\n", + " names = support\n", + "\n", + " ax = plt.subplot(111)\n", + " width=0.3\n", + " bins = list(map(lambda x: x-width/2,range(1,len(data)+1)))\n", + " ax.bar(bins,data,width=width)\n", + " ax.set_xticks(list(map(lambda x: x, range(1,len(data)+1))))\n", + " ax.set_xticklabels(names,rotation=45, rotation_mode=\"anchor\", ha=\"right\")\n", + "\n", + "\n", + "# plot_dist( speaker(State(price=50, arousal=False), \"arousal\") )\n", + "# plot_dist( speaker(State(price=50, arousal=True), \"price\") )\n", + "plot_dist( speaker(State(price=50, arousal=True), \"arousal\") )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Try different values above! When will the speaker favor non-literal utterances?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, the pragmatic listener doesn't know what the QUD is and so jointly reasons abut this and the state." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "@Marginal\n", + "def pragmatic_listener(utterance):\n", + " state = state_prior()\n", + " qud = qud_prior()\n", + " speaker_marginal = speaker(state, qud)\n", + " pyro.sample(\"speaker\", speaker_marginal, obs=utterance)\n", + " return state" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "How does this listener interpret the uttered price \"10,000\"? On the one hand this is a very unlikely price *a priori*, on the other if it were true it would come with strong arousal. Altogether this becomes a plausible *hyperbolic* utterence:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_dist( pragmatic_listener(10000) )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pragmatic Halo\n", + "\n", + "\"It cost fifty dollars\" is often interpretted as costing *around* 50 -- plausibly 51; yet \"it cost fiftyone dollars\" is interpretted as 51 and definitely not 50. This assymetric imprecision is often called the pragmatic halo or pragmatic slack.\n", + "\n", + "We can extend the hyperole model to capture this additional non-literal use of numbers by including QUD functions that collapse nearby numbers and assuming that round numbers are slightly more likely (because they are less difficult to utter)." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "#A helper to round a number to the nearest ten:\n", + "def approx(x, b=None):\n", + " if b is None:\n", + " b = 10.\n", + " div = float(x)/b\n", + " rounded = int(div) + 1 if div - float(int(div)) >= 0.5 else int(div)\n", + " return int(b) * rounded\n", + "\n", + "#The QUD functions we consider:\n", + "qud_fns = {\n", + " \"price\": lambda state: State(price=state.price, arousal=None),\n", + " \"arousal\": lambda state: State(price=None, arousal=state.arousal),\n", + " \"priceArousal\": lambda state: State(price=state.price, arousal=state.arousal),\n", + " \"approxPrice\": lambda state: State(price=approx(state.price), arousal=None),\n", + " \"approxPriceArousal\": lambda state: State(price=approx(state.price), arousal=state.arousal),\n", + "}\n", + "\n", + "def qud_prior():\n", + " values = list(qud_fns.keys())\n", + " ix = pyro.sample(\"qud\", dist.Categorical(probs=torch.ones(len(values)) / len(values)))\n", + " return values[ix]\n", + "\n", + "def utterance_cost(numberUtt):\n", + " preciseNumberCost = 10.\n", + " return 0. if approx(numberUtt) == numberUtt else preciseNumberCost\n", + "\n", + "def utterance_prior():\n", + " utterances = [50, 51, 500, 501, 1000, 1001, 5000, 5001, 10000, 10001]\n", + " utteranceLogits = -torch.tensor(list(map(utterance_cost, utterances)),\n", + " dtype=torch.float64)\n", + " ix = pyro.sample(\"utterance\", dist.Categorical(logits=utteranceLogits))\n", + " return utterances[ix]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The RSA speaker and listener definitions are unchanged:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "@Marginal\n", + "def literal_listener(utterance):\n", + " state=state_prior()\n", + " pyro.factor(\"literal_meaning\", 0. if meaning(utterance, state.price) else -999999.)\n", + " return state\n", + "\n", + "@Marginal\n", + "def speaker(state, qud):\n", + " alpha = 1.\n", + " qudValue = qud_fns[qud](state)\n", + " with poutine.scale(scale=torch.tensor(alpha)):\n", + " utterance = utterance_prior()\n", + " literal_marginal = literal_listener(utterance)\n", + " projected_literal = project(literal_marginal, qud)\n", + " pyro.sample(\"listener\", projected_literal, obs=qudValue)\n", + " return utterance\n", + "\n", + "@Marginal\n", + "def pragmatic_listener(utterance):\n", + " state = state_prior()\n", + " qud = qud_prior()\n", + " speaker_marginal = speaker(state, qud)\n", + " pyro.sample(\"speaker\", speaker_marginal, obs=utterance)\n", + " return state" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "OK, let's see if we get the desired assymetric slack (we're only interested in the interpretted price here, so we marginalize out the arousal)." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "@Marginal\n", + "def pragmatic_listener_price_marginal(utterance):\n", + " return pyro.sample(\"pm\", pragmatic_listener(utterance)).price\n", + "\n", + "plot_dist(pragmatic_listener_price_marginal(50))" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_dist(pragmatic_listener_price_marginal(51))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Irony and More Complex Affect\n", + "\n", + "In the above hyperbole model we assumed a very simple model of affect: a single dimension with two values (high and low arousal). Actual affect is best represented as a two-dimensional space corresponding to valence and arousal. Kao and Goodman (2015) showed that extending the affect space to these two dimensions immediately introduces a new usage of numbers: verbal irony in which an utterance corresponding to a high-arousal positive valence state is used to convey a high-arousal but negative valence (or vice versa). " + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/RSA-implicature.ipynb b/pyro/source/tutorial/source/RSA-implicature.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..db8564b4c45ee0c4c881f912a017dd5684388541 --- /dev/null +++ b/pyro/source/tutorial/source/RSA-implicature.ipynb @@ -0,0 +1,251 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# The Rational Speech Act framework\n", + "Human language depends on the assumption of *cooperativity*, that speakers attempt to provide relevant information to the listener; listeners can use this assumption to reason *pragmatically* about the likely state of the world given the utterance chosen by the speaker.\n", + "\n", + "The Rational Speech Act framework formalizes these ideas using probabiistic decision making and reasoning.\n", + "\n", + "Note: This notebook must be run against Pyro 4392d54a220c328ee356600fb69f82166330d3d6 or later." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "#first some imports\n", + "import torch\n", + "torch.set_default_dtype(torch.float64) # double precision for numerical stability\n", + "\n", + "import collections\n", + "import argparse\n", + "import matplotlib.pyplot as plt\n", + "\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "import pyro.poutine as poutine\n", + "\n", + "from search_inference import HashingMarginal, memoize, Search" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Before we can defined RSA, we specify a helper function that wraps up inference. `Marginal` takes an un-normalized stochastic function, constructs the distribution over execution traces by using `Search`, and constructs the marginal distribution on return values (via `HashingMarginal`)." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def Marginal(fn):\n", + " return memoize(lambda *args: HashingMarginal(Search(fn).run(*args)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The RSA model captures recursive social reasoning -- a listener thinks about a speaker who thinks about a listener....\n", + "\n", + "To start, the `literal_listener` simply imposes that the utterance is true. Mathematically:\n", + "$$P_\\text{Lit}(s|u) \\propto {\\mathcal L}(u,s)P(s)$$\n", + "\n", + "In code:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "@Marginal\n", + "def literal_listener(utterance):\n", + " state = state_prior()\n", + " pyro.factor(\"literal_meaning\", 0. if meaning(utterance, state) else -999999.)\n", + " return state" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next the cooperative speaker chooses an utterance to convey a given state to the literal listener. Mathematically:\n", + "\n", + "$$P_S(u|s) \\propto [P_\\text{Lit}(s|u) P(u)]^\\alpha$$\n", + "\n", + "In the code below, the `utterance_prior` captures the cost of producing an utterance, while the `pyro.sample` expression captures that the litteral listener guesses the right state (`obs=state` indicates that the sampled value is observed to be the correct `state`).\n", + "\n", + "We use `poutine.scale` to raise the entire execution probability to the power of `alpha` -- this yields a softmax decision rule with optimality parameter `alpha`." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "@Marginal\n", + "def speaker(state):\n", + " alpha = 1.\n", + " with poutine.scale(scale=torch.tensor(alpha)):\n", + " utterance = utterance_prior()\n", + " pyro.sample(\"listener\", literal_listener(utterance), obs=state)\n", + " return utterance" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, we can define the pragmatic_listener, who infers which state is likely, given that the speaker chose a given utterance. Mathematically:\n", + "\n", + "$$P_L(s|u) \\propto P_S(u|s) P(s)$$\n", + "\n", + "In code:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "@Marginal\n", + "def pragmatic_listener(utterance):\n", + " state = state_prior()\n", + " pyro.sample(\"speaker\", speaker(state), obs=utterance)\n", + " return state" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's set up a simple world by filling in the priors. We imagine there are 4 objects each either blue or red, and the possible utterances are \"none are blue\", \"some are blue\", \"all are blue\".\n", + "\n", + "We take the prior probabilities for the number of blue objects and the utterance to be uniform." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "total_number = 4\n", + "\n", + "def state_prior():\n", + " n = pyro.sample(\"state\", dist.Categorical(probs=torch.ones(total_number+1) / total_number+1))\n", + " return n\n", + "\n", + "def utterance_prior():\n", + " ix = pyro.sample(\"utt\", dist.Categorical(probs=torch.ones(3) / 3))\n", + " return [\"none\",\"some\",\"all\"][ix]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, the meaning function (notated $\\mathcal L$ above):" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "meanings = {\n", + " \"none\": lambda N: N==0,\n", + " \"some\": lambda N: N>0,\n", + " \"all\": lambda N: N==total_number,\n", + "}\n", + "\n", + "def meaning(utterance, state):\n", + " return meanings[utterance](state)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's see if it works: how does the pragmatic listener interpret the \"some\" utterance?" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#silly plotting helper:\n", + "def plot_dist(d):\n", + " support = d.enumerate_support()\n", + " data = [d.log_prob(s).exp().item() for s in d.enumerate_support()]\n", + " names = list(map(str, support))\n", + "\n", + " ax = plt.subplot(111)\n", + " width = 0.3\n", + " bins = [x-width/2 for x in range(1, len(data) + 1)]\n", + " ax.bar(bins,data,width=width)\n", + " ax.set_xticks(list(range(1, len(data) + 1)))\n", + " ax.set_xticklabels(names, rotation=45, rotation_mode=\"anchor\", ha=\"right\")\n", + " \n", + "interp_dist = pragmatic_listener(\"some\")\n", + "plot_dist(interp_dist)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Yay, we get a *scalar implicature*: \"some\" is interpretted as likely not including all 4. Try looking at the `literal_listener` too -- no implicature." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/_static/css/pyro.css b/pyro/source/tutorial/source/_static/css/pyro.css new file mode 100644 index 0000000000000000000000000000000000000000..0561ba35e6f73c0e7bd42d223e274e11e14bc7a0 --- /dev/null +++ b/pyro/source/tutorial/source/_static/css/pyro.css @@ -0,0 +1,35 @@ +/* + * Copyright Contributors to the Pyro project. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +@import url("theme.css"); + +.wy-side-nav-search { + background-color: #565656; +} + +.wy-side-nav-search a { + margin: 0 +} + +.wy-side-nav-search > div.version { + color: #f26822; +} + +.wy-nav-top { + background: #404040; +} + +.wy-menu-vertical li.on a, .wy-menu-vertical li.current>a { + background: #ccc; +} + +.wy-side-nav-search input[type=text] { + border-color: #313131; +} + +.wy-side-nav-search>a img.logo, .wy-side-nav-search .wy-dropdown>a img.logo { + max-width: 60%; +} \ No newline at end of file diff --git a/pyro/source/tutorial/source/_static/img/air/progress_accuracy.png b/pyro/source/tutorial/source/_static/img/air/progress_accuracy.png new file mode 100644 index 0000000000000000000000000000000000000000..73a8f231d91136acb43c25cb9689363ad8bffe19 Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/air/progress_accuracy.png differ diff --git a/pyro/source/tutorial/source/_static/img/air/progress_elbo.png b/pyro/source/tutorial/source/_static/img/air/progress_elbo.png new file mode 100644 index 0000000000000000000000000000000000000000..f5e7b9eff677dedd924dbe7cdf3ada6376e4a440 Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/air/progress_elbo.png differ diff --git a/pyro/source/tutorial/source/_static/img/air/reconstructions.png b/pyro/source/tutorial/source/_static/img/air/reconstructions.png new file mode 100644 index 0000000000000000000000000000000000000000..405e9a265ff20aa90cef2297ff16fd4174085577 Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/air/reconstructions.png differ diff --git a/pyro/source/tutorial/source/_static/img/beta.png b/pyro/source/tutorial/source/_static/img/beta.png new file mode 100644 index 0000000000000000000000000000000000000000..914cddf3fabb4fcc76734dbd4d99deb2c73dcc0e Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/beta.png differ diff --git a/pyro/source/tutorial/source/_static/img/conditional_samples/0.jpg b/pyro/source/tutorial/source/_static/img/conditional_samples/0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d21862f1177b39f0311bb08a08f7e7a67d6eb3fd Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/conditional_samples/0.jpg differ diff --git a/pyro/source/tutorial/source/_static/img/conditional_samples/1.jpg b/pyro/source/tutorial/source/_static/img/conditional_samples/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..49333e3e51567bc41ffadf83d1bb849344574083 Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/conditional_samples/1.jpg differ diff --git a/pyro/source/tutorial/source/_static/img/conditional_samples/2.jpg b/pyro/source/tutorial/source/_static/img/conditional_samples/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3bd19ccd7c68ad8e6fc9d33cc97f8f440383b5f2 Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/conditional_samples/2.jpg differ diff --git a/pyro/source/tutorial/source/_static/img/conditional_samples/3.jpg b/pyro/source/tutorial/source/_static/img/conditional_samples/3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..db99472654c28895c4d991d6dda8f5a3563fdeb6 Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/conditional_samples/3.jpg differ diff --git a/pyro/source/tutorial/source/_static/img/conditional_samples/4.jpg b/pyro/source/tutorial/source/_static/img/conditional_samples/4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7692edf083f23b54d48be58c7a1949d64b6cef4c Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/conditional_samples/4.jpg differ diff --git a/pyro/source/tutorial/source/_static/img/conditional_samples/5.jpg b/pyro/source/tutorial/source/_static/img/conditional_samples/5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..47cffa9d3fc2d857dc1237edc93fe24beee7fd24 Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/conditional_samples/5.jpg differ diff --git a/pyro/source/tutorial/source/_static/img/conditional_samples/6.jpg b/pyro/source/tutorial/source/_static/img/conditional_samples/6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..44e4d02a0e372184a315d272cebbb63030522462 Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/conditional_samples/6.jpg differ diff --git a/pyro/source/tutorial/source/_static/img/conditional_samples/7.jpg b/pyro/source/tutorial/source/_static/img/conditional_samples/7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9b0d525db98bfd2fbab347fb3ddd06021e58a957 Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/conditional_samples/7.jpg differ diff --git a/pyro/source/tutorial/source/_static/img/conditional_samples/8.jpg b/pyro/source/tutorial/source/_static/img/conditional_samples/8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5895174c2d136021ef7ec0d877fd0cdd1a289bb6 Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/conditional_samples/8.jpg differ diff --git a/pyro/source/tutorial/source/_static/img/conditional_samples/9.jpg b/pyro/source/tutorial/source/_static/img/conditional_samples/9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..40498101e4794b408ec94cfa25437a7c56d4e92b Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/conditional_samples/9.jpg differ diff --git a/pyro/source/tutorial/source/_static/img/dmm.tex b/pyro/source/tutorial/source/_static/img/dmm.tex new file mode 100644 index 0000000000000000000000000000000000000000..1d2053b2b23ffe27c78497df0b31ba42f0de7226 --- /dev/null +++ b/pyro/source/tutorial/source/_static/img/dmm.tex @@ -0,0 +1,94 @@ +% Copyright Contributors to the Pyro project. +% +% SPDX-License-Identifier: Apache-2.0 + +\documentclass[12pt]{article} +\usepackage{amsmath,amscd,amssymb} +\usepackage[pdftex]{graphicx} +\usepackage{array} +\usepackage{bbold} +\usepackage{amsfonts} +\usepackage{bm} + +\usepackage{tikz-qtree} +\usepackage{tikz} +\usetikzlibrary{bayesnet} +\usetikzlibrary{calc} + +\begin{document} + +%%% MODEL figure +\begin{figure}[t] + \begin{tikzpicture}[scale=1.75, transform shape,blackdot/.style={thin, draw=black, align=center, scale = 0.3,fill=black}] + %\node [thick,det, left= of zhat1, xshift=5pt](zhat0) {$\bm{z}_0$}; + \node [thick, det] (z0) {$\bm{z}_0$}; + \node [thick, latent, right= of z0] (z1) {$\bm{z}_1$}; + \node [thick, latent, right= of z1] (z2) {$\bm{z}_2$}; + \node [thick, latent, right= of z2] (z3) {$\bm{z}_3$}; + \node [const, right=of z3] (dotsz) {\ldots}; + \node [thick, obs, below= of z1] (x1) {$\bm{x}_1$}; + \node [thick, obs, below= of z2] (x2) {$\bm{x}_2$}; + \node [thick, obs, below= of z3] (x3) {$\bm{x}_3$}; + \edge {z1} {z2}; + \edge {z2} {z3}; + \edge {z3} {dotsz}; + %\draw[->] (z0) -- (z1); + \draw[->] (z0) -- node[blackdot] {d} node[above,font=\footnotesize] {Trans} (z1); + \draw[->] (z1) -- node[blackdot] {d} node[above,font=\footnotesize] {Trans} (z2); + \draw[->] (z1) -- node[blackdot] {d} node[left,font=\footnotesize] {Emit} (x1); + \draw[->] (z2) -- node[blackdot] {d} node[above,font=\footnotesize] {Trans} (z3); + \draw[->] (z2) -- node[blackdot] {d} node[left,font=\footnotesize] {Emit}(x2); + \draw[->] (z3) -- node[blackdot] {d} node[left,font=\footnotesize] {Emit}(x3); + \draw[->] (z3) -- node[blackdot] {d} node[above,font=\footnotesize] {Trans} (dotsz); + \end{tikzpicture}\quad +\end{figure} + +\definecolor{lightblue}{RGB}{229, 236, 255} +\definecolor{darkblue}{RGB}{51, 133, 255} + +%%% GUIDE figure +\begin{figure}[t] + \begin{tikzpicture}[scale=1.5, transform shape] + \tikzstyle{recnet}=[rectangle,fill=lightblue,draw=black,minimum size=17pt,inner sep=2pt] + \node [thick,obs] (x1) {$\bm{x}_1$}; + \node [thick,obs, right= of x1, xshift=5pt] (x2) {$\bm{x}_2$}; + \node [thick,obs, right= of x2, xshift=5pt] (xT) {$\bm{x}_3$}; + + \node [thick,det, above= of x1] (h1L) {$\bm{h}_1$}; + \node [thick,det, above= of x2] (h2L) {$\bm{h}_2$}; + \node [thick,det, above= of xT] (hTL) {$\bm{h}_3$}; + \node [const, left= of h1L, xshift=5pt](hRlabel){RNN}; + + \node [thick, recnet, above= of h1L] (z1) {$(\mu_1, \scale_1)$}; + \node [thick, recnet, above= of h2L] (z2) {$(\mu_2, \scale_2)$}; + \node [thick, recnet, above= of hTL] (zT) {$(\mu_3, \scale_3)$}; + \node [const, left=of z1, xshift=25pt](comb){{Combiners}}; + + \node [const, above= of z1, yshift=-20pt, xshift=-33pt, darkblue](label1){}; + \node [const, above= of z2, yshift=-20pt, xshift=-33pt, darkblue](label2){}; + \node [const, above= of zT, yshift=-20pt, xshift=-33pt, darkblue](label3){}; + + \node [thick,latent, above= of z1] (zhat1) {$\bm{z}_1$}; + \node [thick,latent, above= of z2] (zhat2) {$\bm{z}_2$}; + \node [thick,latent, above= of zT] (zhatT) {$\bm{z}_3$}; + \node [thick,det, left= of zhat1, xshift=5pt](zhat0) {$\bm{z}_0^{\rm{q}}$}; + + \edge [thick,red]{h2L} {h1L}; + \edge [thick,red]{hTL}{h2L}; + + \edge [thick,red, bend left]{x1} {h1L}; + \edge [thick,red, bend left]{x2} {h2L}; + \edge [thick,red, bend left]{xT} {hTL}; + \edge [thick,darkblue]{h1L} {z1}; + \edge [thick,darkblue]{h2L} {z2}; + \edge [thick,darkblue]{hTL} {zT}; + \edge [thick]{z1}{zhat1}; + \edge [thick]{z2}{zhat2}; + \edge [thick]{zT}{zhatT}; + \edge [thick,darkblue,shorten <=0pt]{zhat0}{z1}; + \edge [thick,darkblue]{zhat1}{z2}; + \edge [thick,darkblue]{zhat2}{zT}; + \end{tikzpicture} +\end{figure} + +\end{document} diff --git a/pyro/source/tutorial/source/_static/img/ekf_track.png b/pyro/source/tutorial/source/_static/img/ekf_track.png new file mode 100644 index 0000000000000000000000000000000000000000..b8730ed1fd429570d429bbfe752bba32361c9efd Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/ekf_track.png differ diff --git a/pyro/source/tutorial/source/_static/img/exp_1_acc_24_3000.png b/pyro/source/tutorial/source/_static/img/exp_1_acc_24_3000.png new file mode 100644 index 0000000000000000000000000000000000000000..a3c7828a69110bc2f197790c17c883818bac6bfd Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/exp_1_acc_24_3000.png differ diff --git a/pyro/source/tutorial/source/_static/img/exp_1_losses_24_3000.png b/pyro/source/tutorial/source/_static/img/exp_1_losses_24_3000.png new file mode 100644 index 0000000000000000000000000000000000000000..5464257d30c3285e901c3527895e34708372f075 Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/exp_1_losses_24_3000.png differ diff --git a/pyro/source/tutorial/source/_static/img/exp_2_acc_56_3000.png b/pyro/source/tutorial/source/_static/img/exp_2_acc_56_3000.png new file mode 100644 index 0000000000000000000000000000000000000000..98de6fd2417f375863d50c52324866923ee85986 Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/exp_2_acc_56_3000.png differ diff --git a/pyro/source/tutorial/source/_static/img/exp_2_losses_56_3000.png b/pyro/source/tutorial/source/_static/img/exp_2_losses_56_3000.png new file mode 100644 index 0000000000000000000000000000000000000000..22c1c93ef810a58fe7f045773cba54e15e16cb91 Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/exp_2_losses_56_3000.png differ diff --git a/pyro/source/tutorial/source/_static/img/exp_3_acc_112_3000.png b/pyro/source/tutorial/source/_static/img/exp_3_acc_112_3000.png new file mode 100644 index 0000000000000000000000000000000000000000..c289174c7b3d78a4b990a9f44c9c4d290f5f8704 Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/exp_3_acc_112_3000.png differ diff --git a/pyro/source/tutorial/source/_static/img/exp_3_losses_112_3000.png b/pyro/source/tutorial/source/_static/img/exp_3_losses_112_3000.png new file mode 100644 index 0000000000000000000000000000000000000000..500730d2635e8544d1fb81f08282d9511e627565 Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/exp_3_losses_112_3000.png differ diff --git a/pyro/source/tutorial/source/_static/img/favicon/favicon.ico b/pyro/source/tutorial/source/_static/img/favicon/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..d636583b345e7a8b8dfe195bcb03a230bb6a908f Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/favicon/favicon.ico differ diff --git a/pyro/source/tutorial/source/_static/img/first_embedding.png b/pyro/source/tutorial/source/_static/img/first_embedding.png new file mode 100644 index 0000000000000000000000000000000000000000..c538fd2b0dc28904d07844d6ec9ac80a895d314c --- /dev/null +++ b/pyro/source/tutorial/source/_static/img/first_embedding.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c2d6510a71bad4866e28061988b9014b4d4cfe0e0c3dd27f02e83e17e40e69b3 +size 122493 diff --git a/pyro/source/tutorial/source/_static/img/gpr-fit.gif b/pyro/source/tutorial/source/_static/img/gpr-fit.gif new file mode 100644 index 0000000000000000000000000000000000000000..f36c16d11937d0f6f69cf019202f54cc64609595 --- /dev/null +++ b/pyro/source/tutorial/source/_static/img/gpr-fit.gif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa8a77357671d7c0ac259c694c03f42dd7de1e96cf7f96a349a27735f118b910 +size 1066465 diff --git a/pyro/source/tutorial/source/_static/img/guide.png b/pyro/source/tutorial/source/_static/img/guide.png new file mode 100644 index 0000000000000000000000000000000000000000..1ee00107602afe803a6c6b14959894c9ce7e6fa5 --- /dev/null +++ b/pyro/source/tutorial/source/_static/img/guide.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b682313685a43c9a38ff9dce1bbbcb241ed59cf1c64174dcdd59d11a560cee6 +size 168381 diff --git a/pyro/source/tutorial/source/_static/img/model-generative.png b/pyro/source/tutorial/source/_static/img/model-generative.png new file mode 100644 index 0000000000000000000000000000000000000000..d89732b69a7dd410f431d0ae46ac393c18facccc Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/model-generative.png differ diff --git a/pyro/source/tutorial/source/_static/img/model-micro.png b/pyro/source/tutorial/source/_static/img/model-micro.png new file mode 100644 index 0000000000000000000000000000000000000000..04772dc92699c9a1d8de75ce8adc704bb66c491e Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/model-micro.png differ diff --git a/pyro/source/tutorial/source/_static/img/model.png b/pyro/source/tutorial/source/_static/img/model.png new file mode 100644 index 0000000000000000000000000000000000000000..af63b6d2c217a5fd492488fd85b37c23ab744c75 --- /dev/null +++ b/pyro/source/tutorial/source/_static/img/model.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07357099cf38f84efb156f68a09373554995b8d2c731bc8d8409faae88928f54 +size 103338 diff --git a/pyro/source/tutorial/source/_static/img/pyro_logo_wide.png b/pyro/source/tutorial/source/_static/img/pyro_logo_wide.png new file mode 100644 index 0000000000000000000000000000000000000000..cdd87ba014b22478dcba566f30262d6480249293 Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/pyro_logo_wide.png differ diff --git a/pyro/source/tutorial/source/_static/img/sir_hmc/energy-trace.png b/pyro/source/tutorial/source/_static/img/sir_hmc/energy-trace.png new file mode 100644 index 0000000000000000000000000000000000000000..78f110770a0c04e84e0da0aa438f732c35dd55f1 Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/sir_hmc/energy-trace.png differ diff --git a/pyro/source/tutorial/source/_static/img/sir_hmc/forecast.png b/pyro/source/tutorial/source/_static/img/sir_hmc/forecast.png new file mode 100644 index 0000000000000000000000000000000000000000..cc04b6a098607dd03193cf51cfeefaad2e43aae3 --- /dev/null +++ b/pyro/source/tutorial/source/_static/img/sir_hmc/forecast.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d8f32b0574071e0323b64885561a3f6aa35639f1045875d4b902c59b4185e03 +size 141098 diff --git a/pyro/source/tutorial/source/_static/img/sir_hmc/parameters.png b/pyro/source/tutorial/source/_static/img/sir_hmc/parameters.png new file mode 100644 index 0000000000000000000000000000000000000000..f957638c09f7d4223e865835490c35674ab1345d Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/sir_hmc/parameters.png differ diff --git a/pyro/source/tutorial/source/_static/img/ss_vae_m2.png b/pyro/source/tutorial/source/_static/img/ss_vae_m2.png new file mode 100644 index 0000000000000000000000000000000000000000..e7b81b95bfffa471f9e2377f8853eaa3d82ea2c1 Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/ss_vae_m2.png differ diff --git a/pyro/source/tutorial/source/_static/img/ss_vae_zoo.png b/pyro/source/tutorial/source/_static/img/ss_vae_zoo.png new file mode 100644 index 0000000000000000000000000000000000000000..f4fa143cb8e6ae61b0305d4aee0deec84e708004 --- /dev/null +++ b/pyro/source/tutorial/source/_static/img/ss_vae_zoo.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d22a69009487ffc014d546e8337e4de369a9b4f8a0631fed693ffe7374426211 +size 209818 diff --git a/pyro/source/tutorial/source/_static/img/svgpr-fit.gif b/pyro/source/tutorial/source/_static/img/svgpr-fit.gif new file mode 100644 index 0000000000000000000000000000000000000000..441b83a37bc2842acd819253de6ec452186ac09d --- /dev/null +++ b/pyro/source/tutorial/source/_static/img/svgpr-fit.gif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd277f08be1b78e0575ba62a8baf1cc5075394a7e9365332ab4d89b405f48399 +size 2783191 diff --git a/pyro/source/tutorial/source/_static/img/test_nll.png b/pyro/source/tutorial/source/_static/img/test_nll.png new file mode 100644 index 0000000000000000000000000000000000000000..4fffb9572bc036a187351c12cbb0bc69211996b1 Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/test_nll.png differ diff --git a/pyro/source/tutorial/source/_static/img/third_embedding.png b/pyro/source/tutorial/source/_static/img/third_embedding.png new file mode 100644 index 0000000000000000000000000000000000000000..c1a4ed3b9c84d4a88be554d336d4e4cb6e5852f7 --- /dev/null +++ b/pyro/source/tutorial/source/_static/img/third_embedding.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be5d6260dd6eaaa29317afa68a97da1785f6c39fd3ddbca504a63e0f2867c12f +size 204721 diff --git a/pyro/source/tutorial/source/_static/img/vae_guide.png b/pyro/source/tutorial/source/_static/img/vae_guide.png new file mode 100644 index 0000000000000000000000000000000000000000..26c75c2316d733d3ef3e2366cf67b5c4fc02b927 Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/vae_guide.png differ diff --git a/pyro/source/tutorial/source/_static/img/vae_model.png b/pyro/source/tutorial/source/_static/img/vae_model.png new file mode 100644 index 0000000000000000000000000000000000000000..12dfae7ccd18b414ebc2c79780c35baa10f395d9 Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/vae_model.png differ diff --git a/pyro/source/tutorial/source/_static/img/vae_plots/VAE_embedding.png b/pyro/source/tutorial/source/_static/img/vae_plots/VAE_embedding.png new file mode 100644 index 0000000000000000000000000000000000000000..d7d87749f936380b58006b8cfd179d3fff4248fd Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/vae_plots/VAE_embedding.png differ diff --git a/pyro/source/tutorial/source/_static/img/vae_plots/test_elbo_vae.png b/pyro/source/tutorial/source/_static/img/vae_plots/test_elbo_vae.png new file mode 100644 index 0000000000000000000000000000000000000000..435d18aee5703d153737026bb2d92d0b58afa7ae Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/vae_plots/test_elbo_vae.png differ diff --git a/pyro/source/tutorial/source/_static/img/vae_plots/vae_embeddings_pt1.jpg b/pyro/source/tutorial/source/_static/img/vae_plots/vae_embeddings_pt1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..94031e7dd971f8df73d90792748c8743f5bf80b4 Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/vae_plots/vae_embeddings_pt1.jpg differ diff --git a/pyro/source/tutorial/source/_static/img/vae_plots/vae_embeddings_pt2.jpg b/pyro/source/tutorial/source/_static/img/vae_plots/vae_embeddings_pt2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0fc194423e250e6bee8e76a10290b31f5eb8b507 Binary files /dev/null and b/pyro/source/tutorial/source/_static/img/vae_plots/vae_embeddings_pt2.jpg differ diff --git a/pyro/source/tutorial/source/air.ipynb b/pyro/source/tutorial/source/air.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..b92c87073f7af7d7ae7759f523e524ed8d3564fc --- /dev/null +++ b/pyro/source/tutorial/source/air.ipynb @@ -0,0 +1,939 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Attend Infer Repeat\n", + "\n", + "In this tutorial we will implement the model and inference strategy described in \"Attend, Infer, Repeat:\n", + "Fast Scene Understanding with Generative Models\" (AIR) [1] and apply it to the multi-mnist dataset.\n", + "\n", + "A [standalone implementation](https://github.com/pyro-ppl/pyro/tree/dev/examples/air) is also available." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Populating the interactive namespace from numpy and matplotlib\n" + ] + } + ], + "source": [ + "%pylab inline\n", + "import os\n", + "from collections import namedtuple\n", + "import pyro\n", + "import pyro.optim as optim\n", + "from pyro.infer import SVI, TraceGraph_ELBO\n", + "import pyro.distributions as dist\n", + "import pyro.poutine as poutine\n", + "import pyro.contrib.examples.multi_mnist as multi_mnist\n", + "import torch\n", + "import torch.nn as nn\n", + "from torch.nn.functional import relu, sigmoid, softplus, grid_sample, affine_grid\n", + "import numpy as np\n", + "\n", + "smoke_test = ('CI' in os.environ)\n", + "assert pyro.__version__.startswith('1.9.1')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Introduction\n", + "\n", + "The model described in [1] is a generative model of scenes. In this tutorial we will use it to model images from a dataset that is similar to the multi-mnist dataset in [1]. Here are some data points from this data set:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "keep_output": true + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeAAAABvCAYAAAA0RRMsAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAC7NJREFUeJzt3X9oldUfwPH3bEtDaqO5SpYRGTVKMCxDCpaRs18qRj+QKcsKUxdSwgjL0iR/tYp+/RNZVlhWUIZRRKwwIiPBlUmxrVxkac7KylZj2bb7/eNyn2Zfnb92n/Ps3vcLLtw9u8/O2eHc+7nn85xznoJUKoUkSYrXoNAVkCQpHxmAJUkKwAAsSVIABmBJkgIwAEuSFIABWJKkAAzAkiQFYACWJCkAA7AkSQEUxllYQUGB224doVQqVXC059reR+5Y2hts86NhH4+X7R2vvtrbEbAkSQEYgCVJCsAALElSAAZgSZICiHUSlnSkRo0aBcDkyZMZOXJk9Hzp0qUAPPXUU8HqJknHoiDO+wE7g+7I5fOMxdmzZ/PYY48BMHjw4P1+t3PnTgDOOOOMfi3TWdDxy+c+HoLtHS9nQUuSlDCOgBMuH7+trl69GoCpU6dSXFx8wNd0d3cD8O233wJQUVHRL2U7Ao5fPvbxkGzvePXV3gbghMu3N0tRURF///03AP/tmx9++CEA48ePj461t7cDUFJS0i/lG4Djl299vLdZs2Zx/vnnA3DXXXfFUmY+t3cIpqAlSUoYZ0EruBNOOIElS5YAMG3atOj47t27ue666wDYtGlTdDyTfgb44YcfYqql1H9WrFgBwMyZMykrKwPgu+++4/HHHw9ZLcXMFHTC5UO6qLKykg0bNkQ/t7S0AFBTU8PmzZuj40OHDgXgjz/+oKurC0h/gAG88sor/VIXU9Dxy4c+3lthYeEBL7NUVFSwbdu2rJefb+0dmiloSZISxhFwwuXyt9UFCxYAMGfOHEaMGBEdP+644w74+gkTJgDw3nvvuQ44h+RyH+9t3LhxAGzcuJFBg9Jjn56enuj3B+v3/S1f2jsp+mpvrwErmNraWgDKy8ujY3v37g1VHSmrPvvsMwCWLVvGwoULgXQKurGxMWS1FJApaEmSAnAErNhlZnqefvrpAOzZs4eqqioAtmzZcsjzBw0aREHBMWWKpdjt27cPgFWrVjFjxgwgfQklc1z5xwCsWD355JPMnTsX+HcG6Pr16w8r8GauofX09PDAAw9krY5SNj3yyCNs374dSAfgurq6wDVSKKagJUkKwBGwYpHZq3n69OnRDNDMns/z5s07rL8xefLk6LlpOw00mQzODTfcEL0HmpubaWtrC1ktBeQIWJKkABwBKxaZUW7vmyY88cQTAHR2dh7y/KqqKkaNGgWk74D01ltvZaGWUvZccMEFQHruQ2b97/XXXx9dD1YeSqVSsT2AlI8je+RCe5955pmp9vb2VHt7e6q7uzt6HMnfaGhoiM674447EtneSWrzgfTIh/aeNGlSqqOjI9XR0ZHq6upKjR49OjV69GjbOw8efbWnKWhJkgIwBa2smzhxIkOGDIl+/vHHHwEoLS0F0hOqMvf1hX8nbFVXV0c7BgF0dHQAsG7duqzXWepPO3bsYM+ePQAMHz6cL774InCNlATuBZ1wubJva+Z679y5c6M9bz///HMgvf3kjh07otfW1NQA+++T29nZyfr164F0YM4W94KOX6708b58//33+225Gte+zweSD+2dJN4NSZKkhHEEnHC59m21ubmZkSNHAkRrIf8rc7yzszO6b+q8efNYs2ZN1uvnCDh+udbHD2TNmjVMnDgRSF96KSwMd/UvH9o7SbwbkhKjoqKC22+/HYCTTz4ZgGHDhjF//vzoNffeey8AmzdvpqGhIf5KSv3s1Vdf5aKLLgJg165dgWujpDAFLUlSAKagE850UbxCpqC7u7sBmD17Ns8+++yxVGNAyZc+/vLLLwOwePFitm3bFqwe+dLeSdFXexuAE843S7ySEIBfe+21rM70Thr7eLxs73g5C1qSpIRxBHwIpaWlbN26FYDKykpaW1tjLd9vq/FKwggYwq4TjZt9PF62d7ycBX0MFi1axKpVqwBiD76SpNxlClqSpABMQR/E2WefDUBLS4vbxuURU9Dxs4/Hy/aOlynoo7Bo0aLQVZAk5TBT0JIkBTDgRsDjxo3j008/zWoZt912GzNmzADcNk6SlB2OgCVJCmDABODi4mKKi4t54YUXsl7WhAkTKCgooKCggKeffjrr5Um9ffDBB6GrICkGAyIFXVRUFK3FbWlpyXp51157bfT8999/z3p5Um9XXHFF6CpIisGAGQFLkpRLBsQ64F27dnHqqacCB7+Je39KpVL89ttvwL/3rA3FNXvxch3w/qqqqgCorq5m5syZQPr9AensUO/3R6bOPT09HMnnin08XrZ3vAbsOuCTTjoJSN+wPXMrrzj09PTw8MMPx1aeBEQz71966SX++usvAO68806A2G5POGbMGObPnw9ASUkJ11xzDQAdHR38+uuvABQUpD9PiouL9zv3/fffB6C+vp533303lvpKA5kpaEmSAkjsCHjt2rVMmzYNgLKyMvbs2ZP1MqdMmRI9f+edd7JentTbvn37AOjq6mLIkCEArFixAsj+CHjMmDEALFmyhPvvvx+ALVu29HlORUUFFRUVAGzYsIH77rsPgIaGhizWVModibsG/OCDDwJQV1dHV1cXACeeeOIh/3ZZWRmQ/hDbu3fvEdUrc25jYyMAy5cvT8zyI6/XxCvkNeCQ6uvrAWhqauL5558/rHMKCwujuRJNTU1cfPHFR1W2fTxetne8+mpvU9CSJAWQuBR0ZtIJwI033nhY5zzzzDNMnToVgD///JO7774bgNdff/2wzh8/fjwA5eXlANGaYylfZLJG9fX1XHbZZQAsWLCAtra2g56zevVqvvrqKwAmTZqU/UpKOSYRKehhw4YBsHHjxmjjiylTprB79+7/e+1ZZ53FQw89BMCVV14JQGlpKf/88w8AK1euZM6cOUB6FuehDB8+nHXr1gFEKbSkLAEB00Vxy9cUdMbQoUOjL7AzZsyIlhl98sknnHPOOUD6PQjwxhtvcNNNNx1zmfbxeNne8TIFLUlSwiRiBFxXVwek01+ZCVeZdZAZhYXpbHlra2s0Mq6pqQGgubmZwYMHA/DLL7+wdOlSgGik3Jerr76at99+e79jjoDzV76PgHs77bTT2LlzZ/RzZv1vZk3+LbfcEk2UPBb28XjZ3vFK/EYcmRmYjz766P8FXkjPjM6kxUpKSjjvvPMAmDVrFgC1tbU0NTVFv++9o9ChHH/88dHz2trao/sHpBzU1tYWLcebNGkSl1xyCUDWbwcq5QtT0JIkBZCIFPT27dsBGDt2LD/99FN0PLMVZWNjIyNHjgTS6ebM4v+MyspKPv7446zUOTTTRfEyBb2/TDbpm2++4Z577gHgzTff7Ncy7OPxsr3j5SQsSZISJhHXgEeMGAHApk2b+PLLL6PjY8eOBeCUU06JjpWXl3PrrbcC8PPPPwPk7OhXCiEz4bG2tpaPPvoIgJtvvpkLL7wwZLWknJOIAJwJsL3X7aZSKVpbW4F0gM7MaL700kuZPn06AIsXL465plJuq6ioiPZy/vrrr7n88suj3xmApf5lClqSpAASMQlLB+eEiXjl+ySs5557jquuugpIr5HfunUrAOeee260Dri5ublfy7SPx8v2jldf7W0ATjjfLPHK9wDc3d0dzXaur6/nxRdfBKC6upqioqKslGkfj5ftHS9nQUuSlDCOgBPOb6vxcgTcHa39bW9vjyZGrly5koULF2alTPt4vGzveCV+K0pJybB27Vqqq6uB9KqE5cuXA7Bs2bKQ1ZJykiloSZICMAWdcKaL4pXvKegQ7OPxsr3j5SQsSZISxgAsSVIABmBJkgIwAEuSFIABWJKkAAzAkiQFYACWJCkAA7AkSQHEuhGHJElKcwQsSVIABmBJkgIwAEuSFIABWJKkAAzAkiQFYACWJCkAA7AkSQEYgCVJCsAALElSAAZgSZICMABLkhSAAViSpAAMwJIkBWAAliQpAAOwJEkBGIAlSQrAACxJUgAGYEmSAjAAS5IUgAFYkqQADMCSJAVgAJYkKQADsCRJAfwPVUxC5Ncuf1kAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "inpath = '../../examples/air/.data'\n", + "X_np, _ = multi_mnist.load(inpath)\n", + "X_np = X_np.astype(np.float32)\n", + "X_np /= 255.0\n", + "mnist = torch.from_numpy(X_np)\n", + "def show_images(imgs):\n", + " figure(figsize=(8, 2))\n", + " for i, img in enumerate(imgs):\n", + " subplot(1, len(imgs), i + 1)\n", + " axis('off')\n", + " imshow(img.data.numpy(), cmap='gray')\n", + "show_images(mnist[9:14])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To get an idea where we're heading, we first give a brief overview of the model and the approach we'll take to inference. We'll follow the naming conventions used in [1] as closely as possible.\n", + "\n", + "AIR decomposes the process of generating an image into discrete steps, each of which generates only part of the image. More specifically, at each step the model will generate a small image (`y_att`) by passing a latent \"code\" variable (`z_what`) through a neural network. We'll refer to these small images as \"objects\". In the case of AIR applied to the multi-mnist dataset we expect each of these objects to represent a single digit. The model also includes uncertainty about the location and size of each object. We'll describe an object's location and size as its \"pose\" (`z_where`). To produce the final image, each object will first be located within a larger image (`y`) using the pose infomation `z_where`. Finally, the `y`s from all time steps will be combined additively to produce the final image `x`.\n", + "\n", + "Here's a picture (reproduced from [1]) that shows two steps of this process:" + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/html" + }, + "source": [ + "
\n", + "
\n", + "\n", + "
\n", + "Figure 1: Two steps of the generative process.\n", + "
\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Inference is performed in this model using [amortized stochastic variational inference](svi_part_ii.ipynb) (SVI). The parameters of the neural network are also optimized during inference. Performing inference in such rich models is always difficult, but the presence of discrete choices (the number of steps in this case) makes inference in this model particularly tricky. For this reason the authors use a technique called data dependent baselines to achieve good performance. This technique can be implemented in Pyro, and we'll see how later in the tutorial.\n", + "\n", + "## Model\n", + "\n", + "### Generating a single object\n", + "\n", + "Let's look at the model more closely. At the core of the model is the generative process for a single object. Recall that:\n", + "\n", + "* At each step a single object is generated.\n", + "* Each object is generated by passing its latent code through a neural network.\n", + "* We maintain uncertainty about the latent code used to generate each object, as well as its pose.\n", + "\n", + "This can be expressed in Pyro like so:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# Create the neural network. This takes a latent code, z_what, to pixel intensities.\n", + "class Decoder(nn.Module):\n", + " def __init__(self):\n", + " super().__init__()\n", + " self.l1 = nn.Linear(50, 200)\n", + " self.l2 = nn.Linear(200, 400)\n", + "\n", + " def forward(self, z_what):\n", + " h = relu(self.l1(z_what))\n", + " return sigmoid(self.l2(h))\n", + "\n", + "decode = Decoder()\n", + "\n", + "z_where_prior_loc = torch.tensor([3., 0., 0.])\n", + "z_where_prior_scale = torch.tensor([0.1, 1., 1.])\n", + "z_what_prior_loc = torch.zeros(50)\n", + "z_what_prior_scale = torch.ones(50)\n", + "\n", + "def prior_step_sketch(t):\n", + " # Sample object pose. This is a 3-dimensional vector representing x,y position and size.\n", + " z_where = pyro.sample('z_where_{}'.format(t),\n", + " dist.Normal(z_where_prior_loc.expand(1, -1),\n", + " z_where_prior_scale.expand(1, -1))\n", + " .to_event(1))\n", + "\n", + " # Sample object code. This is a 50-dimensional vector.\n", + " z_what = pyro.sample('z_what_{}'.format(t),\n", + " dist.Normal(z_what_prior_loc.expand(1, -1),\n", + " z_what_prior_scale.expand(1, -1))\n", + " .to_event(1))\n", + " \n", + " # Map code to pixel space using the neural network.\n", + " y_att = decode(z_what)\n", + "\n", + " # Position/scale object within larger image.\n", + " y = object_to_image(z_where, y_att)\n", + "\n", + " return y" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Hopefully the use of `pyro.sample` and PyTorch networks within a model seem familiar at this point. If not you might want to review the [VAE tutorial](vae.ipynb). One thing to note is that we include the current step `t` in the name passed to `pyro.sample` to ensure that names are unique across steps.\n", + "\n", + "The `object_to_image` function is specific to this model and warrants further attention. Recall that the neural network (`decode` here) will output a small image, and that we would like to add this to the output image after performing any translation and scaling required to achieve the pose (location and size) described by `z_where`. It's not clear how to do this, and in particular it's not obvious that this can be implemented in a way that preserves the differentiability of our model, which we require in order to perform [SVI](svi_part_i.ipynb). However, it turns out we can do this this using a spatial transformer network (STN) [2].\n", + "\n", + "Happily for us, PyTorch makes it easy to implement a STN using its [grid_sample](http://pytorch.org/docs/master/nn.html#grid-sample) and [affine_grid](http://pytorch.org/docs/master/nn.html#affine-grid) functions. `object_to_image` is a simple function that calls these, doing a little extra work to massage `z_where` into the expected format." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "def expand_z_where(z_where):\n", + " # Takes 3-dimensional vectors, and massages them into 2x3 matrices with elements like so:\n", + " # [s,x,y] -> [[s,0,x],\n", + " # [0,s,y]]\n", + " n = z_where.size(0)\n", + " expansion_indices = torch.LongTensor([1, 0, 2, 0, 1, 3])\n", + " out = torch.cat((torch.zeros([1, 1]).expand(n, 1), z_where), 1)\n", + " return torch.index_select(out, 1, expansion_indices).view(n, 2, 3)\n", + "\n", + "def object_to_image(z_where, obj):\n", + " n = obj.size(0)\n", + " theta = expand_z_where(z_where)\n", + " grid = affine_grid(theta, torch.Size((n, 1, 50, 50)))\n", + " out = grid_sample(obj.view(n, 1, 20, 20), grid)\n", + " return out.view(n, 50, 50)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A discussion of the details of the STN is beyond the scope of this tutorial. For our purposes however, it suffices to keep in mind that `object_to_image` takes the small image generated by the neural network and places it within a larger image with the desired pose.\n", + "\n", + "Let's visualize the results of calling `prior_step_sketch` a few times to clarify this:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "keep_output": true + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pyro.set_rng_seed(0)\n", + "samples = [prior_step_sketch(0)[0] for _ in range(5)]\n", + "show_images(samples)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Generating an entire image\n", + "\n", + "Having completed the implementation of a single step, we next consider how we can use this to generate an entire image. Recall that we would like to maintain uncertainty over the number of steps used to generate each data point. One choice we could make for the prior over the number of steps is the geometric distribution, which can be expressed as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "keep_output": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sampled 2\n", + "sampled 3\n", + "sampled 0\n", + "sampled 1\n", + "sampled 0\n" + ] + } + ], + "source": [ + "pyro.set_rng_seed(0)\n", + "def geom(num_trials=0):\n", + " p = torch.tensor([0.5])\n", + " x = pyro.sample('x{}'.format(num_trials), dist.Bernoulli(p))\n", + " if x[0] == 1:\n", + " return num_trials\n", + " else:\n", + " return geom(num_trials + 1)\n", + "\n", + "# Generate some samples.\n", + "for _ in range(5):\n", + " print('sampled {}'.format(geom()))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is a direct translation of the definition of the geometric distribution as the number of failures before a success in a series of Bernoulli trials. Here we express this as a recursive function that passes around a counter representing the number of trials made, `num_trials`. This function samples from the Bernoulli and returns `num_trials` if `x == 1` (which represents success), otherwise it makes a recursive call, incrementing the counter.\n", + "\n", + "The use of a geometric prior is appealing because it does not bound the number of steps the model can use a priori. It's also convenient, because by extending `geometric` to generate an object before each recursive call, we turn this from a geometric distribution over counts to a distribution over images with a geometrically distributed number of steps." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "def geom_prior(x, step=0):\n", + " p = torch.tensor([0.5])\n", + " i = pyro.sample('i{}'.format(step), dist.Bernoulli(p))\n", + " if i[0] == 1:\n", + " return x\n", + " else: \n", + " x = x + prior_step_sketch(step)\n", + " return geom_prior(x, step + 1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's visualize some samples from this distribution:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "keep_output": true + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pyro.set_rng_seed(4)\n", + "x_empty = torch.zeros(1, 50, 50)\n", + "samples = [geom_prior(x_empty)[0] for _ in range(5)]\n", + "show_images(samples)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Aside: Vectorized mini-batches\n", + "\n", + "In our final implementation we would like to generate a mini batch of samples in parallel for efficiency. While Pyro supports vectorized mini batches with `plate`, it currently requires that each `sample` statement within `plate` makes a choice for all samples in the mini batch. Another way to say this is that each sample in the mini batch will encounter the same set of `sample` statements. This is problematic for us, because as we've just seen, samples can make differing numbers of choices under our model.\n", + "\n", + "One way around this is to have all samples take the same number of steps, but to nullify (so far as is possible) the effect of the superfuous random choices made after the sample is conceptually \"complete\". We'll say that a sample is \"complete\" once a zero is sampled from the Bernoulli random choice, and prior to that we'll say that a sample is \"active\".\n", + "\n", + "The first part of this is straight forward. Following [1] we choose to take a fixed number of steps for each sample. (By doing so we no longer specify a geometric distribution over the number of steps, since the number of steps is now bounded. It would be interesting to explore the alternative of having each sample in the batch take steps until a successful Bernoulli trial has occured in each, as this would retain the geometric prior.)\n", + "\n", + "To address the second part we will take the following steps:\n", + "\n", + "1. Only add objects to the output while a sample is active.\n", + "2. Set the log probability of random choices made by complete samples to zero. (Since the [SVI loss](svi_part_iii.ipynb) is a weighted sum of log probabilities, setting a choice's log probability to zero effectively removes its contribution to the loss.) This is achieved using the `mask()` method of distributions.\n", + "\n", + "(Looking ahead, we'll need to take similar measures when we implement the guide and add baselines later in this tutorial.)\n", + "\n", + "Of course, one thing we can't undo is the work done in performing unncessary sampling. Nevertheless, even though this approach performs redundant computation, the gains from using mini batches are so large that this is still a win overall.\n", + "\n", + "Here's an updated model step function that implements these ideas. In summary, the changes from `prior_step_sketch` are:\n", + "\n", + "1. We've added a new parameter `n` that specifies the size of the mini batch.\n", + "2. We now conditionally add the object to the output image based on a value sampled from a Bernoulli distribution.\n", + "3. We use `mask()` to zero out the log probability of random choices made by complete samples." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "def prior_step(n, t, prev_x, prev_z_pres):\n", + "\n", + " # Sample variable indicating whether to add this object to the output.\n", + "\n", + " # We multiply the success probability of 0.5 by the value sampled for this\n", + " # choice in the previous step. By doing so we add objects to the output until\n", + " # the first 0 is sampled, after which we add no further objects.\n", + " z_pres = pyro.sample('z_pres_{}'.format(t), \n", + " dist.Bernoulli(0.5 * prev_z_pres)\n", + " .to_event(1))\n", + " \n", + " z_where = pyro.sample('z_where_{}'.format(t),\n", + " dist.Normal(z_where_prior_loc.expand(n, -1),\n", + " z_where_prior_scale.expand(n, -1))\n", + " .mask(z_pres)\n", + " .to_event(1))\n", + "\n", + " z_what = pyro.sample('z_what_{}'.format(t),\n", + " dist.Normal(z_what_prior_loc.expand(n, -1),\n", + " z_what_prior_scale.expand(n, -1))\n", + " .mask(z_pres)\n", + " .to_event(1))\n", + "\n", + " y_att = decode(z_what)\n", + " y = object_to_image(z_where, y_att)\n", + "\n", + " # Combine the image generated at this step with the image so far.\n", + " x = prev_x + y * z_pres.view(-1, 1, 1)\n", + "\n", + " return x, z_pres" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By iterating this step function we can produce an entire image, composed of multiple objects. Since each image in the multi-mnist dataset contains zero, one or two digits we will allow the model to use up to (and including) three steps. In this way we ensure that inference has to avoid using one or more steps in order to correctly count the number of objects in the input." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "def prior(n):\n", + " x = torch.zeros(n, 50, 50)\n", + " z_pres = torch.ones(n, 1)\n", + " for t in range(3):\n", + " x, z_pres = prior_step(n, t, x, z_pres)\n", + " return x" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have now fully specified the prior for our model. Let's visualize some samples to get a feel for this distribution:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "keep_output": true + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pyro.set_rng_seed(121)\n", + "show_images(prior(5))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Specifying the likelihood\n", + "\n", + "The last thing we need in order to complete the specification of the model is a likelihood function. Following [1] we will use a Gaussian likelihood with a fixed standard deviation of 0.3. This is straight forward to implement with `pyro.sample` using the `obs` argument.\n", + "\n", + "When we later come to perform inference we will find it convenient to package the prior and likelihood into a single function. This is also a convenient place to introduce `plate`, which we use to implement data subsampling, and to register the networks we would like to optimize with `pyro.module`." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "def model(data):\n", + " # Register network for optimization.\n", + " pyro.module(\"decode\", decode)\n", + " with pyro.plate('data', data.size(0)) as indices:\n", + " batch = data[indices]\n", + " x = prior(batch.size(0)).view(-1, 50 * 50)\n", + " sd = (0.3 * torch.ones(1)).expand_as(x)\n", + " pyro.sample('obs', dist.Normal(x, sd).to_event(1),\n", + " obs=batch)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Guide\n", + "\n", + "Following [1] we will perform [amortized stochastic variational inference](svi_part_i.ipynb) in this model. Pyro provides general purpose machinery that implements most of this inference strategy, but as we have seen in earlier tutorials we are required to provide a model specific guide. What we call a guide in Pyro is exactly the entity called the \"inference network\" in the paper.\n", + "\n", + "We will structure the guide around a recurrent network to allow the guide to capture (some of) the dependencies we expect to be present in the true posterior. At each step the recurrent network will generate the parameters for the choices made within the step. The values sampled will be fed back into the recurrent network so that this information can be used when computing the parameters for the next step. The guide for the [Deep Markov Model](dmm.ipynb) shares a similar structure.\n", + "\n", + "As in the model, the core of the guide is the logic for a single step. Here's a sketch of an implementation of this:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "def guide_step_basic(t, data, prev):\n", + "\n", + " # The RNN takes the images and choices from the previous step as input.\n", + " rnn_input = torch.cat((data, prev.z_where, prev.z_what, prev.z_pres), 1)\n", + " h, c = rnn(rnn_input, (prev.h, prev.c))\n", + "\n", + " # Compute parameters for all choices made this step, by passing\n", + " # the RNN hidden state through another neural network.\n", + " z_pres_p, z_where_loc, z_where_scale, z_what_loc, z_what_scale = predict_basic(h)\n", + "\n", + " z_pres = pyro.sample('z_pres_{}'.format(t),\n", + " dist.Bernoulli(z_pres_p * prev.z_pres))\n", + "\n", + " z_where = pyro.sample('z_where_{}'.format(t),\n", + " dist.Normal(z_where_loc, z_where_scale))\n", + "\n", + " z_what = pyro.sample('z_what_{}'.format(t),\n", + " dist.Normal(z_what_loc, z_what_scale))\n", + "\n", + " return # values for next step" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This would be a reasonable guide to use with this model, but the paper describes a crucial improvement we can make to the code above. Recall that the guide will output information about an object's pose and its latent code at each step. The improvement we can make is based on the observation that once we have inferred the pose of an object, we can do a better job of inferring its latent code if we use the pose information to crop the object from the input image, and pass the result (which we'll call a \"window\") through an additional network in order to compute the parameters of the latent code. We'll call this additional network the \"encoder\" below.\n", + "\n", + "Here's how we can implement this improved guide, and a fleshed out implementation of the networks involved:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "rnn = nn.LSTMCell(2554, 256)\n", + "\n", + "# Takes pixel intensities of the attention window to parameters (mean,\n", + "# standard deviation) of the distribution over the latent code,\n", + "# z_what.\n", + "class Encoder(nn.Module):\n", + " def __init__(self):\n", + " super().__init__()\n", + " self.l1 = nn.Linear(400, 200)\n", + " self.l2 = nn.Linear(200, 100)\n", + "\n", + " def forward(self, data):\n", + " h = relu(self.l1(data))\n", + " a = self.l2(h)\n", + " return a[:, 0:50], softplus(a[:, 50:])\n", + "\n", + "encode = Encoder()\n", + "\n", + "# Takes the guide RNN hidden state to parameters of\n", + "# the guide distributions over z_where and z_pres.\n", + "class Predict(nn.Module):\n", + " def __init__(self, ):\n", + " super().__init__()\n", + " self.l = nn.Linear(256, 7)\n", + "\n", + " def forward(self, h):\n", + " a = self.l(h)\n", + " z_pres_p = sigmoid(a[:, 0:1]) # Squish to [0,1]\n", + " z_where_loc = a[:, 1:4]\n", + " z_where_scale = softplus(a[:, 4:]) # Squish to >0\n", + " return z_pres_p, z_where_loc, z_where_scale\n", + "\n", + "predict = Predict()\n", + "\n", + "def guide_step_improved(t, data, prev):\n", + "\n", + " rnn_input = torch.cat((data, prev.z_where, prev.z_what, prev.z_pres), 1)\n", + " h, c = rnn(rnn_input, (prev.h, prev.c))\n", + " z_pres_p, z_where_loc, z_where_scale = predict(h)\n", + "\n", + " z_pres = pyro.sample('z_pres_{}'.format(t),\n", + " dist.Bernoulli(z_pres_p * prev.z_pres)\n", + " .to_event(1))\n", + "\n", + " z_where = pyro.sample('z_where_{}'.format(t),\n", + " dist.Normal(z_where_loc, z_where_scale)\n", + " .to_event(1))\n", + "\n", + " # New. Crop a small window from the input.\n", + " x_att = image_to_object(z_where, data)\n", + "\n", + " # Compute the parameter of the distribution over z_what\n", + " # by passing the window through the encoder network.\n", + " z_what_loc, z_what_scale = encode(x_att)\n", + "\n", + " z_what = pyro.sample('z_what_{}'.format(t),\n", + " dist.Normal(z_what_loc, z_what_scale)\n", + " .to_event(1))\n", + "\n", + " return # values for next step" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since we would like to maintain differentiability of the guide we again use a STN to perform the required \"cropping\". The `image_to_object` function performs the opposite transform to the object_to_image function used in the guide. That is, the former takes a small image and places it on a larger image, and the latter crops a small image from a larger image." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "def z_where_inv(z_where):\n", + " # Take a batch of z_where vectors, and compute their \"inverse\".\n", + " # That is, for each row compute:\n", + " # [s,x,y] -> [1/s,-x/s,-y/s]\n", + " # These are the parameters required to perform the inverse of the\n", + " # spatial transform performed in the generative model.\n", + " n = z_where.size(0)\n", + " out = torch.cat((torch.ones([1, 1]).type_as(z_where).expand(n, 1), -z_where[:, 1:]), 1)\n", + " out = out / z_where[:, 0:1]\n", + " return out\n", + "\n", + "def image_to_object(z_where, image):\n", + " n = image.size(0)\n", + " theta_inv = expand_z_where(z_where_inv(z_where))\n", + " grid = affine_grid(theta_inv, torch.Size((n, 1, 20, 20)))\n", + " out = grid_sample(image.view(n, 1, 50, 50), grid)\n", + " return out.view(n, -1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Another perspective\n", + "\n", + "So far we've considered the model and the guide in isolation, but we gain an interesting perspective if we zoom out and look at the model and guide computation as a whole. Doing so, we see that at each step AIR includes a sub-computation that has the same structure as a [Variational Auto-encoder](vae.ipynb) (VAE).\n", + "\n", + "To see this, notice that the guide passes the window through a neural network (the encoder) to generate the parameters of the distribution over a latent code, and the model passes samples from this latent code distribution through another neural network (the decoder) to generate an output window. This structure is highlighted in the following figure, reproduced from [1]:" + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/html" + }, + "source": [ + "
\n", + "
\n", + "\n", + "
\n", + "Figure 2: Interaction between the guide and model at each step.\n", + "
\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From this perspective AIR is seen as a sequential variant of the VAE. The act of cropping a small window from the input image serves to restrict the attention of a VAE to a small region of the input image at each step; hence \"Attend, Infer, Repeat\".\n", + "\n", + "## Inference\n", + "\n", + "As we mentioned in the introduction, successfully performing inference in this model is a challenge. In particular, the presence of discrete choices in the model makes inference trickier than in a model in which all choices can be reparameterized. The underlying problem we face is that the gradient estimates we use in the optimization performed by variational inference have much higher variance in the presence of [non-reparameterizable choices](svi_part_iii.ipynb#Tricky-Case:-Non-reparameterizable-Random-Variables).\n", + "\n", + "To bring this variance under control, the paper applies a technique called \"data dependent baselines\" (AKA \"neural baselines\") to the discrete choices in the model.\n", + "\n", + "### Data dependent baselines\n", + "\n", + "Happily for us, Pyro includes support for data dependent baselines. If you are not already familiar with this idea, you might want to read [our introduction](svi_part_iii.ipynb#Baselines-in-Pyro) before continuing. As model authors we only have to implement the neural network, pass it our data as input, and feed its output to `pyro.sample`. Pyro's inference back-end will ensure that the baseline is included in the gradient estimator used for inference, and that the network parameters are updated appropriately.\n", + "\n", + "Let's see how we can add data dependent baselines to our AIR implementation. We need a neural network that can output a (scalar) baseline value at each discrete choice in the guide, having received a multi-mnist image and the values sampled by the guide so far as input. Notice that this is very similar to the structure of the guide network, and indeed we will again use a recurrent network.\n", + "\n", + "To implement this we will first write a short helper function that implements a single step of the RNN we've just described:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "bl_rnn = nn.LSTMCell(2554, 256)\n", + "bl_predict = nn.Linear(256, 1)\n", + "\n", + "# Use an RNN to compute the baseline value. This network takes the\n", + "# input images and the values samples so far as input.\n", + "def baseline_step(x, prev):\n", + " rnn_input = torch.cat((x,\n", + " prev.z_where.detach(),\n", + " prev.z_what.detach(),\n", + " prev.z_pres.detach()), 1)\n", + " bl_h, bl_c = bl_rnn(rnn_input, (prev.bl_h, prev.bl_c))\n", + " bl_value = bl_predict(bl_h) * prev.z_pres\n", + " return bl_value, bl_h, bl_c" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are two important details to highlight here:\n", + "\n", + "First, we `detach` values sampled by the guide before passing them to the baseline network. This is important as the baseline network and the guide network are entirely separate networks optimized with different objectives. Without this, gradients would flow from the baseline network into the guide network. When using data dependent baselines we must do this whenever we feed values sampled by the guide into the baselines network. (If we don't we'll trigger a PyTorch run-time error.)\n", + "\n", + "Second, we multiply the output of the baseline network by the value of `z_pres` from the previous step. This relieves the baseline network from the burdon of having to output accurate predictions for completed samples. (The outputs for completed samples will be multiplied by zero, so the derivative of the [baseline loss](svi_part_iii.ipynb#Neural-Baselines) for these outputs will be zero.) It's OK to do this because in effect we've already removed random choices for completed samples from the inference objective, so there's no need to apply any variance reduction to them.\n", + "\n", + "We now have everything we need to complete the implementation of the guide. Our final `guide_step` function will be very similar to `guide_step_improved` introduced above. The only changes are:\n", + "\n", + "1. We now call the `baseline_step` helper and pass the baseline value it returns to `pyro.sample`.\n", + "2. We now mask out the `z_where` and `z_what` choices for complete sample. This serves exactly the same purpose as the masks added to the model. (See the earlier discussion for the motivation behind this change.)\n", + "\n", + "We'll also write a `guide` function that will iterate `guide_step` in order to provide a guide for the whole model." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "GuideState = namedtuple('GuideState', ['h', 'c', 'bl_h', 'bl_c', 'z_pres', 'z_where', 'z_what'])\n", + "def initial_guide_state(n):\n", + " return GuideState(h=torch.zeros(n, 256),\n", + " c=torch.zeros(n, 256),\n", + " bl_h=torch.zeros(n, 256),\n", + " bl_c=torch.zeros(n, 256),\n", + " z_pres=torch.ones(n, 1),\n", + " z_where=torch.zeros(n, 3),\n", + " z_what=torch.zeros(n, 50))\n", + "\n", + "def guide_step(t, data, prev):\n", + "\n", + " rnn_input = torch.cat((data, prev.z_where, prev.z_what, prev.z_pres), 1)\n", + " h, c = rnn(rnn_input, (prev.h, prev.c))\n", + " z_pres_p, z_where_loc, z_where_scale = predict(h)\n", + "\n", + " # Here we compute the baseline value, and pass it to sample.\n", + " baseline_value, bl_h, bl_c = baseline_step(data, prev)\n", + " z_pres = pyro.sample('z_pres_{}'.format(t),\n", + " dist.Bernoulli(z_pres_p * prev.z_pres)\n", + " .to_event(1),\n", + " infer=dict(baseline=dict(baseline_value=baseline_value.squeeze(-1))))\n", + "\n", + " z_where = pyro.sample('z_where_{}'.format(t),\n", + " dist.Normal(z_where_loc, z_where_scale)\n", + " .mask(z_pres)\n", + " .to_event(1))\n", + " \n", + " x_att = image_to_object(z_where, data)\n", + "\n", + " z_what_loc, z_what_scale = encode(x_att)\n", + "\n", + " z_what = pyro.sample('z_what_{}'.format(t),\n", + " dist.Normal(z_what_loc, z_what_scale)\n", + " .mask(z_pres)\n", + " .to_event(1))\n", + "\n", + " return GuideState(h=h, c=c, bl_h=bl_h, bl_c=bl_c, z_pres=z_pres, z_where=z_where, z_what=z_what)\n", + "\n", + "def guide(data):\n", + " # Register networks for optimization.\n", + " pyro.module('rnn', rnn),\n", + " pyro.module('predict', predict),\n", + " pyro.module('encode', encode),\n", + " pyro.module('bl_rnn', bl_rnn)\n", + " pyro.module('bl_predict', bl_predict)\n", + "\n", + " with pyro.plate('data', data.size(0), subsample_size=64) as indices:\n", + " batch = data[indices]\n", + " state = initial_guide_state(batch.size(0))\n", + " steps = []\n", + " for t in range(3):\n", + " state = guide_step(t, batch, state)\n", + " steps.append(state)\n", + " return steps" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Putting it all together\n", + "\n", + "We have now completed the implementation of the model and the guide. As we have seen in earlier tutorials, we need write only a few more lines of code to begin performing inference:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "i=0, elbo=2806.79\n", + "i=1, elbo=3656.81\n", + "i=2, elbo=3222.37\n", + "i=3, elbo=3872.77\n", + "i=4, elbo=2818.27\n" + ] + } + ], + "source": [ + "data = mnist.view(-1, 50 * 50)\n", + "\n", + "svi = SVI(model,\n", + " guide,\n", + " optim.Adam({'lr': 1e-4}),\n", + " loss=TraceGraph_ELBO())\n", + "\n", + "for i in range(5):\n", + " loss = svi.step(data)\n", + " print('i={}, elbo={:.2f}'.format(i, loss / data.size(0)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One key detail here is that we use a `TraceGraph_ELBO` loss rather than a simpler `Trace_ELBO`. This indicates that we wish to use the gradient estimator that supports data dependent baselines. This estimator also [reduces the variance](svi_part_iii.ipynb#Reducing-Variance-via-Dependency-Structure) of gradient estimates by making use of independence information included in the model. Something similar is implicity used in [1], and is necessary in order to achieve good results on this model.\n", + "\n", + "## Results\n", + "\n", + "To sanity check our implementation we ran inference using our [standalone implementation](https://github.com/pyro-ppl/pyro/tree/dev/examples/air) and compared its performance against some of the results reported in [1].\n", + "\n", + "Here we show progress made on the ELBO and training set count accuracy during optimization:" + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/html" + }, + "source": [ + "
\n", + "
\n", + "
\n", + "
\n", + "
Figure 3: Left: Progress on the evidence lower bound (ELBO) during optimization. Right: Progress on training set count accuracy during optimization.
\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Count accuracy reached around 98.7%, which is in the same ballpark as the count accuracy reported in [1]. The value reached on the ELBO differs a little from that reported in [1], which may be due to small differences in the priors used.\n", + "\n", + "In the next figure the top row shows ten data points from the test set. The bottom row is a visualization of a single sample from the guide for each of these inputs, that shows the values sampled for `z_pres` and `z_where`. Following [1], the first, second and third steps are displayed using red, green and blue borders respectively. (No blue borders are shown as the guide did not use three steps for any of these samples.) It also shows reconstructions of the input obtained by passing the latent variables sampled from the guide back through the model to generate an output image." + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/html" + }, + "source": [ + "
\n", + "
\n", + "\n", + "
Figure 4: Top row: Data points from the multi-mnist test set. Bottom row: Visualization of samples from the guide and the model's reconstruction of the inputs.
\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These results were collected using the following parameters:\n", + "\n", + "```\n", + "python main.py -n 200000 -blr 0.1 --z-pres-prior 0.01 --scale-prior-sd 0.2 --predict-net 200 --bl-predict-net 200 --decoder-output-use-sigmoid --decoder-output-bias -2 --seed 287710\n", + "```\n", + "\n", + "We used Pyro commit `c0b38ad` with PyTorch `0.2.0.post4`. Inference ran for approximately 4 hours on an NVIDIA K80 GPU. (Note that even though we set the random seed, this isn't sufficient to make inference deterministic when using CUDA.)\n", + "\n", + "## In practice\n", + "\n", + "We found it important to pay attention to the following details in order to achieve good results with AIR.\n", + "\n", + "* Inference is unlikely to recover correct object counts unless a small prior success probability for `z_pres` is used. In [1] this [probability was annealed](http://akosiorek.github.io/ml/2017/09/03/implementing-air.html) from a value close to one to `1e-5` (or less) during optimization, though we found that a fixed value of around `0.01` worked well with our implementation.\n", + "* We initialize the decoder network to generate mostly empty objects initially. (Using the `--decoder-output-bias` argument.) This encourages the guide to explore the use of objects to explain the input early in optimization. Without this each object is a mid-gray square which is heavily penalized by the likelihood, prompting the guide to turn most steps off.\n", + "* It is reported to be useful in practice to use a different learning rate for the baseline network. This is straight forward to implement in Pyro by tagging modules associated with the baseline network and passing multiple learning rates to the optimizer. (See the section on [optimizers](svi_part_i.ipynb#Optimizers) in part I of the SVI tutorial for more detail.) In [1] a learning rate of `1e-4` was used for the guide network, and a learning rate of `1e-3` was used for the baseline network. We found it necessary to use a larger learning rate for the baseline network in order to make progress on count accuracy at a similar rate to [1]. This difference is likely caused by Pyro setting up a [slightly different baseline loss](https://github.com/pyro-ppl/pyro/issues/555).\n", + "\n", + "\n", + "## References\n", + "\n", + "[1] `Attend, Infer, Repeat: Fast Scene Understanding with Generative Models`\n", + "
    \n", + "S. M. Ali Eslami and Nicolas Heess and Theophane Weber and Yuval Tassa and Koray Kavukcuoglu and Geoffrey E. Hinton\n", + "\n", + "[2] `Spatial Transformer Networks`\n", + "
    \n", + "Max Jaderberg and Karen Simonyan and Andrew Zisserman" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/autoname_examples.rst b/pyro/source/tutorial/source/autoname_examples.rst new file mode 100644 index 0000000000000000000000000000000000000000..f4a211739ef30d851d8c20fa3350e9528fbbc9bc --- /dev/null +++ b/pyro/source/tutorial/source/autoname_examples.rst @@ -0,0 +1,29 @@ +Example: reducing boilerplate with ``pyro.contrib.autoname`` +============================================================ + +`View on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/examples/contrib/autoname/ + +__ github_ + + +Mixture +-------- + +.. literalinclude:: ../../examples/contrib/autoname/mixture.py + :language: python + + +Scoping +------- + +.. literalinclude:: ../../examples/contrib/autoname/scoping_mixture.py + :language: python + + +Autoname and tree-structured data +---------------------------------- + +.. literalinclude:: ../../examples/contrib/autoname/tree_data.py + :language: python diff --git a/pyro/source/tutorial/source/baseball.rst b/pyro/source/tutorial/source/baseball.rst new file mode 100644 index 0000000000000000000000000000000000000000..14be58bfb70d55a67a9de777159550ea8f3857a1 --- /dev/null +++ b/pyro/source/tutorial/source/baseball.rst @@ -0,0 +1,11 @@ +Example: analyzing baseball stats with MCMC +======================================================= + +`View baseball.py on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/examples/baseball.py + +__ github_ + +.. literalinclude:: ../../examples/baseball.py + :language: python diff --git a/pyro/source/tutorial/source/bayesian_regression.ipynb b/pyro/source/tutorial/source/bayesian_regression.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..296f865b53e24b34ca79720fd55b23f8ca119645 --- /dev/null +++ b/pyro/source/tutorial/source/bayesian_regression.ipynb @@ -0,0 +1,888 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Bayesian Regression - Introduction (Part 1)\n", + "\n", + "Regression is one of the most common and basic supervised learning tasks in machine learning. Suppose we're given a dataset $\\mathcal{D}$ of the form\n", + "\n", + "$$ \\mathcal{D} = \\{ (X_i, y_i) \\} \\qquad \\text{for}\\qquad i=1,2,...,N$$\n", + "\n", + "The goal of linear regression is to fit a function to the data of the form:\n", + "\n", + "$$ y = w X + b + \\epsilon $$\n", + "\n", + "where $w$ and $b$ are learnable parameters and $\\epsilon$ represents observation noise. Specifically $w$ is a matrix of weights and $b$ is a bias vector.\n", + "\n", + "In this tutorial, we will first implement linear regression in PyTorch and learn point estimates for the parameters $w$ and $b$. Then we will see how to incorporate uncertainty into our estimates by using Pyro to implement Bayesian regression. Additionally, we will learn how to use the Pyro's utility functions to do predictions and serve our model using `TorchScript`.\n", + "\n", + "## Tutorial Outline\n", + "\n", + " - [Setup](#Setup)\n", + " - [Dataset](#Dataset)\n", + " - [Linear Regression](#Linear-Regression)\n", + " - [Training with PyTorch Optimizers](#Training-with-PyTorch-Optimizers)\n", + " - [Regression Fit](#Plotting-the-Regression-Fit)\n", + " - [Bayesian Regression with Pyro's SVI](#Bayesian-Regression-with-Pyro's-Stochastic-Variational-Inference-%28SVI%29)\n", + " - [Model](#Model)\n", + " - [Using an AutoGuide](#Using-an-AutoGuide)\n", + " - [Optimizing the Evidence Lower Bound](#Optimizing-the-Evidence-Lower-Bound)\n", + " - [Model Evaluation](#Model-Evaluation)\n", + " - [Serving the Model using TorchScript](#Model-Serving-via-TorchScript)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setup\n", + "Let's begin by importing the modules we'll need." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "%reset -s -f" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from functools import partial\n", + "import torch\n", + "import numpy as np\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "\n", + "# for CI testing\n", + "smoke_test = ('CI' in os.environ)\n", + "assert pyro.__version__.startswith('1.9.1')\n", + "pyro.set_rng_seed(1)\n", + "\n", + "\n", + "# Set matplotlib settings\n", + "%matplotlib inline\n", + "plt.style.use('default')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Dataset \n", + "\n", + "The following example is adapted from \\[1\\]. We would like to explore the relationship between topographic heterogeneity of a nation as measured by the Terrain Ruggedness Index (variable *rugged* in the dataset) and its GDP per capita. In particular, it was noted by the authors in \\[2\\] that terrain ruggedness or bad geography is related to poorer economic performance outside of Africa, but rugged terrains have had a reverse effect on income for African nations. Let us look at the data and investigate this relationship. We will be focusing on three features from the dataset:\n", + "\n", + " - `rugged`: quantifies the Terrain Ruggedness Index\n", + " - `cont_africa`: whether the given nation is in Africa\n", + " - `rgdppc_2000`: Real GDP per capita for the year 2000\n", + " \n", + "The response variable GDP is highly skewed, so we will log-transform it." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "DATA_URL = \"https://github.com/pyro-ppl/datasets/blob/master/rugged_data.csv?raw=true\"\n", + "data = pd.read_csv(DATA_URL, encoding=\"ISO-8859-1\")\n", + "df = data[[\"cont_africa\", \"rugged\", \"rgdppc_2000\"]]\n", + "df = df[np.isfinite(df.rgdppc_2000)]\n", + "df[\"rgdppc_2000\"] = np.log(df[\"rgdppc_2000\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+gAAAIjCAYAAACQ+zEnAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3Xl8lNX5///3TCYbCQkQI4tiQgLi0rJXISqLwNcF0GoVxYVNlAKVIGitShFRStVWRWsApQUqWNsqrigYgeACLqhoReQHIVitgrKGkJDJZOb3B58ZEzJJ7klmue+Z1/Px4PH5ZO7bmZOZac65zrnOdWwej8cjAAAAAAAQUfZINwAAAAAAABCgAwAAAABgCgToAAAAAACYAAE6AAAAAAAmQIAOAAAAAIAJEKADAAAAAGACBOgAAAAAAJgAAToAAAAAACZAgA4AAAAAgAkQoAMW9Mwzz+iMM85QfHy8WrVq1ej92dnZGjt2bOgbZhG7d++WzWbT0qVLI90UAECUKCsr04QJE9SuXTvZbDZNmzatwfuLiopks9lUVFQUngZawOzZs2Wz2SLdDCCiCNARM5YuXSqbzaakpCT973//q3N94MCB+tnPfhaBlv3k0KFDSkpKks1m07Zt2/ze89VXX2ns2LHKzc3V008/raeeeirMrQwu7wDFZrPp448/rnN97NixSk1NbdJzP/vss3rsscea20QAQIwrKCiQzWbTueeeW+89f/jDH7R06VJNmjRJzzzzjG688cYwtjD4xo4dK5vNpm7dusnj8dS5brPZ9Jvf/Cbg5y0vL9fs2bOZmADqQYCOmFNZWak//vGPkW6GX//+979ls9nUrl07rVixwu89RUVFcrvdmj9/vsaOHauRI0c2+rzbt2/X008/HezmBt3s2bOD+nz1BehZWVmqqKiw/OAJABAeK1asUHZ2tj788EPt3LnT7z3r1q1T3759de+99+qGG25Q7969G3zO/v37q6KiQv379w9Fk4PmP//5j1auXBm05ysvL9d9993nN0CfOXOmKioqgvZagBURoCPm9OjRQ08//bS+++67SDeljuXLl+vSSy/VqFGj9Oyzz/q954cffpCkRlPbPR6Pr5NLTExUfHx8cBsbZD169NBrr72mTz75JOSv5c2kiIuLC/lrAQCsraSkRBs3btQjjzyizMzMeifQf/jhB0Pbzo4dOya32y273a6kpCTZ7eYdjicnJ+v000/XnDlz/K6iB5vD4VBSUlLIXwcwM/P+RQBC5O6771Z1dbWhVXSXy6X7779fubm5SkxMVHZ2tu6++25VVlbWui87O1vDhw/Xu+++q3POOUdJSUnKycnR3//+d8Pt+u9//6t33nlH1157ra699lrfgODE17n33nslSZmZmbLZbL5VZ28b1qxZoz59+ig5OVmLFi3yXTtxD/qhQ4d02223KTs7W4mJiTr11FM1evRo7du3T5LkdDo1a9Ys9e7dW+np6UpJSdEFF1yg9evX13oe737uP/3pT3rqqad879UvfvELffTRR4Z//1tvvVWtW7c2tIr+8ssva9iwYerQoYMSExOVm5ur+++/X9XV1b57Bg4cqFWrVunrr7/2pdBnZ2fXavOJe9DXrVunCy64QCkpKWrVqpUuv/zyOlsNvPvjdu7cqbFjx6pVq1ZKT0/XuHHjVF5eXuvewsJCnX/++WrVqpVSU1PVtWtX3X333YbfEwBA5K1YsUKtW7fWsGHDdNVVV9UJ0L1btUpKSrRq1Spfn7N7927fteeee04zZ87UKaecohYtWqi0tLTePegffPCBLr30UrVu3VopKSnq1q2b5s+f77v++eefa+zYscrJyVFSUpLatWun8ePHa//+/bWeJ5D+qj52u10zZ87U559/rhdffLHBe42MG3bv3q3MzExJ0n333ed7r7x9v7896MEei1VVVem+++5Tly5dlJSUpIyMDJ1//vkqLCw09J4AoeaIdAOAcOvUqZNGjx6tp59+Wr/73e/UoUOHeu+dMGGCli1bpquuukozZszQBx98oHnz5mnbtm11OqqdO3fqqquu0k033aQxY8bob3/7m8aOHavevXvr7LPPbrRd//jHP5SSkqLhw4crOTlZubm5WrFihfLy8nz3PPbYY/r73/+uF198UQsWLFBqaqq6devmu759+3aNGjVKEydO1M0336yuXbv6fa2ysjJdcMEF2rZtm8aPH69evXpp3759euWVV/Ttt9/qpJNOUmlpqRYvXqxRo0bp5ptv1pEjR/TXv/5VF110kT788EP16NGj1nM+++yzOnLkiCZOnCibzaaHHnpIV155pXbt2mVo9T4tLU233XabZs2apU8++US9evWq996lS5cqNTVV06dPV2pqqtatW6dZs2aptLRUDz/8sCTpnnvu0eHDh/Xtt9/q0UcflaQG97K/9dZbuuSSS5STk6PZs2eroqJCTzzxhM477zx98sknvuDea+TIkerUqZPmzZunTz75RIsXL9bJJ5+sBx98UJK0detWDR8+XN26ddOcOXOUmJionTt36r333mv0vQAAmMeKFSt05ZVXKiEhQaNGjdKCBQv00Ucf6Re/+IUk6cwzz9Qzzzyj2267TaeeeqpmzJgh6fhE+u7duyVJ999/vxISEnT77bersrJSCQkJfl+rsLBQw4cPV/v27ZWfn6927dpp27Zteu2115Sfn++7Z9euXRo3bpzatWunrVu36qmnntLWrVv1/vvv1wlwG+uvGnPdddfp/vvv15w5c3TFFVfUW8TNyLghMzNTCxYs0KRJk3TFFVfoyiuvlKRaY5kTBXssNnv2bM2bN08TJkzQOeeco9LSUm3evFmffPKJhg4daug9AULKA8SIJUuWeCR5PvroI09xcbHH4XB4pk6d6rs+YMAAz9lnn+37ecuWLR5JngkTJtR6nttvv90jybNu3TrfY1lZWR5Jnrffftv32A8//OBJTEz0zJgxw1D7fv7zn3uuv/563893332356STTvJUVVXVuu/ee+/1SPL8+OOPtR73tmH16tV1njsrK8szZswY38+zZs3ySPKsXLmyzr1ut9vj8Xg8LpfLU1lZWevawYMHPW3btvWMHz/e91hJSYlHkicjI8Nz4MAB3+Mvv/yyR5Ln1VdfbfD3Xr9+vUeS59///rfn0KFDntatW3suu+wy3/UxY8Z4UlJSav035eXldZ5n4sSJnhYtWniOHTvme2zYsGGerKysOvd627xkyRLfYz169PCcfPLJnv379/se++yzzzx2u90zevRo32Pe97/me+DxeDxXXHGFJyMjw/fzo48+6vdzAgBYx+bNmz2SPIWFhR6P53gfeeqpp3ry8/Pr3JuVleUZNmxYrce8fVxOTk6dvst7bf369R6P53i/26lTJ09WVpbn4MGDte719s0ej/8+8B//+EedcYjR/qo+NfvfZcuW1Rk3SPJMmTLF97PRccOPP/7okeS5995767ymt81eoRiLde/evc7nBJgJKe6ISTk5Obrxxhv11FNP6fvvv/d7z+uvvy5Jmj59eq3HvTPjq1atqvX4WWedpQsuuMD3c2Zmprp27apdu3Y12p7PP/9c//nPfzRq1CjfY6NGjdK+ffu0Zs0aY7+UjmcHXHTRRY3e98ILL6h79+664oor6lzzzozHxcX5ZvjdbrcOHDggl8ulPn36+N0nfs0116h169a+n73vhZHf3ys9PV3Tpk3TK6+8ok8//bTe+5KTk33//5EjR7Rv3z5dcMEFKi8v11dffWX49by+//57bdmyRWPHjlWbNm18j3fr1k1Dhw71fRdq+vWvf13r5wsuuED79+9XaWmppJ9qBLz88styu90BtwkAEHkrVqxQ27ZtNWjQIEnH+8hrrrlGzz33XK1tVY0ZM2ZMrb7Ln08//VQlJSWaNm1anb3sNVetaz7PsWPHtG/fPvXt21eS/PbPjfVXRlx//fXq0qVLg3vRAx03GBGKsVirVq20detW7dixo0ltAkKNAB0xa+bMmXK5XPXuRf/6669lt9vVuXPnWo+3a9dOrVq10tdff13r8dNOO63Oc7Ru3VoHDx5stC3Lly9XSkqKcnJytHPnTu3cuVNJSUnKzs6utxiNP506dTJ0X3FxsaEj5ZYtW6Zu3br59mhlZmZq1apVOnz4cJ17T/z9vcG6kd+/pvz8fLVq1arBvehbt27VFVdcofT0dKWlpSkzM1M33HCDJPltW2O8n6W/LQFnnnmm9u3bp6NHj9Z6vLHf95prrtF5552nCRMmqG3btrr22mv1r3/9i2AdACyiurpazz33nAYNGqSSkhJf/3zuuedq7969Wrt2reHnMtI/FxcXS1Kj/fOBAweUn5+vtm3bKjk5WZmZmb7nD1X/HBcXp5kzZ2rLli166aWX6r0vkHGDEaEYi82ZM0eHDh3S6aefrp///Oe644479PnnnzepfUAoEKAjZuXk5OiGG25ocBVdUr17rU5UX0Xw+maaa17/xz/+oaNHj+qss85Sly5dfP92796tl19+WWVlZYba0NjsfCCWL1/uO2/9r3/9q1avXq3CwkJdeOGFfoPMpv7+J2psFf3QoUMaMGCAPvvsM82ZM0evvvqqCgsLfXvpwhUAN/b7Jicn6+2339Zbb72lG2+8UZ9//rmuueYaDR06NKBVFwBAZKxbt07ff/+9nnvuuVp9s/d400Am0IPZP48cOVJPP/20fv3rX2vlypV68803tXr1akn++8Bg9c/XX3+9OnfuXO8qeqDjhkAEcyzWv39/FRcX629/+5t+9rOfafHixerVq5cWL17crDYCwUKROMS0mTNnavny5X4LpWRlZcntdmvHjh0688wzfY/v3btXhw4dUlZWVlDasGHDBn377beaM2dOrdeRjs9u33LLLXrppZd8K8TBkJubqy+++KLBe55//nnl5ORo5cqVtTpGbxX5UJo2bZoee+wx3XfffXXS/IqKirR//36tXLmy1tmxJSUldZ7HaIfu/Sy3b99e59pXX32lk046SSkpKYH8CpKOV78dPHiwBg8erEceeUR/+MMfdM8992j9+vUaMmRIwM8HAAifFStW6OSTT9aTTz5Z59rKlSv14osvauHChUELvnNzcyVJX3zxRb19xMGDB7V27Vrdd999mjVrlu/xcKRre1fRx44dq5dffrnOdaPjBqN9sxS6sVibNm00btw4jRs3TmVlZerfv79mz56tCRMmNOn5gGBiBR0xLTc3VzfccIMWLVqkPXv21Lp26aWXSjpeOb2mRx55RJI0bNiwoLTBm95+xx136Kqrrqr17+abb1aXLl0CmqU34le/+pU+++wzv0emeGeZvbPQNWedP/jgA23atCmobfHHu4r+8ssva8uWLbWu+WuX0+lUQUFBnedJSUkxlFbXvn179ejRQ8uWLdOhQ4d8j3/xxRd68803fd+FQBw4cKDOY97K9yceDQMAMJeKigqtXLlSw4cPr9M3X3XVVfrNb36jI0eO6JVXXgnaa/bq1UudOnXSY489Vqsvkhrum6W6Y5VQueGGG9S5c2fdd999da4ZHTe0aNFCkur8jv6EYix24nF0qamp6ty5M30zTIMVdMS8e+65R88884y2b99e6zi07t27a8yYMXrqqad8adUffvihli1bpl/+8pe+gjHNUVlZqRdeeEFDhw5VUlKS33suu+wyzZ8/Xz/88INOPvnkZr+mJN1xxx16/vnndfXVV2v8+PHq3bu3Dhw4oFdeeUULFy5U9+7dNXz4cK1cuVJXXHGFhg0bppKSEi1cuFBnnXWW4ZT75sjPz9ejjz6qzz77rNbqdV5enlq3bq0xY8Zo6tSpstlseuaZZ/ym2/Xu3Vv//Oc/NX36dP3iF79QamqqRowY4ff1Hn74YV1yySXq16+fbrrpJt8xa+np6YbOZj/RnDlz9Pbbb2vYsGHKysrSDz/8oIKCAp166qk6//zzA34+AED4vPLKKzpy5Iguu+wyv9f79u2rzMxMrVixQtdcc01QXtNut2vBggUaMWKEevTooXHjxql9+/b66quvtHXrVq1Zs0ZpaWnq37+/HnroIVVVVemUU07Rm2++6TeLLBTi4uJ0zz33aNy4cXWuGR03JCcn66yzztI///lPnX766WrTpo1+9rOf+d17H4qx2FlnnaWBAweqd+/eatOmjTZv3qznn39ev/nNbwJ+LiAUWEFHzOvcuXO96eOLFy/Wfffdp48++kjTpk3TunXrdNddd+m5554LymuvWrVKhw4dqjdolKQRI0bI5XIF7TWl47PF77zzjiZNmqTXX39dU6dOVUFBgbp27apTTz1VkjR27Fj94Q9/0GeffaapU6dqzZo1Wr58ufr06RO0djSkVatWmjZtWp3HMzIy9Nprr6l9+/aaOXOm/vSnP2no0KF66KGH6tw7efJkXXfddVqyZImuu+463XrrrfW+3pAhQ7R69WplZGRo1qxZ+tOf/qS+ffvqvffeM1x8r6bLLrtMp512mv72t79pypQpevLJJ9W/f3+tW7dO6enpAT8fACB8VqxYoaSkpHrPxbbb7Ro2bJhWr15dZ0W2OS666CKtX79ep59+uv785z9r+vTpWrt2ba1xwrPPPquLLrpITz75pO666y7Fx8frjTfeCFobGnPDDTf40vFrCmTcsHjxYp1yyim67bbbNGrUKD3//PP1vl6wx2JTp07V7t27NW/ePE2dOlUbNmzQAw88oD//+c9Nej4g2GyeQCtEAAAAAACAoGMFHQAAAAAAEyBABwAAAADABAjQAQAAAAAwAQJ0AAAAAABMgAAdAAAAAAATIEAHAAAAAMAEHJFuQKi53W599913atmypWw2W6SbAwCAPB6Pjhw5og4dOshuZ668uejrAQBm09S+PuoD9O+++04dO3aMdDMAAKjjm2++0amnnhrpZlgefT0AwKwC7eujPkBv2bKlpONvTFpaWoRbAwCAVFpaqo4dO/r6KDQPfT0AwGya2tdHfYDuTXVLS0uj0wYAmArp2MFBXw8AMKtA+3o2vgEAAAAAYAIE6AAAAAAAmAABOgAAAAAAJkCADgAAAACACRCgAwAAAABgAgToAAAAAACYAAE6AAAAAAAmQIAOAAAAAIAJEKADAAAAAGACBOgAAAAAAJgAAToAAAAAACYQ0QD97bff1ogRI9ShQwfZbDa99NJLta6vXLlS/+//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PHnyMc957733Qrc//fRTbdq0Sbfffnvovrq6Ovl8Pvn9fn3xxRfq06ePOnToEHp8+PDh9b6voK5du0qS9u3bp169emnLli0qLS3Vn/70p9BzjDGqra3VV199pQsuuEB33XWXevfurfPPP1/nn3++Lr30UqWnp+v000/XWWedpX79+mncuHE677zzdNlllzV7juDR8dXV1Wn//v3q1KmTtm3bpjlz5oQ9f/jw4frkk08kSfv379fXX3+tq666Si6XK/Qcv9+vzp07h2537NhRK1as0CWXXKKCggLNmjWrWTECAMKR78n35HskOgp0OEJlZaUuu+wy3Xnnncc81q1bt9C/27ZtG/H1R9//2GOP6bbbbtMf//hHnX766crMzNTdd9/d6MqgRy8243K5FAgEGnxNWlqa8vLyJEn333+/xowZowULFui2226TJLndh5eSMMaEXlNbW9vgNlsiEAjo4MGDuv/++3XhhRce83hKSkqztnfkvggmteC+qKys1LRp0zRlypRjXte9e3elpqbq008/1VtvvaU1a9bo1ltv1V133aUPP/xQmZmZWrt2rd5//339/e9/1x//+Ef97ne/04YNG9S9e/eoxNeYyspKSdLKlSt16qmnhj3m8YQfdt955x2lpKTo66+/VlVVldq0adPkGAEA4cj3rUe+J9/DWiwSB0c47bTTtHXrVvXp00d5eXlhPy05QL7//vsaPXq0fvWrX2nw4MHKy8vTzp07YxD5sX73u99pwYIF+v777yUdPisrha9uu3nz5rDXnHjiidqwYUPYfUffbuw5brdbp556qnbs2HHMPszLy5PL5VL//v1VVlamH374IfS6IxeuaarTTjtNn3/+ecTfE0ykqampGjdunP7whz/ok08+0bZt2/Tuu++GYj377LN111136ZNPPlFdXZ1effXVZsdRn379+unDDz8Mu+/I95mbm6sOHTpo9+7dx8Tfq1ev0PPefvttLV68WKtXr5bb7eaMOgC0EvmefE++R6JjBB2OMGPGDBUVFenqq6/WrFmz1L59e+3YsUPPP/+8/vznPzd7e/n5+XrxxRdVXFys3Nxc/elPf9Jnn32m/v37xyD6cAUFBcrLy9PChQv1hz/8Qe3bt9epp56q+fPnq1u3bvrmm280d+7csNf8+te/1oMPPqjbb79dV199tTZu3Kgnn3xS0n/OFk+bNk3jxo3TkiVLdP755+uNN95QcXGx0tLSQtuZO3euLrvsMnXr1k2XXnqppMNfDnbs2KF58+bpggsuUG5uriZNmqR7771X+/fvPyaWprj11ls1YsQIzZo1S9dcc40yMjL0j3/8QyUlJVq0aJFeeukl7d27V2eddZays7P18ssvy+12Kz8/X++++67WrVunsWPHqkOHDlq3bp1+/PHHqP7fzJgxQ1OnTtXgwYN1xhlnhFoRTzrpJEmHvzDMnTtXt9xyi9q2bauxY8equrpaH330kaqqqjRt2jT9+9//1qRJk/Tb3/5W5557rp544gkNHz5cF110kS6++OKoxQoATkK+J9+T75HoGEGHI/To0UPvv/++KisrNXbsWA0YMEA33nijcnJyWrS9adOm6YILLtDPf/5zDR8+XFVVVfqf//mfKEddv5kzZ2rZsmX69ttvJUmPP/64KioqNHjwYP32t7/V/Pnzw55/4okn6plnntGTTz6pgQMHqqioSLfeeqtcLlfo2q9jxozR4sWLtWDBAp166qkqKSnR9OnTlZ6eHtrOhAkTtGrVKr322msaMmSIRowYoQceeCB0ltjj8ejll1/Wv/71Lw0dOlRTp05t0qVljjZkyBCtXbtWn376qUaOHKkhQ4bozjvvDLWstW/fXs8++6wKCgp00kknaeXKlXr++eeVn5+v4447TsXFxTr//PPVr18/3XnnnVq6dKkKCgpasqsjmjRpkm666SbNnDlTQ4cO1Q8//HDM//8NN9ygBx98UA8//LAGDBiggoICPfnkk+rdu7ckaerUqerUqZPmzZsXes/z5s3Tddddp++++y5qsQKAk5DvyffkeyQ6lzlyIgsAx7j99tv1zDPPqLS0tN7nXH311fr222/DrsMKAAASB/keSCy0uAMOsWTJEo0YMULt27cPtY7dfPPNYc9ZuHChxo8fr4yMDL322mt6+umn9dhjj1kTMAAAaDbyPZDYGEEHHGLq1KlatWqVfvzxR/Xs2VOTJ0/WTTfdFLYa689+9rNQa2BeXp5mzpyp6667zsKoAQBAc5DvgcRGgQ4AAAAAgA2wSBwAAAAAADZAgQ4AAAAAgA1QoAMAAAAAYAMU6AAAAAAA2AAFOgAAAAAANkCBDgAAAACADVCgAwAAAABgAxToAAAAAADYwP8HlczBjU7PZL0AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(12, 6), sharey=True)\n", + "african_nations = df[df[\"cont_africa\"] == 1]\n", + "non_african_nations = df[df[\"cont_africa\"] == 0]\n", + "sns.scatterplot(x=non_african_nations[\"rugged\"],\n", + " y=non_african_nations[\"rgdppc_2000\"],\n", + " ax=ax[0])\n", + "ax[0].set(xlabel=\"Terrain Ruggedness Index\",\n", + " ylabel=\"log GDP (2000)\",\n", + " title=\"Non African Nations\")\n", + "sns.scatterplot(x=african_nations[\"rugged\"],\n", + " y=african_nations[\"rgdppc_2000\"],\n", + " ax=ax[1])\n", + "ax[1].set(xlabel=\"Terrain Ruggedness Index\",\n", + " ylabel=\"log GDP (2000)\",\n", + " title=\"African Nations\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Linear Regression\n", + "\n", + "We would like to predict log GDP per capita of a nation as a function of two features from the dataset - whether the nation is in Africa, and its Terrain Ruggedness Index. We will create a trivial class called `PyroModule[nn.Linear]` that subclasses [PyroModule](http://docs.pyro.ai/en/dev/nn.html#module-pyro.nn.module) and `torch.nn.Linear`. `PyroModule` is very similar to PyTorch's `nn.Module`, but additionally supports [Pyro primitives](http://docs.pyro.ai/en/dev/primitives.html#primitives) as attributes that can be modified by Pyro's [effect handlers](http://pyro.ai/examples/effect_handlers.html) (see the [next section](#Model) on how we can have module attributes that are `pyro.sample` primitives). Some general notes:\n", + "\n", + " - Learnable parameters in PyTorch modules are instances of `nn.Parameter`, in this case the `weight` and `bias` parameters of the `nn.Linear` class. When declared inside a `PyroModule` as attributes, these are automatically registered in Pyro's param store. While this model does not require us to constrain the value of these parameters during optimization, this can also be easily achieved in `PyroModule` using the [PyroParam](http://docs.pyro.ai/en/dev/nn.html#pyro.nn.module.PyroParam) statement. \n", + " - Note that while the `forward` method of `PyroModule[nn.Linear]` inherits from `nn.Linear`, it can also be easily overridden. e.g. in the case of logistic regression, we apply a sigmoid transformation to the linear predictor." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "from torch import nn\n", + "from pyro.nn import PyroModule\n", + "\n", + "assert issubclass(PyroModule[nn.Linear], nn.Linear)\n", + "assert issubclass(PyroModule[nn.Linear], PyroModule)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Training with PyTorch Optimizers\n", + "\n", + "Note that in addition to the two features `rugged` and `cont_africa`, we also include an interaction term in our model, which lets us separately model the effect of ruggedness on the GDP for nations within and outside Africa.\n", + "\n", + "We use the mean squared error (MSE) as our loss and Adam as our optimizer from the `torch.optim` module. We would like to optimize the parameters of our model, namely the `weight` and `bias` parameters of the network, which corresponds to our regression coefficents and the intercept." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[iteration 0050] loss: 3179.7852\n", + "[iteration 0100] loss: 1616.1371\n", + "[iteration 0150] loss: 1109.4117\n", + "[iteration 0200] loss: 833.7545\n", + "[iteration 0250] loss: 637.5822\n", + "[iteration 0300] loss: 488.2652\n", + "[iteration 0350] loss: 376.4650\n", + "[iteration 0400] loss: 296.0483\n", + "[iteration 0450] loss: 240.6140\n", + "[iteration 0500] loss: 203.9386\n", + "[iteration 0550] loss: 180.6171\n", + "[iteration 0600] loss: 166.3493\n", + "[iteration 0650] loss: 157.9457\n", + "[iteration 0700] loss: 153.1786\n", + "[iteration 0750] loss: 150.5735\n", + "[iteration 0800] loss: 149.2020\n", + "[iteration 0850] loss: 148.5065\n", + "[iteration 0900] loss: 148.1668\n", + "[iteration 0950] loss: 148.0070\n", + "[iteration 1000] loss: 147.9347\n", + "[iteration 1050] loss: 147.9032\n", + "[iteration 1100] loss: 147.8900\n", + "[iteration 1150] loss: 147.8847\n", + "[iteration 1200] loss: 147.8827\n", + "[iteration 1250] loss: 147.8819\n", + "[iteration 1300] loss: 147.8817\n", + "[iteration 1350] loss: 147.8816\n", + "[iteration 1400] loss: 147.8815\n", + "[iteration 1450] loss: 147.8815\n", + "[iteration 1500] loss: 147.8815\n", + "Learned parameters:\n", + "weight [[-1.9478593 -0.20278624 0.39330274]]\n", + "bias [9.22308]\n" + ] + } + ], + "source": [ + "# Dataset: Add a feature to capture the interaction between \"cont_africa\" and \"rugged\"\n", + "df[\"cont_africa_x_rugged\"] = df[\"cont_africa\"] * df[\"rugged\"]\n", + "data = torch.tensor(df[[\"cont_africa\", \"rugged\", \"cont_africa_x_rugged\", \"rgdppc_2000\"]].values,\n", + " dtype=torch.float)\n", + "x_data, y_data = data[:, :-1], data[:, -1]\n", + "\n", + "# Regression model\n", + "linear_reg_model = PyroModule[nn.Linear](3, 1)\n", + "\n", + "# Define loss and optimize\n", + "loss_fn = torch.nn.MSELoss(reduction='sum')\n", + "optim = torch.optim.Adam(linear_reg_model.parameters(), lr=0.05)\n", + "num_iterations = 1500 if not smoke_test else 2\n", + "\n", + "def train():\n", + " # run the model forward on the data\n", + " y_pred = linear_reg_model(x_data).squeeze(-1)\n", + " # calculate the mse loss\n", + " loss = loss_fn(y_pred, y_data)\n", + " # initialize gradients to zero\n", + " optim.zero_grad()\n", + " # backpropagate\n", + " loss.backward()\n", + " # take a gradient step\n", + " optim.step()\n", + " return loss\n", + "\n", + "for j in range(num_iterations):\n", + " loss = train()\n", + " if (j + 1) % 50 == 0:\n", + " print(\"[iteration %04d] loss: %.4f\" % (j + 1, loss.item()))\n", + "\n", + " \n", + "# Inspect learned parameters\n", + "print(\"Learned parameters:\")\n", + "for name, param in linear_reg_model.named_parameters():\n", + " print(name, param.data.numpy())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Plotting the Regression Fit\n", + "\n", + "Let us plot the regression fit for our model, separately for countries outside and within Africa." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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OzzubZl69uwpSbrtttu0bt06FRcXO312fHy8WrVqpczMTN1///36/vvvXZbXkT179mjPnj2SpPHjx1c4HxERYcuqv2HDBof3GDZsmMPj5557riTp119/9bhc8fHxGj9+vMOfunXrenw/AACCiTXoAICQdOY+6L/99ps+++wzHTt2TJMnT1b79u1tQazVTz/9JEnatWuXLBZLpff+7bffbP+2jsI625qrSZMmqlu3rk6cOOH0fs7e622ZHnzwQX3xxRfasGGDrrzyStWqVUudO3fWpZdeqlGjRqlHjx52701NTdUNN9ygp59+Wk8//bQaN26siy66SMnJybr55pvVuHHjSp8t/Rk8N2/eXHXq1HF4Tdu2be2uLe/ss892eNyaLb6oqMhlOcrzZJs1AADMjgAdABCSyu+DXlBQoBEjRmjDhg268cYbtWPHDrtAsrS0VFLZiOuVV15Z6b0dJZirLIB2FVzXrl3b4XFvy1S3bl2lp6dry5YtWrt2rb744gtlZGRo69ateuaZZ3TXXXfphRdesF1/6aWXas+ePVqzZo02btyoL7/8Umlpafrwww81Y8YMrVy50jZS709nLg8AAAAVEaADAMJCTEyM3nnnHXXs2FF79+7Vs88+q2nTptnOn3XWWZKkZs2aeTTi2rJlS0myTe8u7/Dhwzp+/LhXZfa2TFY9e/a0zRQ4ffq0li9frvHjx+uf//ynbrjhBru16HXq1NENN9ygG264QZJ08OBBPfzww1q0aJFuueUW5eTkVPos6/dw4MABnThxwuH0ceuMAOu1AADAM3RlAwDCRtOmTW1B+dNPP62jR4/azvXq1UuNGjXSt99+69E67EsuuURSWbK4kpKSCueXLl3qdXm9LZMjNWrU0I033qgBAwZIkrKysiq9vlmzZrb9v3/66ScdO3as0usTEhJsU/XffPPNCucNw7B1Mlx22WUelj64atWqJamskwMAgGAiQAcAhJW//vWvOvvss1VQUGDLOi6VBWHTp09XaWmprrnmGruka1YlJSX6+OOP7fY2HzlypJo3b66cnBxNnz5dhmHYzn333Xd6/PHHvS6rt2WaP3++fvjhhwrX7tu3T19//bUkqXXr1pKk3Nxcvfbaa7b94c+0evVqSVLjxo3dSqh23333SSrL4v7tt9/ajhuGoZkzZyo7O1uNGjXSLbfc4vJeZtKqVStJZb9PAACCiSnuAICwEhUVpZkzZ2rixImaN2+e7rnnHsXGxkoq2+brf//7n5577jldfPHF6tSpk9q1a6fo6Gjl5eUpKytLBQUFWrhwoW3qeL169bR48WINGzZMTzzxhN577z316NFDhw4d0saNG3Xddddp48aN2rdvn20k1hPelOnll1/WXXfdpTZt2qhTp06qX7++Dh48qM8++0xFRUVKTk62bet2+PBh3XLLLZo8ebK6du1qGwX/4YcflJWVpYiICD3zzDNurQ+/4447lJGRoaVLl6pHjx669NJL1bRpU3399df64YcfVKdOHS1btsytpHNmctVVVyk6OlrLli3Tvn371KZNG0VGRqp///4aO3ZssIsHAKhGGEEHAISdcePGKSkpSceOHdNTTz1ld+7ZZ5/VZ599ptGjR+vYsWP673//qzVr1igvL0+XX365Fi1aVGFbtOTkZG3atEnDhw/Xb7/9phUrVmjfvn2aM2eOXnvtNR08eFCRkZFq1KiRV+X1tExz5szR7bffrgYNGigjI0Pvvvuudu7cqd69e2vx4sVas2aNIiMjJUnt27fXc889p6uuukr5+fn68MMPtWbNGp08eVIpKSn66quvHG6b5ojFYlFqaqpSU1PVp08fbd26Ve+9955OnTqliRMnatu2bS6T3ZlRq1attGbNGl1++eXavn273nzzTS1atEiff/55sIsGAKhmLMaZc/UAAIBH0tPTdcUVV6hbt27KzMwMdnEAAEAIYwQdAAAXDh486DCL+/bt23XbbbdJkiZMmBDgUgEAgHDDCDoAAC58/PHHSk5O1nnnnafExETVrl1bubm5yszMVGlpqQYNGqQPPvjANq0cAADAGwToAAC48Msvv2jOnDm2ZHDHjh1T/fr1df7552v06NGaNGkSwTkAAKgyAnQAAAAAAEyANegAAAAAAJgAAToAAAAAACZAgA4AAAAAgAkQoAMAAAAAYAIE6AAAAAAAmAABOgAAAAAAJkCADgAAAACACRCgAwAAAABgAgToAAAAAACYAAE6AAAAAAAmQIAOAAAAAIAJEKADAAAAAGACBOgAAAAAAJgAAToAAAAAACZAgA4AAAAAgAkQoAMAAAAAYAIE6AAAAAAAmAABOhCCFi9erI4dO6pmzZpq2LChy+sTEhKUkpLi/4KFiD179shiseiNN94IdlEAAGHi+PHjmjRpkuLi4mSxWDR16tRKr//kk09ksVj0ySefBKaAIWDmzJmyWCzBLgYQVAToqDbeeOMNWSwWRUdH69dff61wvn///urUqVMQSvano0ePKjo6WhaLRTt37nR4zffff6+UlBS1bdtWCxcu1CuvvBLgUvqWtYFisVj09ddfVzifkpKievXqeXXvpUuX6vnnn69qEQEA1dxLL70ki8Wiiy66yOk1TzzxhN544w1NnjxZixcv1s033xzAEvpeSkqKLBaLOnfuLMMwKpy3WCy68847Pb7vyZMnNXPmTDomACcI0FHtFBcX6x//+Eewi+HQu+++K4vFori4OC1ZssThNZ988olKS0s1b948paSk6MYbb3R53127dmnhwoW+Lq7PzZw506f3cxagt27dWqdOnQr5xhMAIDCWLFmihIQEbdmyRbt373Z4TXp6unr16qUZM2Zo7Nix6tGjR6X3vOSSS3Tq1Cldcskl/iiyz3z77bdavny5z+538uRJzZo1y2GAPm3aNJ06dcpnzwJCEQE6qp2uXbtq4cKF2rdvX7CLUkFqaqquuuoqjRo1SkuXLnV4zcGDByXJ5dR2wzBslVxUVJRq1qzp28L6WNeuXfXBBx8oMzPT78+yzqSIjIz0+7MAAKEtNzdXX375pZ599lk1bdrUaQf6wYMH3Vp2VlRUpNLSUkVERCg6OloREeZtjteuXVvnnHOOZs+e7XAU3ddq1Kih6Ohovz8HMDPz/o8A+MnDDz+skpISt0bRT58+rccee0xt27ZVVFSUEhIS9PDDD6u4uNjuuoSEBA0dOlSff/65evbsqejoaLVp00ZvvfWW2+X63//+p88++0w33XSTbrrpJluDoPxzZsyYIUlq2rSpLBaLbdTZWoa1a9fqggsuUO3atfWvf/3Ldq78GvSjR4/qnnvuUUJCgqKiotSqVSuNGzdOhw4dkiT9/vvvmj59unr06KGYmBjVrVtX/fr104YNG+zuY13P/fTTT+uVV16xfVcXXnihvvrqK7c//1133aVGjRq5NYq+cuVKDRkyRC1atFBUVJTatm2rxx57TCUlJbZr+vfvrzVr1mjv3r22KfQJCQl2ZS6/Bj09PV39+vVT3bp11bBhQw0fPrzCUgPr+rjdu3crJSVFDRs2VExMjCZMmKCTJ0/aXbtu3Tr17dtXDRs2VL169dShQwc9/PDDbn8nAIDgW7JkiRo1aqQhQ4bo+uuvrxCgW5dq5ebmas2aNbY6Z8+ePbZzy5Yt07Rp09SyZUvVqVNHhYWFTtegb968WVdddZUaNWqkunXrqnPnzpo3b57t/Pbt25WSkqI2bdooOjpacXFxmjhxog4fPmx3H0/qK2ciIiI0bdo0bd++XStWrKj0WnfaDXv27FHTpk0lSbNmzbJ9V9a639EadF+3xf744w/NmjVL7du3V3R0tBo3bqy+fftq3bp1bn0ngL/VCHYBgEBLTEzUuHHjtHDhQj344INq0aKF02snTZqkN998U9dff73uu+8+bd68WXPmzNHOnTsrVFS7d+/W9ddfr1tuuUXjx4/Xa6+9ppSUFPXo0UPnnXeey3K9/fbbqlu3roYOHaratWurbdu2WrJkifr06WO75vnnn9dbb72lFStWaMGCBapXr546d+5sO79r1y6NGjVKt912m2699VZ16NDB4bOOHz+ufv36aefOnZo4caK6d++uQ4cOadWqVfrll1/UpEkTFRYW6tVXX9WoUaN066236tixY1q0aJEGDhyoLVu2qGvXrnb3XLp0qY4dO6bbbrtNFotFTz75pK699lr99NNPbo3eN2jQQPfcc4+mT5+uzMxMde/e3em1b7zxhurVq6d7771X9erVU3p6uqZPn67CwkI99dRTkqRHHnlEBQUF+uWXX/Tcc89JUqVr2T/++GMNHjxYbdq00cyZM3Xq1Cn985//1MUXX6zMzExbcG914403KjExUXPmzFFmZqZeffVVNWvWTHPnzpUkfffddxo6dKg6d+6s2bNnKyoqSrt379YXX3zh8rsAAJjHkiVLdO2116pWrVoaNWqUFixYoK+++koXXnihJOncc8/V4sWLdc8996hVq1a67777JJV1pO/Zs0eS9Nhjj6lWrVr629/+puLiYtWqVcvhs9atW6ehQ4cqPj5eU6ZMUVxcnHbu3KkPPvhAU6ZMsV3z008/acKECYqLi9N3332nV155Rd999502bdpUIcB1VV+5Mnr0aD322GOaPXu2RowY4TSJmzvthqZNm2rBggWaPHmyRowYoWuvvVaS7Noy5fm6LTZz5kzNmTNHkyZNUs+ePVVYWKitW7cqMzNTycnJbn0ngF8ZQDXx+uuvG5KMr776ysjJyTFq1Khh3H333bbzl156qXHeeefZXmdlZRmSjEmTJtnd529/+5sh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WXbnHJXr999/10svvVThPnXr1nVrWl18fLy6du2qN998U0ePHrUdz87O1kcffWT7W/BEfn5+hWPWzPflt4YBAJjLqVOntHz5cg0dOrRC3Xz99dfrzjvv1LFjx7Rq1SqfPbN79+5KTEzU888/b1cXSZXXzVLFtoq/jB07Vu3atdOsWbMqnHO33VCnTh1JqvAZHfFHW6z8dnT16tVTu3btqJthGoygo9p75JFHtHjxYu3atctuO7QuXbpo/PjxeuWVV2zTqrds2aI333xT11xzjS1hTFUUFxfrP//5j5KTkxUdHe3wmquvvlrz5s3TwYMH1axZsyo/U5Luv/9+vffee7rhhhs0ceJE9ejRQ/n5+Vq1apVefvlldenSRUOHDtXy5cs1YsQIDRkyRLm5uXr55ZeVlJTk9pT7qpgyZYqee+45ffPNN3aj13369FGjRo00fvx43X333bJYLFq8eLHD6XY9evTQO++8o3vvvVcXXnih6tWrp2HDhjl83lNPPaXBgwerd+/euuWWW2zbrMXExLi1N3t5s2fP1qeffqohQ4aodevWOnjwoF566SW1atVKffv29fh+AIDAWbVqlY4dO6arr77a4flevXqpadOmWrJkiUaOHOmTZ0ZERGjBggUaNmyYunbtqgkTJig+Pl7ff/+9vvvuO61du1YNGjTQJZdcoieffFJ//PGHWrZsqY8++sjhLDJ/iIyM1COPPKIJEyZUOOduu6F27dpKSkrSO++8o3POOUexsbHq1KmTw7X3/miLJSUlqX///urRo4diY2O1detWvffee7rzzjs9vhfgD4ygo9pr166d0+njr776qmbNmqWvvvpKU6dOVXp6uh566CEtW7bMJ89es2aNjh496jRolKRhw4bp9OnTPnumVNZb/Nlnn2ny5Mn68MMPdffdd+ull15Shw4d1KpVK0lSSkqKnnjiCX3zzTe6++67tXbtWqWmpuqCCy7wWTkq07BhQ02dOrXC8caNG+uDDz5QfHy8pk2bpqefflrJycl68sknK1z717/+VaNHj9brr7+u0aNH66677nL6vAEDBigtLU2NGzfW9OnT9fTTT6tXr1764osv3E6+d6arr75aZ599tl577TXdcccdevHFF3XJJZcoPT1dMTExHt8PABA4S5YsUXR0tNN9sSMiIjRkyBClpaVVGJGtioEDB2rDhg0655xz9Mwzz+jee+/V+vXr7doJS5cu1cCBA/Xiiy/qoYceUs2aNfXf//7XZ2VwZezYsbbp+GfypN3w6quvqmXLlrrnnns0atQovffee06f5+u22N133609e/Zozpw5uvvuu7Vx40Y9/vjjeuaZZ7y6H+BrFsPTDBEAAAAAAMDnGEEHAAAAAMAECNABAAAAADABAnQAAAAAAEyAAB0AAAAAABMgQAcAAAAAwAQI0AEAAAAAMIEawS6Av5WWlmrfvn2qX7++LBZLsIsDAIAMw9CxY8fUokULRUTQV15V1PUAALPxtq4P+wB93759Ouuss4JdDAA2BYfQAAAgAElEQVQAKvj555/VqlWrYBcj5FHXAwDMytO6PuwD9Pr160sq+2IaNGgQ5NIAACAVFhbqrLPOstVRqBrqegCA2Xhb14d9gG6d6tagQQMqbQCAqTAd2zeo6wEAZuVpXc/CNwAAAAAATIAAHQAAAAAAEyBABwAAAADABAjQAQAAAAAwAQJ0AAAAAABMgAAdAAAAAAATIEAHAAAAAMAECNABAAAAADABAnQAAAAAAEyAAB0AAAAAABMIaoD+6aefatiwYWrRooUsFovef/99u/PLly/XlVdeqcaNG8tisSgrKytIJQUAAAAAwL+CGqCfOHFCXbp00Ysvvuj0fN++fTV37twAlwwAAAAAgMCqEcyHDx48WIMHD3Z6/uabb5Yk7dmzJ0AlAgAAAAAgOIIaoCN0lJQa2pKbr4PHitSsfrR6JsYqMsIS7GIBAAAAQNgIuwC9uLhYxcXFtteFhYVBLE14SMvO06zVO5RXUGQ7Fh8TrRnDkjSoU3wQSwYAqI6o6wEA4SrssrjPmTNHMTExtp+zzjor2EUKaWnZeZqcmmkXnEvS/oIiTU7NVFp2XpBKBgCorqjrAQDhKuwC9IceekgFBQW2n59//jnYRQpZJaWGZq3eIcPBOeuxWat3qKTU0RUAAPgHdT0AIFyF3RT3qKgoRUVFBbsYYWFLbn6FkfMzGZLyCoq0JTdfvds2DlzBAADVGnU9ACBcBTVAP378uHbv3m17nZubq6ysLMXGxurss89Wfn6+/ve//2nfvn2SpF27dkmS4uLiFBcXF5QyVycHjzkPzr25DgAAAADgXFCnuG/dulXdunVTt27dJEn33nuvunXrpunTp0uSVq1apW7dumnIkCGSpJtuukndunXTyy+/HLQyVyfN6kf79DoAAAAAgHNBHUHv37+/DMP5+uWUlBSlpKQErkCw0zMxVvEx0dpfUORwHbpFUlxM2ZZrAAAAAICqCbskcfCdyAiLZgxLklQWjJ/J+nrGsCT2QwcAAAAAHyBAR6UGdYrXgrHdFRdjP409LiZaC8Z2Zx90AAAAAPCRsMviDt8b1CleyUlx2pKbr4PHitSsftm0dkbOAQAAAMB3CNDhlsgIC1upAQAAAIAfMcUdAAAAAAATIEAHAAAAAMAECNABAAAAADABAnQAAAAAAEyAAB0AAAAAABMgQAcAAAAAwAQI0AEAAAAAMAECdAAAAAAATIAAHQAAAAAAEyBABwAAAADABAjQAQAAAAAwAQJ0AAAAAABMgAAdAAAAAAATIEAHAAAAAMAECNABAAAAADABAnQAAAAAAEyAAB0AAAAAABMgQAcAAAAAwAQI0AEAAAAAMAECdAAAAAAATIAAHQAAAAAAEyBABwAAAADABAjQAQAAAAAwAQJ0AAAAAABMgAAdAAAAAAATIEAHAAAAAMAECNABAAAAADABAnQAAAAAAEyAAB0AAAAAABMgQAcAAAAAwAQI0AEAAAAAMAECdAAAAAAATIAAHQAAAAAAE6gR7AIA8K+SUkNbcvN18FiRmtWPVs/EWEVGWIJdLAAAAADlEKDDrwgOgystO0+zVu9QXkGR7Vh8TLRmDEvSoE7xQSwZAAAAgPII0OE3BIfBlZadp8mpmTLKHd9fUKTJqZlaMLY7vwcAAADARFiDDr+wBodnBufSn8FhWnZekEpWPZSUGpq1ekeF4FyS7dis1TtUUuroCgAAAADBQIAOnyM4DL4tufkVOkfOZEjKKyjSltz8wBUKAAAAQKUI0OFzBIfBd/CY8+/fm+sAAAAA+B8BOnyO4DD4mtWP9ul1AAAAAPyPAB0+R3AYfD0TYxUfEy1n+fItKkvY1zMxNpDFAgAAAFAJAnT4HMFh8EVGWDRjWJIkVfg9WF/PGJbElncAAACAiRCgw+cIDs1hUKd4LRjbXXEx9jMV4mKi2WINAAAAMCH2QQ9hJaWGtuTm6+CxIjWrXzYibZag1xoclt8HPY590ANqUKd4JSfFmfbvBAAAAMCfCNBDVFp2XoXgN95kwS/BoTlERljUu23jYBcDqJSZOxwBAAAChQA9BKVl52lyamaFfcb3FxRpcmqmqaYvExwCcCUUOhwBAAACgTXoIaak1NCs1TsqBOeSbMdmrd6hklJHVwCAuVg7HM8MzqU/OxzTsvOCVDIAAIDAI0APMVty8ys0ZM9kSMorKNKW3PzAFQoAvECHIwAAgD2muIeYg8ecB+feXBeOWMsKX+LvyX886XBkqQwAAKgOCNC94EmD3deN+2b1o11f5MF14Ya1rPAl/p78iw5HAAAAewToHvKkwe6Pxn3PxFjFx0Rrf0GRw2mhFpVtZdYzMdar+4eyUEqeB/Pj78n/6HAEAACwxxp0D3iSzMhfiY8iIyyaMSxJUlkwfibr6xnDkqrdFFzWssKX+HsKDGuHo7P/rSwq69Ssjh2OAACgeiJAd5MnDXZ/N+4HdYrXgrHdFRdjP6oUFxNdbUf1SJ4HX+LvKTDocAQAALDHFHc3edpgr2riI1dr1wd1ildyUpzP1reHeiIs1rLCl/h7Chxrh2P55UBxrPUHAADVEAG6m/zRYHd2rbtr1yMjLD7JbBwOibBYywpf4u8psHzd4QgAABCqmOLuJk8a7FVp3Ptr7bozgX6ev7CWFb7E31PgWTsch3dtqd5tGxOcAwCAaokA3U2eNNi9bdxXde16SamhjJzDWpn1qzJyDrtc4x5OibBYywpf4u8JAAAAwUCA7iZPGuzeNu6rkpgqLTtPfeema9TCTZqyLEujFm5S37nplY6Ah1sirHBJnudpRwv8I1z+ngAAABA6WIPuAU+SGXmT+Mjbde7e7NdcUmroi92/efU8bwQqCV2or2UNZD6AUE8MGAih/vcEAACA0EKA7iFXDfbyQc/G+y/T13uPuGzcl5QaOnSs2K0ynLl23d1p6slJcbbnOgoC3X2eNwKdhM5XyfMCzZuOlqo8K9QTAwZKqP49AQAAIPQQoHvBWYO9sqBneNeWTu/nbsBsUdkI/Jlr111NU5fKpqnPT/9RUwac4zQIdPd5ngpk0BnKXHW0WFSxo8Vb/E4AAAAAc2INuo94mw3d2fvKc7Z23d3p5899/KM+3L7PaRDo7vM8EU5J6PwtUPkAfj9dqodXfMvvBAAAADAhAnQf8DYQrex95TlLTOXJ9PNpK7Pdntbui0RY4ZaEzh+sCeH+6+Z2dlXJB5CWnadec9Yr/8QfTq/hdwIAAAAED1PcfcCTQPTMqfHuTE+XpEeHnKuUixMdjmRbt3Rz5z6VBWZnuvOydron+ZwqT6X2NulddeFpLgDJ+3wAnixtkKrv7wQAAAAIJkbQfcDbQNTd9zWpH+U0WD5zSzdfubhdE59kqXY3mKxqErpQ5O7SBiuLyvIZeJMPwJOZGlbV8XcCAAAABBsBug94G4j6KoAd1Cle9ww4x617xdatVWFvdquqBIGOWEf3A/U8X/LnXuSeBsxVzQfg7kwN67PM+jsBAAAAwh0BugecBW3eBqK+DGDvvLyd4hpEOT1vvdfjwzvZXpc/L1UtKVx5Z47uB+J5vpKWnae+c9M1auEmTVmWpVELN6nv3HSnif485UnALFU9H4Cn09XN+DsBAAAAqgMCdDdVFrR5G4j6MoCNjLBo5tXnyeLiXld1jteCsd0VF2M/Ku+LpHCODOoU2OdVlbfZ+D3hbsA8rndrvX1rL33+wOVV+p7cnakRW7emKX8nAAAAQHVhMQwjrPdTKiwsVExMjAoKCtSgQQOv7uEswZY18LUGNZXtg15Z0OPt+6pyr5JSQ1ty83XwWJGa1S8bpffnqGmgn+eNklJDfeemOx3dtu4L//kDl1ep7Bk5hzVq4SaX1719ay+7pILesn6u/QVFTqfVN65bSxkPXaFaNeizAwLBF3UT/sT3CQAwG2/rJrK4u+BqCzWLyrZQS06K06BO8UpOivM4EPX2fVW5V2SExSfBn7sC/TxveJuN31PWpQ3OAmZrR4Cv1oFbZ2pMTs2URbJ7pvWv4v+N6ERwDgAAAAQZAboLngZt3gaivgxgQyEYNqNAbQvnTsDs63Xg1qUG5WdXxHk5UwMAAACA7xGgu8Be3qHD3Wn0zq4L5LZwwQiYfTlTAwAAAIDvEaC7wF7eocHdtfeVXZecFBfQqefBCJiZXQEAAACYV1AXnX766acaNmyYWrRoIYvFovfff9/uvGEYmj59uuLj41W7dm0NGDBAP/74Y0DLGMp7eVcX7mZed3Xduh37bVn1y/PX1HNrwDy8a0vbEgkAAAAA1VNQA/QTJ06oS5cuevHFFx2ef/LJJ/XCCy/o5Zdf1ubNm1W3bl0NHDhQRUWBm04eqnt5VxeukvhJZUn8fj9d6tZ1paWGYurUrHBNwzpsQQYAAADAv4I6xX3w4MEaPHiww3OGYej555/XtGnTNHz4cEnSW2+9pebNm+v999/XTTfdFLBykmDLvNxN4rc4Y49b1/116TaH54+c/KNqBQUAAAAAF0y7Bj03N1f79+/XgAEDbMdiYmJ00UUXKSMjw2mAXlxcrOLiYtvrwsJCn5SHBFvm5G5yvr35J6v0nDO30+N3DgDB5a+6HgCAYDPtxsf79++XJDVv3tzuePPmzW3nHJkzZ45iYmJsP2eddZbPysR6YfNxNzlf69g6VXrOmdvpAQCCy591PQAAwWTaAN1bDz30kAoKCmw/P//8c7CLFBJKSg1l5BzWyqxflZFzWCWljlZrm4+7Sfxu7p1Q6XXuYjs9AAg+6noAQLgy7RT3uLg4SdKBAwcUH//nGu8DBw6oa9euTt8XFRWlqKgov5cvnLi7RZkZWZP4TU7NlEWySwJ3ZhK/WjUiKr3O3e4IttP7k7v7zgOAr1HXAwDClWlH0BMTExUXF6f169fbjhUWFmrz5s3q3bt3EEsWXtzdoszMrEn84mLsg+e4mGi7zOuVXffS6O5sp+eBtOw89Z2brlELN2nKsiyNWrhJfeemh8TfCwAAAGBWQR1BP378uHbv3m17nZubq6ysLMXGxurss8/W1KlT9fjjj6t9+/ZKTEzUo48+qhYtWuiaa64JYqnDh6stykIpMZq7Sfwquy4iQi5H4s3+PQSCtVOn/N+NtVOH7egAAAAA7wQ1QN+6dasuu+wy2+t7771XkjR+/Hi98cYb+vvf/64TJ07oL3/5i44ePaq+ffsqLS1N0dFMM/YFd7co25Kbr95tGweuYF6yJvHz9rpAbqcXqtPDw6lTBwAAADCboAbo/fv3l2E4X/1rsVg0e/ZszZ49O4Clqj7cTXhWnRKjBWI7vVBe8x9unToAAACAmZg2SRz8z92EZ9UtMZq7I/HeCPXp4XTqAAAAAP5j2iRx8D93tygjMZpvuJoeLpVNDzfzFnd06gAAAAD+Q4BejVm3KJNUIUgnMZrveTI93Kzo1AEAAAD8hwC9GispNRRTu5YmXpygRnVr2p0rv0UZqi4cpofTqQMAAAD4D2vQqylHicpi69bSNV1bKDkpzlRZxaua8dwsGdPDZXp4ILPdAwAAANUJAXo15CxR2ZETv+v1L/aYKjivasZzM2VMt04P319Q5HAdukVlQW4oTA8PRLZ7AAAAoLphins1E0qJyqwdCeXXbVsznqdl5/n1/b4WbtPDrdnuh3dtqd5tG4dMuQEAAMJFSamhjJzDWpn1qzJyDpuiDY+qYQS9mgmVfaxddSRYVNaRkJwU5zAwrOr7/YXp4QAAAPAFM80Uhe8QoFczoZKorKodCWbuiGB6uHfMkksAAAAg2JwtWbXOFCXZc+giQK9mQiVRWVU7EszeEWGdHg730EMMAABQxqwzReEbrEH3Uqiu9wiVfayr2pEQKh0RcM1suQQAAACCyZOZogg9jKB7IZRH86yJyianZsoi2fW8mSlRWVUznodTxnR/CYUp4/QQAwAA2DP7TFFUDSPoHgqH0TxrorK4GPvR47iYaNOsV6lqxvNwy5jua2nZeeo7N12jFm7SlGVZGrVwk/rOTTfd3y89xAAAAPaYKRreGEH3QDiN5oVCorKqZjwnY7pjoZRUhB5iAAAAe8wUDW8E6B4wc2Zwb4RCorKqdiSEQkdEIIVaJxM9xAAAAPZCZckqvEOA7gFG84Kjqh0JweyIMNs671DrZKKHGAAAoCJmioYvAnQPVHU0r6TU0Kacw8r46ZCksqCxV5vG9G6FKTMmEwy1TiZ6iAEAABxjpmh4IkD3QFVG89Ky8/Tg8m919OQftmPzN+xWwzo19Y9rz6eXK8yYdZ13KE4Zp4cYAADAsVBYsgrPEKB7wNvRvLTsPN2emunwnkdP/qHbUzP1sokSc6FqzLzOO1SnjNNDDAAAgOqAbdY85OkWZSWlhmau+s7lfWet3qGSUkchkzmUlBrKyDmslVm/KiPnsKnLGmxm3hoslLefs/YQD+/aUr3bsjQEAAAA4YcRdC94Mpq3JTdf+wuLXd7TTIm5yqtsLTWjmhWZfZ03U8YBwDzMlkwUABBcBOhecne9hydBmFkSc52psrXUt6dmqmGdmnbr6oOdBM0MQmGdN1PGASD4zJhMFAAQXExx9zNPgjAzJeaSXK+llmQXnEt/JkFLy87ze/nMyrrO21moa1FZAyzY67yZMg4AwWPtAC+/JIp6FACqNwJ0P+uZGKu4BlEurzNDwFaeq7XUjlgDd7OvqfenUF7nDQDwP3c6wKtzPQoA1RkBup9FRlg08+rzXF5nxoDN2yn3wUyCZhaeJhMEAFQfZk4mCgAILtagB8CgTvF6eWz3CvugS1KjOjU1x6T7oFd1yr0Z19QHEuu8AQCOmD2ZKAAgeAjQA8QarG3KOayMnw5JKlv/26uNedf+utoz2xWzrakPBneTCQIAqo9QSCYKAAgOAvQAioyw6OL2TXRx+ybBLopbrGupJ6dmyiK5HaRbVDaV22xr6gEAMANXHeDUowBQfbEGHZVytpa6UZ2akkiCBgCAp0gmCgBwhhF0uORsLfW6Hfsr7N8ax/6tAAC4ZO0Apx4FAJyJAB1ucbSWmiRoAAB4j3oUAFAeATqqhCRoAAB4j3oUAHAmAnQTKSk16EUHAAAAgGqKAN0k0rLzKqxDi2cdGgAAAABUG2RxN4G07DxNTs20C84laX9BkSanZiotOy9IJQMAAAAABAoBepCVlBqatXqHw31Qrcdmrd6hklJ3dyEHAAAAAIQiAvQg25KbX2Hk/EyGpLyCIm3JzQ9cofygpNRQRs5hrcz6VRk5h+lwAAAAAIByWIMeZAePOQ/OvbnOjFhfDwAAAACuMYIeZM3qR/v0On/zdCSc9fUAAAAA4B5G0IOsZ2Ks4mOitb+gyOE6dIukuJiyLdf8yZ0t3jwdCXe1vt6isvX1yUlxbCcHAAAAoNojQA+yyAiLZgxL0uTUTFkku2DWGrLOGJbk1wDWncDbOhJePti2joQvGNu9QpDuyfr63m0b++rjAAAAAEBIYoq7CQzqFK8FY7srLsZ+GntcTLTDwNeX3JmC7m2m+eqwvh4AAAAAfIURdJMY1CleyUlxLqeZ+5K7U9DrR9f0aiQ81NbXAwAAAEAwEaCbSGSEJaBTvd2dgp6Rc9it+5UfCTfL+noAAAAACAVMca/G3J9a7t6e5eVHwq3r66U/19NbBWp9PQAAAACECgL0aszdqeW92zRRfEx0hSDbyqKypHKORsKDub4eAAAAAEIJU9yrMXenoPdq27hKmeaDsb7eEXe2kgMAAACAYCFAd1M4BneebPFmHQkvvx1bXCX7oJd/VjC3UvN0D3cAAAAACDSLYRjuLTAOUYWFhYqJiVFBQYEaNGjg1T3CPbjz5POFYkeFsz3craVmqj2AQPNF3YQ/8X0CAMzG27qJAN2F6hLchWLg7Y6SUkN956Y7zVZvncb/+QOXh8XnBRAaCCh9i+8TAGA23tZNTHGvhLv7hCcnxYV8cBfsKej+4u5WcuX3cAcAAACAQCOLeyU8Ce5gTu5uJef+lnMAAAAA4B8E6JUguAt97m4l5+51AAAAAOAvTHGvRCCCu3Bd+20W7m4l52gPdwAAAAAIJAL0Svg7uAv37PBm4MlWcgAAAAAQTExxr4Q1uJP+DOasqhrcWbPDl1/jvr+gSJNTM5WWnedFieGIdQ/3uBj7mQ5xMdFhk4UfAAAAQOhjBN0Fa3A3c9UO7S/8M5iOq8JId3XKDm8WgzrFKzkpjuUEAAAAAEyLAN1t9uF0VbaPZ+uv4AjXreQAAAAAhAemuLtgnYq+v7DY7viBwmKvp6KTHR4AAAAAUB4j6JUoPxV9T/Rou/Pfl56lCavn2aaiu5uRna2/AAAAAADlEaBX4syp6HVUcTS7Y8TPyii+Vppd9jpS0qiipbbzzjKys/UXAAAIBLZzBYDQQoBeiTOnmJ+Ue6PZdqPsxVJi6hItGNvDLkhn6y/XaFAAAFA1bOcKAKGHAL0S5aeYJxQt1c2RH+mxmm+4fY/c6DHSeyr7kaQHf5aiG9iyw5evOKuSHT5c0KAAAKBqrDl0ys/Us27nGorbjNJ5D6A6sBhVSUceAgoLCxUTE6OCggI1aNDAo/eWlBrqOze90qnoj9Z+VxONFV6Xr2TSBm0pbk1l83+cNSis30goNigAoLyq1E2oiO/TnrX94mzHGOtSus8fuDxk2hx03gMINd7WTWRxr4R1Krr0Z4BoZX39a/f7lVC01PYz7Y8Jnj3j1cvUe3EbDX8/Sb0Xt1Hkxn9UveAhytX+8FLZ/vAlpWHdpwQAQJV4sp1rKLB23pf/TNbZAN7sqAMAZkWA7oJ1KnpcjP1097iYaC0Y210DkuLsjqeWJNsF7Pf+frtnD9z4D2lmzJ8/T7Sq6kcIGWZsUJSUGsrIOayVWb8qI+dw2HQOhOvnAgCE13audN4DqG5Yg+6GQZ3ilZwU53DdU0mpUWlG9hWllygj6so/p5H9/JW0aID7D//9WFmgfqaZBS7fForrtMzWoAjX6XTh+rkAAGXCaTtXTzrve7dtHLiCAYCfEKC7KTLC4vA/fo8zsp91oX2AfWSvNK+zZ4VxEbAHKwCraqeAmRoU4ZhcRwrfzwUA+FM4bedqts57APA3jwP03NxcffbZZ9q7d69Onjyppk2bqlu3burdu7eio83fE+sPzjKyN28QpVE9z1bx6VJl5Bx2HLA2am0fYJ8ulh5v5lkBygXsk4uWBjwA80WngFkaFK6m01lUNp0uOSnO9LMSzhSunwtA6KNt4VvhtJ2rmTrvASAQ3A7QlyxZonnz5mnr1q1q3ry5WrRoodq1ays/P185OTmKjo7WmDFj9MADD6h169b+LLMplZ8Gv+fQSb295X967uMfbde4FbDWiKo4hb38iLkLuWfuxa6y7eH8GYD5alTWLA2KcJ1OF66fC0Doom3hP+GynatZOu8BIFDcCtC7deumWrVqKSUlRf/5z3901lln2Z0vLi5WRkaGli1bpgsuuEAvvfSSbrjhBr8U2Mys0+DTsvP0/Mc/+GQUOy07r8KI+J5yAbgrdtcXSxm5P/ksAPP1qKwZGhTBmk7n77wBTBMEYCa0Lfyvshw6ocIsnfcAEChu7YO+du1aDRw40K0bHj58WHv27FGPHj2qXDhfCPTeqL7ce9Tde2UUX1u1Qj+cJ9Wq49VbM3IOa9TCTS6ve/vWXh51CgQzyZ2/PlNlApE3IBifC4Bj7Nvt27YF32f4I8EpgFDjbd3k1gi6uxWoJDVu3FiNG1ffxr0vpxG7e6+MW8tGxK0BmKcj7HqiXMU2KV1q5V4Hi79GZZ0l5QuEQE+nC1TiNqYJAjAT2hbwRDjMBgAAd3icJG7//v3avHmz9u/fL0mKi4vTRRddpLi4OBfvrB58GbB6ei9rAJZYULUp8Xr1cvvXF0+Rkmc7vDQck7cEcjpdIBO3MU0QgFnRtoA7gtl5DwCB4naAfuLECd12221atmyZLBaLYmPLRtny8/NlGIZGjRqlf/3rX6pTx7up0uHClwGrp/dyFoAlFC21BWALxnbXoPc6unVfmy/mlf1Y1awjPZInKXxHZQO1Fj7QidvMsMYfAKxoWwAAYM/tAH3KlCnasmWL1qxZowEDBigyMlKSVFJSovXr1+uuu+7SlClTtHDhQr8VNhT4MmD15l5uBWCdymWJf/0qae8Xbn0+SdIfJ22Z5SMlZUhK1NKwG5UNxHS6YCRuY5ogALOgbQEAgD23ksRJUqNGjbRmzRr16dPH4fkvvvhCQ4cO1ZEjR3xawGPHjunRRx/VihUrdPDgQXXr1k3z5s3ThRde6Nb7g5E4xrqmWHIcsHqcxd2Le1UpyVrmW9Kqu9y71omEoqUkb3EDiduA6omkZmV81bbg+wQAmI1fk8RJUmlpqWrVquX0fK1atVRaWur2g901adIkZWdna/HixWrRooVSU1M1YMAA7dixQy1btvT583whOSlOUwe01+tf7NHRU3/YjnszjdjbKclVWqfVfVzZj9WRvdK8zh7dYk/0aKlY0nv/91N+b3dICt8lAgDgjmC1LQAAMCu3R9DHjBmjnTt3atGiRerWrZvduW3btunWW29Vx44dlZqa6rPCnTp1SvXr19fKlSs1ZMgQ2/EePXpo8ODBevzxx13eI9C96o62AWlYu6YmXJyoOy9v5/U04mBuO1ZBaak0u1HV7kHAbuPLGRcAQgMjvmV81bbg+wQAmI3fR9Dnz5+v0aNHq0ePHmrUqJGaNWsmSTp48KCOHj2qgQMHav78+Z6XvBKnT59WSUmJoqPtk6XVrl1bn3/+ucP3FBcXq7i42Pa6sLDQp2WqjLPtsgpO/aHnP/5BHeLqeR1omSpzaURExQD7/9aku6389dU4YCdxG4Dqytu2RSDrelN1kAMAwp7bI+hWO3fu1KZNm+y2Qundu7c6dvQwM7ib+vTpo1q1amnp0qVq3ry53n77bY0fP17t2rXTrl27Klw/c+ZMzZo1q8Jxf/eql5Qa6js33WlGbutU5c8fuLx6VOyeBuzlzTgqWQWxL2cAACAASURBVKrB93QGGoFA9cGIrz1P2xaBqusdzYojvwoAwB3e1vUeB+iBlpOTo4kTJ+rTTz9VZGSkunfvrnPOOUdff/21du7cWeF6R73qZ511lt8bQST7cqGqAft9u6T64bkfLoE5UP0QoFdNIOp6Z7PiWH4EAHCH36e4S9Lvv/+u999/XxkZGXa93H369NHw4cMrTfTirbZt22rjxo06ceKECgsLFR8fr5EjR6pNmzYOr4+KilJUVJTPy+FKMLbLCilVnRL/TAf719ctks6/vmplMgFGZwBUd960Lfxd15eUGpq1eofD5J2GyoL0Wat3KDkpjg5VAIBPRbh74e7du3Xuuedq/Pjx2rZtm0pLS1VaWqpt27Zp3LhxOu+887R7926/FbRu3bqKj4/XkSNHtHbtWg0fPtxvz/JGs/rRri/y4LqwN7PA/sdT/7mlLMi3/rx1je/L6GfW0ZnyyyL2FxRpcmqm0rLzglQyAAiMYLctnNmSm+90yZpUFqTnFRRpS25+4AoFAKgW3B5Bnzx5ss4//3xt27atwhB9YWGhxo0bpzvuuENr1671aQHXrl0rwzDUoUMH7d69W/fff786duyoCRMm+PQ5VeXudlmlpYZWZv3KVObyqjrC/tOGkEo8x+gMAASvbeEKs+IAAMHidoD+xRdfaMuWLQ7nzzdo0ECPPfaYLrroIp8WTipL+PLQQw/pl19+UWxsrK677jr9v//3/1SzZk2fP6sqIiMsmjEsSZNTM2VRxe2yDEmn/ijRmEWbbceZylyJ8sH18tuk7cs8vId5A3ZPRmeqZc4CANVCsNoWrjArDgAQLG5PcW/YsKH27Nnj9PyePXvUsGFDX5TJzo033qicnBwVFxcrLy9P8+fPV0xMFROO+Yl1u6y4GPsKu2Gdss6Eoyf/sDvOVGYPXPsv+ynxY/7j+T3OnBJf1aR1VcToDAAEr23hinVWnLP5SxaVdbL3TIwNZLEAANWA2yPokyZN0rhx4/Too4/qiiuuUPPmzSVJBw4c0Pr16/X444/rrrvu8ltBQ8WgTvFKToqzZeVuUi9K9/07y+G1oTyVOeiZx9sPsB8RP3VEmpvg2T2COMLO6AwAmLdt4WpWnCTNGJYUUvU2ACA0eLTN2ty5czVv3jzt379flv/bo9owDMXFxWnq1Kn6+9//7reCeivYW9mE4/ZrIZN5vKqj5H4M2EtKDfWdm+4yZ8HnD1xOAxAIQ8Gum8zEF20Lf32fIVPfAQBMJ6D7oP/00086cOCApLKtUBITEz29RcAEuxG0MutXTVnmeAT9TPNu6qrhXVsGoERVE9L7wposYLd+l5Lj0RlTf5cAqiTYdZMZVaVt4c/vM+gzxgAAISkg+6BbtWnTxuk+5LAXTlOZQz7zeFUzxZe//tFDUqT3yQqtOQvKj87EMToDoBoya9siMsISMjPcAAChz6MAfceOHZo/f74yMjK0f/9+SWW93L1799add96ppKQkvxQylLm7/VooJJoJu8zjVQ3YH2ti//rOrVKT9h7donzOAkZnAFQ3tC0AAPiT2wH6f//7X11zzTXq3r27hg8fbpfIZd26derevbtWrlypgQMH+q2woSicEs2Efebxqgbs8y+wfz34Semi21y+jdEZANUVbQsAAOy5vQa9S5cuGj58uGbPnu3w/MyZM7V8+XJt377dpwWsKrOs8zN7ohl31tiFY8I7j1R1DfvZfaSJ//VNWQCENLPUTcHmq7YF3ycAwGz8niSudu3aysrKUocOHRye37Vrl7p27apTp065/fBAMFOlbdZEM+52HpB5vJwFfaUD31btHgHc2s0bZv2bBUKdmeqmYPJV24LvEwBgNn5PEpeQkKA1a9Y4rUTXrFmj1q1bu/3g6siMU5mdZWXfX1CkyamZdpnEw2m6/pm8DkInf27/estC6cO/efbwIO7F7orZZ30ACH20LQAAsOf2CPq7776r0aNHa/DgwRowYIDdOrH169crLS1NS5cu1XXXXefXAnuKXnXnrCPizhK/ORsRD6fAza+f5dCPFdeleypIAXtIb6cHhADqpjK+alvwfQIAzCYg+6B/+eWXeuGFFxxmWp0yZYp69+7tecn9jErbuaqsKXc16hwKU6MDHoSW/FEx87unAhCwe9txA8B91E1/8kXbgu8TAGA2AdkHvU+fPurTp4/HhYM5eZKV3VHA7Wy6fiiMsAdlT/fImr7fi90PAXvYbacHwNRoW7gnFDq+AQBV51GAjvDSrH60W9ftOXSiwoiqs4DbkzXtgVS+YVNaapgjCDVhwB722+kBgBeCGSCHQsc3AMA3PArQP/zwQy1fvlyxsbGaMGGCzj33XNu5I0eO6LrrrlN6errPCwn/6JkYq/iY6EqzsjesU1PPffxjhXOOAu6gjEq7wVHDpmHtmm69N+BBqK8D9ofzpFp1PLqFux03TepFeXRfAHAkFNoWwQyQve34ZsQdAEJThLsXLl26VFdffbX279+vjIwMde/eXUuWLLGd//3337Vx40a/FBL+Yc3KLv257trK+tpZggLr8Vmrd6iktOyVJ1Oj/amk1FBGzmGtzPpV8z7+UZNTMyuU6+ipP9y6l7vBqt/MLLD/8dQT8WVBu/Xn4Pcu32LtuHHVjLvv31lKy87zvEwA8H9CoW1hDZDL1yPWANmf/w+66viW7Othq7TsPPWdm65RCzdpyrIsjVq4SX3npvN/NgCEALdH0J966ik9++yzuvvuuyVJ//73v/X/2bvz8KbK9P/jn7RAi1jKTguWRUCg7IgsgiIqAiowzrgOOAh+XRjcwPEnyiAgKjKjuI0ygo6iDDpuiOiAoiKKgiwVtJZ9VSyi4LSAtEB6fn/EFNKm7Ul6kpyT835dV66LpHnC3bTNc+5nuZ9Ro0apoKBA119/fcQCtIt4HYke2D5dM4d3LTUzkJaarKvPaqLHPtxcZtuSy8DtsDQ62CxHOPyF0Lo3r2NNYFap7Az7Mz0C71/xotTusoCHyjtO72Q/5hfGdNsCAOez+7VFrFeGhVMTxK5bzQAA5phO0Lds2aLBgwcX37/yyitVv359DRkyRMeOHdNll11WTmtnc+Ler1AGFAa2T1f/zLRSz3/36x9M/V/+hNvsbLOZ54UzIFLWRUmoHHWme8mE/Z99pL3fmG//+nW+m985f5EumFg8cDP5nRztzQ9+cRjLbQsA4oPdry1iXTQz1IHvWA8oAAAqz3SCXrNmTf34449q3rx58WP9+vXTu+++q0svvVTff/99RAKMNSeORIczoJCY4Cl1cRFqwm1mT7uZWelw4i/voqQitapXDVjynmbzwZdy3bw88P6Xz0qL/p/59p894rtJGiipT+1Mtc//a5lPp6I7gMqw+7VFrFeGhdoPx3pAAQBQeaYT9O7du2vRokXq2bNnwON9+/bVwoULdemll1oeXKw5cSTaygGFUBPu8pZGm52VDjf+ii5KyvP0sK5K8HjibvuCJKnHTVKPm4oHPerkb9B7SRNMNz/1lxztTP5jwGPNCuaVeh4V3QGEw+7XFlauDAtHqP1wrAcUAACVZ7pI3NixY5WcHLwDOu+887Rw4UL96U9/siwwO7BL0TOzKhpQMCRNfufbUsVkymKmiFzJhNu/NDotNfB3JS01ucLBgXCL4UjhXWx45JuZ73l6XfVqUVdDOzdWrxZ14yc5/83JBY6+NZqrWcE8NSuYp+YF89Su4F8hv97O5D8G3CQbFNMD4Eh2v7aoqGimvx+JVL2SUPvhWA8oAAAqz/QMet++fdW3b98yv96vXz/169fPkqDswmkj0WZmkffmF+ofH2/V7Re2MvWa5RWRK2sZeFl72itKfCuzNC/Uiw277zO3qihhRYMevypZvZLe0vK7z/e9vmFIU2qF9H/sTP6j9PJJD1hwFjsAd7D7tYUVK8MqK5R+2KqtZgCA2DGVoB8+fFg1atQw/aKhPt+unDYSbXag4LEPN6t12qmml7qHk3AH29NekcoMiFR0UVKSnfeZW1mUMORBD4/H+rPYSdgBBOGUa4twBqojEYOZftgOAwoAgMoxlaC3bNlSt99+u0aMGKH09OAdkWEY+vDDDzVjxgyde+65uueeeywNNBacNhIdykBBqHvnw0m4Q1WZAZGKLkoMSWMvbKVm9WrYep+51UUJLVkFMjkvYNCg5J70CpVM2Cf9zzcQAMDVnHRtEe7KMCuZ7YftMKAAAAifqQT9k08+0b333qvJkyerU6dO6tatmxo1aqTk5GT98ssvysnJ0YoVK1SlShXdc889uummmyIdd1Q4bSTaP6BgpliaHau4VnZAxOkXJZEoSmjVKpCTL04XHMwJvDgNdYa95BL6e3+Qqjl/xQ2A0Djt2sKqgWqrtjCVxw4DCgCA8HgMwzB9MtXu3bv1+uuv67PPPtOuXbt05MgR1atXT126dNGAAQM0aNAgJSYmRjLekOXn5ys1NVV5eXmqWbNmWK/hpHPQF2fn6ua5Waae+8TVnTW0c+MIRxQa/wyyFHxAxMwMcjQufiJhxbb9umb2ygqf98oNPU1fJHqLDPWZ/nGFgx7Fe9CtMGewtOPT8Nvf/rVUu2nxXaf+PIHyWNE3xQsrri2c8n466XoCAFA54fZNISXoTmRVp+2kJOGJDzfrsQ+3VPi8UBK9aHLrBcyCdXt0+6vrKnxesIGV8n4/rRj0qJRPHpY+mRZ28z9XvV//Pdiy+L4bfhcQ/5ySUDqFE97PsrYwRe2zGAAQVSToZXBCp201b5Gh3g9/rL35wZe6R2TW1GJOGhCxSrgz6GYGNGw16LHhXek/w8Ju/pdjN+lNb18uZuFobuybIsnu76d/NVNZW9Cc0C8DAEJDgl4Gu3fakRLzWVOELJzl6KHMyNh20GPfBumZnuG373GzNGi6dfEAUeDWvilS7P5+RmILEwDA3sLtm0yfgw5ncXrBNDcKtShhqEXlolGJPywN2gYexXbkF2l6M/Ptv/yn7+bXqIt04ycWBQcAlWfJiRoAAFcgQY9jVHF1nlAGVkI+49wpqtfWgt/lFO/HT1CRticPN9/+h684ix2ArVh1ogYAIP6RoMc5286aokxmB1bieUbm5IvUIiWoWcG8gK9X+ix2EnYAUVTZY0QBAO6RYPaJhw8f1ujRo9W4cWPVr19fV199tX766adIxgaUy1tkaMW2/Vqwbo9WbNsvb1H8lFPwD6wM7dxYvVrUDbrqIZ5nZPwXs2Wt9WheME+9kt6S977/hZdsT04NvAGICbdcW/i3MEkq9bkWbAsTAMC9TM+gT5w4US+//LKGDRum6tWra968ebrxxhs1f/78SMYHBBWpquS2LaQWRDzPyIS6H79Ukh5q0l3y+fcdkBLKP3cZQOW56dqC2jAAADNMV3Fv3ry5/va3v+mKK66QJK1du1Y9e/bUkSNHVKWKfVfK272yK0IXqbNkbXUUmUnxXq3fsp/JrPN8e9PDNf47KZnPD1iHvsnHqmsLJ72fThoIhnn8XAGUFPFj1qpWrapdu3apUaNGxY+dcsop2rhxo5o0aRJ6xFESq06bD+rIiNRZspFK+qPBiQMLoYjI39Ki8dKXM8Nvf8c3Ui37fu7B/pyUUEaSVdcWvJ+IpXjvhwGEJ+LHrBUVFalq1aqBjatUkdfrNR+lS/BBHTkrt+23vHJ5qMeV2U28V+uPSKHDQQ/7bn5f/Vta8Gfz7R/vEHj/+g+ljLOsiQ1wEa4t4HRlDfDvzSvQ6LlZth7gB2BPphN0wzB0wQUXBCw5+/XXXzV48GBVq1at+LGsrCxrI3QYPqgjZ3F2rsa/+Y2p54ZSuTwejiujWn8ldRnmu/ntyZJm9zPf/vkLA+9f8x+p9UBrYgPiGNcWcDInD/Cz0hOwL9MJ+qRJk0o9NnToUEuDcTqrPqj50CytrIGPsoRSudxsMr8oO1eS+Hm4QeOugYXnDv0kPdLSfPtXrgq8P/Bhqedoa2ID4gjXFnAypw7ws9ITsLdKJegIZPaD+sXPd6heSlLQ5JsPzdLKG/goKZzK5WaT+ZdW7NJLK3a5/ufhSqfWD0zYjxVIDzY0337xeN/Nr+sIaciT1sUHOBTXFnAyswP8oazqizRWegIVOH5UqlKt4udFUFjl13/++Wft3LlTHo9HzZo1U9269hkVjCWzH8BT39tQ/O+Tkz0+NIOraOCjpFDPkq3ouLKS3P7zgKSqyYEJu2FIU2qZb581x3fza3ymdMPH1sUHOBDXFnAaswP8oazqiyQnL8kHIubwz9Jnj0ornznx2GndpevelaokxSSkhFCe/O233+rcc89Vw4YN1aNHD3Xv3l0NGjTQ+eefr02bNkUqRscI5wPYn+z99+vccj80Jd+HprfI7CLv+GF24KNW9aphJc3+M7elE1Xby+P2nweC8Hh8CfvJt1DsWes7i/3kG+ASXFvAqfwD/GVdO3jkm4gJZVVfJIWyJB+IW8eOSJ8/Kd1f13e99fcWgcm5JH2/Sio8FJv4FMIM+t69e9W3b1/Vr19fM2bMUJs2bWQYhnJycjR79mydc845ys7OVoMGDSIZr62FOhMrnRixnLggW/sPHy33eXbcxxQNZgc+nh7WVb1b1gvr/xjYPl0zh3cttb2gLG7+ecCkkkn6M72kfTkhtC+RpE/6n28gAIgjXFvAyfwD/KPnZskjBVz7+T+tQ13VF0lOXJIPVFpRkfTtW9KHU6S83ebaDJwu1Yjd9b3pBP2xxx5T06ZN9fnnnys5+UTCNHDgQI0ePVp9+vTRY489pmnTpkUkUCco74O6PIZUbnJ+Mjd+aFY08OHfd97z9Mr9IZ18XNmi7Fy9tGJXhW3c+PNAmP68IvD+WzdJX79qvn3JJfQTf5YSqwZ/LuAQXFvA6coa4E+zYb0apy3JB8K2c7n00f3Sd1+ab5P5O6nfBKn+GZGLyyTTCfqSJUs0fvz4gA7Ur3r16rrrrrv0t7/9zfWdaKgzsaFy44dmNEeoTz6uzEyC7safByzy+2d9N7/lj0sfhlAwa2qJ1SJ375Kqh7APHrABri0QD04e4LfzCTxmJzzssiQfMO2nzdLSB6ScBebbZPSQLrhPatYncnGFyXSCvn37dnXt2rXMr3fr1k3bt2+3JCinK/lB/fPBwoDCcGWpU6Oqfjl8jA/NIKI9Qk0nhqjrc4fv5pfzjvTatebbT28aeP/29VLtZpaEBkQK1xaIFycP8NuV05bkA2U69JOvsNuXM823qdVEumCS1O73UkJIZdiiznSCfvDgQdWsWbPMr6ekpOjQodhtprebkz+ovUWGnlu+o8Jkb+IlbTVm3ld8aJYhmiPUdGKIucwhgfvY92RJs/uZb/9Ep4C73wx4Xdurt7PtzA7ciWsLILqctCQfKHb0V2n1bN8+csNrrk1CVenCSdJZ/ydVrR7Z+CwW0jFrBw8eDLoMTZLy8/NlGFS0DsZssjewfbpmJnj40CxHNEeo6cRgK427Bibsed9Lj7Uz3bzD+1eow0n31/SZrW4XXmldfECYuLYAosspS/LhYkVeKftNX0Ke/735dj3HSOeMk2qEVzTaLjyGyZ4vISFBnnIqCBuGIY/HI6/X5KhGlOTn5ys1NVV5eXnljtJHw+Ls3FLJXnqQZM9bZBR/aNarkSR5pJ8PFfIBGiMn/zz4GcC2Cg9K004Lv/3Qp6Uuw62LB+WyU98US1ZdW/B+AoDD7fhM+miK9P1q823aXeYr7FavVeTiqoRw+ybTM+hLly4NKzCccPKI5d78Ah04VKg6NaoptXo1eYuM4qTPP0u8ODtXf3ljfYUJPSLLCfvKACWlBMywe48fV+IDIfzeLhjju/ld+pjUbZSFAQKlcW0BAC710ybp46nShoXm2zTpJZ0/UWrWO3Jx2YDpGXSnsuOoupmZ9MXZuRo9N6vUnnX/PMPM4V1J0h2KGXlEw4pt+3XN7JUBj21MGqFkz7HwXrD3HVL/KRZEBsmefZOT8X4CgM0d2id9+oi06tmKn+tXu5mv0nrmZbYv7BZMxGfQS/r2228DlpwlJiaqXTvz+yHdqqzEe29egUbPzdLM4V3VPzNNUxbmBC0oZ8iXpE9ZmKP+mWkkdjFQmQTb7DYHoLL2HSx9zGObwjkB91+vNllnJWw294KfP+67+bW7TLrixUpECJTGtQUAxImjv/qS8Y/ul4wic20Sq/kqrZ91veMKu1nJdIL+2Wefady4cVq92rcvoGfPnvr111+Li7d4PB69//77uvDCCyMTaRzwFhmmEu+U5KrlnqFuSMrNK9CqHQdYeh1lZSXYEy/JVO0a1cpN2s0MzpCkwyoNUoIX3TrZFUcn65Ubep74HPniH9IHE8z9B9/O9938GraXbl4ulbOfGCiJawsAiBNFXumb130Jef4e8+163SL1Gev4wm5WMp2gP/PMM7r22sAzeZcuXaqmTZvKMAw9+eSTmjlzJp1oOVbtOGAq8V6xbb+p1ws2Q4bIKSvBzs0r0J/nZQU8VnJW3OzgDKsiYJXuzesoPTW5wuMduzevc+LBs2/x3fyy35LeGGnuP/wxW5pS68T9xCTp3j1SYtVwwodLcG0BAA62fZmvsNuetebbtP+DdN69Ur2WkYvL4Uwn6GvWrNGECYEzK6eddpqaNm0qSbr22mt1ySWXWBtdnDGfUJsrC2BmhswunL7vurwEO5iSs+JmB2dYFQGrmD3esdy/w/a/9938dn0hvTDIXADeQmlqidHwe773FbMDfsO1BQA4yL6NvsJuG98136Zpb19ht6a9IhdXnDGdoH///fdKTU0tvj9nzhylpaUV369Tp4727zc38+tWZhPqXqfX05tZe0Kb+bKxeNh3XVGCXVLJWXGzgzOsioCVBrZP18zhXUv9/aWF+/fX9OzAs9h/2iQ93d18+5LHwI3bKNV0xmcAIoNrCwCwsYM/Sp89Iq2aZb5N7ebShZOktkMdWdjNDkwn6CkpKdq2bZsyMjIkSb///e8Dvr5jxw4qp1bA7JLTni3qVn7myybiZd91OInzybPiZgdnnLQqAs5w8vGOlq9gqd86MGE/uFd6tLX59jPaBN7/85dSgzbBn4u4xLUFANjI0cPSl//07SM3q0qyr7Bbt1FSVa5jrWA6Qe/Ro4deeuklnXfeeUG//uKLL6pHjx5WxRWXQllyavnMVwzE077ryiTO+w4W6NKOjULfD4yocvo2jPIkJniis3UiJS0wYS88WHrWvDzPlOhD/rxSatDWmthgS1xbAEAMFXmlr1/z7SM/mGu+3dm3Sr3HSjXYlhkJphP0cePG6cILL1TdunV11113qUGDBpKkffv2afr06Zo7d64++OCDiAUaL8pKvGvXqKoHhrYPSLwjOvMVBfG079q/+iGUZe5+DVKSrdkPjIiJh20YtpSUEpiwe49J05tJRw+Za/9Mz8D7oz6QmpCsxROuLQAgyrZ/In04Rfohq8KnFutwhXTePVLdFhELCyd4DP9ZJiY888wzGjt2rI4fP66aNWvK4/EoLy9PVapU0aOPPqpbbrml4heJsnAPiI+0/36dq78uyNaBw0eLH4tUQhCrmcEF6/bo9lfXVfi8J67urKGdG0c8nsqa9t8cPfvpDtPP98+KL7/7/OL3m0TQfsrahuH/C3HKNgxHMgxp1nlSbsWfE0Fd/YrU5mJLQ4oWu/ZNsWDFtQXvJwCUYd8G6eMHQizs1ke64D4GxSsp3L4ppARdkr777ju98cYb2rJliySpVatWuvzyy4v3j9mNHTvtaCYEsUwIV2zbr2tmr6zweQHnMNtUWT+zspT3s4znpdRO4y0y1Gf6x2WujAg2yIIIW/G09P694bUd/KR05ghr44kQO/ZNsVTZaws3vJ/0HQBMObhX+vTv0urnzLepc7pvH3nbIRR2s1DUEnSnsVunHc2EINYzg/7vtaJ913ZPfir6mUlSgkcqOumbZFbcGeJpECluff269Nb/hde23wSp7/+zNh6L2K1vcrp4fz9ZfQWgTIf2Se/dKW14x3ybqqf4ZsjPHElhtwgKt28yvQcd1ojWvmw7FGiLl33XZo5YKzKkiZe0Vb2UJGY2HITj7xyg4xW+m9+2j6WXLzPXdumDvpskNe4m9b1batVf8vC3CeeIl9NQ3ITVDoio40elub+Xdn4WWrvet0u975BOoSCx3ZGgR1m0EgK7FGiLh2r0Zn8W9VKSHLGXHidw/J0DtTg/sPDcD1/59rFXZM8aad5JiX79ttK5f5HaXSYlJFoeJmAFOwy2IzSsdoDlDENacp/0xZOhtetwpdTvHt/ydTgKCXqURSshsNPMoNOr0ZPExS9/dX6Ov3OwRl0CE/b926Snulbc7qcN0pvX+26SlJohnXuX1OkaqUq1yMQKhMgug+0wh9UOsMw3b5zon8yqXke65lUKu8UBEvQoi1ZCYLekMpxzmO2yRIwkLn7FyzYMnKRuixJnsR+S1vxL+vQRqTCv7HZ530kLb/PdJCm5li9h7zZSqlYjsjEDZbDTYDvKx2oHVIrZ1WAldbhSuuxZCrvFGRL0KItWQuD0pNJOS8RI4uJbPGzDQDmSTpV63+a7SdLxQmndv6Vlf5cO/lB2u4L/SR9M8N0kyZMonT9B6jOOPeyIGrsNtqNsrHZASA7+KD3RUToe4uBanRbSjZ9IyfFXDBMnhJyg165dW54gFycej0fJyclq2bKlrrvuOo0cOdKSAONRNBICJyeVdlwiRhIX35y+DQMhqJIkdRvlu0mS97j07XzfkTQ/byq7neGVPrpf+t9uafAT0YnVRbi2CM7pg+1uwmoHlOt4ofTS76TdX4Te9rav2EfuMiEn6Pfdd58efPBBDRo0SN27d5ckrVq1SosXL9aYMWO0Y8cOjR49WsePH9cNN9xgecDxIhoJQTSTSquWo9t5iRhJXHwLZxsG4kBilcBK8YYhbV4sLfub9ENW6efv/Sa68bkE1xbBOXmw3W1Y7YAAhiG9P0Fa+XTobf+0QDr9PKsjgoOEnKAvC7mHIQAAIABJREFUX75cDzzwgG6++eaAx5999ll98MEHevPNN9WxY0c9+eSTrupEwxGNhMBMUlnZ5NrK5eh2XyJGEgfEOY9Haj3Id5N8F1k7l/tm2FPSpXPujG18cYpri7KxgssZWO0Arf+PNP/G0NsNfFjqOdr6eOBYHsMwgn2OlOnUU0/VunXr1LJly4DHt27dqs6dO+vQoUPatm2bOnbsqMOHD1sabDjCPSDeLSqbXJe1HN2f3oe6HH3Buj26/dV1FT7vias7c6QZAMeibwpU2WsLN7yfdimcirL5r4mk4KsdqOIeZ/aslWafH3q7jldLv5tJYTcXCLdvCvk3o06dOlq4cGGpxxcuXKg6dXyjgocPH1ZKSkqoL40o83ckJWes/Xu9F2fnltu+ouXokm85urfI/BiQnZaIeYsMrdi2XwvW7dGKbftD+j4AAOZxbVEx/wquoZ0bq1eLuiTnNuRf7ZCWGniNkpaaTHIeDw7ule6vJ01O9d3MJuf1Wkv3fO87YWRynvR7qq6jfCEvcZ84caJGjx6tpUuXFu8TW716tf773//qn//8pyRpyZIl6tu3r7WRwlJW7PWOxHJ0uywRs1MVeQCId1xbIF5QryaOHCuQ5gyWvl8Vetvb1kl1mlsfE1wh5AT9hhtuUGZmpv7xj3/orbfekiS1bt1ay5Yt09lnny1JuvNO9ujZnRXJdSQqltqhII4dq8gDQDzj2gLxhHo1DmUY0uJ7pC9nht72T+9IpzOACGuEdQ5679691bt3b6tjQRRZkVxHajl6LAvi2LmKPADEM64tAETdulekt2+u+HklDfq71COMgnCACWEl6F6vV2+//bY2bNggSWrXrp2GDBmixMRES4ND5FiRXHdvXkdpNZO1Nz94El+Z5eixWiJm9yryABCvuLYAEHHfr5GeuyD0dp2HS0OeYu84oiLkBH3r1q26+OKLtWfPHrVu3VqSNG3aNGVkZOi9995TixYtLA8S1rNir/eSnL0qOO4N+jUrlqPHYolYJJbtAwDKx7UFgIjI/0GakSkFvdotR4NM6folUtKpEQkLKE/Iw0C33XabWrRooe+++05ZWVnKysrS7t271bx5c912222WBuf1ejVx4kQ1b95c1atXV4sWLTR16lSFeDIcgvDv9ZZOJNN+ZpJr/z7t//16LOjXa51S1ZF7te1URR4A3CKa1xYA4tixAmlWvxOV1me0lenk/PavT1Ra//MKknPETMgz6MuWLdPKlSuLjz2RpLp16+rhhx+2fO/Y9OnTNXPmTM2ZM0ft2rXTmjVrNHLkSKWmptJhWyDcvd7l7dP2S6qSoP6ZaRZHHHl2qSIPAG4SzWsLAHHEMKRFd0urng297Yh3pebnWB8TUEkhJ+hJSUk6ePBgqccPHTqkatWqWRKU3xdffKGhQ4fqkksukSQ1a9ZMr7zyilatCuO4AwQVzl7vivZpS9Le/EJH7tO2QxV5AHCbaF5bAHC4r+ZKC8aE3u6SR6Wz/s/6eACLhZygX3rppbrxxhv1/PPPF59V+uWXX+rmm2/WkCFDLA3u7LPP1qxZs7R582adccYZWr9+vZYvX64ZM2aU2aawsFCFhYXF9/Pz8y2NKR6Futc73vdpx7KKPAC4UajXFvT1gIt8t0p6vn/o7br+SRr8pORhUgXOEnKC/uSTT2rEiBHq1auXqlatKkk6fvy4hgwZoieeeMLS4MaPH6/8/Hy1adNGiYmJ8nq9evDBBzVs2LAy20ybNk1TpkyxNA4EcsM+7VhVkQcANwr12oK+Hohj+T/8tnc8RA07SNe/L1WrYX1MQBR5jDArrm3ZskUbN26UJLVt21YtW7a0NDBJevXVV3XXXXfp73//u9q1a6d169bpjjvu0IwZMzRixIigbYKNqmdkZCgvL081a9a0PEY38hYZ6jP94wr3aS+/+3wSWgAIIj8/X6mpqfRNJZi9tqCvB+LIsSPSvwZKuetCb3vHN1KtJtbHBFgg3L4+7AQ9GjIyMjR+/HiNGXNin8kDDzyguXPnFnfgFeEiKDL8Vdyl4Pu0nVjBHQCihb7JWryfgIMYhvTendKa50NvO3KR1PRs62MCIiDcvsnUEvdx48aZfsHy9oeH6tdff1VCQuBJcImJiSoqKrLs/0B42KcNAKiMWF1bAIiBrJekd24Nvd2lj0vdRlofD2BjphL0r776ytSLeSwuwjB48GA9+OCDatKkidq1a6evvvpKM2bM0KhRoyz9fxAe9mkDAMIVq2sLAFGwe6X0rwGhtztzpHTpYxR2g6vZeon7wYMHNXHiRM2fP1/79u1To0aNdM011+i+++4zfewKy94AAHZD32Qt3k8gxvK+lx5rF3q7tI7SqPelaqdYHxMQY3G5B90KdNoAALuhb7IW7ycQZQV50sNhFme7I1uqlWFtPIANRXQPOgAAAACXKiqS7q8dXttR70tNelobDxDHSNCB33iLDPbTAwAASNKz50q560NvN/gJ6czrLA8HcAsSdEC+Y+NKVqRPpyI9AABwi08fkT6eGnq7M6/zVVunsBtgCRJ0uJ7/TPeSxRj25hVo9NysmJzpzmw+AMAO6I/i2K4vpBcGhdf2/+2QTqljbTwAJJGgw+W8RYamLMwplZxLkiHJI2nKwhz1z0yL2gUJs/kAADugP4ozh3+W/t4ivLb/95F0Wjdr4wEQFAk6XG3VjgMBFx4lGZJy8wq0ascB9WpRN+Lx2HE2HwDgPvRHcaAyhd0uelA6+xZr4wFgCgk6LOW0pXD7DpadnIfzvMqw42x+ME77GQMAQuOU/ghBPHO2tO/b0Ns17S2N/K/18QAIGQk6yhVKMubEpXANUpItfV5l2G02Pxgn/owBAKFxQn+E33wyXfrkofDaTvofhd0AGyJBR5lCScacuhSue/M6Sk9N1t68gqAzBR5Jaam+gYlIs9NsfjBO/RkDAEJj9/7I1XZ8Js25NLy2d++SqteyNh4AliNBR1ChJGNOXgqXmODRpMGZGj03Sx4p4HvwRzppcGZU4rbTbH5JTv4ZAwBCY+f+yHUO7ZMeaRVe2xuWSo27WhsPgIgjQUcpoSZjTlsKV3LZfv/MNM0c3rXUaoG0KC/dttNsfklO+xkDAMJn5/4o7hV5pfvDfF8HTpd63mxtPACijgQdpYSajDlpKVx5y/aX331+TIuf2Wk2vyQn/YwBAJVj5/4oLv2ju/TzptDbNe8rjXjH+ngAxBQJOkoJNRlzylI4J+yhHtg+3Raz+SU55WcMALCGXfujuPDxg9KnfwuvLYXdgLhHgo5SQk3GnLAUzkl7qAe2T1f/zDRbHWXmhJ8xAMBaduyPHClngfTan8JrO363lJxqbTwAbI0EHaWEmow5YSmc0/ZQJyZ4bBGHnxN+xgAA69mtP3KE/dukp8IsznbjMqlRZ2vjAeAoJOgoJZxkzO5L4dhDXXl2/xkDABAT3uPS1DAHMS5+ROp+g7XxAHA0EnQEFU4yZuelcOyhtoadf8YAAETN5DCXnbfsLw1/w9pYAMQVEnSUKZxkzK5L4dhDbR27/owBAIiY10dK374VXlsKuwEIAQk6yhUvyRh7qAEAgGnZb0lvjAyv7f/bIZ3CgD/gNN4iwxarREnQ4RrsoQYAAEH9slN6olN4bUe9LzXpaWk4AKJrcXZuqRwhPUY5Agk6XIU91AAAQN5j0tR64bU97x7pvPHWxgMgZhZn52r03KxS22D35hVo9NwszRzeNapJOgk6XCdelu0DAIAQhFvYrVZT6Y6vrY0FgC14iwxNWZgTtEaVId9W2CkLc9Q/My1qE3ok6ECM2GWfCwAAcek/10ob3gmvLYXdAFdYteNAwLL2kgxJuXkFWrXjQNQm+EjQgRiw0z4XAADiwtevS2/9X3htx++WksOcYQfgWPsOlp2ch/M8K5CgA1Fmt30uAABnYOVVCQe2S092Ca/t9R9KGWdZGw8Ax2mQkmzp86xAgg5EkR33uQAA7I+VV5KOF0oPNAiv7fl/lc69y9p4ADhe9+Z1lJ6arL15BUGvzz3ynfjUvXn0jk4kQQciJNhMhx33uQAA7M3VK6/CLexWt6V061prYwEQdxITPJo0OFOj52bJIwV8zvqnyiYNzozqxBkJOhABZc10XNw+zVT7aO5zAQDYl+tWXk1tIHkLw2s7Oc/aWAC4wsD26Zo5vGupa/c0zkEH4kN5Mx3Pf77T1GtEc58LrMHeUCD+WfV3HsrrxP3Kq4+mSp89El7b8d9JyTWtjcci9AmAswxsn67+mWm2+LslQY8DdAIVi9Z7VNFMhyQleCTDkG32uaDy2BsKxD+r/s5DfR07VhiulD1Z0ux+4bUd9obUqr+18UQAfQLgTIkJHlsMdJKgOxydQMWi+R5VNNMhSUW/ZeZ22eeCynH13lDAJaz6Ow/ndexYYTgkx45ID5rb3lVKhyulP8y2Np4Io08AUFkJsQ4A4fN3AiUTQn8nsDg7N0aR2Ue03yOzMxijejdTWmrgxVRaajIdt8OYWTExZWGOvEXBngHACaz6Ow/3dfwVhssatvXIN+hsq5VXk1NP3EJNzifnnbg5LDmnTwBgBWbQHcp1RWPCEIv3yOwMRv/MNE24JDMiy+7Z8hA9cb83FIBlf+fhvo7ZCsOStGLb/th89odbaV2Kq8Ju9AkArECC7lB0AhWLxXsUylmKkdjnwpaH6Iq7vaEASrHq77wyr1NRhWFJ6jP94+h99n/wV+mLp8Jre/cuqXota+OxCfoEAFYgQXcoOoGKxeI9iuVZiux7iz7H7w0FUCGr/s4r+zplVRhekrM38p/9u1ZILwwMr+2186UW51fu/3cIN/UJrNYDIocE3aHc1AmEK1bvUSzOUmTLQ2yEsmICgDNZ9XduxeuUXHkVsc/+o4elhxqZf/7JOg+TfvdMeG0dzi19Aqv1gMgiQXcot3QClRHL9yjaZymy5SE2YrliAkBkBJsZNPt3Xt6sYiQ+Lyz97GcfeaW5oU9gtR4QeSToDuWGTqCyYv0eRfMsRbY8xE4sVkwAiIzyZgYr+js3M6to9edFpT77ScgjIp77BFbrAdFBgu5g8dwJWMUt7xFbHmIr2ismAFjPzMzg8rvPD/p3Xl7bm+dmaeyFrdSsXg01SElW/8w0yz4vQvrsf3WYtPHdkP8PSdL43VJyJRJ6l4nXPoHVekB0kKA7XLx2AlZyw3vElofYi+aKCQDWCmVmsOTfuZmzrx/7cEvxY1bu1S3vs79vwnrNqTbdd+flEF/YRYXdIiUe+wRW6wHRQYIeB+KxE7BavL9HsV7ODwBOVpmZwYralmTlXt2TP/tT9Ku+Sf6/8F6o41XS72dVKhbEP1brAdFBgo6I4QiO6HLLcn4AsFplZgZDnS20dK/u5FQNlLQjnHyIfeQIEav1gOggQUdEcARHbLhhOT8AWK0yM4PhzBaGvVeXwm6IIVbrAdFBgg7LcQRHbMX7cn4AsFplZgYralueCmffX7hE2rU8xFf9zd27pOq1wmsLlIHVekDkkaDDUhzB4VxsSQDgVmZmBidekhn0M7K8thUpNfv+9WvSWzeE900Mf0tqeUF4bYEQsFoPiCwSdFiKIziciS0J7sXADOBT3szgkE7pmvpe2Z+RZbUtS/GMfEMj/GXr7f8gXf6v8NoClcRqPSBySNBhKY7gcB62JLgXAzNAoGAzg78cLtSYeV9V+BlZsu3On3/V4x9ulhQ4q74z+Y++fxRKeiTEANlHDgBxjwTd4ew2+8URHM7ClgT3YmAGCO7kmUFvkaE+0z82/RlZclaxddqpGvhGm/CDISEHANchQXcwO85+cQSHs7AlwZ0YmAHMCeszcvYF0p41kqSBof6H43dLyZWo1A4AcDwS9AiL1Ay3XWe/OILDWdiS4E4MzADmmPnsOz8hS71e/mN4/8HVr0htLg6vLQAgLpGgR1CkZrjtPvvFERzOwZYEd2JgBjAn2GdfDR3Rt8nXh/eCrQZIw16rZFQAgHhGgh4hkZzhdsLsF0dwOANbEtyJgRnAHP9n5IrC34f/IuwjBwCEgAQ9AiI9w+2U2S+O4LA/tiS4EwMzQAX2bZSe6aFESStCbUtCDgCohIRYBxCPQpnhDgezX7CSf0tCWmrg70taajKVvOOUf2BGOjEQ48fADFzvy1nSMz1MP711wYtqVjBPvZLe0uLLN0YwMACAGzCDHgGRnuFm9gtWY0uC+1ArAihD9pvlfnlA4cPaZDQp9XguRxQCACxAgh4BkZ7hZlkyIoEtCe7DwAwQRP/7pf/eKe39xnd/+Fvynn6++kz/uNzVcX4cUQgAqAwS9AiIxgw3s18ArMDADFBCkx7SzcsDHlq1bb+p5NwORVoBAM5Ggh4B0ZrhZvYLAIDIC3VLWqyLtAIAnIsEPUKiNcNt9eyXt8gg4QcA4CShbkmjSCsAIFwk6BHktBnuxdm5pQYU0lkyD8ChGHCEVfxb1ypa5k6RVgBAZZGgR5hT9ncuzs7V6LlZpfbM76UqLQAHYsARVjp561qw2jIno0grAKAyOAcd8hYZmrIwJ+hFh/+xKQtz5C2q6LIEAGLPP+BYcrbTP+C4ODs3RpHByfxb19JTgy9fT09NZjAbAFBpzKBDq3YcKHfZHlVpAThFRQOOHnEMFsJ38ta1vXlHdODwUdU5NUlpNdlCAQCwBgk6TFebpSotALtjwBGR5pStawAAZyJBh+lqs1SlBWB3DDgCPhRJBABnIkFHcXXavXkFQZeFUpUWgFMw4AhQJBEAnIwicSiuTiv5kvGT+e9TlRaAE/gHHMv6tPLIl6gw4Ih4RZFEAHA2EnRIOlGdNq1Eddo0qtICcBAGHOFmnMoCAM7HEncUO7k6LXvWADiVf8Cx5BLfNJb4Is5RJBEAnI8EHQGoTgsgHjDgCDeiSCIAOB8JOgAgLjHgCLehSCIAOB8JOgAAQDmccmQZp7IAgPORoAMAAJTBSUeW+Yskjp6bJY8UkKRTJBEAnIEq7gAAAEE48cgyTmUBAGdjBh0AAKCEio4s88h3ZFn/zDTbzUhTJBEAnIsEHQAAoASnH1lGkUQAcCbbL3Fv1qyZPB5PqduYMWNiHRoAAIhTHFkGAIgF28+gr169Wl6vt/h+dna2+vfvryuuuCKGUQEAgHjGkWUAgFiwfYJev379gPsPP/ywWrRoob59+8YoIgAAEO84sgwAEAu2X+J+sqNHj2ru3LkaNWqUPJ7ghU4KCwuVn58fcAMAAPEjGn29/8gy6cQRZX4cWQYAiBRHJehvv/22/ve//+m6664r8znTpk1Tampq8S0jIyN6AQIAgIiLVl/PkWVAad4iQyu27deCdXu0Ytt+eYuCrTEBEC6PYRiO+asaMGCAqlWrpoULF5b5nMLCQhUWFhbfz8/PV0ZGhvLy8lSzZs1ohAkAQLny8/OVmppK3xSmaPf13iKDI8sASYuzczVlYU7ACQfpqcmaNDiTASughHD7etvvQffbtWuXPvzwQ7311lvlPi8pKUlJSUlRigoAAERbtPv6WBxZxqAA7GZxdq5Gz80qVZNhb16BRs/NYlUJYBHHJOgvvPCCGjRooEsuuSTWoQAAABeKVtLMLCXsxltkaMrCnKAFEw356jJMWZij/plpDCQBleSIBL2oqEgvvPCCRowYoSpVHBEyAACII9FKmpmlhB2t2nEg4He/JENSbl6BVu04EPXVJkC8cUSRuA8//FC7d+/WqFGjYh0KAABwGX/SXDJB8SfNi7NzLfl/KpqllHyzlBTlQrTtO1h2ch7O8wCUzREJ+kUXXSTDMHTGGWfEOhQAAOAi0UyaQ5mlBKKpQUpyxU8K4XkAysZ6cQAAgJN4iwyt3LZfK7b/rD2/HIna0l5mKWFX3ZvXUXpqsvbmFQQdrPLId/xg9+Z1oh0aEHdI0AEAAH6zODtX49/6Rv/79VhI7axImpmlhF0lJng0aXCmRs/NkkcKSNL9JeEmDc6kQBxgAUcscQcAAIi0xdm5unluVsjJuWRN0uyfpSwrxfHIV5iOWUrEwsD26Zo5vKvSUgN/19NSkyleCFiIGXQAAOB63iJDk9/5NuR2Vi7tZZYSdjewfbr6Z6ZF5bhBwK1I0AEAgOut2nFAe/MLQ2oTiaTZP0tZ8ki3NM5BdyxvkRFXCW1igoej1IAIIkEHAACuF84e8kglzcxSxo/F2bmlBlvSGWwBUA4SdAAA4Hqh7CG/pV8L9W5ZP6JJM7OUzrc4O1ej52aVqnq+N69Ao+dmsW8bQFAk6AAAwPW6N6+jtJpJFS5zT09N1tj+rYsT83hbvgxreIsMTVmYE/RIMkO+7RFTFuaof2Yavy8AApCgAwAA10tM8GjykHa6eW5Wuc87eb+51cuXSfbjx6odBwJ+L0oyJOXmFWjVjgOslAAQgAQdAABAvr3f/xzeNeg56LVPqappv+9QnHhbvXyZvcrxxWxNg3BqHwCIbyToAAAAv/EXaFu5bb9WbP9Zkm8veM/T6wYsa7dy+TJ7leOP2ZoGodQ+AOAOJOgAAAAnSUzwqHereurdql7Qr1u5fJm9yvGpe/M6Sk9N1t68gqA/W498pwB0b14n2qEBsLmEWAcAAADgJFYuXw4l2YdzJCZ4NGlwpiRfMn4y//2T6xkAgB8JOgAAQAjMLkuuVyNJK7bt14J1e7Ri2355i0rPpdp1r7K3yKgwdpRvYPt0zRzeVWmpgb8vaanJbFsAUCaWuAMAAITAzPLl1FOq6s7X12tvfvlF3+y4V5mCddbx1zSgOj8As5hBBwAACEFFy5cNSf/79VhAci6dKPq2ODu3+DF/sl9WuuaRLzmO1l5lf8G6ksvug8UOcxITfIUGh3ZurF4t6pKcAygXCToAAECIylq+3LBmkmqdUjVoG/9s+5SFOcVLxu20V7mignVSYOwAAOuxxB2IE94igyV0QITw94Vggi1fLjIMDXvuyzLbBKvw7k/2Sy4rT4vysnIrq9MDAMJDgg7EAfYLApHD35c7mR2U8S9f9luwbo+p1/98688Br2mHvcp2LVgHAG5Cgg44nH+/YMkFh/79glSKBcLH35c7VWZQxmwxt38s3ap5q3bpss6NdWFmWnEyHsuZaTsWrAMAt2EPOuBg7BcEIoe/L3eqbJG0ioq+nezA4WN6/vOdumb2SvWZ/nHMC7DZrWAdALgRCTrgYKHsFwQQGv6+3MeKQZnyir6Vxw5V0u1UsA4A3IoEHXAw9gsCkcPfl/tYNShTVoX38thlVUZZsaelJrOlAwCigD3ogIOxXxCIHP6+3MfKQRl/0bfHlmzSP5ZuM/W6dqmSboeCdQDgVsygAw7GfkEgcvj7ch+rB2USEzzq3bJ+yHHYYVWGv2Dd0M6N1atFXZJzAIgSEnTAwdgvCEQOf1/uE4lBmVCKxvmxKgMA3IsEHXA49gsCkcPfl7tEYlDm5NesCKsyAAAewzDi+nyY/Px8paamKi8vTzVr1ox1OEDEeIsM9gsCEWL13xd9k7Wsfj+DnYNep0ZVPTC0vS7u2Miy1zyZ/7eJgR8AiA/h9k0UiQPihH+/IADr8fflLgPbp6uoSPrrgmwdOHxUku/M8qnvbVBCgiesBPrkwmtLcvbq7XU/FL+25FuVMWlwJsk5ALgcM+gAAEQZfZO1IjGDPnpuVqnz0K2c5WbVEwDEN2bQAQAAKslbZGjKwpxSybnkOwbNI99Z5f0z0yqVULMqAwAQDEXiAAAAfrNqx4Ey94lLgWeVm+EtMrRi234tWLdHK7btl7corhcuAgAqiRl0AACA35g9g9zM84IVhktnrzkAoBzMoAMAAPzG7BnkFT3Pv4+95Gz83rwCjZ6bpcXZuWHHCACIXyToAAAAv+nevI7SU5NLnYPuZ+as8or2sUu+fewsdwcAlESCDgAA8JvEBI8mDc6UpFJJuv/+pMGZ5RaIs3ofOwDAPUjQAQAATjKwfbpmDu+qtNTAZexpqcmmjlizch97PKOAHgCURpE4AACAEga2T1f/zLSwziq3ah97PKOAHgAER4IOAAAQRLhnlfv3se/NKwi6D90j32x8efvY45m/gF7J98ZfQK+iVQreIiOsgRMAcAISdAAAAAv597GPnpsljxSQiJrdxx6vKiqg55GvgF7/zLSg7w8z7wDiHXvQAQAALFbZfezxqjIF9Di6DoAbMIMOAAAQAZXZxx6vwi2gV9mZdwBwChJ0AACACAl3H3u8CreAXigz77zfAJyMBB0AAMBFYllkLdwCehxdB8AtSNABAABcItZF1sItoMfRdQDcgiJxAAAALmCXImvhFNDzz7yXNc/vkW+gwa1H1wGIH8ygAwAAxDm7FVkLtYAeR9cBcAtm0AEAAOJcZY43ixR/Ab2hnRurV4u6FSbXHF0HwA2YQQcAAIhz8VJkjaPrAMQ7EnQAAIA4F09F1ji6DkA8Y4k7AABAnKPIGgA4Awk6AABAnPMXWZNUKkmnyBoA2AcJOgAAgAtQZA0A7I896AAAADbkLTIsL4ZGkTUAsDcSdAAAAJtZnJ2rKQtzAo5GS09N1qTBmZWe6abIGgDYF0vcAQAAbGRxdq5Gz80qdW753rwCjZ6bpcXZuTGKDAAQaSToAAAANuEtMjRlYY6MIF/zPzZlYY68RcGeAQBwOhJ0AAAAm1i140CpmfOTGZJy8wq0aseB6AUFAIgaEnQAAACb2Hew7OQ8nOcBAJyFBB0AAMAmGqQkV/ykEJ4HAHAWEnQAAACb6N68jtJTk1XWoWce+aq5d29eJ5phAQCihAQdAADAJhITPJo0OFOSSiXp/vuTBmdybjkAxCkSdAAAABsZ2D5dM4d3VVpq4DL2tNRkzRzetdLnoAMA7KtKrAMAAABwC2+RoVU7DmjfwQI1SPEtVQ82Gz6wfbr6Z6aZei4AIH6QoAMAAETB4uxcTVmYE3CMWnpqsiYNzgw6K56Y4FGvFnWjGSIAIMZY4g4AABBhi7NzNXpuVqkzzvfmFWj03Cwtzs6NUWQAADshQQcnXdoPAAAYi0lEQVQAAIggb5GhKQtzZAT5mv+xKQtz5C0K9gwAgJuQoAMAAETQqh0HSs2cn8yQlJtXoFU7DkQvKACALZGgAwAARNC+g2Un5+E8DwAQv0jQAQAAIqhBSnLFTwrheQCA+EWCDgAAEEHdm9dRemqyyjogzSNfNffuzetEMywAgA2RoAMAAERQYoJHkwZnSlKpJN1/f9LgTM44BwCQoAMAAETawPbpmjm8q9JSA5exp6Uma+bwrkHPQQcAuE+VWAcAAADgBgPbp6t/ZppW7TigfQcL1CDFt6ydmXMAgB8JOgAAQJQkJnjUq0XdWIcBALAplrgDAAAAAGADtk/Q9+zZo+HDh6tu3bqqXr26OnTooDVr1sQ6LAAAAAAALGXrJe6//PKLevfurX79+mnRokWqX7++tmzZotq1a8c6NAAAAAAALGXrBH369OnKyMjQCy+8UPxY8+bNYxgRAAAAAACRYesl7u+88466deumK664Qg0aNFCXLl00e/bsctsUFhYqPz8/4AYAAOIHfT0AIF7ZOkHfvn27Zs6cqVatWun999/X6NGjddttt2nOnDlltpk2bZpSU1OLbxkZGVGMGAAARBp9PQAgXnkMwzBiHURZqlWrpm7duumLL74ofuy2227T6tWrtWLFiqBtCgsLVVhYWHw/Pz9fGRkZysvLU82aNSMeMwAAFcnPz1dqaip9U5jo6wEAdhduX2/rPejp6enKzMwMeKxt27Z68803y2yTlJSkpKSkSIcGAABihL4eABCvbL3EvXfv3tq0aVPAY5s3b1bTpk1jFBEAAAAAAJFh6wR97NixWrlypR566CFt3bpV8+bN06xZszRmzJhYhwYAAAAAgKVsnaCfddZZmj9/vl555RW1b99eU6dO1eOPP65hw4bFOjQAAAAAACxl6z3oknTppZfq0ksvjXUYAAAAAABElK1n0AEAAAAAcAvbz6BXlv8Uufz8/BhHAgCAj79PsvFJp45CXw8AsJtw+/q4T9APHjwoScrIyIhxJAAABDp48KBSU1NjHYbj0dcDAOwq1L7eY8T58H1RUZF++OEHpaSkyOPxVOq18vPzlZGRoe+++y6kw+bdhPeofLw/FeM9Kh/vT8Wc8B4ZhqGDBw+qUaNGSkhgt1llhdrXO+F3JFLc/L1L7v7++d753vneoyvcvj7uZ9ATEhJ02mmnWfqaNWvWdN0veKh4j8rH+1Mx3qPy8f5UzO7vETPn1gm3r7f770gkufl7l9z9/fO98727TSy/93D6eobtAQAAAACwARJ0AAAAAABsIHHy5MmTYx2EkyQmJuq8885TlSpxvzsgbLxH5eP9qRjvUfl4fyrGe4SKuPl3xM3fu+Tu75/vne/dbZz4vcd9kTgAAAAAAJyAJe4AAAAAANgACToAAAAAADZAgg4AAAAAgA2QoAMAAAAAYAMk6CF4+umn1axZMyUnJ6tHjx5atWpVrEOyjU8//VSDBw9Wo0aN5PF49Pbbb8c6JFuZNm2azjrrLKWkpKhBgwb63e9+p02bNsU6LNuYOXOmOnbsqJo1a6pmzZrq1auXFi1aFOuwbOvhhx+Wx+PRHXfcEetQbGPy5MnyeDwBtzZt2sQ6LNiUW/tzt/bVbu6D6V9PcFvf6fZ+cc+ePRo+fLjq1q2r6tWrq0OHDlqzZk2swzKFBN2k//znPxo3bpwmTZqkrKwsderUSQMGDNC+fftiHZotHD58WJ06ddLTTz8d61BsadmyZRozZoxWrlypJUuW6NixY7rooot0+PDhWIdmC6eddpoefvhhrV27VmvWrNH555+voUOH6ttvv411aLazevVqPfvss+rYsWOsQ7Gddu3aKTc3t/i2fPnyWIcEG3Jzf+7WvtrNfTD9q49b+0639ou//PKLevfurapVq2rRokXKycnRo48+qtq1a8c6NHMMmNK9e3djzJgxxfe9Xq/RqFEjY9q0aTGMyp4kGfPnz491GLa2b98+Q5KxbNmyWIdiW7Vr1zaee+65WIdhKwcPHjRatWplLFmyxOjbt69x++23xzok25g0aZLRqVOnWIcBB6A/93FzX+32Ptht/atb+04394t333230adPn1iHETZm0E04evSo1q5dqwsvvLD4sYSEBF144YVasWJFDCODU+Xl5UmS6tSpE+NI7Mfr9erVV1/V4cOH1atXr1iHYytjxozRJZdcEvBZhBO2bNmiRo0a6fTTT9ewYcO0e/fuWIcEm6E/h+TePtit/aub+0639ovvvPOOunXrpiuuuEINGjRQly5dNHv27FiHZVqVWAfgBD///LO8Xq8aNmwY8HjDhg21cePGGEUFpyoqKtIdd9yh3r17q3379rEOxza++eYb9erVSwUFBTr11FM1f/58ZWZmxjos23j11VeVlZWl1atXxzoUW+rRo4defPFFtW7dWrm5uZoyZYrOOeccZWdnKyUlJdbhwSboz+HGPtjN/aub+04394vbt2/XzJkzNW7cON17771avXq1brvtNlWrVk0jRoyIdXgVIkEHomzMmDHKzs52zT4gs1q3bq1169YpLy9Pb7zxhkaMGKFly5a55iKiPN99951uv/12LVmyRMnJybEOx5YGDRpU/O+OHTuqR48eatq0qV577TVdf/31MYwMgJ24sQ92a//q9r7Tzf1iUVGRunXrpoceekiS1KVLF2VnZ+uf//ynIxJ0lribUK9ePSUmJurHH38MePzHH39UWlpajKKCE91yyy169913tXTpUp122mmxDsdWqlWrppYtW+rMM8/UtGnT1KlTJz3xxBOxDssW1q5dq3379qlr166qUqWKqlSpomXLlunJJ59UlSpV5PV6Yx2i7dSqVUtnnHGGtm7dGutQ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PYzzzz+/uM2cOXOM6tWrG3PmzDE2btxo3HXXXUZKSkrAz+q5554zMjIyjLffftvYvn278dprrxmpqanGq6++WvycIUOGGL179zaOHz9uvPHGG0ZSUpLx9ddfl/n7AADwob/3ob+nv0f8IUFHXCmrw54wYYIxZMiQgMe2bNliSDJ27dplGIavQ+3Zs2fAc/wd9vjx4yv8v6+//npj2LBhxfeDddgXXnhhQJsOHToYkyZNKvM17777biMhIcGoUaOGkZycbEgyJBlPP/108XPMdNi33367ceaZZwa89p133hnQYQ8dOtT4wx/+EPCcP/zhDwEddu/evY0ZM2YEPGf27NlG8+bNDcMwjAULFhhJSUnGTz/9VPz1+fPnB+2w586dW/yctWvXGpKMHTt2GIZhGMOGDTNuu+22gP9nyZIlRtWqVY1jx44Z//73v426desahw8fLvWeff7554bH4zFyc3ODvaWllNVhL1++vPg5b775ppGYmGgcP37cMAzD6NKlizFu3LiA1+nUqVNAh924cWPjrbfeCnjOhAkTjH79+hXf37dvn9GwYUPj1ltvNerWrWs8+uijpmIGALejv/ehv6e/R/xhDzpcYf369Xr//feD7k/btm2bmjRpIknq1q1b0PbBHn/88cf10ksvaffu3SooKNDRo0crrOrZsWPHgPvp6enat29fhW1ef/11FRQU6F//+pe2bdumm2++udw2JW3atEndu3cPeKzk/U2bNmnkyJGlnrN8+fLi+19//bXWrl2riRMnFj/m9Xp19OhRHT9+XBs2bNDpp5+uevXqFX+9V69eZX5ffunp6ZKkffv2qVmzZlq/fr22bNmi559/vvg5hmHo2LFj+u6773TxxRdr6tSpat68uQYOHKiBAwfqsssuU3Jyss466yz16dNHbdq00YABA3TRRRfp8ssvD3mPYMn4vF6v9u/frwYNGmjjxo0aP358wPN79eqlr776SpK0f/9+7dmzR8OHD5fH4yl+zvHjx9WwYcPi+/Xr19esWbM0dOhQ9evXT2PHjg0pRgBAIPp7+nv6ezgdCTpc4dChQ7r88st1//33l/pao0aNiv9do0aNoO1LPv7iiy9qwoQJeuyxx3TWWWcpJSVFDzzwQIWVQUsWm/F4PCoqKiq3TVJSklq2bClJmjFjhi644AJNmzZNEyZMkCQlJPhKSRiGUdzm2LFj5b5mOIqKinT48GHNmDFDl1xySamvJyYmhvR6J78X/k7N/14cOnRIt956q2666aZS7U477TRVrVpVX3/9tT7++GMtWbJE9957r6ZOnaovv/xSKSkp+uSTT/T555/rgw8+0GOPPaa//vWvWr16tU477TRL4qvIoUOHJElz5sxR586dA75WpUrgx+6nn36qxMRE7dmzR0eOHNEpp5xiOkYAQCD6+8qjv6e/R2xRJA6u0LVrV2VnZ+v0009Xy5YtA27hfEB+/vnnOu+883TjjTeqS5cuatmypbZu3RqByEv761//qmnTpumnn36S5BuVlQKr265bty6gTevWrbV69eqAx0rer+g5CQkJ6ty5szZv3lzqPWzZsqU8Ho/atm2r7du36+effy5ud3LhGrO6du2qnJycoP+PvyOtWrWqBgwYoEceeURfffWVNm7cqM8++6w41nPOOUdTp07VV199Ja/Xq3feeSfkOMrSpk0bffnllwGPnfx9ZmRkqF69etqxY0ep+Js1a1b8vKVLl+qJJ57QokWLlJCQwIg6AFQS/T39Pf09nI4ZdLjC7bffrhdeeEHXXnutxo4dq9q1a2vz5s16/fXX9a9//Svk12vVqpXefPNNffTRR8rIyNDzzz+vb775Rm3bto1A9IH69eunli1bavr06XrkkUdUu3Ztde7cWQ899JAaNWqkH374QZMmTQpoM3r0aP3jH//QxIkTde2112rNmjX697//LenEaPGtt96qAQMG6KmnntLAgQP1/vvv66OPPlJSUlLx60yaNEmXX365GjVqpMsuu0z6/+3dzUtifRjG8atokbQoKdpVBEkRGIkSaG0kg5KKaB8WtpIsIzQSInHRy653aNULSUWQQesgiVy0DNrUH5BBZVBgu3kWA/L0zDMwMwSj+P2sfxxuz1lc5/bc5/z0/ebg7u5OkUhEbrdbNTU18ng8Wlxc1PPz8w+1/IpwOCyHw6HJyUkNDw/LYDDo9vZWiURCy8vLOjk50cPDgzo6OlReXq7T01MVFxfLZDLp8vJSyWRSLpdLVVVVSiaTSqfTX3ptJiYm5PP5ZLFY1NbWlh1FbG5ulvT9hmFubk4zMzMqKyuTy+XSx8eHrq+vlclk5Pf79fr6Ko/Ho1AopK6uLu3v78tut6u3t1d9fX1fVisAFBLynrwn75HveIKOglBbW6urqyu9v7/L5XLJbDZrampKlZWVf3Q8v98vt9utwcFB2e12ZTIZjY6OfnHVPxcIBLS5ualUKiVJ2tvb09vbmywWi0KhkObn5z+tb2xs1OHhoWKxmFpaWrS9va1wOKyioqLs3q+dnZ1aWVnRwsKCWltblUgkND4+rtLS0uxx+vv7FY/HdXZ2JqvVKofDodXV1ey/xCUlJTo9PdXLy4tsNpt8Pt8vbS3zX1arVRcXF7q5uVF7e7usVqui0Wh2ZM1oNOro6EhOp1PNzc3a3d3V8fGxTCaTKioqdH5+ru7ubjU1NSkajWpjY0NOp/NPTvX/8ng8CgaDCgQCstlsenp6+uH6j42NaX19XVtbWzKbzXI6nYrFYqqvr5ck+Xw+VVdXKxKJZH9zJBKR1+vV4+Pjl9UKAIWEvCfvyXvku6Jv/36RBUDBmJ2d1eHhoe7v73+6ZmhoSKlU6tM+rAAAIH+Q90B+YcQdKBBra2tyOBwyGo3Z0bHp6elPa5aWltTT0yODwaCzszMdHBxoZ2fn7xQMAAB+G3kP5DeeoAMFwufzKR6PK51Oq66uTiMjIwoGg5++xjowMJAdDWxoaFAgEJDX6/2LVQMAgN9B3gP5jQYdAAAAAIAcwEfiAAAAAADIATToAAAAAADkABp0AAAAAAByAA06AAAAAAA5gAYdAAAAAIAcQIMOAAAAAEAOoEEHAAAAACAH0KADAAAAAJADaNABAAAAAMgB/wA7pKvYoqi4agAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fit = df.copy()\n", + "fit[\"mean\"] = linear_reg_model(x_data).detach().cpu().numpy()\n", + "\n", + "fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(12, 6), sharey=True)\n", + "african_nations = fit[fit[\"cont_africa\"] == 1]\n", + "non_african_nations = fit[fit[\"cont_africa\"] == 0]\n", + "fig.suptitle(\"Regression Fit\", fontsize=16)\n", + "ax[0].plot(non_african_nations[\"rugged\"], non_african_nations[\"rgdppc_2000\"], \"o\")\n", + "ax[0].plot(non_african_nations[\"rugged\"], non_african_nations[\"mean\"], linewidth=2)\n", + "ax[0].set(xlabel=\"Terrain Ruggedness Index\",\n", + " ylabel=\"log GDP (2000)\",\n", + " title=\"Non African Nations\")\n", + "ax[1].plot(african_nations[\"rugged\"], african_nations[\"rgdppc_2000\"], \"o\")\n", + "ax[1].plot(african_nations[\"rugged\"], african_nations[\"mean\"], linewidth=2)\n", + "ax[1].set(xlabel=\"Terrain Ruggedness Index\",\n", + " ylabel=\"log GDP (2000)\",\n", + " title=\"African Nations\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We notice that the relationship between terrain ruggedness has an inverse relationship with GDP for non-African nations, but it positively affects the GDP for African nations. It is however unclear how robust this trend is. In particular, we would like to understand how the regression fit would vary due to parameter uncertainty. To address this, we will build a simple Bayesian model for linear regression. [Bayesian modeling](http://mlg.eng.cam.ac.uk/zoubin/papers/NatureReprint15.pdf) offers a systematic framework for reasoning about model uncertainty. Instead of just learning point estimates, we're going to learn a _distribution_ over parameters that are consistent with the observed data." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Bayesian Regression with Pyro's Stochastic Variational Inference (SVI)\n", + "\n", + "### Model\n", + "\n", + "In order to make our linear regression Bayesian, we need to put priors on the parameters $w$ and $b$. These are distributions that represent our prior belief about reasonable values for $w$ and $b$ (before observing any data).\n", + "\n", + "Making a Bayesian model for linear regression is very intuitive using `PyroModule` as earlier. Note the following:\n", + "\n", + " - The `BayesianRegression` module internally uses the same `PyroModule[nn.Linear]` module. However, note that we replace the `weight` and the `bias` of the this module with `PyroSample` statements. These statements allow us to place a prior over the `weight` and `bias` parameters, instead of treating them as fixed learnable parameters. For the bias component, we set a reasonably wide prior since it is likely to be substantially above 0.\n", + " - The `BayesianRegression.forward` method specifies the generative process. We generate the mean value of the response by calling the `linear` module (which, as you saw, samples the `weight` and `bias` parameters from the prior and returns a value for the mean response). Finally we use the `obs` argument to the `pyro.sample` statement to condition on the observed data `y_data` with a learned observation noise `sigma`. The model returns the regression line given by the variable `mean`." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "from pyro.nn import PyroSample\n", + "\n", + "\n", + "class BayesianRegression(PyroModule):\n", + " def __init__(self, in_features, out_features):\n", + " super().__init__()\n", + " self.linear = PyroModule[nn.Linear](in_features, out_features)\n", + " self.linear.weight = PyroSample(dist.Normal(0., 1.).expand([out_features, in_features]).to_event(2))\n", + " self.linear.bias = PyroSample(dist.Normal(0., 10.).expand([out_features]).to_event(1))\n", + " \n", + " def forward(self, x, y=None):\n", + " sigma = pyro.sample(\"sigma\", dist.Uniform(0., 10.))\n", + " mean = self.linear(x).squeeze(-1)\n", + " with pyro.plate(\"data\", x.shape[0]):\n", + " obs = pyro.sample(\"obs\", dist.Normal(mean, sigma), obs=y)\n", + " return mean" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Using an AutoGuide\n", + "\n", + "In order to do inference, i.e. learn the posterior distribution over our unobserved parameters, we will use Stochastic Variational Inference (SVI). The guide determines a family of distributions, and `SVI` aims to find an approximate posterior distribution from this family that has the lowest KL divergence from the true posterior. \n", + "\n", + "Users can write arbitrarily flexible custom guides in Pyro, but in this tutorial, we will restrict ourselves to Pyro's [autoguide library](http://docs.pyro.ai/en/dev/infer.autoguide.html). In the next [tutorial](bayesian_regression_ii.ipynb), we will explore how to write guides by hand.\n", + "\n", + "To begin with, we will use the `AutoDiagonalNormal` guide that models the distribution of unobserved parameters in the model as a Gaussian with diagonal covariance, i.e. it assumes that there is no correlation amongst the latent variables (quite a strong modeling assumption as we shall see in [Part II](bayesian_regression_ii.ipynb)). Under the hood, this defines a `guide` that uses a `Normal` distribution with learnable parameters corresponding to each `sample` statement in the model. e.g. in our case, this distribution should have a size of `(5,)` correspoding to the 3 regression coefficients for each of the terms, and 1 component contributed each by the intercept term and `sigma` in the model. \n", + "\n", + "Autoguide also supports learning MAP estimates with `AutoDelta` or composing guides with `AutoGuideList` (see the [docs](http://docs.pyro.ai/en/dev/infer.autoguide.html) for more information)." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "from pyro.infer.autoguide import AutoDiagonalNormal\n", + "\n", + "model = BayesianRegression(3, 1)\n", + "guide = AutoDiagonalNormal(model)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Optimizing the Evidence Lower Bound\n", + "\n", + "We will use stochastic variational inference (SVI) (for an introduction to SVI, see [SVI Part I](svi_part_i.ipynb)) for doing inference. Just like in the non-Bayesian linear regression model, each iteration of our training loop will take a gradient step, with the difference that in this case, we'll use the Evidence Lower Bound (ELBO) objective instead of the MSE loss by constructing a `Trace_ELBO` object that we pass to `SVI`. " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "from pyro.infer import SVI, Trace_ELBO\n", + "\n", + "\n", + "adam = pyro.optim.Adam({\"lr\": 0.03})\n", + "svi = SVI(model, guide, adam, loss=Trace_ELBO())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that we use the `Adam` optimizer from Pyro's `optim` module and not the `torch.optim` module as earlier. Here `Adam` is a thin wrapper around `torch.optim.Adam` (see [here](svi_part_i.ipynb#Optimizers) for a discussion). Optimizers in `pyro.optim` are used to optimize and update parameter values in Pyro's parameter store. In particular, you will notice that we do not need to pass in learnable parameters to the optimizer since that is determined by the guide code and happens behind the scenes within the `SVI` class automatically. To take an ELBO gradient step we simply call the step method of SVI. The data argument we pass to `SVI.step` will be passed to both `model()` and `guide()`. The complete training loop is as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[iteration 0001] loss: 6.2310\n", + "[iteration 0101] loss: 3.5253\n", + "[iteration 0201] loss: 3.2347\n", + "[iteration 0301] loss: 3.0890\n", + "[iteration 0401] loss: 2.6377\n", + "[iteration 0501] loss: 2.0626\n", + "[iteration 0601] loss: 1.4852\n", + "[iteration 0701] loss: 1.4631\n", + "[iteration 0801] loss: 1.4632\n", + "[iteration 0901] loss: 1.4592\n", + "[iteration 1001] loss: 1.4940\n", + "[iteration 1101] loss: 1.4988\n", + "[iteration 1201] loss: 1.4938\n", + "[iteration 1301] loss: 1.4679\n", + "[iteration 1401] loss: 1.4581\n" + ] + } + ], + "source": [ + "pyro.clear_param_store()\n", + "for j in range(num_iterations):\n", + " # calculate the loss and take a gradient step\n", + " loss = svi.step(x_data, y_data)\n", + " if j % 100 == 0:\n", + " print(\"[iteration %04d] loss: %.4f\" % (j + 1, loss / len(data)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can examine the optimized parameter values by fetching from Pyro's param store." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "AutoDiagonalNormal.loc Parameter containing:\n", + "tensor([-2.2371, -1.8097, -0.1691, 0.3791, 9.1823])\n", + "AutoDiagonalNormal.scale tensor([0.0551, 0.1142, 0.0387, 0.0769, 0.0702])\n" + ] + } + ], + "source": [ + "guide.requires_grad_(False)\n", + "\n", + "for name, value in pyro.get_param_store().items():\n", + " print(name, pyro.param(name))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As you can see, instead of just point estimates, we now have uncertainty estimates (`AutoDiagonalNormal.scale`) for our learned parameters. Note that Autoguide packs the latent variables into a single tensor, in this case, one entry per variable sampled in our model. Both the `loc` and `scale` parameters have size `(5,)`, one for each of the latent variables in the model, as we had remarked earlier.\n", + "\n", + "To look at the distribution of the latent parameters more clearly, we can make use of the `AutoDiagonalNormal.quantiles` method which will unpack the latent samples from the autoguide, and automatically constrain them to the site's support (e.g. the variable `sigma` must lie in `(0, 10)`). We see that the median values for the parameters are quite close to the Maximum Likelihood point estimates we obtained from our first model." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'sigma': [tensor(0.9328), tensor(0.9647), tensor(0.9976)],\n", + " 'linear.weight': [tensor([[-1.8868, -0.1952, 0.3272]]),\n", + " tensor([[-1.8097, -0.1691, 0.3791]]),\n", + " tensor([[-1.7327, -0.1429, 0.4309]])],\n", + " 'linear.bias': [tensor([9.1350]), tensor([9.1823]), tensor([9.2297])]}" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "guide.quantiles([0.25, 0.5, 0.75])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Model Evaluation\n", + "\n", + "To evaluate our model, we'll generate some predictive samples and look at the posteriors. For this we will make use of the [Predictive](http://docs.pyro.ai/en/stable/inference_algos.html#pyro.infer.predictive.Predictive) utility class.\n", + "\n", + " - We generate 800 samples from our trained model. Internally, this is done by first generating samples for the unobserved sites in the `guide`, and then running the model forward by conditioning the sites to values sampled from the `guide`. Refer to the [Model Serving](#Model-Serving-via-TorchScript) section for insight on how the `Predictive` class works.\n", + " - Note that in `return_sites`, we specify both the outcome (`\"obs\"` site) as well as the return value of the model (`\"_RETURN\"`) which captures the regression line. Additionally, we would also like to capture the regression coefficients (given by `\"linear.weight\"`) for further analysis.\n", + " - The remaining code is simply used to plot the 90% CI for the two variables from our model." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "from pyro.infer import Predictive\n", + "\n", + "\n", + "def summary(samples):\n", + " site_stats = {}\n", + " for k, v in samples.items():\n", + " site_stats[k] = {\n", + " \"mean\": torch.mean(v, 0),\n", + " \"std\": torch.std(v, 0),\n", + " \"5%\": v.kthvalue(int(len(v) * 0.05), dim=0)[0],\n", + " \"95%\": v.kthvalue(int(len(v) * 0.95), dim=0)[0],\n", + " }\n", + " return site_stats\n", + "\n", + "\n", + "predictive = Predictive(model, guide=guide, num_samples=800, \n", + " return_sites=(\"linear.weight\", \"obs\", \"_RETURN\"))\n", + "samples = predictive(x_data)\n", + "pred_summary = summary(samples)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "mu = pred_summary[\"_RETURN\"]\n", + "y = pred_summary[\"obs\"]\n", + "predictions = pd.DataFrame({\n", + " \"cont_africa\": x_data[:, 0],\n", + " \"rugged\": x_data[:, 1],\n", + " \"mu_mean\": mu[\"mean\"],\n", + " \"mu_perc_5\": mu[\"5%\"],\n", + " \"mu_perc_95\": mu[\"95%\"],\n", + " \"y_mean\": y[\"mean\"],\n", + " \"y_perc_5\": y[\"5%\"],\n", + " \"y_perc_95\": y[\"95%\"],\n", + " \"true_gdp\": y_data,\n", + "})" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+gAAAJJCAYAAAA5lB0bAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3Xd8VFX+//H3JCGdhAAhVENTEemsqCjFRQSkKIgUpako+l0F1LXzRUG/YkHF3RVcEBUFV1FRorgoCgq7+FMQKdIEDE2Qmk5ISOb8/hhnzCSTZJJMMneS1/Px4JvNuWfuPZOZr/d+TvkcmzHGCAAAAAAA+FWQvxsAAAAAAAAI0AEAAAAAsAQCdAAAAAAALIAAHQAAAAAACyBABwAAAADAAgjQAQAAAACwAAJ0AAAAAAAsgAAdAAAAAAALIEAHAAAAAMACCNABoAZp3ry5bDab27+wsDA1bdpU1113nT799FN/NzHgjRkzRjabTYsXL/Z3U4o1bdo02Ww2PfXUU27lX375pWw2m66++mo/tcx73377rW644QY1bNhQYWFhatKkicaNG6ddu3aV+Dq73a558+apW7duql27tmJiYnTZZZfptddekzHG42t+++033XTTTYqLi1NUVJT69u2rrVu3FnuNl156STabTUuXLq3Qe5SkkydP6v/+7//Us2dPJSQkKDQ0VDExMWrfvr0mTZqkr7/+ushrmjZtavnvIADAsxB/NwAAUPWuuOIKtW7dWpKUlpamH3/8UUlJSUpKStK9996rF1980c8tBIo3b9483X333bLb7Wrbtq2uvPJK/fzzz3r77bf1/vvvKykpSX379i3yuvz8fN1www1avny5IiMjdfXVV8tut+vLL7/U7bffrtWrV2vJkiWy2Wyu19jtdl177bX68ccfddlllykuLk6ff/65evbsqS1btigxMdHtGgcPHtT//u//atCgQRoxYkSF3uebb76pu+++W1lZWQoPD1e3bt3UuHFjnTlzRrt27dL8+fM1f/58jR49Wu+8806FrgUAsAgDAKgxEhMTjSTzxhtvuJWfO3fO3H333UaSkWS+//57/zSwGjhy5IjZuXOnSUtL83dTivXYY48ZSebJJ590K8/KyjI7d+40Bw8e9FPLSrdp0yYTHBxsJJm//e1vbsfmz59vJJm4uDhz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qtTt0Zz+/Oc/S5IWL17sNkIuSbm5uXrjjTdcvztnhEhSRkaGJMdIeXGc7Sv4uvbt2+vee+/V1q1bdeGFF6pBgwb64IMPdNVVV+nOO+9Ubm6uJk2apJYtW2r69Omu1xljlJ2d7dV7KujEiROu/92gQYMyvx4AENgI0AGgBrrllltc+6DXqVNH/fr10549e7R48WI9+eSTRer/8MMPOnbsmC688EJ17NjR4zl79+4tSW6Js7755htJ0siRIxUSUnRnz5tvvrnUtg4fPtxjeXnb1K1bN0nSpEmTtGrVKuXk5BR77UaNGqlp06batGmTHnjgAa+DyML279+v/fv3S5LGjx9f5HhQUJAmTJggyRHkejJ48GCP5c5p2b/++mu52lYWoaGhuuaaa4qUN2nSRLVr11Z2drZSUlJc5StWrJDk+AwLLktwCg4OdnWIFE64Vpx77rlHdevW1eHDh9WvXz/98MMPysrK0o8//qiBAwe6TZevyFTzgmbPnq1///vfmjJliu666y699dZb+uKLL1SrVi3NmjVLO3fu1D//+U9FREToxIkTGjVqlKKiohQZGalmzZpp7ty5PmkHAKD6Yx90AKiBCu6DfuLECa1bt04ZGRm66667dP7557uCWKdffvlFkrR79263PaI9KTgC6Ez85lzHW1j9+vUVFRWlrKysYs9X3GvL26aHH35Y//3vf7VmzRpdc801Cg0NVYcOHdSrVy+NHj1aXbt2dXvt4sWLdeONN2r27NmaPXu26tWrp0svvVR9+/bV2LFji10LXZAzeE5ISFBkZKTHOq1atXKrW1hxWcGd2eILjyZXhiZNmngMtJ3tyMjIcGuH8zN65JFH9Mgjj5R47oKfUUkaNWqkFStW6IYbbtDatWvdZntERkZq7ty5rozrBRO7ObOgl/Rdc65v95SBv3///urfv79b2a5duzRr1iyNHz9effr0UX5+vq655hrt2rVLjz/+uC666CK99tpr+stf/iKbzaa77rqr1PcXHx/v+t/Hjx93fS8AADUDAToA1EATJ050jdhKjqncQ4cO1Zo1azRixAjt2LHDLZC02+2SHMGRpxHUgjwlmCspgC4tuI6IiPBYXt42RUVFafXq1fr+++/1+eef67///a++/fZbbdy4US+88ILuuecet0RxvXr10v79+7VixQp98803Wr9+vVauXKnPPvtMjz/+uJYvX+4aqa9MvhoNrso2OD+jHj16qGXLliXWbdu2rdfnveyyy7R37159+OGH2rhxo86ePavWrVtr1KhRrunpMTExblupOTt6Dh48WOx5naPvxXUKFWSM0aRJkxQTE+NavrBy5Upt3rxZ06dP18MPPyzJEdi3bNlSs2bN8ipAb9WqlWJjY5WWlqYNGzbo8ssvL/U1AIDqgwAdAKDY2Fi99957atOmjQ4cOKAXX3xR06ZNcx137ovdoEEDvfnmm16f15nl2jm9u7BTp065bVVVFuVtk1O3bt1cMwXy8vK0bNkyjR8/Xn//+9914403uq1Fj4yM1I033qgbb7xRkmNk89FHH9XChQt12223ad++fSVey/l3OHbsmLKysjyug3aONhfMDB7onJ/RsGHDNHXqVJ+eOyIiwpUVv6B//vOfkhxr1Qt2KHTp0kWStG3bNuXm5hbJ5J6VleXK1O6sW5KFCxdq7dq1Wrx4sWsWxebNmyVJ3bt3d9ULCwvTJZdcouXLl+v06dNuo/qeBAcHa9CgQVqyZIneeustTZ48udS2AACqD/93xwMALCE+Pt4VlM+ePVupqamuY5dddpni4uK0bdu2Mq3Ddu7PvHTpUrfkYU7vvPNOudtb3jZ5EhISohEjRrj20HYGWsVp0KCBnn32WUmOwNqZgKw4zZs3d43KLlq0qMhxY4yrk+Gqq64qY+uty5nU7v3336+S6507d841++Huu+92O3bFFVcoPj5e2dnZ+uijj4q89v3331deXp6aNWtWJEliYceOHdODDz6ofv36ueVRcM4GKTyN3vl7abNFnB566CGFhITohx9+8GoLvXXr1nl1XgCA9RGgAwBc/ud//kfnnXee0tLSXNN2JUdysOnTp8tut+v666/3mNArPz9fX375pb7//ntX2ciRI5WQkKB9+/Zp+vTpMsa4jm3fvl1PPfVUudta3jb94x//0M8//1yk7pEjR1z7eDunRicnJ+v11193y+rt9Mknn0hy7MddUmZwp/vvv1+SI4v7tm3bXOXGGD3xxBP66aefFBcXp9tuu63UcwWKG264QV26dNH69et166236uTJk0XqnD59WvPmzXNNh/fGxo0bi3T4nDp1SiNHjtSOHTs0duxY9enTx+14SEiIHnzwQUnSAw88oAMHDriO7du3z7VG/tFHHy01kJ4yZYpycnL06quvupU7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10JCQhQeHl7p1wGszLr/RQAqyaOPPqr8/HyvRtHz8vL05JNPqlWrVgoLC1Pz5s316KOPKicnx61e8+bNNWjQIP3nP/9Rt27dFB4erpYtW+qtt97yul0HDx7UunXrNGrUKI0aNcr1QFD4Oo8//rgkKT4+XjabzTXq7GzD559/rj/96U+KiIjQP//5T9exwmvQU1NTde+996p58+YKCwtT06ZNNW7cOJ08eVKSlJubq+nTp6tr166KjY1VVFSUevTooTVr1ridx7mee/bs2Zo/f77rb3XJJZdow4YNXr//e+65R3FxcV6Noi9fvlwDBw5U48aNFRYWplatWunJJ59Ufn6+q07v3r21YsUKHThwwDWFvnnz5m5tLrwGffXq1erRo4eioqJUp04dXXfddUWWGjjXx+3du1cTJkxQnTp1FBsbq1tuuUVnzpxxq7tq1SpdeeWVqlOnjqKjo3XhhRfq0Ucf9fpvAgDwvyVLliguLk4DBw7U8OHDiwTozqVaycnJWrFiheues3//ftexd999V9OmTVOTJk0UGRmp9PT0Ytegf/fdd7r22msVFxenqKgodejQQS+//LLr+NatWzVhwgS1bNlS4eHhatiwoW699VadOnXK7TxluV8VJygoSNOmTdPWrVv10UcflVjXm+eG/fv3Kz4+XpI0Y8YM19/Kee/3tAbd189i586d04wZM3T++ecrPDxc9erV05VXXqlVq1Z59TcBKluIvxsAVLUWLVpo3LhxWrBggR5++GE1bty42LoTJ07UokWLNHz4cN1///367rvvNGvWLO3cubPIjWrv3r0aPny4brvtNo0fP16vv/66JkyYoK5du+riiy8utV3/+te/FBUVpUGDBikiIkKtWrXSkiVL1L17d1edOXPm6K233tJHH32kefPmKTo6Wh06dHAd3717t0aPHq1Jkybp9ttv14UXXujxWpmZmerRo4d27typW2+9VV26dNHJkyeVlJSkw4cPq379+kpPT9drr72m0aNH6/bbb1dGRoYWLlyofv366fvvv1enTp3czvnOO+8oIyNDkyZNks1m03PPPadhw4bpl19+8Wr0PiYmRvfee6+mT5+uTZs2qUuXLsXWffPNNxUdHa377rtP0dHRWr16taZPn6709HQ9//zzkqTHHntMaWlpOnz4sF566SVJKnEt+5dffqkBAwaoZcuWeuKJJ5Sdna2///3vuuKKK7Rp0yZXcO80YsQItWjRQrNmzdKmTZv02muvqUGDBnr22WclSdu3b9egQYPUoUMHzZw5U2FhYdq7d6/++9//lvq3AABYx5IlSzRs2DCFhoZq9OjRmjdvnjZs2KBLLrlEknTRRRfp7bff1r333qumTZvq/vvvl+ToSN+/f78k6cknn1RoaKj++te/KicnR6GhoR6vtWrVKg0aNEiNGjXSlClT1LBhQ+3cuVOffvqppkyZ4qrzyy+/6JZbblHDhg21fft2zZ8/X9u3b9f/+3//r0iAW9r9qjQ33XSTnnzySc2cOVNDhw4tNombN88N8fHxmjdvnu666y4NHTpUw4YNkyS3Z5nCfP0s9sQTT2jWrFmaOHGiunXrpvT0dG3cuFGbNm1S3759vfqbAJXKADXEG2+8YSSZDRs2mH379pmQkBAzefJk1/FevXqZiy++2PX75s2bjSQzceJEt/P89a9/NZLM6tWrXWWJiYlGklm7dq2r7Pjx4yYsLMzcf//9XrWvffv25uabb3b9/uijj5r69eubc+fOudV7/PHHjSRz4sQJt3JnG1auXFnk3ImJiWb8+PGu36dPn24kmWXLlhWpa7fbjTHG5OXlmZycHLdjKSkpJiEhwdx6662usuTkZCPJ1KtXz5w+fdpVvnz5ciPJfPLJJyW+7zVr1hhJ5v333zepqakmLi7ODBkyxHV8/PjxJioqyu01Z86cKXKeSZMmmcjISHP27FlX2cCBA01iYmKRus42v/HGG66yTp06mQYNGphTp065yrZs2WKCgoLMuHHjXGXOv3/Bv4ExxgwdOtTUq1fP9ftLL73k8XMCAASOjRs3Gklm1apVxhjHPbJp06ZmypQpReomJiaagQMHupU573EtW7Yscu9yHluzZo0xxnHfbdGihUlMTDQpKSludZ33ZmM83wP/9a9/FXkO8fZ+VZyC999FixYVeW6QZP7yl7+4fvf2ueHEiRNGknn88ceLXNPZZqfKeBbr2LFjkc8JsBKmuKNGatmypcaOHav58+fr6NGjHut89tlnkqT77rvPrdzZM75ixQq38rZt26pHjx6u3+Pj43XhhRfql19+KbU9W7du1bZt2zR69GhX2ejRo3Xy5El9/vnn3r0pOWYH9OvXr9R6H374oTp27KihQ4cWOebsGQ8ODnb18Nvtdp0+fVp5eXn605/+5HGd+MiRIxUXF+f63fm38Ob9O8XGxmrq1KlKSkrSjz/+WGy9iIgI1//OyMjQyZMn1aNHD505c0a7du3y+npOR48e1ebNmzVhwgTVrVvXVd6hQwf17dvX9V0o6M4773T7vUePHjp16pTS09Ml/ZEjYPny5bLb7WVuEwDA/5YsWaKEhARdddVVkhz3yJEjR+rdd991W1ZVmvHjx7vduzz58ccflZycrKlTpxZZy15w1Lrgec6ePauTJ0/qsssukySP9+fS7lfeuPnmm3X++eeXuBa9rM8N3qiMZ7E6depo+/bt2rNnT7naBFQ2AnQj3v92AAAgAElEQVTUWNOmTVNeXl6xa9EPHDigoKAgtW7d2q28YcOGqlOnjg4cOOBWft555xU5R1xcnFJSUkpty+LFixUVFaWWLVtq79692rt3r8LDw9W8efNik9F40qJFC6/q7du3z6st5RYtWqQOHTq41mjFx8drxYoVSktLK1K38Pt3BuvevP+CpkyZojp16pS4Fn379u0aOnSoYmNjFRMTo/j4eI0ZM0aSPLatNM7P0tOSgIsuukgnT55UVlaWW3lp73fkyJG64oorNHHiRCUkJGjUqFFaunQpwToABIj8/Hy9++67uuqqq5ScnOy6P1966aU6duyYvvrqK6/P5c39ed++fZJU6v359OnTmjJlihISEhQREaH4+HjX+Svr/hwcHKxp06Zp8+bN+vjjj4utV5bnBm9UxrPYzJkzlZqaqgsuuEDt27fXAw88oK1bt5arfUBlIEBHjdWyZUuNGTOmxFF0ScWutSqsuIzgxfU0Fzz+r3/9S1lZWWrbtq3OP/9817/9+/dr+fLlyszM9KoNpfXOl8XixYtd+60vXLhQK1eu1KpVq/TnP//ZY5BZ3vdfWGmj6KmpqerVq5e2bNmimTNn6pNPPtGqVatca+mqKgAu7f1GRERo7dq1+vLLLzV27Fht3bpVI0eOVN++fcs06gIA8I/Vq1fr6NGjevfdd93uzc7tTcvSge7L+/OIESO0YMEC3XnnnVq2bJm++OILrVy5UpLne6Cv7s8333yzWrduXewoelmfG8rCl89iPXv21L59+/T666+rXbt2eu2119SlSxe99tprFWoj4CskiUONNm3aNC1evNhjopTExETZ7Xbt2bNHF110kav82LFjSk1NVWJiok/a8M033+jw4cOaOXOm23UkR+/2HXfcoY8//tg1QuwLrVq10k8//VRinQ8++EAtW7bUsmXL3G6MzizylWnq1KmaM2eOZsyYUWSa39dff61Tp05p2bJlbnvHJicnFzmPtzd052e5e/fuIsd27dql+vXrKyoqqixvQZIj+22fPn3Up08fvfjii3r66af12GOPac2aNbr66qvLfD4AQNVZsmSJGjRooFdeeaXIsWXLlumjjz7Sq6++6rPgu1WrVpKkn376qdh7REpKir766ivNmDFD06dPd5VXxXRt5yj6hAkTtHz58iLHvX1u8PbeLFXes1jdunV1yy236JZbblFmZqZ69uypJ554QhMnTizX+QBfYgQdNVqrVq00ZswY/fOf/9Rvv/3mduzaa6+V5MicXtCLL74oSRo4cKBP2uCc3v7AAw9o+PDhbv9uv/12nX/++WXqpffGDTfcoC1btnjcMsXZy+zshS7Y6/zdd9/p22+/9WlbPHGOoi9fvlybN292O+apXbm5uZo7d26R80RFRXk1ra5Ro0bq1KmTFi1apNTUVFf5Tz/9pC+++ML1XSiL06dPFylzZr4vvDUMAMBasrOztWzZMg0aNKjIvXn48OG6++67lZGRoaSkJJ9ds0uXLmrRooXmzJnjdi+SSr43S0WfVSrLmDFj1Lp1a82YMaPIMW+fGyIjIyWpyHv0pDKexQpvRxcdHa3WrVtzb4ZlMIKOGu+xxx7T22+/rd27d7tth9axY0eNHz9e8+fPd02r/v7777Vo0SJdf/31roQxFZGTk6MPP/xQffv2VXh4uMc6Q4YM0csvv6zjx4+rQYMGFb6mJD3wwAP64IMPdOONN+rWW29V165ddfr0aSUlJenVV19Vx44dNWjQIC1btkxDhw7VwIEDlZycrFdffVVt27b1esp9RUyZMkUvvfSStmzZ4jZ63b17d8XFxWn8+PGaPHmybDab3n77bY/T7bp27ar33ntP9913ny655BJFR0dr8ODBHq/3/PPPa8CAAbr88st12223ubZZi42N9Wpv9sJmzpyptWvXauDAgUpMTNTx48c1d+5cNW3aVFdeeWWZzwcAqDpJSUnKyMjQkCFDPB6/7LLLFB8fryVLlmjkyJE+uWZQUJDmzZunwYMHq1OnTrrlllvUqFEj7dq1S9u3b9fnn3+umJgY9ezZU88995zOnTunJk2a6IsvvvA4i6wyBAcH67HHHtMtt9xS5Ji3zw0RERFq27at3nvvPV1wwQWqW7eu2rVr53HtfWU8i7Vt21a9e/dW165dVbduXW3cuFEffPCB7r777jKfC6gMjKCjxmvdunWx08dfe+01zZgxQxs2bNDUqVO1evVqPfLII3r33Xd9cu0VK1YoNTW12KBRkgYPHqy8vDyfXVNy9BavW7dOd911lz777DNNnjxZc+fO1YUXXqimTZtKkiZMmKCnn35aW7Zs0eTJk/X5559r8eLF+tOf/uSzdpSkTp06mjp1apHyevXq6dNPP1WjRo00bdo0zZ49W3379tVzzz1XpO7//M//6KabbtIbb7yhm266Sffcc0+x17v66qu1cuVK1atXT9OnT9fs2bN12WWX6b///a/XyfcKGjJkiM477zy9/vrr+stf/qJXXnlFPXv21OrVqxUbG1vm8wEAqs6SJUsUHh5e7L7YQUFBGjhwoFauXFlkRLYi+vXrpzVr1uiCCy7QCy+8oPvuu09fffWV23PCO++8o379+umVV17RI488olq1aunf//63z9pQmjFjxrim4xdUlueG1157TU2aNNG9996r0aNH64MPPij2er5+Fps8ebL279+vWbNmafLkyfrmm2/01FNP6YUXXijX+QBfs5myZogAAAAAAAA+xwg6AAAAAAAWQIAOAAAAAIAFEKADAAAAAGABBOgAAAAAAFgAAToAAAAAABZAgA4AAAAAgAWE+LsBlc1ut+vIkSOqXbu2bDabv5sDAICMMcrIyFDjxo0VFERfeUVxrwcAWE157/XVPkA/cuSImjVr5u9mAABQxKFDh9S0aVN/NyPgca8HAFhVWe/11T5Ar127tiTHHyYmJsbPrQEAQEpPT1ezZs1c9yhUDPd6AIDVlPdeX+0DdOdUt5iYGG7aAABLYTq2b3CvBwBYVVnv9Sx8AwAAAADAAgjQAQAAAACwAAJ0AAAAAAAsgAAdAAAAAAALIEAHAAAAAMACCNABAAAAALAAAnQAAAAAACyAAB0AAAAAAAsgQAcAAAAAwAII0AEAAAAAsAC/Buhr167V4MGD1bhxY9lsNn388cdux5ctW6ZrrrlG9erVk81m0+bNm/3UUgAAAAAAKpdfA/SsrCx17NhRr7zySrHHr7zySj377LNV3DIAAAAAAKpWiD8vPmDAAA0YMKDY42PHjpUk7d+/v4paBAAA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devY6eZx8e677zZnnnmm3WG0GjPoEThy5IhWrVql0aNHh455PB6NHj1aH330kY2RIVEdOHBAktSmTRubI3GeqqoqvfDCCzp48KCGDx9udziOMnHiRF100UVhP4tw3MaNG1VYWKgePXro6quv1vbt2+0OCQ7DeA7JvWOwW8dXN4+dbh0XFy1apCFDhuiKK65Q+/btNWjQID3xxBN2hxWxFLsDSAR79+5VVVWVOnToEHa8Q4cOWrdunU1RIVFVV1frjjvu0MiRI9WvXz+7w3GML774QsOHD1dFRYWys7O1cOFC9e3b1+6wHOOFF17QP//5T61YscLuUBxp2LBheuqpp9S7d2+VlJTo17/+tc466yytWbNGOTk5docHh2A8hxvHYDePr24eO908Lm7ZskWPPfaYJk+erHvvvVcrVqzQbbfdJp/PpwkTJtgdXrNI0IE4mzhxotasWeOaOqBI9e7dW6tXr9aBAwf08ssva8KECVq+fLlrfoloytdff63bb79dS5YsUXp6ut3hONK4ceNCfx8wYICGDRum4uJiLViwQDfddJONkQFwEjeOwW4dX90+drp5XKyurtaQIUM0ffp0SdKgQYO0Zs0a/c///E9CJOgscY9A27Zt5fV6tWvXrrDju3btUseOHW2KConolltu0V/+8he988476tKli93hOIrP51PPnj01ePBgzZgxQwMHDtTDDz9sd1iOsGrVKu3evVunnXaaUlJSlJKSouXLl+uRRx5RSkqKqqqq7A7RcfLy8nTyySdr06ZNdocCB2E8dze3jsFuHV8ZO8O5aVzs1KlTvRtQp5xySsIs8SdBj4DP59PgwYO1dOnS0LHq6motXbrUVTU8aD1jjG655RYtXLhQf//739W9e3e7Q3K86upqVVZW2h2GI5x33nn64osvtHr16tDHkCFDdPXVV2v16tXyer12h+g45eXl2rx5szp16mR3KHAQxnN3YgwO55bxlbEznJvGxZEjR9bbSnHDhg0qLi62KaKWYYl7hCZPnqwJEyZoyJAhGjp0qGbPnq2DBw/qhhtusDs0RygvLw+7I/fVV19p9erVatOmjbp27WpjZM4wceJEPffcc3r99deVk5OjnTt3SpJyc3OVkZFhc3T2u+eeezRu3Dh17dpVZWVleu6557Rs2TK99dZbdofmCDk5OfVqJbOyslRQUOCaGsrm/PznP9cll1yi4uJiffPNN5o6daq8Xq/+/d//3e7Q4DBuHs/dOla7eQx28/jq9rHTzePipEmTNGLECE2fPl1XXnmlPvnkE82dO1dz5861O7TI2N1GPpE8+uijpmvXrsbn85mhQ4eajz/+2O6QHOOdd94xkup9TJgwwe7QHKGhayPJzJs3z+7QHOHGG280xcXFxufzmXbt2pnzzjvP/O1vf7M7LEdz01YxkbjqqqtMp06djM/nM507dzZXXXWV2bRpk91hwaHcOp67dax28xjM+BrOTWOn28fFN954w/Tr18+kpaWZPn36mLlz59odUsQsY4yJ5w0BAAAAAABQHzXoAAAAAAA4AAk6AAAAAAAOQIIOAAAAAIADkKADAAAAAOAAJOgAAAAAADgACToAAAAAAA5Agg4AAAAAgAOQoAMx8qMf/Ug/+tGP7A7DdhUVFbIsS2+++abdocTUlClTdMYZZ9gdBgAgzhjvAxjvgeggQUfCsyyryY9p06bZEtfjjz+uxx9//IReY8qUKaH3kZKSoq5du+rmm2/WgQMHohQl1q1bJ8uytG7dOrtDAQA0gfEeJ4LxHokixe4AgBNVUlIS+vuLL76o//qv/9L69etDx7Kzs1v1ukeOHJHP56t3/OjRo0pNTW32+bm5ua36d+s67bTT9Ne//lVVVVVas2aNbrjhBh08eFDz58+PyusDAJAIGO8BuAEz6Eh4HTt2DH3k5ubKsqywY8EB+7PPPtMFF1ygrKwsderUSTfeeKP2798fep0zzjhDkydP1sSJE9WmTRtdeumloeVaTz75pC688EJlZmbqwQcfVGVlpa6//noVFxcrIyNDffr00R/+8IewuOoueTvjjDP085//XJMmTVJeXp4KCws1Y8aMZt9famqqOnbsqM6dO2vMmDG67LLLtGTJktDjDd0R3rlzpyzL0scffxw69sorr+ikk05SRkaGzj//fD355JOyLEsVFRWhc+bMmaPOnTsrKytLV155pWbNmqWOHTuGxfPyyy9r4MCBSk9PV8+ePTV9+nRVVVWFHv/yyy81cuRIpaenq1+/flq2bFnY84PxLlq0SGeddZYyMzM1aNAgrVy5Muy8d955RyNGjFBGRoa6du2qO++8U4cPHw49Pnv2bJ100klKS0tThw4d9B//8R+hx55//nl973vfU3p6utq2basLLrhAlZWVzV5rSXrzzTdlWZaWL1+uQYMGKSsrS9///ve1efPmsPPuv/9+tWvXTn6/Xz/5yU905MiReq/12GOPqXfv3kpPT9cpp5yiJ554IvTY3LlzlZubq61bt4aO3XjjjRowYEDEsQKAmzDeM94z3sMVDJBE5s2bZ3Jzc+sd37Nnj8nPzzdTp04169atMytXrjRnn322GTduXOicYcOGmezsbHPfffeZ9evXm/Xr15vDhw8bSaZjx47m6aefNlu2bDHbt2835eXl5te//rVZuXKl2bJli3nqqadMenq6ef3110Ovd9VVV5mrrroq7PX9fr+ZPn262bBhg3niiSeMJPPuu+82+n7uvvtuM2zYsNDnmzZtMieffLIpLi4OHfvyyy+NJPPll1+GjpWUlBhJ5qOPPjLGGLNu3Trj9XrNvffea9avX2/+/Oc/m44dOxpJ5vDhw8YYY95++23j9XrN7Nmzzfr1683DDz9s8vPzTYcOHUKvu2TJEpOXl2f+/Oc/m82bN5vFixeboqIiM3PmTGOMMceOHTO9evUy48aNM5999plZunSp6d+/v5FkFi9eHBZvv379zJtvvmnWr19vxo8fb3r16mWqqqqMMcasXbvWZGVlmUcffdRs3LjRvPvuu6Z///7mpz/9qTHGmPfee8+kpqaaBQsWmK1bt5pVq1aZRx991BhjzNatW43X6zVz5swxW7duNZ999pl55JFHTEVFRYPXuO71W7x4sZFkzjzzTPPee++ZNWvWmGHDhplzzz039Jz58+ebjIwMM3/+fLNu3Tpz1113mZycnLD/qyeffNIUFRWZ1157zWzZssUsWLDA5ObmmhdeeCF0zvjx483IkSPNsWPHzMsvv2zS0tLM559/3ujXAwAggPE+gPGe8R7JhwQdSaWxAfu+++4z48ePDzu2ceNGI8ls27bNGBMYUM8444ywc4ID9pQpU5r9t2+66SZz9dVXhz5vaMAePXp02HP69+9vpk6d2uhr3n333cbj8ZisrCyTnp5uJBlJZs6czP2XFAAACGpJREFUOaFzIhmwb7/9djN48OCw177zzjvDBuxLL73U/PCHPww754c//GHYgD1y5Ejz0EMPhZ3zxBNPmO7duxtjjHn99ddNWlqa2bNnT+jxhQsXNjhgP/PMM6FzVq1aZSSZr776yhhjzNVXX21uu+22sH9nyZIlJjU11Rw9etQ8++yzpqCgwBw8eLDeNfvggw+MZVmmpKSkoUtaT2MD9vvvvx8655VXXjFer9ccO3bMGGPMoEGDzOTJk8NeZ+DAgWEDdufOnc2rr74ads59991nRo0aFfp89+7dpkOHDubWW281BQUF5sEHH4woZgBwO8b7AMZ7xnskH2rQ4QqfffaZ3nrrrQbr0zZv3qyuXbtKkoYMGdLg8xs6Pnv2bD399NPavn27KioqdOTIkWa7eg4YMCDs806dOmn37t3NPuell15SRUWF/vSnP2nz5s366U9/2uRz6lq/fr2GDh0adqzu5+vXr9cNN9xQ75z3338/9Pnnn3+uVatW6Ve/+lXoWFVVlY4cOaJjx47pyy+/VI8ePdS2bdvQ48OHD2/0fQV16tRJkrR7925169ZNn332mTZu3Kg//vGPoXOMMTp69Ki+/vprXXjhhXrggQfUvXt3jR07VmPHjtVll12m9PR0nX766TrzzDPVp08fjRkzRhdccIEuv/zyFtcI1o2vqqpK+/btU/v27bVu3TpNmTIl7Pzhw4fr008/lSTt27dPO3bs0DXXXCPLskLnHDt2TB06dAh93q5dO82dO1eXXnqpRo0apUmTJrUoRgBAOMZ7xnvGeyQ6EnS4Qnl5uS6//HLdf//99R4rLCwM/T0rK6vB59c9/tRTT+m+++7T7373O51++unKycnRb37zm2Y7g9ZtNmNZlqqrq5t8Tlpamnr27ClJeuihh3TeeedpxowZuu+++yRJHk+glYQxJvSco0ePNvmarVFdXa2DBw/qoYce0kUXXVTvca/X26LXq30tgoNa8FqUl5fr1ltv1U9+8pN6z+vSpYtSU1P1+eef6+9//7uWLFmie++9Vw888ID+8Y9/KCcnR8uWLdMHH3ygv/3tb/rd736nX/7yl1qxYoW6dOkSlfiaU15eLkmaP3++Tj311LDHUlLCf+y+++678nq92rFjhw4fPqzMzMyIYwQAhGO8P3GM94z3sBdN4uAKp512mtasWaMePXqoZ8+eYR+t+QH5wQcf6JxzztGPf/xjDRo0SD179tSmTZtiEHl9v/zlLzVjxgzt2bNHUuCurBTe3Xb16tVhz+ndu7dWrFgRdqzu582d4/F4dOqpp2rDhg31rmHPnj1lWZZOOeUUbdmyRXv37g09r3bjmkiddtppWrt2bYP/TnAgTU1N1ZgxY/Tb3/5Wn376qdatW6f33nsvFOtZZ52lBx54QJ9++qmqqqq0aNGiFsfRmD59+ugf//hH2LHa77OoqEht27bVV199VS/+bt26hc5755139PDDD2vx4sXyeDzcUQeAE8R4z3jPeI9Exww6XOH222/XvHnzdO2112rSpEnKz8/Xhg0b9NJLL+lPf/pTi1+vV69eeuWVV7R06VIVFRXpj3/8o7744gudcsopMYg+3KhRo9SzZ0/NmjVLv/3tb5Wfn69TTz1V06dPV2Fhob755htNnTo17Dk/+9nP9Pvf/16/+tWvdO2112rlypV69tlnJR2/W3zrrbdqzJgxevTRRzV27Fi99dZbWrp0qdLS0kKvM3XqVF1++eUqLCzUZZddJinwy8GGDRs0bdo0XXjhhSoqKtKECRM0c+ZM7du3r14skbj33ns1YsQITZo0Sddff70yMjL0r3/9S8uXL9fs2bP16quvqqSkRGeeeaZyc3P12muvyePxqFevXnrvvff04YcfavTo0Wrbtq0+/PBD7d+/P6r/N7fffrtuvvlmDRo0SEOHDg0tRezbt6+kwC8MU6dO1T333KOsrCyNHj1aFRUV+uSTT3T48GHdeuut+u677zRhwgT94he/0Pnnn69nnnlGw4cP18UXX6xLLrkkarECgJsw3jPeM94j0TGDDlfo2rWrPvjgA5WXl2v06NHq37+/7rzzThUUFLTq9W699VZdeOGF+rd/+zcNHz5chw8f1n/+539GOerG3XHHHfrDH/6gnTt3SpKefvpplZWVadCgQfrFL36h6dOnh53fu3dvvfDCC3r22Wc1YMAAzZs3T/fee68sywrt/Xreeefp4Ycf1owZM3Tqqadq+fLluu2225Senh56nfHjx2vhwoV64403NHjwYI0YMUKPPPJI6C5xSkqKXnvtNX377bcaMmSIbr755oi2lqlr8ODBWrZsmT7//HONHDlSgwcP1v333x9aspafn68XX3xRo0aNUt++fTV//ny99NJL6tWrl/Ly8rR06VKNHTtWffr00f333685c+Zo1KhRrbnUDZowYYLuuusu3XHHHRoyZIj27t1b7///lltu0e9//3s9/vjj6t+/v0aNGqVnn31W3bt3lyTdfPPNat++vaZNmxZ6z9OmTdNNN92kXbt2RS1WAHATxnvGe8Z7JDrL1C5kAeAav/rVr/TCCy9o48aNjZ5z7bXXaufOnWH7sAIAgMTBeA8kFpa4Ay7x6KOPasSIEcrPzw8tHbv77rvDzpk1a5bGjRunjIwMvfHGG3r++ef11FNP2RMwAABoMcZ7ILExgw64xM0336yFCxdq//79Ki4u1g033KC77rorrBvrD37wg9DSwJ49e+qOO+7QTTfdZGPUAACgJRjvgcRGgg4AAAAAgAPQJA4AAAAAAAcgQQcAAAAAwAFI0AEAAAAAcAASdAAAAAAAHIAEHQAAAAAAByBBBwAAAADAAUjQAQAAAABwABJ0AAAAAAAcgAQdAAAAAAAH+P9VjE4M7qRKrwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(12, 6), sharey=True)\n", + "african_nations = predictions[predictions[\"cont_africa\"] == 1]\n", + "non_african_nations = predictions[predictions[\"cont_africa\"] == 0]\n", + "african_nations = african_nations.sort_values(by=[\"rugged\"])\n", + "non_african_nations = non_african_nations.sort_values(by=[\"rugged\"])\n", + "fig.suptitle(\"Regression line 90% CI\", fontsize=16)\n", + "ax[0].plot(non_african_nations[\"rugged\"],\n", + " non_african_nations[\"mu_mean\"])\n", + "ax[0].fill_between(non_african_nations[\"rugged\"], \n", + " non_african_nations[\"mu_perc_5\"],\n", + " non_african_nations[\"mu_perc_95\"],\n", + " alpha=0.5)\n", + "ax[0].plot(non_african_nations[\"rugged\"], \n", + " non_african_nations[\"true_gdp\"],\n", + " \"o\")\n", + "ax[0].set(xlabel=\"Terrain Ruggedness Index\",\n", + " ylabel=\"log GDP (2000)\",\n", + " title=\"Non African Nations\")\n", + "idx = np.argsort(african_nations[\"rugged\"])\n", + "ax[1].plot(african_nations[\"rugged\"], \n", + " african_nations[\"mu_mean\"])\n", + "ax[1].fill_between(african_nations[\"rugged\"],\n", + " african_nations[\"mu_perc_5\"],\n", + " african_nations[\"mu_perc_95\"],\n", + " alpha=0.5)\n", + "ax[1].plot(african_nations[\"rugged\"], \n", + " african_nations[\"true_gdp\"],\n", + " \"o\")\n", + "ax[1].set(xlabel=\"Terrain Ruggedness Index\",\n", + " ylabel=\"log GDP (2000)\",\n", + " title=\"African Nations\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The above figure shows the uncertainty in our estimate of the regression line, and the 90% CI around the mean. We can also see that most of the data points actually lie outside the 90% CI, and this is expected because we have not plotted the outcome variable which will be affected by `sigma`! Let us do so next." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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muDhqkNUgAXhf/SYqyXJoYe9NVSqmnvah/a0QZJgv4+diIioPk3LTYiIiIicV3ebCQHWmp50i4sWgVaXNu9DkiQEebggNsjdYSZ4IiKiuligExERETUjwGq0D0sP83KFUaduYYumDQz3Qml5ZUeFRkREXQyHuBMRERE1o+4943VnVG8PrVrlcI87ERFRXSzQiYiIiFrpenrPiYiIWsICnYiIiKiVjNfZg05ERNQcFuhERERErXS9Q9yJiIiawwKdiIiIqJX4DHMiIrqRWKATERERERERKQALdCIiIiIiIiIFYIFOREREREREpAAs0ImIiIiIiIgUgAU6ERERERERkQKwQCciIiIiIiJSABboRERERERERArAAp2IiIiIiIhIAVigExERERERESkAC3QiIiIiIiIiBWCBTkRERERERKQALNCJiIiIiIiIFIAFOhEREREREZECsEAnIiIiIiIiUgAW6EREREREREQKwAKdiIiIiIiISAFYoBMREREREREpAAt0IiIiIiIiIgVggU5ERERERESkABq5A7jRhBAAgMuXL8scCRERUY3anFSbo+j6MNcTEZHStDfXd/kCvbi4GAAQFBQkcyRERESOiouLYbFY5A6j02OuJyIipWprrpdEF798X11djd9++w0mkwmSJF3Xvi5fvoygoCCcOnUKZrO5gyLsWniOmsfz0zKeo+bx/LSsM5wjIQSKi4vh7+8PlYp3m12vtub6zvA7cqM487EDzn38PHYeO4/95mpvru/yPegqlQqBgYEduk+z2ex0v+BtxXPUPJ6flvEcNY/np2VKP0fsOe847c31Sv8duZGc+dgB5z5+HjuP3dnIeeztyfW8bE9ERERERESkACzQiYiIiIiIiBRAPXfu3LlyB9GZqNVq3HHHHdBouvzdAe3Gc9Q8np+W8Rw1j+enZTxH1BJn/h1x5mMHnPv4eew8dmfTGY+9y08SR0RERERERNQZcIg7ERERERERkQKwQCciIiIiIiJSABboRERERERERArAAp2IiIiIiIhIAVigt8GyZcvQrVs3GAwGJCYm4rvvvpM7JMXYuXMnRo8eDX9/f0iShM2bN8sdkqJkZWWhb9++MJlM8PHxwV133YXCwkK5w1KM5cuXIyYmBmazGWazGUlJScjJyZE7LMVasGABJEnCtGnT5A5FMebOnQtJkhxekZGRcodFCuWs+dxZc7Uz52Dm12ucLXc6e148ffo0HnzwQXh6esJoNCI6Ohr5+flyh9UqLNBbaePGjZgxYwYyMjLw/fffIzY2FqmpqSgqKpI7NEUoLS1FbGwsli1bJncoipSXl4f09HTs2bMHubm5uHr1KoYNG4bS0lK5Q1OEwMBALFiwAPv27UN+fj4GDRqEsWPH4qeffpI7NMXZu3cvVqxYgZiYGLlDUZxevXrhzJkz9tdXX30ld0ikQM6cz501VztzDmZ+reGsudNZ8+LFixeRnJwMrVaLnJwc/Pzzz1i0aBGsVqvcobWOoFbp16+fSE9Pt7+vqqoS/v7+IisrS8aolAmAyM7OljsMRSsqKhIARF5entyhKJbVahWrV6+WOwxFKS4uFhERESI3N1fcfvvtYurUqXKHpBgZGRkiNjZW7jCoE2A+r+HMudrZc7Cz5VdnzZ3OnBdnzpwpBg4cKHcY7cYe9FaoqKjAvn37MGTIEPsylUqFIUOG4JtvvpExMuqsLl26BADw8PCQORLlqaqqwoYNG1BaWoqkpCS5w1GU9PR03HnnnQ7fRXTN0aNH4e/vj7CwMIwfPx6//vqr3CGRwjCfE+C8OdhZ86sz505nzYtbtmxBQkIC7rvvPvj4+CA+Ph6rVq2SO6xW08gdQGdw/vx5VFVVwWazOSy32WwoKCiQKSrqrKqrqzFt2jQkJycjKipK7nAU48cff0RSUhLKysrg5uaG7Oxs9OzZU+6wFGPDhg34/vvvsXfvXrlDUaTExESsXbsW3bt3x5kzZ/DSSy/htttuw6FDh2AymeQOjxSC+ZycMQc7c3515tzpzHnxxIkTWL58OWbMmIHZs2dj7969mDJlCnQ6HdLS0uQOr0Us0IlusvT0dBw6dMhp7gNqre7du2P//v24dOkSPv74Y6SlpSEvL89p/ohozqlTpzB16lTk5ubCYDDIHY4ijRgxwv5zTEwMEhMTERISgg8//BATJ06UMTIiUhJnzMHOml+dPXc6c16srq5GQkICMjMzAQDx8fE4dOgQ3nzzzU5RoHOIeyt4eXlBrVbj3LlzDsvPnTsHX19fmaKizuipp57CP/7xD2zfvh2BgYFyh6MoOp0O4eHh6NOnD7KyshAbG4slS5bIHZYi7Nu3D0VFRejduzc0Gg00Gg3y8vLw2muvQaPRoKqqSu4QFcfd3R233norjh07JncopCDM587NWXOws+ZX5k5HzpQX/fz8GlyA6tGjR6cZ4s8CvRV0Oh369OmDbdu22ZdVV1dj27ZtTnUPD7WfEAJPPfUUsrOz8eWXXyI0NFTukBSvuroa5eXlcoehCIMHD8aPP/6I/fv3218JCQkYP3489u/fD7VaLXeIilNSUoLjx4/Dz89P7lBIQZjPnRNzsCNnya/MnY6cKS8mJyc3eJTikSNHEBISIlNEbcMh7q00Y8YMpKWlISEhAf369cPixYtRWlqKCRMmyB2aIpSUlDhckfvll1+wf/9+eHh4IDg4WMbIlCE9PR3vv/8+Pv30U5hMJpw9exYAYLFYYDQaZY5Ofs8//zxGjBiB4OBgFBcX4/3338eOHTuwdetWuUNTBJPJ1OBeSVdXV3h6ejrNPZQteeaZZzB69GiEhITgt99+Q0ZGBtRqNf7yl7/IHRopjDPnc2fN1c6cg505vzp77nTmvDh9+nQMGDAAmZmZuP/++/Hdd99h5cqVWLlypdyhtY7c08h3JkuXLhXBwcFCp9OJfv36iT179sgdkmJs375dAGjwSktLkzs0RWjs3AAQa9askTs0RXjkkUdESEiI0Ol0wtvbWwwePFh88cUXcoelaM70qJjWGDdunPDz8xM6nU4EBASIcePGiWPHjskdFimUs+ZzZ83VzpyDmV8dOVPudPa8+Nlnn4moqCih1+tFZGSkWLlypdwhtZokhBA384IAERERERERETXEe9CJiIiIiIiIFIAFOhEREREREZECsEAnIiIiIiIiUgAW6EREREREREQKwAKdiIiIiIiISAFYoBMREREREREpAAt0IiIiIiIiIgVggU50gzzwwAN44IEH5A5DdmVlZZAkCZ9//rncodxQs2bNQv/+/eUOg4iIbjLm+xrM90QdgwU6dXqSJDX7mjt3rixxrVixAitWrLiufcyaNct+HBqNBsHBwZg0aRIuXbrUQVFSQUEBJElCQUGB3KEQEVEzmO/pejDfU2ehkTsAout15swZ+88bN27E//3f/6GwsNC+zM3NrV37raiogE6na7D86tWr0Gq1LW5vsVja9bn19e7dG//85z9RVVWFQ4cOYcKECSgtLcW6des6ZP9ERESdAfM9ETkD9qBTp+fr62t/WSwWSJLksKw2YR84cADDhg2Dq6sr/Pz88Mgjj+DixYv2/fTv3x8zZsxAeno6PDw8MHbsWPtwrdWrV2PkyJFwcXHBokWLUF5ejocffhghISEwGo2IjIzEG2+84RBX/SFv/fv3xzPPPIPp06fD3d0d/v7+yMrKavH4tFotfH19ERAQgNTUVNx9993Izc21r2/sivDZs2chSRL27NljX7Zp0ybccsstMBqNGDp0KFavXg1JklBWVmZvs2zZMgQEBMDV1RX3338/Fi5cCF9fX4d4Pv74Y8TGxsJgMCA8PByZmZmoqqqyrz98+DCSk5NhMBgQFRWFHTt2OGxfG++WLVtw2223wcXFBfHx8cjPz3dot337dgwYMABGoxHBwcF4+umnceXKFfv6xYsX45ZbboFer4fNZsNf//pX+7oPPvgAvXr1gsFggJeXF4YNG4by8vIWzzUAfP7555AkCXl5eYiPj4erqyv+9Kc/4fjx4w7t5s2bB29vb5jNZjz++OOoqKhosK/ly5eje/fuMBgM6NGjB1atWmVft3LlSlgsFpw8edK+7JFHHkFMTEyrYyUicibM98z3zPfkFARRF7JmzRphsVgaLP/999+F1WoVGRkZoqCgQOTn54vbb79djBgxwt4mMTFRuLm5iTlz5ojCwkJRWFgorly5IgAIX19f8c4774gTJ06IX3/9VZSUlIiXXnpJ5OfnixMnToi1a9cKg8EgPv30U/v+xo0bJ8aNG+ewf7PZLDIzM8WRI0fEqlWrBACxc+fOJo9n5syZIjEx0f7+2LFj4tZbbxUhISH2ZYcPHxYAxOHDh+3Lzpw5IwCIb775RgghREFBgVCr1WL27NmisLBQvPvuu8LX11cAEFeuXBFCCPGvf/1LqNVqsXjxYlFYWCiWLFkirFarsNls9v3m5uYKd3d38e6774rjx4+LnJwcERQUJBYsWCCEEKKyslJERESIESNGiAMHDoht27aJ6OhoAUDk5OQ4xBsVFSU+//xzUVhYKMaMGSMiIiJEVVWVEEKIn3/+Wbi6uoqlS5eKo0ePip07d4ro6GjxxBNPCCGE2LVrl9BqteLDDz8UJ0+eFPv27RNLly4VQghx8uRJoVarxbJly8TJkyfFgQMHxGuvvSbKysoaPcf1z19OTo4AIAYOHCh27dolDh06JBITE8WgQYPs26xbt04YjUaxbt06UVBQIJ599llhMpkc/q9Wr14tgoKCxObNm8WJEyfEhx9+KCwWi9iwYYO9zZgxY0RycrKorKwUH3/8sdDr9eLgwYNN/j4QEVEN5vsazPfM99T1sECnLqWphD1nzhwxZswYh2VHjx4VAMS///1vIURNQu3fv79Dm9qEPWvWrBY/e+LEiWL8+PH2940l7CFDhjhsEx0dLTIyMprc58yZM4VKpRKurq7CYDAIAAKAWLZsmb1NaxL21KlTRZ8+fRz2/fTTTzsk7LFjx4p77rnHoc0999zjkLCTk5PFK6+84tBm1apVIjQ0VAghxKeffir0er34/fff7euzs7MbTdjvvfeevc2+ffsEAPHLL78IIYQYP368mDJlisPn5ObmCq1WK65evSrWr18vPD09RWlpaYNztnv3biFJkjhz5kxjp7SBphL2V199ZW+zadMmoVarRWVlpRBCiPj4eDFjxgyH/cTGxjok7ICAAPHJJ584tJkzZ45ISUmxvy8qKhI2m01MnjxZeHp6ikWLFrUqZiIiZ8d8X4P5nvmeuh7eg05O4cCBA9i6dWuj96cdP34cwcHBAICEhIRGt29s+eLFi/HOO+/g119/RVlZGSoqKlqc1TMmJsbhvZ+fH4qKilrc5qOPPkJZWRnefvttHD9+HE888USz29RXWFiIfv36OSyr/76wsBATJkxo0Oarr76yvz948CD27duHF1980b6sqqoKFRUVqKysxOHDhxEWFgYvLy/7+qSkpCaPq5afnx8AoKioCN26dcOBAwdw9OhRvPXWW/Y2QghcvXoVp06dwsiRIzF//nyEhoZi+PDhGD58OO6++24YDAb07dsXAwcORGRkJFJTUzFs2DDce++9bb5HsH58VVVVuHDhAnx8fFBQUIBZs2Y5tE9KSsIPP/wAALhw4QJOnz6NBx98EJIk2dtUVlbCZrPZ33t7e2PlypUYO3YsUlJSMH369DbFSEREjpjvme+Z76mzY4FOTqGkpAT33nsv5s2b12Cdv7+//WdXV9dGt6+/fO3atZgzZw5effVV9O3bFyaTCX//+99bnBm0/mQzkiShurq62W30ej3Cw8MBAK+88goGDx6MrKwszJkzBwCgUtVMJSGEsG9z9erVZvfZHtXV1SgtLcUrr7yCO++8s8F6tVrdpv3VPRe1Sa32XJSUlGDy5Ml4/PHHG2wXGBgIrVaLgwcP4ssvv0Rubi5mz56N+fPn49tvv4XJZMKOHTuwe/dufPHFF3j11VfxwgsvYO/evQgMDOyQ+FpSUlICAFi3bh3i4uIc1mk0jl+7O3fuhFqtxunTp3HlyhW4uLi0OkYiInLEfH/9mO+Z70lenCSOnELv3r1x6NAhhIWFITw83OHVni/I3bt344477sBjjz2G+Ph4hIeH49ixYzcg8oZeeOEFZGVl4ffffwdQc1UWcJzddv/+/Q7bdO/eHXv37nVYVv99S21UKhXi4uJw5MiRBucwPDwckiShR48eOHHiBM6fP2/fru7ENa3Vu3dv/Pzzz41+Tm0i1Wq1SE1Nxcsvv4wffvgBBQUF2LVrlz3W2267DfPnz8cPP/yAqqoqbNmypc1xNCUyMhLffvutw7K6xxkUFAQvLy/88ssvDeLv1q2bvd327duxZMkS5OTkQKVS8Yo6EdF1Yr5nvme+p86OPejkFKZOnYo1a9bgoYcewvTp02G1WnHkyBF89NFHePvtt9u8v4iICGzatAnbtm1DUFAQ3nrrLfz444/o0aPHDYjeUUpKCsLDw7Fw4UK8/PLLsFqtiIuLQ2ZmJvz9/fHbb78hIyPDYZsnn3wSr7/+Ol588UU89NBDyM/Px/r16wFcu1o8efJkpKamYunSpRg+fDi2bt2Kbdu2Qa/X2/eTkZGBe++9F/7+/rj77rsB1PxxcOTIEcydOxcjR45EUFAQ0tLSsGDBAly4cKFBLK0xe/ZsDBgwANOnT8fDDz8Mo9GIn376CXl5eVi8eDE++eQTnDlzBgMHDoTFYsHmzZuhUqkQERGBXbt24euvv8aQIUPg5eWFr7/+GhcvXuzQ/5upU6di0qRJiI+PR79+/exDEXv27Amg5g+GjIwMPP/883B1dcWQIUNQVlaG7777DleuXMHkyZPxv//9D2lpaXjuuecwdOhQvPfee0hKSsKoUaMwevToDouViMiZMN8z3zPfU2fHHnRyCsHBwdi9ezdKSkowZMgQREdH4+mnn4anp2e79jd58mSMHDkSf/7zn5GUlIQrV67gb3/7WwdH3bRp06bhjTfewNmzZwEA77zzDoqLixEfH4/nnnsOmZmZDu27d++ODRs2YP369YiJicGaNWswe/ZsSJJkf/br4MGDsWTJEmRlZSEuLg55eXmYMmUKDAaDfT9jxoxBdnY2PvvsM/Tp0wcDBgzAa6+9Zr9KrNFosHnzZvz3v/9FQkICJk2a1KpHy9TXp08f7NixAwcPHkRycjL69OmDefPm2YesWa1WbNy4ESkpKejZsyfWrVuHjz76CBEREXB3d8e2bdswfPhwREZGYt68eVi2bBlSUlLac6oblZaWhmeffRbTpk1DQkICzp8/3+D//6mnnsLrr7+OFStWIDo6GikpKVi/fj1CQ0MBAJMmTYKPjw/mzp1rP+a5c+di4sSJOHfuXIfFSkTkTJjvme+Z76mzk0TdG1mIyGm8+OKL2LBhA44ePdpkm4ceeghnz551eA4rERERdR7M90SdC4e4EzmJpUuXYsCAAbBarfahYzNnznRos3DhQowYMQJGoxGfffYZPvjgA6xdu1aegImIiKjNmO+JOjf2oBM5iUmTJiE7OxsXL15ESEgIJkyYgGeffdZhNta77rrLPjQwPDwc06ZNw8SJE2WMmoiIiNqC+Z6oc2OBTkRERERERKQAnCSOiIiIiIiISAFYoBMREREREREpAAt0IiIiIiIiIgVggU5ERERERESkACzQiYiIiIiIiBSABToRERERERGRArBAJyIiIiIiIlIAFuhERERERERECsACnYiIiIiIiEgB/j8wwOGT7wcq7AAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(12, 6), sharey=True)\n", + "fig.suptitle(\"Posterior predictive distribution with 90% CI\", fontsize=16)\n", + "ax[0].plot(non_african_nations[\"rugged\"], \n", + " non_african_nations[\"y_mean\"])\n", + "ax[0].fill_between(non_african_nations[\"rugged\"], \n", + " non_african_nations[\"y_perc_5\"],\n", + " non_african_nations[\"y_perc_95\"],\n", + " alpha=0.5)\n", + "ax[0].plot(non_african_nations[\"rugged\"], \n", + " non_african_nations[\"true_gdp\"],\n", + " \"o\")\n", + "ax[0].set(xlabel=\"Terrain Ruggedness Index\",\n", + " ylabel=\"log GDP (2000)\",\n", + " title=\"Non African Nations\")\n", + "idx = np.argsort(african_nations[\"rugged\"])\n", + "\n", + "ax[1].plot(african_nations[\"rugged\"], \n", + " african_nations[\"y_mean\"])\n", + "ax[1].fill_between(african_nations[\"rugged\"],\n", + " african_nations[\"y_perc_5\"],\n", + " african_nations[\"y_perc_95\"],\n", + " alpha=0.5)\n", + "ax[1].plot(african_nations[\"rugged\"], \n", + " african_nations[\"true_gdp\"],\n", + " \"o\")\n", + "ax[1].set(xlabel=\"Terrain Ruggedness Index\",\n", + " ylabel=\"log GDP (2000)\",\n", + " title=\"African Nations\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We observe that the outcome from our model and the 90% CI accounts for the majority of the data points that we observe in practice. It is usually a good idea to do such posterior predictive checks to see if our model gives valid predictions. \n", + "\n", + "Finally, let us revisit our earlier question of how robust the relationship between terrain ruggedness and GDP is against any uncertainty in the parameter estimates from our model. For this, we plot the distribution of the slope of the log GDP given terrain ruggedness for nations within and outside Africa. As can be seen below, the probability mass for African nations is largely concentrated in the positive region and vice-versa for other nations, lending further credence to the original hypothesis. " + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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tWvXwsnJqdzVJonoxcMkh+gFk56ejiFDhqB+/fr497//LU24p7rF2toaHTt2xOeff4709HSYmZmhf//+WLhwoXRvHKK6xNfXF8uXL0d0dDTy8/PRokULrF27Vkp+VOzs7ODp6Yl169bh3r17sLS0RFBQEBYuXPjMCwUQkf7hnBwiIiIiItIrnJNDRERERER6hUkOERERERHpFSY5RERERESkV5jkEBERERGRXmGSQ0REREREeoVJDhERERER6RUmOUREREREpFeY5BARERERkV5hkkNERERERHqFSQ4REREREekVJjlERERERKRXmOSfbz48AAAgAElEQVQQEREREZFeYZJDRERERER6hUkOERERERHpFSY5RERERESkV5jkEBERERGRXmGSQ0REREREeoVJDhERERER6RUmOUREREREpFeY5BARERERkV5hkkNERERERHqFSQ4REREREekVJjlERERERKRXmOQQEREREZFeYZJDRERERER6hUkOERERERHpFSY5RERERESkV5jkEBERERGRXmGSQ0REREREeoVJDhERERER6RUmOUREREREpFeY5BARERERkV5hkkNERERERHqFSQ4REREREekVJjlERERERKRXmOQQEREREZFeYZJDRERERER6hUkOERERERHpFSY5RERERESkV+rpOoAnlZSU4NatW7CwsIBMJtN1OEREREREpCNCCDx69AiOjo4wMKh8/0ytS3Ju3boFJycnXYdBRERERES1xPXr19GkSZNK1691SY6FhQUA5YlYWlrqOBoiIiIiItKVrKwsODk5STlCZdW6JEc1RM3S0pJJDhERERERVXkaCxceICIiIiIivcIkh4iIiIiI9AqTHCIiIiIi0iu1bk4OEREREakrLi5GYWGhrsMgqhYKhaJKy0NXBpMcIiIiolpKCIHbt28jIyND16EQVRsDAwO4ublBoVBorU0mOURERES1lCrBadiwIUxNTXmjdNI7JSUluHXrFtLS0uDs7Ky1a5xJDhEREVEtVFxcLCU4DRo00HU4RNXGzs4Ot27dQlFREQwNDbXSZpUHvx0/fhwBAQFwdHSETCZDdHS0tK2wsBBTpkyBp6cnzMzM4OjoiBEjRuDWrVtaCZaIiIjoRaGag2NqaqrjSIiql2qYWnFxsdbarHKSk5OTg/bt2+PTTz/V2Jabm4uzZ89i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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "weight = samples[\"linear.weight\"]\n", + "weight = weight.reshape(weight.shape[0], 3)\n", + "gamma_within_africa = weight[:, 1] + weight[:, 2]\n", + "gamma_outside_africa = weight[:, 1]\n", + "fig = plt.figure(figsize=(10, 6))\n", + "sns.distplot(gamma_within_africa, kde_kws={\"label\": \"African nations\"},)\n", + "sns.distplot(gamma_outside_africa, kde_kws={\"label\": \"Non-African nations\"})\n", + "fig.suptitle(\"Density of Slope : log(GDP) vs. Terrain Ruggedness\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Model Serving via TorchScript\n", + "\n", + "Finally, note that the `model`, `guide` and the `Predictive` utility class are all `torch.nn.Module` instances, and can be serialized as [TorchScript](https://pytorch.org/docs/stable/jit.html). \n", + "\n", + "Here, we show how we can serve a Pyro model as a [torch.jit.ModuleScript](https://pytorch.org/docs/stable/jit.html#torch.jit.ScriptModule), which can be run separately as a C++ program without a Python runtime.\n", + "\n", + "To do so, we will rewrite our own simple version of the `Predictive` utility class using Pyro's [effect handling library](http://pyro.ai/examples/effect_handlers.html). This uses:\n", + "\n", + " - the `trace` poutine to capture the execution trace from running the model/guide code.\n", + " - the `replay` poutine to condition the sites in the model to values sampled from the guide trace.\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "from collections import defaultdict\n", + "from pyro import poutine\n", + "from pyro.poutine.util import prune_subsample_sites\n", + "import warnings\n", + "\n", + "\n", + "class Predict(torch.nn.Module):\n", + " def __init__(self, model, guide):\n", + " super().__init__()\n", + " self.model = model\n", + " self.guide = guide\n", + " \n", + " def forward(self, *args, **kwargs):\n", + " samples = {}\n", + " guide_trace = poutine.trace(self.guide).get_trace(*args, **kwargs)\n", + " model_trace = poutine.trace(poutine.replay(self.model, guide_trace)).get_trace(*args, **kwargs)\n", + " for site in prune_subsample_sites(model_trace).stochastic_nodes:\n", + " samples[site] = model_trace.nodes[site]['value']\n", + " return tuple(v for _, v in sorted(samples.items()))\n", + "\n", + "predict_fn = Predict(model, guide)\n", + "predict_module = torch.jit.trace_module(predict_fn, {\"forward\": (x_data,)}, check_trace=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We use [torch.jit.trace_module](https://pytorch.org/docs/stable/jit.html#torch.jit.trace_module) to trace the `forward` method of this module and save it using [torch.jit.save](https://pytorch.org/docs/stable/jit.html#torch.jit.save). This saved model `reg_predict.pt` can be loaded with PyTorch's C++ API using `torch::jit::load(filename)`, or using the Python API as we do below. " + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(tensor([9.2165]),\n", + " tensor([[-1.6612, -0.1498, 0.4282]]),\n", + " tensor([ 7.5951, 8.2473, 9.3864, 9.2590, 9.0540, 9.3915, 8.6764, 9.3775,\n", + " 9.5473, 9.6144, 10.3521, 8.5452, 5.4008, 8.4601, 9.6219, 9.7774,\n", + " 7.1958, 7.2581, 8.9159, 9.0875, 8.3730, 8.7903, 9.3167, 8.8155,\n", + " 7.4433, 9.9981, 8.6909, 9.2915, 10.1376, 7.7618, 10.1916, 7.4754,\n", + " 6.3473, 7.7584, 9.1307, 6.0794, 8.5641, 7.8487, 9.2828, 9.0763,\n", + " 7.9250, 10.9226, 8.0005, 10.1799, 5.3611, 8.1174, 8.0585, 8.5098,\n", + " 6.8656, 8.6765, 7.8925, 9.5233, 10.1269, 10.2661, 7.8883, 8.9194,\n", + " 10.2866, 7.0821, 8.2370, 8.3087, 7.8408, 8.4891, 8.0107, 7.6815,\n", + " 8.7497, 9.3551, 9.9687, 10.4804, 8.5176, 7.1679, 10.8805, 7.4919,\n", + " 8.7088, 9.2417, 9.2360, 9.7907, 8.4934, 7.8897, 9.5338, 9.6572,\n", + " 9.6604, 9.9855, 6.7415, 8.1721, 10.0646, 10.0817, 8.4503, 9.2588,\n", + " 8.4489, 7.7516, 6.8496, 9.2208, 8.9852, 10.6585, 9.4218, 9.1290,\n", + " 9.5631, 9.7422, 10.2814, 7.2624, 9.6727, 8.9743, 6.9666, 9.5856,\n", + " 9.2518, 8.4207, 8.6988, 9.1914, 7.8161, 9.8446, 6.5528, 8.5518,\n", + " 6.7168, 7.0694, 8.9211, 8.5311, 8.4545, 10.8346, 7.8768, 9.2537,\n", + " 9.0776, 9.4698, 7.9611, 9.2177, 8.0880, 8.5090, 9.2262, 8.9242,\n", + " 9.3966, 7.5051, 9.1014, 8.9601, 7.7225, 8.7569, 8.5847, 8.8465,\n", + " 9.7494, 8.8587, 6.5624, 6.9372, 9.9806, 10.1259, 9.1864, 7.5758,\n", + " 9.8258, 8.6375, 7.6954, 8.9718, 7.0985, 8.6360, 8.5951, 8.9163,\n", + " 8.4661, 8.4551, 10.6844, 7.5948, 8.7568, 9.5296, 8.9530, 7.1214,\n", + " 9.1401, 8.4992, 8.9115, 10.9739, 8.1593, 10.1162, 9.7072, 7.8641,\n", + " 8.8606, 7.5935]),\n", + " tensor(0.9631))" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "torch.jit.save(predict_module, '/tmp/reg_predict.pt')\n", + "pred_loaded = torch.jit.load('/tmp/reg_predict.pt')\n", + "pred_loaded(x_data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let us check that our `Predict` module was indeed serialized correctly, by generating samples from the loaded module and regenerating the previous plot." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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c32VAgc5ycnJiIiIkO8Ie+fOHURERCAmJgYZGRno1q0bwsPDsXnzZmRlZSE+Ph7x8fFaw3NERERE9O8REhKi9Ua/bt262LZtG7Zs2YKaNWviyy+/REhIyGtPawPUoxmXLl1C165dtbbZ2NjA19dXZxKEglCpVPjll1/g4OAAf39/1KpVC7NmzZJHh+bNmwc7Ozs0btwYHTp0gJ+fH+rWrftGx8wPLy8vzJs3D7Nnz0bNmjWxefNmrRTejRs3xtChQxEUFAR7e3udCRYkScJPP/0EOzs7NGvWDC1btsQ777yDrVu35rsv1tbWOHnyJPz9/VGlShVMnjwZc+fOLbYbqkqigHncjh8/jhYtWmiV9+vXD9OmTct1jt2vv/4KHx+fV7aflJQEGxsbJCYmcpobvbnwdblvqz+g+PpBRERUQGlpabhz5w48PDxgampa0t0hKjJ5XeuvGxsUeE2Oj49Pnvmtiyv3NRERERERkS5FmkKaiIiIiIiouDHIISIiIiIivcIgh4iIiIiI9AqDHCIiIiIi0isMcoiIiIjeYsVxfxWiklQUicsKnF2NiIiIiIqeSqWCgYEBYmNjYW9vD5VKBUmSSrpbRIVKCIGEhARIkgRjY+NCa5dBDhEREdFbyMDAAB4eHoiLi0NsbGxJd4eoyEiSBFdXV/lmqoWBQQ4RERHRW0qlUqFixYrIzMxEVlZWSXeHqEgYGxsXaoADMMghIiIieqtppvEU5lQeIn3HxANERERERKRXGOQQEREREZFeYZBDRERERER6hUEOERERERHpFQY5RERERESkVxjkEBERERGRXmGQQ0REREREeoVBDhERERER6RUGOUREREREpFcY5BARERERkV5hkENERERERHqFQQ4REREREekVBjlERERERKRXGOQQEREREZFeYZBDRERERER6hUEOERERERHpFQY5RERERESkVxjkEBERERGRXmGQQ0REREREeoVBDhERERER6RUGOUREREREpFcY5BARERERkV5hkENERERERHqFQQ4REREREekVo5LuAFGRS7gOxF0CXjwDsl4AlXwB+6ol3SsiIiIiKiIMcki/ZaQC4WvVwY1GymOgxf+VXJ+IiIiIqEhxuhrpt3vn1QGOeTmgZjfA2BxIeQjE/VnSPSMiIiKiIsIgh/RXdhZw95T6+0otAPcPAPem6p+jQgEhSq5v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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "weight = []\n", + "for _ in range(800):\n", + " # index = 1 corresponds to \"linear.weight\"\n", + " weight.append(pred_loaded(x_data)[1])\n", + "weight = torch.stack(weight).detach()\n", + "weight = weight.reshape(weight.shape[0], 3)\n", + "gamma_within_africa = weight[:, 1] + weight[:, 2]\n", + "gamma_outside_africa = weight[:, 1]\n", + "fig = plt.figure(figsize=(10, 6))\n", + "sns.distplot(gamma_within_africa, kde_kws={\"label\": \"African nations\"},)\n", + "sns.distplot(gamma_outside_africa, kde_kws={\"label\": \"Non-African nations\"})\n", + "fig.suptitle(\"Loaded TorchScript Module : log(GDP) vs. Terrain Ruggedness\");\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the next section, we'll look at how to write guides for variational inference as well as compare the results with inference via HMC." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### References\n", + " 1. McElreath, D., *Statistical Rethinking, Chapter 7*, 2016\n", + " 2. Nunn, N. & Puga, D., *[Ruggedness: The blessing of bad geography in Africa\"](https://diegopuga.org/papers/rugged.pdf)*, Review of Economics and Statistics 94(1), Feb. 2012" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/bayesian_regression_ii.ipynb b/pyro/source/tutorial/source/bayesian_regression_ii.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..9bcbb1af930ece99214f5be72bfaec449a500d89 --- /dev/null +++ b/pyro/source/tutorial/source/bayesian_regression_ii.ipynb @@ -0,0 +1,584 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Bayesian Regression - Inference Algorithms (Part 2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In [Part I](bayesian_regression.ipynb), we looked at how to perform inference on a simple Bayesian linear regression model using SVI. In this tutorial, we'll explore more expressive guides as well as exact inference techniques. We'll use the same dataset as before." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "%reset -sf" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import logging\n", + "import os\n", + "\n", + "import torch\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "from torch.distributions import constraints\n", + "\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "import pyro.optim as optim\n", + "\n", + "pyro.set_rng_seed(1)\n", + "assert pyro.__version__.startswith('1.9.1')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "plt.style.use('default')\n", + "\n", + "logging.basicConfig(format='%(message)s', level=logging.INFO)\n", + "smoke_test = ('CI' in os.environ)\n", + "pyro.set_rng_seed(1)\n", + "DATA_URL = \"https://github.com/pyro-ppl/datasets/blob/master/rugged_data.csv?raw=true\"\n", + "rugged_data = pd.read_csv(DATA_URL, encoding=\"ISO-8859-1\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Bayesian Linear Regression\n", + "\n", + "Our goal is once again to predict log GDP per capita of a nation as a function of two features from the dataset - whether the nation is in Africa, and its Terrain Ruggedness Index, but we will explore more expressive guides." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Model + Guide\n", + "\n", + "We will write out the model again, similar to that in [Part I](bayesian_regression.ipynb), but explicitly without the use of `PyroModule`. We will write out each term in the regression, using the same priors. `bA` and `bR` are regression coefficients corresponding to `is_cont_africa` and `ruggedness`, `a` is the intercept, and `bAR` is the correlating factor between the two features.\n", + "\n", + "Writing down a guide will proceed in close analogy to the construction of our model, with the key difference that the guide parameters need to be trainable. To do this we register the guide parameters in the ParamStore using `pyro.param()`. Note the positive constraints on scale parameters." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "def model(is_cont_africa, ruggedness, log_gdp):\n", + " a = pyro.sample(\"a\", dist.Normal(0., 10.))\n", + " b_a = pyro.sample(\"bA\", dist.Normal(0., 1.))\n", + " b_r = pyro.sample(\"bR\", dist.Normal(0., 1.))\n", + " b_ar = pyro.sample(\"bAR\", dist.Normal(0., 1.))\n", + " sigma = pyro.sample(\"sigma\", dist.Uniform(0., 10.))\n", + " mean = a + b_a * is_cont_africa + b_r * ruggedness + b_ar * is_cont_africa * ruggedness\n", + " with pyro.plate(\"data\", len(ruggedness)):\n", + " pyro.sample(\"obs\", dist.Normal(mean, sigma), obs=log_gdp)\n", + " \n", + "def guide(is_cont_africa, ruggedness, log_gdp):\n", + " a_loc = pyro.param('a_loc', torch.tensor(0.))\n", + " a_scale = pyro.param('a_scale', torch.tensor(1.),\n", + " constraint=constraints.positive)\n", + " sigma_loc = pyro.param('sigma_loc', torch.tensor(1.),\n", + " constraint=constraints.positive)\n", + " weights_loc = pyro.param('weights_loc', torch.randn(3))\n", + " weights_scale = pyro.param('weights_scale', torch.ones(3),\n", + " constraint=constraints.positive)\n", + " a = pyro.sample(\"a\", dist.Normal(a_loc, a_scale))\n", + " b_a = pyro.sample(\"bA\", dist.Normal(weights_loc[0], weights_scale[0]))\n", + " b_r = pyro.sample(\"bR\", dist.Normal(weights_loc[1], weights_scale[1]))\n", + " b_ar = pyro.sample(\"bAR\", dist.Normal(weights_loc[2], weights_scale[2]))\n", + " sigma = pyro.sample(\"sigma\", dist.Normal(sigma_loc, torch.tensor(0.05)))\n", + " mean = a + b_a * is_cont_africa + b_r * ruggedness + b_ar * is_cont_africa * ruggedness" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# Utility function to print latent sites' quantile information.\n", + "def summary(samples):\n", + " site_stats = {}\n", + " for site_name, values in samples.items():\n", + " marginal_site = pd.DataFrame(values)\n", + " describe = marginal_site.describe(percentiles=[.05, 0.25, 0.5, 0.75, 0.95]).transpose()\n", + " site_stats[site_name] = describe[[\"mean\", \"std\", \"5%\", \"25%\", \"50%\", \"75%\", \"95%\"]]\n", + " return site_stats\n", + "\n", + "# Prepare training data\n", + "df = rugged_data[[\"cont_africa\", \"rugged\", \"rgdppc_2000\"]]\n", + "df = df[np.isfinite(df.rgdppc_2000)]\n", + "df[\"rgdppc_2000\"] = np.log(df[\"rgdppc_2000\"])\n", + "train = torch.tensor(df.values, dtype=torch.float)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## SVI\n", + "\n", + "As before, we will use SVI to perform inference." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Elbo loss: 5795.467590510845\n", + "Elbo loss: 415.8169444799423\n", + "Elbo loss: 250.71916329860687\n", + "Elbo loss: 247.19457268714905\n", + "Elbo loss: 249.2004036307335\n", + "Elbo loss: 250.96484470367432\n", + "Elbo loss: 249.35092514753342\n", + "Elbo loss: 248.7831552028656\n", + "Elbo loss: 248.62140649557114\n", + "Elbo loss: 250.4274433851242\n" + ] + } + ], + "source": [ + "from pyro.infer import SVI, Trace_ELBO\n", + "\n", + "\n", + "svi = SVI(model, \n", + " guide, \n", + " optim.Adam({\"lr\": .05}), \n", + " loss=Trace_ELBO())\n", + "\n", + "is_cont_africa, ruggedness, log_gdp = train[:, 0], train[:, 1], train[:, 2]\n", + "pyro.clear_param_store()\n", + "num_iters = 5000 if not smoke_test else 2\n", + "for i in range(num_iters):\n", + " elbo = svi.step(is_cont_africa, ruggedness, log_gdp)\n", + " if i % 500 == 0:\n", + " logging.info(\"Elbo loss: {}\".format(elbo))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "from pyro.infer import Predictive\n", + "\n", + "\n", + "num_samples = 1000\n", + "predictive = Predictive(model, guide=guide, num_samples=num_samples)\n", + "svi_samples = {k: v.reshape(num_samples).detach().cpu().numpy()\n", + " for k, v in predictive(log_gdp, is_cont_africa, ruggedness).items()\n", + " if k != \"obs\"}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let us observe the posterior distribution over the different latent variables in the model." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Site: a\n", + " mean std 5% 25% 50% 75% 95%\n", + "0 9.177024 0.059607 9.07811 9.140463 9.178211 9.217098 9.27152 \n", + "\n", + "Site: bA\n", + " mean std 5% 25% 50% 75% 95%\n", + "0 -1.890622 0.122805 -2.08849 -1.979107 -1.887476 -1.803683 -1.700853 \n", + "\n", + "Site: bR\n", + " mean std 5% 25% 50% 75% 95%\n", + "0 -0.157847 0.039538 -0.22324 -0.183673 -0.157873 -0.133102 -0.091713 \n", + "\n", + "Site: bAR\n", + " mean std 5% 25% 50% 75% 95%\n", + "0 0.304515 0.067683 0.194583 0.259464 0.304907 0.348932 0.415128 \n", + "\n", + "Site: sigma\n", + " mean std 5% 25% 50% 75% 95%\n", + "0 0.902898 0.047971 0.824166 0.870317 0.901981 0.935171 0.981577 \n", + "\n" + ] + } + ], + "source": [ + "for site, values in summary(svi_samples).items():\n", + " print(\"Site: {}\".format(site))\n", + " print(values, \"\\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## HMC\n", + "\n", + "In contrast to using variational inference which gives us an approximate posterior over our latent variables, we can also do exact inference using [Markov Chain Monte Carlo](http://docs.pyro.ai/en/dev/mcmc.html) (MCMC), a class of algorithms that in the limit, allow us to draw unbiased samples from the true posterior. The algorithm that we will be using is called the No-U Turn Sampler (NUTS) \\[1\\], which provides an efficient and automated way of running Hamiltonian Monte Carlo. It is slightly slower than variational inference, but provides an exact estimate." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Sample: 100%|██████████| 1200/1200 [00:30, 38.99it/s, step size=2.76e-01, acc. prob=0.934]\n" + ] + } + ], + "source": [ + "from pyro.infer import MCMC, NUTS\n", + "\n", + "\n", + "nuts_kernel = NUTS(model)\n", + "\n", + "mcmc = MCMC(nuts_kernel, num_samples=1000, warmup_steps=200)\n", + "mcmc.run(is_cont_africa, ruggedness, log_gdp)\n", + "\n", + "hmc_samples = {k: v.detach().cpu().numpy() for k, v in mcmc.get_samples().items()}" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Site: a\n", + " mean std 5% 25% 50% 75% 95%\n", + "0 9.182098 0.13545 8.958712 9.095588 9.181347 9.277673 9.402615 \n", + "\n", + "Site: bA\n", + " mean std 5% 25% 50% 75% 95%\n", + "0 -1.847651 0.217768 -2.19934 -1.988024 -1.846978 -1.70495 -1.481822 \n", + "\n", + "Site: bR\n", + " mean std 5% 25% 50% 75% 95%\n", + "0 -0.183031 0.078067 -0.311403 -0.237077 -0.185945 -0.131043 -0.051233 \n", + "\n", + "Site: bAR\n", + " mean std 5% 25% 50% 75% 95%\n", + "0 0.348332 0.127478 0.131907 0.266548 0.34641 0.427984 0.560221 \n", + "\n", + "Site: sigma\n", + " mean std 5% 25% 50% 75% 95%\n", + "0 0.952041 0.052024 0.869388 0.914335 0.949961 0.986266 1.038723 \n", + "\n" + ] + } + ], + "source": [ + "for site, values in summary(hmc_samples).items():\n", + " print(\"Site: {}\".format(site))\n", + " print(values, \"\\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Comparing Posterior Distributions\n", + "\n", + "Let us compare the posterior distribution of the latent variables that we obtained from variational inference with those from Hamiltonian Monte Carlo. As can be seen below, for Variational Inference, the marginal distribution of the different regression coefficients is under-dispersed w.r.t. the true posterior (from HMC). This is an artifact of the *KL(q||p)* loss (the KL divergence of the true posterior from the approximate posterior) that is minimized by Variational Inference.\n", + "\n", + "This can be better seen when we plot different cross sections from the joint posterior distribution overlaid with the approximate posterior from variational inference. Note that since our variational family has diagonal covariance, we cannot model any correlation between the latents and the resulting approximation is overconfident (under-dispersed)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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7Ihq1arB0NAQ3t7eSE5OxsuXLwEAN27cQIsWLWSWeffx26ZOnYpnz57J9X4BgGvXrqFRo0YyxVpdXFxQUFCAGzduiNOcnJygpaUlt3zDhg3F/1epUkVs++60p0+fAgDy8/Mxf/58ODk5oXLlyjAwMMDRo0dx717RxXd1dXVRUFBQaA+fojARQkRERERERCpBR0cH7u7umDVrFqKjo+Hn54c5c+aI842MjNC/f3+xaOqWLVswYMAAGBgYlHgbpqamkEgkSE1NLfEy165dQ40aNRTOu3PnDrp3746GDRti3759iImJwdq1awGUvUipsbExpk2bhnnz5onJlNIqbFSbtwvKSpM7iqZJe3L88ssvWLlyJaZOnYrw8HBcunQJXbp0KXbfUlJSoK+vD11d3VLHzkQIERERERERqaR69eohKytLZtqIESNw6tQp/PXXX4iOji5VkVQA0NLSQr169ZCQkFCi9tevX8fff/+Nfv36KZwfExODgoICLF26FK1atULt2rWRlJQk06ZOnTo4f/68zLR3H7/L398fampqWLlypcz0unXr4vLlyzLHJSoqCmpqamJR1PIUFRWFXr16YejQoWjUqBHs7e1x8+bNYpeLj49HkyZNyrRNJkKIiIiIiIjos5acnIwOHTogMDAQV65cQWJiIvbu3YvFixejV69eMm2/+OILODg4wMfHB46OjmjTpk2pt9elSxe50WcAIC8vD48fP0ZSUhLi4uKwevVquLq6onHjxpg8ebLCdTk4OCA3NxerV6/G7du3sWPHDqxfv16mjb+/P0JCQrBs2TLcunULv/32G44cOVLk7TY6OjqYN28eVq1aJTN9yJAh0NHRga+vL+Lj4xEeHg5/f394e3uLt7WUp1q1auHYsWOIjo7GtWvX8NVXX8nUIilMZGQkOnfuXKZtMhFCREREREREnzUDAwO0bNkSy5cvxxdffIEGDRpg1qxZGDVqFNasWSPTViKRYPjw4UhNTS1VkdS3jRgxAiEhIUhPT5eZfvXqVVStWhW2trZwc3PDnj17MG3aNERGRhZ6+02jRo2wbNkyLFq0CA0aNMDOnTsREBAg08bFxQXr16/HsmXL0KhRI/z999+YOHFisXVKfH19YW9vLzNNT08PR48eRUpKCpo3b47+/fujY8eOcsepvMycORNNmzZFly5d4ObmBktLS/Tu3bvIZR4+fIjo6GgMGzasbBsViKhI1atXFwAIAIRvv/22yLaLFy8W26qrq1dQhO/H1dVVACCEh4d/cnFs2bJFPN7SP4lEIhgZGQnNmzcXFixYIGRmZn64oD9SiYmJAgChevXqyg6lxKSvs8TERGWHUmLS88/X11fZoby3t69z0j8tLS2hWrVqQs+ePYU///xT2SF+8oYMGSIAEHbs2KHsUErk7t27wrRp04QWLVoIZmZmgoaGhlCpUiWhadOmwvjx44ULFy4oO0Th5MmTQqdOnQQTExNBIpHIHd/g4GDBxcVFMDQ0FM/ryMhIITc3t9zep2fMmCEAEObPn//e6yL6VGRnZwsJCQlCdna2skP56PXv31/46aeflLb9kSNHCm3btlXa9j+kKVOmCKNGjSp0fnHnKXuEEJXCzp07iyzao6jqMn14+vr68PX1ha+vL4YMGYIGDRogJiYGM2fOhLOzc4m61pU3Nzc3SCQSREREVPi2Sbnu3LkDiUQCOzs7ZYdSai4uLuJrqWvXrtDQ0MChQ4fQo0cPfPfdd8oOjypIQEAAHBwcEBAQII4c4OXlhXbt2uH58+dYuXIlmjVrhmnTpiktxvv376N79+4ICwuDk5MThg4dCl9fX9SsWRPAm/vpvby8cPbsWbRu3Ro+Pj7w9fX9IF26PwYzZ86ERCLBggULlB0KEb3ll19+KVWR1fe1ZMkSXL58Gf/++y9Wr16Nbdu2wdfXt8K2X5EsLCwwf/78Mi+vUY6xEH3WmjVrhgsXLuDgwYPw8vKSmx8dHY3r16+jefPmxRYm+phs374dL1++hK2trbJDKTMzMzOZYc8A4Ny5c+jYsSNu3ryJyZMnY/v27coJTgmqVauGa9euyVTnpvLXp08ftGrVCpUqVVJ2KOVm5MiR8PPzEx/n5eVh4sSJWLNmDZYvX47BgwejefPmygvwE/bLL79g5syZsLKyUnYoRZo0aRKWLl0KLS0tLF++HGPHjpUbGvH06dOYPn06bt26paQogaNHjyIjIwM+Pj7Ytm2b3Pzg4GDk5eVh9uzZmDdvntz8a9euFXnffElNmDABQ4cOhbm5+Xuvi4g+P3Z2dvD396+w7Z07dw6LFy9GZmYm7O3tsWrVKowcObLCtl+Rvv/++/danj1CiEpIen9gYb0+Nm3aJNPuU2FrawtHR0fo6ekpO5Ry1aJFC/ECuX//fuTl5Sk5ooqjqakJR0dH8ZdR+jAqVaoER0dHVK1aVdmhfDAaGhr45ZdfYGRkBAD4888/lRzRp6tq1apwdHQUj+XH6OjRo1i6dCkAYO/evZgwYYJcEgQAWrdujePHj2P8+PEVHaLo3r17AN4U2CvLfEdHx3IZ+cDMzAyOjo4wNTV973UREb2vPXv24OnTp8jOzsbVq1cxZswYZYf00WIihKiEnJyc0KxZM/zzzz94+PChzLwXL15gz549sLa2LrJycUJCAubMmQMXFxdUq1YNWlpaMDU1RadOnbBnzx6Fy0REREAikcDNzQ0vX77E7NmzUbduXejp6cl1vY+Pj0e/fv1gZmYGPT09ODk5YcWKFSgoKICdnR0kEgnu3Lkjs0xht3D4+flBIpFg69atSExMhLe3NywtLaGtrY2aNWti5syZePXqlVy8mZmZ2LBhA/r27YtatWpBX18f+vr6cHJywowZM5CWllb4QS5nzs7OAICsrCw8f/5cZt7169cxbNgwVK9eHdra2qhcuTI6duxY6PNQUFCA33//HS4uLjA2NoampiYsLCzQqFEj+Pv7i8dV+nydOHECANC+fXtIJBLx792eK6mpqZgzZw4aN24MQ0ND8XlbsGCBwjHd586dC4lEgrlz5+LevXsYMWIEbGxsoKmpKf6SX9ytGQ8ePIC/vz9q1aoFHR0dVKpUCS4uLvjtt9+Qn58v137r1q2QSCTw8/NDSkoKJkyYgJo1a0JbWxtubm6FHH15CQkJ8PLygpmZGXR1ddGgQQMsWbJE4TbflpeXh40bN8LNzQ2VK1eGtrY2atSoga+//hr379+Xa//2ayY3NxeLFi1C/fr1oaurC1NTU/Tt2xfXrl1TuK2YmBgMHDgQ1tbW0NLSgpGREezt7dGvXz8cPHiw0OMi5efnhxo1agAA7t69K/PcS3999vX1hUQikSty9rY9e/ZAIpGgRYsWRR6biqCjoyN+mSzqNrNjx46hT58+qFq1KrS0tFClShX069cPZ8+eLXSZK1euoG/fvjA1NYWenh4aNmyIVatWoaCgANbW1pBIJHjw4IHMMm9PDw4ORvv27VG5cmVIJBK56vyljenmzZvw8/ODnZ0dtLS0YGBgADs7O3Tv3l1hr7Ldu3ejY8eOMDU1haamJszMzFCvXj2MHj0a8fHxMm2HDh0KiUSCwMBAufUIgoCdO3eiQ4cO4jluZ2eHkSNHFtrr4u3jEBYWBnd3d5iYmEBXVxfOzs4Kt1Mc6W0Vffv2Rc+ePYtsK5FI0K5dO7npCQkJ8PPzg62trXhtdXd3R1BQUJHrO3/+PL788kvY2NhAW1sbpqam8PDwwN9//y3TbuPGjZBIJGJ36FmzZomvLwcHB/EWkR07dgAAvL29xfmdOnUC8OaaIpFIoKGhuGN0bm4uNm3ahI4dO8LMzAza2tqwtraGu7s71q1bJ9O2uFtSbty4gVGjRsHe3h46OjowNjaGq6srdu3apbB927ZtxXM5NjYWvXv3hpmZGXR0dFC/fn2sWLECgiCI7aX7snDhQrnjIZFIZH4JTkpKkrn26+npwcbGBp06dcLy5csLfW6IiD5HvDWGqBSGDx+OCxcuYOvWrZgxY4Y4fc+ePXjx4gXGjx8PNbXC84vLli3Dpk2b4OjoCCcnJxgbG+PevXsIDw9HWFgYzpw5g2XLlilcNicnB25ubkhISMAXX3yBRo0aITk5WZx/4sQJeHp6Ijs7GzVr1oS7uzuSk5MxdepUnDlzpsz7fOnSJYwfPx4mJiZwdXVFSkoKoqKisHDhQly9ehXBwcEy7S9fvozRo0fD3NwcderUgbOzM1JTUxETE4OffvoJe/bswZkzZyrk17OMjAzx/9ra2uL/Dx8+jP79+yMnJwd16tRB37598fTpU5w4cQLHjx/H0aNHxR4+UiNHjsSWLVugo6ODtm3bwtzcHCkpKbh9+zbWrFmDjh07ws7ODpaWlvD19cXff/+NJ0+eoEuXLrC0tBTX4+DgIP4/ISEBHh4euH//PqpWrYq2bdtCU1MT586dw6xZs7Bv3z5EREQovPXi1q1baNKkCbS0tODi4gJBEGBmZlbsMTl//jw8PDyQkpICW1tb9O7dG+np6YiIiEB0dDSCg4Nx6NAhhb8CP3/+HM2aNUNaWhratWsHZ2dnhe0UOXXqFDw8PJCVlQV7e3u4u7vj+fPnmD59epHnZ2ZmJnr27ImIiAgYGBjA2dkZ5ubmiIuLw/r167F3714cO3ZM4Rjyubm56Nq1K6Kjo/HFF1+gbt26OHfuHIKDgxEeHo6LFy/KJIvCwsLg6emJ3NxcNGrUCK1bt0Z+fj4ePnyIw4cPIz8/X254vXe1bdsWL168wL59+6Cvr4/+/fvLtRk/fjy2b9+O9evXY8qUKVBXV5drs3btWgDAN998U+T2Kor0tVRYfYUJEyZg5cqVUFdXR7NmzdCuXTvcvXsXwcHBOHjwIDZv3gwfHx+ZZY4fP45u3bohJycHtWrVgrOzM54/f45Jkybh3Llzxca0aNEirFmzBs2bN4eHhwcePnwocyxLG9Ply5fF58/R0RE9evSAmpoaHj58iIiICDx+/Fim/ezZszF//nxoamqiTZs2sLKyQnp6Ou7evYsNGzagYcOGaNCgQbH7IQgChg4dil27dkFDQwOurq4wNzdHTEwMNm3ahN27dyM4OBju7u4Kl//999+xYMECODs7w8PDA4mJiTh79iy8vb2RlpZW4nMoOTkZUVFRAFDm+8kPHTqEgQMHIicnB3Xr1oWLiwuePHmC8PBwhIaGYtSoUfj999/lllu6dCkmT54MQRDQuHFjtGrVCo8ePRKvxwsWLBDfc2vXrg1fX19cvHgRV65cQZMmTdCwYUMAb87Ppk2bwtfXF5GRkbh9+zbatWsnjoZQv379YvchNTUV3bp1w+nTp6GlpYXWrVvDysoKjx49wqVLlxAeHo6xY8eW6Hjs3r0bfn5+ePXqFRwdHdGtWzekpqbi7NmzOHnyJCIiIhQeDwAICQnBkiVLUKtWLbi7uyMpKQlRUVGYOHEiHjx4gCVLlgAA1NTUCj0ewJu6P8CbJIizszMeP36M6tWrw8PDAzo6Onj48CFiY2Nx6dIlTJw4sUT7RUT0WfgABVyJPivS0RQiIyOFtLQ0QVdXV3BwcJBp4+LiIkgkEuG///4TR+xQVI0+IiJC+O+//+SmX79+XbC2thYACGfPnpWZFx4eLla7b9iwofDo0SO55V++fClUq1ZNACB8//33Qn5+vjjv6tWrQpUqVcR1vDsqR2Gjtfj6+orLzJgxQ8jLyxPnxcXFCfr6+gIAITo6Wma5+/fvC6GhoTIxCIIgZGVlCT4+PgIAYezYsXL78D6jxhQ2Okr//v0FAIKtra047fHjx0KlSpUEAMKCBQuEgoICcd758+cFExMTAYDw+++/i9Pv3r0rABCsra0VHv+EhATh7t27pdqfly9fCjVr1hQACDNnzhRevXolzsvKyhIGDx4sABCGDRsms9ycOXPE52Xo0KFCTk6O3LoLGzUmJydHPJ/HjBkjvH79Wpz333//CXZ2dgIAYfr06TLLvT06T8eOHYX09HSF+1SY7OxswcbGRgAgTJgwQeZcunz5smBmZlbo+fnll18KAITu3bsLT548kZm3fPlyAYBQq1YtmXW+/Zpp0qSJzHOWnZ0tdOnSRQAgjB49WmZ97du3FwAIgYGBcvuQlpYmnD59WuFxeXfUmJKM2uPi4iIAEPbv3y83Ly4uTgAgmJubK3x+PwTpebFlyxa5eQkJCYK6uroAQDh//rzc/HXr1gkAhDp16ghxcXEy88LDwwV9fX1BW1tb5tr34sULwdLSUgAgTJ06VeZ6ERcXJ5ibm4vP4f3792XWKb3WaWhoCH/99ZfC/SlLTN7e3gIA4eeff5ZbX1ZWlnDy5EmZx9ra2oKRkZFw8+ZNufaJiYnC9evXZaYVNmrM6tWrxef78uXL4vT8/HxxRJLKlSsLz58/V3gctLS0hJCQEJl5GzZsEAAIJiYmJT6Hjh49Kh7zpKSkEi3ztqSkJHF0lneP4dmzZ8Xr7ubNm2XmHT58WAAgWFhYCJGRkTLzLl26JFhZWQkSiUQ4deqUzLziRmspapSeokaN6dmzpwBAaNasmdx1/fXr18LBgwdLFMfFixcFLS0tQVdXVzhw4IDMvMTERKF+/foCAGHnzp0y86TXBgDCxo0bZeYdPXpUkEgkgoaGhtxzVNzxmDVrlgBA+Prrr2Xe96T7FRYWpnA5IkU4agx9Coo7T5kIISrG24kQQfj/H64iIiIEQXiTxAAguLm5CYIgFJkIKcpvv/0mABAmT54sM/3tL3VvfxB/2/bt28UvXm9/uZVas2ZNmRMhzs7Och+aBEEQxowZIwAQfvzxxxLvY1ZWlqChoSGYm5vLzSuvREheXp5w69YtYfz48eI+L1u2TJw/f/58cb8UWbJkifjlWurcuXMCAKFnz54ljq24/fn111/FL/iKZGZmChYWFoKGhoaQkpIiTpcmQipXriykpaUpXLawL+I7duwQAAhWVlYKvxwFBQUJAARDQ0OZNw3pcdbU1FSYyCtOYGCgAECwsbFReH5KExrvnp8JCQmCRCIRrKyshIyMDIXr7tq1qwBAZnhX6WtGIpEIly5dklvmzJkzAgDB3t5eZnq9evUEADLHuyjvkwjZs2ePmFh611dffSUAEKZNm1aiOMqDokRIWlqacPToUcHR0VFM2L0rNzdXTLQqOtaCIAg//fSTmPCQ2rx5swBAqFGjhpCbmyu3zIoVK4pNhLybyHrfmDp37iwAEK5cuaJwmbclJSUJAISmTZsW21aqsC/m0gTkunXr5JbJz88XvzAvWrRIZp70OEyZMkXh9hwcHBQmqwsjfZ0CUPicFEd6bWrZsqXC+T///LMAQKhbt67MdGdnZwGAXLJAateuXQIAYeDAgTLTP0Qi5MKFCwIAQU9Pr8TJoMLi6NevnwBAWLFihcLloqOjFR4vaSJkwIABCpfr1KmTAEDYtWtXieKQGj16tABAOHToUIn2i6goTITQp4DD5xKVs3eLpkr/LWmR1BcvXmDv3r2YPn06Ro8eDT8/P/j5+WHfvn0A3txPrIiFhYXC+7EBiPUovLy8FI4UMmTIkBLFpkj37t0VVtavW7cuAMjVS5GKjo7GokWLMG7cOAwbNgx+fn7i6APPnj1DampqmWN619u1GDQ0NFCrVi2sXLkSampq+O677zBhwgSxrbQWSmFdv0eMGAHgza0nSUlJAN4U1TM0NERISAgWLlyIxMTE94758OHDAICBAwcqnG9gYIBmzZohLy9P4ShEnTp1KvVoJdJ9HzRokMytQlJ9+/aFiYkJMjMzERMTIze/SZMmYhfzsmx3wIABCs/Pwp6LkJAQCIIAT09PGBoaKmwjrVESHR0tN8/W1haNGjWSm17YuSutxzFkyBCcOnXqgxbY7dOnD2xsbBAWFobr16+L09PT0xEYGAh1dXV8/fXXH2z7hRk2bJj4WjI2NkaXLl1w69YtBAYGKhyiLiYmBk+ePEGdOnUUHmtA8XMkvWYNHDhQYZ2GklyzFN129D4xSZ//r776CseOHVNYA0mqatWqsLa2RmxsLCZPnizzHJbGnTt3xPpCil4HampqYg2a8PBwhevo0aOHwunFXaPLW0mvrdeuXRNrzTx58gQxMTEwMDBAt27dFC5X1Gu8vEnrkfTo0eO9iiDn5+fj6NGjAN5c9xRp2bIldHV1ceHCBeTm5srNL+/nVXp+T5kyBQcOHMCLFy9KtTwR0eeGNUKISql9+/aoUaMGgoKCsGLFCmzfvh1GRkaFfih/259//olhw4bJ1PZ419t1Ld5WWOFLAGIxwcLaGBsbo1KlSkhPTy82xncVNqyudOSDnJwcmelPnz5Fv3795IoWvisjIwMmJialjkeRt2sxSCQSGBgYoHbt2ujevbtYuFJK+uHx3elSxsbGqFy5MlJSUvDgwQNYWVnB0NAQW7ZswbBhwzBz5kzMnDkTVatWRatWreDh4YEvv/yy1GPE3759G8CbQn7e3t5Ftn327JnctKLOh8IUt+8SiQQ1atRAamqqwg/ZZdkm8P/Pz8K2a2JiovD8lB6jTZs2ydVseZeiY1TcufvuF92AgABcuXIFR44cwZEjR6Crq4umTZvCzc0NQ4YMEb+AlAcNDQ2MHTsW06ZNw5o1a7BmzRoAwLZt25CVlSUmSkpCWlfjXY6Ojvjhhx9KFZeLi4tYx+bZs2eIjIxEZmYmvv76a9SqVUuueKv0Obpx40axQ5G+/RwVd80yMzODvr4+srKyCl1fYcuWNaYffvgBUVEBQql1AAAgAElEQVRRCA8PR+fOnaGlpYWGDRvC1dUVgwcPFosvSwUGBsLLywtLlizBkiVLYGpqipYtW8Ld3R3e3t4lqoMkfZ1VqVKl0JG7pKM/FfbFt7TX6MK8Pfzrs2fPSp0IKO76YmZmBiMjI2RkZODhw4eoUqWK+Fy9ePGi2OG+Fb3Gy9vdu3cBvHntvI+nT5+KiYaSDJeckpIiV3+nvJ5XKT8/P4SGhmL37t3o06cP1NXVUb9+fbRt2xZeXl6lKnxNRPQ5YCKEqJSko0TMmTMHvr6+ePz4MUaPHg1dXd0il3v48CEGDhyI7OxsTJkyBUOGDIGdnR0MDAygpqaGf/75B126dJGpBv+24tYvja0s84pSVPFXRUaOHIlTp06hdevWmDdvHho1agQTExPxQ6606Fxh+1kWZmZmcqOxlLd+/fqhU6dOOHToECIjIxEVFYXg4GAEBwdj9uzZOHbsGJycnEq8voKCAgCAh4dHoQUopapXry43rSTnQ3mr6G1Kj1Hjxo0L/WVfqmXLlnLTSnvuWlpa4sKFCzhx4gRCQ0MRFRWFs2fPIioqCj/99BMCAgIwderUUq2zKKNGjcKPP/6I7du3IyAgAAYGBuKIFKUpkvrixQts27ZNbrqrq2upEyEjR46UGQUnPT0dffr0QXh4OAYMGICEhASZL+zS56hq1apFjpgFKC60+j7XrMLOx7LGpK+vj+PHj+PcuXM4evQooqKicPr0aVy4cAFLly6Fv78/Vq1aJbZ3dXXFnTt3cPjwYZw4cQLR0dH4+++/ERISgjlz5uDgwYMV8uWytOd5YZo2bQqJRAJBEHD+/PliR40pi3efU+lzZWhoiL59+xa5rKKiwh8r6X5JJBK5IsGKKCo6XV7Pq5S6ujr+97//YebMmTh8+DCioqIQFRWFdevWYd26dejduzf27dtX7tslIvpYMRFCVAZ+fn6YN28e/vzzTwAluy3mzz//RHZ2Nvr06YNFixbJzS9siMSSqFatGgDIDY0rlZ6eXiHD1mZlZSEkJARqamoICQmBsbGx3PzHjx9/8DiKUq1aNVy/fl38JfJd6enpSElJEdu+rVKlSjI9OO7fvw9/f38cPHgQ33zzjdjdvyRsbGxw/fp1jBgxokS9icqDdH8K23cA4m0/7+57eWy3sPMzLS1NYW8laY8IFxcXscfEhyYddlf6BTYnJwdbt27FuHHjMH36dPTv31/8hf59mZqaYsiQIdi4cSO2b9+O2rVr48aNG6hXrx46dOhQ4vXY2dmVa2LxbZUqVcIff/wBR0dH3L17F8uWLcPMmTPF+dLnyMLColTJyOLOieTk5DJ33S9rTFItWrQQe77k5eVh//798PX1xerVq+Hl5SVzi6Kenh68vLzg5eUF4E1PgOnTp2PTpk0YMWIE/vvvvyK3JT0OT548QVZWFvT19eXaSF+v5fmaVMTMzAxt2rRBVFQUtm3bVupESLVq1fDvv/8Wen1JTk4WX+fSfZE+V+rq6tiyZUuZE/blRdoLo6y3OklZWFhAW1sbr169wooVK+TeC5Wpfv364ug5BQUFCAsLw5dffokDBw5g586dxfZQJCrWhS0Vu71mw0rV3M/PD2lpaThw4IDM9IiICLRv3x6pqam4dOkS2rdvD2NjYzx69Ag6Ojpiu/Pnz4vvEW+/9wqCgA0bNmDTpk24evUqNDQ04ODggKFDh2L06NGF9voj5WHal6gMbG1t0atXL5iamqJVq1YKf41+l/TLtaJf9wVBwK5du8oczxdffAEA2Lt3r8K6Bu+z7tJIT09Hfn4+jIyMFH7wCwwM/GBf2EpK+gVX0S/owP+v+VKrVq1iv3jY2Nhg3rx5AN4MM/w26S98hdWZ8PT0BPBm6OWKIt33P/74Q2G36uDgYKSmpsLQ0FDuNoD34erqCuDNviq6F3779u0Kl5Meo0OHDpW6G3h50dHRwZgxY9CwYUMUFBTgypUrxS5T3HP/tm+//RbAm+FypcmecePGvUfE5c/c3FxMfixZskQmqdqqVSuYmJggLi6uVF8epdesPXv2ID8/X27++1yzyhqTIhoaGhgwYAA6deoEQP51/i4LCwsx0X379m1kZmYW2d7Ozk68xUfRNUkQBDGZ0759+1JGX3rSIWr3798vJvoLIwiCzC2QJb221q1bV+yJY2tri3r16iEtLQ3Hjh173/Dfm4eHB4A3P1y8T9JeU1MTHTt2BFBx1/jSXHek1NTU4O7ujkGDBgEo/vwmUjWGhoYIDg6WmbZp0yaFt655e3tjwoQJ6NWrF8LDw3Hp0iXMmjULBw8exD///FNRIVMpMBFCVEb79+/H8+fPcfr06RK1l9YXCAoKwqNHj8Tp+fn5mD179nsVgvPy8kLVqlVx584dzJgxQ+yWC7z5ZevHH38s87pLo0qVKjAxMUFaWhp27NghM+/MmTOYNm1ahcRRlFGjRsHIyAixsbH46aefZBIzFy9exIIFCwAAkydPlpn+xx9/IDs7W2590i8L7ya4rK2tAQBXr15VGMfo0aNRvXp17N27F1OnTlX4henx48fYsGFDKfewcF5eXrC1tUVSUhK+++47mQ/MiYmJ+P777wEA/v7+Mr9+vK/+/fujWrVquHfvHqZNmyZzfsbHx4vH/F1NmjRBv379cP/+ffTt21dh74GsrCzs3LlTLL74PpYsWYJ79+7JTb9+/brYY0tRIvNd5ubm0NLSwuPHj8UEaGGcnJzQoUMHXLt2DYcOHYKRkVGJutJXtLFjx8LW1hbp6elYunSpOF1LSwuzZ89GQUEBevfurfA6lp+fj9DQUJw7d06cNnDgQFSpUgX//fcfZs+eLfM6vHr1aqHnREmUNaY1a9bg5s2bcm2TkpLE4sHS5z8xMRGbN29WWNNJek0wNTVV2MPjXdLX3bx58xAXFydOFwQBc+fORXx8PExMTMRiox+Sp6cnxo8fD+DN9WLlypV4/fq1XLvz58/D3d0dK1asEKeNHj0ahoaGOHfuHBYvXizT/sKFCwgICAAge20FgIULFwJ4U2RVWkT6bYIg4MyZMwgNDX2/nSuBZs2aoVu3bnj58iV69eqF+/fvy8zPy8vDoUOHSrSuuXPnQlNTE99//z0CAwNlrntScXFxcr9Kl1Vx7zlbt27FxYsX5aZnZGSIvRlLcn0jUiW+vr5iEhcAsrOzsXv3brmi0Hv27MHOnTvxv//9D9OnT0fz5s1hZ2eHXr164fjx4xWSyKbS460xRBWkR48ecHZ2RkxMDGrXrg1XV1fo6+vj7NmzSEpKwtSpUxXeMlMSenp6CAwMRLdu3bB48WLs378fzZo1Q0pKCiIiItCrVy+cPXsW9+7dU3gvcnlRV1fH7NmzMXHiRPj4+GDt2rWwt7fHvXv3EB0djaFDh+LkyZNiQTplqFKlCnbu3AkvLy/MmDEDO3bsQJMmTfD06VOcOHECeXl5GDZsGEaNGiUuc/fuXQwaNEgsnmljY4O8vDzExcXhxo0b0NLSkvvg369fP2zZsgVTpkxBaGgoLCwsIJFIMHz4cLRp0wb6+vo4fPgwunfvjsWLF+P3339Hw4YNYW1tjZcvX+LmzZu4du0aLCwsZGJ5H9ra2ggKCoKHhwd+/fVXhISEoFWrVsjMzMTx48eRk5ODLl26YM6cOeWyPSldXV3s3LkTXbt2xdKlS3HgwAE0b94cycnJiIiIQI8ePRATE6PwvNiyZQvS0tJw5MgRcRSQGjVqQBAE3LlzB5cvX8br169x7dq1YmutFGfBggWYPHkyHB0dUbduXejq6iIpKUkcQcbHxwdNmzYtdj2ampro2bMngoKC0LhxY7Rt21bsErtx40a59t9++y2OHz8O4M2HrtIW3q0I2tramDt3LoYPH46VK1di4sSJqFy5MgBgwoQJuHfvHpYvXw4XFxc0aNAADg4O0NHRwaNHj3Dp0iWkp6djw4YNYndiAwMD7NixAz169MBPP/2EoKAgODs74/nz5zhx4gT69euHEydOICkpqUzXrLLEtH79evj7+8Pe3h4NGjSAoaEhnj59isjISOTk5MDd3V0c2SQ5ORkjRozA119/jcaNG4u9Om7evIlLly5BTU0NS5cuLVG9hXHjxuH06dPYtWsXnJ2d4erqCnNzc8TExODmzZvQ09PD7t27S1R8tTwsX74cpqammD9/PiZMmIBZs2ahVatWMDc3R2ZmJq5cuSK+VqU9SIA39Z927NiBgQMHYurUqdi2bRsaNWqEJ0+e4MSJE8jPz8eoUaMwbJhsN/bevXtj2bJlmDx5Mrp37w4HBwfUqVMHlSpVwtOnT3H58mU8e/YMM2bMEHvmfEjbtm1D165dce7cOTg4OMDFxQWWlpZ4/Pgx4uLikJqaWqJeF82bN8f27dsxfPhweHt7Y/r06ahXrx7MzMyQnJyMuLg4PHz4EEOGDEHv3r3fO25PT0/o6uoiKCgI7dq1g4ODA9TV1dGuXTv4+voiKCgIw4YNQ7Vq1cTaXampqTh16hQyMjLQsGHDEo9+R6QqvL298csvv+DevXuwtbXFvn37YGdnJ/dZYOfOnahTpw569eoltw6JRFLqUf6oYjARQlRBNDQ0EBERgYCAAOzbtw9hYWEwMjJCmzZtsG/fPmRmZpY5EQIAHTp0wNmzZzF37lycOHECBw4cgL29PRYuXIhvv/0WhoaGUFNTE7+8fCgTJkxAjRo1sHjxYiQkJODq1atwdHTE2rVrMWbMmEJHFKhI3bt3R2xsLBYtWoSwsDAEBQVBX18f7dq1w1dffSU3pG2rVq3w888/4+TJk7h27RouXrwIDQ0NWFtbY9y4cfD390edOnVklunWrRs2bNiAX3/9FcePH8fLly8BAG3btkWbNm0AvLlX+8qVK1i/fj2Cg4Nx5coVnD59GmZmZrC2tsakSZPQp0+fct335s2b49KlS1i0aBGOHDmC4OBgaGtro0mTJvDx8cHIkSMVDmf6vlxdXXH27FnMmTMHERERCA4Ohr29PX788UdMmjRJHKnkXYaGhvjnn3/wxx9/IDAwEDExMbh06RKMjIxQtWpVDBkyBD179iyXuh1r165FWFgYzp8/jxMnTiArKwuWlpZwd3fH6NGjFX7AKcxvv/0GU1NTHDlyBEFBQeItQYoSIR07doS6ujoKCgo+utti3ubj44MlS5YgISEBv/zyi/gLPwAsW7YMffv2xa+//oqoqCgcOXIEWlpaqFq1Kjp06IDu3bvLFcN0d3fHmTNnMHfuXJw8eRLBwcGoWbMmAgICMHbsWBgaGkJdXb3Mo0uVNqaAgACEhITgzJkzOH36NNLT02FhYYHWrVtj+PDhGDhwoFiws1atWli+fDlOnDiB+Ph4JCQkQBAEVKtWDX5+fvD39y9R0gx48yE5MDAQXbt2xYYNG3DhwgXx3Bs+fDimTp2K2rVrl+kYlIVEIsGsWbPg7e2N3377DWFhYYiNjUV6ejr09fVRs2ZN9O3bF76+vnJFjHv16oWYmBgsXrwYx48fF6+tbm5u+Oqrr8RaKu+aOHEiOnbsiDVr1iA8PBxhYWFQV1eHpaUlnJ2d0a1bN/Tr168idh+mpqaIjIzEpk2bsGvXLsTGxiI7OxsWFhZo2rRpsUVd3zZo0CC0bNkSq1atwrFjxxAZGYmCggJYWlqidu3a+Pbbb8utRlTVqlUREhKCBQsWICYmBlFRUWJPK19fX0yePBkODg6Ijo5GbGwsUlJSYGpqigYNGmDIkCHw8/NjDQNSGX/99Zfcjw6KbtO0sLCAp6cntm7ditmzZ2Pz5s0KE4a3bt2S+xxIHz+JoOwb9onogzt58iRcXV3h5ORUohoHRFRxNm7ciFGjRqFz5844evSossP5KBw/fhwdO3ZEkyZNEBsbq+xwiIjoLTk5OUhMTESNGjXkb6X9BIqlPnz4EL/++qvM9LNnz2Lo0KEyxVJTU1MRGRmJ8ePHIzQ0FPXr18eDBw8QGRmJPn36iMnGunXronbt2jh48GC57Ra9vyLPU7BGCNFn49mzZ+KIH2+Lj48Xb614t0syESlXVlaW2LNCWitCVTx9+lRh3ZcrV67gq6++AsBrFhERlT99fX04ODjI/BVWIN/T0xPZ2dkYMWIEevToofA2xdq1a793cW6qeLw1hugzcfXqVbRv3x716tWDvb09dHV1kZiYiNjYWBQUFMDd3R3+/v7KDpOIAPzyyy+Ij4/HqVOncPv2bXh4eKBz587KDqtCXblyBe7u7qhfvz5q1Kghd83y8PDA2LFjlR0mERGpMA0NDfj4+GDx4sU4cuSIwjZffvklBg0ahIMHD8rdRisIAjIyMlgn5CPEHiFEn4natWtj3LhxUFNTQ1RUFIKDg/Hff/+hTZs2WLduHUJCQj5I7QciKr3Dhw9j+/btyMjIgJ+fX4UNcf0xcXR0FBMdb1+z2rZti/Xr1+Ovv/4Sa3IQEREpy/z58/Hs2TN06dJF4fwBAwZg4MCBGDx4MH766SdcuHABd+/exV9//YVOnTohPDy8giOmkuC3IqLPhJWVFdasWaPsMIioBCIiIpQdgtJZW1tj7dq1yg6DiIioSFpaWjAzMyt0vkQiwa5du/D7779j8+bNWLhwITQ0NFCrVi34+PgUmkAh5WKxVCIiIiIiIiqR4opQEn0MWCyViIiIiIiIiOj/MBFCRERERERERCqDiRAiIiIiIiIiUhlMhBARERERERGRymAihIiIiIiIiEqFY27Qx6y485OJECIiIiIiIioRTU1NAMDLly+VHAlR4V6/fg0AUFdXVzhfoyKDISIiIiIiok+Xuro6jI2N8fTpUwCAnp4eJBKJkqMi+v8KCgrw7Nkz6OnpQUNDccqDiRAiIiIiIiIqMUtLSwAQkyFEHxs1NTXY2toWmqSTCLy5i4iIiIiIiEopPz8fubm5yg6DSI6WlhbU1AqvBMJECBERERERERGpDBZLJSIiIiIiIiKVwUQIEREREREREakMJkKIiIiIiIiISGUwEUJEREREREREKoOJECIiIiIiIiJSGUyEEBEREREREZHKYCKEiIiIiIiIiFQGEyFEREREREREpDKYCCEiIiIiIiIilcFECBERERERERGpDCZCiIiIiIiIiEhlMBFCRERERERERCqDiRAiIiIiIiIiUhlMhBARERERERGRymAihIiIiIiIiIhUBhMhRERERERERKQymAghIiIiIiIiIpXBRAgRERERERERqQwmQoiIiIiIiIhIZTARQkREREREREQqg4kQIiIiIiIiIlIZTIQQERERERERkcpgIoSIiIiIiIiIVAYTIURERERERESkMpgIISIiIiIiIiKVwUQIEREREREREakMJkKIiIiIiIiISGUwEUJEREREREREKoOJECIiIiIiIiJSGUyEEBEREREREZHKYCKEiIiIiIiIiFQGEyFEREREREREpDKYCCEiIiIiIiIilcFECBERERERERGpDCZCiIiIiIiIiEhlMBFCRERERERERCqDiRAiIiIiIiIiUhlMhBARERERERGRymAihIiIiIiIiIhUBhMhRERERERERKQymAghIiIiIiIiIpXBRAgRERERERERqQwmQoiIiIiIiIhIZTARQkREREREREQqg4kQIiIiIiIiIlIZTIQQERERERERkcpgIoSIiIiI6CM1d+5cSCQSPH/+XNmhEBF9NpgIISIiIiL6TOTn58PKygoSiQRHjhxRdjhERB8lJkKIiIiIiD4Tx48fx6NHj2BnZ4edO3cqOxwioo8SEyFERERERJ+JwMBANG3aFBMnTsSBAweQlZWl7JCIiD46TIQQfWbu3r2LsWPHok6dOtDV1YWpqSm8vLxw584dZYdGREREZfT8+XMMGDAARkZGMDU1xfjx45GTkyPTJjs7G8HBwRg0aBAGDBiA7OxsHDx4UEkRExF9vJgIIfrMnD9/HtHR0Rg0aBBWrVqFMWPGICwsDG5ubnj58qWywyMiIqIyGDBgAHJychAQEICuXbti1apVGD16tEybQ4cO4cWLFxg0aBAsLS3h5ubG22OIiBTQUHYARFS+unXrhv79+8tM69GjB1q3bo19+/bB29tbSZERERFRWdWoUUPs3TFu3DgYGRlh3bp1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GA77bopZDMNh8IjrPfxB+H8TclfD1AA89w0Y77I6NBERkYzrmfYC0OILUxbopnrqECYGRxvycw6YHbQeMyw1vtAu29XvgZoVEBqH/T/NWGwiUpiUCBHJlu7deKNTdJv19NWstzqarKrzRHjRPINHV/8NVC+HSAB2/geMKRkiIiKFpSuYqAhpLQnRMphofx2qPpeQp8bKsPJac0kcp2ESjhsMTi/w1xOHAzb8SeLj3d/W3DIROSklQkSywYwnBnYB34neyKpKa8PJtjp3FICOcDVc8imoWQmRIOz6DxjrtDg6ERGRzIib0BVMVIScbxykZuotTAx68nQrnF24HIlkCEDnYtpj1v8RuHzQ+zJ0Pp+h6ESkECkRIpIN/a+Bf5ApSvnP2NWcVhm1OqKsqvNEAOgNOsHtg0s+OZMM2alkiIiIFIahsJtg3InTMLlg7DEABqvPI+Stsziy/LeiPNEe0zG1iERIaS2c998THz//7xmISkQKlRIhItnQkSiV/c/Y1QTwsboiZnFA2VXvSSR6egPJHymuZDKkdhVEp+F334LAiIURioiILF5nshrkA96XqA50EDcc9DRcYXFUhWF5eeJa4shiEiEA79qc+PONX8LwoUVGJSKFSokQkUybGoChA5gY3Bu9FrdhsryssBMhtcdWhKS4fHDxJ6GqFcJTiX5drdYVEZE8diToBUzucPwEgIGaDdoUkyErkxUh7YtNhDScAadfD5iw6+7FByYiBUmJEJFMO/Js4g/fmXSbjSzxhtlzZIRd7YVbEZGqCDkacMyeTebywoY/BW8FTB6Fl+6DeNyaIEXkuJ555hluvvlmli5dimEYPPjgg6d8zY4dO7jgggvwer2cdtppbNu2LfuBithAV9DLtY49rI53EDPc9GhTTMZkpDUmZWOyKuSl+yA4uvjjiUjBUSJEJJOiIej6HQBPe94NQIuv8Ksg6pMVIVNRBxORt60JLqlJJEMcLujfB0990YIIReRE/H4/5513Hv/+73Prp29vb+f9738/V199NXv37uXOO+/k4x//OI899liWIxWxXlfQzWddPwagr+4Soq5yiyMqHMcmQha98GXlFbDknMQWuz3bFh2biBQel9UBiBSUnj2JmRil9TwTOxeAFl/Y4qCyz+swqXJFGY+66PI7qfK8bThszQo49w9g7w/gN/8HlqyFdR+yJFYRme3G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Tq+rq2vbDtBffPHFDts1NTX542UdoyevU9d1/cwzz9RvvPHGDq+hpqam7edOp1MfOXKkPmPGDP3rr7/WP/zwQz0lJUWfP3++r1/ScfXktW7atEm/5JJL9HfffVffvXu3vnTpUn3w4MH6pZde2mG7cPid3nTTTXp2dra+dOlSff369frpp5+uT5kype3nwfg7ve+++/THH39cnzdvnp6QkNCl5xz9P/rCCy/omqbpe/bsadsmNzdX/8Mf/tBhu/r6el+9jC7pyWu95ppr9PPOO6/D66isrOywzXnnnaePGTNG//LLL/WVK1fqgwYN0q+44gpfvIQu+X/27jw+yvrc//97JpNM9j2QBQJBEAQRUJSDtC6VSqmi57SWqrRSbW2Py9HWutFTa2urqO1prVaxejxUK7hWrN8qWCvUlp8UZXOXNRC2JCRkXyazfH5/zAKRkHX2eT0fjzwqd+577uueoXMP11zX9RnodTY2NprZs2eb5557znz66adm3bp15owzzjCnnXZat/2i8TVF4oqJRMgFF1xgrrrqqm7bvvKVr5gFCxYc95iVK1eanJwcU19fH+rwwm4wz8cvf/lLM2bMmG7bHnzwQVNWVhaSGMOlvb3dJCUlmb/85S/dtp966qnmv//7v3s85tZbbzWTJk3qtu3rX/+6mTNnTsjiDJfBPB89mThxovnZz34W7PDCaijPxde//nXz4x//2Nx5551xkwgZzPMRr++jg3ku4vU9NBbdf//9pqKiYkDHTJ069Zj7piSzYsWKYIYWVP25zrPPPtvceOONx/39a6+9ZqxWq6murg5sW7JkicnOzjYOhyNosQ7VYF7T559/3qSkpBin0xnYFuuvaWNjo0lOTjYvvPBCYNsnn3xiJJl169YZY6L7NV26dGm/kwOfdfHFF5svfOEL3baNGjXK/OY3vwlGaEE3kGtduHChufjii4/7+48//thIMu+++25g28qVK43FYjH79+8fcqxDMZTX9J133jGSzJ49ewLbovk1ReKJidaYM888U2+++aa2bdsmSXrvvfe0du1azZ0797jHvPLKK5o+fbruv/9+lZWV6cQTT9TNN9+sjo6OcIUdMoN5PmbOnKm9e/fqtddekzFGNTU1evHFF/XlL385XGGHhMvlktvtVmpqarftaWlpWrt2bY/HrFu3TrNnz+62bc6cOVq3bl3I4gyX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/fnPf+73OT7/+c9LEp8DACQsEiFAjJs/f746Ozu1ePFiffnLX9aDDz6o7373u70e43K5tG/fPuXl5YUpSgAA0B/9ua+/8soram1t1aWXXqri4mKdc845WrZsWb/PsXv3bknicwCAhEVrDBDjKioqAt8CXXfddcrOztYjjzyim2++Waeccookyel0BqbQV1dX6/7771d1dbWuu+66iMUNAACO1Z/7+tNPP60zzzxTI0eOlCRdeumluvbaa3Xo0CEVFRUd85iHDx+WJLW1tWn16tV6+OGHVVRUpLPOOitMVwUA0YWKECDGfTaZ8V//9V+SpNdeey2w7a9//auKiopUVFSkyZMn649//KOuvPJK/fKXvwxrrAAAoHd93dfr6+v1+uuv67LLLgvs89WvflUWi0XPP/98j485fvx4FRUVafTo0brqqqs0duxYrVy5Uunp6SG6CgCIbiRCgBg3bty4bn8+4YQTZLVaA2WvkjRjxgy98cYbWrVqlX71q18pNzdXDQ0NSklJCXO0AACgN33d15977jk5nU5NmzZNO3bs0I4dO3T48GHNmDHjuO0xf/rTn/TGG29o+fLl+rd/+zfV1tYqLS0t1JcCAFGL1hggzlgslmO2FRYWavbs2ZKkOXPmaMKECbrwwgv129/+VjfddFO4QwQAAP302fu6P9kxa9asHvfftWuXxowZ023bWWedFVg1Zt68eZo8ebIWLFigjRs3ymrle1EAiYd3PiDGbd++vdufd+zYIY/Ho9GjRx/3mAsuuEBnn3227rnnHrW1tYU4QgAA0F+93dcrKyv19ttv6/rrr9cLL7zQ7ee5555TSkqKli9f3uvjZ2Zm6s4779SWLVuO20oDAPGORAgQ4x5++OFuf37ooYckSXPnzu31uNtuu0319fV6/PHHQxYbAAAYmN7u6/5qkFtvvVWXXHJJt5/58+fr7LPP7tfqMQsWLNCIESN03333Bf8CACAGkAgBYlxlZaUuuugiPfLII/rmN7+pRx55RJdffrmmTJnS63Fz587VySefrF//+tdyOp1hihYAAPSmt/v6smXLNHXq1MBqMZ910UUX6dNPP9WmTZt6PUdycrJuvPFGbdmyRatWrQrFZQBAVCMRAsS45557Tna7XbfffrteffVVXX8osGhhAAAgAElEQVT99XriiSf6dezNN9+svXv39uvbIwAAEHrH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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sites = [\"a\", \"bA\", \"bR\", \"bAR\", \"sigma\"]\n", + "\n", + "fig, axs = plt.subplots(nrows=2, ncols=2, figsize=(12, 10))\n", + "fig.suptitle(\"Marginal Posterior density - Regression Coefficients\", fontsize=16)\n", + "for i, ax in enumerate(axs.reshape(-1)):\n", + " site = sites[i]\n", + " sns.distplot(svi_samples[site], ax=ax, label=\"SVI (DiagNormal)\")\n", + " sns.distplot(hmc_samples[site], ax=ax, label=\"HMC\")\n", + " ax.set_title(site)\n", + "handles, labels = ax.get_legend_handles_labels()\n", + "fig.legend(handles, labels, loc='upper right');" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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duyolJQUNWzYUP3795ePj4+OHDmiH3/8UUePHtXo0aPzvT/z5s2zl2/btq26deumc+fO6ciRI1qwYIF9+MLLPfTQQ3rxxRfl7e2t1q1bq3Pnzjp06JC++OILffnll3rjjTec6nD48GFdf/312r59u4KCgtSxY0dVrlxZR48e1apVq/T7779r+PDhCgkJUXx8vFavXq29e/eqY8eOqlevnn09zZs3z3OfTp06pR49emjLli0KCwtT9+7d5efnp5UrV+qpp57S/PnztWzZshz7XRk9erTmz5+vzp07q3///tqyZYu+//57/fjjj1q5cqXatWuX7+O7b98+de/eXQcPHlTVqlXVr18/XbhwQcuXL9fEiRP14Ycf6ocffrA/5nH99dcrNjZWn3zyidLS0jR48GD7B6O89r1Tp046e/asFi5cqODgYA0ZMiTX8ocPH1bLli114cIFdezYURkZGVqzZo1eeeUV/fzzz1qzZo1Ti4aPP/5YI0eOVEZGhuLi4tSvXz8lJyfr559/1ogRI7Rs2TKXv0IVVkpKiqRLLdguV5Kvs3r16ik+Pt7lOZCk6tWr2//9448/atCgQTp9+rRiY2PVq1cvnT9/XuvXr9e4ceP05ZdfavHixS5bhqxdu1b33HOPatSooeuuu07nzp1TaGhonsfkq6++0pAhQ5SRkaGGDRvqb3/7mxITE7Vy5UotW7ZM3377rd566y2Xy+b1/lUchg8frgceeEAXL17U8uXLdeutt+ZaPj09XZ06ddLWrVtVtWpV9ejRQ8HBwUpISNDOnTvt/XxFRESoefPmio+Pt4e2V/azdOWXiBMnTqh169Y6c+aMOnfurFatWrn8lTMns2fP1ksvvaTWrVurf//+2rt3r1auXKmVK1dq9uzZGjduXL7XlZP4+Hht2bJFv/76q5o1a+bwOu/UqVOey58/f179+/fXDz/8oMDAQHXr1k1hYWFau3atXn75ZX3wwQf69ttv1bJlS5fLT5s2TU888YQ6dOigfv362Y95//79tXDhQt10001F3kegzPHyytcjRO7o6quv1ueff+4wbezYseratasWL16stWvX6vnnny/QOv39/XX11Vdr+/bt6t27d57ld+7cqSVLlmjy5Mku5//yyy/Kzs62f9aUnFvMNmzYUBs2bHCYduX/rzRu3DjNnj1b//73vx2mN2rUSHPnzlVa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SFMSCvI6yw/bMRkyZEiOIzLYVK5c2WlaSbyX5KU0tnn69Gn76GGXDwmam2eeeUb33HOPvvzyS61evVpr1qzRnDlzNGfOHLVp00bLly/P8xi7UtL7a4wpUPmiBEwlpTy95wEoWbGxscXSAXp+rV+/Xs8995xSU1N11VVXafbs2fbPt2XNP//5zyItTygDwC30799fEyZM0JkzZ7Ro0aISGVEiKipKe/fu1b59+9SkSROn+bZf1gMDA51+QY6MjNSdd96pO++8U9KlVi5jxozRunXrNGnSJKdwpU2bNmrTpo2kS8Ohfv755xo5cqReffVVDRkyRN26dVPXrl3z9aXB19dX/fr1U79+/SRdGvFm5syZevzxx3X33XfrpptuUnBwsKKjoyVd+oJZkC/Qtl9id+7cme9lCisqKkrSX8faFds8W9nyUJeiqlKliipUqKBz587phRdesDR0K83XWW6io6O1Z88eTZw4Ua1bty7CHuVfVFSUdu7cmeM1lZycbB/a26prav78+TLGyM/PT926dcv3crYP87YP9Bs2bNDtt9+uDRs26LnnnrMPG12a9u/fr2bNmjlNtw15XatWLYfptpGdUlNTXa7P1mqwuNjOsS0Ec8VT3mMAoKCuHJEJOSN+B+AW6tatq2HDhkm6lDbbvrjkJDExUbt27SrQNrp27SpJOQYWtqGCO3fuLF/f3DPruLg4TZw4UZK0ZcuWXMv6+vpqyJAh9tYreZXPS1hYmKZPn66IiAilp6dr9+7dki4FQVWqVNH27du1bdu2fK/v+uuvlyR98MEHSktLy9cyti83Fy9eLFDdr7vuOnl7e9uHmL3SsWPHtGTJEkkq0BfGwrBdD0uWLNHx48ed5m/evFlbtmyRt7e307DjhVXY45YXHx8f9erVS5L1H4JK63WW17Hs27evpNI9HrZ9zyk8su17/fr1LfkSfujQIU2fPl2SNGrUKPtjo4XRpk0b3XfffZKcz43tEcPivs6v9O6777qc/s4770j663zY2I75jh07nJZJSEjQpk2bXK6vsK/b1q1bKyQkRKdOndKiRYuc5p87d04LFiyQVPLvdwAA90UoA8BtvPzyy6pXr57279+vTp06afXq1U5lMjMz9fbbb6tFixYuP1jnZvz48fL19dXnn3+u9957z2Hed999p//973+SpIceesg+fdmyZfr666914cIFh/LGGC1evFiSFBMTY5/+6quvugyLEhIStHHjRqfyuUlPT9fMmTNd9nexatUqnTlzRj4+PvZfg/38/DRt2jQZY3TTTTe5PH5ZWVlatmyZfvrpJ/u0G2+8US1atNCff/6pm2++2am/kYyMDH3zzTcO02zbLEj4I11qlXPzzTfLGKO7777bYVtpaWm66667lJGRoQ4dOqhDhw4FWndBderUSe3atdO5c+d09913Kz093T7vxIkTuvvuuyVJt956q70VUlFVrVpV/v7+SkhIyDN4LKhp06bJ399fDz/8sObNm+fyUYytW7fq008/LdbtXqmEZxTLAAAgAElEQVQ0XmdS3tfgww8/rIiICM2cOVMvvviiy35p9u/f71THorjzzjsVFhamTZs2acaMGQ4t4TZv3qwnn3zSXrfSdPHiRX3wwQdq166dTpw4oauvvlrPPfdcvpb97LPP9OOPPzpdTxcuXLAHqAU9N8Xls88+s4caNp988okWLlwoX19fp2b6PXv2lCQ9++yzOnPmjH16UlKSRo4cqbNnz7rcTmH3JzAwUPfff7+kSz82XN4S58KFCxo/frwSEhJUp04dDRkypEDrBgCUIcXd8zAAFMXx48ftIw5JMnXq1DEDBw40w4YNM927d7cPLxoWFmZ+/vln+3L5GR3DGGP+97//GW9vb/sIQMOHDzcdO3Y0Xl5eRpKZPn26Q/mXXnrJvr2uXbua4cOHm5tuusk+ikd4eLh9CD1j/hqtp06dOmbAgAHmtttuM7179zYVKlQwkkz37t3NhQsX8nUsbCO1eHt7m2bNmpkhQ4aYYcOGmfbt29vr+9hjjzkt9/DDD9uPX+PGjc3AgQPNrbfearp27WoiIiKMJPPf//7XYZkDBw6Yhg0bGunSENG9e/c2w4YNM9ddd50JDw93Gi3o119/Nd7e3sbb29v07NnTjB492owdO9Z88cUX9jI5jXRy4sQJ+3EKDw83gwYNMkOGDDFVq1a1H7srl8nPqEWFGRFp79699uWqVatmhgwZYgYOHGgfyahly5bm1KlTxbItmyFDhhhJJjo62gwbNsyMHTvWjB071j4/r2s5p5F/jLk0tHRQUJCRLg2p3bt3b3PbbbeZvn37mlq1ahlJZujQofmuq6shsfOjpF9nxhjzyiuvGEkmJCTE/O1vf7Mfx507d9rLrFy50lSpUsV+frt3725uu+02079/f/soUe3atXNYb35GFsvtHHz55Zf2Yd3j4uLMsGHDTI8ePYyvr6+RZEaPHu20TH7fv3Jje8336dPHxMfHm/j4eHPLLbeYLl26mNDQUPv8IUOGmMTERJfrcHVd20YHqlKliunVq5e57bbbzI033miqVatmJJmoqCinEb8eeugh+zK33HKL/dycOHHCGPPX6Es5jTB25T7lVM8HH3zQSDJt2rQxw4cPN+3atbMv42oI79OnTzu83gcOHGh69uxpwsPDTdOmTc2gQYNcnvuEhAQTHBxsJJmOHTuaUaNGmbFjx5q3337bXsbV6EvGXBr21jYqV4UKFUy/fv3M0KFDTe3atY0kU7lyZbNx48Z873te2wPKI0ZfgidgSGwAHuebb74xI0eONPXq1TMhISHGz8/PVK9e3fTq1cvMmjXLaVjWgnyp+emnn8yQIUNM9erVja+vr6lcubK54YYbzHfffedU9o8//jDTp083PXr0MLVr1zaBgYGmYsWK5pprrjGTJk1y+jKyePFic++995oWLVqYqlWrGn9/f1OrVi3TtWtXM2/evByHc3blwoUL5rXXXjPDhg0zcXFxJjw83FSoUMHUrVvXDB482CxdujTHZdesWWNuu+02ExMTYwICAkxoaKhp0KCBGTRokHnzzTddBg2pqanm2WefNW3atDGhoaEmICDAxMTEmBtvvNEsWLDAqfxnn31mOnbsaEJDQ+1fti8//rkFF2lpaebpp582zZs3N0FBQSYwMNA0atTIPProoy7rVlKhjDHGnDx50kyePNk0atTIBAYGmqCgINOiRQvzzDPPmPT09GLdlm17d999t6ldu7bx8/Nz+vJVlFDGmEvH6h//+Idp0qSJCQ4ONoGBgSYmJsZ07drVPPPMM+aPP/7Id10LG8oYU7KvM2MuDQP+9NNPm8aNG9tDEFdfUo8fP26mTp1qWrZsaUJDQ+2vyQ4dOphp06aZ3377zaF8UUMZY4zZvn27iY+PN7Vq1TJ+fn4mIiLCdOvWzeXryJjiDWVsf15eXiY0NNRER0eb3r17mylTppjt27fnug5X1/XmzZvNpEmTTKdOnUxUVJTx9/c3VatWNa1atTIzZsywBy2XO3funHnkkUdMvXr1jL+/v9PwzsUVyuzfv9989NFHpn379iYkJMQEBwebzp07my+//DLHdR45csSMHDnSVKtW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qlevXqW+H16zZk2x7SWpd+/e1er9M8xFlHFzBw4c0IwZM/Twww+Xud0TTzyhHj166K677nLRyFzH3jm41Pnz5/XSSy/ZvcTb3dkzBwkJCfL397/iA1fdunWVkJDg7CG6jRkzZqhNmzZq0KCB/P391adPH82cOVM33HCD2UNzibNnzyotLU2vvPKK+vTpo++//14DBw7U3XffrVWrVpk9PJeZPHmyfH199ec//9nsobiFrKwsjRs3TkOGDFFYWJjZw4GdEhISVKdOnWK3+fr6KjIysszf6978nqCqKjunkvT2228rNDRUoaGh+vbbb7Vs2TL5+/s7c7huryrzWcjb3rNVlSPmtDo7f/688vPzVbdu3WK3l/V+OCEhoULbA45GlHGR8ePHy2KxlPl1+QnjTp48qT59+uiee+7RqFGjSn3sxYsXa8WKFW5/EktnzsGlUlJS1K9fP7Vp00YvvPCCE55J5blqDtxZZeagImbMmKG1a9dq8eLF2rhxo6ZOnapHH31UP/zwgwOfRdU4cw5sNpsk6a677tITTzyhjh07avz48brjjjvc6oTHzpyDjRs36o033tAHH3zg1ufTcPa/hUK5ubm69957ZRiG3nnnHQeMHFXlzL97T3lP4Giu+Pc0dOhQC08LrgAACXFJREFUbd68WatWrVKLFi107733Kisry0HPwL246veTO79nczRXzSkAz8MaQRd58skn9dBDD5W5TZMmTYr++9SpU7rpppvUo0cPzZ49u8z7rVixQgcPHrxihcSgQYN0/fXX68cff6zssB3KmXNQKDU1VX369FGNGjW0aNEi+fn5VWXIDufMOYiOjlZOTo6SkpKK/SycOXPGrZavV3QOKiIzM1PPPPOMFi1apH79+kmS2rdvry1btmjKlClXLE01izPnoHbt2vL19VWbNm2K3d66dWv98ssvlXpMZ3DmHPz88886e/as4uLiim7Lz8/Xk08+qenTp+vIkSOVelxHc+YcFCoMMkePHtWKFStYJeMm7P27j46OvuLElHl5eUpMTCz197qnvCdwNGfOaaHw8HCFh4erefPm6tatm2rWrKlFixZpyJAhVR2+23HFfLr7ezZHc8WcouB9kI+PzxVXHy3r/XB0dHSFtgccjSjjIlFRUYqKirJr25MnT+qmm24qOtO/1Vr2gqbx48frD3/4Q7Hb2rVrp2nTpql/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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(12, 6))\n", + "fig.suptitle(\"Cross-section of the Posterior Distribution\", fontsize=16)\n", + "sns.kdeplot(x=hmc_samples[\"bA\"], y=hmc_samples[\"bR\"], ax=axs[0], shade=True, label=\"HMC\")\n", + "sns.kdeplot(x=svi_samples[\"bA\"], y=svi_samples[\"bR\"], ax=axs[0], label=\"SVI (DiagNormal)\")\n", + "axs[0].set(xlabel=\"bA\", ylabel=\"bR\", xlim=(-2.5, -1.2), ylim=(-0.5, 0.1))\n", + "sns.kdeplot(x=hmc_samples[\"bR\"], y=hmc_samples[\"bAR\"], ax=axs[1], shade=True, label=\"HMC\")\n", + "sns.kdeplot(x=svi_samples[\"bR\"], y=svi_samples[\"bAR\"], ax=axs[1], label=\"SVI (DiagNormal)\")\n", + "axs[1].set(xlabel=\"bR\", ylabel=\"bAR\", xlim=(-0.45, 0.05), ylim=(-0.15, 0.8))\n", + "handles, labels = axs[1].get_legend_handles_labels()\n", + "fig.legend(handles, labels, loc='upper right');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## MultivariateNormal Guide\n", + "\n", + "As comparison to the previously obtained results from Diagonal Normal guide, we will now use a guide that generates samples from a Cholesky factorization of a multivariate normal distribution. This allows us to capture the correlations between the latent variables via a covariance matrix. If we wrote this manually, we would need to combine all the latent variables so we could sample a Multivarite Normal jointly." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Elbo loss: 703.0100790262222\n", + "Elbo loss: 444.6930855512619\n", + "Elbo loss: 258.20718491077423\n", + "Elbo loss: 249.05364602804184\n", + "Elbo loss: 247.2170884013176\n", + "Elbo loss: 247.28261297941208\n", + "Elbo loss: 246.61236548423767\n", + "Elbo loss: 249.86004841327667\n", + "Elbo loss: 249.1157277226448\n", + "Elbo loss: 249.86634194850922\n" + ] + } + ], + "source": [ + "from pyro.infer.autoguide import AutoMultivariateNormal, init_to_mean\n", + "\n", + "\n", + "guide = AutoMultivariateNormal(model, init_loc_fn=init_to_mean)\n", + "\n", + "svi = SVI(model, \n", + " guide, \n", + " optim.Adam({\"lr\": .01}), \n", + " loss=Trace_ELBO())\n", + "\n", + "is_cont_africa, ruggedness, log_gdp = train[:, 0], train[:, 1], train[:, 2]\n", + "pyro.clear_param_store()\n", + "for i in range(num_iters):\n", + " elbo = svi.step(is_cont_africa, ruggedness, log_gdp)\n", + " if i % 500 == 0:\n", + " logging.info(\"Elbo loss: {}\".format(elbo))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's look at the shape of the posteriors again. You can see the multivariate guide is able to capture more of the true posterior." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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fVevXhVfxcjfhZmIKldmZqbY80Kaa0JZPHr0SGHemMuXL+Orr74CwHsWEVFl0NXVha2trcy/ghLSd+nSBVlZWRgxYgR69Oih8LU/e3v7MifDJipPfJWG6DN27do1tG/fHo6OjrCxsYG2tjaSk5ORkJCAvLw8uLm5YcKECZXdTCICsGTJEly9ehWnT5/G7du34eHhgc6dO1d2syrU5cuX4ebmhvr166N27dpy9ywPDw+MHTu2sptJRESFUFNTg4+PDxYvXozDhw8rrDN48GAMHDgQ+/btk3stVRAEvHjxgnlGqEKxxwjRZ8ze3h7jxo2DiooKYmJiEBYWhlu3bqFNmzb4+eefER4e/kFyRxBRyR06dAhbt27Fixcv4OfnV2FDan9MHBwcxMDH+/estm3bYv369Th48KCY04OIiD5e8+fPx+PHj+Hu7q5wev/+/TFgwAAMGjQIP/zwAy5cuIC7d+/i4MGD6NSpEyIjIyu4xaTs+ERE9BmrXr061qxZU9nNIKJiiIqKquwmVLqaNWti7dq1ld0MIiIqIw0NDZiYmBQ4XSKRICQkBL/++is2bdqEhQsXQk1NDXZ2dvDx8SkwoEL0oTD5KhERERER0QdUaPJVIqoQTL5KRERERERERKQAAyNEREREREREpLQYGCEiIiIiIiIipcXACBEREREREREpLQZGiIiIiIiIKgDHvSCqPIVdfwyMEBERERERfUDq6uoAgNevX1dyS4iUl/T6k16P71Or6MYQEREREREpE1VVVRgZGeHRo0cAAB0dHUgkkkpuFZFyEAQBr1+/xqNHj2BkZARVVVW5OhKB/bmIiIiIiIg+KEEQkJaWhvT09MpuCpFSMjIygrm5ucKgJAMjREREREREFSQ3Nxc5OTmV3QwipaKurq6wp4gUAyNEREREREREpLSYfJWIiIiIiIiIlBYDI0RERERERESktBgYISIiIiIiIiKlxcAIERERERERESktBkaIiIiIiIiISGkxMEJERERERERESouBESIiIiIiIiJSWgyMEBEREREREZHSYmCEiIiIiIiIiJQWAyNEREREREREpLQYGCEiIiIiIiIipcXACBEREREREREpLQZGiIiIiIiIiEhpMTBCREREREREREqLgREiIiIiIiIiUloMjBARERERERGR0mJghIiIiIiIiIiUFgMjRERERERERKS0GBghIiIiIiIiIqXFwAgRERERERERKS0GRoiIiIiIiIhIaTEwQkRERERERERKi4ERIiIiIiIiIlJaDIwQERERERERkdJiYISIiIiIiIiIlBYDI0RERERERESktBgYISIiIiIiIiKlxcAIERERERERESktBkaIiIiIiIiISGkxMEJERERERERESouBESIiIiIiIiJSWgyMEBEREREREZHSYmCEiIiIiIiIiJQWAyNEREREREREpLQYGCEiIiIiIiIipcXACBEREREREREpLQZGiIiIiIiIiEhpMTBCREREREREREqLgREiIiIiIiIiUloMjBARERERERGR0mJghIiIiIiIiIiUFgMjRERERERERKS0GBghIiIiIiIiIqXFwAgRERERERERKS0GRoiIiIiIiIhIaTEwQkRERERERERKi4ERIiIiIqJPxNy5cyGRSPDkyZPKbgoR0WeDgREiIiIios9Ubm4uqlevDolEgsOHD1d2c4iIPkoMjBARERERfaZOnDiB1NRUWFtbY/v27ZXdHCKijxIDI0REREREn6ng4GA0a9YMkyZNwt69e5GZmVnZTSIi+ugwMEL0mbt79y7Gjh2LunXrQltbG8bGxujXrx/u3LlT2U0jIiKiUnry5An69+8PAwMDGBsbY+LEicjOzpapk5WVhbCwMAwcOBD9+/dHVlYW9u3bV0ktJiL6eDEwQvSZO3/+PGJjYzFw4ECsXr0aX3/9NSIiIuDq6orXr19XdvOIiIioFPr374/s7GwEBgaia9euWL16NUaPHi1TZ//+/Xj16hUGDhwIc3NzuLq68nUaIiIF1Cq7AUT0YXXr1g19+/aVKevRowdat26NPXv2wNvbu5JaRkRERKVVu3ZtsffHuHHjYGBggJ9//hmTJ09Go0aNALx7jaZNmzawtLQEAAwcOBBjx47F48ePYWpqWmltJyL62LDHCNFnTltbW/z/nJwcPH36FLa2tjAyMkJCQkIltoyIiIhKa9y4cTJ/T5gwAQAQHh4OAHj69CmOHj2KQYMGiXW8vLwgkUiwa9euimsoEdEngIERos9cVlYWZs+eDUtLS2hqasLExASmpqZIT09HRkZGZTePiIiISsHOzk7m7zp16kBFRUXMIbZz507k5OSgadOm+Oeff/DPP//g2bNnaNmyJV+nISLKh6/SEH3mJkyYgM2bN8Pf3x+tW7eGoaEhJBIJBg4ciLy8vMpuHhEREZUDiUQi87c0+OHs7Kyw/u3bt2FjY/PB20VE9ClgYIToMxcaGgpfX18sW7ZMLMvOzkZ6enoltoqIiIjK4u+//0bt2rXFv//55x/k5eXB2toaycnJiI2Nxfjx4+Hi4iIzX15eHry9vRESEoKAgICKbjYR0UeJgRGiz5yqqioEQZAp++mnn5Cbm1tJLSIiIqKyWrt2LTp37iz+/dNPPwEAunTpIvYWmTp1qph49X2//fYbtm/fzsAIEdH/x8AI0Weue/fu2LZtGwwNDeHo6IgzZ87g+PHjMDY2ruymERERUSklJyejZ8+e8PDwwJkzZxAcHIzBgwejcePGGDhwIJo0aaIwKAIAPXv2xIQJE5CQkIBmzZpVcMuJiD4+TL5K9JlbtWoVfHx8sH37dnz77bdITU3F8ePHoaenV9lNIyIiolLauXMnNDU18d133+HQoUMYP348Nm7ciISEBNy4cQM9evQocF7ptODg4IpqLhHRR00i5O9jT0RERERERESkJNhjhIiIiIiIiIiUFgMjRERERERERKS0GBghIiIiIiIiIqXFwAgRERERERERKS0GRoiIiIiIiIhIaalVdgOKIy8vDykpKdDX14dEIqns5hARkZITBAEvX75E9erVoaLC3xjKAz/riYjoY8PPe+XxSQRGUlJSYGlpWdnNICIiknH//n3UrFmzspvxWeBnPRERfaz4ef/5+yQCI/r6+gDenZAGBgaV3BoiIlJ2L168gKWlpfj5RGXHz3oiIvrY8PNeeXwSgRFpl1oDAwN+WSIioo8GX/koP/ysJyKijxU/7z9/fFGKiIiIiIiIiJQWAyNERERKJDAwEC1atIC+vj7MzMzg6emJv/76q8j5du/eDQcHB2hpaaFhw4YIDw+XmS4IAmbPng0LCwtoa2ujU6dO+Pvvvz/UZhARERGVmxIFRtatW4dGjRqJ3Vxbt26Nw4cPFzpPUV+kiIiIqOJER0dj3LhxOHv2LI4dO4acnBx07twZmZmZBc4TGxuLQYMGYcSIEbh48SI8PT3h6emJq1evinUWL16M1atXY/369YiLi4Ouri7c3d2RnZ1dEZtFREREVGoSQRCE4lY+cOAAVFVVYWdnB0EQsGXLFixZsgQXL15E/fr15erHxsaiXbt2CAwMRPfu3RESEoJFixYhISEBDRo0KHYjX7x4AUNDQ2RkZPC9YyIiqnSf0+fS48ePYWZmhujoaLRr105hnQEDBiAzMxMHDx4Uy1q1aoUmTZpg/fr1EAQB1atXx7fffovJkycDADIyMlCtWjUEBQVh4MCBRbbjc9qnRET0eeBnk/IoUY+RHj16oGvXrrCzs4O9vT0WLlwIPT09nD17VmH9VatWwcPDA1OmTEG9evUwf/58NGvWDGvWrCl0PW/evMGLFy9k/hEREVH5y8jIAABUrVq1wDpnzpxBp06dZMrc3d1x5swZAEBycjLS0tJk6hgaGqJly5Zinfz4WU9EREQfi1LnGMnNzcWOHTuQmZmJ1q1bK6xT1BepggQGBsLQ0FD8Z2lpWdpmEhERUQHy8vLg7+8PZ2fnQntypqWloVq1ajJl1apVQ1pamjhdWlZQnfz4WU9EREQfixIHRq5cuQI9PT1oamri66+/RlhYGBwdHRXWLViVl54AACAASURBVOqLVEGmT5+OjIwM8d/9+/dL2kwiIiIqwrhx43D16lXs2LGjwtfNz3oiIiL6WKiVdIa6desiMTERGRkZCA0Nha+vL6KjowsMjpSGpqYmNDU1y215REREJGv8+PE4ePAgTp48iZo1axZa19zcHA8fPpQpe/jwIczNzcXp0jILCwuZOk2aNFG4TH7WExER0ceixD1GNDQ0YGtrCycnJwQGBqJx48ZYtWqVwrpFfZEiIiKiiiUIAsaPH4+wsDCcOHECtWvXLnKe1q1bIyIiQqbs2LFj4qu0tWvXhrm5uUydFy9eIC4ursDXbYmIiIg+FqXOMSKVl5eHN2/eKJxW1BcpIiIiqljjxo1DcHAwQkJCoK+vj7S0NKSlpSErK0us4+Pjg+nTp4t/T5w4EUeOHMGyZctw48YNzJ07FxcuXMD48eMBABKJBP7+/liwYAH279+PK1euwMfHB9WrV4enp2eFbyMRERFRSZToVZrp06ejS5cusLKywsuXLxESEoKoqCgcPXoUwLsvUjVq1EBgYCCAd1+kXFxcsGzZMnTr1g07duzAhQsX8Ouvv5b/lhAREVGR1q1bBwBwdXWVKd+8eTP8/PwAAPfu3YOKyv/9dtKmTRuEhIQgICAAM2bMgJ2dHfbu3SuTsHXq1KnIzMzE6NGjkZ6ejrZt2+LIkSPQ0tL64NtEREREVBYSQRCE4lYeMWIEIiIikJqaCkNDQzRq1AjTpk2Dm5sbgHdfsqytrREUFCTOs3v3bgQEBODOnTuws7PD4sWL0bVr1xI1kuNHExHRx4SfS+WP+5SIiD42/GxSHiUKjFQWnpBERPQx4edS+eM+JSKijw0/m5RHmXOMEBERERERERF9qv4fe3ceH1d93//+dWY0o9E2Gu2LLXnDNuAdbIxZTWIWp6GBJpDSJCT8SG5yC21SmuZXt7cpdKO3TQppyyXNrwEnoQ4EAiQhhEAAm8ULGOMVvMtarH0bSSNpNMu5f5wZLViyJVkzR8v7+XjM4xydOefMR348LI0+8/l8vmNerldEEmz342M7f/VdiYlDREREJpfRvkfQewMRkTFRxYiIiIiIiIiIzFhKjIiIiIiIiIjIjKVWGpEZbsuuqjFf80dryxMQiYiIiIiISPKpYkREREREREREZiwlRkRERERERERkxlJiRERERERERERmLCVGRERERERERGTGUmJERERERERERGYsJUZEpppIH5x6E3Y/DpXbIdxnd0QiIiIiIiJTlpbrFZkqQt1w6m2o2AZ9Xdax+n1QvROu+Ras+ENwuuyNUUREREREZIpRxYjIVNB2Cl79OzjyayspkpYD89dDaha0V8Ev74VHLoP6gzYHKiIiIiIiMrWoYkRksjOjsP9nEO6FzCK44HooXQUOJyz+hNVa89bD0HoS/uczcPcr4CuzO2oREREREZEpQRUjIpNd1Q7orAVXOlzxpzB7tZUUAXC64Yo/gT/ZDQUXQWcdPPFp6G61N2YREREREZEpQokRkcmsrxsOv2jtL7oJ3BnDn5eWA59/BrJKofkIPPlHEOpNXpwiIiIiIiJTlBIjIpPZsZcgFIDMYphz5dnPzZ5tJUdSs60qk2e/DNFIcuIUERERERGZojRjRGSy6qyHU29Z+0tuHWifOZuiJfCH/wNP/AF8+Ct46yG45puJjVNERESmpt2Pj/7c1XclLg4REZupYkRkMjJN+OA5a/Bq0VIoWDz6a+ddDZ98yNp//Z+g+t3ExCgiIiIiIjINqGJEZDJqPQFNR6wqkYs/NerLtuyqsnbMq7miZCNz635D15Yv8uKVzxB2ZQ45NxI1ae4KUu/vpb6jl5auIOW56ayZm0uqaxTVKSIiIiIiItOAEiMiiTaWMtW42j3WdtYayCgY+/WGwbtL/ob89v1k9pxmzQf/wI4V/9z/9MnmLp7eXYO/JzTksoO1Hbx2pJHL5+WxbkEeWR7X2F9bRERERERkClErjchkY0ah/oC1X7Ji3LcJubLYvuKfiRpO5tX+mrmnf0XUNHntcCM/fLMCf08Id4qD8tx0LpuXy/UXF5GfmUpvKMrWo03862+PcKjWP0HflIiIiIybacKR38Dux+DA01C3D/oCdkclIjJtqGJEZLJprYBgJ7jSIH/hed2qOWclBy/4GsuPPcLqQ//A90/m8kazF4BLynP4/RWluFMG8qPXLirgw7oOth1toqath6ferebuq1KYkzfCMsEiIiKSWMd+B6//40A1KUDl24ABs9fAstvBqbf0IiLnQz9FRSab+n3WtmgpOEbxX3RQq86CqtYznu5x5dCWNoecnkru6/gXdjsf4BMr5nDJnJwzznUYBktKs7moxMv/7Kzkw/pOfryjkq9eO5/CLM+4vyUREREZh7f/HV75G2vflQ5ll0E0Ai3HrNXrat6B7hZY/b/ArQ8xRETGS600IpOJaULdfmu/ePxtNINFcPDN8Nfwm+msdJzkR3NfGTYpMpjDMPjsmnLKctLoCUX40fZTdPaGznqNiIiITKDqd+B391v7a74CX98PF98CSz8N1/4lrP2/IcVjDWzf/j0rQSIiIuOiihGRyaS9CnrbwenmnUABZsWZFSBj9T81hbzamcv/4/wy/+H6d1af/gkdpVfTkH/5Wa9zpzj4wrq5/Ne2E7QE+vjRjlN89ZoFuJzKp4qIiCRUTxs8czeYESsR8ol/BcMYek7BYrjiT+GdH0BXI+z4T7j6m6ocEREZB/2FIzKZxNtoCi/GdJz/ijBbm7P5dWMuAAvmlNGYcwkGJuv2/xWpwXMnXTJTU/jSFXNJdzupbe9l+wl9GiUiIpJQpgm//BPwV0HOXPjkw2cmReK8pXDlNyA930qmvP+ENcRdRETGRIkRkclicBvNeaxGE3e0y8P/qSoC4NMlzazL6aSy+Ab8GfNIDzZx+YFvj+rNU15mKp9YVgLA1iONdAXD5x2biIiIjGDvFvjwV+BwwWceB4/37Oen+WD1Xdb5TR/CsVeSE6eIyDSixIjIZNFZC93N1hubwovP61ahqMGjlSWETQdrfJ18pqQZgKjDzdsr/5WI4WJW0zaWnPg/o7rfyjIfs3xpBMNRfvdBw3nFJiIiIiOIRuDN71j71/0VzLpkdNd5Z8Gy26z9oy/B8VcTE5+IyDSlxIjIZFEXa6MpWAwpqed1q1815FLbm0p2SpivzanDMagCt927mN1L/hqA5cceYVbD1nPez2EY/VUj755q5Uh953nFJyIiIsM48iK0ngSPD9Z+dWzXll0G5esAE579CgTU/ioiMlpKjIhMFhPURlMfdPFsXR4AX5jdSGbKme0yJ8o+zdHyz8bmjWzC23XynPedl5/BklIvJvAPv/4A0zTPK04RERH5iO3/YW3XfHl8Q1SX/AFklVgr1Lz0lxMbm4jINKbEiMhk0NUEXfVgOKFoybhvY5rweFURIdPB0qwAV+V2jHjunov+N405l+AOd3H1nq/jCp27CuSmJcU4HQZvHmvm/l8eYsuuqlE/RGRyeOONN7j55pspLS3FMAyef/75s57/pS99CcMwzngsWTLws+r+++8/4/kLL7ww0d+KyPRStQuqd4HTDZf9X+O7h9MFK+4AwwEHfgZHfzuxMYqITFNKjIhMBq0nrG3OHHClj/s2O9uy2NuRSYoR5e7y+hGH2ANEHS7eXPVvBDxFZAdOccW+/40RDZ31/nmZqVwx36pG+c3BelWNiExBgUCAFStW8Mgjj4zq/O9973vU1dX1P6qrq8nNzeW2224bct6SJUuGnPfWW28lInyR6WtHrFpk+Wchq2j89/GVw+V/bO2/cB/0jvwhiYiIWFLsDkBEgLZYK0vOvHHfojvi4Ec1hQDcUtxKqWf4JMeCqqeHfH2y9GaWVGxmVtObbNj5JU7O+tSQZQFPlA/942f94kLeOdVKY2eQ401dLCzMOuv9+zlzhz+++q6zfVsiMsE2btzIxo0bR31+dnY22dnZ/V8///zztLW1cdddQ//vpqSkUFxcPGFxiswoLSfgwxes/XX3nv/9rvtrOPwCtJ2C390Pn/y387+niMg0pooRkcmgtcLa5s4f9y1+3ZBLW8hFcWofnyoe/cC17rRSjpV9BhODAv9+5tT/1urJGUGa28kl5TkA7DihwW4iM80Pf/hDNmzYwJw5c4YcP3bsGKWlpcyfP5/Pfe5zVFWdvYUuGAzS0dEx5CEyY73zA8CEhTdC4QS0obnT4eZ/t/Z3/xBOv3f+9xQRmcZUMSJit2AXBJqs/Zy547pFV9jBrxusZMUfzmrC7Rhbi0t71iJOzLqFBaefo7j1HcJOD6cL1494/rr5eew42cKR+k5aA33kZrjHFbeITC21tbX85je/YcuWLUOOr127ls2bN7N48WLq6up44IEHuPrqqzl48CBZWVnD3uvBBx/kgQceSEbYIpNbNAJ7/8fa982B3Y9PzH3nX2u15ex/Cn7zl3D3y5y1x1ZEZAZTxYiI3dpi1SKZReObQA+82JhLT9RJmaeXtb7xLaXb4ltGZbFVXj+76Q2Km3eMeG5+VioLCzMxgZ0nVTUiMlP86Ec/wufzccsttww5vnHjRm677TaWL1/OjTfeyIsvvkh7ezs/+9nPRrzXpk2b8Pv9/Y/q6upEhy8yOVVuh2CnNWOsYPHE3nvD/eDKgJp34MAIra4iIqLEiIjt4m0045wv0hV28GKsWuQzpS04zuPDoIa8NVTHKkXmNLxCadPIwxPXLbCGsO6ubKUvfOaSwCIyvZimyWOPPcYXvvAF3O6zV4n5fD4WLVrE8ePHRzwnNTUVr9c75CEyI30QWxmqeBk4nBN7b28pXH2ftf/Kt60qVREROYMSIyJ2i1eM5I4vMfLrBqtapDytl8vGWS0yWG3+1dQUXANAWeNrLD/6H8POHFlUlEVuhpveUJS91e3n/boiMrlt27aN48ePc/fdd5/z3K6uLk6cOEFJSUkSIhOZwqIR+OCX1n7JysS8xrp7rRadzjp466HEvIaIyBSnxIiInSIh8McGFOaMffBqV9jBbxpj1SIlzedVLdLPMDhduJ6qoo8DsPTED7jk8L+ekRxxGAaXx5bu3XGyWUv3ikwRXV1d7N27l7179wJQUVHB3r17+4elbtq0iTvvvPOM6374wx+ydu1ali5desZz3/zmN9m2bRunTp1i+/bt3HrrrTidTu64447EfjMiU13ldgg0Wm00+YsS8xouD9z4j9b+9v+AdrWtiYh8lBIjInbyV1ufFrkzISN/zJe/EKsWmZPWyxrfxJbH1uVfyanYzJELT/2ENYf+HsyhLTOXlufgcho0dASpaA5M6OuLSGLs3r2bVatWsWrVKgDuu+8+Vq1axbe//W0A6urqzlhRxu/38/Of/3zEapGamhruuOMOFi9ezO23305eXh47d+6koKAgsd+MyFR36Dlrm4g2msEu/CTMuQoiQXjzu4l7HRGRKUqr0ojYqe2Utc2ZN+ZJ8d2RgWqR20onqFrkIxry1lBfsI7LDtzPwuqnSYn0sHPZ32M6rB8daW4nq8pzeKeilV0VrcwvyJz4IERkQq1fv/6sFV6bN28+41h2djbd3d0jXvPkk09ORGgiM0s0Ah8muI0mzjDgY38Nj2+E938CV/0Z5Mw593UiIjOEKkZE7NR60tqOY77I683Z9EadzPYEWZ2duGFqJ2ffyvaV/y9RI4V5tS9w5d6/wBHp639+zdxcAA7XdxAMRRIWh4iIyLRS+TYEmsDjS1wbzWBzroD510E0DG/8S+JfT0RkClFiRMQupjlQMTLGxEjUhJebrGqRmwrbxlpsMmZVJTfx5qp/I2K4KG/4Hdfs+VOckR4ASrM95Ge6CUVMPqjrSGwgIiIi08Wh2Go0F30ysW00g13319Z270+h5URyXlNEZApQYkTELoEm6OsCRwp4y8Z06b6ODOqDbjKcEa7O9ScowKFOF13H1tWPEHamUdr8Nlfv+TOMaAjDMFg+2wfA/prkxCIiIjKlmSYce9nav+j3k/e6ZWtg4Q1gRuCNf03e64qITHKaMSJil/gyvb5ycI7tv+JLsdki6/P8eJzJWw2mIX8dr6/+Ptft/hqlzW9z+YG/Ycfyf2LFbB+vHW7kWGMnHcVOvClqqREREWH348Mf72qwBrA7nNBaASmpyYtp/SYrKbP/KcidDxkakiwiMqaKkQcffJA1a9aQlZVFYWEht9xyC0eOHDnrNZs3b8YwjCEPj8dzXkGLTAutscRIztjaaGp7XeztyMTA5MbCtgQEdnZNuZfw5qrvxmaO/JpLDn+Hgkw3pT4PURN2tWUlPSYREZEppemotc2Zn9ykCMCsS+CC662V5k69ldzXFhGZpMaUGNm2bRv33HMPO3fu5JVXXiEUCnHDDTcQCJx9mU6v10tdXV3/o7Ky8ryCFpkW2sY3eDU+W2RVdoCi1NBERzUqdQVXs3PZ3wHWUr4XnXyMFbF2mrdbvbbEJCIiMmU0H7a2BYvtef21X7W21bsgHLQnBhGRSWRM9fsvvfTSkK83b95MYWEh7733Htdcc82I1xmGQXFx8ahfJxgMEgwO/JDu6NBAR5lm+rqhq9HaH0PFSE/EwdbmbABuKmxNRGSjdmrWzXj6Wrnk8HdYdfRhbr2oiN8wh8NdaTT3pZDvDtsan4iIyKQUDUPzcWu/4EJ7Yljwcev9R1sFnN4Dc9bZE4eIyCRxXsNX/X5r0GJubu5Zz+vq6mLOnDmUlZXxqU99ikOHDp31/AcffJDs7Oz+R1nZ2AZTikx6HTXWNj0P3BmjvuyNFi89USelqUGWZXUnKLjROzzvi3w474sArD/2j6zN6cLEYIeqRkRERIbXVgmRILgzwVtqTwwOB6y529qvfNMaBisiMoONOzESjUb5xje+wZVXXsnSpUtHPG/x4sU89thj/OIXv+CJJ54gGo1yxRVXUFNTM+I1mzZtwu/39z+qq6vHG6bI5NRx2tp6Z436EnPQEr03FrbhSPASvaO1d9E3aPYtxx3u4h/5TxxEebtNiREREZFhNcXaaPIXgWHjApErPwcOF3TUDgyEFxGZocb90/iee+7h4MGDPPnkk2c9b926ddx5552sXLmSa6+9lmeffZaCggL+67/+a8RrUlNT8Xq9Qx4i04o/lhjJnj3qS052e6jpTcVlRLkmb/K0l5mOFN5e8c+EnOlc0LOfP3b+kopuD7W9brtDExERmXyaYgsX2DVfJC49F2Zdau2fetPeWEREbDauxMi9997LCy+8wOuvv87s2aP/ww7A5XKxatUqjh8/Pp6XFpkexlExsq3Fmi1yWU4n6c5oIqIat0B6Gbsv/isAvuF6hhXGcXZqdRoREZGh+gLWMr0A+TYnRgDmXmVt6/ZB7+T50EVEJNnGlBgxTZN7772X5557jtdee41588a2mgZAJBLhwIEDlJSUjPlakWkh0gddDdb+KBMjoajBW7G5Hevz/ImK7LxUzPp9KotvJIUoD7se4cN2p90hiYiITC7NxwATsoohzWd3NFblqm+OtXRv7R67oxERsc2YEiP33HMPTzzxBFu2bCErK4v6+nrq6+vp6enpP+fOO+9k06ZN/V//3d/9HS+//DInT55kz549fP7zn6eyspIvf/nLE/ddiEwlnfXWGxB3BniyR3XJbn8mgYiTPFeIpZNg6OqwDIN3lv4NPSle5jka2ND3Kv6QkiMiIiL9+ueLTIJqkbhZl1jbur32xiEiYqMxJUYeffRR/H4/69evp6SkpP/x1FNP9Z9TVVVFXV1d/9dtbW185Stf4aKLLuITn/gEHR0dbN++nYsvvnjivguRqSQ+X8Q7G4zRTVDdFlui95o8/6QZujqckCub6pIbAfiy80WOtUVsjkhERGQSaTlmbe2eLzJY8Qpr23YKetpsDUVExC4pYznZHMVSXlu3bh3y9UMPPcRDDz00pqBEprX4Ur2jbKNpCznZ22Et6XvNJG2jGawt60IqnXOYE6lkYetWKFxvd0giIiL262mH7hbAgJz5dkczIM0HOfOslWnq9sH89XZHJCKSdGNKjIjIBIgPXs0eXWLkzZZsTAwWZXRT6gklMLAJYhgcLbieOfX/zcfCb7GvZxnhtDy7oxIREbFX60lrmz0LXJ7Evtbux8d2fslKJUZEZEZTYkQkmcwodNRa+6NYqtc0B1ajWZ9vT7XIgqqnx3xNZm4pb9Su4BrHPnLq3qBp/q0JiExERGQKiSdGcidRtUhcyQr44DkrOdLTPjkGw4qIJNG4lusVkXEKNFmr0jjdkFFwztNPdHuo6U3FbURZl9OZhAAnhsOAVzI+SdQ0mN9zgIye03aHJCIiYq/WE9Y2d4G9cQwn3k4DVtWIiMgMo8SISDLFB69mlYBx7v9+b8SqRdbkdJLujCYysglXlJvNc9GrACirf9UqfxEREZmJ+gLQGVucYDJWjIBVNQJanUZEZiQlRkSSKT54dRTzRcIm7GjLAuCa3I5ERpUQy7ICfC/8aYJmCtndpwY+KRMREZlp2iqsbUYhpGbZG8tISlZa23g7jYjIDKIZIyLJ1DFoqd5zONiRQUc4BW9KmGXeQIIDm3gep0lOVjrPdF/L51JehVNvQt4FdoclIiKSfC3jny+yq6J1zNesnZc75musdpq51rK9DQdh7lVjv4eIyBSlihGRZDHNgVaaUSzV+1arF4B1OZ04jUQGljiXZnfx48j11hf1B/QJlIiIzEzxqsm8SdpGE1d4sbVtPmpvHCIiSabEiEiyBDugr8uaLeItOeupPWF4tz0TgKty7VmNZiJckt3FEbOcndGLrBV5qrbbHZKIiEhyRfrAX23tT8bBq4PlL7K2zUet39siIjOEEiMiyeKPzRfJLLRWpTmL39Wl0ht1UuDuY2FGbxKCS4yC1DCzPEF+HI5VjVRuh0jY3qBERESSqa3SSjJ4siFtHC0uyZRdBikeCPdCe7Xd0YiIJI0SIyLJ0jH6NppfVHkAuCq3A2OKttHELc3q5uXoajocPqtipl7LAIqIyAwyeJneyf5L3eGEvIXWvtppRGQGUWJEJFn8oxu82t5nsK3eqii5cgquRvNRy7wBwqTwDB+zDpx6096AREREkql1/INXbVEwqJ1GRGSGUGJEJFlGuVTvb2pSCZkGc9J6KUvrS0JgiXVxZjcGJo92b8A0nNa0e7/Kc0VEZAYwo1YrDUydxEh8zkjbSWs+iojIDKDEiEgyhHuhu8Xa95ae9dTnY20006FaBCAjJcr89F6a8FHtvcQ6eOote4MSERFJhs46iAStuR1ZxXZHMzoZheDxQTQyUO0iIjLNKTEikgyd9dY21QvuzBFPq+t28E6zC5g+iRGApd5uAJ53bLAOnN4Dfd02RiQiIpIEbaesra/cWpVuKjCMgXaaJrXTiMjMMEV+QotMcZ111jbr7Mv0/rLag4nBZfl95Lunz+otS7MCAGxpuwgzqwSiIajfb3NUIiIiCRZPjOTMtTOKsctfbG01Z0REZgglRkSSoSOWGPGePTHyfFUqAJ8qn7pL9A7nwswe3A6T+t4UWvMutQ7Wvm9vUCIiIokWny/im2trGGMWnzPSUWOtKCciMs0pMSKSDKOoGDnqd/Kh34XLMPnErGCSAksOt8Pk0rwQAG84L7cONh+FYKeNUYmIiCRQdysEGq39nDn2xjJWqVkD71maj9kbi4hIEigxIpIMo0iM/KLaGrp6bXEfOalmMqJKqisLrcn2v20vhexywIS6vfYGJTIDvfHGG9x8882UlpZiGAbPP//8Wc/funUrhmGc8aivrx9y3iOPPMLcuXPxeDysXbuWd955J5Hfhsjkd/o9a5tRAO4Me2MZj/yF1rblhL1xiIgkgRIjIokW7IyVoRojTqQ3TfhFbDWa6dZGE3dFLDGyvdFNtDS2Oo3aaUSSLhAIsGLFCh555JExXXfkyBHq6ur6H4WFhf3PPfXUU9x333387d/+LXv27GHFihXceOONNDY2TnT4IlNHdSw5ONXmi8TlzLO27adsDUNEJBmUGBFJtHi1SHoeON3DnvJei4uabicZKVE2lEyvNpq45TlhslKidIQcHE5fDRjWMoDt1XaHJjKjbNy4kX/4h3/g1ltvHdN1hYWFFBcX9z8cjoG3EP/2b//GV77yFe666y4uvvhivv/975Oens5jjz020eGLTB0171rbKZsYmWttO2ohPD3fm4iIxCkxIpJoHbXW1ls64inxoas3zgqSlpKMoJIvxQFrC6w5I9v8hZA733ri0HM2RiUio7Vy5UpKSkq4/vrrefvtt/uP9/X18d5777Fhw4b+Yw6Hgw0bNrBjx44R7xcMBuno6BjyEJk2otGBVhrfFJsvEufxQWo2mFHw60MMEZnelBgRSbRzzBcJReHXNVYbzS1l0/sTmcHtNJSusg4efMbGiETkXEpKSvj+97/Pz3/+c37+859TVlbG+vXr2bNnDwDNzc1EIhGKioqGXFdUVHTGHJLBHnzwQbKzs/sfZWVlCf0+RJKq+QgEO6xK0bPMF5vUDGOgaiS+7LCIyDSlxIhIop0jMfJmg5u2Pgf5qZH+xMF0Ff/+3mtJIVS0EgwH1O2D5uM2RyYiI1m8eDFf/epXufTSS7niiit47LHHuOKKK3jooYfO676bNm3C7/f3P6qr9Ym0TCPxNhpfOTic9sZyPpQYEZEZQokRkUSKRqEz9ompd/jEyPOxoas3lwVJmeb/Ixd5I3hdUbojDj7o8UH+IuuJQ8/aG5iIjMlll13G8eNWQjM/Px+n00lDQ8OQcxoaGiguHn7gNEBqaiper3fIQ2TamOqDV+MGJ0bM6bdinohI3DT/M0zEZu2nINIHjhRIzz/j6c6QwSu11nyRW6bpajSDOQxYnWfNGXm32TXQTnNA7TQiU8nevXspKbGSvW63m0svvZRXX321//loNMqrr77KunXr7ApRxF41u62tb66tYZy37NlgOK3V9doq7I5GRCRhpumYmV70WwAAIABJREFUR5FJovFDa5tZNGwp7a9rUumJGCzICrM8J5zk4OyxOj/Ea/Wp7G5x8eXVy6ykSPMRq50m/wK7wxOZ9rq6uvqrPQAqKirYu3cvubm5lJeXs2nTJk6fPs2Pf/xjAB5++GHmzZvHkiVL6O3t5b//+7957bXXePnll/vvcd999/HFL36R1atXc9lll/Hwww8TCAS46667kv79idiutwOaDlv7OVN08Gqc02UlR9orofrdgcHpIiLTjBIjIonU8IG1HWG+yFMVaQDcPrcXw0hWUPZak29VjOxudmOmpGPMuQIqtsGx3yoxIpIEu3fv5rrrruv/+r777gPgi1/8Ips3b6auro6qqqr+5/v6+vjzP/9zTp8+TXp6OsuXL+d3v/vdkHt89rOfpampiW9/+9vU19ezcuVKXnrppTMGsorMCLXvA6Y1XyQ1y+5ozl/OXCsxUvMOrPis3dGIiCSEEiMiidR4yNoOs1TvsQ4n77e6cBomfzCnJ8mB2Wd5Tgi3w6Q56OBUl5N5i260EiNHX4J199gdnsi0t379esyzzArYvHnzkK+/9a1v8a1vfeuc97333nu59957zzc8kanvdKyNZtalE3rb+qCLgx3pZKVEmJMWpDA1hCMZH6rkzLV+T8fnpoiITENKjIgkUryVJuvMAYRPn7KGrn6spI8Cz8wZaJbqhBU5Id5tcfNui4t5190Ev/0rqNxulR97NIBRRESmsNPWUtbMWn3etzre4eSZ2jzeac+isscz5LlUR5TytCDX5vm5Lq89cQPc4wNYGw5BXwDcGQl6IRER+2j4qkiihIPQfMzazxpaMRKKwrOV8TaamVMtEre6v53GBXkLIHcBRMNw4jWbIxMRETkPpjkwePU8K0Z+ciKN61/O5em6Aip7PDgwuSizm/npPbiMKMGog2OBNP67qphvHFrAa83ZhBPxOUtaDniywYwMJH1ERKYZVYyIJErzMetNhCvNekMxyGt1bpqDDvJTI6wv7rMpQPusyQ/x6JHYyjQAi26CnY/AsZdhyS32BiciIjJeHbXQVW+t5FKyYmAI6xiYJnzvw3Qe/iATgOVZAa7M7eBSXydZKVEAIibUB93s9Wfwy/o8mvpc/FdlCc/X5XFXeQNrJ/SbwqoaqdtnzRmZd/VE311ExHZKjIgkSuOgwasfmaz69CmrWuTTc3pxzcC6rUtjS/ZWdKXQ1BmkYNENA4mRaBQcM/AfRUREpr7T71nboovBnT7myyMm3L83k5+csK79+kUB1qVVnzGg3WnALE8fszx9bCho55UmH7+sz6Ohz80/Hy/jaKiHb6/owueeoBIS31wrMVL7/sTcT0RkktFfHyKJ0hAbvPqRFWkaexy8Xu8G4La5vcmOalLIdpss9lrLE79X2QrlV4A7CwJNetMlIiJTV//g1bHPF4ma8I13vPzkRDoGJn+3spM/WxI456p1qQ6TTxa18e9LT/B7ha0YmDxbmcaG3+by0mn3OL6JYWTPtra1+ybmfiIik4wqRkTGaMuuqnOfBFx7dA+zgIq+bOYNOv5slYeIaXBpXh8XeCMJiXEy2lXROuTrcreLI+Twkx2VtAZCXJV7OeX1r3Dg9ac4sKgAgD9aW25HqCIiIuPTP3h17PNFHj+exq+qPbgMk+9e1sHvlwXHdL3HaXJnWSOX53Two9rZHO9M4Ws7fPxBeQ/3r+rC6zqP6pF4YsRfBd2tkJ47/nuJiExCqhgRSRBfpzV4tSe1oP9YxIQtJ+NDV2dmtUjc4kxr6GxlazcApwuuAWBW0xu2xSQiIjJu0chA1eMYEyMnO538ywFrpsjfruwcc1JksEWZvbywoZU/XhzAgcmzVWlsfCWXd5pc474nrjTInW/tq7JTRKYhVYyIJIAr1ElGbx0A3Z7C/uOv1bmpCjjJdkX5/bKZnRi5KMtKiNS299AXjlJXcBUmBrkdH5LW20jPoH83ERGRSa/pCPR1gTsTChYPe8pHqyfBaqH52yPlBKMGy7ICXGDUsqvi/ELxOOFbywJ8vCTIn72bTVXAyWe3+fjq4m7+fElgfPPNSlZC60mo2wsXfPz8AhQRmWRUMSKSANldxwEIeIqIONP6jz9+zBqm9ofzekib4WnJfHeYPFeIqAnVbd30pubTkr0UgNKmN22OTkREZIzig1dLV4HDOerLft2Qy9FAOmmOCF+bW3fOmSJjcWl+mBc3tHL73B5MDL5/JIPPbs2htnscfwKUrrS2tXsnLkARkUlCiRGRBIi30fizFvYfO+x3sr3JjdMwufOCHrtCm1QuzLSqRk41BwCoLbTaaUrVTiMiIlNN/+DV0bfR1PS4eao2H4AvljWS7w5PeFiZLpN/Wd3J99f5yXJF2dPq4vd+l8vrdWMczFoSS4zUKTEiItOPEiMiCeDrPApAe+ZAYmTzcata5MbSILPSo7bENdnE54xUfWTOSHHzToxoyLa4RERExixeMTLKxEjUhEdPlRAyHaz0drE+z5/A4OCmWUF+/fFWlvpCtPU5uOttH985mEF0tDNZS1ZY2/bYAFYRkWlEiRGRBMjutFpp2mMVI61Bg+cqPQDctVDVInEXZFhzVmraeoiaJm3eCwm6snFFusnzH7I5OhERkVHq64aGD6z92aNbqndXWxbHu9NIc0T46pz6CW2hGUl5ZpRnrmvjCwusDyT+83AG39ydRXg0n9ek+SAnts5enZbtFZHpRYkRkYlmmvi6rFaaeGLkpxVpBKMGS30hVuepEiJuTlovKQ6DnlCElq4+MBw05F4GQFHLLpujExERGaW6fWBGILMYvKXnPD1qws/qrBaaTxa1kpuAFpqReJzw96u6+M7qDpyGybOVaXxtRza9kVFcXKp2GhGZnpQYEZlgacFGUkMdRA0nHRnzCZvwkxPWANa7FvYk5ROhqSLFAaU+69+mus369KohL54Yece2uERERMYk3kYzymqRt1q91PamkumM8ImitgQGNrLPzO3lv9b5cTtMfleXypfe8tEZOseblBINYBWR6WmGr4shMvHig1c70+cQdbrZ1ZZFfY+T/NQIn5w9s5foHU55bjpVrd1Ut3ZzSXkO9XlrASho3wuhHnClneMOIiIiNhvD4NWwCc/EqkVuLm4h3Wnf3LENpX38+Op2vvx2Njub3Nz6SiZ/u7gKt+PMwSMnIlUU+Uv5ONBZsZtf7arij9aWJz9oEZEEUMWIyASLJ0basxZimia/qM8D4PMLekgd/ep9M8bsnKEVI50Zc+lOLcQZ7YNqtdOIiMgUMIbBq9tasmkIuslOCXNTgT3VIoNdXhDiyWvbyXKGOd6dxg8qizFHGMja5r0IgKyeGlyhxA6LFRFJJiVGRCbY4MTIkYZOKns8ZKRE+ZKW6B1WWa61Wk+9v5dQJAqGQUOsaoQKLdsrIiKTXFeTtVILxsAMjhGEogbPxqpFPlXcgsc52iVhEmtpTpg/W1CLA5M3W7N5sTFn2PP63Nl0pc0CINf/YTJDFBFJKCVGRCZYdjwxknkBW480AfD5+T343JPjzc9k40tzkZWaQtSE2nYreVQfmzPCyW02RiYiIjIK8WqR/EXgyT7rqa81Z9Pc5yLHFeL6gvYkBDd6S7K6+cLsRgCeqCnkYEf6sOe1Zl8MQG6HEiMiMn2MKTHy4IMPsmbNGrKysigsLOSWW27hyJEj57zu6aef5sILL8Tj8bBs2TJefPHFcQcsMpkZ0TDZgZMAHAjNoqq1G5cR5W4t0TuiC6qfYbHHKiUOnNzJgqqn8fQ2W0+efg92/H+w+/GhDxERkclilINX+6LwfKy99tbilmHneNhtY2Eb1+T6iWLw8MlSGoOuM85p9cYTIx8kOzwRkYQZU2Jk27Zt3HPPPezcuZNXXnmFUCjEDTfcQCAQGPGa7du3c8cdd3D33Xfz/vvvc8stt3DLLbdw8ODB8w5eZLLJ6q7CGe0j5EzjF6esNxPX5fspTLNvsNpUcEGGlTg6HvAAVqlurzsXMKH1pI2RiYiInEP/fJFLznraizWptIasapGP5U/O+RyGAV+ZU8/89B46Iyk8fLKU6EfyN/HEiK/jsA0RiogkxpgSIy+99BJf+tKXWLJkCStWrGDz5s1UVVXx3nvvjXjN9773PW666Sb+4i/+gosuuoi///u/55JLLuE///M/R7wmGAzS0dEx5CEyFcTbaJo88znW3I3DgN8varE5qslvYaa1Ws+xroEVaPwZc62d5qM2RCQiIjIKpjmqwaumCf991GpNuaGgHdckrBaJcztM/nzBadIcEU50p/Fqs2/I8+3eRQB4A5UQ7LIjRBGRCXdeM0b8fivbnZubO+I5O3bsYMOGDUOO3XjjjezYsWPEax588EGys7P7H2VlZecTpkjSxAev7g+VArCyLIeC1LCdIU0JC9J7MTBpCbloC1lL93RkzLOebD5mY2QiIiJn0XoSetvBmQpFS0c87Z1mFwfbXbiMKBsm2WyR4eS7w9xearW1Pnm6gM7wwJ8Mvan5dKcWYGBCo9ppRGR6GHdiJBqN8o1vfIMrr7ySpUtH/kVQX19PUVHRkGNFRUXU19ePeM2mTZvw+/39j+rq6vGGKZJUvi7rj/hdgWIM4NpFBfYGNEWkOaOUpQUBOB6wqkY64hUjnbUQ7LQpMhERkbOIV4uUrADnmfM44n54zKoWuSbPjzclkozIztuNhW2Up/XSFXHy5Omh72favBdaO3X7bIhMRGTijTsxcs8993Dw4EGefPLJiYwHgNTUVLxe75CHyFQQrxg5YpaxZFY2BVmpNkc0dVyQMbSdJpySAVkl1pMtx+0KS0REZGQ1u63tWdpoKrucvFLrBuAThW3JiGpCOA24q6wBgFebfdS0dfc/158YqT9gR2giIhNuXImRe++9lxdeeIHXX3+d2bNnn/Xc4uJiGhoahhxraGiguLh4PC8tMmk5w91kdtcAcCRaxnpVi4xJfADrsdgAVsBa+hDUTiMiIpPTKFakefx4GiYG1xYFmZ3Wl6TAJsbFWT1clevHxOBX+2qJmtZslLYsJUZEZHoZU2LENE3uvfdennvuOV577TXmzZt3zmvWrVvHq6++OuTYK6+8wrp168YWqcgk5+s6gYFJk+mloHg2pb60c18k/RbGEiMnutMGJuDnLbS2qhgREZHJJtwH9fut/RFWpOkIGTx9ykr4f3lR97DnTHafn91ImiNCdVsPeyqtipf+ipHGDyCiWWoiMvWNKTFyzz338MQTT7BlyxaysrKor6+nvr6enp6e/nPuvPNONm3a1P/117/+dV566SW++93vcvjwYe6//352797NvffeO3Hfhcgk4Gqxlq07Ei1j/eJCm6OZemZ7+vA4IgSjDqp7Yi1IubHka6BRk+9FRGRyaTgAkT5Iy4Gc4T8sfKrCQyDsYLE3zFWFoSQHODFyXBE+ExvE+urhRsLRKF3pswk5MyDcCy2q6hSRqW9MiZFHH30Uv9/P+vXrKSkp6X889dRT/edUVVVRV1fX//UVV1zBli1b+MEPfsCKFSt45plneP755886sFVkKuo9bZWT1nvmU56bbnM0U4/DgAWxOSPHu2PtNO4MyIwNb26rsCkyERGRYcTni8xeA4ZxxtPRqMmPjlvvB/7Xwu7hTpkybixoJ8uTgr8nxL7qdjActHkXW0/W7bc3OBGRCZAylpNN89xrrm/duvWMY7fddhu33XbbWF5KZErp7A0xt/MoOMA9axlTq4N48liQ3suhzgxOBDx8PN9aDpzc+dDVAK0VULzM3gBFRER2P25t98c+GDScA8cGeaPeTU23D68ryqfKe5MY4MRzOUyuuiCf3xysZ9vRZlaV59DmvZDCtj1WO9GKz9odoojIeRlTYkREhvfWsSZuNyoBSClZbnM0U1e8YuRk96D5LDnzoGqHKkZERGRyabN+75MzZ9in/+ek9bvs03N68TiTFZRlV0XrhN/zsrm5bD3SRHNXkA9qO7igfwCrKkZEZOob93K9ImLpDUWoPHWMHKOLCE46shbaHdKUtSDdmldU1Z1KXzRWc5w739r6qyAyNfuzRURkmgl2Qbc1dwNf+RlP13U7eK3OWqL3c/N7znh+Kkp1Obl8fh4AW4820hpvpak/AKOoKhcRmcxUMSJynt6rbGNR1Kpm6MhaQNTptjmiqSvfHSYrJUxnOIWq+ADW9DxIzYJgJ/irBxIlIiIidmmPVYtkFoHrzLliT53yEDEN1ub3cYE3kuTgEmNB1dMUeJxsdyygtr2X2qqTYDigpw3eesgaQguw+i57AxURGQdVjIich6hpsuNkCxfH2mj6l6+TcTEMa84IwImAZ+BgfNp/60mbIhOZPt544w1uvvlmSktLMQyD559//qznP/vss1x//fUUFBTg9XpZt24dv/3tb4ecc//992MYxpDHhRfq56FMY+0jt9GEo/BkhdVG80fTpFokzpsS4WP57QA8W18EWcXWE/7TNkYlInL+lBgROQ9H6jtpDfSxLCWWGMlabHNEU198zsiJ+Mo0MFAl0qo5IyLnKxAIsGLFCh555JFRnf/GG29w/fXX8+KLL/Lee+9x3XXXcfPNN/P+++8POW/JkiXU1dX1P956661EhC8yObSdsra+MxMjr9e7qe9xkuuOctOsYHLjSoJPFrXiNEw+6MqgJbXMOthRY29QIiLnSa00Iudh+wmrv3hlShVEoM17kc0RTX0DFSNpEF/fJ14x0lYBZtSewESmiY0bN7Jx48ZRn//www8P+fqf/umf+MUvfsGvfvUrVq1a1X88JSWF4uLiUd83GAwSDA780djR0THqa0VsZUYHVYzMPePp+NDV2+b2kJrkoavJkO8Oc3Wun60tPl4NzOd2dqliRESmPCVGRMapvqOXE00BvAQoiDQA0OZdNOy5iZgOP13Nz7DKjk/3ugmEDTJSTMieDQ4XhLqhq9HmCEVmtmg0SmdnJ7m5uUOOHzt2jNLSUjweD+vWrePBBx+kvPzMoZRxDz74IA888ECiwxWZeF0NEA6C0w2ZQ5OB1QEH2+qtWWN3zJ/aS/SezScK29ja4uP59gXc7kYVIyIy5amVRmScdpxoAeATBU0AdKXNIuTKtjOkaSHHFSHXFcLE4FBbLHfrcA70caudRsRW3/nOd+jq6uL222/vP7Z27Vo2b97MSy+9xKOPPkpFRQVXX301nZ2dI95n06ZN+P3+/kd1dXUywhc5f/Flen3l1u+nQZ6sSMPE4OrCPuZmTo+hq8OZkx5kUUY3B6JzrQM9bdAXsDUmEZHzocSIyDh094XZW90GwMd8VgVDm1fzRSbK/Fg7zf62QUVt/e00GsAqYpctW7bwwAMP8LOf/YzCwsL+4xs3buS2225j+fLl3Hjjjbz44ou0t7fzs5/9bMR7paam4vV6hzxEpoR4G81H5otETHjmlDUf645pNnR1OBsK2ukkndPEfhZ0qJ1GRKYutdKIjMPuU22EIiYl2R4uiJwAoC1LKzBMlAUZvez2Z7G/zQXE3lxqAKuIrZ588km+/OUv8/TTT7Nhw4aznuvz+Vi0aBHHjx9PUnQiSRQfvJozZ0ir7Pv+DBp6nWQ5w2QH69g1zX9drcvp5InTUfZF5jLL2WjNGckfvqVYRGSyU8WIyBiZpsm7p6w3Quvm55HTeQTQUr0TafiKkbmAAd3N0NlgS1wiM9VPf/pT7rrrLn7605/ye7/3e+c8v6urixMnTlBSUpKE6ESSKNgJnfXW/kcqRra2WO20V+V1kDID3mG7HSZ/MKeXQ/F2Gs0ZEZEpbAb82BaZWNVtPbQE+nA5DVaUpJHdZbV2aEWaibMgNoD1VFcK/j7DOuhKg6zYH1nVO22KTGTq6+rqYu/evezduxeAiooK9u7dS1VVFWDN/rjzzjv7z9+yZQt33nkn3/3ud1m7di319fXU19fj9/v7z/nmN7/Jtm3bOHXqFNu3b+fWW2/F6XRyxx13JPebE0m003sAE9JywDMwV6wr7GB3eyYA6/P8I1w8/Xxufg+HTCtBFGpXK42ITF1KjIiM0ftV1myRJaXZFPZW4DDDBF3ZdHuKbI5s+shKiVLotpbqPTC4aiQ3NmekSokRkfHavXs3q1at6l9q97777mPVqlV8+9vfBqCurq4/SQLwgx/8gHA4zD333ENJSUn/4+tf/3r/OTU1Ndxxxx0sXryY22+/nby8PHbu3ElBQUFyvzmRRKt+x9p+ZJnet1q9hE0Hc9N6mZsePPO6aWqhN4IrexYAzkADRPpsjkhEZHw0Y0RkDILhCPtrrE+CVpX7yOnYDcTaaAzDztCmnQUZvTT2udnf5uKqopB1MGceVL4NNe/aG5zIFLZ+/XpM0xzx+c2bNw/5euvWree855NPPnmeUYlMEdW7rG18IHjM1hYfAOvzZ061SNzvLUylaV82BYafiL8W57kvERGZdFQxIjIGrx9upCcUwetJYUFBJjmdHwKaL5IIC4abMxLv567bD2F9KiUiIkkUjUJNrGIkdyAxUtmdSkW3B6dhcmVuh03B2eemWUGOYv1+PlZdb3M0IiLjo8SIyBj8fI/VP7uyLAeHYZDTERu8mqWleifa/IxYYqTVNXAwIx9c6RAJQsNBmyITEZEZqfkI9PrB6Yas0v7D8aGrq7M78aZE7IrONh4n4J0NQGNjnb3BiIiMkxIjIqPUGujj9cONgNVGgxkdSIxo8OqEm5/ei4FJbY+Tpt5Ym5JhgK/c2j/9nn3BiYjIzBNvo/HNAYfVMBKOwputXmBmttHEzZ1VDEB2TzXt3aroFJGpRzNGREbpV/tqCUdNZvnSKPJ6yAxU4YoECDtS6ciYa3d4006aM8r8rAgnOlM42ObiupLYGy1fOTQdjiVGvmJrjCIiMoMMM3h1jz+TznAKOa4QK7wBe+Ky0a6KVgBSw2nMAhYb1fzl8/u4bMHIA+n/aG15kqITERk9VYyIjNKze2qAWLUIkNNxGAB/1kJMh3KMibAsJwx8ZGWa+JwRVYyIiEgyxVdEGzR49Y1Wq43mqtwOnDN4BnvQnUuvkYrHCNFaqVZXEZl6lBgRGYXjjZ3sq/GT4jBYPjuWGOm0EiNtXs0XSZRlOdZqNPvbBs0ZiSdGmo9CT7sNUYmIyIwTaIbWE9Z+rGLE32fwvj8DgGvyZt7Q1SEMgx6PVSWS13mEps6Zs2SxiEwPSoyIjMIv91nDxK5dVEBmqlW9kNdufSLS6r3Ytrimu2U+q2LkYPugipHUzIHkSO37NkQlIiIzTryNpuBCcKcD8JvTqYRNB+VpvZSnKREQTLPmjCxxnOL96jaboxERGRslRkRG4eVD1vJzG5eVWAfMKHl+KzHSkr3MrrCmvSU5YQxM6nucNPYO+nE161Jre3q3PYGJiMjMUh1roym7rP/Q81UegBm5RO9wAp5YYsSoZG9VO1HTtDkiEZHR02AEkXOoaunmcH0nTofBhosKefFAPd7AKdzhTsIOD+1ZC+0OcdrKSDG5wBvhWEcKB9tS+Fh8AOvs1XDoWTi9x94ARURk2tiyq2rE5zZ88CaFwM7QBRgVrbT0pbCrqQCAK3OUGAHoHlQx4u8JUtEcYEFBps1RiYiMjipGRM7ht7FqkbXzcvGluwHIaz8AQGv2xRq8mmDLfPE5I4P+neMVIzW7QZ9IiYhIAjmiof4q0SbfSgDebvViYnBhZjcFqWE7w5s0elILiBopeI1u5hgNvF+lOWAiMnUoMSJyDi9/YCVGbrh4YOm5PL+VGGnxqY0m0eIr0xwcPIC1ZAUYTgg0gr/GpshERGQmyPF/gDPaR6/LR2fGXMBKjIC1Go1YTMNJIDaAdblRwcFaP33hqM1RiYiMjhIjImfR1Blkd6U1QOyGJcX9x/Pb9wPQrPkiCRdPjAypGHGlQdESa19zRkREJIEK2qxB3805K8EwqOlxc6rHgxOTy9VGM0QgrRSA1amV9IWjHKr12xyRiMjoKDEicha/+7AB04Tls7Mp9aUB4Iz04Os8CkCLb4Wd4c0IF/tCODBp7HXS0DPoR9bs1db29Hv2BCYiIjNCYZv1e6Yxx2rjfCtWLbIyu4usFFVEDBbwWEPqL3NXArCvRu00IjI1aDiCyFnEV6MZ3EaT6/8QhxmhO7WAbk/RSJfKBElPgYXeCEc6UjjQlkJRWmwA66xLYfdjUKPEiIiInL8FVU+fedA0KW6xVqRx97Uxv/JpHmqdD6iNZjjxipH54RMYRDne2EVXMExmqv7kEJHJTRUjIiPo7A3x9vEWAG4c1EYzZL6IYdgS20yzNCc+gHXQnJFZsYqRur0Q0eA7ERGZeGnBRlIivUQMF91pJRwNpNHU58bjiHCpr8vu8CadntR8wg4P7kiAy7PbiZqwX1UjIjIFKDEiMoKtR5roi0SZn5/BBYUDy83lxeaLtGi+SNIs7x/AOugTp/yF4M6CUDc0fWhTZCIiMp1ldVtL+Halz8Y0nGxvzQJgja+LVIdWRTuD4aDNeyEAN+bUArCvWokREZn8lBgRGUF8md4blhRjDKoMyY8t1dvsW25LXDPRspyBJXv7V+d1OGHWKmtfc0ZERCQBvAErMdKZXk7UhF3tVmJknYaujqg12xqOfknKKRwGVLf10NwVtDkqEZGzU2JEZBjBcIStR5oAuGHJoDkinfVk9NZhYvT/4pfEu9gXxmmYNAedNPQO+rE1yxqEp8SIiIhMONPsrxjpyJjD0UAabSEXaY4Iy73dNgc3ebVmXwxAceAwCwqsiltVjYjIZKfEiMgw3q1ooysYpiArlZWzfQNP1FhLw/ozFxBOybApupnH44SF3mGW7S2NVYzU7rUhKhERmc5SQ224w51EDQddabPY2WZVi6z2deFSG82IWrzWB0c5HR+yarb1b7a3uh3T1L+ZiExeGhEtMoytRxoBWL+oAIdj0IDV01ZipC8la/jp9ZIwy3LCHPa7ONjm4ob4wXhipPEDCPWCy2NXeCIiMs1kxdpoAp5SIoaLXbHEyOU5nXar0b8HAAAgAElEQVSGNel1Zs4l5EzDFenhcm8rzzkNWgJ9nG7vYXZOut3hiYgMSxUjIsPYdtRqo7l2ccHQJ2IVI11ps5Id0owXH8A6pGIkuwzS8yAahoZDNkUmIiLTUbyNpjNjDscCabT2t9EEbI5scjMNJ23eiwAo7j7CRSVewKoaERGZrJQYEfmI0+09HGvswmHA1RcMSoxEI1D7PgBd6UqMJFt8AOuBNtdAOa5hDGqn2WNTZCIiMh15uysB6Egv72+judTXhVttNOcUnzOS5z/EyjKrJXl/jZ9IVP92IjI5KTEi8hHbYkNXV5XnkJ3uGnii6Qj0dRFxuOhJLRjhakmUC7PDpBgmLUEHtf7egSc0Z0RERCaYK9SJp68NE+hIK1MbzRi1eq3ESK7/EAsLs0h3O+kKhjnR1GVzZCIiw1NiROQjth0dmC8yRGy+SMBTCob+6ySbxwmLs612mgM1g8px44mROiVGRERkYsTbaLo9xRzp9dEScuFxRFihNppRia/cl9NxmBTCLJ+dDWh1GhGZvPTXncggfeEobx9vAYaZL1K5A4Cu9NnJDkti4nNG9tX4Bw6WrLS2jR9Cn5ZPFBGR8+cNnAKgI30OO9usGRmXZquNZrQ6MubSl5JFSrQXX+ex/hX+DtV20N0Xtjk6EZEzaVUakUH2VFnL9OZluFlamj30yVNvAdYve7HH8pwQP61I48AHH0K+lajCNCE1C4KdsO2fIWfemReuviu5gYqIyJTWnxjJmMuuSrXRjJnhoMW3jJLm7eS1H6Cs/CJyM9y0Bvp45YMGPrVSs9pEZHJRxYjIIFtj80Wu+egyvW2V4K8CRwqdaWU2RSfLBq1ME5+/imFYq9MAtFfbE5iIiEwbrlAHaX0tmBjsYxHNfS5SHVFWZquNZiyafcsByPfvxzCM/iGsz71/2s6wRESGpcSIyCDxZXrXf7SNJlYtQuklRJ3uJEclcYuzw7gdJh0hB5UB58AT8cSIX4kRERE5P/FqkYCnhLc7CgG4RG00Y9aSvQyAvPb9AP3tNG8ea6apM2hbXCIiw1ErjcxoW3ZV9e939IT4sK4DA2joCA557vL9LzEfOORenvwgpZ/LARf7wuxtdbG/LYW5mRHrCV+5tVViREREztNAG80c3mnOBGCNT200YxWvGMkOnMIV8pOflc3snDRq2np4YX8td105TOuriIhNVDEiEnOs0XrTMysnjczUoTnDwlZrRZqG3DVJj0uGWp4TAmB/66CllLNjA3E7GyCsT6FERGT84omRk66F1AVTSTGirFIbzZj1uX10plsfXOS3HwTob6d5Xu00IjLJKDEiEnOkoQuARUVZQ45ndJ8ms6eWqJFCc85KO0KTQZYPmjPSz5MNqdmACR16syUiIuOT2teGJ9ROFAcvB60lZ5dmdZPujNoc2dQUrxqJt9Msn+3D6TDYV+PnZFOXnaGJiAyhxIgIEDVNTjTGEiOFmUOeK2x9F4CW7CWEU9KTHpsMFa8YOdSeQmRwu7cvPoC16syLROT/Z+/Oo+Mqz3zff3eVapBKUmmebNnyPM8GYzOZxMEQOgkJSUPn5JD4NOSGddx3Je67WMv39iK3OX2be3IToPscspyThABJ04E0BDJhMAYz2dh4EHi2JdmWNc8qjSVV1b5/7FLJwhqNVCWpfp+1akne+92lp7IUqvTs93meiHfffZcvfelLFBQUYBgGr7zyyojX7Nu3j7Vr1+JyuZg/fz7PPPPMVWueeuopioqKcLvdbNiwgUOHDk1A9CITK9JfJLGAD1qzAJXRfBaRBqwtHwOQ7ErglgXW/66vFFfFLC4RkU8bc2JkrB+o9u3bh2EYVz1qamquOWiR8VbZ3EVXbxC3w8aM9IHJj9xwYqROZTSTwrzUIEn2EB0BG2VtasAqMlYdHR2sWrWKp556alTrL1y4wF133cVtt91GcXEx3//+93nggQd4/fXXI2teeOEFduzYwQ9/+EOOHj3KqlWr2Lp1K3V1dRP1MkQmRF9ipNY9l9LORAxM1qdpZ8O1auzbMdJ6nL5xcnevsUb1vnKsEtNUQ1sRmRzGnBgZ6weqPmfPnqW6ujryyMnJGeuPFpkwJeHtnHOzkrFfOaaXK/qLZCoxMhnYDVgeKae5os9Imkb2iozGnXfeyT/90z/x1a9+dVTrd+3axZw5c/jJT37CkiVL2L59O1//+td54oknImsef/xxHnzwQbZt28bSpUvZtWsXSUlJPP300xP1MkTGn2lGEiP7Q0sBWOjpIs0RjGFQU1tLykICNheuXh8pnZcAuH1pHh6nnfKmTo5cao5xhCIiljFPpbnzzju58847x/yDcnJySEtLG9Vav9+P39/fQNHn843554mMRUm4jGb+p8poPJ0Vkf4i9WnqLxJtBy80DXo825YAZLDnYoCZIWtNQiCFdQAd9dDbDQ531OIUmc4OHDjAli1bBhzbunUr3//+9wHo6enhyJEj7Ny5M3LeZrOxZcsWDhw4MOTz6r1eJht3TxPOQBshw84rHdao2eu0W+QzCdkcNKcuIbulmMyW47R5ikh02rljeT4vHa3gpaOVrC/KiHWYIiLR6zGyevVq8vPz+cIXvsAHH3ww7NrHHnsMr9cbeRQWFkYpSolH/kCQ8sZOABZ8KjGSG+kvspyg+otMGnM93QCUdiZGjgUSPPgdfQ1YK2IUmcj0U1NTQ25u7oBjubm5+Hw+urq6aGhoIBgMDrpmuLJZvdfLZNO3W6TVPZPidutm3nXp6i/yWX26zwjAPeuscpo/fVJFd6925IhI7E14YiQ/P59du3bx0ksv8dJLL1FYWMjmzZs5evTokNfs3LmT1tbWyOPyZW2Nl4lzsaGDoGmSnuQgw+MccE5lNJPT3KQuAC52ughcUZ7c4c63vlEDVpFJT+/1Mtl4O8oAOGlfRAiDWYnd5Ll6YxzV1Nc/meZ45NgNczKZkZZIW3eAPadqYxWaiEjEmEtpxmrRokUsWrQo8u9NmzZRWlrKE088wa9//etBr3G5XLhcrokOTQQYWEZjGFf0FzFNchv7Gq+uj0VoMoQ8Vy9J9iCdQTsVXS6Kkqzt+B2J+WS0nVEDVpFxlJeXR23twD9camtrSU1NJTExEbvdjt1uH3RNXl7ekM+r93qZVEJBUtsvAPCXnjWAymjGS18D1vS2c9iD1o0Nm83gq2tm8D/fLuHloxV8aVVBLEMUEYnNuN7rr7+ekpKSWPxokaucjyRGUgYc93RV4umuVn+RSchmwNykvnKa/l4iHYnhD1atKqURGS8bN25k7969A47t2bOHjRs3AuB0Olm3bt2ANaFQiL1790bWiEx6VcdICHUTsLn4fZvVeFVjesdHpzuPDncuNjNAZsuJyPGvrbXKad4930BdW3eswhMRAWKUGCkuLiY/Pz8WP1pkAF93L3VtfgxgXpZnwLncxkOA+otMVpHESEd/n5FIKU1HPfR2xiIskUmvvb2d4uJiiouLAWscb3FxMeXlVgnazp07uf/++yPrv/e971FWVsbDDz/MmTNn+OlPf8qLL77ID37wg8iaHTt28POf/5xnn32W06dP89BDD9HR0cG2bdui++JErlXp2wBcci6gy3SQ7eylKNE/wkUyKoZBQ7q1Cye7ub+Ufm52MmtmpREMmbx6rCpW0YmIANdQStPe3j5gt0ffB6qMjAxmzZrFzp07qays5LnnngPgySefZM6cOSxbtozu7m5+8Ytf8NZbb/HGG2+M36sQuUal4d0iBWmJJLkG/t+hoP59AKqzNkU9LhnZfI+1Hbeko3/HSCAhCRIzoKvJ2jWStTBW4YlMWocPH+a2226L/HvHjh0AfPvb3+aZZ56huro6kiQBmDNnDn/+85/5wQ9+wL/8y78wc+ZMfvGLX7B169bImnvvvZf6+noeeeQRampqWL16Nbt3776qIavIpFVmJUbeDy0HYH1aG1dW18pnU5++htnVu8luPjbg+D1rZ3KsvIWXjlbw4C1zYxSdiMg1JEbG+oGqp6eHv//7v6eyspKkpCRWrlzJm2++OeA5RGJlqDG9RqiXvEZrzGRV9s1Rj0tGtiA8maa8y0V30MBtD3dhTStUYkRkGJs3b8Y0zSHPP/PMM4Nec+zYsasXX2H79u1s3779s4YnEn3+Nrh8EIDfdq4DYL1X/UXGU136WiA8mSYUBJsdgC+tLODRP57iTE0bJ6taWVbgjWWYIhLHxpwYGesHqocffpiHH354zIGJTDTTNCmpHzwxkt1cjDPQTrczgybv0liEJyPIcAbIcPTS1OugrNPN0hRrBwneQqj+WJNpRERkdC5+AKEAvoQMTnfPwGMPsjhF5ZjjqTVlAb12D85AO9SdgrwVAHiTHGxZmsNfjtfw0pFKJUZEJGZi0mNEZDI4V9tOW3cAh91gdsbAHiIF9e8BUJ11Ixj6v8lkNT+8a6Tkij4jeAutr5pMIyIioxEuo/nEtgSAtd52ElRGM65Mw05D+irrH+UfDjh3z9qZALxaXElvMBTt0EREACVGJI69d74egDlZHhLsA/+vkN9g9Repyr4p6nHJ6A3WZySSGOlshJ6OGEQlIiJTSulbAPzRbzUIXa8xvROiPtyA9dOJkVsWZpOV7KKxo4e3z9TFIDIRESVGJI69X9IAwPzsgWU0SV01pLedJ4RNjVcnuQWRxMgVO0acSZCUZX2vsb0iIjKc1kpoOIdp2HjNvwqHEWJVqpLqE2GoxIjDbuOe8OjeFw/rfVtEYkOJEYlL/kCQD8saAZifkzLgXN9ukca0FfQ406Iem4ze3KRuDEwaex009VzRMilN5TQiIjIK4TKa2uSl+PCwPKWTRLvKOSZCg3cFIcMOvgpoGfj+/I31VjnN22frqGvrjkV4IhLnlBiRuHTkUjPdvSFSXAnkproGnOvrL6JpNJOf225SmOgHhiinaVFiREREhlGyF4B3Av1jemViBBOSaE61+rj0TQHqMz8nhbWz0giGTH5/tDIG0YlIvBvzVBqR6eC981YZzWpPI/Mv/0fkuBEKUlBv7RixBbuZV/67mMQnozff0015l5uSjkSuTw/XhasBq4iIjCQYiPQXeaFlMQam+otMsPr01WS2noDyA7Di6wPO/fX6Qo6Wt/DC4ct895a5GIY64IpI9GjHiMSl98OJkU/XEad0lmMP9dCT4KHTnR+L0GSM+hqwnh+wY8TakktXE/ToQ66IiAyi8gh0t+B3pPKxOY/5nm7SHMFYRzWt1aevtb4pP3jVub9aVUCiw05ZfQdHy5ujHJmIxDslRiTuNHX0cKKqFYAVn0qMeNtLAGhNng+6UzElLAiP7C3rdBMywwcdieDJtr5XOY2IiAymZA8AxY41BLFzncpoJlykAWvtCehqGXAu2ZXAXSutm1IvfqQmrCISXUqMSNz5oKQB04TFeSlX3RlKCydGWpLnxyI0uQYz3X7ctiDdITsV3c7+E5FyGn24EhGRQZS8CcDLPqvvhcpoJl63Kwsy5gHmVX1GwCqnAfjTJ1V0+ANRjk5E4pkSIxJ33jtfD8DNC7IGHHf2tJDkr8fEoDV5bixCk2tgM6zpNPCpsb2aTCMiIkNpr4eqYwC8FVjB3GwPM9w9MQ4qTszeZH29+P5Vp64rSqcoM4mOniB/OV4d5cBEJJ4pMSJxxTTNSH+RmxdkDziX3nYOgLakmQTtiVddK5NXXznNgMSId5b1taU8BhGJiMikVmpNo7nsmk896WxdlhfjgOJI0U3W10sfXHXKMAy+Ed418uJh3dgQkejRVBqJK6X1HVS1duNMsHH9nAw+/rj/XHrbGQCaUxbHKDq5VgMbsIbv+HlnAAZ0t1h3BpOzh7xeRETizHmrv8hr3daY3juW5dH9YSwDmj5GnOiXF+7hVlUM/jZwpQw4/fV1M/nJG2f56GIzpfXtzMtOnqBIRUT6aceIxJX3w2U01xdl4HbYI8ftgS5SOy4B0Jy6KCaxybWbH94xcrnLRUcg/IErwd2fDAlvlxYRESEUjOwY2dOzknyvm5UzvTEOKo4kpkNiBpjBQfuM5Ka6uW1RDgAvfqRdIyISHUqMSFx5L1xGc9On+oukt5/DwKTTlYPfmRGL0OQzyHAGyHT0YmLwSdMVG+H6ymkqj8QmMBERmXyqjkFXM122ZI6aC9i6LA9Dk+iiK3Oe9fXS/kFP33udVU7z0tEKeoOhaEUlInFMpTQSN3oCIT4sawSubrya7jsLQFOqymimqgXJXTQ2Ozja6GBjTq91MH02VB5WYkRERPqFy2g+CC0jiJ3bl+XGOKD4cvBCE9mhPOYCdSfe4s3k71y1JhgySXEl0NDew//9h5P8P19dEfU4RSS+aMeIxI1j5c109ATJ9DhZkpcaOW4L9eINj+ltTlEZzVS1KNxn5HCjo/9g2mzra+URMM0YRCUiIpPO+TcAeKN3JelJDq4v0k7RaPN5rPfnzJbj2INdV5232wzWzEoH4PDF5qjGJiLxSYkRiRvvnLP6i9y0IAubrX/LrLe9DLsZwO/w0ulWV/qpalGy9cHqSKODUF8OJKUAbHboaoLmC7ELTkREJof2Oqg6CsC+4Gq2LMklwa6Pw9Hmd6TT6crBbgbIavlk0DXri6zEyLnaNqpark6eiIiMJ70TSNx4+6yVGOlr6NWnbxpNU8piUI3xlFWU1I3LFsLXa+O8L9xY154AqTOt7yuPxi44ERGZHEreBOCsMYc60rljuW6IxIRhUJexHoCcpsODLslKdjEny4MJ/MeRiigGJyLxSIkRiQs1rd2crvZhGHDLwivGtpoh0trOAZpGM9XZDVgwaDlNuAFrxeAfvEREJI6cex2A13tX4XHauXF+1ggXyESpy1gHDJ0YAVg/29o18uLhy4RCKokVkYmjxIjEhXfO1QGwujCNDI8zcjylsxxHsIteeyJtSbNiFZ6Mk0g5TcMQfUZERCR+BXuh9G0A3g6uYfPiHNwOe4yDil99O0ayWj7BFvQPumZZgRe3w0ZFcxf7SxujGZ6IxBlNpZG48PYZq4xm88JPldGEp9G0pCwEQ3nCqW5hZMdIf/Irkhip/hgCPZDgHORKERGZ9i4fBH8rLaTysTmPbctURhNL2Y2H6Unw4Ax0sPLcv9LmKRp03aqZmzh4oYnfflTOTQu0w0dEJob+EpRprycQ4v2SBgBuW3xlGY1JRri/SHOKxvROBwuTuzAwKe+wU9cV/s+bJwvcaRD0Q93J2AYoIiKxEy6jeSu4koSEBG5blD3CBTKhDIO2pCIAUjsuDrlsfXhq0Bsna2np7IlCYCISj5QYkWnvyKVm2v0BspKdLC/w9p+o/hhXbytBI4HW5LmxC1DGTZI9xGJvALiiz4hhwAyrjlnlNCIicez8HgDeDq5m88JsUtyOES6QieYL7xIZLjFS4HWzJD+VnmCIV4urohOYiMQdJUZk2tt31uovcsvC7AFjejn9BwBak+cTsunD0XSxPqsXgMNX9hnpS4xUKDEiIhKXWsqh/jRBbLwTWsldK/NjHZHQnxhJ7qrECPUOusYwDP56vTVh7ndHLkcrNBGJM+oxItPe2+HEyIAxvaYJp6zESFPqkliEJRNkfWYvvy6FI42DJEa0Y0REJD6dfwOAI6EF+BNS2bIkN8YBCUC3M4OehBScgTZSOi/jG2IHbzBoYrcZnKj08ePXz1KQljjic39zg5rqi8joaceITGuVLV2cq23HZsAtC66oJa4/A43nCRl2q/GqTBvrMq07TidaEugMhA/2JUYazkF3a2wCExGR2DlnJUbeDq7hc4tz8Lh0b3BSMIxRldMkuRJYkpcCwJHy5igEJiLxRu8KMq31ldGsnZWON+mKHQTh3SKtnrkE7a5YhCYTZEZSiLzEIDVddoqbHGzK6YXkbEibZW2lrjoGczfHOkwREYmWgz/DLH0LA3g7tJq/Sz4Lhz+JdVQS5vMUkdV6fNjECMC62RmcqPJRXN7CncvySLDr/q6IjB/9F0Wmtb4xvbctHjimt6+/iMpoph/DsMppQOU0IiICNJRghHqpMjO4ZJvJbXn+WEckV+jbMeLpqsIWHHrqzILcZFLdCXT1Bjld0xal6EQkXigxItOWPxBkf6k1pnfzlSP5Gkuh9gSojGba6mvA+tGABqzrra9qwCoiEl/qTgFWGc3n83tI0n7pScXvTMfv8GIjREpX+ZDrbIbB2lnpABy51BSt8EQkTigxItPW/pJGOnuC5Ka6WJqf2n8ivFuEOTcTSEiKTXAyofp2jBxrdBA0wwcjO0YOW813RURk+jNNzHBi5K3Qav6qULtFJqPR9BkBWDfbSoycr22ntWvwKTYiItdCiRGZtl4/WQPA7UvzMIwrxvSG+4uw5MsxiEqiYbE3QEpCiLaAjVMt4VuD+avAsEN7LfgqYxugiIhER/1ZjK4m/KaDj21L2KwymklptImRzGQXRZlJmMAxNWEVkXGkxIhMS8GQyZ5TtQBsXZbXf6LlMlQdBQxY/FexCU4mXIINrs+27iQdqAuX0ziTIG+59f3lgzGKTGTyeOqppygqKsLtdrNhwwYOHTo05NrNmzdjGMZVj7vuuiuy5jvf+c5V5++4445ovBSRoZ1/HYAPQ0u4qcCG2x7jeGRQ/X1GqrEHu4dd27dr5Gh5C6Z2gIrIOFFiRKalI5eaaezowZvoYMPcjP4TZ/5kfZ21EVJyYxOcRMXGbKuB2/56Z//BWRutr+UfxiAikcnjhRdeYMeOHfzwhz/k6NGjrFq1iq1bt1JXVzfo+pdffpnq6urI48SJE9jtdr7xjW8MWHfHHXcMWPfv//7v0Xg5IkMyz1mJkbdCa7hr5vB/cEvs9Di8dDszMDBJ6Ry6zwjAsgIvDrtBQ7ufypauKEUoItOdEiMyLfWV0Xx+cQ6OK8e59ZXRLFUZzXS3Mae/AWtvMGQdnHWD9bX8QIyiEpkcHn/8cR588EG2bdvG0qVL2bVrF0lJSTz99NODrs/IyCAvLy/y2LNnD0lJSVclRlwu14B16enp0Xg5IoPraokkwj+yreKW3KEnnkjstXrmAJDafmHYdW6HnSXh3nHHLrdMeFwiEh+UGJFpxzTN/v4iV5bRtNX2/0G85EsxiEyiaYk3QJozREfAxvHKVutgYTgxUnsSun2xC04khnp6ejhy5AhbtmyJHLPZbGzZsoUDB0aXNPzlL3/Jfffdh8fjGXB837595OTksGjRIh566CEaGxuHfA6/34/P5xvwEBlXZW9jmEFKQ/msKUzFpTKaSc0XTox4O4ZPjACsKUwD4JPLLQRDKqcRkc9OiRGZdk5V+6ho7sLtsHHrwivG9J79M2Ba00m8M2MWn0SHzYAbwuU0B0rDf5yl5kPabDBDUPFRDKMTiZ2GhgaCwSC5uQPLCXNzc6mpqRnx+kOHDnHixAkeeOCBAcfvuOMOnnvuOfbu3ct//+//nXfeeYc777yTYDA46PM89thjeL3eyKOwsPDaX5TIIAJndgNWGc3XZqmMZrLzeYowgSR/HY7e9mHXzs9JweO009ETpKRu+LUiIqOhxIhMO6+ftJqu3rIgm0TnFbeHNI0m7mzsa8BaesVda/UZEflMfvnLX7JixQquv/76Acfvu+8+vvzlL7NixQruvvtu/vSnP/HRRx+xb9++QZ9n586dtLa2Rh6XL1+OQvQSN0IhAuf2AHDKuYK1mYEYByQjCSQk0em2dvqmjrBrxG4zWDnT2jVy7LKm04jIZ6fEiEw7b4TLaAZMo+lsgovvWd+rjCZu9DVg/ehiE/5A+K61+oxInMvKysJut1NbWzvgeG1tLXl5eUNcZeno6OC3v/0tf/u3fzviz5k7dy5ZWVmUlJQMet7lcpGamjrgITJuaj7G7W+k3XRTNKsIw4h1QDIakT4joyinWR0upzld7cPfO/jONBGR0VJiRKaN5w+W8z/2nudMTRs2A5o7e3j+YDnPHyznwGv/BqEAzSkLeL7EETku09uC1CBZrhD+QIji8nCDtr4dIxWHIdgbu+BEYsTpdLJu3Tr27t0bORYKhdi7dy8bN24c9trf/e53+P1+vvWtb434cyoqKmhsbCQ/P/8zxywyVu0nXgNgf2gZdxdpt8hU4Uu+os/ICKN4Z6YnkpXspDdocrJaPYpE5LNJiHUAIuPpVPiNcU6WhyRn/693Ye2bAFzO/UJM4pLYMMJ9Rv5U4eZAWSMb5mZC1kJITIeuZqj5xOo5IxJnduzYwbe//W3Wr1/P9ddfz5NPPklHRwfbtm0D4P7772fGjBk89thjA6775S9/yd13301mZuaA4+3t7fzjP/4j99xzD3l5eZSWlvLwww8zf/58tm7dGrXXJXHm8K+GPNV+9D9IBsoSl3N7snYTTBVtSbMIGXZcva24eprxuzKGXGsYBqsL03jzdB3F5S2snaUpWCJy7bRjRKaVk1VWYmRpgTdyLCHQQX7DfgAu530+JnFJ7GzKscpp9vf1GbHZoHCD9b36jEicuvfee/nxj3/MI488wurVqykuLmb37t2Rhqzl5eVUV1cPuObs2bO8//77g5bR2O12PvnkE7785S+zcOFC/vZv/5Z169bx3nvv4XK5ovKaRCJ6OsjuLgMgZ9aiGAcjYxGyOWlPtBrkezvKRly/utBKhpTWt+Pr0i5QEbl22jEi00ZzRw/lTZ0YwLL8/lr1gvr3sId68CXNpjV5QewClJjoa8BaXN5Cd28Qt8Nu9Rk5t9vqM7Lxv8Y4QpHY2L59O9u3bx/03GANUxctWoQ5xNb2xMREXn/99fEMT+SaVVw6z0xMzoVm8rm5HkDjXKeSVs8cUjsvkdpxgbqM9cOuzfA4mZ2RxKWmTj6uaOHmBdnDrhcRGYp2jMi08XGF1UNiTraH1ERH5HhhTbiMJu/zqPta/ClKDpLvddMTDHHkUrhz/ZWTaUaoYRYRkamlqeIsABeTlpPm1H/jp5q+PiOpHRdH9R69KtyE9Xhl60SGJSLTnHaMyLRgmibFl63EyDGsZGUAACAASURBVO1JJcwrPwKAEQows+6t8BqDeeW/i1mMEhuGARvnZvLysUr2lzZw4/wsKFgDdhd01ENTGWTOi3WYIiIyDnqDIQraT4EBaTNVRjMVtSfOIGhz4gh2kdRdPeL6ZQWp/PHjKiqau2jq6CHD44xClCIy3WjHiEwLp6vbqGvzk2CEuD6tLXLc216KPdSLPyGVjsSCGEYosbRxntUo8oOScJ+RBBfMWGt9rz4jIiLTxuELdWQZrXSYblbPL4x1OHItDBs+TxEA3vaR+4ykuB3MyfYAcEK7RkTkGikxItPCqx9XArDW24EnIRQ5ntF2BoDm1MUqo4ljtyy0ao4/rmihqcNqxsqsG6yv5QdiFJWIiIy3movnAKhIWowzQRujp6pWj7WTM629dFTrV8ywmu6rnEZErtWYEyPvvvsuX/rSlygoKMAwDF555ZURr9m3bx9r167F5XIxf/58nnnmmWuJVWRQoZDJH4urALgpo/8N0TCDpLdZdcZNqYtjEptMDrmpbpbkp2Ka8O65euvglX1GRERkyqvtslHYeQKA9Bkqo5nKWpKtxEhy12USAh0jrl9W4MUAKlu6aGz3T3B0IjIdjTkx0tHRwapVq3jqqadGtf7ChQvcdddd3HbbbRQXF/P973+fBx54QN3rZdwcuthEVWs3boeNNd7+N8+UjkskBLvptSfRljQrhhHKZHDbImvXyL6zddaBwuutr43nob0uRlGJiMh4+UNZiNVGCaAxvVOd35VBtyMdmxkit/HQiOuTXQnMy04GVE4jItdmzHsM77zzTu68885Rr9+1axdz5szhJz/5CQBLlizh/fff54knnmDr1q2DXuP3+/H7+7O9Pp9vrGFKHHk1vFtkWYEXp62/e3nfbpHmlEVgqGos3m1elMNP95Xyzrl6giETe2I65K2AmuNw4V1Y8fVYhygiIoN4/mD5oMfnlTdFvjdNKC1rJMEI0WDPobQWoGnQ62RqaE2eh7v5MPkNH1CZe9uI61fM8FJS387xylZuXZQThQhFZDqZ8L8WDxw4wJYtWwYc27p1KwcODF3X/9hjj+H1eiOPwkI1z5LB9QRC/OW41bF81cy0/hOmSYavr7+I7hoJrJ2VRoo7gebO3shoZ+Zutr6W7YtRVCIiMh5OtSexMngagO7UOTGORsZDa7icJr9h/6jWLy1IxWZAVWs3DSqnEZExmvDESE1NDbm5uQOO5ebm4vP56OrqGvSanTt30traGnlcvnx5osOUKWrf2Tpau3rJSXExN9yRHMDTVYUz0EbQ5qTVMzeGEcpkkWC3ccuCvnKacJ+ROZutr2XvWLcbRURkSnq7PpVb7J8A0J6i9/3pwOcpIoSNlM7LJHeM/LeAR+U0IvIZTMr6ApfLRWpq6oCHyGBePmpNo/nSqgJsV0ydyWiz7hq1JM/HtKkrvVg2f7rPyOyNYHNAazk0X4hhZCIicq06AjZqW9uZaTQQxE6bZ3asQ5JxELS7aE+aCUB+wwejukbTaUTkWk14YiQvL4/a2toBx2pra0lNTSUxMXGif7xMY/Vtft48bf1u/fX6K8qtTJN0n6bRyNVuDSdGPqlopb7ND05PfxPWsndiGJmIiFyrD5pT2WRY02jaPbMI2ZwxjkjGS385zegSI33lNNWt3ZTWt09kaCIyzUx4YmTjxo3s3bt3wLE9e/awcePGif7RMs29dLSCQMhkzaw0FuWlRI4n+htI7GkkZNhpTV4QwwhlsslJcbN8hrUDLTK2d86t1lf1GRERmXJME96sT+Nm23Gg/w9pmR76xvbmNh7CFuodcX2SM4H5OVY5zV8+qZ7Q2ERkehlzYqS9vZ3i4mKKi4sBaxxvcXEx5eVWx/CdO3dy//33R9Z/73vfo6ysjIcffpgzZ87w05/+lBdffJEf/OAH4/QSJB6ZpskLH1n1pvddN7A5b3qb1XS11TOHoN0V9dhkctu80OpUv68vMTI3nBi58C6EQjGKSkRErkVJp5vqLjsbbacAaE1Wf5HppNOdT7czA0ewk6zm4lFds6zAKqd5/VTNRIYmItPMmBMjhw8fZs2aNaxZswaAHTt2sGbNGh555BEAqqurI0kSgDlz5vDnP/+ZPXv2sGrVKn7yk5/wi1/8YshRvSKjcfBCExcaOvA47fzVyoIB59Ij02hURiNXu22xVU7z7rl6AsEQzFgHzmToaoLaEzGOTkRExuLN+jTW2c6RZPjpSUim05U78kUydRgG1VnWLvOC+vdGdcmS/FQM4ESlj4rmzgkMTkSmkzF3pdy8eTPmMNMbnnnmmUGvOXbs2Fh/lMiQfnvISr59efUMPK7+X2NnTyvJ3dWYGDSnaExvPDp4oemqY6XB/mRtyDRJdNhp7erl/3v9LDu/uARm3wjnX7fKafJXRjFaERG5Vu0BG/ubUtlhfw3AmkJ3RSN2mR6qsm9lTtWfmVH3DsWLd4y4PtmVwOxMDxcbO3jjZC3/5SaNbxaRkU3KqTQiw2nt7OUvJ6ztkUOV0bQlFRJI8Fx1rYjNMFiQa9Ufn6lpsw5GymnUgFVEZKp4r8lLj2njcwkfA+ovMl1VZd9IyEjA21E2qrG9AMsKrH5iu0+qnEZERkeJEZlyfn+sgp5AiCX5qayc6R1wLqOvjCZFZTQytKX51gemE5Wt1g64vgasl/ZDoCeGkYmIyGiYpsmb9Wlk0cpCrF2B6i8yPfU6UqlLXwvAjLp9o7pmaTgxcvhiEw3t/okKTUSmESVGZEoxTZPfhpuu/s31hRhXbJl19TST0ml9OGpOVRmNDG1RbgoJNoPGjh5r10jOUvBkQ28nVHwU6/BERGQEFxs7qeh2cWuCNY2mw52nnaLTWFXOLQDMqB/dzs70JCcrZngJmfDmqdqJDE1EpgklRmRK+biilTM1bbgSbHxl1YwB5wrq3sHApMOdh9+ZHqMIZSpwOewszLVGPL92vBpsNphjfehSOY2IyOT30UWrn9RX3UcBaxKdTF+VOZsByGk6gqO3bVTXbF1mNeJ9XeU0IjIKSozIlPLc/osA3LUyH2+SY8C5wtq9AGq6KqOyfIa1zbavX02knKZsX2wCEhGRUenwBzhe2QqYrDU1pjcetHlm0+opwmYGyG/4YFTX3LE8D4APShpp6+6dyPBEZBoY81QakVhpaPfzp0+qAfjOpqKBJ3s6yGs4AECTxvTKp8wr/91Vx/KDNl425lNS1875t55jQUK9daLiI+hqhkTtOhIRmYyOljcTDJlsTiwjKegjZNhpS5oV67BkglXmbMZ74Rlm1O2jPP+OEdfPz0lhbraHsvoO3j5bz5dXFUQhShGZqrRjRKaMFz66TE8wxOrCNFbOTBt4suRNEkJ+uh3pdLlyYhOgTClJ9hArUzsB+EuFC5IyITkPzBCU7I1xdCIiMpiQaUbGsn8z+QgAbUmzMG2O4S6TaaAyx9rZWVD/HkYoMKpr7lhm7RpROY2IjESJEZkSAsEQv/nwEgDf3jT76gWn/wSEm65e0ZBVZDgb0qw65dcq3daBnKXW1/NvxCgiEREZzvnaNpo6enA7bKxTGU1caUhbjd+RiqvXR1ZL8aiu2RpOjOw7U0d3b3AiwxORKU6JEZkS9pyqpbq1m0yPky+uyB94MtgL514HVEYjY7M+rY0Ew+RMawKlbXbIXWadOL8HQvoAJSIy2XxYZu0Wub4whbTOiwC0epQYiQemLYGq7JsBmFn79qiuWTnTS77XTUdPkA9KGiYyPBGZ4pQYkSnh2QMXAfib62fhSrAPPHnxPfC30uXMoD1xZtRjk6krOSHEppweAHZXuCC9CByJ0NUEFYdjG5yIiAzQ1NHDuVprp9+Xs6qwh3rotSfR6c6LcWQSLZdzvwDArJo9YJojrjcMg9uXajqNiIxMiRGZ9M7WtPFhWRN2m8E3NwzSXC1cRlOZexsY+pWWsfniTD8Af6l0gc0O2eFdR+d2xzAqERH5tIMXGjGBBTnJLOqwktetnjkqoY0j1dk30mtPwtNdTWbr8VFd01dO8+bpOoKhkZMpIhKfNJVGJqXnD5ZHvn+luBKAxXkp7DtbP3ChGeLu438gCbic+3mSunQ3QMbm9gI//9dRk5MtDi622ynKWQZVx6zyrC0/jHV4IiIC9AZDHL7YDMANczPJv2hNovOpv0hcCdrdVObcSlH1a8yqfp3GtJUjXnPdnAy8iQ6aOno4fLGJDXMzoxCpiEw1ur0uk1pXT5Di8hYANg7yRpbZeoIkfz29dg+1GRuiHZ5MAxkuk03ZvQD8/pIbcpZYO4/qTkLL5RhHJyIiAJ9UtNLVGyQtycHyTMhoOQGov0g8Ks/bCoy+nMZht/H5JdbEwjdO1U5obCIydSkxIpPa4UtN9ARD5Ka6mJPluer8zFprrGpVzs2E7M5ohyfTxNeLugB46ZKbkMMDM6+3Tpx/PYZRiYhInw/LGgHYUJRBfvNH2AjR5cykx+mNcWQSbddSTnP70v6xveYokikiEn9USiOTVjBkciD8QejGeVkYn64hNk1m1bwJWGU0Itfq9gI/KQkhKjrtHKx3sNGTZZ346Jdg2Ie/GGD9tokNUEQkjl1u6qSypQu7zWBdUQZ5JVYZjcb0xqdrKae5dWE2boeNiuYuTle3sbQgNQqRishUoh0jMmmdrvbR0tlLktPOqsK0q85728+T0llO0OaMjG8TuRaJCfBXhVYT1v+45IacpdaJhvMQ7IlhZCIi0neTZOUML8muBPIaPgTApzKauDXWcppEp52bF2QDmk4jIoNTYkQmrf2l1rz56+dk4LBf/avat1ukOmsTgYSry2xExuLrs61ymtcqXHQkFkBiOoR6reSIiIjERJ2vm+MVrQBsnJdJUlcVqZ2XCBl2fJ7ZMY5OYuWzTKdRnxERGYwSIzIpVTZ3cbGxE5sBN8wZvHt4Yc0eAC7nfSGaock0tTYzwJzkAJ1BG3+pvGLXSN3J2AYmMkGeeuopioqKcLvdbNiwgUOHDg259plnnsEwjAEPt9s9YI1pmjzyyCPk5+eTmJjIli1bOH9eiUX5bH5zsJygaTIrI4mZ6UnkN1hlNI3eFQTt7hGulumqr5wGYHb1a6O65vOLc7DbDE5X+7jc1DmR4YnIFKTEiExKfbtFVszwkprouOp8SsdF0tpLCBkJVITfGEU+C8OAr8/uBuA/LrohZ5l1ouYkmKEYRiYy/l544QV27NjBD3/4Q44ePcqqVavYunUrdXV1Q16TmppKdXV15HHp0qUB53/0ox/xr//6r+zatYuDBw/i8XjYunUr3d3dE/1yZJryB4I8f9D6Pds0z7pJkhdOjNRkbYxZXDI5XMq/E4DZVa9hhHpHXJ/ucXJ9UQagchoRuZoSIzLp1LV180l42+ymeVmDrikMl9HUZl5Pr0Md6WV8fG12NwYmBxuclCcuggQX+FuhpTzWoYmMq8cff5wHH3yQbdu2sXTpUnbt2kVSUhJPP/30kNcYhkFeXl7kkZubGzlnmiZPPvkk//AP/8BXvvIVVq5cyXPPPUdVVRWvvPJKNF6STEN/+riahvYeUt0JLCvwghkit/EgANVKjMS9quyb6HZmkNjTSH7D/lFdc/sy679bb5xUOY2IDKSpNDLp/ObD/m2zhRlJg64prLUSI+W5W6IZmkxz+Ukhbsrt4b1aFy9dTuUHOcug6ihUfwzpRbEOT2Rc9PT0cOTIEXbu3Bk5ZrPZ2LJlCwcOHBjyuvb2dmbPnk0oFGLt2rX88z//M8uWWTurLly4QE1NDVu29P832ev1smHDBg4cOMB999131fP5/X78fn/k3z6fbzxenkwTpmnyq/0XALhhbiZ2m0F66yncvS302j00epfjbSuJcZQSS6bNwcWCu1h88dfMrXiVqk/tIH7+4NU3NTp7ggB8dLGJ//VuGcmugX8KfXPDrIkLWEQmNe0YkUmlu3fgttl55b+76rGk5Bdktp7EBBIC7QPOiXxWkXKaS26CeeERgDWfjKrrvchU0NDQQDAYHLDjAyA3N5eamsG3ly9atIinn36aV199ld/85jeEQiE2bdpERUUFQOS6sTznY489htfrjTwKCws/60uTaeTwpWZOVPpwJdi4Llz+0DeNpjbzOkzb1WW2En/KZnwFgBl1+3D2tIy4Pj3JSUGaGxM4XaVkrIj0044RmVT++HEVDe09eBMd1rbZiqvXZLSdBqAtaRaBhOQoRyjT3dYZfryOEJWddvYFV/F5mwM6G8FXCd6ZsQ5PJCY2btzIxo39pQubNm1iyZIl/OxnP+O//bf/dk3PuXPnTnbs2BH5t8/nU3JEIn71gbVb5O7VM/CE7+rnN6q/SDwa6cZXhzsPT3cNs6tf4/zsvxnx+ZYXeKlq6eZEVSvXzckYrzBFZIrTjhGZNEzT5FcfXAT6t80OJt1nJUaaUpdEKzSJI2473DfHGt37qwvpkBP+Pav5JIZRiYyfrKws7HY7tbUDa+xra2vJy8sb1XM4HA7WrFlDSYlVytB33Vie0+VykZqaOuAhAlDZ0sXr4R4Q224qAsAe7Ca7+RgA1ZlKjEi/hjRrd+fcyj+Mav3yAqs3XWl9O53+wITFJSJTixIjMmkcvNDEqWofboeN64rSB13j6G0npfMyAM2pi6MZnsSRb83rwobJ+3VOaryrrYPVH8c2KJFx4nQ6WbduHXv37o0cC4VC7N27d8CukOEEg0GOHz9Ofn4+AHPmzCEvL2/Ac/p8Pg4ePDjq5xTp86v3LxAMmWycm8niPCthltN0BHuohw53Lm2eotgGKJNKg3cFIWxktp4gta10xPVZKS7yUt2ETDhdo3IaEbEoMSKTRt+22a+tnUmSc/Aqr/S2MxhAe2IBPZpGIxOk0BNiS0EPAL9oXQ+GHdproU3j/WR62LFjBz//+c959tlnOX36NA899BAdHR1s27YNgPvvv39Ac9ZHH32UN954g7KyMo4ePcq3vvUtLl26xAMPPABYE2u+//3v80//9E/84Q9/4Pjx49x///0UFBRw9913x+Q1ytTU2tXLvx+ymmZ+95a5keP5DR8AUJ11kzVfXSQskOChNWU+AHMrXx3VNctnWAm3E5VKjIiIRYkRmRQuN3XyxqnwttlNRUOuy2w9CUBT6tJohCVx7DvzOwF4/nIGvZkLrYMqp5Fp4t577+XHP/4xjzzyCKtXr6a4uJjdu3dHmqeWl5dTXV0dWd/c3MyDDz7IkiVL+OIXv4jP52P//v0sXdr/3+KHH36Yv/u7v+O73/0u1113He3t7ezevRu32x311ydT1/MHy+noCbIwN5nNi7Ijx/PC41irszbFKjSZxOrTrN2dcytewRbsGXF9XzlNSV07XeFJNSIS39R8VSaFZ/dfxDTh5gVZLMhN4aOLzVetcfS2kdJpTaxpVGJEJtjG7F4WpQY460vgQ/t6buY0VH8CC26PdWgi42L79u1s37590HP79u0b8O8nnniCJ554YtjnMwyDRx99lEcffXS8QpQ44w8EI7tHv3vLPIzwzpCkrhrS2ksJYaMma0MsQ5RJqjllIZ2uHJL8dRTW7uFSwV3Drs9JdZOT4qKuzc+ZGh9rZg1ewi0i8UM7RiTm2v0BXvjI6hvyX26cM+S6DN8pDKAtcSY9zrQoRSfxyjDg2+FdIz+qvwETA3wV1oQaEREZd68eq6KuzU9eqpsvryqIHO8ro2lMW0GvymhlMIaNksKvA7Cg/IVRXbJ8hvW7dKKydcLCEpGpQztGZMI9f7B82PMHShto8wfISnZS2dI15Pq+MppG7/Jxj1Hi18ELTUOemxEy8Ng9HO9MpzJ1LjN7Srl08kNmXzf8nSgRERmbUMjkf71XBsC2G4twJvTfu+vvL3JjTGKTqaG08B6Wl/4vcpqPkeY7S0vqomHXLy/w8taZOs7XtdPdG8TtsEcpUhGZjLRjRGIqZJocKLPuwG+cm4ltiIZqzp4WUroqMDHUX0Sixm03uS2rBYA/Bqzt25m+U7EMSURkWnr7bB0lde0kuxL4mw2z+k8EA+Q1fAhAdbYSIzK0LncOl3M/B8CC8hdHXJ+b6iIr2UUgZHK2pm2iwxORSU6JEYmpkrp2Gtp7cCXYWDtMfWemz9ot4vPMpteRHK3wRLgzpxk7Jk933kQIg+SuSpXTiIiMs5+9a+0W+eaGWaS6Hf0nKo/gDLThd3hp8i6LUXQyVZyfdR8ARVV/JKG3fdi1hmH0T6epUjmNSLxTYkRi6kCp9QfmutnpuIbZwhgpo0lVGY1EV5YzwE2ZrdSTxkkjPJ2m6lhsgxIRmUaOXGrm0IUmEmwG224sGniydC8ANZk3YBoqdZDh1WWsp9UzF0ewizlVfxpxfd90mrM1bfgDmk4jEs+UGJGYaWj3c7a2DQOrjGYobn8Dnu4aQthoTl0cvQBFwu7Oa8LA5N96brYOKDEiIjJu/sdb5wH42toZ5HsTB54ssRIj6i8io2IYnJ/11wAsvPTvYIaGXZ7vdZPpcRIImZyq8kUjQhGZpJQYkZjp6y2yMDeFzGTXkOv6dou0Js8lkJAUldhErlTg7mFDehu7g9cRwAa+SmivjXVYIiJT3seXW9h3th67zeC/3jZ/4MnOJqg6CkB11sYYRCdTUdmMr9Br9+DtKCO/Yf+waw3DYPUsa9Lhscst0QhPRCYpJUYkJvy9QY5eagZg07yhd4tgmpHESJOm0UgMfTWvkRZSeDe40jqgXSMiIp9Z326Rr6wuYHamZ+DJ0rfADNGSPJ+uxLwYRCdTUcCRTGnh1wBYfOG5EdevKbR63JXWtVPr657Q2ERk8lJiRGLiaHkz/kCIrGQX83KGbqaa6K8jsaeBkGGnOWX4sWsiE6koyc+a1Hb+GAzftaw6CqYZ26BERKawE5WtvHm6DpvB1btFAM7tBqAy55YoRyZT3dnZ/4kQNvIbD+BtOzfs2gyPk1kZSZjAq8WV0QlQRCYdJUYk6gaM6J039IhegKyWTwBoSV5A0D50uY1INNyd38ie0Dr8pgPa66CtKtYhiYhMWf/zrRIAvrSqgHnZn7pJEgzA+T0AVOZsjnJkMtV1JM3gct4WABZf+PWI69eEy2l+f0zv6yLxSokRiboBI3oL04ZcZ4R6yQ4nRurTVkUrPJEhLU7uYlYyvBVabR2oPBrbgEREpqgzNT52n6zBMGD7YLtFLh+E7hZIzKAxbWX0A5Qp72zRfwagqOrPuP0Nw65dMcOL3WZwutrHmRo1YRWJR0qMSNSNdkRvQf17OIId9CR4aE0Z5EOTSAx8vaAhUk4TqDymchoRkWvwP8K7Rb64Ip8FuSlXLzj3mvV1we0a0yvXpCF9NQ1pK7GbvSwof2HYtUnOBBaFfw9/f1TlNCLxSIkRiarGdj/natsAuGGYEb0A8yp+D0CDd6U+FMmksSylk67MZXSYLhK6m6DlUqxDEhGZUk5X+/jL8WoA/u5zQ9z4OPe69XXRHVGKSqaj00X3A7Dg0m+xBzqHXdtXTvNKcSXBkG56iMSbhFgHIPHlw7JGTGBhbjJZw4zodfsbKKh/D4D69NVRik5kdP5ueS973l/H3fb9tF48hjfWAYmITCE/fv0spgl3rcxncV7q1Qve+RE0nAPDBr5q5lX8LvpBypQzr3yQ3xMzRLcjDXdvCxuO/5DazOsBKJ31jauWLspNwZvooNbn50BpIzctyJrokEVkEtGOEYkafyDI4ciI3uHfbOZU/hGbGaQtcSbdruxohCcyamszA1zyWh+ubFVHIdgb44hERKaGwxeb2HumDrvN4O+/sHDwRbUnra+Z88GRGL3gZPoxbFRnbQIgv/EAhhkccmmC3cZdK/MBePlYRVTCE5HJQ4kRiZpj5S34AyEyPU7mDzOiF9NkbriMRrtFZLL6/Io5NJippJhtVBz+c6zDERGZ9EzT5Ee7zwLw1+tnMvfTk2j69CVGcpZGKTKZzurTVtFr9+DqbSWj9dSwa7+2ZgYAu0/U4OvWTQ+ReKLEiESFOaYRvR/j7bhAwJ5IU+qyaIUoMibLM02OJ1q7Rqrf+1WMoxERmfz2navn0MUmXAk2/vfPLxh8UXcrNJVa3+cuj15wMm2ZNgc14RKagoYPhm2avm52OvNzkunsCfLyEe0aEYknSoxIVJTWd1Df5seZYGPtrPRh186teAWA8rwvELQP3YdEJNbmLVkDwIq2D/iktDzG0YiITF6hUP9uke9sKiLfO0SJzPk9YIYgORc86vEg46M2Yz1Bm5Mkfx3e9pIh1xmGwf0bZwPw3IeXMDV5TiRuXFNi5KmnnqKoqAi3282GDRs4dOjQkGufeeYZDMMY8HC73dccsExNB0qt+fFrZ6XhHmZErz3Qyexqa0Rf6cyvRiU2kWs1q6CAWns+bqOX/X98Wh+gRESG8MdPqjhd7SPFlcD3bp039MJT1s0R8lZEJzCJC0F7InXpa4HwrpFhfG3tTJJdCZTVd/BBSWM0whORSWDMU2leeOEFduzYwa5du9iwYQNPPvkkW7du5ezZs+Tk5Ax6TWpqKmfPno382ximjEKmn6aOHs7UjG5Eb1HVn3EEO2lLKqQ+fR2p7ReiEaLImBy80BT53utdSm5TNasaX+cf//gNFuamDHrNNzfMilZ4IiKTSk8gxON7zgHwv906l3SPc/CF/nZrxwhAvnqMyfiqzryB3KZDpHaWk910hPqMdYOuS3YlcM/aGTx74BLPHrio6TQicWLMO0Yef/xxHnzwQbZt28bSpUvZtWsXSUlJPP3000NeYxgGeXl5kUdubu6wP8Pv9+Pz+QY8ZOo6UNoQGdGbkzLMbiEzxOKLvwHg3Ky/ASXQZAroyrT64Gy0n+LY8eOEtGtERGSA5w5c5FJjJ9kpLrbdOGfohed2Q6AbPNmQOiNq8Ul86HWkUp9mJdyWlf582LX/eWMRAHtP11LR3DnRoYnIJDCmxEhPTw9Hjhxhy5Yt/U9gs7FlyxYOHDgw5HXt7e3Mnj2bwsJCvvKVr3Dy5Mlhf85jjz2GUVQGDgAAIABJREFU1+uNPAoLC8cSpkwibd29ox7RW1D/Pt6OMnoSklVGI1NGjzONqrT1ANzY+RYfX26JcUQiIpNHc0cP/7r3PAD/x+0L8biG2ax80ppIR/5q3RyRCVGddSMmBgUNH5DRcmLIdfNzkrlpfhYhE/7toHqIicSDMSVGGhoaCAaDV+34yM3NpaamZtBrFi1axNNPP82rr77Kb37zG0KhEJs2baKiYuhOzzt37qS1tTXyuHz58ljClEnkP45U4A+EyE52DT+iF1h88TkASgvvIeAYfq3IZFI+88sAfNX+PntO1RAIhmIckYjI5PAve8/j6w6wOC+Fr68b5kaXv62/jKZAZTQyMfzOdBq8Vv+aZWUj7RqxmrD+9lA53b3BCY9NRGJrwqfSbNy4kfvvv5/Vq1dz66238vLLL5Odnc3PfvazIa9xuVykpqYOeMjUEwyZPLP/IjDyiN4031nyGg8SMuycnf3NKEUoMj7K875AwOZiga2Smd3nBvQgERGJV6X17fzmw0sA/MNdS7HbhtkFcnY3BP2QOR9SCqIUocSjquybMDEorH0Lb9u5Idd9fnEOM9ISae7s5U+fVEcxQhGJhTE1X83KysJut1NbWzvgeG1tLXl5eaN6DofDwZo1aygpGXpUlkwPb52p41JjJ27HyCN6+3aLXM77Ap2J+kAkU0vAkUxl7m3Mrt7NN+zv8P+eWcDaWekkOoeewCQiMtU9P0KJwa8PXCQQMlmcl0J5U+ew628++jyFwIm0z9FxsXl8AxW5Qrcri/K8LzC75g2Wlf6C/at/NOi6BLuN/3TDLH60+yy/+uAC96ydoQESItPYmHaMOJ1O1q1bx969eyPHQqEQe/fuZePGjaN6jmAwyPHjx8nPzx9bpDLl/OoDa6LMdUUZOBOG/lVzd9czu+ovAJwpuj8qsYmMt9IZVl+crybsJ9TbxTvn6mMckYhI7JTWt3O6pg2bAXcsH/7mWUJvOwX17wNQnnd7NMKTOHdy3ncBmF29m9T2siHX3XfdLJKcdk5W+dh7ui5a4YlIDIy5lGbHjh38/Oc/59lnn+X06dM89NBDdHR0sG3bNgDuv/9+du7cGVn/6KOP8sYbb1BWVsbRo0f51re+xaVLl3jggQfG71XIpHO62sf+0kbsNoONI4zoXVj+79jNAHXpa2hMWxGlCEXGV03WDbQnFpBKB3fYDrG/tIGWzp5YhyUiEnUh0+Qvx63Sg+vnZAw/kQ6YWfc29lAPrZ4iWlIWRiNEiXMtqYu4nHMbBibLS4Yu78/wOPn2piIAntx7DlOT50SmrTEnRu69915+/OMf88gjj7B69WqKi4vZvXt3pCFreXk51dX9dXjNzc08+OCDLFmyhC9+8Yv4fD7279/P0qVLx+9VyKTTt1vkjmV5pCU5h1xnD3SyoPxFQLtFZIozbJTNuBuA77jfJRAyefN07QgXiYhMPx9dbKK6tRu3w8bnFueOuH5u5asAlOffqWk0EjUn5j8EwOzq14bdNfLgzXPxOO2cqPSx55Te10WmqzH1GOmzfft2tm/fPui5ffv2Dfj3E088wRNPPHEtP0amqFpfN68cqwLgv9xUxNma9iHXLrr0PK7eVtoSZ1KZe1u0QhSZEGUzv8rykl2sCZ2gyKjmWDncOD+LfG9irEMTEYmKrp5g5I/HLUtySR5uPC/g6bxMXuNBTAxKZ94djRBFmFf+OwCaUhaR0XaWGz7+PyktvAfsGQMXrt8W2TXy032lPPnmeb6wNFe9RkSmoQmfSiPx5+n3L9ATDHFdUTrrZmcMuc7Z08LSsl8CcHzBf8U01KhSprbOxDyqs28EYLv3ACaw+8Tgo8xFRKajN0/X0tkTJCfFxYY5w5fSAsyr+D0ANVkb1Xxdoq4y51YAMn0nSeweujfYgzfPJdmVwKlqH6+f1K4RkelIiREZV61dvfxbuOv8926dN+zaZaU/xxlopzllERcLvhiN8EQmXOnMewC4M/g2LiPI+bp2zte2xTgqEZGJV+Pr5uCFRgD+amXB8ON5AcMMMrfCKqMpnfnVCY9P5NM63Xk0pSzGAGbUvzvkunSPk+/09Rp58xyhkHqNiEw3SozIuPq3g5do9wf+f/buPDyq6v7j+Htmkkz2hCxkhyyEALIJSAQERFHEra0LoLYgbm3Vamtd64LWVgRpbVXUn1axKiBitVoXFFCoCwbZBNnJAklIAknIvs+c3x+R1EgCSUgmJPm8nuc+IXfOmfnew+SeO98551z6h/kyKal3s+W8Kw/Sf/9SALYk/Q4seitK95DdewKVHkH41Bbwy4j625J/9F0uDl1EiUg3Zozhg60HcRoYFOFPv96+J6wTcfhLvKsPUeUeSFbvc1wQpcixsr4fNRJUsh1KDjZb7obxcfjZ3diVW8rH2zUaVKS70adRaTdVtQ5e/iIDgF9OSMB6nG+Khu5diM3Ukhs0mpyQsS6KUKTjGas76VE/AeAKy6d4udvILanirY2ZnRyZSGMLFy4kNjYWT09PkpOTWb9+fbNlX3zxRcaPH0+vXr3o1asXkydPPqb8tddei8ViabRdcMEFHX0YcorYkVNC6uFy3KwWLhwS0aI6CVlvA5ARdTFOW/MLtYt0pErPMAr8B2EB2P1Bs+UCvT2YPS4WgCc+3k11ncMl8YmIaygxIu3m7U3Z5JdVExngyaXDm58nHFC6h7js/wBHR4toASvpXlJjLgMguuBLfpZQ//5e8MkeyqrrOjMskQbLli3jjjvuYM6cOWzatIlhw4YxZcoUDh061GT5NWvWcNVVV/HZZ5+xbt06YmJiOP/888nOzm5U7oILLiAnJ6dhW7p0qSsORzpZTZ2TD76/Pe9ZiSEE+Zw4yeFZnU/UobUApEZf1qHxiZxIVu+zMVggbzsUpjdb7oYJ8YT62UnLL+cfnzdfTkS6HiVGpF04nIYX/psKwA3j43G3Nf/WGr77KSwY9oefT2HgYFeFKOIypT6x5PUaiRUnM6wrCfbx4HBpNf+3NrWzQxMB4K9//Ss33ngjs2fPZtCgQTz//PN4e3vz8ssvN1l+8eLF3HzzzQwfPpwBAwbwj3/8A6fTyerVqxuVs9vthIeHN2y9evVyxeFIJ1u75zBFFbUEeLlzdv/mp9H+UFz2e1hNHfkBQyn2S+zgCEWOr8oewuHA4QCUbPk3KWkFpKQXsiTlQKPt/W9zmJQUCtSvNbLw032dGbaItCMlRqRdfPRdDhkFFQR6uzNjdEyz5aLyPiXq8FqcFhtb+//GhRGKuNaevlcD0D/zLS4aWP/h8MXP0zhYVNmZYYlQU1PDxo0bmTx5csM+q9XK5MmTWbduXYueo6KigtraWoKCGt95bM2aNfTu3ZukpCR+/etfU1BQ0OxzVFdXU1JS0miTrqegrJrP99bfzeOiIRF4uJ340tLqrCUpYzEA+/pc0aHxibRUdu+JOC02/Cv2E1De/BcZw6IDiQvxodZheH9r82uSiEjXosSInDSH0/C3VXsBmDUmFm8PtybLudcWc8b2PwGwM+5aSn1iXRWiiMtlhZ1DmVcknrVHuJDPGR0bRFWtkwUf7+7s0KSHy8/Px+FwEBYW1mh/WFgYubktW1DwnnvuITIyslFy5YILLuDVV19l9erVzJs3j7Vr1zJ16lQcjqbn4c+dO5eAgICGLSam+aS6nJqMMby/NYc6pyGxty+nRfq3qF7swffxrj5Ehb03GREXdXCUIi1T4+5PXtAZAMTkfQqm6UXTLRYLlw6LxGqBnbmlrN6p2/eKdAdKjMhJ+/fmbPYdKiPQ253rx8c1W27EzgV4Vx+m2CeWbf1+7cIIRVzPWN0aRo0MyHidBy4aAMDbm7PZmlXUmaGJnJTHH3+cN954g3feeQdPT8+G/TNmzODSSy9lyJAh/PSnP+X999/nm2++Yc2aNU0+z3333UdxcXHDlpmpBYq7ml25pezOK8VmsXDJ0EgsLVkzzDgZmLaovn7sL7ToqpxSDoachcPqgU9VLsHF3zVbLszfk7P6hQDw8H+2U1WrhVhFujolRuSk1NQ5eXLVHgB+NTEBf0/3JsuFH/6KhOx/Y7CQMuRRnDa7K8MU6RSp0T+j1uZFYNk+htZ+y89OjwJgznvbcer2vdJJQkJCsNls5OU1/pYzLy+P8PDw49ZdsGABjz/+OJ988glDhw49btn4+HhCQkLYt6/pOfh2ux1/f/9Gm3QdVbWOhmkEZyWGEOJ34n494cByRm5/jIDydOqsdpwWNxIOLD9mE+ksdW7eHAwZB0DMoU+xOaqaLTtpQG8CvNzJLKzk76v3uipEEekgSozISVm2IZOsI5WE+tmZNSa2yTJudeUkf/cwALv7XkN+r+GuC1CkE9W6+5MW/dP6X75+jnunDsDHw8bmA0X8a1NW5wYnPZaHhwcjR45stHDq0YVUx4wZ02y9+fPn8+ijj7JixQpGjRp1wtfJysqioKCAiIiW3bpVupZn16Ry5PsFVycltWzBVYDI/C8BOBQ0Coe+JJFTUE7wmVS7+2OvLSYp4/Vmy9ndbFwytP789vzaVL5Oa35NJRE59TW9GIRIM5akHGj4d02dk7+srF8v4cz4YN7ZnN1knVG7n8SnKocyryhKvaP1bZD0KHv6XkPS/qWwZwVhNVncdm4icz/axbwVu5gyOLzZUVYiHemOO+5g1qxZjBo1itGjR/O3v/2N8vJyZs+eDcDMmTOJiopi7ty5AMybN4+HHnqIJUuWEBsb27AWia+vL76+vpSVlfHII49w+eWXEx4eTmpqKnfffTf9+vVjypQpnXac0jFSD5fx/Jr6xSkvbOGCqwC+FQfwq8zCabGRGzS6I0MUaTNjdSez97n0y36H01JfJC36p1TZQ5osOygygGmjonlzQxa/W7aFj24fT6C3poeJdEUaMSJtlpJeQGlVHYHe7pwR2/QtGWNyPqb/gWX15Qc/jNOqzkJ6llKfvmSHTqz/JeV5Zo+LIz7Uh/yyGv6+SkNvpXNMnz6dBQsW8NBDDzF8+HC2bNnCihUrGhZkPXDgADk5OQ3ln3vuOWpqarjiiiuIiIho2BYsWACAzWZj69atXHrppfTv35/rr7+ekSNH8vnnn2O3a1RAd2KM4f53tlHjcJIU5sfgFi64ijFEH1oDQH7gMGrd/TouSJGTVBAwmDKvSNwdFQzZu/C4ZedcchpxIT7kFFfxh3e2YZpZtFVETm1KjEibVNY4WLO7/vZ85w4Iw8167FvJvyyNM7c9BMCOuNnkhZzp0hhFThW7Yn9e/48ti/GoLWbOJacB8MpXGezJK+3EyKQnu/XWW9m/fz/V1dWkpKSQnJzc8NiaNWt45ZVXGn7PyMjAGHPM9vDDDwPg5eXFxx9/zKFDh6ipqSEjI4MXXnjhmDvfSNf39qZsvk4rxNPdyqXDWrjgKhB1aA0B5Rk4LbaGNRxETlkWC/vDzgcgIfNtAkuav6Ocj92Nv88YjpvVwofbcnlzgxaSFumKNJVG2mTlzlwqax1EelZzOauwHWj8uNVRzeC0l3B3VFDsE0upV5Sm0Ei3dcL3tjHgFwmlB+Htm5h4zXLOHxTGJzvyePi97Sy+IbnFHy5ERDrLkfIa/vzhTgBuP7c/AV4tmwpoddZy+q6/AJAbfCbVHk2PMhU5lZT59GF/+Pn0zf2EUTseY1XyK9BMXz00OpA7pyTx+Ee7ePi9HYyKDSIh1Ne1AYvISdGIEWm1zMIKUtIKAbg+Jg/bj/sIY4g/+B+8avKpcfNjX/RlYNFbTXowiwX6f7/OQtpaKC/gwYsHYXez8lVqAf/a1PT6PCIip5J5K3ZRWF5DUpgfN4yPa3G9xP1v4F+xn1qbDwdDzurACEXa1+YBd1Jn86L3kU3EHnz/uGVvGh/P2IRgKmsd3PjqBoora10UpYi0B31alVZxOA3vbsnGAMNjAhnsX3FMmfCCrwku2YHTYmVvzBXUuSljLkL4UPCPBkc1fPk3YoK8+e3k/gD88T/bOVTS/C0BRUQ62/r0Qt74pn6KwGOXDcbd1rJLSI+aIobsew6AzLBJuhONdCkVXhF8l3ATAKfv+gvutc1Pf7VaLfx9xulEBHiSdric3yzdTJ3D6apQReQkKTEirfJ1WgEHi6vwdLdy4ZBjb8EYVLyDPnkrATgQdj5l3jGuDlHk1GSxQNLU+n+vfxFK87hxfBxDogIoqarj/n9/pwXbROSUVFnj4J5/bQXgqtExjOwb1OK6w/Y8hUddKUf8kjgcOLyjQhTpMLviZlHsE4tXTQFD9j573LKhfnZenDkKL3cb/91zmLkf7XJRlCJyspQYkRbLKa5k5c48AC44LQJfe+MlavzK95OQ/Q4WIK/XKPKCzuiEKEVOYb0HQWBfqKuEL/6Km83KE1cOxd1mYeWOPP6zNefEzyEi4mJ/+WQ36fnlRAR4ct+FA1tcL/LQf0nMrF+DaePAuzWtVrokp9WdjYPuA6D//iUElhw/2TE4KoC/TBsGwEtfpPPmN1qMVaQrUA8lLWKMYc6726mpcxLTy4tRP7o9r1fVIfofeAOrcVDol0RGxAXNLlAl0mNZLJB0Yf2/N7wMxVkMCPfnlkn9AHj4ve0UlFV3YoAiIo1t3F/IS1+mA/DYZUPw92zZgque1fkkb3sQqL8z16Hg0R0Wo0hHyw0Zy4Hw87DiJPm7h7E4645b/sIhEfx2ciIA9/97G1+l5rsiTBE5CUqMSIu8um4/n+zIw2qBn54ehfUHSQ+P2hKS9i/BzVlNqXeMFlsVOZ6Q/tD3LHDUwH8XAHDz2f0YEO5HYXkND2hKjYicIqpqHdy1fCvGwBUjo5mU1LtlFY0hedtDeNUUcsQvkS39f9uxgYq4wIaB91Hj5kdw8XaS9i8+YfnbzknkoiER1DoMN/5zA99mFrkgShFpK316lRPadOAIf/pgBwBTB0cQEeDV8Jh7bSkDMl7DXldCpT2E3TEzMNaWfZsk0iNZLHDO/fX/3vwaHNqJh5uVJ64YhpvVwkff5fLKVxmdGqKICMBfV+4hLb+cMH87D140qMX1+u9fQtThz3FYPfhq2OM4teCqdANVnqFsGnAnAEP3PINv+fGnyFitFv4ybRhjE4Ipr3Ewa9F69uQ1v3iriHQutxMXkZ6ssLyGWxdvotZhuGhIBGMTghse86w6zMCMV/GqKaDaPYBdfa7G4eZ1nGcT6blS0gsb/p3qiGZC77OJPrSGw0t+xcoz/wkWK1NOC+eDbTk8+v4O8oqruLcVc/lFRNrThoxC/vF5GgCP/WwIAd4t+9Ij8tBaRux6AoAtSb+j2K9/h8Uo4mpp0T8jNudDwgtSGL39ET4940WWpBw4bp3zBoaRWVhB5pFKLn/uK345IYFbz+nnoohFpKU0YkSa5XAabn9jMweLq4gP8eHxy4dg+X4KjWfVYSavv64hKbIzdiY1HoGdHLFI17Fh0P3U2rwJLdpC4oE3ARibEMyQqACcBpasP0C+1hsRkU5wpLyG25ZuxmngshFRnDswrEX1Qo5s4azNd2I1DtKiLmV332s6OFIRF7NYWH/aHOqsnoQXpJCQ9a8TVrG725g1NpYwfzulVXW8/GU6B4sqXRCsiLSGEiPSJGMM81bs4vO9+Xi523ju5yPx+37BNa+qQ0xefx3+5RkNSZFqj14neEYR+aEKr3C+TbodgOG7/4ZXZS4Wi4XLTo8ixNdOSVUdt7+xGYdT642IiOsYY7jrra0cLK4iLsSHP/5kcIvq+ZemMnHjLbg5q8gOnUDK4Ie1CLt0eQkHlh+zhRV8TXboeABG7XiMQfv+74TP4+3hxuxxcQT5eFBYXsOVz68jI7+8o8MXkVZQYkSOYYxhwSe7eeG/9UNo5142hKRwPwD8y9I47+tf4F+eQblnhJIiIidhb5/p5AcOxd1Rzqgdj4Ex2N1tXJPcB3ebhS/3FfDnD3ZqMVYR6XBLUg6wJOUAty7ZzKqdedisFi4aEsF7Ww42PPbj7ajgom2cu/467LUl5AcO5YvTF2i9MenWcoOTKfHui81ZS0LWv7EYxwnr+Hu6c8NZcYT4epBdVMmV/7eO3blac0TkVKHEiDRijOGvK/ew8LNUAOZcMoifnh5V/+CBFM77eia+lQcp9e7DquSXlRQROQnGYiNl8MM4LG7EHPqMmLxVAIT5e3LZiGgAXv4ynadW7+vMMEWkh8g+UsmK73IBuHBwOJGBJ143LCZ3JeemzMarppBCvwGsGbkQh03rjUk3Z7GSGvUTHFYP/CqzGJi2qEXVAr09uHF8PAPC/ThcWs30F9axNUt3qxE5FSgxIo08uWovT39a/yHswYsHMXtcXP0DO9+HVy/FXltMfsAQPjnzNcq9ozsxUpHuodgvkZ3x1wEwavuf8K6s/1AyLDqQOZfU3wXiyVV7eOmL9E6LUUS6v8oaB0u/OYDDGAZF+HNmfPBxy1uMg0Gp/+CszXfg5qzmiG8iqVE/JSZ3ZZPTDxIOLHfRkYi4Ro1HIBkRUwEYunchvYp3tKien6c7b9x0JsNjAimqqOXqF1P4dFdeR4YqIi2gxIgAUF3n4L63t/HU6r0APHDRQK4/Kw6MgS/+Bm/+AuqqyA6dyOrR/6DaHtTJEYt0H98l3MQRv/541RQyYdNt2OoqAJg9Lo47zqu/o8Oj7+9g2TfHX/leRKQtauqcLE7ZT2F5DYFe7lw+IrphsfWm+JZncm7KdQzf83csQG7QaPb0mY7T5uG6oEVOAfkBQyn0G4DV1HHWlrtwqy1rUb1Abw9evyGZsQnBlFXXcf0/N/DCf1M1dVakEykxIhwsqmTa8+tYuv4AFkv9SJEbxsdDVTEs+zmsmgPGCSNm8d8Rf8Ph5t3ZIYt0K06bnbUjn6bKI4igkp2M2fZA/d8c8Jtz+nHThHgA7n17G699vb8zQxWRbsYYw71vbyUtvxwPNyu/GNMXLw9bk2UtzjoS9y9l6peX0/vIJmpt3qRFXsL+iAvAoktK6YEsFtIjL6bcMxy/igMkf/dw/ZeKLeBrd+OV2aO5anQMxsBjH+7irre2Ul134vVKRKT9uXV2ANLBNhx/zuOXee78JiWAwhorAe5O/v7zZM5O6g252+DNmVCYBjYPmDoPRs7GrM90UeAiPUuFVySfn/4k56y/nj65Kxmy73k483EsFgv3TR1ARU0dr399gAf//R0HCsq5b+pArFbd8UFETs5Tq/fx9qZsrBa4enQfIgKaXh8k/PBXjNj1BIFl9dNt84LO4OshjxKe/5UrwxU55dS5efPF8AWcl3ItfXM/5tCBUeztO+O4dX64ePHgyAAuHlrHB1tzeGtjFilpBUw/ow9BPo1HYF2d3KdD4heRekqM9FCltRae+M6H11K9MFg4LbCW58cUE5MYAl8/B6sehroqCOgD0/4JUSM6O2SRbu9w0AjWD57DmG0PMmTfc3z5Thz7I+vnLw8M9+e8QWGs3JHHi5+n81VqAVeOjMHDrfG3tLpwEpGWemdzFk+u2gPApcOi6B/md0yZXsU7GLbnKSLzvwSg2j2ArYm3sLfPdI0SEfleQa9hbE76HSN3PcGInfMpCBxCYcBpLaprsVgYmxBCqK+dpd8cIPNIJU9/updLhkZyep/A405rE5H2o8RID7TqoAcPbPYjt7J+qOxVcZXMGV6KZ9VheOUiOPD9tz/9zoPLXgBvrSci4irp0T8lsGwfA9P/yZit92FzVJIWcxkWi4VJSb0J8vbgrU1ZbD9YQlFFGleNPvZbJRGRE3l/60HuWr4VgF9OjKdvkE+jxwNK9zB077PE5K0GwGlxY0/fGXyX8CtqPAJcHq/IqW537C/ofWQjMXmfMn7T7Xw89g2q7CEtrp8Y5sdvJiXy5sZM9hdU8NamLHbllvDT4VF42/WRTaSj6a+sBzlQZuWxbb6syPYEoK9PHY+NKGVc72pI/xx2vQ/OWvDwhfP+CKOuA2WpRVxuS9LvsNccIT77Pc78bg7eVXl81+9XYLEwLCYQfy93Xv96P9lF9d8q/ez0KIZGB3Z22CLSRbz5TSb3vr0Vp4GfnR7FPVMG8MY39VNl/UtTGbLvOfrkfoIFg8FCRuSFfNfv15T69O3kyEVOYRYLXw95FP+yNALKM5iw8XZWJb+M02Zv8VP08qm/ne/new6zcmce3x0sIT2/nMmDwph+Rgw2TaEV6TAW0wWWPy4pKSEgIIDi4mL8/f07O5yuZcMiimssLNzlzSv7vKlxWrBZDDckVjDOJ4vgqv3E5qzAp6r+FqG5wcmkDH6Ecu+oFj29br8n0nqpfa48cSFjGLr3aQanvgjAvujL+ea0BzDW+nz2kYoaln2TyYHC+jvYnBHbi4uGRHLtuNiOClt+QP1S+1ObusbLS9/gj9/WT5m5Kq6SP40oxWaBb3ftJerwWoKLv+PoR68C/4Fkh06k0rN35wUs0sXYqwsZnP4P3BxV5AcMJjXqZw1fNLao//9e9pFKlm/M5FBpNQADwv146JJBjE1o+SgUOXnqm3oOjRjpxqrrHCzZ68XTO30orKmfBzw+rJoHhpaRZD/C4W/eIbS4fhhtndWTzLBzWTdsrkaJiJwKLBa29r+NCnsYo3Y8Rr+sf+FXnsH6IY9Q6tOXXt713yqt3pXH2t2H+SbjCGmHyzktyp8zYjX9TUQaczoNf1+9l79/nxS5MbGCPwwtw1JZCHs/ZmjmeizUf1dW6DeArN4TqfQM68yQRbqkansQe2OuJCljMSHF31HlEUx274mtfp6oXl785pxEUtILWLUzj125pVz9YgoT+4dy04R4xiYEa/0RkXakESPdkMNp+PfmbP66cg/ZRZUA9POr4/6hZZwdWo4lYy3sWwl11RjgcODpZIadQ52bT6sy2aARIyJt0dq/s6i8Txn37b24OSqps9rZlngzu2JnNowe2XeojLc2ZlJSVYfFArPGxHLXlCR8NCe5w6hfan9q045TUFbNHW9+y9o9hwH43aAybos/hCX1E9j/JTjrbw9AnLi9AAAgAElEQVR6xDeRrN6TqPAK78xwRbqF0MKNxOd8AMD+8PPJDT6z1f3/URXVdRw4UsHilAM4nPUf3QZF+HPD+DguGhqB3a3pW2zLyVPf1HMoMdJNLEk5gNMYdhwsYdXOvIZhd73ca7k8ooBzgo8QWrqDPnmrsNcWA1DmGUlGxNQWT5sRkc6R2udKfCqyGP3dH4koWAdAof9ANg68h8NBIwGorHHw0Xc5bNh/BIDoXl786aeD62+/Le1O/VL7U5t2jK/TCrj9jc3klVRjd7Myd3AulzlXQOpn4Ki/ViA4ke3+4ynzju7cYEW6mahDa4k+vBaAtMhL+HrYY21+rquT+7C/oJyXv0jnzQ1ZVNbWJzT9Pd24YHA4lw6LYkxCsNYhaWfqm3oOJUa6AWMMD727nVU788gprgLAy93GxP6hXO2xluDK/fTJW4lfZTYANW5+ZIadS37AEE2bEekCGr5hMoa47PcYsWs+9toSAA71GsH2hBvJCRkHFgvRvby47+1tDaPFLjgtnIcuGURkoFdnhd8tqV9qf2rT9lVeXcfCz/bx/NpUnAYGhnrwz8Hb6L1xAdSU1xcKiIYBl0BoEinphZ0bsEh3ZAx98lYSUfA1Bvhq2OPsj7yoTU91dXKfhn8XVdSwOOUAr63bT25JVcP+EF87ZyeFMj4xhLP6hRDs2/KFX6Vp6pt6DiVGujCn07ByZx7PfLqPbdn1o0DsblbGJtSfDMNq9jNuy130Kt0DgMPqzsHgceSGjMFpde/M0EWkFX489NazOp8hexcSn/UuNlML1I8g2dtnOskXX0eZxYcnV+7hla8ycDgNXu42bjs3kdnjYvF013Db9qB+qf2pTduH02m4661v+WRHHqVVddip4XehG/h57Vv4fr/QeqVHEFm9J1HoP0hfkIh0NGOIzfmQsCMbMVjYOPAe9sRe0+qn+WFi5CiH07A+vZD/bD3Ih9tyKKqobfR4ZIAnsSE+xAb70DfYGz/PE1//N/U6PZn6pp5DiZEuqM7h5INtOSz8bB978soAcLdZGJsQwvh+IYQ68jgt9QXis/6NFScGC4d6jSA7dAK17n6dHL2ItBf32hIiCtbRu3BTQ4IEqzsM+gkMu4pd3sN58D97+CajfnpNVKAXvz+/Pz8ZHqWhtidJ/VL7U5ueHIfTsGb3IZ5ctYfvskvwoorrvf7LTbb38a/LB6DcM4y8oDPIDxyGsShJKuIyxhCb8xFhRzYAsCNuNluSfgsWa4uf4kQJi1qHk5S0Qj7fe5j/7s1nZ07JMWWCfTzo+32SpE+QN6F+dqw/So4qMdKY+qaeQ4mRLqSkqpY3v8nkla8yyDpSP0zez+7GzLF9CfDyoLfzMKelvkBC1r+xmjoACv2SyAw7lyq7bu0l0l251ZUTemQLocXf4lWd/78HPPwwCWezyT6ah7ZHsL3UG6i/5d9dU5I4Z0BvrWjfRuqX2p/atG2KK2p5c0Mmr329nwOFFfS15HKt+yqmu63F21k/ZabcM4ydcbPZF3MFcdnvdXLEIj2UMdjrShi+5+8A7A+fQsrgh6lz921R9dYmLA6VVvGXj/eQUVDO/oIK8kqq+PGHPi93G32DvYkN9iE2xIfIQE9mjolt1et0d+qbeg4lRrqA3bmlLF1/gOUbMimvqV9oqZe3O9eNi2Pm2FgCinaS+sFfic3+D7bvEyI5wWPYlngzAaV7OzN0EXElY0gOKoeaMtj+byg/1OjhIq8Y1lbG8XVtIluc/bCGJnLthAFcOjxSK9q3Uk/vlzqC2rTliitq+Wz3IVbuyGP1rjw8akuZYvuGK9y/YjTbG267W+odw4642aRH/QSnzQPQ3eREOlNqnyuJy36P5G1zsJo6yryi+HLYPAp6Devw166scbC/sJwDBRXsL6wg60gFtY7GHwPdbRbOjA8mOS6IM+ODGRodiIdby0e1dEfqm3oOJUZOUf/4PI1vs4rZtP9IwyKKAL397IzrF8KIKB9i89eQtH8JvY9sang8NziZbf1u5nDQCEAXQCI9TXJcEIyaDU4n5GyBvZ/AnhVwcAv86Lsih7GQYcI5YOuDT0R/YuMT6R2VAP6R4NsbvHqBu3fTaxBsWNS6wEbNbvtBnYJ6Yr/U0dSmzdiwiIo62FLozsYCd74+7EHKYXfCyeds6xYmWbcw3vYdHvxvbYGDoWexp89VHAw965ih+rouEOk8R9cMCzmyhbHf3otvZTZOi43tCTexI342DpvrFkp3OA0HiyrJKCgno6CCjPzyhjvdHOXpbmVU3yDGJARzZnwQQ6J6XqJEfVPPocTIKSSvpIqVO/L4eHsuX+0rwPH9f43VAgPC/Rnf14txbKZP3moiD3+OR139+iJOixsHws9jT9+rye81vNFz6gJIpGdpSIz8WGURZG2AzK/hwNeYnG+xVB87//gYNnt9gsQzADz9we4Hdn8oy6tPmnj41P88ut/THzx8wfqjEShKjMgJ9IQ2XZJy4LiPG2Moq64jr6SavJIqckuqqCk5xI4iG9EcYpRlD6Otuxht3UmcNa9x5dCBMPRKGHw5S/Y0/8FF1wUineeHi6m715ZyxvZHic35CIAKe2++7X8bGVEXd8oaQE5jOFRaTfrhMtLyy0nPL6eipnGixN1mIaaXd8OCrjG9vLC727r1uiQ9oW+Sem6dHUBPVlxZyzfphaSkF7AurYDvsv/3IcWLKk73LWZKcB4j3dMJL9tJr627sDlrGspU2ENJjb6MfX2mUenZuzMOQUS6Cq9ASJxcvwEWY6A0l9rcHezaup68/bupK84mnAIiLAUEUYq7xQGOaijLrd9azFL/el5B4B1U/9PdC4ISICi+fp/WNpEeqqbOyZGKGooqaht+FpZXU1BeQ0F5DTV1DmIshzjNsp+zrRkMtaQxzCOVQEt54yeyWKFXHPQeCL1Pg0n3/eDv6vgJGBHpfLXufnw1bB7ZvScxfPeT+FTlMGbbAwxMX8S+PtNIj7yYWnfXfRC3WiyE+3sS7u/JmISQZhMlafnlpOXXn48sQJi/J1uziji9TyCnRQaQGOar6bnSJbVpxMjChQt54oknyM3NZdiwYTz99NOMHj262fLLly/nwQcfJCMjg8TERObNm8eFF17Y4tfr6pk6Z10dh/LzyM7J4UB2Djl5ueTnH6KqpIAAygm0lBJIOb0spSS45RNpLcDLUdbkc5V6RZMZPpmssHPJDxx6wtWs9c2QiLRUWZ2VlCN+fFPkx64yT6zOWgIpI9BShr+lAj8q6GUtJ8qtlL6eFYS5lRFsKcOfMnwcJXjWFWOrKW1Y36BZngH1SZLgBAjuV58s6RVbv/mEdomkSVfvl6D9+3JjDHPmzOHFF1+kqKiIcePG8dxzz5GYmNiieLpDm5ZX15FXUkVeSTW5JZXkFFeRU1RFTnElB4uqSP/BUHULTsI5QoL1IAmWgyRZMulvzaK/JRN/S+WxT251g4CY+r+XoAQIiqtPODYhJb2wIw9TRNrohyNGfsjqqCZp/xJOS30Rj7pSAOqsdrLCziEn9Cxyg5Op9AxzZajHcBrD4dLqhsVcM/LLKaqsPaacm9VCQqgvAyP8SAj1JT7Ul7gQH+JCfPDy6HoJk+7QN0nLtDoxsmzZMmbOnMnzzz9PcnIyf/vb31i+fDm7d++md+9jRy189dVXTJgwgblz53LxxRezZMkS5s2bx6ZNmxg8eHCLXrPT35DGQF0V1FZCTTlUl1BXUURNRTE1ZUeoLi2gtqwQZ3kBzvICqDyCW/UR7DVFeNWV4Ev5iV+jCXVWOxWevSn3jKTcq37b3u+XrfrQoMSIiLSFw8D+Cjs7yrxJLfciq8qDg1Ue1JnjJ2OtOIm0FjHQ4xCJ7oeJtR4m2nKICLcyQmqy8avJO2594+6NJSCmfp2To5tP7/pRJt7B9Zvdr37z8AU3e6ckUjq9XzpJHdGXz5s3j7lz5/LPf/6TuLg4HnzwQbZt28aOHTvw9PQ8YUynSpsaY6h1GCpq6iirrqOixkFZdR3FlbUUV9RSVFFDUWUtBWU1FJRXk19WQ35ZNYdKqimrrsOdOrypItBSRgDl9LKU0dtyhFCKCLMcIdqSTx/rYWIsh/CkpskYHBZ3ivwSOeI/EJujkjKvKCrtvTE/nqImIl1Kc4mRo9xrS4g7+D4JmW/R60c3UCjx7kuRXyLFvgmU+MZRae9NpT2EKnsItW4+rbr1b3spqaolq7ACX093vs0sYmduCUUVxyZLjgr28SAi0JPIAC8iAjwJ9rUT5ONBiK8Hgd4e+Nrd8Pd0x9fTDW8PG3Y3a6ffPe9U6Zuk47U6MZKcnMwZZ5zBM888A4DT6SQmJobf/OY33HvvvceUnz59OuXl5bz//vsN+84880yGDx/O888/3+RrVFdXU11d3fB7cXExffr0ITMz8+TekGX58NZswIBxwvdDxCqqarDiwIoDm3HghgObqcONOtypxYNabDjb/rrfq8BOlc0fY/fH5hWAl6nE7ukNHl7g5lP/09MfPHux6TA4bcdeSKbF/LRVrxmf+e+TjltEBOqTJXk17hyudsfHN4CcSis5FTYOV1s5XGUlv9pKWe3xL8w8qKGvJY8+lkP0teTR15JHjOUwUdZ8IijEamndIEYHVmq+P1PbPT2x2z3rv1m3uNWvc2K11l8sWqyApf7n5IchemSb2wHqL5RiYmIoKioiICDgpJ6rM7R3X26MITIykt///vfceeedQH3fHRYWxiuvvMKMGTOOec4O6+uBu5d/S+aRyvqxS8ZgqP+202nqEx8Op8FhDHUOQ53DicNpqHE4qa6r3354ZfSy+3w8LTVYMFhxYv3+pxtOrDjwsDjwoA4PavCiBg+Lo5mojuXEjVLvKEq9+1DiF0+JTzzFvgmU+vTBaXUH1I+LdCctvo43hqCi7UQWfEF4wXp6lew64WjMWqsndTZvHDYPnBZ3nFZ3jMWGsVjAYuNQrxFs7X9rOxzFsaaNivk+bENucRW780rZk1dKRn5F/eKu+eWUVNW16bk93Kx4ulnxcLPiZrXg/v1Pm9WC1WLBYrFgs1iwWOqn9li+//eFQ8L5+ZmxJ31sXb2/l1YwrVBdXW1sNpt55513Gu2fOXOmufTSS5usExMTY5588slG+x566CEzdOjQZl9nzpw5hvrbJ2jTpk2bNm2n7JaZmdmabvSU0BF9eWpqqgHM5s2bG5WZMGGCue2225p8TvX12rRp06atq2xdsb+X1mnV4qv5+fk4HA7CwhrPcQsLC2PXrl1N1snNzW2yfG5u8wv53Xfffdxxxx0NvzudTgoLCwkODm7VcKqjGb72+Papq1NbNKb2+B+1RWNqj/9RWzT2w/bw8/OjtLSUyMjIzg6r1TqiLz/6szX9fXv19XIs/e26ntrc9dTmrtcT29wY02X7e2mdU/KuNHa7Hbvd3mhfYGBgm5/P39+/x/zxnojaojG1x/+oLRpTe/yP2qKxo+2hIbUnp737ejmW/nZdT23uempz1+tpba7+vmdo1So9ISEh2Gw28vIaL56Xl5dHeHh4k3XCw8NbVV5EREQ6Tkf05Ud/qr8XERGRrqhViREPDw9GjhzJ6tWrG/Y5nU5Wr17NmDFjmqwzZsyYRuUBVq5c2Wx5ERER6Tgd0ZfHxcURHh7eqExJSQkpKSnq70VEROSUZ3v44Ycfbk0Ff39/HnzwQWJiYrDb7Tz44INs2bKFl156CV9fX2bOnMn69euZPHkyAFFRUTzwwAP4+PgQFBTEM888w7Jly3jppZeavCVge7PZbJx99tm4uZ2Ss4ZcSm3RmNrjf9QWjak9/kdt0Vh3aY/27sstFgsOh4PHHnuMQYMGUVNTw2233UZFRQVPP/10l2+vrqi7vFe7ErW566nNXU9tLt1Vq2/XC/DMM8/wxBNPkJuby/Dhw3nqqadITk4G4OyzzyY2NpZXXnmlofzy5ct54IEHyMjIIDExkfnz53PhhRe220GIiIhI67R3X26MYc6cObzwwgsUFRVx1lln8eyzz9K/f39XH5qIiIhIq7QpMSIiIiIiIiIi0h20ao0REREREREREZHuRIkREREREREREemxlBgRERERERERkR5LiRERERERERER6bG6bGLE4XDw4IMPEhcXh5eXFwkJCTz66KOcaC3Z6upq7r//fvr27Yvdbic2NpaXX37ZRVF3jLa2xeLFixk2bBje3t5ERERw3XXXUVBQ4KKoO1ZpaSm//e1v6du3L15eXowdO5ZvvvnmuHXWrFnDiBEjsNvt9OvXr9HdGLqy1rbF22+/zXnnnUdoaCj+/v6MGTOGjz/+2IURd6y2vDeO+vLLL3Fzc2P48OEdHKVrtKUtuuM59Ki2tEd3Po9K15GRkcH111/f6Dpgzpw51NTUHLfe2WefjcViabT96le/clHUXVtb27yqqopbbrmF4OBgfH19ufzyy8nLy3NR1F3fn//8Z8aOHYu3tzeBgYEtqnPttdce8z6/4IILOjjS7qEt7W2M4aGHHiIiIgIvLy8mT57M3r17OzhSkZPXZRMj8+bN47nnnuOZZ55h586dzJs3j/nz5/P0008ft960adNYvXo1L730Ert372bp0qUkJSW5KOqO0Za2+PLLL5k5cybXX38927dvZ/ny5axfv54bb7zRhZF3nBtuuIGVK1fy2muvsW3bNs4//3wmT55MdnZ2k+XT09O56KKLmDRpElu2bOG3v/0tN9xwQ7dICLS2Lf773/9y3nnn8eGHH7Jx40YmTZrEJZdcwubNm10cecdobXscVVRUxMyZMzn33HNdFGnHa0tbdMdz6FGtbY/ufh6VrmPXrl04nU7+7//+j+3bt/Pkk0/y/PPP84c//OGEdW+88UZycnIatvnz57sg4q6vrW3+u9/9jv/85z8sX76ctWvXcvDgQS677DIXRd311dTUcOWVV/LrX/+6VfUuuOCCRu/zpUuXdlCE3Utb2nv+/Pk89dRTPP/886SkpODj48OUKVOoqqrqwEhF2oHpoi666CJz3XXXNdp32WWXmWuuuabZOh999JEJCAgwBQUFHR2eS7WlLZ544gkTHx/faN9TTz1loqKiOiRGV6qoqDA2m828//77jfaPGDHC3H///U3Wufvuu81pp53WaN/06dPNlClTOixOV2hLWzRl0KBB5pFHHmnv8FzuZNpj+vTp5oEHHjBz5swxw4YN68gwXaItbdFdz6HGtK09uvN5VLq++fPnm7i4uOOWmThxorn99ttdFFH3d6I2LyoqMu7u7mb58uUN+3bu3GkAs27dOleE2G0sWrTIBAQEtKjsrFmzzE9+8pMOjqh7a2l7O51OEx4ebp544omGfUVFRcZut5ulS5d2ZIgiJ63LjhgZO3Ysq1evZs+ePQB8++23fPHFF0ydOrXZOu+99x6jRo1i/vz5REVF0b9/f+68804qKytdFXaHaEtbjBkzhszMTD788EOMMeTl5fHWW29x4YUXuirsDlNXV4fD4cDT07PRfi8vL7744osm66xbt47Jkyc32jdlyhTWrVvXYXG6Qlva4secTielpaUEBQV1RIgu1db2WLRoEWlpacyZM6ejQ3SZtrRFdz2HQtvaozufR6XrKy4ubtF5e/HixYSEhDB48GDuu+8+KioqXBBd93SiNt+4cSO1tbWNrjcGDBhAnz59uvz1xqluzZo19O7dm6SkJH79619rymMHSU9PJzc3t9F7PCAggOTkZL3H5ZTn1tkBtNW9995LSUkJAwYMwGaz4XA4+POf/8w111zTbJ20tDS++OILPD09eeedd8jPz+fmm2+moKCARYsWuTD69tWWthg3bhyLFy9m+vTpVFVVUVdXxyWXXMLChQtdGHnH8PPzY8yYMTz66KMMHDiQsLAwli5dyrp16+jXr1+TdXJzcwkLC2u0LywsjJKSEiorK/Hy8nJF6O2uLW3xYwsWLKCsrIxp06Z1cLQdry3tsXfvXu69914+//xz3Ny67CnzGG1pi+56DoW2tUd3Po9K17Zv3z6efvppFixYcNxyV199NX379iUyMpKtW7dyzz33sHv3bt5++20XRdp9tKTNc3Nz8fDwOGathrCwMHJzczs6xB7rggsu4LLLLiMuLo7U1FT+8Ic/MHXqVNatW4fNZuvs8LqVo+/jpq6p9R6XU15nD1lpq6VLl5ro6GizdOlSs3XrVvPqq6+aoKAg88orrzRb57zzzjOenp6mqKioYd+//vUvY7FYTEVFhSvC7hBtaYvt27ebiIgIM3/+fPPtt9+aFStWmCFDhhwzJaer2rdvn5kwYYIBjM1mM2eccYa55pprzIABA5osn5iYaB577LFG+z744AMDdOn3hjGtb4sfWrx4sfH29jYrV650QaSu0Zr2qKurM6NGjTLPPfdcw77uMpXGmNa/N7rrOfSo1rZHdz+PSue75557DHDcbefOnY3qZGVlmYSEBHP99de3+vVWr15tALNv3772OoQupyPbfPHixcbDw+OY/WeccYa5++672/U4upK2tHlrptL8WGpqqgHMqlWr2iP8Lqcj2/vLL780gDl48GCj/VdeeaWZNm1aux6HSHvrsl9/3nXXXdx7773MmDEDgCFDhrB//37mzp3LrFmzmqwTERFBVFQUAQEBDfsGDhyIMYasrCwSExNdEnt7a0tbzJ07l3HjxnHXXXcBMHToUHx8fBg/fjx/+tOfiIiIcFn8HSEhIYG1a9dSXl5OSUkJERERTJ8+nfj4+CbLh4eHH7MqfF5eHv7+/l12tMhRrW2Lo9544w1uuOEGli9ffsw0o66sNe1RWlrKhg0b2Lx5M7feeitQP7XIGIObmxuffPIJ55xzjqsPod209r3RXc+hR7W2Pbr7eVQ63+9//3uuvfba45b54fvz4MGDTJo0ibFjx/LCCy+0+vWSk5OB+tEPCQkJra7fHXRkm4eHh1NTU0NRUVGjUSN5eXmEh4efVNxdWWvb/GTFx8cTEhLCvn37utWC6i3Vke199H2cl5fXqA/My8vrNnf0k+6ryyZGKioqsFobL5Fis9lwOp3N1hk3bhzLly+nrKwMX19fAPbs2YPVaiU6OrpD4+1IbWmLioqKY6YFHB1OaE5wm9+uxMfHBx8fH44cOcLHH3/c7Gr7Y8aM4cMPP2y0b+XKlYwZM8YVYbpES9sCYOnSpVx33XW88cYbXHTRRS6M0nVa0h7+/v5s27at0b5nn32WTz/9lLfeeou4uDhXhduhWvre6K7n0B9raXv0lPOodJ7Q0FBCQ0NbVDY7O5tJkyYxcuRIFi1adMx1QUts2bIFoEcn9TqyzUeOHIm7uzurV6/m8ssvB2D37t0cOHCgW11vtFZr2rw9ZGVlUVBQ0GPf5x3Z3nFxcYSHh7N69eqGREhJSQkpKSmtvpOQiMt16niVkzBr1iwTFRVl3n//fZOenm7efvttExIS0mgo4r333mt+8YtfNPxeWlpqoqOjzRVXXGG2b99u1q5daxITE80NN9zQGYfQbtrSFosWLTJubm7m2WefNampqeaLL74wo0aNMqNHj+6MQ2h3K1asMB999JFJS0szn3zyiRk2bJhJTk42NTU1xphj2yMtLc14e3ubu+66y+zcudMsXLjQ2Gw2s2LFis46hHbT2rZYvHixcXNzMwsXLjQ5OTkN2w+nT3RlrW2PH+tOU2la2xbd9Rx6VGvbo7ufR6XryMrKMv369TPnnnuuycrKanTu/mGZpKQkk5KSYoypnzr2xz/+0WzYsMGkp6ebd99918THx5sJEyZ01mF0KW1pc2OM+dWvfmX69OljPv30U7NhwwYzZswYM2bMmM44hC5p//79ZvPmzeaRRx4xvr6+ZvPmzWbz5s2mtLS0oUxSUpJ5++23jTH1/dadd95p1q1bZ9LT082qVavMiBEjTGJioqmqquqsw+gyWtvexhjz+OOPm8DAQPPuu++arVu3mp/85CcmLi7OVFZWdsYhiLRYl02MlJSUmNtvv9306dPHeHp6mvj4eHP//feb6urqhjKzZs0yEydObFRv586dZvLkycbLy8tER0ebO+64o8vPjW9rWzz11FNm0KBBxsvLy0RERJhrrrnGZGVluTj6jrFs2TITHx9vPDw8THh4uLnlllsafbBvqj0+++wzM3z4cOPh4WHi4+PNokWLXBt0B2ltW0ycOLHJ+aazZs1yffAdoC3vjR/qTomRtrRFdzyHHtWW9ujO51HpOhYtWtTsWgFHpaenG8B89tlnxhhjDhw4YCZMmGCCgoKM3W43/fr1M3fddZcpLi7upKPoWtrS5sYYU1lZaW6++WbTq1cv4+3tbX72s581SqbI8c2aNavJNv9hGwMN13AVFRXm/PPPN6Ghocbd3d307dvX3HjjjSY3N7dzDqCLaW17G1N/y94HH3zQhIWFGbvdbs4991yze/du1wcv0koWYzTeV0RERERERER6ptZPQBURERERERER6SaUGBERERERERGRHkuJERERERERERHpsZQYEREREREREZEeS4kREREREREREemxlBgRERERERERkR5LiRERERERERER6bGUGBERERERERGRHkuJERERERERERHpsZQYEREREREREZEeS4kREREREREREemxlBgRERERERERkR5LiRERERERERER6bGUGBERERERERGRHkuJERERERERERHpsZQYEREREREREZEeS4kREREREREREemxlBgRERERERERkR5LiRERERERERER6bGUGBERERERERGRHkuJERERERERERHpsZQYEREREREREZEeS4kREREREREREemxlBgRERERERERkR5LiRERERERERER6bGUGBERERERERGRHkuJEZFu5OGHH8ZisZCfn9/ZoYiIiMhJUJ8uIuI6SoyI9ECxsbFYLJaGzcfHh9GjR/Pqq692dmgiIiLSBg6Hg8jISCwWCx999FGTZY4mW45u7u7uxMbGctttt1FUVOTiiEVETh1uneskiWEAACAASURBVB2AiHSO4cOH8/vf/x6AnJwc/vGPfzBr1iyqq6u58cYbOzk6ERERaY1PP/2UnJwcYmNjWbx4MVOnTm227HPPPYevry/l5eWsXr2ap59+mk2bNvHFF1+4MGIRkVOHEiMiPVRUVBQ///nPG36/9tpriY+P58knn1RiREREpIt5/fXXGTFiBLNmzeIPf/gD5eXl+Pj4NFn2iiuuICQkBIBf/vKXzJgxg2XLlrF+/XpGjx7tyrBFRE4Jmkoj0g3l5+czbdo0/P39CQ4O5vbbb6eqquq4dUJDQxkwYACpqakuilJEREROpCV9emVlJe+88w4zZsxg2rRpVFZW8u6777b4NcaPHw+gawAR6bGUGBHphqZNm0ZVVRVz587lwgsv5KmnnuKmm246bp26ujqysrLo1auXi6IUERGRE2lJn/7ee+9RVlbGjBkzCA8P5+yzz2bx4sUtfo2MjAwAXQOISI+lqTQi3VBcXFzDN0W33HIL/v7+PPvss9x5550MHToUgNra2oaV7nNzc5k/fz65ubnccsstnRa3iIiINNaSPv31119n7NixxMTEADBjxgxuvvlmDh8+TGho6DHPWVhYCEB5eTmffvopCxcuJDQ0lAkTJrjoqERETi0aMSLSDf04ufGb3/wGgA8//LBh3yeffEJoaCihoaEMGTKE1157jdmzZ/PEE0+4NFYRERFp3on69IKCAj7++GOuuuqqhjKXX345FouFN998s8nnTEpKIjQ0lNjYWK677jr69evHRx99hLe3dwcdhYjIqU2JEZFuKDExsdHvCQkJWK3WhqGyAMnJyaxcuZIVK1awYMECAgMDOXLkCB4eHi6OVkRERJpzoj592bJl1NbWcvrpp7Nv3z727dtHYWEhycnJzU6n+de//sXKlStZsmQJZ555JocOHcLLy6ujD0VE5JSlqTQiPYDFYjlmX0hICJMnTwZgypQpDBgwgIsvvpi///3v3HHHHa4OUURERFrgx3360eTHuHHjmiyflpZGfHx8o30TJkxouCvNJZdcwpAhQ7jmmmvYuHEjVqu+NxWRnkdnPpFuaO/evY1+37dvH06nk9jY2GbrXHTRRUycOJHH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a/MtLy/nhhtuYODAgURERJCZmcmNN95IVVVVEKNun7a8xy+99BKTJ0/GZrOhaRqVlZVBirZtFi5cSK9evbBYLGRlZbF27doTHr9kyRIGDRqExWJh2LBhLFu2LEiRdozW5Pv9998zY8YMevXqhaZpPPnkk0GMVHQ34dSGhlu70qQ1eb/88succcYZxMbGEhsby5QpU076OnVmrX3PmyxevBhN07jgggsCHGFgtDbvyspK5s6dS2pqKmazmQEDBnTJv/fW5v3kk082t2UZGRnccsstNDQ0BCnajvH1118zffp00tLSTvkzy4oVKxg1ahRms5l+/fq1WD1NiBNS3cQ555yjRowYoVavXq2++eYb1a9fPzVz5swTnnPmmWeqq666ShUVFTVvVVVVQYq4/dqSc5O//vWv6txzz1WAWrp0aYAj7ThtyfnFF19UX331lcrPz1cbNmxQ06dPVxkZGcrj8QQp6rZrbb5bt25VF154ofrwww9Vbm6uWr58uerfv7+aMWNGEKNun7a8x0888YRasGCBWrBggQJURUVFkKJtvcWLFyuTyaReffVV9f3336urrrpK2e12VVxcfMzjV61apfR6vXr00UfV9u3b1d13362MRqPaunVrkCNvm9bmu3btWnX77berd955R6WkpKgnnngiyBGL7iRc2tBwa1eatDbvWbNmqYULF6qcnBy1Y8cOddlll6mYmBhVWFgY5Mjbr7W5N8nPz1fp6enqjDPOUOeff36Qou04rc27sbFRjRkzRk2bNk2tXLlS5efnqxUrVqhNmzYFOfL2aW3eb7/9tjKbzertt99W+fn56tNPP1WpqanqlltuCXLk7bNs2TJ11113qQ8++OCUPrPs3btXRUZGqltvvVVt375dPfPMM0qv16v//Oc/QYpYdGXdojCyfft2Bah169Y17/vkk0+Upmnq4MGDxz3vzDPPVDfddFMwQuxwbc1ZKaVycnJUenq6Kioq6lKFkfbk/EObN29WgMrNzQ1EmB2mo/J97733lMlkUm63OxBhdqj25vzll192+sLIuHHj1Ny5c5v/7fV6VVpamlqwYMExj7/ooovUeeed12JfVlaWuuaaawIaZ0dpbb4/1LNnTymMiDYLpzY03NqVJu1pX5RSyuPxqOjoaPXGG28EKsSAaUvuHo9HTZgwQf3tb39Tl156aZcsjLQ27+eff1716dNHuVyuYIUYEK3Ne+7cuerss89use/WW29VEydODGicgXQqn1nuuOMONWTIkBb7Lr74YjV16tRAhia6iW5xK813332H3W5nzJgxzfumTJmCTqdjzZo1Jzz37bffJiEhgaFDh3LnnXdSV1cX6HA7RFtzrqurY9asWSxcuJCUlJRghNph2vM+N6mtreW1116jd+/eZGRkBCrUDtER+QJUVVVhs9kwGAyBCLNDdVTOnZXL5WLDhg1MmTKleZ9Op2PKlCl89913xzznu+++a3E8wNSpU497fGfSlnyF6Cjh0oaGW7vSpCPal7q6OtxuN3FxcYEKMyDamvt9991HUlISV1xxRTDC7HBtyfvDDz8kOzubuXPnkpyczNChQ3nooYfwer3BCrvd2pL3hAkT2LBhQ/PtNnv37mXZsmVMmzYtKDGHSndo20TodM5evpUcDgdJSUkt9hkMBuLi4nA4HMc9b9asWfTs2ZO0tDS2bNnCn/70J3bt2sUHH3wQ6JDbra0533LLLUyYMIHzzz8/0CF2uLbmDPDcc89xxx13UFtby8CBA/nss88wmUyBDLfd2pNvk9LSUu6//36uvvrqQITY4Toi586stLQUr9dLcnJyi/3JycnHnffG4XAc8/iu8Hq0JV8hOkq4tKHh1q406Yj25U9/+hNpaWlHfZDq7NqS+8qVK3nllVfYtGlTMEIMiLbkvXfvXr744gtmz57NsmXLyM3N5brrrsPtdjN//vxghN1ubcl71qxZlJaW8pOf/ASlFB6Ph2uvvZb/+7//C0bIIXO8tq26upr6+noiIiJCFJnoCjr1iJF58+YdNTnqj7f2XFxfffXVTJ06lWHDhjF79mzefPNNli5dSl5eXgdm0TqBzPnDDz/kiy++6HSTGQb6fQaYPXs2OTk5fPXVVwwYMICLLrooZBNQBSNfgOrqas477zwGDx7Mvffe2/7A2yFYOQshur9wbENFx3v44YdZvHgxS5cuxWKxhDqcgHI6ncyZM4eXX36ZhISEUIcTVD6fj6SkJF566SVGjx7NxRdfzF133cULL7wQ6tACasWKFTz00EM899xzbNy4kQ8++ICPP/6Y+++/P9ShCdFpdeoRI7fddhuXXXbZCY/p06cPKSkplJSUtNjv8XgoLy9v1e0iWVlZAOTm5tK3b99Wx9sRApnzF198QV5eHna7vcX+GTNmcMYZZ7BixYr2hN5mwXifY2JiiImJoX///owfP57Y2FiWLl3KzJkz2xt+qwUjX6fTyTnnnEN0dDRLly7FaDS2N+x2Cfb/5c4qISEBvV5PcXFxi/3FxcXHzS8lJaVVx3cmbclXiJMJxzb0RMKtXWnSnvbl8ccf5+GHH+bzzz9n+PDhgQwzIFqbe15eHvv27WP69OnN+3w+H+AfRbVr166QXfe2Rlve89TUVIxGI3q9vnnfaaedhsPhwOVydfrRw9C2vO+55x7mzJnDlVdeCcCwYcOora3l6quv5q677kKn69TfjbfZ8do2m80mo0XESXXqwkhiYiKJiYknPS47O5vKyko2bNjA6NGjAX8RwOfzNRc7TkXT8MLU1NS2BdwBApnzvHnzmhvIJsOGDeOJJ55o0VkGW7DfZ+WfdJjGxsY2x9wegc63urqaqVOnYjab+fDDDzvFN2HBfo87K5PJxOjRo1m+fHnzMok+n4/ly5dz/fXXH/Oc7Oxsli9fzs0339y877PPPiM7OzsoMbdHW/IV4mTCsQ09kXBrV5q0tX159NFHefDBB/n0009bzD/TlbQ290GDBrF169YW++6++26cTidPPfVUp59zrUlb3vOJEyeyaNEifD5fczFg9+7dpKamdomiCLQt77q6uqOKH03FIaVUYAMOoezs7KOWYu5qbZsIodDO/dpxzjnnHHX66aerNWvWqJUrV6r+/fu3WJKvsLBQDRw4UK1Zs0YppVRubq6677771Pr161V+fr7617/+pfr06aMmTZoUqhRarbU5HwtdaFUapVqfc15ennrooYfU+vXr1f79+9WqVavU9OnTVVxc3EmXtOsMWptvVVWVysrKUsOGDVO5ubktlqLuCssTK9W2v+uioiKVk5OjXn75ZQWor7/+WuXk5KiysrJQpHBCixcvVmazWb3++utq+/bt6uqrr1Z2u105HA6llFJz5sxR8+bNaz5+1apVymAwqMcff1zt2LFDzZ8/v0stq9nafBsbG1VOTo7KyclRqamp6vbbb1c5OTlqz549oUpBdGHh0oaGW7vSpLV5P/zww8pkMql//OMfLd5bp9MZqhTarLW5/1hXXZWmtXkfOHBARUdHq+uvv17t2rVLffTRRyopKUk98MADoUqhTVqb9/z581V0dLR655131N69e9V///tf1bdvX3XRRReFKoU2cTqdzdcEgPrrX/+qcnJy1P79+5VSSs2bN0/NmTOn+fim5Xr/+Mc/qh07dqiFCxfKcr3ilHWbwkhZWZmaOXOmslqtymazqcsvv7xFR5efn68A9eWXXyql/A3lpEmTVFxcnDKbzapfv37qj3/8o6qqqgpRBq3X2pyPpasVRlqb88GDB9W5556rkpKSlNFoVD169FCzZs1SO3fuDFEGrdPafJuWqz3Wlp+fH5okWqktf9fz588/Zs6vvfZa8BM4Bc8884zKzMxUJpNJjRs3Tq1evbr5sTPPPFNdeumlLY5/77331IABA5TJZFJDhgxRH3/8cZAjbp/W5Nv0/v54O/PMM4MfuOjywqkNDbd2pUlr8u7Zs+cx39v58+cHP/AO0Nr3/Ie6amFEqdbn/e2336qsrCxlNptVnz591IMPPtipC53H05q83W63uvfee1Xfvn2VxWJRGRkZ6rrrrlMVFRUhiLztjtcmN+V66aWXHnV98OWXX6qRI0cqk8mk+vTp02mvBUXnoynVjcdTCSGEEEIIIYQQQpxA95x5RwghhBBCCCGEEOIUSGFECCGEEEIIIYQQYUsKI0IIIYQQQgghhAhbUhgRQgghhBBCCCFE2JLCiBBCCCGEEEIIIcKWFEaEEEIIIYQQQggRtqQwIoQQQgghhBBCiLAlhREhhBBCCCGEEEKELSmMCCGEEEIIIYQQImxJYUQIIYQQQgghhBBhSwojQgghhBBCCCGECFv/H4RPaG9g2wA4AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "predictive = Predictive(model, guide=guide, num_samples=num_samples)\n", + "svi_mvn_samples = {k: v.reshape(num_samples).detach().cpu().numpy() \n", + " for k, v in predictive(log_gdp, is_cont_africa, ruggedness).items()\n", + " if k != \"obs\"}\n", + "fig, axs = plt.subplots(nrows=2, ncols=2, figsize=(12, 10))\n", + "fig.suptitle(\"Marginal Posterior density - Regression Coefficients\", fontsize=16)\n", + "for i, ax in enumerate(axs.reshape(-1)):\n", + " site = sites[i]\n", + " sns.distplot(svi_mvn_samples[site], ax=ax, label=\"SVI (Multivariate Normal)\")\n", + " sns.distplot(hmc_samples[site], ax=ax, label=\"HMC\")\n", + " ax.set_title(site)\n", + "handles, labels = ax.get_legend_handles_labels()\n", + "fig.legend(handles, labels, loc='upper right');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's compare the posterior computed by the Diagonal Normal guide vs the Multivariate Normal guide. Note that the multivariate distribution is more dispresed than the Diagonal Normal." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABGUAAAJOCAYAAAAeUbqRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3XdUFFfDBvBnKUsvCgqICAoKdgUrWLCCBUuwN0Q0sb76oUnUqGgSe40tRt+oqLEbjbFFxYqYYENjsMTewIZYQIpwvz88Oy/r7sKCyFKe3zmeI3fuzNxpLPPsnTsyIYQAEREREREREREVKD1dN4CIiIiIiIiIqCRiKENEREREREREpAMMZYiIiIiIiIiIdIChDBERERERERGRDjCUISIiIiIiIiLSAQNdN4CIiIiIiIg+LSEE3r17h4yMDF03hahE0dfXh4GBAWQymdrpDGWIiIiIiIiKsbS0NMTFxSE5OVnXTSEqkUxNTeHg4AC5XK4yTSaEEDpoExEREREREX1imZmZ+Pfff6Gvr48yZcpALpdr/MaeiPKXEAJpaWl4+vQpMjIyULlyZejpKY8iw54yRERERERExVRaWhoyMzPh5OQEU1NTXTeHqMQxMTGBoaEh7t69i7S0NBgbGytN50C/RERERERExdyH384TUcHJ7vrjlUlEREREREREpAMMZYiIiIiIiKjE+/nnn9G2bds8zevi4oJFixblc4sKxsCBA9GlSxddN+OT+HDbevXqhfnz5+uwRaoYyhAREREREVGh8/TpUwwbNgwVKlSAkZER7O3t4efnh1OnTiEtLQ22traYNWuW2nm/++472NnZIT09HWvXroW1tXW260pJScHkyZMRFhYmlU2dOhUymQwymQwGBgawtbVFs2bNsGjRIqSmpirNf+bMGXz++ecfv9GF0LFjxyCTyVC9enWVV6pbW1tj7dq1umlYHkyaNAnTp0/Hy5cvdd0UCUMZIiIiIiIiKnQCAwNx4cIFhIeH4/r169i9ezd8fX3x/PlzyOVy9OvXD2vWrFGZTwiBtWvXYsCAATA0NNRqXdu3b4elpSV8fHyUyqtXr464uDjcu3cPR48eRffu3TFz5kx4e3vj9evXUr0yZcoU+4GUb926hXXr1uXrMtPS0vJ1eTmpUaMGXF1dsWHDhgJdb3YYyhCRTh06dAjBwcGoUqUKLC0tYWRkBAcHB7Rp0wYLFy7E06dPdd1EyoGLiwtkMhnu3Lmj66bo3MOHD9G/f3+UK1cOBgYGkMlkGDhwYL4suzDtZ0Vbsv4zMjJChQoV0LNnT5w8eVLXTdSJgQMHQiaTFZpvDNeuXatynORyOWxtbVGtWjX06dMHK1euxKtXrzQuQ/HtqK+vb8E1PBuKbfrwuips7QSAO3fuQCaTwcXFRddNISqSEhMTcfLkScyePRstWrSAs7MzGjRogAkTJqBTp04AgJCQEFy/fh2RkZFK8x4/fhy3bt1CSEiI1uvbvHkzAgICVMoNDAxgb2+PcuXKoWbNmhg1ahSOHz+Oy5cvY/bs2VK9Dx9fWrBgAWrWrAkzMzM4OTlh+PDhePPmjdKyV61aJb0Vq2vXrliwYIFKj54ff/wRrq6ukMvlcHd3x/r165Wmy2Qy/Pe//0XXrl1hamqKypUrY/fu3dL0jIwMhISEoGLFijAxMYG7uzt++OEHrfdLVqNGjUJYWJhKL6Gs7t27h86dO8Pc3ByWlpbo0aMHHj9+LE2fOnUq6tSpg//+97+oWLGi9CYiX19fjBo1CmPGjEGpUqVgZ2eHVatWISkpCcHBwbCwsICbmxv279//0dsWEBCAzZs352kffAoMZYhIJ549e4Y2bdqgbdu2WLt2LdLT09GiRQsEBgaiatWqiIqKQmhoKCpVqoS//vpL180tsQrbTWZhJoTAZ599hg0bNqBUqVLo2bMngoKC0KRJkxznVXSPnjp16qdvaD7y8fFBUFAQgoKC0K5dO2RmZmLr1q1o3rw5FixYUODtKYw35oWBmZmZdJx69eoFHx8f6OvrY8uWLfjiiy9Qrlw5LF68GEKIT9YGTWFKUVaYglKi3BJCIDntnU7+afu7xtzcHObm5ti1a5fGEKBmzZqoX78+Vq9erVS+Zs0aeHt7w8PDQ+t9EhkZiXr16mlV18PDA+3atcOvv/6qsY6enh4WL16Mf/75B+Hh4Thy5Ai++uorafqpU6cwdOhQjB49GjExMWjTpg2mT5+utIydO3di9OjRGDt2LC5fvowvvvgCwcHBOHr0qFK9adOmoUePHrh06RLat2+Pvn37IiEhAQCQmZmJ8uXLY9u2bYiNjcWUKVMwceJEbN26VdtdIxkzZgzevXuHJUuWqJ2emZmJzp07IyEhAcePH8ehQ4dw69Yt9OzZU6nejRs3sGPHDvz666+IiYmRysPDw2Fra4vo6GiMGjUKw4YNQ/fu3eHt7Y3z58+jbdu26N+/P5KTkz9q2xo0aIDo6Ohsw6WCZKDrBhBRyfPy5Us0adIE165dg4eHB1auXImmTZsq1UlNTUV4eDjCwsIQFxeno5aSNiIiIpCeng5HR0ddN0Wn7t69i+joaFSoUAEXL16EgUHx/4gdPHiw0k12SkoKvvjiC6xbtw5fffUVOnbsiCpVquiugQVs5syZGD9+PBwcHHTdFCW2trZqg9W4uDjMmTMHP/zwA0aPHo0HDx5gzpw5SnUaNGiAK1euFJou+V27dkWjRo1gZWWl66bkyNHREVeuXNH60QmigvQ2PQPVpvyhk3XHfusHU3nOn5EGBgZYu3YthgwZghUrVsDT0xPNmzdHr169UKtWLaleSEgIxo0bh8WLF8Pc3ByvX7/G9u3bsXjxYq3blJiYiJcvX6JcuXJaz+Ph4YGDBw9qnD5mzBjp/y4uLvj+++8xdOhQLF++HACwZMkStGvXDuPGjQMAVKlSBVFRUdizZ48037x58zBw4EAMHz4cABAaGoo///wT8+bNQ4sWLaR6AwcORO/evQEAM2bMwOLFixEdHQ1/f38YGhpi2rRpUt2KFSvi9OnT2Lp1K3r06KH19gKAqakpwsLCMHHiRAwZMkTld3FERAT+/vtv3L59G05OTgCAdevWoXr16jhz5gzq168P4P0jS+vWrUOZMmWU5q9duzYmTZoEAJgwYQJmzZoFW1tbDBkyBAAwZcoU/Pjjj7h06RIaNWqU520rV64c0tLSEB8fD2dn51ztg0+BPWWIqMCNGjUK165dg4uLC06dOqUSyACAkZERPv/8c8TExKBq1ao6aCVpy9XVFR4eHiX+xuPevXsA3v9BUBICGXWMjY2xbNkymJmZISMjI9tvEIsjBwcHeHh4FInAAHjf3oULF2Lp0qUAgLlz56o8emZqagoPDw9UqFBBF01UYWVlBQ8Pj0IXfKljaGgIDw8PuLq66ropREVWYGAgHj16hN27d8Pf3x/Hjh2Dp6enUtDcu3dvZGRkSL0jtmzZAj09PZXeGdl5+/YtAEiP0mhDCAGZTKZx+uHDh9GqVSs4OjrCwsIC/fv3x/Pnz6VeHteuXUODBg2U5vnw5ytXrqiMcePj44MrV64olWUNqczMzGBpaYknT55IZcuWLYOXlxfKlCkDc3NzrFy5Uvq7JbdCQkJgY2Oj9OhW1vY6OTlJgQwAVKtWDdbW1kptdnZ2VglkPtwOfX192NjYoGbNmlKZnZ0dAHz0tpmYmACAdCx0jaEMERWoW7duYePGjQDeP2tbunTpbOvb2dnB3d1d+jnrYx737t1DSEgInJycYGhoqNItPjo6Gj169EC5cuUgl8tRtmxZBAQE4NChQ2rXlZqairlz58LLywsWFhaQy+Wwt7dH/fr18dVXX0ndQBX+/fdfDBo0CBUrVoSRkRHMzc3h7OyMDh06qB10LieHDx9GQEAA7OzsYGhoiFKlSqFy5cro168fTpw4oXaeiIgIfPbZZ3BwcJC2sWvXrjh9+rTG9SQnJ2PRokVo0qQJSpUqBSMjIzg7OyMgIEA6NoqxEMLDwwEAwcHBSuNSZH3MJrsu/MnJyZg1axY8PT1hYWEBU1NTVK9eHZMmTcKLFy9U6mcdg0EIgZUrV8LLywtmZmawsrJC27ZtNW5bfh8Pbc8fRZubN28O4P1z7Fn3VU6PNshkMulbnmnTpinNq+lRj6NHj6Jt27YoVaoUTExM4OnpmePAe9u3b4e/vz/KlCkDuVwOR0dH9OvXD7GxsdrtEC2Zm5tL1+yH2/7u3TusWLEC3t7esLKygrGxMSpXroz//Oc/ePjwodrlaXtcfX19pW8NPzwG6sb0yO21o1gW8L5bfOPGjWFlZaV0jHN63G/z5s1o1aoVSpcuLV13gwYNwvXr19XWz3pt/fbbb2jZsiVKly4NmUyGY8eOqZ0nL4YPHy59e/lhT5nsHgk7d+4cevbsifLly0Mul8PS0hKVKlVCYGAgfvvtN6XtCA4OBvC+a3rWY5N1ub6+vtK2nTx5EgEBAShTpgz09PSkfarNY1DJycmYOHEi3NzcYGxsjHLlyiEkJETtOabNI29Zj33WNty9exfA+yA26zYpjk1OY8o8ePAAo0aNQuXKlWFsbAwrKyv4+Pjgp59+Unm7yYfbnpSUhAkTJsDNzU16I01QUJDG64joQyaG+oj91k8n/0wM9XPVVmNjY7Rp0waTJ09GVFQUBg4cqPSGJEtLS3Tr1k36TFizZg169OgBc3NzrddhY2MDmUym9m8TTa5cuYKKFSuqnXbnzh107NgRtWrVwo4dO3Du3DksW7YMwKcZ2PbDL8ZkMhkyMzMBvP/sGTduHEJCQnDw4EHExMQgODg4z+0wMDDA9OnT8cMPP+DRo0d5WoaZmZnacnXbkbVM8bv4Y7dN8Te9umBIF0rmV3lEpDN79uxBRkYGrK2tpUHa8uLff/9F3bp1IZfL4ePjAyEEbG1tpemrVq3C0KFDkZmZibp168LX1xd3797Fnj17sGfPHkydOlXpAz0zMxMdOnRAREQELC0t0bRpU1hbW+Pp06f4999/MXfuXPTp00cKkS5fvgwfHx+8evUK7u7u6NixI/T19fHgwQOcOHECDx8+lG5CtBEeHi7Vb9CgAVq0aIG3b9/iwYMH2Lx5s/QKxqzGjRuH+fPnQ09PD/Xq1UPTpk1x7949/Pbbb/j999+xatUqlTbcv38f/v7+iI2NhampKXx8fGBjY4OHDx/i5MmT+Pvvv9GnTx+Ym5sjKCgIkZGRuHnzJnx8fODm5iYtp06dOjluU0JCAlq1aoWYmBhYWlqiZcuWMDQ0xPHjxzF9+nRs3LgRR44c0XjDEhwcjI0bN6Jp06bo2LEjYmJicOjQIZw4cQLHjx9Hw4YNpbr5fTxyc/4o9lV8fDz++OMP2NnZwd/fX1pWTn8UBgUFISYmBhcvXkTt2rWV9q268WhWr16N77//Hp6envD398edO3fw559/IigoCAkJCUrdpYH3QUjfvn2xdetWGBkZwcvLC46Ojrh+/Tp++eUX/Prrr/j111+V2vyxFAPHGhkZSWWpqano2LEjDh8+DGNjY7Ro0QKWlpaIiorCkiVLsGnTJvzxxx/w9PSU5snNcfX394exsbHaY5D1dwOQt2tHYdSoUVi+fDm8vb3RoUMH3Lp1K9tvSoH336YOHDgQ69atg4GBAZo1a4ayZcvi/PnzWLNmDbZs2YIdO3ZoPAbz58/H0qVLUa9ePfj7++PRo0fQ18/dTU1O+vXrhzNnzuDYsWN49+5djr29IiIi0K5dO6Snp6N27dpo3LgxMjIy8PDhQ+zduxcZGRno3LkzAKBbt274888/cerUKbi6uiqd1+rGe9i2bRtWrFgBDw8PtG7dGgkJCUrnUnbS0tLQqlUrXLp0Cb6+vvD09ERkZCRWr16Nffv24cSJE6hcuXIu9owqNzc3BAUFYfv27UhKSkJgYKDSdW5vb5/jMs6cOQN/f38kJCSgQoUK6NKlC16+fIljx44hKioKO3fuxO7duyGXy1XmffnyJby9vXHv3j00bdoUNWrUwOnTp7Fu3TocP34cFy9eLDK9tUh3ZDKZVo8QFUbVqlXDrl27lMpCQkLg6+uLPXv2ICoqCnPnzs3VMuVyOapVq4bY2Fi0bds2x/pXr17FgQMHMGHCBLXTz507h8zMTOmzBoDKOCfu7u44c+aMUtmHP1etWhWnTp1CUFCQVHbq1ClUq1ZNq+1S1Pf29pYegQKAmzdvaj2/Ot27d8fcuXOVHh1StPf+/fu4f/++1FsmNjYWiYmJuWqztvK6bZcvX0b58uVV/j7QGUFEVID69+8vAIiWLVvmaf6wsDABQAAQ/fr1EykpKSp1Ll26JAwMDIRMJhPr1q1TmrZv3z4hl8sFAHHw4EGp/Pjx4wKAqFu3rnj16pXKMs+cOSOePXsm/RwcHCwAiO+//16lbnJysjh+/HiutqtixYoCgDh58qTKtMePH4vz588rla1cuVIAEG5ubuLixYtK044fPy4sLCyEXC4X169fl8ozMjJEvXr1BADRtm1b8eTJE6X53r59K/bu3atUFhQUJACINWvWaGy7s7OzACBu376tVN6zZ08BQDRs2FBp371+/Vq0a9dOABDe3t5K89y+fVs6vs7OzuLatWvStHfv3olBgwZJ7c8qP49HXs4fIYQ4evSoACCaN2+u9boUFOd1WFiYxjqK/WxoaCh+//13pWlr1qwRAISVlZVITk5WmjZx4kTpONy6dUtp2rZt24S+vr4oVaqUePHihdbtVbRF3Xlx8eJFoaenJwCI1atXS+Vff/21ACBcXV2VzpW0tDQREhIiAIiKFSuK1NRUaVpuj6s2xyAv144QQjovLS0txenTp9UuW9P18uOPPwoAwtbWVly4cEEqz8zMlI69tbW1yjWp2M/6+vrit99+07hNmijOC2dn5xzrRkZGStt448YNqVzTPm3RooUAIDZs2KCyrMTERJV9pGhLUFCQxjY0b95casOyZcuy3aYPl6Nop+LY3r17V5r29u1bERgYKACIRo0aqZ0vu3NGsdwPafrdp6D4ffbh/k9JSZHmHTp0qEhLS5Om3bx5U7i4uAgAYuLEiWq3HYDw8/MTL1++lKYlJCSIOnXqCABixowZGreFSqa3b9+K2NhY8fbtW103JVeePXsmWrRoIdavXy8uXrwobt26JbZu3Srs7OzEoEGDlOpmZmYKNzc3UapUKeHh4aGyrDVr1ggrK6ts1xcaGioCAwOVysLCwkT16tVFXFycePjwobh06ZJYvHixKFu2rKhfv754/fq1VNfZ2VksXLhQCCFETEyMACAWLVokbt68KdatWyccHR0FAOnzNjIyUujp6Yn58+eL69evixUrVggbGxthbW0tLXPnzp3C0NBQLF++XFy/fl3Mnz9f6Ovri6NHj0p1AIidO3cqtdvKykr6LPrhhx+EpaWlOHDggLh27ZqYNGmSsLS0FLVr15bqBwUFic6dO2vcN4rflVn/VoiIiBAGBgbCwMBAWldmZqaoU6eOaNq0qTh37pz466+/hJeXl9Lv2LCwMKV1KzRv3lyMHj1aqSzrPlW3vXndtqCgIJVz6FPL7jpkKENEBcrf318AEL169crT/IobmNKlS4vExES1dRQ3eJ999pna6SNHjhQARJs2baSyrVu3CgDiP//5j1btaN++vQCgEpbklampaY5/LChkZGSIcuXKCQDi7NmzauvMmTNHABBjx46Vynbt2iUACAcHB6U/IrKT11Dm7t27Qk9PT8hkMpUbXyGEePDggTA2NhYAxKlTp6TyrKHM7t27VeaLi4sTAISRkZHSjUx+Ho+8nD9CFFwoExoaqna6h4eHACBOnDghlT1//lyYmJgIY2Nj8eDBA7XzDR8+XAAQS5Ys0bq96kKZxMREsXfvXuHq6ioAiHLlyok3b94IId7/IWJubq7xuCYlJQk7OzsBQPzyyy9SeW6Pa07HIK/XjhD/uzH/9ttvNa5f0/Wi2CeLFy9WmSczM1PUqlVLABDTp09XmqbYz3n9wzE3oczVq1elbfzrr7+kck37tFq1agKASEhIyFVbtAllsgvttQlldu3apTLf48ePhampqcrvHF2EMuvXr5euEXVfLGzfvl0AEBYWFkp/vCu23czMTDx69Ehlvs2bN3/Ulx5UfBXVUCYlJUWMHz9eeHp6CisrK2Fqairc3d3FpEmTVL6AEEKIGTNmCABizpw5KtO0CWX++ecfYWJiovT3ZdYvA/X19UXp0qVFkyZNxMKFC1Wu3w8DhAULFggHBwdhYmIi/Pz8xLp161SCjZUrVwpHR0dhYmIiunTpIr7//nthb2+vtNzly5eLSpUqCUNDQ1GlShWVL4xyCmVSUlLEwIEDhZWVlbC2thbDhg0T48eP/+hQRggh2rZtq/K5d/fuXdGpUydhZmYmLCwsRPfu3UV8fLzSPs2vUCYv2/b27VthZWWl8QuWT4WhDBEVGvkVyvTo0UNjHcUNkLqbPyGEuHDhggAgjI2Nxbt374QQQty4cUPo6+sLc3NzsXTpUrV/8GY1depUqffBgQMHPvoPHV9fXwFA9O/fX5w9e1ZkZGRorHv27Fmpx4Em0dHRAoBo3LixVDZ06FC1N5vZyWsoo7jp8PT01Dhf586dVXpBKG5iDAwMlEKXrEqVKiUAiLi4OKksP49HXs4fIQoulMn67VhWXbt2FQDEpk2bpDLFzV2rVq00LlcRSPbu3Vvr9iraoumfq6uriImJkeqfPHlSClM1GT16tAAgBg8eLJXl9rjmdAzyeu0I8b8b89jYWI3zqrte7t+/L82btWdDVgsXLhQAROvWrZXKFft53759GteZndyEMrGxsVI7o6OjpXJN+3TgwIECgGjXrp04efKkSE9P16ot2oQyy5cvz/VyFO20trYWmZmZauf97LPPVMIvXYQyiuBXU8CamZkp/Z6LjIyUyhXbrqmtFy9eFACEu7u7xm2hkqmohjK60K1bN532Nhs8eLBo0qSJztZfEixfvlzli7WCkN11WDQfJCSiIksxoFbWUdPzQtM4JACkgQ41Db6meBNGSkoKnj9/jrJly8LV1RULFy7El19+iZEjR2LkyJFwdnZG48aN0bFjR3Tv3l3p2f4vv/wSkZGROHz4sPS6wdq1a6NZs2bo1auXNGgm8P6541mzZqm0o0mTJhg8eDAAYPny5ejYsSPWr1+P9evXw8LCAvXr10fLli3Rv39/pTef3Lp1C8D7Z2ZzGsvi6dOn0v8Vg1KqG8Mhv+V0DID/HQd1A1M6ODhofJuTpaUlXrx4gZSUFKksN8fjY9uu7vwpSJregmNpaQkASvtFca5ERETk6lzRVtaxhhSD5TZq1Aj+/v5KY5Lk9XzIz+MK5P3aySq73z3qKLbHxsZGOkYfyu5ayMs68+LZs2fS/3MagB14//rvS5cuYf/+/di/f7804LSvry/69u37UW/N+5jtVQyOrI7i/Hvw4EGel58fcroeZDIZKlasiBcvXqg9J3LzO4CIcmfu3Ln4/fffC2x98+bNQ5s2bWBmZob9+/cjPDxcemU2fRqGhoZYsmSJrpuhhKEMERUoLy8vrF+/HufPn0dGRkaeB6tUvMouP40aNQo9evTA7t27ERkZicjISGzevBmbN29GWFgYTp48Kb2G1dTUFIcOHcKZM2dw4MABREVFISoqCmfPnsWCBQswfPhwaZT9+Ph46S1GH1KEMlWrVsW1a9dw8OBBHDlyBFFRUTh58iSOHDmCb7/9Fj///DP69esH4H8jztvb28PPzy/bbSo0A5jlkmJQPG3l5ngUdbnZN4pzxc3NTeWVmh/KS1g3ePDgbN+C87Hy+7jmx7XzKX735KQg1nn+/HkAgIWFhVahiL29Pc6ePYvjx4/j8OHDOHXqFP766y+cOnUKM2bMwMyZM/H111/nqS2fenuFEFrXVZwzhUlufz8SkfZcXFwwatSoAltfdHQ05syZg9evX6NSpUpYvHix9LchfRqFcf8ylCGiAtWxY0eEhoYiMTERu3fvRteuXfN9HY6Ojrh58yZu3bqFGjVqqExXfFtubGys8o2wnZ0dhgwZgiFDhgB438tl0KBBOH36NMaPH68SrtSvX1/6tv7du3fYtWsXBgwYgOXLl6Nbt25o0aIFfH19tboJMDAwQPv27dG+fXsA799gs2DBAkybNg1ffPEFunbtCjMzM2k0exsbG42v3lVH8e3q1atXtZ4nrxwdHQH8b1+ro5imqJsftDkeOfmY86ewUZwr7u7uuTpX8pviGN++fVtjnezOh/w4rgDyfO18DMX2PH/+HK9evVLbW+ZTXAu59csvvwAAWrZsqXVYrniVtOJ10ikpKVi7di1GjBiBiRMnolu3blIvoIKS3SvoFdPKly8vlSl6QL5+/VrtPIoehvlJm9+PimtFl+cEEX16H76RiUomRu1EVKBcXV3Ru3dvAMDYsWORkJCQbf0nT57g2rVruVqH4gZB003X6tWrAQBNmzbN8bWvHh4e0re9MTEx2dY1MDBAt27dpG/gc6qfE0tLS0ydOhXW1tZITk7G9evXAby/QbW1tUVsbCz++ecfrZeneN3upk2bkJSUpNU8ihuWd+/e5artzZo1g56envSq5w/FxcXhwIEDAKD1DXVu5fV45Of5o6287uectGrVCnK5HMeOHfvoRwY/Rr169WBubo6EhATs3r1bZfrbt2+xefNmADmfD9kd15z2Y16vnY9Rvnx5KZhQd04JIaTyT3Ut5GT58uXSa1i/+uqrPC/H2NgYQ4cORa1atZCZmYlLly5J0z7VOf6hxMREtY8ePH36VPqdo7jGAeWAJC0tTWW+vXv3alxXXrdJsf4tW7aofdRo586dePHiBSwsLODl5ZWrZRMRUdHDUIaICtySJUvg5uaG27dvo0mTJoiMjFSpk5aWhtWrV6Nu3bq4cuVKrpY/evRoGBgYYNeuXdiwYYPStIMHD+Knn34CAIwbN04qP3LkCPbt24f09HSl+kII7NmzBwDg7OwslS9fvlxtWBQfH4+zZ8+q1M9OcnIyFixYoHYMi5MnTyIxMRH6+vrSt7uGhoYICwuDEAJdu3ZVu/8yMjJw5MgR/Pnnn1JZp06dULduXTx69Ajdu3fH8+fPleZJSUnB/v37lcohOHWUAAAgAElEQVQU68ztDWyFChXQvXt3CCHwxRdfKK0rKSkJn3/+OVJSUuDt7Q1vb+9cLVud/DweeTl/PlZe93NO7OzsMGrUKCQlJSEgIAB///23Sp3U1FTs3r37k/agMjY2xogRIwC8D2Oz9j5IT0/H6NGjER8fj4oVK6Jbt27StNweV8V+/Pfff1WuZSDv187HUpwr3333nVJIKYTA999/j5iYGFhbW0s99ApKfHw8QkNDMXLkSADAhAkTtL4e582bh3v37qmUX716Ff/++y8A9ccmNjb2Y5udo7FjxyqNG5OamooRI0YgKSkJDRo0UHqUz9nZGZUrV0ZiYiJmz56ttJxjx45hypQpGteT1+u2e/fuqFChAh49eoTQ0FClUOf27dsYO3YsgPeP1BobG+dq2UREVAQV4IDDRESSx48fS28cAiAqVqwoOnfuLHr37i1atmwpvT7X0tJS6fWs2rylRgghfvrpJ6Gnpye9AahPnz7Cx8dHyGQyAUBMnTpVqb7i7SeWlpbC19dX9OnTR3Tt2lV6u4aVlZW4cOGCVL927dpSuwMCAkTfvn1F27ZthYmJifRK0pzeRqLw4sULAUDo6emJ2rVri27duonevXuLxo0bS+2dMmWKynxffvmltP+qV68uOnfuLHr16iV8fX2FtbW1ACB+/PFHpXnu3Lkj3N3dBQBhamoq2rZtK3r37i2aNWsmrKysVN4ScvHiRaGnpyf09PRE69atRXBwsAgJCRG//fabVEfTG0iePXsm7ScrKyvRpUsX0a1bN1GmTBlp3304j6a3lWSlbn35eTyEyP35I8THvX0pPj5emJmZCQDCx8dHDBw4UISEhIjVq1dnu91ZaXpTVnp6uujTp490jtWtW1cEBgaKnj17Ch8fH2m9+/fv17q96l6JnZOUlBTRqlUrAUCYmJiI9u3bi549e4oKFSoIAMLGxkblNdV5Oa716tWT3kDTt29fERISIr7++mulOnm5dhT1s6PpGGRmZor+/ftLbxZr1aqV6N27t3QtmpiYqH3DUk7HPCdZX6EcFBQkgoKCRP/+/UWXLl1EzZo1pXPc3NxcLFmyRO1bizSd11ZWVgKA8PDwEF27dhV9+vQRvr6+wsDAQAAQAwYMUKqfmpoqvY68bt26YsCAASIkJETp1bWKty9pesNY1m3S9Palxo0bi4YNGwpTU1PRsWNH0aNHD2m9ZcuWFVevXlVZ5o4dO6Rru06dOqJ79+7Cy8tLyGQyMWXKFI3HfunSpdL+++yzz0RISIgICQmR1pHd77Po6GhRunRpaXrPnj1F+/bthbGxsQAg/Pz8RGpqqlbbrqDN708qmfj2JSLd4yuxiajQ2r9/vxgwYIBwc3MT5ubmwtDQUNjb24s2bdqIRYsWiefPnyvV1zaUEUKIP//8U3Tr1k3Y29sLAwMDYWNjIzp06CAOHjyoUvfGjRti6tSpolWrVqJChQrC2NhYlCpVStSqVUuMHz9e3L9/X6n+nj17xLBhw0TdunVFmTJlhFwuF+XLlxe+vr4iPDxc4+uc1UlPTxcrVqwQvXv3Fh4eHsLKykqYmJgIV1dXERgYKCIiIjTOe+rUKdG3b1/h7OwsjIyMhIWFhahSpYro0qWL+O9//ysSEhJU5nn9+rWYPXu2qF+/vrCwsBBGRkbC2dlZdOrUSWzevFml/s6dO4WPj4+wsLCQblyy7v/sbhyTkpLEzJkzRZ06dYSpqakwNjYWVatWFRMnTlTbtryGMvl5PBRyc/4I8XGhjBBCnDhxQrRu3VqUKlVKulnOevOV11BGYd++feKzzz4Tjo6OwtDQUFhbW4uqVauKXr16iY0bN4qkpCSt25qXUEaI9+f68uXLRaNGjYSFhYWQy+XC1dVVjBo1Sjx48EClfl6O6927d0WfPn2Eg4ODFBCoO59ye+18TCijsHHjRin4MTQ0FE5OTmLgwIFqgwIh8i+UyfrP0NBQlC5dWjr2P/30k8ZXdQuh+bzesGGDCA4OFjVq1BClS5eWfo+0a9dO7Ny5U23A8/fff4tOnTqJMmXKSOd41uXmRyjTvHlz8ebNG/Hll1+KihUrCrlcLuzs7MTAgQPFvXv3NC537969wsfHR5iamgozMzPRqFEjsWXLFiGE5mOfkZEhZs6cKapXry6FKVnbn9Pvs3v37okRI0aISpUqCblcLiwsLETjxo3Fjz/+qDZEZihDecVQhkj3srsOZULkYgh6IiIiIiIiKjJSUlJw+/ZtVKxYkY/EEelIdtchx5QhIiIiIiIiItIBvhKbiIiIiIioJEq8DyQ/z7lefjG1AaydCm59REUAQxkiIiIiIqKSJvE+sNQLeJdacOs0MAJGniu0wczPP/+MLVu24ODBg59sHS4uLhgzZgzGjBmjsc7UqVOxa9cuxMTEfLJ2KMhkMuzcuRNdunT55OsqLtauXYsxY8YgMTERALBixQrs3bsXv//+e56Wx8eXiIiIiIiISprk5wUbyADv15eLnjlPnz7FsGHDUKFCBRgZGcHe3h5+fn44deoU0tLSYGtri1mzZqmd97vvvoOdnR3S09Oxdu1aWFtbZ7uulJQUTJ48GWFhYVLZ1KlTIZPJ4O/vr1J/7ty5kMlk8PX11Xp71JHJZNi1a5dS2bhx4xAREfFRy9VWXFwc2rVrp3X9qVOnok6dOvmybplMBmNjY9y9e1epvEuXLhg4cGC+rKMgDBo0COfPn8fJkyfzND9DGSIiIiIiIip0AgMDceHCBYSHh+P69evYvXs3fH198fz5c8jlcvTr1w9r1qxRmU8IgbVr12LAgAEwNDTUal3bt2+HpaUlfHx8lModHBxw9OhRPHjwQKl89erVqFChQt43Lhvm5uawsbH5JMtWSEtLAwDY29vDyMjok64rOzKZDFOmTMnXZQoh8O7du3xdZnbkcjn69OmDxYsX52l+hjJERERERERUqCQmJuLkyZOYPXs2WrRoAWdnZzRo0AATJkxAp06dAAAhISG4fv06IiMjleY9fvw4bt26hZCQEK3Xt3nzZgQEBKiUly1bFm3btkV4eLhUFhUVhWfPnqFDhw5KdX19fVUeS8qu14eLiwsAoGvXrpDJZNLPWXujHDx4EMbGxtKjMgqjR49Gy5YtAQDPnz9H79694ejoCFNTU9SsWRObNm1SadvIkSMxZswY2Nraws/PD4BqT52vv/4aVapUgampKSpVqoTJkycjPT0dwPvHdqZNm4aLFy9CJpNBJpNh7dq1AN4fr8GDB6NMmTKwtLREy5YtcfHiRbXbndXIkSOxYcMGXL58WWOd1NRU/Oc//0HZsmVhbGyMJk2a4MyZM9L0Y8eOQSaTYf/+/fDy8oKRkREiIyOl/agI0MzNzTF8+HBkZGRgzpw5sLe3R9myZTF9+nSl9S1YsAA1a9aEmZkZnJycMHz4cLx58ybb7QgICMDu3bvx9u3bHLf5QwxliIiIiIiIqFAxNzeHubk5du3ahdRU9Y9Z1axZE/Xr18fq1auVytesWQNvb294eHhovb7IyEjUq1dP7bRBgwZJ4QPwvpdM3759IZfLtV6+OopgYc2aNYiLi1MKGhRatWoFa2tr7NixQyrLyMjAli1b0LdvXwDvH73y8vLC3r17cfnyZXz++efo378/oqOjlZYVHh4OuVyOU6dOYcWKFWrbZGFhgbVr1yI2NhY//PADVq1ahYULFwIAevbsibFjx6J69eqIi4tDXFwcevbsCQDo3r07njx5gv379+PcuXPw9PREq1atkJCQkO0+8PHxQceOHTF+/HiNdb766ivs2LED4eHhOH/+PNzc3ODn56ey7PHjx2PWrFm4cuUKatWqBQC4efMm9u/fjwMHDmDTpk34+eef0aFDBzx48ADHjx/H7NmzMWnSJPz111/ScvT09LB48WL8888/CA8Px5EjR/DVV19lux316tXDu3fvlJajLYYyREREREREVKgYGBhg7dq1CA8Ph7W1NXx8fDBx4kRcunRJqV5ISAi2bdsm9WR4/fo1tm/fjkGDBmm9rsTERLx8+RLlypVTO71jx4549eoVTpw4gaSkJGzdujVXy9ekTJkyAABra2vY29tLP2elr6+PXr16YePGjVJZREQEEhMTERgYCABwdHTEuHHjUKdOHVSqVAmjRo2Cv78/tm7dqrSsypUrY86cOXB3d4e7u7vaNk2aNAne3t5wcXFBQEAAxo0bJy3HxMQE5ubmMDAwgL29Pezt7WFiYoLIyEhER0dj27ZtqFevHipXrox58+bB2toa27dvz3E/zJw5EwcOHFA7JktSUhJ+/PFHzJ07F+3atUO1atWwatUqmJiY4Oeff1aq++2336JNmzZwdXVF6dKlAQCZmZlYvXo1qlWrhoCAALRo0QLXrl3DokWL4O7ujuDgYLi7u+Po0aPScsaMGYMWLVrAxcUFLVu2xPfff6+yLz9kamoKKysrlfFxtMFQhoiIiIiIiAqdwMBAPHr0CLt374a/vz+OHTsGT09PpV4rvXv3RkZGhnTTvGXLFujp6Uk9OLSheOTE2NhY7XRDQ0Np/Jpt27ahSpUqUk+MgtC3b18cO3YMjx49AgD88ssv6NChgzR4cUZGBr777jvUrFkTpUuXhrm5Of744w/cu3dPaTleXl45rmvLli3w8fGBvb09zM3NMWnSJJXlfOjixYt48+YNbGxspB5O5ubmuH37Nm7evJnjOqtVq4YBAwao7S1z8+ZNpKenK431Y2hoiAYNGuDKlStKddX1dHJxcYGFhYX0s52dHapVqwY9PT2lsidPnkg/Hz58GK1atYKjoyMsLCzQv39/PH/+HMnJydluh4mJSY511GEoQ0RERERERIWSsbEx2rRpg8mTJyMqKgoDBw5UekOSpaUlunXrJg34u2bNGvTo0QPm5uZar8PGxgYymQwvXrzQWGfQoEHYtm0bli1bprGXjJ6eHoQQSmWK8Vg+Rv369eHq6orNmzfj7du32Llzp/ToEvD+TVA//PADvv76axw9ehQxMTHw8/OTBvNVMDMzy3Y9p0+fRt++fdG+fXvs2bMHFy5cwDfffKOynA+9efMGDg4OiImJUfp37do1fPnll1pt47Rp03D+/HmVN1Hlhrrt+3CgZ5lMprYsMzMTAHDnzh107NgRtWrVwo4dO3Du3DksW7YMAHLcDwkJCWp7O+WEoQwREREREREVCdWqVUNSUpJSWUhICCIjI7Fnzx5ERUXlaoBf4P3bc6pVq4bY2FiNdapXr47q1avj8uXL6NOnj9o6ZcqUQVxcnPRzRkZGtgPYAu9Dg4yMjBzb2LdvX/zyyy/4/fffoaenpzTI8KlTp9C5c2f069cPtWvXRqVKlXD9+vUcl/mhqKgoODs745tvvpEeQ/rwcRy5XK7SXk9PT8THx8PAwABubm5K/2xtbbVat5OTE0aOHImJEycqLd/V1VUaB0chPT0dZ86cQbVq1XK9jTk5d+4cMjMzMX/+fDRq1AhVqlSReihl5+bNm0hJSUHdunVzvU6GMkRERERERFSoPH/+HC1btsSGDRtw6dIl3L59G9u2bcOcOXPQuXNnpbrNmjWDm5sbBgwYAA8PD3h7e+d6fX5+fipvcfrQkSNHEBcXJz029KGWLVti79692Lt3L65evYphw4apvDXpQy4uLoiIiEB8fHy2PXX69u2L8+fPY/r06ejWrZvSa6wrV66MQ4cOISoqCleuXMEXX3yBx48fZ7tedSpXrox79+5h8+bNuHnzJhYvXoydO3eqtPf27duIiYnBs2fPkJqaitatW6Nx48bo0qULDh48iDt37iAqKgrffPMNzp49q/X6J0yYgEePHuHw4cNSmZmZGYYNG4Yvv/wSBw4cQGxsLIYMGYLk5ORch2/acHNzQ3p6OpYsWYJbt25h/fr1GgdFzurkyZOoVKkSXF1dc71OhjJEREREREQljakNYGCUc738ZGD0fr1aMDc3R8OGDbFw4UI0a9YMNWrUwOTJkzFkyBAsXbpUqa5MJsOgQYPw4sWLPA/AGxISgn379uHly5ca65iZmWkMZID3jzgFBQVhwIABaN68OSpVqoQWLVpku9758+fj0KFDcHJyyraXhZubGxo0aIBLly4pPboEvB+c19PTE35+fvD19YW9vT26dOmS7XrV6dSpE/7v//4PI0eORJ06dRAVFYXJkycr1QkMDIS/vz9atGiBMmXKYNOmTZDJZNi3bx+aNWuG4OBgVKlSBb169cLdu3dhZ2en9fpLly6Nr7/+GikpKUrls2bNQmBgIPr37w9PT0/cuHEDf/zxB0qVKpXrbcxJ7dq1sWDBAsyePRs1atTAL7/8gpkzZ+Y436ZNmzBkyJA8rVMmPnzojYiIiIiIiIqFlJQU3L59GxUrVlQdyDbxPpD8vOAaY2oDWDsV3PpyqXv37vD09MSECRN03RQqQv755x+0bNkS169fh5WVldo62V2HBgXRSCIiIiIiIipkrJ0KdUhS0ObOnYvff/9d182gIiYuLg7r1q3TGMjkhD1liIiIiIiIiqlse8oQUYHI7jrkmDJERERERERERDrAUIaIiIiIiIiISAcYyhARERERERVzHLWCSHeyu/4YyhARERERERVThoaGAIDk5GQdt4So5FJcf4rrMSu+fYmIiIiIiKiY0tfXh7W1NZ48eQIAMDU1hUwm03GriEoGIQSSk5Px5MkTWFtbQ19fX6UO375ERERERERUjAkhEB8fj8TERF03hahEsra2hr29vdpAlKEMERERERFRCZCRkYH09HRdN4OoRDE0NFTbQ0aBoQwRERERERERkQ5woF8iIiIiIiIiIh1gKENEREREREREpAMMZYiIiIiIiIiIdIChDBERERERERGRDjCUISIiIiIiIiLSAYYyREREREREREQ6wFCGiIiIiIiIiEgHGMoQEREREREREekAQxkiIiIiIiIiIh1gKENEREREREREpAMMZYiIiIiIiIiIdIChDBERERERERGRDjCUISIiIiIiIiLSAYYyREREREREREQ6wFCGiIiIiIiIiEgHilwos2zZMri4uMDY2BgNGzZEdHS0xrr//PMPAgMD4eLiAplMhkWLFhVgS4mIiCgvcvNZDwCLFi2Cu7s7TExM4OTkhP/7v/9DSkpKAbWWiIiIKO+KVCizZcsWhIaGIiwsDOfPn0ft2rXh5+eHJ0+eqK2fnJyMSpUqYdasWbC3ty/g1hIREVFu5fazfuPGjRg/fjzCwsJw5coV/Pzzz9iyZQsmTpxYwC0nIiIiyj2ZEELouhHaatiwIerXr4+lS5cCADIzM+Hk5IRRo0Zh/Pjx2c7r4uKCMWPGYMyYMQXRVCIiIsqD3H7Wjxw5EleuXEFERIRUNnbsWPz111+IjIwssHYTERER5YWBrhugrbS0NJw7dw4TJkyQyvT09NC6dWucPn0639aTmpqK1NRU6efMzEwkJCTAxsYGMpks39ZDRESUV0IIvH79GuXKlYOeXpHq9JqtvHzWe3t7Y8OGDYiOjkaDBg1w69Yt7Nu3D/3799e4Hn7WExFRYVdcP+tJVZEJZZ49e4aMjAzY2dkpldvZ2eHq1av5tp6ZM2di2rRp+bY8IiKiT+X+/fsoX768rpuRb/LyWd+nTx88e/YMTZo0gRAC7969w9ChQ7N9fImf9UREVFQUt896UlVkQpmCMmHCBISGhko/v3z5EhUqVMD9SydgaWGuw5YRERG99+r1GzjVagYLCwtdN0Xnjh07hhkzZmD58uVo2LAhbty4gdGjR+O7777D5MmT1c6j8bP+Ij/riYiocHj1+g2cavOzviQoMqGMra0t9PX18fjxY6Xyx48f5+sgvkZGRjAyMlIpt7QwhyUvCCIiKkSK26M2efmsnzx5Mvr374/BgwcDAGrWrImkpCR8/vnn+Oabb9R2+c7+s56hDBERFR7F7bOeVBWZh9Pkcjm8vLyUBvLLzMxEREQEGjdurMOWERERUX7Iy2d9cnKySvCir68P4P3z+ERERESFWZHpKQMAoaGhCAoKQr169dCgQQMsWrQISUlJCA4OBgAMGDAAjo6OmDlzJoD3AwbGxsZK/3/48CFiYmJgbm4ONzc3nW0HERERqZfbz/qAgAAsWLAAdevWlR5fmjx5MgICAqRwhoiIiKiwKlKhTM+ePfH06VNMmTIF8fHxqFOnDg4cOCANCHjv3j2lb8sePXqEunXrSj/PmzcP8+bNQ/PmzXHs2LGCbj4RERHlILef9ZMmTYJMJsOkSZPw8OFDlClTBgEBAZg+fbquNoGIiIhIazLBvr3ZevXqFaysrPDy9nmOKUNERIXCq9evYVXREy9fvoSlpaWum1PkSZ/1t85zTBkiIioUXr1+A6tK/KwvCYrMmDJERERERERERMUJQxkiIiIiIiIiIh1gKENEREREREREpAMMZYiIiIiIiIiIdIChDBERERERERGRDjCUISIiIiIiIiLSAYYyREREREREREQ6wFCGiIiIiIiIiEgHGMoQEREREREREekAQxkiIiIiIiIiIh1gKENEREREREREpAMMZYiIiIiIiIiIdIChDBERERERERGRDjCUISIiIiIiIiLSAYYyREREREREREQ6wFCGiIiIiIiIiEgHGMoQEREREREREekAQxkiIiIiIiIiIh1gKENEREREREREpAMMZYiIiIiIiIiIdIChDBERERERERGRDjCUISIiIiIiIiLSAYYyREREREREREQ6wFCGiIiIiIiIiEgHGMoQEREREREREekAQxkiIiIiIiIiIh1gKENEREREREREpAMMZYiIiIiIiIiIdIChDBERERERERGRDjCUISIiIiIiIiLSAYYyREREREREREQ6wFCGiIiIiIiIiEgHGMoQEREREREREekAQxkiIiIiIiIiIh1gKENEREREREREpAMMZYiIiIiIiIiIdIChDBERERERERGRDjCUISIiIiIiIiLSAYYyREREREREREQ6wFCGiIiIiIiIiEgHGMoQEREREREREekAQxkiIiIiIiIiIh1gKENEREREREREpAMMZYiIiIiIiIiIdIChDBERERERERGRDjCUISIiIiIiIiLSAQNdN4CIiIiIqMh7E69dPXP7T9sOIiIqUhjKEBERERHllbZhjLr6DGiIiEo8hjJERERERHmR20Amu/kZ0BARlUgcU4aIiIiIKLc+NpBRt7z8XiYRERV67ClDRERERJQbnzI8Ye8ZIqIShT1liIiIiIi0VZC9Wdh7hoio2GMoQ0RERERUmDGYISIqthjKEBERERFpQ5fhCHvNEBEVSwxliIiIiIiKCoYz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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(12, 6))\n", + "fig.suptitle(\"Cross-sections of the Posterior Distribution\", fontsize=16)\n", + "sns.kdeplot(x=svi_samples[\"bA\"], y=svi_samples[\"bR\"], ax=axs[0], label=\"SVI (Diagonal Normal)\")\n", + "sns.kdeplot(x=svi_mvn_samples[\"bA\"], y=svi_mvn_samples[\"bR\"], ax=axs[0], shade=True, label=\"SVI (Multivariate Normal)\")\n", + "axs[0].set(xlabel=\"bA\", ylabel=\"bR\", xlim=(-2.5, -1.2), ylim=(-0.5, 0.1))\n", + "sns.kdeplot(x=svi_samples[\"bR\"], y=svi_samples[\"bAR\"], ax=axs[1], label=\"SVI (Diagonal Normal)\")\n", + "sns.kdeplot(x=svi_mvn_samples[\"bR\"], y=svi_mvn_samples[\"bAR\"], ax=axs[1], shade=True, label=\"SVI (Multivariate Normal)\")\n", + "axs[1].set(xlabel=\"bR\", ylabel=\"bAR\", xlim=(-0.45, 0.05), ylim=(-0.15, 0.8))\n", + "handles, labels = axs[1].get_legend_handles_labels()\n", + "fig.legend(handles, labels, loc='upper right');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and the Multivariate guide with the posterior computed by HMC. Note that the Multivariate guide better captures the true posterior." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABGUAAAJOCAYAAAAeUbqRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3XdYFFfbBvB7KcvSiwgoiqAgaDQ2xIIFlChGsQQUOwoao9FojLErGmM09qgxiUYssWCLvUSjYkOjxmDsvcSOIqB0lvP94bfzsrJ0ZEHu33XtpTtzZs4zbYd99pwzMiGEABERERERERERFSsdbQdARERERERERFQWMSlDRERERERERKQFTMoQEREREREREWkBkzJERERERERERFrApAwRERERERERkRboaTsAIiIiIiIiereEEEhPT4dSqdR2KERliq6uLvT09CCTyTTOZ1KGiIiIiIjoPZaamorHjx8jMTFR26EQlUlGRkaoUKEC5HJ5lnkyIYTQQkxERERERET0jmVkZODGjRvQ1dVF+fLlIZfLs/3FnoiKlhACqampiI6OhlKphIuLC3R01EeRYUsZIiIiIiKi91RqaioyMjJQuXJlGBkZaTscojLH0NAQ+vr6uHfvHlJTU6FQKNTmc6BfIiIiIiKi99zbv84TUfHJ6frjlUlEREREREREpAVMyhARERERERERaQGTMkRERERERFTmLV++HG3atHmndTg6OmLBggU5lpkyZQrq1q37TuNQkclk2LZtW7HU9b5YuXIlLCwspPc///wz/Pz8Crw+JmWIiIiIiIioxImOjsbgwYPh4OAAAwMD2NnZoW3btjhx4gRSU1NhbW2NmTNnalx22rRpsLW1RVpaWpYv0ZokJydj0qRJCA0NlaZNmTIFMpkMvr6+WcrPnj0bMpkMXl5ehdpGTUmRUaNG4eDBg4Vab149fvwY7dq1y3P5okwYyWQyKBQK3Lt3T216586d0a9fvyKpozgEBwfj3LlzOHbsWIGWZ1KGiLTqwIED6N+/P6pXrw4zMzMYGBigQoUK+OijjzB//nxER0drO0TKhaOjI2QyGe7evavtULTu4cOH6NOnDypWrAg9PT3IZLIi+6OiJO1nVSyZXwYGBnBwcEBgYGCB/ygp7fr16weZTIaVK1dqOxQAb37Je/s4yeVyWFtb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tVi/fj3Gjx+Phg0bwtHREZ06dcKhQ4fg7e1d3KFTGcekDBEREREREZVqffr0wbFjx3D//n0AwJYtW+Do6Ij69eurlVu7di1cXV3RqVOnLOuQyWQwNzcvlniJVJiUISIiIiIiohJp165dMDExUXu1a9cuSzkbGxu0a9cOK1euBACEhYUhODg4S7kbN27A1dX1XYdNlGdMyhAREREREVGJ5O3tjaioKLXXr7/+qrFscHAwVq5cidu3b+PkyZPo1atXljKZB/wlKgn49CUiIiIiIiIqkYyNjeHs7Kw27cGDBxrLtmvXDp9++ilCQkLg5+eHcuXKZSlTvXp1XL169Z3ESlQQbClDREREREREpZ6enh769u2LiIgIjV2XAKBnz564fv06tm/fnmWeEAJxcXHvOkwiNUzKEBERERER0Xth2rRpiI6ORtu2bTXO79atGwIDA9GjRw989913OHv2LO7du4ddu3bBx8cHhw8fLuaIqaxj9yUiIiIiIiJ6L8jlclhbW2c7XyaTYd26dVi6dCnCwsIwffp06OnpwcXFBX379s02mUP0rsgERzoiIiIiIiJ6LyUnJ+POnTtwcnKCQqGQpj+MTUKrORFISc8otlgM9HRwaJQX7C0Mi61OopIgu+sQYEsZIiIiIiKiMsfewhCHRnnhZUJqsdVpaSxnQoboLUzKEBERERERlUH2FoZMkhBpGQf6JSIiIiIiIiLSAiZliIiIiIiIiIi0gEkZIiIiIiIiIiItYFKGiIiIiIjoPceH7hJpT07XH5MyRERERERE7yl9fX0AQGJiopYjISq7VNef6nrMjE9fIiIiIiIiek/p6urCwsICz549AwAYGRlBJpNpOSqiskEIgcTERDx79gwWFhbQ1dXNUkYm2I6NiIiIiIjovSWEwJMnTxAbG6vtUIjKJAsLC9jZ2WlMiDIpQ0REREREVAYolUqkpaVpOwyiMkVfX19jCxkVJmWIiIiIiIiIiLSAA/0SEREREREREWkBkzJERERERERERFrApAwRERERERERkRYwKUNEREREREREpAVMyhARERERERERaQGTMkREREREREREWsCkDBERERERERGRFjApQ0RERERERESkBUzKEBERERERERFpAZMyRERERERERERawKQMEREREREREZEWMClDRERERERERKQFTMoQEREREREREWkBkzJERERERERERFrApAwRERERERERkRaUuqTMjz/+CEdHRygUCjRq1AinT5/OtuylS5fg7+8PR0dHyGQyLFiwoBgjJSIiooLIz70eABYsWABXV1cYGhqicuXK+PLLL5GcnFxM0RIREREVXKlKymzYsAEjR45EaGgozp07hzp16qBt27Z49uyZxvKJiYmoWrUqZs6cCTs7u2KOloiIiPIrv/f6devWYezYsQgNDcWVK1ewfPlybNiwAePHjy/myImIiIjyTyaEENoOIq8aNWqEhg0bYvHixQCAjIwMVK5cGcOGDcPYsWNzXNbR0REjRozAiBEjiiNUIiIiKoD83uuHDh2KK1eu4ODBg9K0r776Cn/99ReOHz9ebHETERERFYSetgPIq9TUVPz9998YN26cNE1HRwc+Pj44efJkkdWTkpKClJQU6X1GRgZiYmJQrlw5yGSyIquHiIiooIQQePXqFSpWrAgdnVLV6DVHBbnXN23aFGvWrMHp06fh4eGB27dvY8+ePejTp0+29fBeT0REJd37eq+nrEpNUub58+dQKpWwtbVVm25ra4urV68WWT0zZszA1KlTi2x9RERE78p///2HSpUqaTuMIlOQe33Pnj3x/PlzNGvWDEIIpKen47PPPsux+xLv9UREVFq8b/d6yqrUJGWKy7hx4zBy5EjpfVxcHBwcHHDqwi2YmJpqMTIiIqI3Xr96hca1q8GU9yVERETgu+++w5IlS9CoUSPcvHkTw4cPx7Rp0zBp0iSNy2R3rz/Jez0REZUQr1+9QhPe68uEUpOUsba2hq6uLp4+fao2/enTp0U6iK+BgQEMDAyyTDcxNYWpmVmR1UNERFRY71tXm4Lc6ydNmoQ+ffpgwIABAIDatWsjISEBn376KSZMmKCxyTfv9UREVFq8b/d6yqrUdE6Ty+Vo0KCB2kB+GRkZOHjwIJo0aaLFyIiIiKgoFORen5iYmCXxoqurC+BNf3wiIiKikqzUtJQBgJEjRyIoKAju7u7w8PDAggULkJCQgP79+wMA+vbtC3t7e8yYMQPAmwEDL1++LP3/4cOHiIqKgomJCZydnbW2HURERKRZfu/1fn5+mDdvHurVqyd1X5o0aRL8/Pyk5AwRERFRSVWqkjKBgYGIjo7G5MmT8eTJE9StWxf79u2TBgS8f/++2q9ljx49Qr169aT3c+bMwZw5c9CyZUtEREQUd/hERESUi/ze6ydOnAiZTIaJEyfi4cOHKF++PPz8/DB9+nRtbQIRERFRnskE2/bmKD4+Hubm5rh49xn7mRMRUYnwKj4etRxtEBcXBzPemwpNda+/wHs9ERGVEK/i41Gb9/oyodSMKUNERERERERE9D5hUoaIiIiIiIiISAuYlCEiIiIiIiIi0gImZYiIiIiIiIiItIBJGSIiIiIiIiIiLWBShoiIiIiIiIhIC5iUISIiIiIiIiLSAiZliIiIiIiIiIi0gEkZIiIiIiIiIiItYFKGiIiIiIiIiEgLmJQhIiIiIiIiItICJmWIiIiIiIiIiLSASRkiIiIiIiIiIi1gUoaIiIiIiIiISAuYlCEiIiIiIiIi0gImZYiIiIiIiIiItIBJGSIiIiIiIiIiLWBShoiIiIiIiIhIC5iUISIiIiIiIiLSAiZliIiIiIiIiIi0gEkZIiIiIiIiIiItYFKGiIiIiIiIiEgLmJQhIiIiIiIiItICJmWIiIiIiIiIiLSASRkiIiIiIiIiIi1gUoaIiIiIiIiISAuYlCEiIiIiIiIi0gImZYiIiIiIiIiItIBJGSIiIiIiIiIiLWBShoiIiIiIiIhIC5iUISIiIiIiIiLSAiZliIiIiIiIiIi0gEkZIiIiIiIiIiItYFKGiIiIiIiIiEgLmJQhIiIiIiIiItICJmWIiIiIiIiIiLSASRkiIiIiIiIiIi1gUoaIiIiIiIiISAuYlCEiIiIiIiIi0gImZYiIiIiIiIiItIBJGSIiIiIiIiIiLWBShoiIiIiIiIhIC5iUISIiIiIiIiLSAiZliIiIiIiIiIi0gEkZIiIiIiIiIiIt0NN2AEREREREpZkyPR3XL55D9JNHiH0RjZfPn+Hli2eIfRENMwsrOFavCafqNeHoUhOW1jbaDpeIiEoQJmWIiIiIiAoo+slDLJ76FW5cisq2zNljf0r/tyhXHi4f1EVTn/ao18QbcgOD4giTiIhKKCZliIiIiIgK4HTEH1g6axISX8fD0MgYzjXrwNLaBhbWNrAsZwNzK2vERD/B3euXcef6ZTy6fxuxL6Jx5ugBnDl6AEYmpmjk7YvmbTqheu360NHhyAJERGUNkzJERERERPmQmpKM3xbPxMHt4QAA55p1MHTyXNhUrJTjcslJibh38yrOnTiMEwd2Iib6CQ7v3ITDOzehvJ09fLsGoZVfVxgoDItjM4iIqASQCSGEtoMoyeLj42Fubo6Ld5/B1MxM2+EQERHhVXw8ajnaIC4uDma8NxWa6l5/gfd6yoOHd29hYegI/HfnBgDAr+dAdB3wBfT09PO1noyMDFz55zSOH9iB0xF/ICkxAQBgZmGFjwP7w6dzDxgZmxR5/ERUOryKj0dt3uvLBCZlcsGkDBERlTRMyhQtJmUor17FvcSYfh3fDOBrWQ5DJnyPDz2aFXq9KclJOL5/B3asXYboxw8AAEYmZvAN6APfgD4wMbModB1EVLowKVN2sOMqEREREVEe7Fq3HLEvolHRoSpmhm0rkoQMABgoDNG6YyDmrd2HwRO+R0WHqkh8HY/fV/6IL3u0xd5Nq5GenlYkdRERUcnCpAwRERERUS7SUlMRsWcLAKD7oK9gUa58kdehq6eH5m07Ydaqnfhi6gJUdnJBwqs4/LboO4wJ8sPfJw6BjdyJiN4vTMoQEREREeXi7LE/8SruJazK26Jek5bvtC4dXV009vbFjLBtGPD1NzCzLIfH/93F3HFD8N3IYNy/de2d1k9ERMWHSRkiIiIiolwc2rkRAODV3h+6esXzAFMdXV208uuGeev+gF/PgdDT18elv09i/IBPsP6nOUhNSS6WOIiI6N1hUoaIiIiIKAeP/7uLS+dOQSaTwat9QLHXb2Rsgh6ffYU5v+2FR8s2yFAqsXP9rxjTryMunTtV7PEQEVHRYVKGiIiIiCgHh3dtAgDUadQC1rYVtRaHTcVKGDFtIb76bgmsytvi6cP7mD6iH5bNmoTXr+K0FhcRERUckzJERERERNlIT0vF0b1bAQCtOwZqOZo3GjRrhVmrdsGncw8Ab5JGo/t0QNSpo1qOjIiI8otJGSIiIiKibESdOob42BhYWJVH3cYttB2OxMjEFMEjQzF58VpUcHBCbEw0Zo3+FCsXTONYM0REpQiTMkRERERE2Ti+fzsAwPOjDsU2wG9+uH3YADOWb4NvQF8AwP7f12LCAH/cvXFFy5EREVFeMClDRERERKTB6/hYnIs8DABo7ttZy9FkT25ggL5fjMeYOctgYVUeD+/dwqRB3bBz/XJkZGRoOzwiIsoBkzJERERERBqcOrwP6WlpcKjmCodqrtoOJ1d1PJpj5sodcG/uA2V6Gtb/NBvfjxqA+NgYbYdGRETZYFKGiIiIiEiDY/u2AQCat+2k5UjyzszCEl9+uwgDR0+DgcIQF85GYnzIJ7hxKUrboRERkQZMyhARERERveXBnRu4cSkKMh0dNPXp8E7rin6VguhXKUW2PplMBu8OXTHtl42oUNkRMdFP8M2wPjiwdR2EEEVWDxERFR6TMkREREREmSS+foUfQr8EANRt3AKW1jaFXqcq8aLplVuZgqrk5IJpSzfDw6stlOlpWDH/G/wyczyfzkREVIIwKUNERERE9P/S09Pww+TheHj3JiytbRA8ckqB11UUiZXCrsfI2ATDpy5Az8FfQ6ajg6N7t2Lq0F54+fxpoWIiIqKiUeqSMj/++CMcHR2hUCjQqFEjnD59OsfymzZtgpubGxQKBWrXro09e/YUU6REREREVJoIIbDqh+m4cDYSBgpDjJrxE8rZ2OV7PUXdHamw65bJZOjQIwTj5i6HibkF7ly7hMmfdcf9W9feSYxERJR3pSops2HDBowcORKhoaE4d+4c6tSpg7Zt2+LZs2cay0dGRqJHjx4ICQnBP//8g86dO6Nz5864ePFiMUdORERERCXdvk2rcXB7OGQyGT6fNAdOrh/ka/l3mYwpirpqNWiCab9sQgUHJ7x49hhTh/bChbOR7yhCIiLKC5koRaN9NWrUCA0bNsTixYsBABkZGahcuTKGDRuGsWPHZikfGBiIhIQE7Nq1S5rWuHFj1K1bFz///HOe6oyPj4e5uTku3n0GUzOzotkQIiKiQngVH49ajjaIi4uDGe9Nhaa611/gvb5M+/vEIcwb/zmEEOg1ZDTadw/O87LFlYjJSXlTgzyXfR0fi3kThuLq+bPQ1dVDyKip8Grv/w6jI6L8ehUfj9q815cJpaalTGpqKv7++2/4+PhI03R0dODj44OTJ09qXObkyZNq5QGgbdu22ZYHgJSUFMTHx6u9iIiIiOj9JITAPyePYPE3oyCEQCu/bvg4sH+eli3OljG5yU8sJmYWGDc3DE19OkCpTMfS7ydg468/8MlMRERaUGqSMs+fP4dSqYStra3adFtbWzx58kTjMk+ePMlXeQCYMWMGzM3NpVflypULHzwRERERlSiJr19h3+bVGNXnY8weMwgpSYmo5d4U/b6cBJlMluvyJSUZ87a8xqUvl+PzSbPRue9gAMC21T/hlxnjkJ6e9i7DIyKit+hpO4CSZty4cRg5cqT0Pj4+nokZIiIiovdAenoabl25gON/bMfxAzuRkpQIAFAYGqHlx/7oNnA49PT0c11PSU3IqKjiy61Lk0wmQ7cBw1Hezh7L54bi6L5tiI99iS+mzofC0Kg4QiUiKvNKTVLG2toaurq6ePpU/fF9T58+hZ2d5lHx7ezs8lUeAAwMDGBgkPc+uURERERUMgkh8Oj+HVw8ewIXzkTiStRpJCUmSPPtHZ3RpktPNGvbEYZGJnlaZ0lPyGQW/SolT2PNeHcIgLlVOSwM/RJRp47gu5H98fXMn2FqblkMURIRlW2lJikjl8vRoEEDHDx4EJ07dwbwZqDfgwcPYujQoRqXadKkCQ4ePIgRI0ZI0w4cOIAmTZoUS8xEREREVHxSkpNw59ol3Lh8HjcvReHGpSjEvohWK2NiZo4PPZqhlV831KjrkaeuSiqlKSGjktfETP2m3hg/Lwyzxw7GzUvn8c3Q3hg751eUs61QDFESEZVdpSYpAwAjR45EUFAQ3N3d4eHhgQULFiAhIQH9+78ZjK1v376wt7fHjBkzAADDhw9Hy5YtMXfuXLRv3x7h4eE4e/Ysli5dqs3NICIiIqIikJKchKv/nsXFsydx6dwp3L91DRlKpVoZfbkc1Ws3QG33pqjl3gSOLjWho5P/YRVLY0JGJa/dmarXro/QH9di5lcD8PDeLYQO6YGxc39FJUfn4giTiKhMKlVJmcDAQERHR2Py5Ml48uQJ6tati3379kmD+d6/f1/tJtu0aVOsW7cOEydOxPjx4+Hi4oJt27ahVq1a2toEIiIiIiqEh3dv4ezxP3HhTCSuXzyH9DT1gWktrW3g8kFdONesA+cP6qKq6weQGygKVWdpTshklpdWM5UcnTF1yXrMHPUmMfPNsN4YP28FHF1qFFOURERli0zw2Xc5io+Ph7m5OS7efQZTPh+eiIhKgFfx8ajlaIO4uDiY8d5UaKp7/QXe60ssZXo6/j5xCPs2r8bV82fV5pWzqSC1gnH90B3lbLIfO7Ag3peETGZ56c70Oj4WM0cNxO2rF2BkYoavv/8ZrrXrF0N0RAS8udfX5r2+TChVLWWIiIrTi4RUbYcAAChnLNd2CEREWvH6VRwO79qMA7+vxfOnjwAAOrq6qOPRDHUatUAt9yaoUNkpX+PC5NX7mIxRyUt3JhMzC4yfF4bvvx6IG5ei8N2X/fHF1Plo4NmquMIkIioTmJQhojKvpCRfslOQ+JjIIaLSTAiBI3t/x5rFM5H4+hUAwMTcAq07BsKnU48ibw3ztvc5IZNZbt2ZjExMMW5eGBZN+RL/nDyC+ROHYcCob+DV3r8YoyQier8xKUNEZU5JT8IUhey2kckaIirpXjx7gl9nT8b5v44CACo7uaBdt35o6tO+0GPD5EVxJ2SEEIiLfoTn/92EntwABkamMDA0hoGRCQyMTKEnz72rUWHklphRGBrhy+mLsXxOKI7s+R1Lv5+A2JhodOo96J20UCIiKmuYlCGi915ZSMLk1dv7gkkaIiophBA4sud3/LZ4BpISXkNfLkdAyHB83DUIunrF8ydrcSRklOlpeHrnKh5c+wcPr0Xh4bUovH4ZnW1568rOcG3kA9fGPijvUP2dddXKKTGjp6ePT8dMh7mVNXasWYqNyxYgJTkJ3QaMYGKGiKiQmJQhovcOkzB5xyQNEZUEL8VNrDYAACAASURBVJ8/w9LvJ+D8X8cAAM4162DQ2O9g71itWOovjmRMYvxLRB3YhHN/hGdJwujo6sG6UjVkZCiRkvgKKYmvkZqUAAB4/t9NPP/vJk5s/hmWdg5wbeSDms0/hk0V1yKNL7fEjEwmQ/dPR8LU3BJrf/we23/7Bempqeg5ZDQTM0REhcCkDBGVekzCFB3VvtSUnFGmp+NVfCziX75A3MsYxMfGICU5SXqlJicjJSUJKcnJSE1Ogo6uHuQGBpDLDSA3UEDf4M2/crkBzCytYFuxMmwqVIKRiWlxbyYRlSDXL/6DBRO/QGxMtNQ6pn23ftDR1X3ndb/rZExKUgLuRJ3AjTOHce3UAaSnvalPYWwGe7d6qORaF/audVGhWi3ov9U1K0OpRNLrWNyJisTVU/tx53wkXj65j1Pbw3Bqexiqe7RG487BqOjyYZHFm5cBgNsH9oe+vhwrF0zD7g0rkJKSjH7DJxbL8SIieh/xkdi54COxiUoeJmGKVmpKMuJjniP2xTPEvniGuBfRiFP9P+Y5kuJfIu7lC7yOj8W7uGUYm5rDpoI9bP4/SWNfpSpcatZBxSpVoaOjU+T1vQ/4SOyixUdia8/RvVvx65zJSE9LQyUnFwyfuuCdt45514kYZVoabkUdw6Wju3Dz7yNQpv3vnmXrVAMNO/RBjSa+0NXXz9d6U5IScPvcMVw5+Qeunz4I/P/ncSXXevDoGATnBl5FmhjJ7bHZh3ZuxPI5oRBCoF6TlhgaOheGRiZFVj9RWcdHYpcdTMrkgkkZIu1iAubNOAvpaWlQpqdBqUyHMj0dGcp0KJVKKJXpyFAqkaFMR1pqKlJTkpCanITUlOT/b73y5v/Jia+R8CoeCfGxSPw/9s4yPKprC6BrNO6ekAQCJJAAwV0LlBZpqStQgwe0UIeWKkVKS4VSrLTUhfIKfRR3l6AJEIgRISHuPv5+DAQokmQyGUJy1vfdb4Yr55yZDHfuXbPP3iVFlBYXUV5aRGlRIZXlpTUei0QiwcHJBUcXNxydnLGxs0dpZYOVtTVW1tZVz5VW1uh1OtRqFWpVJRq1CrXK+FytUlGQl0N2eirFhfk37cvGzp5WbTvQOizc+BgajqOLqzne0jseIWXMi5Aylkev0/HHN5+zYeX3AHTrN5RJ78zD2tauXvqrbxFj0OtJiz1J9L4NxBzcQmVZcdU2F59AWncdRHCPwfgFh5tlqk9u6nki1v1I9N716HXaqn4GPvUKwd0Hm206UXViJmL3ZpbMno5GrSKgZQjTPl2Oq4eXWfoWCJo6Qso0HYSUqQYhZQQCy9KYJUxleRnZF1PIyUiltLCAspJCSosLKSsuoqzE+FheUoRaVYlWq0GrUaPVqNFptfU+NoXSCmc3T5zcPC49Gp87uXrg6OKGg7MrDs6u2Dk4I5XJzJZ7prK8jOzMi2Snp5GdkUZ2eiopCTGcjzmDqrLiuv29mwXSNrwrbTt2I6xTd9y9fM0yjjsNIWXMi5AylqW8rJRFM18n8vAeAB4YN5mHnn3JbJFxlqqeZDAYyE6O5eyBjZzbv4nivMyqbfYunoT2vZewfiPxbB5SbzlXSvKzObH5D05s/RNVmbF0ePP2PRny3Nu4NwsySx/ViZmEs6f4fMZkivJzcff25e3PV+Dj38IsfQsETRkhZZoOQspUg5AyAkH90VgFTHFBHilxZ8hKSyY7LYWsiylkX0yhKC/bbH1IZXJkcjkymQypVGZ8LldgZW2D0trGmLvF6spza1tbbB2csHdwxs7RCVsHJ+wcnbF3cMLB2Q0beweTbhrqKzGwTqslNSme+LNRxEdHEX82ivSUxOv28/DxIzS8G207diO0U3c8fZo1iYSTjV3KLF68mPnz55OZmUl4eDhff/013bt3v+n+hYWFvPPOO6xZs4b8/HwCAwNZsGABw4cPr1F/QspYjqyLF/js7clcTE5AobTiP2/PpffgEXVq09IlrAsyLnD24CbO7ttI3sUr5yWljR0hPYYQ1n8kAaHdLJpjRV1RTsQ/P3B47ffoNGqkMjld7n2Svo9MwsoMU4qqEzM5mRf5+LXnyExLwdHZlenzv6VFSFid+xUImjJCyjQdhJSpBiFlBALz0RgljF6vJys1ifNnT5IYHcn5s5HkpF+46f72Ti54+gXi6OKGnaMzdpckib2jM3YORlliZWOLXK5ArlAiUyhQKC49lyuQyxVIpNIGJx4sUbWptKSIuNMnORt5lHORR0mMi0av012zj5OrO61Dw2kdFk5wWEeC2rTD2sa23sdmaRqzlPnzzz8ZO3Ysy5Yto0ePHixYsID//ve/xMbG4unped3+arWaPn364OnpyYwZM/Dz8yMlJQVnZ2fCw8Nr1KeQMpYh+sRhvnr/ZUqLi3Bx9+T1uYsJatO+1u1YWsIAFOWkE3NwC+cObiYz8WzVeplCScvO/QntO5yWnfpdl6zX0hRmpbLjp/nEH90FgJ2TG3eNe5PQvsPN8r1xKzlTVJDHJ2+MJzn+LDa2drwxbyltO95cpgoEglsjpEzTQUiZahBSRiAwncYoYQDyMi9yKmIP504cJOlsFGUlRddsl0gkeAcE4du8NZ5+gXj6BeLVLBBP30BsHRr/ecRSZbUrykuJPX2SsyePcC7qKOdjotFpNdfsI5XJCAgKoXVoBwJbtyEgKBj/oGBs7e7sZJSNWcr06NGDbt26sWjRIsAoPv39/ZkyZQpvvfXWdfsvW7aM+fPnExMTg6KWiVMvI6RM/bNj7Up+XDAbnU5LUJv2vD53ES7utcs9YmkZU16Uz9kDmzh3YBMX46Kq1kukMgLbdSe073CCuw/G2q7hVZBLjDzA9u/nkZ+RDEBIj6EMfX4G9i7udW77VmKmvKyUz9+exLnIoyiUSl764Au69RtS5z4FgqaIkDJNByFlqkFIGYGg5jRWCaNRq0g4c4Kzxw5w9tgBMi6cv2a7wsqa5iHtaRnakZZhHWnRNhxbe3G+AMsJGjBWkUqKO0tcdKRxylN0JPk5WTfc19XDC9+AIPwCW+Dj3wK/wCB8A4Jw9fC6Iyo+NVYpo1arsbW15a+//mL06NFV68eNG0dhYSFr16697pjhw4fj6uqKra0ta9euxcPDgyeffJLp06cju8n0EZVKhUp15Qa/uLgYf39/IWXqAb1ezx9L57Phzx8A6D1kJBOmz0ZZw4gSS4sYvU5HUtQBTu38H/HHdlUl0UUiISC0K21730NIjyHYOjX8pOM6jYbDa1dw4K9v0Ou0KG3s6PPIJLre82StKz/9m1uJGbVKxdcfvsrxAzuRSCQ88vzL3D/mPw0uwlMgaOgIKdN0kN/uAQgEgjubxipiSosKOLl/O6cO7ybu1FE0qsqqbRKplJZhnWjfvT+tO3TFv2UbZPK6XeA2Vq7+fNS3oFFaWRPSvjMh7Ttf6T87k7joSM6fO01qYhwp52MpyM0mPyeL/Jwszhw/dE0bVtY2+Pi3wDegOb6BQfgFBBEUEoaXX4C4obAAubm56HQ6vLyujaDw8vIiJibmhsckJiayc+dOnnrqKTZu3EhCQgKTJ09Go9HwwQcf3PCYjz/+mJkzZ5p9/IJr0WrULJr1Jkd2bwHgkedfZvTYiTX6v2RpGVNakMPxTX9wZs9aSvKv5P/yDgolrP8o2vS6GwfX66fPNWRkCgV9Hp5Iyy4D2PLNR2ScP8Ounz/j1I7VDHn2LVqE9za57ZwS1U3FjNLKildmLeSnhXPY/r8/WPXdAlKT4vjPW3NrLOMEAoGgKSEiZapBRMoIBNfTWEVMeUkxkQd3cHzPFmIjI9Drr+QrcXLzJLRLH8K69qFNp55NYhqSJbBkJM1lSkuKSL+QRHpKIukXkriYkkh6ahJZaRfQ6W5c6crJxY3g9p0Jad+JNu270CK4LXKF5cd+mcYaKZOeno6fnx8HDx6kV69eVeunTZvGnj17iIiIuO6Y4OBgKisrSUpKqoqM+eKLL5g/fz4ZGRk37EdEytQ/GrWar95/mRMHdyFXKPjPW3PpM3RUjY61pJCpKCni8NoVHN/0B1q1Ub7bODgT1n8kHQaNxjMwxGJjqU8Mej2ndq9lz28LKC/OByCs30gGPzMNW0eXOrV9q6iZnetW8cMXH9Vp2ppA0FQRkTJNBxEpIxAIakRjFTGV5WVEHdrF8b2bOXf84DXlp/1btaVzv7tp170fvs1bi0iJeqC6z1V9SBt7ByeCwzoSHNbxmvVarYbs9DSjsLmQRPqFRNKSE0iKO0tRQR5H927j6N5tgLGEeKu27encexADhz+Io3PdbmoERtzd3ZHJZGRlXTvtLCsrC29v7xse4+Pjg0KhuGaqUtu2bcnMzEStVqNUXv8ZsrKywsrq1tVkBKajUatZ8P5UTh7cjUJpxRsfL6F9tz7VHmdJGaOqKOPYxl85svZHVBWlAPgFh9Nt5FhadR14W6VrfSCRSgm/6wFCegxm/6qlHN/0O9H71pMUdZAhz06nbZ97Tf6Ou1XUzF2jHsXHvzlfvjeVxJjTvDvhEZMTPAsEAkFjRUTKVIOIlBE0ZRqriNHptMScOETEjvVEHdp1zdQk3+at6DLgHrr0H4anX+BtHKWgNtRnxI1apSIxNprY0yeIO3OC2NMnKCkqrNquUCrpOehehj3wJK3Dalbtp6401kgZMCb67d69O19//TVgzEkSEBDASy+9dMNEvzNmzOD3338nMTGxKh/QV199xSeffEJ6enqN+hSJfs2HRq1mwXtTOHloj1HIzFtK+67VT5OxlJAx6PVE7viLfSsXV0WMeAQGM+CJqbTs3P+2yPec0srqd7qEh715pv+kx59m09L3yUlNAKBl5/4MG/8eju43lp815WZyJis9lc/emlRVCn3i2x/Ta3DNStYLBE0VESnTdBBSphqElBE0NRqriDEYDCSdO8XR3Rs5vmczpUUFVds8/QLpOvAeuvS/B5/AlrdxlAJzUZ+SxmAwkJGaRPSJI+xc/18SY6OrtvUZOpJnpszA0aV+k4A2Zinz559/Mm7cOL755hu6d+/OggULWLVqFTExMXh5eTF27Fj8/Pz4+OOPAUhNTSUsLIxx48YxZcoU4uPjee6555g6dSrvvPNOjfoUUsY8NHQhU5STzsal75Ny2jgNzsU7gH6Pv0TbXsOQWDjBd21EzK2oi6S5nAj44Orl6LQalDZ2DB73Jh3uerBOcupmYqa8rJRFM18n8vAeAB7/z+uMevIFEYUqENwEIWWaDkLKVIOQMoKmQmOVMRkXEjmycz3Hdm0kL+vKr+b2Ti50HXAv3QePJDA4TFwUNmLqO29NwrnTbFnzK/u2rsOg1+Pg5MKzr7xL78HD6+1z1ZilDMCiRYuYP38+mZmZdOzYkYULF9KjRw8ABg4cSPPmzfnxxx+r9j906BCvvvoqkZGR+Pn58fzzz9+y+tK/EVLGPCydM519W9aitLLmjXlLadel1y33t+R0pZToo6z59GVU5SXIldYMeHIqnYc9bvEk7eaSMTfCVEGTm3qeTd98yMXYSAAC2/dg6HMzcG8WZPpYbiJm9Dodvy7+hM1//QxA/3tG8+xrH2BlbWNyXwJBY0VImaaDkDLVIKSMoDHTWEVMUX4ux/dsImLHelITzlWtt7KxJbz3XXQbNJw2HXuY/WI8r9RyNxhu9iIfRm2wRELhhHOn+WbeO1xIjAOgx8BhTH1/fr3kpmjsUsbSCClTd86ejGD2y+OQSKW89dl31UbIWFLIxBzexrqvpqPTavBt3YGRU+bi6mPZ6an1KWP+jSlyRq/TcXTDL+xd+TU6jRqpTE7X4U/T55GJWNnYmTaOWyQA3rTqJ35d8gkGvR7/Fq15edZX+AaYLoEEgsaIkDJNByFlqkFIGUFjpDHKGFVlOVEHd3Fk53rOnTiEQa8HQCqTE9a1D93uGkGHHgNQ1vHXOEuKl9ogJE3NqG85o9WoWfvbd6z+aSk6rYa+Q0fx4rufVOU6MRdCypgXIWXqzuyXx3L25BGGjH6C5167cSnyy1hSyJzctoot384Gg4Hg7oO57+VPkCstd778t4zR6zSUZV+gsiATbWU5WlUZ2spydKpy9Fo1CjsnlPYuKO1dsXJwRenggpWju8lRd7UVNIVZqWz/8VMSju0GwN7Fg8HjptGm9zDTx3ATORN94jCLPnqDovxcrG1sGT9ttsgzIxBchZAyTQchZapBSBlBY6KxyRhVZTnRR/dzYt82zkTsQX1Vwt4WbTrQ/a6RdO5/Nw7OpuX3aKgCpiYISXNzLBE1Exmxj0+nT0Kn0zLy8WcZ8+J0s7YvpIx5EVKmbsSdPsGHLz6JTK5gwR9bcfPyuem+lhQyxzb+xvYf5gHQccjD3P3Cu0hrOKWtruSUVqLTqMlPOEFxWgwl6fGUpCdQlpWMXqupVVsKWydcgsJxadkRl6BwnAJCkSlqd46vrZw5f2Iv276fR2FWKmBMBHz3C+/i5HHzv+0t+7+JmCnIzWbRR69zLvIoAKOeeIHH/vOa2UW2QHAnIqRM00FImWoQUkbQGGhMMqairITTEXs5uX87Z48fuKZykoePP93uGkH3u0bUunLSnSxgqkMImmuxhJQB2Lt5LYvnGGXMjM+/I7x7X7O1LaSMeRFSpm7Mf2siJw/uZuCIh5kwffZN97OkkDm++Q+2rZgLQM/RzzPgyZctkjvsYmYG2Wf2k3V6D7nnDqFTV1y3j8zKFlv3Zsit7YyLlS0yK1ukcgWa8mLUJfmoSgpQl+ajLi0Eg/6a46VyBS5B4fh2G45Pp6HIrWs+vag2ckarVnF47fccWvMtOq0GhZUN/Z+YSpd7njBZbt1Izui0Wv674iv++e1bALr1G8qkdz/B2sbWpD4EgsaCkDJNByFlqkFIGcGdTGORMUV5OZw+soeog7uIjTyMVnPlV0Z3n2Z06juUzv3uJqB1aI0vuhuzhLkZQs4YsZSUAfj+y1lsWfMboR278cHXv5itXSFlzIuQMqaTkhDD28+NRiKV8tkvG/Hxb37D/Sw6ZWnrKrZ8OwuAnvc/x4CnXqlXIaNTqzi1dy2ph/5HQeKpaySKlZMHrq064+Db6tLSGhsX7xpXe9JrNRSnxZJ/PpKCxEgKEqNQl+RVbZcqrPHuOAi/7qNwD+mGRFozWVIbOZOblsjmb2aSFnMCAJ+W7bhn4od4NQ+pcRvX9H2TqJn9W/9h+SfvoNVoaBESxhsfL8HF3cukPgSCxoCQMk0HIWWqQUgZwZ3InS5jDAYDmRcSiTq0i1OHd5Ecc/qa7V7+LejUZwid+g2lWVBIjS62m6KEuRVNXdBYSszkZWcy5bGh6LQaZi39g+B2nczSrpAy5kVIGdP5euZrHNqxkV6DhzPlgy+u225JGQMQtfNvNi19H4Duo55h0JjX6k3I6HVaYnb8QdS6b1CX5Fetd2wWgmf7/ni1H4Cjf1uz9m8wGCjPTSXz5A7SItZRlpVctc3a2YuAvg/h3+dBrBxqNm23pnLGoNcTueMvdv/yJaqKUqQyOb0eeIGeo59HYWVa1acbyZmYU8f58p2XKCkqwNXDi1dmLaRVaLhJ7QsEdzpCyjQdhJSpBiFlBHcSd7KM0Wk1nI+O5HTEHk4d2kVORuo12wOD29Gh50A69hmMT2DLGrUpREz1NFU5Y8lomWXz3mXXhr/o0mcQ0+YtNUubQsqYFyFlTGfCyB6UFhcxc+lKWod1vG67JaVM3NGd/D3/VQwGPV1HPM3gcdPqTchkx59g/48zKbkYDxiFSOCAx/DtMgwbV9PyrtQWg8FAUcoZ0iLWk3F8C5ryYsA4vcmn890EDngc58CwGrVVUzlTkp/NthVziTuyAwAnTz+GPDOdVl0HmvRe30jMZKWnMn/af0i/kIhMJufpl6Zz94NPW2T6mUDQkBBSpukgpEw1CCkjuBO4U2VMaVEBZ48f5MyRvUQf209FaUnVNrlCQUjHHnToOYj2PQfg7OZZozaFiDGdpiRoLCll0i8k8drTwzEYDMz/cS0BLU0L+b8aIWXMi5AypqHVqBk7uAMA36w7hIOTyzXbLSlkLpw9xqrZE9FqVHQY9AD3TppZLzfxeq2GvT/PIWXvKsCYhDfkvhdp1ut+pDKF2furKTqNmsyT20je8ydFKWeq1js3b0eLu57Gu+OQGk2ZqomcMRgMxB7exo6fPqUkLwuAoE59Gfrs27j4BJg0/n/LmfLSEpZ/+i5Hdm8BYOCIh3n21fdRKC137hYIbjdCyjQdhJSpBiFlBA2dO0nIGAwG0s7HcDpiD2eO7iMl9gxXn4LsnVwI69aXDj0H0rZLnxon+RMixrw0BTljSSkD8OX7r3B412bufWQsz0ydUef2hJQxL0LKmEZ+ThYvPTQAqUzGzztOX1Mxx5JCJj3+NCtnjUddUUarLgN58M0vkcrkZu0jp7QSTUUpJ1dMIzfmMADNeo2mzf1TUNq7VHO0ZSlMPkPK3j/JOLG1qtKTvXcQre4Zj0/nITXKO1MTOaOuLOfQmm+J+OdH9DotMrmCPg9PpMf9zyKT115Q/VvMGAwGNqz8nj+++RyDXk9wu068Mmshzm4etW5bILgTEVKm6SCkTDUIKSNoqNwpMkan05Jw5gRRB3dy6tAu8rMzrtneLCiE0K59ad9zAC1C2te4okNjFTEGvR6dVoNep0Gn1aLXadBrteh0WvRaLXqdFoNeh16vx2DQYdAbMOh1GAz6KsF15dfhS48SCVKpFJlciUyhRK5QIlNYGZ8rjY/SG1ykN2Y5Y2kpc2D7ehbOfINWbTswZ/mqOrcnpIx5EVLGNJJio3ln/EM4u3mw5O99VestKWSyU2L5/YPnqCwrJrBdDx5+a5HJOU5uRE6pscJfRUEmx5ZOpSQ9AZnSmo7PfoxX+wFm66c+UBXnkbLvvyTv/h1tRSkAdl7NaXXPeHy73G02OZOfnsy27+eRFHUAAM/mbRgxeRZeLdqYNO5/y5moiH18PfM1yktLcPXw5rU5XxPUpr1JbQsEdxJCyjQdhJSpBiFlBA2NO0HGqCsrOHv8IFGHdnImYi9lJUVV2xRW1oR26U277v0J69oH51pUVriTRIy6spzyojzKC3ONj8X5lBfmUlaUR0VxAZrKMjSqimsWraoCrfr2vEalrT3W9k5Y2ztjbe+Ejb1T1b+9fZvh5OGDk7sPjm5eKJR3vqyxtJTJTk9jymNDkCsU/Lj5eJ1D8IWUMS9CyphG5OG9fDptAoGt2/Lxir8BywqZvItJ/PbBM5QX5eMXHM5j7y5HaYYyypdFzGWKUmM4tuxlVEU5WDm603XiApwCQuvcj6XQVJSQvHslybt+q8o7Y+fVnOCRL+Ld8a4aTfOqTs4YDAbO7t/Atu/nUVlahFQmp+fo5+n90ATkCtPOd1fLmYzUJD5/+0XSLySiUFoxYfps+gwdZVK7AsGdgpAyTQfzxnYKBIJ6pSELGb1eT8Lp40TsWMfJ/duoLC+r2mbn6EyHngMJ7zWINp16orS2qXG7DV3EqMpLyL+YWLXkXTxP/sVEygpyzNOBRIJMrkAqk19ZpFIkUhkSqRSJVIpUcuV5lWe/9Gjg0qNOh06rQatRodOo0WlU6HW6qm7U5aWoy0spzr5Y7ZDsnFxxcvfBycMHF29/3HwCcfUJwM0nEAdXzwafjNHSQgbAw8cPR2dXigvzSYo/S/ANEqIKBHcaxQXG0syOzjWr9GNOCrMvsnLWeMqL8vFs3oZHZiypk5D5t4i5THb0AU6umIZOXYG9T0u6TVposUS+5kJh40Dre8fTfOATpOxZSdLO3yjLSubkijdxCgwjZNRLuIV0v+W5+/L7czM5I5FICOs3kubte7L1u7nERmzj4OpviIvYzvDJs/BtXfvIlpwSVZWY8fFvwUfL/mTxrDc4eWgPi2e9SdbFCzwwbnKD/84RCASC6hBSRiC4A2jIMiY9OYGjuzZwdNfGa6YmuXr60rHPYMJ7DyIotCOyWszvb6gixmAwkH8xkYsxx7kYc5yM+FOUFWTfdH+FtS22jq7YOrkZF0dXbJ3dsHF0xcrGHrmVDQprGxRWxkV++VGhRCpTIJXLbzityFzo9Tp0GjUaVQWVpUX/WgqpLC2ioqSA0vxsSvIyKcnNQKuupKwon7KifNLPR1/XplxpjauPUdS4ePvj6uWPi1czXLz9cfLwqdXnoDEhkUhoHRbO8QO7iI+OElJG0CgovRQFaefgBFguSqasKI8/Z02gJC8LN78gHn/3G6ztTPsV+WYyBqAo9Rwnvn0dvVaNW0gPOr/wKQobB1OHfdtR2NjT6p4XCBzwOEk7fyFpx68UpURzZNEkXILCaXXPeNzb9qqTnLFzdueBN74g5tBWtq6YQ27aeX5552m6Dn+Kfo+/hNK6duLs8mfKw8EKW3sHXp+7hJXLv2D9Hyv46/uvSUs+z4Tps2ucg04gEAgaIk3z6lgguINoiEKmvLSYQ1vXErH9H9ISY6vWW9va06X/3fQYMoqg0E7XJH2sjoYoYgx6PXlp540SJvYEF2OOU1lSeN1+di6euPkF4erXEle/FlWPVrYN++JdKpUhvSSCbB2r/6XbYDCgKis2Cpq8THQl2eRnXCA/4wJ5GSkUZqejVVeSnRJPdkr8dcdLpDKcL0XXuHoH4O7XHDffFrj7NcfJ3afG+YTuVIJC2nH8wC4unI+tfmeB4A7A2dUdgMLcm8tpc6PVqFn9yVQKMi/g6OHL4+9/i61T7SJ1biViLqMpL+bEd2+i16rxCOtLlwmf39bqSuZEYWNP8IhJBPZ7lPNbv+fCgTUUJEZxdMlLuASF03rERNyC6xY506bX3QS26872H+YRvW8DRzf8QtyRnQyb8B5BHfvUesxXy5knJ72Jd7NAfvjiIw7v3EjGhURem7MID59mtW5XIBAIGgJCyggEDZSGKGPSk+PZ/c9KjuxYh1plvCCTyeWEde1Lt7tG0L7HAJS1TLDY0GSMQa8nI+EUCUe2k3B0uapaYwAAIABJREFUx3WRMHKlFd6twvFr0xm/Nl1w92+NlV3Dli/mQiKRXMoz44RH4JWyzpcTAuu0GgqyL14SNSkUZKWRn5lKQVYaBVlp6DTqqueJUYeuaVumUOLqHYCbbyCe/q3wbtEG7xZtcPFq1mhC0908vQEozM+9zSMRCMyDl18gAJkXUyzW57YVc0mPP4W1nSOPvbMMB1fPGh1XExFzGYNeT9TP71GRl46tezM6jpvdaITM1Vg5uhH68JsEDX2GxO0/c2H/XxQkRnHk60m4tupC8MhJuLbqfMs2ckorbypmbBycGTV1HqH9RrBl+SyKci6yas5EwvqPYsgz07BxcK71mC/LmbtGPYpvYEsWvDeVlIQY3pnwMC/PXEBY5561blMgEAhuNyLRbzWIRL+C20FDEjI6nZZTh3az+58/iD91tGq9b/NW9B/1OF36D6sKXa8pDVLExEeRcHQ7CUd3XiNiFFY2+LQOx69tF/zadMGzReg1pT7zzfS3cr0NeU7Mza2qNen1ekrys41SJjOVvIxk8tJTyL2YTH5GCrpLZVv/jZWtPd7N2+DdIgTvFm3xa9UOD/+WJoua25FP5jInDu7mk+kTaREcyrwVa+rUlkj0a15Eol/TKC0pYsKIHgB8+tchrOp5Cknktv+yeflHIJHw6Iyl1UZc1EbEXE3Clu+JW7cIqVxJr9d/xMnftCpCNUWv1VCadIKy5Eh0qjL0mgr06kr0mkr0GhUKOxesPAKxcg/E2iMQKzd/pArzJ1yvLMrh/NYfSD2wuqqUtnubngSPnIRz8+pzwtwqGbC6opw9fyzk+ObfwWDA1smVkS/NNSlqpqo/ByvysjL44t2XSIqNRiqTMX7aLAbc+6DJbQoEDQmR6LfpIKRMNQgpI7A0DUXIVFaUs3f9Svb8s5KCnEzAON0lvPcgBtz3JK3bd6nVjXFDEzEA+elJRO/6m/gjW69JzKu0saNF54G07j6EgHY9kSmUZpMvNeVOlTSmlNHW63QU5WaQezGZvPQkslLiyUyKIftC/A1ljb2zO0HhPQnq0IuW4b1xcPWo+fhu4/t6PuY0M8Y/gquHF0vX7KlTW0LKmBchZUxnwqielBYVMu3rVfgFhVR/gIlcjI3ktw+eRa/TMuDJl+n1wAs33ddUGQOQGxvBkUUvgkFP+6fex7/XaJPbuhXa8mKKY/dTdHYPRbEH0FeW1vxgiQQrj+Y4hfTBsU0/7Ft0Rio3XyRPRUEmCZtXkHZoLQa9FgCvDgMJHjkZB99W1R5/KzlzMS6KTUs/IDftPADdRz3DgCemIlOYPn4npYHln7zLwe3rAXhq8jRGPP6cye0JBA0FIWWaDkLKVIOQMgJL0WBkTHkZe9atZPvqnygrNuZPsXdyoc89D9Jv5GO4enjXuK2GKGI0qgrOH9tJ9O7/kR57omq90taeoE4DaNV9CPYtOiMzsYRnfXGnSRpT5My/0Wk15KQlkpkUQ2ZSDBlJ57gYfwat+tobLs/A1rTpdhehvYbi3eLWv2jfTimTm5XBiw8PQiZX8NvOU3WaliWkjHkRUsZ03p/4GAlno3h2xud07DOkXvooLcjhx+mPUVqQQ0iPoYx+/fMb/v+pi4wBqCzMZv+8J1CXFtCs1/10eOqDOrV3I1R5aVzc8CWFZ3eD/koFPLmdC44hvZHbuyFV2iBVWiNV2CCVK9GU5FKZk4wqN4XKnJTrBI7Uyg7H1j1xatsP5/ZDkVnbmWWs5XnpxG/8hotHNoBBDxIJvl3vJXjERGzdq8/fcjM5o1FVsuuXzzmxZSUA3kGh3PfKp7j6BJo8Vr1ez/ZfF7Lhzx8AuO+p8Tw24bVGM/1V0DQRUqbpIKRMNQgpI7AEDUHI3EjGePoFMuyx5+k68F4UyprdZDdEEQOQkxJL9O6/iT20CXW58YJWIpHSvGM/AnqOwKdtjwYnYm7GnSJozCFm/o1WoyY1JpLzUQdJjDpEeuLZqvLfACHd72LI06/g0Szo+vHc5vetsqKccXcb8zP8tOU41ram3zgJKWNehJQxnSWzp7F/6z+MHDeVoY8+Xy99rJozkcTIA7g3a8mYub9hZXPt/526yhgAnUZNxFfjKUw+jWOzEHq99gMyZe1ypFVHadIJ4r+bjEFjHK+1V0ucQgfgFDoAO/92SK6qtpd3k0pWBoMBfVk+lRciqUg4QEXCQfRlBVXbpUpbXDsNx73nw9j6mWfaVWlmInEblpF5cjsAEqmcZj1H0eqeF6otD36rqJm4ozvZuOR9KkuLUFjZMGjM63S6+1GTRYrBYGDHXz+w7sevABgw/EGef2MmcjNGEQkElkRImaaDkDLVIKSMoL653ULmZjLm3icm0HXQvTUqYdxQRYxOqyHhyDYit64kO/FK+WY7Nx9a9h5Fy94jsHWuWZLIhsidIGfqQ8xcTXlJIQkn9nP28DZij+7GoNchkcroPORBBj46+ZqpTbdbyqhVKsYMCQfgh83HsLWzN7ktIWXMi5AyprPhzx/4bfEntOncm0mzlpq9/ZwL8ax4/UEkEikvfPk3bn5XhKs5ZAwY84pF/vQOGce3ILdxoM+0X7Hz8DdL25epyDpP3JJn0FWUYN+iM/6j38bGp3XV9ptJmOowGPSoM2KoiD9AWfQ2tHlXki4rfUPx7vMoruHDkCpt6vwaii6cJfafReTGHAZAKlfg3/tBWg57DmunW08jvZmcKc7LZP3XM7gQbcxZ16rLQEa8OMukJMCXObRlDX8umoVBr6d91968PGthnc63AsHtQkiZpoOQMtUgpIygPrmdQkan03Jg02rW/7KE0iLjr2y1kTENVcQAVJYWcWbXGk5tX1WVtFcqk9Os4wBa9bkP75CuSGpRrruh09DlTH2LmcvkpJ1n+69fEXtkJ2BM0tz7/nH0vv9ZfN1dLDKGW6HVanhqkDFZ5oqNEdjXMkH21QgpY16ElDGdtOQEpo0diVyh5OOVe1Fa1/3m/2q2fDubk1v/JLjHEB5848uq9WYTMgYD51Z/RvLuP5BI5XSb/DXubXqYpe3LqIuyiVs8DnVhBnaBHWg9YTlShVFSmCpjboTBYECVcoKSE39Tfm4XXMoHI7VxwqHrQwQMehqFfe3Kh9+I/PORxG9YQl7cMWP7CmuaD3iUoCHjUNrf+lx7Izlj0Os5tul3dv/6BTqtBgc3L+57+VP829668tOtiD6ylx/nvYlaVUlAcBjvfvl9nc65AsHtQEiZpoOQMtUgpIygPrjd0THnThxi9fL5pCcnAODhG8DwJ/9zx8uYgowUorb+wbl966ryjlg7uhI84CFa9x2NtWPdL0YbMg1ZzlhKzACknD3O1p8+52L8KQDsnFwZMWYqfYY/hlQmq+bo+kOv1/PEgFAAvl13CEdn00WRkDLmRUgZ0zEYDLz08F0U5GQw4cNFhHXrZ7a2VRVlLBo/CI2qgsff/47m7XuYTcZc5vy2H4lduxCA8HGz8es23Kzt6yrLiFv2HBXpsVi5BxLy4o8U6eu3ShWAriyf0qgNlB5fg7Yw3bhSpsQ+fDiOPZ5E4R6Im0Pdzsu5sUeIW7eYwuTTAMit7QgaMo4Wdz2FrJrInBvJmaykGNZ++Sb5GclIpDL6PTqZnqOfN/m8fSE+mmXvT6asuJBmLdsyefYymvt5mdSWQHA7EFKm6SCkTDUIKSMwN7dTyOSkp7J6+XxOHd4NgJ2DEyPGTKbf8IevKfN8NQ1ZwoDxhiA9LpKTG38m6eTeqvUuzVrT5q7HCOw69I7JFWMuGqKcsaSUAePn4uyhbez4bQH5GRcA6DxgOM+8/eVtTfz4WD9jjofl/xzAycXN5HaElDEvQsrUjUVz3+Hg5tX0G/k4D09622ztnju4mbVfvomLdwATFq4nt8y830dph//h1K8fAtD2wddocdfTZm3foNOS8MMUSuIOIbd3xfOZ71C4+Jm1j2rHoNdRHrOb4kO/oU6/Mo3XJrg/Tv2ew8q3bZ3kjMFgIOfsAeLWLaE4LQYAKycPgkdOolmPUdfkyfk3NxIzqooytn47m+h9xkpKzdv3ZNTUj7FzdjdpfOnJ8SyeMZ7SogL8WoQwec4y7J2MP9B41FFKCQT1jZAyTQchZapBSBmBObldQkZVWc6WlSvYvvontBo1Upmcgfc9zvAnJ2LrcP3nuqGLGAC9Xkfi8T0cXf8TuUlnjCslEvza9aHN4MfxCu7c5KsuNDQ5Y2kxA6DVaIjZs5r/ffsJWo2Ghya9y8DRYy0+DvjX9KUNh7F3ND1ngpAy5kVImbqxY+smVsx+FXcff977br3Z2l27YBrnDmyix/3PMujp18waJZN9Zh/Hl7+GQa8jaMg42ox+2WxtXyZjx7dkbFmMVGGN59hlWPm2NXsfNcVgMKBKjaL40K9UxO2rWm/TqjdO/Z/Hyq8dgMmCxqDXk3FiK7HrFlGRZ4zMsfdpRZvRL+MR2vuW38f/ljMGg4HTu9eybcVcNKoKHN28eWj613hVU13vZmReOM+it8dTUpiHT2ArXpy7HAfnK1JcyBlBQ0VImaaDkDLVIKSMwFzcLiFzOmIPKxfNoSAnE4A2nXvxyMTp+ARcX53mTpAxWrWK4zvXcm7775RkpwIglSsJ6jWctoOfwNEr4DaPsOHRUOTM7ZAyYEzwu2ftL/y1ZBYyuYJXv/iDwJAOFh9HSVEBL4zsBcDvu84gk1efRPumbQkpY1aElKkbqVn5zHiiPzqtlneW/4Onn+mljS+j1ahZ+Hx/1BVljJnzK0rfEDOM1EhBYhQRX09Cr6nEr/tIOoyZaXaJX5ERT8zCJzDotLjd/yH2He41a/t1QZObTNH+Hyk7s8VY6hqwDuqBU79nsQ7oBJguZ3QaNSl7V3F+y3doyosBcG/bi9CH38Teq/ktj/23nMlNS2TN/JfJT09GYWXDiBdn06bX3SaNKys1iUUzxlOcn4OXfxAvzl2Ok+v1yYmFoBE0JISUaTo0nkyXAkED5nYImdKiAn745C2WfjCFgpxMXD19mfDel0yZs+waIZNXqqpaGjKVZcXsXf0tP7w2kiO/f0JJdipKGwfC7nmG0XP+pseT04WQuQn5DaDk+u2m/31PE97nbnRaDT/MfYXy0mKLj6GirAwAK2ubOgkZgaChYW1rR8uwLgCc3LfFLG0WZaehrihDaW2Lwrt19QfUkPLcNI4tewW9phKP0D60f+o9swsZg8FA0t+fYNBpsQnuj137e8zafl1RuDfHffSH+E5ehV34SJDIqEyMIOuniWT+PInK5OPklaiqltogUygJGvw0Az/8hxaDxyCVK8g9d4h9cx7l3Jov0VSU3PTYnNLKa6Kh3JsFMXbub7QI741GVcH/vnidXb9+gV6nrfVr9vJvwZR5K3By8yQrNZGvpz9HUX7O9WMoUVUtAoFAYClEpEw1iEgZQV2xtJAxGAwc37OZVUvnUVpUgEQqZfADYxg5ZvI1VTEauoS5TFpaGud2rCRh/1q0qnIAbF29aTv4cVr2HoXCuv4TJtYVnboSTXkRmrIi1KUFaMqL0Kkr0Ws16LXqqx6NzwHjTYJEgkQiveZRKpMjlSuNi0KJVG516VGJTGGFTGmDTGltfLSyQaqwRqa0RiqTN4iIGUtHy1xdBru8tJhPXxxNXmYaHfsO47l3F1p0ilty/DmmP/cAzq4efLN2X/UH3AIRKWNeRKRM3cgpURGxbS2/L3gfn8BWvLVkdZ3bzE6J4/s3HsLG0ZUnvzKP6NGqyjn0+TOUpCfgFBhGz5eXV5uQtrbklaioiD9A9srXQKbAb/Iq5M6+Zu3D3GgKLlJ88GdKI9dXVWyyCuiE84AXsArsUnWeNCV6piz7AufWfE72GeM5T+ngSsh9Uy7lm7n5b8NXR83odVp2//YVR9b9CBjzzNz3yqfYOtY+WXpuRhqLZ4wnPzsdL/8gpsz77pqpTDcci4ieEdwmRKRM00H8VCcQ1COWFjIlhfn88fUsIg/sAMC3eSuefvUjmocY54rfKSIGICU5kegtv5B0eGPVr2LOfi0JHfo0gV2HIK2mSpSlMBgMqIpyKM9Nozw3lYrLj/npaEoLUZcVotfc/vddIpMjU9oit7JBaWOH3MrWuFjboLCyQ2HrgNLGAYWtAwobe5S2Digu/dva0RVrB7c7PmGyrb0jz85YwJevPUHk/i0c27WObnfdZ7H+y8tKL43D3mJ9CgSWon3PQUhlcjJSEshKS8arWfM6tXf5vC8x07neYDBw6pcPKElPwMrRnS7jPzerkLkcUWLQaynYbqzm5Nj9sQYvZAAULn64jXgbp77PUnTgZ0oj/0F14SRZv7yIVUBHnPq/gHXzrlWvsTZyxs4zgK4TvyI7+gDnVn9GWXYKp3+byYX9q2n/5Hs4+t04CupyxIyHvfFHhbvGvo5PqzA2Lnmf5NOH+emtJ3j0naW4+bWo1Wt192nGSx9/y1fTniUrNZEl707kpY+/w+4W5bKvjpoRgkYgENQHDeOuRiBoZNyO6UqnDu/m969mUlyQh1Qm594nxjPssReQKxR3jIzJL1NTlJHMmc0/kXJ0K4ZLc909W3ci9O4x+Ib1vK3Jew16PWXZyRQmn6Yo+RTFqTGU56WhV1effFIilaGwc0Zp54zCzskYvXI54kWuQCJXIrv0byQS42s36DEYDKA3PhoMOgw63VVRNWr0msuPKnQaFTp1JTp1xaWlsipfgEGnRVtRjLaimMpC016/wsYea0d3o6RxdMfayQ1792Y4eAXg4BWIratPg5FlNyMwpANDH5vA5t8WE7F1jUWlTEFuFgCOdai6JBA0RDwcrMjBkeDw7sScOEjUge3c/dgLdWpTr9MBmO2ccn7LCjIjdyCVK+j8wnysnT3N0u6/p/eUnvwHTW4yUhsnnPo+Y5Y+LIXcyRu34dNw6juO4gM/U3JyLaoLkWT/+pIxcmbgBKwDO1/zmmsqaDzD+uAe0p3kPStJ2LScopQzHPjkKVre/Swthz1/U+l/tZxp2/se3Ju1ZPWnL1OYlcqv743l4bcW4RccXqvX6eZtFDMLpz1HelIcS9+dyItzl2Nj51DtsULQCASC+qBhXz0LBHcglhYyalUlq7/9jH3rVwHgE9iSZ96ci3+rtkYZo2r4Qia/TE1+aizRm3/iwsndcGlWpW9YL8LuHYdny9pdcJkLnUZFUfLpKglTmHwGbcX1uUgkUhnWLj7YujczLh7+2Lj5obR3RWHvjMLWCbm1ncWFksFgwKDTGEWNyihqtOoKdJVl2Eg0aFXlaFUVaCpL0VSUoikvQV1RgqbcuKgrS1GXFaMqzkOv0xr3qSilJCv5hv1JZXLsPPyNksYzENfAtngEd8HG6fpkipbA7SbTtboPeYDNvy0mLuowJYX5ODi7WmQ82elpAHj6WLYkrkBgKcL7DDGjlDFGykhvUVK5pmSd3kPc+iUAhD36Ni5Bdf9OuVGuFb2qjMI9ywFw6v8CUuvqb/IbInJHL1zvfRPHPuMoPvgzJSf+Z4yc+XkSVs274DxgfFVC4NpEz0jlCoIGj8G3yz1Er5pH1qldJGz+lszI7bR/8v1b/l1ySivxsLfGI6A1Y+b8wl8fv0TG+TP8MfMF7n/lU1p3G1Sr1+jp15wX5y7n67deIDXhLMvef5FJs5ZibWtX4zYuCxohZwQCQV0RUkYgMCOWFjKZqUmsmPsmF5PiABj80FjuGzeFYnXDn6p0OflszvlTnNn8E+lnDlZt8+84gLB7nsEt0LTyl3VBW1lK7rmDZJ/aTe65g+jUFddslyqscAoIw7lFB5wC22HrGYiNiw9SucLiY60OiUSC5FL0jcL2+rnINc0xYzAY0JSXUFmcS2VxPpXFeVQW51FRmENpbiolWRcozb6ATqOiJDOJksyka4538ArEo3UXPIK7YNWxF/Zu3mZ5fabi4RuAf+t2pMafIWr/FvqOfMIi/eZkXgTA06eZRfoTCCxNh16DWLV4Nmnnz5GXmYabt+mf9fxSYw4xaR2TYpdmJhL107sABPZ/FP/eo01uq7qkt0UHf0FfVoDc1R+HLg+Y3E9DQe7oies9b+DYewxFB36i9MRaVMnHyUo+jnWL7jgPnIBVs/ZA7eSMtbMHncd/RmbkDqJXzaM0M4lDXz5HYP/HCLlvCnKrG08rq4qacXLjiQ9XsPaLNzh/ch9r5r/CsPHv0nHoI7V6fT6BrZg8exmL3n6B5Jgols+cwsSZi6/Jv1cTRPSMQCCoK0LKCARmwtJC5tDWtfy5eA5qVSUOzq6Me3MuXiFdKG7ghXbyy9QYDAayYo9zZtOPZMUdB0AikRLYdQhhw8bi7NfSomNSlxaSE72X7NO7yYs9gkGnqdpm5eiBc1A4zs074NSiAw6+rRv8FJ2akl+mrpGYkUgkKO0cUdo54uhzfSl1ME7tKi/MoiQrhdLsCxSlJ5J7PorCtFhKslIoyUohcf8aIgBHT38CO/ajTf8H8WgRauZXVTM6DxhOavwZTuzdZDEpk51hlDIe3iJSRtA4sXdypWVYZxJOH+PE3i0MffR5k9u6XIfCoNfVaUxnVn6MtrIM11ZdaPvQ67U+vqbVh8rj91N88BcAXAa/hETW8ES9qcgdvXC7dxpOvcdStP9HSiP/oTLpCJlJR7Bp1RunAROw8m0L1FzOSCQSfDoNwS24G+fWfMHFiHWk7FlJbsxhOj4zByf/tjc91ihnpDw47Su2LJ/FqV1/s3n5RxTlpNP/8Sm3TCD8b5q1bMOk2ctYPGMC588cZ8WcV3nhva9QKE2TKyJ6RiAQmIKovlQNovqSoCZYUsho1Cr+XDyXg1v+BiCkYw/uf/FDHFzcLTaG2nJ1SeasuBNErfuWnIRIwDjlpUWPewkbNgYHT3+LjUmv05ITvY+kfX9RkniiKvcKgJWbPy5hA3AO7Y+tb8gtpx252t3ZF171XZFJXV5CbsJJsuOOkR13nMILMVW5ggACOvSl64OT8W7d0ex932z6EkBeZhofjrsLiVTKvFUR2N4iyaO5mPrYULLSU3l/4U+EdepRp7ZE9SXzIqov1Z3LN6OHtqxh5cKZeDVrwdvL/jZ52mZSSjJ/vjEKiUzGuKV7TUo0XpJxnn1zHkEilTNw5j/YuNQsSq82ZaANBgMlR1ZSsG0hGPTYhg7B/cHZlp+uqqnEkBMLSnsktq5g42Ss2lcPaAvTKdz3PWVRG8FglGY2wf1wHjABpXfwNfvWNOdMzrlDnPr1Q1RFOUhkckLum0KLQU9VK1gMBgOxG7/nwF/LAAgf/BDDxr+HVFa7aW9JZyNZ8t5E1JUVhHXvz3MzvkCuqLtYE3JGUBdE9aWmg5Ay1SCkjKA6LClk8rMzWD7rNS7ERyORShn59GS6jni61hcfluBqEWMwGMiKO8HpDSvIjj8JgFSupFXf+wgd+jR2rl71PJYrF9jqwixyjq0j9/h6tKX5VettfFrjEtof59ABWHsE1vmC+k6SNZYsle0g1ZAec5S4gxs4H7Gl6lfwZu160+3BSfiEdDFLP7cSMpeZ8XhvSgpymbb4f/i3qt+InbKSYp4b3h2Ab9cdwtG59qVcr0ZIGfMipIx5yClRUVleyrtPD0ajquTVz3+heZsOJrWVXVLBry8NRl1ewuiZv+IWEFLrNhI2f0fc+iV4hPWl26SFt9y3NiLmMgadhvxN8yk9uRYAu46jcBs+3WJRMgaDAUPGGfTR69DHbgV12ZWNEhnYOiOxdUXi2QZJYE+kgd2R2DibrX9NfipFe1dQdmZL1Q8btqFDcB40EYXrlR9Zaipm1KWFnP59FlmndgHg3qYnHcbMxLoGecnSj2xi87IPMRj0hPUbwYgXZ9c6qjX+1FG++eBFNGoVHXoP5pm3PkVmpshYIWcEpiCkTNOhccTgCwS3CUsKmbioo3w39w1Kiwqwc3Di4Zdn06pjT4v1XxPy//V+XJ6mdHrjCrLjL0XGyBW07D2KdveMw9bFPNUvrh3D9RfWBr2OovgIco/+Q1Hc4aqLR7m9K+6dR+DeZQRWruYtW3r1OO4kQVPfKG3tad55EM07D6Lokamc+OdbYvetJe3MQdLOHMQvrAfdH56KT3Cneh+Lk5snJQW5FOVl1buUOR97BjDmk6mrkBEIGjLWtvaE9x7MsV0biNi+1mQpI5FIcPVvRWbsSfIvxJskZTKjjDf33uF33XC7KSLmMrryInL+egtVyglAgsvQqTj0eMIiETKGikL00evQnVkH+Vfl8LJ1Bb0OKouMESxleRjK8jDkxEP0OnRIkHi1QRLYA2mLPkh8O9Qpmkbh6o/76A9x6vsMhXu/ozx6O+Vnt1Meswv7TqNx7v88Mnu3Gk9pUto703n8Z6QeWMPZ1Z+TG3OYfXMfI3zsR3iG9b3lsb7d72UgcvYsf5/ofRvQqtXc9/InyGoR7dK6QzdeeG8By2dO5dTBHfz6+buMeX2OWX74EtOaBALBrRBSRiAwEUsJGYPBwN71f/LfpZ+g1+vwb9mGR17/BBdP80qEunAzGXNqw4or05TkClr1vZ+wu8eYVcbcSMJcRq9RkXdyE5n7fkddmFm13iGoMx7d7sepTV+LJOht6IKmprllzI2TVwCDxs+iy/3/4cQ/3xKz928uRkfw99mn6f7QS3S5/z+1yg1Q6/5dPUnjLEV52fXWx2XOnzsNQMu2pt2gCgR3Ej2G3s+xXRs4uXcLD4x/E6WVda2Ov5zQ1dU/mMzYk+SlxtO6lmOoKMikOPUcSCR4tu9/zba6yBgATW4y2X++jjY/DYnSFvcHZ2Hb+tbSwFwYijPQ/PE8lOUYV8itkAYPQRo2CkmzTkgkUmNetIpCDOX5UJqNPu0khpTDGHLiMWSdw5B1Dv2RH8HRF2nbe5C1vReJa3OTx6Rwb47Hg7NR9x5Lwa4lVCYcovT4aspObcCh++M49R6D1Nq+RnJGIpEQ0PchXFt1IvLHdyhOi+XYspcJHjGJlnc/d8vvhKDuQ5Errdix+C1iI7axZn50w5AAAAAgAElEQVQlo1//AkUtPn9tOvfmuRmfsWLO65zYswm5QsETL89EaqbvIiFnBALBjRBSRiCoJZaMjtFqNKxa8jH7N/0FQIe+wxg96d1aXWDUF/8WMZfJjDnGqfXfkXM+CrgyTclcMuZWEuYyOnUFuUf/IevASjQleQDIbBxx73wv7l3vw9rdcrlr/s3l8TdEOXO7cPRsxsAXZtLl/gkcWb2I2H1rOfLX12TGRzLkxU+xtquffC9ObsbPY1G+BaRMjDFSpmXbdvXel0Bwu2nVvhuunr7kZ6dz+tAuugy816R2XP2NKiY/Na7Wx2ad2g2AS1A4Vg5Xyt7XVciUndlK3oaPMajLkTn74PnY5yg9LZOc3lBRhGbNVKOQcfZH1nUM0pChSKzsr9lPIlOAvQcSew/wDEEa1A+YiqEsF33KEQwph9Gf3wvF6egjvkcf8T0Sr1CkoSOQhg6/rr2aovQOxuuJBVSmnKBgx2LUF89QfOBHSk+uxXngBOw73Y9EKquRnLH3DqLX6z9xbvVnXNj/F3Hrl1CUeo7wMR8ht7552eqAjv25+5Uv2bbwdc6f3Mdf817ioWkLUdrY1vh1tOsxkHHTP+GnedM4sv0fFEprHpk8w6xRUDklKiFmBAJBFULKCAS1wJJCpqKshOWzXiM2MgKJRMLQp16i7/1jLJ488GpuJmIAcpOiiVq7jMzYY4BRxrTuez+hw57G1rluMqYmIgZAV1lGdsTfZB/8E215EQAKRw+8+z2Je+cRSJW3X2ZdRsiZ63Hw8GPwxI/xa9udPT98xIWofWz56hVGTf+2XipeXU6OXVqYZ/a2r8ZgMBB/xhgx1rJN+3rtSyC4nXg4WJFTokIqldJt8Ci2/PENEdv/ZwYpE4/BYKjV91/26b0AeHUYBNRdxujVFRRs/bIqf4xVYGc8HpqDzM61miPNh3bT+5CfDPaeKB5ZisShdvnYJHbuyEKHQ+hwDJpK9Il70Z/dhCH5EIass+iyzqI7sARp+weQdX4MiUPNEiP/G+vAzng/+x0VsXsp2LkYbV4K+Rs/oeTYalyHvYp1866A8W9yKzEjUyhp9/gMnALaEr1qHllRuziYNZYuE77EzjPgpsf5hfVg2GsL2bbgVVLORPDb7Ik89d4ylNY1FzMd+wxB+/psfv1sBgc2rkJpZc39z79mdjEDImpGIBAIKSMQ1BiLJvTNyWTJe5NJT07AytqGR16dS0gXy4RGXzeWal53wcUETq37lrQo4wWwVK6gdd/RhA4bg61z9cn5bt5vzS+gdapysg6uIvvQf9FVlABg5eqHd/+ncA0fZpEpSqYi5Mz1tBnwAK4Bwfxv1lguRkcQ8d+F9Hr8NbP3o9MaS5/L5PU7dSspLprC/BysbWxpHRper30JBA2FHkPuY8sf3xAXGUFe1kXcvGpfCt61WStkSitUpUUUpJ3H1b9VjY9VXYqSdPCt7cSn61FnxJLz93to81IACU59n8FpwAtIpJa7jNZfOIoh+SBI5cgf+KrWQubfSBTWyELuRhZyN4byfPQxW9GdWgP5SeiP/4r+5B9IQ+5G2uUppJ61z+cjkUiwbTMAm9Z9KDm+hqI936LJTiDrlxexbTMI5yFTUbj41ihqxr/3A9j7tOTEd29SmpnEgflP0+nZj/EI7XPTY3xCOnPPG4vZ8vkUsuJO8secyQx95Ut83Wqe06vrwOFoVJWsXDiTXX//jNLKmuFjXqz5m1BDhJwRCAT1N1lfIGhEWFLIpJ6PYf4rT5OenICDizvPfbTc4kImv0xdtdyMkpyLHPjhQzbOGUta1F4kEilBvUYw6sM/6frYayYJmfwyVdVSEww6LTlH1nJmwZNk7PweXUUJVu4BNH/oXcKm/oJ7l5H/Z++8w6Mouz58z2zPpndICL2EGnqTLsUCIogiiqIi6CugYve1frbXLlaKBUUUFERBpRdBmkDoPQRSSM8m2SSb7fP9sSFSNslusiGgc1/XXgu7M+d5ZnazM/Obc37nihZkzscbEerfQGTTdgy6/1UA9q74nOTd63w+hqXMBIBWV3kqvC/Ys20TAB179EWlvvzePTIy9UFYdCytEnohSRI71/xcoxgKlbqiI1v6oe01iiEIQo2zZCRJwrhzEZlf3Yc9PwVFQARREz8meNADl1WQkSQJx5+fAiB2HIMY4bk45QmCXyiKLuNR3b0I5ej3EWK7gtOB8+hK7N/eiW3pdJzpiTWLrVAS2ONWGj60hIBut4AgYjq2kczZ4ynatgDJaQeqz2QKadqRa55aSEizTtjLStj12cOk/rm0ynUim7dn+GMfodLpyTy2h7UfzCQzv7DCs8gTeg8fw9ipTwGwetFc1v7whcfrektuLbO5ZGRkrl7kTBkZmWq4nILMkd1bmffaY1jKTEQ2asbEZ2cRHFGz9OGaUF1WDIClpIiDv3/Jyc0/4XS4Tqbiugym48j7CYpuUoMxa9CGVJIoOvYn6WvmYMlLBVyZMQ2HTCak/UAE8cpoES7ZrTjLjDjKinCWFeEsM1Y8Sw4bOB2ultBOO5LTQUH5/7UqJYKi/CGe+7fK9axUI6p0iGodolrrei7/v0KjR6ELQNTo67XMzVe07H0dOacOsH/l12yY/Syhr7QguEETn8W3lLnax2q88BqoCYlbXR1guvQeWKfjyMhcafQefjMn9u1g57pfGDHhgRp1sYnt0Jv0g9s4e2g7Ha+b6PX6xjIrNXWlKt69hII17wOgaz2AsBv/i8KvbjyuqkI6tRkp6xAotSh63lNn4wiCiNDsGsRm1+DMOuLKmDmxHillB/aUHQgxCSh63IPQpLfXxxiFXxCh1z2Bf5ebMax5D8uZPRSu/5jSQ2sIG/ksmgbx1WbNaALD6TljLocWvUb6juUcWvQa5sIcWt7wQKXziWzenuEzP2T1u9PJPLabtR8+xtCH3yW3xPV+hH/1Zc39R03AZrWw/KsP+PXrD1GpNQwcfadX2+8psteMjMy/E1mUkZGphMspxgBsW72M72b9H06ng6btu3H7E2+h0wfU+bieCDEADpuFYxt/5PCqr7GVuc5mGsT3pNNNDxDWuI2XY9b8blBp+lHSV39KyRmXkbDSL4gGgyYR3m1UvWTFOExF2AvSsBvSsRvSsBnSsOenYi88i2Qtq1HM0tpOShBRaANQ6AIqnpV+QSgDI1AHRaEKikIdFI0qKAqlf2iddjiqLb3GzyQn+RCZx/ew6oMZjH15ESovfAGqwlwhytRdpowhL5vk44cRBIHOvQfU2TgyMlcK53xlADr2HoxOH0BhXjbJR/bSokM3z2L4ayuyGWLa9wIg68Q+bJYyVBqddxOSvFv8HGWnd1Ow2iXIBA2YQlC/e+tF7JacDhxbPwNA7DIeQR9+WcYVo9si3vA6Ut90HLsX4Dy8AunsPuzLHkaIineJMy0Ger1P1FEtiLrzE0oP/EbBmlnYsk+Q9cW9BPYcT9CAKYhqXZVeM6JSRYc7XkQbEkXSynkkrZqHuTCb9rf/F1Hh/hwgqkVHhs/8kFXvTifjyF+s/fBxhs54B6X67+9ZdeLMkFvuwWq1sGrhZyyb9zZKlZprbrjVq233FLmcSUbm34csysjIuOFyCjKSJLF68ecsn/8RAJ36X8foB59HqapbgcFTMUaSJFL2rGffz59Smp8JQEhsSzqPmUaD+B5ejFe7tFyrMZezq2djOLAWAEGpJqrPrUT3m4BCW7NOEd7itJZhzTiKJf0A1rQDWLOO4SwzVr2SoEDUBSDqghB1ga5nbQCCUuPK6FEoXc+iwpUOL4ggOZGcdrQKV4mW5LC5np12JJsFp7UMp83sei7/t8NiwmkpdWXgSE4cZUU4yoqq3SZBoUQVFE1Qozb4x8YTENOGgEbxqAPCfLTXaodCqWL4jPf44b+3YEhP4uimpXQc4f3dcneYil37py7Fzx0bVwOuVtjBoZfnYkpG5kpBqVLTsc8Qdq79mT1/rPRYlDmfoOjG+Ic1oCQ/k8xje4jr5Gk5b80FFFtBBnlLnwHJgb7DiHoTZACcx1Yj5Z8CTQCKbr757fMGITgW5bXPIPW8D0fiQpz7f0LKPop9xZMucabvgwiNe3m1fwRBwL/Tjeha9MGw+n1Mh9dg3PEdpcc2Ej7qBbSNu1SZNSMIAq1ueBBtcBSHF79B+o7lWIx5dL7vLZQa96J9VMtODJ85i9XvPUzG4Z2s//hJrp3xLorymznnlzRVJtCMuH0qNouZ9Uu+4sdPX0NUKOgzYqzH2+0tctaMjMy/B1mUkZG5iMspyDidTpbOfZuNPy8EoN/NdzN0wkN1dvLnqRBzjrzTh9mz5APykl3tfHXBESSMmkrTntd5lF3hC58Up91Gzo4lZG6cj7M88yQ0YTgx105GHVQ7o8Nqxy4zYk7Z+7cIk30CnI5LllMERKAMiUUZGosytBGqsDiUoXEo9CEIGj2CULNMlJqY/zptZhxlJTjMRhxlxa6H2Yi9tBCbMRdbUTbWomxsRVnYjHlIDjtWQzq5hnRy9//t26IOiiAgNp6A2HjC2vUnoFG7erso8QuOoMuo+/nzm9c5vuUXn4kyOemnAYiIaeyTeBcjSRLrV/wIQP8RN9XJGDIyVzpdBoxg59qf2b91Hbc88HTFRbCnCIJAbIfeHNv0E2cPbvdYlHE4a5YiIzls5P7wBM4yI+qGbQm94Zl6++2TrKU4ts8FQNF9IoI2sF7mASAERKIc8ChSj3twJH6PM3GRS5z5aQZCTGcU1zyEGOOdkblCH0rEmFco6zCC/JVv4SjMJPub/xDYZyLBA6ciKJRVZs3E9R2DNiiCvV8+Re6Rbez4YDLd//MJmgD3Zr7RrToz7JH3WfP+I6Qf3M4fc19g4AOvIl5U8lxZ9owgCIyc9DAOu41NP3/L4o/+D0EQ6D18jFfb7Q2yMCMj8+9AFmVkZMq53OVKdpuNBe89z66NvwNw3aRH6XPjhDoZy1sxxmw0sPfnT0ne/hsACrWWdsPuJP7aCSirSR33pWGtMXkPab9+gDk3BQB9o3Y0uuER9DHed4LwFKe5mLITf2I6ugHz6V1QbkJ4DkVAJJpGHVDHdkQT0w5lWGNEtZfp9B5iKLV4LcyIKi2iSosqsPqsDMlhx1achyU/DSE/iZL0YxSnHcWUewZrUS75RbnkH97MmdVz0IY2JCJhGJEJQ+tFoGnV50a2LXyL3DNHMKQnERpbO6NLU4kRoyEXgMjYZr6Y4iWcPLyP9NMnUWu09Bs6sk7GkJG50mnZsTv+waGUFBo4eXA3bTr39jpGbIc+HNv0Eyn7NtPrjsc9+v0RVa7fTnt12YwXUZa8E1tOEqJfMBHj3kRUVe85UhdIZYXYf3oYis6CPgyx8/h6mcfFCLpglH0fROo8Hseu+Tj3LUE6uxf74skIza5B2W8GQlhTr2LqWvalYdx3FKz5gJJ9yzFu+wZL6l7Cb34FZXCDKrNmItv3o+eMueyePQNj2jH++mgqPabPqVSYadCmK0Omv83aDx7l9K51aPyD6DPxKbffKXfijCAIjJ78OJIk8ccvCyuEmV7DbvZqm71BLmeSkfnnI4syMjJcfkHGYjYx75WZHNmzDVGhYMxDL9Kp/3U+H8dbMcbpdHBy8zIOLJ+Ltby1dLNe19Pppgeq7Kbk685BVmMu6as+peDgegCU+mBihj1IWMLwOvE/cVpKKTv5J6Yj6zEn/3WBEKMMb4I2rjPqRh3QxHZEGXT5jJehZsKMpwgKJergaNTB0YR2/Lu1qN1iojTjBMXpRyk8lUj+kc2YDRmkbZhP2ob59SLQaAOCiW3Xi9QDf5Kyf3O1okx+qZUwfeWdjrJTTwEQHB6FTl835W/rlv8AQO/B1+HnX/f+UDIyVwrn+8ooFEo69BzE9tVLObBtQ41EmZj2PVFp/SjNzyI3+RCRzTtUu45fdHNKUg9RmnGCsI7XejyWOcnV5ckvfjDKwEiv5+oLJGMWtqXToCAFtEEob3oXQVU34n9NEfxCXJkzXSbg2PE5zkMrkJL/xHZ6O2LCLSh63Y+g89wUWdToCRv5X7TNe5H/6+tY0g+SOW8iYTf+F7/4QQCVZs0EN2lPr0e/ZOesKRRnJLHzw6n0nDEbTUCo27Fi2/di4NRX2PDZsxzbuBRtQDBdb36g0rldLM4IgsDN9z+B5HSyecX3LPrwZYA6FWZAzpqRkfknI4syMv96LrcgU1JUwKcvTuPMsYOoNFpuf/xNWnbu49MxvBVjAHJO7Wf34vcoSDsBuHxjut/+BBHN3J/81kULZ8lhJ2fHEjI2fOUqVRJEInqMpuGQ+1DqfHtRK0kSlpS9lCT+RNnJbeD4e5+pIpqhix+MX5tBqMLrprTlSkap8SOoaQJBTROI7Xc7DmsZ+Uf+JHffGvIuEmgC4trTZvxL+DdsWefziuvUj9QDf5K6fwudb7i3VrGy05IBiGrU3BdTu4TSYiPbN6wEYMjIcXUyhozM1ULHPoPZvnopB3ds5JYHn0H0UlxXqrXEJfTj1I7VJP+1rlpRJr/Ygl/DVgCYMk54NVbZqR0A6Jp7Lx75Ain/tEuQKcmBgChUYz9GCG1SL3PxBCEgCuXQ/yJ1uxP75o+QTv2Bc+9inEdXoegzBbHjGK/ah+vbDkHdIJ68Zc9hPXuY3CVPE9DjNkKGzkAQlZVmzfhHNaHnw3PZOWsKJZnnhJk5lQozTbtfS5+SIrZ98z/2Lf8CrX8w7YZWnY10se/MmPJW2bIwIyMjU1uuGlHGYDAwffp0VqxYgSiKjB07llmzZuHvX/kdzrlz5/Ldd9+RmJhIcXExBQUFBAcHX8ZZy1zJXG4xBiAvM52Pn3uQnLMp6PyDmPjsBzRq1d6nY3gryJgKc9m77FPO/LUKALUugI6jptCy/82X1FnXhRBzjpLUQ6Quf4eybNfFsr5RO+JufLTixNoT8kuqn59kNWE/thb7gV+QDCkVryvDGuMXPxi/+EGoIuqmnKWm1GW2jCco1DoiE4YSmTD0QoHm8GaKUw+x5/07aX3rc0R3r9sSnZi2PQHIPX2k1rHSkg4DEN24dmVQlbH2l0VYLWZim7akVfvOdTKGjMzVQqtOPdDo9BgNuaSeOESTNh29jtG0+1BO7VjNmV3r6Hnbw9VmTeobuMpcTZknPR7Dlp+KvSAdRCXaJl29nmNtcWYewr7sETAX4QhuQun17yKpo8CDY9vFRPhf3mOGENIY1U3v4EzZiWPT+0j5p3BseBvn/qUoBj2BGOe5ybMqpCHRd8+lcONsjNsXUPzXYmy5pwkf+yqK8uwbd1kzLmFmHjs/nEJJ5il2zpriEmYC3RvXxw8ai7m4gMRlc9jx3bto/YNp3nuER3M8J9CMmfoUkiSx5ddFfD/rJew2W511ZaoYWxZmZGT+cVw1oswdd9xBZmYma9euxWazcc899zBlyhS+++67StcxmUyMGDGCESNG8Mwzz1zG2cpc6dSHIJN68gifvvAQxoJ8giMaMPG/s4iM9a7uuipqUqp0YtNS9i+fg91iAkGgee8bSbjpAbSBf99ZqkshBsBeVszZtXPJ270cJAmFXxCxw6YS1vn6S066PRFdKsNpSMV+4BfsR9eAzeR6UaVF2WYoyvYjEcKbYRcEjHDJCXDYZT65vZI5X6CxGPM4uvA5Co5v5+jC5yg6vY8WNz+JQlU3+0tb7hFgKytFkqRalU0lHdwFQIv23X0yt/OxWa38/sPXAIyacF+9mYTKyFwpKFVq2nXvR+LmVezftr5GokxMh16otHpKC3LIOXWQqJZVm8rqopuDIGIrMWA15qH2wGfrXJaMNi4BUaP3eo7ekHv+ccZpR3X8N3TbP0awl2GPiMd03TtIWs/Lf6qMfxF1KdiIjXsiTPwW58GfcWydjZSfjH3Jg4htb0Ax4BEEnWc3RwWFkpBrp6GJaUfeLy9jPv0XWV/cS8Stb6OOdN04cZc14x/VmF7nhJmsZHZ+eE6Ycf/5J4y8D3NxIUfWLeaPL15C4x9EbAfPs6TySi30v/MRBFFk8/Lv+PHT1zCbSrh2XO2yOatDFmZkZP5ZXBWizNGjR1m1ahW7du2iWzeX0v7RRx9x/fXX884779CwYUO36z3yyCMAbNq06XJNVeYqoD4EmSN7tjHv1ZlYykxEN2nJxGdnERhauUeLt3gryBSkn2Tnt2+Qn3IUgPCm7el220zCGsefF7NuxRhJkig4uIG0lR9hLzEAENb5OmKHP4hSH1wrAeZ8HJlHsO38Gmfq7orXhOBYlB1vQhk/DEFTvZ/IxXOpD5GmvrNl3KEJDKfT1E84s3ouZ9bMIWPbEorTjtBu0tvowmJ9Pp5a57pIkiQndksZKq371qfVUVJkIOP0cQCad/C9KLNn6waKCvIJjYii77U3+Dy+jMzVwPm+MuAqYUrcvIoD2zcw6p5HvBYrlSoNcZ37c2r7SpL/WlutKKNQa9FGxGHOOYMp44SHosw2ALQtal+6VJUoUoG1BNWp9Wj3fYtYnAmALbYHpqGvgqpmv2++mFttRRtBVKLodAti62E4ts7GuX8JziO/4Uz+E8WARxDb3uDx5+8XP4jo0FhyfngCe0E6WV/dR/jol/Fr3b9imYuzZvSRceWlTFMpyTrNzo/+Q69H5qHWXypyCYJAr9tnYikp5NSO1az/5Cmuf2o2EU3ber69gkC/CTNwKNRsXTafFfNnUWYq4ca7ptepKC8LMzIy/xx875hZB2zfvp3g4OAKQQbg2muvRRRFdu7c6dOxLBYLRqPxgofMP4P8Umu9CDI71//Kpy9Mw1Jmoln7btz38lyfCTKGUqtXgozdambvsk9Z+cY95KccRaXV0/32Jxj2+BzCGsdjKLVUPOoSiyGDpG+e4PSPL2MvMaAJjyPq9ncIGDaTIknnE0HGmXMS8/Jnsfw43SXICCKKZn3QjH4T7cSvUCWM8UiQcUd+ieWCx78ZQVTQ9LoH6TjlE5R+QRSnHWH3u7eTd3izz8dSanQV7cWtZaXVLl/Z3/u5LJkGjVsSEOzeb6A2/LHqZwD6DRuF0sv2vzIy/1Tiu16DUqUmLyO1wtOpKi5uRwzQrIfLsPf0rnU4nY5qY+gbuMpfS9IOeTRHS9pBAHRNvBNrc0sslzwqxW5GmbwRv7XPEbhgFH5b3kYszsSpC6Ws9wxMw9+sU0HGE9xtj8fbdx6CNhDlkCdRjv8CIbyFqyxr9cvYf5qBZMzyeD7qqJY0uG8+msZdkKwmcn94EuNfiy9YJr/YUpE5A6CPcAkzmsBwSjKT2D37YRzWMvfzFEX63fciDdv2wG4pY+0Hj1Kcl+Hx/MAlzAwa/yCDJ0wDYN0PX/DTnDdxOp1exfGW84VPGRmZq5erQpTJysoiMvJCB3ylUkloaChZWZ7/qHvCG2+8QVBQUMWjUaNGPo0vUz/UhxgjSRKrF3/B128/i9Nhp8M1w5n43w/R+qjTizdijCRJpB/Ywm//dwdH1ixAcjqI6zKIG1/8nlb9x1BQZqtzIQbAabeS+ccCDn90F8akv0ChIviau4i++zN0cVXf9fR4jLxTWH57CfOiB3Ce2ekSY9qOQHvX12hufAVFXLeKC3tfIYszEBbfl+5PLCYgrj12k5GD86aTvuV7n44hCAKq8mwZa1lJjeNUlC517OGTeZ1PoSGPfTu3ANB/xGifx5eRuVrR+ulp3r4LAMcSt9coRkz73mj0QZQV5ZNxZFe1ywe1dP2NFxz906P459poU012g9cChd2C8sxmdOtfIvCbkejXPY/q9CYEhxVHcBPKej1E8e0/YO1wKyiuDiHXG7FGbNgB5R0LUFzzECjUSCk7sH0zHsex1R6Pp/ALJuqOj/DvcjMgUbD6PQq3fHnJchcKM43oMf0zlLoACk8fYO9XrvMxt/GVKoZMe5PQRi0pMxpY8/4jWEzFHs/vHH1umsh1k58CQSg3AH4Jp6N6AbE2yMKMjMzVT72WLz399NO8+eabVS5z9OjRyzQbF8888wwzZ86s+L/RaJSFmauY+hBjABx2G4s+fo2tq34CoM/ICQyf+LDXHSfc4W2pUnHuWXYvfpeMw+VtPkMi6X7b48R26oeh1IL5MogxAOmHtpO/9iPshnQAtI0TCBv2MKpQ35S5OPOSse38BsepLeWvCChaD0bV8y7EYN+X0rjjnDBTV+VNV2IJ0/loQxrQZcZ8Ti57i4ytP5D860dEdb0BlV+gT+JLklRxQi2INUsJlySJg9s3ANAqoZdP5nU+635ZjNPhoEXbTsQ2qZvOTjIyVyttOvfh+N4dHNu7nYGj7/R6fYVSRbOeQzm6YQlJ234ntn3Vf8PBrfuAIGDKPIm1KAd1UNUtrkW/EBwl+ThKDW7f9zRD5BxCaR7a3fNQJW9EOOdlBjj9o7E1H4y1xVCcoS2qFYHqCsFWil/OAXTZifhl70VTdAaHOgC7NgSHLhS7NhSHLhRzWFtKG3RHUlbfltvdPorw1yAolCh6TEJsMRD76v9DyjyI4/fnkFJ2oBj0BIK6+uwgQaEk9PqnUAREUPTHXIo2zUGyWQge9MAFZULne80ENGhOtwc+4K+P/0POwT84vPgN2t/+nNuyIrXOn2GPvM/yV+6hMOM0Gz55imGPzkLhZcZj16FjUGt1LP/0FXau/YWykmImPvEGas2l2V++Qi5lkpG5uqlXUeaxxx5j0qRJVS7TrFkzoqOjycnJueB1u92OwWAgOjrap3PSaDRoNPKP2j+B+hJkykqL+fy1JziauA1BFLl+0kx6XX+bT2J7I8g4HXaObVjMgRXzcNgsiAolbYbcTvvrJlHsUFyWzJj8Egt2Yy6GDbMxHXeVs4j6EEIHTUXfdrBPaq2lUgPW7V/gOLIakAABRcsBqHpMRAxrUuv4NaGuxZkrGVGpotXYZyhKTqQ0M4mzfy6mybD7K97PL7HUeL+UGfOxW8pAEAgId+8lVh1pJw9hyE5HrdHRtlv/6lfwApvVypqfXdlB14+b6IDLZjYAACAASURBVNPYMjJXIxf7yrTp2odfvnyPpIO7sVktqNTe/xa06HM9RzcsIWXPRmxmU5XeUir/EPQx8ZSmH6HwxA4iu4+qMrbCPxRbDjhKLhRlvBVjkCSXce+OjxGsrqw+pz4SW7NB2JoPxhHRtt6EGBw2Qo7/SEDKBrSG4wjShVkcot2EypR9yWpOUY0pugulMX0piemD3b+Bx0Oev/8iQpugvG0ujh1f4Nz5Jc7Dv+I8ewDlDa8hRrWpNpYgCAT3vw9RpaVg3YcYt85HspsJGXqpT9E5r5nQ5p1JmPQaiZ8/Sdq2ZWiDI2l5/VS38fWhUQx79H1+e2MKGUd2se2b/3HNPe5FnKro0O86VBodyz58ngPbN/DJs/dz/wuz8A/yfcnsOWRhRkbm6qVeRZmIiAgiIqr31ujduzeFhYXs2bOHrl1dLQo3bNiA0+mkZ8+edT1NmauQ+hJk8rMz+PSFh8hMOYVKo2XcI68S332AT2J7I8gY0o6zc8EbGNJcZqZRrbrSY8KT2P2jKK7bLNoKQUJy2DHuXkbh1m+QbGYQRAK6jCKk3ySfdLWQ7Fbs+3/C9tfCim5KihYDXJkxl0OMcdoRSrIRzEYES/nDbESwFLv+bS2hVBDRaNQgKEGhAFEJggIUKgRtEOhDEfzCEPSh4BcKmoB/RKceQRSJG3IvR799lvQ/FtJo4J0o1NXfYa0OY44ry8o/NBqFUu3ROvmlVsL0fy+buHklAO17DUKtrf2czmfrul8pMuQRFhlNz4HDfRpbRuafQIPGLQgMjcBoyCX5yD5aJ3h/DhfRrD2BUXEYs1NJ2fsHLXpfV+Xywa17ey7K6F0XzA7T36KM19kxxrP4bX4LZcYeAOwRbTD3moYjuiP4uHTWW7R5h4ne8Qaawr89faz+DTFFdaEsqjPm0DaI9jIUZgPKMgMKswGVKQe/zL9Ql2Tgn7ED/4wdRO16F3Noawpa30Jxk6FICs9+j+G8/dlxEmFx3bH//jwUpmL//h4U/aYhdpng0XEwsPcdCCoNhpVvU7xzEZLNQuj1T15Snnwuaya602Da3fo0hxe/zsnfXd2Y4q4Z6zZ2WFxrBj3wOmtnzeTEluUERMSQMNL7bkptegzkjuc+4oe3nuDMsQO8M3MiD73yGREN47yO5SmyMCMjc3VyVXRfio+PZ8SIEdx///3Mnj0bm83GtGnTGD9+fEXnpbNnzzJkyBC++eYbevRw1RBnZWWRlZVFUlISAAcPHiQgIIC4uDhCQ+tOqZapP+pLjAE4c/wgs1+agbEgn4CQcO54+j1imsdXv6IHeCrI2K1mDv72BUfXfY/kdKDWBdDllukEdxyKvQ4v9i/2UzGn7id/7cfY8s4AoGnYltBh09FEtaj1WJIk4Ujeiu3POUhFLiM+MbI1qgEPoWjQrtbx3QyIYMpDNJxGLEhGYUhGNCQjFqYiOG3Vru6VxZ9CBX6hCIENEEIaI4TGlT83hoBoBFFR48243ER2Hs7plZ9gzj9L5vafiB1wR61jGnPSAAiMrFlJqSRJ7N28CoDO/aq+kKtJ7N/K22APH3OHbPArI+MGQRBo07k3f61fzvHEbTUSZQRBoFmPa9m34ktO71rvkShzdv0XGE/+hdNhR1RUfup7TpRxlpcveSXIOB2oDy1Bu2sugsOCpNBg7j4Za/txLkG+HhFspUTsm0Pw8aUISNg1weR3muzKeNF7kHEuSaiNKejTt+J/diu63INoDcdpsP01IvZ+RmGrsRS2Go1DG+LVvPKD2yGMmU/QtreQkjbh+OMDnGf3oxzxIoK6+ps3Ad1uQVBqyF/xGiWJy5DsFsJGPuf2WJlfbKFxv1uwFOWStGoehxa/gTYkish217iN3ahTX3rf+QTbFrzJnp8+wz8smhZ9rvdq+wDi2iQw6ZV5fP/GIxRkpfPezIlMfemjGrWF9xRZmJGRufq4KkQZgIULFzJt2jSGDBmCKIqMHTuWDz/8sOJ9m83G8ePHMZn+rtmdPXs2L7/8csX/+/d3pap/9dVX1ZZNyVx91Kcgk7h5DV+/+xw2i5moxi2Z+Mx7BIX7prTOE0FGkiTS928mccmHlOS7hIq4rkPoNu5RypS+MRa+GHfGtraCDAo2fY7phMvXRdQFETJwMv4dhvnEXNeZcwLrn3Nwpu8DQNCHoepzH4o2Q31q3iuU5KBM24EibSfK7EMIFvdd2CSFBkkXjKQJRNIElD8HImkDkdT+CJITJAc4HeiUEjjs4LSDwwbmIqRSA5IpH0wFYCl2vV6cjVScjXR234WDKbUI4c3JadCeoNbXoI7rjKDybaaHLxEVSuIGT+LEj6+RumkBMf3/vvtZ0xKmoqxUAAIja+YRlHL8wN+lS919W7p0cM92Uk8dR6PVMWTUrT6NLSPzT6JNlz78tX45x/ZuZxSPVrlshL+W3BLzJa837T6UfSu+JP3gNqxlJah1lR/n9DHxKPXB2EsLKUk5QGCzLpUuK57LlCnJ9zpDRpP4FdrE+QDYG3ahrP9TOANjvIrhc5x2gk79SviBL1GW5QFQ1HQEuV1n4NAGex5HELAGNcEa1ISCdnegMBcSlLSc4BNLUZlyCT8wj9DDX2NsOoL8Dvdi11ft3XM+kjaQwkGvoI7+Be22WZC0Efv3KShv/gAhsPoSKf+EkQhKNXk/v0zpgd8RFCpCb3jGbbZNfrGF0P73EFuYTfqO5ez94il6PzafwJiWbmPHD76F4rwMDq5cwJYvX0EfFk2D1pV/fyojPKYJ97z6BYvfnElm8jE+emYyk556iw69BnodS0ZG5p/JVSPKhIaG8t1331X6fpMmTZAk6YLXXnrpJV566aU6npnMlUB9CTJOp5PfF87m94WzAWjZuQ+3zXwdja725TngmSBTkp/JrkXvkHFoG1Bu5Dv+cfya98B988eaU1mHIUeZkaJtCzEmLneJDoJIQMINBPebhEJXe5NXyVSIddvnOI64Sk9QqFB2Hoeq2wQEH5TF4HSgyDmCIm2HS4wxXNiuVRJEnEGNcIY0xRnaHEdoU5yhzZD8ozxOR7dStceMZLeAyYBUmo9UdBbJkAIFqUgFKUgFaWA3I2UdRso6TMHexaBQo47rjKZZb9TNeqOMaH7FlT5Fdx/FiR9fw1KQia20ELW/d3dRLybj+G4AwuNa12j9rb8tAqBj36E+LV2SJInF82YBMOiGsfgHBPkstozMP41zHZgyzyTV2FcmJLY5QdGNKcpKIe3ANpr3HFbpsoIoEty6D3mJv2M4tKlKUUYV5iorsWQcw/OCnPJ1kzcCYO5yD5au99afZ0w5fpm7iNwzq6JUyerfkOweT2BqWPuyf4c2GEP7uzC0nUBAygZCji5CZzhGcNJyAk+vIb/D3RTEj0dSePjZCgLWtqNxhLXAb+1/EfOTsX03CeXo9xCjq8+A1bcfDgoVeUv/S8neX1AERRPcz325kSAINLjxCcoMmeSf2EXivMfo88QC1Hr3v9vdb5lGSV4mp3etY8PHTzHqxa9r5GnmHxzGxBc/46cP/kvS3m18/uojjLh9KsNvn+qTJhAXI2fLyMhcXVw1ooyMjDvqMzvGYjbxzTvPsffPdUB5h6U7ZyAqfFNiUp0g43TYOb7pR/Yvn4vDakZUqoi/dgLtht9FscO3ZS6ViTGS3Ypx7wqKti3EaXa1jtQ17U7IoPtRRzSt9biS04H94ApsO74Ci8ssUdF6CKre9yEGRtUyuIQi+yCq4ytRpm5FsPzd+lJCwBnZFnujXthju+EMaQYeephURVUZIoJSA4ENXHcGG7S/cKpOBxSm48w5jpS+B1L/wmnMxnp6J9bTO2H9B4j+EWha9cev6zhUke7v+l1uFGotSr8g7KYibMX5tRJlLKZiMo+5PBoaJ3if5VJqLGDPpl8B6D+y9qVU57P7zw0kHdmPRqvj5onuzSNlZP6tXGz2GxQWiV9AEKbiIrLTkomtQZmvIAg06TqI/b/NJ2XPxipFGYDQDoNdoszhjTS+8RGESi6CNY0SALDnn0FlKkDw8+w3SyjNRVGYgiSIWDqMq1dBRmVMI3LPR/ifdbUBd6gDyet4D0Utb/bK+8UjRCXFTYdR3GQoutz9hO+djV/uASL2zSEoaQW5XWdQEtvP4/3hiGpPyei56Fc9icJwCtviqaiufwWx5aBq19XHD8Y5fCaGVe9QtGkOysBo/Du5LzcSFUoa3/oKJZ/ciykvnX1fPUO3Bz90W9omiCL973sRY3Ya+anHWffh49z47OdVGkxXhlrrx7jH32bN/PfYs3Ypq76bTcrxg0x84g30dSDmy8KMjMzVgyzKyFy11KcgY8jJZM7LD5N26hgKpZJRU56hy+CqDQS9il/NthnSjrPz2/9hSD0GQESLBHpOeIqgBk182lWpUjFGkjAd30zBH19gL8wEQBXRlNBBU9A17eaTsR2Zh7Fu/BApz+UJJYS3QD1oRq19YwRTPqqTq1EdX4loTK94XdIEYI/tjr1RLxyxPZC0dZPtUJPSHUFUQGhjFKGNoc0wQvzUOPLPYEnejuXUdqype3CW5FKWuJSyxKWo4rqi7z4eTav+CB56GRhKrYTqfXzCDqgDwrCbirAW56Nv8LenkLf7If3gNpwOO8ENmhIU3dirOeSXWtm7eik2q4XYFm1pEp/g1fpV4XQ4WDT3fQCuH3cXwWHVm9fLyPybEQSBBo1bcOrQHjJTkmokygA0Lhdl0g5sxW41o1RX3m44qEUPFFp/bMY8SlIPEtCkk9vlFH5BqCJbYMtJwpG+H2WrgR7NRXnWlcXnCG8Nmtpnh9YE0WIk7NB8Qo4vQXDakQQFBa3Hkt/hXpx1PSdBoCwygbRhnxFwZi0Rez9BXZJBzB9PU9qgO9ndH8MW6Jm5reQfRcmoz/Bb/wKqtB3YVjyFuc/DBPWqXkwP6D4Oe1E2xu0LyP/1VRQB4eia9XC7rEofRKuJb3L4s/vJO7aDEys+ps3oR9wuq9RouXbGO/zyf3djSDvJH/NeZMhDb1Yq7lWFQqnkuslPEtOyPb/P+x9H92zlnRnjuffZd2nUsq3X8apDFmZkZK4OZFFG5qqkPgWZpEN7mPvKTEqKCvAPCmH8E2/TuI37E7yaUJUgY7eaOfDr5xxbvwjJ6UCl86fLmGk07zOSgjKbzwSZysQYcJn4GjZ9jjXTJQgp9KEE95vk8o3xgRGtZDJg3ToPx9E1rhc0/qh634uy/Y1Vxq/yO+G045fxF/6nVqHL3OXyegGcSi2lcQMoaToUS3hbEBUXdOq5UikwWQkNb4oyvCn6HhOQ7BasqYmU7fsZ87GN2FL3UJi6BzEwCr+u4/BLuBnRzwv/AB+i9g/FlJ2MtdhQ/cJVkLLvD6BmWTJOh4MtK1zlr/1H3enTMq8ta1eQfiYJfUAQI2+/z2dxZWT+yUTFNuHUoT3kpKfUOEZ4k3j0YdGU5mdx9tBOGnepvNOhqFQREt+PvL0ryT+wvlJRBkBq2BFyknCe3QceizLlnZZiunq1Db5AYS4g5Ogigk8sRVHeibCkYW9yu07HGtTk8k5GEChuOoyS2GsIO/wNIUe+R5+5iya/3U1ul2kUthrjWdaM2g/T8P+h3TYLzZFl6LZ9gNFWhqXzRCKqEfODh/wHuzEb0+E15P74FNF3z0Ed3crtsn4NWtBs3HMkffccyeu+ITC2DQ27jXC7rH9YNNdOe4vf33yAlMRN7P1lHl1urnlmZMcB1xPVuAVL3nsGQ3Y6HzxxN7c8+Ay9ht18xZUiy8jI1D2yKCNz1VFfgowkSWz+dTE/zn4Lp8NOo+ZtuPXxtwmO8I2hL1QtyKTt28TuHz7AVJANnDPyfQRdUPjlEWPSDlC4dQHmlHKTXZWWwB7jCOoxDtEHvi6uFtfLsP317d8trtteh7rPZAS/4PLP3bt+3qK1hICk3wg4/jNK89+igDm8HSXNhlMa1x/pIrNcd98vXws1NTW6rQxBqUHTrDeaZr1xGLMx7VmCad9POI3ZlGz8mNLt3xA4dCa6jiN9NqanqAJcxpnWkpqLMg67jZR9LvPoxp29bzF/fPcmDNnp+AUE03XgjTWex8VYLWZ+/MJlOH/THZPRB9TPHXIZmauNyFhXeWtO+pkaxzhXwnR4zfec2bOxSlEGykuY9q6stoRJjEmAfT/hSN/n9v1LkKSKTBl7jG8yRasjr9iCypxPTNJios+sQOFwmSGXBjbjTNupFEaVZ4ecVzYWfhmzJSSVH3kJD1DU/Eaidr6NPmsXUbvexT99C1m9/4vdz4OMQlGJue9MJF0I2j1fot01B2wmcrtPISKg8qwoQRAJH/U82SV5WFISyVk0k+h7vkAZ5L7kOazDEEwDT5Cx6RsOLHwZe0BD4lq774wU1bITfe96hi1fvcLe5Z8TGNWoRh2ZKuI1acV9b8znl09e5uSeLSz68GWO793OrQ89j58PjydytoyMzJWPLMrIXFXUlyBjs1pY9PFrbF/zMwBdB4xg4qMvU2z3nTlbZYKMqSCHXYvfJX3/ZgD8QqPpfttMYjv2K1+v9oJMdZkxhVu/xZxafoIqKgnodB3BfSei0NfOuBXKW1yf3o5ty2ykorMAOMNbYu39H6TINiABXn7uClMegceXEZD0O6LdJfA4tCGUNLmWkubDPE6jPsf53ztfCTS+FmbOoQiMImDQQ/j3m0zZ4dWYdn6LPfcURStewp5/Bv+B0yq9C1cXJUxWo6vjh8qN4bOn++DM3k2UGfPRBYbVqPPFtp+/AqDv9bei1lR+Mu8tv3z3OblZGYRFRjNi7J0+iysj808nqpFLlMlOP13tspV1YAIqRJnUfZtx2G0oqmhFH9SyBwqNHpsxj+KUAwQ2dV/GqIhxXZBLeclIZUUIuqpLWcWiVERTHpJCjSOqQ7Xb4wl5xZUfk7UlZ2l26keiUn9HdNoAKA5uTXqriRii+1SaiVJVzMqorZBjC4glfcj7BB9fSsTeT9Bn/kWTX+8kq+dTlDQeXH0AQcDS9V4kpRbdzk/R7luA4LCS22saCEKlWTOCUk3krW+RNX8KttxkchY/RvSkeZXeQIodOoXSjJMUndjOiQVPo542H5U+iDA329+q/ygKM09zcNW3bPnqVfzDGxDdqrNX++V8tPoAbn38LbYtX8CmxXPYu2UNp4/u5+6n3qRZ25rHvRhZmJGRubKRRRmZq4b6EmQMuVnM/b9HST15GEEUGX3vI1w79m6POiN5PIabWE6ng5Obf2LfL7Oxm00IooK2w+6k/XWTKmrn60qQkSSpXIxZgCXtgOtFUUlAxxEE9b4dZaDn7S6rwpl/htKNH6PI2OsaVxeCrfs9OFoM8bir0fmoilIJPPoj/ikbEJx2AKxBjSmKH0dp3EBQVH7C7innvof1XeZkKLUQqq/8BEtQavDrNApdh+sp3folJZvnULptPpK1jIBhj/u0hXhlSJJEacZJAPxj3KePe8LhdYsBiB84BoWXhsvpJw6QdnwfSpWKgaPvrvEcLiY/J4tfvp0HwMRpT6PxYTcnGZl/Gheb/UY0dAnjeVnpSJJU43KNyBYd0QaGYjYayD6xl4Zt3fuHAIhKNSFt+7uyZQ6scyvK5JZYEPShCKFNkAxncKTuRtl6SJVzEI3lNxOCGoHS+4tej8QSSSLAcIiYpB8IzdqKgKvbqDGkHWmtJ1IY2aNOzIU9mVu1wo0gUthmHKYG3Yne+n/oDMeI2fIchVmjye72qEfHZWunCaDUotv6HpqDi5FEJZYeD1S0LXcnzojaACJvf5/ML+7Bln0Sw8q3CBv1gtvvmiAqaDH+ZQ59ci+W/HSSl75Kq4lvkV9scSvMdB83neK8DM7s3sCGT57mppe+RR9Scz8xQRTpO/pumrTvxs8fvUBBVjofPT2Zm+6byYBRE3xWziQLMzIyVy6yKCNzVVBfgsyJA7v5/LXHKCkqQB8YzH1Pv0WbLr2qzCzxFneCTMHZJP5a+CZ5pw8BEN60PT3veJrgmObnrVe7OVQqxqTspXDrt1jSD7peLM+MCeo13mdiTL4hH1XiAhRHf0MhOZFEJfYOY7F3vBXU3nc0UBWcIuTgAvzObq94zRzRgaL4cZQ17F4jgac68kuttRZm6ipb5nwEUYl/vymIfqEYV/0P0+7FSFYTgTc879ajx5fZMpbCLOzmYgRRiV9UsxrFKMpKIf3QNhAE2g4a5/X621d8A0CXgTcSGOo7E94Vi77EZrXQplM3eg0c7rO4MjL/BgJDwwGwWcyYTSXo9AE1iiOKCuI6XcOJLctJ3belSlEGIKzTUJevzMENrhImN912ABTN+2I3nMGRtKVaUcapc5VoCmWFHs/b46wVSSIsczMxJxcRUHis4mVDVC8ymt9KUXhCvbferm5bzok21qAmpI6YS/iBzwk9tIDgkz+jMqaS0f91j4yIre3GgCCi+/MdtPsXgkqHpcskgErFGWVQNBFjXiX722mUHvgdbePO+Ce4b8qg1AXQcsJrHP50MoVH/yR7249E972V/PLtO1+cEUSR/pNfoigrlYL0JDZ88hTXPz2nykwtT4hp0Y7731zAr3Ne58i2tSyb+xZnju5j/IyX0PrpaxVbRkbmykYWZWSueOpDkJEkiQ3LvmXZ5+/hdDqIbd6Gqc+/T1h0TJ0KMnarmUMr53NkzbdITgdKrR+dR/+Hlv1uvqD+3deCjCRJmE/vpnDbt1jOHnG9qFC5MmN8IMZUfIZOO4pjK9EmLqhoQe1o3Adbj8lIgQ28jqssPkvwwQXoUzYhICEhYIrtgzF+HJbwmnX08Ib6zpqpLlvmfPy63oKg9qNoxUuUHViBZCsj6KZXEXyQPVQZJWePu8aOaopYw5PVwxt+BCCu4zUERsZ6tW5hbiZHtq8FYNDNk2o0vjuMBQbWL/8BgLF3PyibMsrIeIlG64dGp8dSVoqxIL/GogxAo4R+5aLMZnrePrPKv8fAFt1R6kOwlxZQdGo3wa16uV1O0bwf9l0LcZzZgWS3IlSRoSfpXcdHocwATjtU0/HOU0FGY8qi+b53Ccl1+dU4RRU5jYaR0XwcZQHedaCrTy7e3rzm99A4oiMNt7yAPjuRxqumkD74HWwB1f++W9uOBrsF3Y6P0O7+HKdfGLY2f3ul5ZZYLhFmtE26EjxwKoUbP8Ow8h3UDeJRR7V0G1/fsBVx108nZcV7pK78mICmndA3bA1wSdaMSqPj2ulv88vLd5Fz6iA7v3+PPhOf8ni/VIZa68fNM16hUauOrF0wi71b1pCZeorJz31QkWFWG+RsGRmZK5O6z1+XkakF9SHImMtMfPHGkyyd+zZOp4Pug27g8Xe/9rkgczHZJxL5/dWJHF71NZLTQaOEAYx88XtaDRjrM0Emv8RywTZIDjslh9aS8dUDZP/4rEuQUagI6Dqa2KnfEDZsRo0FmfxSa8UDyYni1CY0S6ag3v4pgqUYZ0gTLNe9jvXa570WZJTGdMK3v03Mb5PxT9mIgERp3AAybphLbr8XLosgcz61+Z7W5XfqYnQdrid4zP9cBopH12Ha9b3b5XxVmmdMdWV6+Td0fwIMVW+/zVzK0T+WAtBuyG1ej79jxTdITgdNO/Sscdtdd/y6+CusFjPNWrejQ7c+PosrI/NvIqg8W8ZoyK1VnJh2PVEo1RTnZlCYkQzgtuQEQFQoCevg8jLJ37em0phidBsEfThYTTjTEqscX9IFI4lKBCQEU16ly+UVWzwsVXLQ4NQSOm+4h5Dc3ThENWmt7mT30EWcSnj8qhJkKiMlsCv7r/kQiy4SdXEqjVdORpfjmbGyteNtmDu7SlF1W95BmbbjgvdzSywVmTPnCOx7F9oWvZHsFnKXPIPTUlJp/KjetxDStj+Sw0bSd8/jsJgq3ssvtlRkzgAERsYycMorIAgc3bCEk3/+6tE2VIcgCHS/7lZmvPklQWERZKWc4t1HJnB0z1afxJeRkbnykEUZmSuW+hBkstNO89bDE0jcvBpRoeTW/zzDpCdfR63V+fzi+dyFr7WshJ3fvcm69x+iODcdXXAE/ae+Qf+p/8Mv2DflQnDhxa/TWkbRrp9In3MXeb+9hS032dVNqdsYYh9YQNi1D6EMCK/ZOOeEGABJQkzbhebn6ag3vYlYnImkDcLa+yEsoz/G2dA7EztVUSrh294k5vf78T+zDkFyYmrYg4zhn5Db91mvDXx9SX22afcGbZvBBA57HADT3p+RJKlOxpEkiZy9qwEIbVMz4eLQ+sVYSooIiorzuhV2cUEeu9e4sln6jr63RuO7w5CXzcolCwAYO+khOUtGRsZDLr47f66c0GioXMioWNe/coNulUZHg3hX16PU8i5tVRHWaSgAhsN/4LS5NxAWBBFF82sAcJyqJqYgIvm5jpdi6aXb4rEYA+iMp+m4ZTrNDn2CwmGmKKwT+wZ9QWr8fdi0oR7FuFowBTVnf/9PKQ5ug8JqJHbdwwhHPBM1LN0mY205HEFy4LfuecS8E5csc744Iwgi4Te9jCIwCrshjfxf36j02CcIAk3HPIs6KBJzfhpnlr97yTLnCzONOvWly033A7D1m/+Rm3zYo23wBP9GrXnsg+9p0qYTZaXFzHlpGuuXzq/1cTu3BqbPMjIydYssyshckdTHBe6+ret58+EJZKUmExQWyaNvf8nAUbfXyUXXOUHm7MGt/Pp/E0ja4urq1LLfzYx84XsaJQysZL2aHUjPCTIOUyEFW+aT/tkdFGz4DEdxLqI+hOD+9xL7n+8IHfIgSv8w7+OfnxVTjph9BPXvT6JZ8wKiIRlJ5Yety12Yb/0KR9sbwY2fSWUoSrMJ3/EODX+f4jLxlZyYYnqRMewjcga8gjW0hddzrgtq+r2tjeBXk++EtsMNCCodDkMKtvT9lcSt3d9gceohynJTEdVawjtW7cngDrvVzL7fXF2Tutw0BbES74fK2Przl9itFmJbdaJ5Qh+f/aYsnf8pVouZVu0707XvIJ/ElJH5NxIQrUSctAAAIABJREFU4jrWGAuqF2WqI66zS7RN3bu52mX94zqgDo7GaTVRcGxbpcspWrhEGfuprUhOR5UxnXqXwCSU5lzwujcdj6JSfiNh0xQCCo5iV+pJ6jSTQ33fw+zvXdnm1YRNG8ahvu+T16A/otNGq8TX0SR+Xf1+EwTK+j+NPaYrgq0M/conEIqz3C56TphR+AURMfY1EBWYjqyjZPeSSsOr9EE0v+1lEETyEn8nN3HlJcucnzWTMPI+4hL64bBZWDtrJiX57udSE6zqAKb/73N6Dx+D5HSy/Mv3+eatp7Gay2oVVxZmZGSuLGRPGZkrjsstyDgcdlZ8/QlrfvgCgBYdunLfM29XpFaD70tMzCWF7PnxA8785cok8I+IodedzxLVqvJ2v7URZGxFWRj/WkLJgVVIdlccZUhDgnrcir79UEQvO9pUxHbzWQn5p1wmvqk7AZAUKuzxI7F3uhW0VbcWvRjRXEjw4e8JSPoNobz1pymmN4Xt78AaWnlJTH3iCwPgukZU+6GNH0rZgeWU7V+OupH71rC1IWu3645nRIfBKDXemzcf2biEsqJ8AsIb0qrvyOpXOI/igjx2r3Z1bBp42398Jqxmpp1hw6+uE/kJDzwmZ8nIyNSCwJBzmTK1K18CiOt0DduAnORDmEsK0foHV7qsIIqEdRxC5uaFGA5uqChnuhgxtjNo/MFkwJl5uKJVtjuc5b4yojGj4jVvBBl1WR7N97+HIDkxRPfhVMdHsOp8Z0zuCSpbMcHFJ9CXZaE3Z+JXloXenIXOnIMkiNgVOuwKP+xK13OprgFZYT3JC+6AJNbcm8yp1HK8+4uYj8wlNmkxTY7MQRIVZDT/29jdbYcnhYrSoa/h/8t/UBQko1/9FCU3zQbVpZ3wKoyAYzsQMmQ6BWs/wLB2FpomXVFHuDehD2yaQMyQezm77nPO/PIOgU0T0IRcWmp9zmtmwJRX+O2N+zGknWT9x09y47Ofo1D55lxAqVJz2/QXiG0ez9I5b5K4eRWF+dlMfeljtH7+PhlDRkamfpFFGZkrisstyBQXGvjyf09xfJ9LQBgy5i5G3/vwBQ76vhZk9m7+nV2L3sVSUoggiLQZMp6OI++vaHPtjpoKMlkpSRTtWETJ4XUgOQFQR7ciqOdt+LXq67b7jie4FWMMZ1DtXYjizJ8ASIKIo+Uw7J0nIPl7d3IpWEsJPL6MoGNLEO2uu0FlUQkUdLoXa1jrKtetSYaHu25DgtOOypyP0lqMJIhIgsKVpi4qkBBBEHEqNNjVgZd0v6iJMFObTkzeGP6eQ5cwirIDyzEfWUPAsMcR3XS9qmknJqfDRk6iS3CM6naj1+s7bFb2rnCJpJ1HTva6o8XFWTK+YvHnH+J0OOjcawDxnbr5LK6MzL+RoDDXcaHIQ1Emwl9Lbon7ciN9aBTBDZtSmHGazGOJNO3mXmg5R2i7QWRuXkjhie047Va3NyYEhQpFs744jq7GcWJDlaKMI7INJK9Hmbkfa8KdHm3P+YRl/IEgOSkObs3RHq961VEpr4bnKFpbAQ2Mh2hYfIAGxoOEmZIrWm17SuuU77Ep/MgO7UZWeG+ywnti1tSg9FkQSWn3AE6Fjrjj82l66FMcCi3ZTVyC/DmB6xJxRu1P6XVv479sMgrDKXR/vEHZkJcr3X+5JRakdjejPb0Tc9J28pe/QvQ98xAqMWeOGTQJY9Iuis/s59SSV4m/76MLPP7O4RJm9Ax9+D1+fvFO8s4cZcf379H3rqe93xdu520mwl/LNTfcSnRcMz5/5RGSD+/ls+cfZOrLn+DnX333KrdxZdNfGZkrBlmUkbliuNyCzKkj+/ji9ccpzMtBo9Vx58z/o2v/C1vb+lKQMZcaWfvlG5zZ5TIXDGrYjF4TnyW8STufjXGO0rQjZG1ZSOHRP6H8JEvbpAtBvcajjUuo1R3+iz8nIfc4qn2LUaS62lFLCDiaDcDe+Q6kYO/SrkVrCYHHlxF4fBmirRQAS0gLCjrdi7lB14rlfGVEq7IVE1R4DP8zaWgteWjNefjb8lGX5aAyF3h0gupQaLH4RWPRR5c/N8DiF40qvDG2oMZ10o7bF6hiE1AEx+AoPIstNRFNeaq+L8jZuwZbaQHqgDBCWvX0ev3DG36gtCAbfUgU8QPGeLVuUV5mnWTJHDuQyPYNvyMIArdPnemTmDIy/zYiAjQVZRNBYa7skqL8nKpW8ZiG8d1doszR3TTtNpiwAM0F3h/no4+NRxUQjq04D2NyYqVdmJStB+M4uhr7iU2oBkyv9EaGvaEry1WZtR+cdvJKqy53upjwjI0A5MZeW60gU1MRBsDPmk+L/I20zF1PhCnpkveNmv9n77zDo6rWt33vqSmT3ntCgEAIvYMIiAoWsKOoKPaCWBB7O+I5NhQrCqII9nqkKkqV3gk1FVJJ75NJpu79/TEEA2RaEtDz/fZ9XXPpNVlr7TWTMLP3s5/3eSOp84pFr41Ar41Er42gURsOCKhtTahtzWhsTajFZsIas4mr342PpY7Yyk3EVm5CQkFB1HiOdrmDJu9Ij/dXlHIbCpuR2NzvSD7wDqLSi8q4S/567W2IM5IugqZL/o3vykfQHF+PLTwVc5+bHB5DEASksbMQim7HXHKUhu1fEzDy9rbHKpR0uf55Dr03Ff3xfZTv+JnIETe0ObZabwJNEGPum83v7zxK5oafiezWj+ThEzx+H5zRtfcgpr+6kI+ev4/8zIN89Pz9PPDKx/j6eeZElpGR+WchizIy/+c41e76s3cQbVYiYhO55/m5RCeeu1ySoiO7WLvwXzTWlCMolPSacBtpl93hlgPAXZeMJEk05OykbMu3NObtP/W8d9fhBA6/GW10j3bvH84WYxRlh1Glf4fyxF778REQE0di6X8zUnCSR2sLlib8s5banTEnxRizfzx1vW+lKW4UNU1W6KgQI4noDEUE1mUQWJ9JYH0GOkOx0ymiQo1V4weShCCJCJINQRLh5H8VogWlzYiPPh8fff5Z820af5ojB9IUNYjmyEFYdZ6fpLqLp24ZQRAQNCdt3k4cU566ZUSbhfzVHwMQM2qKx1kw5qZG9vxinz/w6vs8tn+v/+YDrGYT8akDO80lY7Na+WzuywCMufxaEro6d2vJyMi4JrCTRZnIlAEcXfcD5Tmuu/gICgVBPS+gYtdSao9uOiXKhOm0p3XuUcQPAq2fvYTpxAGUcW2XGIvBXZE0OgRzI8qqLPB2/3xC01yBf80RJASqo0c7HNdeMUZlayapZgvdq9YRU78fBeKpn1X7JFHq15tS/z6U+qXRpPEwU04SCTPkEF+3i4TanYQbskgs/Y24srUcibiSfTFT0AV58L0nCBSk3ovSZiQqbynd9r2OqNSc9b6cKc7YIvtiHP4w3lvn4rXzY2wRadgi0hweRqELQz16BuY/XqPuz4V4dxuFJrztMiavkFjiL3uI/OVvUbR6HgHdhuId5ripgHfiQPpdeQfpKxaxZcmrhCSkEBjt2TlRW7S4ZQDiuvbkoVcXMu+5+yjKOcK8Z+/hwX8vQBcQ5Pm6sltGRuYfgSzKyPwjOF8umWZDI1+98yL7t6wFYMCF47n10X/h5eN79p46wSVjNRvZ9sOHHPjD3nrYLyyWEdNeIrSL45OF1rgjyEiSRN3RTZRuXEJz2ck7XwoVutSL8B86GU1ox9pnnva7kSQURbtQHfwBZflR+1OCAlvyWKx9JyMFetb9SLAa8cteTkDGjyjNDQCYAxIo7nYTdVEj7C6TJmu796411RBWuZPwyl0E1R1BbTWcNabRJxa9XxeavcMwakMxeoVh9ArFqA3FrAkg2EnXD0G0oGmqQNtUitZQhrapFC9DKdqmMrwai1GaG9AVbkBXaL8LavaLpTlqME2Rg2iOHoykPP1EqCMlTOC5MCMa7W1BBW3n1aSX7lhKc1URal0wsaNvcWtO69e9f+VnGPW1BEYlkTr2es+OnZfJgT9XAHDp7bM6zSXzx9JvKDyWha9fADff93inrCkj83+d1k4ZSZLc+vfqrIQpsrs9G6umOBdTkx6tj5/TtYJSL7SLMhmbSZw0q82yFEGpRtntQmyHV2HLWu9QlEGhxBrVH3XBZkx5uyHVfVEmtORPABpCep+VI9MRV4za1kSf0p/pW/oTGttfbZ3LdKlkh17M8ZBRGNWOs3fcQlBQqUuhUpfC3tiphOszGFK0iNiGdPqU/UKPitUcjLqWA9GTsSjtJbKhrr7jBIHjvWegsBqJKFpN9z3/JmOoN3URQ84a2lqcMadeg7I0Hc3x9fise4nGaz9H8nJc1qNMnYAiZyNi3naql88m8s5PHZYxhQ+9hpqjf9KQu5vjP75C6v3znZZ/J4y7nfLcg5Rm7GHdvKeY9OIS1Nqzs248pbUwE9MlhYdeW8i85+7lxPEsPnz2Hqb/ZwF+gZ43a5CFGRmZvx9ZlJH52zlfgkzx8Ww+/c/jVJwoQKlScd29TzB64k1tngh2hiBTkZ/BH/NfoLYkD4BuF17LgGsfQtUJX8xw0hmTu4uStZ/SVJIFgELjja7v5fgPug6Vf8dDAk/9bkQbyrxNqA78gKI23358hQpbt0uw9rkByf/s8DtnCDYzutxVBB79HqWxFgCjbwylKVOojbkAhPZl3SBJ6AwFhFfuJLxiB4ENp7fJtCq01AekUBfYg7qAntQF9MCicV6L3VIq1ZZbRFKoMeliMOlizp4o2tDVZhJZl4536R68qjPQ6IvR6IsJyP4Fq1cw9T1uoL77VUjqs0XB84FktotUik4SZWxmI/l/LAAg8ZK7PQ74bawp58BvSwAYdtNjHrlsJElizZK3QJJIu+AyYrv19ujYjqitquD7T98HYMp9j+Ef9P9XW1oZmfNNSwlTwMmW2GaTkWaDvt25GC14B4TgHxFPQ3kh5TkHiO/rvCTTP3kgCo0PloYqDCcy0MW1XUqs6n4RtsOrsOb+ifqiRx1euFtjBqAu2Ix3eTp1qVPc3nfoCbtoXxU95rTn2yvIKEQzvcpXMuDEN3hb6wGo10aTHXYxOaEX0eDVxvdVJ1Hh15OVqXOIqd/H0MJPCTfkMOjE13Sr2sCabs9Rpet+1utqU6QRFOT2n4VCNBF2YgM9dr/EoQvewxDYvc3jnhJnLnwKZVUWyoYTeG/8D03jX3dYDiYIApqLn8D4xW2YSzMo3biY6IvubnusQkGX657l0Lu30lh0mNLN3xA9eqrD90FQKOl7y4vUv3UndSV5bP5sNmPv/0+bwl9HiE7sxsOvL+LDZ++hND+HD5+5m4ff+Bxf/w6KbTIyMucdWZSR+T/BzrUr+Ob92VjMJoLCIrn7ubdI6tF2aF9HBRlJFNm7ajE7/zsf0WbDJyCEIbc+R0zacI/WceaS0eelU7LuUxoLDgJ2MSZ8+A1EjJhMvdg5dzuqDWawGlFmr0V1+GcUJ9tNSmpvrD2uwNrravD17I6MYDOjO/47AUe+Q9Vsb4Nq8omgtPtN1MSO9ahN9ikkCX/9MaJLNxBeuQOf5tNbUdYFpFARNpSqkIHodUlI7Qw39jj0VqGkMaQXuSG9COlzBwpzI17l+/Ep3YNv8VZUzZWEpC8g8OjX1PW8ibrUm0GhPG9uGUmSkEx2UcaVU8bd135i6/eY6yvRBkYSPbLtuntn7PrpfaxmI5Hd+pM00LM22sfSt3H84A6UKjXjbnnE42M74uuP36LZ0EiXHmmMu9Lz1yQjI9M2Gi9vvH39aDboqa+u6LAoA3a3TEN5IeXZ+4nve4HTXBmFSkNgyjBqDq2n9uhmh6KMIq4/eAdCcx1i0T6UCWc7NuCvXBmvysNgM4PS9WemprkSv9qMs0qX2ivI+JiruTzzWUKbjgNQ5xXDrrg7OB486rzmm50IGMB/0+aRVLOFEQULCDCVcM2RR9ic9DCZ4ZedNrb1az1NoBGU5Ax4FrW5gcDKvaTueIYDoxdg9nYcJFxlUtEw/AVi18xAXbgVzaEfMPe50eF4hS4UzZiHMf/+Kpbtn1Pe5QIiEtsu9dYGRpIw8TGO//RvitcsJKjnKLzDEx2u7eUfzMDbX2brh4+Qt3stwXHd6DfxTofj3aW1WwYgIi6JGa9/xofP3E1Z4XEWvfo4D/5nAUoPS4dlt4yMzN+LLMrI/K2ca5eM1WJh6aJ3WP/LVwCkDhrJtCdfQ3eO7iI062v5Y/4LFB6yh94mDx5Hv8mznLbn9ITGgkOUrP8M/fF9AAgqDWFDribywltR+wZ2isOn2mAGQzWqjBWoMn9FMOkBkLz8saZejTX1SnuNvQcIViN+uavwO/ojapPdGWP2CqW0+43UxI9rVztNrbGaqLKNxJSsw89QcOp5m0JNdXA/KsKGURk2BJO285wN7e1GBCBqdDTFjaIpbhRVAx/CL38tgUe/QdNQSMiBT/GuOEj5yBcQtR2/MHEHW32pvSOXoEDh3fFjWgz1FKz5FIDECfd53Ga9Mv8omZuWAjDilic8Kj0SRZE1X7wNwJDLbiYowrOAaUccTd/N5j+WIwgCd818CYWynQ4uGRmZNgmNjqco5wjlRXlEJbhX8uOshCmiW1+yNy+nPPeQW2sF9RxFzaH11GVtI278/W2OERQqVF0vxHpoObacTQ5FGTEoCdEnBEVTNd7l6TRHtz2uNUqrvazIpvbF4tWx7yo/YykTM57E31RGsyqQXXHTyAobj9iGs6fSRbvuTrk4FwTyQkZxIqAfY4+9TVLtVsYcn0uI4RjbE+5vc19nCjSSQkXm4H/Re/MMfPX5pOz5F4dHvuP0nMEc3I2qAQ8Qtud9vHbNxxozEDHE8d+Wsud4FNkbEfO2YV77JhU3zkMQFIS1cXMkdMDlp/5e8n55g573zHPqfglJ7kufybNI//Z19v2ygMiU/kR27+9wfHsJj0nggVc+5p3Hp5J7aA+/fvURE29/uNOPIyMjc+74Z7YFkZHpBGoqy3jniTtOCTKXTbmXB2fPcyrIdETUKM05yHcv3ELhoe2oNFrG3fUilz30RrsEmTNdMsbqInK/foasT6ejP74PQakibMjVpD32LXGXPdRpgkxNwVHUG+fg9cM01Ae+RzDpEf0iMQ9/AOONS7D2n+KRICNYDAQc+ZboZVMJ3v8JalMtZu9QCnvfz5FxC6hOnOCRIKOwGYkq3cjAfS8wZvM0euQsws9QgE2hpjTiQvb1fY71Y75jX/9/URw7oVMFmRY6pfOTUo0++TKKrlxCxbCnEZVafEp3Ebv6PjS1xzr8u3Qni8iUsxkAdWxfBFXHT8Dzf1+AtakB36iuRA6e5NHcYF8NW796AySJrsMvJ7JbP4/mH9m2mvKCbLQ+OkZdf69Hcx0hSRLfLrALPeMmTaZrz84ph5KRkfmLmCR7OcqJvKxOWS+8q90BW5V3FNFqzyMLcSIwBHQbCoJAU2kO5np74HBbF+PKbhcCYD22BUl00FlJUGBJGAWA74ltbu3XorWfH6gsjQiixb73dnz+C5KNS3L+jb+pjHptFP9Ne5+MiCsoN9io1JvOeriirTmertGCWeXH791fYlesvcNR7/JlXJH5DF6WeqfzqhpNVDWasKl1ZA55BavKF/+aIyQe/tjlMRu6TsIQMxxBtOCzfjZYHe9XEAQ042aCxgex9AjWg8vt70EbvwdBEEi8ahYKjTf6/HQqdi91uZfE4VcSN2QCkiSyYf7zGPV1Lue4oi1RMiqhKzc9/BIAa3/4jKN7tni+rge/VxkZmc5FFmVk/jbOpUvm6J6tvDZ9MnmZB/HW+XH/S+8x8faHUHRyPS/YL972r/6a/756N4015QRGJnDDS0tIHX0VtU2WDq1tMxoo/v1jjn5wO/WZW0GhJHTQRNIe/Zb4iTPRdEJujCTasB7bgv6HR/BaNgPVsfUIohVbRC9M457HdP2n2FIngcpx4O2ZKEwNaPd+TsyyqQQdXIza3IDRJ4qCvjM4Mu4TqpKuQHLD2t2Cb2MhPTM/ZuymqfQ9PIew6n0IiNQGpnK45ww2XPgVB/o8RUX4CGxK9/fZXjwVZhz+rQsK9MmXcWL8R1h8I1E3lhDz+4P4FG3uhF06x5S7CQCvkxcbHaGpIp8TW+xtqLtePcvjjkvH96ylJGM3SrWW4Tc+5tFcm83Khm/nATBi0jR8Oqkt6L5tG8k+nI5G68X106Z3ypoyMjJ2WpwYLaJMyfFsZ8PdJiAiHq1vADaLiepC10KPWheEb2wqAHXZOxyOU8T2B63O3oWp9IjDcdbEVqKMJDocd2q82g/pZFmR2lTf7rKlPqU/E27Ixqjw5fOE1zhuCT7nF9geiTWCwL7YW1nd/WXMCm9iGtK55vDD+Jpcd96qajRRTBh7Up8AIDrvF8IKf3c+SRCoHPI4Vm0gytrjSFs/cjpc4ReOesQ9AFi2foJkqLa/xjZ+H9qgKOIutbuqCn+bh6ne9Wvoe8NMdOHxNNVWsOmzl5FE138b7WHAhRO44Ap7udaXbz1LbWWZixkyMjL/FGRRRub/K0SbjZVffsS8Fx7E0FBHXNeePPPh9/QZPtbl3Pa4E0wGPb++/wRbvpmLaLPRbeil3Pjyl4TGdWu3o6LGYEISbVTtXcnhd2+mfMu3SDYr/t2G0uuhxSRc9QSawIgO712yNGM5sBTjl9Mwr3oJZdlhJEGJNXkMxknvYb7yLcTEkR7lvCiaa/Ha/Qkxy24jKvs7VBYDzbo48gY8ztGLPqY64VK3nTGCaCGybBNDdj/FqO0PkFC0ErW1iSavCHK7TOHPkZ+yc/AcimMnYFV3XvegvwNzUFeKL/uEpshBKGxGIrbORl+c0aE1nbllRJMBc4G9lbm22yg313P893xs+TtIopWQ1FEEp3iWnWSzmNn+zVsA9LviDvzCPAuhPLBhGTWlBfj4BzFsouPgRU8QRZHvFr4LwGXXTyUoNLxT1pWRkTmdmC72/I4TeZ6JMmEOuuIJCgVhyfbuhhXH3CthCjz5mVWXtd3hGEGpRtllJAC2k4J2W1ij+yOqfFA1V6OtdsP9IyiwaOxumca69rUGD2guZlCRPSD9j8i70KsdZ66cD5yJNPnBI/gl7X0atJEEmEqYlPEEvuYqt9YtDxtGZpK9o1/ygbn41uU4HW/zCqJy2JMABGT9l8Zju52OV/W9GkVEDzA1Yv7zw79eT6PpLHEmYvh16OLTEE1N5P/yBpIkOV9b68PgO2ajUGkoOrCFw39843S8Ozgq4bvmnlnEdU2lSV/P4tefwGrx7Oag7JaRkfl7kEUZmb+Fc+GSadI3MO+F6fz69XwkSWLUFTcwa+4XhEa6zpdoj6hRVZjDdy/dwvG9G1AoVYy+7SnGP/gqGu/2d9KpMZhoLDxE5oL7KFj6JlZDLdqQOLpOfYNut83BK6xj7a0BpKYazDs+p/nzKVj+/ACpvgRJo8PSZzLGGz/HMuYppLC2Oxw4Qmkox2fHh8SuuI3I3J9R2ppp8k/i+KCnyRj7IbWxY9wWd3SN+XTPXsSYzdPod+gNgusOIwoKysJHsHvAv1nabx67Im7ghBhMTaOpXY/OoNPcMicRtQGUjn2DpqghKGxmIjb/C2wdc1o5wpy3A2wWlMHxKEMSO7RWbfZOqg5vRFAoSZ400+P5Oeu/paGiCN+gcAZMvMujuVaLmT9/mA/ABdfejbYD//Zas339rxQey8LbV8ekmz3bk4yMjPtEJ3UDoLaylCZ9Q6esGZ5sLzVsLco4K2EK7G4XZepzdyFa7Z+5bZYwdbW7Cm25mxxfhCs1GE5myfgWb3Vrvy0lTFpzO8paJJEROW+hlswc8+3PgcBLPF/jHHOmQFPrk8iy1LftwoyxhIlHn8DHXO3WWllJt1AWMhilaKbbzhdQWhqdjm+KHkpDl8sQkAjfOYfq2rpTnZrORFAo0Yx7HAQFtqx12Ap2nf46Wp07CAolSdc+i6BUU5e1jeoDa1zuPSCmK72vs+e87P7pQyqOHXY5pz2o1BqmPT0Hb18/8jMPsmLJe+fkODIyMp2LLMrI/H9BVWkxc2ZOJWPfNjRaL25/4lWmzHgBtebcJMkf3/cnP71yBw0VJ/APjeb6FxbR5+LJp8JJ2+OSsTTryf/ldbIWTqepJBuF1pfYCdNJfWgxAd0duw/cFZTEmkJM6+bS/PnNWHd9BcaWvJgHMd70JdbBd4CvZ+VQ6rp8Qre/SeyKOwjPW4HCZsYQlELukBfIHP0eddEj3er4IIgWoko3MnTXLC7YPp0uBT+jNdfRpA7iUOxklvVfwPrkWeRoUzulg0RnCTSdki/TGoWK8hHPYdMGoGkooOn4LtdznODILdN8wF4zr+0+2qNA3TMRbVZyfpkDQPTIG/CN7OLRfGNDNUd+XQjA0MmPovbyTFTZ9du31FeV4hccweDxjjtseILZZOSb+XMBmDjlrnMWCi4j83+dMD8t3r5+BEdEA1CS3zlumYiudlGmPPegW+v4xvRA5RuEaGpCX3DA4ThlwmBQeSE1lCFVON5rU6zdUeNb7F6mh0UbBLRPlIktXEFC0xHMCi9WRT/ksP3zP4UWcSbfHMDi+P+g14QTaCzmyownXWbMACAo2NfrSQxekfgay4nf/Tq4cKlU978fi0846sYSQtLtYfSOhBlFRAqqftcCYF43F+mMLJrWwoxPRBIxY6cBULDyHSwG17+/xBFXEdP/IiSbjfUfPU1zQ63LOc5w5JYJjYrl5sdmA7Dxly85vHOjZ+vKbhkZmfOOLMrI/M+Tvm09rz10I+VFeQSGhjPrnS8ZOu5Kt+d74pKRJIl9v33Jqvcex2JqJjZ1CDfO/oqILm230nSXqoxtbH1jCtX7fgVBIGTgFaQ9+g0RI29EoXJc7uPO3m1lmZhWvIDxqzuwHVkFNguKiB6YLnr2ZF7MRFB7lsOiqcokfNNLxPx2H7r8dQiSjYbQfuQMf4WsC+bQEDnErZNDrbGKrrlfMmbzNPoenkNQfQaioKQoeCibUp5i2YAFHIq7iWaoXU99AAAgAElEQVStZ623PaEz3TOucMchJnoF0hRlv9PqVeneRYUnWGuLMOXa7+D69L+2Q2uVbv8vhtIcVD7+JE14wOP5h5Z/jNVoIKxLGikXeBYO3GxoYPNPnwAw9qYHUWs7J0toxbeLqCovISQ8iitvnNYpa8rIyDgmrqs90yX30J5OWS80qReCQomhugx9Vemp5x25ZQSFgsDuwwCoz9556vkz3TKC2gtlov2z2XrMsQvGq/soJIUKjb4Itb7Y5X5NXvabIbqmEy7HtqZSb6KH3h4ovCV0MvWaCBcz/lnUayJYnPAq9apQgpsLmZD1IkrR9XexRe3Hnt7PIgoqoiu34p27ymkWj6jRUTnkcQACcpbiVWH/Xq3Sm9oUZ9Qj7kbQhSHVl2DZ9eVZP28tzESNnop3ZDJWQx1Fv7sOIBYEgX43PYVvWCyGmnI2L5rtsvSpvfQZfhGjr7oVgB/m/Ztmg/6cHEdGRqZzkEUZmfNOZ5UuWS0Wflowh09mP0qzQU9ij948+e7XxHZJcX8vHlyM26wWNix+la3fvguSRNrY65g06328dKcHi3rinrA06zny3SvsX/gYloZKtCGxpNz1AYlXP4VaF+T2Om3ut/QIxqVPY/phOra8bYCAsssItNe/i+GKuYhJozzKi0GS8CpLJ2L9U0SveQSfEzuQEKiNGknmhXPJHfEK+rB+rsUYSSK45iD9DrzK6C130DXvu5OumGAOxt3E0gGfsDnlKYqDhyK10TLzXNFeYabT3TKAMdzeQcS74mCndNVqTdOeHwEJTfJIVMHx7V7HYqgn7zd7wG7SZdNR+3rmKKktyiJvyy8AXHDrU07birbF1l8+o7mxnrC4ZPqOvcqjuY6orihj2dd2584tD8xC6+XdKevKyMg4JnXQBQAc3uU4q8URbbllNN6+hCbZhZ7STPeEnoDuQwGoz9npdNypXJk8J92VNDqaw+yf4T4nHOfUtNAY1BOAoAb3c8RanAxaWzMA1VrXZdqOaOly5M6js6nTRPJN4is0K3yJbDzKyMzX3QpIrvPvTmYXe4ZY7+z5eBkrne6xOWoQDcmXAxC26y2EVg6YM4UZQeODeswMAKy7v0GsKTxrvZacGYVKTdJV9gDiyt3L0Re6LklSe/sy5M5XTuXLHF37vcs5znDklgG48vYZhEbHU19dyYrF73u2ruyWkZE5r8iijMz/JNXlJcx9Yhrrf7HfxRh37W3MnLOYwNBzc6fIaGhg+VsPc2TDf0EQGHXz44yZ9gzKM1wsnlygV2VsY/ubUyjZtRIEgfARk0l9cBG6hD5uzXd0sW4rOYTxlycw/fgwYuFuEBQoe47Ha+rnaK98hbqAFM8szpKE94kdRK15lMgNT+Fdno4kKKmKu5ijF31E3uCnaQrs5nIZQbQSVbqBETsfZsjeZ4is2IpCEin378Xm7rNYNmA+h2MnY9R0TIzqCOfLMeOK5pOijLbqaIdzZVqXMInmJpoPLAPAd1DHyn3yfpuHxVCHb2Qy0SOu92iuJEmk/zgXSRJJHjqBqJSBHs2vrypjx0p7q/txtzyK0sNuT474Zv7bmIzNpPQewIhxl3fKmjIyMo4J89OSOvhCBEGgKOcIdVXlnbJudM9BAJRmnC7KOHLLBHQdDGBvja3/K9/kTLeMMnEoICBVZCM2Vjo8flOM3Xnj64Yo0xBsd9oG12ciOGq37QCNaBdlTAr3BWRPhJZAWw29zQdItuTgKzaeE7GmShvHD/HPYxNUpDZsISXvS7cEgdz466nx74HaaqB/xjunypgc7am6331YvUPR6E8QdGjx6Xs443jKrqNRJA4F0Yp5/VyHbpbKRhN+iX0JHXgFAPnL5iDZrC73HhDTjbSr7V39dv3wvludwtqDRuvFTQ+9AMDWX3/g+NH95+Q4MjIyHef83YaWkekksg7sYuErM2lqbMBb58dtj/+bvm50VzoTdx0I+qpSls15iNrSfNRab8Y/+CpJ/dvfRthqaiJr6TuU7LTneviExRF31VNuizGOsJUewbL9c8Tik1+6CiXKHpeiHnwzigB7zb5HLiXRhk/RZgKPfIemPs/+lEJDVcKlVCRfg9nHvY40anM9sSd+J774V7yN9pNYq0JLXtgYsiMnUO/T8fDizqSm0URwGyGPTucYzAT7utfiu9pgJsTFWIt/AjZtAEpTPdqaLAjwTLRwhPHQKiRTI8rgeDTJnnVJao2+OJMTW38EoNu1T3ncArvk4J9UZO1CodIwfMrjHh9/4/fzsJpNxPccQMrgMR7Pb4vMg/vYsmYFgiAw7ZFnO5S1IyMj4z7+QSEkpPQhP/MAh3f9yQWXT/ZofpjO6yy3QHTPQRxY+TklGXuQJOm0f88hflqqz7gIV+uC8YlOoakki/qcXYQNuKzNYwm+wSgieyKWHUXM24Gi98Q2xxlihhO67yO8Kg+hMDciahx3CGzyT8Si9EFta8LPkE+DX7LT19tasFCL9tdtVrgu33QlnqglE/3M++liPUaSNY8k63GCxNMzT/SCjjJlFGXKKI6purLJazSNCv+z1g718Du00Lc3q6KmM6nkPUZXfEORTyoF2M+JwhwIaZJCyf7UxxmzazrhNftIPPEr+bFXnPZ6W+9D1OioHPwoUZueJzDrJwzxozGF9Phr/Mn3NdRPiyAIaMY+hvGL2xCL9mHLXIOq56Vt7qOy0UT8hAepPbKJppJsynf8TORI1zc9kkZdS0XmLsoOb2XDx89x1b++RK1tnzuzstHoMGOpW98hDL3kanauWcp378/myQ++R6V273ylUm9y+P7LyMh0LrJTRuZ/ip3rVvLhc/fT1NhAfLdePPPh9+0SZNyltjSfn/59F7Wl+eiCI7juhUUOBRl3XDKNZcfZOfd2uyAjCMSPnkLK/Z95LMi0FpTE+hJMq/5ld8YU7weFClXalXjd9gXai2edEmTcRrThm7+e6N/uI3zba2jq87CpvCnreh2HL/6U4t73uSXI+OmPkXbkXUZvmkZK7hK8jZU0qwM4EHczSwd8wu4u9/3jBJkW/nbHjCBgPfkeK836TilhkmwWDDvszjKfQZMR2hmYLEkS2T+/BpJIeP/xBJ20/buLaLNw4Gd7u+mUi2/F38MW2KV5mexfvxSAS26b2SniidVq4dO3XwJgzOXX0iUlrcNrysjIuE/a0NEAHN75Z6esF961DwqVmqbaChrKzy4/aYvAk59lDbmnB6yf5ZbpYhe0bccdlzAFRiVh9k9AkER8Sl0EtgtKGoPt5VYhdUfc2msLmpOijMWFU8aVIJNgzeON2sd5ouENrmv6iQHmvQSJtYgoKFFGU6MIBsBPaqSbNYdRpk1MMyxifvXdPNjwPsmW7NMCd9vjojkQdAnpgRejQOSa4jn4Wu2CUFuttVto9I3jaPKdAPTKXYhPU8lZr7v1HppihqNPGIcgiYTvnNOmE7VFnFEERqMeai+RMm/6CMnkuNNTHb7EncxVK/pjAabaUodjWxAEgf43P4NXQCj1ZQXs+Potl3Pay1V3zcQvMITyouOs+eGzc3YcGRmZ9iM7ZWTOK+3NkxFtNlZ9PZ/fvlkAwIBRl3L7E/9pd3cldy5yK/MzWTbnIZr1tQRGJXD1kx/hFxLZ5lh3BJnSfb9z9IdXEc1GtIHhpN38MkR5HhDcsnfJZMCy52us+/8LouVUmZJ6yFQU/meXcbl870+KMYFHv0WttwcOWtU6KrpMojJpIjYnd/pOIUmE1OynS96PhNT+FVJb45tEVuSVFISORFS4d4fGGQrRgr+lEn9TOf7mCgLMFfibK1CJRhSSDQU2FJKIIIkn/9+GWeFFozqURk0IenUojeoQGtUh6DWhGJV+/7iuFcrmKgCs3qGdsp7xyGpsdSdQ+Abj0+9qj+e3OIHK96ykIS8dpcab5Ks8d7nkbvwRfXkBWr9gel52p0dzJUni98/fBEmi18gJxKX08/j4bbHq+8UUHc/BLyCQm++f1SlrynSMefPmMWfOHMrKyujbty8ffPABQ4YMcTnvu+++Y8qUKVx11VUsXbr0POxUpqOE+WnpPWwMK5e8T3b6TkzNTWi9fTxb4wy3jErjRXhyb8qy9lGSsYeAyNNvALTllvFPHkTJxi+oP3a2u6Y1yqQRWLZ9hq1wL5LVhKBq+zzEEDMMTUMBPid20JhwkdP964PTCKrcQ1B9Bnlx7oeet5QvOXPKuBJGxjf/ym2Nn6PGSq0iiH2ageSpupCn6kKBKhGzYH99WslIuK2cSFsp0bYTjDBtJcmaxxjTBsaYNnBMlcxq78vZpB2NJPyVV9f6+K4cNKuj7iemOZswUyFXF7/NNwkvn1qrRZg507lxPG4SUZVbCa07RP+MuWwd8OZZXRpbu2aqBk7Hp2wvmvp8gjK+ozZt6tnvmd5EqJ8W1cApWDP+QKotwrJ9EZoxDzvcu5A6Ab/039HnHyB/2Vt0v/0tlzcNtLpABk59ka3zHiF783Kiew0leWjbjpyO4OsXwHX3P8Xi159kzQ+f0n/UpUTGO3dktSC7ZWRkzg+yKCPzj6emsozFbz5D7qG9AFx8/TSuvvNRFB4Gg7bgjiBTkrWfFXMfwdxsICwhhauemIe3f9tZJ64EGdFqIXv5+xRt+QGA4O5D6H3rK2h0gQ5bFjtDEm3Yjq7GvH0RNNtbMCriBqC58EEUIUltznEqyNgs6PLXEXD0O9SN9rs7No0/ZclXU5l4BaLajZNjyUZExTa65P1IgP4YACIKikKGkxV5OVV+Pdotenhb6ohqyiLakElEUw6BplJ0lhoEOq9jQbPSjyK/PhT49aPQrx96TVi7ypjcxWUJk82Mymi/S2j18axNeVtIoo3GrZ8D4DP0VgR1+yzSVmMjx5a/A0DCpffiFehZhpOpsY4jK+3Cau+rphMZGuzR/KzdG8k/vAulWsMlU2d6NNfR+11RUsxPn9sDi6dOfwr/wL8v00jGzvfff8/MmTOZP38+Q4cO5d1332X8+PFkZWURHu7YpZefn8+sWbMYNWrUedytTGcQEdeF0Kg4qkqLOLh9HYMvarssyBOiew6iLGsfJw7voOfY61yO90vojaDSYGmowlhZgHd44qmfhem0p7ruCGFd7d15GisRi/ajTBrW5npNMcMJyvje7pQRbU6D9RuC7e680LpDdseJO9+XkoRKsjs9RAfGd1eCTJy1gLsa7eHmuzVD+NhvOo0K/zbHmgQvilQJFKnsAtcy72vpZs3m0ubVDDdtJdl6jOn6Dxht3MAHfo9Rqzz7871lP47EGYvCi59in+au44/RxZDOkOrl7Ay95rQxZ4kzgoL9qY8zduf9hNYdJvHEKvJjz/77aRFmRG0AVQMeJGL7qwQd+ZrG+NFY/M8OvW8RZjRjH8X038expv8XVeoEFOHd29y7ICgIGD+Txk/voi5rG7VHNhKc5trJHdZ9AN0vvY3s35ew7YvXiezeD98g98rDW+OshAmg3wWX0mvISo7s2sR378/m4Tc/b/d5tIyMTOcjizIy/2j2b1nL1+/+i6bGBrTePtz00PMetbtuDwUHt/Hr+7Owmk1Ep/TnysfeQevj1661jPWVHFzyLPX5dtdI0sV3kDzhHgSFsl2CTEXGDsybP0aqsgsfQmAsmlH3o0gc5vCOjENBRrSiy1tL4JFvUBns4Yo2bQD1PW+gMPpSRJXrC3dBtBBTso6k/J/xbbbbhq0KLbnhF5MZPYkmrYeCgiQRaiwgypBJlCGTaEMmgeayNoeaBS116jBqVeHUqsMx+0ZiUvoiCkokFIiCstX/K9DamtBZqtFZqvEzV6GzVKGzVONrrcfbpqd73Va619nbnNZooyn060dN2GDKAvpgVbkWpjzJlXGFqtkeNCkqNIhae3ev6kYTIe0UiYwZa7DVFCB4B+AzwLNQ3tbk/74As74a77AE4sbc6vH8IysXYG5qICC2G0kjPeuYZLNZWfPF2wAMn3gbgeEeluU54NtP5mI2GUntP4QLJ3juIJLpfObOncs999zDHXfcAcD8+fNZtWoVixYt4umnn25zjs1m45ZbbuHll19m8+bN1NXVnc8ty3QQQRAYcvEkfv1yHttW/9wuUeZMt0xcvwvZt/QTig9tx2JsQu11+uf4mW4ZhdoL/6T+1OfspC57+2mijH19uzAjCAKKxGHYDq/AVrDLoSijS+yHTa1Dadajrc7EFObYGasP7oVNocbbVIWfoRC9zo3SXkGgUhtPhCmfaGMuDZrTL+TdKR1KtdjLpQ6r05jj/7RnN08EgRx1CjnqFL4Q7+Ai4xquM/xEmuUwc2ofY57fw+zXtp2H5kycqfKK54/Ie7iy9EPGVnxJrt/gNrtLtXZwNHlHcjT5Tvpkf0TqscWUhl2ASXu2wH7qPUm4CF3+WnxLdxG2621Kxr1zlrsGTgozCYNRdh+LLXsD5nVz0d70kcPyX01oAgHDplC39UsKVr5HQPdhKDWuz6V6TLiDioyd1BVmsunTfzHh8Q897kjoCkEQuOHB58g9tIe8jHS2/voDo668ya25sltGRubcI4syMv9IRFFk2efvseZH+939hO5p3Pn0G4RFx3VoXVcumfwDW1j17uOINisJfUZy2Yw3nAavOXPJ1BccJn3RE5j1Nai8dPS6+SXC0y48Oc8zQUY06in7dS62zDX2J7Q61ENuQ9VnEoJS7XBem4KMJOFTvI2gA4tQ64sBsHkF2cWYqEsQVa4DA5XWZuKLV5FQsBQvs93RYVLqyI66nOzIyzGp277T1uZaopm4xkMk1e+mS8Nu/CzVp/1cRKBSE0uhV3eKvLpTqY2lVhWOQenv9ATSVZhu6+OHNx0jQZ9OvD6dyKYcgk0lBJtKoOpXzEpvtnR/kuKQtk+8zwUqQwUANp/QDpdVSaINw9ZFAPgOuRmF1rdd6xjKjlP85zfAyXBflWcCVEPpcXL/tIcD979hFgpP2rED6euXUl2Sj49/EBdce7dHcx2Rl32Ubet+BeD2Gc/I4b7/AMxmM3v37uWZZ5459ZxCoeDiiy9m+3bHnWxmz55NeHg4d911F5s3b3Z5HJPJhMn01+dwQ0NDxzYu0yHC/LQMu+Rqfvv6Y44f2U/FiXzCYxI9X6eVMBMS3x2/8Fj0FcUUHtjSZlnImcJMQPeh1OfspD57J1EXTHF4HGXiELsok+8kL0ahojlqELrCjfiU7nIqyogqL6oDexNes4/wmj3uiTJAoU8vIkz5xBsOk+k/wq05rUmxZAJwRJ3Woe8avcKfZT7XsUszjEf1b5NkzeOZhn+zwnsS3/jeik1o+zzFkTizP2g8PRu2kmzYz8QT77Ik6Y3TSqJaaO2ayYu9gvjSPwjU59IrdyH7ej3pcL9VBjOqwY/i/eudeFcexv/YKhq6ti0EVulNCAPvxTt/J2LZUayHVqDu4/imQuDIW2g8/Afm+nJKNiwhbvz9Dse2oFCqGDj1RTbOuZOSo7s5/Mc39J7g+Y0PV26ZoLBIrrz9YX6e/zqrvviQ/qMuRRfgmWNVRkbm3CD71mT+cZhNRj57ddYpQebi66fx+NtLzrkgU3R0F7++/wSizUrXweO44tG32y3IlO3/gz3zHsCsr0EX1ZWhjy1utyBjPL6LkgVT7YKMoEDVexLet32Buv91Hgsy2sojRK6dSfiW2aj1xdi0AdT0v5fiiUvIj5voUpBR2owk5v/M6C13kpLzOV7mWpo0wexNuINlAxdwKO4mtwQZb2s9PWvWc0Xe69x7aCpXH3+FvtWr8bNUYxa05Pr0YUPw9SyJfpbXuiziw4S3WR5xH/sDxlLs1Q2DKsDlCWS1wexWhpFNoaFU15MdUVP4ofsbLEj7ghWJT3MgZAL1mnA0tmbGZsymV/FPpwUZnku8K9IBMAd26fBaYvZarJXHELz88GlnG2xJkshdOgdJtBKaNoaQniM9XiP953eRRBvRfUcT0cN1NkhrzKZmNn7/EQCjrrsXLx838o1cIEkSX300B4CRF19BYreeHV5TpuNUVVVhs9mIiDi9NC4iIoKysrZdc1u2bOGzzz5j4cKFbh/ntddeIyAg4NQjLq5j3y8yHScgJJyeA+yfLTvXLu/weoIgkDRoHAD5u9e6NSewuz3EtyFvPzaz8ayft4T+KuMHgkKJVFuIWF9y1rgWFEl2ocS3ZKfLY5eH2NtyR1TtdmuvAEW+9oDg+KbTA4LdDdjtbrG3Ys5WpzgcU6U3nnq4olQVw3OBb/Crt70L0sTm5bxS9yzhtrb/7bbe72l7FgRWxjyMUeFDXHMmQ6uXOZ1fqTeBoORAjxlICMSVrSek9oDTOWVSIDV97gIgOH0hyibHLc4l31DMA6YBYNmyAMlQ43CsQu1FyCUPAVC6+WuaK90LmvaLiKf3tfbMmj0/zaOq4Ny0yb7g8snEJveg2aBn1Zfz3J7nTptyGRmZ9iOLMjL/KPR11bz71F3s37IWlVrN7U+8yrV3z0Sldiw+dAalOQdY9c5MbBYzSQNGc+kD/0GpcnxMR4KMJEnkb/iKQ1++gGg1E9prFINnfIJPmOcn/KK5mZrVb1H53UwkQxVCYAza699FM/YRBO8Ap3PPFCNU+hOEbXmFqLUz8ao6iqjUUtfrZoonfk5Dj+uoNjkXOBQ2I4n5/+XCLXfRI2cRGksDem0k25MfYnn/j8mKnohV6dyiqxRNpNRu4ppj/+Kew9MYX/g+3ep3oJVMNCiD2BVwCV9EP8NrXT5jSczzrA+ZTK5vP4zK9jk7HL0XrjCpdBwLHMaGuPtZ0vMjsiKvQEBiYP5njMh5B4V4dreGzsbnxA7AHhTZESSbFdt2+4Wq77DbUHi1rwxPKthJTeY2BKWqXeG+ZUd3UHpoM4JCRb/rHgPwqBRr58qv0NdUEBgew+AJ7ROWzuTAri0c3rsdlVrNTfc81ilrypx/9Ho9U6dOZeHChYSGuh+K/cwzz1BfX3/qUVRUdA53KeMuQy+1lxDuXrcc0WZr1xqtnQJJgy8GoOjQNqxtiCxgd8u04BWWgCYwEslqRn98n8NjCFodiih7Dowzt4w1bhgSAtraHJRNVU73bY63ZyGF1B1CZTU4HdtCoY/dfRNhzENja3JrTgsBYi3hYgUiArmq03NSHAkxrZ93NMYqqFmsu5s3/J9BL+joas1ldt1zRFodi1en1m8lzjSow1gTaXdFjq74mgBzhdO5lXoTdf4p5MfYBaG+mfMQXHxfH4uegDGkJ0qLgdC9Hzoda02dhBjSFUyNmDd/7HSsT/cL8O4yBMlmpWDFXCQ3b+gkDJ9IVJ9RiDYrGxc8j9XkWgg7kzPbw5+JQqnk2nufAmD76p8pPpbp8TFkZGQ6H1mUkfnHkJW+k9dnTCE/8xC+fgHMeHVBp+XHOHPJVORlsPytGVhMzcSnDeOy6a+3T5ARRbKXv0fOig8AiL/wJvrd8QYqL99Wc92702AqOkj5Z9Mw7LN3D1H1uRqvKQtQutGtqbUIIVgMBO3/hJhV9+BbtAVJUKDvMoETV35OXZ/bkdS+Th0/CpuJhIJfGL3lLnrkfIbWXIdeG8H25IdY2f8D8sIvQlQ4EcwkiUhDNhcVzefuw3dwWcFcEvTpKJAo0SaxPvh6Pop7nTlJ81kRfg85vv2xdkJ3pjNx1zVzJqKg4reIu9nV5X5EFHStWMMlh59Fa6nvlD21hcJYh7Y6A4Cm6I6JMuKRlVBfYu+4NNixFd/pGlYLuUvtrTpjR9+KT9jZgYhO54s20n+aC0DXMZPxi/CsDXqTvo4tv9hbeF40ZQYqted/H2eWsok2G1999CYA46+9hfDos/MKZP4eQkNDUSqVlJeXn/Z8eXk5kZFnd787duwY+fn5TJw4EZVKhUql4osvvmD58uWoVCqOHTvW5nG0Wi3+/v6nPWT+XsL8tKQNGY2vfyD11ZVk7ndcruYuIQkp+AaFYzObKM3c63jcSWFGEAQCu9s/d+uy2z7+KbdMor2Ftpjv2AUj+QRjC7e78HxcuGWMuhgafWJQSDbCqh0LQq3Rq0OpUUeiQCSuKcOtOS20uGSKlPE0K3w8csScSVsizV7tEJ4MeodCZTzBYg0v1b9IhM11q2j4y+mTHngJBT690Egmxpd94nJepd7E5ogpmNQB+DUV0rXwv84nCEqy0x5CEpToirfgW+Sk9FGhxDzyEUDAlvE7tiInop0gEDr+YVCqqc/ZSe2RjS733jKv301P4eUfQn1pPju/f9eteZ6SnDaA/heOR5Ikflk4x23RSHbLyMicO2RRRuZvx2wy8uP8N3jv6XuorSwjPCaBWe98SbfegzplfWeCTHVxLsvmTMfcbCA6ZQCXP/IWSicXfY4EDNFq5tDXL1L457cAdJv0MClXP4bQKjfDHUFGspqpW/8RFV9Ox1p7AkEXjvaaOWjGzHCrY86pC31JxPf4GmJX3kVA5s8Iko2m6CGUTPiY6qGPYfMJcfp6BNFGbPFqLtx6Dz2zP0VrrqNRG86O5Oms7GcXY9qq727B21LHwIpfuDljBjflPEmf6tV4i03UqsLYEHw9cxM/4OP4N9gQMplSry7/uHbUpyEIZEZfxfpeL2NW+hDRcJjLDzxKQFPBWUPdaY3uCp+SHQhImIK6YutA5yXJasK282SWzMi7ULgRNtgW1Tt/pLmyALUumMRL7/F4ft62ZdSfyEHj40+vK+8FPHPJbPrpE0xNjUQkppA26nKPj98Wf65eStHxHHx1/lx7m+t6f5nzh0ajYeDAgaxbt+7Uc6Iosm7dOoYPH37W+B49enDo0CHS09NPPSZNmsTYsWNJT0+Xy5L+x1Cp1Qwaa3c6bFv9U7vXaXHLCIJAXD+7A6Vw/ya35gak2P/O6rK2O7xYDdNpUSbayzBtRfuQrI4/+63x9pIs3xLXIlNZqF3oiaxyXe7UQqGv3bGTaDjo9hyArpYcAHLV3dolxDijRZypVoYyO/BlipRxhIjVvFT3IsE2546hU2s0mqgymPkt6kFsKEnR77yozTYAACAASURBVKCb3kmGz0nMKh3b46YB0D3vG7yNzh02zf5JlHS9AYDQvR+gMDc6HCuG98DS036z0LxurtPfuzo4lsBh9iDd/BVzsRrdcz9pdYEMuPV5ADI3/EzRga1uzWuNK7cMwKQ7HkOt0ZJ7aA/pW/7w+BgyMjKdiyzKyPyt1FVXMHfWNDYs/RqAUVfcwNMffk9EbOK5P3ZZIb+8/gDGxnoiuvRi4sx3nWbIOMJmNpL+2ROU71+DoFSRdsvLJI655bQx7ggyVn0lFV9OR7/jG0BC2XM8XrcsRBk3wK19tAgyKn0JEeufImznWyiNtVj8Yikf/W8qRr+CJTDx5H7MDgWEkOr9jNgxg7SMD/AyVWPQhLKzywOs7PcBx8PHISkc54MHNxdyceGH3Hn0HkaVLCHcXIxZ0JDuN4pFMS/yTuIHrA+ZTK3as1bKnUV73DItlAQN4re+c9FrI/EzljHuyIsgiZ24Ozu+xVsAMMR4HtrYGjH9JzBUgV8EPv2vbdcalsYaKtZ/CkCXK2eg8vIsy8XS3MjhZfYsmNQr7kXr67zs7kxqyorY/Ztd6Lxk6sxOad/ZZGjk+0/fA+Ca2+9H5x/Y4TVlOpeZM2eycOFClixZQkZGBg888AAGg+FUN6bbbrvtVBCwl5cXaWlppz0CAwPx8/MjLS0NjabznXcy55YRE65DEAQObd/Aibzsdq/TIswkDrS3JT6+a43DEib4yy0TkDwIhVqLqeYEhmLH7hMhrCuCbyhYmhGduCYsCXZRxrtsH4LV+cVyWajdpRNZtRNBtDod28Ixnb3DUVr9BgTJ/ZIvg8L+eR5kds+90h6q9EaOG7yYHTibE8oYQsUqnqufja+od3uNDGskO0PswbqXlH3mVglxbshYSv1SUYkmUnMXuRx/ottNNPvGomquJjjduSPHMuhOJO8gpNpCrLu/djo2cOStqIKisTRUcWKt+5lX4T0GkzxmMgBbv3wdi9Gz0jR3CA6PYtwNdwLwy8K3MDW7dwzZLSMjc26QRRmZ88aZF8RFxzJ585FbKMw5iq9/INNfmceUGS/g5e26/bDbx3TgktFXl7H0jQdobqghND6FSU98iMbbeXZJWyKG1Whg/8LHqM7agULjRf+73yZq4IQz5rn+AjMVH6Z80d2YSzNQePujuWI22kueRNC6dxFcbTCDaMM/82eif7sf74qDiEotNX3v4sRl82mOHuz0dQD4GooZsP9lBu97Hj9DAWa1H3sT72BF/3kci7jEcZmSJBHfsJ+rj73MbVkPk1azFrVkoVibzNLwe3kz6RN+jpxBnk8akoM2kv8r1Psk8Gu/d7AotOhMFQQ0dW4OhbKpEt/ibQAY4se0ex3J2IBt9xcA+I++H8HDTkktlP0xD6tRjy62B1FDPGthDXD0108xNlSjC4+n68kTTE9cMn8snoPNaqFLn2Ek9+uYSNXCD5+9T21VBREx8Yy/5hbXE2TOOzfeeCNvvfUWL774Iv369SM9PZ3Vq1efCv8tLCyktPTcXUjK/H2E+WmJjE+m3yh7p6Tfvv6ow2tG9xyMLiQKc5Oegr0bnY4N8dOi1PoQlGoP5q9O/93h2HA/b5TJFwBgzXVc9iIGJyPqIlHYTHiXOy9LEmIHYFIHoLHqCak75HRsC1l+wzAo/fG31tBN735I8HatXSzqJx4lVHIcXNsZHDN48bjqaWoUwcTZiniq/lXUkvsX90t9rqFRGUiI+QSDa1a5niAI7Ii/GwmB2PKNBNUfdTpcUmrI6zsDgIBjq/CqcBISrNVhHj4dAMvurxCr8x0OVai1hI5/FICybT9iKHFfZOx5xT14B0diqC5jz8+e/ztwxy0z7rpphETEUF9dwe/fuS4Pk5GROXf8b18hyfzPcnDHRuY+fjt1VeVExCXx5Ltf02vwqE49hiNBpqmhhqVvPoi+uozAyASuevJDvHyd5wm0JWRYmvXsW/Awtcf2ofLyZeB97xOSMuyMea5POhoPrKTi6xmIhmrUYcloJn+EKtn97jbVBjPqhkKi1s4keP8nKGwmmiP6UXL5AhpSJ0OrDk1tvQ6VRU+PrE8Yuf1Bwqt2IQpK8uOvYlm/eWRFTXQoxihFM6nVa7k16xGuPf4yifr9iAgc0Q3lk9hXWBD3KnsDLsak7DyRrTPoiFsGwKQOpMqvBwDhDUdcjPYM/9yVCJKN5rA+mIOS272ObfcXYNIjhCbj3fuKdq1hKDxIzV57B5Tu1z1zWimeO+jLC8heZ7+L2H/yLKc5TW1x7MB2MnetR1AomXDn0+1uV906TyYv+yirf/4KgLtmvohG675AJHN+eeihhygoKMBkMrFz506GDh166mcbN25k8eLFDucuXryYpUuXnoddypwrJky5H0Gh4ND2DRTlOL+gdkaYzgtBoaDbBfZ2x1mbnXfxaSG0n/3mStXBNUg2x46V4N4XAWA7thlJdOBSEYRTbhnfEy5KmAQlpWH28qnoirbLVsL8Tv/csinUHAi8BICBtb85X78VlcpwMlU9UCAxxtbx/B5XVAihzFI9TaPgSw9rJo82zEVw021qUviwIsCei3Zh5bd4W13nulX7JpMdav/99M6e79LZqg/pTXnCZQCE7Xobweb4XMGWdCG2uKFgs2Be9xaSk7V9kofg23MMSCL5S+cgie69ZpXWm/432tt6H137PSVHXZdueYpG68W199tDfzf88iVlhcfdmie7ZWRkOh9ZlJE5r0iSxNqfl7Dg5UcwGZvp0X8YT7zzZYfbXbuLyaD/f+y9Z3wUZfu+f8zM7mbTe0hISAgQeu+IiIJIEbCgAnZRERtYQETESlOKgohiw66AUgRBRFHpvdcAAVJJ78nWmf+LER4gW2YD+nyf33+OV3zIfd0zsym7c855nRcr3n6KkpyzBEfGcuv4+QSERHiscSVk2CpL2T3/SUrPHsIYEEL7x98nLLnNZXWe37QUp4PiX9+l+Ofp4LTj3+R6DEPmIIbGab6ewgoLwakriPvlSfwKjyEbAyjo/Ay5N0zHEXTpPjWuQ1GIz1rHdZtHUj99BaLiJC+qEz+3eZct8Q9gN7h26YiKg1YFa3no6ChuyphHlCUdq2BmS9gA3q0/l+/jnifDv0mtcmICnWU0sB6nseUQTSwHaWo5QDPLPlpY9tKyeg8tq3cTZ89A9MGi/U+QF6IGLl9VUUZ2EHJyFQBljW+t9TZKWQ7yviUASN2f8FlMAVBkJ1k/qUG4sZ1vITS5rc977FsyG9npIK5ld+q2+nuqiEaXjNPp4JfP3gKgU7+hxCQ28vn4lyM7nXw881UUWaZbrwG06XztFe+po6PzzxCb2IAOPdUb5DXfep50443oIDONewwCQSDn6C7K8jI9ro8M9iMkpTOGwDAcFcWUnnTvPjEndQC/IKguQc4+5HadI0n9exOQtdWrOHDeJRmXv0Vzi+ye8L4ANKzYQ6gt18vq/7DR3BOAG52+55bUhjNiPSYax2LDSCfbDgZXL9Ncuz3oBjKNyZjlSnrmfaupZlfCfdhEf8LLUknMWed1fUazEdj8IjCVZxF+6Cv3CwUB2zVPoxjMyFkHcB7y7N6JvPFJBFMAFRmHyN+lfdx7TLPO1O+uulQ3fPoGtir3eTeu0OKWadm5Jy06X4fsdPDjh9M1h/7q6OhcXdyHQ+joXGVKCnL5cvYrHNujPpG5dsCdDH3iRZ+foGvBlUvGbq1m5ewxFKQfxz8kgltemE9wZM1pHhfjUpCpKGH3h09RkX0CU1A47UfNI7huo8vqPAsyzqpSCpe9gvWsOg0i5LpHsLcZiuBDe09Jfg51ts/C/5y6R3VsBwq6PIczoOZY2MuvI7AygxZH5hFRon6ILA9M5HjjR0g1t3R/QEWmSclGuuV8R5jtHAClhgi2hg1gd0hvn0ZX+8uVxNkziXVkEm/PoK49nXh7OqFyiaZ6O0ayjfXIMNYnw5TMUb/W5BrjNR//SvknRJnAzM0YqgtwmMOpqHddrfdxbv0YnHaEhPYI9Ws3valwx1Kqc45j8A+m4aAxPtfnHNpM9sEN6gjsO30fob3rl0XkZ5zEPziMG4Y96XP9eS52yfz202JOHT2If2AQ9z89vtZ76ujo/LNEB/uRX26l7/DH2PPXLxzesYGzxw+S1KRVrfcMiowlvkUXsg5tI3XjSjoOedzzOYQFEtn6RnK3/kDBvrWENakZMg0gSAYCG/eg8uAanKc2IiW0cbnOEdcWxRiAwVKMX1Eq1simbo9dGtUOuxSA2VZEeNkxikObe72+Yr+6pAW2pUHlPtoX/0JpnQcuTDDyxDa/a3io4hMaK6epJ2eRIf7z76MHxabMNTzIWMfHDKv8lmPGZhw3er9GRZBYFvEgT+e+SofiNeyO6E++ub7HmmpTOHvjh9ElYyFNT3xGdnR3HEb3beFOYyBnWj1B412TCT26iIrE6926VpXgOtg7PoRp2wdYN8xHSu6GEFTz8xeAISSaiJ4jKFw3j7Nr3ie8+XUYgzw/EDxPy1ufpDB1F+X5WWz7bhbXPfyqpjpfuH3keI7v3Ubq/u0c3PYHrbv18lqTX26t4drS0dGpPbpTRudf4czJY7w15h6O7dmK0eTH0CdeYvjTL/9rgozTYWfNvPHknNiPKSCIW154n/A4z6N5XbYsVZayZ8HTqiATHEGHJz/wWZBxlOSQ9+XjWM/uRjD5EzlkKqHXPuiTIFNxejd11z6J/7ndyJKJwg5Pknv9FO+CjOKk/pkfuWbb00SUHMIh+nEsZQRbur7nXpBRFOqX7eKe48/R/+w7hNnOUSGF8HP0g7yT9B6bwwd7FWQERSbJdpJBpYuYmDuWd7MfYHz+RB4o/oAbK1bR3HrggiBTKEWRbUggy1CPDGMS6cb6nDU24IyxIenGZCyCGSN2kuxpXFu1nuEln/JG7hjeOPc0vctXarJDX2kLU0FwEwCCrbmY7NoDCz0RekydNFLe8OZLWs58Qc49inxUzUCQejxJ5N9Bl75gLy8gZ53av5484ClMwZE+1TvtVvYsUl0uKb2GERKb7FN9RUkBf3z/PgC9hj+Ff5Bv4cCuKMrP5buP1LHcwx59hoio/07QtI6OjnZi4pPo1FuddLP66yvLlokOMtPkOtVxcGLTSmQPLUnnadhdbXkqPvwXTqv7ENSAptcD4Dy5wb3LQDJir6e24AVmenalKJLpwhQmrS1MALsjVGdRu+JfkTSE4QKUiyHsFFsD0Me5SVPN1WC1dAPrxO5IyIwumUWQXKap7qS5JfsDuiAic0PWR6DB1XG4zs2UmOPxd5SSePwLr+uL466hKPYaRMVJ+LaZ4K4tDXA0vwVnVGMEWyXlv3keXx3S8VZMdVKQLRWk/jTX63mcx+AXQNu7XwJB4MSmVZzd+5fmWtDmlomKS6DX7Q8AsOKzd3DYtf386OjoXD10p4zOP86BnZuZ/fJoqqsqiUtsyMhJs6lTz7cbNa24EmQUReGPhVM5u38zBpMfg56bQ3RiY4/7uMuQ2b1gNOVZqZiCI+j4xAcE1ql/WZ1nQcaen0bed88iVxQihcQQdddMTDENPI7tvuxisO9ZROy+jxEUGVtoMvnXvoQ9JNHrdQRUZtHqyLuEl6j9+fmR7Tnc7Gks/jEUuTl+bOVxrs3+goRKtcYi+rMpfDBbw27GJnq+4TcqVppYDtHasovW1bsJly8NEiwUwsmS4skQE0iX6pEuJZApJWARau4bcVHbi6DIRDlzSbCdJcF+hga2VBpbj1DHkcNdpV/Q2rKbhRFPUyL5Jib4gp9D/QDpFIzYDVeemWPO3Y9//gEU0UhpLVuXFEXG+cdsQEFsehNinWa12idr1SxkSwXB9ZoT3/1On+uPrPmUirwM/MOiaTnwsQv/r7V16dcvZmKpLCM2uRnt+9zh8/EvHO8il8xX779FVUU5jZq15qZbh9d6Tx0dnX+Xm4aOZOf6nzm2ZwvH926jSbvauf8AEttehzk4nKqSfE5uWU3jHoM9rg9Naok5KhFLQTr5u38m9hrXfw/NDbsiGP1Rys4hZ+1HSnDd7ulI6oEp7Q9CsjZQ1HqExxbfysSekPsHdfM2crjRI5ragVODu1BmiCTEUUiH4tWs9uvntQZgndSDbvJehjjX8LPUi1wxWlPdFSEIvGN8hKa2NOopOTxWPp9ZIeM1XeeKsPtpUbWbJpYDxBRsJS/acwi8LBrZmvQo/Y+/Rou81RzL64cpxnNm25lWjxNSsJ+gklQKDy7G0cbN+4YoYbv2WcwrnsRwegOOkxswNHLtdBVEA1H9nyP78yeoOLiWsrTBhDTQNl0zsmEbGvUazsnfv2XrV29Tt1knjOarm9d3450j2PbrMgqy0/lz+Vfc+PdkJk/obhkdnauH7pTR+Uf5a80ypo97jOqqSlJadeT5WV/8Y4KMO7YumcfRjT8hCCL9npxO3cae8zFcT1mqYO+CMZRnHsMYGEaHx9/3WZCxZh8h7+unkCsKMUQlE/PAAt8EGXs15j8mE7F3AYIiU5HUi5yb3vUuyCgyiek/0X3b04SXHMEh+XOo2Wh2t3vDrSBjdpRxY/p7DDsxnoTKIzgEI5vCBjG7/jz+ihjiUZCpbzvBg0VzmZU9gqcLp9Gzch3hchEWwcw2Yyfe9x/JwyHzGRU6jzeDJvB5wH2s97uek4ZGLgUZgKIK64XzVASRfEMcewO6sjJ0GHOiX+G5ugv5NuwRrIIfTa2HmJT7PG2rt2t7XWtBaFU6AKX+CSiC75ktlxN+WO1dL2vQH2eA6w/E3kQN+ehalHOHwRiAdG3tWn5Kj26g9NBvCKJEk6Gv+JxHU3buNMd+WQhAu6EvYPQP0nTu5zl7ZDcH/loFgsCgUa8gSVf+3ODkkQNs+X01giDw6LjXEaUr/37p6Oj8O0TFJdBj4FAAln0yE9lZ+zyx2PAQWve/D4C9P32K0+HZDSAIAg173wtAzsZv3Qb+ikYzgS3VaVGOA+7zQuxJ16JIfkilmfgVHfd47OI6XXFI/gRY8ggvdT+W+2JkwcCGaFU86JG/CLNcqanuL7ELB4Sm+GPlecfHmtwnVwOLYGay8WnsSHSxbaeX5TdNdYXGWP4KGQDA4OKvNI0BzwptR3poR0TFSeeMz70G1drNkaQ3fxiAhGNfUZ572u1aJaoRjtbqdEHrb7NQLO5dP+b4ZoS0V8XAk0vfQnZod+027T+CoKi6VBbnsfenTzXXgTa3jJ9/AINHqJOi1n7/EcX553w6ho6OzpWhizI6/wiKovDjFx8wf+oEnE4H3W+8maemfEhAsOcpR1eCK3Fj18qF7F71OQA3jJhIcjvPWR0uBRlrFXs/fpbS9MMYA0LoMOo9gmIbXFbn+Q3ecmY3+d+OQa4uw1S3OTH3vU+pEKJZkBHKzxGw8imMaetRBInCDk9Q0O0FFIMbEePv6zBZi+mw9zWaH1+AJFspjGjDpm7zyUzoC4JQU5BRFJoX/s4DR5+kZdHvAByO6MU7SXNZG30f1VKwy+MZFBtdK//kxdwXmZA3gW5VG/BTrBRLEaw13ciUwBcYEfIBswKf4U+/npSJtWtJcefosYr+/BXUj8kxMzhrbECQXMHjhTO4t/hDTLL3DyO+EnZelAn03AKnBb+CowTk7EQRJEpa3F2rPRRbJc5Nqr1f6vIgQlA0EYG+Pb1yWivJWqmG+yZcfx/BCb45bRRFYdc3U9Rw31Y9SGjX26d62elk9SdTAejQ5w7iU2qfH3HeJaMoCl/PV6/pur63UD+ldu4hHR2df5eLn773Hf4YAUEh5Jw5wbZftQfDuqLH4HvxD42koiCbExtXel2f0GUgpqAwbCXnKD7qfux1UIfbAXCe+BOlqtj1IlMA9r8Df6Oz//R4XFnyoyhOXZuQ63qtK4fCvvA+FJgSCHCWMah6lcdjnEcRRGYYR2LFSEf5IDc712uquxqcEJP5zKCKbg9UfEqcI0tT3bqQIVSKQcTZM2h47hdNNdsTH0IWJJJKdlK3dJ9XYSY/sS+lUW2RZCsN9s/xGLpsb38fclgSQnUx5b/N8bhv+A2PIAWGYy9M5+Q67+1U5zGYzLS8Xc14O/TrNxRnaZuU5AsdbxhIgxbtsFmqWf7JLE01+iQmHZ2rgy7K6Fx1ZKeTj2e8wuJP1DemW+55lOHPTcFoMnmprD2uxI2D639g65J5AHQfNoYWPT23hbgSZJw2C/s+eZ6S0wcw+AfTftR7BMc3vqzO8xtSdeom8heNQ7FV41e/A9F3v0uJU/sNs3TuIAErRiEVpeH0C+Nc77cpb3yLW5vv+euILNxD921PEV24G6do4kjTx9nZfjIW/xh13WWvWbglgztOTuSmjPfwd5ZTYE5kUaNpfB85ijKj61agcEc+t5Z+w/ScUTxUPI9k+0nsGNga0JOXgl5jZNBcPgl4iH3GNtiFq/P9dyfMAOQZ6/JWzBR+Cb4VGYEelb8xMe8FYuzZV+XY5wmrOgtAib9rl5IvnHfJlCf3qTExSyvOHV9AVSGEJSC2vatWe5xb9wH20lzMkfEk9xvlc/2ZbSvJT92NZDTTYdh/Rlhrdcns/u0Hcs8cxxwYQq+7R/t8fJd7bv6Do/t3qTlWjz5zVfbU0dH5dwkMDqXv3erfpJ+/fh+LjxNoLsbo50/32x8FYN/KT3HYPb9/SyYz9boPAeDc5sVu1/nFNcVUtwXIDhyHV7tdZ09RR1cbT/3uMasEoCBBDVutm7sBwcva8yiCxPo6ajZIl8IVhDoKNdVliXF8+rc48oTjK+Jk7ROcrpTF0s3sEVvgj5UnSmYhKd7zTKqlINaGqu1kA0q/o6zM+5CAUv8EjsSouTtd0z/z7rARBE63GY1T8iOk8CDi4eXu10ombD2eQ0HAcGIdRUfd5/NI5mAi+zwFQMnmr6jOT/d67ueJbdmdxHY9UZxOtnw1XfN4bdDmlhEEgTtGTUAQRfZt+pXje7dp21sXZnR0rhhdlNG5qshOJ/OnvcTvK5cgiCIjnp3E3aOeRxT/3R+11G2/8ucX0wHoOPhh2g+43+N6l4KM3cq+z8ZRfGoPBnMg7UfOISSh6WV1nt+Iqo5voGDpRHDa8G/cg+i73qbYpr19Qjq7Bf81YxEtpVjDG5Hd9z2s0e4nJBVV2kBRSD69mI57XsHPVkJ5UH22dJlDer2B8HeY8MXChijb6XxuEfccf5aEyiPYRT821H2Q9xKmc0hw3XcdY8/h0cLZTD33JP3LlxEsl1EkRbEs5G5GhbzHbNNIThhSajUWWwuehBmnYGRZ6L28E/UqxVIEsY5s7ir9/OodXFGILlPt5CUBtRdlIgNN+BUcJTBzMwoCJc1r55KRC9OQ93wPgOG60QgG38WvitN7KNim3nA0ufNlJJO/T/XVpQXsW6IG6bYYOJLAqLq+Hb+kkN+/UUXcG4Y/RWBIuE/1F3PeJWOzWvhynvo34Oa7HiAyxvOkNR0dnf+79Lj5LmLik6goKWLdYt9aNy6n7Y13EBgeQ2VxHic3ex5lDJDU4y4E0UD5mX1UZrlvOwruoD74UY787Dbw15HQBdkvBLG6iNhyz9P7SqI7YjeFYLaXEFW83+UaV26Z48FdyfBvhlGx0q/UvZB0nqhg1XH7o9Sf/X+3MY23f4CocRz3laIIItONj1NGIE2U0/QpWaKpblNwXwoMdQh1ltCrbKWmaVN744dhkYKIqD5L4/zfvIoJ1oBYMpo+CEDikc8oy8twu1au0xxHC/VnwLRpDorNfTh0YPNe+DfojOK0k/qjb2Oom97yNAaTmXPH93L8Lw9CUS2Jb9CEHjerAt2PH07XQ391dP4ldFFG56rhdDiYN2U8G9euQJQkxrw6i7633/OPH/dyl8zZA1tYt2ASKAqtet9JVy+jL10JMrLDxv6F4ylK3YFk8qfdo+8SmtTisjrvgkzhskkgOwlofiORt79JkQ+dNIYTa/H/bRKC00ZV3S6cu3EWzsAYj9chOappc3A6TU5+gYBCRnxftnZ+h8qg/4gHFwsakdVnGZ46lmvOfYdBcZAW0pEvm77HusAByELNPI9gZynDij/htdxn6Fi9BRGZY34t+TByLBNj3+db8WbKxH+uRc0XUs0tmRM1CYCmlgOX9NdfHALrK9HlRwmxZGMXzeSEXxrSF+HLvopC5B615ai8QV/sob63QimyE+e6aSA7EBpci5Dc/e/z0O7EcloqyPjxdVAU4rrcSkRTz6GJNc5BUdjz3TRslaWE1WtKkz73Xvia9nDfGVgqyohNbkrHvrVz+lzO8q8+IjcrnYjoOtx638irsqeOjs5/B8lgZPCI5wD4c/nXFOZqa3NxhcHkR9dbHgLgwJqvkL24UMxh0cS1Vx0u5zYvcrsuoHkfBFMAjqJMQgoPuV4kGbE3UB0wxpO/ejyuIhooqHs9AAm5f3hcewmCwG+xakhr14r11LG5FxIuOZ4g8pbxcaow01o5zp1O74LV1aJAiGSuUf2e3OtYhn/pKa81TsHIyjD1M2avshWEONy0jV2E1RDM3vhhAHTM/AaTo8KrMJObPIjy8GZIzmqSD7xHQbn7D3L2jg8hB8UiVuRS9ueHbtcJgkBU/2cRDH5Yzu6lYO8ar+d+noCIWDreoebG7Vg8l8oi7a4mLW4ZgP73PkFQWAS5maf566dvtO2tu2V0dK4IXZTRuSo4HQ7mTX6BzetWIUkGnnltNt169f/Hj3u5IHPu5EFWzx2H7HSQ0rUvPe974UIbhStcCjJOBwe+nEjhsa2IRj/aPjKLsOTWl9X5IMi06EPE4JcpqtIeUGg89AP+f01XA33r30hej1fc5secvw7/qhy67nyeuNxNyIKBw82e4nDz0cjSf4SCC4KMotA6fzXDU8cSbTlLlRTCmqTn+Cl5ImfsYTX295OrublsCZPPPckNlb8g4eSguT1vxMzknejX+N3ZjoJK7yNG/21yjPXIMcRjxEEry95a7RFxmbDQME8NI0yP6o5D8s1RcjEBWVvw/Rp9EAAAIABJREFUzz+ALJkoav2wx7XuxA35wFI13NcUgOGGsR5/1t2RvfpdbMXZmMLr0ui2cT7XZ+75jcy96xFEA50feA3x73HeWgWZtAPbLoT7Dhz16hWF+54X27LOprH8m48BeHD0S/gHBNV6Tx0dnf8Ol7tAWnbpSUqbzjjsNpbMn+qTu+By2vS+HXNQKOV5mZzY5D17pf71aoBu4YF1WApcixyiyZ/Aln0BKNv+vdu9LrQwpf1JtNHzZ4mCBDWbq27eRoz2cpdrXLllMgOacSy4KyIyQ4o/0xzee06M4X2D6ix+2LGILs49muquBuvFa9gutsWEg+ftnyBocOrsC7iGM6YU/BQLA0q/0+SWORLTnxJzAv6OUtpluf8+XUAQSWvzDLJoJCx/N1EZ69yvNfpju1bNfTEcXkHRiV3ul4bFEd5DbTU7s2oO9spS7+fyN3U6DyamYSvslkq2fTdbcx1oE2YCgkIY/KDa8vvLtx/qob86Ov8Cuiijc8U4HHbee3McW35frQoyb7xDl+v7Xvh6oQvh45+gMPMkP80ajcNmIbFVN/qMfB3BQ9uUO0Hm4NeTyD+0AdFgou3DM4lo1OGyOm8ZMhsvFWQGTdQuyCgKpl2fYd72PgClTW6joOvzILq/US2qtBFZuJdu258huOIsFlM4OzpOIyPhUlHsvCBjdpQx6PQ0emV9hEGxczq4PV81ncvx8OsorLrUpioqDq6rWMub555mcNkizIqF08ZGzIp6jXlRL5Flqu+xlcgVgiITqpQhaZiYcDXY598Z4KpMY5KcVurnbwDgVMyNtd9IdhK5V32KVtrkTo8OKHcoZTk4N6t7SN2fQAhW9/DFJVN65C+Kdq8AQaD5PW9iMPsmXljKi9j93TQAmvV/iPB6TXyqt9usrFrwJgCd+g0j4SqF+346+3WcDjvtuvakc8+bar2njo7O/x3UvIsXMRhNHN216YpCf03mAK75O1tm15J5WCvdT8wBCKvfkujm16A4HaSvmed2XUiX4SCIVKduJKTMtdvDWac1zsgUBEc1pkNLiPIwUrgsohUVIQ0xOC00yFih4cr+w291RmAXTDSxHKBT5Z8e155vYQJYI13Pr2IPDDh5zf4uLeVjPh231ggC7xpHUI0frZVjdCrREOArCCwLfxCALhXribeleRVmFNHA1kT1QUiLvNWEVmd6dXlYguuR2UR1gSYd/oiyfPdOLTmhI47G/RBQMG2YiWKvdrs2tMtdGKOTkavLOLFyrsdzuBhBlGh55zgEQeTMrvXkHNutuVYrnXoPIrlZWzX09+OZmmp0t4yOTu3RRRmdK0KWZea9+QJb169BMhh5bvJcOl/X51859sUumdL8LFbMeAprZRmxDVsxYPQMJIPRba0rQUaRnRz+7k3y9q9HkAy0fnA6kY07X1bnRZA5sYmCpf9pWfJNkJHx2zIHv31q8Gtx6wcpbvfYhRwYd9dRL3MNHfa+gslRQUloE7Z2mUNJWPNL1/39WtWtOMw9x5+lYdkOHIKBP+MfZkWDSVQbw2qIZ8nWVCbljuWeko8JlUvIk2L5KOI5psdMI9Xc8pJ93eGvVNNCTuUW5zqed3zCfPskVttH8JP9MdbZ72Op7XE+sr/EZPss7nUup518CH/F/QeY2rDXvwsALS17EZUrc/PUK9qGyVlJhV8M50Jbey9wQ/TZ1ZjK0nH6hdZq4pKiKDh+nwH2aoT4NoitPYdYu8JeUUTm8inq+Vx7L+GNOvq8x95Fb2MtLya0biOaD3j0wv9rdclsWvoJRTlnCQqPpvdVCvfd9OtKDu/ZjtHkx4hnJ9XKPaSjo/N/k9jEhgy4T23dWPbxTIrycmq9V4f+dxOV0BBLRQl7li3wur7pbc8hiBLFRzZQesr1TbAxKonAVuoDkZI/PyLa1d9CQcDSTh3NbTr8A9g8jK4WBDIbqy06DTKWY3C4zilx5ZYp9qt7YUT2kKLPiLRrdDsIAjOMI9kqtsMPO1NtM2ggn9VWe4XkCtEsNKgBvo85vsVZ5v2cz5ibsjugOyIKtxct1OQKygprf2FEdpf0zwDvgkJOw9upCGuCwVFF8v45Ho9j6zoKOTAasSybsj8+cLtOkAxED3gegPL9qyk7vc/ruZ8npG4Dmt6ghlBv+3aW1za8i9HilhFFkTufnIgoSuzbvI5je7Zo3l9HR8d3dFFG54pYu/Qbtq5fg8Fo5PnJc+l4ba9/5biXCDJ5mSybOpLK4nwi4hsy6Pk5GP3ct5W4FWS+f5Nze35BECVaPzCV6ObdL6vz8iTl9M6/BRkHAc17+9aypMj4bZqN6egKFAQKOz5NaYvhHoNyiyqsNDz1LS2OzkNUZLLierGjw3Ss5sga61AU2uct546Tkwi2F1LkF8+ilLfZFz0IBOESQUZS7NxS+i0v5L9MXUcmZWII34U9zGux77A74JoL5+RSkFEUUuTTjHEs5Bvbs/xiH8F8x6s85/yMwfLvtFBOEoBaJ6EQSQlNlNP0UHbxqHMR7zqmsMr+KHc63U+v8JVsQz0AzIqFQLn2UztQZFpkqgGEaTG9PYplnjBaikg8uhCAolYPIJs8u1NcCRzygaUoZ7eBZMLQ+0UEH89FkZ2kL3kFR2Ux5jqNaH6L74JIxu51pO9ciyCIdH7gtQsiqFZBJvdsKhuXqi1G/UaMxxzoety6Fs67ZIryc1n47mQAhjzwODF1E2q9p46Ozv9Nbrj1PpKbtcVaXcmS+VNq3cYkGYzcOGICAEfX/0BheqrH9cFxDUi8Vr0JzlozF8XNTXDodQ+DKGE5tRVLuuubbEf9njjDkhCt5ZiOLPPolimsex3VgQmYHBUkZWnPHgHYGnU76QHN8VeqeKDgHY+TjS52yzgFA28Yx3BAaEIQVcywTSVJzvTp2LVlqdSPE0J9gqnkCftXmmpWht+HTTDRyHqENlXbNLUxnR+RnVi6m4QSDW1agsSpts9daGPiqIe2N1Mgth7PAmA8vBxnpnuxxZzQkuC2AwE4ufQtZIf2YN3kPg9iCgyhKOMEqX/55qTSQnxyY3oMUjN4fvhgGg67d+e77pbR0akduiijU2syT5/kmw9US+P9T71Ih+431FjzT7culeRmsHTqSMoLzxEWl8St49/HHBTq0x6K7OTwoink7FqDIEq0uu9NYlr2vGSNV0EmfR8FS14Epx3/Jj2JGDzJN0Fm4yxMx39GEUQKuo6jPGWgx5KiCgvNjn9ISpoawHaywXAOtnjukvwYdZ0Vo7OaAWdncF3254jIHA3vybeNZ5Ef0KDGvvG2M0zIm8CA8qWIyGwP6MGrsXP5M6g/TsF4yb4XE6KUM8T5C584JvCJ4yVul38lAfUJVx4RbBXa8pV4K69Jo7nPOJPexq+4zfgBjximMt4wjvele1kvduUcURhw8pTzKwY7PfRt+0CCXX3CVyaGUi6G1jrkt37BBiIrT2GT/Dla95YaX9ca8pt0YB6SrRxreAplKTX38YZccArnhvcAkK59HCHiPwHBWluX8v5cSMXJ7YhGM0nDpiD6OLGpqjiPXV+r4kezfiOIqN/CS8WlOB12lr/3MrLDQZPOvWhxTV/vRW44//2UZZn5UydQWVFGw2atGHS355weHR2d/01ESWLY6FeRDEaO7NzI3o1ra71X/VZdaNqtL4ois/XrGV4FnpQBj2HwD6I8K5X83a6DcI3h8QS1HQxAyZ8LiHL13iBKWNuqbhm/A9+Dw4NzQZDITFEdL43Sf0R0uv5c5cotowgSy+LHUi0FkWQ7ycCSbz1d3iVYBT8mmsaRKiQTThmzbJOpJ2drrq8tsiAxy/gITgR6y1tILvE+lrnYEM36EPU1H1Tytaax2qX+CRyOuRmArumfIsgOjW1M6vfNextTJxxNBgBQ/cs0j21MEb1GIgaEYS84Q85GbcG6AKbAUNrfqgbZ71o632sb3sVoDv2953FCwqPIz05n/Y9faNtbF2Z0dHxGF2V0aoXDbmPe5Bew26y06XwtN91Wu3G+teG8S6Y45yxLp46koiiX8LrJ3D5hAYFh0R5rL3fJKLLMkcVTydn5syrI3Psmddr0vqzGy8jErMMULB6H4rBibtiNyFtf0y7IyE7MG2dgSl19QZCpTO7tsUSQ7bQ5OIOkjFUoCBxpMoqTDe+t4aopqrASbMvnrhMTaFyyBScS6+NHsjbxGRzSf56IFVbaEBUnfcuW8VLei9Szn6FcDOHDiLF8FjGGKjGoxr4AoiLTWd7Ha453+dH+BKOdX5CinMWKkd/FbrxoGMdg4wLuNL3Pi8bxfGIYyh9SN9KFeByCgSIhjBNiMtvE9iyWbuZ1wxiGmt7jK1FtxXnWuZA+zo3aXkcPJNrTADhrauDziO7zIb+C7KDt2S8BOBx/B1ajb8LfecKyNxORvRFFkMjrOt5jVpArFIcV55pXwGlDqN8Nsa3vk4oq0nZxbr3qUIm/5UXqJjf1UnHZOcgyO754BVtVGeFJzWkx6D+TjbS6ZDYvX0hO2hHMQSEMHHl1WozWLv2ag7u2YPIz89TLb2Hw0L6oo6Pzv01sYgP6DH0EgB8XvEVlufaQ1Mvpdf9YjH7+5J7Yx6mtnp0opqBwUvqrf/Oy1n2E0+q69Si0x0MgmbCe3YPljOuwV3ujG5GD4xAtJZiOrfTolsmv1werfwxmWxH1cnx7YFFmimFlXTV8tlfZTzSvcp8/crFbBqBSCOQF0wROCklEUMos22Tqyv986Guq2JDlkirWj3EsxKR4v8n/PeRWSqUwoh3n6FH+i8YR2UOpNoQQZsmkWZ6GDBsgp+FtlIc31dbG1GWk2sZUnkPZnx+5XSf5hxB54xMAZK1f6DZM2hUxHQcSVjcZa0Upe3/6RHMdaBNm/AODueURtcXq18WfXNHkMx0dHffoooxOrVjy2TxOpx4hKCSUUROm/Gu5DecFmaLs0yybNpLK4jwi4hvWXpBZMo3sHatAEGl5z+vUaeubIGPLPUH+oudRbNX41e9A1JDJFFV7nxgAXBBkjKm/qIJMt/FU1vfc/iU6qkne/DJxuRuQBQP7W40jPXFQzWutsBJbeZxhqeOItpyh0hDKD40mcyB6wCXCRGGljRh7DuPyJ3F72TcYcLDP3InX68xmb0BXl/uiKPSQd/Kl/XlmON7iBnk7JhwcF5J5R3qIIcb5vGEYzVaxPaWC7+OxP5HuYql4EyIKLzo/pLtc8wPt5RORPJFoOw1AhrFBrV0yKblrCbHkUG0M42j8bbXaQ7JXUv+A6nApaTYMW0SK15rLRQ7nxnkohachIALDTRMv+b3T4pKxlxdwdtFEUGTC2w8iot3NPl4FnPjje3KPbkcymuk6YorP05byM0/x12K1x77fQ+MJjvD8e+uJC21LBbl8/9G7ANz7xDjqJtZ0geno6Py/RZ87R1CnXgMqSopYuuCtWu8TEhXLNUNUoWXHojlYKko8rk+6bigB0YnYygsp3uLa1WAIqUNwB/UBQ8nv7xMV4EKAFw1Y2qrhsX77vgG767wYAEU0ktVoKAApZxf75JYBOB7SjR0R6meFewrf85gvc7kwUyYEM870EqeFBKIo5l3bGzSUz7itv1p8ZriLPCKoq+TRr9j7lCSb6M/qUNVR1Ld0CQHOcq/CjM0QxO4E9aFi+6zv8HOUe3d5CBJpbZ690MYkeGtjOj+N6dBSnNkH3S4NatkH/+SOKA4bqUvf0tyWJ0oGmt+qtiAf+X0xxVlpmup8oUPP/qS07oTdamHZRzM01ehuGR0d39BFGR2fObJvJyv+Hjc7ctwbRETVcbnun2pdKspKY9m0x6gsKSCyXiNum/AhAaGRnmtqCDJOjiyeSvb2n/4WZF4jtl2fy2o8v6HYC86Q/+2zKJYKTAmtiLpjOkXa3KCgyJg3zsR4Yi2KIJLfbTyVSdd7LJFs5TTaOI6owj04JDO7273KudieLtemlGzmjpMvE+goId9cn+8bzyAnqNklaworbXSo2sLLeWNpYEulWghgYfhTfBD5AuVSzbHYRRVWGspnmet4g8mO2dTjHKUE8YPYj4cN0xhpnMpy6SbKhSscPywIzJUeYI14HQZkXnPMuaKQwUS7OgHjrMm3G/Xzwo/RUUnrdPWD94F6w2s9BrveoQWYLIXYghMobvWAz/XyqY3I+38EwNB3EkJAhE/1itNB+uJJOCqKMNdpSMKgFzS3XJ2nNPsU+5fOAaDNHc8SElvfp3pZlln5gToZqVH7HrS5frBP9RdzscD29fwZWKqrSGnRhj63Dq/1njo6Ov87GIwmho9+FUEU2fXHz+z47ada79Vp4P1ExidTXVbEli89CzyiwUjTW9Ub7bTfvqQyy/V0otDuDyL4BWLLOUr59u9dhv7aG/dX3TJVBZh3f+7RLZObOACrOYpASy6N0n/04epUfqszgmxzCkFyOSPzpuIvewgYvoxSIYSxpokXhJm5ttfo+g+Py64W/JlnfBCAIc41hMrFXmu2B91AprE+AXIl/Us1jLsGjkffRJF/EmZnBW2zFmmqubiNKfHwRxgqc92ulet1wZHSBwGF6jVTUeyuPygKgkBU/2cRDCaqT++m6MBvms4FIKZpJxLbXofidLLt21k+5SxpccsIgsAdj09AFCUObvuDY3u3attbF2Z0dDSjizI6PmG1VPPh9IkoisINNw+5ZPT1P01hhZX89FR+nPooVaWFRNZL4bbxHxIQ4vnm9HJBRnY6OPTtG2TvWHlBkIlr3/eyGs9vJI6SbPK/exa5ugRjXFOi75pBsU3jr5Oi4LdtPsYTqkMm/5oJVHkRZAy2MhptHEdY6XFsxhB2dphCYWR7l2sTzixnwJmZGBQ7p0I6szhlGuWmy0YuKwoDyxYzsmg2foqVY34teb3OLLYFXu+yxSdArmS043M+dkygjXIMCya+EG9jqHEu7xke4KRYX9u1a0QRRGZIIzkkpGDCQUfl0IWv+eKSqW87QaL9DDJijYlUWumUtoAAezHl5lhOxPZ3ucabuBGe9RcxZ1VbfH6XcSgG79dwsfNEKc7AsVYdHS22G4qY1OWy43vfL+e3D6hI24Vo8idp+HSiwn1zMTntNrZ9+hKyw0Zcy+406nmny3P1xO51S0g/ugej2Z+Bj71Sa4fdxYLM3q1/sXndKgRRZMSzkxBF/W1NR+f/LyQ3b0v/ex4HYMn8KZxLdz2G2hsGo4lBT09DECVO7/yNtB2eW4Ri29xAXPs+KLKTMz9OQXbUfAglBUUS3ucZQM2WsRe5CMqVTFR3VwNhTQcXIRaluRVmZIOZMy0eAyDlzPf4W/JcrnPnlnGKRhYlvkypIYpYRxYj8mdgUFw/PLvcLQNQLIQx2vQau8WW+GNlsn0mwx0rNE07qi2bxI4cFRrij5X+Jd4FE0WQWBbxIADdy38l1pbufUS2ILE98SEAmuetIcSSrUlMUNuYmmFwVBG2ZYaXaUyPIwdEIpZlYd/ivsXIGB5PWHfVPXV65bs4qsu9nsd5mgx6EtFgJPvIDs7u/UtzHWgTZmITG14I/V264G2cPgQS6+joeEf/9KrjE4s+mUNuVjqRMbHc//QEt+uutkumsMJK3umjLJv2GJbyEqLrN+W2Fz/EPyTcp31kh52DX0/6z5Sl+ybXEGS84SjLI+/bMTjL8zFE1id66CxEs3Z3iGnfV5gOq0+5CrqMpSrxOo/rDdYSGm0YS2j5KazGUHZ0mEZpqIscEEUh5eQX9MpcgIDC/sh+rEoej/0yZ4dBtnJbxlsMKlsMwLqgQbwbNYliQ802EkGRucG6nvdLn2KIvBYJhfViV+41zuYzw11UC7VzjWjBKUiUoU7kqaR2xxlYpk5L2hZwHeUGz24qVyQWbKRR3jpkRDanPI8s+p5T4leZQ/Le2QBkNx6GpU5bn+oVWxWOVRPAVoEQ1wrp2id8PoeSw+vJ36Bm4iTc9jLm6Po+73Hop/mUZKbiFxRGp/tfuyCoaBVkygpzWfel+jrceM8zhEXH+XwOcKkgU1VZwcczXwVgwJ3306BJy1rtqaOj879LnzsfpnHbrtisFj6f/gI2i/tAVU/ENmzBNbc/CsCWr96iurTQ4/rmd76IKSicipyTFG360uWaoLaDMCd3QnFYKfp5msvQX0fiNdjrX4egOPHfNBMU9y3QBfG9KY1sjUG20uLEx27XuRNmKoyRLEp6BYtgprHlII/kTccouxYgXAkzlUIgLxrHs1LqjYjCo47vecU+B7Oi1SbsI4LAJwZVCBjk/I0op2sh6mJOmlux378LEjK3FX+ubUR2aDsyQtsjKY4LI7K9n5tEWttnkUUToQV7CTnpoY3JL/jCNCb7niU4M/e7XRrWdRjGyHo4K4vI/NX7qPbzBEbH06qfKujs+P4dHPar71Lpd/coAkPCyc1IY+PPizXV6G4ZHR1t6KKMjmZSD+9j9WI1ef3Rsa8TEHiFbSo+kH18L8umP4a1sow6DVty2/gP8Q+u2WJzORe7ZJx2K/u/mEDe/vUIkpHWD06vkSGj1rh/A3FWFJH/7RicJTkYwuOJuftdpIDQS0Z0e8J4cAl+u9VxyIXtH/ca6muwFNN00zhCKk5jNYWxo+N0KoLr11yoyHRO+4Bu51S77rY6Q/kj4TEUQbpkWbCjiEczXqJTtRr8+2X4KH4Ie6DGOoAoZz5vlr/C6Mp5hCmlnKUuzxom8rphDPmC7wJHbQhGHWFdLgQCPrpkrKm0suzBiciWOsN8Om5EkB9mWxHdTqoZMIcS7iQv1PcbfkG203DnFAyOKsojmlPd4VGf6hVFwfnbNJTCNAiIxHDzZATJN2HIkneajB9eByCq+92Et77J57al3OM7ObZOvenodN8r+IdG+VSvKAo/fzQZW3Ul8Smt6dTPt++HO779YCaFeeeoU7ceQx8Zc1X21Pln+OGHH/7bp6Dz/yiiJHHf81MIDosk5+xJln2sLfPCFdfcPpKY+k2xVpSy6YtpHttA/ILDaTH0JQDS1n1ORebRGmsEQSBiwIsIBj8sZ3ZRuX+Vyzam6mvGoBj8MZw7gPH4avdtTIJAWqvRKIjE520kpmCnz9eYa27AoqRXsQpmmln2MzJ/GiZZu6jiFAy8Y3yEWYZHsCNxvbydebZXqCu7b+G5EvZKLdkjtsCIk0Gl2qZHrQi/HwcGmlr206LafbDxxWxLfBhZkEgq2Ul8yR5NYoIlKIGMZg8CELH3QwwVOW7XyvW64GjcDwEF27rpbqcxCQYTUf1UASd321IqMo5oOn+Aej2HExAeQ3l+Nod+0T7FCbS5ZQKCQhh4/1MA/PLNB1SUFmnbWxdmdHS8oosyOpqwWa18OE1tW7qu3y206+Y6ywSuvktmz5Y/WDHjSWzVldRt0o5bX3gfv8Bgr3WXCDI2C/s/G0fB4Y2IBj/ajphBTMuaDhWPgkxVKfnfPYOjKAMppA7Rd89BCo7SLsgcW4V5+3wAilvdR3mTWz2vtxTSbNPzBJSfweIXyY6Ob1EZlFhjnSA7uDZ1Bk1zVqIgsD5+JNvihtdoQ6prOcUTZ5+nnuUEFWIQ70ZNYnPgjS6P3dm2g9llz9PCcYRqzHwg3c0I41vsEf9dJ0Kwova8lxPkkyADMLBcdclsD+hJkamubwdWFLqenIefo5yiwAYcSLzH7VJPAkfC4U8JKjmOwxjMqY4TNU9bOu8+kfd+j5z6O4iSKsgE1XQzeWpdcloqOPPNOGRbFYHJ7anb92lNx78YW2UZ2xdOAkWhwbW3E9/2hhrn6Y0jW9dxfOcfiJKBwU+8jijVFAG1cLFL5vDe7axboYqQI8e/iZ/5n3Nt6XjH4XBw6NAhUlNTL/n/FStW0KZNG+65x/3vkI6OO9w5Pi4nJCKK+8ZOBWDLLz9ycOsftTqeZDQy8KkpiJKB9L1/cdLLNKa4dr2Ja38Tiuzk7NKpLtuYjBEJhF6vBgkXr5uLs6KmA0cJqoOl4wgAzNvnI1QXuxVmqkIbkt1wCABtjs3F4HAdEOzptUsPbMV3Sa9fcMw8ljcFk1xTJHDlljnPz4bePGd6hULCaKBk8IFtIh2d7h0gV8KnBjXk+CbnBuIc3qf/FBpj+TNkIAC3FH9BcXmF15pS/wQO11Fruv09IlsL55IHUxbREslpIWb7DI9OJ1vXUciB0SglWdg3uZ/G5F+/PUEt+wAKp5e/heLUdi4GvwA636WG/u5ftZCKQt8mZWkRZrredBsJDZtSXVnOqi/e82l/HR0d9+iijI4mln+1gKyzpwiNiOIBD21LV5sjW9ex6p1ncdisJLXuzuCx72Hy9+7QuViQcVgq2fvxsxQe345oMtPu0dlENevmosa9uCJbKsj//jns+WmIQZHE3DMXQ2isZkHGkPYHfpvU1o3SZndS2sLzDYrBWkzTTWPxr8ig2hzNjo7TqQxMqLFOlO30PDaVBvl/4kRiTdJz6oSly2hcsZuR6S8S6igkxxDP9JhppJprCiyCInNv1ddMqJhOsFLBCakRDxrf4ntpEA7Bt/HNV4qgyIRRpv47wLc2tcaWQ7Sy7K21SyYldw2JRVtxCgY2NR5bq7al8OxNxJ1S29TS2o/FFhDjpeJS5PSdODeqIp503RjE+DY+1SuyTPqSV7EWnMUYGkPSsGkIksFnl8zu76dTXZxLUEw92t75/IX/1yrIVFeUsuYT9Wbp2tsfoU6S96lTrri8bWnBW5MA6D34Llq2rzkpTOff49ChQzRq1Ig2bdrQrFkzbr/9dnJzc+nZsycjRoygf//+nDpVu6wPHR2tNGnXlV63qyHq3819jZKC2jk3YpIac+1dapvotq9neL2xbX7n+P+0MW383OWakC7DMMU2QbaUUbRmhss2JlvLO3FGNkK0lmHeOs/jMdObPoQlII4Aaz7NT7pvt/EkzGQEtuCDOq9QLQTQyHqEx/Mm4++sKV54EmYOi40Z5TeFw0IKwVQy3f4WD9qXYFC0iQhaOSqmsFnsgITC0KrvNNX8GjqEcjGUOo4Tyz6lAAAgAElEQVRsepRrG3e9p+5Qqg2hhFkyaZH3szaHhyCS1vZZnJIZ/7z9hJxY4X6tKRBbj+cAcOz70WMbU0TvxxHNQVRlp5K7TXuwc2jzntRJaYvDZmHnkqsvmoiSxJBRLwKw7ddlpJ84rKlOd8vo6HhGF2V0vHIuK50V36q9yw8/O4mgEPdtQ1fTJbPn96Usmfk8stNBo843cvMzszD6+fY03FZZyu4PnqL41B4kvwDaj5xDREpHn/aQ7RbyF7+A/dxxRP8wYu6egyE8XrMgI2Xvw/znNAQUyhoNpLjNwy7DdC+st1fSZMsE/CsyLwgyVQE1nR6C4qTH8bdILNqKQzCyssEEUsN71FjXvHwr92ZNwaRYOeLXmrdippJvqJnn4adYGFcxkyGWpQD85DeIl0KmcE7wTUy4WvSWtxBGOVX4c06K1VwX6izikSJ1PPKu0JsoMvmWXRJXvJsuJ98HYH/ifZQEJrtd607gCCw+ToPd0wE413AIJXHXaB7HHRnkh1yYhmPVS6A4EZv1R2wzxM3xPUzq+OMTyo5tQDCYqH/32xiDfJvWBJC5dz3pO9YgCCJdHpqM0Rzg8x5rF86goqSAqPhkegzxrX3rPBe/doqi8NHbr/ydbRXHvY+Pq9WeOleP8ePH06hRI1asWMGwYcNYvnw5119/PYMGDSIzM5Pp06eTkFBTVNbRudrcfP/TJDRsSmVZCZ9NeQ67rXY3gl1veYi4Rq2wVVewfv6LOO3uP9v4BYfTcpjaxnTq14UUH9tcY40gGogc9DIIElXH/qBi948125hEA9U9xqEgYDq5FmPqGg+hv/6cbKuK5MlZq4g/92etrrMisjXz67xClRhIA+sxxuS+TISjZm6LJ2GmUIjgOdMkVkm9EFG437mUD20v0Vi+ukLsQoMaLt/VuoU6TvdtQuexigGsClPHXfctWUx1ab7XGrshkJ311KlK7bIW4efQFrRrDYwjo5kaFhy5/xMMFe6FPDmhI47G/QD+bmNy7U4xBEUQcb36npn+6wKsJdpERkEQaHbraLXVbfuv5KdpE03Oo8Ut06B5OzpcPwBFUVj+ifZpT7owo6PjHl2U0fHKV/Om47Dbad2pO5173vSvHHPLis/56f1XUBSZFtffRt8npiIZtLkVzrtkLCW57Jo3krKMIxgDQ+nwxHzCG7gOWXXnklGcdgp/nIgt8wCCXxDRw2djjKqv+TrEotP4//Yygmynst61FHV4wqMgIzitpGybRGDpKaymMHa2n0K1f01BQlCcXJs6k6TCzTgFAyuTJ3AmpKbY1KJ8C8Oz38aAgwPBPZgXNYFqMbDGunC5iMllk+hm34YdA+8GjmZh4EM4BKPPbUNXA5NiY6RTbU350X8IFo2BwqLiYGThbELlEjKNiayOedin4zYQsul5bAoiMqeie3Eo4U7vRZefe1UuKdsmITmtlMR0Ir2FjzkylYU4lo8FWyVC3TZIvcf7PKWo9Mif5K5XhdSEW14kIKEF4H1K1MVYygrZ9bU68alp3weIatD6wte0umRO7t3Mvj+WgyAw+Mk3MJp8/1m6XMz6dfl3bF2/Gkky8MzrswkI8t7KqPPPsnPnTmbOnMnAgQOZP191d7300kuMHTsWf3+9rUzn38NgNPLQhJkEBIVwNvUQS+ZP9Wk88HlEycAtz7yNOTCE/LTDbP1mpsf1sW17k9hDfb9IW/w6lqLsGmtMsY0J7/0kAEVr38GaebDGGmdMC6wd1fct/40zEYvcCxul0R3ISFFFh7ZH3yGkPM3lOm8tYFWRLXmvzhuUSBHE2TMYmzOOZtU1x117EmbsgpHZxkd53TiGYkJooGTwvm0Sj9q/w+RmwpOvpIlJbBPbIqIwoMpDqO5FXBiRrVTRr1RbMO2JqF4U+Sfh56ykTbb2LKzc+jdTFtEC0WEhescsL9OYLmpj8jCNKbj9IPwSWqLYqjmzYobmn+Wweo1JuUZ1Te9YPNfn3wEtwsygB8dgNPlx6tBuDm3XPu1JF2Z0dFxzVUWZpUuX0rp1a+8Ldf5n2Ld9I7s2rUeSDDww+iWPN4dXwyWjKAq/fzOHX79QPwC1v/kBbnhoIqLoWwZFZX46O997jMrcM/iFRtPxqQWE1mvmcq1bQUZ2UrjiDSxp2xGMZqLvehtTbGMATS4ZoTIf/19eQLBV4qjTioJu48HDdQiynZQdbxJSeBC7IYBd7d6gKjDe1YnR7cQckvP/RBYkVtV/gbMhNcdjtyzfzLDst5Fwsje4J4vjnsMp1BS2kh1pvF36Ao2cpygVQng1+HX+8rve6/X9k9wlr6YOheSJUaw0D9RcN6T0KxrZjlEtBLAo4SXsonYRIN5YQe/Dr2ByVnMupBVbU8Z4FNBcCRySrYLGWydishZTFdKAk50mgihpdslE+Ck4fnoBys9BWD0Mg6YjGFzXunPJWPLSSF+iTiSK6jaUiPaDNB37YhRFYedXb2CtKCE0IYUWA0dd+JpWQcZaXcnKD14DoMuAu0ls2s7n87ictOOH+PK9aQDcPep5Gre88j11rpyCggLq1lXdfKGhoQQGBtK1q95SpvPfISquHg+8+DaCKLJ93XI2rvq+VvuE1Ulg8Ji3QBA4/tcyUjet9Li++ZCxhNVviaO6nNPfTUR24YAI7no3Ac16gewg/8eXiBBq5sFY292PPaEzgtNKwLqJRPm5bwVKbzaC4uiOGGQrnQ6+idHu2tnhTZixRTThndhpnDU1IlCuYGTeVPqVLELwkI/iir+krozwm8Hv4jVIKAx3/sRHtgm0kFO9F2vgB0kVGq63/E6g7D0nRhEkVoSrLW3dy9cSac3QVLO93oMAtMhdRXVBuraTE0ROtxmDLJoIyN1D8Om17teaArFdq45Ld+xZgjO7pkAHIAgi0QPGgmig5Nhmig7+ru1cgOQ+DyEZTJw7voeM/Zs012klPDqWnreorfgrF76LU2PujY6Ojmt8FmUWLFjAHXfcwd1338327dsBWL9+Pe3ateO+++6je/fuV/0kdf47OOw2Pp8zBYB+d9xLQv2G/+jxZKeTnz+azMYf1Sf819z1NN2HjvbJJVBUaaMs8zi73huJpTiHgOh6dHr6Y4LquG9BcYUiOylaNZXqY3+AaCBqyFT8/j/2zju8qbJ/459zspqOdA9KgbJX2SAiU5YM0VcRFUFQwYHKBtlTluylKChbwYmKyhRkyx5lQxltaUv3buY5vz9CGW2SJhXf15/kc125LjHP8+Q5aZqec5/7e3/LWQVHp8qWDLlot45CzE/F4leBhOYTkRUOLswlC5WOzcLv9mEkUc2J+pPI0dl4v2WJx68uudumeW/1MVz3fazYsKic/byUMAcFEid0T/JdmSFINjos1TFFMz17PEFyOnFiBKN0s7igsi1e/bfwlzPpbbHWZK/X9sYkOCdoNMo/SPvcXwH4rswQ0lwI91VZCmh7fhJexlQyteX4o9YEJNG17BWrqDYFz5ybGD2CuNRsGpKquCvJLrKEedtU5NsXwMMX1X/mIWh9XdqDuSCb6+tHIBnz8a7UmPDOQ+4+54pL5tqBTSSc2YuoVPH4G9NRqFx7LwB2rl9IVmoifiFlaftK6Toj3S9mGQ16Fk0ejtlkonGLdnR96bVSrenm4SMIAjk5OWRnZ5OVlYUgCBQUFJCdnf3Aw42b/xY1GjTjmdet33+bls/hyhnXuxQBVGrQghY9BgBwcO1HpMVesjtWVKpo0G82am8/suMvcuPnecXGCIJAYLfxKAMrYMlOJnXTRII8i+S1CSIFbScieYWgyIrHc89MgrztfAcLCi43Ho9eG4p3QSINz812GDTriExlEIvCprHf+ylEZDpnfcNbyTPwtNwTehy5ZQrJEnRMVw9kvGo4qfhRXk5gkXEy75jW/2XXzAkxihihHFoMtNPvcGrOZW1dorWNUSDR+pZ9V8r93PJtwC1dPRSymcbx653en947gvjqVqEi8MQyFAX226pL5R7DXLUjIGPcPgvZbPvcUh0ciV9z65o3Ny/AXODcd6lnQBi1OlgDko98sxjJ7Jpo4oxbpn2PN6wtsuOvc2jbD86v7XbLuHFTDJdEmVmzZjFw4EBu3LjBzz//TNu2bZkxYwa9evXipZdeIj4+nmXLlv0tG01PT6dXr17odDr8/Pzo168fubn2VfL09HQGDhxI9erV0Wq1lC9fnkGDBpGVlfW37O/fyA9rPyUx7ga+AUG88Pr7Dsf+VZeMyaDn23nDObbtaxAEnnx9HI2efs2lNdLzjKRfPcHxTwZgzM3Ap2w1mry/HG2A/UwRWy4ZWZbI2DKb/LPbQFAQ+NwUPCoVFz7sYjGi3TkRRcZ1JM9AElp9iKTR2R8vy0SeXkRgwl4kQcmJeuPI8Lfd5ajhjVVUu70VCZH91UdyyqN4yVK13GO8lDD3riDzfdggZEFR7GdU2XyVcTnT0aLntLIuo3Uzue1CdsvfgUI2M5Yv0KLnsqIq+9UtnJpX2XCBvhnWHJg9Ad254OP8XXqVpYDnY2cRmBdDgcqPXbWnYlQ6LokpJnBIFiodn40u9RQWpZZLzaZh0lo7JTnlkpFlNIeXIV/9AxQqq0PGz34Ghy2XTGGwrzEtDpVfGSq8PANB4Xo4c15aAqe+sTrV6jz7Pn5l7wXzOuuSib14kqNbrGGM3QZMRqN1PYum6Pv2zRdLSIq/SUBwKAPGznC5pMvN34csy1SrVg1/f38CAgLIzc2lQYMG+Pv74+/vj5+fH/7+roV1u3HzV3nyuT40atMFSbKwauZIMlJc60RTSPPub1O5QUssJgO/Lx2FIc/+RbHWP4z6r88EQSTl2C8kH/252BhR40XwC7MQVB7orx8ha8+KYmNkDz/y209FFpWorv+B+uy3dvNlzGpfLj42FYuoJiztKDVj1tgcV5JbJshbg0VQ8W3gW6wLHIhRUFNLf5KRiSMob7hyb5wTwgzAQUVj3tDMYavYChGZFy2/stw4hhrSVafm20QQ+P6OW6Zzwa8onAwU/tm/DxYU1C44TsXck069zpFyryEjUCVtL37Zzjt9Eis9T65vFRSmXIKOLSq5jMkzADkjDtPBL+yO83+iF6qgCphy04n9zXEI9P2Ua/0KHt5+ZCXe4OIfzosmhZQkzGi9fOjU09pZbMuXy9Dn5zm/tluYcePmAVwSZVatWsWKFSs4duwYW7ZsoaCggIMHD3L16lVGjx79t5509erVi3PnzrFjxw5++eUX9u7dy1tvvWV3fEJCAgkJCcydO5ezZ8+yevVqtm7dSr9+rmVMPKqcOryPH9ZYBba+A0fj6VVyx6PSkp+Tydopb3Lhz50olCo6vTuDqCefd3md5DN/cHL5YMz6PPwq1afRu8tQ+9gPN7UtyMhkbl9I3ulfQRAJ/M8kPKvfa/9doktGsuDxxwyUiSeRVVoKnpqFxSvU4ZTwy18RcnMLMiIxTcaSGmQ7iLh6wmaiblnrmw9WHcKN4DbF19JfpWfCbBRInNS1uSvIFEUnZTEqdzYajJxQNWCazzjybWTNFPLfyJUJ9lLwobCMx0zHMKLic6/+yELJX1GVDRcZlDodjWzgsmcDdgT1dvo1NeZcXrwxhTJZpzEptOyuNYlcDxeFKdlCpRNzCLz1B5Kg5GqTCRT4uuYqU5/ZgPqs9Wer6DDO5U5LAMn71pJzab812LfXHJRe976PnXXJyLLM8a9mYDYUEFSlAdXa3+sS5qwgYzGb+OWzqQA0aPcclesV73RWEkUFmYtnjvPLRmuHkf7DJ+Ht45qDyM3fy+7du9m1a9fdh71/u3Hz30QQBF4eNOlO8G8GK2eULvhXEEWeHjgT76BwclJusWfFJGTJvhslqHpTqj1t7d508+d55N26WGyMOqQSgV2t4cBZ+1fhlVjcyWMJjUL/uPWGmMefH6NIOmP3NfP8qhFzJ/i32s2vKZdo20XijDADcMy7DQvCZpKiDCPAksqQpLF0yvwG8Y4I4qwwkyt4M1s9gLGqkXddM0uME3nT9FWpXTO/K5qTji+BUhrNDMVDlW2RrCrLfp+nAGibsAJBtpQ4J82rElcDred/1S5+6lBceQBRwbX6Q5EFBd7xB/CK22t/rMYHU/PCMqZvsCTaDuUVlGqCu1h/vinHNpN9rXjmjy3Unj40fO5tAE78uNyhoFhanujcg6Dw8uRmprPr+9UPfX03bh4VXBJlYmNjadu2LQAtW7ZEpVIxZcoUvLxcsOiXggsXLrB161Y+//xzmjZtSosWLViyZAkbN24kIaF4mBpAVFQU33//Pd26daNy5cq0bduW6dOns3nzZswuWvgeNVKSbrFk6ghkWab9sy/RvL3jTI+/4pLJSL7FF2NfJe7iSTSePvSe+BlVm7oeJnxm5zecXjMGyWwkOKo1Dd9ahMqJ1tn3I8syWbs+Iff4D4BAQLdx1tpv5xdA8+dSVNf3IItKCtp/iBRYxeGUwNgdRFxYDcDNuu+SEV68exJA+dR9PHbNKpKdrNCHa6Edio3xMyXTJ/5DNLKeK571igkyhRe6omxhRO48gqVUbonhzPMahtlG1kxR/i5hJsBbQ5CXkiF5C2luPIgJJR95f8AVZcmtkysZLjIodRoed455fdmxNsu0bKE1Z9E9ZgLBORcxKH3YHjWTVJ8aJe/3fsFAlqh4cj5B8b8jCQquNhlPVmiTu08745JRXvoNzVHrnVJFq4Eoajj+/NtyyeTEHCFph/XzUfbpkXiGVy/xdW0Re3QriWcPICpVNHl1gstZTgCHf/2S5JtX0Pr40aHP8JInFKHoe6bPz+OT6aORZZk2XZ6nUXMXfifd/Fdo3bp1iY86der8r7fp5v8pJQkJjlBrPHhj7Dw8fXyJvXyOjYunlCr4V+vjywsjF6BQqok7vZ/jmz51OL5yh9cIiWqFZDZyae0HGLKKdzTyqvMUPo1fACB100R884pnlxhrd8dYqR2CbMFz+1hCLPY78KSU60hcVauQXv/CAsok284RcVaYSVBHMrfMbE54NkeBROesrxmaNJYwo3WfzgozAH8qGtJPM4cdYos7WTObWW0YTmfzbqfdLoWYBBU/Ka3nQM0N+5yet9X3RfJEb8JNsdTJ3O3UnGMRvTGLasrknCcs9ZDTr1Wgq0hGbWsIc9CxxYhG+85+S4VmmKu0B1nCuH2m3TImj3J18Wn4DADXf5iFZHJOYAxq2Bm/spUw5GVx+tfVTh9DISW5ZZQqFd36DgJg96a1ZGfYL9kqtrbbLePGzV1cEmUMBgMeHve+hNVqNQEBrrdZdZVDhw7h5+dH48b3HATt27dHFMW7uTbOkJWVhU6nQ6m0b+k3GAyPdB28yWhkwcQh5GZnUal6bfoOHPu3vVbitQt8MboXabeuowsMpd+MdegiXXMIyLLM2c2fcuHbmSBLlG36LHX7zkChdnyyYMslk71vJTmHrSUX/p1H4hX11APPl+SSUZ9aj/r8j8gI6FuPwVK2kUPBSpd8goonrTXnCVVfJLnSszbHhWRF0/LSHARkLoV1ITri5WJjPCy59I2fgs6SQaK6Al+Fj0YSbH/O+xSspY75LAV4MMtnlEOHTFEetjAT4K1BlC0MyVtEizuCzGzvkZxQNypxbiXDJQalTsdD1nPVsx7ry47H7GSwr5cpnReujCOk4DoFKn+21fmINB8XhQxZIvLUQoJjtyMLIjGNx5IZ7lqmluLmATz2Wz8DYqNeKBr2dG0PgDEjkZsbx4Is4d/waQIaP/g5ctYlY8jL4uQ3cwCo1bkfurB7OUzOumSyUpPY/bW1jKzDq0Px9PFzap4j1n0ym9sJcQSHhdN30N/3feTm72H79u28+OKLlC1rI7TcjZv/AoFhEbw2ajaiqODY7l/ZuuGzUq0TVqkWnd6xhqif/mUVl/cVL00qRBBF6vX5EO+wipiyU7i8ejhmffHSDv+OQ9CUb4BsyCN5w1CknCKiiyBQ0HoUlqBqiPpMvH4bRrBov01zbM03SC7XEVGWaHx2pl1hpiQKhRm96MWa4GGsCRpCnuhNeWMMIxNH0i5rE4JscUmYyRG8mal+j/Gq4aQQQBipjDQvZ41xOE+Z9yA64V4pJAtrSbgZ50t08xU+7NQ9B0CrlA13XT+OyNMEczbUKoTUjFkNLuzxavkXMOrKozRkEnDafmkSgPHxAeAZgJwei+nwWrvjAp98C4V3IPq0OBL+sF2mVhRRoaTGnbD+8zu/IS+juEBYEiUJM/Wat6dCtSiMBj07vnEut+fu2m5hxo0boBRBvxMmTGDYsGEMGzYMo9HItGnT7v678PGwSUpKIiQk5IH/p1QqCQgIICnJuRrh1NRUPvzwQ4clTwAzZ87E19f37qNcuXKl3vf/R9YunUXMhWi8fHwZ+uEi1BrHF2OldclcPXWAVeP7kpuZSkiFqvSf9RUh5R27SooiWcwcWz+Nc79YT7Aqdnidmi+OQSxFjkb2ofVk718FgF+HwXg3eMal+aqLv6A5bi2vMDR7H3Nlx3fztVnXqHpkCqJsIa1sG+JrWcvq0ou8n35512l7fgoK2URsQDOOVC7eUlshm+iVMJNQYxxZygDWREzCoLAttLQ07OVZvbWDxGLvgcQrXP98/1VhJsBbc/chyhYG5S2mpXE/JpTM8R7BMXWTEteoaLjMoNRpaOUCYjzrsK7seKc7LfkYk+lxZSyBhnjy1EFsrTubTC/ngqDvChyyROTpxffKzhqNJqNsqwfGluSSUSSdQbtrKoIsIdbqgqLFu068/oPHKJn03PhqFJb8LLThNYl4xvX22YWc/m4BhpwMdGUqUaPTG6VaY+vKjzDpCyhXvT712z7n8vyi79nJP/ey86evAXhnzIy/tYzSzcPj5s2bTJo0icjISHr06IEoiqxda/9Cw42bv5vqDR6nx3vjANj65TKO7nKupXJR6rR+hvrdrN+P+9fMIOH8EbtjVZ4+NB6wBLVPIPlJV7ny5Rgks+mBMYJCRfCLs1EFVcSSk4Llp1HI+pyiC5HXeR4WXQRibhJeW4YTpLZz7iWIXGnwAckRHRBlyx1hpniJj6vuoxNeLZlVZgHntI1QYuaZzPUMSRpHhOGaS8IMWLNm+mjm84myNxnoCJeTGWX+lNXGEXSw7HNKnPHDmg+ZLbpWyrrPpzPZoh/+ptvUy9jp1JwzZZ5Dr/BGlxdLuSTnHDYAskJFSmNryL3u6mY0acXL2O7iocPQzFqqZj72FVKK7dwd0cObwI4DAUjYs47829ed2ktorWaEVq2HxWTg1M+OBaLSIAgCXftY93Xgt29JT7ZdxeDGjRv7uCTKtGrVikuXLnHy5ElOnjzJE088wbVr1+7+++TJk5w6dcrp9UaPHo0gCA4fFy86+BJzkuzsbLp27UqtWrWYPHmyw7FjxowhKyvr7iMuruT2ef8W9m3fzPZNXwEwcMJsQsrYDxr9K5zc9SNfTX8Poz6fyKjHeGPaWnSBoc51NbqD2VDAgWXDubb/BxBEarwwiiqd33HqgrSoSyb35E9k7bZakX2ffAefJj2KzXG0N0X8UTQHFgBgqN8bU21rHo49wUppyKDan+NRmPPJDqzLtYYjwUZ2isaUTdvzk1Fb8kjW1WJf9VE282GeSllL5fxoDIKWtWUnkq0Ksvm6OksGA/Ksx/mdx/P8qXY966OQ+4WV0o73kzKYnDOF1sZ9mFEw13s4R9UlByo/lr+XYamT0coFXNPWYW3ZCU4LMhE50bx8eSR+xiRyPMLYWncuOVrnPueFgoxgMVL52ExCbvyKjMC1hiNIj3jSqTUKEdOuot0+FsFiRKjYHEX70aUSU279Op+ChAsoPH2JfOUjRNWDJ8fOumRSrp7k+sGfQBBo8uoEFMp75WzOumSunNjHhT93IIgKur49AVF0TfMvKshkpCbz6UzrRVSXHn2JauhusfxPxmg0snHjRtq3b0+NGjU4ceIE8fHx7N+/n40bN9KjR/HvVTdunOWvlDAV8kSn7rTr/hoAGxZNJuasc7kcRXnq1SFUavoUssXCzqUfkB5vP7jWMzCcJgMWoVBryb56lOs/zChWPqXQ6gh5ZSEKn2BMKdeQfptQrIRF1vqT12U+kjYQRXoMXttGI9gpc0FQcKXhqPuEmRmlEmaCinz3ZysDWB48hi8D36NA8CTSeIXhSR/QI2055T1NdlaxjUHQ8J2yK700i/hM+QqZ+BAhJzHG9AmrjSPoZN6N0oGTxU+2CleuijImUcNOX+sNg5YpG1FIJd9YNCq9OVPGel5X/do6BMn5Y9WH1icnsgMCMsFHF4BkX3CyVGyJokorkCwYt3+ELNk+fq8arfGs+gSyxcz1TbMc5hsVIggC1bpYb0pf2vsTWUlOtvm+j5LcMtUbPE7Veo9hMZvY+pXj8r5ia7vdMm7cuCbK/PHHH+zevfuBx/1Bfq6G+Q0fPpwLFy44fFSqVImwsDCSkx+025nNZtLT0wkLcxzKmZOTQ6dOnfDx8WHTpk2oVI6zMzQaDTqd7oHHo0BszCWWz54AwPN9B9CgWesSZrjukpFlmV0blvLT0vFIFjN1Wnal94RP8fBy3OmmKPqcdHYveJuE6L0oVBrq9Z1JuSdcDwYGyL+wm4yt1vIRXfO+6Jo5HxILIGTF3XU7mKo+hbGRY4eBYDFS5ciHaApSKPCO4ErTyTZbZQuyhRaXZuNtSCbbI5xdNSdjURQ/gaqUf4YWGdb20V+HDyPRo5Ld1+6WteFuV6MNWtfLZOxxv+Bi71GUWqZzzMsafreMao73SI6omzp8HVE282LmSvqlL0YtG7ns2YA1ERMwiU7cpZNlGib/yPMxk/AyZ5HuVYmtdeaQ5+E4hPnuMd4RDBTGbKofHH031Dem8WjSyhfP93HkkhEyY9FuGYlgzMMcGoWyy4cIYsnurqIumYzT20g/ugkEgQovTUftb7/LmCNkSeLk19aypUrNnyOocn2X1zAZ9Py2YjoAj3ftTVika6VgRd8vi9nMogUbFxQAACAASURBVMnDyExPoVylqvR8e6jLe3Lz32PgwIGEh4ezaNEinnvuOeLj49m8eTOCIKBQuJ5L5MbN38XTrw2mXvP2WMwmPp82hORbN11eQxAEWvWbSGi1BpgK8ti+cCj5mal2x/uWr0WDfrMRRAWpJ7cSv2N5sTFK3zBCXp6PoPHCcPMEws5ZyEVaW8u6cPK6zEVWeaFMOk25IzPtX+TfFWba3xFmplPWhsvDVWEGQeCId1tmhC/imGdLRGRa5G5jXMIgnmY/govtuPWCB18ru/GKZjErlC+ThTcRchIfmJezzjCUZ8w7UMnFRRA/2eqUyXJRlAE44NORDEUgvuZUGmVscWrOudCnyVP546W/TeQt5+YUktbgbSxqHzQZV/G98qPDseonh4DGGyn5EuYT39ocIwgCQZ2GIKi15N48Q/LRn5zaR2DlekTUbY4sWTjxY+lK+EoSZp6+45Y58vtmbsc55+K5u7ZbmHHziONy+VIhX3zxBVFRUXh4eODh4UFUVBSff+5aHWFwcDA1atRw+FCr1TRr1ozMzEyOHz9+d+6uXbuQJImmTe1fyGVnZ9OxY0fUajU///zzA3k4bu6Rn5vD/PGDMBr01G3SnB4ltL8uDWaTkU2Lx7D3W6t63rL7mzw3eCZKlXN38gvJTYnj99mvkX49GrWXLw3fWUpI3Tal2lPB5X2k/TQZZAmv+t3Qterv2gKGXDy3j0Mw5mIJqY2+xbBipUUPIMtUPDkfXVo0FqUnV5pOxqK2LUjVjf2KspnHMYsa/qg5HqOq+Di1JY/uiYsBOOLbkYve9n8XQky3aJm3DYC1nn2cDsN92IiyhR4F3zA1ZxIBciaxinJ84DubIyU4ZHSWDIalTKFd7m8A7A54kTURE50SZFSWArrcnEurhNWISMQEt2NL3XkUaGw7iuyhzkuk1t4h6NKiMSu9uPTEDNIjipepORRksm7h+dtwRH0mlsCqaJ+fj6By/XvJkHqT+B9nABDa5g18qhT/2Tvrkrl+aDMZsRdQeXhT59n3HnjOWZfMvh8+J+N2PD4BobR5ueQyrJLYsHwBF04fQ+vpxbAPF6PWuL+7/8ksW7aMt99+m+3bt/Pee+8RGBj4v96Sm38hD8MtI4oivYdNo0K1KPJzslgxZSB5OVkurxPmr6P9wNn4hpUnLy2J7QuHYtLn2x0fUrs5US9bnX8Ju1dz+/CmYmPUYdUI7jEbRCX5F37HtGdpMVeNFFiVvE4fISvUqG7uo9zJhfa7AgkKrjQcze1yTyHKEo3Ozaa8DUHBZWEGq2tmXfAQloROIVFVDm8pm57py5iWN5V6GtdLV/SCBxuUz9JTs4Rlyl6k40soqQwxr+RLw2A+MH1KT/OPtLQcpqIUS5hsFcGyBddvnJoFNdt8rc69FinfoLIUlDjHotBwKvwlAKrd2IDCXPIcgNRcAxYPf9LqvQlAwJlVKPJT7I5Pk31Qt7L+HTYd/AIpM97mOKUuhIDW1rL3uC0fY8y2v+b9VOlkPc+9dng7abGXnJpTFEfCTGSNutR5/ElkSeK3dR+Xan03bh5VSiXKTJw4kcGDB9OtWze+/fZbvv32W7p168bQoUOZOHHiw94jNWvWpFOnTrz55pscOXKEAwcO8P777/Pyyy8THh4OwK1bt6hRowZHjljrewsFmby8PL744guys7NJSkoiKSkJi8X5oK5/O7Is88nMsSTG3yQoNJyBE+ciOnFn0xWXTH5OFuumvMWZPb8giAqeeXcK7XoNfqC8wZnSpfQb59j50WvkJsfhGViGdh+swq9iXaf3AfdKlwpiDpH6wwSQLHjW7oh/pxF2y0ds7k2yoN39IWJWHJJXCAXtp4INx8v9hF9aT1D878iCyJXHJqD3qWBzXNn0I9SLs5aRHaoyyG7eyZNxn+FvTiZdFcpvIY4dOs9lrUeJhTMejTmnqu1w7N9FhCWeWdljeKVgIwokdqtb84HuI+IVjsuHKhouM/b2KKoaL6AXtawLH8uO4N42S7mK4qe/xctXPqBa5gEkQcHhSu9yoNpwLArnL/IDvNR4ZVyi9t5BaHPjMGiDudBqATnBDZxeA0DIScLzt2GI+alY/CPx6L4QQeNcRsr9LhnJZODGhjFIxny8KjYktO2bLu3jfoz5OZzZZBX2anV9Ew/dveB2ZwWZ1IQbHNhkrVHv9MYoNFrXuvEVFbGO7t3J5g3W9QaMnUl4eefyftz871i3bh1HjhyhTJkyvPTSS/zyyy/uv7Nu/rGoPbT0n7AI/+AyJN+6ycrpwzCbXM/HKxcWRsehi/Dw9iPt5kV2LRuL5KC7Z7kn/kOVztYSkhs/zSX93J5iY7QVGxP0rDVM2HzyO8xH1xcbYylTn/x2U5AFEfXl34iIdtCuWVBwtcEHJEY+i4BMg4uLqHZ9Q7HxpRFmAK56RDG7zFw2+b+GXtASabzCiMRRvGnagIfsnHBxP3rBg2+VT/OKZjFLlH1JIYAgMuhk2cOb5q+ZYlrIF8ZR1JBjgNI5ZQAOez9JmroMXpYsmqQ7ly90Kbg9edoyeBgzqBRvP+TZFjmVO6MPqoVoLiDoxCcOxypqd0Es1wgsRow75tjtFqZr/ByaMtWxGPK4+ctCp/bhF1GVsg3bAXDsu79HNOny6nsIgsCpAzuIj7ng0ly3W8bNo0ypRJlly5axYsUKZs6cyTPPPMMzzzzDzJkzWb58OZ984vjLprR8+eWX1KhRg3bt2tGlSxdatGjB8uX3LKAmk4lLly6Rn2+9U3HixAkOHz5MdHQ0VapUoUyZMncfj1JOTEls3rCSo3t3oFSpGPrhInR+/g91/fSkOL4Y25ub54+h8fSm9/hlNGzf3eV1EqL3sXv+mxhy0vErV532o9Zg9ildNw/99WOkfjcOJDPaGk8S0G0sgiutf2UZzcGFKOOPICs0FHSYhuzpuAtZYNzvRFy0Bl3eqDeI7JDGNsd56xNpcclaSnKxTDeuh9gODK6ceYg6aduQEPgubAhG0dPua1cwXqVJwT4kBH7w7etUm+aHiUI280zBT8zLGk5Vy1VyBS8WeA1msdcgDIIDcUSWaZm7neEpE/GX0klWl+OTCvO44ONctkjlzD/peXkkgfo48tUBbKszm0vh3Ry7mYoQ4KXGL+lPauwfgcqQSZ5vZc63WkyBzrZQYO+9FXKT8fx1KGJeMhbf8hR0nofgWbrftYTfFqBPuoLSy58KL06z+dl11iVz9udPMOSk4xNWkaptXS9pk2WZ35ZPw2I2UaVBC2o1K17K5Yii71d6ym0+mTkGgK4vvUbT1o7bg7v5Z9CzZ0927NhBdHQ0NWrU4L333iMsLAxJkjh//vz/entu/kU8DLcMgC4giLcmL8HD05ur0cf4cv4EJCeyOYqtExJB+8HzUKg1xJ85wP410x223K7a5W0imj0LssTVDRPIvFy8g6hXVEf8OwwBwHRgBabjXxcbY45sSUGr0cgIaM59R8TppWCvdEgQuVZ3MFcqvAhAzWtraHBhXrFslNIKM5Kg5A9dN6aHL+GEZ3NEJNrk/MLc7FE0Nh61Lxg5wCio2aTsRG/NQiaphrJS2YMdYgsuCJXJxZMMdOzRtOGqqprLaxfueYuP9Vy0cfqvCE6EC0uiiksVrS3HK8X9iOhEHs1dBJGUxkOQBRHvuL1ok+znGQmCgLr9SFBqkOJPYjlvu1xKEBUEdRkBgkh69C6bnyVb1Oz6JqJCSXz0IeKjnW/zfT+O3DLhkVVp0KoTADu+dj1U2C3MuHlUKZUoYzKZHmhPXUijRo0wO7hL8FcICAjgq6++Iicnh6ysLFauXIm39727zJGRkciyTJs2bQBo06YNsizbfERGRv4te/z/xuE/tvHVZ9Y8ldcGjaNKzTpOzXPWJRN/JZrPC1teB4XxxvS1VK7/RPH1SnDJXNu/if2fDMVsKCC05uO0Hf45Wt9gp/ZQFEPCBVK/GwMWI9pqLQl8dpJTeR73o4r+FvXFX5AFEf2T45GCqjocr82Kudv6OrHKi6REdrU9ULbQ4tJcNJZcUnxqcKyibQeEKJloF2cVP/f7/4cbno6dL4/nWXOeTmqbEa/+L7oOZJnGxmMszBrK6wVrUGPihKoBg30XslfT2qE4EmBOYVDqdHpnLkeFmbPezfikwhxS1SWH8mrMOXS8uZBuN2ahkfK5ravNL/WXkKKr5dL2AzyVlLn0FVX/nIjCoiczpDEXWszHpLVd9mRXkMlJwvPXIYi5SUi6shR0mUdAiPP5L/e7ZLIv7iftyPcgCJTvMRWVrnS/BwCZt65y9Y9vAGj08qhShftG7/uNa2f+RKFS0+XNsS6FFRd9v2RZZvnsieTn5lClZl1eeWe402u5+WdQsWJFpkyZwo0bN1i/fj3du3end+/eREREMGjQoP/19ty4eYDwyKq8MW4+okLJib1b2bx6kctrBHt7EFqlLm0HzEAQFVzZ/wtHv11iV5gRBIGol8cRVr8dssXElfWjyL5W/AJd93hPfFtbXTWmvR9jOvVDsTGm6l0oaD3GKsxc+NFaymQ3Y0Yguf4ATld/H0kQKZ+4kydOjkVtdK10y54wA5Ct9GdN8DCWhYwnVRmKvyWNobkLGaNfQJDFufKaopgEFfsUj7Fe+Twz1e/xnmYaz3h8waCgT/lYN9jxjZ0SOOnVnDyFL77mVKrnOCdoxIe2pkAThIcxg4ikP1x6PaN/ZbKrWDt7Bh1fAnaCfFNzDIh+4aiaWR3Qxj0fI+el2xyrCauKrrE1uPjmz/OQzCWfn3sHR1CxpVWQOrxxAZKldNdtjoSZDi9aS6tOH9xJUuy1Uq3vxs2jRqlEmVdffZVly5YV+//Lly+nV69ef3lTbv5+zhw7yOKpI5AliXbdetD+2ZecmuesIHPxyG5WT3id/Ox0wirWpP+srwit4NodDVmWOffrco6um4osWYhs1o1WAxej0pauLe7t2Cukfj0S2VSAJrIxgf+ZguBi+2xF3J9ojlhzcQxN38Uc2cLheNGUR9UjHyJKJjJDHyOudj+7Yyvf+JaQnPMYFVr2Vh+NJNoOpa6Ttg2dMZlcVQAnIl8vcc8y1gvlFOW9UOy/2y1T2XyVyTlTGJc7gwjpFlmCjo89B/Ch93jSRft5E4Is0Sp3G5NuD6W24RQmQcVvwa/zVfhoh26gQiplHaHPxUHUyvgDCZGzZV9ge9Qs9GrHTqaihCjzqH5oLOUurEJAJjmyK1ce/xBJVfIeHjienESrIJOTiKQLJ7/LfGQv17JsCjHnZxF3J0cm+Ime+FS17RhyxiUjyzKnv5uPLEtENGhLaE3HIcu2yM/JYuvKjwBo9cLbBISVd3mN+/njtx84+ecelCoVA8bMQKl0HMru5p+LIAh07NiRr7/+moSEBEaMGMGePcVLNdy4KQ0Pyy0DUL1+U14ZMhmAXd+vZu/mDa7vx9uD8vVb0aLvWACit6zjzK+r7Y4XFUrqvzaD4NotkEwGLq0ZQc7NM8XG+bZ8A13z1wAw7V6I6XTxkFhT9S4UPDnBWsp06VdCDs9x2OEnt0Z3DtebiknhSVBmNK2ODsIn914gqzPvrSNhBuCitgGzyixgm647ZpREFRxnTvYH9Lb8hEp2vUys2Ov7eGAQtH95HbOg5qT/UwA0drKESRZVXCv3LACVY7+3706yQ3rd17BofFFnx+J72XHor7JhD4TgqmDIwbhnqd1xAa3fQOUThD4tjsS9Xzq1j+qd+qLx9iUz4TqX9jjeR2kIj6xqzZaRZX7/bpXL891uGTePIk6LMsOGDbv7EASBzz//nKioKPr370///v2pU6cOK1ascLkNqpv/PlfOnWbu2Pcxm0w0bfMU/YdPLlU7Xnsc2bKBr2cPxmzUU6VBC16fthpdQIhLa0gWM8e/ms7Zn63iX83O/Xis7xREhfVCLd3Fzk+m7BRSNg5DKshEFVadoO4zEJSuCRNixg20uz5EQMZY4+m7ra/tIstUPLUQj7xbGLTBXGs0ymbrawCfnOtUu7IagKOV3rHbFUghGWmaaD1pPBz2MmYnWkHni1YRSys9GEL40IUZWaae6RRTsicxN/sD6pnPYELJDx7/4V3fj9np0cGhO6aMKY4RKRPplbkCD1nPDW1NlkQuYn/AcyWWHHmYs3nq5gKeuT4DL3MGmdpybK07lxMV+yG76ISqkH+eqF3v4Jt8HItCw7UGw7lRf4jDdWy9l0L2LWvJUu5tJF0E+V0XInuHOO1CgXsuGVmWif9xBuacFDRB5QnrMMClYypK4tn9JJ0/hKhUUa/7kAePxcn9/b5+IfnZ6QSXq0Lz/zjONCpK0fcr9XYia5bMBODFfoOJqFjFpfXc/HMo2gSgVatWeHl5cfr06f/11tz8i3iYwkyTtt3oeqdrzA+ffcTpg7+Xap1qrZ7hsZet36fHvv+E87tsd88BEJUqGvafg67KY0jGAi6tGkZu3IOlfoIg4PfkO3e7Qpp2zcd0pninHVPVjhS0nYQsKPC5sYPQQzPsujAApArN2dd4PnnaMnjpb9Pq2FDCUg7eff5hCDMmUcNv/q8wu8xcrmhqo5aNdM76hnnZH9DEeKRUJU1gFWQeJscDOiMhUjHvDMF65zpx3QjvjEnhiS7vJmGpzjlsCpHUPqTVs96c8z+7FkWBbQcMgCAqrWVMgojl0k4sN4/YHCdqvPBvZz0nuLV7Nfr0WyXuQ+2po3on69/tE5s+w5Cf49JxFOLQLfOSNVT42O5fSbtd8p6Kre0WZtw8YjitoJw8efLuIzo6mkaNGhEcHExMTAwxMTEEBQXRsGFDzp0793fu181fJO76FWZ98BaGgnzqNnmCgRPmOBXsCyW7ZCSLha2rZvPbiunIkkSDds/Tc8wSh8GftkqXzMYCDnw2gpi91jKNhj3HUPc/75daOLLoc7m2ZjCWrCSUAREEvzQXUeOa4wF9Ftrt4xBM+ZjD6mFoNqhEoSDkxi93WicriGkyHrPadpcAQTJTP3oWCtlEnP9jxITYz+Wok7oVnSmVHFUQZ4I6A9hsOX0/BXccJlopr9hzD0OYEWULLQz7mJc9gsk5U6lrjsaCyB/q1rzvu4R1nn3IF+1/BpSykWezNjD+9kiqGC9iEDzYHPImK8rNdKpcqUrmQV69OJCaGXus7piIHvzSYCmpupquHYhsISrua2ocGIXakE6+TwXOt15KaoVODqfZFGSy4u8KMhbfcuR3XYDsFVwqQQYg/fjPZJ3bhaBQUv7FaYh2OjY545KRLCZOfbcAgKpP9sQ7uJzTeyrk1pVoju/8DoCn356AUlV6V4ssy3z20TgK8nKpWrse3V4u2f3l5p+JvSYAw4YN+1uaALh5tHmYwkyHF/vxROcXkGWZdXPGcP38Kdf24m39Tq7zVC/qP2O96D60bjZXD/5md45CpaHZuwvwqdgAiyGPi6uGkJdw+YExgiDg1+59dI+/AoDp93mYozcXW8tUuR357acii0q8Y/8gbP8UsNg/Z9OEVWdPk0Wk+NdDadHT9MxUql3/6q5Y8jCEGYDb6nIsDZ3CqqDhZCiCCLSkMCR3ERMLPqK2xrWSpoctyABkq4K5dCenrlG6/Z9VISk5Bswqb65HdAN44D1zlpxKndEHVENhyiPgjO3MldQ7goQirAbK+tYbgMbf5yObbQsVXrXaoqvcGNls5MZPcx3mGhUS2fxZ/MIros/N5PTmlS4dw/3YE2YqVIuieoPHkSRLqdwybtw8agiyM7+5jzDZ2dn4+vpy9kYyPjrXW+/9k0hOjGfiu6+QkZpMlVr1mLBgJR6ezndKcSTKmAx6vl84iouHrXeY2vUaTIvn+5copBQVZQx5Wez7eDBpMacRlWqa9ZtBxJ2k+Ptx1iljMeRzbfX75MdGI3oFEtp3GUq/cKfm3t2fZEa7ZSTKxFNIPmXIf3YZsofjxH91+mXKbnsXUTIRW/stkqr2sDu22tU1VItZi1Hlw57mX5Bott0mWyEZ6X/2NXxMaews9z6nQrrdfS7dQS7PE3m/80b6AvJEb0aX+YICGwKJK920CvGRsmlt3MPT+l8JlZIB0KNhh6Y9mz26kaIowR0ly0TpT9IzexVBpkQALng9xs+hb5OlKjkrxduYQutbK6maZQ2qy/Qsz4Gqw0jzqe7ysWj0qTS6sABdqvVEPKV8J27WfQ9J6fgk0JYgI6ZeRrt1NKI+A4tfBQq6zL8bBF0aUcaQGsvlpb2QTHrKPDWQkFZ9HMwpWZS5snsjJzZ+hMbbjy7Tfkatvfd5c2Z/ksXC52N6kXD1LHVbd+P5wTOdOJp7FH3Pdvy0kc/nTkal1jB71SbCy1dyab1HlZzsbKIiQ8jKykL3D/nbFBwczOLFi+nZ88HQ6A0bNjBw4EBSU1P/RzsrmcK/9dH/gr/1jxIP8266xWJm5bRhnD2yB08fX4bMWUNoOddy2FJy9ciyzJ9fzeP8zq8RRAXt3v+ICg1a251jNuRzcPEAcm9Go/Tyo+abH+MZ+uD3oCzLZOxYRM5hq1NW3X4kyjrdiq2ljD2E545xCBYj+WFNSGo5CVlpv9QnLTuPqCvL73YTuhXSilM1B2NWWs8TnHl/U53ongmglvS0y95Eu6yfUGHCgoJdumfY5tsDk6ghNaf4xf3fIcQ8sL63hsjc07x6cxxG0YMF1dZiVDi+aRfso0FtzKTDgb4oJQOH6k8jOdB284bC1yiKJuUcETsHISNwq+NSDIE1is+7I4zJxnz0a15Fzk1B+dirqJvbzhs0psVya0U/ZIuJKq9MI7BO8XPnotw+f4hDn45EVCjpPv0bdKGu36SBe6JkUa6ePc6SUW+gUKqY+MWv+AXZdoE7XPshiq//H8nJzqbOP+xvvZu/B3et0SNCRmoy04a+QUZqMhEVqzJ69qcPTZDJz8li7eT+XDz8Owqliu7DZtOy+5suO1sKslLYPe9N0mJOo/L0oc2QZTYFGWeRLWZubhhNfmw0Cq2O4JfnuiTIFKI+vgpl4ilklScFHaeXKMgIFgMhB2cgSiYywpqRVOUFu2M9Cm5T+Zr1JCu65mAMGvt5K+VyTuNjSiNXFUB00FMPPOfILZOmsAocXlIucxP60Dd9EZGGyw/c3Qn0UpfomlHLBuqZTvFq/lrmZo1gdebr9MtfRaiUTJag40ttT97yW85Kr34lCjLljTF8kPEhA9NmEGRKJEsZwJfho1lXdlyJgozSoufxxA30vfAeVbMOISFyplxPfqm/xHVBRpYpk/gHLf98D13qKSwKD2IajeJ6w+GlEmQUt45bM2T0GVgCq1LQdcFfEmRki5nYbycimfR4V2pMcIveDuaULMgY87I5u/kzAGp3G/CAIOMsx7Z/Q8LVs2g8venQx7Uw3qLvWfyNGNYttebS9HxrqFuQ+X/O/6IJgJtHm2AfzUO7aFMolPQZNYsK1euQn5PFp5PeJTvddSFREAQe7zmMqs27IksWdn8ylsSLx+2OV2o8qf7afLzK1sScl8mFz98n//aD4aiCIODfYTA+j1nz/4w759jMmDGXb0Zep9nISg88k44SvmskosF+mG+gzovo6u9yqsYgJEFB2eS9tP3zbULSjgEPzzEDYBQ92OLXk5nhC4nWNkGBhQ7ZmxidOIQaBScJ8vEo9vhvcMOrLqnqCNSSnqq5R52aY1T7cbNsFwAqxhUvKSsJQ3BtciLbIyATePIzh24bQe2J6snBAJiPbUDKsN1BVh1YnvDWrwIQ++sSLEb7pUWFhNZqRkiNx5AsZk78uLzE8faw55apEtWIyrUbYjGb2PPzV6Ve342bRwG3KPMIkJOVwbRh/bh9K5bQ8HKMm/85Pr4Pp/V1ZnICK8f2Ju7SKTy8dPSZ/Dl1WnRxau79LpnclHh+n/0GWbeu4OEbRNsRKwmu2tDmPGdcMrIsE/fjdHKuHEJQaQh8cTbqUMddkmyhiD+G+rRVNNG3+gDJv+S7ZgGnVqDJuo5J7cf1BsMcljlVi1mHQjaRGlCfxLA2DtcNKrgBwC3v2lhE58uOLmuiWOv/HreU5dHIBlrm7WB88jAm3B5Cq9ytaO7Lmgn0VBGuNRNsSaaSOYb6xpN0L/iOqdkTWZ/xKpNzpvK8/kcqW64hIhOjqMgyz7d5y+8zvtP2IEd0fJFfS5nA+1kLGJc8isr5ZzAJKvb6P8fCyI855/OE45IwWaJm+m5eu/guj9/+GpVs5LYuil/rL+ZUhT5ILrwnANr8RJqdmUS9s3NQmnLJ9avOuTafkFaufYlzbQkyyphdaLeNRjAVYA5vYC1Z0lp/z1wRZO4nec9q8uPPIXp4U677JIS/mNl17rcVGPMy0ZWpROWWD2YiObPH7LTb7Fy/ELC64Xz8SxdaDGA0GFg0eRgGfQFRjZrRuYd9B5Cb/x+4mwC4+V/xsIQZjYcnb01aTFB4edJvJ7B8ykAMBfklTyzcxx3HgCCKtHh9POUbtMZiNrJj0TBuX7GfqxQaHEiNNxbgGV4Nc26GfWGm41B8mlqdaKZd8zEdKx5MbCnbmLyuC5E0PnikXaDsziEo8pLtvnaQt4abZbuwv+EccrVl0BpSaXZqPA3Oz0NlynmowgxAmiqMz0NGsyJ4FBmKQILMyQxInkbflHnozBlOr/NXubtnQeCyz2MAVM6136q6KNcjngYgNO0Y2oLbLr9+Wr3+SAo12pQzeN5y3JpaUbklYmRTkMwYdy+0W55UpvWrqP3CMGbddjr0t1a3twGIObyNjFul75RkT5hp94K1JPnglu/Q5+e6vq47W8bNI4K7fKkE/r+XLxXk5/LhkNeJuRCNf1AIUz/+ipDwknM67seeSybp+kXWTxtAbkYKusBQek/4jJDyzgd0FooymbeusmfRAPRZqXgFRdBm6Kd4B5W1O88ZUSZxxzKS/1gJooKKveZgLveY0/sqRM5LxbCuL6I+A2ONZzC0GFriHG3iUcJ3jQDgctOpZJZpZnesV14crQ+8gShL7G+6mEy/e62tbR1j/Rd9sAAAIABJREFUpxtziUrbwYEyr3Io3LZjwlEZE7JMFeN5WudupXH+flSY7j6VLfohIeAt5aDE/h3tVDGQ08p6nFHVIVpVhwyx5K5GgV5qwvTXaZu2kajceyceJ3Vt2BHUm0xVySHQETlnaJmwmtAC6wlDjiaU4xX7ExvYvMRsn6IIkomKN76nyvWvESUjkqgiodorJFZ72alQYFuCjOrsd3j8+TEApopt0LcZA4p740rjksm/dYErn74OkoXyPabiX7+zgzklC1I5t2+ydcoLSBYzrQYupUxU8weed2aPX88ewoU/d1K2al36zVjndB4VFH/fVi6YyrYfvkLnF8DsVT/iH+RaGPijzj+lfGnYsGF3/9tsNrN69WrKly/P449bcxoOHz5MbGwsffr0YcmSJf+rbZaIu3zp38HDuoBLSYhlwfA+5GVnUKtxS/pPXIjCyW6N91+cmk0GdiwcSsL5o6i0XnQe8THBlWrbnXv7djIXvhhEfsJllN7+1Oy/1GYpU+auT8g+uBYAZdPXUDV7vZg7WUy/hteW4Yh5KZi1QSQ8+REm30i7r52aa0Bh0VMzZg2V4n5EQEav9ud0jUEkBTd7qKVMhailArpkfk2rnF9RIFEgeLLF7yX2+XRGEpz/+1Ia7heSInNP8erN8eQo/VlYba3d84qiAtUTJ0YTnHGKS5GvcLGy7RsLjgSrgNOf439+A0ZdeeI6fw7ivWMOKvJaUmY8+rV9wWJC/fSHKKvaLokTr+3j6oYJiCoNdYdtROMXZnPc/Rz+fCyJZ/ZSsUl72r7rWkny/dgqY5IkiVnvdud23DX+0384Tz7n+g2YR7mEyV2+9Ojgdsr8izEaDMwd8z4xF6Lx8fVj/PyVLgsy9rgWfZhVE14jNyOFkPJV6TfzS5cEmULSrkeze24/9Fmp+IZXod0HKx0KMs6Qevg7qyADRDwzGl2Nli6vIZuNmDePsZah+FfE8Pi7Jc4R9ZmEHLL+Mcuq+iyKKvZryAGqXV2NKEskBTd7QJCxR1CBtW1lqjbS7hiHob+CwFVNbb4IHM6I8DV87dePJGVZ0hWB6KRM/KSMu4KMCRUZigDiVZGc0DZjvd8AxoV9xpu+y1nq/T57Na1tCjKFZVCFjyhFHL1uzWDQzcFE5R5CQiDapzmLIhfzbZlhJQoygQU3eTZmKi/ETCS04BpGhZYTFV7np0bLiQ1q4bIg459xllZHBlEtZh2iZCQruAHRbZeTUKN36QQZWUZ9ZPldQcZY+3n0bSeUWpApRDLpif12EkgWfKPa41fPcdiwM5z+YTGSxUxY7SdKJchcPLKbC3/uRBAVdBswySVBpihH9u5g2w9WK/N74z9yCzL/j3E3AXDzT+JhXbwFh5fnrUmLUWk8OH9sH99+PMOp8FR48MJUqdLQYdB8wqo3xFSQx9Z5A0m9cdHu3NDQEGr2W1yyY6bde/g9ae24Yz68GtOepcX2JwVUIvfZZVj8KqAsSKXsjsF4JBdvvV1IkLcGi8KDs9XeZl+jeeR4RuBhzKDpmSk0jp5GOVV2icce5K1xyTVjFLX8GPAa88rM5oa6Klo5n+czVjEicSSV9OdLXuAhEedZG6OgwcecQajheskT7nCjrPVmSfnEbQgOWpHbI7Pmy3dbZOtiHgwaTi0igol+ESgb33FJ7VmCbCqwuWZAnXb4VKyPZDIQt+UTp/ZRo0s/EASuH93p8PNZErbcMqIo8uRz1rKqP376EovZVGxMieu63TJuHgHcTpkS+P/qlLGYzSyYNJSje3fgofVk4uI1VK5Rx+V1bLlkovf9xqYlY5HMZirUaszLYxaj9XLtvUnLNXD70lH2fzwYs6GAwIp1aDlwCRovx3kt4Ngpk3VhDze+HAmyTGi7twhr++adOa59oZt3zkQ6uxlZ7U3es8uQfUsWs0L3jsc7bh9GXXniO69AVnrYdRn5ZMfQ+tBbAOx5Yjk5PpWLjbn/OAXZwqCT/0ElG/m89koyPRwLVw4dM/cjy/hZ0ihjjidX9CFP9CFX1GEUNC4LHvevWbHgLC3Sf6JmnrWFo4TAWZ8W7Ap8iWRN+RKX8DUk8tjt76iZvhsRCUlQcDmsC6fLv4JB5efyltSGDKpdXU1Ewk4ATBo/YqPeIS2irdPHWUyQkcx47JuL6so2AAxN3sRYt+cD67kqyBS6ZG79Op/UgxtQegdSffBGlJ72j9kZl0zypWPsnv8mgqjgqQlf4xv+4OetpH3q83P5ZPCzZKfdpvl/3qBDn2EOxxfl/vcuIzWZ4X26kZeTRbeX36D3ex+4tJYbK/8Up8y/BbdT5t/Fw7qIiz60my9mDEOWJDr3GkCnV95xfg/3XaCa9Plsmz+Y21dOofbS0eWDZQSWr2Z3rjOOGYDsI9+QsW0eAIqorqjbjUAQHxTMBX0WnttGo7wdjSSqSH5iPHnlWth97UK3i2gxUv36eqrEfocoS5gVHlyq2IvDfp2RxJI77rnqmhFkC4/n/k63zC/xkqxlLke8WvOz/6vkKB5Oyf39FBWPXro5hWq5R9kV0ocDwS/anFNU9BMkE0/t743GlMXhupNICi7uji5JpNJd3kTw8aWYNX7EdluHrLoXNFzULSOb9OjX9kHOTnIY+uuZfZOzS18DWabmW8vQVazvcA8Ax9ZMIf74DsJrN6XziKUljreHLbeMyWhgyuudyclM49WRM2ncxrmYgwfWfUTdMm6nzKOD2ynzL0SSJD6bPYGje3egUqsZOeuTUgkytji6dSPfLxyFZDZT+4mn6D3xM5cFGYCk83+yb8lAzIYCQms+Tushn/5lQUafcsPqLpBlApo8R+iT/V3eF4Dl0k6ks5sBAVWXqU4JMp63/sQ7bh+yqOR28wnIJYTElr9lvSOSENbGpiBTFIVsQiFbXSxyacUSWwgCmcogLnjUJ05dmXRlCEbRo1SCjJc5k5bpPzDs+gDejBtHzbwjSAic9mnF4sglbAwfWaIg46+Pp+PNRfS98B61039HROJmYHN+avgpRyq/67IgozDnUyXmS1offOuuIJMc2ZUz7VaSVq5dqQUZQZ+FdusHqK5sQxZEClqNwljvlYciyOTEHCX1oDUnoNzzExwKMs5gNuo59uU0ACq37O6yIAOwbdVsstNu4xcaQeuXBvyl/axZMpO8nCwqVa/Ny28N+UtruXHjxo0tHlYAcJ1mT/LCO2MA2PLlMg5t+6FU66g8POk4dCHBletgzMtmy5x3SY+/ane80tP3QcfMiveKtcsG0D32IoHPTABBxHL2V4xbPkS2POhEkD18yeu6EFOFFoiSidADU9Bd+dnuaxeKCJJCzYUqb7CnyVLSfGuhtOipffULepwfRpls+46bous4iywoOOTTkWnhSzng3QEJgcfy9jDu1iDaZG9GlB9eWLitvV3xaQJA1Rznwn4BZFFFbJkOAFS4VXJLbVtkV34ao3dZlIZM/C5+43CsoPJA1fp9AMzHN9oN/fUKr0ZIk2cAuPnLAmQnXDw1u/ZHVChJOHeYW+cOu3gU97DlllGpNbTqZnX57P5hjdOuswfWdbtl3PzLcYsy/zJkWWbd0o/Ys2UTokLB4MkLiGr4eKnWut/lIcsye7/7jF+XTwNZpknnnnQfNgeV2vWTntgz+/k/9s47Oqrq+9vPnZ5kJr13Sgg99N4EQYqKBXtD6QgqqIjYFQURKRYQRVGxoYiiItJ7ld4SSCC990zK9Pv+MYApk2RmEt+f+p1nLVdcmXP3PffOkDn3cz57730fPonZqCek00AGPr4cuarhFoSNYdZXkvLNHCz6CjyiuxJ+yxyHuz8BiGU5mHcsAkDS62Ek0XbcO7MRv+PWXYXS2HEYfP/a/bLZ0Ui0EJy7H4CM0OH1hq3ugDBJVKRrOgPQLa/xSv8NpjE1I4JooVXFae7NWsRzlx9jVP7n+Buz0EncOOI1kmUtPmRd6DONijHBFRe5OXkBDyfMpH2x1R2T4dOD3zsvYU+7F9G6OZZ2JzHraJGynsH7H6P1lW+Qmiqp8IrhwqDlpHR5CrPC/q5Dtd9DScEl3H+egizrJKJMRdXw+Zja1Ewvcrawr6mqjPQfXwPAt+fteMb2b3C8PS6Zsxs/RJubipt3AJ1um+HwnBKO7uLkjg0gCNw24w0Uyvrbq9qi+v07dWQfh3ZuRpBImPLcfGRyx4ozu3DhwoUjNIcwM2DM3Qy/27rJ8/0H80k42XBR1uvnruUYULh5MHL2e/hHt0NfXsof7zxOaU6qzWP9NMrrwoxHWNvrXZkqMuumlqjjbsb/jvkgkWG+tBP9ry8gGms9GMuUVA6fj77trQiihYBjy/E9vRpEi83zVxctyjQt2d99MSfazUYv90JTmcaYhJe4MXEBfhX1C0u149hLpVTD935TWRq8kDRFK9zESm4v/pznsmbTtuqkw/HsndNltbVzXFjVRSQW+1NsrnVhCio8hlJf5PiEpHKKulg/X94JPyDRN5wmJm01EElULzAbMe6rW1gdIL9cT/jwKUhVaiqzLlFwYnOj0/DwDyN6wG0AHPtxhVPCyV/nryvM9B99FwqliozLCSSdsV/4cuHifwWXKPMf48fPV/D7D18AMHXum/Qc6HxL6WuIosjWzxez8xtrkcZBd01l9MR5SJzoBJN6ag+bl8zAYjIQFjeE/lMWI23ig5losZC+4XX0ecnINP5E3fsWgp0F+WrGMWPa8hoYyhGCOyDtPcGu47wubUChTcek8qGoU+MFzLxLL+KmL8AodafA13aHqWtUf+j+M8jaWrtb3kZCyxuvz+CrVv494owoEqRPZWjBd8xOnsqEjJforN2PDBPpqjb8GDSDha0+Z2PwdAoUDYgpokhU2QnGJb7AvYnP0br0CAIiab592RS3jJ0d3qDAs51DUxMsRiLTf2PQ/onEJq5BYdRSpY4gseeLnB/yAeW+7R2KV1uQkSVtw/3XmUjKc7F4hlE5dgXmyPqLOduLr4fS2jHsx9cxluai8A0ndFTTXST5SSe5tMPagaHHgy+hcK8pRjUmHlWUFvHrylcA6HvLw0R36On0XAx6HZ++axWcRo97iOgYx95bFy5cuHCG5hBmxjw8gx43jMFiMbPmrWfISbts37lrCzPuakY+8wG+ETFUlRXx+6LplOVl2Dz2mjDTduL7qCM7Yq7SEr96JuXpdb//PdoPI/CedxBkSizJh9FveAZRp605SCJDN/BZdN0fA8DnwrcEHXwTwWTbgVBDvBAkpIeOYEff1SSH3YyIhOjiw9x+/mlGJbxEWOmpets6O1pn5hppytYsCV7Ad75T0Uo8CTZlMi1vPhPzFhBgzHI4Xp1rqoVBYn2vJFgQBfvXtxXuoRR7tkFAJLjAOYdJRfhA9N4tkZh0eF7e1OBYQRBQDJ5hdUdd3o8566zNcXK1D2E3jAcgfdsqzAbbNWiqEzviEaRyJQXJF8g8d9jh62gID09veg6zunf2/lq3a5g9uNwyLv7LuESZ/xCb16/lh8+swsn4J+cxeORtTse65pIxm01s/PAlDv1qFXpuevQ5ht43wykXSsqJXWxeMhOz0UBYl6H0nbyoyYIMQM72jyg9twNBKiP6voXINTXb9NpbT8ZybC1i5mmQuyMb+Ypdwo60qgifs9Z7U9RlEqLco86Y2g/2wbn7AMgL6I1Fav/1p3j15JzfcARERqYsQWax77qaQ5gRRAsRVQmMzFvD7OSpPJkykxsLv8HPmINO4s5h79G8H7WMlVGLOe49AoOkfjeFIJqJLd7LAxdncfuV1wmvOI9FkJIUOJyN3T5id/uXKdTEOjY/i4mwzG0MOjCZ9gkrURmK0bsHc6XrM5wd+gnFYYPBgUUW1HrfLGaUhz/EbfdbCGYDpojeVIz9yGaLdGfTlvIPfE1Z/B4EqZyoe99CqmzYPdaYS8ZkqOLoF9Z0vhb9xhLayfGC15s+nk9FaREBEa0Zev8TDh9f/R5u+GIledkZ+AUGc/cEx2O5cOHChbM0NZ1JEATue/JVWnboiq6ynFWvzkBbUuhULKWHJyOf+QDv0BZUFufx+6JpaAtsiwx+GiUylZq2jy1DEx2HWVdOwqdPok2t+yDu1rofgQ++j6BUY8k6g279k4gVteYoCOi7P0bl4HmIEhnqtN2E7pyNtMq2w6O2iGGUazjTdga7eq8gPXgoFkFCWNkZRl18hdvOz6Zl4V4Ei+00I2eEGWtK03DeDPuAXZpbMCOlU9Ux5mbNYmzxF7ibtY0HsfP8ctG6pjIJckQHOz9lB/QDIDjfPhdVHQSB0tg7AfC69DPUcw+vIfGLRtrB6tAx7ltVr6slqO84lD4hGMsKyN73TaPTUGp8iO4/FoBTv37a7G6ZQbfcC8DZI7spynNOWHPh4r+KS5T5j7D3j418vvxNAMY9NoNR4xxvOVcbs8nIj0vmcGrnzwgSCWNnzKfvLQ85FSvl5B7+WPYkFrOJiO7D6Td5IVJZ44XiGqP49B/k7VkDQPjtL+IRFedUHEtuPOZDnwIgveFpBG/70mV8z3yK1FiBzjcWbcv6WxZXJ+SqKJMTZN9DcvWH713hU9DK/fDVZ3B70suEa8/UuztVI4YTiyEPUylty48yNmcFz11+jGlpcxhU/BP+xmyMgpx4j578EPwkC1p9zi9BU8lW1S1CWB03Uyk9c9fz6IUpjEpdQoAuBaNExYXQ29nQYw0H28ym1D3KoTlKTZVEpf7EoAMT6XRhGW66PAwqX1I6z+TMjZ9REHVTjRaT9nCtc9Q1hMoi3DY/i+LcegD0XR6iasRboFTXPdZJAaw8+QTZW6wpcKFjZuMe1rCLxJ60pdM/Lqc8Lx0370C63PW0w3M9u/93LhzaikQq4/Yn3nI4VbH6PUxPTuSXb60d0R598kVU7nXFSxcuXLj4u2mKMCOTK5jwwlL8QyIoys1i9RtPYdDXffCsc04bhU/dPH0ZNWcFXsGRVBTmsHnRNMoLc2we76dRIlV6EDt+CZoWXTHrK0j47Cm0KafrjFVFxBH88EokHr6I+Uno1s3AUlr34dcYO5qKMcuwKD1RFSYQtvVxFMW23T+2xAytOpoTHeawve8aLoePxSRR4l95haGX3+W+0xPokb4WtT7XZixnxJkqiQc/+45nYegSLqi6IsPE0LJfeClzOsNLf0Rhafh9sOec8qsxjBLbYxv67OT4W1PdA4pPIjU17kixhTZqKCaVD7KqAtRpexodL+/7KMiUWLLOYL5yoM7r+eV6JHIlESOt3UOz936Noayg0bith92PRKYgN/E02QnHHb+QBgiObEWbLn0QLRb2/bbOqRgut4yL/youUeY/wJHdW1ixwFqIbtRdDzNu/ONNildYYbAKMsvmcuHQVqQyOXc/u5SuQ51z3mQlHGPL8qewmE3E9B1DnwlvIZE6LsjULvKrL0gj42drC+rAwePx7TrGqfmJFjPmHe+AaEYSMwxJO/vaD0uritBcsXbeKew+o0EnxvUHVFHEvSobgGKvtnbP8dpDuF6mYWvULCxIiNKe4t5Lz/JQ/AzaF25Daqm/CDI0LMzILAYiq+LpV7SRe7Le4Zkrk3jh8kM8nDmf3qV/4GkuQidx57RmEN+EzuHN1mtZG/4SJ72GYZQ0UNRYFAmuuMhNqUuZcH4C/bO/wtNYQJXci5ORD/Njzy851nIylcoAu+8FgEqXT+ylTxmy7xHaXVqNmy4fg9KHtA6TOXPjF+S1vBXRju4QtantapLmnLXWj8k+iSh3o2rYaxh6PGbzvXZGkPH1UKIvSCPl6zlgMePd+Sb8et3pcJzaZJzYQdJu64Kn50Mv10lbaozi3Ax+++h1AAbeOZHQVo6lfVXHbDKxcsE8zCYjPQYMpUczpFS6cOHChbM0xTWj9vJh8qsf4OahISXhDF+9+wIWi+26LDXOaUOYcffyZ9SclWgCw9HmZ/H7omlUFOfZPN4qzLgTO/5dPFt1x2KoJOGzpyhNOlpnrCK4DcHjP0bqHYJYmol+3QwsBVfqjDOHdKHito8xe0Uir8wjbPsTuGcetHn++kSNKrcgzsVOY+uAtSS0eJBKuTfuxhK6ZK/nntNTGJnwCtFFh+q4Z5wVZ/Lk4awKepGPAl8gQx6Nu1jJzSXf8FLm4wzQbkYq1qwF48h55Ffdx0bB8XlpPaIodwtBajESVPjXe+LQNUoVlMZY19leF9c3uuEmUQcg63qXdc77P0asx13j22kY6oiOWAxVZGz7uNFpuHn5E9XHup4+9cun9s/fBrbcMoNvtRb8PbxlA3pdZZPiu3DxX8LVErsR/uktsU8e3ss7zz+O2WRk8KjbmTr3TadqvVQnr7SC9UvmEH94G1KZnHvmLKNNj8FOxSpITeDn+Y9gqNQS1XUIo2a9R3FV41XgbVFdlLGYjCStmkBVVjwe0V1pNWFlnTaQfx3XsKpuPr0B867FoFAjf+Q7BA/fOmMKbbR29Dn7Bb5nPkPn357Mm2wXW6sTp8LAyO1jkJl17By4lkr3ULuOu8a1e+BblUa3vJ/oULjjuuUWIEXTjQq5D5VybyplPlRc/Vkp90Jh1uFhLMTDWIy0Mh+1qRiNqRhPUxEBhgyk1H1f8hQRpLi154K6D5fdO2O2U+iQWfS0Kd5PXMEmgqr+Wgzmq2O5GHIzKQGDsEgcT13zLEsiOvUngnP3IRGt861SR5DTehwFEcMQpc4ttOsUZDbpUR7/DPnZHxAQMXtHoRv2GhYf204eZwUZU2UJiR9NwFCYhnt4B1pN/AiJvOHOXY25ZMrzM9j65n0Yq8qJHf4wXcbNcmi+ZpORNS+OJ+PSacJj43h0/hdIHazRVP1+bvz6E7756F3c1Rre/fI3fAOCHIrlwjaultjNi6sl9v8mzu66J509xooXp2A2mRh6xyOMnTC78XPZeEAFKC/M4fe3p6DNz8IrOJLRc1fh7uVfZ1zh1blajDourZ1LaeIRBKmc1ve9jm+HIXXGm7T55H39BMb8K6BUoxz7NtIwG5049WV4bH8JWeZxRASK4iZQ0u5em90JG2tzLVhMuKfvo23eFsLLTl3/vU6mIdm3P0l+g8lVt62zseFo+2ywplV3rTzAmJJv8TdZXTkFskD2asaQFDQSvdQxR2ZExTnGp8ylUBHGiphVNV6zR8Rrl7SGNqnryArox5+dXwYcT9mS6EuJ2ngvErOBzGFLUbdquI6bqNNSteY+0JWhGP4cso51NycD1Eq0qWe48NEUEAQ6zfwS95DWDcatLMph2xv3IppN3DxvNUExzrnQreevuaaxmM28OWUsBdnp3PX4CwwYbbv9eKNx/0daZLtaYv/v4BJlGuGfLMqcP3mEBc9MxmjQ03foKJ54eTESqWOpGrUxGQ2seuNJEo7saLIgU5qXzk+vPUBlSQEhsd24Ze5qSg3Ot3OuLspkbV5G/v6vkbp50Wbm1yi86n/Qa0iUESuLMH5xH+i1SIfMRtplnM1xdUQZs5Gojfcgqyokt9+LlLeov4tSjTgVBobvuhOloYQ9/T62qx12dWq7hVSmMjoXbKZr3i9IRBMephKH4lVHK/Um3a0NGao2pKvakKGKcWxRI1oIq7hAu6JdxJQcRGmxWnjNgpzkgCFcDLmZQk2bRoLURWqqIiRnL+GZf+Bd9ldL0DL/OLJb30VpUE+H68VUp053pbwLqPYsRFpqbTVpjLkJXd8nQGG7xouzKUveSoEra2ZQkXISuXcIMdPWIFf7NXpcQ6KM2Whgx6LxFKfF49eyM0OfWW3TldbQnHd8vZx9P36C0l3D1CXr8QkMs++Cqse/OseMlMvMnXA7RoOBac+/xZDRdzgcy4VtXKJM8+ISZf63cUacObZrE2sXzwPg7hkv0n/UXY2fpx5hRluQxaYFk6koysUrOIoxc1fh5lX3++C6MGMykLTuVYrP7QJBQqu7X8a/y011xpurSsn/7mn0GWdBqkB58+tIW/arOwGLCdWBpSjjrd0dtZFDyO/9DKKsbn04ewSUfK0ejS6H2PyttCnYgbvxr7WJVhHAFb+BJPkNptg92ubxjog0UtFIn/IdjCpbj8ZUDIBe4sYZr6Ec8x1Dgarh7o/X6Fn4KyNzVpGjasknrd6r8Zo9AoCn9go3HJ2OWSLnj4HrMMncnXID+R9dgtflTRijB1E54q1GxxuPr8O490MEdQCqR79BkNU8Z8DVOSR+PY+ic7vwiulN28eWNRr35Hdvk3rwV8I79eWm2e81Or4hagsze375mg2rFhEU3oLnP/rJqTqVLlHGxX8Nx1vUuPhHcOn8Kd5+bhpGg55u/YYw48W3m0eQef0JEo7uRCpXcO9zy4np5nhxUIDKknx+XTCRypIC/CJjGf30CmQKFRiangtadukg+futHWUi7nipQUGmMcy7loBeixDQBknn2+sd56dW1hBmNCnbkFUVYnLzozxyiN3n8/NQYJJ5oDSUIDM5btv09VDUEGZ0Mk+OBt/DsaA78a9KIaAqGXdjMR7GYtxNJdb/N5XgZizFIHWjQu5Lhdzn6s+r/8l8uGIJokQWYHNnrDG8dZm0K95Nu6LdeBrzr/9eqwzmUshokoJGoJd7ORZUFPEsSyIi8w9CcvYgM1sFHosgpShsMDmtx1HpHePwXKtT1x1jQHHicxRn1yGIFixuvugGPtNgdyVnBRkfdwXp61+lIuUkEqUHLR5e0mRBBuDU+iUUp8Wj8PCi36S3HRZkrpw9wr4NqwG4dfqrTRJkLGYzKxfMw2gw0KXPIAaPqv/flwsXLlz8XxKgUToszPS4YQyFuZn8vvZD1q9cSHBEK1p1bLijYoBaZVOY0fiHMvq5j/j97amU5qSyefEMRj+3EpXau8Y4P42SQq0eiUxBzL2vc+WnhRQc38Tl719HtJgJ6Da6xnipmxeBD35AwY8vUJW4H/0vL6C46Xlk7UbUnIBEhm7AM1j8WqM6sAxN2m4UZenkDHwdkzq4xlB/tbJR0SRAoySfYI5FPMzx8AcILTtDq4Jnoz1CAAAgAElEQVQ9RBcfQmPIJy57A3HZG8hVtyU+cCTJvv0xV3PPOiZmKLmoGcuVoJvoVLKTXkW/EaBPo2fxJnoWbyJPGcUp7+FkucWQ7dYKU7WUay9DHh1K99KxdDdB+hQA0t1q1nSz9+G/TN2CClUQHrpcfEoTEKOc68xYGnsHXpc3IUs9gFBZgOhe1zVVHVncbZhOfI9Yno/p/O/I42x/10aMnE7Rhb2UJh5Bm3YOTWTHBuO2ufFBUg9tIuPsIYoykvANb9hd4wi9b7yNTV9+QG5GMolnjtImrnezxXbh4t+KS5T5F5KZeoWFz0xGX1VJx+59mfX6cmRN7GJksVj48u1nqwky7xHTbYBTscxGA5sWT6csLx3PwAhunvMxSo/mUXdNVWWkr7e21fXrfRde7Z1z8QBYkvZgSdwJEinSG+fWm/5kC+8L3wFQ0vZucLA+jqj0hMpMvMoSKfaxYSVuhNrCDIBFkJHn3po8d+e+NCVA9aStokYWXGpDPq1Lj9ChbB8B2ovXf2+QupPqP4jLgcPI8+zgsMijMJQQkrOHsMxteJYnX/+9ziOMvOjRFEQOx6T0cShmbeqIMVx1x+xdhLQkFQBj6+Ho+swAVf2f26YIMjlbP6T41O8gkRJ13wLcghp/3xoTZFIOb7peR6b3o2/g7hvc4PjalBXlsWHZXBBFug0fR4d+dXddHWHTD1+QdOE0bh5qJj/7ulM7YS5cuHDx/4trD9+OiDMj7plEdmoSJ/du4bO3ZvP0sm/xDQxp+Dz1CDOegeGMnrOSTQsnU5yRxB+LZzJqzgqUtWqCXRNmBKmMlnfMQyKVkXd0I1fWzweLhYAeN9cYL5GrCLjrbQp/fYOKs39g+GM+ok6LvGut+mWCgKH97Zh9WuK+7QWUJZcJ3zKNnAEvowvqWmPoNdGkIXGm+v3M9OpKpldXDlimEVFyjNaFe4ks+ZOg8gSCyhPok/opiQFDiQ+4iTI3xzcDAIwSFSd8R3PCZxTRFWfoWfQbbbRH8NenMyLXutlgQUK+MpIstxj8DJlEVl64frxZkJGg6cuuoL8aZTjkxhAEirzb45GTi2/pBQpxTpQxekVT5d8Rt4JzKC7+jr5rw407BJkSWc8HMO5ahunoV8g6jEGQ/bVeyC/XE6BWovILJ6DrSPKPbyJr5xpix7/bYFwP/zBCOw8i6/Ruzm7+isGTXnXqeqxz0NVwy6jcPeg59Bb2b1rH/k3fOyXK5Gv1/zNuGRf/G7hEmX8Z2tJi3n5uKhXlZbTp2IVnF3yIQtn0P0obVy/i5L7NSGVy7pv7Pq279nc61sFvF5OffB6V2ptb5n6Ch49jRVxtcU2EyN25GlNFEcqAaEJHOd9WVzSbMO1fAYCk+wNIguwvuiutzEdRloooSCiLucXhcxcH9UZdHE+HhJUY5F5khTpe+NSWMNOc2CoKrKnKJLLwAJEFBwko/0uIsSAhy6c7VwKHke7bB7ODdV0kZgOB+UcIzd6Jf+ExJKK1aKJFIqcodCD5UaPR+nd2ysVTHVtiDLoylKfWIj+/4ao7xgd9/9mYohsWJJsiyGT/8R75+78CIPyWOXjGOLdwq07W2X0c/eJVANqNfLTe9tf1zduo17Hu7ScpL84nIKI1Ix97zql5XLvHeVkZfL/aand+6PHn8At0TCBy4cKFi/8rHHHNCILA/U++Rn5mKhmXE/h0/lM8uehzFKq6aT/24BkUwahnV7Bp4RQKUxPYuuRJbnr6fRRuNVOJrwszEgnRY+eAREre4Q1c+fFNLCYDQX1qpooKUhl+Y19B4uaJ9uj3GHcvB10Zsj7j6wjm5pA4yu/4FI+tzyMtuETorjkUdplKaewddb6H7XbNXL2fZomSFN/+pPj2x81QRGzBdmLztqIx5NMpZyOdcjaS7tWN80G3kOHVxbnUZEEgRR1HijoOT0MercuP07r8GKFViWhMRQTpU667YkQEUt07cs5rMPGe/dHJ/hLAnHngL/JqT0TOrquijPNoW422ijIJv6Lv8mCj90HWcQymo18hludjjt+CrJPttWnokEfIP/kHJRcPUp4Rjzq84U6PMcMfJOv0bi4f/oNut01CE+CcYGaL/qPvYv+mdZw9tIuSgly8/V315lz8b+MSZf5FmIwG3n1hJrmZaQSGhPPsWytQudmuc+EIe3/5ip0/WtvVjp0xv0mCTPLxnZzdYn3gHDZtAV5B9uXy2oMuL5mCw98DEHbzM40WRG0Iy4VNUJIObt5Ie9jX5vtaCpOqIB4Ag3dLRLnjrX0z2o1HWZVPYOomup5diCCayQwb0fiBtfi7hRlEC74VV4goPExk4QF8KlP+egmBPM/2pPn1JzlgMDpF3eLIjcX2KblAaPZOgnP3Ia+WylXuHUtB5AgKw2/ArHCsa5AtbIoxJgPyCxtQnvoawVAOXHPHPA6q+lOtnBVjAHxUUjJ+mk/R8V8Aa+trv1721VhpyCWTd+k4B1c9i2gxEdlzJJ3GznBoXqIo8utHr5KZeBY3tRf3Pf8eCqXjDxTV7/OXHyzEoNfRvmsvht5su06TCxcuXPxTcUSYUajcmPDiMt596j4yLifw9ZKXeGTuogabLtTnlgHwDm3ByGc+4PdF08i7fJZty2dz06zlyJQ11zw1hJlbn0GQyMg9+D0pG9/BpNMSNuSRGuMFQYLPiNlI3Lwo3fMJxsNrECuLkN/wVB2nsKgOovzWlbjtfRtF0lb8T65AVXiBvF5PI8prrjvtFWagpgupSuHLqdC7OR1yJ+GlJ2mXu5mI0uNElJ4govQEJapwzgfdTKL/DZikzq33yhSBnPAdxQnfUQBojAWEViUSUpVElVTDBa8BaOV104OcdWAUeVk7FfqWXQTRDIJzZQXKIwcTcHIFEm020szjmMMbLvgryJTIetyLcc8HGP/8GmmHUQiSuo94Kv8I/ONGUHByM5k7PiX2kcUNxvWJbEtg217kJRzlzOa19H94rlPXA3XdMqHRMbTq2J3L545zaMsGRj0wzenYLlz8F3CJMv8SRFHkk8WvEn/6GG4eaua8vRJPHwcfhG1w9vBO1q+cD8DQ+5+g8yDn2koDaAuz2fnxCwDEjXqEqC41U4tsdTCyF1EUydy0BCxmPNsOQtPa+fxT0ajDfNja5k/a6xEEpf3Cip9aiVhotbvq/BreYagXQcrlbnMQBSlBKb/Q5dwiJKKZ9PBRDodqVmFGFFHrsgkpOUVI6SmCS06jMpVdf9kiSMnx6kyaX3/S/Po6IcSIaMqvEJKzj+Ccvbjrcq+/pHcLpDBiGAURN6LTNI+QZ1OMsZiRXd6O8thnSCqsrUfNPi3R95qCOaJXw/GaIMh4KwVS182j9Ly1KGPE7S/g2/1Wu45tSJApSotn/4dPYTbqCek0kN6Pvo5Qz4NAffM/8PMazuz5DUEi5a5nl+Ab3LT7f/rofv7ctx2JVMpjs15ypS25cOHiX4kj6Uy+gSE89sISPpw3iVMHthH49QrGPNSwQN6QMOMX2YaRs99j8zuPk3PxBNvee5rhT7xbvzAjCETd/BRSpTtZuz4nY8tHmKvKiRg5vcbfYEEQ8B40Eam7N0WbF2M6sxGxohDFqJcRam90yZRU3fAS5oC2qA5/iDptN4qSK+QMeAWjV3SNofYIM2Bb7BIFKenePUj37oFGl02H3E20yd+Oty6D/qkf0SNjLfGBozgbPBa9vGmp8Fq5Pxfl/lz0rN+h2pSUGK1HNCapGzJTBe7aVCo9WzoVx8/HC0Pr4Sgv/IQi4VeqGhFlAGSdbsF4dC1iaRbmiztr1A26lsIEEDb0UQpObaEk4QDl6edRR3RoMG6bEQ+Tl3CUS/t+ocstE5rF/X6NAWPu5vK54xz840dG3DMRqcyxcgCuFCYX/yWa1jvZxf83Nnyxkt2/b0CQSHjqtaVEtGhakVOA5AsnWfPWU4gWC91uvJOBd05yOpbFbGL7h3PQl5cS0KIDfe6t24a3KZSe20550mEEqZzQ0U81KZbl9HqoKABNMJJOjhcfveaU0fs7KcoACBKudH2anJa3IyASd34xkem/ghPN0BqrNVLvFEQzXpWptMzbQd/EZdxxbDx3HJ9A38vvE12wD5WpDKPUjTTfvuyPeZrve33L9o5vcSlkjEOCjLo8ldZJaxl4cAr9Dz9By5QfcNflYpK6kR85kvgBizk9Yi0Z7R9rFkHGz0NRV5ARRaTpR3H/eTJuexYiqcjD4hFA1aDnqLz9479VkPGSmUn+chal53chSOVE37fQbkGmIcpyktm7fDpGXTkBbbrTb/Iim4V9of75Xzy2m+1fLQVg5GPP0bKTc2LntfttMhr4fPmb1nh3PNgsf6dcuHDh4v8Sex/6WnXoxr0zXwFg63efcGzXpsZjq+t3gAS07MBNs5cjU7qRdeEoW5Y+iVFfVWec39X5CYJAxIgpRI62pnZn7/2KlJ8XIVosdY7R9BhHwF0LQarAfHk/+h9nIerK6oxDEDB0upuKWz7A5OaHoiyN8K2P45G6q85Qe4vzNnQ/taoQDkdN5Nuun3EociKlymCU5gq6ZK/n3tOT6JX2OW6GYrvO4ygBGmWTH/BFiZRyH+vaUFN0rkmxDG2t6wR5yl6EqsavWZC7Ie9q7QBmPPoVolj3fYerbpmuIwHI2PZJo3H9W3fBr2VnLCYj56464ZuLzn2HofH2o6wonzOH6n6mXLj4X8LllPkXcGjXH3z/qbU+w2NPvUSX3s51RKpOaWEeH786DaNeR/tegxkz+cUm7Wif/uNLsi8eR67yYMSMxUhlTSs8XB2LyUDmJuuDY+DgR1H6RTgdSzTpMR+zfqlI+06qUQzNXlTF1rbMel/769DYRJCQHDeLSpNAy7QNdL6wjMiMTWQHDSbPvxcV6ggsEvvm16hjRrSg0WXjV56Iv/YSfuWJ+JYnIbfU3KUzCzLyNW3J8e5CtndXCtRtEG1YYBvDozyN4Nz9BOfuQ1OR9ld8iYLSoF4UhQ+hOLgPooP1Z+rDpisGQLQgTT+C4uz3yLJPWX+l8MAQ9wCGDneArOHzN0WMAVAbCkla8yy67EtIFG5EP7gYTauGBaDq1Ce4lWZdZveyqejLS/CJbMfA6cus3c0cIDPpHD8umQOiSPcRd9Fr1H0OHX+N6vd+0/dfkpWWjJePH3c95lgalQsXLlz8U7E3nanXjbeSm5HM9h8+47v3XiMooiURrZ3fwAmKiWPk0++zZemTVsfM8tmMeGppnb/31xwzACED70PqpiZ5w0Lyjv6MKFpocdtzdVyU7m2HEPTg++SvexZL9nl0PzyB6o53ETzqdgI0B3eictznyLa+jHvuSYIPzqekMJ7CuIkgrdk1yV7HDNTvQjJK3TkffAvng8YQVXyErlnf4195hc45P9E+dxMXA4dzOuQOKhUNdyayh+Z2WpR7x+BdcAJ3bVrjg23gf3U+Fv8YzP5tkBZcQpZ2EGNs4052WZc7MB77FrEoBUvqMaTRttcbYcMeo+DUFkoTj1CRdQmP0DYNxm0z4iEOffQsF/dupPvt0+o4tuyldgqTTC6n7013sHXdJxza8iNdBzqeyu9yy7j4r+ASZf7hZKRcZuWCeQDcfO+jjLjduQen6lgsFta+M4fy0iLCWrblsReWU252/qNQpS3m+M+rAOj/0Fy8gqOaPMfq5Bz7DZM2H7lXIIGDH2n8gAYQkw+Crgw0QUjaOv7HH0CUuyMYKxHMtm3HDiEI5HZ/CpNcTavkb/EuS8S7LJF2iauxCBIq3CMo07RAq26BVtOCco9ILIIMgbqOGg/MGEpy8NDn4aEvsP40XP2pz0durrvDZpSoKFa3JF/TjmzvLuR5dnQud1sU0ZQnE5R7gOC8/agrMq6/ZBFklAb1oChsCMXBfbHIm14H6Rr1ijHGKuSX/kBxfgOSMutcRIkcY/ux1qJ5DdSNuR67iYKMPOcMl757HnNlKTIPX1o8tAT3RmzC1alPkClKi2fPsukYKkrwCm3N4Cc/RO6mrjeOresoyEzm6/nTMOgqadG5D6MnzmtymlFuVjrr13wAwP1Tn8Zd3fR6QC5cuHDxT8FeYWbMwzPJSk7kwrF9fDp/Fs8s/xa1V/1dAxtKY4K/hJk/Fs8gO/4YOz54jhtnvoO0VtfN6sJMYI9bkMiUXP7+NfL//AUsZlrc8Xyd2jGqyC4EPbKKvK9nYi64gm7dDJR3vovEK7TOPEQ3H4y3LEN37BNUp77C++KPuOWeJK/v8xi8/0rTsacz0/VrbyxFTJCQ6tuXVJ8+RJQep2vmOgIrLtEhdxNt87aQEDCC06HjqFTUFZLsobkf5v3VSkxy63eftFqtPGcxhve2ijJZJ+0SZQSlGlmHUZhOrsd4akO9oozKNwy/jkMpPLONnP3f0erulxuMG9i2N+5+IVQWZnPlz220GeB4k4v66D38Nrau+4RLp45QlJfdaPcyFy7+q7hEmX8wlRXlvPvCDPRVlXTo1pv7pzzdLHF3rv+UiycPolC6Mf75pShV7pQ3oS7JsZ9WYqjU4h/VlraDbrM5xtl6MqLFQsr2zwEI6Hc/EiecLb4eSooqrlb+v7gNAEmbGx1qgV0ds29rJJUFKIovo/e3/yG7XgSBwrhJJEfeRnjWVnxK4vEvPI7CVI6mIhVNRSqwu8mnMUkUFHu0pEDdhkJ1DIWaGMrcwhGdLESHKOJZlkRw3gGCcg/gUZV1/SWLIKPArxvayCGUhPTD7ERB5PqoV4gBBG0Oigs/Ib+4CcFQYZ2mQo0xdgyGDrcjqhuv7t9UMUYURcwnfyB964dgMeMW2o7oBxah8La/A1F9gkx+0in2vT8To64cn6j2DH7iQ5Rq73rj2LqWssJc1r42mcqyYkJatefe55Y7nMd9Pf7VeYqiyOrFr2LQ6+jQrTeDRzmeFujChQsX/3TsEWYkEgkPPfsW7856gIKsNL54+zmmvrECqbT+JXdjwkxgq04Mf2opW5Y8QcbZg+z66AWGTluARFYzZnVhxr+LdePp8vevkX98E2ajnlZ3v4Kk1jwUgS0JGv8xeV/NwFSSie676ahuextJUKyNi5Oi7zUVc2AHVHsWoiy5QviW6RR1fpSS2HFQbV1lr2sG7BFnBGvdGa/uhJadoWvWOkK05+mQ9zux+du4GDiC0yF32iXO/F2uimtilFlm3XhyRpTxrzU3c2hXOLX2utPXHmRxt2M6uR5L8iEsJVlIvOsKbADBA+6l8Mw2Cs9sI2LkNBSe9deKESQSovveyoXfVnFxz8/NKsr4h4QT07kniWf+5M8dv3DTfVOaLbYLF/8mXKLMPxRRFPlowTyy0pLxDQjiyVeXIJU1/e1KvXiGXz+3pgLdOe0FgiNbUdgEQaYkO4Xz278DoN/9zyJxUuioj4Jzu9EXpCJRqfHtaVvwsRdRp0VMPgCApO1NTscx+7VCnnEYr4pUtE2aUU08fQJIVtxFMoAootIXoNFeQVOegmd5MhptMu6VWQhcyxP+y9kgIoAgoFf6UqUKpEoVQJHUn0qFPxWqQCoUAWhVwU6lIlVHsBjxLT5LYP4RAvOP4KbLv/6aWaIg3787FRFDKA7ujaUZhRhoQIwxlCNLO4wseTeytEMIV/OozV4RGDvciTFmBMgb7ybUVDEGwFxVRvnmBZQl7APAp8sowm+b51CnsPoEmczTezj0yVzMRh0BMd0Y+Phyhx0yldpS1r4+hdKCbPxCo3nwxY9Qujn3PlV/P/Zv+40zfx5ArlAw6ZnXXMV9Xbhw8Z/FHmHGXe3JhBeWsPTph7h0+gi/rlnObRMb3lhrTJgJie3G8CfeZduy2aSe2M3uT15myOTX64gstYUZiUxB0ncvUXRmOxZDFTH3v4lEXvP7Qe4TZhVmvnkKY14Suh+eQHnz60ijbdcZM0UPpCKwA9JdC/DIPITfqY9xzzxEXp/nMKn/cjo4IsxATcHE5j0WBLK84sjyiiOk7AzdMr8lRHuBDrmbiM3bRkLgTZwOuYOqWnXv/u70lur1dCwy63pDYmq6m9oU1BFRkCIpz0HQ5iBqGt/ckfhEIInujSXlCKYzP6EY9LjNceqI9miiu6BNOUXuofVE3NRw96PI3qOI/301eUlnKM68jE9YK6euqXYKE1jdMoln/uTIto0Mv2dSg53LXLj4r+ISZf6h/PbdZxzZsxWpTM6sN5bj5eOcNbM6uspyPl8wG4vZRJeBI+k78q4mxzz03RIsZhORXQYR3rH+avbOIIoiaTvWAODfexxSB7ok2cKStBvMRgS/Fgj+zn2ZgNUpAyAtTLreJrvZEQR0qgB0qgDyA5zvNAU0uTuTzKgloOAYgfmHCSg4jqxaGpRJoqQ0uDfFYYMoCep1fTHSXNQnxAhVxchSDyBL2Yc06wSCxfTXnMJ6YOg4ztpCUrDvi705BBl95jmKN76GsSTbWpB6zNP49brDIYGiPkEmae96TnyzAFG0ENKxP/2mvINMUf+9tnU9Bl0l37w1nfz0JDS+gTz08sd4eDnXwa36+6ItLeaL994C4M5HphMSEe1UTBcuXLj4t2CPMBMaHcMDs95gzYJn2PXTlwRHtaLP8KZtLoV16M3QGW+z4/1nST66DUSRIZPfaNAx49txCG0eWsSlr+ZSknCAi188TZuHFiFV1kwllmkCCB6/ivwf5qJL/hP9xrkobpyDrIPtzpCiuy+m0YvIO/0z/idW4JZ/lojNkyjq9CilbW677ppxVJi5Rm0hpfb9zvbszCZNJ0LLTtM981uCyhPomPsr7fK3kBI2hsSoceiVTV87N0btAsfmq+sgR50ytV0yAMjdMQfEIsu7gCz7JEaNfV065XF3oE85guncJuR9JyDIVTU6MF0jeMC9VlHmyE+E3jAeaQPrCpWXP8Ed+5F9Zh8X9/xMn/ubx70PENdvGOtXLqAwN5PE00eJ7drHoeNddWVc/BdwSZH/QFKSEvhm1RIAxj8xjzYdujRL3M1ffUBBdho+ASHc9+QbTd7NLspIJPnYdgRBQr/7nmmWOVanIusSZalnEKRy/Pve0+R4litW94IkdkSTrt3sd1WUyY9HUpzSLA/012goNcdZfD0U1/+zF/eKTKJSf6LH8XkM3fMAcecWE5K7H5m5CoPSl7yo0Vzq/TqnRq/ncq+XKAob3KyCTJ0OSqIFSWES8rM/4Pbbk3h8fSeq/e8iyziKYDFh9o5CH/cAFXeuoWrUO5gjetslyPiplU1PVzIZKNm9irwvp2MsyUbhG07rqWvw731nkwUZi9nI8W8XcvzrN63FGvuNZcD0pU4KMo+TcfE0KrUnD738Md6Bti3NjVH7M7pm+ZtoS4uJaBnDLfc95lRMFy5cuPi3Yc9DYJcBw6+nY3z/wRsknTvecMwGujFdIzJuAEMfX4hEKiP5z+3sWDEXs7Hu5otftfl5x/al7aNLkSjcKbt8nITPnsRUVdfrK1GqCbxvKR4dR4LFjGHrAoxHvkCsrzOkIKDscjvpoz6mKqAjElMV/idXEP7HFFR5Z64P81cr7e7OVB/XuiPV+M9ThTG8N4d7LeVglzcp8mqH1GKgVfpPDD/4KB0vrUKpL2zSeRvC1jVdF2Vs1PFzBnOI9RnAkRQmSXQvBK9Q0JdjTthW7zifdgNQ+oZhrtJScPz3RuNG97N2hEo6uBmTsfk2JBUqN3oOtdbMObD5h2aL68LFvwmXKPMPw2I288k7r2Axm+k1eDjDb7u3WeIW52Wz9xdr16F7nngNd03jhU4b4/JR6x/6yC6D8A1vXe84Z50kRRcPA6Bu3Ru5pukV9inLAUAItJEn7QAW39YYQ7sjmPV4bJ6NND/hHy/MXKO6QFNdqBEsRnwLT9H24scMOTiZQQcn0+7SavyLTiMRzVRqoslscz/nB7/PqZHfktJ1FiUhfbHInKvAb4trQoyfhwIsZiQFl5Cf/R7V1hdQf3UbHj9NQnVkBbKcMwiImP3boO8xkYpxX1A57nMMPSdi8Ym271zNIMYAGLITyPlsAtqDa0G04B13E20eX4t7qGOfMVuCjK6skN1LppC0ex0AHW+ZSs+HX6m37XV96CrL+Wr+NFLO/YnCzYMHXlhBYGT9/14d4dCuPziw7TcEiYQpc+Yjk/99n10XLly4+KdhjzAz8v6pdBkwArPJxGdvPk1hbmbDMe0QZqK6DubGmdZOl2kn97Bz5TwsJlOdcdWFGc+W3Wg38T2kbhrK087VK8wIUjl+t72CZ7+HATAe/BTj7uWIFnO98/EOaUHWsKXk9ZyNWaFBWZpM2I5ZBB5aiLSq6Pq4pgoz9SII5Pt1Z1/3JTbFmU4XV+BWldusp6zvWoSr90litt+lbNMlcxXTVVFGmnve7niCRIoszurKMp39tcFxwf2tm545h76vX3y7SmDbXrj5BKGvKCX1xB6751MbW2l6/UZZ3ftnD++mvLSozusuXPzXcaUv/cPYtvE7ki6cxs1DzaNPNa1NdXV+/+p9TEYDrTv3on3Pwc0SM/n4DgBa9hjWLPFqU3zpCACaVj2bHMvXQ0lO5dXdEnfnUjauIwhUDnsd9c8TkWqzUP88kao+MyF6LDTT++XnoWhSrZ9GEUVU2jQ8C07SOv8UXvkna1htLYIUrX9nSoJ6UxLcG706/G+ZxjUBSqgsRJJ2CWnBJaT5CUhzz14v1Ht9yjIV5qCOmCJ6Y4oeaFfR3hrnasbFoMWop2z/GrRHvgWLGZmHL+Fj5+LV4QaHY9kSZApTznPgo6epKs5FpvKgz2PzCYsb0mis2tdYqS3hq9enkHX5PEp3NQ++tIqI2DiH53g9frW5lhTm8+m7rwJw24OTiengfFwXLly4+LfSWCqTRCLhgVmvU5CdTsbleD59YxZPLv4cpar+ToSN1ZcBiIjrz41Pvsv25U+TdnIPu1a9yA1T59usMQNQqNWjjuhA+0kriF89g4qMeOJXz6TdhOXI3Gtu1AmCBJ9hjyPV+FO8ZQmmUxsQtXkoRr2MUE+NNH9PN4YiX50AACAASURBVApaj6EiYgC+pz/F8/LvaFK24Z55kJJ291IWcysWhdqh7kwOc1WcyfftRkDRCdomf4VvaTwtM34hOnMTGcFDSYy6m3KPCKdP0Ziw5J+5E4Ayf/u+ExsSZAAsXpEASMpzQBTtXmfK2o3EuG8VltwELMXpBEXY3owJ6D6a9C0r0eWnUZ56Bk10/fMWJFIiet7Epa1fcvnQZlr1dq6LqS1Co2OIaN2e9KQLnNq/nQFj7m622C5c/BtwiTL/IArzcvj2atrSfVNm4+vv2ENnfeSkJXFk2wYAbn3smWYResryMylIiUcQJER3c/xBtDEsJiMlV6w2X3XLHk2OJ1pMUFkCgODRdNeN6O5H+Z1f4Lb7TRQpe3A/uJTIzD/J6DkHi7LpLiRoZmFGFFFWZOFZcArP/FNoCk6j0BfXGGJQ+lAa1IuSoN6UBnZr9kK915BWFeJXccUqwBQkIim8hKSyrr1YlHtgDu6IOTgOU0gcFv824ESh4uYUYwB0yX9StPkdzCXWblPenUcQdvOzyDzq74JUH7YEmeSDv3Ds6zexmAxogqIZMH0JnsEtGo1V+zq1Rfl8+dok8tOTcPf04cGXVhHaqr3Dc4S67i1RFPlk8atoS0uIjmnHuPHTnYrrwoULF/8FGhNmFCo3Jry4lHdn3U9m8kW+WfoK4+cuanA9Zo8wE96xD8NmLmL7+8+ScmwHez6RMnjSa3WEGfirzox7SGvaTfyA+E9nUpl1kfjVM2k74T3kNr7DPHvdg9TDj4KNr2G+vB/9D0+gHLsQwcP25pa/RgmaQAp6zUbbajT+x95DVXQRvzOf4h3/HWUxt1IaeydmlY/TtWbsoro4U3ySmJTvCSg+RWT2NiKyt5Md0J/E6Lso8bTf1WqPy0dqLMcvay8AuZGjnZ5+dSwe1q5IgkkHBi0oPe06TnD3RhLZHUvqUcyXdkI9ooxU6YFf5xvJP/YreUc3NijKAET0HMmlrV+SceYgFcV5ePgEOnZBDdBt8EjSky5wYs9mh0UZV10ZF/92XKLMPwRRFFm5YB5VlRXEdIhj+K1Nr6FyjV8/X4posdC5/3BatGue+jTJx607ASGx3XDzbKLzxAZlaWexGHTIPXxQBTU91cJSXgSIIEjB3fGHZ1uISk8qRyzEdP5H3A4tR566n6iCS+R1nU5F+ABwMM2kOZGYqvAovoi6OP7qz4sodAU1xlgkCrR+HSkL6EJZQDcqvGPsLoxrL4KxAmVhIsqii6hLEpEWJCCpyK8zThQkWLwjsfjFYPZvgzm4Exbf1jXaazpCcwsxAObyQkp2rqDy3BYA5F6BhN0yB692zjnPagsyJn0VJ9YtIvnAzwCExg2m96NvoHDTNBqr9vUW52Wy9rVJFGWnWYv6vvIJgRHOFbe2lU63f9tvHNu/A6lMzvR5C11pSy5cuPifpzFhxjcwhMfmvcuH8yZxav9Wtv/QluF3T2g4pj2Omc79Gfb4QrZ/MIcrR7YCAoMnvdq4MDPpQxJWz6QyO5H41TNoN+E95Oq66zmPDjci9Qwgf92zWHIT0H03FeVti5D4Rdc7J3+NkgLakjn8fdSpO/G58C2KslR8LnyL18Uf0bYcTUnbu/BXW7sJ/a3ijG838n274VOaQEzKOkIKDhGav5/Q/P0UebblSsRYsgIHIEpsr9kcSbkKyNiO1GKgwrMl5d6NCz6NuWQAkCmxqLyR6EqQVORjsVOUAZDFDsWQehTTpd0wbHL98+55K/nHfqXo3E6ibpmFrIF1hyYoEr9WcRRePk3i/t/ockvz1ZLrNmgkv3y2lMvnT1CUl41vYEjjB7lw8R/BJcr8Qzi8ewtnjx1EoVQxfd4CJNLmaS2dn5nKmQPbECQSbn5kVp3XnXViZMX/CUBUtyFNmV69aNOsubPerbohNENrPPFaKoxECmYjyJrpoV0QrJ1+gjvjvv1FpKVpBO9/FZPKB11gZypD+6D3jcXgFeWcy8MOt4zUUIaqPBM3bSrq4gQ8iuJxL0up1jrbikWQUe7bDq1/F8oCulDu0xZR2owP06KIrCIXZf5ZVHnnUBZcQF6WjkDNHGWrABOFxT8Ws79VhLH4trKrbXVD/B1CDIBo0qM9+j1lB79ENFSBIODf526Ch09zuiNYbUGmMPkshz97kfK8NBAEOt48hfajJzX62bd1zRmXzvDtghlUlBbhHRjGw6+uxjfYOau2LUEmJyOVT5e8BsCdj0wjqnXTajS5cOHCxX+FxoSZVh26MW7q86z74A02ffk+AaGRdBkwvOGYdggzkV0GMXTaAnaufJ4rR7YgWsw2uzJBNWEmqCXtJn1I/OqZVOVcJv6TGbSd+D4KTd2ORaqIOIIfXU3et7MwFWegWzcd5a1vIQ2vf6PPX6OkQKunvMVwyqOH4Z55CJ8L36AqTMAr8Wc8EzdSFdQFbYsRCOEDEeVuf584AxR7teVo3CtoylNonbqe8Nzd+JYl4Hs+AV3ix6SEjSElbDR6pVWYcqb+TVCqtVhubuSoRtOM7BJkriJ6BICuBEl5nnW9ZCfSVgNAIkUsuIyxIBW5f5TNceqIDrgFtaQq9woFJ/8guF/D3Vmj+t5M4eXTXNq3kbgx451ap9tqje3tH0Srjt1JOnuMk3v/YNi4Rx2O68LFvxWXKPMPwGwyse6TZQDcev8EQiNbNlvsU/utu/pt4voQEtU8xT0BDJXW4nBq3+AGxzlb5Nd8taq7zN3+HYGGkPpFIdEEYdHmIiYfQIgZ2ixxr2H2b4P2zs9RnfwSxcVfkeq1qNP2oE6zFkKzSJUYfFqh941F79sGg1cUFrkHFpk7otzN2rmotmhjMSExVhBkqUBbVozUWIHMUIqqPBNVeQaqCutPuaHM5pz0boGU+7anwieWCu8YKrxjm7UwL6KIXJuOMu8cqryzqPLPIqus64KxqIMxB7TFHNAWS0BbzP5tmizAXOPvEmLA6l6rSthFya6VmEuyAXAP70DYzc/iHtHB6bjVBRmL2ciFTau5sPlTRIsZN58geo9/naC2vRqNY+vazx/cwk/vzcNk0BMUHcsDL6zA08+5NEhbgoxBr2fpy09RVVFObKdujH1wklOxXbhw4eK/SmPCTL9R48hKSWTfb9+xdvE8vHwDaNG+6S7m6O43MGz62+xcMZfkP7cjihZumPJmg8KMW2A07Sev4MInj1OVl0z8x9NpN/F9FF51U1LkfpEEP7qa/O+fRZ9xFv2Ps5EPnoEs7vZ607CuCTMIEirD+1MZ1g+33FN4x3+Le85x3HNP4p57EotsOeURg3CLHk5VQCcKqiw24zUHWnU0Jzs8w4XWjxGVuZkWmZtQGYpom/wVbVK+oTSgOwWhQyhUDMSsaNypeg2PkkTUpYlYJHLyIxoW2hwRZMCawiQtTESw4TRuCEHliSSyB5aUI1TE78B7oG1XiyAIBPa6jdRfl5B39GeC+o5rMLUutMsNnPlxOdr8LLLi/ySsQ2+H5tUQ3QePIunsMY7v2ewSZVz8T+ESZf4B7N78E9npKWi8fLj53ub9A3RNlOky4KZmjWvQWZ0ncmX9heqagmi2dhEQnHCX2EIQJLh1HEnFoS+QXtqG2MyiDAByd3S9pqLrPhFp7lnMibtQFl1CWXQJiakSVcEFVAUX6j3cIlUgytwQJXIkxgokJvvbKRpU/ujU4VR4x1Du245yn3YY3ZqhY1V1RBFZeTaq3FOo8k7jlnsaqa5mXRpRkGIJiMUU3BlzUCcsge0Q3XyadRp/pxBzDV3KcUp2rcSYnQCA3DOQkJsex7vzyCY5t6oLMmU5KRz+7AWKU62ficheo+h+71wUHo0LkbXvgSiK7PvxE3Z+8x4AbXoM5s5Z76B0c+7fZ30dwD5/701SEuPRePnw1GtLkcn+71L0XLhw4eKfSmPCzB2T51Ccn8O5I7v5+PUnmPXulwSGRdcfzw63DEBUt8EMm7GIHR8+R8qxney0PM/QaQsaFGZU/hG0n7yC+NUz0RWkcWHVVNpN+hClT93UEamHD4EPfkDhL29QeWE7xl3L+H/snXd0FFUfQO/M1vTeC4FUegtdpIgiIjZQrCgqdlGxgp9iRwV7ARt27F1Qeu+hh0AIpPeeTbLZPt8fm0RKyiZsAujcc3KS7M6897JJdmbu/Iqt+AjqsbMQlE0fNxoEhF3OCNQF96cuuD/K2iLcM1bikbECdU0enhkr8MxYgU2hJSSgJ3WBfSn06EGtd2yzqUWng1Hjy5FuN5AWdQ3xuu2EpP+CZ8VBfIp34lO8k+h9b1AZOJCKoKFU+fXF6BaKTXHisVe01OFVtg/v4l3459mbX5QHj8Cibr62YFuFDIDNzS7JxNriNu+rjBuDKXM7+kNrmpUyAP4DJpDz9/vUFaW3WvBXqdYSkXgRGRt/JnXDb06VMn1HjOOHhfPIS0+lKCeDoIjWa+rJyPwbkKXMGcZkNPDjp+8CcOW0u3BxdXfa2OXF+WQfOYAgCPQZ0bK1bytmg71Tj6qF7gGng2Q1AyA68aJP23sitVs/x3hsE4GCnkqpY9aOQok1tD+E9ie/xgiSDVV1Hpry1HpJk4qyphDRUodo1iPY6n9WqwmaaKFoU2ixqd2xqdywqj2odQmhzj0Mo3s4BrcwDO5h9kibjvhR9KV2CVO0F5eifSj1J54QSAo11sAeWIP72D8CezgtCuZ4OkPEAJgKj1C1dhGGjB0AiGpXAs67gYCRN6FQt//nOl7GSJLE0XXfs++nN7GaDahcPUi8/kkiBzkmTk9+LUwGPb+9+xQHt9gF7NBLb+Kimx9pdwpkc0Jm4/LfWf379wiCwMy5C/ANcE4hchkZGZl/Iy2JGVGh4ObHXubd2beTdSSZRU/fy0OvfYGH96mpQ43jOShmIvuNZNz981n9zmNk7V7H2kVzGHPXS82KGYAywu1i5pOZGMtyOfTRvc2KGVGlxf+qF6gO7UHF6nexHlyGsSIXzaQXEFqo2dcYNVOPxS2Iyl43UtnzBrSlB/HIWIFb7iYUxip7FE3hLvywnwMZ/HtQ5t2Dar/e1HjHn3bq9YmpSRpKPS+gNPwCtDU5+Oetxz9/LW66dHyLtuNbtL1xS6PWH4NrCEbXYDR1RXiUH0SU/mkVbhXV5MU0X6C2PUIGAKkhcqjtjToCe40md8XLmIvSsOorUTTzO1Jq3fHtPZbS3cso27ey1YK/kUMuIWPjz+Ts3YjFaECpcU4ktpunN3F9B3F491ZSkjbJUkbmP4MsZc4wy39ZQnlJEf5BoVx4+bVOHXvfphUARPdKxNPHuVETHS1lbA2RMk0UqmsvqoBolMEJWAoPU3dgKb5DbqS8tuPyl8F+AV1WY8TsGYHZM4KaqHGnbmQ1/yNoLHUINrM9tUnlhk3t3mwtmvKOaJlts6IpTcE1fzsu+UmoqzJOeFoSlXYJE9Ifa2h/rIHdwZl1aY6js0QMgLk0E92mT9Gn2O90CQolfoMnEzj61iYLH7aF44VMdVEWSV+/SHGqvSZTUPehDL75WVwd7F5w8mtSXpjNd68+RFFmKqJSySW3zSFxfPvbSDYnZHIy0vhowVwAJt9yD30GjWj3HDIyMjL/FVoSM2qtCzPmvs0bD0+jrDCXj56dyX3zPkatbf4GgKNiJqLPCMbNnM/Ktx8hc9da1n7wZLOpTFAfNUMIPWa8R8pH97YqZgRBwHPYDagCulHy85PY8vdj+OYONJe/jOjffAr+yWKmfjAMAb0wBPSiZNCDqKuy7NG4xXtxKd5vlzRFu3Et2g2AJKqo9o5D59+XysBBDjcpcKRGjME9gtz4G8mNvxGX6iz889biXpWGZ+k+lJZaNIZSNIZSKD/wzz6uIVQGDKAyYCBVAQOajZJpt5CBxg6Vkmvz0q4pAtw1gAalXxSWskyMOftxjT+/2e39+oyjdPcyypPX0mXSQwgtNFvwjojH3S+EmrICcg9sISrReRHo8f2HcXj3VlL3bmPMlTc5vJ/cgUnmXEaWMmcQm83G3z9+BcCU6fei1jj3jST9oL2ldK8hHZCqU4/V3AFiABDrw2BNutJWtmwbLn0uo7rwMNWr30bQeODb7/IOFzOtolBhU6jaVFEf/rmAPt222aJRh0tBEi5523EpTEJhqml8TkKwpyOFDsAa0g9rUK8OiYRpoDNFDIAxP4Xq7d9Sd2gt1Bck9u47nuBxd6HxDT/t8RuEjNVs4tDfn3Lo70+wWcwo1Fr6XDmT2NFTHUqHaq5+zO/vz8Wor8HN249rHn2DLt0HtGudzckYgLLiQuY9cgdGQx29Bg5j8s1y+2sZGRkZR2lJzHh4+3HXc+/xxsPTyDqSzBfzZ3PrnNdajHR0VMyE9x7OuPvn17fLXsNaqfmIGWgQM4EOixkAl5hhhEz/hOLvHrEXAP72btQXPoYy/oJm13VCOtPJCCIm766YvLuii7sCJJtd0pTsR1u8H5fi/SgN5XiWH8Sz/CDhR5Zg1XijDxlEbdhQ6oIT7TeznECdRxdyEm6xfyNJKM06tLUFaGvz0erzMau9qAwYiNEttNWxTkfIAAh1dilja4OUCTjuvEEb2ZeaskyMOftalDKe0YkoXDww15Sjy9iLV/TA5tckCEQljiF5+RIyd61xupQBOHYgCYvZJHd4lPlPIEuZM8jh/bsoLcrHxdWNEeMmOn18XYW9IJhf8OlfXJ6Mf5cEassLKU5PJiS+6QvB9hb5BfCNH0bWig8pS9lI0OUWp0XMuA64CnNhCob9f6Jb+hy26iJ8zptBhb5j5BL8Ey3TYeMfd0HtkKCRJNQVx3Ap2IFL/k40ZYcRpH+K6kkaTyzhg7FEDMESPgi0zedGO4POFjGSzUrdkU1U7/gWU+4/d7s8u48meOztuISefjeh46NjilJ3suvrF6kuygIguMdwBl4/G/cAx/4vT359zCYjKz6bz86/vwUgIqE/U2bNx8u/5aLbzY7fgpCprdYx79EZlBUXEBrZlQeffd1pneFkZGRk/iu0JGYCw6KY8fRbvDfnDg5sW8t37z7P1PufRmxB2LcpYua++ax691Eyd61lzcLZjLn7JRTNpIa3R8yoAroSfOtiSn58AmPWbkzLnsWasQ312IcQ1M1HUzcZNXMyx0ua2MvtDQZq8tAW7cO1cCeuBbtQGCvxyFyJR+ZKJEGBPiSRmi5jqQ0bgeSsm0iCgEXtRY3aixqfBId3O10Z00BbI2UCTjpv0ET0o2bPbxhz9rU8j1KFb8/R9vbYB1a3KGUAfHucD8uXkL13E1azCYWT5EloVCwe3n5UV5aRcWgfsX0GOWVcGZmzGVnKnEE2rfwDgCGjx6N2Ui7m8ejK7VEmnr5OLvgKBEX3IWvPOoqOtvwG3168uvZF5e6DuaaCmoxdeMQ4p4iYoFDhdekzKNwDqd2ymJoNH2DVFeMz4Qkq6qytD9BOOlrMNM7T3AW2qRZl3i4UOdtQ5u5oPMA3YPXphiVyKNaIofa6MC2ErDplnZ0sYgBsRj21+5dSvfP7xm5KgkKJd9+LCRhxPS7BsU6Zp0HIGKrL2ffjG2Ru+xMArac//a95hIjEi1rsanA8J79OZflZ/PDawxRm2AsQn3fV7Yy57j4U7ZSWLQkZk9HA/Nn3kJOehrdvALMXfISHl3OLNsvIyMj8V2hJzHTr0Z9pj87j05cfZduKX1AoVVx9z5wWjxUOi5m+I06sMbNwTpvFTMoHd5Fw61u4BEY1uY/C1YugG9+hasNiqjZ9ivXQcgz5yagveQpFcI9m19Zi1ExTCAJmj3DMHuFUx0wEqxltaTJu+Ttwzd+GWpeNW/523PK3Y1No0IcNo7rLGPQhQ0DReYXpnSVjAJBsCPpywLFImZOFDIAm0l4fxph/CJvZgKhq/prDt/cFdimTvI6oSbNavCnq06UHrt4B6CtLyDu4nch+I1tdnyMIgkBcvyHsWreM1D3bZCkj859AljJnCLPJxLY1fwMw8qLLOmQOXYVdynh4O1/KBMfa3+AL0/Y6fWwAQVTg32s0Bdt+wZi20WlSBuxv9h5j7kXhGYhu+avU7f0Fc0EKHuMeojagj9PmOZnOEjMA2Cwoig+hyN+NIm8XiuIUhOOK0UlKLZawgVgjhmAJH4Lk7lhNk9PhTIgYAFNxOvoDy6jZ+yeS0Z6apXDxwm/IZPyHXI3K0zn/Hw0yxmazkr7pFw78+i6m2ioQBGLOv5reV9yH2tWx9ppNdVfat+53ln30IiaDHldPH66cOY/YAee1a60tyRgAq8XCW888zKF9Sbi4uTN7wYcEhjg/4k5GRkbmv0RLYqbviHHcOOsFvnrtSTYv+x6lSsWVMx51jpiprzGz6u1Hydq9jjXvz2bsPfNaFDN4RMCM9zj0yUwMJVn1YuZN3MKajhQRRCXeo+9A220wpb/OxVqVh/G7e1ENvx1l4nUILdR9cShqpikUKgxB/TEE9aes/52oqrJwz16Le+Ya1DV5uGevwz17HRatL7roS9BFT8Tq1rHnO04VMoBgqGo8f5Ncmq9x15SMaUDpHYrC3R9rTSmm/ENou/Rvdluv6IEoXb2w1FagS9+NV+zg5tcmikQljiVl1XdkJq1us5QpqTEQ4N60IEroP8wuZfZu5dKb72/TuDIy5yKylDlD7N22gdoaHT7+gfTo53wDbKyrxVRfjLe5SJnTqUUSFNMHQVRQU1ZAdWk+Hv6t59S2Ff/eYynY9gsl+9fgO+5+RJVzD3SuA69GdPen6o+5WIpSqfj6LtRRg7EmXIIYfT5CC3cSzkaEmmKUudtR5GxHmb8Hwaw/4XmbV4Q9JSliKNbg3h1WoPd4zpSIseiK0R9ajf7gSsyFRxof1/hH4j/8enz7T0RUO+/32yBkio8ksef7BVTmpALgHR5H4o3/w69rb4fHOvk1q9VVsPSD50nZai/cHdljIJMffKVD0pXALmQWvfIkSZtWo1KreWze+0TFdm/XXDIyMjIyJ9KSmEkcMxGL2cQ3bz3D+t++RhQVXH7brFbFDNCqnAnvPZxxMxew6u1HyN6znjXvPcHYe19uVswAhIRHINy5iNTPZlGbe4hDH88k4dY3cY9oPvpFG9mP0Du+omzpy/a22Zs+wJq1A/XYWYi+XZrdr81RM01g9upCRe9bqOh1M5ryI7hnrcE9aw1KQzm+B7/CJ2UJ+tAh6GImoQ9OdFpUsLNFzPEoCvcD9W2xm4n2aUnIgP1mpDqsJ3Wp6zEVpbUoZQSFEp+eoynZ+RsVhza1KGUAogaOIWXVd+Ts24xkszlUJ88RYuqjY3KPHsZqMbf4dyoj829AljJniAO7tgIwZNRFHVKjwWrtuFQcAJXWjaDoPhSm7WH/8q8YccNjTp/DJ24IKjcfTLoScn9/hYirnnI47cNRtPFjUIf3o2bjB+h3/4wpcwdk7sCqdkWMGYPY/WKEsH4tVqBvC06LlpEkxMpsFEUHUBTuR1GUjFhdcMImNo0n1tABWMMGYgkbiOTRdD54R3AmZIxVX0Xd4bXoU1ZhzN5HQ+FeRCWe8efhl3gZHnEjnHbCAP/ImJqSHPb++CZ5e9cAoHL1oNeku4kZdTViG1KLTn7dDm1fzZ+LnqW2qhxRoWT01Hs478rb2vWe0ZqMATAZjbz93CPs3LASQRR5YO7r9Ojf8gmZjIyMjEzbaEnMDL3oSmxWK9+9+zxrf/kCURSZNP3BVs9/HImaCe89jHEPvGYXM3s3OCRmgoODEG9/h8OfzqImaz+HFz9AwvQ3cY/s2ew+otYD/6teoKbbYMr/WoAtZw+GL6ejTLwO1eCbWrzp5Qw5gyBg9IvH6BdPWb8ZuOVuxivtd1yK9+KWtxW3vK2Y3UKoirsSXfTFSCq3dk3TkTKmAXXqMgDMMad272xNxhyP0tMeIWStab2Bhnf8UEp2/kZV2vZWtw2K6YtK64ahppLSrMMEdG1e2LUFn4BgVBotZqOB8uICAkIjnTKujMzZiixlzhAZR1IAiOnRt0PGd3X3xM3Tm1pdJSX5WYRHO+dN8ngGXnEnS+ffRfLKJfS5+CY8/Jx70a9QaegxbR77Ft1Dxe4/cAmNJ2DYVKfOASC6+eB58RO4DrmRugNLMRxYirUyD1vKUmwpS0HlihDSCyGkF2Job4Tgngia9lf3b7OYkSQEfRliRSZi+VEUhQfsEsaoO3EzQcQW0L0+GmYwNj/H2kQ6i04v2GsxYsxNxpCZhDEjCVNhKhxXsNgtqj/efS7Cu9c4lG7eTp/f102Nqa6alKUfk7ZmCTarBUEQ6Xb+ZHpNuguth+OttE9+7epqqvjrk3nsX2+vRxMQEcOVM18itJ3/x44IGX1tDQvm3MvB3dtRqdXMnPsag85vooW7jIyMjMxp05KYGT5hClarlR8XvsTqnz4DcJ6Y6TWUCx94jZVvzrKLmVZSmQAC/X1h+uukfvYI1Zl7Obz4AeKnv4FHl+ajQAVBwKP/5WijBlGxfAF1aZux7PgS6+GVqEbPRBndcvqtU+QMgKikNnIUtZGjUOmy8Tz6Jx7py1HVFuC/5318D3yGrtvFVMVdicXDsajvzpAxAIK+DGXONgBM8Sc2BGmLkAFQuNuj5h2RMp7R9igiQ2k2xoqCZos8A4hKJSHdE8nes5685G1OkzKCIOAXHEZh1jFKC3JkKSPzr0eWMmcAm9VK1lF7oc6ucc6XJQ0EhnUlQ7eH4tzMDpEykX1HEpqQSP7hJJJ+fp8xM553+hy+8cOIvuxBjv32OgXL3sAlKBr3bolOnwdA6ROOx/l34j5yBuacfdQd+BNTxg6sVflI2TuQsndgv+QXEPyi7KLGLxrBIxDcA+2fXX1bzJtu4BQxI0lgqkUwVCDWltgFTEUGYkUmisosBGP1KWNICg3WwO5Yg3pjDe5tL9Crbt/dnvbSmSLGZqrDXJqJMWs3hswkTDn7kCwnpuCpgmLx7z8B794XovZuX3pPa/i6qbFazKSt/ZaDf36AsaYSgOAew+h39cN4hUa3abyTX8O0oWv4fwAAIABJREFU3Rv5/f25VJcXI4giI66Yzuip97a7JaQjQqaqoox5j8wg40gKLq5uPPry+/Ts77w6TjIyMjIyp9KSmBl56VQkycZPi15m9U+fUaOrYOp9T7WaxuGImAnrOcQeMfPWw2TvWc/ahXMYe/e8Zttlg13M+N7/LlvfvZ/qjD0cXvwgsTe8iHfc0BbnUvmEEjD1NeqObKD0r9eQdIWYfp+DJWoIqqG3oAhpPuIGThQgpytozJ6RlA24h/I+0/HIXIVX6s+oddl4H/kZryO/oA8bRmXCFAwBfeAkAdZZIuZ41EeWIUhWLEG9sHnbU7/aKmMaULjbiwRba8pb3VapdccjshfVmfuoPLKNoCFXtrh9eO9hZO9ZT27yNvpNurVd62uKgJDIRikjI/NvR5YyZ4D8nEyMhjo0WhdCI6I6bJ7A8K5kHNpDcW5Gh4wvCAJDr53Fz89cz+H1v9D3klvwDWvbBakjRIyeRk1eKkVJS8n85gli7vgYbUCU0+dpQBBE1JH9UUf2R7JZsBQfpTJ9N1LBAWwFyVCVj1SWgVTWxOsqKsAtAMEjCLQe9kgVQUQQFCCK9d8rwGbGs64SS02ZvYiboQrBZml2TZIgInmGYfWJwhrYE2twb3skTCd2E2igo0SMJElIFhOSoRpzeTaWsmzMZVlYSrMwl2Vh1RWdso/o7oc2KhG/hGF4dBuEyqtjC/j5uCjJ3LaU5D8WUluaB4BHcFf6TXmIkF7ntSm9rqnaMcs/fZX96+1d2fxCo7ji/heJiG9fNJ0jMgaguCCXl2bdRkFuFp7evsxe8BHd4ls+SZaRkZGRcQ4tiZnzJ12HSq3hu3efZ/vK36iuKOeW2a+i0Tbfahocj5hpqDGTtXsdaxbOblXMKDWuDLvvXbYtfBDd0Z0c+fwRul41m4CBE5vdB+zni67xowjvOpiqjYvRbfsaW+Z2jJnbESMGoBp8E2LEgFaPoc6KnpGULuhiJqGLvhSXwl14pf6EW8EO3PK24Ja3BaNPLJUJU9D2HA/iGbpUsppQJ/8IgCnB3hCkvUIG2hYpA+AVO4TqzH1UpW1vXcr0sou54mP7MelrULu2P5r8eALD7CKqKCfdKePJyJzNyFLmDNCQutQlJqFD6sk0EBgeBUBh9rEOmyM4th9dB44lY9caNn3xEhMfXeT0YlyCIBB/zdPoizOpzj5IxuK7Cbn0Ubx6jHF6jZlT5haVqIITUHh0hb6TAZBqy+2CpvAgUmUu1JQgVRdBbRnYrFBdiFRdeMI4UjPjn/zbl1SuSK5+WL0jsXlHYfOp//CKBGXHF+ZtDkmS8BHrsOqK0OcVYa0qwqIrwlanA6sJyWJGslnskStWC5LVhGSz2qOGBKH+QwSE+kgiCZu5Dslk/2j4+vj0o6YQXbxQh/dCG5VIUI/haAK6dvjfAICPq4r8/evZ8dv7VOWlAfYW1z0mziB65JWIbZRjxwsZSZLYv/4Pln82H72uAgSBoRNvZOwNM1FrXNq8VkdlDMDh/bt546kHqCwvISA4lDmvfUJoZNc2zykjIyMj035aEjPDxl+Fh7cvn73yOClJG3lv9gzueOZd3L18Wh7TgQLA4b2HMW7mfFbWi5m1i+Yw5q6XWhEzLgy/7112fvY0ZXuXk/7jC5gqiwgdO73V47GodsHngntx7zeJovX21tm2nN0Yc3YjBndHOehGFN2GIbQiQk6OWmm3pBEE6kISqQtJRKXLJij9N9RH/kJTkUbQ1nnY9n+MqcdVmLpfhqT1at8c7USVtgJRX4bNLQCvfpcinOZNuH8iZRyVMoPJXfkhuqNJSFZLi62xPQLC8AqJoqogk9wDW+g25KLTWmsDQRHdACjM6ZibyzIyZxOylDkDVJYVAxAUGtGh83RJsN9hT9m5HqNB3+qdlfYyZOpDZO/fTG7yVtYsmsMF97yM6KTCuA0o1Fr63PEue9+bQW3BUbKWPI5H3AjCJj2KxjfMqXM1ha+bhvJa+0FfcPNFiBmFGDPqhG0kqwX0ZUjVxXZJY6q1SwbJZpc1x3+tUIKLN4KLD7j6ILh4U251PaPiBeqjVWpLsRWnoa1Mx1SYiqU8B6uuiHxL+7t1tQlBROkdgtKvCyq/yPrPXVD6RRIQENQ5a6jHx1VF0eHtrPr1PcozkwFQubiTMP4W4sZej7KN0uTk6Jjywmz+XPQc6fvtOeOBXWK57O5nCY9rX2t2R4WMJEms+PUbPn/rJaxWC5Hd4pi94CN8O/n1lZGRkZGx05KY6TVkNPe++CEfPns/WUeSefORadz13EL8Q8JbH7eVqJnw3sMZd/98Vr3zKJm71rLuw6cYfefzLRapF5UqBt/6Iql/hJK+8lNyV32ERV9F5KWt170BUPlFEn7VXCxVd1K04QssB/7AVngI0x9PgqsvyvixKBIuRAxKcGi85lKLmpI1zaYhecRiCHsE46DbUaf8hvrgz4i1JWh3foBm96eYu43F1PNKrAE9TkltcjaKwgO4bHsXANXA609byACIrnapZNNXIUlSq6+rW1gCShdPLHU6avNTcY84NYLW77jXskv/UewvyCR77wYnShn7TaKSvCynjCcjczYjS5kzgMlkv7hVazo2PzW2zxD8QyIoLchh9/plDBs/pUPm8Q2L5uIH3+Sv1+8nbetSVFpXRt32jNPnUbv7MvChr8la9THZqz+l+shmUt9KImjMbQScdyNiB7fLO17MNIWgUIJHkD11CcdbIDfgB87pzNQGJEM1toJkrEWHsRWnQUkatlp7vnFTCkZ090PpGYTCMwilVxCiqzeCQm0/YVCq6r9WIijU9a0mpXoZBZJks9fOqY+GEdRaRJUrgtoFQe2CqHZBULkgqLSN3a583c5MS21JkjBl7WLtso8pOboHsIvBuLHXk3DRzajdPNs85vFCxmoxs+W3z1j/wyIsJiNKtYZR19zN8MtublekWVuiY0xGAx+/9izr//oFgGFjJ3DX4y+gde3cekQyMi3x3nvvMX/+fAoLC+nbty/vvPMOgwc33Qnso48+4osvviA52S5OBw4cyEsvvdTs9jIyZystiZmu3fvy4PzPWfT0PZTkZ/PGIzdx65zXiO45oPVxWxEzEX1GMO6++ax65xEydq5CVCg5f8YzLd5gE0SRhMvvR+sdQMoPr1K45XusJj1dr3zC4Y6VSq9gwiY9RvHgmzDv/h5L8lLQl2PZ8yOWPT8i+ESgTLgQRfR5CP7dHKrZdzztqQMjab0xDrgZY9/rUB1bjfrgTyhLDqNO+xt12t9Y/eIw9rwSc/Q4ULU9mrU1lLk7cF0xB8FiQAjti9jXOefuVp39hrDCw98h0SWICtzCu1OVtp3a/CNNSpnjCe8znP3LPicvZadD0scRXNzt51rGOv1pjyUjc7YjS5kzgNlkP+C2t3Cno4iiyPAJU/l98QI2L/32BClTVuvcqIcu/UYx7t5XWfnOI6Ss/QGV1pXhNzxGuZPnUai1dLvkPoIGTuTIjy9SmbaTwpXvU7F3GeGXPd5hRYAbaE3MnC4NF+4dJWckfSXW/P3Y8vZjzduPVJrOKclVgojKvyuqkHjUwfGo/Lui9ApC4RGA0AmRPGdKxABINhv6tE0c+msxFdmHAPsdwejzp9Bjwm1oPf3aPObJ0TFZKbtY+tELFGfZ06C69RnKpXc9jW9w+zoLtEXIlBTm8fr/ZpKeehBBFLnhroe59NpbOyUFTEbGUb777jtmzZrFokWLGDJkCG+++Sbjx48nNTWVwMBT60atW7eO6667juHDh6PVannllVe46KKLOHjwIGFhHR9JKSPjTFoSM0ERXXnwtS/4YO695KWn8t6cGUy5azbDJ7R+4d6qmOk7grH3vMzq9x/n2La/EZUqRk7/H4LYsgiJGnUtSo0b+79+lpKkPzFVlRBz3XMoXRy/eREYFAITHqB4+O3YsnZgObwS67FNSBU5mLcuxrx1Mbh4oYgYgCIyETFiIKK3Y52S2o1CjTluAubYi1GUpKA++Auq9DUoyo7guuEVpC1vY446D3P0OCzhg51S40+ZvhbXNc8i2CwIUcNQTnq1xfbhbcFcZo82Ufl1cXgf15BYqtK2oy9Ia3XbwOjeKNVaDLpyKnKP4RsR0+61NqBS28+fTMaW6yPJyPwbkKXMGcDSECmj7viLz6HjJ7P0i7fISt1PdloykbG9OmyumCEXY66rZe1HT7Hvr89RaV2JvviODpnLLagr/e75iKJdyzj66wKMJZkc++Ru3LslEjDyJjxihrZ6ItFeOlrMwIkX8qcjaCRjDdacPdhydmPN3YtUkX3KNkrfCNThvVEH10uYoBhEJ50EOMqZFDEANquFwt0ryF77BdWF9txlhVpL9MjJxF84DVef9hUQPv73qCsvZuUXr3Fgw1IAXD19GD/9Mfqcf2m7pEhbZAxA8q5tvDn3IaqrKvDw8uaBZ96gd+KwNs8rI9PRvP7668yYMYPp06cDsGjRIpYuXcrixYt54oknTtn+66+/PuH7jz/+mJ9++onVq1czbdq0TlmzjIwzaUnMePkG8MD8z1jyxlz2blrBd+8+T276Ya6643GUqtY7M0HzdWa6DBjFmDtfYO3CJ0nb9AcKpYrh055o9RgVPnQSSq0rez9/iqq07SS/dxvx0+bjEhjV+g97HIFebtBnDCXdhiOZ9FiPbsRyZC223D1QV4X1yFqsR9YCIHgEIYb2QgzphSK0F4J/dIt1T9qNIGAN7EldYE8Mw+5HlboU9aHfUehyUR9difroSmwaT8xdR2OOHos1qDco23ZOI+hLUR/+E+2uxSDZEOPGoZjwnFPSlhowl9qljNLP8RtAbqFxAOjzW5cyCqWK4PgB5B7YQn7KDqdImYaMAqvFjM1q7dA6nDIyZxpZypwBTA2RMuqOjzrw8Paj/8iLSVr7B0u/eIu7nvuwQ++Kdx89GbNBz6Yv55H0y0KKco4xYOrjaD19nT6XIAgEJ07Er8dIMpa9S/6Wn6hJT6ImPQm1Tyg+/Sfi0/8SNL6t51yfzbSl25Fks2IqTMWQvgND+nZMeSkgWU/YRhXQDU1kPzQRfdFE9mss/tbZnGkRA2Cuq6Fg55/kbPwWfVkBYK8ZEzvmWuIuuB6Ne8uFFJvj5FSlbX9+xfrvF2Iy6EEQGDhuCmNvmImbZzvHb4OQsVos/PzlIn767H0km41u8T2Z9cLbBATLEQQyZx8mk4ldu3Yxe/bsxsdEUWTcuHFs3brVoTH0ej1msxlfX+cfd2RkOouA+tSbpuSMRuvKLU+8yqofElj6xTtsXvYDhVnHmD5nAR7erR/TW4qa6TpoHDaLhXUfPc3hdT8jKlUMvf7hVs8dg/tdwHD/cJI+eAhDWS7J799GzNRn8Ok+0oGf9uT1aQANJT3Go+wxHslqwVZ4CFt2EtbsXfZGC9VFWFOLsKauxgyg1CIGd0cM640itA9iSE8EjXPTciWtF6a+12Pqcx2KkhRUR1ehOrYasa4czeHf0Rz+HUmhxhrUC0tIfyyh/bEG9gBFE8dscx2qzI2o0v5GmZeEUJ/aLfa6HMW42Q6ngDmKucx+U66tkTIA+sKj9uYNx63Jr4nUsNCeg8k9sIW8g9vpNf7601wxqNT/3CA0m41oFB1TG1NG5mxAljJnAHdPe7EtXUVZp8x30bV3sXfT36TsWM+anxZzwZTbOnS+PhffhCTZ2LJkATlJKyg6tIP+Ux+ly+AJHSKEVK6exE2ZQ+QF08lZ9xUF237BVJFP0ZqPKFrzEW5R/fHpPxGv7uejdGvfRfDJdEa0jCNIkoS1Mh9D1m6MmUkYMpKw1VWdsI3SNxJtt8FouvRHE9EXhav3GVrt2SFiAGoK08nZ9COFu5ZhMdYBoPHwJX7cjcSMuhqVS/vbOR4vZNIPbGfZRy9Smmtv5xge15dLZswhNLp9LafbGh1TmJvFuy88RtrBfQCMmnAltz88F7WmcyOhZGQcpbS0FKvVSlDQiUWng4KCOHz4sENjPP7444SGhjJu3LhmtzEajRiN/7yH63S69i1YRqaDaS5qRhAELrzmNkKjYvli/myOHdzNggev5/b/vUlETPfWx20haiZ62MVYrWY2fvIcKau+Q1QoGDy19SK+nuHxjHjsa/Z88ijlR3dz5MvHCb/wDkJH39yu878Adw0lNUYEhRJFWG8UYb1RDZuOZNLbJU1BMtb8ZGwFB8FYgy13D7bcPVgABBEhINouaCIHoogYgKB20kV9ffSMNbAnhqH3oSjYg/roSpTZ2xDrylDm70aZvxt2gSQqkTSeSCpXULnYu2wq1CiLkxHMdf8MGdIbsfcViD0ndci5sqUd6Uta/whElRab2YChNKfVyKewHvY6XoWpu7FazKfdjfX4m9cWk6nDGpbIyJwNyFLmDBBS36q6ILdzqomHRMUy+a7/8d07c/n9kwV07d4Pr6i2F6JtC30n3ExIQiJrP/wfZdmpbF/8JNk7/ybx+jm4+gZ3yJxanxBir3yUbhPvo/TAWrK3/kbNse3UZu6hNnMPub8KuIQm4BE7DM+44biG9zytUNczJWYsuiKMmbvtIiZrV2PxtgYEjRvaqES03Qaj7TYEpVfHvN6OcraIGJvVQknyBnI2/UDFsd2Nj3uGdCN2zFSihl2GUt1+WXG8jKksKWDlF69xcPPfgD1V6cKbZtF3zOWI7Uira6uMkSSJtUt/4rO3X8JYp8fFzZ3bZs1l5EWT2jy3jMy5xMsvv8y3337LunXr0Gqb/3+eN28ezz77bCeuTEam/bSUztRz8PnMev0rPn7+AYrzsnjr0Zu5duZcEsdMdGzsZqJm4s6bhM1iZvPn80hevgRBEBl0zcxWhYHGw4fB9y/k0E+vkbXhe3JXfEBt7iG6XjUHlVvb20oHHHdsLalP5xbUrigiB6KIHIgKeyMBqTwbW/4BrHn2unmSrgCpOA1LcRrs/QkUKsTQPiiiBqOIGoLg19U58kNUYA1LpC4sESQJsSoHZf5uFPl7UBbsQawrR6grh7ryU/f1CkXsfgmK7hMQfNpXV84RbKY6zBW5gL3zlaMIogLXkBhqspOpzT/SKGWaipIB8AmLRuvpi0FXTvGxA4TEt16EuiUUCiWiQonNammsxykj829FljJngOBwu6Uu7CQpAzBi4rUcS04iae0ffPrSg8yY/wNuXh0b2h3YtSdTnv+ePX98QtKvCyk4sJG/np1C38kPEn3eVR1W80WhdiFo4CUEDbyEwvwcKvb+ReWBlRgKjlCXd4i6vEMUr1uMwsUT95jBeMYOw61LX9S+EW1eU0eLGclixFSUhin/MKaCQ5jykrFU5J24kahAHdoTbZcBaLsNQh16erLJWZwtMqauPJ/8ncvI2/4bxkq7wBJEBWF9RxEz5loC4xJP+8SsQcgYaqvZ+PPHbPvzS6xmE4Iokjh+KmOvuw8X97afjELbhYyuopwP5z/Nzo2rAOjRbxD3PPmynK4kc07g7++PQqGgqKjohMeLiooIDm5ZMC9YsICXX36ZVatW0adPy23lZ8+ezaxZsxq/1+l0REREtH/hMjIdTGsFgB96/Su+nD+HlKSNfLlgDtlpKVx+64MORSs0FzWTMPoqJEliyxcvc+Dvr0AQGXT1fa0eM0WFip7XPIFHWBwHv3+ZipQN1OSmEH3103jFDHLwJ25qnfUpXSfV2hMEEcEvCtEvCmVv+80HW00Jtrz92HL3Yc3cjqQrwJazC1vOLswbFyJ4BqOIG4My/gKEgFjnCBpBwOYdick7EnpcAZKEUFOEYKpGMNchmPV4KSxIZj2CTyRCSJ9OKbRfvfN7sJpReoeiaOONOo1PKDXZyZirS1vdVhBFguP6k5m0mpL0g6ctZYDG10eSpFa2lJE5tznzV27/QUIi7FKmvKQIQ50erUvHh+MJgsC1DzxHztGDFOWk8/NbT3DDkws7vGiWQqki8cq76DZoHCsXPUlZxgF2ff0i2duX0X/qY/hEJnTo/MGhEQSH3kH5qFsw60qpPrqN6iNbqD66HWudjqoDq6g6YL94FTVuuIQm4BrWHZew7riGJqD2DW9V1DhLzFj1VVgqcjCXZNoFTP4hzCXHwHZiTRgEEXVIPJouA9F2GYA6vDei2vltGdvD2SJiLIZaivevJX/n0hOiYjQePkSfN5no8yc7JWKrQcZYLWaSVvzA+u8XotdVANClZyIXT3+ckG6th5E3OXYbZQzAnm0bWDhvDlXlpSiUKqbe/gCTrp0uF8eTOWdQq9UMHDiQ1atXc8UVVwBgs9lYvXo19913X7P7vfrqq7z44ossX76cxMTWu/BpNBo0mrPj/UpGxlFaEjOu7p7MePot/lqykBXffsT6374iL/0wtzzxqkN1ZqDpqJnuYyYjSTa2fvkqB/76AlEUGTj5HodkQuSIq/CK7MHez+ZQW5TJ4cUPEDLyesIvvBPxNFJbmoqeORnRPQAx/gKIvwBJkpAqc7FmbseauR1bzh4kXSGWpG+wJH2D4B2OIv4ClPEXIPpFtXtdpyAISB7BSASfsObOxFqnQ7flSwC8Rs1oc1txhdaezm011DYbIXM8/lEJZCatpjTzUNsX2wS2+nNg+TxG5t+OLGXOAO6e3nh4eVNdVUluxlFierR8R89ZaFzcuO1/7zB/5mSO7d3Cj288xhX3v4Ba0/EX9L7hMYx97FOOrv2O/b++Q8nRPax48TqCew6n+/jpBMQN7NC7Bb5uasrxx3fApfgOuBTJZkWfm2IXNMd2UJefis1YS23GLmozdv2zo6jAJSgGlXcwKq8g1A2fvYJQeQejcPFEbKU6vmSzYDPqkQzV2Iy12Iw1WGtKsZTn2j8qcrCU52IzVDe5v+jqgzq0O+qQBNQh3dGE90bUtr/mSUdwNsgYyWalPC2JgqRlFB1Yh81Uf2IpCATGDaLriMuJGDAOhZNa0fu5a5AkibTdG1n+2XzK8uxdm/zDunLhtIeJSxzV7r/ptgoZfU01X73/Kqv/+AGA8KgY7n96PlGx7RNCMjJnklmzZnHzzTeTmJjI4MGDefPNN6mtrW3sxjRt2jTCwsKYN28eAK+88gpPP/00S5YsISoqisLCQgDc3d1xdz+73itlZE6XlgoAiwoFE2+6j/Do7nz9+v84eiCJBQ9ez21Pvk5krGO1zJqKmukx9mqwSWz9ej77ln4GgsjAq+5y6BjnFZHAeY9/TcpPr5Oz+ScKNnxN1dEkYqY+0+buTE2vt3VBIwgCgk8Eok8Eqv5TkMwGrBnbsB5ZgzV9C1JlLpbtn2PZ/jliUAKKnhNQxo9D0Ho4dX1nAt3Wr7EZqlEFdMOt1/g276/Q2oslqyTH2lL7R9nPO5whZWw2G5LNXgBZIUsZmX85spQ5Q3TvN4gd61eyY8PKTpMyYK8vM+3R+Xz68kOkbFlOZXEe1z3xDh6+AR0+d4CnK+IF1xPWfwz7f36bnKQVFB7cQuHBLfhG9aL7+FsI7Tca0ckV5xvwdVNTXmtvRy6ICtwie+MW2ZvgcXciWS0YSjKoyzuEvj7Fqa7wKEg26gpSqStIbXlwQbS3LlSqEBRq+9eSDZuhBum4Qm6tofAIROkX0Shg1CEJKDyDOiW8ta2cDSLGZjFTfnQXJckbKEnegFFX0vica0Ak0cMvo8vQS3DzDXHanA3RMYWZqaz84nWO7d1sn8/TlzHX3sOAC6egaGf6WHuiY3ZvWcdHC+ZSXmJP95hw9TSuv3OWXMxX5pxl6tSplJSU8PTTT1NYWEi/fv34+++/G4v/Zmdnn1CbaeHChZhMJqZMmXLCOHPnzuWZZ57pzKXLyHQaLUXN9B1+AUHhUXzywkP1dWZu4ep7n2TohVc4Pv5JUTM9xl2DzWZl+zevs+/PxYiiSP8r7nDo/EShdqH3dU8S0GM4B75+Dn1+KgfevonAIVcRNuYWVO3sdHjqmk88L2lW0qi0KONGo4wbbW+9nb4Za+pqexRN0WFsRYcxr38PRfR5KHteghg5sE3dkM60iGnAWlNG9Y5vAfAec1e7Ojp5eHpRAFjqahza3r+LPQK+ujgXY60OjZtnm+dsQDouUlwU5UtWmX83giQn6bWITqfDy8uL5MxiPDzb/8ZyMlvX/s2bTz9IQHAo73y/utMvunfv3Mq3rzxAXXUlnn5BTJk1n8jup5/76Qhl9QfJ6uJsUld+ScaW37FZ7LLEI6gLceNuJGrIRJQdFMHTIGZaQ7JaMJbnYirLxVRVhLmqEFNlIeaqIsxVRZiqik5NLWoBQaVF0LghatxRuHqj9A1H6ROO0jei8WtRdfZfSJ9pGWOuq6Hs8BaKkzdQdmgLFkNt43NKF0+C+19IwvmX4xvVy+n/V37uGkpyj7Hu2/c5uGU5AKJSydBLb+L8yXegdWv/XbW2Cpnqqgo+e+slNq38A4CgsEjuevwFevQf3O41yJw7VOt09IoKpKqqCk8nHpv+qzQc6w84+VgvI9PRNCdmAOpqq/lqwZMk71gPwIhLruaqOx5HqWpb6tDxciZ5+RK2f/sGAH0umUbilNZrzByPobKEA0ueoyTFfkNDVLsSMvJ6QkZei8LJLaybojlRAyDpK7AcXonl4DKk0vTGxwXPYJS9JqLoORHR3f+U/c4WCXM8kiRR+utc9MnLUYf1JHj6Jw7/no5PU8pc/x0pP7xCcL8LGHD7fIf2//6xK6guyWPCo+8R2qPlc5KGyKymMBkNPHrVEABe+WELWtfW/z4CHEixOpeo1unoLR/r/xPIUqYVOkrKGA113HHZCAx1ep5f9C1xPfs5bWxHKKs1UV6YzZIX76U0LwNBFBl++XTGXHsvSield7S6hvoDo0FXRtqab0lb/x1mvT2FR6V1J2r4JGJGXY1ncFenz+2omGkJyWbDZjEiWUxIFjOS1YTNYkKymKisqUUQREStR6OIORuK77aXMylibFYL1bmpVBzbTdmRHVQc241ktTQ+r/bwJaDn+QT2HoVvbCL+Xh2UrqArZP0PCzm1vkdoAAAgAElEQVSwcVljOG3P4eMZe8MD+IW0v2tCezorbVu3nE/feJ6qijIEUWTiNTdzzW0z0WjPjtpCMh2PLGWciyxlZM51mpMzNpuNld99xF9fL0SSJKIS+jJ99ny8/YOa3L7Z8Y8XMyuWsP0bu5jpMW4qQ6+b1eZGCaWHt3P4t7fR5djTXJRuPoSPu52AgRMRVWf2wlqSJEyFh6nd+ye1ySuwGXT2JwQFLnHn4THwKrTdBre5PktnotvxHRXLXwdBQfAtH6AJb7rramt1YvJ2LGXfF0/hnzCUwfe979Dca96fTcbOVSROuY++E29ucduWpIxBX8vjVw8HYP7P2x2KAJaljMy5iixlWqGjpAzAO889yqaVfzDh6mncMnOOU8dujbJ6KWGoreavT+axb93vAAR2ieWye54jPLZjW2Y3ruO4OxZmQy3pm37l6LrvqCnJaXw8MH4wMaOmENp3tENdBBzFGWKm5fHP7fZ9Z0rESDYb1flplKftpOLoLirS92I16k/YxjWwC4G9RhHQ63y8InsiiCK+7Uj9cQSFvox137/PvnV/NIbSJgwey+hr7yU4Kv60xm6rkKkoLeaTN55n54aVAIR3jeXuJ17s1BRImbMDWco4F1nKyPwbaClq5uDOjXw5fzZ1tdW4e/tyy+OvEtun7Z2QGuTM4bU/s/nLl0GSiB91BSOmzW6zmJFsNgr3riL1j/fQ15/3Kd28CUicRNCQK9H4OC/1uL3YzAb0h9ZQs/tXjDn7Gh9X+oTh3v9y3PteisLdsULKnYEk2ahc/R66rV8B4D3mbrzOu6XxeUeK9R5P3o4/2ffF0/jFJTJk5ocO7bPvz09J+ul9oodezOg7n292u5aEDIC+RsfsqSMBeO3XnQ7dNJaljMy5iixlWqEjpcyuzWt59Ym7cfPw4s0lf+Pp7ZycWkcoO0lIHNq2ij8WPYdeVw5AXOIoRk+9h9BoxwrDndZaTgollWw2Cg9t4+j67ynYvxFJskclaDx8iBp6KVFDL8U7PM4pc3e0mLHPce7Imc4WMTarhdqiTKrzj1CTn0Z1/lF0OYex1OlO2E6pdccnuj8+MQPxTxiGW1DUcWvuGBlTXVpAyqol7FrxA1aLGYDYASMZc919Tvm/aIuQkSSJNX/+yNfvz6e2RodCoeSKm+7gypvuQqXunMg2mbMLWco4F1nKyPybaE7OlBbk8MmLs8jPOIIoKrhyxiOMnHRdu1J9S2oMpG1eysZPnkOSbMQMv4SRtz6F2I6oYJvVTPbGn0hf9TmGSnt9NAQB7/jhBA2djFfs4HbVQ3E2puJ0avb8Qs2+ZUjG+horogLX+FG4D7gCbddBZzR6xmaqo/TXudSl2tPVvM6/Ha/zb8ffs/2p8UeWLuLoXx8SPuwK+tzwtEP7ZCStYc17jxMQ3ZvL/re42e1akzIGfQ2PXz0CcCxS5t8mZECWMv8lZCnTCh0pZawWC7NnTCHr6GHGTJzCXU+84NTxW+JkKQNQU1nGyi9fZ//6PxrTM+IHjWH45bcQ2X1Ah9e9OVnOANSW5XNs489kbP4Ng6608XGv0Bi6DJlA5OAJp13E9b8sZjpDwlhNBgyVxRgqizBWFmGoLKKuLI/q/KPUFKYjWc2n7KPQuOLTrR8+sYn4xgzEIzS2yROyjhAyFQWZ7Przc1K3LMNWnyYV1WswF9wwk4j4008zbGt0TH52Bh/Nf5qUvTsB6BbfkzufeJGomI5tJy9zdiNLGeciSxmZfxvNiRmToY5v33mOXeuWATDkwiu45t4n25W6XlJjIH3HStZ9+BSS1UrXQeMYdcdz7Y5qtlktFCdvJHvjD5Qe3tb4uNLVC6+4oXjHD8c7bghKV692je8sbGYD+pRV9uiZ3AONjyu9Q3HrNR633hej8o/q1DVZdMWUfPcIpsJUUKjwn/QUkcMvO+1x937+JPk7/yL+8plEX3iLQ/uUZafy69wb0bp7c8M7K5vdrjUpYzToeWzyMABe/WkrGq1ri9vLUkbmXEaWMq3QkVIG4PD+3cy993oAnl/4DXG9+jt9jqZoSso0UJqfyYYfFp1QOyMwMpZBF0+lz6hJaFw6rhBbU2IG7AfqguRNZG77k/z9G7BZ/rmQD4gdQJchE4kYMA51O6u8d4aY+WeuMydojpcwks2GWa/DVFOO1ajHajYhWU32zxYzVosRm8VcX79FQrJJINnskUuShCTZkKwWrKY6rMY6LKa6xq+tpjosddUYKosw11a1uCal1g330Fg8QmPtn8Pi8AiNbfFuW0fImJLMwyT9+SlHd66G+rfFrr2HMHLyDLr2HuIUKdkWIWMxm/j9m8X8/Pn7mE0mNFoXrrltJhOm3IRCee7WJ5JxDrKUcS6ylJH5N9KcmJEkibW/fMHvn76JZLMRldCXW598Da92duJM2rCcNQtnY7OYCe05hAvufRm1y+nVd6spyiR704/kbf8Ts/646FlBxD2yF16xg/Ho0gf3iJ4oNC1frHckpqKj1Oz5lZr9f/0TPQOog+Nx630xrj0vROnRcR1ObWYD1Tu+p2rz50jGGkRXH2JueQP3KOfUqtyyYBqVmcn0v20+If0vcGgfU10tX94zGoCb3luL2rXpv4XWpMyJhX43o21mnMbxZCkjcw4jS5lW6GgpA/D+S7NZ/9cvRMV256UPf+i0C66WxAxAaV4GW377jAMbl2E22ts6q7Wu9B19GYnjpxLUJbbj1tZCdXyTvprc3avI2r6M4iNJjY+LCiUBcQMJ7TOKsD6jcPMPdXi+zpQyJ87bMYJGkiTcrNXoS3KoK81FX5aLUVeKqbocU3U5xuoyzDUVJ7Qb7EgUGle03oFovYPQeAeh9Q7CIyQGj7A4tL4hDgsPZ8sYSZLIT93Nrj8/J2v/5sbH4weN4byrbicivq/T5mqLkEk7uI8PXv0fOelpAPQdfB63P/wMgaHhTluPzLmNLGWciyxlZP7NNCdnDu3azOevPE5dbTVefoHc9r836BLXq11zpO/dzM8LHsJirMM3IpaLHnoLN5/TlxE2q4XKjH0UH9xMcfImagqOnriBIOIaEmMXNJG98ejSG7V3cKd3NbWZDdSlrqc2eTl1x7Yd151TQBPeG5fYEbjEnocqMNopa5MkG7UH/qZy7SKsOnvKl0tYd7rdtACNb9hpj9/AysfHYq6t5LwnvsWzDaUDvn5gPAZdOZfP/RL/qKYje1uTMhazmYevSARg3rcbcfVo+b1ZljIy5zLnjJQpLy/n/vvv548//kAURSZPnsxbb72Fu3vz1vTOO+9k1apV5Ofn4+7uzvDhw3nllVdISHA87L8zpExVRRkPXT+B2hodtzwwhwlTpnXIPCfTmpRpoK5Wx751v7Pz7+8oy8tofDyyx0AGXHAV3YeO65DomZbETAP68kKydv5N1vZlVOWlnfCcV2gMoX3OJ6zfaHy79Gy1AN2ZEjOng81iprY4i5qCo9QUHENfko2+XsLYTIbWB8DeRlrp4oaoVCMq1SiUagSlGoXK/lkUFSCK9jxpQajPlxYQRAFBVKLQuKBQ2z+UGhfE+s9KrTsar0C0PkEote6nfRLiTCFjMRk4vHkZ+1d+S1nuMQAEUaTXiAmcd9VtBHVxTs0iaJuMqdPX8O2Hb7L856+RJAkPLx9ueWAOI8Zd2uknmDJnN7KUcS6ylJH5L9CUnCnOy+Lj5x+kKCcdpUrNjQ+/QP+R49s1fuGxg/ww715qq8pw8w1i/Ky38AmLPt1ln0BdeQElKZspS9tNRfpeDBWFp2yj8vDDPbIX7pG98OjSF7fw7u2qddNerPpK9CmrqD2wHGPu/hOeU3gF4xIzAk1YTzThvVH6hjtch0aSJKw1pRhzD6Db9Jk9VQlQeAYRPuE+fPtPbHOx5ZYw63WsfGw0ABe9thmlxvEOj3+8eBvFR/cz5u6X6Db4wlOeb03IAFitFmZdNhCAl75Zj5und4vby1JG5lzmnJEyEyZMoKCggA8++ACz2cz06dMZNGgQS5YsaXafDz/8kISEBCIjIykvL+eZZ55h7969ZGRkoFA4VjCsM6QMwIpfvuGT159FqVLx5OuL6dGv7RXx24qjUqYBSZLITN7Jzr+/5dD21Y1RFiqNCwmDx9J39GV07TMEhZMPfI7IGYDqoizy9q8nf996So/ubSwQDPYUmZCew/Hr1hf/mH74RMQhKk7NeT5bxYxks2GoLKK2KIOagmP2eiwFR6ktymg+2kUQcfENwdU/Ahf/MLTeQag9fFG7+6Lx8G38WnRiR6uOwJkyprayhP2rfiB5zY8YauxpVSqNC31GXcqIK6bjG9z+1tZN0RYhs2vzWj55/TnKigsAGHXxFdx03+N4eHVeAXCZcwdZyjgXWcrI/FdoSswY9DV8OX8OyTvsBWIvv20WY66c1q6bAZVFuXz/0t2U52eidvVg3MwFhMQPOO11N0ddRRGVGfuoSN9HSdpe9AVHTjkvEtWueHbth2f0QDyjE3ENjnGqvGgJi66IurTN1KVtxpCxE8ly4usvqFxQBUajDo5D5RuBoFSDQoUgqhCUKiSblf+zd9/hUVYJG8bvmfTeSEIggUAChBJa6E1AmiCCHTvW1VXXtqu49vVbXbtrWxVX196VIoIgvUMgQAKhBAghIY2E9DaTme+PSCRSQpJJJuX5XVeuwDsz7xxEmOGe855jyjpIReZ+KjL2YSk+8ftjXTzwGTmb8AtvwOhU/8V8zyZn/1Y2v/EnXLzbceFzS+v02NVznyJpw88MuuJu+k2bfdrt5xNlrFYr919cdRnWs5+twNvv3LtcKcpIS9YiokxiYiK9evVi69atDBpUNY1tyZIlTJ06ldTUVDp0OL/LVHbt2kW/fv1ISkoiIuL8yn1TRRmLxcLrT97P5tVLcfPw5PFXP2ySbW7rGmZOKsjJJG7FPHatXkjOseTq456+7YgePY2+Y6fTPryHzT7dP98wc1J5cT7p8es4tmsN6bvXYzGVVy/aCuDg5Ip/eC/aRfQjoGs/fDpE4O7fHqODo13DTGV5KaW5xyjOSqY4M5nirCNV37OPnHXmi6OrB54hkXiGROIR1Am3dmFVIcY/pNkHl3OxVYyxWq1kJ+9lx9IvObDpl+r/D7zbdWD49OvpP34mbvVci+hczjfI5OUe53//fo6NK6oWXQwKCeX2vz1D38EjbT4maT0UZWxLUUbamj/GGUtlJT+8/yJrf/oKgNEXz+KyOx7GeJ4fYp6qtDCP7164l7R9OzA6OjHm1qeIGFa/2Td1VVlRSn5KIml74yhKiacweSfmkppr2zm6++AdMQjfqBH4dh+Ok2fTfPhhMZVRdjiW8pQdlCXHYso+dFqkqZXBiFNAZ9wih+M98iaCgoMbZ7DAtrkPkblzJaHDZ9D3uqfq9NjNX71Gwi9fED3leoZcfV+N284nyJz0t8uGUlFexhMfLKJdyLkv4VaUkZasRUSZDz/8kIceeogTJ36vw2azGVdXV7799lsuvfTSWs9RXFzM448/zvz589m7dy/OZ9lGtry8nPLy3/+CLCgoICwsrNGjDEB5WSnP//V2EnfG4u7pxeOvfUhEVHSjPmd9o8xJVquVtAPx7Fy9kIR1iyktzKu+LahTN/qPm0H0mIvx8mvX0KHWOcycVGk2kZucQPaB7eQc3MXxQzupOMPiswajIx7tOuAVFIajb0fc24Xi1i4UFy9/HN28qr5cPeo8BdZqsWAuL8FcWoC5tAhTaSEVhbmUncj4bVeiDMpOZFKWl3HORXENDo64B3bCMyQCr98ijGeHSFx9g1vVpS22ijEl+Tns27CYxHULyTn6+zXoId360X/KdQweM7lebzbPx/kEGavVyqqff+DTt1+kuDAfo4MD066azZW33IOL6/lPEZa2SVHGthRlpC36Y5ixWq2smvcp8z54BYA+Q8dy48PP17rrzZmYystY8O9HOLB1BQC9J85iyFX3YWziheqtFgtHk/ZQkBRLwcFYCg7vwFJR8vsdDAY8OvbEN2oEflGjcO/QvcneU1ktZsw5R6nIPEBF5gHMBZlQacJqNmG1mKp2p7RacQrohHP7HlWzaYIiMTq5EtDIAeL4vs1sefMuDEYHRs35Eq8OkXV6fNyC/7L9x3fpPnoGo295vMZtdYkyj183nsK8HP72xteERpx7+QlFGWnJWkSUee655/j444/Zt29fjeNBQUE888wz3HXXXWd97DvvvMPDDz9McXExPXr0YNGiReecJfP000/zzDPPnHa8KaIMQFlJMc//7Q727tqGh6c3j7/+IV171G/RtfPV0DBzktlkIiluHbtWL2Tf1pVU/rZDksHoQGT/EfQfP5Pug8bi5NywvzTrG2dOslosFGYd4fjBnRw/uJPcwwkUZR+l0nR+53VwccfRzRMnVy8MDo6AFavVWrVjj9WKlarvFlM5ptJCzGVF1bv5nA9HVw/cg8LxCA7H45TvbgEdmvSa6KZmixhTaarg8I61JK5dyJFdG6qnMDs4ORMxaDz9J19LcNfeBHg23gv3+QSZjNQjzH3pKRK2V235Gd6tF3965Fm69ujdaOOS1kVRxrYUZaQt+2OciVu7lM9eeQyzqYJO3Xtz+5Nv1nrpyJlYKitZ89WbbJr3XwBCewxg1J/+aZMFgOvLUmkiZU8cefs3kbdvAyXH9te43dm3Pf69xuDX+wK8wvthMDbOhzcN0dhBxlJpYt2/rqUo/SCdL5hF7ysfrvM59iz/ho2fvUR4zDguvOfF6uN1CTIA/3f7dLKPpfCXFz4ios+5L4NTlJGWzK5RZs6cObzwwgvnvE9iYiI//PBDvaNMfn4+WVlZpKen8/LLL5OWlsb69etxdT3zXwr2nClzUmlJEc//9Q72xW/Hw8uHB//v3/QZOKxRn9NWYeak0qJ8EtYvYefKBaTu31l93NXDm+jRU4mZdCXtw3vU+/wNDTN/ZLVYKM3PpijrKIXZKRRlHaUo+yh5GSmYSvIxlxZRWV5S+4nOwejogqO7F05unjh5+OLq275qRyK/9rj6BVf93K89Tg3cRrKlaWiMsVqtZB1OZO/6n9i/YQllp8w2Co7oQ8/R0+k2dBKuHt52jzFmUwULv/yQ7z/+D6aKcpxdXLnq1nuZeuVN2uZa6kRRxrYUZURqxplDe+KY+4/7KCnMJyC4I3c++w5BHcPrdd79W1ew6M3HKC8twsMngBkPvIRb58adCX6+yvKyObx9FXl715N/YAsW0++Xijt6+OHXcxT+fcbhHTGoWVwS3thBBiB51Zfs+e4lnDx8GfvUPJzc6/534sGNS1j1/hOERA1i6iP/qT5e1yjz0l9mkXowkTuefoveg0ef9X6tMciAokxbYtcok52dTU5Ozjnv07VrVz777LMGX74EUFFRgZ+fHx988AHXXHPNeT2mqdaU+aPSkiKee+h29ifEYTAYuHjWLVx92304neWyK1uwdZg56XjaYXauWsDOVQsoyMmsPt6p50AGXzSLnkMn4uhU9xc6W4eZszm5xoyl0oy5rBhzaSHm0kJMpUVYK82/7UgEnNyV6Ldpr0YnF5xOXvbk5omDU+t8waivhsaYwuPp7Nu4mL3rf+bEsd93BfPwCyRq5DSiRl2Mf4cu1cftHWT2797B+y8+Ub3Ndd/BI7jtr88Q3CGs0cYlrZeijG0pyohUOTXMZKUl8+6Td5OTkYqHty+3P/kGXXr2q9d5c9OP8OPLD5CdcgCD0YELrrmXIdNnk1NqstXQG6yyoozjezdzJHYZJxLXUllaWH2bg6snfj1H4x89Dp/IIRib+D1dU8QYgPLCE6z+xwzMpUX0mfUYnUZdXq/zHN21nqWv3Y9/p+5c+sznQN2DDMCbc24lKT6Wmx7+FwMvuOis91OUkZauRVy+dHKh39jYWGJiqrZGW7p0KVOmTKnTQr/l5eX4+fnxzjvvMHv27PN6jL2iDEBZaQmfvPk8yxd+C0DnyCjueeJFOnW13Xa9f9RYYQaqprEejt/MtmXfsXfLiuoFVz192zFw4hUMmnQl3gF1W7CsqcOMNExDQ0xFaRFJW5azd8Mi0hK3VR93cHKh68AL6Dl6OmF9hlZt430KewaZkuIivnr/VZb++GX1Ntc33fsooyZNb1VrAUnTUpSxLUUZkZpOxpnCvBzef+ZeUvbvxsnZhRv+9jz9RlxYr3NWlJXwy/vPsnvtTwC0j+jN1LueIahzD7KLzryZgb1YKk3kJm0nY8cKMnasoKLw9w+RHVw98Y8eT7sBU/Dq3K9Rd3JqqhgDVR8+xn34CJk7V+IdGsXIhz+t9+VbWQfjWfh/t+AZEMLVLy+oV5ABmPvMX0jYspqr732SEVPOHogUZaSlaxFRBqq2xM7MzOTdd9+t3hJ70KBB1Vtip6WlceGFF/LJJ58wZMgQDh06xNdff82kSZMIDAwkNTWVf/3rX6xfv57ExESCgoLO63ntGWVO2rp2Oe+98DiF+ScwOjgwbuplXD77bgKC2jfK8zVmmDmpIDeLbUu/Zduy7yg6kQ1UrT0TNWQ8Qy66hvA+g8/rH6xNFWVOUpypu4aGmNLCPJJ3rOFg7CpSEjbVWPunY88YokZMI2LweFzcvc74eHsGma1rfuXD158lN7tqhtgFF13KDXc/rG2upcEUZWxLUUbkzLILyykvK+HjFx5h95Y1GAwGLrvjYcZccm29zme1Wtm14kdWfPIy5SWFGB0cGTbzVkZcfgeOTs7NLs4AWC2VnDi0k4wdy8nYsZyyvKzq21z8QgjoP5l2Ay7CLbCTTZ6vKUPMSVZLJTs/fZJjWxdjcHBk2H1z8etav1lRANmH97DgHzfhFRDM3e/+Wu/zfP7qE2xZvoDps+9jwpW3nPV+ijLS0rWYKJObm8s999zDwoULMRqNXH755bzxxht4elatv5GcnEyXLl1YuXIlY8eO5dixY9x2221s27aNEydOEBwczJgxY3jyySfp0eP81zJpDlEGIC8nmw9eeYata6v+YnNydmHK5dcz8/rb8fT2bZTnbIo4U2k2kbh5OVsXf8WRPbHVxwM6hBMz8Qr6jZuBh/e5/wHb1GEGFGfOxlY7JxXlZnFo+yoOxq4gbe/26gV7AfxCwukxcho9RlyEd7uQc57HXkEmJyuDj/79T7auWQZAcMdO3P7XZ4geNLzRxiNti6KMbSnKiJxddmE5lZVmvvvP82xY/B0A4y69kUtueQBjPWeJFOZmsfSDf1bvztQuNIKL7nqGjt2rQkBzjDNQtQZhbtJ20rb+TEbcMsxlxdW3+Yb3IWTgJNoPmIibX9XM75zCs79HtUd8ORNTaREJXz1H+rYlGIyODLztRYL7jm3QOTMP7OSn527DNziMO9/6ud7nmf/ha6z4/n+MvfQGLr3tr2e9n6KMtHQtJsrYS3OJMift3bWdL997hb27qi7dcPf04sLpVzHl8utoF3x+l3HVRVOEmZMyj+xn65Kv2LX6JyrKqhbVdXByps/IKQyddj0dInqd9bH2CDPQduOMreLLqQqyj3Fw20oObl1O+oGdNW4LCOtGRMw4IgaNJyAsstZZVI0ZY+DsQcZsNrH420/49qO3KS8twcHBkenX3MLls/+Ms0v9pu6KnImijG0pyojULqugjF+//ZCfPn4DgL7Dx3PDX5/D2dWtXuezWq3s27SMpf/9JyX5uWAwEDVsEiOv+BOBnboBzTfOQNUaNJnxq0nbsojjiRtrfoAU0Z+QAZNoP+BCXH3st9tUbbITNxL/xbOUncgAg5EBNz9PyMCJDTpnoKcryfGb+eoft9EuNILbXptX73Ot+P5j5n/4KoPGTeOGvz535udrpUEGFGXaEkWZWjS3KANVL2JxG1fz5XuvknKoais/o4MDMSPHM/LCqQwYNgZXdw+bPV9ThhmA8tJi4tf+zLal35J+aE/18bCoAQydei09Bo/D6Qz/wLVXmDmptQWaxggvp7JareSmHeRg7AoOxq7ieMopu6sZDIRE9qVrzFgiYsbhE3z+i+HaK8gk7ozlg1eeIfVw1UK+3fsM4LaHnqZzZP13GRM5G0UZ21KUETl/ixf+yBevPUml2URYt97c/uS/8fGvf3goLcxj+ccvkbB6QfWxHsMmMvKKOwnq/Ps6is050JQX5JAet4z07Us5cXDH7zcYDPiGRxPUZwzB0WPwDIloFuvJmUqL2Pvjaxzd8CMA7u1C6Xv9U/hHxtT7nKeuG3Mobh3fPHcXwV16cvOL39T7nFuWL+TzVx8nauBw7nr23TM/r6KMtAKKMrVojlHmJIvFQtzGVfz8zSckbN9UfdzJ2YX+w8YwfNxkBo4Yi5u7bbZYbuo4A5B6IJ7Niz5j94ZfsJirFgZ2dvOg57AJRI+eSpfooTg4/L6VsL3DzEnNOdA0dmw5l0qziYykeJJ3rOXgtpXkZx6tvs1gMNIhakDVjJjBE/D0q/sbPHsEmfwTOXz+zkusXlL1SZCXjx/X//lvjJkys97TukVqoyhjW4oyInWzadNG/vt/D1BckIdvYHv+9PRbdAjv1qBzZh3Zx/rv3mPfpmXVx7oPnUDMRdcSFjUQo0PVorPNOc4AlJ7IJCNuGenbl5GXHF/jNreADgT1GUNgr5H4Rw7A0cW9ycdXY3YM0PmCWfS45F4cXeo34+lMi/ju37qCH168jw7d+nLjc5/Xe6yJset596k/07FrDx5+88xxR1FGWgNFmVo05yhzqpSD+1i37Cc2rfqFzLSU6uNOzs70GzKKIWMmEj14BP7t6ra70R/ZI8wAFOZmE7v0a3asmE/+8fTq4x4+/vQeOYXo0dMI7d4Xg8HQbMLMudgi2tgzrtRFwfF0UnZt4Ej8Ro7u3oLplOuvHZycCes9lIhB4+kyYDRuXvVfALepg4ylspLlC7/ly/depbioAIPBwIRLrmbWHfc32jpPIicpytiWooxI3WWkHuFff7uDrLQjuLh5cPOcl+g5aGSDz5t1ZD8bvn+PvZuWwW//TPHwbRFKS2EAACAASURBVEfU8Mn0GXMx7SN6V882aQmBJithLVkJa8jZtwWL+ff3fwajI75d+hDYaxRBfUbh1aFbo82iMZeXkBH3KynrfyDv8C6ganZM9HVPEdCtfrNjzrWjUuKGJcx/7W+E9Yzhun/8r17nBzialMjL983CJyCQf3xy+oLBrTnIgKJMW6IoU4uWEmVOslqtHEnay6ZVv7Bp5RLSjybXuL1D565Exwyj98Bh9B44FE8vn3o9j73ijMVi4ei+HSSs/ZndG36hpOBE9W0+gR2I6D+CLn2G4NOlHx6+7ewyxrautPAE6Qd2kZYYy5FdGziRnlzjdlcvXzr1GUbXmLF0jh6Bs1vDLrVr7BgDpweZhG2b+PTtF0g+kAhAl+69uO2hp4ns1bfRxyICijK2pigjUj9FBXm8/sRf2BO3BaPRgcvvmsOoqVfZ5NzZR5PY+tOn7N/8K2XFBdXH/UPC6TFsIp16D6Jjj/44u7o3+zgDYC4vJWffFrIS1nB83xZKc9Jq3O7k7k1AjyH4hkfjGx6NT6eeODjV/z2OpdJEXnICqZsWkL5tKZUVpQAYHZ3oNOoKuk+/p16zY85ne+u4pd/wy9xniYi5gCvnvFXn5zgp73gmT900CaPRgVfmba2eLVU9FkUZaSUUZWrR0qLMqaxWK0cP7WfTyl+I27Saw/v3cOpvt8FgICIqmn5DRtF/+Bgio6JP+8vuXOwVZk6qNJs4tGsT8WsXkbh5Oaay0hq3+3eMIKz3YMJ6D6Vj1ECc3WxzGZfUVFFWwrF92zm6ewtHd28h5+iBGrcbjA60j+hD574j6BQ9gqDwKAw2uqynqYNM2pFDfPbOi2zfsAqoWmj76tvuY9LMa+r0Z0ekoRRlbEtRRqT+zKYKPnjpSdb8dhnvmEuuZeZtD9W4vLwhKk0mkuM3snvNT+zfuhJzxe8BxujgSEhEb8J6DSKsVwwdIqNx8/JtEZGm5Hga2Ykbyd69lpwD27CYymssFmxwcMS7Y3fcA8Nw8w+p8eXg7FZ1X6sVq6USq9VKRWEOBWn7KUjdT2HaAYoyDtWYmeMeGEbosBmEDpte78WHzyfIACz78F9sW/w5Q6bfxPgbz75rUm0slZU8dOkQLJVmnvl4Kb5/mPGvKCOthaJMLVpylPmjosJ89sRtIWHbRhK2bSbtyMEat3v7+jNg2BgGjBhLv8Ejcff0qvWc9g4zJ1WUlXA4YQvJ8Vs5nLCFjOS91VNeoWq9Ep/2YbQL60a7sG4EhEYS0Kkb3gEhNgsEbYHVaqUoJ4Os5EQyD+/h2L44Mg/GY6msrHE/vw5d6NC9P52ihxPWawguHrX/v1QXTRFj4PcgU5B3gu8+epNl87/GUlmJ0cGBiTNmccXN9+DtW/9LrkTqS1HGthRlRBrGarUy/7P3+Gbu6wD0HDSK2Y+8gKuN1jU8qby0mANbVnB410aO7t5KQU7GaffxDQ4lJKIP7SP70CGyD45BETg28x0QK00V5CXHV30d3sWJw7uoKMxt8HkdXT0I7jeesOEz8IsYUO/Lo843xpz01bN3kLxrIxfd+Qz9LrysXs950j9umUpOZhr3vfQ/uvYa8PuYWnmQAUWZtkRRphatKcr8UU5WBru2rmfH5rXs3LKO0uKi6tscHByJ6hfDwOFjGTp2EoHtO577XM0kzpxUUphHcsJW9mxbx9HdW2osKHsqJ1cPAkIj8AkKxatdCF4B7au+fvuxUz0XPWsNrBYLhbmZ5Bw9QOah3WQdTiTr8B5KC0+cdl/vdh0I7T2EsN5DCO01GHdv/0YbV1MGGVNFBUu+/5QfPnmXkqJCAAaNGs91d/2VDp26Nsk4RM5EUca2FGVEbGPzqiX8559zqCgvo33nCO548g0C2oc2ynNZrVbys9JI2RPL0T2xpO7bwYn0I6fdz+jgSPuuvQiNGoh3eB+Cu/XD1at5r/1mtVopzU0nP2UPpbnpNb7KTmRUzYAxGDEYjRh+++7o6olXh0i8OnbDu2N3vDp2xz2gY4M/fKxrkAF4+84JFOZkcv3/fUpoj/4Nev4359xKUnwsN/7tX8SMvej3cSnKSCuiKFOL1hxlTmU2m9i7axvbN6wibuNqjqUcrnF7VN8YRk64mGHjppx1ZkBzCzOnSklNJedoEsePHuD40SRyjh4g99hhLGbTOR/n6uWLh28g7t7+uHn7/fbdv/rnrp6+uHh44erhjYu7Fw5OLWPxXah6wTeVlVBakEt+9jHys46Sl5FCfmYqeZkpFGSnUWk6/ffUYHQgIDSSoC49Ce7am7DeQ/AJapw3XKdqqhgD4O0EKxZ9x/zP3icnq+pTuPBuPbnhnkfoM3BYk41D5GwUZWxLUUbEdg7tjeflR/9MXk42nj5+3PLYq0T0Htgkz11WlE/GoT0cS0ogPSmB9KR4ik5kn3a/wLBIQqJHENZvFEER0RhtdKlVa1TXKFNeWsxrN1a9V7r/o3W4etZv/cqTPnv1cbYuX8jFN/2FiVfdWjWmNhBkQFGmLVGUqUVbiTJ/lJF6hO0bV7N1zTISd8ZWr0Xj4OBI9OARjJpwMYPHTMDVreZWfs05zPxxV6ZKs4m8jBRyUg9SePwYhcfTKchJpygng4LjGTV2CTpfjs4uuPwWaJzdPHF2dcfJ1R0nF7eq77/92NHFFUcnFxwcnXBwcq76cnSu+rmjEwajAwaDoeq70YDB4FC9vbIVK5bKSqwWy2/XEVuwWKp+bq4ox1xeiqmiDHN5GabyUswVVd/LivIpLThBaUEupYUnKCk4QaXp3DtVGR0c8QvpTFCXXr999aRdWDccnZt2GnBTBRlTRTk7Vsxn/udzyc3OBMCvXRCzbr+fMZNnaN0YaTYUZWxLUUbEtnKyMnjl0T+TfGAPDg6OTL/5fsbOvL7Rdhc6m5OzaVL3xpG6dzupe+M4nlrz8n1XD2+69B9JcJ+RdB5wQbO/1Kkp1WeWTHpSAh8/eg0evu24d+7KBo9h0advsfSruYycehVX3f1Y1bgUZaSVURaWM2of2pmpV97I1CtvJCcrgw0rfmb9sp84vH8POzatYcemNXh4ejP58uuYdvXs6l2cAjycm22YCfB0qRFmHBydCAiNICA04rT7Wq1WyksKKTyeTkl+zm8RI7c6apTk51JSkEN5UQHlJYWUlxaB1VoVRSqyKT7DpzLNlaOzK14B7fEJDsM3uBM+waH4Bofh074TXv7Bdv30qKliTEV5GTtWzGP+5x9w4ngWAP6Bwcy8/g7GTbsCZ5e28eIvIiJiCwFB7Xnyrc+Y++LjbFz+M/M+eJmjSXuY9ZencG7C6GEwGPANDsU3OJQ+F0wHoKTgBId3buDg9jUc2rGesqJ8EtcvJnH9YlzcPOk5cgrR42biFNK9ySNSc1KfIAOQfjABgICOtrnM2z+oAwC5mVW7VbWVICNti2bK1KKtzpQ5m2Mph1j/6yLWLJlPVnoqULUDzbSrZjP1yhurFwdurmEGTp8xYwsWSyUVpcWUF/8WaYoLqSgtwlReiqmsBFNZKRXlJVU/Li/FXF5KpamCSrMJs6mcSpOJSlM5lWYTlWYTVqulaibMye8WC1arFYPBgNVqxWg0/jaLpuo6YqPREYPRiJOza9UsHGfXqhk5v/3cydkVV08f3Lz9cfPyrXEJVnNcN6epYkxxYT4blvzAyh8/Iy+3KqQFBIX8FmMux8m55VyOJm2LZsrYlmbKiDQOq9XK0h8+47O3XqCy0kyXHr256dFX8Qtsb++hAVW7+xw7sIuD29ewZ/1i8rN+36Y6oGNX+o6bSZ+xl+DhE9AidnSylfoGGYBPH7uetP07GXfDQwy9ZHaDx5KUsI03H7kF/+AOPPXh4jYVZTRTpu1QlKmFosyZWSwWtq79lW8/fJOjh6q2QPbw8mH6Nbdw0eXX4+ru0azDDDROnJGGaaoYk3poP6sXfMGWlT9jKq96kxXYvgMzb/gTYy+6FMcWtDaQtE2KMralKCPSuPbEbebfT95PYf4JvP0CmP3oy022zsz5slospCRuY9eKH9m3aVn11ttGB0eihk1kwORZhEZV7WDU2gNNfaNM7rFk3r9vOgaDkbvf+xVPv/ptvX2qovxcHrt2HAaDgQ9/2Y6La/P7MLGxKMq0HYoytVCUOTeLxcLmVb/wzYdvcuzIIQC8fPyYcd1tDJp0Bc4t4C9OxRn7aqoQU2k2sXPjSlYt+JKk+G3Vx8O79WTK5dczevIlODo6NclYRBpKUca2FGVEGl92eiqvPnYPR5L2YnRwYOYNf2LUpbfg0Axfe8tLikjcsISdy38gPSm++nhgWCQDJs+i95iLcXHzqD7emiJNQ2bJrPnyDTb8MJeuA0Zx1d//Y7Mx/f2aCyguyOO5D34gvHsvm523uVOUaTsUZWqhKHN+LJWVrP91Ed/9720yUqu2I/QLCOSi6+9ixKRLW8QCqYozTacpd1LKyUhj8/KfWLf4W/J+Wy/GaHRg6NhJTLn8enpED2zT14xLy6QoY1uKMiJNo6y0hA9feZp1SxcAEN69F9c88H+073T6+n7NRcbB3Wxf+g171v1cPXvG2dWd3qMvZsDkqwjq3OOMj2upoaa+UcZqsfCfu6dQcDydGfe/RM+RU2w2pjcevpmDu7fz58dfYtSk6TY7b3OnKNN2KMrUQlGmbirNZtYuXcB3/3ub7PSq63I7devNrHseI7xHHzuP7vwp0NhWU0YYgNLiIuLWLWPzrws5EB9bfdzL159RU6/kkiuuxT8wuEnHJGJLijK2pSgj0rQ2rVjMf195muLCfJycnZl1x0MMnHxV9U6TzVFZUT7xqxcS98vX5KYnVx8P7TGAAZOvosewSee8/LklRJqGzJJJjt/MV/+4DRd3L+6duxJHZ9u995v/7j9ZsfAbZt5wJ1fdfr/NztvcKcq0Hdp9SWzKwdGRsVMvY+SEi1k670u+++gtUg7s5qX7r2PkRVcw4+a/4PHbTk3N2R8jQnOKNE0dOFqKykoze7dvZPOvC9m5cSWmiqrfM4PBQPd+gxk2cSYDR0+ivZ+nnUcqIiLStg0bfxE9+g7k/ReeYOfmNXz61vPs2LSaO//+PGYXX3sP74xcPX0YPO16Bk29jiMJW4j75Wv2b11B6r44UvfFseLjl+k/6Sr6T7gCL/+g0x5/tuDRXGJNQ4IMwM7l3wPQc8RkmwaZQC8XOnaumkmVlnywlnuLtEyaKVMLzZRpmLzc43z2zkus/WU+AJ4+fsy85X6GTZzRrD8NqY9zhRuFlMZRWWkmKX4b29ctY+f65RScyKm+LTisC8MmXMLg8dPwD2xPgIcW75XWQzNlbEszZUTsw2q1smLB13z61r+oKC/D3dOL6++eQ6/R01rEpcWFuVnsXP49O3/9jsLc3y6RdnCkx7CJxEy5ho49+tfr19GUoaahMQYgPSmBjx+9BoDZL3xN+662W/cl0MuF3ds28c8HZtOufQfe+GaFzc7d3GmmTNuhKFMLRRnb2LNjK++//DTpR6oKd3iPPsy45X569Bti55FJS1NpNrF/Vyxxa5exY8NyivJPVN/m6ePHoAsuYuiE6XTq1qv6jZCCjLQ2ijK2pSgjYl+pyUm8+9yjHNpbtahu9KAR3Pbws+DRzs4jOz+VZhP7tyxn2+IvSd27vfp4cJee9LvwcnqNnIKrp21mitsq2NgixgBUlJbwxTO3kHFwN73HTGf6vc/Z5LxA9fbXJcVF3D51MFarlf/MW4ePf8v4/6KhFGXaDkWZWijK2I7ZbOK7zz/i58/+Q3lZKQBRA4cz8+b76NSt7aykLnVnNpnYt2MT29f+yq6NKyguzK++zcPLh34jxjNg9ER69BuKo1PNXRwUZKQ1UpSxLUUZEfurNJv5+duP+e6/b2CqKMfVzZ1Zf3qIfhde1qJmV2ccTmT7kq/Ys3YRZlPVLGoHJ2e6Dx5P9LiZhEcPaxEbYJyP8pIivn3uz6Tui8PFzZPbXpuHV4Dt1uw7GWUA/nbjxaQlJ/HQ8+8QM3K8zZ6jOVOUaTsUZWqhKGNbOcUV5OceZ8mX77Nu8XdUms0ADB43jUtm30tAcAc7j1CaC7PJxN64TWxfu5SdG1dQWlRYfZunjx/9R1zIwNGT6NY35ozbaSrGSGumKGNbijIizUf60cO8/8Lj7Nu1Dajaoenq2x8gpOfgFnFJ00mlhXnEr5pP/Kr5ZKccqD7u6RdEz5FT6DZoLKFRAzA6tMwlPsuK8vn6n3eRnhSPi4cXVz/2Hh26Rdvs/KcGGYB3n3+UNYt/ZOaNd3HVbffZ7HmaM0WZtkNRphaKMraXU1wBwPH0VBZ+8hZbV/4MgKOTE2MvuZYps27H3Uv/rdsis8lE4vaNxK1dys5NK2uEGG+/APqNvJCBoyYSGR2DwznexCjISGunKGNbijIizYvFYmHZj1/wzdzXKC0pBiCq3yCuvuNB/MN723l0dWO1Wsk8tIddq+azZ93PlBX9PtvX1cObiIFjiBx0AV36jcTVw8uOIz1/pYV5fPXsHWQeTsTNy5erH3/P5uvI/NGv87/iw1eeJnrwSB595b82e67mTFGm7VCUqYWiTOM4GWYAjuzfzQ8fvMqBXVsBcHX3YNAFFzHyostrrAsirVNlpZkDO2OJXb2YHeuXU1JUUH2bt187BoyawIDRk4jsPaDW6b6KMdJWKMrYlqKMSPNUkJfLgs/eZ9m8LzBVVL13HDBiLBff8lfahYTZeXR1ZzZVkLRtNQe2ruTg9jU1Ao3BYCS4SxRd+o2k2+CxhET0wdAML9sqzMnkm+fuIjvlAO4+/sx6Yi5Bnbvb9DnOFGUO79vNY7dfjrunN3MXbW4T/z5QlGk7FGVqoSjTOE6NMlD1KULClrXM+/C16sWAAUIjohg55TKGjJ+GWwv59EBqZ7FYOLRnB9tWL2H72qUU5uVW3+bjH8iAURMZOGYiXXv2P+/rrhVkpC1RlLEtRRmR5i0nM50fPn6H1Yt/wFJZiYODI6Mnz2DUpbMJ7NDJ3sOrF0ulmbT9O0mKXc2B2JXkHkuucbu7jz9d+o0kYuBoOvcejIevfRe3tVSaSVizkNVfvEFx3nE8/QKZ9eQHtAvtatPnOVOQgaq1KW+7aDAV5WW8+PFCQrt0s+nzNkeKMm2HokwtFGUazx/DDFTFmf27trJhyQ/ErfsVs6nqPk4ursSMnsSIKZfRtWe/VrNAWluTefQwG5fNZ8uKReQdz6w+7uHty4BRExl0wRQi+wys0++vYoy0RYoytqUoI9IypB05xKdvPseuLesAMBiNjLhwGmMuu4X2nWwbB5paQU4GRxK2cHDbag7tWE9FaXGN29uFRdKp92A69xlKWM+BuHv7Ncm4rBYLezctZe3Xb1eHo3ZhkVzxyJv4Bofa/PnOFmUAnnvwFhJiN3DzA08y8dJrbf7czY2iTNuhKFMLRZnGdaYwc1JRQR5bVvzE+sXf15g94+njR69BI+kzZAy9Ykbg7qnfl+astLiI7Wt+YeOy+Rzas6P6uKu7J/1HjCdm7BSi+g8942K9tVGQkbZKUca2FGVEWpb9CXHM++RddmxaDYDBYGDwmIkMnnwFkdGDW9RuTWdSaTJxNDGWw7s2cnjnRrKS9552H5+gjnTo1peQyD50iIwmuEsUTi5uNhuD1WLhYNw61nz5BllH9gHg5uXLsJm3MnDyLJxcbLOl9h+dK8rM++RdvvngdYZcMIn7n32jUZ6/OVGUaTsUZWqhKNP4zhVmoGr2zOHEXaxb/B071i+nrKSo+jaj0YGuvfvTZ8hoeg8aRUjnyBb/QtwaWCwWkuK3sXHZPOLWLqOivAyo+v3qNXgkwyfOoM+QMTg5n/2F91wUY6StU5SxLUUZkZbp0L4E5n/yHlvXLqs+FhgSyuAJMxg6YQa+7Wy3PbM9lRbmkbInliPxm0nZvZXjqQdPv5PBgG9QKAGhXWkX2pWAjl0J6NgFL/9g3H38cXQ693snU3kZ6QcTSN0bR9reOFL376C8uGrDBRc3TwZPv5HB027Axd2zMX6JwLmDDFTFuKf/fA0eXj68t2BDq585ryjTdijK1EJRpmnUFmZOqjSbOLh7Bwlb1pCwdS0ZKYdq3O7m4UXnHn3o0iOa8Ki+dImKxtOnaaZ3CpzIzmDTrwvYuHQex9NTq48Hh3VhxKSZDBl/MT4BgfU+v2KMSBVFGdtSlBFp2VIO7mPZj1+wYfkiSourPrwzGI30HDiSQeOm0XvIGFzdPew8StspKy4k49Bujh2IJz0pnmMH4inOO37Ox7h4eOHhE4CHTwAGowPmijLMpgoqTeWYKsopys3CUmmu8RhnNw8GTLqKYTNuwc3LtzF/SUDtUabSbOZPlwynpKiQf7z7NZG9+jX6mOxJUabtUJSphaJM0znfMHOq4xmp7N6yjoStaziwK7Z6RsapAkPCCI/qS+cevencrTehET1wcXW3xZCFqm2s4zevYsMvP7Jn2wasFgtQtYtWzAVTGD5xJl169q33KvkKMSKnU5SxLUUZkdahvKyUzat+YdVP37F3V2z1cSdnZ6JiRjJw9GSih4+v90zd5spqtVJSkMvx1EPkpB7k+NGD5KQdJvfYYYrzc0+LLWfj6RdIaNQAQqMGEtqjP0HhPTA6ODby6H9XW5QBeO3xe9m6ZhlX3HIvl82+uwlGZT+KMm2HokwtFGWaVn3CzEmVlWaOJSdxeO8ukhN3cXhfPJlHD592P4PRSEinrnTtNYCIXv2J6DOAgOCObWJrPVvKSjvCup+/Y9OvCyjKP1F9PDI6hhGTL2XAqAkNil+KMSJnpyhjW4oyIq1P+tHDrF0yn82rlpB+NLn6uLuXD4PHT2fYpJl0CG/9O/hYLRbKigsozsuhOL/qC8DRyRlHZ9fq7+4+/vgEdrDb++HzCTIAyxd8zX9fforu0QN5+u0vGnlU9qUo03YoytRCUabpNSTM/FFJYQHJ++JJ3hdPyoE9HDmwh/ycrNPu59suiMg+MXSLHkRkdAztw7oo0pxBRXkZO9YvZ/3i7zkQ//snUD4BQQybeAnDJ84gqGPnep9fIUbk/CjK2JaijEjrZbVaOXpoP5tWLmHtknnkZKVX39ape2+GTbqUgWOm4ObhZcdRyvlGmaxjqdw/awJGBwfe/2kz7h6Nt8aNvSnKtB2KMrVQlLEPW4aZP8rLySJ5bzwH98RxaPcOUpL2UGmuOa3T08ePbtExRPaJITI6ho7h3Vr9YmLnknpoP+uXfM+WFT9RWlS16JvBaKRXzEhGT7uS3oNH4VDP6a0KMSJ1pyhjW4oyIm2DpbKSnVvWsmrR92xfv5LK3y7rcXZxZcjYyQyedAXhUX3tPMq26XyjDMAD10wiMy2Fh557h5hR4xtxVPalKNN2KMrUQlHGvhozzpxUUVbK4X3xHNgVS1LCNg4n7sJUUV7jPm6eXkT0HkC36EF0i44hLLJnvSNEXTV2tDjbf+Oi/BNsX7eMjb/M48j+hOrj/kEhjJh8KcMmzcQ/sH2dnksBRsQ2FGVsS1FGpO3JP5HDuqULWLXoe9KSk6qPd42KZsoVNzB07BTyyvXPpKZSlyjz31eeZvn8r5h02XXMvv+JRhyVfSnKtB2KMrVQlGkemiLOnGSqqCAlaU9VpImP5eCeHZSXltS4j4ubO1179ieyz0C69u5PeI8+rWL9lKLCfLau+ZUNy38mYfsmLJWVADg4OtF32FhGTrmMqAHDap011Fx+PSKtlaKMbSnKiLRdVquVg4m7+HXel2xYvgizyQSAt18AF15yNZMuuw4fv4Dq+2cXlp/tVFJPdQkyAFtWL+X1J/5CSKcuvPLZ4kYalf0pyrQdijK1UJRpPpoyzJyqstJM6sF9HIiPJSl+G0kJ2ykpKqhxH6PRgS49+9Jr0Eh6DxpFaEQURqPxtHM1x1hRaTaza+t6Vi76ntj1K6k0m6pv69K9FyMnTGPMlJk13pCIiH0pytiWooyIQNXsmZULv+XX+V+Sm50JgIurGxMvvZZps24563shhZqGqWuUKS4s4I7pw7BaLLz57UoCgkMaaWT2pSjTdijK1EJRpnmyV6ABsFgsHEtO4kB8LIf27ODQnh2cyM6ocR9vX3+iBw2nZ//B9Ow3mI6duzarhYPLSkuIj93ItvUr2b5xFfm5x6tv69S1O8MvnMrwcVMICQu33yBF5KwUZWxLUUZETmU2m4hdu5yfvvwvh/bGA1WzpGdcdwdTr56Ns4vreZ1Hseb81DXKADx559Uk7dnJHXP+ydiplzfCqOxPUabtUJSphaJM82fPQHNy5kvWsVR2bl3Hzs3riI/dQNkfLnfy9vWnZ79B9Ow/iJ79BtOpa/cmXzg4OyON7RtWsX3DKnbHbcZU8ft/Ny8fX0ZNuoRxUy+nc2SPJh2XiNSdooxtKcqIyJlYrVZ2bFrD9x+9yaG9VevrBQSFcM2dDzH8wmkN/sBN0aZKfaLMV++9woLP5zJ22hXc8cj/NcKo7E9Rpu1QlKmFokzLZKtQU5/LjcymCvYn7GB33GYSd8ayP2HHaQsHu7q50ymiB50jetA5MopOEd3pFNEdN3fbbOtXVJBHctJejhzYS3JSIof27ib1lEXsAIJCQokZOY6BI8bSs99gnJyb36VVInJmijK2pSgjIuditVrZuOJnvnr3FY5nHgOgz6AR3PzAk406q7gtRJv6BBmAbetW8Mrf/0zH8Ehe+uQnG4+qeVCUaTsUZWqhKCMNZaqo4ODeBBJ3bmXvzlj2xW+ntKT4jPcN7hBGx/AIfPza4e3rh7evf9WXnz/evn64urljqjBRWlJMaUkRZSXFlBRXfS8syOPooQMkH0isfsNwKoPRSI/ogQwcPpaYkeOa3SVVInL+FGVsS1FGRM5HRXkZi776iHmfvoupohxHJycuue4OLrnuDpxd6hcX6qM1xZr6Rpn8EzncNWMkAHMXbcHDq/X93a0o03YoytRCUUZsrdJs5tjRw6Qc3MeRpH0cObiPI0l7Tkj0IwAAIABJREFUOXE8y6bPExQSSuduPQmPjKJzZBQ9+8Xg6e1r0+cQEftQlLEtRRkRqYvMtBQ+eu0f7NqyDoDgjp255aGniB40wq7jammxpr5B5qQHrplEZloKc17+gL5DRtloVM2Hokzb4WjvAYi0NQ6OjoR16UZYl26MnHBx9fGCvBOkHNpHekoyBXm51V+F+XnVP3Zycqa8rBQ3D09c3Txw9/DA1d0DN3cP3D286NC5a3WEaY2fGIiIiIjYW3DHTjzy0lw2r/qFT974J5lpR3j+wVu4YOplXH/3HLu9B/tj5GhpkaauInv1IzMthQO7d7TKKCNth6KMSDPh7etHn4HD6DNwmL2HIiIiIiLnYDAYGDZuCn2HjOKbua+x7McvWP3zD+zaso47Hvkn/YaOtvcQzzgTpbmEmobOkgHo1rs/65ctJGnPThuMSMR+jPYegIiIiIiISEvk7uHJ7Puf4Ik3P6N9aGdOHM/ihb/dzv9ef5byslJ7D+80gV4uNb7sNQZbCO/eC4C05IM2OZ+IvSjKiIiIiIiINEBU3xj+9dF8Jl9+AwBLf/icx267nEP7Euw8snNrykBj6+fx9PYBoKS40GbnFLEHRRkREREREZEGcnZx5ab7HuORl+fiGxDIsZRDPHXnLH7439uYzSZ7D69WjTmLpjGij7uHFwClxUVYLBabn1+kqSjKiIiIiIiI2Ei/IaN54X8LGDpuCpWVZr778E2e/vM1Le4ymz9GmrqElaa4TMrdsyrKWK1WykpLGuU5RJqCooyIiIiIiIgNefn48ZenX+PuJ17C3dObQ3sT+Pttl7H4m49b9KyOM4WahsSbhnBydsHB0QmA0iJdwiQtl6KMiIiIiIiIjRkMBkZOnM6LHy+k75BRmCrK+fSt53nugdlkHUu19/BaPIPBgLuHJ6B1ZaRlU5QRERERERFpJP6BwTzy0lxueehpXFzd2BO3hTk3X8LKn77DarXae3gt1qkzjsrLyuw4EpGGUZQRERERERFpRAaDgQkzZvGvj+YT1XcQZaUlzH3xcV6ecycnjmfZe3gt0v6EOArzT+Dm7kGniO72Ho5IvSnKiIiIiIiINIHgjp14/N8fc+1df8PRyYm4jat5ZPZ0Nq1YrFkzdbR+6QIAhoydjLOLq51HI1J/ijIiIiIiIiJNxOjgwMXX3Mo/535PeLdeFBXk88bTD/DynDvJPHbU3sNrEUwVFWxauQSAURMvsfNoRBpGUUZERERERKSJhXXtzj/e/YpLb/ozDo5Vs2YevvFifvz4P5gqKuw9vGZtx+Y1FBfm4x8YTM/+g+09HJEGUZQRERERERGxA0cnZ6689S/866P59B44DFNFOd/+99/MufkSErZttPfwmq2Tly6NmHAxRgcHO49GpGEUZUREREREROyoY+eu/P21j7j7iZfw8W9H+tFknnvgZl597B7Sjhyy9/CaldTDB9i+YSUAoybp0iVp+RRlRERERERE7MxgMDBy4nRe+Wwxky67DoPRSOzaX3lk9nQ+eOlJ7dIEZB1L5fmHbsVsMtFrwBA6RfSw95BEGkxRRkREREREpJlw9/Ri9v1P8MJH84kZOR5LZSUrFn7Dg9dO5pu5r1NSVGjvIdrF8cxjPP/QLZw4nkVYl27c/+wb9h6SiE0oyoiIiIiIiDQzoV268dDz7/Dkm58R2bsf5WWlzPv0Xe69chyfv/MiOZnp9h5ik0nas5Mn/nQVmWkpBIaEMueVD/D09rX3sERsQlFGRERERESkmYrqN4hn3vmK+599gw6dulJaXMSirz7kvlkTeOsfD3FoX4K9h9ioNixfxLN/uYH83ON0iujBE298gl+7YHsPS8RmHO09ABERERERETk7g8HAkAsmMWj0BHZsWs3PX/+PPXGb2fDrIjb8uogefWO44KLLGDJ2Mu4envYerk1YrVZ++N/bfP/RWwAMGDGWe558GTf31vHrEznJYLVarfYeRHNWUFCAj48PCclZeHl723s4IiIiFBYU0Cc8iPz8fLz12tRgJ1/r4/VaLyItyOF9u1n87cdsXP4zlZVmAJxdXBk0egKjp8wgOmZEi90uOv9EDv97/Vk2r1wCwLSrb+aaO//aYn899VFYUEC0XuvbBEWZWijKiIhIc6MoY1uKMiLSkuVmZ7L2l3msWTKP9JTD1cfdPb0YOm4K/YeOoXfM8BYxg6astITF33zMT19+QGlJMQ4Ojtz84JOMn36VvYfW5BRl2g5FmVooyoiISHOjKGNbijIi0hpYrVYOJu5i7S/z2bh8EaUlJVSaTQA4ODjSo+9A+g0dQ++BQ+kc2RMHx+azkkWl2cyqn7/n+4/eIi8nG4Dw7r245cGniOzVz86jsw9Fmbaj+fxJFBERERERkXoxGAxE9upHZK9+3HDPHPbEbSFu4yp2bFpLZtoR9sRtYU/cFgBcXN2I6NmX7tED6RE9kMhe/fDwavp/+JeXlRK79ld+/Pg/HEs5BEBgSChX3/EAw8ZdhNGofWmk9VOUERERERERaUUcnZzpO2QUfYeM4qb7ICP1CDs3r2XXlrXsi4+jpKiAPXGb2RO3ufoxgSGhhHfrSeduPau+R/bEPzAYg8Fg07GZzSYSYjeyYfkiYtcso6y0BAAvHz8uvekuJsyYhaOTs02fU6Q5U5QRERERERFpxdqHdqZ9aGcmX349FouFtOQk9sdvZ39CHPsT4shMSyE7PZXs9FS2rllW/ThXN3dCOnUhJKwLHX77HhAcgl9AID7+gTi7uJzzeS0WCzlZ6aSnHCb96GFSDu4ndu2vFOafqL5Pu/YdGDPlUqZeNRt3T69G+28g0lwpyoiIiIiIiLQRRqORsK7dCevanQtnzAKgqCCPIwf2kpyUyJEDiSQfSORYyiHKSks4vG83h/ftPuO53D298PUPrI4ppy5XWlFWSuaxo1SUl532OG9ff4aNv4gREy6mW+/+Np+NI9KStJgok5uby7333svChQsxGo1cfvnl/Pvf/8bTs/ZVxK1WK1OnTmXJkiX8+OOPzJw5swlGLCIiIiIi0vx5evvSO2YYvWOGVR8zmyrITDvKsaOHST9yiGNHD5NxNJnc45nk5x7HVFFBSVEhJUWF5zy3g6MTwR3C6NC5KyFhXeg1cAh9Bg5vVgsNi9hTi/mTcN1115Gens6yZcswmUzcfPPN3HHHHXzxxRe1Pvb1119XfRURERERETlPjk7OdAyPoGN4BIyueZvVaqWkqJC8nGzycrKr1oX5wz+3HB2dCOoQRlBIqAKMyDm0iD8diYmJLFmyhK1btzJo0CAA3nzzTaZOncrLL79Mhw4dzvrYHTt28MorrxAbG0tISEhTDVlERERERKRVMhgMeHh54+HlXRVtRKTeWsQeYxs3bsTX17c6yABMmDABo9HI5s2bz/q4kpISrr32Wt5++23at29/Xs9VXl5OQUFBjS8REREREREREVtrEVEmIyODoKCgGsccHR3x9/cnIyPjrI974IEHGDFiBDNmzDjv53r++efx8fGp/goLC6v3uEVERKTu3n77bcLDw3F1dWXo0KFs2bLlnPf/9ttviYqKwtXVlejoaH7++ecmGqmIiIhIw9g1ysyZMweDwXDOr71799br3AsWLGDFihW8/vrrdXrco48+Sn5+fvXX0aNH6/X8IiIiUndff/01Dz74IE899RTbt2+nX79+TJ48maysrDPef8OGDVxzzTXceuutxMXFMXPmTGbOnElCQkITj1xERESk7gzWU/cta2LZ2dnk5OSc8z5du3bls88+46GHHuLEid/3szebzbi6uvLtt99y6aWXnva4+++/nzfeeAOj8ffuVFlZidFoZPTo0axateq8xlhQUICPjw8JyVl4eXuf3y9MRESkERUWFNAnPIj8/Hy8W9lr09ChQxk8eDBvvfUWABaLhbCwMO69917mzJlz2v2vvvpqiouL+emnn6qPDRs2jP79+/Puu++e13OefK2P12u9iIg0E4UFBUS30td6qcmuC/0GBgYSGBhY6/2GDx9OXl4e27ZtIyYmBoAVK1ZgsVgYOnToGR8zZ84cbrvtthrHoqOjee2115g+fXrDBy8iIiI2VVFRwbZt23j00UerjxmNRiZMmMDGjRvP+JiNGzfy4IMP1jg2efJk5s2bd9bnKS8vp7y8vPrnWj9ORERE7KVFrCnTs2dPpkyZwu23386WLVtYv34999xzD7NmzareeSktLY2oqKjq687bt29Pnz59anwBdOrUiS5dutjt1yIiIiJndvz4cSorKwkODq5xPDg4+KxryGVkZNTp/qD140RERKT5aBFRBuDzzz8nKiqKCy+8kKlTpzJq1Cjef//96ttNJhP79u2jpKTEjqMUERGR5k7rx4mIiEhzYdfLl+rC39+fL7744qy3h4eHU9vyOHZcPkdERERq0a5dOxwcHMjMzKxxPDMzk/bt25/xMe3bt6/T/QFcXFxwcXFp+IBFREREGqjFzJQRERGR1s3Z2ZmYmBiWL19efcxisbB8+XKGDx9+xscMHz68xv0B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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(12, 6))\n", + "fig.suptitle(\"Cross-sections of the Posterior Distribution\", fontsize=16)\n", + "sns.kdeplot(x=hmc_samples[\"bA\"], y=hmc_samples[\"bR\"], ax=axs[0], shade=True, label=\"HMC\")\n", + "sns.kdeplot(x=svi_mvn_samples[\"bA\"], y=svi_mvn_samples[\"bR\"], ax=axs[0], label=\"SVI (Multivariate Normal)\")\n", + "axs[0].set(xlabel=\"bA\", ylabel=\"bR\", xlim=(-2.5, -1.2), ylim=(-0.5, 0.1))\n", + "sns.kdeplot(x=hmc_samples[\"bR\"], y=hmc_samples[\"bAR\"], ax=axs[1], shade=True, label=\"HMC\")\n", + "sns.kdeplot(x=svi_mvn_samples[\"bR\"], y=svi_mvn_samples[\"bAR\"], ax=axs[1], label=\"SVI (Multivariate Normal)\")\n", + "axs[1].set(xlabel=\"bR\", ylabel=\"bAR\", xlim=(-0.45, 0.05), ylim=(-0.15, 0.8))\n", + "handles, labels = axs[1].get_legend_handles_labels()\n", + "fig.legend(handles, labels, loc='upper right');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## References\n", + "[1] Hoffman, Matthew D., and Andrew Gelman. \"The No-U-turn sampler: adaptively setting path lengths in Hamiltonian Monte Carlo.\" Journal of Machine Learning Research 15.1 (2014): 1593-1623. https://arxiv.org/abs/1111.4246." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/bo.ipynb b/pyro/source/tutorial/source/bo.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..21d61c696302ae6b05c3898ba6529e49cb424634 --- /dev/null +++ b/pyro/source/tutorial/source/bo.ipynb @@ -0,0 +1,411 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Bayesian Optimization\n", + "\n", + "[Bayesian optimization](https://en.wikipedia.org/wiki/Bayesian_optimization) is a powerful strategy for minimizing (or maximizing) objective functions that are costly to evaluate. It is an important component of [automated machine learning](https://en.wikipedia.org/wiki/Automated_machine_learning) toolboxes such as [auto-sklearn](https://automl.github.io/auto-sklearn/stable/), [auto-weka](http://www.cs.ubc.ca/labs/beta/Projects/autoweka/), and [scikit-optimize](https://scikit-optimize.github.io/), where Bayesian optimization is used to select model hyperparameters. Bayesian optimization is used for a wide range of other applications as well; as cataloged in the review [2], these include interactive user-interfaces, robotics, environmental monitoring, information extraction, combinatorial optimization, sensor networks, adaptive Monte Carlo, experimental design, and reinforcement learning.\n", + "\n", + "## Problem Setup\n", + "\n", + "We are given a minimization problem\n", + "\n", + "$$ x^* = \\text{arg}\\min \\ f(x), $$\n", + "\n", + "where $f$ is a fixed objective function that we can evaluate pointwise. \n", + "Here we assume that we do _not_ have access to the gradient of $f$. We also\n", + "allow for the possibility that evaluations of $f$ are noisy.\n", + "\n", + "To solve the minimization problem, we will construct a sequence of points $\\{x_n\\}$ that converge to $x^*$. Since we implicitly assume that we have a fixed budget (say 100 evaluations), we do not expect to find the exact minumum $x^*$: the goal is to get the best approximate solution we can given the allocated budget.\n", + "\n", + "The Bayesian optimization strategy works as follows:\n", + "\n", + "1. Place a prior on the objective function $f$. Each time we evaluate $f$ at a new point $x_n$, we update our model for $f(x)$. This model serves as a surrogate objective function and reflects our beliefs about $f$ (in particular it reflects our beliefs about where we expect $f(x)$ to be close to $f(x^*)$). Since we are being Bayesian, our beliefs are encoded in a posterior that allows us to systematically reason about the uncertainty of our model predictions.\n", + "\n", + "2. Use the posterior to derive an \"acquisition\" function $\\alpha(x)$ that is easy to evaluate and differentiate (so that optimizing $\\alpha(x)$ is easy). In contrast to $f(x)$, we will generally evaluate $\\alpha(x)$ at many points $x$, since doing so will be cheap.\n", + "\n", + "3. Repeat until convergence:\n", + "\n", + " + Use the acquisition function to derive the next query point according to\n", + " $$ x_{n+1} = \\text{arg}\\min \\ \\alpha(x). $$\n", + "\n", + " + Evaluate $f(x_{n+1})$ and update the posterior.\n", + "\n", + "A good acquisition function should make use of the uncertainty encoded in the posterior to encourage a balance between exploration—querying points where we know little about $f$—and exploitation—querying points in regions we have good reason to think $x^*$ may lie. As the iterative procedure progresses our model for $f$ evolves and so does the acquisition function. If our model is good and we've chosen a reasonable acquisition function, we expect that the acquisition function will guide the query points $x_n$ towards $x^*$.\n", + "\n", + "In this tutorial, our model for $f$ will be a Gaussian process. In particular we will see how to use the [Gaussian Process module](http://docs.pyro.ai/en/0.3.1/contrib.gp.html) in Pyro to implement a simple Bayesian optimization procedure." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.gridspec as gridspec\n", + "import matplotlib.pyplot as plt\n", + "import torch\n", + "import torch.autograd as autograd\n", + "import torch.optim as optim\n", + "from torch.distributions import constraints, transform_to\n", + "\n", + "import pyro\n", + "import pyro.contrib.gp as gp\n", + "\n", + "assert pyro.__version__.startswith('1.9.1')\n", + "pyro.set_rng_seed(1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Define an objective function\n", + "\n", + "For the purposes of demonstration, the objective function we are going to consider is the [Forrester et al. (2008) function](https://www.sfu.ca/~ssurjano/forretal08.html):\n", + "\n", + "$$f(x) = (6x-2)^2 \\sin(12x-4), \\quad x\\in [0, 1].$$\n", + "\n", + "This function has both a local minimum and a global minimum. The global minimum is at $x^* = 0.75725$." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def f(x):\n", + " return (6 * x - 2)**2 * torch.sin(12 * x - 4)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's begin by plotting $f$." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "x = torch.linspace(0, 1, 100)\n", + "plt.figure(figsize=(8, 4))\n", + "plt.plot(x.numpy(), f(x).numpy())\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setting a Gaussian Process prior" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[Gaussian processes](https://en.wikipedia.org/wiki/Gaussian_process) are a popular choice for a function priors due to their power and flexibility. The core of a Gaussian Process is its covariance function $k$, which governs the similarity of $f(x)$ for pairs of input points. Here we will use a Gaussian Process as our prior for the objective function $f$. Given inputs $X$ and the corresponding noisy observations $y$, the model takes the form\n", + "\n", + "$$f\\sim\\mathrm{MultivariateNormal}(0,k(X,X)),$$\n", + "\n", + "$$y\\sim f+\\epsilon,$$\n", + "\n", + "where $\\epsilon$ is i.i.d. Gaussian noise and $k(X,X)$ is a covariance matrix whose entries are given by $k(x,x^\\prime)$ for each pair of inputs $(x,x^\\prime)$.\n", + "\n", + "We choose the [Matern](https://en.wikipedia.org/wiki/Mat%C3%A9rn_covariance_function) kernel with $\\nu = \\frac{5}{2}$ (as suggested in reference [1]). Note that the popular [RBF](https://en.wikipedia.org/wiki/Radial_basis_function_kernel) kernel, which is used in many regression tasks, results in a function prior whose samples are infinitely differentiable; this is probably an unrealistic assumption for most 'black-box' objective functions." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# initialize the model with four input points: 0.0, 0.33, 0.66, 1.0\n", + "X = torch.tensor([0.0, 0.33, 0.66, 1.0])\n", + "y = f(X)\n", + "gpmodel = gp.models.GPRegression(X, y, gp.kernels.Matern52(input_dim=1),\n", + " noise=torch.tensor(0.1), jitter=1.0e-4)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following helper function `update_posterior` will take care of updating our `gpmodel` each time we evaluate $f$ at a new value $x$." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def update_posterior(x_new):\n", + " y = f(x_new) # evaluate f at new point.\n", + " X = torch.cat([gpmodel.X, x_new]) # incorporate new evaluation \n", + " y = torch.cat([gpmodel.y, y]) \n", + " gpmodel.set_data(X, y)\n", + " # optimize the GP hyperparameters using Adam with lr=0.001\n", + " optimizer = torch.optim.Adam(gpmodel.parameters(), lr=0.001)\n", + " gp.util.train(gpmodel, optimizer)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Define an acquisition function" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are many reasonable options for the acquisition function (see references [1] and [2] for a list of popular choices and a discussion of their properties). Here we will use one that is 'simple to implement and interpret,' namely the 'Lower Confidence Bound' acquisition function. \n", + "It is given by\n", + "\n", + "$$\n", + "\\alpha(x) = \\mu(x) - \\kappa \\sigma(x)\n", + "$$\n", + "\n", + "where $\\mu(x)$ and $\\sigma(x)$ are the mean and square root variance of the posterior at the point $x$, and the arbitrary constant $\\kappa>0$ controls the trade-off between exploitation and exploration. This acquisition function will be minimized for choices of $x$ where either: i) $\\mu(x)$ is small (exploitation); or ii) where $\\sigma(x)$ is large (exploration). A large value of $\\kappa$ means that we place more weight on exploration because we prefer candidates $x$ in areas of high uncertainty. A small value of $\\kappa$ encourages exploitation because we prefer candidates $x$ that minimize $\\mu(x)$, which is the mean of our surrogate objective function. We will use $\\kappa=2$." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "def lower_confidence_bound(x, kappa=2):\n", + " mu, variance = gpmodel(x, full_cov=False, noiseless=False)\n", + " sigma = variance.sqrt()\n", + " return mu - kappa * sigma" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The final component we need is a way to find (approximate) minimizing points $x_{\\rm min}$ of the acquisition function. There are several ways to proceed, including gradient-based and non-gradient-based techniques. Here we will follow the gradient-based approach. One of the possible drawbacks of gradient descent methods is that the minimization algorithm can get stuck at a local minimum. In this tutorial, we adopt a (very) simple approach to address this issue:\n", + "\n", + "- First, we seed our minimization algorithm with 5 different values: i) one is chosen to be $x_{n-1}$, i.e. the candidate $x$ used in the previous step; and ii) four are chosen uniformly at random from the domain of the objective function. \n", + "- We then run the minimization algorithm to approximate convergence for each seed value. \n", + "- Finally, from the five candidate $x$s identified by the minimization algorithm, we select the one that minimizes the acquisition function.\n", + "\n", + "Please refer to reference [2] for a more detailed discussion of this problem in Bayesian Optimization." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "def find_a_candidate(x_init, lower_bound=0, upper_bound=1):\n", + " # transform x to an unconstrained domain\n", + " constraint = constraints.interval(lower_bound, upper_bound)\n", + " unconstrained_x_init = transform_to(constraint).inv(x_init)\n", + " unconstrained_x = unconstrained_x_init.clone().detach().requires_grad_(True)\n", + " minimizer = optim.LBFGS([unconstrained_x], line_search_fn='strong_wolfe')\n", + "\n", + " def closure():\n", + " minimizer.zero_grad()\n", + " x = transform_to(constraint)(unconstrained_x)\n", + " y = lower_confidence_bound(x)\n", + " autograd.backward(unconstrained_x, autograd.grad(y, unconstrained_x))\n", + " return y\n", + " \n", + " minimizer.step(closure)\n", + " # after finding a candidate in the unconstrained domain, \n", + " # convert it back to original domain.\n", + " x = transform_to(constraint)(unconstrained_x)\n", + " return x.detach()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The inner loop of Bayesian Optimization\n", + "\n", + "With the various helper functions defined above, we can now encapsulate the main logic of a single step of Bayesian Optimization in the function `next_x`:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "def next_x(lower_bound=0, upper_bound=1, num_candidates=5):\n", + " candidates = []\n", + " values = []\n", + "\n", + " x_init = gpmodel.X[-1:]\n", + " for i in range(num_candidates):\n", + " x = find_a_candidate(x_init, lower_bound, upper_bound)\n", + " y = lower_confidence_bound(x)\n", + " candidates.append(x)\n", + " values.append(y)\n", + " x_init = x.new_empty(1).uniform_(lower_bound, upper_bound)\n", + "\n", + " argmin = torch.min(torch.cat(values), dim=0)[1].item()\n", + " return candidates[argmin]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Running the algorithm" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To illustrate how Bayesian Optimization works, we make a convenient plotting function that will help us visualize our algorithm's progress." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "def plot(gs, xmin, xlabel=None, with_title=True):\n", + " xlabel = \"xmin\" if xlabel is None else \"x{}\".format(xlabel)\n", + " Xnew = torch.linspace(-0.1, 1.1, 100)\n", + " ax1 = plt.subplot(gs[0])\n", + " ax1.plot(gpmodel.X.numpy(), gpmodel.y.numpy(), \"kx\") # plot all observed data\n", + " with torch.no_grad():\n", + " loc, var = gpmodel(Xnew, full_cov=False, noiseless=False)\n", + " sd = var.sqrt()\n", + " ax1.plot(Xnew.numpy(), loc.numpy(), \"r\", lw=2) # plot predictive mean\n", + " ax1.fill_between(Xnew.numpy(), loc.numpy() - 2*sd.numpy(), loc.numpy() + 2*sd.numpy(),\n", + " color=\"C0\", alpha=0.3) # plot uncertainty intervals\n", + " ax1.set_xlim(-0.1, 1.1)\n", + " ax1.set_title(\"Find {}\".format(xlabel))\n", + " if with_title:\n", + " ax1.set_ylabel(\"Gaussian Process Regression\")\n", + "\n", + " ax2 = plt.subplot(gs[1])\n", + " with torch.no_grad():\n", + " # plot the acquisition function\n", + " ax2.plot(Xnew.numpy(), lower_confidence_bound(Xnew).numpy())\n", + " # plot the new candidate point\n", + " ax2.plot(xmin.numpy(), lower_confidence_bound(xmin).numpy(), \"^\", markersize=10,\n", + " label=\"{} = {:.5f}\".format(xlabel, xmin.item())) \n", + " ax2.set_xlim(-0.1, 1.1)\n", + " if with_title:\n", + " ax2.set_ylabel(\"Acquisition Function\")\n", + " ax2.legend(loc=1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our surrogate model `gpmodel` already has 4 function evaluations at its disposal; however, we have yet to optimize the GP hyperparameters. So we do that first. Then in a loop we call the `next_x` and `update_posterior` functions repeatedly. The following plot illustrates how Gaussian Process posteriors and the corresponding acquisition functions change at each step in the algorith. Note how query points are chosen both for exploration and exploitation." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(12, 30))\n", + "outer_gs = gridspec.GridSpec(5, 2)\n", + "optimizer = torch.optim.Adam(gpmodel.parameters(), lr=0.001)\n", + "gp.util.train(gpmodel, optimizer)\n", + "for i in range(8):\n", + " xmin = next_x() \n", + " gs = gridspec.GridSpecFromSubplotSpec(2, 1, subplot_spec=outer_gs[i])\n", + " plot(gs, xmin, xlabel=i+1, with_title=(i % 2 == 0))\n", + " update_posterior(xmin)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Because we have assumed that our observations contain noise, it is improbable that we will find the exact minimizer of the function $f$. Still, with a relatively small budget of evaluations (8) we see that the algorithm has converged to very close to the global minimum at $x^* = 0.75725$. \n", + "\n", + "While this tutorial is only intended to be a brief introduction to Bayesian Optimization, we hope that we have been able to convey the basic underlying ideas. Consider watching the lecture by Nando de Freitas [3] for an excellent exposition of the basic theory. Finally, the reference paper [2] gives a review of recent research on Bayesian Optimization, together with many discussions about important technical details." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## References\n", + "\n", + "[1] `Practical bayesian optimization of machine learning algorithms`,
    \n", + "Jasper Snoek, Hugo Larochelle, and Ryan P. Adams\n", + "\n", + "[2] `Taking the human out of the loop: A review of bayesian optimization`,
    \n", + "Bobak Shahriari, Kevin Swersky, Ziyu Wang, Ryan P. Adams, and Nando De Freitas\n", + "\n", + "[3] [Machine learning - Bayesian optimization and multi-armed bandits](https://www.youtube.com/watch?v=vz3D36VXefI)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.10" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/pyro/source/tutorial/source/boosting_bbvi.ipynb b/pyro/source/tutorial/source/boosting_bbvi.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..7d0a13ada7c99906b6461a789ff32d91cf411039 --- /dev/null +++ b/pyro/source/tutorial/source/boosting_bbvi.ipynb @@ -0,0 +1,605 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Boosting Black Box Variational Inference\n", + "## Introduction\n", + "This tutorial demonstrates how to implement boosting black box Variational Inference [1] in Pyro. In boosting Variational Inference [2], we approximate a target distribution with an iteratively selected mixture of densities. In cases where a single denisity provided by regular Variational Inference doesn't adequately approximate a target density, boosting VI thus offers a simple way of getting more complex approximations. We show how this can be implemented as a relatively straightforward extension of Pyro's SVI.\n", + "\n", + "## Contents\n", + "* [Theoretical Background](#theoretical-background)\n", + " - [Variational Inference](#variational-inference)\n", + " - [Boosting Black Box Variational Inference](#bbbvi)\n", + "* [BBBVI in Pyro](#bbbvi-pyro)\n", + " - [The Model](#the-model)\n", + " - [The Guide](#the-guide)\n", + " - [The Relbo](#the-relbo)\n", + " - [The Approximation](#the-approximation)\n", + " - [The Greedy Algorithm](#the-greedy-algorithm)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Theoretical Background \n", + "\n", + "### Variational Inference \n", + "For an introduction to regular Variational Inference, we recommend having a look at [the tutorial on SVI in Pyro](https://pyro.ai/examples/svi_part_i.html) and this excellent review [3].\n", + "\n", + "Briefly, Variational Inference allows us to find approximations of probability densities which are intractable to compute analytically. For instance, one might have observed variables $\\textbf{x}$, latent variables $\\textbf{z}$ and a joint distribution $p(\\textbf{x}, \\textbf{z})$. One can then use Variational Inference to approximate $p(\\textbf{z}|\\textbf{x})$. To do so, one first chooses a set of tractable densities, a variational family, and then tries to find the element of this set which most closely approximates the target distribution $p(\\textbf{z}|\\textbf{x})$.\n", + "This approximating density is found by maximizing the Evidence Lower BOund (ELBO):\n", + "$$ \\mathbb{E}_q[\\log p(\\mathbf{x}, \\mathbf{z})] - \\mathbb{E}_q[\\log q(\\mathbf{z})]$$\n", + "\n", + "where $q(\\mathbf{z})$ is the approximating density.\n", + "\n", + "### Boosting Black Box Variational Inference \n", + "\n", + "In boosting black box Variational inference (BBBVI), we approximate the target density with a mixture of densities from the variational family:\n", + "$$q^t(\\mathbf{z}) = \\sum_{i=1}^t \\gamma_i s_i(\\mathbf{z})$$\n", + "\n", + "$$\\text{where} \\sum_{i=1}^t \\gamma_i =1$$\n", + "\n", + "and $s_t(\\mathbf{z})$ are elements of the variational family.\n", + "\n", + "The components of the approximation are selected greedily by maximising the so-called Residual ELBO (RELBO) with respect to the next component $s_{t+1}(\\mathbf{z})$:\n", + "\n", + "$$\\mathbb{E}_s[\\log p(\\mathbf{x},\\mathbf{z})] - \\lambda \\mathbb{E}_s[\\log s(\\mathbf{z})] - \\mathbb{E}_s[\\log q^t(\\mathbf{z})]$$\n", + "\n", + "Where the first two terms are the same as in the ELBO and the last term is the cross entropy between the next component $s_{t+1}(\\mathbf{z})$ and the current approximation $q^t(\\mathbf{z})$.\n", + "\n", + "It's called *black box* Variational Inference because this optimization does not have to be tailored to the variational family which is being used. By setting $\\lambda$ (the regularization factor of the entropy term) to 1, standard SVI methods can be used to compute $\\mathbb{E}_s[\\log p(\\mathbf{x}, \\mathbf{z})] - \\lambda \\mathbb{E}_s[\\log s(\\mathbf{z})]$. See the explanation of [the section on the implementation of the RELBO](#the-relbo) below for an explanation of how we compute the term $- \\mathbb{E}_s[\\log q^t(\\mathbf{z})]$. Imporantly, we do not need to make any additional assumptions about the variational family that's being used to ensure that this algorithm converges. \n", + "\n", + "In [1], a number of different ways of finding the mixture weights $\\gamma_t$ are suggested, ranging from fixed step sizes based on the iteration to solving the optimisation problem of finding $\\gamma_t$ that will minimise the RELBO. Here, we used the fixed step size method.\n", + "For more details on the theory behind boosting black box variational inference, please refer to [1]." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## BBBVI in Pyro " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To implement boosting black box variational inference in Pyro, we need to consider the following points:\n", + "1. The approximation components $s_{t}(\\mathbf{z})$ (guides).\n", + "2. The RELBO.\n", + "3. The approximation itself $q^t(\\mathbf{z})$.\n", + "4. Using Pyro's SVI to find new components of the approximation.\n", + "\n", + "We will illustrate these points by looking at simple example: approximating a bimodal posterior.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from collections import defaultdict\n", + "from functools import partial\n", + "\n", + "import numpy as np\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "import scipy.stats\n", + "import torch\n", + "import torch.distributions.constraints as constraints\n", + "from matplotlib import pyplot\n", + "from pyro.infer import SVI, Trace_ELBO\n", + "from pyro.optim import Adam\n", + "from pyro.poutine import block, replay, trace\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The Model \n", + "\n", + "Boosting BBVI is particularly useful when we want to approximate multimodal distributions. In this tutorial, we'll thus consider the following model:\n", + " \n", + " $$\\mathbf{z} \\sim \\mathcal{N}(0,5)$$\n", + " $$\\mathbf{x} \\sim \\mathcal{N}(\\mathbf{z}^2, 0.1)$$\n", + " \n", + "Given the set of iid. observations $\\text{data} ~ \\mathcal{N}(4, 0.1)$, we thus expect $p(\\mathbf{z}|\\mathbf{x})$ to be a bimodal distributions with modes around $-2$ and $2$.\n", + " \n", + "In Pyro, this model takes the following shape:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "def model(data):\n", + " prior_loc = torch.tensor([0.])\n", + " prior_scale = torch.tensor([5.])\n", + " z = pyro.sample('z', dist.Normal(prior_loc, prior_scale))\n", + " scale = torch.tensor([0.1])\n", + "\n", + " with pyro.plate('data', len(data)):\n", + " pyro.sample('x', dist.Normal(z*z, scale), obs=data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The Guide \n", + "\n", + "Next, we specify the guide which in our case will make up the components of our mixture. Recall that in Pyro the guide needs to take the same arguments as the model which is why our guide function also takes the data as an input. \n", + "\n", + "We also need to make sure that every `pyro.sample()` statement from the model has a matching `pyro.sample()` statement in the guide. In our case, we include `z` in both the model and the guide.\n", + "\n", + "In contrast to regular SVI, our guide takes an additional argument: `index`. Having this argument allows us to easily create new guides in each iteration of the greedy algorithm. Specifically, we make use of `partial()` from the [functools library](https://docs.python.org/3.7/library/functools.html) to create guides which only take `data` as an argument. The statement `partial(guide, index=t)` creates a guide that will take only `data` as an input and which has trainable parameters `scale_t` and `loc_t`.\n", + "\n", + "Choosing our variational distribution to be a Normal distribution parameterized by $loc_t$ and $scale_t$ we get the following guide:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "def guide(data, index):\n", + " scale_q = pyro.param('scale_{}'.format(index), torch.tensor([1.0]), constraints.positive)\n", + " loc_q = pyro.param('loc_{}'.format(index), torch.tensor([0.0]))\n", + " pyro.sample(\"z\", dist.Normal(loc_q, scale_q))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The RELBO \n", + "\n", + "We implement the RELBO as a function which can be passed to Pyro's SVI class in place of ELBO to find the approximation components $s_t(z)$. Recall that the RELBO has the following form:\n", + "$$\\mathbb{E}_s[\\log p(\\mathbf{x},\\mathbf{z})] - \\lambda \\mathbb{E}_s[\\log s(\\mathbf{z})] - \\mathbb{E}_s[\\log q^t(\\mathbf{z})]$$\n", + "\n", + "Conveniently, this is very similar to the regular ELBO which allows us to reuse Pyro's existing ELBO. Specifically, we compute \n", + "$$\\mathbb{E}_s[\\log p(x,z)] - \\lambda \\mathbb{E}_s[\\log s]$$\n", + "\n", + "using Pyro's `Trace_ELBO` and then compute \n", + "$$ - \\mathbb{E}_s[\\log q^t]$$\n", + "\n", + "using Poutine. For more information on how this works, we recommend going through the Pyro tutorials [on Poutine](https://pyro.ai/examples/effect_handlers.html) and [custom SVI objectives](https://pyro.ai/examples/custom_objectives.html)." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "def relbo(model, guide, *args, **kwargs):\n", + " approximation = kwargs.pop('approximation')\n", + "\n", + " # We first compute the elbo, but record a guide trace for use below.\n", + " traced_guide = trace(guide)\n", + " elbo = pyro.infer.Trace_ELBO(max_plate_nesting=1)\n", + " loss_fn = elbo.differentiable_loss(model, traced_guide, *args, **kwargs)\n", + "\n", + " # We do not want to update parameters of previously fitted components\n", + " # and thus block all parameters in the approximation apart from z.\n", + " guide_trace = traced_guide.trace\n", + " replayed_approximation = trace(replay(block(approximation, expose=['z']), guide_trace))\n", + " approximation_trace = replayed_approximation.get_trace(*args, **kwargs)\n", + "\n", + " relbo = -loss_fn - approximation_trace.log_prob_sum()\n", + " \n", + " # By convention, the negative (R)ELBO is returned.\n", + " return -relbo" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The Approximation " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our implementation of the approximation $q^t(z) = \\sum_{i=1}^t \\gamma_i s_i(z)$ consists of a list of components, i.e. the guides from the greedy selection steps, and a list containing the mixture weights of the components. To sample from the approximation, we thus first sample a component according to the mixture weights. In a second step, we draw a sample from the corresponding component.\n", + "\n", + "Similarly as with the guide, we use `partial(approximation, components=components, weights=weights)` to get an approximation function which has the same signature as the model." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "def approximation(data, components, weights):\n", + " assignment = pyro.sample('assignment', dist.Categorical(weights))\n", + " result = components[assignment](data)\n", + " return result " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The Greedy Algorithm " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We now have all the necessary parts to implement the greedy algorithm. First, we initialize the approximation:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "initial_approximation = partial(guide, index=0)\n", + "components = [initial_approximation]\n", + "weights = torch.tensor([1.])\n", + "wrapped_approximation = partial(approximation, components=components, weights=weights)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then we iteratively find the $T$ components of the approximation by maximizing the RELBO at every step:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Parameters of component 1:\n", + "loc = -2.0068717002868652\n", + "scale = 0.01799079217016697\n", + ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Parameters of component 2:\n", + "loc = 2.0046799182891846\n", + "scale = 0.06008879840373993\n" + ] + } + ], + "source": [ + "# clear the param store in case we're in a REPL\n", + "pyro.clear_param_store()\n", + "\n", + "# Sample observations from a Normal distribution with loc 4 and scale 0.1\n", + "n = torch.distributions.Normal(torch.tensor([4.0]), torch.tensor([0.1]))\n", + "data = n.sample((100,))\n", + "\n", + "#T=2\n", + "smoke_test = ('CI' in os.environ)\n", + "n_steps = 2 if smoke_test else 12000\n", + "pyro.set_rng_seed(2)\n", + "n_iterations = 2\n", + "locs = [0]\n", + "scales = [0]\n", + "for t in range(1, n_iterations + 1):\n", + "\n", + " # Create guide that only takes data as argument\n", + " wrapped_guide = partial(guide, index=t)\n", + " losses = []\n", + "\n", + " adam_params = {\"lr\": 0.01, \"betas\": (0.90, 0.999)}\n", + " optimizer = Adam(adam_params)\n", + "\n", + " # Pass our custom RELBO to SVI as the loss function.\n", + " svi = SVI(model, wrapped_guide, optimizer, loss=relbo)\n", + " for step in range(n_steps):\n", + " # Pass the existing approximation to SVI.\n", + " loss = svi.step(data, approximation=wrapped_approximation)\n", + " losses.append(loss)\n", + "\n", + " if step % 100 == 0:\n", + " print('.', end=' ')\n", + "\n", + " # Update the list of approximation components.\n", + " components.append(wrapped_guide)\n", + "\n", + " # Set new mixture weight.\n", + " new_weight = 2 / (t + 1)\n", + "\n", + " # In this specific case, we set the mixture weight of the second component to 0.5.\n", + " if t == 2:\n", + " new_weight = 0.5\n", + " weights = weights * (1-new_weight)\n", + " weights = torch.cat((weights, torch.tensor([new_weight])))\n", + "\n", + " # Update the approximation\n", + " wrapped_approximation = partial(approximation, components=components, weights=weights)\n", + "\n", + " print('Parameters of component {}:'.format(t))\n", + " scale = pyro.param(\"scale_{}\".format(t)).item()\n", + " scales.append(scale)\n", + " loc = pyro.param(\"loc_{}\".format(t)).item()\n", + " locs.append(loc)\n", + " print('loc = {}'.format(loc))\n", + " print('scale = {}'.format(scale))" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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x0T//v1FQECACA8PF5mZmZrW7LbndKSoqEikpaWJsLAw4evrKzp16qRp1242m0X37t3FzTffLC5duqR57quvvioAiLVr12quVbXVfJMmTeyu27dvX3H77bfbHa/acv369eti+vTpIjIyUvj7+4tevXqJ/Px80bdvX9G3b1/Nczds2CA6dOggDAaDJo6qreaFqGhbPm3aNBEVFSV8fHxE27Ztxfz584XFYtGMAyAmTZrkME7b1ujO1PT+Onvd1VFievfdd0Xbtm2F0WgUcXFxDveM2rNnj0hOThaBgYEiICBA9OvXT2zfvl0z5oUXXhA9evQQISEhwt/fX9x2223ixRdf1OxRZTabxeTJk0Xz5s2FJEl2beffeustER8fL/z9/UVQUJDo1KmTeOqpp0RBQYFLr9HR+3ns2DExaNAgERISIvz8/ESPHj3Exx9/rBmjtJq33XerJq5+7xW9evUSAMTYsWOdnvO3vv6qMjMz1S0Fqt6q/twTkfeRhGgkq46JiDzo5MmTiI2Nxfz58/HEE09UO3bUqFFYv349rly5coOio4ZCkiRMmjTJbuocERF5B675IiIiIiIiugGYfBEREREREd0ATL6IiIiIiIhuAK75IiIiIiIiugFY+SIiIiIiIroBmHwRERERERHdANxkuZYsFgsKCgoQFBQESZI8HQ4REREREXmIEAK//voroqKiqt1MnslXLRUUFCA6OtrTYRARERERUQNx5swZ3HzzzU4fZ/JVS0FBQQAq3uCmTZt6OBoiIiIiIvKU4uJiREdHqzmCM0y+akmZati0aVMmX0REREREVONyJDbcICIiIiIiugGYfBEREREREd0ATL6IiIiIiIhuACZfRERERERENwCTLyIiIiIiohugQSRfOTk5MJlM8PPzQ0JCAnbt2uV07N///nfcddddaNasGZo1a4akpCS78UIIzJw5E5GRkfD390dSUhKOHDmiGfPzzz/jkUceQdOmTRESEoIxY8bgypUr9fL6iIiIiIiIPJ58rV27FhkZGcjMzMSePXvQpUsXJCcn4/z58w7Hb9myBcOHD8fmzZuRn5+P6Oho9O/fH2fPnlXHvPzyy3jttdewdOlS7Ny5E02aNEFycjKuX7+ujnnkkUdw4MABfPbZZ/j444+xbds2jB8/vt5fLxEREREReSdJCCE8GUBCQgK6d++OxYsXAwAsFguio6MxefJkPPPMMzU+X5ZlNGvWDIsXL8bIkSMhhEBUVBSmT5+OJ554AgBw+fJlhIeHY+XKlRg2bBi+//57dOjQAV999RW6desGAMjNzcWAAQPw448/IioqqsbrFhcXIzg4GJcvX+Y+X0REREREXszV3MCjla+ysjLs3r0bSUlJ6jGdToekpCTk5+e7dI6SkhKUl5cjNDQUAHDixAkUFhZqzhkcHIyEhAT1nPn5+QgJCVETLwBISkqCTqfDzp07HV6ntLQUxcXFmhsREREREZGrPJp8Xbx4EbIsIzw8XHM8PDwchYWFLp3j6aefRlRUlJpsKc+r7pyFhYVo0aKF5nGDwYDQ0FCn183KykJwcLB6i46Odik+IiIibyYsFk+HQETUYHh8zddvMW/ePKxZswb/+te/4OfnV6/XmjFjBi5fvqzezpw5U6/XIyIi+r0rKbmI+1d2wXOrk2oeTETkBQyevHhYWBj0ej2Kioo0x4uKihAREVHtcxcsWIB58+Zh06ZN6Ny5s3pceV5RUREiIyM15+zatas6pmpDD7PZjJ9//tnpdY1GI4xGo+svjoiIyMudPP0FzuqB69ddm81CRNTYebTy5evri/j4eOTl5anHLBYL8vLykJiY6PR5L7/8MubOnYvc3FzNui0AiI2NRUREhOacxcXF2Llzp3rOxMREXLp0Cbt371bHfP7557BYLEhISKirl0dEROTVZLkcAGCWPBwIEVED4dHKFwBkZGQgNTUV3bp1Q48ePZCdnY2rV68iLS0NADBy5Ei0bNkSWVlZAIC//e1vmDlzJlavXg2TyaSu0QoMDERgYCAkScLUqVPxwgsvoG3btoiNjcXzzz+PqKgoDBw4EADQvn173HfffRg3bhyWLl2K8vJypKenY9iwYS51OiQiIqKayZayin89HAcRUUPh8eRr6NChuHDhAmbOnInCwkJ07doVubm5asOM06dPQ6erLNAtWbIEZWVlGDRokOY8mZmZmDVrFgDgqaeewtWrVzF+/HhcunQJvXv3Rm5urmZd2KpVq5Ceno57770XOp0OKSkpeO211+r/BRMREXkJs1L58nAcREQNhcf3+fq94j5fRERE1dux+02M+24xDELgm1HfeTocIqJ687vY54uIiIgaL9mirPmS2HKeiAhMvoiIiKieKMkXAMhymQcjISJqGJh8ERERUb1Q1nwBgCyXejASIqKGgckXERER1QuzTbXLbL7mwUiIiBoGJl9ERERUL2RLZZ9Ds/m6ByMhImoYmHwRERFRvTBrki+u+SIiYvJFRERE9cK24YZZZuWLiIjJFxEREdULs23yxWmHRERMvoiIiKh+2K75Yqt5IiImX0RERFRPNGu+2GqeiIjJFxEREdUPWdgmX6x8EREx+SIiIqJ6YZZtux2y8kVExOSLiIhcsvn4fjy3aQUsFounQ6HfCW3li8kXEZHB0wEQEdHvwzNbZ6FE9wM6fdcGQzvf5elw6HfAbJHV+7JcXs1IIiLvwMoXERG5pMxyFQBw/urPHo6Efi9kUZl8sfJFRMTki4iIXFbxQbpclmsYR1TBttV8OZMvIiImX0RE5BqBirVettUMouqYbX5WbBMxIiJvxeSLiIhcoiRf5fwQTS4ya6YdstU8ERGTLyIicomSfNk2USCqjsyGG0REGky+iIjINZJ12iGTL3KRpuGGhZUvIiImX0RE5BJWvshdttMOy1n5IiJi8kVERK5i8kXuMYvKDbllC5MvIiImX0RE5KKKpMss2HCDXCPbJF9mJl9EREy+iIjIRZIAoP1ATVQdma3miYg0PJ585eTkwGQywc/PDwkJCdi1a5fTsQcOHEBKSgpMJhMkSUJ2drbdGOWxqrdJkyapY+6++267xydMmFAvr4+IqLEQSuVL5odoco2ZlS8iIg2PJl9r165FRkYGMjMzsWfPHnTp0gXJyck4f/68w/ElJSVo1aoV5s2bh4iICIdjvvrqK5w7d069ffbZZwCAwYMHa8aNGzdOM+7ll1+u2xdHRNToVFS+LKx8kYu0yReTdiIijyZfCxcuxLhx45CWloYOHTpg6dKlCAgIwPLlyx2O7969O+bPn49hw4bBaDQ6HNO8eXNERESot48//hitW7dG3759NeMCAgI045o2bVrnr4+IqFGxtprnmi9ylQwmX0REtjyWfJWVlWH37t1ISkqqDEanQ1JSEvLz8+vsGu+++y5Gjx4NSZI0j61atQphYWHo2LEjZsyYgZKSkmrPVVpaiuLiYs2NiMhbWCwWSOo+X6x8kWtkVr6IiDQMnrrwxYsXIcsywsPDNcfDw8Nx6NChOrnGhx9+iEuXLmHUqFGa4yNGjEBMTAyioqKwb98+PP300zh8+DA++OADp+fKysrC7Nmz6yQuIqLfG7NNwiWz8kUuMgsLYP3bJ5MvIiIPJl83wrJly3D//fcjKipKc3z8+PHq/U6dOiEyMhL33nsvjh07htatWzs814wZM5CRkaF+XVxcjOjo6PoJnIiogSmXbbvWsfJFrjFb1wkCTNqJiAAPJl9hYWHQ6/UoKirSHC8qKnLaTMMdp06dwqZNm6qtZikSEhIAAEePHnWafBmNRqfrzIiIGrsyubJTnW37cKLqyEKw8kVEZMNja758fX0RHx+PvLw89ZjFYkFeXh4SExN/8/lXrFiBFi1a4IEHHqhx7N69ewEAkZGRv/m6RESNUZmlMuGyMPkiF8k2lS8zu2QSEXl22mFGRgZSU1PRrVs39OjRA9nZ2bh69SrS0tIAACNHjkTLli2RlZUFoKKBxsGDB9X7Z8+exd69exEYGIg2bdqo57VYLFixYgVSU1NhMGhf4rFjx7B69WoMGDAAN910E/bt24dp06ahT58+6Ny58w165UREvy9l5sqqBStf5CpN8sXKFxGRZ5OvoUOH4sKFC5g5cyYKCwvRtWtX5Obmqk04Tp8+DZ2usjhXUFCAuLg49esFCxZgwYIF6Nu3L7Zs2aIe37RpE06fPo3Ro0fbXdPX1xebNm1SE73o6GikpKTgueeeq78XSkT0O1du88GZ+3yRq8o1lS8m7UREHm+4kZ6ejvT0dIeP2SZUAGAymSCEcDjWVv/+/Z2Oi46OxtatW92Ok4jIm3HNF9WGLGwbbvDnhojIo5ssExHR70OZbDvtkNPHyDUyK19ERBpMvoiIqEa2reY57ZBcZZtuseEGERGTLyIickG5bLvmixUMcg3XfBERaTH5IiKiGrHyRbXByhcRkRaTLyIiqpG22yErGOQaWbK5z+SLiIjJFxER1azcdpNl8EM0uYaVLyIiLSZfRERUI9tNli3sdkguMmvuM/kiImLyRURENbLdo4lrvshVZptph2YX9ukkImrsmHwREVGNbPf54rRDchWnHRIRaTH5IiKiGsk2a74EG26QCyyyGRapsvRlu+EyEZG3YvJFREQ10lS+WMEgF8jmUs3XXPNFRMTki4iIXGC2bTUPVr6oZma5SvLFNV9EREy+iIioZmbbaYesYJAL5KrJl4fiICJqSJh8ERFRjcq55ovcZJ98sfJFRMTki4iIamTmJsvkpnLzdc3XbLhBRMTki4iIXFBu03CD0w7JFbJcpvma0w6JiJh8ERGRC2w3WWbyRa6wS74kJwOJiLwIky8iIqqRmWu+yE1suEFEZI/JFxER1ch2k2Ww8kUuMMvl2q89FAcRUUPC5IuIiGpUbuGaL3KPuUrDDU47JCJi8kVERC6wWCoTLiZf5AplzZdk3VyZk1WJiJh8ERGRC8oFK1/kHtlSMe3Qz9ph3iJJsMicfEhE3o3JFxER1Ui2qXxBYvJFNVPWfPnaHJPNpY4HExF5CY8nXzk5OTCZTPDz80NCQgJ27drldOyBAweQkpICk8kESZKQnZ1tN2bWrFmQJElzu+222zRjrl+/jkmTJuGmm25CYDCG5WIAACAASURBVGAgUlJSUFRUVOevjYiosTBr1nxxAhnVzGztdmi02Vu5XL7moWiIiBoGjyZfa9euRUZGBjIzM7Fnzx506dIFycnJOH/+vMPxJSUlaNWqFebNm4eIiAin57399ttx7tw59fbFF19oHp82bRo++ugjrFu3Dlu3bkVBQQEefvjhOn1tRESNiW3yxW6H5Ap12iEqO22Yy5l8EZF382jytXDhQowbNw5paWno0KEDli5dioCAACxfvtzh+O7du2P+/PkYNmwYjEaj0/MaDAZERESot7CwMPWxy5cvY9myZVi4cCHuuecexMfHY8WKFdi+fTt27NhR56+RiKgxsGgSLiZfVDOzteGGr1T5UaPqxstERN7GY8lXWVkZdu/ejaSkpMpgdDokJSUhPz//N537yJEjiIqKQqtWrfDII4/g9OnT6mO7d+9GeXm55rq33XYbbrnllmqvW1paiuLiYs2NiMhbaKYdcs0XuUC2/sz4QoLO2vGwavt5IiJv47Hk6+LFi5BlGeHh4Zrj4eHhKCwsrPV5ExISsHLlSuTm5mLJkiU4ceIE7rrrLvz6668AgMLCQvj6+iIkJMSt62ZlZSE4OFi9RUdH1zpGIqLfG4tg5Yvco1S+DJBgsB5j5YuIvJ3HG27Utfvvvx+DBw9G586dkZycjI0bN+LSpUt47733ftN5Z8yYgcuXL6u3M2fO1FHEREQNn9li22SDyRfVTLZ2O9RLOuitTTfKWfkiIi9nqHlI/QgLC4Ner7frMlhUVFRtMw13hYSE4NZbb8XRo0cBABERESgrK8OlS5c01a+arms0GqtdZ0ZE1JhZhE3yJQnnA4mszNaGG3qbypfSAZGIyFt5rPLl6+uL+Ph45OXlqccsFgvy8vKQmJhYZ9e5cuUKjh07hsjISABAfHw8fHx8NNc9fPgwTp8+XafXJSJqTGSbypckWWCxsPpF1VPWfBkkHacdEhFZeazyBQAZGRlITU1Ft27d0KNHD2RnZ+Pq1atIS0sDAIwcORItW7ZEVlYWgIomHQcPHlTvnz17Fnv37kVgYCDatGkDAHjiiSfw0EMPISYmBgUFBcjMzIRer8fw4cMBAMHBwRgzZgwyMjIQGhqKpk2bYvLkyUhMTETPnj098C4QETV8cpW9vcwWC3x1jW7mOtUhs6Ui0dJDgsFaLGXDDSLydh5NvoYOHYoLFy5g5syZKCwsRNeuXZGbm6s24Th9+jR0Nr/cCwoKEBcXp369YMECLFiwAH379sWWLVsAAD/++COGDx+On376Cc2bN0fv3r2xY8cONG/eXH3eokWLoNPpkJKSgtLSUiQnJ+ONN964MS+aiOh3SLZok69SuRy+Bo/+CqEGzlHli9MOicjbuf2bMzMzE6NHj0ZMTEydBJCeno709HSHjykJlcJkMkGI6tcarFmzpsZr+vn5IScnBzk5OS7HSUTkzbTdDgGzLDsZSVRB2Z5AL+mgt260rKwDIyLyVm7PGdmwYQNat26Ne++9F6tXr0ZpKf+KRUTU2GkabqCi8kVUHW3ly5p8mbnmi4i8m9vJ1969e/HVV1/h9ttvx+OPP46IiAg89thj+Oqrr+ojPiIiagDkKslXucyGG1Q9WVgrX7BpuGFh8kVE3q1Wq6Xj4uLw2muvoaCgAMuWLcOPP/6IXr16oXPnznj11Vdx+fLluo6TiIg8qGrlq4yVL6qBWVYqX3oYJGvli90OicjL/aZWVUIIlJeXo6ysDEIINGvWDIsXL0Z0dDTWrl1bVzESEZGHVa18lVk/WBM5YxaVa74M1o8bTL6IyNvVKvnavXs30tPTERkZiWnTpiEuLg7ff/89tm7diiNHjuDFF1/ElClT6jpWIiLyEFGl4Ua5hckXVU/pkGnQ6dlwg4jIyu3kq1OnTujZsydOnDiBZcuW4cyZM5g3b566zxYADB8+HBcuXKjTQImIyHOq7vNVZmbyRdWT1W6HehgkVr6IiIBatJofMmQIRo8ejZYtWzodExYWBouFi7GJiBqLqpUvs4Wt5ql6yrRD2zVfMiumROTl3K58KWu7qrp27RrmzJlTJ0EREVHDYt9wgx+iqXpm68+Mds0Xpx0SkXdzO/maPXs2rly5Yne8pKQEs2fPrpOgiIioYbGAlS9yj7LmS6+zmXbIVvNE5OVqVfmSrNMHbH377bcIDQ2tk6CIiKhhYeWL3CVbp6oaJAP0avLFnxsi8m4ur/lq1qwZJEmCJEm49dZbNQmYLMu4cuUKJkyYUC9BEhGRZ4kqla9ymZUvqp6SaBlsG26w2yEReTmXk6/s7GwIITB69GjMnj0bwcHB6mO+vr4wmUxITEyslyCJiMizLEIGbCY9sNU81URd86UzwCDpK44x+SIiL+dy8pWamgoAiI2NxZ133gkfH596C4qIiBqWqpUvrvmimijTDm3XfMn8uSEiL+dS8lVcXIymTZsCAOLi4nDt2jVcu3bN4VhlHBERNR4WbrJMblKSLx+dDytfRERWLiVfzZo1w7lz59CiRQuEhIQ4bLihNOKQuQ6AiKjREVU2WS7nJstUg8pph3ro1eSLnxGIyLu5lHx9/vnnaifDzZs312tARETU8FSddigLfoim6pmVaYeSzZovwaSdiLybS8lX3759Hd4nIiLvULXyVcYKBtVAhrLmywCDruLjBlvNE5G3c3ufr9zcXHzxxRfq1zk5OejatStGjBiBX375pU6DIyKihkFAaL5m4wSqiXbNFxtuEBEBtUi+nnzySRQXFwMA9u/fj4yMDAwYMAAnTpxARkZGnQdIRESeJ6pMMyznJstUA3Xaoc6nsvLF6apE5OVcbjWvOHHiBDp06AAAeP/99/HQQw/hpZdewp49ezBgwIA6D5CIiDyPrebJXWbbaYcSky8iIqAWlS9fX1+UlJQAADZt2oT+/fsDAEJDQ9WKGBERNS5K8iVExa8NJl9UE1lUTFXV6wzQc80XERGAWlS+evfujYyMDPTq1Qu7du3C2rVrAQA//PADbr755joPkIiIGgJr5UvoAcnCbodUI9m6TtBH72sz7dBS3VOIiBo9tytfixcvhsFgwPr167FkyRK0bNkSAPCf//wH9913X50HSEREnqd0O5SEDwBWMKhmSsMNvb5yzReTdiLydm5Xvm655RZ8/PHHdscXLVpUJwEREVEDJCndDpXpY/wQTdUrhzLtkA03iIgUble+AMBiseCHH37AF198gW3btmlu7srJyYHJZIKfnx8SEhKwa9cup2MPHDiAlJQUmEwmSJKE7OxsuzFZWVno3r07goKC0KJFCwwcOBCHDx/WjLn77rshSZLmNmHCBLdjJyLyFpWVL67dIdfIqFzzZdBZK6acdkhEXs7tyteOHTswYsQInDp1CkJo932RJAmy7PpftdauXYuMjAwsXboUCQkJyM7ORnJyMg4fPowWLVrYjS8pKUGrVq0wePBgTJs2zeE5t27dikmTJqF79+4wm8149tln0b9/fxw8eBBNmjRRx40bNw5z5sxRvw4ICHA5biIi71PxoVkHA2RUTikjckZpuOGjN1Y23ODPDRF5ObeTrwkTJqBbt2745JNPEBkZCUmSan3xhQsXYty4cUhLSwMALF26FJ988gmWL1+OZ555xm589+7d0b17dwBw+DhQsQm0rZUrV6JFixbYvXs3+vTpox4PCAhARERErWMnIvIuFR+aJVRUMGRWvqgGsmbaIStfRERALaYdHjlyBC+99BLat2+PkJAQBAcHa26uKisrw+7du5GUlFQZjE6HpKQk5OfnuxuWU5cvXwZQ0Qrf1qpVqxAWFoaOHTtixowZavt8Z0pLS1FcXKy5ERF5CyFZmydY92sq55ovqkG59V+93hd6a/Ilg8kXEXk3tytfCQkJOHr0KNq0afObLnzx4kXIsozw8HDN8fDwcBw6dOg3nVthsVgwdepU9OrVCx07dlSPjxgxAjExMYiKisK+ffvw9NNP4/Dhw/jggw+cnisrKwuzZ8+uk7iIiH5/lGmHSuWLyRdVr6LyJcGg94GPnpUvIiKgFsnX5MmTMX36dBQWFqJTp07w8fHRPN65c+c6C+63mjRpEr777jt88cUXmuPjx49X73fq1AmRkZG49957cezYMbRu3drhuWbMmIGMjAz16+LiYkRHR9dP4EREDY1a+bImX+xaRzVQfkIqph36AgDMEM6fQETkBdxOvlJSUgAAo0ePVo9JkgQhhFsNN8LCwqDX61FUVKQ5XlRUVCdrsdLT0/Hxxx9j27ZtNW7+nJCQAAA4evSo0+TLaDTCaDT+5riIiH6frOt3JO7XRK6RrUvCDQY/6PVK0s7KFxF5N7eTrxMnTtTJhX19fREfH4+8vDwMHDgQQMU0wby8PKSnp9f6vEIITJ48Gf/617+wZcsWxMbG1vicvXv3AgAiIyNrfV0iosbKLMuQJCX54rRDco3tmi+D3td6jJUvIvJubidfMTExdXbxjIwMpKamolu3bujRoweys7Nx9epVtfvhyJEj0bJlS2RlZQGoaNJx8OBB9f7Zs2exd+9eBAYGqmvQJk2ahNWrV2PDhg0ICgpCYWEhACA4OBj+/v44duwYVq9ejQEDBuCmm27Cvn37MG3aNPTp06dBTZkkImooymw6Gxp0voCFFQyqmZKeG/Q+avIlM/kiIi9Xq02W33nnHfTq1QtRUVE4deoUACA7OxsbNmxw6zxDhw7FggULMHPmTHTt2hV79+5Fbm6u2oTj9OnTOHfunDq+oKAAcXFxiIuLw7lz57BgwQLExcVh7Nix6pglS5bg8uXLuPvuuxEZGane1q5dC6Ci4rZp0yb0798ft912G6ZPn46UlBR89NFHtXkriIgavTKzTfKlrvliq3mqnrrmS2+0aTXP5IuIvJvbla8lS5Zg5syZmDp1Kl588UV1jVdISAiys7Pxpz/9ya3zpaenO51muGXLFs3XJpPJbmPnqmp6PDo6Glu3bnUrRiIib1Zus5bXoPMB5Ipp4kTVUdd86f1g0FesmWbDDSLydm5Xvl5//XX8/e9/x1//+lfo9Xr1eLdu3bB///46DY6IiDyvVK6scvlYu9ax4QZVR1gsMEsV2Zde71vZcMOTQRERNQBuJ18nTpxAXFyc3XGj0YirV6/WSVBERNRwmG2SL18mX+QCWS5T7xsMvmrliw03iMjbuZ18xcbGqt0BbeXm5qJ9+/Z1EhQRETUcSuVLCAkGXcWMByZfVB1ZLlXv6/VGGAzWaYeSpyIiImoY3F7zlZGRgUmTJuH69esQQmDXrl345z//iaysLPzjH/+ojxiJiMiDytXKlwSdVJF8WZh8UTVkc2XyZTD42XQ7JCLybm4nX2PHjoW/vz+ee+45lJSUYMSIEYiKisKrr76KYcOG1UeMRETkQeXKnl5Cp26ybGGreaqG2bbyZTDaNNwgIvJubidfAPDII4/gkUceQUlJCa5cuYIWLVrUdVxERNRAVLaa10Gvq5itzmmHVB1N8qXzhZ6VLyIiALVMvhQBAQEICAioq1iIiKgBMlv39JI0lS9+jCbnlGmHOiGg0xtgMPgB4JovIiKXkq+4uDhIkmv/Y+7Zs+c3BURERA1LmWxf+eK0Q6qO0u1Q+ZBh0CvJlwRhsUDSud3vi4ioUXAp+Ro4cKB6//r163jjjTfQoUMHJCYmAgB27NiBAwcOYOLEifUTJREReYxZ3WRZB73ScIMTyKgayrRDvbWzvMHgqz4my2Uw6Pw8ERYRkce5lHxlZmaq98eOHYspU6Zg7ty5dmPOnDlTt9EREZHHlVlsKl/sdkguMFunHaqVL4OfzWPXYPBh8kVE3sntuv+6deswcuRIu+N/+ctf8P7779dJUERE1HAolS9J6GDQVXycFpx2SNVQph3qrV8bDP42j5U6eAYRkXdwO/ny9/fHl19+aXf8yy+/hJ8f/5JFRNTYlNus+VI3Wea0Q6qG2WJNvqzTDvXWVvMAYDZf90RIREQNgtvdDqdOnYrHHnsMe/bsQY8ePQAAO3fuxPLly/H888/XeYBERORZZusUQwl6GKzTDln5ourIcjmAyg8ZSqt5AChn8kVEXszt5OuZZ55Bq1at8Oqrr+Ldd98FALRv3x4rVqzAkCFD6jxAIiLyLKXyJUGCXqc03GDyRc4pDTcMqOiULOl0MAgBsySpUxKJiLxRrfb5GjJkCBMtIiIvYbbYVL50SuWL0w7JOaXypbc5ZhAV+3xx2iEReTNutEFERNUqt3Y7lKTK5Iut5qk66povVO4Rqvy1V+mESETkjZh8ERFRtRxNO+SaL6qOuuZLqky+lCqYbOG0QyLyXky+iIioWrKlItGSoIeP0mqea76oGrJFabhhU/mydj5kww0i8mZMvoiIqFrqtEPoKitfnHZI1TDL9tMO1cqXtSpGROSN3E6+Nm/eXB9xEBFRAyXbNNzwUZMvVr7IObNFabhRmXz5WO+buckyEXkxt5Ov++67D61bt8YLL7yAM2fO1EdMRETUgFQ23JAqG25wzRdVo3LNV+XHDDbcICKqRfJ19uxZpKenY/369WjVqhWSk5Px3nvvoayMC2iJiBoj2Zpo6WzWfIGVL6qGbE3YtQ03JOtjnHZIRN7L7eQrLCwM06ZNw969e7Fz507ceuutmDhxIqKiojBlyhR8++239REnERF5iNrtUNLDR6803OCaL3LO0bRDJREr57RDIvJiv6nhxh133IEZM2YgPT0dV65cwfLlyxEfH4+77roLBw4ccOkcOTk5MJlM8PPzQ0JCAnbt2uV07IEDB5CSkgKTyQRJkpCdnV2rc16/fh2TJk3CTTfdhMDAQKSkpKCoqMj1F05E5EVk64bKOugqN1mG8GRI1MCpyZdm2qFS+TJ7JCYiooagVslXeXk51q9fjwEDBiAmJgaffvopFi9ejKKiIhw9ehQxMTEYPHhwjedZu3YtMjIykJmZiT179qBLly5ITk7G+fPnHY4vKSlBq1atMG/ePERERNT6nNOmTcNHH32EdevWYevWrSgoKMDDDz9cm7eCiKjRMysNNySdTat5Vr7IOXXaodrjsDL5UjohEhF5I7eTr8mTJyMyMhKPPvoobr31VnzzzTfIz8/H2LFj0aRJE5hMJixYsACHDh2q8VwLFy7EuHHjkJaWhg4dOmDp0qUICAjA8uXLHY7v3r075s+fj2HDhsFoNNbqnJcvX8ayZcuwcOFC3HPPPYiPj8eKFSuwfft27Nixw923g4io0VMqX3roYdArH6a55oucc7TmS2m+weSLiLyZ28nXwYMH8frrr6OgoADZ2dno2LGj3ZiwsLAaW9KXlZVh9+7dSEpKqgxGp0NSUhLy8/PdDcvlc+7evRvl5eWaMbfddhtuueWWaq9bWlqK4uJizY2IyBtoKl/Kmi+JyRc552jaIRtuEBHVIvnKzMzE4MGD7SpPZrMZ27ZtAwAYDAb07du32vNcvHgRsiwjPDxcczw8PByFhYXuhuXyOQsLC+Hr64uQkBC3rpuVlYXg4GD1Fh0dXasYiYh+b8zWKoZO0qtrvlj5ouooCbtespl2aE3EyrnJMhF5MbeTr379+uHnn3+2O3758mX069evToJqiGbMmIHLly+rN+5xRkTeQtnTSw89fPVsNU81U6YdahpuKNMOLZx2SETey1DzEC0hBCSbOdyKn376CU2aNHH5PGFhYdDr9XZdBouKipw206iLc0ZERKCsrAyXLl3SVL9quq7RaHS6zoyIqDGznXZoUCoZnHZI1ZBFRfLlY1P50lv/3stuh0TkzVxOvpRugJIkYdSoUZpERJZl7Nu3D3feeafLF/b19UV8fDzy8vIwcOBAAIDFYkFeXh7S09NdPo+754yPj4ePjw/y8vKQkpICADh8+DBOnz6NxMTEWl2XiKgxs4jKKWS+eh8AgGDli6phdlD58pF0gADMnHZIRF7M5eQrODgYQEXlKygoCP7+/upjvr6+6NmzJ8aNG+fWxTMyMpCamopu3bqhR48eyM7OxtWrV5GWlgYAGDlyJFq2bImsrCwAFQ01Dh48qN4/e/Ys9u7di8DAQLRp08alcwYHB2PMmDHIyMhAaGgomjZtismTJyMxMRE9e/Z0K34iIm+gVL50kh4GvfJhmskXOWcW9mu+lERMqYoREXkjl5OvFStWAABMJhOeeOIJt6YYOjN06FBcuHABM2fORGFhIbp27Yrc3Fy1Ycbp06eh01X+1aygoABxcXHq1wsWLMCCBQvQt29fbNmyxaVzAsCiRYug0+mQkpKC0tJSJCcn44033vjNr4eIqDGyrXwZrZUvTjuk6shKww2dbcONivtmTjskIi/m9pqvzMzMOg0gPT3d6TRDJaFSmEwmCCF+0zkBwM/PDzk5OcjJyXErViIib6RUKiRJp1a+JCZfVA1lbzgfyT75KmereSLyYi4lX3fccQfy8vLQrFkzxMXFOWy4odizZ0+dBUdERJ4nK90ObdZ8AYBZlm02XSaqVO20Q2tVjIjIG7mUfP3pT39SG2wojSyIiMg7yA4abgBAqdnM5IscUhtu6Co/Zhis9zntkIi8mUvJl+1Uw7qedkhERA2bxVJZ+fKxSbbKLWYA3IKD7NlWSxXKFEQ23CAib+b2JstERORdlA/LOp0ORn3l3+xKZX6IJsfUNV82lS89G24QEblW+WrWrFm167xs/fzzz78pICIialgsUKoYBs2H6XKZa3fIMbNS+XIw7bBc8OeGiLyXS8lXdnZ2fcdBREQNVGWreR2MhspfG2XcLJecUBtu2LSaV+6z4QYReTOXkq/U1NT6joOIiBoo2z2bbBtsMPkiZyrXfNlUvqz3zax8EZEXcyn5Ki4uRtOmTdX71VHGERFR46BMO1SmjQmhgyRZYJa51xc5piRfPrrK7pjKlFUzG24QkRdzec3XuXPn0KJFC4SEhDhc/yWEgCRJkLkGgIioUVGmHeqUHk1CB0gWlLLyRU44WvOl3FcSMyIib+RS8vX5558jNDQUALB58+Z6DYiIiBoWi9BWvpRGuax8kTPVNtzgmi8i8mIuJV99+/Z1eJ+IiBo/pfJl0FUkXZI1+eKaL3JGVjpk2kw7VCtfYNJORN7LpeSrql9++QXLli3D999/DwDo0KED0tLS1OoYERE1HmqreaWKIayVLzZOICdkYQEk22opYLAmYmZOOyQiL+b2Jsvbtm2DyWTCa6+9hl9++QW//PILXnvtNcTGxmLbtm31ESMREXmQsGk1X0GpfLFxAjlmhgAAGPS+6jEfJl9ERO5XviZNmoShQ4diyZIl0FtbDsuyjIkTJ2LSpEnYv39/nQdJRESeU7Xbobrmi2t3yAmzEIBUteFGRfLFhhtE5M3crnwdPXoU06dPVxMvANDr9cjIyMDRo0frNDgiIvI8oa75qvh/X7JOOyxn5YucUNZ1GfSVa76U+2au+SIiL+Z28nXHHXeoa71sff/99+jSpUudBEVERA2H08oXtxYhJ2TrtEPbhhuVa76ER2IiImoIXJp2uG/fPvX+lClT8Pjjj+Po0aPo2bMnAGDHjh3IycnBvHnz6idKIiLyGAFlzZe18gU9BIByCytf5Jjyk2G75kuv55ovIiKXkq+uXbtCkiQIm79WPfXUU3bjRowYgaFDh9ZddERE5HGV+3wpyZcEgA03yDlZKJUvm4Yb1kSM0w6JyJu5lHydOHGivuMgIqIGSqBq8mVttsSGG+REZbdD232+rA03wGmHROS9XEq+YmJi6jsOIiJqoJRphz567ZovTjskZ5S03LbypUxB5JovIvJmtdpkGQAOHjyI06dPo6ysTHP8j3/8428OioiIGg4hlE2WKypeOomt5ql6FZUvCQaDbfJltHmMiMg7uZ18HT9+HH/+85+xf/9+zTowSapYAyCz+xURUaOiTDv0VacdKpUv/n9PjqmVL0cNNzwQDxFRQ+F2q/nHH38csbGxOH/+PAICAnDgwAFs27YN3bp1w5YtW+ohRCIi8iRRpdU813xRTcwVf4/VdDv0YeWLiMj9yld+fj4+//xzhIWFQafTQafToXfv3sjKysKUKVPwzTff1EecRETkIcqaL4Ne23CDa77IGUdrviobbhAReS+3K1+yLCMoKAgAEBYWhoKCAgAVTTkOHz5cqyBycnJgMpng5+eHhIQE7Nq1q9rx69atw2233QY/Pz906tQJGzdu1DwuSZLD2/z589UxJpPJ7nHuU0ZE5EhF5ctHqXwp08xZ+SInlJ8Mg8GoHjMY/ABUVsWIiLyR28lXx44d8e233wIAEhIS8PLLL+PLL7/EnDlz0KpVK7cDWLt2LTIyMpCZmYk9e/agS5cuSE5Oxvnz5x2O3759O4YPH44xY8bgm2++wcCBAzFw4EB899136phz585pbsuXL4ckSUhJSdGca86cOZpxkydPdjt+IqLGrmqreZ218sWGG+SMkmDZrvmqbLhBROS93E6+nnvuOVgsFb+I58yZgxMnTuCuu+7Cxo0b8dprr7kdwMKFCzFu3DikpaWhQ4cOWLp0KQICArB8+XKH41999VXcd999ePLJJ9G+fXvMnTsXd9xxBxYvXqyOiYiI0Nw2bNiAfv362SWHQUFBmnFNmjRxO34iokZPqlr5YvJF1VMSLCXhAioTMSZfROTN3E6+kpOT8fDDDwMA2rRpg0OHDuHixYs4f/487rnnHrfOVVZWht27dyMpKakyIJ0OSUlJyM/Pd/ic/Px8zXglJmfji4qK8Mknn2DMmDF2j82bNw833XQT4uLiMH/+fJjNzn8llJaWori4WHMjIvIGSuXLR69Uvip+dXDaITlikc0Q1qmptpUvH047JCKq/T5fAHDmzBkAQHR0dK2ef/HiRciyjPDwcM3x8PBwHDp0yOFzCgsLHY4vLCx0OP7tt99GUFCQmjAqpkyZgjvuuAOhoaHYvn07ZsyYgXPnzmHhwoUOz5OVlYXZs2e7+tKIiBoRa6t5vVL5su7zJZh8kT3ZXKrehyk57AAAIABJREFU10w7tCZf/KkhIm/mduXLbDbj+eefR3BwMEwmE0wmE4KDg/Hcc8+hvLy8PmL8TZYvX45HHnkEfn5+muMZGRm4++670blzZ0yYMAGvvPIKXn/9dZSWljo8z4wZM3D58mX1piSeRESNn3bNl55rvqgaZrny96jBx1+9ryRiFkmCRebkQyLyTm5XviZPnowPPvgAL7/8MhITEwFUTAWcNWsWfvrpJyxZssTlc4WFhUGv16OoqEhzvKioCBEREQ6fExER4fL4//3vfzh8+DDWrl1bYywJCQkwm804efIk2rVrZ/e40WiE0Wh08EwiosZNSBZIqFL5EoCZrebJAbP5mnrfds2XUvlSxvjqg25oXEREDYHbla/Vq1dj5cqVePTRR9G5c2d07twZjz76KJYtW4bVq1e7dS5fX1/Ex8cjLy9PPWaxWJCXl6cmdlUlJiZqxgPAZ5995nD8smXLEB8fjy5dutQYy969e6HT6dCiRQu3XgMRUeNXpduhteGGzGmH5IAsl6n39bYNN2zazttWx4iIvInblS+j0QiTyWR3PDY2Fr6+vvZPqEFGRgZSU1PRrVs39OjRA9nZ2bh69SrS0tIAACNHjkTLli2RlZUFAHj88cfRt29fvPLKK3jggQewZs0afP3113jrrbc05y0uLsa6devwyiuv2F0zPz8fO3fuRL9+/RAUFIT8/HxMmzYNf/nLX9CsWTO3XwMRUaNm7Xboa6j4laG0mmfyRY7YJlY6XeXHDB995RREc/k1EBF5I7eTr/T0dMydOxcrVqxQp+GVlpbixRdfRHp6utsBDB06FBcuXMDMmTNRWFiIrl27Ijc3V22qcfr0aeh0lQW6O++8E6tXr8Zzzz2HZ599Fm3btsWHH36Ijh07as67Zs0aCCEwfPhwu2sajUasWbMGs2bNQmlpKWJjYzFt2jRkZGS4HT8RUeOnbTWvk5RuhxaPRUQNl1L5MggByeb3NytfREQuJl9VOwVu2rQJN998szqd79tvv0VZWRnuvffeWgWRnp7uNHHbsmWL3bHBgwdj8ODB1Z5z/PjxGD9+vMPH7rjjDuzYscPtOImIvI3FYoEkCQCVa74qpx1yzRfZq0y+tMd1egN0QsAiSZqOiERE3sSl5Cs4OFjzdUpKiubr2raaJyKihq3Mpiudr94HAKBXki9WvsgBs/k6AFgnp2oZAJTZjCEi8jYuJV8rVqyo7ziIiKgBKrVJvnz0FVPI9Kx8UTXM1sqXo+RLLwBIlWOIiLxNrTdZvnDhAg4fPgwAaNeuHZo3b15nQRERUcNgu5eX0Vr5UjZZtrDhBjmgTjt08JhyjGu+iMhbud1q/urVqxg9ejQiIyPRp08f9OnTB1FRURgzZgxKSkrqI0YiIvKQUnO5et+gt26ybK18mZl8kQPO1nwBgI/1X047JCJv5XbylZGRga1bt+Kjjz7CpUuXcOnSJWzYsAFbt27F9OnT6yNGIiLyEEeVLyX5sgiu+SJ7SlXL6bRDaPcCIyLyJm5PO3z//fexfv163H333eqxAQMGwN/fH0OGDMGSJUvqMj4iIvKgUnPlui6DrsqaLwsrX2TPbKmoluoh2T3GaYdE5O3crnyVlJSoe3DZatGiBacdEhE1Mkq3QyF06p6Lyr9c80WOyHJF8mVwmHxVHFMSNCIib+N28pWYmIjMzExcv145X/vatWuYPXs2EhMT6zQ4IiLyrHKluiUqP0jrpYr6hczkixyQLUryZU+phpnNnHZIRN7J7WmH2dnZuO++++w2Wfbz88Onn35a5wESEZHnlKut5iv/Vqdnt0Oqhtm6gbJeclD5kiQAgtMOichruZ18derUCUeOHMGqVatw6NAhAMDw4cPxyCOPwN/fv84DJCIiz3GYfOnYcIOcM1sqfmaqW/Mlc9ohEXkpt5Kv8vJyPProo3j++ecxbty4+oqJiIgaCGXNlyRsK19K8sXKF9mrnHboKPnSAbBwk2Ui8lpurfny8fHB+++/X1+xEBFRA1PZat5B8gVWvsie2nBDsv+IYbBORWTyRUTeyu2GGwMHDsSHH35YH7EQEVEDU+Zg2qFBVzFpgpUvcsRsqUisHE071Ft/jtjtkIi8ldtrvtq2bYs5c+b8f3t3Hh1lfe8P/P3MklnIRghJiAKJiICyJlymSW3RS34mlns1rRchTUVTCtYSROOhNlxlrQ11iQtwpFYEPUpRfsei10uxMRA9lRgkCdeCwA+4QMoyCUuzTpZZvr8/ZkmGeWaSYGZJ5v06J6fJ83yeJ995/HYyHz7fBV9++SXS09MxbNgwt/OPP/74gDWOiIiCy7mXl9Rjy1yVa6l5Vr7Ik2vOl8/KF5MvIgpP/U6+tm7ditjYWFRXV6O6utrtnCRJTL6IiIaQLscHafSc8+WsfIGVL/Jk9bnJssIRY/E4R0QUDvqdfJ05c8Yf7SAiohBksTorX55LzQtWvkiGM7FSS0qPcypJAYjuoYlEROGm33O+ehJCQAgxUG0hIqIQY3Z8kJbk5nyx8kUyuocdyu3z5ZjzxWGHRBSmbij52rp1KyZPngytVgutVovJkyfjzTffHOi2ERFRkMlVvlSOfb5Y+SI5zsU05OZ8OY9ZBIcdElF46veww1WrVqG0tBTLli1DRkYGAKCyshJPPvkk6urqsG7dugFvJBERBYdZZql5Vr7IF6trk2XP5CtCsvcdM5eaJ6Iw1e/k6/XXX8cf//hH5OXluY7dd999mDp1KpYtW8bki4hoCDE7qhhSj/k73Zsss/JFnpwrZKoVnnO+dEoNYAFMZlOgm0VEFBL6PezQbDZj5syZHsfT09NhsXAYARHRUNK91LzMsENuskwynEMK5YYd6pVaAEC7hckXEYWnfidfDz30EF5//XWP42+88Qby8/MHpFFERBQazL7mfHHYIcnoXnDDs/KlV+kAACZLR0DbREQUKvo97BCwL7jx17/+Fd/73vcAAFVVVairq8PChQtRVFTkiistLR2YVhIRUVBYhT3BUvRIvtRK+58OVr5IjrNaKpt8qYcBAEzWzoC2iYgoVPS78nXkyBGkpaVh5MiROH36NE6fPo34+HikpaXhyJEjqK2tRW1tLQ4fPtzne27evBkpKSnQarUwGAw4ePCgz/hdu3Zh4sSJ0Gq1mDJlCvbs2eN2/pFHHoEkSW5fOTk5bjHXrl1Dfn4+oqOjERsbi0WLFqG1tbXvD4KIKAy4lprvOeeLww7JB6vwvs+XTq0HALRzny8iClP9rnzt379/QBvw/vvvo6ioCFu2bIHBYMArr7yC7OxsnDhxAgkJCR7xBw4cQF5eHkpKSvBv//Zv2LFjB3Jzc1FTU4PJkye74nJycrBt2zbXzxqNxu0++fn5uHTpEsrKymA2m1FQUIAlS5Zgx44dA/r6iIgGM4vMnK8ILjVPPliEj8pXRBQAwMTki4jC1HfaZHkglJaWYvHixSgoKMDtt9+OLVu2QK/X46233pKNf/XVV5GTk4MVK1Zg0qRJWL9+PdLS0rBp0ya3OI1Gg6SkJNfX8OHDXeeOHTuGvXv34s0334TBYMCdd96JjRs3YufOnbh48aJfXy8R0WDiHEKmQPcHaedS85zzRXKcCbtSZrVDV/LFfb6IKEwFNfnq6upCdXU1srKyXMcUCgWysrJQWVkpe01lZaVbPABkZ2d7xFdUVCAhIQETJkzAY489hqtXr7rdIzY21m3VxqysLCgUClRVVQ3ESyMiGhJcla8eK9eplBx2SN5ZfVS+dJpoAIBJMHEnovB0QwtuDJQrV67AarUiMTHR7XhiYiKOHz8ue43RaJSNNxqNrp9zcnLwk5/8BKmpqTh9+jRWrlyJe++9F5WVlVAqlTAajR5DGlUqFeLi4tzu01NnZyc6O7snCDc3N/frtRIRDUbO5EvR44O0WuH808Hkizx17/Pl+RFDr40FALRzyCoRhamgJl/+smDBAtf3U6ZMwdSpUzFu3DhUVFRgzpw5N3TPkpISrF27dqCaSEQ0KMitdsh9vsgX15wvuU2WNTEAABNEQNtERBQqgjrsMD4+HkqlEvX19W7H6+vrkZSUJHtNUlJSv+IB4JZbbkF8fDxOnTrlukdDQ4NbjMViwbVr17zep7i4GE1NTa6vf/zjH72+PiKiwc75QVrRY9ihq6IhMfkiTxZHVUspyVW+4gAAJimgTSIiChlBTb4iIiKQnp6O8vJy1zGbzYby8nJkZGTIXpORkeEWDwBlZWVe4wHg/PnzuHr1KkaNGuW6R2NjI6qrq10x+/btg81mg8FgkL2HRqNBdHS02xcR0VBnsdoXRlD0+CCtVnKTZfLOWS1VyQ071I0AALQrJNisXHSDiMJP0Fc7LCoqwh//+Ee8/fbbOHbsGB577DG0tbWhoKAAALBw4UIUFxe74pcvX469e/fipZdewvHjx7FmzRocOnQIhYWFAIDW1lasWLECX331Fc6ePYvy8nLcf//9uPXWW5GdnQ0AmDRpEnJycrB48WIcPHgQX375JQoLC7FgwQIkJycH/iEQEYUom6OK0XPYYYSSc77IO6uz8iW32qE+3vV9R/u1gLWJiChUBH3O1/z583H58mWsWrUKRqMR06dPx969e12LatTV1UGh6P6jn5mZiR07duCZZ57BypUrMX78eOzevdu1x5dSqcQ333yDt99+G42NjUhOTsY999yD9evXu+319d5776GwsBBz5syBQqHAAw88gNdeey2wL56IKMRZhLPy1XOpeef3TL7Ik3PYoUpSe5zTamMhCQEhSTB1XIM+0nM/TyKioSzoyRcAFBYWuipX16uoqPA4Nm/ePMybN082XqfT4dNPP+31d8bFxXFDZSKiXlhtjsqX5Fn5EhIXTSBPVjgrX54fMSSFAjphn/PV3n7V4zwR0VAX9GGHREQUuqw+K1+c80WeXJUvmeQLAPSOnN3U/s9ANYmIKGQw+SIiIq9kK18q52qHrHyRp+45X57DDgFAD/tSh6aOxoC1iYgoVDD5IiIir5wr1/VcNpwLbpAvHY4+E6HSyp7XOxJ5UyeTLyIKP0y+iIjIK5vMJsvOfb4kScBi5dBDctcqzACAKF2c7Hm9I5Fv72wJWJuIiEIFky8iIvLKVfnqsWx4hLJ7OFmXjXs1kbtWx7DDSF287HmdI/kydTH5IqLww+SLiIi8cu3z1WPOl1rZ/b2ZlS+6TotjLmDUsJGy5/WOuWBMvogoHDH5IiIir+TmfGl6Vr4srHxRN2GzodW+ngYi9YmyMTqlfc9Nk7ktUM0iIgoZTL6IiMgrmyv56rHUvLL7ezOHHVIPJlMDbJI9+4qKSpaN0TuTL4spYO0iIgoVTL6IiMir7jlf3X8uWPkib1pajQAAlRDQamNlY/QqHQCg3dIesHYREYUKJl9EROSVTWbYoapHItZpZfJF3VrbGgAAkQKQFPIfMXSO5Mtk7QhYu4iIQgWTLyIi8srm2jC3+8+FQqGAEPafLTYuuEHdWk2XAQCRQvIao1frAQAma2dA2kREFEqYfBERkVfOypeqR+ULAOD4cN3Fyhf10NJ+FQAQ1WOO4PX06kgAgMnaFZA2ERGFEiZfRETklQ2eS83bsfJFnrqTL5XXGH1EFACg3bEZMxFROGHyRUREXtmEvbKlUl7/Ydr+56PLyg/Q1K21oxEAEOlY0VCOXhMNAGjnSplEFIaYfBERkVeuOV/XVb4kx5wvbrJMPbV0NQMAIpVarzE6R+XLJNh3iCj8MPkiIiKvnMMOPeZ8wT6nx8w5X9RDa1cLACBKpfcao9cMBwCYIALSJiKiUMLki4iIvBIy+3zZ2RfcMHPOF/XQYm4DAESqh3mN0Tv2/zJJTL6IKPww+SIiIq+cww7VCvfKl8TKF8losdo3To6KiPYao9fFAQC4xTIRhSMmX0RE5JWAc5+v65YOd+7zxXk71EOrY++uKI2P5Es/AgDQqZBgMXOjZSIKL0y+iIjIKxsc+3xdl3xJcC64wcoXdWu12ffuitTEeo3R6Ua4vm93LE1PRBQumHwREZFXzjlfnsMOmXyRpxbH1gSRjqGFctTqYVAJ+3wvE5MvIgozTL6IiMgr52qHSkm+8sVNlqmnFkeyHq0f6TVGUiigc6y1YWq/FohmERGFDCZfRETklXPOl1p53ZwvZ+WLG+VSD632RTARqU/wGad3JF/tjk2ZiYjCBZMvIiLyytuCG5KjEsbKFznZrBa0OZOvyESfsXrHxw8Tky8iCjMhkXxt3rwZKSkp0Gq1MBgMOHjwoM/4Xbt2YeLEidBqtZgyZQr27NnjOmc2m/H0009jypQpGDZsGJKTk7Fw4UJcvHjR7R4pKSmQJMnta8OGDX55fUREg1X3nC+123HXsEMrky+ya2urh5Ds2VdU5CifsTrJkXx1Nvm9XUREoSToydf777+PoqIirF69GjU1NZg2bRqys7PR0NAgG3/gwAHk5eVh0aJFqK2tRW5uLnJzc3HkyBEAgMlkQk1NDZ599lnU1NTgww8/xIkTJ3Dfffd53GvdunW4dOmS62vZsmV+fa1ERIOPvfKlum6TZc75ouu1tF4CAKiFgEYb4zNWL9kXcGHyRUThJujJV2lpKRYvXoyCggLcfvvt2LJlC/R6Pd566y3Z+FdffRU5OTlYsWIFJk2ahPXr1yMtLQ2bNm0CAMTExKCsrAwPPvggJkyYgO9973vYtGkTqqurUVdX53avqKgoJCUlub6GDRvm99dLRDSYdM/5cl/tUAHnsEPO+SK7lrZ6AECU6D1W76iktne1+LNJREQhJ6jJV1dXF6qrq5GVleU6plAokJWVhcrKStlrKisr3eIBIDs722s8ADQ1NUGSJMTGuu87smHDBowYMQIzZszACy+8AIvF+4eIzs5ONDc3u30REQ11wlX5un7OFzdZJnetpisAgCgh9RrrTL5M5ja/tomIKNSoeg/xnytXrsBqtSIx0X1ibmJiIo4fPy57jdFolI03Go2y8R0dHXj66aeRl5eH6Oho1/HHH38caWlpiIuLw4EDB1BcXIxLly6htLRU9j4lJSVYu3Ztf14eEdGg13vli8kX2bU69uyKlK5fGdOTXqkBrEA7ky8iCjNBTb78zWw248EHH4QQAq+//rrbuaKiItf3U6dORUREBB599FGUlJRAo9F43Ku4uNjtmubmZowePdp/jSciCgWSo/LlZZ8vK5Mvcmjp+CcAIPK6xVnk6JRaAIDJYvJrm4iIQk1Qk6/4+HgolUrU19e7Ha+vr0dSUpLsNUlJSX2KdyZe586dw759+9yqXnIMBgMsFgvOnj2LCRMmeJzXaDSySRkR0VAm4Fjt8PrKl8R9vsidM/mKUvT+t1KvciZfHX5tExFRqAnqnK+IiAikp6ejvLzcdcxms6G8vBwZGRmy12RkZLjFA0BZWZlbvDPxOnnyJD777DOMGDGi17YcPnwYCoUCCQm+N4YkIgov9tUT1F72+bLabAFvEYWm1i77XOgoR2Lli16lBwCYrO1+bRMRUagJ+rDDoqIiPPzww5g5cyZmzZqFV155BW1tbSgoKAAALFy4EDfddBNKSkoAAMuXL8fs2bPx0ksvYe7cudi5cycOHTqEN954A4A98fqP//gP1NTU4JNPPoHVanXNB4uLi0NERAQqKytRVVWFu+++G1FRUaisrMSTTz6Jn/3sZxg+fHhwHgQRUUjyUvlyLjUvWPkiuxZzKwAgUtX7ysE6tT2m3drl1zYREYWaoCdf8+fPx+XLl7Fq1SoYjUZMnz4de/fudS2qUVdXB0WP/WUyMzOxY8cOPPPMM1i5ciXGjx+P3bt3Y/LkyQCACxcu4OOPPwYATJ8+3e137d+/H3fddRc0Gg127tyJNWvWoLOzE6mpqXjyySfd5nQREREgJBskAGqle+VLISkAwQU3qFur2T5/K0rde/Klj4gEAJhsZr+2iYgo1AQ9+QKAwsJCFBYWyp6rqKjwODZv3jzMmzdPNj4lJQVC+N5kJC0tDV999VW/20lEFH7swwojlO6LKCgkFSC44AZ1a7XYhxBGRkT1GqtTM/kiovAU9E2WiYgolHlbat6x2iH3+SKHZqt98YxITUyvsXpHjInDVokozDD5IiIi7yT5BTcUzgU3mHyRQ6ujihWtjes11pl8tQsu2EJE4YXJFxERybLZbJAk57BD+aXmOeyQnFodVaxIXR+SL20sAMAEJl9EFF6YfBERkSxLj2XkWfmi3rQ4EqlIfXyvsXqtfWVhk+TXJhERhRwmX0REJKvT2r0YQoTKvfKldO3zxeSL7FociVSUvvf9MnU6e/LVLgGCe8URURhh8kVERLIs1u7ESq24ftihs/LFD84EWMwdaFfYs6/IyKRe4/W6EfbrJAlmc5tf20ZEFEqYfBERkaw+Vb64Wh0BaGszur6PGjaq13idI/kCgPb2q35pExFRKGLyRUREsszWHnO+5DZZBmBj5YsAtLTaky+tTUCt6X2TZZVaC43NvpKmycTki4jCB5MvIiKS1dWz8qXgnC/yrrWtAQAQKfp+jd7xv6b2awPfICKiEMXki4iIZJlt9iGFQkhQeVS+7D/buFQ4AWgxXQYARPbjY4VO2OeImToa/dImIqJQxOSLiIhkdVmd87k8/1Rwzhf11OKYtxUlKXuJ7KaHI/nq/Kdf2kREFIqYfBERkawuiyOxEp6bMSkVzjlfHHZIQKujehWlUPf5Gr0jUWvvavFLm4iIQhGTLyIikmVxzefyrGYoJfscMC64QQDQ0mlPviKVmj5fo3PMIzR1NvulTUREoYjJFxERyXIOO5SEzLBDR+XLysoXAWh1VK+ilLo+X6OXIgAAJla+iCiMMPkiIiJZ3ZUvz2GHKkflS7DyRQBaHAlUpErfS2Q3ndI+RNFkbvVLm4iIQhGTLyIiktW94IbMsEOFc8ENVr4IaLWYAABREVF9vkbvGKJoMpv80iYiolDE5IuIiGSZrfbESpJb7dCRfAkw+SKgxdoOAIjsV/KlBQC0W9r90iYiolDE5IuIiGQ59/mCzJwvlWupeQ47JKDV2gkAiNLE9vkavWOIoonJFxGFESZfREQkyznnS7byJTkrX0y+CGixmQEAkdp+JF9qR/LlSNyIiMIBky8iIpLlqnzJ/KlQOYYdcp8vAoAWRz+I0o3o8zU6R+WrnckXEYURJl9ERCTL4mPOlzP54mqHBACtjgpolH5kn6/RO+aHmRxVMyKicMDki4iIZFkclS/Jx2qHNi64QQBaHbsRRA5L6PM1zuSrXVh6iSQiGjqYfBERkawu55wvyUfli8lX2DN3tqFDYc++oiKT+nydXhMNADAx+SKiMBISydfmzZuRkpICrVYLg8GAgwcP+ozftWsXJk6cCK1WiylTpmDPnj1u54UQWLVqFUaNGgWdToesrCycPHnSLebatWvIz89HdHQ0YmNjsWjRIrS2cqNHIiInq48FN9QKbrJMdi1tl1zfDxvWj+TLsTiHiX2IiMJI0JOv999/H0VFRVi9ejVqamowbdo0ZGdno6GhQTb+wIEDyMvLw6JFi1BbW4vc3Fzk5ubiyJEjrpjnn38er732GrZs2YKqqioMGzYM2dnZ6OjocMXk5+fj6NGjKCsrwyeffIIvvvgCS5Ys8fvrJSIaLMxW57BD76sd2rjaYdhrbTUCAHQ2AZVa2+frdJoYAIAJwi/tChWHDh1CSkoKlEoldDodJEnq05darcY777wT7OYT0QALevJVWlqKxYsXo6CgALfffju2bNkCvV6Pt956Szb+1VdfRU5ODlasWIFJkyZh/fr1SEtLw6ZNmwDYq16vvPIKnnnmGdx///2YOnUq3nnnHVy8eBG7d+8GABw7dgx79+7Fm2++CYPBgDvvvBMbN27Ezp07cfHixYC9diKiUNa91LznnC+1kkvNk921pnMAgKh+5lB63XAAQJMC+KTiWXR2NA1000LCO++8g3PnzsFms7n9I3BvLBYLSktL/dgyIgoGVTB/eVdXF6qrq1FcXOw6plAokJWVhcrKStlrKisrUVRU5HYsOzvblVidOXMGRqMRWVlZrvMxMTEwGAyorKzEggULUFlZidjYWMycOdMVk5WVBYVCgaqqKvz4xz8eyJfpV6aONjz3p58FuxlENASdsTYDamCk9QpQ8Xu3c6PqTwMAVOIi/nPb4HnPpIFjsjXjf8VlnFHZAEnCMJuEVz872fuFDsKiQbTVhmalAsXndqPkfz/ELJEEvSLaj60OjKYrJnx78AIazjfhaNX5G77P//zP/yAyVoubxw/HrP8zHqPH930pf6JwMT4hDY/MfTbYzeizoCZfV65cgdVqRWJiotvxxMREHD9+XPYao9EoG280Gl3nncd8xSQkuK/IpFKpEBcX54q5XmdnJzo7u/ciaW5u7u3lBUSXuR0fK04FuxlENBQ5xkakWIxAxe/cTt2qiQCSk2BSmfEx+B4UllxjZyQkdwnorszAy6f+X79uMVK1FDOGf4TzsedxWaXAZ2gAID/tYDA58usjvQf1UVtTJ04cMuLEISMmb588YPclGipmX/wnHgGTryGnpKQEa9euDXYzPKiVGszuig92M4hoiFJBwk9jRwOj49yOT7EJLLh8ApdsfR9GRUOLChGIVt0Bob8b1ugUIB4Y1++7jAHwA9xsM0Pd+n/xz66DQ2L7gqRFk/DZ1mMDes87Zifz7z0NIQM313NC7IwBu1cgBDX5io+Ph1KpRH19vdvx+vp6JCXJr5iUlJTkM975v/X19Rg1apRbzPTp010x1y/oYbFYcO3aNa+/t7i42G24Y3NzM0aPHt2Xl+lXw/RR2LR4f7CbQURhRgngP4PdCBpi0oLdgIGzGKj5VQ3S09MH5Hbvvvsu8vPzB+ReRBRcQV1wIyIiAunp6SgvL3cds9lsKC8vR0ZGhuw1GRkZbvEAUFZW5opPTU1FUlKSW0xzczOqqqpcMRkZGWhsbER1dbUrZt++fbDZbDAYDLK/V6NPYW41AAAPiklEQVTRIDo62u2LiIiIiIior4I+7LCoqAgPP/wwZs6ciVmzZuGVV15BW1sbCgoKAAALFy7ETTfdhJKSEgDA8uXLMXv2bLz00kuYO3cudu7ciUOHDuGNN94AAEiShCeeeAK//e1vMX78eKSmpuLZZ59FcnIycnNzAQCTJk1CTk4OFi9ejC1btsBsNqOwsBALFixAcnJycB4EERERDRkJCQmIjY1FY2Pjd7qPJEm47bbbBqhVRBRsQU++5s+fj8uXL2PVqlUwGo2YPn069u7d61owo66uDgpFd4EuMzMTO3bswDPPPIOVK1di/Pjx2L17NyZP7p6E+utf/xptbW1YsmQJGhsbceedd2Lv3r3Qarv3H3nvvfdQWFiIOXPmQKFQ4IEHHsBrr70WuBdOREREQ9bNN98Mo9GIpqYmREZG4sKFCzh06BDa29sRGRkJk8mEyspKjBgxAk1NTZg+fToaGhowbtw4tLW14fvf/z6USiUSExM52oZoCJGEEEN7d0M/aW5uRkxMDJqamvimSEREREQUxvqaGwR9k2UiIiIiIqJwwOSLiIiIiIgoAJh8ERERERERBQCTLyIiIiIiogBg8kVERERERBQATL6IiIiIiIgCIOj7fA1WzhX6m5ubg9wSIiIiIiIKJmdO0NsuXky+blBLSwsAYPTo0UFuCRERERERhYKWlhbExMR4Pc9Nlm+QzWbDxYsXERUVBUmSgtqW5uZmjB49Gv/4xz+44bOf8Bn7F5+v//EZ+xefr//xGfsXn6//8Rn7V7CfrxACLS0tSE5OhkLhfWYXK183SKFQ4Oabbw52M9xER0fz/8x+xmfsX3y+/sdn7F98vv7HZ+xffL7+x2fsX8F8vr4qXk5ccIOIiIiIiCgAmHwREREREREFgHLNmjVrgt0I+u6USiXuuusuqFQcSeovfMb+xefrf3zG/sXn6398xv7F5+t/fMb+NRieLxfcICIiIiIiCgAOOyQiIiIiIgoAJl9EREREREQBwOSLiIiIiIgoAJh8ERERERERBQCTr0HgueeeQ2ZmJvR6PWJjY2Vj6urqMHfuXOj1eiQkJGDFihWwWCw+73vt2jXk5+cjOjoasbGxWLRoEVpbW/3xEgaViooKSJIk+/X11197ve6uu+7yiP/lL38ZwJYPLikpKR7Pa8OGDT6v6ejowNKlSzFixAhERkbigQceQH19fYBaPHicPXsWixYtQmpqKnQ6HcaNG4fVq1ejq6vL53Xsw75t3rwZKSkp0Gq1MBgMOHjwoM/4Xbt2YeLEidBqtZgyZQr27NkToJYOPiUlJfiXf/kXREVFISEhAbm5uThx4oTPa7Zv3+7RX7VabYBaPLisWbPG41lNnDjR5zXsv/0j9zdNkiQsXbpUNp7917cvvvgC//7v/47k5GRIkoTdu3e7nRdCYNWqVRg1ahR0Oh2ysrJw8uTJXu/b3/dxf2DyNQh0dXVh3rx5eOyxx2TPW61WzJ07F11dXThw4ADefvttbN++HatWrfJ53/z8fBw9ehRlZWX45JNP8MUXX2DJkiX+eAmDSmZmJi5duuT29Ytf/AKpqamYOXOmz2sXL17sdt3zzz8foFYPTuvWrXN7XsuWLfMZ/+STT+K//uu/sGvXLnz++ee4ePEifvKTnwSotYPH8ePHYbPZ8Ic//AFHjx7Fyy+/jC1btmDlypW9Xss+LO/9999HUVERVq9ejZqaGkybNg3Z2dloaGiQjT9w4ADy8vKwaNEi1NbWIjc3F7m5uThy5EiAWz44fP7551i6dCm++uorlJWVwWw245577kFbW5vP66Kjo93667lz5wLU4sHnjjvucHtWf/vb37zGsv/239dff+32fMvKygAA8+bN83oN+693bW1tmDZtGjZv3ix7/vnnn8drr72GLVu2oKqqCsOGDUN2djY6Ojq83rO/7+N+I2jQ2LZtm4iJifE4vmfPHqFQKITRaHQde/3110V0dLTo7OyUvde3334rAIivv/7adewvf/mLkCRJXLhwYeAbP4h1dXWJkSNHinXr1vmMmz17tli+fHmAWjX4jR07Vrz88st9jm9sbBRqtVrs2rXLdezYsWMCgKisrPRHE4eU559/XqSmpvqMYR/2btasWWLp0qWun61Wq0hOThYlJSWy8Q8++KCYO3eu2zGDwSAeffRRv7ZzqGhoaBAAxOeff+41xtvfRPK0evVqMW3atD7Hs/9+d8uXLxfjxo0TNptN9jz7b98BEH/+859dP9tsNpGUlCReeOEF17HGxkah0WjEn/70J6/36e/7uL+w8jUEVFZWYsqUKUhMTHQdy87ORnNzM44ePer1mtjYWLdKTlZWFhQKBaqqqvze5sHk448/xtWrV1FQUNBr7HvvvYf4+HhMnjwZxcXFMJlMAWjh4LVhwwaMGDECM2bMwAsvvOBzqGx1dTXMZjOysrJcxyZOnIgxY8agsrIyEM0d1JqamhAXF9drHPuwp66uLlRXV7v1PYVCgaysLK99r7Ky0i0esL8vs6/2TVNTEwD02mdbW1sxduxYjB49Gvfff7/Xv3kEnDx5EsnJybjllluQn5+Puro6r7Hsv99NV1cX3n33Xfz85z+HJEle49h/b8yZM2dgNBrd+mhMTAwMBoPXPnoj7+P+ErrbP1OfGY1Gt8QLgOtno9Ho9ZqEhAS3YyqVCnFxcV6vCVdbt25FdnY2br75Zp9xP/3pTzF27FgkJyfjm2++wdNPP40TJ07gww8/DFBLB5fHH38caWlpiIuLw4EDB1BcXIxLly6htLRUNt5oNCIiIsJj3mNiYiL7bC9OnTqFjRs34sUXX/QZxz4s78qVK7BarbLvs8ePH5e9xtv7Mvtq72w2G5544gl8//vfx+TJk73GTZgwAW+99RamTp2KpqYmvPjii8jMzMTRo0d7fb8ONwaDAdu3b8eECRNw6dIlrF27Fj/4wQ9w5MgRREVFecSz/343u3fvRmNjIx555BGvMey/N87ZD/vTR2/kfdxfmHwFyW9+8xv8/ve/9xlz7NixXifEUt/dyDM/f/48Pv30U3zwwQe93r/nfLkpU6Zg1KhRmDNnDk6fPo1x48bdeMMHkf4846KiItexqVOnIiIiAo8++ihKSkqg0Wj83dRB6Ub68IULF5CTk4N58+Zh8eLFPq9lH6ZQsHTpUhw5csTnnCQAyMjIQEZGhuvnzMxMTJo0CX/4wx+wfv16fzdzULn33ntd30+dOhUGgwFjx47FBx98gEWLFgWxZUPT1q1bce+99yI5OdlrDPtv+GLyFSRPPfWUz38RAYBbbrmlT/dKSkryWK3FuQJcUlKS12uun2BosVhw7do1r9cMdjfyzLdt24YRI0bgvvvu6/fvMxgMAOxVh3D54Ppd+rXBYIDFYsHZs2cxYcIEj/NJSUno6upCY2OjW/Wrvr5+yPbZ6/X3+V68eBF33303MjMz8cYbb/T794VjH5YTHx8PpVLpsbKmr76XlJTUr3iyKywsdC0A1d9//Ver1ZgxYwZOnTrlp9YNHbGxsbjtttu8Piv23xt37tw5fPbZZ/0eMcD+23fOflhfX49Ro0a5jtfX12P69Omy19zI+7i/MPkKkpEjR2LkyJEDcq+MjAw899xzaGhocA0lLCsrQ3R0NG6//Xav1zQ2NqK6uhrp6ekAgH379sFms7k+cA01/X3mQghs27YNCxcuhFqt7vfvO3z4MAC4vTEMdd+lXx8+fBgKhcJjOKxTeno61Go1ysvL8cADDwAATpw4gbq6Ord/PRzK+vN8L1y4gLvvvhvp6enYtm0bFIr+T/ENxz4sJyIiAunp6SgvL0dubi4A+9C48vJyFBYWyl6TkZGB8vJyPPHEE65jZWVlYdNX+0sIgWXLluHPf/4zKioqkJqa2u97WK1W/P3vf8ePfvQjP7RwaGltbcXp06fx0EMPyZ5n/71x27ZtQ0JCAubOnduv69h/+y41NRVJSUkoLy93JVvNzc2oqqryujL4jbyP+01Al/egG3Lu3DlRW1sr1q5dKyIjI0Vtba2ora0VLS0tQgghLBaLmDx5srjnnnvE4cOHxd69e8XIkSNFcXGx6x5VVVViwoQJ4vz5865jOTk5YsaMGaKqqkr87W9/E+PHjxd5eXkBf32h6rPPPhMAxLFjxzzOnT9/XkyYMEFUVVUJIYQ4deqUWLdunTh06JA4c+aM+Oijj8Qtt9wifvjDHwa62YPCgQMHxMsvvywOHz4sTp8+Ld59910xcuRIsXDhQlfM9c9YCCF++ctfijFjxoh9+/aJQ4cOiYyMDJGRkRGMlxDSzp8/L2699VYxZ84ccf78eXHp0iXXV88Y9uG+27lzp9BoNGL79u3i22+/FUuWLBGxsbGuVWYfeugh8Zvf/MYV/+WXXwqVSiVefPFFcezYMbF69WqhVqvF3//+92C9hJD22GOPiZiYGFFRUeHWX00mkyvm+me8du1a8emnn4rTp0+L6upqsWDBAqHVasXRo0eD8RJC2lNPPSUqKirEmTNnxJdffimysrJEfHy8aGhoEEKw/w4Uq9UqxowZI55++mmPc+y//dPS0uL6vAtAlJaWitraWnHu3DkhhBAbNmwQsbGx4qOPPhLffPONuP/++0Vqaqpob2933eNf//VfxcaNG10/9/Y+HihMvgaBhx9+WADw+Nq/f78r5uzZs+Lee+8VOp1OxMfHi6eeekqYzWbX+f379wsA4syZM65jV69eFXl5eSIyMlJER0eLgoICV0JHQuTl5YnMzEzZc2fOnHH7b1BXVyd++MMfiri4OKHRaMStt94qVqxYIZqamgLY4sGjurpaGAwGERMTI7RarZg0aZL43e9+Jzo6Olwx1z9jIYRob28Xv/rVr8Tw4cOFXq8XP/7xj90SCrLbtm2b7HtGz39vYx/uv40bN4oxY8aIiIgIMWvWLPHVV1+5zs2ePVs8/PDDbvEffPCBuO2220RERIS44447xH//938HuMWDh7f+um3bNlfM9c/4iSeecP33SExMFD/60Y9ETU1N4Bs/CMyfP1+MGjVKREREiJtuuknMnz9fnDp1ynWe/XdgfPrppwKAOHHihMc59t/+cX5uvf7L+QxtNpt49tlnRWJiotBoNGLOnDkez33s2LFi9erVbsd8vY8HiiSEEAEpsREREREREYUx7vNFREREREQUAEy+iIiIiIiIAoDJFxERERERUQAw+SIiIiIiIgoAJl9EREREREQBwOSLiIiIiIgoAJh8ERERERERBQCTLyIiIiIiogBg8kVERERERBQATL6IiIiIiIgCgMkXERERERFRADD5IiIiIiIiCoD/D1kzSdGioH+6AAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Plot the resulting approximation\n", + "X = np.arange(-10, 10, 0.1)\n", + "pyplot.figure(figsize=(10, 4), dpi=100).set_facecolor('white')\n", + "total_approximation = np.zeros(X.shape)\n", + "for i in range(1, n_iterations + 1):\n", + " Y = weights[i].item() * scipy.stats.norm.pdf((X - locs[i]) / scales[i])\n", + " pyplot.plot(X, Y)\n", + " total_approximation += Y\n", + "pyplot.plot(X, total_approximation)\n", + "pyplot.plot(data.data.numpy(), np.zeros(len(data)), 'k*')\n", + "pyplot.title('Approximation of posterior over z')\n", + "pyplot.ylabel('probability density')\n", + "pyplot.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We see that boosting BBVI successfully approximates the bimodal posterior distributions with modes around -2 and +2." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The Complete Implementation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Putting all the components together, we then get the complete implementation of boosting black box Variational Inference:" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Parameters of component 1:\n", + "loc = -1.9996534585952759\n", + "scale = 0.016739774495363235\n", + ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Parameters of component 2:\n", + "loc = 1.998241901397705\n", + "scale = 0.01308442372828722\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA18AAAFwCAYAAABHI8GjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzde1xUZf4H8M+Z4X6XUBAjBi+Z5o1QkTTJYqWsdt3Q1NoV8dZFNMVutileKtw0pdK0dr30Kl1Na/NXuVRS6paopZmm6XohNRHUUkhRYM55fn8wc5jDzDAzCA4yn/frNS/hzDPnPDPMS+bL9/t8H0kIIUBERERERESNSufuCRAREREREXkCBl9ERERERETXAIMvIiIiIiKia4DBFxERERER0TXA4IuIiIiIiOgaYPBFRERERER0DTD4IiIiIiIiugYYfBEREREREV0DDL6IiIiIiIiuAQZfRESEn3/+GZIkYeXKle6eisaoUaNgMBjcPY06Xbx4EWPHjkVUVBQkScLkyZPdPaVrymAwYNSoUe6eBhHRdYHBFxGRE958801IkoTExER3T6XZKSoqwsyZM7Fnzx53T6VeXn75ZaxcuRKPP/443n33Xfz1r39195Q0Nm7ciJkzZ7p7GkREBEASQgh3T4KIqKnr27cvioqK8PPPP+Pw4cNo3769u6fUoIQQqKiogLe3N/R6/TW99nfffYdevXphxYoVVhmUqqoqKIoCX1/fazonV/Tp0wdeXl74+uuv3T0VmzIzM7F48WI01q/7iooK6HQ6eHt7N8r5iYiaE2a+iIgcKCwsxLZt27BgwQK0bNkSq1atcttcjEYjKisrG/y8kiTBz8/vmgdejnh7ezfpwAsAzpw5g7CwMHdP45oSQuDy5csAAF9f3wYLvK5cuQJFURrkXI3J8vkTEbmCwRcRkQOrVq1CixYtcN9992HIkCE2gy/zmqn58+dj4cKFiI2Nhb+/P5KTk/Hjjz9qxo4aNQpBQUE4duwYUlNTERgYiOjoaMyePVuTnbA8Z25uLtq1awdfX18cOHAAQPWH/jFjxiAyMhJ+fn7o3r073nnnHc21srOzodPpkJ+frzk+fvx4+Pj44IcfftBcy3LNl3meJ06cwP3334+goCC0adMGixcvBgDs27cPd911FwIDAxEbG4vVq1drrvHbb7/hqaeeQteuXREUFISQkBDce++96jUBYPPmzejVqxcAICMjA5IkaeZha83XpUuXMHXqVMTExMDX1xcdO3bE/PnzrTI7kiQhMzMTH330Ebp06QJfX1/ceuutyMvLs/r52eLo9d28eTMkSUJhYSE+/fRTde4///yz3XOa57Rq1Sp07NgRfn5+SEhIwNatW63Gfv/997j33nsREhKCoKAg3H333di+fbtmTFVVFWbNmoUOHTrAz88PN9xwA/r164cvvvhCff3MPy/z/CRJUh+vKApyc3Nx6623ws/PD5GRkXj00Udx/vx5zXUMBgPuv/9+fPbZZ+jZsyf8/f3x1ltvqffVzlgeO3YMQ4cORXh4OAICAtCnTx98+umnmjHm12/NmjV44YUX0KZNGwQEBKCsrMzu6+fMz75Lly4YMGCA1WMVRUGbNm0wZMiQBn3+ta1cuVLzWlve7rzzTrvPjYg8hCAiojrdcsstYsyYMUIIIbZu3SoAiJ07d2rGFBYWCgCia9euwmAwiL///e9i1qxZIjw8XLRs2VIUFxerY9PT04Wfn5/o0KGD+Otf/yoWLVok7r//fgFATJ8+3eqcnTt3Fm3bthVz584VCxcuFMePHxfl5eWiU6dOwtvbW0yZMkW8/vrr4o477hAARG5urnqOyspKER8fL2JjY0VZWZkQQoi8vDwBQMyZM8fqWitWrLCaZ+fOncVjjz0mFi9eLG6//XZ1XHR0tHj66afFG2+8IW699Vah1+vFsWPH1Md/++23ol27duK5554Tb731lpg9e7Zo06aNCA0NFadOnRJCCFFcXCxmz54tAIjx48eLd999V7z77rvi6NGj6hxiY2PVcyqKIu666y4hSZIYO3asWLRokXjggQcEADF58mTNzwSA6N69u2jdurWYM2eOyM3NFW3bthUBAQHi3Llzdf7MnXl9i4uLxbvvvisiIiJEjx491LlfvHjR7nkBiC5duoiIiAgxe/Zs8fe//13ExsYKf39/sW/fPnXcjz/+KAIDA9W5z507V8TFxQlfX1+xfft2ddzzzz8vJEkS48aNE//4xz/Eq6++KkaMGCHmzp0rhBBi27Zt4g9/+IMAoM7v3XffVR8/duxY4eXlJcaNGyeWLl0qnn32WREYGCh69eolKisr1XGxsbGiffv2okWLFuK5554TS5cuFV999ZV6X3p6ujq2uLhYREZGiuDgYPG3v/1NLFiwQHTv3l3odDrx4YcfquO++uor9f3do0cPsWDBApGTkyMuXbpk87Vz9mc/e/ZsodPpxOnTpzWP37JliwAg1q1b16DPv7ajR49qXut3331XvPjiiwKAGDp0qM3HEJHnYPBFRFSH7777TgAQX3zxhRCi+gPgjTfeKJ588knNOHPw4u/vL3755Rf1+I4dOwQAMWXKFPVYenq6ACAmTpyoHlMURdx3333Cx8dHnD17VnPOkJAQcebMGc31cnNzBQDx3nvvqccqKytFUlKSCAoKUgMtIYTYt2+f8PHxEWPHjhXnz58Xbdq0ET179hRVVVVW868dfAEQL7/8snrs/Pnzwt/fX0iSJNasWaMeP3jwoAAgsrOz1WNXrlwRsixbvU6+vr5i9uzZ6rFvv/3W6tqWc7AMvj766CMBQLz44ouacUOGDBGSJIkjR46oxwAIHx8fzbEffvhBABBvvPGG1bUsufL6xsbGivvuu6/O81nOCYD47rvv1GPHjx8Xfn5+4s9//rN6bPDgwcLHx0cNQoUQoqioSAQHB4v+/furx7p37+7w2hMmTBC2/tb63//+VwAQq1at0hw3B+eWx2NjYwUAkZeXZ3We2sHX5MmTBQDx3//+Vz32+++/i7i4OGEwGNT3hDn4atu2rSgvL6/zOQjh/M/+0KFDNn/GTzzxhAgKClKv1VDP35HLly+LhIQEER0dbRUQEpHnYdkhEVEdVq1ahcjISLWMSZIkDBs2DGvWrIEsy1bjBw8ejDZt2qjf9+7dG4mJidi4caPV2MzMTPVrczlaZWUlNm3apBmXlpaGli1bao5t3LgRUVFRGDFihHrM29sbkyZNwsWLF7Flyxb1eJcuXTBr1iz885//RGpqKs6dO4d33nkHXl5eTr0GY8eOVb8OCwtDx44dERgYiIceekg93rFjR4SFheHYsWPqMV9fX+h01b9mZFnGr7/+iqCgIHTs2BG7d+926tq1bdy4EXq9HpMmTdIcnzp1KoQQ+M9//qM5npKSgnbt2qnfd+vWDSEhIZp52ruOs6+vq5KSkpCQkKB+f9NNN+FPf/oTPvvsM8iyDFmW8fnnn2Pw4MFo27atOq5169Z4+OGH8fXXX6uleWFhYdi/fz8OHz7s8jzWrVuH0NBQ/OEPf8C5c+fUW0JCAoKCgvDVV19pxsfFxSE1NdXheTdu3IjevXujX79+6rGgoCCMHz8eP//8s1o2a5aeng5/f3+nzuvMz/7mm29Gjx49sHbtWnWMLMtYv349HnjgAfVajfX8a3viiSewb98+fPDBB4iKinL58UTUvDD4IiKyQ5ZlrFmzBgMGDEBhYSGOHDmCI0eOIDExESUlJVbrqACgQ4cOVsduvvlmq3VAOp1O88HaPA6A1di4uDircx4/fhwdOnRQgxuzTp06qfdbevrpp9G9e3fs3LkT2dnZ6Ny5s+0nXYufn59V4BcaGoobb7xRs3bIfNxyrYyiKFi4cCE6dOgAX19fREREoGXLlti7dy9KS0udun5tx48fR3R0NIKDgzXH7T3vm266yeocLVq0sFrTY+s6rry+rrD3HikvL8fZs2dx9uxZlJeXo2PHjlbjOnXqBEVRcPLkSQDA7NmzceHCBdx8883o2rUrnn76aezdu9epeRw+fBilpaVo1aoVWrZsqbldvHgRZ86c0Yy39T605fjx43bnbr6/vud19mc/bNgwfPPNNzh16hSA6vVlZ86cwbBhw9QxjfX8Lb311ltYsWIF3njjDfTp08flxxNR8+Pcnz2JiDzQl19+idOnT2PNmjVYs2aN1f2rVq3CwIEDG30ezmQFHDl27JiaHdm3b5/Tj7PX/dDecWHR+ODll1/G9OnTMXr0aMyZMwfh4eHQ6XSYPHnyNeto58w8r2f9+/fH0aNHsWHDBnz++ef45z//iYULF2Lp0qWajKUtiqKgVatWdrt31g66G+J9aEtjnHfYsGGYNm0a1q1bh8mTJ+P9999HaGgo7rnnHnVMYz//nTt34sknn8TYsWMxfvx4158EETVLDL6IiOxYtWoVWrVqpXaLs/Thhx/i3//+N5YuXar5UGar/Ot///ufVcc+RVFw7NgxNdtlHgfAaqwtsbGx2Lt3LxRF0WRnDh48qN5vea1Ro0YhJCQEkydPxssvv4whQ4bgwQcfdHidq7F+/XoMGDAAy5Yt0xy/cOECIiIi1O9rZ9DqEhsbi02bNuH333/XZEBsPe+r4crr6yp775GAgAD1A39AQAAOHTpkNe7gwYPQ6XSIiYlRj4WHhyMjIwMZGRm4ePEi+vfvj5kzZ6rBl73Xt127dti0aRP69u3boAFQbGys3bmb76/veZ392cfFxaF3795Yu3YtMjMz8eGHH2Lw4MGabQsa6/kDwNmzZzFkyBD06NHD5v8fROS5WHZIRGTD5cuX8eGHH+L+++/HkCFDrG6ZmZn4/fff8X//93+ax3300UdqqRNQ/dfvHTt24N5777W6xqJFi9SvhRBYtGgRvL29cffddzuc36BBg1BcXKxZ12I0GvHGG28gKCgIycnJ6vEFCxZg27ZtePvttzFnzhzcfvvtePzxx3Hu3DmXXhNX6fV6qwzTunXrNK8PAAQGBgKoDsocGTRoEGRZ1rx2ALBw4UJIkmTzda4PV15fVxUUFGjWvJ08eRIbNmzAwIEDodfrodfrMXDgQGzYsEFTglpSUoLVq1ejX79+CAkJAQD8+uuvmnMHBQWhffv2qKioUI/Ze30feughyLKMOXPmWM3RaDQ69fOwZdCgQdi5cycKCgrUY5cuXcLbb78Ng8HgdMmrrfO68rMfNmwYtm/fjuXLl+PcuXOakkOg8Z6/LMsYPnw4Kisr8cEHH8DHx6de5yGi5omZLyIiG/7v//4Pv//+O/74xz/avL9Pnz7qhsuWH+rat2+Pfv364fHHH0dFRQVyc3Nxww034JlnntE83s/PD3l5eUhPT0diYiL+85//4NNPP8Xzzz9vVe5ky/jx4/HWW29h1KhR2LVrFwwGA9avX49vvvkGubm5ambgp59+wvTp0zFq1Cg88MADAKr3IerRoweeeOIJvP/++/V9iRy6//77MXv2bGRkZOD222/Hvn37sGrVKqu1bu3atUNYWBiWLl2K4OBgBAYGIjEx0eYamwceeAADBgzA3/72N/z888/o3r07Pv/8c2zYsAGTJ0/WNNe4Gs6+vvXRpUsXpKamYtKkSfD19cWbb74JAJg1a5Y65sUXX8QXX3yBfv364YknnoCXlxfeeustVFRU4JVXXlHHde7cGXfeeScSEhIQHh6O7777DuvXr9c0czE395g0aRJSU1Oh1+sxfPhwJCcn49FHH0VOTg727NmDgQMHwtvbG4cPH8a6devw2muvafbEctZzzz2Hf/3rX7j33nsxadIkhIeH45133kFhYSE++OADq3V0znL1Z//QQw/hqaeewlNPPYXw8HCkpKRo7m+s57906VJ8+eWXeOyxx6yadkRGRuIPf/iD60+eiJoPd7ZaJCJqqh544AHh5+dnd88hIYQYNWqU8Pb2FufOnVNbtc+bN0+8+uqrIiYmRvj6+oo77rhD/PDDD5rHpaeni8DAQHH06FExcOBAERAQICIjI0V2dramNbvlOW0pKSkRGRkZIiIiQvj4+IiuXbtq2rUbjUbRq1cvceONN4oLFy5oHvvaa68JAGLt2rWaa9VuNR8YGGh13eTkZHHrrbdaHa/dcv3KlSti6tSponXr1sLf31/07dtXFBQUiOTkZJGcnKx57IYNG0Tnzp2Fl5eXZh61W80LUd22fMqUKSI6Olp4e3uLDh06iHnz5glFUTTjAIgJEybYnKdla3R7HL2+9p53Xcxzeu+990SHDh2Er6+viI+Pt7ln1O7du0VqaqoICgoSAQEBYsCAAWLbtm2aMS+++KLo3bu3CAsLE/7+/uKWW24RL730kmaPKqPRKCZOnChatmwpJEmyajv/9ttvi4SEBOHv7y+Cg4NF165dxTPPPCOKioqceo62Xs+jR4+KIUOGiLCwMOHn5yd69+4tPvnkE80Yc6t5y323HHH2Z2/Wt29fAUCMHTvW7jmv9vnXlp2drW4pUPtW+31PRJ5HEqKZrDomInKjn3/+GXFxcZg3bx6eeuqpOseOGjUK69evx8WLF6/R7KipkCQJEyZMsCqdIyIiz8A1X0RERERERNcAgy8iIiIiIqJrgMEXERERERHRNcA1X0RERERERNcAM19ERERERETXAIMvIiIiIiKia4CbLNeToigoKipCcHAwJEly93SIiIiIiMhNhBD4/fffER0dXedm8gy+6qmoqAgxMTHungYRERERETURJ0+exI033mj3fgZf9RQcHAyg+gUOCQlx82yIiIiIiMhdysrKEBMTo8YI9jD4qidzqWFISAiDLyIiIiIicrgciQ03iIiIiIiIrgEGX0RERERERNcAgy8iIiIiIqJrgMEXERERERHRNcDgi4iIiIiI6Bpg8EVERERERHQNNInga/HixTAYDPDz80NiYiJ27txpd+w//vEP3HHHHWjRogVatGiBlJQUq/FCCMyYMQOtW7eGv78/UlJScPjwYc2Y3377DY888ghCQkIQFhaGMWPG4OLFi43y/IiIiIiIiNwefK1duxZZWVnIzs7G7t270b17d6SmpuLMmTM2x2/evBkjRozAV199hYKCAsTExGDgwIE4deqUOuaVV17B66+/jqVLl2LHjh0IDAxEamoqrly5oo555JFHsH//fnzxxRf45JNPsHXrVowfP77Rny8REREREXkmSQgh3DmBxMRE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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import os\n", + "from collections import defaultdict\n", + "from functools import partial\n", + "\n", + "import numpy as np\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "import scipy.stats\n", + "import torch\n", + "import torch.distributions.constraints as constraints\n", + "from matplotlib import pyplot\n", + "from pyro.infer import SVI, Trace_ELBO\n", + "from pyro.optim import Adam\n", + "from pyro.poutine import block, replay, trace\n", + "\n", + "# this is for running the notebook in our testing framework\n", + "n_steps = 2 if smoke_test else 12000\n", + "pyro.set_rng_seed(2)\n", + "\n", + "# clear the param store in case we're in a REPL\n", + "pyro.clear_param_store()\n", + "\n", + "# Sample observations from a Normal distribution with loc 4 and scale 0.1\n", + "n = torch.distributions.Normal(torch.tensor([4.0]), torch.tensor([0.1]))\n", + "data = n.sample((100,))\n", + "\n", + "\n", + "def guide(data, index):\n", + " scale_q = pyro.param('scale_{}'.format(index), torch.tensor([1.0]), constraints.positive)\n", + " loc_q = pyro.param('loc_{}'.format(index), torch.tensor([0.0]))\n", + " pyro.sample(\"z\", dist.Normal(loc_q, scale_q))\n", + "\n", + "\n", + "def model(data):\n", + " prior_loc = torch.tensor([0.])\n", + " prior_scale = torch.tensor([5.])\n", + " z = pyro.sample('z', dist.Normal(prior_loc, prior_scale))\n", + " scale = torch.tensor([0.1])\n", + "\n", + " with pyro.plate('data', len(data)):\n", + " pyro.sample('x', dist.Normal(z*z, scale), obs=data)\n", + "\n", + "\n", + "def relbo(model, guide, *args, **kwargs):\n", + " approximation = kwargs.pop('approximation')\n", + "\n", + " # We first compute the elbo, but record a guide trace for use below.\n", + " traced_guide = trace(guide)\n", + " elbo = pyro.infer.Trace_ELBO(max_plate_nesting=1)\n", + " loss_fn = elbo.differentiable_loss(model, traced_guide, *args, **kwargs)\n", + "\n", + " # We do not want to update parameters of previously fitted components\n", + " # and thus block all parameters in the approximation apart from z.\n", + " guide_trace = traced_guide.trace\n", + " replayed_approximation = trace(replay(block(approximation, expose=['z']), guide_trace))\n", + " approximation_trace = replayed_approximation.get_trace(*args, **kwargs)\n", + "\n", + " relbo = -loss_fn - approximation_trace.log_prob_sum()\n", + " \n", + " # By convention, the negative (R)ELBO is returned.\n", + " return -relbo\n", + "\n", + "\n", + "def approximation(data, components, weights):\n", + " assignment = pyro.sample('assignment', dist.Categorical(weights))\n", + " result = components[assignment](data)\n", + " return result\n", + "\n", + "\n", + "def boosting_bbvi():\n", + " # T=2\n", + " n_iterations = 2\n", + " initial_approximation = partial(guide, index=0)\n", + " components = [initial_approximation]\n", + " weights = torch.tensor([1.])\n", + " wrapped_approximation = partial(approximation, components=components, weights=weights)\n", + "\n", + " locs = [0]\n", + " scales = [0]\n", + "\n", + " for t in range(1, n_iterations + 1):\n", + " \n", + " # Create guide that only takes data as argument\n", + " wrapped_guide = partial(guide, index=t)\n", + " losses = []\n", + "\n", + " adam_params = {\"lr\": 0.01, \"betas\": (0.90, 0.999)}\n", + " optimizer = Adam(adam_params)\n", + "\n", + " # Pass our custom RELBO to SVI as the loss function.\n", + " svi = SVI(model, wrapped_guide, optimizer, loss=relbo)\n", + " for step in range(n_steps):\n", + " # Pass the existing approximation to SVI.\n", + " loss = svi.step(data, approximation=wrapped_approximation)\n", + " losses.append(loss)\n", + "\n", + " if step % 100 == 0:\n", + " print('.', end=' ')\n", + "\n", + " # Update the list of approximation components.\n", + " components.append(wrapped_guide)\n", + " \n", + " # Set new mixture weight.\n", + " new_weight = 2 / (t + 1)\n", + "\n", + " # In this specific case, we set the mixture weight of the second component to 0.5.\n", + " if t == 2:\n", + " new_weight = 0.5\n", + " weights = weights * (1-new_weight)\n", + " weights = torch.cat((weights, torch.tensor([new_weight])))\n", + "\n", + " # Update the approximation\n", + " wrapped_approximation = partial(approximation, components=components, weights=weights)\n", + "\n", + " print('Parameters of component {}:'.format(t))\n", + " scale = pyro.param(\"scale_{}\".format(t)).item()\n", + " scales.append(scale)\n", + " loc = pyro.param(\"loc_{}\".format(t)).item()\n", + " locs.append(loc)\n", + " print('loc = {}'.format(loc))\n", + " print('scale = {}'.format(scale))\n", + "\n", + "\n", + " # Plot the resulting approximation\n", + " X = np.arange(-10, 10, 0.1)\n", + " pyplot.figure(figsize=(10, 4), dpi=100).set_facecolor('white')\n", + " total_approximation = np.zeros(X.shape)\n", + " for i in range(1, n_iterations + 1):\n", + " Y = weights[i].item() * scipy.stats.norm.pdf((X - locs[i]) / scales[i])\n", + " pyplot.plot(X, Y)\n", + " total_approximation += Y\n", + " pyplot.plot(X, total_approximation)\n", + " pyplot.plot(data.data.numpy(), np.zeros(len(data)), 'k*')\n", + " pyplot.title('Approximation of posterior over z')\n", + " pyplot.ylabel('probability density')\n", + " pyplot.show()\n", + "\n", + "if __name__ == '__main__':\n", + " boosting_bbvi()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### References\n", + "\n", + "[1] Locatello, Francesco, et al. \"Boosting black box variational inference.\" Advances in Neural Information Processing Systems. 2018.\n", + "\n", + "[2] Ranganath, Rajesh, Sean Gerrish, and David Blei. \"Black box variational inference.\" Artificial Intelligence and Statistics. 2014.\n", + "\n", + "[3] Blei, David M., Alp Kucukelbir, and Jon D. McAuliffe. \"Variational inference: A review for statisticians.\" Journal of the American statistical Association 112.518 (2017): 859-877." + ] + } + ], + "metadata": { + "file_extension": ".py", + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.10" + }, + "mimetype": "text/x-python", + "name": "python", + "npconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": 3 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/capture_recapture.rst b/pyro/source/tutorial/source/capture_recapture.rst new file mode 100644 index 0000000000000000000000000000000000000000..1d1c3d821ad01a247f8684d3d81fd826f1cf73d3 --- /dev/null +++ b/pyro/source/tutorial/source/capture_recapture.rst @@ -0,0 +1,11 @@ +Example: Capture-Recapture Models (CJS Models) +============================================== + +`View cjs.py on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/examples/capture_recapture/cjs.py + +__ github_ + +.. literalinclude:: ../../examples/capture_recapture/cjs.py + :language: python diff --git a/pyro/source/tutorial/source/cevae.rst b/pyro/source/tutorial/source/cevae.rst new file mode 100644 index 0000000000000000000000000000000000000000..1d7b04f8118a06520311c933e845679bba44237a --- /dev/null +++ b/pyro/source/tutorial/source/cevae.rst @@ -0,0 +1,12 @@ +Example: Causal Effect VAE +========================== + +`View cevae.py on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/examples/contrib/cevae/synthetic.py + +__ github_ + +.. literalinclude:: ../../examples/contrib/cevae/synthetic.py + :language: python + diff --git a/pyro/source/tutorial/source/cleannb.py b/pyro/source/tutorial/source/cleannb.py new file mode 100644 index 0000000000000000000000000000000000000000..19fbd47f0acde0afdf29965413cb65bdbe3aa5e0 --- /dev/null +++ b/pyro/source/tutorial/source/cleannb.py @@ -0,0 +1,32 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import argparse +import io # for py2/py3 compatible + +import nbformat + + +def cleannb(nbfile): + with io.open(nbfile, "r", encoding="utf8") as f: + nb = nbformat.read(f, as_version=nbformat.NO_CONVERT) + + nb["metadata"]["kernelspec"]["display_name"] = "Python 3" + nb["metadata"]["kernelspec"]["name"] = "python3" + nb["metadata"]["language_info"]["codemirror_mode"]["version"] = 3 + nb["metadata"]["language_info"]["pygments_lexer"] = "ipython3" + nb["metadata"]["language_info"]["version"] = "3.7.1" + + with io.open(nbfile, "w", encoding="utf8") as f: + nbformat.write(nb, f) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description="Clean kernelspec metadata of a notebook" + ) + parser.add_argument("nbfiles", nargs="*", help="Files to clean kernelspec metadata") + args = parser.parse_args() + + for nbfile in args.nbfiles: + cleannb(nbfile) diff --git a/pyro/source/tutorial/source/conf.py b/pyro/source/tutorial/source/conf.py new file mode 100644 index 0000000000000000000000000000000000000000..62aedb22a4b0886c0b4f072482a1492f9656db2d --- /dev/null +++ b/pyro/source/tutorial/source/conf.py @@ -0,0 +1,188 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +import sphinx_rtd_theme + +from pyro import __version__ + +# -*- coding: utf-8 -*- +# +# Pyro Tutorials documentation build configuration file, created by +# sphinx-quickstart on Tue Oct 31 11:33:17 2017. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + "sphinx.ext.intersphinx", + "sphinx.ext.todo", + "sphinx.ext.mathjax", + "sphinx.ext.githubpages", + "nbsphinx", + "sphinx.ext.autodoc", +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = [".rst"] +# Note: do not add .ipynb when nbspinx is enabled, otherwise you get a +# "missing title" error. See https://stackoverflow.com/questions/55297443 + +# do not execute cells +nbsphinx_execute = "never" + +# allow errors because not all tutorials build +nbsphinx_allow_errors = True + +# The master toctree document. +master_doc = "index" + +# General information about the project. +project = u"Pyro Tutorials" +copyright = u"Pyro Contributors" +author = u"Uber AI Labs" + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. + +version = __version__ + +# release version +release = version # eg pyro 0.1.2 + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = "en" + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = [".ipynb_checkpoints"] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = "sphinx" + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + +# extend timeout +nbsphinx_timeout = 120 + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = "sphinx_rtd_theme" +html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] +# logo +html_logo = "_static/img/pyro_logo_wide.png" + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +html_theme_options = {"logo_only": True} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ["_static"] +html_style = "css/pyro.css" + +html_favicon = "_static/img/favicon/favicon.ico" + + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = "PyroTutorialsdoc" + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + ( + master_doc, + "PyroTutorials.tex", + u"Pyro Examples and Tutorials", + u"Uber AI Labs", + "manual", + ), +] + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [(master_doc, "pyrotutorials", u"Pyro Examples and Tutorials", [author], 1)] + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ( + master_doc, + "PyroTutorials", + u"Pyro Examples and Tutorials", + author, + "PyroTutorials", + "One line description of project.", + "Miscellaneous", + ), +] diff --git a/pyro/source/tutorial/source/contrib_funsor_intro_i.ipynb b/pyro/source/tutorial/source/contrib_funsor_intro_i.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..f30e5d0a1a136937a6126aec5d44b975239ac04a --- /dev/null +++ b/pyro/source/tutorial/source/contrib_funsor_intro_i.ipynb @@ -0,0 +1,674 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# `pyro.contrib.funsor`, a new backend for Pyro - New primitives (Part 1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Introduction\n", + "\n", + "In this tutorial we'll cover the basics of `pyro.contrib.funsor`, a new backend for the Pyro probabilistic programming system that is intended to replace the current internals of Pyro and significantly expand its capabilities as both a modelling tool and an inference research platform.\n", + "\n", + "This tutorial is aimed at readers interested in developing custom inference algorithms and understanding Pyro's current and future internals. As such, the material here assumes some familiarity with the [generic Pyro API package](https://pyro.ai/api/) `pyroapi` and with Funsor. Additional documentation for Funsor can be found on [the Pyro website](https://funsor.pyro.ai/en/stable/), on [GitHub](https://github.com/pyro-ppl/funsor), and in the research paper [\"Functional Tensors for Probabilistic Programming.\"](https://arxiv.org/abs/1910.10775) Those who are less interested in such details should find that they can already use the general-purpose algorithms in `contrib.funsor` with their existing Pyro models via `pyroapi`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reinterpreting existing Pyro models with `pyroapi`\n", + "\n", + "The new backend uses the `pyroapi` package to integrate with existing Pyro code.\n", + "\n", + "First, we import some dependencies:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from collections import OrderedDict\n", + "\n", + "import torch\n", + "import funsor\n", + "from pyro import set_rng_seed as pyro_set_rng_seed\n", + "\n", + "funsor.set_backend(\"torch\")\n", + "torch.set_default_dtype(torch.float32)\n", + "pyro_set_rng_seed(101)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Importing `pyro.contrib.funsor` registers the `\"contrib.funsor\"` backend with `pyroapi`, which can now be passed as an argument to the `pyroapi.pyro_backend` context manager." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import pyro.contrib.funsor\n", + "import pyroapi\n", + "from pyroapi import handlers, infer, ops, optim, pyro\n", + "from pyroapi import distributions as dist\n", + "\n", + "# this is already done in pyro.contrib.funsor, but we repeat it here\n", + "pyroapi.register_backend(\"contrib.funsor\", dict(\n", + " distributions=\"pyro.distributions\",\n", + " handlers=\"pyro.contrib.funsor.handlers\",\n", + " infer=\"pyro.contrib.funsor.infer\",\n", + " ops=\"torch\",\n", + " optim=\"pyro.optim\",\n", + " pyro=\"pyro.contrib.funsor\",\n", + "))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And we're off! From here on, any `pyro.(...)` statement should be understood as dispatching to the new backend." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Two new primitives: `to_funsor` and `to_data`\n", + "\n", + "The first and most important new concept in `pyro.contrib.funsor` is the new pair of primitives `pyro.to_funsor` and `pyro.to_data`.\n", + "\n", + "These are *effectful* versions of `funsor.to_funsor` and `funsor.to_data`, i.e. versions whose behavior can be intercepted, controlled, or used to trigger side effects by Pyro's library of algebraic effect handlers. Let's briefly review these two underlying functions before diving into the effectful versions in `pyro.contrib.funsor`.\n", + "\n", + "As one might expect from the name, `to_funsor` takes as inputs objects that are not `funsor.Funsor`s and attempts to convert them into Funsor terms. For example, calling `funsor.to_funsor` on a Python number converts it to a `funsor.terms.Number` object:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.0 \n", + "tensor(2.) \n" + ] + } + ], + "source": [ + "funsor_one = funsor.to_funsor(float(1))\n", + "print(funsor_one, type(funsor_one))\n", + "\n", + "funsor_two = funsor.to_funsor(torch.tensor(2.))\n", + "print(funsor_two, type(funsor_two))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Similarly ,calling `funsor.to_data` on an atomic `funsor.Funsor` converts it to a regular Python object like a `float` or a `torch.Tensor`:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.0 \n", + "tensor(2.) \n" + ] + } + ], + "source": [ + "data_one = funsor.to_data(funsor.terms.Number(float(1), 'real'))\n", + "print(data_one, type(data_one))\n", + "\n", + "data_two = funsor.to_data(funsor.Tensor(torch.tensor(2.), OrderedDict(), 'real'))\n", + "print(data_two, type(data_two))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In many cases it is necessary to provide an output type to uniquely convert a piece of data to a `funsor.Funsor`. This also means that, strictly speaking, `funsor.to_funsor` and `funsor.to_data` are not inverses. For example, `funsor.to_funsor` will automatically convert Python strings to `funsor.Variable`s, but only when given an output `funsor.domains.Domain`, which serves as the type of the variable:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "x OrderedDict([('x', Reals[2])]) Reals[2]\n" + ] + } + ], + "source": [ + "var_x = funsor.to_funsor(\"x\", output=funsor.Reals[2])\n", + "print(var_x, var_x.inputs, var_x.output)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "However, it is often impossible to convert objects to and from Funsor expressions uniquely without additional type information about inputs, as in the following example of a `torch.Tensor`, which could be converted to a `funsor.Tensor` in several ways.\n", + "\n", + "To resolve this ambiguity, we need to provide `to_funsor` and `to_data` with type information that describes how to convert positional dimensions to and from unordered named Funsor dimensions. This information comes in the form of dictionaries mapping batch dimensions to dimension names or vice versa.\n", + "\n", + "A key property of these mappings is that use the convention that dimension indices refer to *batch dimensions*, or dimensions not included in the *output shape*, which is treated as referring to the rightmost portion of the underlying PyTorch tensor shape, as illustrated in the example below." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Ambiguous tensor: shape = torch.Size([3, 1, 2])\n", + "Case 1: inputs = OrderedDict(), output = Reals[3,1,2]\n", + "Case 2: inputs = OrderedDict([('a', Bint[3, ])]), output = Reals[1,2]\n", + "Case 3: inputs = OrderedDict([('a', Bint[3, ])]), output = Reals[2]\n", + "Case 4: inputs = OrderedDict([('a', Bint[3, ]), ('c', Bint[2, ])]), output = Real\n" + ] + } + ], + "source": [ + "ambiguous_tensor = torch.zeros((3, 1, 2))\n", + "print(\"Ambiguous tensor: shape = {}\".format(ambiguous_tensor.shape))\n", + "\n", + "# case 1: treat all dimensions as output/event dimensions\n", + "funsor1 = funsor.to_funsor(ambiguous_tensor, output=funsor.Reals[3, 1, 2])\n", + "print(\"Case 1: inputs = {}, output = {}\".format(funsor1.inputs, funsor1.output))\n", + "\n", + "# case 2: treat the leftmost dimension as a batch dimension\n", + "# note that dimension -1 in dim_to_name here refers to the rightmost *batch dimension*,\n", + "# i.e. dimension -3 of ambiguous_tensor, the rightmost dimension not included in the output shape.\n", + "funsor2 = funsor.to_funsor(ambiguous_tensor, output=funsor.Reals[1, 2], dim_to_name={-1: \"a\"})\n", + "print(\"Case 2: inputs = {}, output = {}\".format(funsor2.inputs, funsor2.output))\n", + "\n", + "# case 3: treat the leftmost 2 dimensions as batch dimensions; empty batch dimensions are ignored\n", + "# note that dimensions -1 and -2 in dim_to_name here refer to the rightmost *batch dimensions*,\n", + "# i.e. dimensions -2 and -3 of ambiguous_tensor, the rightmost dimensions not included in the output shape.\n", + "funsor3 = funsor.to_funsor(ambiguous_tensor, output=funsor.Reals[2], dim_to_name={-1: \"b\", -2: \"a\"})\n", + "print(\"Case 3: inputs = {}, output = {}\".format(funsor3.inputs, funsor3.output))\n", + "\n", + "# case 4: treat all dimensions as batch dimensions; empty batch dimensions are ignored\n", + "# note that dimensions -1, -2 and -3 in dim_to_name here refer to the rightmost *batch dimensions*,\n", + "# i.e. dimensions -1, -2 and -3 of ambiguous_tensor, the rightmost dimensions not included in the output shape.\n", + "funsor4 = funsor.to_funsor(ambiguous_tensor, output=funsor.Real, dim_to_name={-1: \"c\", -2: \"b\", -3: \"a\"})\n", + "print(\"Case 4: inputs = {}, output = {}\".format(funsor4.inputs, funsor4.output))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Similar ambiguity exists for `to_data`: the `inputs` of a `funsor.Funsor` are ordered arbitrarily, and empty dimensions in the data are squeezed away, so a mapping from names to batch dimensions must be provided to ensure unique conversion:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Ambiguous funsor: inputs = OrderedDict([('a', Bint[3, ]), ('b', Bint[2, ])]), shape = Real\n", + "Case 1: shape = torch.Size([3, 2])\n", + "Case 2: shape = torch.Size([3, 1, 2])\n", + "Case 3: shape = torch.Size([2, 3])\n" + ] + } + ], + "source": [ + "ambiguous_funsor = funsor.Tensor(torch.zeros((3, 2)), OrderedDict(a=funsor.Bint[3], b=funsor.Bint[2]), 'real')\n", + "print(\"Ambiguous funsor: inputs = {}, shape = {}\".format(ambiguous_funsor.inputs, ambiguous_funsor.output))\n", + "\n", + "# case 1: the simplest version\n", + "tensor1 = funsor.to_data(ambiguous_funsor, name_to_dim={\"a\": -2, \"b\": -1})\n", + "print(\"Case 1: shape = {}\".format(tensor1.shape))\n", + "\n", + "# case 2: an empty dimension between a and b\n", + "tensor2 = funsor.to_data(ambiguous_funsor, name_to_dim={\"a\": -3, \"b\": -1})\n", + "print(\"Case 2: shape = {}\".format(tensor2.shape))\n", + "\n", + "# case 3: permuting the input dimensions\n", + "tensor3 = funsor.to_data(ambiguous_funsor, name_to_dim={\"a\": -1, \"b\": -2})\n", + "print(\"Case 3: shape = {}\".format(tensor3.shape))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Maintaining and updating this information efficiently becomes tedious and error-prone as the number of conversions increases. Fortunately, it can be automated away completely. Consider the following example:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "OrderedDict([('x', -1)]) OrderedDict([('x', Bint[2, ])]) torch.Size([2])\n", + "OrderedDict([('x', -1), ('y', -2)]) OrderedDict([('y', Bint[3, ]), ('x', Bint[2, ])]) torch.Size([3, 2])\n", + "OrderedDict([('x', -1), ('y', -2), ('z', -3)]) OrderedDict([('z', Bint[2, ]), ('y', Bint[3, ])]) torch.Size([2, 3, 1])\n" + ] + } + ], + "source": [ + "name_to_dim = OrderedDict()\n", + "\n", + "funsor_x = funsor.Tensor(torch.ones((2,)), OrderedDict(x=funsor.Bint[2]), 'real')\n", + "name_to_dim.update({\"x\": -1})\n", + "tensor_x = funsor.to_data(funsor_x, name_to_dim=name_to_dim)\n", + "print(name_to_dim, funsor_x.inputs, tensor_x.shape)\n", + "\n", + "funsor_y = funsor.Tensor(torch.ones((3, 2)), OrderedDict(y=funsor.Bint[3], x=funsor.Bint[2]), 'real')\n", + "name_to_dim.update({\"y\": -2})\n", + "tensor_y = funsor.to_data(funsor_y, name_to_dim=name_to_dim)\n", + "print(name_to_dim, funsor_y.inputs, tensor_y.shape)\n", + "\n", + "funsor_z = funsor.Tensor(torch.ones((2, 3)), OrderedDict(z=funsor.Bint[2], y=funsor.Bint[3]), 'real')\n", + "name_to_dim.update({\"z\": -3})\n", + "tensor_z = funsor.to_data(funsor_z, name_to_dim=name_to_dim)\n", + "print(name_to_dim, funsor_z.inputs, tensor_z.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is exactly the functionality provided by `pyro.to_funsor` and `pyro.to_data`, as we can see by using them in the previous example and removing the manual updates. We must also wrap the function in a `handlers.named` effect handler to ensure that the dimension dictionaries do not persist beyond the function body." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "OrderedDict([('x', Bint[2, ])]) torch.Size([2, 1, 1, 1, 1])\n", + "OrderedDict([('y', Bint[3, ]), ('x', Bint[2, ])]) torch.Size([3, 2, 1, 1, 1, 1])\n", + "OrderedDict([('z', Bint[2, ]), ('y', Bint[3, ])]) torch.Size([2, 3, 1, 1, 1, 1, 1])\n" + ] + } + ], + "source": [ + "with pyroapi.pyro_backend(\"contrib.funsor\"), handlers.named():\n", + " funsor_x = funsor.Tensor(torch.ones((2,)), OrderedDict(x=funsor.Bint[2]), 'real')\n", + " tensor_x = pyro.to_data(funsor_x)\n", + " print(funsor_x.inputs, tensor_x.shape)\n", + "\n", + " funsor_y = funsor.Tensor(torch.ones((3, 2)), OrderedDict(y=funsor.Bint[3], x=funsor.Bint[2]), 'real')\n", + " tensor_y = pyro.to_data(funsor_y)\n", + " print(funsor_y.inputs, tensor_y.shape)\n", + "\n", + " funsor_z = funsor.Tensor(torch.ones((2, 3)), OrderedDict(z=funsor.Bint[2], y=funsor.Bint[3]), 'real')\n", + " tensor_z = pyro.to_data(funsor_z)\n", + " print(funsor_z.inputs, tensor_z.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Critically, `pyro.to_funsor` and `pyro.to_data` use and update the same bidirectional mapping between names and dimensions, allowing them to be combined intuitively. A typical usage pattern, and one that `pyro.contrib.funsor` uses heavily in its inference algorithm implementations, is to create a `funsor.Funsor` term directly with a new named dimension and call `pyro.to_data` on it, perform some PyTorch computations, and call `pyro.to_funsor` on the result:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " OrderedDict([('batch', Bint[3, ])]) Real\n", + " OrderedDict([('x', Bint[4, ])]) Real\n", + " torch.Size([3, 1, 1, 1, 1])\n", + " OrderedDict([('x', Bint[4, ]), ('batch', Bint[3, ])]) Real\n" + ] + } + ], + "source": [ + "with pyroapi.pyro_backend(\"contrib.funsor\"), handlers.named():\n", + " \n", + " probs = funsor.Tensor(torch.tensor([0.5, 0.4, 0.7]), OrderedDict(batch=funsor.Bint[3]))\n", + " print(type(probs), probs.inputs, probs.output)\n", + " \n", + " x = funsor.Tensor(torch.tensor([0., 1., 0., 1.]), OrderedDict(x=funsor.Bint[4]))\n", + " print(type(x), x.inputs, x.output)\n", + " \n", + " dx = dist.Bernoulli(pyro.to_data(probs))\n", + " print(type(dx), dx.shape())\n", + " \n", + " px = pyro.to_funsor(dx.log_prob(pyro.to_data(x)), output=funsor.Real)\n", + " print(type(px), px.inputs, px.output)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`pyro.to_funsor` and `pyro.to_data` treat the keys in their name-to-dim mappings as references to the input's batch shape, but treats the values as references to the globally consistent name-dim mapping. This may be useful for complicated computations that involve a mixture of PyTorch and Funsor operations." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "x: OrderedDict([('x', Bint[2, ])]) Real\n", + "px: OrderedDict([('x', Bint[2, ]), ('y', Bint[3, ])]) Real\n" + ] + } + ], + "source": [ + "with pyroapi.pyro_backend(\"contrib.funsor\"), handlers.named():\n", + " \n", + " x = pyro.to_funsor(torch.tensor([0., 1.]), funsor.Real, dim_to_name={-1: \"x\"})\n", + " print(\"x: \", type(x), x.inputs, x.output)\n", + " \n", + " px = pyro.to_funsor(torch.ones(2, 3), funsor.Real, dim_to_name={-2: \"x\", -1: \"y\"})\n", + " print(\"px: \", type(px), px.inputs, px.output)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Dealing with large numbers of variables: (re-)introducing `pyro.markov`\n", + "\n", + "So far, so good. However, what if the number of different named dimensions continues to increase? We face two problems: first, reusing the fixed number of available positional dimensions (25 in PyTorch), and second, computing shape information with time complexity that is independent of the number of variables.\n", + "\n", + "A fully general automated solution to this problem would require deeper integration with Python or PyTorch. Instead, as an intermediate solution, we introduce the second key concept in `pyro.contrib.funsor`: the `pyro.markov` annotation, a way to indicate the shelf life of certain variables. `pyro.markov` is already part of Pyro (see enumeration tutorial) but the implementation in `pyro.contrib.funsor` is fresh.\n", + "\n", + "The primary constraint on the design of `pyro.markov` is backwards compatibility: in order for `pyro.contrib.funsor` to be compatible with the large range of existing Pyro models, the new implementation had to match the shape semantics of Pyro's existing enumeration machinery as closely as possible." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shape of x[0]: torch.Size([2, 1, 1, 1, 1])\n", + "Shape of x[1]: torch.Size([2, 1, 1, 1, 1, 1])\n", + "Shape of x[2]: torch.Size([2, 1, 1, 1, 1])\n", + "Shape of x[3]: torch.Size([2, 1, 1, 1, 1, 1])\n", + "Shape of x[4]: torch.Size([2, 1, 1, 1, 1])\n", + "Shape of x[5]: torch.Size([2, 1, 1, 1, 1, 1])\n", + "Shape of x[6]: torch.Size([2, 1, 1, 1, 1])\n", + "Shape of x[7]: torch.Size([2, 1, 1, 1, 1, 1])\n", + "Shape of x[8]: torch.Size([2, 1, 1, 1, 1])\n", + "Shape of x[9]: torch.Size([2, 1, 1, 1, 1, 1])\n" + ] + } + ], + "source": [ + "with pyroapi.pyro_backend(\"contrib.funsor\"), handlers.named():\n", + " for i in pyro.markov(range(10)):\n", + " x = pyro.to_data(funsor.Tensor(torch.tensor([0., 1.]), OrderedDict({\"x{}\".format(i): funsor.Bint[2]})))\n", + " print(\"Shape of x[{}]: \".format(str(i)), x.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`pyro.markov` is a versatile piece of syntax that can be used as a context manager, a decorator, or an iterator. It is important to understand that `pyro.markov`'s only functionality at present is tracking variable usage, not directly indicating conditional independence properties to inference algorithms, and as such it is only necessary to add enough annotations to ensure that tensors have correct shapes, rather than attempting to manually encode as much dependency information as possible." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`pyro.markov` takes an additional argument `history` that determines the number of previous `pyro.markov` contexts to take into account when building the mapping between names and dimensions at a given `pyro.to_funsor`/`pyro.to_data` call." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shape of x[0]: torch.Size([2, 1, 1, 1, 1])\n", + "Shape of x[1]: torch.Size([2, 1, 1, 1, 1, 1])\n", + "Shape of x[2]: torch.Size([2, 1, 1, 1, 1, 1, 1])\n", + "Shape of x[3]: torch.Size([2, 1, 1, 1, 1])\n", + "Shape of x[4]: torch.Size([2, 1, 1, 1, 1, 1])\n", + "Shape of x[5]: torch.Size([2, 1, 1, 1, 1, 1, 1])\n", + "Shape of x[6]: torch.Size([2, 1, 1, 1, 1])\n", + "Shape of x[7]: torch.Size([2, 1, 1, 1, 1, 1])\n", + "Shape of x[8]: torch.Size([2, 1, 1, 1, 1, 1, 1])\n", + "Shape of x[9]: torch.Size([2, 1, 1, 1, 1])\n" + ] + } + ], + "source": [ + "with pyroapi.pyro_backend(\"contrib.funsor\"), handlers.named():\n", + " for i in pyro.markov(range(10), history=2):\n", + " x = pyro.to_data(funsor.Tensor(torch.tensor([0., 1.]), OrderedDict({\"x{}\".format(i): funsor.Bint[2]})))\n", + " print(\"Shape of x[{}]: \".format(str(i)), x.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Use cases beyond enumeration: global and visible dimensions\n", + "\n", + "### Global dimensions\n", + "\n", + "It is sometimes useful to have dimensions and variables ignore the `pyro.markov` structure of a program and remain active in arbitrarily deeply nested `markov` and `named` contexts. For example, suppose we wanted to draw a batch of samples from a Pyro model's joint distribution. To accomplish this we indicate to `pyro.to_data` that a dimension should be treated as \"global\" (`DimType.GLOBAL`) via the `dim_type` keyword argument." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "New global dimension: OrderedDict([('n', Bint[10, ])]) torch.Size([10, 1, 1, 1, 1])\n" + ] + } + ], + "source": [ + "from pyro.contrib.funsor.handlers.runtime import _DIM_STACK, DimType\n", + "\n", + "with pyroapi.pyro_backend(\"contrib.funsor\"), handlers.named():\n", + " funsor_particle_ids = funsor.Tensor(torch.arange(10), OrderedDict(n=funsor.Bint[10]))\n", + " tensor_particle_ids = pyro.to_data(funsor_particle_ids, dim_type=DimType.GLOBAL)\n", + " print(\"New global dimension: \", funsor_particle_ids.inputs, tensor_particle_ids.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`pyro.markov` does the hard work of automatically managing local dimensions, but because global dimensions ignore this structure, they must be deallocated manually or they will persist until the last active effect handler exits, just as global variables in Python persist until a program execution finishes." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "New global dimension: OrderedDict([('plate1', Bint[10, ])]) torch.Size([10, 1, 1, 1, 1])\n", + "Another new global dimension: OrderedDict([('plate2', Bint[9, ])]) torch.Size([9, 1, 1, 1, 1, 1])\n", + "A third new global dimension after recycling: OrderedDict([('plate3', Bint[10, ])]) torch.Size([10, 1, 1, 1, 1])\n" + ] + } + ], + "source": [ + "from pyro.contrib.funsor.handlers.runtime import _DIM_STACK, DimType\n", + "\n", + "with pyroapi.pyro_backend(\"contrib.funsor\"), handlers.named():\n", + " \n", + " funsor_plate1_ids = funsor.Tensor(torch.arange(10), OrderedDict(plate1=funsor.Bint[10]))\n", + " tensor_plate1_ids = pyro.to_data(funsor_plate1_ids, dim_type=DimType.GLOBAL)\n", + " print(\"New global dimension: \", funsor_plate1_ids.inputs, tensor_plate1_ids.shape)\n", + " \n", + " funsor_plate2_ids = funsor.Tensor(torch.arange(9), OrderedDict(plate2=funsor.Bint[9]))\n", + " tensor_plate2_ids = pyro.to_data(funsor_plate2_ids, dim_type=DimType.GLOBAL)\n", + " print(\"Another new global dimension: \", funsor_plate2_ids.inputs, tensor_plate2_ids.shape)\n", + " \n", + " del _DIM_STACK.global_frame[\"plate1\"]\n", + " \n", + " funsor_plate3_ids = funsor.Tensor(torch.arange(10), OrderedDict(plate3=funsor.Bint[10]))\n", + " tensor_plate3_ids = pyro.to_data(funsor_plate1_ids, dim_type=DimType.GLOBAL)\n", + " print(\"A third new global dimension after recycling: \", funsor_plate3_ids.inputs, tensor_plate3_ids.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Performing this deallocation directly is often unnecessary, and we include this interaction primarily to illuminate the internals of `pyro.contrib.funsor`. Instead, effect handlers that introduce global dimensions, like `pyro.plate`, may inherit from the `GlobalNamedMessenger` effect handler which deallocates global dimensions generically upon entry and exit. We will see an example of this in the next tutorial." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Visible dimensions\n", + "\n", + "We might also wish to preserve the meaning of the shape of a tensor of data. For this we indicate to `pyro.to_data` that a dimension should be treated as not merely global but \"visible\" (`DimTypes.VISIBLE`). By default, the 4 rightmost batch dimensions are reserved as \"visible\" dimensions, but this can be changed by setting the `first_available_dim` attribute of the global state object `_DIM_STACK`.\n", + "\n", + "Users who have come across `pyro.infer.TraceEnum_ELBO`'s `max_plate_nesting` argument are already familiar with this distinction." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tensor with new local dimension: OrderedDict([('k', Bint[9, ])]) torch.Size([9, 1])\n", + "Tensor with new global dimension: OrderedDict([('n', Bint[10, ])]) torch.Size([10, 1, 1])\n", + "Tensor with new visible dimension: OrderedDict([('m', Bint[11, ])]) torch.Size([11])\n" + ] + }, + { + "data": { + "text/plain": [ + "-5" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "prev_first_available_dim = _DIM_STACK.set_first_available_dim(-2)\n", + "\n", + "with pyroapi.pyro_backend(\"contrib.funsor\"), handlers.named():\n", + " \n", + " funsor_local_ids = funsor.Tensor(torch.arange(9), OrderedDict(k=funsor.Bint[9]))\n", + " tensor_local_ids = pyro.to_data(funsor_local_ids, dim_type=DimType.LOCAL)\n", + " print(\"Tensor with new local dimension: \", funsor_local_ids.inputs, tensor_local_ids.shape)\n", + " \n", + " funsor_global_ids = funsor.Tensor(torch.arange(10), OrderedDict(n=funsor.Bint[10]))\n", + " tensor_global_ids = pyro.to_data(funsor_global_ids, dim_type=DimType.GLOBAL)\n", + " print(\"Tensor with new global dimension: \", funsor_global_ids.inputs, tensor_global_ids.shape)\n", + " \n", + " funsor_data_ids = funsor.Tensor(torch.arange(11), OrderedDict(m=funsor.Bint[11]))\n", + " tensor_data_ids = pyro.to_data(funsor_data_ids, dim_type=DimType.VISIBLE)\n", + " print(\"Tensor with new visible dimension: \", funsor_data_ids.inputs, tensor_data_ids.shape)\n", + " \n", + "# we also need to reset the first_available_dim after we're done\n", + "_DIM_STACK.set_first_available_dim(prev_first_available_dim)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Visible dimensions are also global and must therefore be deallocated manually or they will persist until the last effect handler exits, as in the previous example. You may be thinking by now that Funsor's dimension names behave sort of like Python variables, with scopes and persistent meanings across expressions; indeed, this observation is the key insight behind the design of Funsor.\n", + "\n", + "Fortunately, interacting directly with the dimension allocator is almost always unnecessary, and as in the previous section we include it here only to illuminate the inner workings of `pyro.contrib.funsor`; rather, effect handlers like `pyro.handlers.enum` that may introduce non-visible dimensions that could conflict with visible dimensions should inherit from the base `pyro.contrib.funsor.handlers.named_messenger.NamedMessenger` effect handler. \n", + "\n", + "However, building a bit of intuition for the inner workings of the dimension allocator will make it easier to use the new primitives in `contrib.funsor` to build powerful new custom inference engines. We will see an example of one such inference engine in the next tutorial." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/contrib_funsor_intro_ii.ipynb b/pyro/source/tutorial/source/contrib_funsor_intro_ii.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..7ecbd23fb9e0af0ee62d6daf612d967a94cd9482 --- /dev/null +++ b/pyro/source/tutorial/source/contrib_funsor_intro_ii.ipynb @@ -0,0 +1,503 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# `pyro.contrib.funsor`, a new backend for Pyro - Building inference algorithms (Part 2)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from collections import OrderedDict\n", + "import functools\n", + "\n", + "import torch\n", + "from torch.distributions import constraints\n", + "\n", + "import funsor\n", + "\n", + "from pyro import set_rng_seed as pyro_set_rng_seed\n", + "from pyro.ops.indexing import Vindex\n", + "from pyro.poutine.messenger import Messenger\n", + "\n", + "funsor.set_backend(\"torch\")\n", + "torch.set_default_dtype(torch.float32)\n", + "pyro_set_rng_seed(101)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Introduction\n", + "\n", + "In part 1 of this tutorial, we were introduced to the new `pyro.contrib.funsor` backend for Pyro.\n", + "\n", + "Here we'll look at how to use the components in `pyro.contrib.funsor` to implement a variable elimination inference algorithm from scratch. This tutorial assumes readers are familiar with enumeration-based inference algorithms in Pyro. For background and motivation, readers should consult the [enumeration tutorial](http://pyro.ai/examples/enumeration.html).\n", + "\n", + "As before, we'll use `pyroapi` so that we can write our model with standard Pyro syntax." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import pyro.contrib.funsor\n", + "import pyroapi\n", + "from pyroapi import infer, handlers, ops, optim, pyro\n", + "from pyroapi import distributions as dist" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will be working with the following model throughout. It is a discrete-state continuous-observation hidden Markov model with learnable transition and emission distributions that depend on a global random variable." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "data = [torch.tensor(1.)] * 10\n", + "\n", + "def model(data, verbose):\n", + "\n", + " p = pyro.param(\"probs\", lambda: torch.rand((3, 3)), constraint=constraints.simplex)\n", + " locs_mean = pyro.param(\"locs_mean\", lambda: torch.ones((3,)))\n", + " locs = pyro.sample(\"locs\", dist.Normal(locs_mean, 1.).to_event(1))\n", + " if verbose:\n", + " print(\"locs.shape = {}\".format(locs.shape))\n", + "\n", + " x = 0\n", + " for i in pyro.markov(range(len(data))):\n", + " x = pyro.sample(\"x{}\".format(i), dist.Categorical(p[x]), infer={\"enumerate\": \"parallel\"})\n", + " if verbose:\n", + " print(\"x{}.shape = \".format(i), x.shape)\n", + " pyro.sample(\"y{}\".format(i), dist.Normal(Vindex(locs)[..., x], 1.), obs=data[i])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can run `model` under the default Pyro backend and the new `contrib.funsor` backend with `pyroapi`:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "locs.shape = torch.Size([3])\n", + "x0.shape = torch.Size([])\n", + "x1.shape = torch.Size([])\n", + "x2.shape = torch.Size([])\n", + "x3.shape = torch.Size([])\n", + "x4.shape = torch.Size([])\n", + "x5.shape = torch.Size([])\n", + "x6.shape = torch.Size([])\n", + "x7.shape = torch.Size([])\n", + "x8.shape = torch.Size([])\n", + "x9.shape = torch.Size([])\n", + "locs.shape = torch.Size([3])\n", + "x0.shape = torch.Size([])\n", + "x1.shape = torch.Size([])\n", + "x2.shape = torch.Size([])\n", + "x3.shape = torch.Size([])\n", + "x4.shape = torch.Size([])\n", + "x5.shape = torch.Size([])\n", + "x6.shape = torch.Size([])\n", + "x7.shape = torch.Size([])\n", + "x8.shape = torch.Size([])\n", + "x9.shape = torch.Size([])\n" + ] + } + ], + "source": [ + "# default backend: \"pyro\"\n", + "with pyroapi.pyro_backend(\"pyro\"):\n", + " model(data, verbose=True)\n", + " \n", + "# new backend: \"contrib.funsor\"\n", + "with pyroapi.pyro_backend(\"contrib.funsor\"):\n", + " model(data, verbose=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Enumerating discrete variables\n", + "\n", + "Our first step is to implement an effect handler that performs parallel enumeration of discrete latent variables. Here we will implement a stripped-down version of `pyro.poutine.enum`, the effect handler behind Pyro's most powerful general-purpose inference algorithms `pyro.infer.TraceEnum_ELBO` and `pyro.infer.mcmc.HMC`.\n", + "\n", + "We'll do that by constructing a `funsor.Tensor` representing the support of each discrete latent variable and using the new `pyro.to_data` primitive from part 1 to convert it to a `torch.Tensor` with the appropriate shape." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "from pyro.contrib.funsor.handlers.named_messenger import NamedMessenger\n", + "\n", + "class EnumMessenger(NamedMessenger):\n", + " \n", + " @pyroapi.pyro_backend(\"contrib.funsor\") # necessary since we invoke pyro.to_data and pyro.to_funsor\n", + " def _pyro_sample(self, msg):\n", + " if msg[\"done\"] or msg[\"is_observed\"] or msg[\"infer\"].get(\"enumerate\") != \"parallel\":\n", + " return\n", + "\n", + " # We first compute a raw value using the standard enumerate_support method.\n", + " # enumerate_support returns a value of shape:\n", + " # (support_size,) + (1,) * len(msg[\"fn\"].batch_shape).\n", + " raw_value = msg[\"fn\"].enumerate_support(expand=False)\n", + " \n", + " # Next we'll use pyro.to_funsor to indicate that this dimension is fresh.\n", + " # This is guaranteed because we use msg['name'], the name of this pyro.sample site,\n", + " # as the name for this positional dimension, and sample site names must be unique.\n", + " funsor_value = pyro.to_funsor(\n", + " raw_value,\n", + " output=funsor.Bint[raw_value.shape[0]],\n", + " dim_to_name={-raw_value.dim(): msg[\"name\"]},\n", + " )\n", + "\n", + " # Finally, we convert the value back to a PyTorch tensor with to_data,\n", + " # which has the effect of reshaping and possibly permuting dimensions of raw_value.\n", + " # Applying to_funsor and to_data in this way guarantees that\n", + " # each enumerated random variable gets a unique fresh positional dimension\n", + " # and that we can convert the model's log-probability tensors to funsor.Tensors\n", + " # in a globally consistent manner.\n", + " msg[\"value\"] = pyro.to_data(funsor_value)\n", + " msg[\"done\"] = True" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Because this is an introductory tutorial, this implementation of `EnumMessenger` works directly with the site's PyTorch distribution since users familiar with PyTorch and Pyro may find it easier to understand. However, when using `contrib.funsor` to implement an inference algorithm in a more realistic setting, it is usually preferable to do as much computation as possible on funsors, as this tends to simplify complex indexing, broadcasting or shape manipulation logic.\n", + "\n", + "For example, in `EnumMessenger`, we might instead call `pyro.to_funsor` on `msg[\"fn\"]`:\n", + "```py\n", + "funsor_dist = pyro.to_funsor(msg[\"fn\"], output=funsor.Real)(value=msg[\"name\"])\n", + "# enumerate_support defined whenever isinstance(funsor_dist, funsor.distribution.Distribution)\n", + "funsor_value = funsor_dist.enumerate_support(expand=False)\n", + "raw_value = pyro.to_data(funsor_value)\n", + "```\n", + "Most of the more complete inference algorithms implemented in `pyro.contrib.funsor` follow this pattern, and we will see an example later in this tutorial. Before we continue, let's see what effect `EnumMessenger` has on the shapes of random variables in our model:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "locs.shape = torch.Size([3])\n", + "x0.shape = torch.Size([3, 1, 1, 1, 1])\n", + "x1.shape = torch.Size([3, 1, 1, 1, 1, 1])\n", + "x2.shape = torch.Size([3, 1, 1, 1, 1])\n", + "x3.shape = torch.Size([3, 1, 1, 1, 1, 1])\n", + "x4.shape = torch.Size([3, 1, 1, 1, 1])\n", + "x5.shape = torch.Size([3, 1, 1, 1, 1, 1])\n", + "x6.shape = torch.Size([3, 1, 1, 1, 1])\n", + "x7.shape = torch.Size([3, 1, 1, 1, 1, 1])\n", + "x8.shape = torch.Size([3, 1, 1, 1, 1])\n", + "x9.shape = torch.Size([3, 1, 1, 1, 1, 1])\n" + ] + } + ], + "source": [ + "with pyroapi.pyro_backend(\"contrib.funsor\"), \\\n", + " EnumMessenger():\n", + " model(data, True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Vectorizing a model across multiple samples\n", + "\n", + "Next, since our priors over global variables are continuous and cannot be enumerated exactly, we will implement an effect handler that uses a global dimension to draw multiple samples in parallel from the model. Our implementation will allocate a new particle dimension using `pyro.to_data` as in `EnumMessenger` above, but unlike the enumeration dimensions, we want the particle dimension to be shared across all sample sites, so we will mark it as a `DimType.GLOBAL` dimension when invoking `pyro.to_funsor`.\n", + "\n", + "Recall that in part 1 we saw that `DimType.GLOBAL` dimensions must be deallocated manually or they will persist until the final effect handler has exited. This low-level detail is taken care of automatically by the `GlobalNameMessenger` handler provided in `pyro.contrib.funsor` as a base class for any effect handlers that allocate global dimensions. Our vectorization effect handler will inherit from this class." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "from pyro.contrib.funsor.handlers.named_messenger import GlobalNamedMessenger\n", + "from pyro.contrib.funsor.handlers.runtime import DimRequest, DimType\n", + "\n", + "class VectorizeMessenger(GlobalNamedMessenger):\n", + " \n", + " def __init__(self, size, name=\"_PARTICLES\"):\n", + " super().__init__()\n", + " self.name = name\n", + " self.size = size\n", + "\n", + " @pyroapi.pyro_backend(\"contrib.funsor\")\n", + " def _pyro_sample(self, msg):\n", + " if msg[\"is_observed\"] or msg[\"done\"] or msg[\"infer\"].get(\"enumerate\") == \"parallel\":\n", + " return\n", + " \n", + " # we'll first draw a raw batch of samples similarly to EnumMessenger.\n", + " # However, since we are drawing a single batch from the joint distribution,\n", + " # we don't need to take multiple samples if the site is already batched.\n", + " if self.name in pyro.to_funsor(msg[\"fn\"], funsor.Real).inputs:\n", + " raw_value = msg[\"fn\"].rsample()\n", + " else:\n", + " raw_value = msg[\"fn\"].rsample(sample_shape=(self.size,))\n", + " \n", + " # As before, we'll use pyro.to_funsor to register the new dimension.\n", + " # This time, we indicate that the particle dimension should be treated as a global dimension.\n", + " fresh_dim = len(msg[\"fn\"].event_shape) - raw_value.dim()\n", + " funsor_value = pyro.to_funsor(\n", + " raw_value,\n", + " output=funsor.Reals[tuple(msg[\"fn\"].event_shape)],\n", + " dim_to_name={fresh_dim: DimRequest(value=self.name, dim_type=DimType.GLOBAL)},\n", + " )\n", + " \n", + " # finally, convert the sample to a PyTorch tensor using to_data as before\n", + " msg[\"value\"] = pyro.to_data(funsor_value)\n", + " msg[\"done\"] = True" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's see what effect `VectorizeMessenger` has on the shapes of the values in `model`:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "locs.shape = torch.Size([10, 1, 1, 1, 1, 3])\n", + "x0.shape = torch.Size([])\n", + "x1.shape = torch.Size([])\n", + "x2.shape = torch.Size([])\n", + "x3.shape = torch.Size([])\n", + "x4.shape = torch.Size([])\n", + "x5.shape = torch.Size([])\n", + "x6.shape = torch.Size([])\n", + "x7.shape = torch.Size([])\n", + "x8.shape = torch.Size([])\n", + "x9.shape = torch.Size([])\n" + ] + } + ], + "source": [ + "with pyroapi.pyro_backend(\"contrib.funsor\"), \\\n", + " VectorizeMessenger(size=10):\n", + " model(data, verbose=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And now in combination with `EnumMessenger`:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "locs.shape = torch.Size([10, 1, 1, 1, 1, 3])\n", + "x0.shape = torch.Size([3, 1, 1, 1, 1, 1])\n", + "x1.shape = torch.Size([3, 1, 1, 1, 1, 1, 1])\n", + "x2.shape = torch.Size([3, 1, 1, 1, 1, 1])\n", + "x3.shape = torch.Size([3, 1, 1, 1, 1, 1, 1])\n", + "x4.shape = torch.Size([3, 1, 1, 1, 1, 1])\n", + "x5.shape = torch.Size([3, 1, 1, 1, 1, 1, 1])\n", + "x6.shape = torch.Size([3, 1, 1, 1, 1, 1])\n", + "x7.shape = torch.Size([3, 1, 1, 1, 1, 1, 1])\n", + "x8.shape = torch.Size([3, 1, 1, 1, 1, 1])\n", + "x9.shape = torch.Size([3, 1, 1, 1, 1, 1, 1])\n" + ] + } + ], + "source": [ + "with pyroapi.pyro_backend(\"contrib.funsor\"), \\\n", + " VectorizeMessenger(size=10), EnumMessenger():\n", + " model(data, verbose=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Computing an ELBO with variable elimination\n", + "\n", + "Now that we have tools for enumerating discrete variables and drawing batches of samples, we can use those to compute quantities of interest for inference algorithms.\n", + "\n", + "Most inference algorithms in Pyro work with `pyro.poutine.Trace`s, custom data structures that contain parameters and sample site distributions and values and all of the associated metadata needed for inference computations. Our third effect handler `LogJointMessenger` departs from this design pattern, eliminating a tremendous amount of boilerplate in the process. It will automatically build up a lazy Funsor expression for the logarithm of the joint probability density of a model; when working with `Trace`s, this process must be triggered manually by calling `Trace.compute_log_probs()` and eagerly computing an objective from the resulting individual log-probability tensors in the trace.\n", + "\n", + "In our implementation of `LogJointMessenger`, unlike the previous two effect handlers, we will call `pyro.to_funsor` on both the sample value and the distribution to show how nearly all inference operations including log-probability density evaluation can be performed on `funsor.Funsor`s directly." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "class LogJointMessenger(Messenger):\n", + "\n", + " def __enter__(self):\n", + " self.log_joint = funsor.Number(0.)\n", + " return super().__enter__()\n", + "\n", + " @pyroapi.pyro_backend(\"contrib.funsor\")\n", + " def _pyro_post_sample(self, msg):\n", + " \n", + " # for Monte Carlo-sampled variables, we don't include a log-density term:\n", + " if not msg[\"is_observed\"] and not msg[\"infer\"].get(\"enumerate\"):\n", + " return\n", + " \n", + " with funsor.interpreter.interpretation(funsor.terms.lazy):\n", + " funsor_dist = pyro.to_funsor(msg[\"fn\"], output=funsor.Real)\n", + " funsor_value = pyro.to_funsor(msg[\"value\"], output=funsor_dist.inputs[\"value\"])\n", + " self.log_joint += funsor_dist(value=funsor_value)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And finally the actual loss function, which applies our three effect handlers to compute an expression for the log-density, marginalizes over discrete variables with `funsor.ops.logaddexp`, averages over Monte Carlo samples with `funsor.ops.add`, and evaluates the final lazy expression using Funsor's `optimize` interpretation for variable elimination.\n", + "\n", + "Note that `log_z` exactly collapses the model's local discrete latent variables but is an ELBO wrt any continuous latent variables, and is thus equivalent to a simple version of `TraceEnum_ELBO` with an empty guide." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "@pyroapi.pyro_backend(\"contrib.funsor\")\n", + "def log_z(model, model_args, size=10):\n", + " with LogJointMessenger() as tr, \\\n", + " VectorizeMessenger(size=size) as v, \\\n", + " EnumMessenger():\n", + " model(*model_args)\n", + "\n", + " with funsor.interpreter.interpretation(funsor.terms.lazy):\n", + " prod_vars = frozenset({v.name})\n", + " sum_vars = frozenset(tr.log_joint.inputs) - prod_vars\n", + " \n", + " # sum over the discrete random variables we enumerated\n", + " expr = tr.log_joint.reduce(funsor.ops.logaddexp, sum_vars)\n", + " \n", + " # average over the sample dimension\n", + " expr = expr.reduce(funsor.ops.add, prod_vars) - funsor.Number(float(size))\n", + "\n", + " return pyro.to_data(funsor.optimizer.apply_optimizer(expr))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Putting it all together\n", + "\n", + "Finally, with all this machinery implemented, we can compute stochastic gradients wrt the ELBO." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tensor(-133.6274, grad_fn=)\n", + "tensor(-129.2379, grad_fn=)\n", + "tensor(-125.9609, grad_fn=)\n", + "tensor(-123.7484, grad_fn=)\n", + "tensor(-122.3034, grad_fn=)\n" + ] + } + ], + "source": [ + "with pyroapi.pyro_backend(\"contrib.funsor\"):\n", + " model(data, verbose=False) # initialize parameters\n", + " params = [pyro.param(\"probs\").unconstrained(), pyro.param(\"locs_mean\").unconstrained()]\n", + "\n", + "optimizer = torch.optim.Adam(params, lr=0.1)\n", + "for step in range(5):\n", + " optimizer.zero_grad()\n", + " log_marginal = log_z(model, (data, False))\n", + " (-log_marginal).backward()\n", + " optimizer.step()\n", + " print(log_marginal)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/csis.ipynb b/pyro/source/tutorial/source/csis.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..9349d0fc2eea40eb1b2db070d74a4d0709203ca8 --- /dev/null +++ b/pyro/source/tutorial/source/csis.ipynb @@ -0,0 +1,264 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Compiled Sequential Importance Sampling\n", + "\n", + "Compiled sequential importance sampling [1], or inference compilation, is a technique to amortize the computational cost of inference by learning a proposal distribution for importance sampling.\n", + "\n", + "The proposal distribution is learned to minimise the KL divergence between the model and the guide, $\\rm{KL}\\!\\left( p({\\bf z} | {\\bf x}) \\lVert q_{\\phi, x}({\\bf z}) \\right)$. This differs from variational inference, which would minimise $\\rm{KL}\\!\\left( q_{\\phi, x}({\\bf z}) \\lVert p({\\bf z} | {\\bf x}) \\right)$. Using this loss encourages the approximate proposal distribution to be broader than the true posterior (mass covering), whereas variational inference typically learns a narrower approximation (mode seeking). Guides for importance sampling are usually desired to have heavier tails than the model (see this [stackexchange question](https://stats.stackexchange.com/questions/76798/in-importance-sampling-why-should-the-importance-density-have-heavier-tails)). Therefore, the inference compilation loss is usually more suited to compiling a guide for importance sampling.\n", + "\n", + "Another benefit of CSIS is that, unlike many types of variational inference, it has no requirement that the model is differentiable. This allows it to be used for inference on arbitrarily complex programs (e.g. a Captcha renderer [1]).\n", + "\n", + "This example shows CSIS being used to speed up inference on a simple problem with a known analytic solution." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "import torch.nn as nn\n", + "import torch.functional as F\n", + "\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "import pyro.infer\n", + "import pyro.optim\n", + "\n", + "import os\n", + "smoke_test = ('CI' in os.environ)\n", + "n_steps = 2 if smoke_test else 2000" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Specify the model:\n", + "\n", + "The model is specified in the same way as any Pyro model, except that a keyword argument, `observations`, must be used to input a dictionary with each observation as a key. Since inference compilation involves learning to perform inference for any observed values, it is not important what the values in the dictionary are. `0` is used here." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def model(prior_mean, observations={\"x1\": 0, \"x2\": 0}):\n", + " x = pyro.sample(\"z\", dist.Normal(prior_mean, torch.tensor(5**0.5)))\n", + " y1 = pyro.sample(\"x1\", dist.Normal(x, torch.tensor(2**0.5)), obs=observations[\"x1\"])\n", + " y2 = pyro.sample(\"x2\", dist.Normal(x, torch.tensor(2**0.5)), obs=observations[\"x2\"])\n", + " return x" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### And the guide:\n", + "\n", + "The guide will be trained (a.k.a. compiled) to use the observed values to make proposal distributions for each unconditioned `sample` statement. In the paper [1], a neural network architecture is automatically generated for any model. However, for the implementation in Pyro the user must specify a task-specific guide program structure. As with any Pyro guide function, this should have the same call signature as the model. It must also encounter the same unobserved `sample` statements as the model. So that the guide program can be trained to make good proposal distributions, the distributions at `sample` statements should depend on the values in `observations`. In this example, a feed-forward neural network is used to map the observations to a proposal distribution for the latent variable.\n", + "\n", + "`pyro.module` is called when the guide function is run so that the guide parameters can be found by the optimiser during training." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "class Guide(nn.Module):\n", + " def __init__(self):\n", + " super().__init__()\n", + " self.neural_net = nn.Sequential(\n", + " nn.Linear(2, 10),\n", + " nn.ReLU(),\n", + " nn.Linear(10, 20),\n", + " nn.ReLU(),\n", + " nn.Linear(20, 10),\n", + " nn.ReLU(),\n", + " nn.Linear(10, 5),\n", + " nn.ReLU(),\n", + " nn.Linear(5, 2))\n", + "\n", + " def forward(self, prior_mean, observations={\"x1\": 0, \"x2\": 0}):\n", + " pyro.module(\"guide\", self)\n", + " x1 = observations[\"x1\"]\n", + " x2 = observations[\"x2\"]\n", + " v = torch.cat((x1.view(1, 1), x2.view(1, 1)), 1)\n", + " v = self.neural_net(v)\n", + " mean = v[0, 0]\n", + " std = v[0, 1].exp()\n", + " pyro.sample(\"z\", dist.Normal(mean, std))\n", + "\n", + "guide = Guide()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Now create a `CSIS` instance:\n", + "The object is initialised with the model; the guide; a PyTorch optimiser for training the guide; and the number of importance-weighted samples to draw when performing inference. The guide will be optimised for a particular value of the model/guide argument, `prior_mean`, so we use the value set here throughout training and inference." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "optimiser = pyro.optim.Adam({'lr': 1e-3})\n", + "csis = pyro.infer.CSIS(model, guide, optimiser, num_inference_samples=50)\n", + "prior_mean = torch.tensor(1.)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Now we 'compile' the instance to perform inference on this model:\n", + "The arguments given to `csis.step` are passed to the model and guide when they are run to evaluate the loss." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "for step in range(n_steps):\n", + " csis.step(prior_mean)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### And now perform inference by importance sampling:\n", + "\n", + "The compiled guide program should now be able to propose a distribution for `z` that approximates the posterior, $p(z | x_1, x_2)$, for any $x_1, x_2$. The same `prior_mean` is entered again, as well as the observed values inside `observations`." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "posterior = csis.run(prior_mean,\n", + " observations={\"x1\": torch.tensor(8.),\n", + " \"x2\": torch.tensor(9.)})\n", + "marginal = pyro.infer.EmpiricalMarginal(posterior, \"z\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### We now plot the results and compare with importance sampling:\n", + "\n", + "We observe $x_1 = 8$ and $x_2 = 9$. Inference is performed by taking 50 samples using CSIS, and 50 using importance sampling from the prior. We then plot the resulting approximations to the posterior distributions, along with the analytic posterior." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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g2XSjd3fJk+erOrVq2vFihV5Ws8wDI0ePVp9+vTRunXr8u2o0tjYWPXo0UP9+vXTjh07cgyk7d+/X8OHD1fr1q0VERGRp/UK6r6A/EK4DAAAAAAAAAAAAADuMjePurzJ19dXffr0MfXJuFNZenq65syZc0tr/vHHH+rVq5c1MObm5qZq1aqpZcuWqlGjhs3uSrt27dLw4cPtmjtz6MdisahSpUpq2LChWrdurXr16snb29vUxzAMvfXWW3rvvffyflOZ3H///aaj7RYuXKi4uDiH5sh4XKMkjRw50im1OcP+/fvVsmVLbdy40eY5f39/1atXTy1atFCNGjWyDHAVFufPn7e5VqpUKVPbMAwNHz5cn3zyiU0YqHTp0mratKnq1KmjokWLmp67cOGCunfvbtrBLiuJiYm655579Pfff5uuu7m5KTg4WM2aNVPLli1Vu3Zth3ZCc5Zr166pT58+mjx5ss39lytXTo0bN1bTpk1tdim7evWq+vbtq0WLFjm85ptvvqnJkydb28WKFVPt2rXVrFkzlStXLm83kklUVJQ6d+6s1atX2zxXuXJlNW/eXFWrVrXZpWzXrl1q166dwsPDHV6zIO4LyE8ciwkAAAAAAAAAAAAAd5mFCxcqMTHR2h4wYICKFCli6jN06FBT8Gr27Nl6880387zmoEGDlJCQoICAAL399tt67LHHTIGe8+fP66233jLtqPbzzz9r5cqV6tWrV67z165dWwMHDlSvXr3UqFEjmzBZenq6du7cqS+//FI//vij9fp7772nXr16qUWLFnm+t5s8PDz0xBNP6P3335d0Yxe2+fPn2xxhmJ3w8HCtWbPG2q5Vq5Y6duxobffo0cP6/KeffmoKyMybN09ly5bNct5ixYo5fC+ZxcTEqG/fvqYd7Nzc3DR8+HA988wzatq0qSkgeP36de3evVtLlizRvHnzbnl9Z7p5TOFNXl5eqlChguna5MmTbQKVHTp00Mcff6w2bdpY7zU+Pl4//vijXnvtNWtwMjExUY888oj2799vChtmnv/YsWPWdpkyZfThhx9muVOdYRg6efKk1q5dq6VLl5o+IzeNHTvWuvvg0KFDdfHiRUlS2bJlc3z9s6vv6aefNgXkihcvrjFjxujxxx+3OYJ13759+uCDD7R48WJJUlpamp544gk1adJE1atXz3btjA4dOqRNmzZJ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oD/++MNo06aNzfuf0+/6vLhbjsV06v/Z/PTTT8b9999veHh4ZBs08/DwMO677z7jp59+ytfzjguzwvhBAAAAAAAAAAAAd778yNBk9UDBIlxWCB+F1K2Ey24+mjZtagpNZZaammr07NnTNObFF1/MtTZHAh0Zffzxx6ZxrVq1Mi5evJjjmLS0NOO5554zjXv++eez7Z85QHLzMXDgQJtQWXaeeuop09j777/fJiiV2fXr141+/fqZxn3xxRfZ9s8cLrv5GDduXI7rHDlyxBoIuvn4888/cxwzZMgQU/+SJUsa69aty3HMTQkJCca2bduyfT7z52fUqFFGcnJyjnNGR0cbbdu2NY1bunSpXfXY45dffrF5XS9duuS0+bOTkJBgCjNKMu69994cQ4ZRUVE2wa/GjRvnuE7m7590I0R58ODBbMdcunTJJgR4M0DZoUMHm/BpRuvWrTONK1OmTI7vcXbfwaZNm+aYu4iMjLQJaPXu3duh18KZ4bKTJ08ap06dyrFPRomJiUbv3r1Na/z66685jnG0pqw4Ei5bvHixzfsybdq0HMesWLHC8PT0NI2ZOHFijmOyev979OhhJCQkZDsmISHBaNSokWnMpEmTclzHUXdLuMypx2I+8MADWr58ucLDw/Xuu+8qODhYhmFIurGVp2EY1jNt+/Xrp0qVKuntt9/WqVOnnFkGAAAAAAAAAAAAAMDJSpYsqaVLl6pMmTLZ9nF3d9fEiRNN11auXJkv9Vy7dk2ffPKJtV2+fHn9+uuvCgwMzHGcm5ubJk2apNatW1uvzZgxQzExMXavXbVqVc2ePVseHh659j1z5oymTZtmbTds2FCLFi2yObovsyJFimjevHmmI0e//PJL6zFw9ujbt6/ee++9HPvUrFlTo0ePNl3L6T37+++/tWDBAmvbYrFo4cKF6tKli101eXt7m177jLZv367ffvvN2u7Vq5e+/fbbXI/V9PPz05IlS1SiRAnrtc8//9yueuwRFRVlaru7u6tUqVJOmz878+bN08WLF63toKAgLV68WEWKFMl2jL+/v5YvX65ixYpZr/3555/6/fffHVp71qxZqlu3brbPly5dWi+99JLp2uHDhxUQEKCFCxea3ovMunTpou7du1vbly5d0u7dux2qz9vbW8uWLVPJkiWz7VOmTBktWbLE9D399ddf83TErDNUqVJFwcHB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vZptn0uXLql///6m17dnz56qVatWQZRokjGElZycrDfeeCPH/pcuXVKfPn3sCqFl5OnpqZo1a1rbf/75p06cOOHQHI54+eWXTe2vvvoq113lVq1apbfeest07cUXX7Q50hOFh1PfmYxHU94MfHl4eGjAgAFas2aNjhw5opdfflmlSpVy5rL5ekYsAAAAAAAAAAAAAKBwGjt2rHr37m1tX716VQ8++KD69++vdevWKSkpyWbM9evXtXPnTn300Udq1qyZmjdv7tBxg3kxceJENWnSxNqOiIhQx44d9fjjj2v79u1Zhovi4+O1efNmvfXWW6pdu7a6devmtB3CbtXkyZNVtWpVazsuLk733HOPnnzySe3Zs8fmb/jXr1/X5s2bNWbMGAUHB+vbb7/Ndu45c+aoUqVK1vaRI0fUrFkzvfjii9q3b1+W+YDo6GitXbtWY8aMUUhIiPr166cdO3Y44U5tValSRYsWLVKxYsWs15KSkjR69GjVr19fkyZNMmUnMjp79qy+/fZb9ejRQ02aNNGGDRtyXMvb21tTp041XVu5cqVatmypNWvWKD093Xo9OTlZS5YsUePGjbVv3z7rdS8vL82aNSsPd1p4BQcHS7oRDG3SpIl+/vln03coOTlZixYtUtOmTXX06FHr9WLFirnsWNrHHnvM1P722281bNgwhYeHm65fvXpV06dPV8OGDfXnn39KurHRkyO6d+9u/TktLU0dO3bUu+++q2XLlmnNmjVau3at9REREZG3G/r/+vfvr4ceesjaNgxDw4cP11NPPaWTJ0+a+kZEROjNN99Unz59TAHJtm3b6rnnnrulOpC/PHLv4jjDMBQSEqKRI0dqxIgRpiStMzVr1izP20sCAAAAAAAAAAAAAG5vbm5umj9/vh588EHrzlmGYWjZsmVatmyZihQpouDgYPn7++v69euKiYnR2bNnlZaWVqB1FitWTMuXL1fv3r21f/9+SVJqaqpmzZqlWbNmycfHR5UqVZKvr6+uXbum6OhonTt3rtButOLr66vly5erZ8+eOnv2rKQbIZbp06dr+vTpCggIUIUKFVSsWDFFR0fr1KlTSklJsWvuwMBArVixQvfdd5/12MNr167pyy+/1JdffilfX19VqFBBJUqUUHx8vKKiom45IOOoe++9V2vWrNHAgQNNax85ckRjxozRmDFj5Ovrq8DA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WLt2bbb9swp25PZ39cycES7Li2nTppnWze1ksqzuddmyZbmuk5KSYlSsWNE0LvOuVRm98cYbpr41atQw7VR1K/75z3+a5v7hhx/sHvvNN9+Yxk6dOtUpNd2UkpJidO3a1eY1zuoRGBho9O/f3/jqq6+MU6dOObWO7Kxdu9ZUwzfffJNj/6zCZf/9739zXefHH3+0Gefl5WXs378/17GjRo0yjZs/f36O/TOvY7FYcg1lGcaNnfIyn8C3atWqbPsXdLgsP76X99xzj6nvhAkTcl3DMG6clki4zDXc5ETdunXTs88+K8MwrOeeGjcCbKZrrVu31pNPPpnjXIsXL5bFYpHFYlG7du2cWSYAAAAAAAAAAAAAwEFPP/20goKCcu33wAMP2FybMGGC3Nxy/vN00aJF1b17d2s7MTFRR44ccajGjz76SO7u7rn2GzlypGrUqGFtnzlzRmvWrMmy77Rp00ztd999VyVLlsx1jZCQEL3wwguma999912u426qXLmyRo4caXd/VxoyZIjpdd+6datD41u2bKkHH3ww134eHh7q37+/6doff/yRZd/k5GT997//NV379ttv5ePj41BtWYmKitKcOXOs7TZt2mjIkCF2jx85cqQCAwOt7SVLltxyTRl5eHjol19+0YgRI3LtGxkZqaVLl+r5559XlSpVdM8992jjxo1OrSezbt26qXz58ta2o58Xe78b9913n83vnUGDBql+/fq5ju3bt6+pvXfvXodqHDBggFq0aJFrv8DAQL388sumazNmzHBorfySH9/Lc+fO6ffff7e2/fz89Nprr9lVzxtvvCFfX1+7+sK5nBouk6Svv/5ab731ljw8PGQYhuk5wzB07733avny5Tn+g/7LL78oPDzcOr5Xr17OLhMAAAAAAAAAAAAA4ICBAwfa1S9zcMPf319du3a1a2yDBg1M7dOnT9tXnKSyZcuqR48edvV1c3PT0KFDTddCQ0Nt+sXHx2vPnj3Wtre3t0Mhoszhnk2bNtk9dvDgwbkG8goLHx8fU1jK0SDO4MGD7e7buHFjU/vMmTNZ9tu5c6diYmKs7fr169v9OcxNaGioEhMTre1//OMfDo339PRUly5drO2tW7cqPT3dKbXdVKxYMU2fPl07duxQ37595enpmesYwzD0+++/q1OnTnrsscdM9+hsISEh1p8d/bz069fPrhBp8eLFTetIN0Jf9riV30WS9NhjjznU9+ZmTZK0YcMGh9bKL/nxvdy6daspS/TQQw+paNGidq3h7e1tE2JDwfDIj0nff/99Pf300/rpp5909OhRJSYmKigoSPfee6/atGmT6/jffvtNjRo1srazSrYDAAAAAAAAAAAAAAqGp6enTdgiO6VKlTK1mzRpYgpOODI2Li7OvgIltW/f3q7AyU2dO3c2tXfu3GnTZ/fu3UpLS7O2W7RooeLFi9u9Ro0aNVSpUiVr0CIiIkLh4eEKDg7OdWzLli3tXie/HDx4UIsXL9aePXt06NAhRUdHKy4uTikpKTmOu3z5skPrNG/e3O6+GUNskhQbG5tlv8xBPmduapN5bkfqv6ly5crWn+Pi4nTu3DlVqlTplmvLrGXLlvrf//6ny5cva8WKFdqwYYO2bNmiY8eO2WwYlNHcuXN14sQJrVu3TkWKFLFrrVOnTmnhwoXatWuXDhw4oMuXLysuLk7Jyck5jnP089KsWTO7+5YqVUonT560tps2bWr3uIwc+V1ksVjUqVMnu/sHBwcrJCREYWFhkqQLFy7o9OnTps+IK+TH93L37t2mdtu2bR2qqW3btpo5c6ZDY3Dr8iVcJklBQUF6+umn8zR28uTJTq4GAAAAAAAAAID/x96dR9lVlXkD/p3KSBKqMhFCwEwgCiggAo00syAIDoAKQgNhEFRUFATtFgSRVrQdsdWmQQYnEMRZBLRBJhlFGcQgkDkhQMaqJGTO+f6IuV8qlaEqOZUqkudZqxbnnLv3e96b3FyTdX7uDQCsr/79+7c6uNWrV69m51tttVWr77Pq3LasnNSare7WNn5FsGNlEyZMaHa+6667tukeSbLbbrs1W8Vn4sSJrQqXjRgxos33qspTTz2Vj370o+u9PeLKK4a1xqrBlLVZdVvLNX1GxowZ0+x8fQJgazJ69Ohm51UEAWfOnNku4bIVBg4cmFGjRmXUqFFJloel/vKXv+Tee+/NbbfdloceeqjFnAceeCDnn39+/vu//3uttSdMmJCPf/zj+fWvf73WwNqatPXzsiHfKa2duyHfRUOHDs2WW27Z6vHJ8u+jlb+Dxo0b1+Hhsvb4czllypRm5zvttFObemrreKrx6lhDEwAAAAAAAIAO09pty6qe25agyqorDa1Lv379mm07ubqAy6xZs5qdDxw4sE33WN2cVWuuSX19fZvvVYXf/va32XPPPdc7WJYkCxcubNP49viMzJw5s9l5W4Iy6zJjxozKaq2wppWe2kt9fX0OOuigXHzxxXnwwQfz97//fbW7yl155ZUZP378Gus88sgj2W233fKrX/1qvYJlSda5stmqOuL7qD2/i1Y3p62Bu/bQHn8uV31fDQ0Nbarbt2/f9eyIDdFuK5cBAAAAAAAAwMay6kpD61IURbbYYovMmzcvSTJ37twWY1a9turqPK2x6pw5c+a0al63bt3afK8N9eyzz+a9731vs7BPURTZe++9s++++2bkyJEZPHhwevbs2SJ4ctJJJ+Wll17a2C2v0aq/zm3ZznRd2iP4s2zZssprtsVOO+2UX/3qV/n3f//3fPnLX65dX7JkSW666aZ8+tOfbjFnxowZOfLII1sE43bdddfsv//+2WGHHTJkyJBsscUW6dmzZ7PtcT/5yU/mySefbL831IHa+l2UtPyeWN330aZg1eBp9+7d2zS/tVu0Ui3hslY46KCD1jthCwAAAAAAAED7e+WVV9o0vizLZlu3rS58tOq1FUG0tlh1Tlu3y9uY/v3f/71Z+GPvvffO97///bz+9a9f59yVg0Odwaq/zlWGdVYND1133XXZbrvtNqjmbrvttkHzq/KFL3whv/jFL/Lss8/Wrt13332rDZd94QtfaLaK22tf+9r86Ec/atU2oesTwHq1aOt3UdLye6LKMGRnsupKZW39c9nU1FRlO7SScBkAAAAAAAAAr3rTp09v0/hZs2Y1Wy1qddut9evXr9n5+myHuGpfq9bsLObOnZtbb721dr711lvn9ttvb3W/rd3uc2Pp379/s/OXX365stqrbnW68847typQ9WrQpUuXHHvssfnSl75UuzZlypTVjr3ppptqxz179sztt9+ekSNHtuo+q25builp63dR0vK7ZVPd/nHVP5cvvPBCdt9991bPf+GFFyruiNbYKOGyZ555JpMmTUpjY2Pmz5+/XquAnXLKKe3QGQAAAAAAAACbgr/97W9tGv/UU081Ox8xYkSLMcOGDWt2/sQTT7S5r1XnrFqzs/jLX/7SbDvME044odXBsueff77Fdncd7bWvfW2z8z//+c857rjjKqm96mfl+eef32TCZUkyfPjwZuerW4lr4sSJzYI+RxxxRKuDZfPnz8+4ceM2qMfObNKkSWlqakp9fX2r57Tm+2hTsPPOOzc7/+tf/5ojjzyy1fMff/zxijuiNdotXHbHHXfkqquuyu9///v1WvJvVcJlAAAAAAAAAKzJ/fffn6VLl6ZLly6tGn/PPfc0O19dOGjPPfdMly5dsnTp0iTJo48+mrlz57Z6y7rnn38+kyZNqp1vs802GTp0aKvmro+6urpm521Z+OWll15qdv66172u1XPvuuuuVo/dWPbff/9m57fddlv+67/+q5LaBx98cK655pra+V133ZUTTzyxktqdwapbNK66UluyYZ+X++67L4sXL16/5l4FyrLMvffem3e84x2tGj9hwoSMHz++dj548OB2/Z7oSKt+z/72t7/NhRde2Or5v/71r6tuiVaoW/eQtpk9e3aOPvroHHnkkfnlL3+ZefPmpSzL9fpJ2vY/dgAAAAAAAABsnl5++eXccccdrRq7bNmy/OhHP2p27cADD2wxrk+fPnnzm99cO3/llVdy8803t7qna6+9dp33qFLv3r2bnbdlIZhVn82vvIrZuub9z//8T6vvs7Hstddezbbg+9vf/lZZCO7QQw9N167/fy2fn/zkJ+u1ZWpn9eijjzY7X13QaX0/L0ny3e9+d/0aexX5wQ9+sN5jDzjggKrb6TT22muvbL311rXzhx56KI899lir5j7yyCMtPptsHJWGy1555ZUcfvjh+c1vflP7IimKYr3rCZYBAAAAAAAA0Fqf+cxnaquMrc3VV1+d5557rna+3Xbb5W1ve9tqx37gAx9odn7xxRdn7ty567zHhAkTcsUVVzS7duaZZ65z3oZYOUyVpE1bDw4ePLjZ+f3339+qef/zP//TKbeq69atW84+++xm1z70oQ+1WJVrfWy99dY5+eSTa+fz5s3LRz7ykQ2uW4WHH344Dz744HrPHzNmTH71q181u3b44Ye3GLe+n5ff/e53Lepvim655ZZWBaFefvnlfO1rX2t27fTTT2+vtjpct27dctpppzW79uEPfzgLFixY67z58+fnQx/6UHu2xlpUui3m5ZdfnkcffTRFUaQoipRlmZ49e+Ztb3tbdt999wwaNKhFUhoAAAAAAAAAqvDEE0/k7LPPzv/+7/+uccxDDz2U8847r9m1j370o2vcTvPf/u3f8tnPfra2DeCUKVNy3HHH5Ze//GW6d+++2jmzZ8/Ou9/97mYrh73pTW/KIYcc0ta31Ca77LJLs/Nf//rXufzyy9OtW7d1zn3zm9+c7t2711ag+vnPf54HHngg++677xrn/Pa3v23xa9mZnHPOOfnud7+bmTNnJkmee+65HHnkkfnVr36Vvn37rnP+P/7xj/Tu3Tvbbbddi9cuuuii3HTTTbXf45tuuikNDQ357//+7zV+LlY1c+bMfPe7381uu+2Wd77zna1/Y2sxevTonHbaaTniiCNywQUX5OCDD271okCTJk3Ku971rsyfP792rW/fvnnXu97VYuzQoUOz7bbbZsqUKUmWr3Z200035fjjj19j/UceeSQnnXRSG9/Rq1NZljnuuOPypz/9KUOGDFntmPnz5+fYY49NY2Nj7drOO++8xqDrpuLcc8/NVVddVftz+eijj+bd7353fvjDH2bQoEEtxr/00kv5t3/7t/z1r3+tZZHYuCoLly1atCjf/OY3m/1Gnnnmmfnyl7/cqi9lAAAAAAAAAFhfw4YNy4QJE3LVVVdl3Lhx+dKXvpQ99tij9vqsWbNy9dVX55JLLmm2Ss4b3vCGtQakevXqlauvvrpZwOa2227L3nvvna985St561vfmrq65ZuGLVq0KL/5zW/yyU9+MhMmTKiN7969e66//voK3+3qDRo0KLvttlueeOKJJMvDVG95y1ty8sknZ/vtt0/Pnj2bjd9vv/1q13r37p33vOc9ufHGG5MkS5cuzdvf/vZ85StfySmnnNJs7nPPPZdvfOMb+d///d8sW7YsgwYNytKlSzvd1pBbbbVVrr/++rz73e+u5Rjuvffe7LTTTrnwwgvzvve9r9kWfcnylaTuvPPO3Hjjjbn11ltz5513rjZcNnLkyFxzzTU54YQTateuuuqq3H333Tn//PPzrne9q0XtsiwzduzYPPDAA/nFL36R22+/PfPnz891111X+Xu//fbbc/vtt2fYsGE58cQTc9BBB2WfffZJfX19i55Gjx6dG264IVdccUWLVfk+//nPt1gRb4VTTjkll19+ebPzsWPH5iMf+Uiz+0yePDlXXnllvvrVr2bhwoXp2bNnBg8enPHjx1f3hjuRbbfdNi+99FLGjx+fPfbYI1/96lfz3ve+t/ZnaNmyZfnDH/6Q8847L3//+99r84qiyFVXXbVBOwS+GgwaNChXXHFFs9X/fv/73+d1r3td3v/+92e//fZL//79M2PGjNx///35yU9+UgvgffCDH8yVV17ZUa1vtioLl91///2ZN29ebdWyU089da1pcAAAAAAAAACoyqc+9alceeWVeeqpp/KHP/whf/jDHzJ48OBst912mTNnTsaOHZvFixc3m9OvX7/8+Mc/XufKXu985ztz0UUX5T//8z9r15544om87W1vS79+/TJs2LAsXbo048ePz5w5c5rNraury5VXXpldd921uje7Fp/85Cdzyimn1M4fe+yxPPbYY6sdO27cuAwfPrx2ftlll+XWW29NU1NTkqSpqSkf/OAH8/GPfzw77rhjevTokalTp2by5Mm1OV26dMn111+fD3/4w50uXJYs/737+te/nvPOO68WMHvxxRfzsY99LOecc06GDh2arbbaKkuXLs1LL72UF154odW13//+9+eFF17IBRdckGXLliVJnn322Zx11lk566yz8prXvCYDBw5M165dM3v27Lz44ostPh/tbcKECbn88stz+eWXp66uLoMGDcrAgQPTp0+fzJkzJxMnTlxjT2effXY++tGPrrH2+eefnx/+8Ie1z8OiRYvymc98JhdffHFe97rXpXfv3pk2bVrGjx/fbLWpb33rW/nxj3+8yYbLdthhh3zoQx+qrXh48skn50Mf+lBGjBiRbt26Zfz48Zk1a1aLeZ///Ofzr//6rx3Q8cZ30kknZfz48fnsZz9buzZ79uxceeWVawyPHX300bnggguavd61a6UbNrIGlf0qP//880mWp1rr6uryhS98oarSAAAAAAAAALBWvXr1yu9+97u87W1vy+jRo5MsDxG9+OKLqx2/9dZb5ze/+U2rQ1+XXXZZBgwYkE9/+tO1rSOT5SuirS4okiT19fW57rrrcuyxx7bx3ay/k08+OX/729/yla98pc3bx22//fb56U9/mve85z3NVrBasGBBnnzyyRbje/bsmeuvvz5vf/vbN7jv9vSJT3wiQ4cOzZlnnlnbii9Znm+YMGFCs1Xm2uq8887LLrvsktNOOy1Tp05t9tqkSZMyadKktc7v0aPHarcCXF/Dhw/Pdttt1ywAuMKyZcvW+mdihS233DKXXXZZzjnnnLWuotW/f//8+te/ztvf/vbatrFJsmTJkjz99NMtxtfV1eWrX/1qzjzzzPz4xz9uw7t69bnooosybdq0fOtb30qSzJs3L3/7299WO7auri6f/exnc9FFF23MFjvcRRddlO222y7nnXfeGr9Dk+Urup199tn5xje+kX/84x/NXmtoaGjvNklSV1WhFQnkoiiyww47ZPDgwVWVBgAAAAAAAIB12m677fLoo4/mggsuSJ8+fVY7pnfv3jnrrLPy97//PXvttVeb6n/iE5/I6NGjc9JJJ62xfpIMGDAgH/vYx/L8889v1GDZCl/+8pfz+OOP5/zzz89+++2XQYMGtdgSc03e9ra35dFHH8073/nONY7p2rVr3vve9+aJJ57I8ccfX1Xb7erYY4/N2LFj89nPfjbDhg1b69jevXvnXe96V375y19m//33X2ftww8/PGPHjs23vvWt7Lrrruvc1rBPnz456qij8j//8z+ZOnVqjjzyyDa9l7U56KCDMnHixDz00EO56KKLsv/++6dHjx6tmrvLLrvki1/8Yp599tl8/OMfb9X2jG9605vy2GOP5aSTTkqXLl1WO6Yoihx22GF56KGHcu6557bp/byaXXHFFfnZz36WnXbaaY1j9t1339x333353Oc+t/Ea60ROPfXUPPvss/nGN76RAw44IEOGDEm3bt3Sp0+f7LrrrjnnnHPyxBNP5Nvf/na6devWLByaCJdtLEXZ1qjyGnzzm9/Meeedl6Iosvfee+fBBx+souwmqampKQ0NDWlsbGyxnzEAAAAAAEB7acUz4kpU8/SJ1lqwYEHGjRuXESNGtDo8ApuC66+/Pqeddlrt/Lrrrsupp55aO1+wYEHuv//+jB49Ok1NTbXtKw8++OD06tVrg++/aNGiPPDAAxk3blymTZtW23Jwxx13zN577526usrWeukwU6dOzX333ZfJkyfnlVdeSX19fXbYYYfsu+++6du3b0e3t0FGjx6dJ598MtOmTcvs2bPTq1evbLXVVnn961+fXXfdtdWBrNWZNm1aHn744bz44ouZMWNGli1blvr6+gwePDg77bRTXvva165zK9YqLV68OM8//3yeffbZTJ06NU1NTVm8eHH69OmThoaGDB8+PLvvvvsG/57OnDkz9957byZMmJA5c+akd+/eGTFiRPbdd99KV2frjFYO4h144IG5++67m73+1FNP5c9//nNefPHFdO/ePdtss03e8pa3ZMSIERu501e3b3/72/nYxz5WO7/++uszatSoDuunPf4O1hkzRZVti7nDDjvUjjvjPsoAAAAAAAAAbD569uyZQw89NIceemi71O/evXsOOuigHHTQQe1SvzPYZpttctxxx3V0G+1ip512WuuKUhtiq622yjve8Y52qb0+unXr1q7vd4X+/fvn6KOPbtd7vFq98Y1vzBvf+MaObuNV784772x2vueee3ZQJ5uXyqLSBxxwQLp3756yLDNu3Li17ocKAAAAAAAAAADQGuPHj89vfvOb2nn//v3bPTDJcpWFy+rr63PiiScmSZYtW5Yf/vCHVZUGAAAAAAAAAAA2EWUb9lFfvHhxRo0alaVLl9aujRo1apPYfvjVoNJf5S9+8Yvp379/kuSyyy7L+PHjqywPAAAAAAAAAAC8yu2xxx65+eabs2jRorWOGzt2bA499NDce++9tWs9evTI2Wef3d4t8k9dqyw2ePDg/OIXv8jb3/72zJgxI29961tzyy235E1velOVtwEAAAAAAAAAAF6lHn/88Rx//PHp27dvDj/88Oy1114ZNmxY+vTpkzlz5mTixIm5++67c9tttzVbsSxJ/vM//zM77LBDB3W++ak0XJYk+++/f+69994cd9xxGTt2bP7lX/4l733ve3Pcccdlzz33zKBBg9K9e/eqbwsAAAAAAAAAALyKzJ49OzfddFNuuummVo0/55xzct5557VzV6ys0nBZly5dmp0XRZElS5a06UOwOivqAAAAAAAAAAAAr27bbrttpkyZ0urxr3nNa/L5z38+p556avs1xWpVGi4ry7J2XBRF7b8rXwcAAAAAAAAAADZfkyZNyoMPPpg//vGPeeSRRzJmzJi88MILmTt3burq6tKvX78MGjQo++yzT9761rfm6KOPtlNiBynKCpNfdXV1lYbJVtQqiqLF/qmvZk1NTWloaEhjY2Pq6+s7uh0AAAAAAGAz8c+1AdqddQc2rgULFmTcuHEZMWJEevbs2dHtAABsFtrj72CdMVNU6cplBxxwQG3FMgAAAAAAAAAAAF69Kg2X3X333VWWAwAAAAAAAAAAoIPUdXQDAAAAAAAAAAAAdD7CZQAAAAAAAAAAALQgXAYAAAAAAAAAAEALwmUAAAAAAAAAAAC00HVj3mzKlCmZOXNmGhsbs2zZsuy2225paGjYmC0AAAAAAAAAAADQCu0aLlu0aFF+9KMf5Wc/+1keeOCBNDU1NXv9D3/4Qw455JAW82699dbMmDEjSTJo0KAcccQR7dkmAAAAAAAAvOqVZdnRLQAAbDY2l797tVu47JZbbsnHPvaxvPzyy0la/oIWRbHGuY8//nguvvjiJEmPHj0ydepUK5wBAAAAAADAatTV1SVJli1b1sGdAABsPlb83WvF38U2Ve3y7s4999wcf/zxeemll9oUKlvh7LPPTs+ePVOWZRYuXJibbrqpPdoEAAAAAACAV72uXbumKIosXLiwo1sBANhsLFq0KMnyv4ttyioPl1122WW54oorUpZlLUi21VZb5fjjj88FF1zQqiXh+vXr12wrzN/+9rdVtwkAAAAAAACbhLq6uvTp0yeNjY0d3QoAwGZjzpw56d27t5XL2uKpp57KpZdemqIoUhRFevbsme985zuZPHlybrzxxnz5y19O0rrVy4455pgky7fTvOeee7J06dIqWwUAAAAAAIBNRkNDQxYsWJAFCxZ0dCsAAJu8JUuWZN68edlyyy07upV2V2m47LOf/WyWLVuWsizTrVu33H777fnwhz+8Xsu/7bvvvrXjuXPn5rnnnquyVQAAAAAAANhk9OnTJ127ds2UKVOyePHijm4HAGCTtWzZskydOjVFUQiXtcW8efNy++2311YtO//887P//vuvd72RI0c2+w0YPXp0FW0CAAAAAADAJqcoigwbNixlWWb8+PF55ZVXUpZlR7cFALBJWbJkSaZMmZJ58+blNa95zXotuPVqU9k7vO+++7Jo0aIky//y+tGPfnSDaw4ePDhz5sxJkrz44osbXA8AAAAAAAA2Vd27d8/w4cMzadKkTJgwIV26dEmfPn3Su3fvdO3aNXV1dSmKoqPbBAB41SjLMsuWLcuiRYsyZ86czJs3L0VR5DWveU169+7d0e1tFJWFyyZPnpxkebBs+PDhGTx48AbX7Nu3b+24qalpg+sBAAAAAADApqxr164ZPnx45s+fn7lz52bu3LlpbGzs6LYAAF71evfuncGDB2fLLbfcLFYsW6Gydzp9+vTa8aBBgyqpuWTJktpxXV1lO3gCAAAAAADAJqsoivTq1Su9evXKoEGDsnTp0ixdujTLli3r6NYAAF516urqaqvAbo4qC5etvNTbvHnzKqm5cmBtwIABldQEAAAAAACAzUmXLl3SpUuXjm4DAIBXocoidStWKyvLMpMmTdrgei+//HImTZpU2/e9im02AQAAAAAAAAAAaJ3KwmU77bRT7bipqSl/+ctfNqjer3/9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LFy4sE11iqLImDFj2qnL/69nz54ZOnRoGhoasmzZskyfPj0TJ07Myvm7xYsX59JLL82kSZNyzTXXtHtPAAAAAAAAAAAAHaHdwmVXXHFFvva1r7VYHWx9Fkpb3xXC1mXIkCE56qijcsABB+Qtb3lLRowYkbq6umZjZs2alVtuuSWf//znM3ny5Nr1a6+9Nvvtt19OO+20dukNAAAAAAAAAACgI1W+LeYrr7ySo48+OnfeeWctSLYiHFaWZauDYivGrvjv0qVLq2wzTz75ZN74xje2up9Zs2bl0EMPzV/+8pfatW222SaTJ09uEUhbl864hB0AAAAAALDpsy0mAAB0Xp0xU9S2VFQrnHLKKfm///u/ZkGyurq6DB48uNm4QYMGZeutt0737t1TlmXtZ4WBAwdm6NChGTZsWIYOHVp1m9l1113btCJav3798qMf/ajZnKlTp+ZPf/pT5b0BAAAAAAAAAAB0tErDZb/61a/y85//PEVRpCiK9OvXL9/73vfS2NjYYnvMH//4x3nhhRcyf/78PPfcc/nf//3f7L777rWAWZcuXXLllVdm3LhxGTduXJVtrreddtopb37zm5tdGz16dAd1AwAAAAAAAAAA0H4qDZf913/9V5LlW1r27Nkzd911V04//fT06tVrrfO23377nHnmmfnLX/6Sb3/72+nevXtefvnlvPOd78wtt9xSZYsbbPvtt292Pn369A7qBAAAAAAAAAAAoP1UFi6bPXt2HnroodqqZeeee2523XXXNtc5++yz89Of/jRFUWTJkiUZNWpUnn/++ara3GALFixodt63b9+OaQQAAAAAAAAAAKAdVRYue/DBB1OWZW1by9NPP329a73jHe/IWWedlWR5mOuiiy6qpMcNVZZlHn300WbXVt0mEwAAAAAAAAAAYFNQWbhsypQpteOBAwdm5MiRax2/6gpgqzrvvPOSLA90/eIXv0hTU9OGN7mBrr322rzwwgu189e//vXZe++9O7AjAAAAAAAAAACA9lFZuGzmzJlJkqIosu222652TLdu3WrH6wqX7bDDDtluu+2SJEuWLMkDDzxQUafr5/vf/37OPvvs2nldXV2+/e1vpyiKDuwKAAAAAAAAAACgfXRtj6I9e/Zc7fX6+vrMmDEjRVHkxRdfXGedbbbZJpMnT06SPP/885X2uKpnn302EydOrJ0vXrw4s2bNyt/+9rf86le/yt///vfaa927d89VV12Vt771re3aEwAAAAAAAAAAQEepLFzW0NBQO54zZ85qx/Tr1y8zZsxIkowdO3adNRcuXFg7bu9tMb/73e/miiuuWOuYoihyxBFH5PLLL89uu+3W6toLFy7cqO8FAAAAAAAAAABgQ1W2LeaIESOSJGVZZtq0aasds/POO9eO17XN5cKFC/Pss8/Wtp3s1atXRZ2uv/e973258MIL2xQsS5LLL788DQ0NtZ/XvOY17dQhAAAAAAAAAABANSoLl+2yyy6142nTpmXmzJktxuyxxx5JlgfQHnnkkTz33HNrrPeDH/wgCxYsSFmWSZLtttuuqlbX280335z99tsvBxxwQJu26fyP//iPNDY21n4mTZrUjl0CAAAAAAAAAABsuMrCZdtuu22GDRtWO3/kkUdajHnve9+bZPn2ksuWLcuoUaPS2NjYYtxDDz2UCy64oLZqWZLsv//+VbW6Wt/85jdTlmXt55VXXsmkSZPy29/+NmeccUa22GKL2tj77rsve+21V/785z+3qnaPHj1SX1/f7AcAAAAAAAAAAKAzqyxcliSHHnpo7fh3v/tdi9d33nnnWkisKIo8/PDD2WmnnfLJT34yV111Vb797W/n/e9/fw444IA0NTWlLMsURZF3vvOd2XrrratsdZ222GKLbLfddjnqqKPyve99L08++WR233332uuzZ8/O0UcfndmzZ2/UvgAAAAAAAAAAADaGolyx72QF7rjjjrz97W9Pkmy11VaZNGlSunfv3mzMU089lb322iuLFy9OklqAbGUrrpVlmS233DKPPvpodtxxx6raXG/Tp0/PHnvs0Wxby8985jP5whe+0KY6TU1NaWhoSGNjo1XMAAAAAACAjWaVRzLtprqnTwAAsPnojJmiylcuO/bYY3PUUUdl7733zl//+tcWY974xjfmlltuSffu3ZsFy1ZsR5mkFiyrr6/PLbfc0imCZUkycODAXHrppc2uXX/99R3TDAAAAAAAAAAAQDuqdOWytnjuuefy6U9/Or/73e+yaNGiZq91794973nPe3LZZZdl5MiRHdHeGs2ePTv9+/fPyr9s48ePz7Bhw1pdozOmDAEAAAAAgE2flcsAAKDz6oyZoq4ddePXvva1+fnPf5558+blL3/5S1566aWUZZnBgwfnzW9+c3r16tVRra1V3759079//8yYMaN27cUXX2xTuAwAAAAAAAAAAKCz67Bw2Qq9e/fO/vvv39FtbJBu3bp1dAsAAAAAAAAAAACVquvoBl5t5syZk5kzZza7tvXWW3dQNwAAAAAAAAAAAO1DuKyNbr311pRlWTvfaqutss0223RgRwAAAAAAAAAAANUTLmuD+fPn55JLLml27R3veEfq6vwyAgAAAAAAAAAAm5auG+Mm//jHP3LPPffkkUceybhx4zJ79uzMnTs3ffr0Sd++fTNixIjsvffeOfDAA/O6172u3fv51Kc+lfe9733Za6+9Wj1n5syZOf744/Pss8/WrnXp0iXnnntue7QIAAAAAAAAAADQoYpy5T0eK/azn/0s3/jGN/Lggw82u77yLYuiaPbaPvvsk3PPPTfvfe9726ut7L777nniiSey99575/jjj88hhxySXXbZJd26dWvR5z/+8Y/89Kc/zbe+9a1Mnz692evnn39+vvKVr7T5/k1NTWloaEhjY2Pq6+s36L0AAAAAAAC01iqPZdpN+z19AgCATVdnzBS1S7jsxRdfzBlnnJHbb789yf8Pk60aJFvZqoGzww8/PN/73vcyZMiQqturhctW1r1792y77bbp27dvunfvnjlz5mTSpEmZM2fOamuMGjUq11577XptidkZPwgAAAAAAMCmT7gMAAA6r86YKap8W8wJEybkrW99a8aNG5eyLFMURYqiSFmWWVeObUX4rCzL3HHHHdl///1z1113ZdiwYVW32cKiRYsybty4dY6rr6/Pl770pXzoQx9aa1gOAAAAAAAAAADg1azSlcsWLlyY3XbbLc8+++zy4v8MldXX1+c973lPDjrooLzhDW/IgAED0rt378ybNy8zZszIU089lXvuuSc/+9nP0tTUVJuXJDvuuGOeeOKJ9OjRo6o2M3r06PzmN7/JH/7whzzyyCNpampa6/iiKPLGN74xJ598ckaNGpWtttpqg+7fGVOGAAAAAADAps/KZQAA0Hl1xkxRpeGyCy+8MJdffnltRa+6urpccMEFufDCC9O7d+91zp83b17+8z//M1/96lezbNmy2spn//7v/54vfOELVbXZzLJly/Lcc8/l+eefz8SJE9PU1JTFixdnyy23TENDQ4YPH5499tij0t+wzvhBAAAAAAAANn3CZQAA0Hl1xkxRZeGyJUuWZPDgwZk1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7PzII4/soE4AAAAAAAAAAADaV+XbYm6qfve73+Xee+9tdu3UU0/tmGYAAAAAAAAAAADaWaUrl62vuXPn5uGHH8706dPTr1+/7L777hk0aFBHt1Uzc+bMfPCDH2x27eijj87ee+/dqvkLFy7MwoULa+dNTU2V9gcAAAAAAAAAAFC1SsNlCxcuzJQpU2rngwcPTq9evdY4fsGCBTn//PPzve99L4sXL65dr6ury7ve9a5861vfyrbbbltli222bNmynHTSSZk8eXLtWkNDQ771rW+1usbll1+eSy+9tD3aAwAAAAAAAAAAaBdFWZZlVcW+/vWv54ILLkiSdO3aNWPHjl1jOGzJkiU5+OCD88ADD2R1LRRFkUGDBuX+++/P9ttvX1WL/4+9+w6zq6zXh3/vyaQnMwlpQoQkdJAiEERqCEdAEIKIyqGjIiAWOBYs5yecgwV9PQpioQsoIlgQC3AEOTQRKUqiVIGE0EvaTDrJzHr/GLLNMCkzyZ6Zncnnc137mrXXftazvrNZsydk3fk+HfaZz3wm3/nOd1rtu/baa3PkkUe2e44VdS7beOON09DQkLq6uorVCgAAAAAAsCqlUtecp3J3nwAAYP3R2NiY+vr6qsoUVbRz2a9+9atyUGzSpEmr7Dr2ta99Lffcc09KpVJKpVKrgNmy56+88koOO+ywTJkyJb169apkqe1ywQUXtAmWnXnmmR0KliVJ375907dv30qWBgAAAAAAAAAA0KlqKjXR4sWL89e//rUcFjvssMNWOrahoSHf+c53yiGyoiiy11575fOf/3w+8pGPpK6uLqU3/unMY489losvvrhSZbbbNddckzPOOKPVvhNPPDHf+MY3urwWAAAAAAAAAACArlaxcNkjjzyS119/vdyBbOLEiSsd+8tf/jJz585N0tKl7P/9v/+Xu+66K+eee24uvfTSPPTQQxk1alQ5fHbppZdWqsx2+f3vf58TTjihVTe1973vfbnsssvKoTcAAAAAAAAAAICerGLhsqlTp5a3hwwZssolMa+//vokSVEU2WijjXL22We3en3s2LH5yle+Ug53/f3vf89LL71UqVJX6fbbb88HPvCBLF26tLxv//33z89+9rNuWZoTAAAAAAAAAACgO1QsXLYs/FUqlbLRRhutdNzSpUtz9913l5fPPProo1cY2vrgBz/Yav/kyZMrVepK3XfffZk0aVIWLVpU3rfHHnvk17/+dfr06dPp5wcAAAAAAAAAAKgWFQuXzZ8/v7w9ePDglY6bPHly5s2bV+5KdvDBB69w3ODBgzN27Njy82eeeaYida7M3//+9xx00EGZN29eed9OO+2Um266KQMHDuzUcwMAAAAAAAAAAFSbioXLloXFkmTJkiUrHXfPPfeUt3v37p13vvOdKx07bNiw8nZjY+NaVrhyTzzxRPbff//Mnj27vG+bbbbJH/7wh9TX13faeQEAAAAAAAAAAKpVxcJldXV1SVpCZi+//PJKx91+++1JWpbPHD9+fPr27bvSsU1NTeXt5cNrlTR9+vS8613vyquvvlreN27cuNx6660ZMWJEp5wTAAAAAAAAAACg2lUsXPbWt761vP3SSy/ltddeazNm4cKF+eMf/5hSqZQkmTBhwirnXL6T2KBBgypU6b+89NJL+bd/+7c8//zz5X2jR4/ObbfdltGjR1f8fAAAAAAAAAAAAOuKioXLdtpppyQtHcmKosjVV1/dZsw111yTBQsWlLuQTZw4caXzLVmyJM8//3w5iLbhhhtWqtQkyaxZs7L//vvn6aefLu8bMWJEbr311owbN66i5wIAAAAAAAAAAFjXVCxctskmm2SHHXZI0rKE5dlnn5277rqr/PqUKVPyn//5n+Ww2AYbbJB99913pfM9/PDDef3118tBtM0337xSpWbu3Ll597vfnUceeaS8b8iQIbnllluyzTbbVOw8AAAAAAAAAAAA66raSk522mmn5dRTT02pVMq8efMyceLEbL311undu3ceffTRNDU1pSiKlEqlfOQjH0lt7cpPf+utt5a3+/btm2233bZidU6aNCkPPPBAq32f/vSnM2PGjPzxj3/s0Fy77LJLhg4dWrHaAAAAAAAAAAAAqkGpWNYarAKKosjee++dP//5z+XlMVud7I19G220UR5++OEMGTJkpXO94x3vyIMPPphSqZQ999yzVRe0tbWse1ol3H777avswLYijY2Nqa+vT0NDQ+rq6ipWCwAAAAAAwKpU8BbJKlXu7hMAAKw/qjFTVLFlMZOW0Nbvf//77LXXXq2CZcvCXEVRZNSoUfnNb36zymDZ5MmTy8GyJNl///0rWSYAAAAAAAAAAACrUdFlMZNkyJAhueuuu/KLX/wiv/zlL/PPf/4zCxcuzEYbbZT9998/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fpaf//znlSoTAAAAAAAAAACAdqhYuOxvf/tbkqQoitTU1GTSpEmrHN/c3LzS10aMGJGvfOUr5edf/epXK1MkAAAAAAAAAAAA7VKxcNmMGTOStHQtGzNmTAYOHLjK8QsXLlzl60ceeWT69OmToijyyCOP5KmnnqpUqQAAAAAAAAAAAKxGxcJlDQ0N5e1hw4atcMyAAQNSFEWSZN68eaucb9CgQRk3blz5+QMPPFCBKgEAAAAAAAAAAGiPioXL+vfvX95eFiB7s7q6uvL2888/v9o5hwwZUt5+8cUX17w4AAAAAAAAAAAAOqRi4bLlu5XNnTt3hWM23HDD8vajjz662jlfe+218vbrr7++FtUBAAAAAAAAAADQERULl2299dZJWrqWPffccyscs+OOO5bH3H777auc79lnn83UqVNTKpWSJEOHDq1UqQAAAAAAAAAAAKxGxcJlb3vb21JbW5skWbhwYaZOndpmzF577VXefu6553LttdeudL6zzjoryb+W2Nxmm20qVSoAAAAAAAAAAACrUbFw2cCBAzN+/Pjy8//7v/9rM+aII45I3759UyqVUhRFTj311Pz85z8vB8iSpLGxMR//+Mfz4x//uNy1rL6+PrvvvnulSgUAAAAAAAAAAGA1KhYuS5J3v/vd5e3f/e53bV6vr6/PJz/5yRRFkVKplMbGxhx11FEZNWpU9thjj4wfPz6jRo3KRRddlCTlcZ/61KfSp0+fSpYKAAAAAAAAAADAKpSK5duGraUnn3wyW221VZKktrY2Tz/9dDbeeONWYxYsWJB3vvOdefjhh8sdzJK02l7++W677Za77rorvXv3rlSZ3a6xsTH19fVpaGhIXV1dd5cDAAAAAACsJ95YNKbTVe7uEwAArD+qMVNUW8nJtthii/zud7/LokWLkiTNzc1txgwYMCC333573v/+9+fOO+9MkvLyl8u+FkWRoihy8MEH56c//WmPCpYBAAAAAAAAAACsCyrauayjfve73+Xaa6/NX/7yl7zyyispiiJvectbsscee+T444/P/vvv312ldapqTBkCAAAAAAA9n85lAABQvaoxU9St4bL1VTVeCAAAAAAAQM8nXAYAANWrGjNFNd1dAAAAAAAAAAAAANVHuAwAAAAAAAAAAIA2hMsAw4qT3AAAmMZJREFUAAAAAAAAAABoQ7gMAAAAAAAAAACA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e//737/SsUuXLs2XvvSlJCmHygYMGJDddtstm266aTlkVhRFfvOb3+Tmm2+uVJkAAAAAAAAAAAC0Q8XCZU888UQaGxtTFEWS5MADD1zp2P/93//NM888U+5S9p73vCcvvPBC7r333jz55JP51a9+ldra2vLrF1xwQaXKBAAAAAAAAAAAoB0qFi576qmnytv9+vVb5ZKY1113XZKUO5ZdddVVqaurK79++OGH5/Of/3yKokhRFLntttvS2NhYqVIBAAAAAAAAAABYjYqFy5577rkkLctcbrLJJuWuYyty2223tVo+c4MNNmgz5uSTTy5vNzU1ZfLkyZUqFQAAAAAAAAAAgNWoWLhs3rx55e36+vqVjvvnP/+Zl19+ufx80qRJKxz31re+NRtttFH5+ZNPPlmBKgEAAAAAAAAAAGiPioXLXn/99XaNu/fee5O0LIlZKpUyYcKElY5dPlw2Z86ctaoPAAAAAAAAAACA9qtYuGzw4MHl7VmzZq103B133JGkZfnMbbbZZoVLYpaLq/lXeYsXL177IgEAAAAAAAAAAGiXioXLRowYkaSlI9n06dOzcOHCNmOKosj//u//plQqJUn22WefVc65fLeyAQMGVKpUAAAAAAAAAAAAVqNi4bIddtghSUtHsqVLl+b3v/99mzG33nprXnnllRRFkSTZd999VznnSy+9VN5eFl4DAAAAAAAAAACg81UsXLbttttmww03TNLSoexLX/pSZs6cWX597ty5+eIXv1h+3qdPnxxwwAErne/JJ5/M3Llzy88322yzSpUKAAAAAAAAAADAalQsXFYqlXLCCSekKIqUSqVMnTo1b3vb2/Lxj388Z5xxRnbaaadMnjy5PPZ973tf6uvrVzrf3Xff3Wrut73tbZUqFQAAAAAAAAAAgNUoFcvWqKyAuXPnZuutt87LL7+cJOWg2fLbRVGkb9++mTJlSrbccsuVzvWe97wnN998c0qlUrbbbrtMmTKlUmV2u8bGxtTX16ehoSF1dXXdXQ4AAAAAALCeeOO2Taer3N0nAABYf1RjpqhincuSZPDgwbnpppsydOjQVsGyJOVgWU1NTS666KJVBsteeuml/PGPfywfv99++1WyTAAAAAAAAAAAAFajouGyJNlxxx3z6KOP5mMf+1hGjBiRoihSFEV69+6d/fffP3fccUdOOOGEVc5xwQUXZMmS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pas4dHhadw7bOMlb0rrD2NA3Hr3XoLTmtITYZiWZnX91Q5uR5Pm07pr2/Gpq3WijjbLTTjtl1113zfjx4zN+/PiMGjVqDarqYj3pWmPNuAboAtWYKdK5DAAAAAAAAAC6yTPPPJM777wz96QlSPaPrDicNTDJNm96bJ2WQNmATq6xJkn9G49xqxnblOSlJE/dfnsee+yxPPbYY3n00Ufz2GOP5cUXXyw/brzxxvIxG2+8ccaPH5/ddtstEyZMyC677JLevdckBgdApelc1g2qMWUIAAAAAAD0fBpuAD3OOvbBVhRFpk6dmjvvvLP8mD59eptxw5PsmmT8G193TPLWtIS81hkreM8aGhryyCOP5K9//WseeOCBPPjgg3n88cfz5tjCwIEDs+eee2bChAmZMGFCdt111/Tp06erKl+xdexaoxO4BugC1ZgpEi7rBtV4IQAAAAAAAD2fe6JAj7MOfLDNmzcvt912W2666ab87//+b5599tlWr/fq1Svjx4/PPvfdl93SEijbJEkXfWedp53vWWNjYx566KE88MAD+dOf/pS77rors2fPbjWmf//+mThxYg466KAcfPDB2XTTTTuj4lVbB641OplrgC5QjZki4bJuUI0XAgAAAAAA0PO5Jwr0OFX4wVYURR577LHcfPPNuemmm3L33XdnyZIl5dd79+6dXXfdNRMmTMi+++6bPfbYI4MGDeq676WrrOEvg+bm5jz88MOturvNmDGj1Zgtt9wyBx10UA466KBMmDAh/fr1q0TFq1aF1xpdzDVAF6jGTJFwWTeoxgsBAAAAAADo+dwTBXqcKvlgK4oiDz74YH71q1/l+uuvz5NPPtnq9c0226xVGGrgwIFtJxEuW8k0Rf7xj3/k5ptvzs0335x77rknS5cuLb8+aNCgvOc978kRRxyRgw46qCWo1xmq5FqjG7kG6ALVmCkSLusG1XghAAAAAAAAPZ97okCP040fbE1NTbnnnnty/fXX5/rrr89zzz1Xfq1v377Zd999y8s4brHFFqs/h3BZuzQ0NOSPf/xjOWz24osvll/r169fDjzwwBxxxBE55JBDMnTo0Mqd2C9RXAN0gWrMFAmXdYNqvBAAAAAAAICezz1RoMfp4g+2oijy0EMP5eqrr861116bl156qTxk4MCBrTpoDR48uGPnEC7rsObm5jzwwAO5/vrr86tf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0NCQurq67i4HAAAAAABYT5RKXXMed59gDaxHP6BFUeSWW27JWWedlfvvvz9JMmjQoHzqU5/Kf/zHf2T48OHtn6wnvW9d9b10lSq41iqqE//7NCW5Lsk5aVk6M0k22GCDfPazn80nPvGJDB48uNPO3al60s9n0vO+H6pSNWaKdC4DAAAAAAAAoEv83//9X/bee++8+93vzv33358BAwbk85//fJ555pl87Wtf61iwDHqIXmlZLvORJFdffXW23HLLzJo1K1/60pcyduzYnHvuuTqZAd1GuAwAAAAAAACATnX33Xdn4sSJ+bd/+7fcc8896devXz796U9n2rRp+cY3vpFhw4Z1d4nQ7XolOeaYY/LII4/kJz/5SbbYYotyyGzcuHH51re+lQULFnR3mcB6RrgMAAAAAAAAgE7xl7/8JQcccED22Wef3HHHHenTp08++clP5umnn863v/3tjBw5srtLhKpTW1ubY489No8++mg5ZDZz5syceeaZ2XTTTXPBBRdk0aJF3V0msJ4QLgMAAAAAAACgov7617/mPe95T3bffffceuutqa2tzSmnnJKnnnoqF1xwQTbaaKPuLhGq3vIhsyuuuCJjx47NK6+8ktNPPz1bbLFFLrnkkixZsqS7ywR6OOEyAAAAAAAAACriH//4Rw4//PCMHz8+N910U3r16pUPf/jDefLJJ3PRRRdl44037u4SYZ1TW1ubE088MU888UQuvPDCjB49Os8//3xOOeWUbLXVVrnqqquydOnS7i4T6KGEywAAAAAAAABYK0888USOOuqo7LjjjrnhhhtSU1OT4447Lo8//nguv/zyjB07trtLhHVenz59cuqpp+app57K+eefn1GjRmXatGk58cQT87a3vS3XXnttmpubu7tMoIcRLgMAAAAAAABgjUybNi0f+tCHsu222+baa69NURQ58sgj8/DDD+fHP/5xNt988+4uEXqcfv365fTTT8/TTz+db37zmxk2bFj++c9/lgOev/71r1MURXeXCfQQwmUAAAAAAAAAdMgLL7yQ0047LVtttVWuvPLKNDc3Z9KkSZk8eXKuvfbabLPNNt1dYmWVSp3/gA4aOHBgzjzzzEydOjXnnHNO6uvr8/DDD+d973tfeWlaITNgbQmXAQAAAAAAANAur776aj796U9ns802y4UXXpglS5bkgAMOyH333Zff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RGNjY+rr69PQ0JC6urruLgcAAACgYmbPnp158+Zl/vz5WbBgQatHnz59cvDBB5fHXnHFFXnuueeyePHiLFq0qNXXAQMG5OKLLy6PPemkk/LAAw+UxywfHOvXr19efvnl8tgDDjggt9566wrrq6mpSVNTU/n54YcfnhtuuGGl38/ChQvLgbHjjjsuV1999UrHzpgxI8OGDUuSnHrqqa3qf7Pp06dnk002SZJ85jOfyXe+852Vjn300UezzTbbJEnOOuusfOUrX1np2AcffDC77LJLkuQb3/hGvvjFL6507J133pl99tknSfL9738/n/zkJ1c69sYbbyz/t7viiivy4Q9/OEnSq1ev9O3bN3379k2fPn3St2/fXHjhheWxt99+e77yla+UX3vz2BNOOCG77bZbkmTatGn53e9+l/79+7d6DBgwIP3798+mm26aESNGJEmWLl2a119/Pf369UtNjcUZADqiVOqa87j7RJfpiou6iy7oZ0ulfDvJpWlZCjNJtk7L8pdHJ+ldqRN11Q9oV33gQE+7prvi++nmn88/JflWkt8ut2+PtITMJmUNluBzDdCDVGOmSOcyAAAAgPXQww8/nIaGhsydO7dVAGz+/PnZYIMNcsIJJ5THfupTn8rzzz/fJiy2YMGCjB07NnfccUd57O67754nnnhiheccO3Zspk2bVn7+wx/+MA8++OAKxw4bNqxVOOvpp5/O3//+9xWOXbx4cavnvXv/67Zbr1690rt37/Tp06fcjau5ubkcSNp8882z0047pVevXm0ebw4tjR8/PvPnz2/1+vLj+/TpUx67zz77lI8vLfeXz8u2Bw0aVN639957Z+nSpW3GJC1dzDbYYIPy81122SUnnXRSmpubV/hYfuzmm2+eSZMmlV9bunRpmpqayp3HlnVOS5LBgwdns802y9KlS8uvL/u6rEvZMsvX2tTUVL4Wlnn99dfL2y+++GJuv/32rMyee+5ZDpdNmTIlp59++krHXnjhhTn11FOTtATj3vWudyVJ+vbt2yaM9vnPfz7HHntskmTq1Kn5xje+kUGDBmXgwIEZNGhQq+0ddtghW265Zbn2GTNmlF/XmQ0A6AqTJ0/Oeeedl2uSLPuT1vgkX0zLknKi9EBPs9cbj8eSfDvJT5L8OcnhSbZK8tkkxybp110FAq3oXNYNqjFlCAAAAFSnWbNmZe7c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SdcAVasaM0XCZd2gGi8EAAAAerbXX389jz/+eKuw2PLb+++/fz7+8Y8nWX1g7IQTTsiVV16ZJFm0aFH69++fvn37ZuTIka3CYsOGDcsee+yRo48+unzs3/72t3JYbODAgW7sA7BCixYtyh133FHuijljxoxW2/vvv3++/OUvJ1l9EO2DH/xgrrvuuiQtQbTevXunpqamTRBtxIgR2W233XLccceVj33qqafKHTH9zqKncE+UHqcLw2VFUeS+++7LpZdemmuvvTYLFixI0tKp8+ijj85pp52WnXfeec3P43cNrBnhso7raZ83b7xnjY2Nueqqq/L973+/3I05Sfbcc8989KMfzQc+8IEMGDBgzc/Tk64BqlY1ZoqEy7pBNV4IAAAArHsWLVqU++67b6Udxg455JB87nOfS5K88MILeetb37rSuY4//vhcddVV5XkHDx6cESNGZOTIkRk5cmR5e8SIEdlll11adYCZO3duBg0a5KY7AN1i6dKleeqpp9oE0JZtL+sgkyQzZ84sd1JbkRUF0Zqbm1NbW1sOoC37fbjnnnuWg9lJcv/992eDDTbIyJEjdUajqrknSo/TBRf1rJkzc/XVV+fSSy/Nww8/XN6/9dZb5+STT86JJ56YoUOHrv2J/O6ANSNc1nE97fPmTe9Zc3Nz/vjHP+aHP/xhfv/736epqSlJUl9fn2OOOSYf/ehH8/a3v73j5+lJ1wBVqxozRcJl3aAaLwQAAACqw/z583PLLbe0CowtHxx7//vfn7PPPjvJ6gNjxx13XH784x8naelc9ta3vrVVUGz54Nj222+fPffcs3xsURRuigPQIy1cuDAzZ85sE0R77bXXsu222+aoo45KksyePTvjxo1LQ0PDCuc58sgjc+211yZpWVK6d+/eWfbX7X369Gn1e3bffffNF77whfKxf/jDH7LBBhuUfyevVfcE6CD3ROlxOumibkpyW5Irk/y6X78sWrQoSdKvX7988IMfzEc/+tHsueeelf3/Jv8PBmtGuKzjetrnzSresxdffDFXXnllLrvsskybNq28f5dddsmHPvShHHXUUdlggw3ad56edA1QtaoxUyRc1g2q8UIAAACgspqamtKrV68kLZ29fvGLX6xwOcpXX301xx57bL75zW8mafkLr9GjR6903mOPPTY/+clPkrQExnbYYYeVdhjbeuuts+OO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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "import scipy.stats\n", + "import matplotlib.pyplot as plt\n", + "\n", + "with torch.no_grad():\n", + " # Draw samples from empirical marginal for plotting\n", + " csis_samples = torch.stack([marginal() for _ in range(1000)])\n", + "\n", + " # Calculate empirical marginal with importance sampling\n", + " is_posterior = pyro.infer.Importance(model, num_samples=50).run(\n", + " prior_mean, observations={\"x1\": torch.tensor(8.),\n", + " \"x2\": torch.tensor(9.)})\n", + " is_marginal = pyro.infer.EmpiricalMarginal(is_posterior, \"z\")\n", + " is_samples = torch.stack([is_marginal() for _ in range(1000)])\n", + "\n", + "# Calculate true prior and posterior over z\n", + "true_posterior_z = torch.arange(-10, 10, 0.05)\n", + "true_posterior_p = dist.Normal(7.25, (5/6)**0.5).log_prob(true_posterior_z).exp()\n", + "prior_z = true_posterior_z\n", + "prior_p = dist.Normal(1., 5**0.5).log_prob(true_posterior_z).exp()\n", + "\n", + "plt.rcParams['figure.figsize'] = [30, 15]\n", + "plt.rcParams.update({'font.size': 30})\n", + "fig, ax = plt.subplots()\n", + "plt.plot(prior_z, prior_p, 'k--', label='Prior')\n", + "plt.plot(true_posterior_z, true_posterior_p, color='k', label='Analytic Posterior')\n", + "plt.hist(csis_samples.numpy(), range=(-10, 10), bins=100, color='r', density=1,\n", + " label=\"Inference Compilation\")\n", + "plt.hist(is_samples.numpy(), range=(-10, 10), bins=100, color='b', density=1,\n", + " label=\"Importance Sampling\")\n", + "plt.xlim(-8, 10)\n", + "plt.ylim(0, 5)\n", + "plt.xlabel(\"z\")\n", + "plt.ylabel(\"Estimated Posterior Probability Density\")\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using $x_1 = 8$ and $x_2 = 9$ gives a posterior far from the prior, and so using the prior as a guide for importance sampling is inefficient, giving a very small effective sample size. By first learning a suitable guide function, CSIS has a proposal distribution much more closely matched to the true posterior. This allows samples to be drawn with far better coverage of the true posterior, and greater effective sample size, as shown in the graph above.\n", + "\n", + "For other examples of inference compilation, see [1] or .\n", + "\n", + "## References\n", + "\n", + "[1] `Inference compilation and universal probabilistic programming`,
    \n", + "Tuan Anh Le, Atilim Gunes Baydin, and Frank Wood" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/custom_objectives.ipynb b/pyro/source/tutorial/source/custom_objectives.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..4ad07c9b4156e158d432c01484feda31fe87190c --- /dev/null +++ b/pyro/source/tutorial/source/custom_objectives.ipynb @@ -0,0 +1,293 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Customizing SVI objectives and training loops\n", + "\n", + "Pyro provides support for various optimization-based approaches to Bayesian inference, with `Trace_ELBO` serving as the basic implementation of SVI (stochastic variational inference).\n", + "See the [docs](http://docs.pyro.ai/en/dev/inference_algos.html#module-pyro.infer.svi) for more information on the various SVI implementations and SVI \n", + "tutorials [I](http://pyro.ai/examples/svi_part_i.html), \n", + "[II](http://pyro.ai/examples/svi_part_ii.html), \n", + "and [III](http://pyro.ai/examples/svi_part_iii.html) for background on SVI.\n", + "\n", + "In this tutorial we show how advanced users can modify and/or augment the variational\n", + "objectives (alternatively: loss functions) and the training step implementation provided by Pyro to support special use cases." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. [Basic SVI Usage](#Basic-SVI-Usage)\n", + " 1. [A Lower Level Pattern](#A-Lower-Level-Pattern)\n", + "2. [Example: Custom Regularizer](#Example:-Custom-Regularizer)\n", + "3. [Example: Scaling the Loss](#Example:-Scaling-the-Loss)\n", + "4. [Example: Beta VAE](#Example:-Beta-VAE)\n", + "5. [Example: Mixing Optimizers](#Example:-Mixing-Optimizers)\n", + "6. [Example: Custom ELBO](#Example:-Custom-ELBO)\n", + "7. [Example: KL Annealing](#Example:-KL-Annealing)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Basic SVI Usage\n", + "\n", + "We first review the basic usage pattern of `SVI` objects in Pyro. We assume that the user\n", + "has defined a `model` and a `guide`. The user then creates an optimizer and an `SVI` object:\n", + "\n", + "```python\n", + "optimizer = pyro.optim.Adam({\"lr\": 0.001, \"betas\": (0.90, 0.999)})\n", + "svi = pyro.infer.SVI(model, guide, optimizer, loss=pyro.infer.Trace_ELBO())\n", + "```\n", + "\n", + "Gradient steps can then be taken with a call to `svi.step(...)`. The arguments to `step()` are then\n", + "passed to `model` and `guide`.\n", + "\n", + "\n", + "### A Lower-Level Pattern\n", + "\n", + "The nice thing about the above pattern is that it allows Pyro to take care of various \n", + "details for us, for example:\n", + "\n", + "- `pyro.optim.Adam` dynamically creates a new `torch.optim.Adam` optimizer whenever a new parameter is encountered \n", + "- `SVI.step()` zeros gradients between gradient steps\n", + "\n", + "If we want more control, we can directly manipulate the differentiable loss method of \n", + "the various `ELBO` classes. For example, this optimization loop:\n", + "```python\n", + "svi = pyro.infer.SVI(model, guide, optimizer, loss=pyro.infer.Trace_ELBO())\n", + "for i in range(n_iter):\n", + " loss = svi.step(X_train, y_train)\n", + "```\n", + "is equivalent to this low-level pattern:\n", + "\n", + "```python\n", + "loss_fn = lambda model, guide: pyro.infer.Trace_ELBO().differentiable_loss(model, guide, X_train, y_train)\n", + "with pyro.poutine.trace(param_only=True) as param_capture:\n", + " loss = loss_fn(model, guide)\n", + "params = set(site[\"value\"].unconstrained()\n", + " for site in param_capture.trace.nodes.values())\n", + "optimizer = torch.optim.Adam(params, lr=0.001, betas=(0.90, 0.999))\n", + "for i in range(n_iter):\n", + " # compute loss\n", + " loss = loss_fn(model, guide)\n", + " loss.backward()\n", + " # take a step and zero the parameter gradients\n", + " optimizer.step()\n", + " optimizer.zero_grad()\n", + "```\n", + "\n", + "## Example: Custom Regularizer\n", + "\n", + "Suppose we want to add a custom regularization term to the SVI loss. Using the above \n", + "usage pattern, this is easy to do. First we define our regularizer:\n", + "\n", + "```python\n", + "def my_custom_L2_regularizer(my_parameters):\n", + " reg_loss = 0.0\n", + " for param in my_parameters:\n", + " reg_loss = reg_loss + param.pow(2.0).sum()\n", + " return reg_loss \n", + "```\n", + "\n", + "Then the only change we need to make is:\n", + "\n", + "```diff\n", + "- loss = loss_fn(model, guide)\n", + "+ loss = loss_fn(model, guide) + my_custom_L2_regularizer(my_parameters)\n", + "```\n", + "\n", + "## Example: Clipping Gradients\n", + "\n", + "For some models the loss gradient can explode during training, leading to overflow and \n", + "`NaN` values. One way to protect against this is with gradient clipping. The optimizers\n", + "in `pyro.optim` take an optional dictionary of `clip_args` which allows clipping either\n", + "the gradient norm or the gradient value to fall within the given limit.\n", + "\n", + "To change the basic example above:\n", + "\n", + "```diff\n", + "- optimizer = pyro.optim.Adam({\"lr\": 0.001, \"betas\": (0.90, 0.999)})\n", + "+ optimizer = pyro.optim.Adam({\"lr\": 0.001, \"betas\": (0.90, 0.999)}, {\"clip_norm\": 10.0})\n", + "```\n", + "\n", + "Further variants of gradient clipping can also be implemented manually by modifying the low-level pattern described above.\n", + "\n", + "## Example: Scaling the Loss\n", + "\n", + "Depending on the optimization algorithm, the scale of the loss may or not matter. Suppose \n", + "we want to scale our loss function by the number of datapoints before we differentiate it.\n", + "This is easily done:\n", + "\n", + "```diff\n", + "- loss = loss_fn(model, guide)\n", + "+ loss = loss_fn(model, guide) / N_data\n", + "```\n", + "\n", + "Note that in the case of SVI, where each term in the loss function is a log probability \n", + "from the model or guide, this same effect can be achieved using [poutine.scale](http://docs.pyro.ai/en/dev/poutine.html#pyro.poutine.scale). For \n", + "example we can use the `poutine.scale` decorator to scale both the model and guide:\n", + "\n", + "```python\n", + "@poutine.scale(scale=1.0/N_data)\n", + "def model(...):\n", + " pass\n", + " \n", + "@poutine.scale(scale=1.0/N_data)\n", + "def guide(...):\n", + " pass\n", + "```\n", + "\n", + "## Example: Beta VAE\n", + "\n", + "We can also use [poutine.scale](http://docs.pyro.ai/en/dev/poutine.html#pyro.poutine.scale)\n", + "to construct non-standard ELBO variational objectives in which, for example, the KL divergence is scaled differently relative to the expected log likelihood. In particular for the Beta VAE the KL divergence is scaled by a factor `beta`:\n", + "\n", + "```python\n", + "def model(data, beta=0.5):\n", + " z_loc, z_scale = ...\n", + " with pyro.poutine.scale(scale=beta)\n", + " z = pyro.sample(\"z\", dist.Normal(z_loc, z_scale))\n", + " pyro.sample(\"obs\", dist.Bernoulli(...), obs=data)\n", + " \n", + "def guide(data, beta=0.5):\n", + " with pyro.poutine.scale(scale=beta)\n", + " z_loc, z_scale = ...\n", + " z = pyro.sample(\"z\", dist.Normal(z_loc, z_scale))\n", + "```\n", + "\n", + "With this choice of model and guide the log densities corresponding to the latent variable `z` that enter into constructing the variational objective via\n", + "\n", + "```\n", + "svi = pyro.infer.SVI(model, guide, optimizer, loss=pyro.infer.Trace_ELBO())\n", + "```\n", + "\n", + "will be scaled by a factor of `beta`, resulting in a KL divergence that is likewise scaled by `beta`.\n", + "\n", + "\n", + "## Example: Mixing Optimizers\n", + "\n", + "The various optimizers in `pyro.optim` allow the user to specify optimization settings (e.g. learning rates) on\n", + "a per-parameter basis. But what if we want to use different optimization algorithms for different parameters? \n", + "We can do this using Pyro's `MultiOptimizer` (see below), but we can also achieve the same thing if we directly manipulate `differentiable_loss`:\n", + "\n", + "```python\n", + "adam = torch.optim.Adam(adam_parameters, {\"lr\": 0.001, \"betas\": (0.90, 0.999)})\n", + "sgd = torch.optim.SGD(sgd_parameters, {\"lr\": 0.0001})\n", + "loss_fn = pyro.infer.Trace_ELBO().differentiable_loss\n", + "# compute loss\n", + "loss = loss_fn(model, guide)\n", + "loss.backward()\n", + "# take a step and zero the parameter gradients\n", + "adam.step()\n", + "sgd.step()\n", + "adam.zero_grad()\n", + "sgd.zero_grad()\n", + "```\n", + "\n", + "For completeness, we also show how we can do the same thing using [MultiOptimizer](http://docs.pyro.ai/en/dev/optimization.html?highlight=multi%20optimizer#module-pyro.optim.multi), which allows\n", + "us to combine multiple Pyro optimizers. Note that since `MultiOptimizer` uses `torch.autograd.grad` under the hood (instead of `torch.Tensor.backward()`), it has a slightly different interface; in particular the `step()` method also takes parameters as inputs.\n", + "\n", + "```python\n", + "def model():\n", + " pyro.param('a', ...)\n", + " pyro.param('b', ...)\n", + " ...\n", + " \n", + "adam = pyro.optim.Adam({'lr': 0.1})\n", + "sgd = pyro.optim.SGD({'lr': 0.01})\n", + "optim = MixedMultiOptimizer([(['a'], adam), (['b'], sgd)])\n", + "with pyro.poutine.trace(param_only=True) as param_capture:\n", + " loss = elbo.differentiable_loss(model, guide)\n", + "params = {'a': pyro.param('a'), 'b': pyro.param('b')}\n", + "optim.step(loss, params)\n", + "```\n", + "\n", + "## Example: Custom ELBO\n", + "\n", + "In the previous three examples we bypassed creating a `SVI` object and directly manipulated \n", + "the differentiable loss function provided by an `ELBO` implementation. Another thing we \n", + "can do is create custom `ELBO` implementations and pass those into the `SVI` machinery. \n", + "For example, a simplified version of a `Trace_ELBO` loss function might look as follows:\n", + "\n", + "```python\n", + "# note that simple_elbo takes a model, a guide, and their respective arguments as inputs\n", + "def simple_elbo(model, guide, *args, **kwargs):\n", + " # run the guide and trace its execution\n", + " guide_trace = poutine.trace(guide).get_trace(*args, **kwargs)\n", + " # run the model and replay it against the samples from the guide\n", + " model_trace = poutine.trace(\n", + " poutine.replay(model, trace=guide_trace)).get_trace(*args, **kwargs)\n", + " # construct the elbo loss function\n", + " return -1*(model_trace.log_prob_sum() - guide_trace.log_prob_sum())\n", + "\n", + "svi = SVI(model, guide, optim, loss=simple_elbo)\n", + "```\n", + "Note that this is basically what the `elbo` implementation in [\"mini-pyro\"](https://github.com/pyro-ppl/pyro/blob/dev/pyro/contrib/minipyro.py) looks like.\n", + "\n", + "### Example: KL Annealing\n", + "\n", + "In the [Deep Markov Model Tutorial](http://pyro.ai/examples/dmm.html) the ELBO variational objective\n", + "is modified during training. In particular the various KL-divergence terms between latent random\n", + "variables are scaled downward (i.e. annealed) relative to the log probabilities of the observed data.\n", + "In the tutorial this is accomplished using `poutine.scale`. We can accomplish the same thing by defining \n", + "a custom loss function. This latter option is not a very elegant pattern but we include it anyway to \n", + "show the flexibility we have at our disposal. \n", + "\n", + "```python\n", + "def simple_elbo_kl_annealing(model, guide, *args, **kwargs):\n", + " # get the annealing factor and latents to anneal from the keyword\n", + " # arguments passed to the model and guide\n", + " annealing_factor = kwargs.pop('annealing_factor', 1.0)\n", + " latents_to_anneal = kwargs.pop('latents_to_anneal', [])\n", + " # run the guide and replay the model against the guide\n", + " guide_trace = poutine.trace(guide).get_trace(*args, **kwargs)\n", + " model_trace = poutine.trace(\n", + " poutine.replay(model, trace=guide_trace)).get_trace(*args, **kwargs)\n", + " \n", + " elbo = 0.0\n", + " # loop through all the sample sites in the model and guide trace and\n", + " # construct the loss; note that we scale all the log probabilities of\n", + " # samples sites in `latents_to_anneal` by the factor `annealing_factor`\n", + " for site in model_trace.values():\n", + " if site[\"type\"] == \"sample\":\n", + " factor = annealing_factor if site[\"name\"] in latents_to_anneal else 1.0\n", + " elbo = elbo + factor * site[\"fn\"].log_prob(site[\"value\"]).sum()\n", + " for site in guide_trace.values():\n", + " if site[\"type\"] == \"sample\":\n", + " factor = annealing_factor if site[\"name\"] in latents_to_anneal else 1.0 \n", + " elbo = elbo - factor * site[\"fn\"].log_prob(site[\"value\"]).sum()\n", + " return -elbo\n", + "\n", + "svi = SVI(model, guide, optim, loss=simple_elbo_kl_annealing)\n", + "svi.step(other_args, annealing_factor=0.2, latents_to_anneal=[\"my_latent\"])\n", + "```" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/cvae.ipynb b/pyro/source/tutorial/source/cvae.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..10fdda1d5a958024b77c7018619f3692c2eb6f0f --- /dev/null +++ b/pyro/source/tutorial/source/cvae.ipynb @@ -0,0 +1,388 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Conditional Variational Auto-encoder\n", + "\n", + "## Introduction\n", + "This tutorial implements [Learning Structured Output Representation using Deep Conditional Generative Models](http://papers.nips.cc/paper/5775-learning-structured-output-representation-using-deep-conditional-generati) paper, which introduced Conditional Variational Auto-encoders in 2015, using Pyro PPL.\n", + "\n", + "Supervised deep learning has been successfully applied for many recognition problems in machine learning and computer vision. Although it can approximate a complex many-to-one function very well when large number of training data is provided, the lack of probabilistic inference of the current supervised deep learning methods makes it difficult to model a complex structured output representations. In this work, Kihyuk Sohn, Honglak Lee and Xinchen Yan develop a scalable deep conditional generative model for structured output variables using Gaussian latent variables. The model is trained efficiently in the framework of stochastic gradient variational Bayes, and allows a fast prediction using stochastic feed-forward inference. They called the model Conditional Variational Auto-encoder (CVAE).\n", + "\n", + "The CVAE is a conditional directed graphical model whose input observations modulate the prior on Gaussian latent variables that generate the outputs. It is trained to maximize the conditional marginal log-likelihood. The authors formulate the variational learning objective of the CVAE in the framework of stochastic gradient variational Bayes (SGVB). In experiments, they demonstrate the effectiveness of the CVAE in comparison to the deterministic neural network counterparts in generating diverse but realistic output predictions using stochastic inference. Here, we will implement their proof of concept: an artificial experimental setting for structured output prediction using MNIST database.\n", + "\n", + "## The problem\n", + "Let's divide each digit image into four quadrants, and take one, two, or three quadrant(s) as an input and the remaining quadrants as an output to be predicted. The image below shows the case where one quadrant is the input:\n", + "\n", + "\"image1\"\n", + "\n", + "Our objective is to **learn a model that can perform probabilistic inference and make diverse predictions from a single input**. This is because we are not simply modeling a many-to-one function as in classification tasks, but we may need to model a mapping from single input to many possible outputs. One of the limitations of deterministic neural networks is that they generate only a single prediction. In the example above, the input shows a small part of a digit that might be a three or a five. \n", + "\n", + "## Preparing the data\n", + "We use the MNIST dataset; the first step is to prepare it. Depending on how many quadrants we will use as inputs, we will build the datasets and dataloaders, removing the unused pixels with -1:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```Python\n", + "class CVAEMNIST(Dataset):\n", + " def __init__(self, root, train=True, transform=None, download=False):\n", + " self.original = MNIST(root, train=train, download=download)\n", + " self.transform = transform\n", + "\n", + " def __len__(self):\n", + " return len(self.original)\n", + "\n", + " def __getitem__(self, item):\n", + " image, digit = self.original[item]\n", + " sample = {'original': image, 'digit': digit}\n", + " if self.transform:\n", + " sample = self.transform(sample)\n", + "\n", + " return sample\n", + "\n", + "\n", + "class ToTensor:\n", + " def __call__(self, sample):\n", + " sample['original'] = functional.to_tensor(sample['original'])\n", + " sample['digit'] = torch.as_tensor(np.asarray(sample['digit']),\n", + " dtype=torch.int64)\n", + " return sample\n", + "\n", + "\n", + "class MaskImages:\n", + " \"\"\"This torchvision image transformation prepares the MNIST digits to be\n", + " used in the tutorial. Depending on the number of quadrants to be used as\n", + " inputs (1, 2, or 3), the transformation masks the remaining (3, 2, 1)\n", + " quadrant(s) setting their pixels with -1. Additionally, the transformation\n", + " adds the target output in the sample dict as the complementary of the input\n", + " \"\"\"\n", + " def __init__(self, num_quadrant_inputs, mask_with=-1):\n", + " if num_quadrant_inputs <= 0 or num_quadrant_inputs >= 4:\n", + " raise ValueError('Number of quadrants as inputs must be 1, 2 or 3')\n", + " self.num = num_quadrant_inputs\n", + " self.mask_with = mask_with\n", + "\n", + " def __call__(self, sample):\n", + " tensor = sample['original'].squeeze()\n", + " out = tensor.detach().clone()\n", + " h, w = tensor.shape\n", + "\n", + " # removes the bottom left quadrant from the target output\n", + " out[h // 2:, :w // 2] = self.mask_with\n", + " # if num of quadrants to be used as input is 2,\n", + " # also removes the top left quadrant from the target output\n", + " if self.num == 2:\n", + " out[:, :w // 2] = self.mask_with\n", + " # if num of quadrants to be used as input is 3,\n", + " # also removes the top right quadrant from the target output\n", + " if self.num == 3:\n", + " out[:h // 2, :] = self.mask_with\n", + "\n", + " # now, sets the input as complementary\n", + " inp = tensor.clone()\n", + " inp[out != -1] = self.mask_with\n", + "\n", + " sample['input'] = inp\n", + " sample['output'] = out\n", + " return sample\n", + "\n", + "\n", + "def get_data(num_quadrant_inputs, batch_size):\n", + " transforms = Compose([\n", + " ToTensor(),\n", + " MaskImages(num_quadrant_inputs=num_quadrant_inputs)\n", + " ])\n", + " datasets, dataloaders, dataset_sizes = {}, {}, {}\n", + " for mode in ['train', 'val']:\n", + " datasets[mode] = CVAEMNIST(\n", + " '../data',\n", + " download=True,\n", + " transform=transforms,\n", + " train=mode == 'train'\n", + " )\n", + " dataloaders[mode] = DataLoader(\n", + " datasets[mode],\n", + " batch_size=batch_size,\n", + " shuffle=mode == 'train',\n", + " num_workers=0\n", + " )\n", + " dataset_sizes[mode] = len(datasets[mode])\n", + "\n", + " return datasets, dataloaders, dataset_sizes\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Baseline: Deterministic Neural Network\n", + "Before we dive into the CVAE implementation, let's code the baseline model. It is a straightforward implementation:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```Python\n", + "class BaselineNet(nn.Module):\n", + " def __init__(self, hidden_1, hidden_2):\n", + " super().__init__()\n", + " self.fc1 = nn.Linear(784, hidden_1)\n", + " self.fc2 = nn.Linear(hidden_1, hidden_2)\n", + " self.fc3 = nn.Linear(hidden_2, 784)\n", + " self.relu = nn.ReLU()\n", + "\n", + " def forward(self, x):\n", + " x = x.view(-1, 784)\n", + " hidden = self.relu(self.fc1(x))\n", + " hidden = self.relu(self.fc2(hidden))\n", + " y = torch.sigmoid(self.fc3(hidden))\n", + " return y\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the paper, the authors compare the baseline NN with the proposed CVAE by comparing the negative (Conditional) Log Likelihood (CLL), averaged by image in the validation set. Thanks to PyTorch, computing the CLL is equivalent to computing the Binary Cross Entropy Loss using as input a signal passed through a Sigmoid layer. The code below does a small adjustment to leverage this: it only computes the loss in the pixels not masked with -1:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```Python\n", + "class MaskedBCELoss(nn.Module):\n", + " def __init__(self, masked_with=-1):\n", + " super().__init__()\n", + " self.masked_with = masked_with\n", + "\n", + " def forward(self, input, target):\n", + " target = target.view(input.shape)\n", + " loss = F.binary_cross_entropy(input, target, reduction='none')\n", + " loss[target == self.masked_with] = 0\n", + " return loss.sum()\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The training is very straightforward. We use 500 neurons in each hidden layer, Adam optimizer with `1e-3` learning rate, and early stopping. Please check the [Github repo](https://github.com/pyro-ppl/pyro/blob/dev/examples/cvae) for the full implementation.\n", + "\n", + "## Deep Conditional Generative Models for Structured Output Prediction\n", + "As illustrated in the image below, there are three types of variables in a deep conditional generative model (CGM): input variables $\\bf x$, output variables $\\bf y$, and latent variables $\\bf z$. The conditional generative process of the model is given in (b) as follows: for given observation $\\bf x$, $\\bf z$ is drawn from the prior distribution $p_{\\theta}({\\bf z} | {\\bf x})$, and the output $\\bf y$ is generated from the distribution $p_{\\theta}({\\bf y} | {\\bf x, z})$. Compared to the baseline NN (a), the latent variables $\\bf z$ allow for modeling multiple modes in conditional distribution of output variables $\\bf y$ given input $\\bf x$, making the proposed CGM suitable for modeling one-to-many mapping.\n", + "\n", + "\n", + "\"image1\"\n", + "\n", + "Deep CGMs are trained to maximize the conditional marginal log-likelihood. Often the objective function is intractable, and we apply the SGVB framework to train the model. The empirical lower bound is written as:\n", + "\n", + "$$ \\tilde{\\mathcal{L}}_{\\text{CVAE}}(x, y; \\theta, \\phi) = -KL(q_{\\phi}(z | x, y) || p_{\\theta}(z | x)) + \\frac{1}{L}\\sum_{l=1}^{L}\\log p_{\\theta}(y | x, z^{(l)}) $$\n", + "\n", + "where $\\bf z^{(l)}$ is a Gaussian latent variable, and $L$ is the number of samples (or particles in Pyro nomenclature).\n", + "We call this model conditional variational auto-encoder (CVAE). The CVAE is composed of multiple MLPs, such as **recognition network** $q_{\\phi}({\\bf z} | \\bf{x, y})$, **(conditional) prior network** $p_{\\theta}(\\bf{z} | \\bf{x})$, and **generation network** $p_{\\theta}(\\bf{y} | \\bf{x, z})$. In designing the network architecture, we build the network components of the CVAE **on top of the baseline NN**. Specifically, as shown in (d) above, not only the direct input $\\bf x$, but also the initial guess $\\hat{y}$ made by the NN are fed into the prior network. \n", + "\n", + "Pyro makes it really easy to translate this architecture into code. The recognition network and the (conditional) prior network are encoders from the traditional VAE setting, while the generation network is the decoder:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```Python\n", + "class Encoder(nn.Module):\n", + " def __init__(self, z_dim, hidden_1, hidden_2):\n", + " super().__init__()\n", + " self.fc1 = nn.Linear(784, hidden_1)\n", + " self.fc2 = nn.Linear(hidden_1, hidden_2)\n", + " self.fc31 = nn.Linear(hidden_2, z_dim)\n", + " self.fc32 = nn.Linear(hidden_2, z_dim)\n", + " self.relu = nn.ReLU()\n", + "\n", + " def forward(self, x, y):\n", + " # put x and y together in the same image for simplification\n", + " xc = x.clone()\n", + " xc[x == -1] = y[x == -1]\n", + " xc = xc.view(-1, 784)\n", + " # then compute the hidden units\n", + " hidden = self.relu(self.fc1(xc))\n", + " hidden = self.relu(self.fc2(hidden))\n", + " # then return a mean vector and a (positive) square root covariance\n", + " # each of size batch_size x z_dim\n", + " z_loc = self.fc31(hidden)\n", + " z_scale = torch.exp(self.fc32(hidden))\n", + " return z_loc, z_scale\n", + "\n", + "\n", + "class Decoder(nn.Module):\n", + " def __init__(self, z_dim, hidden_1, hidden_2):\n", + " super().__init__()\n", + " self.fc1 = nn.Linear(z_dim, hidden_1)\n", + " self.fc2 = nn.Linear(hidden_1, hidden_2)\n", + " self.fc3 = nn.Linear(hidden_2, 784)\n", + " self.relu = nn.ReLU()\n", + "\n", + " def forward(self, z):\n", + " y = self.relu(self.fc1(z))\n", + " y = self.relu(self.fc2(y))\n", + " y = torch.sigmoid(self.fc3(y))\n", + " return y\n", + "\n", + "\n", + "class CVAE(nn.Module):\n", + " def __init__(self, z_dim, hidden_1, hidden_2, pre_trained_baseline_net):\n", + " super().__init__()\n", + " # The CVAE is composed of multiple MLPs, such as recognition network\n", + " # qφ(z|x, y), (conditional) prior network pθ(z|x), and generation\n", + " # network pθ(y|x, z). Also, CVAE is built on top of the NN: not only\n", + " # the direct input x, but also the initial guess y_hat made by the NN\n", + " # are fed into the prior network.\n", + " self.baseline_net = pre_trained_baseline_net\n", + " self.prior_net = Encoder(z_dim, hidden_1, hidden_2)\n", + " self.generation_net = Decoder(z_dim, hidden_1, hidden_2)\n", + " self.recognition_net = Encoder(z_dim, hidden_1, hidden_2)\n", + "\n", + " def model(self, xs, ys=None):\n", + " # register this pytorch module and all of its sub-modules with pyro\n", + " pyro.module(\"generation_net\", self)\n", + " batch_size = xs.shape[0]\n", + " with pyro.plate(\"data\"):\n", + "\n", + " # Prior network uses the baseline predictions as initial guess.\n", + " # This is the generative process with recurrent connection\n", + " with torch.no_grad():\n", + " # this ensures the training process does not change the\n", + " # baseline network\n", + " y_hat = self.baseline_net(xs).view(xs.shape)\n", + "\n", + " # sample the handwriting style from the prior distribution, which is\n", + " # modulated by the input xs.\n", + " prior_loc, prior_scale = self.prior_net(xs, y_hat)\n", + " zs = pyro.sample('z', dist.Normal(prior_loc, prior_scale).to_event(1))\n", + "\n", + " # the output y is generated from the distribution pθ(y|x, z)\n", + " loc = self.generation_net(zs)\n", + "\n", + " if ys is not None:\n", + " # In training, we will only sample in the masked image\n", + " mask_loc = loc[(xs == -1).view(-1, 784)].view(batch_size, -1)\n", + " mask_ys = ys[xs == -1].view(batch_size, -1)\n", + " pyro.sample('y', dist.Bernoulli(mask_loc).to_event(1), obs=mask_ys)\n", + " else:\n", + " # In testing, no need to sample: the output is already a\n", + " # probability in [0, 1] range, which better represent pixel\n", + " # values considering grayscale. If we sample, we will force\n", + " # each pixel to be either 0 or 1, killing the grayscale\n", + " pyro.deterministic('y', loc.detach())\n", + "\n", + " # return the loc so we can visualize it later\n", + " return loc\n", + "\n", + " def guide(self, xs, ys=None):\n", + " with pyro.plate(\"data\"):\n", + " if ys is None:\n", + " # at inference time, ys is not provided. In that case,\n", + " # the model uses the prior network\n", + " y_hat = self.baseline_net(xs).view(xs.shape)\n", + " loc, scale = self.prior_net(xs, y_hat)\n", + " else:\n", + " # at training time, uses the variational distribution\n", + " # q(z|x,y) = normal(loc(x,y),scale(x,y))\n", + " loc, scale = self.recognition_net(xs, ys)\n", + "\n", + " pyro.sample(\"z\", dist.Normal(loc, scale).to_event(1))\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Training\n", + "The training code can be found in the [Github repo](https://github.com/pyro-ppl/pyro/tree/dev/examples/cvae). \n", + "Click play in the video below to watch how the CVAE learns throughout approximately 40 epochs.\n", + "\n", + "

" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we can see, the model learned posterior distribution continuously improves as the training progresses: \n", + "not only the loss goes down, but also we can see clearly how the predictions get better and better.\n", + "\n", + "Additionally, here we can already observe the key advantage of CVAEs: the model learns to generate multiple predictions from a single input.\n", + "In the first digit, the input is clearly a piece of a 7. The model learns it and keeps predicting clearer 7's, but with different writing styles.\n", + "In the second and third digits, the inputs are pieces of what could be either a 3 or a 5 (truth is 3), and what could be either a 4 or a 9 (truth is 4).\n", + "During the first epochs, the CVAE predictions are blurred, and they get clearer as time passes, as expected.\n", + "\n", + "However, different from the first digit, it's hard to determine whether the truth is 3 and 4 for the second and third digits, respectively, by observing only one quarter of the digits as input.\n", + "By the end of the training, the CVAE generates very clear and realistic predictions, but it doesn't force either a 3 or a 5 for the second digit, and a 4 or a 9 for the third digit.\n", + "Sometimes it predicts one option, and sometimes it predicts another." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Evaluating the results\n", + "For qualitative analysis, we visualize the generated output samples in the next figure. As we can see, the baseline NNs can only make a single deterministic prediction, and as a result the output looks blurry and doesn’t look realistic in many cases. In contrast, the samples generated by the CVAE models are more realistic and diverse in shape; sometimes they can even change their identity (digit labels), such as from 3 to 5 or from 4 to 9, and vice versa.\n", + "\n", + "\"image1\"\n", + "\n", + "We also provide a quantitative evidence by estimating the marginal conditional log-likelihoods (CLLs) in next table (lower is better). \n", + "\n", + "| | 1 quadrant | 2 quadrants | 3 quadrants |\n", + "|--------------------|------------|-------------|-------------|\n", + "| NN (baseline) | 100.4 | 61.9 | 25.4 |\n", + "| CVAE (Monte Carlo) | 71.8 | 51.0 | 24.2 |\n", + "| Performance gap | 28.6 | 10.9 | 1.2 |\n", + "\n", + "We achieved similar results to the ones achieved by the authors in the paper. We trained only for 50 epochs with early stopping patience of 3 epochs; to improve the results, we could leave the algorithm training for longer. Nevertheless, we can observe the same effect shown in the paper: **the estimated CLLs of the CVAE significantly outperforms the baseline NN**.\n", + "\n", + "See the full code on [Github](https://github.com/pyro-ppl/pyro/blob/dev/examples/cvae).\n", + "\n", + "## References\n", + "\n", + "[1] `Learning Structured Output Representation using Deep Conditional Generative Models`,
    \n", + "Kihyuk Sohn, Xinchen Yan, Honglak Lee" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/pyro/source/tutorial/source/dirichlet_process_mixture.ipynb b/pyro/source/tutorial/source/dirichlet_process_mixture.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..df99e260e5f115d29b1c611bba3002cf9022aac4 --- /dev/null +++ b/pyro/source/tutorial/source/dirichlet_process_mixture.ipynb @@ -0,0 +1,740 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "6oXxxX9LZL-h" + }, + "source": [ + "# Dirichlet Process Mixture Models in Pyro\n", + "\n", + "\n", + "## What are Bayesian nonparametric models?\n", + "Bayesian nonparametric models are models where the number of parameters grow freely with the amount of data provided; thus, instead of training several models that vary in complexity and comparing them, one is able to design a model whose complexity grows as more data are observed. The prototypical example of Bayesian nonparametrics in practice is the *Dirichlet Process Mixture Model* (DPMM). A DPMM allows for a practitioner to build a mixture model when the number of distinct clusters in the geometric structure of their data is unknown – in other words, the number of clusters is allowed to grow as more data is observed. This feature makes the DPMM highly useful towards exploratory data analysis, where few facets of the data in question are known; this presentation aims to demonstrate this fact.\n", + "\n", + "## The Dirichlet Process (Ferguson, 1973)\n", + "Dirichlet processes are a family of probability distributions over discrete probability distributions. Formally, the Dirichlet process (DP) is specified by some base probability distribution $G_0: \\Omega \\to \\mathbb{R}$ and a positive, real, scaling parameter commonly denoted as $\\alpha$. A sample $G$ from a Dirichlet process with parameters $G_0: \\Omega \\to \\mathbb{R}$ and $\\alpha$ is itself a distribution over $\\Omega$. For any disjoint partition $\\Omega_1, ..., \\Omega_k$ of $\\Omega$, and any sample $G \\sim DP(G_0, \\alpha)$, we have:\n", + "\n", + "$$(G(\\Omega_1), ..., G(\\Omega_k)) \\sim \\text{Dir}(\\alpha G_0(\\Omega_1), ..., \\alpha G_0(\\Omega_k))$$\n", + "\n", + "Essentially, this is taking a discrete partition of our sample space $\\Omega$ and subsequently constructing a discrete distribution over it using the base distribution $G_0$. While quite abstract in formulation, the Dirichlet process is very useful as a prior in various graphical models. This fact becomes easier to see in the following scheme.\n", + "\n", + "## The Chinese Restaurant Process (Aldous, 1985)\n", + "\n", + "Imagine a restaurant with infinite tables (indexed by the positive integers) that accepts customers one at a time. The $n$th customer chooses their seat according to the following probabilities:\n", + "\n", + "* With probability $\\frac{n_t}{\\alpha + n - 1}$, sit at table $t$, where $n_t$ is the number of people at table $t$\n", + "* With probability $\\frac{\\alpha}{\\alpha + n - 1}$, sit at an empty table\n", + "\n", + "If we associate to each table $t$ a draw from a base distribution $G_0$ over $\\Omega$, and then associate unnormalized probability mass $n_t$ to that draw, the resulting distribution over $\\Omega$ is equivalent to a draw from a Dirichlet process $DP(G_0, \\alpha)$. \n", + "\n", + "Furthermore, we can easily extend this to define the generative process of a nonparametric mixture model: every table $t$ that has at least one customer seated is associated with a set of cluster parameters $\\theta_t$, which were themselves drawn from some base distribution $G_0$. For each new observation, first assign that observation to a table according to the above probabilities; then, that observation is drawn from the distribution parameterized by the cluster parameters for that table. If the observation was assigned to a new table, draw a new set of cluster parameters from $G_0$, and then draw the observation from the distribution parameterized by those cluster parameters.\n", + "\n", + "While this formulation of a Dirichlet process mixture model is intuitive, it is also very difficult to perform inference on in a probabilistic programming framework. This motivates an alternative formulation of DPMMs, which has empirically been shown to be more conducive to inference (e.g. Blei and Jordan, 2004).\n", + "\n", + "## The Stick-Breaking Method (Sethuraman, 1994)\n", + "\n", + "The generative process for the stick-breaking formulation of DPMMs proceeds as follows:\n", + "\n", + "* Draw $\\beta_i \\sim \\text{Beta}(1, \\alpha)$ for $i \\in \\mathbb{N}$\n", + "* Draw $\\theta_i \\sim G_0$ for $i \\in \\mathbb{N}$\n", + "* Construct the mixture weights $\\pi$ by taking $\\pi_i(\\beta_{1:\\infty}) = \\beta_i \\prod_{j" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "data = torch.cat((MultivariateNormal(-8 * torch.ones(2), torch.eye(2)).sample([50]),\n", + " MultivariateNormal(8 * torch.ones(2), torch.eye(2)).sample([50]),\n", + " MultivariateNormal(torch.tensor([1.5, 2]), torch.eye(2)).sample([50]),\n", + " MultivariateNormal(torch.tensor([-0.5, 1]), torch.eye(2)).sample([50])))\n", + "\n", + "plt.scatter(data[:, 0], data[:, 1])\n", + "plt.title(\"Data Samples from Mixture of 4 Gaussians\")\n", + "plt.show()\n", + "N = data.shape[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "CglLQke4gEYd" + }, + "source": [ + "In this example, the cluster parameters $\\theta_i$ are two dimensional vectors describing the means of a multivariate Gaussian with identity covariance. Therefore, the Dirichlet process base distribution $G_0$ is also a multivariate Gaussian (i.e. the conjugate prior), although this choice is not as computationally useful, since we are not performing coordinate-ascent variational inference but rather black-box variational inference using Pyro. \n", + "\n", + "First, let's define the \"stick-breaking\" function that generates our weights, given our samples of $\\beta$:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "2ngrqFlDQYpV" + }, + "outputs": [], + "source": [ + "def mix_weights(beta):\n", + " beta1m_cumprod = (1 - beta).cumprod(-1)\n", + " return F.pad(beta, (0, 1), value=1) * F.pad(beta1m_cumprod, (1, 0), value=1)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "LAC0bWL6Qcc3" + }, + "source": [ + "Next, let's define our model. It may be helpful to refer the definition of the stick-breaking model presented in the first part of this tutorial. \n", + "\n", + "Note that all $\\beta_i$ samples are conditionally independent, so we model them using a `pyro.plate` of size `T-1`; we do the same for all samples of our cluster parameters $\\mu_i$. We then construct a Categorical distribution whose parameters are the mixture weights using our sampled $\\beta$ values (line 9) below, and sample the cluster assignment $z_n$ for each data point from that Categorical. Finally, we sample our observations from a multivariate Gaussian distribution whose mean is exactly the cluster parameter corresponding to the assignment $z_n$ we drew for the point $x_n$. This can be seen in the Pyro code below:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "WfnbSIocRlvQ" + }, + "outputs": [], + "source": [ + "def model(data):\n", + " with pyro.plate(\"beta_plate\", T-1):\n", + " beta = pyro.sample(\"beta\", Beta(1, alpha))\n", + "\n", + " with pyro.plate(\"mu_plate\", T):\n", + " mu = pyro.sample(\"mu\", MultivariateNormal(torch.zeros(2), 5 * torch.eye(2)))\n", + "\n", + " with pyro.plate(\"data\", N):\n", + " z = pyro.sample(\"z\", Categorical(mix_weights(beta)))\n", + " pyro.sample(\"obs\", MultivariateNormal(mu[z], torch.eye(2)), obs=data)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "1gBQj5RKRn8Z" + }, + "source": [ + "Now, it's time to define our guide and perform inference. \n", + "\n", + "The variational family $q(\\beta, \\theta, z)$ that we are optimizing over during variational inference is given by:\n", + "\n", + "$$q(\\beta, \\theta, z) = \\prod_{t=1}^{T-1} q_t(\\beta_t) \\prod_{t=1}^T q_t(\\theta_t) \\prod_{n=1}^N q_n(z_n)$$ \n", + "\n", + "Note that since we are unable to computationally model the infinite clusters posited by the model, we truncate our variational family at $T$ clusters. This does not affect our model; rather, it is a simplification made in the *inference* stage to allow tractability. \n", + "\n", + "The guide is constructed exactly according to the definition of our variational family $q(\\beta, \\theta, z)$ above. We have $T-1$ conditionally independent Beta distributions for each $\\beta$ sampled in our model, $T$ conditionally independent multivariate Gaussians for each cluster parameter $\\mu_i$, and $N$ conditionally independent Categorical distributions for each cluster assignment $z_n$.\n", + "\n", + "Our variational parameters (`pyro.param`) are therefore the $T-1$ many positive scalars that parameterize the second parameter of our variational Beta distributions (the first shape parameter is fixed at $1$, as in the model definition), the $T$ many two-dimensional vectors that parameterize our variational multivariate Gaussian distributions (we do not parameterize the covariance matrices of the Gaussians, though this should be done when analyzing a real-world dataset for more flexibility), and the $N$ many $T$-dimensional vectors that parameterize our variational Categorical distributions:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "Imw4wcVkT9er" + }, + "outputs": [], + "source": [ + "def guide(data):\n", + " kappa = pyro.param('kappa', lambda: Uniform(0, 2).sample([T-1]), constraint=constraints.positive)\n", + " tau = pyro.param('tau', lambda: MultivariateNormal(torch.zeros(2), 3 * torch.eye(2)).sample([T]))\n", + " phi = pyro.param('phi', lambda: Dirichlet(1/T * torch.ones(T)).sample([N]), constraint=constraints.simplex)\n", + "\n", + " with pyro.plate(\"beta_plate\", T-1):\n", + " q_beta = pyro.sample(\"beta\", Beta(torch.ones(T-1), kappa))\n", + "\n", + " with pyro.plate(\"mu_plate\", T):\n", + " q_mu = pyro.sample(\"mu\", MultivariateNormal(tau, torch.eye(2)))\n", + "\n", + " with pyro.plate(\"data\", N):\n", + " z = pyro.sample(\"z\", Categorical(phi))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "H0He1id0T_bN" + }, + "source": [ + "When performing inference, we set our 'guess' for the maximum number of clusters in the dataset to $T = 6$. We define the optimization algorithm (`pyro.optim.Adam`) along with the Pyro SVI object and train the model for 1000 iterations. \n", + "\n", + "After performing inference, we construct the Bayes estimators of the means (the expected values of each factor in our variational approximation) and plot them in red on top of the original dataset. Note that we also have we removed any clusters that have less than a certain weight assigned to them according to our learned variational distributions, and then re-normalize the weights so that they sum to one:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 372 + }, + "colab_type": "code", + "id": "x1Yidukpd9wO", + "outputId": "b0cc290b-3285-4f36-c2a6-7195b6801482" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1000/1000 [00:15<00:00, 64.86it/s]\n", + "100%|██████████| 1000/1000 [00:15<00:00, 65.47it/s]\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "T = 6\n", + "optim = Adam({\"lr\": 0.05})\n", + "svi = SVI(model, guide, optim, loss=Trace_ELBO())\n", + "losses = []\n", + "\n", + "def train(num_iterations):\n", + " pyro.clear_param_store()\n", + " for j in tqdm(range(num_iterations)):\n", + " loss = svi.step(data)\n", + " losses.append(loss)\n", + "\n", + "def truncate(alpha, centers, weights):\n", + " threshold = alpha**-1 / 100.\n", + " true_centers = centers[weights > threshold]\n", + " true_weights = weights[weights > threshold] / torch.sum(weights[weights > threshold])\n", + " return true_centers, true_weights\n", + "\n", + "alpha = 0.1\n", + "train(1000)\n", + "\n", + "# We make a point-estimate of our model parameters using the posterior means of tau and phi for the centers and weights\n", + "Bayes_Centers_01, Bayes_Weights_01 = truncate(alpha, pyro.param(\"tau\").detach(), torch.mean(pyro.param(\"phi\").detach(), dim=0))\n", + "\n", + "alpha = 1.5\n", + "train(1000)\n", + "\n", + "# We make a point-estimate of our model parameters using the posterior means of tau and phi for the centers and weights\n", + "Bayes_Centers_15, Bayes_Weights_15 = truncate(alpha, pyro.param(\"tau\").detach(), torch.mean(pyro.param(\"phi\").detach(), dim=0))\n", + "\n", + "plt.figure(figsize=(15, 5))\n", + "plt.subplot(1, 2, 1)\n", + "plt.scatter(data[:, 0], data[:, 1], color=\"blue\")\n", + "plt.scatter(Bayes_Centers_01[:, 0], Bayes_Centers_01[:, 1], color=\"red\")\n", + "\n", + "plt.subplot(1, 2, 2)\n", + "plt.scatter(data[:, 0], data[:, 1], color=\"blue\")\n", + "plt.scatter(Bayes_Centers_15[:, 0], Bayes_Centers_15[:, 1], color=\"red\")\n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "DO3XDmEwC5ra" + }, + "source": [ + "The plots above demonstrate the effects of the scaling hyperparameter $\\alpha$. A greater $\\alpha$ yields a more heavy-tailed distribution of the weights, whereas smaller $\\alpha$ will place more mass on fewer clusters. In particular, the middle cluster looks like it could be generated a single Gaussian (although in fact it was generated by two distinct Gaussians), and thus the setting of $\\alpha$ allows the practitioner to further encode their prior beliefs about how many clusters the data contains." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "oWBlcZ1vfiBV" + }, + "source": [ + "### Dirichlet Mixture Model for Long Term Solar Observations \n", + "\n", + "As mentioned earlier, the Dirichlet process mixture model truly shines when exploring a dataset whose latent geometric structure is completely unknown. To demonstrate this, we fit a DPMM on sunspot count data taken over the past 300 years (provided by the Royal Observatory of Belgium):" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 295 + }, + "colab_type": "code", + "id": "UlhV2Fx_fVGy", + "outputId": "045dbfaa-27a0-4aa6-ee8c-de9f9937aa38" + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "df = pd.read_csv('http://www.sidc.be/silso/DATA/SN_y_tot_V2.0.csv', sep=';', names=['time', 'sunspot.year'], usecols=[0, 1])\n", + "data = torch.tensor(df['sunspot.year'].values, dtype=torch.float32).round()\n", + "N = data.shape[0]\n", + "\n", + "plt.hist(df['sunspot.year'].values, bins=40)\n", + "plt.title(\"Number of Years vs. Sunspot Counts\")\n", + "plt.xlabel(\"Sunspot Count\")\n", + "plt.ylabel(\"Number of Years\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "1BE18id2_VlV" + }, + "source": [ + "For this example, the cluster parameters $\\theta_i$ are rate parameters since we are constructing a scale-mixture of Poisson distributions. Again, $G_0$ is chosen to be the conjugate prior, which in this case is a Gamma distribution, though this still does not strictly matter for doing inference through Pyro. Below is the implementation of the model:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 298 + }, + "colab_type": "code", + "id": "f7mWbeTz_GLI", + "outputId": "bd64a9bc-5aa2-4767-d71f-bdcb6279526c" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1500/1500 [00:09<00:00, 156.27it/s]\n" + ] + }, + { + "data": { + "image/png": "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KCsr4w9/+EO7891+++3cc889EcNFhOLi4uaw2bNnIyLNkz/POeccyspa2k4BNm7cyFNPPdVifGe5/fbbGTx4MEVFRRQWFjJt2rT9vttYccIJJwDxrw+YALSbGQ8uOuBlGImkW7durFixovk1c2bLW0aHC8CsWbM4/fTTO21DRwWgNY466ijmzv1iz5d58+YxcuTI5s8LFiygZ8+eLebv6A2zoaHNDduaueGGG1ixYgXr1q1j+vTpnHrqqZSWlrb7nK3xn/84ezuZABiGETUzZ85k5MiRjBkzhh//+Mf85z//Yf78+dx4440UFRXx6aefcumllzJv3jzAWVrllltu4fjjj2fcuHG89957TJ48mcMOO4wHHngAgMrKSk477TTGjh3LUUcdxYsvvth8rk8//ZSioiJuvPFGAO6++27Gjx/PmDFjuO22L3asvOOOOxg+fDinn346a9eubdH+r3zlK83lr1+/ntzcXPr2/WL5mvz8fHbu3MnSpUsZM2YMNTU1VFVVMWrUKFauXMnMmTN5++23KSoqYvbs2cyZM4drrrmmOf+5557LG2+8AUCPHj249dZbmThxIosWLWL58uWcfPLJHHvssUyePJmtW7e2+X1Pnz6dM888s/km3VIZp5xyCjfddBMTJkzgiCOO4O233wZg1apVTJgwgaKiIsaMGcO6deuabWv6jkPrc9JJJ7FixYrm85944ol8+OGHbdrZGjYM1DA6yj9nwraPYlvmgKPg7JZdOgDV1dUUFRU1f7755ps544wzeOGFF1izZg0iQllZGT179mTKlCmce+65nH/++RHLGjp0KIsWLeKGG27g0ksv5d1336WmpoZRo0bxve99j0AgwAsvvEBOTg47d+7kuOOOY8qUKdx5552sXLmy+Yb0yiuvsG7dOpYsWYKqMmXKFN566y2ysrKYO3cu77//PsFgkLFjx3LsscdGtCUnJ4ehQ4eycuVKXnzxRaZPn86jjz56QLrx48czZcoU/vd//5fq6mq+8Y1vMHr0aO68807uuece/vGPfwAwZ86cFr/DqqoqRo8ezaxZs6ivr+fkk0/mxRdfpG/fvjzzzDP85Cc/4ZFHHmn1OgCMHTuWNWvWUF9fzw9+8IMWywgGgyxZsoQFCxbws5/9jFdffZUHHniA6667josvvpi6uroDWiLh9enduzdz5szh3nvv5ZNPPqG2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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "def model(data):\n", + " with pyro.plate(\"beta_plate\", T-1):\n", + " beta = pyro.sample(\"beta\", Beta(1, alpha))\n", + "\n", + " with pyro.plate(\"lambda_plate\", T):\n", + " lmbda = pyro.sample(\"lambda\", Gamma(3, 0.05))\n", + " \n", + " with pyro.plate(\"data\", N):\n", + " z = pyro.sample(\"z\", Categorical(mix_weights(beta)))\n", + " pyro.sample(\"obs\", Poisson(lmbda[z]), obs=data)\n", + "\n", + "def guide(data):\n", + " kappa = pyro.param('kappa', lambda: Uniform(0, 2).sample([T-1]), constraint=constraints.positive)\n", + " tau_0 = pyro.param('tau_0', lambda: Uniform(0, 5).sample([T]), constraint=constraints.positive)\n", + " tau_1 = pyro.param('tau_1', lambda: LogNormal(-1, 1).sample([T]), constraint=constraints.positive)\n", + " phi = pyro.param('phi', lambda: Dirichlet(1/T * torch.ones(T)).sample([N]), constraint=constraints.simplex)\n", + "\n", + " with pyro.plate(\"beta_plate\", T-1):\n", + " q_beta = pyro.sample(\"beta\", Beta(torch.ones(T-1), kappa))\n", + "\n", + " with pyro.plate(\"lambda_plate\", T):\n", + " q_lambda = pyro.sample(\"lambda\", Gamma(tau_0, tau_1))\n", + "\n", + " with pyro.plate(\"data\", N):\n", + " z = pyro.sample(\"z\", Categorical(phi))\n", + "\n", + "T = 20\n", + "alpha = 1.1\n", + "n_iter = 1500\n", + "optim = Adam({\"lr\": 0.05})\n", + "svi = SVI(model, guide, optim, loss=Trace_ELBO())\n", + "losses = []\n", + "\n", + "train(n_iter)\n", + "\n", + "samples = torch.arange(0, 300).type(torch.float)\n", + "\n", + "tau0_optimal = pyro.param(\"tau_0\").detach()\n", + "tau1_optimal = pyro.param(\"tau_1\").detach()\n", + "kappa_optimal = pyro.param(\"kappa\").detach()\n", + "\n", + "# We make a point-estimate of our latent variables using the posterior means of tau and kappa for the cluster params and weights\n", + "Bayes_Rates = (tau0_optimal / tau1_optimal)\n", + "Bayes_Weights = mix_weights(1. / (1. + kappa_optimal))\n", + "\n", + "def mixture_of_poisson(weights, rates, samples):\n", + " return (weights * Poisson(rates).log_prob(samples.unsqueeze(-1)).exp()).sum(-1)\n", + "\n", + "likelihood = mixture_of_poisson(Bayes_Weights, Bayes_Rates, samples)\n", + "\n", + "plt.title(\"Number of Years vs. Sunspot Counts\")\n", + "plt.hist(data.numpy(), bins=60, density=True, lw=0, alpha=0.75);\n", + "plt.plot(samples, likelihood, label=\"Estimated Mixture Density\")\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "gjn4x2JqBfll" + }, + "source": [ + "The above plot is the mixture density of the Bayes estimators of the cluster parameters, weighted by their corresponding weights. As in the Gaussian example, we have taken the Bayes estimators of each cluster parameter and their corresponding weights by computing the posterior means of `lambda` and `beta` respectively." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "NaHLTiRJUxBR" + }, + "source": [ + "### ELBO Behavior\n", + "\n", + "Below are plots of the behavior of the loss function (negative Trace_ELBO) over the SVI iterations during inference using Pyro, as well as a plot of the autocorrelations of the ELBO 'time series' versus iteration number. We can see that around 500 iterations, the loss stops decreasing significantly, so we can assume it takes around 500 iterations to achieve convergence. The autocorrelation plot reaches an autocorrelation very close to 0 around a lag of 500, further corroborating this hypothesis. Note that these are heuristics and do not necessarily imply convergence." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 369 + }, + "colab_type": "code", + "id": "XzbxzSkOUveF", + "outputId": "a752e5e8-1fcf-4ff9-d8db-8d3f59a6a32b" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABDAAAAFgCAYAAABNIolGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdd7hdZZmw8ftJQqihCSrVoIIjthEj2MWCIig4MxYQB1RGxoJYR8FhBLGhnzOoIxZQBlCkDDYUEFFBHBUl2JCiBggQaiChQ0KS5/vjfXdY2dn79H32yTn377rOdfbq7+prPestkZlIkiRJkiRNZNP6nQBJkiRJkqTBGMCQJEmSJEkTngEMSZIkSZI04RnAkCRJkiRJE54BDEmSJEmSNOEZwJAkSZIkSROeAQyNq4g4MiK+2e90rCki4vkR8Zd+p2MsRMT8iHhpD+f/3Ij4W0TcGxGv7tVyJEkTy2juL/26z0bEEyLi9xFxT0QcMt7Ln0oi4uMRcXtE3NLvtEgaPQMYa4B6Y36gvpi1/r5Yh70pIv6vy3QXRsSDdfy7IuKiiHhK2zg7RsRZdfg9EXFBRDyny/y2iohlEfG4DsO+GxGfHYv1nSgiYnZEZETMqN0nRsTHe7zMjIjHt7oz8xeZ+YQeLKe1bme39f9mRBw51ssbJ0cBX8zMDTLze6OdWd3fS+v5sygizo+IvxuDdA623F0jYkXjXL8xIj7aNk5GxH11+O0RcWpEbFyHfTUiTu4w36dGxJKI2HS8AokRMTMi/jMiFtS0XhsRx/R6uSM10PW0MU7runpPRNwdEZdGxKERsfYwlrPKeS71Uj1mFw/nGK3TTcrjdLzus0PwQeDCzJyVmV9oH9j2DNf6+0EdtmtELOg007Z71z31GvXCtnG2johTIuKOei/5bUS8sidrOYDxOMYiYhvg/cCOmfnoMZpn8x58Y0T8V0RMH4t5D7LcAfdtvYctbxwv10TE2+uwdSLizoh4cYf5HhMRZ9bfPf3Y1FjmkyLix/XadGddlz16vdyRqufjvwwwvPVc3dr2t0bEDyNit2EsY9BnEBUGMNYcr6ovZq2/g4c43cGZuQHwCOBC4ButAVECEb8ELgO2A7YEvgv8OCKe3T6jzLwR+Cnwz83+EbEpsAdw0rDXagppBUImmGdFxHP7nYjhGGA7Pga4fIzn+Zl6/mwN3AacOIbzHshNrXMdeB5wYKyeq+RpdfhjgU2AI2v/E4F/jIj128bfH/hhZi4aQXpG6jBgDrAzMAt4EfD7cVx+rxycmbOALSgPxvsA50RE9DdZ0qoiYjbwfCCBvfqamCHodL2coPfOsTCUe9bBbc9+rxrivFv3ro2ALwPfab1g12e2/wOWAk8CNgOOAb4VEa8ZyYpMcI8B7sjM24Y74SDHXuse/BLgDcBbhznviIiRvId13bfVrxvPD68BPhMRT8/MB4HTKc8CzXRMB/Zl/J/hfwCcDzwKeCRwCHD3OKehFzau2/5plPX7bkS8qb9JmnwMYEwRmbkMOA3YsdH7SMqF7t8zc1Fm3lO/AnwD+HSXWZ1EWwCD8vB+eWZeBhARn4+IGxpfJ5/faUadviA0I78RMa1+2by6fiU4o954O83ryubXg4iYEeXL9E416vzNOo87I+KSiHhUl/XrKCIOAvYDPtj2FWTLiPh2RCyM8nX5kMY0R0bEmXXZdwNvioidI+LXNR03R8QXI2JmHf+iOukf6zJe376NIuKJNQp8Z0RcHhF7NYadGBHHRsTZNTL/m+iQW6bNZ4COuUo6RYKj8bWkLu9LEXFuTe8vI+LREfG5GlG/KiKe3jbbZ0bEFXX4/0TEOo15vzIi/lDX7VcR8dTGsPkR8aGI+BNwX/tDRURcTXmR/0FNy9p135wVJffEvIh4a2P81fbNQBspM+8HvgU8ua7j/RHxiMb8nlGPgbXqdvtllC8ai4Aj67F8eERcFxG3RcTJEbHRQMtsLPta4Feseu42h98NnNUanpm/Bm4E/qmRvumUB6whPaBExF71+LqzHm9PbAybHxEfiIg/Rcm5dXpzP7Z5JvDdzLwpi/mZeXJjXqt8fYtGLqfWsR8R76/b7OaIeHNj3D3qsXRPlC9gH2ib7sP1GjA/IvZrTLdR3f4L6/44vO6fJwJfAZ5dj6E7B9tOmXlfZl5IeTF8NrBnXcZwz/NNonypWVjPjR9GxNaDLV8agv2BiymBzQOaA6Lti2Lzmt/pOK3931qvp4vq9XXLxvRPipJTbVGUr48frv3XrveFm+rf56LmBmmcrx+Kkr3/fzr1q+N2vUe0rdeEuc92u5ZGxM8oAd0v1nTs0G0eo5GZKyj3rk0pL4oA7wXuBQ7MzFsy84HMPBX4BPCfEasHYiPiRxFxcFu/P0bEP0ZxTL1O3xXl3vDk0aQ7Ih4XET+L8tx2e5TcIhs3hu8UDxe/+d8o96HVnmWiPE+eD2xZt/OJtf9g97iuzxvtMvMq4BeU54N/i4hvt6XhvyPic/X3hRHxiYj4JXA/8NgY4FllkOV22rft4/wOuBJord9JwD9FxHqN0V5OeR88d7BlDvFc7njPbpvPZpQPp8dn5tL698vMbF1/hvL82fE8HOh4rNN9Jcp16p6I+HlEPKaxjOdEeUe4q/5/Tu3/CUoguHW+fnGwbVXPrc9T3rU+HTVYFQ+/19wT5RnmH2r/js8gEbFnPdbvjvJudeRgy54SMtO/Cf4HzAde2mXYm4D/6zLsQuBf6u+ZlJvTRY3htwBv7jDdi4DlwHodhq0L3AU8r9Hv18B7Gt1vpOT4mEH5OnkLsE4ddiTwzfp7V2BBt3UF3kN58NoaWBv4KnBql3X9CHBKo3tP4Kr6+18pkd71gOnAM4ANh7DdZ1O+Ws2o3ScCH28MnwZcWpc9k/ICfQ3w8sa6PgS8uo67bl32s+q2mU25sTS3XQKPb3Sv3EbAWsA84MN1eS8G7gGe0EjfIsrX7hnAKcBpg6zbBpSX3dY2/yZwZLdjq5m+urzb6zqtA/wMuJbywDydEhi5oG3f/hnYhnLD/WVrewI7UXI47FKnPaCOv3Zj2j/UadcdynkC/Bz4Uk3b3wMLgZd02zcd5rdyf9ft9C3gF7X7HODtjXGPAf67sd2WAe+q+2Fd4C113z22zus7wDe6rMfKfV67t6/76MVd9sMmwI+BoxrD/x34SaP75XX912o/DzssfwfgPmA3yjH3wZr2mY3t/FtKjq1NKcfw27rM63DgeuAdwFOA6HY8ddjmu9bteFRNxx6UB75N6vCbgec3tsFObdP9F+W68cK6Pq3z5GTg+5QcIbOBv1Ie5Fv7ruP1tNN1ta3/RcCn6+/hnuePoASc1qvp+l/ge4Ndo/zzb7C/eu6+ox6TDwGPagxb5VhuP/47HKcvplzzd6rn1n9TnynqcXsz5Z6/Tu3epQ47inIvfySwOSUg+7E6rHW+frrOc90u/YZyj2jdxybKfXawa2nHa0m3/dM2bGWaOww7kYevo9OBt1GeTabXfhcDH+0w3XZ12zyhw7D9gV82uncE7qz75+WUZ6GNgaC8LG8xxONzlX3R6P/4ut3WrsfMRcDn6rCZwHXAu+t2/UdKbpKPd1nGKttqCPtlPoM/bzTvwTtSnnMPpOTKu4/yFZ56jNwGPKOxT6+n5HyZUZff9VllBPv2Tax6Dj+z7qcdGv3+Cryx0X1qa9u2n0sdlj+Uc7njPbttPgH8Dfgh5TnsUW3DV1mPDtv8RLqchwxwPNbp7gFeQDm2Pt9aDuV5ZjHlI+0MSq6UxcAjhni+zqbxztDo/9ja/4m1+7WU56dpwOvr8bLFAOu9K+X5aRrwVOBW4NVDOb8m81/fE+DfEHZSuZjcWy9Crb+31mGrHeyN6S6sF487KRf3u2hcFOuFZvcO0/1dPdm26jLfrwHH1d/b13k/coD0L6ZktYPhBTCubEvvFpQHsBkdlvH4elFar3afAnyk/n4L5SL71GFu91UuRqwewNgFuL5tmsOA/2ms60WDLOM9lC/Ure6BHqyeT7lJTmsMP5WHAw4nAl9rDNuDGsQZaN0oD7cX1/7DDWAc3xj2LuDKRvdTgDvb9u3b2tJ3df39ZepNsDH8L8ALG9O+ZQjnSevY2YYShJvVGP4p4MRh7JsTgQcp588tlFwOj6vDXk99mKM8RNwC7NzYbu3HxU+BdzS6n0D3Y3lXYEVd7t11m3+H+nDV2A9313GWA1fROF+Bbev8t26cD59vDD+S7gGM/wDOaHRPowRQdm1s5+bDz2eAr3SZ13TgnZRg1RLgJuCAAY73E1k1gPFAcxtRHgSfVX9fTwlObti2zF0p17b1G/3OqOs1vaZjx8awf6WUQ2/tu5EGME6jcT4M5zzvMP7fA4sHSod//g32Ryl+9hCwWe2+CnhvY/gqx3L78d/h/Pw6Jft6q3uDOv/ZlIf933dJx9XAHo3ulwPz6+9dKc8Q6zSGd+o3lHtEt5euft1nB7uWdryWtO2f1jNc6+9j7WnuMN2JPHzverD+7dcYPo8OQWfKC3QCz+0wbBblResxtfsTwAn194spL8XPam63IR6jA14LG+O9unV8UV4+b6QREKcUiRlqAGMo97jBnjda9+DFlOP74611p+RkaD2jvxK4om2fNj82DPisMoJ9+ybK/e9OyntDUgKNzW11OPDj+nvDeow9vTF8Pt3PpcHO5a737A7z2hr4Yp3nCkqQavvGegz2/NnxPBzoeKzTndbo3qBu/20ogYvfto3/a+BNQzxfZ9M5gNH1vKrD/wDs3W29O4z/OeCY4Zxnk/HPIiRrjldn5saNv+OHON0hmbkx5QR6JXBmPJzt8nZKUKDdFpSLyeIu8zwJeF2UbOP/DPwoG2ULa/axK2sWrDsp5fQ2G2J6mx5DKTt2Z53PlZQLzWpZ5TJzXh3+qpo1bi/KF3MoRWLOA06rWd4+ExFrjSA9ndK3ZSt9NY0fbkvfDc0JImKHKNnDb4lSdOGTDH3bbAnckCXbYMt1wFaN7mYN2/dTLs6DOR54VEQMtWxt062N3w906G5ffnN7XEdZJyjb8v1t23KbxvD2aQezJbAoM+9pW15zWw1lfp+t59ujM3OvzLy69v8+sGNEPJbyFeeuzPztAPPesi6/mZYZdMn2SakDY+PM3JDyFeEBVi/+sVPj3P4y8It6TpKZ11MeBt4YERtQHv6GWr51lbTW4+0GRnCcZebyzDw2M59b1+MTwAnN7LqDuCNL8bdOy/onykPLdTUbaLPensWZeV+ju3WsbcbDX++aw5rrNlJbUb4IDfs8j4j1olS+el0d/yJg4xiHSuE0qR1AeVG5vXZ/i7ZiJMPUfm24F7iDcuxvQ3kRGXQ6Vr32AyzMUj6fAfoN5R4BTKj77FCupYM5pO3Z7z+GON1n6/1hXUo9RP8vIl5Rhw307Ncavop6Lz2bUmSY+v+UOuxnlBfRY4FbI+K4iNhwiOnsKCIeGRGnRSkeeDfl40prH24J3Jj1ba4a7vPBYPtlKPPbKTM3yczHZebhjWPmJEpOZOr/b7RN15z3UJ5V2g20b6F8kGrVw/BoSm6PTzaGnwy8KCK2otSRMS8zh1o31WDn8kD37FVk5oLMPDgzH0c5v++raRuqjufhEI7Hldu/XsMW1XVoXzcYm+eD1vSt54P94+GicHcCT2bg54NdojSwsDAi7qLkuhnJO9WkYgBjisjMFZn5C0rk/WW1908oWZnavY5SN8b9Xeb1C8pDy96Ui3OzTPvzgQ/VeWxSL7J3UbJxtbuPkmW6Ne10Spa0lhuAV7TdvNfJUploJ6dSvgLtTYl4z6vpfSgzP5qZOwLPoQRy9u8yj4FkW/cNwLVt6ZuVmXsMMM2XKV/Btq8vpx+m87bp5CZgm1i10qdtKV8ORiwzHwI+CnysLS3t+2csau/epvF7W8o6QdmWn2jblutlKZe7MqnDWM5NwKYRMattec1tNZz5raI+WJ9BqRfln1n9AaV93jdRbtDNtCxj1YBPt2XdRXnx6Bhgqvvva5Tsv81yxydRjvN/ohynvxtsWZ3SGhFB2W+jPc4eyMxjKYHRVn0e99M4xigPW0Od3yWZuTclK+v3KPujZZNYtRLT1rF2O+WLcfu+aK3biI6JKLXcP4NSDhqGf56/n5IrZ5c6/gtasx5JeqSIWJdyH35hfZG/hVL3wdMi4ml1tFWu8Qx+/rVfG9anFH+6kXIN71YXRKfr302N7k7nXaf77WD3iJaJcp/tybV0OLL4MyUX3J61908o9SC0vwO8jrKd/9pldqcC+9Zg8brABY3lfCEzn0F5Wd4B+LdRJv1TlGPgqXUfvpGH9+HNwFZ1e7Zsw9ANZb+M+PmAcj96aq134ZXUQE+XeQ/lWaWjLvu2fZxbgW/TeH6oHzh+wcPPL8MJGgx2Lo9IZt5ACTi0nmFG9fw5yPG48lipH3g2paxD+7rBGDwfAP9AyYnyl1rfxvHAwZSiKRtTila3juVOy/gWJQfwNpm5EaWejCn/bGAAY3KIKBVVrvzrMtKzKS8OrVqvPwo8J0qFQptGxKyIeBflpedDgyzzZEr51I0p9Uu0zKK8mC0EZkTERyhZ1Dr5K7BOraBmLUq2tmYzb18BPlFPeCJi84jYe4A0nUYJzrydh3NfEBEvioin1ADJ3ZQXmOWDrF8nt1LKsrX8Frg7SmVP60bE9Ih4ckQ8c4B5zKppuDdKk5xvH2QZTb+hXNQ/GKWyyF0pN6XTRrAu7b5B2fa7N/r9EXhSRPx9PaaOHIPlvDNK822bUh4qT6/9jwfeViPNERHr1+NiVvdZdVdvhr8CPlXPiadSyqe2P0iMxsmU7H57Ub4ODeRU4L0RsV29YX4SOL3tS0VHdfx96FJbfT2u30zJpXFNY9C3KTfqjzK82sXPAPaMiJfU8/L9lGIXvxrGPFppe0+Uir3WjVKx7gGUc6D1tecPwBvqubM7pb6Kocx3ZkTsFxEb1QDO3ax+Tn+0jvd8ykPk/2bm8rp+n6jXu8cA7+Ph/XcrsHXUCv+GkI71ojRh933K9eCcOmi45/ksyv67s54bRwxl+dIAXk05J3akFEn6e0pZ8F/wcAD/D5QWi9aLUjnegW3zaD9OvwW8ud4T1qZcx36TmfMpZdkfXc/5tev5tUud7lTg8HoP34xSb9Rwm3Eezj1iotxnx+xa2k37s1/bS31rnL+jFCdq3UOOoTyXfT1KpdTrRMS+lLqT/q0tZ0PTOZQXvKMo968Vdf7PrPtlLcq2e5DhPWPNbFuH6ZR9eC/lmrgVq76A/rrO/+B6X9mbUhfCUPV0v9QPHGdSzpff1oBBt3FH9azSYd+2D38E5QW6ffhJlJfo5w51WdVYnMtEqbj6oxHx+CiVaG9GKe59cR1lxM+fQzge94iI59X7/Mco17AbKMf3DhHxhnpcvZ5y/fxhnW6g60andDwqSsW3RwCH1fNlfUqQYmEd582s+uGp0zPILEounQcjYmdKhexTngGMNUerdYXW33cbw55Defhd+RcP15rcqjH3XspL6uGZeS5AZv6NcuF7GqXM282Ur7Uvz8xfDpKekymRydMzc0mj/3mU8n9/pWS9epAuWfHql+V3UL4e30i50DRbJfk8Jer444i4h3Jh26V9Po353Uy5sT2Hh1+MoXxVOpPyQHMlpcKkbwJEqY34K4Osa8vXKcUG7oyI79WXoVdRHgyvpXzd/RqlyEw3H6BcfO6hPJCd3jb8SOCkuozXta3fUsrL8ivqsr4E7J+lBuxRqetyBCUS3er3V8qDyk8olS2NRdvU36JUOHlN/ft4XdZcShNkX6R8oZ/HIC2DDMG+lDKJN1GaBz4iM88f5TxXqufICuB39QF+ICdQzr+LKMfKg5Q6Q7rZsnHeXkfZL/u1jfPHOnwxJVv4P2SjidRahKIVxBjyA0pm/oXyteu/KcfZqyjNOC8d6jwaHgD+k5LV83ZKfRj/lJmtQMu76/zvpKzf94Yx738G5kfJXvw2Hs6yS13eYsq+P4VS3rt1nryLcq25hnJMf4uyf6BURHs5cEtErJaNuuGL9Zp0K6U86rcp9Qm1shAP9zz/HOWL5u2U69yPhrgNpG4OoNTHdH2W2vBvycxbKNfY/eozwjGUuiZupbzQtF8njqRxnGbmTyn1B3yb8rzwOGqRgpoFfjfK+XwL5Z7xojqfjwNzgT9Rmm3/HV1av+pmmPeICXGfHaNr6Rfbnv0ubQzbirZnPx7OBdNqMe0+yj33fygVoZOZd1Ce/dYBrqDkqH0f8M+Z2b6tmuuzhFIf00tpfCSiBEOOp+yX6+r8PgsQpTWowVq3uLxtHd5MCbzvRMnBe3ZdbisdSykVdx5IuXe8kfKSuYQhGON7XDcnUeoBa8+d2clwn1W67tvq2Y3nhyspL8vtzxtnUiq//ml9dh6qUZ/L1VLKOv+E8mz+Z8r+exOM+vmz6/FYfYvyvLuIknNyv7rMOygfO95fp/kg8Mp8uAje54HXRGkp7AsDLP/Oum8uoxRzfW1mnlCXcQXlmejXlOvuUyg5aFo6PYO8AziqPnN8hFVzm05Z0T3QKkkaSJSm8L6VmV/rd1pU1C+m38xMmyGVpCkgIn5DqUz6f/qdFoCI2JZSjOnRWZo61wQQpRndBZl5eL/TotExB4YkjUCUokI7sfrXPUmS1CMR8cJa/KVVNPGpTJCca1HqFnkfpbULgxdSD8wYfBRJUlNEnEQpY/7uXLX2cEmS1FtPoGSl34DS+s1rhlkUoieiVGx7K6Xowu6DjC5phCxCIkmSJEmSJjyLkEiSJEmSpAlvyhUh2WyzzXL27Nn9ToYkSZPOpZdeentmbt7vdIyWzwqSJPXGaJ8VplwAY/bs2cydO7ffyZAkadKJiOv6nYax4LOCJEm9MdpnBYuQSJIkSZKkCc8AhiRJkiRJmvAMYEiSJEmSpAnPAIYkSZIkSZrwDGBIkiRJkqQJzwCGJEmSJEma8AxgSJIkSZKkCc8AhiRJkiRJmvAMYEiSpDVSRJwQEbdFxJ+7DI+I+EJEzIuIP0XETuOdRkmSNHYMYEiSpDXVicDuAwx/BbB9/TsI+PI4pEmSJPWIAYwxlplkZr+TIUnSpJeZFwGLBhhlb+DkLC4GNo6ILcYndZIkaawZwBhj2x12Doec9od+J0OSJMFWwA2N7gW134Auu/GuniVIkiSNnAGMHvjBH2/qdxIkSRJEh34ds0lGxEERMTci5j565tIeJ0uSJI2EAQxJkjRZLQC2aXRvDXT8ypCZx2XmnMycs/nmm49L4iRJ0vAYwJAkSZPVWcD+tTWSZwF3ZebN/U6UJEkamRn9ToAkSdJIRMSpwK7AZhGxADgCWAsgM78CnAPsAcwD7gfe3J+USpKksWAAQ5IkrZEyc99BhifwznFKjiRJ6jGLkEiSJEmSpAnPAIYkSZIkSZrwDGBIkiRJkqQJzwCGJEmSJEma8AxgSJIkSZKkCc8AhiRJkiRJmvAMYEiSJEmSpAnPAIYkSZIkSZrwDGBIkiRJkqQJzwCGJEmSJEma8AxgSJIkSZKkCc8AhiRJkiRJmvAMYEiSJEmSpAnPAIYkSZIkSZrwDGBIkiRJkqQJzwCGJElSm9mHnt3vJEiSpDYGMCRJktrMP3rPfidBkiS1MYAhSZIkSZImPAMYkiRJkiRpwjOAIUmS1IH1YEiSNLEYwJAkSerAejAkSZpYDGCMoczsdxIkSZIkSZqUehrAiIj3RsTlEfHniDg1ItaJiO0i4jcR8beIOD0iZtZx167d8+rw2Y35HFb7/yUiXt7ov3vtNy8iDu3lugyF8QtJkiRJknqjZwGMiNgKOASYk5lPBqYD+wCfBo7JzO2BxcCBdZIDgcWZ+XjgmDoeEbFjne5JwO7AlyJiekRMB44FXgHsCOxbx5UkSZIkSZNMr4uQzADWjYgZwHrAzcCLgTPr8JOAV9ffe9du6vCXRETU/qdl5pLMvBaYB+xc/+Zl5jWZuRQ4rY7bN2bAkCRJkiSpN3oWwMjMG4HPAtdTAhd3AZcCd2bmsjraAmCr+nsr4IY67bI6/iOa/dum6dZ/NRFxUETMjYi5CxcuHP3KdWEdGJIkSZIk9UYvi5BsQskRsR2wJbA+pbhHu9Zbf3QZNtz+q/fMPC4z52TmnM0333ywpEuSJEmSpAmml0VIXgpcm5kLM/Mh4DvAc4CNa5ESgK2Bm+rvBcA2AHX4RsCiZv+2abr17xvzX0iSJEmS1Bu9DGBcDzwrItardVm8BLgCuAB4TR3nAOD79fdZtZs6/GdZymScBexTWynZDtge+C1wCbB9bdVkJqWiz7N6uD6DsgSJJEmSJEm9MWPwUUYmM38TEWcCvwOWAb8HjgPOBk6LiI/Xfl+vk3wd+EZEzKPkvNinzufyiDiDEvxYBrwzM5cDRMTBwHmUFk5OyMzLe7U+kiRJkiSpf3oWwADIzCOAI9p6X0NpQaR93AeB13aZzyeAT3Tofw5wzuhTOjbSQiSSJE0qsw89m/lH79nvZEiSJHrfjOqUYhESSZImF4MXkiRNHAYwRmnFiuTeJcsGH1GSJEmSJI2YAYxRevspl/KaL/+q38mQJEmSJGlSM4AxSo/YYG0W3rMEsAiJJEmSJEm9YgBjlDbfYG0W3b+UZctX9DspkiSpB2Yfena/kyBJkjCAMWqbzVqbTFh031JbIZEkaRKyIk9JkiYGAxijtO5a0wFYsmyFRUgkSZIkSeoRAxijFPX/CqMXkiRJkiT1jAGMUZpWt2AmFiCRJEmSJKlHDGCM0rQoeTBWZJLmwpAkSZIkqScMYIxS1ADGm0+8pM8pkSRp6omI3SPiLxExLyIO7TB824i4ICJ+HxF/iog9+pFOSZI0egYwRqlVB8Z1d9xvERJJksZRREwHjgVeAewI7BsRO7aNdjhwRmY+HdgH+NL4plKSJI0VAxij1CpCAtgKiSRJ42tnYF5mXpOZS4HTgL3bxklgw/p7I+CmcUyfJEkaQwYwRmlaDD6OJEnqia2AGxrdC2q/piOBN0bEAuAc4F2dZhQRB0XE3IiYu3DhwtWGzz707DFJsCRJGjkDGKMUzQCGOTAkSRpPnT4jtN+N9wVOzMytgT2Ab0TEas8/mXlcZs7JzDmbb775ajOdf/SeY5FeSZI0CgYwRikaEYwrbps9G/AAACAASURBVL67jymRJGnKWQBs0+jemtWLiBwInAGQmb8G1gE2G5fUSZKkMWUAY5SadWDse/zFfUyJJElTziXA9hGxXUTMpFTSeVbbONcDLwGIiCdSAhirlxEZAouRSJLUXwYwRsk6MCRJ6o/MXAYcDJwHXElpbeTyiDgqIvaqo70feGtE/BE4FXhT5siq3bYYiSRJ/TWj3wlY04UBDEmS+iYzz6FUztns95HG7yuA5453uiRJ0tgzB8YohREMSZIkSZJ6zgDGKE0zgCFJkiRJUs8ZwBgl68CQJEmSJKn3DGCMUnRsgl6SJEmSJI0lAxijZA4MSZIkSZJ6zwDGKFmJpyRJkiRJvWcAY5TMgSFJ0tQw+9Cz+50ESZKmNAMYo2QODEmSpob5R+/Z7yRIkjSlGcAYJXNgSJIkSZLUewYwRskcGJIkSZIk9Z4BjFEyB4YkSZIkSb1nAGOUzIEhSZIkSVLvGcAYJXNgSJI0ddgSiSRJ/WMAY5SmmQNDkqQpw5ZIJEnqHwMYo2T8QpIkSZKk3jOAMUqBEQxJkiRJknrNAMYoTXMLSpIkSZLUc75+j5I5MCRJkiRJ6j0DGKNkHRiSJEmSJPWeAQxJkqRhsClVSZL6wwCGJEnSMNiUqiRJ/WEAQ5IkSZIkTXgGMCRJkiRJ0oRnAGOUMvudAkmSJEmSJj8DGJIkSZIkacIzgCFJkjRMtkQiSdL4M4AhSZI0TLZEIknS+DOAMUqJlWBIkiRJktRrBjAkSZIkSdKEZwBjlLbaeN1+J0GSJPWB9WBIkjS+DGCM0qx11uLSw1/a72RIkqRxZj0YkiSNLwMYY2DGdDejJEmSJEm95Jv3GJgxLfqdBEmSJEmSJrWeBjAiYuOIODMiroqIKyPi2RGxaUScHxF/q/83qeNGRHwhIuZFxJ8iYqfGfA6o4/8tIg5o9H9GRFxWp/lCRPQlkjBjugEMSZKmIuvBkCRp/PQ6B8bngR9l5t8BTwOuBA4FfpqZ2wM/rd0ArwC2r38HAV8GiIhNgSOAXYCdgSNaQY86zkGN6Xbv8fp0tNY0M7JIkjQVWQ+GJEnjp2dv3hGxIfAC4OsAmbk0M+8E9gZOqqOdBLy6/t4bODmLi4GNI2IL4OXA+Zm5KDMXA+cDu9dhG2bmrzMzgZMb8xpX0yxCIkmSJElST/Uy68BjgYXA/0TE7yPiaxGxPvCozLwZoP5/ZB1/K+CGxvQLar+B+i/o0H81EXFQRMyNiLkLFy4c/ZpJkiRJkqRx1csAxgxgJ+DLmfl04D4eLi7SSadsDDmC/qv3zDwuM+dk5pzNN9984FRLkiRJkqQJp5cBjAXAgsz8Te0+kxLQuLUW/6D+v60x/jaN6bcGbhqk/9Yd+vfFE7fYsF+LliRJkiRp0utZACMzbwFuiIgn1F4vAa4AzgJaLYkcAHy//j4L2L+2RvIs4K5axOQ84GURsUmtvPNlwHl12D0R8aza+sj+jXmNu9c8Y+vBR5IkSZIkSSMyo8fzfxdwSkTMBK4B3kwJmpwREQcC1wOvreOeA+wBzAPur+OSmYsi4mPAJXW8ozJzUf39duBEYF3g3PrXF9bjKUnS1DT70LNtjUSSpHHQ0wBGZv4BmNNh0Es6jJvAO7vM5wTghA795wJPHmUyx4TxC0mSRi4itgIeQ+PZJDMvGsJ0u1OabZ8OfC0zj+4wzuuAIyl1Zf0xM98wRskGbEpVkqTx0uscGFNGKcUiSZKGKyI+DbyeUtR0ee2dwIABjIiYDhwL7EapG+uSiDgrM69ojLM9cBjw3MxcHBGP7Dw3SZI00RnAGCMWIZEkacReDTwhM5cMc7qdgXmZeQ1ARJwG7E0JhLS8FTg2MxcDZOZtq81FkiStEXrZCsnUYg4MSZJG6hpgrRFMtxVwQ6N7Qe3XtAOwQ0T8MiIurkVOVhMRB0XE3IiYu3DhwhEkRZIk9Zo5MMaI4QtJkkbsfuAPEfFTYGUujMw8ZJDpOt1+s617BrA9sCulyfVfRMSTM/POVSbKPA44DmDOnDnt85AkSROAAYwxMs0cGJIkjdRZ9W+4FgDbNLq3Bm7qMM7FmfkQcG1E/IUS0LgESZK0RjGAMUba4xeXzF/EM2dv2p/ESJK0BsnMk2qT6zvUXn+pAYfBXAJsHxHbATcC+wDtLYx8D9gXODEiNqvLuGZsUi5JksaTAYwxctvdq9Y7du+SZX1KiSRJa5aI2BU4CZhPKRayTUQcMFgzqpm5LCIOBs6jNKN6QmZeHhFHAXMz86w67GUR0Wrh5N8y847erY0kSeoVAxhj5IbF9/c7CZIkran+E3hZZv4FICJ2AE4FnjHYhJl5DnBOW7+PNH4n8L76J0mS1mC2QjJG7n5gKDldJUlSB2u1ghcAmflXRtYqiSRJmsTMgTFG7jKAIUnSSM2NiK8D36jd+wGX9jE9kiRpAjIHxhh5y/O263cSJElaU70duBw4BHg3cAXwtr6mSJIkTTgGMMbIcx+/2SrdNqoqSdLQZOaSzPyvzPzHzPyHzDwmM5cMPuXEMfvQs/udBEmSJj2LkIyRaUYsJEkalog4IzNfFxGXAdk+PDOf2odkjcj8o/fsdxIkSZr0DGCMkWlhBEOSpGF6d/3/yr6mQpIkrREsQiJJkvoiM2+uP9+Rmdc1/4B39DNtkiRp4jGAMUbMgSFJ0ojt1qHfK8Y9FaNkPRiSJPWWRUjGiPELSZKGJyLeTslp8diI+FNj0Czgl/1J1chZD4YkSb1lAGOMmANDkqRh+xZwLvAp4NBG/3syc1F/kiRJkiYqAxhjxFZIJEkansy8C7gL2BcgIh4JrANsEBEbZOb1/UyfJEmaWKwDY4yEOTAkSRqRiHhVRPwNuBb4OTCfkjNDkiRpJQMYkiSp3z4OPAv4a2ZuB7yENbAODEmS1FsGMCRJUr89lJl3ANMiYlpmXgD8fb8TNRK2RCJJUu9YB4YkSeq3OyNiA+Ai4JSIuA1Y1uc0jYgtkUiS1DvmwJAkSf22N/AA8F7gR8DVwKv6mqJRMBeGJEm9YQ4MSZLUV5l5X6PzpL4lZIyYC0OSpN4YNIAREU8GPgjsCCRwBfCfmfmnHqdNkiRNYhFxD+XZYmWv2h1AZuaGfUmYJEmakAYsQhIRewPfBS4E3gL8C6V5s2/XYZIkSSOSmbMyc8PG36zm/36nbzQsRiJJ0tgbrA6Mo4DdMvOEzPxTZv4xM08AdqvD1EVE9DsJkiStMSLieRHx5vp7s4jYrt9pGo35R+9pEEOSpDE2WABjrcyc396z9lurFwmSJElTS0QcAXwIOKz2mgl8s38pGhvWhSFJ0tgaLIDxUERs294zIh7DGtq8mSRJmnD+AdgLuA8gM28CZvU1RZIkacIZrBLPI4CfRMQngUspFWs9EziU8qVEkiRptJZmZkZEAkTE+v1OkCRJmngGDGBk5vci4lrg/cC7KLWCXw68LjP/OA7pkyRJk98ZEfFVYOOIeCul4vDj+5wmSZI0wQzajGoNVOw/DmmZVKzCU5KkocnMz0bEbsDdwBOAj2Tm+X1O1piYfejZ1oUhSdIYGTCAERGbAe8EFgMnAP8PeD5wNfD+zJzX8xRKkqRJKyKmA+dl5kuBSRG0aDJ4IUnS2BmsEs9vAWsD2wO/Ba4FXgP8EPhab5MmSZImu8xcDtwfERv1Oy29YnOqkiSNjcGKkDwqMz8cEQFcl5mfqf2vioh39jhtkiRpangQuCwizqe2RAKQmYf0L0ljx1wYkiSNjcECGMsBas3gt7cNW9GbJEmSpCnm7PonSZLU1WABjMdGxFmUOilbv6nd2/U0ZZIkadKrdWDslplv7HdaJEnSxDZYAGPvxu/Ptg1r75YkSRqWzFweEZtHxMzMXNrv9PSKrZFIkjR6AwYwMvPn3YZFxOlA1+GSJElDNB/4Zc3p2awD47/6lqIxZvBCkqTRGywHxkCePWapmISy3wmQJGnNcVP9mwbM6nNaJEnSBDWaAIYGkGkIQ5KkocjMjwJExKzSmff2OUmSJGkCGjCAERE7dRsErDX2yZk8DF9IkjQ0EfFk4BvAprX7dmD/zLy8rwmTJEkTymA5MP5zgGFXjWVCJh0jGJIkDdVxwPsy8wKAiNgVOB54Tj8TNdasyFOSpNEZrBLPF41XQiabNIIhSdJQrd8KXgBk5oURsX4/E9QLBi8kSRqdaQMNjIgPNn6/tm3YJ3uVqMnAKjAkSRqyayLiPyJidv07HLi234nqhdmHnt3vJEiStMYaMIAB7NP4fVjbsN3HOC2TigEMSZKG7C3A5sB36t9mwJv7mqIeMReGJEkjN1gdGNHld6duNRi/kCRpaDJzMXBIv9MhSZImtsFyYGSX35261WAzqpIkDU1EnB8RGze6N4mI8/qZpl6yGIkkSSMzWADjaRFxd0TcAzy1/m51P2Uc0rfGMnwhSdKQbZaZd7Y6ao6MRw5lwojYPSL+EhHzIuLQAcZ7TURkRMwZg/SOisVIJEkamQEDGJk5PTM3zMxZmTmj/m51rzVeiVwTmQFDkqQhWxER27Y6IuIxDOFbQERMB44FXgHsCOwbETt2GG8WpYjKb8YsxaNgDgxJkkZmsDowNGJGMCRJGqJ/B/4vIn5eu18AHDSE6XYG5mXmNQARcRqwN3BF23gfAz4DfGBskjs65sCQJGlkBitCMmoRMT0ifh8RP6zd20XEbyLibxFxekTMrP3Xrt3z6vDZjXkcVvv/JSJe3ug/pGyj4+UbB+688rc5MCRJGprM/BGwE3B6/XtGZg6lDoytgBsa3Qtqv5Ui4unANpn5w4FmFBEHRcTciJi7cOHCYaVfkiSNj54HMIB3A1c2uj8NHJOZ2wOLgQNr/wOBxZn5eOCYOh41K+g+wJMoTbd+qQZFhpRtdDw9f/vNV/42fiFJ0rA8B9i1/j1riNN0ahFt5S04IqZRnineP9iMMvO4zJyTmXM233zzwUYfNYuRSJI0fD0NYETE1sCewNdqdwAvBs6so5wEvLr+3rt2U4e/pI6/N3BaZi7JzGuBeZQsoyuzjWbmUqCVbXRCyIT7ly7rdzIkSZrwIuJoygePK+rfuyPiU0OYdAGwTaN7a+CmRvcs4MnAhRExnxIYOcuKPCVJWjP1OgfG54APAitq9yOAOzOz9WbfzOq5MhtoHX5XHb9b9tBBs4229CNb6Dcvvo4dP3IeN935wLgsT5KkNdgewG6ZeUJmnkDJcTmUN/xLgO1r8dSZlBybZ7UGZuZdmblZZs7OzNnAxcBemTl37FdBkiT1Ws8CGBHxSuC2zLy02bvDqDnIsOH2X73nOGcLBfj1NXcAcNcDD43L8iRJWsNt3Pi90VAmqB88DgbOoxRXPSMzL4+IoyJirx6kUZIk9VEvWyF5LrBXROwBrANsSMmRsXFEzKgPHc2snq1soAsiYgbl4WURA2cPHSjb6IQwfVqnOIskSWr4FPD7iLiA8oHiBcCHhzJhZp4DnNPW7yNdxt11dMkcW7MPPduiJJIkDUPPcmBk5mGZuXXNsrkP8LPM3A+4AHhNHe0A4Pv191m1mzr8Z5mZtf8+tZWS7YDtgd8ySLbRiWKFzZFIkjSgzDyVUj/Fd+rfs2u/SW3+0XtamackScMwHq2QtPsQ8L6ImEep4+Lrtf/XgUfU/u8DDgXIzMuBMyiVev0IeGdmLu+WbXRc12QIVqwYfBxJkqayiPhpZt6cmWdl5vcz85aI+Gm/0zUeDGJIkjR0vSxCslJmXghcWH9fQ2lBpH2cB4HXdpn+E8AnOvRfLdvoRGMODEmSOouIdYD1gM0iYhMert9qQ2DLviVsnLWCGBYnkSRpYOMSwJjKDGBIktTVvwLvoQQrftfofzdwbF9S1CcGLyRJGlw/ipBMKSuMX0iS1FFmfj4ztwM+kJnbNf6elplf7Hf6xptFSSRJGpg5MHrMHBiSJA3qrojYv71nZp7cj8T0i7kwJEkamDkweiwNYEiSNJhnNv6eDxwJ7NXPBPWLuTAkSerOHBg9ttxWSCRJGlBmvqvZHREbAd/oU3L6ylwYkiR1Zw6MHrMIiSRJw3Y/sEO/E9Ev5sKQJKkzc2D0mAEMSZIGFhE/AFo3zOnAE4Ez+pei/jIXhiRJnRnA6DHjF5IkDeqzjd/LgAD27VNaJoTZh55tIEOSpDYGMHpsue2oSpI0oMz8eUT8PfAG4HXAtcC3+5uq/jJ4IUnS6gxg9JhFSCRJ6iwidgD2oeS2uAM4HYjMfFFfEzZBtOrCMJghSVJhAKPHjF9IktTVVcAvgFdl5jyAiHhvf5M0cRi4kCRpVbZC0mPmwJAkqat/Am4BLoiI4yPiJZT6LyRJklZjAKPHrAJDkqTOMvO7mfl64O+AC4H3Ao+KiC9HxMv6mrgJxGZVJUkqDGD0mJV4SpI0sMy8LzNPycxXAlsDfwAO7XOyJgyLkkiSVBjA6LGfXXUr1yy8t9/JkCRpjZCZizLzq5n54n6nZSIxF4YkSQYwxtyX99tple4z5i7g5Z+7qE+pkSRJk8H8o/c0iCFJmvIMYIyxZ2636Wr9HlpuMRJJkjQ6FiWRJE11BjDGWKeq02dOdzNLkqTRMxeGJGkq8816jEWsHsLYcN21+pASSZI02bSKkhjIkCRNRTP6nYDJZkWW4iIzpgXLagskZsCQJEljxaIkkqSpylfrMbbZBmtz+J5P5NSDnrWy3/QOuTIkSZJGw1wYkqSpxgBGD/zL8x/Llhuvu7J7+nQDGJIkaWyZE0OSNNUYwOiRZq4Lc2BIkqSxZg4MSdJUYwCjR6Y1YhbTphnAkCRJY6tVoackSVOFAYweCXNgSJKkHrMYiSRpKrEVknEw3RwYkiSpR5q5MAxoSJImMwMYPdJqThVgWgT3LVnGWtOnMXOGmV4kSdLYaQYtZh96tkEMSdKk5dt0jzRLjUyfFjzpiPPY72sX9y9BkiRp0jN4IUmazMyB0SOPnLXOyt+tSjwvmb+4X8mRJElTRHvFngY1JEmThQGMHpo5YxpLl61gulVgSJKkcdIesGgFNAxkSJLWdBYhGQdW4ilJkvpl/tF7rmxytRXMsPlVSdKayBwYvVTr8bzj3qX9TYckSZryWjkwWhV9mjNDkrSmMQfGOLjm9vv6nQRJkiTg4YBFM2eGJElrAnNg9NAbdtmWE381v9/JkCRJ6qo9iGGODEnSRGUAo4c+8sodDWBIkqQJrxm0MJghSZqoDGD00DQr75QkSWuYbsGM9mGSJI03AxiSJEnqqFuTrEMdX5KksWQAQ5IkSUPSLUDR3rLJQONKkjRSBjDG2e+uX8xO227S72RIkjQpRMTuwOeB6cDXMvPotuHvA/4FWAYsBN6SmdeNe0InuWbLJi1Dad3EIIckaTgMYIyzt540l0v/Y7d+J0OSpDVeREwHjgV2AxYAl0TEWZl5RWO03wNzMvP+iHg78Bng9eOf2qlnKMGJ4TTharBDkmQAY5xlvxMgSdLksTMwLzOvAYiI04C9gZUBjMy8oDH+xcAbxzWFGtBwghLdgh0GNiRp6jCAMc4yDWFIkjRGtgJuaHQvAHYZYPwDgXM7DYiIg4CDALbddtuxSp/G0ED1bwxnfEnSmssAxjhbYfxCkqSx0qm98o532oh4IzAHeGGn4Zl5HHAcwJw5c7xbr0E6BSpmH3q2FYpK0iRkAGOc3fXAQ/1OgiRJk8UCYJtG99bATe0jRcRLgX8HXpiZS8Ypbeqj0TT/2mpRpZvBhkuSescARh/cv3QZ681000uSNEqXANtHxHbAjcA+wBuaI0TE04GvArtn5m3jn0RNBIMFHNpzawwU8OjUXGyru/XbAIck9YZv0X2wdNkK1pvZ71RIkrRmy8xlEXEwcB6lGdUTMvPyiDgKmJuZZwH/D9gA+N+IALg+M/fqW6I1IbUHHAYLQHTLsdH63R4AGU4OD0lSdwYw+mDpshX9ToIkSZNCZp4DnNPW7yON3y8d90RpSmkGI1q/ByrCMliAQ5LUnQGMPlhiAEOSJGnKGCyHx2B1dHSbTpKmGgMYfXDXAw+xdOG9PG7zDfqdFEmSJPXZUAIT7S2rjGQekrSmM4DRB+869fdce/t9/PmjL2eDtd0FkiRJGthQKyI1kCFpMvPtuQ+uvf0+AB5atgLW7nNiJEmStMZrViTa3t+KQyVNFgYw+mhaqQ1dkiRJGhOd6tfo1jSsQQ1Ja5qeBTAiYhvgZODRwArguMz8fERsCpwOzAbmA6/LzMVR2jb7PLAHcD/wpsz8XZ3XAcDhddYfz8yTav9nACcC61JqIH93Zmav1mmsLV9zkipJkqQ1ULeWUWDolYd2m16Sxlsvc2AsA96fmb+LiFnApRFxPvAm4KeZeXREHAocCnwIeAWwff3bBfgysEsNeBwBzAGyzueszFxcxzkIuJgSwNgdOLeH6zSmlq2wNRJJkiT1x3CCEoNVIGoxFUnjoWcBjMy8Gbi5/r4nIq4EtgL2Bnato50EXEgJYOwNnFxzUFwcERtHxBZ13PMzcxFADYLsHhEXAhtm5q9r/5OBV7MGBTCMX0iSJGlNMFBwYqBiKoNNK0nDMS51YETEbODpwG+AR9XgBpl5c0Q8so62FXBDY7IFtd9A/Rd06N9p+QdRcmqw7bbbjm5lxpBFSCRJkrSmG6iYCnTPvWFgQ9Jw9TyAEREbAN8G3pOZd0f3iis7DcgR9F+9Z+ZxwHEAc+bM6UvU4KVPfBQ/ufLWVfqtWGEAQ5IkSZPbcAMbg00naerqaQAjItaiBC9Oyczv1N63RsQWNffFFsBttf8CYJvG5FsDN9X+u7b1v7D237rD+BPKTttuzO+uv5Pp01YfttwAhiRJkqaowQIU5tyQ1K6XrZAE8HXgysz8r8ags4ADgKPr/+83+h8cEadRKvG8qwY5zgM+GRGb1PFeBhyWmYsi4p6IeBalaMr+wH/3an1G6ox/fTbLM3nPaX9YbdiBJ13CWQc/j/XXtjVbSZIkqWk4OTesSFSaGnr55vxc4J+ByyKi9fb+YUrg4oyIOBC4HnhtHXYOpQnVeZRmVN8MUAMVHwMuqeMd1arQE3g7Dzejei4TsALPGdOnMQN43TO34dw/37LKsKsX3sc5l93Ma+ds03liSZIkSavo1iTsQBWJdptO0polcopVJDlnzpycO3du35bfflH97GufxmuesXWXsSVJWnNExKWZOaff6Ritfj8rSOoNc25I/TfaZwXLLvTZtK51mkqSJEkaKyPJuWFgQ5pYDGD02fRGBCMzWbYiWatTjZ+SJEmSxtRImoA1qCH1jwGMPms2K3vsBfP47I//yp+OfBkbrrNWH1MlSZIkqVuujaGMJ2nsGcAYZ4/ecB1uufvBld3NIiSnz70BgMX3LTWAIUmSJE1AQw1qdBtX0sgZwBhnP37fC/jRn2/hg2f+CYCgWYSE1fpJkiRJmtiGWgTFgIY0OgYwxtmG66zF1pusu7K7UYLk4QCG8QtJkiRpjdcesLCZV2l0DGD0wfRGhGL5itWbsZ1iLdtKkiRJU8JAQQrr1pAGZwCjD5otj1x241286mlbAqUVEoDlRjAkSZKkKWU4dWt0G1+a7Axg9MG0RgDjuIuu4Z0vejwbrftwpZ3LV6zoR7IkSZIkTSDm2JBWZQCjD6a3VXKxdFkJWLTyXSzrUKxEkiRJklps4lVTkQGMPpjWFsD44w13cvj3/ryyedVlyw1gSJIkSRqeTpWGNoMa84/ek9mHnm1QQ2ssAxh9sPj+pat0/8vJc1fp7lSxpyRJkiQNR6eARiuIMdRppInEAEYf7LzdprzoCZtzwV8WdhzeLEKyZNlypkWw1vRp45U8SZIkSZNQKzgx3Lo12qeX+sUARh+ss9Z0jt1vJ3b8yHkdhy9bvoL/nXsDr3jKFjz5iPN44hYbcu67nz/gPK+65W4uuGohb9/1cb1IsiRJkqQpYCTBDQMbGi8GMPpk5gA5Kr77+xs57ZIbmDt/MQBX3nx3x/EuW3AXW22yLpuuP5O9v/hLlixbwUEveOwqzbRKkiRJ0ljoFqgwsKHxYgCjT2ZMn8aX99uJt5/yu9WGnXbJDQDccd+SAefxqi/+H7MfsR4XfGBXltSWTJYsW856M4e2W3999R3se/zFXPCBXdlus/WHuQaSJEmSNPTAhgENjZYBjD5ad+b0AYc3672Yf/t9XL3wXr560TWc/JadOfW315f+d9zPdoeds3K8Bx9awXozB17uv3/3Ms68dAF7PnULAC6Zv4jtNlufn111K899/GasPWPgdEmSJEnSYJoBi/YWUQYaV+rGAEYfbf+oWQMOP/fPt6z8vdsxP+eh2rzqlTffzUd/cEXHac6/4hZe+4xtuHrhvV3nf8pvSvBjac21MXP6NH53/WLecuJcXvW0LfnBH2/iv/d9Oq962parTXv0uVfxwh0259mPe8TgKyhJkiRJDB6gGCi40ZzeZmCnNgMYfbTVxusO2oxRSyt4AfAPX/pV1/E+9O3LWHz/Qxx97lWcfcjzeNKWG3Ud9+4HlwElp8fi+0rTrhf9tbSMcvwvrukYwPjKz6/mKz+/euVF49a7H+TeJct43OYbDLoOkiRJktTJcAIcrd+d3qUMbkxuBjAmkFc+dQt++KebRz2fufMXAXDDovtXBjCuuOluzr7sJt6/2xNWjtcKVjQr/Yz6c1ENaDQ9tHzFav12+eRPAfjXFz6Ww17xxGGl854HHyKB+5YsY4uN1h3WtJIkSZKmjk6BiU65MaxQdHIzgDEBzJgWLFuR7LvztmMSwLjrgYcAuG/J8pX99vjCLwA49oKrVxt/ybLlzJxRDoV7aq6MBYsfYPahZ/ODg5/HU7YuQZAHHlq+2rQtX/35NRzy4u1Zf+0yn9vufpBZ66w1YD0fTz/qfJatKDlL/vdtz+aZszcd8jpKkiRJmtr+f3t3Hl9Vcf9//PXJvkGAEPZ9X5Q1IigqClVcqS1W/PpFba3Y2qq1ta6tRVv9We23Vq22peBuwV1RLCgiCir7B592ogAAIABJREFUvhPWhAABkpCQkH1+f9yT683CEhLMTfJ+Ph73kTtz5pw7c05yMvlkZk5VQQk9KaVhUwAjCKx46Hs4B3GRYfx8VHd+MLg933vqy5Pev1frOLbsP+JPL/Uev7p0ZwZr9xymadTxL/OdM1b535eUunLbrvz7Qv8Pdf5xAhgA6TkFdI0MIyO3kGGPfcb/nN2J317cm+iIUKLCKwcyigM+a8v+HAUwRERERETktKhuYONE+0ndUAAjCDSNCve/v3dsHwBuGNGZV77ZBUDnhBh2Hco75v4X9mlVLoBRpuxxrDWVnJ5D+2YxTJy6xJ/3/PxkbhvVo1y59Ox8uraMZfsBX10+XJ3GfxbvZmCHeD745cjjfkaoN3elpNQxb1M6Y/q2wsyOu4+IiIiIiEhN1HRx0ZM9jtQOBTCC1CPjzmBkj5ZMenU5PRLjGN2nNS98tYOHr+rPH2auB6B5TDiZeUWUVhg1UdvG/LXyaJAnZm+mb5um5fKunbKIV28exq+8ER1l01FWpx6muKSUpTsz2ZN1lI17s7njop7l9g0JMfIKi3l7eSoPfbCepycMYtyg9qepRSIiIiIiIid2soGJkw10VPe4Up4CGEGsU0IMAH3aNuG3l/Thp+d1pV2zaNo3i2ZlSiatmkTxh5nriQ4PZWz/NkRHhNKtZSzn9Urk+899ddrr9+OXllbKmzhtSRUl4eaXl/GFt2gowLSFO8ptn785nXveXuNP/2fxbi7p36bKqSclpa7cwqPH8vLXO+nbtinDumpqioiIiIiInD7VDUhUFfBQUOPEzLnT+9/7YJOUlOSWLVtW19U4aev2HKZ3myaEh4ZU2lZa6pixNIWL+7emZVxkuW3bDhzhX19sY1VKFtNvGU5CXCRrUrNYvD2DcYPbcf87azlaVMLX2w6V2+833+vFz0d151BuIdMW7mD2un3szjj29JXT6aZzuvDri3uRnl1ARGgIUREhPP7xJpbuymDBPRedcP/AxyuJiMjpZ2bLnXNJdV2PmqpvfQUREWkYGsN0lZr2FRTAaORSMvJIbBJJn9/P5reX9OYXF5Zf12Lx9kNcO2URALN/dR6b9uYQFR7Cz15b4S9zz9jefL4pnRAzFu/IqNX6dW0Zy46DuUSEhlAY8BjX313el6sHtyehQuAmkAIYIiLfLQUwRERETr/6/ESVmvYVNIWkkevYwjdN5Vjf7F0TYwF4YvwA+rRpSp82TSkqKWV4txYs2u4LVvzs/O7cNqoHzjneWbGHu99aDcBFfVoxb1O6/1hDOzdn+a7MatVvx8FcgHLBC4A/zdrIn2Zt5OM7zuOyZxbwn1vOJsSM4d0SKCguYeHWg9X6HBERqZ/MbCzwNBAKTHXOPV5heyTwCjAUOARc65zb+V3XU0REpLac6hNVanLsYKERGHJCzrkqnwhSVFJKbkExzWIiyuWX/eBs/tNY7n5rDR+uTiM6PJSNfxzLoSMFDP3TXODUAhoVVXxCy2s3n80Hq/bw1vJUf96mP45l5qo0rknqoCebiIicRt/1CAwzCwW2AN8DUoGlwHXOuQ0BZW4DBjjnfmZmE4CrnXPXHu+46iuIiEhjdbwgSG0ENzQCQ067Y/3RHx4aUil4AfD89UMIDTEiw0J5cvwAPlydxi3ndwMgNjLMO6Yv2BARFkL3Bz5mSKdmrNidBcAPBrdnT9bRk5qOUvHxsv87bXGlMn+Zs5mpC3eQ2CSSC/u0qrQ9O7+IzNxCOifEnvDzREQkqAwDkp1z2wHMbAYwDtgQUGYcMNl7/zbwdzMz19j+gyMiInISjhekOJURHrU9oqPyypAiNXTZmW25pH8bAKLCQ9n66KXcNaanP73gngvZ9MexREeEEhpifHrX+bz207MBuGtML/567SCm3JDEG5OG87vL+/qPO6RTM97+2Yhq12eq98STfdn5HDxSQGpmHl3um8XlzywA4IZpS7jgyfl8sGoPeYXFJzzelv05vPz1zmrXQ0REal17ICUgnerlVVnGOVcMHAYSKh7IzCaZ2TIzW5acnIyZ+V/Lly9n+fLl5fImT54MQLt27fx5Q4cOBWDSpEnlyqalpfHhhx+Wy5syZUrZ5/pfV155JQBXXnlluXyAKVOmlMv78MMPSUtLK5c3adIkAIYOHerPa9euHQCTJ09Wm9QmtUltUpvUphq16cz1/2TXn6/wv3Y+fjkPdNtTLu/Zc0v5+o7B/rSZ0WTQWLrcN4vINj2IaNPDV5lTpCkkEvSenruVp+Zu4ZFx/blhRBcWbD3Agq0HmfLl9hofe+MjY+n70Gx/etygdjw9YTCFxaUUlpRyMKeALi3Lj8zodv8sSh1sf+wyQk7ica4iIo2FffdTSK4BLnHO/dRLTwSGOeduDyiz3iuT6qW3eWUOVXVMUF9BRETkdKlpX0FTSCTo3TmmJ7de0I3IMN+AofN6JnJ214TjBjBG92nFZwELiB5LYPAC4INVaXywKq1c3oAO8fRr25THfziAtKyjlHoxv24PfFxuSNSx1go5lqy8Qv8UnPyiEqYt3MEt53UjIkwDo0RETlIq0DEg3QFIO0aZVDMLA+KB2n1kloiIiHwn9JeS1AtR4aHlggMRYSG8dvPZ/nTyo5ey/uFLeHrCIN68dQQPXN6Xe8b2Jj46vMafvSb1MDOW+kYon/P4vErbnXPMXrePrvd/zE7vqSmBFmw9wOG8onJ5s9bsZdAjn7I6xbfux7SFO3hyzmamL9ld4/qKiDQiS4GeZtbVzCKACcDMCmVmAjd678cD87T+hYiISP2kERhSb43s2ZIXf3wWsRFhhIWGEBYawrhB3059vm1UDwCemL2Zv1wzkOlLdtfoqSdVLVqTnpPPsEc/86efmruF2y/qQXhoCPuzC4iJCGXitCWc3yuRV34yzF/us037Afjl9BW0jY/mnO6+6dgHcgpOuX4iIo2Nc67YzH4JzMH3GNUXnHPrzewRYJlzbiYwDXjVzJLxjbyYUHc1FhERkZrQGhjS4JWWOkJCjHV7DnPTi0s5eKRykKBVk0jST3Pw4LeX9Oa2Ud1JO5zPBU98TnHptz97913ah8f/u4mkzs25YkBbbjq3a7l9cwuK+fPsTdx9SW8iQkNYvCODC3olntb6iohU13e9Bsbpor6CiIjI6aE1MEROoGyhzTPax7Psd2PYcTCX7QeOsGxXJj8Y3J74mHB+8PzX/vIPXdGPRz7yPYHvo9tHMnXBdt5fVXFKdfU9OWczT87ZXOW291fuAWDZrkyW7crk6iEdSMnII7+ohKQuLXhzWQqvfLOL2MgwiktK+feCHUy9IYnoiFCun7qYN28dwbCuLY77+V9uOcCa1Cx+eVHPE9Z13qb9/OzVFSz//RiaRNV8Go6IiIiIiEhNaQSGCLBidybPfraVKTckER4awqvf7GRPVj73XdrHX+bJOZt47vNt/vSYvq3olhjnX0z0xZvOYu7G/by+uPI6Fi1iI8jILTylui1+YDRnP+abpnLFgLZ8tGbvMcuO6p1IWEgI/zu8EyFmbNybza0XdAe+nQIz7cYkWjWJ4t2VqSzdmcFHt59X6ThXPruQtXsO895t5zC4U3O+2HKAHq3iaN8susrP/XTDfrbsz+EXF/aoVtumL9lN+2bRnH+So0lSM/NYuTuLKwe2q9bnBFqxO5OE2Ag6J8SeuLCIVItGYIiIiMjxaASGSC0Y0qk5L/742zUqJo7oUqlMQmwkAHeO7klKZh6/v7wfzWMjuOmcLoSFGK2aRjGyZ8tyAYxRvRO5c3RPBnVsRtf7P/bn33pBN/71xck9BrYseAEcN3gBMH/zAQDmbtzvzzuzfTwDOzbzp29+uXyn/P2Ve9idkccdo78dmVH2dNiUzKOc2T6eG19YQtv4KKbemMTerHy6t4rjL59s5snxA4iJCOOWV3zHvG1Ud+ZvPsBznyfTJj6KicM789z8bdwwvDNj+rWuVN/7313ra9ftI1mxO5MbqjjvgX74j6/Zn13ApWe0ISz01NYgLhttE/gEGRERERERCX4KYIicpIkjOlPqHBNHdCYyLNSf3y5gVEJ4aAjTbxlOeKhRWFxK//bx/iehfH73KD7dsI9bzutGUYnzBzAWPzCaf8zfxprULFbsziI81Hjz1hFcHTCtpSb+Z+ri427/1RurfOXO7sTcDftJycxjdephAO6YvpLFZ3cCYO/hfC5/ZmG5fWet2cvFAYGJK/++kHV7sv3psoDLl1sO8J9bzuac7i3Jyitk+pIUuiTE+Mtd8azvuJFhIfwoqWO5J86UlDr+75PNjOnXmv3ZvnVK/rtuHxf2acWGtGxeWLiDJ64ZQNOocN5bmcq5PVqy82Aez87bSm5BMe/edm61zteGtGziIsNoGh3G7ow8BnRoduKdRERERETktNMUEpE68p/FuzmnewJdWvqmMjjn2HkojxaxEcRHh7N5Xw6//2Adv7iwBze+sKTcvq/ePIyJ05ZUdVguH9CWWScYqVFXfntJ72OuAxKoV+s4Jl/Vny37cpj84YYqy7SMi+DgkcJK6aZRYWTnF/vzN/1xLFHhoUyeuZ6Xvt7pz9/5+OXMXreX7QdzmTi8s3+tj7KpNsO6tGDJzgw2/XEsGbmFZOcXsSb1MD9K6lipLkcLS/hkwz6uGtiOwpJSIsNCSc/J55z/N4/fXd6Xa5I6EhsZxqw1e/liSzrDuiZw6RltiI0M4/NN6fRp24TmMRFEhfsCYy99tYOEuMgTTpV5bdEuwkONa8/qdMJzejrkFhTz7opUrj+7s3+tGWncNIVEREREjqemfQUFMETqgez8Iv4xfxtNo8IZP7QDiU0ieXLOJpI6t2BAh3gS4iIpKC6huMQRGxnGQx+sIy0rn+0Hj7D9QC4dW0Tzzs/PYfriFJ6auwWANZMv5tZXlvPN9kOVPu+M9k0Z2SORf36xrdK2EIPSatw2mkSGkVNQfOKCp9HAjs1YnZJVLu+HQzrwzorUE+7bu3UTNu/P8acv6tOKO0f3pKC4lI/WpLE/O585631Tdu4d24c/z97E7y7vy8qULH8gqVlMOA9f1Z87Z6zyHyepc3M2788hJyDYMnF4Z+69tA9n/GEOAP++IYmhnZvz5rIUrhrYjjAvSJDYJJKP1uzl9ukrAV+Q5uEP13NWlxZ0aB5DYpNInvs8mRHdEoiPDmdkz5b+4MgTszfRtWUs5/dKJD46nMU7Mpi7YT93julJRFgITb1ATnFJKXlFJf40+IJsZaNj8otKuHbKIlanZDFj0nCGd0vwl5m5Oo1L+rfxfybAqpQsjhaWMMJ7ZHCZqQu2s+9wPr+7ot8Jr4UEPwUwRERE5HgUwKgmdUqksZu1Zi+fb07nL9cM5EBOAV9vO8iZ7ePp0DyG91amcu87a5n3mwvolhjH4aNFFBSXEB8dTt/fz+bcHi359w1JTJy2mKU7M/nkrvM5mFPA3+ZuZcnODDonxPDY1Wdy/dTFDOvagrbxUTw5fiAzlu7moQ/WV1mfNZMvZsDkT77js1C/dWwRTUrG0ZMuP7BjM+65pDfXn2A6EcDY/m34ettB/yiW568fwm2vryhX5sLeiXzurbcC8ONzu9CzVRPOaN+UJTsy+NOsjZzTPYEXbjqLEDNWp2ZxzT+/AXyBoyfHDyAkxFi2M4PxXv57t53DTS8uZdL53diQls2stXuZf/coXlu0i9F9W+OcY0/WUX44pANTF27nsY83cW6PBH46shsjuifwwao9lDq4enB7dh3Ko1tiLBm5hbRuGgVASkYekeEhfLYxnQlndWRP1lHaN4smNfMoy3ZlUFoKh3ILaBYdQalzjD2jDbsO5dEkKoxuiXGVzlNyeg5mRvfEON5fuYeVuzN5eNwZgC/4Expi5aZClXHOkZFbSEJcZLn8/KISCktK/QGj7PwiDucVYQYdmsdUOk6ZBVsPMKJbQpVrwizbmcEz85KZekMS4aFGqYPQEKPEi0CGnoZRMwpgiIiIyPEogFFN6pSIHF9JqTvhHzbFJaWUOogIq3ohzaU7MxjaqXmlaQWfrN9Hu2bR9GvblPVp2RwtKmFY1xYcPFLAvW+v4bNN6ZjBazefzfaDuaRm5DGiewJt4qPILShm3+ECYiJDuaBnIlvTj/D4fzfy6NVnEhsZxoKtBxjSqTlTF+zg7eUp5aaRAFw3rBPdWsby5dYDtG4aRagZbyxLOW47h3drwaLtGSdx1mpuUMdmrKowSqS+iwwLoaC49LR/zoAO8azx1m2pSnUDPhXdOKIz5/ZoCcCc9ftxzvGu9+jjV34yjBu8KV4v3nQWKZl5PPTBeqLCQ7j8zHbM3bifZ64bzAW9Ejl4pIBfv7maL7ccYECHePq0acLcjekUl5SSnV9MTEQoP0rqyKuLdvmDDOB7itFlZ7bh6sEd2HUol44tYmgZF8mzn23l3ZV7+Pmo7nRtGcur3+xiRPcErhnagT/N2sgXW3xBpsDr8PSEQUxfspvUzKMsvPeiUz4nx6IAhoiIiByPAhjVpE6JSPDKKywmNMTKLZJ6KvKLSkjJyKNn6yakZOTRoXl0lf8Nz8wtpLjUkRAbwe6MPOKiwjhaWEKb+Cg2pGUzsGMz8gqL2Z9dwNo9h7nDm7LRtWUsE4d35vrhnViyI4M1qYeZsXQ34SEh/PKiHkxfspuVu7NoERvBkgfHkF9Uws5DuSzadohrz+rEyt2ZvPLNLnq0iuOrbQcZ3acVPx/Vg+W7Mnn5m5383zUD+fu8ZP7+ebK/rndc1INn5iVz26juPD/fN7Xn/V+cy6OzNrB0Z6a/XHR4KP3aNeX564f4p23kFhbz+H83+aerNIkK46cju5GamceRgmKKShxzN+7ngl6JbNybTXpOQY3Ov1QWHR7K0aKSuq5GOWXrw9QmBTBERETkeBTAqCZ1SkTkVJWWOkqcI/wkHuFaVFJKqXM1CsYcLSxha3oOHZvH0Dw2guKSUsJCQygpdRzJLyY+Jtxfr7L4jHNUe0FN5xzpOQX+6RbOOfZl59M2Ppr8ohJSM4/SJj6KuMhvH1y1bs9h/r1gOw9e1pd92fl8lXyI3m3iOFpYSm5hMWe0i2fv4aPkFpaQGBfJiO4JHDxSwOoUX2Bn/uYDjB/agbSso7RrFs3M1WnsPXyU0X1a0yQqjKQuLdh7+CjFJb6pIwBvL09l075skjq3oEerOFIzj3JBr0Su+/cirhvWiTPb+z7z9cW7aRoVRvfEOG69oDsfr93Lme3jyS0spl/bptz91mr6tWvKE+MHEhZifP+5r9i0L4cnfjiAbQeP0CImgvScAnILinlzWQr3ju3DG8tS2H4gly4JMew8lAdA/3ZNGdChGe3io1iz5zCfbvCthTLhrI7MWFr16J4z2jflvJ6JfLH5AMO6tuCd5al0aBHDhLM6sutQHh+v3cu+7PyTWmtmbP82HCkoZmHywWOW+c33erEu7TBzN6YTYlBU8u1Bv77vonJPUaoNCmCIiIjI8SiAUU3qlIiISE1k5RWSk19Mxxbl16ZwzrFl/xF6t2nC4bwi4qLC/NOxnHNk5hXRIjbipD4jcMFU8E3tKi71PeEmcIQR+IJlaVlH6ZwQ6y97rGlg6Tn5JMZFVjkiqTYogCEiIiLHU9O+QtiJi4iIiEiZZjERNIupHIgwM3q38QUVykbHBG472eBFWflAoSFGaIhvNE9UeKg/eAEQHhriD16UlT2WVk2iTroOIiIiIsHmxOOgRURERERERETqmAIYIiIiIiIiIhL0FMAQERERERERkaCnAIaIiIiIiIiIBL16H8Aws7FmttnMks3svrquj4iIiIiIiIjUvnodwDCzUOA54FKgH3CdmfWr21qJiIiIiIiISG2r1wEMYBiQ7Jzb7pwrBGYA4+q4TiIiIiIiIiJSy+p7AKM9kBKQTvXyRERERERERKQBqe8BDKsiz1UqZDbJzJaZ2bIDBw58B9USERERERERkdpU3wMYqUDHgHQHIK1iIefcFOdcknMuKTEx8TurnIiIiIiIiIjUjvoewFgK9DSzrmYWAUwAZtZxnURERERERESklplzlWZc1CtmdhnwNyAUeME59+gJyh8AdtVyNVoCB2v5mMGmMbQRGkc7G0MboXG0szG0ERpHOxtKGzs75+r9UEczywE213U9GqmG8rNQ3+i81x2d+7qjc183ejvnmpzqzvU+gBEMzGyZcy6prutxOjWGNkLjaGdjaCM0jnY2hjZC42hnY2hjfaLrUXd07uuGznvd0bmvOzr3daOm572+TyERERERERERkUZAAQwRERERERERCXoKYNSOKXVdge9AY2gjNI52NoY2QuNoZ2NoIzSOdjaGNtYnuh51R+e+bui81x2d+7qjc183anTetQaGiIiIiIiIiAQ9jcAQERERERERkaCnAIaIiIiIiIiIBD0FMGrIzMaa2WYzSzaz++q6PqfKzDqa2edmttHM1pvZnV5+CzP71My2el+be/lmZs947V5jZkPqtgUnz8xCzWylmX3kpbua2WKvjW+YWYSXH+mlk73tXeqy3tVhZs3M7G0z2+Rd0xEN7Vqa2V3e9+o6M5tuZlEN4Vqa2Qtmlm5m6wLyqn3tzOxGr/xWM7uxLtpyLMdo45Pe9+saM3vPzJoFbLvfa+NmM7skID9o779VtTFg291m5syspZeul9exIQrm76mGoLbub1J91oj6ecHE65ssMbPV3nl/2Muv9/2V+sIaQb8/GJnZTjNba2arzGyZl1cr9xsFMGrAzEKB54BLgX7AdWbWr25rdcqKgd845/oCw4FfeG25D/jMOdcT+MxLg6/NPb3XJOAf332VT9mdwMaA9J+Bp7w2ZgI3e/k3A5nOuR7AU165+uJpYLZzrg8wEF97G8y1NLP2wB1AknPuDCAUmEDDuJYvAWMr5FXr2plZC+APwNnAMOAPZb8kgsRLVG7jp8AZzrkBwBbgfgDvPjQB6O/t87zXGQn2++9LVG4jZtYR+B6wOyC7vl7HBqUefE81BC9Rw/ubnLLG1M8LJgXARc65gcAgYKyZDadh9Ffqi8bQ7w9WFzrnBjnnkrx0rdxvFMComWFAsnNuu3OuEJgBjKvjOp0S59xe59wK730Ovh/09vja87JX7GXg+977ccArzmcR0MzM2n7H1a42M+sAXA5M9dIGXAS87RWp2Maytr8NjPbKBzUzawqcD0wDcM4VOueyaGDXEggDos0sDIgB9tIArqVz7ksgo0J2da/dJcCnzrkM51wmvuBApT+m60pVbXTOfeKcK/aSi4AO3vtxwAznXIFzbgeQjO/eG9T332NcR/B1iu4BAlfQrpfXsQEK6u+phqCW7m9yChpLPy/YeOfviJcM916OBtBfqQ8aQ7+/nqmV+40CGDXTHkgJSKd6efWaN2RqMLAYaO2c2wu+X35AK69YfW373/D98VDqpROArIA/nALb4W+jt/2wVz7YdQMOAC96Q+ammlksDehaOuf2AH/B91/svfiuzXIa3rUsU91rV++uaQU/Af7rvW8wbTSzq4A9zrnVFTY1mDbWczrfdaPB/G6qLxp4Py/oeKMGVwHp+ALR22i4/ZVg0xj6/cHKAZ+Y2XIzm+Tl1cr9RgGMmqkqKlevn0trZnHAO8CvnHPZxytaRV5Qt93MrgDSnXPLA7OrKOpOYlswCwOGAP9wzg0Gcvl2iFZV6l07vWH044CuQDsgFt/ws4rq+7U8kWO1q96218wexDfU+fWyrCqK1bs2mlkM8CDwUFWbq8ird21sAHS+g4uux2nQkPt5wco5V+KcG4RvZOEwoG9VxbyvOu+1pBH1+4PVuc65Ifj6578ws/OPU7Za514BjJpJBToGpDsAaXVUlxozs3B8v9Red86962XvLxvC431N9/LrY9vPBa4ys534hgZfhC8y28ybhgDl2+Fvo7c9nqqHhAebVCDVObfYS7+NL6DRkK7lGGCHc+6Ac64IeBc4h4Z3LctU99rVx2uK+RapvAK43jlX9ourobSxO76A22rvHtQBWGFmbWg4bazvdL7rRkP63RTUGkE/L6h503nn41uDpKH2V4JJY+n3ByXnXJr3NR14D1/wrlbuNwpg1MxSoKe3mm0EvoXmZtZxnU6JN8drGrDROffXgE0zgbKV728EPgjIv8FbNXY4cLhsSFCwcs7d75zr4Jzrgu9azXPOXQ98Doz3ilVsY1nbx3vlgz4S65zbB6SYWW8vazSwgQZ0LfFNHRluZjHe925ZGxvUtQxQ3Ws3B7jYzJp7o1Uu9vKClpmNBe4FrnLO5QVsmglMMN/q4F3xLfC0hHp2/3XOrXXOtXLOdfHuQanAEO/ntcFcx3quXn1PNSAN6XdT0GoM/bxgZGaJ5j1Vy8yi8f0DZiMNt78SNBpLvz8YmVmsmTUpe4+v/7KO2rrfOOf0qsELuAzfivnbgAfruj41aMdIfEN11gCrvNdl+OZ+fQZs9b628MobvtXatwFr8T0Nos7bUY32jgI+8t53w/cHUTLwFhDp5Ud56WRve7e6rnc12jcIWOZdz/eB5g3tWgIPA5u8G+KrQGRDuJbAdHzrehTh+yP35lO5dvjWkUj2Xj+u63adRBuT8c1/LLv//DOg/INeGzcDlwbkB+39t6o2Vti+E2hZn69jQ3wF8/dUQ3jV1v1Nr1M6942qnxcsL2AAsNI77+uAh7z8et9fqU8vGni/P9he3jle7b3Wl/0+ra37jXk7iYiIiIiIiIgELU0hEREREREREZGgpwCGiIiIiIiIiAQ9BTBEREREREREJOgpgCEiIiIiIiIiQU8BDBEREREREREJegpgiDRSZnbE+9rFzP6nlo/9QIX017V03JfMbI+ZRXrplma2s5aOPcrMPqqNY4mIiEjtKeuziIgogCEiXYBqBTDMLPQERcoFMJxz51SzTsdTAvykFo9XK07inIiIiIiISA0ogCEijwPnmdkqM7vLzELN7EkzW2pma8zsVvCPUPjczP4DrPXy3jez5Wa23syahybtAAAD2UlEQVQmeXmPA9He8V738spGe5h37HVmttbMrg049nwze9vMNpnZ62Zmx6jv34C7zCwsMLPiCAoz+7uZ3eS932lmj5nZN2a2zMyGmNkcM9tmZj8LOExTM3vPzDaY2T/NLMTb/2Jv3xVm9paZxQUc9yEzWwhcU5OLICIiIifPzK40s8VmttLM5ppZay8/0cw+9X5n/8vMdplZy7qur4jUDgUwROQ+YIFzbpBz7ingZuCwc+4s4CzgFjPr6pUdBjzonOvnpX/inBsKJAF3mFmCc+4+4Kh3vOsrfNYPgEHAQGAM8KSZtfW2DQZ+BfQDugHnHqO+u4GFwMRqtjPFOTcCWAC8BIwHhgOPBJQZBvwGOBPoDvzA6/T8DhjjnBsCLAN+HbBPvnNupHNuRjXrIyIiIqduITDcOTcYmAHc4+X/AZjn/c5+D+hUR/UTkdMg7MRFRKSRuRgYYGbjvXQ80BMoBJY453YElL3DzK723nf0yh06zrFHAtOdcyXAfjP7Al+QJNs7diqAma3CN7Vl4TGO8xgwE5hVjXbN9L6uBeKcczlAjpnlm1kzb9sS59x2rw7Tvfrm4wuqfOUNCokAvgk47hvVqIOIiIjUjg7AG94/QiKAsv7JSOBqAOfcbDPLrKP6ichpoACGiFRkwO3OuTnlMs1GAbkV0mOAEc65PDObD0SdxLGPpSDgfQnHuT8555K9IMePArKLKT+qrGJdyo5fWuGzSgM+y1X8KK/OnzrnrjtGdXKPkS8iIiKnz7PAX51zM70+yWQv/3h9DRGp5zSFRERygCYB6TnAz80sHMDMeplZbBX7xQOZXvCiD77pGGWKyvav4EvgWm+djUTgfGDJKdb7UeDugPQuoJ+ZRZpZPDD6FI45zMy6emtfXItvBMgi4Fwz6wFgZjFm1usU6ywiIiK1Ix7Y472/MSB/Id4/OMzsYqD5d1wvETmNFMAQkTVAsZmtNrO7gKnABmCFma0D/kXVoyFmA2Fmtgb4I74/9MtMAdaULeIZ4D3v81YD84B7nHP7TqXSzrn1wIqAdArwpnf814GVp3DYb/AtaroO31DU95xzB4CbgOleWxcBfU6lziIiInJKYswsNeD1a3wjLt4yswXAwYCyDwMXm9kK4FJgL75/1ohIA2DOVRwxLSIiIiIiUv+YWSRQ4pwrNrMRwD+cc4Pqul4iUju0BoaIiIiIiDQUnYA3vemghcAtdVwfEalFGoEhIiIiIiIiIkFPa2CIiIiIiIiISNBTAENEREREREREgp4CGCIiIiIiIiIS9BTAEBEREREREZGgpwCGiIiIiIiIiAS9/w9eLdE4Gw98cgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "elbo_plot = plt.figure(figsize=(15, 5))\n", + "\n", + "elbo_ax = elbo_plot.add_subplot(1, 2, 1)\n", + "elbo_ax.set_title(\"ELBO Value vs. Iteration Number for Pyro BBVI on Sunspot Data\")\n", + "elbo_ax.set_ylabel(\"ELBO\")\n", + "elbo_ax.set_xlabel(\"Iteration Number\")\n", + "elbo_ax.plot(np.arange(n_iter), losses)\n", + "\n", + "autocorr_ax = elbo_plot.add_subplot(1, 2, 2)\n", + "autocorr_ax.acorr(np.asarray(losses), detrend=lambda x: x - x.mean(), maxlags=750, usevlines=False, marker=',')\n", + "autocorr_ax.set_xlim(0, 500)\n", + "autocorr_ax.axhline(0, ls=\"--\", c=\"k\", lw=1)\n", + "autocorr_ax.set_title(\"Autocorrelation of ELBO vs. Lag for Pyro BBVI on Sunspot Data\")\n", + "autocorr_ax.set_xlabel(\"Lag\")\n", + "autocorr_ax.set_ylabel(\"Autocorrelation\")\n", + "elbo_plot.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "_sn3OS8tOoko" + }, + "source": [ + "## **Criticism**\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "qvRAgapHZLPA" + }, + "source": [ + "### Long-Term Sunspot Model\n", + "\n", + "Since we computed the approximate posterior of the DPMM that was fit to the long-term sunspot data, we can utilize some intrinsic metrics, such as the log predictive, posterior dispersion indices, and posterior predictive checks. \n", + "\n", + "Since the posterior predictive distribution for a Dirichlet process mixture model is itself a scale-mixture distribution that has an analytic approximation [(Blei and Jordan, 2004)](http://www.cs.columbia.edu/~blei/papers/BleiJordan2004.pdf), this makes it particularly amenable to the aforementioned metrics:\n", + "\n", + "$$p(x_{new} | X_{1:N}, \\alpha, G_0) \\approx \\sum_{t=1}^T \\mathbb{E}_q [\\pi_t(\\beta)] \\ \\mathbb{E}_q \\left[p(x_{new} | \\theta_t)\\right].$$\n", + "\n", + "In particular, to compute the log predictive, we first compute the posterior predictive distribution (defined above) after performing variational inference on our model using a training subsample of our data. The log predictive is then the log value of the predictive density evaluated at each point in the test subsample:\n", + "\n", + "$$\\log p(x_{new} | X) = \\log \\mathbb{E}_{\\beta, \\theta | X} \\left[ p(x_{new} | \\beta, \\theta) \\right]$$\n", + "\n", + "Since both the training samples and the testing samples were taken from the same dataset, we would expect the model to assign high probability to the test samples, despite not having seen them during inference. This gives a metric by which to select values of $T$, $\\alpha$, and $G_0$, our hyperparameters: we would want to choose the values that maximize this value.\n", + "\n", + "We perform this process below with varying values of $\\alpha$ to see what the optimal setting is." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 526 + }, + "colab_type": "code", + "id": "3V2-DC9nobPi", + "outputId": "473035e6-036f-4e34-9ea4-6c2dc5a4bec0" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 500/500 [00:03<00:00, 157.68it/s]\n", + "100%|██████████| 500/500 [00:03<00:00, 165.35it/s]\n", + "100%|██████████| 500/500 [00:03<00:00, 156.21it/s]\n", + "100%|██████████| 500/500 [00:03<00:00, 165.50it/s]\n", + "100%|██████████| 500/500 [00:02<00:00, 172.95it/s]\n", + "100%|██████████| 500/500 [00:02<00:00, 169.13it/s]\n", + "100%|██████████| 500/500 [00:02<00:00, 169.17it/s]\n", + "100%|██████████| 500/500 [00:02<00:00, 169.48it/s]\n", + "100%|██████████| 500/500 [00:02<00:00, 173.85it/s]\n", + "100%|██████████| 500/500 [00:02<00:00, 171.00it/s]\n", + "100%|██████████| 500/500 [00:03<00:00, 161.77it/s]\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Hold out 10% of our original data to test upon\n", + "df_test = df.sample(frac=0.1)\n", + "data = torch.tensor(df.drop(df_test.index)['sunspot.year'].values, dtype=torch.float).round()\n", + "data_test = torch.tensor(df_test['sunspot.year'].values, dtype=torch.float).round()\n", + "N = data.shape[0]\n", + "N_test = data_test.shape[0]\n", + "\n", + "alphas = [0.05, 0.1, 0.5, 0.75, 0.9, 1., 1.25, 1.5, 2, 2.5, 3]\n", + "log_predictives = []\n", + "\n", + "for val in alphas:\n", + " alpha = val\n", + " T = 20\n", + " svi = SVI(model, guide, optim, loss=Trace_ELBO())\n", + " train(500)\n", + " \n", + " S = 100 # number of Monte Carlo samples to use in posterior predictive computations\n", + "\n", + " # Using pyro's built in posterior predictive class:\n", + " posterior = Predictive(guide, num_samples=S, return_sites=[\"beta\", \"lambda\"])(data)\n", + " post_pred_weights = mix_weights(posterior[\"beta\"])\n", + " post_pred_clusters = posterior[\"lambda\"]\n", + "\n", + " # log_prob shape = N_test x S\n", + " log_prob = (post_pred_weights.log() + Poisson(post_pred_clusters).log_prob(data.reshape(-1, 1, 1))).logsumexp(-1)\n", + " mean_log_prob = log_prob.logsumexp(-1) - np.log(S)\n", + " log_posterior_predictive = mean_log_prob.sum(-1)\n", + " log_predictives.append(log_posterior_predictive)\n", + "\n", + "plt.figure(figsize=(10, 5))\n", + "plt.plot(alphas, log_predictives)\n", + "plt.title(\"Value of the Log Predictive at Varying Alpha\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "PGw4eD363PWP" + }, + "source": [ + "From the above plot, we would surmise that we want to set $\\alpha > 1$, though the signal is not quite clear. A more comprehensive model criticism process would involve performing a grid search across all hyperparameters in order to find the one that maximizes the log predictive.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "8A1gt4sn8Upo" + }, + "source": [ + "## References\n", + "\n", + "\n", + "\n", + "1. Ferguson, Thomas. *A Bayesian Analysis of Some Nonparametric Problems*. The Annals of Statistics, Vol. 1, No. 2 (1973). \n", + "2. Aldous, D. *Exchangeability and Related Topics*. Ecole diete de Probabilities Saint Flour (1985).\n", + "3. Sethuraman, J. *A Constructive Definition of Dirichlet Priors*. Statistica, Sinica, 4:639-650 (1994).\n", + "4. Blei, David and Jordan, Michael. *Variational Inference for Dirichlet Process Mixtures*. Bayesian Analysis, Vol. 1, No. 1 (2004).\n", + "5. Pedregosa, et al. *Scikit-Learn: Machine Learning in Python*. JMLR 12, pp. 2825-2830 (2011).\n", + "6. Bishop, Christopher. *Pattern Recogition and Machine Learning*. Springer Ltd (2006).\n", + "7. *Sunspot Index and Long-Term Solar Observations*. WDC-SILSO, Royal Observatory of Belgium, Brussels (2018).\n", + "9. Gelman, Andrew. *Understanding predictive information criteria for Bayesian models*. Statistics and Computing, Springer Link, 2014.\n", + "\n", + "\n", + "\n" + ] + } + ], + "metadata": { + "accelerator": "TPU", + "colab": { + "collapsed_sections": [], + "name": "Pyro Dirichlet Process Mixture Model", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.10" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/pyro/source/tutorial/source/dkl.rst b/pyro/source/tutorial/source/dkl.rst new file mode 100644 index 0000000000000000000000000000000000000000..9272608fe8932890b09bcfeca8ec90e7f5a23d03 --- /dev/null +++ b/pyro/source/tutorial/source/dkl.rst @@ -0,0 +1,11 @@ +Example: Deep Kernel Learning +============================= + +`View sv-dkl.py on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/examples/contrib/gp/sv-dkl.py + +__ github_ + +.. literalinclude:: ../../examples/contrib/gp/sv-dkl.py + :language: python diff --git a/pyro/source/tutorial/source/dmm.ipynb b/pyro/source/tutorial/source/dmm.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..1824a1a28d748a76f0835b18de7558897f17c667 --- /dev/null +++ b/pyro/source/tutorial/source/dmm.ipynb @@ -0,0 +1,871 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Deep Markov Model \n", + "\n", + "## Introduction\n", + "\n", + "We're going to build a deep probabilistic model for sequential data: the deep markov model. The particular dataset we want to model is composed of snippets of polyphonic music. Each time slice in a sequence spans a quarter note and is represented by an 88-dimensional binary vector that encodes the notes at that time step. \n", + "\n", + "Since music is (obviously) temporally coherent, we need a model that can represent complex time dependencies in the observed data. It would not, for example, be appropriate to consider a model in which the notes at a particular time step are independent of the notes at previous time steps. One way to do this is to build a latent variable model in which the variability and temporal structure of the observations is controlled by the dynamics of the latent variables. \n", + "\n", + "One particular realization of this idea is a markov model, in which we have a chain of latent variables, with each latent variable in the chain conditioned on the previous latent variable. This is a powerful approach, but if we want to represent complex data with complex (and in this case unknown) dynamics, we would like our model to be sufficiently flexible to accommodate dynamics that are potentially highly non-linear. Thus a deep markov model: we allow for the transition probabilities governing the dynamics of the latent variables as well as the the emission probabilities that govern how the observations are generated by the latent dynamics to be parameterized by (non-linear) neural networks.\n", + "\n", + "The specific model we're going to implement is based on the following reference:\n", + "\n", + "[1] `Structured Inference Networks for Nonlinear State Space Models`,
    \n", + " Rahul G. Krishnan, Uri Shalit, David Sontag\n", + " \n", + "Please note that while we do not assume that the reader of this tutorial has read the reference, it's definitely a good place to look for a more comprehensive discussion of the deep markov model in the context of other time series models.\n", + "\n", + "We've described the model, but how do we go about training it? The inference strategy we're going to use is variational inference, which requires specifying a parameterized family of distributions that can be used to approximate the posterior distribution over the latent random variables. Given the non-linearities and complex time-dependencies inherent in our model and data, we expect the exact posterior to be highly non-trivial. So we're going to need a flexible family of variational distributions if we hope to learn a good model. Happily, together PyTorch and Pyro provide all the necessary ingredients. As we will see, assembling them will be straightforward. Let's get to work." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The Model\n", + " \n", + "A convenient way to describe the high-level structure of the model is with a graphical model." + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/html" + }, + "source": [ + "
Figure 1: The model rolled out for T=3 time steps.
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, we've rolled out the model assuming that the sequence of observations is of length three: $\\{{\\bf x}_1, {\\bf x}_2, {\\bf x}_3\\}$. Mirroring the sequence of observations we also have a sequence of latent random variables: $\\{{\\bf z}_1, {\\bf z}_2, {\\bf z}_3\\}$. The figure encodes the structure of the model. The corresponding joint distribution is\n", + "\n", + "$$p({\\bf x}_{123} , {\\bf z}_{123})=p({\\bf x}_1|{\\bf z}_1)p({\\bf x}_2|{\\bf z}_2)p({\\bf x}_3|{\\bf z}_3)p({\\bf z}_1)p({\\bf z}_2|{\\bf z}_1)p({\\bf z}_3|{\\bf z}_2)$$\n", + "\n", + "Conditioned on ${\\bf z}_t$, each observation ${\\bf x}_t$ is independent of the other observations. This can be read off from the fact that each ${\\bf x}_t$ only depends on the corresponding latent ${\\bf z}_t$, as indicated by the downward pointing arrows. We can also read off the markov property of the model: each latent ${\\bf z}_t$, when conditioned on the previous latent ${\\bf z}_{t-1}$, is independent of all previous latents $\\{ {\\bf z}_{t-2}, {\\bf z}_{t-3}, ...\\}$. This effectively says that everything one needs to know about the state of the system at time $t$ is encapsulated by the latent ${\\bf z}_{t}$.\n", + "\n", + "We will assume that the observation likelihoods, i.e. the probability distributions $p({{\\bf x}_t}|{{\\bf z}_t})$ that control the observations, are given by the bernoulli distribution. This is an appropriate choice since our observations are all 0 or 1. For the probability distributions $p({\\bf z}_t|{\\bf z}_{t-1})$ that control the latent dynamics, we choose (conditional) gaussian distributions with diagonal covariances. This is reasonable since we assume that the latent space is continuous. \n", + " \n", + "\n", + " \n", + "The solid black squares represent non-linear functions parameterized by neural networks. This is what makes this a _deep_ markov model. Note that the black squares appear in two different places: in between pairs of latents and in between latents and observations. The non-linear function that connects the latent variables ('Trans' in Fig. 1) controls the dynamics of the latent variables. Since we allow the conditional probability distribution of ${\\bf z}_{t}$ to depend on ${\\bf z}_{t-1}$ in a complex way, we will be able to capture complex dynamics in our model. Similarly, the non-linear function that connects the latent variables to the observations ('Emit' in Fig. 1) controls how the observations depend on the latent dynamics. \n", + "\n", + "Some additional notes:\n", + "- we can freely choose the dimension of the latent space to suit the problem at hand: small latent spaces for simple problems and larger latent spaces for problems with complex dynamics\n", + "- note the parameter ${\\bf z}_0$ in Fig. 1. as will become more apparent from the code, this is just a convenient way for us to parameterize the probability distribution $p({\\bf z}_1)$ for the first time step, where there are no previous latents to condition on.\n", + "\n", + "### The Gated Transition and the Emitter\n", + "\n", + "Without further ado, let's start writing some code. We first define the two PyTorch Modules that correspond to the black squares in Fig. 1. First the emission function:\n", + "\n", + "```python\n", + "class Emitter(nn.Module):\n", + " \"\"\"\n", + " Parameterizes the bernoulli observation likelihood p(x_t | z_t)\n", + " \"\"\"\n", + " def __init__(self, input_dim, z_dim, emission_dim):\n", + " super().__init__()\n", + " # initialize the three linear transformations used in the neural network\n", + " self.lin_z_to_hidden = nn.Linear(z_dim, emission_dim)\n", + " self.lin_hidden_to_hidden = nn.Linear(emission_dim, emission_dim)\n", + " self.lin_hidden_to_input = nn.Linear(emission_dim, input_dim)\n", + " # initialize the two non-linearities used in the neural network\n", + " self.relu = nn.ReLU()\n", + " self.sigmoid = nn.Sigmoid()\n", + "\n", + " def forward(self, z_t):\n", + " \"\"\"\n", + " Given the latent z at a particular time step t we return the vector of \n", + " probabilities `ps` that parameterizes the bernoulli distribution p(x_t|z_t)\n", + " \"\"\"\n", + " h1 = self.relu(self.lin_z_to_hidden(z_t))\n", + " h2 = self.relu(self.lin_hidden_to_hidden(h1))\n", + " ps = self.sigmoid(self.lin_hidden_to_input(h2))\n", + " return ps\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the constructor we define the linear transformations that will be used in our emission function. Note that `emission_dim` is the number of hidden units in the neural network. We also define the non-linearities that we will be using. The forward call defines the computational flow of the function. We take in the latent ${\\bf z}_{t}$ as input and do a sequence of transformations until we obtain a vector of length 88 that defines the emission probabilities of our bernoulli likelihood. Because of the sigmoid, each element of `ps` will be between 0 and 1 and will define a valid probability. Taken together the elements of `ps` encode which notes we expect to observe at time $t$ given the state of the system (as encoded in ${\\bf z}_{t}$)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we define the gated transition function:\n", + "\n", + "```python\n", + "class GatedTransition(nn.Module):\n", + " \"\"\"\n", + " Parameterizes the gaussian latent transition probability p(z_t | z_{t-1})\n", + " See section 5 in the reference for comparison.\n", + " \"\"\"\n", + " def __init__(self, z_dim, transition_dim):\n", + " super().__init__()\n", + " # initialize the six linear transformations used in the neural network\n", + " self.lin_gate_z_to_hidden = nn.Linear(z_dim, transition_dim)\n", + " self.lin_gate_hidden_to_z = nn.Linear(transition_dim, z_dim)\n", + " self.lin_proposed_mean_z_to_hidden = nn.Linear(z_dim, transition_dim)\n", + " self.lin_proposed_mean_hidden_to_z = nn.Linear(transition_dim, z_dim)\n", + " self.lin_sig = nn.Linear(z_dim, z_dim)\n", + " self.lin_z_to_loc = nn.Linear(z_dim, z_dim)\n", + " # modify the default initialization of lin_z_to_loc\n", + " # so that it's starts out as the identity function\n", + " self.lin_z_to_loc.weight.data = torch.eye(z_dim)\n", + " self.lin_z_to_loc.bias.data = torch.zeros(z_dim)\n", + " # initialize the three non-linearities used in the neural network\n", + " self.relu = nn.ReLU()\n", + " self.sigmoid = nn.Sigmoid()\n", + " self.softplus = nn.Softplus()\n", + "\n", + " def forward(self, z_t_1):\n", + " \"\"\"\n", + " Given the latent z_{t-1} corresponding to the time step t-1\n", + " we return the mean and scale vectors that parameterize the\n", + " (diagonal) gaussian distribution p(z_t | z_{t-1})\n", + " \"\"\"\n", + " # compute the gating function\n", + " _gate = self.relu(self.lin_gate_z_to_hidden(z_t_1))\n", + " gate = self.sigmoid(self.lin_gate_hidden_to_z(_gate))\n", + " # compute the 'proposed mean'\n", + " _proposed_mean = self.relu(self.lin_proposed_mean_z_to_hidden(z_t_1))\n", + " proposed_mean = self.lin_proposed_mean_hidden_to_z(_proposed_mean)\n", + " # assemble the actual mean used to sample z_t, which mixes \n", + " # a linear transformation of z_{t-1} with the proposed mean \n", + " # modulated by the gating function\n", + " loc = (1 - gate) * self.lin_z_to_loc(z_t_1) + gate * proposed_mean\n", + " # compute the scale used to sample z_t, using the proposed \n", + " # mean from above as input. the softplus ensures that scale is positive\n", + " scale = self.softplus(self.lin_sig(self.relu(proposed_mean)))\n", + " # return loc, scale which can be fed into Normal\n", + " return loc, scale\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This mirrors the structure of `Emitter` above, with the difference that the computational flow is a bit more complicated. This is for two reasons. First, the output of `GatedTransition` needs to define a valid (diagonal) gaussian distribution. So we need to output two parameters: the mean `loc`, and the (square root) covariance `scale`. These both need to have the same dimension as the latent space. Second, we don't want to _force_ the dynamics to be non-linear. Thus our mean `loc` is a sum of two terms, only one of which depends non-linearily on the input `z_t_1`. This way we can support both linear and non-linear dynamics (or indeed have the dynamics of part of the latent space be linear, while the remainder of the dynamics is non-linear). " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Model - a Pyro Stochastic Function\n", + "\n", + "So far everything we've done is pure PyTorch. To finish translating our model into code we need to bring Pyro into the picture. Basically we need to implement the stochastic nodes (i.e. the circles) in Fig. 1. To do this we introduce a callable `model()` that contains the Pyro primitive `pyro.sample`. The `sample` statements will be used to specify the joint distribution over the latents ${\\bf z}_{1:T}$. Additionally, the `obs` argument can be used with the `sample` statements to specify how the observations ${\\bf x}_{1:T}$ depend on the latents. Before we look at the complete code for `model()`, let's look at a stripped down version that contains the main logic:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```python\n", + "def model(...):\n", + " z_prev = self.z_0\n", + "\n", + " # sample the latents z and observed x's one time step at a time\n", + " for t in range(1, T_max + 1): \n", + " # the next two lines of code sample z_t ~ p(z_t | z_{t-1}).\n", + " # first compute the parameters of the diagonal gaussian \n", + " # distribution p(z_t | z_{t-1})\n", + " z_loc, z_scale = self.trans(z_prev)\n", + " # then sample z_t according to dist.Normal(z_loc, z_scale)\n", + " z_t = pyro.sample(\"z_%d\" % t, dist.Normal(z_loc, z_scale))\n", + " \n", + " # compute the probabilities that parameterize the bernoulli likelihood\n", + " emission_probs_t = self.emitter(z_t)\n", + " # the next statement instructs pyro to observe x_t according to the\n", + " # bernoulli distribution p(x_t|z_t) \n", + " pyro.sample(\"obs_x_%d\" % t, \n", + " dist.Bernoulli(emission_probs_t),\n", + " obs=mini_batch[:, t - 1, :])\n", + " # the latent sampled at this time step will be conditioned upon \n", + " # in the next time step so keep track of it\n", + " z_prev = z_t \n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The first thing we need to do is sample ${\\bf z}_1$. Once we've sampled ${\\bf z}_1$, we can sample ${\\bf z}_2 \\sim p({\\bf z}_2|{\\bf z}_1)$ and so on. This is the logic implemented in the `for` loop. The parameters `z_loc` and `z_scale` that define the probability distributions $p({\\bf z}_t|{\\bf z}_{t-1})$ are computed using `self.trans`, which is just an instance of the `GatedTransition` module defined above. For the first time step at $t=1$ we condition on `self.z_0`, which is a (trainable) `Parameter`, while for subsequent time steps we condition on the previously drawn latent. Note that each random variable `z_t` is assigned a unique name by the user.\n", + "\n", + "Once we've sampled ${\\bf z}_t$ at a given time step, we need to observe the datapoint ${\\bf x}_t$. So we pass `z_t` through `self.emitter`, an instance of the `Emitter` module defined above to obtain `emission_probs_t`. Together with the argument `dist.Bernoulli()` in the `sample` statement, these probabilities fully specify the observation likelihood. Finally, we also specify the slice of observed data ${\\bf x}_t$: `mini_batch[:, t - 1, :]` using the `obs` argument to `sample`. \n", + "\n", + "This fully specifies our model and encapsulates it in a callable that can be passed to Pyro. Before we move on let's look at the full version of `model()` and go through some of the details we glossed over in our first pass." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```python\n", + "def model(self, mini_batch, mini_batch_reversed, mini_batch_mask,\n", + "\t\t mini_batch_seq_lengths, annealing_factor=1.0):\n", + "\n", + "\t# this is the number of time steps we need to process in the mini-batch\n", + "\tT_max = mini_batch.size(1)\n", + "\n", + "\t# register all PyTorch (sub)modules with pyro\n", + "\t# this needs to happen in both the model and guide\n", + "\tpyro.module(\"dmm\", self)\n", + "\n", + "\t# set z_prev = z_0 to setup the recursive conditioning in p(z_t | z_{t-1})\n", + "\tz_prev = self.z_0.expand(mini_batch.size(0), self.z_0.size(0))\n", + "\n", + "\t# we enclose all the sample statements in the model in a plate.\n", + "\t# this marks that each datapoint is conditionally independent of the others\n", + "\twith pyro.plate(\"z_minibatch\", len(mini_batch)):\n", + "\t\t# sample the latents z and observed x's one time step at a time\n", + "\t\tfor t in range(1, T_max + 1):\n", + "\t\t\t# the next chunk of code samples z_t ~ p(z_t | z_{t-1})\n", + "\t\t\t# note that (both here and elsewhere) we use poutine.scale to take care\n", + "\t\t\t# of KL annealing. we use the mask() method to deal with raggedness\n", + "\t\t\t# in the observed data (i.e. different sequences in the mini-batch\n", + "\t\t\t# have different lengths)\n", + "\n", + "\t\t\t# first compute the parameters of the diagonal gaussian \n", + " # distribution p(z_t | z_{t-1})\n", + "\t\t\tz_loc, z_scale = self.trans(z_prev)\n", + "\n", + "\t\t\t# then sample z_t according to dist.Normal(z_loc, z_scale).\n", + "\t\t\t# note that we use the reshape method so that the univariate \n", + " # Normal distribution is treated as a multivariate Normal \n", + " # distribution with a diagonal covariance.\n", + "\t\t\twith poutine.scale(None, annealing_factor):\n", + "\t\t\t\tz_t = pyro.sample(\"z_%d\" % t,\n", + "\t\t\t\t\t\t\t\t dist.Normal(z_loc, z_scale)\n", + "\t\t\t\t\t\t\t\t\t .mask(mini_batch_mask[:, t - 1:t])\n", + "\t\t\t\t\t\t\t\t\t .to_event(1))\n", + "\n", + "\t\t\t# compute the probabilities that parameterize the bernoulli likelihood\n", + "\t\t\temission_probs_t = self.emitter(z_t)\n", + "\t\t\t# the next statement instructs pyro to observe x_t according to the\n", + "\t\t\t# bernoulli distribution p(x_t|z_t)\n", + "\t\t\tpyro.sample(\"obs_x_%d\" % t,\n", + "\t\t\t\t\t\tdist.Bernoulli(emission_probs_t)\n", + "\t\t\t\t\t\t\t.mask(mini_batch_mask[:, t - 1:t])\n", + "\t\t\t\t\t\t\t.to_event(1),\n", + "\t\t\t\t\t\tobs=mini_batch[:, t - 1, :])\n", + "\t\t\t# the latent sampled at this time step will be conditioned upon\n", + "\t\t\t# in the next time step so keep track of it\n", + "\t\t\tz_prev = z_t\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The first thing to note is that `model()` takes a number of arguments. For now let's just take a look at `mini_batch` and `mini_batch_mask`. `mini_batch` is a three dimensional tensor, with the first dimension being the batch dimension, the second dimension being the temporal dimension, and the final dimension being the features (88-dimensional in our case). To speed up the code, whenever we run `model` we're going to process an entire mini-batch of sequences (i.e. we're going to take advantage of vectorization). \n", + "\n", + "This is sensible because our model is implicitly defined over a single observed sequence. The probability of a set of sequences is just given by the products of the individual sequence probabilities. In other words, given the parameters of the model the sequences are conditionally independent.\n", + "\n", + "This vectorization introduces some complications because sequences can be of different lengths. This is where `mini_batch_mask` comes in. `mini_batch_mask` is a two dimensional 0/1 mask of dimensions `mini_batch_size` x `T_max`, where `T_max` is the maximum length of any sequence in the mini-batch. This encodes which parts of `mini_batch` are valid observations. \n", + "\n", + "So the first thing we do is grab `T_max`: we have to unroll our model for at least this many time steps. Note that this will result in a lot of 'wasted' computation, since some of the sequences will be shorter than `T_max`, but this is a small price to pay for the big speed-ups that come with vectorization. We just need to make sure that none of the 'wasted' computations 'pollute' our model computation. We accomplish this by passing the mask appropriate to time step $t$ to the `mask` method (which acts on the distribution that needs masking).\n", + "\n", + "Finally, the line `pyro.module(\"dmm\", self)` is equivalent to a bunch of `pyro.param` statements for each parameter in the model. This lets Pyro know which parameters are part of the model. Just like for the `sample` statement, we give the module a unique name. This name will be incorporated into the name of the `Parameters` in the model. We leave a discussion of the KL annealing factor for later." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Inference\n", + "\n", + "At this point we've fully specified our model. The next step is to set ourselves up for inference. As mentioned in the introduction, our inference strategy is going to be variational inference (see [SVI Part I](svi_part_i.ipynb) for an introduction). So our next task is to build a family of variational distributions appropriate to doing inference in a deep markov model. However, at this point it's worth emphasizing that nothing about the way we've implemented `model()` ties us to variational inference. In principle we could use _any_ inference strategy available in Pyro. For example, in this particular context one could imagine using some variant of Sequential Monte Carlo (although this is not currently supported in Pyro).\n", + "\n", + "### Guide\n", + "\n", + "The purpose of the guide (i.e. the variational distribution) is to provide a (parameterized) approximation to the exact posterior $p({\\bf z}_{1:T}|{\\bf x}_{1:T})$. Actually, there's an implicit assumption here which we should make explicit, so let's take a step back. \n", + "Suppose our dataset $\\mathcal{D}$ consists of $N$ sequences \n", + "$\\{ {\\bf x}_{1:T_1}^1, {\\bf x}_{1:T_2}^2, ..., {\\bf x}_{1:T_N}^N \\}$. Then the posterior we're actually interested in is given by \n", + "$p({\\bf z}_{1:T_1}^1, {\\bf z}_{1:T_2}^2, ..., {\\bf z}_{1:T_N}^N | \\mathcal{D})$, i.e. we want to infer the latents for _all_ $N$ sequences. Even for small $N$ this is a very high-dimensional distribution that will require a very large number of parameters to specify. In particular if we were to directly parameterize the posterior in this form, the number of parameters required would grow (at least) linearly with $N$. One way to avoid this nasty growth with the size of the dataset is *amortization* (see the analogous discussion in [SVI Part II](svi_part_ii.ipynb)).\n", + "\n", + "#### Aside: Amortization\n", + "\n", + "This works as follows. Instead of introducing variational parameters for each sequence in our dataset, we're going to learn a single parametric function $f({\\bf x}_{1:T})$ and work with a variational distribution that has the form $\\prod_{n=1}^N q({\\bf z}_{1:T_n}^n | f({\\bf x}_{1:T_n}^n))$. The function $f(\\cdot)$—which basically maps a given observed sequence to a set of variational parameters tailored to that sequence—will need to be sufficiently rich to capture the posterior accurately, but now we can handle large datasets without having to introduce an obscene number of variational parameters.\n", + "\n", + "So our task is to construct the function $f(\\cdot)$. Since in our case we need to support variable-length sequences, it's only natural that $f(\\cdot)$ have a RNN in the loop. Before we look at the various component parts that make up our $f(\\cdot)$ in detail, let's look at a computational graph that encodes the basic structure:

" + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/html" + }, + "source": [ + "

Figure 2: The guide rolled out for T=3 time steps.
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "At the bottom of the figure we have our sequence of three observations. These observations will be consumed by a RNN that reads the observations from right to left and outputs three hidden states $\\{ {\\bf h}_1, {\\bf h}_2,{\\bf h}_3\\}$. Note that this computation is done _before_ we sample any latent variables. Next, each of the hidden states will be fed into a `Combiner` module whose job is to output the mean and covariance of the the conditional distribution $q({\\bf z}_t | {\\bf z}_{t-1}, {\\bf x}_{t:T})$, which we take to be given by a diagonal gaussian distribution. (Just like in the model, the conditional structure of ${\\bf z}_{1:T}$ in the guide is such that we sample ${\\bf z}_t$ forward in time.) In addition to the RNN hidden state, the `Combiner` also takes the latent random variable from the previous time step as input, except for $t=1$, where it instead takes the trainable (variational) parameter ${\\bf z}_0^{\\rm{q}}$. \n", + "\n", + "#### Aside: Guide Structure\n", + "Why do we setup the RNN to consume the observations from right to left? Why not left to right? With this choice our conditional distribution $q({\\bf z}_t |...)$ depends on two things:\n", + "\n", + "- the latent ${\\bf z}_{t-1}$ from the previous time step; and \n", + "- the observations ${\\bf x}_{t:T}$, i.e. the current observation together with all future observations\n", + "\n", + "We are free to make other choices; all that is required is that that the guide is a properly normalized distribution that plays nice with autograd. This particular choice is motivated by the dependency structure of the true posterior: see reference [1] for a detailed discussion. In brief, while we could, for example, condition on the entire sequence of observations, because of the markov structure of the model everything that we need to know about the previous observations ${\\bf x}_{1:t-1}$ is encapsulated by ${\\bf z}_{t-1}$. We could condition on more things, but there's no need; and doing so will probably tend to dilute the learning signal. So running the RNN from right to left is the most natural choice for this particular model.\n", + "\n", + "Let's look at the component parts in detail. First, the `Combiner` module:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```python\n", + "class Combiner(nn.Module):\n", + " \"\"\"\n", + " Parameterizes q(z_t | z_{t-1}, x_{t:T}), which is the basic building block\n", + " of the guide (i.e. the variational distribution). The dependence on x_{t:T} is\n", + " through the hidden state of the RNN (see the pytorch module `rnn` below)\n", + " \"\"\"\n", + " def __init__(self, z_dim, rnn_dim):\n", + " super().__init__()\n", + " # initialize the three linear transformations used in the neural network\n", + " self.lin_z_to_hidden = nn.Linear(z_dim, rnn_dim)\n", + " self.lin_hidden_to_loc = nn.Linear(rnn_dim, z_dim)\n", + " self.lin_hidden_to_scale = nn.Linear(rnn_dim, z_dim)\n", + " # initialize the two non-linearities used in the neural network\n", + " self.tanh = nn.Tanh()\n", + " self.softplus = nn.Softplus()\n", + "\n", + " def forward(self, z_t_1, h_rnn):\n", + " \"\"\"\n", + " Given the latent z at at a particular time step t-1 as well as the hidden\n", + " state of the RNN h(x_{t:T}) we return the mean and scale vectors that\n", + " parameterize the (diagonal) gaussian distribution q(z_t | z_{t-1}, x_{t:T})\n", + " \"\"\"\n", + " # combine the rnn hidden state with a transformed version of z_t_1\n", + " h_combined = 0.5 * (self.tanh(self.lin_z_to_hidden(z_t_1)) + h_rnn)\n", + " # use the combined hidden state to compute the mean used to sample z_t\n", + " loc = self.lin_hidden_to_loc(h_combined)\n", + " # use the combined hidden state to compute the scale used to sample z_t\n", + " scale = self.softplus(self.lin_hidden_to_scale(h_combined))\n", + " # return loc, scale which can be fed into Normal\n", + " return loc, scale\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This module has the same general structure as `Emitter` and `GatedTransition` in the model. The only thing of note is that because the `Combiner` needs to consume two inputs at each time step, it transforms the inputs into a single combined hidden state `h_combined` before it computes the outputs. \n", + "\n", + "Apart from the RNN, we now have all the ingredients we need to construct our guide distribution.\n", + "Happily, PyTorch has great built-in RNN modules, so we don't have much work to do here. We'll see where we instantiate the RNN later. Let's instead jump right into the definition of the stochastic function `guide()`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```python\n", + "def guide(self, mini_batch, mini_batch_reversed, mini_batch_mask,\n", + " mini_batch_seq_lengths, annealing_factor=1.0):\n", + "\n", + " # this is the number of time steps we need to process in the mini-batch\n", + " T_max = mini_batch.size(1)\n", + " # register all PyTorch (sub)modules with pyro\n", + " pyro.module(\"dmm\", self)\n", + "\n", + " # if on gpu we need the fully broadcast view of the rnn initial state\n", + " # to be in contiguous gpu memory\n", + " h_0_contig = self.h_0.expand(1, mini_batch.size(0), \n", + " self.rnn.hidden_size).contiguous()\n", + " # push the observed x's through the rnn;\n", + " # rnn_output contains the hidden state at each time step\n", + " rnn_output, _ = self.rnn(mini_batch_reversed, h_0_contig)\n", + " # reverse the time-ordering in the hidden state and un-pack it\n", + " rnn_output = poly.pad_and_reverse(rnn_output, mini_batch_seq_lengths)\n", + " # set z_prev = z_q_0 to setup the recursive conditioning in q(z_t |...)\n", + " z_prev = self.z_q_0.expand(mini_batch.size(0), self.z_q_0.size(0))\n", + "\n", + " # we enclose all the sample statements in the guide in a plate.\n", + " # this marks that each datapoint is conditionally independent of the others.\n", + " with pyro.plate(\"z_minibatch\", len(mini_batch)):\n", + " # sample the latents z one time step at a time\n", + " for t in range(1, T_max + 1):\n", + " # the next two lines assemble the distribution q(z_t | z_{t-1}, x_{t:T})\n", + " z_loc, z_scale = self.combiner(z_prev, rnn_output[:, t - 1, :])\n", + " z_dist = dist.Normal(z_loc, z_scale)\n", + "\n", + " # sample z_t from the distribution z_dist\n", + " with pyro.poutine.scale(None, annealing_factor):\n", + " z_t = pyro.sample(\"z_%d\" % t,\n", + " z_dist.mask(mini_batch_mask[:, t - 1:t])\n", + " .to_event(1))\n", + " # the latent sampled at this time step will be conditioned \n", + " # upon in the next time step so keep track of it\n", + " z_prev = z_t\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The high-level structure of `guide()` is very similar to `model()`. First note that the model and guide take the same arguments: this is a general requirement for model/guide pairs in Pyro. As in the model, there's a call to `pyro.module` that registers all the parameters with Pyro. Also, the `for` loop has the same structure as the one in `model()`, with the difference that the guide only needs to sample latents (there are no `sample` statements with the `obs` keyword). Finally, note that the names of the latent variables in the guide exactly match those in the model. This is how Pyro knows to correctly align random variables. \n", + "\n", + "The RNN logic should be familar to PyTorch users, but let's go through it quickly. First we prepare the initial state of the RNN, `h_0`. Then we invoke the RNN via its forward call; the resulting tensor `rnn_output` contains the hidden states for the entire mini-batch. Note that because we want the RNN to consume the observations from right to left, the input to the RNN is `mini_batch_reversed`, which is a copy of `mini_batch` with all the sequences running in _reverse_ temporal order. Furthermore, `mini_batch_reversed` has been wrapped in a PyTorch `rnn.pack_padded_sequence` so that the RNN can deal with variable-length sequences. Since we do our sampling in latent space in normal temporal order, we use the helper function `pad_and_reverse` to reverse the hidden state sequences in `rnn_output`, so that we can feed the `Combiner` RNN hidden states that are correctly aligned and ordered. This helper function also unpacks the `rnn_output` so that it is no longer in the form of a PyTorch `rnn.pack_padded_sequence`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Packaging the Model and Guide as a PyTorch Module\n", + "\n", + "At this juncture, we're ready to proceed to inference. But before we do so let's quickly go over how we packaged the model and guide as a single PyTorch Module. This is generally good practice, especially for larger models." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```python\n", + "class DMM(nn.Module):\n", + " \"\"\"\n", + " This PyTorch Module encapsulates the model as well as the \n", + " variational distribution (the guide) for the Deep Markov Model\n", + " \"\"\"\n", + " def __init__(self, input_dim=88, z_dim=100, emission_dim=100, \n", + " transition_dim=200, rnn_dim=600, rnn_dropout_rate=0.0, \n", + " num_iafs=0, iaf_dim=50, use_cuda=False):\n", + " super().__init__()\n", + " # instantiate pytorch modules used in the model and guide below\n", + " self.emitter = Emitter(input_dim, z_dim, emission_dim)\n", + " self.trans = GatedTransition(z_dim, transition_dim)\n", + " self.combiner = Combiner(z_dim, rnn_dim)\n", + " self.rnn = nn.RNN(input_size=input_dim, hidden_size=rnn_dim, \n", + " nonlinearity='relu', batch_first=True, \n", + " bidirectional=False, num_layers=1, dropout=rnn_dropout_rate)\n", + "\n", + " # define a (trainable) parameters z_0 and z_q_0 that help define \n", + " # the probability distributions p(z_1) and q(z_1)\n", + " # (since for t = 1 there are no previous latents to condition on)\n", + " self.z_0 = nn.Parameter(torch.zeros(z_dim))\n", + " self.z_q_0 = nn.Parameter(torch.zeros(z_dim))\n", + " # define a (trainable) parameter for the initial hidden state of the rnn\n", + " self.h_0 = nn.Parameter(torch.zeros(1, 1, rnn_dim))\n", + "\n", + " self.use_cuda = use_cuda\n", + " # if on gpu cuda-ize all pytorch (sub)modules\n", + " if use_cuda:\n", + " self.cuda()\n", + "\n", + " # the model p(x_{1:T} | z_{1:T}) p(z_{1:T})\n", + " def model(...):\n", + "\n", + " # ... as above ...\n", + "\n", + " # the guide q(z_{1:T} | x_{1:T}) (i.e. the variational distribution)\n", + " def guide(...):\n", + " \n", + " # ... as above ...\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since we've already gone over `model` and `guide`, our focus here is on the constructor. First we instantiate the four PyTorch modules that we use in our model and guide. On the model-side: `Emitter` and `GatedTransition`. On the guide-side: `Combiner` and the RNN. \n", + "\n", + "Next we define PyTorch `Parameter`s for the initial state of the RNN as well as `z_0` and `z_q_0`, which are fed into `self.trans` and `self.combiner`, respectively, in lieu of the non-existent random variable $\\bf z_0$. \n", + "\n", + "The important point to make here is that all of these `Module`s and `Parameter`s are attributes of `DMM` (which itself inherits from `nn.Module`). This has the consequence they are all automatically registered as belonging to the module. So, for example, when we call `parameters()` on an instance of `DMM`, PyTorch will know to return all the relevant parameters. It also means that when we invoke `pyro.module(\"dmm\", self)` in `model()` and `guide()`, all the parameters of both the model and guide will be registered with Pyro. Finally, it means that if we're running on a GPU, the call to `cuda()` will move all the parameters into GPU memory.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Stochastic Variational Inference\n", + "\n", + "With our model and guide at hand, we're finally ready to do inference. Before we look at the full logic that is involved in a complete experimental script, let's first see how to take a single gradient step. First we instantiate an instance of `DMM` and setup an optimizer.\n", + "\n", + "```python\n", + "# instantiate the dmm\n", + "dmm = DMM(input_dim, z_dim, emission_dim, transition_dim, rnn_dim,\n", + " args.rnn_dropout_rate, args.num_iafs, args.iaf_dim, args.cuda)\n", + "\n", + "# setup optimizer\n", + "adam_params = {\"lr\": args.learning_rate, \"betas\": (args.beta1, args.beta2),\n", + " \"clip_norm\": args.clip_norm, \"lrd\": args.lr_decay,\n", + " \"weight_decay\": args.weight_decay}\n", + "optimizer = ClippedAdam(adam_params)\n", + "```\n", + "\n", + "Here we're using an implementation of the Adam optimizer that includes gradient clipping. This mitigates some of the problems that can occur when training recurrent neural networks (e.g. vanishing/exploding gradients). Next we setup the inference algorithm. \n", + "\n", + "```python\n", + "# setup inference algorithm\n", + "svi = SVI(dmm.model, dmm.guide, optimizer, Trace_ELBO())\n", + "```\n", + "\n", + "The inference algorithm `SVI` uses a stochastic gradient estimator to take gradient steps on an objective function, which in this case is given by the ELBO (the evidence lower bound). As the name indicates, the ELBO is a lower bound to the log evidence: $\\log p(\\mathcal{D})$. As we take gradient steps that maximize the ELBO, we move our guide $q(\\cdot)$ closer to the exact posterior. \n", + "\n", + "The argument `Trace_ELBO()` constructs a version of the gradient estimator that doesn't need access to the dependency structure of the model and guide. Since all the latent variables in our model are reparameterizable, this is the appropriate gradient estimator for our use case. (It's also the default option.)\n", + "\n", + "Assuming we've prepared the various arguments of `dmm.model` and `dmm.guide`, taking a gradient step is accomplished by calling\n", + "\n", + "```python\n", + "svi.step(mini_batch, ...)\n", + "```\n", + "\n", + "That's all there is to it!\n", + "\n", + "Well, not quite. This will be the main step in our inference algorithm, but we still need to implement a complete training loop with preparation of mini-batches, evaluation, and so on. This sort of logic will be familiar to any deep learner but let's see how it looks in PyTorch/Pyro." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The Black Magic of Optimization\n", + "\n", + "Actually, before we get to the guts of training, let's take a moment and think a bit about the optimization problem we've setup. We've traded Bayesian inference in a non-linear model with a high-dimensional latent space—a hard problem—for a particular optimization problem. Let's not kid ourselves, this optimization problem is pretty hard too. Why? Let's go through some of the reasons:\n", + "\n", + "- the space of parameters we're optimizing over is very high-dimensional (it includes all the weights in all the neural networks we've defined).\n", + "- our objective function (the ELBO) cannot be computed analytically. so our parameter updates will be following noisy Monte Carlo gradient estimates\n", + "- data-subsampling serves as an additional source of stochasticity: even if we wanted to, we couldn't in general take gradient steps on the ELBO defined over the whole dataset (actually in our particular case the dataset isn't so large, but let's ignore that).\n", + "- given all the neural networks and non-linearities we have in the loop, our (stochastic) loss surface is highly non-trivial\n", + "\n", + "The upshot is that if we're going to find reasonable (local) optima of the ELBO, we better take some care in deciding how to do optimization. This isn't the time or place to discuss all the different strategies that one might adopt, but it's important to emphasize how decisive a good or bad choice in learning hyperparameters (the learning rate, the mini-batch size, etc.) can be. \n", + "\n", + "Before we move on, let's discuss one particular optimization strategy that we're making use of in greater detail: KL annealing. In our case the ELBO is the sum of two terms: an expected log likelihood term (which measures model fit) and a sum of KL divergence terms (which serve to regularize the approximate posterior):\n", + "\n", + "$\\rm{ELBO} = \\mathbb{E}_{q({\\bf z}_{1:T})}[\\log p({\\bf x}_{1:T}|{\\bf z}_{1:T})] - \\mathbb{E}_{q({\\bf z}_{1:T})}[ \\log q({\\bf z}_{1:T}) - \\log p({\\bf z}_{1:T})]$\n", + "\n", + "This latter term can be a quite strong regularizer, and in early stages of training it has a tendency to favor regions of the loss surface that contain lots of bad local optima. One strategy to avoid these bad local optima, which was also adopted in reference [1], is to anneal the KL divergence terms by multiplying them by a scalar `annealing_factor` that ranges between zero and one:\n", + "\n", + "$\\mathbb{E}_{q({\\bf z}_{1:T})}[\\log p({\\bf x}_{1:T}|{\\bf z}_{1:T})] - \\rm{annealing\\_factor} \\times \\mathbb{E}_{q({\\bf z}_{1:T})}[ \\log q({\\bf z}_{1:T}) - \\log p({\\bf z}_{1:T})]$\n", + "\n", + "The idea is that during the course of training the `annealing_factor` rises slowly from its initial value at/near zero to its final value at 1.0. The annealing schedule is arbitrary; below we will use a simple linear schedule. In terms of code, to scale the log likelihoods by the appropriate annealing factor we enclose each of the latent sample statements in the model and guide with a `pyro.poutine.scale` context.\n", + "\n", + "Finally, we should mention that the main difference between the DMM implementation described here and the one used in reference [1] is that they take advantage of the analytic formula for the KL divergence between two gaussian distributions (whereas we rely on Monte Carlo estimates). This leads to lower variance gradient estimates of the ELBO, which makes training a bit easier. We can still train the model without making this analytic substitution, but training probably takes somewhat longer because of the higher variance. To use analytic KL divergences use [TraceMeanField_ELBO](http://docs.pyro.ai/en/stable/inference_algos.html#pyro.infer.trace_mean_field_elbo.TraceMeanField_ELBO)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Data Loading, Training, and Evaluation\n", + "\n", + "First we load the data. There are 229 sequences in the training dataset, each with an average length of ~60 time steps.\n", + "\n", + "```python\n", + "jsb_file_loc = \"./data/jsb_processed.pkl\"\n", + "data = pickle.load(open(jsb_file_loc, \"rb\"))\n", + "training_seq_lengths = data['train']['sequence_lengths']\n", + "training_data_sequences = data['train']['sequences']\n", + "test_seq_lengths = data['test']['sequence_lengths']\n", + "test_data_sequences = data['test']['sequences']\n", + "val_seq_lengths = data['valid']['sequence_lengths']\n", + "val_data_sequences = data['valid']['sequences']\n", + "N_train_data = len(training_seq_lengths)\n", + "N_train_time_slices = np.sum(training_seq_lengths)\n", + "N_mini_batches = int(N_train_data / args.mini_batch_size +\n", + " int(N_train_data % args.mini_batch_size > 0))\n", + "```\n", + "\n", + "For this dataset we will typically use a `mini_batch_size` of 20, so that there will be 12 mini-batches per epoch. Next we define the function `process_minibatch` which prepares a mini-batch for training and takes a gradient step:\n", + "\n", + "```python\n", + "def process_minibatch(epoch, which_mini_batch, shuffled_indices):\n", + " if args.annealing_epochs > 0 and epoch < args.annealing_epochs:\n", + " # compute the KL annealing factor appropriate \n", + " # for the current mini-batch in the current epoch\n", + " min_af = args.minimum_annealing_factor\n", + " annealing_factor = min_af + (1.0 - min_af) * \\ \n", + " (float(which_mini_batch + epoch * N_mini_batches + 1) /\n", + " float(args.annealing_epochs * N_mini_batches))\n", + " else:\n", + " # by default the KL annealing factor is unity\n", + " annealing_factor = 1.0 \n", + "\n", + " # compute which sequences in the training set we should grab\n", + " mini_batch_start = (which_mini_batch * args.mini_batch_size)\n", + " mini_batch_end = np.min([(which_mini_batch + 1) * args.mini_batch_size,\n", + " N_train_data])\n", + " mini_batch_indices = shuffled_indices[mini_batch_start:mini_batch_end]\n", + " # grab the fully prepped mini-batch using the helper function in the data loader\n", + " mini_batch, mini_batch_reversed, mini_batch_mask, mini_batch_seq_lengths \\\n", + " = poly.get_mini_batch(mini_batch_indices, training_data_sequences,\n", + " training_seq_lengths, cuda=args.cuda)\n", + " # do an actual gradient step\n", + " loss = svi.step(mini_batch, mini_batch_reversed, mini_batch_mask,\n", + " mini_batch_seq_lengths, annealing_factor)\n", + " # keep track of the training loss\n", + " return loss\n", + "```\n", + "\n", + "We first compute the KL annealing factor appropriate to the mini-batch (according to a linear schedule as described earlier). We then compute the mini-batch indices, which we pass to the helper function `get_mini_batch`. This helper function takes care of a number of different things:\n", + "\n", + "- it sorts each mini-batch by sequence length\n", + "- it calls another helper function to get a copy of the mini-batch in reversed temporal order\n", + "- it packs each reversed mini-batch in a `rnn.pack_padded_sequence`, which is then ready to be ingested by the RNN\n", + "- it cuda-izes all tensors if we're on a GPU\n", + "- it calls another helper function to get an appropriate 0/1 mask for the mini-batch\n", + "\n", + "We then pipe all the return values of `get_mini_batch()` into `elbo.step(...)`. Recall that these arguments will be further piped to `model(...)` and `guide(...)` during construction of the gradient estimator in `elbo`. Finally, we return a float which is a noisy estimate of the loss for that mini-batch.\n", + "\n", + "We now have all the ingredients required for the main bit of our training loop:\n", + "\n", + "```python\n", + "times = [time.time()]\n", + "for epoch in range(args.num_epochs):\n", + " # accumulator for our estimate of the negative log likelihood \n", + " # (or rather -elbo) for this epoch\n", + " epoch_nll = 0.0 \n", + " # prepare mini-batch subsampling indices for this epoch\n", + " shuffled_indices = np.arange(N_train_data)\n", + " np.random.shuffle(shuffled_indices)\n", + "\n", + " # process each mini-batch; this is where we take gradient steps\n", + " for which_mini_batch in range(N_mini_batches):\n", + " epoch_nll += process_minibatch(epoch, which_mini_batch, shuffled_indices)\n", + "\n", + " # report training diagnostics\n", + " times.append(time.time())\n", + " epoch_time = times[-1] - times[-2]\n", + " log(\"[training epoch %04d] %.4f \\t\\t\\t\\t(dt = %.3f sec)\" %\n", + " (epoch, epoch_nll / N_train_time_slices, epoch_time))\n", + "```\n", + "\n", + "At the beginning of each epoch we shuffle the indices pointing to the training data. We then process each mini-batch until we've gone through the entire training set, accumulating the training loss as we go. Finally we report some diagnostic info. Note that we normalize the loss by the total number of time slices in the training set (this allows us to compare to reference [1]). " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Evaluation\n", + "This training loop is still missing any kind of evaluation diagnostics. Let's fix that. First we need to prepare the validation and test data for evaluation. Since the validation and test datasets are small enough that we can easily fit them into memory, we're going to process each dataset batchwise (i.e. we will not be breaking up the dataset into mini-batches). [_Aside: at this point the reader may ask why we don't do the same thing for the training set. The reason is that additional stochasticity due to data-subsampling is often advantageous during optimization: in particular it can help us avoid local optima._] And, in fact, in order to get a lessy noisy estimate of the ELBO, we're going to compute a multi-sample estimate. The simplest way to do this would be as follows:\n", + "\n", + "```python\n", + "val_loss = svi.evaluate_loss(val_batch, ..., num_particles=5)\n", + "```\n", + "\n", + "This, however, would involve an explicit `for` loop with five iterations. For our particular model, we can do better and vectorize the whole computation. The only way to do this currently in Pyro is to explicitly replicate the data `n_eval_samples` many times. This is the strategy we follow:\n", + "\n", + "```python\n", + "# package repeated copies of val/test data for faster evaluation\n", + "# (i.e. set us up for vectorization)\n", + "def rep(x):\n", + " return np.repeat(x, n_eval_samples, axis=0)\n", + "\n", + "# get the validation/test data ready for the dmm: pack into sequences, etc.\n", + "val_seq_lengths = rep(val_seq_lengths)\n", + "test_seq_lengths = rep(test_seq_lengths)\n", + "val_batch, val_batch_reversed, val_batch_mask, val_seq_lengths = poly.get_mini_batch(\n", + " np.arange(n_eval_samples * val_data_sequences.shape[0]), rep(val_data_sequences),\n", + " val_seq_lengths, cuda=args.cuda)\n", + "test_batch, test_batch_reversed, test_batch_mask, test_seq_lengths = \\\n", + " poly.get_mini_batch(np.arange(n_eval_samples * test_data_sequences.shape[0]), \n", + " rep(test_data_sequences),\n", + " test_seq_lengths, cuda=args.cuda)\n", + "```\n", + "\n", + "With the test and validation data now fully prepped, we define the helper function that does the evaluation: \n", + "\n", + "```python\n", + "def do_evaluation():\n", + " # put the RNN into evaluation mode (i.e. turn off drop-out if applicable)\n", + " dmm.rnn.eval()\n", + "\n", + " # compute the validation and test loss\n", + " val_nll = svi.evaluate_loss(val_batch, val_batch_reversed, val_batch_mask,\n", + " val_seq_lengths) / np.sum(val_seq_lengths)\n", + " test_nll = svi.evaluate_loss(test_batch, test_batch_reversed, test_batch_mask,\n", + " test_seq_lengths) / np.sum(test_seq_lengths)\n", + "\n", + " # put the RNN back into training mode (i.e. turn on drop-out if applicable)\n", + " dmm.rnn.train()\n", + " return val_nll, test_nll\n", + "```\n", + "\n", + "We simply call the `evaluate_loss` method of `elbo`, which takes the same arguments as `step()`, namely the arguments that are passed to the model and guide. Note that we have to put the RNN into and out of evaluation mode to account for dropout. We can now stick `do_evaluation()` into the training loop; see [the source code](https://github.com/pyro-ppl/pyro/blob/dev/examples/dmm.py) for details." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Results\n", + "\n", + "Let's make sure that our implementation gives reasonable results. We can use the numbers reported in reference [1] as a sanity check. For the same dataset and a similar model/guide setup (dimension of the latent space, number of hidden units in the RNN, etc.) they report a normalized negative log likelihood (NLL) of `6.93` on the testset (lower is better$)^{\\S}$. This is to be compared to our result of `6.87`. These numbers are very much in the same ball park, which is reassuring. It seems that, at least for this dataset, not using analytic expressions for the KL divergences doesn't degrade the quality of the learned model (although, as discussed above, the training probably takes somewhat longer)." + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/html" + }, + "source": [ + "
Figure 3: Progress on the test set NLL as training progresses for a sample training run.
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the figure we show how the test NLL progresses during training for a single sample run (one with a rather conservative learning rate). Most of the progress is during the first 3000 epochs or so, with some marginal gains if we let training go on for longer. On a GeForce GTX 1080, 5000 epochs takes about 20 hours.\n", + "\n", + "\n", + "| `num_iafs` | test NLL |\n", + "|---|---|\n", + "| `0` | `6.87` | \n", + "| `1` | `6.82` |\n", + "| `2` | `6.80` |\n", + "\n", + "Finally, we also report results for guides with normalizing flows in the mix (details to be found in the next section). \n", + "\n", + "${ \\S\\;}$ Actually, they seem to report two numbers—6.93 and 7.03—for the same model/guide and it's not entirely clear how the two reported numbers are different." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Bells, whistles, and other improvements\n", + "\n", + "### Inverse Autoregressive Flows\n", + "\n", + "One of the great things about a probabilistic programming language is that it encourages modularity. Let's showcase an example in the context of the DMM. We're going to make our variational distribution richer by adding normalizing flows to the mix (see reference [2] for a discussion). **This will only cost us four additional lines of code!**\n", + "\n", + "First, in the `DMM` constructor we add\n", + "\n", + "```python\n", + "iafs = [AffineAutoregressive(AutoRegressiveNN(z_dim, [iaf_dim])) for _ in range(num_iafs)]\n", + "self.iafs = nn.ModuleList(iafs)\n", + "```\n", + "\n", + "This instantiates `num_iafs` many bijective transforms of the `AffineAutoregressive` type (see references [3,4]); each normalizing flow will have `iaf_dim` many hidden units. We then bundle the normalizing flows in a `nn.ModuleList`; this is just the PyTorchy way to package a list of `nn.Module`s. Next, in the guide we add the lines\n", + "\n", + "```python\n", + "if self.iafs.__len__() > 0:\n", + " z_dist = TransformedDistribution(z_dist, self.iafs)\n", + "```\n", + "\n", + "Here we're taking the base distribution `z_dist`, which in our case is a conditional gaussian distribution, and using the `TransformedDistribution` construct we transform it into a non-gaussian distribution that is, by construction, richer than the base distribution. Voila!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Checkpointing\n", + "\n", + "If we want to recover from a catastrophic failure in our training loop, there are two kinds of state we need to keep track of. The first is the various parameters of the model and guide. The second is the state of the optimizers (e.g. in Adam this will include the running average of recent gradient estimates for each parameter).\n", + "\n", + "In Pyro, the parameters can all be found in the `ParamStore`. However, PyTorch also keeps track of them for us via the `parameters()` method of `nn.Module`. So one simple way we can save the parameters of the model and guide is to make use of the `state_dict()` method of `dmm` in conjunction with `torch.save()`; see below. In the case that we have `AffineAutoregressive`'s in the loop, this is in fact the only option at our disposal. This is because the `AffineAutoregressive` module contains what are called 'persistent buffers' in PyTorch parlance. These are things that carry state but are not `Parameter`s. The `state_dict()` and `load_state_dict()` methods of `nn.Module` know how to deal with buffers correctly.\n", + "\n", + "To save the state of the optimizers, we have to use functionality inside of `pyro.optim.PyroOptim`. Recall that the typical user never interacts directly with PyTorch `Optimizers` when using Pyro; since parameters can be created dynamically in an arbitrary probabilistic program, Pyro needs to manage `Optimizers` for us. In our case saving the optimizer state will be as easy as calling `optimizer.save()`. The loading logic is entirely analagous. So our entire logic for saving and loading checkpoints only takes a few lines:\n", + "\n", + "```python\n", + "# saves the model and optimizer states to disk\n", + "def save_checkpoint():\n", + " log(\"saving model to %s...\" % args.save_model)\n", + " torch.save(dmm.state_dict(), args.save_model)\n", + " log(\"saving optimizer states to %s...\" % args.save_opt)\n", + " optimizer.save(args.save_opt)\n", + " log(\"done saving model and optimizer checkpoints to disk.\")\n", + "\n", + "# loads the model and optimizer states from disk\n", + "def load_checkpoint():\n", + " assert exists(args.load_opt) and exists(args.load_model), \\\n", + " \"--load-model and/or --load-opt misspecified\"\n", + " log(\"loading model from %s...\" % args.load_model)\n", + " dmm.load_state_dict(torch.load(args.load_model))\n", + " log(\"loading optimizer states from %s...\" % args.load_opt)\n", + " optimizer.load(args.load_opt)\n", + " log(\"done loading model and optimizer states.\")\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Some final comments\n", + "\n", + "A deep markov model is a relatively complex model. Now that we've taken the effort to implement a version of the deep markov model tailored to the polyphonic music dataset, we should ask ourselves what else we can do. What if we're handed a different sequential dataset? Do we have to start all over?\n", + "\n", + "Not at all! The beauty of probalistic programming is that it enables—and encourages—modular approaches to modeling and inference. Adapting our polyphonic music model to a dataset with continuous observations is as simple as changing the observation likelihood. The vast majority of the code could be taken over unchanged. This means that with a little bit of extra work, the code in this tutorial could be repurposed to enable a huge variety of different models. \n", + "\n", + "See the complete code on [Github](https://github.com/pyro-ppl/pyro/blob/dev/examples/dmm.py).\n", + "\n", + "## References\n", + "\n", + "[1] `Structured Inference Networks for Nonlinear State Space Models`,
    \n", + " Rahul G. Krishnan, Uri Shalit, David Sontag\n", + " \n", + "[2] `Variational Inference with Normalizing Flows`,\n", + "
    \n", + "Danilo Jimenez Rezende, Shakir Mohamed \n", + " \n", + "[3] `Improving Variational Inference with Inverse Autoregressive Flow`,\n", + "
    \n", + "Diederik P. Kingma, Tim Salimans, Rafal Jozefowicz, Xi Chen, Ilya Sutskever, Max Welling \n", + "\n", + "[4] `MADE: Masked Autoencoder for Distribution Estimation`,\n", + "
    \n", + "Mathieu Germain, Karol Gregor, Iain Murray, Hugo Larochelle \n", + "\n", + "[5] `Modeling Temporal Dependencies in High-Dimensional Sequences:`\n", + "
    \n", + "`Application to Polyphonic Music Generation and Transcription`,\n", + "
    \n", + "Boulanger-Lewandowski, N., Bengio, Y. and Vincent, P." + ] + } + ], + "metadata": { + "celltoolbar": "Raw Cell Format", + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/easyguide.ipynb b/pyro/source/tutorial/source/easyguide.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..50f5ad6f4dffa1734e18508b9d2d157770e203ba --- /dev/null +++ b/pyro/source/tutorial/source/easyguide.ipynb @@ -0,0 +1,321 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Writing guides using EasyGuide\n", + "\n", + "This tutorial describes the [pyro.contrib.easyguide](http://docs.pyro.ai/en/stable/contrib.easyguide.html) module. This tutorial assumes the reader is already familiar with [SVI](http://pyro.ai/examples/svi_part_ii.html) and [tensor shapes](http://pyro.ai/examples/tensor_shapes.html).\n", + "\n", + "#### Summary\n", + "\n", + "- For simple black-box guides, try using components in [pyro.infer.autoguide](http://docs.pyro.ai/en/stable/infer.autoguide.html).\n", + "- For more complex guides, try using components in [pyro.contrib.easyguide](http://docs.pyro.ai/en/stable/contrib.easyguide.html).\n", + "- Decorate with `@easy_guide(model)`.\n", + "- Select multiple model sites using `group = self.group(match=\"my_regex\")`.\n", + "- Guide a group of sites by a single distribution using `group.sample(...)`.\n", + "- Inspect concatenated group shape using `group.batch_shape`, `group.event_shape`, etc.\n", + "- Use `self.plate(...)` instead of `pyro.plate(...)`.\n", + "- To be compatible with subsampling, pass the `event_dim` arg to `pyro.param(...)`.\n", + "- To MAP estimate model site \"foo\", use `foo = self.map_estimate(\"foo\")`.\n", + "\n", + "#### Table of contents\n", + "\n", + "- [Modeling time series data](#Modeling-time-series-data)\n", + "- [Writing a guide without EasyGuide](#Writing-a-guide-without-EasyGuide)\n", + "- [Using EasyGuide](#Using-EasyGuide)\n", + "- [Amortized guides](#Amortized-guides)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import torch\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "from pyro.infer import SVI, Trace_ELBO\n", + "from pyro.contrib.easyguide import easy_guide\n", + "from pyro.optim import Adam\n", + "from torch.distributions import constraints\n", + "\n", + "smoke_test = ('CI' in os.environ)\n", + "assert pyro.__version__.startswith('1.9.1')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Modeling time series data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Consider a time-series model with a slowly-varying continuous latent state and Bernoulli observations with a logistic link function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def model(batch, subsample, full_size):\n", + " batch = list(batch)\n", + " num_time_steps = len(batch)\n", + " drift = pyro.sample(\"drift\", dist.LogNormal(-1, 0.5))\n", + " with pyro.plate(\"data\", full_size, subsample=subsample):\n", + " z = 0.\n", + " for t in range(num_time_steps):\n", + " z = pyro.sample(\"state_{}\".format(t),\n", + " dist.Normal(z, drift))\n", + " batch[t] = pyro.sample(\"obs_{}\".format(t),\n", + " dist.Bernoulli(logits=z),\n", + " obs=batch[t])\n", + " return torch.stack(batch)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's generate some data directly from the model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "full_size = 100\n", + "num_time_steps = 7\n", + "pyro.set_rng_seed(123456789)\n", + "data = model([None] * num_time_steps, torch.arange(full_size), full_size)\n", + "assert data.shape == (num_time_steps, full_size)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Writing a guide without EasyGuide\n", + "\n", + "Consider a possible guide for this model where we point-estimate the `drift` parameter using a `Delta` distribution, and then model local time series using shared uncertainty but local means, using a `LowRankMultivariateNormal` distribution. There is a single global sample site which we can model with a `param` and `sample` statement. Then we sample a global pair of uncertainty parameters `cov_diag` and `cov_factor`. Next we sample a local `loc` parameter using `pyro.param(..., event_dim=...)` and an auxiliary sample site. Finally we unpack that auxiliary site into one element per time series. The auxiliary-unpacked-to-`Delta`s pattern is quite common." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "rank = 3\n", + " \n", + "def guide(batch, subsample, full_size):\n", + " num_time_steps, batch_size = batch.shape\n", + "\n", + " # MAP estimate the drift.\n", + " drift_loc = pyro.param(\"drift_loc\", lambda: torch.tensor(0.1),\n", + " constraint=constraints.positive)\n", + " pyro.sample(\"drift\", dist.Delta(drift_loc))\n", + "\n", + " # Model local states using shared uncertainty + local mean.\n", + " cov_diag = pyro.param(\"state_cov_diag\",\n", + " lambda: torch.full((num_time_steps,), 0.01),\n", + " constraint=constraints.positive)\n", + " cov_factor = pyro.param(\"state_cov_factor\",\n", + " lambda: torch.randn(num_time_steps, rank) * 0.01)\n", + " with pyro.plate(\"data\", full_size, subsample=subsample):\n", + " # Sample local mean.\n", + " loc = pyro.param(\"state_loc\",\n", + " lambda: torch.full((full_size, num_time_steps), 0.5),\n", + " event_dim=1)\n", + " states = pyro.sample(\"states\",\n", + " dist.LowRankMultivariateNormal(loc, cov_factor, cov_diag),\n", + " infer={\"is_auxiliary\": True})\n", + " # Unpack the joint states into one sample site per time step.\n", + " for t in range(num_time_steps):\n", + " pyro.sample(\"state_{}\".format(t), dist.Delta(states[:, t]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's train using [SVI](http://docs.pyro.ai/en/stable/inference_algos.html#module-pyro.infer.svi) and [Trace_ELBO](http://docs.pyro.ai/en/stable/inference_algos.html#pyro.infer.trace_elbo.Trace_ELBO), manually batching data into small minibatches." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def train(guide, num_epochs=1 if smoke_test else 101, batch_size=20):\n", + " full_size = data.size(-1)\n", + " pyro.get_param_store().clear()\n", + " pyro.set_rng_seed(123456789)\n", + " svi = SVI(model, guide, Adam({\"lr\": 0.02}), Trace_ELBO())\n", + " for epoch in range(num_epochs):\n", + " pos = 0\n", + " losses = []\n", + " while pos < full_size:\n", + " subsample = torch.arange(pos, pos + batch_size)\n", + " batch = data[:, pos:pos + batch_size]\n", + " pos += batch_size\n", + " losses.append(svi.step(batch, subsample, full_size=full_size))\n", + " epoch_loss = sum(losses) / len(losses)\n", + " if epoch % 10 == 0:\n", + " print(\"epoch {} loss = {}\".format(epoch, epoch_loss / data.numel()))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train(guide)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Using EasyGuide\n", + "\n", + "Now let's simplify using the `@easy_guide` decorator. Our modifications are:\n", + "1. Decorate with `@easy_guide` and add `self` to args.\n", + "2. Replace the `Delta` guide for drift with a simple `map_estimate()`.\n", + "3. Select a `group` of model sites and read their concatenated `event_shape`.\n", + "4. Replace the auxiliary site and `Delta` slices with a single `group.sample()`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "@easy_guide(model)\n", + "def guide(self, batch, subsample, full_size):\n", + " # MAP estimate the drift.\n", + " self.map_estimate(\"drift\")\n", + "\n", + " # Model local states using shared uncertainty + local mean.\n", + " group = self.group(match=\"state_[0-9]*\") # Selects all local variables.\n", + " cov_diag = pyro.param(\"state_cov_diag\",\n", + " lambda: torch.full(group.event_shape, 0.01),\n", + " constraint=constraints.positive)\n", + " cov_factor = pyro.param(\"state_cov_factor\",\n", + " lambda: torch.randn(group.event_shape + (rank,)) * 0.01)\n", + " with self.plate(\"data\", full_size, subsample=subsample):\n", + " # Sample local mean.\n", + " loc = pyro.param(\"state_loc\",\n", + " lambda: torch.full((full_size,) + group.event_shape, 0.5),\n", + " event_dim=1)\n", + " # Automatically sample the joint latent, then unpack and replay model sites.\n", + " group.sample(\"states\", dist.LowRankMultivariateNormal(loc, cov_factor, cov_diag))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note we've used `group.event_shape` to determine the total flattened concatenated shape of all matched sites in the group." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train(guide)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Amortized guides\n", + "\n", + "`EasyGuide` also makes it easy to write amortized guides (guides where we learn a function that predicts latent variables from data, rather than learning one parameter per datapoint). Let's modify the last guide to predict the latent `loc` as an affine function of observed data, rather than memorizing each data point's latent variable. This amortized guide is more useful in practice because it can handle new data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "@easy_guide(model)\n", + "def guide(self, batch, subsample, full_size):\n", + " num_time_steps, batch_size = batch.shape\n", + " self.map_estimate(\"drift\")\n", + "\n", + " group = self.group(match=\"state_[0-9]*\")\n", + " cov_diag = pyro.param(\"state_cov_diag\",\n", + " lambda: torch.full(group.event_shape, 0.01),\n", + " constraint=constraints.positive)\n", + " cov_factor = pyro.param(\"state_cov_factor\",\n", + " lambda: torch.randn(group.event_shape + (rank,)) * 0.01)\n", + "\n", + " # Predict latent propensity as an affine function of observed data.\n", + " if not hasattr(self, \"nn\"):\n", + " self.nn = torch.nn.Linear(group.event_shape.numel(), group.event_shape.numel())\n", + " self.nn.weight.data.fill_(1.0 / num_time_steps)\n", + " self.nn.bias.data.fill_(-0.5)\n", + " pyro.module(\"state_nn\", self.nn)\n", + " with self.plate(\"data\", full_size, subsample=subsample):\n", + " loc = self.nn(batch.t())\n", + " group.sample(\"states\", dist.LowRankMultivariateNormal(loc, cov_factor, cov_diag))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train(guide)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/effect_handlers.ipynb b/pyro/source/tutorial/source/effect_handlers.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..e81a82cceec97abe4eeff22a54e36af36c6e3928 --- /dev/null +++ b/pyro/source/tutorial/source/effect_handlers.ipynb @@ -0,0 +1,725 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Poutine: A Guide to Programming with Effect Handlers in Pyro\n", + "\n", + "**Note to readers**: This tutorial is a guide to the API details of Pyro's effect handling library, [Poutine](http://docs.pyro.ai/en/dev/poutine.html). We recommend readers first orient themselves with the simplified [minipyro.py](https://github.com/pyro-ppl/pyro/blob/dev/pyro/contrib/minipyro.py) which contains a minimal, readable implementation of Pyro's runtime and the effect handler abstraction described here. Pyro's effect handler library is more general than minipyro's but also contains more layers of indirection; it helps to read them side-by-side." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "import pyro.poutine as poutine\n", + "\n", + "from pyro.poutine.runtime import effectful\n", + "\n", + "pyro.set_rng_seed(101)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Introduction\n", + "\n", + "Inference in probabilistic programming involves manipulating or transforming probabilistic programs written as generative models. For example, nearly all approximate inference algorithms require computing the unnormalized joint probability of values of latent and observed variables under a generative model.\n", + "\n", + "Consider the following example model:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def scale(guess):\n", + " weight = pyro.sample(\"weight\", dist.Normal(guess, 1.0))\n", + " return pyro.sample(\"measurement\", dist.Normal(weight, 0.75))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This model defines a joint probability distribution over `\"weight\"` and `\"measurement\"`:\n", + "\n", + "$${\\sf weight} \\, | \\, {\\sf guess} \\sim \\cal {\\sf Normal}({\\sf guess}, 1) $$\n", + "$${\\sf measurement} \\, | \\, {\\sf guess}, {\\sf weight} \\sim {\\sf Normal}({\\sf weight}, 0.75)$$\n", + "\n", + "If we had access to the inputs and outputs of each `pyro.sample` site, we could compute their log-joint:\n", + "```python\n", + "logp = dist.Normal(guess, 1.0).log_prob(weight).sum() + dist.Normal(weight, 0.75).log_prob(measurement).sum()\n", + "```\n", + "However, the way we wrote `scale` above does not seem to expose these intermediate distribution objects, and rewriting it to return them would be intrusive and would violate the separation of concerns between models and inference algorithms that a probabilistic programming language like Pyro is designed to enforce.\n", + "\n", + "To resolve this conflict and facilitate inference algorithm development, Pyro exposes [Poutine](http://docs.pyro.ai/en/dev/poutine.html), a library of *effect handlers*, or composable building blocks for examining and modifying the behavior of Pyro programs. Most of Pyro's internals are implemented on top of Poutine." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## A first look at Poutine: Pyro's library of algorithmic building blocks\n", + "\n", + "Effect handlers, a common abstraction in the programming languages community, give *nonstandard interpretations* or *side effects* to the behavior of particular statements in a programming language, like `pyro.sample` or `pyro.param`. For background reading on effect handlers in programming language research, see the optional \"References\" section at the end of this tutorial. \n", + "\n", + "Rather than reviewing more definitions, let's look at a first example that addresses the problem above: we can compose two existing effect handlers, `poutine.condition` (which sets output values of `pyro.sample` statements) and `poutine.trace` (which records the inputs, distributions, and outputs of `pyro.sample` statements), to concisely define a new effect handler that computes the log-joint:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tensor(-3.0203)\n" + ] + } + ], + "source": [ + "def make_log_joint(model):\n", + " def _log_joint(cond_data, *args, **kwargs):\n", + " conditioned_model = poutine.condition(model, data=cond_data)\n", + " trace = poutine.trace(conditioned_model).get_trace(*args, **kwargs)\n", + " return trace.log_prob_sum()\n", + " return _log_joint\n", + "\n", + "scale_log_joint = make_log_joint(scale)\n", + "print(scale_log_joint({\"measurement\": torch.tensor(9.5), \"weight\": torch.tensor(8.23)}, torch.tensor(8.5)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That snippet is short, but still somewhat opaque - `poutine.condition`, `poutine.trace`, and `trace.log_prob_sum` are all black boxes. Let's remove a layer of boilerplate from `poutine.condition` and `poutine.trace` and explicitly implement what `trace.log_prob_sum` is doing:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tensor(-3.0203)\n" + ] + } + ], + "source": [ + "from pyro.poutine.trace_messenger import TraceMessenger\n", + "from pyro.poutine.condition_messenger import ConditionMessenger\n", + "\n", + "def make_log_joint_2(model):\n", + " def _log_joint(cond_data, *args, **kwargs):\n", + " with TraceMessenger() as tracer:\n", + " with ConditionMessenger(data=cond_data):\n", + " model(*args, **kwargs)\n", + " \n", + " trace = tracer.trace\n", + " logp = 0.\n", + " for name, node in trace.nodes.items():\n", + " if node[\"type\"] == \"sample\":\n", + " if node[\"is_observed\"]:\n", + " assert node[\"value\"] is cond_data[name]\n", + " logp = logp + node[\"fn\"].log_prob(node[\"value\"]).sum()\n", + " return logp\n", + " return _log_joint\n", + "\n", + "scale_log_joint = make_log_joint_2(scale)\n", + "print(scale_log_joint({\"measurement\": 9.5, \"weight\": 8.23}, 8.5))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This makes things a little more clear: we can now see that `poutine.trace` and `poutine.condition` are wrappers for context managers that presumably communicate with the model through something inside `pyro.sample`. We can also see that `poutine.trace` produces a data structure (a [Trace](http://docs.pyro.ai/en/dev/poutine.html#trace)) containing a dictionary whose keys are `sample` site names and values are dictionaries containing the distribution (`\"fn\"`) and output (`\"value\"`) at each site, and that the output values at each site are exactly the values specified in `data`.\n", + "\n", + "Finally, `TraceMessenger` and `ConditionMessenger` are Pyro effect handlers, or `Messenger`s: stateful context manager objects that are placed on a global stack and send messages (hence the name) up and down the stack at each effectful operation, like a `pyro.sample` call. A `Messenger` is placed at the bottom of the stack when its `__enter__` method is called, i.e. when it is used in a \"with\" statement.\n", + "\n", + "We'll look at this process in more detail later in this tutorial. For a simplified implementation in only a few lines of code, see [pyro.contrib.minipyro](https://github.com/pyro-ppl/pyro/blob/dev/pyro/contrib/minipyro.py)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Implementing new effect handlers with the `Messenger` API\n", + "\n", + "Although it's easiest to build new effect handlers by composing the existing ones in `pyro.poutine`, implementing a new effect as a `pyro.poutine.messenger.Messenger` subclass is actually fairly straightforward. Before diving into the API, let's look at another example: a version of our log-joint computation that performs the sum while the model is executing. We'll then review what each part of the example is actually doing." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tensor(-3.0203)\n", + "tensor(-3.0203)\n" + ] + } + ], + "source": [ + "class LogJointMessenger(poutine.messenger.Messenger):\n", + " \n", + " def __init__(self, cond_data):\n", + " self.data = cond_data\n", + " \n", + " # __call__ is syntactic sugar for using Messengers as higher-order functions.\n", + " # Messenger already defines __call__, but we re-define it here\n", + " # for exposition and to change the return value:\n", + " def __call__(self, fn):\n", + " def _fn(*args, **kwargs):\n", + " with self:\n", + " fn(*args, **kwargs)\n", + " return self.logp.clone()\n", + " return _fn\n", + " \n", + " def __enter__(self):\n", + " self.logp = torch.tensor(0.)\n", + " # All Messenger subclasses must call the base Messenger.__enter__()\n", + " # in their __enter__ methods\n", + " return super().__enter__()\n", + " \n", + " # __exit__ takes the same arguments in all Python context managers\n", + " def __exit__(self, exc_type, exc_value, traceback):\n", + " self.logp = torch.tensor(0.)\n", + " # All Messenger subclasses must call the base Messenger.__exit__ method\n", + " # in their __exit__ methods.\n", + " return super().__exit__(exc_type, exc_value, traceback)\n", + " \n", + " # _pyro_sample will be called once per pyro.sample site.\n", + " # It takes a dictionary msg containing the name, distribution,\n", + " # observation or sample value, and other metadata from the sample site.\n", + " def _pyro_sample(self, msg):\n", + " # Any unobserved random variables will trigger this assertion.\n", + " # In the next section, we'll learn how to also handle sampled values.\n", + " assert msg[\"name\"] in self.data\n", + " msg[\"value\"] = self.data[msg[\"name\"]]\n", + " # Since we've observed a value for this site, we set the \"is_observed\" flag to True\n", + " # This tells any other Messengers not to overwrite msg[\"value\"] with a sample.\n", + " msg[\"is_observed\"] = True\n", + " self.logp = self.logp + (msg[\"scale\"] * msg[\"fn\"].log_prob(msg[\"value\"])).sum()\n", + "\n", + "with LogJointMessenger(cond_data={\"measurement\": 9.5, \"weight\": 8.23}) as m:\n", + " scale(8.5)\n", + " print(m.logp.clone())\n", + " \n", + "scale_log_joint = LogJointMessenger(cond_data={\"measurement\": 9.5, \"weight\": 8.23})(scale)\n", + "print(scale_log_joint(8.5))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A convenient bit of boilerplate that allows the use of `LogJointMessenger` as a context manager, decorator, or higher-order function is the following. Most of the existing effect handlers in `pyro.poutine`, including `poutine.trace` and `poutine.condition` which we used earlier, are `Messenger`s wrapped this way in `pyro.poutine.handlers`." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tensor(-3.0203)\n" + ] + } + ], + "source": [ + "def log_joint(model=None, cond_data=None):\n", + " msngr = LogJointMessenger(cond_data=cond_data)\n", + " return msngr(model) if model is not None else msngr\n", + "\n", + "scale_log_joint = log_joint(scale, cond_data={\"measurement\": 9.5, \"weight\": 8.23})\n", + "print(scale_log_joint(8.5))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The `Messenger` API in more detail\n", + "\n", + "Our `LogJointMessenger` implementation has three important methods: `__enter__`, `__exit__`, and `_pyro_sample`. \n", + "\n", + "`__enter__` and `__exit__` are special methods needed by any Python context manager. When implementing new `Messenger` classes, if we override `__enter__` and `__exit__`, we always need to call the base `Messenger`'s `__enter__` and `__exit__` methods for the new `Messenger` to be applied correctly.\n", + "\n", + "The last method `LogJointMessenger._pyro_sample`, is called once at each sample site. It reads and modifies a *message*, which is a dictionary containing the sample site's name, distribution, sampled or observed value, and other metadata. We'll examine the contents of a message in more detail in the next section.\n", + "\n", + "Instead of `_pyro_sample`, a generic `Messenger` actually contains two methods that are called once per operation where side effects are performed:\n", + "1. `_process_message` modifies a message and sends the result to the `Messenger` just above on the stack\n", + "2. `_postprocess_message` modifies a message and sends the result to the next `Messenger` down on the stack. It is always called after all active `Messenger`s have had their `_process_message` method applied to the message.\n", + "\n", + "Although custom `Messenger`s can override `_process_message` and `_postprocess_message`, it's convenient to avoid requiring all effect handlers to be aware of all possible effectful operation types. For this reason, by default `Messenger._process_message` will use `msg[\"type\"]` to dispatch to a corresponding method `Messenger._pyro_`, e.g. `Messenger._pyro_sample` as in `LogJointMessenger`. Just as exception handling code ignores unhandled exception types, this allows `Messenger`s to simply forward operations they don't know how to handle up to the next `Messenger` in the stack:\n", + "```python\n", + "class Messenger:\n", + " ...\n", + " def _process_message(self, msg):\n", + " method_name = \"_pyro_{}\".format(msg[\"type\"]) # e.g. _pyro_sample when msg[\"type\"] == \"sample\"\n", + " if hasattr(self, method_name):\n", + " getattr(self, method_name)(msg)\n", + " ...\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Interlude: the global `Messenger` stack\n", + "\n", + "See [pyro.contrib.minipyro](https://github.com/pyro-ppl/pyro/blob/dev/pyro/contrib/minipyro.py) for an end-to-end implementation of the mechanism in this section.\n", + "\n", + "The order in which `Messenger`s are applied to an operation like a `pyro.sample` statement is determined by the order in which their `__enter__` methods are called. `Messenger.__enter__` appends a `Messenger` to the end (the bottom) of the global handler stack:\n", + "```python\n", + "class Messenger:\n", + " ...\n", + " # __enter__ pushes a Messenger onto the stack\n", + " def __enter__(self):\n", + " ...\n", + " _PYRO_STACK.append(self)\n", + " ...\n", + " \n", + " # __exit__ removes a Messenger from the stack\n", + " def __exit__(self, ...):\n", + " ...\n", + " assert _PYRO_STACK[-1] is self\n", + " _PYRO_STACK.pop()\n", + " ...\n", + "```\n", + "\n", + "`pyro.poutine.runtime.apply_stack` then traverses the stack twice at each operation, first from bottom to top to apply each `_process_message` and then from top to bottom to apply each `_postprocess_message`:\n", + "```python\n", + "def apply_stack(msg): # simplified\n", + " for handler in reversed(_PYRO_STACK):\n", + " handler._process_message(msg)\n", + " ...\n", + " default_process_message(msg)\n", + " ...\n", + " for handler in _PYRO_STACK:\n", + " handler._postprocess_message(msg) \n", + " ...\n", + " return msg\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Returning to the `LogJointMessenger` example\n", + "\n", + "The second method `_postprocess_message` is necessary because some effects can only be applied after all other effect handlers have had a chance to update the message once. In the case of `LogJointMessenger`, other effects, like enumeration, may modify a sample site's value or distribution (`msg[\"value\"]` or `msg[\"fn\"]`), so we move the log-probability computation to a new method, `_pyro_post_sample`, which is called by `_postprocess_message` (via a dispatch mechanism like the one used by `_process_message`) at each `sample` site after all active handlers' `_pyro_sample` methods have been applied:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tensor(-3.0203)\n" + ] + } + ], + "source": [ + "class LogJointMessenger2(poutine.messenger.Messenger):\n", + " \n", + " def __init__(self, cond_data):\n", + " self.data = cond_data\n", + " \n", + " def __call__(self, fn):\n", + " def _fn(*args, **kwargs):\n", + " with self:\n", + " fn(*args, **kwargs)\n", + " return self.logp.clone()\n", + " return _fn\n", + " \n", + " def __enter__(self):\n", + " self.logp = torch.tensor(0.)\n", + " return super().__enter__()\n", + " \n", + " def __exit__(self, exc_type, exc_value, traceback):\n", + " self.logp = torch.tensor(0.)\n", + " return super().__exit__(exc_type, exc_value, traceback)\n", + "\n", + " def _pyro_sample(self, msg):\n", + " if msg[\"name\"] in self.data:\n", + " msg[\"value\"] = self.data[msg[\"name\"]]\n", + " msg[\"done\"] = True\n", + " \n", + " def _pyro_post_sample(self, msg):\n", + " assert msg[\"done\"] # the \"done\" flag asserts that no more modifications to value and fn will be performed.\n", + " self.logp = self.logp + (msg[\"scale\"] * msg[\"fn\"].log_prob(msg[\"value\"])).sum()\n", + "\n", + "\n", + "with LogJointMessenger2(cond_data={\"measurement\": 9.5, \"weight\": 8.23}) as m:\n", + " scale(8.5)\n", + " print(m.logp)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Inside the messages sent by `Messenger`s\n", + "\n", + "As the previous two examples mentioned, the actual messages sent up and down the stack are dictionaries with a particular set of keys. Consider the following sample statement:\n", + "```python\n", + "pyro.sample(\"x\", dist.Bernoulli(0.5), infer={\"enumerate\": \"parallel\"}, obs=None)\n", + "```\n", + "This sample statement is converted into an initial message before any effects are applied, and each effect handler's `_process_message` and `_postprocess_message` may update fields in place or add new fields. We write out the full initial message here for completeness:\n", + "```python\n", + "msg = {\n", + " # The following fields contain the name, inputs, function, and output of a site.\n", + " # These are generally the only fields you'll need to think about.\n", + " \"name\": \"x\",\n", + " \"fn\": dist.Bernoulli(0.5),\n", + " \"value\": None, # msg[\"value\"] will eventually contain the value returned by pyro.sample\n", + " \"is_observed\": False, # because obs=None by default; only used by sample sites\n", + " \"args\": (), # positional arguments passed to \"fn\" when it is called; usually empty for sample sites\n", + " \"kwargs\": {}, # keyword arguments passed to \"fn\" when it is called; usually empty for sample sites\n", + " # This field typically contains metadata needed or stored by a particular inference algorithm\n", + " \"infer\": {\"enumerate\": \"parallel\"},\n", + " # The remaining fields are generally only used by Pyro's internals,\n", + " # or for implementing more advanced effects beyond the scope of this tutorial\n", + " \"type\": \"sample\", # label used by Messenger._process_message to dispatch, in this case to _pyro_sample\n", + " \"done\": False,\n", + " \"stop\": False,\n", + " \"scale\": torch.tensor(1.), # Multiplicative scale factor that can be applied to each site's log_prob\n", + " \"mask\": None,\n", + " \"continuation\": None,\n", + " \"cond_indep_stack\": (), # Will contain metadata from each pyro.plate enclosing this sample site.\n", + "}\n", + "```\n", + "Note that when we use `poutine.trace` or `TraceMessenger` as in our first two versions of `make_log_joint`, the contents of `msg` are exactly the information stored in the trace for each sample and param site." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Implementing inference algorithms with existing effect handlers: examples\n", + "\n", + "It turns out that many inference operations, like our first version of `make_log_joint` above, have strikingly short implementations in terms of existing effect handlers in `pyro.poutine`. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Example: Variational inference with a Monte Carlo ELBO\n", + "\n", + "For example, here is an implementation of variational inference with a Monte Carlo ELBO that uses `poutine.trace`, `poutine.condition`, and `poutine.replay`. This is very similar to the simple ELBO in [pyro.contrib.minipyro](https://github.com/pyro-ppl/pyro/blob/dev/pyro/contrib/minipyro.py)." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "def monte_carlo_elbo(model, guide, batch, *args, **kwargs):\n", + " # assuming batch is a dictionary, we use poutine.condition to fix values of observed variables\n", + " conditioned_model = poutine.condition(model, data=batch)\n", + " \n", + " # we'll approximate the expectation in the ELBO with a single sample:\n", + " # first, we run the guide forward unmodified and record values and distributions\n", + " # at each sample site using poutine.trace\n", + " guide_trace = poutine.trace(guide).get_trace(*args, **kwargs)\n", + " \n", + " # we use poutine.replay to set the values of latent variables in the model\n", + " # to the values sampled above by our guide, and use poutine.trace\n", + " # to record the distributions that appear at each sample site in in the model\n", + " model_trace = poutine.trace(\n", + " poutine.replay(conditioned_model, trace=guide_trace)\n", + " ).get_trace(*args, **kwargs)\n", + " \n", + " elbo = 0.\n", + " for name, node in model_trace.nodes.items():\n", + " if node[\"type\"] == \"sample\":\n", + " elbo = elbo + node[\"fn\"].log_prob(node[\"value\"]).sum()\n", + " if not node[\"is_observed\"]:\n", + " elbo = elbo - guide_trace.nodes[name][\"fn\"].log_prob(node[\"value\"]).sum()\n", + " return -elbo" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We use `poutine.trace` and `poutine.block` to record `pyro.param` calls for optimization:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "def train(model, guide, data):\n", + " optimizer = pyro.optim.Adam({})\n", + " for batch in data:\n", + " # this poutine.trace will record all of the parameters that appear in the model and guide\n", + " # during the execution of monte_carlo_elbo\n", + " with poutine.trace() as param_capture:\n", + " # we use poutine.block here so that only parameters appear in the trace above\n", + " with poutine.block(hide_fn=lambda node: node[\"type\"] != \"param\"):\n", + " loss = monte_carlo_elbo(model, guide, batch)\n", + " \n", + " loss.backward()\n", + " params = set(node[\"value\"].unconstrained()\n", + " for node in param_capture.trace.nodes.values())\n", + " optimizer.step(params)\n", + " pyro.infer.util.zero_grads(params)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Example: exact inference via sequential enumeration\n", + "\n", + "Here is an example of a very different inference algorithm--exact inference via enumeration--implemented with `pyro.poutine`. A complete explanation of this algorithm is beyond the scope of this tutorial and may be found in Chapter 3 of the short online book [Design and Implementation of Probabilistic Programming Languages](http://dippl.org/chapters/03-enumeration.html). This example uses `poutine.queue`, itself implemented using `poutine.trace`, `poutine.replay`, and `poutine.block`, to enumerate over possible values of all discrete variables in a model and compute a marginal distribution over all possible return values or the possible values at a particular sample site:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "def sequential_discrete_marginal(model, data, site_name=\"_RETURN\"):\n", + " \n", + " from six.moves import queue # queue data structures\n", + " q = queue.Queue() # Instantiate a first-in first-out queue\n", + " q.put(poutine.Trace()) # seed the queue with an empty trace\n", + " \n", + " # as before, we fix the values of observed random variables with poutine.condition\n", + " # assuming data is a dictionary whose keys are names of sample sites in model\n", + " conditioned_model = poutine.condition(model, data=data)\n", + " \n", + " # we wrap the conditioned model in a poutine.queue,\n", + " # which repeatedly pushes and pops partially completed executions from a Queue()\n", + " # to perform breadth-first enumeration over the set of values of all discrete sample sites in model\n", + " enum_model = poutine.queue(conditioned_model, queue=q)\n", + " \n", + " # actually perform the enumeration by repeatedly tracing enum_model\n", + " # and accumulate samples and trace log-probabilities for postprocessing\n", + " samples, log_weights = [], []\n", + " while not q.empty():\n", + " trace = poutine.trace(enum_model).get_trace()\n", + " samples.append(trace.nodes[site_name][\"value\"])\n", + " log_weights.append(trace.log_prob_sum())\n", + " \n", + " # we take the samples and log-joints and turn them into a histogram:\n", + " samples = torch.stack(samples, 0)\n", + " log_weights = torch.stack(log_weights, 0)\n", + " log_weights = log_weights - dist.util.logsumexp(log_weights, dim=0)\n", + " return dist.Empirical(samples, log_weights)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "(Note that `sequential_discrete_marginal` is very general, but is also quite slow. For high-performance parallel enumeration that applies to a less general class of models, see the enumeration tutorial.)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example: implementing lazy evaluation with the `Messenger` API\n", + "\n", + "Now that we've learned more about the internals of `Messenger`, let's use it to implement a slightly more complicated effect: lazy evaluation. We first define a `LazyValue` class that we will use to build up a computation graph:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "class LazyValue:\n", + " def __init__(self, fn, *args, **kwargs):\n", + " self._expr = (fn, args, kwargs)\n", + " self._value = None\n", + " \n", + " def __str__(self):\n", + " return \"({} {})\".format(str(self._expr[0]), \" \".join(map(str, self._expr[1])))\n", + " \n", + " def evaluate(self):\n", + " if self._value is None:\n", + " fn, args, kwargs = self._expr\n", + " fn = fn.evaluate() if isinstance(fn, LazyValue) else fn\n", + " args = tuple(arg.evaluate() if isinstance(arg, LazyValue) else arg\n", + " for arg in args)\n", + " kwargs = {k: v.evaluate() if isinstance(v, LazyValue) else v\n", + " for k, v in kwargs.items()}\n", + " self._value = fn(*args, **kwargs)\n", + " return self._value" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With `LazyValue`, implementing lazy evaluation as a `Messenger` compatible with other effect handlers is suprisingly easy. We just make each `msg[\"value\"]` a `LazyValue` and introduce a new operation type `\"apply\"` for deterministic operations:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "class LazyMessenger(pyro.poutine.messenger.Messenger):\n", + " def _process_message(self, msg):\n", + " if msg[\"type\"] in (\"apply\", \"sample\") and not msg[\"done\"]:\n", + " msg[\"done\"] = True\n", + " msg[\"value\"] = LazyValue(msg[\"fn\"], *msg[\"args\"], **msg[\"kwargs\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, just like `torch.autograd` overloads `torch` tensor operations to record an autograd graph, we need to wrap any operations we'd like to be lazy. We'll use `pyro.poutine.runtime.effectful` as a decorator to expose these operations to `LazyMessenger`. `effectful` constructs a message much like the one above and sends it up and down the effect handler stack, but allows us to set the type (in this case, to `\"apply\"` instead of `\"sample\"`) so that these operations aren't mistaken for `sample` statements by other effect handlers like `TraceMessenger`:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "@effectful(type=\"apply\")\n", + "def add(x, y):\n", + " return x + y\n", + "\n", + "@effectful(type=\"apply\")\n", + "def mul(x, y):\n", + " return x * y\n", + "\n", + "@effectful(type=\"apply\")\n", + "def sigmoid(x):\n", + " return torch.sigmoid(x)\n", + "\n", + "@effectful(type=\"apply\")\n", + "def normal(loc, scale):\n", + " return dist.Normal(loc, scale)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Applied to another model:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(( ( ( (( 8.5 1.0) ) 0.8) 1.0) ( (( 0.0 0.25) ))) )\n", + "tensor(6.5436)\n" + ] + } + ], + "source": [ + "def biased_scale(guess):\n", + " weight = pyro.sample(\"weight\", normal(guess, 1.))\n", + " tolerance = pyro.sample(\"tolerance\", normal(0., 0.25))\n", + " return pyro.sample(\"measurement\", normal(add(mul(weight, 0.8), 1.), sigmoid(tolerance)))\n", + "\n", + "with LazyMessenger():\n", + " v = biased_scale(8.5)\n", + " print(v)\n", + " print(v.evaluate())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Together with other effect handlers like `TraceMessenger` and `ConditionMessenger`, with which it freely composes, `LazyMessenger` demonstrates how to use Poutine to quickly and concisely implement state-of-the-art PPL techniques like [delayed sampling with Rao-Blackwellization](https://arxiv.org/abs/1708.07787)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## References: algebraic effects and handlers in programming language research\n", + "\n", + "This section contains some references to PL papers for readers interested in this direction.\n", + "\n", + "Algebraic effects and handlers, which were developed starting in the early 2000s and are a subject of active research in the programming languages community, are a versatile abstraction for building modular implementations of nonstandard interpreters of particular statements in a programming language, like `pyro.sample` or `pyro.param`. They were originally introduced to address the difficulty of composing nonstandard interpreters implemented with monads and monad transformers.\n", + "\n", + "- For an accessible introduction to the effect handlers literature, see the excellent review/tutorial paper [\"Handlers in Action\"](http://homepages.inf.ed.ac.uk/slindley/papers/handlers.pdf) by Ohad Kammar, Sam Lindley, and Nicolas Oury, and the references therein.\n", + "\n", + "- Algebraic effect handlers were originally introduced by Gordon Plotkin and Matija Pretnar in the paper [\"Handlers of Algebraic Effects\"](https://link.springer.com/chapter/10.1007/978-3-642-00590-9_7).\n", + "\n", + "- A useful mental model of effect handlers is as exception handlers that are capable of resuming computation in the `try` block after raising an exception and performing some processing in the `except` block. This metaphor is explored further in the experimental programming language [Eff](http://math.andrej.com/eff/) and its companion paper [\"Programming with Algebraic Effects and Handlers\"](https://arxiv.org/abs/1203.1539) by Andrej Bauer and Matija Pretnar.\n", + "\n", + "- Most effect handlers in Pyro are \"linear,\" meaning that they only resume once per effectful operation and do not alter the order of execution of the original program. One exception is `poutine.queue`, which uses an inefficient implementation strategy for multiple resumptions like the one described for delimited continuations in the paper [\"Capturing the Future by Replaying the Past\"](http://delivery.acm.org/10.1145/3240000/3236771/icfp18main-p36-p.pdf) by James Koppel, Gabriel Scherer, and Armando Solar-Lezama. \n", + "\n", + "- More efficient implementation strategies for effect handlers in mainstream programming languages like Python or JavaScript is an area of active research. One promising line of work involves selective continuation-passing style transforms as in the paper [\"Type-Directed Compilation of Row-Typed Algebraic Effects\"](https://www.microsoft.com/en-us/research/wp-content/uploads/2016/12/algeff.pdf) by Daan Leijen." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/einsum.rst b/pyro/source/tutorial/source/einsum.rst new file mode 100644 index 0000000000000000000000000000000000000000..308345c0d45f61d2010f5027538b94144e7f0654 --- /dev/null +++ b/pyro/source/tutorial/source/einsum.rst @@ -0,0 +1,11 @@ +Example: Discrete Factor Graph Inference with Plated Einsum +=========================================================== + +`View einsum.py on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/examples/einsum.py + +__ github_ + +.. literalinclude:: ../../examples/einsum.py + :language: python diff --git a/pyro/source/tutorial/source/ekf.ipynb b/pyro/source/tutorial/source/ekf.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..26bbf33756c017bdd98541cd9081210ee05dc675 --- /dev/null +++ b/pyro/source/tutorial/source/ekf.ipynb @@ -0,0 +1,264 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Kalman Filter\n", + "\n", + "Kalman filters are linear models for state estimation of dynamic systems [1]. They have been the de facto standard in many robotics and tracking/prediction applications because they are well suited for systems with uncertainty about an observable dynamic process. They use a \"observe, predict, correct\" paradigm to extract information from an otherwise noisy signal. In Pyro, we can build differentiable Kalman filters with learnable parameters using the `pyro.contrib.tracking` [library](http://docs.pyro.ai/en/dev/contrib.tracking.html#module-pyro.contrib.tracking.extended_kalman_filter)\n", + "\n", + "## Dynamic process\n", + "\n", + "To start, consider this simple motion model:\n", + "\n", + "$$ X_{k+1} = FX_k + \\mathbf{W}_k $$\n", + "$$ \\mathbf{Z}_k = HX_k + \\mathbf{V}_k $$\n", + "\n", + "where $k$ is the state, $X$ is the signal estimate, $Z_k$ is the observed value at timestep $k$, $\\mathbf{W}_k$ and $\\mathbf{V}_k$ are independent noise processes (ie $\\mathbb{E}[w_k v_j^T] = 0$ for all $j, k$) which we'll approximate as Gaussians. Note that the state transitions are linear." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Kalman Update\n", + "At each time step, we perform a prediction for the mean and covariance:\n", + "$$ \\hat{X}_k = F\\hat{X}_{k-1}$$\n", + "$$\\hat{P}_k = FP_{k-1}F^T + Q$$\n", + "\n", + "and a correction for the measurement:\n", + "\n", + "$$ K_k = \\hat{P}_k H^T(H\\hat{P}_k H^T + R)^{-1}$$\n", + "$$ X_k = \\hat{X}_k + K_k(z_k - H\\hat{X}_k)$$\n", + "$$ P_k = (I-K_k H)\\hat{P}_k$$\n", + "\n", + "where $X$ is the position estimate, $P$ is the covariance matrix, $K$ is the Kalman Gain, and $Q$ and $R$ are covariance matrices.\n", + "\n", + "For an in-depth derivation, see \\[2\\]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Nonlinear Estimation: Extended Kalman Filter\n", + "\n", + "What if our system is non-linear, eg in GPS navigation? Consider the following non-linear system:\n", + "\n", + "$$ X_{k+1} = \\mathbf{f}(X_k) + \\mathbf{W}_k $$\n", + "$$ \\mathbf{Z}_k = \\mathbf{h}(X_k) + \\mathbf{V}_k $$\n", + "\n", + "Notice that $\\mathbf{f}$ and $\\mathbf{h}$ are now (smooth) non-linear functions.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The Extended Kalman Filter (EKF) attacks this problem by using a local linearization of the Kalman filter via a [Taylors Series expansion](https://en.wikipedia.org/wiki/Taylor_series).\n", + "\n", + "$$ f(X_k, k) \\approx f(x_k^R, k) + \\mathbf{H}_k(X_k - x_k^R) + \\cdots$$\n", + "\n", + "where $\\mathbf{H}_k$ is the Jacobian matrix at time $k$, $x_k^R$ is the previous optimal estimate, and we ignore the higher order terms. At each time step, we compute a Jacobian conditioned the previous predictions (this computation is handled by Pyro under the hood), and use the result to perform a prediction and update.\n", + "\n", + "Omitting the derivations, the modification to the above predictions are now:\n", + "$$ \\hat{X}_k \\approx \\mathbf{f}(X_{k-1}^R)$$\n", + "$$ \\hat{P}_k = \\mathbf{H}_\\mathbf{f}(X_{k-1})P_{k-1}\\mathbf{H}_\\mathbf{f}^T(X_{k-1}) + Q$$\n", + "\n", + "and the updates are now:\n", + "\n", + "$$ X_k \\approx \\hat{X}_k + K_k\\big(z_k - \\mathbf{h}(\\hat{X}_k)\\big)$$\n", + "$$ K_k = \\hat{P}_k \\mathbf{H}_\\mathbf{h}(\\hat{X}_k) \\Big(\\mathbf{H}_\\mathbf{h}(\\hat{X}_k)\\hat{P}_k \\mathbf{H}_\\mathbf{h}(\\hat{X}_k) + R_k\\Big)^{-1} $$\n", + "$$ P_k = \\big(I - K_k \\mathbf{H}_\\mathbf{h}(\\hat{X}_k)\\big)\\hat{P}_K$$\n", + "\n", + "In Pyro, all we need to do is create an `EKFState` object and use its `predict` and `update` methods. Pyro will do exact inference to compute the innovations and we will use SVI to learn a MAP estimate of the position and measurement covariances.\n", + "\n", + "As an example, let's look at an object moving at near-constant velocity in 2-D in a discrete time space over 100 time steps." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import math\n", + "\n", + "import torch\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "from pyro.infer.autoguide import AutoDelta\n", + "from pyro.optim import Adam\n", + "from pyro.infer import SVI, Trace_ELBO, config_enumerate\n", + "from pyro.contrib.tracking.extended_kalman_filter import EKFState\n", + "from pyro.contrib.tracking.distributions import EKFDistribution\n", + "from pyro.contrib.tracking.dynamic_models import NcvContinuous\n", + "from pyro.contrib.tracking.measurements import PositionMeasurement\n", + "\n", + "smoke_test = ('CI' in os.environ)\n", + "assert pyro.__version__.startswith('1.9.1')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "dt = 1e-2\n", + "num_frames = 10\n", + "dim = 4\n", + "\n", + "# Continuous model\n", + "ncv = NcvContinuous(dim, 2.0)\n", + "\n", + "# Truth trajectory\n", + "xs_truth = torch.zeros(num_frames, dim)\n", + "# initial direction\n", + "theta0_truth = 0.0\n", + "# initial state\n", + "with torch.no_grad():\n", + " xs_truth[0, :] = torch.tensor([0.0, 0.0, math.cos(theta0_truth), math.sin(theta0_truth)])\n", + " for frame_num in range(1, num_frames):\n", + " # sample independent process noise\n", + " dx = pyro.sample('process_noise_{}'.format(frame_num), ncv.process_noise_dist(dt))\n", + " xs_truth[frame_num, :] = ncv(xs_truth[frame_num-1, :], dt=dt) + dx" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, let's specify the measurements. Notice that we only measure the positions of the particle." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Measurements\n", + "measurements = []\n", + "mean = torch.zeros(2)\n", + "# no correlations\n", + "cov = 1e-5 * torch.eye(2)\n", + "with torch.no_grad():\n", + " # sample independent measurement noise\n", + " dzs = pyro.sample('dzs', dist.MultivariateNormal(mean, cov).expand((num_frames,)))\n", + " # compute measurement means\n", + " zs = xs_truth[:, :2] + dzs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We'll use a [Delta autoguide](http://docs.pyro.ai/en/dev/infer.autoguide.html#autodelta) to learn MAP estimates of the position and measurement covariances. The `EKFDistribution` computes the joint log density of all of the EKF states given a tensor of sequential measurements." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def model(data):\n", + " # a HalfNormal can be used here as well\n", + " R = pyro.sample('pv_cov', dist.HalfCauchy(2e-6)) * torch.eye(4)\n", + " Q = pyro.sample('measurement_cov', dist.HalfCauchy(1e-6)) * torch.eye(2)\n", + " # observe the measurements\n", + " pyro.sample('track_{}'.format(i), EKFDistribution(xs_truth[0], R, ncv,\n", + " Q, time_steps=num_frames),\n", + " obs=data)\n", + " \n", + "guide = AutoDelta(model) # MAP estimation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "optim = pyro.optim.Adam({'lr': 2e-2})\n", + "svi = SVI(model, guide, optim, loss=Trace_ELBO(retain_graph=True))\n", + "\n", + "pyro.set_rng_seed(0)\n", + "pyro.clear_param_store()\n", + "\n", + "for i in range(250 if not smoke_test else 2):\n", + " loss = svi.step(zs)\n", + " if not i % 10:\n", + " print('loss: ', loss)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# retrieve states for visualization\n", + "R = guide()['pv_cov'] * torch.eye(4)\n", + "Q = guide()['measurement_cov'] * torch.eye(2)\n", + "ekf_dist = EKFDistribution(xs_truth[0], R, ncv, Q, time_steps=num_frames)\n", + "states= ekf_dist.filter_states(zs)" + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/html" + }, + "source": [ + "
\n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + "
\n", + "
\n", + " Figure 1:True track and EKF prediction with error. \n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## References\n", + "\n", + "\\[1\\] Kalman, R. E. *A New Approach to Linear Filtering and Prediction Problems.* 1960\n", + "\n", + "\\[2\\] Welch, Greg, and Bishop, Gary. *An Introduction to the Kalman Filter.* 2006.\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/elections.ipynb b/pyro/source/tutorial/source/elections.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..0784f054ce1134d624fe38c86bd102cc99f75d20 --- /dev/null +++ b/pyro/source/tutorial/source/elections.ipynb @@ -0,0 +1,807 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Predicting the outcome of a US presidential election using Bayesian optimal experimental design\n", + "\n", + "In this tutorial, we explore the use of optimal experimental design techniques to create an optimal polling strategy to predict the outcome of a US presidential election. In a [previous tutorial](http://pyro.ai/examples/working_memory.html), we explored the use of Bayesian optimal experimental design to learn the working memory capacity of a single person. Here, we apply the same concepts to study a whole country.\n", + "\n", + "To begin, we need a Bayesian model of the winner of the election `w`, as well as the outcome `y` of any poll we may plan to conduct. The experimental design is the number of people $n_i$ to poll in each state. To set up our exploratory model, we are going to make a number of simplifying assumptions. We will use historical election data 1976-2012 to construct a plausible prior and the 2016 election as our test set: we imagine that we are conducting polling just before the 2016 election.\n", + "\n", + "## Choosing a prior\n", + "In our model, we include a 51 dimensional latent variabe `alpha`. For each of the 50 states plus DC we define \n", + "\n", + "$$ \\alpha_i = \\text{logit }\\mathbb{P}(\\text{a random voter in state } i \\text{ votes Democrat in the 2016 election}) $$\n", + "\n", + "and we assume all other voters vote Republican. Right before the election, the value of $\\alpha$ is unknown and we wish to estimate it by conducting a poll with $n_i$ people in state $i$ for $i=1, ..., 51$ . The winner $w$ of the election is decided by the Electoral College system. The number of electoral college votes gained by the Democrats in state $i$ is\n", + "$$e_i = \\begin{cases}\n", + "k_i \\text{ if } \\alpha_i > \\frac{1}{2} \\\\\n", + "0 \\text{ otherwise}\n", + "\\end{cases}\n", + "$$(this is a rough approximation of the true system). All other electoral college votes go to the Republicans. Here $k_i$ is the number of electoral college votes alloted to state $i$, which are listed in the following data frame." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# Data path\n", + "BASE_URL = \"https://github.com/pyro-ppl/datasets/blob/master/us_elections/\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Electoral college votes\n", + "State \n", + "AL 9\n", + "AK 3\n", + "AZ 11\n", + "AR 6\n", + "CA 55\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "import torch\n", + "from urllib.request import urlopen\n", + "\n", + "electoral_college_votes = pd.read_pickle(urlopen(BASE_URL + \"electoral_college_votes.pickle?raw=true\"))\n", + "print(electoral_college_votes.head())\n", + "ec_votes_tensor = torch.tensor(electoral_college_votes.values, dtype=torch.float).squeeze()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The winner $w$ of the election is\n", + "\n", + "$$ w = \\begin{cases}\n", + "\\text{Democrats if } \\sum_i e_i > \\frac{1}{2}\\sum_i k_i \\\\\n", + "\\text{Republicans otherwise}\n", + "\\end{cases}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In code, this is expressed as follows" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def election_winner(alpha):\n", + " dem_win_state = (alpha > 0.).float()\n", + " dem_electoral_college_votes = ec_votes_tensor * dem_win_state\n", + " w = (dem_electoral_college_votes.sum(-1) / ec_votes_tensor.sum(-1) > .5).float()\n", + " return w" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We are interested in polling strategies that will help us predict $w$, rather than predicting the more complex state-by-state results $\\alpha$.\n", + "\n", + "To set up a fully Bayesian model, we need a prior for $\\alpha$. We will base the prior on the outcome of some historical presidential elections. Specifically, we'll use the following dataset of state-by-state election results for the presidential elections 1976-2012 inclusive. Note that votes for parties other than Democrats and Republicans have been ignored." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 1976 1980 1984 \n", + " Democrat Republican Democrat Republican Democrat Republican\n", + "State \n", + "AL 659170 504070 636730 654192 551899 872849\n", + "AK 44058 71555 41842 86112 62007 138377\n", + "AZ 295602 418642 246843 529688 333854 681416\n", + "AR 499614 268753 398041 403164 338646 534774\n", + "CA 3742284 3882244 3083661 4524858 3922519 5467009\n" + ] + } + ], + "source": [ + "frame = pd.read_pickle(urlopen(BASE_URL + \"us_presidential_election_data_historical.pickle?raw=true\"))\n", + "print(frame[[1976, 1980, 1984]].head())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Based on this data alone, we will base our prior mean for $\\alpha$ solely on the 2012 election. Our model will be based on logistic regression, so we will transform the probability of voting Democrat using the logit function. Specifically, we'll choose a prior mean as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "results_2012 = torch.tensor(frame[2012].values, dtype=torch.float)\n", + "prior_mean = torch.log(results_2012[..., 0] / results_2012[..., 1])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our prior distribution for $\\alpha$ will be a multivariate Normal with mean `prior_mean`. The only thing left to decide upon is the covariance matrix. Since `alpha` values are logit-transformed, the covariance will be defined in logit space as well.\n", + "\n", + "*Aside*: The prior covariance is important in a number of ways. If we allow too much variance, the prior will be uncertain about the outcome in every state, and require polling everywhere. If we allow too little variance, we may be caught off-guard by an unexpected electoral outcome. If we assume states are independent, then we will not be able to pool information across states; but assume too much correlation and we could too faithfully base predictions about one state from poll results in another." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We select the prior covariance by taking the empirical covariance from the elections 1976 - 2012 and adding a small value `0.01` to the diagonal." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "idx = 2 * torch.arange(10)\n", + "as_tensor = torch.tensor(frame.values, dtype=torch.float)\n", + "logits = torch.log(as_tensor[..., idx] / as_tensor[..., idx + 1]).transpose(0, 1)\n", + "mean = logits.mean(0)\n", + "sample_covariance = (1/(logits.shape[0] - 1)) * (\n", + " (logits.unsqueeze(-1) - mean) * (logits.unsqueeze(-2) - mean)\n", + ").sum(0)\n", + "prior_covariance = sample_covariance + 0.01 * torch.eye(sample_covariance.shape[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setting up the model\n", + "We are now in a position to define our model. At a high-level the model works as follows:\n", + "\n", + "- $\\alpha$ is multivariate Normal\n", + "- $w$ is a deterministic function of $\\alpha$\n", + "- $y_i$ is Binomial($n_i$, sigmoid($\\alpha_i$)) so we are assuming that people respond to the poll in exactly the same way that they will vote on election day\n", + " \n", + "In Pyro, this model looks as follows" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "import pyro\n", + "import pyro.distributions as dist\n", + "\n", + "def model(polling_allocation):\n", + " # This allows us to run many copies of the model in parallel\n", + " with pyro.plate_stack(\"plate_stack\", polling_allocation.shape[:-1]):\n", + " # Begin by sampling alpha\n", + " alpha = pyro.sample(\"alpha\", dist.MultivariateNormal(\n", + " prior_mean, covariance_matrix=prior_covariance))\n", + " \n", + " # Sample y conditional on alpha\n", + " poll_results = pyro.sample(\"y\", dist.Binomial(\n", + " polling_allocation, logits=alpha).to_event(1))\n", + " \n", + " # Now compute w according to the (approximate) electoral college formula\n", + " dem_win = election_winner(alpha)\n", + " pyro.sample(\"w\", dist.Delta(dem_win))\n", + " \n", + " return poll_results, dem_win, alpha" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Understanding the prior\n", + "\n", + "Before we go any further, we're going to study the model to check it matches with our intuition about US presidential elections.\n", + "\n", + "First of all, let's look at an upper and lower confidence limit for the proportion of voters who will vote Democrat in each state." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Lower confidence limit Upper confidence limit\n", + "State \n", + "AL 0.272258 0.517586\n", + "AK 0.330472 0.529117\n", + "AZ 0.321011 0.593634\n", + "AR 0.214348 0.576079\n", + "CA 0.458618 0.756616\n" + ] + } + ], + "source": [ + "std = prior_covariance.diag().sqrt()\n", + "ci = pd.DataFrame({\"State\": frame.index,\n", + " \"Lower confidence limit\": torch.sigmoid(prior_mean - 1.96 * std), \n", + " \"Upper confidence limit\": torch.sigmoid(prior_mean + 1.96 * std)}\n", + " ).set_index(\"State\")\n", + "print(ci.head())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The prior on $\\alpha$ implicitly defines our prior on `w`. We can investigate this prior by simulating many times from the prior." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Prior probability of Dem win 0.6799200177192688\n" + ] + } + ], + "source": [ + "_, dem_wins, alpha_samples = model(torch.ones(100000, 51))\n", + "prior_w_prob = dem_wins.float().mean()\n", + "print(\"Prior probability of Dem win\", prior_w_prob.item())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since our prior is based on 2012 and the Democrats won in 2012, it makes sense that we would favour a Democrat win in 2016 (this is before we have seen *any* polling data or incorporated any other information)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also investigate which states, a priori, are most marginal." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Democrat win probability\n", + "State \n", + "FL 0.52501\n", + "NC 0.42730\n", + "NH 0.61536\n", + "OH 0.61997\n", + "VA 0.63738\n" + ] + } + ], + "source": [ + "dem_prob = (alpha_samples > 0.).float().mean(0)\n", + "marginal = torch.argsort((dem_prob - .5).abs()).numpy()\n", + "prior_prob_dem = pd.DataFrame({\"State\": frame.index[marginal],\n", + " \"Democrat win probability\": dem_prob.numpy()[marginal]}\n", + " ).set_index('State')\n", + "print(prior_prob_dem.head())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is a sanity check, and seems to accord with our intuitions. Florida is frequently an important swing state and is top of our list of marginal states under the prior. We can also see states such as Pennsylvania and Wisconsin near the top of the list -- we know that these were instrumental in the 2016 election." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, we take a closer look at our prior covariance. Specifically, we examine states that we expect to be more or less correlated. Let's begin by looking at states in New England" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "State ME VT NH MA RI CT\n", + "State \n", + "ME 1.000000 0.817323 0.857351 0.800276 0.822024 0.825383\n", + "VT 0.817323 1.000000 0.834723 0.716342 0.754026 0.844140\n", + "NH 0.857351 0.834723 1.000000 0.871370 0.803803 0.873496\n", + "MA 0.800276 0.716342 0.871370 1.000000 0.813665 0.835148\n", + "RI 0.822024 0.754026 0.803803 0.813665 1.000000 0.849644\n", + "CT 0.825383 0.844140 0.873496 0.835148 0.849644 1.000000\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "\n", + "\n", + "def correlation(cov):\n", + " return cov / np.sqrt(np.expand_dims(np.diag(cov.values), 0) * np.expand_dims(np.diag(cov.values), 1))\n", + " \n", + "\n", + "new_england_states = ['ME', 'VT', 'NH', 'MA', 'RI', 'CT']\n", + "cov_as_frame = pd.DataFrame(prior_covariance.numpy(), columns=frame.index).set_index(frame.index)\n", + "ne_cov = cov_as_frame.loc[new_england_states, new_england_states]\n", + "ne_corr = correlation(ne_cov)\n", + "print(ne_corr)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Clearly, these states tend to vote similarly. We can also examine some states of the South which we also expect to be similar." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "State LA MS AL GA SC\n", + "State \n", + "LA 1.000000 0.554020 0.651511 0.523784 0.517672\n", + "MS 0.554020 1.000000 0.699459 0.784371 0.769198\n", + "AL 0.651511 0.699459 1.000000 0.829908 0.723015\n", + "GA 0.523784 0.784371 0.829908 1.000000 0.852818\n", + "SC 0.517672 0.769199 0.723015 0.852818 1.000000\n" + ] + } + ], + "source": [ + "southern_states = ['LA', 'MS', 'AL', 'GA', 'SC']\n", + "southern_cov = cov_as_frame.loc[southern_states, southern_states]\n", + "southern_corr = correlation(southern_cov)\n", + "print(southern_corr)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These correlation matrices show that, as expected, logical groupings of states tend to have similar voting trends. We now look at the correlations *between* the groups (e.g. between Maine and Louisiana)." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "State LA MS AL GA SC\n", + "State \n", + "ME 0.329438 0.309352 -0.000534 0.122375 0.333679\n", + "VT -0.036079 0.009653 -0.366604 -0.202065 0.034438\n", + "NH 0.234105 0.146826 -0.105781 0.008411 0.233084\n", + "MA 0.338411 0.122257 -0.059107 -0.025730 0.182290\n", + "RI 0.314088 0.188819 -0.066307 -0.022142 0.186955\n", + "CT 0.139021 0.074646 -0.205797 -0.107684 0.125023\n" + ] + } + ], + "source": [ + "cross_cov = cov_as_frame.loc[new_england_states + southern_states, new_england_states + southern_states]\n", + "cross_corr = correlation(cross_cov)\n", + "print(cross_corr.loc[new_england_states, southern_states])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, we see weaker correlation between New England states and Southern states than the correlation within those grouping. Again, this is as expected." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Measuring the expected information gain of a polling strategy\n", + "The prior we have set up appears to accord, at least approximately, with intuition. However, we now want to add a second source of information from polling. We aim to use our prior to select a polling strategy that will be most informative about our target $w$. A polling strategy, in this simplified set-up, is the number of people to poll in each state. (We ignore any other covariates such as regional variation inside states, demographics, etc.) We might imagine that polling 1000 people in Florida (the most marginal state), will be much more effective than polling 1000 people in DC (the least marginal state). That's because the outcome in DC is already quite predictable, just based on our prior, whereas the outcome in Florida is really up for grabs.\n", + "\n", + "In fact, the information that our model will gain about $w$ based on conducting a poll with design $d$ and getting outcome $y$ can be described mathematically as follows:\n", + "\n", + "$$\\text{IG}(d, y) = KL(p(w|y,d)||p(w)).$$\n", + "\n", + "Since the outcome of the poll is at present unknown, we consider the expected information gain [1]\n", + "\n", + "$$\\text{EIG}(d) = \\mathbb{E}_{p(y|d)}[KL(p(w|y,d)||p(w))].$$\n", + "\n", + "### Variational estimators of EIG\n", + "\n", + "In the [working memory tutorial](http://pyro.ai/examples/working_memory.html), we used the 'marginal' estimator to find the EIG. This involved estimating the marginal density $p(y|d)$. In this experiment, that would be relatively difficult: $y$ is 51-dimensional with some rather tricky constraints that make modelling its density difficult. Furthermore, the marginal estimator requires us to know $p(y|w)$ analytically, which we do not.\n", + "\n", + "Fortunately, other variational estimators of EIG exist: see [2] for more details. One such variational estimator is the 'posterior' estimator, based on the following representation\n", + "\n", + "$$\\text{EIG}(d) = \\max_q \\mathbb{E}_{p(w, y|d)}\\left[\\log q(w|y) \\right] + H(p(w)).$$\n", + "\n", + "Here, $H(p(w))$ is the prior entropy on $w$ (we can compute this quite easily). The important term involves the variational approximation $q(w|y)$. This $q$ can be used to perform amortized variational inference. Specifically, it takes as input $y$ and outputs a distribution over $w$. The bound is maximised when $q(w|y) = p(w|y)$ [2]. Since $w$ is a binary random variable, we can think of $q$ as a classifier that tries to decide, based on the poll outcome, who the eventual winner of the election will be. In this notebook, $q$ will be a neural classifier. Training a neural classifier is a fair bit easier than learning the marginal density of $y$, so we adopt this method to estimate the EIG in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "from torch import nn\n", + "\n", + "class OutcomePredictor(nn.Module):\n", + " \n", + " def __init__(self):\n", + " super().__init__()\n", + " self.h1 = nn.Linear(51, 64)\n", + " self.h2 = nn.Linear(64, 64)\n", + " self.h3 = nn.Linear(64, 1)\n", + " \n", + " def compute_dem_probability(self, y):\n", + " z = nn.functional.relu(self.h1(y))\n", + " z = nn.functional.relu(self.h2(z))\n", + " return self.h3(z)\n", + " \n", + " def forward(self, y_dict, design, observation_labels, target_labels):\n", + " \n", + " pyro.module(\"posterior_guide\", self)\n", + " \n", + " y = y_dict[\"y\"]\n", + " dem_prob = self.compute_dem_probability(y).squeeze()\n", + " pyro.sample(\"w\", dist.Bernoulli(logits=dem_prob))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We'll now use this to compute the EIG for several possible polling strategies. First, we need to compute the $H(p(w))$ term in the above formula." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "prior_entropy = dist.Bernoulli(prior_w_prob).entropy()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's consider four simple polling strategies.\n", + " 1. Poll 1000 people in Florida only\n", + " 2. Poll 1000 people in DC only\n", + " 3. Poll 1000 people spread evenly over the US\n", + " 4. Using a polling allocation that focuses on swing states" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "from collections import OrderedDict\n", + "\n", + "poll_in_florida = torch.zeros(51)\n", + "poll_in_florida[9] = 1000\n", + "\n", + "poll_in_dc = torch.zeros(51)\n", + "poll_in_dc[8] = 1000\n", + "\n", + "uniform_poll = (1000 // 51) * torch.ones(51)\n", + "\n", + "# The swing score measures how close the state is to 50/50\n", + "swing_score = 1. / (.5 - torch.tensor(prior_prob_dem.sort_values(\"State\").values).squeeze()).abs()\n", + "swing_poll = 1000 * swing_score / swing_score.sum()\n", + "swing_poll = swing_poll.round()\n", + "\n", + "poll_strategies = OrderedDict([(\"Florida\", poll_in_florida),\n", + " (\"DC\", poll_in_dc),\n", + " (\"Uniform\", uniform_poll),\n", + " (\"Swing\", swing_poll)])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We'll now compute the EIG for each option. Since this requires training the network (four times) it may take several minutes." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Florida 0.3088182508945465\n", + "DC 0.000973820686340332\n", + "Uniform 0.30316317081451416\n", + "Swing 0.3254041075706482\n" + ] + } + ], + "source": [ + "from pyro.contrib.oed.eig import posterior_eig\n", + "from pyro.optim import Adam\n", + "\n", + "eigs = {}\n", + "best_strategy, best_eig = None, 0\n", + "\n", + "for strategy, allocation in poll_strategies.items():\n", + " print(strategy, end=\" \")\n", + " guide = OutcomePredictor()\n", + " pyro.clear_param_store()\n", + " # To reduce noise when comparing designs, we will use the precomputed value of H(p(w))\n", + " # By passing eig=False, we tell Pyro not to estimate the prior entropy on each run\n", + " # The return value of `posterior_eig` is then -E_p(w,y)[log q(w|y)]\n", + " ape = posterior_eig(model, allocation, \"y\", \"w\", 10, 12500, guide, \n", + " Adam({\"lr\": 0.001}), eig=False, final_num_samples=10000)\n", + " eigs[strategy] = prior_entropy - ape\n", + " print(eigs[strategy].item())\n", + " if eigs[strategy] > best_eig:\n", + " best_strategy, best_eig = strategy, eigs[strategy]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Running the experiment\n", + "\n", + "We have now scored our four candidate designs and can choose the best one to use to actually gather new data. In this notebook, we will simulate the new data using the results from the 2016 election. Specifically, we will assume that the outcome of the poll comes from our model, where we condition the value of `alpha` to correspond to the actual results in 2016." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, we retrain $q$ with the chosen polling strategy." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor(0.3653, grad_fn=)" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "best_allocation = poll_strategies[best_strategy]\n", + "pyro.clear_param_store()\n", + "guide = OutcomePredictor()\n", + "posterior_eig(model, best_allocation, \"y\", \"w\", 10, 12500, guide, \n", + " Adam({\"lr\": 0.001}), eig=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The value of $\\alpha$ implied by the 2016 results is computed in the same way we computed the prior." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "test_data = pd.read_pickle(urlopen(BASE_URL + \"us_presidential_election_data_test.pickle?raw=true\"))\n", + "results_2016 = torch.tensor(test_data.values, dtype=torch.float)\n", + "true_alpha = torch.log(results_2016[..., 0] / results_2016[..., 1])" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "conditioned_model = pyro.condition(model, data={\"alpha\": true_alpha})\n", + "y, _, _ = conditioned_model(best_allocation)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's view the outcome of our poll." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Number of people polled Number who said they would vote Democrat\n", + "State \n", + "FL 191.0 89.0\n", + "NE 66.0 30.0\n", + "NJ 41.0 22.0\n", + "OH 40.0 19.0\n", + "VT 35.0 22.0\n" + ] + } + ], + "source": [ + "outcome = pd.DataFrame({\"State\": frame.index,\n", + " \"Number of people polled\": best_allocation, \n", + " \"Number who said they would vote Democrat\": y}\n", + " ).set_index(\"State\")\n", + "print(outcome.sort_values([\"Number of people polled\", \"State\"], ascending=[False, True]).head())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Analysing the data\n", + "Having collected our data, we can now perform inference under our model to obtain the posterior probability of a Democrat win. There are many ways to perform the inference: for instance we could use variational inference with Pyro's `SVI` or MCMC such as Pyro's `NUTS`. Using these methods, we would compute the posterior over `alpha`, and use this to obtain the posterior over `w`.\n", + "\n", + "However, a quick way to analyze the data is to use the neural network we have already trained. At convergence, we expect the network to give a good approximation to the true posterior, i.e. $q(w|y) \\approx p(w|y)$." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "q_w = torch.sigmoid(guide.compute_dem_probability(y).squeeze().detach())" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Prior probability of Democrat win 0.6799200177192688\n", + "Posterior probability of Democrat win 0.40527692437171936\n" + ] + } + ], + "source": [ + "print(\"Prior probability of Democrat win\", prior_w_prob.item())\n", + "print(\"Posterior probability of Democrat win\", q_w.item())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This completes the whole process of experimental design, obtaining data, and data analysis. By using our analysis model and prior to design the polling strategy, we were able to choose the design that led to the greatest expected gain in information." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Conclusions\n", + "\n", + "In this tutorial, we showed how optimal experimental design principles can be applied to electoral polling. If we have the option of first designing the polling strategy using our prior, this can help lead to better predictions once we have collected our data.\n", + "\n", + "Our model could be enhanced in a number of ways: a useful guide to the kinds of models used in political science can be found in [3]. Our optimal design strategy will only ever be as good as our prior, so there is certainly a lot of use in investing time in choosing a good prior.\n", + "\n", + "It might also be possible to search over the possible polling strategies in a more sophisticated way. For instance, simulated annealing [4] is one technique that can be used for optimization in high-dimensional discrete spaces.\n", + "\n", + "Our polling strategies were chosen with one objective in mind: predict the final outcome $w$. If, on the other hand, we wanted to make more fine-grained predictions, we could use the same procedure but treat $\\alpha$ as our target instead of $w$.\n", + "\n", + "Finally, it's worth noting that there is a connection to Bayesian model selection: specifically, in a different model we might have $w$ a binary random variable to choose between different sub-models. Although conceptually different, our election set-up and the model selection set-up share many mathematical features which means that a similar experimental design approach could be used in both cases." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## References\n", + "\n", + "[1] Chaloner, K. and Verdinelli, I., 1995. **Bayesian experimental design: A review.** Statistical Science, pp.273-304.\n", + "\n", + "[2] Foster, A., Jankowiak, M., Bingham, E., Horsfall, P., Teh, Y.W., Rainforth, T. and Goodman, N., 2019. **Variational Bayesian Optimal Experimental Design.** Advances in Neural Information Processing Systems 2019 (to appear).\n", + "\n", + "[3] Gelman, A., Carlin, J.B., Stern, H.S., Dunson, D.B., Vehtari, A. and Rubin, D.B., 2013. **Bayesian data analysis.** Chapman and Hall/CRC.\n", + "\n", + "[4] Kirkpatrick, S., Gelatt, C.D. and Vecchi, M.P., 1983. **Optimization by simulated annealing.** Science, 220(4598), pp.671-680." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/enumeration.ipynb b/pyro/source/tutorial/source/enumeration.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..861229443c3f34e8cf44dee3bc0b7b901901f60f --- /dev/null +++ b/pyro/source/tutorial/source/enumeration.ipynb @@ -0,0 +1,736 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Inference with Discrete Latent Variables\n", + "\n", + "This tutorial describes Pyro's enumeration strategy for discrete latent variable models.\n", + "This tutorial assumes the reader is already familiar with the [Tensor Shapes Tutorial](http://pyro.ai/examples/tensor_shapes.html).\n", + "\n", + "#### Summary \n", + "\n", + "- Pyro implements automatic enumeration over discrete latent variables.\n", + "- This strategy can be used alone or inside SVI (via [TraceEnum_ELBO](http://docs.pyro.ai/en/dev/inference_algos.html#pyro.infer.traceenum_elbo.TraceEnum_ELBO)), HMC, or NUTS.\n", + "- The standalone [infer_discrete](http://docs.pyro.ai/en/dev/inference_algos.html#pyro.infer.discrete.infer_discrete) can generate samples or MAP estimates.\n", + "- Annotate a sample site `infer={\"enumerate\": \"parallel\"}` to trigger enumeration.\n", + "- If a sample site determines downstream structure, instead use `{\"enumerate\": \"sequential\"}`.\n", + "- Write your models to allow arbitrarily deep batching on the left, e.g. use broadcasting.\n", + "- Inference cost is exponential in treewidth, so try to write models with narrow treewidth.\n", + "- If you have trouble, ask for help on [forum.pyro.ai](https://forum.pyro.ai)!\n", + "\n", + "#### Table of contents\n", + "\n", + "- [Overview](#Overview)\n", + "- [Mechanics of enumeration](#Mechanics-of-enumeration)\n", + " - [Multiple latent variables](#Multiple-latent-variables)\n", + " - [Examining discrete latent states](#Examining-discrete-latent-states)\n", + " - [Indexing with enumerated variables](#Indexing-with-enumerated-variables)\n", + "- [Plates and enumeration](#Plates-and-enumeration)\n", + " - [Dependencies among plates](#Dependencies-among-plates)\n", + "- [Time series example](#Time-series-example)\n", + " - [How to enumerate more than 25 variables](#How-to-enumerate-more-than-25-variables)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import torch\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "from torch.distributions import constraints\n", + "from pyro import poutine\n", + "from pyro.infer import SVI, Trace_ELBO, TraceEnum_ELBO, config_enumerate, infer_discrete\n", + "from pyro.infer.autoguide import AutoNormal\n", + "from pyro.ops.indexing import Vindex\n", + "\n", + "smoke_test = ('CI' in os.environ)\n", + "assert pyro.__version__.startswith('1.9.1')\n", + "pyro.set_rng_seed(0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Overview \n", + "\n", + "Pyro's enumeration strategy ([Obermeyer et al. 2019](https://arxiv.org/abs/1902.03210)) encompasses popular algorithms including variable elimination, exact message passing, forward-filter-backward-sample, inside-out, Baum-Welch, and many other special-case algorithms. Aside from enumeration, Pyro implements a number of inference strategies including variational inference ([SVI](http://docs.pyro.ai/en/dev/inference_algos.html)) and monte carlo ([HMC](http://docs.pyro.ai/en/dev/mcmc.html#pyro.infer.mcmc.HMC) and [NUTS](http://docs.pyro.ai/en/dev/mcmc.html#pyro.infer.mcmc.NUTS)). Enumeration can be used either as a stand-alone strategy via [infer_discrete](http://docs.pyro.ai/en/dev/inference_algos.html#pyro.infer.discrete.infer_discrete), or as a component of other strategies. Thus enumeration allows Pyro to marginalize out discrete latent variables in HMC and SVI models, and to use variational enumeration of discrete variables in SVI guides." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Mechanics of enumeration \n", + "\n", + "The core idea of enumeration is to interpret discrete [pyro.sample](http://docs.pyro.ai/en/dev/primitives.html#pyro.sample) statements as full enumeration rather than random sampling. Other inference algorithms can then sum out the enumerated values. For example a sample statement might return a tensor of scalar shape under the standard \"sample\" interpretation (we'll illustrate with trivial model and guide):" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "guide z = 4\n", + "model z = 4\n" + ] + } + ], + "source": [ + "def model():\n", + " z = pyro.sample(\"z\", dist.Categorical(torch.ones(5)))\n", + " print(f\"model z = {z}\")\n", + "\n", + "def guide():\n", + " z = pyro.sample(\"z\", dist.Categorical(torch.ones(5)))\n", + " print(f\"guide z = {z}\")\n", + "\n", + "elbo = Trace_ELBO()\n", + "elbo.loss(model, guide);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "However under the enumeration interpretation, the same sample site will return a fully enumerated set of values, based on its distribution's [.enumerate_support()](https://pytorch.org/docs/stable/distributions.html#torch.distributions.distribution.Distribution.enumerate_support) method." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "guide z = tensor([0, 1, 2, 3, 4])\n", + "model z = tensor([0, 1, 2, 3, 4])\n" + ] + } + ], + "source": [ + "elbo = TraceEnum_ELBO(max_plate_nesting=0)\n", + "elbo.loss(model, config_enumerate(guide, \"parallel\"));" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that we've used \"parallel\" enumeration to enumerate along a new tensor dimension. This is cheap and allows Pyro to parallelize computation, but requires downstream program structure to avoid branching on the value of `z`. To support dynamic program structure, you can instead use \"sequential\" enumeration, which runs the entire model,guide pair once per sample value, but requires running the model multiple times." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "guide z = 4\n", + "model z = 4\n", + "guide z = 3\n", + "model z = 3\n", + "guide z = 2\n", + "model z = 2\n", + "guide z = 1\n", + "model z = 1\n", + "guide z = 0\n", + "model z = 0\n" + ] + } + ], + "source": [ + "elbo = TraceEnum_ELBO(max_plate_nesting=0)\n", + "elbo.loss(model, config_enumerate(guide, \"sequential\"));" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Parallel enumeration is cheaper but more complex than sequential enumeration, so we'll focus the rest of this tutorial on the parallel variant. Note that both forms can be interleaved.\n", + "\n", + "### Multiple latent variables \n", + "\n", + "We just saw that a single discrete sample site can be enumerated via nonstandard interpretation. A model with a single discrete latent variable is a mixture model. Models with multiple discrete latent variables can be more complex, including HMMs, CRFs, DBNs, and other structured models. In models with multiple discrete latent variables, Pyro enumerates each variable in a different tensor dimension (counting from the right; see [Tensor Shapes Tutorial](http://pyro.ai/examples/tensor_shapes.html)). This allows Pyro to determine the dependency graph among variables and then perform cheap exact inference using variable elimination algorithms.\n", + "\n", + "To understand enumeration dimension allocation, consider the following model, where here we collapse variables out of the model, rather than enumerate them in the guide." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sampling:\n", + " model x.shape = torch.Size([])\n", + " model y.shape = torch.Size([])\n", + " model z.shape = torch.Size([])\n", + "Enumerated Inference:\n", + " model x.shape = torch.Size([3])\n", + " model y.shape = torch.Size([3, 1])\n", + " model z.shape = torch.Size([3, 1, 1])\n" + ] + } + ], + "source": [ + "@config_enumerate\n", + "def model():\n", + " p = pyro.param(\"p\", torch.randn(3, 3).exp(), constraint=constraints.simplex)\n", + " x = pyro.sample(\"x\", dist.Categorical(p[0]))\n", + " y = pyro.sample(\"y\", dist.Categorical(p[x]))\n", + " z = pyro.sample(\"z\", dist.Categorical(p[y]))\n", + " print(f\" model x.shape = {x.shape}\")\n", + " print(f\" model y.shape = {y.shape}\")\n", + " print(f\" model z.shape = {z.shape}\")\n", + " return x, y, z\n", + " \n", + "def guide():\n", + " pass\n", + "\n", + "pyro.clear_param_store()\n", + "print(\"Sampling:\")\n", + "model()\n", + "print(\"Enumerated Inference:\")\n", + "elbo = TraceEnum_ELBO(max_plate_nesting=0)\n", + "elbo.loss(model, guide);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Examining discrete latent states \n", + "\n", + "While enumeration in SVI allows fast learning of parameters like `p` above, it does not give access to predicted values of the discrete latent variables like `x,y,z` above. We can access these using a standalone [infer_discrete](http://docs.pyro.ai/en/dev/inference_algos.html#pyro.infer.discrete.infer_discrete) handler. In this case the guide was trivial, so we can simply wrap the model in `infer_discrete`. We need to pass a `first_available_dim` argument to tell `infer_discrete` which dimensions are available for enumeration; this is related to the `max_plate_nesting` arg of `TraceEnum_ELBO` via\n", + "```\n", + "first_available_dim = -1 - max_plate_nesting\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " model x.shape = torch.Size([3])\n", + " model y.shape = torch.Size([3, 1])\n", + " model z.shape = torch.Size([3, 1, 1])\n", + " model x.shape = torch.Size([])\n", + " model y.shape = torch.Size([])\n", + " model z.shape = torch.Size([])\n", + "x = 2\n", + "y = 1\n", + "z = 0\n" + ] + } + ], + "source": [ + "serving_model = infer_discrete(model, first_available_dim=-1)\n", + "x, y, z = serving_model() # takes the same args as model(), here no args\n", + "print(f\"x = {x}\")\n", + "print(f\"y = {y}\")\n", + "print(f\"z = {z}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that under the hood `infer_discrete` runs the model twice: first in forward-filter mode where sites are enumerated, then in replay-backward-sample model where sites are sampled. `infer_discrete` can also perform MAP inference by passing `temperature=0`. Note that while `infer_discrete` produces correct posterior samples, it does not currently produce correct logprobs, and should not be used in other gradient-based inference algorthms." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Indexing with enumerated variables\n", + "\n", + "It can be tricky to use [advanced indexing](https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html) to select an element of a tensor using one or more enumerated variables. This is especially true in Pyro models where your model's indexing operations need to work in multiple interpretations: both sampling from the model (to generate data) and during enumerated inference. For example, suppose a plated random variable `z` depends on two different random variables:\n", + "```py\n", + "p = pyro.param(\"p\", torch.randn(5, 4, 3, 2).exp(),\n", + " constraint=constraints.simplex)\n", + "x = pyro.sample(\"x\", dist.Categorical(torch.ones(4)))\n", + "y = pyro.sample(\"y\", dist.Categorical(torch.ones(3)))\n", + "with pyro.plate(\"z_plate\", 5):\n", + " p_xy = p[..., x, y, :] # Not compatible with enumeration!\n", + " z = pyro.sample(\"z\", dist.Categorical(p_xy)\n", + "```\n", + "Due to advanced indexing semantics, the expression `p[..., x, y, :]` will work correctly without enumeration, but is incorrect when `x` or `y` is enumerated. Pyro provides a simple way to index correctly, but first let's see how to correctly index using PyTorch's advanced indexing without Pyro:\n", + "```py\n", + "# Compatible with enumeration, but not recommended:\n", + "p_xy = p[torch.arange(5, device=p.device).reshape(5, 1),\n", + " x.unsqueeze(-1),\n", + " y.unsqueeze(-1),\n", + " torch.arange(2, device=p.device)]\n", + "```\n", + "Pyro provides a helper [Vindex()[]](http://docs.pyro.ai/en/dev/ops.html#pyro.ops.indexing.Vindex) to use enumeration-compatible advanced indexing semantics rather than standard PyTorch/NumPy semantics. (Note the `Vindex` name and semantics follow the Numpy Enhancement Proposal [NEP 21](https://numpy.org/neps/nep-0021-advanced-indexing.html)). `Vindex()[]` makes the `.__getitem__()` operator broadcast like other familiar operators `+`, `*` etc. Using `Vindex()[]` we can write the same expression as if `x` and `y` were numbers (i.e. not enumerated):\n", + "```py\n", + "# Recommended syntax compatible with enumeration:\n", + "p_xy = Vindex(p)[..., x, y, :]\n", + "```\n", + "Here is a complete example:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sampling:\n", + " p.shape = torch.Size([5, 4, 3, 2])\n", + " x.shape = torch.Size([])\n", + " y.shape = torch.Size([])\n", + " p_xy.shape = torch.Size([5, 2])\n", + " z.shape = torch.Size([5])\n", + "Enumerated Inference:\n", + " p.shape = torch.Size([5, 4, 3, 2])\n", + " x.shape = torch.Size([4, 1])\n", + " y.shape = torch.Size([3, 1, 1])\n", + " p_xy.shape = torch.Size([3, 4, 5, 2])\n", + " z.shape = torch.Size([2, 1, 1, 1])\n" + ] + } + ], + "source": [ + "@config_enumerate\n", + "def model():\n", + " p = pyro.param(\"p\", torch.randn(5, 4, 3, 2).exp(), constraint=constraints.simplex)\n", + " x = pyro.sample(\"x\", dist.Categorical(torch.ones(4)))\n", + " y = pyro.sample(\"y\", dist.Categorical(torch.ones(3)))\n", + " with pyro.plate(\"z_plate\", 5):\n", + " p_xy = Vindex(p)[..., x, y, :]\n", + " z = pyro.sample(\"z\", dist.Categorical(p_xy))\n", + " print(f\" p.shape = {p.shape}\")\n", + " print(f\" x.shape = {x.shape}\")\n", + " print(f\" y.shape = {y.shape}\")\n", + " print(f\" p_xy.shape = {p_xy.shape}\")\n", + " print(f\" z.shape = {z.shape}\")\n", + " return x, y, z\n", + " \n", + "def guide():\n", + " pass\n", + "\n", + "pyro.clear_param_store()\n", + "print(\"Sampling:\")\n", + "model()\n", + "print(\"Enumerated Inference:\")\n", + "elbo = TraceEnum_ELBO(max_plate_nesting=1)\n", + "elbo.loss(model, guide);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When enumering within a plate (as described in the next section) ``Vindex`` can also be used together with capturing the plate index via ``with pyro.plate(...) as i`` to index into batch dimensions. Here's an example with nontrivial event dimensions due to the ``Dirichlet`` distribution." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sampling:\n", + " p.shape = torch.Size([5, 4, 3])\n", + " c.shape = torch.Size([6])\n", + " vdx.shape = torch.Size([5])\n", + " pc.shape = torch.Size([5, 6, 3])\n", + " x.shape = torch.Size([5, 6])\n", + "Enumerated Inference:\n", + " p.shape = torch.Size([5, 4, 3])\n", + " c.shape = torch.Size([4, 1, 1])\n", + " vdx.shape = torch.Size([5])\n", + " pc.shape = torch.Size([4, 5, 1, 3])\n", + " x.shape = torch.Size([5, 6])\n" + ] + } + ], + "source": [ + "@config_enumerate\n", + "def model():\n", + " data_plate = pyro.plate(\"data_plate\", 6, dim=-1)\n", + " feature_plate = pyro.plate(\"feature_plate\", 5, dim=-2)\n", + " component_plate = pyro.plate(\"component_plate\", 4, dim=-1)\n", + " with feature_plate: \n", + " with component_plate:\n", + " p = pyro.sample(\"p\", dist.Dirichlet(torch.ones(3)))\n", + " with data_plate:\n", + " c = pyro.sample(\"c\", dist.Categorical(torch.ones(4)))\n", + " with feature_plate as vdx: # Capture plate index.\n", + " pc = Vindex(p)[vdx[..., None], c, :] # Reshape it and use in Vindex.\n", + " x = pyro.sample(\"x\", dist.Categorical(pc),\n", + " obs=torch.zeros(5, 6, dtype=torch.long))\n", + " print(f\" p.shape = {p.shape}\")\n", + " print(f\" c.shape = {c.shape}\")\n", + " print(f\" vdx.shape = {vdx.shape}\")\n", + " print(f\" pc.shape = {pc.shape}\")\n", + " print(f\" x.shape = {x.shape}\")\n", + "\n", + "def guide():\n", + " feature_plate = pyro.plate(\"feature_plate\", 5, dim=-2)\n", + " component_plate = pyro.plate(\"component_plate\", 4, dim=-1)\n", + " with feature_plate, component_plate:\n", + " pyro.sample(\"p\", dist.Dirichlet(torch.ones(3)))\n", + " \n", + "pyro.clear_param_store()\n", + "print(\"Sampling:\")\n", + "model()\n", + "print(\"Enumerated Inference:\")\n", + "elbo = TraceEnum_ELBO(max_plate_nesting=2)\n", + "elbo.loss(model, guide);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plates and enumeration \n", + "\n", + "Pyro [plates](http://docs.pyro.ai/en/dev/primitives.html#pyro.plate) express conditional independence among random variables. Pyro's enumeration strategy can take advantage of plates to reduce the high cost (exponential in the size of the plate) of enumerating a cartesian product down to a low cost (linear in the size of the plate) of enumerating conditionally independent random variables in lock-step. This is especially important for e.g. minibatched data.\n", + "\n", + "To illustrate, consider a gaussian mixture model with shared variance and different mean." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sampling:\n", + " Running model with 10 data points\n", + " x.shape = torch.Size([10])\n", + " dist.Normal(loc[x], scale).batch_shape = torch.Size([10])\n", + "Enumerated Inference:\n", + " Running model with 10 data points\n", + " x.shape = torch.Size([10])\n", + " dist.Normal(loc[x], scale).batch_shape = torch.Size([10])\n", + " Running model with 10 data points\n", + " x.shape = torch.Size([3, 1])\n", + " dist.Normal(loc[x], scale).batch_shape = torch.Size([3, 1])\n" + ] + } + ], + "source": [ + "@config_enumerate\n", + "def model(data, num_components=3):\n", + " print(f\" Running model with {len(data)} data points\")\n", + " p = pyro.sample(\"p\", dist.Dirichlet(0.5 * torch.ones(num_components)))\n", + " scale = pyro.sample(\"scale\", dist.LogNormal(0, num_components))\n", + " with pyro.plate(\"components\", num_components):\n", + " loc = pyro.sample(\"loc\", dist.Normal(0, 10))\n", + " with pyro.plate(\"data\", len(data)):\n", + " x = pyro.sample(\"x\", dist.Categorical(p))\n", + " print(\" x.shape = {}\".format(x.shape))\n", + " pyro.sample(\"obs\", dist.Normal(loc[x], scale), obs=data)\n", + " print(\" dist.Normal(loc[x], scale).batch_shape = {}\".format(\n", + " dist.Normal(loc[x], scale).batch_shape))\n", + " \n", + "guide = AutoNormal(poutine.block(model, hide=[\"x\", \"data\"]))\n", + "\n", + "data = torch.randn(10)\n", + " \n", + "pyro.clear_param_store()\n", + "print(\"Sampling:\")\n", + "model(data)\n", + "print(\"Enumerated Inference:\")\n", + "elbo = TraceEnum_ELBO(max_plate_nesting=1)\n", + "elbo.loss(model, guide, data);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Observe that during inference the model is run twice, first by the `AutoNormal` to trace sample sites, and second by `elbo` to compute loss. In the first run, `x` has the standard interpretation of one sample per datum, hence shape `(10,)`. In the second run enumeration can use the same three values `(3,1)` for all data points, and relies on broadcasting for any dependent sample or observe sites that depend on data. For example, in the `pyro.sample(\"obs\",...)` statement, the distribution has shape `(3,1)`, the data has shape`(10,)`, and the broadcasted log probability tensor has shape `(3,10)`.\n", + "\n", + "For a more in-depth treatment of enumeration in mixture models, see the [Gaussian Mixture Model Tutorial](http://pyro.ai/examples/gmm.html) and the [HMM Example](http://pyro.ai/examples/hmm.html).\n", + "\n", + "### Dependencies among plates \n", + "\n", + "The computational savings of enumerating in vectorized plates comes with restrictions on the dependency structure of models (as described in ([Obermeyer et al. 2019](https://arxiv.org/abs/1902.03210))). These restrictions are in addition to the usual restrictions of conditional independence. The enumeration restrictions are checked by `TraceEnum_ELBO` and will result in an error if violated (however the usual conditional independence restriction cannot be generally verified by Pyro). For completeness we list all three restrictions:\n", + "\n", + "#### Restriction 1: conditional independence\n", + "Variables within a plate may not depend on each other (along the plate dimension). This applies to any variable, whether or not it is enumerated. This applies to both sequential plates and vectorized plates. For example the following model is invalid:\n", + "```py\n", + "def invalid_model():\n", + " x = 0\n", + " for i in pyro.plate(\"invalid\", 10):\n", + " x = pyro.sample(f\"x_{i}\", dist.Normal(x, 1.))\n", + "```\n", + "\n", + "#### Restriction 2: no downstream coupling\n", + "No variable outside of a vectorized plate can depend on an enumerated variable inside of that plate. This would violate Pyro's exponential speedup assumption. For example the following model is invalid:\n", + "```py\n", + "@config_enumerate\n", + "def invalid_model(data):\n", + " with pyro.plate(\"plate\", 10): # <--- invalid vectorized plate\n", + " x = pyro.sample(\"x\", dist.Bernoulli(0.5))\n", + " assert x.shape == (10,)\n", + " pyro.sample(\"obs\", dist.Normal(x.sum(), 1.), data)\n", + "```\n", + " To work around this restriction, you can convert the vectorized plate to a sequential plate:\n", + "```py\n", + "@config_enumerate\n", + "def valid_model(data):\n", + " x = []\n", + " for i in pyro.plate(\"plate\", 10): # <--- valid sequential plate\n", + " x.append(pyro.sample(f\"x_{i}\", dist.Bernoulli(0.5)))\n", + " assert len(x) == 10\n", + " pyro.sample(\"obs\", dist.Normal(sum(x), 1.), data)\n", + "```\n", + "\n", + "#### Restriction 3: single path leaving each plate\n", + "The final restriction is subtle, but is required to enable Pyro's exponential speedup\n", + "\n", + "> For any enumerated variable `x`, the set of all enumerated variables on which `x` depends must be linearly orderable in their vectorized plate nesting.\n", + "\n", + "This requirement only applies when there are at least two plates and at least three variables in different plate contexts. The simplest counterexample is a Boltzmann machine\n", + "```py\n", + "@config_enumerate\n", + "def invalid_model(data):\n", + " plate_1 = pyro.plate(\"plate_1\", 10, dim=-1) # vectorized\n", + " plate_2 = pyro.plate(\"plate_2\", 10, dim=-2) # vectorized\n", + " with plate_1:\n", + " x = pyro.sample(\"x\", dist.Bernoulli(0.5))\n", + " with plate_2:\n", + " y = pyro.sample(\"y\", dist.Bernoulli(0.5))\n", + " with plate_1, plate2:\n", + " z = pyro.sample(\"z\", dist.Bernoulli((1. + x + y) / 4.))\n", + " ...\n", + "```\n", + "Here we see that the variable `z` depends on variable `x` (which is in `plate_1` but not `plate_2`) and depends on variable `y` (which is in `plate_2` but not `plate_1`). This model is invalid because there is no way to linearly order `x` and `y` such that one's plate nesting is less than the other.\n", + "\n", + "To work around this restriction, you can convert one of the plates to a sequential plate:\n", + "```py\n", + "@config_enumerate\n", + "def valid_model(data):\n", + " plate_1 = pyro.plate(\"plate_1\", 10, dim=-1) # vectorized\n", + " plate_2 = pyro.plate(\"plate_2\", 10) # sequential\n", + " with plate_1:\n", + " x = pyro.sample(\"x\", dist.Bernoulli(0.5))\n", + " for i in plate_2:\n", + " y = pyro.sample(f\"y_{i}\", dist.Bernoulli(0.5))\n", + " with plate_1:\n", + " z = pyro.sample(f\"z_{i}\", dist.Bernoulli((1. + x + y) / 4.))\n", + " ...\n", + "```\n", + "but beware that this increases the computational complexity, which may be exponential in the size of the sequential plate." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Time series example \n", + "\n", + "Consider a discrete HMM with latent states $x_t$ and observations $y_t$. Suppose we want to learn the transition and emission probabilities." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "data_dim = 4\n", + "num_steps = 10\n", + "data = dist.Categorical(torch.ones(num_steps, data_dim)).sample()\n", + "\n", + "def hmm_model(data, data_dim, hidden_dim=10):\n", + " print(f\"Running for {len(data)} time steps\")\n", + " # Sample global matrices wrt a Jeffreys prior.\n", + " with pyro.plate(\"hidden_state\", hidden_dim):\n", + " transition = pyro.sample(\"transition\", dist.Dirichlet(0.5 * torch.ones(hidden_dim)))\n", + " emission = pyro.sample(\"emission\", dist.Dirichlet(0.5 * torch.ones(data_dim)))\n", + "\n", + " x = 0 # initial state\n", + " for t, y in enumerate(data):\n", + " x = pyro.sample(f\"x_{t}\", dist.Categorical(transition[x]),\n", + " infer={\"enumerate\": \"parallel\"})\n", + " pyro.sample(f\" y_{t}\", dist.Categorical(emission[x]), obs=y)\n", + " print(f\" x_{t}.shape = {x.shape}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can learn the global parameters using SVI with an autoguide." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running for 10 time steps\n", + " x_0.shape = torch.Size([])\n", + " x_1.shape = torch.Size([])\n", + " x_2.shape = torch.Size([])\n", + " x_3.shape = torch.Size([])\n", + " x_4.shape = torch.Size([])\n", + " x_5.shape = torch.Size([])\n", + " x_6.shape = torch.Size([])\n", + " x_7.shape = torch.Size([])\n", + " x_8.shape = torch.Size([])\n", + " x_9.shape = torch.Size([])\n", + "Running for 10 time steps\n", + " x_0.shape = torch.Size([10, 1])\n", + " x_1.shape = torch.Size([10, 1, 1])\n", + " x_2.shape = torch.Size([10, 1, 1, 1])\n", + " x_3.shape = torch.Size([10, 1, 1, 1, 1])\n", + " x_4.shape = torch.Size([10, 1, 1, 1, 1, 1])\n", + " x_5.shape = torch.Size([10, 1, 1, 1, 1, 1, 1])\n", + " x_6.shape = torch.Size([10, 1, 1, 1, 1, 1, 1, 1])\n", + " x_7.shape = torch.Size([10, 1, 1, 1, 1, 1, 1, 1, 1])\n", + " x_8.shape = torch.Size([10, 1, 1, 1, 1, 1, 1, 1, 1, 1])\n", + " x_9.shape = torch.Size([10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])\n" + ] + } + ], + "source": [ + "hmm_guide = AutoNormal(poutine.block(hmm_model, expose=[\"transition\", \"emission\"]))\n", + "\n", + "pyro.clear_param_store()\n", + "elbo = TraceEnum_ELBO(max_plate_nesting=1)\n", + "elbo.loss(hmm_model, hmm_guide, data, data_dim=data_dim);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that the model was run twice here: first it was run without enumeration by `AutoNormal`, so that the autoguide can record all sample sites; then second it is run by `TraceEnum_ELBO` with enumeration enabled. We see in the first run that samples have the standard interpretation, whereas in the second run samples have the enumeration interpretation.\n", + "\n", + "For more complex examples, including minibatching and multiple plates, see the [HMM tutorial](https://github.com/pyro-ppl/pyro/blob/dev/examples/hmm.py)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### How to enumerate more than 25 variables \n", + "\n", + "PyTorch tensors have a dimension limit of 25 in CUDA and 64 in CPU. By default Pyro enumerates each sample site in a new dimension. If you need more sample sites, you can annotate your model with [pyro.markov](http://docs.pyro.ai/en/dev/poutine.html#pyro.poutine.markov) to tell Pyro when it is safe to recycle tensor dimensions. Let's see how that works with the HMM model from above. The only change we need is to annotate the for loop with `pyro.markov`, informing Pyro that the variables in each step of the loop depend only on variables outside of the loop and variables at this step and the previous step of the loop:\n", + "```diff\n", + "- for t, y in enumerate(data):\n", + "+ for t, y in pyro.markov(enumerate(data)):\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "x_0.shape = torch.Size([10, 1])\n", + "x_1.shape = torch.Size([10, 1, 1])\n", + "x_2.shape = torch.Size([10, 1])\n", + "x_3.shape = torch.Size([10, 1, 1])\n", + "x_4.shape = torch.Size([10, 1])\n", + "x_5.shape = torch.Size([10, 1, 1])\n", + "x_6.shape = torch.Size([10, 1])\n", + "x_7.shape = torch.Size([10, 1, 1])\n", + "x_8.shape = torch.Size([10, 1])\n", + "x_9.shape = torch.Size([10, 1, 1])\n" + ] + } + ], + "source": [ + "def hmm_model(data, data_dim, hidden_dim=10):\n", + " with pyro.plate(\"hidden_state\", hidden_dim):\n", + " transition = pyro.sample(\"transition\", dist.Dirichlet(0.5 * torch.ones(hidden_dim)))\n", + " emission = pyro.sample(\"emission\", dist.Dirichlet(0.5 * torch.ones(data_dim)))\n", + "\n", + " x = 0 # initial state\n", + " for t, y in pyro.markov(enumerate(data)):\n", + " x = pyro.sample(f\"x_{t}\", dist.Categorical(transition[x]),\n", + " infer={\"enumerate\": \"parallel\"})\n", + " pyro.sample(f\"y_{t}\", dist.Categorical(emission[x]), obs=y)\n", + " print(f\"x_{t}.shape = {x.shape}\")\n", + "\n", + "# We'll reuse the same guide and elbo.\n", + "elbo.loss(hmm_model, hmm_guide, data, data_dim=data_dim);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that this model now only needs three tensor dimensions: one for the plate, one for even states, and one for odd states. For more complex examples, see the Dynamic Bayes Net model in the [HMM example](https://github.com/pyro-ppl/pyro/blob/dev/examples/hmm.py)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/epi_intro.ipynb b/pyro/source/tutorial/source/epi_intro.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..f41713cd9fe49b3ad8c725cbd7ae3a28a4d38bb1 --- /dev/null +++ b/pyro/source/tutorial/source/epi_intro.ipynb @@ -0,0 +1,929 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Epidemiological models: Introduction\n", + "\n", + "This tutorial introduces the [pyro.contrib.epidemiology](http://docs.pyro.ai/en/latest/contrib.epidemiology.html) module, an epidemiological modeling language with a number of black box inference algorithms. This tutorial assumes the reader is already familiar with [modeling](http://pyro.ai/examples/intro_long.html), [inference](http://pyro.ai/examples/intro_long.html), and [distribution shapes](http://pyro.ai/examples/tensor_shapes.html).\n", + "\n", + "See also the following scripts:\n", + "\n", + "- [Epidemiological models: Univariate](http://pyro.ai/examples/epi_sir.html)\n", + "- [Epidemiological models: Regional](http://pyro.ai/examples/epi_regional.html)\n", + "- [Epidemiological inference via HMC](http://pyro.ai/examples/sir_hmc.html)\n", + "\n", + "#### Summary\n", + "\n", + "- To create a new model, inherit from the [CompartmentalModel](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.contrib.epidemiology.compartmental.CompartmentalModel) base class.\n", + "- Override methods [.global_model()](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.contrib.epidemiology.compartmental.CompartmentalModel.global_model), [.initialize(params)](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.contrib.epidemiology.compartmental.CompartmentalModel.initialize), and [.transition(params, state, t)](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.contrib.epidemiology.compartmental.CompartmentalModel.transition).\n", + "- Take care to support broadcasting and vectorized interpretation in those methods.\n", + "- For single time series, set `population` to an integer.\n", + "- For batched time series, let `population` be a vector, and use [self.region_plate](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.contrib.epidemiology.compartmental.CompartmentalModel).\n", + "- For models with complex inter-compartment flows, override the [.compute_flows()](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.contrib.epidemiology.compartmental.CompartmentalModel.compute_flows) method. \n", + "- Flows with loops (undirected or directed) are not currently supported.\n", + "- To perform cheap approximate inference via SVI, call the [.fit_svi()](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.contrib.epidemiology.compartmental.CompartmentalModel.fit_svi) method.\n", + "- To perform more expensive inference via MCMC, call the [.fit_mcmc()](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.contrib.epidemiology.compartmental.CompartmentalModel.fit_mcmc) method.\n", + "- To stochastically predict latent and future variables, call the [.predict()](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.contrib.epidemiology.compartmental.CompartmentalModel.predict) method.\n", + "\n", + "#### Table of contents\n", + "\n", + "- [Basic workflow](#Basic-workflow)\n", + " - [Modeling](#Modeling)\n", + " - [Generating data](#Generating-data)\n", + " - [Inference](#Inference)\n", + " - [Prediction](#Prediction)\n", + " - [Forecasting](#Forecasting)\n", + "- [Advanced modeling](#Advanced-modeling)\n", + " - [Regional models](#Regional-models)\n", + " - [Phylogenetic likelihoods](#Phylogenetic-likelihoods)\n", + " - [Heterogeneous models](#Heterogeneous-models)\n", + " - [Complex compartment flow](#Complex-compartment-flow)\n", + "- [References](#References)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "import torch\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "from pyro.contrib.epidemiology import CompartmentalModel, binomial_dist, infection_dist\n", + "\n", + "%matplotlib inline\n", + "assert pyro.__version__.startswith('1.9.1')\n", + "torch.set_default_dtype(torch.double) # Required for MCMC inference.\n", + "smoke_test = ('CI' in os.environ)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Basic workflow \n", + "\n", + "The [pyro.contrib.epidemiology](http://docs.pyro.ai/en/latest/contrib.epidemiology.html) module provides a modeling language for a class of stochastic discrete-time discrete-count compartmental models, together with a number of black box inference algorithms to perform joint inference on global parameters and latent variables. This modeling language is more restrictive than the full Pyro probabilistic programming language:\n", + "\n", + "- control flow must be static;\n", + "- compartmental distributions are restricted to [binomial_dist()](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.contrib.epidemiology.distributions.binomial_dist), [beta_binomial_dist()](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.contrib.epidemiology.distributions.beta_binomial_dist), and [infection_dist()](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.contrib.epidemiology.distributions.infection_dist);\n", + "- plates are not allowed, except for the single optional [.region_plate](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.contrib.epidemiology.compartmental.CompartmentalModel.region_plate);\n", + "- all random variables must be either global or Markov and sampled at every time step, so e.g. time-windowed random variables are not supported;\n", + "- models must support broadcasting and vectorization of time `t`.\n", + "\n", + "These restrictions allow inference algorithms to vectorize over the time dimension, leading to inference algorithms with per-iteration parallel complexity sublinear in length of the time axis. The restriction on distributions allows inference algorithms to approximate parts of the model as Gaussian via moment matching, further speeding up inference. Finally, because real data is so often overdispersed relative to Binomial idealizations, the three distribution helpers provide an [overdispersion](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.contrib.epidemiology.distributions.binomial_dist) parameter calibrated so that in the large-population limit all distribution helpers converge to log-normal.\n", + "\n", + "Black box inference algorithms currently include: [SVI](http://docs.pyro.ai/en/latest/inference_algos.html#pyro.infer.svi.SVI) with a moment-matching approximation, and [NUTS](http://docs.pyro.ai/en/latest/mcmc.html#pyro.infer.mcmc.NUTS) either with a moment-matched approximation or with an exact auxiliary variable method detailed in the [SIR HMC tutorial](http://pyro.ai/examples/sir_hmc.html). All three algorithms initialize using [SMC](http://docs.pyro.ai/en/latest/inference_algos.html#pyro.infer.smcfilter.SMCFilter) and reparameterize time dependent variables using a fast [Haar wavelet](http://docs.pyro.ai/en/latest/infer.reparam.html#pyro.infer.reparam.haar.HaarReparam) transform. Default inference parameters are set for cheap approximate results; accurate results will require more steps and ideally comparison among different inference algorithms. We recommend that, when running MCMC inference, you use multiple chains, thus making it easier to diagnose mixing issues.\n", + "\n", + "While MCMC inference can be more accurate for a given model, SVI is much faster and thus allows richer model structure (e.g. incorporating neural networks) and more rapid [model iteration](https://www.annualreviews.org/doi/abs/10.1146/annurev-statistics-022513-115657?journalCode=statistics). We recommend starting model exploration using mean field SVI (via `.fit_svi(guide_rank=0)`), then optionally increasing accuracy using a low-rank multivariate normal guide (via `.fit_svi(guide_rank=None)`). For even more accurate posteriors you could then try moment-matched MCMC (via `.fit_mcmc(num_quant_bins=1)`), or the most accurate and most expensive enumerated MCMC (via `.fit_mcmc(num_quant_bins=4)`). We recommend that, when fitting models with neural networks, you train via `.fit_svi()`, then freeze the network (say by omitting a `pyro.module()` statement) before optionally running MCMC inference." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Modeling \n", + "\n", + "The [pyro.contrib.epidemiology.models](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#module-pyro.contrib.epidemiology.models) module provides a number of example models. While in principle these are reusable, we recommend forking and modifying these models for your task. Let's take a look at one of the simplest examples, [SimpleSIRModel](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.contrib.epidemiology.models.SimpleSIRModel). This model derives from the [CompartmentalModel](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.contrib.epidemiology.compartmental.CompartmentalModel) base class and overrides the three standard methods using familiar Pyro modeling code in each method.\n", + "\n", + "- [.global_model()](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.contrib.epidemiology.compartmental.CompartmentalModel.global_model) samples global parameters and packs them into a single return value (here a tuple, but any structure is allowed). The return value is available as the `params` argument to the other two methods.\n", + "- [.initialize(params)](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.contrib.epidemiology.compartmental.CompartmentalModel.initialize) samples (or deterministically sets) initial values of time series, returning a dictionary mapping time series name to initial value.\n", + "- [.transition(params, state, t)](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.contrib.epidemiology.compartmental.CompartmentalModel.transition) inputs global `params`, the `state` at the previous time step, and the time index `t` (which may be a slice!). It then samples flows and updates the state dict." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "class SimpleSIRModel(CompartmentalModel):\n", + " def __init__(self, population, recovery_time, data):\n", + " compartments = (\"S\", \"I\") # R is implicit.\n", + " duration = len(data)\n", + " super().__init__(compartments, duration, population)\n", + " assert isinstance(recovery_time, float)\n", + " assert recovery_time > 1\n", + " self.recovery_time = recovery_time\n", + " self.data = data\n", + "\n", + " def global_model(self):\n", + " tau = self.recovery_time\n", + " R0 = pyro.sample(\"R0\", dist.LogNormal(0., 1.))\n", + " rho = pyro.sample(\"rho\", dist.Beta(100, 100))\n", + " return R0, tau, rho\n", + "\n", + " def initialize(self, params):\n", + " # Start with a single infection.\n", + " return {\"S\": self.population - 1, \"I\": 1}\n", + "\n", + " def transition(self, params, state, t):\n", + " R0, tau, rho = params\n", + "\n", + " # Sample flows between compartments.\n", + " S2I = pyro.sample(\"S2I_{}\".format(t),\n", + " infection_dist(individual_rate=R0 / tau,\n", + " num_susceptible=state[\"S\"],\n", + " num_infectious=state[\"I\"],\n", + " population=self.population))\n", + " I2R = pyro.sample(\"I2R_{}\".format(t),\n", + " binomial_dist(state[\"I\"], 1 / tau))\n", + "\n", + " # Update compartments with flows.\n", + " state[\"S\"] = state[\"S\"] - S2I\n", + " state[\"I\"] = state[\"I\"] + S2I - I2R\n", + "\n", + " # Condition on observations.\n", + " t_is_observed = isinstance(t, slice) or t < self.duration\n", + " pyro.sample(\"obs_{}\".format(t),\n", + " binomial_dist(S2I, rho),\n", + " obs=self.data[t] if t_is_observed else None)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that we've stored data in the model. These models have a scikit-learn like interface: we instantiate a model class with data, then call a `.fit_*()` method to train, then call `.predict()` on a trained model.\n", + "\n", + "Note also that we've taken special care so that `t` can be either an integer or a `slice`. Under the hood, `t` is an integer during SMC initialization, a `slice` during SVI or MCMC inference, and an integer again during prediction." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Generating data \n", + "\n", + "To check that our model generates plausible data, we can create a model with empty data and call the model's [.generate()](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.contrib.epidemiology.compartmental.CompartmentalModel.generate) method. This method first calls, `.global_model()`, then calls `.initialize()`, then calls `.transition()` once per time step (based on the length of our empty data." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Simulated 4055.0 infections after 6 attempts\n" + ] + } + ], + "source": [ + "population = 10000\n", + "recovery_time = 10.\n", + "empty_data = [None] * 90\n", + "model = SimpleSIRModel(population, recovery_time, empty_data)\n", + "\n", + "# We'll repeatedly generate data until a desired number of infections is found.\n", + "pyro.set_rng_seed(20200709)\n", + "for attempt in range(100):\n", + " synth_data = model.generate({\"R0\": 2.0})\n", + " total_infections = synth_data[\"S2I\"].sum().item()\n", + " if 4000 <= total_infections <= 6000:\n", + " break\n", + "print(\"Simulated {} infections after {} attempts\".format(total_infections, 1 + attempt))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The generated data contains both global variables and time series, packed into tensors." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "I.shape = (90,)\n", + "I2R.shape = (90,)\n", + "R0.shape = ()\n", + "S.shape = (90,)\n", + "S2I.shape = (90,)\n", + "obs.shape = (90,)\n", + "rho.shape = ()\n" + ] + } + ], + "source": [ + "for key, value in sorted(synth_data.items()):\n", + " print(\"{}.shape = {}\".format(key, tuple(value.shape)))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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De7u7k71zp49Gz4+Po7tG2+8EQBw4cKFZsd2rTrKysrw888/4+6770ZVVRVKSkpQUlKC0tJSJCUl4dy5c7h06VILvxFg/fr18Pf3x8KFCxsca2y4Vluo1WrMmTPHsT1o0CB4e3tjyJAhSEhIcOyv/Vx77YIgYP369bjzzjshCILj2ktKSpCUlISKigr89ttvTbZbO/Rt06ZNsNlsjZb56quvMGTIEAwePNip/ptvvhkAsGPHDqfyiYmJiI6Ovur1tiRub29vXLx4sdHhb0REHYmJBRFRK40ePRr/93//h/Lychw8eBBLly5FVVUVZs6cidOnTzvK3X///cjJycGePXsAAD/99BMKCwtx3333NagzLCzMabs2QSgvL292XNeq4/z58xAEAX//+98REBDg9HrhhRcAtG4CekZGBgYNGtQpqxj17du3QbLi5eWF0NDQBvuAK9deXFwMrVaLDz74oMG1P/DAAwCufu2zZ8/GuHHj8NBDDyEoKAhz5szBunXrnJKMc+fO4dSpUw3qj4qKarT+yMjIa15vS+J+9tlnoVarER8fj4EDByI5OdlpqBYRUUfhHAsiojaSy+UYPXo0Ro8ejaioKDzwwAP46quvHDfpSUlJCAoKwueff46bbroJn3/+OTQaDSZOnNigLolE0mgbQgtWBr9WHbU3wX/5y18ck8frGzBgQLPbc4WmrrG5137vvfdi7ty5jZYdNmxYk+26ublh9+7d2LFjB77//nts2bIFa9euxc0334ytW7dCIpHAZrNh6NChePPNNxuto37y4+bm1mR7tVoS95AhQ3D27Fl899132LJlC9avX493330Xy5Ytw0svvXTNtoiIWouJBRFROxo1ahQAID8/37FPIpHgnnvuQWpqKl5//XVs3LgRCxYsaPIm+FraOqyoX79+AACZTNZoctPatvr3748DBw7AbDY7Jok3V3sPlWpKQEAAPDw8YLVar3ntTRGLxbjllltwyy234M0338Srr76K559/Hjt27MDEiRPRv39/HD9+HLfccku7XVdL43Z3d8fs2bMxe/ZsmEwmTJ8+Ha+88gqWLl3KZWyJqMNwKBQRUSvs2LGj0V6EzZs3A7CP+a/rvvvuQ3l5OR555BFUV1fj3nvvbXXbtfMytFptq84PDAzE+PHj8f777zslQLWKi4tb1daMGTNQUlKCd955p8Gxa/W4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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(8,4))\n", + "for name, value in sorted(synth_data.items()):\n", + " if value.dim():\n", + " plt.plot(value, label=name)\n", + "plt.xlim(0, len(empty_data) - 1)\n", + "plt.ylim(0.8, None)\n", + "plt.xlabel(\"time step\")\n", + "plt.ylabel(\"individuals\")\n", + "plt.yscale(\"log\")\n", + "plt.legend(loc=\"best\")\n", + "plt.title(\"Synthetic time series\")\n", + "plt.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Inference \n", + "\n", + "Next let's recover estimates of the latent variables given only observations `obs`. To do this we'll create a new model instance from the synthetic observations." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "obs = synth_data[\"obs\"]\n", + "model = SimpleSIRModel(population, recovery_time, obs)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `CompartmentalModel` provides a number of inference algorithms. The cheapest and most scalable algorithm is SVI, avilable via the `.fit_svi()` method. This method returns a list of losses to help us diagnose convergence; the fitted parameters are stored in the model object." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO \t Heuristic init: R0=1.83, rho=0.546\n", + "INFO \t Running inference...\n", + "INFO \t step 0 loss = 6.808\n", + "INFO \t step 200 loss = 9.099\n", + "INFO \t step 400 loss = 7.384\n", + "INFO \t step 600 loss = 4.401\n", + "INFO \t step 800 loss = 3.428\n", + "INFO \t step 1000 loss = 3.242\n", + "INFO \t step 1200 loss = 3.13\n", + "INFO \t step 1400 loss = 3.016\n", + "INFO \t step 1600 loss = 3.029\n", + "INFO \t step 1800 loss = 3.05\n", + "INFO \t step 2000 loss = 3.017\n", + "INFO \t SVI took 12.7 seconds, 157.9 step/sec\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 12.8 s, sys: 278 ms, total: 13.1 s\n", + "Wall time: 13.2 s\n" + ] + } + ], + "source": [ + "%%time\n", + "losses = model.fit_svi(num_steps=101 if smoke_test else 2001,\n", + " jit=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAArcAAAErCAYAAADE0avSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nO3deVyU1eI/8M8zM8wMOwKyJSDumkuihqiZJblladmiWdnN9Faama3ee7W0BbOb+tVMu/1M7WZpVmpZejN3E1FxX8INBZVFUXaY9fz+QB8ZGXQYBmYYPu/Xa14v5jzneebM4YH5cDjPeSQhhAARERERkRtQOLsBRERERESOwnBLRERERG6D4ZaIiIiI3AbDLRERERG5DYZbIiIiInIbDLdERERE5DYYbomIiIjIbTDcEhEREZHbYLglIiIiIrfBcEtEREREbsOp4Xbbtm146KGHEBERAUmSsHr1aovtQghMnToV4eHh8PT0REJCAk6ePGlR58qVKxg5ciT8/PwQEBCA0aNHo6ioqC7fBhERERG5CKeG2+LiYnTq1Anz58+3un3mzJmYO3cuFi5ciOTkZHh7e6N///4oKyuT64wcORJHjx7Fhg0bsHbtWmzbtg1jx46tq7dARERERC5EEkIIZzcCACRJwqpVqzB06FAA5aO2EREReP311/HGG28AAPLz8xEaGoolS5Zg+PDhOH78ONq1a4c9e/aga9euAID169dj0KBBOH/+PCIiIpz2foiIiIio7qmc3YCqpKWlISsrCwkJCXKZv78/4uLikJSUhOHDhyMpKQkBAQFysAWAhIQEKBQKJCcn45FHHrF6bJ1OB51OJz83m824cuUKgoKCIElS7b0pIiIiIrKLEAKFhYWIiIiAQlH15AOXDbdZWVkAgNDQUIvy0NBQeVtWVhZCQkIstqtUKgQGBsp1rElMTMS0adMc3GIiIiIiqm0ZGRlo0qRJldtdNtzWpsmTJ2PSpEny8/z8fERFRSEjIwN+fn61+tqHz+dhxJfJCPfXYsOke+VyvdGM2Pc3AABahvjgZE75RXGH3+tXo9Hk9u/+DwCg9VBg778eqEHLiYiIiJynoKAAkZGR8PX1vWU9lw23YWFhAIDs7GyEh4fL5dnZ2bjrrrvkOjk5ORb7GY1GXLlyRd7fGo1GA41GU6ncz8+v1sOtj68ZCo0XVFpPi9fSG8vLAUCl9YZCY5bbVJNwe/2YSg9lrb83IiIiotp2u1zksuvcxsTEICwsDBs3bpTLCgoKkJycjPj4eABAfHw88vLykJKSItfZtGkTzGYz4uLi6rzNtcE1LvcjIiIiqh+cOnJbVFSEU6dOyc/T0tJw4MABBAYGIioqChMnTsQHH3yAli1bIiYmBlOmTEFERIS8okLbtm0xYMAAjBkzBgsXLoTBYMD48eMxfPhwrpRARERE1AA5Ndzu3bsX9913n/z8+jzYUaNGYcmSJXjrrbdQXFyMsWPHIi8vD7169cL69euh1WrlfZYtW4bx48ejb9++UCgUGDZsGObOnVvn74WIiIiInM+p4bZPnz641TK7kiRh+vTpmD59epV1AgMD8e2339ZG84iIiIionnHZObdUjlNuiYiIiGzHcEtEREREboPhloiIiIjcBsMtEREREbkNhlsXd6sL7oiIiIjIEsOti6h4sw3By8iIiIiI7MJwS0RERERug+GWiIiIiNwGw62L4wQFIiIiItsx3BIRERGR22C4JSIiIiK3wXBLRERERG6D4dYFSbixLhiXuSUiIiKyHcOtC+I6t0RERET2YbglIiIiIrfBcEtEREREboPh1sVxigIRERGR7RhuXYRU4WteREZERERkH4ZbIiIiInIbDLcujqO4RERERLZjuHVBknT7OkRERERUGcOtC+JoLREREZF9GG6JiIiIyG0w3BIRERGR22C4dUGcc0tERERkH4ZbF8Q5t0RERET2YbglIiIiIrfBcOuCKk5LcNQoLqc6EBERUUPAcOuCamNaAqc6EBERUUPAcOsilIobQ6tGM5MoERERkT0Ybl2EJElQK8u/HXqj2cmtISIiIqqfGG5diIeyfPTWYLoRbgU4iktERERkK4ZbF1KsNwEAcgp1Tm4JERERUf3EcEtEREREboPhloiIiIjcBsOti+M6t0RERES2c+lwazKZMGXKFMTExMDT0xPNmzfH+++/D1Eh8QkhMHXqVISHh8PT0xMJCQk4efKkE1vtmrjOLRERETUELh1uP/74YyxYsACfffYZjh8/jo8//hgzZ87EvHnz5DozZ87E3LlzsXDhQiQnJ8Pb2xv9+/dHWVmZE1tORERERM6gcnYDbmXnzp0YMmQIHnzwQQBA06ZN8d1332H37t0Aykdt58yZg3/9618YMmQIAODrr79GaGgoVq9ejeHDhzut7URERERU91x65LZHjx7YuHEjTpw4AQA4ePAgduzYgYEDBwIA0tLSkJWVhYSEBHkff39/xMXFISkpySltdjTOJiAiIiKynUuP3L7zzjsoKChAmzZtoFQqYTKZ8OGHH2LkyJEAgKysLABAaGioxX6hoaHyNmt0Oh10uhtryRYUFNRC610LLygjIiKihsClR26///57LFu2DN9++y327duHpUuX4t///jeWLl1ao+MmJibC399ffkRGRjqoxTXzzsA2tXZsXlBGREREDYFLh9s333wT77zzDoYPH44OHTrgmWeewWuvvYbExEQAQFhYGAAgOzvbYr/s7Gx5mzWTJ09Gfn6+/MjIyKi9N1ENnh5KZzeBiIiIqF5z6XBbUlIChcKyiUqlEmazGQAQExODsLAwbNy4Ud5eUFCA5ORkxMfHV3lcjUYDPz8/i4crsDZ1QDhoyJXTEoiIiKghcOk5tw899BA+/PBDREVF4c4778T+/fsxa9YsPP/88wAASZIwceJEfPDBB2jZsiViYmIwZcoUREREYOjQoU5uffXVZv7ktAQiIiJqCFw63M6bNw9TpkzByy+/jJycHERERODvf/87pk6dKtd56623UFxcjLFjxyIvLw+9evXC+vXrodVqndhyO3F4lYiIiKhGXDrc+vr6Ys6cOZgzZ06VdSRJwvTp0zF9+vQ6bFntsBZtHTXgytxMREREDYFLz7klIiIiIqoOhlsXwtFVIiIiopphuHUhUi1eUsYLyoiIiKghYLh1IdaXAqv7dhARERHVVwy3LqQ2ZyVwygMRERE1BAy3REREROQ2GG5dCEdXiYiIiGqG4daFWL2gjHNuiYiIiGzGcOtKOHJLREREVCMMt0RERETkNhhuXUhtDtxySTEiIiJqCBhuXYhk5YoywUm3RERERDZjuHUhXOeWiIiIqGYYbl0IAygRERFRzTDcEhEREZHbYLh1IdZGbnkhGBEREZHtGG5diNWbOBARERGRzRhuXQjn3BIRERHVDMMtEREREbkNhlsXxym3RERERLZjuHUh1m7iQERERES2Y7h1IYy2RERERDXDcOtCrC8FxokJRERERLZiuHUhXAqMiIiIqGYYbomIiIjIbTDcuhBeT0ZERERUMwy3LsRatuWMWyIiIiLbMdy6EI7cEhEREdUMw61LYbol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zJkza/291cSt+sVgMODtt99Ghw4d4O3tjYiICDz77LO4ePGixTGsnWczZsywqONO/QIAzz33XKX3PGDAAIs67ni+ALfvG2u/cyRJwieffCLXccdzxpbPaEd9Fm3ZsgWxsbHQaDRo0aIFlixZUntvTFCdWb58uVCr1eKrr74SR48eFWPGjBEBAQEiOzvb2U2rNf379xeLFy8WR44cEQcOHBCDBg0SUVFRoqioSK5z7733ijFjxojMzEz5kZ+fL283Go2iffv2IiEhQezfv1/89ttvIjg4WEyePNkZb8lh3n33XXHnnXdavO9Lly7J21988UURGRkpNm7cKPbu3Su6d+8uevToIW93137Jycmx6JMNGzYIAGLz5s1CiIZ1vvz222/in//8p/jpp58EALFq1SqL7TNmzBD+/v5i9erV4uDBg+Lhhx8WMTExorS0VK4zYMAA0alTJ7Fr1y6xfft20aJFCzFixAh5e35+vggNDRUjR44UR44cEd99953w9PQUX3zxRZ29z+q6Vb/k5eWJhIQEsWLFCvHXX3+JpKQkcffdd4suXbpYHCM6OlpMnz7d4jyq+HvJ3fpFCCFGjRolBgwYYPGer1y5YlHHHc8XIW7fNxX7JDMzU3z11VdCkiRx+vRpuY47njO2fEY74rPozJkzwsvLS0yaNEkcO3ZMzJs3TyiVSrF+/fpaeV8Mt3Xo7rvvFuPGjZOfm0wmERERIRITE53YqrqVk5MjAIitW7fKZffee6949dVXq9znt99+EwqFQmRlZcllCxYsEH5+fkKn09Vqe2vTu+++Kzp16mR1W15envDw8BArV66Uy44fPy4AiKSkJCGE+/bLzV599VXRvHlzYTabhRAN93y5+QPZbDaLsLAw8cknn8hleXl5QqPRiO+++04IIcSxY8cEALFnzx65zrp164QkSeLChQtCCCE+//xz0ahRI4u+efvtt0Xr1q1r+y05hLWgcrPdu3cLAOLcuXNyWXR0tJg9e3aV+7hjv4waNUoMGTKkyn0awvkihG3nzJAhQ8T9999vUebu54wQlT+jHfVZ9NZbb4k777zT4rWefPJJ0b9//1p5H5yWUEf0ej1SUlKQkJAglykUCiQkJCApKcmJLatb+fn5AIDAwECL8mXLliE4OBjt27fH5MmTUVJSIm9LSkpChw4dEBoaKpf1798fBQUFOHr0aN00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j4/nyC0RuRSGWyKiOqTVavHAAw9gypQp2LlzJ5577jm8++678nY/Pz889thj8oVlixcvxhNPPAEfHx+bXyM2NhZpaWl4//33UVpaiieeeAKPPfbYLfcpKirCtGnTcODAAflx+PBhnDx5Elqt1r43S0TkBAy3RERO1K5dOxQXF1uUjR49Gjt27MDatWuxc+dOmy8kq8jPzw9PPvkkvvzyS6xYsQI//vgjrly5AgDw8PCAyWSyqB8bG4vU1FS0aNGi0kOhuPFRsWvXLov9du3ahbZt21a7fUREtUXl7AYQETUEubm5ePzxx/H888+jY8eO8PX1xd69ezFz5kwMGTLEom7v3r3RokULPPvss2jTpg169OhRrdeaNWsWwsPD0blzZygUCqxcuRJhYWHy2rhNmzbFxo0b0bNnT2g0GjRq1AhTp07F4MGDERUVhcceewwKhQIHDx7EkSNH8MEHH8jHXrlyJbp27YpevXph2bJl2L17NxYtWlTzDiIichCO3BIR1QEfHx/ExcVh9uzZ6N27N9q3b48pU6ZgzJgx+OyzzyzqSpKE559/HlevXq3WhWTX+fr6YubMmejatSu6deuGs2fP4rfffpNHYD/99FNs2LABkZGR6Ny5MwCgf//+WLt2LX7//Xd069YN3bt3x+zZsxEdHW1x7GnTpmH58uXo2LEjvv76a3z33Xdo166dnb1CROR4khBCOLsRRETk+iRJwqpVqzB06FBnN4WIqEocuSUiIiIit8FwS0RERERugxeUERGRTTiLjYjqA47cEhEREZHbYLglIiIiIrfBcEtEREREboPhloiIiIjcBsMtEREREbkNhlsiIiIichsMt0RERETkNhhuiYiIiMhtMNwSERERkdv4/zafSYRzXpDMAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(8, 3))\n", + "plt.plot(losses)\n", + "plt.xlabel(\"SVI step\")\n", + "plt.ylabel(\"loss\")\n", + "plt.ylim(min(losses), max(losses[50:]));" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After inference, samples of latent variables are stored in the `.samples` attribute. These are primarily for internal use, and do not contain the full set of latent variables." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "R0.shape = (100, 1)\n", + "auxiliary.shape = (100, 1, 2, 90)\n", + "rho.shape = (100, 1)\n" + ] + } + ], + "source": [ + "for key, value in sorted(model.samples.items()):\n", + " print(\"{}.shape = {}\".format(key, tuple(value.shape)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Prediction \n", + "\n", + "After inference we can both examine latent variables and forecast forward using the [.predict()](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.contrib.epidemiology.compartmental.CompartmentalModel.predict) method. First let's simply predict latent variables." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO \t Predicting latent variables for 90 time steps...\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 113 ms, sys: 2.82 ms, total: 116 ms\n", + "Wall time: 115 ms\n" + ] + } + ], + "source": [ + "%%time\n", + "samples = model.predict()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "I.shape = (100, 90)\n", + "I2R.shape = (100, 90)\n", + "R0.shape = (100, 1)\n", + "S.shape = (100, 90)\n", + "S2I.shape = (100, 90)\n", + "auxiliary.shape = (100, 1, 2, 90)\n", + "obs.shape = (100, 90)\n", + "rho.shape = (100, 1)\n" + ] + } + ], + "source": [ + "for key, value in sorted(samples.items()):\n", + " print(\"{}.shape = {}\".format(key, tuple(value.shape)))" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeoAAAHqCAYAAADLbQ06AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdd3wUdfrA8c/uJrupm0Z6T4BAaIHQQQKIRgQFBBRRehHFwgme5Xco4J3oKdbDgoWiYqMqcBakKKE36RAgIYGENNJ7duf3R8yeSw0hyW6S5/16+ZLMzn7nmZmdfXa+8y0qRVEUhBBCCGGV1JYOQAghhBDXJolaCCGEsGKSqIUQQggrJolaCCGEsGKSqIUQQggrJolaCCGEsGKSqIUQQggrJolaCCGEsGKSqIUQQggrJolamCxZsgSVSkViYqKlQ6k1KpWKOXPmWDoMq5WWlsaIESPw8PBApVLx9ttv33KZc+bMQaVS1ei9ISEhDB48+JZjqJKYmIhKpWLJkiW1VqYQ9U0S9S2oSmxV/9nZ2dGyZUsef/xx0tLSan17RUVFzJkzhy1bttR62Q3Zhg0brC4ZN5Rz9be//Y2ffvqJ559/ns8//5y77rrL0iEJC0hJSWHOnDkcPHjQ0qGIq7CxdACNwbx58wgNDaWkpIRt27bxwQcfsGHDBo4cOYKDg0OtbaeoqIi5c+cC0Ldv31ort8qYMWMYNWoUOp2u1suuSxs2bGDhwoVXTdbFxcXY2NT/x7yuz1Vt2bRpE0OGDGHWrFmWDkVYUEpKCnPnziUkJISoqChLhyMuI4m6FgwcOJDOnTsDMHnyZDw8PHjzzTdZu3YtDz74oIWju7HCwkIcHR3RaDRoNJpaK7eoqKhWf6jUhJ2dnUW3b+3S09NxdXW1dBhNhjVcE/Wp6rtF3Bqp+q4D/fv3ByAhIQGAiooKXn75ZcLDw9HpdISEhPDCCy9QWlpq9r69e/cSGxtLs2bNsLe3JzQ0lIkTJwKVz9o8PT0BmDt3rqm6/a93kSdOnGDEiBG4u7tjZ2dH586d+f777822UVVdv3XrVh577DG8vLwICAgwe+3yZ9Tvv/8+bdq0QafT4efnx/Tp08nJyTFbp2/fvrRt25Z9+/bRp08fHBwceOGFF657nKoTb3l5OXPnzqVFixbY2dnh4eFB7969+eWXXwAYP348CxcuBDB7DFHl8mNU9fz01KlTPPzww7i4uODp6cns2bNRFIXk5GSGDBmCXq/Hx8eHBQsWmMVTVlbGiy++SHR0NC4uLjg6OnLbbbexefNm0zq1da5utO/Xc/bsWUaOHIm7uzsODg50796d9evXm16vOteKorBw4cIrjtvVZGVlMWbMGPR6Pa6urowbN44//vijWs+Aq3sNVPn555+JiorCzs6OyMhIVq1aZfb6pUuXmDVrFu3atcPJyQm9Xs/AgQP5448/bnhsrqbqePz222888sgjeHh4oNfrGTt2LNnZ2Wbrrl27lkGDBuHn54dOpyM8PJyXX34Zg8Fgtt71rombLePQoUPExMTg4OBA8+bNWbFiBQBbt26lW7du2NvbExERwcaNG6/YtwsXLjBx4kS8vb3R6XS0adOGzz77zPT6li1b6NKlCwATJkwwfRb+ek537drFXXfdhYuLCw4ODsTExBAXF2e2napr69ixY4wePRo3Nzd69+4NwMWLF5kwYQIBAQHodDp8fX0ZMmRIo2oPU5fkjroOnDlzBgAPDw+g8i576dKljBgxgpkzZ7Jr1y7mz5/P8ePHWb16NVB5Z3PnnXfi6enJc889h6urK4mJiaYvKE9PTz744AMeffRRhg0bxn333QdA+/btATh69Ci9evXC39+f5557DkdHR7799luGDh3KypUrGTZsmFmMjz32GJ6enrz44osUFhZec1/mzJnD3LlzGTBgAI8++ignT57kgw8+YM+ePcTFxWFra2taNysri4EDBzJq1CgefvhhvL29r1ludeOdM2cO8+fPZ/LkyXTt2pW8vDz27t3L/v37ueOOO3jkkUdISUnhl19+4fPPP6/2OXrggQdo3bo1r776KuvXr+ef//wn7u7ufPTRR/Tv35/XXnuNL7/8klmzZtGlSxf69OkDQF5eHp988gkPPvggU6ZMIT8/n08//ZTY2Fh2795NVFRUrZ2rG+37taSlpdGzZ0+Kiop48skn8fDwYOnSpdx7772sWLGCYcOG0adPHz7//HPGjBnDHXfcwdixY697vIxGI/fccw+7d+/m0UcfpVWrVqxdu5Zx48ZV63hX5xqoEh8fzwMPPMC0adMYN24cixcvZuTIkfz444+m/T579ixr1qxh5MiRhIaGkpaWxkcffURMTAzHjh3Dz8+vWnFd7vHHH8fV1ZU5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xt3dnb1797JixQoef/xxU1nR0dEAPPnkk8TGxqLRaMwa39SmwYMHs2rVKoYNG8agQYNISEjgww8/JDIy0uyLrDbOVXX2/Wqee+45vvrqKwYOHMiTTz6Ju7s7S5cuJSEhgZUrV5o1DKyuoUOH0rVrV2bOnMnp06dp1aoV33//PZcuXQKuX6tR3WugSsuWLZk0aRJ79uzB29ubzz77jLS0NBYvXmx2HubNm8eECRPo2bMnhw8f5ssvvzSr+amJsrIybr/9du6//37TZ713797ce++9QGWXJTc3N8aNG8eTTz6JSqXi888/v+JHw/XURhnV9eqrr7J582a6devGlClTiIyM5NKlS+zfv5+NGzeazl94eDiurq58+OGHODs74+joSLdu3QgNDeWTTz5h4MCBtGnThgkTJuDv78+FCxfYvHkzer2eH3744boxnDp1ynRMIyMjsbGxYfXq1aSlpdXZddro1Hs780akqkvH9bpUKYqilJeXK3PnzlVCQ0MVW1tbJTAwUHn++efNumHs379fefDBB5WgoCBFp9MpXl5eyuDBg5W9e/ealbV9+3YlOjpa0Wq1V3T/OXPmjDJ27FjFx8dHsbW1Vfz9/ZXBgwcrK1asqFbMl3fPqvKf//xHadWqlWJra6t4e3srjz76qJKdnW22TkxMjNKmTZsbHTIz1Yn3n//8p9K1a1fF1dVVsbe3V1q1aqX861//MutCU1FRoTzxxBOKp6enolKpzLoGXX6MqrqQZGRkmMUybtw4xdHR8YoYL98vo9GovPLKK0pwcLCi0+mUjh07KuvWrVPGjRunBAcHm733Vs9Vdfb9esd2xIgRiqurq2JnZ6d07dpVWbdu3RXrUc3uWYpS2eVs9OjRirOzs+Li4qKMHz9eiYuLUwDl66+/Nq13efcsRaneNaAold2zBg0apPz0009K+/btFZ1Op7Rq1Ur57rvvzNYrKSlRZs6cqfj6+ir29vZKr169lB07digxMTFKTEyMab2b7Z61detWZerUqYqbm5vi5OSkPPTQQ0pWVpbZunFxcUr37t0Ve3t7xc/PT/n73/9u6hq1efNm03rXuyZutYyq43S5q53PtLQ0Zfr06UpgYKBia2ur+Pj4KLfffruyaNEis/XWrl2rREZGKjY2NlccswMHDij33Xef4uHhoeh0OiU4OFi5//77lV9//dW0zrWurczM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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "names = [\"R0\", \"rho\"]\n", + "fig, axes = plt.subplots(2, 1, figsize=(5, 5))\n", + "axes[0].set_title(\"Posterior estimates of global parameters\")\n", + "for ax, name in zip(axes, names):\n", + " truth = synth_data[name]\n", + " sns.distplot(samples[name], ax=ax, label=\"posterior\")\n", + " ax.axvline(truth, color=\"k\", label=\"truth\")\n", + " ax.set_xlabel(name)\n", + " ax.set_yticks(())\n", + " ax.legend(loc=\"best\")\n", + "plt.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that while the inference recovers the basic reproductive number `R0`, it poorly estimates the response rate `rho` and underestimates its uncertainty. While perfect inference would provide better uncertainty estimates, the response rate is known to be difficult to recover from data. Ideally the model can either incorporate a narrower prior, either obtained by testing a random sample of the population, or by more accurate observations, e.g. counting deaths rather than confirmed infections." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Forecasting \n", + "\n", + "We can forecast forward by passing a `forecast` argument to the `.predict()` method, specifying the number of time steps ahead we'd like to forecast. The returned `sample` will contain time values during both the first observed time interval (here 90 days) and the forecasted window (say 30 days)." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO \t Predicting latent variables for 90 time steps...\n", + "INFO \t Forecasting 30 steps ahead...\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 2 µs, sys: 1 µs, total: 3 µs\n", + "Wall time: 5.96 µs\n" + ] + } + ], + "source": [ + "%time\n", + "samples = model.predict(forecast=30)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def plot_forecast(samples):\n", + " duration = len(empty_data)\n", + " forecast = samples[\"S\"].size(-1) - duration\n", + " num_samples = len(samples[\"R0\"])\n", + "\n", + " time = torch.arange(duration + forecast)\n", + " S2I = samples[\"S2I\"]\n", + " median = S2I.median(dim=0).values\n", + " p05 = S2I.kthvalue(int(round(0.5 + 0.05 * num_samples)), dim=0).values\n", + " p95 = S2I.kthvalue(int(round(0.5 + 0.95 * num_samples)), dim=0).values\n", + "\n", + " plt.figure(figsize=(8, 4))\n", + " plt.fill_between(time, p05, p95, color=\"red\", alpha=0.3, label=\"90% CI\")\n", + " plt.plot(time, median, \"r-\", label=\"median\")\n", + " plt.plot(time[:duration], obs, \"k.\", label=\"observed\")\n", + " plt.plot(time[:duration], synth_data[\"S2I\"], \"k--\", label=\"truth\")\n", + " plt.axvline(duration - 0.5, color=\"gray\", lw=1)\n", + " plt.xlim(0, len(time) - 1)\n", + " plt.ylim(0, None)\n", + " plt.xlabel(\"day after first infection\")\n", + " plt.ylabel(\"new infections per day\")\n", + " plt.title(\"New infections in population of {}\".format(population))\n", + " plt.legend(loc=\"upper left\")\n", + " plt.tight_layout()\n", + "\n", + "plot_forecast(samples)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It looks like the mean field guide underestimates uncertainty. To improve uncertainty estimates we can instead try MCMC inference. In this simple model MCMC is only a small factor slower than SVI; in more complex models MCMC can be multiple orders of magnitude slower than SVI." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO \t Running inference...\n", + "Warmup: 0%| | 0/800 [00:00, ?it/s]INFO \t Heuristic init: R0=2.05, rho=0.437\n", + "Sample: 100%|██████████| 800/800 [01:44, 7.63it/s, step size=1.07e-01, acc. prob=0.890]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 1min 43s, sys: 1.2 s, total: 1min 44s\n", + "Wall time: 1min 44s\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "%%time\n", + "model = SimpleSIRModel(population, recovery_time, obs)\n", + "mcmc = model.fit_mcmc(num_samples=4 if smoke_test else 400,\n", + " jit_compile=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO \t Predicting latent variables for 90 time steps...\n", + "INFO \t Forecasting 30 steps ahead...\n" + ] + }, + { + "data": { + "image/png": "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3btHREREoR0nO7rVu0+ePGmw/c6dO9y6dctgde86depw+vRpfWCvc+zYMSwtLfW9UEVRpxCiYCSwEELki4+PD2+++SbLli0jNDTUYN+rr76KVqtlypQpmZ6kKorCgwcP9O/Nzc1p0KABP//8MyEhIQY9FnFxcXz77bf4+Pjon04Wp44dO+rnxM9qpqP79+8D6rSVLVu2ZOXKlYSEhBiUSX/+ujSd3MzC1KVLF44fP64fZwIQExODv78/Xl5eVKtWLU/nEhUVlWk14po1a2JkZFRiU236+/sbXNclS5aQnJxM586dAWjfvj2mpqZ8++23BtdxxYoVREZG8tJLLxnUl5yczLJly/TvExMTWbZsGU5OTtSvXx94EizqxvWA2luRm5XWtVotGo3GoHcjODg4yxW2rayscvV7zus55leXLl0AdQa09ObNmwdQaMfJTvXq1fHz88Pf39/g+i1ZsgSNRqNfWwLgtdde4969e/z222/6beHh4fz666907dpVP1aiKOoUQhRM6enHF0I8cz799FPWrl3L5cuXqV69un67j48PU6dOZfz48QQHB9O9e3dsbGwICgpi06ZNDBs2jLFjx+rLt2jRgpkzZ2JnZ0fNmjUBtZegSpUqXL58OdP6DsXF1taWJUuW0K9fP+rVq0fv3r1xcnIiJCSErVu30qxZMxYuXAioa3I0b96cevXqMWzYMLy9vQkODmbr1q36RcN0N7effvopvXv3xsTEhK5du2YaFwDwySef8PPPP9O5c2dGjRqFg4MDa9asISgoiI0bN2aaNvNp9uzZw8iRI+nZsyeVK1cmOTmZtWvXotVq6dGjRwGvVP4kJibSrl07evXqxeXLl1m8eDHNmzenW7dugBqwjR8/nilTptCpUye6deumL9egQQODQcygprPMmjWL4OBgKleuzC+//EJAQAD+/v76QeLVq1encePGjB8/nocPH+Lg4MC6desyBV1Zeemll5g3bx6dOnXijTfeICwsjEWLFuHr68s///xjULZ+/frs3r2befPm4ebmhre3N40aNcpUZ17PMb9q167NW2+9hb+/PxEREbRq1Yrjx4+zZs0aunfvTps2bfJVb2RkJAsWLADg8OHDACxcuBB7e3vs7e0ZOXKkvuzs2bPp1q0bHTp0oHfv3pw/f56FCxcyZMgQ/dghUIOAxo0bM3DgQC5evIijoyOL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fq8l5TmX27Ztw9vbm27duhXsM2jQIIxGIzt27LjqYxaV67rtVnL27FksFkup7ty+vr4cOXKkmkYlKoPVamXy5Mn07duX9u3bA5CQkICTkxPe3t7F9vX19SUhIaE6hikqaMWKFezZs4edO3eWekzOb812/PhxPvzwQ6ZMmcLzzz/Pzp07efLJJ3FycmL06NEF59De57Wc33++5557jpSUFNq0aYPJZMJisTBnzhxGjhwJIOf3GlKec5mQkED9+vWLPe7g4ECdOnXkfF8DrtvAQly7JkyYwMGDB9m6dWt1D0VUktjYWCZNmsT69etxcXGp7uGISma1WunWrRuvvvoqAJ07d+bgwYMsWrSI0aNHV/PoxJX66quv+Pzzz1m+fDnt2rVj3759TJ48mUaNGsn5FeIac92mQvn4+GAymUpVjUlMTKRBgwbVNCpxpSZOnMjatWsJDw/H39+/YHuDBg3IyckhKSmp2P5yvmuG3bt3c/r0abp06YKDgwMODg5s2bKFhQsX4uDggK+vr5zfGqxhw4a0bdu22LYbbriBmJgYgIJzKJ/XNdPTTz/Nc889xwMPPEBQUBD/+te/eOqpp5g7dy4g5/daUp5z2aBBg1JFcvLy8jh//ryc72vAdRtYODk50bVrVzZu3FiwzWq1snHjRnr37l2NIxOXQynFxIkTWbVqFZs2baJZs2bFHu/atSuOjo7FzvfRo0eJiYmR810DDBw4kAMHDrBv376Cr27dujFy5MiC7+X81lx9+/YtVR762LFjBAQEANCsWTMaNGhQ7PympKSwY8cOOb81QEZGBkZj8csNk8mE1WoF5PxeS8pzLnv37k1SUhK7d+8u2GfTpk1YrVZ69ux51ccsKll1rx6vTitWrFDOzs5q2bJl6tChQ2rcuHHK29tbJSQkVPfQRAU99thjysvLS23evFnFx8cXfGVkZBTs8+ijj6omTZqoTZs2qV27dqnevXur3r17V+OoxZUoWhVKKTm/Ndmff/6pHBwc1Jw5c1RERIT6/PPPlZubm/rss88K9pk3b57y9vZWq1evVvv371d33XWXatasmcrMzKzGkYvyGD16tPLz81Nr165VJ06cUN9++63y8fFRzzzzTME+cn5rjtTUVLV37161d+9eBagFCxaovXv3qpMnTyqlyncub731VtW5c2e1Y8cOtXXrVhUYGKgefPDB6npL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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "samples = model.predict(forecast=30)\n", + "plot_forecast(samples)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Advanced modeling \n", + "\n", + "So far we've seen how to create a simple univariate model, fit the model to data, and predict and forecast future data. Next let's consider more advanced modeling techniques:\n", + "\n", + "- [regional models](#Regional-models) that couple compartments among multiple aggregated regions;\n", + "- [phylogenetic likelihoods](#Phylogenetic-likelihoods) to incorporate genetic sequencing data;\n", + "- [heterogeneous models](#Heterogeneous-models) with time-varying latent variables; and\n", + "- [Complex compartment flow](#Complex-compartment-flow) for models with non-linear transitions." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Regional models \n", + "\n", + "Epidemiology models vary in their level of detail. At the coarse-grained extreme are univariate aggregate models as we saw above. At the fine-grained extreme are network models where each individual's state is tracked and infections occur along edges of a sparse graph (`pyro.contrib.epidemiology` does not implement network models). We now consider an mid-level model where each of many regions (e.g. countries or zip codes) is tracked in aggregate, and infections occur both within regions and between pairs of regions. In Pyro we model multiple regions with a [plate](http://docs.pyro.ai/en/stable/primitives.html#pyro.primitives.plate). Pyro's [CompartmentalModel](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.contrib.epidemiology.compartmental.CompartmentalModel) class does not support general `pyro.plate` syntax, but it does support a single special `self.region_plate` for regional models. This plate is available iff a `CompartmentalModel` is initialized with a vector `population`, and the size of the `region_plate` will be the length of the `population` vector.\n", + "\n", + "Let's take a look at the example [RegionalSIRModel](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.contrib.epidemiology.models.RegionalSIRModel):" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "class RegionalSIRModel(CompartmentalModel):\n", + " def __init__(self, population, coupling, recovery_time, data):\n", + " duration = len(data)\n", + " num_regions, = population.shape\n", + " assert coupling.shape == (num_regions, num_regions)\n", + " assert (0 <= coupling).all()\n", + " assert (coupling <= 1).all()\n", + " assert isinstance(recovery_time, float)\n", + " assert recovery_time > 1\n", + " if isinstance(data, torch.Tensor):\n", + " # Data tensors should be oriented as (time, region).\n", + " assert data.shape == (duration, num_regions)\n", + " compartments = (\"S\", \"I\") # R is implicit.\n", + "\n", + " # We create a regional model by passing a vector of populations.\n", + " super().__init__(compartments, duration, population, approximate=(\"I\",))\n", + "\n", + " self.coupling = coupling\n", + " self.recovery_time = recovery_time\n", + " self.data = data\n", + "\n", + " def global_model(self):\n", + " # Assume recovery time is a known constant.\n", + " tau = self.recovery_time\n", + "\n", + " # Assume reproductive number is unknown but homogeneous.\n", + " R0 = pyro.sample(\"R0\", dist.LogNormal(0., 1.))\n", + "\n", + " # Assume response rate is heterogeneous and model it with a\n", + " # hierarchical Gamma-Beta prior.\n", + " rho_c1 = pyro.sample(\"rho_c1\", dist.Gamma(10, 1))\n", + " rho_c0 = pyro.sample(\"rho_c0\", dist.Gamma(10, 1))\n", + " with self.region_plate:\n", + " rho = pyro.sample(\"rho\", dist.Beta(rho_c1, rho_c0))\n", + "\n", + " return R0, tau, rho\n", + "\n", + " def initialize(self, params):\n", + " # Start with a single infection in region 0.\n", + " I = torch.zeros_like(self.population)\n", + " I[0] += 1\n", + " S = self.population - I\n", + " return {\"S\": S, \"I\": I}\n", + "\n", + " def transition(self, params, state, t):\n", + " R0, tau, rho = params\n", + "\n", + " # Account for infections from all regions. This uses approximate (point\n", + " # estimate) counts I_approx for infection from other regions, but uses\n", + " # the exact (enumerated) count I for infections from one's own region.\n", + " I_coupled = state[\"I_approx\"] @ self.coupling\n", + " I_coupled = I_coupled + (state[\"I\"] - state[\"I_approx\"]) * self.coupling.diag()\n", + " I_coupled = I_coupled.clamp(min=0) # In case I_approx is negative.\n", + " pop_coupled = self.population @ self.coupling\n", + "\n", + " with self.region_plate:\n", + " # Sample flows between compartments.\n", + " S2I = pyro.sample(\"S2I_{}\".format(t),\n", + " infection_dist(individual_rate=R0 / tau,\n", + " num_susceptible=state[\"S\"],\n", + " num_infectious=I_coupled,\n", + " population=pop_coupled))\n", + " I2R = pyro.sample(\"I2R_{}\".format(t),\n", + " binomial_dist(state[\"I\"], 1 / tau))\n", + "\n", + " # Update compartments with flows.\n", + " state[\"S\"] = state[\"S\"] - S2I\n", + " state[\"I\"] = state[\"I\"] + S2I - I2R\n", + "\n", + " # Condition on observations.\n", + " t_is_observed = isinstance(t, slice) or t < self.duration\n", + " pyro.sample(\"obs_{}\".format(t),\n", + " binomial_dist(S2I, rho),\n", + " obs=self.data[t] if t_is_observed else None)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The main differences from the earlier univariate model are that: we assume `population` is a vector of length `num_regions`, we sample all compartmental variables and some global variables inside the `region_plate`, and we compute coupled vectors `I_coupled` and `pop_coupled` of the effective number of infected individuals and population accounting for both intra-region and inter-region infections. Among global variables we have chosen for demonstration purposes to make `tau` a fixed single number, `R0` a single latent variable shared among all regions, and `rho` a local latent variable that can take a different value for each region. Note that while `rho` is not shared among regions, we have created a hierarchical model whereby `rho`'s parent variables are shared among regions. While some of our variables are region-global and some region-local, only the compartmental variables are both region-local and time-dependent; all other parameters are fixed for all time. See the [heterogeneous models](#Heterogeneous-models) section below for time-dependent latent variables.\n", + "\n", + "Note that Pyro's enumerated MCMC strategy (`.fit_mcmc()` with `num_quant_bins > 1`) requires extra logic to use a mean-field approximation across compartments: we pass `approximate=(\"I\",)` to the constructor and force compartements to iteract via `state[\"I_approx\"]` rather than `state[\"I\"]`. This code is not required for SVI inference or for moment-matched MCMC inference (`.fit_mcmc()` with the default `num_quant_bins=0`).\n", + "\n", + "See the [Epidemiology: regional models](http://pyro.ai/examples/epi_regional.html) example for a demonstration of how to generate data, train, predict, and forecast with regional models. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Phylogenetic likelihoods \n", + "\n", + "Epidemiological parameters can be difficult to identify from aggregate observations alone. However some parameters like the superspreading parameter `k` can be more accurately identified by combining aggregate count data with viral phylogenetic trees reconstructed from viral genetic sequencing data [(Li et al. 2017)](#1). Pyro implements a [CoalescentRateLikelihood](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.distributions.CoalescentRateLikelihood) class to compute a population likelihood `p(I|phylogeny)` given statistics of a phylogenetic tree (or a batch of tree samples). The statistics needed are exactly the times of each sampling event (i.e. when a viral genome was sequenced) and the times of genetic coalescent events in a binary phylogenetic tree; let us call these two vectors ``leaf_times`` and ``coal_times``, respectively, where ``len(leaf_times) == 1 + len(coal_times)`` for binary trees. Pyro provides a helper [bio_phylo_to_times()](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.distributions.coalescent.bio_phylo_to_times) to extract these statistics from a [Bio.Phylo tree objects](https://biopython.readthedocs.io/en/latest/api/Bio.Phylo.BaseTree.html#Bio.Phylo.BaseTree.Clade); in turn [Bio.Phylo](https://biopython-tutorial.readthedocs.io/en/latest/notebooks/13%20-%20Phylogenetics%20with%20Bio.Phylo.html) can parse many file formats of phylogenetic trees.\n", + "\n", + "Let's take a look at the [SuperspreadingSEIRModel](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.contrib.epidemiology.models.SuperspreadingSEIRModel) which includes a phylogenetic likelihood. We'll focus on the phylogenetic parts of the model:\n", + "\n", + "```python\n", + "class SuperspreadingSEIRModel(CompartmentalModel):\n", + " def __init__(self, population, incubation_time, recovery_time, data, *,\n", + " leaf_times=None, coal_times=None):\n", + " compartments = (\"S\", \"E\", \"I\") # R is implicit.\n", + " duration = len(data)\n", + " super().__init__(compartments, duration, population)\n", + " ...\n", + " self.coal_likelihood = dist.CoalescentRateLikelihood(\n", + " leaf_times, coal_times, duration)\n", + " ...\n", + " \n", + " def transition(self, params, state, t):\n", + " ...\n", + " # Condition on observations.\n", + " t_is_observed = isinstance(t, slice) or t < self.duration\n", + " R = R0 * state[\"S\"] / self.population\n", + " coal_rate = R * (1. + 1. / k) / (tau_i * state[\"I\"] + 1e-8)\n", + " pyro.factor(\"coalescent_{}\".format(t),\n", + " self.coal_likelihood(coal_rate, t)\n", + " if t_is_observed else torch.tensor(0.))\n", + "```\n", + "We first constructed a ``CoalescentRateLikelihood`` object to be used throughout inference and prediction; this performs preprocessing work once so that it is cheap to evaluate ``self.coal_likelihood(...)``. Note that ``(leaf_times, coal_times)`` should be in units of time steps, the same time steps as the time index `t` and `duration`. Typically ``leaf_times`` are in ``[0, duration)``, but ``coal_times`` precede ``leaf_times`` (as points of common ancestry), and may be negative. The likelihood involves the coalescent rate ``coal_rate`` in a coalescent process; we can compute this from an epidemiological model. In this superspreading model ``coal_rate`` depends on the reproductive number ``R``, the superspreading parameter ``k``, the incubation time ``tau_i``, and the current number of infected individuals ``state[\"I\"]`` [(Li et al. 2017)](#1)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Heterogeneous models \n", + "\n", + "Epidemiological parameters often vary in time, due to human interventions, changes in weather, and other external factors. We can model real-valued time-varying latent variables in ``CompartmentalModel`` by moving static latent variables from ``.global_model()`` to ``.initialize()`` and ``.transition()``. For example we can model a reproductive number under Brownian drift in log-space by initializing at a random ``R0`` and multiplying by a drifting factor, as in the [HeterogeneousSIRModel](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.contrib.epidemiology.models.HeterogeneousSIRModel) example:\n", + "```python\n", + "class HeterogeneousSIRModel(CompartmentalModel):\n", + " ...\n", + " def global_model(self):\n", + " tau = self.recovery_time\n", + " R0 = pyro.sample(\"R0\", dist.LogNormal(0., 1.))\n", + " rho = ...\n", + " return R0, tau, rho\n", + "\n", + " def initialize(self, params):\n", + " # Start with a single infection.\n", + " # We also store the initial beta value in the state dict.\n", + " return {\"S\": self.population - 1, \"I\": 1, \"beta\": torch.tensor(1.)}\n", + "\n", + " def transition(self, params, state, t):\n", + " R0, tau, rho = params\n", + " # Sample heterogeneous variables.\n", + " # This assumes beta slowly drifts via Brownian motion in log space.\n", + " beta = pyro.sample(\"beta_{}\".format(t),\n", + " dist.LogNormal(state[\"beta\"].log(), 0.1))\n", + " Rt = pyro.deterministic(\"Rt_{}\".format(t), R0 * beta)\n", + "\n", + " # Sample flows between compartments.\n", + " S2I = pyro.sample(\"S2I_{}\".format(t),\n", + " infection_dist(individual_rate=Rt / tau,\n", + " num_susceptible=state[\"S\"],\n", + " num_infectious=state[\"I\"],\n", + " population=self.population))\n", + " ...\n", + " # Update compartments and heterogeneous variables.\n", + " state[\"S\"] = state[\"S\"] - S2I\n", + " state[\"I\"] = state[\"I\"] + S2I - I2R\n", + " state[\"beta\"] = beta # We store the latest beta value in the state dict.\n", + " ...\n", + "```\n", + "Here we deterministically initialize a scale factor ``beta = 1`` in ``.initialize()`` then let it drift via log-Brownian motion. We also need to update ``state[\"beta\"]`` just as we update the compartmental variables. Now ``beta`` will be provided as a time series when we ``.predict()``. While we could have written ``Rt = R0 * beta``, we instead wrapped this computation in a ``pyro.deterministic`` thereby exposing ``Rt`` as another time series provided by ``.predict()``. Note that we could have instead sampled ``R0`` in ``.initialize()`` and let ``Rt`` drift directly, rather than introducing a scale factor ``beta``. However separating the two into a non-centered form improves geometry [(Betancourt and Girolami 2013)](#2).\n", + "\n", + "It is also easy to pass in time-varying covariates as tensors, in the same way we have passed in ``data`` to the constructors of all example models. To predict the effects of different causal interventions, you can pass in a covariate that is longer than ``duration``, run inference (looking only at the first ``[0,duration)`` entries), then mutate entries of the covariate after ``duration`` and generate different ``.predict()``ions." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Complex compartment flow \n", + "\n", + "The [CompartmentalModel](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.contrib.epidemiology.compartmental.CompartmentalModel) class assumes by default that the compartments are arranged linearly and terminate in an implicit terminal compartment named \"R\", for example S-I-R, S-E-I-R or boxcar models like S-E1-E2-I1-I2-I3-R. To describe other more complex flows between compartments, you can override the [.compute_flows()](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.contrib.epidemiology.compartmental.CompartmentalModel.compute_flows) method. However currently there is no support for flows with undirected loops (e.g. S-I-S).\n", + "\n", + "Let's create a branching SIRD model with possible flows\n", + "```\n", + "S → I → R\n", + " ↘\n", + " D\n", + "```\n", + "As with other models, we'll keep the \"R\" state implicit (although we could equally keep the \"D\" state implicit and the \"R\" state explicit). In the ``.compute_flows()`` method, we'll input a pair of states and we'll need to compute three flow values: ``S2I``, ``I2R``, and ``I2D``.\n", + "```python\n", + "class SIRDModel(CompartmentalModel):\n", + " def __init__(self, population, data):\n", + " compartments = (\"S\", \"I\", \"D\")\n", + " duration = len(data)\n", + " super().__init__(compartments, duration, population)\n", + " self.data = data\n", + "\n", + " def compute_flows(self, prev, curr, t):\n", + " S2I = prev[\"S\"] - curr[\"S\"] # S can only go in one direction.\n", + " I2D = curr[\"D\"] - prev[\"D\"] # D can only have come from one direction.\n", + " # Now by conservation at I, change + inflows + outflows = 0,\n", + " # so we can solve for the single unknown I2R.\n", + " I2R = prev[\"I\"] - curr[\"I\"] + S2I - I2D\n", + " return {\n", + " \"S2I_{}\".format(t): S2I,\n", + " \"I2D_{}\".format(t): I2D,\n", + " \"I2R_{}\".format(t): I2R,\n", + " }\n", + " ...\n", + " def transition(self, params, state, t):\n", + " ...\n", + " # Sample flows between compartments.\n", + " S2I = pyro.sample(\"S2I_{}\".format(t), ...)\n", + " I2D = pyro.sample(\"I2D_{}\".format(t), ...)\n", + " I2R = pyro.sample(\"I2R_{}\".format(t), ...)\n", + "\n", + " # Update compartments with flows.\n", + " state[\"S\"] = state[\"S\"] - S2I\n", + " state[\"I\"] = state[\"I\"] + S2I - I2D - I2R\n", + " state[\"D\"] = state[\"D\"] + I2D\n", + " ...\n", + "```\n", + "Note you can name the dict keys anything you want, as long as they match your sample statements in ``.transition()`` and you correctly reverse the flow computation in ``.transition()``. During inference Pyro will check that the ``.compute_flows()`` and ``.transition()`` computations agree. Take care to avoid in-place PyTorch operations, since these can modify the tensors rather than the dictionary:\n", + "```diff\n", + "+ state[\"S\"] = state[\"S\"] - S2I # Correct\n", + "- state[\"S\"] -= S2I # AVOID: may corrupt tensors\n", + "```\n", + "\n", + "For a slightly more complex example, take a look at the [SimpleSEIRDModel](http://docs.pyro.ai/en/latest/contrib.epidemiology.html#pyro.contrib.epidemiology.models.SimpleSEIRDModel)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## References\n", + "\n", + "1. \n", + " Lucy M. Li, Nicholas C. Grassly, Christophe Fraser (2017)\n", + " \"Quantifying Transmission Heterogeneity Using Both Pathogen Phylogenies\n", + " and Incidence Time Series\"\n", + " https://academic.oup.com/mbe/article/34/11/2982/3952784\n", + "2. \n", + " M. J. Betancourt, Mark Girolami (2013)\n", + " \"Hamiltonian Monte Carlo for Hierarchical Models\"\n", + " https://arxiv.org/abs/1312.0906" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.7" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/pyro/source/tutorial/source/epi_regional.rst b/pyro/source/tutorial/source/epi_regional.rst new file mode 100644 index 0000000000000000000000000000000000000000..a09b9dd033aeba6f1934f9bc80383de03c81cbea --- /dev/null +++ b/pyro/source/tutorial/source/epi_regional.rst @@ -0,0 +1,13 @@ +Example: Regional epidemiological models +========================================= + +`View regional.py on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/examples/contrib/epidemiology/regional.py + +__ github_ + +.. literalinclude:: ../../examples/contrib/epidemiology/regional.py + :language: python + + diff --git a/pyro/source/tutorial/source/epi_sir.rst b/pyro/source/tutorial/source/epi_sir.rst new file mode 100644 index 0000000000000000000000000000000000000000..b41ad5e7a284c708df9e54ecddba5557abc60772 --- /dev/null +++ b/pyro/source/tutorial/source/epi_sir.rst @@ -0,0 +1,12 @@ +Example: Univariate epidemiological models +=========================================== + +`View sir.py on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/examples/contrib/epidemiology/sir.py + +__ github_ + +.. literalinclude:: ../../examples/contrib/epidemiology/sir.py + :language: python + diff --git a/pyro/source/tutorial/source/forecast_simple.rst b/pyro/source/tutorial/source/forecast_simple.rst new file mode 100644 index 0000000000000000000000000000000000000000..cb6d8405c097ef5883e83c7abe089673d19b3b85 --- /dev/null +++ b/pyro/source/tutorial/source/forecast_simple.rst @@ -0,0 +1,12 @@ +Multivariate Forecasting +======================== + +`View bart.py on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/examples/contrib/forecast/bart.py + +__ github_ + +.. literalinclude:: ../../examples/contrib/forecast/bart.py + :language: python + diff --git a/pyro/source/tutorial/source/forecasting_dlm.ipynb b/pyro/source/tutorial/source/forecasting_dlm.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..2f2db500c5ff83ad4b869e82de76fe7ca40f1eec --- /dev/null +++ b/pyro/source/tutorial/source/forecasting_dlm.ipynb @@ -0,0 +1,668 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Forecasting with Dynamic Linear Model (DLM)\n", + "\n", + "Among state space models, Dynamic Linear Model (DLM) are one of the most popular models due to its explainability and ability to incorporate regressors with dynamic coefficients. Literature such as Harvey (1989) and Durbin and Koopman (2002) provide a complete review on the models. This notebook introduces a way to construct a vanlia DLM through Pyro and Forecaster modules. In the end, it provides an extension to incorporate flexible coefficients priors.\n", + "\n", + "See also:\n", + "- [Forecasting II: state space models](http://pyro.ai/examples/forecasting_ii.html)\n", + "\n", + "#### Workflow \n", + "1. data simulation\n", + "2. visualization of coefficients and response\n", + "3. Standard DLM training and validation\n", + " - posteriors comparison\n", + " - holdout validation\n", + "4. DLM with coefficients priors at various time points\n", + " - posteriors comparison\n", + " - holdout validation" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "ExecuteTime": { + "end_time": "2020-08-21T04:14:32.686227Z", + "start_time": "2020-08-21T04:14:31.202909Z" + } + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "import torch\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "import pyro.poutine as poutine\n", + "from pyro.contrib.forecast import ForecastingModel, Forecaster, eval_crps\n", + "from pyro.infer.reparam import LocScaleReparam\n", + "from pyro.ops.stats import quantile\n", + "\n", + "%matplotlib inline\n", + "assert pyro.__version__.startswith('1.9.1')\n", + "\n", + "pyro.set_rng_seed(20200928)\n", + "\n", + "pd.set_option('display.max_rows', 500)\n", + "plt.style.use('fivethirtyeight')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Data Simulation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Assume we have observation $y_t$ at time $t$ such that \n", + "$$y_t = x_t^T \\beta_t + \\epsilon_t$$\n", + "$$\\beta_t = \\beta_{t-1} + \\delta_t$$\n", + "where\n", + "\n", + "$x_t$ is a P x 1 vector of regressors at time $t$\n", + "\n", + "$\\beta_t$ is a P x 1 vector of latent coefficients at time $t$ following a random walk distribution\n", + "\n", + "$\\epsilon$ is the noise at time $t$\n", + "\n", + "We then simulate data in following distribution:\n", + "$$x_t \\sim \\mathcal{N}_p(0, \\sigma_x^2)$$\n", + "$$\\delta_t \\sim \\mathcal{N}_p(0, \\sigma_{\\delta}^2)$$\n", + "$$\\epsilon_t \\sim \\mathcal{N}(0, \\sigma_y^2)$$" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "torch.manual_seed(20200101)\n", + "# number of predictors, total observations\n", + "p = 5\n", + "n = 365 * 3\n", + "\n", + "# start, train end, test end\n", + "T0 = 0 \n", + "T1 = n - 28\n", + "T2 = n\n", + "\n", + "# initializing coefficients at zeros, simulate all coefficient values\n", + "beta0 = torch.empty(n, 1).normal_(0, 0.1).cumsum(0)\n", + "betas_p = torch.empty(n, p).normal_(0, 0.02).cumsum(0)\n", + "betas = torch.cat([beta0, betas_p], dim=-1)\n", + "\n", + "# simulate regressors\n", + "covariates = torch.cat(\n", + " [torch.ones(n, 1), torch.randn(n, p) * 0.1],\n", + " dim=-1\n", + ")\n", + "\n", + "# observation with noise\n", + "y = ((covariates * betas).sum(-1) + 0.1 * torch.randn(n)).unsqueeze(-1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Visualization of response and coefficients\n", + "Let's take a look on the truth simulated from the previous block." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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iEgHRowYASMjI6xcuRKPHz9WOP/69WsAwKBBgwAAq1atko/2Al+yQCxYsAAfP35E//79UaRIEQCAq6srmjVrhjNnzmDXrl2QyRQT+YSGhuLly5e6+FhERF8FpkEjItKRXbt2YcqUKTAyMpLnAY6NjUVgYCCSk5Plo74LFy7EqlWrULp0afTo0QMlS5aEr68vHj58iBo1auDcuXPyqQ8AEBERAXd3dzx79gw1atRAw4YNUapUKbx58wZPnz5FYGAg9u7di65du8qv0UYatGfPnmH16tXy499//x1FixaFh4eHvGzKlCmoVq1aju9BRJQXGAATEenQnTt3sH79ety6dQuxsbEoXbo0nJycMGDAAPTr109e788//8SWLVsQFBSE5ORkVKxYEe7u7pg0aZJgE4wMHz58wNatW3H8+HGEhIQgNTUV1tbWqFq1Kjp27Ii+ffsK5hRrIwD29/dHt27dVNY5efIkmjdvnuN7EBHlBQbARERERFSocA4wERERERUqDICJiIiIqFBhHmAiokIoLi4OGzduVKtuly5dUKdOHR33iIgo7zAAJiIqhOLj47F8+XK16laoUIEBMBF9VbgIjoiIiIgKFc4BJiIiIqJChQEwERERERUqDIC1KCQkJL+7QGrisyo4+KwKDj6rgoPPqmDgc9IdBsBEREREVKgwACYiIiKiQoUBMFEBsG/fPnh4eGDixImIiorK7+4QEREVaAyAifTcy5cvsXXrVsTGxiIoKAjbt2/P7y4REREVaAyAifTcnTt3BMfnzp2DTMb03URERDnFAJhIz3348EGhLCwsLO87QkRE9JVgAEyk52JiYhTK7t+/nw89ISIi+jowACbSc2KL3v7+++986AkREdHXgQEwkZ4TC4CvXbuGlJSUfOgNERFRwccAmEjPSKVSwXF0dLRovfbt2+OXX34RnSNMREREyjEAJtIjJ0+eRM+ePTF8+HDcunULKSkpiI+PV1r/0qVL+Omnn/Kug0RERF8BBsBEeiI2Nhbr169HXFwcnj9/jnnz5uH27dvZXnfnzh18+vQpD3pIRET0dWAATKQngoKCBPN609LSsGzZMrWunT17tq66RURE9NVhAEykJ54+fapQlnV+b9OmTbFz506Feg8fPhRNl5ZXQkNDsXjxYmzcuBGxsbH51g8iIiJ1MAAm0hOhoaHZ1ilTpgwcHBxQtmxZ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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, axes = plt.subplots(p + 2, 1, figsize=(10, 3 * (p + 2)))\n", + "for idx, ax in enumerate(axes):\n", + " if idx == 0:\n", + " axes[0].plot(y, 'k-', label='truth', alpha=.8)\n", + " axes[0].legend()\n", + " axes[0].set_title('response')\n", + " else:\n", + " axes[idx].plot(betas[:, idx - 1], 'k-', label='truth', alpha=.8)\n", + " axes[idx].set_title('coef_{}'.format(idx - 1))\n", + "plt.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Train and validate a vanilla DLM" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's build a vanilla DLM following the dynmics we discussed previously." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "class DLM(ForecastingModel):\n", + " def model(self, zero_data, covariates):\n", + " data_dim = zero_data.size(-1)\n", + " feature_dim = covariates.size(-1)\n", + " \n", + " drift_scale = pyro.sample(\"drift_scale\", dist.LogNormal(-10, 10).expand([feature_dim]).to_event(1))\n", + " with self.time_plate:\n", + " with poutine.reparam(config={\"drift\": LocScaleReparam()}):\n", + " drift = pyro.sample(\"drift\", dist.Normal(torch.zeros(covariates.size()), drift_scale).to_event(1))\n", + " \n", + " weight = drift.cumsum(-2) # A Brownian motion.\n", + " # record in model_trace \n", + " pyro.deterministic(\"weight\", weight) \n", + "\n", + " prediction = (weight * covariates).sum(-1, keepdim=True) \n", + " assert prediction.shape[-2:] == zero_data.shape\n", + " # record in model_trace \n", + " pyro.deterministic(\"prediction\", prediction)\n", + " \n", + " scale = pyro.sample(\"noise_scale\", dist.LogNormal(-5, 10).expand([1]).to_event(1))\n", + " noise_dist = dist.Normal(0, scale)\n", + " \n", + " self.predict(noise_dist, prediction) " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO \t step 0 loss = 7.11372e+10\n", + "INFO \t step 100 loss = 174.352\n", + "INFO \t step 200 loss = 2.06682\n", + "INFO \t step 300 loss = 1.27919\n", + "INFO \t step 400 loss = 1.15015\n", + "INFO \t step 500 loss = 1.34206\n", + "INFO \t step 600 loss = 0.928436\n", + "INFO \t step 700 loss = 1.00953\n", + "INFO \t step 800 loss = 1.04599\n", + "INFO \t step 900 loss = 0.870245\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 8.16 s, sys: 39.7 ms, total: 8.2 s\n", + "Wall time: 8.22 s\n" + ] + } + ], + "source": [ + "%%time\n", + "pyro.set_rng_seed(1)\n", + "pyro.clear_param_store()\n", + "model = DLM()\n", + "forecaster = Forecaster(\n", + " model, \n", + " y[:T1], \n", + " covariates[:T1], \n", + " learning_rate=0.1, \n", + " learning_rate_decay=0.05, \n", + " num_steps=1000,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Posteriors comparison\n", + "\n", + "We extract posteriors during the in-sample period and compare them against the truth." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "pyro.set_rng_seed(1)\n", + "# record all latent variables in a trace\n", + "with poutine.trace() as tr:\n", + " forecaster(y[:T1], covariates[:T1], num_samples=100)\n", + "\n", + "# extract the values from the recorded trace\n", + "posterior_samples = {\n", + " name: site[\"value\"]\n", + " for name, site in tr.trace.nodes.items()\n", + " if site[\"type\"] == \"sample\"\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also visualize the in-sample posteriors." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsAAAAXYCAYAAAC3DXqXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAEAAElEQVR4nOydZ3gc5dWG75nZJq1WvUuW5d67cW8YcKGbZhNCKKGXBBIChNA+OkkIoYQSOoTewQ1ccO+9d1u9a7WStu/OfD9md72S5d7xe1+XL2tXszPvFknPnHnOc6S6ujoNgUAgEAgEAoHgDEE+2QsQCAQCgUAgEAhOJEIACwQCgUAgEAjOKIQAFggEAoFAIBCcUQgBLBAIBAKBQCA4oxACWCAQCAQCgUBwRiEEsEAgEAgEAoHgjEIIYIFAIBAIBALBGYUQwAKBQCAQCASCMwohgAUCgUAgEAgEZxRCAAsEAoFAIBAIziiEABYIBIJDoKCggMTERC644ALKysq488476dSpE8nJyUyePBmAefPmMWnSJNq1a0daWhrdu3fnz3/+MxUVFfvsb8+ePdxzzz307duXzMxMWrduzYABA7jzzjspKiqKbDd//nwSExO5/fbb2bJlC5MmTSI/P5/s7GzGjx/PnDlzWlyvz+fj5ZdfZtiwYWRlZZGbm8u5557LRx99hKZp+2yfmJhIjx49cDqdPPLII3Tv3p309HT69OnDv//97xYfM23aNC655BI6d+5Meno6nTp1YuzYsbzwwgv7bOvxeHjllVcYOXIkOTk5ZGdnM2rUKN59990W9y0QCATHE6murk785hEIBIKDUFBQQK9evejatSv19fXEx8czbNgwNE3j0ksvZfny5Tz++OMkJSUxZswYMjIy2LhxI7NmzSI7O5sZM2aQk5MDQHl5OYMHD6ahoYFzzjmHTp064fP5KC4uZt68eXz44YeMGjUK0AXwRRddxJAhQ9iwYQPdu3dn4MCBlJaW8t133+H3+3nvvfe45JJLImv1+/1cfvnlzJs3j/bt2zN27Fh8Ph+TJ0+mrKyMa665hv/85z9Nnl9iYiJZWVm0bt2asrIyzj77bAwGA1OmTKGsrIwHH3yQBx98MLL9+++/zz333EN6ejpjx44lLS2Nmpoatm7dSnFxMRs2bIhs29DQwKWXXsrKlSvp2bMnAwcOBGDWrFns2rWLq6++mtdff/14vXUCgUCwD0IACwQCwSEQFsAAEydO5D//+Q8GgwGAhQsXcuGFF9K/f3++/PJLEhMTI4/77LPPuO2227jooov46KOPAHjzzTd54IEHeOaZZ7jjjjuaHMfr9eL3+4mLiwP2CmCAu+++myeffDKy7YoVKxg7dizx8fGsX78+8ph///vfPP7444wePZrPPvsMk8kEgMPhYNy4cWzevJkPPvigiWgOr/m8887jww8/JCYmBoCqqir69esHwM6dOzEajQCMHDmSzZs3s2HDBtLT05s8h5qaGlJSUiK37777bj766CMef/xx7rnnnibP9dprr+Xnn3/m008/Zfz48Yf0XggEAsHRIiwQAoFAcBiYTCaeeuqpiPgFeOONN9A0jRdffLGJ+AWYNGkSPXv2ZOrUqTQ0NDT5XlhkRmM2myNCNpr4+Hjuv//+Jvf179+fCRMmYLfbmTp1auT+Dz/8EICnn346In4BEhISePTRRwH44IMPWnx+zz//fJN1paWlcf7551NfX8/27dubbGswGCKCOJpo8Wu32/n000/p2bNnE/Ebfq7h9Xz++ectrkcgEAiOB4aDbyIQCASCMHl5eaSlpTW5b+nSpRgMBn788Ud+/PHHfR7j8/kIBoPs3LmT3r17M378eJ588kn+8pe/MHPmTM455xzOOussunXrhiy3XJfo1asXNpttn/uHDh3KV199xbp167jqqqtoaGhg165dpKen06VLl322HzlyJABr167d53vx8fG0bdt2n/tzc3MBqKuri9x35ZVX8vDDDzNw4EAmTJjAkCFDGDhwIJmZmU0eu3LlSgKBALIs8+yzz+6z70AgAMC2bdtafN4CgUBwPBACWCAQCA6D5pf7AWprawkEAjz//PMHfGxjYyOgi+jZs2fz/PPPM3PmTKZMmRLZ9y233MK9996LoigHPS4QEeP19fVN/t/f9rGxscTHx+NwOPb5XkJCQouPCa8lGAxG7rvrrrtIS0vj3Xff5e233+bNN98E4KyzzuLRRx9l+PDhgP7aAKxZs4Y1a9a0uH/Y+9oIBALBiUAIYIFAIDgMJEna5774+Hj8fn+T9IaD0bFjR9555x2CwSAbN25k3rx5vP322zz11FMEg0EeeOCBJttXVla2uJ+qqqrIGqL/39/2LpeL+vp6kpOTD3mt+2PixIlMnDiR+vp6VqxYwbRp0/jg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s2bNYty4cQAtussJIYQQQohjJykQHcjo0aMZNmwY559/PiaTXDohhBBCiBMhUVQH4+bmxvPPP0///v3beyhCCCGEEB2SBMAd0PDhw9t7CEIIIYQQHZbkAAshhBBCiE5FAmAhhBBCCNGpSAAshBBCCCE6FQmAhRBCCCFEp6JUVlZq7T0IIYQQQgghTheZARZCCCGEEJ2KBMBCCCGEEKJTkQBYCCGEEEJ0KhIACyGEEEKITkUCYCGEEEII0alIANwGZs+eTb9+/QgPD2f8+PGsXr26vYfUab3yyiuce+65xMbGkpCQwJVXXsnu3btbbKNpGs8++yy9evUiIiKCqVOnsmfPnhbbVFZWcvvttxMXF0dcXBy33347lZWVp/FMOrdXXnmFgIAA/vGPf7gek+t2ZiosLOTOO+8kISGB8PBwhg8fzsqVK13Py3U78zgcDp566inX361+/frx1FNPYbfbXdvIdWt/q1at4qqrriIpKYmAgAA+++yzFs+31TXatWsXF154IRERESQlJfH888+jaWd/gTAJgE/S3Llzeeihh7jvvvtYvnw5w4YN4/LLLycnJ6e9h9YprVy5kltvvZWFCxfy448/YjKZuOSSS6ioqHBt85///Ie33nqL559/nt9//53Q0FBmzJhBTU2Na5vbbruN7du38+233/Ltt9+yfft27rjjjvY4pU5nw4YNfPTRRyQnJ7d4XK7bmaeyspILLrgATdP4+uuvWbduHS+88AKhoaGubeS6nXlee+01Zs+ezfPPP8/69et57rnneP/993nllVdc28h1a391dXX07t2b5557Dk9Pz0Oeb4trVF1dzYwZMwgLC+P333/nueee44033uDNN988LefYnqQO8EmaOHEiycnJvP76667HBg0axPTp03nsscfacWQCoLa2lri4OD777DOmTJmCpmn06tWLmTNncv/99wPQ0NBA9+7defLJJ7n55pvZt28fw4cPZ8GCBYwYMQKANWvWMGXKFDZs2ED37t3b85TOalVVVYwfP57XX3+d559/nt69e/Piiy/KdTtDPfHEE6xatYqFCxe2+rxctzPTlVdeSWBgIO+8847rsTvvvJOKigq++uoruW5noOjoaF544QWuvfZaoO1+tz744AMef/xxUlJSXEH2iy++yJw5c9i9ezeKorTPCZ8GMgN8EqxWK1u3bmXChAktHp8wYQLr1q1rp1GJ5mpra1FVlYCAAACysrIoKipqcc08PT0ZNWqU65qtX78eHx8fhg8f7tpmxIgReHt7y3U9xf72t78xffp0xo0b1+JxuW5npvnz5zN48GBuvvlmEhMTGTNmDO+9957r9qlctzPTiBEjWLlyJSkpKQDs3buXFStWcP755wNy3TqCtrpG69evZ+TIkS1mmCdOnEhBQQFZWVmn6Wzah6m9B9CRlZWV4XA4WtzuAwgNDaW4uLidRiWae+ihh+jbty/Dhg0DoKioCKDVa1ZQUABAcXExwcHBLT75KopCSEiIXNdT6OOPP2b//v289957hzwn1+3MlJmZyQcffMBdd93F3/72N3bs2MGDDz4IwO233y7X7Qz1t7/9jdraWoYPH47RaMRut3P//fdz2223AfL71hG01TUqLi4mKirqkH00PdelS5dTdQrtTgJgcdZ65JFHWLt2LQsWLMBoNLb3cMQRpKam8sQTT7BgwQLc3NzaezjiGKmqysCBA13pXv3792f//v3Mnj2b22+/vZ1HJw5n7ty5fPnll8yePZtevXqxY8cOHnroIeLi4rjhhhvae3hCnBaSAnESgoODMRqNlJSUtHi8pKSEsLCwdhqVAHj44Yf57rvv+PHHH1t8gg0PDwc44jULCwujrKysxSpYTdMoLS2V63qKrF+/nrKyMkaMGEFwcDDBwcGsWrWK2bNnExwcTFBQECDX7UwTHh5Oz549WzzWo0cPcnNzXc+DXLczzaOPPso999zDn/70J5KTk7nqqqu4++67efXVVwG5bh1BW12jsLCwVvfR9NzZTALgk2A2mxkwYABLly5t8fjSpUtb5NyI0+vBBx90Bb89evRo8Vx8fDzh4eEtrlljYyNr1qxxXbNhw4ZRW1vL+vXrXdusX7+euro6ua6nyNSpU1m9ejUrVqxw/Tdw4ED+9Kc/sWLFChITE+W6nYFGjBhBWlpai8fS0tKIjY0F5PftTFVfX3/IXTGj0YiqqoBct46gra7RsGHDWLNmDY2Nja5tli5dSmRkJPHx8afpbNqHpECcpLvvvps77riDwYMHM3z4cObMmUNhYSE333xzew+tU7r//vv56quv+PTTTwkICHDlSXl7e+Pj44OiKMyaNYtXXnmF7t27k5iYyEsvvYS3tzeXXXYZAD179uS8887j3nvv5bXXXgPg3nvv5YILLpCVzadIQECAa6FiEy8vLwIDA+nduzeAXLcz0F133cWkSZN46aWXuPTSS9m+fTvvvfce//rXvwDk9+0MNXnyZF577TXi4+Pp1asX27dv56233uKqq64C5LqdKWpra9m/fz+gpxvl5uayfft2AgMDiY2NbZNrdNlll/H8889z1113cf/995OWlsZrr73GAw88cFZXgAApg9YmZs+ezX/+8x+KiopISkrimWeeYfTo0e09rE7p4CCqyYMPPsjDDz8M6LeAnnvuOT766CMqKysZPHgwL730kivQAr2+6QMPPMCvv/4KwJQpU3jhhRcOu3/R9qZOneoqgwZy3c5UCxcu5IknniAtLY2YmBhmzpzJHXfc4frjKdftzFNTU8PTTz/Nzz//TGlpKeHh4fzpT3/igQcewMPDA5DrdiZYsWIF06ZNO+Txq6++mrfffrvNrtGuXbu4//772bx5MwEBAdx88808+OCDEgALIYQQQghxNpEcYCGEEEII0alIACyEEEIIIToVCYCFEEIIIUSnIgGwEEIIIYToVCQAFkIIIYQQnYoEwEIIIYQQolORAFgIIYQQQnQqEgALIYQQQohORQJgIYQQQgjRqUgALIQQQgghOhUJgIUQQgghRKciAbAQQgghhOhUJAAWQgghhBCdigTAQgghhBCiU5EAWAghhBBCdCoSAAshhBBCiE5FAmAhhBBCCNGpSAAshBCdgM1m47nnnmPw4MGEh4cTEBDAZ5991t7DEkKIdiEBsBBCdAJvvvkmzz33HD4+Ptx99908+OCD9O3b97j309DQwLPPPsuQIUMIDw8nMTGRm266iX379p2CUQshxKmhVFZWau09CCGEEKfW5MmTWbt2Lfv27SM8PPyE9mGxWLjkkktYs2YNAwcOZNy4ceTl5fHDDz9gNpv58ccfGTJkSBuPXAgh2p6pvQcghBDi1CsoKAA44eAX4K233mLNmjVMnz6dDz/8EINBv4k4Y8YMrr32Wu655x5Wr17telwIIc5U8n8pIYQ4hTZv3swtt9xCUlISoaGh9OjRg2nTpvH555+32O7HH3/koosuIi4ujvDwcIYNG8bTTz9NbW1tq/utqqri6aefZuTIkURGRhITE8PkyZP54YcfWmw3a9YsAgICyMrKAiAgIICAgIDjTn/QNI05c+YA8O9//7tFkDt16lRGjhzJ3r17Wbly5XHtVwgh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qlf+TAghhBCivZIc4A6i/gxweno6ISEhjuoSV199Nb169WLixIltMraAgADKysoICAhok/sXQgghhDgbEgB3EF5eXo4c4MzMTMLCwhzXxcbGEhsb21ZDIyoqCkByf4UQQgjRIUgKRAdRfwY4Ly+vXZUZ69OnD4DMAAshhBCiQ5AAuIPw8PBA0zRKSkrIyclpV7OtPXv25NJLL8XNza2thyKEEEIIcUYSAHcQiqIwfPhwnnvuOb7++ut2teDMZDLxzDPPtPUwhBBCCCGaRQLgDuTmm28mMjISAH9//7YdjBBCCCFEByWL4DqQusVuN954Y4NFcEIIIYQQovkkAO6A6ur/CiGEEEKIsycpEEIIIYQQolORAFgIIYQQQnQqEgALIYQQQohORQJgIYQQQgjRqSjFxcVaWw9CCCGEEEKIC0VmgIUQQgghRKciAbAQQgghhOhUJAAWQgghhBCdigTAQgghhBCiU5EAWAghhBBCdCoSALeABQsWMGDAAIKDg5k4cSKbN29u6yF1Wm+88QaTJ08mIiKCnj17cuONN3Lo0KEG22iaxiuvvELv3r0JCQlhxowZHD58uME2xcXF3H///XTt2pWuXbty//33U1xcfAEfSef2xhtv4OPjw5///GfHZXLc2qfs7GwefPBBevbsSXBwMCNHjmTjxo2O6+W4tT82m42XXnrJ8b01YMAAXnrpJaxWq2MbOW5tb9OmTdx0003Exsbi4+PDF1980eD6ljpGBw8e5IorriAkJITY2FheffVVNO3iLxAmAfB5+vHHH3n66ad54oknWL9+PSNGjOD6668nLS2trYfWKW3cuJF7772X5cuXs3jxYoxGI1dffTVFRUWObd5++23ef/99Xn31VVavXk1gYCDXXHMNZWVljm3uu+8+4uLi+P777/n++++Ji4vjgQceaIuH1Ons2LGDTz/9lL59+za4XI5b+1NcXMyll16Kpml8++23bNu2jddee43AwEDHNnLc2p+33nqLBQsW8Oqrr7J9+3bmzp3Lxx9/zBtvvOHYRo5b26uoqKBPnz7MnTsXV1fXU65viWNUWlrKNddcQ1BQEKtXr2bu3Lm8++67vPfeexfkMbYlqQN8nqZOnUrfvn155513HJcNGTKEWbNm8fe//70NRyYAysvL6dq1K1988QWXX345mqbRu3dv5syZw5NPPglAVVUV0dHR/POf/+Tuu+8mPj6ekSNH8ttvvzFq1CgAtmzZwuWXX86OHTuIjo5uy4d0USspKWHixIm88847vPrqq/Tp04d58+bJcWunXnzxRTZt2sTy5csbvV6OW/t044034uvrywcffOC47MEHH6SoqIhvvvlGjls7FB4ezmuvvcatt94KtNx765NPPuEf//gHCQkJjiB73rx5LFy4kEOHDqEoSts84AtAZoDPQ01NDXv37mXKlCkNLp8yZQrbtm1ro1GJ+srLy7Hb7fj4+ABw/PhxcnJyGhwzV1dXxowZ4zhm27dvx8PDg5EjRzq2GTVqFO7u7nJcW9ljjz3GrFmzmDBhQoPL5bi1T0uWLGHo0KHcfffdREVFMW7cOD766CPH6VM5bu3TqFGj2LhxIwkJCQAcOXKEDRs2MH36dECOW0fQUsdo+/btjB49usEM89SpU8nKyuL48eMX6NG0DWNbD6AjKygowGazNTjdBxAYGEhubm4bjUrU9/TTT9O/f39GjBgBQE5ODkCjxywrKwuA3Nxc/P39G/zyVRSFgIAAOa6t6LPPPiM5OZmPPvrolOvkuLVPKSkpfPLJJ/zxj3/kscceY//+/Tz11FMA3H///XLc2qnHHnuM8vJyRo4ciaqqWK1WnnzySe677z5A3m8dQUsdo9zcXMLCwk7ZR911kZGRrfUQ2pwEwOKi9eyzz7J161Z+++03VFVt6+GI00hMTOTFF1/kt99+w2QytfVwRDPZ7XYGDx7sSPcaOHAgycnJLFiwgPvvv7+NRyea8uOPP/L111+zYMECevfuzf79+3n66afp2rUrd9xxR1sPT4gLQlIgzoO/vz+qqpKXl9fg8ry8PIKCgtpoVALgmWee4YcffmDx4sUNfsEGBwcDnPaYBQUFUVBQ0GAVrKZp5Ofny3FtJdu3b6egoIBRo0bh7++Pv78/mzZtYsGCBfj7++Pn5wfIcWtvgoODiYmJaXBZr169SE9Pd1wPctzam+eff56HH36Ya6+9lr59+3LTTTfx0EMP8eabbwJy3DqCljpGQUFBje6j7rqLmQTA58HJyYlBgwaxZs2aBpevWbOmQc6NuLCeeuopR/Dbq1evBtd169aN4ODgBsesurqaLVu2OI7ZiBEjKC8vZ/v27Y5ttm/fTkVFhRzXVjJjxgw2b97Mhg0bHP8GDx7Mtddey4YNG4iKipLj1g6NGjWKpKSkBpclJSUREREByPutvaqsrDzlrJiqqtjtdkCOW0fQUsdoxIgRbNmyherqasc2a9asITQ0lG7dul2gR9M2JAXiPD300EM88MADDB06lJEjR7Jw4UKys7O5++6723pondKTTz7JN998w//+9z98fHwceVLu7u54eHigKAp/+MMfeOONN4iOjiYqKorXX38dd3d3rrvuOgBiYmKYNm0ajz/+OG+99RYAjz/+OJdeeqmsbG4lPj4+joWKddzc3PD19aVPnz4ActzaoT/+8Y9ccsklvP7668yePZu4uDg++ugj/va3vwHI+62duuyyy3jrrbfo1q0bvXv3Ji4ujvfff5+bbroJkOPWXpSXl5OcnAzo6Ubp6enExcXh6+tLREREixyj6667jldffZU//vGPPPnkkyQlJfHWW2/xl7/85aKuAAFSBq1FLFiwgLfffpucnBxiY2P517/+xdixY9t6WJ3SyUFUnaeeeopnnnkG0E8BzZ07l08//ZTi4mKGDh3K66+/7gi0QK9v+pe//IVly5YBcPnll/Paa681uX/R8mbMmOEogwZy3Nqr5cuX8+KLL5KUlESXLl2YM2cODzzwgOPLU45b+1NWVsbLL7/Mr7/+Sn5+PsHBwVx77bX85S9/wcXFBZDj1h5s2LCBmTNnnnL5zTffzPz581vsGB08eJAnn3yS3bt34+Pjw913381TTz0lAbAQQgghhBAXE8kBFkIIIYQQnYoEwEIIIYQQolORAFgIIYQQQnQqEgALIYQQQohORQJgIYQQQgjRqUgALIQQQgghOhUJgIUQQgghRKciAbAQQgghhOhUJAAWQgghhBCdigTAQgghhBCiU5EAWAghhBBCdCoSAAshhBBCiE5FAmAhhBBCCNGpSAAshBBCCCE6FQmAhRBCCCFEpyIBsBBCCCGE6FQkABZCCCGEEJ2KBMBCCNEJWCwW5s6dy9ChQwkODsbHx4cvvviirYclhBBtwtjWAxBCCNH63nvvPebOncvAgQN56KGHMJlM9O/f/6z2sWvXLn799Vf2799PXFwcubm5BAUFkZCQ0EqjFkKI1iEBsBBCdALLly8H4NtvvyU4OPic9vHdd9/xwQcfYDKZiImJITc3tyWHKIQQF4xSXFystfUghBBCtK6BAwdy/PhxiouLz3kfcXFxaJpGbGwsTk5O+Pj4yAywEKJDkhxgIYRoRbt37+aee+4hNjaWwMBAevXqxcyZM/nyyy8bbLd48WKuvPJKunbtSnBwMCNGjODll1+mvLy80f2WlJTw8ssvM3r0aEJDQ+nSpQuXXXYZixYtarDdH/7wB3x8fDh+/DgAPj4++Pj4nHX6A8CAAQMYOHAgTk5OZ31bIYRoT2QGWAghWsnnn3/O448/jsFg4LLLLiM6OpqCggL27duHzWZjw4YNALz88svMmzcPX19fZs2ahbe3N2vWrCEuLo5+/fqxbNkyPD09HfvNzMxk5syZHD16lNGjRzNo0CAqKytZsWIFWVlZPPXUUzzzzDMAjpzd+fPnU1paylNPPQWAt7c3f/zjH8/r8ckMsBCio5IAWAghWsGRI0cYN24cbm5uLFu2jL59+za4Pj09nS5durBjxw6mT59OWFgYv//+O6GhoQBomsYf/vAHvv76a+bMmcO8efMct501axbr16/n448/5rrrrnNcXlpaypVXXsn+/ftZv359g1ne/v37k5aWdl4pECeTAFgI0VFJCoQQQrSCTz75BKvVypNPPnlK8AvQpUsXAP773/8C8H//93+O4BdAURRefPFFXF1d+fLLL7FYLAAcPHiQdevWMWPGjAbBL4CXlxdPP/00mqbx3XfftdZDE0KIDk+qQAghRCvYuXMnANOmTTvtdvv27QNgwoQJp1wXFBREnz592LVrF0lJScTGxrJt2zYAysrKeOWVV065TUFBAQDx8fHnNX4hhLiYSQAshBCtoKSkBICwsLDTbldaWgrowW5j6kqW1e2vsLAQgHXr1rFu3bom91tRUXF2AxZCiE5EAmAhhGgF3t7egL5gzcfHp8ntvLy8AMjNzW10u5ycnAbb1f33pZde4uGHH27BEQshROchOcBCCNEKhg0bBsCqVatOu93AgQMBHBUh6svLy+Pw4cO4u7sTHR0NwIgRIwDYsmVLSw5XCCE6FQmAhRCiFdx7770YjUZef/11Dh06dMr1GRkZANx2220AvPHGG47ZXtCrQPz973+nsrKSm2++GZPJBMCgQYMYO3YsS5cu5bPPPkPTTi3kk5SURFpaWms8LCGEuChIGTQhhGgln332GY8//jhGo9FRB7ioqIi4uDjMZrNj1vfFF1/kjTfewM/Pj6uvvhovLy/WrFnDvn376NOnD7/99psj9QEgKyuLWbNmkZCQQJ8+fRg+fDi+vr5kZmZy5MgR4uLi+N///seVV17puE1LlEFLSEjgzTffdPz91Vdf4eLiwjXXXOO47PHHH6dXr17nfB9CCHEhSAAshBCtaMeOHbz77rts3bqVoqIi/Pz8iImJ4ZZbbuGmm25ybLdo0SI++ugj9u/fj9lsplu3bsyaNYtHH320QROMOhUVFXz88cf8/PPPJCYmYrFYCAoKIioqissuu4wbb7yxQU5xSwTAGzZsYObMmafd5pdffmH8+PHnfB9CCHEhSAAshBBCCCE6FckBFkIIIYQQnYoEwEIIIYQQolOROsBCCNEJFRcXM3/+/GZtO2PGDAYMGNDKIxJCiAtHAmAhhOiESkpKePXVV5u1bdeuXSUAFkJcVGQRnBBCCCGE6FQkB1gIIYQQQnQqEgALIYQQQohORQLgFpSYmNjWQxDnQI5bxyPHrGOS49YxyXHrmOS4nZ4EwEIIIYQQolORAFgIIYQQQnQqEgALIYQQQohORQJgITqorVu3UlZW1tbDEEIIITocCYCF6KA+/PBD1q1b19bDEEIIITocCYCF6KBycnLYvXt3Ww9DCCGE6HAkABaiAyovL8dsNrN7927sdntbD0cIIYToUCQAFqIDysnJISIiAnd3d44dO9bWwxFCCCE6FAmAheiAcnJyCAoKYtCgQezbt6+thyOEEEJ0KBIAC9EB5eXlERQURJ8+fdi3bx82m62thySEEEJ0GBIAC9EB5efnExgYSN++fVm3bh2PPvooqampWCyWth6aEEII0e5JACxEO7dmzRoyMjIaXJaXl0dAQACRkZF8+umnFBUVcccdd/DQQw+10SiFEEKIjkMCYCHaMU3TeOGFF7jvvvswm82Oy/Pz8wkICAAgMjKS//73vwwdOpTKysq2GqoQQgjRYUgALEQ7lpGRQWBgIP3792ft2rWOy/Pz8wkKCnL8bTAYePbZZ0lPT+fdd99tg5EKIYQQHYcEwEK0YwkJCfTu3Zvx48ezfft2x+W5ubn4+/s32NbPzw+An376qd3UBi4tLaWqqqqthyGEEEI0IAGwEO1Yeno6Xbt2ZfTo0ezZs4fly5dTWVmJ3W7H09OzwbaKogBgt9uJi4tri+Ge4qWXXuLyyy/HarW29VCEEEIIBwmAhWjH0tLSCA8PJyAggD//+c8sXrzYsQCuLuCtb/Xq1Tz33HO89dZbF36wjagrz7Zt27Y2HokQQghxggTAQrRjmZmZhIeHAzB8+HCOHj3KY489hpubW6PbGwwGJk6cSGZmJjU1NRdyqI0qKCjgiiuuYPPmzW09FCGEEMKh1QLgBQsWMGDAAIKDg5k4ceJpvwA3bNiAj4/PKf8SEhIabPfzzz8zcuRIgoKCGDlyJL/88ktrDV+INqVpGp988glpaWlERkYCYDQaURSFoqIi8vLymrytyWTC29ubZ555hkOHDl2gETeuoKCAKVOmsH///jYdhxBCCFFfqwTAP/74I08//TRPPPEE69evZ8SIEVx//fWkpaWd9nZbt24lPj7e8a9nz56O67Zv384999zD9ddfz4YNG7j++uu566672LlzZ2s8BCHa1I4dO1i5ciXvvfce3t7ejst79epFWFgYH3zwwWlvb7Va2bVrF2+++WabLYirqamhqqqKwYMHk5eXR2lpaZuMQwghhDhZqwTA77//Prfccgt33nknMTExzJs3j+DgYBYuXHja2wUGBhIcHOz4p6qq47r58+czfvx4nnzySWJiYnjyyScZN24c8+fPb42HIESrSU1N5c0336SoqKjJbTZs2MC1115L165dG1z+2muv8Z///Ifg4ODT3sfChQtZtmwZJpOJjz76CE3TWmTszfHDDz8we/ZsCgsL8fX1RVVVunfvzrFjxy7YGIQQQojTafEAuKamhr179zJlypQGl0+ZMuWMC2EmTZpETEwMV111FevXr29w3Y4dO07Z59SpU2Vxjehwtm/fzs8//8y8efOa3CY1NZUePXqccrmzszPOzs5nvA9fX19cXV154YUXWLVqFSkpKecz5LOSkpJCYWEhGRkZhIWFATQaAG/dupUFCxa0m5JtQgghOg9jS++woKAAm81GYGBgg8sDAwPJzc1t9DYhISG88cYbDBkyhJqaGr755htmzZrFkiVLGDNmDAA5OTlntc86iYmJ5/Fozt6Fvj/RMi7kcdu9ezdXX301ixYt4uDBgzg5OZ2yzZEjR7BarS0yrqCgILZs2XLBSpHl5+djNptZtGgRnp6eJCYm4unpyS+//ELPnj2xWq189dVX5ObmEh8fT0xMDCEhIWd9P/Je65jkuHVMctw6ps583KKjo097fYsHwOciOjq6wUBHjBhBamoq77zzjiMAPp99XyiJiYkX9P5Ey7jQx62srIwbbriBxMREzGYzffv2bXD93r17MRqN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7rvvsm7dOv70pz8RHx8fWEZet57H008/zfPPP8/jjz/O+vXreeyxx3juued48sknA8vI69b91NfXM2jQIB577DFCQkKOm98Z16impoarrrqKhIQElixZwmOPPcbf//53/vGPf5yRY+xOpA/wN2Tq1Knk5OTwt7/9LTBtxIgRzJw5k4ceeqgbWyYBqKurIy0tjTfeeINLL70Uy7IYMGAAt956K/feey8AjY2N9O3bl9///vfMmTOHPXv2MHbsWBYuXMi4ceMAWLNmDZdeeikbNmygb9++3XlI32qqq6uZNGkSf/vb33j88ccZNGgQTzzxhLxuPZSHH36YL7/8ks8++6zN+fK69UxuuOEGoqOj+c9//hOY9qMf/YjKykreeecded16IL169eJPf/oTN954I9B5360XXniB//u//2Pv3r0Bkf3EE0/w4osvsnPnThRF6Z4DPgPICPA3wOPxsHnzZi688MIW0y+88ELWrVvXTa2SNKeurg7TNHE6nQDk5+dTXFzc4pqFhIQwYcKEwDVbv3494eHhjB07NrDMuHHjCAsLk9e1i7nnnnuYOXMmF1xwQYvp8rr1TD755BNGjhzJnDlzyM7O5rzzzuPZZ58NdJ/K69YzGTduHKtWrWLv3r0A7N69m5UrV3LRRRcB8rqdDXTWNVq/fj3jx49vEWGeOnUqRUVF5Ofnn6Gj6R5s3d2As5ny8nIMw2jR3QcQHx9PSUlJN7VK0pz777+fIUOGMGbMGACKi4sB2rxmRUVFAJSUlBAbG9vizVdRFOLi4uR17UJeeeUVDhw4wLPPPnvcPHndeiaHDh3ihRde4Mc//jH33HMP27Zt47777gPgtttuk9eth3LPPfdQV1fH2LFj0TQNXde59957ueWWWwD5fTsb6KxrVFJSQkpKynHb8M/LyMjoqkPodqQAlnxrefDBB1m7di0LFy5E07Tubo6kHfLy8nj44YdZuHAhdru9u5sj6SCmaTJ8+PBAutewYcM4cOAAzz//PLfddls3t05yIj788EPefvttnn/+eQYMGMC2bdu4//77SUtL4+abb+7u5kkkZwSZAvENiI2NRdM0SktLW0wvLS0lISGhm1olAXjggQf44IMP+Pjjj1u8wSYmJgK0e80SEhIoLy9vMQrWsizKysrkde0i1q9fT3l5OePGjSM2NpbY2Fi+/PJLnn/+eWJjY4mJiQHkdetpJCYm0r9//xbT+vXrR0FBQWA+yOvW0/jtb3/LnXfeyTXXXENOTg6zZ8/mjjvu4KmnngLkdTsb6KxrlJCQ0OY2/PO+zUgB/A1wOBzk5uaydOnSFtOXLl3aIudGcma57777AuK3X79+Lealp6eTmJjY4pq5XC7WrFkTuGZjxoyhrq6O9evXB5ZZv3499fX18rp2ETNmzGD16tWsXLky8DN8+HCuueYaVq5cSXZ2trxuPZBx48axb9++FtP27dtH7969Afl966k0NDQc1yumaRqmaQLyup0NdNY1GjNmDGvWrMHlcgWWWbp0KcnJyaSnp5+ho+keZArEN+SOO+7g9ttvZ+TIkYwdO5YXX3yRY8eOMWfOnO5u2jnJvffeyzvvvMPrr7+O0+kM5EmFhYURHh6OoijMnTuXJ598kr59+5Kdnc2f//xnwsLCuPbaawHo378/06ZN46c//SlPP/00AD/96U+55JJL5MjmLsLpdAYGKvoJDQ0lOjqaQYMGAcjr1gP58Y9/zMUXX8yf//xnrr76arZu3cqzzz7Lb37zGwD5feuhTJ8+naeffpr09HQGDBjA1q1b+ec//8ns2bMBed16CnV1dRw4cAAQ6UYFBQVs3bqV6Ohoevfu3SnX6Nprr+Xxxx/nxz/+Mffeey/79u3j6aef5pe//OW32gECpA1ap/D888/z17/+leLiYgYOHMgf//hHJk6c2N3NOidpLaL83HfffTzwwAOA6AJ67LHHePnll6mqqmLkyJH8+c9/DggtEP6mv/zlL1mwYAEAl156KX/6059OuH1J5zNjxoyADRrI69ZT+eyzz3j44YfZt28fqamp3Hrrrdx+++2Bh6e8bj2P2tpa/vCHPzB//nzKyspITEzkmmuu4Ze//CXBwcGAvG49gZUrV3LFFVccN/073/kO//73vzvtGu3YsYN7772XTZs24XQ6mTNnDvfdd58UwBKJRCKRSCQSybcJmQMskUgkEolEIjmnkAJYIpFIJBKJRHJOIQWwRCKRSCQSieScQgpgiUQikUgkEsk5hRTAEolEIpFIJJJzCimAJRKJRCKRSCTnFFIASyQSiUQikUjOKaQAlkgkEolEIpGcU0gBLJFIJBKJRCI5p5ACWCKRSCQSiURyTiEFsEQikUgkEonknEIKYIlEIpFIJBLJOYUUwBKJRCKRSCSScwopgCUSiUQikUgk5xRSAEskEolEIpFIzimkAJZIJBKJRCKRnFNIASyRSCQSiUQiOaeQAlgikUjOAbxeL4899hgjR44kMTERp9PJG2+80d3Nkkgkkm7B1t0NkEgkEknX849//IPHHnuMYcOGcccdd2C32xkyZEiH1/d6vXz22Wd8/vnnbNy4kYKCAjweD2lpaVx88cXcc889xMXFdeERSCQSSeehVFVVWd3dCIlEIpF0LdOnT2ft2rXs2bOHxMTEU15/7969jBkzhpCQEM477zwGDBiAx+Nh5cqV7Ny5k8TERBYsWEBWVlYXtF4ikUg6FymAJRKJ5Bxg2LBh5OfnU1VVdVrrFxYWMm/ePL773e8SERERmG6aJvfccw+vvvoq06dP5+233+6kFkskEknXIXOAJRKJpAvZtGkTP/jBDxg4cCDx8fH069ePK664gjfffLPFch9//DGXX345aWlpJCYmMmbMGP7whz9QV1fX5narq6v5wx/+wPjx40lOTiY1NZXp06fzv//9r8Vyc+fOxel0kp+fD4DT6cTpdJ5S+gNASkoKt99+ewvxC6CqKg888AAAq1atOqVtSiQSSXchI8ASiUTSRbz66qv89Kc/RVVVpk+fTt++fSkvL2fLli0YhsHKlSsB+MMf/sATTzxBdHQ0M2fOJCoqiqVLl7J161YGDx7MggULWgjPwsJCrrjiCvbv38/48ePJzc2loaGBzz//nKKiIu67776AKJ0/fz7btm3j3//+NzU1Ndx3330AREVF8eMf/7hTjrOsrIzs7GyioqICQlsikUh6MlIASyQSSRewe/duzjvvPEJDQ1mwYAE5OTkt5hcUFJCamsqGDRu46KKLSElJYfHixSQnJwNgWRZz587l7bff5tZbb+WJJ54IrDtz5kxWrFjBc889x7XXXhuYXlNTw+WXX862bdtYsWJFiyjvkCFDOHLkyGmnQLTHU089xe9+9zuuueYaXnjhhU7fvkQikXQ2MgVCIpFIuoAXXngBXde59957jxO/AKmpqQC89tprAPzsZz8LiF8ARVF4+OGHCQkJ4c0338Tr9QKwY8cOli9fzowZM1qIX4DIyEjuv/9+LMvivffe66pDa8GGDRt4/PHHiYyM5De/+c0Z2adEIpF8U6QNmkQikXQBGzduBGDatGntLrdlyxYALrjgguPmJSQkMGjQIL766iv27dvHwIED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CYMHD24yyB0/fjwzZszgscceO7cX3YyzPW4LFiwgMjKSO+64Q7vtdPuJjo7GZDJx5ZVX8vHHHzN//nzS0tJIS0ujtraW+Ph4Fi9ezLhx48659MZqtfL3v/8de3t7wsLCtEmqubm5lJSUNJokWltby6ZNm7C3t+eNN97A3t6eTz75hOHDh3P11VezYMECgoKC+Oyzz85pXCC6tURERJzT30tX+nvrCK3Kfy9atIidO3e2+C82NhY/Pz8sFkujxt6n9uFrTl5eHj///DO33HLLabd1cXEhKirqrBvKS5IkdSQ/Pz+OHTum9SKtqalpsPpYYmIiDz/8MLNmzWp2H0FBQRQUFGj7sGWxwsPD23XsF4uQkBBeffVVRowYQXJyMi4uLtjZ2aHX6/H09GTChAmt3peTk1ODLgggrgKMGDGCm266iRUrVjT5uMOHD5Ofn89DDz3UZLbddhl+7dq1naqjQXV1NQaDQaujbq1bbrmF4cOH4+npyddff02vXr0ICQkBRPnB0aNHiYqKapO688jISKZMmUJGRgaXXnop+fn5WK1W5s2bx1133UVKSgq///67tv3KlSv55JNP8PPz05YK37lzJ++99x6JiYkAjUo3z1b9EgipfbQqAPb29qZ3794t/nNycmLgwIEYjUbWr1+vPdb2C9uayRaff/459vb2XH311afdtqqqioSEhHNuvyNJktQRIiMj2blzJ3FxcQA8/vjjWqeIVatWcf/99/PII4+0+Hno4eFBcXFxg6WNIyMjZdanjXl4eHD48OEGE9i+++67NptBP336dNavX8/48eMb1ZXaekgDTS7OkZOTg5+fH2FhYa1ave58KS4uxtPT84wD1aioKF544QUAbaK7rSY7LS2N3NzcNl2O94477mDt2rX4+fmRn5/PgQMHCAgIYMCAASxcuJB//etfWvmR7QRj6tSpTJ8+HaPRCIgr1N988w2enp5NLjncWvUX5igtLZUBcDtr0wpod3d3brrpJp588kk2bNjAvn37uOOOO4iJiWH8+PHadkOHDuX9999v8FhVVfn444+56qqrcHFxabTvxx9/nC1btpCSksKuXbu45ZZbqKioaDCDVJIkqavo0aMHV155pTYR7tixY1rrra+++kqb59ASNzc3CgoKeO+997Rs5AMPPKB9MUttw93dnUOHDp1T3+SWuLi4aCc6GRkZDSbF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8QfXX3890dHReHh48NlnnzW4v62O0aFDh7j00ksJCAggOjqaF154AVVV2/vldbg2D4CXLFmCyWRq9O/GG2/Utjlw4ADvvPNOg8fNnj2buLg48vLy2LlzJ5dffnmD+xVFYcmSJRw9epScnBx+/vln+vTp09bDP2Pffvstixcv5qGHHmLTpk0MGzaMOXPmkJaW1tFDuyht2bKF2267jV9++YWVK1diMBi44oorKCoq0rZpzaIqt99+O/v37+frr7/m66+/Zv/+/dxxxx0d8ZIuOnFxcXz00UfExMQ0uF0et87HZDIxbdo0VFXlq6++YseOHbz44osNOvbI49b5vPrqqyxbtowXXniBnTt38vzzz/PBBx/w8ssva9vI49bxysvL6dOnD88//zyOjo6N7m+LY1RSUsKVV16Jn58f69at4/nnn+eNN97gzTffPC+vsSMpJpPpwg/z29GkSZOIiYnh9ddf124bPHgws2fP1ko8pI5TVlZGaGgon332GTNmzEBVVaKioliwYIG28EplZSURERH861//Yt68eRw9epThw4ezZs0aRowYAcC2bduYMWMGcXFxsrVMOyouLuaSSy7h9ddf54UXXqBPnz4sXbpUHrdO6qmnnuKPP/7gl19+afJ+edw6p+uuuw5PT0/effdd7bY777yToqIivvzyS3ncOqGgoCBefPFFLZnYVsfoww8/5P/+7/84duyYFmQvXbqU5cuXc/jwYRRF6ZgXfB50ij7AXVVNTQ179+5ttIjHxIkT5QIdnURZWRlWqxUPDw+gdYuq7Ny5ExcXF20SJsCIESNwdnaWx7Wd2VZ7HDduXIPb5XHrnH766SdiY2OZN28evXr1YsyYMbz//vva5VN53DqnESNGsGXLFo4dOwbAkSNH2Lx5M1OmTAHkcesK2uoY7dy5k5EjRzbIME+aNImsrCxSU1PP06vpGG0+Ce5iUlBQgMVi6fQLdFzMFi9eTL9+/Rg2bBjQ8qIqWVlZAOTm5uLt7d3gzFdRFHx8fORxbUf//e9/SUpK4v333290nzxunVNKSgoffvghd911Fw888AAHDhzgscceA2DhwoXyuHVSDzzwAGVlZQwfPhy9Xo/ZbObhhx/m9ttvB+TfW1fQVscoNzeXwMDARvuw3RceHt5eL6HDyQBYumD97W9/Y/v27axZswa9Xt/Rw5FakJCQwFNPPcWa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4I477iA8PJzw8HDuuOOORutUi+Y1b948vLy8ePTRR/Vlct7OTBkZGdx5551069aNwMBAhgwZwoYNG/T1ct7OPGazmTlz5ui/W/369WPOnDnU1NTo28h5a3sbN27k+uuvp1evXnh5efHFF1/YrG+uc7R3714uv/xygoKC6NWrF6+88gqKcvYXCJMA+DT9+OOPPPHEEzz88MP89ddfDB48mGuvvZbk5OS2blqHtGHDBm677TZWrlzJ0qVLsbOzY+LEieTn5+vbvPnmm7z77ru88sorrF69Gn9/f6666iqKi4v1bWbMmMGuXbv4/vvv+f7779m1axczZ85si0PqcLZu3conn3xC7969bZbLeTvzFBQUcOmll6IoCt9++y2bN2/m1Vdfxd/fX99GztuZ54033mDhwoW88sorbNmyhZdffpkFCxYwb948fRs5b22vtLSU6OhoXn75ZZydneusb45zVFRUxFVXXUVAQACrV6/m5Zdf5u233+add95plWNsS1IH+DSNGTOG3r1789Zbb+nLzjnnHCZMmMDs2bPbsGUCoKSkhPDwcL744gvGjh2Loij07NmT22+/nUceeQSA8vJyoqKieP7555k+fToHDx5kyJAhrFixgqFDhwLwzz//MHbsWLZu3UpUVFRbHtJZrbCwkBEjRvDWW2/xyiuvEB0dzdy5c+W8naGee+45Nm7cyMqVK+tdL+ftzDR58mS8vb354IMP9GV33nkn+fn5fPPNN3LezkCdOnXi1VdfZcqUKUDzfbY++ugj/vvf/3Lo0CE9yJ47dy6LFi1i3759GAyGtjngViA9wKehqqqK2NhYRo8ebbN89OjRbN68uY1aJWorKSnBYrHg5eUFQFJSEpmZmTbnzNnZmWHDhunnbMuWLbi5uTFkyBB9m6FDh+Lq6irntYU98MADTJgwgQsvvNBmuZy3M9Nvv/3GwIEDmT59OpGRkVxwwQXMnz9fv30q5+3MNHToUDZs2MChQ4cAOHDgAOvXr+fiiy8G5Ly1B811jrZs2cJ5551n08M8ZswY0tPTSUpKaqWjaRt2bd2A9iw3Nxez2Wxzuw/A39+frKysNmqVqO2JJ56gb9++DB48GIDMzEyAes9Zeno6AFlZWfj6+tpc+RoMBvz8/OS8tqBPP/2Uw4cPM3/+/Drr5LydmRITE/noo4+46667eOCBB9i9ezePP/44AHfccYectzPUAw88QElJCUOGDMFkMlFTU8MjjzzCjBkzAPm8tQfNdY6ysrIICQmpsw9tXefOnVvqENqcBMDirPWf//yHTZs2sWLFCkwmU1s3RzQiLi6O5557jhUrVmBvb9/WzRFNZLFYGDBggJ7u1b9/fw4fPszChQu544472rh1oiE//vgjX3/9NQsXLqRnz57s3r2bJ554gvDwcG666aa2bp4QrUJSIE6Dr68vJpOJ7Oxsm+XZ2dkEBAS0UasEwJNPPskPP/zA0qVLba5gAwMDARo9ZwEBAeTm5tqMglUUhZycHDmvLWTLli3k5uYydOhQfH198fX1ZePGjSxcuBBfX198fHwAOW9nmsDAQHr06GGzrHv37qSkpOjrQc7bmebZZ5/lnnvu4ZprrqF3795cf/313H333fzf//0fIOetPWiucxQQEFDvPrR1ZzMJgE+Dg4MDMTExrFmzxmb5mjVrbHJuROt6/PHH9eC3e/fuNusiIiIIDAy0OWcVFRX8888/+jkbPHgwJSUlbNmyRd9my5YtlJaWynltIePGjePvv/9m/fr1+r8BAwZwzTXXsH79eiIjI+W8nYGGDh1KfHy8zbL4+HjCwsIA+bydqcrKyurcFTOZTFgsFkDOW3vQXOdo8ODB/PPPP1RUVOjbrFmzhuDgYCIiIlrpaNqGpECcprvvvpuZM2cycOBAhgwZwqJFi8jIyGD69Olt3bQO6ZFHHuGbb77h888/x8vLS8+TcnV1xc3NDYPBwKxZs5g3bx5RUVFERkby2muv4erqyqRJkwDo0aMHF110EQ8++CBvvPEGAA8++CCXXnqpjGxuIV5eXvpARY2Liwve3t5ER0cDyHk7A911111ccsklvPbaa1x99dXs2rWL+fPn88wzzwDI5+0Mddlll/HGG28QERFBz5492bVrF++++y7XX389IOftTFFSUsLhw4cBNd0oJSWFXbt24e3tTVhYWLOco0mTJvHKK69w11138cgjjxAfH88bb7zBY489dlZXgAApg9YsFi5cyJtvvklmZia9evXixRdf5Pzzz2/rZnVIxwdRmscff5wnn3wSUG8Bvfzyy3zyyScUFBQwcOBAXnvtNT3QArW+6WOPPcby5csBGDt2LK+++mqD+xfNb9y4cXoZNJDzdqZauXIlzz33HPHx8YSGhnL77bczc+ZM/cdTztuZp7i4mBdeeIFff/2VnJwcAgMDueaaa3jsscdwcnIC5LydCdavX8/48ePrLL/hhht4//33m+0c7d27l0ceeYTt27fj5eXF9OnTefzxxyUAFkIIIYQQ4mwiOcBCCCGEEKJDkQBYCCGEEEJ0KBIACyGEEEKIDkUCYCGEEEII0aFIACyEEEIIIToUCYCFEEIIIUSHIgGwEEIIIYToUCQAFkIIIYQQHYoEwEIIIYQQokORAFgIIYQQQnQoEgALIYQQQogORQJgIYQQQgjRoUgALIQQQgghOhQJgIUQQgghRIciAbAQQgghhOhQJAAWQgghhBAdigTAQgghhBCiQ5EAWAghOoDq6mpefvllBg4cSGBgIF5eXnzxxRdt3SwhhGgTdm3dACGEEC3vnXfe4eWXX6Z///7cfffd2Nvb07dv35Pax6xZs/jqq68aXL9lyxa6d+9+uk0VQogWJwGwEEJ0ACtXrgTg22+/JTAw8LT2dcMNNxAeHl5nua+v72ntVwghWosEwEII0QGkp6cDnHbwC3DjjTcyfPjw096PEEK0FckBFkKIFrR9+3ZuvfVWevXqhb+/P927d2f8+PF8+eWXNtstXbqUK664gvDwcAIDAxk8eDAvvPACJSUl9e63sLCQF154gfPOO4/g4GBCQ0O57LLLWLJkic12s2bNwsvLi6SkJAC8vLzw8vI66fQHIYQ4m0gPsBBCtJDPPvuMBx98EKPRyGWXXUZUVBS5ubns3LmT999/nxtvvBGAF154gblz5+Lt7c3VV1+Np6cna9asYe7cuSxfvpzly5fj7u6u7zctLY3x48eTkJDAeeedxy233EJZWRm///47t9xyC48//jhPPvkkAOPGjSM8PJz333+foqIiHn/8cQA8PT1P+bg2bdrEjh07UBSFzp07M2LECLy8vE79hRJCiFZmKCgoUNq6EUIIcbY5cOAAF1xwAS4uLixfvpzevXvbrE9JSSE0NJStW7dy8cUXExISwqpVqwgODgZAURRmzZrF119/ze23387cuXP1x06YMIG//vqLBQsWMGnSJH15UVERV1xxBbt37+avv/6y6eXt27cvycnJFBQUnPIxNTQIztXVlSeffJJ77rnnlPcthBCtSVIghBCiBXz00UfU1NTwyCOP1Al+AUJDQwFYvHgxAA899JAe/AIYDAaee+45nJ2d+fLLL6murgZg7969rFu3jnHjxtkEvwAeHh488cQTKIrCd9991+zHNGzYMD7++GN2795NRkYGsbGxPP/88xiNRp5++mkWLFjQ7M8phBAtQVIghBCiBfz7778AXHTRRY1ut3PnTgAuvPDCOusCAgKIjo5m27ZtxMfH06tXLzZv3gxAcXExL730Up3H5ObmAnDw4MHTan99pk2bZvN3586duffee4mKiuL666/nxRdfZPr06djZyU+LEOLMJt9SQgjRAgoLCwEICQlpdLuioiJADXbro1Vt0PaXl5cHwLp161i3bl2D+y0tLT25Bp+Gyy67jJCQENLS0jh48GC9Pd5CCHEmkQBYCCFagDbILC0trdEBYh4eHgBkZWXVu11mZqbNdtp/58yZc0bl3Pr6+pKWlkZZWVlbN0UIIU5IcoCFEKIFnHvuuQD8+eefjW7Xv39/ANavX19nXXZ2Nvv378fV1ZWoqCgABg8eDMA///zTnM09LYWFhcTFxWEwGIiIiGjr5gghxAlJACyEEC3gtttuw87Ojtdee419+/bVWZ+amgrA1KlTAZg3b57e2wtqFYjZs2dTVlbGDTfcgL29PQAxMTGcf/75LFu2jE8//RRFqVvIJz4+nuTk5GY9nszMTL3NtZWUlHDXXXdRUVHByJEjG0zlEEKIM4mUQRNCiBby6aef8uCDD2JnZ6fXAc7Pz2fXrl1UVlbqvb7PPfcc8+bNw8fHh4kTJ+Lh4cGaNWvYuXMn0dHRrFixQk99AHVWtwkTJnDo0CGio6MZNGgQ3t7epKWlceDAAXbt2sXnn3/OFVdcoT/mdMugrV+/nokTJzJ48GC6deuGv78/aWlprF27lszMTDp37swvv/xCWFjYab1mQgjRGiQAFkKIFrR161befvttNm3aRH5+Pj4+PvTo0YMbb7yR66+/Xt9uyZIlzJ8/n927d1NZWUlERAQTJkzg/vvvt5kEQ1NaWsqCBQv4+eefiYuLo7q6moCAACIjI7nsssuYPHmyTU7x6QbAKSkpvPbaa2zfvp3U1FQKCwtxcXEhMjKSyy+/nJkzZ9bbTiGEOBNJACyEEEIIIToUyQEWQgghhBAdigTAQgghhBCiQ5E6wEII0QEVFBTw/vvvN2nbcePG0a9fvxZukRBCtB4JgIUQogMqLCzklVdeadK24eHhEgALIc4qMghOCCGEEEJ0KJIDLIQQQgghOhQJgIUQQgghRIciAXAziouLa+smiFMg5639kXPWPsl5a5/kvLVPct4aJwGwEEIIIYToUCQAFkIIIYQQHYoEwEIIIYQQokORAFgIIUSbqampoaqqqq2bIYToYCQAFkII0WZee+01rr/++rZuhhCig5GZ4IQQQrQ6i8XCvn37yM3NJS8vr62bI4ToYKQHWAghRKtbv3499913H3Z2aj/M+++/38YtEkJ0JBIACyGEaBHFxcX8+eefdZYrisKXX36Jm5sb//zzD+PHj+fff/9tgxYKIToqCYCFEEI0u99//50VK1YwZ84cLBaLzbpff/2VqqoqbrjhBgBGjhxJSkoKWVlZgBogL1y4kF9//ZXMzEwWLFjQ6u0XQpzdJAdYCCFEs1IUhRdffBF/f38AkpKS6NKli77us88+46WXXqKsrAyAsLAwKisrue6661ixYgU//fQTX331FS4uLlRUVPD9998zffp07OzssFgsbN68mXPPPRd7e/s2O0YhRPsmPcBCCCGaVX5+PgDZ2dkA7N27F4CKigoOHjyIk5MTkZGRdO/eHQAvLy9uvfVWevTowYIFC5g/fz5vv/024eHhvPPOO1RWVpKQkADAmjVrePLJJ9m5c2cbHJkQ4mwhPcBCCCFOSllZGY6OjphMpjrrCgoK2L17N7169cLBwYHQ0FCOHDlCRUUFd9xxBxdccAEXXHABAE5OTqxatQqTycRNN93E0KFDueOOOxg8eDDR0dGMHTuWvXv3ctFFFxEbG0uPHj1IT08HID4+nnPPPbdVj1sIcfaQHmAhhBAn5corr2T27NkUFBTUWff4448ze/ZswsPDefPNNxk5ciQHDx7ksssuA2Dr1q2MHDlS3752EK31CCuKAsAVV1zBn3/+yahRo9i0aROg9i537dqV+Pj4Fjo6IURHID3AQgghGrVv3z7i4uIYPHgwBw4coKamhg0bNlBTU8PLL79ss60WvI4fPx6Abt26sW/fPgDuu+8+Lr30Unx8fBp8rjfeeANfX1/9bzs7OwYMGMDzzz9PUVERR48eZdCgQWzevLm5D1MI0YFIACyEEKJRy5cv55dffsHOzo6amhp9ucFgANRc399//50pU6ZQWFjIggULiIqKAsDb2xsPDw+6d+/Oueee22jwCxATE1NnmYuLC8HBwTzzzDPs3LmTSZMm8dNPP1FVVYWDg0PzHagQosOQFAghhBAN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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# overlay estimations with truth\n", + "fig, axes = plt.subplots(p + 2, 1, figsize=(10, 3 * (p + 2)))\n", + "# posterior quantiles of latent variables\n", + "pred_p10, pred_p50, pred_p90 = quantile(posterior_samples['prediction'], (0.1, 0.5, 0.9)).squeeze(-1)\n", + "# posterior quantiles of latent variables\n", + "coef_p10, coef_p50, coef_p90 = quantile(posterior_samples['weight'], (0.1, 0.5, 0.9)).squeeze(-1)\n", + "\n", + "for idx, ax in enumerate(axes):\n", + " if idx == 0:\n", + " axes[0].plot(y[:T1], 'k-', label='truth', alpha=.8, lw=1)\n", + " axes[0].plot(pred_p50, 'r-', label='estimate', alpha=.8, lw=1)\n", + " axes[0].fill_between(torch.arange(0, T1), pred_p10, pred_p90, color=\"red\", alpha=.3)\n", + " axes[0].legend()\n", + " axes[0].set_title('response')\n", + " else:\n", + " axes[idx].plot(betas[:T1, idx - 1], 'k-', label='truth', alpha=.8, lw=1)\n", + " axes[idx].plot(coef_p50[:, idx - 1], 'r-', label='estimate', alpha=.8, lw=1)\n", + " axes[idx].fill_between(torch.arange(0, T1), coef_p10[:, idx-1], coef_p90[:, idx-1], color=\"red\", alpha=.3)\n", + " axes[idx].set_title('coef_{}'.format(idx - 1))\n", + "plt.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see that not all coefficients can be recovered in the vanilla model." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Holdout validation\n", + "Here, we will visualize the holdout validation for comparison later." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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J598EidPnsRzzz2H73znO5yQTJQgU93X9+3bh/379+Oqq65CVlYWDh06hP/xP/4HbrrpJpSVlQEArrvuOtTW1uKhhx7C3//936Ovrw//83/+T3z961/nhGSiBIm0r/f19aGtrQ0DAwMAgDNnziA7OxuFhYUoLCyM6ng93vu60N/fL0W+GRFNB7/97W+xZcsWnD9/Hjk5Odi0aRN+8IMfIDs7G4C/NOnHP/4xfvGLX6C/vx/Lli3Ds88+i7q6Onkd/f39+M53voM//vGPAICbbroJ//iP/wi73Z6Mp0REOsLt66Ojo7j33nvx2WefYWBgAIWFhbjqqqvw/e9/XzFBbXx8HD/4wQ/w6quvYmxsDFdffTX+z//5P4rbEFHi7N69G7feeqtm+V/8xV9g69atMfsOb25uxpNPPomDBw/Cbrfjvvvuw3e/+10GDIkSZKr7+ieffIInn3wSJ06cgMvlQllZGb785S/jm9/8Jmw2m7y+trY2PPnkk3jvvfdgtVpx11134Uc/+hEsFkvCnivRbBZpX3/ppZfw6KOPaq7/7ne/i+9973sAojtej+e+zoAhERERERERERERydjDkIiIiIiIiIiIiGQMGBIREREREREREZGMAUMiIiIiIiIiIiKSMWBIREREREREREREMgYMiYiIiIiIiIiISMaAIREREREREREREckYMCQiIiIiIiIiIiIZA4ZEREREREREREQkY8CQiIiIiIiIiIiIZP8/0xTsmkZLLF4AAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pyro.set_rng_seed(1)\n", + "samples = forecaster(y[:T1], covariates, num_samples=1000)\n", + "p10, p50, p90 = quantile(samples, (0.1, 0.5, 0.9)).squeeze(-1)\n", + "crps = eval_crps(samples, y[T1:])\n", + "\n", + "plt.figure(figsize=(20, 5))\n", + "plt.fill_between(torch.arange(T1, T2), p10, p90, color=\"red\", alpha=.3)\n", + "plt.plot(torch.arange(T1, T2), p50, 'r-', label='forecast', alpha=.8)\n", + "plt.plot(np.arange(T1 - 200, T2), y[T1 - 200:T2], 'k-', label='truth', alpha=.5)\n", + "plt.title(\"Response against time (CRPS = {:0.3g})\".format(crps))\n", + "plt.axvline(T1, color='b', linestyle='--')\n", + "plt.legend(loc=\"best\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Train a DLM with coefficients priors at various time points\n", + "\n", + "Sometime user may have prior beliefs of certain coefficients at certain time point. This can be useful in cases where modelers can set an informative prior for those coefficients. For illustration, we create a simple evenly distributed time points and set priors on those points with the known value $B_t$ as such\n", + "$$ \\beta_t \\sim \\mathcal{N}_p(B_t, 0.5)$$ where $t \\in [t_1, t_2, ... t_n]$ and $[t_1, t_2, ... t_n]$ are the time points we have experiential results." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "# let's provide some priors\n", + "time_points = np.concatenate((\n", + " np.arange(300, 320),\n", + " np.arange(600, 620),\n", + " np.arange(900, 920),\n", + "))\n", + "# broadcast on time-points\n", + "priors = betas[time_points, 1:]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(60,) torch.Size([60, 5])\n" + ] + } + ], + "source": [ + "print(time_points.shape, priors.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Model Training\n", + "Now, let's construct the new DLM which allows user import coefficents prior at certain time points." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "class DLM2(ForecastingModel):\n", + " def model(self, zero_data, covariates):\n", + " data_dim = zero_data.size(-1)\n", + " feature_dim = covariates.size(-1)\n", + "\n", + " drift_scale = pyro.sample(\"drift_scale\", dist.LogNormal(-10, 10).expand([feature_dim]).to_event(1))\n", + " with self.time_plate:\n", + " with poutine.reparam(config={\"drift\": LocScaleReparam()}):\n", + " drift = pyro.sample(\"drift\", dist.Normal(torch.zeros(covariates.size()), drift_scale).to_event(1))\n", + " weight = drift.cumsum(-2) # A Brownian motion.\n", + " # record in model_trace \n", + " pyro.deterministic(\"weight\", weight)\n", + " \n", + " # This is the only change from the simpler DLM model. \n", + " # We inject prior terms as if they were likelihoods using pyro observe statements.\n", + " for tp, prior in zip(time_points, priors):\n", + " pyro.sample(\"weight_prior_{}\".format(tp), dist.Normal(prior, 0.5).to_event(1), obs=weight[..., tp:tp+1, 1:]) \n", + "\n", + " prediction = (weight * covariates).sum(-1, keepdim=True) \n", + " assert prediction.shape[-2:] == zero_data.shape\n", + " # record in model_trace \n", + " pyro.deterministic(\"prediction\", prediction)\n", + " \n", + " scale = pyro.sample(\"noise_scale\", dist.LogNormal(-5, 10).expand([1]).to_event(1))\n", + " noise_dist = dist.Normal(0, scale)\n", + " self.predict(noise_dist, prediction) " + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO \t step 0 loss = 7.11372e+10\n", + "INFO \t step 100 loss = 105.237\n", + "INFO \t step 200 loss = 2.21884\n", + "INFO \t step 300 loss = 1.70493\n", + "INFO \t step 400 loss = 1.64291\n", + "INFO \t step 500 loss = 1.80583\n", + "INFO \t step 600 loss = 0.903905\n", + "INFO \t step 700 loss = 1.25712\n", + "INFO \t step 800 loss = 1.10254\n", + "INFO \t step 900 loss = 0.926691\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 36.6 s, sys: 316 ms, total: 36.9 s\n", + "Wall time: 37.2 s\n" + ] + } + ], + "source": [ + "%%time\n", + "pyro.set_rng_seed(1)\n", + "pyro.clear_param_store()\n", + "model = DLM2()\n", + "forecaster2 = Forecaster(\n", + " model, \n", + " y[:T1], \n", + " covariates[:T1], \n", + " learning_rate=0.1, \n", + " learning_rate_decay=0.05, \n", + " num_steps=1000,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Posterior comparison\n", + "Finally, let's redo the exercise we did in previous section to check in-sample posteriors and holdout validation." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "pyro.set_rng_seed(1)\n", + "with poutine.trace() as tr:\n", + " forecaster2(y[:T1], covariates[:T1], num_samples=100)\n", + "\n", + "posterior_samples2 = {\n", + " name: site[\"value\"]\n", + " for name, site in tr.trace.nodes.items()\n", + " if site[\"type\"] == \"sample\"\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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Ly666CIuuugi2traWLlyJR9++CHPPfccF154IQsXLmTAgAGJ8fz4xz/m4Ycf/tLHlEgkkkOBzAGWSCSSL8mECRPwer1s2LDhC2+raRqjRo3ihhtu4I033gBI2Kols27dur1yiEEU4AGMGjUKgLS0NPr3709dXR1bt27da/0FCxYAMGbMmC881n2Rnp7O9OnTeeSRR7jhhhsIBoN88skngMhTVlWVJUuWHLLjSSQSyZdFCmCJRCL5klx//fUA3HzzzVRWVu71fjAY7CQA165d2ymfNk7cL9jlcu31Xltb214R1JUrVzJ79mw8Hg+nn356Yvnll18OwB133EEkEum0j9/+9rcAXHHFFQd6et0yf/78bv17u55DTk4OF110ERs2bODBBx9M5PwmU1lZKXOAJRLJ14pMgZBIJJIvybe+9S3uvfde7r77bsaPH8+MGTPo27cvwWCQ8vJyFi9eTFFREQsXLgSENdq//vUvJk2aRP/+/cnKyqK8vJwPPvgATdO46aab9jrG8ccfz3PPPceqVauYPHkyVVVVzJ49G9M0+fOf/9zJOeL6669nzpw5zJkzhylTpjBz5kwikQjvvvsuVVVVXHzxxZx77rlf6pwvv/xyUlNTOe644ygqKkJRFFatWsWSJUvo169fp/0//PDDlJaW8tBDD/Hqq68yZcoU8vPzqa2tZceOHaxYsYL777+fQYMGfakxSSQSyYEiBbBEIpEcAm688UYmT57ME088wZIlS/joo49wu9306NGD7373u5x33nmJdS+44AIikQjLli1jw4YN+P1+CgoKOO2007juuusSvrvJ9O3blz/+8Y/cc889PP3004TDYcaNG8ctt9ySaJoRx2638+abb/L444/z2muv8dRTT6GqKkOHDuXWW29NRIi/DPfccw//+9//2LBhA3PnzkXXdQoLC7nlllu45pprOhXUpaWl8d577/HCCy/w+uuv89577xEMBsnNzaVPnz7cfffdna6PRCKRfNXIRhgSiURyBBNvhCG7pUkkEsmhQ+YASyQSiUQikUiOKaQAlkgkEolEIpEcU0gBLJFIJBKJRCI5ppA5wBKJRCKRSCSSYwoZAZZIJBKJRCKRHFNIASyRSCQSiUQiOaaQAlgikUgkEolEckwhBfAhpKSk5HAPQXIQyPt29CHv2dGJvG9HJ/K+HZ3I+7Z/pACWSCQSiUQi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zrPPPkv37t2Jj49nypQpbNu2rdU+1dXV3H777aSmppKamsrtt99OdXX1KTyTM9tLL71EeHg4Dz30kP8xuW6np+LiYu68804yMjKIi4tj2LBhLF682L9drtvpx+v18vTTT/t/b/Xt25enn34aj8fj30euW/tbsmQJV155JT169CA8PJwPPvig1fYTdY22bNnC+eefT3x8PD169OD5559H13/5BcIkAD5OX3zxBY888gi/+93vWLRoEUOHDuXyyy8nLy+vvYd2Rlq8eDG33HILc+bMYebMmZjNZqZNm0ZVVZV/n3/84x+8+uqrPP/888yfP5+YmBguvvhi6urq/PvceuutbNy4kc8++4zPPvuMjRs3cscdd7THKZ1xVq1axbvvvkuvXr1aPS7X7fRTXV3Neeedh67rfPLJJ6xYsYK//OUvxMTE+PeR63b6+fvf/85bb73F888/z8qVK3nuued48803eemll/z7yHVrfw0NDfTs2ZPnnnuOoKCgA7afiGtUW1vLxRdfTGxsLPPnz+e5557jn//8J6+88sopOcf2JHWAj9P48ePp1asXL7/8sv+xgQMHMnXqVP70pz+148gEQH19PampqXzwwQdMnjwZXdfp3r07t912Gw8++CAAjY2NZGZm8n//93/cdNNN7Nixg2HDhjF79myGDx8OwLJly5g8eTKrVq0iMzOzPU/pF62mpoYxY8bw8ssv8/zzz9OzZ09eeOEFuW6nqaeeeoolS5YwZ86cNrfLdTs9XXHFFURERPD666/7H7vzzjupqqri448/lut2GkpKSuIvf/kL11xzDXDi/m29/fbbPPHEE+zcudMfZL/wwgvMmDGDrVu3oihK+5zwKSAzwMfB5XKxfv16xo0b1+rxcePGsWLFinYalWipvr4eTdMIDw8HIDc3l5KSklbXLCgoiJEjR/qv2cqVKwkJCWHYsGH+fYYPH05wcLBc15Pst7/9LVOnTmX06NGtHpfrdnr67rvvGDRoEDfddBNdunThrLPO4o033vDfPpXrdnoaPnw4ixcvZufOnQBs376dn3/+mYkTJwJy3TqCE3WNVq5cyYgRI1rNMI8fP56ioiJyc3NP0dm0D3N7D6Ajq6iowOv1trrdBxATE0NpaWk7jUq09Mgjj9CnTx+GDh0KQElJCUCb16yoqAiA0tJSoqKiWn3zVRSF6Ohoua4n0Xvv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vZfY2FiCg4MZOnQoa9ascTwu163jsdvt/Otf/3L83erbty//+te/sNlsjn3kurW/tWvXcv3115OQkICvry9ffPFFs8db6xqlpKRw2WWXERISQkJCAq+88gqadu4XCJMA+Az98MMPPPnkkzz++OOsWrWKIUOGMH36dLKzs9t7aOelNWvWcMcdd/Dbb7/x008/YTKZuPLKKykrK3Ps8+9//5v33nuPV155heXLlxMYGMhVV11FVVWVY58777yTnTt38t133/Hdd9+xc+dO7rnnnvZ4SeedTZs28emnn9KrV69m2+W6dTzl5eVcfPHFaJrGN998w8aNG3n11VcJDAx07CPXreN56623mDNnDq+88gpJSUm8/PLLfPTRR7zxxhuOfeS6tb+amhoSExN5+eWXcXNzO+rx1rhGlZWVXHXVVQQFBbF8+XJefvll3nnnHd59992z8hrbk9QBPkMTJkygV69evP32245tF1xwAVOnTuUf//hHO45MAFRXVxMZGckXX3zBpZdeiqZp9OzZk7vuuosnnngCgLq6Onr06ME///lPbr/9dvbt28fQoUNZvHgxw4YNA2D9+vVceumlbNq0iR49erTnSzqnVVRUMGbMGN5++21eeeUVEhMTmTVrlly3Dur5559n7dq1/Pbbby0+LtetY7ruuuvw8/Pj/fffd2y79957KSsr4+uvv5br1gGFh4fz6quvctNNNwGt97P18ccf8+yzz7J//35HkD1r1izmzp3L7t27URSlfV7wWSAzwGfAYrGwfft2xo8f32z7+PHj2bhxYzuNSjRVXV2Nqqr4+voCkJmZSUFBQbNr5ubmxoUXXui4ZklJSXh6ejJ06FDHPsOGDcPDw0Ouaxt75JFHmDp1KqNHj262Xa5bx7Ro0SIGDhzI7bffTvfu3Rk5ciQffvih4/apXLeOadiwYaxZs4b9+/cDsHfvXlavXs2kSZMAuW6dQWtdo6SkJIYPH95shnnChAkcOnSIzMzMs/Rq2oepvQfQmZWUlGC325vd7gMIDAyksLCwnUYlmnryySfp06cPQ4YMAaCgoACgxWt26NAhAAoLCwkICGj2zldRFLp06SLXtQ199tlnpKen8+GHHx71mFy3jikjI4OPP/6Y+++/n0ceeYTk5GRmzpwJwN133y3XrYN65JFHqK6uZujQoRiNRmw2G0888QR33nknID9vnUFrXaPCwkLCwsKOOkfjY9HR0W31EtqdBMDinPX000+zYcMGFi9ejNFobO/hiONITU3l+eefZ/HixTg5ObX3cMRJUlWVAQMGONK9+vXrR3p6OnPmzOHuu+9u59GJY/nhhx/46quvmDNnDj179iQ5OZknn3ySyMhIbrnllvYenhBnhaRAnIGAgACMRiNFRUXNthcVFREUFNROoxIATz31FN9//z0//fRTs3ewwcHBAMe9ZkFBQZSUlDRbBatpGsXFxXJd20hSUhIlJSUMGzaMgIAAAgICWLt2LXPmzCEgIAB/f39ArltHExwcTHx8fLNtcXFx5OTkOB4HuW4dzd///nf+9Kc/cfXVV9OrVy+uv/56HnjgAd58801Arltn0FrXKCgoqMVzND52LpMA+Aw4OzvTv39/VqxY0Wz7ihUrmuXciLNr5syZjuA3Li6u2WNRUVEEBwc3u2b19fWsX7/ecc2GDBlCdXU1SUlJjn2SkpKoqamR69pGJk+ezLp161i9erXj34ABA7j66qtZvXo13bt3l+vWAQ0bNoy0tLRm29LS0ujatSsgP28dVW1t7VF3xYxGI6qqAnLdOoPWukZDhgxh/fr11NfXO/ZZsWIFoaGhREVFnaVX0z4kBeIMPfDAA9xzzz0MHDiQoUOHMnfuXPLz87n99tvbe2jnpSeeeIKvv/6a//3vf/j6+jrypDw8PPD09ERRFO677z7eeOMNevToQffu3Xnttdfw8PDgmmuuASA+Pp6JEyfy6KOP8tZbbwHw6KOPcvHFF8vK5jbi6+vrWKjYyN3dHT8/PxITEwHkunVA999/PxdddBGvvfYa06ZNY+fOnXz44Yf87W9/A5Cftw7qkksu4a233iIqKoqePXuyc+dO3nvvPa6//npArltHUV1dTXp6OqCnG+Xk5LBz5078/Pzo2rVrq1yja665hldeeYX777+fJ554grS0NN566y3+8pe/nNMVIEDKoLWKOXPm8O9//5uCggISEhJ48cUXGTFiRHsP67x0ZBDVaObMmTz11FOAfgvo5Zdf5tNPP6W8vJyBAwfy2muvOQIt0Oub/uUvf+HXX38F4NJLL+XVV1895vlF65s8ebKjDBrIdeuofvvtN55//nnS0tKIiIjgrrvu4p577nH88ZTr1vFUVVXxwgsvsHDhQoqLiwkODubqq6/mL3/5C66uroBct45g9erVTJky5ajtN9xwA7Nnz261a5SSksITTzzB1q1b8fX15fbbb2fmzJkSAAshhBBCCHEukRxgIYQQQghxXpEAWAghhBBCnFckABZCCCGEEOcVCYCFEEIIIcR5RQJgIYQQQghxXpEAWAghhBBCnFckABZCCCGEEOcVCYCFEEIIIcR5RQJgIYQQQghxXpEAWAghhBBCnFckABZCCCGEEOcVCYCFEEIIIcR5RQJgIYQQQghxXpEAWAghhBBCnFckABZCCCGEEOcVCYCFEEIIIcR5RQJgIYQQQghxXpEAWAghzgNWq5WXX36ZgQMHEhwcjK+vL1988UV7D0sIIdqFqb0HIIQQou29++67vPzyy/Tr148HHngAJycn+vTpc0rn2LJlCwsXLiQ5OZmdO3dSWFhIUFAQ+/fvb6NRCyFE25AAWAghzgO//fYbAN988w3BwcGndY5vv/2W999/HycnJ+Lj4yksLGzNIQohxFmjlJeXa+09CCGEEG2rX79+ZGZmUl5eftrn2LlzJ5qmkZCQgLOzM76+vjIDLITolCQHWAgh2tDWrVuZMWMGCQkJBAYGEhcXx5QpU5g3b16z/X766Scuv/xyIiMjCQ4OZsiQIbzwwgtUV1e3eN6KigpeeOEFhg8fTmhoKBEREVxyySUsWLCg2X733Xcfvr6+ZGZmAuDr64uvr+8ppz8A9O3bl379+uHs7HzKxwohREciM8BCCNFGPv/8cx599FEMBgOXXHIJPXr0oKSkhB07dmC321m9ejUAL7zwArNmzcLPz4+pU6fi4+PDihUr2LlzJ7179+bXX3/Fy8vLcd68vDymTJnCgQMHGD58OP3796e2tpbff/+dQ4cOMXPmTJ566ikAR87u7NmzqaysZObMmQD4+Phw//33n9HrkxlgIURnJQGwEEK0gb179zJy5Ejc3d359ddf6dWrV7PHc3JyiIiIYNOmTUyaNImwsDCWLVtGaGgoAJqmcd999/HVV19x1113MWvWLMexU6dOZdWqVXz00Udcc801ju2VlZVcfvnlJCcns2rVqmazvH369CE7O/uMUiCOJAGwEKKzkhQIIYRoAx9//DE2m40nnnjiqOAXICIiAoD//ve/ADz22GOO4BdAURSef/553NzcmDdvHlarFYCUlBRWrlzJ5MmTmwW/AN7e3jz55JNomsa3337bVi9NCCE6PakCIYQQbWDz5s0ATJw48bj77dixA4DRo0cf9VhQUBCJiYls2bKFtLQ0EhIS2LhxIwBVVVW89NJLRx1TUlICwL59+85o/EIIcS6TAFgIIdpARUUFAGFhYcfdr7KyEtCD3ZY0lixrPF9paSkAK1euZOXKlcc8b01NzakNWAghziMSAAshRBvw8fEB9AVrvr6+x9zP29sbgMLCwhb3KygoaLZf4///+te/+NOf/tSKIxZCiPOH5AALIUQbGDRoEABLly497n79+vUDcFSEaKqoqIg9e/bg4eFBjx49ABgyZAgA69evb83hCiHEeUUCYCGEaAN33HEHJpOJ1157jd27dx/1eG5uLgA333wzAG+88YZjthf0KhD/+Mc/qK2t5YYbbsDJyQmA/v37M2LECH755Rc+++wzNO3oQj5paWlkZ2e3xcsSQohzgpRBE0KINvLZZ5/x6KOPYjKZHHWAy8rK2LlzJ2az2THr+/zzz/PGG2/g7+/PlVdeibe3NytWrGDHjh0kJiayePFiR+oDwKFDh5g6dSr79+8nMTGRwYMH4+fnR15eHnv37mXnzp3873//4/LLL3cc0xpl0Pbv38+bb77p+PzLL7/E1dWVq666yrHt0UcfJS4u7rSfQwghzgYJgIUQog1t2rSJd955hw0bNlBWVoa/vz/x8fHceOONXH/99Y79FixYwIcffkhycjJms5moqCimTp3Kww8/3KwJRqOamho++ugjfvzxR1JTU7FarQQFBdG9e3cuueQSrrvuumY5xa0RAK9evZopU6Ycd5+ff/6ZUaNGnfZzCCHE2SABsBBCCCGEOK9IDrAQQgghhDivSAAshBBCCCHOK1IHWAghzkPl5eXMnj37pPadPHkyffv2beMRCSHE2SMBsBBCnIcqKip45ZVXTmrfyMhICYCFEOcUWQQnhBBCCCHOK5IDLIQQQgghzisSAAshhBBCiPOKBMCtKDU1tb2HIE6DXLfOR65Z5yTXrXOS69Y5yXU7PgmAhRBCCCHEeUUCYCGEEEIIcV6RAFgIIYQQQpxXJAAWopPasGEDVVVV7T0MIYQQotORAFiITuqDDz5g5cqV7T0MIYQQotORAFiITqqgoICtW7e29zCEEEKITkcCYCE6oerqasxmM1u3bkVV1fYejhBCCNGpSAAsRCdUUFBA165d8fDw4ODBg+09HCGEEKJTkQBYiE6ooKCAoKAg+vfvz44dO9p7OEIIIUSnIgGwEJ1QUVERQUFBJCYmsmPHDux2e3sPSQghhOg0JAAWohMqLi4mMDCQXr16sXLlSh5++GGysrKwWq3tPTQhhBCiw5MAWIgObsWKFeTm5jbbVlRURJcuXYiOjubTTz+lrKyMW265hQceeKCdRimEEEJ0HhIAC9GBaZrGc889x5133onZbHZsLy4upkuXLgBER0fz3//+l4EDB1JbW9teQxVCCCE6DQmAhejAcnNzCQwMpE+fPvzxxx+O7cXFxQQFBTk+NxgMPP300+Tk5PDOO++0w0iFEEKIzkMCYCE6sP3799OzZ09GjRpFUlKSY3thYSEBAQHN9vX39wdg/vz5HaY2cGVlJXV1de09DCGEEKIZCYCF6MBycnKIjIxk+PDhbNu2jd9++43a2lpUVcXLy6vZvoqiAKCqKjt37myP4R7lX//6F5deeik2m629hyKEEEI4SAAsRAeWnZ1NeHg4Xbp04c9//jM//fSTYwFcY8Db1PLly7nssneYMqUrwcFeBAd7M2KEB0uWmNph9DjKs23cuLFdnl8IIYRoiQTAQnRgeXl5hIeHAzB48GAOHDjAI488gru7e4v7L1vmzEcfDaeqqit2O1gskJJi5MYb3XnlFZezOXQASkpKuOyyy1i3bt1Zf24hhBDiWNosAJ4zZw59+/YlODiYMWPGHPcP4OrVq/H19T3q3/79+5vt9+OPPzJ06FCCgoIYOnQoP//8c1sNX4h2pWkaH3/8MdnZ2URHRwNgMplQFIWysjKKiopaPO7tt52prlYADZsNNE3fbrXCyy+7nPUguKSkhPHjx5OcnHxWn1cIIYQ4njYJgH/44QeefPJJHn/8cVatWsWQIUOYPn062dnZxz1uw4YN7Nu3z/EvNjbW8VhSUhIzZsxg+vTprF69munTp3PbbbexefPmtngJQrSrTZs2sWTJEt599118fHwc2+Pi4ggLC+P9999v8bjMTAM2mwIYgeYpEpoGr73mctbSISwWC3V1dQwYMICioiIqKyvPyvMKIYQQJ9ImAfB7773HjTfeyK233kp8fDyzZs0iODiYuXPnHve4wMBAgoODHf+MRqPjsdmzZzNq1CieeOIJ4uPjeeKJJxg5ciSzZ89ui5cgRJvJysrizTffpKys7Jj7rF69mquvvprIyMhm21999VU++eQTgoODWzwuKkrFZNI41o+21arPErel77//nmnTplFaWoqfnx9Go5Fu3bpx8ODBNn1eIYQQ4mS1egBssVjYvn0748ePb7Z9/PjxJ1wIM3bsWOLj47niiitYtWpVs8c2bdp01DknTJggi2tEp5OUlMSPP/7IrFmzjrlPVlYWMTExR213cXHBxeXYaQwPPWTBy0s77vNnZh7+sV+yxMSUKe707evJlCnurTI7nJGRQWlpKbm5uYSFhQG0GABv2LCBOXPmdJiSbUIIIc4frX4vtKSkBLvdTmBgYLPtgYGBFBYWtnhMSEgIb7zxBhdccAEWi4Wvv/6aqVOnsmjRIi688EIACgoKTumcjVJTU8/g1Zy6s/18onWczeu2detWrrzyShYsWEBKSgrOzkfPyO7duxebzXbK44qOhmee8ebPf47FYjn6/a3BoBIUVENqaipz5oTwySeh2O0Kzs4aZrPKI48Y+ctfcrnwwtNPVyguLsZsNrNgwQK8vLxITU3Fy8uLn3/+mdjYWGw2G19++SWFhYXs27eP+Ph4QkJCTvl55Getc5Lr1jnJdeuczufr1qNHj+M+3j61kY7Qo0ePZgMdMmQIWVlZvP32244A+EzOfbakpqae1ecTreNsX7eqqiquvfZaUlNTMZvN9OrVq9nj27dvx2QyMWTIkBZLnZ1Ijx4QFlbPrbe6UVt75PEGJk1yJiMjgblz3bBa9cfr6xWsVmeCg1W++64bt956+i2VbTYb3t7ebN68mXvvvZcePXrQrVs3UlJSePDBB5k4caKjqcfAgQNxdnY+5a+//Kx1TnLdOie5bp2TXLfja/UUiICAAIxG41Gr1IuKipq1bj2RgQMHkp6e7vg8ODj4jM8pxNm2dOlSKioqHJ9rmkZGRgZRUVFERUWRm5t71DHff/89d99992kFv40mTbLRrZuKszPop9EwGPSP//MfZx5/3LUh+NUADU0Dmw2Kiw3NUiSOlJubS319/XGf+9ChQ4wYMYK6ujoSExMBvYLFk08+yYABA1i6dCmgL+iLjY0lLy/vtF+nEEIIcTpaPQB2dnamf//+rFixotn2FStWMHTo0JM+T3JycrOFPoMHDz7jcwpxtnz11Ve8++67/Otf/2q2+LO8vBxFUfD19cXf37/FhXAlJSV069btjMdQVaWQkGDHz88CgKqC3Q4VFQpZWUf+6GsoCpjN+kK6Y7npppt49913W3xMVVXGjh1LTk4OgwYNAqB79+6Ox8PDw3n55Zf505/+xMcff8zbb79NeHg4OTk5Z/ZChRBCiFPUJikQDzzwAPfccw8DBw5k6NChzJ07l/z8fG6//XYA7rnnHgA++OADAP7zn/8QGRlJQkICFouFb775hkWLFvH55587znnvvfdy2WWX8eabbzJ58mQWLlzI6tWrWbx4cVu8BCFOm81mc5Qpi4yMZPfu3Y7HMjIyiI6ORlEUAgICyMjIAPS84OTkZG699VZKS0sJCAg443FERakcOGCgrMwZfaa3JY2zzJqjZvBDD+kBs6ZpLc5CZ2VltXimxmD+mWeeYcKECYwYMeKo411cXLjmmmscnwcHB0uNYCGEEGddm5RBmzZtGi+99BKzZs1i1KhRbNiwgW+++cZR0iknJ6fZrI/VauXvf/87I0aM4NJLL3Xsf8UVVzj2aQyk582bx4gRI/jqq6+YO3euY6ZJiI6gsrKSLVu2ODq1jR07ttlCzczMTMfPgb+/P6WlpQDs3LmTL7/8ksrKSkpLS/H39z/jsTz0kIXSUqUhsD1ROoWeDhEZaWfSJBtr165l3LhxzfZorNZQXl7e4hlKSkro3r07kyZNwmAwNKtffCyNX4OioiJH22QhhBCirbXZIrg777yTO++8s8XHFi1a1Ozzhx9+mIcffviE55w6dSpTp05tlfEJ0Rauv/56amtrueOOO/j4448ZMGAAX375JbW1tbi7u5OXl+coDdY0AM7Ly0NRFF577TVUVcXNze2MxzJpkg1nZzhBym4TKn/5SxYQwBdffNHskczMTN5++21Ar8hit9ub1ekGvfrDqQbu/v7+lJSUMH36dB566CGmTZt2SscLIYQQp6PNWiELcb5o2uGwrq4OgMsvv5xHH32UXr16YbVaueyyywDIz88nNDQU0BeMFhcXA/rCsRkzZrBx40ZsNlurje3U1tGpdO26C9Bnc0FPgwDYsWMHW7Zs4cILL8TPz6/FhWslJSWnnLrh7+/v+BrU1p5+5QkhhBDiVEgALMQZUFWVO+64g8cff5yioiJCQ0N57bXX8PPzY+rUqc1q/NbU1DQLgIODgykrK8NsNnPo0CHGjBnDL7/8wpdfftlq42uhxHCLFAVMJoXnn3+eyspKRz5vY8WHoqIibrvtNl588UXc3Nz4v//7v6Oa0JxO7rKbm5sj4K+urj6lY4UQQojTJQGwEGegtLQUi8XCli1bWL58OWVlZSQkJDTb5/3336dr166kpqaSm5vraPpgNBoJCwsjLS2NyspKunTpgtFodATIraFnTzvOzsfvDAd6ABwTY8fLy4s77rgDi8VCQEAA1dXV5Ofns379ekcjmjvuuINrr72WmTNn8u9//9sxS1xeXn7auctGo5Fdu3adsMSaEEII0RokABZnVVpamuOW97kgPz/f8fG8efOoq6tzLIBr1LNnT/r168ecOXPo3r07vr6+jsciIyPZuHEjQUFBGAyt/+P40EMWfH1PHAAbjfDCC3auvvpqioqK8PLywsvLi6qqKl5++WXS0tIcNbdHjhzJ/fffzwcffMDmzZsdlVgqKipOauHbkX766SfeeOMNdu3axezZs0/5eCGEEOJUSQAs2pSqqrz88svU1NQAMHv2bL777rt2HlXrKSgoAODCCy+kb9++AC2WDouNjWXXrl1cfPHFzbb36NGDZcuWORbGtbZJk2y89149Hh7Ng2CDQUVR9Nq/np4aPj4qkybZuOmmm/jll18cbYwrKysdM7xHzu7Gx8fzwAMPnHEA7O3tTZ8+fXjmmWdYuXLlab5SIYQQ4uRJACzaRFZWFkVFRaxatYrFixeTnp6OzWYjJSWF9evXt/fwWk1eXh4XX3wxd911F48//jhPPPFEi/s1NoTo06dPs+2DBg0iNze3VdMejjRpko1PP60jOlrFzU3DxQWcnAw4OSl066YSFqaSkKCXODMYDLi7u2M0GqmpqeGRRx4hKyuLWbNmERMTc9S5Q0JCKC0tZe3atezZs+e0AuDG5504cSL19fWyGE4IIUSba7MyaOL89txzz3HgwAHi4uIIDAwkOzsbs9lM165dOXjwIPn5+dTV1bVKx7P2lJWVxYABAxyv4/LLL29xv9jYWIYMGUJERESz7fHx8dx8882OKhFtZdIkG7Nm1fPssy7s3WvE2VkjJETDZNKwWBQeesh81DGNqRyqqjJo0KAWZ7b9/f3Jzs7mmWeeATjtABj0mfPg4GAKCgo6/feFEEKIjk1mgEWrU1XVUSZr//79XHHFFWRlZbF48WIuu+wyfH19efTRRx2dATuzzMxMoqKiTrifu7s7r7766lFBpMFg4M4772yzFIim9AYXNXz1VS2DBtmx2yE4WGPWrHomTTq69Nrbb7/NgAEDiIuLazH4BfDy8mr2ube39xmNMTg4mEOHDp3ROYQQQogTkQBYtLqsrCwCAgIwGo0EBwfTvXt39u7dS1paGn369KFLly6OOrOdmaqqZGdnn1QA3JFMmmTj559r2bmzmp9/rm0x+AU9OI+NjSU+Pv6Y52oMjP38/ABwdXU9o7EFBATw9NNPt2otZCGEEOJIkgIhWl1hYSEhISG8+OKLODs74+Pjw3PPPUd9fT3h4eEEBgayd+9eQA8i26L6wdmQm5uLt7c3np6e7T2UNjNjxoxjzv42NXbs2JPa70RuueUWfv31V3JycoiOjj7j8wkhhBAtkQBYtJqqqiq8vLwoLS3Fz8+PyMhIx2MRERGkpaXh5ubmqCcLevvcxvJanU1qaipxcXHtPYw2dWRJt5a8++67xMTEnNS+JxIaGsqoUaM4ePCgBMBCCCHaTOecehMd0pQpU8jIyKCsrOyoklnXX3+9I/BtTBkwGo0UFhae9XG2hr179/LKK6+c8wHwyejdu3erBL+NunXrxnPPPSed4YQQQrQZCYBFq6irqwNg/fr1lJSUOHJCG02cOJFvv/0WgH79+gF6abDOmgs8e/ZsbrvtNq6++ur2Hso5Z9q0abi4uJCRkdHeQxFCCHGOkgBYtIry8nIANm/efMKWuFFRUQwcOJDu3btTWlp6lkbYemw2G/v372fKlCmtOvMpdL6+vowcOdJRSUQIIYRobRIAi1ZRUVFBWFgYW7ZsITk5uVme75EUReH1118nODi4080A5+TkMGfOHIKDg8/pxW/tLTw8nJ9//tlRX1gIIYRoTbIITrSKsrIyIiIiGDZsGFar1ZHmcDz+/v6kpKSchdG1nvnz5/P9999zzTXXtPdQzmnR0dF8/vnnAGia1ioVJoQQQohGEgCLVlFeXo6vry8PPfTQSR8TGBjY6RbBbdy4kfDwcMaOHdveQzmnjRs3jpCQEJ555hny8/PbtFW0EEKI848EwOKMaZrG1q1bCQgIOKXjwsLCOl3Xr5KSEr799ltJfzhNSkEBSkEBamIimI7960dRFHoFBBAfFUVqauqpB8B2OxiNZzha0WnY7fr/cs2FECdJAmBxRiorK3nqqacoKipi9uzZp3RscHAwRUVF2O12jJ3gD5fFYsFqteLh4dHeQ+mYqqsxpKejubqiNZSHU/buxVBQgBodjRYYiHHjRrDbMeTlYQ8Px5iZiW3YMOjSpfm5amowrllDjNVK9s6dMHq0vl1VMW7dikt5OYSEoJSUgKcnmr8/NDZUqa/HtHAhmrc36sCBaCf7xkzT4MhUC1XV/x0nWBftoMm1UgoLMWzfjmKzYY+JQevZs50HJ4ToDOS3ujgjGzduJCUlhZEjR57yDLCzszN+fn4UFhae9Axfe+aDVlRU4OPj0/nyUe12PTg83XGrKkpREVqXLiiZmRgOHkRpqNGr2Gyofn6o4eEY8vL07RYLdk3DUFyMUlAArq4YN23SgxZnZ3B1BU3DePAgKAqmNWvAwwPNzQ2lsBC1WzcM6eng6kpUSAhbN2/Wjy0pwbh5M4rZjFtuLk5lZWgGA4qqYo+IoHbAANwKCzHs3g2urihmM6bff8c2cCBaZCS4uBwOmg4dQnN1BW9vlN27MRQUoFRUoPn7owUEoMbFoWRnY9y9Gy04GPuwYVBeDl5eYLHoX08XF6itBaMRY3Iyqr8/WkiIPlZ5k3TmSkowbdqEFhSEGhaGYetWFE1D8/REKSzEPmIEhrw8DAcPorm7g8GAKTkZm4cH2GxQXQ2BgaAo+rX28Tl8bqtV/7lo0rpbycpCCw+XWWQhzhMSAIszsm3bNq699lpuvvnm0zq+a9euZGRknHQAPHPmTMaPH88ll1xyUvvn5uby/PPP88EHH5zU/pqmsWTJEiZNmnRUoFtZWYm3t/dJnadD0DQM27djyMxE69IFe//+GLdtA5MJpaoKe7duaD16HPd4Y1ISVFVhKCxEDQzEUFyM5uWlB7KA5uyMYjZjTEk5HBSaTBi3bwd3d3Bz08/VUkDo5KT/bzKBzYZSVQVubhgyMvRjgajAQOavX49x2TKUigp9u7MzmosLWkMaSl5pKU888wwF1dUse/JJNBcXRxCj+fpiTE6GLVtQ+/fXZ4zr6zGUl6OBPl5V1V+PuztKbS1KaSnG3bvByQnN3R0lLw/TokV6AOzvD9XVKHY7amQkSlYWitGI5uqKMTNTD35VFc3XFy0wEKWmBjUqCq1r1zO+nOc8qxUlK0v/unftinHHDv3NV1YWprQ0Pcg1GlFqa8HDA+OaNdDk+wBAc3fHtG4dmqLo13bfPgAUqxXN1RXbuHEYDh7UfyZCQrAPG6bPHhcXYyguRg0LQw0O1u8oHKeSjRCi85MAWJyRAwcO8OCDD552YJiQkMCePXsYPnz4Cffdt28f+/bt48CBA0yYMAGnxgDqOL766iv27duHzWbD1OQ2ttlsxsnJCYOheSXAgwcP8uKLLxIWFkbv3r2bPdY4A9zh1ddjXLcO7HaU8nJ9NrSoCKeFC9Hc3PQgzcVFDwzT0/WZMFVFCwvD3rOnHjhUV2Pcvh2ltFQPOP38UCwWNF/flp+zMdBtdCZvFJrMysWGhpJZUoKlthaXY9Rc3piaSlZZGe4uLvrrO5K7O7i7Y0xORvPwAINB/78lBgO4u6M1TYdoPKe/P9TX6ykXmqYH0z4+eiANzdIkFLsdJTsbnJwwbtyILTjY8aahGbNZfyNg6HwVKbdu3cqCBQt49tlnj/o5Okp9vR681tcDoOzahRYRAb6+KAcO6N+LNpv+NVcU2LZN/9p4eelBrotL8/Mpiv7YkQwGtKbfe41v1ABUFadff9W/R1xcUPLzUbKz9bsNbm5oPj76nYCiInBzw3bppYe/B1QVJS0NLBa0I34vCCE6JwmAxWnTNI3c3FwiIiJO+xyJiYl89tln3HLLLc0C1KaKior48MMP8fb25qKLLiItLY1169YxZsyY4567vLycP/74A3d3d8rLy+nSJM/08ccfp66ujo8//rjZMUlJSQCsXr26cwbAdjumlSv1YMJggMbZMZNJvw3clJvb4RxXoxElNxdTZqb+cXW1PuPW9Jh2CNLcnJ0J8vHh719+ySu33MK6vXt57uuveef//s+xT3V9PZMHDWJVQ0m9rKIi8srKGBYX1yxlRmspYDqWY6WLNH49FOXEecGNb9BcXDAtW4bm5oa9f39wckIpL8eQnIyhthbV1xf7BRfo+zs767fn3d31/6ur9ZnpwkKUsjIUiwUqK1Hj4/V0C0U59nVRVf2xkhJ9BjQk5ORf/0mYP38+q1etoiA9nYjSUj2tJDAQNSYGrUsXR+60cfNmlIwMUBT8cnMx5ufrs/27d6PGxmI4cED/Pm0a5LZF3rXB0PwNnNGIaePGZm+GNA8P/Q2h2Yxh61a00FD948xM/c2gokBqKlpQEPYRI1p3fOeALVu20LNnT1knIToFCYDFce3evZvU1FTGjRvH+++/z5/+9CdH97OKigqAMwoKhwwZwrx581ixYgWTJk066nFVVfnTn/6Em5sbGRkZvPLKK7i6unLw4MFjBsC1tbWsXLmSgIAAoqOjqa2tpaysrFkArKoqBw4c4MCBA82O3bx5M5MmTSI7O/uo81ZUVHTsFAhNw7RkiT5z1tJs47E05jyaTI6gQzuilXV7un38eJ77+mtqzWZWpqRQazazJzeXuJgYPl+xgo+WLOGuSZOoNZux2mz8b+VKft26lTsnTeLL1atZ+MwzmNozr7Pha6rU1GD67TcwGFAUBc3NTc97rqzUr5um6QGrqqL5+6NUVKCoKpqioDQEhBroOdXr1+ufe3tjHzu2WRCs5ORg2LMHQ0kJtqFD9XQUq1U/p6aheXnpOc11dZiWL3ekFmA2g7s7akwMmM1ofn7UZGTg7uWFEhCAUlenL3L09ETz82P/xo2EKQq5335L15499TsNpaUYi4pQo6JQ8vJQGu4uNM7W2r28UGw2x6y6IStLD/aPfMNxNt5smUxoRwbZjW9sTCYM2dko+/ejOTvr25rcXVByczGuWYMaEoIhPR2lpgb74MHQ0BIeTdPvJJzB5EBn9Pjjj3PVVVfx8MMPt/dQhDghCYDFca1fv56dO3cSFRXFL7/8QteuXbnhhhsASE9Pp2vXrme0KMxkMjF8+HBSU1NbDIDLy8sxm828//777Nq1iyFDhlBUVMSuXbuOec6vvvqKzz//nKlTpxIYGEhlZaWj5bLZbGb//v1UV1dz9dVX87e//Y2nnnrK8VhKSgovv/wyb7755lHnLS0tPeWFfm1O01ByctBCQ1Fyc/VFWS2lAXRiE/v1438rV/Ll6tWs37ePQd27U1RVBcBHS5YA4O3ujq+HB2U1NaQeOoSrszP/W7mSeouFtXv3MqZXr/Z8CTqDwZEaojXd7uLSfPYTPWcVd3fHfs32B0dOtVJdjWn+fD24ra7G3qMHxj179ODOy0uvuuHjowenFgsoCsqhQxhXrEApLAQ3Nz2ntpHFoj/m7Ixmt3PL22/j5+HB7SNHMjYxUQ/Yi4pY98svmKurmdCvH1k1NQxrnBk3GsFmw5CWdnhG+3iOvCvRkbSUetHIwwOlogJjQYFjYaex4e4R4MgFt02aBMdKG+roNO3wm7JT0NmaG4mzQFUxbt6sLxTu3r29R+PQ+RLPxFmVlpZGTk4OpaWlGI1Gtm3b5njs999/P2Eawsno3r37UTOxjQoKCggKCsLPz49Ro0ahKAohISGsWbOGtLS0o/avr69nyZIlhIaGsnv3bgICAvDz8yMrK4uysjJ+++03HnzwQbKysrj99tuJjIzk7rvvJjc3lx07dtC9e3d69OhBXl4eqqo2O3dpaSl+HWhmFFXFuH49xnXrMC1dqi9wO8eC30Ya8Ony5ZRVVzMwNpbiqirmb9zoeNzLzQ0/T08KysvJLi5mYt++eLq68uDkyazds6f9Bt7WnJz0FIn6ej3dICVFD8hMJj1waXp3pvGNqqurvr+39+H846b//PzQPDzQvLyotliIDgvjr/PnM/KFF1i4dSupJSX8e8kSnrn2WrqHhrL7yLslLi56gH4qdyE6m8avlbv74VQNN7fD/9zd9YV6mzdj2LkT49KlKAcP6iktVuuxz3u8x84mTUPJzsY0fz7G33/HqaDgpA/Ny8trw4GJTqemBuP69Si5uY7qQR2FzACfR06nhFhaWhqlpaXk5uYybtw41q5di6Zp7Nixg5UrV3LnnXee8bhiY2M5cOBAi+MrLCwkODi42bbg4GCqq6t56aWXuO222xg0aBBubm7s2LGDhx9+mF69etGrVy+++eYbJk6ciLOzM++99x5LliwhIiICFxcXzGYznp6ePPjggyQlJbFnzx727t3L4MGDcXd3x9PTk02bNjF48GDHAp+ONgNs3LJFn8Xz9nYsbDtXdQ8NJaOwkHsuuohAb2+27t/P5pUrHY97uroSFxbG/R98QExICBP69iWxa1cGxcby+R9/oKrqiRdqnQuOsVDwdOSWluLj4cGz113Hur17qTObefeXX6hpWMg2tEcPymtree/XXymsqGBzWhpDevSgS0dOEzqbFAVDZSVaZaU+Q5yS4phV1cLC9HxwqxUURZ89ttsxlJSg+fg48pLV+Hi9MobBoJfoO0Y1ESU7Wy/h1krf46alS/UPXF1Ramtxz8yECy5wlDnUwsOPSltRG9YT1NbWHl50bLfri3ELC/XqHkf8LhfnKE3Tq7rk5GDcvFn/29QB3xC32V+EOXPm0LdvX4KDgxkzZgzr1q075r4//fQTV111FbGxsURERDBhwgR++eWXZvt88cUX+Pr6HvWvvuGXsTi20tJSrrvuOsaNG8f8+fNZvnz5SR1XUVFBTU0NcXFxzJ07l+joaJycnFixYgWPPPIIdXV1zfJqT1dAQAB2u53Zs2djs9maPVZYWEhQUFCzbSENi3k8PDx47rnn+OabbwD4/PPPefTRR3nllVccQXNgYCC33norc+bMYf/+/SQnJ/Pee+8xZcoUAMLDw5k8eTK7du1i6dKljhbH4eHhzJw5k507dzqet6SkBH9//zN+vWfMYkE5dAhDZuY5HfQ29bfp0/njn//kxtGjCQsIYN3+/YT4+nLdyJGAPgM886qrAAj09mZQ9+5MGTyYUH9/unh5sTU9vT2H3yGt27sXyxE/b039b+VKJvTtC8AdEyZwy7hx1NTXc9OYMXzzxBMYDAb8PT3x9fDgp6QkXvr+e656+WXumT2bUU8/Tb3FcrZeSoelNc4IK4oeFNjt+iLI3FxMv/yC04IFmJYs0fO9q6v1wNdq1Rc8FhdjWrYMQ1YWhgMH9NQWVUXZv18PKOvq9FnaRYswrVuHcevWE45H2btX3++I666kpOjl/QoKMOzZAwUFUFPjKG2o2O2YFi3CuHIlxo0bMezYcfjYPXswbtqEOSkJ97o6wgwGChcuxPjLL5gWLsTp558xbtyoV5U5eFA/7ylSsrP1qirH+X49LqsV4+rVUFl5/P1U9XA5PrMZ5cABlF279GsnTppx82aMq1fr5SSblM3saNpkBviHH37gySef5PXXX2fYsGHMmTOH6dOns2HDBrq28A527dq1jB49mr/+9a/4+fnxzTffcPPNN7Nw4UIuvPBCx37u7u7NbsEDuHbkHLIOYsuWLRQ03ML697//Tb9+/Rg/fvwJjztw4ADdu3fnqaee4oYbbsDT05Pw8HDmzp3LHXfc4QgWz5SiKFRVVfHNN98QGBjI9OnTHY8VFhYeFWQ7OTnxySefcPvttxMREcF3333HmDFj2Lt3Ly+++CIuLi6OYxISEnB2dqZ79+7MnTuXwMBAvLy8ePzxxx3n69atG++//z59+vQhMjISAN+GvL3MzEz69+9PdnY2+/bta78ZYE1DSU0FHx/9F3lDQ4DzSePdgV5du/LCddcxrHdvXJyc+HrNGjxcXR0zvAFHVHv4v7Fjef+335jTgXLP2ltpdTUzP/+cacOG8egVV7S4T0pWFs9efz2A443GtSNG4O3m1uxOja+HB2n5+Uzo25c1e/ZwqKwMk9FIcVUVER3ojkm7a7LI1FGezdtbD+qaBgiNpeAMBrSmpR5rajD98oteUq5xP9Bzxb29UbKyMNbWYh8yRD9fw8+DsmcPGAwY09L0RXrOzhhLSlATEsDJCUN6OobcXLRdu/QccUVB8/FpVoVDc3I6XFEG9IV/DeXiDPn5aG5u1JSW4uXhQYS/P1lpaUT26qWXUGx8bTU1epqWu7ueG32yC1Pr6vRGOgA2G/YhQ9Cio1vu3NiS8nK9EklNDably8HDA3v//miBgfobkro6/X8vL0zz5+tfu/p6/fwmk95Ipbxcr/rR2ZognS01NXpe/J49GMrKUPLz9bsbTk4dOi2vTQLg9957jxtvvJFbb70VgFmzZrFs2TLmzp3LP/7xj6P2f+WVV5p9/uSTT/L777+zaNGiZgGwoihH3Q4Xx2a1Wqmvr2ffvn3cddddbN++nU2bNuF5koHTqlWriIuLIzQ0lNjYWKKiovDy8mLPnj2MGzfujMqfHen2228nMzOT33//vVkAXF5eTmxs7FH7N84CX3311axZs4YffviBXr164dIwIzpy5EjmzZvXrMFGTExMi88dHx+PoigMGjTIsc3SMHuVlZUF6N/TQOvmAJeV6X9A9uxBc3fHmJqK5uKC2r07WlDQ4eYRZWWYNmzQF7hp2sktLjrHJYSF4dHkza9Xwy/ZBU89hccRs+KjEhN58bvvsNnt7VsNogNJz88n0MeHFbt28fDll7eYHlJWU4PfEb8rfFpIsfBxd2dPTg63jhtHSXU1PUJC2JOTQ0llpQTAJ2IwnPzPsqurHiwfq8SYmxtKVRWmxYv1/ZycULt0wZibqwehzs6HF0/W1el5mZqm53s3LQV3MmNxc9MXalqtjmOrrFa83NyICQ3lQGEhI49ceNoYCNXXY5o/H9sllzQLqo/S0IhHyc7Wj234HjVu2oTdzQ1jUpI+CeDmhn3gwMNlB49g3L1bT91o/L1gs2FcvRqta1d9pldVwW5H7dXrcFB9xLiUwkKUAwfQYmJOLc1E06CiovMuhDyemhr9bkZFBabff8fepw+GvXv177HGOx8dXKsHwBaLhe3bt/Pggw822z5+/Hg2Nlm0ciLV1dWOWbhGdXV19O7dG1VV6dOnD08//TT9+vVrjWGfk959911+/PFH+vTpw2233cb1119PcnIyc+fOPeGx+/fvZ82aNY46uY3/5+fnEx4e3qrBL8Ctt96KqqpcccUVlJWVOQLN8vLyo74PANzc3HjkkUe47LLLSE5OZsOGDUyePNnxuNFoJCws7KSe29nZmRtuuIGRDbNcAJdeein79+8nLS0NVVXZvXs333zzDc6tEXhWV+szEkVFKIDm4oJSW4vm44Nis2Hatg3NZtMXMJnNeuvdxoU14iirX3zR8fGRs78AziYTXby9OVRWRtdWSNk5F6QXFDAqIYG9ubms2buX0YmJzR63qyrVdXX4nsT3nK+HB6VVVYT5+zNl0CDC/PworKigpKFSh2hFJ6qN3NiNsSHYM6an67WPjzzOyUnPyT2TsRwxG1pVW4unmxvxYWF8tWYNVw8fjmdLd2hdXMDJCdPKlWh+fqixsXoQbbHozWYASksxrVihzxIfGfB7emL844/DFUyqqzGuXYt99OjmwammYfrpJ31298hgrKGaieN3qqbpwduxAnI3N4xbtugzwU0mSrBYUAoK9PG3kB6nFBdj/P13bNOnn/mkRWMQfxINoFpVba3+ZslqRQ0NRY2O1ssdbtqk14y329F8fTEcPKh//TrRLHmrB8AlJSXY7XYCj2gjGRgYSGFh4Umd46OPPiIvL4/rrrvOsa1Hjx68++679O7dm+rqat5//30uueQS1qxZ0+IMYaPU1NTTeyGn6Ww/3/Hs2bMHs9lMcnIyRqOR9PR0SktL2bRpE2PHjuWtt946ZsHyefPmMXToUAoLC5tdt+7du9O9e/c2e51+fn6sXbuW+Ph43n77bTZv3szEiRNbfL5evXqRmZmJ2WwmOzsbFxeX0x7XiBEjqK+vdxwfHh7O888/z0MPPcQvCxeCzUZFaSkVpaUnf+uuBcbSUrw3b0ZtcovS4cjcuKYBREPNZXHYqaw293dzY9vevRiPcRfgfLPn4EFC/fwYGRvLgrVr6d7kTWZRZSX5FRU4Gwzk5+ef8FyKzYbVasXZbqd3Q76+k6aRlpVFzy5dqDWbcW8yKy9VAs6yk/y7eyInum4Hc3Iw2O34OzmRfPAg7y9cyI1N7uAeRVUhP19vOGIwYLDbqRwyBJufHz4rV554prVJRQFDdja1NhvmqCjHNmN1Nd6ZmageHvrdtpNxghxhw8aNWPfvp7Z3b4xVVXhu3w6ahs3Hh6rBg1Hsdjx37qS6Tx+cCgpwT0tDA5RPP0UDzBERqJ6eaAYDtoAAvWX3Sfw9MdTV4bNyJZawMGoTEzHU1uJ68CB1PXqgNnmT6rZvH/XR0c3K953K30Slrg73vXsxR0ZiCwjAUFWFz7p1+t8roxElPR1l9Wo0RdHTYhrHfjJvdlUVi91O3VlsktKjR4/jPt7hqkD8+OOP/P3vf2fu3LmOfEzQGyYMGTLE8fnQoUMZNWoUH3zwAa+++uoxz3eiL0BrSk1NPavPdyx1dXVMnToVV1dXXFxcCAgIoH///oCe29qYJrBw4UL++te/AmCz2aivr3ekR9hsNoYMGXLWX09CQgIGg4EePXqQnJyMi4sLffv2bZbKcKSYmBjWrl1L//79T2u8R123khJ9kUloKMPi49n67bdc4OVFwr59jtXYSlmZvirbw0O/dWazQU0NSlERhvJy7H37gsmEkpOjz7403FozZmZCdHSnbH3bkeTl5Z30DD9AXNeu1CvKKR1zLlONRmIiIgjx9WVVWhphYWGkNdRPfm3xYmyqSrC//0l9vTy9vHBycmJAz56O3OBu4eFsOnCAiqQkfkpK4vuZMwny8Tnl6yY6hpO5bqacHCKCgxmQkMDzN93E6t27T+1aaxrBBw+ienhg6NLl1GtEV1RAZib2hASUwkIM2dn679rWnjFVVWj4W0DjG+r6eti9W5/9dHbWH1cUaBLDoKr634nCQv3OX34+uLhgj4/HUFiI/cIL9Vru1dUYCgpQw8LQ4uJQ8vMx5OSgxMToz7N3L4rNpi+wPHBA//vi7q7X6K6rQ6usxN7wxuOov211dSiVlVBejmK3o8bH60FsXZ2eblJaqs+4FxTobzAqK/XX2BqzuqqKGh6O2gFipEatHgAHBARgNBopKipqtr2oqOio1fxH+vHHH7n33nt5//33ufTSS4+7r9FopH///qTL6u6jJCcnY7FYsFgsxMfHN0sNaOxkds899/D5559TW1tLWloab775Jqqq8tlnnwH69TpyFv9s6Nq1K1lZWZSUlDi2najTXONrOu0Fag2/mJSDBzEePIhmMqGUlYGqEgl8t3s3t48f77iFpZSX6928Kir0gPfAAf0Xm82m/zJydcW0aJH+saoeLihvtUJHqiN8HglpuC0vdOW1tfh6eBDi50dBeTl2VeWu//wHm91Ov27d2HHwIANOcrbc2rAyv+nCuEHdu5OUmspPSUkoisKS7dsJ9LmOV76/kPwKf6ICa3hkyh4u6n/iGWbROZRVV+PbMLvXPTSUT1es4J1Fi7j34otxOpm21oqi107es+f0Fvg2tA83rV+vz0621TqJpi3mG51MsN5YO7pp6omm6dU9LBY9XaOx9rybG8adO9GKilAOHdK3eXg4UjYcxzemdlitKHV1+kK0/HyU3buh8e93Y2fQ2lpMK1fqdxpNJrBaMezfjxoVpTeucXU9/DoMhsOpd+ewVg+AnZ2d6d+/PytWrODKK690bF+xYgVXHGO1Meh95e+77z5mz57N1KlTT/g8mqaRkpJC7969W2PYnZ7dbsfYcDtix44d3HLLLcTExDB69OhmC1waZ38jIiLo3bs3ixYtcizwio+Pd+x3Mm9Y2sKgQYN4+umniYuLw2g0YrfbcTvBD2FjGsdJlShrKHODwYAhORmlsBC/AwcwNayAxsUFparK8YsmLCgIVVXp2TTnuensbdNfsqp6+LGznacljivIx+fohg3nsYqaGnw8PPD39KSsuprb33mHMH9/jAYDr/zf/3HJ88+fdL70PRdfzPQRI5ptS+zalXfvvpuMwkIOFhby93mx7MochVVVUFA4VObKve8P4f17kyQIPkeUVVcT3jAJEdmlC9lFRWQXFXHl0KEnn3tvMp1xdRvtLN5iP2ONM8bOzs3/foAezFZWHnvR45GaNGQx7t8P27dj6tYN086djg6NuLkdDt5dXfXc57S0owP6k3nDcg5ok/uwDzzwAPPmzePzzz9n3759zJw5k/z8fG6//XZAn3285557HPt///333HXXXfzjH//gwgsvpKCggIKCAsqa5O28/PLLLFu2jIyMDHbu3Mmf/vQnUlJSmDFjRlu8hE7FYrEwYcIE1q5dC0BGRgaxsbGMHTv2mMX/Q0ND6d+/P/Pnzyc4OJinnnoKu90O6NUjKisr26XmbUJCAgMGDGD+/PmMGTOGRx999ITNOxrHbWyaS2Wzoezbh3H1apSCApSsLJRDh/SamT//jGnRIgwZGSiqiurqqge8jSuNm+RUBTfkRvZpeivrWCStocMK9vGhoLy8vYfRYVTU1uLj7u74/XCwoICsoiJm3XorHq6u/PPGG3ngBHfhGrm7uByz2kN0UBDVdWPYdvAmrKr+XBpgsRkpqXLl7/NkEfO5oqK2Fv+GQMpkNPJqQxWoitOo+3teas2/Hy4u4OeH1+bNenDt5KQH0kc+RwsVL84nbfIXe9q0abz00kvMmjWLUaNGsWHDBr755htHTm9OTg45OTmO/efOnYvNZuOpp54iPj7e8e/mm2927FNRUcHDDz/MkCFDmDZtGocOHeKXX35h4MCBbfESOjxVVdm+fTuapvHVV18BegoJQG5u7nGrNCxatIju3bvTr18/8vLyuPDCC7ngggscbziKi4vx9/dvt85Zw4YNIzk5mbCwsJO6GxDg66vf5rHZoKpKbw28YIFe/qasTC/IvWkTptWrD68qdnE5XKD+OHqEhtIvOrpZyS3R+QT5+lIgKRCAfvesoiEFAuCzhx9m2rBhAI4ubmN79262cO1MzF7cF/1mo0rTIlt2VWFvrnSNO1eUNkmBABgeH8+IhARKOlj72/OJ2tiqWyZnWtRm89x33nnnMdvkLlq06Lift+Sll17ipZdeapWxnQv279/PI488wjXXXMPGjRt57rnn+OKLL1BVlby8PMLDw495bGPKQGJiItdffz0XXnghfn5+lJeXo6pqu+X/NhoyZAiKopxcCobVyuiaGpY++CBOCxagaZo+g9v0tlFDOsLplPwJ9vXl3bvvPo0jRUfSxcsLTdPILi4+7VJodRYLFz37LMuefx7n49wi7Ohtl/PLylBV1fEaYoKDiWtYrGRsg3FnFnmgoDT8/DV/w2lTDQybeTHP37BDUiE6ubIjAmAAPw8PymUGWHRQHfe3tDiuxtna7777jhkzZtCzZ0/KysrIzMzEz8/vpDrkGQwG7r33Xvr27YvJZMLDw4PKysp2y/9t5Ovr26wrm0PjAgGAkhKMq1bpnZGsVlz9/PTcL09PebcrjmIwGJjQty83vvEGdafZojetYTHKzoyMY+7z27ZtjGmorNJRfbhkCWOOaFJw8YABvHvXXW3yfFGBNTiZ7BwZ/Dbam+vNY58M5PftIW3y/KLtaZpGfnm5I2WskZ+nJ6VSD1p0UBIpdFLFxcV4NRT9j42Nxc/Pj7KyMn755RfGjRt3Wufs1q0bL7zwAv/85z/bdQYY4I033tCbnJSXQ2kpAKZff0UpKsK4ejWm5ctRamr0/KbzJGFfnJn7LrkEP09P8k+2JugR9jXUQZ27bBm2hrzzIyWlpZ32+M6WospKrhw6tNk2k9FIv27d2uT5HpmyB1+PY7/psNkNlFS58NbPCW3y/KLtFVdV4erk5OjI2MjP01NmgEWHJQFwJ1RZWcnChQsZO3YsoFd0cHZ2xmaz8f333zNt2rTTOu9dd93lWEimNp1tPdtsNkyVlRgKCzH9/jtOy5fr7T3NZozLl+tlyM7jxH1xepxNJmJDQk47FzijoICHLr8ci83GtoMHj3p8+c6d/L5tG6DPiHVULd2qbksX9c/n/XuT8HCxHXOfqjondmT4nrUxidaVc4zUohBfX3IbJjCE6GgkAO6Eli5dyr59+4iMjOSPP/5olm/Yt2/f005f6N27Ny+//DKTJ09m+PDhrTXc41NVlLw8jFu2YPr9d4zLl2NMSsJp8WJMq1aBl5ee2qBp+qI1b2+Z8T0DSmEhSna23j5040acvvwS07Jl502nuaAzqAZRXlNDgKcnY3v3Zu2ePUc9vmTHDvo0dKKqMZvPZJhtqqy6Gr+z/Abyov75PHrF7uPuU1nnJGkQnVRGUVGLAXD3kBDSCwraYURCnJhEEp1QQcMvlMYGEI0MBgNTpkw54/P/+c9/PuNzNKUUFKAFBUFtLUpeHlpEhF5vt7RUD740TW/d6OqKYrdDRQWaNIxoPZqG6bffUCoq9PqQViu4uKAGB2Pv2xfjnj24pKRgGzsWe0yM3vKypARTUhLWK6/Uc6obOtkdU0MNS6WkBKxWtJCOGcgE+/qyds8epgwadMoL1Srq6vB2d8fP05OPlixp9tiynTtJy8/n4wce4N4PPqC4shLPDlg5xGa3U2s2490OBe5XpYSgoKEdIxfYALz1c4IshuuEdmZkMDA29qjtIX5+lNfUsCszk95N2hQL0RFIANwJpaWl8cILL3DhEX3Wly9f3k4jOgZVxbh+PYbsbNSuXR1tgZUtW9B8fcFmQ/PyOjqw6oCBQ4dVXY3T0qVo7u4olZUoDSWH1OhobBdeCJqG88cf660zfXywTp6M5umJ0tB6E4MB+6BBGLdvx/THHzjNn69XzWi4Ni5vv63P0peXY09IACcnbCNGgM3m6NhkOHQI4+6G2T1VBaMR28CBepvPXr30vO0DB6C6GrVXL+wNbbkdnfPOoj5RUczfsIG3Fi7kseM05mlJZW0tPh4eBHp7k15QgKZpjhrVe3NzuXLIELzd3eni5UVRZSXR7biQ9FjKamrwblL/92zKLPIgwLOG4uqWZ581YE+OlEXrjHZkZHDHxIlHbVcUhZvHjOHpL77gu7/85bjVU4Q42+S7sRPKyckhOjr6hA0i2o3FoufxLl2qz+76+KDk5+vpCzSUI9M0vSavaJnFgmn9emyDB+tl3TQNpbhY71JXUwOurhhycjAmJWHv1QssFtSuXdF8fMBqxZiSgutLL6F5eqJ264bliiuaB5txcYc/NhiwX3CBHpiqKkpRkR4ABwZi3L8fNSAAzccH07p1YLXi8t57aF5e2AcMwFBYiObvj/mWW8DbG83XF8OuXTitWoVSUoJx0ya0sDDU8HC0oCCc5s/HsGeP3q0oKQn7kCHY+/QBux3TunX6OHr0aLEFp1JQcLjSx5GPlZejlJSgdut2uApICwH24O7def6GG/h42bJTviSVtbV4u7nh6+GBi5MThRUVjlXvRZWVdG+Y9U6IiGBbejqDu3c/5edoa8WVlQQ0LJ4926ICa8gtNmJVnaioPbrGsKpBcaULMfdOpWd4pbRK7qD++sUXRAYGcvdFFwFgsdkoq64m7Bh37WZMmEBqXh7/W7mSGRMmnM2hCnFcEgB3Mna7nZKSknYtU3aU2loAjBs26JUZrFY9+GjaeaZJdzVxDBYLxi1bMOTnY9i7F83HB5cNG9C8vDA0pL1o/v5oAQFgNqP5+mK76CLsAwYcdSq1Tx+s1dWYNm7ENmrUyc20NvSq10JDHZvsffs6PrY1/MGzXXzxcc+n9umDuU8ffTZYUZrP8Kuq/lpqarBeeSXGfftw/vJLsNtRo6IwrVyJccsWbEOHYty3D6W0FDUuDsOePRjy8sBiQQsLw61PHwwlJRgPHEBzdsa0ZQuau7v+fefkBIqiHxsVhW3kSD2grq0FNze6FBdzSWrqSc1AG9LSUKOj0Ww2Ls3Npeubb6IlJjLGzY30ggJHAFxcWUlgwxu8UQkJvP7TT44AoSPZeuCAI0/5bHtkyh4e/qg/Ib5mXJ1UCiqOfJOj1wourHClqMKV9fu6MHPaLp6cdnS+tWiuoLycQG/vVp3ZX7pjB+P79Gl2zlqzmZUpKfh5ejKpXz+6BQc7FlUe77kfmjyZW995B18PD0fTFSHamwTAnUxJSQm+vr44NTR3OJuUXbswVFfrs4rx8fqCqoICDKmpevDk4qIHH3Kb66Qo2dl6mkhyMkplJcb0dNSQELTAQKxXXomakKC3cLZYUMPC9IDN+xRuEXt6YmuLGZeTvb4t/EG0jxhB0wJi9gEDoK7ucP1mqxXn//4X05o1aEFB2AcPxrhpE2pcHNZrr0XJz0exWPBasQKTvz9qaCioKuYHHkDz98e4eTNYrfpseGAgxl279LQOFxc9TaSiguiyMowlJfp2qxVDYaGet+zhgdqtG0p5OdbLL9eP/fln1JgYrK6uXFJVhXrZZWh+ftyYlETOihUYrFa0wEDMpaXEpKZiysggwd+fO3buxDRvHlpkJGpUFIbiYgwHD2I4cED/ObFa9dlqkwnNxwdDejr2Pn2wDxp0etfEbEYpLsZw6BCm5ctRu3VDjYrSz9fkOmxKS2P6iBGn9xxn6KL++fx92jL+u24k9VZjk3xgjSNrBGuA1W7glR96c0FMmcwEH8fu7GzumT2bJ6dNY/Lpfv8codZs5vlvvuG5r7/mkwcfpHH64mBhIXFhYQT5+JBZVES34GBKq6sdLZCPJdTfnzqzmTd/+okVu3bx7xkzOnSzGHF+kEilk8nPzz/7s79WK8YdO1CyssDJCSU3F8O+fXoag8l0akHZ+UrT9BxoT09Mf/yBcc8eqK1F8/FBjY/H3rs3WmAgtuHDm93i1yIjT6uDXafh5OTo1Nf4uWXGjGa7NJ2F1hpmXAu7dCGsoXtZs32PCADsAwfqucuuro5AsLyigr+88QZfWyyoMTHYxo8HZ2eU8nIM+/eDiwuub72F5uSE+f77MSUloaWk8FRcHF9ceikAKWYzoV99RVVKCh4uLjxdVIRfcDBKQAAey5axOyCA3kFBBGZmYlq7FpydsffogW3CBExLlmC96iqUoiKUmhqM27djnTABp0WLMKSlgasrtgsuwLh3LygKtokT9Vn0ujrshYWsrqpibO/eABh27cK4f78e+Ds7g8WCddo0/Wd2+3ZMSUmofn6oiYnYG1qfJxiNGNeuxd5Y6aUxEDnRQscTqatDKStDa+G6NBqTkMkNE6wABNxyDXq1OBWLreU39Fa7cnoL42prUWprD1eQOUfvQJmtVu6ZPRvgtMr7aZrGQx9/zBu33YZTkze26fn5jlJ+ZTU1uLu7U2s2sycnh+jgYHzc3BzVVEpPsqpIv27dqKmvZ3t6OofKyggPCDjl8QrRmiQA7mTy8/MJOQsr7JXCQowbN+qzji4uYLcfzsuUGd5jU1WUggI9qLNa9ZndlBQ0d3e9rJuzM7ZBgzDfcQcAWnDw4UPba8znuiOCH09PT7Ltdiw33tgsj17z98cWHU1RZSUhI0aA0YjWpQvWiAh29OmDT5NFpgMHDeJ3o5F/Ll6Ms6cnd40dS7fJk7EqCtbJk0n9739JDgtjVAsLg+wXXKB/0JCH3ZhaYnVz0++mODnh8sknqOHhKHV1mFas0NOJ7HZKa2vJraggd/BgYgoL9WoeISFYr78ee/fuegDa0AbdPnQohrQ0PcjeuJH8r77i+cJCQr/6CkwmTBs3olRXYxs+HDU4GKelS7HcdJOeR+7qqs9Yp6djSE3FPnAgxl27sE6diubv73gthn379DF7eemBfnU1lptuQm3aaU7ToLr6qLzuHqFV7M31xnDcd3gKezLcUHJz0UJD9fz0+vrDKUHu7mhhYSgVFXrO+Z49aB4eGA4cQKmr05/bYMA6ceLhgP8csuXAAcfHp1PeL7e01BGQRjY0P1JVldd/+gkPV1dq6usprarC2WbjsS+/5FBZGQ9ffjk2u51DZWWYrVZe+PZbhvfsecLnauw0+MSnn3KwsFACYNHuJJLpZLKzs+natWvbnLy62jHDa9y+Xf+D1Rjsdsagt6JCDxxMJpS8PJwWL0aNjUXz8kKNiYHaWkwbNuDu64uiqhgOHtRLedlsqNHRejBbVqYvDmvpdp2mYTh4UL8tb7ejlJbqs+Pl5fobBoNBXyyWmIghNRXzY4+htVArU5xdJqMRJ6OReqsVN2fnZo/N/u03vlq9mtUvvgjAj0lJRAcGkltZSWiTwM/Xw4NrR45k+a5d+Hp4MPLyyw+fxGBgQLdu/LRpE4O7d8f1iOc4FjU2FrWhlJRj8aPZrL8JNRhAUXj3u+/oduAAxenpRDz4oP791GQxqdY02DcYUBuC7Pxu3XjwhReoDAril7/+FSUrC2NqKvb4eJx+/VVfgNivHy6zZ6O5uqL26oVx+3ZsF1yAfcgQPQi32XD+6CNwddUDTw8PDJmZ+s+YzYb59ttRyspw/uYbLE5Oekk8Dw+M27bpd4xMJtwmToSAAHBx4Z+X/MF9n4yixOpFS2kQDa8Iq0XB+fPPwdMTpbQUzd0dNSLCEeAa8vP1mevqamwTJ6J5eGCPi0NNTNTvvJSX4/Kf/+iLLRtmKpXsbIzp6XpFk4bfbUpRkSMPXikq0n8HODvrz9lYmcbVVX+T0QGCt6yiIl76/vtmn5+qlKws/djiYkcAXFZTQ9qhQ3zx6KP8sGEDZdXV/L5lC/FhYeSWlHBBTAwZhYV8/scfRAQEUFVXd0rtjrsFBfHh77/z1Zo1XDpgQKulbQhxqjphVHN+y87OZuTIka170pISjOnpGNLT0YxG/Y9JZ71laLPh9NNPGHJz9T9cDQvxlPp6rGPGYExL0/8YN7APG4bH7t04b9mCGh+PZjCgVFTgtG2bHgAXF+P03XdoAQF6ubB16/QaxtXVeu1iZ2c9qDYY0Hx8sMfENJ/9agycW5gJFO3Hw9WV6vr6ZgFwUWUl6/buBQ53cnttwQLCAwKY1K9fi6vcH5kyxbH4rampQ4bww4YNzFu9+vRWvjee84g3nmm1tfSaOpUXVqzgmyZ3D47FarNxx3vvcbDhrsQ7d90FioIWFYWtYTGc5fbbUSoq9NnuK6/U3wCnpmK99FJHSon9ggtA0/SyhoWFqIGBKDYbtoQE7P36OWpLa6Gh2MaPx+mXX/S8ZLsd68SJ2EaPRqmqwu/773FduhT7oEFcvm8fWwf9k1c3XwRWFTi6KoyCHWcPE5Z77sG4eTO28eNZvGMHG9LSePaIVBkqKvSv2xFpHFpAALahQ3H56CPUmBjUgABMa9eiWK0Y163TZ7Td3DA0XHucnVFDQzHk56OGh2PIznakh2geHijl5dQ/+WS7p359u24dVw8fTnRQEB/8/jsVdXUnfey29HR+3ryZvNJS3F1cyC4udjxWUlVFTEgIkYGBBHp7U1pTQ25pKf+45BIGdu9OVGCgo5Pg+7/9xk1jxpzSwrZ+3brx1Zo1ABSWl0sALNqNBMCdTKvNAKsqyv794OyMcedO/Y9XB8zlNaSloVRVYY+Pbx6UN5QF0zw99dlWux1TUhLGHTvQgoKwXHUVWkgIhsxMPRD280Pt3h37iBEYt29HDQpCqahA7dmTokOHcDpW3mJdHTg5Ydy+HeO2bVivvRbNxQXN3x+lrk6/XdwZZ8fPc423dxuD1+z/Z+/O46OozweOf2Zmj9wnOQi5gAQI9yWXAgJyeCAqXtVqS72tttpaUVu1tdpq8efVqlWQVlHrVa0gCohyKvd9hoQjIfd9J3vMzO+P72aTQIAAuYDv+/XyJZmdnZ3ZSXaf+c7zfZ6iIm556SXv49UOBw6XCz+7nZKqKtYfONDsl3wfT7pBc9v/2YQJ7PaMsLWWwooKhicl8dLChdQ5nRzMz2dPZiY3nmBiW0F5OYfz83lo+nRC/f0Z3L378StZrU3uTJjduuFu7rgUBX3MmCaTGL3sDWXN3OPG4R43ToxcV1dDcLD3sTx/f7r6+qJt24Z77FhWfTuMLoF1ZJdoHBsA261uFIrp003BDAuj6tJLmfrHPxLXpQsZBQX88aabmu5Do9cB0A0D0zRRFYWi0aMJ69EDpbAQtbAQ96RJ6MOHo2Rno9TWoubm4h41SgTDdXWiWU9NDWpmJmZEBDW+vvhYLKj5+Wi7dmGfOxfnT3/aJIWp4Q1on/rWqdnZPHDFFQxMTGRgYiI/e/XVUz5nwpNP8tmjj/La4sWk5+YSHhjIw9On89Xmzdx08cWoqkpJVZW3VF5oQACHCgrIKy8nrksXUmJjAXEH5Iphw/jP6tUM79mTyGPe+5MZ07s3YYGBlFRWkltaSo3DgZ/9+LJ4ktTW5Df3OcQ0TXJycuh2gi/dZrnd4jaqoqAeOCAaJTgcop6saYrg0XM13+EqK9FSU1EzM1GqqzGtVtSMDDGbf+NG9CFDUGpr0XbtEoGprqPU1HhvAetDhuC64QaMuDjvyKvRsycc06GovhHDySbreHnyFvXhw4+bYGWeq6PkEjZNY+uhQyRGRlJYUcHWQ4e8j8WEhXHbK6/gY7PRPSqKvrGx2G0278SzlooIDqaoogKAsU88wZyf/5xRjesvnybdMEQ75sBAugQFUVRZycPz51PrcHD96NHsPXq0SbetgvJyjhYXMygxkZkdkf9qsRwXlBq+vpgxMbg9f3v7/hVESZUNmqkGERbgoLTKxUPTRZ7rnqNHMQyDjIKCFr38eytW4DYMSior+WrzZpHWkpTUJIA3u3XDBIzmajb7+WH06YNpmkz5/e/52YQJ3Dl5Mu7YWMwuXbDPnYsZFITRtauYvOqp6GJZvx69Tx/U4mKRn33VVWKCYisGxbphcLiggCRPycJAHx8qa2ubNGc5lmmauHWdQ/n5lHtKV8aEhTFl8GDmfvstR4uLSYiIoLhRreguQUGkZmdj07TjOhvWB73Rp9m1U1VV/vfYY0x95hlqHQ6OFBTQt63S+iTpJGQAfA6prKxEVVUCTjXjtq4Oy7ffYsTFoWZmigAYRKBYX6asPa+4DUME4s3lQuo6SlYWimFg/eQTjIQEEcD6+UFVlfjy8PPD+vHHaLt2iS+UiRPBYhFfWooitl9X13kCeanTu+qii3j9668Z0r07d7z+OreOG+d9LNDXl9TsbABSBg/mV43ze09DeGAgeWVlOFyi6sGR/PyzCoCLKysJ8ffHoml0CQoir7SUWocDiyeYf3j+fBb/4Q8EeS7MZr7wAv4+Pozu3fuMX7OtOd0qhlEfsDUN3GocVmLDn8JujeVvXxwgr6yMpK5dSc/NBUQQqDXKzX/h88+5b9o07/EfyMmhrLqaQ54Jc9/t3IndauWSlJTT2sf69IBVe/Zw5+TJYiR8xAgxgpyVJWpZf/aZ6K44ejSOBx5ATU9HHzkSbccOfJ59FjMwEKW2Fvf48ajZ2Zi+vmC1omZmog8ahHv8ePFipgm1tdjffhszNFTUsK6rQ9F1jNhYqv398bPbySstJcTzbwCrxYLNaqXG4cDfx4c6p/O43PMah4NeDgdHlyyhoqKCmLAwIkNCUFWVrqGhlFRWEt+lCxvS0ojx5LsnRESQUVBAcjMj3fUBcItHfxtVGVEUhZ5RUVTV1XE4P/+cD4DfWraMq4YNkxP7zjEyAD4HmKZJRkYGLpeLqBPl/dXVYVm7Vkxk85QnU7Oyji8z1R7cbizffy8C7bo60dCgogLnDTeguN1QWYman48ZHo565AhKUZFosTt1akOb3GO4fvKTE7+epsngVzot148ezaa0NG733DZOy83lrsmTmTxoEDe++KJ3vSHNpQy0UERQEJmFhVz29NMAfLdrF0N79qTXSe48OFwu8srKSPBMSKq3dt8+Hl+wgIGJid5tz/32W2LCwsgpKeHh+fMBURVgwoABGIaoKVJdV3dat6fbm91qeGoBN/9YfMQWnvxwNXdedhk+Vit/uOEGgnx9ufHFFykoK/NOTDQMg6Xbt3PFsGHeRh+HCwrILi5m2tChhPj788ePPgLgv7Nnn9Z7sjMjgwkDBvDDvn043e6Gdr6qihkfjzs+HvfkyWKgwROQ6p7PaSMpCdf06aI2c3Iytg8/9E6807ZuxejWDct333m7GGqbNqFmZeEeMQJUFct334kLfMBSWsrL2dlcevHFxFRXc1NNDUpBAaanLGaQry/vrlzJmN69eeL99/n3r37lPU7TNKk9eJCHSkooKS/nYVUlpraWwqAg1PR0BrjdsG8fR6xWVuzaxSPXXAM0BLcxnvKDjUUFB9MlKKhF7Y217duxfvKJuHDo3x8zLIy3UlL4orqaj9aupW9cHN3rv9sqK8V31jEjzu1h2fZoXlmUQkahPwkR1S3uRrh482YSIyJkAHyOkQFwB3A4HKxatYopU6awZcsWUlNTueWWW5pdt6ysjMOHD/Pwww/zpz/96bgAWNmzBy0zU0zK8vVt35FdELU/S0rAZkM9cgQcDpFTHBQkUgQsFtwTJ2IGBWH95BPMyEjM8HCMqCjU/HyMxETct94q82ildvfC7bcz9oknAJFPOaZPH7qGhfHqHXcQHhTEz1599bTTHhoL9oxEWjQNt66zPyuLO/7xD2+FiWP9ffFiPvnhBwD+9eCD3tvbIJodgOgyB2I0b+/Ro4zu3ZuckhK6R0Vx1fDhbExLY8KAAeSWluJnt6OqKj1aMFmuo/TpVkFhhR3TbAiC65MhHC6VYD8/SququO3SS5vc2h+YkMDa/fu5YcwYAMpqanC53eSUlDAgIYGqujqKKioIDQjgJ2PHEhkczICEBH7cv5+Vu3efMGe6OdklJfSIiuJIQQEH8/K8ebDHOdFnr82Ge9o0AOr+8AfvKKjbc9fBdfnlWL/7DsuSJegXXSTqYDfzeVi+cSOW994jc+NGFuk608LCsL33Hu6RI0W7c7ebL1auZNW2bdTW1JC1fDkxdjs1isK3X37JRB8fFoaF0XPCBC4qLWVLRQVXpKVhravj5tRUzIwMtE2beBEY6am9Xf+e92zmdyi5a1f+9rOfNSxwOsXkx9paUWknKQnrkiWik2VODs6f/xz10CGs//2vmH+RmMi0w4fpnpeHcegQtqFDRbv3khJR3i8xEaWsDL1vX/TevTFDQ1FcLjHvo4WVVTAM1NRUjD59jq9x7Zk7Ur+tZdujufefIyitsuHWVTIL/Y/rRqgUFYk88UZ3HkqrqiitqiKruLhl+yR1GjLqaAemabJ48WKuvPJK9u/fz5/+9Cfy8vIIDg5m8eLFrF69mmuvvRZf32Nbg8Idd9xBsecPa/v27U0CYHX7dlG6y8dHfCi0t+pq7G+8IUoFFReLJgWqinvYMPRLLjnuA8cxe3aTn5udTCNJHaCoooIgz9/fUE/O+Mpnnz2rbSqKwnfPPMOiTZt4ZdEiAGwWC+U1Nd7guLENaWnef2cVFzcJgHNLS5k0cCBXDBsGwPh+/UiIjOT+adP4zb/+xQ1jxhATFsbHa9dimiZfbdnCpIEDefTaa8/qGNraQ9P3sWZv/Wi3yAE2AYtmYrMY/HbGDNYfOHBcXuuVw4czf/lybwBcXwM3u6QEgDV793JRUhLP/OQn3gYP4/r2pbC8nCXbtpEUHe09z6eSW1rK6F69GN6zJ+tSU08cALdEc/m5AQG4ZsyAGTOafcrRoiLsVivfOxxs69OHj3NyAFD792dUz56onmYrfQsK+Hl5Oba8PFRFoW7TJpg8mcqsLL7198dZU0N2r1783pPS09XhwKppOCwWln79Netycijfv58HunTB5//+D/fFF2NqGt/PnIkzPV1MKC4tRVu3DqxWjMRE+nrSS/D3R01LEylsnrKP1iVLcE2dKqpnBARgxsZi9OqFe8IE8djkyVSXlPDsq69iVVX+HBdH0qhRmL6+mNHRaHv3Qm0takEB9gULRKURpxMzOhp90CAxkbmsDG3PHozoaPRhwzAjIrB+/TVKTo6Yv1FdjZqXJ0rgmaaYA+Op8KKUlYHbjd6/P+6JE3nqw0EUVdgxzIbg1tuNMCaPaUE/YPv4Y4zkZFxXXCEC4fJyqr/7jl+UldHro4+Y9+23RF95JVddfDHq0aMYsbHtO7hzts1sLjAyAG4HFRUVvPjii4wZM4Y9e/aQl5eHv78/sxsFhIcPHyY5ORlN0/jmm2+4/PLLUVUVW20tj0+YwOKdO1m5aBG3zZyJtmULSn4+Sl2dGPVtvwNBS08XbWN9fbGsWyfy16ZMEbfpZGvLc5OuN6kleyG5//LLWbZ9O+m5ud4AuDXZLBZmjh5NUnQ0D8ydS0psLGk5OQw/ZtLVkq1bvZO7bBYLxZWVTSY0HSkoYPZ113nzWxuXjnrZUw7MNE1qnE5Kq6tZvmMHf7v99lY/ntY2ZXAe/eLLSc0Owm0oYILdphMe4KBndBWDu3dvtnJFUnQ0RwoLve9RfQC89+hRdMPg47Vr+cVllzXpbgYQ16UL+7OymPvtt7zZwgA4r7SUrqGhxEdE8KePP2bWxIknnGjWFu564w1URUE3DN6+/35+8fe/43S7GdajB/qQIehDhmBbsIBflpZSOGsWz69dyx1XXMETn3zCoEOHOJSXx9Dhw3lpzx4CS0u9221cecEnIoLNa9eCzcb6wYMZnpwsun8aBv7V1bhsNmzvv49pseCaOVOMrKanYyQni3SOnTtxzZwp2nsriiiNdyJ2uwj4gTA/P159/HFufPFF/rh7N+81KhmoDxki/g9ifV3nyY8+YmhNDTeWlmI5eBA0DaN3b6itxfbvf6PU1qL37o0+ahSmxSIej4sT3Rx9fUX9Zs/3lGmzodTUiDztv/2NtJxbPXciDBQU750Il67w2luBXDViFa7p01Gzs7G99RZmly4odXU4XC6skZEsqKxkUnk5PZcuxb59uygt6Kk5b/r4YNmwAb13b9xjx6Lm52NduBD3pZfiHju2+aDV4UBLTRUlNkNDUcrKMBISwMcH68KFGPHx6MOGNTzX6cT+6qsYvXvjuvrqE779SlGRGBXv2xfzmAmMSkYGWkYGRkwMak4O6r594Ocn6mrHx2M2uig/qXMkHpABcDvI91wlP/nkk0R4cvtuvvlmSkpK+OKLL0hMTCQ7O5uHH36Yyy67jMVffUXgkSNM6N6dkvx8Jg4eTH5lJbuWL6dnVRXK0aOibFlbBL+GgVJRIdrv2mwo5eWo2dlo+/ahHjmCEREhgiUfH1Hzs76+7Tnwy35OMgxR6QIwrVZxm9VTmg3DEP95ul2hKOL/FosYLbFYoKamaV1nwxA/u90oDgemp/A/LpcIhBXPB7+fn5hYaLef1yMKPxk7lr6xsTwwd643uGwLg7p3Z81f/sIrixaRnpt7XAD8Y6Pa1H3j4ymqrOQPH35IsJ8fj157LUUVFafMW1UUhW5hYew9epSqurrj8og7q2d+soPf/GsYdouBr02n1qnhcKs8NH3fCZ8TGhCAqijekl2ZhYVcPnQoe44eZcHKleiG4U0XaSzOk6O5LyuLgvLyU76n1XV1ZBYW0jUsjC6eygj7srLaddKWqihU1tYSHhhIgifP9MaLL2ZafUdBwHnbbcQBccC/x40Tdaw/+YQdhw8DYkLmwMREKk9QK7g+L33SwIHMHDUKIyTE25QFoCwnB//Jk8Fi8bYjNxpN6NQb7cvpig4N5cErr+TbHTtOvJKigMXCjsxMVlZVce3ddx+3inviRPH51kx6hHvixGY3ayKOQ09Phz+Z3rbzJjTKTTc5HDAA5333AaIikNqvH9YlSzgC/LywkF9ffTX/HD2abzdtouyrr3BfdJHoxJiRgbpvH5aVK3Hcdx/aoUPY3nsPMygI5zXXYF2xQnRcVRT04cMx/fzQUlPFyHVxMUZkpKhj76lpr2ZlQUAARlQUlqNHsaxfjxEaihkSgmXHDvTkZNTUVKz/+Q9mWBhBNTVY/P0x4uJEqUO3G9u//y3SU1atwggLAz8/0dgmOBjL+vWYNhuW8nL0oUNxjxuHduAAlvXrUb77DiMiAveECRjx8aj796PoesO8HUVB3b0b64oVKCUl1D39tGgtb7WKCyOj8/U6lQFwO8j1zFres2cPAEFBQSQmJvKTn/yE77//nhEjRpCTk4PD4WDxokWoVVU8PW8ey1JSsNps+NpsjO3bl3999x0J8fFnludrGKgHD2LEx4vgyelEqajAsmYNSk0NpsWCUlUlZijb7SimKW43hYSI20spKThvuqnluVfS2amtFbfwampweb54tN27UQoKxG01m010p/J0CTNjYiAgAMuyZWKko1s3lMpKjEGDxMj9gQOizrOPD0phIXr37pjx8eLnoiIRKAcFQVmZKEPncKAPGICWltZkcs/5qD6YacsAuF5cly6iKcUxGnfxGpiQQFZREdsOHaKytpa7p0yhora2RSPUMWFh/P6DDxjesyfqOXJROmVwHi/N2nLak4+6hYXx9H/+w9/vuosVu3fz4BVXEB0ayoKVK5k6ZEizo7RRISH42u1c3KcPq/bs8aZQnMhn69Yxslcvb73oi/v0YduhQ+0WAFfU1ODSdaZfdJG3actNF1/MsFOMXiuKwoKHHuK2V14BoLKujpd/8Qv0EwQhfbp145U77qBfXNwJOxe2VRdLRVG4fOhQ5n77LYZhnPD31jRNb0WVZmsHn2mqgadjYnJsDbszg4FjX//43yMjKQnH/ffz0nvvgaIQ73lvuoSH8063boz2lB00unfH6N5d3CW1WHDHxTVU/AAc/fqJtt3l5Wjbt2MGBaGnpIgBCLu9yUUIgFJQILoU9u0LTidqWhpKXR1qaiqOn/9ctAUvLhbbLCnBUl6OWlIiGkMVFKA4HLjHjsU9YQLuo0dRampQqqtRysuxfPstzl/8QsQITqe3a6KRkiIGWdxutB07RA53VZVIAdE0rAsXivV69BBt04cMQcvNxfrBB6hZWSieNBOloIC6p546s3PURmQA3A4KPLc2k5KSGDFiBDfffDMBAQGoqsqXX37JN998w49r14pyN3V1TBkyhJS4ON5atsw7QpEUHc1TN97orc94MkpREdqGDZghIWg7dmD07y9af+7ZIwLY+sR/XcdITETv21cEUQEB4pdf1rdtW263+AAJCDj+Q7umBjM4WFyx9+/fJD1Bb0G3JfcVVxy/sFs33Ccp/WQ2risdFYWenCxGXBQFd48eWBYtatiPc+TW1umwWix88dhjdGmHRjDdwsNZs3dvk2WGYXgn0Lxxzz3UOp28t2IFAOP69WPhxo342e1YWpCmUut0YhgGT1x/fevvfBuaMjivRbPtG/vLT3/Kna+/zqc//kh1XR2Du3fH38eHf333Hb1PUCtdVVWWPf00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pLCwkP379wOwd+9eKioqiIqKws+RszN16lQGDhzII488AsCtt97KxRdfzP/+9z8mTZrEwoULWbFiBYsWLQJAkiRuu+02nn/+eRISEoiPj+e5557Dw8ODyy+/vL1fgiAIgiAIQoucAWALlL59oVcv6G55se7u2JvFU2qvXshZWccCYEdpODU29thOXl5IVitaRYU+W9yNAuF2D4DnzZvHM8884/y6IXXi1Vdf5dprrwXg0KFDRDSqw5eens68efN4/PHHefLJJ+nRowfz5s1j0KBBzn3+/ve/U1dXx7333kt5eTkDBw5k/vz5eDVuwygIgiAIgtBZzmKOa4czm9Gio5Fyc6GuDrVHD+T9+481VQEwGrFNngwmE8bff++0oZ4Oqby8XOvsQfxRiDyp7klct+5HXLPuSVy37klct+6pXa5beTmGdetQ+/VDCw1FOnLkuLbWDaTduzHs23dsFriuTp8VrqsDkwklNlZPHekiukQdYEEQBEEQBKGL8fVFmTABLTQU4ITBL+hl2Jw1hWtq0NzdwW5HslqRqqqc7ae7ChEAC4IgCIIgCGfGbEYZNAippATlvPNQzj8fzccH28UX64vrulhedJdohCEIgiAIgiB0b1pUFLbLLnOWT1NGjtT/HjKkM4fVIjEDLAiCIAiCILSPlmoHd0EiABYEQRAEQRDOKSIAFgRBEARBEM4pIgAWBEEQBEEQzikiABYEQRAEQRDOKaIRhiAIgiAIgnBOETPAgiAIgiAIwjlFBMCCIAiCIAjCOUUEwIIgCIIgCMI5RQTAgiAIgiAIwjlFBMDtYO7cufTt25eQkBAuuOACVq9e3dlDOmc9//zzjB49mqioKHr27MlVV13Frl27muyjaRpPPfUUycnJhIaGMmnSJHbv3t1kn/Lycm655Raio6OJjo7mlltuoby8/Cy+knPb888/j6+vL/fee69zm7huXVNBQQG33norPXv2JCQkhPT0dFauXOl8XFy3rkdRFB5//HHn762+ffvy+OOPY7fbnfuI69b5Vq1axYwZM0hJScHX15ePP/64yePtdY127tzJxRdfTGhoKCkpKTzzzDNo2h+/PoIIgM/Q/PnzeeCBB/jHP/7B8uXLGTJkCFdccQVHjhzp7KGdk1auXMmNN97I4sWL+e677zAajVxyySWUlZU593nxxRd59dVXeeaZZ/jtt98ICgri0ksvpaqqyrnPTTfdxPbt2/nqq6/46quv2L59O7NmzeqMl3TO2bBhA++99x6pqalNtovr1vWUl5czYcIENE3jiy++YN26dTz77LMEBQU59xHXret54YUXmDt3Ls888wzr16/n6aef5u233+b555937iOuW+erqamhV69ePP3007i10F64Pa5RZWUll156KcHBwfz22288/fTTvPzyy7zyyitn5TV2JlEG7QyNHTuW1NRUXnrpJee2AQMGMG3aNB555JFOHJkAUF1dTXR0NB9//DETJ05E0zSSk5O5+eabueeeewCoq6sjISGBxx57jJkzZ7J3717S09NZtGgRQ4cOBWDNmjVMnDiRDRs2kJCQ0Jkv6Q+toqKCCy64gJdeeolnnnmGXr16MWfOHHHduqhHH32UVatWsXjx4hYfF9eta7rqqqvw8/PjjTfecG679dZbKSsr4/PPPxfXrQuKiIjg2Wef5dprrwXa7//WO++8w7///W/27dvnDLLnzJnDvHnz2LVrF5Ikdc4LPgvEDPAZsFqtbN26lTFjxjTZPmbMGNatW9dJoxIaq66uRlVVfH19AcjOzqawsLDJNXNzc2P48OHOa7Z+/Xo8PT1JT0937jN06FA8PDzEde1gs2fPZtq0aYwcObLJdnHduqYffviBgQMHMnPmTOLj4znvvPN46623nB+fiuvWNQ0dOpSVK1eyb98+APbs2cOKFSsYN24cIK5bd9Be12j9+vUMGzasyQzz2LFjyc/PJzs7+yy9ms5h7OwBdGclJSUoitLk4z6AoKAgioqKOmlUQmMPPPAAffr0YciQIQAUFhYCtHjN8vPzASgqKiIgIKDJna8kSQQGBorr2oHef/99Dh48yFtvvXXcY+K6dU1ZWVm888473H777cyePZuMjAzuv/9+AG655RZx3bqo2bNnU11dTXp6OgaDAbvdzj333MNNN90EiP9v3UF7XaOioiLCw8OPO0fDY7GxsR31EjqdCICFP6x//vOfrF27lkWLFmEwGDp7OEIrMjMzefTRR1m0aBEmk6mzhyO0kaqq9O/f35nu1a9fPw4ePMjcuXO55ZZbOnl0wonMnz+fzz77jLlz55KcnExGRgYPPPAA0dHRXHfddZ09PEE4K0QKxBkICAjAYDBQXFzcZHtxcTHBwcGdNCoB4MEHH+Trr7/mu+++a3IHGxISAtDqNQsODqakpKTJKlhN0zh69Ki4rh1k/fr1lJSUMHToUAICAggICGDVqlXMnTuXgIAA/P39AXHdupqQkBCSkpKabEtMTCQnJ8f5OIjr1tU8/PDD3HnnnVx22WWkpqYyY8YM7rjjDv73v/8B4rp1B+11jYKDg1s8R8Njf2QiAD4DZrOZtLQ0li5d2mT70qVLm+TcCGfX/fff7wx+ExMTmzwWExNDSEhIk2tWX1/PmjVrnNdsyJAhVFdXs379euc+69evp6amRlzXDjJp0iRWr17NihUrnH/69+/PZZddxooVK4iPjxfXrQsaOnQo+/fvb7Jt//79REVFAeL/W1dVW1t73KdiBoMBVVUBcd26g/a6RkOGDGHNmjXU19c791m6dClhYWHExMScpVfTOUQKxBm64447mDVrFgMHDiQ9PZ158+ZRUFDAzJkzO3to56R77rmHzz//nI8++ghfX19nnpSHhweenp5IksRtt93G888/T0JCAvHx8Tz33HN4eHhw+eWXA5CUlMSFF17IXXfdxQsvvADAXXfdxYQJE8TK5g7i6+vrXKjYwN3dHT8/P3r16gUgrlsXdPvttzN+/Hiee+45pk+fzvbt23nrrbf417/+BSD+v3VRF110ES+88AIxMTEkJyezfft2Xn31VWbMmAGI69ZVVFdXc/DgQUBPN8rJyWH79u34+fkRFRXVLtfo8ssv55lnnuH222/nnnvuYf/+/bzwwgvcd999f+gKECDKoLWLuXPn8uKLL1JYWEhKSgpPPvkkI0aM6OxhnZOaB1EN7r//fh588EFA/wjo6aef5r333qO8vJyBAwfy3HPPOQMt0Oub3nffffz0008ATJw4kWefffaE5xfa36RJk5xl0EBct65q8eLFPProo+zfv5/IyEhuvvlmZs2a5fzlKa5b11NVVcUTTzzBwoULOXr0KCEhIVx22WXcd999uLq6AuK6dQUrVqxgypQpx22/+uqref3119vtGu3cuZN77rmHzZs34+vry8yZM7n//vtFACwIgiAIgiAIfyQiB1gQBEEQBEE4p4gAWBAEQRAEQTiniABYEARBEARBOKeIAFgQBEEQBEE4p4gAWBAEQRAEQTiniABYEARBEARBOKeIAFgQBEEQBEE4p4gAWBAEQRAEQTiniABYEARBEARBOKeIAFgQBEEQBEE4p4gAWBAEQRAEQTiniABYEARB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BEHoUkQALAiCIAiCIHQpIgAWBEEQBEEQuhQRAAuCIAiCIAhdigiABUEQBEEQhC5FBMCCIAiCIAhClyICYEEQBEEQBKFLEQGwIAhCF2C1WnnxxRcZNGgQwcHB+Pj48MUXX7T3sARBENqFob0HIAiCILS9N954gxdffJH+/fvz4IMPYjQa6du370Xt8+TJk4wcOZKCggIGDx7M6tWrW2m0giAIbUsEwIIgCF3AihUrAPj2228JDg5ulX3+7//+L9XV1a2yL0EQhEtJpEAIgiB0Abm5uQCtFvx++umnLF26lH/961+tsj9BEIRLSQTAgiAIbWj37t3cfffd9OrVi8DAQBISErj++uv58ssvG223aNEirrvuOqKioggODmbo0KE8//zzVFZWNrnfsrIynn/+eUaMGEFoaCgRERFMnjyZn376qdF2999/Pz4+PmRkZADg4+ODj4/PRaU/pKen8/TTT3PXXXcxfvz4C96PIAhCe5FKS0u19h6EIAjC5ejTTz/l0UcfRZZlJk+eTHx8PEVFRezbtw+73c6GDRsAeP7555k3bx6+vr5MmzYNb29v1q5dy/79++nTpw/Lli3D09PTud+cnByuv/56UlNTGTFiBAMGDKC6upqVK1eSm5vLE088wVNPPQXAL7/8woEDB3j77bcpLy/niSeeAMDb25sHHnjgvF+T3W7n2muvJS8vj02bNlFUVET//v1FDrAgCJ2KCIAFQRDawNGjR7nyyitxc3Nj2bJl9O7du9H9WVlZREREsGPHDq6++mrCwsJYs2YNoaGhAGiaxv3338/XX3/NPffcw7x585yPnTZtGuvXr+f999/npptuct5eXl7Oddddx4EDB1i/fn2jWd6+ffuSmZlJaWnpRb2u+fPn8/zzz7N48WKuvPJKMjIyRAAsCEKnI1IgBEEQ2sCHH36IzWbjscceOyP4BYiIiADgs88+A+BPf/qTM/gFkCSJZ599FldXV7788kusVisAhw4d4rfffmPq1KmNgl8ALy8vnnzySTRN47vvvmv117R3715eeukl7rvvPq688spW378gCMKlIqpACIIgtIGdO3cCMHHixBa327dvHwBjxow5476goCASExPZtWsXKSkp9OrVi23btgFQUVHBCy+8cMZjioqKADh27NhFjf90NTU13HvvvcTExPC3v/2tVfctCIJwqYkAWBAEoQ2U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IAiCIAiCcEERAbAgCIIgCIJwQREBsCAIgiAIgnBBEQGwIAiCIAiCcEERAbAgCIIgCIJwQREBsCAIgiAIgnBBEQGwIAiCIAiCcEERAbAgCIIgCIJwQREBsCAIgiAIgnBBEQGwIAiCIAiCcEERAbAgCIIgCIJwQREBsCAIgiAIgnBBEQGwIAjCBcBms/HSSy/Rv39/QkJC8PX15YsvvujowxIEQegQxo4+AEEQBOH0++9//8tLL71E7969ufvuuzGZTPTs2fOE9nHnnXfy1Vdftfn4xo0biY+PP9VDFQRBOO1EACwIgnAB+O233wCYN28eISEhp7Sva665hqioqCOWBwQEnNJ+BUEQzhQRAAuCIFwACgoKAE45+AW49tprGTFixCnvRxAEoaOIHGBBEITTaOvWrdx0001069aNoKAg4uPjmTp1Kl9++WWL9X766ScuueQSoqKiCAkJYeDAgTz//PPU1ta2ut+qqiqef/55hgwZQlhYGBEREVx88cX88MMPLda788478fX1JSsrCwBfX198fX1POP1BEAThfCJGgAVBEE6TuXPn8uCDDyLLMhdffDFxcXGUlZWxfft23n77ba699loAnn/+eebMmYOfnx/Tp0/Hx8eHlJQU5syZw6+//sqvv/6Kl5eXc7/5+flMnTqVjIwMhgwZwo033ojFYmHJkiXceOONPProozz22GMATJkyhaioKN5++22qq6t59NFHAfDx8Tnp81q/fj1//vknmqYRExPDqFGj8PX1PfkXShAE4QyTKisrtY4+CEEQhPPNvn37GD58OO7u7vz666907969xeO5ublERESwadMmxo8fT3h4OH/88QdhYWEAaJrGnXfeyddff82tt97KnDlznNtOmzaNlStX8v7773PllVc6l1dXV3PJJZewc+dOVq5c2WKUt2fPnuTk5FBZWXnS59TWJDgPDw8ee+wx7rnnnpPetyAIwpkkUiAEQRBOgw8//BC73c7DDz98RPALEBERAcBnn30GwEMPPeQMfgEkSeKZZ57Bzc2NL7/8EpvNBsDu3btZsWIFU6ZMaRH8Anh7ezN79mw0TePbb79t93MaOnQoH3/8MTt37qSwsJBt27bx7LPPIssyTzzxBO+//367P6cgCMLpIFIgBEEQToPNmzcDMG7cuKOut337dgBGjhx5xGPBwcEkJSWxZcsW0tPT6dat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RN++fQGZt84mLCyMgQMHttiWlJREbm6u536Qeets7rvvPm677TbmzZtHSkoK1157LbfeeitPPfUUIPPWFbTVHIWGhp70OZru684kAD4Pdrud4cOHs2rVqhbbV61a1SLnRlxYd911lyf4TUpKanFfTEwMYWFhLeasoaGB7777zjNno0ePpqamhk2bNnn22bRpE7W1tTKv7WTWrFmsX7+eNWvWeP4bMWIE8+bNY82aNSQkJMi8dUIZGRlkZWW12JaVlUW/fv0A+X3rrOrq6k44K2axWNB1HZB56wraao5Gjx7Nd999R0NDg2efVatWERERQUxMzAU6mo4hKRDn6dZbb+Wmm24iLS2NMWPG8Le//Y3CwkIWLFjQ0UPrkZYsWcKKFSt44403CAwM9ORJ+fn54e/vj6Io3HLLLTz55JMkJiaSkJDAE088gZ+fH1dddRUAAwcOZNq0adx+++08/fTTANx+++1ccsklcmVzOwkMDPRcqNjE19eXPn36MHjwYACZt05o0aJFzJgxgyeeeIK5c+eyY8cOXn75Ze69914A+X3rpC699FKefvppYmJiGDRoEDt27OD555/n2muvBWTeOouamhoOHToEmOlGubm57Nixgz59+tCvX782maOrrrqKZcuWsWjRIpYsWUJWVhZPP/00v/vd77p1BQiQMmhtYvny5TzzzDMUFRWRnJzMww8/zPjx4zt6WD3S8UFUk7vuuot77rkHME8BPfroo/z973+noqKCtLQ0nnjiCU+gBWZ909/97nd89tlnAFx22WU89thjp3x+0fZmzZrlKYMGMm+d1RdffMHSpUvJysoiOjqaG2+8kZtuusnzx1PmrfOprq7mf//3f/nkk08oLS0lLCyMefPm8bvf/Q5vb29A5q0zWLNmDbNnzz5h+3XXXcdf/vKXNpuj3bt3s2TJErZt20ZgYCALFizgrrvukgBYCCGEEEKI7kRygIUQQgghRI8iAbAQQgghhOhRJAAWQgghhBA9igTAQgghhBCiR5EAWAghhBBC9CgSAAshhBBCiB5FAmAhhBBCCNGjSAAshBBCCCF6FAmAhRBCCCFEj/L/Aek7P9+dPWwpAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# overlay estimations with truth\n", + "fig, axes = plt.subplots(p + 2, 1, figsize=(10, 3 * (p + 2)))\n", + "# posterior quantiles of latent variables\n", + "pred_p10, pred_p50, pred_p90 = quantile(posterior_samples2['prediction'], (0.1, 0.5, 0.9)).squeeze(-1)\n", + "# posterior quantiles of latent variables\n", + "coef_p10, coef_p50, coef_p90 = quantile(posterior_samples2['weight'], (0.1, 0.5, 0.9)).squeeze(-1)\n", + "\n", + "for idx, ax in enumerate(axes):\n", + " if idx == 0:\n", + " axes[0].plot(y[:T1], 'k-', label='truth', alpha=.8, lw=1)\n", + " axes[0].plot(pred_p50, 'r-', label='estimate', alpha=.8, lw=1)\n", + " axes[0].fill_between(torch.arange(0, T1), pred_p10, pred_p90, color=\"red\", alpha=.3)\n", + " axes[0].legend()\n", + " axes[0].set_title('response')\n", + " else:\n", + " axes[idx].plot(betas[:T1, idx - 1], 'k-', label='truth', alpha=.8, lw=1)\n", + " axes[idx].plot(coef_p50[:, idx - 1], 'r-', label='estimate', alpha=.8, lw=1)\n", + " if idx >= 2:\n", + " axes[idx].plot(time_points, priors[:, idx-2], 'o', color='blue', alpha=.8, lw=1)\n", + " axes[idx].fill_between(torch.arange(0, T1), coef_p10[:, idx-1], coef_p90[:, idx-1], color=\"red\", alpha=.3)\n", + " axes[idx].set_title('coef_{}'.format(idx - 1))\n", + "plt.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Holdout validation" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "torch.Size([1000, 28, 1]) torch.Size([28])\n" + ] + }, + { + "data": { + "image/png": "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4tNPP8X27dsFgSbnwJkdx3Gyjf5ffvllQQlfbGwsnnnmGTz11FNYsmSJI2BoP+B+5plnBL3POI7D66+/jpUrV2Lp0qV46623ROV6f/7znwUBNJVKhXnz5mHPnj2CgKGr18AG8z799FMolUp89NFHovs/88wz+Pe//40ffvjBo4BhfHy85PXDhg3DlClTsHXrVphMJsfrsg+nefrppx3BQgBQq9V45ZVXcM0114iWxQ5AsEtNTcXs2bPx+eefo7i42OOhILfccouo3PS+++7D+++/7yhNdSb1niqVSsH6B8qtt94qGL6hVqtx44034vTp0xgyZIgjWAjYPm/2gOGJEyccAcNTp05h+/btuP766wXBQgCIjIzEX/7yF9x111348ccfPQoYlpSUQKlUSn42KisrAdhKTH21cOFCwdCTNWvWQK/X46abbnKUhrt7XGlpKdasWeMYenLLLbcAsL1H33zzDebPn49du3bhz3/+MwDb927w4MG49tpr8Yc//AFxcXEerWtRUZEo29id9PR0jwKG9tYBct8Pezm3VDsCT61atQpff/01UlNTHYF0Z5999hm2bt2KJUuWiAL6rpjNZtH7cscdd+Ddd9+VDczaS51LSkq8eAWEEEJI10cBQ0IIIaSdpA68X3zxRUePLTt7X7tTp045gozO8vLyANiyDWfOnImsrCwMGzYMy5cvR1FREWbNmoXLLrsMo0ePlj14ValUjoCgM3tPxePHjzuuO3bsGABbNh4rISEBgwcPxqFDh5CXl4dBgwYJbncOhNr16tULAAS9vG6++Wb8+9//xrx58zB79mxMnToV48ePFw3MaG5uxvHjxxEdHY1///vfkq/NXo5dW1vrciqq3caNG/HVV1/h6NGj0Ol0MJvNgtt1Oh2SkpIA/Pa+OGeE2o0bN062pHTv3r3497//jQMHDqC6uhpGo1Fwu1RmohxP39PLL78cKSkp+OCDD3DkyBHMnDkTl112GUaMGOF16WtHkQos2d9rqdvsAeuysjLHdfbvS2Njo+T3RafTAYBkj0cptbW1iIyMFPUv9Bepz+29996Lf/3rXx4/Ljw8HP369cOcOXMwf/58wd8zLS0Na9asQU5ODrZu3YojR47g8OHDOH78OI4fP45FixZh+fLlkp8j1pQpU7ptz73t27fj4YcfRkREBL777jtRgDwnJwevvvoq7rjj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ZKJ55LXXXkMwGERTUxPOnj2Lv/zLv0RzczPuu+8+SJKEhx9+GH/7t3+LpqYmNDY24qmnnkJeXh7uuusuAMDSpUtx3XXX4dFHH8UPf/hDAMCjjz6KG264gROSibJItG19fHwcTz75JG677TaUl5ejs7MT3/ve91BaWopPfepTAICCggLcf//9+O53v4vS0lIUFhbi29/+NpYvX46rr746s2+OaIEaHx9XsoOCwSC6urrw4YcforCwEDU1NUnZh9911134wQ9+gC9/+ct47LHHcOrUKfzwhz/EN7/5TU5IJkqT2W7r+/fvx4EDB3DllVciPz8f77//Pv7bf/tvuOmmm1BTUwMAuPbaa7Fs2TJ86Utfwl//9V9jaGgIf/VXf4U/+ZM/4YRkojSJta0PDQ3h/PnzGBkZAQCcPXsWBQUFKC8vR3l5eVzH66ne1qXh4WE59sOIaC749a9/jSeeeAI9PT0oLCzEbbfdhu985zsoKCgAECpNevLJJ/Gzn/0Mw8PDWLt2LZ566im0trYqzzE8PIxvfvOb+M///E8AwE033YS/+Zu/gdvtzsRbIiId0bZ1j8eD++67Dx9++CFGRkZQXl6OK6+8Et/+9rdVE9S8Xi++853v4IUXXsDU1BS2bNmC//W//pfqMUSUPnv27MGtt96qWf6Zz3wGzzzzTNL24UeOHMFjjz2G9957D263Gw888AC+9a1vMWBIlCaz3dYPHjyIxx57DCdOnMD09DRqampw55134utf/zpyc3OV5zt//jwee+wx/O53v4Pdbsfdd9+N73//+8jJyUnbeyVayGJt68899xweeeQRzf3f+ta38Bd/8RcA4jteT+W2zoAhERERERERERERKdjDkIiIiIiIiIiIiBQMGBIREREREREREZGCAUMiIiIiIiIiIiJSMGBIRERERERERERECgYMiYiIiIiIiIiISMGAIRERERERERERESkYMCQiIiIiIiIiIiIFA4ZERERERERERESkYMCQiIiIiIiIiIiIFP8flHp84sbO3fYAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pyro.set_rng_seed(1)\n", + "samples2 = forecaster2(y[:T1], covariates, num_samples=1000)\n", + "p10, p50, p90 = quantile(samples2, (0.1, 0.5, 0.9)).squeeze(-1)\n", + "crps = eval_crps(samples2, y[T1:])\n", + "print(samples2.shape, p10.shape)\n", + "\n", + "plt.figure(figsize=(20, 5))\n", + "plt.fill_between(torch.arange(T1, T2), p10, p90, color=\"red\", alpha=.3)\n", + "plt.plot(torch.arange(T1, T2), p50, 'r-', label='forecast', alpha=.8)\n", + "plt.plot(np.arange(T1 - 200, T2), y[T1 - 200:T2], 'k-', label='truth', alpha=.5)\n", + "plt.title(\"Response against time (CRPS = {:0.3g})\".format(crps))\n", + "plt.axvline(T1, color='b', linestyle='--')\n", + "plt.legend(loc=\"best\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see there is an obvious improvement in both coefficients movement detection and holoud validation." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Conclusion\n", + "\n", + "1. We show how to create a classic DLM with Pyro that provides decent forecast result.\n", + "2. With priors injection, we improve the model in getting more accurate coefficients and predictions.\n", + "\n", + "## Reference\n", + "1. Harvey, C. A. (1989). *Forecasting, Structural Time Series and the Kalman Filter*, Cambridge University Press.\n", + "2. Durbin, J., Koopman, S. J.. (2001). *Time Series Analysis by State Space Methods*, Oxford Statistical Science Series\n", + "3. Scott, S. L., and Varian, H. (2015). \"Inferring Causal Impact using Bayesian Structural Time-Series Models\" The Annals of Applied Statistics, 9(1), 247–274.\n", + "4. Moore, D., Burnim, J, and the TFP Team (2019). \"Structural Time Series modeling in TensorFlow Probability\" Available at [https://blog.tensorflow.org/2019/03/structural-time-series-modeling-in.html](https://blog.tensorflow.org/2019/03/structural-time-series-modeling-in.html)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "env3-ts", + "language": "python", + "name": "env3-ts" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.8" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": { + "height": "628px", + "left": "25px", + "top": "110px", + "width": "324.188px" + }, + "toc_section_display": true, + "toc_window_display": true + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/pyro/source/tutorial/source/forecasting_i.ipynb b/pyro/source/tutorial/source/forecasting_i.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..7f3cb08a7c5b2f1b598fc5a090466060c484c631 --- /dev/null +++ b/pyro/source/tutorial/source/forecasting_i.ipynb @@ -0,0 +1,927 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Forecasting I: univariate, heavy tailed\n", + "\n", + "This tutorial introduces the [pyro.contrib.forecast](http://docs.pyro.ai/en/latest/contrib.forecast.html) module, a framework for forecasting with Pyro models. This tutorial covers only univariate models and simple likelihoods. This tutorial assumes the reader is already familiar with [SVI](http://pyro.ai/examples/svi_part_ii.html) and [tensor shapes](http://pyro.ai/examples/tensor_shapes.html).\n", + "\n", + "See also:\n", + "\n", + "- [Forecasting II: state space models](http://pyro.ai/examples/forecasting_ii.html)\n", + "- [Forecasting III: hierarchical models](http://pyro.ai/examples/forecasting_iii.html)\n", + "\n", + "#### Summary\n", + "\n", + "- To create a forecasting model:\n", + " 1. Create a subclass of the [ForecastingModel](http://docs.pyro.ai/en/latest/contrib.forecast.html#pyro.contrib.forecast.forecaster.ForecastingModel) class.\n", + " 2. Implement the [.model(zero_data, covariates)](http://docs.pyro.ai/en/latest/contrib.forecast.html#pyro.contrib.forecast.forecaster.ForecastingModel.model) method using standard Pyro syntax.\n", + " 3. Sample all time-local variables inside the [self.time_plate](http://docs.pyro.ai/en/latest/contrib.forecast.html#pyro.contrib.forecast.forecaster.ForecastingModel.time_plate) context.\n", + " 4. Finally call the [.predict(noise_dist, prediction)](http://docs.pyro.ai/en/latest/contrib.forecast.html#pyro.contrib.forecast.forecaster.ForecastingModel.predict) method.\n", + "- To train a forecasting model, create a [Forecaster](http://docs.pyro.ai/en/latest/contrib.forecast.html#pyro.contrib.forecast.forecaster.Forecaster) object.\n", + " - Training can be flaky, you'll need to tune hyperparameters and randomly restart.\n", + " - Reparameterization can help learning, e.g. [LocScaleReparam](http://docs.pyro.ai/en/latest/infer.reparam.html#pyro.infer.reparam.loc_scale.LocScaleReparam).\n", + "- To forecast the future, draw samples from a `Forecaster` object conditioned on data and covariates.\n", + "- To model seasonality, use helpers [periodic_features()](http://docs.pyro.ai/en/latest/ops.html#pyro.ops.tensor_utils.periodic_features), [periodic_repeat()](http://docs.pyro.ai/en/latest/ops.html#pyro.ops.tensor_utils.periodic_repeat), and [periodic_cumsum()](http://docs.pyro.ai/en/latest/ops.html#pyro.ops.tensor_utils.periodic_cumsum).\n", + "- To model heavy-tailed data, use [Stable](http://docs.pyro.ai/en/latest/distributions.html#stable) distributions and [StableReparam](http://docs.pyro.ai/en/latest/infer.reparam.html#pyro.infer.reparam.stable.StableReparam).\n", + "- To evaluate results, use the [backtest()](http://docs.pyro.ai/en/latest/contrib.forecast.html#pyro.contrib.forecast.evaluate.eval_crps) helper or low-level loss functions." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "import pyro.poutine as poutine\n", + "from pyro.contrib.examples.bart import load_bart_od\n", + "from pyro.contrib.forecast import ForecastingModel, Forecaster, backtest, eval_crps\n", + "from pyro.infer.reparam import LocScaleReparam, StableReparam\n", + "from pyro.ops.tensor_utils import periodic_cumsum, periodic_repeat, periodic_features\n", + "from pyro.ops.stats import quantile\n", + "import matplotlib.pyplot as plt\n", + "\n", + "%matplotlib inline\n", + "assert pyro.__version__.startswith('1.9.1')\n", + "pyro.set_rng_seed(20200221)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dict_keys(['stations', 'start_date', 'counts'])\n", + "torch.Size([78888, 50, 50])\n", + "12TH 16TH 19TH 24TH ANTC ASHB BALB BAYF BERY CAST CIVC COLM COLS CONC DALY DBRK DELN DUBL EMBR FRMT FTVL GLEN HAYW LAFY LAKE MCAR MLBR MLPT MONT NBRK NCON OAKL ORIN PCTR PHIL PITT PLZA POWL RICH ROCK SANL SBRN SFIA SHAY SSAN UCTY WARM WCRK WDUB WOAK\n" + ] + } + ], + "source": [ + "dataset = load_bart_od()\n", + "print(dataset.keys())\n", + "print(dataset[\"counts\"].shape)\n", + "print(\" \".join(dataset[\"stations\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Intro to Pyro's forecasting framework\n", + "\n", + "Pyro's forecasting framework consists of:\n", + "- a [ForecastingModel](http://docs.pyro.ai/en/latest/contrib.forecast.html#pyro.contrib.forecast.forecaster.ForecastingModel) base class, whose ``.model()`` method can be implemented for custom forecasting models,\n", + "- a [Forecaster](http://docs.pyro.ai/en/latest/contrib.forecast.html#pyro.contrib.forecast.forecaster.Forecaster) class that trains and forecasts using ``ForecastingModel``s, and\n", + "- a [backtest()](http://docs.pyro.ai/en/latest/contrib.forecast.html#pyro.contrib.forecast.evaluate.backtest) helper to evaluate models on a number of metrics.\n", + "\n", + "Consider a simple univariate dataset, say weekly [BART train](https://www.bart.gov/about/reports/ridership) ridership aggregated over all stations in the network. This data roughly logarithmic, so we log-transform for modeling." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "T, O, D = dataset[\"counts\"].shape\n", + "data = dataset[\"counts\"][:T // (24 * 7) * 24 * 7].reshape(T // (24 * 7), -1).sum(-1).log()\n", + "data = data.unsqueeze(-1)\n", + "plt.figure(figsize=(9, 3))\n", + "plt.plot(data)\n", + "plt.title(\"Total weekly ridership\")\n", + "plt.ylabel(\"log(# rides)\")\n", + "plt.xlabel(\"Week after 2011-01-01\")\n", + "plt.xlim(0, len(data));" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's start with a simple log-linear regression model, with no trend or seasonality. Note that while this example is univariate, Pyro's forecasting framework is multivariate, so we'll often need to reshape using `.unsqueeze(-1)`, `.expand([1])`, and `.to_event(1)`." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# First we need some boilerplate to create a class and define a .model() method.\n", + "class Model1(ForecastingModel):\n", + " # We then implement the .model() method. Since this is a generative model, it shouldn't\n", + " # look at data; however it is convenient to see the shape of data we're supposed to\n", + " # generate, so this inputs a zeros_like(data) tensor instead of the actual data.\n", + " def model(self, zero_data, covariates):\n", + " data_dim = zero_data.size(-1) # Should be 1 in this univariate tutorial.\n", + " feature_dim = covariates.size(-1)\n", + "\n", + " # The first part of the model is a probabilistic program to create a prediction.\n", + " # We use the zero_data as a template for the shape of the prediction.\n", + " bias = pyro.sample(\"bias\", dist.Normal(0, 10).expand([data_dim]).to_event(1))\n", + " weight = pyro.sample(\"weight\", dist.Normal(0, 0.1).expand([feature_dim]).to_event(1))\n", + " prediction = bias + (weight * covariates).sum(-1, keepdim=True)\n", + " # The prediction should have the same shape as zero_data (duration, obs_dim),\n", + " # but may have additional sample dimensions on the left.\n", + " assert prediction.shape[-2:] == zero_data.shape\n", + "\n", + " # The next part of the model creates a likelihood or noise distribution.\n", + " # Again we'll be Bayesian and write this as a probabilistic program with\n", + " # priors over parameters.\n", + " noise_scale = pyro.sample(\"noise_scale\", dist.LogNormal(-5, 5).expand([1]).to_event(1))\n", + " noise_dist = dist.Normal(0, noise_scale)\n", + "\n", + " # The final step is to call the .predict() method.\n", + " self.predict(noise_dist, prediction)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can now train this model by creating a [Forecaster](http://docs.pyro.ai/en/latest/contrib.forecast.html#pyro.contrib.forecast.forecaster.Forecaster) object. We'll split the data into `[T0,T1)` for training and `[T1,T2)` for testing." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "T0 = 0 # begining\n", + "T2 = data.size(-2) # end\n", + "T1 = T2 - 52 # train/test split" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO \t step 0 loss = 484401\n", + "INFO \t step 100 loss = 0.609042\n", + "INFO \t step 200 loss = -0.535144\n", + "INFO \t step 300 loss = -0.605789\n", + "INFO \t step 400 loss = -0.59744\n", + "INFO \t step 500 loss = -0.596203\n", + "INFO \t step 600 loss = -0.614217\n", + "INFO \t step 700 loss = -0.612415\n", + "INFO \t step 800 loss = -0.613236\n", + "INFO \t step 900 loss = -0.59879\n", + "INFO \t step 1000 loss = -0.601271\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 4.37 s, sys: 30.4 ms, total: 4.4 s\n", + "Wall time: 4.4 s\n" + ] + } + ], + "source": [ + "%%time\n", + "pyro.set_rng_seed(1)\n", + "pyro.clear_param_store()\n", + "time = torch.arange(float(T2)) / 365\n", + "covariates = torch.stack([time], dim=-1)\n", + "forecaster = Forecaster(Model1(), data[:T1], covariates[:T1], learning_rate=0.1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we can evaluate by drawing posterior samples from the forecaster, passing in full covariates but only partial data. We'll use Pyro's [quantile()](http://docs.pyro.ai/en/latest/ops.html#pyro.ops.stats.quantile) function to plot median and an 80% confidence interval. To evaluate fit we'll use [eval_crps()](http://docs.pyro.ai/en/latest/contrib.forecast.html#pyro.contrib.forecast.evaluate.eval_crps) to compute [Continuous Ranked Probability Score](https://www.stat.washington.edu/raftery/Research/PDF/Gneiting2007jasa.pdf); this is an good metric to assess distributional fit of a heavy-tailed distribution." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "torch.Size([1000, 52, 1]) torch.Size([52])\n" + ] + }, + { + "data": { + "image/png": "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qqQxTzq9a+XKlfD19cWWLVsQHByMuLg4ZGVl4dNPP5XGPHjwAMXFxbhz5w4ASM/BUKlUHR5dGD16NGbMmIE//elPiImJQVNTEyIiIvDqq6/C0dFRGtedmImIesTQt40iIvolab3tp7u7u057UVGRACBGjRql067VasW2bdvEqFGjhImJibCzsxNBQUHSLU+FEOLq1atizpw5QqlUigEDBgh3d3cRGRkptFqtEKLt7V/z8/OFvb29WL16dbsx1tfXi/nz5wsbGxuhVCrF0qVLxbp163RulXr48GHx+P9C0tLShKenpzA1NdXpO3funJg2bZqwtLQUFhYWwtPTU3zwwQdS/7Bhw8TWrVs7/dnhsdvLtr5iY2OlMXV1dWLZsmVi4MCBwtzcXMyZM0eUlJTozNPerWoBiMLCQp2Y2hvTmUOHDgk3NzehUCjEmDFjxHfffafTHxsb2+68UVFRT5z3/v37IjQ0VFhaWgpra2uxYMECUVVVpTOmuzETEXWXTAgh+qJgISIiIiKiZwefI0FERERERHpjIUFERERERHpjIUFERERERHpjIUFERERERHpjIUFERERERHpjIUFERERERHpjIUFERERERHpjIUFERERERHpjIUFERERERHpjIUFERERERHpjIUFERERERHr7P30HuGU97HnUAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "samples = forecaster(data[:T1], covariates, num_samples=1000)\n", + "p10, p50, p90 = quantile(samples, (0.1, 0.5, 0.9)).squeeze(-1)\n", + "crps = eval_crps(samples, data[T1:])\n", + "print(samples.shape, p10.shape)\n", + "\n", + "plt.figure(figsize=(9, 3))\n", + "plt.fill_between(torch.arange(T1, T2), p10, p90, color=\"red\", alpha=0.3)\n", + "plt.plot(torch.arange(T1, T2), p50, 'r-', label='forecast')\n", + "plt.plot(data, 'k-', label='truth')\n", + "plt.title(\"Total weekly ridership (CRPS = {:0.3g})\".format(crps))\n", + "plt.ylabel(\"log(# rides)\")\n", + "plt.xlabel(\"Week after 2011-01-01\")\n", + "plt.xlim(0, None)\n", + "plt.legend(loc=\"best\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Zooming in to just the forecasted region, we see this model ignores seasonal behavior." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(9, 3))\n", + "plt.fill_between(torch.arange(T1, T2), p10, p90, color=\"red\", alpha=0.3)\n", + "plt.plot(torch.arange(T1, T2), p50, 'r-', label='forecast')\n", + "plt.plot(torch.arange(T1, T2), data[T1:], 'k-', label='truth')\n", + "plt.title(\"Total weekly ridership (CRPS = {:0.3g})\".format(crps))\n", + "plt.ylabel(\"log(# rides)\")\n", + "plt.xlabel(\"Week after 2011-01-01\")\n", + "plt.xlim(T1, None)\n", + "plt.legend(loc=\"best\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We could add a yearly seasonal component simply by adding new covariates (note we've already taken care in the model to handle `feature_dim > 1`)." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO \t step 0 loss = 53174.4\n", + "INFO \t step 100 loss = 0.519148\n", + "INFO \t step 200 loss = -0.0264822\n", + "INFO \t step 300 loss = -0.314983\n", + "INFO \t step 400 loss = -0.413243\n", + "INFO \t step 500 loss = -0.487756\n", + "INFO \t step 600 loss = -0.472516\n", + "INFO \t step 700 loss = -0.595866\n", + "INFO \t step 800 loss = -0.500985\n", + "INFO \t step 900 loss = -0.558623\n", + "INFO \t step 1000 loss = -0.589603\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 4.5 s, sys: 34.3 ms, total: 4.53 s\n", + "Wall time: 4.54 s\n" + ] + } + ], + "source": [ + "%%time\n", + "pyro.set_rng_seed(1)\n", + "pyro.clear_param_store()\n", + "time = torch.arange(float(T2)) / 365\n", + "covariates = torch.cat([time.unsqueeze(-1),\n", + " periodic_features(T2, 365.25 / 7)], dim=-1)\n", + "forecaster = Forecaster(Model1(), data[:T1], covariates[:T1], learning_rate=0.1)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "samples = forecaster(data[:T1], covariates, num_samples=1000)\n", + "p10, p50, p90 = quantile(samples, (0.1, 0.5, 0.9)).squeeze(-1)\n", + "crps = eval_crps(samples, data[T1:])\n", + "\n", + "plt.figure(figsize=(9, 3))\n", + "plt.fill_between(torch.arange(T1, T2), p10, p90, color=\"red\", alpha=0.3)\n", + "plt.plot(torch.arange(T1, T2), p50, 'r-', label='forecast')\n", + "plt.plot(data, 'k-', label='truth')\n", + "plt.title(\"Total weekly ridership (CRPS = {:0.3g})\".format(crps))\n", + "plt.ylabel(\"log(# rides)\")\n", + "plt.xlabel(\"Week after 2011-01-01\")\n", + "plt.xlim(0, None)\n", + "plt.legend(loc=\"best\");" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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j6BQKDp0jPnz5+PHH3/Exo0bTe63YsUKFBcX6x+XLl3q0PcjIiIiIgIYPHS7/fv3Iz8/H+Hh4VCpVFCpVLh48SIee+wxREREtPn6BQsWYNu2bdi9ezdCQ0NN7qvRaODh4WHwICIiIiLqKHsNHmx2helZs2Zh3LhxBtsmTJiAWbNmYc6cOa2+TpIkLFy4EFu2bMGePXsQGRnZ1U0lIiIiIjLA4KELlJWVITMzU/91dnY2Tpw4AW9vb4SHh8PHx8dgf7VajcDAQPTr10+/bezYsZg+fToWLFgAQExV+uSTT/Dll1/C3d1d/wvz9PSEs7NzN7wrIiIiIrreMXjoAkePHsXo0aP1Xy9duhQAMHv2bHz00UdmHSMrKwsFBQX6r9977z0AwKhRowz2+/DDD3Hfffd1qr1EREREROaw1+BBIUmSZO1G2JqSkhJ4enqiuLiY+Q9ERERE1G7Xrl1Dr169AAAVFRU2MwOms/1cm02YJiIiIiLqqTw9PeHk5AQAyMvLs3JrLIfBAxERERGRhSkUCrucusTggYiIiIioCzB4ICIiIiIiszB4ICIiIiIis8jBg1artXJLLIfBAxERERFRF+DIAxERERERmYXBAxERERERmYXBAxERERERmYXBAxERERERmaVp8CBJkpVbYxkMHoiIiIiIukBAQAAAoKamBteuXbNuYyyEwQMRERERURdwcnKCl5cXAPuZusTggYiIiIioi9hb3gODByIiIiKiLsLggYiIiIiIzMLggYiIiIiIzBIUFASAwQMREREREbWBIw9ERERERGQWBg9ERERERGQWBg9ERERERGQWOXjQarVWbollMHggIiIiIuoicvBQUFCA2tpaK7em8xg8EBERERF1ER8fHzg4OECSJFy9etXazek0Bg9ERERERF3EwcEB/v7+AOwj74HBAxERERFRF7KnpGkGD0REREREXYjBAxERERERmYXBAxERERERmYXBAxERERERmYXBAxERERERmYXBAxERERERmYXBg4Xs27cPU6ZMQXBwMBQKBbZu3drqvvPmzYNCocDq1avbPO6aNWsQEREBJycnDBs2DN9//73lGk1ERERE1A4MHiykvLwcAwcOxJo1a0zut2XLFhw6dAjBwcFtHvPTTz/F0qVL8dxzz+HYsWMYOHAgJkyYgPz8fEs1m4iIiIjIbEFBQQCA0tJSlJeX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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(9, 3))\n", + "plt.fill_between(torch.arange(T1, T2), p10, p90, color=\"red\", alpha=0.3)\n", + "plt.plot(torch.arange(T1, T2), p50, 'r-', label='forecast')\n", + "plt.plot(torch.arange(T1, T2), data[T1:], 'k-', label='truth')\n", + "plt.title(\"Total weekly ridership (CRPS = {:0.3g})\".format(crps))\n", + "plt.ylabel(\"log(# rides)\")\n", + "plt.xlabel(\"Week after 2011-01-01\")\n", + "plt.xlim(T1, None)\n", + "plt.legend(loc=\"best\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Time-local random variables: `self.time_plate`\n", + "\n", + "So far we've seen the ``ForecastingModel.model()`` method and ``self.predict()``. The last piece of forecasting-specific syntax is the ``self.time_plate`` context for time-local variables. To see how this works, consider changing our global linear trend model above to a local level model. Note the [poutine.reparam()](http://docs.pyro.ai/en/latest/poutine.html#pyro.poutine.handlers.reparam) handler is a general Pyro inference trick, not specific to forecasting." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "class Model2(ForecastingModel):\n", + " def model(self, zero_data, covariates):\n", + " data_dim = zero_data.size(-1)\n", + " feature_dim = covariates.size(-1)\n", + " bias = pyro.sample(\"bias\", dist.Normal(0, 10).expand([data_dim]).to_event(1))\n", + " weight = pyro.sample(\"weight\", dist.Normal(0, 0.1).expand([feature_dim]).to_event(1))\n", + "\n", + " # We'll sample a time-global scale parameter outside the time plate,\n", + " # then time-local iid noise inside the time plate.\n", + " drift_scale = pyro.sample(\"drift_scale\",\n", + " dist.LogNormal(-20, 5).expand([1]).to_event(1))\n", + " with self.time_plate:\n", + " # We'll use a reparameterizer to improve variational fit. The model would still be\n", + " # correct if you removed this context manager, but the fit appears to be worse.\n", + " with poutine.reparam(config={\"drift\": LocScaleReparam()}):\n", + " drift = pyro.sample(\"drift\", dist.Normal(zero_data, drift_scale).to_event(1))\n", + "\n", + " # After we sample the iid \"drift\" noise we can combine it in any time-dependent way.\n", + " # It is important to keep everything inside the plate independent and apply dependent\n", + " # transforms outside the plate.\n", + " motion = drift.cumsum(-2) # A Brownian motion.\n", + " \n", + " # The prediction now includes three terms.\n", + " prediction = motion + bias + (weight * covariates).sum(-1, keepdim=True)\n", + " assert prediction.shape[-2:] == zero_data.shape\n", + " \n", + " # Construct the noise distribution and predict.\n", + " noise_scale = pyro.sample(\"noise_scale\", dist.LogNormal(-5, 5).expand([1]).to_event(1))\n", + " noise_dist = dist.Normal(0, noise_scale)\n", + " self.predict(noise_dist, prediction) " + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO \t step 0 loss = 1.73259e+09\n", + "INFO \t step 100 loss = 0.935019\n", + "INFO \t step 200 loss = -0.0290582\n", + "INFO \t step 300 loss = -0.193718\n", + "INFO \t step 400 loss = -0.292689\n", + "INFO \t step 500 loss = -0.411964\n", + "INFO \t step 600 loss = -0.291355\n", + "INFO \t step 700 loss = -0.414344\n", + "INFO \t step 800 loss = -0.472016\n", + "INFO \t step 900 loss = -0.480997\n", + "INFO \t step 1000 loss = -0.540629\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 9.47 s, sys: 56.4 ms, total: 9.52 s\n", + "Wall time: 9.54 s\n" + ] + } + ], + "source": [ + "%%time\n", + "pyro.set_rng_seed(1)\n", + "pyro.clear_param_store()\n", + "time = torch.arange(float(T2)) / 365\n", + "covariates = periodic_features(T2, 365.25 / 7)\n", + "forecaster = Forecaster(Model2(), data[:T1], covariates[:T1], learning_rate=0.1,\n", + " time_reparam=\"dct\",\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "samples = forecaster(data[:T1], covariates, num_samples=1000)\n", + "p10, p50, p90 = quantile(samples, (0.1, 0.5, 0.9)).squeeze(-1)\n", + "crps = eval_crps(samples, data[T1:])\n", + "\n", + "plt.figure(figsize=(9, 3))\n", + "plt.fill_between(torch.arange(T1, T2), p10, p90, color=\"red\", alpha=0.3)\n", + "plt.plot(torch.arange(T1, T2), p50, 'r-', label='forecast')\n", + "plt.plot(data, 'k-', label='truth')\n", + "plt.title(\"Total weekly ridership (CRPS = {:0.3g})\".format(crps))\n", + "plt.ylabel(\"log(# rides)\")\n", + "plt.xlabel(\"Week after 2011-01-01\")\n", + "plt.xlim(0, None)\n", + "plt.legend(loc=\"best\");" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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dS87d+7EqlWrMH36dCiVSixatAjbtm1zYqnJEd58801ERUVh5syZ7e6z1/VAIUmSZK8CExERERGR5+KCaSIiIiIisgqDByIiIiIisgqDByIiIiIisgqDByIiIiIisgqDByIiIiIisgqDByIiIiIisgqDByIiIiIisgqDByIiIiIisgqDByIiN5eeno5169bZ/XGffPJJhIWFQaFQYM+ePXZ/fCIicj8MHoiI7GDHjh3w9/dHU1OT6Vh1dTXUajXS09PNzv3qq6+gUChw8eLFXi6l9X788Uc89dRTeO2115Cfn485c+YgLi4OW7duddhzbtmyBRMmTIC/vz9CQ0OxYMECZGVlmZ1TX1+PlStXIigoCP3798eiRYtQWFhods6aNWswbtw4aDQajB49ut3z1NfX44477sDIkSOhUqmwYMECq8v43nvvYfjw4fDx8cHIkSPx2Wefmd3/wQcfYObMmQgKCoJCocCZM2esetzS0lIsWbIEWq0WgYGBuOuuu1BdXW2XMhMR2RODByIiO5g6dSqqq6tx4sQJ07GDBw8iPDwcx44dQ319ven4/v37ERMTg/j4eGcU1SpyYHPrrbciPDwcGo3Gbo/d2Nho8fiBAwewcuVKHD16FBkZGdDr9Zg5cyZqampM56xfvx4ff/wx3nvvPRw4cAB5eXn4n//5n3aPdeedd+IXv/iFxedpbm6Gr68v1qxZgxkzZlhd7iNHjmDx4sW46667cPr0aSxYsAALFizA999/bzqnpqYGN910E5577jmrHxcAlixZgh9++AEZGRn45JNP8PXXX+Pee+/tcZmJiOxOIiIiu4iIiJC2bNli+vmRRx6RVq5cKSUmJkr79+83HZ8yZYq0bNkySZIkqbm5WXrmmWekuLg4ycfHRxo1apT03nvvmT3ud999J82ePVvy8/OTQkNDpV/96ldScXGx6f60tDRp7dq1pp8/+eQTSavVSv/4xz8slrOpqUm68847Tc85dOhQaevWrab7N23aJAEwu6WlpbU7Jjt48KB00003ST4+PlJUVJS0evVqqbq62nR/bGystHnzZmnp0qWSv7+/6bV3paioSAIgHThwQJIkSSovL5fUarXZ+/Pjjz9KAKTMzMx2v79p0yYpJSWl0+dYtmyZdOutt1pVnttuu02aO3eu2bGJEydK9913X7tzc3JyJADS6dOnu3zcc+fO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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(9, 3))\n", + "plt.fill_between(torch.arange(T1, T2), p10, p90, color=\"red\", alpha=0.3)\n", + "plt.plot(torch.arange(T1, T2), p50, 'r-', label='forecast')\n", + "plt.plot(torch.arange(T1, T2), data[T1:], 'k-', label='truth')\n", + "plt.title(\"Total weekly ridership (CRPS = {:0.3g})\".format(crps))\n", + "plt.ylabel(\"log(# rides)\")\n", + "plt.xlabel(\"Week after 2011-01-01\")\n", + "plt.xlim(T1, None)\n", + "plt.legend(loc=\"best\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Heavy-tailed noise\n", + "\n", + "Our final univariate model will generalize from Gaussian noise to heavy-tailed [Stable](http://docs.pyro.ai/en/latest/distributions.html#stable) noise. The only difference is the `noise_dist` which now takes two new parameters: `stability` determines tail weight and `skew` determines the relative size of positive versus negative spikes.\n", + "\n", + "The [Stable distribution](https://en.wikipedia.org/wiki/Stable_distribution) is a natural heavy-tailed generalization of the Normal distribution, but it is difficult to work with due to its intractible density function. Pyro implements auxiliary variable methods for working with Stable distributions. To inform Pyro to use those auxiliary variable methods, we wrap the final line in [poutine.reparam()](http://docs.pyro.ai/en/latest/poutine.html#pyro.poutine.handlers.reparam) effect handler that applies the [StableReparam](http://docs.pyro.ai/en/latest/infer.reparam.html#pyro.infer.reparam.stable.StableReparam) transform to the implicit observe site named \"residual\". You can use Stable distributions for other sites by specifying `config={\"my_site_name\": StableReparam()}`." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "class Model3(ForecastingModel):\n", + " def model(self, zero_data, covariates):\n", + " data_dim = zero_data.size(-1)\n", + " feature_dim = covariates.size(-1)\n", + " bias = pyro.sample(\"bias\", dist.Normal(0, 10).expand([data_dim]).to_event(1))\n", + " weight = pyro.sample(\"weight\", dist.Normal(0, 0.1).expand([feature_dim]).to_event(1))\n", + "\n", + " drift_scale = pyro.sample(\"drift_scale\", dist.LogNormal(-20, 5).expand([1]).to_event(1))\n", + " with self.time_plate:\n", + " with poutine.reparam(config={\"drift\": LocScaleReparam()}):\n", + " drift = pyro.sample(\"drift\", dist.Normal(zero_data, drift_scale).to_event(1))\n", + " motion = drift.cumsum(-2) # A Brownian motion.\n", + " \n", + " prediction = motion + bias + (weight * covariates).sum(-1, keepdim=True)\n", + " assert prediction.shape[-2:] == zero_data.shape\n", + "\n", + " # The next part of the model creates a likelihood or noise distribution.\n", + " # Again we'll be Bayesian and write this as a probabilistic program with\n", + " # priors over parameters.\n", + " stability = pyro.sample(\"noise_stability\", dist.Uniform(1, 2).expand([1]).to_event(1))\n", + " skew = pyro.sample(\"noise_skew\", dist.Uniform(-1, 1).expand([1]).to_event(1))\n", + " scale = pyro.sample(\"noise_scale\", dist.LogNormal(-5, 5).expand([1]).to_event(1))\n", + " noise_dist = dist.Stable(stability, skew, scale)\n", + "\n", + " # We need to use a reparameterizer to handle the Stable distribution.\n", + " # Note \"residual\" is the name of Pyro's internal sample site in self.predict().\n", + " with poutine.reparam(config={\"residual\": StableReparam()}):\n", + " self.predict(noise_dist, prediction) " + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO \t step 0 loss = 5.92061e+07\n", + "INFO \t step 100 loss = 13.6553\n", + "INFO \t step 200 loss = 3.18891\n", + "INFO \t step 300 loss = 0.884046\n", + "INFO \t step 400 loss = 0.27383\n", + "INFO \t step 500 loss = -0.0354842\n", + "INFO \t step 600 loss = -0.211247\n", + "INFO \t step 700 loss = -0.311198\n", + "INFO \t step 800 loss = -0.259799\n", + "INFO \t step 900 loss = -0.326406\n", + "INFO \t step 1000 loss = -0.306335\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "bias = 14.64\n", + "drift_scale = 3.234e-08\n", + "noise_stability = 1.937\n", + "noise_skew = 0.004095\n", + "noise_scale = 0.06038\n", + "CPU times: user 19.5 s, sys: 103 ms, total: 19.6 s\n", + "Wall time: 19.7 s\n" + ] + } + ], + "source": [ + "%%time\n", + "pyro.set_rng_seed(2)\n", + "pyro.clear_param_store()\n", + "time = torch.arange(float(T2)) / 365\n", + "covariates = periodic_features(T2, 365.25 / 7)\n", + "forecaster = Forecaster(Model3(), data[:T1], covariates[:T1], learning_rate=0.1,\n", + " time_reparam=\"dct\")\n", + "for name, value in forecaster.guide.median().items():\n", + " if value.numel() == 1:\n", + " print(\"{} = {:0.4g}\".format(name, value.item()))" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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PHkSGRkZDer4t4buBxMJIiIzi4yMxNmzZ5GSkmLuUOgR0KtXL2RlZaG4uBhfffUVIiIikJycbO6wqJ367bffMHv2bCQkJMDGxsbc4dBjhpc2maBjx46wtLRs8CSDgoICaDQaM0VF7Vn9uLjXmNFoNA1u1q+trcXNmzc5rv4EoqKisHfvXiQmJqJz585SuUajQXV1NYqKioza3z12Ghtb9XX0eJLL5ejRowcCAgIQFxcHf39/rF69mmOGGpWZmYnCwkL0798fVlZWsLKyQnJyMtasWQMrKyu4ublx3FCrMZEwgVwuR0BAAA4dOiSVGQwGHDp0CFqt1oyRUXvl6ekJjUZjNGZKSkqQnp4ujRmtVouioiJkZmZKbQ4fPgyDwYDBgwe3eczUNoQQiIqKwu7du3H48GF4enoa1QcEBMDa2tpo7OTk5ECv1xuNnTNnzhglogkJCVAqlfD19W2bHSGzMxgMqKqq4pihRo0YMQJnzpxBVlaWtAwYMADh4eHSzxw31Grmvtv7URMfHy8UCoXYtm2byM7OFtOnTxdqtdroSQb051JaWipOnTolTp06JQCIDz/8UJw6dUpcuXJFCCHEsmXLhFqtFt999504ffq0GDdunPD09BS3b9+W+ggNDRX9+vUT6enpIiUlRfTs2VOEhYWZa5eoDcyYMUOoVCqRlJQk8vLypKWiokJq89prrwkPDw9x+PBhceLECaHVaoVWq5Xqa2trRd++fcWoUaNEVlaW+P7774WLi4t46623zLFL1Abmz58vkpOTRW5urjh9+rSYP3++kMlk4scffxRCcMxQy/zxqU1CcNxQ6zGRaIWPPvpIeHh4CLlcLgYNGiSOHz9u7pDIjBITEwWABktERIQQ4s4jYBcuXCjc3NyEQqEQI0aMEDk5OUZ93LhxQ4SFhQkHBwehVCrFlClTRGlpqRn2htpKY2MGgNi6davU5vbt22LmzJnCyclJ2NnZiQkTJoi8vDyjfi5fvixGjx4tbG1tRceOHcUbb7whampq2nhvqK1MnTpVdO3aVcjlcuHi4iJGjBghJRFCcMxQy9ydSHDcUGvJhBDCPHMhRERERET0qOI9EkREREREZDImEkREREREZDImEkREREREZDImEkREREREZDImEkREREREZDImEkREREREZDImEkREREREZDImEkREREREZDImEkREj7nAwEBE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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "samples = forecaster(data[:T1], covariates, num_samples=1000)\n", + "p10, p50, p90 = quantile(samples, (0.1, 0.5, 0.9)).squeeze(-1)\n", + "crps = eval_crps(samples, data[T1:])\n", + "\n", + "plt.figure(figsize=(9, 3))\n", + "plt.fill_between(torch.arange(T1, T2), p10, p90, color=\"red\", alpha=0.3)\n", + "plt.plot(torch.arange(T1, T2), p50, 'r-', label='forecast')\n", + "plt.plot(data, 'k-', label='truth')\n", + "plt.title(\"Total weekly ridership (CRPS = {:0.3g})\".format(crps))\n", + "plt.ylabel(\"log(# rides)\")\n", + "plt.xlabel(\"Week after 2011-01-01\")\n", + "plt.xlim(0, None)\n", + "plt.legend(loc=\"best\");" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(9, 3))\n", + "plt.fill_between(torch.arange(T1, T2), p10, p90, color=\"red\", alpha=0.3)\n", + "plt.plot(torch.arange(T1, T2), p50, 'r-', label='forecast')\n", + "plt.plot(torch.arange(T1, T2), data[T1:], 'k-', label='truth')\n", + "plt.title(\"Total weekly ridership (CRPS = {:0.3g})\".format(crps))\n", + "plt.ylabel(\"log(# rides)\")\n", + "plt.xlabel(\"Week after 2011-01-01\")\n", + "plt.xlim(T1, None)\n", + "plt.legend(loc=\"best\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Backtesting\n", + "\n", + "To compare our Gaussian `Model2` and Stable `Model3` we'll use a simple [backtesting()](http://docs.pyro.ai/en/latest/contrib.forecast.html#pyro.contrib.forecast.evaluate.backtest) helper. This helper by default evaluates three metrics: [CRPS](http://docs.pyro.ai/en/latest/contrib.forecast.html#pyro.contrib.forecast.evaluate.eval_crps) assesses distributional accuracy of heavy-tailed data, [MAE](http://docs.pyro.ai/en/latest/contrib.forecast.html#pyro.contrib.forecast.evaluate.eval_mae) assesses point accuracy of heavy-tailed data, and [RMSE](http://docs.pyro.ai/en/latest/contrib.forecast.html#pyro.contrib.forecast.evaluate.eval_rmse) assesses accuracy of Normal-tailed data. The one nuance here is to set `warm_start=True` to reduce the need for random restarts." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO \t Training on window [0:104], testing on window [104:156]\n", + "INFO \t step 0 loss = 3543.21\n", + "INFO \t step 1000 loss = 0.140962\n", + "INFO \t Training on window [0:130], testing on window [130:182]\n", + "INFO \t step 0 loss = 0.27281\n", + "INFO \t step 1000 loss = -0.227765\n", + "INFO \t Training on window [0:156], testing on window [156:208]\n", + "INFO \t step 0 loss = 0.622017\n", + "INFO \t step 1000 loss = -0.0232647\n", + "INFO \t Training on window [0:182], testing on window [182:234]\n", + "INFO \t step 0 loss = 0.181045\n", + "INFO \t step 1000 loss = -0.104492\n", + "INFO \t Training on window [0:208], testing on window [208:260]\n", + "INFO \t step 0 loss = 0.160061\n", + "INFO \t step 1000 loss = -0.184363\n", + "INFO \t Training on window [0:234], testing on window [234:286]\n", + "INFO \t step 0 loss = 0.0414903\n", + "INFO \t step 1000 loss = -0.207943\n", + "INFO \t Training on window [0:260], testing on window [260:312]\n", + "INFO \t step 0 loss = -0.00223408\n", + "INFO \t step 1000 loss = -0.256718\n", + "INFO \t Training on window [0:286], testing on window [286:338]\n", + "INFO \t step 0 loss = -0.0552213\n", + "INFO \t step 1000 loss = -0.277793\n", + "INFO \t Training on window [0:312], testing on window [312:364]\n", + "INFO \t step 0 loss = -0.141342\n", + "INFO \t step 1000 loss = -0.36945\n", + "INFO \t Training on window [0:338], testing on window [338:390]\n", + "INFO \t step 0 loss = -0.148779\n", + "INFO \t step 1000 loss = -0.332914\n", + "INFO \t Training on window [0:364], testing on window [364:416]\n", + "INFO \t step 0 loss = -0.27899\n", + "INFO \t step 1000 loss = -0.462222\n", + "INFO \t Training on window [0:390], testing on window [390:442]\n", + "INFO \t step 0 loss = -0.328539\n", + "INFO \t step 1000 loss = -0.463518\n", + "INFO \t Training on window [0:416], testing on window [416:468]\n", + "INFO \t step 0 loss = -0.400719\n", + "INFO \t step 1000 loss = -0.494253\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 1min 57s, sys: 502 ms, total: 1min 57s\n", + "Wall time: 1min 57s\n" + ] + } + ], + "source": [ + "%%time\n", + "pyro.set_rng_seed(1)\n", + "pyro.clear_param_store()\n", + "windows2 = backtest(data, covariates, Model2,\n", + " min_train_window=104, test_window=52, stride=26,\n", + " forecaster_options={\"learning_rate\": 0.1, \"time_reparam\": \"dct\",\n", + " \"log_every\": 1000, \"warm_start\": True})" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO \t Training on window [0:104], testing on window [104:156]\n", + "INFO \t step 0 loss = 1852.88\n", + "INFO \t step 1000 loss = 0.533988\n", + "INFO \t Training on window [0:130], testing on window [130:182]\n", + "INFO \t step 0 loss = 2.60906\n", + "INFO \t step 1000 loss = 0.0715323\n", + "INFO \t Training on window [0:156], testing on window [156:208]\n", + "INFO \t step 0 loss = 2.60063\n", + "INFO \t step 1000 loss = 0.110426\n", + "INFO \t Training on window [0:182], testing on window [182:234]\n", + "INFO \t step 0 loss = 1.99784\n", + "INFO \t step 1000 loss = 0.020393\n", + "INFO \t Training on window [0:208], testing on window [208:260]\n", + "INFO \t step 0 loss = 1.63004\n", + "INFO \t step 1000 loss = -0.0936131\n", + "INFO \t Training on window [0:234], testing on window [234:286]\n", + "INFO \t step 0 loss = 1.33227\n", + "INFO \t step 1000 loss = -0.114948\n", + "INFO \t Training on window [0:260], testing on window [260:312]\n", + "INFO \t step 0 loss = 1.19163\n", + "INFO \t step 1000 loss = -0.193086\n", + "INFO \t Training on window [0:286], testing on window [286:338]\n", + "INFO \t step 0 loss = 1.01131\n", + "INFO \t step 1000 loss = -0.242592\n", + "INFO \t Training on window [0:312], testing on window [312:364]\n", + "INFO \t step 0 loss = 0.983859\n", + "INFO \t step 1000 loss = -0.279851\n", + "INFO \t Training on window [0:338], testing on window [338:390]\n", + "INFO \t step 0 loss = 0.560554\n", + "INFO \t step 1000 loss = -0.209488\n", + "INFO \t Training on window [0:364], testing on window [364:416]\n", + "INFO \t step 0 loss = 0.716816\n", + "INFO \t step 1000 loss = -0.369162\n", + "INFO \t Training on window [0:390], testing on window [390:442]\n", + "INFO \t step 0 loss = 0.391474\n", + "INFO \t step 1000 loss = -0.45527\n", + "INFO \t Training on window [0:416], testing on window [416:468]\n", + "INFO \t step 0 loss = 0.37326\n", + "INFO \t step 1000 loss = -0.508014\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 4min 1s, sys: 960 ms, total: 4min 2s\n", + "Wall time: 4min 2s\n" + ] + } + ], + "source": [ + "%%time\n", + "pyro.set_rng_seed(1)\n", + "pyro.clear_param_store()\n", + "windows3 = backtest(data, covariates, Model3,\n", + " min_train_window=104, test_window=52, stride=26,\n", + " forecaster_options={\"learning_rate\": 0.1, \"time_reparam\": \"dct\",\n", + " \"log_every\": 1000, \"warm_start\": True})" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAw0AAAJOCAYAAAD1WuuWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAA9hAAAPYQGoP6dpAACE70lEQVR4nO3deViU9f7/8dcMCrgAagqoILhk7guLuFS2kFCmWZ0yTyeXOtW3NDR+eVI7amUny8xjpuXJc8pOy8lsX1EhLTNX0DaXyjQpBbEFXEGZ+/fHOBPDMoIN3DPD83Fdcwn33HPPe7hhvF/z2SyGYRgCAAAAgCpYzS4AAAAAgHcjNAAAAABwi9AAAAAAwC1CAwAAAAC3CA0AAAAA3CI0AAAAAHCL0AAAAADALUIDAAAAALcIDQAAAADcIjQAqNTSpUtlsVi0d+9es0uBB40dO1ZNmzat1r4Wi0X3339/7RYE1LE1a9bIYrFozZo1Xn1MwNsQGoBasGfPHk2YMEGdO3dW48aN1bhxY3Xr1k3jx4/XF198YXZ58ELvvvuuBg8erPDwcDVu3FgdOnTQ9ddfr4yMDOc++/fv1/33369t27aZVyhwBkeOHNHMmTOVmpqqFi1ayGKxaOnSpZXuu2TJEg0ePFgREREKCgpS+/btNW7cOD6sALxQA7MLAPzNe++9p5EjR6pBgwa68cYb1bt3b1mtVu3cuVNvvPGGnn76ae3Zs0cxMTFml+rWTTfdpBtuuEFBQUFml+L35s6dq8mTJ2vw4MGaOnWqGjdurO+++06ZmZl65ZVXlJqaKskeGh544AHFxsaqT58+5hYNVOHQoUN68MEH1a5dO/Xu3dvtp+9bt25V+/btNXz4cDVv3lx79uzRkiVL9N577+nzzz9XmzZtPF7fhRdeqOPHjyswMNDjxwb8GaEB8KDdu3frhhtuUExMjLKystS6dWuX+x999FE99dRTslq9v5EvICBAAQEBZpdRKwzD0IkTJ9SoUSOzS9GpU6c0a9YsXXbZZVq5cmWF+w8ePGhCVTh16pRsNhsXllU4evSomjRpUul9rVu31oEDBxQZGaktW7YoMTGxyuM89dRTFbaNGDFCCQkJ+u9//6spU6Z4rGYHq9Wq4OBgjx8X8Hfef+UC+JA5c+bo6NGjeu655yoEBklq0KCB0tLSFB0d7dz2xRdfaOzYserQoYOCg4MVGRmpm2++WT///LPLY8eOHavY2NgKx7z//vtlsVhctq1atUrnn3++mjVrpqZNm+q8887TtGnTXPZ58skn1b17dzVu3FjNmzdXQkKCXn75Zef9lY1pePvttzV06FC1adNGQUFB6tixo2bNmqXS0lKXY1900UXq0aOHtm/frosvvliNGzdW27ZtNWfOnDP+DHv06KGLL764wnabzaa2bdvqT3/6k8u2+fPnq3v37goODlZERIRuv/12/frrry6PjY2N1ZVXXqkVK1YoISFBjRo10r/+9a9q/ayqGttRWR/mb7/9Vtdee60iIyMVHBysqKgo3XDDDSosLKzy9R46dEhFRUUaNGhQpfeHh4c7n89x8TVu3DhZLBaXbh9r167Vddddp3bt2ikoKEjR0dG6++67dfz48UqP+/333yslJUVNmjRRmzZt9OCDD8owjCrrdPjpp5908803O7uTdO/eXc8+++wZHydJzz33nC655BKFh4crKChI3bp109NPP13pvh9++KEGDx6skJAQhYaGKjEx0eX3U5I2btyoK664Qs2bN1eTJk3Uq1cvPfHEE877L7roIl100UUVjl3+b2nv3r2yWCyaO3eu5s+fr44dOyooKEjbt29XSUmJZsyYofj4eIWFhalJkya64IILtHr16grHtdlseuKJJ9SzZ08FBwerVatWSk1N1ZYtWyRJgwcPVu/evSt9veedd55SUlLO9CPUU089pe7duysoKEht2rTR+PHj9dtvvznvnzBhgpo2bapjx45VeOyoUaMUGRnp8vf64Ycf6oILLlCTJk0UEhKioUOH6uuvv67w82ratKl2796tK664QiEhIbrxxhurrDEoKEiRkZFnfC1VcZybsq+rMtdcc43i4uJctg0bNkwWi0XvvPOOc9vGjRtlsVj04YcfSqr8b7cm71k//vijRowYoSZNmig8PFx33323iouLK61x+fLlio+PV6NGjdSyZUv95S9/0U8//eS8/5133pHFYnHptvr666/LYrHommuucTlW165dNXLkSOf31XmfBzyJlgbAg9577z116tRJSUlJ1X7MqlWr9P3332vcuHGKjIzU119/rWeeeUZff/21NmzYUCEQnMnXX3+tK6+8Ur169dKDDz6ooKAgfffdd1q3bp1znyVLligtLU1/+tOfNHHiRJ04cUJffPGFNm7cqD//+c9VHnvp0qVq2rSp0tPT1bRpU3300UeaMWOGioqK9Nhjj7ns++uvvyo1NVXXXHONrr/+er322mu699571bNnT11++eVVPsfIkSN1//33Ky8vz+XC49NPP9X+/ft1ww03OLfdfvvtWrp0qcaNG6e0tDTt2bNHCxcu1NatW7Vu3To1bNjQue+uXbs0atQo3X777br11lt13nnnVetnVV0lJSVKSUlRcXGx7rrrLkVGRuqnn37Se++9p99++01hYWGVPi48PFyNGjXSu+++q7vuukstWrSodL+uXbvqwQcf1IwZM3TbbbfpggsukCQNHDhQkv3i5NixY7rjjjt0zjnnaNOmTXryySf1448/avny5S7HKi0tVWpqqvr37685c+YoIyNDM2fO1KlTp/Tggw9W+Rrz8/PVv39/WSwWTZgwQa1atdKHH36oW265RUVFRZo0aZLbn9HTTz+t7t27a/jw4WrQoIHeffdd3XnnnbLZbBo/frxzv6VLl+rmm29W9+7dNXXqVDVr1kxbt25VRkaG8/dz1apVuvLKK9W6dWtNnDhRkZGR2rFjh9577z1NnDjRbR1Vee6553TixAnddtttCgoKUosWLVRUVKR///vfGjVqlG699VYdPnxY//nPf5SSkqJNmza5dBO75ZZbtHTpUl1++eX661//qlOnTmnt2rXasGGDEhISdNNNN+nWW2/VV199pR49ejgft3nzZn3zzTf6+9//7ra++++/Xw888ICSk5N1xx13aNeuXXr66ae1efNm5+/7yJEjtWjRIr3//vu67rrrnI89duyY3n33XY0dO9bZgvjCCy9ozJgxSklJ0aOPPqpjx47p6aef1vnnn6+tW7e6BKtTp04pJSVF559/vubOnavGjRuf1c+4Kj///LNKS0u1b98+5+/gpZde6vYxF1xwgd5++20VFRUpNDRUhmFo3bp1slqtWrt2rYYPHy7JHqitVmuVwdyhOu9Zx48f16WXXqp9+/YpLS1Nbdq00QsvvKCPPvqowvEc702JiYmaPXu28vPz9cQTT2jdunXaunWrmjVrpvPPP18Wi0WffPKJevXq5VLvp59+6jxWQUGBdu7cqQkTJkiq3vs84HEGAI8oLCw0JBkjRoyocN+vv/5qFBQUOG/Hjh1z3lf2a4f//e9/hiTjk08+cW4bM2aMERMTU2HfmTNnGmX/lP/5z38akoyCgoIqa73qqquM7t27u309zz33nCHJ2LNnj9tab7/9dqNx48bGiRMnnNsGDx5sSDL++9//OrcVFxcbkZGRxrXXXuv2eXft2mVIMp588kmX7XfeeafRtGlTZw1r1641JBkvvfSSy34ZGRkVtsfExBiSjIyMDJd9q/OzquznYBiGsXr1akOSsXr1asMwDGPr1q2GJGP58uVuX19lZsyYYUgymjRpYlx++eXGP/7xDyM7O7vCfps3bzYkGc8991yF+yo7N7NnzzYsFovxww8/OLeNGTPGkGTcddddzm02m80YOnSoERgY6PKzkGTMnDnT+f0tt9xitG7d2jh06JDL89xwww1GWFhYpTWcqcaUlBSjQ4cOzu9/++03IyQkxEhKSjKOHz/usq/NZjMMwzBOnTpltG/f3oiJiTF+/fXXSvcxDPvv4eDBgys8Z/m/pT179hiSjNDQUOPgwYMu+546dcooLi522fbrr78aERERxs033+zc9tFHHxmSjLS0tArP56jpt99+M4KDg417773X5f60tDSjSZMmxpEjRyo81uHgwYNGYGCgMWTIEKO0tNS5feHChYYk49lnn3U+V9u2bSv8nb366qsu7ymHDx82mjVrZtx6660u++Xl5RlhYWEu2x2/M1OmTKmyvqq4+50tKygoyJBkSDLOOeccY8GCBdU+9gcffGAYhmF88cUXhiTjuuuuM5KSkpz7DR8+3Ojbt6/z+/J/u4ZR/fes+fPnG5KMV1991bnt6NGjRqdOnVyOWVJSYoSHhxs9evRw+T1+7733DEnGjBkznNu6d+9uXH/99c7v4+LijOuuu86QZOzYscMwDMN44403DEnG559/bhhG9d67AE+jexLgIUVFRZJU6XSWF110kVq1auW8LVq0yHlf2X71J06c0KFDh9S/f39JUk5OTo3raNasmSR7VyKbzVblPj/++KM2b95co2OXrfXw4cM6dOiQLrjgAh07dkw7d+502bdp06b6y1/+4vw+MDBQ/fr10/fff+/2OTp37qw+ffpo2bJlzm2lpaV67bXXNGzYMGcNy5cvV1hYmC677DIdOnTIeYuPj1fTpk0rdB9p3759he4f1flZVZejJWHFihWVdg1x54EHHtDLL7+svn37asWKFbrvvvsUHx+vuLg47dixo1rHKHtujh49qkOHDmngwIEyDENbt26tsL/jE0tJzpaDkpISZWZmVnp8wzD0+uuva9iwYTIMw+VnnpKSosLCwjP+vpatsbCwUIcOHdLgwYP1/fffO7twrVq1SocPH9aUKVMq9Dt3tLpt3bpVe/bs0aRJk5znsPw+Z+Paa69Vq1atXLYFBAQ4xzXYbDb98ssvOnXqlBISElxer6NLycyZMysc11FTWFiYrrrqKv3vf/9zdgUrLS3VsmXLnN1dqpKZmamSkhJNmjTJZUzUrbfeqtDQUL3//vvO57ruuuv0wQcf6MiRI879li1bprZt2+r888+XZP85//bbbxo1apTLuQwICFBSUlKl3a/uuOMO9z/AP+DDDz/UBx98oMcff1zt2rXT0aNHz/iYvn37qmnTpvrkk08k2T+hj4qK0ujRo5WTk6Njx47JMAx9+umnzpY5d6rznvXBBx+odevWLt0kGzdurNtuu83lWFu2bNHBgwd15513uvweDx06VF26dHGeL8neYrJ27VpJ9vfVzz//XLfddptatmzp3L527Vo1a9bM2ULlyfcuoLoIDYCHhISESJLLf9QO//rXv7Rq1Sq9+OKLFe775ZdfNHHiREVERKhRo0Zq1aqV2rdvL0lu+8JXZeTIkRo0aJD++te/KiIiQjfccINeffVVl/9Y7r33XjVt2lT9+vXTueeeq/Hjx1erWfvrr7/W1VdfrbCwMIWGhqpVq1bO/2TL1xoVFVXhAq558+YVxhtU9RrWrVvn7Pu7Zs0aHTx40KU/77fffqvCwkKFh4e7BLJWrVrpyJEjFQYQO36m5Z/nTD+r6mrfvr3S09P173//Wy1btlRKSooWLVpU7XM4atQorV27Vr/++qtWrlypP//5z9q6dauGDRumEydOnPHx+/bt09ixY9WiRQs1bdpUrVq10uDBgyVVPDdWq1UdOnRw2da5c2dJqnKqy4KCAv3222965plnKvy8x40bJ+nMg7bXrVun5ORkNWnSRM2aNVOrVq2cfbAdNe7evVuSXLrvlFedfc5GZb8jkvT888+rV69eCg4O1jnnnKNWrVrp/fffd/m57t69W23atKmye5nD6NGjtW/fPufFYGZmpvLz83XTTTe5fdwPP/wgyT72oazAwEB16NDBeb9k/70+fvy4s1//kSNH9MEHH+i6665z/k1+++23kqRLLrmkwvlcuXJlhXPZoEEDRUVFua3xj7j44ot1+eWXKz09XcuXL9cDDzyghQsXun1MQECABgwY4HJhfcEFF+j8889XaWmpNmzYoO3bt+uXX36pVmioznvWDz/8oE6dOlXYr/x5qep8SVKXLl1cztcFF1ygAwcO6LvvvtNnn30mi8WiAQMGuISJtWvXatCgQc7A6Mn3LqC6GNMAeEhYWJhat26tr776qsJ9jjEOlV2QXX/99frss880efJk9enTR02bNpXNZlNqaqrLfwBVfYJafhByo0aN9Mknn2j16tV6//33lZGRoWXLlumSSy7RypUrFRAQoK5du2rXrl167733lJGRoddff11PPfWUZsyYoQceeKDS5/ntt980ePBghYaG6sEHH1THjh0VHBysnJwc3XvvvRX+s6pq5iWjGoNtR44cqalTp2r58uWaNGmSXn31VYWFhTmnHpXsn/qGh4frpZdeqvQY5T8xrmympOr8rKr7c5ekxx9/XGPHjtXbb7+tlStXKi0tTbNnz9aGDRuqfcEVGhqqyy67TJdddpkaNmyo559/Xhs3bnQGgKpqueyyy/TLL7/o3nvvVZcuXdSkSRP99NNPGjt2rEcuJBzH+Mtf/qIxY8ZUuo+jT3Zldu/erUsvvVRdunTRvHnzFB0drcDAQH3wwQf65z//WSsXOxaLpdLft8rOnVT578iLL76osWPHasSIEZo8ebLCw8MVEBCg2bNnO8NLTaSkpCgiIkIvvviiLrzwQr344ouKjIxUcnJyjY9Vlf79+ys2Nlavvvqq/vznP+vdd9/V8ePHXUK34+f9wgsvVDpouUED18uDoKCgOpv1rWPHjurbt69eeukllxaxypx//vn6xz/+oRMnTmjt2rW67777nJ/Ir127VhEREZJUrdDwR96z/ghH688nn3yi77//XnFxcc4B9wsWLNCRI0e0detW/eMf/3A+pjrvXYCnERoADxo6dKj+/e9/a9OmTerXr98Z9//111+VlZWlBx54QDNmzHBud3wKWFbz5s0rnU2k7CdWDlarVZdeeqkuvfRSzZs3Tw8//LDuu+8+rV692nlx0qRJE40cOVIjR45USUmJrrnmGv3jH//Q1KlTK52OcM2aNfr555/1xhtv6MILL3Ru37NnzxlfZ021b99e/fr107JlyzRhwgS98cYbGjFihMuaER07dlRmZqYGDRr0h6ZOPdPPqnnz5pIqzuRS2c9dknr27KmePXvq73//uz777DMNGjRIixcv1kMPPVTj2hISEvT888/rwIEDkqoOjl9++aW++eYbPf/88xo9erRz+6pVqyrd32az6fvvv3e2LkjSN998I0mVztAl2UNYSEiISktLz+oC991331VxcbHeeecdtWvXzrm9fDeYjh07SpK++uorderUqdJjld3HXS3NmzevtDtcVeeuMq+99po6dOigN954w+XnX74bUseOHbVixQr98ssvblsbAgIC9Oc//1lLly7Vo48+qrfeeku33nrrGS/yHOu67Nq1y6WVqKSkRHv27Knwc7j++uv1xBNPqKioSMuWLVNsbKyz26OjXsk+EN+TgcVTjh8/XuWMRGVdcMEFKikp0f/+9z/99NNPznBw4YUXOkND586dneHhj4qJidFXX30lwzBcfh927dpVYT/H9ksuucTlvl27drms09OuXTu1a9dOa9eu1ffff+/yGhwtL6WlpS7vu1L13ucBT6J7EuBBf/vb39S4cWPdfPPNys/Pr3B/+U+sHBcK5bfPnz+/wmM7duyowsJCl6n5Dhw4oDfffNNlv19++aXCYx0zvDj+Ey4/nWtgYKC6desmwzB08uTJSl9bZbWWlJRUOs+6J4wcOVIbNmzQs88+q0OHDrl8SirZL4pKS0s1a9asCo89derUGadrlKr3s3JcXDn6TUv2T6qfeeYZl8cVFRXp1KlTLtt69uwpq9Xq9uLn2LFjWr9+faX3OaaIdHRxcPR5L//aKjs3hmG4TD9aXtmuH4ZhaOHChWrYsGGVM9YEBATo2muv1euvv15pa1pBQUGVz1VVjYWFhXruuedc9hsyZIhCQkI0e/bsCt2yHI+Ni4tT+/btNX/+/Ao/i7LH79ixo3bu3OlS2+eff16jGWYqq3vjxo0Vztm1114rwzAqbakr//d900036ddff9Xtt9+uI0eOuPSjr0pycrICAwO1YMECl+P95z//UWFhoYYOHeqy/8iRI1VcXKznn39eGRkZuv76613uT0lJUWhoqB5++OFK/+bPdD494dSpU5V2V9y0aZO+/PJLJSQknPEYSUlJatiwoR599FG1aNFC3bt3l2QPExs2bNDHH39crVaG6rriiiu0f/9+vfbaa85tx44dq/B+kJCQoPDwcC1evNjl7//DDz/Ujh07KpyvCy64QB999JE2bdrkrLdPnz4KCQnRI488okaNGik+Pt65f3XeuwBPo6UB8KBzzz1XL7/8skaNGqXzzjvPuSK0YRjas2ePXn75ZVmtVmdXldDQUF144YWaM2eOTp48qbZt22rlypWVfnp/ww036N5779XVV1+ttLQ05/SInTt3dhmQ+eCDD+qTTz7R0KFDFRMTo4MHD+qpp55SVFSUsxl8yJAhioyM1KBBgxQREaEdO3Zo4cKFGjp0qHNsRnkDBw5U8+bNNWbMGKWlpcliseiFF16otab766+/Xvfcc4/uuecetWjRosInZ4MHD9btt9+u2bNna9u2bRoyZIgaNmyob7/9VsuXL9cTTzzhMlixMtX5WXXv3l39+/fX1KlTnZ8iv/LKKxUCwkcffaQJEybouuuuU+fOnXXq1Cm98MILzovtqhw7dkwDBw5U//79lZqaqujoaP3222966623tHbtWo0YMUJ9+/aVZL8IbtasmRYvXqyQkBA1adJESUlJ6tKlizp27Kh77rlHP/30k0JDQ/X6669XOX4kODhYGRkZGjNmjJKSkvThhx/q/fff17Rp0yp06yrrkUce0erVq5WUlKRbb71V3bp10y+//KKcnBxlZmZWeiHjMGTIEAUGBmrYsGHOi+UlS5YoPDzc2ZIi2f8m/vnPf+qvf/2rEhMT9ec//1nNmzfX559/rmPHjun555+X1WrV008/rWHDhqlPnz4aN26cWrdurZ07d+rrr7/WihUrJEk333yz5s2bp5SUFN1yyy06ePCgFi9erO7duzsnLjiTK6+8Um+88YauvvpqDR06VHv27NHixYvVrVs3l/FLF198sW666SYtWLBA3377rbN74dq1a3XxxRe7dLPp27evevTooeXLl6tr164V1hqoTKtWrTR16lQ98MADSk1N1fDhw7Vr1y499dRTSkxMrBA84uLi1KlTJ913330qLi6uELpDQ0P19NNP66abblJcXJxuuOEGtWrVSvv27dP777+vQYMGnXFMgTsLFy7Ub7/9pv3790uytzT9+OOPkqS77rpLYWFhOnLkiKKjozVy5Eh1795dTZo00ZdffqnnnntOYWFhmj59+hmfp3HjxoqPj9eGDRucazRI9k/pjx49qqNHj3o0NNx6661auHChRo8erezsbLVu3VovvPBChSloHUFm3LhxGjx4sEaNGuWccjU2NlZ33323y/4XXHCBXnrpJVksFud7T0BAgAYOHKgVK1booosucllosDrvXYDH1dk8TUA98t133xl33HGH0alTJyM4ONho1KiR0aVLF+P//u//jG3btrns++OPPxpXX3210axZMyMsLMy47rrrjP3791eY7tIwDGPlypVGjx49jMDAQOO8884zXnzxxQpTrmZlZRlXXXWV0aZNGyMwMNBo06aNMWrUKOObb75x7vOvf/3LuPDCC41zzjnHCAoKMjp27GhMnjzZKCwsdO5T2VSj69atM/r37280atTIaNOmjfG3v/3NWLFiRaXTF1Y2pWtV08ZWZdCgQYYk469//WuV+zzzzDNGfHy80ahRIyMkJMTo2bOn8be//c3Yv3+/c5+YmBhj6NChFR5bnZ+VYRjG7t27jeTkZCMoKMiIiIgwpk2bZqxatcrldX///ffGzTffbHTs2NEIDg42WrRoYVx88cVGZmam29d48uRJY8mSJcaIESOMmJgYIygoyGjcuLHRt29f47HHHqsw3efbb79tdOvWzWjQoIHLVJbbt283kpOTjaZNmxotW7Y0br31VuPzzz+vMN3lmDFjjCZNmhi7d+82hgwZYjRu3NiIiIgwZs6c6TKVp2FUnHLVMAwjPz/fGD9+vBEdHW00bNjQiIyMNC699FLjmWeecfs6DcMw3nnnHaNXr15GcHCwERsbazz66KPGs88+W+mUtu+8844xcOBAo1GjRkZoaKjRr18/43//+5/LPp9++qlx2WWXGSEhIUaTJk2MXr16VZiq98UXXzQ6dOhgBAYGGn369DFWrFhR5ZSrjz32WIWabTab8fDDDzvPTd++fY333nuv0t/lU6dOGY899pjRpUsXIzAw0GjVqpVx+eWXVzp97pw5cwxJxsMPP3zGn1tZCxcuNLp06WI0bNjQiIiIMO64444K08463HfffYYko1OnTlUeb/Xq1UZKSooRFhZmBAcHGx07djTGjh1rbNmyxbmP43emJhzTHFd2c5zr4uJiY+LEiUavXr2M0NBQo2HDhkZMTIxxyy23VPh9cGfy5MmGJOPRRx912e6YBnX37t0VXvMfec/64YcfjOHDhxuNGzc2WrZsaUycONE51XPZYxqGYSxbtszo27evERQUZLRo0cK48cYbjR9//LHC83z99deGJKNr164u2x966CFDkjF9+nSX7dV97wI8yWIYtTzCBwAAuHjiiSd09913a+/evS5jPADAWxEaAACoQ4ZhqHfv3jrnnHMqXQ8BALwRYxoAAKgDR48e1TvvvKPVq1fryy+/1Ntvv212SQBQbbQ0AABQB/bu3av27durWbNmuvPOO13m3QcAb0doAAAAAOAW6zQAAAAAcIvQAAAAAMAtBkJXwmazaf/+/QoJCXFZJh4AAADwF4Zh6PDhw2rTpo2sVvdtCYSGSuzfv1/R0dFmlwEAAADUutzcXEVFRbndh9BQiZCQEEn2H2BoaKjJ1QAAAACeV1RUpOjoaOe1rzuEhko4uiSFhoYSGgAAAODXqtMdn4HQ3qK4WGL2WwAAAHghQoM3yM2VYmKkpCRpxQrCAwAAALwKocEbFBRI+flSdraUmkp4AAAAgFdhTIM3sdns/+bk2MNDYqI0a5Y0ZIjE1K8AAMAkNptNJSUlZpeBsxAYGHjG6VSrg9DgjUpL7f+WDQ8PPywlJ5tbFwAAqHdKSkq0Z88e2RwfbsKnWK1WtW/fXoGBgX/oOIQGb+YID5s3S2lp0vbt5tYDAADqFcMwdODAAQUEBCg6Otojn1ij7jgWLD5w4IDatWv3hxYtJjR4s4AAe3BwtDQAAADUoVOnTunYsWNq06aNGjdubHY5OAutWrXS/v37derUKTVs2PCsj0Nc9EYBAfZ/4+KkjAxp40a6JgEAgDpXerrXwx/t2gLzOM6d41yeLVoavInVah8MHRfHAGgAAOA1/ki3FpjLU+eO0OANwsOlyEgpOpqwAAAAAK9D9yRvEBUl7d1r74aUkkJgAAAAqAeWLl2qZs2amV1GtRAavEVQEGEBAADUG4YhFRfX7nPk5eVp4sSJ6tSpk4KDgxUREaFBgwbp6aef1rFjx2r3yath5MiR+uabb8wuo1rongQAAIA6YxjSypXS9OnSvn32meWjoz3/PN9//70GDRqkZs2a6eGHH1bPnj0VFBSkL7/8Us8884zatm2r4cOHe/6Ja6BRo0Zq1KiRqTVUFy0NAAAAqHWGIa1YISUl2deuzc6W8vOlgoLaeb4777xTDRo00JYtW3T99dera9eu6tChg6666iq9//77GjZsmCRp3rx56tmzp5o0aaLo6GjdeeedOnLkiPM4999/v/r06eNy7Pnz5ys2Ntb5/Zo1a9SvXz81adJEzZo106BBg/TDDz9Ikj7//HNdfPHFCgkJUWhoqOLj47VlyxZJFbsn7d69W1dddZUiIiLUtGlTJSYmKjMz0+W5Y2Nj9fDDD+vmm29WSEiI2rVrp2eeecaDP7nKERoAAABQa8qHhZwc+/baXGD6559/1sqVKzV+/Hg1adKk0n0cswpZrVYtWLBAX3/9tZ5//nl99NFH+tvf/lbt5zp16pRGjBihwYMH64svvtD69et12223OY9/4403KioqSps3b1Z2dramTJlS5XoJR44c0RVXXKGsrCxt3bpVqampGjZsmPbt2+ey3+OPP66EhARt3bpVd955p+644w7t2rWr2jWfDbonAaiSYUglJfYhNwAA1FRmpjRtmr0LkmMZqj+4XEC1fPfddzIMQ+edd57L9pYtW+rEiROSpPHjx+vRRx/VpEmTnPfHxsbqoYce0v/93//pqaeeqtZzFRUVqbCwUFdeeaU6duwoSeratavz/n379mny5Mnq0qWLJOncc8+t8li9e/dW7969nd/PmjVLb775pt555x1NmDDBuf2KK67QnXfeKUm699579c9//lOrV6+u8Ho9iZYGABWU/VQoJkbKzTW7IgCAL0pLswcGqW7Cwpls2rRJ27ZtU/fu3VV8ehR2ZmamLr30UrVt21YhISG66aab9PPPP1d7oHSLFi00duxYpaSkaNiwYXriiSd04MAB5/3p6en661//quTkZD3yyCPavXt3lcc6cuSI7rnnHnXt2lXNmjVT06ZNtWPHjgotDb169XJ+bbFYFBkZqYMHD9bkR1FjhAYATnXd3xQA4N8WLJASE+1fO1oa6kKnTp1ksVgqdNnp0KGDOnXq5Bx8vHfvXl155ZXq1auXXn/9dWVnZ2vRokWSpJKSEkn27kuGYbgc5+TJky7fP/fcc1q/fr0GDhyoZcuWqXPnztqwYYMk+5iIr7/+WkOHDtVHH32kbt266c0336y07nvuuUdvvvmmHn74Ya1du1bbtm1Tz549nbU4lO/eZLFYZKvN/l4iNACQOf1NAQD+LznZvgxVRoYUF2ffVhfh4ZxzztFll12mhQsX6ujRo1Xul52dLZvNpscff1z9+/dX586dtX//fpd9WrVqpby8PJfgsG3btgrH6tu3r6ZOnarPPvtMPXr00Msvv+y8r3Pnzrr77ru1cuVKXXPNNXruuecqrWfdunUaO3asrr76avXs2VORkZHau3dvzV58LSE0APVcZmbFsOANTcgAAP9gsdjXri0fHqy1fBX61FNP6dSpU0pISNCy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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, axes = plt.subplots(3, figsize=(8, 6), sharex=True)\n", + "axes[0].set_title(\"Gaussian versus Stable accuracy over {} windows\".format(len(windows2)))\n", + "axes[0].plot([w[\"crps\"] for w in windows2], \"b<\", label=\"Gaussian\")\n", + "axes[0].plot([w[\"crps\"] for w in windows3], \"r>\", label=\"Stable\")\n", + "axes[0].set_ylabel(\"CRPS\")\n", + "axes[1].plot([w[\"mae\"] for w in windows2], \"b<\", label=\"Gaussian\")\n", + "axes[1].plot([w[\"mae\"] for w in windows3], \"r>\", label=\"Stable\")\n", + "axes[1].set_ylabel(\"MAE\")\n", + "axes[2].plot([w[\"rmse\"] for w in windows2], \"b<\", label=\"Gaussian\")\n", + "axes[2].plot([w[\"rmse\"] for w in windows3], \"r>\", label=\"Stable\")\n", + "axes[2].set_ylabel(\"RMSE\")\n", + "axes[0].legend(loc=\"best\")\n", + "plt.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that RMSE is a poor metric for evaluating heavy-tailed data. Our stable model has such heavy tails that its variance is infinite, so we cannot expect RMSE to converge, hence occasional outlying points." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/pyro/source/tutorial/source/forecasting_ii.ipynb b/pyro/source/tutorial/source/forecasting_ii.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..c2023989cf56e787d40c85991ed3664693e8151c --- /dev/null +++ b/pyro/source/tutorial/source/forecasting_ii.ipynb @@ -0,0 +1,633 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Forecasting II: state space models\n", + "\n", + "This tutorial covers state space modeling with the [pyro.contrib.forecast](http://docs.pyro.ai/en/latest/contrib.forecast.html) module. This tutorial assumes the reader is already familiar with [SVI](http://pyro.ai/examples/svi_part_ii.html), [tensor shapes](http://pyro.ai/examples/tensor_shapes.html), and [univariate forecasting](http://pyro.ai/examples/forecasting_i.html).\n", + "\n", + "See also:\n", + "\n", + "- [Forecasting I: univariate, heavy tailed](http://pyro.ai/examples/forecasting_i.html)\n", + "- [Forecasting III: hierarchical models](http://pyro.ai/examples/forecasting_iii.html)\n", + "\n", + "#### Summary\n", + "\n", + "- Pyro's [ForecastingModel](http://docs.pyro.ai/en/latest/contrib.forecast.html#pyro.contrib.forecast.forecaster.ForecastingModel) can combine regression, variational inference, and exact inference.\n", + "- To model a linear-Gaussian dynamical system, use a [GaussianHMM](http://docs.pyro.ai/en/latest/distributions.html#gaussianhmm) `noise_dist`.\n", + "- To model a heavy-tailed linear dynamical system, use [LinearHMM](http://docs.pyro.ai/en/latest/distributions.html#linearhmm) with heavy-tailed distributions.\n", + "- To enable inference with [LinearHMM](http://docs.pyro.ai/en/latest/distributions.html#linearhmm), use a [LinearHMMReparam](http://docs.pyro.ai/en/latest/infer.reparam.html#pyro.infer.reparam.hmm.LinearHMMReparam) reparameterizer." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import math\n", + "import torch\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "import pyro.poutine as poutine\n", + "from pyro.contrib.examples.bart import load_bart_od\n", + "from pyro.contrib.forecast import ForecastingModel, Forecaster, eval_crps\n", + "from pyro.infer.reparam import LinearHMMReparam, StableReparam, SymmetricStableReparam\n", + "from pyro.ops.tensor_utils import periodic_repeat\n", + "from pyro.ops.stats import quantile\n", + "import matplotlib.pyplot as plt\n", + "\n", + "%matplotlib inline\n", + "assert pyro.__version__.startswith('1.9.1')\n", + "pyro.set_rng_seed(20200305)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Intro to state space models\n", + "\n", + "In the [univariate tutorial](http://pyro.ai/examples/forecasting_i.html) we saw how to model time series as regression plus a local level model, using variational inference. This tutorial covers a different way to model time series: state space models and exact inference. Pyro's forecasting module allows these two paradigms to be combined, for example modeling seasonality with regression, including a slow global trend, and using a state-space model for short-term local trend.\n", + "\n", + "Pyro implements a few state space models, but the most important are the [GaussianHMM](http://docs.pyro.ai/en/latest/distributions.html#gaussianhmm) distribution and its heavy-tailed generalization the [LinearHMM](http://docs.pyro.ai/en/latest/distributions.html#linearhmm) distribution. Both of these model a linear dynamical system with hidden state; both are multivariate, and both allow learning of all process parameters. On top of these the [pyro.contrib.timeseries](http://docs.pyro.ai/en/latest/contrib.timeseries.html) module implements a variety of multivariate Gaussian Process models that compile down to `GaussianHMM`s.\n", + "\n", + "Pyro's inference for `GaussianHMM` uses parallel-scan Kalman filtering, allowing fast analysis of very long time series. Similarly, Pyro's inference for `LinearHMM` uses entirely parallel auxiliary variable methods to reduce to a `GaussianHMM`, which then permits parallel-scan inference. Thus both methods allow parallelization of long time series analysis, even for a single univariate time series.\n", + "\n", + "Let's again look at the [BART train](https://www.bart.gov/about/reports/ridership) ridership dataset:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dict_keys(['stations', 'start_date', 'counts'])\n", + "torch.Size([78888, 50, 50])\n", + "12TH 16TH 19TH 24TH ANTC ASHB BALB BAYF BERY CAST CIVC COLM COLS CONC DALY DBRK DELN DUBL EMBR FRMT FTVL GLEN HAYW LAFY LAKE MCAR MLBR MLPT MONT NBRK NCON OAKL ORIN PCTR PHIL PITT PLZA POWL RICH ROCK SANL SBRN SFIA SHAY SSAN UCTY WARM WCRK WDUB WOAK\n" + ] + } + ], + "source": [ + "dataset = load_bart_od()\n", + "print(dataset.keys())\n", + "print(dataset[\"counts\"].shape)\n", + "print(\" \".join(dataset[\"stations\"]))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "torch.Size([78888, 1])\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAv8AAAE8CAYAAABXb96lAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzsnXmYnFWV/091VXdV73u6sxMgEBBCEIdFEEURhiigICayyciwOMiMuKCoo+DDMyzyoKCA/sBhBFQQfUBFQBAQBkEQkEUIJAHS6SS971t1V3e9vz/OfPqcqu6EDkSj5J7n6ae7q97lvveee873fM+5941FURRJkCBBggQJEiRIkCBB3vZSsL0bECRIkCBBggQJEiRIkL+NBPAfJEiQIEGCBAkSJMgOIgH8BwkSJEiQIEGCBAmyg0gA/0GCBAkSJEiQIEGC7CASwH+QIEGCBAkSJEiQIDuIBPAfJEiQIEGCBAkSJMgOIgH8BwkSJEiQIEGCBAmyg0gA/0GCBAkSJEiQIEGC7CASwH+QIEGCBAkSJEiQIDuIBPAfJEiQ7SLf//73JRaLSWtr6xaPW7lypdTV1f2NWjVz+fKXvyypVOpvcq/GxkY5++yz3/C4mfbptpZ0Oi2xWEy+8IUvvOGx26uN/0jy8ssvSywWk1tvvXV7NyVIkCBvQwngP0iQt7nEYrEZ/fz+97+f8TX7+/vlwgsvlEcfffSv1/AgQYIECRIkyDaXxPZuQJAgQf66cvPNN+f8f9NNN8n9998/5fM99thjxtfs7++Xiy66SFKplBxyyCHbpJ1BNi9NTU0Sj8e3dzO2iZxxxhly2mmn/c2yJv+Isvvuu8vIyIgUFRVt76YECRLkbSgB/AcJ8jaXk08+Oef/P/7xj3L//fdP+TzIzGRoaEhKS0v/6veJokjS6bQUFxdLMpn8q99vOhkeHpaSkpJtes14PP62CWTyxY/ZW5FYLBaCI/nbzbUgQXY0CWU/QYIEyZHW1lY57bTTpL6+XlKplCxbtkx+8pOfTH7/8ssvy/z580VE5IILLpgsG7r00ktFROSZZ56RU045RRYtWiSpVEpmz54tZ555pvT29r6ldq1fv14+/OEPS1lZmcyaNUu+8pWvSDabzTmmv79f/v3f/13mzp0ryWRSlixZIldddVXOMZurp6ZunecQ0br+WCwma9askY9//ONSVVUlhx9++LTtO+CAA+SAAw6Y8nkURbLTTjvJscceu8Xna2xslI997GNy1113yTvf+U5JpVLyox/9aPK7/Jr/5557Tg499FApLi6WBQsWyGWXXSZRFE177V//+tfy7ne/W0pLS6WyslKOPfZYeeWVV3KOYW3FK6+8IkceeaSUlZXJpz71KRERWbVqlXzkIx+RhoYGSaVSMn/+fDnppJNkaGhoyr1uv/122XPPPSWZTMree+8tDzzwQM7309X88+y/+c1vZOnSpZJKpWSvvfaSX//611vsM2Qm477rrrvKUUcdNeXc8fFxqa+vzwmGJyYm5IorrpA99thDksmkNDY2yjnnnCP9/f05525pzKaTAw88UN71rnfJ888/Pzl28+bNk+985zs5x02no4zPTObBTNufL9ddd53EYjFZtWrVlO++/vWvS2FhobS3t09+9oc//EE++MEPSkVFhZSWlsr73/9+eeKJJ3LOe/XVV+Wss86SxYsXS3FxsdTV1cnKlSulubk55zj04rHHHpMzzzxT6urqZNdddxURkd7eXvnMZz4jCxculGQyKbNmzZIjjzxSXnjhhS0+T5AgQaaXAP6DBAkyKYODg/Ke97xHbr31VjnttNPk8ssvl9LSUjnppJPkBz/4gYiIzJkzR66++moREVmxYoXcfPPNcvPNN8vRRx8tIiL33HOPbNy4UU4//XT57ne/KyeccILcdNNNcswxx7zpdo2NjckHP/hBmTNnjnzrW9+Sgw46SC655JIcoDUxMSHLly+X733ve3L00UfLlVdeKTvvvLN89rOflQsuuOAt9IrIRz7yEclms3LppZfKaaedNu0xp5xyijz55JOydu3anM8fffRRaWpqmlGm5YUXXpBTTz1Vli9fLldffbXstdde0x7X3Nwshx12mKxatUq+8pWvyGc+8xn5wQ9+IN///venHHvDDTfIMcccI7W1tXLZZZfJBRdcIM8884wcfPDBsnHjxpxjR0dH5YgjjpD58+fLlVdeKccee6yMjIzIEUccIU8//bR89rOflWuuuUZOP/10WbVqlQwODuac/8ADD8h5550nJ598slx22WXS398vxx13nPT19b3hs7/44oty8sknyzHHHCP/9V//JdlsVo477jh55JFHtnjeTMd9xYoV8sADD0h3d3fO+Q8++KB0dnbKypUrJz877bTT5Ktf/aq8733vk6uvvlpOPfVUufHGG2X58uUyMTGRc/5Mxwzp6OiQo446Sv7pn/5JrrzyStlll13kvPPOk4ceeugN+2gm82Br2+9lxYoVUlRUJD/+8Y+nfPeTn/xEjjjiCJk1a5aIiNx7771y2GGHyejoqFx00UVy8cUXS1tbm7zvfe+TZ599dvK8xx9/XJ5++mk56aST5Oqrr5Z//dd/lXvuuUfe//73y+jo6JT7nHHGGfLaa6/JRRddNLmA/PTTT5cf/vCHsmLFCrn22mvl85//vCQSiSkBbJAgQWYoUZAgQXYoOeecc6LNTf1LL700EpHo5z//+eRno6Oj0Tvf+c6oqqoqGhoaiqIoipqbmyMRiS655JIp1xgeHp7y2Y033hiJSPTkk09OfnbddddFIhK1tLRssb0rVqyIRCS6/PLLJz/LZrPRnnvuGR188MGTn916662RiERXXHFFznFHH310FI/Ho/Xr10dRFEWrVq2KRCT66U9/mnOfkZGRKc/0pS99KRKR6LTTTpvSri996UtRMpmc/L+zszMqLCyMvvGNb+Qcd+aZZ0aVlZXRyMjIFp+zoaEhEpHo97///bTfnXXWWZP/n3322VEsFoueffbZyc82bdoUlZaW5vRpT09PVFZWFp177rk512tubp7yOf184YUX5hz7+OOPRyIS/frXv95s2+m7VCoVNTU1TX7+xBNPRCISXX/99ZOfTTfuPPtvfvObyc+6u7ujurq66KCDDtrsfaNo5uP+3HPPTWlLFEXRpz71qaiqqioaHR2NoiiK7r///khEol/84hc5x915551TPt/SmE0nBxxwQCQi0c9+9rPJz4aHh6Pa2tropJNOmvxsOh2d6TzYmvZPJx/96EejRYsWRdlsdvKzxx57LKc94+Pj0cKFC6Njjjkm59yBgYFo3rx50dFHH53zfPny0EMPTekH9OL9739/NDExkfOMxcXF0ec///kttjtIkCAzl8D8BwkSZFLuvvtuWbhwoRx33HGTnxUVFcm5554rvb298thjj73hNXy988jIiHR2dsqBBx4oIloS9GblrLPOmvw7FovJIYccIq+99lpO21OplHz605/OOe5zn/ucTExMyG9/+9s3fW9/zc1JbW2tLF++PIc1HRsbk9tvv10+9rGPzaiGe4899pD3vve9b3jc3XffLe9973tln332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22XffffdbFnEW5ELLrhAbr31Vjn88MPlP/7jPySZTMp1110nu+yyizz//POTx9XW1k5ur/iud71LVqxYIbW1tbJu3Tq566675IgjjpArrrhii/e655575Pzzz5cTTjhBFi9eLKOjo3LTTTdJMpnMWRj+VmXJkiVy0kknyTnnnCO1tbVy/fXXS09Pj1xyySVbPG+m446sWLFCvvrVr8r5558vjY2NUxbrHnnkkfLJT35SvvGNb8hTTz0lH/jAByQej8vq1avl9ttvl+uvv14+/OEPb7Pn3tayrdp/yimnTGZ18gPYwsJCuf766+WYY46RvffeW0499VSZM2eObNiwQX73u9/JnDlz5Pbbb5dYLCYf+tCH5IYbbpCSkhLZbbfd5NFHH5VHH31UKisrZ/Q8XV1dsttuu8kJJ5wge++9t5SUlMhvf/tbeeGFF+Saa67Z+g4KEiRI2OozSJAdTba01WcU6ZaRp556alRbWxsVFRVF++yzT3TLLbdMOe7hhx+O9t1336ioqChni8ympqbomGOOiSorK6OqqqroE5/4RNTU1DRlG82t2eqztrZ2yuf5W21GURT19fVF5557bjR79uyosLAw2m233aJvf/vbOdsWRlEUDQ4ORp/85Cej8vLyqKKiIjrxxBOjjRs3bnarz4GBgRndH/nmN78ZiUh05ZVXbvHZvDQ0NETHH3/8Zr/zW31GURQ988wz0SGHHBIlk8lo3rx50SWXXBJde+210/bp/fffHx1++OFRRUVFVFxcHO26667R6aefHv35z3+ePGZz/bx69erotNNOixYtWhSlUqmotrY2Ovzww3O2t2Srz+m2Y8xv++a2+jz++OOju+66K9prr72ioqKiaM8994zuvPPON+g1lZmOO7LffvtFIhJ95jOfmfb7bDYbXXvttdG+++4bpVKpqKKiIlq6dGl0wQUXRK2trVPaPVM54IADov3222/K5ytWrIh23333yf83t9XnTOfBTNu/JWlqaopisVi0dOnSzR7z1FNPRccee2xUU1MTJZPJaKeddoo+8YlPRA8//PDkMV1dXdEpp5wS1dbWRuXl5dHy5cujtWvXblYvXnjhhZx7DA8PR5/73OeivffeOyovL4/Kysqifffdd8qWrUGCBJm5xKLo72QlVpAgQYK8TeSyyy6Tr371q7Jhw4acBbFBppfGxkY55JBD5Oc/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NHr//fdT53WdOz6MHTu2Dw97PB5avnw5ESkPn/IwwxSrVq0yfr/f/Od//qfZvn27+epXv2ry8vJMfX39yW7aScfq1avNt771LfOb3/zGEJF5/vnnHefvv/9+E4lEzAsvvGA++OAD87d/+7dm3LhxprOzM3XNJZdcYmbMmGHeeecd87//+79m/PjxZvHixanz0WjUlJaWmiVLlpht27aZX/7ylyYUCpl///d/T13z9ttvm4yMDPODH/zA7Nixw3z72982Pp/PbN269cQT4QRiwYIFZuXKlWbbtm1m8+bN5m/+5m9MVVWVaWtrS12zbNkyU1lZadauXWvef/9981d/9VfmvPPOS53v7e01U6dONfPnzzebNm0yq1evNkVFRebOO+9MXfPxxx+bcDhsbrnlFrNjxw7z8MMPm4yMDPPqq6+mrhmO8+C3v/2tefnll82HH35odu3aZf7lX/7F+Hw+s23bNmOM0nYo8d5775mxY8ea6dOnm5tuuil1XGl8fFixYoWZMmWKqa2tTf0cOnQodV7pe3xoamoyY8aMMVdddZV59913zccff2xee+01s2fPntQ1us4dHxoaGhz8u2bNGkNEZv369cYY5eFTHcNW+Z89e7ZZvnx56v9EImEqKirMfffddxJbderBrfwnk0lTVlZmHnjggdSxlpYWEwgEzC9/+UtjjDE7duwwRGT++Mc/pq555ZVXjMfjMQcOHDDGGPPYY4+Z/Px8093dnbrm9ttvN2eccUbq/yuvvNIsXLjQ0Z45c+aY66+/fmg7eZLR0NBgiMi88cYbxhhLT5/PZ5599tnUNTt37jREZDZs2GCMsRs0r9dr6urqUtc8/vjjJjc3N0XT2267zUyZMsXxrkWLFpkFCxak/h8p8yA/P988+eSTStshRCwWMxMmTDBr1qwxn/3sZ1PKv9L4+LFixQozY8aMtOeUvseP22+/3VxwwQX9ntd1buhx0003mdNPP90kk0nl4U8BhqXbTzwep40bN9L8+fNTx7xeL82fP582bNhwElt26qO6uprq6uoctItEIjRnzpwU7TZs2EB5eXk0a9as1DXz588nr9dL7777buqaz3zmM+T3+1PXLFiwgHbt2kXNzc2pa+R7cM1wG6NoNEpERAUFBUREtHHjRurp6XH0/cwzz6SqqioHjadNm0alpaWpaxYsWECtra20ffv21DUD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q666iq644oo+x19//XXyeDzU0tJyElo1OFx//fX0D//wD7Rv3z767ne/S0899RTl5eWdsPd98MEHtHjxYqqsrKRQKESTJk2iH//4x32ue/311+nss8+mQCBA48ePp6eeespx/s0336TLLruMKioqyOPx0AsvvNDnGb/5zW/o4osvpsLCQvJ4PLR58+ZBtbGpqYmWLFlCubm5lJeXR9deey21tbWlznd1ddFVV11F06ZNo8zMzLRj3x+effZZOvPMMykYDNK0adNo9erVQ9JmhUKhGEqo8q9QKBSnMHp6eo7pvra2NmpoaKAFCxZQRUUF5eTkDFmbEokEJZPJPsc3btxIJSUl9PTTT9P27dvpW9/6Ft155530yCOPpK6prq6mhQsX0uc+9znavHkz3XzzzfSVr3yFXnvttdQ17e3tNGPGDHr00Uf7bUN7eztdcMEF9P3vf/+o2r5kyRLavn07rVmzhl566SV688036brrrnP0LRQK0de//nWaP3/+oJ/7hz/8gRYvXkzXXnstbdq0ia644gq64ooraNu2bcfdZoVCoRhSGIVCoVD0i6VLl5rLL7+8z/H169cbIjLNzc2pY88995yZPHmy8fv9ZsyYMeaHP/yh4x4iMs8//7zjWCQSMStXrjTGGFNdXW2IyKxatcp85jOfMYFAIHXOjQcffNBMnTrVhMNhM3r0aHPDDTeYWCzmaJv8SXdsxYoVxhhjurq6zK233moqKipMOBw2s2fPNuvXr0+9a+XKlSYSiZgXX3zRTJo0yWRkZJjq6upB0e9rX/ua+dznPpf6/7bbbjNTpkxxXLNo0SKzYMGCtPeno5kEaLZp06YjtmXHjh2GiMwf//jH1LFXXnnFeDwec+DAgT7X9zf26XDllVeahQsXOo7NmTPHXH/99cfVZoVCoRhqqOVfoVAohgAbN26kK6+8kr70pS/R1q1b6Z577qG77rqrj0vLYHDHHXfQTTfdRDt37qQFCxakvcbr9dJPfvIT2r59O/385z+ndevW0W233UZEROeddx7t2rWLiIh+/etfU21tLZ133nn0ox/9iHJzc6m2tpZqa2vpG9/4BhER3XjjjbRhwwZatWoVbdmyhb74xS/SJZdcQrt37069r6Ojg77//e/Tk08+Sdu3b6eSkpJB9SUajVJBQUHq/w0bNvSxqC9YsIA2bNgweAIdIzZs2EB5eXk0a9as1LH58+eT1+uld99997iffbL6pVAoFEeDzJPdAIVCoTjV8dJLL1F2drbjWCKRcPz/0EMP0bx58+iuu+4iIqKJEyfSjh076IEHHqCrrrrqqN53880309/93d8d8Rpg7Nix9G//9m+0bNkyeuyxx8jv96eU84KCAiorKyMiokgkQh6PJ/U/EVFNTQ2tXLmSampqqKKigoiIvvGNb9Crr75KK1eupO9973tEZN2PHnvsMZoxY8ag+/GHP/yBfvWrX9HLL7+cOlZXV0elpaWO60pLS6m1tZU6OzspFAoN+vlHi7q6uj6blszMTCooKKC6urrjfna6fh3vcxUKhWKooZZ/hUKhOALgny5/nnzyScc1O3fupPPPP99x7Pzzz6fdu3f32SgcCdIy3R9+//vf07x582jUqFGUk5NDX/7yl6mxsZE6OjqO6l1bt26lRCJBEydOpOzs7NTPG2+8QR999FHqOr/fT9OnTx/0c7dt20aXX345rVixgi6++OKjatNQYNmyZY7+DBVqamocz8XmSKFQKD4tUMu/QqFQHAFZWVk0fvx4x7H9+/cf9XM8Hg8ZYxzH0gX0ZmVlDficvXv30uc//3m64YYb6N5776WCggJ666236Nprr6V4PE7hcHjQbWpra6OMjAzauHEjZWRkOM5JpTkUCpHH4xnUM3fs2EHz5s2j6667jr797W87zpWVlVF9fb3jWH19PeXm5g6p1f873/lOyq1JvruhocFxrLe3l5qamhxfQwZCRUWFI0sPXJr669dgn6tQKBR/Kajyr1AoFEOASZMm0dtvv+049vbbb9PEiRNTSnVxcTHV1tamzu/evfuoLfVENr4gmUzSgw8+SF6v/YD7zDPPHPE+v9/f5yvEzJkzKZFIUENDA1144YVH3RY3tm/fThdddBEtXbqU7r333j7n586d2ycF5po1a2ju3LnH/W6JkpKSPi4+c+fOpZaWFtq4cSOdc845RES0bt06SiaTNGfOnEE9NzMzs89GEM9eu3atwx3rRPRLoVAojheq/CsUCsUQ4NZbb6Vzzz2Xvvvd79KiRYtow4YN9Mgjj9Bjjz2Wuuaiiy6iRx55hObOnUuJRIJuv/128vl8R/2u8ePHU09PDz388MN02WWX0dtvv01PPPHEEe8bO3YstbW10dq1a2nGjBkUDodp4sSJtGTJEvqnf/onevDBB2nmzJl06NAhWrt2LU2fPp0WLlw46HZt27aNLrroIlqwYAHdcsstKX/3jIwMKi4uJiLrjvPII4/QbbfdRtdccw2tW7eOnnnmGUdcQFtbG+3Zsyf1f3V1NW3evJkKCgqoqqqKiGy+/pqaGjp48CARUSrAuaysrF9r+6RJk+iSSy6hr371q/TEE09QT08P3XjjjfSlL30pFe9AZL9cxONxampqolgslrL0n3XWWf32/aabbqLPfvaz9OCDD9LChQtp1apV9P7779NPf/rT1DXH0maFQqEYcpzsdEMKhUJxKuNYUn36fD5TVVVlHnjgAcc9Bw4cMBdffLHJysoyEyZMMKtXr06b6nMwKSAfeughU15ebkKhkFmwYIH5r//6L0d7mpubUyk+JZYtW2YKCwsdqT7j8bi5++67zdixY43P5zPl5eXmC1/4gtmyZYsxhlN9HgkrVqzok06UiMyYMWP60O6ss84yfr/fnHbaaX3SmaZLS0pEZunSpalrVq5cmfYa9Kk/NDY2msWLF5vs7GyTm5trrr766lSKVGDMmDFpn30kPPPMM2bixInG7/ebKVOmmJdfftlx/ljbrFAoFEMJjzEuB1SFQqFQKBQKhUIxLKHZfhQKhUKhUCgUihECVf4VCoVCoVAoFIoRAlX+FQqFQqFQKBSKEQJV/hUKhUKhUCgUihECVf4VCoVCoVAoFIoRAlX+FQqFQqFQKBSKEQJV/hUKhUKhUCgUihECVf4VCoVCoVAoFIoRAlX+FQqFQqFQKBSKEQJV/hUKhUKhUCgUihECVf4VCoVCoVAoFIoRgv8DlvyD+MeISn0AAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "data = dataset[\"counts\"].sum([-1, -2]).unsqueeze(-1).log1p()\n", + "print(data.shape)\n", + "plt.figure(figsize=(9, 3))\n", + "plt.plot(data, 'b.', alpha=0.1, markeredgewidth=0)\n", + "plt.title(\"Total hourly ridership over nine years\")\n", + "plt.ylabel(\"log(# rides)\")\n", + "plt.xlabel(\"Hour after 2011-01-01\")\n", + "plt.xlim(0, len(data));" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(9, 3))\n", + "plt.plot(data)\n", + "plt.title(\"Total hourly ridership over one month\")\n", + "plt.ylabel(\"log(# rides)\")\n", + "plt.xlabel(\"Hour after 2011-01-01\")\n", + "plt.xlim(len(data) - 24 * 30, len(data));" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## GaussianHMM\n", + "\n", + "Let's start by modeling hourly seasonality together with a local linear trend, where we model seasonality via regression and local linear trend via a [GaussianHMM](http://docs.pyro.ai/en/latest/distributions.html#gaussianhmm). This noise model includes a mean-reverting hidden state (an [Ornstein-Uhlenbeck process](https://en.wikipedia.org/wiki/Ornstein%E2%80%93Uhlenbeck_process)) plus Gaussian observation noise." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "T0 = 0 # beginning\n", + "T2 = data.size(-2) # end\n", + "T1 = T2 - 24 * 7 * 2 # train/test split\n", + "means = data[:T1 // (24 * 7) * 24 * 7].reshape(-1, 24 * 7).mean(0)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "class Model1(ForecastingModel):\n", + " def model(self, zero_data, covariates):\n", + " duration = zero_data.size(-2)\n", + "\n", + " # We'll hard-code the periodic part of this model, learning only the local model.\n", + " prediction = periodic_repeat(means, duration, dim=-1).unsqueeze(-1)\n", + "\n", + " # On top of this mean prediction, we'll learn a linear dynamical system.\n", + " # This requires specifying five pieces of data, on which we will put structured priors.\n", + " init_dist = dist.Normal(0, 10).expand([1]).to_event(1)\n", + "\n", + " timescale = pyro.sample(\"timescale\", dist.LogNormal(math.log(24), 1))\n", + " # Note timescale is a scalar but we need a 1x1 transition matrix (hidden_dim=1),\n", + " # thus we unsqueeze twice using [..., None, None].\n", + " trans_matrix = torch.exp(-1 / timescale)[..., None, None]\n", + " trans_scale = pyro.sample(\"trans_scale\", dist.LogNormal(-0.5 * math.log(24), 1))\n", + " trans_dist = dist.Normal(0, trans_scale.unsqueeze(-1)).to_event(1)\n", + "\n", + " # Note the obs_matrix has shape hidden_dim x obs_dim = 1 x 1.\n", + " obs_matrix = torch.tensor([[1.]])\n", + " obs_scale = pyro.sample(\"obs_scale\", dist.LogNormal(-2, 1))\n", + " obs_dist = dist.Normal(0, obs_scale.unsqueeze(-1)).to_event(1)\n", + "\n", + " noise_dist = dist.GaussianHMM(\n", + " init_dist, trans_matrix, trans_dist, obs_matrix, obs_dist, duration=duration)\n", + " self.predict(noise_dist, prediction)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can then train the model on many years of data. Note that because we are being variational about only time-global variables, and exactly integrating out time-local variables (via `GaussianHMM`), stochastic gradients are very low variance; this allows us to use a large learning rate and few steps." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO \t step 0 loss = 0.878717\n", + "INFO \t step 100 loss = 0.650493\n", + "INFO \t step 200 loss = 0.650542\n", + "INFO \t step 300 loss = 0.650579\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "timescale = 4.461\n", + "trans_scale = 0.4563\n", + "obs_scale = 0.0593\n", + "CPU times: user 26.3 s, sys: 1.47 s, total: 27.8 s\n", + "Wall time: 27.8 s\n" + ] + } + ], + "source": [ + "%%time\n", + "pyro.set_rng_seed(1)\n", + "pyro.clear_param_store()\n", + "covariates = torch.zeros(len(data), 0) # empty\n", + "forecaster = Forecaster(Model1(), data[:T1], covariates[:T1], learning_rate=0.1, num_steps=400)\n", + "for name, value in forecaster.guide.median().items():\n", + " if value.numel() == 1:\n", + " print(\"{} = {:0.4g}\".format(name, value.item()))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plotting forecasts of the next two weeks of data, we see mostly reasonable forecasts, but an anomaly on Christmas when rides were overpredicted. This is to be expected, as we have not modeled yearly seasonality or holidays." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "torch.Size([100, 336, 1]) torch.Size([336])\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAv8AAAE8CAYAAABXb96lAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzsnXd8VFX6/z+TNukVUklCrwIBFVfBxmJZviBYfmthbauLrq5rWV1xi6LrdwXXsuoX8ev6BduqLCpIl66iSA89hBLSeyaZTKZm5vz+eO65985kyp2CQTnv1yuvJHfuvXPuveec+znPeZ7n6BhjDAKBQCAQCAQCgeAnT1RvF0AgEAgEAoFAIBD8MAjxLxAIBAKBQCAQnCMI8S8QCAQCgUAgEJwjCPEvEAgEAoFAIBCcIwjxLxAIBAKBQCAQnCMI8S8QCAQCgUAgEJwjCPEvEAgEAoFAIBCcIwjxLxAIBAKBQCAQnCMI8S8QCAQCgUAgEJwjCPEvEAh6jbfeegs6nQ4NDQ1+97vlllvQp0+fH6hU2pkzZw7i4+N/kO/Kzc3F/fffH3A/rfc00litVuh0Ojz++OMB9z1TZTx58iTi4uKwZ8+eiJ5XcHawb98+xMbG4vjx471dFIHgR40Q/wLBOYBOp9P0s3XrVs3nNBqNmDt3LrZt23bmCi4QBMHcuXNx5ZVX4vzzz+/x2caNGzFz5kzk5OQgLi4OOTk5mDFjBlasWCHvU1ZW5tYeoqKikJWVhWnTpmHXrl09zjlnzhy3/ZOSkjBq1CjMnTsXJpPJbd/S0lJcf/31KCoqQnx8PPr164drrrkGb731VuRvRADa2trw61//Gn369EFycjKmTJmCAwcOaDr2lltu8dp3lJSUuO3ndDrx/PPPY/r06cjOzoZOp8O8efN8nveDDz5ASUkJ4uPjkZOTg9mzZ8NgMLjtM27cOEyePBnPPPNM8BctEAhkYnq7AAKB4MzzwQcfuP3//vvvY8OGDT22jxgxQvM5jUYjnn32WcTHx2PSpEkRKafAN5WVlYiOju7tYkSE3/zmN7jrrrsiOmtSW1uLjz/+GEuXLu3x2ZNPPokXX3wRw4cPxwMPPIDCwkK0tLRg1apVmDFjBj777DPccMMN8v533HEHrrrqKjidTpSVleHNN9/EFVdcgb1792LYsGE9zv/OO+9Ar9ejs7MTa9aswbPPPouvvvoKW7ZsAQBs3boVV111FQYNGoT77rsPOTk5qKysxPfff4833nhD04xOpOju7sY111yD8vJyPP7448jIyMD//M//yNfXv3//gOdITk7GwoUL3bZlZma6/e9wOPDXv/4V+fn5GDduHNavX+/zfK+++ioee+wxXHvttZg9ezYqKyvx+uuvY+/evdi+fTtiY2Plfe+//37cdNNNePHFF9GvX7/gLl4gEBBMIBCcczz44IMs3OZfXV3NALAXXngh5HMsXLiQAWD19fV+97v55ptZVlZWyN8TaUwmE2OMsSeffJLp9foz9j0ul4uZzeagjtF6T7XS1dWlaT+LxcIAsD/84Q8R+d5g+fvf/85SUlKYxWJx2/7BBx8wAGzWrFnM4XD0OG7FihVs3bp1jDHGjh49ygCwN954w22fZcuWMQDs0Ucfddv+5JNPMgCss7PTbfvUqVMZALZ3717GGGOTJ09m+fn5zGg09vj+xsbG4C82DN577z0GgK1cuVLeVldXx5KTk9ndd98d8HitbdHlcrHKykrGmP++oquriyUnJ7Orr77abfvSpUsZAPb222+7bbdYLCwlJYX993//d8AyCAQC7wi3H4FA0IOGhgbcdddd6Nu3L+Lj41FSUoKPPvpI/rysrAyFhYUAgKeeekqe+ufT+nv37sXtt9+OAQMGID4+Hnl5eZg9ezba29vDKldVVRWmTZuG5ORkZGdn409/+hNcLpfbPkajEb///e9RUFAAvV6P4cOH47XXXnPbh7t3fPLJJ27bud+62j2Bu3YcP34cv/zlL5Geno4pU6Z4Ld9FF12Eiy66qMd2xhj69++PGTNm+L2+3Nxc3HTTTVi1ahXGjx+P+Ph4vPfee/Jnnhbi/fv347LLLkNCQgKKioowf/58MMa8nnvlypW45JJLkJSUhLS0NMyYMQPHjh1z24fHVhw7dgzXXHMNkpOT8etf/xoAcPToUdltJj4+HoWFhZg1axa6urp6fNfSpUsxcuRI6PV6jB49Gps2bXL73JvPP7/21atXY8yYMYiPj8d5552HlStX+r1nnOXLl2PixIluswmMMTzzzDPIycnB22+/jZiYnpPd06dPxzXXXOP33JdeeikAiinQwuTJkwEAFRUV8nFjxoxBSkpKj32zs7M1nTNSfPrppygsLMS0adPkbXl5ebjh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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "samples = forecaster(data[:T1], covariates, num_samples=100)\n", + "samples.clamp_(min=0) # apply domain knowledge: the samples must be positive\n", + "p10, p50, p90 = quantile(samples, (0.1, 0.5, 0.9)).squeeze(-1)\n", + "crps = eval_crps(samples, data[T1:])\n", + "print(samples.shape, p10.shape)\n", + "\n", + "plt.figure(figsize=(9, 3))\n", + "plt.fill_between(torch.arange(T1, T2), p10, p90, color=\"red\", alpha=0.3)\n", + "plt.plot(torch.arange(T1, T2), p50, 'r-', label='forecast')\n", + "plt.plot(torch.arange(T1 - 24 * 7, T2),\n", + " data[T1 - 24 * 7: T2], 'k-', label='truth')\n", + "plt.title(\"Total hourly ridership (CRPS = {:0.3g})\".format(crps))\n", + "plt.ylabel(\"log(# rides)\")\n", + "plt.xlabel(\"Hour after 2011-01-01\")\n", + "plt.xlim(T1 - 24 * 7, T2)\n", + "plt.text(78732, 3.5, \"Christmas\", rotation=90, color=\"green\")\n", + "plt.legend(loc=\"best\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next let's change the model to use heteroskedastic observation noise, depending on the hour of week." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "class Model2(ForecastingModel):\n", + " def model(self, zero_data, covariates):\n", + " duration = zero_data.size(-2)\n", + " prediction = periodic_repeat(means, duration, dim=-1).unsqueeze(-1)\n", + "\n", + " init_dist = dist.Normal(0, 10).expand([1]).to_event(1)\n", + " timescale = pyro.sample(\"timescale\", dist.LogNormal(math.log(24), 1))\n", + " trans_matrix = torch.exp(-1 / timescale)[..., None, None]\n", + " trans_scale = pyro.sample(\"trans_scale\", dist.LogNormal(-0.5 * math.log(24), 1))\n", + " trans_dist = dist.Normal(0, trans_scale.unsqueeze(-1)).to_event(1)\n", + " obs_matrix = torch.tensor([[1.]])\n", + " \n", + " # To model heteroskedastic observation noise, we'll sample obs_scale inside a plate,\n", + " # then repeat to full duration. This is the only change from Model1.\n", + " with pyro.plate(\"hour_of_week\", 24 * 7, dim=-1):\n", + " obs_scale = pyro.sample(\"obs_scale\", dist.LogNormal(-2, 1))\n", + " obs_scale = periodic_repeat(obs_scale, duration, dim=-1)\n", + " \n", + " obs_dist = dist.Normal(0, obs_scale.unsqueeze(-1)).to_event(1)\n", + " noise_dist = dist.GaussianHMM(\n", + " init_dist, trans_matrix, trans_dist, obs_matrix, obs_dist, duration=duration)\n", + " self.predict(noise_dist, prediction)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO \t step 0 loss = 0.954783\n", + "INFO \t step 100 loss = -0.0344435\n", + "INFO \t step 200 loss = -0.0373581\n", + "INFO \t step 300 loss = -0.0376129\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "timescale = 61.41\n", + "trans_scale = 0.1082\n", + "CPU times: user 28.1 s, sys: 1.34 s, total: 29.5 s\n", + "Wall time: 29.6 s\n" + ] + } + ], + "source": [ + "%%time\n", + "pyro.set_rng_seed(1)\n", + "pyro.clear_param_store()\n", + "covariates = torch.zeros(len(data), 0) # empty\n", + "forecaster = Forecaster(Model2(), data[:T1], covariates[:T1], learning_rate=0.1, num_steps=400)\n", + "for name, value in forecaster.guide.median().items():\n", + " if value.numel() == 1:\n", + " print(\"{} = {:0.4g}\".format(name, value.item()))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note this gives us a much longer timescale and thereby more accurate short-term predictions:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "samples = forecaster(data[:T1], covariates, num_samples=100)\n", + "samples.clamp_(min=0) # apply domain knowledge: the samples must be positive\n", + "p10, p50, p90 = quantile(samples, (0.1, 0.5, 0.9)).squeeze(-1)\n", + "crps = eval_crps(samples, data[T1:])\n", + "\n", + "plt.figure(figsize=(9, 3))\n", + "plt.fill_between(torch.arange(T1, T2), p10, p90, color=\"red\", alpha=0.3)\n", + "plt.plot(torch.arange(T1, T2), p50, 'r-', label='forecast')\n", + "plt.plot(torch.arange(T1 - 24 * 7, T2),\n", + " data[T1 - 24 * 7: T2], 'k-', label='truth')\n", + "plt.title(\"Total hourly ridership (CRPS = {:0.3g})\".format(crps))\n", + "plt.ylabel(\"log(# rides)\")\n", + "plt.xlabel(\"Hour after 2011-01-01\")\n", + "plt.xlim(T1 - 24 * 7, T2)\n", + "plt.text(78732, 3.5, \"Christmas\", rotation=90, color=\"green\")\n", + "plt.legend(loc=\"best\");" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(9, 3))\n", + "plt.fill_between(torch.arange(T1, T2), p10, p90, color=\"red\", alpha=0.3)\n", + "plt.plot(torch.arange(T1, T2), p50, 'r-', label='forecast')\n", + "plt.plot(torch.arange(T1 - 24 * 7, T2),\n", + " data[T1 - 24 * 7: T2], 'k-', label='truth')\n", + "plt.title(\"Total hourly ridership (CRPS = {:0.3g})\".format(crps))\n", + "plt.ylabel(\"log(# rides)\")\n", + "plt.xlabel(\"Hour after 2011-01-01\")\n", + "plt.xlim(T1 - 24 * 2, T1 + 24 * 4)\n", + "plt.legend(loc=\"best\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Heavy-tailed modeling with LinearHMM\n", + "\n", + "Next let's change our model to a linear-[Stable](http://docs.pyro.ai/en/latest/distributions.html#pyro.distributions.Stable) dynamical system, exhibiting learnable heavy tailed behavior in both the process noise and observation noise. As we've already seen in the [univariate tutorial](http://pyro.ai/examples/forecasting_i.html), this will require special handling of stable distributions by [poutine.reparam()](http://docs.pyro.ai/en/latest/poutine.html#pyro.poutine.handlers.reparam). For state space models, we combine [LinearHMMReparam](http://docs.pyro.ai/en/latest/infer.reparam.html#pyro.infer.reparam.hmm.LinearHMMReparam) with other reparameterizers like [StableReparam](http://docs.pyro.ai/en/latest/infer.reparam.html#pyro.infer.reparam.stable.StableReparam) and [SymmetricStableReparam](http://docs.pyro.ai/en/latest/infer.reparam.html#pyro.infer.reparam.stable.SymmetricStableReparam). All reparameterizers preserve behavior of the generative model, and only serve to enable inference via auxiliary variable methods." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "class Model3(ForecastingModel):\n", + " def model(self, zero_data, covariates):\n", + " duration = zero_data.size(-2)\n", + " prediction = periodic_repeat(means, duration, dim=-1).unsqueeze(-1)\n", + "\n", + " # First sample the Gaussian-like parameters as in previous models.\n", + " init_dist = dist.Normal(0, 10).expand([1]).to_event(1)\n", + " timescale = pyro.sample(\"timescale\", dist.LogNormal(math.log(24), 1))\n", + " trans_matrix = torch.exp(-1 / timescale)[..., None, None]\n", + " trans_scale = pyro.sample(\"trans_scale\", dist.LogNormal(-0.5 * math.log(24), 1))\n", + " obs_matrix = torch.tensor([[1.]])\n", + " with pyro.plate(\"hour_of_week\", 24 * 7, dim=-1):\n", + " obs_scale = pyro.sample(\"obs_scale\", dist.LogNormal(-2, 1))\n", + " obs_scale = periodic_repeat(obs_scale, duration, dim=-1)\n", + " \n", + " # In addition to the Gaussian parameters, we will learn a global stability\n", + " # parameter to determine tail weights, and an observation skew parameter.\n", + " stability = pyro.sample(\"stability\", dist.Uniform(1, 2).expand([1]).to_event(1))\n", + " skew = pyro.sample(\"skew\", dist.Uniform(-1, 1).expand([1]).to_event(1))\n", + " \n", + " # Next we construct stable distributions and a linear-stable HMM distribution.\n", + " trans_dist = dist.Stable(stability, 0, trans_scale.unsqueeze(-1)).to_event(1)\n", + " obs_dist = dist.Stable(stability, skew, obs_scale.unsqueeze(-1)).to_event(1)\n", + " noise_dist = dist.LinearHMM(\n", + " init_dist, trans_matrix, trans_dist, obs_matrix, obs_dist, duration=duration)\n", + " \n", + " # Finally we use a reparameterizer to enable inference.\n", + " rep = LinearHMMReparam(None, # init_dist is already Gaussian.\n", + " SymmetricStableReparam(), # trans_dist is symmetric.\n", + " StableReparam()) # obs_dist is asymmetric.\n", + " with poutine.reparam(config={\"residual\": rep}):\n", + " self.predict(noise_dist, prediction)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that since this model introduces auxiliary variables that are learned by variational inference, gradients are higher variance and we need to train for longer." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO \t step 0 loss = 42.9188\n", + "INFO \t step 100 loss = 0.243742\n", + "INFO \t step 200 loss = 0.112491\n", + "INFO \t step 300 loss = 0.0320302\n", + "INFO \t step 400 loss = -0.0424252\n", + "INFO \t step 500 loss = -0.0763611\n", + "INFO \t step 600 loss = -0.108585\n", + "INFO \t step 700 loss = -0.129246\n", + "INFO \t step 800 loss = -0.143037\n", + "INFO \t step 900 loss = -0.173499\n", + "INFO \t step 1000 loss = -0.172329\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "timescale = 11.29\n", + "trans_scale = 0.04193\n", + "stability = 1.68\n", + "skew = -0.0001891\n", + "CPU times: user 2min 57s, sys: 21.9 s, total: 3min 19s\n", + "Wall time: 3min 19s\n" + ] + } + ], + "source": [ + "%%time\n", + "pyro.set_rng_seed(1)\n", + "pyro.clear_param_store()\n", + "covariates = torch.zeros(len(data), 0) # empty\n", + "forecaster = Forecaster(Model3(), data[:T1], covariates[:T1], learning_rate=0.1)\n", + "for name, value in forecaster.guide.median().items():\n", + " if value.numel() == 1:\n", + " print(\"{} = {:0.4g}\".format(name, value.item()))" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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r72WhQsXYjabPdqO2Wymtra2w/8vWrQIs9nMgw8+aCwLCAjg/vvv5/jx43bjMl577TUuvPBCJk6ciMVicXpOSVJSUhgwYADffvutR+1UKBTtUeJfoVDYUVdXx4UXXshXX33F9OnTefnllwkPD2fatGm8//77ACQnJ/PWW28BMHXqVD777DM+++wzJk2aBMCKFSsoLCzk7rvvZtasWdxwww18+umnXH311V63q6WlhQkTJpCcnMwrr7zCmDFjePHFFw1xDEKQTJw4kbfffptJkybx2muv0bt3bx555BGefvppH44KTJkyBYvFwksvvcT06dOdrnPbbbexbds2srOz7ZZv2rSJvLw8br31Vrf72b9/P7fffjsTJ07krbfeYvDgwU7Xy8/P59JLL+XQoUP86U9/4re//S3vv/++Uw/5Bx98wNVXX01sbCwzZ87k6aefZteuXYwdO5bCwkK7dZubm7niiitITU3ltddeY/LkyTQ2NnLFFVewc+dOHnnkEd555x3uvvtuDh061M7b/v333/Poo49y6623MnPmTGpqarj22muprq52+9kPHDjArbfeytVXX80//vEPLBYL1157LRs2bHD5vqamJnbv3s2IESPslmdmZnL8+HGuu+46unbt6nb/HZGbmwtATEyMR+vLICE2NhaAtLQ0tm7dSlZWllf7b2hooKKiwu2PJ8H17t27Oe+889otHzlyJNXV1Rw/ftztNqqqqoiMjCQqKorY2FgeeeQRGhoa2u2ne/fu9O7du91+5P8BKioq2Lt3L+eddx5PPPEEkZGRREREkJGRwaJFi5zu/9xzz2Xz5s1u26lQKDrgNPc8KBSK04Ar289LL72kAdr8+fONZc3NzdqIESO06OhowwbiyvbjzKry0UcfaYC2bds2Y1lnbD+A9vLLLxvLLBaLNnDgQG3s2LHGsq+++koDtH/+8592602aNEnr0qWLduLECU3TrPaOL7/80m4/0rpi+5mktWP69Ont2uVo+6moqNCCgoK0v/71r3br3XvvvVq3bt3aWVIcSUhI0ABt3bp1Tv933333GX/ff//9mslk0vbs2WMsKyoq0sLDw+2OaVVVlRYREaE9/PDDdtvLz89vt1we5xkzZtit+8MPP7Szijgij11oaKiWl5dnLN+6dasGaP/617+MZc6+d/nZba0flZWVWlxcnDZmzJgO96tpmpaZmdluH5qmaXPnztUAbfbs2S7fL5HnxUsvvaSVl5drJSUl2rp167Thw4c7/fzy3MjNzdXKy8u148ePa++8844WFBSkpaSkaE1NTZqmadqSJUu0gIAALTAwUBs7dqz25JNPamvWrHFqQ3KG3I+7n/79+7vdVpcuXbQHH3yw3fIFCxZ0eO7Z8thjj2lPP/209vXXX2tffPGFNm3aNA3QLr30Us1sNhvrXX755drAgQPbvf/kyZN259iWLVs0QIuNjdWSk5O1999/X5szZ442YsQILSAgQFu7dm27bTz77LMaoFVXV7v9vAqFoj1qwK9CobBj+fLlpKWl2Q2ADA4O5uGHH+bOO+9ky5YtHdpeJLYD8RobG6mvr2f06NGAsASdf/75XrXtvvvuM16bTCbGjRtnZwtZvnw5oaGhPPDAA3brPfbYYyxZsoRVq1Zxzz33eLVv2212RGxsLBMnTuTzzz9nxowZgOixmDdvHtdff71HA1zPPvtsLr74YrfrLV++nIsvvphhw4YZy5KSkpg6dSoffvihsWzFihXU1dVx8803U1FRYSwPDQ3l3HPPNQal2uL4WaOjowFYuXIl48ePd/k5Jk6cyFlnnWX8PXLkSEJCQjzKKKenpzNx4kTj75iYGKZNm8abb75JVVVVh5n3kydPGuvbUlNTA+DUbuOKp556iqeeesr4OyoqilmzZtlZZWxxHCQ7bNgwPvnkE0JCQgC46qqr2LRpEy+99BKrV69m8+bNzJw5k8TERD788EN+/etfu2zPPffc4/aaAwgPD3f5/9bWVsxms9EuW+R32tjY6HIbr776qt3fN998M7179+b5559n8eLFxkDexsZGj/Yje45OnjzJ7t27japBV111FWlpafz973/n0ksvtduG/J4rKiqIiopy2V6FQtEeJf4VCoUdeXl59OvXD5PJZLdcVgLKy8tzu43y8nJmzJjBvHnz7Kp1AB7ZP5wRHR3d7kEfExNjV/M7Ly+P1NTUdhaPzrS9I9LT0z1a7/bbb+e6665j27ZtjBw5khUrVlBVVcVtt93mt/1YLBby8/OdetUdq9EcPXoUgAsuuMDpthw95127dm23TFbJeeedd/joo4+46KKLuPrqq7n11lvbCWtb4S/xtDZ7RkZGu2X9+vUDxHfnznajOYx3kOeLK2+6M377298adqfvvvuO2bNndziWAsR4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tv39IcUwd9IkAE6dP994GcFUKsUUZzP+utPga79ddoFXX61UNzFI/ObsthsAMyXFATUuTdVPD0I8Drvswl7OfPnBBx+QzWaJxWLsvvvuxmLYy1nXZx44uIpB241EAkaNgv32k50n0ulKsu+bb1bmCQHRZNL48TSkUpRKJd5x+lHMHjGiMl+YiieRYM+JE0knk+6cYRLNzc2MdtwDsGNwu1i5rM6W7cP777/P5MmTefLJJznkkEPc1y+//HJWrFjB008/3ednstksWVX2isqx5NSpU2ltbWXkyJFs2bKFbDYrWsu9p6eHd999190ERJBHT08P69atY86cOdKhDG989FFlEZM8FWtpgdbWynH++PEyMXR3Q2cnSB4fFwp0vvYaGzZuZOa0aTB6dOWfQWzatInnfv97KBaJx+MctM8+vcl9zc0VAmYA5Y0bWfv888xasICk1Jhoa6s8H/X1lbKrEshmoauL4siRPP3003R1VYo7Tps2zdx6VirR8+67vNvTw2zJ+XrjxsrzKWlR3LIF2tsrH8fjMh2HOzp4d80a1r75JgCpZJJD9t+fdCZTSUA2EU8uR+vatbR2dLDbQQeJnIC8v349Lz35JBPmzGHBggXG3retrY1Ro0a5HLdWWE3+c7kcDQ0N/PznP2fZsmXu66effjpbt27lvvvu2+bvGOyFiRAhQoQIESJEiBDBVgyW41pt+0mn0xxwwAE88sgj7mulUolHHnnEcxIQIUKECBEiRIgQIUKEbcP6Dr+XXHIJp59+OgsXLuSggw7i5ptvprOzkzPOOEM6tAgRIkSIECFChAgRdihYT/7/9m//lk2bNnHVVVexYcMG9t13Xx588ME+ScARIkSIECFChAgRIkToH1Z7/ocCkec/QoQIESJEiBAhws6GndLzHyFChAgRIkSIECFChKFDRP4jRIgQIUKECBEiRBgmiMh/hAgRIkSIECFChAjDBNYn/G4vVEpDW1ubcCQRIkSIECFChAgRIgwNFLcdaPruTk/+253ud1OdduARIkSIECFChAgRIuwsaG9vZ9QAOp7v9NV+SqUS77//Pk1NTcRisSH7vW1tbUydOpV33303qiIUoSqicRKhVkRjJUItiMZJhFoRjZWdH+Vymfb2dnbddVfi8dqd/Du98h+Px5kyZUpov3/kyJHRQxVhm4jGSYRaEY2VCLUgGicRakU0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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "samples = forecaster(data[:T1], covariates, num_samples=100)\n", + "samples.clamp_(min=0) # apply domain knowledge: the samples must be positive\n", + "p10, p50, p90 = quantile(samples, (0.1, 0.5, 0.9)).squeeze(-1)\n", + "crps = eval_crps(samples, data[T1:])\n", + "\n", + "plt.figure(figsize=(9, 3))\n", + "plt.fill_between(torch.arange(T1, T2), p10, p90, color=\"red\", alpha=0.3)\n", + "plt.plot(torch.arange(T1, T2), p50, 'r-', label='forecast')\n", + "plt.plot(torch.arange(T1 - 24 * 7, T2),\n", + " data[T1 - 24 * 7: T2], 'k-', label='truth')\n", + "plt.title(\"Total hourly ridership (CRPS = {:0.3g})\".format(crps))\n", + "plt.ylabel(\"log(# rides)\")\n", + "plt.xlabel(\"Hour after 2011-01-01\")\n", + "plt.xlim(T1 - 24 * 7, T2)\n", + "plt.text(78732, 3.5, \"Christmas\", rotation=90, color=\"green\")\n", + "plt.legend(loc=\"best\");" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(9, 3))\n", + "plt.fill_between(torch.arange(T1, T2), p10, p90, color=\"red\", alpha=0.3)\n", + "plt.plot(torch.arange(T1, T2), p50, 'r-', label='forecast')\n", + "plt.plot(torch.arange(T1 - 24 * 7, T2),\n", + " data[T1 - 24 * 7: T2], 'k-', label='truth')\n", + "plt.title(\"Total hourly ridership (CRPS = {:0.3g})\".format(crps))\n", + "plt.ylabel(\"log(# rides)\")\n", + "plt.xlabel(\"Hour after 2011-01-01\")\n", + "plt.xlim(T1 - 24 * 2, T1 + 24 * 4)\n", + "plt.legend(loc=\"best\");" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/forecasting_iii.ipynb b/pyro/source/tutorial/source/forecasting_iii.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..bbec2dca4bff33bd5bc4d1573b8b2fee0a8efffd --- /dev/null +++ b/pyro/source/tutorial/source/forecasting_iii.ipynb @@ -0,0 +1,669 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Forecasting III: hierarchical models\n", + "\n", + "This tutorial covers hierarchical multivariate time series modeling with the [pyro.contrib.forecast](http://docs.pyro.ai/en/latest/contrib.forecast.html) module. This tutorial assumes the reader is already familiar with [SVI](http://pyro.ai/examples/svi_part_ii.html), [tensor shapes](http://pyro.ai/examples/tensor_shapes.html), and [univariate forecasting](http://pyro.ai/examples/forecasting_i.html).\n", + "\n", + "See also:\n", + "\n", + "- [Forecasting I: univariate, heavy tailed](http://pyro.ai/examples/forecasting_i.html)\n", + "- [Forecasting II: state space models](http://pyro.ai/examples/forecasting_ii.html)\n", + "\n", + "#### Summary\n", + "\n", + "- Hierarchial forecasting works like any other hierarchial modeling in Pyro.\n", + "- To create hierarchical models in Pyro, use the [plate](http://docs.pyro.ai/en/latest/primitives.html#pyro.plate) context manager.\n", + "- To subsample data during training, pass a `create_plates()` callback to the [Forecaster](http://docs.pyro.ai/en/latest/contrib.forecast.html#pyro.contrib.forecast.forecaster.Forecaster).\n", + "- You can subsample time series, but you can't subsample the `time_plate`." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import math\n", + "import torch\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "import pyro.poutine as poutine\n", + "from pyro.contrib.examples.bart import load_bart_od\n", + "from pyro.contrib.forecast import ForecastingModel, Forecaster, eval_crps\n", + "from pyro.infer.reparam import LocScaleReparam, SymmetricStableReparam\n", + "from pyro.ops.tensor_utils import periodic_repeat\n", + "from pyro.ops.stats import quantile\n", + "import matplotlib.pyplot as plt\n", + "\n", + "%matplotlib inline\n", + "assert pyro.__version__.startswith('1.9.1')\n", + "pyro.set_rng_seed(20200305)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's again look at the [BART train](https://www.bart.gov/about/reports/ridership) ridership dataset:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dict_keys(['stations', 'start_date', 'counts'])\n", + "torch.Size([78888, 50, 50])\n", + "12TH 16TH 19TH 24TH ANTC ASHB BALB BAYF BERY CAST CIVC COLM COLS CONC DALY DBRK DELN DUBL EMBR FRMT FTVL GLEN HAYW LAFY LAKE MCAR MLBR MLPT MONT NBRK NCON OAKL ORIN PCTR PHIL PITT PLZA POWL RICH ROCK SANL SBRN SFIA SHAY SSAN UCTY WARM WCRK WDUB WOAK\n" + ] + } + ], + "source": [ + "dataset = load_bart_od()\n", + "print(dataset.keys())\n", + "print(dataset[\"counts\"].shape)\n", + "print(\" \".join(dataset[\"stations\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Multivariate time series\n", + "\n", + "Let's start by modeling arrivals to Embarcadero station, from each of the other 50 stations. Note this is nine years of hourly data, so the dataset is quite long." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "torch.Size([78888, 50])\n" + ] + }, + { + "data": { + "image/png": "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xw/ZPt4UFRcXD3refffdhz/96U948cUXe1yEDjroIAAUL3DHHXfg+OOPx1VXXYUNGzbg4Ycfxocffoh3330XVqu15zrD6TPA4N/N0Ucfjeeee67n7/b2dnz55Zcwm81Ys2ZNT7vWrFmD8vJyTJ06FQDw5Zdf4uijj0ZBQQFuueUWWK1WLFu2DMceeyz+9a9/YcaMGQPe/55+ZlNTE771rW/1BN+Wl5fjtddew2WXXQav14vrr78eABCLxXDaaafhnXfewfe//31MnToVn3/+Oe69915s3LgRL7300oBt++lPf4pf/vKXWLZsGa644goAwGOPPYZrr70WZ511Fq677joEAgF89tln+O9//4vzzz9/wGsJgjBMNEEQMpInn3xSAzDoa/r06T3nf/rppxoA7fLLL4+7zk033aQB0P75z3/2HAOgLVmypM9njhs3Trv44ov7tGHWrFlaJBLpt33btm3TNE3TotGoNmbMGO2cc86JO+93v/udZjKZtK1btw56v93d3X2OLV26VDOZTNqOHTt6jl188cUaAO1HP/pRn/OPOeYYDYD2yCOP9PveMccc0/P3smXLNADa559/HnfetGnTtG9/+9s9fwcCAS0ajcads23bNs1ut2s///nP444B0J588klN0zTN7XZrALRf//rXg953fyxatEjrb/p+6aWXNADaXXfdFXf8rLPO0kwmk7Z58+ZBr8vPrr/X3Llze8576623NADaqlWrtL/+9a+ayWTSdu7cqWmapt18883ahAkTNE2jZ6rvg5pGfai/68+cOVNrbW2NO3fJkiUaAG3Dhg1aS0uLtn37du2JJ57QnE6nVl5ernV1dQ35rPgaLS0tPceam5s1m82mnXDCCXHf3YMPPqgB0J544omeY4P1mf4Y6LtZtWqVBkD76quvNE3TtFdeeUWz2+3aaaedFjcmDjroIO273/1uz9/z58/XbDabtmXLlp5j9fX1Wn5+vjZ79uxB27Knn3nZZZdpo0aN6vN9nHvuuVphYWHPWHzmmWc0s9msrVmzJu68Rx55RAOgvfvuuz3HAGiLFi3SNE3TFi9erJnNZu2pp56K+7/TTz+9T38RBCFxiHuPIGQ4f/jDH7B69eo+L9biMa+++ioA4MYbb4w7zgGVf/vb3/a4DVdcccWQrhxmsxkLFy7EK6+8gs7Ozp7jf/7zn3HUUUcNqeF1Op09v3d1daG1tRVHHXUUNE3DJ5980ud81jz3xm6349JLLx30swDgjDPOgMViwfPPP99z7IsvvsBXX32Fc845J+56ZjNNpdFoFG1tbXC5XNh///2xdu3aQe/HZrPh7bff7tfvfU949dVXkZOTg2uvvTbu+OLFi6FpGl577bUhr+FwOPrtT3fffXe/559wwgkoKSnBihUroGkaVqxYgfPOO2/Qz5gxY0bPdf/617/iF7/4Bb788kucdtppfdy1AGD//fdHeXk5amtr8b3vfQ+TJk3Ca6+9tsd+9W+++SZCoRCuv/76nu8OoH5cUFDQZywMt88MBrsk/fvf/wZA2vVvfvOb+M53voM1a9YAADweD7744ouec6PRKP7+979j/vz5mDBhQs+1Ro0ahfPPPx/vvPMOvF5vQj9T0zS88MILOPXUU6FpGlpbW3tec+fORUdHR0+/XrVqFaZOnYopU6bEnfftb38bAPDWW2/FtUfTNPzwhz/E/fffj2effRYXX3xx3PtFRUXYvXs3Pvzww5E+XkEQhoG49whChnPEEUfg8MMP73O8uLg4zk1jx44dMJvNfTKYVFVVoaioCDt27NjjNgzHJQMALrroItxzzz148cUXcdFFF2HDhg34+OOP8cgjjwz5vzt37sT//d//4ZVXXukjJHd0dMT9bbFYBowtGD169LCCdsvKyjBnzhysXLkSd955JwBy7bFYLHF+0pwZ5qGHHsK2bdsQjUZ73istLR3w+na7Hffccw8WL16MyspKfOtb38Ipp5yCiy66qMe/faTs2LED1dXVyM/PjzvObhvD+Y5zcnJw/PHHD/szrVYrzj77bCxfvhxHHHEEdu3aNaQrRllZWdxnnHzyydh///1x1lln4fHHH8c111wTd/4LL7yAgoICtLS04Pe//z22bdsWtwkcKfwceseR2Gw2TJgwoc9zGm6fGQwObF6zZg2uvPJKrFmzBscddxxmz56Na665Blu3bsX69esRi8V6BPCWlhZ0d3f3G+8ydepUxGIx7Nq1C9OnT0/oZ3o8Hjz66KMDpjfl4OhNmzZh/fr1KC8vH/Q85k9/+hN8Ph8efvjhfjeGt956K958800cccQRmDRpEk444QScf/75mDlz5gBPVRCEkSCafkHYx9AHfY4UvUCrZ7gC2LRp03DYYYf15HZ/9tlnYbPZsGDBgiE/9zvf+Q7+9re/4dZbb8VLL72E1atX9xS6isVicefrte972lYAOPfcc7Fx40Z8+umnAICVK1dizpw5cZlqfvnLX+LGG2/E7Nmz8eyzz+KNN97A6tWrMX369D7t6s3111+PjRs3YunSpXA4HPjZz36GqVOn9mu5MDLnn38+Pv30U9x+++04+OCDMW3atBFfY86cOQCUVlrP7Nmzcfzxx+O8887D6tWr4XQ6sXDhwiGfb6LYmw2GnlmzZmHNmjXw+/34+OOPcfTRR+OAAw5AUVER1qxZgzVr1sDlcuHQQw9NyOftyWfyM73gggv6tfisXr26RwiPxWI48MADBzzv6quvjmvLzJkzUVlZiQcffLBPTQaANjIbNmzAihUrMGvWLLzwwguYNWvWkPE+giAMD9H0C8I+wrhx4xCLxbBp06YezS9AQXsejwfjxo3rOVZcXNwni0koFEJDQ8Net+Oiiy7CjTfeiIaGBixfvhwnn3zykAGZn3/+OTZu3Iinn34aF110Uc/x1atX73V7BmP+/Pm48sore1x8Nm7ciNtuuy3unL/85S847rjj8Mc//jHuuMfjidscDMTEiROxePFiLF68GJs2bcIhhxyC3/72twMWvQIG3riNGzcOb775Jjo7O+O0/V9//XXP+8lg1qxZGDt2LN5++23cc889e3SNSCQCAPD5fIOe53K5sGTJElx66aVYuXIlzj333BF/Fj+HDRs2xLnNhEIhbNu2bUSWjt4Mtqk++uij8eSTT2LFihWIRqM46qijYDabewTz9evX46ijjupxlSsvL0dubi42bNjQ51pff/01zGYzampqBm3Pnnxmfn4+otHokM9h4sSJWLduHebMmTMsZcKkSZPwq1/9CsceeyxOPPFE/OMf/+hjlcrLy8M555yDc845B6FQCGeccQZ+8Ytf4Lbbbhuw7oMgCMNDNP2CsI9w0kknAaCMJnp+97vfASAXC2bixIl9NK6PPvrogJr+kXDeeefBZDLhuuuuw9atW4eVE54FEk2XdlLTNNx///173Z7BKCoqwty5c7Fy5UqsWLECNpsN8+fP79M2rVc6zFWrVqGurm7Qa3d3dyMQCMQdmzhxIvLz84dMd8g1B3pvzE466SREo9GedKLMvffeC5PJhHnz5g163T3FZDLh97//PZYsWYILL7xwj67x//7f/wMAHHzwwUOeu3DhQowZM2aPNxjHH388bDYbfv/738d9d3/84x/R0dERNxZGykDfDaB87O+55x4cdNBBKCws7Dn+j3/8Ax999FHPOQD1rRNOOAEvv/xyXBrXpqYmLF++HLNmzeqTUSkRn3nmmWfihRdewBdffNHnei0tLT2/L1iwAHV1dXjsscf6nOf3+/vN5HXQQQfh1Vdfxfr163HqqafGxXC0tbXFnWuz2TBt2jRomtZvNjJBEEaGaPoFYR/h4IMPxsUXX4xHH30UHo8HxxxzDD744AM8/fTTmD9/Po477riecy+//HL84Ac/wJlnnonvfOc7WLduHd54441haa6Hory8HCeeeCJWrVqFoqKiYQlYU6ZMwcSJE3HTTTehrq4OBQUFeOGFFxIWADsY55xzDi644AI89NBDmDt3bp8iT6eccgp+/vOf49JLL8VRRx2Fzz//HH/+85/jNMj9sXHjRsyZMwcLFizAtGnTYLFY8OKLL6KpqWlI7fVhhx0GALj22msxd+5c5OTk4Nxzz8Wpp56K4447Dj/5yU+wfft2HHzwwfj73/+Ol19+Gddffz0mTpw45P1GIpEBrQzf/e53Byxydvrpp+P0008f8voA5YDnzwiFQli3bh2WLVuGsrKyPv78/WG1WnHdddfh5ptvxuuvv44TTzxxWJ/LlJeX47bbbsMdd9yBE088Eaeddho2bNiAhx56CN/85jeHXZysPwb6bgDSdFdVVWHDhg1x9zl79mzceuutABAngAOUy3716tWYNWsWrr76algsFixbtgzBYBC/+tWvhmzPnnzm3XffjbfeegszZszAFVdcgWnTpqG9vR1r167Fm2++2eOac+GFF2LlypX4wQ9+gLfeegszZ85ENBrF119/jZUrV+KNN97oN97oW9/6Fl5++WWcdNJJOOuss/DSSy/BarXihBNOQFVVVY8b0Pr16/Hggw/i5JNP7mMREARhD0hT1iBBEPYSTon54Ycf9vt+f+kSw+Gwdscdd2jjx4/XrFarVlNTo912221aIBCIOy8ajWq33nqrVlZWpuXm5mpz587VNm/ePGDKzv7a0Dtlp56VK1dqALTvf//7w77fr776Sjv++OM1l8ullZWVaVdccYW2bt26uDSYmkZpJ/Py8ob9TPTv6VN2Ml6vV3M6nRoA7dlnn+3zfiAQ0BYvXqyNGjVKczqd2syZM7X33nuvz/V6p+xsbW3VFi1a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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "T, O, D = dataset[\"counts\"].shape\n", + "data = dataset[\"counts\"][:, :, dataset[\"stations\"].index(\"EMBR\")].log1p()\n", + "print(data.shape)\n", + "plt.figure(figsize=(9, 3))\n", + "plt.plot(data[-24 * 7 * 2:], 'b.', alpha=0.1, markeredgewidth=0)\n", + "plt.title(\"Hourly arrivals to EMBR for two weeks\")\n", + "plt.ylabel(\"log1p(# rides)\")\n", + "plt.xlabel(\"Hour after 2011-01-01\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's try a two-component model with series-local level + series-local seasonality." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "class Model1(ForecastingModel):\n", + " def model(self, zero_data, covariates):\n", + " duration, data_dim = zero_data.shape\n", + "\n", + " # Let's model each time series as a Levy stable process, and share process parameters\n", + " # across time series. To do that in Pyro, we'll declare the shared random variables\n", + " # outside of the \"origin\" plate:\n", + " drift_stability = pyro.sample(\"drift_stability\", dist.Uniform(1, 2))\n", + " drift_scale = pyro.sample(\"drift_scale\", dist.LogNormal(-20, 5))\n", + " with pyro.plate(\"origin\", data_dim, dim=-2):\n", + " # Now inside of the origin plate we sample drift and seasonal components.\n", + " # All the time series inside the \"origin\" plate are independent,\n", + " # given the drift parameters above.\n", + " with self.time_plate:\n", + " # We combine two different reparameterizers: the inner SymmetricStableReparam\n", + " # is needed for the Stable site, and the outer LocScaleReparam is optional but\n", + " # appears to improve inference.\n", + " with poutine.reparam(config={\"drift\": LocScaleReparam()}):\n", + " with poutine.reparam(config={\"drift\": SymmetricStableReparam()}):\n", + " drift = pyro.sample(\"drift\",\n", + " dist.Stable(drift_stability, 0, drift_scale))\n", + "\n", + " with pyro.plate(\"hour_of_week\", 24 * 7, dim=-1):\n", + " seasonal = pyro.sample(\"seasonal\", dist.Normal(0, 5))\n", + " \n", + " # Now outside of the time plate we can perform time-dependent operations like\n", + " # integrating over time. This allows us to create a motion with slow drift.\n", + " seasonal = periodic_repeat(seasonal, duration, dim=-1)\n", + " motion = drift.cumsum(dim=-1) # A Levy stable motion to model shocks.\n", + " prediction = motion + seasonal\n", + "\n", + " # Next we do some reshaping. Pyro's forecasting framework assumes all data is\n", + " # multivariate of shape (duration, data_dim), but the above code uses an \"origins\"\n", + " # plate that is left of the time_plate. Our prediction starts off with shape\n", + " assert prediction.shape[-2:] == (data_dim, duration)\n", + " # We need to swap those dimensions but keep the -2 dimension intact, in case Pyro\n", + " # adds sample dimensions to the left of that.\n", + " prediction = prediction.unsqueeze(-1).transpose(-1, -3)\n", + " assert prediction.shape[-3:] == (1, duration, data_dim), prediction.shape\n", + "\n", + " # Finally we can construct a noise distribution.\n", + " # We will share parameters across all time series.\n", + " obs_scale = pyro.sample(\"obs_scale\", dist.LogNormal(-5, 5))\n", + " noise_dist = dist.Normal(0, obs_scale.unsqueeze(-1))\n", + " self.predict(noise_dist, prediction)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's split data into train and test. This is a bigger dataset, so we'll train on only 90 days of data." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "T2 = data.size(-2) # end\n", + "T1 = T2 - 24 * 7 * 2 # train/test split\n", + "T0 = T1 - 24 * 90 # beginning: train on 90 days of data\n", + "covariates = torch.zeros(data.size(-2), 0) # empty covariates" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO \t step 0 loss = 705188\n", + "INFO \t step 50 loss = 7.7227\n", + "INFO \t step 100 loss = 3.44737\n", + "INFO \t step 150 loss = 1.98431\n", + "INFO \t step 200 loss = 1.48724\n", + "INFO \t step 250 loss = 1.25238\n", + "INFO \t step 300 loss = 1.18827\n", + "INFO \t step 350 loss = 1.12238\n", + "INFO \t step 400 loss = 1.10252\n", + "INFO \t step 450 loss = 1.07717\n", + "INFO \t step 500 loss = 1.05626\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "drift_stability = 1.997\n", + "drift_scale = 3.863e-08\n", + "obs_scale = 0.4636\n", + "CPU times: user 28.1 s, sys: 4.29 s, total: 32.4 s\n", + "Wall time: 31.9 s\n" + ] + } + ], + "source": [ + "%%time\n", + "pyro.set_rng_seed(1)\n", + "pyro.clear_param_store()\n", + "covariates = torch.zeros(len(data), 0) # empty\n", + "forecaster = Forecaster(Model1(), data[T0:T1], covariates[T0:T1],\n", + " learning_rate=0.1, num_steps=501, log_every=50)\n", + "for name, value in forecaster.guide.median().items():\n", + " if value.numel() == 1:\n", + " print(\"{} = {:0.4g}\".format(name, value.item()))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "torch.Size([100, 1, 336, 50]) torch.Size([336, 50])\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "samples = forecaster(data[T0:T1], covariates[T0:T2], num_samples=100)\n", + "samples.clamp_(min=0) # apply domain knowledge: the samples must be positive\n", + "p10, p50, p90 = quantile(samples[:, 0], (0.1, 0.5, 0.9)).squeeze(-1)\n", + "crps = eval_crps(samples, data[T1:T2])\n", + "print(samples.shape, p10.shape)\n", + "\n", + "fig, axes = plt.subplots(8, 1, figsize=(9, 10), sharex=True)\n", + "plt.subplots_adjust(hspace=0)\n", + "axes[0].set_title(\"log1p(# hourly arrivals to EMBR) (CRPS = {:0.3g})\".format(crps))\n", + "for i, ax in enumerate(axes):\n", + " ax.axvline(78736, color=\"green\", lw=20, alpha=0.2)\n", + " ax.fill_between(torch.arange(T1, T2), p10[:, i], p90[:, i], color=\"red\", alpha=0.3)\n", + " ax.plot(torch.arange(T1, T2), p50[:, i], 'r-', lw=1, label='forecast')\n", + " ax.plot(torch.arange(T1 - 24 * 7, T2),\n", + " data[T1 - 24 * 7: T2, i], 'k-', lw=1, label='truth')\n", + " ax.set_ylabel(\"from {}\".format(dataset[\"stations\"][i]))\n", + "ax.set_xlabel(\"Hour after 2011-01-01\")\n", + "ax.text(78732, -3, \"Christmas\", color=\"green\", horizontalalignment=\"center\")\n", + "ax.set_xlim(T1 - 24 * 7, T2)\n", + "axes[0].legend(loc=\"best\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note the poor predictions on the Christmas holiday. This is to be expected since we only trained on 90 days of data and have not modeled holidays. To accurately forecast holiday behavior we would need to train on multiple years of data, include yearly seasonality components, and ideally include holiday features in covariates." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Deeper hierarchical models\n", + "\n", + "Next let's consider a larger hierarchy: all 50 x 50 = 2500 pairs of stations. " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "torch.Size([78888, 50, 50]) torch.Size([50, 50, 78888, 1])\n" + ] + } + ], + "source": [ + "data = dataset[\"counts\"].permute(1, 2, 0).unsqueeze(-1).log1p().contiguous()\n", + "print(dataset[\"counts\"].shape, data.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This model will have three levels of hierarchy: origin, destination, and time, each modeled as a [plate](http://docs.pyro.ai/en/latest/primitives.html#pyro.plate). We can create sample sites in many combinations of plate contexts, allowing many different ways to share statistical strength." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "class Model2(ForecastingModel):\n", + " def model(self, zero_data, covariates):\n", + " num_stations, num_stations, duration, one = zero_data.shape\n", + " \n", + " # We construct plates once so we can reuse them later. We ensure they don't collide by\n", + " # specifying different dim args for each: -3, -2, -1. Note the time_plate is dim=-1.\n", + " origin_plate = pyro.plate(\"origin\", num_stations, dim=-3)\n", + " destin_plate = pyro.plate(\"destin\", num_stations, dim=-2)\n", + " hour_of_week_plate = pyro.plate(\"hour_of_week\", 24 * 7, dim=-1)\n", + "\n", + " # Let's model the time-dependent part with only O(num_stations * duration) many\n", + " # parameters, rather than the full possible O(num_stations ** 2 * duration) data size.\n", + " drift_stability = pyro.sample(\"drift_stability\", dist.Uniform(1, 2))\n", + " drift_scale = pyro.sample(\"drift_scale\", dist.LogNormal(-20, 5))\n", + " with origin_plate:\n", + " with hour_of_week_plate:\n", + " origin_seasonal = pyro.sample(\"origin_seasonal\", dist.Normal(0, 5))\n", + " with destin_plate:\n", + " with hour_of_week_plate:\n", + " destin_seasonal = pyro.sample(\"destin_seasonal\", dist.Normal(0, 5))\n", + " with self.time_plate:\n", + " with poutine.reparam(config={\"drift\": LocScaleReparam()}):\n", + " with poutine.reparam(config={\"drift\": SymmetricStableReparam()}):\n", + " drift = pyro.sample(\"drift\",\n", + " dist.Stable(drift_stability, 0, drift_scale))\n", + " # Additionally we can model a static pairwise station->station affinity, which e.g.\n", + " # can compensate for the fact that people tend not to travel from a station to itself.\n", + " with origin_plate, destin_plate:\n", + " pairwise = pyro.sample(\"pairwise\", dist.Normal(0, 1))\n", + "\n", + " # Outside of the time plate we can now form the prediction.\n", + " seasonal = origin_seasonal + destin_seasonal # Note this broadcasts.\n", + " seasonal = periodic_repeat(seasonal, duration, dim=-1)\n", + " motion = drift.cumsum(dim=-1) # A Levy stable motion to model shocks.\n", + " prediction = motion + seasonal + pairwise\n", + "\n", + " # We will decompose the noise scale parameter into\n", + " # an origin-local and a destination-local component.\n", + " with origin_plate:\n", + " origin_scale = pyro.sample(\"origin_scale\", dist.LogNormal(-5, 5))\n", + " with destin_plate:\n", + " destin_scale = pyro.sample(\"destin_scale\", dist.LogNormal(-5, 5))\n", + " scale = origin_scale + destin_scale\n", + "\n", + " # At this point our prediction and scale have shape (50, 50, duration) and (50, 50, 1)\n", + " # respectively, but we want them to have shape (50, 50, duration, 1) to satisfy the\n", + " # Forecaster requirements.\n", + " scale = scale.unsqueeze(-1)\n", + " prediction = prediction.unsqueeze(-1)\n", + "\n", + " # Finally we construct a noise distribution and call the .predict() method.\n", + " # Note that predict must be called inside the origin and destination plates.\n", + " noise_dist = dist.Normal(0, scale)\n", + " with origin_plate, destin_plate:\n", + " self.predict(noise_dist, prediction)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO \t step 0 loss = 4.83016e+10\n", + "INFO \t step 50 loss = 133310\n", + "INFO \t step 100 loss = 2.26326\n", + "INFO \t step 150 loss = 0.879302\n", + "INFO \t step 200 loss = 0.948082\n", + "INFO \t step 250 loss = 0.897158\n", + "INFO \t step 300 loss = 1.43375\n", + "INFO \t step 350 loss = 0.700097\n", + "INFO \t step 400 loss = 0.693259\n", + "INFO \t step 450 loss = 0.691785\n", + "INFO \t step 500 loss = 0.695014\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "drift_stability = 1.593\n", + "drift_scale = 6.594e-07\n", + "CPU times: user 2min 9s, sys: 54.6 s, total: 3min 3s\n", + "Wall time: 3min 4s\n" + ] + } + ], + "source": [ + "%%time\n", + "pyro.set_rng_seed(1)\n", + "pyro.clear_param_store()\n", + "covariates = torch.zeros(data.size(-2), 0) # empty\n", + "forecaster = Forecaster(Model2(), data[..., T0:T1, :], covariates[T0:T1],\n", + " learning_rate=0.1, learning_rate_decay=1, num_steps=501, log_every=50)\n", + "for name, value in forecaster.guide.median().items():\n", + " if value.numel() == 1:\n", + " print(\"{} = {:0.4g}\".format(name, value.item()))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can forecast forward entire joint samples of every origin-destination-time triple. The output of `forecast(...)` will have shape `(num_samples, num_stations, num_stations, duration, 1)`. The trailing 1 just means that we are modeling this as a batch of univariate time series (although with hierarchical coupling)." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "torch.Size([100, 50, 50, 336, 1]) torch.Size([50, 50, 336])\n", + "CPU times: user 21.5 s, sys: 7.95 s, total: 29.4 s\n", + "Wall time: 32.4 s\n" + ] + } + ], + "source": [ + "%%time\n", + "samples = forecaster(data[..., T0:T1, :], covariates[T0:T2], num_samples=100)\n", + "samples.clamp_(min=0) # apply domain knowledge: the samples must be positive\n", + "p10, p50, p90 = quantile(samples[..., 0], (0.1, 0.5, 0.9))\n", + "crps = eval_crps(samples, data[..., T1:T2, :])\n", + "print(samples.shape, p10.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can examine forecasts for any station-station pair. Let's look at Antioch, one of the newer stations with least volume." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAvcAAANXCAYAAACxFHDhAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzsnXl4FFXW/z+dTjqdTjr7HiDsi4IoII4oi2xR2VFUVAQHHfVVELdxwR8oOuogKKCjo7y+oqiI44YOskUEERQRAUFlCxBIWJJO0un0vt3fH9XdELIiSTXq/TxPP9BVt6pOdWr53nPPOVcjhBBIJBKJRCKRSCSS3z0R4TZAIpFIJBKJRCKRNA1S3EskEolEIpFIJH8QpLiXSCQSiUQikUj+IEhxL5FIJBKJRCKR/EGQ4l4ikUgkEolEIvmDIMW9RCKRSCQSiUTyB0GKe4lEIpFIJBKJ5A+CFPcSiUQikUgkEskfBCnuJRKJRCKRSCSSPwhS3Eskp7Bo0SI0Gg2HDh0Ktym/iSNHjqDX69m4cWOz7H/SpEnExcU1y77PhieeeAKNRhNuMxpN69atmTRpUrPtf926dWg0GtatW9dsx/gzsnPnTiIjI9m9e/cZbffMM89w/vnnIyeE/2Py4IMPctlll4XbDIkkhBT3EkkYePXVVxk3bhytWrVCo9E0mdCbNWsWl1xySb0vmvnz55OVlRX6PmrUqGYVmpLfN++99x7z5s1r1mP07t0bjUbDq6++Wuv6YKdbr9dTXFxcY/2AAQPo2rUrcLKj19BnwIAB1faxdu1axowZQ2ZmJjqdjvT0dEaOHMmnn34aatOtWzfy8vKYMWNGo8/NbDbz/PPP88gjj9TogDqdTubOnUvv3r1JSEhAr9fTqVMnpkyZwr59+0LtHn/88Wq263Q62rRpw7Rp06isrKxxzBYtWlRrn56eTr9+/fjss8+qtfP7/SxatIjevXuTlJSE0WikY8eOTJw4ke+//77R59hUbNiwgcsuuwyDwUBmZibTpk3Dbrc3uN3hw4eZOXNm6DzS0tIYOHAga9eurdH28ssvr/OaiImJCbXLz8+v9/r55z//GWp733338cMPP/DFF180zQ8hkZwlkeE2QCL5M/LPf/6TqqoqevfuzbFjx5pkn6Wlpbz11lu89dZb9bbbvHkzf/nLX0Lfv/32W2bNmtUkNkgax549e4iI+H34Vt577z127drFtGnTmmX/+/btY8uWLbRu3Zp3332Xu+66q862LpeL5557jpdeeqnONmPHjqV9+/ah71arlbvuuosxY8YwduzY0PKMjIzQ/6dPn84zzzxDx44dufPOO2nVqhUmk4nly5czZswYli5dynXXXQfAnXfeyahRoygsLCQ3N7fB8/vf//1fAK6//vpqy0tLSxk6dCjbt29nxIgR3HTTTcTGxrJnzx6WLFnCG2+8UUPYvvbaaxgMBqxWK/n5+cyfP5/t27fXOkLTs2fP0N+sqKiI119/nVGjRrFw4UJuu+02AP7nf/6H1157jTFjxnDzzTej1WrZs2cPK1asoEOHDvTu3bvB82sqtm7dypAhQ+jatSsvvPAChw8f5oUXXqCgoIDPP/+83m0//vhj5syZw5gxY5g0aRJut5u33nqLQYMG8fbbbzNhwoRQ2xkzZlBSUlJte4vFwt13383QoUNDy7p27crixYtrHOutt94iPz+/WtucnByGDx/OnDlzuPrqq3/rTyCRNB1CIpGEePPNNwUgDh482KzHOXTokPD7/UIIIWJjY8XEiRPPep8vvPCCiImJEVVVVfW2a9eunXjuueeEEELs379fAOLHH39s1DEmTpwoYmNjz9rWpsJqtQohhJg5c6Y4Vx5nNput1uV+v1/Y7XZVbPjqq68EIL766quz3tewYcNEbm7uWe+nLmbMmCHS09PFRx99JDQaTa33XvC+vPDCC0V0dLQoLi6utr5///7i/PPPr3X/paWlAhAzZ86sdf2SJUsEIK6//nrhdrtrrF++fLlYvnx56LvT6RQJCQniySefbNT5nXfeeWLSpEk1lufl5QmtVis++eSTGuscDod44IEHQt+nT58uAFFRUVGt3TXXXCMAsXXr1mrLc3JyxKhRo6otKyoqEjExMeK8884TQghRXFwsNBqNuOuuu2oc3+/3i5KSkkadX1MxZMgQkZOTU+359eqrrwpAfPnll/Vuu3PnTmEymaotczgcomPHjo26doPX19KlSxts26ZNG9GlS5cay99//32h0WjEoUOHGtyHRNLc/D5cRxJJmHnllVc4//zziY6OJjs7m7vvvhuz2Vyj3b/+9S/atm1LTEwMvXv3ZsOGDQwYMKBGCEBubm6jYsSDMe4HDhwgLy+P2NhYsrOzmTVrVo343U8//ZRLLrmkRky83+/HZDJhMpkoKCigoKCATp06YTKZ+PLLL4mOjiYrKwuTyYTL5WrU71FcXMzo0aOJi4sjLS2NBx98EJ/PV62NzWbjgQceoGXLlkRHR9OpUyfmzJlTze5Dhw6h0WhYtGhRjWNoNBqeeOKJ0PdguMUvv/zCjTfeSFJSEpdffnmt9vXv35/u3bvXuq5Tp07k5eXVe37Lli1j2LBhZGdnEx0dTbt27XjqqadqnGMwHGTr1q3069cPg8HAY489Bihx9cOHD2fVqlX06tWLmJgYXnvttdC6YCjUDz/8gEajqXXEZdWqVWg0Gv773/8CUFhYyP/8z//QqVMnYmJiSElJYdy4cY3KEdm3bx/XXHMNmZmZ6PV6WrRowQ033FBrWMep57d8+XIKCwtD4QitW7cOrS8pKWHy5MlkZGSg1+vp3r17gyNHp/Pee+9x7bXXMnz4cBISEnjvvffqbPvYY4/h8/l47rnnzugY9TFjxgzS0tJ44403iIqKqrH+6quvruaNjY6Opl+/fixbtqzBfe/bt49ffvmFwYMHV1u+ceNGVq1axd/+9jdGjx5dYzu9Xs+cOXMa3H/fvn0BKCgoaLBtTk4OnTp14uDBgwAcOHAAIUStIXwajYa0tLQG99lUVFRUsHbtWm655ZZqz69bb70Vg8HABx98UO/2Xbt2JSUlpdoyvV7PlVdeSWFhIQ6Ho97t33vvPYxGIyNGjKi33aZNmzh48CA33XRTjXVDhgxBCFEj9EkiCQdS3EskDfDEE09w9913k52dzdy5c7nmmmt47bXXGDp0KB6PJ9Tu1Vdf5Z577qFFixbMnj2bvn37Mnr0aIqKis7q+D6fjyuvvJKMjAxmz55Nz549mTlzJjNnzgy18Xg8bNmyhR49etTY/vDhw6SlpZGWlhYKVxgzZgxpaWnccccduFwusrKySEtLY8mSJY2yJy8vj5SUFObMmUP//v2ZO3cur7/+eqiNEIKRI0fy4osvcuWVV/LCCy/QqVMnHnroIe6///6z+j3GjRuH3W7nmWee4fbbb6+1zYQJE/jpp5/YtWtXteVbtmxh79693HzzzfUeY9GiRcTFxXH//fczf/58evbsyYwZM3jkkUdqtC0rK+Oqq67iwgsvZN68eVxxxRWhdXv27GH8+PEMGTKE+fPnc+GFF9bYvlevXrRt27ZWAbN06VKSkpJCnZEtW7awadMmbrjhBhYsWMCdd97Jl19+yYABA+qNTXa73eTl5fHdd98xZcoU/vWvf/G3v/2NAwcO1NpJDTJ9+nQuvPBCUlNTWbx4MYsXLw7F3zscDgYMGMDixYu56aabeP7550lISGDSpEnMnz+/7h/3FDZv3sz+/fsZP348Op2OsWPH8u6779bZvk2bNtxyyy0sXLiQo0ePNuoY9fHrr7+yb98+xowZQ2xsbKO369mzJzt27MBqtdbbbtOmTQA17sugADw1XOS3EOzUJSUlNdjW7XZTVFQUEsHBkKIPPvigQfFbFxUVFSHHQX2fhvb/008/4fP56NWrV7Xl0dHRXHDBBWzbtu032Xf8+HHi4uLQ6/X1tlm7di1jx46tFnNfG8Fr88Ybb6yxLjk5mdatWzdbMQOJ5IwI67iBRHKOcXpYTklJidDpdGLo0KHC5/OF2r388ssCEP/3f/8nhBDC5XKJlJQUcfHFFwuPxxNqt2jRIgGI/v3713nM+sJyJk6cKAAxZcqU0DK/3y+GDRsmdDqdKC0tFUKcDK956aWXauzD4XCINWvWiDVr1oiRI0eK7t27h75nZ2eLyZMnh74fPXq03t8naM+sWbOqLb/oootEz549Q98//fRTAYinn366Wrtrr71WaDQasX//fiGEEAcPHhSAePPNN2sci9NCKYKhN+PHj6/R9vSwHLPZLPR6vXj44YertZs6daqIjY0NhfPURW3hM3fccYcwGAzC6XSGlvXv318A4t///neN9rm5uQIQK1eurHXdqX/zRx99VERFRYny8vLQMpfLJRITE8Vf//rXeu369ttvBSDefvvt0LLTw3K2bdsmAPGf//yn3vOujbrCcubNmycA8c4774SWud1ucemll4q4uDhhsVga3Pc999wjWrZsGQpRW716tQDEtm3bqrUL3pdbtmwRBQUFIjIyUkydOjW0/reG5Xz00Ud13jf18fbbb9caDnM6jzzyiACEw+GotnzEiBECaDCELkgwLKegoECUlpaKgwcPiv/93/8Ver1eZGZm1th/Tk6OuOqqq0RpaakoLS0V27dvF+PGjROAuO+++0LtbrzxRgGIpKQkMXbsWDF37lyxe/fuRv4KynGABj9PPfVUvfsJhkZt2rSpxroxY8aIFi1aNNqmIHv27BHR0dHi1ltvrbfdiy++KACxevXqett5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T2307NkTqF1sn8pFF11EVlZWg58XX3yx3v1069aNiIgIfvjhh2rLXS4XO3bsqDURvTbuv//+UKhRfR72IO+99x4dO3askch7Op9++ik2m63BTsDBgwdDI1cSSTiR4l4iqYfBgwej0+lYsGBBteH1N954g8rKSoYNGwYoFU9SUlJYuHAhXq831O7dd9+t1Zt+prz88suh/wshePnll4mKimLQoEGAEuvcq1evGi/H4DkMHjyY0tJSBg4cyODBg7n00kspKipi3LhxofWnh/6cDVdffTU+n6+a3QAvvvgiGo2Gq666ClDCE1JTU/n666+rtXvllVeaxI4JEyZQUVHBHXfcgdVqbTD2F06OTJz693a73U1mU1106dKFbt26sXTpUpYuXUpWVhb9+vWrYdvpYR4vvfRSg95Ti8VS7bqEk4KqofKnsbGxtYb8XH311Rw/fpylS5eGlnm9Xl566SXi4uLq9ZoGxfTdd9/NtddeW+MzfPhwPvroo3pta9euHTfffDOvvfYax48fr/cc6iJYbrW0tJQ77rijxm8EsHLlyhozj27dupULLrigwZCaoFf+9Puyb9++DB48mNdee63WCZpcLhcPPfRQg/bfcsstZGVl/abSoEePHuXXX3+t9dhr165Fq9XSrl27evfRVDH3ycnJDBw4kMWLF1erQLRo0SIcDke10cZg3kswzyjIs88+y7x585gxYwZ33313g+e/ZcsW9u3b16BgB6UTEBcXx6hRo+psU15ezqFDh+jTp0+D+5NImhsZliOR1ENaWhqPPvooTz75JFdeeSUjR45kz549vPLKK1x88cWhl5ZOp+OJJ55gypQpDBw4kOuuu45Dhw6xaNEi2rVrV8P7+fnnn7Njxw5ASYz86aefePrppwEYOXIkF1xwQaitXq9n5cqVTJw4kUsuuYQVK1awfPlyHnvssWohN6NGjWL69OlYLJZQLHGQYKnM4Etv8+bN+P3+MwoJOBNGjBjBFVdcwfTp0zl06BDdu3dn9erVLFu2jGnTplUTDbfddhvPPfcct912G7169eLrr78OjUycLRdddBFdu3blP//5D126dKm1VOjp9OnTh6SkJCZOnMjUqVPRaDQsXry41tjppub6669nxowZ6PV6Jk+eXCPmfPjw4SxevJiEhATOO+88vv32W/Lz82vU+D6dtWvXcs899zBu3Dg6duyI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htNZFe/9XGw5auWeXr+XX355UYocJpNJ3HzzzQiHwxgaGsK3v/3t2fusWrnnOAjyOF1IuT/nnHOU13iVrzyRTIKT700oGFS27dWEp7+/H9/73vey2qNW7tMGA2554AGMGY2EoKtiTWYNqA0GCbl2UNW8goWWeo6xWkr6igVewD3fvQcxNgaEZ4jPnsJkJPny334beOXl8hROuni325UdOjXUc2goFMIdd9xBrDiyz737nXfAyIUSBYOhLOVeSYUpEzm71YqEIEBU2YLEiQnF7kH7xOjoKAYHB/Gtr30NUjiMv0xP46o77sCnNm8Gu3dvVRbf1UY6ncYtt9xSdipPlmVx0003FZxzKiH3v/zlL/H6668Xff2VV17BrzZsIPfX5ULP4CC+/73v5Z2zqHIvxzMZXS54fT5EpqeJZarceAg6f5nNGcsYy+Loa6/hB5/6VNF5QBRFfO5zn8NVV12FpzZvJn3bZALGxxc3W04ujh8/jm9961tobW2tWVsOwzAwGAxZyr06oDapUlgcDkfW530+H4xGY9nk/sc//nFWXuRf//rXhNCgfHL/d3/3d/iHf/gH/PGPf8RLL72EV155Bffccw96e3vLapM6oJa2g57n2muvxbp167Bx40bs2bMHL774Iv7rv/4Lo6OjZZ1DC2pZuacLJkmSyl48VROVkvt0Oo14PD7reyVJwq233lpxHvKf/exneP7553HfffcpNRm04oknnsAPfvCDTNVJqu5ZrfhVdzd++vjjRcnpiy+8gD+89BLe29mJj198MQwGAyH3NhswOQlOJldaSegPfvAD/P655zLKfTwOTExkBTapj7VlyxZs3boVV111FS7s6oLNbEYsmcQtjz6Kp157jVgoJiYIAZmY0H5RKLl3OtHKMBicnibbzTn2llzlHgBmYjGYTSYkUyliFaBK7RwLxxQK2CxXuVcHoT7yyCO455575tSmSnDixAncc889eP311/HCCy/gBz/4wezjjiBkAmp5XlHkaV+Ix+Pw+/249dZb8dnPflZ5jZcJvNlkwoxKIAhNThLLliRlXde//OUvuO2227J26tSe+0mex51PPIHthw4BbjfxbqsUe/o7j0QlkySY1uPJqJuVjLXqPmS1ATPFg1F7j/Zi46834q3X3yK7V9SSQ1FfT3z7kWh5aTXpOEx3xopkkgKA4eFhfOtb3yJC4/g4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bZL7+vpc6/zVN9+MILdOnH8+6nI57Hn2Way+7rpJYw5gmogVixCDQUjxOOqCQTzx2mtYfc01OJBI4CMNDa5xqEkSsrkcVq1aheHhYVeq8LCmkaqeSEBTFDy+bRtWd3fjAABtwwZozJp82U03UaBnpfsiyyV9wjHKPtuaO3hfpVKoCwSgCAIwNoawqkILBKiSdbGIz6ZS0B5+mFJsTgVe6fjee4H77qNTsEAA+M530D8xgfceeywp6eecA+2NN7DFNLHa2966OvLpi6KdY//qq6eer8v1wfg4Xf+WWwBBQDSZJBvl6CiUQgFxTypMvpZ+8IMfJDtXImFnwBFFSkv8619P3YZAAPjCFwAAsVQKAUGgucF5KshOnOvYZqescs9+12uaNH8fQcacmpL70dFRFAoFK7c5R0dHB3axssFO3H777bjllltKfn/ppZe6lN3p4EMf+hAAChA+66yzpvWe733ve9g0VYXFI8CiRYtmlFLxnnvuwdq1a7Fs2TLcfvvt064cLEkSLrnkEsiyjG9+85tIO47+wuEwzjnnHOTzedx///1TBk9//etft04dAOCqq65CoVCYVb75Sy+9FADws5/9DKeeeioWL16M2267DePj4/jEJz5hve76669Ha2sr6uvrsYYFHra1teGOO+7AgLOIxSwhyzLOP/98CIKAb3zjG8jlcvj0pz+NpUuX4sc//jHew3x0kiTh7rvvtgq8zRcURcF5550HQRBw7733opkd/61duxZ33303zjjjDACkBPzoRz9C90zyBk8Dzc3NM65h8fGPfxxD/f0o/P73duDRJFjS0oK6xYvxpfe/Hw3hMOoUBScff3xpWfNly6xg089//vPWvQBogn7ggQcQec97cO3AAJq4V31wkFShqRAMWhk4nDjvuOMAAD+8/HIsb21FS1cXfv697+GSSy6p+FHf+ad/wtMPPIAVTU0QV6zA9Z/7HNpYQGhFyDKpkx7rwaccaeJuWr8esVSKfKutrbj88svLbqR/fu+9OGvlSiL3ySRuvewyPLN5MylyzoA8T0FCJRjEecuW0cLW0IC7IxHs3LOHjuGdXlkHLmT348dXXIETHCct3/7whyHx6yxdii++73022e/vn17gXCAALF+Oj551FoSGBtzzsY9hVyLh6qPPMFGA472rVuGbH/oQ0o55KSxJOGfZMuR37MD9w8OoW7IE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hz/8IWeZvK8ce+htP0kkEqSyspI89dRTOctcsGABEUWRNDQ0mNsef/xxEgqFzL5zyy23kLFjx9rOu/jii8n06dMPyX1xHHr09fvDEI/HyYABA8jdd99tbuNjyrGH3vaTAwcOEABk2bJl5v729nYCgCxatIgQwscUjgyOCVmOFfF4HM899xz+8z//E4IgAABOOeUUvPDCC2hubkY6ncbzzz+PaDSK008/3Txv//79uOaaa/D3v/8dqqpmlbtixQp885vfhCzL5rbp06dj69ataGlpMY+ZNm2a7bzp06djxYoVh+FOOfqLvvYVALj//vtRXFyM448/Hg888IBt2ZP3lWMLfeknn376Kfbu3QtRFHH88cdj4MCBOPfcc7Fhwwaz3BUrVmD8+PEoKyszt02fPh3t7e3YuHGjeQzvJ18f9GdMYXj99dfR1NSEH/7wh+Y2PqYcW+hLPykuLsbIkSPxt7/9DV1dXUgmk3jyySdRWlqKyZMnA+BjCkcGx1xas9deew2tra248sorzW0vvvgiLr74YhQXF8Pr9UJVVbz66quora0FABBCcOWVV+JHP/oRpkyZgl27dmWV29DQgKFDh9q2sReooaEBRUVFaGhosL1U7JiGhoZDe5MchwR96SsAcP3112PSpEmIRCJYvnw5brvtNtTX1+Ohhx4CwPvKsYa+9JMdO3YAAO6880489NBDqK6uxu9//3ucfvrpqKurQyQSydkHAJj9INcx7e3t0HUdiqIcrtvm6AP6OqZY8fTTT2P69OkYNGiQuY2PKccW+tJPBEHAu+++i5kzZ6KgoACiKKK0tBQLFy5EUVERgNzjBdvX3TF8TDm2cMwZ908//TTOPfdcVFRUmNtuv/12tLa24t1330VJSQlee+01zJo1Cx988AHGjx+PRx55BB0dHbjtttuOYs05jjT60lcA4MYbbzSPP+644yDLMmbPno377rsPPp/viN8Hx+FFX/pJOp0GAPzyl7/ERRddBACYO3cuBg0ahJdeegmzZ88+KvfCcXjR1zGF4csvv8Tbb7+NF1988UhXneMIoi/9hBCCa6+9FqWlpfjggw+gKAqeeuopnH/++Vi1ahUGDhx4FO+I46uGY8q43717N959913Mnz/f3LZ9+3Y8+uij2LBhA8aOHQsAmDBhAj744APMmTMHTzzxBN5//32sWLEiyzCbMmUKLrvs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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, axes = plt.subplots(8, 1, figsize=(9, 10), sharex=True)\n", + "plt.subplots_adjust(hspace=0)\n", + "j = dataset[\"stations\"].index(\"ANTC\")\n", + "axes[0].set_title(\"log1p(# hourly arrivals to ANTC) (CRPS = {:0.3g})\".format(crps))\n", + "for i, ax in enumerate(axes):\n", + " ax.axvline(78736, color=\"green\", lw=20, alpha=0.2)\n", + " ax.fill_between(torch.arange(T1, T2), p10[i, j], p90[i, j], color=\"red\", alpha=0.3)\n", + " ax.plot(torch.arange(T1, T2), p50[i, j], 'r-', lw=1, label='forecast')\n", + " ax.plot(torch.arange(T1 - 24 * 7, T2),\n", + " data[i, j, T1 - 24 * 7: T2, 0], 'k-', lw=1, label='truth')\n", + " ax.set_ylabel(\"from {}\".format(dataset[\"stations\"][i]))\n", + "ax.set_xlabel(\"Hour after 2011-01-01\")\n", + "ax.text(78732, -0.8, \"Christmas\", color=\"green\", horizontalalignment=\"center\")\n", + "ax.set_xlim(T1 - 24 * 7, T2)\n", + "axes[0].legend(loc=\"best\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that the hierarchy allows the model to make accurate predictions even for very low-volume (station,station) pairs. For example almost nobody rides from Ashby station to Antioch." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Subsampling\n", + "\n", + "It can be expensive to train models of high-dimensional time series data. However since we're using stochastic variational inference for training, we can subsample some of the data plates, trading gradient variance for speed. In our BART example we can subsample both origins and destinations (but we can never subsample the `time_plate`).\n", + "\n", + "To enable subampling in a [Forecaster](http://docs.pyro.ai/en/latest/contrib.forecast.html#module-pyro.contrib.forecast) (or more generally in any Pyro [AutoDelta](http://docs.pyro.ai/en/latest/infer.autoguide.html#autodelta) or [Autonormal](http://docs.pyro.ai/en/latest/infer.autoguide.html#autonormal) guide), we need to define a callback fuction that creates subsampled plates in the guide. This callback will be named `create_plates()`. It will input the same `(zero_data, covariates)` args as the model (or more generally the same `(*args, **kwargs)`), and will return a plate or iterable of plates.\n", + "\n", + "Let's define a `create_plates()` callback that subsamples both the \"origin\" plate and the \"destin\" plate to 20% of their data, resulting in only 4% of data being touched each iteration." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "def create_plates(zero_data, covariates):\n", + " num_origins, num_destins, duration, one = zero_data.shape\n", + " return [pyro.plate(\"origin\", num_origins, subsample_size=10, dim=-3),\n", + " pyro.plate(\"destin\", num_destins, subsample_size=10, dim=-2)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can train as usual. However since gradient estimates will have higher variance, we run for more iterations. We'll use the same learning rate and let the Adam optimizer adjust per-parameter learning rates." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO \t step 0 loss = 58519\n", + "INFO \t step 50 loss = 3.61814e+09\n", + "INFO \t step 100 loss = 965.526\n", + "INFO \t step 150 loss = 9000.55\n", + "INFO \t step 200 loss = 1003.25\n", + "INFO \t step 250 loss = 31.0245\n", + "INFO \t step 300 loss = 1.53046\n", + "INFO \t step 350 loss = 1.22161\n", + "INFO \t step 400 loss = 0.991503\n", + "INFO \t step 450 loss = 0.79876\n", + "INFO \t step 500 loss = 0.83428\n", + "INFO \t step 550 loss = 0.804639\n", + "INFO \t step 600 loss = 0.686404\n", + "INFO \t step 650 loss = 0.803543\n", + "INFO \t step 700 loss = 0.783584\n", + "INFO \t step 750 loss = 0.618151\n", + "INFO \t step 800 loss = 0.772374\n", + "INFO \t step 850 loss = 0.684863\n", + "INFO \t step 900 loss = 0.77464\n", + "INFO \t step 950 loss = 0.862912\n", + "INFO \t step 1000 loss = 0.74513\n", + "INFO \t step 1050 loss = 0.756743\n", + "INFO \t step 1100 loss = 0.772813\n", + "INFO \t step 1150 loss = 0.68757\n", + "INFO \t step 1200 loss = 0.778757\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "drift_stability = 1.502\n", + "drift_scale = 4.265e-07\n", + "CPU times: user 46.2 s, sys: 7.11 s, total: 53.3 s\n", + "Wall time: 52.9 s\n" + ] + } + ], + "source": [ + "%%time\n", + "pyro.set_rng_seed(1)\n", + "pyro.clear_param_store()\n", + "covariates = torch.zeros(data.size(-2), 0) # empty\n", + "forecaster = Forecaster(Model2(), data[..., T0:T1, :], covariates[T0:T1],\n", + " create_plates=create_plates,\n", + " learning_rate=0.1, num_steps=1201, log_every=50)\n", + "for name, value in forecaster.guide.median().items():\n", + " if value.numel() == 1:\n", + " print(\"{} = {:0.4g}\".format(name, value.item()))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Even though we're running for more iterations (1201 instead of 501), each iteration is cheaper, and the total time is reduced by more than a factor of three, with nearly identical accuracy:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CRPS = 0.2792\n", + "CPU times: user 14.6 s, sys: 5.77 s, total: 20.4 s\n", + "Wall time: 23.1 s\n" + ] + } + ], + "source": [ + "%%time\n", + "samples = forecaster(data[..., T0:T1, :], covariates[T0:T2], num_samples=100)\n", + "samples.clamp_(min=0) # apply domain knowledge: the samples must be positive\n", + "crps = eval_crps(samples, data[..., T1:T2, :])\n", + "print(\"CRPS = {:0.4g}\".format(crps))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/gmm.ipynb b/pyro/source/tutorial/source/gmm.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..96d65a7d8fd751ed1a8e0ac000f9ae893f89125a --- /dev/null +++ b/pyro/source/tutorial/source/gmm.ipynb @@ -0,0 +1,754 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Gaussian Mixture Model\n", + "\n", + "This tutorial demonstrates how to marginalize out discrete latent variables in Pyro through the motivating example of a mixture model. We'll focus on the mechanics of parallel enumeration, keeping the model simple by training a trivial 1-D Gaussian model on a tiny 5-point dataset. See also the [enumeration tutorial](http://pyro.ai/examples/enumeration.html) for a broader introduction to parallel enumeration.\n", + "\n", + "#### Table of contents\n", + "\n", + "- [Overview](#Overview)\n", + "- [Training a MAP estimator](#Training-a-MAP-estimator)\n", + "- [Serving the model: predicting membership](#Serving-the-model:-predicting-membership)\n", + " - [Predicting membership using discrete inference](#Predicting-membership-using-discrete-inference)\n", + " - [Predicting membership by enumerating in the guide](#Predicting-membership-by-enumerating-in-the-guide)\n", + "- [MCMC](#MCMC)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from collections import defaultdict\n", + "import torch\n", + "import numpy as np\n", + "import scipy.stats\n", + "from torch.distributions import constraints\n", + "from matplotlib import pyplot\n", + "\n", + "%matplotlib inline\n", + "\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "from pyro import poutine\n", + "from pyro.infer.autoguide import AutoDelta\n", + "from pyro.optim import Adam\n", + "from pyro.infer import SVI, TraceEnum_ELBO, config_enumerate, infer_discrete\n", + "\n", + "smoke_test = \"CI\" in os.environ\n", + "assert pyro.__version__.startswith('1.9.1')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Overview\n", + "\n", + "Pyro's [TraceEnum_ELBO](http://docs.pyro.ai/en/dev/inference_algos.html#pyro.infer.traceenum_elbo.TraceEnum_ELBO) can automatically marginalize out variables in both the guide and the model. When enumerating guide variables, Pyro can either enumerate sequentially (which is useful if the variables determine downstream control flow), or enumerate in parallel by allocating a new tensor dimension and using nonstandard evaluation to create a tensor of possible values at the variable's sample site. These nonstandard values are then replayed in the model. When enumerating variables in the model, the variables must be enumerated in parallel and must not appear in the guide. Mathematically, guide-side enumeration simply reduces variance in a stochastic ELBO by enumerating all values, whereas model-side enumeration avoids an application of Jensen's inequality by exactly marginalizing out a variable.\n", + "\n", + "Here is our tiny dataset. It has five points." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "data = torch.tensor([0.0, 1.0, 10.0, 11.0, 12.0])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Training a MAP estimator\n", + "\n", + "Let's start by learning model parameters `weights`, `locs`, and `scale` given priors and data. We will learn point estimates of these using an [AutoDelta](http://docs.pyro.ai/en/dev/infer.autoguide.html#autodelta) guide (named after its delta distributions). Our model will learn global mixture weights, the location of each mixture component, and a shared scale that is common to both components. During inference, [TraceEnum_ELBO](http://docs.pyro.ai/en/dev/inference_algos.html#pyro.infer.traceenum_elbo.TraceEnum_ELBO) will marginalize out the assignments of datapoints to clusters." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "K = 2 # Fixed number of components.\n", + "\n", + "\n", + "@config_enumerate\n", + "def model(data):\n", + " # Global variables.\n", + " weights = pyro.sample(\"weights\", dist.Dirichlet(0.5 * torch.ones(K)))\n", + " scale = pyro.sample(\"scale\", dist.LogNormal(0.0, 2.0))\n", + " with pyro.plate(\"components\", K):\n", + " locs = pyro.sample(\"locs\", dist.Normal(0.0, 10.0))\n", + "\n", + " with pyro.plate(\"data\", len(data)):\n", + " # Local variables.\n", + " assignment = pyro.sample(\"assignment\", dist.Categorical(weights))\n", + " pyro.sample(\"obs\", dist.Normal(locs[assignment], scale), obs=data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To run inference with this `(model,guide)` pair, we use Pyro's [config_enumerate()](http://docs.pyro.ai/en/dev/poutine.html#pyro.infer.enum.config_enumerate) handler to enumerate over all assignments in each iteration. Since we've wrapped the batched Categorical assignments in a [pyro.plate](http://docs.pyro.ai/en/dev/primitives.html#pyro.plate) indepencence context, this enumeration can happen in parallel: we enumerate only 2 possibilites, rather than `2**len(data) = 32`. Finally, to use the parallel version of enumeration, we inform Pyro that we're only using a single [plate](http://docs.pyro.ai/en/dev/primitives.html#pyro.plate) via `max_plate_nesting=1`; this lets Pyro know that we're using the rightmost dimension [plate](http://docs.pyro.ai/en/dev/primitives.html#pyro.plate) and that Pyro can use any other dimension for parallelization." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "optim = pyro.optim.Adam({\"lr\": 0.1, \"betas\": [0.8, 0.99]})\n", + "elbo = TraceEnum_ELBO(max_plate_nesting=1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Before inference we'll initialize to plausible values. Mixture models are very succeptible to local modes. A common approach is to choose the best among many random initializations, where the cluster means are initialized from random subsamples of the data. Since we're using an [AutoDelta](http://docs.pyro.ai/en/dev/infer.autoguide.html#autodelta) guide, we can initialize by defining a custom ``init_loc_fn()``." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "seed = 13, initial_loss = 25.665584564208984\n" + ] + } + ], + "source": [ + "def init_loc_fn(site):\n", + " if site[\"name\"] == \"weights\":\n", + " # Initialize weights to uniform.\n", + " return torch.ones(K) / K\n", + " if site[\"name\"] == \"scale\":\n", + " return (data.var() / 2).sqrt()\n", + " if site[\"name\"] == \"locs\":\n", + " return data[torch.multinomial(torch.ones(len(data)) / len(data), K)]\n", + " raise ValueError(site[\"name\"])\n", + "\n", + "\n", + "def initialize(seed):\n", + " global global_guide, svi\n", + " pyro.set_rng_seed(seed)\n", + " pyro.clear_param_store()\n", + " global_guide = AutoDelta(\n", + " poutine.block(model, expose=[\"weights\", \"locs\", \"scale\"]),\n", + " init_loc_fn=init_loc_fn,\n", + " )\n", + " svi = SVI(model, global_guide, optim, loss=elbo)\n", + " return svi.loss(model, global_guide, data)\n", + "\n", + "\n", + "# Choose the best among 100 random initializations.\n", + "loss, seed = min((initialize(seed), seed) for seed in range(100))\n", + "initialize(seed)\n", + "print(f\"seed = {seed}, initial_loss = {loss}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "During training, we'll collect both losses and gradient norms to monitor convergence. We can do this using PyTorch's `.register_hook()` method." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "...................................................................................................\n", + "..................................................................................................." + ] + } + ], + "source": [ + "# Register hooks to monitor gradient norms.\n", + "gradient_norms = defaultdict(list)\n", + "for name, value in pyro.get_param_store().named_parameters():\n", + " value.register_hook(\n", + " lambda g, name=name: gradient_norms[name].append(g.norm().item())\n", + " )\n", + "\n", + "losses = []\n", + "for i in range(200 if not smoke_test else 2):\n", + " loss = svi.step(data)\n", + " losses.append(loss)\n", + " print(\".\" if i % 100 else \"\\n\", end=\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA3YAAAE8CAYAAACM8SOuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABKLElEQVR4nO3de1xVZd7///fmjAoIIiCi4CkVNUxFxhzzRJqZpZNlaeOhSZturJTKan53OVMz2eF+2Em+OnWXWtOBLK1us4PiKU9pKo6moRKmqaConFWQff3+UPZEgAICiw2v5+PBI/e1rrXWZy3XMPvtWte6bMYYIwAAAACA03KxugAAAAAAwNUh2AEAAACAkyPYAQAAAICTI9gBAAAAgJMj2AEAAACAkyPYAQAAAICTI9gBAAAAgJMj2AEAAACAkyPYAQAAAICTI9gBAIAa89VXX6lnz57y8vKSzWZTVlaW1SUBQKNAsAMA1KrU1FTdf//9at++vby8vOTr66v+/fvr1Vdf1dmzZ60uDzXo1KlTuvPOO+Xt7a2EhAS9++67atq0aYX9d+/erbFjxyo8PFxeXl5q3bq1brzxRr3++uuSpB07dshms+m///u/K9zGgQMHZLPZFB8fL0n661//KpvNpszMzJo9OACo59ysLgAA0HB98cUXuuOOO+Tp6amJEyeqe/fuKiws1IYNG/TYY4/phx9+0BtvvGF1magh27ZtU25urp599lnFxsZetu+mTZs0ePBgtW3bVlOnTlVISIiOHDmiLVu26NVXX9WDDz6oXr16qUuXLvrggw/097//vdztvP/++5Kke+65p8aPBwCcCcEOAFAr0tLSdNdddyk8PFyrV69Wq1atHMvi4uJ08OBBffHFFxZWePXOnTsnDw8PubjwAIwknThxQpLUvHnzK/b9xz/+IT8/P23btq1M/5LtSNKECRP01FNPacuWLfrd735XZjsffPCBunTpol69el1V7QDg7Ph/IgBArXjxxReVl5ent956q1SoK9GxY0c9/PDDjs8XLlzQs88+qw4dOsjT01MRERH6y1/+ovPnz5daLyIiQrfccos2bNigvn37ysvLS+3bt9c777zj6PP999/LZrNp8eLFZfb79ddfy2azafny5Y62o0eP6t5771VwcLA8PT3VrVs3vf3226XWW7t2rWw2mz788EP993//t1q3bq0mTZooJydHkrRkyRJFRkbKy8tL3bt317JlyzR58mRFRESU2o7dbtcrr7yibt26ycvLS8HBwbr//vt15syZKh9niaysLM2cOVMRERHy9PRUWFiYJk6cWOpxxPPnz2v27Nnq2LGjPD091aZNG82aNavM+a3IkiVL1Lt3b3l7eyswMFD33HOPjh496lg+aNAgTZo0SZIUHR0tm82myZMnV7i91NRUdevWrdwQGBQU5PjzhAkTJP3nztyvbd++XSkpKY4+ANCoGQAAakHr1q1N+/btK91/0qRJRpIZO3asSUhIMBMnTjSSzOjRo0v1Cw8PN507dzbBwcHmL3/5i5k3b57p1auXsdlsZs+ePY5+7du3NzfffHOZ/UyZMsX4+/ubwsJCY4wx6enpJiwszLRp08Y888wzZv78+ebWW281kszLL7/sWG/NmjVGkomMjDQ9e/Y0c+fONXPmzDH5+flm+fLlxmazmWuvvdbMnTvXPPXUU8bf3990797dhIeHl9r/fffdZ9zc3MzUqVPNggULzOOPP26aNm1qoqOjHTVV5Thzc3NN9+7djaurq5k6daqZP3++efbZZ010dLTZuXOnMcaY4uJiM2zYMNOkSRMzY8YM889//tNMnz7duLm5mdtuu+2KfzcLFy40kkx0dLR5+eWXzRNPPGG8vb1NRESEOXPmjDHGmG+++cZMmzbNSDLPPPOMeffdd82mTZsq3OawYcOMj4+P2b179xX3f/3115vg4GBz4cKFUu3x8fFGkklNTXW0zZ4920gyJ0+evOJ2AaAhIdgBAGpcdna2kVSp0GCMMcnJyUaSue+++0q1P/roo0aSWb16taMtPDzcSDLr1693tJ04ccJ4enqaRx55xNH25JNPGnd3d3P69GlH2/nz503z5s3Nvffe62j705/+ZFq1amUyMzNL7fuuu+4yfn5+pqCgwBjzn2DXvn17R1uJHj16mLCwMJObm+toW7t2rZFUKth9++23RpJ57733Sq3/1VdflWmv7HE+/fTTRpJZunSp+S273W6MMebdd981Li4u5ttvvy21fMGCBUaS2bhxY5l1SxQWFpqgoCDTvXt3c/bsWUf78uXLjSTz9NNPO9pKAuC2bdsq3F6Jb775xri6uhpXV1fTr18/M2vWLPP111+XCrclEhISjCTz9ddfO9qKi4tN69atTb9+/Ur1JdgBaKx4FBMAUONKHk/08fGpVP8VK1ZIkuPNhiUeeeQRSSozFi8yMlIDBgxwfG7ZsqU6d+6sn376ydE2btw4FRUVaenSpY62b775RllZWRo3bpwkyRijTz75RKNGjZIxRpmZmY6f4cOHKzs7Wzt27Ci170mTJsnb29vx+dixY9q9e7cmTpyoZs2aOdoHDhyoHj16lFp3yZIl8vPz04033lhqX71791azZs20Zs2aKh/nJ598oqioKI0ZM6bMebXZbI79du3aVV26dCm13yFDhkhSmf3+2vfff68TJ07ov/7rv+Tl5eVoHzlypLp06VLtcZI33nijNm/erFtvvVW7du3Siy++qOHDh6t169b6/PPPS/UdN26c3N3dSz2OuW7dOh09epTHMAHgEoIdAKDG+fr6SpJyc3Mr1f/nn3+Wi4uLOnbsWKo9JCREzZs3188//1yqvW3btmW24e/vX2qcWlRUlLp06aLExERHW2JiogIDAx2B5uTJk8rKytIbb7yhli1blvqZMmWKpNIv8pCkdu3alaldUpnay2s7cOCAsrOzFRQUVGZ/eXl5ZfZVmeNMTU1V9+7dy/T77X5/+OGHMvu85ppryj3G8o6vc+fOZZZ16dKlzN9NVURHR2vp0qU6c+aMtm7dqieffFK5ubkaO3as9u7d6+jXokULDR8+XMuWLdO5c+ckXRxz5+bmpjvvvLPa+weAhoS3YgIAapyvr69CQ0O1Z8+eKq1XcofpSlxdXcttN8aU+jxu3Dj94x//UGZmpnx8fPT555/r7rvvlpvbxf/7s9vtki6+Kr/kxR+/de2115b6/Ou7dVVlt9sVFBSk9957r9zlLVu2LPW5ssdZmf326NFDc+fOLXd5mzZtqrS9mubh4aHo6GhFR0frmmuu0ZQpU7RkyRLNnj3b0eeee+7R8uXLtXz5ct1666365JNPNGzYsDLnDAAaK4IdAKBW3HLLLXrjjTe0efNm9evX77J9w8PDZbfbdeDAAXXt2tXRnpGRoaysLIWHh1erhnHjxulvf/ubPvnkEwUHBysnJ0d33XWXY3nLli3l4+Oj4uLiK867drnaJengwYNllv22rUOHDlq1apX69+9/VQHxt9u8UoDu0KGDdu3apaFDh1Y6PJcoOb6UlBTHnc4SKSkp1f67qUifPn0kScePHy/Vfuutt8rHx0fvv/++3N3ddebMGR7DBIBf4VFMAECtmDVrlpo2bar77rtPGRkZZZanpqbq1VdflSTdfPPNkqRXXnmlVJ+SO0wjR46sVg1du3ZVjx49lJiYqMTERLVq1Uo33HCDY7mrq6tuv/12ffLJJ+WGo5MnT15xH6Ghoerevbveeecd5eXlOdrXrVun3bt3l+p75513qri4WM8++2yZ7Vy4cEFZWVlVOLqLbr/9du3atUvLli0rs6zkzt6dd96po0eP6s033yzT5+zZs8rPz69w+3369FFQUJAWLFhQamqEL7/8Uvv27av2382aNWvKvfNYMt7yt49+ent7a8yYMVqxYoXmz5+vpk2b6rbbbqvWvgGgIeKOHQCgVnTo0EHvv/++xo0bp65du2rixInq3r27CgsLtWnTJi1ZssQxz1lUVJQmTZqkN954Q1lZWRo4cKC2bt2qxYsXa/To0Ro8eHC16xg3bpyefvppeXl56U9/+lOZycSff/55rVmzRjExMZo6daoiIyN1+vRp7dixQ6tWrdLp06evuI/nnntOt912m/r3768pU6bozJkzmjdvnrp3714q7A0cOFD333+/5syZo+TkZA0bNkzu7u46cOCAlixZoldffVVjx46t0vE99thj+vjjj3XHHXfo3nvvVe/evXX69Gl9/vnnWrBggaKiovTHP/5RH330kf785z9rzZo16t+/v4qLi/Xjjz/qo48+0tdff+24U/Zb7u7ueuGFFzRlyhQNHDhQd999tzIyMvTqq68qIiJCM2fOrFK9JR588EEVFBRozJgx6tKli+O6SExMVEREhGOM46/dc889euedd/T1119rwoQJatq0abX2DQANkpWv5AQANHz79+83U6dONREREcbDw8P4+PiY/v37m9dff92cO3fO0a+oqMj87W9/M+3atTPu7u6mTZs25sknnyzVx5iL0wCMHDmyzH4GDhxoBg4cWKb9wIEDRpKRZDZs2FBujRkZGSYuLs60adPGuLu7m5CQEDN06FDzxhtvOPqUTHewZMmScrfx4Ycfmi5duhhPT0/TvXt38/nnn5vbb7/ddOnSpUzfN954w/Tu3dt4e3sbHx8f06NHDzNr1ixz7Nixah3nqVOnzPTp003r1q2Nh4eHCQsLM5MmTSo1hUNhYaF54YUXTLdu3Yynp6fx9/c3vXv3Nn/7299MdnZ2ucf0a4mJiea6664znp6eJiAgwEyYMMH88ssv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nN13aacsrgQAAABoGCwPduvWrVNcXJy2bNmilStXqqioSMOGDVN+fn6N9JekjRs3qqioqEz73r17lZGRUe46+fn5ioqKUkJCQoXbTUxMVHx8vGbPnq0dO3YoKipKw4cP14kTJ65w1I1b73B/udikI6fP6ljWWavLAQAAAJyezdSzVxOePHlSQUFBWrdunW644Yar7m+329WrVy916tRJH374oVxdXSVJKSkpGjhwoOLj4zVr1qzL7sNms2nZsmUaPXp0qfaYmBhFR0dr3rx5jn21adNGDz74oJ544glHv7Vr12revHn6+OOPr3g8OTk58vPzU3Z2tnx9fa/Y31mNen2Ddh/N1qt39dRtPVtbXQ4AAABQ71QlG1h+x+63srOzJUkBAQE10t/FxUUrVqzQzp07NXHiRNntdqWmpmrIkCEaPXr0FUNdRQoLC7V9+3bFxsaW2ldsbKw2b95c5e0lJCQoMjJS0dHR1arH2cQ4HsdknB0AAABwtepVsLPb7ZoxY4b69++v7t2711j/0NBQrV69Whs2bND48eM1ZMgQxcbGav78+dWuNTMzU8XFxQoODi7VHhwcrPT0dMfn2NhY3XHHHVqxYoXCwsIqDH1xcXHau3evtm3bVu2anIljnN1PjLMDAAAArpab1QX8WlxcnPbs2aMNGzbUeP+2bdvq3Xff1cCBA9W+fXu99dZbstlsV1vyFa1atarW9+GMoiMuBrvUk/nKzDuvwGaeFlcEAAAAOK96c8du+vTpWr58udasWaOwsLAa75+RkaFp06Zp1KhRKigo0MyZM6+q3sDAQLm6upZ5+UpGRoZCQkKuatuNgX9TD3UOvjgNxDYexwQAAACuiuXBzhij6dOna9myZVq9erXatWtXo/2li49NDh06VF27dtXSpUuVlJSkxMREPfroo9Wu28PDQ71791ZSUpKjzW63KykpSf369av2dhuTmPaMswMAAABqguXBLi4uTv/617/0/vvvy8fHR+np6UpPT9fZsxdfgz9v3jwNHTq00v1/y263a8SIEQoPD1diYqLc3NwUGRmplStXauHChXr55ZfLXS8vL0/JyclKTk6WJKWlpSk5OVmHDx929ImPj9ebb76pxYsXa9++fXrggQeUn5+vKVOm1NDZadj68gIVAAAAoEZYPt1BRePcFi5cqMmTJ+uvf/2rFi1apEOHDlWqf3lW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4DRv3lzXXHONDh48qJCQEBUWFiorK6tUH67nqvv555+1atUq3XfffZftx/V7dUquy8v9Dg4JCSnzMqsLFy7o9OnTXNeVVBLqfv75Z61cubLU3bryxMTE6MKFCzp06FDdFNjAtG/fXoGBgY7fC1zDNePbb79VSkrKFX8vS1zD5anou1llvjuEhISU+3u6ZJkVCHYow8PDQ71791ZSUpKjzW63KykpSf369bOwMudkjNH06dO1bNkyrV69Wu3atbviOsnJyZKkVq1a1XJ1DVNeXp5SU1PVqlUr9e7dW+7u7qWu55SUFB0+fJjruYoWLlyooKAgjRw58rL9uH6vTrt27RQSElLqms3JydF3333nuGb79eunrKwsbd++3dFn9erVstvtjmCNipWEugMHDmjVqlVq0aLFFddJTk6Wi4tLmccHUTm//PKLTp065fi9wDVcM9566y317t1bUVFRV+zLNfwfV/puVpnvDv369dPu3btL/QNFyT8SRUZG1s2B/JYlr2xBvffhhx8aT09Ps2jRIrN3714zbdo007x581Jv/kHlPPDAA8bPz8+sXbvWHD9+3PFTUFBgjDHm4MGD5plnnjHff/+9SUtLM5999plp3769ueGGGyyu3Hk88sgjZu3atSYtLc1s3LjRxMbGmsDAQHPixAljjDF//vOfTdu2bc3q1avN999/b/r162f69etncdXOpbi42LRt29Y8/vjjpdq5fqsnNzfX7Ny50+zcudNIMnPnzjU7d+50vJXx+eefN82bNzefffaZ+fe//21uu+02065dO3P27FnHNm666SZz3XXXme+++85s2LDBdOrUydx9991WHVK9crnzW1hYaG699VYTFhZmkpOTS/1eLnmT3aZNm8zLL79skpOTTWpqqvnXv/5lWrZsaSZOnGjxkdUflzvHubm55tFHHzWbN282aWlpZtWqVaZXr16mU6dO5ty5c45tcA1X7Eq/I4wxJjs72zRp0sTMnz+/zPpcw5d3pe9mxlz5u8OFCxdM9+7dzbBhw0xycrL56quvTMuWLc2TTz5pxSEZY4wh2KFCr7/+umnbtq3x8PAwffv2NVu2bLG6JKckqdyfhQsXGmOMOXz4sLnhhhtMQECA8fT0NB07djSPPfaYyc7OtrZwJzJu3DjTqlUr4+HhYVq3bm3GjRtnDh486Fh+9uxZ81//9V/G39/fNGnSxIwZM8YcP37cwoqdz9dff20kmZSUlFLtXL/Vs2bNmnJ/L0yaNMkYc3HKg6eeesoEBwcbT09PM3To0DLn/tSpU+buu+82zZo1M76+vmbKlCkmNzfXgqOpfy53ftPS0ir8vbxmzRpjjDHbt283MTExxs/Pz3h5eZmuXbua5557rlQoaewud44LCgrMsGHDTMuWLY27u7sJDw83U6dOLfOPw1zDFbvS7whjjPnnP/9pvL29TVZWVpn1uYYv70rfzYyp3HeHQ4cOmREjRhhvb28TGBhoHnnkEVNUVFTHR/MfNmOMqaWbgQAAAACAOsAYOwAAAABwcgQ7AAAAAHByBDsAAAAAcHIEOwAAAABwcgQ7AAAAAHByBDsAAAAAcHIEOwAAAABwcgQ7AAAAAHByBDsAAGrZoEGDNGPGDKvLAAA0YDZjjLG6CAAAGrLTp0/L3d1dPj4+ioiI0IwZMwh6AIAa5WZ1AQAANHQBAQE1vs3CwkJ5eHjU+HYBAM6JRzEBAKhlJY9iDho0SD///LNmzpwpm80mm83m6LNhwwYNGDBA3t7eatOmjR566CHl5+c7lkdEROjZZ5/VxIkT5evrq2nTpqmwsFDTp09Xq1at5OXlpfDwcM2ZM8eKQwQAWIxgBwBAHVm6dKnCwsL0zDPP6Pjx4zp+/LgkKTU1VTfddJNuv/12/fvf/1ZiYqI2bNig6dOnl1r/f/7nfxQVFaWdO3fqqaee0muvvabPP/9cH330kVJSUvTee+8pIiLCgiMDAFiNRzEBAKgjAQEBcnV1lY+Pj0JCQhztc+bM0YQJExzj7jp16qTXXntNAwcO1Pz58+Xl5SVJGjJkiB555BHHeocPH1anTp30+9//XjabTeHh4XV6PACA+oM7dgAAWGzXrl1atGiRmjVr5vgZPny47Ha70tLSHP369OlTar3JkycrOTlZnTt31kMPPaRvvvmmrksHANQT3LEDAMBieXl5uv/++/XQQw+VWda2bVvHn5s2bVpqWa9evZSWlqYvv/xSq1at0p133qnY2Fh9/PHHtV4zAKB+IdgBAFCHPDw8VFxcXKqtV69e2rt3rzp27Fjl7fn6+mrcuHEaN26cxo4dq5tuukmnT5+ulTdxAgDqLx7FBACgDkVERGj9+vU6evSoMjMzJUmPP/64Nm3apOnTpys5OVkHDhzQZ599VublKb81d+5cffDBB/rxxx+1f/9+LVmyRCEhIWrevHkdHAkAoD4h2AEAUIeeeeYZHTp0SB06dFDLli0lSddee63WrVun/fv3a8CAAbruuuv09NNPKzQ09LLb8vHx0Ysvvqg+ffooOjpahw4d0ooVK+Tiwv+9A0BjYzPGGKuLAAAAAABUH/+kBwAAAABOjmAHAAAAAE6OYAcAAAAATo5gBwAAAABOjmAHAAAAAE6OYAcAAAAATo5gBwAAAABOjmAHAAAAAE6OYAcAAAAATo5gBwAAAABOjmAHAAAAAE7u/wd3BB1hhzqf6AAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pyplot.figure(figsize=(10, 3), dpi=100).set_facecolor(\"white\")\n", + "pyplot.plot(losses)\n", + "pyplot.xlabel(\"iters\")\n", + "pyplot.ylabel(\"loss\")\n", + "pyplot.yscale(\"log\")\n", + "pyplot.title(\"Convergence of SVI\");" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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Fs3Nzcp7cAxb19X3hBBC1NTUCG9vb7F9+3az8zmGrevq3kyIru8fWltbxciRI8WMGTNETk6OOHr0qAgJCRFr1651xCUJBlku5M9//rOIjo4WHh4eYvz48eLcuXOObpJLAmDxZ8eOHUIIIYqLi8XkyZNFYGCg0Gg0YtCgQeLdd98VNTU1jm24i1iwYIGIiIgQHh4eon///mLBggXizp07yvGmpibx5ptvin79+glvb2/x85//XJSVlTmwxa7pH//4hwAgcnNzTco5fh/fyZMnLX4nvPLKK0IIQxr3devWibCwMKHRaERKSopZv1dWVoqFCxcKX19fodVqxauvvirq6uoccDXOyVofFxQUdPq9fPLkSSGEEJcvXxbJycnC399feHp6iuHDh4s//OEPJkHCk8xa/zY2NooZM2aIkJAQoVarRUxMjFiyZInZL2k5hq3r6ntCCCE++ugj4eXlJaqrq83O5xi2rqt7MyG6d/9QWFgoZs2aJby8vERwcLBYvXq10Ol0vXw1BpIQQthpkoyIiIiIiOiJwz1ZRERERERENsQgi4iIiIiIyIYYZBEREREREdkQgywiIiIiIiIbYpBFRERERERkQwyyiIiIiIiIbIhBFhERERERkQ0xyCIiIiIiIrIhBllERPREmTp1KlauXOnoZhARUR8mCSGEoxtBRETUW6qqqqBWq+Hn54fY2FisXLmSQRcREdmUu6MbQERE1JsCAwNt/p4tLS3w8PCw+fsSEZFr4nJBIiJ6osjLBadOnYqioiKsWrUKkiRBkiSlzpkzZzBp0iR4eXlhwIAByMjIQENDg3I8NjYW77//PhYtWgStVoulS5eipaUFK1asQEREBDw9PRETE4ONGzc64hKJiMjBGGQREdETaf/+/YiKisKGDRtQVlaGsrIyAEB+fj7S0tIwf/58XLt2DXv37sWZM2ewYsUKk/P/+Mc/IjExEVevXsW6deuwbds2fPXVV/j888+Rm5uL3bt3IzY21gFXRkREjsblgkRE9EQKDAyEm5sb/Pz8EB4erpRv3LgR6enpyj6twYMHY9u2bZgyZQq2b98OT09PAMC0adOwevVq5bzi4mIMHjwYEydOhCRJiImJ6dXrISIi58GZLCIiIiPffvstdu7cCV9fX+Vn5syZ0Ov1KCgoUOqNHTvW5LzFixcjJycHQ4cORUZGBv75z3/2dtOJiMhJcCaLiIjISH19PV5//XVkZGSYHYuOjlZe+/j4mBxLSkpCQUEBjhw5gmPHjuHFF19EamoqvvjiC7u3mYiInAuDLCIiemJ5eHigra3NpCwpKQk3b97EoEGDHvv9tFotFixYgAULFuCFF15AWloaqqqq7JLRkIiInBeXCxIR0RMrNjYWp0+fxr179/DgwQMAwJo1a3D27FmsWLECOTk5yMvLw8GDB80SX3S0detW7NmzB7du3cLt27exb98+hIeHIyAgoBeuhIiInAmDLCIiemJt2LABhYWFiI+PR0hICAAgISEBWVlZuH37NiZNmoTRo0fjvffeQ2RkpNX38vPzw+bNmzF27FiMGzcOhYWFOHz4MFQq/q+WiOhJIwkhhKMbQURERERE1Ffw12tEREREREQ2xCCLiIiIiIjIhhhkERERERER2RCDLCIiIiIiIhtikEVERERERGRDDLKIiIiIiIhsiEEWERERERGRDTHIIiIiIiIisiEGWURERERERDbEIIuIiIiIiMiGGGQRERERERHZ0P8HUpBLJmSqEagAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pyplot.figure(figsize=(10, 4), dpi=100).set_facecolor(\"white\")\n", + "for name, grad_norms in gradient_norms.items():\n", + " pyplot.plot(grad_norms, label=name)\n", + "pyplot.xlabel(\"iters\")\n", + "pyplot.ylabel(\"gradient norm\")\n", + "pyplot.yscale(\"log\")\n", + "pyplot.legend(loc=\"best\")\n", + "pyplot.title(\"Gradient norms during SVI\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here are the learned parameters:" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "weights = [0.625 0.375]\n", + "locs = [10.984464 0.49901518]\n", + "scale = 0.6514337062835693\n" + ] + } + ], + "source": [ + "map_estimates = global_guide(data)\n", + "weights = map_estimates[\"weights\"]\n", + "locs = map_estimates[\"locs\"]\n", + "scale = map_estimates[\"scale\"]\n", + "print(f\"weights = {weights.data.numpy()}\")\n", + "print(f\"locs = {locs.data.numpy()}\")\n", + "print(f\"scale = {scale.data.numpy()}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The model's `weights` are as expected, with about 2/5 of the data in the first component and 3/5 in the second component. Next let's visualize the mixture model." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1cAAAF2CAYAAACCrWJKAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACGvklEQVR4nOzdd1yV5f/H8ddhKwqiiEjiVnBvSXNnYuXKMrVhmtnOzKbfSlu/HNlym2VD08yGNsxUnDlz54DcG5yAgLLO/fsDOImCchC4D/B+Ph7nAdznuq/7fSbnc+77vi6LYRgGIiIiIiIiclOczA4gIiIiIiJSFKi4EhERERERyQMqrkRERERERPKAiisREREREZE8oOJKREREREQkD6i4EhERERERyQMqrkRERERERPKAiisREREREZE8oOJKREREREQkD6i4EhHJhsVi4a233jI7RiazZs0iODgYV1dXypQpY3YcKaY6dOhAhw4dzI5R5OT2Pefw4cNYLBa++uqrPM8kIvZRcSUiBeqrr77CYrHYLh4eHgQEBBAaGsqECRO4ePGi2RGztW7dOt566y2io6NN2X54eDgDBw6kRo0azJgxg88++yzbtosWLXK4wlDyz5QpUwrFB+s9e/bw1ltvcfjwYbOjiIjkCxezA4hI8fTOO+9QrVo1kpOTiYyMZOXKlQwbNoyPPvqIX375hYYNG5odkUuXLuHi8t/b5Lp163j77bcZOHCgKXuNVq5cidVq5dNPP6VmzZrXbbto0SImT56sAquYmDJlCr6+vgwcOLBAtrdkyZJcrbdnzx7efvttOnToQNWqVfM2lIiIA1BxJSKmuPPOO2nevLnt7xEjRrB8+XK6detGjx492Lt3LyVKlDAxIXh4eJi6/audPn0aQIcDiunc3NzMjpBJfHw8np6eZscQEdFhgSLiODp16sSbb77JkSNHmD17dqbrwsPDue+++yhbtiweHh40b96cX375JVObjEMO165dy/Dhwylfvjyenp7cc889nDlzJlPbzZs3Exoaiq+vLyVKlKBatWo8+uijmdpcef7DW2+9xcsvvwxAtWrVbIc1Hj58mPbt29OoUaMsb1NQUBChoaE3vO1TpkyhXr16uLu7ExAQwDPPPJPp8MOqVasyatQoAMqXL3/dczMGDhzI5MmTbbch4wLQtGlTevfunal9gwYNsFgs7Ny5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JUuWNNzc3IxLly5d0+fWrVuN0NBQo1SpUkbJkiWNjh07GuvWrcvxbUxISDBef/11o1q1aoarq6vh7+9v3HfffZmGd7948aLxwgsvGAEBAYarq6tRq1Yt44MPPsg0NLZhpD02zzzzTKZlGcNRf/DBB5mWZzz+8+fPty1r3769Ua9ePWPz5s1Gq1atDA8PD6NKlSqZ5vrKEBUVZQwaNMjw9fU13NzcjAYNGlwz5HV2287IevXzKC+fz4aRNtz43XffbZQuXdoArjssuz33U3Y5rhyKPTY21qhSpYrRtGnTTEO4G0basPFOTk7G+vXrbctmzJhhVK9e3XB2ds50O1JTU41XX33V8PX1NUqWLGmEhoYa+/fvz3Yo9uymUlixYoURGhpqeHt7Gx4eHkaNGjWMgQMHXvP6vlp2/Wb3unvkkUcMT0/PTMty+vy9dOmSMXToUKNcuXKGp6en0b17d9scf1c/V6KiooxnnnnGCAwMtL1ubr/9duOzzz6ztdFQ7CKOw2IYBXCGr4hIMfHpp5/ywgsvcPjw4WtGHRPH0aFDB86ePZvl4VYiIiK5pXOuRETyiGEYfPHFF7Rv316FlYiISDGkc65ERG5SfHw8v/zyCytWrOCff/5h4cKFZkcSERERE6i4EhG5SWfOnOGBBx6gTJky/O9//6NHjx5mRxIRERET6JwrERERERGRPKBzrkRERERERPKAiisREREREZE8oHOusmC1Wjl58iSlS5fGYrGYHUdERERERExiGAYXL14kICAAJ6fr75tScZWFkydPEhgYaHYMERERERFxEMeOHaNSpUrXbaPiKgulS5cG0u5ALy8vk9OIiIiIiIhZYmNjCQwMtNUI16PiKgsZhwJ6eXmpuBIRERERkRydLqQBLURERERERPKAiisREREREZE8oOJKREREREQkD6i4EhERERERyQMqrkRERERERPKAiisREREREZE84BDF1eTJk6latSoeHh6EhISwadOmbNvOmDGDtm3b4uPjg4+PD507d76m/cCBA7FYLJkuXbt2ze+bISIiIiIixZjpxdW8efMYPnw4o0aNYuvWrTRq1IjQ0FBOnz6dZfuVK1fSv39/VqxYwfr16wkMDKRLly6cOHEiU7uuXbty6tQp22Xu3LkFcXNERERERKSYshiGYZgZICQkhBYtWjBp0iQArFYrgYGBPPfcc7z2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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "X = np.arange(-3, 15, 0.1)\n", + "Y1 = weights[0].item() * scipy.stats.norm.pdf((X - locs[0].item()) / scale.item())\n", + "Y2 = weights[1].item() * scipy.stats.norm.pdf((X - locs[1].item()) / scale.item())\n", + "\n", + "pyplot.figure(figsize=(10, 4), dpi=100).set_facecolor(\"white\")\n", + "pyplot.plot(X, Y1, \"r-\")\n", + "pyplot.plot(X, Y2, \"b-\")\n", + "pyplot.plot(X, Y1 + Y2, \"k--\")\n", + "pyplot.plot(data.data.numpy(), np.zeros(len(data)), \"k*\")\n", + "pyplot.title(\"Density of two-component mixture model\")\n", + "pyplot.ylabel(\"probability density\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally note that optimization with mixture models is non-convex and can often get stuck in local optima. For example in this tutorial, we observed that the mixture model gets stuck in an everthing-in-one-cluster hypothesis if `scale` is initialized to be too large.\n", + "\n", + "## Serving the model: predicting membership\n", + "\n", + "Now that we've trained a mixture model, we might want to use the model as a classifier. \n", + "During training we marginalized out the assignment variables in the model. While this provides fast convergence, it prevents us from reading the cluster assignments from the guide. We'll discuss two options for treating the model as a classifier: first using [infer_discrete](http://docs.pyro.ai/en/dev/inference_algos.html#pyro.infer.discrete.infer_discrete) (much faster) and second by training a secondary guide using enumeration inside SVI (slower but more general).\n", + "\n", + "### Predicting membership using discrete inference\n", + "\n", + "The fastest way to predict membership is to use the [infer_discrete](http://docs.pyro.ai/en/dev/inference_algos.html#pyro.infer.discrete.infer_discrete) handler, together with `trace` and `replay`. Let's start out with a MAP classifier, setting `infer_discrete`'s temperature parameter to zero. For a deeper look at effect handlers like `trace`, `replay`, and `infer_discrete`, see the [effect handler tutorial](http://pyro.ai/examples/effect_handlers.html)." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tensor([1, 1, 0, 0, 0])\n" + ] + } + ], + "source": [ + "guide_trace = poutine.trace(global_guide).get_trace(data) # record the globals\n", + "trained_model = poutine.replay(model, trace=guide_trace) # replay the globals\n", + "\n", + "\n", + "def classifier(data, temperature=0):\n", + " inferred_model = infer_discrete(\n", + " trained_model, temperature=temperature, first_available_dim=-2\n", + " ) # avoid conflict with data plate\n", + " trace = poutine.trace(inferred_model).get_trace(data)\n", + " return trace.nodes[\"assignment\"][\"value\"]\n", + "\n", + "\n", + "print(classifier(data))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Indeed we can run this classifer on new data" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "new_data = torch.arange(-3, 15, 0.1)\n", + "assignment = classifier(new_data)\n", + "pyplot.figure(figsize=(8, 2), dpi=100).set_facecolor(\"white\")\n", + "pyplot.plot(new_data.numpy(), assignment.numpy())\n", + "pyplot.title(\"MAP assignment\")\n", + "pyplot.xlabel(\"data value\")\n", + "pyplot.ylabel(\"class assignment\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To generate random posterior assignments rather than MAP assignments, we could set `temperature=1`." + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tensor([1, 1, 0, 0, 0])\n" + ] + } + ], + "source": [ + "print(classifier(data, temperature=1))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since the classes are very well separated, we zoom in to the boundary between classes, around 5.75." + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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LNBJUEREREREuiI74V2zZg3q169fqLxhw4YIDw/XSVBERERERLoiO+FNSkqCo6NjoXJbW1vcu3dPJ0EREREREemK7ITX2dkZf/zxR6HyP/74A05OTjoJioiIiIhIV4p10drzRo0ahcDAQDx58gRvvfUWACA6OhpTp07F5MmTdR4gEREREdGrkJ3wTpkyBSkpKRg7dizy8vIAAGZmZvjf//6H4OBgnQdIRERERPQqSnxr4ezsbFy+fBnm5uaoU6cOlEqlrmMrM7y1MBEREZFh0/mthTWxsLBAixYtSno4EREREVGpkH3RGhERERHR64QJLxERERGVa0x4iYiIiKhcY8JLREREROVaiS9a06VVq1Zh0aJFSEpKgpeXF1auXImWLVtqrb99+3bMmDEDiYmJqFOnDhYsWIBu3bpJrwshMGvWLKxbtw7p6elo06YNvvrqK9SpU6c0ukP/IcsOXoGxkQIT3q5TqPxUYipauFbFpE511V5bER2PfJUoVG6otPURKNwXOXW11S8oA1CovpxzJzcWfdFXHLo419rqy/1cayrXNo6l3Yahx2cobRh6fIbShqHHZyhtFDCk77syT3i///57BAUFITw8HK1atUJoaCj8/PwQFxcHOzu7QvVjY2MxaNAghISEoEePHvj222/Ru3dvnD17Fo0aNQIALFy4ECtWrEBkZCTc3NwwY8YM+Pn54e+//4aZmVlpd5HKMWMjBZYevAIAasnBqcRUxF5LKVR/RXQ8lh68giAD+OEvLm191NQXOXW11X++7Pn6cs+d3Fj0RV9x6OJca6sv93OtqVzbOJZ2G4Yen6G0YejxGUobhh6fobQBGN73XZkvaVi6dClGjRqFgIAAeHh4IDw8HBUrVsTGjRs11l++fDm6dOmCKVOmoEGDBpg7dy6aNm2KsLAwAM9md0NDQzF9+nT06tULjRs3xubNm3H37l3s3r27FHtG/wUT3q6DoE51sfTgFayIjgfw7Ic89loKWrtXQ+y1FLXygh9+TbNshkpbHzX1RU5dbfU1Kcm5kxuLvugrDl2ca7njqO1zralck7Jow9DjM5Q2DD0+Q2nD0OMzlDYM8fuuxDee0IW8vDxUrFgRO3bsQO/evaXyYcOGIT09HXv27Cl0TM2aNREUFITAwECpbNasWdi9ezcuXLiA69evw93dHefOnYO3t7dUp3379vD29sby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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "new_data = torch.arange(5.5, 6.0, 0.005)\n", + "assignment = classifier(new_data, temperature=1)\n", + "pyplot.figure(figsize=(8, 2), dpi=100).set_facecolor(\"white\")\n", + "pyplot.plot(new_data.numpy(), assignment.numpy(), \"x\", color=\"C0\")\n", + "pyplot.title(\"Random posterior assignment\")\n", + "pyplot.xlabel(\"data value\")\n", + "pyplot.ylabel(\"class assignment\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Predicting membership by enumerating in the guide\n", + "\n", + "A second way to predict class membership is to enumerate in the guide. This doesn't work well for serving classifier models, since we need to run stochastic optimization for each new input data batch, but it is more general in that it can be embedded in larger variational models.\n", + "\n", + "To read cluster assignments from the guide, we'll define a new `full_guide` that fits both global parameters (as above) and local parameters (which were previously marginalized out). Since we've already learned good values for the global variables, we will block SVI from updating those by using [poutine.block](http://docs.pyro.ai/en/dev/poutine.html#pyro.poutine.block)." + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [], + "source": [ + "@config_enumerate\n", + "def full_guide(data):\n", + " # Global variables.\n", + " with poutine.block(\n", + " hide_types=[\"param\"]\n", + " ): # Keep our learned values of global parameters.\n", + " global_guide(data)\n", + "\n", + " # Local variables.\n", + " with pyro.plate(\"data\", len(data)):\n", + " assignment_probs = pyro.param(\n", + " \"assignment_probs\",\n", + " torch.ones(len(data), K) / K,\n", + " constraint=constraints.simplex,\n", + " )\n", + " pyro.sample(\"assignment\", dist.Categorical(assignment_probs))" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "...................................................................................................\n", + "..................................................................................................." + ] + } + ], + "source": [ + "optim = pyro.optim.Adam({\"lr\": 0.2, \"betas\": [0.8, 0.99]})\n", + "elbo = TraceEnum_ELBO(max_plate_nesting=1)\n", + "svi = SVI(model, full_guide, optim, loss=elbo)\n", + "\n", + "# Register hooks to monitor gradient norms.\n", + "gradient_norms = defaultdict(list)\n", + "svi.loss(model, full_guide, data) # Initializes param store.\n", + "for name, value in pyro.get_param_store().named_parameters():\n", + " value.register_hook(\n", + " lambda g, name=name: gradient_norms[name].append(g.norm().item())\n", + " )\n", + "\n", + "losses = []\n", + "for i in range(200 if not smoke_test else 2):\n", + " loss = svi.step(data)\n", + " losses.append(loss)\n", + " print(\".\" if i % 100 else \"\\n\", end=\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1EAAAE8CAYAAAAhcDsHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA9kUlEQVR4nO3deXxU9b3/8feZLJOQlUBWEhIWJYSwCESK1IKCgEtR64IWC7igtqhVrFr7q1L1VqztxaXmAeXeutRai4jbxR0FFAFlF0URKDuELWQhZJ35/v5IZsiQAElIcmaS1/PxyCMz3/M953zO8TSdN99zvmMZY4wAAAAAAA3isLsAAAAAAAgkhCgAAAAAaARCFAAAAAA0AiEKAAAAABqBEAUAAAAAjUCIAgAAAIBGIEQBAAAAQCMQogAAAACgEQhRAAAAANAIhCgAAALUBx98oAEDBigsLEyWZamgoMDukgCgXSBEAUAbsnXrVt12223q3r27wsLCFB0drWHDhumZZ55RaWmp3eWhGR0+fFjXXnutwsPDlZubq5dfflkREREn7b9hwwZdffXVSk9PV1hYmLp06aKLLrpIf/3rXyVJa9askWVZ+v3vf3/SbWzevFmWZWnatGmSpD/84Q+yLEuHDh1q3oMDAD8XbHcBAIDm8e677+qaa66R0+nUxIkTlZ2drYqKCi1dulT33Xefvv32W82ZM8fuMtFMVq5cqeLiYj322GMaNWrUKfsuW7ZMF1xwgbp27aopU6YoKSlJu3bt0ooVK/TMM8/ozjvv1MCBA5WZmalXX31V//Vf/1Xvdv71r39Jkm644YZmPx4ACCSEKABoA7Zt26brrrtO6enp+vTTT5WcnOxdNnXqVG3ZskXvvvuujRWeubKyMoWGhsrh4CYKSTpw4IAkKTY29rR9//jHPyomJkYrV66s09+zHUmaMGGCHnroIa1YsUI/+tGP6mzn1VdfVWZmpgYOHHhGtQNAoOP/iQCgDXjyySd19OhR/f3vf/cJUB49e/bUr3/9a+/7qqoqPfbYY+rRo4ecTqcyMjL0u9/9TuXl5T7rZWRk6LLLLtPSpUt17rnnKiwsTN27d9c//vEPb59Vq1bJsiy99NJLdfb74YcfyrIsLViwwNu2Z88e3XTTTUpMTJTT6VSfPn30/PPP+6y3ePFiWZalf//73/r973+vLl26qEOHDioqKpIkzZs3T1lZWQoLC1N2drbefPNNTZ48WRkZGT7bcbvdevrpp9WnTx+FhYUpMTFRt912m44cOdLo4/QoKCjQPffco4yMDDmdTqWmpmrixIk+t7SVl5dr+vTp6tmzp5xOp9LS0nT//ffXOb8nM2/ePA0aNEjh4eHq3LmzbrjhBu3Zs8e7fMSIEZo0aZIkKScnR5ZlafLkySfd3tatW9WnT596A1dCQoL39YQJEyQdH3GqbfXq1dq0aZO3DwC0awYAEPC6dOliunfv3uD+kyZNMpLM1VdfbXJzc83EiRONJHPFFVf49EtPTze9evUyiYmJ5ne/+5157rnnzMCBA41lWeabb77x9uvevbu55JJL6uznxhtvNB07djQVFRXGGGPy8vJMamqqSUtLM48++qiZNWuWGTdunJFknnrqKe96ixYtMpJMVlaWGTBggJk5c6aZMWOGKSkpMQsWLDCWZZl+/fqZmTNnmoceesh07NjRZGdnm/T0dJ/933LLLSY4ONhMmTLFzJ492zzwwAMmIiLC5OTkeGtqzHEWFxeb7OxsExQUZKZMmWJmzZplHnvsMZOTk2PWrl1rjDHG5XKZ0aNHmw4dOpi7777b/O1vfzN33HGHCQ4ONpdffvlp/9u88MILRpLJyckxTz31lPntb39rwsPDTUZGhjly5IgxxpiPPvrI3HrrrUaSefTRR83LL79sli1bdtJtjh492kRFRZkNGzacdv/nnXeeSUxMNFVVVT7t06ZNM5LM1q1bvW3Tp083kszBgwdPu10AaEsIUQAQ4AoLC42kBn1AN8aYdevWGUnmlltu8Wn/zW9+YySZTz/91NuWnp5uJJnPPvvM23bgwAHjdDrNvffe62178MEHTUhIiMnPz/e2lZeXm9jYWHPTTTd5226++WaTnJxsDh065LPv6667zsTExJhjx44ZY46HqO7du3vbPPr27WtSU1NNcXGxt23x4sVGkk+I+vzzz40k88orr/is/8EHH9Rpb+hxPvzww0aSeeONN8yJ3G63McaYl19+2TgcDvP555/7LJ89e7aRZL744os663pUVFSYhIQEk52dbUpLS73tCxYsMJLMww8/7G3zhK2VK1eedHseH330kQkKCjJBQUFm6NCh5v777zcffvihT5D0yM3NNZLMhx9+6G1zuVymS5cuZujQoT59CVEA2itu5wOAAOe5xS0qKqpB/d977z1J8s6w5nHvvfdKUp1np7KysnT++ed738fHx6tXr176z3/+420bP368Kisr9cYbb3jbPvroIxUUFGj8+PGSJGOM5s+fr5/+9KcyxujQoUPenzFjxqiwsFBr1qzx2fekSZMUHh7ufb93715t2LBBEydOVGRkpLd9+PDh6tu3r8+68+bNU0xMjC666CKffQ0aNEiRkZFatGhRo49z/vz56t+/v6688so659WyLO9+e/furczMTJ/9XnjhhZJUZ7+1rVq1SgcOHNCvfvUrhYWFedsvvfRSZWZmNvm5tosuukjLly/XuHHjtH79ej355JMaM2aMunTponfeecen7/jx4xUSEuJzS9+SJUu0Z88ebuUDgBqEKAAIcNHR0ZKk4uLiBvXfsWOHHA6Hevbs6dOelJSk2NhY7dixw6e9a9eudbbRsWNHn+eK+vfvr8zMTM2dO9fbNnfuXHXu3NkbHg4ePKiCggLNmTNH8fHxPj833nijJN9JDiSpW7dudWqXVKf2+to2b96swsJCJSQk1Nnf0aNH6+yrIce5detWZWdn1+l34n6//fbbOvs8++yz6z3G+o6vV69edZZlZmbW+W/TGDk5OXrjjTd05MgRffXVV3rwwQdVXFysq6++Whs3bvT269Spk8aMGaM333xTZWVlkqqfkQoODta1117b5P0DQFvC7HwAEOCio6OVkpKib775plHreUZOTicoKKjedmOMz/vx48frj3/8ow4dOqSoqCi98847uv766xUcXP1/NW63W1L19NieSRFO1K9fP5/3tUehGsvtdishIUGvvPJKvcvj4+N93jf0OBuy3759+2rmzJn1Lk9LS2vU9ppbaGiocnJylJOTo7PPPls33nij5s2bp+nTp3v73HDDDVqwYIEWLFigcePGaf78+Ro9enSdcwYA7RUhCgDagMsuu0xz5szR8uXLNXTo0FP2TU9Pl9vt1ubNm9W7d29v+/79+1VQUKD09PQm1TB+/Hg98sgjmj9/vhITE1VUVKTrrrvOuzw+Pl5RUVFyuVyn/V6jU9UuSVu2bKmz7MS2Hj16aOHChRo2bNgZhbETt3m6sNqjRw+tX79eI0eObHBQ9fAc36ZNm7wjeB6bNm1q8n+bkxk8eLAkad++fT7t48aNU1RUlP71r38pJCRER44c4VY+AKiF2/kAoA24//77FRERoVtuuUX79++vs3zr1q165plnJEmXXHKJJOnpp5/26eMZObn00kubVEPv3r3Vt29fzZ07V3PnzlVycrJ+8pOfeJcHBQXpqquu0vz58+sNIgcPHjztPlJSUpSdna1//OMfOnr0qLd9yZIl2rBhg0/fa6+9Vi6XS4899lid7VRVVamgoKARR1ftqquu0vr16/Xmm2/WWeYZsbr22mu1Z88e/c///E+dPqWlpSopKTnp9gcPHqyEhATNnj3bZzr0999/X999912T/9ssWrSo3hE1z/NxJ94+GB4eriuvvFLvvfeeZs2apYiICF1++eVN2jcAtEWMRAFAG9CjRw/961//0vjx49W7d29NnDhR2dnZqqio0LJlyzRv3jzv9wj1799fkyZN0pw5c1RQUKDhw4frq6++0ksvvaQrrrhCF1xwQZPrGD9+vB5++GGFhYXp5ptvrvPFuE888YQWLVqkIUOGaMqUKcrKylJ+fr7WrFmjhQsXKj8//7T7ePzxx3X55Zdr2LBhuvHGG3XkyBE999xzys7O9glWw4cP12233aYZM2Zo3bp1Gj16tEJCQrR582bNmzdPzzzzjK6++upGHd99992n119/Xddcc41uuukmDRo0SPn5+XrnnXc0e/Zs9e/fX7/4xS/02muv6fbbb9eiRYs0bNgwuVwuff/993rttdf04YcfekeAThQSEqI//elPuvHGGzV8+HBdf/312r9/v5555hllZGTonnvuaVS9HnfeeaeOHTumK6+8UpmZmd7rYu7cucrIyPA+k1bbDTfcoH/84x/68MMPNWHCBEVERDRp3wDQJtk5NSAAoHn98MMPZsqUKSYjI8OEhoaaqKgoM2zYMPPXv/7VlJWVeftVVlaaRx55xHTr1s2EhISYtLQ08+CDD/r0MaZ66u9LL720zn6GDx9uhg8fXqd98+bNRpKRZJYuXVpvjfv37zdTp041aWlpJiQkxCQlJZmRI0eaOXPmePt4pjifN29evdv497//bTIzM43T6TTZ2dnmnXfeMVdddZXJzMys03fOnDlm0KBBJjw83ERFRZm+ffua+++/3+zdu7dJx3n48GFzxx13mC5dupjQ0FCTmppqJk2a5DNte0VFhfnTn/5k+vTpY5xOp+nYsaMZNGiQeeSRR0xhYWG9x1Tb3LlzzTnnnGOcTqeJi4szEyZMMLt37/bp05gpzt9//31z0003mczMTBMZGWlCQ0NNz549zZ133mn2799f7zpVVVUmOTnZSDLvvfdevX2Y4hxAe2UZ08gnZgEA8EMDBgxQfHy8Pv74Y7tLAQC0cTwTBQAIKJWVlaqqqvJpW7x4sdavX68RI0bYUxQAoF1hJAoAEFC2b9+uUaNG6YYbblBKSoq+//57zZ49WzExMfrmm2/UqVMnu0sEALRxTCwBAAgoHTt21KBBg/S///u/OnjwoCIiInTppZfqiSeeIEABAFoFI1EAAAAA0Ag8EwUAAAAAjUCIAgAAAIBGaNfPRLndbu3du1dRUVGyLMvucgAAAADYxBij4uJipaSk1Pmy+BO16xC1d+9epaWl2V0GAAAAAD+xa9cupaamnrJPuw5RUVFRkqpPVHR0tM3VAAAAALBLUVGR0tLSvBnhVNp1iPLcwhcdHU2IAgAAANCgx3yYWAIAAAAAGoEQBQAAAACNQIgCAAAAgEYgRAEAAABAIxCiAAAAAKARCFF+xhhjdwkAAAAAToEQ5SeeX7pNF/5lsf65YofdpQAAAAA4BUKUnzhaXqX/HCrRl9vy7S4FAAAAwCkQovxETkacJGnl9nxu6QMAAAD8GCHKTwxIi1VIkKX9ReXalV9qdzkAAAAAToIQ5SfCQ4OU3SVGUvVoFAAAAAD/RIjyI+fWuqUPAAAAgH8iRPkRz3NRXxGiAAAAAL9FiPIjgzM6SpL+c7BEh46W21wNAAAAgPoQovxIbIdQ9UqMkiStYjQKAAAA8EuEKD/jGY36atsRmysBAAAAUJ92GaJyc3OVlZWlnJwcu0up49xu1c9FrdrBSBQAAADgj9pliJo6dao2btyolStX2l1KHZ7JJb7dW6SS8iqbqwEAAABwonYZovxZSmy4usSGy+U2WrOTW/oAAAAAf0OI8kOeW/pWbuOWPgAAAMDfEKL8EN8XBQAAAPgvQpQfyqmZoW/drgJVVLltrgYAAABAbYQoP9QzIVKxHUJUVunWprxiu8sBAAAAUAshyg9ZlqW+XWIkSet3F9hbDAAAAAAfhCg/1T81VpL0NSEKAAAA8CuEKD/VN7V6JOrr3YU2VwIAAACgNkKUn/KMRP2wv1ilFS57iwEAAADgRYjyU0kxYUqIcsptpG/3MhoFAAAA+AtClB/rVzMatZ5b+gAAAAC/QYjyY/28z0UV2FsIAAAAAC9ClB/zhKgNjEQBAAAAfoMQ5cc8t/P951CJCksr7S0GAAAAgCRClF+LiwhVWly4JOmbPYxGAQAAAP6AEOXnjk8uUWBrHQAAAACqEaL8XL8uNZNL7GIkCgAAAPAHhCg/5xmJ2sDtfAAAAIBfIET5ub6pMbIsaU9BqQ4dLbe7HAAAAKDdI0T5uUhnsHrER0ri+6IAAAAAf0CICgCe74taz3NRAAAAgO0IUQHAM7kE05wDAAAA9iNEBYA+NSFq474imysBAAAAQIgKAJlJUZKkfYVlyi+psLkaAAAAoH0jRAWAqLAQpXfqIEn6jtEoAAAAwFaEqADRJyVakvTtXp6LAgAAAOxEiAoQWcnVIWrjXkaiAAAAADu1yxCVm5urrKws5eTk2F1Kg2XVjEQxuQQAAABgr3YZoqZOnaqNGzdq5cqVdpfSYH1Sqmfo23qwRGWVLpurAQAAANqvdhmiAlFClFOdIkLlchttyiu2uxwAAACg3SJEBQjLsrilDwAAAPADhKgA4g1RTC4BAAAA2IYQFUA8M/QxzTkAAABgH0JUAPF8V9T3ecVyuY3N1QAAAADtEyEqgHTrHKmwEIeOVbi043CJ3eUAAAAA7RIhKoAEOSxlJnlu6eO5KAAAAMAOhKgAwwx9AAAAgL0IUQHGM7kEM/QBAAAA9iBEBRjP5BLczgcAAADYgxAVYDKTouWwpENHy3WgqMzucgAAAIB2hxAVYMJDg9Stc4QknosCAAAA7ECICkC9a56L+m5fsc2VAAAAAO0PISoAHQ9RjEQBAAAArY0QFYCyCFEAAACAbQhRAcjzXVFbDx5VWaXL5moAAACA9oUQFYASopyKiwiV20g/7Oe5KAAAAKA1EaICkGVZ6p0cJYlb+gAAAIDWRogKUL2TmKEPAAAAsAMhKkB5Zujju6IAAACA1kWIClCeySW+21ckY4zN1QAAAADtByEqQPWIj1RIkKXisirtPlJqdzkAAABAu0GIClChwQ71TGByCQAAAKC1EaIC2PEZ+phcAgAAAGgthKgAlpV8/LkoAAAAAK2DEBXAspihDwAAAGh1hKgA5pnmfGf+MRWXVdpcDQAAANA+EKICWMeIUCVFh0mSNuXxXBQAAADQGghRAe745BLc0gcAAAC0BkJUgOvtfS6KkSgAAACgNRCiAlxvJpcAAAAAWhUhKsBlpVSHqE15RXK5jc3VAAAAAG0fISrAZXSKUFiIQ2WVbm0/XGJ3OQAAAECbR4gKcEEOS72S+NJdAAAAoLUQotqALGboAwAAAFoNIaoN8E4usZcQBQAAALQ0QlQbkJXsuZ2Pac4BAACAlkaIagMya0JUXlGZjpRU2FwNAAAA0LYRotqASGewusZ1kMRzUQAAAEBLI0S1Eb1rJpfgS3cBAACAlkWIaiO8k0sQogAAAIAWFfAhateuXRoxYoSysrLUr18/zZs3z+6SbNGbySUAAACAVhFsdwFnKjg4WE8//bQGDBigvLw8DRo0SJdccokiIiLsLq1VeWbo23KgWBVVboUGB3w+BgAAAPxSwH/STk5O1oABAyRJSUlJ6ty5s/Lz8+0tygapHcMVFRasSpfR1oNH7S4HAAAAaLNsD1GfffaZfvrTnyolJUWWZemtt96q0yc3N1cZGRkKCwvTkCFD9NVXX9W7rdWrV8vlciktLa2Fq/Y/lmWpd5Lnlj6eiwIAAABaiu0hqqSkRP3791dubm69y+fOnatp06Zp+vTpWrNmjfr3768xY8bowIEDPv3y8/M1ceJEzZkzpzXK9kveGfr2EqIAAACAlmL7M1EXX3yxLr744pMunzlzpqZMmaIbb7xRkjR79my9++67ev755/Xb3/5WklReXq4rrrhCv/3tb3XeeeeddFvl5eUqLy/3vi8qalthwzu5RF7bOi4AAADAn9g+EnUqFRUVWr16tUaNGuVtczgcGjVqlJYvXy5JMsZo8uTJuvDCC/WLX/zilNubMWOGYmJivD9t7ba/rJTjM/QZY2yuBgAAAGib/DpEHTp0SC6XS4mJiT7tiYmJysvLkyR98cUXmjt3rt566y0NGDBAAwYM0IYNG+rd3oMPPqjCwkLvz65du1r8GFrT2YlRclhSfkmFDhSXn34FAAAAAI1m++18Z+rHP/6x3G53g/o6nU45nc4Wrsg+YSFB6h4fqS0HjurbvYVKjA6zuyQAAACgzfHrkajOnTsrKChI+/fv92nfv3+/kpKSbKrKv/XtEiNJ+mYPz0UBAAAALcGvQ1RoaKgGDRqkTz75xNvmdrv1ySefaOjQoTZW5r+ya0LU17sLba4EAAAAaJtsv53v6NGj2rJli/f9tm3btG7dOsXFxalr166aNm2aJk2apMGDB+vcc8/V008/rZKSEu9sffB1fCSKEAUAAAC0BNtD1KpVq3TBBRd430+bNk2SNGnSJL344osaP368Dh48qIcfflh5eXkaMGCAPvjggzqTTaBan5RoWZaUV1Smg8Xlio9qu8+AAQAAAHawTDueC7uoqEgxMTEqLCxUdHS03eU0m5H/vVhbD5bohck5uiAzwe5yAAAAAL/XmGzg189EtZTc3FxlZWUpJyfH7lJaRL/UWEnSBm7pAwAAAJpdk0LUSy+9pHfffdf7/v7771dsbKzOO+887dixo9mKaylTp07Vxo0btXLlSrtLaRFMLgEAAAC0nCaFqMcff1zh4eGSpOXLlys3N1dPPvmkOnfurHvuuadZC0TjMbkEAAAA0HKaNLHErl271LNnT0nSW2+9pauuukq33nqrhg0bphEjRjRnfWgCJpcAAAAAWk6TRqIiIyN1+PBhSdJHH32kiy66SJIUFham0tLS5qsOTRLhDFb3zhGSGI0CAAAAmluTQtRFF12kW265Rbfccot++OEHXXLJJZKkb7/9VhkZGc1ZH5qIySUAAACAltGkEJWbm6uhQ4fq4MGDmj9/vjp16iRJWr16ta6//vpmLRBNw+QSAAAAQMto0jNRsbGxeu655+q0P/LII2dcEJoHk0sAAAAALaNJI1EffPCBli5d6n2fm5urAQMG6Oc//7mOHDnSbMW1lLb+PVFS3cklAAAAADSPJoWo++67T0VFRZKkDRs26N5779Ull1yibdu2adq0ac1aYEto698TJTG5BAAAANBSmhSitm3bpqysLEnS/Pnzddlll+nxxx9Xbm6u3n///WYtEE3H5BIAAABA82tSiAoNDdWxY8ckSQsXLtTo0aMlSXFxcd4RKtiPySUAAACA5tekiSV+/OMfa9q0aRo2bJi++uorzZ07V5L0ww8/KDU1tVkLRNP1S60OUet3F8gYI8uybK4IAAAACHxNGol67rnnFBwcrNdff12zZs1Sly5dJEnvv/++xo4d26wFoun6dolRsMPSweJy7T7ClyADAAAAzaFJI1Fdu3bVggUL6rQ/9dRTZ1wQmk9YSJD6dInR+l0FWrPziNLiOthdEgAAABDwmhSiJMnlcumtt97Sd999J0nq06ePxo0bp6CgoGYrDmduYNfY6hC144guH9DF7nIAAACAgNekELVlyxZdcskl2rNnj3r16iVJmjFjhtLS0vTuu++qR48ezVokmm5g14564YvtWr3T/7+/CwAAAAgETXom6q67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L891Wd/fYM+yvLw8JSQk+CwPDg5WXFwc13UjlZWV6YEHHtD111+v6Ohob/tdd92lgQMHKi4uTsuWLdODDz6offv2aebMmTZWGzjGjh2rn/3sZ+rWrZu2bt2q3/3ud7r44ou1fPlyBQUFcQ03o5deeklRUVF1blPnGm6Y+j6bNeSzQ15eXr1/pz3L7ECIQps1depUffPNNz7P60jyuQe8b9++Sk5O1siRI7V161b16NGjtcsMOBdffLH3db9+/TRkyBClp6frtddeU3h4uI2VtT1///vfdfHFFyslJcXbxvWLQFVZWalrr71WxhjNmjXLZ9m0adO8r/v166fQ0FDddtttmjFjhpxOZ2uXGnCuu+467+u+ffuqX79+6tGjhxYvXqyRI0faWFnb8/zzz2vChAkKCwvzaecabpiTfTYLRNzOZ7POnTsrKCiozgwk+/fvV1JSkk1VBb477rhDCxYs0KJFi5SamnrKvkOGDJEkbdmypTVKa3NiY2N19tlna8uWLUpKSlJFRYUKCgp8+nA9N96OHTu0cOFC3XLLLafsx/V7ZjzX5an+BiclJdWZ6Keqqkr5+flc1w3kCVA7duzQxx9/7DMKVZ8hQ4aoqqpK27dvb50C25ju3burc+fO3r8LXMPN4/PPP9emTZtO+3dZ4hquz8k+mzXks0NSUlK9f6c9y+xAiLJZaGioBg0apE8++cTb5na79cknn2jo0KE2VhaYjDG644479Oabb+rTTz9Vt27dTrvOunXrJEnJycktXF3bdPToUW3dulXJyckaNGiQQkJCfK7nTZs2aefOnVzPjfTCCy8oISFBl1566Sn7cf2emW7duikpKcnnmi0qKtKXX37pvWaHDh2qgoICrV692tvn008/ldvt9oZYnJwnQG3evFkLFy5Up06dTrvOunXr5HA46tyChobZvXu3Dh8+7P27wDXcPP7+979r0KBB6t+//2n7cg0fd7rPZg357DB06FBt2LDB5x8DPP8gk5WV1ToHciJbprOAj3//+9/G6XSaF1980WzcuNHceuutJjY21mcGEjTML3/5SxMTE2MWL15s9u3b5/05duyYMcaYLVu2mEcffdSsWrXKbNu2zbz99tume/fu5ic/+YnNlQeOe++91yxevNhs27bNfPHFF2bUqFGmc+fO5sCBA8YYY26//XbTtWtX8+mnn5pVq1aZoUOHmqFDh9pcdWBxuVyma9eu5oEHHvBp5/ptmuLiYrN27Vqzdu1aI8nMnDnTrF271js73BNPPGFiY2PN22+/bb7++mtz+eWXm27dupnS0lLvNsaOHWvOOecc8+WXX5qlS5eas846y1x//fV2HZJfOdX5raioMOPGjTOpqalm3bp1Pn+XPTNqLVu2zDz11FNm3bp1ZuvWreaf//yniY+PNxMnTrT5yPzHqc5xcXGx+c1vfmOWL19utm3bZhYuXGgGDhxozjrrLFNWVubdBtfwyZ3ub4QxxhQWFpoOHTqYWbNm1Vmfa/jUTvfZzJjTf3aoqqoy2dnZZvTo0WbdunXmgw8+MPHx8ebBBx+045CMMcYQovzEX//6V9O1a1cTGhpqzj33XLNixQq7SwpIkur9eeGFF4wxxuzcudP85Cc/MXFxccbpdJqePXua++67zxQWFtpbeAAZP368SU5ONqGhoaZLly5m/PjxZsuWLd7lpaWl5le/+pXp2LGj6dChg7nyyivNvn37bKw48Hz44YdGktm0aZNPO9dv0yxatKjevwuTJk0yxlRPc/7QQw+ZxMRE43Q6zciRI+uc+8OHD5vrr7/eREZGmujoaHPjjTea4uJiG47G/5zq/G7btu2kf5cXLVpkjDFm9erVZsiQISYmJsaEhYWZ3r17m8cff9wnALR3pzrHx44dM6NHjzbx8fEmJCTEpKenmylTptT5h1iu4ZM73d8IY4z529/+ZsLDw01BQUGd9bmGT+10n82Madhnh+3bt5uLL77YhIeHm86dO5t7773XVFZWtvLRHGcZY0wLDXIBAAAAQJvDM1EAAAAA0AiEKAAAAABoBEIUAAAAADQCIQoAAAAAGoEQBQAAAACNQIgCAAAAgEYgRAEAAABAIxCiAAAAAKARCFEAgDZlxIgRuvvuu+0uAwDQhlnGGGN3EQAANJf8/HyFhIQoKipKGRkZuvvuuwlVAIBmFWx3AQAANKe4uLhm32ZFRYVCQ0ObfbsAgMDE7XwAgDbFczvfiBEjtGPHDt1zzz2yLEuWZXn7LF26VOeff77Cw8OVlpamu+66SyUlJd7lGRkZeuyxxzRx4kRFR0fr1ltvVUVFhe644w4lJycrLCxM6enpmjFjhh2HCACwGSEKANAmvfHGG0pNTdWjjz6qffv2ad++fZKkrVu3auzYsbrqqqv09ddfa+7cuVq6dKnuuOMOn/X/8pe/qH///lq7dq0eeughPfvss3rnnXf02muvadOmTXrllVeUkZFhw5EBAOzG7XwAgDYpLi5OQUFBioqKUlJSkrd9xowZmjBhgvc5qbPOOkvPPvushg8frlmzZiksLEySdOGFF+ree+/1rrdz506dddZZ+vGPfyzLspSent6qxwMA8B+MRAEA2pX169frxRdfVGRkpPdnzJgxcrvd2rZtm7ff4MGDfdabPHmy1q1bp169eumuu+7SRx991NqlAwD8BCNRAIB25ejRo7rtttt011131VnWtWtX7+uIiAifZQMHDtS2bdv0/vvva+HChbr22ms1atQovf766y1eMwDAvxCiAABtVmhoqFwul0/bwIEDtXHjRvXs2bPR24uOjtb48eM1fvx4XX311Ro7dqzy8/NbZEZAAID/4nY+AECblZGRoc8++0x79uzRoUOHJEkPPPCAli1bpjvuuEPr1q3T5s2b9fbbb9eZWOJEM2fO1Kuvvqrvv/9eP/zwg+bNm6ekpCTFxsa2wpEAAPwJIQoA0GY9+uij2r59u3r06KH4+HhJUr9+/bRkyRL98MMPOv/883XOOefo4YcfVkpKyim3FRUVpSeffFKDBw9WTk6Otm/frvfee08OB/9XCgDtjWWMMXYXAQAAAACBgn8+AwAAAIBGIEQBAAAAQCMQogAAAACgEQhRAAAAANAIhCgAAAAAaARCFAAAAAA0AiEKAAAAABqBEAUAAAAAjUCIAgAAAIBGIEQBAAAAQCMQogAAAACgEf4/0Bu6Dy1WprQAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pyplot.figure(figsize=(10, 3), dpi=100).set_facecolor(\"white\")\n", + "pyplot.plot(losses)\n", + "pyplot.xlabel(\"iters\")\n", + "pyplot.ylabel(\"loss\")\n", + "pyplot.yscale(\"log\")\n", + "pyplot.title(\"Convergence of SVI\");" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1kAAAGJCAYAAAB4oPk1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC9YklEQVR4nOzdd3hUVfrA8e+dnkmZFFKBJIQSEnpHQMEVBEQURUUFBetPBV1lXcuqFF3BFQuCWBcpKooFsICIsAYQEJEmSKgJJEB6TyZtZu7vjyEDMQkkkDAJvJ/nmSczt5z73knEeeec8x5FVVUVIYQQQgghhBD1QuPuAIQQQgghhBDiUiJJlhBCCCGEEELUI0myhBBCCCGEEKIeSZIlhBBCCCGEEPVIkiwhhBBCCCGEqEeSZAkhhBBCCCFEPZIkSwghhBBCCCHqkSRZQgghhBBCCFGPJMkSQgghhBBCiHokSZYQQggmTJhAZGRkpW2KojBt2jS3xCOqmjZtGoqiNJl2hRDiciZJlhBCuFFiYiKTJk2iXbt2mM1mzGYzsbGxTJw4kT/++MPd4TW4JUuWMHv2bHeHIdzou+++Y+DAgQQFBWE2m4mKiuK2225j9erVALzxxhsoisLatWtrbOPDDz9EURS+/fZbAAYNGkTHjh0vSvxCCFEdSbKEEMJNvv/+ezp27MjHH3/M4MGDefPNN3nrrbcYPnw4q1atomvXrhw7dsxt8RUXF/P888836DUkyXK/559/nuLiYrdc+7XXXuOGG25AURSeffZZ3nzzTUaPHs2hQ4f4/PPPAbj99tvRaDQsWbKkxnaWLFlCQEAAw4cPv1ihCyHEWencHYAQQlyOjhw5wu23305ERATr1q0jNDS00v7//Oc/vPPOO2g0Z/8urKioCE9PzwaJ0WQyNUi7jV1DvqeNScV96nQ6dLqL/3HAZrPx0ksvMWTIENasWVNlf3p6OgBhYWFcffXVLFu2jHfffRej0VjpuBMnTrBhwwYefPBB9Hr9RYldCCHORXqyhBDCDV599VWKiopYsGBBlQQLQKfT8dhjj9GyZUvXtgkTJuDl5cWRI0e47rrr8Pb2ZuzYsQBs3LiRW2+9lfDwcIxGIy1btuSJJ56otodixYoVdOzYEZPJRMeOHVm+fHm1MVY3J+vEiRPce++9BAcHYzQa6dChAx999FGlY+Li4lAUhS+++IKXX36ZFi1aYDKZuOaaazh8+LDruEGDBrFy5UqOHTuGoigoilJlXlh1MU2aNMl1DxUxVAwtO9POnTsZPnw4Pj4+eHl5cc011/Drr79WOmbhwoUoisL69et55JFHCAoKokWLFq74OnbsyB9//MHAgQMxm820adOGr776CoD169fTp08fPDw8iI6OrjKcraCggMcff5zIyEiMRiNBQUEMGTKEHTt2nPUeAX755Rd69eqFyWSidevWvP/++1WOOXr0KIqisHDhwmrfpzN/dxXzrvbt28edd96Jn58fAwYMqLTvfN/nuLg4evbsWSnW2szzyszMJD8/n/79+1e7PygoyPV83Lhx5OXlsXLlyirHff755zgcDtd/C0II0RhIT5YQQrjB999/T5s2bejTp0+dzrPZbAwdOpQBAwbw2muvYTabAfjyyy+xWq08/PDDBAQE8NtvvzF37lyOHz/Ol19+6Tp/zZo1jB49mtjYWGbOnElWVhb33HOPK7E4m7S0NPr27ev6AB4YGMgPP/zAfffdR35+Po8//nil41955RU0Gg1PPvkkeXl5vPrqq4wdO5atW7cC8Nxzz5GXl8fx48d58803AfDy8jpnHL/88gvLli3jkUcewdvbmzlz5jB69GiSkpIICAgA4M8//+TKK6/Ex8eHp556Cr1ez/vvv8+gQYNcydGZHnnkEQIDA5kyZQpFRUWu7Tk5OVx//fXcfvvt3Hrrrbz77rvcfvvtfPrppzz++OM89NBD3HnnncyaNYtbbrmF5ORkvL29AXjooYf46quvmDRpErGxsWRlZfHLL78QHx9P9+7da7y/PXv2cO211xIYGMi0adOw2WxMnTqV4ODgc74353LrrbfStm1bZsyYgaqqZz22Nu/zzp07GTZsGKGhoUyfPh273c6LL75IYGDgOWMJCgrCw8OD7777jkcffRR/f/8aj7355pt5+OGHWbJkCTfffHOlfUuWLCEiIqLGZE0IIdxCFUIIcVHl5eWpgDpq1Kgq+3JyctSMjAzXw2q1uvaNHz9eBdRnnnmmynlnHldh5syZqqIo6rFjx1zbunbtqoaGhqq5ubmubWvWrFEBNSIiotL5gDp16lTX6/vuu08NDQ1VMzMzKx13++23qxaLxRXDzz//rAJqTEyMWlpa6jrurbfeUgF1z549rm0jRoyoct2zAVSDwaAePnzYtW33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jhw5AjhL00+aNInQ0FBMJhMRERHMnDnTdY/Tpk0jPDwco9FIWFgYjz32mKvdvw4X3L9/PwMGDMBkMhEbG8vatWtRFIUVK1YAcPToURRFYdmyZVx99dWYzWa6dOnCli1bXG0sXLgQX19fvv/+e6KjozGbzdxyyy1YrVYWLVpEZGQkfn5+PPbYY5XqC5SWlvLkk0/SvHlzPD096dOnD3FxcVXa/fHHH4mJicHLy4thw4aRkpICwLRp01i0aBHffPMNiqKgKEql86tTcT+ff/45/fr1w2Qy0bFjR9avX+86pmLY3w8//ECPHj0wGo388ssvlJaW8thjjxEUFITJZGLAgAHVfjbftGkTnTt3xmQy0bdvX/bu3evad+zYMUaOHImfnx+enp506NCBVasavqOi0Re+EFWNbD2S2TtmE58dz9CvhtLatzWzr56NQXv+q1ILIYQQQtS34nI7sVN+dMu19704FLOh9h91i4qKmDx5Mp07d6awsJApU6Zw0003sWvXLubMmcO3337LF198QXh4OMnJySQnJwPw9ddf8+abb/L555/ToUMHUlNT2b17d7XXsNvtjBo1ivDwcLZu3UpBQQH/+Mc/qj32ueee47XXXqNt27Y899xz3HHHHRw+fBidznlPVquVOXPm8Pnnn1NQUMDNN9/MTTfdhK+vL6tWrSIhIYHRo0fTv39/xowZAziLxe3bt4/PP/+csLAwli9fzrBhw9izZw9t27Z1tfvaa6/x8ccfo9FoGDduHE8++SSffvopTz75JPHx8eTn57NgwQIA/P39a/X+/vOf/2T27NnExsbyxhtvMHLkSBITEwkICHAd88wzz/Daa68RFRWFn58fTz31FF9//TWLFi0iIiKCV199laFDh3L48OFK1/3nP//JW2+9RUhICP/6178YOXIkBw8eRK/XM3HiRMrKytiwYQOenp7s27cPLy+vWsV8ISTJaoL8TH6MbD2SZYeWcbLoJCeLTrL++HqGRAxxd2hCCCGEEE3S6NGjK73+6KOPCAwMZN++fSQlJdG2bVsGDBiAoihERES4jktKSiIkJITBgwej1+sJDw+nd+/e1V7jp59+4siRI8TFxRESEgLAyy+/zJAhVT/DPfnkk4wYMQKA6dOn06FDBw4fPkz79u0BKC8v591336V169YA3HLLLXz88cekpaXh5eVFbGwsV199NT//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i/M7/DjHw4vzO7w4v8OPczy8OL/DazTM7/lWsHqw8QUREREREVEMMcgiIiIiIiKKIQZZY4jdbscTTzwBu90e76GMS5zf4cX5HX6c4+HF+R1enN/hxzkeXpzf4TXW5peNL4iIiIiIiGKIK1lEREREREQxxCCLiIiIiIgohhhkERERERERxRCDLCIiIiIiohhikDVGrF+/HpMmTYLD4UBFRQU++eSTeA9pTHryySehKEqfn+nTp0eO+/1+LF++HBkZGXC5XPjOd76DxsbGOI549NuxYwduuOEG5OfnQ1EUvPnmm32OCyHw+OOPIy8vD06nE5WVlTh8+HCfc9ra2nDbbbchOTkZqampuPPOO+HxeEbwLkavgeb3xz/+8VnP9LXXXtvnHM5v/1atWoX58+cjKSkJ2dnZuOmmm1BVVdXnnGh+L5w4cQLXX389EhISkJ2djV/84hfQdX0kb2VUimZ+r7rqqrOe4Z/97Gd9zuH8ntvzzz+P2bNnRzZnXbhwId59993IcT67F26gOebzG1tPP/00FEXBAw88EHlvrD7HDLLGgI0bN+Khhx7CE088gT179qC8vBxLlixBU1NTvIc2Jn3jG99AfX195OfDDz+MHHvwwQfx9ttv47XXXsP27dtRV1eHpUuXxnG0o5/X60V5eTnWr19/zuPPPPMM1q5dixdeeAEff/wxEhMTsWTJEvj9/sg5t912G7744gts2bIF77zzDnbs2IG77757pG5hVBtofgHg2muv7fNMv/zyy32Oc377t337dixfvhx///vfsWXLFoRCIVxzzTXwer2Rcwb6vWAYBq6//noEg0Hs3LkT//3f/40NGzbg8ccfj8ctjSrRzC8A3HXXXX2e4WeeeSZyjPPbv8LCQjz99NPYvXs3PvvsM1x99dW48cYb8cUXXwDgsxsLA80xwOc3Vj799FO8+OKLmD17dp/3x+xzLGjUW7BggVi+fHnktWEYIj8/X6xatSqOoxqbnnjiCVFeXn7OYx0dHcJqtYrXXnst8t5XX30lAIhdu3aN0AjHNgBi06ZNkdemaYrc3FyxevXqyHsdHR3CbreLl19+WQghxJdffikAiE8//TRyzrvvvisURRGnT58esbGPBV+fXyGEWLZsmbjxxhv7/Qznd3CampoEALF9+3YhRHS/F/785z8LVVVFQ0ND5Jznn39eJCcni0AgMLI3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REQUQwyyiIiIiIiIYohBFhERERERUQwxyCIiIiIiIoohBllEREREREQxxCCLiIiIiIgohhhkERERERERxRCDLCIimlCuuuoqPPDAA/EeBhERjWOKEELEexBEREQjpa2tDVarFUlJSZg0aRIeeOABBl1ERBRTlngPgIiIaCSlp6fH/JrBYBA2my3m1yUiorGJ6YJERDSh9KQLXnXVVaitrcWDDz4IRVGgKErknA8//BBXXHEFnE4nioqKcN9998Hr9UaOT5o0Cf/6r/+K22+/HcnJybj77rsRDAaxYsUK5OXlweFwoKSkBKtWrYrHLRIRUZwxyCIiognpjTfeQGFhIZ566inU19ejvr4eAHD06FFce+21+M53voP9+/dj48aN+PDDD7FixYo+n/+3f/s3lJeXY+/evXjsscewdu1a/M///A9effVVVFVV4Y9//CMmTZoUhzsjIqJ4Y7ogERFNSOnp6dA0DUlJScjNzY28v2rVKtx2222ROq2ysjKsXbsWV155JZ5//nk4HA4AwNVXX42HH3448rkTJ06grKwMl19+ORRFQUlJyYjeDxERjR5cySIiIjrD559/jg0bNsDlckV+lixZAtM0UVNTEznv0ksv7fO5H//4x9i3bx+mTZuG++67D5s3bx7poRMR0SjBlSwiIqIzeDwe/PSnP8V999131rHi4uLIvxMTE/scu+SSS1BTU4N3330X7733Hr73ve+hsrISr7/++rCPmYiIRhcGWURENGHZbDYYhtHnvUsuuQRffvklpk6dOujrJScn49Zbb8Wtt96KW265Bddeey3a2tqGpaMhERGNXkwXJCKiCWvSpEnYsWMHTp8+jZaWFgDAL3/5S+zcuRMrVqzAvn37cPjwYbz11ltnNb74umeffRYvv/wyDh06hOrqarz22mvIzc1FamrqCNwJERGNJgyyiIhownrqqadw/PhxTJkyBVlZWQCA2bNnY/v27aiursYVV1yBuXPn4vHHH0d+fv55r5WUlIRnnnkGl156KebPn4/jx4/jz3/+M1SV/1NLRDTRKEIIEe9BEBERERERjRf88xoREREREVEMMcgiIiIiIiKKIQZZREREREREMcQgi4iIiIiIKIYYZBEREREREcUQgywiIiIiIqIYYpBFREREREQUQwyyiIiIiIiIYohBFhERERERUQwxyCIiIiIiIoohBllEREREREQx9P8Dsr+GtDWUqeQAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pyplot.figure(figsize=(10, 4), dpi=100).set_facecolor(\"white\")\n", + "for name, grad_norms in gradient_norms.items():\n", + " pyplot.plot(grad_norms, label=name)\n", + "pyplot.xlabel(\"iters\")\n", + "pyplot.ylabel(\"gradient norm\")\n", + "pyplot.yscale(\"log\")\n", + "pyplot.legend(loc=\"best\")\n", + "pyplot.title(\"Gradient norms during SVI\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can now examine the guide's local `assignment_probs` variable." + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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wNTUFMnJycWymoFCkf0Hy+uvew6ZDHBwAGJjS9QIPQDtjp2IiEopbT45Mfa3pk6+plUXgIWHh8PDw0OlzNPTE+Hh4fnuk56ejpSUFJVHcTp+PP/XHQCEAO7cya5X0mhz7EREVEpp88mJsb8XWpXMJiQkwMbGRqXMxsYGKSkpePHiRZ77+Pv7w9TUVHoU992/4uOLtt77pM2xExFRKaXNJyfG/l5oVTL7NqZMmYLk5GTpcefOnWLtz86uaOu9T9ocOxERlVLafHJi7O+FViWztra2SExMVClLTEyEiYkJDAwM8txHX19futvX+7jrV6tW2VNI8rthhUwGODpm1ytptDl2IiIqpbT55MTY3wutSmbd3NwQHBysUnbo0CG4ublpKKLcdHWBn37K/vn11z/neUBAyZvnDWh37EREVEpp88mJsb8XGk1mU1NTERkZicjISADZS29FRkbi9u3bALKnCPTr10+qP3ToUNy6dQsTJ07E1atX8fPPP+OPP/7A2LFjNRF+vrp2BXbsACpVUi13cMgu79pVM3EVhjbHTkREpZQ2n5wYe7HT6NJcoaGhaNu2ba5yb29vbNiwAT4+PoiLi0NoaKjKPmPHjkVUVBQcHBwwffp0+Pj4FLrP4l6a61Ul/IYZBdLm2ImIqJTS5pMTY1eLOvlaiVln9n15n8ksEREREamv1K4zS0RERET0KiazRERERKS1mMwSERERkdZiMktEREREWovJLBERERFpLSazRERERKS1mMwSERERkdZiMktEREREWovJLBERERFpLSazRERERKS1mMwSERERkdZiMktEREREWovJLBERERFpLSazRERERKS1mMwSERERkdZiMktEREREWovJLBERERFpLSazRERERKS1mMwSERERkdZiMktEREREWkvtZDYtLa044iAiIiIiUpvayayNjQ0GDBiAEydOFEc8RERERESFpnYy++uvv+Lx48do164dPvjgA8yfPx/3798vjtiIiIiIiAqkdjLbpUsX7N69G/fu3cPQoUPx+++/w8nJCZ07d8bOnTuRlZVVHHESEREREeUiE0KId21k2bJlmDBhAjIyMmBlZYWhQ4di8uTJMDQ0LIoYi1RKSgpMTU2RnJwMExMTTYdDRERERK9RJ18r97adJCYmYuPGjdiwYQP+++8/dOvWDQMHDsTdu3exYMECnDp1CgcPHnzb5omIiIiI3kjtZHbnzp1Yv349Dhw4gNq1a2P48OH4+uuvYWZmJtVp3rw5atWqVZRxEhERERHlonYy279/f/Tq1QthYWFo1qxZnnXs7e3x3XffvXNwREREREQFUXvO7PPnz0vkXNjC4pxZIiIiopJNnXxN7dUMjI2N8eDBg1zljx49gq6urrrNERERERG9NbWT2fwGctPT06Gnp/fOARERERERFVah58wuXboUACCTyfDLL7/AyMhI2qZQKHDs2DHUrFlT7QACAwOxaNEiJCQkoEGDBli2bBk+/PDDfOsHBARgxYoVuH37NqysrNCtWzf4+/tDLper3TcRERERabdCJ7M//vgjgOyR2ZUrV6pMKdDT04OzszNWrlypVufbtm3DuHHjsHLlSri6uiIgIACenp6IiYmBtbV1rvq///47Jk+ejHXr1qF58+a4du0afHx8IJPJsGTJErX6JiIiIiLtp/YFYG3btsXOnTthbm7+zp27urqiWbNmWL58OQBAqVTC0dERo0aNwuTJk3PVHzlyJKKjoxEcHCyVffvttzh9+jROnDhRqD55ARgRERFRyVasF4CFhIQUSSKbkZGBiIgIeHh4/C8YHR14eHggPDw8z32aN2+OiIgInDlzBgBw69Yt7N+/H506dcq3n/T0dKSkpKg8iIiIiKh0KNQ0g3HjxmHOnDmoUKECxo0bV2Ddwn7dn5SUBIVCARsbG5VyGxsbXL16Nc99evfujaSkJLRs2RJCCGRlZWHo0KGYOnVqvv34+/tj1qxZhYqJiIiIiLRLoZLZCxcuIDMzU/o5PzKZrGiiykdoaCjmzZuHn3/+Ga6urrhx4wZ8fX0xZ84cTJ8+Pc99pkyZopKAp6SkwNHRsVjjJCIiIqL3o1DJbEhISJ4/vwsrKyvo6uoiMTFRpTwxMRG2trZ57jN9+nT07dsXgwYNAgDUq1cPaWlp+Oabb/Ddd99BRyf3rAl9fX3o6+sXScxEREREVLKoPWe2qOjp6aFJkyYqF3MplUoEBwfDzc0tz32eP3+eK2HNWVVBzevYiIiIiKgUKNTIbNeuXQvd4M6dOwtdd9y4cfD29kbTpk3x4YcfIiAgAGlpaejfvz8AoF+/fqhUqRL8/f0BAF5eXliyZAkaNWokTTOYPn06vLy8ePcxIiIiojKoUMmsqalpsXTes2dPPHz4EDNmzEBCQgIaNmyIoKAg6aKw27dvq4zETps2DTKZDNOmTcO9e/dQsWJFeHl5Ye7cucUSHxERERGVbGqvM6vtuM4sERERUclWrOvMEhERERGVFIWaZtC4cWMEBwfD3NwcjRo1KnAJrvPnzxdZcEREREREBSlUMvv5559Ly1t16dKlOOMhIiIiIio0zpklIiIiohJFnXytUCOzeTl37hyio6MBALVr10aTJk3etikiIiIioreidjJ79+5dfPXVVwgLC4OZmRkA4OnTp2jevDm2bt0KBweHoo6RiIiIiChPaq9mMGjQIGRmZiI6OhqPHz/G48ePER0dDaVSKd1mloiIiIjofVB7zqyBgQFOnjyJRo0aqZRHRESgVatWeP78eZEGWNQ4Z5aIiIioZCvWdWYdHR2RmZmZq1yhUMDe3l7d5oiIiIiI3prayeyiRYswatQonDt3Tio7d+4cfH19sXjx4iINjoiIiIioIIWaZmBubq5yo4S0tDRkZWWhXLns68dyfq5QoQIeP35cfNEWAU4zICIiIirZinxproCAgKKIi4iIiIioSBUqmfX29i7uOIiIiIiI1PbWN00AgJcvXyIjI0OljF/dExEREdH7ovYFYGlpaRg5ciSsra1RoUIFmJubqzyIiIiIiN4XtZPZiRMn4siRI1ixYgX09fXxyy+/YNasWbC3t8emTZuKI0YiIiIiojypPc3g77//xqZNm9CmTRv0798frVq1QrVq1eDk5ITffvsNffr0KY44iYiIiIhyUXtk9vHjx6hSpQqA7PmxOUtxtWzZEseOHSva6IiIiIiICqB2MlulShXExsYCAGrWrIk//vgDQPaIrZmZWZEGR0RERERUELWT2f79++PixYsAgMmTJyMwMBByuRxjx47FhAkTijxAIiIiIqL8FOoOYAWJi4vD+fPnUa1aNdSvX7+o4io2vAMYERERUclW5HcAK4izszOcnZ3ftRkiIiIiIrWpPc0AAIKDg9G5c2dUrVoVVatWRefOnXH48OGijo2IiIiIqEBqJ7M///wzOnbsCGNjY/j6+sLX1xcmJibo1KkTAgMDiyNGIiIiIqI8qT1n1sHBAZMnT8bIkSNVygMDAzFv3jzcu3evSAMsapwzS0RERFSyqZOvqT0y+/TpU3Ts2DFXeYcOHZCcnKxuc0REREREb03tZPazzz7Drl27cpXv2bMHnTt3LpKgiIiI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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "assignment_probs = pyro.param(\"assignment_probs\")\n", + "pyplot.figure(figsize=(8, 3), dpi=100).set_facecolor(\"white\")\n", + "pyplot.plot(\n", + " data.data.numpy(),\n", + " assignment_probs.data.numpy()[:, 0],\n", + " \"ro\",\n", + " label=f\"component with mean {locs[0]:0.2g}\",\n", + ")\n", + "pyplot.plot(\n", + " data.data.numpy(),\n", + " assignment_probs.data.numpy()[:, 1],\n", + " \"bo\",\n", + " label=f\"component with mean {locs[1]:0.2g}\",\n", + ")\n", + "pyplot.title(\"Mixture assignment probabilities\")\n", + "pyplot.xlabel(\"data value\")\n", + "pyplot.ylabel(\"assignment probability\")\n", + "pyplot.legend(loc=\"center\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## MCMC\n", + "\n", + "Next we'll explore the full posterior over component parameters using collapsed NUTS, i.e. we'll use NUTS and marginalize out all discrete latent variables." + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Sample: 100%|██████████████████████████████████████████| 300/300 [00:12, 23.57it/s, step size=4.38e-01, acc. prob=0.951] \n" + ] + } + ], + "source": [ + "from pyro.infer.mcmc.api import MCMC\n", + "from pyro.infer.mcmc import NUTS\n", + "\n", + "pyro.set_rng_seed(2)\n", + "kernel = NUTS(model)\n", + "mcmc = MCMC(kernel, num_samples=250, warmup_steps=50)\n", + "mcmc.run(data)\n", + "posterior_samples = mcmc.get_samples()" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [], + "source": [ + "X, Y = posterior_samples[\"locs\"].T" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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fHzxxRdYW1uzYcMGOnbsyF9//UWnTp0SxThy5EhcXV357rvviIyMTPa5TJw4kUmTJtG0aVNGjBjBrVu3mDdvHmfOnOH48eOJvqkODAykVatW9OzZkw8++CDhMn9S9u7dS5cuXShdujQ//fQTgYGBDBw4MCHJed2wYcNYtmwZAwcOZOzYsdy/f5/Zs2dz4cKFt2Lw9fWla9eufPjhh/Tv358lS5YwYMAAqlSpQpkyZRKe008//cTgwYOpXr06YWFhnD17lvPnz9OsWbMk4125cmXC8kOHDgXAx8eHmjVr4u3tzerVq986xqtXr8bHx4datWolexzu3bvH1q1b6datG4ULF8bPz48FCxbQoEEDrl+/jpeXF2AaajR27Fi6du3KuHHjiImJ4fLly5w6dYrevXsnu32j0Uj79u05duwYQ4cOpVSpUly5coU//viD27dvJ8wZuXbtGm3btqV8+fJMnjwZtVqNr69vwslcqVKlmDx5Mt999x1Dhw6lXr16ANSuXTvZfccfg9jYWMaMGUNQUBC//PIL3bt3p3Hjxhw6dIjPP/8cX19fZs2axSeffMKSJUsS1l22bBk2NjZ89NFH2NjYcODAAb777jvCwsL49ddfAfj6668JDQ3lyZMn/PHHHwDY2Nik67mD6W901apV9O7dm9q1a3PgwAHatGmT4nN709SpU5HJZHz++ef4+/szffp0mjZtysWLF9FoNPTt25fJkyezfv36RGP3Y2Nj2bRpE126dMHS0jLZ7V++fJl69eqhUqkYOnQohQoV4u7du2zfvp2pU6cCpt9jvXr1sLOz47PPPkOlUrFgwQIaNmzI4cOHqVGjRrqe04wZM2jfvj19+vQhNjaWdevW0a1bN3bs2PHW8Tl8+DDr169n7NixqNVq5s6dS8uWLTl9+jRly5YFYPjw4WzatInRo0dTunRpAgMDOXbsGDdu3KBy5coAHDhwgFatWlGlShW+//575HI5S5cupXHjxhw9epTq1asDpiFM8e+ZEydORK/X8/3336f4vpOU3r17M2XKFCZPnkynTp1yfOK3m5sbGo2G7du3M2bMGJycnHJ0/4KQIZIgCFlu6dKlEiDt379fCggIkB4/fiytW7dOcnZ2ljQajfTkyRPp4sWLEiANHjw40bqffPKJBEgHDhyQJEmStmzZIgHSmTNnkt1fQECABEjff//9W481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ExISEmjYsCEeHh689NJLDB482BkZAYiMjKRBgwY0btyYNWvWUKBAAY4ePUpQUJDTxhQRkZzj9IFzTOw/k+7vdODEvtMsGbsi3WdciIjIvTPY7faMHVt6XUpKCseOHSMuLo4qVarg6+vr6Gz/MHLkSH777Td+/fXXTF8jJiaGgIAAGtEGs8Htv98gIiIiIpKHWeypbGAV0dHR+Pv73/W1mTrHAsDd3Z0qVapQr149p5cKgG+++YY6derw3HPPUbBgQWrVqsWsWbOcPq6IiIiIiPy3DE+Fio+P54MPPmDdunWEh4djs/3zNvOJEyccFu7f150+fTojRozgtddeY/v27QwZMgR3d3e6det22/ckJyffPGcD0u5YiIiIiIiI42W4WPTu3ZuNGzfSpUsXChcujMFgcEauW9hsNurUqXPzEL5atWqxf/9+ZsyYccdiMXbsWN5+++0sySciIiIikpdluFisWbOG1atX06BBA2fkuaPChQtTpUqVfzxXuXJlvv766zu+Z9SoUYwYMeLm45iYGIoXL+60jCIiIiIieVWGi0VQUBDBwcHOyHJXDRo04PDhw/947siRI5QsWfKO7/Hw8MDDw8PZ0URERERE8rwML95+9913eeONN0hISHBGnjsaPnw4W7ZsYcyYMRw7dozFixczc+ZMBg4cmKU5RERERETkVhnebrZWrVocP34cu91OqVKlcHP757atu3btcmjAv/vuu+8YNWoUR48epXTp0owYMYI+ffqk+/3ablZEREREJP0yst1shqdCtW3bNrO57lnLli1p2bKly8YXEREREZHby3CxePPNN52RQ0REREREcrAMF4sbdu7cycGDBwGoWrUqtWrVclgoERERERHJWTJcLMLDw+nQoQMbNmwgMDAQgKioKBo3bszSpUspUKCAozOKiIiIiEg2l+FdoQYPHkxsbCx//fUX165d49q1a+zfv5+YmBiGDBnijIwiIiIiIpLNZfiOxQ8//MDatWupXLnyzeeqVKnC1KlTefzxxx0aTkREREREcoYM37Gw2Wy3bDEL4Obmhs1mc0goERERERHJWTJcLB577DGGDh3KhQsXbj53/vx5hg8fTpMmTRwaTkREREREcoYMF4spU6YQExNDqVKlKFu2LGXLlqV06dLExMQwefJkZ2QUEREREZFsLsNrLIoXL86uXbtYu3Ythw4dAqBy5co0bdrU4eFERERERCRnyNQ5FgaDgWbNmtGsWTNH5xERERERkRwow1OhANatW0fLli1vToVq2bIla9eudXQ2ERERERHJITJcLKZNm8YTTzyBn58fQ4cOZejQofj7+/Pkk08ydepUZ2QUEREREZFszmC32+0ZeUOxYsUYOXIkgwYN+sfzU6dOZcyYMZw/f96hAR0pJiaGgIAAGtEGs+HWLXNFREREROT/WeypbGAV0dHR+Pv73/W1Gb5jERUVxRNPPHHL848//jjR0dEZvZyIiIiIiOQCGS4WrVu3ZsWKFbc8v2rVKlq2bOmQUCIiIiIikrNkeFeoKlWq8P7777Nhwwbq168PwJYtW/jtt9948cUXmTRp0s3XDhkyxHFJRUREREQk28rwGovSpUun78IGAydOnMhUKGfRGgsRERERkfTLyBqLDN+xOHnyZKaDiYiIiIhI7pSpcyxERERERET+LsN3LOx2O1999RXr168nPDwcm832j+8vX77cYeFERERERCRnyHCxGDZsGGFhYTRu3JhChQphMBickUtERERERHKQDBeLBQsWsHz5cp588kln5BERERERkRwow2ssAgICKFOmjDOyiIiIiIhIDpXhYvHWW2/x9ttvk5iY6Iw8IiIiIiKSA2V4KtTzzz/PkiVLKFiwIKVKlcLN7Z/nQezatcth4UREREREJGfIcLHo1q0bO3fupHPnzlq8LSIiIiIiQCaKxerVq/nxxx95+OGHnZFHRERERERyoAyvsShevPh/HuctIiIiIiJ5S4aLxaeffsorr7zCqVOnnBBHRERERERyogxPhercuTMJCQmULVsWb2/vWxZvX7t2zWHhREREREQkZ8hwsZgwYYITYoiIiIiISE6WqV2hRERERERE/i7DxQLAarWycuVKDh48CEDVqlVp3bo1JpPJoeFERERERCRnyHCxOHbsGE8++STnz5+nYsWKAIwdO5bixYuzevVqypYt6/CQIiIiIiKSvWV4V6ghQ4ZQtmxZzp49y65du9i1axdnzpyhdOnSDBkyxBkZRUREREQkm8vwHYuNGzeyZcsWgoODbz6XL18+PvjgAxo0aODQcCIiIiIikjNk+I6Fh4cHsbGxtzwfFxeHu7u7Q0KJiIiIiEjOkuFi0bJlS/r27cvWrVux2+3Y7Xa2bNlCv379aN26tTMyioiIiIhINpfhYjFp0iTKli1L/fr18fT0xNPTkwYNGlCuXDkmTpzojIwiIiIiIpLNZXiNRWBgIKtWreLYsWM3t5utXLky5cqVc3g4ERERERHJGTJ1jgVAuXLlVCZERERERATIxFSoZ555hg8//PCW5z/66COee+45h4QSEREREZGcJcPFYtOmTTz55JO3PN+iRQs2bdrkkFAiIiIiIpKzZLhY3GlbWTc3N2JiYhwSSkREREREcpYMF4vq1avzxRdf3PL80qVLqVKlikNCiYiIiIhIzpLhxdujR4/m6aef5vjx4zz22GMArFu3jiVLlvDll186PKCIiIiIiGR/GS4WrVq1YuXKlYwZM4avvvoKLy8vatSowdq1a3n00UedkVFERERERLK5TG03+9RTT/HUU085OouIiIiIiORQGV5jISIiIiIi8m8qFiIiIiIics9ULERERERE5J6lq1jofAoREREREbmbdBWLoKAgwsPDAXjssceIiopyZiYREREREclh0lUsfH19iYiIAGDDhg2kpqY6NZSIiIiIiOQs6dputmnTpjRu3JjKlSsD0K5dO9zd3W/72l9++cVx6UREREREJEdIV7FYuHAh8+bN4/jx42zcuJGqVavi7e3t7GwiIiIiIpJDpKtYeHl50a9fPwB27NjBhx9+SGBgoDNziYiIiIhIDpLhk7fXr19/85/tdjsABoPBcYlERERERCTHydQ5FvPnz6d69ep4eXnh5eVFjRo1WLBggaOziYiIiIhIDpHhOxbjxo1j9OjRDBo0iAYNGgCwefNm+vXrx9WrVxk+fLjDQ4qIiIiISPaW4WIxefJkpk+fTteuXW8+17p1a6pWrcpbb72lYiEiIiIikgdleCrUxYsXeeihh255/qGHHuLixYsOCSUiIiIiIjlLhotFuXLlWLZs2S3Pf/HFF5QvX94hoUREREREJGfJ8FSot99+m/bt27Np06abayx+++031q1bd9vCISIiIiIiuV+G71g888wzbN26lfz587Ny5UpWrlxJ/vz52bZtG+3atXNGRhERERERyeYyfMcC4P7772fhwoWOziIiIiIiIjlUps6xEBERERER+TsVCxERERERuWcqFiIiIiIics9ULERERERE5J5luFhER0dz7dq1W56/du0aMTExDgklIiIiIiI5S4aLRYcOHVi6dOktzy9btowOHTo4JJSIiIiIiOQsGS4WW7dupXHjxrc836hRI7Zu3eqQUCIiIiIikrNkuFgkJydjsVhueT41NZXExESHhBIRERERkZwlw8WiXr16zJw585bnZ8yYwf333++QUCIiIiIikrNk+OTt9957j6ZNm7J3716aNGkCwLp169i+fTs//fSTwwPeyQcffMCoUaMYOnQoEyZMyLJxRURERETkVhm+Y9GgQQP++OMPihUrxrJly/j2228pV64cf/75J4888ogzMt5i+/bthIWFUaNGjSwZT0RERERE7i7DdywAatasyeLFix2dJV3i4uLo1KkTs2bN4r333nNJBhERERER+adMFQur1crKlSs5ePAgAFWrVqV169aYTCaHhrudgQMH8tRTT9G0adP/LBbJyckkJyfffKxzNkREREREnCPDxeLYsWM89dRTnDt3jooVKwIwduxYihcvzurVqylbtqzDQ96wdOlSdu3axfbt29P1+rFjx/L22287LY+IiIiIiKTJ8BqLIUOGUKZMGc6ePcuuXbvYtWsXZ86coXTp0gwZMsQZGQE4e/YsQ4cOZdGiRXh6eqbrPaNGjSI6Ovrm19mzZ52WT0REREQkLzPY7XZ7Rt7g4+PDli1bqF69+j+e37t3Lw0aNCAuLs6hAW9YuXIl7dq1+8d0K6vVisFgwGg0kpyc/J9TsWJiYggICKARbTAb3JySU0REREQkt7DYU9nAKqKjo/H397/razM8FcrDw4PY2Nhbno+Li8Pd3T2jl0u3Jk2asG/fvn8816NHDypVqsSrr76aJes7RERERETk9jJcLFq2bEnfvn2ZPXs29erVA2Dr1q3069eP1q1bOzzgDX5+flSrVu0fz/n4+JAvX75bnhcRERER1ypesQila5Tk95XbsaRaXB1HskCGi8WkSZPo1q0b9evXx80tbTqRxWKhdevWTJw40eEBRURERCRnqfxgBUI/6Yqbu5kaDasQ9uI8UlNULnK7DK+xuOHo0aMcOnQIgMqVK1OuXDmHBnMGrbEQERERca5qD1eiz4ddMLv9/zT1wzuOM2PEPFKSUlyYTDIjI2ssMl0sciIVCxERERHnqfFoFXqP7YTJbGLPhr/Y+MVvhH7aDU9vD47uPsn0YXNITlS5yEkcXixGjBiR7sHHjRuX7tdmNRULEREREeeo9Vg1erz/AiaTkV3r9jHnf0uwWW2UqlaCwZN74enjwYl9p5k6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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pyplot.figure(figsize=(8, 8), dpi=100).set_facecolor(\"white\")\n", + "h, xs, ys, image = pyplot.hist2d(X.numpy(), Y.numpy(), bins=[20, 20])\n", + "pyplot.contour(\n", + " np.log(h + 3).T,\n", + " extent=[xs.min(), xs.max(), ys.min(), ys.max()],\n", + " colors=\"white\",\n", + " alpha=0.8,\n", + ")\n", + "pyplot.title(\"Posterior density as estimated by collapsed NUTS\")\n", + "pyplot.xlabel(\"loc of component 0\")\n", + "pyplot.ylabel(\"loc of component 1\")\n", + "pyplot.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that due to nonidentifiability of the mixture components the likelihood landscape has two equally likely modes, near `(11,0.5)` and `(0.5,11)`. NUTS has difficulty switching between the two modes." + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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3HADBg0ahPj4eMyZMwdNmzZFamqqR7/HG+fwhIiICLz//vu48847cdVVV2H48OGoXLkyjh49ip9++gldu3a1KXWs+IwbNw4DBgyAv78/hg8fjh49emDs2LGYMmUKtm3bhv79+yMwMBD79+/H4sWLMWvWLNx88835LltgYCBeeeUVjB07Fr1798att96K+Ph4fPLJJw45Bs2aNUOnTp0wYcIEmzfoyy+/NAnpRUlQUBAmT56MRx55BL1798awYcNw+PBhzJs3D/Xq1StwiB57DZzNx1GlShW88MILeO6559C9e3cMHToU5cqVw19//YWFCxeif//+GDJkSL6vuX37dtx222245ppr0K1bN1SoUAEnTpzA/PnzcfLkScycObNQYUEF4c4778SiRYtw//33Y9WqVejatStyc3Oxd+9eLFq0yDYvhjumTp2KVatWoWPHjhgzZgyaNm2KCxcuYMuWLfjtt9+czu/hjuJs0wXBaxT/QEiCUPpxNVypq6E0161bpzp16qRCQ0NVXFycevrpp9Uvv/zidDjAP//8U/Xr10+VL19ehYWFqZYtW6q3337bdMzBgwfVXXfdpWJjY1VgYKCqVq2aGjx4sPr666/dlpuHCZwxY4Z64403VI0aNVRwcLDq1q2b2r59u+lY++FKlVIqOztbvfjii6pOnToqMDBQ1ahRQ02YMME0zJ5SNJTloEGDVPny5T0aijElJUU9/vjjKi4uTgUGBqoGDRqoGTNmOAwPWpjhSpVS6syZM2rUqFGqUqVKKigoSLVo0cI0ZCKTk5OjZsyYoRo3bqyCgoJU5cqV1TXXXKM2b96c5zWbNWumNm3apDp37qxCQkJUrVq11DvvvGM6zmq1qtdee03VqlVLBQcHqzZt2qilS5equ+++W9WqVct2nPF52VPYczgb3lIpPaznP//843D8gAEDVGRkpAoJCVH16tVTI0eOVJs2bTLdt0ceeURVrlxZWSwWh/ozd+5c1bZtWxUaGqrKly+vWrRooZ5++mnbkJtKOR+KMi/ee+89VadOHRUcHKzatWun/vjjD6fP/+DBg6pv374qODhYxcTEqGeffVatWLHC6XClruqZq+FK7e+jsyE5lVJq9uzZtmfWoUMHtW7dOtW2bVs1cODAPH+nq3uzf/9+5e/v77QcSin12WefqU6dOqmwsDAVHBysGjdurF588UWH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0EE99NBDtu3c3FwVFxenpkyZUoKlEoqCSZMmqVatWjn9LDExUQUGBqrFixfb9u3Zs0cBUOvXry+mEgpFDQD13Xff2batVquKjY1VM2bMsO1LTExUwcHBauHChUoppXbv3q0AqH/++cd2zLJly5TFYlEnTpwotrIL3sG+Diil1N13362uu+46l9+ROlC2SEhIUADUmjVrlFKetf8///yz8vPzU6dPn7Yd8/7776uIiAiVmZlZvD9AKDT2dUAppXr06KEeffRRl9/xpTogHoMiIisrC5s3b0bfvn1t+/z8/NC3b1+sX7++BEsmFBX79+9HXFwc6tati9tvvx1Hjx4FAGzevBnZ2dmmutC4cWPUrFlT6kIZJj4+HqdPnzY998jISHTs2NH23NevX4+oqCi0a9fOdkzfvn3h5+eHjRs3FnuZhaJh9erVqFKlCho1aoQHHngA58+ft30mdaBskZSUBACoUKECAM/a//Xr16NFixaIiYmxHTNgwAAkJydj165dxVh6wRvY1wHm888/R6VKldC8eXNMmDABaWlpts98qQ4EFOvVriDOnTuH3Nxc00MGgJiYGOzdu7eESiUUFR07dsS8efPQqFEjnDp1Ci+++CK6deuGnTt34vTp0wgKCkJUVJTpOzExMTh9+nTJFFgocvjZOmsD+LPTp0+jSpUqps8DAgJQoUIFqRtlhIEDB+LGG29EnTp1cPDgQTz77LO45pprsH79evj7+0sdKENYrVY89thj6Nq1K5o3bw4AHrX/p0+fdtpO8GdC6cFZHQCA2267DbVq1UJcXBx27NiB//u//8O+ffvw7bffAvCtOiCKgSB4gWuuuca23rJlS3Ts2BG1atXCokWLEBoaWoIlEwShJBk+fLhtvUWLFmjZsiXq1auH1atXo0+fPiVYMsHbPPTQQ9i5c6cpv0y4snBVB4w5Qy1atEDVqlXRp08fHDx4EPXq1SvuYrpFQomKiEqVKsHf399h5IEzZ84gNja2hEolFBdRUVFo2LAhDhw4gNjYWGRlZSExMdF0jNSFsg0/W3dtQGxsrMNgBDk5Obhw4YLUjTJK3bp1UalSJRw4cACA1IGywsMPP4ylS5di1apVqF69um2/J+1/bGys03aCPxNKB67qgDM6duwIAKZ2wFfqgCgGRURQUBDatm2L33//3bbParXi999/R+fOnUuwZEJxkJqaioMHD6Jq1apo27YtAgMDTXVh3759OHr0qNSFMkydOnUQGxtreu7JycnYuHGj7bl37twZiYmJ2Lx5s+2YlStXwmq12joOoWxx/PhxnD9/HlWrVgUgdaC0o5TCww8/jO+++w4rV65EnTp1TJ970v537twZ//77r0lBXLFiBSIiItC0adPi+SFCgcmrDjhj27ZtAGBqB3ymDhRrqvMVxpdffqmCg4PVvHnz1O7du9V9992noqKiTFnnQtngySefVKtXr1bx8fFq3bp1qm/fvqpSpUoqISFBKaXU/fffr2rWrKlWrlypNm3apDp37qw6d+5cwqUWCktKSoraunWr2rp1qwKg3nzzTbV161Z15MgRpZRSU6dOVVFRUer7779XO3bsUNddd52qU6eOSk9Pt51j4MCBqk2bNmrjxo3qzz//VA0aNFAjRowoqZ8k5BN3dSAlJUWNHz9erV+/XsXHx6vffvtNXXXVVapBgwYqIyPDdg6pA6WXBx54QEVGRqrVq1erU6dO2f7S0tJsx+TV/ufk5KjmzZur/v37q23btqnly5erypUrqwkTJpTETxLySV514MCBA+qll15SmzZtUvHx8er7779XdevWVd27d7edw5fqgCgGRczbb7+tatasqYKCglSHDh3Uhg0bSrpIQhFw6623qqpVq6qgoCBVrVo1deutt6oDBw7YPk9PT1cPPvigio6OVuXKlVM33HCDOnXqVAmWWPAGq1atUgAc/u6++26lFA1Z+vzzz6uYmBgVHBys+vTpo/bt22c6x/nz59WIESNUeHi4ioiIUKNGjVIpKSkl8GuEguCuDqSlpan+/furypUrq8DAQFWrVi01ZswYB+OQ1IHSi7NnD0B98skntmM8af8PHz6srrnmGhUaGqoqVaqknnzySZWdnV3Mv0YoCHnVgaNHj6ru3burChUqqODgYFW/fn311FNPqaSkJNN5fKUOWC7/KEEQBEEQBEEQrmAkx0AQBEEQBEEQBFEMBEEQBEEQBEEQxUAQBEEQBEEQBIhiIAiCIAiCIAgCRDEQBEEQBEEQBAGiGAiCIAiCIAiCAFEMBEEQBEEQBEGAKAaCIAiCIAiCIEAUA0EQBEEQBEEQIIqBIAhCmWTkyJGwWCyYOnWqaf+SJUtgsVhs2/PmzUNUVJTTc1gsFixZsgSTJ0+GxWJx+wcAZ8+exQMPPICaNWsiODgYsbGxGDBgANatW1eg3zB58mS0bt26QN8VBEEQ8o8oBoIgCGWUkJAQTJs2DRcvXizUecaPH49Tp07Z/qpXr46XXnrJtA8AbrrpJmzduhXz58/Hf//9hx9++AE9e/bE+fPnvfFzBEEQhCJGFANBEIQySt++fREbG4spU6YU6jzh4eGIjY21/fn7+6N8+fKmfYmJiVi7di2mTZuGXr16oVatWujQoQMmTJiAoUOHujz36tWr0aFDB4SFhSEqKgpdu3bFkSNHMG/ePLz44ovYvn27zSsxb948AEBiYiLuvfdeVK5cGREREejduze2b99uOyd7Gj744APUqFED5cqVw7Bhw5CUlFSo+yAIglDWEcVAEAShjOLv74/XXnsNb7/9No4fP16k1woPD0d4eDiWLFmCzMxMj76Tk5OD66+/Hj169MCOHTuwfv163HfffbBYLLj11lvx5JNPolmzZjavxK233goAuOWWW5CQkIBly5Zh8+bNuOqqq9CnTx9cuHDBdu4DBw5g0aJF+PHHH7F8+XJs3boVDz74YJH8dkEQhLKCKAaCIAhlmBtuuAGtW7fGpEmTivQ6AQEBmDdvHubPn2+z/D/77LPYsWOHy+8kJycjKSkJgwcPRr169dCkSRPcfffdqFmzJkJDQxEeHo6AgACbVyI0NBR//vkn/v77byxevBjt2rVDgwYN8PrrryMqKgpff/217dwZGRn49NNP0bp1a3Tv3h1vv/02vvzyS5w+fbpI74MgCEJpRhQDQRCEMs60adMwf/587Nmzp0ivc9NNN+HkyZP44YcfMHDgQKxevRpXXXWVLQTIngoVKmDkyJEYMGAAhgwZglmzZtnyFVyxfft2pKamomLFijYvRXh4OOLj43Hw4EHbcTVr1kS1atVs2507d4bVasW+ffu88lsFQRDKIqIYCIIglHG6d++OAQMGYMKECQ6fRURE4NKlS7Barab9iYmJAIDIyMh8XSskJAT9+vXD888/j7/++gsjR45066345JNPsH79enTp0gVfffUVGjZsiA0bNrg8PjU1FVWrVsW2bdtMf/v27cNTTz2Vr7IKgiAIZkQxEARBuAKYOnUqfvzxR6xfv960v1GjRsjJycG2bdtM+7ds2QIAaNiwYaGu27RpU1y6dMntMW3atMGECRPw119/oXnz5vjiiy8AAEFBQcjNzTUde9VVV+H06dMICAhA/fr1TX+VKlWyHXf06FGcPHnStr1hwwb4+fmhUaNGhfo9giAIZRlRDARBEK4AWrRogdtvvx2zZ8827W/WrBn69++Pe+65B7///jvi4+OxfPlyPPjgg7j11ltN4TjuOH/+PHr37o3PPvsMO3bsQHx8PBYvXozp06fjuuuuc/qd+Ph4TJgwAevXr8eRI0fw66+/Yv/+/WjSpAkAoHbt2oiPj8e2bdtw7tw5ZGZmom/fvujcuTOuv/56/Prrrzh8+DD++usvTJw4EZs2bbKdOyQkBHfffTe2b9+OtWvXYty4cRg2bBhiY2MLeAcFQRDKPgElXQBBEASheHjppZfw1VdfOez/6quvMGnSJIwdOxYnT55E9erVccMNN+D555/3+Nzh4eHo2LEj3nrrLRw8eBDZ2dmoUaMGxowZg2effdbpd8qVK4e9e/di/vz5OH/+PKpWrYqHHnoIY8eOBUA5C99++y169eqFxMREfPLJJxg5ciR+/vlnTJw4EaNGjcLZs2cRGxuL7t27IyYmxnbu+vXr48Ybb8S1116LCxcuYPDgwXjvvffyeccEQRCuLCxKKVXShRAEQRAEbzF58mQsWbLEITxKEARBcI+EEgmCIAiCIAiCIIqBIAiCIAiCIAgSSiQIgiAIgiAIAsRjIAiCIAiCIAgCRDEQBEEQBEEQBAGiGAiCIAiCIAiCAFEMBEEQBEEQBEGAKAaCIAiCIAiCIEAUA0EQBEEQBEEQIIqBIAiCIAiCIAgQxUAQBEEQBEEQBIhiIAiCIAiCIAgCgP8HE/t0vJfAvy8AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pyplot.figure(figsize=(8, 3), dpi=100).set_facecolor(\"white\")\n", + "pyplot.plot(X.numpy(), color=\"red\")\n", + "pyplot.plot(Y.numpy(), color=\"blue\")\n", + "pyplot.xlabel(\"NUTS step\")\n", + "pyplot.ylabel(\"loc\")\n", + "pyplot.title(\"Trace plot of loc parameter during NUTS inference\")\n", + "pyplot.tight_layout()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.16" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/gp.ipynb b/pyro/source/tutorial/source/gp.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..5dec630c20b51de6eb13c08937a4d708ab6a9d45 --- /dev/null +++ b/pyro/source/tutorial/source/gp.ipynb @@ -0,0 +1,1540 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Gaussian Processes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Introduction\n", + "\n", + "[Gaussian Processes](https://en.wikipedia.org/wiki/Gaussian_process) have been used in supervised, unsupervised, and even reinforcement learning problems and are described by an elegant mathematical theory (for an overview of the subject see [1, 4]). They are also very attractive conceptually, since they offer an intuitive way to define priors over functions. And finally, since Gaussian Processes are formulated in a Bayesian setting, they come equipped with a powerful notion of uncertainty. \n", + "\n", + "Happily, Pyro offers some support for Gaussian Processes in the `pyro.contrib.gp` module. The goal of this tutorial is to give a brief introduction to Gaussian Processes (GPs) in the context of this module. We will mostly be focusing on how to use the GP interface in Pyro and refer the reader to the references for more details about GPs in general.\n", + "\n", + "The model we're interested in is defined by\n", + "$$f \\sim \\mathcal{GP}\\left(0, \\mathbf{K}_f(x, x')\\right)$$\n", + "\n", + "and\n", + "$$y = f(x) + \\epsilon,\\quad \\epsilon \\sim \\mathcal{N}\\left(0, \\beta^{-1}\\mathbf{I}\\right).$$\n", + "\n", + "Here $x, x' \\in\\mathbf{X}$ are points in the input space and $y\\in\\mathbf{Y}$ is a point in the output space. $f$ is a draw from the GP prior specified by the kernel $\\mathbf{K}_f$ and represents a function from $\\mathbf{X}$ to $\\mathbf{Y}$. Finally, $\\epsilon$ represents Gaussian observation noise.\n", + "\n", + "We will use the [radial basis function kernel](https://en.wikipedia.org/wiki/Radial_basis_function_kernel) (RBF kernel) as the kernel of our GP:\n", + "$$ k(x,x') = \\sigma^2 \\exp\\left(-\\frac{\\|x-x'\\|^2}{2l^2}\\right).$$\n", + "\n", + "Here $\\sigma^2$ and $l$ are parameters that specify the kernel; specifically, $\\sigma^2$ is a variance or amplitude squared and $l$ is a lengthscale. We'll get some intuition for these parameters below." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Imports" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, we import necessary modules." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import matplotlib.pyplot as plt\n", + "import torch\n", + "import numpy as np\n", + "\n", + "\n", + "import pyro\n", + "import pyro.contrib.gp as gp\n", + "import pyro.distributions as dist\n", + "\n", + "from matplotlib.animation import FuncAnimation\n", + "from mpl_toolkits.axes_grid1 import make_axes_locatable\n", + "\n", + "import seaborn as sns\n", + "from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay\n", + "\n", + "\n", + "smoke_test = \"CI\" in os.environ # ignore; used to check code integrity in the Pyro repo\n", + "assert pyro.__version__.startswith('1.9.1')\n", + "pyro.set_rng_seed(0)\n", + "torch.set_default_tensor_type(torch.DoubleTensor)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Throughout the tutorial we'll want to visualize GPs. So we define a helper function for plotting:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# note that this helper function does three different things:\n", + "# (i) plots the observed data;\n", + "# (ii) plots the predictions from the learned GP after conditioning on data;\n", + "# (iii) plots samples from the GP prior (with no conditioning on observed data)\n", + "\n", + "\n", + "def plot(\n", + " plot_observed_data=False,\n", + " plot_predictions=False,\n", + " n_prior_samples=0,\n", + " model=None,\n", + " kernel=None,\n", + " n_test=500,\n", + " ax=None,\n", + "):\n", + "\n", + " if ax is None:\n", + " fig, ax = plt.subplots(figsize=(12, 6))\n", + " if plot_observed_data:\n", + " ax.plot(X.numpy(), y.numpy(), \"kx\")\n", + " if plot_predictions:\n", + " Xtest = torch.linspace(-0.5, 5.5, n_test) # test inputs\n", + " # compute predictive mean and variance\n", + " with torch.no_grad():\n", + " if type(model) == gp.models.VariationalSparseGP:\n", + " mean, cov = model(Xtest, full_cov=True)\n", + " else:\n", + " mean, cov = model(Xtest, full_cov=True, noiseless=False)\n", + " sd = cov.diag().sqrt() # standard deviation at each input point x\n", + " ax.plot(Xtest.numpy(), mean.numpy(), \"r\", lw=2) # plot the mean\n", + " ax.fill_between(\n", + " Xtest.numpy(), # plot the two-sigma uncertainty about the mean\n", + " (mean - 2.0 * sd).numpy(),\n", + " (mean + 2.0 * sd).numpy(),\n", + " color=\"C0\",\n", + " alpha=0.3,\n", + " )\n", + " if n_prior_samples > 0: # plot samples from the GP prior\n", + " Xtest = torch.linspace(-0.5, 5.5, n_test) # test inputs\n", + " noise = (\n", + " model.noise\n", + " if type(model) != gp.models.VariationalSparseGP\n", + " else model.likelihood.variance\n", + " )\n", + " cov = kernel.forward(Xtest) + noise.expand(n_test).diag()\n", + " samples = dist.MultivariateNormal(\n", + " torch.zeros(n_test), covariance_matrix=cov\n", + " ).sample(sample_shape=(n_prior_samples,))\n", + " ax.plot(Xtest.numpy(), samples.numpy().T, lw=2, alpha=0.4)\n", + "\n", + " ax.set_xlim(-0.5, 5.5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Data\n", + "\n", + "The data consist of $20$ points sampled from\n", + "$$ y = 0.5\\sin(3x) + \\epsilon, \\quad \\epsilon \\sim \\mathcal{N}(0, 0.2).$$\n", + "\n", + "with $x$ sampled uniformly from the interval $[0, 5]$." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "N = 20\n", + "X = dist.Uniform(0.0, 5.0).sample(sample_shape=(N,))\n", + "y = 0.5 * torch.sin(3 * X) + dist.Normal(0.0, 0.2).sample(sample_shape=(N,))\n", + "\n", + "plot(plot_observed_data=True) # let's plot the observed data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Define model\n", + "\n", + "First we define a RBF kernel, specifying the values of the two hyperparameters `variance` and `lengthscale`. Then we construct a `GPRegression` object. Here we feed in another hyperparameter, `noise`, that corresponds to $\\epsilon$ above." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "kernel = gp.kernels.RBF(\n", + " input_dim=1, variance=torch.tensor(6.0), lengthscale=torch.tensor(0.05)\n", + ")\n", + "gpr = gp.models.GPRegression(X, y, kernel, noise=torch.tensor(0.2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's see what samples from this GP function prior look like. Note that this is _before_ we've conditioned on the data. The shape these functions take—their smoothness, their vertical scale, etc.—is controlled by the GP kernel." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot(model=gpr, kernel=kernel, n_prior_samples=2)\n", + "_ = plt.ylim((-8, 8))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For example, if we keep the same `variance` and `noise` and increase the `lengthscale`, we will see smoother function samples." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "kernel2 = gp.kernels.RBF(\n", + " input_dim=1, variance=torch.tensor(6.0), lengthscale=torch.tensor(1)\n", + ")\n", + "gpr2 = gp.models.GPRegression(X, y, kernel2, noise=torch.tensor(0.2))\n", + "plot(model=gpr2, kernel=kernel2, n_prior_samples=2)\n", + "_ = plt.ylim((-8, 8))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, if we make `variance` and `noise` smaller we will see function samples with smaller vertical amplitude." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsEAAAFpCAYAAAB9FvVqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAAsTAAALEwEAmpwYAABmFUlEQVR4nO39d2xkWZomdj/nhvdBMoKeTKZj+iyX5U13dbWfNrOjNbPQLuSghgSZXUnASvsNIEH/SfoEfVpAgoDG7goQdrGr2ZmenZm2Vd1V3dXVXS4zK6vSZ5LJpHfBYHgf93x/vHFvRDDJTGaSaeP5AQQZZPDGZRjGc9/7nnOU1hpERERERJ3EeNg7QERERET0oDEEExEREVHHYQgmIiIioo7DEExEREREHYchmIiIiIg6DkMwEREREXWcXQnBSqn/Sil1USl1QSn1r5RS3t3YLhERERHR/bDjEKyUGgLwXwI4pbU+DsAB4I93ul0iIiIiovtlt9ohnAB8SiknAD+AhV3aLhERERHRrttxCNZazwP4XwHMAFgEkNZav73T7RIRERER3S/OnW5AKdUF4PsA9gJIAfg3Sqm/p7X+Fxuu9wMAPwCAQCDw3OHDh3d600REREREt3XmzJmE1jq+8fs7DsEAvgpgSmu9CgBKqR8BeAVAWwjWWv8QwA8B4NSpU/r06dO7cNNERERERFtTSk1v9v3d6AmeAfCSUsqvlFIA3gJweRe2S0RERER0X+xGT/DHAP4MwFkA5xvb/OFOt0tEREREdL/sRjsEtNb/A4D/YTe2RURERER0v3HFOCIiIiLqOAzBRERERNRxGIKJiIiIqOMwBBMRERFRx2EIJiIiIqKOwxBMRERERB2HIZiIiIiIOg5DMBERERF1HIZgIiIiIuo4DMFERERE1HEYgomIiIio4zAEExEREVHHYQgmIiIioo7DEExEREREHYchmIiIiIg6DkMwEREREXUchmAiIiIi6jgMwURERETUcRiCiYiIiKjjMAQTERERUcdhCCYiIiKijsMQTEREREQdhyGYiIiIiDoOQzARERERdRyGYCIiIiLqOAzBRERERNRxGIKJiIiIqOMwBBMRERFRx2EIJiIiIqKOwxBMRERERB2HIZiIiIiIOg5DMBERERF1nF0JwUqpqFLqz5RSV5RSl5VSL+/GdomIiIiI7gfnLm3nnwD4udb6byql3AD8u7RdIiIiIqJdt+MQrJSKAHgDwL8PAFrrCoDKTrdLRERERHS/7EY7xF4AqwD+b6XUZ0qpf6qUCmy8klLqB0qp00qp06urq7tws0RERERE92Y3QrATwLMA/i+t9TMA8gD+u41X0lr/UGt9Smt9Kh6P78LNEhERERHdm90IwXMA5rTWHzcu/xkkFBMRERERPZJ2HIK11ksAZpVShxrfegvApZ1ul4iIiIjoftmt2SH+CwD/sjEzxA0A/8EubZeIiIiIaNftSgjWWp8DcGo3tkVEREREdL9xxTgiIiIi6jgMwURERETUcRiCiYiIiKjjMAQTERERUcdhCCYiIiKijsMQTEREREQdhyGYiIiIiDoOQzARERERdRyGYCIiIiLqOAzBRERERNRxGIKJiIiIqOMwBBMRERFRx2EIJiIiIqKOwxBMRERERB2HIZiIiIiIOg5DMBERERF1HIZgIiIiIuo4DMFERERE1HEYgomIiIio4zAEExEREVHHYQgmIiIioo7DEExEREREHYchmIiIiIg6DkMwEREREXUchmAiIiIi6jgMwURERETUcRiCiYiIiKjjMAQTERERUcdhCCYiIiKijsMQTEREREQdhyGYiIiIiDoOQzARERERdZxdC8FKKYdS6jOl1I93a5tERERERPfDblaC/wGAy7u4PSIiIiKi+2JXQrBSahjAHwD4p7uxPSIiIiKi+2m3KsH/O4B/BMDc6gpKqR8opU4rpU6vrq7u0s0SEREREd29HYdgpdR3AKxorc/c7npa6x9qrU9prU/F4/Gd3iwRERER0T3bjUrwqwC+p5S6CeBfA/iKUupf7MJ2iYiIiIjuix2HYK31P9ZaD2utxwD8MYB3tdZ/b8d7RkRERER0n3CeYCIiIiLqOM7d3JjW+tcAfr2b2yQiIiIi2m2sBBMRERFRx2EIJiIiIqKOwxBMRERERB2HIZiIiIiIOg5DMBERERF1HIZgIiIiIuo4DMFERERE1HEYgomIiIio4zAEExEREVHHYQgmIiIioo7DEExEREREHYchmIiIiIg6DkMwEREREXUchmAiIiIi6jgMwURERETUcRiCiYiIiKjjMAQTERERUcdhCCYiIiKijsMQTEREREQdhyGYiIiIiDoOQzARERERdRyGYCIiIiLqOAzBRERERNRxGIKJiIiIqOMwBBMRERFRx2EI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emlX95KIiIiIaBfdMQRvRWt9HkCvdVkpdRPAKa11Yhf2i4iIiIjovuE8wURERETUce65EryR1npst7ZFRERERHQ/sRJMRERERB2HIZiIiIiIOg5DMBERERF1HIZgIiIiIuo4DMFERERE1HEYgomIiIio4zAEExEREVHHYQgmIiIioo7DEExEREREHYchmIiIiIg6DkMwEREREXUchmAiIiIi6jgMwURERETUcRiCiYiIiKjjMAQTERERUcdhCCYiIiKijsMQTEREREQdhyGYiIiIiDoOQzARERERdRyGYCIiIiLqOAzBRERERNRxGIKJiIiIqOMwBBMRERFRx2EIJiIiIqKOwxBMRERERB2HIZiIiIiIOg5DMBERERF1HIZgIiIiIuo4DMFERERE1HEYgomIiIio4zAEExEREVHHYQgmIiIioo6z4xCslPovlFJXlFIXlVL/y27sFBERERHR/eTcyS8rpd4E8H0AT2mty0qp3t3ZLSIiIiKi+2enleD/FMD/pLUuA4DWemXnu0REREREdH/tNASPA3hdKfWxUuo3Sqnnt7qiUuoHSqnTSqnTq6urO7xZIiIiIqJ7d8d2CKXULwH0b/KjP2n8fjeAlwA8D+BPlVL7tNZ645W11j8E8EMAOHXq1C0/JyIiIiJ6UO4YgrXWX93qZ0qp/xTAjxqh9xOllAkgBoClXiIiIiJ6ZO20HeLfAngTAJRS4wDcABI73CYRERER0X21o9khAPxzAP9cKXUBQAXAv7dZKwQRERER0aNkRyFYa10B8Pd2aV+IiIiIiB4IrhhHRERERB2HIZiIiIiIOg5DMBERERF1HIZgIiIiIuo4DMFERERE1HEYgomIiIio4zAEExEREVHHYQgmIiIioo7DEExEREREHYchmIiIiIg6DkMwEREREXUchmAiIiIi6jgMwURERETUcRiCiYiIiKjjMAQTERERUcdhCCYiIiKijsMQTEREREQdhyGYiIiIiDoOQzARERERdRyGYCIiIiLqOAzBRERERNRxGIKJiIiIqOMwBBMRERFRx2EIJiIiIqKOwxBMRERERB2HIZiIiIiIOg5DMBERERF1HIZgIiIiIuo4DMFERERE1HEYgomIiIio4zAEExEREVHH2VEIVko9rZT6SCl1Til1Win1wm7tGBERERHR/bLTSvD/AuB/1Fo/DeC/b1wmIiIiInqk7TQEawDhxtcRAAs73B4RERER0X3n3OHv/0MAv1BK/a+QQP3KjveIiIiIiOg+u2MIVkr9EkD/Jj/6EwBvAfivtNZ/rpT62wD+GYCvbrGdHwD4QeNiTil19d52+bEQA5B42DtB94SP3eONj9/jjY/f44uP3ePtSX/89mz2TaW1vuctKqXSAKJaa62UUgDSWuvwnX7vSaeUOq21PvWw94PuHh+7xxsfv8cbH7/HFx+7x1unPn477QleAPClxtdfAXB9h9sjIiIiIrrvdtoT/B8D+CdKKSeAEprtDkREREREj6wdhWCt9QcAntulfXmS/PBh7wDdMz52jzc+fo83Pn6PLz52j7eOfPx21BNMRERERPQ44rLJRERERNRxGIJ3kVLqm0qpq0qpCaXUf/ew94e2Tyn1z5VSK0qpCw97X+juKaVGlFLvKaUuKaUuKqX+wcPeJ9oepZRXKfWJUurzxmP3Pz7sfaK7o5RyKKU+U0r9+GHvC90dpdRNpdR5pdQ5pdTph70/DxrbIXaJUsoB4BqArwGYA/ApgL+rtb70UHeMtkUp9QaAHID/R2t9/GHvD90dpdQAgAGt9VmlVAjAGQB/yNffo68xvWZAa51TSrkAfADgH2itP3rIu0bbpJT6rwGcAhDWWn/nYe8PbZ9S6iaAU1rrJ3mO4C2xErx7XgAwobW+obWuAPjXAL7/kPeJtklr/T6A5MPeD7o3WutFrfXZxtdZAJcBDD3cvaLt0CLXuOhqfLA685hQSg0D+AMA//Rh7wvR3WII3j1DAGZbLs+Bb8JED5xSagzAMwA+fsi7QtvUOJ1+DsAKgHe01nzsHh//O4B/BMB8yPtB90YDeFspdaaxsm9HYQgmoieGUioI4M8B/EOtdeZh7w9tj9a6rrV+GsAwgBeUUmxJegwopb4DYEVrfeZh7wvds9e01s8C+BaA/6zRGtgxGIJ3zzyAkZbLw43vEdED0Ogn/XMA/1Jr/aOHvT9097TWKQDvAfjmQ94V2p5XAXyv0Vf6rwF8RSn1Lx7uLtHd0FrPNz6vAPgLSGtnx2AI3j2fAjiolNqrlHID+GMAf/WQ94moIzQGV/0zAJe11v/bw94f2j6lVFwpFW187YMMLr7yUHeKtkVr/Y+11sNa6zHIe967Wuu/95B3i7ZJKRVoDCSGUioA4OsAOmqGJIbgXaK1rgH4zwH8AjIo50+11hcf7l7Rdiml/hWADwEcUkrNKaX+o4e9T3RXXgXw9yGVqHONj28/7J2ibRkA8J5S6gtIMeEdrTWn2iK6//oAfKCU+hzAJwB+orX++UPepweKU6QRERERUcdhJZiIiIiIOg5DMBERERF1HIZgIiIiIuo4DMFERERE1HEYgomIiIio4zAEExEREVHHYQgmIiIioo7DEExEREREHef/D6KAGoDDYbwmAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "kernel3 = gp.kernels.RBF(\n", + " input_dim=1, variance=torch.tensor(1.0), lengthscale=torch.tensor(1)\n", + ")\n", + "gpr3 = gp.models.GPRegression(X, y, kernel3, noise=torch.tensor(0.01))\n", + "plot(model=gpr3, kernel=kernel3, n_prior_samples=2)\n", + "_ = plt.ylim((-8, 8))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Inference\n", + "\n", + "In the above we set the kernel hyperparameters by hand. If we want to learn the hyperparameters from the data, we need to do inference. In the simplest (conjugate) case we do gradient ascent on the log marginal likelihood. In `pyro.contrib.gp`, we can use any [PyTorch optimizer](https://pytorch.org/docs/stable/optim.html) to optimize parameters of a model. In addition, we need a loss function which takes inputs are the pair model and guide and returns an ELBO loss (see [SVI Part I](svi_part_i.ipynb) tutorial)." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "optimizer = torch.optim.Adam(gpr.parameters(), lr=0.005)\n", + "loss_fn = pyro.infer.Trace_ELBO().differentiable_loss\n", + "losses = []\n", + "variances = []\n", + "lengthscales = []\n", + "noises = []\n", + "num_steps = 2000 if not smoke_test else 2\n", + "for i in range(num_steps):\n", + " variances.append(gpr.kernel.variance.item())\n", + " noises.append(gpr.noise.item())\n", + " lengthscales.append(gpr.kernel.lengthscale.item())\n", + " optimizer.zero_grad()\n", + " loss = loss_fn(gpr.model, gpr.guide)\n", + " loss.backward()\n", + " optimizer.step()\n", + " losses.append(loss.item())" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX4AAAEGCAYAAABiq/5QAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAgm0lEQVR4nO3deXgc9Z3n8fe3D0mWbMuHZEm+sA0GfOCDGENiGA6DY+5j8oRkeTI8SXZINskkJLMHM3menWT/2IdkQrJks09myUBgZyHJJoTBQzhsHI5wYxxb+MTYGPAlCxtbsi3r6P7uH10ybSHJkq3u6u76vB766erqqq6vq8Wnqn9V9Stzd0REJDpiYRcgIiL5peAXEYkYBb+ISMQo+EVEIkbBLyISMYmwCxiImpoanzJlSthliIgUlTfeeOMDd6/tOb4ogn/KlCmsWrUq7DJERIqKmb3b2/icNfWYWYWZvWZma81svZl9Pxj/PTPbaWZrgsdVuapBREQ+Lpd7/O3AZe5+yMySwAtm9kTw3k/c/Uc5XLaIiPQhZ8HvmUuCDwUvk8FDlwmLiIQsp2f1mFnczNYAe4EV7v5q8NY3zKzRzO4zs9F9zHubma0ys1XNzc25LFNEJFJyGvzunnL3ecBEYKGZzQZ+DpwOzAN2A3f1Me897r7A3RfU1n7soLSIiJykvJzH7+4HgGeBpe7eFGwQ0sAvgIX5qEFERDJyeVZPrZmNCoaHAZcDm8ysIWuyG4F1uapBREQ+Lpdn9TQAD5hZnMwG5v+5+2Nm9i9mNo/Mgd7twFdyVcDzbzWzbtdBvnbJGblahIhI0cnlWT2NwPxexn8hV8vs6cW3P+DeF97hloWnUV2ZzNdiRUQKWkn31XPNnPF0pZ2n1u8JuxQRkYJR0sE/e8JIJo+p5N8ad4VdiohIwSjp4DczrpnTwEtb97H/cEfY5YiIFISSDn6Aq+c0kEo7T65Tc4+ICEQg+Gc2jGRaTRWPqblHRASIQPCbGVfPaeCVbftobm0PuxwRkdCVfPBD5uyetMOT63aHXYqISOgiEfxn1Y9g+rjhPNao4BcRiUTwQ+Yg72vb99PUcjTsUkREQhWZ4L9mTgPu8Pib2usXkWiLTPCfMW4EZ9eP4A9q7hGRiItM8ENmr3/Vux+y60Bb2KWIiIQmUsF/9ZzxgJp7RCTaIhX8U2uqmDV+pIJfRCItUsEPcOXsela/d4DdB9XcIyLRFLngXzo7cwOwp9R3j4hEVOSC/4xxw5k+bjhPKPhFJKIiF/wAV57TwOvb96vvHhGJpGgG/+x60g7LN2ivX0SiJ5LBf3b9CKaMrVQf/SISSZEMfjNj6ewGXt66jwNHdGcuEYmWSAY/ZJp7utLOig1NYZciIpJXkQ3+OROrmTBqmJp7RCRyIhv8meaeev605QNaj3aGXY6ISN5ENvgh09zTkUrzx017wy5FRCRvIh38504ezbgR5Tzxppp7RCQ6chb8ZlZhZq+Z2VozW29m3w/GjzGzFWa2JXgenasaTiQWMz49q55n39rLkY6usMoQEcmrXO7xtwOXuftcYB6w1MwuAO4AVrr7dGBl8Do0V55Tz9HONM9ubg6zDBGRvMlZ8HvGoeBlMng4cD3wQDD+AeCGXNUwEAunjGFMVZn67hGRyMhpG7+Zxc1sDbAXWOHurwJ17r4bIHge18e8t5nZKjNb1dycu73xRDzGkpl1PLNpL+1dqZwtR0SkUOQ0+N095e7zgInAQjObPYh573H3Be6+oLa2Nmc1AiyZVceh9i5e3rovp8sRESkEeTmrx90PAM8CS4EmM2sACJ5DP5fyU6fXUFkWZ7mu4hWRCMjlWT21ZjYqGB4GXA5sApYBtwaT3Qo8mqsaBqoiGeeSs2pZsaGJdNrDLkdEJKdyucffADxjZo3A62Ta+B8D7gSuMLMtwBXB69AtmVlPc2s7a3YcCLsUEZGcSuTqg929EZjfy/h9wOJcLfdkXXrWOBIxY/n6Js6dHNqlBSIiORfpK3ezVVcmuWDaWN2cRURKnoI/y5JZdWxrPszbew+deGIRkSKl4M9yxcw6QLdkFJHSpuDP0lA9jLkTq1m+Xqd1ikjpUvD3sGRWPWveP0BTy9GwSxERyQkFfw9LguYe3ZJRREqVgr+HM8YNZ2pNla7iFZGSpeDvwcxYMrOOl7d+QItuySgiJUjB34sls+roTLn66BeRkqTg78W8SaOpGV7O8vU6rVNESo+CvxfxmHHFzHE8u7lZffSLSMlR8Pdhycx6DrV38cq2/WGXIiIypBT8ffjk6WOpKouruUdESo6Cvw8VyTgXq49+ESlBCv5+LJlZz97Wdtaqj34RKSEK/n4c66NfF3OJSAlR8PfjWB/9aucXkRKi4D+BJbPq2Ko++kWkhCj4T+DyGeq0TURKi4L/BMaPGsacidW6OYuIlAwF/wAsmVnHn987wF710S8iJUDBPwBLZtUDsGKjmntEpPgp+Adg+rjhnDa2Uu38IlISFPwD0N1H/0tv76NVffSLSJFT8A/Qkln1dKTSPPeW+ugXkeKm4B+gcyePZmxVGcvXq7lHRIpbzoLfzCaZ2TNmttHM1pvZt4Lx3zOznWa2JnhclasahlI8Zlw+o45nNu2loysddjkiIictl3v8XcDfuvsM4ALg62Y2M3jvJ+4+L3g8nsMahtSSWXW0tnfxyrZ9YZciInLSchb87r7b3VcHw63ARmBCrpaXD4vOqKGyLK6LuUSkqOWljd/MpgDzgVeDUd8ws0Yzu8/MRvcxz21mtsrMVjU3F8YB1YpknIvPVB/9IlLcch78ZjYceBi43d1bgJ8DpwPzgN3AXb3N5+73uPsCd19QW1ub6zIHbMmsOppa2mnceTDsUkRETkpOg9/MkmRC/0F3/z2Auze5e8rd08AvgIW5rGGoXXZWHfGYqatmESlauTyrx4B7gY3u/uOs8Q1Zk90IrMtVDblQXZnk/KljeHL9HtzV3CMixSeXe/yLgC8Al/U4dfOHZvammTUClwLfzmENOXHVOQ1saz7Mpj2tYZciIjJoiVx9sLu/AFgvbxXN6Zt9uXJ2Pf+wbD2PNe5iRsPIsMsRERkUXbl7EsYOL+dTp4/lscbdau4RkaKj4D9J18xp4N19R1i3syXsUkREBkXBf5I+PaueRMx4rHFX2KWIiAyKgv8kjaos46LpNWruEZGio+A/BdfMGc/OA238+f0DYZciIjJgCv5TcMWsOsoSMR5buzvsUkREBkzBfwpGViS55Mxa/vDmLlLqu0dEioSC/xRdN288TS3t6qpZRIqGgv8UXT6jjhEVCR5+Y0fYpYiIDIiC/xRVJONcM2c8T6zbw6H2rrDLERE5IQX/EPjMJybQ1pniiTd1kFdECp+CfwicO3k0U2uqeHi1mntEpPAp+IeAmXHT/Am8sm0/7+8/EnY5IiL9UvAPkZs+MREz+O2q98MuRUSkXwr+ITJh1DAuPrOW36x6n65UOuxyRET6pOAfQrecfxpNLe2s3LQ37FJERPqk4B9Cl55VS/3ICh589b2wSxER6ZOCfwgl4jFuPm8Sf9rSrIO8IlKwFPxD7HMLJ2HA/33l3bBLERHplYJ/iDVUD+PK2Q089Np7HNaVvCJSgAYU/GZWZWaxYPhMM7vOzJK5La14fenCqbQe7eJ36r9HRArQQPf4nwcqzGwCsBL4InB/rooqdp84bTTzJo3ily++o+6aRaTgDDT4zd2PADcB/9PdbwRm5q6s4vfvL5rK9n1HWLmxKexSRESOM+DgN7NPArcAfwjGJXJTUmlYOqueCaOGce8L74RdiojIcQYa/LcDfwc84u7rzWwa8EzOqioBiXiMWz91Gq++s591Ow+GXY6IyDEDCn53f87dr3P3HwQHeT9w92/muLaid/N5k6kqi/PPf9oWdikiIscM9Kyeh8xspJlVARuAzWb2n04wzyQze8bMNprZejP7VjB+jJmtMLMtwfPoU/9nFKbqYUluPm8yjzXuZteBtrDLEREBBt7UM9PdW4AbgMeBycAXTjBPF/C37j4DuAD4upnNBO4AVrr7dDJnCN1xMoUXiy8umoID97+0PexSRESAgQd/Mjhv/wbgUXfvBPo9T9Hdd7v76mC4FdgITACuBx4IJnsg+MySNWlMJVed08BDr75Hy9HOsMsRERlw8P9vYDtQBTxvZqcBLQNdiJlNAeYDrwJ17r4bMhsHYFwf89xmZqvMbFVzc/NAF1WQ/vqiqRxq7+I3r6mvfhEJ30AP7v7U3Se4+1We8S5w6UDmNbPhwMPA7UFz0YC4+z3uvsDdF9TW1g50toI0Z+IoLpg2hvtefIdO9dUvIiEb6MHdajP7cfceuJndRWbv/0TzJcmE/oPu/vtgdJOZNQTvNwCR6Lz+tr+Yxu6DR/lDo27ILiLhGmhTz31AK/DZ4NEC/LK/GczMgHuBje7+46y3lgG3BsO3Ao8OpuBidcmZ45g+bjj3PL8Nd3XjICLhGWjwn+7u/+Du24LH94FpJ5hnEZkzfy4zszXB4yrgTuAKM9sCXBG8LnmxmPHXF01jw+4WXtq6L+xyRCTCBtrtQpuZXejuLwCY2SKg3xPTg2mtj7cXD7zE0nH9/PH88KnN3PP8NhadURN2OSISUQPd4/8q8L/MbLuZbQd+BnwlZ1WVqPJEnC8umsJzbzWzeU9r2OWISEQN9Kyete4+F5gDzHH3+cBlOa2sRN1y/mSGJeP88kV13iYi4RjUHbjcvSXrlMzv5KCekjeqsoxr5zawbO0uDukOXSISglO59WJf7fdyAp9fOJkjHSmWrdkVdikiEkGnEvw6J/EkzZs0irPrR/Dr198LuxQRiaB+g9/MWs2spZdHKzA+TzWWHDPj8wsn07jjoPrqF5G86zf43X2Eu4/s5THC3XUHrlNww/wJlCdi/HaV+u8Rkfw6laYeOQXVw5JcPqOOxxp3q/8eEckrBX+Irp83nn2HO3jx7Q/CLkVEIkTBH6KLz6plZEWCR3V2j4jkkYI/ROWJOFfPaeCp9Xs40qFz+kUkPxT8Ibtu7gSOdKRYsaEp7FJEJCIU/CE7f+oYGqor+Le1au4RkfxQ8IcsFjOunTue595q5sCRjrDLEZEIUPAXgOvmjqcz5Tyxbk/YpYhIBCj4C8Cs8SOZVlvFo2t2hl2KiESAgr8AmBnXz53Aq+/sZ8/Bo2GXIyIlTsFfIK6bNx53eKxRB3lFJLcU/AViak0VcyZW62IuEck5BX8BuW7ueN7ceZBtzYfCLkVESpiCv4BcO3c8ZrBM5/SLSA4p+AtI3cgKLpg6lmVrduGu+9yISG4o+AvM9fPGs+2Dw6zf1XLiiUVEToKCv8BcObuBZNx4ePWOsEsRkRKl4C8w1ZVJls5u4Hdv7OBwu3rsFJGhp+AvQF9cNIXWo138Xnv9IpIDOQt+M7vPzPaa2bqscd8zs51mtiZ4XJWr5Rez+ZNGMXdiNb98aTvptA7yisjQyuUe//3A0l7G/8Td5wWPx3O4/KJlZnzpwqlsaz7M8g3quE1EhlbOgt/dnwf25+rzS93V5zQwraaK//H0Fu31i8iQCqON/xtm1hg0BY3uayIzu83MVpnZqubm5nzWVxAS8Rh/s/gMNu1p5an12usXkaGT7+D/OXA6MA/YDdzV14Tufo+7L3D3BbW1tXkqr7BcO2c802qquHul9vpFZOjkNfjdvcndU+6eBn4BLMzn8otNIh7jm4una69fRIZUXoPfzBqyXt4IrOtrWsm4dq72+kVkaOXydM5fAS8DZ5nZDjP7MvBDM3vTzBqBS4Fv52r5pSIes2N7/U9qr19EhkAiVx/s7p/vZfS9uVpeKbt27nh++sct3P30FpbOqicWs7BLEpEipit3i0A8Znxr8XQ2N2mvX0ROnYK/SFwzZzzTaqu4++kt6rJZRE6Jgr9IxGPG1y45g81Nrby0dV/Y5YhIEVPwF5Fr5jQwpqqMB17aHnYpIlLEFPxFpCIZ5+bzJvH0xiZ2HmgLuxwRKVIK/iJzy/mTAfj1a++FXImIFCsFf5GZOLqSRWfU8K9rduogr4icFAV/Ebph3gTe39/G6vc+DLsUESlCCv4i9OnZ9VQkYzzy551hlyIiRUjBX4SGlye4fEYdj7+5h5T67xGRQVLwF6krZzew/3AHb7yr5h4RGRwFf5G6+KxayuIxlqsLBxEZJAV/kRpenmDRGWNZvqFJZ/eIyKAo+IvYFTPreW//ETY3tYZdiogUEQV/Ebt85jjMYPn6prBLEZEiouAvYuNGVDB34ihWblTwi8jAKfiL3OUzxrF2x0H2thwNuxQRKRIK/iK3eEYdAM9s3htyJSJSLBT8Re7s+hFMGDWMpzcq+EVkYBT8Rc7MWDxjHC9s+YCjnamwyxGRIqDgLwGXnT2Ots4UL+vOXCIyAAr+EnDBtLFUlsV5Wmf3iMgAKPhLQEUyzkXTa/jjpr26ildETkjBXyIWz6hj98GjbNjdEnYpIlLgFPwl4rKzM1fxrtTZPSJyAgr+ElEzvJx5k3QVr4icmIK/hCw+W1fxisiJ5Sz4zew+M9trZuuyxo0xsxVmtiV4Hp2r5UdR91W8f9yk5h4R6Vsu9/jvB5b2GHcHsNLdpwMrg9cyRLqv4l2p4BeRfuQs+N39eWB/j9HXAw8Eww8AN+Rq+VGkq3hFZCDy3cZf5+67AYLncX1NaGa3mdkqM1vV3NyctwKL3eIZdbqKV0T6VbAHd939Hndf4O4Lamtrwy6naJw/dYyu4hWRfuU7+JvMrAEgeFZj9BDTVbwiciL5Dv5lwK3B8K3Ao3lefiR0X8X75s6DYZciIgUol6dz/gp4GTjLzHaY2ZeBO4ErzGwLcEXwWobYp2fWU5aI8fvVO8MuRUQKUCJXH+zun+/jrcW5WqZkVFcmuWJGHcvW7uLvr5pBWaJgD+WISAiUCCXqLz8xgf2HO3hWt2QUkR4U/CXqoum11Awv47dv7Ai7FBEpMAr+EpWMx7j5vEk8vbGJ9/YdCbscESkgCv4S9oULphA344GXt4ddiogUEAV/CauvruDqOQ385vX3OXikM+xyRKRAKPhL3FcvPp3DHV38/LmtYZciIgVCwV/iZjSM5MZ5E/jli++w80Bb2OWISAFQ8EfAd5acScyMOx5uVDcOIqLgj4KJoyv57tUz+NOWD/jZH98OuxwRCVnOrtyVwnLL+ZN5490PuWvFW8RixtcuOR0zC7ssEQmBgj8izIwffmYOqbTzj09tZsWGJr64aAqfPH0stcPLtREQiRAFf4Qk4zHu/tw8Lpxew91Pb+Fbv14DwIiKBONGlDO6soxRlWWMrkwyuqqM6mHJY49RlcHzsMz4ERUJYjFtLESKkYI/YsyMzy6YxGfOnciaHQdY+/4B3vngMB8caufDw53s+PAI63Z2cqCtg6Od6X4+B0ZWfLRB6GsDUV358fEVyZh+YYiESMEfUbGYce7k0Zw7eXSf0xztTNHS1snBtk4OtHVy8Ejw3NbJwSMdH41v6+TAkU52fth27HUq3ffZQ2Xx2EcbhO6NxnEbjASjKntsOIYlGTksSTKu8xFETpWCX/pUkYxTkYwzbmTFoOZzdw61dx3bILT02EAcbOvkYFvHsdd7Wo6yaU8rLW2dtLZ39fvZw8sTvf7CqO7xS+O4XyKVSUaUJ/QrQySg4JchZ2aMqEgyoiLJxL5/UPSqK5Wm5WgXB7J+UbRkbTB6bjje3nvo2HQdXX03TcVjxsiKzC+JkVm/ND7eVPXxDUdFMn6Ka0SksCj4paAk4jHGVJUxpqps0PMe7UxlbSD62HC0ffT+u/sOH3u/n5YpyhOx445RjOx5PCNrI5HZ4CWoKk8wvCxBVXmchJqnpMAo+KVkVCTj1FfHqa8eXNNUOu20tnf12EB0HN9UlTV+54E2Nuw6yMG2Tg53pAZQV4zh5UmGl8czG4TuR/cGInhUlScYETxXlcc/2oBkva9jHDIUFPwSebGYHdtjnzRmcPN2dKVpOfrRhqH1aCeH21Mcau/kUHuKQ0e7ONzRxaH2rsxwexet7V3saTnK4eZgfHtXv2dQZUvGjYpknMqyOMOScYaVJRiWjFFZlqAiGWdYWZzK4HlY9zTJj4Yry+JUBMPliRjliTjlyRjliRhl3a8Tmdc6JlK6FPwip6AsEaNmeDk1w8tP6XO6UunMBqMjs4E41J7ZSHRvGLo3Gm2dKY50pDgaPLd1pmgLnvcf7jj2+khHZmPSkRrYBqXXf1s8swEoT8Yyw8HGoizYMJQn4pQlMu8l4kYyHiMRMxLxGMm4kYjFSCaMZKz397tfJ4P5E7FgvmB8zIx4zIjHODYcs37Gx4y4GbEYxLvHd39Oj/FR36gp+EUKQCIeo7oyc5rrUOpKpY/bOHRvONo6UnR0pWnvStHelf7o0ZmiI5WmvTPzuuc0Hd3DnZnP/fBIB52pNF0ppzMdPKecrnSazq40nWmnK5Xu9xhKmMwyGw8Lhg0j+C8zPhi2YBqs9/FmPYbpMY19fDzBe8HHkj2Q/f5/v/EcFk4d5E/RE1Dwi5SwRDzGiHiMERVDu0EZrHT6ow1D90bi2AYjlaYr7ce9TqWdlDvpNMGzk0o7ac88UicxPvOceTiAZ57dM+91DztO8B/p9PHjuzu3TbsfN+7YNP2N56PnYPGZ52Ov/bjX3QNV5UN/VpmCX0RyLhYzymNxypU4BUGnCIiIRIyCX0QkYhT8IiIRE0qLm5ltB1qBFNDl7gvCqENEJIrCPNRyqbt/EOLyRUQiSU09IiIRE1bwO7DczN4ws9t6m8DMbjOzVWa2qrm5Oc/liYiUrrCCf5G7nwtcCXzdzP6i5wTufo+7L3D3BbW1tfmvUESkRFn31WKhFWD2PeCQu/+on2magXdPchE1QCEeS1Bdg6O6BqdQ64LCra0U6zrN3T+255z3g7tmVgXE3L01GF4C/Lf+5umt8EEsb1UhnjWkugZHdQ1OodYFhVtblOoK46yeOuCRoHOiBPCQuz8ZQh0iIpGU9+B3923A3HwvV0REMqJwOuc9YRfQB9U1OKprcAq1Lijc2iJTV+gHd0VEJL+isMcvIiJZFPwiIhFT0sFvZkvNbLOZvW1md+RxuZPM7Bkz22hm683sW8H475nZTjNbEzyuyprn74I6N5vZp3Nc33YzezOoYVUwboyZrTCzLcHz6HzWZmZnZa2XNWbWYma3h7HOzOw+M9trZuuyxg16/ZjZJ4L1/LaZ/dRO8UavfdT1j2a2ycwazewRMxsVjJ9iZm1Z6+2f8lzXoL+3PNX1m6yatpvZmmB8PtdXX/mQv7+xzK3CSu8BxIGtwDSgDFgLzMzTshuAc4PhEcBbwEzge8B/7GX6mUF95cDUoO54DuvbDtT0GPdD4I5g+A7gB2HUlvXd7QFOC2OdAX8BnAusO5X1A7wGfJLMLVSfAK7MQV1LgEQw/IOsuqZkT9fjc/JR16C/t3zU1eP9u4D/GsL66isf8vY3Vsp7/AuBt919m7t3AL8Grs/Hgt19t7uvDoZbgY3AhH5muR74tbu3u/s7wNtk6s+n64EHguEHgBtCrG0xsNXd+7taO2d1ufvzwP5eljfg9WNmDcBId3/ZM/+H/p+seYasLndf7u5dwctXgIn9fUa+6upHqOurW7Bn/FngV/19Ro7q6isf8vY3VsrBPwF4P+v1DvoP35wwsynAfODVYNQ3gp/l92X9lMt3rb11klfn7rsh84cJjAupNoDPcfz/kIWwzga7fiYEw/mqD+BLZPb6uk01sz+b2XNmdlEwLp91DeZ7y/f6ughocvctWePyvr565EPe/sZKOfh7a+vK67mrZjYceBi43d1bgJ8DpwPzgN1kfmpC/ms9YSd5WfJam5mVAdcBvw1GFco660tfdeR7vX0X6AIeDEbtBia7+3zgO8BDZjYyj3UN9nvL9/f5eY7fucj7+uolH/qctI8aTrq2Ug7+HcCkrNcTgV35WriZJcl8qQ+6++8B3L3J3VPungZ+wUdNE3mt1d13Bc97gUeCOpqCn47dP2/3hlEbmY3RandvCmosiHXG4NfPDo5vdslZfWZ2K3ANcEvwk5+gWWBfMPwGmXbhM/NV10l8b/lcXwngJuA3WfXmdX31lg/k8W+slIP/dWC6mU0N9iI/ByzLx4KD9sN7gY3u/uOs8Q1Zk90IdJ9tsAz4nJmVm9lUYDqZgza5qK3KzEZ0D5M5OLguqOHWYLJbgUfzXVvguD2xQlhnWcsb8PoJfqq3mtkFwd/DX2XNM2TMbCnwX4Dr3P1I1vhaM4sHw9OCurblsa5BfW/5qitwObDJ3Y81k+RzffWVD+Tzb+xUjk4X+gO4iswR863Ad/O43AvJ/ORqBNYEj6uAfwHeDMYvAxqy5vluUOdmTvGsgRPUNo3MGQJrgfXd6wUYC6wEtgTPY0KorRLYB1Rnjcv7OiOz4dkNdJLZq/ryyawfYAGZwNsK/IzgSvkhruttMu2/3X9n/xRM+5fB97sWWA1cm+e6Bv295aOuYPz9wFd7TJvP9dVXPuTtb0xdNoiIREwpN/WIiEgvFPwiIhGj4BcRiRgFv4hIxCj4RUQiRsEvkWBmh4LnKWb274b4s/++x+uXhvLzRYaagl+iZgowqODvvrCnH8cFv7t/apA1ieSVgl+i5k7goqDP9W+bWdwyfdq/HnQo9hUAM7sk6DP9ITIXImFm/xp0bLe+u3M7M7sTGBZ83oPBuO5fFxZ89jrL9Jl+c9ZnP2tmv7NMX/oPBldeYmZ3mtmGoJYf5X3tSCQkwi5AJM/uINNP/DUAQYAfdPfzzKwceNHMlgfTLgRme6YrXIAvuft+MxsGvG5mD7v7HWb2DXef18uybiLTSdlcoCaY5/ngvfnALDJ9q7wILDKzDWS6Nzjb3d2Cm6qIDDXt8UvULQH+yjJ3YnqVzGXz04P3XssKfYBvmtlaMv3eT8qari8XAr/yTGdlTcBzwHlZn73DM52YrSHTBNUCHAX+2cxuAo58/CNFTp2CX6LOgL9x93nBY6q7d+/xHz42kdklZDr3+qS7zwX+DFQM4LP70p41nCJzF60uMr8yHiZzQ40nB/HvEBkwBb9ETSuZ2911ewr4D0E3uZjZmUGvpT1VAx+6+xEzOxu4IOu9zu75e3geuDk4jlBL5laAffYgGvTPXu3ujwO3k2kmEhlyauOXqGkEuoImm/uBu8k0s6wODrA20/vt654EvmpmjWR6SHwl6717gEYzW+3ut2SNf4TM/VDXkumN8T+7+55gw9GbEcCjZlZB5tfCt0/qXyhyAuqdU0QkYtTUIyISMQp+EZGIUfCLiESMgl9EJGIU/CIiEaPgFxGJGAW/iEjE/H8yBpyuAmfcsAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# let's plot the loss curve after 2000 steps of training\n", + "def plot_loss(loss):\n", + " plt.plot(loss)\n", + " plt.xlabel(\"Iterations\")\n", + " _ = plt.ylabel(\"Loss\") # supress output text\n", + "\n", + "\n", + "plot_loss(losses)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's see if we're learned anything reasonable:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot(model=gpr, plot_observed_data=True, plot_predictions=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here the thick red curve is the mean prediction and the blue band represents the 2-sigma uncertainty around the mean. It seems we learned reasonable kernel hyperparameters, as both the mean and uncertainty give a reasonable fit to the data. (Note that learning could have easily gone wrong if we e.g. chose too large of a learning rate or chose bad initital hyperparameters.)\n", + "\n", + "Note that the kernel is only well-defined if `variance` and `lengthscale` are positive. Under the hood Pyro is using PyTorch constraints (see [docs](http://pytorch.org/docs/master/distributions.html#module-torch.distributions.constraints)) to ensure that hyperparameters are constrained to the appropriate domains. Let's see the constrained values we've learned." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.21701954305171967" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gpr.kernel.variance.item()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.513454258441925" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gpr.kernel.lengthscale.item()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.04248063638806343" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gpr.noise.item()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The period of the sinusoid that generated the data is $T = 2\\pi/3 \\approx 2.09$ so learning a lengthscale that's approximiately equal to a quarter period makes sense. Let us now try to animate and see how our model improves over the training iterations." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "fig, ax = plt.subplots(figsize=(12, 6))\n", + "\n", + "\n", + "def update(iteration):\n", + " pyro.clear_param_store()\n", + " ax.cla()\n", + " kernel_iter = gp.kernels.RBF(\n", + " input_dim=1,\n", + " variance=torch.tensor(variances[iteration]),\n", + " lengthscale=torch.tensor(lengthscales[iteration]),\n", + " )\n", + " gpr_iter = gp.models.GPRegression(\n", + " X, y, kernel_iter, noise=torch.tensor(noises[iteration])\n", + " )\n", + " plot(model=gpr_iter, plot_observed_data=True, plot_predictions=True, ax=ax)\n", + " ax.set_title(f\"Iteration: {iteration}, Loss: {losses[iteration]:0.2f}\")\n", + "\n", + "\n", + "anim = FuncAnimation(fig, update, frames=np.arange(0, num_steps, 30), interval=100)\n", + "plt.close()\n", + "\n", + "anim.save(\"../source/_static/img/gpr-fit.gif\", fps=60)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![](../source/_static/img/gpr-fit.gif)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Fit the model using MAP" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We need to define priors for the hyperparameters." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX4AAAEGCAYAAABiq/5QAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAfe0lEQVR4nO3deXxU9b3/8ddnspIQlkCACIEERBRBAQMVAetSq9C6YFu3XqXWVtvqbe32q20fv2uXe+/D2lvr7a+1t3pr1da21rrR2lrRIlhFJSAgixBAkAASdsIaknx+f8yJDZhgQjJzZua8n4/HPGZyZntzEt45+Z4z32PujoiIREcs7AAiIpJcKn4RkYhR8YuIRIyKX0QkYlT8IiIRkx12gPbo27evl5eXhx1DRCStLFiwYJu7lxy9PC2Kv7y8nKqqqrBjiIikFTNb39pyDfWIiESMil9EJGJU/CIiEaPiFxGJGBW/iEjEqPhFRCJGxS8iEjEZXfwvrKzlnhdWhx1DRCSlZHTxv7xmO3fPqubg4cawo4iIpIyMLv6JQ/tQ39jEgvU7w44iIpIyMrr4x1cUkxUz5q3ZHnYUEZGUkdHF3z0vm9EDezJvrYpfRKRZRhc/wMRhfVi8YRf7DjWEHUVEJCVkfvEP7UNDk1OlcX4RESACxV9Z3pucLI3zi4g0y/jiL8jNZkxZL+at2RZ2FBGRlJDxxQ/x4Z43Nu5mz8HDYUcREQldJIr/zGF9aHKY/9aOsKOIiIQuEsU/bnBvcrNjGucXESEixZ+fk8W4wb10PL+ICBEpfoCJQ/uyfPMedu2vDzuKiEioolP8w/rgDq9qnF9EIi4yxT+mrBcFuVn8o1qHdYpItEWm+HOzY0wc2oe51VvDjiIiEqqEFb+Z5ZvZa2a22MyWmdl3g+XFZjbLzKqD696JynC0s08qYf32/azfvi9ZbykiknISucV/CDjP3U8HxgAXmdmZwG3A8+4+HHg++DoppgzvC8BcDfeISIQlrPg9bm/wZU5wceBS4MFg+YPAZYnKcLSKvoUM6t2Nuas03CMi0ZXQMX4zyzKzRUAtMMvdXwX6u/tmgOC6XxvPvdHMqsysauvWrilqM+Psk0qYt2Y7hxubuuQ1RUTSTUKL390b3X0MMAiYYGajOvDce9290t0rS0pKuizT2cP7svdQA6+/vavLXlNEJJ0k5aged98FvABcBGwxs1KA4Lo2GRmanXViX7JipuEeEYmsRB7VU2JmvYLb3YAPAW8CM4EZwcNmAE8lKkNreuTnMLaslw7rFJHISuQWfykw28yWAPOJj/H/GbgDuMDMqoELgq+TasrwEt7YuJvtew8l+61FREKXyKN6lrj7WHc/zd1Hufv3guXb3f18dx8eXCd9DoVzRpTgDnM03CMiERSZT+62NHpgT/oV5fHcii1hRxERSbpIFn8sZpx/Sj/mrtpGfYMO6xSRaIlk8QN86JT+7D3UwKtvaY5+EYmWyBb/pBP7kp8T47nlGu4RkWiJbPHn52Qx+cS+PLeiFncPO46ISNJEtvghPtyzcdcB3nynLuwoIiJJE+niP+/k+DRBz+voHhGJkEgXf78e+Zxe1otnNc4vIhES6eIHmDpqAEtqdrNhx/6wo4iIJEXki3/aqFIA/rp0c8hJRESSI/LFP7hPAaMG9uDpN94JO4qISFJEvvgBpo0uZfGGXdTs1HCPiGQ+FT/wkdHx4Z5nlmqrX0Qyn4ofGNKnkFNP6MHTb2icX0Qyn4o/MG10Ka+/vYtNuw6EHUVEJKFU/IFpwXDPX7TVLyIZTsUfqOhbyOiBPXlq0aawo4iIJJSKv4XLxg7kjY27WV2ruXtEJHOp+Fu4+PRSYgZPvq6tfhHJXCr+FvoV5TN5eAlPLtpIU5OmahaRzKTiP8r0sSdQs/MAVet3hh1FRCQhVPxH+fDIAXTLyeKJ1zeGHUVEJCFU/EcpzMvmwlP78/SSTRxqaAw7johIl1Pxt+KysQPZc7CB2W9uDTuKiEiXU/G3YvKJfenbPY/HF9aEHUVEpMup+FuRnRVj+tgT+PubtWzbeyjsOCIiXUrF34YrKstoaHKe1E5eEckwKv42DO9fxNjBvXhk/gbcdUy/iGQOFf8xXFFZRnXtXhbX7A47iohIl1HxH8NHTyslPyfGH6o2hB1FRKTLJKz4zazMzGab2QozW2ZmXwqWf8fMNprZouAyLVEZOqsoP4dpo0v506JNHKjXMf0ikhkSucXfAHzV3U8BzgRuNrORwX0/dvcxweUvCczQaVdWllF3qIG/LtU8/SKSGRJW/O6+2d0XBrfrgBXAwES9X6JMqCimvE+BhntEJGMkZYzfzMqBscCrwaJbzGyJmd1vZr3beM6NZlZlZlVbt4b3CVoz4xOVZbyydgfrt+8LLYeISFdJePGbWXfgMeBWd98D/BwYBowBNgM/au157n6vu1e6e2VJSUmiYx7Tx8YNImbwxwX6JK+IpL+EFr+Z5RAv/Yfd/XEAd9/i7o3u3gTcB0xIZIauMKBnPh88qYRHq2poaGwKO46ISKck8qgeA34JrHD3u1osL23xsOnA0kRl6EpXjh/MO3sOMmeVJm4TkfSWncDXngRcC7xhZouCZd8CrjazMYAD64CbEpihy5x/Sj9KivL47atvc/4p/cOOIyJy3BJW/O7+D8BauSulD99sS05WjCsry7jnhdVs2nWAE3p1CzuSiMhx0Sd3O+DK8WU46NBOEUlrKv4OKCsuYMrwEh6Zv0E7eUUkban4O+iaCYPZvFs7eUUkfan4O6jlTl4RkXSk4u+g5p28s1fWsmnXgbDjiIh0mIr/ODTv5H1kvnbyikj6UfEfh7LiAs4eXsIfqrSTV0TSj4r/OF2tnbwikqZU/MdJO3lFJF2p+I+TdvKKSLpS8XeCdvKKSDpS8XeCdvKKSDpS8XdS807e2Su1k1dE0oOKv5POP6Uf/Xvk8ZtX1ocdRUSkXVT8nZSTFeOaCUOYs2qrzskrImlBxd8FrppQRnbMtNUvImlBxd8F+vfI58JTB/CHqhoOHm4MO46IyDGp+LvItROHsPvAYWYu3hR2FBGRY1Lxd5EPVBQzvF93DfeISMpT8XcRM+PaiUNYUrObxRt2hR1HRKRNKv4uNH3sQApzs3honrb6RSR1qfi7UFF+DtPHDeRPSzaxc1992HFERFql4u9i155ZTn1DE3+o0vw9IpKaVPxdbMSAIiZUFPObV9fT1ORhxxEReQ8VfwJce+YQNuw4wJxqzd8jIqlHxZ8AF546gJKiPH6tnbwikoJU/AmQmx3j6vHxk7Rs2LE/7DgiIkdoV/GbWaGZxYLbJ5nZJWaWk9ho6e3qDwwmZsZD89aFHUVE5Ajt3eKfC+Sb2UDgeeB64IFEhcoEpT27MXXUAH4/fwP7DjWEHUdE5F3tLX5z9/3A5cD/c/fpwMjExcoMn55cQd3BBh5bWBN2FBGRd7W7+M1sIvBJ4OlgWfb7PKHMzGab2QozW2ZmXwqWF5vZLDOrDq57H3/81DZucG9OL+vFAy+t06GdIpIy2lv8twLfBJ5w92VmNhSY/T7PaQC+6u6nAGcCN5vZSOA24Hl3H0582Oi240qeJj49qZy12/YxZ5UO7RSR1NCu4nf3Oe5+ibv/INjJu83dv/g+z9ns7guD23XACmAgcCnwYPCwB4HLjjd8Opg6qpR+RXnc/9JbYUcREQHaf1TPb82sh5kVAsuBlWb29fa+iZmVA2OBV4H+7r4Z4r8cgH5tPOdGM6sys6qtW9N3azk3O8Z1E4fwYvU2qrfUhR1HRKTdQz0j3X0P8a3zvwCDgWvb80Qz6w48BtwavEa7uPu97l7p7pUlJSXtfVpKunrCYHKzY/zq5XVhRxERaXfx5wTH7V8GPOXuh4H33VsZPOcx4GF3fzxYvMXMSoP7S4HaDqdOM32653HZmBN4fGENu/Zr1k4RCVd7i/8XwDqgEJhrZkOAY269m5kBvwRWuPtdLe6aCcwIbs8AnupI4HR1/aQKDh5u4vfzNWuniISrvTt3f+LuA919msetB859n6dNIj4cdJ6ZLQou04A7gAvMrBq4IPg6451S2oOJQ/vw0MvraGhsCjuOiETYMY/Fb2ZmPYHbgbODRXOA7wG723qOu/8DsDbuPr8DGTPG9ZPKufHXC3hm2Tt89LQTwo4jIhHV3qGe+4E64Irgsgf4VaJCZarzT+lPeZ8C7pu7Fnd9oEtEwtHe4h/m7re7+9rg8l1gaCKDZaKsmHHDlKEsrtnNa2/tCDuOiERUe4v/gJlNbv7CzCYBBxITKbN94oxBFBfmcu/ctWFHEZGIatcYP/A54KFgrB9gJ/88Mkc6ID8ni+smDuHu56qp3lLH8P5FYUcSkYhp71E9i939dOA04DR3Hwucl9BkGey6ieXk58S470Vt9YtI8nXoDFzuvqfFp2+/koA8kVBcmMsnzijjydc3UbvnYNhxRCRiOnPqxbYO1ZR2+MyUChqamjSNg4gkXWeKX8cjdsKQPoVcNGoAv3llPXt1hi4RSaJjFr+Z1ZnZnlYudYA+gdRJN549jLqDDfz+tbfDjiIiEXLM4nf3Infv0cqlyN3be0SQtGFMWS8mVBRz/z/e4rCmcRCRJOnMUI90gZvOHsqm3Qf50+JNYUcRkYhQ8Yfs3BH9OHlAEfe8sEbn5RWRpFDxhywWM75w7omsrt3L35a9E3YcEYkAFX8K+MjoUir6FvLT2as1eZuIJJyKPwVkxYzPnzOMZZv28MLK9D2/sIikBxV/ipg+diADe3XTVr+IJJyKP0XkZMW46YNDWbB+J6+s1ZTNIpI4Kv4UckVlGSVFefx0dnXYUUQkg6n4U0h+ThafnVLBS6u3s/DtnWHHEZEMpeJPMZ/8wBB6FeTws7+vDjuKiGQoFX+KKczL5oZJFTz/Zi1LanaFHUdEMpCKPwV9alI5vQpyuGvWqrCjiEgGUvGnoKL8HG46exgvrNzKgvUa6xeRrqXiT1EzzhpCn8Jc7pq1MuwoIpJhVPwpqiA3m8+fM4yXVm/nlbXbw44jIhlExZ/C/uXMIfQryuOuWav0aV4R6TIq/hSWn5PFzeeeyGtv7eCl1drqF5GuoeJPcVdNKKO0Zz53zVqprX4R6RIq/hSXl53FLeedyMK3dzF7ZW3YcUQkA6j408AVlWWU9yngB39dSaPO0iUinZSw4jez+82s1syWtlj2HTPbaGaLgsu0RL1/JsnJivG1C0ewcksdjy+sCTuOiKS5RG7xPwBc1MryH7v7mODylwS+f0b5yOhSTh/Uk7tmreLg4caw44hIGktY8bv7XEATy3cRM+O2qaewefdBHnh5XdhxRCSNhTHGf4uZLQmGgnq39SAzu9HMqsysautWnY4QYOKwPpw7ooR7Zq9m1/76sOOISJpKdvH/HBgGjAE2Az9q64Hufq+7V7p7ZUlJSZLipb5vTD2ZukMN/Gy2pm0WkeOT1OJ39y3u3ujuTcB9wIRkvn8mOHlADz42bhAPvryemp37w44jImkoqcVvZqUtvpwOLG3rsdK2r1xwEmZw5zOawE1EOi6Rh3P+DpgHjDCzGjO7AbjTzN4wsyXAucCXE/X+meyEXt246eyhzFy8ifnrtP9cRDrG0mEagMrKSq+qqgo7RkrZX9/Aef81h75Fucy8eTKxmIUdSURSjJktcPfKo5frk7tpqiA3m29OO5mlG/fwxwX6UJeItJ+KP41dcvoJnDGkN3f+7U3qDh4OO46IpAkVfxozM26/eCTb99Xz07/r8E4RaR8Vf5o7bVAvPnHGIO5/6S3Wbt0bdhwRSQMq/gzwtQtHkJ+dxe0zl2nOfhF5Xyr+DNCvKJ+vXTiCF6u3MXPxprDjiEiKU/FniH85cwinDerJ9/+8gt0HtKNXRNqm4s8QWTHjP6ePZse+Q/zwb2+GHUdEUpiKP4OMGtiTGWeV8/Crb/P62zvDjiMiKUrFn2G+csFJ9CvK41tPLKWhsSnsOCKSglT8GaYoP4fvXHwqKzbv4d4X14YdR0RSkIo/A00dXcq00QO4e1Y1q7bUhR1HRFKMij9Dfe/SUXTPz+brjy7WkI+IHEHFn6H6ds/je5eeyuKa3dz34lthxxGRFKLiz2AfGV3K1FED+PGsVVRryEdEAir+DGZmfP+y+JDP1x5dzGEN+YgIKv6M17d7Hv9x2SgW1+zm7udWhR1HRFKAij8Cpo4u5arxZdzzwhrmrdkedhwRCZmKPyL+7eKRVPQp5MuPLGLX/vqw44hIiFT8EVGQm81Prh7L9n2H+MZjSzR9s0iEqfgjZNTAnnz9whH8bdkWfv3K+rDjiEhIVPwR85nJQznv5H58/8/LWaiJ3EQiScUfMbGY8eMrxjCgZz5f+M1Ctu09FHYkEUkyFX8E9SzI4eefPIOd++v519++rikdRCJGxR9Rowb25D+mj2be2u388NmVYccRkSTKDjuAhOfjZwxi0Yad/GLOWob3K+LjZwwKO5KIJIG2+CPu9otPZdKJffjm40t4da0+3CUSBSr+iMvJinHPNWdQVlzATb9ZwFvb9oUdSUQSTMUv9CzI4VefGo8BNzwwn5379MlekUym4hcAhvQp5N7rKqnZdYBP/eo19h5qCDuSiCRIworfzO43s1ozW9piWbGZzTKz6uC6d6LeXzpufHkxP7tmHEs37eHGh6o4eLgx7EgikgCJ3OJ/ALjoqGW3Ac+7+3Dg+eBrSSEXjOzPDz9+Gi+v2c4Xf6dj/EUyUcKK393nAjuOWnwp8GBw+0HgskS9vxy/y8cN4vaLR/Ls8i18VefsFck4yT6Ov7+7bwZw981m1i/J7y/tdP2kCg4cbuTOZ1bS0OjcfdUYcrK0S0gkE6TsB7jM7EbgRoDBgweHnCaavnDOieRmxfj3p1dQ39jET68ZS152VtixRKSTkr0Jt8XMSgGC69q2Huju97p7pbtXlpSUJC2gHOkzU4by3UtOZdbyLXz2oQU62kckAyS7+GcCM4LbM4Cnkvz+chxmnFXODz42mpdWb+PKX8yjds/BsCOJSCck8nDO3wHzgBFmVmNmNwB3ABeYWTVwQfC1pIErxw/mf6+r5K1t+5h+z8usrq0LO5KIHCdLh1PwVVZWelVVVdgxBHijZjfXPzCfQw2N/PdVYzjv5P5hRxKRNpjZAnevPHq5DtOQDhk9qCdPfOEsBhcX8OkHqrj7uVU0NaX+xoOI/JOKXzqsrLiAxz5/FpePG8jdz1Vzw4Pz2aH5fUTShopfjkt+ThY/+sTpfP/SU3lp9XYuvHsus1e2eZCWiKQQFb8cNzPj2onlPHnzJHoX5HD9r+bzb08tZX+9DvkUSWUqfum0kSf0YOYtk7lhcgUPzVvPBXfNZdbyLWHHEpE2qPilS+TnZPF/PzqSRz83kcK8LD77UBWffaiKDTv2hx1NRI6i4pcuNb68mKe/OIXbpp7Mi9VbOf9Hc/jen5Zr569ICtFx/JIwm3cf4O5Z1Ty6YAMFudl8ZkoFMyaW07swN+xoIpHQ1nH8Kn5JuNW1ddz5zEqeXb6FbjlZXDWhjBsmVzCod0HY0UQymopfQrfynTrunbuWpxZtxIFzR5Rw5fjBnDuihGxN+SzS5VT8kjI27TrAr19Zzx8X1LC17hD9ivK4bOxApo4awJiyXphZ2BFFMoKKX1LO4cYmZr9ZyyPzNzBn1VYampzSnvlceOoAzj25HxPKi+mWq/n/RY6Xil9S2u79h3luxRb+uvQd5lZvpb6hidysGOOG9GLSsL6cMaQ3owf1pCg/J+yoImlDxS9pY399A/PX7eSl1dv4R/U2lm/eA4AZDO1byOllvRhZ2oNhJd05sV93BvbqRiym4SGRo7VV/Cl76kWJroLcbD54UgkfPCl+5rWd++pZsnE3izfsYknNLuau2sbjCze++/j8nBgVfbszqHc3TuiZzwm9ulHaK367f498ehfmUpibpX0HIgEVv6S83oW5R/wiANixr541W/eypnYvq2v3smbrXt7evp9X1m6n7uB75wrKzYrRuzCH3gW59C7IpVdBDoV52RTmZsWv87IpyM2iMDebgrwsuuVkkZMVIycrRm52jNysGDnZFr8OljVfZ5lhBlkxI2ZGzNAvGUlpKn5JS8WFuRQXFjO+vPg999UdPMzm3QfZuOsAW+sOsWt/PTv2HWbnvnp27K9n5756qmv3sv9QA/vqG9l3qIGGLj6ngBnEzFr9pRCLNS9v/iURPAc74vnxZS1f872/TN59XIu72vs6R7xaO99Pku8/p49mQsV7f847Q8UvGacoP4ei/BxO6l/U7ufUNzSx71AD++ob2F/fyIH6Rg43NlHf2MThRqe+oYnDjfFLfUOwPLhucmhsctydxiZo8uC2O00OTU1OU4v7mi+NTdC8j63lrjantWW0+ThaeVz8sd7KsvY9jtTf9RcZhXldf2Sbil8E4sM52bmaTkIiQR+XFBGJGBW/iEjEqPhFRCJGxS8iEjEqfhGRiFHxi4hEjIpfRCRiVPwiIhGTFrNzmtlWYP1xPr0vsK0L43QV5eoY5eqYVM0FqZstE3MNcfeSoxemRfF3hplVtTYtadiUq2OUq2NSNRekbrYo5dJQj4hIxKj4RUQiJgrFf2/YAdqgXB2jXB2TqrkgdbNFJlfGj/GLiMiRorDFLyIiLaj4RUQiJqOL38wuMrOVZrbazG5L4vuWmdlsM1thZsvM7EvB8u+Y2UYzWxRcprV4zjeDnCvN7MIE51tnZm8EGaqCZcVmNsvMqoPr3snMZmYjWqyXRWa2x8xuDWOdmdn9ZlZrZktbLOvw+jGzM4L1vNrMfmKdPJdhG7l+aGZvmtkSM3vCzHoFy8vN7ECL9fY/Sc7V4e9bknI90iLTOjNbFCxP5vpqqx+S9zPmwWniMu0CZAFrgKFALrAYGJmk9y4FxgW3i4BVwEjgO8DXWnn8yCBfHlAR5M5KYL51QN+jlt0J3Bbcvg34QRjZWnzv3gGGhLHOgLOBccDSzqwf4DVgIvFT2f4VmJqAXB8GsoPbP2iRq7zl4456nWTk6vD3LRm5jrr/R8C/hbC+2uqHpP2MZfIW/wRgtbuvdfd64PfApcl4Y3ff7O4Lg9t1wApg4DGecinwe3c/5O5vAauJ50+mS4EHg9sPApeFmO18YI27H+vT2gnL5e5zgR2tvF+714+ZlQI93H2ex/+HPtTiOV2Wy92fdfeG4MtXgEHHeo1k5TqGUNdXs2DL+Argd8d6jQTlaqsfkvYzlsnFPxDY0OLrGo5dvglhZuXAWODVYNEtwZ/l97f4Uy7ZWR141swWmNmNwbL+7r4Z4j+YQL+QsgFcxZH/IVNhnXV0/QwMbicrH8CniW/1Nasws9fNbI6ZTQmWJTNXR75vyV5fU4At7l7dYlnS19dR/ZC0n7FMLv7WxrqSeuyqmXUHHgNudfc9wM+BYcAYYDPxPzUh+Vknufs4YCpws5mdfYzHJjWbmeUClwCPBotSZZ21pa0cyV5v3wYagIeDRZuBwe4+FvgK8Fsz65HEXB39viX7+3k1R25cJH19tdIPbT60jQzHnS2Ti78GKGvx9SBgU7Le3MxyiH9TH3b3xwHcfYu7N7p7E3Af/xyaSGpWd98UXNcCTwQ5tgR/Ojb/eVsbRjbiv4wWuvuWIGNKrDM6vn5qOHLYJWH5zGwG8FHgk8Gf/ATDAtuD2wuIjwuflKxcx/F9S+b6ygYuBx5pkTep66u1fiCJP2OZXPzzgeFmVhFsRV4FzEzGGwfjh78EVrj7XS2Wl7Z42HSg+WiDmcBVZpZnZhXAcOI7bRKRrdDMippvE985uDTIMCN42AzgqWRnCxyxJZYK66zF+7V7/QR/qteZ2ZnBz8N1LZ7TZczsIuAbwCXuvr/F8hIzywpuDw1yrU1irg5935KVK/Ah4E13f3eYJJnrq61+IJk/Y53ZO53qF2Aa8T3ma4BvJ/F9JxP/k2sJsCi4TAN+DbwRLJ8JlLZ4zreDnCvp5FED75NtKPEjBBYDy5rXC9AHeB6oDq6LQ8hWAGwHerZYlvR1RvwXz2bgMPGtqhuOZ/0AlcQLbw3wU4JPyndxrtXEx3+bf87+J3jsx4Lv72JgIXBxknN1+PuWjFzB8geAzx312GSur7b6IWk/Y5qyQUQkYjJ5qEdERFqh4hcRiRgVv4hIxKj4RUQiRsUvIhIxKn6JBDPbG1yXm9k1Xfza3zrq65e78vVFupqKX6KmHOhQ8Td/sOcYjih+dz+rg5lEkkrFL1FzBzAlmHP9y2aWZfE57ecHE4rdBGBm5wRzpv+W+AeRMLMng4ntljVPbmdmdwDdgtd7OFjW/NeFBa+91OJzpl/Z4rVfMLM/Wnwu/YeDT15iZneY2fIgy38lfe1IJGSHHUAkyW4jPk/8RwGCAt/t7uPNLA94ycyeDR47ARjl8alwAT7t7jvMrBsw38wec/fbzOwWdx/TyntdTnySstOBvsFz5gb3jQVOJT63ykvAJDNbTnx6g5Pd3S04qYpIV9MWv0Tdh4HrLH4mpleJf2x+eHDfay1KH+CLZraY+Lz3ZS0e15bJwO88PlnZFmAOML7Fa9d4fBKzRcSHoPYAB4H/NbPLgf3vfUmRzlPxS9QZ8K/uPia4VLh78xb/vncfZHYO8cm9Jrr76cDrQH47Xrsth1rcbiR+Fq0G4n9lPEb8hBrPdODfIdJuKn6Jmjrip7tr9jfg88E0uZjZScGspUfrCex09/1mdjJwZov7Djc//yhzgSuD/QglxE8F2OYMosH87D3d/S/ArcSHiUS6nMb4JWqWAA3BkM0DwH8TH2ZZGOxg3Urrp697BvicmS0hPkPiKy3uuxdYYmYL3f2TLZY/Qfx8qIuJz8b4f9z9neAXR2uKgKfMLJ/4XwtfPq5/ocj70OycIiIRo6EeEZGIUfGLiESMil9EJGJU/CIiEaPiFxGJGBW/iEjEqPhFRCLm/wPIgl+1wgPOMgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Define the same model as before.\n", + "pyro.clear_param_store()\n", + "kernel = gp.kernels.RBF(\n", + " input_dim=1, variance=torch.tensor(5.0), lengthscale=torch.tensor(10.0)\n", + ")\n", + "gpr = gp.models.GPRegression(X, y, kernel, noise=torch.tensor(1.0))\n", + "\n", + "# note that our priors have support on the positive reals\n", + "gpr.kernel.lengthscale = pyro.nn.PyroSample(dist.LogNormal(0.0, 1.0))\n", + "gpr.kernel.variance = pyro.nn.PyroSample(dist.LogNormal(0.0, 1.0))\n", + "\n", + "optimizer = torch.optim.Adam(gpr.parameters(), lr=0.005)\n", + "loss_fn = pyro.infer.Trace_ELBO().differentiable_loss\n", + "losses = []\n", + "num_steps = 2000 if not smoke_test else 2\n", + "for i in range(num_steps):\n", + " optimizer.zero_grad()\n", + " loss = loss_fn(gpr.model, gpr.guide)\n", + " loss.backward()\n", + " optimizer.step()\n", + " losses.append(loss.item())\n", + "\n", + "plot_loss(losses)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot(model=gpr, plot_observed_data=True, plot_predictions=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's inspect the hyperparameters we've learned:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "variance = 0.24472779035568237\n", + "lengthscale = 0.5217776894569397\n", + "noise = 0.042222216725349426\n" + ] + } + ], + "source": [ + "# tell gpr that we want to get samples from guides\n", + "gpr.set_mode(\"guide\")\n", + "print(\"variance = {}\".format(gpr.kernel.variance))\n", + "print(\"lengthscale = {}\".format(gpr.kernel.lengthscale))\n", + "print(\"noise = {}\".format(gpr.noise))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that the MAP values are different from the MLE values due to the prior." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Sparse GPs\n", + "\n", + "For large datasets computing the log marginal likelihood is costly due to the expensive matrix operations involved (e.g. see Section 2.2 of [1]). A variety of so-called 'sparse' variational methods have been developed to make GPs viable for larger datasets. This is a big area of research and we won't be going into all the details. Instead we quickly show how we can use `SparseGPRegression` in `pyro.contrib.gp` to make use of these methods.\n", + "\n", + "First, we generate more data." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "N = 1000\n", + "X = dist.Uniform(0.0, 5.0).sample(sample_shape=(N,))\n", + "y = 0.5 * torch.sin(3 * X) + dist.Normal(0.0, 0.2).sample(sample_shape=(N,))\n", + "plot(plot_observed_data=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using the sparse GP is very similar to using the basic GP used above. We just need to add an extra parameter $X_u$ (the inducing points). Let us initialize the inducing points uniformly. During the course of learning, we will also optimize the locations of these inducing points." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAssAAAGRCAYAAACT9f7XAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAACjtklEQVR4nO39fXwc1Xn3j19jPexq15Z4MDd5IjEl2AhwEhlLEKequxHKFyGh2r6/lkiCgLZkYf11obchanw3cl6xk5dvCS8tLrVikl9FgdwVSowoYLstsMsdArTIBGiIBbSEPDVJ6zRN7oQQiOH8/pDO+MzZMzNnZmd2Z2c/79drX/ZqZ+aaM3MernOd61yXwRgjAAAAAAAAQClLqn0DAAAAAAAARBUoywAAAAAAANgAZRkAAAAAAAAboCwDAAAAAABgA5RlAAAAAAAAbICyDAAAAAAAgA2N1b4BAABQ8fTTT/+3xsbGLxHR+YSJPQiXt4jo+ePHj19zwQUX/Ee1bwYAEC2gLAMAIkljY+OX3va2t7Wfdtpp/7VkyRIEhAeh8dZbbxnHjh0798c//vGXiGiw2vcDAIgWsNYAAKLK+aeddtr/haIMwmbJkiXstNNO+zktrGIAAIAFKMsAgKiyBIoyqBSLdQ1jIgCgBHQMAABgQyqV6vBy/IMPPrgsk8m814+siYmJ02677bZT/Zwr09XVtWrFihXnr1q16tw1a9ac89xzzyXsjv3Od77TdMkll/yW2zU/9alPvc3ut3e+852rf/SjH4Xi1ifL7ejoOCcMOQAAYAeUZQAAiACjo6PHtm7d+p9BXe/OO+/89osvvnj0Yx/72E/+x//4H2fYHbdixYrf/N3f/d233a63d+/etwd1b16Q5T7zzDMvVOM+AAD1C5RlAABw4cEHH1zW1dW16pJLLvmtM88887zBwcEz33rrLSIi+upXv9p65plnnnfBBRes+upXv3oSP2fbtm3v2LFjx+n8+9lnn33eiy++2ExEdNttt526cuXKc1etWnXuhg0bzpSP7+rqWpXL5d65evXq9hUrVpz/d3/3d0uJiH7xi18sufTSS39r5cqV5/b39//W+973vnO+9rWvpZzuvaen55ff/e53E2+99RZde+217zr77LPPW7ly5blf/OIXTyYievHFF5vPPvvs84iI9u7de+pHPvKRs7q7u89+z3vec/511133LiKiLVu2vPP1119fcs4555w7ODh4ps4ze+mll5o/+MEPrly5cuW5H/zgB1f+y7/8SzMR0fe///3G3t7es1atWnXuqlWrzn3ooYfSREQXX3zxWeedd177e9/73vP27Nmz3E4ut/bblcfpXW3ZsuWdZ5111nkrV648N5vNvkunHAAAgGgYAIDaYO9edxeF9vZfU2/vq+bxa9f+itate41+8YslNDV1suXY66/3ZMWdn59vefbZZ7+9YsWK31xwwQXnPPTQQ0u7u7tf3bp164qHHnroxfPOO+/1gYEBV3eGI0eOJPfs2fP2J5988oW3v/3tx//93/+9QXXc8ePHjW9+85vz99xzT9vOnTvfcckll7x08803n3bSSSe9+dJLLx2dm5tLfvCDHzzPTd69997bds4557x25513nvTNb36zZX5+/ls/+tGPGru6uto/8pGP/FI+/ujRo6nnnnvuaEtLy1vvfe97z7/pppv+fd++ff92xx13/LcXXnjhqN7TIrruuuve/bGPfew//+iP/ug///zP//zUXC53xsMPP/zydddd9+7u7u5f7Nix4+Xjx4/Tz3/+8wYioi9/+cvfOf3009/85S9/aXR0dJx7xRVX/JeTXKfyqN7VBz7wgdcOHTp08re//e3nlyxZQj/5yU+Uzx0AAGRgWQYAAA1Wr1796llnnfWbhoYGOu+883718ssvNz/77LPJd73rXa+vXr369SVLltDHP/5xVwX87//+71svu+yy/3r7299+nIjo9NNPf1N13ObNm/+LiGjdunWv/uAHP2gmInriiSeWfvSjH/0pEVFnZ+evV65c+Ss7OVdeeeVvnXPOOec++eSTS2+99dbvP/bYY8uGhoZ+2tjYSGecccbxCy+88Jdf//rXS6zSv/3bv/1/Tz311DdTqRR773vf++uXX37Z1t/ZiWeeeSadzWZ/SkSUy+V++vTTTy9dLMOyT37yk8eIiBobG+nUU099k4hofHz89FWrVp17wQUXtP/4xz9u+ta3vpV0ur5TeVTv6pRTTnkzkUi8dfnll7/nr//6r09aunTpW37KBQCoP2BZBgDUBh4twZbjly17y/P5EolEwozM0dDQQMePHzeIiAzDUB7f2NjI+PI/EdHrr79uEBExxsgwDNcoH8lkki1eh958803zXF3uvPPOb//O7/yOqUzrntvc3CyWk/3mN79RFzBAHnzwwWX/5//8n2VHjhx5YdmyZW91dXWteu211xyNOU7lUb2rpqYmevbZZ+fvv//+1unp6ZMnJyf/2z/+4z++FGAxAAAxBZZlAADwyQc+8IFf/+AHP2j+1re+lSAimp6ePoX/tmLFitefffbZNBHR17/+9dS//du/JYiILrnkkv97//33n/LjH/+4gYjIzg1Dxbp16345PT19MhHR008/nXzppZdadM9dv379L7761a+ecvz4cfrhD3/Y+NRTTy3t7u5+Vff8xsZGxhV+HTo6Ol790pe+dDIR0f79+09Zu3btL4mIPvShD/3i5ptvPo2I6Pjx4/TTn/50yc9+9rOGtra2N5ctW/bWM888k3zuuefSbnK9lufnP//5kp/+9KcNw8PDP//CF77w/fn5eUdfbwAA4MCyDAAAPkmlUuwv/uIvvjswMPDeU0455fiFF174y/n5+RYioiuvvPK/vvzlL596zjnnnPuBD3zg1fe85z2/JiJau3btr2+88cYfdXd3n7NkyRJ2/vnn/+rAgQPf0ZH3yU9+8tjQ0NCKlStXnnv++ef/atWqVa+dfPLJSjcOmZGRkZ898cQTS9vb288zDIN99rOf/cG73/3u43zToRsf//jHj7W3t597/vnn/+r+++9/Rf79/e9//7ncyn7ZZZf9dHJy8ntXXXXViltvvfVtp5566vE777zzO0REk5OT37v66qvfs3LlyuVLliyh22677bv//b//95/ffvvtp61cufLcs84669fvf//7X3WTa1eef/7nf1be/89+9rOGgYGB93LF+3Of+9z3dcoNAACGl2U9AACoFM8999x33v/+9/+k2vcRJY4fP05vvPGGkUql2Le+9a3ERz7ykZUvv/zy89xlA5THc889t/z973//imrfBwAgWsCyDAAANcIvfvGLJd3d3at+85vfGIwx+rM/+7PvQlEGAIBwgbIMAAA1wsknn/zW888/P1/t+wAAgHoCG/wAAAAAAACwAcoyACCqvPXWW2+FHrYMACKixbqG2MsAgBKgLAMAosrzx44da4PCDMLmrbfeMo4dO9ZGRM9X+14AANEDPssAgEhy/Pjxa3784x9/6cc//vH5hIk9CJe3iOj548ePX1PtGwEARA+EjgMAAAAAAMAGWGsAAAAAAACwAcoyAAAAAAAANkBZBgAAAAAAwAYoywAAAAAA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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "N = 1000\n", + "X = dist.Uniform(0.0, 5.0).sample(sample_shape=(N,))\n", + "y = 0.5 * torch.sin(3 * X) + dist.Normal(0.0, 0.2).sample(sample_shape=(N,))\n", + "plot(plot_observed_data=True)\n", + "\n", + "# initialize the inducing inputs\n", + "Xu = torch.arange(20.0) / 4.0\n", + "\n", + "\n", + "def plot_inducing_points(Xu, ax=None):\n", + " for xu in Xu:\n", + " g = ax.axvline(xu, color=\"red\", linestyle=\"-.\", alpha=0.5)\n", + " ax.legend(\n", + " handles=[g],\n", + " labels=[\"Inducing Point Locations\"],\n", + " bbox_to_anchor=(0.5, 1.15),\n", + " loc=\"upper center\",\n", + " )\n", + "\n", + "\n", + "plot_inducing_points(Xu, plt.gca())" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "# initialize the kernel and model\n", + "pyro.clear_param_store()\n", + "kernel = gp.kernels.RBF(input_dim=1)\n", + "# we increase the jitter for better numerical stability\n", + "sgpr = gp.models.SparseGPRegression(X, y, kernel, Xu=Xu, jitter=1.0e-5)\n", + "\n", + "# the way we setup inference is similar to above\n", + "optimizer = torch.optim.Adam(sgpr.parameters(), lr=0.005)\n", + "loss_fn = pyro.infer.Trace_ELBO().differentiable_loss\n", + "losses = []\n", + "locations = []\n", + "variances = []\n", + "lengthscales = []\n", + "noises = []\n", + "num_steps = 2000 if not smoke_test else 2\n", + "for i in range(num_steps):\n", + " optimizer.zero_grad()\n", + " loss = loss_fn(sgpr.model, sgpr.guide)\n", + " locations.append(sgpr.Xu.data.numpy().copy())\n", + " variances.append(sgpr.kernel.variance.item())\n", + " noises.append(sgpr.noise.item())\n", + " lengthscales.append(sgpr.kernel.lengthscale.item())\n", + " loss.backward()\n", + " optimizer.step()\n", + " losses.append(loss.item())" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAEHCAYAAABfkmooAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAieklEQVR4nO3deZwU9Z3/8deney6u4ZABh5nhFFBAzhHx1jUqHgFkPUhMwi9x1zUxa0yyyWLy+22y+0v2YZJd181ujHETI26MR7xg4y1RiQfKgIByyXDJcA7ncA5zfPaPLrQZhzmY6a7p7vfz8ehHV3+nqutDTdPvqW9VfcvcHRERkaZEwi5AREQ6PoWFiIg0S2EhIiLNUliIiEizFBYiItIshYWIiDQrK1FvbGYPANcAO9x9VNDWC3gMGAhsAG5w9z3Bz+4EbgbqgNvd/cWgfQLwINAJeA74hrfgfN/evXv7wIED2/XfJCKS7hYtWrTT3QsatluirrMwswuBA8BDcWHxU2C3u99lZrOAnu7+92Y2AngEmAj0A14Bhrl7nZm9C3wDWEAsLH7u7s83t/7S0lIvKytLyL9NRCRdmdkidy9t2J6wbih3nw/sbtA8FZgdTM8GpsW1P+ru1e6+HigHJppZIZDv7m8HexMPxS0jIiJJkuxjFn3dfStA8NwnaC8CNsXNVxG0FQXTDdtFRCSJOsoBbmukzZtob/xNzG4xszIzK6usrGy34kREMl2yw2J70LVE8LwjaK8ASuLmKwa2BO3FjbQ3yt3vd/dSdy8tKPjU8RkRETlJyQ6LucDMYHomMCeufYaZ5ZrZIGAo8G7QVbXfzCaZmQFfiltGRESSJJGnzj4CXAz0NrMK4AfAXcDjZnYz8BFwPYC7Lzezx4EVQC1wm7vXBW/1VT45dfb54CEiIkmUsFNnw6ZTZ0VEWi/pp86mInfndws28sdlJzwsIiKSkRLWDZWKzIw/lG2i3uGa0f3CLkdEpMPQnkUDV48u5P3N+9i462DYpYiIdBgKiwauOrMQgGff3xpyJSIiHYfCooHinp0Z178Hf1yqsBAROUZh0YirzyxkxdYq1lUeCLsUEZEOQWHRiKtHx7qinlNXlIgIoLBoVGH3TpQO6MkflyksRERAYXFCV48uZNW2/ZTv2B92KSIioVNYnMBVZxZiBs8u2xZ2KSIioVNYnEDf/DzOGthLV3OLiKCwaNI1owtZs+MAq7epK0pEMpvCoglXjiokYjB36eawSxERCZXCogkF3XI577TezFmyhXQdnVdEpCUUFs2YNraIij2HWbRxT9iliIiERmHRjCtGnUpedoRnlqgrSkQyl8KiGV1zs7hsxKk8u2wrNXX1YZcjIhIKhUULTBvbjz2Hapj/YWXYpYiIhEJh0QIXDiugZ+dsnlmiay5EJDMpLFogOxrh6tGFvLxiGweqa8MuR0Qk6RQWLTRtbBFHaup5abmG/xCRzKOwaKEJA3pS3LOTuqJEJCMpLFrIzJg6th9vrKmkcn912OWIiCSVwqIVpo0tot7R4IIiknEUFq0wtG83RhTmqytKRDKOwqKVpo3rx9JNe1m/82DYpYiIJI3CopWmjCnCDOZo+A8RySChhIWZfdPMlpvZB2b2iJnlmVkvM3vZzNYEzz3j5r/TzMrNbLWZXRFGzcec2j2PSYNO4Zn3NmskWhHJGEkPCzMrAm4HSt19FBAFZgCzgHnuPhSYF7zGzEYEPx8JTAbuNbNosuuOd+34IjbsOsR7m/aGWYaISNKE1Q2VBXQysyygM7AFmArMDn4+G5gWTE8FHnX3andfD5QDE5Nb7vGuDEaifWpxRZhliIgkTdLDwt03A/8CfARsBfa5+0tAX3ffGsyzFegTLFIEbIp7i4qgLTTd8rK5YuSp/HHZVqpr68IsRUQkKcLohupJbG9hENAP6GJmX2hqkUbaGj1YYGa3mFmZmZVVViZ2hNhrxxWx91ANr67SSLQikv7C6Ib6DLDe3SvdvQZ4CjgX2G5mhQDB845g/gqgJG75YmLdVp/i7ve7e6m7lxYUFCTsHwBw/mm9KeiWq64oEckIYYTFR8AkM+tsZgZcCqwE5gIzg3lmAnOC6bnADDPLNbNBwFDg3STX/ClZ0QhTx/Tj1dU72HPwaNjliIgkVBjHLN4BngAWA+8HNdwP3AVcZmZrgMuC17j7cuBxYAXwAnCbu3eIAwXTxxdTU+ca/kNE0p6l67UCpaWlXlZWlvD1TL5nPnnZUZ657byEr0tEJNHMbJG7lzZs1xXcbTR9fBFLNu1lXeWBsEsREUkYhUUbTR1bRMTg6fc0/IeIpC+FRRv1zc/j/KEFPLV4M/X16dmlJyKisGgH08cVsXnvYRZu2B12KSIiCaGwaAeXj+xLl5woTy1WV5SIpCeFRTvonJPF5FGFPPf+Vo7UdIizekVE2pXCop385fgi9lfX8vKK7WGXIiLS7hQW7WTS4FPo1z1Pw3+ISFpSWLSTSMSYOq6I+Wt2Urm/OuxyRETalcKiHU0fV0RdvTN3qYb/EJH0orBoR0P7dmN0cXd1RYlI2lFYtLNrxxWxfEsVq7ftD7sUEZF2o7BoZ58d04+siPHUe9q7EJH0obBoZ7275nLx8AKeeW8zdRr+Q0TShMIiAaaPL2Z7VTVvlO8MuxQRkXahsEiAS8/oQ4/O2TyxSF1RIpIeFBYJkJsVZeqYfry4fBv7DtWEXY6ISJspLBLk+tISjtbWM1e3XBWRNKCwSJCR/fI5/dRu6ooSkbSgsEgQM+O6CcUs3bSXNdt1zYWIpDaFRQJNG1dEVsT4g/YuRCTFKSwSqHfXXC45vQ9PLd5MbV192OWIiJw0hUWCXT+hmJ0Hqnn9w8qwSxEROWkKiwS75PQ+nNIlhz+UqStKRFKXwiLBsqMRpo0rYt6q7ew+eDTsckRETorCIgmum1BMTZ0zZ8nmsEsRETkpCoskOKMwn1FF+eqKEpGUpbBIkusnlLBiaxXLt+wLuxQRkVYLJSzMrIeZPWFmq8xspZmdY2a9zOxlM1sTPPeMm/9OMys3s9VmdkUYNbfVlDH9yIlGdEW3iKSksPYs/h14wd1PB8YAK4FZwDx3HwrMC15jZiOAGcBIYDJwr5lFQ6m6DXp2yeEzI/owZ8kWjtbqmgsRSS1JDwszywcuBH4D4O5H3X0vMBWYHcw2G5gWTE8FHnX3andfD5QDE5NZc3u5fkIJuw8e5U+rdoRdiohIq4SxZzEYqAR+a2bvmdmvzawL0NfdtwIEz32C+YuATXHLVwRtn2Jmt5hZmZmVVVZ2vIvgLhjamz7dcnli0abmZxYR6UDCCIssYDzwS3cfBxwk6HI6AWukrdH7lbr7/e5e6u6lBQUFba+0nWVFI1w7vohXV1eyY/+RsMsREWmxMMKiAqhw93eC108QC4/tZlYIEDzviJu/JG75YiBlbxJx/YQS6uqdpxbrmgsRSR1JDwt33wZsMrPhQdOlwApgLjAzaJsJzAmm5wIzzCzXzAYBQ4F3k1hyuzqtT1dKB/Tk8YWbcG90B0lEpMMJ62yovwUeNrNlwFjgn4G7gMvMbA1wWfAad18OPE4sUF4AbnP3ujCKbi83nlXCup0HWbhhT9iliIi0iKXrX7elpaVeVlYWdhmNOnS0lrN/PI/LRvTl7hvHhl2OiMjHzGyRu5c2bNcV3CHonJPFlLH9ePb9rew7XBN2OSIizVJYhGTGWf2prq1nrgYXFJEUoLAIyaiifEYU5vPoQl1zISIdn8IiJGbG5yaWsHxLFe9XaHBBEenYFBYhmjK2iNysCI8u/CjsUkREmqSwCFH3TtlcfWYhc5ds4dDR2rDLERE5IYVFyG48q4T91bU8u2xr2KWIiJyQwiJkEwf1YnDvLjymA90i0oEpLEJmZtx4VgllG/dQvmN/2OWIiDRKYdEBTB9fTFbEtHchIh2WwqIDKOiWy2Uj+vLk4s1U16b0sFcikqYUFh3EjWfF7qL3ygrdRU9EOh6FRQdxwdACinp04pF3dc2FiHQ8CosOIhqJHeh+o3wnG3YeDLscEZHjKCw6kBvPKiEaMX6vvQsR6WAUFh1I3/w8Lh/Rlz+UbeJIjQ50i0jHobDoYG46ewB7DtXw/Ae6oltEOg6FRQdz7pBTGNS7Cw8vUFeUiHQcCosOJhIxPj+xP2Ub97BqW1XY5YiIAC0MCzPrYmaRYHqYmU0xs+zElpa5rptQTE5WRHsXItJhtHTPYj6QZ2ZFwDzgy8CDiSoq0/XsksM1Zxby9HubOVitoctFJHwtDQtz90PAdOA/3P1aYETiypKbJg3gQHUtc5ZsCbsUEZGWh4WZnQPcBDwbtGUlpiQBGN+/B6ef2o2H39mIu4ddjohkuJaGxR3AncDT7r7czAYDryasKsHM+MKkASzfUsWSTXvDLkdEMlyLwsLdX3f3Ke7+k+BA9053vz3BtWW8aeOK6JIT5eF3dKBbRMLV0rOhfm9m+WbWBVgBrDaz7yS2NOmam8W0cUX8z9It7D10NOxyRCSDtbQbaoS7VwHTgOeA/sAXE1WUfOKmswdQXVvPE4sqwi5FRDJYS8MiO7iuYhowx91rgDYddTWzqJm9Z2Z/DF73MrOXzWxN8Nwzbt47zazczFab2RVtWW+qGdEvn9IBPfnvBRupr9eBbhEJR0vD4lfABqALMN/MBgBtvbz4G8DKuNezgHnuPpTYtRyzAMxsBDADGAlMBu41s2gb151SZp47kI27DvHah7oxkoiEo6UHuH/u7kXufpXHbAQuOdmVmlkxcDXw67jmqcDsYHo2sb2YY+2Punu1u68HyoGJJ7vuVDR51Kn0zc/lwbc2hl2KiGSolh7g7m5md5tZWfD4V2J7GSfrHuC7QH1cW1933woQPPcJ2ouATXHzVQRtjdV5y7EaKysr21Bex5IdjXDT2QOY/2ElaysPhF2OiGSglnZDPQDsB24IHlXAb09mhWZ2DbDD3Re1dJFG2hrtvHf3+9291N1LCwoKTqa8DutzE/uTE43w0Fsbwi5FRDJQS8NiiLv/wN3XBY9/BAaf5DrPA6aY2QbgUeAvzOx3wHYzKwQIno910FcAJXHLFwMZNwZGQbdcrhldyBOLKth/pCbsckQkw7Q0LA6b2fnHXpjZecDhk1mhu9/p7sXuPpDYges/ufsXgLnAzGC2mcCcYHouMMPMcs1sEDAUePdk1p3qZp47kINH63hSp9GKSJK1dHynW4GHzKx78HoPn3yxt5e7gMfN7GbgI+B6gGB4kceJXQxYC9zm7hl5z9ExJT0YW9KDh97eyJfOGUgk0lgPnYhI+2vp2VBL3X0MMBoY7e7jgL9o68rd/TV3vyaY3uXul7r70OB5d9x8P3b3Ie4+3N2fb+t6U9n/OXcg63YeZP6a9DmALyIdX6vulOfuVcGV3ADfSkA90oyrziykoFsus3WgW0SSqC23VVUfSAhysiJ8fmJ/Xl1dyfqdB8MuR0QyRFvCQmNPhOSms/uTFTEeentD2KWISIZoMizMbL+ZVTXy2A/0S1KN0kCf/DyuHl3IH8oqqNJptCKSBE2Ghbt3c/f8Rh7d3F13ygvRzecP4kB1LY+9u6n5mUVE2qgt3VASotHFPZg4qBe/fXM9NXX1zS8gItIGCosU9tcXDGbLviM8/8G2sEsRkTSnsEhhl57eh8G9u/DrP6/DXecbiEjiKCxSWCRifOX8QSyr2Me763c3v4CIyElSWKS4vxxfTM/O2fzXn9eHXYqIpDGFRYrrlBPli5MGMG/VdtbpXhcikiAKizTwxXMGkh2N8Js3tHchIomhsEgDBd1yuXZsEU8sqmD3waNhlyMiaUhhkSb+6oJBVNfW87sFuk+3iLQ/hUWaGNq3G5cML+DBtzZw+GhG3u5DRBJIYZFGvnrxaew+eJTHFn4UdikikmYUFmlk4qBenDWwJ/fPX8fRWg0BIiLtR2GRZr528Wls2XeEOUs2h12KiKQRhUWauXh4AWcU5nPf62upr9cQICLSPhQWacbM+NrFQ1hbeZCXVmiAQRFpHwqLNHTVmYUMPKUz9762VgMMiki7UFikoWjE+JuLhrCsYh9vlO8MuxwRSQMKizQ1fXwRffNzuffVtWGXIiJpQGGRpnKzovz1BYN5e90uFm3U8OUi0jYKizT2+bP707trDve8sibsUkQkxSks0ljnnCz+5sIh/HnNTso2aO9CRE6ewiLN3TRJexci0nZJDwszKzGzV81spZktN7NvBO29zOxlM1sTPPeMW+ZOMys3s9VmdkWya05lnXOyuPWiIbxRvpOF2rsQkZMUxp5FLfBtdz8DmATcZmYjgFnAPHcfCswLXhP8bAYwEpgM3Gtm0RDqTlk3nT2A3l1zueeVD8MuRURSVNLDwt23uvviYHo/sBIoAqYCs4PZZgPTgumpwKPuXu3u64FyYGJSi05xnXKi3HrRYN4s38W767V3ISKtF+oxCzMbCIwD3gH6uvtWiAUK0CeYrQjYFLdYRdDW2PvdYmZlZlZWWVmZsLpT0RcmDaCgm/YuROTkhBYWZtYVeBK4w92rmpq1kbZGx7Bw9/vdvdTdSwsKCtqjzLSRlx3l1ouG8NbaXSxYtyvsckQkxYQSFmaWTSwoHnb3p4Lm7WZWGPy8ENgRtFcAJXGLFwNbklVrOrnp7P70zc/lpy+s0phRItIqYZwNZcBvgJXufnfcj+YCM4PpmcCcuPYZZpZrZoOAocC7yao3neRlR7njM8NY/NFeXl6xPexyRCSFhLFncR7wReAvzGxJ8LgKuAu4zMzWAJcFr3H35cDjwArgBeA2d9dNpk/S9ROKGVzQhZ+9uJo63e9CRFooK9krdPc3aPw4BMClJ1jmx8CPE1ZUBsmKRvjO5cP56sOLeXJxBTeUljS/kIhkPF3BnYEmjzqVMSU9uOflDzlSo500EWmewiIDmRl/P3k4W/Yd4b/f3hh2OSKSAhQWGercIb25cFgBv3itnKojNWGXIyIdnMIig333iuHsO1zDL/5UHnYpItLBKSwy2Kii7lw3vpgH3lzPhp0Hwy5HRDowhUWG+84Vw8mJRvjxcyvDLkVEOjCFRYbrk5/H1y45jZdXbOfN8p1hlyMiHZTCQrj5/EGU9OrEP/3PCmrr6sMuR0Q6IIWFkJcd5XtXnsHq7ft5ZOGm5hcQkYyjsBAgdqHe2YN6cfdLq9l3SKfSisjxFBYCxC7U+8FnR1J1pJafvLgq7HJEpINRWMjHRvTL58vnDuT373zEoo17wi5HRDoQhYUc547LhlHYPY/vP/2+DnaLyMcUFnKcrrlZ/OCzI1m1bT+/fXND2OWISAehsJBPuWJkXy49vQ//9sqHbN57OOxyRKQDUFjIp5gZP5wyknp3fjBnuW7BKiIKC2lcSa/OfOuyYbyycjtzl+qW5yKZTmEhJ3Tz+YMZ178H/zBnOTuqjoRdjoiESGEhJxSNGP9y/RiO1NTxvac/UHeUSAZTWEiThhR05e8uH84rK7fzzJLNYZcjIiFRWEizvnL+ICYM6MkP565g2z51R4lkIoWFNCsaMX523Whq6ur55mNLqKtXd5RIplFYSIsMLujKP04ZydvrdnHf62vDLkdEkkxhIS123YRipozpx90vf6ixo0QyjMJCWszM+NG1oyjsnsftj7zHvsMaylwkUygspFXy87L5+efGsb3qCN9+fAn1On4hkhEUFtJq4/v35P9efQavrNzBf/ypPOxyRCQJUiYszGyyma02s3IzmxV2PZlu5rkDmT6uiH975UPmrdwedjkikmApERZmFgV+AVwJjAA+Z2Yjwq0qs5kZ/zz9TEb2y+eOR5ewrvJA2CWJSAKlRFgAE4Fyd1/n7keBR4GpIdeU8fKyo9z3hQlkRY2bZ5ex++DRsEsSkQRJlbAoAjbFva4I2iRkJb06c/+XStm89zC3PFTGkZq6sEsSkQRIlbCwRto+dRqOmd1iZmVmVlZZWZmEsgTgrIG9+LcbxlK2cQ/ffnypzpASSUOpEhYVQEnc62LgUzdZcPf73b3U3UsLCgqSVpzA1aML+d5Vp/Ps+1v50bMrNUKtSJrJCruAFloIDDWzQcBmYAbw+XBLkob++oLBbNtXzQNvricvO8J3rhiOWWM7hSKSalIiLNy91sy+DrwIRIEH3H15yGVJA2bG/7vmDI7U1nHva2vJy45y+6VDwy5LRNpBSoQFgLs/BzwXdh3SNDPjR1NHUV1Tz90vf0g0Ytx2yWlhlyUibZQyYSGpIxIxfnrdaGrr6/nZi6upOlLDrMmnq0tKJIUpLCQhohHj7hvG0i0vi1+9vo6qwzX8aNqZRCMKDJFUpLCQhIlGjP8/dRQ9O+fwH38qp3L/Ue6ZMZauufrYiaSaVDl1VlKUmfHty4fzT1NH8urqHVz3y7fYtPtQ2GWJSCspLCQpvnTOQB788lls2XuYqb94k7fKd4Zdkoi0gsJCkuaCoQU8c9t59OqSw02/eYefvbiKmrr6sMsSkRZQWEhSDS7oytyvn8cNE0r4xatrufFXb7Nh58GwyxKRZigsJOk652Txk+tG8/PPjWPNjgNccc987nt9LbXayxDpsBQWEpopY/rxyrcu4pLhfbjr+VVM+c83WbBuV9hliUgjFBYSqr75edz3xQnc94UJ7Dl0lBn3L+CvZi+kfMf+sEsTkTiWrqODlpaWellZWdhlSCscqanjgTfX88tX13LwaC3XjO7HrRcNYUS//LBLE8kYZrbI3Us/1a6wkI5m14FqfjV/HQ8v2MjBo3VcOKyAmecM4KJhBWRFtTMskkgKC0k5+w7X8LsFG/ntmxvYeaCavvm5XDehmGljizitT1eNNSWSAAoLSVk1dfX8adUOHl+4iVdX76DeYXDvLlw+8lQuG9GH0cU9yNYeh0i7UFhIWthRdYQXV2znpeXbeHvtLmrrnU7ZUUoH9mTS4FMYW9KDkf3y6dE5J+xSRVKSwkLSzr5DNby9bidvr93FgnW7Wb39kzOoinp0YkS/fIYUdGXAKZ2DRxdOzc/TyLciTThRWGj4T0lZ3TtnM3lUIZNHFQKw++BRPti8j+VbqlixtYoVW/bx2uod1NR98gdRNGKc0iWH3l1zKegWe/TqkkPX3Cy65WXRLS+brrlZ5Odl0Tk3i5xohNzsSOw5K0JuVpScrAg5WRGFjmQUhYWkjV5dcrhwWAEXDiv4uK2u3tmy9zAf7T7Exl2H2LL3MDsPVFO5v5rKA9Ws3rafvYePcqSm9VePRywWPmZG1IyIxW78FI0YETv24OPX8cfjGx6bN6zRn8XPFn9A/7jFP/VejS8jmePZ288nNyvaru+psJC0Fo0YJb06U9KrM+c1cXfXmrp6Dhyp5UB1LVVHath/pJbDR+uorq2nuraOo7X1VNfWH/dcU1dPvTt17rjHgqmu3vGgrd6hPmiri+/ubdDzG/8yvlv4+Pbm5//UW6dnD7O0gDX8C6IdKCxEgOxohJ5dcujZRQfGRRqj8w1FRKRZCgsREWmWwkJERJqlsBARkWYpLEREpFkKCxERaZbCQkREmqWwEBGRZqXtQIJmVglsPMnFewM727Gc9qK6Wkd1tY7qap10rWuAuxc0bEzbsGgLMytrbNTFsKmu1lFdraO6WifT6lI3lIiINEthISIizVJYNO7+sAs4AdXVOqqrdVRX62RUXTpmISIizdKehYiINEthEcfMJpvZajMrN7NZSV53iZm9amYrzWy5mX0jaP+hmW02syXB46q4Ze4Mal1tZlcksLYNZvZ+sP6yoK2Xmb1sZmuC557JrMvMhsdtkyVmVmVmd4S1vczsATPbYWYfxLW1ehuZ2YRgW5eb2c+tjbe6O0FdPzOzVWa2zMyeNrMeQftAMzsct+3uS3Jdrf7dJamux+Jq2mBmS4L2pGyvJr4bkvv5cnc9Yl1xUWAtMBjIAZYCI5K4/kJgfDDdDfgQGAH8EPi7RuYfEdSYCwwKao8mqLYNQO8GbT8FZgXTs4CfJLuuBr+7bcCAsLYXcCEwHvigLdsIeBc4h9jdUZ8HrkxAXZcDWcH0T+LqGhg/X4P3SUZdrf7dJaOuBj//V+Afkrm9OPF3Q1I/X9qz+MREoNzd17n7UeBRYGqyVu7uW919cTC9H1gJFDWxyFTgUXevdvf1QDmxf0OyTAVmB9OzgWkh1nUpsNbdm7oIM6F1uft8YHcj62zxNjKzQiDf3d/22P/sh+KWabe63P0ld68NXi4Aipt6j2TV1YRQt9cxwV/hNwCPNPUe7V1XE98NSf18KSw+UQRsintdQdNf1gljZgOBccA7QdPXgy6DB+J2NZNZrwMvmdkiM7slaOvr7lsh9mEG+oRQ1zEzOP4/cNjb65jWbqOiYDqZNX6F2F+Yxwwys/fM7HUzuyBoS2ZdrfndJXt7XQBsd/c1cW1J3V4NvhuS+vlSWHyisb67pJ8qZmZdgSeBO9y9CvglMAQYC2wlthsMya33PHcfD1wJ3GZmFzYxb1K3o5nlAFOAPwRNHWF7NedEtSR7230fqAUeDpq2Av3dfRzwLeD3ZpafxLpa+7tL9u/0cxz/R0lSt1cj3w0nnPUE629TXQqLT1QAJXGvi4EtySzAzLKJfRgedvenANx9u7vXuXs98F980nWStHrdfUvwvAN4Oqhhe7Bbe2y3e0ey6wpcCSx29+1BjaFvrzit3UYVHN8llLAazWwmcA1wU9AlQdBtsSuYXkSsr3tYsuo6id9dMrdXFjAdeCyu3qRtr8a+G0jy50th8YmFwFAzGxT8tToDmJuslQf9ob8BVrr73XHthXGzXQscO0tjLjDDzHLNbBAwlNjBq/auq4uZdTs2Tezg6AfB+mcGs80E5iSzrjjH/bUX9vZqoFXbKOhK2G9mk4LPw5filmk3ZjYZ+HtgirsfimsvMLNoMD04qGtdEutq1e8uWXUFPgOscvePu3GStb1O9N1Asj9fJ3uEPh0fwFXEzjRYC3w/yes+n9gu4TJgSfC4Cvhv4P2gfS5QGLfM94NaV9PGs0CaqGswsTMrlgLLj20X4BRgHrAmeO6VzLqC9XQGdgHd49pC2V7EAmsrUEPsL7ibT2YbAaXEviTXAv9JcOFsO9dVTqxP+9jn7L5g3r8MfsdLgcXAZ5NcV6t/d8moK2h/ELi1wbxJ2V6c+LshqZ8vXcEtIiLNUjeUiIg0S2EhIiLNUliIiEizFBYiItIshYWIiDRLYSHSCDM7EDwPNLPPt/N7f6/B67fa8/1FEkFhIdK0gUCrwuLYhVpNOC4s3P3cVtYkknQKC5Gm3QVcENyv4JtmFrXY/SAWBgPe/Q2AmV0c3HPg98QuLMPMngkGX1x+bABGM7sL6BS838NB27G9GAve+wOL3XPgxrj3fs3MnrDYfSgeDq7AxczuMrMVQS3/kvStIxkjK+wCRDq4WcTusXANQPClv8/dzzKzXOBNM3spmHciMMpjw0IDfMXdd5tZJ2ChmT3p7rPM7OvuPraRdU0nNojeGKB3sMz84GfjgJHExvJ5EzjPzFYQGxbjdHd3C25iJJII2rMQaZ3LgS9Z7G5p7xAbcmFo8LN344IC4HYzW0rsnhElcfOdyPnAIx4bTG878DpwVtx7V3hskL0lxLrHqoAjwK/NbDpw6NNvKdI+FBYirWPA37r72OAxyN2P7Vkc/Hgms4uJDT53jruPAd4D8lrw3idSHTddR+xOd7XE9maeJHYTmxda8e8QaRWFhUjT9hO7leUxLwJfDYaMxsyGBaPxNtQd2OPuh8zsdGBS3M9qji3fwHzgxuC4SAGxW3yecGTc4P4G3d39OeAOYl1YIgmhYxYiTVsG1AbdSQ8C/06sC2hxcJC5ksZvTfkCcKuZLSM28ueCuJ/dDywzs8XuflNc+9PE7o+8lNgoo991921B2DSmGzDHzPKI7ZV886T+hSItoFFnRUSkWeqGEhGRZiksRESkWQoLERFplsJCRESapbAQEZFmKSxERKRZCgsREWmWwkJERJr1v+gtimGmD8ZtAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_loss(losses)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, we can plot the predictions from the learnt model along with the optimized inducing points locations." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot(model=sgpr, plot_observed_data=True, plot_predictions=True)\n", + "plot_inducing_points(sgpr.Xu.data.numpy(), plt.gca())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see that the model learns a reasonable fit to the data. We can also see how that the inducing point locations are fairly different from our initialization. We can also view the model learning process via an animation below." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "fig, ax = plt.subplots(figsize=(12, 6))\n", + "\n", + "\n", + "def update(iteration):\n", + " pyro.clear_param_store()\n", + " ax.cla()\n", + " kernel_iter = gp.kernels.RBF(\n", + " input_dim=1,\n", + " variance=torch.tensor(variances[iteration]),\n", + " lengthscale=torch.tensor(lengthscales[iteration]),\n", + " )\n", + " sgpr_iter = gp.models.SparseGPRegression(\n", + " X,\n", + " y,\n", + " kernel_iter,\n", + " Xu=torch.tensor(locations[iteration]),\n", + " noise=torch.tensor(noises[iteration]),\n", + " jitter=1.0e-5,\n", + " )\n", + " plot(model=sgpr_iter, plot_observed_data=True, plot_predictions=True, ax=ax)\n", + " plot_inducing_points(sgpr_iter.Xu.data.numpy(), ax=ax)\n", + " ax.set_title(f\"Iteration: {iteration}, Loss: {losses[iteration]:0.2f}\")\n", + " fig.tight_layout()\n", + "\n", + "\n", + "anim = FuncAnimation(fig, update, frames=np.arange(0, num_steps, 30), interval=100)\n", + "plt.close()\n", + "anim.save(\"../source/_static/img/svgpr-fit.gif\", fps=60)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![](../source/_static/img/svgpr-fit.gif)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are three different sparse approximations that are currently implemented in Pyro:\n", + "\n", + "- \"DTC\" (Deterministic Training Conditional)\n", + "\n", + "- \"FITC\" (Fully Independent Training Conditional)\n", + "\n", + "- \"VFE\" (Variational Free Energy) \n", + "\n", + "By default, `SparseGPRegression` will use \"VFE\" as the inference method. We can use other methods by passing a different `approx` flag to `SparseGPRegression`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## More Sparse GPs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Both `GPRegression` and `SparseGPRegression` above are limited to Gaussian likelihoods. We can use other likelihoods with GPs—for example, we can use the Bernoulli likelihood for classification problems—but the inference problem becomes more difficult. In this section, we show how to use the `VariationalSparseGP` module, which can handle non-Gaussian likelihoods. So we can compare to what we've done above, we're still going to use a Gaussian likelihood. The point is that the inference that's being done under the hood can support other likelihoods." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Gaussian Likelihood" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# initialize the inducing inputs\n", + "Xu = torch.arange(10.0) / 2.0\n", + "\n", + "# initialize the kernel, likelihood, and model\n", + "pyro.clear_param_store()\n", + "kernel = gp.kernels.RBF(input_dim=1)\n", + "likelihood = gp.likelihoods.Gaussian()\n", + "# turn on \"whiten\" flag for more stable optimization\n", + "vsgp = gp.models.VariationalSparseGP(\n", + " X, y, kernel, Xu=Xu, likelihood=likelihood, whiten=True\n", + ")\n", + "\n", + "# instead of defining our own training loop, we will\n", + "# use the built-in support provided by the GP module\n", + "num_steps = 1500 if not smoke_test else 2\n", + "losses = gp.util.train(vsgp, num_steps=num_steps)\n", + "plot_loss(losses)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot(model=vsgp, plot_observed_data=True, plot_predictions=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## GP Classification\n", + "\n", + "We will now briefly discuss GP classification for multi-class classification. The two main changes needed to the model specification (in comparison to GP regression) are:\n", + "\n", + "$$p(y\\mid f)=\\mathrm{Softmax}(f)$$\n", + "\n", + "or $$y \\sim \\mathrm{Categorical(Softmax(f))}$$\n", + "\n", + "\n", + "We will be using the Iris dataset in our example. We will encode the three classes as numbers 0 for setosa, 1 for versicolor, and 2 for virginica. Also, to keep the example simple, we will be considering only two input features (petal length and petal width)." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal_lengthsepal_widthpetal_lengthpetal_widthspecies
05.13.51.40.2setosa
14.93.01.40.2setosa
24.73.21.30.2setosa
34.63.11.50.2setosa
45.03.61.40.2setosa
\n", + "
" + ], + "text/plain": [ + " sepal_length sepal_width petal_length petal_width species\n", + "0 5.1 3.5 1.4 0.2 setosa\n", + "1 4.9 3.0 1.4 0.2 setosa\n", + "2 4.7 3.2 1.3 0.2 setosa\n", + "3 4.6 3.1 1.5 0.2 setosa\n", + "4 5.0 3.6 1.4 0.2 setosa" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = sns.load_dataset(\"iris\")\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "# only take petal length and petal width\n", + "X = torch.from_numpy(\n", + " df[df.columns[2:4]].values.astype(\"float64\"),\n", + ")\n", + "df[\"species\"] = df[\"species\"].astype(\"category\")\n", + "# encode the species as 0, 1, 2\n", + "y = torch.from_numpy(df[\"species\"].cat.codes.values.copy())" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired, edgecolors=(0, 0, 0))\n", + "plt.xlabel(\"Feature 1 (Petal length)\")\n", + "_ = plt.ylabel(\"Feature 2 (Petal width)\")" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "kernel = gp.kernels.RBF(input_dim=2)\n", + "pyro.clear_param_store()\n", + "likelihood = gp.likelihoods.MultiClass(num_classes=3)\n", + "# Important -- we need to add latent_shape argument here to the number of classes we have in the data\n", + "model = gp.models.VariationalGP(\n", + " X,\n", + " y,\n", + " kernel,\n", + " likelihood=likelihood,\n", + " whiten=True,\n", + " jitter=1e-03,\n", + " latent_shape=torch.Size([3]),\n", + ")\n", + "num_steps = 1000\n", + "loss = gp.util.train(model, num_steps=num_steps)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_loss(loss)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy: 96.00%\n" + ] + } + ], + "source": [ + "mean, var = model(X)\n", + "y_hat = model.likelihood(mean, var)\n", + "\n", + "print(f\"Accuracy: {(y_hat==y).sum()*100/(len(y)) :0.2f}%\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also calculate the confusion matrix." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "cm = confusion_matrix(y, y_hat, labels=[0, 1, 2])\n", + "ConfusionMatrixDisplay(cm).plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As before, let us plot our predictions over a 2d grid." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "xs = torch.linspace(X[:, 0].min() - 0.5, X[:, 0].max() + 0.5, steps=100)\n", + "ys = torch.linspace(X[:, 1].min() - 0.5, X[:, 1].max() + 0.5, steps=100)\n", + "xx, yy = torch.meshgrid(xs, ys, indexing=\"xy\")\n", + "\n", + "with torch.no_grad():\n", + " mean, var = model(torch.vstack((xx.ravel(), yy.ravel())).t())\n", + " Z = model.likelihood(mean, var)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "source": [ + "def plot_pred_2d(arr, xx, yy, contour=False, ax=None, title=None):\n", + " if ax is None:\n", + " fig, ax = plt.subplots()\n", + " image = ax.imshow(\n", + " arr,\n", + " interpolation=\"nearest\",\n", + " extent=(xx.min(), xx.max(), yy.min(), yy.max()),\n", + " aspect=\"equal\",\n", + " origin=\"lower\",\n", + " cmap=plt.cm.PuOr_r,\n", + " )\n", + " if contour:\n", + " contours = ax.contour(\n", + " xx,\n", + " yy,\n", + " torch.sigmoid(mean).reshape(xx.shape),\n", + " levels=[0.5],\n", + " linewidths=2,\n", + " colors=[\"k\"],\n", + " )\n", + "\n", + " divider = make_axes_locatable(ax)\n", + " cax = divider.append_axes(\"right\", size=\"5%\", pad=0.1)\n", + "\n", + " ax.get_figure().colorbar(image, cax=cax)\n", + " if title:\n", + " ax.set_title(title)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(ncols=3, figsize=(16, 4))\n", + "for cl in [0, 1, 2]:\n", + " plot_pred_2d(\n", + " mean[cl, :].reshape(xx.shape), xx, yy, ax=ax[cl], title=f\"f (class {cl})\"\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "p_class = torch.nn.functional.softmax(mean, dim=0)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(ncols=3, figsize=(16, 4))\n", + "for cl in [0, 1, 2]:\n", + " plot_pred_2d(\n", + " p_class[cl, :].reshape(xx.shape), xx, yy, ax=ax[cl], title=f\" p(class {cl})\"\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_pred_2d(Z.reshape(xx.shape), xx, yy, title=\"Prediction\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see our model doing a good job in classifying the IRIS data based on the two features. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Combining Kernels\n", + "\n", + "We now look into combining different kernels. We will create a simple data set containing a linear trend and some periodicity." + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "X = torch.linspace(-5, 5, 100)\n", + "y = torch.sin(X * 8) + 2 * X + 4 + 0.2 * torch.rand_like(X)\n", + "plt.scatter(X, y)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can clearly see a trend in the data. Let us use a combined kernel as follows:\n", + "\n", + "`Linear + RBF * Periodic`" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pyro.clear_param_store()\n", + "linear = gp.kernels.Linear(\n", + " input_dim=1,\n", + ")\n", + "periodic = gp.kernels.Periodic(\n", + " input_dim=1, period=torch.tensor(0.5), lengthscale=torch.tensor(4.0)\n", + ")\n", + "rbf = gp.kernels.RBF(\n", + " input_dim=1, lengthscale=torch.tensor(0.5), variance=torch.tensor(0.5)\n", + ")\n", + "k1 = gp.kernels.Product(kern0=rbf, kern1=periodic)\n", + "\n", + "k = gp.kernels.Sum(linear, k1)\n", + "model = gp.models.GPRegression(\n", + " X=X,\n", + " y=y,\n", + " kernel=k,\n", + " jitter=2e-3,\n", + ")\n", + "\n", + "loss = gp.util.train(model)\n", + "plot_loss(loss)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXIAAAD4CAYAAADxeG0DAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAA+3UlEQVR4nO3deXzU1b34/9eZmUxmMtkm+54QCBASBEJAdgEFRRC1VevWWqu1tbfb7e29re391tv23vvr7X57bbXWVmutG+4IaFEBAUEgrEEgYcu+ZzLZZp/P748wcYAkBBLI9n4+Hj4gM5PPnJHJe07Oeb/fR2mahhBCiJFLN9QDEEIIMTASyIUQYoSTQC6EECOcBHIhhBjhJJALIcQIZxiKJ42Li9OysrKG4qmFEGLEKioqatQ0Lf7c24ckkGdlZbFnz56heGohhBixlFJlPd0uSytCCDHCSSAXQogRTgK5EEKMcBLIhRBihBuSzU4hhBjtXF4fpXXtNHe4ibEYyUkMJ9SgvyzP1e9ArpT6C7AKqNc0Lf/Mbf8BfBloOPOwH2iatn6wBymEECNJVYuDp7aepNXhQaHQ0LCEGlg8KQGDTg16YL+YGfkzwGPAs+fc/htN0345KKMRQogRzuX18dTWk/j9GmnWMABanR52nmjio+ONTE2LRqcg0hzCgwuzSY02D/g5+71Grmnah0DzgJ9RCCFGsdK6dlodHqLDjAB4/X72ldswGnSE6HWYQnSkWcPw+zWe2noSt9c/4OccjDXyryulvgDsAf5F0zRbTw9SSj0EPASQkZExCE8rhBDDT3OHG4UCIOHgx0xc8ycmWmKoT87muDUdvXkqRGQQHWak0tZJSV0b+alRA3rOgWatPA6MB6YDNcCvenugpmlPappWqGlaYXz8eRWmQggxKsRYjGhoGBwd5L34e8JbGphYdYwFezbwxY1PMmvbG92PVShsHe4BP+eAZuSaptV1D0ipPwFvD3hEQggxguUkhhNpDiH9zacJbbNTnzGRtVOuJauxnPT603TkTut+rIaG1WIc8HMOKJArpZI1Tas58+WtQPGARySEECNUIOWw0N9M1vYN+JVi64r72e+P5vC4aczNjiPCFAJAS6ebSHMIExMjBvy8F5N++AKwGIhTSlUCjwKLlVLTAQ04DXxlwCMSQogRqDvlsNPNjU//Fp3m51DhdeQtLmSeOYQtxxqwOzy0OrxoaN1ZK0bDwOsy+x3INU27q4eb/zzgEQghxAgXnHJYeHofKac/wR0eSenKu/FW2nlkRS4LJsRTUteGrcON1WJkYmLEoARxkMpOIYQYsEDKYZo1jMwtXVuFpSvvJiwu9qzMlIFmp/RGeq0IIcQABVIOTc0NWE8ewRdipHrWYmDwMlP6IoFcCCEGKJBymLR3KwD1+bPwhXZVbA5WZkpfJJALIcQABVIOE3Z/CEDNzEXA4Gam9EXWyIUQYgACKYczVSsx1adwmcI4kDIFn61zUDNT+iKBXAgx5l1qy9ngLocFm7oav56cXMjc3CRyEiIGNTOlLxLIhRBjWk8tZ/vTmfCsLofRZiZ+shOAupmLqK+0s3JqyhUJ4iBr5EKIMcrl9bGv3MaP3zpMQ5uL5CgTqVZzvzsTBnc5jKg6RXhdJa7wKFxTC2h1eCipa7tir0Vm5EKIMScwCy9vaKO99AQ59ioibFUYc3Npmbu0X50Jg7scJhd1ZavUzpiHptdfkZTDYBLIhRBjSmBJxNDeypee/hExDZWf3rnvH+wKj6B56qwLBuNAyqHy+UjZvRn4NFvlSqQcBpOlFSHEmBJYErnq43eJaaik3RTOkQkFFE+cBcBVf/stHeWV1LY6aOpw4/L6erxOIOXQvH8XJnszHQkptGTnXrGUw2AyIxdCjCnNHW6MTkd3Kf1zK7/G6eQczAaFcjjIqyim4K+/YOuqf2FLSQMHKlt63PgMNeh5cGE2nzzzcwAOT1tMZYvjiqUcBpMZuRBizHB5fTR3uEnfuo4QRwdNE/KImTMbpcDm9PKrmXfSZLEyrv40/1SygYyYvjc+E70dpB3bi6bTM/7e27l//jgeWZE7KOdwXgwJ5EKIMaGqxcHPNhxl26FyCne/C8DrectRwIIJ8SSEh0JUFDvu/Q5+vYGcbeuxHj9MdJjxvCwUl9dHcZWdfU89D14vlsXXsODqyeSnRl3RmXiABHIhxKgXnPM978g2IpztlCeOY398Dh+WNFDV4sBs1DMj3Yoh/ypOLr8NgCkvPU5jczv1rU72ldlweX3dHwhPbzuJd+0bALybOZuqFseQvT4J5EKIUS+wwRkTAuPefx2AutV3M3tcLElRJq6ZGM/DiydgNnZVc55c9lna4pKJqK3Aun4N5c2dbC5p4L/WHeF/3yvB79fIt5UR3VSDM9JKdc70C+adX04SyIUQo14g5zu+eDemVhttKZk0TZ1FQqSJpEgzsRYjU1IiiTSH0NLpxq038NL8OwFYvmcd2V47ExMjONXQztbSBpxuL1kfvAFA9dVLiYowX/EioGASyIUQo153m9l92wGouvpaUF3FPIGc70AWik6nOFLTyu7YCRTlzCbE5+Ge7S+w51gVp5s6aO30kPbSUyQd/BifwUjFvOXAlek73hsJ5EKIUS8nMRyr3kd88W4AaqfPA85vM5sabeaRFbksnphAZkwYJ257ALfZQuqJQ3zr+f+gsPE4tx19j+uK38en0/Psiq/SHpMIXPkioGASyIUQo16oQc+9WiUGj5u69BxOqHAqbZ3odOq8nG+jQUdBppWESBORKUn84/5/pzomldjWRh5a+1vuPLQev1K8dsOXOZSaR1OHa0iKgIJJQZAQYli71Baz5zJ8+AEA8Tet5ObpKX0egByo2mzpdGNPyGTzZ3/IDZ+8zzU73yTE5+W1JZ9nR+YMOl1eKpo7yUmMuOJFQMEkkAshhp1A8C6pa2PzsQb0OtArXb9bzJ53rdP16DZvRgFZn1lFXlp8n98TWC9/autJWp0e2nwa66cuZ0/OLGZGKczZk5je7qLC1sltM9O5cWrykAVxkEAuhBhmAp0JbR1uiqvsaH6NBZV7mWUvo3zV3dT5DTy19SSPrMi9YPAMXCtu1xaWut3UZkzi5X0tPBgec8EPgsB6+eFqO09sPkGIQUdWbCI+nUJP1xJMTmLEkAdxkDVyIcQwEly4Yw7Rk9zewD9vfIw7332K8Ts3MvP3j0JrK6V1baw/VNNrQ6tzrzXlWNcmp23Wwn71Gg8wGnTMyLDyo9V5xEeEUmN3UGVz9Lq+PlRkRi6EGDYChTtp1jCMH7zLXW89SYjPS6fJQocxjPiacub+6afsuP4bvFJErw2tgq+VaYb4T4rQlKJ2+rx+9Ro/V2B2XlLXhq3D3ef6+lAYHqMQQgg+LdxRHg9z//EcIT4v+6fM53f3/Rf/sfTrNIbHkll/mn/64EkyIwx9zq4D10reuw2914NtXC6u6Fjg0nK+jQYd+alRLJwYP2Q9VXozfEYihBjzugt39m/H3NFKdVwaLy65jyZ9GE2mKJ66+Z9pC4tkYtUx5mx9o8eGVmddS/N3t6utWHB9931DmfN9OUggF0IMG4G0v9TN6wCoXrwSpVM0tbvwaRp1EfE8d+PXAMje9CZh9VW9zq5zEsMZX1NCRHUZrohoaqfPB84vAhoNJJALIYaFQMphoaeBuPISXKYwDk+ey7hYCxMSI8hNjmRGRjQZC+dQOec6dD4v41/8I7X2zh5P8gk16Fl2ZAsAh2deS2W7d9htUg4W2ewUQgy5QJpgq8PDgjfXAHB02iKuzkslJyGCrNgwfrWxq+ugXqcouv4uYvd9RGrpARIOfMyWSPNZG58ur4/SAyXotm4Bg4Hcr95HRlj0sNukHCyj69UIIUac4DTBrFA/Ew51NbaqXHgDByu7ug6Gm0K6G1qVNXXwXrWbtTNvAuDuPa+SFa7v3vg83djBzzYc5fAf/oLy+zmeN4e1FW6yE8KH3SblYBl9r0gIMaIE0gSjw4yk7tqEwe2icdI09JnjztrI7G5oNSmBpCgTrhtvwZ46DktLI1c9+xsiDBqnGtr5/msHsTXZyd27CYCGZbdcVO74SCSBXAgxpAJpggBpH/0DgPKFK4Dz0wSNBh0xFiNJkWbio8IovuebeMwWkg7sYML//oSTlU14jx3hpj89Soijg8bMibRm5vSZ3TIayBq5EGJIBVIOw2vKiagpxx0WQUP+LKDnNMHA4wHa0rPZ8fWfUPB/jzKpvJj/WPdzElob0Gt+GqPi+fu8u5hwZl19KPuFX24yIxdCDEjgIOIPSxoorrL3WTbfk0DKYfTHXRkmddPmoOkNvaYJBncmBDgdncZjt3wXuyWaZHsdStPYOeM6/vj5n1AWlUJThwsYfbnjwWRGLoS4ZMHZJgqF1+/Hp2ksnZxATkJEv1rOhhr0PLBgHFU//wiA4pxZVNk6u7scnrs5GdyZsNLWSX2rk/KweJ647Xvccnwrm5LyOZ2cgylED14PTrdvVOaOB5NALoS4JIFsE83jYc4n26hOzGST30qb08uR6lampkUTHda/lrNx9RW0NVSjRUUz69brWB4Z1meaYHDvk31lNjaXNJCbnMqpwinEOD2UldtodXrodHtpdXqJthhHXe54sH4HcqXUX4BVQL2maflnbosBXgKygNPAHZqm2QZ/mEKI4cTl9bHhUC2ltXbuev9psvdvI1enxzXvNooKl9Pq9GIK0XVni/TWcjZQBOT8+6tYgMjly5iSm9yvMQR6n+QkhnOyqYM2Z1fmS6QphAUT4jnd2I7b5+fhxRPISxmdaYcBF/PKngFuOOe27wPva5qWA7x/5mshxChW1eLgZxuO8sqechas6wriHr0Bvd/HTdte4o63/4DJ5cDp9vWZLRK4ztPbTuJ9byMAa2OmUNXiuKjxBB+aXGnrpMrmoMbuID7SxKOr85mRYR3VQRwuYkauadqHSqmsc26+GVh85u9/BTYD3xuMgQkhhp/g4p2bd79J/tFtePUGHrv+69Bq5+FdLzLleBFfbmth6zf+E+i502DwdXI76ohqrsUVEUVdZm6/D40INtzbzF5uA32ViZqm1QCc+TOhtwcqpR5SSu1RSu1paGgY4NMKIYZCoHhnwqmD5H/4Jj6dnudu+CrVWVP4OG0av739h7SGRTGu7gTTi7cBPWeLBBcBJe/relzdtHlERZgvOd97OLeZvdyu2CvVNO1JTdMKNU0rjI/v+7w8IcTwFCjeST9TuPPJsts5lj0Nj9+PX9Mo0UexbuEdAExe+yyVZTW0OT14fP6z0hK7+457PSTv6Uo7rClYAFxar/CxbqCBvE4plQxw5s/6gQ9JCDFcxViMhLa3EF+8B79OR+PC61kwIZ6CdCuTkiLISYygbe4SKjKnYOxoY9K65zHodDy3s4yfbTjavf4dKOpJ3bUJs62R9sQ0bONzgdGd7325DDSQvwXcd+bv9wFvDvB6QohhLCcxnLyjO9H5fTTmFuCKikGvUxgNOqamRfOHe2byhXlZbFr+eXw6PQuObmWmq440a9hZ/U5yEsOJMiqy3nkZgBM33AE6/ajP975c+h3IlVIvADuASUqpSqXUA8DPgGVKqVJg2ZmvhRCjVKhBz8wjXYU7B/MXnHcQcbjJQIhehzs9i/LFN6E0jbwX/4Df5cTt9VNa18Zb+6s4XG1n/sndhNsaaIlLpmhc4ajtFX4lXEzWyl293HXtII1FCDHMOY8cwV9agi4ykiVf/Aw2D+dliATWv4+v+BxJ+z8iquIESX/6De8t+SKtDg+/3lhCuAF+8uqzAOxeeCvzJsWTkxAxpjJNBpP8HxNC9IvL6+PE314CwLtkOTnpMT1miATWv32mMHY9+H3cBiMFx3Zy/eH36fT4sYQaWHBqD1EtDbQnpNA8e1F333EJ4pdGSvSFGMUClZPNHW5iLMZ+9T7pSVWLg79sOsbKd9ZjBt5MnoFnw9Eey++Dm1rVR6Vyaun9fPEff2TZ1lfwTWpgUmcdmdWlAOxb/Bmiws1U2jopqWsjPzVqMF72mCOBXIhR6tyGVhpadyOqC/U+CRYo3kk+shdzZxttyZmYp+Thcnh6LN4JbmpVYeukIu0qkgpXccOet7nx2Obuxx0cN4Ojk+eQjqQcDpQEciFGoeDKyTRrWPftLZ3ui66cDBTvLDzUtclZNXsxKEV0mLHXmXSg0nL9oRpeKaqg/pZ72BcRiqOugaqsKZxKn0ytMjPdFAJIyuFASSAXYhQKBN80axhoXYcweDUNt9dPha2T9YdqWDE1qV/LLM0dbowuJwnFuwGoLVjYfV9fM2mjQceKqUkcqGzB79eouuVeth9vDAyHUAWxllBJORwEsrMgxCjUfXya30/BEz/l2n+9k7g//ZbaA4epaO7klaKKswp0+hJjMZJ+rAi9x40tOxdnzKeV2ReaSQc3tKq1O0mJMtPh8tLh8pISZabG7pCUw0EgM3IhRhmX10dzh5vaVgdTP95AwidFAMwp3sKc4i0cTZvCvi/96wVbzAbkJIZTd3gHADVBs/H+zqTPbWgVbuoKO+1O75hrbnW5SCAXYhQJbHDaOtz4ysuZ/s7zALwy93YyOpuY9sl2Jld+gvn9lzhy58P9yhYxtLeRUnoAv9KxL3sGTpvjrI3T/gThQEMrcXlIIBdilAje4My0mvnM7hcw+jzsGFfISxnzSLOG8VHeIr754k/J+OhdDufPpz4ijX1ltl7TEl1eH8fXrEXn9aLNmMVnrruKDqdPZtLDjPwrCDFKBLeGzdzyNvGnjuKMtLL/lgcIM+rJjA0j5+rpHF18M0rTmLHmcSob29hc0tDjenng4Iea198CYHvmDNYeqCE7IXzMtYkd7uRfQohRIrDBqfO4mbDhRQAO3/kw6VlJRJpC8Ps1NDRemHQtjVEJJDdXs/rYJnKTI89qaAWfzu6N9mZSTn2CX2/APfea8x4nhgcJ5EKMEoHS+PjDRYQ4OrCnj6dh6tUYdDpyEsMxGw0cqWml3gVrFt4NwLLd64horD7vSLbA7D73wFaU5qcxdwbesPA+j24TQ0cCuRCjRKA0Pu7jTQDUzFwEdGWXJEWZ+e9bp7J4YgKZMWFY5s2lYvYS9F43U5/9LQ22Dupbnewrs3VnvVhabYz/xxoAyhfd2P08UoU5/EggF2KUCDXoeaAggZSje9GUYt/4wvNazBZkWkmINJEQYeLYZx+kIzoOa1kJ8W89T3lzJx8cree7aw6wv8LGjHV/xeByUnvVHBpzC7qfR6owhx/JWhFiFAnftZ02rwdt2gyWXTP1vOyS4IZW4aYwnl9yHw+8/muWFa3nWEY+NWHjKbd14t31McuOfIzbEELRqvsI5LNIFebwJDNyIUYBl9dHcZWdspdfByD+5pt6bDEbXGl5pKaVPdZstky7Dr3m5+73/8L0YzuZ0VrB53Z0tavdWLCSdxqgvLlTDn4YxmRGLsQQGow2s4EiIHdDI3cf2INfp+cp3Ti+0OLoscthoNLyxV3leLx+qj57H821x4ivK+fOjX/uflxLbDLqc/eQ0dBJQUY0MzKskjs+TEkgF2KInNtm1uv349M0lk5OICchol9BPbgIqODUXnR+P/X5s3Caw/ssvzcadBRkWjlQ2UKcNYx1936PpE1vk9zeiNXegNHRyZ7bvorOaCQmzEdWrEUqM4cxCeRCDIFz28y2Oj3sK7fR5vRypLqVqWnRRIdduHd4cJfD5D0fAlAzc2GfLWYDgtfLtZg4Nlx9C5GmEJweH0rBggnx6JHNzZFAfkcSYgh0V2GaDESWFtO+bRvZ5UcosJdhwocpRNev4ptAEZC5sRbrqaN4jaHUT50NXDhNMHi93OHx4fH6aWxzoRQUZFjR65Rsbo4QMiMXYggEAnDWpreY/MbTzAu6b3/2THZ9/jskxIVfcFYdKAJK2b0ZgLppc/GFds3g+zOTDu5MWFrXxqZjDeh1ilaHF7vDc1GNscTQkUAuxBCIsRgJcbSTfabg5kRyDspgIK32JNNPFtFavJ3TBdd0F+n0tl6ekxhOpMlA0scfAFA9ewlwcWmCgc6E+alRrLwqpbvdrDTGGjkkkAsxBHISwyn8eD3GznZqx03h99d/k0izkbwDH3L7B88we+3TbDanU22MZHNJAyebOnpcLw816PlidDudTXV0RFg5FJ+D39Z5yTNpaTc7MslHrRBXUCDfe1dRKZO3rwdgx9LP4fFpNLa52JM7l+KsaZjcDu7Z9AwxYYYem1oFM77/DgDmG1eyuiCN++eP45EVuRd1wLIY2WRGLsQVEpxuOHfdM8S5nFROKWTOTYvJ7XSz6VgDbU4Pz8y9i0frTjK+6hh3lO+gdtKtPWahuLw+SiuaUG+vQwdk3PlZ8ibG9z0IMSrJjFyIKyA43TDH10bunvfRlOLQ9XextbSBlVel8Mvbp7FkUgIxqYnsvu2rAOS/8wLmpjrg7CyUQK/wTc+8jq6jncbkcfz6uK9fZ3CK0UcCuRBXwNmHPqxF5/NSXXgNKntCd1vYQJFOQqQJ9+wF1BQswOB2MeXlP4KmdWehBH8oXHV4OwANc5dKr/AxTAK5EFdA8Kn2Sfs/Aj5tDRs80w4u0jny2QfxmC3Ef1KE2vwebU4PnW4vbx2oorSujYjTJcR9UoRfp6Nm5iLpFT6GSSAX4goI5HtHnz6GqaUJhzUee+ZE4Ox87+AinZO+ULYu+RwAczc8i669nR+8dohfv1tCY3kt8579JTq/nxPzbsAdGQ1Ir/CxSgK5EFdAYKZt3bUFgNqC+aB6rpwMFOncOyeTg9OuoTp9EpGOVla9+r9MaK0m0qjjwc1/xtph43TSeP561U34/Bog5fRjlQRyIa6AUIOeB+ZnkXFoJwAHzzn04dx8b6NBR4heR7jZyIkvfAO3KYzxVcf41ks/5Qev/Rd59cdpNUfy6k1fo9Ovo6nDJeX0Y5ikHwrRi+AWsxEmAxoa7U7fJbebjTl5hLZWG1piEvNXLsQaHtpn5WRgXb0jKZ0X/+mXZGx8lfmHPyShuRqf0vHnax+kyhBOp8tLRXMnOYkRUk4/RkkgF6IHwTnfDrevewNxYmIEZqO+u3KyP0U3gQ8E9wuvYwaib1zBlEkJF/y+wLp61xexvDX/DvbMWcXMQ1s4EZVC9JzZxCpFha2T22amc+PUZAniY5T8qwtxjuD0vqQoE9V2B5EGmF15kLBDRSRHmfud6hfI935m6wm0LV39UF6JmNSvfO/gDJaYcCOhBh2NxnDenbmSEzkzSIgwYTToyEmMkCA+xsmMXIhzBPf4bqusZslHbzP3yDYiOu0AbIrQo7964QU7EwZ/IOTbyghrb6EzNpGmlOw+D30ICGSwPLX1JLV2JylR5rN+M6ixO6Q7oQAkkAtxnsDatMHRwY2/fwRLewsAreFWItttzH/5Md6JSaTeGNdnZ8KzD304k60yYz7RltALfggEBLeZtXW4CTd1/ci2O73SnVB0G5RArpQ6DbQBPsCraVrhYFxXiKEQWJtO2/EelvYWqmNSeffaeylLnciqtY9TeGIP85/+H7bc9K9sNuh77UwY+EDQuxykFHWd3lM9azFwcfne0pFQXMhgfpQv0TRtugRxMdLlJIYTZdSRvuktADbOu5VjiRPo9Pj4w6w7qYzPJLatkYc/fJrcREuv6+WBD4TkPVsxOB3YsnNpT8kEJN9bDC75nUyIc4Qa9HzBewpLSyP22CRap82mw+XF1uFGZzLx5+sfpi0skgmVR8n8+P1eS+MDm5UpWzcAUDH/euDiDn0Qoj8GK5BrwD+UUkVKqYd6eoBS6iGl1B6l1J6GhoZBelohLpM1LwAQce/nuevqLH5x+zS+tCCb7DgL46aMo/SOrrf5xLf+RkhHa49LJaEGPffHO4mpOonTbGFvVkGfRUBCXKrB2uycr2latVIqAdiolDqqadqHwQ/QNO1J4EmAwsJCbZCeV4hB5fL6KP1gB/oDB9AiIsm+53byIrtmziF6HYer7SREmKgvWEDT9neJLT1E2mvPsnPR3TR1uHF5fYQa9J/mjj//EmbAcMNKVs3Kkg1KcVkMyrtJ07TqM3/WA68DswfjukJcSYGc77I/PgXAgelL+PmW8u6c7+C8bpRi9+ov4dPpydn1HoYTJWwpaeBnG45SVGbjZxuO8tz7hzFs/gcAG8fPIzshnPzUKAniYtAN+B2llLIopSICfweWA8UDva4QV1Ig59vY0sS4T3bj1xuwXX/zWRuZwZ0Jy5o6WNdqYvOUxejQeLDoVVIjDNS2OPjnF/dRb3dSeGwHIW4XzRPysMenSq9wcdkMxtQgEdimlDoA7ALWaZr2ziBcV4grJpDzPfHYHpTmpyFvJq6o2PM2MgN53YsnJZAUZaL+M/fijLQSW17CpF//iLKyWpo63ERv3sDk1/4CQPmCG6RXuLisBrxGrmnaSWDaIIxFiEsS3NzqUhtaBXK+k/Z1nbhTO2N+933nbmQaDTpiLEaSIs1YrWb2PPB9pj3xn0yoPML33/o5RYmTuaF0KwCbC26gY/oC9D1cR4jBIpWdYkQLbm6lUGhoF9XQKiDGYsTU1oz15BF8hhDq82d139dTzndwQ6uTcVl88Nkf8NC7fyCpoYIbWhvwKR3rrv08myfMY3qnm4QIk+SOi8tGdl3EiBXcyyTNGkaq1UyaNeySzq7MSQwnt7QIpWk05hbgM4UBved8B298Ojw+WsJj+Msdj7AvZzbN5iieXvUN9k69BgCn2ye54+KykkAuRqzgA41DOlpJKtqKzu0i3GSgrKmDF3eVU1xlx+X1XfBaoQY9s8r2AfDJxEKqbI4+c76DNz5bnR463F4afXpevuHLvPmDJziRlU/rmTM2W51eyR0Xl5UsrYgRyeX1sbfMRl2rk/imahY993PCmupoyJrMH5Y/TLXXgMfr50BlywWXWlxeH6WfnEa3fx+EhDDn3puZqjddMOc7sPF5uNrOE5tPEGLQkRVrQa9TJESaOd3Yjtvn5+HFE8hLkbRDcfnIO0uMOIF8780l9VgOFbH88X8nrKkOTSniTx/ly6/9kkRfJ2kxYRdcaglca+dfX0VpGuXZU1l7vLXfOd9Gg44ZGVZ+tDqP+IhQauwOqmwOauwO4iNNPLo6nxkZVgni4rKSd5cYUYLXxZfUf8I3/vEHzG4HB8fP5L/veJT6qERSGiv4+pu/IsXbAdBr6l/wtXKP7QbAPnvRJa2xB2bn988fx83TU7h//jgeWZF7URuuQlwqCeRiROleFzeHMHn939Frfj6csZy/LnuQkhAr/7X8m1THpZHQUstVLz/e/X09pf4FrpXoacN64jB+g4H6qbMvOec70G524cR4qeAUV5S808SIEsj3jj51lPDaSlwR0bR//iGmpceQGh1GWFICn3zrp3hMYSQU7ybm0G7qW53Utjq6e6Gce62MD9ejNI36vFl4zRZAcr7FyCKBXIwonx76sBGAqquXogsJISHSRGachYwYC43GcE6suBOA7JefpOhEPbV2Z3cvlEDvlBiLEb3LQfq2rkLk00tv7n4eyfkWI4kEcjGi5CSGE6M8JBVtA6By7jKgK9/bajHynWUT0ekUW/MWUxudRFxLPdcf28KiifFkxJy98ZmTGM5VxVsxdrZjGzeJluzc7mtJzrcYSSSQixEjUIo/9/ReDB4X1Vm5lIZYz8r3zoqz8MiKXBblpfDBdfcAsHzP28S5WoFPNz4PV9sprW4h/6P1AOy++sYL5o4LMVxJHrkYEYJL8W9+Zy0Ah2csYX5OLDkJEWflewd6oTiumkXdsatJPPQxU5/9LUUP/wjNEILD7eOJzSeYenw31zbUYo9J5EROAUt6uJYQI4G8W8Wwd1aaYEcd8VUn8JgttMycx8FKe4+BN7CWfuS2L+OKiCau5CB5z/2OmuYO9le00On2MHNn12y8ctmtWMNNvV5LiOFO3rFi2AsuxU/b2bXJWT1rMRFREb2mCQZ6odSaoih6+Ed4Qk2kFX1Iyst/Jr9kF/c8+xOiy4/jskRSNXuptJkVI5oEcnHZubw+iqvsfFjS0O/eJ8ECaYLK5yNpb9cmZ9Wca4He0wSDe6EcCkviyaVfxqd0XH/4ff55x7Nk1p+mwxTOmkV34zEY+7yWEMOdrJGLy2ow2swGlkmsxw8T2manIz6F1rRsoO80wUC15fpDNbzSXsCO8IeZ9+rjNEXE8fHM6zkwZR5NXh3TO1zSZlaMaBLIxWUTvLadYdHjN4TgBcoaO/jxW8U8vHgCU1IiL3gIRGCZJGZ313netQXzQal+pQkGHwLRvmg5GwvmsKWqEz86TCF68HqkzawY8WRpRVwWLq+PDYdqKa1rI6zqNIv/35dY8OOv0rjxA040dnCsto3HPjh+VoFOb0INeh6Ym0Fa8ccAHBhfeFFpgsGHQGjhkUzPjEUppM2sGDVkRi4GXWA5pbSujYbaJuas/QXGznaMne188e3/4+j4GayZczuRJmt3gc4jK3J7DKKB3PG2bduJ7mjFn57JouvnYA0P7XeGSfAhENFhRiJNISyYEC9tZsWoIe9cMaiCl1PSo818afvfSbDXUxWTyt9n3IwrJJTJJ/bx9Td+Qbjm7jNbJNBi9untp6h7ax0ARybNJjsx4qKaUgVvfFbaOqXNrBh1ZEYuBlUgVTDNGkbGxleZcmofDqOZp5d/hWIiOXnVfO5f/xhpDeVcveU1ti+7h/pWJ/vKbGcdmnzWB0KkkXFHutrMlk2dy+E+ZvC9CWx8ltS1YetwX/DQCCFGEnkXi0EVSBW01FYy+e3nAFiz7EtUhcfh9WtU6Cy8vvQLaEqRteVt6g4cpry5k83nNLQKzh2PPXYQY2cbbUnp6LLHX3K+t7SZFaOVvJPFoApsLKbu+gCd30/l1UuJXb6M2ZkxRJlDyIoLI3POTHbmX4Ne83PbthewhoWQmxx5VkOrwAcCQHLRVgBqCxYAku8txLkkkItBlZMYTmSonsRdmwGomnMdep3CbNQzPyeO7LhwjtW18vJVK2kzRTCuupRbGg+h16mz1ssDHwjmxlqSiz5EU4qamQsBaTErxLkkkItBFWrQ88UIOxZ7E23RcRRbs7pTBb993UR+uHIKiycmEJ8cx4FVnwdg+tvPYmy1AZ/OtgOZJplv/g2dz0v1rMV0JqRKvrcQPZBALgadcdO7AFhWrOTmgrSzzq80GnQUZFpJiDTRvmg5TROvIrTdztRnf0N9Sye1rQ7qWp0crrZT6Gkga/82fHoD2xZ8RlrMCtELyVoRg8rvctH6Tlcgn3DPbYROiD/vMd153Q4PB7/wbeb+f98m/tgBIte+TEX+dTy+5QQK+O77fwDg0KxlTJs1WVrMCtEL+YkQg8bl9fHJ6xvwt7WhTZgIWeN6fFxwXneJ18QzC+4F4KY9b5LXfJo43MyqOkTmyUN4TGGcXH67tJgVog8yIx/jApWTzR1uYizGs3K5L0agmnP2S6+RBXw8fjZrNhzttTnW2Q2tZnG4YyV529bxjTd+cdbjDi1aTVh8LJW2Tkrq2shPjbrEVyrE6CWBfAw7tzOh1+/Hp2ksnZxATkJEv4N6oHjH0N5KRuk+NKVwLFx6wfL74IZWlZ+9n+jKUySXHcEdYsJtNFFlTWFf4fWkIimHQvRFAvkYFVw5mWYNo9XpYV+5jTanlyPVrUxNiyY6rH/tZgPFO3OOFaHzemmceBWuqFii4YIz6UCaoWYI4f0vP8r+ChuR5q7UwlaHh+nhYYCkHArRF1lwHKOCKyfNlaewvPES2RVHSDFqhOh1mEJ0ZxXo9CVQvJNctAWAmlmLu++70Ew6uKFVTLiR0BA9To8Pp8dHaIiOWEuopBwKcQEyIx+jAsFX53ZR+MRPsdibAPArxenE8ey485tEj8/s19p0jMWI2d5IzPHD+Awh1E2b033fhWbSgY3Pp7aepNbuJCXK3F1+PzExghq7o/sgCtnoFKJnEsjHqMCSRvbGV7HYm2iKiMUZFklSQznZtccxvf0nDn7zp/1am85JDGfKsV0oTaMhvxCv2QLQ75n0uQ2twk1db8t2p1eaWwnRDxLIxyCX14fH50fV1pD13msAPH/tl2gal4uhpZnvvPAoKccPcXrTOxSNv5qmDjcur6/Xjc9Qg56Ckl34geLJc6iyOc460q0/QTjQ0EoIcfEkkI8xwZkqiz94AYPXw+7xszgcMw5Dm4uI8Ch2r/oi17zye6av+yvrbstkS4SJA5UtPW58urw+SncdQl9yFM0Szvx7b2K63yAzaSGuIPkpG0OCM1Wuqj/OhKO78RpDObzqXjJizeSmRJARY+GV6DyK0/MJczv42oHXyLCae9z4DBz8cOCvawAomVTI2iPNZCeES5tYIa6gQflJU0rdoJQ6ppQ6rpT6/mBcUwy+4EyViWufBeDk8ttJmpBFQoSJBxZks3RyAknRZo7e9TCeUDOph3eTtG/7eSf5dH8o+PxMOvwRAPZ5S/ud6SKEGDwDDuRKKT3we2AFMAW4Syk1ZaDXFYMvkKkS1lBDdFkpXpOZ00tWA11pgu1Ob3eBTnh6GiW3fBGA3DVPEtLRetbGZ+BDIavuJJbGWpyRVppz8vs8uk0IcXkMxox8NnBc07STmqa5gReBmwfhumKQBTJVkvZ2HdRQN/Vq/MZQ4NM0weAT5yvmLad5Qj6h7XayXvoTta0OmjrctDk97C2z0WBrZ+KLTwBQPXsJ6Lo2Q6UKU4grazACeSpQEfR15ZnbzqKUekgptUcptaehoWEQnlZcrEDxTcKes0/cCU4TDC7QQadj52e+gkcfwvh9H2ItLmJDcQ2f++MO3jlcy9RNrxFTc5qmyHj2L761+3mkClOIK2swArnq4TbtvBs07UlN0wo1TSuMjz+/tam4/EINeu5Pg+jaclwmCwcTJ5/X4zu4M2FZUwcbbAbWFawC4L6dL9JZU4tf04guL2XFgXfxo1hz3RfZXefE59ekClOIITAY6YeVQHrQ12lA9SBcV1wG5m2b6ABCFi/hpsKMHtMEgzsTNra7aFt9O/aaA0RVnuT7T/8bZWmTiLA3odf8fDhjOSWJE+jscHOkppWM2DCpwhTiChuMQL4byFFKjQOqgDuBuwfhuoLBazPr8voorW1De3MtBiDl1pvIm9j7b0bBnQnjo83sf+B7ZL7wR9KOH2BcxVEAbHGpdNzzINNdGpW2ThZPjOdzszMkiAtxhQ04kGua5lVKfR14F9ADf9E07fCARyYGrc1s4DqGU8f5TGU5jrAI/s8WxQMtjj47GwZvfDrikvjwvu9x9EQ1s6qKSSovoe76WzGFhpIQCm6fnxmZVgniQgyBQans1DRtPbB+MK4luvTUZnZ/WRP6pkYer7SRlxHbrzazwdeZdnwPAA0z5uFT+j57hcPZnQmjw4zEhBvRLOF8OG4WpolzWDCua0Yv6+JCDC0p0R+mAnna6REhZK1/gZADe1ndUI7J4+RIej67v/LDCx7cEHydtGgzyXu3AV3ZKtFhxgt2NgzuTFhp6+xqVRtloqypk+QoM7V250X3VBFCDD4J5MNUoHgn+73XyNnwYvftfqXIrSjG/sHrlFz7WSpsnaw/VMOKqUk9LrMErmM98QlhjbU4o2NpnpAH9C/f+9zOhFaLkaxYC6ebOrq/lp4qQgwtCeTDVIzFiN7lIHPTWgDWLLqHssmFJDWUc+/rv2HWplfYHZlJRUwWrxRV9NrUKrDOnbrzPQCqZn1auNPffO+eOhNKp0Ihhg+ZRg1TOYnhTD+wCWNnG/UZE9kxZSHtligOpuSyNu869Jqf+957inifk/SYsF57nOQkhhOj85K4bzsAVXOuBWRdW4jRRAL5MOTy+iitaCJ/29sA7Jl/Ex6fRmObC5fXz3tzbqEieTyR7TY+t/U5Yi2hPfY4CaQuzinfT4jbRU3GJEpDrOcVAQkhRjZZWhlmAqmCqVvWM7+lmcbETE7nzODuDCv7K+w0tbuotPl4eumD/NvLPyb/5D5cnxTRkF941pp3cOriqnfXAXBk+iLm58SSkxAh69pCjCLykzyMBFIFNY+Hgo+6ZuOVN95BjCWUCpuD/751KrcXppMeE0ZWXjYnV3bVXU1+5UmamlrPamoVSDmc6LWTVHYUrzGU5sKFHKy0SxAXYpSRn+ZhJJAqOPnYHszN9bQnpFI7fW73ssnppg5WTE0iJzECo15HxeKVtCRlYGmqw/rWi9TanWwpaeAHrx+i1u4kOsxI6sfvA1A3fT7h1ihpMSvEKCSBfBgJpAomF30IQPmilee1hg1uanW6xcUzhbcBsOzAu6yI8ZESbaLe7mB/hY3WiipSP9oIQOWZTU5pMSvE6COBfBiJsRgxODuIO7oPTSlqZ8zrvi84VTCQ2714UgIdk6dyYsZCQnxeZr/wOw7tL6Gu3Q22FhY++RNMbS00Zk7CNn7KedcRQowOstk5SAajuVVOYjiTTh1A5/XSPCEPd6QV6DlVMLipVdltD5J6/BBx5SV8+/kf8+7CO5hW9B7JLbXUxqTy5PKHmYmiTVIOhRiVJJAPgnObWwWXrffVB+VcoQY9C6oO4gWOTppFlc3RZwl8oNjHHRnN2q/9jLwXHmNKeTG3vPcMAA2R8Ty+6lvU+UIIkxazQoxaEsgH6NzmVgEtne4L9kE5l6+9Hd/Oj0Aprv7CZ5lojuqzBD64qZXdHMlTK77O4hM7uX7LCzhCLez/1n8y3hRNqLSYFWJUk0A+AC6vjw2HaimtayM9JgxdawuhbhdtMfG4vf4L9kE591rHX9+Azu1Gy59GTt64C35PcFOrVqeHDo+PzRPmUjR+JtMyYgiLDCcBaTErxGgngfwSBZZTSuvaqGxsZ8qOd7hm1xuE+Dz87cavcSB9Kp0ub599UM691uzX1pIF7MyYzpoNR/u1NBPY+DxcbeeJzScIMejIirWg13WdwCel+EKMfjJFuwTByylTXY08sv5X3Lr9JUI9LnR+P3dv+CP5TacIMxr67IMSfC2do5P04wcAcM69ps/vOZfRoGNGhpUfrc4jPiKUGruDKptDSvGFGCNkRn4JAoU7GRY91zz9n4S227Fbonl94V2kle7nuhM7uOvN3/HHz/wrsZZE9DrVa+/vwLUKTx5A73FjGzcZV3Qs0XDBfuHn6qnlrFRxCjH6SSC/BIHCnaR92wltt9OSnMlvVn+XGreiJXwCMV4HBWX7+cq637Fj6m9xR0T3WogTuFb69n8AUDNzYfd9l1K801PLWSHE6CZTtUsQSPvL2Np1ul3FktXMnpLOlOQozOYQtt/5DZqzczG32shZ+zeg90KcGIuRqPpyYksP4TWaqJ69pPs+Kd4RQvSHBPJLkJMYTmZjGdFlpXjMFmpmLkSvU8RHhBIXHkqsNZLie76BX28gbef7tO3fT5vTg8fnx+X1nXet6Xu6Dn2onr0Er9kCyCalEKL/JJBfpEAF56yDm4Gu1rAVHX4qbZ2EGHT89JapGPSKkhAr+2bfgNI0Ctc+g0HBczvL+NmGo1S1OLqvZ+jsYML+rt4qu6YvlU1KIcRFkzXyixBIE3Q227h7W1dXwUMzrz2vx/fU1CgOV9v5s301kw9tY1z9Ka4pK6L66qXdhUL/smwip5s6cTz/HOFOJ6GzZ3PrrQtlk1IIcdEkUvRTcMrhrKM7MHg9NE6ejj4987we30aDjhC9jtCoCE7c+kUAJr35V0I6WokOM1Jrd/CD14t5eusJfK+/AsD7uYuxWowsnBhPfmqUBHEhRL9JtOinQJpgtDmEjG3vAFC+YEWPR6zBp9ko1YXXYBs3mdC2Fgofe5Sm6gYOVNiptzuZcXofUc21OKzxVE0q6HfeuBBCBJNA3k+BwBxVVoqloRpnpJWG/FlAz2mCgcwWdDr2f+nfaItLIqryJAuf/DGGpnoWbHyOGc/8CoCyRTcSFWGWQx+EEJdkzKyRD7TNbCAwJ+3vOo2+bsY8NH3X9/eUJhjc0Co80spjN32HB1/7JRlNFTy+7qfoNA2f0rG54AY6r1mNDjn0QQhxacZEIB+MNrM5ieFEmgwk7O0K5LXT5wO9pwkGN7Q6UtPKaWXhDzd9h4fX/poEez21cWm8ufxLHItMZbrTS0KIQfLGhRCXZNQH8uBNyoxwA/6QrkB5sW1mQw167o9z0mFroCMimmJrFpqts9de4fBpyfyLu8rxeP2kxcRRNPmX1O/cRUl6HiGmUHB4cLp9kjcuhLhkozaQB5ZS9pbZKG/q5MYjHzB57bPUFC7mwO0P4faqi2ozCxC6fRMdgPna67i5IK1faYJGg46CTCsHKltIiDABJszXLMZfbqPV6aHT7aXV6SXaYpS8cSHEJRmVgTx4KaW+1Un6jo1M2f48AKm7PkB3ooSnr/8KFaaYfrWZdXl9lNa2wdr16IHUW1aRNzG+3+MJXi+PDjMSaQphwYR4Tje24/b5eXjxBPJSJOVQCHFpRl3kOPfEnnlVh7jnoxcA+GDmChqiE0luquQ7r/43UxtPXrDNbFWLg59tOMraNe+jr6+lMzya39WZz6rOvJDAernuTBfEKpuDGruD+EgTj67OZ0aGHPoghLh0o25GHsj3TrOGEX3yCLNe/h06TWPj7NW8NvUG1k65ji/veJ4px4u4a/MzfLxwNspk7LFlbPCHwlUn9gLQMGMePnQXfYybtJgVQlwuoy6KBPK9Aca/uwa9z8vxudfzwexVdLg8NGsh/GXpA9TEphHT2sSED94Aek79Cy4CStr/EQC1BQt6LQK6kECLWaneFEIMplEXSQL53qH2JuKO7MOvN1C2+l4W5CSQFWchxWrmqqxYTt/9MADZ771KR1k5ta0OmjrcZ3UnDHwoxB3ZR1hjLc5IK7bsyYDkfAshho9RF8gDG4vW7R+gND/1+bPwhEfS5vSQmxzFtLRojHod9on5lE+fj97jJvvVv1Brd7KlpOGs7oQxFiOa5mfChhcBOL1kNeh6LwISQoihMOoCeahBzwMLxjGuaDMAB/MWdLeF/co143nomvHodIqypg7+lLsSl8HIjFP7uI0aMs7Z+MxJDGdC5VGiTx/DbYmgYuEKQHqFCyGGlwEFcqXUfyilqpRS+8/8d+NgDexSuLw+iqvslH+0h6j6SrRoKwW3reD++eN4ZEUuqdHm7k3HxZMSMKUmc3jpZwCYveb3GNtaute/D1fbu/qOb30dgP1zbqS8E+kVLoQYdgYja+U3mqb9chCuMyDBuePz3n4VK1AydT6zUqLPyw83GnTEWIwkRZppWHEbttJ9WE8dY9qf/4f19/2Q8iYH//POUQpsp7jp6CGcJgsHZl3HwnP6jgshxHAwKqLRuWX4E4q7MkxOzlzca354YFNUM4Sw/4Hv4YiIJvbEJ2S8/BRHa9tor6gm/92utfGKpauJsEaf13dcCCGGg8GISF9XSh1USv1FKWXt7UFKqYeUUnuUUnsaGhoG4Wk/1Z0mGGYkvng3xs527GnZqPE5vaYJBldbdkRYeeb6r+DV6bmmeBO/X/sTfrHm3xlXXYrTaObkwpWXnHIohBCX2wUDuVLqPaVUcQ//3Qw8DowHpgM1wK96u46maU9qmlaoaVphfHz/y9v7Izh3PGX3ZgCqr17aNf5e0gSDqy2P1LSyPzKD1xfcCUB8pw2X0URpVj5/vv5h6rSQPq8lhBBD6YJr5JqmXdefCyml/gS8PeARXYLAMomhs534T/aiKR01BQuAvtMEz+1O6LhhNesnTuCozU17WjZ+nZ5Wh4fJbt8FryWEEENloFkryUFf3goUD2w4lyawTBKxezs6n5emnHzckdZ+pQkGuhMmRJpIiDDhnzqdhpRsOj+tC8Jk1EvKoRBi2BroGvnPlVKHlFIHgSXAPw/CmC5aYJkk82DXoQ9HcudcVJpg8Hq5QadjRoYVpaCx3YXH58fp8UvKoRBi2BpQ+qGmaZ8frIEMVKKvk9YTxWh6PVPuWM28pLh+Z5gEn+ZTaetEoRgXa8GraSydnCAph0KIYW3Edz8MHCDRueY1Inw+LIsWMWXm+Iu+jnQnFEKMVCM6kAcXAa18ZwMRwAcp01ne4uj3WZzBAt0JhRBiJBmx083gIqDxykFS2VF8hhAqc2f2WgQkhBCj0YgN5MFFQEn7tqM0jYa8QsJjoqVwRwgxpoyYpZXAWnhzh5sYi5G6VicKhd7lJGvTWwDUzFwISOGOEGJsGRGBPHgtXKHQ0HD7/Hh9Gtnb3sBsa8CePp66aXMAKdwRQowtwz6Qn3uYMoDX7+dkfTsNR46T9f4bABy5/SHQSeGOEGLsGfaBPPgwZeXzYvdo7Cu34fL4uP/jl9H7vOyYOJc9YamYbZ1EmkOkcEcIMaYM+0Ae3BCr8P/+HyE1VRRGJ+KwRJJXdQSXKYwjq+7F6/dz75xs8lLkUGMhxNgy7AN5oCEWQGhTPeGddiI77d3371/2OVLGpeG3dRKi10kQF0KMOcM+kAf3Qfn7N39L/fEyspxNRDVUo+l0GJauQo9kqgghxq5hH8iD+6C0un1UmqKxRcYRmppLQYaVUEPXS5BMFSHEWDXsAzl82gflcLWdJzafIMSgIyvWgl7XtXYumSpCiLFsxCwoGw1d7WV/tDqP+IhQauwOqmwOOdVeCDHmjYgZeTDpUiiEEGcbcYEcpEuhEEIEk2msEEKMcBLIhRBihJNALoQQI5wEciGEGOGUpmlX/kmVagDKrvgTD1wc0DjUg7iCxtrrBXnNY8VIfc2ZmqbFn3vjkATykUoptUfTtMKhHseVMtZeL8hrHitG22uWpRUhhBjhJJALIcQIJ4H84jw51AO4wsba6wV5zWPFqHrNskYuhBAjnMzIhRBihJNALoQQI5wE8kuglPquUkpTSsUN9VguN6XUL5RSR5VSB5VSryulood6TJeLUuoGpdQxpdRxpdT3h3o8l5tSKl0ptUkpdUQpdVgp9a2hHtOVoJTSK6X2KaXeHuqxDBYJ5BdJKZUOLAPKh3osV8hGIF/TtKuAEuCRIR7PZaGU0gO/B1YAU4C7lFJThnZUl50X+BdN03KBOcA/jYHXDPAt4MhQD2IwSSC/eL8B/g0YE7vEmqb9Q9M075kvdwJpQzmey2g2cFzTtJOaprmBF4Gbh3hMl5WmaTWapu098/c2uoJb6tCO6vJSSqUBK4Gnhnosg0kC+UVQSq0GqjRNOzDUYxkiXwI2DPUgLpNUoCLo60pGeVALppTKAmYAHw/xUC6339I1EfMP8TgG1Yg8WOJyUkq9ByT1cNcPgR8Ay6/siC6/vl6zpmlvnnnMD+n6VfzvV3JsV5Dq4bYx8VuXUioceBX4tqZprUM9nstFKbUKqNc0rUgptXiIhzOoJJCfQ9O063q6XSk1FRgHHFBKQdcSw16l1GxN02qv4BAHXW+vOUApdR+wCrhWG72FB5VAetDXaUD1EI3lilFKhdAVxP+uadprQz2ey2w+sFopdSNgAiKVUs9pmnbvEI9rwKQg6BIppU4DhZqmjcQOav2mlLoB+DVwjaZpDUM9nstFKWWgazP3WqAK2A3crWna4SEd2GWkumYkfwWaNU379hAP54o6MyP/rqZpq4Z4KINC1sjFhTwGRAAblVL7lVJPDPWALoczG7pfB96la9Pv5dEcxM+YD3weWHrm33b/mdmqGGFkRi6EECOczMiFEGKEk0AuhBAjnARyIYQY4SSQCyHECCeBXAghRjgJ5EIIMcJJIBdCiBHu/wcr40StRC7hBgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(X, y, s=50, alpha=0.5)\n", + "\n", + "with torch.no_grad():\n", + " mean, var = model(X)\n", + "_ = plt.plot(X, mean, color=\"C3\", lw=2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see that our combination of kernel does a fairly good job in learning the inherent trend and periodicity in the data. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That's all there is to it. For more details on the `pyro.contrib.gp` module see the [docs](http://docs.pyro.ai/en/dev/contrib/gp.html). For an example on binary classification see [here](https://prog-ml.github.io/notebooks/gaussian_processes/pyro-binary-classification.html), for an example on deep kernel learning see [here](https://prog-ml.github.io/notebooks/gaussian_processes/pyro-deep-gp.html), and for an advanced example for GP classification using deep kernel learning see [here](https://github.com/pyro-ppl/pyro/blob/dev/examples/contrib/gp/sv-dkl.py)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reference\n", + "\n", + "[1] `Deep Gaussian processes and variational propagation of uncertainty`,
    \n", + "Andreas Damianou\n", + "\n", + "[2] `A unifying framework for sparse Gaussian process approximation using power expectation propagation`,
    \n", + "Thang D. Bui, Josiah Yan, and Richard E. Turner\n", + "\n", + "[3] `Scalable variational Gaussian process classification`,
    \n", + "James Hensman, Alexander G. de G. Matthews, and Zoubin Ghahramani\n", + "\n", + "[4] `Gaussian Processes for Machine Learning`,
    \n", + "Carl E. Rasmussen, and Christopher K. I. Williams\n", + "\n", + "[5] `A Unifying View of Sparse Approximate Gaussian Process Regression`,
    \n", + "Joaquin Quinonero-Candela, and Carl E. Rasmussen" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.10" + }, + "varInspector": { + "cols": { + "lenName": 16, + "lenType": 16, + "lenVar": 40 + }, + "kernels_config": { + "python": { + "delete_cmd_postfix": "", + "delete_cmd_prefix": "del ", + "library": "var_list.py", + "varRefreshCmd": "print(var_dic_list())" + }, + "r": { + "delete_cmd_postfix": ") ", + "delete_cmd_prefix": "rm(", + "library": "var_list.r", + "varRefreshCmd": "cat(var_dic_list()) " + } + }, + "types_to_exclude": [ + "module", + "function", + "builtin_function_or_method", + "instance", + "_Feature" + ], + "window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/pyro/source/tutorial/source/gplvm.ipynb b/pyro/source/tutorial/source/gplvm.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..395b981b1a8b400a8cc27bd5c08c74965408d88e --- /dev/null +++ b/pyro/source/tutorial/source/gplvm.ipynb @@ -0,0 +1,545 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Gaussian Process Latent Variable Model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The [Gaussian Process Latent Variable Model](https://en.wikipedia.org/wiki/Nonlinear_dimensionality_reduction#Gaussian_process_latent_variable_models) (GPLVM) is a dimensionality reduction method that uses a Gaussian process to learn a low-dimensional representation of (potentially) high-dimensional data. In the typical setting of Gaussian process regression, where we are given inputs $X$ and outputs $y$, we choose a kernel and learn hyperparameters that best describe the mapping from $X$ to $y$. In the GPLVM, we are not given $X$: we are only given $y$. So we need to learn $X$ along with the kernel hyperparameters." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We do not do maximum likelihood inference on $X$. Instead, we set a Gaussian prior for $X$ and learn the mean and variance of the approximate (gaussian) posterior $q(X|y)$. In this notebook, we show how this can be done using the `pyro.contrib.gp` module. In particular we reproduce a result described in [2]." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import torch\n", + "from torch.nn import Parameter\n", + "\n", + "import pyro\n", + "import pyro.contrib.gp as gp\n", + "import pyro.distributions as dist\n", + "import pyro.ops.stats as stats\n", + "\n", + "smoke_test = ('CI' in os.environ) # ignore; used to check code integrity in the Pyro repo\n", + "assert pyro.__version__.startswith('1.9.1')\n", + "pyro.set_rng_seed(1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Dataset" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The data we are going to use consists of [single-cell](https://en.wikipedia.org/wiki/Single-cell_analysis) [qPCR](https://en.wikipedia.org/wiki/Real-time_polymerase_chain_reaction) data for 48 genes obtained from mice (Guo *et al.*, [1]). This data is available at the [Open Data Science repository](https://github.com/sods/ods). The data contains 48 columns, with each column corresponding to (normalized) measurements of each gene. Cells differentiate during their development and these data were obtained at various stages of development. The various stages are labelled from the 1-cell stage to the 64-cell stage. For the 32-cell stage, the data is further differentiated into 'trophectoderm' (TE) and 'inner cell mass' (ICM). ICM further differentiates into 'epiblast' (EPI) and 'primitive endoderm' (PE) at the 64-cell stage. Each of the rows in the dataset is labelled with one of these stages." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Data shape: (437, 48)\n", + "---------------------\n", + "\n", + "Data labels: ['1', '2', '4', '8', '16', '32 TE', '32 ICM', '64 PE', '64 TE', '64 EPI']\n", + "--------------------------------------------------------------------------------------\n", + "\n", + "Show a small subset of the data:\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ActbAhcyAqp3Atp12aBmp4Cdx2Creb312CebpaDab2DppaI...Sox2Sall4Sox17SnailSox13Tcfap2aTcfap2cTcf23Utf1Tspan8
10.541050-1.2030071.0307461.0648080.494782-0.167143-1.3690921.0830610.668057-1.553758...-1.351757-1.7934760.783185-1.408063-0.031991-0.351257-1.0789820.9429811.348892-1.051999
10.680832-1.3553062.4563751.2343500.6454941.003868-1.2075951.2080230.800388-1.435306...-1.363533-1.7821721.532477-1.361172-0.5017151.082362-0.9301121.0643991.469397-0.996275
11.056038-1.2804472.0461331.4397950.8281210.983404-1.4600321.3594470.530701-1.340283...-1.296802-1.5674023.194157-1.301777-0.4452190.031284-1.0057671.2115291.615421-0.651393
10.732331-1.3269112.4642341.2443230.6543590.947023-1.2656091.2153730.765212-1.431401...-1.684100-1.9155562.962515-1.3497101.8759571.699892-1.0594581.0715411.476485-0.699586
10.629333-1.2443081.3168151.3041620.7075521.429070-0.895578-0.0077850.644606-1.381937...-1.304653-1.7618251.265379-1.320533-0.6098640.413826-0.8886241.1143941.519017-0.798985
\n", + "

5 rows × 48 columns

\n", + "
" + ], + "text/plain": [ + " Actb Ahcy Aqp3 Atp12a Bmp4 Cdx2 Creb312 \\\n", + "1 0.541050 -1.203007 1.030746 1.064808 0.494782 -0.167143 -1.369092 \n", + "1 0.680832 -1.355306 2.456375 1.234350 0.645494 1.003868 -1.207595 \n", + "1 1.056038 -1.280447 2.046133 1.439795 0.828121 0.983404 -1.460032 \n", + "1 0.732331 -1.326911 2.464234 1.244323 0.654359 0.947023 -1.265609 \n", + "1 0.629333 -1.244308 1.316815 1.304162 0.707552 1.429070 -0.895578 \n", + "\n", + " Cebpa Dab2 DppaI ... Sox2 Sall4 Sox17 Snail \\\n", + "1 1.083061 0.668057 -1.553758 ... -1.351757 -1.793476 0.783185 -1.408063 \n", + "1 1.208023 0.800388 -1.435306 ... -1.363533 -1.782172 1.532477 -1.361172 \n", + "1 1.359447 0.530701 -1.340283 ... -1.296802 -1.567402 3.194157 -1.301777 \n", + "1 1.215373 0.765212 -1.431401 ... -1.684100 -1.915556 2.962515 -1.349710 \n", + "1 -0.007785 0.644606 -1.381937 ... -1.304653 -1.761825 1.265379 -1.320533 \n", + "\n", + " Sox13 Tcfap2a Tcfap2c Tcf23 Utf1 Tspan8 \n", + "1 -0.031991 -0.351257 -1.078982 0.942981 1.348892 -1.051999 \n", + "1 -0.501715 1.082362 -0.930112 1.064399 1.469397 -0.996275 \n", + "1 -0.445219 0.031284 -1.005767 1.211529 1.615421 -0.651393 \n", + "1 1.875957 1.699892 -1.059458 1.071541 1.476485 -0.699586 \n", + "1 -0.609864 0.413826 -0.888624 1.114394 1.519017 -0.798985 \n", + "\n", + "[5 rows x 48 columns]" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# license: Copyright (c) 2014, the Open Data Science Initiative\n", + "# license: https://www.elsevier.com/legal/elsevier-website-terms-and-conditions\n", + "URL = \"https://raw.githubusercontent.com/sods/ods/master/datasets/guo_qpcr.csv\"\n", + "\n", + "df = pd.read_csv(URL, index_col=0)\n", + "print(\"Data shape: {}\\n{}\\n\".format(df.shape, \"-\" * 21))\n", + "print(\"Data labels: {}\\n{}\\n\".format(df.index.unique().tolist(), \"-\" * 86))\n", + "print(\"Show a small subset of the data:\")\n", + "df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Modelling" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, we need to define the output tensor $y$. To predict values for all $48$ genes, we need $48$ Gaussian processes. So the required shape for $y$ is `num_GPs x num_data = 48 x 437`." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "data = torch.tensor(df.values, dtype=torch.get_default_dtype())\n", + "# we need to transpose data to correct its shape\n", + "y = data.t()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now comes the most interesting part. We know that the observed data $y$ has latent structure: in particular different datapoints correspond to different cell stages. We would like our GPLVM to learn this structure in an unsupervised manner. In principle, if we do a good job of inference then we should be able to discover this structure---at least if we choose reasonable priors. First, we have to choose the dimension of our latent space $X$. We choose $dim(X)=2$, since we would like our model to disentangle 'capture time' ($1$, $2$, $4$, $8$, $16$, $32$, and $64$) from cell branching types (TE, ICM, PE, EPI). Next, when we set the mean of our prior over $X$, we set the first dimension to be equal to the observed capture time. This will help the GPLVM discover the structure we are interested in and will make it more likely that that structure will be axis-aligned in a way that is easier for us to interpret." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "capture_time = y.new_tensor([int(cell_name.split(\" \")[0]) for cell_name in df.index.values])\n", + "# we scale the time into the interval [0, 1]\n", + "time = capture_time.log2() / 6\n", + "\n", + "# we setup the mean of our prior over X\n", + "X_prior_mean = torch.zeros(y.size(1), 2) # shape: 437 x 2\n", + "X_prior_mean[:, 0] = time" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will use a sparse version of Gaussian process inference to make training faster. Remember that we also need to define $X$ as a `Parameter` so that we can set a prior and guide (variational distribution) for it." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "kernel = gp.kernels.RBF(input_dim=2, lengthscale=torch.ones(2))\n", + "\n", + "# we clone here so that we don't change our prior during the course of training\n", + "X = Parameter(X_prior_mean.clone())\n", + "\n", + "# we will use SparseGPRegression model with num_inducing=32;\n", + "# initial values for Xu are sampled randomly from X_prior_mean\n", + "Xu = stats.resample(X_prior_mean.clone(), 32)\n", + "gplvm = gp.models.SparseGPRegression(X, y, kernel, Xu, noise=torch.tensor(0.01), jitter=1e-5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will use the [autoguide()](http://docs.pyro.ai/en/dev/contrib.gp.html#pyro.contrib.gp.parameterized.Parameterized.autoguide) method from the [Parameterized](http://docs.pyro.ai/en/dev/contrib.gp.html#module-pyro.contrib.gp.parameterized) class to set an auto Normal guide for $X$." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# we use `.to_event()` to tell Pyro that the prior distribution for X has no batch_shape\n", + "gplvm.X = pyro.nn.PyroSample(dist.Normal(X_prior_mean, 0.1).to_event())\n", + "gplvm.autoguide(\"X\", dist.Normal)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Inference" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As mentioned in the [Gaussian Processes tutorial](gp.ipynb), we can use the helper function [gp.util.train](http://docs.pyro.ai/en/dev/contrib.gp.html#pyro.contrib.gp.util.train) to train a Pyro GP module. By default, this helper function uses the Adam optimizer with a learning rate of `0.01`." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# note that training is expected to take a minute or so\n", + "losses = gp.util.train(gplvm, num_steps=4000)\n", + "\n", + "# let's plot the loss curve after 4000 steps of training\n", + "plt.plot(losses)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After inference, the mean and standard deviation of the approximated posterior $q(X) \\sim p(X | y)$ will be stored in the parameters `X_loc` and `X_scale`. To get a sample from $q(X)$, we need to set the `mode` of `gplvm` to `\"guide\"`." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "gplvm.mode = \"guide\"\n", + "X = gplvm.X # draw a sample from the guide of the variable X" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Visualizing the result" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let’s see what we got by applying GPLVM to our dataset." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(8, 6))\n", + "colors = plt.get_cmap(\"tab10\").colors[::-1]\n", + "labels = df.index.unique()\n", + "\n", + "X = gplvm.X_loc.detach().numpy()\n", + "for i, label in enumerate(labels):\n", + " X_i = X[df.index == label]\n", + " plt.scatter(X_i[:, 0], X_i[:, 1], c=[colors[i]], label=label)\n", + "\n", + "plt.legend()\n", + "plt.xlabel(\"pseudotime\", fontsize=14)\n", + "plt.ylabel(\"branching\", fontsize=14)\n", + "plt.title(\"GPLVM on Single-Cell qPCR data\", fontsize=16)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see that the first dimension of the latent $X$ for each cell (horizontal axis) corresponds well with the observed capture time (colors). On the other hand, the 32 TE cell and 64 TE cell are clustered near each other. And the fact that ICM cells differentiate into PE and EPI can also be observed from the figure!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Remarks\n", + "\n", + "+ The sparse version scales well (linearly) with the number of data points. So the GPLVM can be used with large datasets. Indeed in [2] the authors have applied GPLVM to a dataset with 68k peripheral blood mononuclear cells.\n", + "\n", + "+ Much of the power of Gaussian Processes lies in the function prior defined by the kernel. We recommend users try out different combinations of kernels for different types of datasets! For example, if the data contains periodicities, it might make sense to use a [Periodic kernel](http://docs.pyro.ai/en/dev/contrib.gp.html#periodic). Other kernels can also be found in the [Pyro GP docs](http://docs.pyro.ai/en/dev/contrib.gp.html#module-pyro.contrib.gp.kernels)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### References\n", + "\n", + "[1] `Resolution of Cell Fate Decisions Revealed by Single-Cell Gene Expression Analysis from Zygote to Blastocyst`,
    \n", + "Guoji Guo, Mikael Huss, Guo Qing Tong, Chaoyang Wang, Li Li Sun, Neil D. Clarke, Paul Robson\n", + "\n", + "[2] `GrandPrix: Scaling up the Bayesian GPLVM for single-cell data`,
    \n", + "Sumon Ahmed, Magnus Rattray, Alexis Boukouvalas\n", + "\n", + "[3] `Bayesian Gaussian Process Latent Variable Model`,
    \n", + "Michalis K. Titsias, Neil D. Lawrence\n", + "\n", + "[4] `A novel approach for resolving differences in single-cell gene expression patterns from zygote to blastocyst`,
    \n", + "Florian Buettner, Fabian J. Theis" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.10" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/pyro/source/tutorial/source/hmm.rst b/pyro/source/tutorial/source/hmm.rst new file mode 100644 index 0000000000000000000000000000000000000000..b0b9b4b43b208838015e806ad9fa3e0e2be98c89 --- /dev/null +++ b/pyro/source/tutorial/source/hmm.rst @@ -0,0 +1,11 @@ +Example: Hidden Markov Models +============================= + +`View hmm.py on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/examples/hmm.py + +__ github_ + +.. literalinclude:: ../../examples/hmm.py + :language: python diff --git a/pyro/source/tutorial/source/hmm_funsor.rst b/pyro/source/tutorial/source/hmm_funsor.rst new file mode 100644 index 0000000000000000000000000000000000000000..f2dacf0fae391c0e5d17dfc232048b8de5068ef0 --- /dev/null +++ b/pyro/source/tutorial/source/hmm_funsor.rst @@ -0,0 +1,11 @@ +Example: hidden Markov models with ``pyro.contrib.funsor`` and ``pyroapi`` +========================================================================== + +`View hmm.py on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/examples/contrib/funsor/hmm.py + +__ github_ + +.. literalinclude:: ../../examples/contrib/funsor/hmm.py + :language: python diff --git a/pyro/source/tutorial/source/inclined_plane.rst b/pyro/source/tutorial/source/inclined_plane.rst new file mode 100644 index 0000000000000000000000000000000000000000..1308491a17775757a30d1b8e531fbe0de5e3ae97 --- /dev/null +++ b/pyro/source/tutorial/source/inclined_plane.rst @@ -0,0 +1,11 @@ +Example: importance sampling +============================= + +`View inclined_plane.py on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/examples/inclined_plane.py + +__ github_ + +.. literalinclude:: ../../examples/inclined_plane.py + :language: python diff --git a/pyro/source/tutorial/source/index.rst b/pyro/source/tutorial/source/index.rst new file mode 100644 index 0000000000000000000000000000000000000000..f8fa99ad377403d3a42cc15564cc66d0b8d8e688 --- /dev/null +++ b/pyro/source/tutorial/source/index.rst @@ -0,0 +1,246 @@ +.. Pyro Tutorials documentation master file, created by + sphinx-quickstart on Tue Oct 31 11:33:17 2017. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Getting Started With Pyro: Tutorials, How-to Guides and Examples +================================================================ + +Welcome! This page collects tutorials written by the Pyro community. +If you're having trouble finding or understanding anything here, +please don't hesitate to ask a question on our `forum `_! + +New users: getting from zero to one +------------------------------------ +If you're new to probabilistic programming or variational inference, +you might want to start by reading the series :ref:`introductory-tutorials`, especially the :doc:`Introduction to Pyro `. +If you're new to PyTorch, you may also benefit from reading the official introduction `"Deep Learning with PyTorch." `_ + +After that, you're ready to get started using Pyro! (Yes, really!) +Follow `the instructions on the front page to install Pyro `_ +and look carefully through the series :ref:`practical-pyro-and-pytorch`, +especially the :doc:`first Bayesian regression tutorial `. +This tutorial goes step-by-step through solving a simple Bayesian machine learning problem with Pyro, +grounding the concepts from the introductory tutorials in runnable code. +Users interested in integrating with existing PyTorch training and serving infrastructure should also read :doc:`the PyroModule tutorial ` +and look at the :doc:`SVI with PyTorch ` and :doc:`SVI with Lightning ` examples. + +Most users who reach this point will also find our :doc:`guide to tensor shapes in Pyro ` essential reading. +Pyro makes extensive use of the behavior of `"array broadcasting" `_ +baked into PyTorch and other array libraries to parallelize models and inference algorithms, +and while it can be difficult to understand this behavior initially, applying the intuition and rules of thumb there +will go a long way toward making your experience smooth and avoiding nasty shape errors. + +Core functionality: Deep learning, discrete variables and customizable inference +--------------------------------------------------------------------------------- +A basic familiarity with this introductory material is all you will need to dive right into exploiting Pyro's two biggest strengths: +integration with deep learning and automated exact inference for discrete latent variables. +The former is described with numerous examples in the series :ref:`deep-generative-models`. +All are elaborations on the basic idea of the variational autoencoder, introduced in great detail in :doc:`the first tutorial of this series `. + +Pyro's facility with discrete latent variable models like the hidden Markov model is surveyed in the series :ref:`discrete-latent-variables`. +Making use of this in your own work will require careful reading of :doc:`our overview and programming guide ` that opens this series. + +Another feature of Pyro is its programmability, the subject of a series of tutorials in :ref:`customizing-inference`. +Users working with large models where only part of the model needs special attention +may be interested in `pyro.contrib.easyguide `_, introduced in :doc:`the first tutorial of the series `. +Meanwhile, machine learning researchers interested in developing variational inference algorithms may wish to peruse +:doc:`the guide to implementing custom variational objectives `, +and a companion example that walks through :doc:`implementing "Boosting BBVI" `. + +Particularly enthusiastic users and potential contributors, especially those interested in contributing to Pyro's core components, +may even be interested in how Pyro itself works under the hood, partially described in the series :ref:`understanding-pyros-internals`. +The :doc:`mini-pyro example ` contains a complete and heavily commented implementation of a small version of the Pyro language in just a few hundred lines of code, +and should serve as a more digestable introduction to the real thing. + +Tools for specific problems +----------------------------- +Pyro is a mature piece of open-source software with "batteries included." +In addition to the core machinery for modelling and inference, +it includes a large toolkit of dedicated domain- or problem-specific modelling functionality. + +One particular area of strength is time-series modelling via `pyro.contrib.forecasting `_, +a library for scaling hierarchical, fully Bayesian models of multivariate time series to thousands or millions of series and datapoints. +This is described in the series :ref:`time-series`. + +Another area of strength is probabilistic machine learning with Gaussian processes. +`pyro.contrib.gp `_, described in the series :ref:`gaussian-processes`, +is a library within Pyro implementing a variety of exact or approximate Gaussian process models compatible with Pyro's inference engines. +Pyro is also fully compatible with `GPyTorch `_, a dedicated library for scalable GPs, +as described in `their Pyro example series `_. + +List of Tutorials +================== + +.. toctree:: + :maxdepth: 1 + :caption: Introductory Tutorials + :name: introductory-tutorials + + intro_long + model_rendering + svi_part_i + svi_part_ii + svi_part_iii + svi_part_iv + +.. toctree:: + :maxdepth: 1 + :caption: Practical Pyro and PyTorch + :name: practical-pyro-and-pytorch + + bayesian_regression + bayesian_regression_ii + tensor_shapes + modules + workflow + prior_predictive + jit + svi_torch + svi_horovod + svi_lightning + svi_flow_guide + +.. toctree:: + :maxdepth: 1 + :caption: Deep Generative Models + :name: deep-generative-models + + vae + ss-vae + cvae + normalizing_flows_intro + vae_flow_prior + dmm + air + cevae + sparse_gamma + prodlda + scanvi + +.. toctree:: + :maxdepth: 1 + :caption: Discrete Latent Variables + :name: discrete-latent-variables + + enumeration + gmm + dirichlet_process_mixture + toy_mixture_model_discrete_enumeration + hmm + capture_recapture + mixed_hmm + einsum + lda + +.. toctree:: + :maxdepth: 1 + :caption: Customizing Inference + :name: customizing-inference + + mle_map + easyguide + custom_objectives + boosting_bbvi + neutra + sparse_regression + autoname_examples + +.. toctree:: + :maxdepth: 1 + :caption: Application: Time Series + :name: time-series + + forecasting_i + forecasting_ii + forecasting_iii + forecasting_dlm + stable + forecast_simple + timeseries + reconciling_experts + +.. toctree:: + :maxdepth: 1 + :caption: Application: Gaussian Processes + :name: gaussian-processes + + gp + gplvm + bo + dkl + +.. toctree:: + :maxdepth: 1 + :caption: Application: Epidemiology + :name: epidemiology + + epi_intro + epi_sir + epi_regional + sir_hmc + logistic-growth + +.. toctree:: + :maxdepth: 1 + :caption: Application: Biological sequences + :name: biological-sequences + + mue_profile + mue_factor + +.. toctree:: + :maxdepth: 1 + :caption: Application: Experimental Design + :name: optimal-experiment-design + + working_memory + elections + +.. toctree:: + :maxdepth: 1 + :caption: Application: Object Tracking + :name: object-tracking + + tracking_1d + ekf + +.. toctree:: + :maxdepth: 1 + :caption: Other Inference Algorithms + + baseball + mcmc + lkj + csis + smcfilter + inclined_plane + RSA-implicature + RSA-hyperbole + predictive_deterministic + +.. toctree:: + :maxdepth: 1 + :caption: Understanding Pyro's Internals + :name: understanding-pyros-internals + + minipyro + effect_handlers + contrib_funsor_intro_i + contrib_funsor_intro_ii + hmm_funsor + +.. toctree:: + :maxdepth: 1 + :caption: Deprecated + :name: deprecated + + intro_part_i + intro_part_ii + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/pyro/source/tutorial/source/intro_long.ipynb b/pyro/source/tutorial/source/intro_long.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..d1b48d77c04ad634b848deed53ea1249c931b9dd --- /dev/null +++ b/pyro/source/tutorial/source/intro_long.ipynb @@ -0,0 +1,1984 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "b2PrSCdtqHwh" + }, + "source": [ + "# Introduction to Pyro" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wXOWkF1DqHwo" + }, + "source": [ + "Probability is the mathematics of reasoning under uncertainty, much as calculus is the mathematics for reasoning about rates of change. It provides a unifying theoretical framework for understanding much of modern machine learning and AI: models built in the language of probability can capture complex reasoning, know what they do not know, and uncover structure in data without supervision. \n", + "\n", + "Specifying probabilistic models directly can be cumbersome and implementing them can be very error-prone. Probabilistic programming languages (PPLs) solve these problems by marrying probability with the representational power of programming languages. A probabilistic program is a mix of ordinary deterministic computation and randomly sampled values representing a *generative process* for data.\n", + "\n", + "By observing the outcome of a probabilistic program, we can describe an *inference* problem, roughly translated as: “what must be true if this random choice had a certain observed value?” PPLs explicitly enforce a separation of concerns already implicit in the mathematics of probability between the specification of a model, a query to be answered, and an algorithm for computing the answer.\n", + "\n", + "Pyro is a probabilistic programming language built on Python and PyTorch. Pyro programs are just Python programs, while its main inference technology is *stochastic variational inference*, which converts abstract probabilistic computations into concrete optimization problems solved with stochastic gradient descent in PyTorch, making probabilistic methods applicable to previously intractable model and dataset sizes.\n", + "\n", + "In this tutorial, we take a brief, opinionated tour of the basic concepts of probabilistic machine learning and probabilistic programming with Pyro. We do so via an example data analysis problem involving linear regression, one of the most common and basic tasks in machine learning. We will see how to use Pyro's modeling language and inference algorithms to incorporate uncertainty into estimates of regression coefficients." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Outline\n", + "\n", + "- [Introduction](#Introduction-to-Pyro)\n", + "- [Outline](#Outline)\n", + "- [Setup](#Setup)\n", + "- [Background: probabilistic machine learning](#Background:-probabilistic-machine-learning)\n", + " - [Background: probabilistic models](#Background:-probabilistic-models)\n", + " - [Background: inference, learning and evaluation](#Background:-inference,-learning-and-evaluation)\n", + "- [Example: Geography and national income](#Example:-Geography-and-national-income)\n", + "- [Models in Pyro](#Models-in-Pyro)\n", + " - [Example model: Maximum-likelihood linear regression](#Example-model:-Maximum-likelihood-linear-regression)\n", + " - [Background: the pyro.sample primitive](#Background:-the-pyro.sample-primitive)\n", + " - [Background: the pyro.param primitive](#Background:-the-pyro.param-primitive)\n", + " - [Background: the pyro.plate primitive](#Background:-the-pyro.plate-primitive)\n", + " - [Example: from maximum likelihood regression to Bayesian regression](#Example:-from-maximum-likelihood-regression-to-Bayesian-regression)\n", + "- [Inference in Pyro](#Inference-in-Pyro)\n", + " - [Background: variational inference](#Background:-variational-inference)\n", + " - [Background: \"guide\" programs as flexible approximate posteriors](#Background:-%22guide%22-programs-as-flexible-approximate-posteriors)\n", + " - [Example: mean-field variational approximation for Bayesian linear regression in Pyro](#Example:-mean-field-variational-approximation-for-Bayesian-linear-regression-in-Pyro)\n", + " - [Background: Estimating and optimizing the Evidence Lower Bound (ELBO)](#Background:-Estimating-and-optimizing-the-Evidence-Lower-Bound-(ELBO))\n", + " - [Example: Bayesian regression via stochastic variational inference (SVI)](#Example:-Bayesian-regression-via-stochastic-variational-inference-(SVI))\n", + "- [Model Evaluation in Pyro](#Model-Evaluation-in-Pyro)\n", + " - [Background: Bayesian model evaluation with posterior predictive checks](#Background:-Bayesian-model-evaluation-with-posterior-predictive-checks)\n", + " - [Example: posterior predictive uncertainty in Pyro](#Example:-posterior-predictive-uncertainty-in-Pyro)\n", + " - [Example: revisiting Bayesian regression with a full-rank guide](#Example:-revisiting-Bayesian-regression-with-a-full-rank-guide)\n", + "- [Next steps](#Next-steps)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Sww6pWHCqHwj" + }, + "source": [ + "## Setup\n", + "Let's begin by importing the modules we'll need." + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "id": "5sm2JAa1qHwk" + }, + "outputs": [], + "source": [ + "%reset -s -f" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "id": "kecozW7XqHwk" + }, + "outputs": [], + "source": [ + "import logging\n", + "import os\n", + "\n", + "import torch\n", + "import numpy as np\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "\n", + "import pyro" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "id": "OGegVXszqHwk" + }, + "outputs": [], + "source": [ + "smoke_test = ('CI' in os.environ)\n", + "assert pyro.__version__.startswith('1.9.1')\n", + "\n", + "pyro.enable_validation(True)\n", + "pyro.set_rng_seed(1)\n", + "logging.basicConfig(format='%(message)s', level=logging.INFO)\n", + "\n", + "# Set matplotlib settings\n", + "%matplotlib inline\n", + "plt.style.use('default')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wXOWkF1DqHwo" + }, + "source": [ + "## Background: probabilistic machine learning\n", + "\n", + "Most data analysis problems can be understood as elaborations on three basic high-level questions:\n", + "\n", + "1. What do we know about the problem before observing any data?\n", + "2. What conclusions can we draw from data given our prior knowledge?\n", + "3. Do these conclusions make sense?\n", + "\n", + "In the probabilistic or Bayesian approach to data science and machine learning, we formalize these in terms of mathematical operations on probability distributions." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wXOWkF1DqHwo" + }, + "source": [ + "### Background: probabilistic models\n", + "\n", + "First, we express everything we know about the variables in a problem and the relationships between them in the form of a ***probabilistic model***, or a joint probability distribution over a collection of random variables. A model has observations ${\\bf x}$ and latent random variables ${\\bf z}$ as well as parameters $\\theta$. It usually has a joint density function of the form \n", + "\n", + "$$p_{\\theta}({\\bf x}, {\\bf z}) = p_{\\theta}({\\bf x}|{\\bf z}) p_{\\theta}({\\bf z})$$\n", + "\n", + "The distribution over latent variables $p_{\\theta}({\\bf z})$ in this formula is called the ***prior***, and the distribution over observed variables given latent variables $p_{\\theta}({\\bf x}|{\\bf z})$ is called the ***likelihood***.\n", + "\n", + "We typically require that the various conditional probability distributions $p_i$ that make up a model $p_{\\theta}({\\bf x}, {\\bf z})$ have the following properties (generally satisfied by the distributions available in [Pyro](http://docs.pyro.ai/en/stable/distributions.html) and [PyTorch Distributions](https://pytorch.org/docs/stable/distributions.html)):\n", + "\n", + "- we can efficiently sample from each $p_i$\n", + "- we can efficiently compute the pointwise probability density $p_i$ \n", + "- $p_i$ is differentiable w.r.t. the parameters $\\theta$\n", + "\n", + "Probabilistic models are often depicted in a [standard graphical notation](https://en.wikipedia.org/wiki/Bayesian_network) for visualization and communication, summarized below, although it is possible in Pyro to represent models that do not have a fixed graphical structure. In models with lots of repetition, it is convenient to use ***plate*** notation, so called because it is shown graphically as a rectangular \"plate\" around variables to indicate multiple independent copies of the random variables inside." + ] + }, + { + "attachments": { + "Screen%20Shot%202021-12-13%20at%201.31.34%20PM.png": { + "image/png": "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18mWZaavH0aC3Jhttw+PcbJGZsSL/9a3vpXGp5nGcC7kp9+Yl++///40Puk7Dvr04i1u55S5j8wizge5i0h/0scPPvjg3DVjXnVYrwNEGcGmkypBPh306r0VgYpARaAiUBGoCFQEKgIVgYpARaAiMCkELHB5o6255poN71eL87322iu91xDIgyCxJlIB5VR2W/At0BHJvkMYKzOiHPGFGPc/0s7vrheiBQHhN17kvHznqic2D0rEEE/B4n275ZZbNl/4wheyjoWMnAhmc+2aYSTItdf111+fYVbEu9c+m2yySRJ8g/CY7neb609e+hGirlse9VEepnDRN/VLJLTP3df2u6zyR+A5IPQTn/hEI4yFMuj/v/jFL5pVVlllXhuchpEg114OqrTD6corr8z2YlwRQ/5Zz3rWnJ2fpirL+os66y/mNJ/L3OYzw+h73/ve/E74MFgM0kiqTI899ljGH+fhLwn9cvbZZzcbbrjhVGHI+ypBPi346s0VgYpARaAiUBGoCFQEKgIVgYpARaAiMFkEhIJ4yUte0tx99925IBcv2QKXpycyq6bBIYB8FM/a9vUHH3wwCUaHPjqkc5CegzOByDAS5MgsHq9vectbsj/B6XnPe14e1Llo0aKhI/RmQg5mMw/tw/vWIYL6E+PZGmuskWS5+OnzOQ0jQY4wNj8df/zxee6E/5/whCc0l19+ebPtttvO+zGwW954zDuE04HMDrYVb5zxiXFX/HGhgMRkF17FPMDgNMiEIL/33nsbZ3gwPDM0O0D0hAgLY+fWdFIlyKeDXr23IlARqAhUBCoCFYGKQEWgIlARqAhUBCaNABJWCIhLL700w5AsXry4Oe+889IrbJjjvE4aqAHc8Ne//jXjuzqIFFGELHGg6u677z7vjRfDSJAjsoTwEHKE57//ebruEwfWbbDBBvO+zQbQBWb0kXaOOL8AQa6dEIxiWutTK6ywwow+a7YzG0aCHIb60JlnntmceOKJuVvIGHjcccc1hx566NCFWeGNTRYvuOCC5sUvfnHzsY99LOXS2C+kisOpN9100zyYWsiVQe/wYnC64oorkqxXRud4iBePwOfdPp1UCfLpoFfvrQhUBCoCFYGKQEWgIlARqAhUBCoCFYFJI2A794UXXphhPIQrEXuc59ree++d3nqTzrDeMGMICNOBDPrc5z6XYWGQDmI68+6f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3LEN+8orr8z+6fTqM844IxcAo91Tv68IVAQqAhWBikBFYO4gQD/jRW7he/nllycBQR8//fTTmz322GNoiKS5g/jyJbGW471/yCGHNFdddVWud/7t3/6tef/7398ceOCBueYZFl152Aly61Rxeg844IA0PGlta9Yjjzwy17cMTsPSlstL8tz5Rjz466+/vvnMZz6THIMdrrz4P/GJT2QYqWEx/A07QV54LgdDiiWPC9J2J5xwQnPooYfWszJmqcsx2n76059O3B955JHkGe12uuiiixpz1UylBU2QA3m//fZLcsVE8qxnPav52te+lt6HMwXwQskHefzNb36z+epXv5rk8eLYbuJAEFad+eBtgDA99thjG52NgeTMM8/M7YX/8R//MdKEZOShhx5qKFUmAorGtttu22y22WapZFRFYwSqOfuBgUMbHnbYYelZoc3Ef7vllltqWI4522pjF8zuD3H9zjnnnDyMyM4PsRcR5TVVBCoCFYGKQEWgIjD3EUBAWEuce+65ScjaFcbJZptttmk+/vGPN8MSimAutwT8v/71rzd777138+CDD6ZezFmIkWLzzTcfKkJ12Alybfl///d/I2Eh/I/QE/va4Z1CrtRwhP3vjQ67Rd7xetUGohUIHXX00UdnewwLdzDsBDlJwSFoT/GuRR3QnpzscEicbM1XNfUPATrCL37xiwynctNNNyXfaDfM1Vdf3Wy55ZYziv+CJsgRK295y1vSskfoxVhDkNvKV9PEEeD1wfN6n332ae64444cMHh9zKftQyavY445JsM0CK/ywQ9+sHnd616XFsGChDAOl112WW4zVF+KBasVS6L6zlcrsAFeKpN0eS/1HqZ3/fz3v/99WnttPZRe8pKXZL+viuL8bGl9EUH+oQ99KHexMGpR1CpBPj/bs5a6IlARqAhUBBYuAogkHnnf+c53cnfv0572tOa9731v8+Y3vzkdboZZRx1kq1sLIFQ5kNiRJ0QHfcraDv7DplMNO0FOlhBKdsvy/kcsWa/b9fy2t70tnbusW2t/6k+vg701J8dB3AEOAd5rrLFGEuaI1WFKC4Eg11522Ih3bZeTHczGSMaOd77znWl0qv2pP1JtfuK1f+211+auGDszYL311lvnbiftMJM8XCXIK0E+bUk2Adx3333pcXDnnXeObIt8z3ve0xx88MEzuuVh2oUdJYOJ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pxLR/yIgAiIgAiIgAiIgAiIgAiIgAiIgAnUmEDzJWSiPsCoI03h08n3w6Lz00kvdrrvuaqLVD37wgzpfK58DJZDnQ6t8+0ogLx/7fK5cboGc+0kQx/v16+dYkPPbb7+1dQ4233xz16lTJzdhwgRbkJMZK9pEIBsBCeTZ6Og3ERABERABERABERABERABERABERCBOhH4z3/+U7Nw5/z5803M4kQbbbSRLdzZv3//GpG8ThfI8yAJ5HkCK9PuEsjLBD7Py5ZbIGd9g5dfftkNGTLEEXMcsRzRnAU5CavC4Nw222xj4ZzyzJp2b4AEJJA3wEJXlkVABERABERABERABERABERABESg2AQQq4gNjCc5YVXmzJljIhbCFgvnde3a1WIDE5P8Rz/6UdHjA0sgL3aJF+b8EsgLw7HYZymnQM7aBizIOXr0aEdYlX//+98Wc3zLLbd0PXv2rFmQk/uKNhHIhYAE8lwoaR8REAEREAEREAEREAEREAEREAEREIE6EUAkR0wbNmyYIyb5d999Z+fZZJNN3HHHHWeenqVYuFMCeZ2Kr+QHSSAvOfI6XbAcAjmDbgywLVmyxI0aNcrCqhC+iTUOGjdu7Lp37+4It9K6deuiD7jVCZoOqlgCEsgrtmiUMBEQAREQAREQAREQAREQAREQARFIPgFELRbuXLt2rXl83n333TUL6TVq1Mh16NDBjR8/3jVv3ryoC3dKIE9GXZJAnoxyKodAzuDa8uXL3TXXXGPiOJ7jbMQcRxy/+uqr3Q477FDU+0gySkepzTbPFAAAQABJREFUzJeABPJ8iWl/ERABERABERABERABERABERABERCBvAgEz8933nnHYgY/+OCDFhaB7xHJWVDv2muvdcGTvBgLd0ogz6vIyrazBPKyoc/rwqUUyMMg27p161zv3r3d008/bfcPFt9kJsqxxx7rJk2a5Lbffnt5judVito5EJBAHkjoXQREQAREQAREQAREQAREQAREQAREoGgEELlYuBORfOjQoS6I5Fxw4403dr/61a/cwIEDXatWrez/QidEAnmhiRbnfBLIi8O10GctpUDOfWPVqlVuwIAB7oknnqiZgULM8c6dO5s4zuKcP/zhDwudTZ2vgRCQQN5AClrZFAEREAEREAEREAEREAEREAEREIFyEwie5K+//robO3asmz9/vmPBvbBwZ7du3dwll1zidtttt4Iv3CmBvNyln9v1JZDnxqnce5VKIOf+sGzZMpt5EvccZ6FfwqoMGjTINWnSROJ4uStEwq8vgTzhBajki4AIiIAIiIAIiIAIiIAIiIAIiEDSCLBw59tvv22xhOfMmWMxyhHP8STv0aOHiV7EJC+kR6gE8mTUEgnkySinUgnkzz33nK1dgOc4Yjnb1ltvbeL4ZZddZmGZWKRTmwjUh4AE8vrQ07EiIAIiIAIiIAIiIAIiIAIiIAIiIAJ5EwjhVt599103btw4x8KdLOSJJzkL7h155JEmiiGSI5oXYpNAXgiKxT+HBPLiMy7EFYotkCOGv/LKK27MmDG2IOe3335rySasSs+ePV3fvn0d94eNNtqoENnRORo4AQnkDbwCKPsiIAIiIAIiIAIiIAIiIAIiIAIiUA4CIdwKIvmIESPcrFmz3Hfffef4ftNNN3VHH320iWO77LKLYzG++nqJSiAvRynnf00J5PkzK8cRxRLIw+DZ8uXL3VVXXeWeeeYZ9/XXX9s9gMEzwjBdffXV8hwvR6FX8TUlkFdx4SprIiACIiACIiACIiACIiACIiACIlDJBBDD8Bxft26dGzZsmInk33//vSV5k002cR07djSRvFmzZvX2JJdAXsk14f/SJoH8/1hU8qdiCeS0f8590UUXmec44Zi4TzRq1Mh16dLFTZ061W211Va2RkEl81HakkVAAnmyykupFQEREAEREAEREAEREAEREAEREIGqIoD4RWiVFStWuFGjRrlHHnnEPEZDuJUTTzzR9e/fv2bhzh/84Ad1yr8E8jphK/lBEshLjrxOFyy0QM59AHH8nXfecf369TPPccKqsA4BnuOI4yzsu91225k3eZ0SrYNEIAMBCeQZwOhrERABERABERABERABERABERABERCB0hH4z3/+49566y03dOhQN3fu3JqFO3/0ox+5k08+2V166aWudevWdfYclUBeurKsz5UkkNeHXumOLbRAzoDYkiVL3JAhQ8xznJkliOYsyMkgGTNMEMfrOkBWOjK6UhIJSCBPYqkpzSIgAiIgAiIgAiIgAiIgAiIgAiJQZQQQwwinsHLlSjd+/PiacCt8t8UWW7jjjjvODR48uGZhvnxjkksgT0aFkUCejHIqpEDOgpwvvfRSzYKc//73v00IZ0HOk046ycKt7LzzzlqQMxlVI5GplECeyGJTokVABERABERABERABERABERABESgOgkgiK9Zs8YNHz7czZw50xbuJKfEJO/UqZOFYanLwp0SyJNRXySQJ6OcCiGQh/BKf/nLX9zIkSPd008/beGV8BInzvivf/1rC7ey66671nuR3mRQVSrLRUACebnI67oiIAIiUIUEmBaHkcOGUZOvV08VIlGWREAEREAEREAEREAE8iSAPRkW7hwzZoy74447zLOc7zfddFPXvn17N2HCBPMk33jjjXM+uwTynFGVdUcJ5GXFn/PFCyGQf/fdd2758uVu0KBBJo7jSc5GzPHu3bvbjJEmTZrIczznUtGOdSUggbyu5HScCIiACIjAegRCR4bYkbzovBAvUpsIiIAIiIAIiIAIiIAI5EsA2xLni7fffttikj/44IOOBfv4vlGjRq5z584Wk7hVq1a2YF8ucYklkOdbCuXZXwJ5ebjne9X6COSh77h27VrXq1cv99xzzznCqvz3f/+39SNZkHPixIkOcVxOV/mWjPavCwEJ5HWhpmNEQAREQASMAIYNYjidla+//tq98sorbuHChe6nP/2pO//8891PfvKTBkUKjwcMO94x5PBo2myzzeTx0KBqgTIrAiIgAiIgAiJQKALB1nz33XdNJJ8/f77ZWpx/o402Mg/Tyy+/3BF+IRdPcgnkhSqZ4p5HAnlx+Rbq7PURyOlDvvHGG7bw7qJFi6xPSXsnrEoQx/n8wx/+sFDJ1XlEICsBCeRZ8ehHERABERCBTATw6Pn+++/dF1984RYvXuxuvPFGmx5HbMi99trLTZkyxbGQSkPa/v73v9t03xUrVpj3wzHHHONOP/30BjdQ0JDKvJB5pVNAuwovzs13DLbwwjMuhC6qJk8aptCT53gec/ECLCR7nUsEREAERKByCYTnI2EYxo4d6+bOnWsxyXl2/PjHP3YnnniixSjefffdbfZitmekBPLKLed4yiSQx2lU7ue6CuQ4Ey1dutQNGTLEPfPMM9aesf1YkJOY41deeaV5jms2cuWWfTWmTAJ5NZaq8iQCIiACJSDw1VdfuZdfftndddddFi+O/w888EB35JFHuqOPPtq1bt06J0+eEiS1ZJdgMSmmCDJggLfDqaee6gYOHOi22267kqVBF0omATr5eNJ888037q233nKfffaZ++c//2nxVhl0YlZG06ZNrS7hIVdN3jQI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StbcwLsckZyFqRuqFzSiLnHZ77vvvg3WW8pUaRGAiVvep08fW6CzGOJvpmtXyvfUI0KpEG98xIgRNvjCd7DZa6+93HXXXedY/Jz/C+05HhhIIA8k9F4NBCSQV0MpKg8iIAIiIAIiIAIiIAIiIAIiIAIiIAJZCZRaICcxhLv4/vvv3fz5883Ld+XKleb5y29NmzZ15513nr222GILE8mLJWZyvUrcWPidMCBjx451n332WU5JJJb2vHnz3NFHH90gmYUFOQmrArtvvvnGBmMYZGnXrp0bOHCgO/zww4s+eCCBPKfqqp0SQkACeUIKSskUAREQAREQAREQAREQAREQAREQARGoO4FyCOQhtXiSL1y40PXr18+FhTvxfN52221dr1697PtNNtmkwYULIQwN5ULImb/97W8BV8Z3BhDwvg8LdDakAYWwbgucEMdvvvlm949//KNmQc799tvPDRo0yHXwC3IS377YbCSQZ6ym+iGBBCSQJ7DQlGQREAEREAEREAEREAEREAEREAEREIH8CJRTIMeTHDGYhTsRyVesWGFev0HwPfPMM23hTryjibHdUDa4rF692nXt2tW9/fbbtWabkCH77ruvmzVrlnng13pAFe2A5/gnn3xiXuMzZsxwX3zxhYXswXOchTivueYaC6uy+eabF10cB6sE8iqqXMqKk0CuSiACIiACIiACIiACIiACIiACIiACIlD1BMopkAOXGNGEW3n22Wdd7969TWBE9EQkb9y4sbvgggvcZZdd5ho1amTfFdsDuBIKPMRpP+yww9zSpUuNUbZ04WV/0kknudGjR7uf/vSn2Xatmt9gxEDC559/7qZNm+YmTJjg/vWvf9UsyLnLLrvYgpyEVUEsL1W9kUBeNVVMGfEEJJCrGoiACIiACIiACIiACIiACIiACIiACFQ9gXIL5ABGJP+f//kf98QTT7jBgwe75cuXm/iJsIlITqgRxPMQk7zqC8VnkEGCs88+2xbq5HMIJZIu75tttpm76qqr3Pnnn2+Lm6bbp9q+C+L49OnTbXFSBlmoR8w0aNmypeP7Aw44oCRhVeJsJZDHaehz0glIIE96CSr9IiACIiACIiACIiACIiACIiACIiACtRKoBIGcRCJ4InKy0OS4cePcG2+8Yf/z24477mie5GeddZbFJydOeak8grl+Obb//Oc/7rrrrnNDhgyxwQPE30wb8ceJv92lSxfztM+0X7V8z4DBp59+6m655RY3fvx49/XXX1vWEMfbtm3rRo4c6Q455BBH6BnqSik3CeSlpK1rFZuABPJiE9b5RUAEREAEREAEREAEREAEREAEREAEyk6gUgTyAIKFOx999FFbWHHlypXmFYzIiQjct29f8ybHY7rUwmdIX6neEcjxqCd0CgIwAwiZtj333NPdcMMN5jFNvPZq31iQM4RVob6wIYYTc3zYsGGu1GFV4rwlkMdp6HPSCUggT3oJKv0iIAIiIAIiIAIiIAIiIAIiIAIiIAK1Eqg0gRwhmIU7n3zySXfllVe6N998s0Yc3mGHHdyZfuFOYpITd7uaF+6Ew/vvv2+e0HhLI5hn2o499lg3duxY17p1axOKM+2X9O/xHP/444/d5MmT3e23377egpyHHnqo1Yt27do5BlDKNcNAAnnSa5nSHycggTxOQ59FQAREQAREQAREQAREQAREQAREQASqkkClCeRAJt42IvnixYtdr1693DvvvGMCMaInMcnPPfdcE8833XTTql24k5AqX375pTvhhBPcCy+8YDHJM1XA8847z0KxbLvttrYgZab9kvo99QEeH330kXnKE1+cQQPqw0YbbeT23ntv8xxv3759yWOOpzKVQJ5KRP8nmYAE8iSXntIuAiIgAiIgAiIgAiIgAiIgAiIgAiKQE4FKFMhJOIIoC3ciDl900UWOcCsIpSzcyWKdv//9721BT0JrVKMnOfknfAhe9MQXJz576ha8pAkr0r9//7KLw6npK9T/eM9/8cUXJo6PGTPGWOBhT7nvuuuu7qabbnL77ruvzSoITAp17XzPI4E8X2Lav5IJSCCv5NJR2kRABERABERABERABERABERABERABApCoFIFcjKHSIww/Mgjj7ihQ4e6VatWmWc5Iuh2223nLrzwQvMm33rrrS0meao4yvFsfJ/6m/1QwX8YDCDvM2fOdHiI41GfuhGHfauttrJFTQk9k8Q8kifymq6M+B5x/J///KfDa3z06NHmVU++GRhp2bKlmzp1qjvssMNMLK+E/EsgT62l+j/JBCSQJ7n0lHYREAEREAEREAEREAEREAEREAEREIGcCFSyQE4GEEnDwp0jRoxwy5Ytq1m4E2GchTsJuYJQjHd5fMMDHcGS2Nypv8X3q9TPCPyvvfaaI772t99+u0Ey8aAmb8Qf79Klywa/V/oX5O+bb76xRUh/8pOfbOABz++EVZkxY4a79tprbZCA7xDHCasyceJEW5iT/ytBHIe3BPJKr3VKXz4EJJDnQ0v7ioAIiIAIiIAIiIAIiIAIiIAIiIAIJJJApQvkQCWcBt7UDz30kBs5cqSFWwmLVu60004WboVY5T/+8Y9NCEdERRx/+OGH3d133+0GDhxoITg23njjRJURgwOffPKJLdS5du3amsVKQyaIv414jkDetm3b8HVi3hHHFyxY4J544gnXtWtXRwxxyggPcRbkDDHHb7jhBhPS4cFAB3mmTPEcZ/9KEccBL4E8MdVPCc2BgATyHCBpFxEQAREQAREQAREQAREQAREQAREQgWQTSIJADmHEUUTvRYsWuUsuucS9/fbbFn4DMXWbbbZxF1xwgRswYIAJpuxHWBa8jgnL0qlTJzdhwgS38847V5SYmkvN+fzzz91pp51mInJqHHIWKe3WrZsjLveOO+6Yy+kqZh/Kc/ny5RZj/dlnnzVPeEKoHHLIISaCf/DBBxZz/JZbbnGfffaZlRue4vvtt5/Fnq+EBTnTwZRAno6KvksqAQnkSS05pVsEREAEREAEREAEREAEREAEREAERCBnAkkRyMkQnuTE4mbhTkTyFStW1MSvJkQHQjKexY8//rjFq0Ycx9N8yy23dH369HGXXXaZhedAVE/K9uWXXzoW4bz++ust1Ew83YSVOf/8890VV1xh3vPx3yr5M+VIvqZNm2aDGAxoUCYsuIlIvscee9jCpIRWIf44MwLwHEccHz58uDvggAPcZpttVpGDHRLIK7nmKW35EpBAni8x7S8CIiACIiACIiACIiACIiACIiACIpA4AkkSyIGLWIonNV7HvXv3tpAWhOMgzAYhVg4++GC3Zs0at3r1ahPP8VRGfN1rr70sFEkIy5GUgiL2+H333ecuuugi99VXX62X7KZNm7qrr77a/fa3v3V4kydhozwov5deesmdeuqpbt26dZZsyo+Y6ttvv7078MAD3aOPPmqxySk7PMdbtGhhgjrhVfiuksKqxLlLII/T0OekE5BAnvQSVPpFQAREQAREQAREQAREQAREQAREQARqJZA0gZwMhRjjxK4eMmSIe/311827HNEUT2N+x0s5vjVq1MidcMIJbujQoa5Vq1bxnyr6Mx7zL774ojvllFMcYUfi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zUEHHdT8+c9/bh75yEc2hx12WLPzzjtHncYuan0gI9kOOeSQ5hOf+ET88sQnPrH55je/Gfdn3nA+7rjjmo9+9KPNfffdF2Xutttuzd57792sttpqzQMf+MDAxfXag/xf+tKXmn322ae56667mn/6p3+K9nrd6163HGZ33HFH89a3vrX5n//zfzZ/+ctfmtVXX70566yzmuc85znLtUFL5Pj4H//xH81Xv/rVaPdbb701vlP3N73pTWOXkuH8889v3vzmNze//e1vmwc96EHNG97whubII49sHvCAB/TNfyyT8kF9Eof8Xt4XXnhhs91220V7rbzyys3BBx/cvPGNb2we8pCH5GU933/9619H+33rW9+K39dZZ53mC1/4QvOoRz2q5/WT/RImX/nKVwJPOq2Ob3vb25r3v//9fbP44x//2Lzzne9sTjvttNCbRz/60c1FF13UPPvZz477/s//+T/N7373u+aAAw5ozjzzzPjun//5n0MfyN5Pl11MZ2+++eZmq622ir7mu2233bb52Mc+1sBN36PrV155ZfPa1762+c1vftP83d/9XbTVv/zLv9wPe/dnor9ke/vb39585jOfibaA409+8pPmH/7hH/Ky5kc/+lHoyuWXX97813/9V7PmmmtG+fRM0saTSanf/a7Vf8ml3nfffXfz4x//OHSFXusL8njCE54Q/XfTTTeNvtMvv16/Zb/dfvvtm6uvvjra7aEPfWjgQCfZGu3S1l36ccwxxzRHHHFEZPn0pz89MHvGM54RupLlkBt+2uimm24Ke/PSl760ueCCC6Kt8rrud3qiz7MJ2pBN0J7HHntsfJ4sxm2Zu8uY7P/f//73w7bTDXLARN3ZIQl+dI59+uIXv9joA2zpnnvu2ey6667NYx/72NCflMU7+/S5z30u9FJd4X3OOec0G2ywwXJ9QPuzN7vvvnvYNdeussoqzW233TauHb7zzjvDLhkftJM+yL5rA2my2I2nn/I3DrDr9F/9rrvuupArChjnD7vMhrCx+tO+++4b9kV9MsHF2MT2yVPaZpttwqblNTP9DmM2DsZXXXVV9PtnPvOZMT6tvfbaob+vetWrwu784z/+Y+hkt92nA9p9xx13bL7xjW8E7tp0v/32i++Mn3QndUAd9A1jIFsvPf7xj2/OPvvsGK/YrEww/tWvftVsueWWgQ0b94IXvKD5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nXLKKXESM5Jw++23j126UVyYmwxefPHFMakxSK2zzjrNS17ykjjsYcWafG7usuj+4Q9/2Fx00UUxKXOgjgksb4+apoaASe0vf/nL5oILLmhMZuzwb7XVVg1Pj5oqArOBAJ37xS9+0Xz6059ubrjhhvCA2HPPPeNx5tkor+Y5fAjYOOHFxy6JYeoR7Ve96lWNWIs1TYxAEtSIC8n8xWuuiB3kiHi+5513XpS58cYbN3vssUf09Yml738F3fjZz37WfOpTn2puvvnmGPff8IY3NOuvv37/G+uvFYGKQEWgDwJJSh111FFxyGCblHrb294Wh+FZZ8zERl8fMYbuJzbZOmKfffZpLrvssliXqcTKK68cXsTsvw3uhYRbJcib0AMHSprfC7nCKcYchC5ss802zcte9rLGQZOjyK9MpxObt7E9yHFPYuhf5nSw2n333ZslJXRNkuNzNaebTn1m4t5KkM8EijWPQUFg6AhyxM2dd94Zhvv6668PI+5xIEQsgz5qyYTGwvLqq6+OQcthNJ/5zGfixOlBrquBwwnzxx57bJyYjdT9wQ9+0Dz60Y8eZLEHUjY71N/4xjeagw8+uBEv0GBrd9phKjVVBGYDgXwM12LK4Vie0DGBPv7442ejuJrnECLw5z//ufnKV74S3mi333572KWPfexjEb9yCKszpyJbXNlEvuWWW+LxXIULD7DaaqvNWazK3/72t80OO+wQcwvlP+EJT2iuvPLKWNT5fzqJbixdurRBWFk08Up861vf2hx++OHTybbeWxGoCFQEgtRjvw477LDwJrfeYFORU/vuu2+QwLzKzVsWeoKL+dxtt90WB3B+85vfjDUZ5zKOS4ceemizyy67hOPNQiLH6UUlyP+7d9h0uummm5o3vvGNDV7F3CTJ3le+8pXNZpttFpvc9anl/8YLGe6Q28997nPxJIb+ZV2O57ChIHyRpzJGkZP6bwR6/60EeW9c6rfDicDQEeS5C7711lsH4cpg80r68pe/PJLG6I477gjPazuUDPC6664bsa4e+chHDrTGiW324Q9/OB7d8hikgYMn2WMf+9iBlnsQhUuywenyCBXJwR/777//IIpbZRoBBOgcssyE2aTHRG+vvfYKj60RqF6twgwgwK7nAnPZsmWRI28aTwrV1B8BC1K23AaU2J/mMc997nOD8EFUz0XyNBKP/3/7t38L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" + } + }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Screen%20Shot%202021-12-13%20at%201.31.34%20PM.png](attachment:Screen%20Shot%202021-12-13%20at%201.31.34%20PM.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wXOWkF1DqHwo" + }, + "source": [ + "### Background: inference, learning and evaluation\n", + "\n", + "Once we have specified a model, Bayes' rule tells us how to use it to perform ***inference***, or draw conclusions about latent variables from data, by computing the ***posterior distribution*** over $\\bf z$:\n", + "\n", + "$$ p_{\\theta}({\\bf z} | {\\bf x}) = \\frac{p_{\\theta}({\\bf x} , {\\bf z})}{\n", + "\\int \\! d{\\bf z}\\; p_{\\theta}({\\bf x} , {\\bf z}) } $$\n", + "\n", + "To check the results of modeling and inference, we would like to know how well a model fits observed data $x$, which we can quantify with the ***evidence*** or ***marginal likelihood***\n", + "\n", + "$$p_{\\theta}({\\bf x}) = \\int \\! d{\\bf z}\\; p_{\\theta}({\\bf x} , {\\bf z}) $$\n", + "\n", + "and also to make predictions for new data, which we can do with the ***posterior predictive distribution***\n", + "\n", + "$$p_{\\theta}(x' | {\\bf x}) = \\int \\! d{\\bf z}\\; p_{\\theta}(x' | {\\bf z}) p_{\\theta}({\\bf z} | {\\bf x}) $$\n", + "\n", + "Finally, it is often desirable to ***learn*** the parameters $\\theta$ of our models from observed data $x$, which we can do by maximizing the marginal likelihood:\n", + "\n", + "$$\\theta_{\\rm{max}} = \\rm{argmax}_\\theta p_{\\theta}({\\bf x}) = \\rm{argmax}_\\theta \\int \\! d{\\bf z}\\; p_{\\theta}({\\bf x} , {\\bf z}) $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wOFQW7FYqHwl" + }, + "source": [ + "## Example: Geography and national income\n", + "\n", + "The following example is adapted from Chapter 7 of the excellent book [*Statistical Rethinking*](https://xcelab.net/rm/statistical-rethinking/) by Richard McElreath, which readers are encouraged to review for an accessible introduction to the broader practice of Bayesian data analysis ([Pyro code for all chapters](https://fehiepsi.github.io/rethinking-pyro/) is available)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wOFQW7FYqHwl" + }, + "source": [ + "We would like to explore the relationship between topographic heterogeneity of a nation as measured by the Terrain Ruggedness Index (variable *rugged* in the dataset) and its GDP per capita. In particular, it was noted by the authors of the original paper ([\"Ruggedness: The blessing of bad geography in Africa\"](https://diegopuga.org/papers/rugged.pdf)) that terrain ruggedness or bad geography is related to poorer economic performance outside of Africa, but rugged terrains have had a reverse effect on income for African nations. " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wOFQW7FYqHwl" + }, + "source": [ + "Let us look at the data and investigate this relationship. We will be focusing on three features from the dataset:\n", + "\n", + " - `rugged`: quantifies the Terrain Ruggedness Index;\n", + " - `cont_africa`: whether the given nation is in Africa;\n", + " - `rgdppc_2000`: Real GDP per capita for the year 2000;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "wkC4x75KqHwl" + }, + "outputs": [], + "source": [ + "DATA_URL = \"https://github.com/pyro-ppl/datasets/blob/master/rugged_data.csv?raw=true\"\n", + "data = pd.read_csv(DATA_URL, encoding=\"ISO-8859-1\")\n", + "df = data[[\"cont_africa\", \"rugged\", \"rgdppc_2000\"]]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wOFQW7FYqHwl" + }, + "source": [ + "The response variable GDP is highly skewed, so we will log-transform it before proceeding." + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "id": "wkC4x75KqHwl" + }, + "outputs": [], + "source": [ + "df = df[np.isfinite(df.rgdppc_2000)]\n", + "df[\"rgdppc_2000\"] = np.log(df[\"rgdppc_2000\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We then convert the Numpy array behind this dataframe to a `torch.Tensor` for analysis with PyTorch and Pyro." + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": { + "id": "wkC4x75KqHwl" + }, + "outputs": [], + "source": [ + "train = torch.tensor(df.values, dtype=torch.float)\n", + "is_cont_africa, ruggedness, log_gdp = train[:, 0], train[:, 1], train[:, 2]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Visualizing the data suggests that there is indeed a possible relationship between ruggedness and GDP, but that further analysis will be needed to confirm it. We will see how to do this in Pyro via Bayesian linear regression." + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "id": "EhTR2H9JqHwm", + "outputId": "49782ec5-bdf9-486b-d0c7-a6e8f67dce15" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+UAAAIjCAYAAABlBbqXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAAB0K0lEQVR4nO3deXxTVf7/8Xco3VdoKVDZoSKoQBVFQAoKDsMAKiJq3Yq4D4iKOuCGuAL6FVHcnXEF0VEW9wVEQBEVtYiIC0UWHRAs0o2WBtr7+4NfIqFpk7RJ7k3yej4ePLS5N8lJ0ubczzmf8zk2wzAMAQAAAACAoGtidgMAAAAAAIhUBOUAAAAAAJiEoBwAAAAAAJMQlAMAAAAAYBKCcgAAAAAATEJQDgAAAACASQjKAQAAAAAwCUE5AAAAAAAmISgHAAAAAMAkBOVAiNm4caP+9re/KTU1VTabTYsXL673/GnTpslmswWncSFi0KBBGjRokNnNAACEmZdeeklHHXWUoqOjlZaW5vH8Dh06aOzYsQFvV6jYsmWLbDabnn/+ebObAgQVQTkixvPPPy+bzaa4uDj973//q3V80KBBOuaYY0xo2V+Ki4sVFxcnm82mH374we05+fn5+u6773TvvffqpZdeUu/evYPcSv/q0KGDbDabrrnmmlrHli9fLpvNptdff93nx92wYYOmTZumLVu2+KGVAIBI9/jjj8tms6lPnz5uj//4448aO3asOnfurGeeeUZPP/10kFvoX44+2Gaz6euvv651fOzYsUpKSmrQY7/88suaPXt2I1sIhA+CckScqqoqzZgxw+xmuPXaa6/JZrOpVatWmjdvXq3jlZWVWr16tS699FJNmDBBF154odq0aVPvY952222qrKwMVJP95plnntH27dv99ngbNmzQnXfe6TYo//DDD/Xhhx/67bkAAOFv3rx56tChg7788ksVFhbWOr58+XLV1NTo4Ycf1tixY3XOOed4fMyffvpJzzzzTCCa61fTpk3z6+PVFZS3b99elZWVuuiii/z6fIDVEZQj4vTq1cvvAaC/zJ07V//4xz+Ul5enl19+udbxP/74Q5K8Sonbu3evJKlp06aKi4vzazv97eijj1Z1dXXQBktiYmIUExMTlOcCAIS+zZs367PPPtOsWbPUokULtwPnu3btkuS5jzYMwzlYHhsbq+joaL+315969eqlt99+W998803An8uR0RgVFRXw5wKshKAcEeeWW27xOgA8cOCA7r77bnXu3FmxsbHq0KGDbrnlFlVVVbmc16FDB40YMUKffvqpTjzxRMXFxalTp0568cUXvW7Xtm3b9Mknn+i8887Teeed57wAcJg2bZrat28vSbrppptks9nUoUMH5zGbzaYNGzbo/PPPV7NmzXTyySe7HDvc3LlzdeKJJyohIUHNmjVTbm6uy+zxG2+8oeHDhysrK0uxsbHq3Lmz7r77blVXV7s8jiPtf8OGDTrllFOUkJCgI444Qvfff7/Xr71Dhw66+OKLvRos2bp1q/75z3+qa9euio+PV3p6usaMGeMyI/78889rzJgxkqRTTjnFmX63fPlyZ5sPX1O+a9cuXXrppWrZsqXi4uLUs2dPvfDCCy7nONa6/d///Z+efvpp5+/FCSecoDVr1ric+/vvv+uSSy5RmzZtFBsbq9atW+uMM84gnR4AQtC8efPUrFkzDR8+XGeffXatoLxDhw664447JEktWrSQzWZzzi47rhE++OAD9e7dW/Hx8Xrqqaecxw5fU15cXKzrr79eHTp0UGxsrNq0aaOLL75YRUVFkiS73a6pU6fq+OOPV2pqqhITEzVgwAB9/PHHLo/jS59Vn2uuuUbNmjXzarbcm2uHQYMG6Z133tHWrVud/bPjeqauNeXLli3TgAEDlJiYqLS0NJ1xxhm1lvk5rncKCws1duxYpaWlKTU1VZdccokqKipczl2yZIlOPvlkpaWlKSkpSV27dtUtt9zi9XsC+FtTsxsABFvHjh2dAeCUKVOUlZVV57mXXXaZXnjhBZ199tm64YYb9MUXX2j69On64YcftGjRIpdzCwsLdfbZZ+vSSy9Vfn6+nn32WY0dO1bHH3+8jj76aI/tmj9/vhITEzVixAjFx8erc+fOmjdvnvr16ydJOuuss5SWlqbrr79eeXl5+sc//lFrLdeYMWOUnZ2t++67T4Zh1Plcd955p6ZNm6Z+/frprrvuUkxMjL744gstW7ZMf/vb3yQdDGyTkpI0adIkJSUladmyZZo6dapKS0v1wAMPuDzenj179Pe//11nnXWWzjnnHL3++uuaPHmyjj32WA0bNszja5ekW2+9VS+++KJmzJihRx55pM7z1qxZo88++0znnXee2rRpoy1btuiJJ57QoEGDtGHDBiUkJCg3N1cTJ07UI488oltuuUXdunWTJOd/D1dZWalBgwapsLBQEyZMUMeOHfXaa69p7NixKi4u1rXXXuty/ssvv6yysjJdeeWVstlsuv/++3XWWWfpl19+cc54jB49Wt9//72uueYadejQQbt27dKSJUu0bds258UHACA0zJs3T2eddZZiYmKUl5enJ554QmvWrNEJJ5wgSZo9e7ZefPFFLVq0SE888YSSkpLUo0cP5/1/+ukn5eXl6corr9Tll1+url27un2e8vJyDRgwQD/88IPGjRun4447TkVFRXrzzTf122+/KSMjQ6Wlpfr3v/+tvLw8XX755SorK9N//vMfDR06VF9++aV69erl8pje9Fn1SUlJ0fXXX6+pU6fqm2++0XHHHVfnud5cO9x6660qKSnRb7/9poceekiS6l2bvnTpUg0bNkydOnXStGnTVFlZqTlz5qh///765ptvavWp55xzjjp27Kjp06frm2++0b///W9lZmZq5syZkqTvv/9eI0aMUI8ePXTXXXcpNjZWhYWFWrVqlcf3AggYA4gQzz33nCHJWLNmjbFp0yajadOmxsSJE53HBw4caBx99NHOn9euXWtIMi677DKXx7nxxhsNScayZcuct7Vv396QZKxcudJ5265du4zY2Fjjhhtu8Kp9xx57rHHBBRc4f77llluMjIwMY//+/c7bNm/ebEgyHnjgAZf73nHHHYYkIy8vr9bjOo45bNy40WjSpIkxatQoo7q62uXcmpoa5/9XVFTUeqwrr7zSSEhIMPbt2+e8beDAgYYk48UXX3TeVlVVZbRq1coYPXq0x9fdvn17Y/jw4YZhGMYll1xixMXFGdu3bzcMwzA+/vhjQ5Lx2muv1duu1atX12rDa6+9ZkgyPv7441rnDxw40Bg4cKDz59mzZxuSjLlz5zpvs9vtRt++fY2kpCSjtLTUMIy/3v/09HTjzz//dJ77xhtvGJKMt956yzAMw9izZ4/bzwkAEHq++uorQ5KxZMkSwzAO9pVt2rQxrr32WpfzHP3tH3/84XK74xrh/fffr/XY7du3N/Lz850/T5061ZBkLFy4sNa5jj76wIEDRlVVlcuxPXv2GC1btjTGjRvnvM3bPqsuh/bBxcXFRrNmzYzTTz/deTw/P99ITEx0uY+31w7Dhw832rdvX+tcR5ufe+455229evUyMjMzjd27dztv+/bbb40mTZoYF198sfM2x/t/6HtgGIYxatQoIz093fnzQw895PZzAsxE+joiUqdOnXTRRRfp6aef1o4dO9ye8+6770qSJk2a5HL7DTfcIEl65513XG7v3r27BgwY4Py5RYsW6tq1q3755ReP7Vm3bp2+++475eXlOW/Ly8tTUVGRPvjgA+9elKSrrrrK4zmLFy9WTU2Npk6dqiZNXL8CDk1zj4+Pd/5/WVmZioqKNGDAAFVUVOjHH390uV9SUpIuvPBC588xMTE68cQTvXrth7rtttt04MCBepcWHNqu/fv3a/fu3erSpYvS0tIavN7t3XffVatWrVze/+joaE2cOFHl5eVasWKFy/nnnnuumjVr5vzZ8bk7Xm98fLxiYmK0fPly7dmzp0FtAgBYw7x589SyZUudcsopkg72leeee65eeeWVWku66tKxY0cNHTrU43kLFixQz549NWrUqFrHHH10VFSUsy5KTU2N/vzzTx04cEC9e/d22w966rO8kZqaquuuu05vvvmmCgoK6jzPl2sHb+zYsUNr167V2LFj1bx5c+ftPXr00Gmnnea8VjvU4ddCAwYM0O7du1VaWirprzX/b7zxhmpqanxuExAIBOWIWJ4CwK1bt6pJkybq0qWLy+2tWrVSWlqatm7d6nJ7u3btaj1Gs2bNvArK5s6dq8TERHXq1EmFhYUqLCxUXFycOnTo4LaYTF06duzo8ZxNmzapSZMm6t69e73nff/99xo1apRSU1OVkpKiFi1aOAPvkpISl3PbtGlTa926t6/9UN4MllRWVmrq1Klq27atYmNjlZGRoRYtWqi4uLhWu7y1detWZWdn1xqkcKS7e/qsHRc7jtcbGxurmTNn6r333lPLli2Vm5ur+++/X7///nuD2gcAMEd1dbVeeeUVnXLKKdq8ebOzj+7Tp4927typjz76yKvH8aZ/lg720d5sz/rCCy+oR48eiouLU3p6ulq0aKF33nnHbT/oqc/y1rXXXqu0tLR615b7cu3gDUf/6y7dv1u3bioqKnIWtnXw9HrPPfdc9e/fX5dddplatmyp8847T//9738J0GEqgnJErE6dOunCCy+sNwCU5LZImjt1VQo16lnb7Tg+f/587d27V927d1d2drbz35YtW/TGG2+ovLzcqzYcOkLdGMXFxRo4cKC+/fZb3XXXXXrrrbe0ZMkS53qswzuuhr52d2699VYdOHDA+VyHu+aaa3TvvffqnHPO0X//+199+OGHWrJkidLT04PWoXrzeq+77jr9/PPPmj59uuLi4nT77berW7du9c4wAACsZdmyZdqxY4deeeUVl/7Zsd2ZtwPn/uqfpYMD+Y790P/zn//o/fff15IlS3Tqqae67Qf91Ud7mi339dohUDy93vj4eK1cuVJLly7VRRddpHXr1uncc8/Vaaed5nXmA+BvFHpDRLvttts0d+5ctwFg+/btVVNTo40bN7oUCNu5c6eKi4udldAba8WKFfrtt99011131SpEtmfPHl1xxRVavHixS3p4Y3Tu3Fk1NTXasGFDrWIwDsuXL9fu3bu1cOFC5ebmOm/fvHmzX9rgqX0XXnihnnrqKfXp06fW8ddff135+fl68MEHnbft27dPxcXFLud5O5giHfys161bp5qaGpfZckeqXUM/686dO+uGG27QDTfcoI0bN6pXr1568MEHNXfu3AY9HgAguObNm6fMzEw99thjtY4tXLhQixYt0pNPPum3oLtz585av359vee8/vrr6tSpkxYuXOjS1zmqvwfSddddp9mzZ+vOO++stfWbL9cO3vbRjv73p59+qnXsxx9/VEZGhhITE314BQc1adJEgwcP1uDBgzVr1izdd999uvXWW/Xxxx9ryJAhPj8e0FjMlCOiHRoAHp5a/I9//EPSwYqqh5o1a5Ykafjw4X5pgyN1/aabbtLZZ5/t8u/yyy9Xdna2Tynsnpx55plq0qSJ7rrrrlqj1o5RZMco86Gj6Ha7XY8//rjf2lGf2267Tfv373e7rVpUVFSt0f05c+bUGt12dNKHB+vu/OMf/9Dvv/+uV1991XnbgQMHNGfOHCUlJWngwIE+tb+iokL79u1zua1z585KTk6utZ0eAMCaKisrtXDhQo0YMaJW/3z22WdrwoQJKisr05tvvum35xw9erS+/fbbWju8SPX30V988YVWr17tt3bUxTFb/sYbb2jt2rUux3y5dkhMTPQqnb1169bq1auXXnjhBZf+fP369frwww+d12q++PPPP2vd5pikoI+GWZgpR8S79dZb9dJLL+mnn35y2bqsZ8+eys/P19NPP+1Myfryyy/1wgsv6Mwzz3QWfGmMqqoqLViwQKeddpri4uLcnnP66afr4Ycf1q5duxr9fJLUpUsX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/hUua+PhXjgssQAQnhhgDx1kNQBoKJ+D8mbNmslms9W63WazKS4uTl26dNHYsWN1ySWX+KWB4SoYQUAoB5JWTP8icAtvob7EAkB4CvUB9khCVgOAhvI5KJ86daruvfdeDRs2TCeeeKIk6csvv9T777+v8ePHa/Pmzbr66qt14MABXX755X5vcDgJRhAQioGklYvaELgBAIIplAfYIw1ZDQAayueg/NNPP9U999yjq666yuX2p556Sh9++KEWLFigHj166JFHHiEot4hgBJL+TDUn/QsAgL+E4gB7JCKrAUBD+RyUf/DBB5o5c2at2wcPHqwbbrhBkvSPf/xDU6ZMaXzrEBSNDaj9nWpO+hcAAK7I1LI+shoANJTPQXnz5s311ltv6frrr3e5/a233lLz5s0lSXv37lVycrJ/WoiAamxAHYhUc9K/AABAKCKrAUBD+ByU33777br66qv18ccfO9eUr1mzRu+++66efPJJSdKSJUs0cOBA/7YUfuePgDoQqeZWSf+yUvV3AAAQGshqAOArn4Pyyy+/XN27d9ejjz6qhQsXSpK6du2qFStWqF+/fpLkTGOHtfkjoA5EqrkV0r+sWP0dAAAAQPhp0D7l/fv3V//+/f3dFgSZPwLqQKWam5n+ZeXq7wAAAADCS4OC8urqai1evFg//PCDJOnoo4/W6aefrqioKL82DoHlj4A6kKnmZqV/Uf0dAAAAQLA08fUOhYWF6tatmy6++GItXLhQCxcu1IUXXqijjz5amzZtCkQbESCOgNodXwLqu844RgMOe5xQrjRK9XcAAAAAweJzUD5x4kR17txZv/76q7755ht988032rZtmzp27KiJEyf6tXHV1dW6/fbb1bFjR8XHx6tz5866++67ZRiGX58nUjnWbh8emHsbUG8vrtSE+QX6xyOfqGfbNP0nv7f+k99bH1w3QHPyctQ6RNdeU/0dAAAAQLD4nL6+YsUKff75587tzyQpPT1dM2bM8Ps685kzZ+qJJ57QCy+8oKOPPlpfffWVLrnkEqWmpvp9ACBSNXTt9uHrrh9dVug8lpudoTl5OQFtdyBZpfo7AAAAgPDnc1AeGxursrKyWreXl5crJsa/wcpnn32mM844Q8OHD5ckdejQQfPnz9eXX37p1+eJdA1Zux3O666tUP0dAAAAQGTwOSgfMWKErrjiCv3nP/9x7lP+xRdf6KqrrtLpp5/u18b169dPTz/9tH7++WcdeeSR+vbbb/Xpp59q1qxZdd6nqqpKVVVVzp9LS0v92iYcFO7rrs2s/g4AqB99PQAgnPgclD/yyCPKz89X3759FR19cG3tgQMHdPrpp+vhhx/2a+OmTJmi0tJSHXXUUYqKilJ1dbXuvfdeXXDBBXXeZ/r06brzzjv92g7UFgnrrs2q/g4AqB99PQAgnNiMBlZN27hxo3788UdJUrdu3dSlSxe/NkySXnnlFd1000164IEHdPTRR2vt2rW67rrrNGvWLOXn57u9j7vR87Zt26qkpEQpKSl+b2OkKqmw65r5BXWuu2YvbwCoW2lpqVJTU+mbGoi+HgBgdb709Q0OyoOhbdu2mjJlisaPH++87Z577tHcuXOdAwKecOETONuLK+tcdx2qldcBIBjom/yL9xMAYDW+9E1epa9PmjTJ6yevb723ryoqKtSkieuubVFRUaqpqfHbc6DhWHcNAAAAAI3jVVBeUFDg1YPZbLZGNeZwI0eO1L333qt27drp6KOPVkFBgWbNmqVx48b59XnQcKy7BgAAAICG8yoo//jjjwPdDrfmzJmj22+/Xf/85z+1a9cuZWVl6corr9TUqVNNaQ8AAAAAAP5k6TXl/sA6MwCA1dA3+RfvJwDAanzpm5rUexQAAAAAAAQMQTkAAAAAACbxak05EAlKKuwqKrerdN9+pcRHKyORInYAAAAAAougHNDBPdcnL1inTw7bc33G6B7KYs91AAAAAAFC+joiXkmFvVZALkkrNxZpyoJ1Kqmwm9KmTbvKVbBtjzb9UW5KGwAAoD8CgMBjphwRr6jcXisgd1i5sUhF5fagprEzaw8AsAL6IwAIDmbKEfFK9+2v93iZh+P+ZMVZewBA5KE/AoDgYaYcfhWKxdJS4qLrPZ7s4bg/WW3W3p1Q/IwBAL4Jhf4IAMIFQTnq5UsAFqppbhlJMcrNztBKNxcfudkZykgK3kWHlWbt3QnVzxgA4Bur90cAEE5IX0edthdXasL8Ag2etUKjHv9Mgx9coWvmF2h7cWWtc0M5zS01IUYzRvdQbnaGy+252RmaObpHUGcCrDRrf7hQ/owBAL6xcn8EAOGGmXK45SkAm5OX4xKshnqaW1ZavObk5aio3K6yffuVHBetjKTgp2Vbadb+cKH+GQMAvGfl/ggAwg0z5XDLmwDsUKGU5lbX9i6pCTHqnJmkXu2aqXNmkikBppVm7Q8XSp8xAKBxrNwfAUC4YaYcbvkagIVKmlsorIm2yqz94ULlMwYA+IdV+yMACDfMlMMtXwMwR5qbO1ZJcwulNdFWmLU/XCh8xgAA/7JifwQA4YagHG75GoCFQpqbryn5cBUKnzEAAAAQakhfh1uOAGzKgnUuRV7qC8CsnubGmujGs/pnDAAAAIQagnLUqSEBWGqCdQM01kT7h5U/YwAAACDUEJSjXuEUgLG9CwAAAACrYU05IgZrogEAAABYDTPliCisiQYAAABwuJIKu4rK7Srdt18p8dHKSAxejEBQjogTTin5AAAAABpne3Flra2Tc7MzNGN0D2WlxQf8+UlfBwAAAABEpJIKe62AXDq4ZfKUBetUUhH4bZMJygEAAAAAEamo3F4rIHdYubFIReWBD8pJXwdMYua6FQAAAABS6b799R4v83DcHwjKAROYvW4FAAAAgJQSF13v8WQPx/2B9HUgyKywbgUAEHpKKuzatKtcBdv2aNMf5fQXAOAHGUkxtbZMdsjNzlBGUuAzWZkpB4LMm3UrpLEDAA5FhhUABEZqQoxmjO6hKQvWaeVh37EzR/cIynU5QTkQIHWtGbfCuhUAQOjwlGE1Jy+HwVwAaISstHjNyctRUbldZfv2KzkuWhlJ7FMOhLT6ZjSssG4FABA6yLACgMBLTTCv6DJBOeBnnmY0HhjTU7nZGS7pMQ7BWrcC/6OaPhD+/PV37uvjkGEVeugTAPiCoDwM8MXvWTDfI08zGnurDpi+bgX+xVpPIPz56++8IY9DhlVooU8A4CuC8hDHF79nwX6PPM1olFbuV6cWSaauW4H/sNYTCH/++jtv6OM4KgOTYWV99AkAGoIt0UIYW2t5ZsZ75O2MRmpCjDpnJqlXu2bqnJlEJx2ivFnrCSC0+evvvKGP46gMfPiWPWRYWQ99AoCGYKY8hFH4xTMz3iOzZzRYzhBcrPUEwp+//s4b8zieKgPz3W8N9AkAGoKgPITxxe+ZGe+RmXsdspwh+FjrCYQ/f/2dN/Zx6qoMzHe/ddAnAGgIgvIQxhe/Z2a9R2bsdcg6NnOYnRkBIPD89XceiO8LvvutJVL6BDIzAP9iTXkIc3zxuxNOX/yNYeZ7FOw146xjMwdrPYHw56+/80B8X/Ddby2R0CdsL67UhPkFGjxrhUY9/pkGP7hC18wv0PbiSrObBoQsZspDmJlp0qEikt4jljOYx4zMCACBUdcMoDd/597MHvr7+4LvfusJ5z6BzAwgMAjKQ1w4f/H7S6S8RyxnMFddaz0BhA5Pa7Pr+zv3ZV23P78v+O63pnDtEygyDAQGQXkYCNcvfn+KhPcoUtaxAUAgNGYGsK77frV1j1b8/Id6t2+m8qoDAVl7y3c/gonMDCAwWFMOhIlIWMcGAIHSmLXZ7u6bEBOlR/Jy9Pa67TrtoZUBW3vLdz+CicwMIDCYKQfCSKSk6gOAvzVmBtDdfced3FHPrdqsVYW7XW4PxNpbvvsRLGRmAIFBUI6AYbsMc0RCqj4A+FtjZgDd3TenbZoeXVbo9vxArL3lux/BEEkFdIFgIihHQPhS8AYAALM1ZgbQ3X2rDtTU+3ysvUWoIjMD8D/WlMPvPBXLKalgz1QAgLU0Zm22u/vGNq3/Eou1twhlqQkx6pyZpF7tmqlzZhIBOdBIzJTD79guIzSx3ABApKtvBtDTd+Th922WwNpbAIB3CMrhd2yXEXpYbhC5GIwBXLlbm+3td+Th92XtLQDAGwTl8Du2ywgtjdmbF6GNwRjAs8Z8R7L2FgDgDdaUh7iSCrs27SpXwbY92vRHuSXWazsK3rhDyp71NGZvXoQuaj8A3mnsdyRrbwEAnjBTHsKsOsvFdhmhheUGkYnaD4B3+I4EAAQaQXmABWq9ptVTjknZCx0sN4hMBBqAd/iOBAAEGkF5AAVyJjsUZrncFcuB9TRmb16ELgINwDt8RwIAAo015QES6PWazHLBXxqzNy9CF7UfAO/wHQkACDRmygMk0DPZzHLBn1huEHmo/QB4z/EduXuvXdU1hmoMQzZJJfv2a8fWSqUmxLCdIACgwQjKAyTQM9mk08HfWG4QeRiMAbyXmhCjvfZqTX1jvc47sZ2eW7VZqwp3O49bodAqACA0kb4eIIGeySadDoA/sF0T4B3HsrSjWqfUCsglthMEADQcM+UBEoyZbGa5AAAIDseytLH9OujRZYVuz7FKoVUAQGhhpjxAgjWTzSwXAACB51iWVnWgpt7zKLQKAPAVM+UBxEw2AADhwbEsLbZp/fMZFFoFAPiKoDzAQq14VkmFXUXldpXu26+U+GiqyQIAoL+WpRX8Wqz+XdJrrSmXKLQKAGgYgnI4bS+urLW3OtVkAYQqBhnhT45laXe8sV6X9O8oSbWqr1NoFQDQEDbDMAyzGxFIpaWlSk1NVUlJiVJSUsxujmWVVNg1YX6B273Vc7MzNCcvhwsNACHD6oOM9E3+Fcz3s6TC7tyvvLrGUIW9WqnxLE8DALjypW9iphyS/qoq6w7VZAGEEsfWVYd/pzm2rGKQEY0RasvSAADWR/V1SPqrqmxdqCYLIFR4M8gIAABgFQTlkPRXVdm6UE0WQKhgkBEAAIQSgnJI+quqrDtUkwUQShhkBA4u49i0q1wF2/Zo0x/lKqkgQwQArIo15ZD0V1XZKQvWaeVhhZGoJgsglDgGGVfWUbiSQUaEO6sXOgQAuKL6Olw4thAq27dfyXFUkwUQmrYXV9Y5yNjaAkEJfZN/8X7+hd1UAMAaqL6OBqOqLIBwkJUWrzl5OQwyIuKwmwoAhB6CcgBAWGKQEZGIQocAEHoo9AYAABAmKHQIAKGHoBwAACBMsJsKAIQegnIAAIB6hNL2Yo7dVA4PzNlNBQCsizXlAAAAdQjF7cUodAgAoYWZcgAAADdKKuy1AnLpYBXzKQvWWX7GvHNmknq1a6bOmUkE5ABgYQTlAAAAbnizvRgAAI1l+aC8Q4cOstlstf6NHz/e7KYBAIAwxvZiAIBgsPya8jVr1qi6utr58/r163XaaadpzJgxJrYKAACEO7YXAwAEg+Vnylu0aKFWrVo5/7399tvq3LmzBg4caHbTAABAGGN7MQBAMFg+KD+U3W7X3LlzNW7cONlsNrfnVFVVqbS01OUfAAAIH8Hq69leDAAQDJZPXz/U4sWLVVxcrLFjx9Z5zvTp03XnnXcGr1EAACCogtnXs70YACDQbIZhGGY3wltDhw5VTEyM3nrrrTrPqaqqUlVVlfPn0tJStW3bViUlJUpJSQlGMwEAqFdpaalSU1PpmxqIvh4wT0mFXUXldpXu26+U+GhlJDJIBbjjS18fMjPlW7du1dKlS7Vw4cJ6z4uNjVVsbGyQWgUAAIKNvh4wx/biSk1esM5lq8Dc7AzNGN1DWWnxJrYMCG0hs6b8ueeeU2ZmpoYPH252UwAAAAKqpMKuTbvKVbBtjzb9Ua6SCvZEh7lKKuy1AnJJWrmxSFMWrON3FGiEkJgpr6mp0XPPPaf8/Hw1bRoSTQYAAGEmWGm7zEbCiorK7bUCcoeVG4tUVG4njR1ooJCIcJcuXapt27Zp3LhxZjcFAABEoGAFyp5mI+fk5RD4wBSl+/bXe7zMw3EAdQuJ9PW//e1vMgxDRx55pNlNAQAAESaYabvezEYCZkiJi673eLKH4wDqFhJBOQAAgFmCGSgzGwmrykiKUW52httjudkZykgigwNoKIJyAACAQ5RU2LW1aK82bC/Rmi1/qupAtSac2kUJMVFuz/dnoMxsJKwqNSFGM0b3qBWY52ZnaOboHiyrABohJNaUAwAABMOO4kpt/bNCc5Zt1KrC3c7b+3dJ1yN5OZo4v0AV9mqX+/gzUHbMRq50MzPPbCTMlpUWrzl5OSoqt6ts334lx0UrI4l9yoHGIigHAADQwRny5T//obfXbXcJyCU5fx53ckc9uqzQebu/A2XHbOSUBetcAnNmI2EVqQkE4YC/EZQDAADo4NrxzOTYWgG5w6rC3RrXv6Pz50AFysxGAkBkISgHAADQwSJrVQdq6j0nNT5ai//ZL+CBMrOR4SNY+9sDCF0E5QAAADpYZO3PvfVXUm+WEKPOmUlBahFCXbD2twcQ2qi+DgAAoINF1naVVal/l3S3xym0Bl8Ec397AKGNmXIAAAAdTBkfdGQLdcxIlCSXteUD6lg/Tmoy6uLN/vb8rgCQCMoBAACcWqfFKyEmSvedeaz22g+owl6t1PhoZSbH1gqg/J2aTIAfXko97F/vz/3tAYQ2gnIAAIBDeFNkzVNq8py8HJ8CatYeh58UD/vX+3N/ewChjTXlAAAAPvImNdlbrD0OTxlJMcrNznB7jPoEAA5FUA4AAOAjf6Ym+zPAh3WkJsRoxugetQLzQO1vDyB0kb4OAADgI3+mJrP2OHxlpcVrTl6OisrtKtu3P+D72wMITQTlAAAAPnKkJq90M8PtSE32tnCbFdceU3TOf7ypUQAgshGUAwAA+MiRmjxlwTqXwDw3O0P3j+6hvfZqrwu3eRPgBxNF5wAguGyGYRhmNyKQSktLlZqaqpKSEqWkpJjdHAAA6Jv8zMz30zGjfGhqsiRNmF/gdp14bnaG28rs24sr3Qb4M0f3UOsgBsIlFXaf2w4AqM2XvomZcgAAgAZyl5q8aVe5x8Jth9/HKmuPvSk6R1AOAP5FUA6ECdb/AYHD3xd80dDCbVZYe0zROQAIPoJyIAyw/g8IHP6+IlNjBmI8FW6LadpEm/4ot+TgjhWLzgFAuGOfciDElVTYawUM0sE0wykL1qmkgv1tgYbi7ysybS+u1IT5BRo8a4VGPf6ZBj+4QtfML9D24kqv7u8o3OZO/y7pWvLDTi0q+J++316qr7b8qU1/lFvmd6m+tptRdA4AIgFBORDivFn/B6Bh+PuKPP4YiHFUZj88uO3fJV2XndxJxx6RqoJte3T+v7/Q2U+u9jnoD6S62u4oOme1mX0ACAekrwMhjvV/QODw9xV5/FXo7NDCbXsq7Cqp3K+CX4v17W/FWrPlT60q3F3rsacsWGeJ6uZWKToHAJGCoBwIcaz/AwKHv6/I48+BGEfhtoJte3TpC19Jkv6T31uzl250e76VqptboegcAEQK0teBEMf6PyBw+PuKPIEYiDn0MasO1NR7LtkXABB5CMqBEMf6PyBw+PuKPIEYiDn0MWOb1n/pRfYFAEQem2EYhtmNCKTS0lKlpqaqpKREKSkpZjcHCBjH9j2s/wP8z99/X/RN/uXv93N7caWmLFinlYdtgzdzdA+1buA2eI7H7NE2TQXb9tRaU+54DiusKQcANJ4vfRNBOQAAQUbf5F+BeD8DMdBZUmHX7r12GZKmvfm9S0G5xgb9AABr8aVvotAbAADAYQ4NwEv37ZdstW9vyGM67v8o1c0BAP8fQTkAAMBhthdX1tqvPDc7QzNG91CWH2azqW4OAHCg0BsAAMAhSirstQJy6a+9xEsq7Ca1DAAQjgjKAQAADlFUbq8VkDs49hIHAMBfSF8HAAA4RKmHvcJ92UvcUTCudN9+pcRHKyORtHUAgCuCcgAAgEOkeNgr3Nu9xAO9Lh0AEB5IXwcAADhERlKMcrMz3B7Lzc5QRpLnmW7WpQMAvEVQDgAAcIjUhBjNGN2jVmDu2Evcm/Rz1qUDALxF+joAAMBhstLiNacRe4n7c106ACC8EZQDAAC40Zi9xP21Lj2cUQQPAA4iKAcAAPAzx7r0lW5S2L1dlx7OKIIHAH9hTTkAAICf+WNderhqbBG8kgq7Nu0qV8G2Pdr0RzlF8wCEPGbKAQAAAqCx69LDlTdF8Op6j5hhBxCOmCkHAAAIkNSEGHXOTFKvds3UOTMp4gNyqeFF8NhmDkC4IigHAABA0DS0CB7bzAEIVwTlAAAACBpHETx36iuCxzZzAMIVQTkAAEAEMbtQWkOL4LHNHIBwRaE3AACACGGVQmkNKYLHNnMAwhUz5QAAABHAaoXSfC2CxzZzAMIVM+UAAAARoDFbkVkF28wBCEcE5QAAABEgXAqlpSYQhAMIL6SvAwAARAAKpQGANRGUAwAARICGbkUGAAgsgnIAAIAIQKE0ALAm1pQDAABECAqlAYD1EJQDAABEEAqlAYC1EJQDAABYUEmFXUXldpXu26+U+GhlJBJMA0A4IigHAACwmO3FlZq8YJ3LvuK52RmaMbqHstLiTWwZAMDfKPQGAABgISUV9loBuSSt3FikKQvWqaTCblLLAACBQFAOAABgIUXl9loBucPKjUUqKicoB4BwQlAOAABgIaX79td7vMzDcQBAaCEoBwAAsJCUuOh6jyd7OA4ACC0E5QAAABaSkRSj3OwMt8dyszOUkUQFdgAIJwTlAAAAFpKaEKMZo3vUCsxzszM0c3QPtkUDgDDDlmgAAAAWk5UWrzl5OSoqt6ts334lx0UrI4l9ygEgHBGUAwAAWFBqAkE4AEQCgnIAAIAgKamwq6jcrtJ9+5USH62MRAJvAIh0BOUAAABBsL24UpMXrHPZgzw3O0MzRvdQVlq8iS0DAJiJQm8AAAABVlJhrxWQS9LKjUWasmCdSirsJrUMAGA2gnIAAIAAKyq31wrIHVZuLFJROUE5AEQqgnIAAIAAK923v97jZR6OAwDCF0E5AABAgKXERdd7PNnDcQBA+CIoBwAACLCMpBjlZme4PZabnaGMJCqwA0CkIigHAAAIsNSEGM0Y3aNWYJ6bnaGZo3uwLRoARDC2RAMAAAiCrLR4zcnLUVG5XWX79is5LloZSexTDgCRjqAcAAAgSFITCMIBAK5IXwcAAAAAwCQE5QAAAAAAmISgHAAAAAAAk1g+KP/f//6nCy+8UOnp6YqPj9exxx6rr776yuxmAQAAAADQaJYu9LZnzx71799fp5xyit577z21aNFCGzduVLNmzcxuGgAAAAAAjWbpoHzmzJlq27atnnvuOedtHTt2rPc+VVVVqqqqcv5cWloasPYBAIDgo68HAIQTS6evv/nmm+rdu7fGjBmjzMxM5eTk6Jlnnqn3PtOnT1dqaqrzX9u2bYPUWgAAEAz09QCAcGIzDMMwuxF1iYuLkyRNmjRJY8aM0Zo1a3TttdfqySefVH5+vtv7uBs9b9u2rUpKSpSSkhKUdgMAUJ/S0lKlpqbSNzUQfT0AwOp86estnb5eU1Oj3r1767777pMk5eTkaP369fUG5bGxsYqNjQ1mMwEAQBDR1wMAwoml09dbt26t7t27u9zWrVs3bdu2zaQWAQAAAADgP5YOyvv376+ffvrJ5baff/5Z7du3N6lFAAAAAAD4j6WD8uuvv16ff/657rvvPhUWFurll1/W008/rfHjx5vdNAAAAAAAGs3SQfkJJ5ygRYsWaf78+TrmmGN09913a/bs2brgggvMbhoAAAAAAI1m6UJvkjRixAiNGDHC7GYAAAAAAOB3lg/KG8ux41tpaanJLQEA4CBHn2ThXUlDCn09AMBqfOnrwz4oLysrkyS1bdvW5JYAAOCqrKxMqampZjcj5NHXAwCsypu+3maE+TB9TU2Ntm/fruTkZNlstkY9Vmlpqdq2batff/3V4wbwkYr3qH68P57xHtWP98ezUHiPDMNQWVmZsrKy1KSJpcu7hARf+/pQ+B0JlEh+7VJkv35eO6+d1x5cvvT1YT9T3qRJE7Vp08avj5mSkhJxv9S+4j2qH++PZ7xH9eP98czq7xEz5P7T0L7e6r8jgRTJr12K7NfPa+e1RxozX7u3fT3D8wAAAAAAmISgHAAAAAAAkxCU+yA2NlZ33HGHYmNjzW6KZfEe1Y/3xzPeo/rx/njGewRPIvl3JJJfuxTZr5/XzmuPNKH02sO+0BsAAAAAAFbFTDkAAAAAACYhKAcAAAAAwCQE5QAAAAAAmISgHAAAAAAAkxCU++Cxxx5Thw4dFBcXpz59+ujLL780u0mWsXLlSo0cOVJZWVmy2WxavHix2U2ylOnTp+uEE05QcnKyMjMzdeaZZ+qnn34yu1mW8cQTT6hHjx5KSUlRSkqK+vbtq/fee8/sZlnWjBkzZLPZdN1115ndFMuYNm2abDaby7+jjjrK7GbBoiK1P4/UvjqS+2D6179EWt8Z6f3i//73P1144YVKT09XfHy8jj32WH311VdmN6tOBOVeevXVVzVp0iTdcccd+uabb9SzZ08NHTpUu3btMrtplrB371717NlTjz32mNlNsaQVK1Zo/Pjx+vzzz7VkyRLt379ff/vb37R3716zm2YJbdq00YwZM/T111/rq6++0qmnnqozzjhD33//vdlNs5w1a9boqaeeUo8ePcxuiuUcffTR2rFjh/Pfp59+anaTYEGR3J9Hal8dyX0w/etBkdp3Rmq/uGfPHvXv31/R0dF67733tGHDBj344INq1qyZ2U2rmwGvnHjiicb48eOdP1dXVxtZWVnG9OnTTWyVNUkyFi1aZHYzLG3Xrl2GJGPFihVmN8WymjVrZvz73/82uxmWUlZWZmRnZxtLliwxBg4caFx77bVmN8ky7rjjDqNnz55mNwMhgP78oEjuqyO9D460/jVS+85I7hcnT55snHzyyWY3wyfMlHvBbrfr66+/1pAhQ5y3NWnSREOGDNHq1atNbBlCVUlJiSSpefPmJrfEeqqrq/XKK69o79696tu3r9nNsZTx48dr+PDhLt9F+MvGjRuVlZWlTp066YILLtC2bdvMbhIshv4cUuT2wZHav0Zy3xmp/eKbb76p3r17a8yYMcrMzFROTo6eeeYZs5tVr6ZmNyAUFBUVqbq6Wi1btnS5vWXLlvrxxx9NahVCVU1Nja677jr1799fxxxzjNnNsYzvvvtOffv21b59+5SUlKRFixape/fuZjfLMl555RV98803WrNmjdlNsaQ+ffro+eefV9euXbVjxw7deeedGjBggNavX6/k5GSzmweLoD9HJPbBkdy/RnLfGcn94i+//KInnnhCkyZN0i233KI1a9Zo4sSJiomJUX5+vtnNc4ugHAiy8ePHa/369RGzrsdbXbt21dq1a1VSUqLXX39d+fn5WrFiRcRcONTn119/1bXXXqslS5YoLi7O7OZY0rBhw5z/36NHD/Xp00ft27fXf//7X1166aUmtgyAlURiHxyp/Wuk952R3C/W1NSod+/euu+++yRJOTk5Wr9+vZ588knLBuWkr3shIyNDUVFR2rlzp8vtO3fuVKtWrUxqFULRhAkT9Pbbb+vjjz9WmzZtzG6OpcTExKhLly46/vjjNX36dPXs2VMPP/yw2c2yhK+//lq7du3Scccdp6ZNm6pp06ZasWKFHnnkETVt2lTV1dVmN9Fy0tLSdOSRR6qwsNDspsBC6M8jW6T2wZHav9J3uoqkfrF169a1Bp26detm6fR9gnIvxMTE6Pjjj9dHH33kvK2mpkYfffRRRK3JQcMZhqEJEyZo0aJFWrZsmTp27Gh2kyyvpqZGVVVVZjfDEgYPHqzvvvtOa9eudf7r3bu3LrjgAq1du1ZRUVFmN9FyysvLtWnTJrVu3drspsBC6M8jE32wq0jpX+k7XUVSv9i/f/9a2x7+/PPPat++vUkt8oz0dS9NmjRJ+fn56t27t0488UTNnj1be/fu1SWXXGJ20yyhvLzcZeRt8+bNWrt2rZo3b6527dqZ2DJrGD9+vF5++WW98cYbSk5O1u+//y5JSk1NVXx8vMmtM9/NN9+sYcOGqV27diorK9PLL7+s5cuX64MPPjC7aZaQnJxca+1jYmKi0tPTI2ZNpCc33nijRo4cqfbt22v79u264447FBUVpby8PLObBouJ5P48UvvqSO6DI7l/jfS+M5L7xeuvv179+vXTfffdp3POOUdffvmlnn76aT399NNmN61uZpd/DyVz5swx2rVrZ8TExBgnnnii8fnnn5vdJMv4+OOPDUm1/uXn55vdNEtw995IMp577jmzm2YJ48aNM9q3b2/ExMQYLVq0MAYPHmx8+OGHZjfL0iJpWxdvnHvuuUbr1q2NmJgY44gjjjDOPfdco7Cw0OxmwaIitT+P1L46kvtg+ldXkdR3Rnq/+NZbbxnHHHOMERsbaxx11FHG008/bXaT6mUzDMMI5iAAAAAAAAA4iDXlAAAAAACYhKAcAAAAAACTEJQDAAAAAGASgnIAAAAAAExCUA4AAAAAgEkIygEAAAAAMAlBOQAAAAAAJiEoBwAAAADAJATlQAAsX75cNptNxcXFZjfFVJHyPgwaNEjXXXed2c0AAARRpPRxnkTK+0Bfj0AiKEfYsNls9f6bNm1a0NrSr18/7dixQ6mpqQ1+jC1btri0v3nz5ho4cKA++eQTP7Y0sj3//PNKS0szuxkAAC/R18NX9PUIBQTlCBs7duxw/ps9e7ZSUlJcbrvxxht9erz9+/fXus1ut3t135iYGLVq1Uo2m82n53Rn6dKl2rFjh1auXKmsrCyNGDFCO3fubPTjAgAQaujrAYQjgnKEjVatWjn/paamymazudz2yiuvqFu3boqLi9NRRx2lxx9/3Hlfx0j1q6++qoEDByouLk7z5s3T2LFjdeaZZ+ree+9VVlaWunbtKkl66aWX1Lt3byUnJ6tVq1Y6//zztWvXLufjHZ7K5Ril/eCDD9StWzclJSXp73//u3bs2OHxdaWnp6tVq1Y65phjdMstt6i0tFRffPGFy+MeavHixbUuEO655x5lZmYqOTlZl112maZMmaJevXo5jx84cEATJ05UWlqa0tPTNXnyZOXn5+vMM890nlNTU6Pp06erY8eOio+PV8+ePfX666+7PM+7776rI488UvHx8TrllFO0ZcsWl+Pevg///ve/6/ys7Ha7JkyYoNatWysuLk7t27fX9OnTJUmGYWjatGlq166dYmNjlZWVpYkTJ3p8jx2mTZumXr166aWXXlKHDh2Umpqq8847T2VlZc5z9u7dq4svvlhJSUlq3bq1HnzwwVqPU1VVpRtvvFFHHHGEEhMT1adPHy1fvlyStG/fPh199NG64oornOdv2rRJycnJevbZZ71uKwBEIvr6g+jr6esRZgwgDD333HNGamqq8+e5c+carVu3NhYsWGD88ssvxoIFC4zmzZsbzz//vGEYhrF582ZDktGhQwfnOdu3bzfy8/ONpKQk46KLLjLWr19vrF+/3jAMw/jPf/5jvPvuu8amTZuM1atXG3379jWGDRvmfL6PP/7YkGTs2bPH2Z7o6GhjyJAhxpo1a4yvv/7a6Natm3H++efX+RocbSooKDAMwzAqKiqMG2+80ZBkvPfee25fp2EYxqJFi4xD/7Tnzp1rxMXFGc8++6zx008/GXfeeaeRkpJi9OzZ03nOPffcYzRv3txYuHCh8cMPPxhXXXWVkZKSYpxxxhku5xx11FHG+++/b2zatMl47rnnjNjYWGP58uWGYRjGtm3bjNjYWGPSpEnGjz/+aMydO9do2bKlz++Dp8/qgQceMNq2bWusXLnS2LJli/HJJ58YL7/8smEYhvHaa68ZKSkpxrvvvmts3brV+OKLL4ynn366zvf48PfvjjvuMJKSkoyzzjrL+O6774yVK1carVq1Mm655RbnOVdffbXRrl07Y+nSpca6deuMESNGGMnJyca1117rPOeyyy4z+vXrZ6xcudIoLCw0HnjgASM2Ntb4+eefDcMwjIKCAiMmJsZYvHixceDAAeOkk04yRo0aVWc7AQC10dfT19PXI1wQlCMsHf4F3LlzZ+eXucPdd99t9O3b1zCMvzrF2bNnu5yTn59vtGzZ0qiqqqr3+dasWWNIMsrKygzDcN9RSzIKCwud93nssceMli1b1vmYjjbFx8cbiYmJhs1mMyQZxx9/vGG3292+TsOo3VH36dPHGD9+vMs5/fv3d+moW7ZsaTzwwAPOnw8cOGC0a9fO2VHv27fPSEhIMD777DOXx7n00kuNvLw8wzAM4+abbza6d+/ucnzy5Mk+vw+ePqtrrrnGOPXUU42amppa79mDDz5oHHnkkc73xxN3HXVCQoJRWlrqvO2mm24y+vTpYxiGYZSVlRkxMTHGf//7X+fx3bt3G/Hx8c6OeuvWrUZUVJTxv//9z+W5Bg8ebNx8883On++//34jIyPDmDBhgtG6dWujqKjIqzYDAA6ir6ev9wZ9PUIB6esIe3v37tWmTZt06aWXKikpyfnvnnvu0aZNm1zO7d27d637H3vssYqJiXG57euvv9bIkSPVrl07JScna+DAgZKkbdu21dmOhIQEde7c2flz69atXdLg6vLqq6+qoKBACxYsUJcuXfT8888rOjra4/0cfvrpJ5144okutx36c0lJiXbu3OlyW1RUlI4//njnz4WFhaqoqNBpp53m8h6++OKLzvfwhx9+UJ8+fVyep2/fvrXaU9/74M1nNXbsWK1du1Zdu3bVxIkT9eGHHzofa8yYMaqsrFSnTp10+eWXa9GiRTpw4IDX75UkdejQQcnJyW7bt2nTJtntdpfX2bx5c2eqoyR99913qq6u1pFHHunyGlasWOHy+3bDDTfoyCOP1KOPPqpnn31W6enpPrUTAPAX+nr6el/Q18NqmprdACDQysvLJUnPPPNMrY4kKirK5efExMRa9z/8tr1792ro0KEaOnSo5s2bpxYtWmjbtm0aOnRovcVhDu9cbTabDMPw2P62bdsqOztb2dnZOnDggEaNGqX169crNjZWTZo0qfUY7orWNJbjPXznnXd0xBFHuByLjY316bHqex+8+ayOO+44bd68We+9956WLl2qc845R0OGDNHrr7+utm3b6qefftLSpUu1ZMkS/fOf/9QDDzygFStWeH1x4659NTU1Xr++8vJyRUVF6euvv671+5WUlOT8/127dunnn39WVFSUNm7cqL///e9ePwcAwBV9fePR19PXwzzMlCPstWzZUllZWfrll1/UpUsXl38dO3b0+fF+/PFH7d69WzNmzNCAAQN01FFHeTUK7g9nn322mjZt6iyG0qJFC5WVlWnv3r3Oc9auXetyn65du2rNmjUutx36c2pqqlq2bOlyW3V1tb755hvnz927d1dsbKy2bdtW6z1s27atJKlbt2768ssvXZ7n888/9+n1eftZpaSk6Nxzz9UzzzyjV199VQsWLNCff/4pSYqPj9fIkSP1yCOPaPny5Vq9erW+++47n9pRl86dOys6OtpZfEeS9uzZo59//tn5c05Ojqqrq7Vr165ar6FVq1bO88aNG6djjz1WL7zwgiZPnqwffvjBL20EgEhEX09fT1+PUMZMOSLCnXfeqYkTJyo1NVV///vfVVVVpa+++kp79uzRpEmTfHqsdu3aKSYmRnPmzNFVV12l9evX6+677w5Qy13ZbDZNnDhR06ZN05VXXqk+ffooISFBt9xyiyZOnKgvvvhCzz//vMt9rrnmGl1++eXq3bu3+vXrp1dffVXr1q1Tp06dXM6ZPn26unTpoqOOOkpz5szRnj17nJVdk5OTdeONN+r6669XTU2NTj75ZJWUlGjVqlVKSUlRfn6+rrrqKj344IO66aabdNlll+nrr7+u1RZvePqsZs2apdatWysnJ0dNmjTRa6+9platWiktLU3PP/+8qqurne/L3LlzFR8fr/bt2zfmbXdKSkrSpZdeqptuuknp6enKzMzUrbfeqiZN/hrfPPLII3XBBRfo4osv1oMPPqicnBz98ccf+uijj9SjRw8NHz5cjz32mFavXq1169apbdu2euedd3TBBRfo888/r5U+CQDwDn09fb0/0NfDFGYuaAcCxV1RlHnz5hm9evUyYmJijGbNmhm5ubnGwoULDcOoXf3UIT8/36UqqcPLL79sdOjQwYiNjTX69u1rvPnmmy73d1f8xVORlsPV1aa9e/cazZo1M2bOnOl8nC5duhjx8fHGiBEjjKeffrrW4951111GRkaGkZSUZIwbN86YOHGicdJJJzmP79+/35gwYYKRkpJiNGvWzJg8ebIxZswY47zzznOeU1NTY8yePdvo2rWrER0dbbRo0cIYOnSosWLFCuc5b731ltGlSxcjNjbWGDBggPHss8826H2o77N6+umnjV69ehmJiYlGSkqKMXjwYOObb75xPlafPn2MlJQUIzEx0TjppJOMpUuX1vkeuyv+cmhRHMMwjIceesho37698+eysjLjwgsvNBISEoyWLVsa999/vzFw4ECXiqx2u92YOnWq0aFDByM6Otpo3bq1MWrUKGPdunXGDz/8YMTHx7sUuNmzZ4/Rtm1b41//+ledbQUAuKKvp6+nr0e4sBmGFwtdAISV0047Ta1atdJLL73k9nhNTY26deumc845J2gzAwAAwH/o64HQQfo6EOYqKir05JNPaujQoYqKitL8+fOdxVEctm7dqg8//FADBw5UVVWVHn30UW3evFnnn3++iS0HAADeoK8HQhtBORDmbDab3n33Xd17773at2+funbtqgULFmjIkCHOc5o0aaLnn39eN954owzD0DHHHKOlS5eqW7duJrYcAAB4g74eCG2krwMAAAAAYBK2RAMAAAAAwCQE5QAAAAAAmISgHAAAAAAAkxCUAwAAAABgEoJyAAAAAABMQlAOAAAAAIBJCMoBAAAAADAJQTkAAAAAACb5f5jQSFcnTFS+AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(12, 6), sharey=True)\n", + "african_nations = df[df[\"cont_africa\"] == 1]\n", + "non_african_nations = df[df[\"cont_africa\"] == 0]\n", + "sns.scatterplot(x=non_african_nations[\"rugged\"], \n", + " y=non_african_nations[\"rgdppc_2000\"], \n", + " ax=ax[0])\n", + "ax[0].set(xlabel=\"Terrain Ruggedness Index\",\n", + " ylabel=\"log GDP (2000)\",\n", + " title=\"Non African Nations\")\n", + "sns.scatterplot(x=african_nations[\"rugged\"], \n", + " y=african_nations[\"rgdppc_2000\"], \n", + " ax=ax[1])\n", + "ax[1].set(xlabel=\"Terrain Ruggedness Index\",\n", + " ylabel=\"log GDP (2000)\",\n", + " title=\"African Nations\");" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wXOWkF1DqHwo" + }, + "source": [ + "## Models in Pyro" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wXOWkF1DqHwo" + }, + "source": [ + "Probabilistic models in Pyro are specified as Python functions `model(*args, **kwargs)` that generate observed data from latent variables using [special primitive functions](https://docs.pyro.ai/en/stable/primitives.html) whose behavior can be changed by Pyro's internals depending on the high-level computation being performed.\n", + "\n", + "Specifically, the different mathematical pieces of `model()` are encoded via the mapping:\n", + "\n", + "1. latent random variables $z$ $\\Longleftrightarrow$ [pyro.sample](https://docs.pyro.ai/en/stable/primitives.html#pyro.primitives.sample)\n", + "2. observed random variables $x$ $\\Longleftrightarrow$ [pyro.sample](https://docs.pyro.ai/en/stable/primitives.html#pyro.primitives.sample) with the `obs` keyword argument\n", + "3. learnable parameters $\\theta$ $\\Longleftrightarrow$ [pyro.param](https://docs.pyro.ai/en/stable/primitives.html#pyro.primitives.param)\n", + "4. plates $\\Longleftrightarrow$ [pyro.plate](https://docs.pyro.ai/en/stable/primitives.html#pyro.primitives.plate) context managers\n", + "\n", + "We examine each of these components in detail below in the context of a first Pyro model for linear regression." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Example model: Maximum-likelihood linear regression\n", + "\n", + "If we write out the formula for our linear regression predictor $\\beta X + \\alpha$ as a Python expression, we get the following:\n", + "\n", + "```py\n", + "mean = a + b_a * is_cont_africa + b_r * ruggedness + b_ar * is_cont_africa * ruggedness\n", + "```\n", + "\n", + "To build this up into a full probabilistic model for our dataset, we need to make the regression coefficients $\\alpha$ and $\\beta$ learnable parameters and add observation noise around the predicted mean. We can express this using the Pyro primitives introduced above and visualize the resulting model using [pyro.render_model()](https://docs.pyro.ai/en/latest/infer.util.html?highlight=render_model#pyro.infer.inspect.render_model):" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "cluster_data\n", + "\n", + "data\n", + "\n", + "\n", + "\n", + "obs\n", + "\n", + "obs\n", + "\n", + "\n", + "\n", + "distribution_description_node\n", + "obs ~ Normal\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pyro.distributions as dist\n", + "import pyro.distributions.constraints as constraints\n", + "\n", + "def simple_model(is_cont_africa, ruggedness, log_gdp=None):\n", + " a = pyro.param(\"a\", lambda: torch.randn(()))\n", + " b_a = pyro.param(\"bA\", lambda: torch.randn(()))\n", + " b_r = pyro.param(\"bR\", lambda: torch.randn(()))\n", + " b_ar = pyro.param(\"bAR\", lambda: torch.randn(()))\n", + " sigma = pyro.param(\"sigma\", lambda: torch.ones(()), constraint=constraints.positive)\n", + " \n", + " mean = a + b_a * is_cont_africa + b_r * ruggedness + b_ar * is_cont_africa * ruggedness\n", + " \n", + " with pyro.plate(\"data\", len(ruggedness)):\n", + " return pyro.sample(\"obs\", dist.Normal(mean, sigma), obs=log_gdp)\n", + "\n", + "pyro.render_model(simple_model, model_args=(is_cont_africa, ruggedness, log_gdp), render_distributions=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The above plot does not show the model parameters `a`, `b_a`, `b_r`, `b_ar`, and `sigma`. We can set `render_params=True` to render the model parameters." + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "cluster_data\n", + "\n", + "data\n", + "\n", + "\n", + "\n", + "sigma\n", + "\n", + "sigma\n", + "\n", + "\n", + "\n", + "obs\n", + "\n", + "obs\n", + "\n", + "\n", + "\n", + "sigma->obs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "bA\n", + "\n", + "bA\n", + "\n", + "\n", + "\n", + "bA->obs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "bAR\n", + "\n", + "bAR\n", + "\n", + "\n", + "\n", + "bAR->obs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "a\n", + "\n", + "a\n", + "\n", + "\n", + "\n", + "a->obs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "bR\n", + "\n", + "bR\n", + "\n", + "\n", + "\n", + "bR->obs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "distribution_description_node\n", + "obs ~ Normal\n", + "a ∈ Real()\n", + "bA ∈ Real()\n", + "bR ∈ Real()\n", + "bAR ∈ Real()\n", + "sigma ∈ GreaterThan(lower_bound=0.0)\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pyro.render_model(simple_model, model_args=(is_cont_africa, ruggedness, log_gdp), render_distributions=True, render_params=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The argument `render_distributions = True` will show constraints on the parameters. For example, `sigma` is a standard deviation that should be non-negative. Thus, its constraint is shown as \"sigma $\\in$ GreaterThan(lower_bound=0.0)\"." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "E_25lUOhqHwq" + }, + "source": [ + "Learning the parameters of `simple_model` would constitute **maximum likelihood estimation** and produce point estimates of the regression coefficients. However, in this example our data visualization suggests we should not be too confident in any single value for the regression coefficients. By contrast, a fully Bayesian approach would produce uncertainty estimates over different possible parameter values as well as the model's predictions.\n", + "\n", + "Before making a Bayesian version of our linear model, let's pause and take a closer look at this first piece of Pyro code." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wXOWkF1DqHwo" + }, + "source": [ + "### Background: the `pyro.sample` primitive\n", + "\n", + "Probabilistic programs in Pyro are built up around samples from primitive probability distributions, marked by `pyro.sample`:\n", + "```python\n", + "def sample(\n", + " name: str,\n", + " fn: pyro.distributions.Distribution,\n", + " *,\n", + " obs: typing.Optional[torch.Tensor] = None,\n", + " infer: typing.Optional[dict] = None\n", + ") -> torch.Tensor:\n", + " ...\n", + "```\n", + "\n", + "In our model `simple_model` above, the line\n", + "```python\n", + "return pyro.sample(\"obs\", dist.Normal(mean, sigma), obs=log_gdp)\n", + "```\n", + "can represent either a latent variable or an observed variable depending on whether `simple_model` is given a `log_gdp` value. When `log_gdp` is not provided and `\"obs\"` is latent, it is equivalent (ignoring the `pyro.plate` context for now by assuming `len(ruggedness) == 1`) to calling the distribution's underlying `.sample` method:\n", + "```python\n", + "return dist.Normal(mean, sigma).sample()\n", + "```\n", + "This interpretation is behind occasional references to Pyro programs as ***stochastic functions***, a rather obscure term used in some of Pyro's older documentation.\n", + "\n", + "When `simple_model` is given a `log_gdp` argument and `\"obs\"` is observed, the `pyro.sample` statement\n", + "```python\n", + "return pyro.sample(\"obs\", dist.Normal(mean, sigma), obs=log_gdp)\n", + "```\n", + "will always return `log_gdp`:\n", + "```python\n", + "return log_gdp\n", + "```\n", + "However, note that **when any sample statement is observed, the cumulative effect of *every other sample statement in a model* changes** following Bayes' rule; it is the job of Pyro's [inference algorithms](https://docs.pyro.ai/en/stable/inference.html) to \"run the program backwards\" and assign mathematically consistent values to all `pyro.sample` statements in a model." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wXOWkF1DqHwo" + }, + "source": [ + "A reasonable question to ask at this point is why `pyro.sample` and other primitives must have names. Names are leveraged by users and by Pyro's internals to separate specifications of model, observations and inference algorithms, a key selling point of probabilistic programming languages. \n", + "To see an example of this, we can look at the higher-order primitive [pyro.condition](https://docs.pyro.ai/en/stable/poutine.html#pyro.poutine.handlers.condition) which addresses the problem of writing many queries against a single Pyro model:\n", + "```python\n", + "def condition(\n", + " model: Callable[..., T],\n", + " data: Dict[str, torch.Tensor]\n", + ") -> Callable[..., T]:\n", + " ...\n", + "```\n", + "`pyro.condition` takes a model and a (possibly empty) dictionary mapping names to observed values and passes each observation to the `pyro.sample` statement indicated by its name. In the context of our example `simple_model`, we could remove `log_gdp` as an argument and replace it with a simpler interface\n", + "```python\n", + "def simpler_model(is_cont_africa, ruggedness): ...\n", + "\n", + "conditioned_model = pyro.condition(simpler_model, data={\"obs\": log_gdp})\n", + "```\n", + "where `conditioned_model` is equivalent to\n", + "```python\n", + "conditioned_model = functools.partial(simple_model, log_gdp=log_gdp)\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wXOWkF1DqHwo" + }, + "source": [ + "### Background: the `pyro.param` primitive\n", + "\n", + "The next primitive used in our model, [pyro.param](https://docs.pyro.ai/en/stable/primitives.html#pyro.primitives.param), is a frontend for reading from and writing to Pyro's [key-value parameter store](https://docs.pyro.ai/en/stable/parameters.html#pyro.params.param_store.ParamStoreDict):\n", + "```python\n", + "def param(\n", + " name: str,\n", + " init_tensor: Optional[Union[torch.Tensor, Callable[..., torch.Tensor]]] = None,\n", + " *,\n", + " constraint: torch.distributions.constraints.Constraint = constraints.real\n", + ") -> torch.Tensor:\n", + " ...\n", + "```\n", + "\n", + "Like `pyro.sample`, `pyro.param` is always called with a name as its first argument. The first time `pyro.param` is called with a particular name, it stores the initial value specified by the second argument `init_tensor` in the parameter store and then returns that value. After that, when it is called with that name, it returns the value from the parameter store regardless of any other arguments. After a parameter has been initialized, it is no longer necessary to specify `init_tensor` to retrieve its value (e.g. `pyro.param(\"a\")`).\n", + "\n", + "The second argument, `init_tensor`, can be either a `torch.Tensor` or a function that takes no arguments and returns a tensor. The second form is useful because it avoids repeatedly constructing initial values that are only used the first time a model is run.\n", + "\n", + "Unlike PyTorch's `torch.nn.Parameter`s, parameters in Pyro can be explicitly constrained to various subsets of $\\mathbb{R}^n$, an important feature because many elementary probability distributions have parameters with restricted domains. For example, the `scale` parameter of a `Normal` distribution must be positive. The optional third argument to `pyro.param`, `constraint`, is a [torch.distributions.constraints.Constraint](https://docs.pyro.ai/en/stable/distributions.html#module-pyro.distributions.constraints) object stored when a parameter is initialized; constraints are reapplied after every update. Pyro ships with a large number of predefined constraints. \n", + "\n", + "`pyro.param` values persist across model calls, unless the parameter store is updated by an optimization algorithm or cleared via [pyro.clear_param_store()](https://docs.pyro.ai/en/stable/primitives.html#pyro.primitives.clear_param_store). Unlike `pyro.sample`, `pyro.param` can be called with the same name multiple times in a model; every call with the same name will return the same value. The global parameter store itself is accessible by calling [pyro.get_param_store()](https://docs.pyro.ai/en/stable/primitives.html#pyro.primitives.get_param_store).\n", + "\n", + "In our model `simple_model` above, the statement \n", + "```python\n", + "a = pyro.param(\"a\", lambda: torch.randn(()))\n", + "```\n", + "is similar conceptually to the code below, but with some additional tracking, serialization and constraint management functionality.\n", + "\n", + "```python\n", + "simple_param_store = {}\n", + "...\n", + "def simple_model():\n", + " a_init = lambda: torch.randn(())\n", + " a = simple_param_store[\"a\"] if \"a\" in simple_param_store else a_init()\n", + " ...\n", + "```\n", + "While this introductory tutorial uses `pyro.param` for parameter management, Pyro is also compatible with PyTorch's familiar `torch.nn.Module` API via [pyro.nn.PyroModule](https://docs.pyro.ai/en/stable/nn.html#module-pyro.nn.module)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Background: the `pyro.plate` primitive\n", + "\n", + "[pyro.plate](https://docs.pyro.ai/en/stable/primitives.html#pyro.primitives.plate) is Pyro's formal encoding of [plate notation](https://en.wikipedia.org/wiki/Plate_notation), widely used in probabilistic machine learning to simplify visualization and analysis of models with lots of conditionally [independent and identically distributed](https://en.wikipedia.org/wiki/Independent_and_identically_distributed_random_variables) random variables.\n", + "```python\n", + "def plate(\n", + " name: str,\n", + " size: int,\n", + " *,\n", + " dim: Optional[int] = None,\n", + " **other_kwargs\n", + ") -> contextlib.AbstractContextManager:\n", + " ...\n", + "```\n", + "\n", + "Conceptually, `pyro.plate` statements are equivalent to a `for`-loop. In `simple_model`, we could replace the lines\n", + "```python\n", + "with pyro.plate(\"data\", len(ruggedness)):\n", + " return pyro.sample(\"obs\", dist.Normal(mean, sigma), obs=log_gdp)\n", + "```\n", + "with a Python `for`-loop\n", + "```python\n", + "result = torch.empty_like(ruggedness)\n", + "for i in range(len(ruggedness)):\n", + " result[i] = pyro.sample(f\"obs_{i}\", dist.Normal(mean, sigma), obs=log_gdp[i] if log_gdp is not None else None)\n", + "return result\n", + "```\n", + "When the number of repeated variables (`len(ruggedness)` in this case) is large, using a Python loop would be quite slow. Since each iteration in the loop is independent of the others, `pyro.plate` uses PyTorch's [array broadcasting](https://numpy.org/doc/stable/user/basics.broadcasting.html) to perform the iterations in parallel in a single vectorized operation, as in this equivalent vectorized code:\n", + "```python\n", + "mean = mean.unsqueeze(-1).expand((len(ruggedness),))\n", + "sigma = sigma.unsqueeze(-1).expand((len(ruggedness),))\n", + "return pyro.sample(\"obs\", dist.Normal(mean, sigma), obs=log_gdp)\n", + "```\n", + "\n", + "Practically speaking, when writing Pyro programs `pyro.plate` is most useful as a tool for vectorization. However, as described in [part 2 of the SVI tutorial](http://pyro.ai/examples/svi_part_ii.html), it is also useful for managing [data subsampling](https://docs.pyro.ai/en/stable/primitives.html#pyro.primitives.subsample) and as a signal to inference algorithms that certain variables are independent." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "E_25lUOhqHwq" + }, + "source": [ + "### Example: from maximum-likelihood regression to Bayesian regression\n", + "\n", + "In order to make our linear regression model Bayesian, we need to specify *prior distributions* on the parameters $\\alpha \\in \\mathbb{R}$ and $\\beta \\in \\mathbb{R}^3$ (expanded here into scalars `b_a`, `b_r`, and `b_ar`). These are probability distributions that represent our beliefs prior to observing any data about reasonable values for $\\alpha$ and $\\beta$. We will also add a random scale parameter $\\sigma$ that controls the observation noise.\n", + "\n", + "Expressing this Bayesian model for linear regression in Pyro is very intuitive: we simply replace each of the `pyro.param` statements with `pyro.sample` statements equipped with [Pyro Distribution objects](https://docs.pyro.ai/en/stable/distributions.html) describing prior beliefs about each parameter.\n", + "\n", + "For the constant term $\\alpha$, we use a Normal prior with a large standard deviation to indicate our relative lack of prior knowledge about baseline GDP. For the other regression coefficients, we use standard Normal priors (centered at 0) to represent our lack of a priori knowledge of whether the relationship between covariates and GDP is positive or negative. For the observation noise $\\sigma$, we use a flat prior bounded below by 0 because this value must be positive to be a valid standard deviation." + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "id": "qz-KFOreqHwq" + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "cluster_data\n", + "\n", + "data\n", + "\n", + "\n", + "\n", + "a\n", + "\n", + "a\n", + "\n", + "\n", + "\n", + "obs\n", + "\n", + "obs\n", + "\n", + "\n", + "\n", + "a->obs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "bA\n", + "\n", + "bA\n", + "\n", + "\n", + "\n", + "bA->obs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "bR\n", + "\n", + "bR\n", + "\n", + "\n", + "\n", + "bR->obs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "bAR\n", + "\n", + "bAR\n", + "\n", + "\n", + "\n", + "bAR->obs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sigma\n", + "\n", + "sigma\n", + "\n", + "\n", + "\n", + "sigma->obs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "distribution_description_node\n", + "a ~ Normal\n", + "bA ~ Normal\n", + "bR ~ Normal\n", + "bAR ~ Normal\n", + "sigma ~ Uniform\n", + "obs ~ Normal\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def model(is_cont_africa, ruggedness, log_gdp=None):\n", + " a = pyro.sample(\"a\", dist.Normal(0., 10.))\n", + " b_a = pyro.sample(\"bA\", dist.Normal(0., 1.))\n", + " b_r = pyro.sample(\"bR\", dist.Normal(0., 1.))\n", + " b_ar = pyro.sample(\"bAR\", dist.Normal(0., 1.))\n", + " sigma = pyro.sample(\"sigma\", dist.Uniform(0., 10.))\n", + " \n", + " mean = a + b_a * is_cont_africa + b_r * ruggedness + b_ar * is_cont_africa * ruggedness\n", + " \n", + " with pyro.plate(\"data\", len(ruggedness)):\n", + " return pyro.sample(\"obs\", dist.Normal(mean, sigma), obs=log_gdp)\n", + "\n", + "pyro.render_model(model, model_args=(is_cont_africa, ruggedness, log_gdp), render_distributions=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "PBKAeDaoqHwo" + }, + "source": [ + "## Inference in Pyro\n", + "\n", + "### Background: variational inference\n", + "\n", + "Each of the computations from the introduction (the posterior distribution, the marginal likelihood and the posterior predictive distribution) requires performing integrals that are often impossible or computationally intractable.\n", + "\n", + "While Pyro includes support for many different exact and approximate inference algorithms, the best-supported is variational inference, which offers a unified scheme for finding $\\theta_{\\rm{max}}$ and computing a tractable approximation $q_{\\phi}({\\bf z})$ to the true, unknown posterior $p_{\\theta_{\\rm{max}}}({\\bf z} | {\\bf x})$ by converting the intractable integrals into optimization of a functional of $p$ and $q$. The figure below depicts this process conceptually, while a more comprehensive mathematical introduction is available in the [SVI tutorials](http://pyro.ai/examples/svi_part_i.html).\n", + "\n", + "Most probability distributions (the light ellipse in the figure below), especially those corresponding to Bayesian posterior distributions, are too complex to represent directly, so we must define a smaller subspace, indexed by real-valued parameters $\\phi$, of distributions $q_{\\phi}({\\bf z})$ that are by construction guaranteed to be easy to sample from (the dark circle in the figure below) but may not include the true posterior distribution $p_{\\theta}({\\bf z} | {\\bf x})$ (the red star in the figure below).\n", + "\n", + "Variational inference approximates the true posterior by searching the space of variational distributions to find one that is most similar to the true posterior (the yellow star in the figure below) according to some measure of distance or divergence (the black arrow in the figure below)." + ] + }, + { + "attachments": { + "Screen%20Shot%202021-12-10%20at%203.13.09%20PM.png": { + "image/png": "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ICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4xMzcwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjIyNDY8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpVc2VyQ29tbWVudD5TY3JlZW5zaG90PC9leGlmOlVzZXJDb21tZW50PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4K3g2h9wAAABxpRE9UAAAAAgAAAAAAAAKtAAAAKAAAAq0AAAKtAAGuBrQMl1kAAEAASURBVHgB7N3pkxRnei/sZN9pNrFvg9hXAQKhYdFgIaHxiDAa2zMnTkgR45A/nfP/OHwiZuJ8kB2OkcKWNIv1atdIIIEWEDuInRY0DWKnoReWoyf9VrobKquy6bUqr4yoqOp87szK58oWgu5f3U+f+z9ukY0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAlQn0EYypsjtqOgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABArGAYIxvBAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgaoUEIypyttqUgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoIxvgcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqUkAwpipvq0kRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgIxvgeIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqEoBwZiqvK0mRYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgIBjje4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKAqBQRjqvK2mhQBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIBgjO8BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBqhQQjKnK22pSBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECgjG+BwgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKpSQDCmKm+rSREgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECAjG+B4gQIAAAQIECBAgQIAAAQIEuk3g7t270e3bt+PHrVu3ktctLS1RGLt37178HF4XHpW+7/79+1Hfvn2jfv36tXlk2ZelJpz3wboHvy5WU2xfpuN+nEvfVnMZOHBgNGTIkGjo0KHxc+F1t31TeSMCBAgQIECAAAECBAgQIECAQAkBwZgSOIYIECBAgAABAgQIECBAgEBeBe7cuZOEVloHWIq9LrYvhF+K7W9qasorae7mXQjIhOcsrx8M1qQd16dPn9xZmjABAgQIECBAgAABAgQIECDw6AKCMY9u50gCBAgQIECAAAECBAgQINDjAiHAUgigFJ7TQimt95erbW5u7vG5uQACxQQGDx78UHeatBBNewI5oVuOjQABAgQIECBAgAABAgQIEKg+AcGY6runZkSAAAECBAgQIECAAAECFSQQlgu6evVqdO3atYceD+4vFmYJSxDZCBDouMCgQYMeCtwMGzYsqqmpafMYNWpUm68L4x2/AmcgQIAAAQIECBAgQIAAAQIEukJAMKYrVJ2TAAECBAgQIECAAAECBHIpcOPGjTbhlgeDLSH88uC+mzdv5tKqqyYdltkJnT8Kj379+hV9Hca7ayxc071796IQggrPhUfrr1u/7q7arroHeT1vscBMuX2ho42NAAECBAgQIECAAAECBAgQ6FoBwZiu9XV2AgQIECBAgAABAgQIEKhAgaampjjg8mCIpdDVpdj+sC8EGvK4hZBJWN4mdNwIz4/yOoRUOiOoEq7Flk3gwQDOo4ZzQteixsbGKPx3E54ffP3g18Xqsl1x9VUNHDgw7j5TLkBT6EoTnkNt+G/FRoAAAQIECBAgQIAAAQIECGQTEIzJ5qSKAAECBAgQIECAAAECBCpQ4P79+w91aCnWteXBfeEX+dW4dUaApVjoJfxy30agIwJZwjMP1jz4dZ4CN8OHD2+znFOWYM2IESM6coscS4AAAQIECBAgQIAAAQIEKlZAMKZib50LJ0CAAAECBAgQIECAQH4FwvJD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AQIECBAgQIAAAQIECBAgQKB3COzcuTMqPMIS2uW22bNnJyGZOXPmlCs3ToAAAQIECBDoFAHBmE5hdBICBAgQIJBvgfDpoA8//DD68McOMd/u2ZMJY/ny5XEYJgRihg4dmukYRQQIECBAgAABAgQIECBAgAABAr1P4Pz580lA5vjx45ku8Gc/+1m06dlno2c3bYpCVxkbAQIECBAgQKCrBARjukrWeQkQIECAQA4EPvnkk/8KxPwYirl9+3bZGU+aNCkJw8yaNatsvQICBAgQIECAAAECBAgQIECAAIHKEvj222+TkExDQ0PZiw8/L9r0Yzjm2R9DMsuWLStbr4AAAQIECBAg0F4BwZj2iqknQIAAAQI5Fzh27FgShjl69GhZjT59+iRhmNAdpl+/fmWPUUCAAAECBAgQIECAAAECBAgQIFDZAleuXEkCMgcPHsw0mdWrVydLLY0dOzbTMYoIECBAgAABAuUEBGPKCRknQIAAAQIEosbGxiQM8/HHH2cSmTlzZhKImTJlSqZjFBEgQIAAAQIECBAgQIAAAQIECFSfwKFDh5KQzOXLl8tOsKamJgnI/PSnPy1br4AAAQIECBAgUEpAMKaUjjECBAgQIJBzgT179iSBmHPnzpXVCOtBh64w4bFy5cqy9QoIECBAgAABAgQIECBAgAABAgTyI3Dr1q0kILN79+5ME1+0aFESkpk+fXqmYxQRIECAAAECBFoLCMa01vCaAAECBAgQiMKndj788MPogw8+iL788stMIvPmzUsCMePGjct0jCICBAgQIECAAAECBAgQIECAAIH8Cpw4cSIJydTV1ZWF6N+/fxKQ2bRpUxSW77YRIECAAAECBLIICMZkUVJDgAABAgRyIPDFF18kgZhr166VnXFoaVvoDrN48eKy9QoIECBAgAABAgQIECBAgAABAgQIPChw7969aMeOHUlI5v79+w+WPPR1WML72WefjUJAZv78+Q+N20GAAAECBAgQaC0gGNNaw2sCBAgQIJAzgdra2mSppP3792ea/dKlS5NAzIgRIzIdo4gAAQIECBAgQIAAAQIECBAgQIBAOYGwlHchJHPq1Kly5fH4unXr4oBMCMoMHz480zGKCBAgQIAAgXwJCMbk636bLQECBAgQiMKnbsJSSYVHS0tLWZXx48cnYZg5c+aUrVdAgAABAgQIECBAgAABAgQI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AQIECBAgQIBA5Qjs3bs3Dshs3749unPnTtkL37RpUxyQ+au/+quytQoIECBAgACBRxMQjHk0N0cRIECAQM4Fjh07lgRisrRJnTt3brxUUlguadiwYTnXM30CBAgQIECAAAECBAgQIECAAAEC1S0QllgvdJGpr68vO9lFixYlXWTGjBlTtl4BAQIECBAgkF1AMCa7lUoCBAgQIBB99tlncSDm//txyaTyiyVF0dNPPx0HYp588kl6BAgQIECAAAECBAgQIECAAAECBAjkTKCpqSkJyBw8eLDs7EPH6cIySwsXLixbr4AAAQIECBAoLyAYU95IBQECBAjkXODu3bvRW2+9Ff35z3+Odu/eXVZj9OjRSXeYmTNnlq1XQIAAAQIECBAgQIAAAQIECBAgQIBA9Qvs2bMnCcncu3ev7ISfffbZaMuWLdEzzzxTtlYBAQIECBAgkC4gGJNuY4QAAQIEci5w+/btOBDz5ptvRkePHi2rMXv27CQQM2LEiLL1CggQIECAAAECBAgQIECAAAECBAgQyJ/A999/nwRkLl68WBYgdKV+6aWXoueee65srQICBAgQIEDgYQHBmIdN7CFAgACBnAtcu3YtCcScPn26rMaaNWviQMyqVavK1iogQIAAAQIECBAgQIAAAQIECBAgQIBAEGhsbEwCMocOHSqLsnLlyjgg84tf/KJsrQICBAgQIEDgvwUEY/7bwisCBAgQyLlA+HRGWDIpdIipq6srqVFTU5N0h5k1a1bJWoMECBAgQIAAAQIECBAgQIAAAQIECBAoJRCWcN+2bVv8KFUXxpYsWRIHZLZu3Rr16dOnXLlxAgQIECCQewHBmNx/CwAgQIAAgbNnz8ZhmBCKuXTpUkmQEIJZv359tHbt2iiEY2wECBAgQIAAAQIECBAgQIAAAQIECBDoLIEzZ85E27dvjz799NPo8uXLJU87b968JCAzaNCgkrUGCRAgQIBAngUEY/J8982dAAECORc4efJkEoi5ceNGSY0FCxZEGzdujJ555pmSdQYJECBAgAABAgQIECBAgAABAgQIECDQUYGw3PvHH38cP86fP1/ydD/5yU+SgMyIESNK1hokQIAAAQJ5FBCMyeNdN2cCBAjkXODIkSNJIKapqamkxrJly+JAzNNPP12yziABAgQIECBAgAABAgQIECBAgAABAgQ6W6CxsTEJyJw+fbrk6adMmZIEZMaOHVuy1iABAgQIEMiTgGBMnu62uRIgQCDnAvv27UsCMffv3y+psXr16jgQs2LFipJ1BgkQIECAAAECBAgQIECAAAECBAgQINDVAuHnmYUOMt99913Jt3vssceirVu3xiGZSZMmlaw1SIAAAQIE8iAgGJOHu2yOBAgQyLnAN998Ewdi/vznP5eVWLduXRyIWbx4cdlaBQQIECBAgAABAgQIECBAgAABAgQIEOhugW3btsUhmf3795d865qamiQgM2PGjJK1BgkQIECAQDULCMZU8901NwIECORc4IsvvogDMe+//35Jib59+8ZhmI0bN0Zz5swpWWuQAAECBAgQIECAAAECBAgQIECAAAECvUHgq6++igMy4YOBpbYhQ4YkARk//ywlZYwAAQIEqlVAMKZa76x5ESBAIMcCf/nLX+JATHgutYV/EIYwTHhMnz69VKkxAgQIECBAgAABAgQIECBAgAABAgQI9EqBPXv2xAGZ8EHBUlu/fv2SgMyiRYtKlRojQIAAAQJVJSAYU1W302QIECCQb4HQGebNN9+Myv0DMLQQLQRiJk6cmG80sydAgAABAgQIECBAgAABAgQIECBAoCoEDh8+HAdkPvnkk7Lz2bJlS/TSSy9Fy5cvL1urgAABAgQIVLqAYEyl30HXT4AAAQLRn//85zgQU65l6Pjx45NAzOjRo8kRIECAAAECBAgQIECAAAECBAgQIECg6gROnDgRhXDMxx9/HDU3N5ec3+bNm+OAzFNPPVWyziABAgQIEKhkAcGYSr57rp0AAQI5Frh//3701ltvxYGYffv2lZSYOnVqEogZNmxYyVqDBAgQIECAAAECBAgQIECAAAECBAgQqAaBs2fPxuGYEJC5efNmySmFDtuhg8z69etL1hkkQIAAAQKVKCAYU4l3zTUTIEAgxwJNTU1JIObIkSMlJR5//PEkENO/f/+StQYJECBAgAABAgQIECBAgAABAgQIECBQjQI//PBDEpC5dOlSySmuXbs2Dsg8++yzJesMEiBAgACBShIQjKmku+VaCRAgkGOBGzduJIGYkydPlpRYuHBhHIjZsGFDyTqDBAgQIECAAAECBAgQIECAAAECBAgQyIvA9evXk4BMXV1dyWmvWrUqDsj8/Oc/L1lnkAABAgQIVIKAYEwl3CXXSIAAgRwLhE8wFJZMCq0/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yIHAJ598EodiDhw4UHS2Q4cMiba+9FL0N3/zN0XH7SRAgAABAgQIECBAgAABAgQIECBAgAABAgQI9HaBy5cvx+GY9957L/VSw7JKISATllmyESBAIG8CgjF5u+PmSyAHAhcvXowDMa+//nrqbJ9++ul42aQZM2ak1hggQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFSKwDfffBMHZI4ePVr0kocNGxaHY37zm98UHbeTAAEC1SogGFOtd9a8CORU4O23345+97vfRbW1tUUFJk6cGAdifvaznxUdt5MAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUKkCd+/ejcMxb775ZnTnzp2i01i9enX06quvRuHZRoAAgTwICMbk4S6bI4EcCBw7dizuEvPuu++mzvaFF16IQzGjRo1KrTFAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKh0gdA15q233oq+/vrr1KmEzjFheaXQScZGgACBahYQjKnmu2tuBHIi8G//9m/RP//zP0fXr18vOuOwXuZLL70ULV++vOi4nQQIECBAgAABAgQIECBAgAABAgQIECBAgACBahR477334oDMpUuXik4v/A7lf/2v/xVt2LCh6LidBAgQqAYBwZhquIvmQCCnAmfOnIn+6Z/+KUrrEjNw4MBo69atcSimb9++OVUybQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCDPAhcuXIiXV/roo49SGf7hH/4hDsj0798/tcYAAQIEKlVAMKZS75zrJpBzgT/84Q9xKKa+vr6oxKpVq+JAzOOPP1503E4CBAgQIECAAAECBAgQIECAAAECBAgQIECAQJ4Edu7cGQdkTp48WXTaofP+//7f/ztauXJl0XE7CRAgUKkCgjGVeudcN4GcCoRWf6FLzH/8x38UFRg3blwciNm0aVPRcTsJECBAgAABAgQIECBAgAABAgQIECBAgAABAnkVaGpqisMxb775ZlGC0IE/LK306quvFh23kwABApUoIBhTiXfNNRPIqcCHH34Yh2JOnDhRVGD9+vXRr371q2j8+PFFx+0kQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCIogMHDkS///3voyNHjhTlWLduXdw9Zv78+UXH7SRAgEAlCQjGVNLdcq0EcirQ2NgYB2Jee+21ogIjR46MAzHPPfdc0XE7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n9J4t+F9M85z1jDQKrTneBh91jIUgXwiQOaCRx991LzxxhuezWB9u3fv3p77dKMioAgoApkQUGJMJnR0nyJQogg8//zzlhRDbsdUYRGva9eu5uCDD07dpb8VgaJD4LXXXjOXX365qF8sAkycOFGkmy+lv/76yxx99NGGxWCJ9OrVyxxzzDES1Uh1WJBYsGCBefPNNw3eA6tXry77/Pnnn21bMPJg7OFvu+22M/Xr17d/O+20k90WaYNzUNm3335rFi5caEj39d1335nvv//e/mG85o/F7D///NPWnDDAcP8GD1Lg8b1q1aqmQYMG9o+IR4UsnBOffPKJ+eijj+wn33mGsUjHOcF+JIFF4tzYZpttzM4772x22WUXs8MOOxQcgYSFWs6Dt956y14Da9asMZwbfHJeJM4BxnvzzTc3//d//1f2ueuuu5q9997bng+FPPZxbDv32g8//NDep/hkPBLXJp+JceG5wbgk/9WsWdOOS7169WJFaKPdnTp1EsF94IEHmosuukikW4pKifODa5f7FNhyD0988j3xLAMfzhOu4cS9O3Efr127ttl9993NjjvumLc0jkqMif8ZzILy4sWLzaJFi+ycYdWqVXaO8Msvv9jGM19iPlCjRg37V716dTsv2HfffcXnlRJj1p4H3N8//fRTize4L1myxF7fzMv4S8xHIEduttlm6/xVqVLF1KpVyzRq1Mhwfeeb1FxMxJhly5aZZ5991o4H37kOGAtIHzyDmQMyJ95jjz3sPXXtiMbnW66IMV988YV1hlq6dGnZ+xTvV7wvcg7y7OG+wLsCf3hpN23a1J6j8UFHW5KMgBJjktGQfWeu/vbbb9u/r776yr5HMS/jfSoxJ0tcD8nzdt6tuHc0bty4IAiPMjS8tcBj9uzZhntG8voL94tff/3VHsR8FUz4Y27BuzbzCd638/1M8+5V+a3F9Bwv3zvdoggUJgJPPPGEefrppz0bz9rDeeedZ+fQngq6URFQBBQBDwSUGOMBim5SBEoZgbvuuss88MADnhBgOOzWrZvZfvvtPffrRkWg2BBwjbDy2GOP2YXDOOPQt29faxjJ1kYMcSeccIL9y6abaT/kleeeey6Tit136KGHmr322iuj3pdffmlefPFF88ILL5iVK1dm1E23E0PEPvvsY6jPxeiTrryoticv1rFox+J1mMKiVcOGDa2R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ioAiEBQBnFF5N/DKCFGjRg1z0UUXGdbJVBQBRSA+CCgxJj5joS0pAQTIFU+UmPHjx3v29uijjzYnnHCC5z7dqAgoAopAUAQw3l1xxRUGLx0XCeKFKSXGEKWldevWLs3Kia6LB1MYBimi+BB1htR6+ZbatWvbEP2bb765uf3220XN8UuCOPbYY204Y0klw4cPN9tuu61ENdY6pLHJtwEtCoDyla/eb99OPPFE880334gOh9Rcr149kW5UStJ7LO3Zf//9Damj/IgSY7xRmzJliiU1EjEjn1KhQgWDgZw0K4TdX7x4sag5SowRwRSpkktKxx122MHcddddkbYvXWVEC/v111/T7bbbi4UYk+gkhk3uwRjo/URlTJQT9HOjjTYyGMJZR9hggw2CFld2vBJjyqBI+yWOxJiePXsa5tn5lldffdVceeWVombw7MJo5CJKjEmPVjETYyZPnmyjdqXv/do9++23n137WLslHt+4V0ufGffee6/hHV0qSoyRIvWvXrE/x93QUG1FQBEIggDrJZBj5syZ41kMa95Ee1RRBBSBeCCgxJh4jIO2ogQQ4AUFUozXA5JIDESJIZSliiKgCCgCuUTg66+/NqeddppTmgcMxyeddJKvZkmNtmeffbY54ogjfNUR5kEQVIisI5FddtnF3HrrrRJVTx2iw5DiauXKlZ77c72xYsWKhnRQjRo1MnvttVfZotubb75pw31K6vdLjOF8kvbb1VNO0u586LiEzc5H+8Kq84ADDhCfP2HVGaSc008/XRypCRIb10ycZMyYMQZyg0SChExXYsy6CP/9998W9yeffHLdHRH+gjDI/Zu/xo0bG+7pCItupAWUiBJjJChFq7Nw4UIzYMAAUaXbbLON+PoXFRhASfKMKzZiTAIuSK9vvfWWmTlzpk2lli+iHM9fyAXrrbdeommBPpUYkx2+OBJjmGPz7pZvefHFF81NN90kagbvgLwLuogSY9KjVczEmJdfftngtCMRUlgMGTJEohqpDlFypSk3H374YaeIYEqM8TeUxfoc94eGHqUIKAJBEHj00UdtJFmvMiBGXnDBBV67dJsioAhEjIASYyIGXKsrTQTmzZtnSTFLliwpB8AWW2xhSTF77rlnuX26QRFQBOKJAB6xa9asMVWqVCkzRMWzpd6tIgLH2LFjvXd6bIU0IV2ASj1cSow59dRTDel18i0uYb8xREJ49CNvv/22TWkSpfEEAxppYHbccUez8847G/LcenkWR0GMIV0VaaskwoImC5uFLi5koMqVK/tOX5ZvnDDMuRo38tlmFxLBoEGDTNOmTfPZ3HJ1s2A+atSoctu9NhC1qE+fPl67sm5TYsxaiH7//Xdr7JsxY8bajTn+VqlSJUN0EO7f3MchaFWrVs2zVpdzWokxnhDmdeOHH34ovk6J8Ca9/nPZKYhihx9+uOEzkxQrMSa5z0SIZR41d+5cwxqAlAScXEaQ74xD3759gxRRdqwSY8qgSPsljsQY3qd4r8q3TJw4MW368NS2+WlzIRBj7r77bjNp0qTU7nr+Jlon72ZhSDETYyAhSqMLxSmqWmJceUa4OAMRBZBnp1SUGCNFKr1eMT3H0/dS9ygCikAuESDd9UMPPeRZRYLInos0qJ4V6kZFQBHwRECJMZ6w6EZFIDwEMAoPHjzY0yNgt912s6SYmjVrhlehlqQIKAKBECAn6LJlyyzxBfJL4o9wt9999539/fPPP9s6+vXrZ9q0aROovnwcDBnjlFNOMVJSxiabbOJEpEnuk5QYc/zxx9s2JR+bj+8uecv9hmcmxQWGSxZdciEsnm233XamVq1a9pPvLAwyjhKJghiDNzxe8RIZOHCgTREi0Y2zzllnneWZc9irzWEujnuVr9vWIgDZxSua31qNtd/w7olbbmgXo0uHDh0MEXL8iBJj1qJGaghSRORCNtxwQ8N7AfftxH28bt269n4ujQKhxBhjr9NC9cZjDtqjRw/R6cX5IjW6igr0qfTjjz+KUreUAjEmFcLPPvvMEmTmz59v3nvvPQOxLteCUZxotEFFiTHZEYwjMYboTb169cre+BxrYNAfMWKEqBbueR07dhTpJpQKgRhz2223GYxjEglz7l/MxJiPPvpITMCPU1S1xDngMp/mmPHjxxvI0VJRYowUKbleIT/H5b1UTUVAEQgbgddff92mVvJK242zyxVXXGEaNGgQdrVaniKgCAgRUGKMEChVUwT8IIAHX7rQnTBEWbCqUKGCn6L1GEVAEcgRAkRGIUSvRML0ypTUF6bO0KFDzYQJE8RFouvnfiUlxhBSmCgi+Rb6CTYSad26tSW4SHQTOr/88ovt5/LlyxObfH9uuummNnpAvXr1ykgwkGGkBJh0FfMCR4onifhNpQRhdPbs2ZIqbKjRuJERRA1PUcK7ES9HiVx66aVm//33l6iqTkAECPNPuH+JxCXlW3JbSe/00ksvJW9K+53QvSeffHLa/Zl2uCzkH3jggWJv3kx1xnHf5MmTDYbQoEIaVe7XLIolSDB84jnGviBy7rnnmkWLFomK0IgxIpgiVVq9erXp0qWLuM5nnnnGM/qbuIAQFFetWmW6deuWtaRSJMYkg0LqjHfeecdGlGE+gIE3W5Sd5ONdvl933XU2zZrLMam6SoxJRaT87zgSY+LyfvrAAw8YabpBnltt27YtD3CGLS7EGKIogUvU4jJHU2KMbHRWrFghdqYhuu/o0aNlBUek9eWXXzpFdGLe6TIvVGJMbgey0J7juUVDS1cEFIFsCJA5gojtH3zwQTnV6tWrG5wAW7RoUW6fblAEFIHcI6DEmNxjrDWUKAL3339/2tCxeMPgxaGiCCgC8UPgnnvuMYR+lgiEBPQLUVyNeyNHjkybtiFT/6XEmEMOOcScf/75mYqKZB/9JCesRDAwY2h2ERfPwdRy8Rbbd999DSmcdt99d7P11lunqoTyG8IKxBWJHHTQQebCCy+UqK6jc8stt5jnn39+nW3pfsSRjJCurZm2u5Du/HjOZqpb96VHYNiwYebpp59Or5C0Jy4p35KaZBdTSNkhkTPPPNO0b99eolpOR4kxxnzxxReW2Eg6RT9C5JcmTZoY0qeSzq5ixYp+isl6jEuqOgyXQSJXuhgm/Rg+kzsL/tIoGH5Jm8n15es70eQgC//111+iJowZM8ZsttlmIt1cKbHoK4lQUerEmFT8v//+e0uYJVIffxhMw5JGjRoZyDFBRIkx2dGLIzGmefPm5vLLL8/e+BxruGADId/VMOTy/MnXu4TL3F+JMbITkoi30uhCpAyGPBoncUmX6CdqrxJjoh3tuD/Ho0VDa1MEFAEvBIisyTv3rFmzyu1ef/31DRGMXVLslStENygCioAvBJQY4ws2PUgRyIzAzTffbB577LFySjzwevbsaTAkqigCikA8EXAJ+4z3zrhx43Jm3MolQqSxIZ2NVDAe16lTR6pepiclxuy1116GxcN8C0aEGTNmiJpx8cUXG6J/SQXjNR4BrkJkGEg4kIdyZUhNbhP9lxpT/EaGuO++++y1k1xvuu9BolykKzMf210MBHGJoJQPnKKu04UMd+ihh5rzzjsv6iZmrO+Uf9Li4T0rEVIAQczwI6VOjCGqwznnnOPp7ZUNTwiNkKogxkQhEOtIxyMRJcZIUIpeh/NFSpII05jqt6fvvvuuKIKeEmMyI8yYM1ckvR/z9D///DPzAVn23nXXXTaVZha1tLuVGJMWmrIdLnM7Uh9uv/32Zce6foEER5SvbEId1JVvgTi/YMECUTOuv/56SxoVKf9PyYUYA2GUuXXUAkHptddeE1Ub5r28mFMpMR8j+o802tYjjzxitthiC9EYRKFElEqiVUqEqIJ33nmnRLVMR4kxZVDk5UvcnuN5AUErVQQUAU8EHn/88bRR21ljkkTf9CxYNyoCioAvBJQY4ws2PUgRSI8ATE+v9CQsBOJJh/eWiiKgCMQXAZdFNnpBiOSGDRvGt0NpWvbtt986RTvxu5grJcaEYSxJ01WnzS4GRVeDAxFxCKHvIpBhTj/99Ei9wV2uAYhBEIRcxYWA1rRpU+tF4VpH3PQxZmDUkEix9FnS13zrECFMGvkLciAkwbiIi9csbYaQRroeP1LqxBjSnpAOzUWqVatm8FJv1qyZy2GBdUnDQzoeiRDhkpROfsXleaERY+QouxhT+/TpY9q1aycvPAea0vMgjLmey/y1kJ+leKFDVMaIKk2Nljq0LVu2NJdccknqZvFvJcZkhyqOxBg/USay99Rdg6gezFMk4icyqfS+Q/1nnHGGOfrooyVNCVXnrLPOMh9//LGoTCXGiGCySp06dTLMSyXC85QoSnERl0iVpNUlva6LKDHGBa3c6sbhOZ7bHmrpioAi4IoAUczSRSg/7bTTDO91KoqAIhANAkqMiQZnraUEEGDSSySAadOmlestRghexoN4CJUrVDcoAopAThCAuOCS0ofJK4szhSY///yzOeaYY8TN9uttJSXG0BDIEhhN8iW//PKLxUTqgTZ+/HhDeiOJ4L0P6cZF8Ibr27evyyGh6BLxzCvqmVfhfo0ur7zyirn66qu9iiy3DS8/zr98CucGC9tbbbWVqVq1qllvvfWcmzNlyhRz6623io7jOsCjxE89ogpUqQwBaaQDDiBKGGmXNtpoo7Lj8/nFhazBuQRx22/bS50Ygzf79OnTxcONYZKUcX6JSOKKUhRJv0MoZmkaniBkKap2MUwqMSZlsDL8dDGcHXbYYTaaUYbicr4LorAkXYUSY/wNBc+pe++91zliVdBnlhJjso9XHIkxtHrs2LGG51C+hKgJRL6SiN95vsu8Ol+pMIl6CZlPIkqMkaD0rw5EZebAEjn++OMN0RXjIv379zfc0yXCGhNrTS6ixBgXtKLTzddzPLoeak2KgCIgRQC7YTpnqw4dOsQiHaa0L6qnCBQyAkqMKeTR07bHBoHly5dbUszrr79erk0NGjSwkWLiFL6zXCN1gyKgCJQh8Ntvvxkmo3/88UfZtkxfatasafC4ZvG5kOSDDz5wIl24kECScXAhxkCU2HvvvZMPj/Q7HrkY7iTCuJOCQirDhw+3i9RSfdKdQLbMx3kFeYPFZon48WSj3G+++caceOKJkiqszlNPPWUqV64s1g9bkef7ZZddZovdcMMNbUjurbfe2hJlIMtsueWWJvE7nSHiiy++MN27dxc3zW+UJnEFqmgRcL3nc33ssssusUAPwxf3FokQvQSPbL9SysQYyO/cr37//XcRfBtssIEZMmSI2W233UT6YSqtWrXKKQwzxvbatWv7boISY3xDl/HAyZMnGwzuEvGTakFSrosOcydJVBMlxriguq4uhHaMwYsXL153R5ZfQchvSozJAu4/u+NKjKFdO+20U/YO5Ejj5ZdfFqfI9Rt98oUXXjCkMJcIz/CTTjpJohqaDmsJRx55pDjljxJj5NDjbS+d08YlXTO9w/mGdSbu5xIhhSfkVxdRYowLWtHq5uM5Hm0PtTZFQBGQIjBv3jwzdOhQ89NPP5U75OCDDxbPb8odrBsUAUVAjIASY8RQqaIi4I0Ai4BEl8DglSqETidSTMWKFVN36W9FQBGIMQLSBf5EF1ioPvDAAxM/C+LzpZdesmmgJI0lwgDpRvyICzEmX958iX7h7YzXs0RIWyANc4nnPh6D3333naRoS4Yh7Q6Ei3zIgAEDzMKFC0VVt2jRoowwIjogSenkk082X331VdKW9F/JxQ7RNF/ikvoJT8DWrVt7NtXFcxQSzXHHHedZjm4MFwFyOr/33nuiQs8880zTvn17kW6ula699lozc+ZMUTWNGzc26PuVUibGEGmHhSuptGnTxvTr10+qHqreggULzIUXXiguE281UoT5FSXG+EUu83EuRErImpCXIWTlQ5jjkKIEkmE2UWJMNoQy7yctzQUXXGA++eSTzIpJeyG37LPPPklb5F+VGJMdq7gSY0jDigE+X/LQQw+Z0aNHi6r3m+Zo6tSp5oYbbhDVceyxx5qePXuKdMNS4jrt3bu3uDglxoihMm+88YY4Tdxmm20mTmUrb4E/zaVLl9oUydKjiTy46667StWtnhJjnOCKXDnq53jkHdQKFQFFQIwAkaRYY8CxJVUaNWpk7rzzzrw6B6a2SX8rAsWGgBJjim1EtT+RIvDaa69Z4otXuPJDDz3UyTM80oZrZYqAIpARAbwrx40bl1EneSdGJSa0hZT2xGXBkugI0hQwybjw3YUYQ7QYaXqd1HrC+O0Slpl830RLkcjKlSudvBQhWdGWfAjPMxbSSR0kkf32289cccUVEtVyOi6pSSDRQCrJlwwePNjMnj1bVD0RpGrVquWpy/lNGimJ7LnnngaM4iAQ4zbffHMbGYfoOHwvJnGJ6NSwYUMxqTCXGOF1iAe01OuUMPKEk/crpUyMwSMdz3SJMA8gCkvUKZQSbcMQyfNdKsxd6tatK1Uvp6fEmHKQhLaha9eu5uuvvxaVd+WVVxoizeVDSDN41llniaouZGLMjz/+aDA48kd6TFIkk04yanE1rJ599tk2vZqfdioxJjtqcSXGQIZi/PIlkLu9HMe82uOXEOISlQbCOsT1KMUlog3t8ouDV58g1hPtLpvkKuJYrq8L5r6QnbzWYb36DIFq991399oV6TaXdMU4VxIZ0pX0qsSY9ENais/x9GjoHkVAEYgDAp999pm1JfCZKryjQ5AM4sSSWqb+VgQUgbUIKDFmLRb6TRFwQoBoC0SK8ZKOHTuql7cXMLpNESgQBMhZ7UpMgBwASaAQhDC+eOctWbJE1NwgXnYuxBjSBhEamZQfUQvkFcgXYJNNMHyOGjXKVKlSJZuq3f/OO++kfV54FRDEu9erPJdtLgYuym3atKkZNGiQSxVlupAt7rnnnrLfmb5ANIFwkg/hnICA8O2332atPptX4tNPP502n3Bq4SyEjhgxIi/XQ3JbiB5EFKFkIYoUBBn+SBXJJxGO+M4LfKFFypszZ47TeQyRZtttt02GJPLvLoQEGnfbbbeZnXfe2Xc7S5kY40KaJHUFBqF8CfdjzmepBE3Z5nIeEo2vbdu20qaV03OJokIIaiJrFLK4ELKCkFSDYuRCJo87MYbnPWSkBAEm+ZMUkMkCEQlCUj4EkuOaNWtEVbMu0aNHD5FuqpISY1IRKf871wSA5BrHjBljiCgpkUqVKlmj+vrrry9RD1XH5b2H+STOKO7VLxsAAEAASURBVK7GfxqMk9rll18uavu+++5rILlHKUQhJRqpVJQYI0XqXz0Imby3SiSfTieJ9vF8IZ2XV2SAhE7yp98UUKVOjNHnePJZpN8VAUWgEBAgkhQEGCLIpArvTpA7cSJVUQQUgXARUGJMuHhqaSWCAIatdAthpAIJsuhbIhBqNxWBWCPACzXe9dI0L3QGz1EWtPws7EUNhkvoadp22WWXGVLm+BEXYgzl5yt9jEuqnPr169uxluLhijeL3ttss420+FD1Hn74YUv6kRYaJMrPRx99ZPBklgrGB4zOUYsXMSRdG7IRhVz7TPQewuHnU6655hqDV65EII1BbqtevbpEPTY6LqQPGh2ELBhWp8855xyzePFiUXFhGMhcMIqDAUIEjFCJuf2XX34p0s4nIQNPWCJrSVLaJDoTlDClxJgEkuF/Tps2zQwZMkRUMHNPPNGjjub1xx9/mC5duohTRcadGAP5BSKsRMAaknQ+xOW5fNhhhxmeF37EJcod6bx41oQpLtEtibBHpL2oJa7EGHBg/PJhSHEh9QWJwucyP+c9HSJoVMJaQrdu3cRRv2hXmMSYTp06GeZt2aRQI8bQL5wrpKmeSTk4cuRIgwNDvsSFyEUbTzvtNMM4ukqpE2P0Oe56xqi+IqAIxAUB5k/z5s0r1xzW2Jj7M6dXUQQUgfAQUGJMeFhqSSWCAAYfmJxe0rdvX9O8eXOvXbpNEVAECgwBFk+43l2E658UO0Q+iav8+eefNsf68uXLRU2sUKGCgTSy8cYbi/RTlVyJMaSfwPs4anEJ+e0alh7DCYQTiXDuTJo0yeTDw5Nw1ETNkXqy0Z8g6X6or3PnzqJQ39TVvn17c+aZZ/I1UmGhGuOvRPDKxjs7ndBnPL0li9WUwfXHfShfC7mcC5AEuW9IJIiBQ1J+LnW4riEuSYTxePzxx/NGhCTULlG/pBKGp3SpEmMwbh155JEGAoBESH/DXz5k8uTJztFqbrrpJtOgQQPfzVVijG/osh7466+/WqLTTz/9lFUXhWzPH1EhjkqzZs1yStcSd2JMAkdSJUmEtGm1a9eWqIaq40Lm9mtcpcHXXXedmTFjhqjtTz31lKlcubJIV6qkxJh1kXKJGMORQebo69Ys/0WKGwia0pSspDcizZEfcUkrxnwa5zaMS1HIokWLDFHSXCRMYgxjIIl0mSvCUBSEMddojzga4HCQL3GJwEUb/TqElDoxBuyYD+lzHCRUFAFFoNAQGDZsmME5wkvOO+88S7r12qfbFAFFwB0BJca4Y6ZHlDACvJywQOMlRFTAIKSiCCgCxYEABmHC3WIUc5FWrVrZtDlRLby5tA1dSBcuHnP0JzWNikudrsQYyr722mtN48aNXaoJpOsS0YWQ3xjEN9lkE3GdRIBhMVsinDdglg9yFf165JFHJM0s09ltt90Mng1+xQUbyAg8g8M2vGRqO5EX8B4nvKlEeJGtU6dORlWILhDvpMLiNoSlfMiNN95oSB0pFVfSmLTcKPRefPFFA0lAKkQRgdiVDyF1AJ6nUoGwuf/++0vVPfVKlRjDPeCoo47yxMRrY76IMYxPr169RIaw5HYHjbKgxJhkNMP/fuedd9o5gaRk0lBCLI7yGemSZow+FAIxxsWgm6+obsw1MPJLJEiqV0K3M0eWCPPcsEm8SoxZF3lXYgxHcw8hKkhU4jKvJyUtka6I5uFHXOYllM+cNqr1OuZd8+fPd+pWmMQY5iKkhcsmvLNwPwlbXO6jflM6skYD8U8a0a9q1aoGMuOmm24adnezlvf+++8bDJrSdSUIl7TVjygx5l9SEWRxiRT7c1yCgeooAopAvBBgvTBdKkbWBV2Jt/HqnbZGEYgPAkqMic9YaEtijsDFF19snnvuuXKt5MUKUkw2Q1i5A3WDIqAIxB4Bl1DQyZ1p166d6dOnT/KmWHzH65NFbmn0BxoddBHRDzFm6623tot0ePflWr777jsbQYfFVYn4SREybtw4pyg4EFRYvItSPvzwQ/uC5XJu0D5SG7H46VdYtOXlTlpvkJQAfto4evTotITY1PJ23XXXtBHlknU55wivLk13gsGASHVRGjZo7wcffGDTL0gXcYlyhBd72IaxZOxy+Z2IIJyLq1evFlVD6pK77ror8vnflClTzK233ipqI0oYyyG8BY1C5WKA8nOfFHcoD4rHHHOMwQteIocffrghgmTUMnjwYDN79mznavFg3meffZyPSxygxJgEErn55NnsMp9s06aN6devX24ak1IqpEnmiC5SCMQY5spESpEIzzuIrn4N+5I6vHRcjO6QpYjG6Edc3oNYxK9Ro4afatIeo8SYdaHxQ4whagzncxQOG9yvSNtFdESJhEH8dnk+t2zZ0lxyySWSpgXSmT59uoF06iphEmOYz0pSQvPOnc7xz7X9yfpREGOoD8Mhc3Gp5GN+yvseEU+/+OILaTNtquEjjjhCrJ+sqMQYYyOd6XM8+azQ74qAIlBoCLCGzFqklxBJe9CgQV67dJsioAg4IKDEGAewVLU0Efj9998NYTffeuutcgCwyARhJmoDZrmG6AZFQBHICQIYSPFEIpy9q2DA79mzp+8URK71ZdPH45NoCNLFSsojvDKLTUEWU/0QY6ibhU6833MtLmHiaQtGAqKkuAihMIcMGSI+JIh3r7iSJEUW7Ij0QUhyV6lXr57N8e56XLI+i8csIkuEcxFyVxQen4Qg5/qXGsQvuOACc/DBB0u6YT14uTakstVWW9lr0SVSkbRsLz1IIng2Qo6RStOmTQv+Bd3V6MQ9EkMGJJkoZOXKlTaFkjS1Cm2ChNWlS5fAzStlYoxLqr0w7omug/XCCy/4jtwV9HmjxBjX0XLXh2jlci8mB/1ee+3lXpHDETwfeT/+/vvvHY4qjIgx9I1IcVJSKOkGSZEYlaxZs8be0yWEYqIPTpw40fcziucb17hEJBHzJOUk6ygxJhkNY6NPEpHFVaKIZMa8ERLfp59+Kmoe86YRI0ZY8q7ogDRKLvdHCMIQuHK5dkeESd7/JWmMUrsUJjFGOm/Bye/JJ59MbUrg31ERY1ijYZ4rdXChY2FEUXQBiMgv48ePFx9C+moIl5UqVRIfk6yoxBhjrz99jiefFfpdEVAEChEBIhrff//9nk0/4IADzG233ea5TzcqAoqADAElxshwUq0SReCbb76xC2Ne3ha77767wQgWtYdYiQ6FdlsRyBsCrmlPkhu6+eabGxbM8eANQi5JLtPPd0LJEkpbusifqCNoigXK8UuMAS88kRs0aJBoTuifroQVvOrxrncViJWkG5AK5AqeL1GJ64JdcrvC8DRctGiRUzjQmjVr2nRgFStWTG5K6N8hM6XL75tamavX+PLlyw2L1i7XJMSTgQMHRnIvgRCXLnxrat/5zfXKMRBFClkwaLDALiVD0deoSHwQ2FjMX7hwoRhiUr9heCJKQ1ApZWLM+eefb9555x0xhBgut9lmG7F+EEU/ZKnk+lwIfcnHJb4rMSaBRO4+33zzTeuIIa1hiy22sIS9MK57rzp5bhGh6NVXX/XanXFbIUSMoQMu6eq4zw4dOtQwN4lCuKcTnU0iQdJxUD6L8U899ZSkKnPllVeaJk2aiHSlSkqMWRcpV/Ju4mjmaBDmcpmmlshEeDdLJazIHcOHDzdjx46VVmtJZczzciVEeHz++ed9FR8mMQaSEhF8JAJpwy8JI135URFjqN/lnog+72wYE6OYp82ZM8feG13e94K+VygxhlHW5/i/KOh/RUARKHQEFixYYB0DISCnyh577GEefvjh1M36WxFQBIQIKDFGCJSqlR4Cn332mTV2ePUcZmbv3r29duk2RUARKDIEfvnlF+sVi/HJr+ywww42hK5rpBG/9SWOg5DBovLixYsTm8Sf++67rzV8iA9Io+iXGENxlStXtgu5O++8c5rS/W+eOXOmjeIi8bilFhaVyYFONABXwaCMN7E0Wg9elBhZatWq5VqVkz7tYTGRhXaXBbvkSqpUqZI2xGeyXrbv5MmFICMVriVISnjV5UJIZ0X6Gal06tTJRpeR6qNH+2fNmuVyiI1IQySXXEYocU3VQwfCMnA4gZEjZbzen376aafSjzzySDsv5D6RCyFCDJE9XMgZtANiZliRDEqZGON6TrRq1coMGDAgF6fCOmV+8skn5uqrrzYQ7fwK0cL8huunTiXG+EXe7TiX1DmUzPwBcmfYkRGYK2DwlEYRSe1loRBj5s+fb4mIqe1P95u0kpDJczUnSdTLNU+EDK/F8YRO8idpbYhg6VdGjRolXnDHO/+kk07yW5XncUqMWRcWv8QYSmG+zntM9erV1y00hF8u40R1zJUggXDdBBXIwi7PW+bPkMyDpBD0ajORSyDFkIrNr4RJjCFl1BtvvCFqShiOMKkVRUmMIToP9x4ifUuFZ9G1115r6tatKz3EWY+1BqKcSu/XVIBTFWSvIBFClRjz71Dpc9z5lNUDFAFFIKYIkIoPAjop2VOFTBYTJkxI3ay/FQFFQICAEmMEIKlK6SHAC3a6hZ2jjz7akA9ZRRFQBEoHAYgl/fv3d1rY8EJn//33N61btzbke8fDNFdCyH0WKfEy9iMVKlSwi6fbbrutn8PXOSYIMYaC8GDD8BcmqYi0PSxUSYkqtOOggw4yF154IV99iWvEAaKSkeaJsN+5EBYRKf/tt98OVDznMWH6gwrPXSIXuBB0WFDHA5Yw4GGKKzGExVW8ql0XMXnBxSjtEp2EfpJGCpJE2P2mbAghRBByGQeMDPSf6EHFIKSpgPxM1EAXgQwBaSnsaxZCCkZxqedvos0sktxzzz2hkahKmRjjGvWLMeD+2qhRo8RwhP6JRzpRmogkFERIFwexz68oMcYvcm7HQYg466yznO7NRDBhrlOtWjW3ytJoM2fC8EtYb79SKMQYnoGkisLAKBXmqcxXw468kKifCLYQAKREfcYd8nMQIi2R47jPSIQofpxvYZAdEvW5EC5yYdxPtCPTZ5QEgCDEGPpANCnmjzhshCUuY5Sos3PnzubUU09N/Az0yX2J8lzSuvHuwvtDWGlZuSYxWH388ceB+hImMQbSB8QMiTBf5N7u+h6Tqeworwva4erQwDH0l3t2LhxweJckKo3L+xRtChrFjzKUGAMKxmKvz/F/sdD/ioAiUPgI8M7PerSXQwyR0IjaF9Y7X+GjpT1QBGQIKDFGhpNqlRACGEz79evn2WNe4Nu2beu5TzcqAopAcSOA8R8jYxjC4jHhrJs1a2bDjjORDSJ4Ir333nvWMwzvMIgxQYSFd4y8YUhQYgxtwMjQq1evwCmpeJkgZze51F1IMXhZEjEAg45fIcw3HmAuwhhAqAk7CgUkFBZMIceEIRhOghheEm3wk7aMxVye2bvsskuiGN+feBpCCnFJIURlQXLV41mKAd1VMHgSZSesRX28T8Dfte+0G8LwGWec4dqFWOtzjbDw4HKfoEMYRglfX6dOnVD6N2/ePPvcWbFihVN53DMwUIZ1flB5KRNjiCyG4Y1UW1IhcgRjEKYBkrp5juH1j9ElDAlqoFRiTBijICvDNVUJpdaoUcM+K/baay9ZJWm0Vq9ebSPFzJ07N42GbHOhEGPojQspJNF70gkyhw7rGZAo99NPP7VRLqSkGI5j3kxKjiDy8ssvWwKBtAzGFwN7WERZF9KFEmNkowQphHkzhP8gwryR92LXCCn169e350iYJGKetVOnTnXqDu+WgwYNMqQh8CuQHkiVc+utt9o5kt9yEseFSYxhnjBp0qRE0Vk/mb/yPhKW407UxBjG4rLLLjNECXERnIG6du1q75VhvMtC0OK+xdzIlRSD4xT3saCixJi1COpzfC0W+k0RUASKAwGedekcpki1mguyZ3Egp71QBMojoMSY8pjolhJGgIcIL9Zeghdw2HmzverRbYqAIhBfBFisgDwXpvznP/8xu+66q53AsqCc/Ec4XUgZGDkxhrEIiXEy8fn1118bco5ixCXlUxgC+Q+De1gSBjEm0RaiqBAWHlKAq5CChIVLonS4CNgPHjw4cMhtDNvdu3c30tRNiTaySIZHfxgeuBCmWKjDoOpq8E+0x+uTlEN4oQYV2oSnnGu6GMaISEzgy/XiRyCUPfDAA87enpDbCMkeRPDG9kNIoc6mTZvafvtNu8X9BNIWxD8/95Add9zRGjg23HDDIBDE8tjRo0fbxW3XxnFPP+qoo0y3bt1sOjjX49EnMgDp1DC4+BEW+fkLU0qZGAOOPD9cySikA4R4AnksqLGJyFLTpk2zUZ2WLl0a2tBy7yQinl9RYoxf5NyPgwSNQTvdYmimEg855BBLlHCNNIZhj3ncgw8+aEjpFlQKiRgD3sw5XaNAYFxNXPeueKfiy9yfdEZECnFJx8FciLkZRt8gQqQi1/TRkP9btGhhiZmk8qIN3L8wGK9atcoQle3MM88UNUuJMevCFDRiTHJppNAjWpif+TtkGIgXzAtcBDIKZJqwiFOJuomQevHFFyd+On1CGuzy/9m7E3A7p3th4EtV1OyaS4qaaqrQak1FUBJjYkrFlChC2gqJJjJIZCKDxJAYQkSTpqrmDoq6SFHDjfGKCqE1tclFKR+qbbjf1/++3zn3rOyc5Az7nLPP3r/1POc57/rvvd93rd/77vH9v2udcELhu3hDH/jxxx+nGLUtPrs35Htl9Lsho0OWMjEmRoCMizoaU+JK80iYimmD4zeI+Dwb7Y7nbCTlRaxbt24NWmVrJ8ZEo+L3kXi9ikTOxpb4HhWPbepIf/FeGZ8R472ysc+LaGvYh1kprvaXGPO/e9/7+P9aWCJAoHIEIpE1RrRdWpk6dWrhc/jSbhMjQCAXkBiTe6hVsUBc3RRXSy+txEmvOHGtECBQ3QLx5TpG2nj00UdbDSJ+lIqTzjF3eUuXGF0ghpZu7gm8uu0sZWJMrDcsIhkgfriL+eGXdUI+ru6Pq13jKsJItmjslVuxvaOOOqownH4sN7fEie6mzP8aiR8xDVevXr0anRQUP95G/++5555Gn9xpaH8nT55csqmuItkrTpg0Zkj0mnbGCA2RqLLXXnulXXfddbnHcYyYEz+mxz6J6dIaW+Kkd1zB39wfMWOkmjjZ+corrzS2CYX7x1W30d9I3o2/5bUnXscWLVqU7r///kLfG/Jj/dIaFif8Iqlnww03XNrN7T4Wrxcx5cATTzzRpL7E8RH7I04QNuR4jGM+EmHiNSsStRpzErRuAzt37pwGDx5cN1SS5WpPjInXpkhSjBPVjS3xnIxEpS5duhRONDXm8S+++GIhoTFORDYleW1522ruFcoSY5YnXNrbY/jsmFKpKa/b8ZoUnyViNLodd9xxmaPRxXtEJIJHMlYpE7HaU2JM7LkYqSVGAWvK63F8lo7X//COqzfDvyElXmMikTk+u8XzPj7HNbbENI2R+NDcEt89IrGvKZ+fl7XtSPaJk+zLKxJjcqFSJsbEmuM7ZnxujmTe5Y2cEskG8XoQnx3jedGUEqNgRpJeS5S4gvrJJ59s8qojISJeHzfeeONC4k6MthU+cezH+39c4BB/8+fPLzw3G/p+HBc27LnnnmnmzJnLbVspE2Pis+vw4cOXu83G3CFG6YzvPQ0pbZEYE+36/e9/X7jIorEXotT0KRL+43tkvHYvb0rpODbitTo+tz/yyCOF71Y162nM/0gejO/SpRphUGJMrl/t7+O5hhoBApUiEMmv8blsaSV+w2ruqJFLW68YgUoTkBhTaXtUf5okEEMe1zdfenxJWd6XoiZt1IMIEGiXAvFDy8UXX1w4YdAuO1BPo2Nqp0gCbO7VpUuuvtSJMXXXHycZ4kek9dZbr/AXc4VHskNckRo/YsZV1U05mVGzjTiZHcNsl2Jo5VhnnPiOKfkaMx1HTVvifyRAxH6KH2032mijwl9cdRlXe8bJi7iaL/6i//EXJ7biBHtjT+TGFb77779/YSSRutuvbzlGVDvooIPqu7nR8UgOGDVqVLNOxMQVy3FsRF/iL07GxYg0cXI/riiMq6Bfe+21Rret5gHxPIkksji5WIoS+ypOvjX12KhpQyRRbbbZZoVjI/ocJ57iStUYgSROqMZfHCPNPclVqpGUatpdrv/jeIkTjGHWnBLHY1yBGwkSNcdkvJe89957hStb44RTjErQ1B/ya9oWU4pNmDBhuUlhNfdvzP9qT4wJq6ZM91bXOF67Yx/F63YklNW8jsd7VxwDdV+/YzkS9l5//fW6q2jQciTgxGMb8hoX7x8xskRTi8SYpso1/XHxHjlmzJhmvV7Ea9Hm/5ryLT4/xQngSDKOz01xHMb7REOOnbo9iOSJGKFgeaW9JcZEf2JE2VmzZi2va8u8Pd4zY7TDmGoppk+Nz6/xvI/34hiJJ/7is0mcwPvTn/7UrH179NFHp9NPP32Z7WnMjX369ClpclRsO0bojVEgl1ckxuRCDU2MiRP7MZpovG83tMRxWfOeFO9Pkfwcn1Hi+0S8H0XydnM+O5Z6RNIl+xWvWZFY35w21l1nfPeL16v4XtnU75Lx/hrJLpHg1pDRW0qZGBPtPv7440vmETZhEq/zDfle3FaJMdHOpkxfHI9bssRrdjwnaj63x3MiRs+J50X8RQJKvGc2p8R7QyQwRfJUqYrEmGLJan8fLxYRIUCgEgRuu+22wqiSS+tLjIJWyu8DS9uGGIH2LiAxpr3vQe1vtkBcwRlXFixZ4gtfDPXa1GkZllyfOgEClSMQP7rFEIV33XVXRXTqm9/8ZmFe7lKOFFMD05jEmDhJ09iTMTXbKfX/GFo7EoVKbRLHTPxYWK4lkoEiWTQSbU4++eQGNTOuho7HlLLEleqRmBqjqZRbiROII/+VMBXHSClLXJUfV3fEFanlXCJBK6ZbiylYqqHESaF4LYhkqnIucTzGFdORCNUSRWJMKrwunnnmmU2+Krgl9kvddca+79evX2FEtRgJM6Z6aEiJk89NndpCYkxDhEt/n7hCPYbRLuW0iE1tZSTSxlSGMR3J8kp7TIyJhMU4cRmJxuVe4vNYjMoRJ1tLVWKayVtuuaVUqyusp6Ej2kiMydkbmhhzzDHHFEaCidHjyuFzdFy1HAlWpTwuc5n/qUViSbwnlUOJUSzjfTi+2zZ0WqNSJsaEQUwF15QRMZflFyPGxMgxyyttmRgTbbv99tvT9OnTS5oYtLw+N/b2+I0hnqOlTIqJNkiMKd4T1f4+XiwiQoBApQhE8m2cu1xaOfbYY9PQoUOXdpMYAQL/EpAY4zCoaoEYynVpWf5x5Vx8mYvhUxUCBAjUJxAfQiNBprmjPNS3/paOx2tcXE0Wfy31eteYxJgYeSR+zCn1D/CNdYxRWSLxodRJMTXtuOaaa9Idd9xRUy2L/5Hs0Lt37xQ/ptf8cB3LDTm248rzG264oeT9iOmvYuSYpkyrVPLG/P8VhlMkH8TQ8y1R4orx6PMLL7zQEqtv9jpjpJxhw4alSKarphLTlsRILDFSQzmWGLEpToDE8dlSRWLM/8j++c9/TvFeFc/VcioxQtaQIUNqp9uLKeJi+r6GlDh2Dj744Ibcteg+EmOKSFotEMNnx8gbpRohoSkNj2lCJk2aVHifrtTEmHCJkfdGjx7drKlamuLbmMfE9KLx2bXU7wMxol0kBJZyStfDDz+8MCXY8vonMSYXakxizGmnnVYYYj8+u7RliWlge/bs2SpNiOdpPAfaOoktnoPxelGTQN9WiTHxO0UkUJayxHeAmHJqeaWtE2Oiff/xH/+Rxo8f36SpB5fXv+beHhdfxve9mGav1EVizNJFq/l9fOkiogQIVIpA/HYY7ylLK/vtt18hUXdpt4kRqHYBiTHVfgRUcf9jHuGllfiBL4anVggQINAQgRheOqZWiiGr21OJ4Z3PO++8tMMOO7RosxubGBMneOMKrxgWsrVLJITEVY3f/e53GzRMdFPbFyex4ofqGBWlHEoMmR4nVJf8cW7QoEHpueeea1ATY5996UtfatB9G3OnmFIgElHKYRSVGGY+RsaJk08tWeLq3ksvvTQ98MADLbmZRq87hhCPH/pjKphqLPG8jeM8rkItlxLJezGyUySxtXSRGPO/wgsWLEjx+vj3v//9f4NtuNStW7fCUMl1pzeIzyQNHclr3333LbwHNKULEmOaola6xzzzzDOFE39tkagV00tEcngkx8aFJpWcGBN7LKZTGTt2bFkmSHbq1Knw/lzq6VBrjtRI5o6k7lKVnXfeuXDcLm99EmNyocYmxsSjf/KTnxT+8jW1fC2+U8UUoYccckjLb6zOFto6OSZGbotRFeN9taa0VWJMbD8+tz/66KM1TWn2//jMGRfULK+UQ2JMtDGmp4tRH+P3mnIp8X07foNp6kh9y+uHxJj6har5fbx+FbcQIFAJAvE+F5+7llZiVPD4HUshQCAXkBiTe6hViUB9STG77bZb4SrQKmHQTQIESiQQJ0zjyt348XHhwoUlWmvLrCZOpHbv3j195zvfSauttlrLbKTOWpuSGBMPnzlzZrrpppta7UroSHqI4edbaySM+GEmhsz+93//9zparbsYVzTGyGkx9+zqq69etPHYBz/72c+K4ksLnHLKKYVjamm3NTcW87nHFX/PPvtsc1fV5MfHKEJxfMSJwNYqcQIkRuIp5VXaTW377rvvnmKe4kioq/bym9/8JsVQ8h9//HGbUuy4446pf//+tSOEtHRjJMbkwpF4Eldiv/fee/kNrVjbeOONC9NTxPNzyRKjHMX7fJwkXF6J1/94rWnKSXWJMcvTbfnbIynlwgsvbNWRxrbYYovC0NwdO3YsdLAaEmOio/HZLT4bRaJITM3Q1mXttdcuTGMVn+VqRvtriTbF95z4DLS06aebsr2GTqklMSbXbUpiTKwhRuKcNWtW4fjN19gytfisHNP6Le29qWW2mK+1rUaG+MpXvlJIeIj35rqlLRNj4jNKjPgUn+FKUTp37lyY/md56yqXxJho51//+tfC6GqRSNqWJT5jxQhKcRFOS75eS4xZ9l6u1vfxZau4lQCBShCIz+txkeff/va3ou5IjikiESBgKiXHQPUJ1JcU07Vr1xQn9hQCBAg0VSB+JL/vvvsKJ5jK6cqk6E9MldSlS5d04oknFq7ubWofG/u4pibGxHbiB/iYnz2mrmipEj9MHXDAAYXX/7jqubVLDHMdPx625kn2OBaiz3HF37KuVmvMD2thFz+61x2xoNSWc+fOTddff3167bXXSr3qetcX/YnPBkcddVSL/ohZXwPix9xITrrrrrtSjCTT2iWmloyEmJaaOqq1+1Oq7cUUY3GCKk52NCTxoFTbjfXEcy2eu3EVdkv+sL5kmyXGLCmSCiea4j2qtafYitftOAbidXxZ0yBGQmFDRyaL5/kRRxxR3MnlRCTGLAeolW6Oz5+33npr4f0ikqJaskRy9amnnppWWmml2s1US2JMTYf/+Mc/Fj67vfjiizWhVv0fz/tDDz20cJJ1aYnNLdGYGCErRrOLz62lKHG8Lq/tEmNy6aYmxsRaXn755UKSeUt+p4qE+xjB7KSTTkoxckpbljg5dP/996c4huL1qSVLfBaLRNTo99KmMmvLxJjod0yHFiNix+tWc8uXv/zlBk3TWE6JMTV9jim2IrExRv1rzRLHR3yPigtRlvW9u1Rtasz390iqjKTH1i7x3hkjKzWkxGtK3759G3LXRt2nGt/HGwXkzgQItFuBeF2P94Ili+SYJUXUq13AiDHVfgRUWf/rS4o59thjW2UY+irj1l0CVSsQJyieeuqpwlQojz32WJuO+BAjPMT0RPHXFqM9NCcxJg6gOOkcCRcxfUn8yFnKEqPDREb95ptvXsrVNnpdkUQ1bdq0FMdKqftYtzFxImX//fcvnFBd8mrGuveruxw/WjX0xM+5556bDjzwwLoPL/ly+ETy2Y9//OP0zjvvlHz9NSuMH/QPPvjgQkLMeuutVxNus/9xjMSIDtH31rhKPV4rImE4rmps65MbbYbegA3Hlbg//elP0z333NPiV2LHczY+r8ZzrCUT0OrrtsSY+mRSIXEtjoO//OUv9d+pBLfECZWePXsWEmKWdvJtyU3E55Bhw4YtGV5qPdY9Y8aMZSbaLO2BEmOWptJ2sRhhLd4f4zXpv//7v0vakLXWWqtwAm1p0wlWW2JMwMbnkTj+46T3G2+8UVLrZa3sq1/9amEEiC233HJZd2ux22K0nOuuu67Zn0UmT5683OlcJcbku7E5iTGxpkhuiu8b8fpQ6hLH5Q9+8IO02WablXrVzVpf9DlGII0pelsikTmmkY3RcaL/9ZW2ToyJdkXfY6TSSBZqTomEyF/84hfL/axQjokxNf3+3e9+V3ifbOnX7fictt9++6UePXqkTTfdtGbzLf5fYkzDiav1fbzhQu5JgEB7FRg1atRSRxOVHNNe96h2t4SAxJiWULXOshSoLykmru6IK8EVAgQItIRAXLkbCQ8x2sULL7zQKnNcx4gC8ZrX+V/DHX/9619v1VEFljRsbmJMzfpilJD4ITemrPrggw9qwo3+H1MmhUskCm211VaNfnxLPuC//uu/0q9+9asUU7XEiBSlKJEME0N7x3EQP85tsskmjVptjFQSP242pESC0dVXX90qx1v8wBsjIcTzKq4AXNpwoQ1p85L3iefO4Ycfng477LDlXsm85GNbox5TtT300EOFxLv58+eXNBkjki3iisZIiImpo1pzNJLWsGvJbcTVuHE8RiJC7JdSJS/F1fQxzefee+9dmOYtns9tVSTGLFs+9vmjjz5aOElequlGYosx5Ui8n8dx8K1vfWupV6PX17L4wT+uYG9owk4k0cSx1pgiMaYxWq1333hNuvfeewvTNTZ0/9fXum233baQkLfvvvvW+75YjYkxdb1iBII44RyfUUs1ZUnN+uO9OU66x/tzTE3TFknuNW2p+R9JofGeF33+wx/+UBNu8P/4fDFw4MBCsvayHiQxJtdpbmJMzdrieI3Xhxj958MPP6wJN/r/GmusUTgu47UhvmeUc4kE80guf+SRR5p0zNbt26qrrpqiz5GovP3229e9aanL5ZAYU9Ow+D5d81rVlPeGeD2K0TuX9zpUzokxYRGJo/GZLb5HPvnkkyWdFnPrrbcufF6L793Lc6rZL6X8LzGmaZrV9j7eNCWPIkCgPQlIjmlPe0tb20JAYkxbqNtmqwvUlxRz3HHHFa6GbvUG2SABAlUrED9CRYJM/MUPF2+99VYhWaapV7F94QtfKCQ7xBVrO+ywQ9p5551TLJdLKVViTE1/Yl7oJ554onCy5/nnn1/uCYj4AW+LLbZI2223XerUqVPh5HLEyrn84x//SM8991xhpJY4yR4jtjQ08SOuTosf4eJ9L5Ib4nhY3lD15WzRkLbFCel4PsVxEX8xTHxDn0+RKLXTTjsVjo34H1f0tZeEkEi6i+MkEoOeeeaZFIlVDe13uMbV/5E0FX/bbLNN4TlS6cdKQ46n5t4npkV79tlnCz+0x/8Y2ShetxpSYp/E61WMBBDP3fgr99erhvSr2u4T7+3x/hSv3/H3pz/9qcGjga222mopTqrEScZ4DY/job28JlXbfm4P/Y3kqJr3iDgWYzqV5b1PdOjQIW200UZpr732SjHNQmMTatuDS0u1MV7rX3rppcKJ90gYib/XX3+9UVMhxvtwJMTFlCWRDBMj9JTze3OMujBv3rwUUz/GiEU1/+NzayQQRNvjdW2dddYpjCYSI4rEZ634/qK0rUAcr3HxRiSMxHeN5V14EMm5sR/j/WmfffYpfHZuj59R4vNyJEXUJMnEqDLLKjFKSowe2bFjx8JFBpGkGq+T7bnEe0N8TonpZOI5W/O8jedwHBfxnK157m644Ya1z90YvbA97vPl7atXX3218Lk9kmReeeWVBk9xHN+743eX+KwW36fiNbstkmGW1z+3N1ygGt/HG67jngQItDcByTHtbY9pb2sKSIxpTW3bahOB+pJijj/++MIcyG3SKBslQIBAHYH4cSp+iIokmfhRMhIj6v7FSYz4ESqmNIkfkuN/XKUXJyviB8pyPmlW6sSYOmyFxbCJE8/xF0lH4RY28RdJD/FjVSX8eBnHRowiU/cvEkLiRPraa69d+z9+xCzn42HJ/ddS9UgaiedUzV88r+LqwPCK4yL+xzESdpXkFT/uR1/r/oVFzcmpmh+5wyBeO5TWEYjnbeyTOB5r/seW48RDzb6JH9JjxCKl8gRi/8cIC3FlfiRORT3+x3t53dfvWI4TcAqBlhKIEz6RqBWvQ3E8xl+8B8ZrT5z4jb94b1RKJxDm8Rk1EkVq/uL5H8vx2T6SYGr+vAaUzt2aGi+wePHiwnep+D4Vx2x8pozPivEXrxFxnLblyHWN71HDHhHPxXiPjr8Y/Srq0ed4PVx//fUL3xkq6btCw1Sq+17xul3zeb3ms3u8bsfvMPHZPf7iu1QkS/ncVvnHivfxyt/HekigkgUkx1Ty3tW35ghIjGmOnseWvUB9STEnnnhiYaqEsu+ABhIgQKCdC7R0Ykw759F8AgQIECBAgAABAgQIECBAgAABAgQIECBQUgHJMSXltLIKEZAYUyE7UjeKBepLijn55JPToYceWvwAEQIECBAouYDEmJKTWiEBAgQIECBAgAABAgQIECBAgAABAgQIEFimgOSYZfK4sQoFJMZU4U6vhi7XlxTTq1evdMghh1QDgT4SIECgLAQkxpTFbtAIAgQIECBAgAABAgQIECBAgAABAgQIEKgyAckxVbbDdXeZAhJjlsnjxvYoUF9SzCmnnJK6du3aHrukzQQIEGi3AhJj2u2u03ACBAgQIECAAAECBAgQIECAAAECBAgQaOcCkmPa+Q7U/JIJSIwpGaUVlYNAfUkxp556ajrooIPKoYnaQIAAgaoSkBhTVbtbZwkQIECAAAECBAgQIECAAAECBAgQIECgzAQkx5TZDtGcNhGQGNMm7DbaEgL1JcWcfvrp6dvf/nZLbNI6CRAgQGA5AhJjlgPkZgIECBAgQIAAAQIECBAgQIAAAQIECBAg0MICkmNaGNjqy15AYkzZ7yINbIhAfUkxffr0SQcccEBDVuE+BAgQINACAhJjWgDVKgkQIECAAAECBAgQIECAAAECBAgQIECAQCMFJMc0EszdK0pAYkxF7c7q7Ex9STFnnnlm2m+//aoTRa8JECBQJgISY8pkR2gGAQIECBAgQIAAAQIECBAgQIAAAQIECFS9gOSYqj8EqhZAYkzV7vrK6Hh9STHf+9730r777lsZndQLAgQItGMBiTHteOdpOgECBAgQIECAAAECBAgQIECAAAECBAhUnIDkmIrbpTrUAAGJMQ1AcpfyFKgvKeb73/9+2meffcqz0VpFgACBKhOQGFNlO1x3CRAgQIAAAQIECBAgQIAAAQIECBAgQKDsBSTHlP0u0sASC0iMKTGo1bWOQH1JMWeddVb61re+1TqNsBUCBAgQWK6AxJjlErkDAQIECBAgQIAAAQIECBAgQIAAAQIECBBodQHJMa1OboNtKCAxpg3xbbppAvUlxZx99tlpzz33bNpKPYoAAQIEWkRAYkyLsFopAQIECBAgQIAAAQIECBAgQIAAAQIECBBotoDkmGYTWkE7EZAY0052lGb+j0B9STH9+/dPu+++OyYCBAgQKDMBiTFltkM0hwABAgQIECBAgAABAgQIECBAgAABAgQI1BGQHFMHw2LFCkiMqdhdW3kdqy8pZsCAAWm33XarvA7rEQECBCpAQGJMBexEXSBAgAABAgQIECBAgAABAgQIECBAgACBihaQHFPRu1fn/iUgMcZh0C4E6kuK+eEPf5i+8Y1vtIs+aCQBAgSqUUBiTDXudX0mQIAAAQIECBAgQIAAAQIECBAgQIAAgfYmIDmmve0x7W2MgMSYxmi5b5sI1JcUM2jQoPT1r3+9TdpkowQIECDQMAGJMQ1zci8CBAgQIECAAAECBAgQIECAAAECBAgQINDWApJj2noP2H5LCUiMaSlZ6y2JQH1JMYMHD0713VaSDVsJAQIECJREQGJMSRithAABAgQIECBAgAABAgQIECBAgAABAgQItIqA5JhWYbaRVhaQGNPK4DbXcIH6El+GDBmSdt5554avyD0JECBAoM0EJMa0Gb0NEyBAgAABAgQIECBAgAABAgQIECBAgACBJglIjmkSmweVsYDEmDLeOdXctH322Sd9+OGHRQTDhg1LO+20U1FcgAABAgTKU0BiTHnuF60iQIAAAQIECBAgQIAAAQIECBAgQIAAAQLLEqgvOaZLly5p/Pjxy3qo2wiUnYDEmLLbJRrUrVu39MYbbxRBDB8+PO24445FcQECBAgQKF8BiTHlu2+0jAABAgQIECBAgAABAgQIECBAgAABAgQILEugvuSYk046KQ0YMGBZD3UbgbISkBhTVrtDY3r37p3+8z//swjiggsuSNtvv31RXIAAAQIEyltAYkx57x+tI0CAAAECBAgQIECAAAECBAgQIECAAAECyxIY+a/ztPNffLHoLpEYEwkyCoH2ICAxpj3spSppY7x4zpkzp6i3Z599dtpzzz2L4gIECBAgUP4CEmPKfx9pIQECBAgQIECAAAECBAgQIECAAAECBAgQWJZA//7908KFC4vuElMqxdRKCoFyF5AYU+57qEraN2bMmHT77bcX9TayDA877LCiuAABAgQItA+BmBrv97//fYMau9NOO6VNNtmkQfd1JwIECBAgQIAAAQIECBAgQIAAAQIECBAgQKD1BE499dT00UcfFW3w+uuvT7vssktRXIBAOQlIjCmnvVGlbbniiivSjBkzinofCTGG3ypiESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgECrCnz22Wfp+OOPX+o2b7311rTlllsu9TZBAuUgIDGmHPZCFbfhhhtuSJMmTSoSiKmTYgolhQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTaXuCDDz5Iffr0WWpD7r777rTRRhst9TZBAm0tIDGmrfdAFW8/XhyHDh1aJLDtttumUaNGFcUFCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKDtBBYuXJj69+9f1ICVVlop3X///WmNNdYouk2AQFsLSIxp6z1Qpdt//PHHU9++fYt6/6UvfWmpI8gU3VGAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBFpdYMGCBWn48OFF291kk03Sr371q7TCCisU3SZAoC0FJMa0pX6Vbvull15Kxx13XFHv11tvvXTllVcWxQUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoHwEnnrqqTRx4sSiBu2yyy7p+uuvL4oLEGhLAYkxbalfhdt+++2301FHHZU+/vjjrPerrrpqmj59evr85z+fxVUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoPwE5syZk6ZNm1bUsC5duqTx48cXxQUItJWAxJi2kq/C7X766afpiCOOSIsWLcp6H0NpTZkyJW2wwQZZXIUAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEylfgF7/4RfrpT39a1MCTTjopDRgwoCguQKAtBCTGtIV6lW4zpk+KaZSWLKNGjUrbbrvtkmF1AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEChzgdmzZ6c777yzqJVnnXVW+u53v1sUFyDQ2gISY1pbvEq3d8YZZ6S5c+cW9f7ss89Oe+65Z1FcgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTah8CVV16ZHnrooaLGDhkyJPXo0aMoLkCgNQUkxrSmdpVua+DAgem+++4r6n0Mn3XYYYcVxQUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoH0JjBs3Lj377LNFjR47dmw69NBDi+ICBFpLQGJMa0lX6XbGjBmTbr/99qLed+/ePfXs2bMoLkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7U/gs88+S8OGDUuvvvpqUeMvvfTS1Llz56K4AIHWEJAY0xrKVbqNyy+/PM2cObOo9126dDGXXJGKAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNq3wAcffJBi+qR33323qCPTp09Pu+66a1FcgEBLC0iMaWnhKl1/JMREYsySZe+9904/+MEPlgyrEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEAFCCxcuDANGjQoLV68OOvNSiutlGbNmpW22267LK5CoKUFJMa0tHAVrj+mTooplJYskf03cODAJcPqBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBBAgsWLEjDhw8v6tEmm2ySrrrqqrTpppsW3SZAoKUEJMa0lGyVrve+++5bavLLDjvskEaMGFGlKrpNgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB6hJ4+umn04QJE4o63alTp3TJJZekddZZp+g2AQItISAxpiVUq3Sdc+fOTQMGDEgff/xxJrDFFlsURpD5/Oc/n8VVCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKByBR5++OF0xRVXFHVwzz33LCTHrLzyykW3CRAotYDEmFKLVun6XnrppdS/f/+0aNGiTGCjjTZKw4YNSxtssEEWVyFAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACByhe4++6708yZM4s6euCBB6aJEycWxQUIlFpAYkypRatwfZEME0kxkRxTt6y11lrphz/8Ydpmm23qhi0TIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQBUJ3HrrremWW24p6vGRRx6ZRowYURQXIFBKAYkxpdSswnXFtEkxfVJMo1S3dOjQoZAUE/PDKQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQ3QIxakyMHrNkOfHEE9O55567ZFidQMkEJMaUjLI6VzRw4MB03333FXX+nHPOSXvssUdRXIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEqlPgiiuuSA8//HBR588444x05plnFsUFCJRCQGJMKRSrdB2TJ09OP/nJT4p6Hy9a+++/f1FcgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqV+Czzz5LkyZNSk8//XQRwqhRo9IRRxxRFBcg0FwBiTHNFazSx994441p4sSJRb0/+eST06GHHloUFyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAh988EEhOWbBggUZxhe+8IU0derUtOuuu2ZxFQLNFZAY01zBKnz8gw8+mGKqpCXLsccem4455pglw+oECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBWYOHChYWBGBYtWlQbi4UtttgiTZkyJW2yySZZXIVAcwQkxjRHrwofG1l7/fr1S2+99VbW+3333Td973vfy2IqBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgaQLz5s1LEyZMSIsXL85u3muvvQojx6ywwgpZXIVAUwUkxjRVrgof99FHH6WzzjorPfvss1nvt99++zR48OC08sorZ3EVAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQn8CcOXPStGnTim6O2UqGDh1aFBcg0BQBiTFNUavSxwwbNizdddddWe/XX3/9QlJMx44ds7gKAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYnsCtt96abrnllqK7nX322al3795FcQECjRWQGNNYsSq9/5VXXpmuu+66ot7HSDG77LJLUVyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAg0RCBGjYnRY5Ys48ePT126dFkyrE6gUQISYxrFVZ13vv3229OYMWOKOn/qqaemgw46qCguQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEGiqwePHiNGHChDRv3rzsIWuttVaaOnVq+upXv5rFVQg0RkBiTGO0qvC+jz/+eDrrrLPSp59+mvX+8MMPTyeeeGIWUyFAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAk0RWLRoUSE5Jv7XLdttt12aMmVKWm+99eqGLRNosIDEmAZTVd8dX3/99dSvX7/0xhtvZJ3ffffdU//+/bOYCgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaI5AjBgTI8fECDJ1ywEHHJAmTZpUN2SZQIMFJMY0mKq67hgvNDFSzH/8x39kHd9yyy3T4MGD05prrpnFVQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQHMF5syZk6ZNm1a0mpjR5Nxzzy2KCxBYnoDEmOUJVento0ePTnfccUfW+0iGiaSYSI5RCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBASwjceuut6ZZbbila9aBBg1LPnj2L4gIEliUgMWZZOlV623XXXZeuvPLKot7H9EkxjZJCgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRaUiBGjYnRY5Ysl156aercufOSYXUC9QpIjKmXpjpv+PWvf53OP//8os7HsFSHH354UVyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiUWmDx4sVpwoQJad68edmqN9hggzR16tS0zTbbZHEVAvUJSIypT6YK488880w666yz0scff5z1/qCDDkqnnnpqFlMhQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQItKbBo0aJCckz8r1t23nnnQnLM6quvXjdsmcBSBSTGLJWl+oJvvfVWISnm5Zdfzjq/yy67pMGDB2cxFQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0BoCMWJMjBwTI8jULYcccki68MIL64YsE1iqgMSYpbJUX/Ccc85JDz74YNbxjh07FpJi1l9//SyuQoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEWktgzpw5adq0aUWbi5lPfvCDHxTFBQjUFZAYU1ejSpcju+5nP/tZ1vuVV165kBSz/fbbZ3EVAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQ2gK33npruuWWW4o2O3z48HTUUUcVxQUI1AhIjKmRqNL/s2fPTpdccklR77/3ve+lfffdtyguQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE2kIgRo2J0WPqls9//vNpypQpaY899qgbtkygVkBiTC1F9S3cd999aeDAgUUdP/bYY9MxxxxTFBcgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJtJbB48eIUM6LMmzcva8Kmm25aSI7ZbLPNsrgKgRCQGFOlx8ELL7yQ+p11Vnr3vfcygRglJkaLUQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQLkJLFq0qJAcE//rlt122y1NnTo1rbTSSnXDlglIjKnGY+D9999PZ/0rKeb555/Pur/99tunwYMHp5VXXjmLqxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgXIRiBFjYuSYGEGmbjnyyCPTiBEj6oYsE5AYU43HwHnnnZfuvfferOvrr79+ISmmY8eOWVzXoQydAABAAElEQVSFAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiUm8CcOXPStGnTipoVM6ScfvrpRXGB6hUwlVKV7fvLLrsszZo1q6jXMVLMLrvsUhQXIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC5Shw6623pltuuaWoaWPHjk2HHnpoUVygOgUkxlTRfr/55pvTuHHjinp86qmnpoMOOqgoLkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBMpZIEaNidFj6pbVVlstTZ061eAQdVGqeFliTJXs/Mcffzz17du3qLeHH354OvHEE4viAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoNwFFi9enCZMmJDmzZuXNXWbbbZJV199dVpnnXWyuEr1CUiMqYJ9/v777xeSYl588cWst7vvvnvq379/FlMhQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtSWDRokWF5Jj4X7ccccQRadSoUXVDlqtQQGJMFez0eKL//Oc/z3q65ZZbpsGDB6c111wzi6sQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIH2JhAjxsTIMTGCTN0yaNCg1LNnz7ohy1UmIDGmwnf4TTfdlMaPH5/1skOHDun8889PX/nKV7K4CgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaK8C9957b5oxY0bW/Dg/Pm3atLTLLrtkcZXqEZAYU8H7+j//8z8LUyh98sknWS9POeWU1LVr1yymQoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE2rvANddckx544IGsGzvttFMhOWaVVVbJ4irVISAxpkL38z/+8Y9CUswzzzyT9bBz586FeBZUIUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECFSDw0UcfpbFjx6ZXX301602PHj3SkCFDsphKdQhIjKnQ/Txx4sR04403Zr3bbLPNClMorbnmmllchQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIVIrAvHnzCskxS/ZnxIgR6cgjj1wyrF7hAhJjKnAH/+IXv0gjR44s6tnQoUNTp06diuICBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgkgR++ctfphtuuCHr0lprrZWuvvrqtN1222VxlcoWkBhTYfv3pZdeKkyV9Ne//jXrWc+ePVP37t2zmAoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKhUgcsvvzw9+uijWfd22223QnLMCiuskMVVKldAYkyF7dvvfe976bHHHst6tfvuu6f+/ftnMRUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFDJAu+880668MIL06JFi7Ju9urVK51zzjlZTKVyBSTGVNC+nTJlSvrRj36U9WjDDTdMw4YNS/FfIUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC1SQwd+7cNHny5KIujxs3LnXt2rUoLlB5AhJjKmSf3nvvvem8884r6k2MFBMjxigECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKAaBW666aZ0++23Z13faKONClMqbb755llcpfIEJMZUwD594403Ut++fdPChQuz3nTv3j317Nkzi6kQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFqExg/fnx65plnsm537tw5XXrppVlMpfIEJMZUwD4999xz0wMPPJD1pFOnTmno0KFZTIUAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFSjwJtvvpnGjh2b3n///az7Z5xxRjrzzDOzmEplCUiMaef7c/r06emqq67KerHmmmum888/P2222WZZXIUAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFSrwEMPPZSuvPLKou7HqDExeoxSmQISY9rxfn344YdTv379inoQ0yp50haxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAlQvMmjUr3XXXXZnC5ptvnq6++uq00UYbZXGVyhCQGNNO9+M777xTGM7pj3/8Y9aDrl27plNOOSWLqRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIpffrpp4UplebPn59xxLn2cePGZTGVyhCQGNNO9+OwYcOKsti+8pWvFKZQ6tChQzvtlWYTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGWFXj55ZcLyTF///vfsw2dc845qVevXllMpf0LSIxph/tw9uzZ6ZJLLslaHskw559/forkGIUAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoX+Dee+9NM2bMyO6wwgorFKZU2m233bK4SvsWkBjTzvbfE088kfr27Zs+++yzrOUxfVIM7aQQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECyxe45ppr0gMPPJDdcbvttiskx6y11lpZXKX9CkiMaUf77sMPPywkxfz+97/PWt25c+dCPAuqECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvUKfPTRR4UplV599dXsPkceeWQaMWJEFlNpvwISY9rRvhs7dmy67bbbshZvttlmhSmU1lxzzSyuQoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCxbYN68eYXkmCXvNWTIkNSjR48lw+rtUEBiTDvZabfeemu68MILi1o7dOjQ1KlTp6K4AAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILB8gV/+8pfphhtuyO64yiqrpGnTpqWddtopi6u0PwGJMe1gnz3//PPpzDPPTB9//HHW2p49e6bu3btnMRUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgcQKXX355evTRR7MH7bLLLoXkmA4dOmRxlfYlIDGmzPfXp59+WkiKeeqpp7KW7r777ql///5ZTIUAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBovMA777xTmMVl0aJF2YNjwIpBgwZlMZX2JSAxpsz316RJk4qGbNpwww3TsGHDUvxXCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgeYLzJ07N02ePLloRaNGjUpHHHFEUVygfQhIjCnj/XTnnXem4cOHF7UwRoqJEWMUAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoHQCN910U7r99tuzFa6zzjrp6quvTttss00WV2kfAhJjynQ/xfBMp512Wlq4cGHWwu7du6cYqkkhQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESi8wfvz49Mwzz2Qr3m+//dIll1ySxVTah4DEmDLdTyNHjky/+MUvstZ16tQpDR06NIupECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAqUTePPNN9PYsWPT+++/n6100KBBBrLIRNpHRWJMGe6nX//61+n888/PWrbqqqumCy64IG2++eZZXIUAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAorcBvf/vbwvRJdde69tprp+nTp6etttqqbthymQtIjCmzHfT222+n008/Pb3xxhtZy0488cR0+OGHZzEVAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoGUErrjiivTwww9nK//2t7+dLr744iymUt4CEmPKbP+MGTMm3X777Vmrdt555zRkyJAspkKAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAi0nMDChQvTqFGjiqZUivP3PXr0aLkNW3NJBSTGlJSzeSu75557ihJgVlxxxTRy5Mi0zTbbNG/lHk2AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAg0SuDee+9NM2bMyB6z7rrrFqZU+vKXv5zFVcpTQGJMmeyXd999tzCF0quvvpq1KLLMjj766CymQoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECLSOwOTJk9PcuXOzjXXt2jWNGzcui6mUp4DEmDLZL/GEufnmm7PWbLfddoXRYrKgCgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINBqAq+99lphSqW//e1v2TaHDx+ejjrqqCymUn4CEmPKYJ/cd999aeDAgUUtOf/889NXv/rVorgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0HoCv/rVr9JPfvKTbIMbbLBBYUqlTTfdNIurlJeAxJg23h/vv/9+YQqlV155JWtJ9+7dU8+ePbOYCgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINA2AjETzLPPPptt/NBDD01jx47NYirlJSAxpo33x8SJE9ONN96YtWLLLbcsTKHUoUOHLK5CgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQItI3AggULCufyP/vss6wBI0eOTN26dctiKuUjIDGmDffFnDlz0oABA4paMGjQoPT1r3+9KC5AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQItJ3Abbfdlm6++easAV/84hfTddddlzbeeOMsrlIeAhJj2mg/fPTRR+m0005LL730UtaCgw8+OPXu3TuLqRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLlIRAjxMyfPz9rzBFHHJFGjRqVxVTKQ0BiTBvth8mTJ6ef/OQn2da/9KUvpQsuuCCtscYaWVyFAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKA+BefPmpbFjxxY1ZsyYMemwww4rigu0rYDEmDbwf+ihh9LZZ59dtOVzzjkn7bHHHkVxAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKB8BG688cb085//PGtQx44dC1MqbbjhhllcpW0FJMa0sv8nn3xSmELphRdeyLZ8wAEHpD59+mQxFQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKD8BP75z3+mmFLpD3/4Q9a4I488Mo0YMSKLqbStgMSYVva/7LLL0qxZs7KtbrDBBoUnzLrrrpvFVQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHyFHjqqafSxIkTixp30UUXpYMPPrgoLtA2AhJjWtH9kUceST/4wQ+Ktti3b9/UuXPnorgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUL4CM2fOTHfffXfWwM0226wwpdJ6662XxVXaRkBiTCu5xzBKp512Wpo3b162xb333nupyTLZnVQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBshP48MMP06hRo9Kbb76Zte2YY45Jw4YNy2IqbSMgMaaV3KdOnZquv/76bGtrr712uuCCC9LGG2+cxVUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB9iHw2GOPpcsuu6yosRMmTEgHHXRQUVygdQUkxrSC9+OPP55iuqQly6mnnupJsCSKOgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaGcC1157bbr//vuzVm+xxRaFKZX+7d/+LYurtK6AxJgW9v7ss88KUyg9++yz2Za++c1vpnPPPTeLqRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtT+Ddd99NI0eOTG+//XbW+O985ztp8ODBWUyldQUkxrSw91VXXZWmT5+ebWXVVVctTKG0+eabZ3EVAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoH0K/Pa3v01XX311UeMnTZqUDjjggKK4QOsISIxpQecnnngi9enTp2gLJ554Yjr88MOL4gIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA+xW44oor0sMPP5x1YOutty5MqbTmmmtmcZXWEZAY04LOp512WnrqqaeyLey8885pyJAhWUyFAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaP8CCxcuTKNGjUrvv/9+1pnjjz8+DRw4MIuptI6AxJgWcp49e3a65JJLsrWvuOKKhTnFttlmmyyuQoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFSGwL333ptmzJhR1Jlrr702feMb3yiKC7SsgMSYFvBdtGhR6tWrV3rnnXeytffo0SMdffTRWUyFAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqCyByZMnp7lz52ad2nvvvdOUKVOymErLC0iMaQHjiRMnphtvvDFb81e+8pU0evToLKZCgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIVJ7Aq6++mkaMGJH++c9/Zp2LaZaOOOKILKbSsgISY0rs+/TTT6dTTz21aK0/PPfc9I1vfrMoLkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhUnsDNN9+cbrvttqxjW221VZo1a1ZaddVVs7hKywlIjCmxbf/+/dNvf/vbbK377LNP+v73v5/FVAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHKFfjkk0/S8OHD05tvvpl18swzz0xnnHFGFlNpOQGJMSW0vfPOOwsHdd1VfuELX0hjxoxJm266ad2wZQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKDCBR588MF01VVXZb1cbbXVCqPGbLnllllcpWUEJMaUyPXvf/976t27d3rppZeyNR577LHpmGOOyWIqBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQHUITJo0KT3xxBNZZ7t165ZGjhyZxVRaRkBiTIlcp0+fXpTltfnmm6fRo0enlVdeuURbsRoCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgPQnEABsjRowoavKUKVPS3nvvXRQXKK2AxJgSeL766qupV69e6cMPP8zWdtZZZ6VvfetbWUyFAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqC6B2bNnpzvvvDPr9De/+c10zTXXZDGV0gtIjCmBaYwKc8cdd2Rr2m233dKAAQOymAoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQfQLvv/9+YdSYt956K+v8kCFDUo8ePbKYSmkFJMY00/PRRx9N3//+97O1fO5znytMobT11ltncRUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgOgX+/d//PV133XVZ5zt27JhmzZqV1llnnSyuUjoBiTHNtOzbt296/PHHs7V069YtHX/88VlMhQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKhugQsvvDA999xzGULv3r3T2WefncVUSicgMaYZlrfddlsaO3ZstoYvfvGLacyYMWmNNdbI4ioECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAdQtEUkwkx9QtK664YmHUmB122KFu2HKJBCTGNBEy5v+KrK3XX389W0OfPn3SAQcckMVUCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIhMGPGjHTvvfdmGF26dEnjx4/PYiqlEZAY00THqVOnpuuvvz579C677JIGDx6cxVQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAjUCb7/9dho+fHiKATnqlosvvjh9+9vfrhuyXAIBiTFNQJw/f35htJh//vOf2aNHjBiRDG2UkagQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSwjceeedafbs2Vl0p512SjNnzkwrrLBCFldpnoDEmCb4DR06NN19993ZI7t27ZpOOeWULKZCgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFiawAUXXJBefPHF7Kb+/funk08+OYupNE9AYkwj/R544IF07rnnZo9ad9110+jRo9N6662XxVUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAksTePLJJ1NMn1S3RN7BrFmz0sYbb1w3bLkZAhJjGokXo8I8++yz2aN69+6dDj744CymQoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYlsBVV12VHnzwwewuxx13XDrvvPOymErTBSTGNMLuhhtuSJMmTcoesf3226cY3kghQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECDRG4M0330wjRoxIf/vb37KHXXfddenrX/96FlNpmoDEmAa6/dd//VeKkWHeeuut7BGRpfW1r30ti6kQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBoicPvtt6ebbropu+u+++6bLrvssiym0jQBiTENdIuRYmLEmLpl//33T2eccUbdkGUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQIMFFi9enIYPH55effXV7DFjxoxJhx12WBZTabyAxJgGmD3zzDPpu9/9bnbP1VdfPcVBuPHGG2dxFQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAYwQeeeSRNGXKlOwh22yzTZo5c2ZaZZVVsrhK4wQkxjTAa8CAAWnOnDnZPXv27Jm6d++exVQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAk0RiKmTHnvsseyhffv2TX369MliKo0TkBizHK+77rorDRs2LLvXVlttlUaPHp1WXHHFLK5CgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGiKwB/+8IfClEqfffZZ7cPXWGONwqgxW2yxRW3MQuMEJMYsw+v//t//m0444YQ0f/787F79+/dPu+++exZTIUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAg0R+DGG29MP//5z7NVHHXUUYWEmSyo0mABiTHLoLrlllvSRRddlN1jr732Sv369ctiKgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB5gp89NFHacSIEenPf/5ztqrZs2enHXfcMYupNExAYkw9Tp9++mlhtJgFCxbU3mOFFVYoJMoYoqiWxAIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQQoH7778/XXvttdkau3XrlkaOHJnFVBomIDGmHqef/exnacKECdmtBx54YDrttNOymAoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoJQCw4YNS6+88kq2ypkzZ6ZOnTplMZXlC0iMWYrRP/7xj8JoMX/4wx9qb11xxRXTuHHj0mabbVYbs0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKLXAnDlz0rRp07LVHnbYYWnMmDFZTGX5AhJjlmJ0ww03pEmTJmW3dO3aNZ1yyilZTIUAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0BICw4cPTwsWLMhWPWPGjPS1r30ti6ksW0BizBI+H3/8cTrxxBPTa6+9VntLhw4dCqPFdOzYsTZmgQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQUgIPPfRQuvLKK7PVH3zwwemiiy7KYirLFpAYs4TPrFmz0mWXXZZFDz300HTyySdnMRUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEsKjBw5Ms2fPz/bxLXXXpu+8Y1vZDGV+gUkxtSx+T//5/+kE044If3pT3+qja6yyiqFbKuNN964NmaBAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINDSAo888kiaMmVKtpmDDjooTZgwIYup1C8gMaaOzfXXX5+mTp1aJ5LS4YcfXphaKQuqECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRaQWDMmDHp+eefz7Z01VVXpT322COLqSxdQGLM/3f561//WhgtZtGiRbVSq622Who3blzacMMNa2MWCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKtJfDYY4+lyy67LNvc/vvvnyZPnpzFVJYuIDHm/7tMnz49RUZV3dK9e/fUs2fPuiHLBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFWFbjwwgvTc889l20zZsT51re+lcVUigUkxvzL5C9/+UthtJi33367VmjNNdcsjBaz3nrr1cYsECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRaW2Du3LlFI8Tsu+++RSPJtHa72sP2JMb8ay9NmzYtXXPNNdn+Ovroo1OPHj2ymAoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoC0Exo8fn5555pls0zHFUiTIKPULVH1izFtvvVUYLebdd9+tVfq3f/u3dNFFF6V11lmnNmaBAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINBWAk899VSaOHFitvmYSimmVFLqF6j6xJgrrrgizZgxIxM69thj0zHHHJPFVAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECbSlw8b8SY578V4JM3TJ58uS0//771w1ZriNQ1Ykxf/7znwujxXzwwQe1JOuuu24aN25cWmuttWpjFggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECbS0QUynFlEp1yx577JGuuuqquiHLdQSqOjHm8ssvTzNnzqzDkdJxxx2XjjzyyCymQoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoB4EYIWbu3LlZUyZMmJAOOuigLKbyPwJVmxjzxhtvFEaL+eijj2qPhQ022CBddNFFaY011qiNWSBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIlIvAc889ly688MKsOd/4xjfStddem8VU/kegahNjLrnkkjR79uzsODj++ONTt27dspgKAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKCcBC677LL02GOPZU2KgUAOPvjgLKaSUlUmxrz66quF0WI++eST2mNgo402SuPGjUurrrpqbcwCAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKDcBJ5//vk0ZsyYrFlf+9rX0owZM7KYSpUmxlx88cXppz/9abb/TzrppHTYYYdlMRUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQDkKTJkyJT3yyCNZ0yJZRu5DRlJ9I8a88sorhdFi/vnPf9ZKbLLJJoXRYlZeeeXamAUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQLkKzJ8/P40cOTJrXqdOndLMmTOzWLVXqm4qpfHjx6ebbrop2++9e/c2z1YmokKAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiUu8CVV16ZHnrooayZkSzTrVu3LFbNlapKjHnxxRcLo8X893//d+0+33TTTdNFF12UVlpppdqYBQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAuQssWLAgDR8+PGvmjjvumGbPnp3FqrlSVYkxY8eOTbfddlu2v7/73e+mLl26ZDEVAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEB7EJg2bVqaM2dO1tRIljnqqKOyWLVWqiYx5rXXXks9evRIixcvrt3Xm2++eRo3blz63Oc+VxuzQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBoLwKvvPJKGjZsWNbcnXfeOf3oRz/KYtVaqZrEmKuuuipNnz4928+nn356+va3v53FVAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7Ung2muvTffff3/W5EsvvTR17tw5i1VjpSoSY/72t78VRov585//XLuPv/jFL6aLL744rbTSSrUxCwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB9ibw4osvpgsuuCBr9oEHHpgmTpyYxaqxUhWJMbfccku66KKLsv177LHHpmOOOSaLqRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE2qPAhAkT0tNPP501/YYbbkjbb799Fqu2SlUkxpxyyinp2Wefrd23HTp0KIwWs9FGG9XGLBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE2qvAI488kqZMmZI1/4QTTkg//OEPs1i1VSo+MebBBx9M55xzTrZf999//3TGGWdkMRUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQHsWGDRoUHr99ddru7D22munm2++Oa2//vq1sWpbqPjEmPPOOy/de++92X4dMWJE2mGHHbKYCgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgPQv88pe/TDF9Ut0Sg4n06tWrbqiqlis6MeaFF15IMSxQ3dKpU6c0dOjQuiHLBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIF2L/Dee++lgQMHpo8++qi2L9tss0266aabauvVtlDRiTGTJk0qyoT6/ve/n/bZZ59q28/6S4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFSBwI9+9KN0zz33ZD296KKL0sEHH5zFqqVSsYkxf/nLX1KPHj3SX//619p92bFjx3TxxRenz33uc7UxCwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBShF4+eWX0/nnn591Z6+99kpXXHFFFquWSsUmxvz4xz9Ol156abYfjzvuuHTkkUdmMRUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQCUJxAw7TzzxRNal6dOnp1133TWLVUOlYhNjvvOd76QFCxbU7sNVVlmlMFrM+uuvXxuzQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoNIHHH3+8aDCRGEhkxIgRldbV5fanIhNj7r777jR06NCs8wceeGA67bTTspgKAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKASBYYMGZL++Mc/1nZt5ZVXTjfddFPabLPNamPVsFCRiTFnnXVW+t3vfpftv1GjRqVtt902i6kQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBCpR4Ne//nX68Y9/nHWtT58+qW/fvlms0isVlxjz5JNPptNPPz3bb1/72tfSeeedl8VUCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKVKvDBBx+kgQMHpvhfUzp27JhuvvnmtMoqq9SEKv5/xSXGjB49Ot1xxx3ZjuvXr1/aa6+9spgKAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKCSBWLEmBg5pm45//zz09FHH103VNHLFZUY88Ybb6QePXqkf/zjH7U7LebGmjhxYm3dAgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgGgT++Mc/piFDhmRd3WWXXdL111+fxSq5UlGJMdOmTUvXXHNNtr9OOOGEdMQRR2QxFQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBANQhceuml6fHHH8+6evnll6d99tkni1VqpWISYz755JPCaDF/+tOfavfV6quvni6++OK0zjrr1MYsECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqReCJJ55IkyZNyrrbpUuXNH78+CxWqZWKSYy57bbb0tixY7P91LVr13TKKadkMRUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQDUJnH/++enll1/OunzjjTembbfdNotVYqViEmNOPfXU9PTTT2f7KBJltt566yymQoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoJoF77rkn/ehHP8q6fOKJJ6Zzzz03i1VipSISYx5++OHUr1+/bP/suuuuaeDAgVlMhQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQbQIfffRRIYfivffeq+36Ouusk26++ea07rrr1sYqcaEiEmMGDx6cfvOb32T755xzzkl77LFHFlMhQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFSjwA033JB++ctfZl0fMGBAOumkk7JYpVXafWLMiy++mHr27Jntly9/+ctp/PjxWUyFAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFCtAq+//noaNGhQ1v1tt9023XjjjVms0irtPjHmkksuSbNnz872S2QzHXbYYVlMhQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQzQJTpkxJjzzySEYwbty41LVr1yxWSZV2nRjz/vvvp2OOOSa9++67tftkzTXXTBdffHFae+21a2MWCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLVLvD000+nCRMmZAx77713ioSZSi3tOjHmjjvuSKNHj872zSGHHJJ69eqVxVQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRSuuCCC9KLL76YUdx8881p6623zmKVUmnXiTH9+vVLDz/8cLYvLrzwwrTVVltlMRUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGUfvOb36Trr78+o+jbt2/q06dPFquUSrtNjHnllVfSsccem+2HHXbYIY0YMSKLqRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECPyPwLvvvpsGDBiQ/v73v9eSbLvttunGG2+srVfSQrtNjJk+fXq66qqrsn3Ru3fvdPDBB2cxFQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgf8VmDp1avrd7373v4F/LUUOxh577JHFKqHSbhNjjj/++DR//vzafdChQ4d06aWXpvXWW682ZoEAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAXePzxxws5FnWjMWvP0KFD64YqYrldJsbEDor5reqWvfbaK/Xr169uyDIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMASAp999lnq379/euutt2pviYFI7rjjjrT66qvXxiphoV0mxowbNy7dfPPNmf/ZZ5+d9txzzyymQoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUCwwe/bsdOedd2Y3jB49Oh1++OFZrL1X2l1izMcff5yOPPLI9M4779Tar7/++oUhflZaaaXamAUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGlC8yfPz+NHDkyu3G//fZLl1xySRZr75V2lxgT2UrDhw/P3A855JDUq1evLKZCgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQv0DkXyxYsCC7Q0yntPnmm2ex9lxpd4kx5557bnrggQcy8xEjRqQddtghi6kQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDg/7F3J/A2lfsfx38pGRKFSKI0KyWRVHSjpDQYKiJCs2hA5pRkaCC5ZUzIUAlpcCvVrYtC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3HPPuZ6gX79+1rZtW9dYQehkZTDmt99+M5Xh+eGHH6KGlStXdkr17LXXXtExFhBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQKGoCBGOK2ivO8SLwPwGCMf+zYAkBBBBAIL0CH330kd1+++2uJznzzDNt9OjRrrGC0MnKYMySJUvspptucvmdc845dtVVV7nG6CCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggUNQEsjUY891339mGDRvsjz/+sGrVqpkueN1jjz0K7cvz559/Ohf4/vjjj6av7du3W9myZW3//fd3vvbdd99Cc+x6Tbds2WKbN292jllTKVSpUsUOOOAAK1asWL4c59atW+3777+3n376yX7++WcrWbKk7bfffs5X+fLlbc8998zofu3atcs03cTGjRtNy+XKlTO9B3Srr1S1/AjGZOt7Xe9LeX/11Ve2zz772MEHH+x876XKOq/b0euv10nvTb1PI+8HvT/186FMmTJ53XTSjytqP6eTBmMDCCBgqhCzdu3aqIT+BvjHP/7h/L6NDhaAhawMxowaNcpUlie2MY1SrAbLCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAkVVIFPBGJ3MnTJlio9ZVwofddRR0fF///vfzmf6H374YXRMC3vvvbfVqVPHLr30UqtVq5brvk8++cRee+0115g6hx9+uJ111lm+8dwMLF261N5//33fQ0455RSrXbu2bzw3A7/88outWLHC+Vq5cqUTyAh7fPXq1a1+/frWoEED3/GHPSZT45MnT7bdu3e7nu6kk06yevXqucbWrFljL7/8si1atMgJ/rju/KujKv8KQOl1vuSSS+zAAw/0rpKyvsIZb775pmP/zjvvOGGIsI2XKlXK2Scdz6mnnpqWsMS6devsn//8p+m9rHDGpk2bTPsY1CpWrOjsz4knnmgnn3yyE6AKWi9obPny5fbuu+9G71IA68UXX4z2IwsKhjRr1izSjd6WKFHCOnXqFO0nupBf7/X169cHHl/79u2jgRIFYl544QWbPXu24x57TAqd6GfUxRdf7IS3Yu9TkGrevHmxQ86yglR6/ybTFBp79dVXTe/NDz74wDQ7Rlg79NBDne81vRdOOOGEpAKE6fw5Hbb/jCOAQNESCJpO6Z577jEVNilILSuDMZdddpmpLE+kKXX04IMPRn/hRca5RQAB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ssgpdNCqVSvTSWZvi3dS2rtuQekHBWM0jZCmE0pFU4UNVdrwtrDXYMSIEbZo0SLv6ta0aVPr1auXbzyvAwqpBFUkSkfIwbuPX375pb300ktO8CHofab1VbFmxowZVqxYMe/Do/1kgzHaUDa/17MtGKPXLSjMJcfp06dbpUqVtJiSdsstt9iHH37o21a8gBjBGB8XAwggkCGB7du324033mi//PJL9BmV99CsQdnY8i0Y89xzz/nmw9MckhdeeGE2OrFPCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghkhUBhCMYsXrzYhg8f7vPUCZW7777bN56bgWuvvTawOkdYKCOybU3b884770S60dv69esHTqUSXaEALgQFY1Qt5emnn05J1RRVt1CAw9uGDRtmdevW9Q7bU089ZZMmTfKNH3rooTZhwgTfeF4HnnjiCWdqLO/j0zEtjvc5In1VjlF4a+vWrZEh121OYYtUBGOy+b2ebcEYTZF16aWXuk78Rl6w2267zRo2bBjpJnW7e/dupzpS0PRbquSkik5BjWBMkApjCCCQKYHRo0e7ZgjS886fP9/0+zvbWr4FY5T4njdvnstDf+zWqFHDNUYHAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEE/idQGIIxmupIUx5525FHHmkPPvigdzjh/s8//2xt2rQxncz2tpyCMarUMWvWLO/DrHz58vbYY4/5xvMyoJPfL7/8slWsWNEqV67sVJvYe++987KppB4TFIzRBnWCq2bNmklt++uvv7YuXbr4trHPPvvY7NmzA4M3H330kd18882+x6hyil4XVVJJRQurJnTuueeaqnWENYUVNmzYYKoe8v3331vr1q3DVk1ofNWqVaEzKNx77712wgknhG4nFcGYbH6vZ1swRi+EplN76623fK+Jvo+6d+/uG8/LQNiUTXvssYfzPaCfGUGNYEyQCmMIIJApAVVCe+SRR1xPp7/vwqandK2Y4U6+BWPat29v+uM90g466CDnD65In1sEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBDwCxSGYEzYlDb77befqapHXpum79E0PkEtp2DM22+/bQMGDAh6qKWqMoR3Cimd9NYxKySjKh5VqlQJfP5UD4YFY1Jxoj8sdKGKF6p8EdR27dplF198se3YscN3t6rPaDqrZNvGjRvt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z63Ie1NBmFq1aqU0rJXX/eVxCCCAQKoENP2hwsOxTYFW/ezLhpbRYMyDDz5oU6ZMcR336NGjk0pCujZGBwEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAIK5AboIxcTfEnQgggAACCCCAwF8CqqTmzYLce++9TnWsbADKaDDmqquuclKSkQOvUKGCjRs3LtLlFgEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAIM0CBGPSDMzmEUAAAQQQKGICqqDWt29f11F36NDBNMVSNrSMBWN27txpp512mmveR83peMstt2SDA/uAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCBQJAYIxReJl5iARQAABBBDIqMA111zjTG8YedI6der4qshE7sv0bcaCMZrvsUuXLq7j69y5s5133nmuMToIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAALpEyAYkz5btowAAggggEBRFRgxYoQpFxJpJUqUsGXLltkee+wRGcq324wFY2bOnGmjRo1yHehdd91lRx11lGuMDgIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAQPoECMakz5YtI4AAAgggUFQF5s6da3PmzHEd/tSpU+3EE090jeVHJ2PBmN69e9srr7wSPcY999zTZsyYYbqlIYAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIZEaAYExmnHkWBBBAAAEEipLAe++9Z0OHDnUdco8ePeyKK65wjeVHJ2PBmHPOOcc2bdoUPcaaNWva4MGDo30WEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEE0i9AMCb9xjwDAggggAACRU1g586d1rFjR9dhN2nSxDezkGuFDHUyEoz58ssv7aKLLnIdUsuWLa1du3auMToIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAALpFSAYk15fto4AAggggEBRFejfv799/vnn0cOvXLmyvfjii9F+fi1kJBjz/PPP28CBA13H2KdPH6tbt65rjA4CCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEB6BQjGpNeXrSOAAAIIIFBUBaZOneoLwixYsMCqVq2aryQZCcaMGDHCnnzySdeBTpo0ycqVK+cao4MAAggggAACCCCAAAIIIIAAAggggAAC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T6x3m6quEQnDHHjggd676SOQdQIq0awrmDSHum53796d4z4ef/zxTkBGHwiWKFEix/VZAQEEEEAAAQQQQAABBBBAAIFUClx33XWmK369TSfGU1EKf+PGjaaQjbelOxij/8mvueaawGmcvPuivv4nVwULTYdct25dq169etBqeR5LdzCmYcOGdtttt+V5//TAsADDhRdeaN26dYu7bYWrFLLytgYNGtjgwYO9w3nqX3311aYL7rxNAQpVEQlqBGPCgzF6XTS1vbe1a9fOFD5JVYsXUps1a5ZVqFAh8KnCgjHdu3cPnQopcEMBg5reKeiCzYcfftiqVasW8AiGEEAAAQSCBNq2besa7tKli910002usXR0UhaMOf/8801/rEaarma++eabI11uEUAAAQQQSFhAc9Xqnx99ffLJJzk+7uCDD3bCMArE6KodGgIFVWDLli3RkIyCMjm1SpUqRQMyqf7wLafn5n4EEEAAAQQQQAABBBBAAIGiK6ATGrri19smTJhgumgp2aaLoy644AL7448/XJtKdzBGT7Z+/XpThXxVe81tU8ViBYPq16/vhGVU3SKZlu5gjKYtCJpqKDf7nI5gTIsWLaxr16652Y3QdcOmx4oXlCAYEx6M6dmzp61Zs8bn3atXL2vatKlvPK8Da9euDX0PxPs5ExaM0RRvmuotmaYTt19//bVvEwRjfCQMIIAAAnEFFLDWecBI01R1d955Z6SbttuUBWOU4FVZukhr3rx5StOhke1yiwACCCBQeAUUBIgEYlRFI6dWu3Zt56qcTM7tnNM+cT8CqRLQB3HvvPOOvfvuu/bLL7/kuNlTTz3VmWopFVfm5fhkrIAAAggggAACCCCAAAIIIFBkBVRVRRfKBlX2ffTRR61y5copsbnkkkt8/w9nIhijnVclE03llMj/42EHq2oyCsioKon+Zw+b+iXs8RpPdzDm0ksvtauuuireLuR4XzqCMZpioXXr1jk+dyIraGosfd7obfGm1iEYEx6MCavAoxkkdMF8qtr27dtD3wP33XefqZpyUAsLxqjSjc5jJtMIxiSjx2MRQACB/wkorLhu3brogH5/aIrDdLeUBGP0x2GjRo1c+9q+fXtTqpeGAAIIIIBAPAFd+fPGG284/6CuWrUq3qrOfSqTGQnEpOqDlhyflBUQyEcBXaEWCcgElan27tphhx3mBGT0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EejQoYPs27cvMF67du24Z3+PSWDM9ddfL3v37g1MXDPIkO0gwMECAgggYAg899xzsnbtWmNMOxdccIF06tTJM84AAggggED4AosWLZLly5d7dihcuLBMmjTJM84AAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIJE6gbdu2cujQocAJ69evL8OHDw/047EQk8CYBg0ayI4dOwLz0xpQffv2DfRZQAABBBD4P4ERI0bI559/7uEoW7as3HfffZ5xBhBAAAEEIhdYunSpfPDBB54dCxQoIK+++qpnnAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBIjEDLli3l2LFjgZM1bNhQnnzyyUA/HgsxCYxp0qSJbN26NTC/Sy65RAYMGBDos4AAAgggIPL000/LF1984aGoUKGCtG7d2jPOAAIIIIBA+gU+/vhjee+99zwHyJs3r0ybNs0zzgACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgjEX+Cuu+4yTtKsWbO4J16JSWBM8+bN5dtvvw1M/qKLLpLBgwcH+iwggAACOV1gyJAh8tVXX3kYKleuLPfcc49nnAEEEEAAgegF1qxZI/PmzfMcKFeuXPL66697xhlAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACB+AlophjNGONsrVq1km7dujmHYr4ck8CYe++9VzZs2BCYXOnSpa3MCIEBFhBAAIEcLKCBgl9//bVHoFq1anLHHXd4xhlAAAEEEIidwPr16+XNN9/0PeCsWbN8xxlEAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACB2AscOnRI2rZtaxz4vvvuk86dOxtjse7EJDCmU6dOok/k2u28886TZ5991u7yigACCORYgXHjxsmKFSs811+zZk3Renk0BBBAAIH4C2hw4muvveY5UYkSJWTUqFGecQYQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAg9gL79u2TDh06GAd+6KGHpH379sZYrDsxCYzp2rWrfPTRR4G5FS9eXMaMGRPos4AAAgjkRAEt0+FXwuPaa6+Vm266KSeScM0IIIBAhgl8//33MmXKFM/5L7/8cunVq5dnnAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBCIrcCePXvkwQcfNA7avXt3T3klY4MYdGISGNO7d295//33A9M588wz5cUXXwz0WUAAAQRymsCiRYvk1Vdf9Vx27dq15eabb/aMM4AAAgggEH+Bn376SV555RXPiRo0aCCtW7f2jDOAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACsRPYtWuXdOnSxThgv379pGnTpsZYrDsxCYwZOHCgkRWhcOHCMmnSpFjPleMhgAACWUJg7dq18txzz3nmWr58eU/NPM9GDCCAAAIIxFXgs88+k7lz53rOoTVM69Wr5xlnAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBGIjsH37dtEMMc42ePBgufXWW51DMV+OSWDMsGHDZPbs2YHJ5c+f3zdVfWADFhBAAIFsKvDjjz/K448/7rk6zaTVo0cPzzgDCCCAAAKJF1i8eLF8+OGHnhPrf8arV6/uGWcAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEohfYunWraEUiZ3vmmWfi/uBqTAJjnn/+eZk2bVpg7rlz55YZM2YE+iwggAACOUFg9+7dVvDLoUOHjMvNly+fDBgwwBijgwACCCCQsQIa1P3FF194JqG/ry+55BLPOAMIIIAAAggggAACCCCAAAIIIIAAAggggAACCCAQncAPP/wg/fv3Nw4yZswYueaaa4yxWHdiEhgzfvx4eemll4y5zZo1y+jTQQABBLKzwIkTJ6y0X7///rvnMjVTjGaMoSGAAAIIZC6BiRMnys8//+yZlEanlyxZ0jPOAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCKRfYNOmTTJo0CDjAPpZfbyzucckMOaNN94QvYHgbDr5IkWKOIdYRgABBLKtwMCBA+Xbb7/1XF+rVq3IPOBRYQABBBDIHAIa1DhixAj5+++/jQmdccYZMmTIEIIaDRU6CCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghEJ7By5UoZO3ascRDN8H7hhRcaY7HuxCQwZvHixdKrVy9jbsOHD5dSpUoZY3QQQACB7CgwatQo+eSTTzyXVr9+falTp45nnAEEEEAAgcwjsHfvXis4xj2jihUrymOPPSZaDo+GAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC0QssWLBAZsyYYRxo6dKlog+sxrPFJDBm3bp1ct999xnz7Nu3r1SpUsUYo4MAAghkN4GpU6fKe++957msmjVrSsOGDT3jDCCAAAIIZD6BrVu3esqC6ixr1KghXbt2zXwTZkYIIIAAAggggAACCCCAAAIIIIAAAggggAACCGRBgWnTpsm7774bmHlSUpKsX78+0I/XQkwCY37++Wdp3LixMccHH3xQrr32WmOMDgIIIJCdBObNmyevv/6655I0KPDuu+/2jDOAAAIIIJB5BTZs2CCzZs3yTPD666+Xjh07esYZQAABBBBAAAEEEEAAAQQQQACBzCfwv//9T+bMmSMHDhyQW265hTL3me9bxIwQQAABBHK4gLsSR9GiRWXJkiVxV4lJYMz+/fvlmmuuMSbbvHlzadSokTFGBwEEEMguAsuXL5cXX3zRcznlypWT9u3be8YZQAABBBDI/AL6u33RokWeier/afX/tjQEEEAAAQQQQAABBBBAAAEEEMjcAoMGDZJNmzYFJjl8+HApVapUoM8CAggggAACCGSswIABA+S7774LTKJ8+fIyc+bMQD9eCzEJjNHJaar5I0eOBOapkbht2rQJ9FlAAAEEsovA999/L0899ZTxO0+vrUSJElZZuQIFCmSXS+U6EEAAgRwnMH/+fPnkk088161Bj/Xr1/eMM4AAAggggAACCCCAAAIIIIAAAplDQKsb9OrVy5iMVjbQCgc0BBBAAAEEEMgcAl26dJFdu3YFJlOzZk0ZN25coB+vhZgFxjRo0EB27NgRmKdewCOPPBLos4AAAghkB4GDBw/K0KFD5ccffzQup3DhwtKqVSs577zzjHE6CCCAAAJZT2D69OnG02V6BXny5JF+/frJxRdfnPUuiBkjgAACCCCAAAIIIIAAAgggkAMEpk6dKu+9955xpQULFpTJkycbY3QQQAABBBBAIOMEWrZsKceOHQtM4LbbbhPN+BbvFrPAmNatW8tXX30VmG/FihXliSeeCPRZQAABBLKDwMSJE2XZsmXGpeTKlcsKitFUXzQEEEAAgawv8M8//4h+mPbbb78ZF6Pl8vr27Sv6oRoNAQQQQAABBBBAAAEEEEAAAQQyl8BDDz0k//vf/zyTopySh4QBBBBAAAEEMkRg//79otnZne3ee+8VzSIT7xazwJiuXbvKRx99FJjvueeeK88991ygzwICCCCQ1QUWLlwoU6ZM8VzG7bffLldddZVnnAEEEEAAgawr8Msvv1hPlB09etS4iDp16sgDDzxgjNFBAAEEEEAAAQQQQAABBBBAAIGMFdCAGA2M8Wu33HKLtGnTxm8VYwgggAACCCCQQIFt27ZJz549jTP26NFDWrRoYYzFoxOzwJghQ4bIW2+9FZgj6ekCFCwggEA2EPj666+tEkonTpwwrqZGjRrSqFEjY4wOAggggED2EFi7dq3897//9VyMfpimH6rREEAAAQQQQAABBBBAAAEEEEAgcwhoCSXN/urXzjrrLHnhhRf8VjGGAAIIIIAAAgkU2Lhxo3W/1XnKYcOGyU033eQcistyzAJjJkyYIFpixNlmzJghuXPndg6xjAACCGQ5gX379slTTz0lP//8szH3UqVKSbt27fg9Z6jQQQABBLKXwLx582TNmjXGRSUnJ1sllS699FJjnA4CCCCAAAIIIIAAAggggAACCGSMQK9evTyf3zpnQjklpwbLCCCAAAIIZIyAViAaP368cfKXXnpJrrzySmMsHp2YBca8+eabnugejcDVSFwaAgggkJUFxo0bJytWrDAuIV++fFZQzPnnn2+M00EAAQQQyF4Cx44ds0oquYMjS5YsKf369ZPTTjste10wV4MAAggggAACCCCAAAIIIIBAFhNIq4ySfSmUU7IleEUAAQQQQCDjBObOnSuzZs0yJqBVicqUKWOMxaMTs8CYZcuWSffu3Y05aoaFcuXKGWN0EEAAgawkMH/+fHnttdc8U27SpElCohc9J2YAAQQQQCDhAr/++qsVHHP48GHj3Ndcc03Q+uXGhnQQQAABBBBAAAEEEEAAAQQQQCBuAmmVUbJPSjklW4JXBBBAAAEEMk7glVdekcWLFxsTWL58uRQuXNgYi0cnZoExWg+qbdu2xhx79uwp1apVM8boIIAAAllFYMOGDaJ17dytZs2a0rBhQ/cwfQQQQACBbCzw2WefiUazu1vz5s2lUaNG7mH6CCCAAAIIIIAAAggggAACCCCQIAF3GaWCkiL1k47J2yl5jBlQTsngoIMAAggggEDCBUaOHCn6WbvdcufOLZ9++qndjetrzAJjtm/f7rlR3KFDB7nhhhviegEcHAEEEIiHwJ49e6zycPq7zdk0lVe7du0kV65czmGWEUAAAQRygMCCBQtk9erVnivt3bu3VK1a1TPOAAIIIIAAAggggAACCCCAAAIIxFfAr4xSvdSgmCZJR6XTyYLGySmnZHDQQQABBBBAIOECffv2lc2b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BAgQIECAAAECBAgQIECg7gJxZYc33ngj98D/8T/+R/jOd76TWzNIgEDDFhCMadjPx9WVuMDnn38e/vf//t9hzpw5uRLPPvtseO6553JrBgkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqF3g9OnTaZaYJUuWVGvu1KlTmiXm0UcfrVYzQIBA4xAQjGkcz8lVlrjAT37yk/Af//EfuQpTpkwJL7zwQmjbtm1u3SABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvkCO3bsCD/72c9CXM2h6jZ8+PAUihk1alTVkn0CBBqRgGBMI3pYLrW0Bd588820tNK5c+eqQQwdOjQtrdS3b99qNQMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFQXWLZsWQrFnDhxolpxxowZ4X/9r/8Vbr/99mo1AwQINC4BwZjG9bxcbYkLrFy5Mi2tFJOrVbf4H+Xvfve7YcKECVVL9gkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQuELgrbfeCr/4xS+uGPnr27/7u78L//N//s+/DnhHgECjFhCMadSPz8WXosC+fftSOGbx4sW5t/+tb30rPPbYY7k1gwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKWeDy5ctplpi5c+fmMsRZYp577rncmkECBBqngGBM43xurppACsfMnj07V2LmzJnh29/+dm7NIAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFSFDh06FAKxXz00UfVbr9Xr15p6aQHHnigWs0AAQKNW0AwpnE/P1df4gIvv/xy+NGPfpSrMH78+LS0UpcuXXLrBgkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiUisD69etTKGbv3r3Vbjn+f7U4U0z//v2r1QwQIND4BQRjGv8zdAclLjB//vw0e8xnn31WTaJPnz5h1qxZYfTo0dVqBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiUgsC8efPCf/7nf4Yvvvii2u0+9dRT4Z/+6Z/CLbfcUq1mgACBpiEgGNM0nqO7KHGBjRs3hv/zf/5PWLduXTWJZs2aheeffz488cQT1WoGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECDRVgQsXLoRXXnklzJ07N/cWv//974fvfe97uTWDBAg0HQHBmKbzLN1JiQscP348hWPeeeedXIlp06algEyHDh1y6wYJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQINBWBrVu3hl/84hdh06ZN1W7p1ltvTUsn+WJ5NRoDBJqkgGBMk3ysbqqUBf71X/81/PznP88l6NevXwrHjBw5MrdukAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBjF1iwYEEKxXz++efVbmXQoEFp6aSxY8dWqxkgQKBpCgjGNM3n6q5KXGDOnDnhhz/8YTh27Fg1iRYtWqRwzGOPPVatZoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAYxW4ePFiWjrpj3/8Y+4tzJw5M/zgBz8IXbt2za0bJECgaQoIxjTN5+quCITNmzencMyf/vSnXI0HH3wwzJo1K7Rr1y63bpAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAYxHYvn17miVm48aNuZf8D//wD+G73/1ubs0gAQJNW0Awpmk/X3dX4gKXLl0KP/rRj8Ivf/nLXIkBAwak2WOGDx+eWzdIgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoKELLFy4MIViTp8+Xe1S+/Tpk2aJmTZtWrWaAQIESkNAMKY0nrO7LHGBN954IwVkTp48WU2iVatWKRzzla98pVrNAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGGKvDll1+mpZN+//vf515iXEHhH//xH0Pv3r1z6wYJECgNAcGY0njO7pJA2LBhQ1paqby8PFdj+vTpaWmltm3b5tYNEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGgoAjt37kyhmPXr1+de0t///d+HF198MbdmkACB0hIQjCmt5+1uS1zg/PnzaeaYV199NVdi0KBBafaYoUOH5tYNEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIELjZAu+//35aOilvtYTu3bunWWIeeeSRm32ZPp8AgQYiIBjTQB6EyyBwIwV+85vfpIDM559/Xu1j27Rpk8Ix/rJQjcYAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDATRZ45ZVXwpw5c3Kv4r777gs/+MEPwoABA3LrBgkQKE0BwZjSfO7umkBYs2ZNWlpp7dq1uRoPP/xwWlopBmVsBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBG6mwO7du9PSSYX+39asWbNSKOZmXqPPJkCgYQoIxjTM5+KqCNwQgThjzA9/+MPw29/+NvfzhgwZksIxcYklGwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGbIbBo0aK0dNLx48erfXzHjh1TIOarX/1qtZoBAgQIRAHBGH8OCBAIr776agrIXLhwoZpG27Zt09JKM2bMqFYzQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOB6Cvzyl78Mv/vd73I/YuzYsSkUM2LEiNy6QQIECEQBwRh/DggQSAKrVq0KP/rRj8KGDRtyRR599NE0e0yrVq1y6wYJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIXCuBTz/9NC2dtHr16txTPvfccykU06ZNm9y6QQIECFQICMZUSPhJgEA4efJkmjnmzTffzNUYNmxYCscMGDAgt26QAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwNUKLFmyJIViPvvss2qnikGYH/zgByEGY2wECBAoRkAwphglPQRKTCBOSffDH/4wfPnll9XuvF27dmlppYceeqhazQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBqxH41a9+Fd54443cU8Qlk2IoJi6hZCNAgECxAoIxxUrpI1BiAsuXL09LK23evDn3zmfOnJlmj2nRokVu3SABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBYgX27duXZokpLy/PPeSrX/1qCsV07Ngxt26QAAEChQQEYwrJGCdAIMTp6eLMMW+//XauRkzlzpo1K/Tr1y+3bpAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAbQLLli1LoZgjR47ktsZZYuL/k7IRIECgPgKCMfVRcwyBEhP4z//8z/Av//IvuXd92223pb+ITJs2LbdukAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEAhgVdffTW89tprueUBAwakWWLuu+++3LpBAgQIFCMgGFOMkh4CBMKSJUvS7DHbt2/P1Xj88cdTQKZZs2a5dYMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEKgQOHDiQZolZuXJlxVCln4888kj4x3/8x9C9e/dK43YIECBQVwHBmLqK6SdQwgKHDh0KP/rRj8If//jHXIVRo0alcEzfvn1z6wYJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI/OlPf0qhmPj/nvK2F198Mfz93/99XskYAQIE6iwgGFNnMgcQIPDSSy+Ff/u3f8uF6NixY/jbv/3bYGmlXB6DBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGSFvjNb34Tfv3rX+ca9O7dO80S8+CDD+bWDRIgQKA+AoIx9VFzDAEC4YMPPkhLK+3atStXY/r06eG5554LnTp1yq0bJECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKB2BrVu3hldffTWsW7cu96bjl65/8IMfhD59+uTWDRIgQKC+AoIx9ZVzHAECYd++fWlppfnz5+dq3HnnnSkcM2nSpNy6QQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgaYvMGfOnBSKuXDhQu7Nfve73w3/8A//kFszSIAAgasVEIy5WkHHEyAQ/t//+3/h3//93wtKPP744ykgc8sttxTsUSBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGhaAnv27EmBmBUrVuTeWNeuXdMsMTNnzsytGyRAgMC1EBCMuRaKzkGAQFi4cGH4yU9+EuI0eHnbwIEDUzjm7rvvzisbI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQaEICccWBuHTSyZMnc+8qLp303//7fw+DBg3KrRskQIDAtRIQjLlWks5DgEA4fvx4CsfMnj27oMazzz6bAjIFGxQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQarcDhw4dTIGbRokW599CmTZvw/e9/P3zrW9/KrRskQIDAtRYQjLnWos5HgED44x//GH784x+HOD1e3jZy5MgUjhkyZEhe2RgBAgQIECBAgAABAgQIECBAgAABAgQIECBAgEAjFFi8eHEKxRw6dCj36idPnpxCMaNHj86tGyRAgMD1EBCMuR6qzkmAQDh48GAKx/zud7/L1WjVqlUKx3z1q1/NrRskQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBoHAKnTp1KgZh58+YVvOA4S8z3vve9gnUFAgQIXC8BwZjrJeu8BAgkgTfeeCMtr1QoGTx+/PgUkOnbty8xAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBRiawcuXKFIrZvXt37pXfc8894cUXXwwTJkzIrRskQIDA9RYQjLnews5PgEDYtWtXCse88847uRq33XZbCsc88sgjuXWDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDUvgiy++SIGYt956q+CFfec730mhmJYtWxbsUSBAgMD1FhCMud7Czk+AQCbw6quvpoDMiRMnsrEr3zzwwAMpIHPHHXdcOew9AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAAxJYv359CsVs2bIl96qGDRsW4tJJU6ZMya0bJECAwI0UEIy5kdo+iwCBEP+C9JOf/CS89957uRrdunVL4ZipU6fm1g0SIECAAAECBAgQIECAAAECBAgQIECAAAECBAjcPIHf/va3Yfbs2QUv4Jvf/GYKxbRv375gjwIBAgRupIBgzI3U9lkECGQCL7/8cvjxj38czp8/n41d+WbGjBkpINOxY8crh70nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBC4CQLbtm1Ls8SsXbs299P79++fAjHx//HYCBAg0JAEBGMa0tNwLQRKTGDdunUpHLNs2bLcO7/rrrtSOGbixIm5dYMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLXX+Dtt99OoZhCX3h+9tlnUyimS5cu1/9ifAIBAgTqKCAYU0cw7QQIXHuB//iP/0jLKxU68xNPPJECMm3atCnUYpwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOAaC3z66acpEPOnP/0p98y9evUKL774Ynj88cdz6wYJECDQEAQEYxrCU3ANBAiEFStWpHDMRx99lKsxaNCgFI4ZPXp0bt0gAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAtRNYsGBBCsWcOHEi96QxDBNDMTEcYyNAgEBDFhCMachPx7URKDGBixcvpnDMz372s4J3/vWvfz38zd/8TcG6AgECBAgQIECAAAECBAgQIECAAAECBAgQIECAQP0Fjhw5kgIxH3zwQe5J4nJJ3//+90NcPslGgACBxiAgGNMYnpJrJFBiAosXL04BmY0bN+be+ahRo9LsMYMHD86tGyRAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKi7wIcffphCMQcPHsw9eMaMGSkU079//9y6QQIECDREAcGYhvhUXBMBAuHMmTMpHPPLX/4yV6N169YpHPPkk0/m1g0SIECAAAECBAgQIECAAAECBAgQIECAAAECBAgUJ3D69OkUiJk7d27uAe3bt0+BmG9+85u5dYMECBBoyAKCMQ356bg2AgRCXL/yxz/+cdixY0euxoQJE1JApk+fPrl1gwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoUFVq1alUIxu3btym2aMmVKCsUMGzYst26QAAECDV1AMKahPyHXR4BA+Oyzz1I45re//W2uRocOHVI45uGHH86tGyRAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKgscPHixRSI+d3vfle58F97LVu2DC+++GL4zne+k1s3SIAAgcYiIBjTWJ6U6yRAILz99ttpeaW9e/fmasTE8nPPPRe6d++eWzdIgAABAgQIECBAgAABAgQIECBAgAABAgQIECAQwoYNG1IoZvPmzbkcccb+GIq55557cusGCRAg0JgEBGMa09NyrQQIhH379qVwzJw5c3I1unbtGr72ta+F6dOn59YNEiBAgAABAgQIECBAgAABAgQIECBAgAABAgRKVeDChQvh9ddfD6+99lpBgu9973tp6aSCDQoECBBoZAKCMY3sgblcAgT+IhD/wvaTn/wkHDlyJJdk0qRJKSBTVlaWWzdIgAABAgQIECBAgAABAgQIECBAgAABAgQIECglgZUrV6ZAzPbt23Nve/To0SkQM3ny5Ny6QQIECDRWAcGYxvrkXDcBAuGTTz5J4Zh58+blarRt2zY888wz4amnnsqtGyRAgAABAgQIECBAgAABAgQIECBAgAABAgQINHWBY8eOpUDM3LlzC97qt771rRSKadOmTcEeBQIECDRWAcGYxvrkXDcBApnAr371q/Dv//7v4eTJk9nYlW9GjhyZAjLxp40AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUCoC7733XgrFHDx4MPeWhwwZkgIx06ZNy60bJECAQFMQEIxpCk/RPRAgELZt2xZ++tOfhnfeeaegRpw5Js4gE2eSsREgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmqrAnj17UiBmyZIlBW/x29/+dvhv/+2/hXbt2hXsUSBAgEBTEBCMaQpP0T0QIJAJvPnmm+Gll14K8S98eVtZWVn42te+FiZNmpRXNkaAAAECBAgQIECAAAECBAgQIECAAAECBAgQaNQCc+bMCa+//no4ffp07n1MnDgxvPDCCyH+tBEgQKAUBARjSuEpu0cCJSZw+PDhNHvM7NmzC9759OnTU0Cma9euBXsUCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKNReDjjz9OgZg1a9bkXnKcGSbOEBNnirERIECglAQEY0rpabtXAiUmENfNjMsrbdiwIffOYygmzh4TQzI2AgQIECBAgAABAgQIECBAgAABAgQIECBAgEBjFLhw4UIKxLz22msFL3/GjBkpFDNkyJCCPQoECBBoqgKCMU31ybovAgSSwPnz51M4JgZkCm1xWaUYkInLLNkIECBAgAABAgQIECBAgAABAgQIECBAgAABAo1FYOXKlSEGYrZv3557yT179kyBmPj/QWwECBAoVQHBmFJ98u6bQIkJlJeXp4DM0qVLc++8bdu24ZlnnglPPfVUbt0gAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKChCBw7diwFYubOnVvwkmIYJi6dFMMxNgIECJSygGBMKT99906gBAVeeeWVFJA5efJk7t2PHDkyBWTiTxsBAgQIECBAgAABAgQIECBAgAABAgQIECBAoKEJvPfeeykUc/DgwdxLi8slxUBMXD7JRoAAAQIhCMb4U0CAQMkJbNu2LYVj3nnnnYL3HmeOiTPIxJlkbAQIECBAgAABAgQIECBAgAABAgQIECBAgACBmy2wZ8+eFIhZsmRJwUv59re/nUIx7dq1K9ijQIAAgVITEIwptSfufgkQyATefPPN8NJLL4X4F8m8raysLMRpBidNmpRXNkaAAAECBAgQIECAAAECBAgQIECAAAECBAgQuCECc+bMCa+//no4ffp07udNnDgxvPDCCyH+tBEgQIBAZQHBmMoe9ggQKDGBw4cPp9ljZs+eXfDOp0+fngIyXbt2LdijQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBC41gIff/xxCsSsWbMm99RxZpi4bFKcKcZGgAABAvkCgjH5LkYJECgxgbge509/+tOwYcOG3DuPoZg4e0wMydgIECBAgAABAgQIECBAgAABAgQIECBAgAABAtdT4MKFCykQ89prrxX8mBkzZqRQzJAhQwr2KBAgQIBACIIx/hQQIEDgvwTOnz+fwjExIFNoi8sqxYBMXGbJRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBC41gIrV64MMRCzffv23FP37NkzBWLi/6+wESBAgEDtAoIxtRvpIECgxATKy8tTQGbp0qW5d962bdvwzDPPhKeeeiq3bpAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUFeBY8eOpUDM3LlzCx4awzBx6aQYjrERIECOOw28AABAAElEQVSAQHECgjHFOekiQKAEBV555ZUUkDl58mTu3Y8cOTIFZOJPGwECBAgQIECAAAECBAgQIECAAAECBAgQIECgvgLvvfdeCsUcPHgw9xRxuaQYiInLJ9kIECBAoG4CgjF189JNgECJCWzbti2FY955552Cdx5njokzyMSZZGwECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgWIF9uzZkwIxS5YsKXjIt7/97RSKadeuXcEeBQIECBAoLCAYU9hGhQABApnAm2++GV566aUQ/4Kat5WVlYU4feGkSZPyysYIECBAgAABAgQIECBAgAABAgQIECBAgAABApUE5syZE15//fVw+vTpSuMVOxMnTgwvvPBCiD9tBAgQIFB/AcGY+ts5kgCBEhM4fPhwmj1m9uzZBe98+vTpKSDTtWvXgj0KBAgQIECAAAECBAgQIECAAAECBAgQIECAQOkKfPzxxykQs2bNmlyEODNMXDYpzhRjI0CAAIGrFxCMuXpDZyBAoMQE4jqfP/3pT8OGDRty77xLly7hySefDDNnzsytGyRAgAABAgQIECBAgAABAgQIECBAgAABAgRKT+D48ePhrbfeCnGmmELbjBkzUihmyJAhhVqMEyBAgEAdBQRj6gimnQABAlHg/PnzKRwTAzKFtmHDhqWAzLhx4wq1GCdAgAABAgQIECBAgAABAgQIECBAgAABAgRKQGDu3LkpFHPo0KHcu+3Zs2cKxHzta1/LrRskQIAAgfoLCMbU386RBAgQCOXl5Skgs3Tp0oIa06ZNSwGZu+66q2CPAgECBAgQIECAAAECBAgQIECAAAECBAgQIND0BFavXp0CMevXry94czEME5dOiuEYGwECBAhcewHBmGtv6owECJSgwCuvvBJ+/vOfh2PHjuXefdu2bcMTTzyRAjJt2rTJ7TFIgAABAgQIECBAgAABAgQIECBAgAABAgQINA2Bffv2pUDMu+++W/CGhg4dGl544YUQl0+yESBAgMD1ExCM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gj0KBAgQIECAAAECBAgQIECAAAECBAgQIECgKQgsWLAgvP3222Hv3r25t9O/f/80Q8zTTz+dWzdIgAABAk1HQDCm6TxLd0KAAIGwbNmyFJBZsmRJQY1JkyaFRx55JIwcObJgjwIBAgQIECBAgAABAgQIECBAgAABAgQIEGiMAosWLQpz584NW7Zsyb38tm3bpkDMrFmzQvv27XN7DBIgQIBA0xIQjGlaz9PdECBAIAm89tprKSCzc+fOgiJTpkxJAZnBgwcX7FEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKNQWD58uUpELN+/fqCl/vkk0+mUMygQYMK9igQIECAQNMTEIxpes/UHREgQCAJnDx5MoVjXn755XDhwoWCKtOnT08BmbKysoI9CgQIECBAgAABAgQIECBAgAABAgQIECBAoCEKlJeXh3nz5oX4s9A2YcKE8Pzzz4epU6cWajFOgAABAk1YQDCmCT9ct0aAAIEosGnTpvDqq6+GN954oyBIixYtUjgmLrHUq1evgn0KBAgQIECAAAECBAgQIECAAAECBAgQIECgIQjEmWHikklxpphC28CBA8M3vvGN8PWvf71Qi3ECBAgQKAEBwZgSeMhukQABAlHgo48+CrNnzw5//OMfC4LEtVVjOCa+unbtWrBPgQABAgQIECBAgAABAgQIECBAgAABAgQI3AyBLVu2pEDMokWLCn587969UyDmueeeC23atCnYp0CAAAECpSEgGFMaz9ldEiBAIBNYunRpCsi899572VjVNx07dkzhmIcffjjE9zYCBAgQIECAAAECBAgQIECAAAECBAgQIHAzBXbu3JkCMQsWLCh4GbfffnsWiOnUqVPBPgUCBAgQKC0BwZjSet7ulgABApnAwoULU0Bm2bJl2VjVN3HWmIoZZOJsMjYCBAgQIECAAAECBAgQIECAAAECBAgQIHAjBfbt25cCMXHZpEuXLuV+dPz9dZwdJi6b1LNnz9wegwQIECBQugKCMaX77N05AQIEksAf/vCHFJBZvXp1QZFevXplAZkWLVoU7FMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLXQuDIkSNZIObs2bMFT1kRiOnfv3/BHgUCBAgQKG0BwZjSfv7ungABApnA66+/Hl599dWwefPmbKzqm7KyshSQmT59etWSfQIECBAgQIAAAQIECBAgQIAAAQIECBAgcNUCJ06cCPPmzUuhmPi+0Pbkk0+mGWJGjBhRqMU4AQIECBBIAoIx/iAQIECAQCZw8eLFNHvM7Nmzw65du7Lxqm8GDx6cAjJTpkypWrJPgAABAgQIECBAgAABAgQIECBAgAABAgTqLBBnhYnLJcVXnC2m0DZjxoy0bNKECRMKtRgnQIAAAQKVBARjKnHYIUCAAIEocPr06Swgc/DgwYIoI0eOTAGZSZMmFexRIECAAAECBAgQIECAAAECBAgQIECAAAEChQQuXbqUBWL27dtXqC3cf//9KRAzderUgj0KBAgQIEAgT0AwJk/FGAECBAgkgZjKj7PHxFdNU1aOHTs2PPzwwyH+tBEgQIAAAQIECBAgQIAAAQIECBAgQIAAgWIEFixYkEIxO3fuLNgef+/83HPPhUcffbRgjwIBAgQIEKhJQDCmJh01AgQIEEgCn376aRaQOX/+fEGVOHPMI488EuJMMjYCBAgQIECAAAECBAgQIECAAAECBAgQIJAnsGjRohSI2bJlS145jQ0dOjR84xvfCE8//XTBHgUCBAgQIFCMgGBMMUp6CBAgQCAJbNu2LQVkfv3rX9coMmXKlBSQGTx4cI19igQIECBAgAABAgQIECBAgAABAgQIECBQOgLLly9PgZj169cXvOm+ffumQEycJaZFixYF+xQIECBAgECxAoIxxUrpI0CAAIFMIP6jJS6v9NZbb2VjeW+mT5+eAjJlZWV5ZWMECBAgQIAAAQIECBAgQIAAAQIECBAgUAIC5eXlYd68eSH+LLR17949C8S0b9++UJtxAgQIECBQZwHBmDqTOYAAAQIEKgRWrlyZAjLxHzSFtpjoj8srxVevXr0KtRknQIAAAQIECBAgQIAAAQIECBAgQIAAgSYmEL9kOXfu3BBniim03XbbbSHODhOXTerWrVuhNuMECBAgQKDeAoIx9aZzIAECBAhUCCxevDgFZOK6sIW2tm3bZgGZrl27FmozToAAAQIECBAgQIAAAQIECBAgQIAAAQKNXGDLli0pEFPT74xbtmyZBWL69OnTyO/Y5RMgQIBAQxYQjGnIT8e1ESBAoJEJzJ8/PwVkVqxYUfDKO3bsmAIyDz/8cIjvbQQIECBAgAABAgQIECBAgAABAgQIECDQNAR27tyZAjELFiyo8YaeeeaZNEPMkCFDauxTJECAAAEC10JAMOZaKDoHAQIECFQSmDNnTgrIrFu3rtL4lTtx1piKJZbibDI2AgQIECBAgAABAgQIECBAgAABAgQIEGicAvv27UuBmLhs0qVLlwrexFe+8pU0S8yYMWMK9igQIECAAIFrLSAYc61FnY8AAQIEMoFf//rXKSCzbdu2bKzqm169emUBmRYtWlQt2ydAgAABAgQIECBAgAABAgQIECBAgACBBipw5MiRLBBz9uzZglc5bdq0FIi57777CvYoECBAgACB6yUgGHO9ZJ2XAAECBJLA+fPnUzhm9uzZ4dNPPy2oUlZWFuLySg899FBo3rx5wT4FAgQIECBAgAABAgQIECBAgAABAgQIELi5AkePHg0LFy5MoZgTJ04UvJiJEyemQMz06dML9igQIECAAIHrLSAYc72FnZ8AAQIEkkD8x1EMx8RX/BZBoa1Pnz4pHBMDMm3atCnUZpwAAQIECBAgQIAAAQIECBAgQIAAAQIEbrDAgQMHUiDm3XffDSdPniz46aNGjUqBmCeeeKJgjwIBAgQIELhRAoIxN0ra5xAgQIBAEjh48GAWkDl9+nRBlZ49e2YBmfbt2xfsUyBAgAABAgQIECBAgAABAgQIECBAgACB6yuwZ8+eLBBT05JJAwYMCN/4xjfC3/zN31zfC3J2AgQIECBQBwHBmDpgaSVAgACBayewa9euLCBz8eLFgifu1q1bePDBB1NIpnPnzgX7FAgQIECAAAECBAgQIECAAAECBAgQIEDg2grs2LEjC8TU9HvcXr16pUDMc889F2655ZZrexHORoAAAQIErlJAMOYqAR1OgAABAlcnsHnz5vDrX/86vPHGG+HSpUsFT9apU6csINO9e/eCfQoECBAgQIAAAQIECBAgQIAAAQIECBAgcHUC8fe2CxcuTK+aznTHHXeEp59+OoVifLGxJik1AgQIELiZAoIxN1PfZxMgQIBAJrB169bw+uuvp4BMTVNxtmvXLgvI9O7dOzveGwIECBAgQIAAAQIECBAgQIAAAQIECBC4OoENGzaEd999NyxevLjGE911113hmWeeSaEYgZgaqRQJECBAoAEICMY0gIfgEggQIEDgrwJxiaWKgMyJEyf+WqjyrnXr1llApqysrErVLgECBAgQIECAAAECBAgQIECAAAECBAgUK7B69eoUiFm+fHmNhwwYMCALxMQvMdoIECBAgEBjEBCMaQxPyTUSIECgBAX279+fBWQOHz5cUKBZs2ZZQGbQoEEF+xQIECBAgAABAgQIECBAgAABAgQIECBAoLLAihUrUiCmvLy8cqHK3rBhw7JATKtWrapU7RIgQIAAgYYtIBjTsJ+PqyNAgEDJCxw9ejQtrxRnkdm7d2+NHlOnTk0hmeHDh9fYp0iAAAECBAgQIECAAAECBAgQIECAAIFSFliyZEkKxKxbt65GhrvvvjsFYp566qka+xQJECBAgEBDFhCMachPx7URIECAQCZw6tSpLCDzySefZON5b+69994UkIn/aLMRIECAAAECBAgQIECAAAECBAgQIECAwF8E3n///RSI2bRpU40kEyZMSIGYmTNn1tinSIAAAQIEGoOAYExjeEqukQABAgQygfPnz2cBmc2bN2fjeW/Gjx+fAjLxp40AAQIECBAgQIAAAQIECBAgQIAAAQKlKPDll1+mMMy7774btm/fXiPB/fffnwIx06dPr7FPkQABAgQINCYBwZjG9LRcKwECBAhkApcvX84CMsVM9/nggw+GOJOMjQABAgQIECBAgAABAgQIECBAgAABAqUgEL9kGMMw8bV79+4abzn+/vSZZ54JU6ZMqbFPkQABAgQINEYBwZjG+NRcMwECBAhUEnj77bfD66+/HlatWlVpvOrO8OHD0wwyU6dOrVqyT4AAAQIECBAgQIAAAQIECBAgQIAAgSYhcPr06SwQs3///hrv6dFHH02BmEmTJtXYp0iAAAECBBqzgGBMY356rp0AAQIEKgnMmzcvBWSWLl1aabzqzqBBg8JDDz2UQjLNmjWrWrZPgAABAgQIECBAgAABAgQIECBAgACBRidw7NixFIhZuHBhOHz4cI3X/+STT6ZAzJgxY2rsUyRAgAABAk1BQDCmKTxF90CAAAEClQTef//9FJCJP2vaysrKsoBM69ata2pVI0CAAAECBAgQIECAAAECBAgQIECAQIMUOHToUBaIOX78eMFrbNGiRXj66adTIGbEiBEF+xQIECBAgEBTExCMaWpP1P0QIECAQCYQZ46JSyzFmWRq2nr37p0FZNq1a1dTqxoBAgQIECBAgAABAgQIECBAgAABAgQahMDevXuzQMyZM2cKXlPbtm2zQEycTdtGgAABAgRKTUAwptSeuPslQIBACQqsWrUqBWTefvvtGu++e/fuWUCm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5vbbb89rMUaAAAECBAgQIECAAAECBAgQIECgwQjs3LkzC8Ts3bu3qOuaNm1amD59enj00UdD69atizpGEwECBAgQIND4BQRjGv8zdAcECBAgQKCgQPyWTAzIxNdnn31WsK+icOutt2YBmTFjxlQM+0mAAAECBAgQIECAAAECBAgQIEDgpgucO3cuC8OsWrWqqOsZMGBACsPEQMzgwYOLOkYTAQIECBAg0LQEBGOa1vN0NwQIECBAIFfg+PHjWUBm6dKluT1VB/v375+FZHr27Fm1bJ8AAQIECBAgQIAAAQIECBAgQIDADRHYvHlzFog5cuRIrZ8ZZ4OZMWNGCsQ89NBDtfZrIECAAAECBJq2gGBM036+7o4AAQIECFQTWL9+/V9CMvPnhz2fflqtXnWgefPmYfLkyVlIplmzZlVb7BMgQIAAAQIECBAgQIAAAQIECBC4pgInTpzIwjDx91nFbKNGjcoCMb179y7mED0ECBAgQIBACQgIxpTAQ3aLBAgQIEAgT+CLL75IAZn5fw7IxKWWitl69eqVhWTKysqKOUQPAQIECBAgQIAAAQIECBAgQIAAgaIF1q5dmwViTp06VetxnTt3zpZKil/ushEgQIAAAQIEqgoIxlQVsU+AAAECBEpQ4JNPPgkVAZk4NW0x29ixY9MsMvEXDrfccksxh+ghQIAAAQIECBAgQIAAAQIECBAgUE3g0KFDWRhm69at1ep5A/F3UtOnT0+vGI6xESBAgAABAgQKCQjGFJIxToAAAQIESlTggw8++MtSS3+eRebMmTO1KnTp0iVbZmno0KG19msgQIAAAQIECBAgQIAAAQIECBAgEAVWrFiRAjHLli0LcXbj2rY777wzC8PEZZNsBAgQIECAAIFiBARjilHSQ4AAAQIESlDg4MGDWUCmvLy8KIERI0ZkIZlOnToVdYwmAgQIECBAgAABAgQIECBAgACB0hHYs2dPFoaJ74vZKmaGiT9bt25dzCF6CBAgQIAAAQKZgGBMRuENAQIECBAgUEhg1apVWUgmTm1b29a+ffssIHP33XfX1q5OgAABAgQIECBAgAABAgQIECDQhAXibDBxVpjly5enWWKKudXBgweHGTNmpBli+vfvX8wheggQIECAAAECuQKCMbksBgkQIECAAIE8gdOnT2cBmUWLFuW1VBsbOHBgFpK54447qtUNECBAgAABAgQIECBAgAABAgQINE2BrVu3pjBMDMQU82WrW2+9NQVhYiBm6tSpTRPFXREgQIAAAQI3XEAw5oaT+0ACBAgQINA0BDZt2pRCMvPnzw87d+6s9aZatWqVBWQmTpxYa78GAgQIECBAgAABAgQIECBAgACBxidw6tSpLAyzdu3aom5gzJgxWSDGF6uKItNEgAABAgQI1EFAMKYOWFoJECBAgACB6gKXL1/OAjILFiwIFy9erN5UZeSuu+7KQjJ9+vSpUrVLgAABAgQIECBAgAABAgQIECDQ2ATWr1+fBWJOnDhR6+V369YthWGmT58exo8fX2u/BgIECBAgQIBAfQUEY+or5zgCBAgQIECgmsCePXtCnEEmBmQ2bNhQrZ43MGHChCwk07p167wWYwQIECBAgAABAgQIECBAgAABAg1Q4MiRI1kYZvPmzUVd4QMPPJAFYm677baijtFEgAABAgQIELgaAcGYq9FzLAECBAgQIFBQYMmSJSkgE0MyxXxLqHv37unbQWPHjg2jRo0qeF4FAgQIECBAgAABAgQIECBAgACBmydw/vz5sGrVqlBeXh5WrFgRzp07V+vFlJWVZWGYYcOG1dqvgQABAgQIECBwLQUEY66lpnMRIECAAAEC1QSOHj2aBWT+9Kc/VavnDcTllcaNGxdiSGbw4MF5LcYIECBAgAABAgQIECBAgAABAgRuoEAMwlQEYj777LNaP7lFixZhxowZWSCmefPmtR6jgQABAgQIECBwPQQEY66HqnMSIECAAAECuQJr1qzJQjL79u3L7ak6GIMxMSATX3379q1atk+AAAECBAgQIECAAAECBAgQIHCdBOJS2RVhmP379xf1KcOHD88CMfHLTzYCBAgQIECAwM0WEIy52U/A5xMgQIAAgRIUiFPsxiWW4mvhwoVFC8QllipCMj169Cj6OI0ECBAgQIAAAQIECBAgQIAAAQLFCWzbti0Lw+zcubOogzp06JBmhokzxNx3331FHaOJAAECBAgQIHCjBARjbpS0zyFAgAABAgRyBeIvW+bPnx8WLVoUNm7cmNtTdbBZs2bZUksxKNO5c+eqLfYJECBAgAABAgQIECBAgAABAgSKFNizZ08Whtm8eXORR4Vw7733hmnTpqUZYrp06VL0cRoJECBAgAABAjdSQDDmRmr7LAIECBAgQKBGgTg1bwzIfPDBB+GTTz6psbeieMstt1QKydx6660VJT8JECBAgAABAgQIECBAgAABAgQKCBw6dCgLw6xdu7ZAV/XhMWPGhClTpoSpU6eGAQMGVG8wQoAAAQIECBBoYAKCMQ3sgbgcAgQIECBA4C8CH374YQrIxKBMsWtYd+rUKVtqKc4k06JFC5wECBAgQIAAAQIECBAgQIAAAQL/JXDixIlQXl6eBWIuXbpUlM3QoUNTECYGYkaOHFnUMZoIECBAgAABAg1FQDCmoTwJ10GAAAECBAjkCly4cCELyMSZZI4fP57bV3XwjjvuyEIyo0ePrlq2T4AAAQIECBAgQIAAAQIECBAoCYFz585VCsN8/vnnRd133759Uxgmzgwzfvz4oo7RRIAAAQIECBBoiAKCMQ3xqbgmAgQIECBAIFcgfqsphmMqlls6f/58bl/VwT59+mQhmSFDhlQt2ydAgAABAgQIECBAgAABAgQINCmBy5cvVwrDHDt2rKj7i180qlgmKf60ESBAgAABAgSagoBgTFN4iu6BAAECBAiUoMCBAweygMzixYuLFhg0aFAWkikrKyv6OI0ECBAgQIAAAQIECBAgQIAAgYYusH79+myZpPi7k2K2Dh06ZMskxdlhbrnllmIO00OAAAECBAgQaDQCgjGN5lG5UAIECBAgQKCQwM6dO7OZZFauXFmordp4XBN77Nix6dWzZ89qdQMECBAgQIAAAQIECBAgQIAAgYYusHXr1mx2mF27dhV1ua1atcqWSYozw3Tu3Lmo4zQRIECAAAECBBqjgGBMY3xqrpkAAQIECBAoKPDxxx9nIZkNGzYU7Luy0KxZsywgM27cOL8MuhLHewIECBAgQIAAAQIECBAgQKDBCezevTsLw2zZsqXo67vvvvuy2WF69epV9HEaCRAgQIAAAQKNWUAwpjE/PddOgAABAgQI1ChQXl6eLbe0Y8eOGnsrinG64IpZZGJI5tZbb60o+UmAAAECBAgQIECAAAECBAgQuGkCBw8ezMIw69atK/o64u854qwwcZmk/v37F32cRgIECBAgQIBAUxEQjGkqT9J9ECBAgAABAjUKLFmyJJtJZt++fTX2VhQ7duxYKSTTokWLipKfBAgQIECAAAECBAgQIECAAIHrLnD8+PEsDBO/APTll18W9ZnDhg3LZoYZMWJEUcdoIkCAAAECBAg0VQHBmKb6ZN0XAQIECBAgkCvwxRdfpIDMBx98kGaTOXbsWG5f1cHu3btnIZm77767atk+AQIECBAgQIAAAQIECBAgQOCaCJw9ezaFYWIQZtWqVSHuF7OVlZVlYZjx48cXc4geAgQIECBAgEBJCAjGlMRjdpMECBAgQIBAnsDJkyezWWRiUObcuXN5bdXG7rrrrhSSiUstDRkypFrdAAECBAgQIECAAAECBAgQIECgLgJxJpgYhKkIw8SZYorZevTokS2T9MADDxRziB4CBAgQIECAQMkJCMaU3CN3wwQIECBAgECeQFyne9GiRVlQJq8nb2zgwIFh9OjRYdSoUWH48OF5LcYIECBAgAABAgQIECBAgAABAtUE4kww69atS681a9aE+LuJYra49PPUqVOzQEybNm2KOUwPAQIECBAgQKBkBQRjSvbRu3ECBAgQIECgkMCuXbuy5ZZWrlxZqK3aeM+ePVNAJoZk4qtt27bVegwQIECAAAECBAgQIECAAAECpStw5MiRLAwTQzFxNttittatW1cKw3Tq1KmYw/QQIECAAAECBAj8WUAwxh8DAgQIECBAgEANAps2bcpmkVm/fn0NnZVLt912W6WQTLdu3So32CNAgAABAgQIECBAgAABAgRKQmDnzp2VwjBx2aRit/vvvz8LxMQv5NgIECBAgAABAgTqLiAYU3czRxAgQIAAAQIlKvDRRx9lyy1t3769aIXmzZtXCsmUlZUVfaxGAgQIECBAgAABAgQIECBAoPEJxC/XVCyTVJffIcQ7HTduXLZMUr9+/RrfzbtiAgQIECBAgEADExCMaWAPxOUQIECAAAECjUNg6dKlYfHixWHZsmVhx44ddbroAQMGZEGZkSNH1ulYzQQIECBAgAABAgQIECBAgEDDE/j888+zIEwMxBw4cKBOF3nPPfeESZMmpdlhhg8fXqdjNRMgQIAAAQIECNQsIBhTs48qAQIECBAgQKBWgfLy8rB8+fIUklm7dm2t/Vc23HHHHVlIZtSoUaFdu3ZXlr0nQIAAAQIECBAgQIAAAQIEGqjAoUOHKoVhTp8+XfSVtmzZMkyePDm9YiBm4MCBRR+rkQABAgQIECBAoG4CgjF189JNgAABAgQIEKhRYOvWrSkgE2eSiWGZS5cu1dh/ZbF9+/aVQjLdu3e/suw9AQIECBAgQIAAAQIECBAgcJMF4qyxVy6TdPny5aKvqHPnzmlWmIpATPyyjI0AAQIECBAgQOD6CwjGXH9jn0CAAAECBAiUqMD+/ftTSKZiNpkTJ07USSLOIFPx6t+/f52O1UyAAAECBAgQIECAAAECBAhcG4G4NFLFq67LKd91113ZrDAxEGOm2GvzTJyFAAECBAgQIFAXAcGYumjpJUCAAAECBAjUU+DUqVPZcktxNpm9e/fW6UwxGBNDMiNHjkw/mzVrVqfjNRMgQIAAAQIECBAgQIAAAQLFCcQlkSqCMPFnXDKpLtuwYcOyZZImTpxYl0P1EiBAgAABAgQIXAcBwZjrgOqUBAgQIECAAIHaBGI4pmK5pU2bNtXWXqkel1iqmEkm/oxLMNkIECBAgAABAgQIECBAgACB+gscPHiwUhjmzJkzdTpZDMBMmjQpBWKGDx9ep2M1EyBAgAABAgQIXF8BwZjr6+vsBAgQIECAAIFaBeLa5MtjUGb58rBy5cpa+69suPXWWyuFZHr06HFl2XsCBAgQIECAAAECBAgQIECggMD27duzMEz8t3ldtvjv8bg0UkUYpk+fPnU5XC8BAgQIECBAgMANFBCMuYHYPooAAQIECBAgUJvAzp07Ky25dO7cudoOqVSvWGopziQzYMCASjU7BAgQIECAAAECBAgQIECglAW+/PLLLAgTl0iK/wavyxZncI1hmIpAzO23316Xw/USIECAAAECBAjcJAHBmJsE72MJECBAgAABArUJHD16NC23VLHk0uHDh2s7pFK9rKys0mwyzZs3r1S3Q4AAAQIECBAgQIAAAQIEmrrAqVOnKoVh6vpv6/ilk4pZYWIgplWrVk2dzP0RIECAAAECBJqcgGBMk3ukbogAAQIECBBoigLnz59PIZnlf15uKQZlPvnkkzrdZteuXSuFZDp06FCn4zUTIECAAAECBAgQIECAAIHGIrB///5KYZizZ8/W6dLvvvvubFaYMWPG1OlYzQQIECBAgAABAg1PQDCm4T0TV0SAAAECBAgQqFWgvLw8m00mTv9cl61t27ZZSGbEiBGhd+/edTlcLwECBAgQIECAAAECBAgQaHACW7duzcIwGzdurNP1tWzZMpsVJs4OM2jQoDodr5kAAQIECBAgQKBhCwjGNOzn4+oIECBAgAABArUKbNmypdJsMnHN9Lps/fv3D0OHDk2vYcOGBbPJ1EVPLwECBAgQIECAAAECBAjcDIGDBw+GTZs2hY8//ji9Dhw4UKfL6NSpUxaGiUsk9ejRo07HayZAgAABAgQIEGg8AoIxjedZuVICBAgQIECAQK0C+/btqxSSOXnyZK3HXNnQunXrEMMxFUGZ4cOHX1n2ngABAgQIECBAgAABAgQI3BSBc+fOpQBMRRhm8+bNdb6OO++8M1siKYZh2rdvX+dzOIAAAQIECBAgQKDxCQjGNL5n5ooJECBAgAABAkUJxFDM8uXLsyWXYmimrluXLl2yoEwMyVh2qa6C+gkQIECAAAECBAgQIECgvgI7duzIZoTZsGFD+Pzzz+t8qvjFjxiCia+4TJKNAAECBAgQIECg9AQEY0rvmbtjAgQIECBAoAQFLl++nAVkYlimPt+si2xlZWXZkkujRo0K7dq1K0FNt0yAAAECBAgQIECAAAEC10Pg6NGjlYIw+/fvr9fHTJgwIVsmacSIEfU6h4MIECBAgAABAgSajoBgTNN5lu6EAAECBAgQIFC0wLp160J5eXn2On36dNHHVjS2atUqW3Jp5MiR6X1FzU8CBAgQIECAAAECBAgQIFCbwBdffJEtjxRnhInLJNVn69WrVxgzZkx6jR8/PvTt27c+p3EMAQIECBAgQIBAExUQjGmiD9ZtESBAgAABAgSKFTh16lT46KOPspBMDM3UZ7v99tuz2WRGjx4devToUZ/TOIYAAQIECBAgQIAAAQIEmrDArl27UhgmBmHWrl0bzp07V+e7bdu2bRg3blwYO3ZsCsPcc889dT6HAwgQIECAAAECBEpHQDCmdJ61OyVAgAABAgQIFCWwe/fuSkGZTz/9tKjjqjbFb+jFtdzjkksxKNOmTZuqLfYJECBAgAABAgQIECBAoIkLHD9+vFIQ5uDBg/W64/hvy4ogTJwdpkOHDvU6j4MIECBAgAABAgRKT0AwpvSeuTsmQIAAAQIECNRJIH6D78pll86cOVOn42NzixYtwrA/h2SG/3lt9xiSGTRoUJ3P4QACBAgQIECAAAECBAgQaPgCX375ZQrCbNy4Mc0Is2XLlnpddO/evcOECROyJZLuuuuuep3HQQQIECBAgAABAgQEY/wZIECAAAECBAgQKFrg/PnzYdmyZVlQZv369UUfe2Vjp06d0mwyMSRz9913h65du15Z9p4AAQIECBAgQIAAAQIEGpFAnGm0IggTv1wR/+1Y1+2WW24JkydPTrPCxJlhRvz5ixU2AgQIECBAgAABAtdCQDDmWig6BwECBAgQIECgRAUOHDhQKSizd+/eeknEb/6NHDkyzSYTwzItW7as13kcRIAAAQIECBAgQIAAAQLXX+DUqVNhw4YNaUaYGIQ5fPhwvT40Lo80ceLEbImktm3b1us8DiJAgAABAgQIECBQk4BgTE06agQIECBAgAABAnUS+PjjjysFZT7//PM6HR+bmzdvHoYNG5ZCMnE2mX79+tX5HA4gQIAAAQIECBAgQIAAgWsrEP+9F0Mw8bVt27Z6nbxXr15pVpjx48enJZJ69OhRr/M4iAABAgQIECBAgEBdBARj6qKllwABAgQIECBAoGiBuK58XHapYuml+G3C+mwdO3QIo/48i0ycSSa+OnfuXJ/TOIYAAQIECBAgQIAAAQIE6iCwb9++LAgTwzBffPFFHY7+S2ubNm1SECYukTRmzJgwZMiQOp/DAQQIECBAgAABAgSuVkAw5moFHU+AAAECBAgQIFCUwNGjRysFZeIvWeuz9enTJ5tNJgZlbAQIECBAgAABAgQIECBw9QJnzpypFIQ5cuRIvU4al8m99957Q5wVZuzYsZbKrZeigwgQIECAAAECBK6lgGDMtdR0LgIECBAgQIAAgaIF4tTbV84oc/bs2aKPvbIxLrt05atVq1ZXlr0nQIAAAQIECBAgQIAAgRyBEydOhLg8UsVr165dOV21D/Xs2TPNChPDMDEI06VLl9oP0kGAAAECBAgQIEDgBgoIxtxAbB9FgAABAgQIECBQWGDFihVZUGbjxo2FG2upDBw4sFJQ5tZbb63lCGUCBAgQIECAAAECBAg0fYE4A0xFCCb+rO8snq1bt86CMBMnTgz9+/dv+njukAABAgQIECBAoFELCMY06sfn4gkQIECAAAECTVPg5MmTWUgmziqzf//+et9o3759KwVlOnbsWO9zOZAAAQIECBAgQIAAAQKNRSD+O+rKIMzhw4frfekjRowI906eHCb/eVaYcePG1fs8DiRAgAABAgQIECBwMwQEY26Gus8kQIAAAQIECBCok0Cc0rti2aX489y5c3U6/srmXr16VQrKdO3a9cqy9wQIECBAgAABAgQIEGiUArt3764UhDl+/Hi976NHjx7ZrDCTJk0KvmBQb0oHEiBAgAABAgQINAABwZgG8BBcAgECBAgQ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" + } + }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Screen%20Shot%202021-12-10%20at%203.13.09%20PM.png](attachment:Screen%20Shot%202021-12-10%20at%203.13.09%20PM.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "PBKAeDaoqHwo" + }, + "source": [ + "However, there are many different ways to measure distance or divergence between probability distributions. Which one should we choose? As indicated by the figure, a theoretically appealing choice is the Kullback-Leibler divergence $KL(q_{\\phi}({\\bf z}) || p_{\\theta}({\\bf z} | {\\bf x}))$, but computing this directly requires knowing the true posterior ahead of time, which would defeat the purpose.\n", + "\n", + "What's more, we are interested in optimizing this divergence, which might sound even harder, but in fact it is possible to use Bayes' theorem to rewrite the definition of $KL(q_{\\phi}({\\bf z}) || p_{\\theta}({\\bf z} | {\\bf x}))$ as the difference between an intractable constant that does not depend on $q_{\\phi}$ and a tractable term called the ***evidence lower bound (ELBO)***, defined below. Maximizing this tractable term will therefore produce the same solution as minimizing the original KL-divergence." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "l6dRubBtqHwq" + }, + "source": [ + "### Background: \"guide\" programs as flexible approximate posteriors\n", + "\n", + "In variational inference, we introduce a parameterized distribution $q_{\\phi}({\\bf z})$ to approximate the true posterior, where $\\phi$ are known as the variational parameters. This distribution is called the variational distribution in much of the literature, and in the context of Pyro it's called the ***guide*** (one syllable instead of nine!).\n", + "\n", + "Just like the model, the guide is encoded as a Python program `guide()` that contains `pyro.sample` and `pyro.param` statements. It does _not_ contain observed data, since the guide needs to be a properly normalized distribution so that it is easy to sample from. Note that Pyro enforces that `model()` and `guide()` should take the same arguments. Allowing guides to be arbitrary Pyro programs opens up the possibility of writing guide families that capture more of the problem-specific structure of the true posterior, expanding the search space in only helpful directions, as depicted schematically in the figure below." + ] + }, + { + "attachments": { + "Screen%20Shot%202021-12-10%20at%203.13.22%20PM.png": { + "image/png": "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ICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4xMzcwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjIyNDY8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpVc2VyQ29tbWVudD5TY3JlZW5zaG90PC9leGlmOlVzZXJDb21tZW50PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4K3g2h9wAAABxpRE9UAAAAAgAAAAAAAAKtAAAAKAAAAq0AAAKtAAHYZRnSecsAAEAASURBVHgB7N3pkxRnei/sZN9pNrFvg9hXAQKhYdFgIaHxiDAa2zMnTkgR45A/nfP/OHwiZuJ8kB2OkcKWNIv1atdIIIEWEDuInRY0DWKnoReWoyf9VrobKquy6bUqr4yoqOp87szK58oWgu5f3U+f+z9ukY0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAlQn0EYypsjtqOgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABArGAYIxvBAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgaoUEIypyttqUgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoIxvgcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqUkAwpipvq0kRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgIxvgeIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqEoBwZiqvK0mRYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgIBjje4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKAqBQRjqvK2mhQBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIBgjO8BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBqhQQjKnK22pSBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECgjG+BwgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKpSQDCmKm+rSREgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECAjG+B4gQIAAAQIECBAgQIAAAQIEuk3g7t270e3bt+PHrVu3ktctLS1RGLt37178HF4XHpW+7/79+1Hfvn2jfv36tXlk2ZelJpz3wboHvy5WU2xfpuN+nEvfVnMZOHBgNGTIkGjo0KHxc+F1t31TeSMCBAgQIECAAAECBAgQIECAQAkBwZgSOIYIECBAgAABAgQIECBAgEBeBe7cuZOEVloHWIq9LrYvhF+K7W9qasorae7mXQjIhOcsrx8M1qQd16dPn9xZmjABAgQIECBAgAABAgQIECDw6AKCMY9u50gCBAgQIECAAAECBAgQINDjAiHAUgigFJ7TQimt95erbW5u7vG5uQACxQQGDx78UHeatBBNewI5oVuOjQABAgQIECBAgAABAgQIEKg+AcGY6runZkSAAAECBAgQIECAAAECFSQQlgu6evVqdO3atYceD+4vFmYJSxDZCBDouMCgQYMeCtwMGzYsqqmpafMYNWpUm68L4x2/AmcgQIAAAQIECBAgQIAAAQIEukJAMKYrVJ2TAAECBAgQIECAAAECBHIpcOPGjTbhlgeDLSH88uC+mzdv5tKqqyYdltkJnT8Kj379+hV9Hca7ayxc071796IQggrPhUfrr1u/7q7arroHeT1vscBMuX2ho42NAAECBAgQIECAAAECBAgQ6FoBwZiu9XV2AgQIECBAgAABAgQIEKhAgaampjjg8mCIpdDVpdj+sC8EGvK4hZBJWN4mdNwIz4/yOoRUOiOoEq7Flk3gwQDOo4ZzQteixsbGKPx3E54ffP3g18Xqsl1x9VUNHDgw7j5TLkBT6EoTnkNt+G/FRoAAAQIECBAgQIAAAQIECGQTEIzJ5qSKAAECBAgQIECAAAECBCpQ4P79+w91aCnWteXBfeEX+dW4dUaApVjoJfxy30agIwJZwjMP1jz4dZ4CN8OHD2+znFOWYM2IESM6coscS4AAAQIECBAgQIAAAQIEKlZAMKZib50LJ0CAAAECBAgQIECAQH4FwvJDFy5cKPq4dOlSspzR9evXKxopBFnCL8DDL7TDc1h2pVgwpViXlmJ1AiwV/e3g4h9BIEt45sGa1l/funUrCn/ehGXSGhoaHuEKes8h4c+T1gGacePGRePHj3/oMWHChMifFb3nvrkSAgQIECBAgAABAgQIEOi4gGBMxw2dgQABAgQIECBAgAABAgQ6UeDixYtFAy+tgzDhl9WVtoVQS+uQSyHsUnguNjZs2LBKm6brJVC1AqEDVQjIFIIyxZ5v/jh+48cgTeux5ubmijMJAZpioZnW+8KyTjYCBAgQIECAAAECBAgQIFAJAoIxlXCXXCMBAgQIECBAgAABAgSqQCAsc9I63PLg6/r6+ng8/PK5N2/9+vVLOrgUQi0PPhcLufTv3783T8u1ESDQRQLhz77WQZkHwzVpY110OZ122kGDBpUNz4QgTehUYyNAgAABAgQIECBAgAABAj0pIBjTk/remwABAgQIECBAgAABAlUicPXq1ZKhlxCCuXbtWq+b7dChQ9sdcgmdX2wECBDoaoG0wEzYnzYWQji9bXtwyaawVFPrzjPhdfiz2EaAAAECBAgQIECAAAECBLpKQDCmq2SdlwABAgQIECBAgAABAlUgcO/evSTwUujo8mCnl/B1b1gqZODAgdGYMWPix4MdXApfP9jJRSeDKvgmNQUCBBKBlpaW1OWeWodprl+/Hl2+fDl+hD/ne3oLfzY/GJZ58OuxY8f29GV6fwIECBAgQIAAAQIECBCoUAHBmAq9cS6bAAECBAgQIECAAAECHRVoaGhIQi/Fwi5h3w8//NDRt+mU40OwpRB6SXsOv1i1ESBAgED7BK5cuZKEZAphmQefGxsb23fSLqgOy9g9GJYp9nUISdoIECBAgAABAgQIECBAgEBrAcGY1hpeEyBAgAABAgQIECBAoMoEwi83a2triz56w9JGoWNLWtCl9f4BAwZU2Z0xHQIECFSOwK1bt9qEZy5dutTm6/D/mtCFpjdsISwzbdq0No/p06fHX1uyqTfcIddAgAABAgQIECBAgACB7hcQjOl+c+9IgAABAgQIECBAgACBThUIXV3OnDlTNPwSls7oqW3IkCFlQy+jRo3qqcvzvgQIECDQiQJ37tx5KCzTuvNMIUzTk0s3heWYWodmCoGZsC90JrMRIECAAAECBAgQIECAQHUKCMZU5301KwIECBAgQIAAAQIEqkygvr4+Dr4UC8Dcvn2722cbAi2tO7oUex2CMTYCBAgQINBa4OrVqyUDNCFM01P/X0sLzQhxtr6DXhMgQIAAAQIECBAgQKDyBARjKu+euWICBAgQIECAAAECBKpU4Ny5c6nhl+bm5m6ZdViyqFjI5cF9YQkkGwECBAgQ6AqBEIwpdJhp3XWm9evuXA4wdJMphGZad5kJ+0IXGhsBAgQIECBAgAABAgQI9G4BwZjefX9cHQECBAgQIECAAAECVSZQW1ubLHn0YPeXu3fvdvlswy/3Jk6cmDzGjB4djR4zJgnDWEqiy2+BNyBAgACBThAI/89sHZQJry9evBidP38+edy/f78T3qn0KYYOHRqHZh4MzITQzPjx40sfbJQAAQIECBAgQIAAAQIEukVAMKZbmL0JAQIECBAgQIAAAQJ5EQi/qCsVfukOh5EjRybBl9YhmPB62LBh3XEJ3oMAAQIECPS4QFiGMDxah2XC67Dvzp07XX59gwYNSg3NTJo0qcvf3xsQIECAAAECBAgQIECAwH8JCMb4TiBAgAABAgQIECBAgEA7BcKyRq3DL+F1oftLWA6pO7ZRo0YVDb9MmDAhCp9etxEgQIAAAQLpAj/88EObwEzrAE13LF/Yv3//qFiXmdBpZurUqekXboQAAQIECBAgQIAAAQIE2i0gGNNuMgcQIECAAAECBAgQIJAXgfCp8uPHj0fHjh2Lgy+F8Ev45Vl3bGN+XOIoBF0e7PoSvh48eHB3XIL3IECAAAECuRMIyzIVOss82G2msbGxyz369OnTJjQzc+bM6PHHH49mz54d1dTUdPn7ewMCBAgQIECAAAECBAhUm4BgTLXdUfMhQIAAAQIECBAgQKDdApcuXUoCMCEIUwjDNDQ0tPtc7T1g7NixRYMvIfwycODA9p5OPQECBAgQINCFAteuXWvTaaZ1gKY7/t4wbty4JCQTwjKFwIxucV14052aAAECBAgQIECAAIGKFxCMqfhbaAIECBAgQIAAAQIECGQVuH79etz9pRB+KQRgrl69mvUUj1T32GOPJeGXBzvADBgw4JHO6SACBAgQIECgdwncuHEjCc20XpophGfCWFdukyZNSkIyrQMz/p7RlerOTYAAAQIECBAgQIBApQgIxlTKnXKdBAgQIECAAAECBAhkFrh9+3abAExYCimEYC5evJj5HO0tHD9+fBJ+eXDpo379+rX3dOoJECBAgACBKhII3WRad5dpvURT6ELTVdv06dOLBma66v2clwABAgQIECBAgAABAr1RQDCmN94V10SAAAECBAgQIECAQCaBO3fuFA3AnDt3LtPx7S16MPASvi50gOnbt297T6eeAAECBAgQIBA1NjYmnWYKgZlCx5nLly93iVChq0xhKabwPGPGjC55LyclQIAAAQIECBAgQIBATwsIxvT0HfD+BAgQIECAAAECBAhkEnhw+aPw9enTpzMd296iEHiZNm3aQ4/2nkc9AQIECBAgQKAjAk1NTVFtbe1DjytXrnTktEWP7d+/fzR79uy4w0zrwMzkyZOL1ttJgAABAgQIECBAgACBShEQjKmUO+U6CRAgQIAAAQIECORE4MyZM/GyR4Xlj0IAJrzuim3s2LEPhV9CIGbAgAFd8XbOSYAAAQIECBDoFIGbN28+FJYJAZqwv7O3IUOGFA3MPPbYY539Vs5HgAABAgQIECBAgACBLhEQjOkSViclQIAAAQIECBAgQKCcQF1dXdEATEtLS7lD2z0+cuTIogGYoUOHtvtcDiBAgAABAgQI9FaB0EmmWIeZ0Hmms7fw96vWHWYKXWZGjRrV2W/lfAQIECBAgAABAgQIEOiQgGBMh/gcTIAAAQIECBAgQIBAOYEffvihaADm1q1b5Q5t93gIuhRbAin84sZGgAABAgQIEMirwIULF4oGZu7du9fpJKEjXyEkE54Lr4cNG9bp7+WEBAgQIECAAAECBAgQyCIgGJNFSQ0BAgQIECBAgAABApkEjhw5Eh04cCAKz4UlkK5du5bp2PYUhaWOigVgwi9ibAQIECBAgAABAtkEzp49Gwdmvv/++yQ4E/Z1xTZx4sQkJLNgwYJo4cKF8d/nuuK9nJMAAQIECBAgQIAAAQKtBQRjWmt4TYAAAQIECBAgQIBAZoFTp07FIZgQhCk87t69m/n4rIXFAjDhFys2AgQIECBAgACBzhcIXWSKLccUus509ha6+i1atCh5hLDM+PHjO/ttnI8AAQIECBAgQIAAgZwLCMbk/BvA9AkQIECAAAECBAhkEairq0vCL4UQTGcvhRTCLsVCMFmuTw0BAgQIECBAgEDXCjQ1NRUNzFy5cqVT3/ixxx5LgjIhNBPCMjU1NZ36Hk5GgAABAgQIECBAgEC+BARj8nW/zZYAAQIECBAgQIBAWYHLly8/FILpzF94hOWOigVgwvJINgIECBAgQIAAgcoSuHnzZtHATNjfWdvUqVOTsEwIyoTAzODBgzvr9M5DgAABAgQIECBAgECVCwjGVPkNNj0CBAgQIECAAAECpQQaGhoeCsGcP3++1CGZx0Jr/GIBmKFDh2Y+h0ICBAgQIECAAIHKFAjB6mJLMoXOM52xPf744w+FZfr06dMZp3YOAgQIECBAgAABAgSqTEAwpspuqOkQIECAAAECBAgQSBO4c+fOQyGY06dPp5W3a//w4cOj8MuJ1o/Ro0e36xyKCRAgQIAAAQIEql/g3Llz0fHjx9s87t692ykTL3STKSzBNGfOnE45r5MQIECAAAECBAgQIFDZAoIxlX3/XD0BAgQIECBAgACBVIHDhw+3CcJ89913qbXtGRg4cGCbAEwIw0yYMKE9p1BLgAABAgQIECBAIBE4depUm6BM+LoztvD31hCSKTxCcGb69OmdcWrnIECAAAECBAgQIECgggQEYyroZrlUAgQIECBAgAABAmkCJ0+ebBOCOXDgQHTv3r208nbtb90FJrwOyyPZCBAgQIAAAQIECHSVQOggU+gqc+LEifj12bNnO+XtRowYkQRlCp1lhLw7hdZJCBAgQIAAAQIECPRaAcGYXntrXBgBAgQIECBAgACB4gKh/XwIvrR+3L59u3hxO/eGT9AWgjCzZs2KX7fzFMoJECBAgAABAgQIdLpAY2NjEpYphGYuXrzYKe8zbty4h8Iyo0aN6pRzOwkBAgQIECBAgAABAj0vIBjT8/fAFRAgQIAAAQIECBBIFbh06VKbAEwIw1y9ejW1vj0DEydOTEIwhTDMgAED2nMKtQQIECBAgAABAgR6TOD69esPhWWuXbvWKdczZcqUJCwTlmAK3WWGDBnSKed2EgIECBAgQIAAAQIEuldAMKZ7vb0bAQIECBAgQIAAgVSBmzdvPhSCqa+vT61vz8CYMWMeCsEMGzasPadQS4AAAQIECBAgQKDXC/zwww9twjJhKaZbt251ynWHjoohIFNYgik89+3bt1PO7SQECBAgQIAAAQIECHSdgGBM19k6MwECBAgQIECAAIGSAqdOnYp2794d7dq1K9q7d2905syZkvVZB0eMGBGHYApLIYVuMKNHj856uDoCBAgQIECAAAECVSVQV1fXJiwTlmK6c+dOp8xxwYIF0RNPPBEtX748foRlmWwECBAgQIAAAQIECPQuAcGY3nU/XA0BAgQIECBAgEAVCxw8eDAJwoRAzJUrVzo820GDBj3UCWb8+PEdPq8TECBAgAABAgQIEKhmgdOnT7cJy5w8ebJTpjtt2rRoxYoVSVBm+vTpnXJeJyFAgAABAgQIECBA4NEFBGMe3c6RBAgQIECAAAECBFIF7t69G4dgCh1hwnNTU1NqfZaBPn36PBSCmTp1apZD1RAgQIAAAQIECBAgUELg3r17bYIyoavM2bNnSxyRbWjs2LFtgjLz58/PdqAqAgQIECBAgAABAgQ6TUAwptMonYgAAQIECBAgQCDPAjdu3GjTDSYsjdTRLXy6NCyDVHiEpZFsBAgQIECAAAECBAh0j0BjY2N04sSJNoGZCxcudOjNhwwZ0iYoE5ZgCgF4GwECBAgQIECAAAECXScgGNN1ts5MgAABAgQIECBQxQL19fVtgjDHjh3r0GzD8kdz585NQjAhDNO/f/8OndPBBAgQIECAAAECBAh0rkAIxIduMoXHkSNHops3b3boTZ544ok2YZlhw4Z16HwOJkCAAAECBAgQIECgrYBgTFsPXxEgQIAAAQIECBAoKnDy5Mk2QZhz584Vrcu6M3SDWbBgQRRaqYfHmDFjsh6qjgABAgQIECBAgACBXiTw/fffR4cPH44fhw4din744YcOXV0IzK9YsSIK3WTC47HHHuvQ+RxMgAABAgQIECBAIO8CgjF5/w4wfwIECBAgQIAAgaICBw4caBOEuXr1atG6rDvnzZuXhGBCEGbo0KFZD1VHgAABAgQIECBAgEAFCYRgTCEoE55ra2s7dPVTp05tE5SZMWNGh87nYAIECBAgQIAAAQJ5ExCMydsdN18CBAgQIECAAIGHBO7cuROHYHbv3h3t2rUrft3c3PxQXdYdgwYNahOCCUGYvn37Zj1cHQECBAgQIECAAAECVSQQllpqHZQ5evRoh2YXuk227igTOlHaCBAgQIAAAQIECBBIFxCMSbcxQoAAAQIECBAgUKUC169fb9MNZt++fR2aaU1NTZsgzKxZszp0PgcTIECAAAECBAgQIFC9Anfv3o3CkkutwzItLS2PPOHBgwe3CcqE5ZcE8x+Z04EECBAgQIAAAQJVKCAYU4U31ZQIECBAgAABAgTaCpw/f75NEOb48eNtC9r51YQJE5IgTPh05qRJk9p5BuUECBAgQIAAAQIECBD4b4Hwb5TWYZkbN2789+AjvFq2bFmbsMzw4cMf4SwOIUCAAAECBAgQIFAdAoIx1XEfzYIAAQIECBAgQKCVwIkTJ9oEYerq6lqNtv/ljBkz4iBMCMGEZZFGjx7d/pM4ggABAgQIECBAgAABAhkFzp49G3eUKYRlLl68mPHI4mVz5sxpE5QZP3588UJ7CRAgQIAAAQIECFShgGBMFd5UUyJAgAABAgQI5E1g//79bYIw165d6xDBvHnzokIIJgRhhgwZ0qHzOZgAAQIECBAgQIAAAQIdEbh06VKy9FIIy9TW1nbkdNGUKVPaBGVmzpzZofM5mAABAgQIECBAgEBvFhCM6c13x7URIECAAAECBAgUFdi7d2/0+eefx2GY3bt3Ry0tLUXrsuwcNGhQmxBMCML06dMny6FqCBAgQIAAAQIECBAg0CMCDQ0NSVDm8OHD0Xfffdeh6whdMVesWBGtXLky+ulPfxqFrpk2AgQIECBAgAABAtUiIBhTLXfSPAgQIECAAAECVSwQlkL64osvkkf4IfCjbqNGjYqXQwoBmPD4yU9+8qinchwBAgQIECBAgAABAgR6hcDdu3fbBGVCWKa5ufmRr23y5MlxQObpp5+O1qxZEw0dOvSRz+VAAgQIECBAgAABAj0tIBjT03fA+xMgQIAAAQIECDwkcOfOnSQEEwIxp06deqgm646JEye2CcJMmjQp66HqCBAgQIAAAQIECBAgULECx48fbxOWuX79+iPPJXSTCSGZ0E1m4cKFj3weBxIgQIAAAQIECBDoCQHBmJ5Q954ECBAgQIAAAQIPCYRPNBa6wnz99dfR/fv3H6rJsmPmzJlJEGbBggVR6BBjI0CAAAECBAgQIECAQN4Fzp07Fx06dCgJy1y4cOGRSGpqauKATAjJrFq1KpowYcIjncdBBAgQIECAAAECBLpLQDCmu6S9DwECBAgQIECAQBuBS5cutQnCPOoPZQtLIoUQTHg9ePDgNu/jCwIECBAgQIAAAQIECBB4WODy5ctxSKYQljlz5szDRRn2zJs3Lw7KhCWXQmeZ/v37ZzhKCQECBAgQIECAAIHuExCM6T5r70SAAAECBAgQyL3Azp074zDMV199FR08ePCRPKZPnx4tXbo0WrZsWfz8SCdxEAECBAgQIECAAAECBAi0EWhoaIj27t2bPH744Yc241m+GDBgQLLk0sqVK6PZs2dnOUwNAQIECBAgQIAAgS4VEIzpUl4nJ0CAAAECBAjkW+DEiRNJEOabb76Jbt682W6QmpEjoyU/BmFCGCY8Ro8e3e5zOIAAAQIECBAgQIAAAQIE2icQll5qHZRpaWlp3wl+rJ46dWrcTWb16tVxNxn/nms3oQMIECBAgAABAgQ6QUAwphMQnYIAAQIECBAgQOC/BG7cuBEHYb788sto165d0cmTJ9tN07dv3ygsi1ToCvOTn/yk3edwAAECBAgQIECAAAECBAh0rkBYcqkQlDl27NgjnfzJJ5+MCksuLV++/JHO4SACBAgQIECAAAEC7RUQjGmvmHoCBAgQIECAAIE2Art3745CECZ0hAlhmLt377YZz/LFtGnTosWLFyddYaxJn0VNDQECBAgQIECAAAECBHpGIHwo4sCBA0lQ5uLFi+2+kDFjxsTLLoWwzIoVK6KwbK6NAAECBAgQIECAQFcICMZ0hapzEiBAgAABAgSqWODs2bPRzp074yBMCMPU19e3e7ajRo2K5s+fn3SFGTduXLvP4QACBAgQIECAAAECBAgQ6B0C33//fXTw4MEkKNPU1NTuCwudQwtLLoWgzPDhw9t9DgcQIECAAAECBAgQKCYgGFNMxT4CBAgQIECAAIFEoLm5OdqxY0fcDSYEYfbv35+MZX3Rr1+/aMGPQZiFixbFYZg5c+ZkPVQdAQIECBAgQIAAAQIECFSQwL1796Kw7FIhKPPdd9+1++oHDRoUd5MJAZnwWPTjvyVtBAgQIECAAAECBB5VQDDmUeUcR4AAAQIECBCoYoHwQ8zC0kjh+fr16+2e7YwZM+KuMEuWLInDMOEHmzYCBAgQIECAAAECBAgQyJfA1atX46BMYemlR+k6GpZZKiy5FIIykyZNyhei2RIgQIAAAQIECHRIQDCmQ3wOJkCAAAECBAhUh0BYD37Xrl1JGOb48ePtnlhYHz4sjxTaXy9dujSaOHFiu8/hAAIECBAgQIAAAQIECBCoboHTp0+3Cco0Nja2e8IrV66MO8kUOsoMHDiw3edwAAECBAgQIECAQH4EBGPyc6/NlAABAgQIECDQRqB1R5gQimlpaWkzXu6LAQMGxEGYEIZZvHhx/LrcMcYJECBAgAABAgQIECBAgEBBIPw7NHQsPXz4cBQ6yoTn9m5jx45tE5KZO3due0+hngABAgQIECBAoMoFBGOq/AabHgECBAgQIECgIHDz5s1ox44d8WPnzp3R999/XxjK/Dxz5sykK0xYImnYsGGZj1VIgAABAgQIECBAgAABAgRKCVy6dCkOyoSwTAjK1NXVlSovOrZw4cLoqaeeitasWROtXr26aI2dBAgQIECAAAEC+RIQjMnX/TZbAgQIECBAIGcC4YeIIQQTAjHhOazt3p4tfPIuLI0UusKEHy5OmTKlPYerJUCAAAECBAgQIECAAAECjyxw4sSJNkGZW7dutetc06ZNiwMyISQTwjI+3NEuPsUECBAgQIAAgaoREIypmltpIgQIECBAgACB/xI4evRoEoYJgZi7d+9mpgnrsheCMIUwTOaDFRIgQIAAAQIECBAgQIAAgS4SaGxsTJZdCh1ljhw50q53Gj16dBySKXSTmTBhQruOV0yAAAECBAgQIFC5AoIxlXvvXDkBAgQIECBAIBHYvXt30hVmz549yf4sL2bNmhV3hAlBmBCKGTlyZJbD1BAgQIAAAQIECBAgQIAAgR4TqK+vjw4fPpx0lDl//nzmaxkwYECbkMzjjz+e+ViFBAgQIECAAAEClScgGFN598wVEyBAgAABAgSi5ubmNl1hQnvprNugQYOipUuXRkuWLIkWL15seaSscOoIECBAgAABAgQIECBAoNcKhO6p+/bti/bu3RuHZdpzoU888USy5NKyZcvac6haAgQIECBAgACBChAQjKmAm+QSCRAgQIAAAQJB4PLly0lXmLBE0oULFzLDjBo1Kg7DFAIx4WsbAQIECBAgQIAAAQIECBCoRoGzZ8/GAZkQkglhmZaWlszTnD17dptuMv379898rEICBAgQIECAAIHeKSAY0zvvi6siQIAAAQIECMQCZ86caROGuXXrVmaZyZMnx11hCmGY0CnGRoAAAQIECBAgQIAAAQIE8iQQPmRSCMiE5+vXr2ee/sSJE6Onnnoq6SbjQyaZ6RQSIECAAAECBHqVgGBMr7odLoYAAQIECBAgEEUHDx6MwzChK8xXX33VLpKwLnpYIimEYRYtWtSuYxUTIECAAAECBAgQIECAAIFqFrh9+3ay3FIIydTX12ee7vDhw5OQTAjLTJs2LfOxCgkQIECAAAECBHpWQDCmZ/29OwECBAgQIEAgFti5c2cUHiEMc+jQoXapLF68OA7ChEDMrFmz2nWsYgIECBAgQIAAAQIECBAgkFeBsMxSoZvMyZMn28VQ6CQTnhcsWNCuYxUTIECAAAECBAh0r4BgTPd6ezcCBAgQIECAQCzQ0NCQdIUJgZja2trMMoMHD066woTOMKG1s40AAQIECBAgQIAAAQIECBB4dIFjx44l3WRCJ9f2bKFjayEos2rVqvYcqpYAAQIECBAgQKAbBARjugHZWxAgQIAAAQIEgsD58+eTrjAhDHPlypXMMKNHj066woQwTE1NTeZjFRIgQIAAAQIECBAgQIAAAQLZBc6dOxd3kil0k2lubs588PTp06M1a9bEjxCWGTp0aOZjFRIgQIAAAQIECHSNgGBM17g6KwECBAgQIEAgFgifOCsskRSWSbpz505mmcmTJ8dhmBCECcskDRw4MPOxCgkQIECAAAECBAgQIECAAIGOC4QPtRQCMuH52rVrmU86ZsyYJCATwjLjx4/PfKxCAgQIECBAgACBzhMQjOk8S2ciQIAAAQIECMQC3377bbxMUgjEhNft2WbPnp0sk7Rw4cL2HKqWAAECBAgQIECAAAECBAgQ6EKBxsbGNiGZ0Bk26xY+7BLCMYUll2bNmpX1UHUECBAgQIAAAQIdFBCM6SCgwwkQIECAAAECLS0tbbrCHD9+vF0ooRvM0h8fS37sDPOTn/ykXccqJkCAAAECBAgQIECAAAECBHpGYP/+/cmSSydPnmzXRSxfvjxZcil0irURIECAAAECBAh0nYBgTNfZOjMBAgQIECBQxQI3btyItm3blgRi6uvrM892yJAhSVeYEIqZOHFi5mMVEiBAgAABAgQIECBAgAABAr1PIHxIprDk0oEDB9p1gXPmzEm6yaxdu7ZdxyomQIAAAQIECBAoLyAYU95IBQECBAgQIEAgFgidYT777LPo008/jZ8vX76cWSasKx53hvnxU2Dhk2AjR47MfKxCAgQIECBAgAABAgQIECBAoHIEzp07F+3bty/pJtPc3Jz54kMn2Q0bNkTr16+PVq5cmfk4hQQIECBAgAABAukCgjHpNkYIECBAgAABArHA559/ngRiwg+3sm5TpkyJQzCFQMyAAQOyHqqOAAECBAgQIECAAAECBAgQqAKBq1evJgGZEJYJX2fdFi5cGAdkQlAmvLYRIECAAAECBAg8moBgzKO5OYoAAQIECBCocoHdu3cnYZjQDjnrNnv27DgME7rCLFiwIOth6ggQIECAAAECBAgQIECAAIEqF2hqakqWWwrLLtXV1WWe8YoVK+JOMiEkE7rK2AgQIECAAAECBLILCMZkt1JJgAABAgQIVLnA4cOHk2WS9u/fn3m2IQRT6Aozc+bMzMcpJECAAAECBAgQIECAAAECBPIrEH72UFhy6cSJE5kh1q5dmyy3NGnSpMzHKSRAgAABAgQI5FVAMCavd968CRAgQIAAgVjg1KlTSWeYr7/+OrPKokWL4rW+wye2/BAqM5tCAgQIECBAgAABAgQIECBAoIjAd999F+3atSt+nD59ukjFw7sGDhyYBGRCJ5lRo0Y9XGQPAQIECBAgQIBAJBjjm4AAAQIECBDInUB9fX0Shvnss88yzz8skxSCMCtXrox0hsnMppAAAQIECBAgQIAAAQIECBBoh0DoIlMIyZw/fz7TkTU1NdH69euT5ZYGDRqU6ThFBAgQIECAAIE8CAjG5OEumyMBAgQIECAQXb9+PVkm6dNPP40aGxszqUybNi0Jw8ybNy/TMYoIECBAgAABAgQIECBAgAABAh0VuHfvXhKQCUGZK1euZDrlhAkTkoDMunXrMh2jiAABAgQIECBQzQKCMdV8d82NAAECBAjkXKC5ublNZ5isP0AaP358EoZZunRpzhVNnwABAgQIECBAgAABAgQIEOhpgdu3bychmW+++SYKX2fZQsfbsMxS6Cbz5JNPZjlEDQECBAgQIECg6gQEY6rulpoQAQIECBAg8Pnnn8fdYUJnmLq6ukwgoeVwYZmk8NyvX79MxykiQIAAAQIECBAgQIAAAQIECHSnwNWrV9uEZEJnmSzbggULkuWWFi1alOUQNQQIECBAgACBqhAQjKmK22gSBAgQIECAQGgp/Nlnn8WBmBMnTmQCGTx4cByGKQRihg4dmuk4RQQIECBAgAABAgQIECBAgACB3iBQX1+fhGT27t2b+ZKWL1+eLLc0a9aszMcpJECAAAECBAhUooBgTCXeNddMgAABAgQIxAKHDh2KgzAhEHPgwIFMKn369GkThhk9enSm4xQRIECAAAECBAgQIECAAAECBHqzwJkzZ5KQzJEjRzJf6k9/+tNkuaXJkydnPk4hAQIECBAgQKBSBARjKuVOuU4CBAgQIEAgFjh16lSyTFJYUzvrtnjx4mSppIkTJ2Y9TB0BAgQIECBAgAABAgQIECBAoOIEjh49Godkws9OTp8+nen6BwwYkARkNmzYEPkwUSY2RQQIECBAgEAFCAjGVMBNcokECBAgQCDvAufPn0+WSdq2bVtmjjlz5iRhmBkzZmQ+TiEBAgQIECBAgAABAgQIECBAoFoE9u/fn4Rkws9YsmwjR46M1q9fnyy3FJajthEgQIAAAQIEKlVAMKZS75zrJkCAAAECVS5w7dq1ZJmkTz/9NGpqaso04+nTpydLJc2bNy/TMYoIECBAgAABAgQIECBAgAABAtUucP/+/WSppdBJ5sqVK5mmPH78+CQgE8IyNgIECBAgQIBApQkIxlTaHXO9BAgQIECgigWam5uTZZI+++yz6OrVq5lmO2HChCQMs3Tp0kzHKCJAgAABAgQIECBAgAABAgQI5FWgsbGxTUjm1q1bmShCR96wzFIIyKxatSrTMYoIECBAgAABAj0tIBjT03fA+xMgQIAAAQLR9u3bk0BM1pa+o0aNSsIwK1eujPr27UuSAAECBAgQIECAAAECBAgQIECgnQKha++uXbui0EUmPN+9ezfTGebPnx8HZJ555plo0aJFmY5RRIAAAQIECBDoCQHBmJ5Q954ECBAgQIBAdOrUqejDDz+MH4cOHcokMmTIkDZhmPC1jQABAgQIECBAgAABAgQIECBAoHMELly4kIRk9u7dm/mkTz/9dLRp06bo2WefjWpqajIfp5AAAQIECBAg0B0CgjHdoew9CBAgQIAAgVjgzp07SRgmhGLu3btXViZ0glmxYkXyGD16dNljFBAgQIAAAQIECBAgQIAAAQIECHRMoLa2NgnJHDlyJNPJxo4dG4djQkBm9erVmY5RRIAAAQIECBDoagHBmK4Wdn4CBAgQIEAgOnDgQBKIOXPmTCaRJUuWJGGYiRMnZjpGEQECBAgQIECAAAECBAgQIECAQOcLHDt2LAnJhC7AWbZly5YlIZnJkydnOUQNAQIECBAgQKBLBARjuoTVSQkQIECAAIHr169HH3zwQRyI+fzzzzOBzJ07NwnDzJgxI9MxiggQIECAAAECBAgQIECAAAECBLpPIHwA6ptvvomDMnV1dWXfePDgwUlAZuPGjWXrFRAgQIAAAQIEOltAMKazRZ2PAAECBAjkXOCrr75KAjGXLl0qqxGWRlqzZk301FNPRQsWLChbr4AAAQIECBAgQIAAAQIECBAgQKB3COzcuTMqPMIS2uW22bNnJyGZOXPmlCs3ToAAAQIECBDoFAHBmE5hdBICBAgQIJBvgfDpoA8//DD68McOMd/u2ZMJY/ny5XEYJgRihg4dmukYRQQIECBAgAABAgQIECBAgAABAr1P4Pz580lA5vjx45ku8Gc/+1m06dlno2c3bYpCVxkbAQIECBAgQKCrBARjukrWeQkQIECAQA4EPvnkk/8KxPwYirl9+3bZGU+aNCkJw8yaNatsvQICBAgQIECAAAECBAgQIECAAIHKEvj222+TkExDQ0PZiw8/L9r0Yzjm2R9DMsuWLStbr4AAAQIECBAg0F4BwZj2iqknQIAAAQI5Fzh27FgShjl69GhZjT59+iRhmNAdpl+/fmWPUUCAAAECBAgQIECAAAECBAgQIFDZAleuXEkCMgcPHsw0mdWrVydLLY0dOzbTMYoIECBAgAABAuUEBGPKCRknQIAAAQIEosbGxiQM8/HHH2cSmTlzZhKImTJlSqZjFBEgQIAAAQIECBAgQIAAAQIECFSfwKFDh5KQzOXLl8tOsKamJgnI/PSnPy1br4AAAQIECBAgUEpAMKaUjjECBAgQIJBzgT179iSBmHPnzpXVCOtBh64w4bFy5cqy9QoIECBAgAABAgQIECBAgAABAgTyI3Dr1q0kILN79+5ME1+0aFESkpk+fXqmYxQRIECAAAECBFoLCMa01vCaAAECBAgQiMKndj788MPogw8+iL788stMIvPmzUsCMePGjct0jCICBAgQIECAAAECBAgQIECAAIH8Cpw4cSIJydTV1ZWF6N+/fxKQ2bRpUxSW77YRIECAAAECBLIICMZkUVJDgAABAgRyIPDFF18kgZhr166VnXFoaVvoDrN48eKy9QoIECBAgAABAgQIECBAgAABAgQIPChw7969aMeOHUlI5v79+w+WPPR1WML72WefjUJAZv78+Q+N20GAAAECBAgQaC0gGNNaw2sCBAgQIJAzgdra2mSppP3792ea/dKlS5NAzIgRIzIdo4gAAQIECBAgQIAAAQIECBAgQIBAOYGwlHchJHPq1Kly5fH4unXr4oBMCMoMHz480zGKCBAgQIAAgXwJCMbk636bLQECBAgQiMKnbsJSSYVHS0tLWZXx48cnYZg5c+aUrVdAgAABAgQIECBAgAABAgQI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AQIECBAgQIBA5Qjs3bs3Dshs3749unPnTtkL37RpUxyQ+au/+quytQoIECBAgACBRxMQjHk0N0cRIECAQM4Fjh07lgRisrRJnTt3brxUUlguadiwYTnXM30CBAgQIECAAAECBAgQIECAAAEC1S0QllgvdJGpr68vO9lFixYlXWTGjBlTtl4BAQIECBAgkF1AMCa7lUoCBAgQIBB99tlncSDm//txyaTyiyVF0dNPPx0HYp588kl6BAgQIECAAAECBAgQIECAAAECBAjkTKCpqSkJyBw8eLDs7EPH6cIySwsXLixbr4AAAQIECBAoLyAYU95IBQECBAjkXODu3bvRW2+9Ff35z3+Odu/eXVZj9OjRSXeYmTNnlq1XQIAAAQIECBAgQIAAAQIECBAgQIBA9Qvs2bMnCcncu3ev7ISfffbZaMuWLdEzzzxTtlYBAQIECBAgkC4gGJNuY4QAAQIEci5w+/btOBDz5ptvRkePHi2rMXv27CQQM2LEiLL1CggQIECAAAECBAgQIECAAAECBAgQyJ/A999/nwRkLl68WBYgdKV+6aWXoueee65srQICBAgQIEDgYQHBmIdN7CFAgACBnAtcu3YtCcScPn26rMaaNWviQMyqVavK1iogQIAAAQIECBAgQIAAAQIECBAgQIBAEGhsbEwCMocOHSqLsnLlyjgg84tf/KJsrQICBAgQIEDgvwUEY/7bwisCBAgQyLlA+HRGWDIpdIipq6srqVFTU5N0h5k1a1bJWoMECBAgQIAAAQIECBAgQIAAAQIECBAoJRCWcN+2bVv8KFUXxpYsWRIHZLZu3Rr16dOnXLlxAgQIECCQewHBmNx/CwAgQIAAgbNnz8ZhmBCKuXTpUkmQEIJZv359tHbt2iiEY2wECBAgQIAAAQIECBAgQIAAAQIECBDoLIEzZ85E27dvjz799NPo8uXLJU87b968JCAzaNCgkrUGCRAgQIBAngUEY/J8982dAAECORc4efJkEoi5ceNGSY0FCxZEGzdujJ555pmSdQYJECBAgAABAgQIECBAgAABAgQIECDQUYGw3PvHH38cP86fP1/ydD/5yU+SgMyIESNK1hokQIAAAQJ5FBCMyeNdN2cCBAjkXODIkSNJIKapqamkxrJly+JAzNNPP12yziABAgQIECBAgAABAgQIECBAgAABAgQ6W6CxsTEJyJw+fbrk6adMmZIEZMaOHVuy1iABAgQIEMiTgGBMnu62uRIgQCDnAvv27UsCMffv3y+psXr16jgQs2LFipJ1BgkQIECAAAECBAgQIECAAAECBAgQINDVAuHnmYUOMt99913Jt3vssceirVu3xiGZSZMmlaw1SIAAAQIE8iAgGJOHu2yOBAgQyLnAN998Ewdi/vznP5eVWLduXRyIWbx4cdlaBQQIECBAgAABAgQIECBAgAABAgQIEOhugW3btsUhmf3795d865qamiQgM2PGjJK1BgkQIECAQDULCMZU8901NwIECORc4IsvvogDMe+//35Jib59+8ZhmI0bN0Zz5swpWWuQAAECBAgQIECAAAECBAgQIECAAAECvUHgq6++igMy4YOBpbYhQ4YkARk//ywlZYwAAQIEqlVAMKZa76x5ESBAIMcCf/nLX+JATHgutYV/EIYwTHhMnz69VKkxAgQIECBAgAABAgQIECBAgAABAgQI9EqBPXv2xAGZ8EHBUlu/fv2SgMyiRYtKlRojQIAAAQJVJSAYU1W302QIECCQb4HQGebNN9+Myv0DMLQQLQRiJk6cmG80sydAgAABAgQIECBAgAABAgQIECBAoCoEDh8+HAdkPvnkk7Lz2bJlS/TSSy9Fy5cvL1urgAABAgQIVLqAYEyl30HXT4AAAQLRn//85zgQU65l6Pjx45NAzOjRo8kRIECAAAECBAgQIECAAAECBAgQIECg6gROnDgRhXDMxx9/HDU3N5ec3+bNm+OAzFNPPVWyziABAgQIEKhkAcGYSr57rp0AAQI5Frh//3701ltvxYGYffv2lZSYOnVqEogZNmxYyVqDBAgQIECAAAECBAgQIECAAAECBAgQqAaBs2fPxuGYEJC5efNmySmFDtuhg8z69etL1hkkQIAAAQKVKCAYU4l3zTUTIEAgxwJNTU1JIObIkSMlJR5//PEkENO/f/+StQYJECBAgAABAgQIECBAgAABAgQIECBQjQI//PBDEpC5dOlSySmuXbs2Dsg8++yzJesMEiBAgACBShIQjKmku+VaCRAgkGOBGzduJIGYkydPlpRYuHBhHIjZsGFDyTqDBAgQIECAAAECBAgQIECAAAECBAgQyIvA9evXk4BMXV1dyWmvWrUqDsj8/Oc/L1lnkAABAgQIVIKAYEwl3CXXSIAAgRwLhE8wFJZMCq0/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yIHAJ598EodiDhw4UHS2Q4cMiba+9FL0N3/zN0XH7SRAgAABAgQIECBAgAABAgQIECBAgAABAgQI9HaBy5cvx+GY9957L/VSw7JKISATllmyESBAIG8CgjF5u+PmSyAHAhcvXowDMa+//nrqbJ9++ul42aQZM2ak1hggQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFSKwDfffBMHZI4ePVr0kocNGxaHY37zm98UHbeTAAEC1SogGFOtd9a8CORU4O23345+97vfRbW1tUUFJk6cGAdifvaznxUdt5MAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUKkCd+/ejcMxb775ZnTnzp2i01i9enX06quvRuHZRoAAgTwICMbk4S6bI4EcCBw7dizuEvPuu++mzvaFF16IQzGjRo1KrTFAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKh0gdA15q233oq+/vrr1KmEzjFheaXQScZGgACBahYQjKnmu2tuBHIi8G//9m/RP//zP0fXr18vOuOwXuZLL70ULV++vOi4nQQIECBAgAABAgQIECBAgAABAgQIECBAgACBahR477334oDMpUuXik4v/A7lf/2v/xVt2LCh6LidBAgQqAYBwZhquIvmQCCnAmfOnIn+6Z/+KUrrEjNw4MBo69atcSimb9++OVUybQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCDPAhcuXIiXV/roo49SGf7hH/4hDsj0798/tcYAAQIEKlVAMKZS75zrJpBzgT/84Q9xKKa+vr6oxKpVq+JAzOOPP1503E4CBAgQIECAAAECBAgQIECAAAECBAgQIECAQJ4Edu7cGQdkTp48WXTaofP+//7f/ztauXJl0XE7CRAgUKkCgjGVeudcN4GcCoRWf6FLzH/8x38UFRg3blwciNm0aVPRcTsJECBAgAABAgQIECBAgAABAgQIECBAgAABAnkVaGpqisMxb775ZlGC0IE/LK306quvFh23kwABApUoIBhTiXfNNRPIqcCHH34Yh2JOnDhRVGD9+vXRr371q2j8+PFFx+0kQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCIogMHDkS///3voyNHjhTlWLduXdw9Zv78+UXH7SRAgEAlCQjGVNLdcq0EcirQ2NgYB2Jee+21ogIjR46MAzHPPfdc0XE7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n9J4t+F9M85z1jDQKrTneBh91jIUgXwiQOaCRx991LzxxhuezWB9u3fv3p77dKMioAgoApkQUGJMJnR0nyJQogg8//zzlhRDbsdUYRGva9eu5uCDD07dpb8VgaJD4LXXXjOXX365qF8sAkycOFGkmy+lv/76yxx99NGGxWCJ9OrVyxxzzDES1Uh1WJBYsGCBefPNNw3eA6tXry77/Pnnn21bMPJg7OFvu+22M/Xr17d/O+20k90WaYNzUNm3335rFi5caEj39d1335nvv//e/mG85o/F7D///NPWnDDAcP8GD1Lg8b1q1aqmQYMG9o+IR4UsnBOffPKJ+eijj+wn33mGsUjHOcF+JIFF4tzYZpttzM4772x22WUXs8MOOxQcgYSFWs6Dt956y14Da9asMZwbfHJeJM4BxnvzzTc3//d//1f2ueuuu5q9997bng+FPPZxbDv32g8//NDep/hkPBLXJp+JceG5wbgk/9WsWdOOS7169WJFaKPdnTp1EsF94IEHmosuukikW4pKifODa5f7FNhyD0988j3xLAMfzhOu4cS9O3Efr127ttl9993NjjvumLc0jkqMif8ZzILy4sWLzaJFi+ycYdWqVXaO8Msvv9jGM19iPlCjRg37V716dTsv2HfffcXnlRJj1p4H3N8//fRTize4L1myxF7fzMv4S8xHIEduttlm6/xVqVLF1KpVyzRq1Mhwfeeb1FxMxJhly5aZZ5991o4H37kOGAtIHzyDmQMyJ95jjz3sPXXtiMbnW66IMV988YV1hlq6dGnZ+xTvV7wvcg7y7OG+wLsCf3hpN23a1J6j8UFHW5KMgBJjktGQfWeu/vbbb9u/r776yr5HMS/jfSoxJ0tcD8nzdt6tuHc0bty4IAiPMjS8tcBj9uzZhntG8voL94tff/3VHsR8FUz4Y27BuzbzCd638/1M8+5V+a3F9Bwv3zvdoggUJgJPPPGEefrppz0bz9rDeeedZ+fQngq6URFQBBQBDwSUGOMBim5SBEoZgbvuuss88MADnhBgOOzWrZvZfvvtPffrRkWg2BBwjbDy2GOP2YXDOOPQt29faxjJ1kYMcSeccIL9y6abaT/kleeeey6Tit136KGHmr322iuj3pdffmlefPFF88ILL5iVK1dm1E23E0PEPvvsY6jPxeiTrryoticv1rFox+J1mMKiVcOGDa2R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ioAiEBQBnFF5N/DKCFGjRg1z0UUXGdbJVBQBRSA+CCgxJj5joS0pAQTIFU+UmPHjx3v29uijjzYnnHCC5z7dqAgoAopAUAQw3l1xxRUGLx0XCeKFKSXGEKWldevWLs3Kia6LB1MYBimi+BB1htR6+ZbatWvbEP2bb765uf3220XN8UuCOPbYY204Y0klw4cPN9tuu61ENdY6pLHJtwEtCoDyla/eb99OPPFE880334gOh9Rcr149kW5UStJ7LO3Zf//9Damj/IgSY7xRmzJliiU1EjEjn1KhQgWDgZw0K4TdX7x4sag5SowRwRSpkktKxx122MHcddddkbYvXWVEC/v111/T7bbbi4UYk+gkhk3uwRjo/URlTJQT9HOjjTYyGMJZR9hggw2CFld2vBJjyqBI+yWOxJiePXsa5tn5lldffdVceeWVombw7MJo5CJKjEmPVjETYyZPnmyjdqXv/do9++23n137WLslHt+4V0ufGffee6/hHV0qSoyRIvWvXrE/x93QUG1FQBEIggDrJZBj5syZ41kMa95Ee1RRBBSBeCCgxJh4jIO2ogQQ4AUFUozXA5JIDESJIZSliiKgCCgCuUTg66+/NqeddppTmgcMxyeddJKvZkmNtmeffbY54ogjfNUR5kEQVIisI5FddtnF3HrrrRJVTx2iw5DiauXKlZ77c72xYsWKhnRQjRo1MnvttVfZotubb75pw31K6vdLjOF8kvbb1VNO0u586LiEzc5H+8Kq84ADDhCfP2HVGaSc008/XRypCRIb10ycZMyYMQZyg0SChExXYsy6CP/9998W9yeffHLdHRH+gjDI/Zu/xo0bG+7pCItupAWUiBJjJChFq7Nw4UIzYMAAUaXbbLON+PoXFRhASfKMKzZiTAIuSK9vvfWWmTlzpk2lli+iHM9fyAXrrbdeommBPpUYkx2+OBJjmGPz7pZvefHFF81NN90kagbvgLwLuogSY9KjVczEmJdfftngtCMRUlgMGTJEohqpDlFypSk3H374YaeIYEqM8TeUxfoc94eGHqUIKAJBEHj00UdtJFmvMiBGXnDBBV67dJsioAhEjIASYyIGXKsrTQTmzZtnSTFLliwpB8AWW2xhSTF77rlnuX26QRFQBOKJAB6xa9asMVWqVCkzRMWzpd6tIgLH2LFjvXd6bIU0IV2ASj1cSow59dRTDel1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mu/rNd/d4307foeJ7+5xif+lIizle1vlP1d8jlf+PraFBCpZQDimkveubWuNgGBMa/Q8tuwFGgvFHHHEEdlQCWW/AVaQAAECHVyg1MGYDs5j9QkQIECAAAECBAgQIECAAAECBAgQIECAQFEFhGOKymlmFSIgGFMhO9JmFAo0Foo56qij0l577VX4ABUCBAgQKLqAYEzRSc2QAAECBAgQIECAAAECBAgQIECAAAECBAgsVEA4ZqE8bqxCAcGYKtzp1bDJjYVijj766PSDH/ygGghsIwECBMpCQDCmLHaDlSBAgAABAgQIECBAgAABAgQIECBAgACBKhMQjqmyHW5zFyogGLNQHjd2RIHGQjHHHnts2mOPPTriJllnAgQIdFgBwZgOu+usOAECBAgQIECAAAECBAgQIECAAAECBAh0cAHhmA6+A61+0QQEY4pGaUblINBYKOa4445Lu+++ezmsonUgQIBAVQkIxlTV7raxBAgQIECAAAECBAgQIECAAAECBAgQIFBmAsIxZbZDrE67CAjGtAu7hZZCoLFQzAknnJC+//3vl2KR5kmAAAECixAQjFkEkJsJECBAgAABAgQIECBAgAABAgQIECBAgECJBYRjSgxs9mUvIBhT9rvICjZFoLFQzIknnph23XXXpszCfQgQIECgBAKCMSVANUsCBAgQIECAAAECBAgQIECAAAECBAgQINBMAeGYZoK5e0UJCMZU1O6szo1pLBRz8sknp+9973vViWKrCRAgUCYCgjFlsiOsBgECBAgQIECAAAECBAgQIECAAAECBAhUvYBwTNU/BaoWQDCmand9ZWx4Y6GYH//4x2nnnXeujI20FQQIEOjAAoIxHXjnWXUCBAgQIECAAAECBAgQIECAAAECBAgQqDgB4ZiK26U2qAkCgjFNQHKX8hRoLBTzk5/8JO20007ludLWigABAlUmIBhTZTvc5hIgQIAAAQIECBAgQIAAAQIECBAgQIBA2QsIx5T9LrKCRRYQjCkyqNm1jUBjoZhTTz01ffe7322blbAUAgQIEFikgGDMIoncgQABAgQIECBAgAABAgQIECBAgAABAgQItLmAcEybk1tgOwoIxrQjvkW3TKCxUMzpp5+ett9++5bN1KMIECBAoCQCgjElYTVTAgQIECBAgAABAgQIECBAgAABAgQIECDQagHhmFYTmkEHERCM6SA7ymr+W6CxUEzfvn3Ttttui4kAAQIEykxAMKbMdojVIUCAAAECBAgQIECAAAECBAgQIECAAAECdQSEY+pguFqxAoIxFbtrK2/DGgvFnHnmmWmbbbapvA22RQQIEKgAAcGYCtiJNoEAAQIECBAgQIAAAQIECBAgQIAAAQIEKlpAOKaid6+N+5eAYIynQYcQaCwU87Of/Sx9+9vf7hDbYCUJECBQjQKCMdW4120zAQIECBAgQIAAAQIECBAgQIAAAQIECHQ0AeGYjrbHrG9zBARjmqPlvu0i0Fgo5uyzz07f+ta32mWdLJQAAQIEmiYgGNM0J/ciQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtLSAc0957wPJLJSAYUypZ8y2KQGOhmP79+6fGbivKgs2EAAECBIoiIBhTFEYzIUCAAAECBAgQIECAAAECBAgQIECAAAECbSIgHNMmzBbSxgKCMW0MbnFNF2gs+DJgwIC05ZZbNn1G7kmAAAEC7SYgGNNu9BZMgAABAgQIECBAgAABAgQIECBAgAABAgRaJCAc0yI2DypjAcGYMt451bxqO+20U/r4448LCAYNGpS22GKLgroCAQIECJSngGBMee4Xa0WAAAECBAgQIECAAAECBAgQIECAAAECBBYm0Fg4plevXmnUqFELe6jbCJSdgGBM2e0SK7TffvulN954owBi8ODBafPNNy+oKxAgQIBA+QoIxpTvvrFmBAgQIECAAAECBAgQIECAAAECBAgQIEBgYQKNhWOOPPLIdOaZZy7soW4jUFYCgjFltTuszDHHHJP+53/+pwDivPPOS5tuumlBXYEAAQIEyltAMKa894+1I0CAAAECBAgQIECAAAECBAgQIECAAAECCxMY+q/jtNNnzCi4SwRjIiBjItARBARjOsJeqpJ1jDfPqVOnFmzt6aefnrbffvuCugIBAgQIlL+AYEz57yNrSIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFibQt2/fNHv27IK7xJBKMbSSiUC5CwjGlPseqpL1Gz58eLrjjjsKtjZShnvvvXdBXYEAAQIEOoZADI33l7/8pUkru8UWW6R11123Sfd1JwIECBAgQIAAAQIECBAgQIAAAQIECBAgQKDtBI477rg0d+7cggVef/31aauttiqoKxAoJwHBmHLaG1W6LldccUWaNGlSwdZHIEb3WwUsCgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGhTgQULFqTDDjuswWXedtttaYMNNmjwNkUC5SAgGFMOe6GK1+HGG29MY8eOLRCIoZNiCCUTAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECLS/wEcffZROPPHEBlfk7rvvTmuvvXaDtykSaG8BwZj23gNVvPx4cxw4cGCBwMYbb5yGDRtWUFcgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgfYTmD17durbt2/BCiy55JLp/vvvTyussELBbQoE2ltAMKa990CVLv/xxx9Pp5xySsHWf+1rX2uwB5mCOyoQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQJsLzJw5Mw0ePLhgueuuu276wx/+kBZbbLGC2xQItKeAYEx76lfpsl988cV06KGHFmz96quvnq688sqCugIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIlI/AU089lcaMGVOwQltttVW6/vrrC+oKBNpTQDCmPfWrcNnvvPNOOvDAA9O8efNyW7/sssumiRMnpiWWWCJX1yBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB8hOYOnVqmjBhQsGK9erVK40aNaqgrkCgvQQEY9pLvgqX++WXX6Z99903zZkzJ7f10ZXW+PHj05prrpmraxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA+Qr87ne/S7/61a8KVvDII49MZ555ZkFdgUB7CAjGtId6lS4zhk+KYZTqT8OGDUsbb7xx/bI2AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECJS5wA033JDuvPPOgrU89dRT049+9KOCugKBthYQjGlr8Spd3kknnZSeeOKJgq0//fTT0/bbb19QVyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBjiFw5ZVXpoceeqhgZQcMGJB69+5dUFcg0JYCgjFtqV2ly+rXr1+67777CrY+us/ae++9C+oKBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCxBEaOHJmeffbZgpUeMWJE2muvvQrqCgTaSkAwpq2kq3Q5w4cPT3fccUfB1u+///6pT58+BXUFAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEOh4AgsWLEiDBg1Ks2bNKlj5Sy65JPXs2bOgrkCgLQQEY9pCuUqXcdlll6XJkycXbH2vXr2MJVegokCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGOLfDRRx+lGD7pvffeK9iQiRMnpq233rqgrkCg1AKCMaUWrtL5RyAmgjH1px133DH99Kc/rV/WJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEKEJg9e3Y6++yz0/z583Nbs+SSS6YpU6akTTbZJFfXIFBqAcGYUgtX4fxj6KQYQqn+FOm/fv361S9rEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEAFCcycOTMNHjy4YIvWXXfddNVVV6X11luv4DYFAqUSEIwplWyVzve+++5rMPyy2WabpSFDhlSpis0mQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAdQk8/fTTafTo0QUb3aNHj3TxxRenVVddteA2BQKlEBCMKYVqlc7ziSeeSGeeeWaaN29eTqBbt25ZDzJLLLFErq5BgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABApUr8PDDD6crrriiYAO33377LByz1FJLFdymQKDYAoIxxRat0vm9+OKLqW/fvmnOnDk5gbXXXjsNGjQorbnmmrm6BgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhUvsDdd9+dJk+eXLChu+22WxozZkxBXYFAsQUEY4otWoXzizBMhGIiHFN3WmmlldLPfvaz1L1797pl1wkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgigRuu+22dOuttxZs8QEHHJCGDBlSUFcgUEwBwZhialbhvGLYpBg+KYZRqjt16tQpC8XE+HAmAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKhugeg1JnqPqT8dccQR6ayzzqpf1iZQNAHBmKJRVueM+vXrl+67776CjT/jjDPSdtttV1BXIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHqFLjiiivSww8/XLDxJ510Ujr55JML6goEiiEgGFMMxSqdx7hx49Ivf/nLgq2PN61ddtmloK5AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAtUrsGDBgjR27Nj09NNPFyAMGzYs7bvvvgV1BQKtFRCMaa1glT7+pptuSmPGjCnY+qOOOirttddeBXUFAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDw0UcfZeGYmTNn5jCWXnrpdPnll6ett946V9cg0FoBwZjWClbh4x988MEUQyXVnw455JB08MEH1y9rEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBWoHZs2dnHTHMmTOnthZXunXrlsaPH5/WXXfdXF2DQGsEBGNao1eFj43U3mmnnZbefvvt3NbvvPPO6cc//nGupkGAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBoSmDZtWho9enSaP39+7uYddtgh6zlmscUWy9U1CLRUQDCmpXJV+Li5c+emU089NT377LO5rd90001T//7901JLLZWraxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYEpk6dmiZMmFBwc4xWMnDgwIK6AoGWCAjGtEStSh8zaNCgdNddd+W2fo011shCMZ07d87VNQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwKIEbrvttnTrrbcW3O30009PxxxzTEFdgUBzBQRjmitWpfe/8sor03XXXVew9dFTzFZbbVVQVyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAk0RiF5joveY+tOoUaNSr1696pe1CTRLQDCmWVzVeec77rgjDR8+vGDjjzvuuLT77rsX1BUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBTBebPn59Gjx6dpk2blnvISiutlC6//PL0jW98I1fXINAcAcGY5mhV4X0ff/zxdOqpp6Yvv/wyt/X77LNPOuKII3I1DQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0BKBOXPmZOGY+Ft32mSTTdL48ePT6quvXrfsOoEmCwjGNJmq+u74+uuvp9NOOy298cYbuY3fdtttU9++fXM1DQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0BqB6DEmeo6JHmTqTrvuumsaO3Zs3ZLrBJosIBjTZKrqumO80URPMf/93/+d2/ANNtgg9e/fP6244oq5ugYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGitwNSpU9OECRMKZhMjmpx11lkFdQUCixIQjFmUUJXefv7556ff/OY3ua2PMEyEYiIcYyJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAqUQuO2229Ktt95aMOuzzz479enTp6CuQGBhAoIxC9Op0tuuu+66dOWVVxZsfQyfFMMomQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQCkFoteY6D2m/nTJJZeknj171i9rE2hUQDCmUZrqvOGPf/xjOvfccws2Prql2meffQrqCgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoNgC8+fPT6NHj07Tpk3LzXrNNddMl19+eerevXuurkGgMQHBmMZkqrD+zDPPpFNPPTXNmzcvt/W77757Ou6443I1DQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUEqBOXPmZOGY+Ft32nLLLbNwzPLLL1+37DqBBgUEYxpkqb7i22+/nYViXnrppdzGb7XVVql///65mgYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGgLgegxJnqOiR5k6k4/+MEP0gUXXFC35DqBBgUEYxpkqb7iGWeckR588MHchnfu3DkLxayxxhq5ugYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGgrgalTp6YJEyYULC5GPvnpT39aUFcgUFdAMKauRpVej3Tdr3/969zWL7XUUlkoZtNNN83VNQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQFsL3HbbbenWW28tWOzgwYPTgQceWFBXIFAjIBhTI1Glf2+44YZ08cUXF2z9j3/847TzzjsX1BUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEB7CESvMdF7TN1piSWWSOPHj0/bbbdd3bLrBGoFBGNqKarvyn333Zf69etXsOGHHHJIOvjggwvqCgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoL0E5s+fn2JElGnTpuVWYb311svCMV26dMnVNQiEgGBMlT4PXnjhhXTaqaem995/PycQvcREbzEmAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQbgJz5szJwjHxt+60zTbbpMsvvzwtueSSdcuuExCMqcbnwIcffphO/Vco5vnnn89t/qabbpr69++fllpqqVxdgwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIlItA9BgTPcdEDzJ1pwMOOCANGTKkbsl1AoIx1fgcOOecc9K9996b2/Q11lgjC8V07tw5V9cgQIAAAQIECBAgQIAAAQIECBA6zTRIAABAAElEQVQgQIAAAQIECBAgQIAAAQLlJjB16tQ0YcKEgtWKEVJOOOGEgrpC9QoYSqnK9v2ll16apkyZUrDV0VPMVlttVVBXIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC5Shw2223pVtvvbVg1UaMGJH22muvgrpCdQoIxlTRfr/lllvSyJEjC7b4uOOOS7vvvntBXYEAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECJSzQPQaE73H1J2WW265dPnll+scoi5KFV8XjKmSnf/444+nU045pWBr99lnn3TEEUcU1BUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEC5C8yfPz+NHj06TZs2Lbeq3bt3T1dffXVaddVVc3WN6hMQjKmCff7hhx9moZgZM2bktnbbbbdNffv2zdU0CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBARxKYM2dOFo6Jv3WnfffdNw0bNqxuyfUqFBCMqYKdHi/03/72t7kt3WCDDVL//v3TiiuumKtrECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBjiYQPcZEzzHRg0zd6eyzz059+vSpW3K9ygQEYyp8h998881p1KhRua3s1KlTOvfcc9NGG22Uq2sQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGOKnDvvfemSZMm5VY/jo9PmDAhbbXVVrm6RvUICMZU8L7+n//5n2wIpU8//TS3lccee2zaY489cjUNAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQ0QWuueaa9MADD+Q2Y4sttsjCMcsss0yurlEdAoIxFbqfP//88ywU88wzz+S2sGfPnlk9V9QgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIVIDB37tw0YsSINGvWrNzW9O7dOw0YMCBX06gOAcGYCt3PY8aMSTfddFNu67p06ZINobTiiivm6hoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBSBKZNm5aFY+pvz5AhQ9IBBxxQv6xd4QKCMRW4g3/3u9+loUOHFmzZwIEDU48ePQrqCgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoJIEfv/736cbb7wxt0krrbRSuvrqq9Mmm2ySq2tUtoBgTIXt3xdffDEbKumDDz7IbVmfPn3S/vvvn6tpECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBShW47LLL0qOPPprbvG222SYLxyy22GK5ukblCgjGVNi+/fGPf5wee+yx3FZtu+22qW/fvrmaBgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqGSBd999N11wwQVpzpw5uc08+uij0xlnnJGraVSugGBMBe3b8ePHp5///Oe5LVprrbXSoEGDUvw1ESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBahJ44okn0rhx4wo2eeTIkWmPPfYoqCtUnoBgTIXs03vvvTedc845BVsTPcVEjzEmAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQjQI333xzuuOOO3Kbvvbaa2dDKnXt2jVX16g8AcGYCtinb7zxRjrllFPS7Nmzc1uz//77pz59+uRqGgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoNoERo0alZ555pncZvfs2TNdcskluZpG5QkIxlTAPj3rrLPSAw88kNuSHj16pIEDB+ZqGgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoBoF3nzzzTRixIj04Ycf5jb/pJNOSieffHKuplFZAoIxHXx/Tpw4MV111VW5rVhxxRXTueeem7p06ZKraxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgWoVeOihh9KVV15ZsPnRa0z0HmOqTAHBmA68Xx9++OF02mmnFWxBDKvkRVvAokCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECVS4wZcqUdNddd+UUunbtmq6++uq09tpr5+oalSEgGNNB9+O7776bdef06quv5rZgjz32SMcee2yupkGAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAik9OWXX2ZDKk2fPj3HEcfaR44cmatpVIaAYEwH3Y+DBg0qSLFttNFG2RBKnTp16qBbZbUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBpBV566aUsHPPZZ5/lFnTGGWeko48+OlfT6PgCgjEdcB/ecMMN6eKLL86teYRhzj333BThGBMBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQuMC9996bJk2alLvDYostlg2ptM022+TqGh1bQDCmg+2/J598Mp1yyilpwYIFuTWP4ZOiaycTAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsGiBa665Jj3wwAO5O26yySZZOGallVbK1TU6roBgTAfadx9//HEWivnLX/6SW+uePXtm9VxRgwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGhUYO7cudmQSrNmzcrd54ADDkhDhgzJ1TQ6roBgTAfadyNGjEi33357bo27dOmSDaG04oor5uoaBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwMIFpk2bloVj6t9rwIABqXfv3vXL2h1QQDCmg+y02267LV1wwQUFaztw4MDUo0ePgroCAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsGiB3//+9+nGG2/M3XGZZZZJEyZMSFtssUWurtHxBARjOsA+e/7559PJJ5+c5s2bl1vbPn36pP333z9X0yBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaJ3DZZZelRx99NPegrbbaKgvHdOrUKVfX6FgCgjFlvr++/PLLLBTz1FNP5dZ02223TX379s3VNAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHmC7z77rvZKC5z5szJPTg6rDj77LNzNY2OJSAYU+b7a+zYsQVdNq211lpp0KBBKf6aCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgdYLPPHEE2ncuHEFMxo2bFjad999C+oKHUNAMKaM99Odd96ZBg8eXLCG0VNM9BhjIkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBIoncPPNN6c77rgjN8NVV101XX311al79+65ukbHEBCMKdP9FN0zHX/88Wn27Nm5Ndx///1TdNVkIkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBIovMGrUqPTMM8/kZvy9730vXXzxxbmaRscQEIwp0/00dOjQ9Lvf/S63dj169EgDBw7M1TQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB4gm8+eabacSIEenDDz/MzfTss8/WkUVOpGM0BGPKcD/98Y9/TOeee25uzZZddtl03nnnpa5du+bqGgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBxBf70pz9lwyfVnevKK6+cJk6cmDbccMO6ZdfLXEAwpsx20DvvvJNOOOGE9MYbb+TW7Igjjkj77LNPrqZBgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIlEbgiiuuSA8//HBu5t///vfTRRddlKtplLeAYEyZ7Z/hw4enO+64I7dWW265ZRowYECupkGAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiUTmD27Nlp2LBhBUMqxfH73r17l27B5lxUAcGYonK2bmb33HNPQQBm8cUXT0OHDk3du3dv3cw9mgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGiWwL333psmTZqUe8xqq62WDam0/vrr5+oa5SkgGFMm++W9997LhlCaNWtWbo0iZXbQQQflahoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA2wiMGzcuPfHEE7mF7bHHHmnkyJG5mkZ5CgjGlMl+iRfMLbfcklubTTbZJOstJlfUIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNpM4LXXXsuGVPrkk09yyxw8eHA68MADczWN8hMQjCmDfXLfffelfv36FazJueeem77xjW8U1BUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBthP4wx/+kH75y1/mFrjmmmtmQyqtt956ubpGeQkIxrTz/vjwww+zIZRefvnl3Jrsv//+qU+fPrmaBgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINA+AjESzLPPPptb+F577ZVGjBiRq2mUl4BgTDvvjzFjxqSbbroptxYbbLBBNoRSp06dcnUNAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoH0EZs6cmR3LX7BgQW4Fhg4dmvbbb79cTaN8BARj2nFfTJ06NZ155pkFa3D22Wenb33rWwV1BQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKD9BG6//fZ0yy235Fbgq1/9arruuuvSOuusk6trlIeAYEw77Ye5c+em448/Pr344ou5Ndhzzz3TMccck6tpECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAuUhED3ETJ8+Pbcy++67bxo2bFiuplEeAoIx7bQfxo0bl375y1/mlv61r30tnXfeeWmFFVbI1TUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB8hCYNm1aGjFiRMHKDB8+PO29994FdYX2FRCMaQf/hx56KJ1++ukFSz7jjDPSdtttV1BXIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBMpH4Kabbkq//e1vcyvUuXPnbEiltdZaK1fXaF8BwZg29v/000+zIZReeOGF3JJ33XXXdOKJJ+ZqGgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgED5CXzxxRcphlR65ZVXcit3wAEHpCFDhuRqGu0rIBjTxv6XXnppmjJlSm6pa665ZvaCWW211XJ1DQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKA8BZ566qk0ZsyYgpW78MIL05577llQV2gfAcGYNnR/5JFH0k9/+tOCJZ5yyimpZ8+eBXUFAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoHwFJk+enO6+++7cCnbp0iUbUmn11VfP1TXaR0Awpo3coxul448/Pk2bNi23xB133LHBsEzuThoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA2Ql8/PHHadiwYenNN9/MrdvBBx+cBg0alKtptI+AYEwbuV9++eXp+uuvzy1t5ZVXTuedd15aZ511cnUNAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoGMIPPbYY+nSSy8tWNnRo0en3XffvaCu0LYCgjFt4P3444+nGC6p/nTcccd5EdRH0SZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAh1M4Nprr033339/bq27deuWDam0yiqr5OoabSsgGFNi7wULFmRDKD377LO5JX3nO99JZ511Vq6mQYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECHQ8gffeey8NHTo0vfPOO7mV/+EPf5j69++fq2m0rYBgTIm9r7rqqjRx4sTcUpZddtlsCKWuXbvm6hoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAxxT405/+lK6++uqClR87dmzaddddC+oKbSMgGFNC5yeffDKdeOKJBUs44ogj0j777FNQVyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQ6rsAVV1yRHn744dwGfP3rX8+GVFpxxRVzdY22ERCMKaHz8ccfn5566qncErbccss0YMCAXE2DAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ6PgCs2fPTsOGDUsffvhhbmMOO+yw1K9fv1xNo20EBGNK5HzDDTekiy++ODf3xRdfPBtTrHv37rm6BgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFAZAvfee2+aNGlSwcZce+216dvf/nZBXaG0AoIxJfCdM2dOOvroo9O7776bm3vv3r3TQQcdlKtpECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABApUlMG7cuPTEE0/kNmrHHXdM48ePz9U0Si8gGFMC4zFjxqSbbropN+eNNtoonX/++bmaBgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFB5ArNmzUpDhgxJX3zxRW7jYpilfffdN1fTKK2AYEyRfZ9++ul03HHHFcz1Z2edlb79ne8U1BUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACByhO45ZZb0u23357bsA033DBNmTIlLbvssrm6RukEBGOKbNu3b9/0pz/9KTfXnXbaKf3kJz/J1TQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACByhX49NNP0+DBg9Obb76Z28iTTz45nXTSSbmaRukEBGOKaHvnnXdmT+q6s1x66aXT8OHD03rrrVe37DoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQ4QIPPvhguuqqq3Jbudxyy2W9xmywwQa5ukZpBARjiuT62WefpWOOOSa9+OKLuTkecsgh6eCDD87VNAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHqEBg7dmx68skncxu73377paFDh+ZqGqUREIwpkuvEiRMLUl5du3ZN559/flpqqaWKtBSzIUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBDqSQHSwMWTIkIJVHj9+fNpxxx0L6grFFRCMKYLnrFmz0tFHH50+/vjj3NxOPfXU9N3vfjdX0yBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqS+CGG25Id955Z26jv/Od76RrrrkmV9MovoBgTBFMo1eY3/zmN7k5bbPNNunMM8/M1TQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB6hP48MMPs15j3n777dzGDxgwIPXu3TtX0yiugGBMKz0fffTR9JOf/CQ3l6985SvZEEpf//rXc3UNAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoDoF/vM//zNdd911uY3v3LlzmjJlSlp11VVzdY3iCQjGtNLylFNOSY8//nhuLvvtt1867LDDcjUNAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoLoFLrjggvTcc8/lEI455ph0+umn52oaxRMQjGmF5e23355GjBiRm8NXv/rVNHz48LTCCivk6hoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAdQtEKCbCMXWnxRdfPOs1ZrPNNqtbdr1IAoIxLYSM8b8itfX666/n5nDiiSemXXfdNVfTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiEwKRJk9K9996bw+jVq1caNWpUrqZRHAHBmBY6Xn755en666/PPXqrrbZK/fv3z9U0CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1Au+8804aPHhwig456k4XXXRR+v73v1+35HoRBARjWoA4ffr0rLeYL774IvfoIUOGJF0b5Ug0CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgXoCd955Z7rhhhty1S222CJNnjw5LbbYYrm6RusEBGNa4Ddw4MB099135x65xx57pGOPPTZX0yBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQINCRw3nnnpRkzZuRu6tu3bzrqqKNyNY3WCQjGNNPvgQceSGeddVbuUauttlo6//zz0+qrr56raxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEGhL485//nGL4pLpT5A6mTJmS1llnnbpl11shIBjTTLzoFebZZ5/NPeqYY45Je+65Z66mQYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYmMBVV12VHnzwwdxdDj300HTOOefkahotFxCMaYbdjTfemMaOHZt7xKabbpqieyMTAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKA5Am+++WYaMmRI+uSTT3IPu+6669K3vvWtXE2jZQKCMU10+9vf/paiZ5i3334794hIaX3zm9/M1TQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAk0RuOOOO9LNN9+cu+vOO++cLr300lxNo2UCgjFNdIueYqLHmLrTLrvskk466aS6JdcJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAk0WmD9/fho8eHCaNWtW7jHDhw9Pe++9d66m0XwBwZgmmD3zzDPpRz/6Ue6eyy+/fIon4TrrrJOraxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmiPwyCOPpPHjx+ce0r179zR58uS0zDLL5OoazRMQjGmC15lnnpmmTp2au2efPn3S/vvvn6tpECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRaIhBDJz322GO5h55yyinpxBNPzNU0micgGLMIr7vuuisNGjQod68NN9wwnX/++WnxxRfP1TUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAi0ReOWVV7IhlRYsWFD78BVWWCHrNaZbt261NVeaJyAYsxCvf/7zn+nwww9P06dPz92rb9++adttt83VNAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECrRG46aab0m9/+9vcLA488MAsMJMrajRZQDBmIVS33npruvDCC3P32GGHHdJpp52Wq2kQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBForMHfu3DRkyJD01ltv5WZ1ww03pM033zxX02iagGBMI05ffvll1lvMzJkza++x2GKLZUEZXRTVkrhCgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIFFHg/vvvT9dee21ujvvtt18aOnRorqbRNAHBmEacfv3rX6fRo0fnbt1tt93S8ccfn6tpECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSKKTBo0KD08ssv52Y5efLk1KNHj1xNY9ECgjENGH3++edZbzGvvPJK7a2LL754GjlyZOrSpUttzRUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQLEFpk6dmiZMmJCb7d57752GDx+eq2ksWkAwpgGjG2+8MY0dOzZ3yx577JGOPfbYXE2DAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFAKgcGDB6eZM2fmZj1p0qT0zW9+M1fTWLiAYEw9n3nz5qUjjjgivfbaa7W3dOrUKestpnPnzrU1VwgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECpRJ46KGH0pVXXpmb/Z577pkuvPDCXE1j4QKCMfV8pkyZki699NJcda+99kpHHXVUrqZBgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECilwNChQ9P06dNzi7j22mvTt7/97VxNo3EBwZg6Nv/7v/+bDj/88PTXv/61trrMMstkaat11lmntuYKAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKDUAo888kgaP358bjG77757Gj16dK6m0biAYEwdm+uvvz5dfvnldSop7bPPPtnQSrmiBgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgDQSGDx+enn/++dySrrrqqrTddtvlahoNCwjG/J/LBx98kPUWM2fOnFqp5ZZbLo0cOTKttdZatTVXCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJtJfDYY4+lSy+9NLe4XXbZJY0bNy5X02hYQDDm/1wmTpyYIlFVd9p///1Tnz596pZcJ0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAi0qcAFF1yQnnvuudwyY0Sc7373u7maRqGAYMy/TP7+979nvcW88847tUIrrrhi1lvM6quvXltzhQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQ1gJPPPFEQQ8xO++8c0FPMm29Xh1heYIx/9pLEyZMSNdcc01ufx100EGpd+/euZoGAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKA9BEaNGpWeeeaZ3KJjiKUIyJgaF6j6YMzbb7+d9Rbz3nvv1Sqtssoq6cILL0yrrrpqbc0VAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEB7CTz11FNpzJgxucXHUEoxpJKpcYGqD8ZcccUVadKkSTmhQw45JB188MG5mgYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoD0FLvpXMObP/wrI1J3GjRuXdtlll7ol1+sIVHUw5q233sp6i/noo49qSVZbbbU0cuTItNJKK9XWXCFAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQItLdADKUUQyrVnbbbbrt01VVX1S25XkegqoMxl112WZo8eXIdjpQOPfTQdMABB+RqGgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBchCIHmKeeOKJ3KqMHj067b777rmaxr8FqjYY88Ybb2S9xcydO7f2ubDmmmumCy+8MK2wwgq1NVcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAuUi8Nxzz6ULLrggtzrf/va307XXXpurafxboGqDMRdffHG64YYbcs+Dww47LO233365mgYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoJwELr300vTYY4/lVik6Atlzzz1zNY2UqjIYM2vWrKy3mE8//bT2ObD22munkSNHpmWXXba25goBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoNwEnn/++TR8+PDcan3zm99MkyZNytU0qjQYc9FFF6Vf/epXuf1/5JFHpr333jtX0yBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIlKPA+PHj0yOPPJJbtQjLyD7kSKqvx5iXX3456y3miy++qJVYd911s95illpqqdqaKwQIECBAgACBShX48ssvU1zmz5+fXepej1ox20suuWSKyxJLLJH9LUU75h0XEwECBAgQIECAAAECBAgQIECAAAECBAgQqCaB6dOnp6FDh+Y2uUePHmny5Mm5WrU3qm4opVGjRqWbb745t9+POeYY42zlRDQIECBAgACBjiQQgd+PPvoo/e///m92qbne2N8IvlTaFMGYFVdcMa200koL/Vtzn06dOlUage0hQIAAAQIECBAgQIAAAQIECBAgQIAAgSoUuPLKK9NDDz2U2/IIy+y33365WjU3qioYM2PGjKy3mH/84x+1+3y99dZLF154YXYGc23RFQIECBAgQIBAOwr885//rA26NBZuqVv/7LPP2nFtO+ail1566UWGaOqGbBZbbLGOuaHWmgABAgQIECBAgAABAgQIECBAgAABAgQqWmDmzJlp8ODBuW3cfPPN0w033JCrVXOjqoIxI0aMSLfffntuf//oRz9KvXr1ytU0CBAgQIAAAQKlFIjhiv72t7+lOXPmZH9rrkePLxF4+fjjj0u5ePNugcAKK6xQG6T56le/mtZee+3sUnM9hogyESBAgAABAgQIECBAgAABAgQIECBAgACB9hCYMGFCmjp1am7REZY58MADc7VqbVRNMOa1115LvXv3TnEgqmbq2rVrGjlyZPrKV75SU/KXAAECBAgQIFAUgQULFhQEXyIA87d/hWH+/t57RVlGe89k8cUXTzGEUc2lfjvqMWxT3Uu41G+393YUY/mrr7ZaWvv/AjM1YZkIz8T1cDERIECAAAECBAgQIECAAAECBAgQIECAAIFSCbz88stp0KBBudlvueWW6ec//3muVq2NqgnGXHXVVWnixIm5/XzCCSek73//+7maBgECBAgQIECgqQIxPGMWdmmg95d33323qbMp2f0ikLH88stnl+WWW672+lJLLVUbZqkJtcTfhoItDdVq7luM4YVi2Kj6YZma4ExD9YZqcf/PP/88zZ07N7vMmzev9nrcv72nNdZYIwvI1O9lJtoC2u29dyyfAAECBAgQIECAAAECBAgQIECAAAEClSFw7bXXpvvvvz+3MZdccknq2bNnrlaNjaoIxnzyySdZbzFvvfVW7T6Os3cvuuiipNv7WhJXCBAgQIAAgUYEaoY6qh+Cefvttxt5ROnKyy67bKobcql7PUIwddtLL7106Vakg8z5s88+qw3J1A3MRIimbjuux3fGtp7WWmut3JBMNb3MxF8TAQIECBAgQIAAAQIECBAgQIAAAQIECBBoqsCMGTPSeeedl7v7brvtlsaMGZOrVWOjKoIxt956a7rwwgtz+/eQQw5JBx98cK6mQYAAAQIECBB444030iuvvJJeffXV7G9cL/UUPbCsvvrqaeWVV84FW+qGXGqu62GkdHsjegBqKDBTtyeaDz/8MP3973/PhoMq3Zr8e84bbLBBiku3bt2yv+utt16pF2n+BAgQIECAAAECBAgQIECAAAECBAgQINCBBUaPHp2efvrp3BbceOONadNNN83Vqq1RFcGYY489Nj377LO1+7ZTp05ZbzHOxK0lcYUAAQIECFSlwJw5cwpCMPPnzy+JRQRaVltttSwAEyGYutdXWmmlkizTTEsn8NFHH2UBmQjJvPfee7nrEbApxRQ9HdYPy0QviCYCBAgQIECAAAECBAgQIECAAAECBAgQIBACjzzySBo/fnwO4/DDD08/+9nPcrVqa1R8MObBBx9MZ5xxRm6/7rLLLumkk07K1TQIECBAgACByhaIAEP9nmBKMXROBF7qhl5qrq+66qqVDWzragXef//9LChTPzAT7WJPMbRW/bBMBK9MBAgQIECAAAECBAgQIECAAAECBAgQIFCdAmeffXZ6/fXXazc+equ/5ZZb0hprrFFbq7YrFR+MOeecc9K9996b269DhgxJm222Wa6mQYAAAQIECFSOQPTmUT8EE7ViTfElsn6vLzUBmMUWW6xYizGfChP45z//2WBgJkJbMURTsabogah+WEavRMXSNR8CBAgQIECAAAECBAgQIECAAAECBAiUt8Dvf//7FMMn1Z2iM5Gjjz66bqmqrld0MOaFF15I0S1Q3alHjx5p4MCBdUuuEyBAgAABAh1YIHp9iRBM3SBMBA2KMUV6ep111kkxXE0EYWrCMEsssUQxZm8eBGoFvvzyy9yQTDHM1+zZs9O7775be5/WXInnboRlunXrVhuaid5mTAQIECBAgAABAgQIECBAgAABAgQIECBQWQLRq3m/fv3S3Llzazese/fu6eabb65tV9uVig7GjB07tiAJ9ZOf/CTttNNO1bafbS8BAgQIEKgYgRiO5i9/+Ut2efHFF1MECIoxrbnmmmndddfNLhGGieudOnUqxqzNg0CLBb744ov01ltvZSGZ+BuXd955p8Xzq/vACHxttNFGafPNN88uq6yySt2bXSdAgAABAgQIECBAgAABAgQIECBAgACBDirw85//PN1zzz25tb/wwgvTnnvumatVS6NigzFxpnjv3r3TBx98ULsvO3funC666KL0la98pbbmCgECBAgQIFDeAjHETE0QJv7+7W9/a/UKr7XWWrUhmAjARBBmySWXbPV8zYBAWwjMnz8/F5SJsMzbb7/d6kXHa6EmJLPxxhunFVdcsdXzNAMCBAgQIECAAAECBAgQIECAAAECBAgQaHuBl156KZ177rm5Be+www7piiuuyNWqpVGxwZhf/OIX6ZJLLsntx0MPPTQdcMABuZoGAQIECBAgUF4C0bXf888/n4VhZsyYkd54441WrWD0ilHTA0xNjzCLL754q+bpwQTKTWDBggVZbzI1vcrEMEyt7U0phl2KoMymm26aopvN5ZZbrtw22/oQIECAAAECBAgQIECAAAECBAgQIECAQCMCMcLOk08+mbt14sSJaeutt87VqqFRscGYH/7wh2nmzJm1+3CZZZbJeotZY401amuuECBAgAABAu0v8Omnn2YhmBdeeCHF0Egvv/xyi1eqbgCm5rqe4lrM6YEdXOAf//hHwTBMEZhp6bTJJptkQZkIycRl6aWXbumsPI4AAQIECBAgQIAAAQIECBAgQIAAAQIESizw+OOPF3QmEh2JDBkypMRLLr/ZV2Qw5u67704DBw7Mae+2227p+OOPz9U0CBAgQIAAgbYX+OKLL7IgTIRgai7R20Vzp+WXXz59/etfT127ds2GRYogzGKLLdbc2bg/gaoS+Oc//1k7DNNrr72WBdE+/vjjZhtEr0vRm0wMubTRRhtlQRnDkTWb0QMIECBAgAABAgQIECBAgAABAgQIECBQUoEBAwakV199tXYZSy21VLr55ptTly5damvVcKUigzGnnnpq+q//+q/c/hs2bFj2w32uqEGAAAECBAiUXCB6rZg+fXptCCbCMNFLTHOnJZZYIq2//vpZGGbDDTdMMUSSiQCB1gu8/fbbWUAmemuKy5dfftnsmS677LK1Qy7VBGX01tRsRg8gQIAAAQIECBAgQIAAAQIECBAgQIBAUQX++Mc/pl/84he5eZ544onplFNOydUqvVFxwZg///nP6YQTTsjtt29+85vpnHPOydU0CBAgQIAAgdIJxMH1GTNm1IZhPvrooxYtbN11103dunXLwjDRO4yJAIHSC9T0JBOv49dff71FC1xllVWyXmRiyKXoVSbCbCYCBAgQIECAAAECBAgQIECAAAECBAgQaFuBOD7Tr1+/VPc4TefOndMtt9ySlllmmbZdmXZcWsUFY84///z0m9/8Jkd62mmnpR122CFX0yBAgAABAgSKKxAH0Z999tn0zDPPZL1OtGTuq622WjY00gYbbJCFYWK4JBMBAu0nMG/evBRBmVdeeSV7Xb/77rstWpkIxmy11VZpyy23FJJpkaAHESBAgAABAgQIECBAgAABAgQIECBAoGUC0WNM9BxTdzr33HPTQQcdVLdU0dcrKhjzxhtvpN69e6fPP/+8dqfF2FhjxoypbbtCgAABAgQIFE+gtWGY5ZZbLhvHsmvXrtnBcsMjFW/fmBOBUgi88847WVBm1qxZWVBm7ty5zV6MkEyzyTyAAAECBAgQIECAAAECBAgQIECAAAECLRZ49dVX04ABA3KPjxMZr7/++lytkhsVFYyZMGFCuuaaa3L76/DDD0/77rtvrqZBgAABAgQItFygNWGYr3zlK1mPMBGEiYvhkVq+HzySQDkIRG8yEZKp6VVmwYIFzVotIZlmcbkzAQIECBAgQIAAAQIECBAgQIAAAQIEWiRwySWXpMcffzz32MsuuyzttNNOuVqlNiomGPPpp59mvcX89a9/rd1XMfzCRRddlFZdddXamisECBAgQIBA8wVaE4ZZZ511asMw66+/fjI8UvP9PYJARxCoGXapJijz1ltvNWu1hWSaxeXOBAgQIECAAAECBAgQIECAAAECBAgQaLLAk08+mcaOHZu7f69evdKoUaNytUptVEww5vbbb08jRozI7ac99tgjHXvssbmaBgECBAgQINA0gZaGYaJXmO7du2eXDTbYIK255ppNW6B7ESBQUQIx7NIrr7ySZs6cmV3+8Y9/NHn7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8ce6fy7ae6RLjJYG90mABNwkkDVrVilUqJDkzJnTzW4yTdsnzx1T0iWl7U6VcxetRY9uw8ifUNgjiGmkiGKyZsnmdndsnwRIwIIAhDEQyGijTZs2ct9992mruE8CJEACJEACJEACJEACJEACJEACJEACJEACMUNg6NChsnbtWu94EhISBJk/3IywhTGrVq2Srl276sbYuXNnuf3223V1LJAACZBAtAhs3LhRWTlr7B9/uypXrmyszjBlpE569913BVurQJqTJk2a0CXGCg7rSIAEXCOQP39+wQ8jNAIHT+zxCGKWyK9/LgutAQeuKpGvrCKIqVGyvgOtsQkSIIFwCCCVElIqIbWSNuCUWKNGDW0V90mABEiABEiABEiABEiABEiABEiABEiABEggJgiMGDFCVq5c6R0L3OahO3EzwhbGQLnTs2dP3RjxsPnmm2/W1bFAAiRAAtEiYFQdYhzXXXedtGrVKlpDiki/cIvBg5K9e/fq+suePbty/9WrV9fVs0ACJEACkSIA1xhYI2bLRpeRQJnvTN+sCGK2HPw10EscP6984RqSnNhIsGWQAAnEDoHFixcrKTO1I0pOTpZ///vf2irukwAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkEBMEBg5cqQsXbpUN5Zly5YJnmG6FWELY5DrqV+/frrxdevWTZo2baqrY4EESIAEokHgm2++kSlTpui6LlKkiODvVJ48eXT1GbGwY8cOee+99+T8+fPK7RUuXFhuu+02QQolBgmQAAlEkwAU4EitlDt3bmUYyCcKsUzJkiWjOayY63vT/tWKIObPo9uiNjY4wyBlEpxiGCRAArFJYPLkybJ582bd4Lp06aJ87tNVskACJEACJEACJEACJEACJEACJEACJEACJEACUSYwevRoWbhwoW4UP/30k+TLl09X52QhbGEMHjobV6L16tVLGjdu7OQ42RYJkAAJBE0ATikvvviiHDt2THdt+/btpV69erq6jFg4ceKEkkYpLS1NsJK4fv36cs0112TEW+U9kQAJxDEBCPXgcPXWW28JnGTg5pUZ/kb7esku/3VZ0vakStquJXLk9AFfp7p2LGuWbJKUmCJJpRtJ/oTCrvXDhkmABJwhsH37dhk/fryuMaStGzRoEAWHOioskAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJRJsA5rFgwKKN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SYAESCAuBK5cuSITJ06Ua9euxe4mU6ZMilsMrYVjkfAJCZAACZAACZAACZAACZAACZAACZCAzQmsX79eYOigj3feece2N8Tr+8q2fQhQGGOfc2Grnty/f1+6d+8uO3bs0PSrTJky0r9/f02ODRKwG4FVq1bJzJkzNd2CsAslleLHj6/J26VBcYxdzgT7QQIkEIoEHKKYixcvKt1PnTq19OrVS+B4xyABEiCBSCOAGxx27typGXbbtm2lTp06mhwbJEACJEACJEACJEACJEACJEACJEACJGBXAvv27ZNRo0bJo0ePNF1s1aqV9O3bV5NjgwTcIUBhjDuUInSdU6dOSY8ePeSPP/7QEMAFVVxYZZCAXQngSxKuMSdPntR0sWbNmlK9enVNzk6N27dvy4ULF+zUJfaFBEiABGxPAA4xa9asEYcoxtHhLFmySKdOnSiOcQDhIwmQQEQQOHz4sMyePVsz1ly5ciluMXYViGs6ywYJkAAJkAAJkAAJkAAJkAAJkAAJkEDEEzhz5owiitFXh4iKipLRo0dHPB8C8I4AhTHecYuYrX766SfFOebBgweaMb/xxhvy8ssva3JskICdCOC1i/qC6kiUKJHiGpMtWzZ12lbP79y5o4hjHj9+rPQLE73p06e3VR/ZGRIgARKwCwF8RqJ8Ehxj9FGqVClp1qyZPs02CZAACYQtAbh+Tpo0SXDxSB29e/eWChUqqFN8TgIkQAIkQAIkQAIkQAIkQAIkQAIkQAK2JHDv3j1FFHPo0CFN/woWLChjx47lnJmGChueEKAwxhNaEbrukiVL5MMPPzSMHvXbSpcubcgzQQJ2ITBx4kTZvHmzpjtFihSRli1banJ2a+BLH84xe/fula1bt0q1atWkQIECdusm+0MCJEACQSVAUUxQ8fPgJEACNiSwbt062bRpk6ZnVatWla5du2pybJAACZAACZAACZAACZAACZAACZAACZCAXQmYze2lTp1axo0bJ0WLFrVrt9mvECBAYUwInCQ7dHH8+PEydepUTVfgYjFw4EB59tlnNXk2SMAuBM6dOydDhw6Vq1evarrUtGlT24u6du7cKdHR0bH9Llu2rJQpUya2zSckQAIkEMkEUCoPk79mTjH16tWTSpUqRTIejp0ESCACCfz++++KW4x66Lho9MEHHwhKyzFIgARIgARIgARIgARIgARIgARI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EEDAzJkzx1aP8arU0blzZxuQueCCC9BCIC4CGzdutOEYPQHvanny5LHhGAVkaAgggAACCKSigAIxevv555+dh1+nTh1bJaZRo0bOcToRQAABBBBAAAEEEEAAAQQQQACBWArs3r3bVonxus6vh3n69etnSpUqFcvdYN0IIJACAgRjUuAkc4gIREvgxx9/NAMGDDATJ050rlJVOlTGrnLlys5xOhGIhcDUqVNtBRmv8oqa6qt9+/amRo0asdg860QAAQQQQCDhBBQenT59utmyZYtz3woUKGArxGhebhoCCCCAAAIIIIAAAggggAACCCCQFQILFiywoRjde3K1Pn36mPvvv981RB8CCCAQsQDBmIjJeAECCAwaNMi8+eabTojChQubO++80zC1kpOHzhgJKBTzxRdfmClTpnhuoXXr1jYgkz9/fs9lGEAAAQQQQCCZBY4fP24DMbNnz/Y8jDZt2thQTIUKFTyXYQABBBBAAAEEEEAAAQQQQAABBBCIpcDnn39uPvvsM+cmypcvb6vE6IFXGgIIIBAtAYIx0ZJkPQikmMA333xjp1baunWr88g7dOhgbr31VlOkSBHnOJ0IxEJg8eLFNiCzYcMG5+pVblF/TDds2NA5TicCCCCAAALJKrBs2TIbivF6yqpKlSp22iTm407WM8x+I4AAAggggAACCCCAAAIIIJD8AqpyO3z4cLNy5Urnweih6759+5pKlSo5x+lEAAEEMipAMCajcrwOAQTMzp077dRKmsrG1fQkssIxLVq0cA3Th0BMBM6dO2enVlIFmVOnTjm3UbduXXPZZZeZiy++2DlOJwIIIIAAAskisGnTJjN37lyzZs0a5y7nyJHDBmJuvPFGkzdvXucydCKAAAIIIIAAAggggAACCCCAAAKxFhg3bpwNxXhdt7/vvvvMI488EuvdYP0IIJCiAgRjUvTEc9gIRFPg3XffNe+8847nKjt37mwDMtyM8SRiIAYC3333na0eM3/+fM+1N2rUyLRs2ZL0uacQAwgggAACiSqwbds2M2/ePLN06VLPXWzatKkNxdSsWdNzGQYQQAABBBBAAAEEEEAAAQQQQACBWAps377dBmIWLlzo3EyJEiVslZhOnTo5x+lEAAEEoiFAMCYaiqwDAQRs6f6BAwcalcFzNVXmUPWYSy+91DVMHwIxE5g+fboNyOzevdtzG6pq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n0ybFL4QlmvZtGlT9Mtf/jIKldgtBAgQIDA0BQRjhuZ79VQECNSZwPnz5+NwzH/8x3/kffKXX345eu+996I1a9bk7aOBAAECBAgQIECAAAECBAgQIECAAAECBAgMBYHt27dHf/rTn6KLFy/mfJz58+fHFWI++OCDnO0OEiBAgMDQERCMGTrv0pMQIEAg2rNnTxyQ2b17d16NDRs2RD/96U+jlStX5u2jgQABAgQIECBAgAABAgQIECBAgAABAgQI1KLAzp07o08//TQ6ceJEzttvamqKAzG/+tWvorFjx+bs4yABAgQIDC0BwZih9T49DQECBGKB//zP/4wDMh0dHXlFNm/eHAdkFi9enLePBgIECBAgQIAAAQIECBAgQIAAAQIECBAgUAsCe/fujQMxhw4dynu777//fhyKWbRoUd4+GggQIEBg6AkIxgy9d+qJCBAgEAvcvXs3Dsf8+te/jh4/fpxXZevWrXFApq2tLW8fDQQIECBAgAABAgQIECBAgAABAgQIECBAoBoF2tvbo88++ywKn/mW9evXR7/85S+jLVu25OviOAECBAgMYQHBmCH8cj0aAQIEgsCxY8ei3/zmN9HHH3+cF6SxsTEOx4QpllpbW/P200CAAAECBAgQIECAAAECBAgQIECAAAECBKpBIFSGCVMmhUox+ZaFCxdGH330UfQv//Iv+bo4ToAAAQJ1ICAYUwcv2SMSIEAgCHz77bfRb3/72+h//ud/8oKEuVVDOCasU6ZMydtPAwECBAgQIECAAAECBAgQIECAAAECBAgQGAyBEydOxIGYnTt35r38rFmz4kDML37xi2jUqFF5+2kgQIAAgfoQEIypj/fsKQkQIJAIfP3113FA5q9//WtyLHtjwoQJcTjmnXfeicK2hQABAgQIECBAgAABAgQIECBAgAABAgQIDKZAR0dHHIjZvn173tuYNGlSEohpaWnJ208DAQIECNSXgGBMfb1vT0uAAIFEYMeOHXFAZs+ePcmx7I1QNSZVQSZUk7EQIECAAAECBAgQIECAAAECBAgQIECAAIEXKXDp0qU4EBOmTerp6cl56fD761AdJkybNHPmzJx9HCRAgACB+hUQjKnfd+/JCRAgEAt88skncUDmu+++yyvS2tqaBGQaGxvz9tNAgAABAgQIECBAgAABAgQIECBAgAABAgTKIXDjxo0kEPPw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gGDMwNycRYAAAQIECBAgQIAAAQIEXrjAw4cPo1CdJv0zfbuYtlz9X/iDuCCBMguE6j1hOqIQSglrru1cx9L75mofNWpUme/UcAQIECBAgAABAgQIECBAgMCLFhCMedHirkeAAAECBAgQIECAAAECBKpMIFdYJtexVPAmV1uuY1X2mG6nCgRCBZZcAZT+Airp7enbqbFMRVQFL9ctECBAgAABAgQIECBAgACBKhUQjKnSF+O2CBAgQIAAAQIECBAgQIBArQvkCsvkOhYCN8+ePYt6enqSNXs/tGUfy97P1SfXsWLPq0b/hoaGKFRHSX2G7dSafSx7v1LnhVBKKqCSHlrJtT1ixIhqZHVPBAgQIECAAAECBAgQIECAwBAWEIwZwi/XoxEgQIAAAQIECBAgQIAAAQIDF8gO0GTv5wrd5DrW29tbtvDKsGHDBv5AziRAgAABAgQIECBAgAABAgQI1KGAYEwdvnSPTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoBwHBmHp4y56RAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFCHAoIxdfjSPTIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoB4EBGPq4S17RgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAHQoIxtThS/fIBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIF6EBCMqYe37BkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAnUoIBhThy/dIxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE6kFAMKYe3rJnJECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAjUoYBgTB2+dI9MgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKgHAcGYenjLnpEAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUIcCgjF1+NI9MgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgHgQEY+rhLXtGAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEAdCvwfETn+6ByzlaUAAAAASUVORK5CYII=" + } + }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Screen%20Shot%202021-12-10%20at%203.13.22%20PM.png](attachment:Screen%20Shot%202021-12-10%20at%203.13.22%20PM.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "l6dRubBtqHwq" + }, + "source": [ + "What restrictions on guides are imposed by the math of variational inference? Since the guide is an approximation to the posterior $p_{\\theta_{\\rm{max}}}({\\bf z} | {\\bf x})$, the guide needs to provide a valid joint probability density over all the latent random variables in the model. Recall that when random variables are specified in Pyro with the primitive statement `pyro.sample()` the first argument denotes the name of the random variable. These names will be used to align the random variables in the model and guide. To be very explicit, if the model contains a random variable `z_1`\n", + "\n", + "```python\n", + "def model():\n", + " pyro.sample(\"z_1\", ...)\n", + "```\n", + "\n", + "then the guide needs to have a matching `sample` statement\n", + "\n", + "```python\n", + "def guide():\n", + " pyro.sample(\"z_1\", ...)\n", + "```\n", + "\n", + "The distributions used in the two cases can be different, but the names must line-up 1-to-1. \n", + "\n", + "Despite the flexibility it offers, writing out guides by hand can be difficult and tedious, especially for new users. Whenever possible, we recommend using ***autoguides***, or recipes for automatically generating common guide families from models that ship with Pyro in [pyro.infer.autoguide](https://docs.pyro.ai/en/stable/infer.autoguide.html). The next section demonstrates both approaches." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "l6dRubBtqHwq" + }, + "source": [ + "### Example: mean-field variational approximation for Bayesian linear regression in Pyro\n", + "\n", + "For our running example of Bayesian linear regression, we will use a guide that models the distribution of unobserved parameters in the model as a Gaussian with diagonal covariance, i.e. it assumes that there is no correlation amongst the latent variables (quite a strong assumption as we shall see). This is known as a ***mean-field approximation***, a term borrowed from physics, where such approximations were originally invented. \n", + "\n", + "We first write out a guide program of this form by hand for completeness." + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "id": "TMQZ3GasqHwr" + }, + "outputs": [], + "source": [ + "def custom_guide(is_cont_africa, ruggedness, log_gdp=None):\n", + " a_loc = pyro.param('a_loc', lambda: torch.tensor(0.))\n", + " a_scale = pyro.param('a_scale', lambda: torch.tensor(1.),\n", + " constraint=constraints.positive)\n", + " sigma_loc = pyro.param('sigma_loc', lambda: torch.tensor(0.))\n", + " weights_loc = pyro.param('weights_loc', lambda: torch.randn(3))\n", + " weights_scale = pyro.param('weights_scale', lambda: torch.ones(3),\n", + " constraint=constraints.positive)\n", + " a = pyro.sample(\"a\", dist.Normal(a_loc, a_scale))\n", + " b_a = pyro.sample(\"bA\", dist.Normal(weights_loc[0], weights_scale[0]))\n", + " b_r = pyro.sample(\"bR\", dist.Normal(weights_loc[1], weights_scale[1]))\n", + " b_ar = pyro.sample(\"bAR\", dist.Normal(weights_loc[2], weights_scale[2]))\n", + " sigma = pyro.sample(\"sigma\", dist.LogNormal(sigma_loc, torch.tensor(0.05))) # fixed scale for simplicity\n", + " return {\"a\": a, \"b_a\": b_a, \"b_r\": b_r, \"b_ar\": b_ar, \"sigma\": sigma}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use `pyro.render_model` to visualize `custom_guide`, demonstrating that the random variables are indeed independent of one another as indicated by the lack of edges between them." + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "a\n", + "\n", + "a\n", + "\n", + "\n", + "\n", + "bA\n", + "\n", + "bA\n", + "\n", + "\n", + "\n", + "bR\n", + "\n", + "bR\n", + "\n", + "\n", + "\n", + "bAR\n", + "\n", + "bAR\n", + "\n", + "\n", + "\n", + "sigma\n", + "\n", + "sigma\n", + "\n", + "\n", + "\n", + "a_scale\n", + "\n", + "a_scale\n", + "\n", + "\n", + "\n", + "a_scale->a\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "weights_loc\n", + "\n", + "weights_loc\n", + "\n", + "\n", + "\n", + "weights_loc->bA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "weights_loc->bR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "weights_loc->bAR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sigma_loc\n", + "\n", + "sigma_loc\n", + "\n", + "\n", + "\n", + "sigma_loc->sigma\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "weights_scale\n", + "\n", + "weights_scale\n", + "\n", + "\n", + "\n", + "weights_scale->bA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "weights_scale->bR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "weights_scale->bAR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "a_loc\n", + "\n", + "a_loc\n", + "\n", + "\n", + "\n", + "a_loc->a\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pyro.render_model(custom_guide, model_args=(is_cont_africa, ruggedness, log_gdp), render_params=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pyro also contains an extensive collection of \"autoguides\" which automatically generate guide programs from a given model. Like our handwritten guide, all `pyro.autoguide.AutoGuide` instances (which are themselves just functions that take the same arguments as the model) return a dictionary of values for each `pyro.sample` site they contain. \n", + "\n", + "The simplest autoguide class is `AutoNormal`, which automatically generates a guide in a single line of code that is equivalent to the one we wrote out by hand above:" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [], + "source": [ + "auto_guide = pyro.infer.autoguide.AutoNormal(model)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The guide alone does not fully specify an inference algorithm, however: it merely describes the search space over possible approximate posterior distributions indexed by parameters (the dark circle in the figure above) and an initial point in that space determined by the initial parameter values. We must then move this initial distribution towards the true posterior distribution (the red star in the figure above) by solving an optimization problem over the parameters (the yellow star in the figure above). Formulating and solving this optimization problem is the subject of the next two sections." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ZHsRBPdNqHwr" + }, + "source": [ + "### Background: Estimating and optimizing the Evidence Lower Bound (ELBO)\n", + "\n", + "The functional of model $p_{\\theta}({\\bf x}, {\\bf z})$ and guide $q_{\\phi}({\\bf z})$ that we will optimize is the ELBO, defined as an expectation w.r.t. to samples from the guide:\n", + "\n", + "$${\\rm ELBO} \\equiv \\mathbb{E}_{q_{\\phi}({\\bf z})} \\left [ \n", + "\\log p_{\\theta}({\\bf x}, {\\bf z}) - \\log q_{\\phi}({\\bf z})\n", + "\\right]$$\n", + "\n", + "By assumption we can compute all of the probabilities inside the expectation, and since the guide $q$ is assumed to be a parametric distribution we can sample from, we can compute Monte Carlo estimates of this quantity as well as of gradients with respect to model and guide parameters, $\\nabla_{\\theta,\\phi}ELBO$.\n", + "\n", + "Optimizing the ELBO over model and guide parameters $\\theta,\\phi$ via stochastic gradient descent using these gradient estimates is sometimes called *stochastic variational inference* (SVI); for an extended introduction to SVI, see [SVI Part I](https://pyro.ai/examples/svi_part_i.html). " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ZHsRBPdNqHwr" + }, + "source": [ + "### Example: Bayesian regression via stochastic variational inference (SVI)\n", + "\n", + "Pyro contains [a number of different implementations](https://docs.pyro.ai/en/stable/inference_algos.html#module-pyro.infer.elbo) of estimators for the ELBO (defined mathematically in the previous section) that each compute losses and gradients slightly differently with different tradeoffs. In this tutorial we will only use [pyro.infer.Trace_ELBO](https://docs.pyro.ai/en/stable/inference_algos.html#pyro.infer.trace_elbo.Trace_ELBO), which is always correct and safe to do; other ELBO estimators may provide computational or statistical advantages for certain models and guides.\n", + "\n", + "We will use SVI for inference in our example model, demonstrating how Pyro uses PyTorch's stochastic gradient descent implementations to optimize the output of a `pyro.infer.Trace_ELBO` object that we pass to [pyro.infer.SVI](https://docs.pyro.ai/en/stable/inference_algos.html#pyro.infer.svi.SVI), which is a helper class whose `step()` method takes care of computing the loss and parameter gradients and applying updates and constraints to parameters. " + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "id": "SDWMvDp6qHwr" + }, + "outputs": [], + "source": [ + "adam = pyro.optim.Adam({\"lr\": 0.02})\n", + "elbo = pyro.infer.Trace_ELBO()\n", + "svi = pyro.infer.SVI(model, auto_guide, adam, elbo)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "faJaFIHTqHws" + }, + "source": [ + "Here [pyro.optim.Adam](https://docs.pyro.ai/en/stable/optimization.html#pyro.optim.pytorch_optimizers.Adam) is a thin wrapper around the PyTorch optimizer [torch.optim.Adam](https://pytorch.org/docs/stable/generated/torch.optim.Adam.html#torch.optim.Adam) (see [here](https://pyro.ai/examples/svi_part_i.html#Optimizers) for a discussion). Optimizers in `pyro.optim` are used to optimize and update parameter values in Pyro's parameter store. In particular, you will notice that we do not need to pass in learnable parameters to the optimizer since that is determined by the guide code and happens behind the scenes within the `SVI` class automatically. To take an ELBO gradient step we simply call the step method of SVI. The data argument we pass to `SVI.step` will be passed to both `model()` and `guide()`. The complete training loop is as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": { + "id": "OFtIqor5qHws", + "outputId": "a25cd7d1-fca6-4eb7-8c66-f30b8332ae2d" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Elbo loss: 694.9404826164246\n", + "Elbo loss: 524.3822101354599\n", + "Elbo loss: 475.66820669174194\n", + "Elbo loss: 399.99088364839554\n", + "Elbo loss: 315.23274326324463\n", + "Elbo loss: 254.76771265268326\n", + "Elbo loss: 248.237040579319\n", + "Elbo loss: 248.42670530080795\n", + "Elbo loss: 248.46450632810593\n", + "Elbo loss: 257.41463351249695\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 6.47 s, sys: 241 µs, total: 6.47 s\n", + "Wall time: 6.28 s\n" + ] + }, + { + "data": { + "text/plain": [ + "Text(0, 0.5, 'ELBO loss')" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%time\n", + "pyro.clear_param_store()\n", + "\n", + "# These should be reset each training loop.\n", + "auto_guide = pyro.infer.autoguide.AutoNormal(model)\n", + "adam = pyro.optim.Adam({\"lr\": 0.02}) # Consider decreasing learning rate.\n", + "elbo = pyro.infer.Trace_ELBO()\n", + "svi = pyro.infer.SVI(model, auto_guide, adam, elbo)\n", + "\n", + "losses = []\n", + "for step in range(1000 if not smoke_test else 2): # Consider running for more steps.\n", + " loss = svi.step(is_cont_africa, ruggedness, log_gdp)\n", + " losses.append(loss)\n", + " if step % 100 == 0:\n", + " logging.info(\"Elbo loss: {}\".format(loss))\n", + "\n", + "plt.figure(figsize=(5, 2))\n", + "plt.plot(losses)\n", + "plt.xlabel(\"SVI step\")\n", + "plt.ylabel(\"ELBO loss\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note this training was fast since we used a high learning rate. Sometimes models and guides are sensitive to learning rate, and the first thing to try is decreasing learning rate and increasing number of steps. This is especially important in models and guides with deep neural nets. We recommend starting with a lower learning rate and gradually increasing, avoiding learning rates that are too fast, where inference can diverge or result in NANs." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_3-9Yv0zqHws" + }, + "source": [ + "Having trained a guide, we can examine the optimized guide parameter values by fetching from Pyro's param store. Each `(loc, scale)` pair printed below parametrize a single `pyro.distributions.Normal` distribution in the guide corresponding to a different unobserved `pyro.sample` statement in the model, similar to our handwritten `custom_guide` from before." + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": { + "id": "W3CM2Tl0qHws", + "outputId": "a6d68733-a633-4f67-d907-8aea7d4079e1", + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "AutoNormal.locs.a 9.173145\n", + "AutoNormal.scales.a 0.0703669\n", + "AutoNormal.locs.bA -1.8474661\n", + "AutoNormal.scales.bA 0.1407009\n", + "AutoNormal.locs.bR -0.19032118\n", + "AutoNormal.scales.bR 0.044044234\n", + "AutoNormal.locs.bAR 0.35599768\n", + "AutoNormal.scales.bAR 0.079374395\n", + "AutoNormal.locs.sigma -2.205863\n", + "AutoNormal.scales.sigma 0.060526706\n" + ] + } + ], + "source": [ + "for name, value in pyro.get_param_store().items():\n", + " print(name, pyro.param(name).data.cpu().numpy())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "UYVGxlOWqHwu" + }, + "source": [ + "Finally, let us revisit our earlier question of how robust the relationship between terrain ruggedness and GDP is against any uncertainty in the parameter estimates from our model. For this, we plot the distribution of the slope of the log GDP given terrain ruggedness for nations within and outside Africa.\n", + "\n", + "We represent these two distributions with samples drawn from our trained guide. To draw multiple samples in parallel, we can call the guide within a `pyro.plate` statement which repeats and vectorizes the sampling operations for each `pyro.sample` statement in the guide, as described in the section introducing the `pyro.plate` primitive." + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "id": "HtR6FJ_MqHwu", + "outputId": "5f12c373-d6c6-49f1-880e-d2e0f2f69cfe" + }, + "outputs": [], + "source": [ + "with pyro.plate(\"samples\", 800, dim=-1):\n", + " samples = auto_guide(is_cont_africa, ruggedness)\n", + "\n", + "gamma_within_africa = samples[\"bR\"] + samples[\"bAR\"]\n", + "gamma_outside_africa = samples[\"bR\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "UYVGxlOWqHwu" + }, + "source": [ + "As can be seen below, the probability mass for African nations is largely concentrated in the positive region and vice-versa for other nations, lending further credence to the original hypothesis. However, the posterior uncertainty for the non-African nations (the width of the orange histogram) appears substantially lower than for African nations (the width of the blue histogram), which is surprising given the seemingly similar spread in the original data. We will investigate this discrepancy further in the next section." + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "id": "HtR6FJ_MqHwu", + "outputId": "5f12c373-d6c6-49f1-880e-d2e0f2f69cfe" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0EAAAJJCAYAAABs2TwAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAAC5qklEQVR4nOzdd3iT9f7/8WeSNt2LDlpGaRmyBQVcoKCgqKgMPYAbPceF4+dxe85RcYse/OI44uII4joOwHEOCqLgVgREVGRDGYVS6B5pmty/P9JEQgu0Je3dpK/HdeVKeufOnXdKWvrK5/N53xbDMAxERERERERaCavZBYiIiIiIiDQnhSAREREREWlVFIJERERERKRVUQgSEREREZFWRSFIRERERERaFYUgERERERFpVRSCRERERESkVVEIEhERERGRVkUhSEREREREWhWFIJFWymKxMGXKFLPL8DNnzhx69OhBeHg4iYmJATlmS3ydjbVkyRIsFgtLlixp8ufatm0bkZGRfP31103+XI11wgkncMcdd5hdRtCbNGkSWVlZZpcRlIYNG8awYcPMLkNEGkEhSCSAZs2ahcVi8V0iIyNp164dI0eO5Omnn6akpMTsEg/qm2++YcqUKRQWFpry/L///juTJk2iS5cuvPTSS7z44ouH3P+rr77irLPOon379kRGRpKZmcm5557LG2+80UwVh7YHHniA448/nsGDB9e678svv2T8+PG0b98eu91OQkICxx9/PA888AC7d+/223fYsGG+nwer1Up8fDzdu3fn0ksvZdGiRXU+d1ZWlt/PUVpaGieffDLz5s3z2+/OO+/kX//6F7t27QrcCw+QKVOm+L2Gg11C8Q9ob1j3Xmw2G2lpaVxwwQWsWbPG7PJERAAIM7sAkVD0wAMPkJ2djdPpZNeuXSxZsoSbb76ZJ598kg8++ICjjz7a7BKpqKggLOyPXwHffPMN999/P5MmTQrYKExDLFmyBLfbzVNPPUXXrl0Pue8777zDhAkT6N+/P//v//0/kpKS2Lx5M1988QUvvfQSF110UTNVHZr27NnD7NmzmT17dq377r33Xh588EE6d+7MpEmT6Ny5M5WVlSxfvpxp06Yxe/ZsNm7c6PeYDh068OijjwJQVlbGhg0bmDt3Lq+99hrjx4/ntddeIzw83O8x/fv359ZbbwVg586dvPDCC4wbN44ZM2Zw7bXXAjB69Gji4+N57rnneOCBB5riW9Fo48aN83sfl5aWct111zF27FjGjRvn2962bVszyvPz0ksv4Xa7A37cm266iUGDBuF0Ovn55595/vnnWbJkCb/88gvp6ekBfz4RkQYxRCRgXnnlFQMwli1bVuu+xYsXG1FRUUanTp2M8vJyE6o7tCeeeMIAjM2bN5vy/Pfff78BGHv27Dnsvr169TJ69+5tOByOWvft3r3b72vAuO+++wJVpqk+//xzAzA+//zzJn2eJ5980oiKijJKSkr8tr/11lsGYIwfP77O731hYWGt7/XQoUON3r1719q3urramDx5sgEYd9xxh999nTp1MkaNGuW3LTc314iJiTGOOuoov+033HCD0alTJ8PtdjfkJTa7PXv2BPS9WFpaetD7ysrKAvIcjeV9n77zzjt+22fMmGEAxtSpU02qLPCGDh1qDB061OwyRKQRNB1OpJmcdtpp3HPPPWzdupXXXnvN777ff/+dCy64gDZt2hAZGcnAgQP54IMP/PbxTrX7+uuvueWWW0hNTSUmJoaxY8eyZ88ev31//PFHRo4cSUpKClFRUWRnZ3PllVf67bP/WpkpU6Zw++23A5Cdne2bxrJlyxaGDh1Kv3796nxN3bt3Z+TIkYd97c899xy9e/cmIiKCdu3acf311/tNu8vKyuK+++4DIDU19bDreDZu3MigQYOw2+217ktLSztsPStXruSss84iPj6e2NhYhg8fznfffee3j/f7/cUXX3DNNdeQnJxMfHw8l112GQUFBbWOuWDBAk4++WRiYmKIi4tj1KhR/Prrr4etxft6Dhw9aYh33nmHAQMGEBUVRUpKCpdccgk7duyoc79evXoRGRlJnz59mDdvXp3rQebPn8/xxx9PbGys3/Z7772XlJQUZs6cWef3PiEhod7rr2w2G08//TS9evXi2Wefpaio6JD7p6en07NnTzZv3uy3/fTTT2fr1q389NNPB32s0+mkTZs2XHHFFbXuKy4uJjIykttuu8237ZlnnqF3795ER0eTlJTEwIEDm2yaZUN+9pcuXcrkyZNJS0ujQ4cOgGe6YZ8+fVi+fDmnnHIK0dHR/O1vfwPg/fffZ9SoUbRr146IiAi6dOnCgw8+iMvl8jv+ge+BLVu2YLFY+Oc//8mLL75Ily5diIiIYNCgQSxbtqzRr/Xkk08G8HuvH2w9knc64f4qKiq46aabSElJIS4ujvPOO48dO3bU+ftiyZIlDBw4kMjISLp06cILL7xQ5zEBXnvtNd/PT5s2bZg4cSLbtm2rtZ/3exEVFcVxxx3Hl19+WWsf71TAt99+m4cffpgOHToQGRnJ8OHD2bBhQ639v//+e84880wSEhKIjo5m6NChtdbhlZSUcPPNN5OVlUVERARpaWmcfvrprFixwrfP+vXrOf/880lPTycyMpIOHTowceLEw/5cibRmCkEizejSSy8FYOHChb5tv/76KyeccAJr1qzhrrvuYtq0acTExDBmzJhaayAAbrzxRlatWsV9993Hddddx4cffsgNN9zguz8vL48zzjiDLVu2cNddd/HMM89w8cUX1/ojf3/jxo3jwgsvBOD//u//mDNnDnPmzCE1NZVLL72Un3/+mV9++cXvMcuWLWPdunVccsklh3zNU6ZM4frrr6ddu3ZMmzaN888/nxdeeIEzzjgDp9MJwPTp0xk7diwAM2bMYM6cOX5Thg7UqVMnFi9ezPbt2w/53HX59ddfOfnkk1m1ahV33HEH99xzD5s3b2bYsGF8//33tfa/4YYbWLNmDVOmTOGyyy7j9ddfZ8yYMRiG4dtnzpw5jBo1itjYWKZOnco999zDb7/9xpAhQ9iyZcthaxo+fDjDhw9v8GsBzx/I48ePx2az8eijj3LVVVcxd+5chgwZ4hc0//vf/zJhwgTCw8N59NFHGTduHH/+859Zvny53/GcTifLli3j2GOP9du+bt061q1bx5gxY2qFo8ay2WxceOGFlJeX89VXXx1yX6fTybZt20hOTvbbPmDAAIBDNnAIDw9n7NixzJ8/n6qqKr/75s+fj8PhYOLEiYBnathNN91Er169mD59Ovfffz/9+/ev871xpBr6sz958mR+++037r33Xu666y7f9r1793LWWWfRv39/pk+fzqmnngp43huxsbHccsstPPXUUwwYMKDWYw/ljTfe4IknnuCaa67hoYceYsuWLYwbN873c9tQ3p+FpKSkRj1+0qRJPPPMM5x99tlMnTqVqKgoRo0aVWu/lStXcuaZZ7J3717uv/9+/vznP/PAAw8wf/78Wvs+/PDDXHbZZXTr1o0nn3ySm2++mcWLF3PKKaf4/fzMnDmTa665hvT0dB5//HEGDx7MeeedV2dYAnjssceYN28et912G3fffTffffcdF198sd8+n332GaeccgrFxcXcd999PPLIIxQWFnLaaafxww8/+Pa79tprmTFjBueffz7PPfcct912G1FRUb71VVVVVYwcOZLvvvuOG2+8kX/9619cffXVbNq0ybQ1niJBweyhKJFQcqjpcF4JCQnGMccc4/t6+PDhRt++fY3KykrfNrfbbZx00klGt27dah17xIgRflN//vrXvxo2m80oLCw0DMMw5s2bd9gaDKP2NLGDTYcrLCw0IiMjjTvvvNNv+0033WTExMQcclpOXl6eYbfbjTPOOMNwuVy+7c8++6wBGP/+97992+677756T4ebOXOmARh2u9049dRTjXvuucf48ssv/Z7jYK9zzJgxht1uNzZu3OjbtnPnTiMuLs445ZRTfNu83+8BAwYYVVVVvu2PP/64ARjvv/++YRiGUVJSYiQmJhpXXXWV3/Pu2rXLSEhIqLW9Lp06dTI6dep02P0OnA5XVVVlpKWlGX369DEqKip8+3300UcGYNx7772+bX379jU6dOjgN8VtyZIlBuD33Bs2bDAA45lnnvF77vfff98AjOnTp/ttd7vdxp49e/wuTqfTd//BpsN5ed+vTz31lN/344wzzvAdb9WqVcbEiRMNwLjxxhtrHcNutxvXXXfdQZ/DMAzjk08+MQDjww8/9Nt+9tlnG507d/Z9PXr06EPW21h1TYdr6M/+kCFDjOrqar/jDh061ACM559/vtZz1jXt9pprrjGio6P9nvPyyy/3ew9s3rzZAIzk5GRj3759vu3e98CB38MDed+n//73v409e/YYO3fuND7++GOja9euhsViMX744YeDPreX9/eB1/Llyw3AuPnmm/32mzRpUq3v67nnnmtER0cbO3bs8G1bv369ERYW5nfMLVu2GDabzXj44Yf9jrl69WojLCzMt937c9a/f3+/aaAvvviiAfhNh/O+9p49e/rt+9RTTxmAsXr1asMwPP/O3bp1M0aOHOn3+7y8vNzIzs42Tj/9dN+2hIQE4/rrr6/1PfJauXJlndMPReTQNBIk0sxiY2N9XeL27dvHZ599xvjx4ykpKSE/P5/8/Hz27t3LyJEjWb9+fa1pTVdffbXflI6TTz4Zl8vF1q1bAXxNDT766KNGf2K7v4SEBEaPHs2bb77pG/1wuVz85z//YcyYMcTExBz0sZ9++ilVVVXcfPPNWK1//Lq56qqriI+P57///W+jarryyiv5+OOPGTZsGF999RUPPvggJ598Mt26deObb7456ONcLhcLFy5kzJgxdO7c2bc9IyODiy66iK+++ori4mK/x1x99dV+i/avu+46wsLC+N///gfAokWLKCws5MILL/T9++Xn52Oz2Tj++OP5/PPPD/t6tmzZUq8RowP9+OOP5OXlMXnyZCIjI33bR40aRY8ePXzf3507d7J69Wouu+wyv1GcoUOH0rdvX79j7t27F6j9ab33+3LgKFBRURGpqal+l0NNTTuQ93gHdk5cuHCh73j9+vXjnXfe4dJLL2Xq1Km1jpGUlER+fv4hn+e0004jJSWF//znP75tBQUFLFq0iAkTJvi2JSYmsn379iOa9lUfjfnZv+qqq7DZbLWOFRERUedUv6ioKN9t73OcfPLJlJeX8/vvvx+2xgkTJvi9D7zT2TZt2lSv13jllVeSmppKu3btOPPMMykqKmLOnDkMGjSoXo/f38cffwx4RsP2d+ONN/p97XK5+PTTTxkzZgzt2rXzbe/atStnnXWW375z587F7XYzfvx4v5/d9PR0unXr5vvZ9f6cXXvttX7TQCdNmkRCQkKd9V5xxRV++x74vfvpp59Yv349F110EXv37vU9d1lZGcOHD+eLL77wNatITEzk+++/Z+fOnXU+l7eGTz75hPLy8jr3EZHaFIJEmllpaSlxcXEAbNiwAcMwuOeee2r9IeldI5OXl+f3+MzMTL+vvX+keNepDB06lPPPP5/777+flJQURo8ezSuvvILD4Wh0zZdddhk5OTm+OfCffvopu3fv9k3vOxhvMOvevbvfdrvdTufOnX33N8bIkSP55JNPKCws5IsvvuD6669n69atnHPOObW+Z1579uyhvLy8Vj0APXv2xO1215re0q1bN7+vY2NjycjI8IWW9evXA54/sg/8N1y4cOFBawmEg31/AXr06OG733tdV9e9g3XiM/ab7gf43rOlpaV+22NjY1m0aBGLFi3yrStrCO/xvMf3Ov7441m0aBGffvop33zzDfn5+bz66qt+f9jvX2tdaz32FxYWxvnnn8/777/v+1mYO3cuTqfTLwTdeeedxMbGctxxx9GtWzeuv/76JjlXUmN+9rOzs+s8lrdV+YF+/fVXxo4dS0JCAvHx8aSmpvqmr9Znrcjhftcczr333suiRYuYN28el112GUVFRX4fhjTE1q1bsVqttb4HB75/8/LyqKioqNd7ff369RiGQbdu3Wr9G6xZs8b3/ff+/Bz4uyA8PNzvw5T9He575/29cfnll9d67pdffhmHw+H7N3r88cf55Zdf6NixI8cddxxTpkzxC6LZ2dnccsstvPzyy6SkpDBy5Ej+9a9/aT2QyGGoRbZIM9q+fTtFRUW+/4y9n/TddtttB20wcOB/3HV9Egx//NFqsVh49913+e677/jwww/55JNPuPLKK5k2bRrfffddo9ZzjBw5krZt2/Laa69xyimn8Nprr5Gens6IESMafKxAi46O5uSTT+bkk08mJSWF+++/nwULFnD55Zc3y/N7/w3nzJlTZ9vf/duQBwPvmpsD/9Dt0aMHQK21YWFhYb73QWPWaHmPd+D7PCUlpd7vr8LCQlJSUg6738SJE3nhhRdYsGABY8aM4e2336ZHjx5+jT969uzJ2rVr+eijj/j444957733eO6557j33nu5//77G/DKDq0xP/t1BcCDbS8sLGTo0KHEx8fzwAMP0KVLFyIjI1mxYgV33nlnvVpiH+53zeH07dvX9284ZswYysvLueqqqxgyZAgdO3YEOGh4PbB5Q1Nwu91YLBYWLFhQ52s9krVvh/veeb//TzzxBP37969zX+/zjx8/3neerIULF/LEE08wdepU5s6d6xvdmjZtGpMmTeL9999n4cKF3HTTTTz66KN89913viYaIuIvuP53Fglyc+bMAfD90eP9FDE8PDzggeKEE07ghBNO4OGHH+aNN97g4osv5q233uIvf/lLnfsf6pN0m83GRRddxKxZs5g6dSrz588/6NSc/XXq1AmAtWvX+n1iWlVVxebNmwP+mgcOHAhAbm5unfenpqYSHR3N2rVra933+++/Y7VafX+cea1fv9630Bw8Ixe5ubmcffbZAHTp0gXwdKVr7lC4//f3tNNO87tv7dq1vvu913V1pzpwW2ZmJlFRUbW6sHXv3p1u3boxf/58pk+ffshpkPXlcrl44403iI6OZsiQIY06xo4dO6iqqqJnz56H3feUU04hIyOD//znPwwZMoTPPvuMv//977X2i4mJYcKECUyYMIGqqirGjRvHww8/zN133+037fBINOXPPni6lO3du5e5c+dyyimn+LYf+O/anLzNAh5++GGef/55wDNCUtfi/QNHiTt16oTb7Wbz5s1+IzIHvn/T0tKIjIys13u9S5cuGIZBdnY2Rx111EHr9v78rF+/3u/nzOl0snnz5oN2zzwU7++N+Pj4ev37Z2RkMHnyZCZPnkxeXh7HHnssDz/8sN8Uv759+9K3b1/+8Y9/8M033zB48GCef/55HnrooQbXJ9IaaDqcSDP57LPPePDBB8nOzvZ1CUpLS2PYsGG88MILdf7hfmDr6/ooKCio9Umt95PGQ02J8/5Re7BuQpdeeikFBQVcc801lJaWHrYrHMCIESOw2+08/fTTfjXNnDmToqKiOjs71cfixYvr3O5dp1PX9DDwhLkzzjiD999/328Nzu7du3njjTcYMmQI8fHxfo958cUX/dZWzZgxg+rqat8fHyNHjiQ+Pp5HHnmkzjVY9fk3bGyL7IEDB5KWlsbzzz/v92+7YMEC1qxZ4/v+tmvXjj59+vDqq6/6TWdbunQpq1ev9jtmeHg4AwcO5Mcff6z1fFOmTCE/P5+rrrqqztda3xEC8ASgm266iTVr1nDTTTfV+r7Xl7e73UknnXTYfa1WKxdccAEffvghc+bMobq62m8qHPyxJsrLbrfTq1cvDMPwvWbvmprDrUM6lKb42d+f9wOK/f9NqqqqeO65547ouEeiS5cunH/++cyaNYtdu3b5thUVFfHzzz/79svNza3VHc/7wdGB9T/zzDN+X9tsNkaMGMH8+fP91tBs2LCBBQsW+O07btw4bDYb999/f633rmEYvvfCwIEDSU1N5fnnn/frLjhr1qxGd18bMGAAXbp04Z///GetKabwx7+/y+WqNa0tLS2Ndu3a+X7mi4uLqa6u9tunb9++WK3WI5oGLRLqNBIk0gQWLFjA77//TnV1Nbt37+azzz5j0aJFdOrUiQ8++MDv0+R//etfDBkyhL59+3LVVVfRuXNndu/ezbfffsv27dtZtWpVg5579uzZPPfcc4wdO5YuXbpQUlLCSy+9RHx8vG/0oi7eVsN///vfmThxIuHh4Zx77rm+cHTMMcfQp08f3nnnHXr27FmrhXJdUlNTufvuu7n//vs588wzOe+881i7di3PPfccgwYNqleQqsvo0aPJzs7m3HPPpUuXLpSVlfHpp5/y4YcfMmjQIM4999yDPvahhx5i0aJFDBkyhMmTJxMWFsYLL7yAw+Hg8ccfr7V/VVUVw4cPZ/z48b7ahwwZwnnnnQd4PsmdMWMGl156KcceeywTJ04kNTWVnJwc/vvf/zJ48GCeffbZQ74eb3vshjZHCA8PZ+rUqVxxxRUMHTqUCy+8kN27d/PUU0+RlZXFX//6V9++jzzyCKNHj2bw4MFcccUVFBQU8Oyzz9KnT59af4SNHj2av//97xQXF/uFk4suuohffvmFRx99lB9++IGJEyeSnZ1NWVkZv/zyC2+++SZxcXG1mioUFRX5zo1VXl7Ohg0bmDt3Lhs3bmTixIk8+OCDDXrd+1u0aBGZmZkcc8wx9dp/woQJPPPMM9x333307du31gjSGWecQXp6OoMHD6Zt27asWbOGZ599llGjRvnWLf3www+ceuqp3HffffU+L1JdAv2zv7+TTjqJpKQkLr/8cm666SYsFgtz5sxpUFBtCrfffjtvv/0206dP57HHHmPixInceeedjB07lptuuony8nJmzJjBUUcd5XcenAEDBnD++eczffp09u7dywknnMDSpUtZt24d4D+SPWXKFBYuXMjgwYO57rrrcLlcvvf6/k07unTpwkMPPcTdd9/Nli1bGDNmDHFxcWzevJl58+Zx9dVXc9tttxEeHs5DDz3ENddcw2mnncaECRPYvHkzr7zyykHXBB2O1Wrl5Zdf5qyzzqJ3795cccUVtG/fnh07dvD5558THx/Phx9+SElJCR06dOCCCy6gX79+xMbG8umnn7Js2TKmTZsGeD5gu+GGG/jTn/7EUUcdRXV1NXPmzMFms3H++ec3qj6RVqG529GJhDJvK1vvxW63G+np6cbpp59uPPXUU0ZxcXGdj9u4caNx2WWXGenp6UZ4eLjRvn1745xzzjHefffdWsc+sPX1gW2TV6xYYVx44YVGZmamERERYaSlpRnnnHOO8eOPP/o9jjrOXv/ggw8a7du3N6xWa53tsr3toR955JEGfV+effZZo0ePHkZ4eLjRtm1b47rrrjMKCgr89mlIi+w333zTmDhxotGlSxcjKirKiIyMNHr16mX8/e9/r/U9rut1rlixwhg5cqQRGxtrREdHG6eeeqrxzTff+O3j/X4vXbrUuPrqq42kpCQjNjbWuPjii429e/fWqunzzz83Ro4caSQkJBiRkZFGly5djEmTJtX6vtelsS2yvf7zn/8YxxxzjBEREWG0adPGuPjii43t27fXevxbb71l9OjRw4iIiDD69OljfPDBB8b5559v9OjRw2+/3bt3G2FhYcacOXPqrGPJkiXGBRdcYGRkZBjh4eFGfHy8MXDgQOO+++4zcnNz/fb1tnD2XmJjY41u3boZl1xyibFw4cKDfj9GjRp12O+Hy+UyMjIyjH/84x+H3dfL7XYbHTt2NADjoYceqnX/Cy+8YJxyyilGcnKyERERYXTp0sW4/fbbjaKiIt8+3n+HA99Xh1JXi2zDOLKffcM4dAvyr7/+2jjhhBOMqKgoo127dsYdd9zhaxW+/3voYC2yn3jiiVrHrM/r9n5/DtayediwYUZ8fLyvrf/ChQuNPn36GHa73ejevbvx2muv1WqRbRiGUVZWZlx//fVGmzZtjNjYWGPMmDHG2rVrDcB47LHH/PZdvHixccwxxxh2u93o0qWL8fLLLxu33nqrERkZWaue9957zxgyZIgRExNjxMTEGD169DCuv/56Y+3atX77Pffcc0Z2drYRERFhDBw40Pjiiy+MoUOH1tki+8DX7v2evvLKK37bV65caYwbN873fuvUqZMxfvx4Y/HixYZhGIbD4TBuv/12o1+/fkZcXJwRExNj9OvXz3juued8x9i0aZNx5ZVXGl26dDEiIyONNm3aGKeeeqrx6aef1vn9FxEPi2GY/LGQiASNp556ir/+9a9s2bKlVvejUDNr1iyuuOIKli1b5ltrFIr69+9PamoqixYt8tv+5z//mXXr1vk6ArZE8+fP56KLLmLjxo1kZGSYXY6Y4KeffuKYY47htddeq3Uy0gONGTOGX3/91deZTURaN60JEpF6MQyDmTNnMnTo0JAPQKHI6XTWWjewZMkSVq1axbBhw2rtf99997Fs2bImaQ8dKFOnTuWGG25QAGolKioqam2bPn06VqvVr/lDXfuuX7+e//3vf3W+10WkddKaIBE5pLKyMj744AM+//xzVq9ezfvvv292SdIIO3bsYMSIEVxyySW0a9eO33//neeff5709HSuvfbaWvtnZmZSWVlpQqX19+2335pdgjSjxx9/nOXLl3PqqacSFhbGggULWLBgAVdffXWtro6dO3dm0qRJvvORzZgxA7vdzh133GFS9SLS0igEicgh7dmzh4suuojExET+9re/+RoCSHBJSkpiwIABvPzyy+zZs4eYmBhGjRrFY4895js3kEhLdtJJJ7Fo0SIefPBBSktLyczMZMqUKXW2OT/zzDN588032bVrFxEREZx44ok88sgjtU54KiKtl9YEiYiIiIhIq6I1QSIiIiIi0qooBImIiIiISKuiECQiIiIiIq2KQpCIiIiIiLQqCkEiIiIiItKqKASJiIiIiEirohAkIiIiIiKtikKQiIiIiIi0KgpBIiIiIiLSqigEiYiIiIhIq6IQJCIiIiIirYpCkIiIiIiItCoKQSIiIiIi0qooBImIiIiISKuiECQiIiIiIq2KQpCIiIiIiLQqCkEiIiIiItKqKASJiIiIiEirohAkIiIiIiKtikKQiIiIiIi0KgpBIiIiIiLSqigEiYiIiIhIq6IQJCIiIiIirYpCkIiIiIiItCoKQSIiIiIi0qooBImIiIiISKuiECQiIiIiIq2KQpCIiIiIiLQqCkEiIiIiItKqKASJiIiIiEirohAkIiIiIiKtikKQiIiIiIi0KgpBIiIiIiLSqigEiYiIiIhIq6IQJCIiIiIirYpCkIiIiIiItCoKQSIiIiIi0qooBImIiIiISKuiECQiIiIiIq2KQpCIiIiIiLQqYWYXcCTcbjc7d+4kLi4Oi8VidjkiIiIiImISwzAoKSmhXbt2WK2HHusJ6hC0c+dOOnbsaHYZIiIiIiLSQmzbto0OHToccp+gDkFxcXGA54XGx8ebXI2IiIiIiJiluLiYjh07+jLCoQR1CPJOgYuPj1cIEhERERGRei2TUWMEERERERFpVRSCRERERESkVVEIEhERERGRViWo1wSJiIiIiD/DMKiursblcpldikhA2Ww2wsLCAnJqHIUgERERkRBRVVVFbm4u5eXlZpci0iSio6PJyMjAbrcf0XEUgkRERERCgNvtZvPmzdhsNtq1a4fdbtfJ5CVkGIZBVVUVe/bsYfPmzXTr1u2wJ0Q9FIUgERERkRBQVVWF2+2mY8eOREdHm12OSMBFRUURHh7O1q1bqaqqIjIystHHUmMEERERkRByJJ+Oi7R0gXp/66dERERERERaFU2HExEREQlhOTk55OfnN9vzpaSkkJmZ2WzPJ9IYCkEiIiIiISonJ4cePXtS0Yzd4qKio/l9zZqABiHDMLjmmmt49913KSgoYOXKlfTv37/OfS0WC/PmzWPMmDEBe/6WJCsri5tvvpmbb77Z7FKCmkKQiIiISIjKz8+noryci+98graZXZr8+XbnbOT1qbeTn5/f4BD07bffMmTIEM4880z++9//+t338ccfM2vWLJYsWULnzp1JSUk56HFyc3NJSkpqVP0tyaxZs7j55pspLCz0275s2TJiYmLMKSqEKASJiIiIhLi2mV3o0K232WUc0syZM7nxxhuZOXMmO3fupF27dr77Nm7cSEZGBieddNJBH19VVYXdbic9Pb05yjVNamqq2SWEBDVGEBERERFTlZaW8p///IfrrruOUaNGMWvWLN99kyZN4sYbbyQnJweLxUJWVhYAw4YN44YbbuDmm28mJSWFkSNHAp7pcPPnz/c9fvv27Vx44YW0adOGmJgYBg4cyPfffw94wtXo0aNp27YtsbGxDBo0iE8//dSvtqysLB555BGuvPJK4uLiyMzM5MUXXzzk6xk2bBg33XQTd9xxB23atCE9PZ0pU6b47fPkk0/St29fYmJi6NixI5MnT6a0tBSAJUuWcMUVV1BUVITFYsFisfgen5WVxfTp033HycnJYfTo0cTGxhIfH8/48ePZvXu37/4pU6bQv39/5syZQ1ZWFgkJCUycOJGSkhLfPu+++y59+/YlKiqK5ORkRowYQVlZ2SFfY7BTCBIRERERU7399tv06NGD7t27c8kll/Dvf/8bwzAAeOqpp3jggQfo0KEDubm5LFu2zPe42bNnY7fb+frrr3n++edrHbe0tJShQ4eyY8cOPvjgA1atWsUdd9yB2+323X/22WezePFiVq5cyZlnnsm5555LTk6O33GmTZvGwIEDWblyJZMnT+a6665j7dq1h3xNs2fPJiYmhu+//57HH3+cBx54gEWLFvnut1qtPP300/z666/Mnj2bzz77jDvuuAOAk046ienTpxMfH09ubi65ubncdttttZ7D7XYzevRo9u3bx9KlS1m0aBGbNm1iwoQJfvtt3LiR+fPn89FHH/HRRx+xdOlSHnvsMcAzffDCCy/kyiuvZM2aNSxZsoRx48b5vv+hStPhRERERMRUM2fO5JJLLgHgzDPPpKioiKVLlzJs2DASEhKIi4vDZrPVmurWrVs3Hn/88YMe94033mDPnj0sW7aMNm3aANC1a1ff/f369aNfv36+rx988EHmzZvHBx98wA033ODbfvbZZzN58mQA7rzzTv7v//6Pzz//nO7dux/0uY8++mjuu+8+X53PPvssixcv5vTTTwfwa2yQlZXFQw89xLXXXstzzz2H3W4nISEBi8VyyOl9ixcvZvXq1WzevJmOHTsC8Oqrr9K7d2+WLVvGoEGDAE9YmjVrFnFxcQBceumlLF68mIcffpjc3Fyqq6sZN24cnTp1AqBv374Hfc5QoZEgERERETHN2rVr+eGHH7jwwgsBCAsLY8KECcycOfOwjx0wYMAh7//pp5845phjfAHoQKWlpdx222307NmTxMREYmNjWbNmTa2RoKOPPtp32xtM8vLyDvnc+z8GICMjw+8xn376KcOHD6d9+/bExcVx6aWXsnfvXsob0MlvzZo1dOzY0ReAAHr16kViYiJr1qzxbcvKyvIFoANr6devH8OHD6dv37786U9/4qWXXqKgoKDeNQQrhSARERERMc3MmTOprq6mXbt2hIWFERYWxowZM3jvvfcoKio65GMP1yUtKirqkPffdtttzJs3j0ceeYQvv/ySn376ib59+1JVVeW3X3h4uN/XFovFN6XuYA71mC1btnDOOedw9NFH895777F8+XL+9a9/AdR67kA4VC02m41FixaxYMECevXqxTPPPEP37t3ZvHlzwOtoSTQdTiTIOBwOnE5nvfZ1u91YrfX7rCM8PJyIiIgjKU1ERKRBqqurefXVV5k2bRpnnHGG331jxozhzTff5Nprr2308Y8++mhefvll9u3bV+do0Ndff82kSZMYO3Ys4BkZ2rJlS6Ofr76WL1+O2+1m2rRpvv+n3377bb997HY7LpfrkMfp2bMn27ZtY9u2bb7RoN9++43CwkJ69epV73osFguDBw9m8ODB3HvvvXTq1Il58+Zxyy23NPCVBQ+FIJEg4nA4yM7KJHfXoYfgvcLDLDir67ewMSM9jc1bchSERERC0O6cjS3yeT766CMKCgr485//TEJCgt99559/PjNnzjyiEHThhRfyyCOPMGbMGB599FEyMjJYuXIl7dq148QTT6Rbt27MnTuXc889F4vFwj333HPYEZ5A6Nq1K06nk2eeeYZzzz23zsYOWVlZlJaWsnjxYvr160d0dDTR0dF++4wYMYK+ffty8cUXM336dKqrq5k8eTJDhw5l4MCB9arl+++/Z/HixZxxxhmkpaXx/fffs2fPHnr27Bmw19sSKQSJBBGn00nurjxyF99KbLT9kPvu3ltK13OeYeuCG2mTGHvIfUvLq8gYPg2n06kQJCISQlJSUoiKjub1qbc323NGRUcf8mSm+5s5cyYjRoyoFYDAE4Ief/xxfv7550bXYrfbWbhwIbfeeitnn3021dXV9OrVyzf17Mknn+TKK6/kpJNOIiUlhTvvvJPi4uJGP1999evXjyeffJKpU6dy9913c8opp/Doo49y2WWX+fY56aSTuPbaa5kwYQJ79+7lvvvuq9Vm22Kx8P7773PjjTdyyimnYLVaOfPMM3nmmWfqXUt8fDxffPEF06dPp7i4mE6dOjFt2jTOOuusQL3cFsliBHH/u+LiYhISEigqKiI+Pt7sckSaXGlpKXFxcZR8e/dhQ9Cu/FIyhk9j79Jb6xWC4k58lJKSEmJjD72viIi0TJWVlWzevJns7GwiIyN923NycsjPz2+2OlJSUsjMzGy255PW5WDvc2hYNtBIkIiIiEgIy8zMVCgROYC6w4mIiIiISKuiECQiIiIiIq2KQpCIiIiIiLQqCkEiIiIiItKqKASJiIiIiEirohAkIiIiIiKtikKQiIiIiIi0KjpPkIiIiEgIczgcOJ3OZnu+8PBwIiIimu35msuLL77Igw8+yI4dO3jyySe5+eab69xv2LBh9O/fn+nTpzdrfc1l0qRJFBYWMn/+fLNLOSIKQSKhyjCIjwJLdQkYMWCxmF2RiIg0M4fDQXZWJrm78prtOTPS09i8JafeQWjSpEnMnj2bRx99lLvuusu3ff78+YwdOxbDMJqqVD8VFRW0b98eq9XKjh07/OovLi7mhhtu4Mknn+T8888nISHhoMeZO3cu4eHhzVFyk9qyZQvZ2dmsXLmS/v37+7Y/9dRTzfZv0pQUgkRCUelmkvd+TNHLwK4XoSAN0oZCQi+zKxMRkWbkdDrJ3ZVH7uJbiY22N/nzlZZXkTF8Gk6ns0GjQZGRkUydOpVrrrmGpKSkJqzw4N577z169+6NYRjMnz+fCRMm+O7LycnB6XQyatQoMjIy6nx8VVUVdrudNm3aNFfJpjhUAAwmWhMkEkoMA/K+hC2vEl7t+dTPwAKOPNj2DuxbbnKBIiJihthoe7NdGmPEiBGkp6fz6KOPHnI/b1CJiIggKyuLadOm+d2flZXFI488wpVXXklcXByZmZm8+OKL9aph5syZXHLJJVxyySXMnDnTt33WrFn07dsXgM6dO2OxWNiyZQtTpkyhf//+vPzyy2RnZxMZGQl4psPtP1XO4XBw55130rFjRyIiIujatavv+C6Xiz//+c9kZ2cTFRVF9+7deeqpp/zqmjRpEmPGjOGf//wnGRkZJCcnc/311x9yiqO3tjlz5pCVlUVCQgITJ06kpKTEt8/HH3/MkCFDSExMJDk5mXPOOYeNGzf67s/OzgbgmGOOwWKxMGzYML969n99N910E2lpaURGRjJkyBCWLVvmu3/JkiVYLBYWL17MwIEDiY6O5qSTTmLt2rW+fVatWsWpp55KXFwc8fHxDBgwgB9//PGQ/15HSiFIJJTsWQp5nwFQHtWPtOugsN1kaDPIc//Oj6BknYkFioiI1Gaz2XjkkUd45pln2L59e537LF++nPHjxzNx4kRWr17NlClTuOeee5g1a5bfftOmTWPgwIGsXLmSyZMnc9111/n9wV2XjRs38u233zJ+/HjGjx/Pl19+ydatWwGYMGECn376KQA//PADubm5dOzYEYANGzbw3nvvMXfuXH766ac6j33ZZZfx5ptv8vTTT7NmzRpeeOEFYmNjAXC73XTo0IF33nmH3377jXvvvZe//e1vvP32237H+Pzzz9m4cSOff/45s2fPZtasWbVed12vaf78+Xz00Ud89NFHLF26lMcee8x3f1lZGbfccgs//vgjixcvxmq1MnbsWNxut++1Anz66afk5uYyd+7cOp/njjvu4L333mP27NmsWLGCrl27MnLkSPbt2+e339///nemTZvGjz/+SFhYGFdeeaXvvosvvpgOHTqwbNkyli9fzl133dXkUwo1HU4kVBT9CnlLPbfTT6eYo9lTvArDGgkZZ4HhgoIVsPN/0C0brME/X1lERELH2LFj6d+/P/fdd5/fSIzXk08+yfDhw7nnnnsAOOqoo/jtt9944oknmDRpkm+/s88+m8mTJwNw55138n//9398/vnndO/e/aDP/e9//5uzzjrLNxVv5MiRvPLKK0yZMoWoqCiSk5MBSE1NJT093fe4qqoqXn31VVJTU+s87rp163j77bdZtGgRI0aMADyjSV7h4eHcf//9vq+zs7P59ttvefvttxk/frxve1JSEs8++yw2m40ePXowatQoFi9ezFVXXXXQ1+R2u5k1axZxcXEAXHrppSxevJiHH34YgPPPP7/W9yA1NZXffvuNPn36+F5TcnKy32veX1lZGTNmzGDWrFmcddZZALz00kssWrSImTNncvvtt/v2ffjhhxk6dCgAd911F6NGjaKyspLIyEhycnK4/fbb6dGjBwDdunU76OsKFI0EiYQCRz7seN9zO+VESDnJ/36LBTJGQng8OItgz9fNX6OIiMhhTJ06ldmzZ7NmzZpa961Zs4bBgwf7bRs8eDDr16/H5XL5th199NG+2xaLhfT0dPLyPFPEzzrrLGJjY4mNjaV3796AZ0ra7NmzueSSS3yPu+SSS5g1a5ZvVORgOnXqdNAABPDTTz9hs9l8f/zX5V//+hcDBgwgNTWV2NhYXnzxRXJycvz26d27Nzabzfd1RkaG7zUdTFZWli8A1fWY9evXc+GFF9K5c2fi4+PJysoCqPXch7Jx40acTqffv0t4eDjHHXdcrX/D/f9dvOuqvPXccsst/OUvf2HEiBE89thjftPymopCkEiwM9ywfT64nRCTDW1H1L2f1Q7pZ3hu7/0GXJXNVqKIiEh9nHLKKYwcOZK777670cc4cBqVxWLxhZmXX36Zn376iZ9++on//e9/AHzyySfs2LGDCRMmEBYWRlhYGBMnTmTr1q0sXrz4kM8VExNzyPujoqIOef9bb73Fbbfdxp///GcWLlzITz/9xBVXXEFVVVW9X9PBHO4x5557Lvv27eOll17i+++/5/vvvweo9dyBsn89lpqOtd56pkyZwq+//sqoUaP47LPP6NWrF/PmzWuSOrwUgkSC3Z6voWIHWCOgwxiwHOLHOr4XRKR6AlPBT81VoYiISL099thjfPjhh3z77bd+23v27MnXX/vPZPj666856qij/EZJDqV9+/Z07dqVrl270qlTJ8DTEGHixIm+cOS9TJw4sc5peQ3Rt29f3G43S5curfP+r7/+mpNOOonJkydzzDHH0LVr12YZBdm7dy9r167lH//4B8OHD6dnz54UFBT47WO3e5pc7D/KdqAuXbpgt9v9/l2cTifLli2jV6+GdaQ96qij+Otf/8rChQsZN24cr7zySoMe31BaEyQSzBz7PM0QwLPuJzz+0PtbLJB8HOz8L+xbBsnH6/xBIiLSovTt25eLL76Yp59+2m/7rbfeyqBBg3jwwQeZMGEC3377Lc8++yzPPfdco59rz549fPjhh3zwwQf06dPH777LLruMsWPH1lrg3xBZWVlcfvnlXHnllTz99NP069ePrVu3kpeXx/jx4+nWrRuvvvoq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IkFAIUiknnwjQWEaCapF0+FEREQkiCgEidSTtzucRoLq4A1BZVuhutzcWkREREQOQyFIpD7cLiwVOwCNBNUpMgUikj23S9aZW4uIiIjIYZgegnbs2MEll1xCcnIyUVFR9O3blx9//NHsskT8VeZiMapxVoNhizW7mpbJOxpUpClxIiIi0rKFmfnkBQUFDB48mFNPPZUFCxaQmprK+vXrSUpKMrMskdrKtgKwbR+kWUz/7KBliu8Be77WuiARERFp8UwNQVOnTqVjx4688sorvm3Z2dkmViRyEDUhaGs+pJlcSoul5ggiIiISJEz9SPuDDz5g4MCB/OlPfyItLY1jjjmGl1566aD7OxwOiouL/S4izaLMc6LUnHyT62jJFIJEREQkSJgagjZt2sSMGTPo1q0bn3zyCddddx033XQTs2fPrnP/Rx99lISEBN+lY8eOzVyxtFr7jQSJR2lpqd+lzOb5eTRK1lFaUuzb7nA4TK5URERExJ+pIcjtdnPsscfyyCOPcMwxx3D11Vdz1VVX8fzzz9e5/913301RUZHvsm3btmauWFothSAfR1U1NitkZGQQFxfnuyS074/DCRZXBb07J/i2Z2dlKgiJiIhIi2LqmqCMjAx69erlt61nz5689957de4fERFBREREc5Qm4q/cE4Jy9ppcRwvgrHbjcsPWBTfSJtG/U17YtpfAmc/v/5mAK7ozpeVVZAyfhtPp1M+uiIiItBimhqDBgwezdu1av23r1q2jU6dOJlUkUgfD8K0J0kjQH2Kj7cRG2/03RqWCM58oCuHA+0RERERaCFOnw/31r3/lu+++45FHHmHDhg288cYbvPjii1x//fVmliXir6oAqksB2KaRoEOLSPFcVyktioiISMtlaggaNGgQ8+bN480336RPnz48+OCDTJ8+nYsvvtjMskT81awHcttTqXSaXEtL5w1BDqVFERERablMnQ4HcM4553DOOeeYXYbIwZV7psIZ0ZnAHnNrael8IUgjQSIiItJymToSJBIUakaCjCi1ZD8se7LnuroUXJXm1iIiIiJyEApBIofjnQ4XrRB0WLYICIvz3NZokIiIiLRQCkEih1PTGU4jQfWkKXEiIiLSwikEiRyOdyRIIah+FIJERESkhVMIEjmcmhOlehojyGGpQ5yIiIi0cApBIodSXQGVeQC4ozqYXEyQiKhpjqBz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li1cddVVtGnThrlz55KTk8Orr74a6DpFmoarkoyaNfpaE9TM7ElQtlnNEUTEVG0zu9ChW2+zyxCRZtao7nC33HILkyZNYv369URG/nFelbPPPpsvvvgiYMWJNDVLxTYADEs42KJMrqaVUZtsERERMUmjQtCyZcu45ppram1v3749u3btOuKiRJqLtTwHAHdYgjqUNTe1yRYRERGTNCoERUREUFxcXGv7unXrSE1NreMRIi2TpXwrAIaaIjQ/jQSJiIiISRoVgs477zweeOABnE4nABaLhZycHO68807OP//8gBYo0pSs5ZsBcIclmltIa+QdCXKVg6vS3FpERESkVWlUCJo2bRqlpaWkpqZSUVHB0KFD6dq1K3FxcTz88MOBrlGkyVjLtgBghCcdekcJPFsE2GI8tzUaJCIiIs2oUd3hEhISWLRoEV9//TWrVq2itLSUY489lhEjRgS6PpEmZSnfAmgkyDQRbaC8zLMuKDzZ7GpERESklWhwCHK73cyaNYu5c+eyZcsWLBYL2dnZpKenYxgGFi0ulyBirQlBhtpjm8OeBOXbakKQ2cWIiIhIa9Gg6XCGYXDeeefxl7/8hR07dtC3b1969+7N1q1bmTRpEmPHjm2qOkUCz7EPi7MQ0EiQadQcQUREREzQoJGgWbNm8cUXX7B48WJOPfVUv/s+++wzxowZw6uvvspll10W0CJFmkTpJgByCyCus4YhTOFtjuBQm2wRERFpPg0aCXrzzTf529/+VisAAZx22mncddddvP766wErTqRJ1YSgTXtMrqM100iQiIiImKBBIejnn3/mzDPPPOj9Z511FqtWrTriokSaRU0I2rjb5DpaM+9IUHUxuJ3m1iIiIiKtRoNC0L59+2jbtu1B72/bti0FBfpEV4JE6UYANuWZXEdrZosGawQAluoik4sRERGR1qJBIcjlchEWdvBlRDabjerq6iMuSqRZeKfDKQSZx2LxjQZZnfoARURERJpHgxojGIbBpEmTiIiIqPN+h8MRkKJEmoVCUMtgbwOVu7BWKwSJiIhI82hQCLr88ssPu486w0lQcDuhPAdQCDJdzUiQt125iIiISFNrUAh65ZVXmqoOkeZVlgOGG8MaSW5hpdnVtG41HeI0HU5ERESaS4PWBDWlxx57DIvFws0332x2KdIa1DRFcMdkmVuH/LEmSNPhREREpJm0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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plt.figure(figsize=(10, 6))\n", + "sns.histplot(gamma_within_africa.detach().cpu().numpy(), kde=True, stat=\"density\", label=\"African nations\")\n", + "sns.histplot(gamma_outside_africa.detach().cpu().numpy(), kde=True, stat=\"density\", label=\"Non-African nations\", color=\"orange\")\n", + "fig.suptitle(\"Density of Slope : log(GDP) vs. Terrain Ruggedness\");\n", + "plt.xlabel(\"Slope of regression line\")\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ymJ04pakqHwt" + }, + "source": [ + "## Model Evaluation in Pyro\n", + "\n", + "### Background: Bayesian model evaluation with posterior predictive checks\n", + "\n", + "To assess whether we can trust the results of our inference, we will compare the posterior predictive distribution over possible new data induced by our model to the existing observed data. Computing this distribution is intractable in general because it depends on knowing the true posterior, but we can easily approximate it using our approximate posterior obtained from variational inference:\n", + "\n", + "$$p_{\\theta}(x' | {\\bf x}) = \\int \\! d{\\bf z}\\; p_{\\theta}(x' | {\\bf z}) p_{\\theta}({\\bf z} | {\\bf x})\n", + "\\approx \\int \\! d{\\bf z}\\; p_{\\theta}(x' | {\\bf z}) q_{\\phi}({\\bf z} | {\\bf x})$$\n", + "\n", + "Concretely, to draw an approximate sample from the posterior predictive, we simply draw a sample ${\\hat {\\bf z}} \\sim q_{\\phi}({\\bf z})$ from the approximate posterior, then sample from the distribution over observed variables in our model given that sample $x' \\sim p_{\\theta}(x | {\\hat {\\bf z}})$, as if we had replaced the prior with our (approximate) posterior." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ymJ04pakqHwt" + }, + "source": [ + "### Example: posterior predictive uncertainty in Pyro\n", + "\n", + "To evaluate our example linear regression model, we'll generate and visualize some samples from the posterior predictive distribution using the [Predictive](http://docs.pyro.ai/en/stable/inference_algos.html#pyro.infer.predictive.Predictive) utility class, which implements the recipe above for sampling approximately from $p_{\\theta}(x' | {\\bf x})$.\n", + "\n", + "We generate 800 samples from our trained model. Internally, this is done by first generating samples for the latent variables from the `guide`, and then running the model forward while changing the values returned by unobserved `pyro.sample` statements to the corresponding values sampled from the `guide`." + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "id": "ymJ04pakqHwt" + }, + "outputs": [], + "source": [ + "predictive = pyro.infer.Predictive(model, guide=auto_guide, num_samples=800)\n", + "svi_samples = predictive(is_cont_africa, ruggedness, log_gdp=None)\n", + "svi_gdp = svi_samples[\"obs\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ymJ04pakqHwt" + }, + "source": [ + "The code below is specific to this example and is simply used to plot the 90% credible interval (the interval containing 90% of the probability mass) of the posterior predictive distribution for each country." + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": { + "id": "ymJ04pakqHwt" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+UAAAJJCAYAAADMaparAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3wUZf4H8M9ueu+F0ANIUZSOIF1QQQRFRbGB4qnn6Vn4KbZT9M6znuednr2c3cMKNlBEQAFFei8hIb1uku19nt8fyy7Z7G4ym2yyu8nn/XqhyczszDO7SWa+8zzP96sQQggQERERERERUadTBrsBRERERERERN0Vg3IiIiIiIiKiIGFQTkRERERERBQkDMqJiIiIiIiIgoRBOREREREREVGQMCgnIiIiIiIiChIG5URERERERERBwqCciIiIiIiIKEgYlBMREREREREFCYNyIvKqX79+UCgUbv9iYmLQp08fXHHFFfj555+D3cRO99///hcKhQJLliwJdlPC1pIlS6BQKPDf//7XbfmKFSugUCiwYsWKDm/Dhg0boFAoMG3atA4/Vkc4ceIEFAoF+vXr57HO+bsaCsKlnU7Ov3knTpwIdlM6XHt+33z9DgfC2rVrMWfOHGRmZiImJgb9+vXDLbfcgrKyshZfZ7FY8NRTT+Gss85CQkIC0tLSMG3aNHz66ac+X1NQUIB58+YhKSkJycnJuOSSS1BUVORz+2XLlkGpVOKXX35p8/k5lZaW4qGHHsLZZ5+NrKwsREVFITU1FaNGjcIdd9yB33//3eM1zt+ZDRs2tPv4RBR6GJQTUYvOOeccLF68GIsXL8bs2bMhSRJWrlyJqVOn4rnnnuv09oTizTyFFv6MtE9LwXS46shAsisJ5gOrv/zlL7jgggvw3XffoW/fvrjooosQExODV199FcOHD8euXbu8vs5gMGD69Om47777UFJSggsuuADjxo3D5s2bcfnll+P//u//PF5jNBoxY8YMfPXVVxg3bhzGjBmDL7/8ElOnTkVjY6PH9jt37sS//vUv3HTTTZg0aVK7zvPpp5/GwIED8fjjj+PAgQM466yzcPnll2Py5Mmor6/Hv//9b4wbNw733ntvu45DRGFGEBF50bdvXwFAvP32227LjUajuO666wQAERERIY4cOdKp7QIggvWnq7GxURw6dEhUVFQE5fhdweLFi73+XNXW1opDhw6J2tradh+jtZ8RvV4vDh06JIqLi9t9rGAoKioSAETfvn091h06dEgcOnSow/bvD4vFIg4dOiQKCgo81nX277Gvn7umCgoKxKFDh4TFYum0dgWLr9+3n376SQAQU6dO9flaOe+lv7755hsBQCiVSvHJJ5+4lkuSJFasWCEAiP79+wuTyeTx2jvuuEMAEMOHD3c7n+3bt4vExEQBQHz11Vdur3n++ecFALFixQrXsoceekgAEM8884zbtjabTYwaNUr06NFDNDY2tus8ly9fLgCIqKgo8eyzz3o9n61bt4oZM2aI+fPnuy13/s789NNP7WoDEYUm9pQTkV9iY2Pxn//8BwkJCbDb7fj888+D3aROk5KSgiFDhqBHjx7BbkqXk5mZiSFDhiAzM7PDjxUfH48hQ4agT58+HX6szjZkyBAMGTIk2M0AAERFRWHIkCEYMGBAsJsiy4ABAzBkyBBERUUFuykdrjN/3+T417/+BQC49tprcdlll7mWKxQKPPzwwxg1ahSKiorw/vvvu72uoaEBL7/8MgDg5Zdfdjuf0aNHY/ny5QCAxx9/3O1127dvBwD84Q9/cC275ZZbAABbtmzxaNvOnTvxwgsvICUlpc3n+OOPP+Kpp54CAPzvf//DsmXLEBMT47Hd2WefjXXr1mHZsmVtPhYRhR8G5UTkt8TERAwePBgAPOZfrl27FnPnzkV2djaio6ORl5eHK664wnUT1JxarcZDDz2E4cOHIyEhATExMcjLy8M555yDhx9+GFarFcCpOZBOzee7N2/H0aNHcfPNN2PAgAGIjY1FSkoKpkyZ4nFT5zRt2jTXfL2ff/4ZF110EbKysqBUKl1DXlubU75t2zYsXLgQeXl5iI6ORnZ2Ni666CL88MMPXrdvOqR2//79uOKKK9CjRw9ERETImuvZdKipwWDAAw88gIEDByI2NhZ5eXlYunQpysvLPV7XdHiy3W7Hc889h5EjRyIxMdFj2Le/7yMA1NfX484770Tfvn1deQhuu+021NfX+3xNa3Ncjx49iltvvRWDBw9GfHw8kpOTMWzYMNx6663Yv3+/2z6cfP2MeBuiu3btWigUCgwdOtRnG202G3Jzc6FQKLBnzx63dUajEf/4xz9w9tlnIzU1FbGxsRg8eDDuvfdeqFQqn/tsyddff42pU6ciKSkJKSkpmDx5MlatWtXia3wN3a+srMQdd9yB0047DbGxsYiPj0fv3r1x7rnn4tlnn3Vtt2TJEvTv3x8AUFxc7PEeOjX9vEpKSrB06VL07t0bUVFRrt8PucPgX3/9dYwePRoJCQlITU3FnDlz8Ouvv/p1fk5Nf4+btuGdd94BAFx//fVu59P0562lOeUGgwFPPvkkRo0ahaSkJMTHx+P000/HQw89hIaGBo/tm567EAKvvfaa6xxTUlJw3nnnYevWrS2+L82NGjUKCoUCO3fudFteU1MDpVIJhULhdcjzjBkzoFAosH79etcyb79v06ZNw/Tp0wEAGzdudHuffH2GRUVFuPbaa5Gbm4uYmBgMGDAADz30EMxms1/n5pxDPXPmTI91CoUC5557LgB4zBH/9ttvYbFY0KdPH5xzzjker73qqqsAAL/++isqKipcy52/k+np6a5lGRkZAACdTudaVlxcjIcffhjz58/HpZde6tc5Nfe3v/0NADBv3jxccsklLW6rUCgwefLkdh2PiMJLZLAbQEThSaPRAIDbk/6//OUv+Nvf/gaFQoGJEyeiT58+OHToEFauXInPPvsMr732Gm644QbX9gaDAZMmTcL+/fuRlZWFc889FwkJCaiqqsLhw4exZcsW3H333UhNTcWIESOwePFi18314sWL3dqTmJjo+vqTTz7BddddB5PJhCFDhmDOnDlQq9X47bffcO2112L9+vV46623vJ7XJ598gldeeQVDhgzBzJkzUV9f77U3o7nXX38dt9xyCyRJwsiRIzFt2jQUFxfj66+/xtdff40VK1bgkUce8fraLVu24JZbbkGPHj0wZcoUGI1GJCUltXpMJ4vFgnPPPRd79+7FtGnTMGrUKPzyyy9466238O2332LTpk0YNGiQx+uEEFiwYAHWrFmDyZMnY+jQoThw4IDbe+Hv+1hdXY3Jkyfj2LFjSEtLw9y5cyFJEj744AOsWbMGp59+uuzzcvrwww9xww03wGw2o0+fPpgzZw4kSUJhYSFeeeUVZGdn44wzzvDrZ6S5WbNmoVevXjh8+DB+/fVXnH322R7bfPfdd6iursaoUaNw1llnuZZXVFTgggsuwL59+5Ceno6xY8ciKSkJO3fuxDPPPINPPvkEGzZsQN++fWWf8z//+U/cfffdAIBx48ZhwIABOHbsGC6++GLXcrmqqqowZswYVFRUoE+fPrjgggsQGxuLiooK7N69Gzt27HDNu500aRJ0Oh0+++wzJCQkuPVaenPs2DGMHDkS0dHROOeccyCE8Kv39e6778bzzz+Pc845B/Pnz8e+ffvw3Xff4YcffsDKlStbDV5ak5iYiMWLF+OXX37B8ePHcc4552DgwIGu9SNGjGh1H/X19Tj33HOxe/duJCcnY8aMGYiKisLGjRvx+OOP48MPP8T69et9Bq7XX389PvzwQ0yePBlz587F7t278cMPP2DTpk3YuHEjxo8fL+tcZs6ciV27dmHdunUYNWqUa/m6desghHB93ZTRaMSWLVsQFxfnNWhtyvlzsXbtWuTk5OCCCy5wrfP2me7evRt33HEH0tLSMHXqVNTX12Pz5s2uudJffPGFrPMCTgXCzsC4Oefxd+zY4bbcOc98zJgxXl+Xn5+P9PR01NfXY/fu3cjLywMA12d16NAhjBw50vU1APTs2dP1+ltvvRVKpRIvvvii7HPxprGxEZs2bQLg+XeJiAgA55QTkXe+5pQLIcSePXuEUqkUAMRbb70lhBDiu+++EwBEbGys+P777922f+ONN1zz6Pbv3+9a/s477wgAYvbs2R7zOO12u9iwYYMwm81uy9HKXNS9e/eKmJgYERsbKz777DO3dSdOnBDDhw8XAMQ777zjtm7q1Kmuff/nP//xuu+3335bABCLFy/2OGZkZKRQKBTi3XffdVv37bffiujoaAHA431xzs0EIO677z5ht9t9npc3zvmfAMTAgQPd5kgbjUZx6aWXCgDi7LPPdnudc84wANGrVy+veQHa+j5edtllAoCYPHmy2/xLlUolxo8f7zpu85+rRx55RAAQjzzyiNvy7du3i6ioKKFQKMS///1vj/foxIkTYvv27W7LWvsZ8TVv9sEHHxQAxM033+z1dZdccokAIF544QXXMkmSxDnnnCMAiKVLlwqNRuNaZ7VaxbJlywQAMX36dJ/taW7Pnj0iIiLCY36tEEK8//77QqFQ+Jzz7e3cH330UQFA3HTTTUKSJLd1FotFrFu3zm2ZnDnlzs8LgLjmmmu8zo1taT/O18bFxYkff/zRbd3TTz8tAIiUlBRRXV3d6vk15fw9bj7vVs48aOffvKKiIrflV1xxhQAgxo8fL+rq6lzLtVqtmD17tgAgJk6c6PXcneff9HfMZrOJG264QQAQ5513ns/2NLd27VoBQMyaNctt+fXXXy8AiDPPPFMoFAq3edW+XuPr982fOeUAxIMPPihsNptr3b59+0RCQoIAILZs2SL73Hr27CkAiBdffNHr+ptvvtl1TJ1O51q+YMECAUDceeedPvd95plneux7zZo1AoCYNm2aKCkpESUlJWLatGkCgPj888+FEEJ89NFHLbbJHz/++KOr/SUlJW3ah/P1nFNO1DUxKCcir7wF5Y2NjeKbb74RAwYMEABEXl6e6wbp3HPPFQDE3Xff7XV/c+fOFQDEH/7wB9cy5833c889J7tdrd2UO2+gn332Wa/rt23bJgCI0aNHuy133szPmDHD5759BeVLly4VAMSCBQu8vu62227zemPsvLk97bTT3G5s5WoalH/55Zce66urq0V8fLwAIDZv3uxa3jRgaP4Qwakt72NJSYlQKpVCoVCIAwcOeLxm165dfgflF198sQAgbr/9dl9vg4e2BuUFBQWuYNBoNLqtq6mpEVFRUSImJkaoVCrXcufDqBEjRgir1epxLLvdLs444wwBQOzbt09W+2+88UYBQFxxxRVe18+fP9+voPzWW291CzZa409Qnp6e7jP5lZyg3FcwNWbMGAFAPP74415f50ugg/Li4mLXz/SePXs8XlNWViZiY2Nb/B1bvXq1x+sqKysFABETEyM7sZzBYBAxMTEiLi7O7SFInz59RN++fcV//vMfAUB8/PHHrnX33HOPACCeeuopt30FIigfPXq0x0MeIYS45ZZbBADx2GOPyTovIYS49tprBQAxcuRIj33W19eLtLQ01/vZNNHmrFmzXA8HfJk4caIAIP7+97+7LXf+jWv678orrxRCCNHQ0CBycnLE2Wef7fYg0GazefxtkOPjjz92HcPbAyw5GJQTdW2cU05ELWo6BzM1NRUXXnghjh8/jgEDBuDbb79FQkICbDYbNm/eDAA+51svXboUAPDTTz+5lo0dOxaAo0TMu+++2+KcYzkkScJ3330HALjiiiu8bjNmzBgkJiZi165dMJlMHutbG67rjXP+amvn/vPPP8Nut3usv/jiixEREeH3cZ1SU1Mxb948j+XZ2dmuIai+att6myfZ1vdx06ZNkCQJo0aNwrBhwzxeM2LECJx55pmyzgkA7Ha7az7+TTfdJPt1bTVgwABMmTIFarXaY+jtBx98AKvVivnz57vNQ/3mm28AON7H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prWfETlln5588km3UklvvfWWz23Ly8vFiBEjBACRkJAgJk6cKK688kpXGyMiIgQAv0opOcsFAo762FdddZUYO3asACDuuusuv0qiOUuo5eXliTlz5oirr75azJkzR6SkpAgA4owzznCrry7EqXrzvXv3FosWLXK9h04tfV5OckuiKRQKMWXKFLFo0SIxfPhw19+L5jXahRCisLBQpKamCgCiT58+4tJLLxVTpkwRcXFxYubMma7yV81/j/fs2SOUSqVQKpVi5syZ4vrrrxdLly4Vq1atcm3jq055XV2dOOuss1zl8i6++GJx2WWXiaysLAFA9O/f3+M1cn7HfB2vNUeOHHG9f83LowkhXD8faFaCsqmWPj9nObrBgweLq6++WixdulQsX77ctb61v1st/Z1sSUpKisjLyxPnnXeeuOqqq8S0adNEdHS0ACBuuukmt9JkTen1ejFhwgQBQKSlpYlLL71UXHDBBa6/Gb7KdDb16quvepSTc9LpdGLgwIECgBg7dqyYP3++iIuLEwqFQqxZs8avcxRCiMcff9zVtqSkJDFz5kxx1VVXiXnz5ol+/fq5Prum77kQLIlG1NUxKCcir9oSlAvhqNs8Z84ckZGRISIjI0Vubq64/PLLxW+//eax7a5du8R9990nJk2aJHr27Cmio6NFVlaWGD16tPj73//uFmg7GY1Gce+994qBAwe6bti83dgWFRWJu+66S5xxxhkiISFBxMbGir59+4pp06aJJ598UhQUFLht396gXAghfv31V3HZZZeJ3NxcERkZKTIyMsSFF14ovv/+e6/bByoonzp1qtDpdOKee+4R/fv3F9HR0SInJ0csWbJElJSUeLxOblDu3Naf91EIRxBz++23i169eono6GjRq1cvccstt4ja2lqf59xakHfgwAGxdOlS0b9/fxETEyNSUlLEsGHDxG233eZRE721nxE5QXlFRYUrmE5ISBBarbbF98lkMolXXnlFTJ8+3fWzn52dLUaMGCH+9Kc/ibVr17b4em9WrVolJk2aJBISEkRiYqKYOHGi+PTTT2UFu01t2rRJ3HnnnWLcuHEiNzdXREdHi9zcXDFhwgTxwgsvCJ1O57EflUolbr75ZtGnTx9XANF0v4EKyoUQ4uWXXxYjRowQcXFxIjk5WVxwwQVuNb+bO3jwoFiwYIFIS0sTMTExYvDgweJvf/ubsFgsLf4ef/HFF+Kcc84RSUlJrodlTdvfUpCs1+vFE088IUaMGCHi4+NFbGysGDp0qHjggQdEfX29X+cu53it6d27twAgZs2a5bHum2++cb2///vf/7y+vqXPr7i4WFx11VWiR48eIjIy0uM8Oioof/jhh8XZZ58tMjMzRVRUlMjNzRWXXHKJrN8ds9ksnnjiCXHGGWeIuLg4kZKSIqZMmSJWrlzZ6murqqpEamqqmDNnjs9tysrKxKJFi0RaWpqIjo4WY8aMEV9//bVf59fUiRMnxP333y/Gjh3r+nuRkpIiRo4cKe644w6xc+dOj9cwKCfq2hRCBGgSHBERdaoNGzZg+vTpmDp1atDrORMRERFR23BOOREREREREVGQMCgnIiIiIiIiChIG5URERERERERBwjnlREREREREREHCnnIiIiIiIiKiIGFQTkRERERERBQkDMqJiIiIiIiIgoRBOREREREREVGQMCgnIiIiIiIiChIG5URERERERERBwqCciIiIiIiIKEgYlBMREREREREFCYNyIiIiIiIioiBhUE5EREREREQUJAzKiYiIiIiIiIKEQTkRERERERFRkDAoJyIiIiIiIgoSBuVEREREREREQcKgnIiIiIiIiChIGJQTERERERERBQmDciIiIiIiIqIgYVBOFGaOHTuG8847DykpKVAoFPjyyy9b3H7FihVQKBSd07gwMW3aNEybNi3YzSAioi7mvffew5AhQxAVFYXU1NRWt+/Xrx+WLFnS4e0KFydOnIBCocB///vfYDeFqFMxKKdu47///S8UCgViY2NRXl7usX7atGk444wzgtCyUxobGxEbGwuFQoFDhw553Wbx4sXYt28fHn/8cbz33nsYM2ZMJ7cysPr16weFQoHbb7/dY92GDRugUCjw6aef+r3fgwcPYsWKFThx4kQAWklERN3dSy+9BIVCgfHjx3tdf/jwYSxZsgQDBgzA66+/jtdee62TWxhYzmuwQqHAjh07PNYvWbIEiYmJbdr3hx9+iOeff76dLSTqOhiUU7djNpvx5JNPBrsZXn3yySdQKBTIzc3FBx984LHeaDRi69atWLp0KW677TZcc8016NWrV4v7fOihh2A0GjuqyQHz+uuvo6KiImD7O3jwIB599FGvQfn333+P77//PmDHIiKiru+DDz5Av379sG3bNhQUFHis37BhAyRJwr/+9S8sWbIECxcubHWfR44cweuvv94RzQ2oFStWBHR/voLyvn37wmg04tprrw3o8YhCHYNy6nZGjBgR8AAwUN5//33MmTMHixYtwocffuixvra2FgBkDYnT6/UAgMjISMTGxga0nYF2+umnw263d9rDkujoaERHR3fKsYiIKPwVFRVhy5YteO6555CVleX1wXlNTQ2A1q/RQgjXw/KYmBhERUUFvL2BNGLECHz99dfYuXNnhx/LOaIxIiKiw49FFEoYlFO388ADD8gOAG02G/76179iwIABiImJQb9+/fDAAw/AbDa7bdevXz/MnTsXv/zyC8aNG4fY2Fjk5+fj3Xffld2ukpIS/Pzzz7jyyitx5ZVXum4AnFasWIG+ffsCAO655x4oFAr069fPtU6hUODgwYO46qqrkJaWhkmTJrmta+7999/HuHHjEB8fj7S0NEyZMsWt93jVqlW48MILkZeXh5iYGAwYMAB//etfYbfb3fbjHPZ/8OBBTJ8+HfHx8ejZsyeefvpp2efer18/XHfddbIelhQXF+PWW2/F4MGDERcXh4yMDFx++eVuPeL//e9/cfnllwMApk+f7hp+t2HDBlebm88pr6mpwdKlS5GTk4PY2FicddZZeOedd9y2cc51e/bZZ/Haa6+5fi7Gjh2L33//3W3bqqoqXH/99ejVqxdiYmLQo0cPzJ8/n8PpiYjC0AcffIC0tDRceOGFuOyyyzyC8n79+uGRRx4BAGRlZUGhULh6l533CGvXrsWYMWMQFxeHV1991bWu+ZzyxsZG3HXXXejXrx9iYmLQq1cvXHfddairqwMAWCwWPPzwwxg9ejRSUlKQkJCAyZMn46effnLbjz/XrJbcfvvtSEtLk9VbLufeYdq0afjmm29QXFzsuj4772d8zSlfv349Jk+ejISEBKSmpmL+/Pke0/yc9zsFBQVYsmQJUlNTkZKSguuvvx4Gg8Ft2x9++AGTJk1CamoqEhMTMXjwYDzwwAOy3xOiQIsMdgOIOlv//v1dAeB9992HvLw8n9veeOONeOedd3DZZZdh2bJl+O233/DEE0/g0KFD+OKLL9y2LSgowGWXXYalS5di8eLFeOutt7BkyRKMHj0ap59+eqvt+uijj5CQkIC5c+ciLi4OAwYMwAcffICJEycCABYsWIDU1FTcddddWLRoEebMmeMxl+vyyy/HoEGD8Pe//x1CCJ/HevTRR7FixQpMnDgRjz32GKKjo/Hbb79h/fr1OO+88wA4AtvExETcfffdSExMxPr16/Hwww9Do9HgmWeecdtfQ0MDLrjgAixYsAALFy7Ep59+iuXLl2P48OGYPXt2q+cOAA8++CDeffddPPnkk/j3v//tc7vff/8dW7ZswZVXXolevXrhxIkTePnllzFt2jQcPHgQ8fHxmDJlCv785z/j3//+Nx544AEMHToUAFz/b85oNGLatGkoKCjAbbfdhv79++OTTz7BkiVL0NjYiDvuuMNt+w8//BBarRY333wzFAoFnn76aSxYsACFhYWuHo9LL70UBw4cwO23345+/fqhpqYGP/zwA0pKSlw3H0REFB4++OADLFiwANHR0Vi0aBFefvll/P777xg7diwA4Pnnn8e7776LL774Ai+//DISExNx5plnul5/5MgRLFq0CDfffDP+8Ic/YPDgwV6Po9PpMHnyZBw6dAg33HADRo0ahbq6OqxevRplZWXIzMyERqPBG2+8gUWLFuEPf/gDtFot3nzzTZx//vnYtm0bRowY4bZPOdesliQnJ+Ouu+7Cww8/jJ07d2LUqFE+t5Vz7/Dggw9CrVajrKwM//znPwGgxbnp69atw+zZs5Gfn48VK1bAaDTihRdewDnnnIOdO3d6XFMXLlyI/v3744knnsDOnTvxxhtvIDs7G0899RQA4MCBA5g7dy7OPPNMPPbYY4iJiUFBQQE2b97c6ntB1GEEUTfx9ttvCwDi999/F8ePHxeRkZHiz3/+s2v91KlTxemnn+76fvfu3QKAuPHGG93283//938CgFi/fr1rWd++fQUAsWnTJteympoaERMTI5YtWyarfcOHDxdXX3216/sHHnhAZGZmCqvV6lpWVFQkAIhnnnnG7bWPPPKIACAWLVrksV/nOqdjx44JpVIpLrnkEmG32922lSTJ9bXBYPDY18033yzi4+OFyWRyLZs6daoAIN59913XMrPZLHJzc8Wll17a6nn37dtXXHjhhUIIIa6//noRGxsrKioqhBBC/PTTTwKA+OSTT1ps19atWz3a8MknnwgA4qeffvLYfurUqWLq1Kmu759//nkBQLz//vuuZRaLRUyYMEEkJiYKjUYjhDj1/mdkZIj6+nrXtqtWrRIAxFdffSWEEKKhocHr50REROFn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O++4Xc/379+P77//3nWv5o/6+nqPZc5OCl6jKVjYU07d3oMPPoj33nsPR44ccStddtZZZ2Hx4sV47bXXXEOytm3bhnfeeQcXX3yxK+FLe5jNZnz22WeYNWsWYmNjvW4zb948/Otf/0JNTU27jwcAAwcOxIMPPoi//vWvmDx5MhYsWICYmBj8/vvvyMvLwxNPPIGJEyciLS0Nixcvxp///GcoFAq89957bRqO3hbOhyXN64QDwNy5c/Hee+8hJSUFw4YNw9atW7Fu3TpkZGS4bTdixAhERETgqaeeglqtRkxMDGbMmIHs7GyPfd5000149dVXsWTJEuzYsQP9+vXDp59+is2bN+P5559HUlKSX+0/evQozj33XCxcuBDDhg1DZGQkvvjiC1RXV+PKK6/0780gIqKgWL16NbRaLebNm+d1/dlnn42srCx88MEHuOKKKwJyzHvuuQeffvopLr/8ctxwww0YPXo06uvrsXr1arzyyis466yzMHfuXHz++ee45JJLcOGFF6KoqAivvPIKhg0bJnu6W3vccccd+Oc//4k9e/a49VL7c+8wevRo/O9//8Pdd9+NsWPHIjExERdddJHX4z3zzDOYPXs2JkyYgKVLl7pKoqWkpMiqnd7cY489hk2bNuHCCy9E3759UVNTg5deegm9evXCpEmT/N4fUSCwp5y6vYEDB/ocGv7GG2/g0Ucfxe+//44777wT69evx/3334+PP/44IMf+5ptv0NjY6PNCBAAXXXQRbDZbwI4JOC5Ib731FoxGIx588EE8/PDDKC4uxrnnngsAyMjIwNdff40ePXrgoYcewrPPPotZs2Z57bnuKA899JDXeWH/+te/cN111+GDDz7AsmXLUFlZiXXr1nnUOM3NzcUrr7yCmpoaLF26FIsWLcLBgwe9HisuLg4bNmzA1VdfjXfeeQfLli1DfX093n77bY8a5XL07t0bixYtwoYNG3D//ffj/vvvh0ajwcqVK3HppZf6vT8iIup8H3zwAWJjYzFr1iyv65VKJS688EKsWbMGKpUqIMdMTEzEzz//jD/+8Y/49ttv8ec//xkvvfQSBg8ejF69egEAlixZgr///e/Ys2cP/vznP2Pt2rV4//33MWbMmIC0oTWpqam48847PZb7c+9w66234qqrrsLbb7+Nq666CrfffrvP482cORNr1qxBRkYGHn74YTz77LM4++yzsXnzZtkJ9JqaN28e+vTpg7feegt/+tOf8J///AdTpkzB+vXrkZKS4vf+iAJBITqr64uIiIiIiIiI3LCnnIiIiIiIiChIGJQTERERERERBQmDciIiIiIiIqIgYVBOREREREREFCQMyomIiIiIiIiChEE5ERERERERUZBEBrsBHU2SJFRUVCApKQkKhSLYzSEiIoIQAlqtFnl5eVAq+Xy8vXitJyKiUOPPtb7LB+UVFRXo3bt3sJtBRETkobS0FL169Qp2M8Ier/VERBSq5Fzru3xQnpSUBMDxZiQnJwe5NURERIBGo0Hv3r1d1yhqH17riYgo1Phzre/yQblzGFtycjIv1EREFFI41DoweK0nIqJQJedaz4lsREREREREREHCoJyIiIiIiIgoSBiUExEREREREQUJg3IiIiIiIiKiIGFQTkRERERERBQkDMqJiIiIiIiIgoRBOREREREREVGQMCgnIiIiIiIiChIG5URERERERERBwqCciIiIiIiIKEgYlBMREREREREFSVCD8k2bNuGiiy5CXl4eFAoFvvzyS7f1n3/+Oc477zxkZGRAoVBg9+7dQWknERERERERUUcIalCu1+tx1lln4T//+Y/P9ZMmTcJTTz3VyS0jIiIiIiIi6niRwTz47NmzMXv2bJ/rr732WgDAiRMnOqlF5JNkB4q3ALpqIDEH6DsRUEYEu1VERERERERhLahBeUcwm80wm82u7zUaTRBb00UcXA2sWQ5oKk4tS84DLngKGDYveO0iIqJuidd6IiLqSrpcorcnnngCKSkprn+9e/cOdpPC28HVwMrr3ANyANBUOpYfXB2cdhERUbfFaz0REXUlXS4ov//++6FWq13/SktLg92k8CXZHT3kEF5Wnly25j7HdkRERJ2E13oiIupKutzw9ZiYGMTExAS7GV1D8RbPHnI3AtCUO7brP7nTmkVERN0br/VERNSVdLmecgogXXVgtyMiIiIiIiI3Qe0p1+l0KCgocH1fVFSE3bt3Iz09HX369EF9fT1KSkpQUeHorT1y5AgAIDc3F7m5uUFpc7eSmBPY7YiIiIiIiMhNUHvKt2/fjpEjR2LkyJEAgLvvvhsjR47Eww8/DABYvXo1Ro4ciQsvvBAAcOWVV2LkyJF45ZVXgtZmABDC2xzrLqjvREeWdSh8bKAAkns6tiMiIiIi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W2+9leompY1XXnkFl1xyCUpLSyFJEv70pz+luklpZf369TjjjDNgtVrhcrnwyU9+Ert27Up1s9LGAw88gLlz58Jms8Fms2HZsmV45plnUt2stHX33XdDkiR885vfTHVT0sYdd9wBSZLCfmbMmJHqZlGaytX+PFf76lzug9m/npJrfWeu94tHjhzBF7/4RRQUFMBoNOK0007D22+/nepmjYpBeYx+97vfYe3atbj99tvxzjvvYN68ebjgggvQ0tKS6qalBY/Hg3nz5uHHP/5xqpuSljZt2oTrrrsOb7zxBl544QUMDAzgYx/7GDweT6qblhbKy8tx9913Y8uWLXj77bdxzjnn4BOf+AQ++OCDVDct7WzevBn/+7//i7lz56a6KWln9uzZaG5uDv38/e9/T3WTKA3lcn+eq311LvfB7F8DcrXvzNV+saOjAytWrIBOp8MzzzyD7du345577kF+fn6qmzY6QTFZvHixuO6660L3fT6fKC0tFevXr09hq9ITAPHEE0+kuhlpraWlRQAQmzZtSnVT0lZ+fr74v//7v1Q3I610dXWJadOmiRdeeEE0NjaKb3zjG6luUtq4/fbbxbx581LdDMoA7M8DcrmvzvU+ONf611ztO3O5X1y3bp34yEc+kupmxIWZ8hh4vV5s2bIF5513XmibLMs477zz8Prrr6ewZZSpOjs7AQAOhyPFLUk/Pp8Pv/3tb+HxeLBs2bJUNyetXHfddbj44ovDvovolN27d6O0tBS1tbW4/PLLcfDgwVQ3idIM+3MCcrcPztX+NZf7zlztF5988kksWrQIl156KVwuFxYsWICf/vSnqW7WmNRUNyATtLW1wefzoaioKGx7UVERdu7cmaJWUaby+/345je/iRUrVmDOnDmpbk7aeP/997Fs2TL09fXBYrHgiSeewKxZs1LdrLTx29/+Fu+88w42b96c6qakpSVLluDhhx9GQ0MDmpubceedd+LMM8/Etm3bYLVaU908ShPszykX++Bc7l9zue/M5X5x7969eOCBB7B27Vrcdttt2Lx5M9asWQNN07B69epUNy8qBuVEU+y6667Dtm3bcmZeT6waGhqwdetWdHZ24g9/+ANWr16NTZs25cyJw1gOHTqEb3zjG3jhhRdgMBhS3Zy0dNFFF4Vuz507F0uWLEFVVRUee+wxXH311SlsGRGlk1zsg3O1f831vjOX+0W/349Fixbhe9/7HgBgwYIF2LZtG37yk5+kbVDO4esxKCwshKIoOH78eNj248ePo7i4OEWtokx0/fXX46mnnsLLL7+M8vLyVDcnrWiahvr6eixcuBDr16/HvHnz8N///d+pblZa2LJlC1paWnD66adDVVWoqopNmzbhhz/8IVRVhc/nS3UT005eXh6mT5+OPXv2pLoplEbYn+e2XO2Dc7V/Zd8ZLpf6xZKSkoiLTjNnzkzr4fsMymOgaRoWLlyIv/3tb6Ftfr8ff/vb33JqTg5NnBAC119/PZ544gm89NJLqKmpSXWT0p7f70d/f3+qm5EWzj33XLz//vvYunVr6GfRokW4/PLLsXXrViiKkuompp3u7m40NTWhpKQk1U2hNML+PDexDw6XK/0r+85wudQvrlixIqLs4YcffoiqqqoUtWh8HL4eo7Vr12L16tVYtGgRFi9ejPvuuw8ejwdf/vKXU920tNDd3R125W3fvn3YunUrHA4HKisrU9iy9HDdddfh0UcfxZ///GdYrVYcO3YMAGC322E0GlPcutS79dZbcdFFF6GyshJdXV149NFHsXHjRjz33HOpblpasFqtEXMfzWYzCgoKcmZO5HhuuukmXHLJJaiqqsLRo0dx++23Q1EUfP7zn0910yjN5HJ/nqt9dS73wbncv+Z635nL/eINN9yA5cuX43vf+x4uu+wyvPXWW3jwwQfx4IMPprppo0v18u+Z5P777xeVlZVC0zSxePFi8cYbb6S6SWnj5ZdfFgAiflavXp3qpqWFaJ8NAPHQQw+lumlp4aqrrhJVVVVC0zThdDrFueeeK55//vlUNyut5VJZl1h89rOfFSUlJULTNFFWViY++9nPij179qS6WZSmcrU/z9W+Opf7YPav4XKp78z1fvEvf/mLmDNnjtDr9WLGjBniwQcfTHWTxiQJIcRUXgQgIiIiIiIiogDOKSciIiIiIiJKEQblRERERERERCnCoJyIiIiIiIgoRRiUExEREREREaUIg3IiIiIiIiKiFGFQTkRERERERJQiDMqJiIiIiIiIUoRBOVESbNy4EZIk4eTJk6luSkrlyudw1lln4Zvf/Gaqm0FERFMoV/q48eTK58C+npKJQTllDUmSxvy54447pqwty5cvR3NzM+x2+4SPsX///rD2OxwONDY24tVXX01gS3Pbww8/jLy8vFQ3g4iIYsS+nuLFvp4yAYNyyhrNzc2hn/vuuw82my1s20033RTX8QYGBiK2eb3emJ6raRqKi4shSVJcrxnNiy++iObmZrzyyisoLS3FypUrcfz48Ukfl4iIKNOwryeibMSgnLJGcXFx6Mdut0OSpLBtv/3tbzFz5kwYDAbMmDED//M//xN6bvBK9e9+9zs0NjbCYDDg17/+Na688kp88pOfxF133YXS0lI0NDQAAH71q19h0aJFsFqtKC4uxhe+8AW0tLSEjjdyKFfwKu1zzz2HmTNnwmKx4MILL0Rzc/O476ugoADFxcWYM2cObrvtNrjdbrz55pthxx3uT3/6U8QJwne/+124XC5YrVZ85StfwS233IL58+eHHh8cHMSaNWuQl5eHgoICrFu3DqtXr8YnP/nJ0D5+vx/r169HTU0NjEYj5s2bhz/84Q9hr/PXv/4V06dPh9FoxNlnn439+/eHPR7r5/B///d/o/5feb1eXH/99SgpKYHBYEBVVRXWr18PABBC4I477kBlZSX0ej1KS0uxZs2acT/joDvuuAPz58/Hr371K1RXV8Nut+Nzn/scurq6Qvt4PB586UtfgsViQUlJCe65556I4/T39+Omm25CWVkZzGYzlixZgo0bNwIA+vr6MHv2bHz1q18N7d/U1ASr1Yqf//znMbeViCgXsa8PYF/Pvp6yjCDKQg899JCw2+2h+4888ogoKSkRjz/+uNi7d694/PHHhcPhEA8//LAQQoh9+/YJAKK6ujq0z9GjR8Xq1auFxWIRV1xxhdi2bZvYtm2bEEKIn/3sZ+Kvf/2raGpqEq+//rpYtmyZuOiii0Kv9/LLLwsAoqOjI9QenU4nzjvvPLF582axZcsWMXPmTPGFL3xh1PcQbNO7774rhBCip6dH3HTTTQKAeOaZZ6K+TyGEeOKJJ8TwP+1HHnlEGAwG8fOf/1zs2rVL3HnnncJms4l58+aF9vnud78rHA6H+OMf/yh27Nghrr32WmGz2cQnPvGJsH1mzJghnn32WdHU1CQeeughodfrxcaNG4UQQhw8eFDo9Xqxdu1asXPnTvHII4+IoqKiuD+H8f6vfvCDH4iKigrxyiuviP3794tXX31VPProo0IIIX7/+98Lm80m/vrXv4oDBw6IN998Uzz44IOjfsYjP7/bb79dWCwW8elPf1q8//774pVXXhHFxcXitttuC+3z9a9/XVRWVooXX3xRvPfee2LlypXCarWKb3zjG6F9vvKVr4jly5eLV155RezZs0f84Ac/EHq9Xnz44YdCCCHeffddoWma+NOf/iQGBwfF0qVLxac+9alR20lERJHY17OvZ19P2YJBOWWlkV/AdXV1oS/zoP/6r/8Sy5YtE0Kc6hTvu+++sH1Wr14tioqKRH9//5ivt3nzZgFAdHV1CSGid9QAxJ49e0LP+fGPfyyKiopGPWawTUajUZjNZiFJkgAgFi5cKLxeb9T3KURkR71kyRJx3XXXhe2zYsWKsI66qKhI/OAHPwjdHxwcFJWVlaGOuq+vT5hMJvHaa6+FHefqq68Wn//854UQQtx6661i1qxZYY+vW7cu7s9hvP+rf/u3fxPnnHOO8Pv9EZ/ZPffcI6ZPnx76fMYTraM2mUzC7XaHtt18881iyZIlQgghurq6hKZp4rHHHgs93t7eLoxGY6ijPnDggFAURRw5ciTstc4991xx6623hu5///vfF4WFheL6668XJSUloq2tLaY2ExFRAPt69vWxYF9PmYDD1ynreTweNDU14eqrr4bFYgn9fPe730VTU1PYvosWLYp4/mmnnQZN08K2bdmyBZdccgkqKythtVrR2NgIADh48OCo7TCZTKirqwvdLykpCRsGN5rf/e53ePfdd/H444+jvr4eDz/8MHQ63bjPC9q1axcWL14ctm34/c7OThw/fjxsm6IoWLhwYej+nj170NPTg/PPPz/sM/zlL38Z+gx37NiBJUuWhL3OsmXLItoz1ucQy//VlVdeia1bt6KhoQFr1qzB888/HzrWpZdeit7eXtTW1uKaa67BE088gcHBwZg/KwCorq6G1WqN2r6mpiZ4vd6w9+lwOEJDHQHg/fffh8/nw/Tp08Pew6ZNm8J+32688UZMnz4dP/rRj/Dzn/8cBQUFcbWTiIhOYV/Pvj4e7Osp3aipbgBRsnV3dwMAfvrTn0Z0JIqihN03m80Rzx+5zePx4IILLsAFF1yAX//613A6nTh48CAuuOCCMReHGdm5SpIEIcS47a+oqMC0adMwbdo0DA4O4lOf+hS2bdsGvV4PWZYjjhFt0ZrJCn6GTz/9NMrKysIe0+v1cR1rrM8hlv+r008/Hfv27cMzzzyDF198EZdddhnOO+88/OEPf0BFRQV27dqFF198ES+88AL+9V//FT/4wQ+wadOmmE9uorXP7/fH/P66u7uhKAq2bNkS8ftlsVhCt1taWvDhhx9CURTs3r0bF154YcyvQURE4djXTx77evb1lDrMlFPWKyoqQmlpKfbu3Yv6+vqwn5qamriPt3PnTrS3t+Puu+/GmWeeiRkzZsR0FTwRPvOZz0BV1dBiKE6nE11dXfB4PKF9tm7dGvachoYGbN68OWzb8Pt2ux1FRUVh23w+H955553Q/VmzZkGv1+PgwYMRn2FFRQUAYObMmXjrrbfCXueNN96I6/3F+n9ls9nw2c9+Fj/96U/xu9/9Do8//jhOnDgBADAajbjkkkvwwx/+EBs3bsTrr7+O999/P652jKaurg46nS60+A4AdHR04MMPPwzdX7BgAXw+H1paWiLeQ3FxcWi/q666Cqeddhp+8YtfYN26ddixY0dC2khElIvY17OvZ19PmYyZcsoJd955J9asWQO73Y4LL7wQ/f39ePvtt9HR0YG1a9fGdazKykpomob7778f1157LbZt24b/+q//SlLLw0mShDVr1uCOO+7A1772NSxZsgQmkwm33XYb1qxZgzfffBMPP/xw2HP+7d/+Dddccw0WLVqE5cuX43e/+x3ee+891NbWhu2zfv161NfXY8aMGbj//vvR0dERWtnVarXipptuwg033AC/34+PfOQj6OzsxD/+8Q/YbDasXr0a1157Le655x7cfPPN+MpXvoItW7ZEtCUW4/1f3XvvvSgpKcGCBQsgyzJ+//vfo7i4GHl5eXj44Yfh8/lCn8sjjzwCo9GIqqqqyXzsIRaLBVdffTVuvvlmFBQUwOVy4T/+4z8gy6eub06fPh2XX345vvSlL+Gee+7BggUL0Nrair/97W+YO3cuLr74Yvz4xz/G66+/jvfeew8VFRV4+umncfnll+ONN96IGD5JRESxYV/Pvj4R2NdTSqRyQjtRskRbFOXXv/61mD9/vtA0TeTn54uPfvSj4o9//KMQInL106DVq1eHrUoa9Oijj4rq6mqh1+vFsmXLxJNPPhn2/GiLv4y3SMtIo7XJ4/GI/Px8sWHDhtBx6uvrhdFoFCtXrhQPPvhgxHG/853viMLCQmGxWMRVV10l1qxZI5YuXRp6fGBgQFx//fXCZrOJ/Px8bzbnqQAAAgpJREFUsW7dOnHppZeKz33uc6F9/H6/uO+++0RDQ4PQ6XTC6XSKCy64QGzatCm0z1/+8hdRX18v9Hq9OPPMM8XPf/7zCX0OY/1fPfjgg2L+/PnCbDYLm80mzj33XPHOO++EjrVkyRJhs9mE2WwWS5cuFS+++OKon3G0xV+GL4ojhBD/7//9P1FVVRW639XVJb74xS8Kk8kkioqKxPe//33R2NgYtiKr1+sV3/72t0V1dbXQ6XSipKREfOpTnxLvvfee2LFjhzAajWEL3HR0dIiKigrx7//+76O2lYiIwrGvZ1/Pvp6yhSREDBNdiCirnH/++SguLsavfvWrqI/7/X7MnDkTl1122ZRlBoiIiChx2NcTZQ4OXyfKcj09PfjJT36CCy64AIqi4De/+U1ocZSgAwcO4Pnnn0djYyP6+/vxox/9CPv27cMXvvCFFLaciIiIYsG+niizMSgnynKSJOGvf/0r7rrrLvT19aGhoQGPP/44zjvvvNA+sizj4Ycfxk033QQhBObMmYMXX3wRM2fOTGHLiYiIKBbs64kyG4evExEREREREaUIS6IRERERERERpQiDciIiIiIiIqIUYVBORERERERElCIMyomIiIiIiIhShEE5ERERERERUYowKCciIiIiIiJKEQblRERERERERCnCoJyIiIiIiIgoRRiUExEREREREaXI/w+1aPbcropXggAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "predictions = pd.DataFrame({\n", + " \"cont_africa\": is_cont_africa,\n", + " \"rugged\": ruggedness,\n", + " \"y_mean\": svi_gdp.mean(0).detach().cpu().numpy(),\n", + " \"y_perc_5\": svi_gdp.kthvalue(int(len(svi_gdp) * 0.05), dim=0)[0].detach().cpu().numpy(),\n", + " \"y_perc_95\": svi_gdp.kthvalue(int(len(svi_gdp) * 0.95), dim=0)[0].detach().cpu().numpy(),\n", + " \"true_gdp\": log_gdp,\n", + "})\n", + "african_nations = predictions[predictions[\"cont_africa\"] == 1].sort_values(by=[\"rugged\"])\n", + "non_african_nations = predictions[predictions[\"cont_africa\"] == 0].sort_values(by=[\"rugged\"])\n", + "\n", + "fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(12, 6), sharey=True)\n", + "fig.suptitle(\"Posterior predictive distribution with 90% CI\", fontsize=16)\n", + "\n", + "ax[0].plot(non_african_nations[\"rugged\"], non_african_nations[\"y_mean\"])\n", + "ax[0].fill_between(non_african_nations[\"rugged\"], non_african_nations[\"y_perc_5\"], non_african_nations[\"y_perc_95\"], alpha=0.5)\n", + "ax[0].plot(non_african_nations[\"rugged\"], non_african_nations[\"true_gdp\"], \"o\")\n", + "ax[0].set(xlabel=\"Terrain Ruggedness Index\", ylabel=\"log GDP (2000)\", title=\"Non African Nations\")\n", + "\n", + "ax[1].plot(african_nations[\"rugged\"], african_nations[\"y_mean\"])\n", + "ax[1].fill_between(african_nations[\"rugged\"], african_nations[\"y_perc_5\"], african_nations[\"y_perc_95\"], alpha=0.5)\n", + "ax[1].plot(african_nations[\"rugged\"], african_nations[\"true_gdp\"], \"o\")\n", + "ax[1].set(xlabel=\"Terrain Ruggedness Index\", ylabel=\"log GDP (2000)\", title=\"African Nations\");" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "UYVGxlOWqHwu" + }, + "source": [ + "We observe that the outcome from our model and the 90% CI accounts for the majority of the data points that we observe in practice, but there are still quite a few non-African nations that are considered unlikely by our approximate posterior." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ncgxXas5qHwu" + }, + "source": [ + "### Example: revisiting Bayesian regression with a full-rank guide\n", + "\n", + "To improve our results, we will try using a guide that generates samples from a multivariate normal distribution over all parameters. This allows us to capture the correlations between the latent variables via a full-rank covariance matrix $\\Sigma \\in \\mathbb{R}^{5 \\times 5}$; our previous guide ignored these correlations. That is, we have\n", + "\n", + "$$\\alpha, \\beta_a, \\beta_r, \\beta_{ar}, \\sigma_u \\sim q_{\\phi = ({\\bf \\mu}, {\\bf \\Sigma})}(\\alpha, \\beta_a, \\beta_r, \\beta_{ar}, \\sigma_u) = \\rm{Normal}((\\alpha, \\beta_a, \\beta_r, \\beta_{ar}, \\sigma_u) | {\\bf \\mu}, {\\bf \\Sigma})$$\n", + "\n", + "$$\\sigma = \\rm{constrain}(\\sigma_u)$$\n", + "\n", + "To write a guide of this form manually, we would need to combine all the latent variables so we could `pyro.sample` them together from a single `pyro.distributions.MultivariateNormal` distribution, choose an implementation of $\\rm{constrain}()$ to fix the value of $\\sigma$ to be positive, create and initialize parameters $\\mu, \\Sigma$ of the appropriate shape, and constrain the variational parameter $\\Sigma$ to remain a valid covariance matrix (i.e. stay positive-definite) throughout the optimization process.\n", + "\n", + "This would be quite tedious, so instead we will use another autoguide that takes care of all of this bookkeeping for us, [pyro.infer.autoguide.AutoMultivariateNormal](https://docs.pyro.ai/en/stable/infer.autoguide.html#automultivariatenormal):" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "id": "EiIpMNKQqHwu", + "outputId": "2b011eff-0086-4420-9b73-8413e5a21e81" + }, + "outputs": [], + "source": [ + "mvn_guide = pyro.infer.autoguide.AutoMultivariateNormal(model)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using `pyro.render_model` demonstrates that unlike our mean-field `AutoNormal` guide, this guide explicitly captures the correlations between all latent variables in our model. The new `_AutoMultivariateNormal_latent` node in the visualized graph corresponds to the equation above; the other nodes corresponding to model variables simply index into individual elements of this tensor-valued random variable." + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "_AutoMultivariateNormal_latent\n", + "\n", + "_AutoMultivariateNormal_latent\n", + "\n", + "\n", + "\n", + "a\n", + "\n", + "a\n", + "\n", + "\n", + "\n", + "_AutoMultivariateNormal_latent->a\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "bA\n", + "\n", + "bA\n", + "\n", + "\n", + "\n", + "_AutoMultivariateNormal_latent->bA\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "bR\n", + "\n", + "bR\n", + "\n", + "\n", + "\n", + "_AutoMultivariateNormal_latent->bR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "bAR\n", + "\n", + "bAR\n", + "\n", + "\n", + "\n", + "_AutoMultivariateNormal_latent->bAR\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sigma\n", + "\n", + "sigma\n", + "\n", + "\n", + "\n", + "_AutoMultivariateNormal_latent->sigma\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AutoMultivariateNormal.scale\n", + "\n", + "AutoMultivariateNormal.scale\n", + "\n", + "\n", + "\n", + "AutoMultivariateNormal.scale->_AutoMultivariateNormal_latent\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "AutoMultivariateNormal.scale_tril\n", + "\n", + "AutoMultivariateNormal.scale_tril\n", + "\n", + "\n", + "\n", + "AutoMultivariateNormal.scale_tril->_AutoMultivariateNormal_latent\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pyro.render_model(mvn_guide, model_args=(is_cont_africa, ruggedness, log_gdp), render_params=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our model and the rest of our inference and evaluation code is essentially unchanged from before: we use `pyro.optim.Adam` and `pyro.infer.Trace_ELBO` to fit the new guide's parameters, then sample from the guide and use `Predictive` to sample from the posterior predictive distribution.\n", + "\n", + "There is one minor difference worth noting: we reuse the guide samples for prediction by passing them directly to `Predictive` via its `posterior_samples` keyword argument instead of passing the guide as in the previous section. This avoids unnecessarily repeating computation." + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": { + "id": "EiIpMNKQqHwu", + "outputId": "2b011eff-0086-4420-9b73-8413e5a21e81" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Elbo loss: 702.4906432628632\n", + "Elbo loss: 548.7575962543488\n", + "Elbo loss: 490.9642730951309\n", + "Elbo loss: 401.81392109394073\n", + "Elbo loss: 333.7779414653778\n", + "Elbo loss: 247.01823914051056\n", + "Elbo loss: 248.3894298672676\n", + "Elbo loss: 247.3512134552002\n", + "Elbo loss: 248.2095948457718\n", + "Elbo loss: 247.21006780862808\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 1min 45s, sys: 21.9 ms, total: 1min 45s\n", + "Wall time: 7.03 s\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%time\n", + "pyro.clear_param_store()\n", + "mvn_guide = pyro.infer.autoguide.AutoMultivariateNormal(model)\n", + "svi = pyro.infer.SVI(model, \n", + " mvn_guide, \n", + " pyro.optim.Adam({\"lr\": 0.02}), \n", + " pyro.infer.Trace_ELBO())\n", + "\n", + "losses = []\n", + "for step in range(1000 if not smoke_test else 2):\n", + " loss = svi.step(is_cont_africa, ruggedness, log_gdp)\n", + " losses.append(loss)\n", + " if step % 100 == 0:\n", + " logging.info(\"Elbo loss: {}\".format(loss))\n", + "\n", + "plt.figure(figsize=(5, 2))\n", + "plt.plot(losses)\n", + "plt.xlabel(\"SVI step\")\n", + "plt.ylabel(\"ELBO loss\")\n", + " \n", + "with pyro.plate(\"samples\", 800, dim=-1):\n", + " mvn_samples = mvn_guide(is_cont_africa, ruggedness)\n", + "\n", + "mvn_gamma_within_africa = mvn_samples[\"bR\"] + mvn_samples[\"bAR\"]\n", + "mvn_gamma_outside_africa = mvn_samples[\"bR\"]\n", + "\n", + "# Interface note: reuse guide samples for prediction by passing them to Predictive\n", + "# via the posterior_samples keyword argument instead of passing the guide as above\n", + "assert \"obs\" not in mvn_samples\n", + "mvn_predictive = pyro.infer.Predictive(model, posterior_samples=mvn_samples)\n", + "mvn_predictive_samples = mvn_predictive(is_cont_africa, ruggedness, log_gdp=None)\n", + "\n", + "mvn_gdp = mvn_predictive_samples[\"obs\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MpNtoWaLqHwv" + }, + "source": [ + "Now let's compare the posterior computed by the previous `AutoDiagonalNormal` guide vs the `AutoMultivariateNormal` guide. We will visually overlay cross-sections of the posterior distribution (joint distributions of pairs of regression coefficients)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MpNtoWaLqHwv" + }, + "source": [ + "Note that the multivariate normal approximation is more dispersed than the mean-field approximation, and is able to model correlations between coefficients in the posterior." + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "id": "uXwf6KLRqHwv" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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G8OGDePcuXOsXbuWn3/+mSNHjjBq1KhC8x06dIivvvqKr7/+mu3bt9unP/7444wdO5bt27fTsmVLbr75ZqZMmcKsWbP4+++/UUpx11132efPyMhgyJAhrF69mm3btnHVVVcxdOhQTpw4Uep+dO/enXXr1pV7/6uKwdUFEELUTqmpqfTp04f9+/fTsmVL3nrrLfr27VtontzcXD744APmzp3L2bNnXVRSUZbrrruOSy65hKCgIFcXxeW++OILAF566SUmT57s4tJUvfDw8CIP2Zs3b+byyy/nwIEDPPDAA06v5uzOVq9ejcVioV69eq4uSiF9+vQpNgzZsWMHM2fOZOXKlQwaNIhly5YV+ZX4rrvu4qabbiI8PLyaSlu6hQsXMnPmTOrUqePqopRJzo3CnWVbrLR+9CeXbHvPY4PwNZX9GGowGHj//feZPHkyb7zxBp07d+ayyy7jpptuon379vb5Jk2axIwZM3jppZfw9/cnPT2dL7/8kpdeesnhMqWkpJCamkrdunUdXqZly5asWrWqxNfvvfde+//HxsbyxBNPcMcdd/Daa68B8PLLLzN48GBmzJgBQPPmzdm4cSMrVqywL/fss88yfvx4/u///g+A6dOn88cff/Dss8/Sv39/+3zjx49n9OjRADz55JO89NJLbN68mauuugqj0cj8+fPt8zZq1IhNmzbx+eefc+ONNzq8vwC+vr7MnTuXhx9+mMmTJxc5v61evZp//vmHo0ePEhMTA8CHH35ImzZt+Ouvv+jWrRtwocnShx9+SERERKHlJ0yYYC/TQw89RM+ePZkzZw6DBg0C4J577mHChAn2+Tt06ECHDh3s/3788cdZtmwZ3377baHw5mJ169bl+PHj5dr3qiQ1ZYQQLjFt2jT2799PbGwsGzZsKBLIAHh5eXH77bezfft2WrVq5YJSCkcEBQXRsmVLj3hIqmr5v8w0a9bMxSVxne7du3P//fcD8PXXX5faNKamadKkCS1btnS4/wJX69ChAz/88AOjRo3CarUybtw40tLSCs0THh5Oy5Yt3SaUqVOnDi1btvSIoEPOjUJU3ogRIzhz5gzffvstV111FWvWrKFz586FgubRo0djtVrtNT+WLl2KTqcrUjujNNnZ2QD2pjSOUEqVWsP1l19+4fLLL6devXoEBAQwZswYkpOTycrKAmD//v1079690DIX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ZXW8nu/DDz8kMjKS559/njZt2hAWFsaQIUN44YUXCnXuXBEVOc75SjvO+estWBvLFarz3CiEKJ9nnnmmXB0EV9azzz7Ljh07OHToEC+//DIffPBBkb7lhPOYzWbatWvHfffd5+qiFOKZvTsJITxaly5d+Oijj9i6dStWq7VQFezyKFg93Rmio6P5+++/Wbt2Lb/88gsbNmzgzz//ZMOGDTz55JMsXLiQhx56yD7/iBEjGDhwIN9++y3r1q1jw4YNLFu2jGXLlvHoo4/y888/24fxW7lyJWvXri2yzXnz5tmbDTz11FPccccdfPfdd6xfv54NGzawZMkSlixZQrdu3fjtt9/szT7yQ5qrrrrKPmRgSRo2bOiU41PdCjazcUR53g9PVt7jkv9ZGTlyZImjHeQr2LTGEeHh4aWOglNZrVq1Yv/+/axatYpff/2VjRs3sm7dOn799Vcee+wx3n33XW699VaH15d/LDp27EiHDh1KnbdHjx5Fpjn7nOOI6trm1q1bARz+jvTt25djx47x/fffs3btWjZu3MhPP/3Ejz/+yNy5c1m2bBmXX355hcpS1fusytFM7+JA3B2U9xwghHBcbGws06ZNq7btbd68mUWLFpGenk7jxo156aWXuO2226pt+7WNyWRi9uzZri5GERLKCCGq3TXXXMP06dNJSUnh22+/tfeY7iz16tUD/vtVvDj5r+XPmy9/6NP8tro5OTm8//773HnnnTz88MOMHDnS/ismXOhrZsyYMfa2/CdPnmTatGksX76cu+66yx7ErFmzxqGy598M5N8Q/PXXX9x666389ddfLFq0yN7LfUxMDPv27WPSpEkOt4nN/3X17NmzpKamVnltmXr16nH48GGOHDlC27Zti7ye/x7kD8ntDI6+H2WVu2D5ilPS58cdxcTEcPDgQR566CG6du3qkjJU5pgaDAaGDBli7+spLS2N559/nvnz5zNlyhSuu+66MsOmfPkjQfTu3btIfwRVxRM+T0lJSfz0008ADo06ks/Hx4eRI0faz0GJiYnMnj2bt956i4kTJ3L8+PEqKW9pjh49WuJr+SNy1K9f3z4tvz+u9PT0Ypepin1wxblRCOGeLh6RSdROErULIapdkyZNGD16NAD3338/586dK3X+hIQE9u/f7/D6L730UnQ6nX143IudPXuWlStXAtC/f/9S1+Xt7c0dd9xB+/btsdls7Ny5s9T5Y2Ji7MHJ9u3bHS5zSbp162bvjK3g+gYPHgyU72IeHR1Nhw4dsNlsvPfeew4tk//AUrATN0flB1sl1aTIL0Pfvn0xGKrmN4KKvB/O/PyUR34HzxU51qWpyGfF2fI/C/lDhl9s27ZtbN++HZ1OZx/iuiSBgYHMmzeP4OBgsrKyOHDggP21sj6v+cfi22+/rbYmHq76PDlKKcVdd91FdnY2oaGhTJo0qcLrioiIYNGiRcCF5pIFOxmvzLmkPFatWlVs09gffviB5ORkAgIC6NKli316fhB2cRPVfN9//32x0z393CiEEMJ9SCgjhHCJl19+maZNm3L06FH69OnD+vXri8xjNpt577336NSpU4k3zMVp0KABN9xwA0oppkyZUqhNfmZmJrfffjs5OTn06tWLXr162V979tlni+2nYt++fRw8eBD4rynQtm3bWLp0KdnZ2UXm/+677wrN64hly5bx+++/F6kqb7FY7A9sBdd3++2307BhQ7744gseeuihYn/ljYuL4+233y40LX/0pUceeYSvvvqqyDJ79uwpdKwjIiIwmUzExcWVGZ5d7J577sFgMPDNN9/w8ccfF3pt1apVvPnmm8CFkVYqy5nvR0U/P5WV/+v97t27nbZOgAceeIDg4GCef/55nnvuOcxmc5F5jh49WuQ9cqY+ffrQo0cPsrOzmTJlCllZWfbXkpKSmDJlCgA33XSTvTZLVlYWzz//fLF9u6xbt46UlBT0en2hWg9lHcNOnToxYsQITp48yfXXX2+vOVFQZmYmn3zySbHhUUW46vPkiJ07dzJkyBCWLl2KXq/n448/JiAgoMzljh8/zjvvvENaWlqR1/K/byEhIYVGCKuqz/fFsrOzmTp1aqFzwZkzZ7j//vsBuOOOOwqNbDJgwAB0Oh0//fRToZp0SileeumlYs+T4DnnRiGEEO5P4nchhEuEhISwYcMGRo0axZo1a+jbty+NGjWiffv2+Pr6Eh8fz+bNm8nIyCAwMJC6deuWa/2vvvoq+/bt488//6RJkyb0798fg8HA2rVrSUxMpFGjRnzyySeFlnniiSd44IEHaNmyJa1atcLHx4czZ86wfv168vLyGDt2rH2YvePHj3PTTTfh4+ND586diYmJIS8vj3/++Yf9+/djMpnsvxg7Yu3atbz44ouEh4fTqVMnIiMjSU9P548//iAhIYF69erZOyCFCx2sfv/991xzzTUsWrSIt956i/bt21O/fn177YG9e/cSGRnJ5MmT7ctdd911LFiwgNmzZzNy5EhatmxJhw4dyM7O5tChQ+zZs4clS5bYh8U2Go1ce+21fPnll3Ts2JE+ffrYOx195513St2ndu3a8eqrrzJ16lTGjBnDCy+8QMuWLTl+/DgbN25EKcW8efPK1VyiJM5+Pyry+amsESNG8OyzzzJw4EAGDBhgfzh++umny93XS0H169dn+fLljBgxghkzZrBo0SLatm1LnTp1SE1NZe/evRw+fJgePXqUq3+W8vr0008ZMGAAy5cvp1GjRlx66aVYLBZ+++030tLS6Ny5c6EmRWazmfvvv58HHniAdu3a0axZM4xGI8eOHeOPP/4ALoSL+R2HAwwaNAg/Pz+++eYb+vTpQ7NmzdDr9fTu3ZsJEyYAsGTJElJSUvjxxx9p0aIFHTp0oFGjRiilOHbsGDt27MBsNrN3794y+2tylCs+TwWtX7+e8ePHAxdqdqSkpLBr1y5705xGjRrx7rvvOlxT5/z580yePJn/+7//o2PHjvYOaw8ePMi2bdvQNI1nnnmmUH9hw4cPZ/78+bz00kvs2rWLmJgYdDod1157Lddee63T9nXs2LGsWLGCxo0b07dvX3Jycvj111/JzMykZ8+e9ppz+WJiYpg2bRovvvgil19+OX379iU0NJQdO3Zw4sQJZs6cyVNPPVVkO55ybhRCCOEBqm8QKCGEKN6PP/6oxo4dq5o2bar8/f2V0WhU0dHR6oorrlCLFy8uMjx0WUOY5svMzFQLFy5UHTt2VL6+vsrb21u1atVKPfzww+rcuXNF5v/444/VhAkTVNu2bVVoaKjy8vJSDRs2VIMHD1bLli2zD++r1IXhpZ966ik1ZMgQ1ahRI+Xr66sCAwNV69at1Z133qn27dtXrmOwbds2NXPmTNWnTx9Vr149ZTKZVEREhOrSpYt68sknVVJSUrHLpaWlqUWLFqmePXuq4OBgZTQaVZ06dVS3bt3UAw88oDZu3Fjscps2bVKjR49W9erVU0ajUYWGhqoOHTqoBx98UB0/frzQvMnJyWrKlCmqQYMGymg0Fhm6uaRhX/P98ccfauTIkSo6OloZDAYVFhamrr76arVq1api5y9r6Nzitufs90Op8n9+lKrckNjZ2dnqwQcfVE2bNlUmk8l+nPOHVy7rOJc1RG98fLyaM2eO6ty5swoICFAmk0nVr19f9erVS82dO1ft3LnT4bLml6W04YCLk5ycrGbNmqVatWqlvL29la+vr+rUqZN66qmnVFZWVqF5LRaLeuONN9To0aNVy5YtVVBQkPLx8VFNmjRRI0aMUKtXry52G7///rsaOHCgCgkJUTqdrthjZrVa1aeffqqGDBmioqKilNFoVGFhYapt27ZqwoQJatmyZcpsNtvnL2lY5IsVNyR2vvJ+nhwZcrks+d+lgn9eXl4qMjJSdenSRU2ePFktX75cWSyWEtdR3Pk2LS1NLV68WF133XWqWbNmyt/fX/n5+anmzZursWPHqr///rvYdS1btkz17t1bBQQEKE3Tiqz34nNLaftU0pDYc+fOVUeOHFGjR49WUVFRymQyqaZNm6pHH320xKHFbTabeu6551SrVq2UyWRSoaGhaujQoWrLli2lvveecG4UIp8MiS2Ea5X2HdSUKkcX9EIIIYQQQgghPEpOTg5Hjx6lUaNGhZrwCSGqR2nfQelTRgghhBBCCCGEEMIFJJQRQgghhBBCCCGEcAEJZYQQQgghhBBC1HrvvvtulXeyHRsby+LFi0udZ968eXTs2LFKy5FP0zS++eabatlWTTF+/HiGDx9u//dNN93Ec889V+H1SSgjhBBCCCGEEMLtJCYmMnXqVBo0aICXlxfR0dEMGjSIDRs2YDabCQ8PL3aENIDHH3+cqKgoLBYL77//PsHBwaVuKycnhzlz5jB37lz7tHnz5qFpGldddVWR+Z955hk0TaNfv36V2cViQ5EZM2awevXqSq3XUWfPnmXw4MEOz+/MwEjTNLy9ve2jAeYbPny4fdRATzB79mwWLFhAampqhZaXUEYIIYQQQgghhNsZMWIE27Zt44MPPuDAgQN8++239OvXj+TkZEwmE7feeitLliwpspxSivfff5+xY8diNBod2taXX35JYGAgvXv3LjS9Tp06/Pbbb5w6darQ9Pfee48GDRpUfOdK4e/vT1hYWJWsO5/ZbAYgOjoaLy+vKt1WaTRN49FHH3XqOpVS5OXlOXWdpWnbti1NmjTh448/rtDyEsoIIYQQQgghRG2iFJgzXfPn4OC/KSkprFu3jqeffpr+/fvTsGFDunfvzqxZs7j22msBmDRpEgcOHGD9+vWFll27di1Hjhxh0qRJDh+Szz77jKFDhxaZHhkZyZVXXskHH3xgn7Zx40aSkpK4+uqrC83br18/7r333kLTSqv1ERsbC8B1112Hpmn2fxesjbJq1Sq8vb1JSUkptOw999zDgAEDAEhOTmb06NHUq1cPX19f2rVrx//+978iZbvrrru49957CQ8PZ9CgQUDRmjoPPfQQzZs3x9fXl8aNGzNnzhwsFgsA77//PvPnz2fHjh1omoamabz//vvAhffrtttuIyIigsDAQAYMGMCOHTuK3e+C7rrrLj7++GN27dpV4jy5ubncfffdREZG4u3tTZ8+ffjrr7/sr69ZswZN0/jxxx/p0qULXl5erF+/nn79+jFt2jTuvfdeQkJCiIqK4u233yYzM5MJEyYQEBBA06ZN+fHHH+3rslqtTJo0iUaNGuHj40OLFi148cUXy9yPoUOH8tlnn5U5X3EMFVpKCCGEEEIIIYRnsmTBk3Vds+2Hz4DJr8zZ/P398ff355tvvuGSSy4ptjZHu3bt6NatG++99x59+vSxT1+yZAm9evWiZcuWDhdr/fr1jBkzptjXJk6cyIMPPsgjjzwCXKglc8sttzi87pL89ddfREZGsmTJEq666ir0en2ReS6//HKCg4P56quv7CGT1Wpl6dKlLFiwALjQ9KpLly489NBDBAYG8v333zNmzBiaNGlC9+7d7ev64IMPmDp1Khs2bCixTAEBAbz//vvUrVuXf/75h8mTJxMQEMCDDz7IqFGj2LVrFytXruSXX34BICgoCIAbbrgBHx8ffvzxR4KCgnjzzTe5/PLLOXDgAKGhoSVur3fv3hw4cICZM2eyYsWKYud58MEH+eqrr/jggw9o2LAhixYtYtCgQRw6dKjQumfOnMmzzz5L48aNCQkJse/zgw8+yObNm1m6dClTp05l2bJlXHfddTz88MO88MILjBkzhhMnTuDr64vNZqN+/fp88cUXhIWFsXHjRm6//Xbq1KnDjTfeWOJ+dO/enQULFpCbm1vumkdSU0YIIYQQQgghhFsxGAy8//77fPDBBwQHB9O7d28efvhhdu7cWWi+SZMm8cUXX5CRkQFAeno6X375JRMnTnR4WykpKaSmplK3bvFB1TXXXENaWhq///47mZmZfP755+Vaf0kiIiIACA4OJjo62v7vgvR6PTfddBOffvqpfdrq1atJSUlhxIgRANSrV48ZM2bQsWNHGjduzLRp07jqqqv4/PPPC62rWbNmLFq0iBYtWtCiRYtiyzR79mx69epFbGwsQ4cOZcaMGfb1+Pj44O/vj8FgIDo6mujoaHx8fFi/fj2bN2/miy++oGvXrjRr1oxnn32W4OBgvvzyyzKPw8KFC1m5ciXr1q0r8lpmZiavv/46zzzzDIMHD6Z169a8/fbb+Pj48O677xaa97HHHuOKK66gSZMm9rCmQ4cOzJ49m2bNmjFr1iy8vb0JDw9n8uTJNGvWjEcffZTk5GT758poNDJ//ny6du1Ko0aNuOWWW5gwYUKRY3mxunXrYjabiYuLK3N/LyY1ZYQQQgghhBCiNjH6Xqix4qptO2jEiBFcffXVrFu3jj/++IMff/yRRYsW8c4779ibBI0ePZr77rvPHpQsXboUnU7HqFGjHN5OdnY2AN7e3sUX2Wi0919z5MgRmjdvTvv27R1ef2XdcsstXHLJJZw5c4a6devyySefcPXVV9s7L7ZarTz55JN8/vnnnD59GrPZTG5uLr6+hY91ly5dytzW0qVLeemllzh8+DAZGRnk5eURGBhY6jI7duwgIyOjSD842dnZHD58uMxttm7dmrFjxzJz5switXgOHz6MxWIp1NeP0Wike/fu7N27t9C8Xbt2LbLugu+TXq8nLCyMdu3a2adFRUUBkJCQYJ/26quv8t5773HixAmys7Mxm81ldm7s4+MDQFZWVhl7W5SEMkIIIYQQQghRm2iaQ02I3IG3tzdXXHEFV1xxBXPmzOG2225j7ty59lAmMDCQkSNHsmTJEiZOnMiSJUu48cYb8ff3d3gbYWFhaJrG+fPnS5xn4sSJ9OjRg127dpVYS0an06Eu6jMnvz+WyujWrRtNmjThs88+sze/ye/LBS6MBPXiiy+yePFi2rVrh5+fH/fee6+9M998fn6lv+ebNm3illtuYf78+QwaNIigoCA+++yzMod7zsjIoE6dOqxZs6bIa2WNepVv/vz5NG/evFLDcxe3fxd39KxpWqFpmqYBYLPZgAt9C82YMYPnnnuOnj17EhAQwDPPPMOff/5Z6rbPnTsHUGxtp7JIKCOEEEIIIYQQwiO0bt26yIP7pEmT6NevHytWrGDjxo0888wz5VqnyWSidevW7NmzhyuvvLLYedq0aUObNm3YuXMnN998c7HzREREcPbsWfu/rVYru3bton///iVu22g0YrVayyzjLbfcwieffEL9+vXR6XSFOhnesGEDw4YN49ZbbwUuBAwHDhygdevWZa63oI0bN9KwYUN73zlAkeGqTSZTkfJ27tyZuLg4DAaDvbPi8oqJieGuu+7i4YcfpkmTJvbpTZo0wWQysWHDBho2bAhcCLr++uuvIp0qO8OGDRvo1asX//d//2ef5khtn127dlG/fn3Cw8PLvU3pU0YIIYQQQgghhFtJTk5mwIABfPzxx+zcuZOjR4/yxRdfsGjRIoYNG1Zo3ksvvZSmTZsyduxYWrZsSa9evcq9vUGDBhUZxeliv/76K2fPni2x9seAAQP4/vvv+f7779m3bx9Tp04tMmrSxWJjY1m9ejVxcXGl1tS55ZZb2Lp1KwsWLGDkyJGFOpNt1qwZP//8Mxs3bmTv3r1MmTKF+Pj4UrdbnGbNmnHixAk+++wzDh8+zEsvvcSyZcuKlPfo0aNs376dpKQkcnNzGThwID179mT48OGsWrWKY8eOsXHjRh555BH+/vtvh7c/a9Yszpw5Y+9EGC7Ufpk6dSoPPPAAK1euZM+ePUyePJmsrKxyja7lqGbNmvH333/z008/ceDAAebMmVNopKeSrFu3rsRArywSygghhBBCCCGEcCv+/v706NGDF154gUsvvZS2bdsyZ84cJk+ezCuvvFJoXk3TmDhxIufPn69wB7yTJk3ihx9+IDU1tcR5/Pz8Sm2OM3HiRMaNG8fYsWO57LLLaNy4cam1ZACee+45fv75Z2JiYujUqVOJ8zVt2pTu3buzc+fOIiM/zZ49m86dOzNo0CD69etHdHQ0w4cPL3W7xbn22mu57777uOuuu+jYsSMbN25kzpw5heYZMWIEV111Ff379yciIoL//e9/aJrGDz/8wKWXXsqECRNo3rw5N910E8ePH7f32eKI0NBQHnroIXJycgpNf+qppxgxYgRjxoyhc+fOHDp0iJ9++sk+wpIzTZkyheuvv55Ro0bRo0cPkpOTC9WaKU5OTg7ffPMNkydPrtA2NXVxozchhBBCCCGEEDVGTk4OR48epVGjRiV2ZisuDOvcuXNnZs2a5eqiCA/y+uuvs2zZMlatWlXiPKV9B6WmjBBCCCGEEEKIWu+ZZ54pVwfBQsCFfoFefvnlCi8vNWWEEEIIIYQQogaTmjJCuJbUlBFCCCGEEEIIIYRwMxLKCCGEEEIIIYQQQriAhDJCCCGEEEIIUQtIzxVCuEZp3z0JZYQQQgghhBCiBtPr9QCYzWYXl0SI2ikrKwu40CnwxQzVXRghhBBCCCGEENXHYDDg6+tLYmIiRqMRnU5+mxeiOiilyMrKIiEhgeDgYHtAWpCMviSEEEIIIYQQNZzZbObo0aPYbDZXF0WIWic4OJjo6Gg0TSvymoQyQgghhBBCCFEL2Gw2acIkRDUzGo3F1pDJJ6GMEEIIIYQQQgghhAtIY0IhhBBCCCGEEEIIF5BQRgghhBBCCCGEEMIFJJQRQgghhBBCCCGEcAEJZYQQQgghhBBCCCFcQEIZIYQQQgghhBBCCBeQUEYIIYQQQgghhBDCBSSUEUIIIYQQQgghhHABCWWEEEIIIYQQQgghXEBCGSGEEEIIIYQQQggXkFBGCCGEEEIIIYQQwgUklBFCCCGEEEIIIYRwAQllhBBCCCGEEEIIIVxAQhkhhBBCCCGEEEIIF5BQRgghhBBCCCGEEMIFJJQRQgghhBBCCCGEcAGPC2VeffVVYmNj8fb2pkePHmzevLnEed9++2369u1LSEgIISEhDBw4sNT5hRBCCCGEEEIIIaqLR4UyS5cuZfr06cydO5etW7fSoUMHBg0aREJCQrHzr1mzhtGjR/Pbb7+xadMmYmJiuPLKKzl9+nQ1l1wIIYQQQgghhBCiME0ppVxdCEf16NGDbt268corrwBgs9mIiYlh2rRpzJw5s8zlrVYrISEhvPLKK4wdO7aqiyuEEEIIIYQQQghRIoOrC+Aos9nMli1bmDVrln2aTqdj4MCBbNq0yaF1ZGVlYbFYCA0NLXGe3NxccnNz7f+22WycO3eOsLAwNE2r+A4IIYQQTqKUIj09nbp166LTeVSlV7dks9k4c+YMAQEBcq0XQgjhFuRaX3t4TCiTlJSE1WolKiqq0PSoqCj27dvn0Doeeugh6taty8CBA0ucZ+HChcyfP79SZRVCCCGqw8mTJ6lfv76ri+Hxzpw5Q0xMjKuLIYQQQhQh1/qaz2NCmcp66qmn+Oyzz1izZg3e3t4lzjdr1iymT59u/3dqaioNGjTg5MmTBAYGVkdRhRBCiFKlpaURExNDQECAq4tSI+QfR7nWCyGEcBdyra89PCaUCQ8PR6/XEx8fX2h6fHw80dHRpS777LPP8tRTT/HLL7/Qvn37Uuf18vLCy8uryPTAwEC5URNCCOFWpKmNc+QfR7nWCyGEcDdyra/5PCaUMZlMdOnShdWrVzN8+HDgQhvw1atXc9ddd5W43KJFi1iwYAE//fQTXbt2rabSCiGEEELUPlnLX6/ybfgOm1rl2xBCCCGqi8eEMgDTp09n3LhxdO3ale7du7N48WIyMzOZMGECAGPHjqVevXosXLgQgKeffppHH32UTz/9lNjYWOLi4gDw9/fH39/fZfshhBBCCOGpqiN4qcz2JbQRQgjhSTwqlBk1ahSJiYk8+uijxMXF0bFjR1auXGnv/PfEiROFeqZ+/fXXMZvNjBw5stB65s6dy7x586qz6EIIIYQQHsnVIUx5FVdeCWqEEEK4K00ppVxdCHeWlpZGUFAQqamp0s5cCCGEW5Brk3PJ8SzK04KYipCgRgjhzuTaVHt4VE0ZIYQQQghRNWpDEFPQxfsrIY0QQghXkFBGCCGEEKKWqm1BTGkkpBFCCOEKEsoIIYQQQtQyEsaUreAxkoBGCCFEVZFQRgghhBCilpAwpmKkFo0QQoiqIqGMEEIIIUQNJ2GMc0ktGiGEEM4ioYwQQgghRA0mgUzVkoBGCCFEZUgoI4QQQghRA0kYU/3yj7mEM0IIIRwloYwQQgghRA0iYYzrSe0ZIYQQjpJQRgghhBCihpBAxv1IQCOEEKI0OlcXQAghhBBCVJ4EMu4va/nr8j4JIYQoRGrKCCGEEEJ4MHnI9zxSe0YIIUQ+qSkjhBBCCOGhJJDxfFJ7RgghajcJZYQQQgjhVl599VViY2Px9vamR48ebN68udT5Fy9eTIsWLfDx8SEmJob77ruPnJycaiqt68iDfM0i4YwQQtROEsoIIYQQwm0sXbqU6dOnM3fuXLZu3UqHDh0YNGgQCQkJxc7/6aefMnPmTObOncvevXt59913Wbp0KQ8//HA1l7x6ycN7zSXhjBBC1C4SygghhBDCbTz//PNMnjyZCRMm0Lp1a9544w18fX157733ip1/48aN9O7dm5tvvpnY2FiuvPJKRo8eXWbtGk8mD+y1Q344I++3EELUbBLKCCGEEMItmM1mtmzZwsCBA+3TdDodAwcOZNOmTcUu06tXL7Zs2WIPYY4cOcIPP/zAkCFDStxObm4uaWlphf48hTyg104SzgghRM0loy8JIUQN5cwbeBkdRFSHpKQkrFYrUVFRhaZHRUWxb9++Ype5+eabSUpKok+fPiilyMvL44477ii1+dLChQuZP3++U8teHeShXOR/BuScLIQQNYeEMkII4SFc+UBWnm3Lw4KoTmvWrOHJJ5/ktddeo0ePHhw6dIh77rmHxx9/nDlz5hS7zKxZs5g+fbr932lpacTExFRXkStEAhlRkIQzQghRc0goI4QQbqKmPHSVtB/y8CDKEh4ejl6vJz4+vtD0+Ph4oqOji11mzpw5jBkzhttuuw2Adu3akZmZye23384jjzyCTle0pbaXlxdeXl7O34EqUlPODcL5JJwRQgjPJ6GMEEJUs9r6gFXcfsuDhCjIZDLRpUsXVq9ezfDhwwGw2WysXr2au+66q9hlsrKyigQver0eAKVUlZZXCHch4YwQQnguCWWEEKIK1dYAxlEXHx95oBDTp09n3LhxdO3ale7du7N48WIyMzOZMGECAGPHjqVevXosXLgQgKFDh/L888/TqVMne/OlOXPmMHToUHs448nkHCLKQ8IZIYTwPBLKCCGEk8jDU+VJSCNGjRpFYmIijz76KHFxcXTs2JGVK1faO/89ceJEoZoxs2fPRtM0Zs+ezenTp4mIiGDo0KEsWLDAVbvgNHJOERUl4YwQQngOTUnd3lKlpaURFBREamoqgYGBri6OEMKNyANT9ZKHi//Itcm53PF4yvlFOIucO4XwTO54bRJVQ2rKCCGEg+QhybUKHn95yBBCCMdIrRkhhHBvEsoIIUQJJIRxXxLQiJpMzj2iKkg4I4QQ7klCGSGE+Jc8CHkmedAQNYmch0RVk3OmEEK4FwllhBC1mjwA1RzyoCGEEI6Tc6YQQrgHCWWEELWKhDA1nzxoCE8l5yfhClnLX5fzpRBCuJCEMkKIGk8edGonCWeEEMIxcr4UQgjXkVBGCFEjSRAj8snDhvAEcs4S7kDOl0IIUf0klBFC1BjyUCNKIw8bwl3JuUu4G2nSJIQQ1UdCGSGER5OHGVFeEs4IIUTZ5FwphBDVQ+fqAgghREVkLX9dAhlRKfL5Ee5APofC3clnVAghqpbUlBFCeAy5MRTOJr8ECyFE2eRcKYQQVUdCGSGEW5MgRlQH6T9BuIKc34SnkXBGCCGcT5ovCSHckjRPEtVNPm9CCOEYOV8KIYTzSE0ZIYTbkJs84WryK7AQQjhGzpdCCOEcUlNGCOFyUitGuBv5PIqqJp8xUVPIZ1kIISpHQhkhhMtIGCPcmXw2hRDCMXI9F0KIipNQRghRrfJv3OTmTXgC+ZyKqiCfK1FTyWdbCCHKT/qUEUJUC7lRE55K+k0QQgjHyTlTCCHKR2rKCCGqlNSKETWFfI6FEMJxcs4UQgjHSCgjhKgSEsaImkg+06Ky5DMkahP5vAshRNmk+ZIQwqnkBkzUdFnLX5dq+UK4CUPCfqetKy+yhdPWJf4jzZmEEKJ0EsoIISpNghhR20gwI0T1cmb4UpFtSGBTeXLeFEKI4kkoI4SoMAljhBDCcXLOdFx1hDDlUVx5JKgpPwlmhBCiKI/rU+bVV18lNjYWb29vevTowebNm0ucd/fu3YwYMYLY2Fg0TWPx4sXVV1AhajDpL0YIecAWwtkMCfvtf56gYHk9qdyuJvcQQghRmEeFMkuXLmX69OnMnTuXrVu30qFDBwYNGkRCQkKx82dlZdG4cWOeeuopoqOjq7m0QtQ8ciMlRGHyfRCicmpaoFHT9qcqyflTCCEu0JRSytWFcFSPHj3o1q0br7zyCgA2m42YmBimTZvGzJkzS102NjaWe++9l3vvvbdc20xLSyMoKIjU1FQCAwMrWnQhPJrcOAlRuuquji/XJueqruMp59L/1MbQQpo7lUyaNAlRlFzraw+PqSljNpvZsmULAwcOtE/T6XQMHDiQTZs2OW07ubm5pKWlFfoToraSmjFCOEa+J6Is8hm5oDbXIpFaNCWT74cQojbzmFAmKSkJq9VKVFRUoelRUVHExcU5bTsLFy4kKCjI/hcTE+O0dQvhKSSMEaL85DsjRMkkjChMApqi5BwqhKitPCaUqS6zZs0iNTXV/nfy5ElXF0mIaiU3RUIIIZxFgoeySUDzH7kHEULURh4zJHZ4eDh6vZ74+PhC0+Pj453aia+XlxdeXl5OW58QnkJuhISoPBnuVYj/SMhQfvnHrDb3P5N/PyLnUiFEbeExNWVMJhNdunRh9erV9mk2m43Vq1fTs2dPF5ZMCM8mTZWEcC75PomL1cbPhAQylSO1Z2rn90YIUTt5TE0ZgOnTpzNu3Di6du1K9+7dWbx4MZmZmUyYMAGAsWPHUq9ePRYuXAhc6Bx4z5499v8/ffo027dvx9/fn6ZNm7psP4RwB3KzI0TVkRozoraqzSFCVanNtWfkXCqEqA08KpQZNWoUiYmJPProo8TFxdGxY0dWrlxp7/z3xIkT6HT/Vf45c+YMnTp1sv/72Wef5dlnn+Wyyy5jzZo11V18IdyChDFCCCGqggQyVau2hjMSzAghajpNKaVcXQh3JuPDi5pEAhkhqldVPUjItcm5qvp41oZzrwQyrlHbAhoJZ0RtItf62sOjasoIISqmNjwQeApXPbjUtht3dyG/8IracP6VQMZ1alvtGTmnCiFqIgllhKjBasPDgLtx14eT0spVW27mhRDO567nvNqmNoUzEswIIWoaCWWEqIEkjKl6NelB5OJ9qQ039dVJHiBETVWTzoM1RW0JZ+S8KoSoSSSUEaKGkUDG+Wrbg4eENEKIstS286KnKSucUQoSLXoOZRk5kWPgZI6BeLOeRIue8xYd6VYd2VYduTawogFg1BReOoWfXhFosBFqsBJhslLHy0qMVx6xPhaa+ljwN1RPd5X59zsSzgghPJ2EMkLUEBLGOI88bBRW8HhIQFMx8quuqEnkHOk58t+r9LCWbM8w8XeaN/+km9iVaSIlT1+udeUpjWwbpOTB6dyS56vnlUdb/1w6+JvpGphLSz8zBq0ye1E6Ob8KITydhDJCeDgJYypPHjAcJwGNELWbnC89xxGzL79lRbAuK4y/DodgQVfodR2Kht4XarjEeOcRbbISabISbLASZLDhq1eYdAo9oIA8BTk2HVlWjZQ8HecseuLNes7m6jmRY+RotoEEi4HTuRf+fkr2AyBAb6NnUA69grO5LDiHKC+r0/dVghkhhCeTUEYIDyaBTMXIQ4VzSEBTPvLQIISoaofNvqzIiObHjCiOWPwLvRatz6G7z3k6RnjR1t9MM18zXroSVlSi0gOVFIuOfVlG/snwYlu6F1vSvEi36lh1zpdV53wBaOOXy1VhWVwVnkU9JwY0co4VQngqCWWE8EASxpSfBDFVq7Z0LilEedS0c7WcR91Trk3H9xlRLE2rz7bcYPt0IzZ6+JzjUt9kLvVNopExCy2/GVEW5Pk7/3wdbLRxSVAulwRdaN9kVbA7w8T6FG/Wp/iwI8PE7kwvdmd68dyJEHoE5nB9ZAaDwrIwlTsgKkqCGSGEJ9KUUtXTG5eHSktLIygoiNTUVAIDA11dHCFq3E1+VZIHCNeRcKZkznhgkGuTc1XV8axJ52s5n7qfuDwvPkmN4fO0epy3mQDQY6OvbzLX+McxwC8Rf13ZNVGq83ydbNGx+pwPPyb5sTnNC/VvJ8KhBivXR2ZwU3QGdZ1Qe0aCGVETyLW+9pCaMkJ4iJp0c19V5KHBfUjNGSFqDjm3upejZl/eSGnEd+nR5P3bT0xdQzajA09xfcAZIgzmcq2vOs/XYUYbN0ZlcmNUJqdz9SxP8OOLBH/izQbeORPEe2cCGRSWxW310mjlZ6nwdqTGjBDCk0hNmTJIQincgQQypZMHBvcn4UxhlX1YkGuTc0lNmdLJOdY9nLZ489L5JixPr4Pt3xom3b3PMTboBAP8kjBolb+ld8W5Ok/Bb+d8+DQugD/TvO3TB4RkMS0mlRaVCGdAas0IzyXX+tpDasoI4cZqyg19VZCHBM8iNWeE8ExyrnW9FKuBN8434qPUBvYRlAb4JjI15AgdvNOcui1XnKsNGlwRls0VYdnsyzTy7ulAfkz25dfzvvx23ochYVncGZNKrE9ehdYvtWaEEO5OasqUQRJK4QoSxhRPHg5qBglmLqjMQ4Jcm5xLasqUTM67rmNV8FlafV4415Q0mxGAS7zPcX/YQaeHMSVx1fn6SLaBV04GsfLfYbUNmuKmqAz+r34qwUZbhdYpwYzwNHKtrz2kpowQbqYm3MQ7kzwQ1DxSa0YIz1ATz7+G+N+qdP15Uf2dsp49uf7MTmzDrtwLD2ItTOk8EHaQvj7J/42gVA0MCftdcq5u7JPH882TmZyZxosngvk9xYeP4wJYkeTL/Q1TuC4iE105j4PUmBFCuCsJZYRwExLGFFYTHwZEYa662RdC1A5VHcA4us3yBDW5Nh0vnW/MeykNsaIjQGfhvtBDjA48hb4aw5iCXBmkt/Kz8EarRDamePHUsRAOZZuYcziMrxP8mdf4HM18y9ffjAQzQgh3JM2XyiDVxkR1kEDmAgliaq/aGs5U9OFArk3OJc2XivLU87ErgpjyKimk2ZkTyEMJbThs8QfgKr945oTvK/doSlXJledqiw0+igvg1ZNBZNt0GDTF5Hpp3FEvFaOufOuSYEZ4ArnW1x5SU0YIF/Pkm3Zn8dSbf+E8UmtGCFFRnhDEFHRxec2R/Xk3pSEvnGtKHjoi9Lk8FrGXy/0SXVTCkrmy1oxRBxPrpjMkLIsnjobw63lfXj8VxNrzPjzVNImmvo53BCw1ZoQQ7qScubIQwlmylr9e6wMZQ8J+CWSEnXwWRE3iyed3T/kuGuJ/87hA5mKJNn8mHY/lmXPNyUPHYL84VsRscstApiBXfkaivay83CKJ55olEWSwsifTxMiddfjorD+2ctT/9+TvqBCiZpFQRggXqM03AvlBjKfc9IvqVds+F7X5XCBERdWEMAbgL2tDhmbfxQZrM3wws9Dra17hJSKSVnnE/rnyWq5pMDg8i+Ud4ugbnI1ZaSw8FsrUfRGkWBx/vJFzsBDCHUgoI0Q1qs21YySIEY6Sz4kQruPu3z9PCCvKohR8YunOLdm3kaACaaaLZ7nvq4wy/l1oZKX88Mnd99mVn5lIk5U3WiYyu9E5vDQb61J8GLEzmp3pJofXUVvvy4QQ7kNCGSGqSW296EsYIypCPjNCiII8IZxwhEXpmJ07jDm5w8lDzzWGnSzzeY2mutKbK7l7QOPqWjM3R2fwv3bxNPC2cNZsYMzuKJbG++PocCa19R5NCOEeJJQRohrUxou9hDGismrL56c2nh+Ee3LX75y7BhHllaa8mJQzjv/l9UDDxoOmlbzo9Rm+WvmGdXb3cMZVWvpZ+KJdHFeEZmFRGvOPhDL3SChmm2PLy7lYCOEqMvqSEFWoNl7g3fWmXngmGZVJiNrLXYOHioizBTIxZxz7bHXwJZcXvZdyuWFfpdZZ8PiUNMy2K7hyhKYAg2Jx8yTePRPA4hPBfJngz4kcA4ubJxFsLDudkVGZhBCuIKGMEFWktgUytTWMMST87pLt5kVe6pLtuoIEM0LUPjUpkDlsi2Bs9gTOqmAitDTe9f6QtvozTt1G/vFyt3DGFeduTYPb6qXTzNfC/QfC2Zzmzc27onijVSINvMseNjv//k3CGSFEddGUcrS1Ze2UlpZGUFAQqampBAYGuro4wgNIGFMzuSp8KY+aHtTU9GCmPA8Acm1yrqo4np52LXCnc3lNCmT2WOswLmcCycqfxloi7/ssob4upcq3607hjCvP3QezjNyxN4KzZgOhBiuvt0qknb/Z4eUlmBGuJNf62kNqygjhRJ52E14Z7nQD70yeEL6UpLiy16SgRmrMCFHz1aRAZoe1PuOyJ5CGD211p3nfZwmhWla1bNudas64sjlTM18Ln7WLY+q+SPZkmhi/O5KXWiTROzjHoeWlOZMQojpIR79COEltCWRqWge+hoTfC/3VNDVt32rSZ08IUVhNCmS2WWMYkz2RNHzoojvOxz7vVFsgU5A7dQrsqvN3hMnGB23i6RWUTbZNx9R9EfyU7OPw8rXl/k4I4TpSU0aISqotF+ua8jBcU8KJiii47zWpBo0QwvO5S3DgDPk1ZDLwprvuKO/6fICf5niTmargLjVnXFXj0U+veK1lIrMOhfFjsh/3HwjH3DSZoRGOBWVSY0YIUZWkpowQlVAbAhlPrxlT02vCVJQnHw9P/jyWpjacT4R7cvV3qiYFMnut0fZApofuCO/5vO/yQKYgd6g546r7CpMOFjVLZnhEBjY0Zh4K45sEP4eXl3O0EKKqSCgjRAXV9IuzJ4cxEsI4zlOPlad+NoUQhbk6IHCmo7YwxuZcaLLUSXeCd3w+xFezuLpYxXKXcKa66TV4osk5boxKR6HxyOFQlkkwI4RwMQllhKiAmn5R9sQHXk8NF9yJpx0/T/ycCiFqpgRbAOOyL4yy1FZ3miVuVkOmJK4OZ1xxHtdpMLfReUb/G8zMPhzKd4m+Di9f0+8BhRDVT/qUEaIcavqF2NMecj0pQPAk+cdV+p0RQlQlV9fUcJZ05cWEnHGcUqE01JJ4z/t9AjXHRvdxF4b431zW34wrRmfSNJjd6DwK+Cw+gIcPheGjUwwMy3ZoeeljRgjhTFJTRggH1eRAxpOaKkmNmOrjCcfYUz63QrgrV32Hakogk6d03J1zE3ttdQnX0vnAZwnhukxXF6tCalutmfxgZnhEBlY07j8Yzh+pXtVaBiGEAKkpI4RDamog4ykPtJ4QDtRUUmumesmvr0K4n9S0XcVOV8BC7Q7Wai3wVrksts0lKOMQqSWsJyiwbZWV0ZlcOVJTdY/OpNPgsSbnyLLqWHXOl2n7I/igdTyt/cvuC0jO10IIZ5FQRogySCDjGhLEuBdDwu9uG8y4aohVIUTFuHMtmZICmOJ8zhC+0IagKRtPqmdpw6EKrdtdwxpXNWmq7nO6QYNFzZJI3RvJn2neTNkXyWdt46jnbS1zWQlmhBDOIKGMECWQMMY1JIxxX+5ca0aCGSFERZUniMn3J+15RpsMwN3qQ/rzp9O2704hjatqzVR3PzMmHbzcIpExu6PYn2Viyr5IPm0bR6BBlbmsBDNCiMqSUEaIYkggU/0kjPEc7lxrRgjh3typlkxFwhiAM0TykPYgVk3P1epXxvF1lZarukOaXGUgQQVwTvmSpnzIxUDe6QQA9MGt8dFZCdRZCNVbCNebMWhlBxcVVZ2Bu79B8XrLREbviuJItpF79kfwVqsEjA70wCnBjBCiMiSUEeIiNTGQcdcwRoIYz+WOwYzUlhGifKr72uAOgUxFg5h8OZiYoc0kVQukjTrAHPUqmpPKVpKCZXZmQGNROvbY6vCPrT57rHU4ZIvkmAojSQWUvFBc4X/qUEQbcog1ZtHUlElrUxrtvNNoYsxE56QDU53n9mgvK6+3TOTWXVH8mebNE0dDmNf4PJoD+yLBjBCioiSUEaKAmhbISBgjqpI7BjNCuAvfYVNr3DXF01U2kAF4WrudvVpTglUqz6in8KLsDmGdqbIBzRFbGL/lteR3azO2WBuSRfGjDXlhIVTLJEDLwRczBmwowIKebEykKB/OK3/y0HEmz4czeT5szA6zLx+sM9PN5zx9fZPp55tEtCG33GUtqDqDmZZ+Fp5tnsSd+yL4IiGApr4WxtTJcGhZCWaEEBUhoYwQ/6ppN8/uGMhIGFPzuFswI7VlhBAXc0YYA/A9/fhGuxJN2VionqUOSU5Zb0Xl71dZ4cwRWzjfWDqyMq8th1RkodeCyKKj/iRtdGdorounsS6JerrzBJNdZu0Qm9I4Gz6I03neHDH7ccDsz+7cQHblBpJiM/FzZhQ/Z0YB0NYrjSv94hnqH0c9Y06F9rc6z+/9QnKY0TCFZ46HsOhYCM19LfQIcixYkmBGCFFemlKq6hqC1gBpaWkEBQWRmppKYGCgq4sjqoCEMVWvpoQxqak7qmS9QUEdqmS91c1dwpmaEMqUdUMv1ybnqqrj6e7Xl+q8Xriq6ZKzAplj1ONm7XmyNR/usH3KFD5zynqdLT+gyVV6fsxrxyeWHmyxNbS/biSP7vqj9NMfoLf+EM11Ceic0CdMwY6ALUpjd24gG7NDWZsZzvbcIFSBRl6XeJ/jpqBTDPRLwFSBbVfXOV4pmHUojG+T/AgxWPmifRx1vcoekSmfBDOisuRaX3tITRlRq7n7DXN5uVsg44lhTFUFLxXZZk0Ja6qb1JYRQjgrjAEwY2CWNoNszYduaie38bnT1u1sp9KO8gVX8T/99fa+YfRY6as/yLWGHQww7CNQq1xTouIUHD7bqCk6eqfS0TuV/ws5SnKekV+yIvk+PZo/c0L4IyeUP3JCidTnMC7oBDcFniZAn+f4tqppZCZNg3mNz3Ew28jeTBP37Q/no7bxmBzo+BekxowQwnFSU6YMklDWXDUpkJEwpmJcEcBUhieENFJbxjmkpkz1kpoyVbydaq4l48xABmCxNp4PtOsJVmksVXcTyTmnrt8Z0vHjY+1aPuVaMjQ/ACJVErd6beNGw99E6tKrpRxlDZ19xuLNF+n1+DytHonWC/3Z+OssjA06yfig4wSXI5yB6jnXn87VM3JnNKl5em6OTmd2o/PlWl6CGVFRcq2vPaSmjKiV3P1GuTzcKZBx5zDG0wKY4ly8D+4Y0rhbHzNCiNrF2YHM37ThQ4YD8Kh62e0CGQsGvmAwb2mjSNUuPLQ1UccZq5YxmLUYcy40t0mleobWzg/gSgpn6hpzuCf0MFNDjvBdeh3eTWnIIYs/r51vzEepMdwefIxxQSfw1tkc21411Iys52XlqabJTN0XyadxAXQNzOGqsGyHl5caM0KIsjhYAU+ImqOmBDKGhP1uE8gYEn53u0AmNXVHob+ayF33zR0+C+7y3RDCXdXE74izA5lMfJir3YvSdAxXq+jPn05df2Vtpj2jtBd5RjeZVC2QxuoEi2xP8bm6m2v5FSOF+z9JTdvl9GNUkrJqR5k0xYjAM6yI2cTLUTtoYUon3WbkuXPNGHyyFz9lROJoXf7q+CxfFpLD5HqpADx6OIxTOfpyLV9T7j2FEFVDQhlRq9SUi6K73Ey7WxhT00OYkrjjfrvT50II4TrV1XSpKsKGF7TxnNGiqKvimaHedfr6K+o8ATyiTWeK7gmOajGEqhTm2F5hqbqbK9iIjtLTjOoMZsp6/3UaDPJPYHn9P3gm8h/qGLI5nefDtPgOTDrbiRMWH8e2VQ33RdNiUukUkEuGVccDB8PJK2cHEDXlHlQI4XwSyohaIWv56zXiYugutWPcKYxxx0DCldzpWLjLZ0QIUbNVRcjwJ+35ShsMwDz1En443lylKv3KJVyvvcYPWj90ysootYJlairXswoDjjX5AfeqNQMXwplhAXH8GLORO0OOYNKsrM8O5+qTPVmS0gCbAwFIVd8fGTRY1CyJAL2NHRlevH4qqEq3J4SoPTwulHn11VeJjY3F29ubHj16sHnz5lLn/+KLL2jZsiXe3t60a9eOH374oZpKKtxFTQhjwD1qx7hLGCNBTNnk+LjHd0ZUTHmv9SkpKdx5553UqVMHLy8vmjdvLtf7WqIqgoVsvHhcuwuAG9QPdOMfp2+jvLLw5jHtTu7XPUyKFkQzdYwP1QPMVG8RSGaF11td4YyjNaZ8dTbuCT3Mivp/0NMnmVylZ2FyC8ae6cJpi3fZ26ni8349LytzG1/oV+jNU4HsSDeVa/mack8qhHAujwplli5dyvTp05k7dy5bt26lQ4cODBo0iISEhGLn37hxI6NHj2bSpEls27aN4cOHM3z4cHbtqp5fBoTr1ZSLn6sfLt0hjJEgpmJcfcxc/bkRnqe813qz2cwVV1zBsWPH+PLLL9m/fz9vv/029erVq+aSi4tV96hLzvKmNprTWjTRKpF71AeuLg6HaMCt2nMs0wahKRvj1Zd8oqbThkNO20Z1hDOONGfKF2vK4v06W3ksfA++Wh6bc0K59tQl/JARVfZ2qvieaUh4FleHZ2JDY+ahMLKtWrmWryn3pkII5/GoIbF79OhBt27deOWVVwCw2WzExMQwbdo0Zs6cWWT+UaNGkZmZyYoVK+zTLrnkEjp27Mgbb7zh0DZlKDLPVRMueq4OYy6UwXUP1RLAOJcrR2ty1YhMnjo0dm0eEru81/o33niDZ555hn379mE0Giu0zdo4JHZ1XF+qOpSpihBhP7Hcor2AVdPzou0xLuVvp2+jPFbSl/na3eRoXkSoZJ5Uz9GVqv9xsapHaipr6OyCTlh8mBHflu25wQDcGniCmeEHMGmlP8JU5fk/NU9j+I46xJsNjIlOY1ajlHKvQ0ZkEmWpydd6UZjH1JQxm81s2bKFgQMH2qfpdDoGDhzIpk2bil1m06ZNheYHGDRoUInzA+Tm5pKWllboT3ged74RdpSrAxlX1o5xde2Omqo2HldXf49E+VTkWv/tt9/Ss2dP7rzzTqKiomjbti1PPvkkVqu12Pmh+q718tBVdaoikLGhsUD7P6yanoFqQ6UCmaQsg0N/pZXlJW0ss3QPkKN5cYnaxmfq3moJZKDqa86UJ7BrYMzmk3p/c0fwEQA+TmvA2DNdScgrvelQVZ7/gwyKx/5txvRxXAB/p3mVex014V5VCOEcHhPKJCUlYbVaiYoqXG0xKiqKuLi4YpeJi4sr1/wACxcuJCgoyP4XExNT+cKLalUTLnKufJB0VRgjzZOqjyuOsTRjEo6oyLX+yJEjfPnll1itVn744QfmzJnDc889xxNPPFHiduRaL4rzLZfzj9YSX5XFA+pth5Ypb9jiyPKns3y51zaTJdpIAMarr3hFzSeU1ArtV2W4SzBj1BTTww7zZvQ2AnQWtuYEM+JUD3blBpS+jSq8n+obksOIyAwUGnMOh5JTzmZMUDPuWYUQlecxoUx1mTVrFqmpqfa/kydPurpIohw8/eLmytGVXB3GiOolwYyoKWw2G5GRkbz11lt06dKFUaNG8cgjj5TaTFmu9VWvKpsuVUVQkIYfL2ljAZiiPiOSc8XOV9HwxfFy+POAz3zWGXpiVBYeylnMLZmfcD7LdbfsVVlrpjz9zAD090viq3qbaWzMIN7qzc2nu7E6M6L0bVThfdUDDc8TaczjeI6RN05XrHmJp9+7CiEqz2NCmfDwcPR6PfHx8YWmx8fHEx0dXewy0dHR5ZofwMvLi8DAwEJ/wjN4+kXN1bVjqpuEMa4n74H78vTzWUVV5Fpfp04dmjdvjl6vt09r1aoVcXFxmM3mYpeRa73nqqpw4E1tNOe1YBqrE4zmuyKvV1UIU2gbWijTfZ5gr74FASqdp7LnMzDvv+tzVQdCZXGXWjOxpiy+qPcXfX2SyFF67ozrwGeppXfsXVU/egUaFLMbnwfgvTOBHMisWL9WQojazWNCGZPJRJcuXVi9erV9ms1mY/Xq1fTs2bPYZXr27FlofoCff/65xPmF5/L0B5jaUjtGmii5p+p8P1wRAEq/Mp6jItf63r17c+jQIWw2m33agQMHqFOnDiZT+YarFbXTMerxOUMAeEC9g5H/+iOqrgAkXovgPp8nOK5vQJgtmeezZ9PetqfUZVwR0FR1rRlHBejzeKPOdkYGnMaGxqNJrXnzfGzZ26iC68HA0GwGhmaRpzTmHw3FVoEhVDz9PlYIUTnVH7NXwvTp0xk3bhxdu3ale/fuLF68mMzMTCZMmADA2LFjqVevHgsXLgTgnnvu4bLLLuO5557j6quv5rPPPuPvv//mrbfecuVuCCfz5AtZbakd48khTGIFbnYjfPOqoCRVKzV1h0tHZxIiX3mv9VOnTuWVV17hnnvuYdq0aRw8eJAnn3ySu+++25W7IapAVYUBL2gTyNMMXKo2cwnbAao16IjTInjA5zHidFHUtZ3l6ex5RKvEcq2jYHnDK3kNysHEWSJIJIzzBJKJL7kYUegwkIc3uQSkZRLjF0YdLZUoLQ19GSMhOcoQ/5vDIzMZNcWCiD1EGnJ57XxjnjvXjAybgemhh9BK6d7FkLDf6SMzPRx7no0p3mxL92JZgh8jojLLvY6s5a9L5+BC1FIeFcqMGjWKxMREHn30UeLi4ujYsSMrV660dwh44sQJdLr/Kv/06tWLTz/9lNmzZ/Pwww/TrFkzvvnmG9q2rdph/kT1kUCmItuVMCZfRQKXyq7XnQOb6gpmDAm/u2yIbOH+ynutj4mJ4aeffuK+++6jffv21KtXj3vuuYeHHnrIVbsgPMhm2vO71h2DyuM+tQSo3kAmSQvlAZ/5xOmiqGc7w7PZjxKuiu/PxuF1/lt+R8KZLLzZQUu2a63YRxMOEEucFunYhrIv/MdEHo11ibTUxdFBd4rO+uO01p2tcFCTX2PGkXBG0+De0MME6PJ4Ork5b6Y0worGA6EHqzWYifaycldMKouOh/DciWAGhmURZCj//kswI0TtpCmlnBNt11AyPrz7kkCmItutnkDGHcOYqgpgnMHdgprqCGaqO5Rx9q+i1aG0G3O5NjlXVR5Pd71WVeV1qKo6+XV2TRkbGrdqz7JXa8Yo9T23Zb7r1PWX5bwWxP0+j3NSV5+6trM8lz2n0oFMSQoGNPGE8Qu9+V3rxlbakKcVvT76qSwiSSKENPzJwoQFHVas6MnGm3T8SSaYBMKKXT6YLPoYDnKVYTeX6Q/gpxXfv1NZHK01A/Bxan0eS2oFwG3Bx8oMZsC51waLDUbsjOZQtolbotN5pNH5Cq9LghkBcq2vTdz3KUWIUrjrTa4jXBHIODuMUQpyMJKmvMlQXmTgRY4ykpR5EgtG8uhNHnoUF+6GNBQ6bBiwYsSCF2a8sOBLNn5k408m/mShx1bGlh3nziHMxQqW1d0CmqpS3bVlqqK6uhCO8B021aOvWe6iKpou/URf9mrN8FNZjMj60unrL00W3jziPZuTuvpE2BJZlD2vygIZgNNZvqwzXMJqrwFsoS1K+6+2WR0VT2f20EYdoAVHieUUIaThyADPeeiIVxEcogH7aMxeY1e2WBuSgi8r8jqwIq8D3pi5yrCbEYat9NIfLjMoKag8zZluDTqFBsxPasU7KbH46/L4v5Cjpa/fidcGow4ebnSeiXui+F+cPzdEZtDcz1KhdUmNGSFqF895ahHiX556c+sptWNylYGTthBOqWBO2YKJU0HE2wJIUAEkK3+SlR/nlQ9mihlhoBJdh2vKRgCZhJBKKKmEc54IzhGlkqhDInVIoD5xBJFe7I2iJ4UwpXGHgEb6lxFC1HQW9Lyu3QLADeZvCFGp1bbtPPQ85v0AB/VNCLalsih7HlHl7EPGUUlaCMuNQ/jeeCXpWoB9eie1m4FqI334mwacrfD6DdioRzz1iOcy/gLLUnwD2rPdFsPqvJb8lNeW4yqMb/I68U1eJxppiYwzbuIG4xZ8NMcCi/IEM7cEncKidDyZ3ILF55oSoMtjTFDpQ947M5i5JCiXK0OzWHXOl0XHg3m7VWK5QqiCJJgRovaoGU8xotaQQKY82yw5jLEpjVMqmIO2SA5ZIziiwjlmC+O4LZQE5Xj1SJ2y4k8WvuTgQw5emDFiwYAVA1Z0/9Z8UYANHXkYMGPEjJEcvMjCh0x8yNW8UJqONAJII4Dj1P9vIxfdzPipLGI4S2ReHDHqNDG208TaThDDaYzUrFom+QGNK8IZCWaEEO6iKmrJfMtATmp1CLalcr1lhdPXXxIFvOg1hS2GTnirHJ7IWUB9VfFQpCTJWgifGa/ne+OVWLQLP6JE2+IZZPmVK/LW2EOgynYKXJys9J00ZyfdAo/zkOkndtjq85WlM8vzOnJURTDPfC0vWwYw0bieccZN+DoQzpQnmBkffIJ0m4GXzzfhiaQWROpzGeSfUPr6nRjM3N/wPL+d92Fjqg/rUry5NCTHKesVQtRcEsoIjyGBTHm2+V8gY1UaR2zh7LDVZ5e1LrutddhniyYTrxKX9yeH+roU6uvO/zuyQjqRunQitHRCtSxCtUy09L/wJduh6s1lsSgDafiTQgDnCeQcwSQRSqIWSjxhnCWS00SRqIWRqfmyjybsMzYptA69yqOB7RRNbUdoZjtCS+sBGtuOYaoBQY2rwpmqDmakw18hhCuYMfC2diMAoy1f4kP1PTR/aRzGSuNAdMrK7JxnaWE75NT1Z+PN56ZhfGkcRo7mDUAb615uNH9DD+uWIs2Ey9MpcHmlpu0iKLAtHfWn6Kg/xUNqJV9bOvOupQ8nVSjPmK/ifUsv7jH9yo2GvzFopTdhLk8wc1fIEZKsJv6XFsP9CW0J12+hi0/11IaK8bZyS3Q6758N5JnjwfQOjkMvtWWEEKWQUEZ4BAlkHN3e76Qqb/62NmertQHbrDH8Y61XbABjIo8musR//5JopEuioe4cMdp5QrSsEqvbVkUnvkbyCCOFMFIKv/BvN+T5oUQuJuK1CM7oojmlq8tJXT1O6GI4pmtApubHUX0sR/Wx/MwAAAzKQhPbUVpZD9DGto+21r2EqYp3vOdqrqw5I6qX3IQLUXW+4QritQjCbclcY1lVbdv9U9+Zt01jALjDvIQe1q1OW7cC1ul78prXRJJ1YQC0tu5jvPlTOlp3lfkDSlWFM/nBDIC/Zmas6Q9uNm7mu7z2LDYP5KQKZXbucD6y9GCe1wp66MvoA8bBYEbT4NHwfSTkebE6K5I74zryZf0/qW8sOYBzZm2ZKfVTWZbox+FsE8sT/bg+svxDZOeTYEaImk9GXyqD9HrtehLIlC7Tpmdzdgh/JmexydqYfbYo1EWdu/hgpq3+DO10p2mrP0NrXRyNdEkYy/hVqqDqHlGpPH3EKCBRC+OwrhEH9U04oGvKPn0z0rSi39n6ttN0tP5D57wddLL+gx9ZTix19anOYKYqa8tUZ00ZT+rot6wbcLk2OVdVH093vI55yuhLzm66ZMbANbxJoi6Cu3LfYphlpVPXX5IzWhR3+j5DhubP1ZZV3JP7hlNqmsKFpkqLve7gD0M3AOrY4rgt9yP6WjdVeBtVUXMmP5zJZ1Z6/mfpzmLz5aTiC8BNhs3M9FpJoFZ67SVHa8xk2XTcfLobe8yBNDNmsLT+Zvx11tLX7aRrxZIzATxzPIRoUx4/dDyLt75yj1wSzNQ+cq2vPSSUKYN8GVzLHW9ky1LVYYxNwe7cQH7PCmN9dhg7coLIuyiEaaQl0dVwnM66k3TQn6KZLgG9VrGvenWGMc7srFcBcVoU+/TN2KNryS59S47oYguNOKFTVlrYDtE1bxvdrVtpZjuMDs86JVZXOFMTghkJZURJquN4utv1rLaGMl8xiCd0dxJmS+bDrP/DRMVGxymPHEzc4/MUR/SxtLbu49nsR53WB9paQy9e9JpCuhaAUVkYZfmam8zL8KJiQ1AXVB3BDECK8uGZ3Cv5X14PAOpoKTzl9TV9DWU37XIknInL82LkqR4kWL243DeBV6N3oKuGobJzbTB4W13izAZmNDzPxLrplV6nBDO1i1zraw9pviTclrvdwDqiqm5yzUpjY1YYv2RG8FtWBInWws2R6mvn6WM4RC/9EXrojxKhq3g12YKqK5CpipGTNC4M81knL57+rAcgA1/+0bdhq749WwwdOKWrz159C/bqW/ARNxFqO09P62Z65/1JB+suj+g4ODHLIM2ZHCTDYgtRu+Wh411GAHCj5ZtqCWQAXvOaxBF9LMG2FObkPOuUa0sOJl7zmsSPxisAaGY9zIO5LxFrK32kofKoiiZNBZsz5QvWslngvZxh1h08lHM9x1U443ImMsm4jgdNP5Vaq9eR5kzRhlxejd7Ozae7sTorkjdTYpkacqzUZZxxvfDSwV0xqcw+HMY7pwMZFZWBXyVrywghaiYJZYRbkkDmQpXbNVkR/JQRye9Z4WSq/76ufloevfUHuEx/kN6GwzTQObefFE8OY0rjTxY9rX/R0/oXmCFBC2OLviN/GTqzVd+Bc7oQvtcN4nvjIPxUJpfk/cWleRvpYt3u1h0GV0cwI6MxCSE83Tfmvpz1jiZQpTHY8ku1bPM3Q29+NF6BpmzMyn2BcHWu0uuM0yKY6z2TI/pGaMrGaMtXjDF/joHSm+VUlLPDmeKCGYDu+mN87/syT5kH87HlEt619GWrtSGveH9KHV1aietzJJjp4J3G3Ih9zE5szeJzTWnvlUZv39LfC2cEM9dGZPLO6UCO5Rj56GwAd9QveT8cIf3LCFEzSfOlMki1sepXmwMZs9LYkBXGtxl1WJ0ZQY7S21+L1Ocw0C+RgX4J9Er/DpNWNTdfVR3IVHcQ4ygzBnbq27LB0IMN+h6k6ILtr/mrDPrmbWSgZS1tbPvctolTVQcz0oSp+kjzpeolzZecvG4nNV9yZtMlBdyoFnNI35ixuZ8xxvK509Zdkjgtgim+z5Ol+TE88ztuyFpe6XXuNTbnxaCppGsBBNtSeDj3eTpZnT9keEmc3aSpuHAGYFVeKx7IGUk6PoRpGbzm/Qnd9MdLXZcjTZkeSWjFF+n1CdWZ+TZmE5GGspt5Vfa68UOSLzMOhhOot/Fz59MEGCp/DyHBTO0g1/raQ0KZMsiXoXq5202rIyp7Y6sU7MwNZFl6XX7IiCLFZrK/FmPI4ir/eAb5JdDWKw1T4u+lrKlyamsYUxwrOvbpmvO7oSdrDb05pwu1vxZli+eKvDVcYVlDHRXvwlKWrCrDmaoKZiSUKUxCmepVG0MZqLpgxh1DmVW5nXjIZz7eKodPMm8nkAynrbs4VnTcY3qS/abmNLMcYk7KoiLDUZfXeq9LeCtgPFbNQGPLUe5Ne40w23kifSpf+6a8nBnOlBTMnLSFMCXnVvbZ6mDAykKvrxlh3FbqusoKZnJsOm443Z395gAu8UlmSZ2tDg1XXZlrh03BsB3RHM42cXdMSqVry+STYKbmk2t97SGhTBnky1B93PGGtSyVuaFNtRpYnl6Hz9PrccAcYJ8ers/lav84hvrH0c4rzT40tSGhagIZCWMgMTu0xNdsaOw1tmC9d082mzqTo/Oxv9YlbxtXW1ZxifXvKqs2XhESypS2HQllRFHVdTzd7TpXm0KZybb5/G3oxDDzD9xlfsdp671Ywr/XkxU+g/if/w1423JYeH4ekbakSq33O5+r+Mx/JAA9cv7ijvT3SuwTp7pCmuoIZrKUkQdzR/JDXjsA7jP9zF3G3+z3RsUpK5g5bPbl+lOXkK303B96kCll9C9jX28lrh/fJfry0KFwggxWful8xml9y0gwU7PJtb72cP+nJVEruNuNqiMqcjOrFGzLDeLT1Pr8lBlF7r/Nk7w0K4P8EhgWcJaePucwXDRSkicGMu4UxpQWupRFh6KNZR9tLPsYzyf87dWR3717s9vYii2GTmwxdCLYmkK/nHUMyPmdll6HnVjyiqnKPmakbxkhhKfZkh3L336d0CkrIyzfVck2EgpcZ87oo/nSbzgAt2YurVQgo4ClfiP4zncwAFdnreSmzK9KbUZbsCzlCWiy8eaArjFH9bGc0NUnXosgWQshTQsgR/PGig49NrxVLv4qgxBbCtEqgeb60zTnKK04TDAVG2GopH5mfDULL3l9RgMtmTcs/XjBfAXJyp9HTSvQlTCqZFl9zDQxZTEnfB8PJ7bhxXNN6OubTGuvsstdmT5mBodn8dopC8dzjHwe788EJ4zEJISoOdznqUnUWrUhkDErje8zovkotQG7cv9LuluY0hkVeIpr/eMI1Bd9iK6qMAaqLpBxdRhTmQCmLF6Y6Z27md65m0nQhfOrz6Ws9e5Dij6Yb/yG8p3vYLrnbmFw9s80yTsGQIQLqpWD543KZEj4vdpqywghapdlpqsB6GXdXCXNTguGIDY03goYj0Uz0iH3H/rlrKvwehXwid+N/Oh7JQCjM77gmuyfKly2iwMaGxp7dc35w9CVLfoOHNY1wqbpL15FEelaAImEc/Tff/9Q4LXG6gTd2MllajNdKd8ohvk1oy4OZ3Sa4kGvVURracwzX8uHlp5kKC+e9voKfQWDmREBZ/gtK5yfM6N4IL4tX9f/Ey9d2c3LKhrMGDS4rW4ac46E8eHZAG6JTsekK/dqipCOf4WoGSSUES7laYFMecOYc1Yjn6TG8L+0+iT9O4y1l2blGv84bgo8RfsCzZOKbsuzase4KoypyhCmNJG2JG7K/JqRmcvZYurIKp8B7DO1YJN3DzZ596C55SBDslbRJXu7/RfN6g5oqiqYkdoyQghPcTQriF/8+gEw3PJD6TOXU0Ix159fvPtx0NgUb1sOkzI+xIHuSoqlgM/8RtgDmYnpH3J5TuXuC/LLa/b14kfjQH4z9CFRF1FonkhbIk1tR2hoO0m0LYFwlUygSsebXAwqDys6cjUv0rQAkrVQzuqiOKXV45C+Ead1dTmiNeAIDViqXUOAyuBK1nON+pUO7HP4WJRUa2as6Q8CtRweyB3B13mdsaHxjNeXFQpmNA0ej9jL1pxgDlr8efl8Y2aEHXKofBUNZoZGZPLSySDizQa+T/LjusjMcq+jOBLMCOH5JJQRLlOTA5kzFm/eS23I52n17CMoRelzuCXoJDcGniZUX3w78P+2JYFMqdtzURBTHANWepi30MO8haOGBqz0Gcgmr+4cMDbjQFAz6uad4dqsH+iZ+5e93NUZznhajRkhhADn9SezytifXM2LxtZjtLfudso6ofhA5pwumKV+1wNwU+aXhNnOV3j9y32vZsW/TZYmpH9U6UBGAf8Y27DCdxC7Ta3t031VJt3zttLdupWO1l1EqGTHVlaMNPzZoW/DLu+OrKEH57RgvuIqvtKuooU6wmj1HUNY61DtmZKCmeHG7XhrFu7OuYlv8jphwMpTXssq1JQpVG/hsYi93BnXkXdTGjLYP542DjRjgooFMyYdjK2TznMnQlhyJoDhEZml9o1THhLMCOHZpKPfMkgHS1WjpgYyR8y+vJnSiO/So8njQr3Utl5pTAo+xpV+CRhLuGkovC3nBzI1IYxxpyCmLOd1QfzsPYCfffqTpfMFIMKayNCsH7k0Z6P9hrQ6wxlnBzNVUVOmOpovSUe/ojjVeTzd6frnzh39OiOUsaFxLa9zWleXe3Le4Jq8VZVeJxQfyAC8HHA7f3h3p6nlMHNTniq135fSrPa+lPcCxgJwa8ZnDM7+pcJlVcAOU1u+8L2OY8aGAGjKRkfzP1yas4GO5p3U90mo8PpLYkXHMd+WfK/152f6kKNdqC0crRKYqL5kOD9jdKCD/JI6AP4hry335IzCip6JxvU8Yvqhwp3/3hvfjh8yomllSuPL+psduleDil1P0vI0BmypR5ZNx5stE+gbklPudZREQpmaR671tYcTWjMKUT7udEPqCEduWo+ZfZkR34YhJ3uxLL0ueei4xCeZ9+ts4at6f3K1f3yNCmQSswzVEsgkZofa/zxJiC2VG7OW8eK5h7gx4ysCbWkk6iN4L2As94cuYI13H/LQe+S+5avqUbuEEKKyfsntyGldXXxVFpfnOef6WlIgs8vYij+8u6MpGxPSP65wILPV1J4l/rcCMCxzRaUCmRP6ejwZdD/PBN3LMWNDvFQOg7NW8cK5mcxIe5nu5q2YyCMhO7TE/aooPTaaZO3hMfUiK9UE7rUtIVydI06L5End/3GD9jK/0aPMo1RSODfEsIunvb4G4D1LH96wlB7qlxYUzgnbR7DOzF5zIB+mNiijRAXWWYFQM9CguCHqwnDsS8469yHb0+6vhRD/kVBGVCtPu2CUdcE9bfHm4YTWDD7Zk28z6mJD43LfBL6o9ycf1t1KL99zDlVNNST87vRAJjV1h9MfnKsjjPHUIKY4viqbYdk/sjh5JmMy/keI9TzJ+jDeDhjPgyGPscmrGza0atlfV3fALBwnv3YK4Rw/GC70x3J53u/4UPkaCSUFF1Z0fOh/EwBXZP9GrPVkhdZ/XF+fVwJvR2k6+mWv44asbyq0nlxMfOx3I4+EPMoeUysMysLgrFW8mDyTWzM/J8JWfC3NqghnkrIMBJHBOJbxnbqdB2xvEaJSOK7VZ7ruEe7W5nCKqFLXUVIwc71xG4+YvgfgGfNVrLC0K3U9JQUzYQYLD4YdBODlc42Jy/Mqa7f+W2cFgplb66SjQ/FHqjcHs4zlXr40nnafLYS4QEIZUW087UJR2oU2xWrgqaRmXHmiN1+m18OKjn6+iXxd/w9er7ODDt5p5diO59SOqUo1JYgpjhdmrspezfPnHuaWjKUE2tKIN0TxSuAU5gTPZrexJVD1TbQkmBFCFOQpzfkq4hxBbDB0B2CIpfLNlkoLK1Z7X8ZpQz38bemMzFpeofWnagE8FzSNXM2bNuY9TMj4uEKdBO83NGVW6Dx+9L0Sm6anW+4Wnj03m1szPydAZTi0DmeHM0lZBpKyDHhj5mZW8K2awkT1BQZlYb3WjRu1l/icwaXWmikpmJlk2sBE43oAZuSOZKs1ptSylBTMXB9whs7e58lSBp5MKt/3orzBTD0vK5eHZgPwaZx/uZZ1hKfdbwshJJQRolglXWDNSuO9lAYMPNGH91JjsaCjh/c5ltbbzFt1ttPWwQ7i/tuO+wcyVVk7pibVinGECQtDsn/m+XOzGJH5Dd62bI4ZG/Jk8AyeCbybM/pojzoWzv6sVeUQ8EK4C6kJVT1W0J88zUhL6wGa2o5V2XYyNR++8hsGwA2Zy/FTWeVehxUdLwfeQbI+jDp5Z7kn7XUMDvS3UpANja98h/J48IPE6yMJtZ7jgdTF3Jv2OhE2BzrvLUZVhDMA/mQzTX3EF+puuqh/yNZ8WKibyl3aXM5RcpOekoKZWaYfGajfgxkjU3LGEGcrvVlQccGMToN54fvQY2NlZhQbs8q33+UNZm6JvnC/+G2iH2l5TurttwAJZoTwLBLKiGrhSReHki6sazLDGXqyJ08ltyDNZqSFKZ23o7fyYd0tdPJOrcB2PKO5UlWoTUFMcXxULtdnreCFc7O4Mns1epXHdq/2zAyZx8d+N3Isp16VHR+pLSOEqOkUsEwNBOAqy+pKr6+0YOI73yFk6Pypl3ea/hUcIekzvxHsNbXA25bN9LRX8VPZ5Vo+XfPjqaDpfO03DKXp6JuzkafPz6Wj2TkjWDkznEkqcA2K5TRvqdk8YHsLL5XLRq0LN2kvspXWJS5fXDCj1xQveH9OS91ZkpU//5dzM7n/jnxZkuKCmZZeGYwOPAXAwuTmWMvZLVB5gplugbk09TGTbdPxXaJf+TYkhKhxJJQRVc7TA5kTFh+mnO3I7XGdOGrxI0yfy4KI3XxT/w8u80uu0HCGVRHIOFNlasdY0ZGNN+n4kUIg57UgUggkDX9OZtfhbHZEBbs/rHkCVQbjMv7HovOP0jl3G1bNwI++VzIjdAG/e/UiPjvM1UUUQgiPs5/GHNM3wKjMXJa3oVLrKi2MSNaFsNLncgBuyvwaPbZyr3+rqQM/+A4CYEr6Eupa48q1/El9XeaEzGa3qRVeKoepae9wR/p7+JYz2HFEVQQzOhQ3s4KP1AwaqRMkamFM0Z7gKwaVuHxq2q4i4YyfZuZ1708IIovttgY8lju0zHIUF8xMCz1CkM7CfnMAX6bXK8de/btOB4MZTYNR/3b4uzTen6oYC9eT7r+FqO3kJ1NRpTzpgnDxhdSsNN4+H8vrKY0wKz0GbIwLOsGdoUfw15WvWnHh7bhvIFNcEJOLiXgtggRdBElaKMlaKClaEClaMKlaAOmaPxmaP1maD1n4YNVKOa3823Rap6x4qVx8VA6+Kgt/WyYBKoMAWzrBtjSCbSmE2s4TZj1PhC0RH5XrtH10R9HWBO5Pe5WdxjZ86H8TZw11eDNwImssfZiY/jGdTM75tTNfYpbB6UNkCyGEu/hOGwBAr7y/8Kf8zYkc9Y3v1Vg0Ey0sB+hkLv+1+JwumDcDJgBwVdbPdDdvLdfyu40teSHw/8jW+RJpTeC+1FdpYD1d7nKUR34wE+lTfGfBjsoPZsL/vRY14zifqPuZxzRWaZfyhHYnR1U9pqslJY5klZq2q9CQ2Q1153jReykTcsbxv7zuXGI5wlDjzlLLYYj/rdBw2SF6C3eGHOHJ5Ba8eK4J1/jH4VeJe77SXBuRyfMngjmUbWJbuonOgWanbyNr+evSZFIIDyChjKgynhzI/JUdzOzE1hy1XKhS2tsnmdnh+2hiqtzNnTsHMgezQjmij+W4LobjuhhO6epyWqtDss75tTVsmp5szZdsfDlH2b+8BdjSibbGU8caT928s8RYT9Eg7xQhtpQKdYTortpbdvPU+Xn86HMFy/yuYb+xOQ+HPMqQ7FXcbvsQL5x/w1ZZqak7CArq4OpiCCEEABb0rOTC8MhX5K2p1LpKqxmSqAtjrXcfAG7MXFbua5ENjTcCJpKh8yfWcpybMr8q1/KbvLrxesAkrJqBFuYD3Jf2KgEqs5ylKJkZI3H6KJL0oaTpAsnWfMhDjw4bJmUmwJZBY8MJ6qo4QlTFr8VJWQZ7MONDLk+pZ2mmjvOqbgyfaMNJJIzH1QuYKP6HhIuDmUsNB7nTuIZXLAN4JHc4HfQnaaA7X2oZLg5mbg46ycepMZzI8+X9lAbcGXq0XPtkSNjvUCfaAQbFoLAsvkn058sEfzoHVi7oKokEM0K4PwllRJXw1EAm06bnueSmfJzWAIBwfS4Ph+3nav/4CjVT+m8b7hXGpBDAPzRnD83YozVht2pKsn/J4YuPyibKlkC4OkeYSiZUpRCk0ghSaQSqdPxVBn4qCx9y8FK5pGb7Y8CKDhs6FAqwoseKnjzNgFkzkqN5k615k6X5kqHzI00LIE0XSKoukPO6YM7pQkjWh5Kh8yddF0C6LoCDxqaFyhVoSyM27wSNLMdonHeMppYjBKuiI18l5ARU6DhFepev42ZnMGBlaPZKeuZu5iP/m/jbqzPf+Q7h77zOzDC/TDvb3movkxDCuXyHTXWb62ReZIsKDevrrv6gE+e0YIJtqXSxbq+y7Xzjew1WzUBb825aWg6We/mfvfuz29Qak8rlzvS3MP4bOsTnlN5JLcBfvl35LOAmlKajY9Y2Rif/jyz0ZBFIVDlGfyzovC6Inca27DW14LChEWf1USjNsV4OAlQ6zayHaWvdR2frDlraDparKVfBYEYDbuML6toSmKvdzSqtLxn48Zx6Eu8Sfpi4OJi52/Qrm6yN2WKL5d6cUXzu8xYGzfHymDTFfWGHuC++Pe+kxHJT4CnCDBaHlwfHg5kbojL4JtGflcm+zIo9T4BBGngLURtJKCOczl1uNB1R8Eb07+xgHkpow8k8XwBGBpxmZtgBAvWVa+bhDoFMAqH8RXu2am3YShuOafULz6CBpmzUUXE0sp2gge0kMbbT1LOdpZ7tLAFkOPQrWGJ2KLmYitw4aVwIGwxY8VJm/BSAY50jZ2k+JOjDidNHcVYfzSl9XU4a6nFWH02aLpCdprbsNP13MxZuSaSx+QhNcw7RLPcgwdbyd8Kcr7gwp7qCmnDbOe5Le42/TR1Z4n8rZw3R3G9YwHXmFUw0f1zpWjPShMk9ya+ZQlTOSu1CLZl+eevKPYJRQWXVkvnduxcAIzPLPwR2nC6Sz/xHAHBNygr0mdnElzLqUEF/+Xbls9ALgcwlGZsYef7LQs17Lg51Sgtp0jV/Nnj3YJNXdw4ZmxR53deWSaQ1iWBbKj4qGwN5KDRyNS/StADO6UNI0oWRrgWw1dCRrYaOfMhNBKo0+ub9weWWtbS17XXo/qFgMAMwhLWEqlTu42E2ap25hzksVo/j40AwY9BsLPZeypCsu9lua8Cblr7caVpb6vYvri0z2C+ed73S2JUbyFspjZgVfsCBvbhonQ4EMx39zTTxMXM428SPyb7cGOW82k4FSW0ZIdybhDKi1soPZMxK48VzTXgnJRaFRl1DNgsi9tDbt/LVSF0VyORgYitt2Kh14g86cVhrWGSe+rbTtLQepJntMM2th2lkO4YvORUqV1WOpOSrsonNO0ls3slC00/lhnLWWIdTxvqcNMVwwtSAOGM0ScYIkowRbPbrAUCUJY4WOftpmbOPpjmH7L9GVtTFQU1VhzRdzdtpdX4/n/rdyBqfviwzXcNfhk48mPMiLW2HqnTbQgjhSXIwsYbuAPTPW19l21nhexU2TU9b8x6a5R0p17I2NN4JGIdZ86JZzgF6ZWx0eNkdPu3tgUzv9PVcn/J1mYFHcSHNCX09fvAdxB9e3bBoRuDCDzON8o7TzrybZnmHaWw5TqBKK3P9ZgycMdThoKEJe40t2O3VijQtkO+NV/K98UpirScYZvmBK/N+w0TptU0uDmYuYTuvqnlM41E2ax2YwcO8oJ5wqClTPV0q87y+4/7cG3nJfDkD9PtppS+9E+WCwYxOg3tDD3Hb2c58mlafScHHiDSU/8eQsoIZTYPhEZk8d8LEt4l+VRbKgAQzQrgzCWWEU3lKLZn8QOaI2Zf749ux23zhpmVEwGkeDjtAQCVrx1zYRvUGMqn4s5burNF6sIlO5Gje9tc0ZaMlh+nGPzTJ2Ucb6z4CyXBKuapraOuLwxATFhqaT9DQfAL+vYfJ1rw55hXLYa8mHPRqxklTDPHGaOKN0fwecBlGm5kWOftpn72T1jl78LNVvgPI/HJVZTjjp7KZnPEB3cxbeNt/PKf09bjXZyG3mj9ntOWrCo34IYQQNc0mOpGl+RJhS6SlrfxNivKVVkvmvC7I3pfM8KwV5V73d/qB7DW1wGTL5cZzn5fYie3FDng14+OwW1Gajh4ZfzgUyFws3hDJe34T2OXbzj4t1nKcS3M20N28hRBb+WuWmsiz/3ByRc4arOk6zvrX5VdDX9YaenFM34AX9Xfwse0GbrJ8zTWWVaXWYLq4A+DO7OFVNY+pPMZGrTOzmMHTahGGEq57BYOZ4Ybt/JTXhlXWNjyYO4JlPq+X2YypYDDT1yeZTl4pbMsN5q2URswOr1gzv7KCmWvCs3j+RDBb0705maMnxrtqOhYWQrgvTamqGISt5khLSyMoKIjU1FQCAx2rWlpbeVog83VaHeYntSJb6QnWmXkiYg9X+ic6aRvVE8ik48evXMIqrQ+b6UBegZGPIlUSvdhKT7WN7uwkmPQKD3NdnOoIYyraF0y+LM2Hg97N2Ofdkr3erUg1BNtf0ykrLXL20yF7B+2zduKjKlZL6GJVXXMmQ/Pj06AbWGu88FDQ2rqPh3OeJ1IlVWh9zmjC5MyOfvMiL3Xauopff9lt/F3J0V8x5drkXK46nu5y3ayKPmWKG264PC4e8tgRs7T7Waldxgjzt9xhfr/C2y4tlPnMbwTf+Q6mueUgj6Y8Xa5g5LC5Dk9FzyRL78e1Kcvpl156k5p8Z43RvBw5jRydDx2ytjMm+SOHwxy4cC38IXgIf/hdgk3Toykb7bN30i99DQ3MJ4iuYD80ZfH1yeEn4wC+Ml5Loi4cuFBL9/bcD+hp/bvM5QvWmvmDDtytPYpFMzJKfc9D6s1Sj31+MJNo8+fKrHtJxZeHTT9wm8mxGlT5wcyGrFAmnO2Cl2bltwbrCa9AbRko+9ozaU8Em1J9mBaTwtT6VfN+5JPaMp5DrvW1h4QyZZAvg2Pc5cbSEZa4g8xPasnX6fUA6OmTzKLI3UQZnDPsclUHMhb0bKQz32qXs47/qh4DNFPHGMAm+qk/acGRQjcszgpkqjqMqWwQUxIFnDHW5R+fduz0ac9ZU137awZloU32brpnbqZlzr5y3eyWpCrDGQXsDGjLK16TydL88FcZTM95lT7WP8u9Lmf1K+OsYEZCGQllXEFCGc8PZXIxMkD7iCzNlxezZtLaVv4+QPKVFMpka17cHfoMWTpf7kt9ha7m7Q6vMz4nkKUhN/Kn/yXUNZ/mvvgXHKrlmKYLYHHUvaQYQmicc5g7Et8oV18523w6sizkOjL0F66tbbP+4erU74nKSygyb0U7CS5NpM85zBj4yTCAj0yjOK8LAaBv3kbuzH2XMFX6yEgFg5mf6cVD2oMoTcf9tne4lW9LXTY/mFlq6cKs3BH4YOYn38XU16U4VPa8qP4oBTee7saO3GAmBx/lgbCKNxsu7fqzPNGPWYfCiPW28H3Hs5UaXMIREsx4BrnW1x4SypRBvgxlc5ebSkecOX2CO+M6sN8cgA7F3aGHmRJ8FL2TLn7ODGQuDmOOU4fl2hV8xwCStP9uGJuo4wxS67iCDcRyush6PKV2TFWFMSWJN0Syw7cDW307E2+Mtk8Pykuhe+ZmemZuIsSaUuntVFU4E+FzjrNaFE9638d+fXMArjOv4Dbzh+XqN0dCGfdRnptkuTY5V20PZcD5wUx1hzK/0YPpukeIUol8mHlHhcP10mrJ/OgzkI/9b6JOXhyLzs9xeBvxOYGcNNZncdS9KE3HtPiXaGQ+VuZyeeh5PXIqR70aE2FJ4O6ElxxudputefNVyAi2+nUBLvSvNuL8VzTNPVzmss4OZyJ9LvTRl4U3n5hu4Evjtdg0PQEqnftzXqW3dXOpyxcMZj5kOC/oJqIpGy+qJ+hL6TVuggLbohSMzp7MZlsjBur38JbPxw6XPS+qP79mhnNHXCf8tDzWNlxXqQEgSroGZVo1+v5djxybjqXt4mjnX7nO/B0hwYz7k2t97eHYWHdClMCdbijL8uexREac6sF+cwBh+lzer7uF/wtx70DGio61dOP/tHkM173JEm0kSVoooSqFW9U3LLXdzZdqGpP5vEoDmcTs0CoJZBJyAux/1S0qL4Er037mobinmR73HJemr8XXmkmqIZifg67k8TpzeDv8NvZ7Nf9/9s4zPo7qfNvXzGxfaVe9N8u94N57o9n03gM4QCBAElKBfwgkvCEJJARCCAm9995sYxsbbNxw792SLKuXlbR9Z+b9MFojW7urlSw3mOv38xftmbIrec+Z+9zP/RyVb+ZYvbcabwrZahWPeu/l0sD7ALxvOodfW/94mGjX4Xm6UbQ72TmZBRmdHyb6Q1H3sUTQwt2ns7xb3I5HoiDwhXU6AGd5v+iUIKMCHyRfgCqIjHSvjkuQAfgo6Tz2mYuxKF7m1D4btyBTbszh71m/ZK19BKIqc4ZrHr+s/Htcgkz4nuNpzR0v1d4Uqr0p2PBxU+Bl/u39Nb3kvTQLidxv/R2Pm24iGCPmsrbNPHUtH3Cx+jmqIHKPcBclZMe8tqtpM4IAD1o+wIDMAnkAX4d6xX3vhqovmWqrpY+pGbdq4M2m3LiPjXi+KOKnXVKZluwFYG6t7aiuoaOjc+qhizI633tUFV7b6WFOxXBcipHBZhfv561krDW2ZbYzdLcg48HCG8zmQuFJfi7+nuXCcARVYYL6LY8oDzFXvYFfqs/Rh/1Rz3MylyudKCEmEgKQHzzAhY0f8MDBP3Bd7Yv09u1EFUS2WgfyVMat/DXrt6ywjyGE1KVrHMv3akDmpsDLPOB9CLvqZqvUj59aH2az2O+YXVNHR0fnZEJB4GtGAjBFje266CobTYOokjKwKW4m+pbHdUxY2NhoHcw+czFGJcAs12dxHbvOOpSliZMAuLruVTJC8WXerbMO5fGMO6k3pJISquP26ic4q2lel9qDHwtxBqCXsp/Hvb/jstYNhY9NZ/Mr6x+pE5KjHhsWZgTgt+rTDFG30SIk8EvhHryYY17X1bSZXmIN1xq139uf/OcQVON/BDJVf8mNzhIAXnIVEFCPbjcvmjBzZqomus2vt3E86hhOpY1VHZ3vO7ooo9NlToUv85AK/2+rwIN1/VAQuCixnFdzviWrm/JjoHsFmVLXHv7L5cwSnuGv4i2UCTkkqi1cp77HR+otPKH+kRksx9jB4qo7BJlj4Y45mcSYSBiQGeZdz201/+Huij8zqfkrzIqPKmMWb6ZcwR9z7mNh4nR8QuwFYCSOxftu+/sZJ6/m355fUSzvp0FM5jfWB/jUcHq3X1NHR0fnZGMzfagXkkhQWxjOlmNyjfkWzSUzxbcMCx2XloTFDBmRT52zAZjW/CVJcscdjuqkFN5KuQyAmU1fMNC3tcNjVGBB4gxeTruOoGiin3cbd1X+g6JASYfHdkR3ijNhYcZIiJsCL/Og98FDGwp3Wv9CiZAX9diwMGMkxMPqX0hT69gjFPJX4Za4rv0z0yJScLNbzeC14JhO3fc5iZWkS36qZAuft2R26th4mZTkwyoqlPsNbHGbjsk1juRUWMvr6PwQ+OH41nW6lVPhS9wjC/xqs4XFnnQEVH6TuosbnSXdGp7WXYJMg2rlyeZevCHcjVvQbKv5agVXqx9yLouwEV9noGPtjlEQaBCTqBeTaRCTcIkOmsREWoQEPKIVr2DFL5jxCyZkJEKCBAiEFBEBFYMjhEENYVSDmFU/FsWHTfFgV9wkKC045CacsovkUEO3dUPqKhmhGi5qfJ+zXZ+zImEsXyVMptGQzCdJ57IocTqTW75icvNXnbrPal/iMQ0AzlGreNR7N/8w384S4wQes9xKSSCfWwIv6G2zdXR0YhLK6HtMAn+PB18JowAYz7rWTYvuXd5Wi2lsNA0EYKZ3cYfj2woYq+yjqTWmkyA3M62545wdGZFXU6/GL1ro4d/Lma55HR6jIPBB0gWHnDVTm77kHNcn3V7GFX5fR5s5U+1NOZQzM0ZeyxOe3/B76z0cEHP5ue3P/Mn7ZwYp2yMeW+sxkGYLkU4DD6l/52Ye5ENhJuPUtZxJ9M5K4VbZvzB/we/9F/CvwHQuMq4lUYhvk85WvYhrnEU8Wt+Ll1wFnJdQeVTryUhtsq2SyuRkL/Pq7MyvszLoOOTK6OjonBzoooxOpzkVBJmGoMitmxLZ6HdiEWQeydjUbe2uw3SHINOsmnk2MJ5n/GPxtIoxvdV9zFHfZibfdOpBurvcMaB1mCiT8jhgyKVcyuagIYsqKZNaMQVZOD5fG1bFQ0qonoxQNRnBarKCleQED5IWqj0meQFR70P1Ma15MZObv2KtbTgLHDOpNmYy13k2XyVMZlrzl0xq+RqzGt/iqbuFmRpvCumti1sAK37u8f+dHsp+XjBfzQemc6gQs7jH9w+scYp7Ojo6xw/b+beeEvNqZwllTjvqsN94+QpNlJmsrj6q80QL+V1knYwqiJwW2EyW0r5rUTSCGJjvOAOAmU0L4ponvkycxn5zDyyKl6vrXu1wHaAg8HbypaxMGIugKlzQ+AGTWuJr+xwJFag2ZFBiKqTClE2tIQ2X5MQj2ggJBgRVxaQGSMZFqlxPjlxBYaiMPsE9JKotcV8n/FlnWOvJUyv4p+ce7rPezVapH3db7+NPvj8zVI4c9hwWZkaymTm8zTNczoPCTxmsbieb2qjXdDVt5rJEkecCE9inpvN0YBJ3mRfEfc9X+d/k38Lv2OR3ssHvZKilY9dTLCIJM2ektIoy9TZ+UeA65l2YQFvX6/lWOjonFl2U0ekUp8LCsdIv8eNNTvYGE0gSA/wve/1RT5xHcrSCTFAVeT04iscD06hX7SBAP3UPN6tvMIVVnRYdjkaQCWBkp9iTb5Wh7EnswX5DAVWG6NZcSQ2RpLhIURpwKk04lGYS1Bbsiger6sWsBvAFRCRVRkJGaC2MVgSx1T1jICCY8ItmfIIFj2SjRUygRUygSXLgkpy4pQS8oo1yk41y0+FWZqMSIDdYTl7gAAWBUooC+0kL1XKs1y0SCqM83zLCs4YN1iHMc55JlTGLT5PO4avEyZzlmssY98q4hLRj7ZgRgKuC75KnHORvljtZaRjJL60P8qDvQVLUxmN2XZ2uoy+IdXQOx+kYFFcHpkrS2CX0QFRlJrCm2+8jhMRXlgkAzPB2PPe3dcmsSBiLy5BEUqiBcS0d59BUGjKZ5zwTgAsb3idFjp19pwLvJF9ySJC5sv51Rno6/xnIiOy09GGjdTBbrQNoljouVaohA4yH/6wwWMqIwDrG+VeTI1fGde2wa8ZJM3/z3s/9lt/yrWEY/2e5l//ne5AhcuRytLAwc4v6OisZyiahL3/kDp5U/xBzPeBp3sivbfO5zXc1zwYncq1xBelifGJSquDmXGk974ZG8Iorv1vWlkcKM5OTvZgFhVKfkV0eI33swaO+RjzowoyOzolFF2V0vleU+STmbErhQMhKtsHLc9lr6WmKr1tBvBytILMo1Ic/+89ir5IOQKF6gJ+qrzCTb7okLHRWkAkhsV3szVrDENZLg9gu9iEkGNuNS5YbyJfLyQ0dJEeuIEuuJkOuIVlpjCo8dFduSkAwUielUmdIpcaYTpUhkwpjNpXGLAKimf3mHuw39zg0PlFuopdvN738u+nn297hQvZoEFEZ5l3PEO8G1tqG87nzbOoNqbydchlfJU7mgoYP6OfvuATgWAszAJPl5WR4a/i95V52S8X8zPoQD3n/SJ5acdi4Go+h21pj6+jo6BxPljMMgEHsJInu/07dYBqES3TiUJoYFtgQ93EhJBYlajk0M5sWYCT2d6yCwJsplyMLBgZ4tzDSE7vVM8BnzlmsSBiHoCpcXf8qwz3r4r4/gBbRzrKECaywa+JRGIMSpCBQSm6wnMxgFUlyIzbFg0ENoSIQEE00i4nUG1KoNGZRYc6h3JBLibGAEmMB79nPp29wJ6d7v2S0f02HmxVhYcZMgAd8f+GPll+z0jCS+yx387D3PvooeyMeFxZm/qQ+yuU8xgphGO+rp3MRX8S83ljPmww2TGajks//gpO41/x53J/ZNcYVvBsawVx3BvfKRpKloxdN2gozdkllrNPPkkYrixutx02UAV2Y0dE5keiijE7cnOwumVKfgeu3ZFAZMlBo9PBi9hpyjN1brnE0gsx+JYU/+WbxpaxNvMlqIz9RX+dC5ncY3BuNeAWZBsHJCmkkqw3DWSsNOVQqFcapuOgV3EvP4F6KQyUUhUo7ZUOG7g2yNalBskOVZIcqaVtxoyBQa0ijzJRPqamAUlMBZaZ8miUH6+zDWWcfDkB6sJr+vm0M8G6ll3/3MclTEVEZ6VnDUM96vkkYz3zHGVQZs/hvxk8Y6N3MBQ0fkCbXdft1I3FkCVNb+im7ecz7O+6x/p6DYg6/sP2ZP3v/RO8oi1wdHZ3jz/e1hOl4sFzQRJlxrD8m5w+7ZCb6lnfYwejILBmXIQlnqJHR7o47Qi1PGEeJuQiz4uOShnc63KT5KmESCx0zAbi04e1OCTJu0cbCxBl8kzCegKgF19vlFoZ4NzDYs5Ee/n0dikhH0iQmcjCxkFXmkWw0DWSHsQ87jH3IDFVxoedjJvhXxnQBh4UZE0Hu8z3MvZZ7WW8YzD3W3/NPzz3tNhPC1HoMFNoOcpv6Ko8KN/KocAMT1TVkEHlOBM1NenPoWW4X7+eV4FhuMi4lQ4xP0BssljNQLGeLksv7zdncmFQa13GdYUqylyWNVpY0WLk59+jye3R0dE4NdFFGJy5O9sVimU/SBJmAgZ7GFl7MWUOGoXsD0roqyARUif8FJvJEYAoBjBgJcbX6IXPUt0jA2+X76UiQqROS+cowjq8N49ki9kMVvmu25lCbGODfzsDgNvoHd5IlV3W5/Od4dlMSUckI1ZARqmGEZy0ABwIODprzKLUWs9/Wk4OWfGqMGdQYM/gqcQpm2Utv9zb6tWymyLMrokCTZe66m8qAzOSWrxnlXs0855l8nTCJLdZB7LD0ZUbTQmY0LYy6uD0ebhkIBwDfy/9Z7mWX1ItfWx/gT94/c5qy7Zhf+2ThyLp9HR2d9pxqYb8KAqsYDMBYtXMukXhoFhJYZ9LOP8W3LO7jZEQWOTSXzLTmLzsUc5rFBD5zzgJgluuzDjs0bbX058Ok8wGY3fgJY90r47ovBYFvEsYz13EWHskOQF6gjCnNSxji2dClttlhHEozDtdmpli+oUF0ssgyhS+s06gyZPKU48fMC87kupbX6RPaE/UcbYWZB3x/4dfWP7JT6sX/We/lcc/vcBB5s6jWY+Bq20fMVyeyRejDo9zAQ+rfY97veNYyWN3GRqE/zwYncLd5blzvUxDgSuNq/s+fyztNudzgLO2W3Je2bpmpyV7+uA/WN5toCIokG49fUL/ultHROTEIqqoev8TMU5CmpiacTiculwuHo3vaAZ5qnOyCTIVf4totmRz0a4LMyzlrSOtmQQa6JspskHP5re9CdipaRstEaTe/DP6dIsq7fB+xxBgPFpYaxrLAMJUN0qDDhJg+8m7GhlYzSl5HkrvhqMNyT0Rr60q/rcMxftHMfmtP9tj7ssfWD48h4dBrFtlDv5bNDGpaS46/LKIQdTQCDUCVIYN3ky9ml6UPABnBKi5reIue/ujOlO4QZqI5ZdrixsofrHezURqEWfXzR9+fGSZv0o4/yvIlp3PIUR0fJpQxuVvO0/68J68o05UFsD43dS8nw+d5ssy13SnKHG3Qb0eZMtsp5krxn9hVD4vVqzC0iu61XcxZOzLo9wvLVF5IvIaiYAn/r/FPHR4fdsqstw7hpbQfYZdb+H3FnzCpsUtQ3ky+jJUJY8kNHOAXVY/GnJ8rDZk8lvkz/KKFsS3LubTh7bg2VaoN6byRcsWh0t+sQAXnuD6hv2/bMclky7Q04cPMfOt0PrKdjVfU5u8zPQu4zP1ezLbi4c5MDYKT261/o1pMZ2hoIw/5/hRTOKq2FXKt8AiKIPGU8n+MYWPMe/yaEdwp/gE7fr62/40kIb6NsibVzFj33fgw8XbuSoYcZTeqtoTnqgs3ZLHDY+IvvWo5L717y/DjQRdmTg5OhrlJ5/igO2V0TmnqgyI/3prBQb+BIqObl04SQcavSvwrMI3/BiYiI5EqtHCv+XOmel4+qsVPNEFmp1jMp8Yz+NIwCZ9gPfTz/vIOpoaWMiG0ggy1Lmqr685yvASZeESYIzErfvq6t9LXvRUFgXJLITsSBrI94TTchkTWO0ez3jmalEANQ5pWc1rTWqzKdwuxttfsikCTGarm1pr/sN46lPeTL6TamMkTGXcwoXkp57o+jrtL07HAjpf/532QP1p+zWrDCH5vuYf7fX9hpBx/TsKx5FgJMjo6pwLfxxKmY92BaQVDARjOlkOCTHeyzDIWgIn+FR2ODQsyKrA4cSoAE1qWdSjIHDDmsso+GoCLGt6LKcj4BDMvpF2PX7SQ793LxMrPqcYadXyYjYnD+SL9PEKiEZPi4xzXp4xrWX5MSnvDVPkcZFqaOM/7OVN8y3jTfhFLrBOZZ5vJBtMgftb0FAXygYjHhh0zyaqLP/n+zM+tf2a9YTBPm67j1sDzUa+Z4SnhUvtc3mQ2fxVu5k31ZzHLwyeyhj7qXnYKxbwcHMsdpvj+Vh2Cn7MNm3k/NJz3qgSGFMZ1WFyEHTNTkr3s8JhY0mA9IaKMjo7O8UXseIjOD5mTeYHolgVu2ZbOPp+RbIOXF7LXkn4SCDK75HQu8tzCk4EpyEica9jIPNu/mNbNgkwQAwsMk7nD+hdutz3C58Yz8AlWcpWD/Mj/Gi+5b+Ex791cGPy02wSZal/iMRdkKv22Q/+OFhGVfN9+ZtZ+ym37/8rl5c8xsGkdRiVAvSmdL9Nm8e+i3/JpxsVUmnOi3ktnEYBh3vXcXfEQ41q+AWBZ4kT+lvUb9pp6tBvfHZ9pvL9fMwH+4PsrY0OrCQhm/mC5m3XSaUd9fR0dHZ3jzWpB++4ao3a/sFwjprLL2AtBVRjr7zgTJkyJqZBScyEGNciEltglTyrwcdK5qILIMPdaegT2Rx1b6bfyivNyqo2ZJIRcXFDxOlIH5UYhJD7LuJDPMy8mJBop9OxmTunj9K5bS63fTJW/Y0HnaAgLVU61iZtbXuC3jY+SItdTacjivuR7+No8LuqxYddSsVLC73z/BOA907ksk0bHvOYV7tdJUl3sEwp4nzNijhWA69X3AHjRPwq/Gv9e9SUGrYT6k9BpyJVfx31cvExO0jaLvnFZkE9ATcPJvP7X0fk+ojtldKJyMn8hBxX4xY40trjNJIsBns9e2+2hvtA5QUZV4bXgKB70n40fI8mCmwfNH3G2cSsu19EtGNsKMm6sfGo8g/eN51AnpgJgVINMDC1ndnA+pylb24k/3SXIREIFfIIFt2jHI9oIiCb8gpmgYEQWJNTWuxFQkVQZoxrEpAYwK35sige74sai+qjqBhEmFiIqRd49FHn34K/5iG2JQ1jvGE2VJYfNjuFsdgwn37uPMQ1fU+zZcdhnGBZmOuucsao+Lmt4m6Ge9byRcgX1hlSeyLidGc0LOcs195juUsbCRIjf+x7mQcuvWG4YzX2Wu0lT72c4W0/I/ejo6Jw8nCq5MkEk1jEAgJEdlKl0hVXmEQD0C+4iWYm/9fHShIkADPOsI1GJHZi/w9KXXZY+SGqI2a5PI44JCyebE4exNXEogipzfuWb2JTY85FXtPJ+9lWUWYsRVIWJ9QsZ17AE4QgnTlthJtPc9Zy7aISFmUxLE4ODW/hzwwP8J/HHbDCfxlOOOVS4s7jE80FEh1DYMTNeXs0lgQ95x3Q+D1vuoKfnLrLUmojXS8DDNYE3ecJ8M08JVzJLXRwzv28my3hM/RFVQjofhQZzqXFtXO9rjLSPbKGRCjWJRXJfzq76klDmtLiO7QhD9Q4Gp/clQVJwhSS2uU0MSjj+Lls9X0ZH5/ihizI6ETmZBRlVhT/tS2Gpy4pVkPlf9jqKu7ntNXROkGlRTdzju4BPQtqu3WRpF3+zvEeG2NJtgkwzdt43ncMHxtm0CFpOSopSz7nBucwKfUGyGnnReLSCTLUvEa9gocqUSbUhgxpjOvVSCvWGFFySkybJgSwc3VeJpIawh5pJCDXhDDXiDDaQHKwjJVhLWqAai9K9gptZDTC0aTVDmlZz0JzP2qSxbE84jTJrD8qsPUj3VzK+/kv6urcctoCt9Nu6VNLUx7+L31T+jfeTL2SVfQwLHKezy9yb6+peOtS++3iF/oYxEuJe3yPcb/kd3xqGcyf38T/1XgYQPYRRp/vRF7w6bfk+ljAdDU7HoKi5MtvohVew4lSb6E1Jt197hXkUAGP9qzscGxYemsUENti0fK2JzUtjHqPCoXDfiS1LD80Fh523VTBxGZJYkH6ONrZ+EXm+2O+3WUrkzdwbqTNlYFJ8nF/5OsWe3R2/j9brHStxJtPSRKLq5ldNj/Ou7Tw+sJ/Lh/bZ1Eop3NL8fMSNirBjZg6vsFXqy1apH3+z3Mkj3vuilnrNDn7BB8bZHBBzeZGL+Kn6atT7MiJzhfopjwnX84xvJJcY1sYV3CsKKucaNvC/4BQ+DA7lbMOW+D6IOLHU7GC0I41FDTaWNVpOiCijo6Nz/NBFGZ1TjhcrEnmnOgERlX9mbuzWgLUwnRFkdsvp/MR3JXuVdAzI/MY8nxuNyxEFtVsEGS8W3jOew9um8/EIWreEfOUAlwU+YFroK0wx2lZ2RZDxCFZ2G3qwx9iD7UIvypNzaTB0fB6T4seqeDGrfsyqH6MSREJGVLVFliKIyEgERSMeLPhFM37RSlA0IQsGmozJNBmTOUj74uzEYCMZgUqyfOVk+w+Q4ys7LAemqwhArr+M3KoyptbO49uk8ax3jqLGnMWH2VeS6q9iUv1C+ri3HHLOdFWYsah+rqx/g/7ebbyVchkl5iIeyfoVV9a9zmm+2GGWxwoTIf7g+xv3Wv+PjdIgfsr9PKf+jh5HEUR9MnIyh/zq6HzfOVa5MuvpD8Awth51cP2R1Iop7DX2QFAVRvnjc06A1gZbFgwU+EvID0bOSwmzxTKQA6Z8zIqPGU0L270eFkhU4POMCwmIFnK9+xnbsCTmeZsMTt7IuZEGUxqJwUYurXiR9EB13O+h7bWhewWasDAjonKp50My5BqeTbyOZZZxhDBwW/MzUYN8671Ofif8k1tsj7JJGsj7xtlcHPwk4lgDMnP8r/CA9be8xrlcxUckE33T4yLm8V/1SnYJRSxuVpjmiC/d4fxWUWax3Idm1UxiN7plAMY5fSxqsLGqycwt3XbWzqG7ZXR0jg+njChTX1/PHXfcwccff4woilx88cU89thjJCQkRD3mf//7H6+99hpr166lubmZhoYGkpKSjt9Nn6KczLt0yxotPFySBMBvU3cyzV7b7dfojCCzMNSHX3gvpQUL2YKLx61vMkIqAzhqQabSY+Jzw0xeMl1Bo5gEQJFcwjWBt5gor4i5CO2MGOMRrGw19mWrsR/bTH0pk3IP69oUxhlqJCNUTXqohrRQLcmhBpLkRhxyE4lyc9S2z4e9pwglSkHBgEdKoEVKpNngoMmYRKMhhXpTGvXGNJqNSYf+7bH3O3Rcqr+KAu8+Crx7KfLuOWo3TaLcxLS6uYxrWMy3zvF8mzSeOnMmH2RfRZavnKl1n1Po3XfofXS1S9NQ7wYKKkt5MfVHlJoLeS59DjObvuBs1+dHdf9dxUyAB7wPcY/9frYJvbmNB3hR/Q0ZdNzNSUdH5/vJqVDCtF7QRJmh6rZuP/e35mEA9AnuxqnGt/GjILAiQQsGHu/+JuZYFZjnPBPQXDIJivuw19uKIhsdIymx9cKgBJhVHTsIuEVK4PWcOTSaUnEG67mi/DmSQu0dOPESEEysJxeXIRmDxUhAMCGoKiY1gENuIi1US3qoplOluGFhBmCK/xvsqofHHT9hpWUUiiByR9N/o55P8oS4RXqBf1pu5TnT1YwJrSFPrYg4doK8kt7yHnZJPXmRi/m5+kLUe3Lg5mwW8z5n8qYwi+FNj+B0DOrwvfQTK+kpVLNHzWBBqD8XGtdj6EZhZlxoOzCedc1mAgqYTlASqC7M6Ogce04ZUebqq6+moqKCL774gmAwyA033MDNN9/Ma6+9FvUYj8fDWWedxVlnncXdd999HO/21OVkFmTKfRK/2pWKisCliQe43lna7deIV5BRVXgmOIG/+M9ARWS0tI8nLG+SJmoLq6MVZOb7h/If6xz2S5prJEep4EeB15kSWtbhjmA8gky1mMa35mGsNQ1hp7FXu/Kj1FAthf4S8gNl5AUPkBM4iE3t+m5ZrLBcoxrSSpZCjeBv/7pfNFNjyqLSnEOlOZeDlnwaTGnUmTOpM2eyLmksgqqQ4yujp2c7vVu2kRqs6XKoskXxMbFhEaNcy1iVNJFvkyZQacnljdwf06tlG9PqPiclWHdUwkyK3MAd1f/i46Rz+SpxCgscp3PAmMc19a/Qw1TVxTvvOna8/Fu9nxv4KyVCHndwH8+qd8esw9fR0dE5UajAhlanzBCOgShj0kSZUYF1cR+zx9yTOkMaFsXLUM/6mGO3WgZQbsrDrPiY0ny486WtIOMRbXyZehYAk+oXkBKsi3pOv2jm7ZzrDwkyV5U/gyMUfxYOaMLSAUshuxL6U2LtSa0pM+ImTVuMSoD8QBl9fTs4zbuJrFDHc1hbYWZkYD13Nf2bRx23sdo8gucTrmZOS/TGCCOb1zDcsJ61hqE8Zr6Fv/nujzhWAH4UeJ3/s/4fbzCb63ifFKJ/Hpern/G+cCaLGE8dSdC0uUNhRhBglmET/wrO4LPQaVxoXA/QbcJMb5ObVMlPnWxmQ7OZUc4IiyQdHZ3vBaeEKLNt2zbmzp3L6tWrGTlyJAD/+te/mDVrFo888gg5Oe27pgD8/Oc/B2Dx4sXH6U5PbU5mQSagwF0703CFJAaZXdyXtiOumt9jQUgVud8/m9eCWgeAq4yr+IP5U4yCtrNzNIJMNSk8JM9hsXUSAIlqM9cE3uTc4Lyolt62xBJkasRUlptHs9wyilJDwWGvZYUqGRTcRq67hGL/XhxK92SbdEcHJbPiJ89XclgNvUe0ccBaRKm1B/utPakzZ1JuLaTcWshXqWeSEqihX8sm+jdvJC0YOQwwnutOql/IiMblLEuZzjrnaHYn9GefvTejG5YytmHxUQkzBmQubPyAwkAJbyRfwXZrfx7L+Bm/a/4nWXLnrObdQTLNPKE+wI94mJ1CMb/lNzym/imuNrNO55DjcIffP/SdR51I6LkyHVNOJvVCEgY1SP8IOVhpthC1nq4tcd2ClR3G3gCM8Mcvyqy2axk0wzzrOmyDvcgxHYDxLd8c5pI5shvS4rQz8UtWMvwHGdm4POr5ZETez7qKanM29lAzl5c/3ylBxiPaWO8czQbHSJqMyYe9Zg81kxSsxy43Y1SCqIKAYDDgkpzUGNLxixb2Wnqy19KTz5NmkR8oZVzLcka418R00LYNAB4a2MTtTf/jMcetfGmdQqrSwIWeyKVJAnCt6w02p/RnvWEwXxomMj0UOb9ntLyWvvIudki9eZXzuEN9Oer99GUfg9QdbBb68qk6lev4AFccwszZhs38KziDr+VeuFUTdkHLfukOYUYQYLSlgc/dWaxuOrGijO6W0dE5tpwSoszy5ctJSko6JMgAzJw5E1EUWblyJRdeeGG3Xcvv9+P3f/el19TU/XklOp3n7yVJbHKbSRIDPJG5EbPY/V1r4nHJ+FUDP/NdyvzQAAQU7jXP5Qbj8kMCUVcFGRV4jzP5h3A9HqMdUZU5JziP6wJv4CB294YwkQQZPyZWmUewxDKRbabvcjVEVaZ/cCcj/OsYGthEplLTra2uu0OMiYVN8dDHvZU+bq1bUJPByR5bX3bZ+1NqK6belM43KdP5JmU6Wb5yTmtew4DmDV0qcbIpHk6v/YRhrpUsSpvFPnsflqdMZXPiUM6o+Qg8O7oszAAM96wjM1jFs2lzqDFmcF/Svfy86UkGBI9/6UAeVTyu/pEf8xDfCCP4O3P4rfr0cbl2KGPyMTqvniejo3OiOZpcmUhhvxvRSln7sxczsQWQzrLRNAhFkMgJVZChxFci7RdMbLQOBmCUO3Yw8D5TEfvMxUhq6DCXzJGCzEFzHpsc2rr3jJqPEGMI5IvSZlFi64VR8XNJxUskh+IrP/WJFlYkT2GtcwxB0QyAWfbSy72dnp7t5HlLSZSjr4PTzT5qDOnsMfdki3UgOy19KDMVUJZSwDzHmcxsXsDYlhUxy5vCrplRgXVc3/Iqzydeyzv2C8gJVTAmsCbiMRlKLed7PuNt+4X813QDY0JrsEdwdgrAVYF3+IP1bt5gFtfzLolEn68vUBewWejLB8LpXKt+EJfjtq9YRaFQR4mayhK5D7MM3ZsRN8YaFmUswIl9JtGFGR2dY8cpIcpUVlaSkZFx2M8MBgMpKSlUVlZ267UeeughHnjggW4956nAybwrt6TBwsuV2o7KXzO2nLDW127VxM3eq1kuF2MiyKOWdzjb+F0L4a4KMhWkcb9wJ6uEoQD0lXdyp/9/9Fb2xn2OIwWZSimDLyzT+MoyHo+ohQMLqkL/4A7G+Vcxyr+WRPW73bnuEmSOtRgTDUfIxbCmVQxrWoVfMLPb3o/tiaex19abSksulZZcvkw9m34tmxjmWkmOP3YAYyTSgjVcWvEiu+39WZg2C5cxhXdzrqNf80ZOr/mYYmPX841ygwf5RdWjPJs2hxJzEX91/pxbm59lrP/bLp+zqwxkNw+q/+BXwt28IZxLH3U/F/LFcb8PHR2dE8vJnCuzUdBEmcFs7/ZzrzdpXRSHBeKf0zdZTyMgmkkPVlMYiN0Z6atETYAe4V4T1ZWqAl+mnQ3AoKa15PrKop5vc+JQ1iaNA+CcqrfJ8h/s8H5VtBbbi1PPwmPQshmzfOWMbFxGX/cWDGrHGXEANX4L+JsZH1rOePdyWkQ7q+yj+TphEi5DEu8mX8I39vFc3PAuxYF9Uc8TFmZm+pZQIWUx13Y6/3XcSE5DBfly5Pcz2zOPb6xjKBdzeMN0EXMCkTssjZW/pVAupUQq4JXA2dxqfDfqfZzJVzyizmGfkM8mtS+D2dGhW0YQ4EzDFv4XnMwXof6HiTLd4ZYZbdUygTY0GwkqYDxBuTI6OjrHlhP6X/t3v/sdgiDE/Ld9e/dPuLG4++67cblch/6VlUWfCL8vnMyCTG1A5N7dqQBc7yw5YcG+TaqZH3l+xHK5mAR8vGh96TBBpqt8xhQuE/7FKmEoZtXPLf7n+Kf3ni4LMjsMvXjUcRu/Sn6QubbT8Yh20uUaLnG/z2P1v+Ve19+Z7vv6kCBT7UvsNkHmgD+RZslBjSmDA5YC9luLNfeKrR+7bP3YbevLPmsvSi1FVJpzaDCm4BMt3dwzA8yqn4EtG7i44hV+uu+vzKj5hHR/BSHRyGbHcF7Ov5WXc29mu30gSieTZwSgt3sbc0ofZ3TDVwiqzPbEwTxb8DM2WTsOBYxFotLCbTVPMsSznpBg5InEm5lrndGpcxxt+/MwM1jObcorADwk/ITN9O6W8+ro6MSHvhsdm/B30mlq94pGCgIbTdp3+dDApriOqfI5WGsbDsBwz9qYs0qDlMQmqyb6TG75bu1xpEtmt60fB6xFGJQgk+uii+J1xjTmp58PwIS6hfRxd5yv45bsvJt9LZ9lXoLHkEBqoJqLD77EdQeeZGDLhrgFmbaE7z9BcTO9+Uvurfh/XNTwLna5hQpTDk9k3sFHznMJIUU/R2s501XutxkU2IpfMPO44yf4MEUcbyTEZc3vAfCe8RyqhdSI40RULg5+DMAHxllUeSKfDyABL9NZAcBnwtRDP4/Wlj3MDIP2uS8O9SWkHv5odbSdx4qNbpxiEJ8qsftA5FDj48nJ/Mygo3Mqc0KdMr/85S+5/vrrY44pLi4mKyuL6urDMxZCoRD19fVkZWV16z2ZzWbMZnO3nlOna6gqPLA3hfqQRF9TM79M2d3t14hHkGlRTdzguY51SgFOPLxge4kh0uEtgzvrkvFi5iHhJ3wsaA/d/eUd/Mb3OLlRughEo8abggpsNfbjfdu5h5UoDfVv5HTfIgYHtkQMB+6sGKMCDVIyFcZsagzpVBszaJCSqZFSaZES8UvWDs8RCVGVsYeaSQy5cIRcJAfrSA7WkRaoJjVQ3WFtfixsioeRruWMcC3noDmf9c7RbE0czEFrIR9aC0kJ1DCm4WsGNq/rVPcIoxpkWt08+rds4tOMi6k1Z/Fc2hzGtizngsYPMKuBLt2vSQ1yXd1LzBXq+cI6nZcTrsQrWLjA82mXg4u7yhzeZqvai8XCWH7N73hN/XnMlqI6nUN/6NbR6RoBDOygBwCD2NWt5y4xFNAkOrAoPvoE41tztIh2dlr6AFqeTCyWJ4xDESR6+naTE4w83ysILEk9A4CRrm+ilg+FkPgo6wqCoolCz27GN3T88H/AUsgHWVfiNiQiKUEm1i9kVOM3SHFk1nVEWJjJNHsxIDOxZRnDPOv4xHkOKxPGstgxjV2W3txQ+zwpcuSOUGHHzE+b/sc9yX/goCGHlxOu4KaWlyKOHxFYT9/gTnYY+/CC6Up+438i4rjpoa95Vr2GajGdZdIYJnuWk2aLLD7NVr/kM2Eq85jEL3n2UC5OLMfMcLGUZNw0YGetUsBoaf9hrx+NY0YUYKilkSWedNb6nK3x1icWvYxJR6f7OaGiTHp6Ounp6R2OGzduHI2NjaxZs4YRI0YAsGjRIhRFYcyYMcf6Nr/XnMyK99w6GwsbbBhQeDhjc7fnyMQjyHhUI3O81x4SZF61Pc8A6fCSuc4KMvvI5dfC79gjFCKqMlcH3uaq4DudEgVAE2R2G3rwhv1itpk0K7ekhpjkW84s73xy5egCTzyCTItoZ6+5mP2mIspM+Rww5eETYwsvgipjUXyYFR8GJYhBlRFbF3sqIrIgEhKMBEQTftFCUDSjCNKhltftTMqqQkqwjix/Odm+A+T5SsjwV8asrY94X0Cuv4zc6jKm1M1jrXMs65xjqDel83nmRXyTMpUJ9YsY2LyhU+fO8h/kR2VPsjR1BiuTJrEiYRx7zcVcV/cSucGOLeSREFH5UctrOJQm3rVfwDv2C/ELZi53v3dchRkRlT+pj3I1/6BUyOUefsUT6gOd/js9keh5MjqnMidD4G93ljAdTa5MW3ZRREgwkqQ2kUP3dqvbZBwAwIDgtrjC9QE2W7UMmtzAATJC0YPlZURW2rU168SWyMG0ANsTTqPOnIlF9jCmIfo6ZVnqDKrN2VhlN+dUvdNhZ8ZNicOYm3EBimAgzV/JeVVvkR7o/m5/VX4rmWYt38WueLi84S0GerfwZsrllJvy+Gfmz7mx9jmKopR5hYWZ25qf4c/OX7LYOplhgY2MDKxvN1YArmp5mz8k38tCwxSuDLxHvtp+7jUT4JzgfF41XcrHxrOYLC+n1mOIKMyMZgNpaj21Qgor1CFM4rtcm2jCjCSoTDHs5IPQML4M9W0nyhwtwywulnjSWe9P4kfVm/S5TUfne8gpkSnTv39/zjrrLG666SaeeuopgsEgt99+O1dcccWhzkvl5eXMmDGDl156idGjta44lZWVVFZWsnu3ttuxadMmEhMTKSgoICWle2z+pzInerEXi8agyJ/3ax0AfpK8j37m+MJuu5OgKvJT7xWslotIxMuLthePWpD5ipHcI/wKt2AjRannHt8/GKx0vgxqq78XrydeykqL1u3BoAaZ5vuacz2fk6pE3oEKE02QCQhG9ph7st3Sjx2WvlQZ27vQJDVEZrAKh19zsyQFG3CEGkgMNWGXWzArvk4JByHBgEey0yIl0mxw4DIm02BMpd6YRq0pE48hgXpTOvWmdLYmDgXApPjJ9+6j0LOHnp4dMVuERiJBbmFy/QLGNHzFBucoViVNwmVM4bPMS1iVNImpdXMp9uyM+30YkJlaN58ent18knkp1cZMHsv4GZc2vM0oT9cyYQTgIs8nmNUAryVcxse2WYDA5e53j6swk4CXR9S/cB2PsEIYxgvqRczhnW6/zrEK+dXR0fl+0DbsdwfFAPRlb8zvw650YNrSusExKBB/m+1wwO8QT+z1wBbrQJolB4lyE4O835XDtC1dUhH4JkVzVIxqXBY1nL7SnMPKpIkAnFX9PglybBfjiqRJLEnTWmv3bdnE7Kp3MR6FC7Uj2gozAIN8W8it+gfPps3hoCmXJ9Nv4/q6Fxjgi/w5V/kcDGAHs73z+MR2Ns8nXEP/hp3Y1fYhvb1C+xjuX89a81BeNV3C7/yPRzznrOB8XjdexHrDaZQKuRSo5RGFGQMKM/iGNzmH+cIkJqmRw4aPZLKkiTJfy735LfPavX40bpkhZq2T1sbWEi9D9Y4TLszobhkdne7llBBlAF599VVuv/12ZsyYgSiKXHzxxTz++HdfvMFgkB07duDxfPeF/dRTTx0W2jt5srbwf/755zssm9I5sfy9NIm6oERPYws/SY4eDtdVOnLJqCrc7buAJXIfLAR4zvYyg6XDd186I8iowAtcxL+E61AFkeHqZn7r/TvJavwtKwECGHlWuJpPUs4iKJgQVIXJvm+4yPMRaUrH3RaOFGT8gokt1oFssA5hu6UfAfHw0r2sYAU9/PsoDJSQHygjM1ilBft1EwY1hKO1bIkInR7dkp0qcw6V5lzKLQWUWwrwS1b22Puxx96PRcwmOVBLb/dW+rZsIdt/IG7RwqwGGN24jKGuVaxzjmVF8mRqzZm8k/Mjijy7mFnzCanB+DOMCr17uaH0X3yRfRHbrf15LfVqSsyFXNDwQdw7rkcy2zsfoxrkxcSr+dh2NqKqcJnn/S6dq6v0poTfqU9xv/AznhKuYpS6icGcnOGfpwr6QlZHp+vsELTSpb7En70WDwEM7DT2AmBgML48Q49gZZelNd/GGzuDZoV9LKB1Z4rmONxhH0CdKQOz7GWEK3ILbAWRzzMuRBUk+jVv7DBHZmnydJalaqXSYxuWMLnuC4RuT3NrT9tyJoBkuZE7qv/Fy6nXstU6kOfTbuC6upc4zRs5r6XK5+BiPmSNaSgVhmxetV/GzS0vRBx7kecj1pqHssgwmasD70R0y2SodYyR17DcMJpPjWdwa+D5qPd+hrqUN4VzWMxoAhgwtWntHc0tM1HSNoC3KjnUKAmki+03E7sqzJxm1krYykI26mUjKVLwpBBmdHR0uo9TRpRJSUnhtddei/p6UVERqnr4JHP//fdz//33H+M7OzU5mV0yG5pNvFutdQP4U/o2TEL3Lh7iKVv6Z2A674WGISHzhPVNRkiHBz53RpAJIfIX4RbeFbROCpeqn3GD+/lOP6ivkwbxqPE2Kg2ag6V/YDvXtbxBgRxfJ6GwIKMgsMvcm5X2MWy2DiIofhd6lxRqoJ9vO/182+nl341d+U7krPTbqKH7BJl4sMtuij27KPZouQEVPhMNlkwq7D0oT+xFla2IBlMaq0yTWZU8mYRAA4Nb1jGweX3cDhqTGmRM49cMaVrNN8lTWZs0jv223jxXcAejGpcxof7LuHcUbYqHm2qfZr7jDOY7zmBZwkSqDJlcX/fCYZ9lZzjD9yUqAi8lXsWH9tlYVB/neT+PODbdGl8b1HbHRamtD3MeC1muDmOeMJn/4y7eVO/E2qqiOZ1DunRNHR2djvm+lTB1Bztb82T6qt27YbNT7EVAMONQmsiN0vHnSDaYBiELBjKCVWSGqqOOaxIT2WHRHqDHuFdGHKMCK5NbOzO5lmNWIuxUAGudY6g252CRPcys/STm/a12jj8kyEypncfYxo7XP91NW9eMWQ1wQ+3zvJp6Nettw3gp9Tpurvkfvf2R83safDZubn6BB5LvZol1IpP9y+gXbJ8j1CNUesgt85J4OffKj0Y83+zgfJYbRrPQOJkfB17GSCiiW2Yo20hT66gVUlmlDmYiaw97PZIwkya6GSiWs0XJ5Ru5J+eLkdeJXRFmHFKIYmMLe4MJbPQ5mXoMml50Bd0to6PTfeiN1X6AnOgFXiwUFR5qLVu6KLGckdbGbj1/PILMB8HB/CugTZgPmj9iumFnl6/nw8Qvhbt5VzgbQVX4jfJfbnI/0ylBxoOFf5p/wm+tf6TSkEWS3MgdTU9xr+uRTgkyLaKdBYkzeDD7/3gq41bW2YcTFE2kBWs43TWfuyr/zn0Vf+TyhrcY4t3YTpA53lT6jO3+Caik+CoZWLecM/a/zBXb/8qU0rcoatyEQQ7QYkrmm5TpPF14Fy9m/ZjlpqEc9MUX3G1RfEyvm8ucksfo6d6OIhhYmTyFZwvuZL+1OO77rvZbOatpHnNqn8Ws+Nht6c0/M35OtaHj/KxonOlbxFUtbwHwZsLFLLIc33IfAbhXfZIstYYyIZtHhRuO6/W7gr6DqKNz8nG07YFVYDcFAPQiduvpzrJBGghAv2D85atrTZooPdC7JfY4+3BUQaTIv4/00HcP1G1Llw5Yiqi05GFQgoxojOyS8Yg2lqa0iix187HL7qjX3JowmEXpswGYXHdiBJkwbd+nhMLVda8yxLMeWTDwXNqNHDDmRj3W2VLDNO8SAF6yXxm1a+K5Hm2zYqllLDt9RRHHjJTXk6LU4xKcrJRGHPr5kWVuIipTWQXAYmFsxHNF6sg0Qdqj3YPcK+r76SqDWt0ym/yOQz87GcTSk/mZQkfnVEIXZXROKj6rtbGxxYxdCHHXMei21BGb5Wx+57sAgFtMX3G5aW27MfG6ZDxYuFO4j6+EMZhVPw+rf2Wmp32dcSy2iX241fYPPjNqnRhmer/k4YbfM9b/bdyLxi2hHryVfCkP5PyBT5POocGQglXxMLH5a35R+Q/uqfwzs5o+Jz8YufTneAkyRwow8WBUAhQ1bWXKgXe5fPvDTC57h9zmXQiqQmVCD74quJR3+/6cLxKmURKIr9tUcqieSype5uKDL5MYbMRlTOHN3DnMTz+PgBDffQEM9G3lZ9WPkRKqo9aYzuMZd1JiKoj7+COZ7Z3PeZ5PAXgu4ZpDDwPHi0Q83K8+BsDbwixWMrhbzvtDy5PRdxV1dLqG0zGICtJpERIwqCF6EN+mRLxsbBVl+gfie9CVEdlg0tpbdyTKrLFpAsAId/R8ktVJEwAY1LwOWxRn5bKUGfglKxn+gwxuip5ZdtCcx2eZF2vXbPyGsTECg2MhI1JtymRrwmmsSpqglUIlT+Nb5zh22gdQb0xFjXM1cqQwc1Xda/T07cYvWngm/cc0idHn6Gn1C7ApHkqMBSyxTIw4pk9oD72DuwkJRr6wTqPa2z47UkJhZkgTeL4wTj3stSOFmemqJowtZkxUIehIJrSWMH0j90SNYfLuSuD14FZRZnMbUQZODmFGR0fn6Dllypd0uoeTWdH2K/DP/XYAbk7eT4aha22Fo9GRS6ZBtXKr90oCGJkubefXpgXtxsQryLRg5XbhfjYI/bGpHh5X/0SBJ/6JU0HgbeMFPG+6CkWQSJNruaX5eQYE4z/H5lAx8xxnss42DFXQ9Ne8QBmTmr9mqHd9XK2mYwkyKuCR7DQYU3EZkmkxOGgxJOIVbXglG0HRSEgwIQsimtdCRVJlDGoQs+zHrPiwyS0oPi/2UBMJQiMJgQYssrtLYbYGNUgP12Z6uDbTYnSyO3kYO5NH4DE6WJs1k03pk+hbv4ppzV9FXfC2pZdnO/mle1mSeibrkrRuTfutPTm36i2y/eUdHg+QHazk51X/5On0mygzFfBk+m3cUPc8/XxdW0Rd5n4fl+BgiXUSTzhu5veNf6NHqHt3i2Mxho1cqn7G28IsHhDu4G31TpzH7eo6Oj9M9BKm79hDIQA9OHCoVXEs4g37lRHZJmnuur4RymMisddQhFu0Y1PcFEbpJARQbUin3JSHqMoM9a6POKbJ4GS3XQsZHtH4TcQxDcYU1ju1cP8ZtZ9F7bbkEW18kHUlsmCgd8tWZtR+1qk5NSgY2ZEwkB32QZTaittlzR2JLdRCD88u+rdsoodnZ8wuUG1zZoyEuLH2OR7PvJMqYxYvpV7HrTX/iZi3k6C4Od01nw+TL+Bd23mM963ETPs14tmeL9jl7MUi6xQu8HxKtTeFjCPKemeGlvCW6UJWScNpxk4i37mN2pYyjWQzdtVDnZDMNrUnA2m/UXhkGdNIqQQjISrUJA6oyeQL0RsvdLaMaWCrKLPNH98G0/FEL2PS0Tl6dFHmB8SJXtR1xFtViRwMWcmSfFzv7N4HzXiCfX/jvYhyNZlCoY5/WN9FPCLLJl5BxouZO4X72CD0J1Ft4Un1D2R64q99d2Pjr5afscKgLb7G+VZyY8sr2FRvB0dqNIhOXjZfymr7KBRBAqC/dyszmhdS7I/drSLMkWKMCtQb0zhoyafCnEeNOYsaUyZ+KXaL7K5gDnlw+mtI8VWS6q0g3XMAR6C2U4vKhKCLodWLOa3ma/Y5B7ElbTyNlkw2p09ie8oYBtQtZ3rLkqg1+4fuRQ1wRu3H9HFv5dPMi2kwpfFK3s1Mq53LCNfyuO4pUWnhp9X/5vnUG9hh7cczaT/m+toXGOSLvbMaCQG4seUVGqRkNpoG8XfHT/lT4/8jWelcYPTR8HP1BZYxgoNCJv/lCh6gvZtMR0dHJxpH0xp7V6so07ObS5f2iQV4BSs21U2+HJ/ovtGkOWsGBbdFDe4F2GDTXI29fbuiZottcIxEFUTyvXtJC0Zuq700ZQaKIFHs3kGBN/KaQkXg46zLaDYmkRKoYXbVO4dCfTtyoPolK/uyxrLeMfqwud0se0kLVOMMNWBS/KgI+EULDcZU6kwZeAwJbHEMY4tjGInBRkY1LmNY0yoManTRLJwzY1V9XF/7Av/M/Dl7LT351Dmb81wfRzxmQssyvk6cRL0hlfnW6ZzrndtuzIjAepLlBhqkZFaZhzPBv6rdmB5KKUVyCfulQpYZxnBWaFHE6xkJMYb1LGI8SxkRUZSBw4UZqxBksFjOGqWQVXIR+WLsbpidoW9rF9JK2XIo7DfMyRD6qwszOjpHhy7K6JwUeGWBp8s0IeCnKXuxitEXOJ0lnhyZl4JjWCj3w0SIf1vfwCEc3oYyXkEmiIFfCnezThhIgtrCU+rvSffEv3gsF7L5vfVuDoh5GNUg17W8xjTf13E9/Acx8IntTD6yzjq0szXQu5mzXHPJC8a3yITvBJkmg5O9tj7st/Wk1FqMV7K3H6wqOEIukoINJIZc2OVmbLIHi+zBpPoxKiFEQggqqIJAbdCMLBgIShYCkgWvwY7PkIDb6KDFmIzb6MBvsFFtKKTaXnjoMuaQh0x3CdnuPeQ27yExGN9CR1JlejVuoGfjRsoS+7AxYwp11hw2ZkxhR8ooJjcsYKhrNWKMBTVAkXcPc0of5/OMC9mZMIiF6edQZi1idtW7mNT2u3WVfhtZ5u8W32Y1wI9rn+Hl1GvZaBtyqOvEEO/GuN5HWwzI3NH0FH9IuoeDhhweddzG7xsfjmvXuDuw4eNu9T/cIdzPa8J5XCmX00+qOi7XjpcTvTiNhr5g1dE5OvYI2rzQSy3t1vNuE7XvjH7yrphOj7ZsahVlBgdiC+wbrJooE80loyCw0TESgGGu9iICQL0xla0JWsnopPr2Lt4wa5xj2W/rjUEJcEHlazR4FSC2GKMisD1lFOsypxOUtDD/hEADvRrWMySwlUx/RdRuTTIS5dYCdtr7syVxGM3GJBalz+bbpPHMrP2U3jE6Q4WFmcxQNVfWv84LaTew2DGNAb6t9PLvaTfegMyZrnm8nnoVn9jO4nTvl1iOaNtoQGaGbwnv2C9goXUqE/yrIrplpoaW8oJUyGLDhHaiTFu3zER1DYuE8SwTRnKL+mbU99JWmBkl7WsVZXpwsXFd1GOgc26ZBFGmwOChNGRjuz+R8bbD39PJIMzo6Oh0HV2U+YFwsrtk3t/jplY2k2fwclFifF0Puovdcjp/8Z8JwN3muQyQKrt0HgWBPwh3slwYjlX18i/1jwxgDzVx/jfbIvbjPuvdNAuJpCm13Ol6ip6h/fEda+zL8wnXUtHamanQv58LGj+gKIalOhJblXy2J5/GjoRBVJuzD3vNoATI8h8k23eATP9B0gOVpATrYu6GhQnv0HWUqBISjDSZU2mwZFBvyabWmkOdNQe/wUapsz+lzv4AJPmqyW/aTlHTFpJ9VR2KVgIqBc07yG/eQamjP+sypuOypPNF+nmsd4zm9JqPyPfF/qwsio8LKl9njXMcX6adxc6EQTQY07io4hWSQh2LRAZkrqt7idfUq1hrH8FLqddxQ+3zXXLM2FQfv3Q9wX3J97LH2JOXE67gxpZXOn0e6LjzUiQmspbp6jcsEsbzB/85vGF9FqELNWc/tDwZHZ2uopcwaZRKvUCBYrpXlNkuaW2t+yvxlS55BTN7DUUADApsjSrr10kpHDTlIqgKg6K0ft5v60WLwYFVdtOnZWvEMSuSJ4Mg0tO9nSx/5DVSvTGVJala/tyIyi+Qmzqel5qNySzNu5BquzY7J3srGVr9JfnNOw8JMVWta5gsS/uSZwmZAu8+Crz7mFo3n82Jw1iWMo0mYzLvZV9D/+YNnFHzERbF1+5Y+E6YGezdxNiW5axIGMcbKVfw68qHMUfY8BjuWct8xxnUGdNYZJ3MLO8X7cZM9X3Nu7bz2GHsQ4WUSbZc1U6YmRL6hhfMV7NeOq1dCRN8J8yMb3WCbqEXTdhxED1YOcwIqRSCsE6OL0OuM8JMb1MLpSEbuwP2dqLMyYDultHR6Tq6KPMD4EQv5DoioMDTjUUA3Jy0D2M3tsDuyCUTUkXu8l2MHyOTpV1cZ2zfqjJel8yTwtV8LkzFoIZ4RP0LQ9lOTRy17ABLpTE8ZPkFQcFEX3kndzY8RZLa1OFxXsHMK/bLWWzVHm4T5SYuaPyAYZ51cZf7+AQza2wjWGYbS4Ul/9DPBVUhx1dGsWcnBd69ZPvKkTrZxhs6tky3xaAGSfFVkuKrpCeai0QWJOos2VQm9OBgQk+qbQU0WjJotGSwKWMyTl81PRs30KthPdYYnShAK/8pbNpGftMOdqaMYH3GNGrMWbyWdzOnNX3L9NrPoy4ew8ePdC0n23+A97OupsacxUv5t3JRxavkdSDqQGvXifpXAVhrH8ELaddzU83T9PV3vsNXllLNbc1P84jjThZap9I7uIeL+LTT5+kqv1KfYbkwktVyER+GhnCBMf428To6Oj9sulLCpKqwV9G62BV1IuQ3nlyZnaLWLaePvJsMa33EkNi2bDf20Vphy9WkK3VU4Yg4botVc9MU+/dGLV3alDgcgAHNGyLOsU0GJ1sShwEwrn5xxHOowNyMCwmJJrJb9tK3PnoIcJgDCb34Ov9iApIVg+xnRNUX9K1fE9UVE57LI4kzAAY1xNCm1QxsXseylOmsSprEtsQhVJjzuKjyFdIDkVuGh4WZ8xo/YoelL/WGVD5xnsPFje+1GyuhMKN5IW+lXM7H1rOY6f0S0xEu0WTFxZDAJtabh7DEMoEr3Np52gozeWoFRXIp+6UCVhhGcnpr+G9baj0GMm11FKul7BUKWKUOZiaRu2LBd26ZYZImGO5WM2hUrSQJHZeexyvM9DG1sNCTwa5gQuTz6G4ZHZ1TFr37ks4JZ+7eJqpkC5mSj4sc3eeSiads6fngODYruTjx8FfL++12++MVZD5nMs8KlwHwe/UJxrMubkFmgWEKD1p+RVAwMS60it/W/zMuQWaHoRd3J9/PYutkBFVhQvNS7q54iOFxCjLVhnTeTbqI+3Pu552US6mw5COoMj3cOzm76l3u2Pdnrin/H+MbFpPnK+20INOZLkqxkFSZDO8BBtd8zVn7XuDybX9jUtm7FLi2ISohXJYM1madztv97mJx/qVU2Qo6NJ+LKPSrX82Fu/5Fn9bF6ybHSJ4t+Bl7bR23ssz1lXFd2ZNk+crxSnbezLmBnfYBcb0fEZWr6l9jsGcDsmDg+bQbKDPmxXXskQwNbOZCj1Z//3zi1ZQJOV06T1fIppafmrSF7MP+0/GpJ4fGf7IuSPXdQ52j5Yf+N1SlOvBgRlJl8ui+kkkvZkpFrSVzXyW+ro/bjNr3zIAOOjVttWrzQrTuTH7BzC675gAd1By51GWNcyyKIFHg2UuuvyzydRKGUGbtgUEJML78o6jCSpidycNZWHg1AclKuqeM83c/Sb/6bzs8Djqe241qiKl187nmwH9xButpNKXySt5PKLX2iHpMld+KRfVzeb1WIvRNwnjKjZHns5Hub0kKNdAkOZknTok4ZopvGQBLzWMP65zUVmybIK8AYLlhdNT7qvUYGMt6AFYIQ6OOC+Nq2kyK4KGHoOUCrZPzOziic/Q2aRtPuwIRyslbOdFutpN9I1hH52RFF2W+55zsX45S1Q6ed2k14tc5SzF1o0umIw4oSfzTPx2AeyxzyRSbD3s9XkFmBz14QLgDgOvVdziPRXELMvMM03nYfAeKIHFmcAG3NTwdsaNAWxQEPrKezYNJv6ZGSidNruW2mie5pPFdrGp0l0eYcmMOz6dez1+yfsfSxEn4RQupgWqm13zKT/f/lcsqXmRw81qsSnzBwkfSXWJMNMyKj2LXJqaVvcnl2x9mXPlHpHvKUAWJEudA5hbfyKfFN1Hi6N9hq06z7GXcwU84e++zpARqaDE4eDvnBuannUtIiP07dMhNXFX+NL1athESjbyfdSXrHaPieg8SCtfWvUxv3078ooX/pd9MnRR7ZzYaF3o+YWBgG37Bwp8tdxE8TgZIp3MIc0zfkCM0UqE6eSEw7rhcV0dH58RxIkXPEjUVgDyxsVsztPaKRSiCRIrSQKoaX17ZdqNW7tQvRkdEv2Bij7knAAN8kcuSdiX0RxaNpARqyIxQlhQUjIfyZkY2Lot4joBgYnHaWQAMrv6KhGBjzHvfmjqW5bnngSDQu34tZ+57gYRg58PiO5rrc/wH+FHZkxR49hAQzbyd/aOYmx5Vfit9/LsY5l6LKoi8n3RhRInIgMyEFu2z+DpxEpW+9i6lYYGN2BQPDVIKO1p/V2HCwszYkLYhs0YaEnPeHKluAmAtg6KOaYuraTNDJU0829AJUSYe51ixSQv73R1IiNly+0Rzsj976OicjOiijM4J5VtfEjsCiVgFmcsc8YfRdkQ8LpkH/WfjxcQYaR+XGGKHsUWjBSu/Fn6LXzAzQf2W29X4cz0WGSbxD/NtqILIeYHPuKbxzQ4DBj2ChUcdt/FmwsUogsQE33J+WfFIxFC8I6k2pPNi6nU8kvVrNtqGoAoivdzbuLz8WeaUPsYo1zfYOyj/iYUK7AsmUW/J5KC9mP2OAexKGsb2lJFsSxnN9pRR7Ewezh7nYMoS+1Bty6fZmIzcgfgRC5Pip0/DWmbtfZbzdj1J7/o1SEqQOlsuiwsu56NeP2kVZ2KT4Snj+rJ/M6J10bsuaSwv591CgzG2UGJUg1xY+RpDXatAEJmXcQHfOuMTJwzI3Fj7HLmBA7RIiTyT/mN8QuzWo5EQUbm1+Rmcqos9UjGvmC7t9Dm6ilkIcZd5IQD/CUyiUY2/G5eeJ6Oj88OmM+2AAfYrmihTKNZ1633skjThpLfS8TwK4MfEfoO2mdQvRvvs3eZeyIKBlFAd6aHIHZW2J5wGQP+WjRG3ELYmDMYn2XAG6+npiSwArUyeRIvBQUKggQF1K2Le+/aUkazO1gScQTVLGXfwIyS182XJbYklzFgVL5dWvEQvt7Z58V72tZRYi6OOr/JbOcf1CUYlwF5Lz0MhyUcy1r0CgxKk3JTHPlMPqo4QZoyEGOVfA8A35jERz9FH2UOS0ohHsLFJ6h/1ngo9OxBUhX1CPrUkRR3XliGiVl63QemcC7YjYaan0YOISpNipEY2RT/PSdC+XkdHp3OcHH5znWPCya5UG6p38EaTtvMwO6ESp9Q9O1/xCDJfh3oyPzQACZkHzJ90qWxJBR4UfkqZkEOWWs3/U/+BhBKXS2aVNJy/me9EFUTOCc7lMtd7HZYc1YgpPOL8GQcMuRjVID9qeY2Bjes7vJZPMDPXeRZfJ0xCESQEVWGYZx1D65ZGrfHuCLdk56A5nypzDjXmTKoMGbSYkpHFrjlkrMFmHIE6nL6aQ5kyKb7KTi0Wk/3VjD/4McOrFrI1dSzbU0fTaMlkccHlpHkOMKpiLhne6DkEdV6YWfsZPd07+STzUqrNObyQ/1POrXyLXlEWw6CVQp1R8yEmxceq5MksTD8HRRA5L0IA4ZFYVD8/rn2GRzN/QaUxm5dTr2VO7bNxv+dD711xcYfvfzxo/TVvGi9iXGg1/eKw4Xcl5PdIzjds4BlxAtuVLJ7yT+J3lvlHfc6uopcu6XzfORkCf08UpYomkheInQ84jZUrs0csAqCXsjeuc+01FiILBpLlBtKU6ALRDktrRyff9ojzu08ws7/VOdKveVPEc2xwau7LYa6VETdtPKKNb5MmADCycj5SjOD9Awm9WZU9C4DB1UsYWv1l3NlzHRErb8aghrig4nU+yrqcnQkDeT/rKq498BSpwdqI5wp4/ExvXsQ851nMdZ7FYO/Gdu/drngY4VnDyoSxfJMwnuL69i3Cx/lXs8Q6iW/Nw7ih5ZXDzhHOlxklr+ULcTprpKEMlyP/Dhy00EMpZa9UxHr6x8yVCdPTtwTE89is5KKqdCkIPxJmUSHf6KUkaGNPwE6GIbqz+kTny+ihvzo6nUN3ynxPOdkXbYbqHTTIRua2ZAJwhSP+0L6jRVGFQ92WrjWupI90uDARb9nSXCYzT5iMpMr8RX0YJy1xCTK7xGIetPwSRZCYEVzM7f6nO1wY7Tfkc3/SPRww5JIsN/D7xr91KMiowDrrUP6cfQ9LEqeiCBL9vVv5VdUjnF7xXqcEGZ9oYVvCIOamX8B/C+/iiR738F7OtSxLncHOhEG4LBmaIKOqWEItJPmqyHCXkNu8kwLXVgpdWyh0bSGvaQfZLXtJ9R4kIdCApGgLOK8xkSp7ETtTR7Ei91w+63kTr/f/HXN7XM/69CnUWPMOqwuPhUX2MLx6EZfs+CeDq5dgUALU2vL4vOePWZp7QeTW3m3o4d3N9WX/Js+7j4Bo4d3sa1iZNDGm20YAptbNY3y91lrzy7RZLLOPj+t+k2QXc2qexagE2GodyBeO0+M67kgmy8uZFvwKRZD4h/mnx7SMyen8bvdSElR+ZdYEqJeDY6hTbMfsujo6OieeE/WgV6YmA5Av1B9qP9wd7G0VZXrK+w/97MgWym3ZY9CcHr1Cew/NSpmW9jlwuy2a4NLbF9lNs93ST3PSBGpIDbZ30tSYMqiw5COqctS8mVXJEwmIZlK8FRQ0RW8/3WhOZ0n+JZpDtmFttwoybYnmmpGQObfqLXK9JfglK+/kXIdPtEQ9T//aVdhkN9XGTNbahkccM86tiSMbbYPxCNZ2bpn+wR3YFTdNooMdxvZlU9XeFEbIWkOBtVJkR06Ygcp2ANYL0R01belFCZIqU6cmUKlGDoGORkdumR5GzdG8Pxh7LaOjo3NqoTtldE4YHzdnEUSkv6mJ08wdB9vGQzwumY9Cp7FNySYBH3eYF3fpOtWk8JDwEwBuUt9kCDviEmTqhGR+b7kHn2BlWGgDv/T/mzpvcsxjdhh68bDzTryijYJQGb9yPY7sie1waBHtvJ18KRtt2kIjPVjNRY3v0c+3g0p/fA/NftHMdvsgtieeRqm1GEWQvntRVUgL1OD0VJDsqyLJX01ioIGEQCNi1Oag7VEBv2Sl2ZRCkymVRks69ZbsQ22wq+xFVNmL2JA5DXPITUHTdopcW8hy7+uw1Muk+BhW/SV961ezLnM6u5OHsyd5KGWOvoyqmEvPxg1RF6WJchNXlD/HgvRzWO8cw+K0s6k3pnNmzYdR358ATKpfiILIipSpvJt8MVbVy3BPx6VxBcEyLml4h9dTr2Ke40yGurZxWjByBkEsbvM/y1ppCPulQt40Xsg1wbc7fY6uME3ayWniATYpeTwbnMBvzLFdQnrpko5O1/k+uWU604WpXNHmyjwxvtyXeJAR2S9quR89lI476AHsNmqBtT2D7d0ZYZrFBCqN2QD08kd2LW6yaqVLvd3bIs5F4a5MvdzbI5YWe0Ura51jARhSvTjqfBYSjCzOv5SQZCarZR/jyj85JoJMmGiuGYMa4qKKV3gp/1Yajal8lnExF1a+GvFezKqfkY1L+Sr1TL5wnM5wz9p2c35+oIzswEEqTDmssw1jgvsbqnyOQwKZAZnhgQ18bRnPt6bh9I9QalbQUgoW2C0V04iDJCKvRQfK2/nYeBYbiE+UsRCgmDJ2UcRWJYdssXNr3FjdmHoYPSwG9gU7XsvpbhkdnVMH3SnzPeRkX6yFa10/bNEWLBc7DnaLtTMeQSakijzWGu57i2kpyUe0KozXJfOwcBPNQgID1F3cSHwPvkEM/Mnya+rFFArlUu7zPUyD1xnzmG3G3vw16ed4RRv9Azv4fePfOhRkdpp787es37DRNgRRlTnTNZffVP4tLkFGBcot+XyceSlPFN3N3MyL2G/rjSJIpPqrGNm4lEsOvsiV2/7K7F3/YWL5BwysW05uyx4cgfpOCTKgCRkW2Uu6t5yero2MqFrI6SWvcPn2v3HBzicYV/4xha4tmGQvfoOdXSkj+KLHdbzb9xesyZxBszG2oAVgC7UwofwjZu15hhTvQQKSlWV5F7Ko4Cq8hsPbSrbd5ZNQOLPmI06v+QhBVdjoHMkHWVd2GAA8uf4LhjcuRxVEXku5il3mjrs5AYz2rGZcyzeogsh/HHNwCfHvrqW37uo6aea2wDMAvGG6iAohI+5zHA2CALe3dmJ6NTCKZrXz2ThHi166pKNz/DgR/98Oqtp8mSM0dun4tAjlmhVCJgHBjEn1k63G19Fpr0ETZYpD0UWZcMBvduBgxFbYCsKh8qZe7vYOFxWBbYmDARgYxSWz1jmWYKtLJr85eontt1mn47JkYA02M7nsnU7P010lkmvGpni4oPJ1RDXEroQBh0KMIzG8cQUW2UONMeOQgNUWARjlXg3AWvt3bpq2jpkR/vUArDe1Px7AqTaRF9LyDDdJ0TsoDpA1p8x2ignEuZ/dB+3vY7uSFdf4eCkyan9PJXGIMicDJ/sziY7OyYIuyugcV8KCTEnQyia/EwmF2fbK43b9j0KDKVFTSRHc/Mh0eF1wvILM14xkgTABSZW5T/0XRuS4XDJPm65jq9QPu+rmft9f8XijW3cBdht68LDzZ/gFC4MCW/i16zFsavSOSAoC8x2n81T6T2iWHGQGK/lF1aOc1TQPA3JMQUZFYKd9AC/l3coreT9ha+JQQqKR1EA1k+vmcVPJP/hx2ePMqP0ce/0+TIq/w/d7NAiAM1BLn4Y1TC17m8u3PcwZ+16kT/23mEJePEYHm9Mn8V6fO1lUcAVVtoIOz5nuPcDsPc8wvHIBohLigKMPH/W6lfKEnjGPG+5ayQWVryMpQXYlDOCd7OsICtGzcwRgZu2nDPGsRxYMPJd2I9WG9Lje9wWNH5AXOoBLdPLfxBviaE7anqmhZQwNbSQgmHnKfEPUcd2RJ9OWGYYd9BKracbKq4HoLUZ1dHR0OotflahWEwGt+xLQLSVMpaIWxJqvlCMdIVZEKmFqEhKok7TA4R6h0qjn3WvWSpyK/ZFzakpNBXgkO2bZS46vffn2AUsBLQYnZtlLsXtnu9dDSKxzagG2A2uXRXW+VNh7sCNV+z6eUP4B1qMI8+8KkYSZLP9BJtdpbsqFabNwGZIiHmtWAwxzrQTgq8TI7sqh3vVaCK+5mAbpu/OEhZmBwa1IaohKQxaVYuRNiv6tHbQ2SgOjvo8stRqn6iIkGFnp6x11XFt6qZrzarM/9lovGtEcZAWtokxpML5gfT30V0fn1EAXZb5nnCqK9LzWLJmx1gZSDe2D4TpLPC4ZVYX/BSYCMMe4jAQhduvpSAQw8LDwYwCu5kP6sj8uQWalNIIPTOcA8BvfY+SqFTHHH5SyeNh5Z6sgs5Vfup7ATIBqX2Lk+xKMvJR6HZ87Z6EKImNaVnBX1T/IC2o7QNEEGRXYZe/P8/k/5f3sq6m05CEpQU5rWsO1Zf9hTuljjGv4ipSgFmZ4LFtdx0JEIdu9j3EHP+GyHY8wtfRNcpp3gyBQ5ujH3OIbmdvjeirsRR2e57TapZyz538keyvxGewsKLyG9elTYrbP7uPeymUVL2JS/JTYevJu9jUEYzhmBFSurnuVIv8+fKKVZ9Pm4BU6XpiZ1CB3NP0Poxpkg/k0vrRM6vCY9teGn/qfQVRllhvGsE7qvuwFODxPpi2ioHKL6WsAXgqOIahGnl5+SKVLuktG51jxffrbiqcLU4XqREXEQoAUuk9YCIsyBUp8uXbhrktZocqYmyT7zK1umiiiTNglU+TZHdG5sj1Bc8n0dm/FQPvA+x0Jg3AbEkkIuShyRS51lQWJFTnauqNv3WpyW+LrLhUJBQGvIYEGcwaN5jR8ki3uTYNIrbNHNy4jz7ufoGhmQdo5UY8d7lqJqIbYZy7mgDG33etJsuvQZ7zONuyw16p8Dmyqj76tZUsbTJHnwv6BjkUZAegra2VoO6T4RJmeaKLMbgrjGh+JSMJMvlH7uysLWVHi/CWcaGHmVHk20dE5keiizPeIk/1Lr+2ksMCtOQdOt3et+8/h5+1YkAH4Wu7FTiUTO36uNq0+7LV4XTJvcA5lQg5paj03q2/GJcg04uAR8+0AXBj4mHHyt9R4o7dabhIS+JvzZ7SIifQM7uUXrn9jIhhVkHGLNp5Mv40NtqFIaojL69/gioY3Mama2BVNkKk2ZfJ67hzey76GGnM2JtnHuPovuW3/35hV/R45/gOHyRQnSpA5EkmVKWzaxuklr3DBzifoXb8GUZGpshcxv8f1LCi8mgZzbGdKsr+a2XufoU/9tyAIbMicxpcFl8V0wBR493HpwRcwKn5KbL14P+tqZKSo442EuLH2OZJCDVQbM3kt5aq4FrF58kEudb8PwKv2y6gTOy7ROpJC9QDnBucB8F/TDXGHJB8t5xg2kSY0U6k6mRuKvsDtbk7W0iUdne8zx/P/XYWSBECO4DqqcucjS5gOiDmA5pSJhxKDlj9TFMElE84yCQhGKlrzZIoC+yOeZ5dZe7Av8rYXSlRgZ4KWXdKvZUvE48NdmYa6VkctR9qWOpYmcyrWYDPDqxZEeUfRCYhmtqeMYkHh1bzR/7e81e9XfNT7Nj7sfTtv9v8Nb/X7FYvzL2WfYyCyEH0uDNN2DSGgcmb1B4iqzO6E/uyzRi7zTZCb6dv6GSyyRt6kGOLV1m+brZFFl8EB7fgtpsh5MH1CmtiyTyzAQ/TNk3DL9N1ij6idvNrSE+1vpIQcamOEMHeWbIMPEZWAKlEboy22jo7OqYUuyugcd+pCRjb4tdrw6fb2HQeOFS8FNKvvpca1OATfoZ/HK8i0YOU54RIAfqq+gp3ou2Rt+Y/5Rlyikx7yfuYEXo4pyISQeNxxKzVSOpmhKn7tehwL/qiCjEt08ETG7ZSYi7DJbm6t+Q9j3SsPvR5JkAkKBpaknsEL+T+lzFqMQQkyrn4xt5Y8zOT6Bdgi1L/HI8jIgkSDOYOyxD5sSxnN+oyprMw+m2W55/N13kV8lXcRS3PPZ0X2bNZlTGNr6hhKHP2ps2QRFLu2sHAGahl/8GMu2vUYfetWISoy5Ym9+bjXrazOOjPmeSU1xLiDnzDhwAeISogyR3/m9bged4zuTHm+Ui49+CJGJcA+ex8+y7woosMmy6x9holKCzfUPo+khthsO42vEmK7RDIszQCc7f2C3sHd+EQrLyZcFfOY9ChdQq4NvIFNdbNX6sHXhnGHH9PNpUthzILMVUZN8Hw9GD0rQEdH5+j5PrllOiLcwSZLdB3286MtYSoXNfGkI/dqmFJDq7NGju6sOWDMQxEkHLKLJLmx3esBwUiJWXNPDJfbu1yqzDm0GJwYFT+FEUSbOmMaZdYeCKrC4KY1Ee/BK9nZkK7NNyOqFnSq5DggWliVdSZv9/slK3NmU57Ym6BkAVXFHPJgkrW1j8+QQIlzIF8VXMo7fX7BltRxKB08VrRdS6QFaxjuWgHAwvTZUY8d0qTNKVsTB1MWaJ/DN8i7GYASUyHN4uE5cVU+BwOCWh7MNmNf5AjXSFZcpMm1qILI9hgumF6ylhGzW9RcUB0JM1nUYlW9hAQjB8jC1bQ55vhoHOmWMQoqmQZtDXswFF8JE+huGR2dkx29+9L3hJP9y67tZLDEk4aKwCBzE1mGo8smidclU6Yk8aXcB4BrTCs7GB2ZVzkfl+Cgh1rGOSyKyyWzShrGl8bJiKrML/3/xuWNHd76uv0Stpn6YlF83NX0BIlqS9SxTWIi/874KTXGDJyhRn5S8xRZodhBhVWmbD7Kupx6k+Yk6dOymRm1n+EIuaIeE02QaTEmUWkvospeSK01B5c5DTWO3bKIqCqJgXpSfRVkuEvJ9JSQ7KtGiNMgbQ82MbbiMwbUrWBN5umUOvuzNW0cJY4BjC//kBx3ZAs5QK/G9Tj8dSwqvII6Wy6v5N7CFQefwxlqjDg+31fC+ZWv8272NWxNHIoz2Mjk+ujdhgqCZZzf+CHvJV/Mx0nn0tO/51BZWTREVOY0v8S9yfexxjyMNaYhjAjEJx6GcdDCJYGPeMl8JS+armBiaEW7zITOEq10qS2XGdfwRGAqK+Ri9iqpFIt1h17TS5d0dL5fhDL6dsvDXkddmCpaQ36zhehzVVc4KLSKMkpkUSbDWk91m42UsCiTH4ouypSZNDdNgb80okexxFSILBhwhhpJC9VSzeEP1rtt/QDo4dmFQW0voG92aKG2PT07SJSbcNN+jt6cPoGQZCbVe5Dixo1R77XdvSf2YXnOuXiN2kZQkq+aXg3ryHbvI8lXdagDkiwYqLXmUJ7Qi93Jw/AaE/k2+0z2JA1h4oH3SfFHX4tU+oyHOjNNqF/E5sRh1Jky2Jo4mEHN69uNL/DuIzlQS4MpjR0JAzE1ryPT/N2mWJLsIj9QSpmpgK3WAYxxrzrseFtLAzanG49op8SQT3GofZet3sE91EppfKsMZTibIt53L0VbR5SI+YSQMCBT6zFEDJAGbR7vwQG20pu9FNCD+NxY8ZBj8FERslIesjCU+P9P6N2YdHROXnSnjM4x58gF21KvFpI3xVZ7lOeNT5ABeCc4HBWRCdLuwx4S43XJuLHymnAuAD9RX6PB0/F/nQAGnjTPAeCC4Kf0UWLXc681DWau7XQAbm1+hjxZWyRGcsl4BCtPpf+EGmMGyaF6bq9+op0g09YlowLrHKN5Oe8W6k3pJISauKjiFS6sfL1Tgky9JYs1mTP5oNdtvNv35yzLu4DdycNotGSiChJG2UeK9yAFrq30qVvNadVfMbxyASMr5jGyYh7DKxcwuHoJfetWUejaQprnAJaQGwSBZnMq+52DWJUzi4973crbfe9iWe55HEjo3eHuWxhHoJ5pZW8yY/8rJAQacJucfNHjOlZlnYkcIwMmw1vGrL3PkhBooNGUyqu5N9FgiO5o6unZydnVWonR8pSpbG2t/4/GxJalnObZiCwYeDX1aoJx6OH58kFmeTWx59WEy+M65kguDH5CotrMATGPrwzjO318V8gRm5giaTX8bwVHHPPr6aVLOj9kfigPODWtIb8ZQvNRnyv8EO3DRH1reWi20nHnJRmRSknLw8sLHYw67oBJE27ygpGFm/3mIkDLm4kk2uyzaaU8xZ72LZxVYFuC1kloYNP6iJsmPsnGzhTNqTi0alFcmxsqAuszprKo8Cq8xkQc/lpm7n+Z83Y/ycC65aT4Kg9rSS2pITI9pQyvXsQlOx5lXPlHmEMeGqxZfN5zDiWO2K2jw/dtUXyMadCyyJYnR852E4CBrWLNtihzbT+v5oYJZ/W0RUSl0K8JMTuNkcukerQKNfsMhYeJcG3JVGsOOV/KW8W8jihqFWJK0MrkusstE97QrAod/06HOjo6xwbdKfM94GR3ybRFVeEbjybKjLfWdTC6+675XnAooJUuhYlXkAF4lzNpEhIpUg8wg+XUxyESfGiczUExhxSlgWsDb3aYI/N04vUAnOX5gpGB9UBkQSaExHNpN1JhyiFRbuK26idJkw//LNsKMjIi8zLOZ1Nr68me7u3MrnoHqxK7/Cq8aAoJRvYkDWFHykgarN+1dhRUhTTPATI9JWR4ykjxVWILNnUpvcQr2WmwZFJry6XKVki1rQCvMZHdycPZnTwcc8hNceNG+tWvxhGIXK7TlryW3WTuepI1WaezI3U029LGUWUvZFrpmyQEI4tQjkA9Z+19jkXF11FvSueN3Bu5uvzpqKLVac3rqDNlsDJ5Mp9nXER6oIr0QOSFvQBc1vAW+8w9qDRmM995BrNdn3X4Ps73fMLX5nFUSRnMt05ntnd+h8e0xY6XiwIf86L5Kl4zXsLU0FIyjlHpUlsuN67hS7kv7waH8SvTAgzC8WnBerLwQ3lQ1tHpTmK5ZaqV6KKM0zGoSw+7FaI2nyWoLTiI7ko9dA9SOiHBiEn1k6ZEXr9kWpooN2mBtLmByM6IfSat/CVS3oxPtFBh0Zw2PSKIMhXmPFzGFIyKn56eHUS6i61p4wiJJlI95eS27O7wfSkILMu7gL1JmhOyX91KRlbOR1LbBwxHQkShT8Na8pt28HX+RVQk9GRxweWMqvicAXXRnclhx8ww10pWJE+m3pTBDvtA+rnb/y77tWxiaepM9tt64hFtVPk5zC3Tz7edL5xnsMPcFwXhMAEJoId/H9usA9hh7M1Z3oXtzt9WlAGo9qa0674lAIVKGdulPuyXCihsdUvFcssUqOUgQKmQQ/iWXE2bu1R2Z6j68lAodqaklS9VhTrf2Ul3y+jonJzoThmdY8qRLpk9QTv1igmzIDPE0nUbcmdcMuuVPMrVZOz4OcPQ+bA1GZE3hNkAXKu+T30cLhk3Nt4wXQTADYFX8Xhj1/2+nHAFTaKDvNABrnC/C0QWZFTgneRL2GPphVnx8ZOap2IKMn7BzDs517HJMRJBVZhW+xkXV7wclyDjFy2sy5jGO31/wYrcc2iwZiEqIQpdW5lc9g6Xb/sbs/Y9x4iqheQ378TeRUEGwCq7yXHvZXDN15xe8gpXbP8rp+97iX51K7EEW/Ab7GxLG8f7fe5kQeHVVNo67mZgVIOMrfiMGftfxRxyU2/N4dOeN8c81h5q5sryZ0gJ1NBkTObNnBvwiNFbiU+um08P905CopEPsq4gIETPsElQ3FzW8BYAixKnc9B4+E5bOE+mLVbVz2Wtob8f2mbjFg7/O4qWJ9OWC4KfYVM9lEgFfCsN63B8NOIpXQozzbCDVKGFOjWBZbLWGvZYlC7pLhkdnRPP8fh/GHbKpAkdiyfxUiForpeOXDLhh/MKSRNxsuSqdg/9YQIYqDZorZdzI5SpqmjlSwBF/v3tXi+z9kAVRFICNRE3BHYmaAHqvdzbMartO1eGBCM7Wl0yg2u+7nBOVoFV2bPYmzQEQZWZcOADxlR8Hrcg0xar7Gbm/lfpX7scgNXZZ7MnKfa8UekzYlb9jHC1HpM8IeK41GAtGf6DqILEbrtW3lXl/24+LAiUYlG8eCUb5RG6NPUIaHkwuwzFEc8fDm6uk1JpEaLnyhUp2rj9Yv5hP4+WL1OA5ngubXXKdBeZrU6ZSt0po6PzvUEXZU5xTiWXDMAaXxIAQ80uTEK8DRWPjs+C2o7EDMN2LIK2m9EZl8zXjKRCyCRJbWIWS+I65j3jOTQLiRQoZcwMLY45dqNxAN9YxiKoCjc3v4CR6E6GlfYxrEzQxv6o7kVygtHDCX2ihTdyb2S/rTdGxc/FFa8wunFZh4u0gz4zW1LH8V6fn7ExYwp+g42EQAOjKuZy2Y6/M7XsLXq4NmNWfB2cqetIqkyOey9jKj7n0h3/YMb+V8lr2gGqSnlib+YV38C8ouuos3RsIc5r2cU5e/5HircCn8HOF0XXsc8RvTNQgtzC5QefJzHYSL0pnfeyryYUpcuSiMo5VW+TEGqi3pTBwrTZMe/lNO9mTvNsRBEk3km+JK7EnEn+b8gLleMW7XxqPTOOIw7HjoezglrnjfeM0VuPdidGQWGWQdvt/DgYu7RLR0fn6Pgh7DrXq9qDcpoYWZTprPMgzRaiWtSy1TLV+LpAVkqa2JIdI7utQspCESSsigen3F5UqZdS8Eo2JDVEduv83dbxUWYpAiDfuy/i+Xe1ChK93VpAcDibJcx+50ACkpWEQAN5zR1n/WxOm8CO1FGgqkwqe49ejes7PCYWIgqjKucxoPYbAJblnk+FvUfMYyp9Roa7ViCqMgctBVSbsiKO692ibarttn9XGhUWZiQUevi1z2yPuWe7Y/MCBxBUhQYphQaxfViwTfWSLmuNJ8oMmqgTqYypoLVL1wGhvfATiTwqAThIxmE/P9oypoxWUaZG7pooo4f+6uicfOiijM4xI9KX/kafFnR7vFwyqgoLQtoi5kxD+y4H8fChMBOAc1lIs6fjMgwvFj4waQ/n1wTeot6bFHVsCImXE67Q7s+7kJ6h/UBkl0ylIZP3kjT3zWzXp/T3bW8/ptUl4xfMvJXzIyoteVhlN1eVP0NPT8eT8AaxJx/3+gnfZp9JwGAlyVfFlNK3uHDn4wyoW4FZjq/jVHciopDXsosZpa9z4a7H6VO3GlGRqUwo5pOeN7Ms93y8MTomASQEXZy99zmKXJtRRImv8i9hR3L07kCOkIvLDr6AWfZSbi1ifsb5UQUUm+Lh3Mo3QVXY6BxJvTO2i+fCxvcxKX72mYtZZ+3YuSKicon7QwDmW6e3c8vEw/nBzxBUhTWGYZQQXy18Wzrjkgkzu1WUWRDqhzd9SqePP1X5ITwgHw/+/e9/U1RUhMViYcyYMaxatarjg4A33ngDQRC44IILju0N6hxGd7llwuUZR1LXKsqkdqNTplLQHpQzlfi6QFa1ijJZcnQRp6w1CDgrWBlxAyQcApwTPIiB9m6UMmsRoIXbHkm9MZV6UwaiGoqYNwMccsn0qV8T1c0TptJWyLrMGQCMrvicHk2R2293FgEYWfkFxY0bUQWRr/IvwWtIiHlMsztA7xZtjbbeOTrimN5uTZTZb+tFsE1GXFiY6enXcvv2WNqLMmY1QGarmLZWGRDx/OHw5nDbc2gvzOQr2phSMa/d8ZHcMrmtokw1qfiPCGQ+GmEmUzr6TJkTLczo6Ogcji7KnMKcikrzFr8mypxmburS8Z0RZAD2KmmUqKmYCDHJoNVWd8Yl00AiS9EWOZM90TtDtGWucTrNQiK5ykH6N7cXTtrypWUSBw05OJQmLvJ8BEQWZGREXkm9hqBooq93O9Oa299LWJCRkXg/+2oqLAVYZA9XlD9Hlj96KCGAgsiS1DOYW3wjjZYMzCE34w98yLm7n6KoaWuHi7vjhSPQwLiKT7lw1+NaRwlBYHfyMD7s/VP2OyIvtMIY1CCTyt6lb91qEARW5J7D9pRRUcenBWs4v/INBFVhk2ME6xxjoo4t8O1npEvbGXwr+TJ8QvSFUrLcyIxmrab9k6Rzorpw2jIisI680AG8oo0vrNOB+EqXwmSr1YyS1wHwjnB23McdDSOkUlKFFpqwssqb3O3n10uXvr+8+eab3HXXXfzhD39g7dq1DBkyhDPPPJPq6tiOhv379/OrX/2KSZMmHac7PXn4PouBIVXEhTa/JQuebjtvjaDl22WoHTcdyLDWUyVpzpoMJfrf4UFJE72zgpURX4+VNxMUDFSbtePzfO07BO2zae2a870lmCO0uHaZ0qi15SGoCr0a1sV6OwREM0vzLkQVRHo2rKdffXyiZ7wIqIwr/4hkbyU+g51vcs7tcBVRUKvd87aE05AjzIsZgQoSQi6CookDlvabH8X+1u5IpsKI18oPlAHf/Q7avd4a3lwuRd+4yFO0MQfFrIjXOFKYSaYJi+pDFUSqSIt63s7S1imjnhzLs05zKj7D6OgcS3RRRueYEEmBD6oCuwLabkl/89F3UIiHr2QtaX+UtJ8EIdApQQZgARMICQb6q7spVKO3wAyjIPCxUXvovSjwcUwxI4CRD22ao+ZC98fY1egulMWJUyk35WGT3VxV/1q784YFGRWYn34uJbaemBQ/lx98noxA5MVhmGbJwWu5c1iRrLkZetev5cJdT9C7cd1JI8YcSULQxaQD7zFrzzOkeCvwG2wsKbiMr/MuIihGz3URURlT8SmDapYCsDJnNnuSviuvOdIK3sO7m6l1cwFYlHY2Vaboi7XJdV+QHKjFZUjic2ds4WNq82KcoUYaDCl8kzA+Yp7Mkfd9nudzQHPLBLqQ0T47OA+AT5napU5OnUUSVKYbtO+BRZ70Y369k4Hv84Px8eQf//gHN910EzfccAMDBgzgqaeewmaz8dxzz0U9RpZlrr76ah544AGKiyPnRuicGhzplmniuzBTJ9Hnyc6WMLlaO+xFC+09knC5U4YcXcQ5aNByajKCkYWbitYssUh5M1XmHBRBIiHURGKEPJkSq+YAKfJEDu/dm6R1Zcpt3o1Vdke9R4B1mdNxm5JICNQzpuKzLufBxcKghph04D1EJcQBR1/2O2P/frLc+7AGm/FJNva2ClBtEYAij+aGKbUd7oap8lvJDZQjqSFapETqpfalRzmBVkHFmENVq2v7sNdbO14ePEKUaeuWyVRrEFUZn2ChXuh4s0EAstD+XippPw921S2TWaeVJPtUCbfa8cZONE60W0YXZnR0vkMXZU5RTuYvsmhf8iVBG0FEbEKIPEPny2A665IBWBbSJu6wS6azLBC00LmJgWVxjd8oDeSAmItN9TCkZWPMsYstE2mQkkmV65jm01pCRnLJNEpO5jm0LJHzGz/EoUR/gN/gGMVG5ygEVeG8yjc6dMjUGtN5Oe8Wyq1FGGUfU0rfYvzBj46qTElBpN6cSWliP7amjmVdxjRWZZ3JiuxZrM46k7UZ09mWMpoSR38azBlxt7uORLr3ALP2PsPg6iUIqsLepMF8VvxjmkzRF0sCMLxqAf1au0Isy72Ag/boD3GjGpfR070dWTTycealUZ0tRjXEZY3vAPB1wiQqDJHr4gFMapAzmrROSgscM+MSWcb4vyVFrsclOtmc2PnODbPMq0hT62kQklhK/K2qu1K6FGampDnFFrnTu3U3T3fJfH8JBAKsWbOGmTNnHvqZKIrMnDmT5cuXRz3uj3/8IxkZGcyZM+d43OZJyYkWBY/V/8tGVdt0SMDXrZ3camgVZdSORRkZkVpJc9aEs0ciUdkaBtxHbO90AU0QAMgOHJ4Hl2n2UmHWSmKyfQfaiSQKAqVWLZulwLu33XlVYF+r6NHDFXvt0WDOYEerS3R8+ccYlUDM8UdDsr+awTXa2u3brDMICdHnOhGVHq5NAGxNjDzvFHo1UabE2n7OrvcbDwkvpaaCdq/nBL8TZYB2wkxuWJQxtN98CQszRkKHnFXhoOgjOdItk4X291IZxSnTFWHGLgSwClr5W50cfSNKR0fn1EEXZU5BTmZBJhZ7AlpNeE+TG/FYbMscgaIKrJG1iXmMtL/TLplm7KxFC4SdGFoR1zELDFMBmBpailVtby8+dG8IzLWdDsA5nrkYCUUUZAA+dc4mKJro4d/LKM/qdq+HXTI1bYJmJ9fNp6dnZ8x7LTfn82rezTQbk3D6ajhnz38paup87o6CQJWtgDWZM/m0+Me8OuAePu59K18WXsHq7LPYmDGFbWnj2JE6mq1p49iUMZlVObNYXHA5H/W+jVcH3MsnxTexOusMyhN6dlqkkVSZYdVfctbe57EGm2m0ZPBZ8U1U2dovysIIwOiKuRQ3bkAVRJbkX0qTKXLLcgGYVfUutlALdeZMvkmZHvW8/fw7OM2j1dF/khQ7VHeMeyXJoXqaJQdfWSZ2+D4NyJzu1crWPjGe0eH49scrnIW2OJ4nHJ/yjgmGPRhRKA9Z2ReM3sXq+8CJfiD+vlBbW4ssy2RmHv7Ak5mZSWVlZNff0qVLefbZZ3n66afjvo7f76epqemwfzonD23dMk2q5pRJiqN0KV63jArUoon3KWpDh+MbBCeyYEBQFVKUxqjnrG4tccqMkDvjE8w0GrRrZkYIC64ya2JBZoTNlDpTBn7JiknxR9xsaTKl0WxORVRC5DfHnvvXZs5AFUQKXVvJdkcOFO5OBtV+gz3QiMfoOCQGRaPIpa1B9tj6IEdYC+R79wPaZxUUjO1eT/NpwsoBU/vMl3BJWb0hhUCEYzNl7XfSJDrwCNFbTWe1lq9ViRlRx7Qlo7VxeQ2pcY2Pl1Q0N1XDUYoyultGR+fkQBdldLqVWF/ue4Otoowxtq028nk775LZq6ThwoaFAAPE6F2KorGCIYQEAwVKGdlq7JaZoJUjLTWMBWBky9qYY9ebTqNKysCuuJnsi+7CqTBkscamuRrOb/yw3e5ZWJBREPgs42JCopEe7p2MaVwa8/rVpizeyrken2Qj3VPGWfuewxHoeGHalhajk3UZ03i37y+YW3wjm9MnUmvLQxENGGUfqZ5yCl1b6Fu3ikE1SxlcvYRBNUvpW7eKQtdW0jwHMMp+FFGizpbL1rTxLCi6lrf6/ZIV2bNoMMe34AmT4S3jnD3/I81zAL/BxhdF18Z0wAiojC//iHRPGQGDlcX5lx0WHtgWm+LhjBotbHdF8iRqjdHLk8biAQABAABJREFUcc5xfYKoymy1DmSPKfr1JRSmNi8G4FPbGShxGMin+JYiqSF2SH3YK3bcFjxMuk3r6HWWqv0/WsJofHS8kDsalwyAKXMcI63a39Uyb/csSHWXjE5bmpubufbaa3n66adJS4s/s+Ghhx7C6XQe+pefn9/xQacAJ1ocPBb/P5tULcg1Uei+jn8t2AgI2ndgstpx44EaQfvbSlYakYjs1mkSHPgFM4KqkB6hxKnGoM0bCXIzdqW9wFRt1lw2Gf7265Vyi7bJkO0rQ4xw/bLEPgBkuffHdL7UWHM54OiLoCoMq1oYdVx3IqkhhtRonSs3pU+MWWKc6i3HHHITlCxsEtvPn45QIwmhJhRBotLcPhsm/NmF3TBtSVBasMoeVEGk1qD9Ptu6ZWyqj8RWJ3JYXGtL2C2TrmrOlyoh+jqgrVsmDW0OrIlR7tQVt0w4X6lBbi8w6ejonHrooswpxqmsKJcGtYVVkan7gvpisVnRJuWBUgWeptihd5FYLWhZIyNC8Tls1kmD8Qg2kuV6eof2xBy7pNUZMdm3DAuBqC6ZhQ5tR2uwZwOFgdLo13aOodKSh1n2Mqv6PYQYWTAuQxJv5/yIgGQh072f0/e9hKUT5UrNxmSW5p5/qGW2x+jAFPJS3LiRiWXvceHOx7ly2185Z+/TTC17m7EVnzGiagHDqr9kRNUCxlZ8xtSyt5i99xmu3PYQF+/4J5PK3qV3/RosoRb8Bjs7UkfzUe/bmFf0o5jCypHYQs2cue9Fcpt3IYtGFhZeFfN4SZWZWvomllALDdYsvkyNngXT172V3i1bUQWJBenntPuEs8za33VGqIYxbq00ar4ztqNlrHsFNsVNtZTBetNpHb4/p9rMOFlzS4VdWZ1hALvJUmvwCRZWcXxaVY9rDSQ+FmG/Ot8/0tLSkCSJqqrDhfCqqiqystqXBO7Zs4f9+/dz7rnnYjAYMBgMvPTSS3z00UcYDAb27In8XXz33XfjcrkO/SsrKzsm70fn6Ak7ZRKJ7j7tLHWtLhm76sFMx+U7ta2hwFlED/mtlrQH/RSlAQMymZbD3VfVRm2jIVLejIxIvak1syZCDlxYlMnxtf87zbIEKU/UMljyOnDJbE0bB0Bx40acgfiydLqDng0bSPTX4zfY2ZMUXewXUclt0crNw++pLQKQ49PWQgct7YXUdH9rC2pTe1FG4DuHUpXhOydeW2Emo9XhFM4POpJqbwqZraJMtRhbBA4LM2mqNgeGnVndRXeKMrpbRkfnxKOLMjrdRkdf6mWtokxn82S64pIB2CprC/iBXXDJAKxBs0GfJsfXJnK5QbPljgysjxmQ2yzYWWfSHointmbJRKJRcrLOprVMntm0oN3rYZeMV7TydYqWvzClbj4JcvTMmaBg4L3sq2kxOEjyVTG95A2MajDq+LbIgsSG9Cl80Pt29iQPQxVEslr2MaX0bS7b8QiTDrxHT9dGHIH6mKJQWwQgIdhIsWsT4w9+zKXb/8HM/S9T6NqCoCpUJvTgix7XsaDwKlym+HbBDWqQaaVvkN+0HUU08GXB5dRbItd+A9hCLUw88D4A65LGRqxVDzO99jMkJUiJrRd7bX2ijpvZtABRldlp6UupMfoOfJ65nqk+zdW00DK1g3emMSOo7Th+aZgYl7umLQIwBU0wWixE7ybVHYQyJgMwutUps8qbfNS5MierS+ZEuxO+T5hMJkaMGMHChd/t4iuKwsKFCxk3bly78f369WPTpk2sX7/+0L/zzjuPadOmsX79+qgOGLPZjMPhOOyfTvfQ3e2x3Wjd7BLidMrEU8LUiPb7TsZFWquTMBZ1ovZAnRqj1CmcORMtOLjO0Pp6qL2LptaQhiwYMCp+HKHGdq+HS5uyfe0bDoQEAzU2rVwnp6V93kwYr2SnxNEfgAF10fOZjgUiCv1bc9x2JQ+PuULIbn0PVfZCKn3tBYdsnxaSXGVun/2SFtBElWbJgTdCCVL4sw//Lo4kXdZ+d3VSdGdnmqKJLHVC5JLnI0mlEYB6kmKO66xbxiloa+lmV+T8os5yooUZHZ0fOroocwpxqivJlSFtgsw2dJ8FORa7FG1XKt+/ptPHtmBlH9oiZ6ASu601aLXkayRt92dIYFPMsWvMQ5EFA4XBUvLkiqgumRX2sSiCRE/fbvKD0Ts/rUyejF+yku6vYEhT+8yZtixOPZtqcw62UAszS17FpMT3u6g3Z/Jp8U2sz5yGIkpkt+xh1p6nOXP/ixQ1bUFS5bjO0xEiCrkte5ha9jYX7/wn/WtXIKgy5Yl9+KjXT9iUFp8QIakyU8reJqtlLyHJzMLCq/AYIn/OALktexjm0haM89LPj1rGlBRqYIRLyxf6OuX0qAvLFLmB4R6thG1J4pSY9zrdp4mOG0yDaBCdMcemW+sZJa/FprqpE1PZKnb88JN+xAPHZFX7G1nGiJgL46MtXQozyNyEEYUGxURZyNot59T5fnPXXXfx9NNP8+KLL7Jt2zZuvfVW3G43N9xwAwDXXXcdd999NwAWi4VBgwYd9i8pKYnExEQGDRqEyfTDC8H8vomEblX7HdqF7gukbUSbD5zE1wky3GknRYkuytS3CjcpcuQxYSEgVW4v2oRdNKmB2nYzXEgwUNvqoskMtN9kqjDnIYtGLMEWHIHonaF2Jw9FFSTSPAdI8XVckt3dFLs2Iioh6q3Z1FuidzLMcmsiQ61Vy405UpjJaA3zDQtVbTGrfhJCmkMp/Jm2JTXUKrocIcqE3TKprYJLrRhdcJH82kZWXRzdl2o9BlJas1/qiT2/Q+eEGUdrJ7Kwk+xU51R/xtHROVp0UUanW4hHYa+Wtd2uTEP8FuSuumRAy5QB6EHHrayPZDvFqIJIhlITV715lZBOlZiJpIboH4htH15j0twvowLRxSIFgVX20QCMd3/T7vWwS8YnWljr1BwPk+u+iOnQKbMUsTZJy7wZf+B97MH4gi3LE3ryefGNNFizMIfcTC59m9P3v0y6t31Lz+7EHmxidOVczt/1JLnNu1BEA2uzZvJF0bX4pI5DY7XSpLdw+mrwGJ18lX9xVEEnyxJkSt08EkJNNJjS+DZpQtTzjmn4CpPio8qSwx6bJoqES5faMqVZc7Sstw2lWUxo93q4DXa2XEXv4G5UQWS5eXSH78tEiPEhTVgJZxh1hhFsxqL6qRbS2MuxydEIu2QATILKALP2t7bB1/Gi9FTj+/YAfDJw+eWX88gjj3DfffcxdOhQ1q9fz9y5cw+F/5aWllJR0TUHpM7xoTvdMp5Wp4y9E+VLHbllmtC+k8OiTEdumQYhCYBktZGM1pLMIzkkyrQRbtqWMIXbNKeE2h9fbdAEhBy5felSrSkDVZCwyu6IrbLLrEUAZHn2x9yy2JM0FIA+DZ3fqOoOzLKXgqZtrfcSXfRPCDZiDzSiChK1rQ6gtsJMZmtuTL0xNWLYb2pAKy/aTfvMmWiiDGjCTKrc6oKRogsuyYr2O4jXKSN4tb+xhjhEmc4Qdso0YcVQ9WW3nFN3y+jonDh0UUbnuOBRRHyq1ko4VTp27RfDhFSRg6o2AebT+cX7uqDWSrtY2R/X+G2SVspSGCrDEmPhGEJiq7EfAEMDm6K6ZEpMhTQYUjArPgZ5D985CQsyABscIwmKZtL9lfT0RJ9MZSTmpZ8HQJ/6b8ltiZ15E2Z30lAWFl5NSDKT1bKPC3b9mx5NWzpZNHN0OAN1zCh5lQkHPsAgB6hMKObTnjfFVc5kVnxML30dg+ynyl7ElrToYotZ8TOt9nMAViRPwS3ZI46zKR6GujRRZHVS9K5JecFyCvwlKILEt/aRMe9zgk9z36wwx+5MEWZsqyizyjA85rgjXTIAZoIMQVsYf0vkHJvucsmEGWjWFqVb/dHdSh1xspYu6Rwbbr/9dkpKSvD7/axcuZIxY74rt1u8eDEvvPBC1GNfeOEFPvjgg2N/kycx3yex0KtqD97WbnTKNLeKMg5a4hrfJLQ6a9TomxkusbUkSom8keOStDVJktzY7rV6g/aAHxYN2lLXGiyfGqiOOPeGA2/TPNE3oBrN6bgs6YhKiEJX57ssdhc9XNp6psTZP6ZTM61106fW2t4NY5PdWGQPCCINxvbiijOoCSuNhhSq/Ie7M8Offfh3cSRJrb87VwzXqkPR/gZcgiOuQu3w31gz9ogdpY4kXreMXdDWmi2qOa7xpwK6W0bnh4wuypwinMxfVPEo642tLfuMKNiE+EpdjsYlU6UmIv9/9s4zPo7qfNvXzGxfadWbJfdeMC5gsLGN6dVA6DUJaYQQAuSf3jt50xOSkBAgCRB676GZXgxuuHe5qdfd1dYp74fZUduZ3ZUs27Iz1+/HBzxnZmdX0p4z97mf+0HCqSW7k+8Hwi5RdxCMVXOr1d0i6oF0E2Trem6AHY4xxEQP+WoIb7jDctxar/6wPCO6DpdF5osGrAnoD/FzO97NKJR8HJhLq7sCnxxmTo4dF/bmTeTd6vPQBJFx7Ws4ddd9+kLoECAAEzpWc86Of5CXaCPsKuLFcZ+m3W3d/cAgkGhjXr0utqwuX2LZ+hpgangtlbF9JER3RrfM3M73EDWF3b5xqHnWizcj8PcjX2ZRZl58JYKmst05rju7oD9lvXZn5yprkDSZvWINDRk6QFhxjKaX2K0Upg/43MEwLSXKbEwMXpQZjhxJD742NkPNUAmpEd9YALzkln9mkMktExR00T2fnm6QmdwynYIuuBiijJlbxhBlCvqJMhWeIBrQIRUCUGiSGZOptKnVZYgyzab3Vu9JiTLR9FbZBnvy9Z9FVddOXOrQBSYPlBHh7TiUBBFnQcYSppLUe2nz9owx3DICUJz6LFpNNmcKZX3N1+lMn0uNz75DKjQVVLSY/jvWkUGUMTo0KYKDMOabN70JaPp4TRAJ5jA+V/JSokxXSpQ5Utwyw/l5x8bmQGKLMjYHhZCqZ3TkizLCQbBZNGr64qiMtowlPWY0RxzUCXpIcLWam8tmM7qzZpScuVRqq1MfNym5LeN9bfboC6hpsb47Wr1dMvXuGtpdpTjVBFPD1jk2CiIfFC0CYEbTW7hz6LTU7i7njZEXowkiE9tWsnDfE0OWG7M/FMabOWf7nRRH64k58nh5zCcJOwuznjehY3V3CdT7I87p88lXenoW+gIaC9peA2Bl4DjiovkOVEDuZEKX7jb5wG8dmHt0dA2iplDnqqbJ0SOeGKVLBgVasFvQW5NDFyY/ESaputvpY8n8wcPMJWMwE33RtZb0sOL9dcn0Ll0ymOLS3+/mRHoZV27XtF0yNjYD5UgRDaOq7rJ1C9kDeXPFeJjOI7eNBsMpk5/BWRNMiTKGk6I3UcGLLOqiQkBJP24INkVyOxXuvnN0hzNV9pRMz4uJil7CDl1AKI6llz4Z1OfpAfbZujMdaByaTGXXTgDq/WMtxxnvpd3dN6TfEGaKk7p41e5MF2UCyQ4Ago5CgD5uGeNnkxRdxEyCgPNU/edrCGxmuJDxpPL4DLEuExIqPk0X/4LktjGRi1vGn+oa1kVPbtZQCTM2NjYHH1uUOQwYzqpxrop6JFW65BdzW1Ttj0sGoFnVH/5KBuGSAWgU9fruSjW3MLw6Sd/NqZEz56zsdIzWr5shj6VL9FHn0ne+JsWsF1Cb83SXw4Sujbg0a1v3Nv8UOp3F+OQwE3OoJVcEiTdGXpwqWdrB8XXPHtRypWx4lAin195DYayRqDOfZaMuQ7YI5jUQgHn1LyCqMvV546nP0CZ7QmQzJfFGEpKHtfnW5UEzg/pnudI3x9KS7Fcj3T9Dw/1khREQ/bEr3b1SZrIrO1PRF21rpWkZr2vGdLYiaCr1QkVO4YP7y0RXGAGNVsVNq7z/7TuHA0fKA6+NzYFkKATVhKZ/v3oG6JQBa7dMBP2B3K/l1g2yyxBxtB5Rpr9bJpxy3+SpXfTHndpP8ahRnKSvg4xymgIlvfTJcHwUJNPXM4aLJj/ZwUhX+uuCPqc3+XT3b2VXremYg0lFKsi3yT/KckxBXBegQq5i1H7za0PMSUHKDWMIL73JT4le4V7h/oYw49KSuFOCSkhKF0jyFP3nGxc8JLBeV/hTIsuehLXbp+94XfwLkz0PL1eMcr6oNvRh5rZbxsbm4GOLMjYHhXhqUeUW1IPyevURfRelMMfOCgbNEQcaPQFuZZp5a8ve1EXLaRcLAShXzO3FBnsduthSlbR24Ox26QuVsmRTn8Vdb5cMwE5fqmSqK3N3qI8DeunMuPZVOLTsoti60oV0esrxJMOcuOdRRA7Oz2wguJUop+76D265izZvFcurzsp6TiDRxuS2jwBYU653ROrtkjEQ0JgdXK6PCxxj6WcaE9mGT+kiLOWzw20t8kyP6S3VN3r0VqT9XTLd4xL6z3Gjc1JOHaamKbrYsylVOtebTC4ZAD9RatB3IrfQs1t5IFwyAF5RpTrVdW1HcmD2bdslY2MzeI4E8dBYP7gYOrdmBP0h3UtfUcaqhCks6PNvnmYufGjQHeier6W7aQznRb6S/v0fE9zERV0kMkSZ3m6ZTkdKlDEre3KlujYlrdcebZ4qFNGJW+6iIJ55jXIwqIjsBqDJN9JyfvUng0hqElWUCLsK044bbphOE6es0X0p5DB3sRg/g7BJAL9HiyGmXMEh0drVYogsXYKPpmj2wF9jfGgA5UvZ3DJGOV+UvhsdtlvGxubwxBZlhjnDWS0eiJJu7HQ5cxBl9tclAz27EXmYL6AyEcNDXNDLVgq1jqzj28QiNEHEpcW7a4fN0IAGSbfiViStHTh7nXq3gVGJ3db3KHpodus7NKOj1qG9MdHDTt8EACa0r7YcZxCXvKwrXQDozpJDlSGTC/5kkBP3PAqaxtbiuTT6rHfdDGa0vIOoyjT5R9PiSQ8QNJgeWo1DTdLirqTZVWk6ptod5qio7m5Z57XOLpgS1cWWne6xJEw6RRiMk2txaXHCYj71Us9rmrlkAKaouiizW6whysBbYk6kFoBtZP/choIxTv1vsTY5dDuFh4oj4UHXxuZwIZlaqkqB8YM638wtY3xnenPo6JTEQSK1JvBZOGsSuFBSjk2flj5vhgVdAPCbuGgMx4ZLjePu53pVEOlKOT7MOi91lzYlrDeQjLDcssi+YeF6LY7VI2gKcYefiNNcOBHQyE/oc1/IlZ4NI0f0zzFs4nbxy7oolhTdfbozGW4Z42cQltJFGQE9zB90wcUKr6r/HkQFr+WY3vhS4l9DfGAlvJmEGa+gizIx7cC4T223jI3NwcUWZWwOClpqO+Rg/MJ1dq4hlmqhmakTUn+aI/qCyrAgO7Rk1vObo8W9wv2CGRc8QSGfpOBE0FSKFOuyqianvvPVW7jp75JpcOuLrMJkK37FWniq9U5AEyQKYs0UZFi0GWwqPhZZclMUbWBMcH3W8Yeaqq6d3e09l1edhZZlyemTQ4wO6jk9e8pmW47zqDHGRrYCPWViZkyJ6YLLFk96NotBidJKgdyBKkh05lmH8jpQGC3vAXrK3DJRpHVSrLajCSI7xR5hJZtLxsBoFV8r6O6tA+WSMahx6k6ZfXJui1j9mrZLxsZmfznUIuL+/h3Lmv697hAGlg+XiXgqh8Nsju/vljHWEwBeYn2OGSVMEVH/XhM0FY+Wfs0uUZ/DjYf5vseMsqd0h01XSjgQNQWfySZJZ6p8J5Aq5zFzf7Z79M2gogyZMwcTSVMIxFOZMO5yy3H+pO54MRNuvCnhpcuRLsq4tDhiyhUclfqunRrj3h5BRTSfi4y8mH1J6w6PXk0fY+TSZHPLeLrHu2mJZC63zhVXqgzOrMzqSAn9tbH5X8IWZYYxR5JKbIT7ZltSDYVLBuh2JLhMarez0bODFstpV8mwwOabLKh6Y5Q45alhpAwlQUYXhlI5PdTPwHBvlMczBxHv8Y4B9I4H2dCArUV6hsqMlneGxY5aLsxufA2nEqPNW8WefGtxxGBSmy7ibM6bgYJkOW5ily7e7PSlX7PSrS+OJ8Z14abBWUVYNLclC8C4hB7iu81hXeYEMDap19rXOlIlbBYume7xqZbtteLA3S6jNT3XaA/WjqGhpNqhL4T3JQfu6hlOHOoH3MOVRx999FDfgs1hipISZSRBQ644aUiuGcsgyqSNTT14S5psmgcDPY4Jr2a+buhKbfZkEmX6u2gq3NFu0cGndCGYrKCCqZDfgElpk4EhyhTHcsvIOxgUxZsA6PBkEmV0Z1CXMz33zCPrn1VU9KZlzgiAVzGEl3S3i+GEsRJlvCk3VEz00Bgzd/IYIktUzG0+MxxZg3G1Wrll3KnfxXiG7JvDnSPpOcjGJhu2KGMzKAaqnkupxYRygB/1OzvX9PuX3HbWmnvtXBh2V2eW/JXm1M5IXEgt7rRYpuHdO2XGgsAKo47ZrEODgRH8V5TM/NDemCpxKs0QLGzQ4q2my1WIQ0kwKrgx6/jhgkeJMKXtQwDWl1q3sTaoiOzGL4eIS152+ay7P4yO6kJKg3tEdzlbf/xqhPKUo8nIAjKjOqF//rsdIzPe20hFH7fPkZtQUqPqbUP3ifrPOVeXDNCdKbOPigPukgGocOiL0ibF/LNMv6btkjmckGWZdevWsWVL33Dyp556iqOPPpqrrrrqEN2ZDRx6MXF//p6NdYNjgJ0Ue9O/hCmZyuFwWoQH93bLZHLVgO6WMeYIq3WAIewUiyadmVLigJlgEzOOWThiu1LlO3lyT+l0f7dMOFX+E0hYb/QcbPLj+tolU/dEww0Tk9I3PLq7SAoiMRNhxAjzjUvpx1Q5JWZYzOsuVS8hSwjWAbrulBsq3qvzUSa3jCs1Ppm65lC4ZRypjCVZM99cst0yNjaHF7YoM0w50tRhVypLxgjsM2OoXDJA945StnIWM4xOOrkG3CZSiztHFleOsShzq5l35iIp8cawMvcvXYKeADuzGvPeGO0iC3MI92vwjwFgRHhbToHAw4kprR8gaCpN/lFZW2QLaIzv0hcZu73WGQUBuZOCZBuaINLgqe7+d8MlYzAyoZcc7XNWY8WIpC6e7M0itoxQdOdTvVSR1SUDUK2lxovmuTcZXwt9p7KRUlTtwPuiyiT9975Zzk2UGY4c6gfb4cq6deuYMGECRx99NFOnTuXCCy+ksbGRE088kc985jOcddZZbN+e3a1nY2OGMRMb8/pQuGXklLvAyvnSG2OjJlOXQ2Nzpn8mjEEsJQC4TUqb4mJK0FHTBR23W0odM8+yMcpzfBaiTVJwEnOkyqMSmdcLBxOjNMnMBWPglvX3HHekO1pEVByK/lnHTUQZV2qdZSasOFOii5Uo49SSfc41c8sYYl4yQ05c3/FGqdHg8l/M3DIOQRdlkkf4o9yR9jxkY2PFkf2XbHNAGIxq7hf1ySOiWpeL7C+9XTJuY1IdxARolBb1t8RmI1u5e3uq64yUpYNEj1PHuv2nsQjxKOYLNQAFiYhDL63yJa1dN933l7I4l0brso4dbvjkMGURXRzJVsJU6UlSHdPLhPZ5MjtXKlLlYU0WYb8AlUndcdLorLAcM1lMtQCVyjJ2VjK6d7WJRZZttntTpuo7ny1CyYBcMgDFdCBoKrLgoE0bfPhuLi4ZgGJJXwh3qNn/Jm2XzOHFN7/5TSZMmMBTTz3F5ZdfzpNPPsmSJUtYunQpe/fu5Ze//CU1NTWH+jb/5znUouJg/661lGgs7Kd23Nstk0yJMo4M87Hhlkmk3BCZBByvO54aYy7KJHqJNhWevvNx94aNiWAT657r0wUbBZG4ZDhpzB24Rh6LQ4njMhF9DhU+2ciLse5w5E69J+M99seZej91cnp4brcoI6YLL92ii2juhDGOJ0XrucrVT7gxsHLLdIs4vUqN9tct40ytVeUMZdi2W8bG5vDBFmWGIUeiKuwX9cVMWD04ta+eAdTvNvebGHt2Sawn5OZeE6/hqFGEoflzUgSp+7pmLhnIVbjpWYy4M4g3BobDJJBDIPBwpDq8DdDbbFph2Lqr4nrIbbOrMqMhvjShlya1uvSA3v4uGYAyWRdSjCyg/pR7QpSqrQiaSkJwExKsuy8Uqp2ImoIiOGgXCjPcmU6xpoc7tgrp3Smy4UShAN2N1aoNrE31YCiS9M++Q3F2B38fThzqB9rhzIcffshvfvMbzj33XP76178C8J3vfIevfe1reL25Bzvb2GSityazv24ZQ/TOlO/Wf2wmN6zhvHFo5iJPd7mUyZydaT43HvqdJg6cZC9Rob8D15jrEilBY7h1UjRcMMkMmSwOVX8PsoV4IqUcvUbXqz7ndh9LFyy6j1mIGcZxuZeA0t8tY2yuZcql63tNxfJ+cqW/W0bsdoQf+RyJz0U2Nv0ZUlHm8ccfZ+bMmUN5SZthxmDV8gJRn1wjmoOESanEUJYuQU8rbKM19kAwuitE8OY02Rl25Uz1x9Az0WezuxrjMjl1hBwmYzU1+QuaahoQ2J9kqvbaZbIjdzhQHNVdLe2e7KU8haksnrjk7a7ZNyOQ7AAgmOpwYUaBolvCOyVrG7YDhXxNF0CMbl1miGgUaPoOYqdgPa77tVNjQ4L1bmMmCkX9d7dTG9yDc64uGYA80VjoiiQylDHaLpnDj5aWFkaM0EvzCgoK8Pv9HH/88Yf4rmzMONTi4qH++zbcMmqOZcqlPrn7wTuTy9VwK1gJN7Lg6HO8t1um+5hJ2bCxXpBMjhlrDlFTLO8tIembM04l906UBwOn4WSRrMtZpZRIZSa6AEhqSlwRJRpifddVUrcIkn6umDrWpVqIPWQXUDKJLGZuGSsRZ3/cMsa6LpP7Fmy3jI3N4cKARZm///3vXHzxxVx55ZV88MEHALz22mvMnj2ba665hhNOyB60afO/R0CUu3ek2pTM4sVg6B/wW4AeeteO9YMypLtkAPI0XdBRBcnUadPcb8L1pZL6I4K1ANQUy+8JhrOoYzYwdsvMwusMundyMgg8xsJDE8ScSrEO992WQEIXWqxq1HuHHzo1uTs4MeywFj/yFP33KCLlmbpkAPJTY4wuXL0p9/SELxoZQSGTcb0JaPo5wQyOmu5rpn5XY4KHZI47dr3JF3QBLszAc14GIsgA+ISeh4Yui2DC4cqhfpAd7giCQCgUIhgM0tnZiSAIRKNRgsFgn/9sbAaD8cip9pukBuuWKQjM6M6byyU7Tk25YDNtbhibIJJmfj1DtJFMnDTG/Gx2zBBs8sV0UUVOldc4LByzlZ5kt8vEmSXL7mDjSOW6WLlgILOw0vu48dn3FmbEDMKKqKndxxrjJnk1mnkJe2+3TPf1c3yMEgdZFt+f3m6Z/clOPByx3TI2RzoD+nb45S9/yY033khtbS1PP/00J598Mr/4xS+46qqruOyyy9i7dy+3335g/mja2tq46qqrCAQCFBYW8tnPfpZw2LoFcVtbGzfeeCOTJ0/G6/UyatQovvKVr9DZOXyCzsw4Ur90RAFKUpkSLf1EmaF2yQCU0AFAK4UDPtdLDHeqg0IuJSQBNfUQLWZ2K+Qp+u9rWMr8sG20xdyrWCf5G/XjRsifGb1DAxMmHQj6Yzhkchk7HHGlSrRkyZW28OnfjQLAnXq/cZOa8+4xqYWsIlmLX4bYlhRdGRdonhxEuTJvW3fpXSyH0jsPPT/j2ACFlYKCo/EKKQFQG1z44EAQhZ4aeKvA70O9i24zODRNY9KkSRQVFVFcXEw4HGb27NkUFRVRVFREYWEhRUUDL7GzOTAcapFxoH/ngnDgHj5zuWaBW38AFzLUXRrXcYnmmTJaKhCnt7BjuGXMjvW/rmgi9hjHMt9XdkHpiCT1ds3ed7bPIpfPKttvTX+3TKZrDtYt0/3zz2Gs7ZaxsRn+DOib4J///Cf/+Mc/+NSnPsVbb73FiSeeyLvvvsu2bdvw+w9sJsFVV11FfX09L7/8MslkkmuvvZYvfOEL3H///abj6+rqqKur4ze/+Q3Tpk1j165dfPGLX6Suro5HH330gN7rkcr+fhmXO+I0KR4aZA8z3KHsJ+RIehtsKEfPRWmhGAUxp7rx3pRobdQJI2gViqnWGjKOLVQ7AAiKARI4cFnYl40W11HRR1xwWXZpCChBmpwVhCRrB4c/5c4IOaydQCIqHjlMzJFHl7Mga025L9VSM+Q6PB+eBrpcN3a61AwWZanbkWT9Vdnbcq4IUvdOaW+XDPQE/clZvnaNoMhkDiHVI3w9okwu4w2MFtjO1GeQGKDLZqAuGQOXoJLURJImosxwFWQO9QPs4cCyZUOz4Lf530Eun5zzmkJKPdAqJt/ycsVJg3rglEQnaAffZWD2cJ7JPdH7/irc0T7Ojp6HcusH/gJXdkHpUJKbWJT7vTfEnKabMJlojHupcGfP3QPdLdM/qNmKpmgx5Tl0URwoncF1KbeXQW6fj6Nx2ZB0LjuURJ663Z6TbY5YBiTK7N69m5NPPhmARYsW4XQ6+fGPf3zABZmNGzfy4osv8uGHH3LMMccAcNttt3H22Wfzm9/8pruWvTczZszgscce6/7/8ePH8/Of/5yrr74aWZZxOA5O4OxAOFJdMgbVjhjr4gXsSx54J0Yp7Tg0GVlw0KwVU0lL2hiz0iWDCrWZOnEEDWIFM9UNPeeY1Arna2HcWpy44KZVKqFKaexzvCmmO2i8WgyvGiEq+mhzFFOVNBd7SuRWtjGRdqd5cCxAcVIXnTKNaYg5KYi3EHPk0eEuoyRWbzkWoDjWwK6C6bR6qjKOG67EUw4fh5LoY0m3WqAZlmizWn2DXHMH+tNfkAGyrpuMFtjiABagAnpmkCaIg3q46Hmtg/NgIggaaByUFtw2B48TTzwx65i2tqF/OLEZPL7zrz9s1hxSyimjDOH3hvHdl1s5SWpshjB/odeYcm9bulNCM3f7VHiCGYWJTCUquZSvGK+b6d4PBWpq/hUtgpGh9/xr/vl0l5WZCE7d7iOTY9nK0XKZS7PluKSPz/z5t0Qc3d2+cqWnBO/gCm6Ops3DdhPFxuZwZkDf0vF4HI+n54Ha5XJRXGxdYjFUvPfeexQWFnYLMgCnnnoqoih259rkQmdnJ4FAIKMgE4/H7Tp4E4bCsjjSqe9E7JF7Sm4OROkS6B0VqtC74uwle/Brf6o1XcDYK6YLfv0RgAqlCYB6KfNrlSX1e2p0WLdPLpf1a7W4yy3HlCT0MY3uzAJKcVQXfpp92dvRlnftBqA+b/x+1z0fCkIu/bvIaLUJ1oIM6I4l6CljMiPPrS92XBauJugb3GwW1Ggg9+qq1Z+yXrtphpMmmxBU5pNREdC6F5i5CUeGSwYGt0s8WJdMb/ovIYfrAs/ekdt/XnrpJS699FKqq6sP9a3YDDNy/bt3pL4xkhbfV4PZ/Tfcs7lkgjhyyAMxxAVjTH+HRHemiIk4ImUIje0fOtvb0eHI0H3IwOjaJGdo73woMAJ+MzUW6M7MUc3nX6U7IDl9nu/ZdMktw6e3A8n4rK3Ckxtjge5rZGqpDj1lTD3dvjKPz5XO4Drk7nvIfdNoqMqYDiWHi5hsYzNQBmwX+f73v4/Ppz/MJBIJfvazn1FQ0LeE4ne/+93Q3F2KhoYGysv7PqA6HA6Ki4tpaMhcWmLQ0tLCT3/6U77whS9kHHfrrbfy4x//eND3amPNGKdePrMzMfCOSFaYlS4ZjGIfe6iilmqOYZ3lONNzVb1l8i7Rur1yb6rlOnY7RrJXGsEcrO+pKlnPbvdo6pwjmBU1H1eT0F+70W0tCFXG6kBTCTqLCEt53Xk1/amI7GIjx9PgH5P1PZRHduNJhok586jLG09NeGvWc4YTbamuS8Ux/TshkyATF9zd2Tn5snnOVKU7Qp2ouwCtPl+AaKp7k1uNIaKZu2ToyZLxaJm7WyXQM5dcWAtBPWN7FtouBmbZBrrDgZ1DtFDMhpIqWzJ2vocztiAzeHbt2sXdd9/Nv//9b9rb2znrrLO45557DvVt2fTjcHHLuAT9odOs7HGwOAQVtJ4A3kwYD9JaplLXbpHHfEymFsoBKWJ5LJNgY4gRsuhEw9zv6ErlomnS0DdY2B8SOXR7NEKAjdbY/VHElPCi9t0MaYg5u0uOzZywShaXTrcok8HFY4wxy/oxIxfX7UDdMj1dwQbm5B0KbLeMjc3QM6AZbvHixWzevJlVq1axatUqFixYwI4dO7r/f9WqVaxevTrn633rW99CEISM/23atGmg7ymNYDDIOeecw7Rp0/jRj36Ucey3v/1tOjs7u//bs2fPfr9+LhwOC6P9ZbxTf7DdmtCDbg+US8ZgHPrPbpswOu1YptIlgLHqLgB2iGN6zjEpXTIYJetCSq1jVJ9/N0qXDGqSKbHHnX5PBiMTe0BT6XCWEJbMw4PdWpzyhF4mtds7zvJalV21CJpCp6ecTpd1qRPoFtixnWsB2FB6+LWz3Zc/EYCyyJ6sNeWGC8kvhyyzfQDaHXq+jtH22oxQKuA5Tw1bCjIA4VQ3Jb/WN9unrN+Oaleqi5dfs65xL0st3CK9woC9ZO+u0dslAxBJBfx6hOwCEOy/SyaZKj8wHrL0a9oLuyOBRCLBgw8+yKmnnsqUKVNYuXIle/fu5e233+bBBx/kkksuOdS3aDMMyeXv39ktylg7+wbqljEcDm7f+BzGprLFkCwfmo3MsGSvvc7ebhmjq2LSpGNid96YiePFcGka7a+hxy3j6uUg6X28N7k0BTgURBz6vOmRuyzHGMKN00K4SaZC+s2cNMbn7DRx0cgWDhvDLWO4VTM5X4OK/nk6LTIEe9MULe5+TWeGaw6UtvBO/ZrCwDZVbLeMjc3wZEBOmddffz3t37RUvaYgDNwG/3//9398+tOfzjhm3LhxVFZW0tTU1OffZVmmra2NysrM5SKhUIgzzzyT/Px8nnjiCZzOzBZOt9uN2z3w9rBHMkOVtj7BpU++DYqHsCoNoi9SXzK5ZAAmaTtBgC2MHfC1xyv6ZNcolhMkjwDWTgmA8bI+fpvTWiABGBvXx+1yjbYMIPZqMSri9TR6qtntHcu08Mfm14psocldxXb/ZMsxbiXKiPAO9uVPZGfBDGY1v5Hx/qa1fsCmkuOozxtPs7easui+jOOHCxFHPk0+XRCbG8/uimpw66UUFfE60+NG++tmRxkApXJ6JpFBh6MQgCK53XKMitDdnatQ7RF4+gsyAJ2CPi6gmZdOlvV6KAihO3n8WiTrbll/QQagK9WxKS8HV85QCDKG3dozwEXkwcZ2yQyMG2+8kQceeICJEydy9dVX89BDD1FSUoLT6USSDq/25/9rHA5uGVfKWWfVtW0wuFMP04kclsGGC9FwMZpez0Q8MTseNznu6T6WvvY0uij2P1bhjtIQB0lNoohOYpIPt5z+PZ6XagoQk3yUeDVao8Mjz6vLqTvs/UnrDY9YSkgya1KgIpDM4LaJCKljavqxZMqB47Jw4BiCTi5ly2aij+n4lKvVmcXROhC3jCEAHiyna39st4yNzdAy6BnurrvuYsaMGXg8HjweDzNmzODOO+8c0DXKysqYMmVKxv9cLhfz58+no6ODFStWdJ/72muvoaoqxx13nOX1g8Egp59+Oi6Xi6effrpPHs5wYrgviIaKAkmmQtInyM3xzG2hh4KpbAdgE+O6HwZzJY8INaouSGyUsk864+SdiJpCq1RCs2jtSKlK1uNTuoiLHna7RlmOGxPdBsA2/xTLMRO7NqbGTDXdfeu+tw5dsNlSPDdrVkxesqN7/PKqswYcZneoWF86H00QqYnWUiB3ZB1f650AQE1sV9oxQ5AB2OPSy9eqktYhyU0O3XVTk6FLV5tYhCpISJrc3ULdjCgeIoIutBRr1iKPQXtK2izCemGbiU5N3xkMCLl1ntgfutSeh3OfqC8i7QXdkcHtt9/Oddddx0svvcQNN9xASUlmV56NTW+yfQ+4UyJuXMss8A3ELWN0SYxrDgoCM7KM1R+k46kHa7OHZndK2I7RVzwx3DJGOWqcdOHFbZS0OtLfn1vTHZAxMX39KgBeNZo67k07DnpZrTNVwhRyFAy4M9GBIuwqBLKIMg59LnTL6aKMIciAlfCSyqwxcdEkUqKM00J06Tlu/VkZbpqhFmUGglG+bNXx80jnf+XZyeZ/h0GJMj/4wQ+46aabWLp0KY888giPPPIIS5cu5ZZbbuEHP/jBUN8jU6dO5cwzz+Tzn/88y5cv55133uHLX/4yl19+eXfnpX379jFlyhSWL18O9AgyXV1d3HXXXQSDQRoaGmhoaEBRhvcu7XBiqFwyBlNTrbA3tzZlGbn/jGUveVoXUcHLdnrKhbKVLhlMV/TSuXXS1IylSwBeLc44uRaA9S5rIUVEY1J8CwAbPVMtx03o0l97h2+SZc37iNgeCpJtJEQ3W/3W1xod3IBHDhN1BqgtmJ7xfQDMaXwVpxKjxVfD+tITso4/1HQ5A2wp1kPA57e/nnV8QnCyy6c7msZG+ubm9BZk4oKLBqfuxBudSBdvDOqdethyjWLtKmqUdOGmXGnpdrSYuWSahFIA/FoXftKFkrJ+DwPN6OVVJXRYvjaYu2QUTaBd03ciSwRrCzkMTbhvSNX/7jyCgkvQhq0gY7tkBs69997L8uXLqaqq4rLLLuPZZ5+159nDiOH+O+8V9e/MmDp0ThmPoD8cx8gegOsllhrrtuxz40mVm8YE880/w/Fidtyv6vNOREgXVvyq/t3cJaZ3Oa1wR/HLuos37DAvdRaAolS3xlZnmcXdH3w6UiXEBXFrF2rEGQD6hvcbxCT983AqMdPsl7ikf5ZeNV3QiacELrOQ/8a4tyf/zUTs6bmGPsYQzbLRqeanxmd3pbbkuEaNp5xbXmHgQs9QlTAN9TOCjc3/MoOa4W6//Xb+8Y9/cOutt3Leeedx3nnnceutt3LHHXfw17/+dajvEYD//Oc/TJkyhVNOOYWzzz6bhQsXcscdd3QfTyaTbN68mUhE/wJeuXIlH3zwAWvXrmXChAlUVVV1/3ewcmJs0pnu1ifXj5UD34lDRGMm+oSxguxiRH9mKusBWCXNzGn8UQl9/GqXPr5/nozBtKjeYnut7yjT4w1xHyNie8iTO4lLXrZbuGUEYEZwFQArC6wzYCRNYUqrLlauLl+S1S3jk0McW/9fAFZVnEy9f+DlXwcLDfig6mxk0UV1dFeayGLG5rwZJEU3hclWy/IlgK3uiaiCRLHcSqFFpoxGTz7QGNlauNnj0H/fRyi648ZMkIGebl8j1HRnTn9BBqAOvYtXFdYip5kgA9Ci5aEiIqJSLKQvXIeaDkVfQBaKw2On1mbouOKKK3j55ZdZu3YtU6ZM4YYbbqCyshJVVdmwYcOhvj2bw4BMIq1R7hjL4pSB3N0y3pRjIaLp30uZ3DK+lCijCSKx1INwf7eMIaJH8KYJN+XeNnwp0SZi4mjxa4bw4qPC01eAMELmw5K5uzhP0ceHHAWmxwFKE307Oh5qt4yKQIdHv5eiWKPlOKPEKS+RPv9Gnfrn4ZXTS8sVwYGc6u7kNSl9MlxFHtXcIWq4kjIJLoZwk0jk5iY2ytY8ZA76HwiGK8uZIfPuSMd2y9gcSQxKlEkmk33aUxvMnTsXWT4wNrri4mLuv/9+QqEQnZ2d3H333eTl9UxSY8aMQdM0lixZAsCSJUvQNM30vzFjxhyQexwM/2tfKEenRJmVSm5djazIlidjMFfTg2s/FHITVnozR9FfY6s4jqCQvdxqTkIfv9Y5PWOd+ozoOiRNpsFZRYNFa2wRjemh1fr1AnMsrzUr+CGiprDPO5o6t3Xb62mt7+ORuwi5S9hUcmzW9zKhYxXj21ehCSJvjLyENo91C+9DydaiuewJTEHUFM5ofjJrsZUGrCqYB8DM4Ed9xvd2yQBs8E4DekQ0M1qlEoJSAZImMz5ZaznOCIAeLWcWhHenun0Z3b+ysUfQnTzVWC9srajX9AVvhRDSO5FYMBQuGYDWlChTLCVsl8wRytixY/nxj39MbW0t9913HxdddBFXX301NTU1fOUrXznUt2eTgeH8u+9LiTK9SyAzkYsw40uFm0d7OWWshBlPrxD1COaBub5UgLsiOEyzZ6qczUBPkHtv8lKijBEG31uYyVN10SEq+kxdsxWa7oIJZhRl9Pmh2dWTwXgohZmguxRFdOJQE+QnzDcoNDKXOEUc1qKMkUUjaApuE7eLcdzsGPQ4lrwWog0M3CnT030xt/G5uGUMUcaTQyacGbZbxsZmeDEoUeaaa67h9tvTxYQ77riDq666ar9vymZ4cCC+aGd7OhBQqdVKaVYPfK7Mcan21MuZSRJHzqVLACVaOxOUHWiCyCqXudugN2Pk3ZQorcRED2tc1iKQV4sxNabnwSz3z7McNzOoZyht902i3WFePpWnhJgW0t/jO8UnW17LqSaY1fgaAKvKT6YrZQu2QgCOr3uO0she4g4fL435FK2ezKHaB5t9eRN4f8TZACxse5WyRPaSuF3e8dR7RuFQk92fL6QLMjISa7z6z3xG1Do4uC5/DAAT5B0ZW1JvceqdocbLOy1dMgDbJN2VZHT/MjBzyQDsRBdxxmrmIo6VSwZgl6r/TtWI1tk1QyXIADQp+gKyzJHbovRgM5wfSg83BEHg9NNP56GHHqKuro6vfe1rvPFG5pBxm0PPof4bsBJrjQyqSA5OmVzxC/r3UJeWvbGDiNYjnPQSZXq7ZbzEulssh4T0UiMjuD0spq97ClT9WFDMT8tx86mR7pbQnVK68GKE0Lc7M2TZxfT5YZ/HOsfuYNKYCuUvjexDtCgIi0l+EpIXQVMJmAg3Xc5CAPISHWnHIk7dpexLhmmMpZenRVKlT34lXdBREbudMj6T0ieDqJhduOnzmimhx3BFDQUR9Gv6iNIZzN7g4Ejlf21z2+bIJWdR5qtf/Wr3f4IgcOeddzJjxgw+97nP8bnPfY6jjjqKf/zjH4ji0NX82hx5FEgyU0R91+YDZcwBf72pbKdY6yAi+FjFtAGfv0D+AIDlbmu3ioGIxvHxDwF412MttgDMC+vlRB/6j7XMjClOtjKuazMIIh8VWme7LGhfhqAp7PBPZo9njOW4Se0rKevajSy5eaf6/Kwhvg5N5rTa+7qFmf+O/TR78idlPOdgUecfxxujLkETJGYEV3J8e/YHPg2Bt0pOBeDo4If4FX1x1F+QAVjnnUFE8lMgdzAxbl4SVe4JsSolvh0dX2v5um1iIY1SOYKmMl/6MOM9bhH19qwT1R3d/2YlyGjAtlRW0nh2Z7yuGbWqvogfLbQO+NzB0CinRJk880BKmyOD/k0AFi9ejN/vZ82a3NyNNv/bmAkzflH/DoyouW+qZHPL5KXcL+F+wbtWbpk8IqnxfZ0uhjAjAPmpLo0hIb10uUALpY6lizL5ahhBU1EFqfu44ZYRgCJFF87bHUVp55YmDVGm1PS+AUbE9iJoKkFnESGpZ0PmULllmvz6vFUesZ63Oj16/k1eogPJpI204aLJS3akHTOyaLxyeqi+hkBXSpTxmblsRA8I+nNMJlEmknI8edUojbHMm1wA0ZQoEzcRiazI5pbp6iXKDBbbLWNjM3zIWUFZtWpV939r165l7ty5lJWVsX37drZv305paSlz5sxh/fr1B/J+jyj+V9XdBZL+wPmWMmFQ5+daugS6ULKQjwB4Q8gslJixWH4XgLWu6YRNdr/6c0LsfQBWuGYRNgnmM5gW20CB3EFYymeVb7bluHkdbwOwJjCXkGSeUVOUbOPooP4eXyk711JsEdBYUPc0kpqkPm88a8uyuyBcaozTau+loquWpOThtdFXsqLilKy5NAeSLUVzeWXMVSRFN2O7tnBmU/ayJYCPA3Op84zCqcY5rv1NwFyQAXgj/0QA5nUtN93JK/eECAl+1rp0oe+YxGrr13Xpi/xxcm33wt6MFqGYRrECUVOYpGzL+n72UUFQyMehJRlnIspkcskAbFf1Re940TxocShdMgD7ZH33cYR7+HWKONQOgSMFqyYAX/3qVw9IEwCboWc4/i34U06ZcI7lS7mQL+ilKyEtt66chuDSifk8DJCv6WOCmLhhNL0Ex8wN40DpPrddKkw71xBl2qR0x2y5rDtE210llnO/S0tQHtdzyoyQe4ODLcxoCN05dRVd1jls7d1BwM2mx0Mu/bMwdco4dJHEn0wPCI6KXjRB/z0yNmZ605Uqi/Ioke5QfjMMp0wm4abPdUVdxDGyhYYCoxTOEGVst4yNzeFNzk9Wy5Yty+m/11577UDer81B4kCp3o6mN1ns0J0Hb8oT0axaGQwhSzTd7bKM4yw7J1gxStvHKHk3iuDgA/fcrONHK3sZk9yFIjj40G+d3SKhckL4HQBez19ieV+jojuojtaiiE7eK7be+VvU+goeJUKTu4oVBfMB88VWYbyF+XXPAHro7658605RBi41zmm19zK1RRec1pUt4tkJ19HgG53lzKElKvl5s+Yi3qteiiZITA+u4sL6+5DI3uWl01HIspIzAb3UKV8JWQoyO1xjqXWPRdLk7p+RGe+556EIDkYnd1OtWLfMNtw087XMLpmPJT2Mepxa2x0aaeWSAViPXhI1idq0lpjZBBmALaq+6J0gpZd9DbUgA7AnqS8ga4ahKGMzNByKJgA2Rx793TKBlFMmNACnDGR2ywRSokxQS3fumbllCtFdF2aijOGWKUwJLx1CeplRsdYB6JkzZhs8pYruWGwRe8qQDLeMUaLUYuKGKZVbcKoJEqIbyW+9ETQuFYK/w3do3a7N3mqiznycSpyKiLUo0+rVQ+9LYuZza6db/yzMujeFXLqjKC+hi1kNvdwpRiCyXw6Zrh26UoHKfhOXjUFccJFMtc02umNlcsskcJJMBf3maWGasnTzzBXDtZXP/pVEDZVbxsbGZv+wa41sDjrzpF34iNOoBVivVh3w1zueVfi0CPVCBZvEgS9IFqbcL697FuU0/tTY6wC8nbcwY4nQgq53casx6lzVrPeYd4cSgMWtLwOwOnAMLRYtLX1qhBNbXwLgzZLTac1gZR7f8TGTW5eDIPDWyIu667szIWkK8xpe5MTdD+OWI7R7KvjvuGt5feQl3TtaBwpFkNhcNJcnJ36ZnYVHIWgqi1tf4pymR3HkIMioiDxTcSlxyUtVbDfHdLxnKchowPMFek7NsV0fdtf696bcE0IDXvUuAWBx3Fq4iQge1rj0LlsnpErhrPhQ0h1Tc5SPgcyCDMAqQXfpzGRTxnFmxDQH21X9d2Sa2DDg8wfDDkVftI7xDi9RZjg6Aw5XDkUTAJuhZ7j9TeSlOraF1NxLP7JRYLgLTEQZSBdmCtHngo4MTpmilCjTLhamHXOgUKh26P/jS196l6gpUUbqmw1T4Ql2lyg1O9LnfxGNqqQuXOxzWne1HBfRN9p2+Cah9CuZPphumV0F+lqnJrTZtJW1QYtXfy+lkX1pxxKiu7tEKWAiyvSUNqXnpRmiTL5s3rGoK+VIzlPCNMbNfzeM9uQOLZlT0G8olSMkaTJebWDdlzKVMIXQ7yO/V07NoXTL2CVMNjb7hy3KHCL+l612bkFmgUMvYVomD6wLy0BKlwy8JFiCnuHyqmPgDoCFsfeQNJkdzrHUOrJ3jToh9j5+JUybo6Q7LNYMvxrpdmK8WHCmpYAzKlbLxPAGNEHilbKllq6ao4MfMiayFVl08nTlZSQF68l8Xv2L1AQ3o4hOXh19VU7CDMCY4AYu2Hobk1o/BE1jV8F0np74JV4efTW7AlNRhKGzl8ckH+tKFvD4pJt4v3opCYeXilgd1+z9G/Pb38ipZEkD/lt2Hvu8o3EpMc5reJgR7vQ6coO13qPY7pmAQ0tyevCltOPlHn33bL1zCnsd1bi1OIti71pe70PXHJKCkxp1L+PUWstxCiIfOXRR5lhlZVZBBmAl+kPDHK1vd6hcXDIb1CoUJEqEMJVCX+HpQLhkWoqm0prUfzfGeodPS+zh9vB5uGM3AbAZKnq7ZQynTOcAnTJg7ZYpFHRhvsOim1J/itAf4tuEQtPjpT65W3RpE9KzXwBKNT2wtkVID+UtSzllmsX0DRWjRKnRad4FcWRC7+q3yz2aCrd5ecyI2B78coi45GW7P33ddTCEGUWQ2FGob1KM6bSOOohJvu5MmdJouihjtNP2JoOmHZSCLv3zzU+kizKdqYDggIUoEzZKnxRrp4xRSp6vhHJahxiiTJ7WldP4XDHK5PbXKQNHhlvmf/m5yubIwBZlbA4Jp0j67v7LcvbymaHgHE2fcJY5F5Eg99225mgxBVqIY+MrAXjJc0rWc1wkWRjWs2BeCZyasWTqpNAyPGqUfa6ajNkyJ7W8gENNsss3nnX55uME4OzGx/HJYZrcI3ildKnlQktE5cQ9j1IZ3klScvPKmKvZlzc+63sD8ChR5tc/x9Jtf2N05wbQNOryJ/D6qMt4ZPL/8Xb1BdQGpnW3rMwVDQg5i9haNJvXRl3Ow1P+jxVVpxNxBsiTg5zS/Cyf3Hs7VfH0RZoVbxefwscFxyJoKuc2PkKhbN1pKCa4ebzwQgBOCi6jSOnoc9wQZACe8p0DwImxt/FnqBF/278AgNOSmUWkNdIMOoUCAlqQGcrGLO8KmiliqzAGQVM5ho+7/z0XQQZghaKLcLOlPQi9buxACDIAWyP631y1W8YvHYSaRZuDht0E4MhkOAmWhZI+jyU0iZg68N8jM2GmWNAfZFs165Kf3m6ZklT5USuFluNHO1JlRoJ5eUqFlhJXxDLK+3Xhq1T0BggNUrrwMlPcAkCTo9y0McDYxE4AdrpTWS0mwoyIxoyQvo5ZE0h3s8GBF2b25k8i5sjDmwxREzIP0AdoTAUBF8aa8CjprtZWj+6wLommlzapiATd+udfaJJH0+FMHUuad0E0WosHTAKEDYwuWPn9hBurEqagkHL1qD3jB1LCZOWWMUrpjNK64YDtlrGxGTwD33awOeI5kHkyBqc6NvHduMo6tZo9aiEjxY4D8poGx7GGMrWZZrGMNx3zOVV+M/tJvTgz+grve+bxjuc4Lok8QZFqvstisCj8Fq/nL6HOVc1a71HMjJp358lTuzgl+CrPFZ7LswXnWrZfLpLbOKHtVd4oPZNXS89hdHSH6U5PvhJkaePDPDTi03xccAyliUZGxsyzTBxaklN2/Ydloy6nLn8Cr46+imPrX2RK2/KcdnOK440s2fMwQVcxW4tms71wFlFnPtuLZrG9aBag72QVxZrIS3bgT3biVOI41ASaIKIKEjHJR9SZT9BVQoennJij7wK5MraXWZ3LmR5anVOpkoGGLsi8m2oTfnrz00yMbLIsWwJ4qvB8Oh2FlCabOTX0Sp9jvQWZ9c4pbHBNRdJkzon81/J6u6QaNkhTEDWF0+XMWVuvOxYCcIL8PpW+RLa3xzvo+UZT2U5RakGWqyAD8KGiL3rnigPv2jRQ5PLJbKrXRZlJOby3g8Vweug8nFm1alWf/587V//d3L59OwClpaWUlpbaTQBsBoxcPhlH02b8goIDFRmRDtVJpZi9ZCQbhijTrvlQNQFRyCwWl6IL+i1YP0yXobtdWk2cMACVqi7KNAi68FLubet+ODdEmXoTUaZYbcendhER/TQ6K6hO1vU5Pi6uO4/3OauJCW48WpwKdzSt/GZmcAUfFJ3ITt9Ego4C0zVEpSfZJ4NlKNlcrItBEzpWI2YI0TWCgCu7dpoeb/XqokxxLL30NuguRhMkHEoCX6+g34aYk0pPMgdRphDocdI0xr1pIpfhlAko6eXNZnSKqfEm5dD7gyHKFPQTZTqD6yy7iB3pRJ663Z7bbQ5bbFHmEGBb7KBEjHC8tJN3lfE8k5zJl9wDE0kGioTKWclXuMd9Bc85zxiwKDNB3sHE5Da2OifwX+8pXN71eMbxfjXC4tCbvFxwOs8XnM2M6DrTLj4Ai8Nv8l7efNocJbwUOJ1jY+YP8Md2vMOWvOnUe0byXPnFXFZ3t+k1x0S3c1LriywrPZvXSs/ixGgXY4IbTK6ot70+efcDvDviPHYUHc3yEWfT5q1iXt3zOLXcds0CiTbmNr7K7MZlNPpHsTd/MvV54+hwlxF1Bog6s7eLNBA0hdLIPibGtzE19DGlSfPOC5lQEHm57DzWFOhByye2/JdZwQ8zCjJrvDN5P28+gqZyafvDuHq9996CjIrA/f5LADg59ialqvnCDuC1/CUALJLfo0SzduhEcfOmQ3fUXCTlZiFeJhwPwIna8pzG90bWRN6X9UXv8Y6eRe+BcMkYJQgbu/SQwyn+4VG6ZC/aho5lyw5/27uNOb7zrz/k6xVDmCmQkrQqbtoVJ5WOgYsycsVJfUo0ilLlSyoiHXgptuiMVxCYQWdwHWXo3/XNGUSZKvT5qsmkBAmgUksJL2Jl2rERii4wNEllJHDioue7UgDGyrtZ75rKHtfINFGmUOmkNNlMi7OMbe4JzIiZC6DFyVZGR7azyzeejwoWcHLrC+b3eQCEmSbvSOrzxiNoKhPbVliO04B9+XqIfVV4h+mYFm8NYF7a1O7WRa3CeJPp5lJbKm+vKGnedbDDqZeeFWRw1XakOmQV9nPTgu6WMQKaDTpF3VlT2E+UaYoWpzmmrGiJOLoDpQ3a0ddWRmnd/uJoXJa1lXxO12nabNra3sbGJjO2n9jmkHGeUy+7eFI++oB3YWqOODhLfgVJk1kvTWWbOHZA5wvA0oi+gHnZcxKhHNpjnxRahk/potFZyfv+4y3HubQkF7brIs/r+UtocI8wHSehl+A41Ti7feN4u9i6lOrYjneY0/EeCCJvjbyQPfnWAceSprBw3xPMbXgZQVPZVjSbZyd8kebUwidXRFSqumo5tuG/nLftdq7YcCtn7biLBXufZGbTG0xsW8nozvVUh7ZQE9zMqM4NTGr7iKObXmfB3ic5Z9sdXLnhl3ym/u8sant1UIJMUArwUPVnWJMqWTq96SkuiL6YUZCpc1bxQPEVgP4zmxi3bkf9mmcxtc7ReNUIF3Y9bTku6XOyLOV+uST5VMZ7ftNxAhHBR7XWwGzMxbPehPDzHnoJ28m8BwzMJbNGrSaMhwBRZoj64v5AlS0ZGKLMVP/wccrY2NhkZ7gImMWpsN82xTXoa/R+4HQJCkWpLI5m1Tq8F3Rhphz9Ib4RcxcMwAh0J0yTUGaaEVet6uU2e4WeBgfGQ3mh2kmeGkYTROoc6aLNOFkX0He5zLseTonpJeGbvD0l4WZlTPM63gJgVcE8wtLASoz3h1Wpz35C+yryM5UGuUsJu4oQVZkqE6dMTPJ2582URfakHW/36p+dmYtGQaI95ZQpSaSvLzSgM4uTBqBd0oUbo1V5Njq6RZmOnMbngoxIR0qUKTYRZez22DY2hx+2KGPTh4NZD3qWYz1eEmxTy1mlZg/QHUzIb29KtHYWy3oo62POpQM+f3biY0bJu4mJXp7znZF1vFeLcUZQL295vuBsIoJ5kj/A9NgGjo6sRhUkni+/yLRuHPSdrjOa9If894pPYot/muk4ATil5TmmhD5GFRy8PupSdmdofy0AM1re4bTae/AlOwm6S3h+3Gf5oOosEqIn63s1w6klKY/sYWLHamY3LWNB3dMs2fMIp+66n1N2P8BJex5mft2zzGp6nYkdq5nBLmoyiCfZ2OKfxj9H3cge71hcapxP1P+Hs+KvZzwnJOZxZ+nniIseJsS2cnbn832O93bJtIsFPOi/CICLI08R0MwDg8u8bdznuhRFcHCMvIpJ6nbL19eAp5x6t6eLtBct3VS9eZkFJAUnE7RaxrN7QIIMwKupHKcTHVuRslj29wdjp6xLEbozZWbmHXpRZrg8ZNrY2OSGXD6ZEkn/7tgfUaY/ZaL+/d6kZRZlACpSpUntQiFxi1y6CpqRNIWE4DIN+61RdRG8TqxC6bX8Lve2IQA1su782C2lr4fGJ3WBYp/HfLNkckxfu230TO0zi/QXZsZGtlIV240sungnw8bOUObL7MubQEPeOERVZmZzZpfyntQ6pbKrFqeaPl80pZoSBOIteJR00anNo4syRSaiTJurBE2QcKkx8kyCfLukfJKiC0FTKcggHLU79J9toWw9pjc9oszQOFoAOgmgCSKCpnZ3BhsKhirw186WsbEZOLYoc5D5X1Vwe+fJGOQLcc526Gr+w8k5B+U+Lkrq7obXHQupFwbWyllE4+IuXRD5r/cU2kzaXvbnhPA7VCQb6JLyeLbw3IxjL25/lDwlRLO7kjdKT7ccNz28hrkdetemZysuod5t3gZTROPcxkd6CTOXsLXIOkwYoKqrlvO23s649jUgCGwqOY4nJt3IxuLjhrSzUm8qPcn9WgC2O4p5tOoanqi6ipjkozK2j0/v+TOLlJUZzwuLfm4vu552RzFlySY+3fovpF517v3Llv6W/xmioo9xyZ2cHjUvMSvztrFdHMOrjhMB+GTigYz3sEaawTZpHG4tzid4Oaf3+6yg5+Scpb1B4QAFGegRZU526IumA1m2BLAm5EJFoMolU+7KPRfIxsZmeDAchMwSh/6A3rqfokxvt4zRea5Ry15iOyp/NN5UqHs95msHBypVKbdM2JvevrpCa8atxUkKTuqF9OyYMbKe8VXrSO+GOCmpOzj3OmrwedO/RyfGt+JS47Q7itnr7Cvc9BZmBOCkFn2zaHXgGEtnLgyNMJMUnLw/Qt94mNK2nLyktTChATsKZwIw2qLkusHImwmnu2g0erfSrks73uzSBZuyeKN5aZNLL20qSLYj9cqw65/N0+rQ3VLFirmbpn/gb1vKWVOspjtrBhv420LqmnT2WbfY6PyvPmvZHN7YoozNIeUSp/7g/GzyKMLa0O2AWTFJ3cFceRWK4OAh14UDPn9OYg2TkltJCG4e8X8i63gJlYvbHwXgvbwFbHeNsxybp3ZxeduDAHxUuJBtPmtny0ktLzImspWk6OLRqk92W3LNXn9p4yPMCK5EEyTerT6fFRWnoGWI8nWrMRbte4LTdt5DQayZmMPP8hFn8cTEG9lUfCxJYWhqzfdXjAlL+bxaejZ3jfoK2/1TEDWZ49te5+q9f2equDfzuSlBpt41goDSyedb/oFf7XHp9BZkAJ73ns4613RcWpwvhsyzfEBfFN7u/gyaIHJi8h2mqNalUAAPOHXnzfm8klMHhZ1Us0qYjqQpnMvAd7S2K6VsVctxInOSY8sBL1sC+CioO62OCex/OOf+MhweLm1sbAZOcZ7eurp5CJ0yFQMQZQQBRkq6oFBnIcoAjEIvUdrNiLQMEBGNUapeclMr9hVeyr1tjJV3AbDTmV6iVKCFqE45aTY7J6Ydd2lJpsb0zn2ZOjkCjIzVMjW0BgSRF8suQLFw5sL+CzMrKk8j7CrGn+jk6KY3Mo5t91TQ4SlHVGXGdJqLMvV5+hrKrLQp5Com7vAhqjJF8ca0401uvWysPJHuogFodepCWkmG0umE4CSY6r5UKpvn0vSnRdRFnBILEWcwNKdEGSOA2ozBljAdCe2xbWwOR2xRxuaQcqy0i3FiMxHcPJGcdVBe86rEIwC85DiJRiF9NysTAnBV+GEA3nLPZ7tjTNZzJsS3c3xYz/54sPhy4oL1onJ6bAOLQ/rC5dmKi2lzmtevS6hcUP8A5fE6Io48HhzxGTpTXQP6I6JydtNjLGjT3R3ryhbx6ugriUm+jPc9omsH5227nfn7nsGbDNLlKuSDEefw6OSv8mHlGbS7B/bZGeyvGNPgHsHz5Rfyt9H/x0eFJ6CITsZEtvKZ3bdxYtvLVLszixstUgm3ld9InauafCXIl5r+SlmvxVV/QWaDczIP+XUB75rwQ1Qr6W04QXfJvOJYwsfSDFxanM8l7sl4H2vFqaxyHI1Dk/mUljk42uBhQd9xPIGPmFiQveSvP8/LekeG+dJOfBXzBnx+LvQP+PsgJcocG4gdkNfLFVuQsbEZPIf676fUpbsBmmX3fl/LcMtUCimRRS3M6byRgv4AvJf0zBeDUejCyS7B3ME6RtXdMDvFdOHlGEkv0a51jDItYZ6a1N2N611T08JkAWZH9E5oK/1z+pRHQXoZ08ktL+BRIjR6qllWmrkce7Dz9a7AVDaX6PPMgn1P4VIzC/PbCnUxaWRoCy41fb4IOwvo8JSDppl2ZjJKm0pi9Uhaupuo0RBl4uZzeKsrJcqY5M0YtDh0N41HjeJTs5dbK4jd5UtmTpnB0pzKNipl6ISeocYuYbKxGRi2KHMQGe52ukPxBSoIcI3zAwDuSR6PquXSjHn/mKFuYra8Bllwcp/rkgGfP0HeycLYu2iCyL/yrjIN9OvPeR1PUyi30+Is46nC8zOOXdrxDNXRXcQlL49XXU1cNF+EurU4l9b9i+JEM0FnEQ9Uf9ZSmBGARW2vcm7DwzjUJPvyJ/LMhOto8JmHBhqIqExqX8GFW25jXt3z5MfbSDi8bCidz9MTb+DZcZ9nbelCOtylWdNQ9keM6XAU8UHhQv5d8yX+PfIG1gbmoohOqqO1XLrvn1xa9y9Kki0ZA30BdrjG8oeKm2lyVlAot3ND01+okJu6j/cXZBrEcv4YuB5VkDgh9j4nxczr4cu8bbQLBfzNfS2gC38VmvXCTgPu814JwAW8zAiyhxqH8PMUpwLwWd/GrOPTXlODJ5N6uZMRsj3U9BdkgrLAxyFdhFxQeGhFGRsbm/3jUAozRuljk7L/ogzowky12AHAPq0wp3NGiXquzF7BWpQZp+lOmJ3oonl/t8x4tRaA7VJ6s4EarQ6f2kVCcLPbkZ4dc1RCd4+sdh2FBmnCzLToBvxKmKBUwCZPutO2tzCTp4Q4u/ExAFYUnsD6vMylsAOdu5u91bxVo29mTGt5lxFd5p2UDGTByfYi/R4mtpuXHu9NNSwoj+wxzZNp8OvrmYqu2rRjGtCQKvWujKd3bQJocqfKmyycNADNDl24KU+ad3cyMEqY2sQiFMGBQ0tSZBH0O5gSpqZUF7DyVNaRFXbgr43N4YMtytgccMzyZHpzkXMVecTYrpaxTEm35cL+h/z259OprI+XHSexU0yv387GFeFH8aoRdjjH8pL35KzjvVqMK9vuB/QyplXeWZZjHShc0PAAeXInra5ynqi80tJe7Fe6uHzf3RQlWuh0FnNfzXU0u6yt1dPDa7hm7+0UJ5qJOAv479hPsbzyzKwlSQ4tydS25Vyw9TZOqf0PI4MbETSFVl81KytP5amJX+bRyV/lrepPsKn4GFo8I5AFR7cQM5AFnYpAm7OEdfmzeKnsPO4YdQt/H/M1Xi89iwZPNaImMy20mqv2/p2r9v2DsdFtCJBRkFEReDX/ZP5SfgNdUh41iT3c3PiHjIJMu1jALwtvISzmMS65k8+F/m26CCvztqEBv3V/mZCQz3hlR9aOS29J81klTMetxfm89lBOn8vDnE1U8DJJbGShZB0ebMUKZRQ7tVK8JDi5Kj2E8kDwTocXBYFx3iQj3IcuT+ZQ7/Lb2NjsH+UuXdxoJHsob67UpJwv+3J0yowWdFdCo8O6m+E4dFFmOz3rit7CzARVd3iYdYAU0Zih6l2UzEqUpic3ImkyTVI59ZKeSdNbmHGgcGzXhwC8n2fe8bG3MDMxsonj214H4PmKizKWTEPuwkyHu4xXR1+pb5yEtjK34ZWs5+wsnEFC8pKXaGdE2Hx+2x3Q729kaJPp8Ub/GP0+u3alHQu5iohJPiRNpsyktEmjb+ZM2rVTuTJNTn19VSGnjzGjSdKdNWVKa05B/rnSLOiiTNkBcsrYgb82NgcfR/YhNjYHljwhwZWuD7kjsYi/JxZximPLkF6/OZL+az5V3cJC+T3edszn765Pc2vsJzn4XXoo1IJc3vUY/8y/hof9FzInvoZyNXN98cT4Nk4JvsKrgVN5qPgyahr39imb6c0ERyMX193Lf2o+zy7fBJ6vuJBzGx9FMJnU85UgV+y7k4dGXEuru4L7qz/PJ+r/w6hYrem1yxONfHLPX3m17BzWBo5hY+nx1BVM4tTmZ/G37cj4OYho1IS3UhPeSlTyszswhd2BqTT4xxBxBthRdDQ7UrtdaCqFcjuFyTby5BB+JYRbjeNUE93vQxacJEQXEclPl5RPh7OIdmcpsthXJBI1hZpoLZPD65kSXtvHNpzNHdMuFfJQ0WVsTrUKnd21ksvaH8Kt9XR26C/IBIU8/l/BLTRLZVQoTXyt8zZcpC9Iy1LtTJ90ns1yx1ycWoJvxP+EA2sBIoaLOz2fAuDTPE55DouqKG7uE84D4IuutxAGYSh7IHksAOfkN5MnDr1A0t8lA/B6u76QPbEwfVfzYGELMjY2Q4fv/OsPyQ50Rcop05gYumVrZfkU2A17tCJUTUDM0o1uTMops1MrtRwzHr08qU6ooEvz4qfvd994RRdlGsVyOgikdc6ZoWxkuWMum5yTOCvaV8zwanGmJjezzjWdFa7ZjIi+mPb6x3e9z+uBk9jgmUaLVEKpku6kqHBHu0WGxW2vEHQWsiF/Fk9UXcGZTU9yVGiV5fur9CRpiFlv4tT5x/H6qEtJSh5KonWcuOcRxCxBtCoC60pPAGBy64em65yY5KMhJbqMDKY/6IecRYRdRQiaQnlkd9rxFq/uPCqP1/UJ8e0+31FATPIhagoliaa04waNDl0MK8uQO9ObJkkXccrU3MbnQkvEQZM/JfZow7d8aTgQeep2ew1gc9hgizI2w4Jrne/xz8R8PlLG8KE8imMd6ZPqUPP5+D18IB3DSscs3pOOZYHy4YDOPzn2Ju+557HJNZm/51/Ldzt/k3Un5KzOF9jhHsdO9zjuKv0sNzf+AY9mXmddkajngoYHeKzqGjbkz8KpJjmj+UlT0SRfCXHVvn/w6IhPUucZxUPVn+H05qc5OviR6bXdWoKzm55gSngt/y27gE5nMY+N+CRjCrdycssLlCV6doHMFmD6jlkHY6PvQ/R9koKDfZ5R7PaOo8FdTb2nhpjko8NZQodFLk4mJDVJRbyOEfG9jIrsYFR0J26TzymTIKMg8lbeIl4oOIuE6MapJriw43GO6/qgz2do5pC5teCr7HNUU6h08M2O31OgpdfvG4LMWnEqd7g+DcAXEv9mrJr5d/cR/2U0COVUak18Snss41iDBziXDqGA0UIr5zrW5nROb1pVH8/J0wG4LJA5BHkwmAkysgZvduh5MkuKDp0oY2Njc/hTmRJlwopIe/EUitrM3RIDYYQjhoRKAidNWn53NyYrxov6g/UutQR//ky6QulloIWEKNNaaRZK2MpoZqHfZ6lPpiXiII8II9W97BFr2CxN5DhlRZ/zZyn69/sm1yRUhLQ1xbHxlaxzTWe5ey5LU6JMhSfYXS5TLjczJbqRTd6pLAucxCWpRgP9MYQZAY1zGh9DQ2Bj/tE8X3Ex9Z6RnNTyAk7N3BljJsyoiKwtW8ia8iVogkh5125O2v2gaVvr/uwqmE7QXYpbjjC53XzNsiswFU2QKI7WU5BIF5r25Y/X339kj+lrNqbyZmqi6S4a6CltKk00ZtxUaXDqbprKpHWJU28MR1NVFmdNU7SYcm/uAksDuihTmUPpc2dwHQWBGTlf28DRuKxPt7LB4mjabLpGsLGx6Ystyhwkhntt46G2GFaIIS5yruLB5LH8JbGEfzkyh6QOBVVaIxcln+ZB10X8zX0tcyNrcJN9AWEgonFd6J98u+hHbHJN5jnvGd2LJCskVD7V8m9+X3ELjc5K7iu5ms+0WHfzGRfZyrmNj/BMxaWsKTgWUVM4reVZ050krxrl8n1383z5hWzKn8mL5Z+gwV3NKS3P4dBkk6vDuMg2PrP7T7xfvIQPC0+g1jeRu0eOZ1r4Y+a3vU5psjkny7JTkxkT3cGYqF43rgERyU+rq5xORyFhRz4RyU9CcJMUXWgIaIKAU03iVBN41Qh5coh8uZOSZDMFyfasApeVIKMBGzzTeLbwXBqcerDf2PgOLmt7qE+5EphkyEjl/KrgZhqlcoqUNr7T+VsqTHa4DEGmSSjhp56vowgOliTf4rzkCxnvuck3hv+gO16+o/0Nbw6/b0H8/EvQuzTd5F6GQxh4+8uHkseQwMlR7k6ONgmIPBB8FHTTKUsUOhRmH6LOS/YOmY3N0HMo3DI+SSMgKQQViYaEg/zyyfu9bnEIGlWOGHtlH3u0IirJ/N1YJXTiIUEMF3u0IsYGZphmdkyklmZK2MLYblEGeoSZKcoW9og1bJQmpYkyk9Tt+LQuwkIetY5RjJP7igjHxlfxr7yr2OEcS7NYQpmqCxS9hZlTQq+yyTuV5f55nBZ8mULFug016NlxSxsfoTjRwjvFJ7Gq4Di2+yaxqO0VpoTWmooUhjCjIrI7MIWPyxbT7tUFi3Hta1hQ97Rp2G5/VAQ+LlsEwNTW9y1FnJ2FRwEwttN8U6IubwKAZelTkz8lysSsRBm9NXhlLL2Vdu97NcqXchFlGmMBGgK6KFOp5FbulCsN6Nk2VTmIMv/r2G4Zm8MFW5SxGTZc53qLR5JzeFOZyEfyKI45CG6ZKxKP8orjRBrESu5zXcJnE/8Z0PnlagvXdD3AP/Kv5RH/BUxJbmGinDnQrkANcm3rP/lz+ZdZ753Bk4UX8ImOJ9IcMJXuCA1xH1PDa1EEiefKL2JV4fEkRRdnNT1hagl2aknOa3yI0kQTbxefzOqCedR5ajiv4SFKkualUm4twYmtLzGz8yPeKDmdzflHsSF/FhvyZzGhayPz2t+mJlY7oPIuAT3vxh9N75Cwv1iJMSoCGzzTeCVwKrvcYwDwKV0s7XyGeV3L00Se/oLMeudk/hj4El2inzKlme90/Na0JM0QZEL4+a7n+3SIhYxTarkl/teMn1GeT+QLwldRBYkztTdYhPmOYH/uEC4nJOQxSWxkqWPgAb1xTeKe5HEAXF2wZ8DnZ8NqB+zFVr2718lFURwHPr87DXsRZmNz4DgUwkyVWyEYkWiIS0z07V+rZoORzih7ZR+71BKOlcwf2A1EQWO82Mx6tZqtajljRfOQ1Sns4F3mslkYh9newjRlCy87T2a9mJ7hIqEyS1nHu47j2O4bz7hg33sq0IJMTW5mg2sq73qO4/zI893HDGFmXHwH42Lb2eEZz8uB07K6ZQAENBa2v8aI+B5eLLuAoLOI5you4bXSs5kcXk91bBfFiRZcapyE6KbTWcSesrFs800m5CwEwC1HmFf/AmM71+a8XtheOIsOTwVOJcaU1uWmYzpdJTT6xyBoKmM70kUwWXBQl6c7ZapDW9OORyU/HR5dHLFyytR59GBmqxBggCZHObLgxKXGKc6xvXWdpAtVVUMoynThIyTkAVBJbm25B+uWsbGxOXjYQb82w4bRYjuXOPXU/V8nTkMbukw0S7zEuTH+DwAecV7AVnHcgK9xYuwd5sc+QBEc3Ba4jpDgz3rO6MRurmzVg3/fyl/MsvzMFtEZodV6poymsC4wh6cqLycpmGuqAnBC+zIuqf83XqWLJvcI/jXyBlYUHI+WYalUJLdxQeODfHr3n5kY3gCayjb/VO6v+Tx3j7yRjwrmExEzt9E+0JgJMlHBw1t5C/l15de5q+xz7HKPwakmODn4Kt+t/znHd33QR5Ap94T6CDIa8IL3VP5fwS10iX4mJLfz4/ZbMwoyUdz80PttdkmjKFFb+UnsF3ixdoOU+WR+K3yWWqGGMq2Vb2p35PR+d1DDQ8K5AHzX/QJSlswDM55IzqJJC1ApxTgnLzfLda5YCTJJFV5KiTJnl2ZvG2pjY2OTjapUWHh9Qg++H4qSiDFO/ftph3dOTuMnifrD9RZVf9g2e9Cdpm0DYD3pYb2lPpmjlPUAbJAmkTTZG50n6+ug5Y45piUtC2PvA/Cme0Ga5lPhCSIAZ3fqYs0H/uNodFiH//dvlT0uspXP7/4DJ7b8lzw5SFTys7pgHs9VXMK9I6/nrtE3c+/I63m68nJWFRxHyFmIV+liZtMbXLD1z4wbgCCTEN2srDwFgKOb3sBt0gYbYGuR/rOpDm3FL6e7meryxqOITvyJDopj6XOckUVTHq83bWOtIlDv0TNnRsSsNy42Cvp1RiTrcgrtlZFoTGXK1CjWYo9Brl2Y6kX9moVaZ1pm0VBjB/7a2Bw8bFHG5oCSrfNSf250vY6LJB8qY3jdohPTUDNf+ZDFyXdQBYnfuL9sukjKhAB8JnwvFXIjrVIJfw58gRJPV9bzZkdXc16H3qXnmcLzeNc/P21MbxFiengNFzQ8gKTJbMmbzgPVn6NLshaAxkW2ce3u2xgd2YYsunilbCn3V3+OFmdZxvuqSNRzYcN/+NzuP3J053IcaoIWdyWvlp3Ln8d+i0eqPsma/LkZX3uoqXRH+nwWSRys80znnpJr+OGIH/N40UU0OKtwqzFODr7K9+p/xtLOZ/FpfRcs/d0xISGP3wW+zH15l6MIDubHPuC7Hb/JmCETw8WPPN9inTQNv9bFL2I/pVyz3q0q88k8yxIeE85C0FR+ov2BQkKW4w004OfCl5CROEXaxCLHwDsuJTSJvypnAHBt4S5cgxB1rMj0QPRGh5cOWaLEqTCv4OC3wrZdMjY2B56D/XdWmerAVB/vmaP3V5gxRJnaZG7z2eSUKLNJ7WmL3V+YmYbu1tjOKGK40q4xx7uLAq2ThOBmszgh7fg8RRdlNoqTaBcK0oSZ4+If4dZiNDgq2WTSpQlgXGIn06LrUQWJJ4o+kVFC6C/MOLUkx3e8yfW1v+KSun9xTMfbVEdrCSTb8SgR8pMdjIjuYnbH+1xUdy/X1/6Ks4Iv4VEGJsCvLl9CzJFHIN7ClDZzl4wiONhWNAuASe0rTMfsDkwFYFRwk6kgVJ+nb7aNiprPoa2uchKiB6ca75On15/GVIlTdSK7wALQ7CxDFSS8aoRCNXMJ2UBoEHTXTzVDWxJ1JDPcIyRsbMAuXzoo2F8GuVMlBvmU8wP+kVzIr+Kns1jaNih3wEC5IXEnaxwz2CmN4T7XpVybuH9A5/u0GDcH/8qPir7DOtd0HvRfxGmxzPkyACeFXics5vFa4BQeLboYhyYzL2IdODypayOX7bubx6uupt4zkntqrufC+v9Qkag3HZ+vhLis7l+sKpjH6yVnsNc7hn+O+jLzOt7h+LY3TMNzDUqSLZzZ/BRLWv/L+vxZrMufTYOnhh3+yezwTwZNpSq+j9GR7YyK7qQqvhePxU7X/lDpjqAi0OCsZLt7PFs8k9jinkRCdHePqUg2sCD8Lsd2fYhXM7+H/oLMh645/DP/KjrFAhxakqvCD3NabJll22uACB5+6Pk2axxH4dGi/Dz604zBvmU+mc2M5efCDQB8gYc4ntzauz/FqawUZuAhwQ89z+V0Tn8eT85ir+ylVIpz+QEI+LV83SbdWn1+WddBL12yBRkbmyOTEW5dlNkXH7ql61jDKZP0IY88KaszYKqoz7UblCrLMZW0UKq10iKUsFEbz2w29jkuAPNYy8ssZJV0VHcbbIMyrZWJyja2ShN4TzqWs+W+XZg8xFkQ+4Bl3hN52XMyU5N9S3aMMqbzO57S50vPZFb65jA3stLynnuXMhmIaIyLbGVcJL0kyPR9Z+nM1Jsm30g2lehltfPqX7DMn9lRcBRxhx9/ooPq0La047Lg6BZlRgc3pB3XgH35unA1NpJ+PsAe7xhAd8lk6hRV79HDgGuSuc2lDQ5duKtR6gZU/p2NOjHVultuBCn38+zAXxub4Y0tytgMO1vh9e43eSg5l81qJQ8mj+Hc6J0H/DWLtE5ujN3Bz7xf5yHnJ5grr2ammj7BZ2KUso/rgnfzp4Lred53Bv5YJwu63st63rmdz5IQXLydv4gHiy9HFUSO7/qg+7iRLWMwMraLa/b+jUerPkm7q5T7aq7jtOanmRkyX3AJaMzp/IAJXZt4qew8tvun8H7RiXycP5dFba8wM7gi40LEo8aY2/k+czvfp81Zwsa8mWzzT6XBU029ZyT1npG8zxIAihNNlMcbKEs0UpxooVBuI5DswKtGTcOJ+6MgEXbkE3QUIvsCNDnL2eusYa+rhpjYd8FYIHcwK7qaOV0rGZnck3HR01uQaRZLuC/vMj5ypyzR8j6+FLyTMYq5bdkQZNqFAr7v+S5bpAl4U4LMNDVz+/YmirlJ+B4xwc0CbSWf1x7K+hmA3lnht+IXALjZ/Ro1YkdO5/Umqjn5g3wmAF8orMUrDjwg2IpMC6vGuMSb7XrXpQvLw0P2mjY2NsOPg5ktU50qX6qL930Slfcj9He8S/+O2pnwI2sCVGQWZqZJuihTq5US0tzkC/rGRkGv0F8BOJpNvMoJrGZqmigDcJy2hpeFhax0HM01yUfSji+W32OrNIE3HfM5W36Fcm9bn/KW06LLWOY9kY/cs2nrKqRY7ehzfoUnCDE4rfNlXig8mycLL2BibCsB1dqlaSbMDBSjMUAmcSYpunir5kI0QWR8+2qqLcJ5NQTWl+oO4ilty03XKfvyJ5KU3PgTHZRH0ufwdncFEWcAh5pglEXG3W7PWADL46CXODWmOjSNjmfOHjKoTzUaqJFzc9bkyj5Rv261Zr4ZZ2OOHfhrM9yxRRmbYUehEOWr7lf5Ufxcfhs/lYU8lFO5x/6yWHmPM5Kv8l/nKfzSczN/i3x1wNc4LrGCi7ue5FH/BTxWdBGFSgfTYukLst4IwIUdjwPwdv4iHiq+nJjgYUn4je4x/YWZ4mQrn9x7O89WXMJ2/xReqLiIPd4xnNr8LG7NvHtBQO7kovp72eabwrLSs2h3lfLf8gtYXriQBe3LmBb6OKM4Y7zuCe3LOKF9GUEpwG7fOHZ5x7PXM5oOVwltrnLaXOX0b1YqagpeJYJbjeFSEwgoiJqGKogogoOE6CImeomJHhDMqypdapwxiVomxLYxNbaR6uS+nHafDEEmInh51nsGz/tOJym4kDSZcyMvckHkWVyYd6cyBJldQg0/8H6HerGSAq2Tn0d/xiQ1czmR1+fk88L3aRTKGKvt4Vbt10hZPl/QF38/c36HsOJhlriHzzizC3tm3OW6gqawh2pHlCuHMOA3207XE81+VATm5scY5zX/XA8U9oLLxubgc7CEmRqP/n2yJ5a+dB2sMFPtiOEVFKKaxJ6kl7GuzCU4JUIXVUIH9VohG9Uq5km13cd6CzNHa5t4VTiB1cI00B5Pu87xrAb0EqUufPjp+7oL5fe5y30Nq6SZdBCgkGAfYWa0spfJiS1sdk3iJe/JXN6V/hoVniAnhZax2jeLetcI7i+5ki8035ExD2UohBmwds1owHsjziXsKsKf6GBevXXHwt35k+n0lONUYkxqMy9d2l44E4CxnetMN372BiYBMDq6w7QLpYbAHq8uyozMIMroJU5u3GqM8n5dHK2od6VEGcW6o1N/cmmNvU9IiTKqLcrY2BxJ2JkyNsOSK50fMllsoAMffxauPmiv+6X4XVSrdbSIpfzSczPqIEynF0SeZVFMz6j5V8mnqXWNznqOIcwsCeo7dE8VXcDTBUszvr5HjXFR/X0san0ZNJV1gbn8a+SXqXPXZHydiZFNfHb3nzil+Vl8cph2VynPVVzCHaNvYUXB8SSE3OzHASXIjNBqzml6jOt2/44bd/yci+v+zZKWF5keXMWI6C58sr4LqQoSXY582lxlKYfNKPZ5R1PvGUmTu4oOZwkxyQeCiKTJlMgtTIluZHHoDS5ve4CvNfyaX+z7Dtc3/43TQq9Qk4MgYwT6RgU3T3vP4ubiX/KU/1ySgoupiU38ov0nXBp5Mqsg8550LDf5fkm9WEml2sDvIt/NKsgEfAJfFb7LJmE8RVoHf9J+QoDsOUMAD3pu4B1lAh4S/Mb7+KBaYO8tPo2/tesLzZuLtw1Zlkw2QUbW4OFGvXTp4orc3u9QYQsyNjZHNqNSLozmpIOIMjQFIaLQ45bZktC/u7KVahwl6s6HjxXruXYOepjvKqahmCy1q2lkjLYXRXCwQjo67XiNVs9EZRuqIPG6c2H3v/d+YD87+hIAL3tOImzRYKDa0841rffiVBNs8UzmpcDpGd8bpGfMDJZKT7LbOWOwvvQEdhbORNBUFu19HJdqXkKtIbCmfAkAU1qXm46LSn725uuiy7gO87Lg3fl6h6sJXeabY82uciKOPJxqghEx67KkvR59HTcqsTunkF+Afc6Us0Ye2k6iu0X9926UOnAHjlkL91w4UgJ/7TgJm+GM7ZQ5wNhfAIPDIaj82P0sl0c/x+OcwQW8wgxyq2veH7zE+H7s19zk/SUfOebwhG8pF0WeHtA1BOBzoXsICgHWuI/iH6Wf54bmvzAimXlXQwDO63yaPDXMs4VLWRY4mQ5HIZe3PYhLS6a5ZfRzNBa0v87IaC3PVFxCh6uE+2qu49iOt1nY9hpOzbxtqITCMZ3vMTO4gpUFx/Nh4Ql0Oot5pWwpbxWfylGhlczqXG7ZRtsMnxphfGQL4yN9S3oUJLoceURFHwnRRUJ0oyKiCSKipiBpCpWOID41gl/twq927Xf9dbknRKtYxMvek3jVcyIRUV+wVsv7uKTrKY5JrMz4GmXeNmQk/uW6koddnwDgKGU9P4j+ioIsrq2AT+Brwrf4UJiJT4vwZ+3H1OQYyLfFv5TfRfVuFD/yPMc4MffP30AuX8yvGycS0RzMdnewdIg7LmXilTYvDQkHJU6Fs0oOnihjCzI2NoeWg+GWKXBoBCSFoCKxN+Zgkr/v/DZYt8xkV5h18QI2J/I4A90FIWcoY5op7eUlZTofq+mijOGWmcwO/FqEkJDHNm00k0l3YSziQ2qpYbVnDotNSp1Pld9gqzSBVxwnckGyp/W14ZiZk1jDKHkPux0j+a/3FMu1ytGOrVzc/igPlFzJSwVnUJFsZHZ0dcbPZKgcM9DjmtmVP4UVFacCeo5MRcRarNgVmEq7txKnEmN6q7lbdFvRLDRBoiyyh6J4c9rxsLOAVl81aCoTLUSZWp8etDwyuhMJ81wb6GmZPSZeazmmN12ijw5HEQCj5aFzqobw0y7q1x2p7qUl4qDUd3AdqTY2NgcG2yljM2yZ59jFBY7VaILIT4QbB9wVabCMU3dxY/zvADzuP48VrvRdrGw4UPhK8HbGxHcSkfzcXnY99Y7KrOcJwCmh17ii9X5ETWGVbw5/KbuBTjEAmLeEBhgZq+Uze25jWkj/vJYXLebukTeyw5e5g5VLS3B8x5t8cddvOK3paQoTrcQlLx8VnsCdo2/h3prrWBWYt1+tsCUUAnInFYl6RsZ2MT6yhYmRTUzq2sBCZRXz1Y8Zm6ilQm4ibz8FGQWRvYFx/DZwAzcV/z+e8Z1NRPRTJddzffBOftn+I47NQZDZI4zgFu8vugWZ8xPP8cvoj7MKMvk+ka8K3+Ft4Vg8Wpw/aj9lGrl1TYrmL+SG2OUoSJznWMMlDutQRivk8sW8EynmmXAVAhrfK92MOEQJg9lcMpoGd+/Tf08vrQjjsmcXGxubIWZ0qoSp1qSECQbXjWlyyimzKZGf0/iZou6oWG3hlCkIzMCByiz0XLoPOcp03GJND/V/i2NN3TQnyW8jaTKbpYnsFEelHRfROD+ih8C/6D3V0i0DcK76GotCejfM+0uuZLN7kuVYg6FyzACEi8fx1qiLQRCY3LqcKW3WDQ0UQWJlSryZ2voBbiX9PlQEthQfA8DEdvO5cldgGgA1sV34FfNNgp2pNdIYixBgg71e3SkzJlGbcVz3eKf+u1GabCYUTe/ANVgMl0yZ2oKPg9/Z0MbG5sBhL5v/xzmQVsKBtsM247vuFyjUOtkqjOFuLhqCu8qN0+XXOT+h70z9Nf9z7JFGDPgaHhJ8J/Q7ahJ7CEv5/LX8S9Q5rTs29GZe5EOub74dn9LFbvdoflv5f2x3620drYQZjxpjaeMjXFR3L3lyJx2uEh4Z8WmeqLyie8fGCqeWZE7wA76w+/dcXPdvJnRtRNAU6jyjeKn8fP489ls8OOJaVhQcn/VaudC/xfX+ICOx0TOFh4su4UfVP+K3BTey0j0bTRCZmtjELZ1/5lftP2Bh/P2stuNibwePOpfyJd9v2SxNJE8L8/3or7ghcRdOizInA4/PzZeFH/KuMBePFuNP2k84JmVhz4Y7MJcvRa+gRctnstjALzxPIQxCTImqIj9s1jtRXF2wh6M86a29B0MuDzofBN2s63LjEVWuqjzwGVAGtkvGxmZ4cDD+Fsekcqp2RnMrs82FaW79+2pDvK8oY1XGdLS0FwGVvVoxTaq5kFMQmME87WMA3hdmmY6ZxQYKtSAdQoBdvilpx4u0ThYoeqvoZx19y46MMqZ58RWMkvcQEX086TvH4h3qnN/xFEdHVqMIDu4q/SwbPFMzjoehEWa2+KfyRNWVKIKDSeF1nNf+TMbxG0uOJ+QuxpsMMaPlHdMxe/MnEXYV4ZKjjO0wL8nZWaiLYVPDa02PJwRXd57MuIh1aH/QUUCHswRBUxgbt86d6c1uly6ijUwM3CXTO9C5P7tE3bEzSh28+8YuYbIrGGyGJ7YoYzOsKREjfFO7A4A7hUvZwpiD9trXJf7J1MQmYqKXXxfcRLtYMOBr+LUoX2z+G9WJvYSlfP5SdgO7XSNzOndCfDu3NP6eymQ9ISnAX8u+xKv5J6MiZBQ1JkQ28bldf+SYjncQNIUteTP4x+ibebX0LKJiZjuygMb4yBYuqr+PL9X+iiUtL1AR24cmSOzyTeCVsqX8fczXuGPULfy37Hw25M2k01GYY4X10IgxKgL7nCN4M28Rd5Z+lu9V/4w7yq7jvbwFhMV8CtROzoq8xK/bvsf3On/DMYnVOdWAt/hLucH7a+5wX0tccDNbXsPfI7ewSHk/+z35CviscCsrhKPwaxH+ov2IYzFfCPYnPzCLr8UuYrU6kgIi/M17Pz7BvOwsE3L5Yn7XNoHdso8KKcYtxZl3/nK/bm47z/9IuWQ+UdZFsXPoOj1lwhZkbGyGFwf6b3KsV/9utHLKwMDdMlNduihTJ3vpUPpe10yYyRfiTBb1ktQVarqDxcAI813BDBImTl8HKkvQ55dXhAWmZSjnJvXcmFecS4ji6XOs3NuGiMYVYb1700vek6mXKizvp8rTyVWt/2F6dB2y6OTu0s/woe8Yy/EGgxVmNODDggU8WXklquBgSuhjzmt4CBHVNG8GIOLIY03ZYgDmNL6CUzVvXLCx5HgAJrWvwGFSpt3pKqHVOwJBU5gSMp+La33jUQQHhYlWijOUau/xjAGgMl6PRzPPwOnPbrf+ezEqcWDyZEarPfk3LRE7icLG5kjA/ku2GfacwVu8rC3kNWE+3+dm7tW+ZhnOOpQ4UPhp4hfcKP6Kekclvwl8he91/gpvjpOywVhXI19q+it3lH2BXe4x/LXsS1zb8k8mxzO3UwYoVVq5ufEPPFJ0CSv8x/Bs4VK2uidyRdsDFKhB05wZALcW55SW55kZ/IjXSs+m1jeRjwoX8nHgGI7peJdjO97Bo2a2vuYpYY7reJvjOt6m3VnMFv80tvsns9czmnZXKe2uUlYXzAPAL4coj9dTnqinNNGkt8NOtuFVI1QNUoTRgLCYR7OjjGZnGXXOEexzVrPXVUNc7Ls4LVQ6mJNYzbHxlUxPbsqpy5FBi1jM04GzedW5BIB8LcRn4/dylvxKTqVUjb6x3CJ8hxahhFKtlT9rP2YytTm/x1/Ez+B5eQZOZG73PsBosT3nezeQyxfzfrSIezr1heDPyzeQJ1rXx+d+3dwebtaEXLzX6cUhaHymemjcOdmwBRkbm/89DFFmRySzU2Yg+TL5kkyNI8Je2ceGeIAFvr7db8zyZeaIu9mkVvGRMpqzHOaOyGPy8ygNt9EiFLNSm87xpIfRnqq9y5PC6bzCAr7OPyj1yX0esmcpa6lW69gnjuAl5xLOT77Y5/xybxszoxuYFf+Y1e6Z/DvvCr7Z+QfLuava086nW/7FA8VXsNI/lwdKrqTWPYYL2p/M6AYdaMZMVPTyUtl5bMrXuyPN7PyQM5qfTuvw2LuFtga8P+IcZMlNaWQv4zs+Nr12s7eahryxCJrKZIsyqMZS3SUzNrINn2q+Btnq151C4yObM871tb7xAIyM7sgwqgcN2OXqCQYeSgynzOj9cMrY2NgMT2xR5gBiW+SGBgH4tnY7K5nGFmEcf+Yavqr986C8doAwX+v8Ez8q+ja1ztH8PnADX+/8U9ZSlv74Uo6Zu0s/w1bPJP5R9nmuaHuAuZHsuSFuLcFVbf9hXHwHTxZewGbvFH5d+XUuan+M2dHV3c4TM3GmLNHEZXX/YodvAm+UnEGTewTvFp/MR4UnMKtzOcd0vEu+kv0huijZ1i3QxEU3ezxj2eUbxz7PaBrdVXQ58tnpyGenv2+dukuNU6B0kqeG8StdeLQYHjWGhB7wqyGgCQJJnMRFNzHBQ5fkJyTm0ykVkBTNa7HdaoyJ8nZmJDYyI7mB0fKenDsiGHQKAV4JLOEZ55kkBf11Tku+xufj91BIbsLCe77F/Fz4EgnBxThtN7dpP2EEubXLBLjP8xXuTpwAwP/zPMnxjtoBvQfQBZl2xcnXG2egIXBp/l4W+1oHfJ394Q+7CwFYWtpFtXv/xSAbG5vDlwMZ+jshJcpsizrRNAZV5mnGUe4ge2Uf60xEGTOOl3Zwv3wcHyjjLMcIApzk3MEjcjFvCcdyvJYuyhzHaoq0DtqFQt7XZrGIFX2EGRGNC5LP8Rf353nceS7nJl9K23Qo97ZxTfhB1rumstY1g3fd8zghvtzyvkZ4Oriy7X7K5GZeCpzOe3kL2OaewCXtjzAhbp2BloswowGb/dN5texcwo4AgqZwcssLzO18L6PwUelJsiFvJnsCUxFVhfn7njFtcQ2wtmwRAOM6PiYv2Zl2HRWRxwJzADgqaN5KW0FkW0qUmdS1IeP7qc0xd8agxVFKWMpH0uRBlS9lYoeYyrZRh1bsyRVH47Ks3clyuk7T5kHlPw0Vkadutzd2bIYdtihjc1hQSgc/0v7EzcL3uVf4BPO1VcxPWYMPNJVqE9/o/AM/L/g6613T+Evg89wY/PuA3BjlnhBNMfhC8x38p+QqVvtmc1/JNTQ7yjgj+N+sjgwBWND1HuPj27m35Br2uWq4p/RTrIkczSfan+h2zYC5ODMuso2xke1s8U/lneJTaHZXsrxoER8VLmBKeC1zOt5nRHxPTs4QtxpnQmQTEyKbAEgKTppclTS5qwj7SmlylNPsKKPTUUhCdNMsltNMec6fVZ/3rakUKh2Uyc1UJhuoTuyjJrmXmdLWAYswBk1iKS94T+MN70LighuAo+W1fD7xbyapue2ERXFzt/+zPCXoYYRLtPf5mfZ7/ORu837Y+yV+F9fP/777OS5wmrf0zIRcvhhNg+80TaNR8TDW2cV3SoemXjvXBdO7HW4+CHpwChpfGtmZ/YQhwF5M2dgMbw6UMDPKI+MQNKKqSH1CYkQGEXggbpkZ7iAvdFWyLh4wv1Y/t8xxkp4tslGtpFPzUCCYO09PdmziEfkY3uJYvsadaXOsA5UzeIsHWcrzwhIWaekiwhnJ17jHdTl14gjelo7jRCW9G9FM9ybOjzzLo/5PcE/elUxLbqZItf4+rvJ0ckbwJcbEa3mg5AqaneX8tfwGpkfXcVrwZUZZiAlGKVN/cUZFYIdvMu8XLWZfKhS3ONHEuY2PUhXP3ro5JAV4uWwpAAvalzFN2ItRrdUQ63FFtbkr2BOYAprGUc1vm5ZA7fRNJOwI4FW6mNC1yfT19njHEpN8+OQwNdFay/tqcZUTdgRwqElqYrsgh8xewyUzMrEHR4aOTploihb3aX8OECSPNlHPm9lfUaYzuI6CwIz9uoaNjc3QYosyNocNJ/IhF2sv8KhwFt8TvsqD2k2Ukb3Uo8wn07yfNbfj5F3cEvwLvy74Ch+653J7/mf5UujOAQsDDhSuab2XIrmdZYGT+W/BmTQ6K7i87UHcmnntdG8q5CZubvwDLwdO45XAqazxzWKzZzLndD7HgvC7iGh9Mlt6CzQCGpO7NjCpawM7fJN4v2gxe71j2ZA/iw35syiL13N08COmhdbgVXMTF4zXGkknxDdDr8ouGYl2RxFBMUBIyici+oiJHuKCG1lwoAgSgqYhouLQZNxaHLca1101aheFcgeFSkefRU25JwRSTrfWBxWBDc4pvOJdwkcuPQQYYIqyhU8mHmSusjrnrk9bxHH81nsTO4WRCJrKddoDfJ6HB/S78IDny/wqrgc33uR6jWtd2XNr+iOX63X3d3WM5tVIOU5UflexFp+4/3kuuQoyqga/260HP19eETooLhlbkLGx+d/FKerCzI6okx1RZ0ZRBnIXZoxQ9I8tRBnoK8yUiWEmCE1s08p5TxnPmRYlTAulbbhIskeoYrs2igmkP0yfqy3jQWEprzGfIH4CdPVxy3iJc0Hyee51XcZ/XJewKGoeWr808iIfueZQ6xzNHfnX8vXOP2aclyo8QYht4Zv1/4/nCs/hPf981ntnsN47g+rEXmZHVjE5tpmqZH3adSrcUfYm8ml0V7PNP4VNeTPodOqCgUNNMK/jbY5vfwOnlt1VrCDyVOVlxCQfFbF9HN/+Rp/jvYWXdyqXADAlvJbJYr3p9VYWHAfA9NAqS1FkY55e3jSxa2PGz8jozlQTq83pvQDsSDVlyLV9dq5sk/RQ4iq1Ia3z0uHYGtt2y9jY9MUWZWwOK/5Pu4s1TGGrMJZv8zX+pn0fxwAcK4OhzNtGc7SYGcmN3BT8G38IXM97nuMQUbku9M+cHTO6WyYfEY3zOp+hTG7m0aKLWe2bTZOjnGtb/kmpkr3sxIHCWcEXOSq6loeLL2WPaxSPFV3MB/7j+ET7E4xL9HQH6B+q2xD3IQDjI1sYH9lCg3sEKwrmszHvKJrdVbxStpTXSs9iXGQrU0MfM75rM+5Uhs5AA3odKJTJLZRhHaA3EMo9A+/o0yiW8Y7nON72LKBR6nHrHCOv5JLkU8xS1uYsxiRw8KDrIh5wXowiSJRprfxC+y3HkHsnAw242/NV/pxYAsDNrlf5ivv1nM83MASZ9yJF/LZtAgDfL93EdPf+dz0ayCLpuRYfG7pc+CWV62oOfJaMvYCysTl8OFBumQneJDuiTrZHnCwsHJq2wDPcQUQ06mQvjbKbCkf27Lj5ju1sS5bzbgZRxi8kWCht4zVlKq8x31SUmcY2Jmq1bBXG8IJ2Ipehd37sLcx8IvEsjznPZac0hnek40wD6Ed4m7k+dCffK/o+H7tm8Jz3DJZGX0wb15sKT5DGGFzc/hiLQ2/ySuBUVvlms89Vwz5XDc+yFJcap1huI6AGcWgyccFNSMqnxVGKKvTskniUCDODKzim4x3yldznotdLz2CfdwwuJcb5jQ9arqn2ekaxLW8qgqZyQttrpmM6HEXsSAkpszvNS7gUJLbkTQdgajizQ3WHT58Px3fl7kA1RJlx8dyct7myTdSvOyFHR++BYqhKmGxsbPpid1+yOazwkOBX2q/waxFWCEfxF+Hqg/r6cxJr+HLwDiRN5h3PfG7P/yzKIP+M5ne9z5ea/kqeEqLOVc1vK/+Ptd7c7aQ1yX3c3PgHPtH+OB41yl7XSG6r+Ar3lFxDi1Rieo7R/cj4bxbb+Gznvfyk7odc2P4Y1Ym9qIKDbf6pPFN5GbeN+w7PVF/J9uJZtEn73wp7MJR7QjkLMhqwVxrBU96z+H7hd/lqya085r+ARqkcnxZhaeIF7ojcxC9iP2P2AASZteJUbvT/lvtcl6EIEqdpb/Ow9pUBCTIyIr9yf79bkPk/18v7JcjsTnq5qXEmCiIX5NVxWSC7RTz7tXMXZLoUgd/uKgTgsyOCB63jko2NzeHDgRBSx/t058TWLGG/Brl8r+WJChNdYQBWx6w7LfZ+GF0g6fkr78jjM177jJRg87rD/EFWAC7Q9C5Ljwln9vFtGO6HfLr4RPI5AP7tutxy3THHtZ5Phh8E4CH/hax1Tst4b5ByzADlcjNXtj3Aj+p+xEXtjzIluhG3GiMhumlwVbHFM5kN3uls90ygyVmBKkjkKaFUV6UH+VLtrzip9cUBCTIf58/ho8KFAJzT9ChFSfM8Hw1YVnoWoOfElCabTcetLDgeBJGxXVsoTppvcu3wTSQm+ciTg4zMULoUF9zsSZViZWqZ3ZuQmEeTU++ANbbXBtlQsFXUf88mKENz3cG2xraxsTkw2E6ZA8ThEPKba631cGMM+/ih9ie+IXyLfwkXM03bxmm8e9Bef15iJTcG/85tget4z3McScHJDcE7cuoIZbhlDMYndvB/jb/l3yWfotY9lrtLP8ui0Juc2/ksLpM2j/0R0VgcfovZkVU8X3A2H/iPY5VvDmu8RzM//B6nhl6hUMme8+HToiwKv82i8Ns0OCpY4Z/LGu/RNDvL2eCdzgavvqtUmmxmYnwr4+PbGROvpVhpy1nYGAy5iDGtYhGbnJPY4JzMWtd0WnsJUoKmMj25kbPVVzhBfh8vA+uc1SSUcLfral5znghAsdbBN7W/czrvDOg6Ybx8z/lT3khOQkTlJ+5nuNL10YCu0ZsOxcHn62fTobqY6e7kp2Ub9zvwcqA24r/vDdCUdDDSneTaEbZLxsbG5uAwyaeX+uYqykBuZUxzPR1sTuSzIlbIGXnWge1GGdN8aTsOFHZqZexRixhp0TnvNMdGvhtX2KiOoCXvJErDy9LGnMsybtM+yVZhDCu06RxDj/PGcMxcnHiap51nsUsaxQuOUzlXfsn09S4TnmRbdBxveBfyp8B1/LDj/1Gj1GV877pjRi/d8qsRTgi/ywnhd1EQaXWU0OoooUv0owgSTi1JvhKiVG6hUOnoXgM0arl3ZwJdHHmx/AIA5re9zqSujZZjN+QdTZ1nFE41zsK2V03HxEU3awr0Ft9zO9NzdwzWBWYDMCX8ccbSpe3+SaiCg+JEM8XJ1pxag29z687VEYl9+C26Pg2WzZJ+7clqboHDhwN2CZONTQ+2KGNzWHIa73K19iT3CRfwA+FmRmn1TGZodyV6Y5QwGRybWMXNwdv5Y+CLfOSew68LbuKW4F/wadmt1P2FmUKlky83/ZlnC87l9cBJvJW/mK2eiVzdeh/VycwLKYN8Ncxl7Q+zMPw2zxacyybvVN7JX8gHecdxfPh9Tg69RpHSkdO1KuVGzul8nrM7n6fBUcl673Q2eKexyzWaFmcZLc4y3stbAECeEmJkYg/VyX1UJeupTDZQKrfkJChlwkyMURBpFkvZ56hit6OGXY5RbHOMpV0q7jPOqSWZmtzEsfGVzI2vYYKndsCv34WPR1zn85jzPOKCG0FT+QQvc5P2LwJ0Deha+6jgq46fsUWpwEOC33ke40yndbeHTMjli4mrIl9smMXOpJ8qR5S/VK7BPQQ5MgNhe8TBv+r1Bfy3xnTgPsCeS3vRZGNz+DLUZUyTDadM1ImigZSjIJ1NmDnG08H9wZF8GM3uCpUrTiLQuIw54m6Wq2N5XZnENeIHpmMLhSiLpK0sU6bwTHImNwea01wKAbo4h2U8xlk8KJzLMVrfcqhSnwyRCNckHuKv7s/xb9flnCS/ZRouLwDfUP5EXbKSrc4J/L+Cm/lhxy8pVTN3leotzBhIqJTLzZTL5s6UPucPoG32Xs8onqy8Ak2QmB5cxaK2ly3HxkV3t0tmfvvrlk6cVYF5JEQPpfFGS2dLRPSxzT8FgKOCmbtfbvXrLqNM3Zn6s8Wjd6CcFMvNWZMrQfKoFyv1ayvmoszBzJWxS5hsbIYeW5SxOWy5SfsX2xnFe8IcbuZ73KN9Lafg36FiTmIN3+j8A78LfJkNrqn8rOAbfD34x4wdDwz6CzMSKud3Ps2k+BYeKL6CBmcVv6+4hdODL3FK8NWcc2uqk3Vc13IHW90TeKHgLHa6x/F2/iLezVvAnMhKloRez1noEYAquYGqUAOnhl4lJrjZ5p7AVs9Eal1j2OuqISzls9E7jY3evhbpArmDIqWdIqWdfCVEvhLCp0bwqlHcWhynlkTSFAQ0NARUQUQWHHhdKhHBwwrRT6eYT1AI0CoV0yIW0yyVogjpX1mCpjJW3sWU5BamJzcxNbEZN/pOapk3e2vT3nTh42nnmTzqOp+QoP98Zmvr+Zp2J9OwbhVqxVscw/fFr9Gp+qgQgvzd+x9mSrl9/v2RyxeT1ARubjyKlbEi8sUkd1atyin7IPu1c9+pUjX48Y5iZE3gpKIIJxXn3nFqMNiCjI3N4c9QCjMjPTIeUSWmiuyKORjnHZoH0WO8+vphUyKPsCqRJ2YPLl/i2MzyxFiWyZO5xmkuygAsdXzMMmUKT8mzuMll7vS4QnuWx4SzWMbx7KWCGhrTxpybfImnnGezTxzBfa5LuS7xb9NruZD5Zfwn3Cj8kjrHCG4t+Crf7vzdoISZgZCLMLPHM4ZHRnySpOhmTGQrZzU9kdFx+3rJGXQ58ilONHNsu7lLNSk4+TBVBjWv4y3L663Pn4UqOKiI1VGeSP98DWTBwQ6/LrBMDOcmymj0iDIT41v7HGuMBbrLxAbDZknPyalW68gf4MaQjY3N4YEtytgctjhQ+aX2az7Fr6kVariJ73OX9m3TEpWh6MDU3y0DMD25me91/oZfFdzELucoflD4Xb7e+UdGKdnzPfoLMwBTY5v4RsOveLjoUtb6ZvJCwdl87J3JZW0PMTK5N+d7nRjfxoSm29jqnsgrgVPZ6pnER/5j+ch/LONj21gYfpujomsH1Nbbo8WZEVvPjJi+g5cQnNQ5R7DXVUOdcwT1zioanRVERR+djkI6HYXUMjbn6+eCU0tQpTQwUt7HaHkP4+SdjE3uwkPfzlUDFWNahSKedp7J086z6RL8AIzV9nCDdh8n896AS7RkRP4uXMGdwmUAHC3u4XbvA1SKgwvilcsXo2rw7aZpvBopxyUo3F65homu/V+cDdQ6/HBjHh+FPHhFlW+POXgiqI2NjQ3ozpjJviRrwm42drkGJMpkcstUOuLUOKLslb2sjBWy2Jc5eF+uOImT69bzK87kXWU8XZoLv2DeRfE0xwZ88Ti7tBJWqKM4JpCe6TGePczXVvKeMId7uYBva3/vc1wvY4Lr43fzPe/3eNx5LifLbzHRIvg1QJhfx3/ITcKtNDgq+UnhN/l25++oUqzFCBgaYQbS22YDbPJP57mKS5BFJ6Mj27iw/j9IGdpG7/aMYXWqm9LpzU9ZdlNaVTCPiCOPgmQb00Lm4b0asLpgHgBHBz/M+B52+CaSED3kJzuoiu/LqXSp2VFGu6MYSZPTQn4HI8j0bou9WdRLl6YoWzOdMmCGQ2tsu4TJxkbHFmVshj0FBUfT2Wk+yQbo4k/aT/gkv2ajMIFv8g1+p/38gHdk6s1YeRc/bv8Fvy64iTpHFT8u/DY3hP7BnETmVH8wF2by1C6ubf0nq6KzebzwQva5avh9xS0sDL/N2Z3P49Fyc0YIwKT4ViY1b2W3ayTL8k/iY+9MtnsmsN0zgXwlyLFdHzKvazkVsnX9vBUuLcmYxC7GJHb1+fcu0UeLo5R2qYgOqZCQlE9YzCMi+YgJHmKiB1lwIONAEvSfk4SKU0viIoFXi+JXIwTUEAEtRLHSTqnaSpnSTInanrX1dK6CjAZsFCfxrPNMXnecgCzo+QSj1D18gUc4kzcHJFoZ7KGS7wpfZa2gW6Svcb7Pd9wv4hYG1y7aEGS+1zyNp8MjcKByW8XHzPPuvyAy0IXQvpjEb1LhvreM6qDGc2BbYNsLJRubI4ehdMtM8ydYE3azIezinNKBZXdkEmbmedvYG6pmebQoqygDMLZqOqN3trJLK+FNZSJnZejCdJZjHY/Jc3ksOZdjpN0UBGakCTOf0R7lPWEOT3EqX+AhSujoc7zUJ3NcZCUnJt/hDecJ/N79RW6LfstyrirXWvlj7Nt8zf1T6h2V/LjwW9wUvJ2pyczlNfsrzEBf14yGwAeFi3ij9AwAJnRt5PyGB3FkaDMdF1w8X3ERAEd3fsjoqHmJekJw8kGhHoC/oO11y89ij3csba4yXGqcaaHVGe99U6pl9pTwOoQsaw6DzR59Ph0X34FbMxfnBsumlFNmsjq0ooyNjc3wwRZlbA57RtLAH7SfcR0/4y3hWG7ler6n/eWABtD2p1xt4Ucdt/KHwPVscE3ld4EbuCTyJOdFns96H2bCjADMiaxiYmwrTxR+glX+ObyVv5g1vqM5t+NZ5kZWZBUnejMqsYdPtd5Dh1TAu/4FvJ93PCEpwGuBU3gtcAqj4ruYHVnFrOjqnIKBM+FXI/gTuxlt0vrTYDDtrbORqxjTJhSyzLGQFx2nsksa1f3v05RNXJx4ivPd7w7oszVQEXic0/m9cC0RwUc+UX7meYalzrUDvpaBXL4YRYPvN0/j0VA1Ihq/Kl/PSf79bzM+UEFG1eB720uIqCJz8mNcWRne73vIhC3I2NgceQyVMDPNrz/0ru9y7fe1ejPP087joWre7+eKtUIQ4ORAmH92lvCSPM1SlAG4yLGSx+S5PCvP5Lvac+QJiTRhZi7rOErbzFphMvdwAbdo/0q7TqlP5kvRu1jhOJqt0gQedH6Cq5KPWb5uudbKH+Pf5pvaD9npHMOtBV/lsq7HOSv6csa5znB37K9rJiz6+Vfh1ezw63POnI73OaXl2azz7Mtl59HpLCaQbOeklhcsx31UeEK3S2Z6aJXluBUFxwMwNbQmo2iSEFxs808FYEo49/l7o0c/Z3JsaJtoaPQSZSzyZA4FR1KujO2WsRkO2C2xDwCHQ+elI42j2cyt2m8QNYXHhTP4q3DVAXmdTA/+fi3CNzv/wGnR19AEkYf9F/L7wA10CdmD76xEinw1zCfb7uW6pr9RmmwmKBVwf8lV/Kn8K2x3jRvw/RcqnZwdfIEf1v2Ya1vuZnp0HaKmsNs9mqeKLuDHI37EH8pv4tX8k2l0lA9CmsjMQNpbD4Rsgky7UMBzjtP4lucHXOn7B393f4Zd0ijcWpxTk8u4LfIN/iN8g0+43xmUILOLEVwn/JSfizcQEXzMk3byvP8v+y3IJDSBrzfN6BZkflO+jnPzGwZ9zZ5rD9wqfE99Ph8E9bKln49vQzyAqqe9OLKxscnEUXn6Q/W6sAt1EBOV1XfgAp8+l6yLB+hUctu3PCNPLwd6VZ5KXJMsxx0n7WSM0EIXbp6Rj+7+997lIwLweU1vaf0w59CMeejwJG8LX4rfBcA9rsvZKE7MeI9FWid/in+LBbH3UQQH9+ddyq0FX6VZLMl4Hgyu9AZ0MWGVdxa/qvwGO/yTkdQkpzc9xaktz2SdZ9fmz2Z9YDaCprK08WHcFg7hLsnPB0WLAFjc+rKlS6bTUdgd3JupMxPAVv9UkqKLokQLVfG9OZUuxQUX2zx6idG06OCC/K3YK4ygUyjApcUtS9VsbGwOf2xRxuaI4SQ+4Nva3wC4U7iMe7igz/GyIUqlzyQAOFD4dPh+Phv6Nw4tyQr3bL5X9H1qHSOzXjeTYDElvplvNvw/zul4FrcaY5d7DH+uuJG7Sj9DvbNywO9BQmVmdC2fa7mLH9X9iAvbH2NsqgZ6l3sMzxYu5ZdV3+anVd/noaJLWemdTUjMG/Dr5PLe9ocyb5vpz0NBZKM4ifucl/AV7y+53HcXf/Rcz0rHLFRBYqqymS/H7uCBrs/yjfhtLPRsGtTrx3DxV+FKLhFu4yNhJl4SfM/9PPd7/0m1OHjHkVy+mIgqcn39LJ4NV+FA5fcVHx8yQWZD2MnvdhcC8PXRHYweomBNM2xBxsbmyGYo/sbH+ZJ4RJVIKux3MJh9F1Y64ox3hlERcnbLzHJ3Ui7FCOPhbWWC5ThBgCucywG4PzkPrZcu0VuYWcgKjtI2ExPc3CVcanm9y12vsiT5FqogcavnFrrwZbxPDwl+JP+Kz4Tuwa3F2eCayteLf8qjvvOJCu6M5w5UmNnlGsXfyr7IvaWfJCzlU5Fs4OamP3Jm/I2s7uFGVxUvlZ0PwAltr1ETs3bdvlN0MgnRQ2VsH1MzuFpWFMxHE0TGRLZSlshcrr0+fxYA00JrcnZcb3VPRBacFMutVMiZM3sGyjop5cBRt+Ek89zbMojsxP4ldIeCbO3qbWz+F7DLl2yOKC7mvwTVPG4TP8Xvxc/gUeNcirXt9UBxcuwtxsi7+WPgepqkcn5Y+B2u6HqUM6KvDqqcCXTB59TQq8zrWs5/C87gff/xrPMexXrPdGZHVnF68KVBZcPkq2EWhd9mUfhtOsUA67wzWOedwTbPBNodxbyfN5/38+YDUJZsYmx8J6MTuxiZ2ENVst4yeO9AiDC96S3GdOFjqzSOjeJk1ktTWCdNIZIK7DWYqGxjkfwei+T3qNZ6xI3BiHUqAi+ymNuET9IglAGwWNrKTzzPMErcv6wXuXwxzbKL6xpmsS5egFdQuK1yTU75BtmvPXBBJiQL3LKlFFkTOLU4wmUVB7ZsycbG5shnf8uYHAJM8SVZHXazLuxi7CCFYrN8mRN8bWzvzOOtSAln5GWfU0UBzshr4t7OUTwnz+QUh/UD5sXOFfwucRrr1Wo+UkdzrLQrbYwAfFm7l+uEn/EYZ3AFzzCa9K59AvAT6a9cqk6iXqzkVs/N/Dj2y4xZaAJwhfAk09s3cWfeJ9nomsIT/qW85D2Z06OvcVLsTUpU8zksW86MisBmz2TezFvMZq+eqSZpMqcGX+GU4Kvda4VMHZq6JD+PVV2NLDoZ17WZBe3/n737jm+62v84/vpmpyPdg7I3CMie4gQZLlDcuAcuXKhX0Ou+/sCrXnHvhXvPe1FRxAWy996zi5bu7JzfH7WVQkfaJm2Sfp6PB4+Hpt9xvkmb78k7n3POghrPl2NKr5y496S8uTXO/eLQWVgdNxiAQQULazweQJHexs6o8mCtV/Eqv6pkANZZy0O1Y+wbAj50fq2+vMKnl7dhXx4J/8gQJtHcJJQREecqPqNURfGGdh4zdTdg8Hk5hx8Ceo7qVmI6UifPbh499AivxF7BcnN/3om5iLXGY5hS/DZxqvZvnSoCjerCGZuvmPMOfcoJxb8yN248q6P6sSJ6ICuj+nOsfQ2jin6q10pNh4vzFXFc6UKOK12ISzNWLoG9xdyNA6bW5BpTyTWmsoTy1RB0ykuaO5t0dxapnhy6artJ9eaS6s1FKQLaOVFAsRaDK8rMfl0r9ulas0vXjl26thzQZRy1fawqpq93HYM8KxniXUGyOrqipr6BjAIW05dntcvYoJWXi7fSCrjX/B3jDevRGnnBntQT2OyM4bqsfhzwWInXuXil1Sr6WRo3z09DKQX3bU9ir9NIK5OHhzvlN/oaayMdIiGEv/rEOFlVYmZtiZkzU+o32W9tjrceZE5hO36zJ5Xfx/x4zzszJot3Ctvxg7cPdvUlVs1d7XYJmp2zDSv50DOEt1wjGGz9O5Q5fH6ZIaxhpFrK79pgnuZy/qNmVnu8WEp5gse4Ss1ksWEQb5ku4mrXe3W291jTJu4tfIKlpgF8HH0OmYZ0vog+ky+jTqeXeyMDnavo7d5AujenylCjI4MZu2Zhp7kjmy3dWR3VlyJ9HACa8jGobBljC78n0Xt0yFPdCk0uzchnrS6j2BhPoiuXM7M/rjFoUWj8kHIWStPRvXhtjZMAA6yIG4ZLZybFmUWnstonOF5nGwCajrb2nfTQ172KJpRX5q639gKgj73hQ5aro4DV+vLAp5+3+StajhRJ88oI0dzCJpTJz8/n5ptv5ptvvkGn0zFp0iSefvppYmJqHlJx3XXX8eOPP3LgwAFiYmIYMWIEjz32GD169GjClovmMFW9gwsj72oTeUQ3Fa9Px3l8F5ClsesjRpVye9HzzLOczPsx57PK3Je7jQ9xdfE7DHatqHP/2sKZNE8OV+S9zf6ieXxvG8vaqGNZHdWP1VH96OrYwsnFP9PdsblBc6RA+epKxzg2coxjI1C+qtIuUwd2mTuwx9SOfcY2lOmjyTRlkGkqD0W+r7K/k0TvIeJ8RcSqEmJ8JUQpO1Zlx6TcGJUbPT40fCg0vOjxaAacmgmnZqZUi6JEF02RZqNQZyNfn4CrlhLrNF823b3b6OXbRC/vRjr7dtX4jWFDwpglHMur2gUs18pXZYhSZdxg/oOrTQuxaI0fzuNJPYHvS1K5O6cXZcpAR2MpL6evooMpMB82GlIl88aBWH7Ij8KgKZ7qdpB4Y/BWNZNARoiWpbHVMhXzyqwpadxkv0dWywy1HsKsecn0WNnmjqarqbTOY/Q1F9LGUMY+TxTfR5/LxLIPatz2CuNCPvQM4XtvL/b54mmjK6j82eHBzG3qLRYxgJ+14fyp+jGMVdUerxfbeFA9yz3anXxomkSGL4vxnp/qbHOaNZ8h9hUMcq1kmak/31tHscnUnXWmXqwzlYcMFp+DDG8mCb4ColQZOuXDFWviIAnlqywaqn45ZfWVMaR0CSOLfyfJW/fk+xXhzAFnNF+lX0SmpQ1WbymTMt/B4nPUuN+a2AHst7bH6HNyysH/1bidSzOxLH4EAMMO1T50SqGx1jYAgJFltc87c7id5o6U6mOI8pYetRR2Y2VrKeToUtArD8dEeKVMcy+NLURzC5tQZvLkyWRmZjJv3jzcbjdXXnklU6ZM4f33369xn4EDBzJ58mTatWtHfn4+Dz74IGPGjGHnzp3o9TVPxiZCT23LYldHA6apN1DAe9pE/k93I26fkYv5JmBt8qdapqItYxw/08O9hRdtV7PH0I7ZcTcy3LGYy0o+wKbqHg5y+FCgIwOa1u4DXJX3JplF6fwYO5pVUf3YaunGVks3Utw5HFfyB4NLlxKl/CvDrUm0r4xejg30cmwg1VKMAvJ1CewxtGGfvjWZ+jQyDenk6sqXw3ZpZrIM6WRR/zlvapPky6ON7wAZKpMOvr108O2hs3cnNvwbVlOfQMaLjl8YwlvaOZVLXBuVm3OZy20xG0jR1d1Z94cj5UT+k9eF1wo6ADDcmsfTaWuI1wdm7paGdHQWFph56q95ZGZ0OMSxsYFd4vNwEsgI0TI1JpipeE/aWGrC6QNzI2ZJPDyYseh8DLEc4jd7MgtKk/0KZTQNJsRm8fyhTnxR3IozMk7GkP1ztdt20+dwvH4Lv3m78Zr7eB40V+2XVAQzndnL+fyXDziLmdp1fKxuwUz1FTjj+ZXtqh2va+cz23w9MaqE472L62x3qjWfHHsiQ1wrGOJaQbYuhSXmgawx9WKrsQsOnYUduo61HiPJc5Aujm30tq+ju2NzjUOaa+JBz/cZ57EjqjsGn4tJme+Q6K55uG6xPpafk8cDMDL/J2zemiuPl8cPx66PJsF1kB4ltVea7IzqQoExCbPXTl+7//3N1dbySZt7OdbXOnSsIVbpy78E6ubbjpXqJzsWgSNDmERzCotQZuPGjXz33XcsXbqUQYMGAfDss89y2mmn8cQTT5CRcfTQBYApU6ZU/neHDh3417/+Rd++fdm1axedO3dukraL5qMBd6g3MOLhLe1cHtddS7EvirP5LGDDavwNZgDaeffz8KH/47Pos/jWOo5FlqGsMx3DJSUfcZzzT7/bVFNA08qdxaX573JG4bf8Ensii6OHkmtM5cuEs/lv3On0ta9maOliOjl31Lt6prr5YTQgyXeIJNch+lO1ZNeFkUO6ePL1CRRpsRTpYinRRWPXrNg1K27NiAsjPk1DoUNDoVM+DHgxKydm5SRKlZFmOEiCKiDBV0CSyidFHcRUx0R3tfE3kCkimm85hQ+1M9irtQLArJxMZB6Xq8/pEde6wW040t7EU5l2oA/LHeWrbFwdt4s7krZh0AKz9lVDApmddgPTtqTgQ2NiSgkXBnEeGekACSEaoq3ZQ5LRS55bz/oSEwNsjQuODw9mTonO5Td7Mj+VpXBtwtHzvlTn7NgDPH+oE3/Yk8jymGlTy7bXGX/lN283PnIP4ibjz6Toqr7HVgQzN6r3mMdx7NFa8ybncr2quQLnJvUuBzwJzDWeykzLNIyOfzPMu7zOdlcEMwBpvlzOtH/Hmfbv8KLjgD6dbH0qBbp47JoFHxpmXMT4SknxHiTDm0mZveFfcnrQMyfpMtZF9cGg3FyV9yY91BayqX7OGQV8nzoRp95KumMfgwpqrmhx6swsiR8JlE8YrKsjMFkZVz4se0jZUkyq+vDrSD401kQdC0C/slV+7VMfa/TlFUt9gzx0qbBoXZXJpoUQTS8sQplFixYRHx9fGcgAjB49Gp1Ox+LFizn77LPrPEZpaSlvvvkmHTt2pG3bmlfCcTqdOJ1/p9FFRQ1bClCUD8cw5PzarG3QgFvUHCzKyUu6ybykm0xRdCyXlb7d4GE9R6pPMGPEw4WlnzPYuYJXY69gr6ENL9qu4VfXcVxR8i4Z3vrN2l/tZLoOmFjwFeML57IsahB/xBxHpimDZdGDWRY9mERPHgNLlzOgbAXpR6wSEKjJeU24SfPlkubLbfAxUqz51PClYP2P5UcYo4AV9OJrbRQ/cDyOv4ZK2VQx5zGXi9S3JFFAXFzf2g9UD/+LmsS9e3tR6DMSrXl4NHUDp8UEbuWGhgQyBW4dN2xKociro1+MkweCOI+MBDJCiIZWy2ga9I918mN+FCuKzY0OZQ53ctRBHgJWOeLJ9xpJ1Nd9M2pntDPIcohljgS+KG7FDWk1V8sM1++gr24vq31ted19HNPN3x+1TZytNxSt4y71Gndrd/M653IKi+jGrmqPqQGP6J+n1B3Fr8bjeNByNzOcsznRU/vktlA1mKmgx0db7wHaeo+eZPhwsRZqnQC4JnbNwpvJV7LN0hWDcnPlwTfp4SgPxQ6fYPfweWfWxA5ke3QP9MrD6dmf1hq0LIkfiUMfRZIzm54la2ptS4Ehge1R5ffL40r+8Psatps7U6y3YfWW0c1R/Xw1jVlSvKJSJhTnk6kQyHllZAiTaMnCYknsrKwsUlNTqzxmMBhITEwkK6v2JWJfeOEFYmJiiImJYe7cucybNw+TqebxxzNnziQuLq7yX20BTnUaMz5aBIcGXMdH3OV7BYD3tbOYab4dVwAzydqWya5OZ88u/nXoEc4v+QyjcrHe1JPpCQ/xfvS5dS5NWZeK5afbmvM42/s9jxfez4OH/o+T7L9h8dnJNyQxL24Mj7WazlOtpvF74ok4o2NJCfJqSf6qaZnrBh+vjkBmO215XpvMBO1lrtHN5GttNA7NTFe1ixm+F/lOXcVU9W5AA5kiZWGauoGp2f0o9BnpYy7kq7Z/NnsgY/dq3LgphT0OIxlmD890z23UkAAhhPBHQwPaAbHlX6ItL7IEpB0V75sZRgfHmIrwofFTaYrf+58bWz457CdFrfEpavywqmkw1VQe2LzjHs5BX3S128XZenMqf3CiWoxHM3KfdhvuWvouenw8qX+ck92/4tUMPGqexifGs/z6Ciq1Effd+gYPefpEnk29mW2Wrph9Dq7JfY2ejurnTEkz20kz21HRNn5KOQOA4/Pmkeyu+UufYr2tskrm+Pwfa/0SLs1sZ1PSoPJJg+2bSPX4/2XS8qiBABxrXxPwoUsH9K3I1SVjVC56eTf6vV9DlsUWf5PPcaK5NGt3e/r06WiaVuu/TZsaN7HV5MmTWblyJb/88gvdunXj/PPPx+GoefKwGTNmUFhYWPlv7969jTq/CJzGfiC+mG/5P98TGJSbX4wjuddyH8VU3xFqiPoGCQa8TLDP5d/599PPuRqvZuC/UeO4M+FRFlhG4gvQICsN6OrZwbUlb/NC3h1MLXqZAc5V6JWHPYa2fBY9kemJD3Nb4izeirmYVaY+OGjcxIkNEYwwprpAxouOtXTjOe0SztGe41zd87ymXcBerRVRqoyJ6gfe9P2Dj9QtnM9crDiJi+sbsEBmvqcbY+138GVJBjoUU+J38kHrpbQzNm7On8M1JJDxKLhraxKrSszY9D5e7JFLskkm9hVCNI2GvCcMspWHMiuLzfgCU/xa+f5ZsRz2D6WptW1exfiYbGw6N/s8USz8q/KkpmDmFP0m+uj2YcfEy+4TajymBvxTPU+8KmKL1omXtItqbYMBH4/r/8OZ7u9Qmo5XzFfwH/ONOP24rzc2mPEnnNlo6cF/0qaRZWpFrLeIm3Kep5tza637uDQjc5Iuw60z0c2xmTPsP9a6XPVvSaPw6Ey0tu+iW+mGo9v6V9CTZrbj0Mz8GT0MgBNK/K/udmOoHLo0sKzuYWL1tdZUvhR2H+8GLARvTjchRGho1jj1jjvu4Iorrqh1m06dOpGenk5OTk6Vxz0eD/n5+aSn1z6JaEXFS9euXRk2bBgJCQl88cUXXHRR9Tc1s9mM2dy4SgURusbzKwmqkDuZwWpDH26Lmsm/7I/SSgWmQqE+Q5kqpPoOclfRs6w09eGd6AvJNqTxauwVfG8dxQWln9PXtTZgc+CYcTHcuZThzqWUaNEsN/VlmXkAa029OKhPZp71FOZZT8Gg3HR1b6enezPHuDfTyb0Lc5A6BYEMYiqPeVgYo4BMUllKH5ZofVlIfwq0uMqfG5SbEaxknPqVE1lCFFVD20CFMbm+GB5xnsa3nvJy5PbGMh5LXceAAC933ZBAxqfg/u2JzD8UhUlTPNcjl65RARo7Vg0JZIQQgdAj2oVV56PIq2NbmZFu0YF53/KkdudU1z6eyu/CwrIkirwGbH5MvG7V+ZgQm8k7he14r7AtI6PK72+eaoYyaRpMM83jSseVvOMexhXGRbQ+bCWmChXDmO5Vz3OXNoM3mcQg1jK8htWYoLxi5iH9C7RxHuAl0xV8ZxzNFl0X7nU8STtV+1LP1Q1lqo8jl82u4NKM/DfudH6LLQ+g2jl3c0XeW8R7a78HKuCThPMqQ5zJee9VVr5UF8zsM7ZmXWz5KkqTir4ivZbwBuDP6GE4dRZS3dl0d2yuddvDrbf2wqGzEu85FPBVlwBWm8rneBnk9X/SYSFE+GrWUCYlJYWUlLrLQocPH05BQQHLly9n4MDyUsH58+fj8/kYOnSo3+dTSqGUqjJnjGh5hrGa19V0buU+9uracEvULO6zP86xvqO/TWmIhgQzAP1da+nj2sAP1lP4IuoM9hja8njcrXR3b+G80i/o6a79m6T6ilGlnOhcyInOhTgxsd7Uk5WmY1nzV0Cz0dSDjaYefA7olYd2nn109uygs3sXHTy7yfBm1XuVhcMFI4wBiI3SsYburKMba7TurKIn2VrV95kYVcowVnGKWsRIlhNL9atrBCKQcSsd77iHMtt5CiVY0OPjyvg93JywHasusJUoDQlklIJZuxL4MjcGPYonux2s/PY5GCSQEULUpL7zyxg06BfrZFGhlWXF5oCFMgAd2rShS1YJ29wx/FSWwtmxmX7tN9m2l3cK2zG/LIU9bmtlFWR1wcwJ+q0M129nkbczT7pO5T+WT6o9ZpytN6OLFjFJzeUzbTz3cAcfqttIo+ZVijRgivFL2jn28pj5NnboO3B91JNc5vqIc91f13r/DkQwA3/PNbPZ3I3PE84h11hedXRc8e9MKPjKrz7Ez7Enszx6EDrl5ZK8d4n11TzxvA+NzxPOQWk6+peuoIOr9kmaPej5JfZEAE4qXlCvuQaXRg8GyqtkatqvofPJODGx0Vi+4uNg74oGHaMpRdq8MrIKk2gOYTHwsGfPnowbN45rr72Wl156CbfbzdSpU7nwwgsrV17av38/o0aNYs6cOQwZMoQdO3bw0UcfMWbMGFJSUti3bx+zZs3CarVy2mmnNfMViebWnV3MUXcx1fdPtuq7cLf1QaY6X+V0z7yAHL+hwYwBL6fZ53G8YyHfRI3nB+spbDZ241/xd9PLtZGzy74OeDgD5RU0A1yrGeBaXV5Zok9jg7EHG4w92GLswiF9AjuNHdhp7MCPf825Z1BuMryZtPZk0tqbSZo3hzRvDsnePGyquMbqnkCEMQooJoYDunQydens1bUm29iabbRnNxn4tKqrQeiVl15sYQhrGKpW0ZdNGOvoDDY2kFEK5nu7M8s5lu2+8lCoj7mQh1M20ssc+Pl7GhrIPL47nnezylfxerRLHqMSAzeM6kjSyRFC1KW+wcxgW3kos7TIzMXpgV0p7rSYbJ45FMP/StL8DmU6mco43nqQ3+zJvFvYlnuSq58AFsqrZaab5jLBPpUvPf25wruQY/XVV7LE2XpzV9FrrKcbm7TO3Ml0XlX31jm0ZZx5OR3t03jcPJXlhv68br6UHw0ncq1rDkO8K2q8V1cMZWpMOOOJjuYdy3ms/WuYj81byAX5H9U4f8yR1luO4b9xpwMwoeArujq31br9suhB7DJ3xOxzcGbhN7VuW7F9oSEem6eQQaXL/GoTQKHOxibLX6FJ6VK/9/PXRlM33JqRFF8u7X1NM42CrMAkRPMKi1AG4L333mPq1KmMGjUKnU7HpEmTeOaZZyp/7na72bx5M2VlZQBYLBZ+++03Zs+ezaFDh0hLS+OEE05g4cKFR00aLMJHXFxfCgsDU8qZSj5va9OZ4b6NX4wjedpyA9vcnbjB+Xqjll2u0NBgBiBWlXJx6aeMs//IV1Gn87PleNaberLe1JNu7q1MKPtfQIc1HU4DMrzZZHizGe34BQXk6RLZauzMDkMHths6stvQFofOyh5DO/YY2h11DJNykuArJN5bQLyvkFTdQWwUE61KiVZ2LDgwKRdGPOjwokOh0PChw4MBl2bEjgW7ZqWEaIq1GAq0OA5p8eTpEsnVknBqNU/smKgK6M1mequt9GMjvdmCFf+qPwJRHbPC25bHnaey2NsRgASdi2lJ2zgvdj+6ILxoDQ1kntwTz1uZ5d9kPtApn7NSygLdtEoSyAghgmHwX5V9Swst+BQBfY8d097KM4fgj7Ikv1dhArgsbg+/2ZP5pKg1NyfsIPavoU/VVcv00R9gomElX3r686DzTD61voxOq77yItXWnceLZnEJT7JO686D3MJM9USdfYHu1lxmlj3Cj4aTeMl8Bbv17fin9Z8c493Eha7PGeqtudqjIVUzOwzt+Z91DH+aB6M0HZrycVzJH4wvnItV1Tyv4+F2mdozJ+kylKZjWMkiRpb8Xuv2xboYvo47C4AxRT/UOSzKi44fbaMBOKlkQb0qf5dGl19XB+fOGicGbmiVDMAqU3mINdi7Mij9PCFE6NGUUgGaGi0yFRUVERcXR2FhITZb3Uv+hdOs3YYc/8fONu48gV0WO1ChTAUFPOu+gLdMF5XPvu/dwn2Ox0lVNZcF11dDw5kKB3WJfB11Gr9YjsOjGQFo49nPaWU/MNy5OCAhUn340MjVJbPfkME+fQZZ+jSyDKlk61Ip0Mc3WTuSVR5tyaI9++mo9tGJPXRnJ8kcalBHprGBzFpvBs84T+Ynb/k3aCbNyxVxe7gufldlpzzQGjqHzMxdCbz3V4XMfR3zuSjA3zAfTgKZwKvvvUnUTp7P0ONvf8rlg+FL22D36fj82Ex6BHAIE8C5a9LZUGri/uSNXBK3z699lIIz9g5nqzuGuxK3cG1C1WE0RwYz2b5YTi27nRIszDR/zgXG2qs2fizSuFF7CI9m4Cr1CTerd/xq18EyA8VE84FpEl8aT8f9V38izZfDWPd8jvcuor1vb7X3z7qCmVxdIsvMA/jdPJxdxvaVjw9yruDc0i9p6z3g99LZWYY0nkudSpk+mh72jVx98PU6Vzeak3Qpq6L6k+Haz+3ZT9W5/eLoIXyUeCEx3mLuzXwUs/Jv3jwfGv/X6h7yDUlclPc+g8uqf60asxT2bYmzOKhP5iH7TEZ461+Jk1zHqpM1aUylTKCGL0HD+jXBEAp9F7k3tRxhUykjRLBowEXuz+ji28Esy21s1nfjxqgn+YfjaYZ4VwbkHI2pmgFI9uVzVcm7nF32Df+zjmG+5QT2GVrziu1KPvCdyyn2Xxjl+IUk36GAtLcuOhRpvlzSXLkMoGpI5sYAURp5WiJ5ukQOaXEUanEUabGUEkWZZsWJGadmxo0BL+VDjTRAhw8jbgx4sCoHVuUghhJiVQk2VUSiKiBRHaK7OZtU8gK6IkFDAxmlYKm3PS+5jmeBt7wjocPHObGZ3Jy4nVaG4M3P0tBVlh7YnsgXuTEA3N8xnwuDGMgIIURD+DuMyaSDITYnvxRYWVhoCXgoc2ZyKRtKTXxd3MrvUEbT4Or4XUzP7c3bhe24PH4PpsOqX46smEnTFXOr6ScedZ3Ov51jGW3YSJJW/VxnAKNtinuLXuAh7Rbe0M4jXhVxKV/V2a7kKA+UlTLFNYdJ7m/4wng63xrHkq1LZY75QuZwIem+bHp7N9LDt4W2vv208uUQpwpJth4i156AExMluhhy9Ulk6tPZYejAFmMX9htaV55HrzwMdy5hvH0eHTx/D785cq6Z6mQbUnkx9QbK9NG0c+7m8ry36wxY1lj7sCqqPzrl5cL8D+vc3oOeebZTATilaL7fgQzAVnNX8g1JWHx2+tqr/5KwMVUye/WtOagvXwp7QAud5DcU5pURoqlJKCPCTiCHMFVIifIwuGwlz5Xdxb8sd7JV34V/Wu/jAtfnXO76oFET2lae46/x2Y0JZxJ8hUwu/YSzy75lvuUEfrCeQp4+ia+iz+DrqNPo71rNKY5fOda1vs5OSaBVmStGQYbKJhhNqG6Z68ZoaBjjVjrmeXryumsEK33lQ7j0eDnLsJbrWpXSyRS8oUDQsEDG4dW4c2sS8w9FoUPxaJd8JqTU3PEPhFD4pkmEn+eff57HH3+crKws+vbty7PPPsuQIUOq3fbVV19lzpw5rFu3DoCBAwfyf//3fzVuL8KHv8HM8HhHeShTYOGqjMDO2XVacimP745nlTOeHa4ov9/bz4jN4qn8LmR7LXxelMGFcVXnijkymLnMuIhPPQPY7GvFQ84zeMbyUa3Hv9yWRV7RHJ7TXcZ/dFdj8rm5gP/V2a7KKoqyQ1zjepdLXR/zh2EoPxlOYKW+D1m6NLJ0afzISUfvHFPzcTXlo5tnG8Mc5Ss8xqqaw/6aVmjKNKbzUsr1FOtttHId4NqDr9YZmBTpYvkk4TwATimeTxt37atLASyKGU6+IYlYbxEjShfWuf3hfo8dCcCg0mWYVOBXKVxqLl85aqB3dVgthR3IyX6FaIkklBHiLylRHijL4Sn7PbxquoKvTKfxkekcVun7MN3xFK1VVmDOE4BwJkrZOcP+PePt81hu6scP1lFsNHVnhbk/K8z9ifcWcLxzESMdi2jjPRCQdlcnWCsoVXuuAIcx0LBAJscXwyfugbznHkyWKl9a24Sbc4yrmGL6nTbpwZ8oryGBzCG3jqmbU1hZbMakKZ7odpDRQZzUFySQEQ3z0UcfMW3aNF566SWGDh3K7NmzGTt2LJs3b652TrgFCxZw0UUXMWLECCwWC4899hhjxoxh/fr1tG7dupoziEgzIs4OJLC8yIzTB2Zd4I6dYvIxMt7BrwVWvijO4I6k2iebrWDSFNfG7+JfeT14uaAj59gOVKmWgarBjFHz8Zj5c86x38C3nr6c4VnDGMPGWs9xe+wmSko+4y1tErN01+PyGf2qmIHycOZgmQEzLk7x/MYpnt+wY2Gtvicb9N3ZpuvEfl0rsrUU3Jqpyr4G5SbBV0C6N5sOnr10du+gp3sLMcr/kP/Iqpmdpg68lnINdl0UGa79XJ/7EtG+2gMwHxofJF5EqT6GVq4DjCn8oc7zOjRzZZXM2MLv6xWs5OkT2WA5BqDGOW4aUyUDsOyvUGak589GHUcIEV5kTpk6yJwygThPYOeUqRDoahmA3LK/c8rf9UN5ynIjxVosFmXneuebjPf8GPBJ1xo730yFA/p0frKcyB+WYRTrYisf7+DezTDnUoY6l5HqO9jo8zRlEAPBCWOgfoGMS+lZ4OnG555+/OTpXjnkKkkr4WLjUi4xLiZFV4on9YSgtPVwDQlkdtkNXL8phT0OIza9j+d65AZ12WuQQCbYInmc+dChQxk8eDDPPfccAD6fj7Zt23LzzTczffr0Ovf3er0kJCTw3HPPcdlll/l1zkh+PiNBXX0rpeDk5RnkuA281jObEfGBfX/7Ps/K7VtSSDV6WNB2AYYaJuI9ksOnY9SekeR6zTycsoELbdVXcRxeMfOYcywvu08kWStmbtQztQ5jgvJrf7SkP29o5dUiV6pPmare8Xt554NldX8/68CEEzMKDTNOLDjRaNzKTIdbbBrIi7FX49aZ6ODcydUHX68zkAFYEHMiXydMwOBzMy37P6R7suvcZ65tHPPixpDizuEfWf+uV1Xx13FnssB2Mt3tm7ju4CtH/byxgUyOLpnbk2ahU14+Kb0SGw0bWtwcc8qAzCsTDHJvajkC+F2CCDdN9YbXFB9UA+XwAGCkdzEvlk2jr2ctDs3KbMuN3G+5hzwtIbDntOZX/muMDG8Wl5Z+xHN5d3Jr4QsMcK5ErzzsMrbnw5hzuT1pFvfF38s31nFk6tMa1L5ICGTi4vr6Fcj4lMYST3v+6TiT4aV3cb3jYn7wHIMXPYP0u/iP5VN+j36C283zSUgfGLKBzMICMxeuTWOPw0iG2cO7vbMkkBEhy+VysXz5ckaPHl35mE6nY/To0SxatMivY5SVleF2u0lMrPkDo9PppKioqMo/Ebrqek/RNBgRX76qz+8F1oCf/+QEOwkGLzluAz8Z/Q/0LTofU+J3AvB8fiecvuq73Yd/mL3N9BNdddkcVLH8wzGJur461TS4N2YlN/nKJ/t9UzuXe7Q7cGCqfce/+PMB3oKLOIqJpwjrX4EM/L1sdkP50Pg0agLPxN2AW2ein3O1XxUyUF5Z8238GQBMLPjSr0DmkD6en2PLn+vTCv9Xr0DGoZn5M2YYAMeX/Ob3fvWxxDwQgB7uLQ0OZCJFU31xLESokFBGhK1ALF1cncODgFSVx2OOB5nifAujcrPYMIhro57mB8NJfn4HVc9zByAAMeBliGsFdxQ9z3N5d3Jl8Tv0cm1EUz52GDvyYcy53Jn4KHck/It3o89njbEXLozVnr+pQ5gKKVGeZhmu5FQGfvV04Z+OMxlReicX2q/hffcQDqloUrRirjX+zndRz/Jx1OtMNK7GrHmbLHSsbyCjFLx1IJYpG1Mp8urpG+Pkw95ZdAlS5VEFCWREYxw8eBCv10taWtXgOC0tjaws/4aQ3n333WRkZFQJdo40c+ZM4uLiKv+1bdu2Ue0WwVfXe8vxf4UyvwYhlDHpYOJf8299kh1Tr/fjC237aWWwk+218F5Rmzq3N2seZps/woSbn709mOMeXuc+mgZ32DbykG82BuXhe+0ErtD+zT78+wKmoZUVUB7MNCScKdRsPBZ3G19EnwnAaWXfc0fRc7Q159VZcVKki+Wt5CvwaXr6l65geKl/ge23cWfg0Rnp7NjGsfY19WrvkughOHRWUt3Z9HBsOurnja2Sgb9DmaHO5Y0+lhAivMicMkJUIyXKUzmUSYfiXPfXDPKu5AnzzWzRd+EJyy0s8BzPrc6XSFO5wWtHDR0df4c82VQJox2/MNrxC4VaLMvN/VlsHsgmYzeyDOnMNaQzN2oMJuWkl3cTA7xr6OtdSxffzoBMblxfwRqqBNUHMkrBHpXAb54u/Obtyh+eTpRhrvx5DA7GGjZwlnENw/U7MWhVv1UL1UCm1Kvx4PZE/psXDcCElBIe7JQf0HkWqiOBjGhus2bN4sMPP2TBggVYLJYat5sxYwbTpk2r/P+ioiIJZsLciHg7ehQ77Eb2OfS0sQT2HnZeWglvZtr4rcDCfoee1qnd/fo236zzMTVhB/fm9uLFQ504J/YA8fqj73WHzy/TU5/FDNN3POQ6k5mu8fTV76Wfvu6Vny615dCq6AHu5i42a524iKeYrl7hNBbUOfS6Yo6Zhkq15vs9nGmpqT9vxF5Kkc6GWTm5svhdjndWDVZqWqnJjYG3kq+gWG8j3Z3J+Yc+9mtY+TZzZ1ZGD0BTPiYWfFmvoehedPwaW36/P6H416OGhgUikMnVJbHd2AlN+Rinm09QvvkT9Vb21YvStxFNQkIZEdaCsRJThcODGYAOvr08bZ/OJ8YJvGO6gGWG/lyrn82Vrvc5yz23SVc7akgFSwr5dGE3F7i+pNRlZbm+H8sM/Vmm78dBXTIrDX1ZaSgPLizKTk/vFnr4ttDDu5Vuvu0kqeAtt91UYYxXaWzxpbHC25Zl3vYs8XYg86/JeiukaUWcbNjMGMNGhut3YNaq79iHaiCztczI7VuS2WE3YtAUd7U/xCXpJWiBngzpCNJpEYGQnJyMXq8nO7vqUITs7GzS09Nr3feJJ55g1qxZ/Pjjjxx77LG1bms2mzGbzbVuI0JPbasxxRkU/WOdLCu28PMhK5e2Cuzwjw5WDyPi7CwstPJBdix3ti/A42cwc3ZsJm8XtmOLK5YXDnXinuQt1W53eDBzmXERi7yd+MHbixsdk/nK+jwpurqvabRN8UHR7fyDf7BG68k/tWnMV8O4W71CKrX3HYIdzOTr4nk3+gIWWwYD0Mazj5uLXqaNN7PGfQ4PZ3xofJh4IbvMHbH6yrjy4Jt+LWftQc9nCZMAGF66iNbu+i2AsDKqP/mGJGK8xQwqW1Zt+xprobl8tbhj3JtJVAUBOWZ9FRata9S8MrICkxANJ6GMaBKe1BOCNuFvMB0ZzOjxcaH7C47zLOYpyw2s0/fiRfPV/GA4mVucL9PTt7UZW+u/aOyc4F3ECd5FKGCv1pqVhmNZoT+WdfpjKNZiy0Ma/g40kn15dPHtoLNvJx29u+ng20OGympURU0wwxgXBg7GnMJ8dzobvK1Y68tgnTejSiUMgBEPA/R7GanfxomGrfTSZdYZYIRiIKMUfJITzaxdCTh8OlKNHp7olhf0+WNAAhkROCaTiYEDB/LTTz8xceJEoHyi359++ompU6fWuN+///1vHn30Ub7//nsGDRrURK0VzaG2YOaURPtfoUxUwEMZgMnpJSwstPJpdjQ3tSnEqvevnMGgKaYnbeGqzIG8W9iWi2z76FjD0toVwYymweOWT9lelsJ2lcpUx0XMsb5R4xcFh+tma8XrRTN4Q53Hq9oFzNdG8Cf9mKI+4kK+xUzNKw4FIpiBqpMAOzDzXdRovo4aj1OzoFNeziz7jrPLvsGIf/2ANEsRH0dNZGX0AHTKyxUH3yLF49/iBT/Hnky2MZ0YbzHjC+fW63p8aMy3nQKUV8lUrNYUqDCmwiLLUACGO5cQ8BUlhBAhT0IZEfaCWS0DfwcHh4czbdUBnrDfz3eGUbxuvpTt+k7cGvUYY9zzucr1brN9y9EQGtBO7aedez8T3HPxobFb15YNuu5s1Hdns64Le3WtOahL4qAuiT8ZXLmvXnlopbJp7csk3ZdDmsom1XeQFHWQJJVPoiqoNrQJRBjjQyOfOHJIIosUskhhn5bGPlqxV9eRPSoRX9nR43VicNBXv48B+r0M1u9igH4vUZp/S2I25aTV9Qlk8t067t+eyPxDUQCMjLMzq2seicbgV29JICMCbdq0aVx++eUMGjSIIUOGMHv2bEpLS7nyyisBuOyyy2jdujUzZ84E4LHHHuP+++/n/fffp0OHDpVzz8TExBATE9Ns1yGCp6Zg5qQEO//encCyIjPFHo1YQ2DHgJyQYKet2c1ep5GvcqO5ML3E72qZkVH5nBiVyy9lKfzrYHdea7Wyxi8AKoKZWM3JS9b3OLvsBpb6OjLDeQ5Pmj/xq/IxyXYMU4o+4kS1hEe5gbVaD2ZrV/KhOoOr1cecyfwaw5nGBjNQHs7scrTmZ8vxfBs1jiJd+TCkru5tXFHyHh08e+t1vO+so/gqunxi32uK5zBSW0E2da9Gk2NIYV5c+RLYZxV87dckwodbZ+1NlrEVFp+d40r+CHgYA7BXn8FeQxv0ysMQ53KoeeRli2LI2RwyqzAJEWwSygjhpyOrZnQoTvP8yHDvUl43XcoPxlP4wXgKvxuGcbHrUya6v8Xk5zdAoUSHoqNvDx19ezjdMw8AOxa26TqyTd+RHbqO7NK1ZbeuLQ7Nyj6tNft0ras9lqZ8xFJCvCrEpopI1JUQSxlWHERhx4Qbk3JjwIMOhYbCiw4felyaARdG7FhwYKGYaIqIppBYDhFHATY8Wg1vYX/1w2Ox00OfTU9dFr31BzhWt5/Oulz0fi5nerhQDWTm51t5YEcieW49Rk1xW7sCLm9VjK4JvmmTQEYEwwUXXEBubi73338/WVlZ9OvXj++++65y8t89e/ag0/0duL744ou4XC7OPffcKsd54IEHePDBB5uy6aKZdbB66GR1s8Nu5LcCK6cl1+8DeF30GlzSqoSZuxJ4JzOW89NK0Gn4Hczcm7SFhWVJ/GZP5ofSVMbG5NS4bUUw01mXy/OW97nKcTlfevqToRVwp3meX+2Ns/Wme9E63lJ38406hRe1i8nSUnhUu4kX1WTO4XsmqB9pw9ErF1VM/lvfcEYB23UdmWsYxY/RJ1GmlX9ZkObNYVLpl4xwLql3Iciv5hG8E3MRAOeWfsmJzj/Kj3lEQHLk/DMVw508mpHu9k0MLKvfBLo+NL63jQVgvP1HOphrfr0a43dL+WTO/V1r6Gipe+4g0bRkXhnRFDSl6lpsr2Wr7/rwNZXUhrKmXHYumEOYglktc7jcGjooG3VdecF8DZv1XQFo5cviauc7HO9dFJGVqD408rRE9ukyOKClk6VLI0tLI1eXRK6WRL6WgLem0CRAdMpLIgWkc5B2RjettQI66PJor8ujiy6XFC0wc6mE4nClAreOf++O58vc8kqALlYX/+6aR49o/6p+Gks6KM2rvvcmUTt5PsNTdX2u/+yO47UDcYxPKuXJbnkBP2epV+Pk5a0p8ep4sUcOJyY4Kn/mT39qdn5nXjjUiXS9g7ntFhKtq304UsUcMx+5BzLDWT4vygzT/7jW9LvfbS4sWgeAAxOfM5Z3tAlkaamVP++jNnOKWsRwVtKVXUdNZFtXMOPCyAZ9d5br+/KHYSh7dX+vMtXeu4dz3V9zbPHaBg13/s08jJdjr0JpOsaVzeOS0o/87lN9aDyLb+LPwuxzcFfW4yR66zc33m5bF56OuxGrr4zZ+TOIUaX1bn9dfGjcmvgY+fpEbit8gdP1PzbqeI1ZSQto1JwyQMDnlAmVSpnm6vPIvanlkEoZETGCPYypQnXDmQB6+rbytH06PxpO5A3TJWTq0vmX9S66e7dwrXMOx/o2BL1tTUmHIkXlkeLNoz9rj/p5UpSXQyqOQ9j+qmyJpZgYionGrlmwY8aJCTdGvOjxoeFDQ48PHT6MeDDhxooDq3IQQxmxlBJHMYkUkkAhSRwiKa5PUK8z1AIZpeD7fCuP7iyvjtFQXJVRzNS2BUFfXUkIIUJJdcOYRiXaee1AHL8csuLwalj8nPfFX9F6xXmp5SsxvbbfViWU8adi5vr4nXxdnM4+TxRP5nXh/pTat6+omLnAuJw8FcMTrrHMdJ2GCS+Xm/xbCjrO1pvConVYcHEx33Ce+h8/q2F8qZ3Kn/RjrdadtVp3nuYKYlUJ3dlBF3bTWmWTSh4xUWXYHV6UpsOJmSIthlwtmUxdGtt1Hdila49bM1aez6hcHOdZwjjPT/T3rikPef5aqdzfFZoAFlhG8lrMZShNxyn2X5hc6t9KS1A+JGhu3HgALin9iJ7G3WCsY6fD+NB4InoiAOPsPwUlkAFYZ+xJvj6RaF8pp+oXBOUcQojQJ6GMaFLhOuFvdY4czgTlQcUYzwKO9/zJp8az+MQ0gc36btwZ9S8GeFZxueuDsJkMuCGOnCsmiQKSKDh6wwD1katb5jpQQnG40h6HgUd3JvBbQXnvtpPVzSOd8+gfW/fqE4EkVTJCiFBxZDBzbIyLViYPmS4DvxdYGJ1kD/g5L88o5t2sWJYXW1hWZK4yoXpdwYxF5+ORlI1cmTmQd4vaMT4mm8HWglrPVxHM3GD8hRJl5iX3STzkOhMnBqaYfvOrzRXBDIARL2P4gzHqD3JIZIEayq/aYFZyDMVaDMs4lmUcW3XC2ajaj5/oO0Q/71qGeZcyxLOCaKp/3v1ZOlsBX1vH83FMeWXQaPvPXF7y/lEVPDVxYeQ523V4NCP9nKs52eHfc3S438zDOWDIINpXynj7D/Xe31+/WEYCcJzzz7Ac8t5SyBAmEWwSyoiI0lTVMhVqqpqx4uBS98ec7vmBd03nM9cwmhWGfqww9GOoZymXuz6ki29nk7Uz2IK5ilJ1ghnGQOgFMmVejdf223jjgA2X0jBqimtaF3Fd60JMTVwdI50SIUSoOTyY0TQYk1TG25k2vs+LCkook2ryMjGlhE9yYnllv41BttwqP68rmDkuKp/zYvfxSXEbZuT04uu2i4jS1T4xe0Uwc5fpB/QonnefzCzXeAqVlTtNP/g1VPfwYKbyWsjnfOZyvpqLGz3bVXs205GdWlsySeEgCZQShQsjGgozTqzeMpJUHq18ObT37aWLbwetVLbfVSzVrdBUeZ3oeSfmQn60lg+DOavsv5xf+kW9hoG/F3M++wytifMVMqX47XoPIXdj4PPoswA4s2wu0Srwv0MAJVo0y839AZio6rcqVEshk/2KlkJCGRFxmjqYgZrDmURVwC3OVzjP9SXvmc7nR8OJLDYMZrFhMEM9y7jQ9Rm9fE03p08gNXUQA8EPYyC0Ahmfgm8PRvHUnniyXeW/WyPi7Pyz4yE6WJv++ZdARggRDsb9Fcr8HKQhTADXtC7i85wYfi+wsrrYRN8jKhbrCmamJ23lt7Jk9niimJnXnUdSNtZ5zopg5g7zPCyaiyddY3nRfRJZysZM8xeY/Fguu7pgpoIRLz3YQQ921F7Rqqv/BMDVObJqplSL4hnbdawz9UJTPiaXfsx4e/3mWFlkHlwZ6Fxf9Dpxqv6rJX1vHcVBfTIJ3kOMsc+v9/7++t0yDLdmpJ1nD118O4J2HiFE6JMZCESTJ9BN8aG3KT68VyclylNtWNFK5XCn8zleK7uFU9y/oFNeFhsGcXvUTO60PsxSff9AjegJqorri8RAxpN6QkgFMn8WmjlvbTrTtyWT7TLQxuzh6W65vNozVwIZIYQ4wuHvUcfGuMgweyjz6fi1IDjrC7e1eJmQUj7PyPN74+q9f6zew2Op69BQfFTUhh9KUvzar2Ii1ZtMvzDT/Bl6vHzhGcBk+zXk+GL9OkacrXejJ3Rt7ISyFVKt+aRa89lpaM+9CfexztQLs3JyW9EL9Q5k9ukzeDX2cqC8wuZYd/3n8ivWYvgq6nQAziv9AjPBGR6sgPmW8j7HBM93EbMgRMXE1EKI+pFQRkSs5gpmoObwoo3KZLrzaV4vu5nx7nkYlJs1+t7ca72P66xPMdcwCld9ZqILssOvozmCGCh/HSNpuFL5+WoOZFYXm7hqQypXbUhjY6mJGL2P29sV8E2/A5yaZA/IalL1JYGMECIcVLxXaVp5tQzA/w5GB+1817UpxKApfi+0sqzIfNTP6wrfh0cd4pr4XQDcm9uL/W7/AqSKYOYC43Jet8whFjvLfe05y34Tizyd/G5/KAQzPjQ+NZ7JQ/HTydWnkOrN4f5DsxjkWlWv45RqVmbbbsSpWejl2sC5pV81qD2fRZ9FmS6K9u49HO/0byLlhthi6MJ+Q2vMyskoT2DmWgxUUCaqF44r7IrwIaGMaBZN9SG4OYOZCtUFGq1VFrc7X+TtshuZ5Poai7KzS9+epyw3cUnUy8wxXUCeltBsbW3OEKZCU4UxTV0dU1MnfXWxiSkbU7hoXTp/FlowaIqL04v5rv8Brm1d1GwrK0kgI4QIJxXvWacll1exLDhkpcgTnDS7rcXLOaklAMzeE4eqpuS1rmDm1sTt9DEXUugzcnN2X5w+/97sK4KZEwxb+TLqBbrpsslRNi5xXMXjzjE4ld6v4wQimGloGJCppXG35QFeNl+JWzMywrOYl+3TGGKq3xB0D3qesV1PpiGdJG8eU4teQU/tc/RUZ4++DT9aTgJgculHfk8s3BDz/hpidbLnN6IpC9p5hBDhQUIZEfFCIZiB6gOPFJXHda63eK90Ctc43ybZd5ACXTzvmi7gkqiXecRyJyv1vYPWLQilEKZCU4QxEBrVMUrBwgIzV28oD2N+L7CiR3F2Sglz+x3gnx0PkWisf8cyUCSQEUKEo6gJN9Azyk0XqwuX0vg+r46lgxrhxjZFmDUfK4ot/FLDUKnaghmTpngmbQ3xOhfrnDYePuj/kPKKYKajLo/PrS9wgWEpCh0vuk/iLPtUVnrb+nWcxgYzUL8qDTcGPjSezbVRs1llOBaLcnCr4yUedDxGzF8BRcWwprooYE7MRX8Ne3IwrfA5bKqk3u1XwFsxF6M0HUMdS+nlDt58f4VaLEvMAwE4y/1d0M5TX4H4PRBCNIyEMgJo+nllys/ZtB+KQ83hYUinqEJuMn7G/7iWex1PcIx3E17NwG+GEdxtfZiro57lY+MEDmn1H7d+ZPASaiFMhaYMY5o7kHH74NvcKM5fm8Y1G9NYVPh3GPPf/pk82iWf1pa6J2wMJglkhBDhTNPgrL/mfPkmN3hDmFJNXi5tVQzAk7vj8dTwLUpt/azWRgf/SVuLhuKT4ja8U+hfmAJ/BzNRmpuZli94zvI+SVoJW31pTLLfwF2OSeT6Yuo8TlMEMwpYqB/MtVGzed18KU7NTD/PWl4su4MzPD9UO69KXeHMN9bx/GQ9CU35uKnoVTp49zao7b+bh7PZ1A2zcjK59OMGHcNfP1tPwKsZ6OHdQleZ4LdOtU2YLUSk0JSqrthSVCgqKiIuLo7CwkJsNlud24fzeMPmeNMz5ARmHK2/mnpVpsbYTAc+08bxX06iTCv/lk+vvIxgBWeq+ZzAEsy4m7mVjdeUlUzNEQQe3hE/6NLxSU4MH2fHVK6mZNH5mJRayhWtipo9iKkggUzoq++9SdROns/ItOPjVxi1IgOFxg/999MmSO+xRR6NsSszKPToub9jPhem11ypUVtf69VD7Xk8vxs6FK+2WsnxUXl+t+HwCVYPKSv/5zyNzzzl1RhROLnMuIhrTb+RoNW+vHNNKzPV1+GrM/nQWKrvzzumC9is7wpAgu8Q17je4VTPgnpNcnv4ak2/mEfwiu0qAC4t+YBx9p8a1NZiLYa7Eh+hWBfLhSWfcqY9eNUrHvTcnjSTfF0i0x2zQ2o+mUBVylQEhYEUSstiN2UfSe5NLYeEMnWQUKYpzivBTG3KsPAdx/OlNoa12t83pVhVwhh+Z5z6lf5saND46eYU6WFM+Xm741OwpMjMJ9kxzMuPwqPKu59JRi+T04s5P62kWYcoHUkCmfAgHbXAkuczcl0881MWFlq5sU0hU9sWBu0872XG8OiuROINXub2P0CcoebudU39LaVgem4vvijOIFrz8F7rpRxj9n8ozpEr36z0tuVh5xms9pVX3lhxca5xOZcbF9FJd7DG4wQqmNldFsvPhuP5wnQ6e3TlbbAoBxPd/+VC1+dEU3tAVJv/ekfzjO06fJqeM8rmclHpZw0+1kuxV/GbZQRtPPt49NAjGAjeFyRrYnvzmOU2En35vFt2PUYCU7UsoUzTkVBGBIOh7k2ECC5P6glNGszExfUNq2AmCgfnMI9z1Dx2qdZ8o53CfzmJbC2FzxjHZ9o4klU+p7CIU9UfIR/QNPUcP81VHbPPoefLvTF8nRvNPuffb7X9YpxclF7M2KQyTCE2gFQCGSFEpDl/3HAWfrSKL3OjuaFNIfogrWB3floJH2THssNu5Pm98dzT8VCN23pSu1cbzGgaPJKygf1uC0sciVyTOYAPWy+lndG/8MKTdnKVYKa/fi+fW1/kJ28PnnaNYr2vNe+4h/OOeziDdTuZaFzFqfoNJOtKqxyn4sN5Q8IZJ0aW0JfvtZHMjx6OXbMCEKXKOM09j/PdX5KgGheO/akfyHPR1+LT9Ixxz+fCRgQyq429+M0yAk35uKZ4TtACmVRrPgr4zHgWAGe55wYskBFChD+plKlDS6qUgZZTLQPhVzFzOB8aS+nDXO1E5jOcYu3v8eKJqoATWczJajGDWIMVVzO29G8tIYw56DHxna4P3x6MYkXx3xM+Rut9nJlcyrlpJRwTHZpDziSQCS/y7VlgyfMZuRxuL0P/7ycK7W5e6pHDCQmOoJ1rYYGZazamoUPxybFZ9Kzj/b6mPleR18DkA4PY7IqlraGM91ovI93g9LsdR1bMQHkVziJvJ950H8fP3u74/ppWUoePPrr9HKffRn/9Xvro9pOiFaP9FV7VFcwUE80WOrCG7qzUerGUPji0v+9/HdQ+JqnvOL5sQUBWGfpdP5RHLdPwaEZOcv/GdOfTlV9EHT60yR9lmpXpCQ+Sp09iXNk8Li39qNHtq07FnDir9L25y/owZuXk/dJrsVH/CYmrE6ilsKVSxj9SKSOCQSplREho6moZ+DskCMdwRodiKGsYqtZwLy/yp+rLT9px/MxQ8rV4vmAsX2hjMSsnA1nHSLWM41lGG7KbvK3NsfpVUwYymR4z80pS+aE0laWOBNRfo+M1FMPiHJydUsqoRDtWfWjm3xLGCCEimcWo5+z+rXlr4S4+z4kJaigzIt7J2KRSvs+L5uEdibzXOxtdLZU5NVXM2PQeXm+1gov3D2aPJ4pLDwzinQz/g5kjK2agvApnhGEHIww7yPLZ+NLTj7me3qz1tWG1r235EKe/MqRY7HTQ5ZGuFZFoKkXvzsSABy86HFgoIoZskjhAKge1pKPOn6LyGMVCxqrf6cvG8rviXwtgHT7XTH3NNxzPY+Zb8Gl6TnD/wd3OZ6pUBh8+IbA/Ac07MReSp08izZvDeaVfNLhdNTlyguJPjBMAGOOeH7BARggRGaRSpg4NSSilWqYx5276ihkIz2CmOm70LKc3P2vD+JXBZGmpVX7eVh1gGKsYolYzgPUkUhSUdjTXMuRNEcZ4Faxz2lhQlswvZSmsc1Z9X+gT7WRschmnJ5WRZg6NiXtrIoFM+JJvzwJLns/ItimriHGzf8OgKX4asJ8UU/CG+GY79Zy+qhVlPh33dcznolom/a1QU7/rgNvCJQcGsc9jpZ2hjLcyltPG6H+oVF3FzJEyfTYWejvzp7cTa3xt2OZLQdVzcdZ0lUsvtnCs2swwVtGVXbVO3tuQYOYz4xm8ZC6f1PdU98/c4Xy+XkO1jwxplpoGMDvuRjTl476Cf9Pds63ebapOTStF7dC157qop9ApL2+U3UxrlRWQ8wWqSgakUqY+mqr/JPemlkMqZYQgvKtmDmfEyzBWM0ytZjovs0O15XcG8Zs2iFUcw14tg71k8Il2GgCd1B76s56Baj392EArap74zx/NFcZA8AIZpWCnO4pF9kQW2hNZbE+kyGes/LmGon+sk1MT7YxOKqN1iAcxFSSQEUK0FD3SbQxqn8Cy3Yf4NCeGG9oE5wsJgDSzl9vaFfB/uxL5z554Tkqw06qO+0JNFTMZRgdzMpZx2YGB7PFEceH+wbyVsYIuptJqjlLNcaupmDlSK10Rk3QrmWRcCYBTGdjpS2KvSiRHxXJIRVOmjHjQo8OHzrkPGyUkc4gMcmjHAWLrOSypIkjwJ5zxouMV0+V8bjoTgImub7nB9SY66ved8uFhyUEtkdeslwFwhv27RgcytS3ZXeFD49kAHO/5M2CBjBAickilTB2kUqY5zt881TIVwj2YqUkJVpbRhz+1fiynN9u0Dkdtk6Zy6cMWeqst9GQ7PdiOjdo7f80ZxEDgwxiX0tjojGWVI44VjniWORLI9ZqrbGPTuRlhzef4dAPHx9tJDuK3rsEggUz4k2/PAkuez8j31ar93PrhKtJtFn44ZguGIE34C+UVlZeuS2NViZmR8XZe7pFbOUdLbWrqf2V7zFx1YABb3THYdG6eS1/NMGvNEwkfdVw/KmbqI1CrM1WoKZwpxcr/WaaxxFC+tPc1zjmc7/6yXktoH8mLjumWB1hl6ENX73aets8I+oS7+7V0rop6Fp+m58WyO+ji2xmQ44ZilQwEp1IGQqtaRiplRKBJpYw4Sk3f2DTd+Zt+fpnDRUrVzJFisHMSSzhJLQEgX9lYTU+Wa71YQS+20IlsLYVsUvhRO65yv1Yqm67sojs76ap205nd9LalYNSaN4gIRBhT4tOzxRXDBmcsG5w21jtj2eqKwXNE6bYRHwMtBQyPymeENY/e5iJUWnfA/4kXQ4UEMkKIlmhc73SSY0xkFTn4vfNETtrxZdDOpdfgX13yOGd1K34vsPJpTjTnpdVd3VJT/yvN4OTd1su4IasfKxzxXH1gAA+lbORc2wG/2lPxITlQ4UycrXdAg5nkKM9RwcxOXTsesvyD/boMzMrJXc5nOdGzsNHnet94LqsMfbAoO/c4/tMkKyC9bzoXn6ZnsGd5wAIZIURkkVBGhKTmDmYgcsOZCokUcfJfqzQBlGFhverKerqyTuvKJjqzX0snU0sjkzR+ZSgVX08ZSzy01+XTUZdHey2Pdrp82ugKaK0V0EpXSIwWvBWf6hvG2H06Dngs7HNb2eOJYrc7ip2uKLa7ozngsVa7T6LORT9LIX0tBQyyFHCsuQizzvfX+bujaNXo62gOEsgIIVoqs0HPRUPa8ez8bby1cBenXXdDUCubO1k93NqugMd3JzBrVwJDbE7aW+sOAGoKZhL0bt5qtZy7c3oxtzSde3J7scYZxz+TN2HS/Ct692c4k7+CEcwA5JYZ+N5wCs+Zr8WpmUnx5fKA4990921v9DmW6fvyjul8AG5xvkIbldnoY9YlU0vjR8OJAFzq+jhgxw1klYwQovlJKCOq1dzVMqEk0sOZClE4GMxaBrOWyqHasUPZ7E1jg68VG33pbPGmssWXhh0T23ypbPOlVnusGByk6YpJ1YpI1UpI1kpI0kpJ0MqI0+zYNDs2zUGU5iIaFxbNjRkPJrzoqulcKgUedJSlnIjTq6PMp6fMp6fYZ6DYZ6TAZ6TAayTPayLPayLbYybHaybbY6bAZ6r1ulP1DnqaiznGVMwx5mL6mItoZXBUW2oeSqWz9SWBjBCipZs8tD0vLtjOkp35rNtfSO8JwQ1mLmtVzIJDVpYWWfjHtiTe7ZWN0Y85dGvqg1l0Pp5KW0v3ghKezu/Mh0VtWOOwMTttLR1M/s3rEuhgBgI3nKmAWP4dfWNlte5Az0pmOGYTR3Gjj52tpTDTcjtK03Ga+wdO9fzS6GP6472/qmQGeVbS07c1IMeUQKb5lX31ovSrREBJKCNCVihUyxzu8LlTIjmgqTpHjIMhht0MYXflIz6lkals7PAls9OXxC5fEvtUAvt8CezzxVOCpfyfz8J2Uup9fg0fBnxolGdD3vKpBct/2MAVJKM1D22Mdtoa7bQ3lNHRVEZHYyldTSXE6/375jKcScdBCCEgPc7CaX1a8fXqA7z++06euqBfUM+n12DmX8OY1paYeXZvHNPaF/q1b03BjE6DGxN20stUxF05vdngsnH2vqHcnbSF8237a12Cu/LYAQxmoPFVMwr4kRHM0q4nX4vHoDzcqN7lMt2XHKrnSlDVsWPmAcvdFGk2unq3cZPz9UYf0x97tQzmGU4C4DLXh01yzoYI5HwyQoiGkYl+69DQCZbCfbJfaP4JfyuEUjBTnXAPaAI9UW+JMpHliyNHxZCjbOSqGA76YshT0RxSURQoKyVYKFZmSpWJUsx/hy5+smherJqXWJ2HWJ2HOL2bBL2bRL2LZL2LZL2TdIOTFL2TDIODWJ3Hr0kWqyOBjAhFMvlfYMnz2XKs3VfImc/9jkGn8es/TiYj3hr0PtsPeVZu21L+JcWLPXI4MaEey1rX0hfL8pi5M7s3Sxzlyz0Ps+TzUMpGOvpZNRMKEwDvoRWPa9fwuzYYgM5qNw+pp+nF3ysiNWQJ7Qo+NB41T+NX43HE+wp5zv4P0lRug49XH4+ap7HAOJLhniU87JgVkGMGo0om0KFMS5joF5qmfyX3ppZDKmVEjUJlCFOoVcwcKZwqaJpipaQYzUUXfS5d8K/TUzE0yYkBpzLgQ4czeXj5zwAdoEdh1HyY/vqnD+KqGYcLtQ5AfUkgI4QQVfVpE8fwTkks2pHH67/v5L4zjiEqyMOYxiTZuTi9mPezYrl7axKfHptFG0vty2RXqK0vlm5w8nbGct4pbMd/8rvwpyORM/YO55r4XVybsIsYXR1LcQehYgb8C2eKiOZ17Tw+4EzcmhGDcnMFn3Ot+gjTEZPv1mcJ7SPNMV3Ir8bjMCg3Dzgea7JAZpuuAwuMIwG4PEBVMjJsSYjI1fiaQCGaQKCXPQ6WuLi+R/2TttRO08Co+YjRXMSlDyIhfQDphvJKl1YGJ2kGJ8kGF3F6D1Zd0wQyntTuEsgIIUSEuu7ETgB8sGQPh0rLJ6YP9nvmP9ofok+MkyKvnps3p1Dm9f9mVtv9SK/BFfF7+LbtIk6IOogbHS8WdOLUPccxp7AtDl/tXf1gVDXUVnlRTBSvcAFnaq8wRzsHt2ZkmFrJJ+oWblLvHRXIHC45ylOvYGKuYRTvmc4D4Fbny/T2bfL/IhrpddOlAJzs/pXOvl2NPp4EMkJENhm+VIeWPHypQihUy1QI5YqZxqhvhU2oBiwNFUqhm4QxIhxISXNgyfPZsiilOP2Z39mQWcRto7ty2+hulT8LZv8t06nn/LXp5Ln1jE0q5T9d8+o1tLau/phS8GNZCo/ndWWXOxqAZL2TK+N2c75tP3F1zKEW6OFM8HfVzAFS+UA7gy8YQ6kWBZQPVbpVvcVIltPQ71tqqp5ZrB/A/ZYZ+DQ9k10fc0UTzumyUt+bf1gfxqDcvFF2C61UdqOOF8xAJlyGLkFo9s+C3eeSe1PLIcOXRFgJ9aFMDRVpIYu/JIwJLAlkhBCibpqmccNJnbn5g5W8+ccurh7ZkViLESCoQ5lamb083S2XKzak8X1eNM9aPNzSzr+Jf6HuYeWaBqdG53JS1EE+LWrNywUdOOCx8nh+N5471JkzYjKZZDtAf3Nh9SsMBng4k0MZ+CPqQj6wd2MhA1BaedVOZ7Wba9THnMof6PE16hzVDW1ap+vBI5a78Gl6RrsXBGz4kD98aLxiugKA093zQjqQEUKEDhm+FCSR9OEo1D6selJPCKkP86L+Qu01DLXf8YaIpPccIYQIttP6tKJTSjSFdjfv/Lm7ys+C+X46wObigU75ALy0P47PsqPrtb8/9yujprgobh/z2v3BrJR1dDcVY1d6Piluw4X7hzBqz3HMOtiVRWUJuFTVdKaxlQ65vhi+dPflFseFDCm9h6mOi/lDG4TSdAxVq3jW9yAfq1sYx2+NDmQOVzG0aZuuA/dZ78GpmRnsWc4dzucbXIXTEPMMJ7FN34koVcolro8bfJz6DtVqCFl1SYjQIZUywi+hMunv4SK1aiaShVIQA5ERxoAEMkIIUV96ncbUk7sw7ePVvPbbTi4f3oFo89/d4mBWzExKLWW/w8BL++N4cEciySZvvVZk8rdPZtQU59gyOTs2k6WOBD4tyuD70jT2eaJ4o7ADbxR2wKJ56WcupJ+lgB7mErqZSmidMorY3J9qPbZScFDFsFMls8WXxlpva1Z627FNpVbZLkM7xJmGNZxvXEZHXV6jls6uy1baM8P6ICVaDH3VRu53PI4B/yZUDgQ7Ft40XQzAJa5PiaeoQceR6hghWh4JZURYk2AmPIRaGAMSyAghREt3Vt8MnvlpK7vyynhr4S5uOrlLk5375raFZLr0fJUbw22bk3n1mFwG2Zx+71+fL8s0DYZYDzHEeogHfRv5rSyZH0tT+MOexEGvmT8difz517LaFeJ1x5OkCojT7Jg0LxoKj9JRholCZSVHxeLCePS58NFTl8VJ+s2cYthEP90+dNrf01fWZ4Wm+thCB67XHqZAs9FLbeFZ9RCxUX8vDd6YZbX99b5pEnm6JFr5spjg/m+995cwRoiWS0IZ4bdQrJYBCWZCmYQxwSWBjBBCNJxBr+PW0V25/aPVvPzLdi4Z1p44699BQzCrZTQNHu6UT6FHz4JDVm7clMLrx+TQJ8bl9zEa0i+L0vkYG5PD2JgclILt7mhWOOJZ5YhjiyuG7a5oSpWBAp+JAlKhluVANHy01grorMult+4AffV7GaTfTbxmr7MdcbbeAQtm1tGVm7QHKdJi6am28YJ6gFjKqmxzeOARjIBmn9aKz4xnAXC9881aV5E6UnOEMTJ0SYjQIqsv1aGxs15H0ipMEForMVVHwpnmF4pBTAUJZESkkBUZAkuez5bL61OMm/0rW3NKuOnkztw1tsdR2wSzL+fwakzZmMKyYguxeh+v1TOYgcD2zZSCIp+BLI+FQz4jxT4DLqVDK9iAQfMRhYs4zU6KVkyqVoxJa/zwoMaEM0s4ltu1eyjTojhWbeQ59TCxlPq9fyACGgXca/knSw0DGORZyf85HvFrHpvmrIwJVijT0lZfguD2x+Te1HJIpYyol1CtlqkgVTPNR8KYpiFhjBBCBI5ep3HHmO5c/+5yXv99J5cN70CazVJlm2BWzFj0ihd75nLdxhRWFFu4ZkMqL/TIZWCQhjLVRdMgTu8hTl9S9QcxSUFZMhsaPqRpHsdxrzYNt2ZkiFrNU+pRovB/bh6oPhipb1Dzm344Sw0DMCo3NzlfqzWQCYUhSuEYyAgR6WT1JVFvof4BN9RW9olkFc91KD/fof77Wh8SyAghROCN7ZXGwPYJONw+Zv+4pdptgvn+G61XvNwzl4GxDoq9Oq7dmMKvhyx173iYprjXedJODuoHb3/DAgW8wST+obsbt2ZktPqDZ9TD9Q5kalKx8tGR/6pTipUXzFcBcIH7c9qozHofoynJsCUhQpOEMqJBwuGDbqiHBeEqHIIYKP8dDYffU39JICOEEMGhaRozxpcPW/po6V42ZxVXu12wg5lXeuZyfLwdh0/H1M0pfJET+OWyAyHYwUxtwYETIw9qt/Cs7nIALlDfMks9jhl30NpUobqQ5YPoi8nTJdFWHeAmwychE74IIcKLhDJBJh+kml84BAjhIFyex0gLY0DeR4QQItgGdUhkfO90fAoe+XYDNU25GMz3Y6te8Vz3XM5MLsWjNO7dnsSze+Pw1WP2x0gIZqD6cCabJK7R/o+vtdHolJe7fS8zXb2CHl9Q21KTVfTkY8YDcK96AQv1mwuoqUmVjBChK2xCmfz8fCZPnozNZiM+Pp6rr76akpKSuncElFKMHz8eTdP48ssvg9vQFiTcPviGS6gQSsKlKqZCuP1O+kMCGSGEaBozxvfEpNfx+7aD/LQxp8btgvm+bNTBrC55TGldCMCL++K4dXMypV5/po4tFynBDPwdzvzOAC7UZrNO606cKuJ59RAXUv9lpwPFiZGHtakoTccENY+hrGm2tvhDAhkhQlvYhDKTJ09m/fr1zJs3j2+//ZZff/2VKVOm+LXv7Nmz0TT/b2bCf+H4ITicQoamdngIE07PUaRWx0ggI4QQTaddUhRXjewIwCP/3YDDXfPKQsF8f9Y0uK1dIf/qnIdRU/x0KIoL1qaztcxY985/aar7YrDnmXEqPbOc47hZ9yAFWhzd1Q7eU3cwjFVBO6c/XtIuZqfWlmSVz+3qzWZtSyiQSX6FaJywCGU2btzId999x2uvvcbQoUMZOXIkzz77LB9++CEHDhyodd9Vq1bx5JNP8sYbbzRRa48W6R+swvXDcDiGD8EQzs9DJIYxEPnvGUIIEaqmntKF1Fgzu/PKePXXHbVuG+z36nNSS5nTK5tUo4cddiMXrE3j0+xoahhZVa1wrprZ6E3nHPsNvOIu759cYvyTL2PepDXZAT9XfaymO3OYCJQPW4rDv8r95iJVMkKEvrAIZRYtWkR8fDyDBg2qfGz06NHodDoWL15c435lZWVcfPHFPP/886Snp/t1LqfTSVFRUZV/IvKFczBRX+FaDXOkSAxjQAIZIYRoTjFmA/ee3hOA5xdsY29+Wa3bB/s9u2+si8/6ZnFcXPkEwPfvSGLq5mQOuvzvwjdlMBOIcMap9DzlHM0E+01s9GWQSCkvWt7lYfPXmDVvnZMBB5MdM/drt+HT9Jyu5nMSS5qlHf6SQCb4yr56sbmbICJAWIQyWVlZpKamVnnMYDCQmJhIVlZWjfvdfvvtjBgxggkTJvh9rpkzZxIXF1f5r23btg1ud0sSSR+QIyGwOFykhDAVIrU6BiSQEUKIUHBW3wyGdkzE4fbxwNfra5z0t0Kw37uTjD5e7pnLHe0OYdQUPx+K4szVrfg6N8rvqpmmvG82Jpj53dOZ08pu4Vn3KXjQM0a/nrlRTzPWsOGobZsjnHlSu5o9WmtS1UH+oV5t0nPXV1M9NzJ0SYjGa9ZQZvr06WiaVuu/TZs2NejYX3/9NfPnz2f27Nn12m/GjBkUFhZW/tu7d2+Dzn+klvBhKxI/KIdboHFke8Ohzf6K9DCmJbxHCCFEONA0jUfP7o1RrzF/Uw7/W1vzF4AVgv0ertPg6tbFfNQnix5RLgo9eqZvS+bKDalsLvVvrplQDmZ2+JK5zn4JlzmuZqdKIVkr5jnL+7xkfY8UXe3DgyrCmWCHEAsYwmfaODTl4xE1GxulQT1fY0iFjBDhxdCcJ7/jjju44oorat2mU6dOpKenk5NTdRZ8j8dDfn5+jcOS5s+fz/bt24mPj6/y+KRJkzj++ONZsGBBtfuZzWbMZrO/lyCO4EntjiFnc3M3I2hqCjkMOb82exsiVaQGMRUkjBFCiNDTJTWWG0/qwtM/beWBr9czsksycVG1hx9RE24I+lCGHtFuPuqTxZuZNl7ca2NJkYVJa9I5J7WUm9sWkGKqfXnopuynVQQzhuyfa9wm02fjWdcpfOIZiBc9erxMNi5hmukHbJqz3uesCCMKi9Y1rNE1yCaJh7RbALiErxgSwqstSSAjRPhp1lAmJSWFlJSUOrcbPnw4BQUFLF++nIEDBwLloYvP52Po0KHV7jN9+nSuueaaKo/16dOHp556ijPPPLPxjRc1ivRgpjotLShpCpEexoAEMkIIEcpuPLkz3645wPbcUh7+dgNPnt+3uZsElC+bPaV1EWckl/L47ni+z4vm05wY/nswivPTSrgqo6jWcKbi/tqU4cyRwcweXwKvuE7gU88AXJSHXafoNzLd/B1ddLmNPmcgwxkPOu7R7qBAs9FDbWeqeqfRxwyWpg5kZOiSEIGhqboGyoaI8ePHk52dzUsvvYTb7ebKK69k0KBBvP/++wDs37+fUaNGMWfOHIYMGVLtMTRN44svvmDixIl+n7eoqIi4uDgKCwux2WyNvo6WNBlUSwtmRGBIGCNE3QJ9b2rp5PkUNVm+O59zX1qEUvDGFYM4pUdanfs0dV9vRZGJJ3YnsKqkvNLbpClOTy7l0lbF9Ih217pvU/bVfAoWH9jLHPdw5nu7o/6aRWGwbid3mn9gsH53UM/f0IDmBe1iXtUuJEqV8b66nfZkBrhljddc1TFNGcqEcv8wWP06uTe1HGEx0S/Ae++9R48ePRg1ahSnnXYaI0eO5JVXXqn8udvtZvPmzZSV1T5Lvmg6ofzmKUJPJM8ZczgJZIQQInwMbJ/INSM7AnD3Z2s5VOqqc5+mfp8fYHPxXu9sXu6RQ78YJy6l8UVuDOesacXFa9P4LCeaYo9W7b5Ncd/d7bbyXH4nRu8ZyeWOq/jJ2xOFjhP1m/nQ+gofWl8NeiADDZsY+A8G8BrnA/BP9YIEMoeRKhkhAidsKmWaSzASypZULQNSMSNq1xKCmAoSyIhAkW/PAkueT1Ebh9vL6c/8xvbcUsb3TueFyQPQtOpDjsM1R39PKVhdYuKdzFjm5UfhUeXtNGmKkfF2Tkm0c3y8/ajhTYHsq3kVrHPa+LUsmfmlKax3/f03FatzMzE2k4tte+l+6L8BO2dD1VY9c4BULtb+Q6Fm41w1l3tVaPXfm3vuGKmS+ZtUyojGatY5ZUTL0NRjl0V4CPUbbCBJGCOEEOHLYtQz+4L+nP3CH8xdl8Uny/Zx/uC2de7XFBP/HknToF+si36xeeS6DvFFbgxf50azw25k/qEo5h+KAqCT1c2AWCd9Y5z0jHHRObk70Qfr309TCnK8ZjY6Y1nntLHKGccqRxxFvr8nRdahGGHN48zYLMZFZ2PVlQdC/kwEHGyHBxuHBzR2zNyu3UOhZqOX2sJdIbT8dXOHMUKIwJNQRjSZljgBsDhaSwpjQAIZIYSIBH3axHHHmO489t0mHvxmPQM7JNA5JabO/ZojmKmQYvIxpXUR12YUsbnMyPx8KwsOWVlfamKH3cgOu5FPc8qvQYciw5xBG4uHVG8+SXo3sToPVp0XHQoFuJSOUp+BQp+RXI+JTI+F3e4oStXRHydidW6GWfM5JeogJ0fnkqiveW6b6iYCbg4VYYdScJ/zQrZ4OpGoCnhCzcKEJyTaFipk6JIQgSXDl+oQrLKxljaE6XASzLRMLS2MAQlkRPBISXNgyfMp/OH1KS55bTGLduTRIz2WL286DotR79e+odTvK/RoLCuysLrYxNoSM5vKjBR6/LuO6uhQdDSWcoy5mL6WQvqbCznGXIS+7hFeRwmFcOY518n8x3UqBry8a32dIfpdQOCX2a5LqAUxh2vqUCYc+pDB6PPJvanlkEoZ0eSkYqZlCYcbaaBJGCOEEJFHr9N4+sJ+nPbMb2zKKuahb9Yz85xj/dq3OStmjhRnUIxKtDMq0Q6UV4YcdOvY7TBywKkn16Un363HXlpEmU+HDw0NMGk+onVebDo3KXoXaQYH7Yx22hnLMGmB+Y63uYc0/dfdh/+4TgXgIfPXlYEM1BySBCqsCeUQ5nBSJSNE4Eko00xC6ebcHGSemcjWEoOYChLICCFE5Eq1WXj6wv5c8vpiPliyl/5tE/yaXwZCt++naeVDnVJMzqN+ZsjZ2Awtap4hTcu97bjTeS4AVxp/5yLjUr/2C5cwJRAkkBEiOMJmSWwRmVryh/dI1FKWta6JBDJCCBH5juuSzO2juwHwzy/XsWpvgd/7htt9ojnv6560k5ssBNjhS+Za+2U4MTJKv5F7THOb5Lyibi25XylaDgllmlG43ZiDpaV/kI8ELf01jJpwg/w9CyFECzL15C6cekwaLq+P699ZTk6Rw+99w/Ge0Zz3+GCHM9m+WK6wX0EBUfTV7eVpy4foAzQcK5JIlYwQwSOhjAgZLflDfTiqCGJa+usWbh1rIYQQjafTafzn/L50Tokmq8jBlHeW43B763WMcLt/NPf9PhjhTKGycLnjSvapRNprB3nNOocoreaVoloqCWSECC4JZZpZuN2Qg00+5Ic+eY3KheM3nUIIIQIn1mLktcsHE2c1smpvAXd/tob6LmoabveRUOgDBCogKFUmrrFfzhZfOqlaEXOsb5KklQbk2EIIUR8SyoSAcLshN4VQuOmLv0lVTFXyNyuEEAKgY3I0L04egEGn8dWqAzzxQ/0XMAjHe0pz9wcaWzXjUAamOC5lua89Nuy8aXmLtrpDAWxh5JAqGSGCT0IZEdIkCGg+EsQcTapjhBBCHGlEl2T+7+w+ADz/83be/XN3vY8RjveWUOgfNCSccSgD1zsuYZG3MzE4eMv6Jj31WUFqYXhr7kAmFH7HhGgKEsqEiHC8GTclCQeahgQxNZO/USGEEDU5f3Bbbh3VFYD7vlrHf9dk1vsY4XifCZU+g7/hTJkyco3jMn71dsOKi9esc+in39cELQw/zR3ICNGSGJq7AULUR8WN35BT//JgUb1Q6EyFsnDsJAshhGh6t43uSk6xkw+W7OG2j1YSbdZzUvfUeh0jasINlH31YpBaGDye1O4h0TerCBIM2T8f9bNiZeZa+2Us8XUkGievW99miH5XE7cwPEggI0TTkkqZECIf/vwnFR0Nd/hzJ89f7eRvUgghhL80TeNfE3tzZt8M3F7Fde8s5/etB+t9nHC994RSv6KicqYiXChQVi61X8USX0dicPC29Q0JZGoQKoFMqPwuCdEUJJQJMeF6I25OodQJCFUSwtSPzB0jhBCiIfQ6jSfP68vonmk4PT6ufntpiwpmIPQ+TO9NGsd5rttZ42tLAqW8Z32NAfq9zd2skBQqgYwQLY2EMiJiSAXI3+S5aLhw7ggLIYRofiaDjhcmD2B0z9TKYGbB5px6Hyec70eh0vfY6ormgn1D2O6OIVXv4N22q+mjP9DczQpJEsgI0Xw0pZRq7kaEsqKiIuLi4igsLMRmszXZecNxPHEoC4VxzsESKh2fcBfOnV/R8jTXvSlSyfMpgsHp8XLTeyv5cWM2Jr2OZy7qz7je6fU+Trj3CZurD/ZbWRK3ZvehxGekk7GEN1qtJMPoqNq2auaeaWlCMYwJx75tMPqRcm9qOaRSJkTJB8TAipTKkSOvI5yvJZTI35sQQohAMxv0vDB5AON7p+Py+rjxveV8sGRPvY8T7veopu6rKAXvFLZlSmY/SnxGBlsO8UHrZUcFMtCwJbUjSUu+diFCiay+JFqkmjoIoVBRI0FL0wn3jq4QQojQZjLoePai/tz7xTo+WraXGZ+vJbvIwa2juqJpmt/HCddVmSo01eqZLqXx6MHufFDUFoCzYw/wSMoGTFrtAwMODydaQvWMhDFChBYJZUJYuN+Aw1F9AhF/OxYSsoQeCWOEEEI0FYNex6xJfUiJNfPcz9uY/eNWdueVMWtSH8wGvd/HiYR+YTCXzs70mLk161hWOePRUNyZuJVr4ndTj+yrvI0RHNCEQxgj/WbREkkoE+Ii4QYcqeSmEZ4kkBFCCNHUNE3jzrHdaZ1g5Z9fruOLlfvZlVfKy5cMJNVm8fs4FfewcO4bBqNq5teyJO7M7k2Bz4RN5+bx1HWcHF3/Va+OFCkBTTiEMUK0ZBLKCCFaBAljhBBCNLeLhrSjTYKVm95bwco9BZz13B88P3kAA9sn1Os4kfClXSCqZtxK45n8zrxc0BGAXqYink5fQzujPRBNrOLIYCPUQ5pwDGLkC0/RUslEv2FAPkwK0XBRE26QvyEhhBAh4/iuKXw1dSRdUmPIKnJwwcuLeO23HdR3QdRIuLc1ZtGCba5ozt83pDKQudi2lw9bLw1KIFOdikmCQ2my4FBrjxDCP7Ikdh1CaSmycP9GRIimFgkdViGqE0r3pkggz6doDiVODzM+X8s3qw8AcHL3FJ44ry9JMeZ6HSeS+of+VM54FbxV2J6n8jvjUnridG4eTtnA+JicJmhh/QWzoiaSwpdwr5KRJbFFY0goU4dQ+2OIpBuvEMEiYYyIdKF2bwp38nyK5qKU4t3Fe3jk2w24PD5SYs3MOqcPo3qm1es4kdQ/rC2Y2eKM5v6Dx7DCEQ/A8daD/F/qBtIMziZqnQgWCWWOJvemlkOGL4UZ+bApRM1kqJIQQohwomkalw5rz1c3HUeX1Bhyi51c/fYypn20ivxSl9/HiaR7X3VDmkp9eh7P68LEfcNY4YgnWvPwr5QNvNZqpQQyESDcAxkhGktCmTAUSTdeIQJF/i6EEEKEq56tbHx780iuPb4jmgafr9zPqf/5hS9X7vd7rplIuw96UrvjTunOt8VpjNszglcLOuJBx+joHP7XbiHn2/bXe7lrIYIh0v72RNOT4Ut1COWysUgqVRWioeRGKFqiUL43hSN5PkUoWbHnEDM+W8vm7GIAhnRM5IEzj6FXRpzfx4iEPuKyIjNP7o5ndUn5HDttDWX8M3lzQJa6FqEjEqpkgtUXlXtTyyGVMkKIsCRDlYQQQkSiAe0S+Obmkdw5phsWo44lO/M549nfmfbRKvYX+LeyUDjfH1cXm7hmQ49uaegAACdMSURBVAqXrU9jdYkZq87H1DYFfDUgTwIZIUREkkqZOoR6QhkJ34QIUR/h3NEUIlBC/d4UbuT5FKFqf4Gdmf/byLdrMgEw6XVcPLQdN5zUmTSbpc79w6WfqBQsLzbz6n4bvxVYATBoikmpJdzYppAUk6/K9v6s0iRCXyRUyYBUyojGk1CmDuHwxxAuN1whGkPCGCH+Fg73pnAiz6cIdWv2FTDzf5tYtCMPKA9nJg1szVXHdaRrWmyt+4ZyP9Hlgx/yongvK7ZymJIexVkppdzQppA2Fm+t+0s4E74iJZABCWVE40koU4dw+WMI5RuuEI0hYYwQRwuXe1O4kOdThIs/th3kqXlbWLb7UOVjI7skc+nw9ozqkYpBX/3MBKHWT9xtN/BJTgxf5kST79EDYNIUE1JKuSqjiPZWT72OJ+FMeImkQAYklBGNZ2juBojAiJpwQ8jdcIVoDAljhBBCiKqO65LMcV2SWborn1d/3cGPG7P5fdtBft92kHSbhQn9Mzi7f2u6p8WiHbY0UcU9tTn7irkuHT/mR/HtwWhWFpsrH08zeTg/rYRzU0uOGqbkL09qdwlmhBBhSypl6hCOCaWEMyKcSRgjRN3C8d4UyuT5FOFqb34Z7y7ezSfL9pFf6qp8vFNyNKf2SuOkbqkMbJ+AyfB3BU1T9RO9CjaWmvijwMKvBVZWFZtQlAdFOhTHxTs4P62EExPsGAK4tLWEM6Et0qpkQCplRONJKFOHcP1jkGBGhCMJZITwT7jem0KVPJ8i3Dk9XuZvzOHzlfv5ZXMuLu/fFSdRJj1DOyYytFMSA9sn0CvDBnNfDXgb7F6NjaVG1pSYWVZU/q/Iq6+yzbExTsYmlXFGcmmDq2L8JeFM6InEQAYklBGNJ6FMHcL5j0GCGREOJIgRov7C+d7kj+eff57HH3+crKws+vbty7PPPsuQIUNq3P6TTz7hvvvuY9euXXTt2pXHHnuM0047ze/zRfrzKVqWYoebnzfnsmBTDr9uzeVgiavKz3UadEiOppM3lw4WN20sHlqZvCSZvCQYfMTqfVj1Cv1h1StuH9h9GsUeHQUeHQfderJcBvY5DOx2GNheZmS3w4CPqiUvsXofg2wOTkhwcEK8nVbm2ifuDQYJZ0KDBDL1J/emlkPmlIlgMs+MCGUSxgghqvPRRx8xbdo0XnrpJYYOHcrs2bMZO3YsmzdvJjU19ajtFy5cyEUXXcTMmTM544wzeP/995k4cSIrVqygd+/ezXAFQjSvWIuRs/pmcFbfDHw+xaasYhZuP8iyXYdYvucQucVOduSWsoOoWo+jQ6HTwKc4KmypSbLRS58YJwNinQyyOekV4wro0KSGODwMkICmeURqICNEoEilTB0iIaGUYEaEEgljhGi8SLg31WTo0KEMHjyY5557DgCfz0fbtm25+eabmT59+lHbX3DBBZSWlvLtt99WPjZs2DD69evHSy+95Nc5I/n5FOJIOcUONmYWsz2nhJ0HS9lfYGf/nn3kufUUeHR4VM0piklTxBu8JJl8pJm8tDZ7aGfx0NnqpkuUmxSjF62ZQxh/SDjTdCI9kJFKGREIUinTAkjFjAgFEsYIIericrlYvnw5M2bMqHxMp9MxevRoFi1aVO0+ixYtYtq0aVUeGzt2LF9++WWN53E6nTidzsr/LyoqalzDhQgjqbEWUmMtnNgt5bBHB1P21YsoBS4FZV4dHgU+paHTFEYNovQ+jBphEbrUpSIokHAmuCI9kBEiUCSUaSFCYSlE0TJJGCOE8NfBgwfxer2kpaVVeTwtLY1NmzZVu09WVla122dlZdV4npkzZ/LQQw81vsFCRJCK+7X21YuYdcGdhDdUSDgTPBLICOE/Xd2biEgiH5BFU4macIP8vgkhQtKMGTMoLCys/Ld3797mbpIQIaMl3rs9qd0r/4nGkedRiPqTSpkWSIYziWBpiR05IUTgJCcno9fryc7OrvJ4dnY26enp1e6Tnp5er+0BzGYzZrO58Q0WIkK15L6iVM80XEsLY6TfKwJFKmVaKKliEIEkv09CiEAwmUwMHDiQn376qfIxn8/HTz/9xPDhw6vdZ/jw4VW2B5g3b16N2wsh/NPS7+tSPVM/8jwJ0XBSKdPCteRvQkTjtfQOmxAi8KZNm8bll1/OoEGDGDJkCLNnz6a0tJQrr7wSgMsuu4zWrVszc+ZMAG699VZOPPFEnnzySU4//XQ+/PBDli1bxiuvvNKclyFERJA5CctJ9UzNJIwRovEklBFywxX1IkGMECKYLrjgAnJzc7n//vvJysqiX79+fPfdd5WT+e7Zswed7u9C3xEjRvD+++/zz3/+k3vuuYeuXbvy5Zdf0rt37+a6BCEijnyJV+7wAKKlBzQSxggROJpSSjV3I0JZS1wfXm66ojoSxggROlrivSmY5PkUwj/SR6xeSwpoJIwp1xT9Yrk3tRxSKSOOIt+GiAoSxAghhBCiglRXV+/IoCISQxoJY4QInrCZ6Dc/P5/Jkydjs9mIj4/n6quvpqSkpNZ9TjrpJDRNq/Lv+uuvb6IWhzeZuLXlqnjt5fUXQgghRHWkj1C7wycJDucwIxKuQYhwEDaVMpMnTyYzM5N58+bhdru58sormTJlCu+//36t+1177bU8/PDDlf8fFRUV7KZGFPlGpOWQDpYQQggh/CV9RP+FUyWNBDBCNL2wCGU2btzId999x9KlSxk0aBAAzz77LKeddhpPPPEEGRkZNe4bFRVFenp6UzU1YsmNNzJJECOEEEKIxpBh7/VXXfDRXEGNhDD1J/1nEWhhEcosWrSI+Pj4ykAGYPTo0eh0OhYvXszZZ59d477vvfce7777Lunp6Zx55pncd999tVbLOJ1OnE5n5f8XFRUF5iIihIQz4U9uJEIIIYQIJAlmGq+ucKQxoY0EL0KEtrAIZbKyskhNTa3ymMFgIDExkaysrBr3u/jii2nfvj0ZGRmsWbOGu+++m82bN/P555/XuM/MmTN56KGHAtb2SHX4B3u5CYc2CWGEEEIIEWzyxV1wSbAiRORq1lBm+vTpPPbYY7Vus3HjxgYff8qUKZX/3adPH1q1asWoUaPYvn07nTt3rnafGTNmMG3atMr/Lyoqom3btg1uQ0sgN+HQI0GMEEIIIZqDVM2ISCZ9bBEMzRrK3HHHHVxxxRW1btOpUyfS09PJycmp8rjH4yE/P79e88UMHToUgG3bttUYypjNZsxms9/HFH+T6pnmJTcJIYQQQoQC+cJOCCH816yhTEpKCikpKXVuN3z4cAoKCli+fDkDBw4EYP78+fh8vsqgxR+rVq0CoFWrVg1qr/CfBDTBJyGMEEIIIUKZVM0IIUTdNKWUau5G+GP8+PFkZ2fz0ksvVS6JPWjQoMolsffv38+oUaOYM2cOQ4YMYfv27bz//vucdtppJCUlsWbNGm6//XbatGnDL7/84vd5i4qKiIuLo7CwEJvNFqzLazHkxtxwEsIIISrIvSmw5PkUIvikDyjCXVP3xeXe1HKExUS/UL6K0tSpUxk1ahQ6nY5JkybxzDPPVP7c7XazefNmysrKADCZTPz444/Mnj2b0tJS2rZty6RJk/jnP//ZXJcgkAoaf0kAI4QQQohIIlUzQghRvbCplGkuklA2nZZ6o5YARghRX3JvCix5PoVoWi21zyfCV3P01+Xe1HKETaWMiHzVvdlF2k1bAhghhBBCtHRSNSOEEH+TUEaEtNpCjFC8mUvoIoQQQghRN1mhSQghykkoI8JWfQKQht7wJWQRQgghhAgeCWdEqJPPAyLYJJQRLYK8mQohhBBChC4Z0iSEaKl0zd0AIYQQQgghhIiacIN8kSZCivw+iqYgoYwQQgghhBAiZMgHYSFESyKhjBBCCCGEECKkSNWMaG7y+yeaioQyQgghhBBCiJAk4YwQItJJKCOEEEIIIYQIaRLMiKYkv2+iKUkoI4QQQgghhAh5UjUjmoL8jommJqGMEEIIIYQQImxIOCOEiCQSygghhBBCCCHCjoQzItDk90k0BwllhBBCCCGEEGFLwhkRCPI7JJqLhDJCCCGEEEKIsCcfqoUQ4UhCGSGEEEIIIUREkKoZ0RDyOyOak4QyQgghhBBCiIgi4Yzwl/yeiOYmoYwQQgghhBAiIkk4I2ojvxsiFEgoI4QQQgghhIhoEs4IIUKVhDJCCCGEEEKIFkHCGVFBfg9EqJBQRgghhBBCCNGiSDjTsslrL0KJhDJCCCGEEEKIFknCmZZHXm8RaiSUEUIIIYQQQrRoEs60DPIai1AkoYwQQgghhBBCIOFMJJPXVYQqQ3M3QAghhBBCCCFCyeEf4Mu+erEZWyICQQIZEcqkUkYIIYQQQgghaiDVM+FNXjsR6qRSRgghhBBCCCHqUPHhXipnwoOEMSJcSCgjhBBCCCGEEH6SoU2hTwIZEU5k+JIQQgghhBBCNIAMbQo98nqIcCOVMkIIIYQQQgjRCFI90/wkjBHhSkIZIYQQQgghhAgQCWiangQyIpxJKCOEEEIIIYQQQSCTAweXhDEiEkgoI4QQQgghhBBBJNUzgSVhjIgkEsoIIYQQQgghRBM5MlCQkMZ/EsaISCShjBBCCCGEEEI0E6miqZuEMSKSSSgjhBBCCCGEECFAApq/SRAjWgoJZYQQQgghhBAixLTEYU4SxIiWSEIZIYQQQgghhAhx1QUWkRDUSBAjWjoJZYQQQgghhBAiDIVjUCMhjBBVSSgjhBBCCCGEEBGiptCjOcIaCWCEqJuEMkIIIYQQQggR4SQgESI06Zq7AUIIIYQQQgghhBAtkYQyQgghhBBCCCGEEM1AQhkhhBBCCCGEEEKIZiChjBBCCCGEEEIIIUQzkFBGCCGEEEIIIYQQohlIKCOEEEIIIYQQQgjRDCSUEUIIIYQQQgghhGgGYRPK5OfnM3nyZGw2G/Hx8Vx99dWUlJTUud+iRYs45ZRTiI6OxmazccIJJ2C325ugxUIIIYQQQgghhBA1C5tQZvLkyaxfv5558+bx7bff8uuvvzJlypRa91m0aBHjxo1jzJgxLFmyhKVLlzJ16lR0urC5bCGEEEIIIYQQQkQoTSmlmrsRddm4cSPHHHMMS5cuZdCgQQB89913nHbaaezbt4+MjIxq9xs2bBinnnoqjzzySIPPXVRURFxcHIWFhdhstgYfRwghhAgUuTcFljyfQgghQo3cm1oOQ3M3wB+LFi0iPj6+MpABGD16NDqdjsWLF3P22WcftU9OTg6LFy9m8uTJjBgxgu3bt9OjRw8effRRRo4cWeO5nE4nTqez8v8LCwuB8j8KIYQQIhRU3JPC4HuVsFDxPMq9XgghRKiQe33LERahTFZWFqmpqVUeMxgMJCYmkpWVVe0+O3bsAODBBx/kiSeeoF+/fsyZM4dRo0axbt06unbtWu1+M2fO5KGHHjrq8bZt2zbyKoQQQojAKi4uJi4urrmbEfaKi4sBudcLIYQIPXl5eXKvj3DNGspMnz6dxx57rNZtNm7c2KBj+3w+AK677jquvPJKAPr3789PP/3EG2+8wcyZM6vdb8aMGUybNq3KcfLz80lKSkLTtFrPWVRURNu2bdm7d29ElphF8vVF8rWBXF84i+Rrg8i+vmBem1KK4uLiGofvivrJyMhg7969xMbG1nmvD4RI/r2vEOnXKNcX/iL9GiP9+iDyr7GwsJB27dqRmJjY3E0RQdasocwdd9zBFVdcUes2nTp1Ij09nZycnCqPezwe8vPzSU9Pr3a/Vq1aAXDMMcdUebxnz57s2bOnxvOZzWbMZnOVx+Lj42tt45FsNltEvjFUiOTri+RrA7m+cBbJ1waRfX3Bujb51ixwdDodbdq0afLzRvLvfYVIv0a5vvAX6dcY6dcHkX+NskhN5GvWUCYlJYWUlJQ6txs+fDgFBQUsX76cgQMHAjB//nx8Ph9Dhw6tdp8OHTqQkZHB5s2bqzy+ZcsWxo8f3/jGCyGEEEIIIYQQQjRCWMRuPXv2ZNy4cVx77bUsWbKEP/74g6lTp3LhhRdWlm7v37+fHj16sGTJEgA0TeOuu+7imWee4dNPP2Xbtm3cd999bNq0iauvvro5L0cIIYQQQgghhBAiPCb6BXjvvfeYOnUqo0aNQqfTMWnSJJ555pnKn7vdbjZv3kxZWVnlY7fddhsOh4Pbb7+d/Px8+vbty7x58+jcuXNQ2mg2m3nggQeOGv4UKSL5+iL52kCuL5xF8rVBZF9fJF+baJyW8LsR6dco1xf+Iv0aI/36IPKvMdKvT/xNU7LGlhBCCCGEEEIIIUSTC4vhS0IIIYQQQgghhBCRRkIZIYQQQgghhBBCiGYgoYwQQgghhBBCCCFEM5BQRgghhBBCCCGEEKIZSCjjp127dnH11VfTsWNHrFYrnTt35oEHHsDlctW6j6Zp1f775JNPKrer7ucffvhhU1xWlbbW9/oATjrppKPafv3111fZZs+ePZx++ulERUWRmprKXXfdhcfjCeblHKUh15efn8/NN99M9+7dsVqttGvXjltuuYXCwsIq2zX369fQ187hcHDTTTeRlJRETEwMkyZNIjs7u8o2ofDaATz66KOMGDGCqKgo4uPj/dqnpr+9xx9/vHKbDh06HPXzWbNmBekqqteQa7viiiuOave4ceOqbJOfn8/kyZOx2WzEx8dz9dVXU1JSEoQrqF19r8/tdnP33XfTp08foqOjycjI4LLLLuPAgQNVtguF1w4a9voppbj//vtp1aoVVquV0aNHs3Xr1irbhMrrJwKnIa+pP/fYUNGY31mlFOPHj0fTNL788svgNrQRGnKN1113HZ07d8ZqtZKSksKECRPYtGlTE7W4fup7ff72k0JFQ16/V155hZNOOgmbzYamaRQUFDRNY/30/PPP06FDBywWC0OHDmXJkiW1bv/JJ5/Qo0cPLBYLffr04X//+18TtbRh6nN969evZ9KkSZX9g9mzZzddQxuhPtf46quvcvzxx5OQkEBCQgKjR4+u8zUX4UFCGT9t2rQJn8/Hyy+/zPr163nqqad46aWXuOeee2rcp23btmRmZlb599BDDxETE8P48eOrbPvmm29W2W7ixIlBvqKqGnJ9Fa699toqbf/3v/9d+TOv18vpp5+Oy+Vi4cKFvP3227z11lvcf//9wbycozTk+g4cOMCBAwd44oknWLduHW+99RbfffcdV1999VHbNufr19DX7vbbb+ebb77hk08+4ZdffuHAgQOcc845lT8PldcOwOVycd5553HDDTf4vc+Rf3tvvPEGmqYxadKkKts9/PDDVba7+eabA938WjXk2gDGjRtXpd0ffPBBlZ9PnjyZ9evXM2/ePL799lt+/fVXpkyZEsim+6W+11dWVsaKFSu47777WLFiBZ9//jmbN2/mrLPOOmrb5n7toGGv37///W+eeeYZXnrpJRYvXkx0dDRjx47F4XBUbhMqr58InIa+prXdY0NJY35nZ8+ejaZpQW5h4zXkGgcOHMibb77Jxo0b+f7771FKMWbMGLxebxO12n/1vb769JNCQUNev7KyMsaNG+dXf7ipffTRR0ybNo0HHniAFStW0LdvX8aOHUtOTk612y9cuJCLLrqIq6++mpUrVzJx4kQmTpzIunXrmrjl/qnv9ZWVldGpUydmzZpFenp6E7e2Yep7jQsWLOCiiy7i559/ZtGiRbRt25YxY8awf//+Jm65CDglGuzf//636tixY7326devn7rqqquqPAaoL774IoAtCwx/ru/EE09Ut956a40//9///qd0Op3KysqqfOzFF19UNptNOZ3OQDW1QRry+n388cfKZDIpt9td+Vgovn51XVtBQYEyGo3qk08+qXxs48aNClCLFi1SSoXma/fmm2+quLi4Bu07YcIEdcopp1R5rH379uqpp55qfMMCoD7Xdvnll6sJEybU+PMNGzYoQC1durTysblz5ypN09T+/fsb2dKGacxrt2TJEgWo3bt3Vz4WSq+dUv5fn8/nU+np6erxxx+vfKygoECZzWb1wQcfKKVC8/UTjdPQ17Sue2yoaMzv7MqVK1Xr1q1VZmZmSN5PKwTq73L16tUKUNu2bQtGMxssUNdXXT8pFDT2+n7++WcFqEOHDgWxlfUzZMgQddNNN1X+v9frVRkZGWrmzJnVbn/++eer008/vcpjQ4cOVdddd11Q29lQ9b2+w4VaH6EmjblGpZTyeDwqNjZWvf3228FqomgiUinTCIWFhSQmJvq9/fLly1m1alW13yDcdNNNJCcnM2TIEN544w2UUoFsaoP4e33vvfceycnJ9O7dmxkzZlBWVlb5s0WLFtGnTx/S0tIqHxs7dixFRUWsX78+KO32V31fv4p9bDYbBoOhyuOh9vrVdW3Lly/H7XYzevToysd69OhBu3btWLRoERDar119ZWdn89///rfav71Zs2aRlJRE//79efzxx5tleFZDLFiwgNTUVLp3784NN9xAXl5e5c8WLVpEfHw8gwYNqnxs9OjR6HQ6Fi9e3BzNbZTCwkI0TTtqeFA4vnY7d+4kKyuryt9eXFwcQ4cOrfK3F0mvn2jca1rbPTZUNPT6ysrKuPjii3n++edD/pvtQPxdlpaW8uabb9KxY0fatm0brKY2SKDed2rqJzW3SHtfdblcLF++vMq9RKfTMXr06Mp7yZEWLVpUZXso79fVtH1zasj1hZtAXGNZWRlut7ven2dE6Amtd8wwsm3bNp599lmeeOIJv/d5/fXX6dmzJyNGjKjy+MMPP8wpp5xCVFQUP/zwAzfeeCMlJSXccsstgW623/y9vosvvpj27duTkZHBmjVruPvuu9m8eTOff/45AFlZWVU+1AOV/5+VlRWcxvuhIa/fwYMHeeSRR44qdQ2118+fa8vKysJkMh31ITctLa3ydQnV164h3n77bWJjY6sMzwK45ZZbGDBgAImJiSxcuJAZM2aQmZnJf/7zn2ZqqX/GjRvHOeecQ8eOHdm+fTv33HMP48ePZ9GiRej1erKyskhNTa2yj8FgIDExMexeO4fDwd13381FF12EzWarfDxcX7uK57+6v63D//Yi5fUT5Rr6mtZ1jw0VDb2+22+/nREjRjBhwoRgN7HRGvN3+cILL/CPf/yD0tJSunfvzrx58zCZTMFsbr0F4n2npn5SKIi099WDBw/i9XqrvZfUNGdRTf26ULz+hlxfuAnENd59991kZGQcFbaJ8NPiK2WmT59e44SgFf+O/MPYv38/48aN47zzzuPaa6/16zx2u53333+/2m/q77vvPo477jj69+/P3XffzT/+8Y8qk5GG8vVNmTKFsWPH0qdPHyZPnsycOXP44osv2L59e0DaX5emev2Kioo4/fTTOeaYY3jwwQer/CxYr19TXVtzacj1NdQbb7zB5MmTsVgsVR6fNm0aJ510EsceeyzXX389Tz75JM8++yxOp7NR5wv2tV144YWcddZZ9OnTh4kTJ/Ltt9+ydOlSFixY0Kh2+6upXju3283555+PUooXX3yxys+C9dpB0/5uivAW7N+VcLzH+uvrr79m/vz5zT4ZZ1P8vU+ePJmVK1fyyy+/0K1bN84///wqc0gFU1O9n9XWTwomeb8WLdWsWbP48MMP+eKLL47q34rw0+IrZe644w6uuOKKWrfp1KlT5X8fOHCAk08+mREjRvDKK6/4fZ5PP/2UsrIyLrvssjq3HTp0KI888ghOpxOz2ez3OarTVNdXYejQoUB5tUbnzp1JT08/albwihV+AlGq3BTXV1xczLhx44iNjeWLL77AaDTWun2gXr9gXlt6ejoul4uCgoIq1TLZ2dmVr0uovXYN9dtvv7F582Y++uijOrcdOnQoHo+HXbt20b179waf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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "svi_samples = {k: v.detach().cpu().numpy() for k, v in samples.items()}\n", + "svi_mvn_samples = {k: v.detach().cpu().numpy() for k, v in mvn_samples.items()}\n", + "\n", + "fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(12, 6))\n", + "fig.suptitle(\"Cross-sections of the Posterior Distribution\", fontsize=16)\n", + "sns.kdeplot(x=svi_samples[\"bA\"], y=svi_samples[\"bR\"], ax=axs[0], bw_adjust=4 )\n", + "sns.kdeplot(x=svi_mvn_samples[\"bA\"], y=svi_mvn_samples[\"bR\"], ax=axs[0], shade=True, bw_adjust=4)\n", + "axs[0].set(xlabel=\"bA\", ylabel=\"bR\", xlim=(-2.8, -0.9), ylim=(-0.6, 0.2))\n", + "\n", + "sns.kdeplot(x=svi_samples[\"bR\"], y=svi_samples[\"bAR\"], ax=axs[1],bw_adjust=4 )\n", + "sns.kdeplot(x=svi_mvn_samples[\"bR\"], y=svi_mvn_samples[\"bAR\"], ax=axs[1], shade=True, bw_adjust=4)\n", + "axs[1].set(xlabel=\"bR\", ylabel=\"bAR\", xlim=(-0.55, 0.2), ylim=(-0.15, 0.85))\n", + "\n", + "\n", + "for label, color in zip([\"SVI (Diagonal Normal)\", \"SVI (Multivariate Normal)\"], sns.color_palette()[:2]):\n", + " plt.plot([], [],\n", + " label=label, color=color)\n", + " \n", + "fig.legend(loc='upper right')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see the implications of this by repeating our visualization of the ruggedness-GDP coefficient distribution for countries inside and outside Africa. The posterior uncertainty over each of the two coefficients is now roughly the same, in line with what eyeballing the data would suggest." + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABFUAAAJOCAYAAAB2ojipAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAADdpElEQVR4nOzdd3xT9f7H8XfSvSm00DI6KMgWEByXISAoIqgIXEBFhl5EUflxvSriABQV0YuCC0W5LMd1Aa6LskFxsAQHe+9RRvfO+f2RJhI6KKFtkub1fDz6SHpycs4nadKTfM7n8/2aDMMwBAAAAAAAgItidnUAAAAAAAAAnoikCgAAAAAAgBNIqgAAAAAAADiBpAoAAAAAAIATSKoAAAAAAAA4wdfVAQAAAAAAPFtBQYHy8vJcHQZQ7nx8fOTr6yuTyVTs7SRVAAAAAABOS09P16FDh2QYhqtDASpEcHCwYmNj5e/vX+Q2k8ErHwAAAADghIKCAu3cuVPBwcGKjo4u8Ww+4IkMw1Bubq5OnjypgoICNWzYUGaz4ygqVKoAAAAAAJySl5cnwzAUHR2toKAgV4cDlLugoCD5+flp//79ys3NVWBgoMPtDFQLAAAAALgkVKigKju/OsXhtkqMAwAAAAAAoMqg/QcAAAAAUK4OHDig5OTkSttfVFSU4uLiKm1/gA1JFQAAAABAuTlw4IAaN2mirMzMSttnUHCwtm3dWq6JFcMwNGLECH322Wc6c+aMfv31V7Vq1arYdU0mkxYsWKDevXuX2/7dSUJCgkaPHq3Ro0e7OhS3Q1IFAAAAAFBukpOTlZWZqTvHvKxacUkVvr/jB3brg8mPKjk5+aKTKj/99JM6dOigG2+8Ud98843Dbd9++61mz56tlStXqn79+oqKiipxO0ePHlVkZKRT8buT2bNna/To0Tp79qzD8nXr1ikkJMQ1Qbk5kioAUA5MJpPGjx+vCRMmuDoUu3nz5un555/X7t27FRISUuTg6Ax3fJzOWrlypbp06aIVK1aoc+fOFbqvgwcPqmHDhlq2bJnat29fofty1jXXXKNrr71WL730kqtD8WhDhw7VypUrtW/fPleH4nFs78OVK1e6NA4A5adWXJLqNmzm6jBKNXPmTD300EOaOXOmjhw5otq1a9tv2717t2JjY9WuXbsS75+bmyt/f3/FxMRURrguEx0d7eoQ3BYD1QJwW7Nnz5bJZLL/BAYGqnbt2urevbtee+01paWluTrEEv3444+aMGFCuSQynLFt2zYNHTpUSUlJevfddzVjxoxS1//hhx/Uo0cP1alTR4GBgYqLi9PNN9+sDz/8sJIirtqeffZZXX311cUmVL7//nv1799fderUkb+/vyIiInT11Vfr2Wef1fHjxx3W7dy5s/39YDabFR4erkaNGumuu+7SkiVLit13QkKCw/uoZs2a6tixoxYsWOCw3pgxY/Tmm2/q2LFj5ffAy8mECRMcHkNJPxWdHHOFlStXOjxGHx8f1axZU/369dPWrVtdHR4AeLT09HR9/PHHuv/++9WzZ0/Nnj3bftvQoUP10EMP6cCBAzKZTEpISJBkPRY/+OCDGj16tKKiotS9e3dJ1hNPCxcutN//0KFDuv3221W9enWFhISobdu2+uWXXyRZkzW33nqratWqpdDQUF155ZVaunSpQ2wJCQl64YUXdPfddyssLExxcXEX/DzXuXNnjRo1So899piqV6+umJiYIifCXnnlFbVo0UIhISGqV6+eRo4cqfT0dEnWY86wYcOUkpJiP+7Y7p+QkKCpU6fat3PgwAHdeuutCg0NVXh4uPr37+/wuWXChAlq1aqV5s2bp4SEBEVERGjgwIEOn98/++wztWjRQkFBQapRo4a6deumjIyMUh+jO6JSBYDbe/bZZ5WYmKi8vDwdO3ZMK1eu1OjRo/XKK6/oyy+/1OWXX+7qEJWVlSVf37/+pf7444965plnNHToUFWrVq3S41m5cqUsFoumTZumBg0alLrup59+qgEDBqhVq1b6v//7P0VGRmrv3r1avXq13n33Xd1xxx2VFHXVdPLkSc2ZM0dz5swpctu4ceM0ceJE1a9fX0OHDlX9+vWVnZ2tDRs2aMqUKZozZ452797tcJ+6detq0qRJkqSMjAzt2rVL8+fP1/vvv6/+/fvr/fffl5+fn8N9WrVqpX/961+SpCNHjuidd95Rnz59NH36dN13332SpFtvvVXh4eF666239Oyzz1bEU+G0Pn36OLyO09PTdf/99+u2225Tnz597Mtr1arlivAcvPvuu7JYLOW+3VGjRunKK69UXl6efvvtN7399ttauXKl/vjjjyp/dhQAKsonn3yixo0bq1GjRho0aJBGjx6tsWPHymQyadq0aUpKStKMGTO0bt06+fj42O83Z84c3X///VqzZk2x201PT1enTp1Up04dffnll4qJidHGjRvtx4f09HTddNNNev755xUQEKC5c+fq5ptv1vbt2x3al6ZMmaKJEyfqiSee0Geffab7779fnTp1UqNGjUp8THPmzNHDDz+sX375RT/99JOGDh2q9u3b6/rrr5dknRr4tddeU2Jiovbs2aORI0fqscce01tvvaV27dpp6tSpGjdunLZv3y5JCg0NLbIPi8ViT6isWrVK+fn5euCBBzRgwACHasPdu3dr4cKF+vrrr3XmzBn1799fL774op5//nkdPXpUt99+u1566SXddtttSktL0/fffy/DMMr+B3QTJFUAuL0ePXqobdu29t/Hjh2r5cuXq1evXrrlllu0detWBQUFuTBCKTAw0KX7P9+JEyckqUwJnQkTJqhp06b6+eef5e/vX+x24Lz3339fvr6+uvnmmx2Wf/zxx5o4caL69++vefPmFXnuX331Vb366qtFthcREaFBgwY5LHvxxRc1atQovfXWW0pISNDkyZMdbq9Tp47DfQYPHqwGDRro1VdftSdVzGaz+vXrp7lz5+qZZ56RyWS6pMddni6//HKH5GlycrLuv/9+XX755UWeC2dkZGSU2CeemZmp4ODgMm/r/IRWeenYsaP69etn/71Ro0a6//77NXfuXD322GMVsk8AqOpmzpxpP47ceOONSklJ0apVq9S5c2dFREQoLCxMPj4+RZLXDRs2LLVd9sMPP9TJkye1bt06Va9eXZIcTg60bNlSLVu2tP8+ceJELViwQF9++aUefPBB+/KbbrpJI0eOlGStKH311Ve1YsWKUpMql19+ucaPH2+P84033tCyZcvsSZVzB5pNSEjQc889p/vuu09vvfWWvWLWZDKVmrBftmyZfv/9d+3du1f16tWTJM2dO1fNmjXTunXrdOWVV0qyJl9mz56tsLAwSdJdd92lZcuW2ZMq+fn56tOnj+Lj4yVJLVq0KHGf7oz2HwAe6brrrtPTTz+t/fv36/3333e4bdu2berXr5+qV6+uwMBAtW3bVl9++aXDOrbWojVr1ujhhx9WdHS0QkJCdNttt+nkyZMO665fv17du3dXVFSUgoKClJiYqLvvvtthnXPLIydMmKBHH31UkpSYmGgvn9y3b586derkcBA9V6NGjewlpKV566231KxZMwUEBKh27dp64IEHHNqMEhIS7AfT6Ohoh9iKs3v3bl155ZVFvtRLUs2aNS8Yz6+//qoePXooPDxcoaGh6tq1q37++WeHdWzP9+rVqzVixAjVqFFD4eHhGjx4sM6cOVNkm4sWLVLHjh0VEhKisLAw9ezZU3/++ecFY7E9nvOrOy7Gp59+qjZt2igoKEhRUVEaNGiQDh8+XOx6TZs2VWBgoJo3b64FCxZo6NCh9vJgm4ULF+rqq68ucqZn3LhxioqK0syZM4t97iMiIso8do2Pj49ee+01NW3aVG+88YZSUlJKXT8mJkZNmjTR3r17HZZff/312r9/vzZt2lTiffPy8lS9enUNGzasyG2pqakKDAzUI488Yl/2+uuvq1mzZgoODlZkZKTatm1bYW1lF/PeX7VqlUaOHKmaNWuqbt26kqxl082bN9eGDRt07bXXKjg4WE888YQk6YsvvlDPnj1Vu3ZtBQQEKCkpSRMnTlRBQYHD9s9/Dezbt08mk0n//ve/NWPGDCUlJSkgIEBXXnml1q1b5/Rj7dixoyQ5vNaLe/1Jf7VPnSsrK0ujRo1SVFSUwsLCdMstt+jw4cPF/r9YuXKl2rZtq8DAQCUlJemdd94pdpuSNYloe/9Ur15dAwcO1MGDB4usZ3sugoKCdNVVV+n7778vso6t9emTTz7R888/r7p16yowMFBdu3bVrl27iqz/yy+/6MYbb1RERISCg4PVqVOnImeR09LSNHr0aCUkJCggIEA1a9bU9ddfr40bN9rX2blzp/r27auYmBgFBgaqbt26Gjhw4AXfVwA8y/bt27V27VrdfvvtkiRfX18NGDBAM2fOvOB927RpU+rtmzZtUuvWre0JlfOlp6frkUceUZMmTVStWjWFhoZq69atOnDggMN6555QsCU6LnTC6/wK7tjYWIf7LF26VF27dlWdOnUUFhamu+66S6dOnVLmRczUtHXrVtWrV8+eUJGkpk2bqlq1ag6tqQkJCfaEyvmxtGzZUl27dlWLFi3097//Xe+++26xnwk9AUkVAB7rrrvukiQtXrzYvuzPP//UNddco61bt+rxxx/XlClTFBISot69excZQ0KSHnroIW3evFnjx4/X/fffr6+++srhDMGJEyd0ww03aN++fXr88cf1+uuv68477yySNDhXnz597AfoV199VfPmzdO8efMUHR2tu+66S7/99pv++OMPh/usW7dOO3bsuOBZ9wkTJuiBBx5Q7dq1NWXKFPXt21fvvPOObrjhBuXl5UmSpk6dqttuu02SNH36dM2bN8+hReJ88fHxWrZsmQ4dOlTqvovz559/qmPHjtq8ebMee+wxPf3009q7d686d+5s7xs+14MPPqitW7dqwoQJGjx4sD744AP17t3bodRz3rx56tmzp0JDQzV58mQ9/fTT2rJlizp06FCmwT+7du2qrl27XvRjkaxfuPv37y8fHx9NmjRJw4cP1/z589WhQweHxNU333yjAQMGyM/PT5MmTVKfPn10zz33aMOGDQ7by8vL07p163TFFVc4LN+xY4d27Nih3r17F1tW6wwfHx/dfvvtyszM1A8//FDqunl5eTp48KBq1KjhsNz2IbGkcmbJWolx2223aeHChcrNzXW4beHChcrJydHAgQMlWVthRo0apaZNm2rq1Kl65pln1KpVq2JfG5fqYt/7I0eO1JYtWzRu3Dg9/vjj9uWnTp1Sjx491KpVK02dOlVdunSRZH1thIaG6uGHH9a0adPUpk2bIvctzYcffqiXX35ZI0aM0HPPPad9+/apT58+9vftxbK9F5ydaWLo0KF6/fXXddNNN2ny5MkKCgpSz549i6z366+/6sYbb9SpU6f0zDPP6J577tGzzz7rMG6AzfPPP6/BgwerYcOGeuWVVzR69GgtW7ZM1157rcP7Z+bMmRoxYoRiYmL00ksvqX379rrllluKTb5I1kqsBQsW6JFHHtHYsWP1888/684773RYZ/ny5br22muVmpqq8ePH64UXXtDZs2d13XXXae3atfb17rvvPk2fPl19+/bVW2+9pUceeURBQUH2LwG5ubnq3r27fv75Zz300EN68803de+992rPnj0uGyMLQMWYOXOm8vPzVbt2bfn6+srX11fTp0/X559/fsEk6oVmwblQBfUjjzyiBQsW6IUXXtD333+vTZs2qUWLFkWOq+dXP5pMpgu2mJZ2n3379qlXr166/PLL9fnnn2vDhg168803JanIvstDabH4+PhoyZIlWrRokZo2barXX39djRo1KnLCxxPQ/gPAY9WtW1cREREOZ2r/7//+T3FxcVq3bp0CAgIkWb88dejQQWPGjLEnG2xq1KihxYsX28+4WiwWvfbaa0pJSVFERIR+/PFHnTlzRosXL3ZoQXruuedKjOvyyy/XFVdcoY8++ki9e/d2OHP897//XQ899JDef/99vfjii/bl77//vkJCQkpNfpw8eVKTJk3SDTfcoEWLFslstubFGzdurAcffFDvv/++hg0bpt69e2vTpk1asGCB+vXrV+r0f5K1nPSee+5RUlKS2rdvrw4dOuiGG25Qu3bt7PsoyVNPPaW8vDz98MMPql+/viRra0mjRo302GOPadWqVQ7r+/v7a9myZfaDbHx8vB577DF99dVXuuWWW5Senq5Ro0bpH//4h8NgbEOGDFGjRo30wgsvXHCQNmfl5eVpzJgxat68uVavXm1v6erQoYN69eqlV199Vc8884wkawtanTp1tGbNGntSpGvXrurcubO9hFWyDuKWlZWlxMREh31t27ZNktS8eXOH5YZh6NSpUw7LqlWr5jBeT2ls2zu/UicvL0/JycmSrGOqTJo0ScePH9dDDz3ksJ5tsNwtW7aUup8BAwboP//5jxYvXqxevXrZl3/88ceqX7++/b3yzTffqFmzZvr000/LFP+luNj3fvXq1bVs2TKHHnlJOnbsmN5++22NGDHCYfmHH37o8CH5vvvus5dLP/fcc/Z9luTAgQPauXOnPQnSqFEj3Xrrrfruu+8cnsOSpKWlKTk52T6myujRo2UymdS3b98L3vd8Gzdu1CeffKLRo0fbW8xGjhypYcOGafPmzQ7rjh8/Xj4+PlqzZo19Roz+/furSZMmDuvt379f48eP13PPPWev7pGsSebWrVvrrbfe0hNPPKG8vDw98cQTatWqlVasWGGv0mratKnuvfdeh7OeNtnZ2dq0aZN93cjISP3f//2f/vjjDzVv3lyGYei+++5Tly5dtGjRIvv/8xEjRqhZs2Z66qmn7Mn3b775RsOHD9eUKVPs2z+3fWrLli3au3evPv30U4d2q3Hjxl3kswzAneXn52vu3LmaMmWKbrjhBofbevfurY8++sjeHuuMyy+/XO+9955Onz5dbLXKmjVrNHToUPuxKT09vVJmjduwYYMsFoumTJli/4z3ySefOKzj7+9fpArzfE2aNNHBgwd18OBB+//tLVu26OzZs2ratGmZ4zGZTGrfvr3at2+vcePGKT4+XgsWLNDDDz98kY/MtahUAeDRQkND7aOInz59WsuXL1f//v3tX0CSk5N16tQpde/eXTt37izSxnHvvfc6lLB37NhRBQUF2r9/v6S/xiT5+uuvnT6jfK6IiAjdeuut+uijj+zVGQUFBfr444/Vu3fvUs98LF26VLm5uRo9erRDsmP48OEKDw/XN99841RMd999t7799lt17txZP/zwgyZOnKiOHTuqYcOG+vHHH0u8X0FBgRYvXqzevXvbEyqStbTzjjvu0A8//KDU1FSH+9x7770OZy3uv/9++fr66n//+58kacmSJTp79qxuv/12+98vOTlZPj4+uvrqq7VixYoLPp59+/Y59cFk/fr1OnHihEaOHOkwRk7Pnj3VuHFj+/N75MgR/f777xo8eLBDlUmnTp2K9ALbEiTnVxPYnpfzq1RSUlIUHR3t8FNaK875bNs7f2asxYsX27fXsmVLffrpp7rrrruKjL1ii9WWgCnJddddp6ioKH388cf2ZWfOnNGSJUs0YMAA+7Jq1arp0KFDl9TmUhbOvPeHDx9eJKEiSQEBAcW2Np2bULHto2PHjsrMzLQnyUozYMAAh9eBrX1nz549ZXqMd999t6Kjo1W7dm173/+8efPsfesX49tvv5Uke5++zflJtoKCAi1dulS9e/d2mGK0QYMG6tGjh8O68+fPl8ViUf/+/R3euzExMWrYsKH9vWt7n913330ObW9Dhw5VREREsfEOGzbMYd3zn7tNmzZp586duuOOO3Tq1Cn7vjMyMtS1a1etXr3afma0WrVq+uWXX3TkyJFi92WL4bvvvruoUngAxTt+YLcO7fyzwn+OH7i4tl/bwKn33HOPmjdv7vDTt2/fMrUAleb2229XTEyMevfurTVr1mjPnj36/PPP9dNPP0myjnUyf/58bdq0SZs3b9Ydd9xRIYOcn69BgwbKy8vT66+/rj179mjevHl6++23HdZJSEhQenq6li1bpuTk5GL/F3br1k0tWrTQnXfeqY0bN2rt2rUaPHiwOnXq5HASsjS//PKLXnjhBa1fv14HDhzQ/PnzdfLkySJJe09ApQoAj5aenm4f92PXrl0yDENPP/20nn766WLXP3HihOrUqWP//dwR1qW/vvzaejo7deqkvn376plnntGrr76qzp07q3fv3rrjjjsueGa6JIMHD9bHH3+s77//Xtdee62WLl2q48eP29uZSmJL9Jw/OJm/v7/q169vv90Z3bt3V/fu3ZWZmakNGzbo448/1ttvv61evXpp27ZtxY6tcvLkSWVmZhY7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gYGBmjx5skaMGKHIyMgKiOrCPv/8czVr1kyGYWjhwoUaMGCA/bYDBw4oLy9PPXv2LHEg+dzcXPn7+6t69eqVFbJLREREuDqEElGpAgAAAADwOt26dVNMTIwmTZpU6nq2xEdAQIASEhI0ZcoUh9sTEhL0wgsv6O6771ZYWJji4uI0Y8aMMsUwc+ZMDRo0SIMGDdLMmTPty2fPnq0WLVpIsg4YbjKZtG/fPk2YMEGtWrXSe++959CK0rlzZ4fWoJycHI0ZM0b16tVTQECAGjRoYN9+QUGB7rnnHiUmJiooKEiNGjXStGnTHOIaOnSoevfurX//+9+KjY1VjRo19MADDygvL6/Ex2KLbd68eUpISFBERIQGDhyotLQ0+zrffvutOnTooGrVqqlGjRrq1auXdu/ebb89MTFRktS6dWuZTCb7THO2eM59fKNGjVLNmjUVGBioDh06aN26dfbbV65cKZPJpGXLlqlt27YKDg5Wu3bttH37dvs6mzdvVpcuXRQWFqbw8HC1adNG69evL/XvVRySKgAAAAAAr+Pj46MXXnhBr7/+ug4dOlTsOhs2bFD//v01cOBA/f7775owYYKefvrpIq0oU6ZMUdu2bfXrr79q5MiRuv/++x2+wBdn9+7d+umnn9S/f3/1799f33//vfbv3y9JGjBggJYuXSpJWrt2rY4ePWqfnW3Xrl36/PPPNX/+/CJtMjaDBw/WRx99pNdee01bt27VO++8o9DQUEmSxWJR3bp19emnn2rLli0aN26cnnjiCX3yyScO21ixYoV2796tFStWaM6cOZo9e/YFW3B2796thQsX6uuvv9bXX3+tVatWObRYZWRk6OGHH9b69eu1bNkymc1m3XbbbbJYLPbHKklLly7V0aNHNX/+/GL389hjj+nzzz/XnDlztHHjRjVo0EDdu3fX6dOnHdZ78sknNWXKFK1fv16+vr66++677bfdeeedqlu3rtatW6cNGzbo8ccfl5+fX6mPrzi0/wAAAAAAvNJtt92mVq1aafz48Q6VIjavvPKKunbtqqefflqSdNlll2nLli16+eWXNXToUPt6N910k0aOHClJGjNmjF599VWtWLFCjRo1KnHf//nPf9SjRw9761H37t01a9YsTZgwQUFBQfYZBaOjoxUTE2O/X25urubOnavo6Ohit7tjxw598sknWrJkibp16ybJ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JBkrVqywLxsyZEiZjpHx8fGGJOPbb78tcltxnyW6d+9u1K9fv9htrF692r7sxIkTRkBAgPGvf/2ryGNet26dcfToUaNZs2ZG/fr1jX379l0wTgBwF1SqAG6mf//+ysrK0tdff620tDR9/fXXJbb+fPrpp4qIiND111/vcEarTZs2Cg0N1YoVK+zrntsLnZaWpuTkZHXs2FGZmZnatm2bw3ZDQ0M1aNAg++/+/v666qqrtGfPnnJ5jIZh6PPPP9fNN98swzAcYu/evbtSUlK0cePGYu979OhRbdq0SUOGDFFERIR9+fXXX6+mTZuWS3wAALjKm2++qSVLljj8VLbExER17969yPJzP0vYKmo6deqkPXv2KCUlxWHdpk2bqmPHjvbfo6Oj1ahRo2I/Sxw6dEidOnVSXl6eVq9erfj4+HJ8NABQsRioFnAz0dHR6tatmz788ENlZmaqoKBA/fr1K3bdnTt3KiUlRTVr1iz29hMnTtiv//nnn3rqqae0fPlypaamOqx3/gehunXrFpmDPTIyUr/99pszD6mIkydP6uzZs5oxY4ZmzJhxwdjPtX//fklSw4YNi9zWqFGjEpMxAAB4gquuusrlA9WeP/uQzZo1azR+/Hj99NNPyszMdLgtJSXF4WRHXFxckftHRkYWGfNNku666y75+vpq69atiomJucToAaBykVQB3NAdd9yh4cOH69ixY+rRo0exs+lI1kFqa9asqQ8++KDY26OjoyVJZ8+eVadOnRQeHq5nn31WSUlJCgwM1MaNGzVmzBhZLBaH+5U0D7thGM4/qPPilqRBgwZpyJAhxa5z+eWXl8u+AACo6s4fdP5SFTfTz+7du9W1a1c1btxYr7zyiurVqyd/f3/973//06uvvnpJnyX69OmjuXPnatq0aZo0aVL5PAgAqCQkVQA3dNttt2nEiBH6+eef9fHHH5e4XlJSkpYuXar27duXOtXhypUrderUKc2fP1/XXnutffnevXvLNe6yio6OVlhYmAoKCtStW7eLuq+tJHjnzp1FbmOWAABAVRYZGamzZ886LMvNzdXRo0crfN9fffWVcnJy9OWXXzpUoZzbauyshx56SA0aNNC4ceMUERFR7CD6AOCuGFMFcEOhoaGaPn26JkyYoJtvvrnE9fr376+CggJNnDixyG35+fn2D162s0Xnnh3Kzc3VW2+9Vb6B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lFNOISoqiqioKKZMmXLUtvRVx/s30+z9999Hp9Nx/vnnd21ADR1v21RVVTFr1iySkpIwGo307dvXr/9NnSjp69smfX37pK93k76+fdLXt036+vZJXy8AUH7ojDPOUEOHDlWrV69Wy5cvV71791aXXXbZEZ+zcuVKFR4erh5++GG1detWtWPHDvXBBx8oq9XqodRdryPt0uypp55SZ555pgLU/PnzuzaoBo63bbZs2aIuuOAC9cUXX6jdu3erRYsWqT59+qgLL7zQg6k71/vvv6+CgoLUG2+8obZt26auvfZaFRkZqUpLS9vcf8WKFcpgMKjHHntMbd++Xd1zzz0qMDBQbdmyxcPJu97xts2f/vQn9fzzz6tffvlFZWdnqyuvvFJFRESo/fv3ezh51zredmm2d+9elZKSok455RR13nnneSashx1v2zQ2NqpRo0ap3//+9+qnn35Se/fuVUuWLFEbN270cHLfIX1926Svb5/09dLXH4n09W2Tvr590teLZn5XVNm+fbsC1Lp161q2LViwQOl0OlVYWNju88aMGaPuueceT0TUREfbRSmlfvnlF5WSkqKKi4v98kDrRNrmcB9++KEKCgpSdru9K2J2udGjR6tZs2a1fO10OlVycrJ6+OGH29z/kksuUWeddVarbWPGjFHXX399l+bUwvG2za85HA4VFham3nrrra6KqImOtIvD4VAnn3yyeu2119TMmTP99kDreNvmxRdfVD179lQ2m81TEX2a9PVtk76+fdLXu0lf3z7p69smfX37pK8Xzfzu8p9Vq1YRGRnJqFGjWrZNmTIFvV7PmjVr2nzOgQMHWLNmDfHx8Zx88skkJCQwceJEfvrpJ0/F7nIdaReA+vp6/vSnP/H888+TmJjoiage19G2+bXq6mrCw8MJCAjoiphdymaz8fPPPzNlypSWbXq9nilTprBq1ao2n7Nq1apW+wNMmzat3f19VUfa5tfq6+ux2+1ER0d3VUyP62i7PPDAA8THx3P11Vd7IqYmOtI2X3zxBePGjWPWrFkkJCQwaNAg/vWvf+F0Oj0V26dIX9826evbJ3299PVHIn1926Svb5/09eJwfldUKSkpIT4+vtW2gIAAoqOjKSkpafM5e/bsAeC+++7j2muv5dtvv2XEiBFMnjyZXbt2dXlmT+hIuwDceuutnHzyyZx33nldHVEzHW2b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SZMmodPpWLJkSZuvo9PpePHFFzn33HMJCQnhn//8JwCff/45I0aMwGQy0bNnT+6//34cDkfL83bs2MGECRMwmUwMGDCAhQsXthounZeXh06n44MPPmDixImYTCbeffddAF577TX69++PyWSiX79+vPDCCy2va7PZmD17NklJSZhMJjIyMnj44YcBUEpx3333tZxdTE5O5qabbmp57q+HBOfn53PeeecRGhpKeHg4l1xyCaWlpS3fbx7O+9///pfMzEwiIiL44x//SG1t7RHb/nC/HhLc/Pt+4oknSEpKIiYmhlmzZmG321v2aWxs5PbbbyclJYWQkBDGjBnT7u9HCCFE55G+Xvp66euFEB6nhOgm7Ha7Cg0NVbfccouyWq3t7geo+fPnK6WUslgsKikpSV1wwQVqy5YtatGiRapHjx5q5syZLfvPnDlThYaGqksvvVRt3bpVffXVVyouLk79/e9/b9nnoYceUv369VPffvutys3NVW+++aYyGo1qyZIl7eY499xzVf/+/dWyZcvUxo0b1bRp01Tv3r2VzWZTjY2NKicnRwHqk08+UcXFxaqxsbHdnyc+Pl698cYbKjc3V+3bt08tW7ZMhYeHq3nz5qnc3Fz1/fffq8zMTHXfffcppZRyOBwqKytLTZ06VW3cuFEtX75cjR49ulXb7N27VwEqMzNTffLJJ2rPnj2qqKhIvfPOOyopKall2yeffKKio6PVvHnzlFJKPf744yotLU0tW7ZM5eXlqeXLl6v33ntPKaXURx99pMLDw9U333yj9u3bp9asWaNeeeWVlp8lIyNDPf3000oppZxOpxo2bJiaMGGCWr9+vVq9erUaOXKkmjhxYsv+c+fOVaGhoS2/v2XLlqnExMRWv5tfe/PNN1VERESr1xg6dGir33d4eLj6y1/+orKzs9WXX36pzGZzq5zXXHONOvnkk9WyZcvU7t271eOPP66MRqPauXNnu+8rhBDixElfL3299PVCCE+TooroVj7++GMVFRWlTCaTOvnkk9WcOXPUpk2bWu1z+MHEK6+8oqKiopTFYmn5/tdff630er0qKSlRSrk73ujoaFVXV9eyz4svvqhCQ0OV0+lUVqtVmc1mtXLlylbvc/XVV6vLLruszZw7d+5UgFqxYkXLtvLychUcHKw+/PBDpZRSBw8eVIBavHjxEX9mQN1yyy2ttk2ePFn961//arXtv//9r0pKSlJKKbVgwQIVEBCgiouLW77/ww8/tHmg9cwzz7R6nV69erUcODV78MEH1bhx45RSSt14441q0qRJyuVy/Sbrk08+qfr27atsNlubP8vhB1rff/+9MhgMKj8/v+X727ZtU4Bau3atUsp9kGQ2m1VNTU3LPnfccYcaM2ZMm6+v1LEdaGVkZCiHw9Gy7eKLL1aXXnqpUkqpffv2KYPBoAoLC1u97uTJk9WcOXPafV8hhBCdQ/p6N+nrpa8XQniGXP4jupULL7yQoqIivvjiC8444wyWLFnCiBEjmDdvXpv7Z2dnM3ToUEJCQlq2jR8/HpfLRU5OTsu2oUOHYjabW74eN24cFouFgoICdu/eTX19PVOnTm25Zjc0NJS3336b3Nzcdt83ICCAMWPGtGyLiYkhKyuL7Ozs4/65R40a1errTZs28cADD7TKc+2111JcXEx9fT05OTmkpaWRmJjY8pzRo0cf9bXr6urIzc3l6quvbvXaDz30UMvPeuWVV7Jx40aysrK46aab+P7771uef/HFF9PQ0EDPnj259tprmT9/fqthyr9uo7S0NNLS0lq2DRgwgMjIyFZtlJmZ2TJ8GiApKYkDBw4cS7O1a+DAgRgMhjZfc8uWLTidTvr27duqDZYuXdru71sIIUTnkb7eTfp66euFEJ4hE9WKbsdkMjF16lSmTp3KvffeyzXXXMPcuXO58soru+T9mq/J/vrrr0lJSWn1PaPR2CXv+WuHHyg2Z7r//vu54IILfrOvyWTq8Gs3/6yvvvpqq4NEoOXAZMSIEezdu5cFCxawcOFCLrnkEqZMmcLHH39MWloaOTk5LFy4kB9++IEbbriBxx9/nKVLl3Z4UrxfP0+n0+FyuTr0WsfymhaLBYPBwM8//9zqYAyQSfCEEMJDpK+Xvl76eiGEp0hRRXR7AwYMaJmQ7df69+/PvHnzqKurazmgWLFiBXq9nqysrJb9Nm3aRENDA8HBwQCsXr2a0NBQ0tLSiI6Oxmg0kp+fz8SJE48pU//+/XE4HKxZs4aTTz4ZgIqKCnJychgwYMAJ/LRuI0aMICcnh969e7f5/aysLAoKCigtLSUhIQFwL3F4NAkJCSQnJ7Nnzx6mT5/e7n7h4eFceumlXHrppVx00UWcccYZVFZWEh0dTXBwMOeccw7nnHMOs2bNol+/fmzZsoURI0a0eo3+/ftTUFBAQUFByxms7du3U1VV1Slt1FHDhw/H6XRy4MABTjnlFM1yCCGEOET6+t+Svr7jpK8XQhxOiiqi26ioqODiiy/mz3/+M0OGDCEsLIz169fz2GOPcd5557X5nOnTpzN37lxmzpzJfffdR1lZGTfeeCOXX355ywEIuGe5v/rqq7nnnnvIy8tj7ty5zJ49G71eT1hYGLfffju33norLpeLCRMmUF1dzYoVKwgPD2fmzJm/ed8+ffpw3nnnce211/Lyyy8TFhbGXXfdRUpKSrtZj8c//vEPzj77bNLT07nooovQ6/Vs2rSJrVu38tBDDzF16lR69erFzJkzeeyxx6itreWee+4B3GdqjuT+++/npptuIiIigjPOOIPGxkbWr1/PwYMHue2223jqqadISkpi+PDh6PV6PvroIxITE4mMjGTevHk4nU7GjBmD2WzmnXfeITg4mIyMjN+8z5QpUxg8eDDTp0/nmWeeweFwcMMNNzBx4sTfDIH2pL59+zJ9+nSuuOIKnnzySYYPH05ZWRmLFi1iyJAhnHXWWZplE0IIfyd9/SHS13cd6euFEIeTooroNkJDQxkzZgxPP/00ubm52O120tLSuPbaa/n73//e5nPMZjPfffcdN998MyeddBJms5kLL7yQp556qtV+kydPpk+fPpx66qk0NjZy2WWXcd9997V8/8EHHyQuLo6HH36YPXv2EBkZyYgRI9p9X4A333yTm2++mbPPPhubzcapp57KN9980+GhsYebNm0aX331FQ888ACPPvoogYGB9OvXj2uuuQZwD9/97LPPuOaaazjppJPo2bMnjz/+OOecc85Rhwxfc801mM1mHn/8ce644w5CQkIYPHgwt9xyCwBhYWE89thj7Nq1C4PBwEknncQ333yDXq8nMjKSRx55hNtuuw2n08ngwYP58ssviYmJ+c376HQ6Pv/8c2688UZOPfVU9Ho9Z5xxBs8999wJt8+JevPNN3nooYf429/+RmFhIbGxsYwdO5azzz5b62hCCOHXpK8/RPr6riV9vRCimU4ppbQOIYQvu/LKK6mqqmp3WLG/WLFiBRMmTGD37t306tVL6zhCCCGEx0hfL4QQoj0yUkUI0ab58+cTGhpKnz592L17NzfffDPjx4+XgywhhBDCT0hfL4QQJ06KKkKINtXW1nLnnXeSn59PbGwsU6ZM4cknn9Q6lhBCCCE6ifT1Qghx4uTyHyGEEEIIIYQQQogO0GsdQAghhBBCCCGEEMIXSVFFCCGEEEIIIYQQogOkqCKEEEIIIYQQQgjRAVJUEUIIIYQQQgghhOgAKaoIIYQQQgghhBBCdIAUVYQQQgghhBBCCCE6QIoqQgghhBBCCCGEEB0gRRUhhBBCCCGEEEKIDpCiihBCCCGEEEIIIUQH/D8/nwg8xup1/wAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(12, 6))\n", + "fig.suptitle(\"Density of Slope : log(GDP) vs. Terrain Ruggedness\");\n", + "\n", + "sns.histplot(gamma_within_africa.detach().cpu().numpy(), ax=axs[0], kde=True, stat=\"density\", label=\"African nations\")\n", + "sns.histplot(gamma_outside_africa.detach().cpu().numpy(), ax=axs[0], kde=True, stat=\"density\", color=\"orange\", label=\"Non-African nations\")\n", + "axs[0].set(title=\"Mean field\", xlabel=\"Slope of regression line\", xlim=(-0.6, 0.6), ylim=(0, 11))\n", + "\n", + "sns.histplot(mvn_gamma_within_africa.detach().cpu().numpy(), ax=axs[1], kde=True, stat=\"density\", label=\"African nations\")\n", + "sns.histplot(mvn_gamma_outside_africa.detach().cpu().numpy(), ax=axs[1], kde=True, stat=\"density\", color=\"orange\", label=\"Non-African nations\")\n", + "axs[1].set(title=\"Full rank\", xlabel=\"Slope of regression line\", xlim=(-0.6, 0.6), ylim=(0, 11))\n", + "\n", + "handles, labels = axs[1].get_legend_handles_labels()\n", + "fig.legend(handles, labels, loc='upper right');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We visualize the 90% credible interval of the posterior predictive distribution for non-African countries under both approximations, verifying that our coverage of the observed data has improved somewhat:" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+UAAAJJCAYAAADMaparAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3hUVfoH8O9Mek8IISH0Ik1UmogoHQURUbGBDRBXXdfOKrqyCq672Fd/7tpXROyKYhelKyAdqQECKaT3TK/3/P6Y3GEmM5OZSSaZmeT7eR4ekjt37pwpmfe+557zHoUQQoCIiIiIiIiI2pwy2A0gIiIiIiIi6qiYlBMREREREREFCZNyIiIiIiIioiBhUk5EREREREQUJEzKiYiIiIiIiIKESTkRERERERFRkDApJyIiIiIiIgoSJuVEREREREREQcKknIiIiIiIiChImJQTkVu9e/eGQqFw+hcTE4OePXvihhtuwK+//hrsJra59957DwqFAvPnzw92U8LW/PnzoVAo8N577zltX7p0KRQKBZYuXdrqbdi0aRMUCgUmTpzY6o/VGvLz86FQKNC7d2+X2+S/1VAQLu2Uyd95+fn5wW5Kq2vJ35unv+FAWLt2LWbMmIHOnTsjJiYGvXv3xl133YWioqIm72cymfDss8/ivPPOQ0JCAtLS0jBx4kR88cUXHu+Tm5uLWbNmISkpCcnJybj66quRl5fncf9FixZBqVTit99+a/bzk50+fRpLlizBmDFjkJGRgaioKKSmpmLEiBG4//77sWvXLpf7yH8zmzZtavHjE1HoYVJORE266KKLMG/ePMybNw+XXXYZJEnCZ599hgkTJuCll15q8/aE4sk8hRZ+RlqmqWQ6XLVmItmeBLPD6u9//zumT5+OH3/8Eb169cIVV1yBmJgYvPnmmzjnnHOwb98+t/fT6XSYNGkSHn30URQWFmL69OkYPXo0tm7diuuuuw5//etfXe6j1+sxefJkfPvttxg9ejRGjRqFNWvWYMKECairq3PZf+/evXjllVdwxx134OKLL27R83zuuefQv39//POf/8Thw4dx3nnn4brrrsO4ceNQU1OD//u//8Po0aPxyCOPtOhxiCjMCCIiN3r16iUAiBUrVjht1+v14tZbbxUAREREhDh27FibtguACNZXV11dnTh69KgoKSkJyuO3B/PmzXP7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06cjNjYWJSUl2L9/P/bs2WOfd3vxxRdDo9Fg9erVSEhIcLpq6c6JEycwfPhwREdH46KLLoIQwq+rrw899BBefvllXHTRRbjyyitx8OBB/Pjjj/jll1/w2WefeU1evElMTMS8efPw22+/4eTJk7jooovQv39/++3Dhg3zeoyamhpMmTIF+/fvR3JyMiZPnoyoqChs3rwZ//znP/HRRx9hw4YNHhPXBQsW4KOPPsK4ceMwc+ZM7N+/H7/88gu2bNmCzZs344ILLvDpuUydOhX79u3DunXrMGLECPv2devWQQhh/9mRXq/Htm3bEBcX5zZpdSR/LtauXYvMzExMnz7dfpu793T//v24//77kZaWhgkTJqCmpgZbt261z5X+6quvfHpewJlEWE6MG5Mff8+ePU7b5Xnmo0aNcnu/vn37olOnTqipqcH+/fuRnZ0NAPb36ujRoxg+fLj9ZwDo1q2b/f533303lEol/vOf//j8XNypq6vDli1bALh+LxERAeCcciJyz9OcciGE+OOPP4RSqRQAxLvvviuEEOLHH38UAERsbKz4+eefnfZ/55137PPoDh06ZN++cuVKAUBcdtllLvM4rVar2LRpkzAajU7b4WUu6oEDB0RMTIyIjY0Vq1evdrotPz9fnHPOOQKAWLlypdNtEyZMsB/7v//9r9tjr1ixQgAQ8+bNc3nMyMhIoVAoxPvvv+902w8//CCio6MFAJfXRZ6bCUA8+uijwmq1enxe7sjzPwGI/v37O82R1uv14pprrhEAxJgxY5zuJ88ZBiC6d+/uti5Ac1/Ha6+9VgAQ48aNc5p/WV1dLS644AL74zb+XD355JMCgHjyySedtu/evVtERUUJhUIh/u///s/lNcrPzxe7d+922ubtM+Jp3uzjjz8uAIg777zT7f2uvvpqAUC8+uqr9m2SJImLLrpIABALFy4UKpXKfpvZbBaLFi0SAMSkSZM8tqexP/74Q0RERLjMrxVCiA8++EAoFAqPc77dPfdly5YJAOKOO+4QkiQ53WYymcS6deuctvkyp1x+vwCIm2++2e3c2KaOI983Li5OrF+/3um25557TgAQKSkpory83OvzcyT/HTeed+vLPGj5Oy8vL89p+w033CAAiAsuuEBUVVXZt6vVanHZZZcJAGLs2LFun7v8/B3/xiwWi7jtttsEAHHppZd6bE9ja9eu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jH05NE9ycnKwfPlyLFy40OlzJ48yaDxEXqvV+jUC4fHHHwcAfPPNN16XixNC2OsGEFHHwKSciAJi0aJFAIDXX38d69evd7rtvffewzfffIOoqCjcf//99u1fffWVvZCSI7PZbD/Rbby2s3zlzHE9bUdPPvkkoqOj8fDDD2PlypVuh7MeOnQIX375pZ/P0LP7778fkZGRWLNmDT744AOn237++We8+eabABCwK6nuLFq0yGn+rdFoxF/+8hdotVqMHj3a6xrFjTXndezZsyeuvvpqSJKEP//5z/Z56QBQW1uLu+++2+/E9fHHH0dkZCT+85//4LXXXnO5f0FBgcvaxd4+I96MHTsWAwcOxIkTJ7B48WJUV1fj4osvdrvW+5VXXonzzz8fO3fuxIIFC9zOG6+trcUbb7zhc6Jz7733IiIiAp999pnLyfsnn3yCNWvW+PV83n//fZfXCADUarW9kJrj31lGRgaio6NRVlbW4uKL3rz++usuxdz+/e9/Y+fOnUhKSrIXSZTJCeayZctgNBrt2/Pz8zFv3jyPn6/mfiZ69uyJ6667DkII3HnnnU41IbRaLe644w4YDAaMHTvW6Upqa5JfA3ntbMekPDMzE0OHDsUPP/yAvLw89OnTB3379vX52PLrdOLECZjN5gC22rudO3e6vH9FRUWYNWsWysrK8Mgjj7gUkExLS7Mn6nfffbfT+7N37148++yzAM4kxJ4IIXDHHXcgLS0Nzz//vNNt8tX4d955x75ty5YtyMnJcVov3ptLLrnEHifnzJmDl156yekzLNuzZw+mTZuGF154wedjE1E7EJyi70QU6ppap9yTJUuWCABCoVCIiy++WNx4441ixIgRAoCIiIgQ//vf/5z2v//++wUA0blzZ3HJJZeIm266ScyaNUt06dJFABDdunUTp0+fdrrPX//6V/t9rr/+erFw4UKxcOFCp/WDP/vsM/tSYN27dxeXXnqpuOmmm8Rll10munfv7na5KU9LKTnytCSaEEK8+eab9rXbR4wYIW688UZx0UUX2deUXrp0qct9fFmmqSny8kUXXnihuOCCC0R8fLyYOXOmuP7660V2drYAILp06SJycnKc7ufLkldCNO91LC0ttS+Z16lTJzF79mxx9dVXi9TUVNGvXz8xa9Ysv5ZEE8K2nn1UVJS9zddee62YPXu2GDZsmFAoFC738fYZ8WXZp2eeecZpqaR3333X477FxcVi2LBhAoBISEgQY8eOFXPmzLG3MSIiQgDwaykleblAwLY+9o033ijOP/98AUA8+OCDfi2JJi+hlp2dLWbMmCFuuukmMWPGDJGSkiIAiKFDhzqtry7EmfXme/ToIebOnWt/DWVNvV8yX5dEUygUYvz48WLu3LninHPOsX9fNF6jXQghTp06JVJTUwUA0bNnT3HNNdeI8ePHi7i4ODF16lT78leN/47/+OMPoVQqhVKpFFOnThULFiwQCxcuFF9//bV9H0/rlFdVVYnzzjvPvlzeVVddJa699lqRkZEhAIg+ffq43MeXvzFPj+fNsWPH7K9f4+XRhBD2zwcaLUHpqKn3T16ObuDAgeKmm24SCxcuFIsXL7bf7u17q6nvyaakpKSI7Oxscemll4obb7xRTJw4UURHRwsA4o477nBamsyRVqsVF154oQAg0tLSxDXXXCOmT59u/87wtEynozfffNNlOTmZRqMR/fv3FwDE+eefL6688koRFxcnFAqF+Omnn/x6jkII8c9//tPetqSkJDF16lRx4403ilmzZonevXvb3zvH11wILolG1N4xKScit5qTlAthW7d5xowZIj09XURGRoqsrCxx3XXXiR07drjsu2/fPvHoo4+Kiy++WHTr1k1ER0eLjIwMMXLkSPGvf/3LKdGW6fV68cgjj4j+/fvbT9jcndjm5eWJBx98UAwdOlQkJCSI2NhY0atXLzFx4kTxzDPPiNzcXKf9W5qUCyHE77//Lq699lqRlZUlIiMjRXp6urj88svFzz//7Hb/QCXlEyZMEBqNRjz88MOiT58+Ijo6WmRmZor58+eLwsJCl/v5mpTL+/rzOgphS2Luvfde0b17dxEdHS26d+8u7rrrLlFZWenxOXtL8g4fPiwWLlwo+vTpI2JiYkRKSooYMmSIuOeee1zWRPf2GfElKS8pKbEn0wkJCUKtVjf5OhkMBvHGG2+ISZMm2T/7Xbp0EcOGDRN/+ctfxNq1a5u8vztff/21uPjii0VCQoJITEwUY8eOFV988YVPya6jLVu2iAceeECMHj1aZGVliejoaJGVlSUuvPBC8eqrrwqNRuNynOrqanHnnXeKnj172hMIx+MGKikXQojXX39dDBs2TMTFxYnk5GQxffp0pzW/Gzty5IiYPXu2SEtLEzExMWLgwIHi6aefFiaTqcm/46+++kpcdNFFIikpyd5Z5tj+ppJkrVYrli9fLoYNGybi4+NFbGysGDx4sPjb3/4mampq/HruvjyeNz169BAAxCWXXOJy2/fff29/fT/99FO392/q/SsoKBA33nij6Nq1q4iMjHR5Hq2VlD/xxBNizJgxonPnziIqKkpkZWWJq6++2qe/HaPRKJYvXy6GDh0q4uLiREpKihg/frz47LPPvN63rKxMpKamihkzZnjcp6ioSMydO1ekpaWJ6OhoMWrUKPHdd9/59fwc5efni8cee0ycf/759u+LlJQUMXz4cHH//feLvXv3utyHSTlR+6YQIkCT4IiIqE1t2rQJkyZNwoQJE4K+njMRERERNQ/nlBMREREREREFCZNyIiIiIiIioiBhUk5EREREREQUJJxTTkRERERERBQkvFJOREREREREFCRMyomIiIiIiIiChEk5ERERERERUZAwKSciIiIiIiIKEiblREREREREREHCpJyIiIiIiIgoSJiUExEREREREQUJk3IiIiIiIiKiIGFSTkRERERERBQkTMqJiIiIiIiIgoRJOREREREREVGQMCknIiIiIiIiChIm5URERERERERBwqSciIiIiIiIKEiYlBMREREREREFCZNyIiIiIiIioiBhUk5EREREREQUJEzKqUM5ceIELr30UqSkpEChUGDNmjVN7r906VIoFIq2aVyYmDhxIiZOnBjsZnRoq1atwqBBgxAVFYXU1FQALXtfevfujfnz53vd77333oNCoUB+fn6zHoeIKBRoNBrcfvvtyMrKgkKhwAMPPNDk/ps2bYJCocCmTZvapH3hoKOfH7mLh6F4fiS/T1VVVcFuCnnBpJx8In/5xMbGori42OX2iRMnYujQoUFo2Rl1dXWIjY2FQqHA0aNH3e4zb948HDx4EP/85z+xatUqjBo1qo1bGVi9e/eGQqHAvffe63KbfBLxxRdf+H3cI0eOYOnSpe0m+Zo4cSIUCgXOOusst7f/8ssvUCgUzX692lJOTg7mz5+Pfv364e2338Zbb70V7CYRUQcRDucCADB69GgoFAq8/vrrbm//17/+hffeew9//vOfsWrVKtxyyy1t3MLAmj9/PhQKBc4991wIIVxuVygUuOeee/w+rk6nw9KlS9tNZ4ScoLr798YbbwS7edTBMSknvxiNRjzzzDPBboZbn3/+ORQKBbKysvDhhx+63K7X67F9+3YsXLgQ99xzD26++WZ07969yWMuWbIEer2+tZocMG+//TZKSkoCdrwjR45g2bJlbpPyn3/+GT///HPAHqutxMbGIjc3Fzt37nS57cMPP0RsbGwQWuW/TZs2QZIkvPLKK5g/fz6uv/56AOH7vhBR+Anlc4ETJ05g165d6N27t9tzAQDYsGEDxowZgyeffBI333wzRo4c2eQxx48fD71ej/Hjx7dGkwPm4MGD+PLLLwN2PJ1Oh2XLlrlNysPl/Mid119/HatWrXL6N2XKlGA3izo4JuXkl2HDhgU8AQyUDz74ADNmzMDcuXPx0UcfudxeWVkJAPbhvk3RarUAgMjIyJBP1s4++2xYrdY2O0GKjo5GdHR0mzxWIPXr1w8DBw7Exx9/7LTdYDDgq6++wuWXXx6klvmnoqICgOvnOFzfFyIKP6F+LtClSxe8+OKL2LZtm9vO5YqKCp/OBQwGAyRJglKpRGxsLJTK0D1tjouLw4ABA/DUU0+5vVoeaOFwfuTJtddei5tvvtnpn6eRdG1BkiQYDIagPT6FhtD9dqGQ9Le//c3nBNBiseAf//gH+vXrh5iYGPTu3Rt/+9vfYDQanfbr3bs3Zs6cid9++w2jR49GbGws+vbti/fff9/ndhUWFuLXX3/FnDlzMGfOHOTl5WHbtm3225cuXYpevXoBAB5++GEoFAr07t3bfptCocCRI0dw4403Ii0tDRdffLHTbY198MEHGD16NOLj45GWlobx48c7XaX8+uuvcfnllyM7OxsxMTHo168f/vGPf8BqtTodRx7qd+TIEUyaNAnx8fHo1q0bnnvuOZ+fe+/evXHrrbf6dIJUUFCAu+++GwMHDkRcXBzS09Nx3XXXOZ20vPfee7juuusAAJMmTbIP7ZJ7yt3NmaqoqMDChQuRmZmJ2NhYnHfeeVi5cqXTPvn5+VAoFHjhhRfw1ltv2T8X559/Pnbt2uW0b1lZGRYsWIDu3bsjJiYGXbt2xZVXXunUzvr6euTk5KC+vt7n12ru3Ln49NNPIUmSfdu3334LnU5nv+LcWHFxMW677TZkZmYiJiYGZ599Nt59912nfUwmE5544gmMHDkSKSkpSEhIwLhx47Bx48Zmvwbu9O7dG08++SQAICMjAwqFAkuXLgXg/n0xGo148skn0b9/f8TExKBHjx545JFHXP4G3Tl8+DAmT56MuLg4dO/eHU8//bTT60ZEHVeongsAwEcffYRrr70WM2fOREpKilMnvTytKy8vD99//709vuXn59tv++STT7BkyRJ069YN8fHxUKlUHueU79ixAzNmzEBaWhoSEhJw7rnn4pVXXrHffuDAAcyfPx99+/ZFbGwssrKycNttt6G6utrpOPK5Rm5uLubPn4/U1FSkpKRgwYIF0Ol0Pj1vpVKJJUuW4MCBA/jqq6+a3NeXmJWfn4+MjAwAwLJly+yvlRxz3J0fBfq9NpvNWLZsGc466yzExsYiPT0dF198MX755RenfXJyclBaWurT69QUOUa/9957Lrc5PveWkqcTfPjhhzj77LMRExODn376CQDwwgsvYOzYsUhPT0dcXBxGjhzpdlqdfIw1a9Zg6NCh9vMT+ThNKSgoQP/+/TF06FCUl5cH5DlRyzEpJ7/06dPH5wTw9ttvxxNPPIERI0bg3//+NyZMmIDly5djzpw5Lvvm5ubi2muvxSWXXIIXX3wRaWlpmD9/Pg4fPuxTuz7++GMkJCRg5syZGD16NPr16+c0bG327Nn497//DcCWmK1atQovv/yy0zGuu+466HQ6/Otf/8Kf/vQnj4+1bNky3HLLLYiKisJTTz2FZcuWoUePHtiwYYN9n/feew+JiYl46KGH8Morr2DkyJF44okn8Oijj7ocr7a2FtOnT8d5552HF198EYMGDcLixYvx448/+vTcAeDxxx+HxWLxeoK0a9cubNu2DXPmzMH//d//4a677sL69esxceJEe+AfP3487rvvPgC2Ey95aNfgwYPdHlOv12PixIlYtWoVbrrpJjz//PNISUnB/PnznU5OZB999BGef/553HnnnXj66aeRn5+P2bNnw2w22/e55ppr8NVXX2HBggV47bXXcN9990GtVqOwsNC+z1dffYXBgwd7PflwdOONN6K0tNTpxOqjjz7ClClT0KVLF5f9y8vLMWbMGKxbtw733HMPXnnlFfTv3x8LFy50+vyoVCq88847mDhxIp599lksXboUlZWVmDZtGvbv39+s18Cdl19+GVdffTWAM8PvZs+e7XZfSZIwa9YsvPDCC7jiiivw6quv4qqrrsK///1v3HDDDU0+TllZGSZNmoT9+/fj0UcfxQMPPID333/f7ftJRB1PqJ4L7NixA7m5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BVatWtWs4ejNIZ8gNV4nHABmzpyJVatWISUlBUOGDMH27duxbt06pKenO+03bNgwRERE4Nlnn0V9fT1iYmLsBXMau+OOO/Dmm29i/vz52LNnD3r37o0vvvgCW7duxcsvv+x2vnZTjh8/jilTpuD666/HkCFDEBkZia+++grl5eVOy6rIS6atWLHC72JvKSkpPq03+swzz2Djxo244IIL8Kc//QlDhgxBTU0N9u7di3Xr1qGmpgaA7XX98ssvcfXVV+Pyyy9HXl4e3njjDQwZMgQajcavtgXKLbfcgs8++wx33XUXNm7ciIsuughWqxU5OTn47LPPsHbtWowaNcrtfR955BGsWrUK06dPx/3334+EhAS89dZb9lERRESOgnkuAAAffvgh0tPTMXbsWLe3z5o1C2+//Ta+//77Jpf08pVSqcTrr7+OK664AsOGDcOCBQvQtWtX5OTk4PDhw/Z5u3JNFLPZjG7duuHnn39uk1FzgC3Be/zxx12mQgG+x6y4uDgMGTIEn376KQYMGIBOnTph6NChbufSt8Z7PWTIEEycOBEjR45Ep06dsHv3bnzxxRe455577PvIS6LNmzfPr2Jvntx+++145plncPvtt2PUqFHYsmULjh8/3uLj+uLyyy/HSy+9hOnTp+PGG29ERUUF/vvf/6J///4Bib1KpRIffPABrrrqKlx//fX44Ycf7MVfKfh4pZxapH///h6Hhr/zzjtYtmwZdu3ahQceeAAbNmzAY489hk8++SQgj/3999+jrq4OV1xxhcd9rrjiClgsloA9JmArPPLuu+9Cr9fj8ccfxxNPPIGCggJMmTIFAJCeno7vvvsOXbt2xZIlS/DCCy/gkksucXvlurUsWbLE7VyjV155Bbfeeis+/PBDLFq0CKWlpVi3bp3LnPusrCy88cYbqKiowMKFCzF37lwcOXLE7WPFxcVh06ZNuOmmm7By5UosWrQINTU1WLFiBe6//36/296jRw/MnTsXmzZtwmOPPYbHHnsMKpUKn332Ga655hq/j9cSmZmZ2LlzJxYsWIAvv/zSvlZ5TU2N01DN+fPn41//+hf++OMP3HfffVi7di0++OADj0lvW1AqlVizZg2eeeYZHDx4EH/961/tf4/333+/veCbO127dsXGjRtx7rnn4plnnsHLL7+MW2+9tVnvJxG1f8E8F6ioqMC6deswY8YMj3Nsp0yZgvj4+IBMf5JNmzYNGzduxIABA/Diiy/ioYcewvr1653OST766CNMmzYN//3vf/HYY48hKioKP/74Y8Da4M3NN9/sVJ1b5k/Meuedd9CtWzc8+OCDmDt3Lr744guPjxfo9/q+++5Dfn4+li9fjvvuuw+bN2/G008/7TQFL9CeeOIJLFy4EF988QUeeeQRWK3WNnvPJk+ejP/9738oKyvDAw88gI8//hjPPvus2xVimisqKgpffPEFxowZgyuvvBI7duwI2LGpZRSirS7fEREREREREZETXiknIiIiIiIiChIm5URERERERERBwqSciIiIiIiIKEiYlBMREREREREFCZNyIiIiIiIioiBhUk5EREREREQUJJHBbkBrkyQJJSUlSEpKgkKhCHZziIiIIISAWq1GdnY2lEr2j7cUYz0REYUaf2J9u0/KS0pK0KNHj2A3g4iIyMXp06fRvXv3YDcj7DHWExFRqPIl1rf7pDwpKQmA7cVITk4OcmuIiIgAlUqFHj162GMUtQxjPRERhRp/Yn27T8rlYWzJyckM1EREFFI41DowGOuJiChU+RLrOZGNiIiIiIiIKEiYlBMREREREREFCZNyIiIiIiIioiBhUk5EREREREQUJEzKiYiIiIiIiIKESTkRERERERFRkDApJyIiIiIiIgoSJuVEREREREREQcKknIiIiIiIiChImJQTERERERERBUlQk/ItW7bgiiuuQHZ2NhQKBdasWeN0+5dffolLL70U6enpUCgU2L9/f1DaSURERERERNQagpqUa7VanHfeefjvf//r8faLL74Yzz77bBu3jIiIiIiIiKj1RQbzwS+77DJcdtllHm+/5ZZbAAD5+flt1CIiIiIiIiKithPUpLw1GI1GGI1G++8qlSqIrWlHJCtQsA3QlAOJmUCvsYAyItitIiKiDoixvpUw1hMRBUW7S8qXL1+OZcuWBbsZ7cuRb4CfFgOqkjPbkrOB6c8CQ2YFr11ERNQhMda3AsZ6IqKgaXfV1x977DHU19fb/50+fTrYTQpvR74BPrvVOUgDgKrUtv3IN8FpFxERdViM9QHGWE9EFFTt7kp5TEwMYmJigt2M9kGy2nrNIdzcKAAogJ8eBQZdzuFtRETUZhjrA4ixnogo6NrdlXIKoIJtrr3mTgSgKrbtR0REROGHsZ6IKOiCeqVc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NbKE1kozWivNmAxHcGbAj5N9ozg14EcwFFnUGPKNSTkRERW9ZpcJN24W8fAb3QULrBqZjWyIiIgyoZJE7G6uwNpqM/Yd78ep/sy3O5VFAdVWHRoc0UTcadRAyHItm0oSscptwiq3CaFwBOeGxnCybxRt/f6i3GedSTkREZWEBocB79xSg98d7ERgcukSc41KxMWrnFhfY1my1yQiIioHVr0aN26uwekBP/Yd68Pw2GTK49KVpOeCLIlochrR5DQiElHQMTyOE30+tPWPwh8ojgSdSTkREZWMaqsO791Wh4de61iSQLrKbcSlLS4Y0pTKERER0fxWVBhQb2/Eq+eG8fLpIagkIVqSbjeg3qFPW5Kea6IooD42A39Zqwtdngmc6PXhZN9o3tbAZ4JnGUREVFKcJg3eu60Ov3m1I28B1KSVcUmLC80uY16en4iIaLmRRAHnNdqxsdYCtSRmXZKea4IgoMaqQ41Vh0taXOj1TqDXO1GQsTApJyKikmMzqPH+8+rw21c7MeQP5ux5BQHYUGPBhasquIaciIgoD4o1vrrNWrjN2oK8NvcpJyKikmTSqvDe7bVwmTU5eT67QY33bKvF5WvcRXvCQEREROWHSTkREZUsvVrGu7fWosaqW/BzSKKAHSvsuHlHPWpt+hyOjoiIiGh+TMqJiKikaVUS3rm1BisqDFk/ttKixU3n12N3cwXkHHZ6JSIiIsoUz0CIiKjkqSQR12+qxmq3KaPj1bKIPS1OfOC8OjhNuSl/JyIiIloINnojIqKyIIkCrtlQCbUs4nCnJ+1xjRV6XNbqhkWnWsLREREREaXGpJyIiMqGIAh421o3NLKIA2eHk+7TqSVcvMqJtdXmAo2OiIiIaDYm5UREVHYuXu2ERhbxQtsgAKC10oQ9LU7o1Qx7REREVFx4dkJERGVpR5MDerUMo1ZeUBM4IiIioqXApJyIiMrWhlpLoYdARERENCd2XyciIiIiIiIqECblRERERERERAXCpJyIiIiIiIioQJiUExERERERERUIk3IiIiIiIiKiAmFSTkRERERERFQgTMqJiIiIiIiICoRJOREREREREVGBMCknIiIiIiIiKhAm5UREREREREQFwqSciIiIiIiIqECYlBMREREREREVCJNyIiIiIiIiogJhUk5ERERERERUIEzKiYiIiIiIiAqESTkRERERERFR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z4/xnharXOO9oCiKUuhBEBERERERES1HXFNOREREREREVCBMyomIiIiIiIgKhEk5ERERERERUYEwKSciIiIiIiIqECblRERERERERAXCpJyIiIiIiIioQJiUExERERERERUIk3KiPNi7dy8EQcDIyEihh1JQy+V9uOSSS/D5z3++0MMgIqIltFxi3HyWy/vAWE/5xKScyoYgCHP+ufvuu5dsLLt370Z3dzcsFsuCn+PMmTNJ47fb7dizZw+ee+65HI50efvRj34Eq9Va6GEQEVGGGOspW4z1VAqYlFPZ6O7uTvx54IEHYDabk2774he/mNXzTU5OzrotGAxm9Fi1Wo3KykoIgpDVa6by5JNPoru7G88++yyqq6tx3XXXobe3d9HPS0REVGoY64moHDEpp7JRWVmZ+GOxWCAIQtJtv/jFL7BmzRpotVq0trbi3//93xOPjV+p/uUvf4k9e/ZAq9XiZz/7GT760Y/iHe94B77+9a+juroaLS0tAICf/OQn2L59O0wmEyorK/HBD34QfX19ieebWcoVv0r7+OOPY82aNTAajbjqqqvQ3d0978/lcDhQWVmJ9evX4+///u/h9Xrx0ksvJT3vdL/73e9mnSB87Wtfg8vlgslkwic/+Ul8+ctfxubNmxP3h0IhfPazn4XVaoXD4cAdd9yBW265Be94xzsSx0QiEdxzzz1YsWIFdDodNm3ahF//+tdJr/PII49g9erV0Ol0uPTSS3HmzJmk+zN9H/77v/877e8qGAziM5/5DKqqqqDVatHQ0IB77rkHAKAoCu6++27U19dDo9Gguroan/3sZ+d9j+PuvvtubN68GT/5yU/Q2NgIi8WCD3zgA/D5fIlj/H4/PvKRj8BoNKKqqgr33XffrOcJBAL44he/iJqaGhgMBuzYsQN79+4FAExMTGDdunX427/928TxbW1tMJlM+MEPfpDxWImIliPG+ijGesZ6KjMKURn64Q9/qFgslsT3P/3pT5WqqirlN7/5jXLq1CnlN7/5jWK325Uf/ehHiqIoyunTpxUASmNjY+KYrq4u5ZZbblGMRqPy4Q9/WDl8+LBy+PBhRVEU5fvf/77yyCOPKG1tbcqLL76o7Nq1S7n66qsTr/fMM88oAJTh4eHEeFQqlXLFFVco+/fvVw4cOKCsWbNG+eAHP5j2Z4iP6bXXXlMURVHGxsaUL37x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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "mvn_predictions = pd.DataFrame({\n", + " \"cont_africa\": is_cont_africa,\n", + " \"rugged\": ruggedness,\n", + " \"y_mean\": mvn_gdp.mean(dim=0).detach().cpu().numpy(),\n", + " \"y_perc_5\": mvn_gdp.kthvalue(int(len(mvn_gdp) * 0.05), dim=0)[0].detach().cpu().numpy(),\n", + " \"y_perc_95\": mvn_gdp.kthvalue(int(len(mvn_gdp) * 0.95), dim=0)[0].detach().cpu().numpy(),\n", + " \"true_gdp\": log_gdp,\n", + "})\n", + "mvn_non_african_nations = mvn_predictions[mvn_predictions[\"cont_africa\"] == 0].sort_values(by=[\"rugged\"])\n", + "\n", + "fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(12, 6), sharey=True)\n", + "fig.suptitle(\"Posterior predictive distribution with 90% CI\", fontsize=16)\n", + "\n", + "ax[0].plot(non_african_nations[\"rugged\"], non_african_nations[\"y_mean\"])\n", + "ax[0].fill_between(non_african_nations[\"rugged\"], non_african_nations[\"y_perc_5\"], non_african_nations[\"y_perc_95\"], alpha=0.5)\n", + "ax[0].plot(non_african_nations[\"rugged\"], non_african_nations[\"true_gdp\"], \"o\")\n", + "ax[0].set(xlabel=\"Terrain Ruggedness Index\", ylabel=\"log GDP (2000)\", title=\"Non African Nations: Mean-field\")\n", + "\n", + "ax[1].plot(mvn_non_african_nations[\"rugged\"], mvn_non_african_nations[\"y_mean\"])\n", + "ax[1].fill_between(mvn_non_african_nations[\"rugged\"], mvn_non_african_nations[\"y_perc_5\"], mvn_non_african_nations[\"y_perc_95\"], alpha=0.5)\n", + "ax[1].plot(mvn_non_african_nations[\"rugged\"], mvn_non_african_nations[\"true_gdp\"], \"o\")\n", + "ax[1].set(xlabel=\"Terrain Ruggedness Index\", ylabel=\"log GDP (2000)\", title=\"Non-African Nations: Full rank\");" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "532ogNlsqHw9" + }, + "source": [ + "## Next steps\n", + "\n", + "If you made it this far, you’re ready to get started using Pyro! Follow [the instructions on the front page to install Pyro](http://pyro.ai/#install) and check out [the rest of our examples and tutorials](https://pyro.ai/examples/index.html), especially the [Practical Pyro and PyTorch](http://pyro.ai/examples/#practical-pyro-and-pytorch) tutorial series, which includes [a version of the same Bayesian regression analysis in this tutorial](http://pyro.ai/examples/bayesian_regression.html) written using a more [PyTorch-native modeling API](http://pyro.ai/examples/modules.html).\n", + "\n", + "For more background on the mathematics of variational inference in Pyro, check out our SVI tutorial series, starting with [Part 1](http://pyro.ai/examples/svi_part_i.html). If you’re new to PyTorch or deep learning, you may also benefit from reading the official introduction [“Deep Learning with PyTorch.”](https://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html)\n", + "\n", + "Most users who reach this point will also find our [guide to tensor shapes in Pyro](http://pyro.ai/examples/tensor_shapes.html) essential reading. Pyro makes extensive use of the behavior of [“array broadcasting”](https://numpy.org/doc/stable/user/basics.broadcasting.html) baked into PyTorch and other array libraries to parallelize models and inference algorithms, and while it can be difficult to understand this behavior initially, applying the intuition and rules of thumb there will go a long way toward making your experience smooth and avoiding nasty shape errors." + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "colab": { + "name": "mia_intro.ipynb", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.13" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/pyro/source/tutorial/source/intro_part_i.ipynb b/pyro/source/tutorial/source/intro_part_i.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..b8736764d812b5d8c68cb04ee8caf6e9e4251f91 --- /dev/null +++ b/pyro/source/tutorial/source/intro_part_i.ipynb @@ -0,0 +1,325 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# (DEPRECATED) An Introduction to Models in Pyro\n", + "\n", + "## WARNING\n", + "***This tutorial has been deprecated*** in favor of the updated [Introduction to Pyro](https://pyro.ai/examples/intro_long.html). It may be removed in the future.***\n", + "\n", + "The basic unit of probabilistic programs is the _stochastic function_. \n", + "This is an arbitrary Python callable that combines two ingredients:\n", + "\n", + "- deterministic Python code; and\n", + "- primitive stochastic functions that call a random number generator\n", + "\n", + "Concretely, a stochastic function can be any Python object with a `__call__()` method, like a function, a method, or a PyTorch `nn.Module`.\n", + "\n", + "Throughout the tutorials and documentation, we will often call stochastic functions *models*, since stochastic functions can be used to represent simplified or abstract descriptions of a process by which data are generated. Expressing models as stochastic functions means that models can be composed, reused, imported, and serialized just like regular Python callables. " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "import pyro\n", + "\n", + "pyro.set_rng_seed(101)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Primitive Stochastic Functions\n", + "\n", + "Primitive stochastic functions, or distributions, are an important class of stochastic functions for which we can explicitly compute the probability of the outputs given the inputs. As of PyTorch 0.4 and Pyro 0.2, Pyro uses PyTorch's [distribution library](http://pytorch.org/docs/master/distributions.html). You can also create custom distributions using [transforms](http://pytorch.org/docs/master/distributions.html#module-torch.distributions.transforms).\n", + "\n", + "Using primitive stochastic functions is easy. For example, to draw a sample `x` from the unit normal distribution $\\mathcal{N}(0,1)$ we do the following:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sample tensor(-1.3905)\n", + "log prob tensor(-1.8857)\n" + ] + } + ], + "source": [ + "loc = 0. # mean zero\n", + "scale = 1. # unit variance\n", + "normal = torch.distributions.Normal(loc, scale) # create a normal distribution object\n", + "x = normal.rsample() # draw a sample from N(0,1)\n", + "print(\"sample\", x)\n", + "print(\"log prob\", normal.log_prob(x)) # score the sample from N(0,1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, `torch.distributions.Normal` is an instance of the `Distribution` class that takes parameters and provides sample and score methods. Pyro's distribution library `pyro.distributions` is a thin wrapper around `torch.distributions` because we want to make use of PyTorch's fast tensor math and autograd capabilities during inference." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## A Simple Model\n", + "\n", + "All probabilistic programs are built up by composing primitive stochastic functions and deterministic computation. Since we're ultimately interested in probabilistic programming because we want to model things in the real world, let's start with a model of something concrete. \n", + "\n", + "Let's suppose we have a bunch of data with daily mean temperatures and cloud cover. We want to reason about how temperature interacts with whether it was sunny or cloudy. A simple stochastic function that describes how that data might have been generated is given by:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def weather():\n", + " cloudy = torch.distributions.Bernoulli(0.3).sample()\n", + " cloudy = 'cloudy' if cloudy.item() == 1.0 else 'sunny'\n", + " mean_temp = {'cloudy': 55.0, 'sunny': 75.0}[cloudy]\n", + " scale_temp = {'cloudy': 10.0, 'sunny': 15.0}[cloudy]\n", + " temp = torch.distributions.Normal(mean_temp, scale_temp).rsample()\n", + " return cloudy, temp.item()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's go through this line-by-line. First, in lines 2 we define a binary random variable 'cloudy', which is given by a draw from the Bernoulli distribution with a parameter of `0.3`. Since the Bernoulli distributions return `0`s or `1`s, in line 3 we convert the value `cloudy` to a string so that return values of `weather` are easier to parse. So according to this model 30% of the time it's cloudy and 70% of the time it's sunny.\n", + "\n", + "In lines 4-5 we define the parameters we're going to use to sample the temperature in lines 6. These parameters depend on the particular value of `cloudy` we sampled in line 2. For example, the mean temperature is 55 degrees (Fahrenheit) on cloudy days and 75 degrees on sunny days. Finally we return the two values `cloudy` and `temp` in line 7.\n", + "\n", + "However, `weather` is entirely independent of Pyro - it only calls PyTorch. We need to turn it into a Pyro program if we want to use this model for anything other than sampling fake data." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The `pyro.sample` Primitive\n", + "\n", + "To turn `weather` into a Pyro program, we'll replace the `torch.distribution`s with `pyro.distribution`s and the `.sample()` and `.rsample()` calls with calls to `pyro.sample`, one of the core language primitives in Pyro. Using `pyro.sample` is as simple as calling a primitive stochastic function with one important difference:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tensor(-0.8152)\n" + ] + } + ], + "source": [ + "x = pyro.sample(\"my_sample\", pyro.distributions.Normal(loc, scale))\n", + "print(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Just like a direct call to `torch.distributions.Normal().rsample()`, this returns a sample from the unit normal distribution. The crucial difference is that this sample is _named_. Pyro's backend uses these names to uniquely identify sample statements and _change their behavior at runtime_ depending on how the enclosing stochastic function is being used. As we will see, this is how Pyro can implement the various manipulations that underlie inference algorithms." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we've introduced `pyro.sample` and `pyro.distributions` we can rewrite our simple model as a Pyro program:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('cloudy', 64.5440444946289)\n", + "('sunny', 94.37557983398438)\n", + "('sunny', 72.5186767578125)\n" + ] + } + ], + "source": [ + "def weather():\n", + " cloudy = pyro.sample('cloudy', pyro.distributions.Bernoulli(0.3))\n", + " cloudy = 'cloudy' if cloudy.item() == 1.0 else 'sunny'\n", + " mean_temp = {'cloudy': 55.0, 'sunny': 75.0}[cloudy]\n", + " scale_temp = {'cloudy': 10.0, 'sunny': 15.0}[cloudy]\n", + " temp = pyro.sample('temp', pyro.distributions.Normal(mean_temp, scale_temp))\n", + " return cloudy, temp.item()\n", + "\n", + "for _ in range(3):\n", + " print(weather())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Procedurally, `weather()` is still a non-deterministic Python callable that returns two random samples. Because the randomness is now invoked with `pyro.sample`, however, it is much more than that. In particular `weather()` specifies a joint probability distribution over two named random variables: `cloudy` and `temp`. As such, it defines a probabilistic model that we can reason about using the techniques of probability theory. For example we might ask: if I observe a temperature of 70 degrees, how likely is it to be cloudy? How to formulate and answer these kinds of questions will be the subject of the next tutorial." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Universality: Stochastic Recursion, Higher-order Stochastic Functions, and Random Control Flow\n", + "\n", + "We've now seen how to define a simple model. Building off of it is easy. For example:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "def ice_cream_sales():\n", + " cloudy, temp = weather()\n", + " expected_sales = 200. if cloudy == 'sunny' and temp > 80.0 else 50.\n", + " ice_cream = pyro.sample('ice_cream', pyro.distributions.Normal(expected_sales, 10.0))\n", + " return ice_cream" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This kind of modularity, familiar to any programmer, is obviously very powerful. But is it powerful enough to encompass all the different kinds of models we'd like to express?\n", + "\n", + "It turns out that because Pyro is embedded in Python, stochastic functions can contain arbitrarily complex deterministic Python and randomness can freely affect control flow. For example, we can construct recursive functions that terminate their recursion nondeterministically, provided we take care to pass `pyro.sample` unique sample names whenever it's called. For example we can define a geometric distribution that counts the number of failures until the first success like so:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n" + ] + } + ], + "source": [ + "def geometric(p, t=None):\n", + " if t is None:\n", + " t = 0\n", + " x = pyro.sample(\"x_{}\".format(t), pyro.distributions.Bernoulli(p))\n", + " if x.item() == 1:\n", + " return 0\n", + " else:\n", + " return 1 + geometric(p, t + 1)\n", + " \n", + "print(geometric(0.5))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that the names `x_0`, `x_1`, etc., in `geometric()` are generated dynamically and that different executions can have different numbers of named random variables. \n", + "\n", + "We are also free to define stochastic functions that accept as input or produce as output other stochastic functions:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tensor(2.1493)\n" + ] + } + ], + "source": [ + "def normal_product(loc, scale):\n", + " z1 = pyro.sample(\"z1\", pyro.distributions.Normal(loc, scale))\n", + " z2 = pyro.sample(\"z2\", pyro.distributions.Normal(loc, scale))\n", + " y = z1 * z2\n", + " return y\n", + "\n", + "def make_normal_normal():\n", + " mu_latent = pyro.sample(\"mu_latent\", pyro.distributions.Normal(0, 1))\n", + " fn = lambda scale: normal_product(mu_latent, scale)\n", + " return fn\n", + "\n", + "print(make_normal_normal()(1.))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here `make_normal_normal()` is a stochastic function that takes one argument and which, upon execution, generates three named random variables.\n", + "\n", + "The fact that Pyro supports arbitrary Python code like this—iteration, recursion, higher-order functions, etc.—in conjuction with random control flow means that Pyro stochastic functions are _universal_, i.e. they can be used to represent any computable probability distribution. As we will see in subsequent tutorials, this is incredibly powerful. \n", + "\n", + "It is worth emphasizing that this is one reason why Pyro is built on top of PyTorch: dynamic computational graphs are an important ingredient in allowing for universal models that can benefit from GPU-accelerated tensor math." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Next Steps\n", + "\n", + "We've shown how we can use stochastic functions and primitive distributions to represent models in Pyro. In order to learn models from data and reason about them we need to be able to do inference. This is the subject of the [next tutorial](intro_part_ii.ipynb)." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/intro_part_ii.ipynb b/pyro/source/tutorial/source/intro_part_ii.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..10200fac2161f5950caba7d0ce13287f8456dae6 --- /dev/null +++ b/pyro/source/tutorial/source/intro_part_ii.ipynb @@ -0,0 +1,375 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# (DEPRECATED) An Introduction to Inference in Pyro\n", + "\n", + "## WARNING\n", + "\n", + "***This tutorial has been deprecated*** in favor of the updated [Introduction to Pyro](https://pyro.ai/examples/intro_long.html). It may be removed in the future.\n", + "\n", + "Much of modern machine learning can be cast as approximate inference and expressed succinctly in a language like Pyro. To motivate the rest of this tutorial, let's build a generative model for a simple physical problem so that we can use Pyro's inference machinery to solve it. However, we will first import the required modules for this tutorial:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import torch\n", + "\n", + "import pyro\n", + "import pyro.infer\n", + "import pyro.optim\n", + "import pyro.distributions as dist\n", + "\n", + "pyro.set_rng_seed(101)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## A Simple Example\n", + "Suppose we are trying to figure out how much something weighs, but the scale we're using is unreliable and gives slightly different answers every time we weigh the same object. We could try to compensate for this variability by integrating the noisy measurement information with a guess based on some prior knowledge about the object, like its density or material properties. The following model encodes this process:\n", + "\n", + "$${\\sf weight} \\, | \\, {\\sf guess} \\sim \\cal {\\sf Normal}({\\sf guess}, 1) $$\n", + "$${\\sf measurement} \\, | \\, {\\sf guess}, {\\sf weight} \\sim {\\sf Normal}({\\sf weight}, 0.75)$$\n", + "\n", + "Note that this is a model not only for our belief over weight, but also for the result of taking a measurement of it. The model corresponds to the following stochastic function: " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def scale(guess):\n", + " weight = pyro.sample(\"weight\", dist.Normal(guess, 1.0))\n", + " return pyro.sample(\"measurement\", dist.Normal(weight, 0.75))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Conditioning\n", + "\n", + "The real utility of probabilistic programming is in the ability to condition generative models on observed data and infer the latent factors that might have produced that data. In Pyro, we separate the expression of conditioning from its evaluation via inference, making it possible to write a model once and condition it on many different observations. Pyro supports constraining a model's internal `sample` statements to be equal to a given set of observations.\n", + "\n", + "Consider `scale` once again. Suppose we want to sample from the distribution of `weight` given input `guess = 8.5`, but now we have observed that `measurement == 9.5`. That is, we wish to *infer* the distribution:\n", + "$$({\\sf weight} \\, | \\, {\\sf guess}, {\\sf measurement} = 9.5) \\sim \\, ? $$\n", + "\n", + "Pyro provides the function `pyro.condition` to allow us to constrain the values of sample statements. `pyro.condition` is a higher-order function that takes a model and a dictionary of observations and returns a new model that has the same input and output signatures but always uses the given values at observed `sample` statements:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "conditioned_scale = pyro.condition(scale, data={\"measurement\": torch.tensor(9.5)})" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Because it behaves just like an ordinary Python function, conditioning can be deferred or parametrized with Python's `lambda` or `def`:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "def deferred_conditioned_scale(measurement, guess):\n", + " return pyro.condition(scale, data={\"measurement\": measurement})(guess)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In some cases it might be more convenient to pass observations directly to individual `pyro.sample` statements instead of using `pyro.condition`. The optional `obs` keyword argument is reserved by `pyro.sample` for that purpose:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def scale_obs(guess): # equivalent to conditioned_scale above\n", + " weight = pyro.sample(\"weight\", dist.Normal(guess, 1.))\n", + " # here we condition on measurement == 9.5\n", + " return pyro.sample(\"measurement\", dist.Normal(weight, 0.75), obs=torch.tensor(9.5))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, in addition to `pyro.condition` for incorporating observations, Pyro also contains `pyro.do`, an implementation of Pearl's `do`-operator used for causal inference with an identical interface to `pyro.condition`. `condition` and `do` can be mixed and composed freely, making Pyro a powerful tool for model-based causal inference." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Flexible Approximate Inference With Guide Functions\n", + "\n", + "Let's return to `conditioned_scale`. Now that we have conditioned on an observation of `measurement`, we can use Pyro's approximate inference algorithms to estimate the distribution over `weight` given `guess` and `measurement == data`. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "Inference algorithms in Pyro, such as `pyro.infer.SVI`, allow us to use arbitrary stochastic functions, which we will call *guide functions* or *guides*, as approximate posterior distributions. Guide functions must satisfy these two criteria to be valid approximations for a particular model: \n", + "1. all unobserved (i.e., not conditioned) sample statements that appear in the model appear in the guide.\n", + "2. the guide has the same input signature as the model (i.e., takes the same arguments)\n", + "\n", + "Guide functions can serve as programmable, data-dependent proposal distributions for importance sampling, rejection sampling, sequential Monte Carlo, MCMC, and independent Metropolis-Hastings, and as variational distributions or inference networks for stochastic variational inference. Currently, importance sampling, MCMC, and stochastic variational inference are implemented in Pyro, and we plan to add other algorithms in the future.\n", + "\n", + "Although the precise meaning of the guide is different across different inference algorithms, the guide function should generally be chosen so that, in principle, it is flexible enough to closely approximate the distribution over all unobserved `sample` statements in the model. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the case of `scale`, it turns out that the true posterior distribution over `weight` given `guess` and `measurement` is actually ${\\sf Normal}(9.14, 0.6)$. As the model is quite simple, we are able to determine our posterior distribution of interest analytically (for derivation, see for example Section 3.4 of [these notes](http://www.stat.cmu.edu/~brian/463-663/week09/Chapter%2003.pdf)).\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "def perfect_guide(guess):\n", + " loc = (0.75**2 * guess + 9.5) / (1 + 0.75**2) # 9.14\n", + " scale = np.sqrt(0.75**2 / (1 + 0.75**2)) # 0.6\n", + " return pyro.sample(\"weight\", dist.Normal(loc, scale))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Parametrized Stochastic Functions and Variational Inference\n", + "\n", + "Although we could write out the exact posterior distribution for `scale`, in general it is intractable to specify a guide that is a good approximation to the posterior distribution of an arbitrary conditioned stochastic function. In fact, stochastic functions for which we can determine the true posterior exactly are the exception rather than the rule. For example, even a version of our `scale` example with a nonlinear function in the middle may be intractable:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "def intractable_scale(guess):\n", + " weight = pyro.sample(\"weight\", dist.Normal(guess, 1.0))\n", + " return pyro.sample(\"measurement\", dist.Normal(some_nonlinear_function(weight), 0.75))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What we can do instead is use the top-level function `pyro.param` to specify a *family* of guides indexed by named parameters, and search for the member of that family that is the best approximation according to some loss function. This approach to approximate posterior inference is called *variational inference*.\n", + "\n", + "`pyro.param` is a frontend for Pyro's key-value *parameter store*, which is described in more detail in the documentation. Like `pyro.sample`, `pyro.param` is always called with a name as its first argument. The first time `pyro.param` is called with a particular name, it stores its argument in the parameter store and then returns that value. After that, when it is called with that name, it returns the value from the parameter store regardless of any other arguments. It is similar to `simple_param_store.setdefault` here, but with some additional tracking and management functionality.\n", + "\n", + "```python\n", + "simple_param_store = {}\n", + "a = simple_param_store.setdefault(\"a\", torch.randn(1))\n", + "```\n", + "\n", + "For example, we can parametrize `a` and `b` in `scale_posterior_guide` instead of specifying them by hand:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "def scale_parametrized_guide(guess):\n", + " a = pyro.param(\"a\", torch.tensor(guess))\n", + " b = pyro.param(\"b\", torch.tensor(1.))\n", + " return pyro.sample(\"weight\", dist.Normal(a, torch.abs(b)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As an aside, note that in `scale_parametrized_guide`, we had to apply `torch.abs` to parameter `b` because the standard deviation of a normal distribution has to be positive; similar restrictions also apply to parameters of many other distributions. The PyTorch distributions library, which Pyro is built on, includes a [constraints module](https://pytorch.org/docs/master/distributions.html#module-torch.distributions.constraints) for enforcing such restrictions, and applying constraints to Pyro parameters is as easy as passing the relevant `constraint` object to `pyro.param`:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "from torch.distributions import constraints\n", + "\n", + "def scale_parametrized_guide_constrained(guess):\n", + " a = pyro.param(\"a\", torch.tensor(guess))\n", + " b = pyro.param(\"b\", torch.tensor(1.), constraint=constraints.positive)\n", + " return pyro.sample(\"weight\", dist.Normal(a, b)) # no more torch.abs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pyro is built to enable *stochastic variational inference*, a powerful and widely applicable class of variational inference algorithms with three key characteristics: \n", + "\n", + "1. Parameters are always real-valued tensors\n", + "2. We compute Monte Carlo estimates of a loss function from samples of execution histories of the model and guide\n", + "3. We use stochastic gradient descent to search for the optimal parameters. \n", + "\n", + "Combining stochastic gradient descent with PyTorch's GPU-accelerated tensor math and automatic differentiation allows us to scale variational inference to very high-dimensional parameter spaces and massive datasets. \n", + "\n", + "Pyro's SVI functionality is described in detail in the [SVI tutorial](svi_part_i.ipynb). Here is a very simple example applying it to `scale`:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a = 9.11483097076416\n", + "b = 0.6279532313346863\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "guess = 8.5\n", + "\n", + "pyro.clear_param_store()\n", + "svi = pyro.infer.SVI(model=conditioned_scale, \n", + " guide=scale_parametrized_guide,\n", + " optim=pyro.optim.Adam({\"lr\": 0.003}),\n", + " loss=pyro.infer.Trace_ELBO())\n", + "\n", + "\n", + "losses, a, b = [], [], []\n", + "num_steps = 2500\n", + "for t in range(num_steps):\n", + " losses.append(svi.step(guess))\n", + " a.append(pyro.param(\"a\").item())\n", + " b.append(pyro.param(\"b\").item())\n", + " \n", + "plt.plot(losses)\n", + "plt.title(\"ELBO\")\n", + "plt.xlabel(\"step\")\n", + "plt.ylabel(\"loss\");\n", + "print('a = ',pyro.param(\"a\").item())\n", + "print('b = ', pyro.param(\"b\").item())" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.subplot(1,2,1)\n", + "plt.plot([0,num_steps],[9.14,9.14], 'k:')\n", + "plt.plot(a)\n", + "plt.ylabel('a')\n", + "\n", + "plt.subplot(1,2,2)\n", + "plt.ylabel('b')\n", + "plt.plot([0,num_steps],[0.6,0.6], 'k:')\n", + "plt.plot(b)\n", + "plt.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note that SVI obtains parameters very close to the true parameters of the desired conditional distribution. This is to be expected as our guide is from the same family.**\n", + "\n", + "Note that optimization will update the values of the guide parameters in the parameter store, so that once we find good parameter values, we can use samples from the guide as posterior samples for downstream tasks.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Next Steps\n", + "\n", + "In the [Variational Autoencoder tutorial](vae.ipynb), we'll see how models like `scale` can be augmented with deep neural networks and use stochastic variational inference to build a generative model of images." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/pyro/source/tutorial/source/jit.ipynb b/pyro/source/tutorial/source/jit.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..940d2c36d1515005eb93bb8916b782d46e00cf45 --- /dev/null +++ b/pyro/source/tutorial/source/jit.ipynb @@ -0,0 +1,400 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Using the PyTorch JIT Compiler with Pyro\n", + "\n", + "This tutorial shows how to use the PyTorch [jit compiler](https://pytorch.org/docs/master/jit.html) in Pyro models.\n", + "\n", + "#### Summary:\n", + "- You can use compiled functions in Pyro models.\n", + "- You cannot use pyro primitives inside compiled functions.\n", + "- If your model has static structure, you can use a `Jit*` version of an `ELBO` algorithm, e.g.\n", + " ```diff\n", + " - Trace_ELBO()\n", + " + JitTrace_ELBO()\n", + " ```\n", + "- The [HMC](http://docs.pyro.ai/en/dev/mcmc.html#pyro.infer.mcmc.HMC) and [NUTS](http://docs.pyro.ai/en/dev/mcmc.html#pyro.infer.mcmc.NUTS) classes accept `jit_compile=True` kwarg.\n", + "- Models should input all tensors as `*args` and all non-tensors as `**kwargs`.\n", + "- Each different value of `**kwargs` triggers a separate compilation.\n", + "- Use `**kwargs` to specify all variation in structure (e.g. time series length).\n", + "- To ignore jit warnings in safe code blocks, use `with pyro.util.ignore_jit_warnings():`.\n", + "- To ignore all jit warnings in `HMC` or `NUTS`, pass `ignore_jit_warnings=True`.\n", + "\n", + "#### Table of contents\n", + "- [Introduction](#Introduction)\n", + "- [A simple model](#A-simple-model)\n", + "- [Varying structure](#Varying-structure)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import torch\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "from torch.distributions import constraints\n", + "from pyro import poutine\n", + "from pyro.distributions.util import broadcast_shape\n", + "from pyro.infer import Trace_ELBO, JitTrace_ELBO, TraceEnum_ELBO, JitTraceEnum_ELBO, SVI\n", + "from pyro.infer.mcmc import MCMC, NUTS\n", + "from pyro.infer.autoguide import AutoDiagonalNormal\n", + "from pyro.optim import Adam\n", + "\n", + "smoke_test = ('CI' in os.environ)\n", + "assert pyro.__version__.startswith('1.9.1')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## Introduction\n", + "\n", + "PyTorch 1.0 includes a [jit compiler](https://pytorch.org/docs/master/jit.html) to speed up models. You can think of compilation as a \"static mode\", whereas PyTorch usually operates in \"eager mode\".\n", + "\n", + "Pyro supports the jit compiler in two ways. First you can use compiled functions inside Pyro models (but those functions cannot contain Pyro primitives). Second, you can use Pyro's jit inference algorithms to compile entire inference steps; in static models this can reduce the Python overhead of Pyro models and speed up inference.\n", + "\n", + "The rest of this tutorial focuses on Pyro's jitted inference algorithms: [JitTrace_ELBO](http://docs.pyro.ai/en/dev/inference_algos.html#pyro.infer.trace_elbo.JitTrace_ELBO), [JitTraceGraph_ELBO](http://docs.pyro.ai/en/dev/inference_algos.html#pyro.infer.tracegraph_elbo.JitTraceGraph_ELBO), [JitTraceEnum_ELBO](http://docs.pyro.ai/en/dev/inference_algos.html#pyro.infer.traceenum_elbo.JitTraceEnum_ELBO), [JitMeanField_ELBO](http://docs.pyro.ai/en/dev/inference_algos.html#pyro.infer.trace_mean_field_elbo.JitTraceMeanField_ELBO), [HMC(jit_compile=True)](http://docs.pyro.ai/en/dev/mcmc.html#pyro.infer.mcmc.HMC), and [NUTS(jit_compile=True)](http://docs.pyro.ai/en/dev/mcmc.html#pyro.infer.mcmc.NUTS). For further reading, see the [examples/](https://github.com/pyro-ppl/pyro/tree/dev/examples) directory, where most examples include a `--jit` option to run in compiled mode.\n", + "\n", + "## A simple model\n", + "\n", + "Let's start with a simple Gaussian model and an [autoguide](http://docs.pyro.ai/en/dev/infer.autoguide.html)." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def model(data):\n", + " loc = pyro.sample(\"loc\", dist.Normal(0., 10.))\n", + " scale = pyro.sample(\"scale\", dist.LogNormal(0., 3.))\n", + " with pyro.plate(\"data\", data.size(0)):\n", + " pyro.sample(\"obs\", dist.Normal(loc, scale), obs=data)\n", + "\n", + "guide = AutoDiagonalNormal(model)\n", + "\n", + "data = dist.Normal(0.5, 2.).sample((100,))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First let's run as usual with an SVI object and `Trace_ELBO`." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 2.71 s, sys: 31.4 ms, total: 2.74 s\n", + "Wall time: 2.76 s\n" + ] + } + ], + "source": [ + "%%time\n", + "pyro.clear_param_store()\n", + "elbo = Trace_ELBO()\n", + "svi = SVI(model, guide, Adam({'lr': 0.01}), elbo)\n", + "for i in range(2 if smoke_test else 1000):\n", + " svi.step(data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next to run with a jit compiled inference, we simply replace\n", + "```diff\n", + "- elbo = Trace_ELBO()\n", + "+ elbo = JitTrace_ELBO()\n", + "```\n", + "Also note that the `AutoDiagonalNormal` guide behaves a little differently on its first invocation (it runs the model to produce a prototype trace), and we don't want to record this warmup behavior when compiling. Thus we call the `guide(data)` once to initialize, then run the compiled SVI," + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 1.1 s, sys: 30.4 ms, total: 1.13 s\n", + "Wall time: 1.16 s\n" + ] + } + ], + "source": [ + "%%time\n", + "pyro.clear_param_store()\n", + "\n", + "guide(data) # Do any lazy initialization before compiling.\n", + "\n", + "elbo = JitTrace_ELBO()\n", + "svi = SVI(model, guide, Adam({'lr': 0.01}), elbo)\n", + "for i in range(2 if smoke_test else 1000):\n", + " svi.step(data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that we have a more than 2x speedup for this small model.\n", + "\n", + "Let us now use the same model, but we will instead use MCMC to generate samples from the model's posterior. We will use the No-U-Turn(NUTS) sampler." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "3dc474967f304f56a22df195ce1ed06f", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(IntProgress(value=0, description='Warmup', style=ProgressStyle(description_width='initial')), H…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "CPU times: user 4.61 s, sys: 101 ms, total: 4.71 s\n", + "Wall time: 4.7 s\n" + ] + } + ], + "source": [ + "%%time\n", + "nuts_kernel = NUTS(model)\n", + "pyro.set_rng_seed(1)\n", + "mcmc_run = MCMC(nuts_kernel, num_samples=100).run(data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can compile the potential energy computation in NUTS using the `jit_compile=True` argument to the NUTS kernel. We also silence JIT warnings due to the presence of tensor constants in the model by using `ignore_jit_warnings=True`." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "134dac15856941dfaf427a9e6089f7e3", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(IntProgress(value=0, description='Warmup', style=ProgressStyle(description_width='initial')), H…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "CPU times: user 2.04 s, sys: 74.1 ms, total: 2.11 s\n", + "Wall time: 2.09 s\n" + ] + } + ], + "source": [ + "%%time\n", + "nuts_kernel = NUTS(model, jit_compile=True, ignore_jit_warnings=True)\n", + "pyro.set_rng_seed(1)\n", + "mcmc_run = MCMC(nuts_kernel, num_samples=100).run(data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We notice a significant increase in sampling throughput when JIT compilation is enabled." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Varying structure\n", + "\n", + "Time series models often run on datasets of multiple time series with different lengths. To accomodate varying structure like this, Pyro requires models to separate all model inputs into tensors and non-tensors.$^\\dagger$\n", + "\n", + "- Non-tensor inputs should be passed as `**kwargs` to the model and guide. These can determine model structure, so that a model is compiled for each value of the passed `**kwargs`.\n", + "- Tensor inputs should be passed as `*args`. These must not determine model structure. However `len(args)` may determine model structure (as is used e.g. in semisupervised models).\n", + "\n", + "To illustrate this with a time series model, we will pass in a sequence of observations as a tensor `arg` and the sequence length as a non-tensor `kwarg`:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def model(sequence, num_sequences, length, state_dim=16):\n", + " # This is a Gaussian HMM model.\n", + " with pyro.plate(\"states\", state_dim):\n", + " trans = pyro.sample(\"trans\", dist.Dirichlet(0.5 * torch.ones(state_dim)))\n", + " emit_loc = pyro.sample(\"emit_loc\", dist.Normal(0., 10.))\n", + " emit_scale = pyro.sample(\"emit_scale\", dist.LogNormal(0., 3.))\n", + "\n", + " # We're doing manual data subsampling, so we need to scale to actual data size.\n", + " with poutine.scale(scale=num_sequences):\n", + " # We'll use enumeration inference over the hidden x.\n", + " x = 0\n", + " for t in pyro.markov(range(length)):\n", + " x = pyro.sample(\"x_{}\".format(t), dist.Categorical(trans[x]),\n", + " infer={\"enumerate\": \"parallel\"})\n", + " pyro.sample(\"y_{}\".format(t), dist.Normal(emit_loc[x], emit_scale),\n", + " obs=sequence[t])\n", + "\n", + "guide = AutoDiagonalNormal(poutine.block(model, expose=[\"trans\", \"emit_scale\", \"emit_loc\"]))\n", + "\n", + "# This is fake data of different lengths.\n", + "lengths = [24] * 50 + [48] * 20 + [72] * 5\n", + "sequences = [torch.randn(length) for length in lengths]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now lets' run SVI as usual." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 52.4 s, sys: 270 ms, total: 52.7 s\n", + "Wall time: 52.8 s\n" + ] + } + ], + "source": [ + "%%time\n", + "pyro.clear_param_store()\n", + "elbo = TraceEnum_ELBO(max_plate_nesting=1)\n", + "svi = SVI(model, guide, Adam({'lr': 0.01}), elbo)\n", + "for i in range(1 if smoke_test else 10):\n", + " for sequence in sequences:\n", + " svi.step(sequence, # tensor args\n", + " num_sequences=len(sequences), length=len(sequence)) # non-tensor args" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Again we'll simply swap in a `Jit*` implementation\n", + "```diff\n", + "- elbo = TraceEnum_ELBO(max_plate_nesting=1)\n", + "+ elbo = JitTraceEnum_ELBO(max_plate_nesting=1)\n", + "```\n", + "Note that we are manually specifying the `max_plate_nesting` arg. Usually Pyro can figure this out automatically by running the model once on the first invocation; however to avoid this extra work when we run the compiler on the first step, we pass this in manually." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 21.9 s, sys: 201 ms, total: 22.1 s\n", + "Wall time: 22.2 s\n" + ] + } + ], + "source": [ + "%%time\n", + "pyro.clear_param_store()\n", + "\n", + "# Do any lazy initialization before compiling.\n", + "guide(sequences[0], num_sequences=len(sequences), length=len(sequences[0]))\n", + "\n", + "elbo = JitTraceEnum_ELBO(max_plate_nesting=1)\n", + "svi = SVI(model, guide, Adam({'lr': 0.01}), elbo)\n", + "for i in range(1 if smoke_test else 10):\n", + " for sequence in sequences:\n", + " svi.step(sequence, # tensor args\n", + " num_sequences=len(sequences), length=len(sequence)) # non-tensor args" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Again we see more than 2x speedup. Note that since there were three different sequence lengths, compilation was triggered three times.\n", + "\n", + "$^\\dagger$ Note this section is only valid for SVI, and HMC/NUTS assume fixed model arguments." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/lda.rst b/pyro/source/tutorial/source/lda.rst new file mode 100644 index 0000000000000000000000000000000000000000..ce24dba306cf8a66b86ed95e211d8a01c9efa018 --- /dev/null +++ b/pyro/source/tutorial/source/lda.rst @@ -0,0 +1,11 @@ +Example: Amortized Latent Dirichlet Allocation +============================================== + +`View lda.py on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/examples/lda.py + +__ github_ + +.. literalinclude:: ../../examples/lda.py + :language: python diff --git a/pyro/source/tutorial/source/lkj.rst b/pyro/source/tutorial/source/lkj.rst new file mode 100644 index 0000000000000000000000000000000000000000..3d8aa1faa011437d3f5c7a0d0407341b181bb35c --- /dev/null +++ b/pyro/source/tutorial/source/lkj.rst @@ -0,0 +1,11 @@ +Example: MCMC with an LKJ prior over covariances +======================================================= + +`View lkj.py on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/examples/lkj.py + +__ github_ + +.. literalinclude:: ../../examples/lkj.py + :language: python diff --git a/pyro/source/tutorial/source/logistic-growth.ipynb b/pyro/source/tutorial/source/logistic-growth.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..a3db7c8a4863bc7b07a238e2d2088d076f096456 --- /dev/null +++ b/pyro/source/tutorial/source/logistic-growth.ipynb @@ -0,0 +1,1126 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Logistic growth models of SARS-CoV-2 lineage proportions\n", + "\n", + "This notebook explores logistic growth models, with the goal of inferring the differential growth rates of different SARS-CoV-2 lineages over time. Before this tutorial you may want to familiarize yourself with [Pyro modeling basics](http://pyro.ai/examples/intro_long.html) and [tensor shapes](http://pyro.ai/examples/tensor_shapes.html) in Pyro and PyTorch.\n", + "\n", + "**WARNING**: The purpose of this tutorial is to demonstrate Pyro's modeling and inference syntax. \n", + "Making reliable inferences about SARS-CoV-2 **is not** the purpose of this tutorial.\n", + "\n", + "#### Table of contents\n", + "\n", + "* [Overview](#Overview)\n", + "* [Loading data](#Loading-data)\n", + "* [A First Model](#A-first-model)\n", + "* [A regional model](#A-regional-model)\n", + "* [An alternative regional model](#An-alternative-regional-model)\n", + "* [Generalizations](#Generalizations)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Overview \n", + "\n", + "When different strains/lineages/variants of a virus like SARS-CoV-2 circulate in a population, those lineages that have the largest fitness will tend to dominate, and those lineages that are least fit will tend to be outcompeted by the fittest lineages.\n", + "In this tutorial we set out to infer (differential) growth rates for different \n", + "SARS-CoV-2 lineages using a spatio-temporal dataset of SARS-CoV-2 genetic sequences.\n", + "We'll start with the simplest possible model and then move on to more complex models with hierarchical structure." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Using CPU\n" + ] + } + ], + "source": [ + "import os\n", + "import datetime\n", + "from functools import partial\n", + "import numpy as np\n", + "import torch\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "from pyro.infer import SVI, Trace_ELBO\n", + "from pyro.infer.autoguide import AutoNormal\n", + "from pyro.optim import ClippedAdam\n", + "import matplotlib as mpl\n", + "import matplotlib.pyplot as plt\n", + "\n", + "if torch.cuda.is_available():\n", + " print(\"Using GPU\")\n", + " torch.set_default_device(\"cuda\")\n", + "else:\n", + " print(\"Using CPU\")\n", + "\n", + "smoke_test = ('CI' in os.environ) # for use in continuous integration testing" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Loading data \n", + "\n", + "Our data consist of a few million genetic sequences of SARS-CoV-2 viruses, clustered into [PANGO lineages](https://cov-lineages.org), and aggregated into a few hundred regions globally and into 28-day time bins. Preprocessing was performed by Nextstrain's [ncov](https://docs.nextstrain.org/projects/ncov/en/latest/reference/remote_inputs.html) tool, and aggregation was performed by the Broad Institute's [pyro-cov](https://github.com/broadinstitute/pyro-cov/blob/master/scripts/preprocess_nextstrain.py) tool." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "counts: Tensor of shape (27, 202, 1316) on cpu\n", + "features: Tensor of shape (1316, 2634) on cpu\n", + "lineages: list of length 1316\n", + "locations: list of length 202\n", + "mutations: list of length 2634\n", + "sparse_counts.index: Tensor of shape (3, 57129) on cpu\n", + "sparse_counts.total: Tensor of shape (27, 202) on cpu\n", + "sparse_counts.value: Tensor of shape (57129,) on cpu\n", + "start_date: datetime\n", + "time_step_days: int\n" + ] + } + ], + "source": [ + "from pyro.contrib.examples.nextstrain import load_nextstrain_counts\n", + "dataset = load_nextstrain_counts()\n", + "\n", + "def summarize(x, name=\"\"):\n", + " if isinstance(x, dict):\n", + " for k, v in sorted(x.items()):\n", + " summarize(v, name + \".\" + k if name else k)\n", + " elif isinstance(x, torch.Tensor):\n", + " print(f\"{name}: {type(x).__name__} of shape {tuple(x.shape)} on {x.device}\")\n", + " elif isinstance(x, list):\n", + " print(f\"{name}: {type(x).__name__} of length {len(x)}\")\n", + " else:\n", + " print(f\"{name}: {type(x).__name__}\")\n", + "summarize(dataset)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this tutorial our interest is in the 3-dimensional tensor\n", + "of counts `dataset[\"counts\"]`, which has shape (T, R, L) where `T` is the number of time bins, `R` is the number of regions, and `L` is the number of strains or PANGO lineages, and `dataset[\"counts\"][t,r,l]` is the number of samples in the corresponding time-region-location bin.\n", + "The count data are heavily skewed towards a few large regions and dominant lineages like `B.1.1.7` and `B.1.617.2`." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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Hufm5saCBQt49tlnGTZsGMOHDwegXbt2d3zerl27+O2335g0aRIAc+bM4YEHHuDVV1/lq6++4rnnniMpKYmPPvqIJ554gu3bt+ueu337dgYNGkRgYCAzZ85ErVazbNky+vXrx65duwgKCir3fXjvvfdQqVS89tprxMbGMn/+fEJCQggPD8fa2vqOz/3xxx9JS0vj6aefRqVS8dFHHzF8+HAuX76su1U2YsQITp8+zfPPP0/Dhg2JjY1ly5YtXLt2TQbWmaDS8iYyMpLY2Fg6depU4vigoCA2btxY7nmjo6NxdXXVK6ZZs2Yxe/ZsQkJCePbZZzl37hwLFizg0KFD7NmzR/e7uGXLFh544AHq16/P1KlT8fT05J9//mHDhg1MnTpVd8zly5eZMGECnp6enD59mq+//prTp0+zf/9+VCoVw4cP5/z58/z00098+umnuriLvgDfLiYmhm7dupGZmcmUKVOoV68e3377LUOGDGHt2rUMGzas2PEffPABarWal19+mZSUFD766CPGjBnDgQMHAMjNzWXAgAHk5OTw/PPP4+npSWRkJBs2bCA5ORlHR0e93kdhWAkJCRQUFHDt2jVd4dq/f3+9zrV161ZatGjBxo0beeWVV4iMjMTZ2ZlJkyYxe/bsKuuiU1BQwIABAwgODubjjz9m69atfPLJJzRu3Jhnn31Wd9zTTz/N8uXLmTBhAlOmTCEiIoIvv/ySY8eOFcvR5cuXY2dnx7Rp07Czs2P79u3MmDGD1NRU5s6dqzvfggULmDx5Mj179uTFF1/kypUrPPjggzg7OxdrqNJqtQwZMoTdu3fz1FNP0bJlS06ePMmnn37K+fPnWbduHQCnT5/mgQceoF27drz99ttoNBouXrx4V41JJsPALdDCCKxYsUIBlG+++eaOx40YMULRaDRKUlJSuee8UxeImTNnKrf/6gGKRqMpdht10aJFCqB4enoqqampuu3Tp08vdstVq9UqTZs2VQYMGKC7JaYoipKZman4+/sr99xzzx1jLeoC4e3tXew6q1evVgDls88+020bN26c4ufnp/s5IiJCAZR69eopiYmJuu3r169XAOX3339XFEVRkpKSFECZO3fuHWMRpqO0vCm6xfvdd9+VOP6VV15RACU7O7vMc+7cuVNRqVTKW2+9Ve71b+8CERsbq1haWir33nuvUlBQoDvuyy+/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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, axes = plt.subplots(1, 3, figsize=(8, 3), sharey=True)\n", + "for i, name in enumerate([\"time bin\", \"location\", \"lineage\"]):\n", + " counts = dataset[\"counts\"].sum(list({0, 1, 2} - {i}))\n", + " Y = counts.sort(0, True).values\n", + " axes[i].plot(Y)\n", + " axes[i].set_xlim(0, None)\n", + " axes[0].set_ylim(1, None)\n", + " axes[i].set_yscale(\"log\")\n", + " axes[i].set_xlabel(f\"rank\", fontsize=18)\n", + " axes[i].set_title(f\"{len(Y)} {name}s\")\n", + "axes[0].set_ylabel(\"# samples\", fontsize=18)\n", + "plt.subplots_adjust(wspace=0.05);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Helpers for manipulating data" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "def get_lineage_id(s):\n", + " \"\"\"Get lineage id from string name\"\"\"\n", + " return np.argmax(np.array([s]) == dataset['lineages'])\n", + "\n", + "def get_location_id(s):\n", + " \"\"\"Get location id from string name\"\"\"\n", + " return np.argmax(np.array([s]) == dataset['locations'])\n", + "\n", + "def get_aggregated_counts_from_locations(locations):\n", + " \"\"\"Get aggregated counts from a list of locations\"\"\"\n", + " return sum([dataset['counts'][:, get_location_id(loc)] for loc in locations])\n", + "\n", + "start = dataset[\"start_date\"]\n", + "step = datetime.timedelta(days=dataset[\"time_step_days\"])\n", + "date_range = np.array([start + step * t for t in range(len(dataset[\"counts\"]))])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## A first model \n", + "\n", + "First let's zoom-in on Massachusetts and a few surrounding states:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "northeast_states = ['USA / Massachusetts', \n", + " 'USA / New York', \n", + " 'USA / Connecticut', \n", + " 'USA / New Hampshire',\n", + " 'USA / Vermont',\n", + " 'USA / New Jersey',\n", + " 'USA / Maine',\n", + " 'USA / Rhode Island', \n", + " 'USA / Pennsylvania']\n", + "\n", + "northeast_counts = get_aggregated_counts_from_locations(northeast_states)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next let's extract sublineages corresponding to two of the [WHO variants of concern](https://www.who.int/en/activities/tracking-SARS-CoV-2-variants/), Alpha and Delta:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# The Alpha and Delta variants include many PANGO lineages, which we need to aggregate.\n", + "Q_lineages = [lin for lin in dataset['lineages'] if lin[:2] == 'Q.']\n", + "AY_lineages = [lin for lin in dataset['lineages'] if lin[:3] == 'AY.']\n", + "\n", + "alpha_lineages = ['B.1.1.7'] + Q_lineages\n", + "delta_lineages = ['B.1.617.2'] + AY_lineages\n", + "\n", + "alpha_ids = [get_lineage_id(lin) for lin in alpha_lineages]\n", + "delta_ids = [get_lineage_id(lin) for lin in delta_lineages]\n", + "\n", + "alpha_counts = northeast_counts[:, alpha_ids].sum(-1)\n", + "delta_counts = northeast_counts[:, delta_ids].sum(-1)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "torch.Size([27, 2])\n" + ] + } + ], + "source": [ + "# Let's combine the counts into a single tensor\n", + "alpha_delta_counts = torch.stack([alpha_counts, delta_counts]).T\n", + "print(alpha_delta_counts.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next let's plot the time series of count proportions (Alpha vs. Delta):" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# We skip the first year or so of the pandemic when Alpha and Delta are not present\n", + "start_time = 13\n", + "total_counts = (alpha_counts + delta_counts)[start_time:]\n", + "dates = date_range[start_time:]\n", + "plt.figure(figsize=(7, 4))\n", + "plt.plot(dates, alpha_counts[start_time:] / total_counts, \n", + " label='Alpha')\n", + "plt.plot(dates, delta_counts[start_time:] / total_counts, \n", + " label='Delta')\n", + "plt.xlim(min(dates), max(dates))\n", + "plt.ylabel(\"Proportion\", fontsize=18)\n", + "plt.xticks(rotation=90)\n", + "plt.gca().xaxis.set_major_locator(mpl.dates.MonthLocator())\n", + "plt.gca().xaxis.set_major_formatter(mpl.dates.DateFormatter(\"%b %Y\"))\n", + "plt.legend(fontsize=18)\n", + "plt.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We see that at first Alpha was dominant, but then Delta started outcompeting it until Delta became dominant.\n", + "\n", + "### Model definition\n", + "\n", + "Instead of attempting to model how the total number of observed sequences varies as a function of time (which depends on complex human behavior), we instead model the *proportion* of sequences at each time step that are Alpha versus Delta. In other words if we observed 8 Alpha lineages and 2 Delta lineages at a given time step, we model the proportions 80% and 20% instead of the raw counts 8 and 2. To do this we use a [Logistic Growth](https://en.wikipedia.org/wiki/Logistic_function) model with a [Multinomial](https://pytorch.org/docs/stable/distributions.html#multinomial) distribution as the likelihood." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "def basic_model(counts):\n", + " T, L = counts.shape\n", + "\n", + " # Define plates over lineage and time\n", + " lineage_plate = pyro.plate(\"lineages\", L, dim=-1)\n", + " time_plate = pyro.plate(\"time\", T, dim=-2)\n", + "\n", + " # Define a growth rate (i.e. slope) and an init (i.e. intercept) for each lineage\n", + " with lineage_plate:\n", + " rate = pyro.sample(\"rate\", dist.Normal(0, 1))\n", + " init = pyro.sample(\"init\", dist.Normal(0, 1))\n", + "\n", + " # We measure time in units of the SARS-CoV-2 generation time of 5.5 days\n", + " time = torch.arange(float(T)) * dataset[\"time_step_days\"] / 5.5\n", + " \n", + " # Assume lineages grow linearly in logit space\n", + " logits = init + rate * time[:, None]\n", + " \n", + " # We use the softmax function (the multivariate generalization of the \n", + " # sigmoid function) to define normalized probabilities from the logits\n", + " probs = torch.softmax(logits, dim=-1)\n", + " assert probs.shape == (T, L)\n", + " \n", + " # Observe counts via a multinomial likelihood.\n", + " with time_plate:\n", + " pyro.sample(\n", + " \"obs\",\n", + " dist.Multinomial(probs=probs.unsqueeze(-2), validate_args=False),\n", + " obs=counts.unsqueeze(-2),\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's look at the graphical structure of our model" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "cluster_lineages\n", + "\n", + "lineages\n", + "\n", + "\n", + "cluster_time\n", + "\n", + "time\n", + "\n", + "\n", + "\n", + "rate\n", + "\n", + "rate\n", + "\n", + "\n", + "\n", + "obs\n", + "\n", + "obs\n", + "\n", + "\n", + "\n", + "rate->obs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "init\n", + "\n", + "init\n", + "\n", + "\n", + "\n", + "init->obs\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pyro.render_model(partial(basic_model, alpha_delta_counts))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Define a helper for fitting models" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "def fit_svi(model, lr=0.1, num_steps=1001, log_every=250):\n", + " pyro.clear_param_store() # clear parameters from previous runs\n", + " pyro.set_rng_seed(20211214)\n", + " if smoke_test:\n", + " num_steps = 2\n", + " \n", + " # Define a mean field guide (i.e. variational distribution)\n", + " guide = AutoNormal(model, init_scale=0.01)\n", + " optim = ClippedAdam({\"lr\": lr, \"lrd\": 0.1 ** (1 / num_steps)})\n", + " svi = SVI(model, guide, optim, Trace_ELBO())\n", + " \n", + " # Train (i.e. do ELBO optimization) for num_steps iterations\n", + " losses = []\n", + " for step in range(num_steps):\n", + " loss = svi.step()\n", + " losses.append(loss)\n", + " if step % log_every == 0:\n", + " print(f\"step {step: >4d} loss = {loss:0.6g}\")\n", + " \n", + " # Plot to assess convergence.\n", + " plt.figure(figsize=(6, 3))\n", + " plt.plot(losses)\n", + " plt.xlabel(\"SVI step\", fontsize=18)\n", + " plt.ylabel(\"ELBO loss\", fontsize=18)\n", + " plt.tight_layout()\n", + "\n", + " return guide" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Let's fit `basic_model` and inspect the results" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "step 0 loss = 103782\n", + "step 250 loss = 3373.05\n", + "step 500 loss = 1299.14\n", + "step 750 loss = 524.81\n", + "step 1000 loss = 304.319\n", + "step 1250 loss = 278.005\n", + "step 1500 loss = 261.731\n", + "CPU times: user 4.69 s, sys: 29.6 ms, total: 4.72 s\n", + "Wall time: 4.73 s\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%time\n", + "# We truncate the data to the period with non-zero counts\n", + "guide = fit_svi(partial(basic_model, alpha_delta_counts[13:]), num_steps=1501)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Let's inspect the posterior means of our latent parameters:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "rate [-0.27021623 0.27021623]\n", + "init [ 8.870546 -8.870401]\n" + ] + } + ], + "source": [ + "for k, v in guide.median().items():\n", + " print(k, v.data.cpu().numpy())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As expected the Delta lineage (corresponding to index `1`) has a differential growth rate advantage with respect to the Alpha lineage (corresponding to index `0`) :" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Multiplicative advantage: 1.72\n" + ] + } + ], + "source": [ + "print(\"Multiplicative advantage: {:.2f}\".format(\n", + " np.exp(guide.median()['rate'][1] - guide.median()['rate'][0])))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This seems like it might be an overestimate. Can we get better estimates by modeling each spatial region individually?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## A regional model \n", + "\n", + "Instead of focusing on northeastern US states we now consider the entire global dataset and do not aggregate across regions." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "counts.shape: torch.Size([27, 202, 2])\n", + "number of regions: 202\n" + ] + } + ], + "source": [ + "# First extract the data we want to use\n", + "alpha_counts = dataset['counts'][:, :, alpha_ids].sum(-1)\n", + "delta_counts = dataset['counts'][:, :, delta_ids].sum(-1)\n", + "counts = torch.stack([alpha_counts, delta_counts], dim=-1)\n", + "print(\"counts.shape: \", counts.shape)\n", + "print(f\"number of regions: {counts.size(1)}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAArEAAAGGCAYAAABsTdmlAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOx9d3wc1b39me2qq96bm9wbtgFTTTUl1FASCIQk8F54kFDye+GRQCANkkdCQoAXUkgIpAAhEEhoIaaDAdvgbtmSLKtZZaVVWZWtc39/nJndlbS7WvWVuefzkWXNTrlzZ3bm3HPP9/tVhBACEhISEhISEhISErMIhplugISEhISEhISEhMRYIUmshISEhISEhITErIMksRISEhISEhISErMOksRKSEhISEhISEjMOkgSKyEhISEhISEhMesgSayEhISEhISEhMSsgySxEhISEhISEhISsw6SxEpISEhISEhISMw6SBIrISEhISEhISEx6yBJrMSnGhUVFVAUBY899thMN2VU/Pa3v4WiKLj++uunZP/XXHMNFEXBNddcM+n7nk39PNugKAoURcGbb7457cduaGiA1WrF/Pnz4fV6x72fN998M3geEp8+PPbYY1AUBRUVFTPdFIlZBkliJaYdd999d/CFpf8YDAakp6ejpKQExx13HG644QY888wzE3oxTkY77777bhw6dGhajtfZ2QmTyYSkpCT09fUN+ayvrw933nknrFYrvv3tb4+6r3379gX7Njk5Gb29vVPV7E8ldMIf/mM0GmG321FWVoYNGzbglltuwSuvvAJVVWekjd3d3cF7uLu7e0qOUVZWhi996Uuora3Fww8/PCXHmGp4PB784x//wI033oi1a9ciIyMDZrMZubm5OOWUU/Dggw9iYGBg1P0IIfDoo4/ixBNPRFZWFpKSklBZWYlbb70VbW1tUbfr6+vDU089hWuvvRYrV65EWloaLBYLCgoKcNZZZ+Gxxx6D3++fzFOWkDhyICQkphl33XWXACAAiPz8/OBPenq6UBQl+BkAkZ2dLX75y19OWVvKy8sFAPH73/9+xGd6G954440pO344HnvsMQFAnHvuuSM++853viMAiBtuuCGufX3jG98Y0o+PPPLIqNt88YtfFADEF7/4xbE2fVTE6ufZCL2vDAbDkHs4NTV1SL8DEKWlpeKZZ56ZsrZEu0/r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e/fuHbFd+H31+uuvB583aWlpwmQyBT8rKioSTU1NI7b/17/+NeQ4ZrM57meexPRAkliJacdYSazL5QpO11199dVDPuvr6xOLFi0SAMSGDRvEm2++KdxutxCCBPD+++8PPrh+/vOfj9j3ZNgJzjvvPPHUU08NsQEMDAwEgxUADCENwxEIBEReXp4AIPbt2zfks3/+85/Bh6d+XrHwgx/8QAAQp512WnCZqqrB83z66aejbhsPibXb7cJqtYpHHnlEDA4OCiGEaGhoEJdcckmwv55//vkR2+vHz8zMFMXFxeLvf/+78Hq9QgghqqqqgkQgNTVVdHd3j9j+pptuEg8//LA4cOCACAQCQgghfD6f+PDDD8VZZ50VfBGNRrSGY7pI7N69e4P9853vfGfIZ4cPHw5e/4svvlhs3bo12DdtbW3izjvvDL5wn3vuuRH7jnafxmsnaGxsFFdeeaV44YUXRGdnZ3C5y+USv//970VRUZEAIG655ZaY5/itb31LABDHHHNM7M6IgHhIbHJysrBareLaa68VDQ0NQghajh566KEgebrzzjvHfOzRsHPnzmDbIgVI6oONWOR9z549wX387W9/G9PxX3jhheC2r7zyypjbr9+rqampwmQyiZ/85Ceip6dHCMFrfPjwYSEECZvBYBAmk0l885vfFHV1dUJVVaGqqqiqqhKXXnqpACDS09NFfX39kGPU1taK5ORkAUAcddRRwSA2VVXFa6+9JsrLy4cM7ocjFondtm1b8Poef/zxYufOnUIIPjdfeOEFUVhYKACIefPmjRjEhN9XmZmZ4vzzzw8+Yz0ej3jqqaeC1++qq64acex58+YJAOLMM88cYscaHBwUu3fvFt/97ncTziL1aYMksRLTjrGSWCGEWLBgQfAhFo7vfe97AoA4+eSTgy/+4Xj22WeDatRw79tUe2KbmpqE1WoViqKMePDreO+99wQAUVlZOeKzO++8UwAQy5YtG/VYqqqKuXPnCgDi8ccfH/LZt7/9bQFAnHXWWVG3j4fEApHV8EAgIE466aSgIjYcej9brdYRRF0IIdrb24OqzR//+MdRzzUcfr9frFixQgCRPYuxMF0kVlVVYbFYBABx5ZVXDvnsy1/+sgAgrrjiiqjb33///QKAWLly5YjPJkpiR8OWLVsEAJGSkhIcuESCPmNiMpliKv6REA+JjXZvCiHErbfeKgBmEZhsnH322QKAyMjIGELyhRiqkj7wwANR99Hd3R1c78EHH4z72F6vN3hvz5s3L+ozLhb0exWA+MUvfhFxnUAgEHzG/upXv4q6r/PPP18AEDfddNOQ5fpMUl5e3og+EoID1XBFczhikVh9kDp//nzR398/4vOPP/44OMgbrlSH31ennHJKcAAcjl/84hcCgEhKShryfmhrawtuqxN9icSD9MRKzApkZWUBwAhPrO7zvPXWW2E2myNue+GFFyI9PR0dHR3Ytm3b1DZ0GIqLi7Fy5UoIIfD+++9HXCdaVgIAOHz4MAAgNzd31GO9+eabOHjwIFJTU3HxxRcP+ezqq68GAPzrX/9CY2PjmM4hHKWlpfjSl740YrnBYMAdd9wBANizZw927doVcftLLrkEixYtGrE8NzcX69evBwDs3LlzTG0yGo0466yzAADvvvvumLadLiiKgszMTABD72G3240///nPAIDbbrst6vb69duxY0fMnKNTgbVr1yIvLw/9/f3Yvn171PVycnIAAH6/Hw6HY0raot9jw6F/d2pqauLK6Rov/vd//zfo9f7xj38cfA7pcLlcwf8nJydH3U/4Z+HbjIabbroJO3fuhKIoeOihh6I+4+JBZmYm/vM//zPiZ2+//Taqq6uRk5ODa6+9Nuo+9Pvw1VdfDS4TQuBvf/sbAGZPGd5HALBw4UJcdtllY25zd3d38Fj//d//HbGPV69eHXze/eUvf4m6r29961swGEZSHv3eGRwcRHV1dXB5WlpacP2WlpYxt11iehDdzS4hkeBobm5GfX09AAY/GI3GqOvqwVX19fU45phjJrUdqqriySefxJNPPont27fD4XBETMXT1NQUcftYJFYnA5FeDMPxu9/9DgBw8cUXIyUlZchnlZWVWL9+PTZv3ozHHnsMd95556j7i4RYQSgnnngiTCYT/H4/tm7diuXLl49YJ1bfFxUVARg5UNHxzjvv4NFHH8UHH3yApqYm9Pf3j1gnUh8/9dRTuOmmmyLuU78vfvKTn+CRRx6JuM6zzz6L4447Lmq7J4Jt27YF75Uzzzwzrm3q6+uRn58/qe3wer343e9+h2effRa7d+9GZ2dnxEIj0e5hYOg96nA4gsFsk4WsrCzMnz8/4mf6vQMAXV1dMQllvHj66adx++23AyB5+4//+I8J73Ms+OlPf4pf/vKX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bkLE/l4Px3PPPTek3WazWWRnZw8pVABA/OAHPxix7V//+tchpVzT0tKCVbyKi4uD19FqtY7YdrRr/OSTTwaLhQCsGqYXRwHiKzsbC5G+Q+HbhvdF+Dmmp6eLt99+O3anSkwppBIrMaNoa2sLpmTy+/0oKCjAsccei+uvvx7PPPMMmpubRx1dFxUV4d1338Vf/vIXnH/++SgsLMTAwAC8Xi8qKipw3nnn4ec//znefvvtMbXtC1/4Ap544gmccMIJSE5ORktLC+rr64cEGJSXl2Pr1q34yle+Eow6ttls+MxnPoNXX301mGdyOF599VW43W4cf/zxo6qI+vk///zzI1IchVsJdOV4NGzcuDE4RT9WNdZisWDTpk245557sHDhQng8Htjtdpx22ml48cUX8f3vf39M+4sHZrMZ//rXv3DXXXehsrISZrMZQggcffTR+OUvf4kXXnghZuT1VEJV1SH3sBACxcXFOOmkk3DzzTfjlVdeQV1d3RAvdyQsXrwYO3fuxK9+9SuceeaZyMnJQW9vL4QQmD9/Pi699FL8+te/HvOU7Le+9S088MADWLt2LcxmM5qamlBfXz8kEG7NmjX46KOPcNlllyEnJweqqiItLQ2XXXYZ3n///ahT4OHQZwMuuuiiWRfUpStsAFP16dcz0k80O4fVasXLL7+M3/zmNzjhhBOQkpICn8+HBQsW4JZbbsGePXuwZs2aiNuKML9yrGO3tbWhp6dnck9+GC688ELU1NTgrrvuwtFHH43U1FR0d3fDarVi5cqVuPbaa/Hcc89FVJQvueQSbN26FZdeeilyc3Ph8XiQn5+Pm266CZ988knwmTMev/Tll1+OPXv24D//8z8xb948eDwemEwmrFq1Ct/97nexe/duLF68eKKnPwTr1q3D008/jeuvvx5r1qwJfidtNhtWrVqFb37zm9i3b9+YZ/gkJheKEDGiViQkJKYEV199NZ544gn89Kc/xa233jrq+qeeeireeOMN/OEPf4iaB3YqsWHDBrz11lu46667cPfdd0/78SUSF0IILFiwALW1tXjrrbdmpSdWYurx7W9/G/fccw9OPfXUmEFaEhJjgVRiJSSmGYFAIJhyaTSFTscPf/hDACyDKcedEomEp59+GrW1tdi4caMksBIR4XA48Nvf/hYAJlx5TEIiHJLESkhMMzo7O/G1r30NP/nJTzB37ty4tlm/fj0uueQS7NmzB3/961+nuIUSEvFBVVV873vfg8FgwH333TfTzZGYQfziF7/Aj370I9TU1ASDCD0eD1566SWcdNJJaG9vR25uLr785S/PcEsljiTIsrMSEtOMvLy8cU3J33fffVi6dOmklNWUkJgMHD58GJdeeinmzJkzqWnVJGYfDh48iAceeAC33347jEYj7HY7ent7g4TWbrfj6aefTqhMIhKzH5LESkjMElRUVEg/qkRCoaSkRN6TEgCAL37xizAajXj77bfR3NyMzs5OJCUlYc6cOdi4cSNuuummYMo3CYnJggzskpCQkJCQkJCQmHWQnlgJCQkJCQkJCYlZB2kniAJVVXH48GGkpaUFyzJKSEhISEhISEhMLYQQcLlcKCoqilnWV5LYKDh8+DBKS0tnuhkSEhISEhISEp9KNDY2oqSkJOrnksRGQVpaGgB2YHp6+gy3RkJCQkJCQkLi04He3l6UlpYGuVg0SBIbBbqFID09XZJYCQkJCQkJCYlpxmh2ThnYJSEhISEhISEhMesgSayEhISEhISEhMSsgySxEhISEhISEhISsw6SxEpISEhISEhISMw6SBIrISEhISEhISEx6zArSOzbb7+N8847D0VFRVAUBX//+99H3ebNN9/EUUcdBavVivnz5+Oxxx6b8nZKSEhISEhISEhMD2YFie3v78fKlSvx8MMPx7V+XV0dzj33XJxyyinYvn07br75Zlx77bV49dVXp7ilEhISEhISEhIS04FZkSf27LPPxtlnnx33+o888gjmzJmDn/70pwCAxYsX491338XPfvYzbNy4caqaKSEhISEhISEhMU2YFSR2rNi8eTNOP/30Ics2btyIm2++Oeo2Ho8HHo8n+Hdvby//49gPuFOnoplTh84awGAEFp4z0y2RkJAYDlUFBruAw9uBpo9mujVjhxBAy26g+yBgLwOMCfoaEQIQqvYjADUAiADQtA3wDwIwAsFE6or2E/oFIbS/IyRbj5h/XcRoCwBl2OeqCB0D4b8Dsc5KQmLs+K8PZroFY4erL67VEvTpMzG0trYiPz9/yLL8/Hz09vZicHAQSUlJI7a599578d3vfnfkznY/C8y2il11bwODTsBgBuacBJisM90iCYlPF/weYLAbcHcDrlag6xDQ0wS4DgN9DsDbDwx0Ac7qGW5onBDaP0Jo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505s2LABdXV1/gtuHITauViwYAH27t2LhQsXDnv9kUceAQBcdNFF/ghrwgil+z0mJgaNjY3D9uWss87Cv//9b2zevBk1NTV+jM57BPN97gmhcr9oCJX9ycvLQ1FREebOnTv0msFgwNatW3HFFVdg8+bNfoxu4giV8zIRSE3sCJxzzjn4y1/+Mur1qKgobN++fUwj4UBDQUHBMN2lhquvvhpPPvkkvve97/khqsnj1FNPxcsvvzzq9UWLFmHHjh148803/RCVdwi1c3HppZfi+eefd7vskUcewTXXXBMUWrJQut/XrFnj9h4444wz8Prrr+Phhx+e+aAmgWC+zz0hVO4XDaGyP+eddx7+/Oc/j3pdI7IFBQUzH9QUECrnZULwbyI48NDW1iYOHTrkcXlXV5d47733ZjCiyePll18WP/jBDzwu37JlizjzzDNnMKKpobCwUDz99NMelx88eFD893//9wxG5D1C7VyECkLpfn/vvffEL3/5S4/Ld+7cKW644YYZjGhyCOb7XCK4YLVaRWdn55jLKysrZzAiiYlCNjuQkJCYMgYGBgBQNiEhITE2Qu1+CbX9CRV8Ec6L1MS6QUtLC55++mns3r17WNvZk08+GTfccAOSk5P9HOHEYLPZcPjw4WH7smjRIhiNRj9HNjl89tlno87N+vXrsWbNGj9HNj5C6Vy8/fbb+P3vf4/du3ejq6sLAHWZ69evx+23346NGzf6OULvEGr3e0NDAz799NNh+7J27VqkpaX5ObKJIZjvc3cIlftFQ6jsz5EjR/DII4+4vdZuvfVWLFq0yM8RTgyhcl68hczEjsCePXuwadMmREREYOPGjUhNTQUANDY2YseOHejr68P27ds99icPJDgcDtx333149NFH0dnZOWxZbGwsbr31VjzwwAPQ6YJDGt3U1ITLLrsMH3/8MbKzs4edm6qqKpxyyin45z//iZSUFD9HOhqhdi6eeeYZfPOb38Tll1+OTZs2DTsXb731Fl566SU89dRTuPbaa/0c6dgIpfu9t7cX3/72t/HCCy9AURQkJCQAANra2iCEwDXXXIM//elPiIiI8HOkYyOY73NPCJX7RUOo7M+bb76JSy65BCtXrhy1H2+//Tb27duHf/3rX9i0aZOfI/UOoXJeJgS/ihkCEGvXrhU33XSTcDgco5Y5HA5x0003iXXr1vkhsonj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CPHHP/4xaC6C8PDwUTdoV1eXWL9+vdiwYYMoLy8Pmn0RQojo6Ghx5MiRUa9/97vfFZmZmeKDDz4I2P0JtXORlZUlPvjgg1GvHz58WKSmporrrrsuKPYnlO73yMhIcfz48WGvWa1Wcckll4hly5aJoqKioNiXYL7PPSFU7hcNobI/6enpYvfu3aNef++990RUVJT48Y9/HBT7oSFUzstEIAu7RqCgoADvvvvuqNevvvpqPPnkk/je977nh6gmh+zs7FFC9ejoaLz11lvo7+/HpZde6qfIJocFCxZg7969o15/5JFHcPHFF+Oiiy7yQ1TeIdTOxamnnoqXX3551OuLFi3Cjh078Oabb/ohqokjlO73vLw8FBUVDXvNYDBg69atyMvLw+bNm/0U2cQQzPe5J4TK/aIhVPZnzZo1bmM944wz8Prrr+Phhx+e+aCmgFA5LxOBJLEjcMstt6C2ttbtsmuuuQZ//etfcfrpp89wVJPDOeecg7/85S+jXo+KisL27dthNpv9ENXkcemll+L55593u+yRRx7BNddcAxGgjnGhdi7uvvtuLFu2zO2yxYsXY+fOnbjvvvtmOKqJI5Tu9/POOw9//vOfR72uEdmCgoKZD2oSCOb73BNC5X7RECr788Mf/tDjd++ZZ56J119/Hdddd90MRzV5hMp5mQikT2wIo729HXV1dVi8eLHb5d3d3di/fz/OOOOMGY7siwd5LiSmGzabDX19fR6bAdhsNtTW1gZVL3gJCQmJsSBJrISEhISEhISERNBBygkkJCQkJCQkJCSCDpLESkhISEhISEhIBB0kiZWQkJgUhBCoqqqCxWLxdygSEhISEl9ASBIrITFDsNlsePbZZ9HY2OjvUHwCIQTy8/NRXV3t71CmDHc2WxISEt6hqakJH374IT788EM0NTX5O5wJ4+tf/zq6u7tHvd7b24uvf/3rfohoavj5z3+OiooKf4cxI5CFXR7w5S9/GWvWrMFdd9017PVf//rX2LNnD7Zu3eqnyCYHh8OB0tJSNDU1weFwDFsWLBZCriguLsb//d//DXmvLly4ELfddhvmz5/v58jGRkREBI4ePRoyFeKLFy/GU089hXXr1vk7lCnBZDIhMzMTN954I66//npkZWX5O6QpoaOjA5999pnb+z2QLYNee+01r98bjH6xK1asgKIoo15XFAVmsxn5+fm4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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# We skip the first year or so of the pandemic when Alpha and Delta are not present\n", + "start_time = 13\n", + "total_counts = (alpha_counts + delta_counts)[start_time:]\n", + "dates = date_range[start_time:]\n", + "plt.figure(figsize=(7, 4))\n", + "plt.plot(dates, delta_counts[start_time:] / total_counts, color=\"C1\", lw=1, alpha=0.5)\n", + "plt.xlim(min(dates), max(dates))\n", + "plt.ylabel(\"Proportion\", fontsize=18)\n", + "plt.xticks(rotation=90)\n", + "plt.gca().xaxis.set_major_locator(mpl.dates.MonthLocator())\n", + "plt.gca().xaxis.set_major_formatter(mpl.dates.DateFormatter(\"%b %Y\"))\n", + "plt.title(f\"Delta/(Alpha+Delta) in {counts.size(1)} regions\", fontsize=18)\n", + "plt.tight_layout()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "# Model lineage proportions in each region as multivariate logistic growth\n", + "def regional_model(counts):\n", + " T, R, L = counts.shape\n", + " \n", + " # Now we also define a region plate in addition to the time/lineage plates\n", + " lineage_plate = pyro.plate(\"lineages\", L, dim=-1)\n", + " region_plate = pyro.plate(\"region\", R, dim=-2)\n", + " time_plate = pyro.plate(\"time\", T, dim=-3)\n", + "\n", + " # We use the same growth rate (i.e. slope) for each region\n", + " with lineage_plate:\n", + " rate = pyro.sample(\"rate\", dist.Normal(0, 1))\n", + " \n", + " # We allow the init to vary from region to region\n", + " init_scale = pyro.sample(\"init_scale\", dist.LogNormal(0, 2))\n", + " with region_plate, lineage_plate:\n", + " init = pyro.sample(\"init\", dist.Normal(0, init_scale))\n", + "\n", + " # We measure time in units of the SARS-CoV-2 generation time of 5.5 days\n", + " time = torch.arange(float(T)) * dataset[\"time_step_days\"] / 5.5\n", + "\n", + " # Instead of using the softmax function we directly use the \n", + " # logits parameterization of the Multinomial distribution\n", + " logits = init + rate * time[:, None, None]\n", + " \n", + " # Observe sequences via a multinomial likelihood.\n", + " with time_plate, region_plate:\n", + " pyro.sample(\n", + " \"obs\",\n", + " dist.Multinomial(logits=logits.unsqueeze(-2), validate_args=False),\n", + " obs=counts.unsqueeze(-2),\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "cluster_lineages\n", + "\n", + "lineages\n", + "\n", + "\n", + "cluster_region\n", + "\n", + "region\n", + "\n", + "\n", + "cluster_time\n", + "\n", + "time\n", + "\n", + "\n", + "cluster_region__CLONE\n", + "\n", + "region\n", + "\n", + "\n", + "\n", + "init_scale\n", + "\n", + "init_scale\n", + "\n", + "\n", + "\n", + "init\n", + "\n", + "init\n", + "\n", + "\n", + "\n", + "init_scale->init\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "rate\n", + "\n", + "rate\n", + "\n", + "\n", + "\n", + "obs\n", + "\n", + "obs\n", + "\n", + "\n", + "\n", + "rate->obs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "init->obs\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pyro.render_model(partial(regional_model, counts))" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "step 0 loss = 909278\n", + "step 250 loss = 509502\n", + "step 500 loss = 630927\n", + "step 750 loss = 501493\n", + "step 1000 loss = 1.04533e+06\n", + "step 1250 loss = 1.98151e+06\n", + "step 1500 loss = 328504\n", + "step 1750 loss = 279016\n", + "step 2000 loss = 310281\n", + "step 2250 loss = 217622\n", + "step 2500 loss = 204381\n", + "step 2750 loss = 176877\n", + "step 3000 loss = 152123\n", + "CPU times: user 17.3 s, sys: 965 ms, total: 18.3 s\n", + "Wall time: 17.3 s\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%time\n", + "guide = fit_svi(partial(regional_model, counts), num_steps=3001)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Multiplicative advantage: 1.17\n" + ] + } + ], + "source": [ + "print(\"Multiplicative advantage: {:.2f}\".format(\n", + " np.exp(guide.median()['rate'][1] - guide.median()['rate'][0])))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice this is a lower estimate than the previous global estimate." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## An alternative regional model \n", + "\n", + "The regional model we defined above assumed that the `rate` for each lineage did not vary between regions. Here we add additional hierarchical structure and allow the rate to vary from region to region." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "def regional_model2(counts):\n", + " T, R, L = counts.shape\n", + " \n", + " lineage_plate = pyro.plate(\"lineages\", L, dim=-1)\n", + " region_plate = pyro.plate(\"region\", R, dim=-2)\n", + " time_plate = pyro.plate(\"time\", T, dim=-3)\n", + "\n", + " # We assume the init can vary a lot from region to region but\n", + " # that the rate varies considerably less.\n", + " rate_scale = pyro.sample(\"rate_scale\", dist.LogNormal(-4, 2))\n", + " init_scale = pyro.sample(\"init_scale\", dist.LogNormal(0, 2))\n", + " \n", + " # As before each lineage has a latent growth rate\n", + " with lineage_plate:\n", + " rate_loc = pyro.sample(\"rate_loc\", dist.Normal(0, 1))\n", + " \n", + " # We allow the rate and init to vary from region to region\n", + " with region_plate, lineage_plate:\n", + " # The per-region per-lineage rate is governed by a hierarchical prior\n", + " rate = pyro.sample(\"rate\", dist.Normal(rate_loc, rate_scale))\n", + " init = pyro.sample(\"init\", dist.Normal(0, init_scale))\n", + "\n", + " # We measure time in units of the SARS-CoV-2 generation time of 5.5 days\n", + " time = torch.arange(float(T)) * dataset[\"time_step_days\"] / 5.5\n", + " logits = init + rate * time[:, None, None]\n", + " \n", + " # Observe sequences via a multinomial likelihood.\n", + " with time_plate, region_plate:\n", + " pyro.sample(\n", + " \"obs\",\n", + " dist.Multinomial(logits=logits.unsqueeze(-2), validate_args=False),\n", + " obs=counts.unsqueeze(-2),\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "cluster_lineages\n", + "\n", + "lineages\n", + "\n", + "\n", + "cluster_region\n", + "\n", + "region\n", + "\n", + "\n", + "cluster_time\n", + "\n", + "time\n", + "\n", + "\n", + "cluster_region__CLONE\n", + "\n", + "region\n", + "\n", + "\n", + "\n", + "rate_scale\n", + "\n", + "rate_scale\n", + "\n", + "\n", + "\n", + "rate\n", + "\n", + "rate\n", + "\n", + "\n", + "\n", + "rate_scale->rate\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "init_scale\n", + "\n", + "init_scale\n", + "\n", + "\n", + "\n", + "init\n", + "\n", + "init\n", + "\n", + "\n", + "\n", + "init_scale->init\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "rate_loc\n", + "\n", + "rate_loc\n", + "\n", + "\n", + "\n", + "rate_loc->rate\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "obs\n", + "\n", + "obs\n", + "\n", + "\n", + "\n", + "rate->obs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "init->obs\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pyro.render_model(partial(regional_model2, counts))" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "step 0 loss = 2.14938e+06\n", + "step 250 loss = 1.44698e+06\n", + "step 500 loss = 1.24936e+06\n", + "step 750 loss = 701128\n", + "step 1000 loss = 602609\n", + "step 1250 loss = 530833\n", + "step 1500 loss = 454014\n", + "step 1750 loss = 450981\n", + "step 2000 loss = 384790\n", + "step 2250 loss = 340659\n", + "step 2500 loss = 305373\n", + "step 2750 loss = 279524\n", + "step 3000 loss = 262679\n", + "CPU times: user 25 s, sys: 1.05 s, total: 26 s\n", + "Wall time: 25.1 s\n" + ] + }, + { + "data": { + "image/png": "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s7ORnp6OgIAA9OrVC0uXLkVBQQE++eQTAMDKlSsRGRmJIUOGQKfTYe3atdi/fz++/fZbB6+WiIiIujqHb89t2rQJGzZsaDCJ5aVLlzB//nzU1NRACAEhBCorK/HAAw/gwoULDp3r+PHjiImJQUxMDIDaJ/diYmLwyiuvAAAKCwuRm5trLW8wGLB48WJERUVh0qRJOHHiBPbu3YupU6c6eLVti/M0ERERuR6He5rq3iN3xx132Kz/6KOPUFNTg2HDhuGrr76Cu7s7HnzwQRw6dAjvvvsu3nnnnRafa/LkyTYzj/9W3fxQdZYsWYIlS5a0+DxERERETXG4p6mwsBCSJKF3794267/55htIkoTXX38d/fr1Q3h4ON555x0IIbB///5WV/h6wI4mIiIi1+NwaCorK4O/vz8Uil87q2pqapCeng6VSoVbb73Vun7YsGFQKpXIyclpVWWJiIiInMXh0KRQKBpMAHns2DGYzWaMGjUKSqXSZpu3tzdMJpOjpyMiIiJyKodDU58+fWA2m3Hs2DHruh07dkCSJNx00002Zc1mMzQaTad5YS4RERFRSzkcmqZNmwYhBJ566ikcPXoU27dvx0cffQQAmDVrlk3ZU6dOwWw2o2fPnq2r7fWCj88RERG5HIefnnvuueewYcMGpKamYvz48QAAIQRuueUW6+916gaHx8bGtq62RERERE7icE9TeHg4Dhw4gClTpsDd3R0hISFYsGABvvrqK5tyQggkJSV16At7iYiIiNpaq16jEh0djb17916zjMViwb59+wDUBi0iIiIiV9Ru756rI5fLG8zl1NVxRBMREZHradPQZDabcfnyZQBAQEAA5HJ5Wx6eiIiIyGkcHtNUp7q6GitWrMDo0aPh6emJkJAQhISEwNPTE2PGjMHKlStRXV3dFnUlIiIicppW9TRlZmZi1qxZuHDhQoN3wxmNRhw/fhypqan44IMP8J///Ac33HBDqypLRERE5CwOh6aKigrceuutyMvLg0KhwOzZszFt2jTrXEz5+fnYu3cvvvrqK5w/fx7x8fE4deoUvL2926zyrorTNBEREbkeh0PTypUrkZeXh7CwMOzcuRPDhw9vUGb+/Pk4ceIEZs6cidzcXLzzzjv405/+1Jr6EhERETmFw2Oatm/fDkmS8OGHHzYamOpER0fjo48+ghACW7dudfR0RERERE7lcGjKysqCSqXCzJkzmy07Y8YMuLu7Iysry9HTXVd4d46IiMj1OByajEYjlEqlXWUlSYJSqYTRaHT0dERERERO5XBo6tmzJyoqKnDmzJlmy2ZkZECr1fKFvUREROSyHA5NU6dOhRACTzzxBHQ6XZPldDodnnzySUiShLi4OEdPR0RERORUDoem559/HiqVCocPH0Z0dDQ+/vhj5OTkwGg0wmg0Ijs7G2vXrkV0dDQOHz4MpVKJ5557ri3r7rIkzjlARETkchyecqBv377YsGEDHnroIZw/fx6PPfZYo+WEEHBzc8OGDRvQt29fhytKRERE5Eyteo3Kfffdh5SUFMTHxwOoDUj1F0mSMGPGDPzwww+477772qTCRERERM7Q6hf2jhgxArt27YJGo8FPP/2E4uJiAEBQUBBGjBgBPz+/VleSiIiIyNlaHZrq+Pn5YcqUKW11uOsaRzQRERG5nlbdniMiIiLqKhianIAPzxEREbkeu27PtdVTb5Ik4cKFC21yLCIiIqKOZFdoysnJaZOTcX4iIiIiclV2haakpKT2rgcRERFRp2ZXaEpISGjvenQpEp+fIyIicjkcCE5ERERkB4YmIiIiIjswNBERERHZgaHJGTikiYiIyOUwNBERERHZgaGJiIiIyA4MTURERER2cInQdOjQIcyaNQthYWGQJAnbt29vdp/k5GSMGDECKpUK/fv3x/r169u9nvbikCYiIiLX4xKhqaqqCtHR0Vi1apVd5bOzszFz5kxMmTIF6enpeOaZZ/Doo4/if//7XzvXlIiIiK5Xds0I7mwzZszAjBkz7C6/Zs0aREZG4q233gIA3HjjjTh8+DDefvttxMfHt1c1iYiI6DrmcGgymUzYvn07Dhw4gIyMDJSVlQEAunfvjiFDhuCWW27BXXfdBYWi43NZSkoK4uLibNbFx8fjmWee6fC6EBER0fXBoUSzceNGLF26FAUFBdZ1QggAgCRJOHz4MD788EOEhYUhMTERDz74YNvU1k5qtRrBwcE264KDg6HValFTUwMPD48G++j1euj1euvvWq223eoncVATERGRy2nxmKZnnnkG8+bNQ35+vjUo9e3bF2PHjsXYsWPRt29fALUhqqCgAAkJCfjjH//YtrVuB4mJifDz87MuERERHXLehHU/IvXilQ45FxERETmuRaHprbfewrvvvgshBG688UZs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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%time\n", + "guide = fit_svi(partial(regional_model2, counts), num_steps=3001)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Multiplicative advantage: 1.14\n" + ] + } + ], + "source": [ + "print(\"Multiplicative advantage: {:.2f}\".format(\n", + " (guide.median()['rate_loc'][1] - guide.median()['rate_loc'][0]).exp()))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Generalizations \n", + "\n", + "So far we've seen how to model two variants at a time either globally or split across multiple regions, and how to use [pyro.plate](https://docs.pyro.ai/en/stable/primitives.html#pyro.primitives.plate) to model multiple variants or regions or times.\n", + "\n", + "What other models can you think of that might make epidemiological sense? Here are some ideas:\n", + "\n", + "- Can you create a model over more than two variants, or even over all PANGO lineages?\n", + "- What variables should be shared across lineages, across regions, or over time?\n", + "- How might you deal with changes of behavior over time, e.g. pandemic waves or vaccination?\n", + "\n", + "For an example of a larger Pyro model using SARS-CoV-2 lineage data like this, see our paper \"Analysis of 2.1 million SARS-CoV-2 genomes identifies mutations associated with transmissibility\" ([preprint](https://www.medrxiv.org/content/10.1101/2021.09.07.21263228v1) | [code](https://github.com/broadinstitute/pyro-cov)), and also the [Bayesian workflow tutuorial](workflow.html) using a slightly smaller dataset." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/pyro/source/tutorial/source/mcmc.rst b/pyro/source/tutorial/source/mcmc.rst new file mode 100644 index 0000000000000000000000000000000000000000..d9f7898740b59e0002ad24dc7aed60bc204d56f0 --- /dev/null +++ b/pyro/source/tutorial/source/mcmc.rst @@ -0,0 +1,11 @@ +Example: Inference with Markov Chain Monte Carlo +================================================ + +`View hmm.py on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/examples/eight_schools/mcmc.py + +__ github_ + +.. literalinclude:: ../../examples/eight_schools/mcmc.py + :language: python diff --git a/pyro/source/tutorial/source/minipyro.rst b/pyro/source/tutorial/source/minipyro.rst new file mode 100644 index 0000000000000000000000000000000000000000..096de53108094c8d51bb0db229a4c176064b4140 --- /dev/null +++ b/pyro/source/tutorial/source/minipyro.rst @@ -0,0 +1,23 @@ +Mini-Pyro +========= + +`View pyro/contrib/minipyro.py on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/pyro/contrib/minipyro.py + +__ github_ + +.. literalinclude:: ../../pyro/contrib/minipyro.py + :language: python + +Example use of mini-Pyro +------------------------ + +`View examples/minipyro.py on github`__ + +.. _example: https://github.com/pyro-ppl/pyro/blob/dev/examples/minipyro.py + +__ example_ + +.. literalinclude:: ../../examples/minipyro.py + :language: python diff --git a/pyro/source/tutorial/source/mixed_hmm.rst b/pyro/source/tutorial/source/mixed_hmm.rst new file mode 100644 index 0000000000000000000000000000000000000000..b9a656e6d1d612447a3c0862352738e50bb74505 --- /dev/null +++ b/pyro/source/tutorial/source/mixed_hmm.rst @@ -0,0 +1,11 @@ +Example: hierarchical mixed-effect hidden Markov models +======================================================= + +`View the full example code on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/examples/mixed_hmm/ + +__ github_ + +.. literalinclude:: ../../examples/mixed_hmm/model.py + :language: python diff --git a/pyro/source/tutorial/source/mle_map.ipynb b/pyro/source/tutorial/source/mle_map.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..b8d8315a0240bd3d347e9cdb50ec1eaee5a34c4a --- /dev/null +++ b/pyro/source/tutorial/source/mle_map.ipynb @@ -0,0 +1,649 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# MLE and MAP Estimation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this short tutorial we review how to do Maximum Likelihood (MLE) and Maximum a Posteriori (MAP) estimation in Pyro." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "from torch.distributions import constraints\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "from pyro.infer import SVI, Trace_ELBO\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We consider the simple \"fair coin\" example covered in a [previous tutorial](http://pyro.ai/examples/svi_part_i.html#A-simple-example)." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "data = torch.zeros(10)\n", + "data[0:6] = 1.0\n", + "\n", + "def original_model(data):\n", + " f = pyro.sample(\"latent_fairness\", dist.Beta(10.0, 10.0))\n", + " with pyro.plate(\"data\", data.size(0)):\n", + " pyro.sample(\"obs\", dist.Bernoulli(f), obs=data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To facilitate comparison between different inference techniques, we construct a training helper:" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "def train(model, guide, lr=0.005, n_steps=201):\n", + " pyro.clear_param_store()\n", + " adam_params = {\"lr\": lr}\n", + " adam = pyro.optim.Adam(adam_params)\n", + " svi = SVI(model, guide, adam, loss=Trace_ELBO())\n", + "\n", + " for step in range(n_steps):\n", + " loss = svi.step(data)\n", + " if step % 50 == 0:\n", + " print('[iter {}] loss: {:.4f}'.format(step, loss))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## MLE" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our model has a single latent variable `latent_fairness`. To do Maximum Likelihood Estimation we simply \"demote\" our latent variable `latent_fairness` to a Pyro parameter." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "def model_mle(data):\n", + " # note that we need to include the interval constraint; \n", + " # in original_model() this constraint appears implicitly in \n", + " # the support of the Beta distribution.\n", + " f = pyro.param(\"latent_fairness\", torch.tensor(0.5), \n", + " constraint=constraints.unit_interval)\n", + " with pyro.plate(\"data\", data.size(0)):\n", + " pyro.sample(\"obs\", dist.Bernoulli(f), obs=data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can render our model as shown below." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "cluster_data\n", + "\n", + "data\n", + "\n", + "\n", + "\n", + "latent_fairness\n", + "\n", + "latent_fairness\n", + "\n", + "\n", + "\n", + "obs\n", + "\n", + "obs\n", + "\n", + "\n", + "\n", + "latent_fairness->obs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "distribution_description_node\n", + "obs ~ Bernoulli\n", + "latent_fairness ∈ Interval(lower_bound=0.0, upper_bound=1.0)\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pyro.render_model(model_mle, model_args=(data,), render_distributions=True, render_params=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since we no longer have any latent variables, our guide can be empty:" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "def guide_mle(data):\n", + " pass" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's see what result we get." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[iter 0] loss: 6.9315\n", + "[iter 50] loss: 6.7693\n", + "[iter 100] loss: 6.7333\n", + "[iter 150] loss: 6.7302\n", + "[iter 200] loss: 6.7301\n" + ] + } + ], + "source": [ + "train(model_mle, guide_mle)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Our MLE estimate of the latent fairness is 0.600\n" + ] + } + ], + "source": [ + "mle_estimate = pyro.param(\"latent_fairness\").item()\n", + "print(\"Our MLE estimate of the latent fairness is {:.3f}\".format(mle_estimate))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also compare our MLE estimate with the analytical MLE estimate which is given as: $\\frac{\\#Heads}{\\#Heads + \\#Tails}$. As we encode `Heads` as 1 and `Tails` as 0, we can directly find the analytical MLE as `data.sum()/data.size(0)` or `data.mean()`." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The analytical MLE estimate of the latent fairness is 0.600\n" + ] + } + ], + "source": [ + "print(\"The analytical MLE estimate of the latent fairness is {:.3f}\".format(\n", + " data.mean()))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Thus with MLE we get a point estimate of `latent_fairness` which matches the analytical MLE estimate." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You may be wondering how to interpret the loss numbers in our experiment above. The loss is equivalent to the negative log likelihood (NLL) of observing the data under the Bernoulli likelihood. Thus, the above procedure was equivalent to minimizing the NLL. We confirm the same below." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The negative log likelihood given latent fairness = 0.600 is 6.7301 which matches the loss obtained via our training procedure.\n" + ] + } + ], + "source": [ + "nll = -dist.Bernoulli(mle_estimate).log_prob(data).sum()\n", + "print(f\"The negative log likelihood given latent fairness = {mle_estimate:0.3f} is {nll:0.4f} which matches the loss obtained via our training procedure.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## MAP" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With Maximum a Posteriori estimation, we also get a point estimate of our latent variables. The difference to MLE is that these estimates will be regularized by the prior. We can understand the difference between the model we use for MLE and MAP via the rendering below, where we can see `latent_fairness` is a `pyro.sample` in original model." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "cluster_data\n", + "\n", + "data\n", + "\n", + "\n", + "\n", + "latent_fairness\n", + "\n", + "latent_fairness\n", + "\n", + "\n", + "\n", + "obs\n", + "\n", + "obs\n", + "\n", + "\n", + "\n", + "latent_fairness->obs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "distribution_description_node\n", + "latent_fairness ~ Beta\n", + "obs ~ Bernoulli\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pyro.render_model(original_model, model_args=(data,), render_distributions=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To do MAP in Pyro we use a [Delta distribution](http://docs.pyro.ai/en/stable/distributions.html#pyro.distributions.Delta) for the guide. Recall that the `Delta` distribution puts all its probability mass at a single value. The `Delta` distribution will be parameterized by a learnable parameter. " + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "def guide_map(data):\n", + " f_map = pyro.param(\"f_map\", torch.tensor(0.5),\n", + " constraint=constraints.unit_interval)\n", + " pyro.sample(\"latent_fairness\", dist.Delta(f_map))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's see how this result differs from MLE." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[iter 0] loss: 5.6719\n", + "[iter 50] loss: 5.6007\n", + "[iter 100] loss: 5.6004\n", + "[iter 150] loss: 5.6004\n", + "[iter 200] loss: 5.6004\n" + ] + } + ], + "source": [ + "train(original_model, guide_map)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Our MAP estimate of the latent fairness is 0.536\n" + ] + } + ], + "source": [ + "map_estimate = pyro.param(\"f_map\").item()\n", + "print(\"Our MAP estimate of the latent fairness is {:.3f}\".format(map_estimate))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To understand what's going on note that the prior mean of the `latent_fairness` in our model is 0.5, since that is the mean of `Beta(10.0, 10.0)`. The MLE estimate (which ignores the prior) gives us a result that is entirely determined by the raw counts (6 heads and 4 tails). In contrast the MAP estimate is regularized towards the prior mean, which is why the MAP estimate is somewhere between 0.5 and 0.6. We can also understand these from the plot below. Infact, we can also analytically calculate the MAP estimate given the `Beta` prior and `Bernoulli` likelihood.\n", + "\n", + "Our `Beta` prior is parameterised by $\\alpha_{Heads}$ (= 10 in our example) and $\\alpha_{Tails}$ (= 10 in our example). The closed form expression for MAP estimate is:\n", + "$\\frac{\\alpha_{Heads} + ~\\#Heads}{\\alpha_{Heads} + ~\\#Heads +~ \\alpha_{Tails} + ~\\#Tails}$ = $\\frac{10 + 6}{10 + 6 + 10 + 4}$ = $\\frac{16}{30} = 0.5\\bar{3}$" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "x = torch.linspace(0.0, 1.0, 100)\n", + "plt.plot(x, dist.Beta(10, 10).log_prob(x).exp(), label='Prior~Beta(10, 10)')\n", + "plt.xlabel(\"Latent Fairness\")\n", + "plt.axvline(mle_estimate, color='k', linestyle='--', label='MLE')\n", + "plt.axvline(map_estimate, color='r', linestyle='-.', label='MAP')\n", + "plt.axvline(0.5, color='g', linestyle=':', label='Prior Mean')\n", + "plt.legend(bbox_to_anchor=(1.44,1), borderaxespad=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Doing the same thing with AutoGuides\n", + "\n", + "In the above we defined guides by hand. \n", + "It's often much easier to rely on Pyro's [AutoGuide machinery](https://docs.pyro.ai/en/stable/infer.autoguide.html?highlight=autoguide). \n", + "Let's see how we can do MLE and MAP inference using AutoGuides.\n", + "\n", + "To do MLE estimation we first use [`mask(False)`](https://docs.pyro.ai/en/stable/poutine.html?highlight=mask#pyro.poutine.handlers.mask) to instruct Pyro to ignore the `log_prob` of the latent variable `latent_fairness` in the model. \n", + "(Note we need to do this for every latent variable.)\n", + "This way the only non-zero `log_prob` in the model will be from the Bernoulli likelihood and ELBO maximization will be equivalent to likelihood maximization." + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "def masked_model(data):\n", + " f = pyro.sample(\"latent_fairness\", \n", + " dist.Beta(10.0, 10.0).mask(False))\n", + " with pyro.plate(\"data\", data.size(0)):\n", + " pyro.sample(\"obs\", dist.Bernoulli(f), obs=data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we define an [`AutoDelta`](https://docs.pyro.ai/en/stable/infer.autoguide.html?highlight=autodelta#autodelta) guide, which learns a point estimate for each latent variable (i.e. we do not learn any uncertainty):" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[iter 0] loss: 7.0436\n", + "[iter 50] loss: 6.8213\n", + "[iter 100] loss: 6.7467\n", + "[iter 150] loss: 6.7319\n", + "[iter 200] loss: 6.7302\n", + "Our MLE estimate of the latent fairness is 0.598\n" + ] + } + ], + "source": [ + "autoguide_mle = pyro.infer.autoguide.AutoDelta(masked_model)\n", + "train(masked_model, autoguide_mle)\n", + "print(\"Our MLE estimate of the latent fairness is {:.3f}\".format(\n", + " autoguide_mle.median(data)[\"latent_fairness\"].item()))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To do MAP inference we again use an `AutoDelta` guide but this time on the original model in which `latent_fairness` is a latent variable:" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[iter 0] loss: 5.6889\n", + "[iter 50] loss: 5.6005\n", + "[iter 100] loss: 5.6004\n", + "[iter 150] loss: 5.6004\n", + "[iter 200] loss: 5.6004\n", + "Our MAP estimate of the latent fairness is 0.536\n" + ] + } + ], + "source": [ + "autoguide_map = pyro.infer.autoguide.AutoDelta(original_model)\n", + "train(original_model, autoguide_map)\n", + "print(\"Our MAP estimate of the latent fairness is {:.3f}\".format(\n", + " autoguide_map.median(data)[\"latent_fairness\"].item()))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also quickly verify that had we chosen a uniform prior in our original model, our MAP estimate would be the same as the MLE estimate." + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [], + "source": [ + "def original_model_uniform_prior(data):\n", + " f = pyro.sample(\"latent_fairness\", dist.Uniform(low=0.0, high=1.0))\n", + " with pyro.plate(\"data\", data.size(0)):\n", + " pyro.sample(\"obs\", dist.Bernoulli(f), obs=data)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[iter 0] loss: 6.7490\n", + "[iter 50] loss: 6.7302\n", + "[iter 100] loss: 6.7301\n", + "[iter 150] loss: 6.7301\n", + "[iter 200] loss: 6.7301\n", + "Our MAP estimate of the latent fairness under the Uniform prior is 0.600 matching the MLE estimate\n" + ] + } + ], + "source": [ + "autoguide_map_uniform_prior = pyro.infer.autoguide.AutoDelta(original_model_uniform_prior)\n", + "train(original_model_uniform_prior, autoguide_map_uniform_prior)\n", + "print(\"Our MAP estimate of the latent fairness under the Uniform prior is {:.3f} matching the MLE estimate\".format(\n", + " autoguide_map_uniform_prior.median(data)[\"latent_fairness\"].item()))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:root] *", + "language": "python", + "name": "conda-root-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.7" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/pyro/source/tutorial/source/model_rendering.ipynb b/pyro/source/tutorial/source/model_rendering.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..638d62b8673474f31dba6c41763db7ac064f672b --- /dev/null +++ b/pyro/source/tutorial/source/model_rendering.ipynb @@ -0,0 +1,501 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "857effec", + "metadata": {}, + "source": [ + "# Automatic rendering of Pyro models\n", + "\n", + "In this tutorial we will demonstrate how to create beautiful visualizations of your probabilistic graphical models using [pyro.render_model()](https://docs.pyro.ai/en/latest/infer.util.html#pyro.infer.inspect.render_model)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "8a068eb0", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import torch\n", + "import torch.nn.functional as F\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "import pyro.distributions.constraints as constraints\n", + "\n", + "smoke_test = ('CI' in os.environ)\n", + "assert pyro.__version__.startswith('1.9.1')" + ] + }, + { + "cell_type": "markdown", + "id": "d1266c17", + "metadata": {}, + "source": [ + "## A Simple Example\n", + "\n", + "The visualization interface can be readily used with your models:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "855a7d8f", + "metadata": {}, + "outputs": [], + "source": [ + "def model(data):\n", + " m = pyro.sample(\"m\", dist.Normal(0, 1))\n", + " sd = pyro.sample(\"sd\", dist.LogNormal(m, 1))\n", + " with pyro.plate(\"N\", len(data)):\n", + " pyro.sample(\"obs\", dist.Normal(m, sd), obs=data)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "e1e9628e", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": "\n\n\n\n\n\n\n\ncluster_N\n\nN\n\n\n\nm\n\nm\n\n\n\nsd\n\nsd\n\n\n\nm->sd\n\n\n\n\n\nobs\n\nobs\n\n\n\nm->obs\n\n\n\n\n\nsd->obs\n\n\n\n\n\n", + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = torch.ones(10)\n", + "pyro.render_model(model, model_args=(data,))" + ] + }, + { + "cell_type": "markdown", + "id": "eb1f65be", + "metadata": {}, + "source": [ + "The visualization can be saved to a file by providing `filename='path'` to `pyro.render_model`. You can use different formats such as PDF or PNG by changing the filename's suffix.\n", + "When not saving to a file (`filename=None`), you can also change the format with `graph.format = 'pdf'` where `graph` is the object returned by `pyro.render_model`." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "700a0917", + "metadata": {}, + "outputs": [], + "source": [ + "graph = pyro.render_model(model, model_args=(data,), filename=\"model.pdf\")" + ] + }, + { + "cell_type": "markdown", + "id": "3a4ea614", + "metadata": {}, + "source": [ + "## Tweaking the visualization\n", + "\n", + "As `pyro.render_model` returns an object of type `graphviz.dot.Digraph`, you can further improve the visualization of this graph.\n", + "For example, you could use the [unflatten preprocessor](https://graphviz.readthedocs.io/en/stable/api.html#graphviz.unflatten) to improve the layout aspect ratio for more complex models." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "01a4b74b", + "metadata": {}, + "outputs": [], + "source": [ + "def mace(positions, annotations):\n", + " \"\"\"\n", + " This model corresponds to the plate diagram in Figure 3 of https://www.aclweb.org/anthology/Q18-1040.pdf.\n", + " \"\"\"\n", + " num_annotators = int(torch.max(positions)) + 1\n", + " num_classes = int(torch.max(annotations)) + 1\n", + " num_items, num_positions = annotations.shape\n", + "\n", + " with pyro.plate(\"annotator\", num_annotators):\n", + " epsilon = pyro.sample(\"ε\", dist.Dirichlet(torch.full((num_classes,), 10.)))\n", + " theta = pyro.sample(\"θ\", dist.Beta(0.5, 0.5))\n", + "\n", + " with pyro.plate(\"item\", num_items, dim=-2):\n", + " # NB: using constant logits for discrete uniform prior\n", + " # (NumPyro does not have DiscreteUniform distribution yet)\n", + " c = pyro.sample(\"c\", dist.Categorical(logits=torch.zeros(num_classes)))\n", + "\n", + " with pyro.plate(\"position\", num_positions):\n", + " s = pyro.sample(\"s\", dist.Bernoulli(1 - theta[positions]))\n", + " probs = torch.where(\n", + " s[..., None] == 0, F.one_hot(c, num_classes).float(), epsilon[positions]\n", + " )\n", + " pyro.sample(\"y\", dist.Categorical(probs), obs=annotations)\n", + "\n", + "\n", + "positions = torch.tensor([1, 1, 1, 2, 3, 4, 5])\n", + "# fmt: off\n", + "annotations = torch.tensor([\n", + " [1, 3, 1, 2, 2, 2, 1, 3, 2, 2, 4, 2, 1, 2, 1,\n", + " 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 2, 1, 1, 1,\n", + " 1, 3, 1, 2, 2, 4, 2, 2, 3, 1, 1, 1, 2, 1, 2],\n", + " [1, 3, 1, 2, 2, 2, 2, 3, 2, 3, 4, 2, 1, 2, 2,\n", + " 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 3, 1, 1, 1,\n", + " 1, 3, 1, 2, 2, 3, 2, 3, 3, 1, 1, 2, 3, 2, 2],\n", + " [1, 3, 2, 2, 2, 2, 2, 3, 2, 2, 4, 2, 1, 2, 1,\n", + " 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 2, 1, 1, 2,\n", + " 1, 3, 1, 2, 2, 3, 1, 2, 3, 1, 1, 1, 2, 1, 2],\n", + " [1, 4, 2, 3, 3, 3, 2, 3, 2, 2, 4, 3, 1, 3, 1,\n", + " 2, 1, 1, 2, 1, 2, 2, 3, 2, 1, 1, 2, 1, 1, 1,\n", + " 1, 3, 1, 2, 3, 4, 2, 3, 3, 1, 1, 2, 2, 1, 2],\n", + " [1, 3, 1, 1, 2, 3, 1, 4, 2, 2, 4, 3, 1, 2, 1,\n", + " 1, 1, 1, 2, 3, 2, 2, 2, 2, 1, 1, 2, 1, 1, 1,\n", + " 1, 2, 1, 2, 2, 3, 2, 2, 4, 1, 1, 1, 2, 1, 2],\n", + " [1, 3, 2, 2, 2, 2, 1, 3, 2, 2, 4, 4, 1, 1, 1,\n", + " 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 2, 1, 1, 2,\n", + " 1, 3, 1, 2, 3, 4, 3, 3, 3, 1, 1, 1, 2, 1, 2],\n", + " [1, 4, 2, 1, 2, 2, 1, 3, 3, 3, 4, 3, 1, 2, 1,\n", + " 1, 1, 1, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 1,\n", + " 1, 3, 1, 2, 2, 3, 2, 3, 2, 1, 1, 1, 2, 1, 2],\n", + "]).T\n", + "# fmt: on\n", + "\n", + "# we subtract 1 because the first index starts with 0 in Python\n", + "positions -= 1\n", + "annotations -= 1\n", + "\n", + "mace_graph = pyro.render_model(mace, model_args=(positions, annotations))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "311896af", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": "\n\n\n\n\n\n\n\ncluster_annotator\n\nannotator\n\n\ncluster_item\n\nitem\n\n\ncluster_position\n\nposition\n\n\n\nε\n\nε\n\n\n\ny\n\ny\n\n\n\nε->y\n\n\n\n\n\nθ\n\nθ\n\n\n\ns\n\ns\n\n\n\nθ->s\n\n\n\n\n\nc\n\nc\n\n\n\nc->y\n\n\n\n\n\ns->y\n\n\n\n\n\n", + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# default layout\n", + "mace_graph" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "8babebb4", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": "\n\n\n\n\n\n\n\ncluster_annotator\n\nannotator\n\n\ncluster_item\n\nitem\n\n\ncluster_position\n\nposition\n\n\n\nε\n\nε\n\n\n\ny\n\ny\n\n\n\nε->y\n\n\n\n\n\nθ\n\nθ\n\n\n\ns\n\ns\n\n\n\nθ->s\n\n\n\n\n\ns->y\n\n\n\n\n\nc\n\nc\n\n\n\nc->y\n\n\n\n\n\n", + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# layout after processing the layout with unflatten\n", + "mace_graph.unflatten(stagger=2)" + ] + }, + { + "cell_type": "markdown", + "id": "50a92902", + "metadata": {}, + "source": [ + "## Rendering the parameters" + ] + }, + { + "cell_type": "markdown", + "id": "74f32e20", + "metadata": {}, + "source": [ + "We can render the parameters defined as `pyro.param` by setting `render_params=True` in `pyro.render_model`. " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "645df936", + "metadata": {}, + "outputs": [], + "source": [ + "def model(data):\n", + " sigma = pyro.param(\"sigma\", torch.tensor([1.]), constraint=constraints.positive)\n", + " mu = pyro.param(\"mu\", torch.tensor([0.]))\n", + " x = pyro.sample(\"x\", dist.Normal(mu, sigma))\n", + " y = pyro.sample(\"y\", dist.LogNormal(x, 1))\n", + " with pyro.plate(\"N\", len(data)):\n", + " pyro.sample(\"z\", dist.Normal(x, y), obs=data)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "66fc9f55", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": "\n\n\n\n\n\n\n\ncluster_N\n\nN\n\n\n\nx\n\nx\n\n\n\ny\n\ny\n\n\n\nx->y\n\n\n\n\n\nz\n\nz\n\n\n\nx->z\n\n\n\n\n\ny->z\n\n\n\n\n\nsigma\n\nsigma\n\n\n\nsigma->x\n\n\n\n\n\nmu\n\nmu\n\n\n\nmu->x\n\n\n\n\n\n", + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = torch.ones(10)\n", + "pyro.render_model(model, model_args=(data,), render_params=True)" + ] + }, + { + "cell_type": "markdown", + "id": "f09e73e1", + "metadata": {}, + "source": [ + "## Distribution and Constraint annotations\n", + "\n", + "It is possible to display the distribution of each RV in the generated plot by providing `render_distributions=True` when calling `pyro.render_model`. The constraints associated with parameters are also displayed when `render_distributions=True`." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "8130359c", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": "\n\n\n\n\n\n\n\ncluster_N\n\nN\n\n\n\nx\n\nx\n\n\n\ny\n\ny\n\n\n\nx->y\n\n\n\n\n\nz\n\nz\n\n\n\nx->z\n\n\n\n\n\ny->z\n\n\n\n\n\nsigma\n\nsigma\n\n\n\nsigma->x\n\n\n\n\n\nmu\n\nmu\n\n\n\nmu->x\n\n\n\n\n\ndistribution_description_node\nx ~ Normal\ny ~ LogNormal\nz ~ Normal\nsigma : GreaterThan(lower_bound=0.0)\nmu : Real()\n\n\n\n", + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = torch.ones(10)\n", + "pyro.render_model(model, model_args=(data,), render_params=True ,render_distributions=True)" + ] + }, + { + "cell_type": "markdown", + "id": "3a1e4c4e", + "metadata": {}, + "source": [ + "In the above plot **'~'** denotes the distribution of RV and **'$\\in$'** denotes the constraint of parameter." + ] + }, + { + "cell_type": "markdown", + "id": "4dbe4925", + "metadata": {}, + "source": [ + "## Overlapping non-nested plates\n", + "\n", + "Note that overlapping non-nested plates may be drawn as multiple rectangles." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "9f1a4ebf", + "metadata": {}, + "outputs": [], + "source": [ + "def model():\n", + " plate1 = pyro.plate(\"plate1\", 2, dim=-2)\n", + " plate2 = pyro.plate(\"plate2\", 3, dim=-1)\n", + " with plate1:\n", + " x = pyro.sample(\"x\", dist.Normal(0, 1))\n", + " with plate1, plate2:\n", + " y = pyro.sample(\"y\", dist.Normal(x, 1))\n", + " with plate2:\n", + " pyro.sample(\"z\", dist.Normal(y.sum(-2, True), 1), obs=torch.zeros(3))" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "8514d7df", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": "\n\n\n\n\n\n\n\ncluster_plate1\n\nplate1\n\n\ncluster_plate2\n\nplate2\n\n\ncluster_plate2__CLONE\n\nplate2\n\n\n\nx\n\nx\n\n\n\ny\n\ny\n\n\n\nx->y\n\n\n\n\n\nz\n\nz\n\n\n\ny->z\n\n\n\n\n\n", + "text/plain": [ + "" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pyro.render_model(model)" + ] + }, + { + "cell_type": "markdown", + "id": "e7224816", + "metadata": {}, + "source": [ + "## Semisupervised models\n", + "\n", + "Pyro allows semisupervised models by allowing different sets of `*args,**kwargs` to be passed to a model. You can render semisupervised models by passing a list of different tuples `model_args` and/or a list of different `model_kwargs` to denote the different ways you use a model." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "da332f10", + "metadata": {}, + "outputs": [], + "source": [ + "def model(x, y=None):\n", + " with pyro.plate(\"N\", 2):\n", + " z = pyro.sample(\"z\", dist.Normal(0, 1))\n", + " y = pyro.sample(\"y\", dist.Normal(0, 1), obs=y)\n", + " pyro.sample(\"x\", dist.Normal(y + z, 1), obs=x)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "20b69fb9", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/svg+xml": "\n\n\n\n\n\n\n\ncluster_N\n\nN\n\n\n\nz\n\nz\n\n\n\nx\n\nx\n\n\n\nz->x\n\n\n\n\n\ny\n\n\n\n\n\n\n\ny\n\n\n\ny->x\n\n\n\n\n\n", + "text/plain": [ + "" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pyro.render_model(\n", + " model,\n", + " model_kwargs=[\n", + " {\"x\": torch.zeros(2)},\n", + " {\"x\": torch.zeros(2), \"y\": torch.zeros(2)},\n", + " ]\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "837047a8", + "metadata": {}, + "source": [ + "# Rendering deterministic variables\n", + "\n", + "Pyro allows deterministic variables to be defined using `pyro.deterministic`. These variables can be rendered by setting `render_deterministic=True` in `pyro.render_model` as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "d90dc8d7", + "metadata": {}, + "outputs": [], + "source": [ + "def model_deterministic(data):\n", + " sigma = pyro.param(\"sigma\", torch.tensor([1.]), constraint=constraints.positive)\n", + " mu = pyro.param(\"mu\", torch.tensor([0.]))\n", + " x = pyro.sample(\"x\", dist.Normal(mu, sigma))\n", + " log_y = pyro.sample(\"y\", dist.Normal(x, 1))\n", + " y = pyro.deterministic(\"y_deterministic\", log_y.exp())\n", + " with pyro.plate(\"N\", len(data)):\n", + " eps_z_loc = pyro.sample(\"eps_z_loc\", dist.Normal(0, 1))\n", + " z_loc = pyro.deterministic(\"z_loc\", eps_z_loc + x, event_dim=0)\n", + " pyro.sample(\"z\", dist.Normal(z_loc, y), obs=data)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "6fcc43d8", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": "\n\n\n\n\n\n\n\ncluster_N\n\nN\n\n\n\nx\n\nx\n\n\n\ny\n\ny\n\n\n\nx->y\n\n\n\n\n\nz_loc\n\nz_loc\n\n\n\nx->z_loc\n\n\n\n\n\ny_deterministic\n\ny_deterministic\n\n\n\ny->y_deterministic\n\n\n\n\n\nz\n\nz\n\n\n\ny_deterministic->z\n\n\n\n\n\nsigma\n\nsigma\n\n\n\nsigma->x\n\n\n\n\n\nmu\n\nmu\n\n\n\nmu->x\n\n\n\n\n\neps_z_loc\n\neps_z_loc\n\n\n\neps_z_loc->z_loc\n\n\n\n\n\nz_loc->z\n\n\n\n\n\ndistribution_description_node\nx ~ Normal\ny ~ Normal\ny_deterministic ~ Deterministic\neps_z_loc ~ Normal\nz_loc ~ Deterministic\nz ~ Normal\nsigma : GreaterThan(lower_bound=0.0)\nmu : Real()\n\n\n\n", + "text/plain": [ + "" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = torch.ones(10)\n", + "pyro.render_model(\n", + " model_deterministic,\n", + " model_args=(data,),\n", + " render_params=True,\n", + " render_distributions=True,\n", + " render_deterministic=True\n", + ")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/pyro/source/tutorial/source/modules.ipynb b/pyro/source/tutorial/source/modules.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..754f9afb1feba147fc9efd0e6b038cc451240046 --- /dev/null +++ b/pyro/source/tutorial/source/modules.ipynb @@ -0,0 +1,762 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Modules in Pyro\n", + "\n", + "\n", + "This tutorial introduces [PyroModule](http://docs.pyro.ai/en/stable/nn.html#pyro.nn.module.PyroModule), Pyro's Bayesian extension of PyTorch's [nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) class. Before starting you should understand the basics of Pyro [models and inference](http://pyro.ai/examples/intro_long.html), understand the two primitives [pyro.sample()](http://docs.pyro.ai/en/stable/primitives.html#pyro.primitives.sample) and [pyro.param()](http://docs.pyro.ai/en/stable/primitives.html#pyro.primitives.param), and understand the basics of Pyro's [effect handlers](http://pyro.ai/examples/effect_handlers.html) (e.g. by browsing [minipyro.py](https://github.com/pyro-ppl/pyro/blob/dev/pyro/contrib/minipyro.py)).\n", + "\n", + "#### Summary:\n", + "\n", + "- [PyroModule](http://docs.pyro.ai/en/stable/nn.html#pyro.nn.module.PyroModule)s are like [nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module)s but allow Pyro effects for sampling and constraints.\n", + "- `PyroModule` is a mixin subclass of `nn.Module` that overrides attribute access (e.g. `.__getattr__()`).\n", + "- There are three different ways to create a `PyroModule`:\n", + " - create a new subclass: `class MyModule(PyroModule): ...`,\n", + " - Pyro-ize an existing class: `MyModule = PyroModule[OtherModule]`, or\n", + " - Pyro-ize an existing `nn.Module` instance in-place: `to_pyro_module_(my_module)`.\n", + "- Usual `nn.Parameter` attributes of a `PyroModule` become Pyro parameters.\n", + "- Parameters of a `PyroModule` synchronize with Pyro's global param store.\n", + "- You can add constrained parameters by creating [PyroParam](http://docs.pyro.ai/en/stable/nn.html#pyro.nn.module.PyroParam) objects.\n", + "- You can add stochastic attributes by creating [PyroSample](http://docs.pyro.ai/en/stable/nn.html#pyro.nn.module.PyroSample) objects.\n", + "- Parameters and stochastic attributes are named automatically (no string required).\n", + "- `PyroSample` attributes are sampled once per `.__call__()` of the outermost `PyroModule`.\n", + "- To enable Pyro effects on methods other than `.__call__()`, decorate them with @[pyro_method](http://docs.pyro.ai/en/stable/nn.html#pyro.nn.module.pyro_method).\n", + "- A `PyroModule` model may contain `nn.Module` attributes.\n", + "- An `nn.Module` model may contain at most one `PyroModule` attribute (see [naming section](#Caution-avoiding-duplicate-names)).\n", + "- An `nn.Module` may contain both a `PyroModule` model and `PyroModule` guide (e.g. [Predictive](http://docs.pyro.ai/en/stable/inference_algos.html#pyro.infer.predictive.Predictive)).\n", + "\n", + "#### Table of Contents\n", + "\n", + "- [How PyroModule works](#How-PyroModule-works)\n", + "- [How to create a PyroModule](#How-to-create-a-PyroModule)\n", + "- [How effects work](#How-effects-work)\n", + "- [How to constrain parameters](#How-to-constrain-parameters)\n", + "- [How to make a PyroModule Bayesian](#How-to-make-a-PyroModule-Bayesian)\n", + "- [Caution: accessing attributes inside plates](#⚠-Caution:-accessing-attributes-inside-plates)\n", + "- [How to create a complex nested PyroModule](#How-to-create-a-complex-nested-PyroModule)\n", + "- [How naming works](#How-naming-works)\n", + "- [Caution: avoiding duplicate names](#⚠-Caution:-avoiding-duplicate-names)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import torch\n", + "import torch.nn as nn\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "import pyro.poutine as poutine\n", + "from torch.distributions import constraints\n", + "from pyro.nn import PyroModule, PyroParam, PyroSample\n", + "from pyro.nn.module import to_pyro_module_\n", + "from pyro.infer import SVI, Trace_ELBO\n", + "from pyro.infer.autoguide import AutoNormal\n", + "from pyro.optim import Adam\n", + "\n", + "smoke_test = ('CI' in os.environ)\n", + "assert pyro.__version__.startswith('1.9.1')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## How `PyroModule` works \n", + "\n", + "[PyroModule](http://docs.pyro.ai/en/stable/nn.html#pyro.nn.module.PyroModule) aims to combine Pyro's primitives and effect handlers with PyTorch's [nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) idiom, thereby enabling Bayesian treatment of existing `nn.Module`s and enabling model serving via [jit.trace_module](https://pytorch.org/docs/stable/jit.html#torch.jit.trace_module). Before you start using `PyroModule`s it will help to understand how they work, so you can avoid pitfalls.\n", + "\n", + "`PyroModule` is a subclass of `nn.Module`. `PyroModule` enables Pyro effects by inserting effect handling logic on module attribute access, overriding the `.__getattr__()`, `.__setattr__()`, and `.__delattr__()` methods. Additionally, because some effects (like sampling) apply only once per model invocation, `PyroModule` overrides the `.__call__()` method to ensure samples are generated at most once per `.__call__()` invocation (note `nn.Module` subclasses typically implement a `.forward()` method that is called by `.__call__()`)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## How to create a `PyroModule` \n", + "\n", + "There are three ways to create a `PyroModule`. Let's start with a `nn.Module` that is not a `PyroModule`:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "class Linear(nn.Module):\n", + " def __init__(self, in_size, out_size):\n", + " super().__init__()\n", + " self.weight = nn.Parameter(torch.randn(in_size, out_size))\n", + " self.bias = nn.Parameter(torch.randn(out_size))\n", + " \n", + " def forward(self, input_):\n", + " return self.bias + input_ @ self.weight\n", + " \n", + "linear = Linear(5, 2)\n", + "assert isinstance(linear, nn.Module)\n", + "assert not isinstance(linear, PyroModule)\n", + "\n", + "example_input = torch.randn(100, 5)\n", + "example_output = linear(example_input)\n", + "assert example_output.shape == (100, 2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The first way to create a `PyroModule` is to create a subclass of `PyroModule`. You can update any `nn.Module` you've written to be a PyroModule, e.g.\n", + "```diff\n", + "- class Linear(nn.Module):\n", + "+ class Linear(PyroModule):\n", + " def __init__(self, in_size, out_size):\n", + " super().__init__()\n", + " self.weight = ...\n", + " self.bias = ...\n", + " ...\n", + "```\n", + "Alternatively if you want to use third-party code like the `Linear` above you can subclass it, using `PyroModule` as a mixin class" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "class PyroLinear(Linear, PyroModule):\n", + " pass\n", + "\n", + "linear = PyroLinear(5, 2)\n", + "assert isinstance(linear, nn.Module)\n", + "assert isinstance(linear, Linear)\n", + "assert isinstance(linear, PyroModule)\n", + "\n", + "example_input = torch.randn(100, 5)\n", + "example_output = linear(example_input)\n", + "assert example_output.shape == (100, 2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The second way to create a `PyroModule` is to use bracket syntax `PyroModule[-]` to automatically denote a trivial mixin class as above.\n", + "```diff\n", + "- linear = Linear(5, 2)\n", + "+ linear = PyroModule[Linear](5, 2)\n", + "```\n", + "In our case we can write" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "linear = PyroModule[Linear](5, 2)\n", + "assert isinstance(linear, nn.Module)\n", + "assert isinstance(linear, Linear)\n", + "assert isinstance(linear, PyroModule)\n", + "\n", + "example_input = torch.randn(100, 5)\n", + "example_output = linear(example_input)\n", + "assert example_output.shape == (100, 2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The one difference between manual subclassing and using `PyroModule[-]` is that `PyroModule[-]` also ensures all `nn.Module` superclasses also become `PyroModule`s, which is important for class hierarchies in library code. For example since `nn.GRU` is a subclass of `nn.RNN`, also `PyroModule[nn.GRU]` will be a subclass of `PyroModule[nn.RNN]`.\n", + "\n", + "The third way to create a `PyroModule` is to change the type of an existing `nn.Module` instance in-place using [to_pyro_module_()](http://docs.pyro.ai/en/stable/nn.html#pyro.nn.module.to_pyro_module_). This is useful if you're using a third-party module factory helper or updating an existing script, e.g." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "linear = Linear(5, 2)\n", + "assert isinstance(linear, nn.Module)\n", + "assert not isinstance(linear, PyroModule)\n", + "\n", + "to_pyro_module_(linear) # this operates in-place\n", + "assert isinstance(linear, nn.Module)\n", + "assert isinstance(linear, Linear)\n", + "assert isinstance(linear, PyroModule)\n", + "\n", + "example_input = torch.randn(100, 5)\n", + "example_output = linear(example_input)\n", + "assert example_output.shape == (100, 2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## How effects work \n", + "\n", + "So far we've created `PyroModule`s but haven't made use of Pyro effects. But already the `nn.Parameter` attributes of our `PyroModule`s act like [pyro.param](http://docs.pyro.ai/en/stable/primitives.html#pyro.primitives.param) statements: they synchronize with Pyro's param store, and they can be recorded in traces." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Linear\n", + "[]\n", + "[]\n", + "PyroLinear\n", + "['bias', 'weight']\n", + "['bias', 'weight']\n" + ] + } + ], + "source": [ + "pyro.clear_param_store()\n", + "\n", + "# This is not traced:\n", + "linear = Linear(5, 2)\n", + "with poutine.trace() as tr:\n", + " linear(example_input)\n", + "print(type(linear).__name__)\n", + "print(list(tr.trace.nodes.keys()))\n", + "print(list(pyro.get_param_store().keys()))\n", + "\n", + "# Now this is traced:\n", + "to_pyro_module_(linear)\n", + "with poutine.trace() as tr:\n", + " linear(example_input)\n", + "print(type(linear).__name__)\n", + "print(list(tr.trace.nodes.keys()))\n", + "print(list(pyro.get_param_store().keys()))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## How to constrain parameters \n", + "\n", + "Pyro parameters allow constraints, and often we want our `nn.Module` parameters to obey constraints. You can constrain a `PyroModule`'s parameters by replacing `nn.Parameter` with a [PyroParam](http://docs.pyro.ai/en/stable/nn.html#pyro.nn.module.PyroParam) attribute. For example to ensure the `.bias` attribute is positive, we can set it to" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "params before: ['weight', 'bias']\n", + "params after: ['weight', 'bias_unconstrained']\n", + "bias: tensor([0.9777, 0.8773], grad_fn=)\n" + ] + } + ], + "source": [ + "print(\"params before:\", [name for name, _ in linear.named_parameters()])\n", + "\n", + "linear.bias = PyroParam(torch.randn(2).exp(), constraint=constraints.positive)\n", + "print(\"params after:\", [name for name, _ in linear.named_parameters()])\n", + "print(\"bias:\", linear.bias)\n", + "\n", + "example_input = torch.randn(100, 5)\n", + "example_output = linear(example_input)\n", + "assert example_output.shape == (100, 2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now PyTorch will optimize the `.bias_unconstrained` parameter, and each time we access the `.bias` attribute it will read and transform the `.bias_unconstrained` parameter (similar to a Python `@property`).\n", + "\n", + "\n", + "If you know the constraint beforehand, you can build it into the module constructor, e.g.\n", + "```diff\n", + " class Linear(PyroModule):\n", + " def __init__(self, in_size, out_size):\n", + " super().__init__()\n", + " self.weight = ...\n", + "- self.bias = nn.Parameter(torch.randn(out_size))\n", + "+ self.bias = PyroParam(torch.randn(out_size).exp(),\n", + "+ constraint=constraints.positive)\n", + " ...\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## How to make a `PyroModule` Bayesian \n", + "\n", + "So far our `Linear` module is still deterministic. To make it randomized and Bayesian, we'll replace `nn.Parameter` and `PyroParam` attributes with [PyroSample](http://docs.pyro.ai/en/stable/nn.html#pyro.nn.module.PyroSample) attributes, specifying a prior. Let's put a simple prior over the weights, taking care to expand its shape to `[5,2]` and declare event dimensions with [.to_event()](http://docs.pyro.ai/en/stable/distributions.html#pyro.distributions.torch_distribution.TorchDistributionMixin.to_event) (as explained in the [tensor shapes tutorial](https://pyro.ai/examples/tensor_shapes.html))." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "params before: ['weight', 'bias_unconstrained']\n", + "params after: ['bias_unconstrained']\n", + "weight: tensor([[-0.8668, -0.0150],\n", + " [ 3.4642, 1.9076],\n", + " [ 0.4717, 1.0565],\n", + " [-1.2032, 1.0821],\n", + " [-0.1712, 0.4711]])\n", + "weight: tensor([[-1.2577, -0.5242],\n", + " [-0.7785, -1.0806],\n", + " [ 0.6239, -0.4884],\n", + " [-0.2580, -1.2288],\n", + " [-0.7540, -1.9375]])\n" + ] + } + ], + "source": [ + "print(\"params before:\", [name for name, _ in linear.named_parameters()])\n", + "\n", + "linear.weight = PyroSample(dist.Normal(0, 1).expand([5, 2]).to_event(2))\n", + "print(\"params after:\", [name for name, _ in linear.named_parameters()])\n", + "print(\"weight:\", linear.weight)\n", + "print(\"weight:\", linear.weight)\n", + "\n", + "example_input = torch.randn(100, 5)\n", + "example_output = linear(example_input)\n", + "assert example_output.shape == (100, 2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that the `.weight` parameter now disappears, and each time we call `linear()` a new weight is sampled from the prior. In fact, the weight is sampled when the `Linear.forward()` accesses the `.weight` attribute: this attribute now has the special behavior of sampling from the prior.\n", + "\n", + "We can see all the Pyro effects that appear in the trace:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "param bias tensor([0.9777, 0.8773], grad_fn=)\n", + "sample weight tensor([[ 1.8043, 1.5494],\n", + " [ 0.0128, 1.4100],\n", + " [-0.2155, 0.6375],\n", + " [ 1.1202, 1.9672],\n", + " [-0.1576, -0.6957]])\n" + ] + } + ], + "source": [ + "with poutine.trace() as tr:\n", + " linear(example_input)\n", + "for site in tr.trace.nodes.values():\n", + " print(site[\"type\"], site[\"name\"], site[\"value\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So far we've modified a third-party module to be Bayesian\n", + "```py\n", + "linear = Linear(...)\n", + "to_pyro_module_(linear)\n", + "linear.bias = PyroParam(...)\n", + "linear.weight = PyroSample(...)\n", + "```\n", + "If you are creating a model from scratch, you could instead define a new class" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "class BayesianLinear(PyroModule):\n", + " def __init__(self, in_size, out_size):\n", + " super().__init__()\n", + " self.bias = PyroSample(\n", + " prior=dist.LogNormal(0, 1).expand([out_size]).to_event(1))\n", + " self.weight = PyroSample(\n", + " prior=dist.Normal(0, 1).expand([in_size, out_size]).to_event(2))\n", + "\n", + " def forward(self, input):\n", + " return self.bias + input @ self.weight # this line samples bias and weight" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that samples are drawn at most once per `.__call__()` invocation, for example\n", + "```py\n", + "class BayesianLinear(PyroModule):\n", + " ...\n", + " def forward(self, input):\n", + " weight1 = self.weight # Draws a sample.\n", + " weight2 = self.weight # Reads previous sample.\n", + " assert weight2 is weight1 # All accesses should agree.\n", + " ...\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ⚠ Caution: accessing attributes inside plates \n", + "\n", + "Because `PyroSample` and `PyroParam` attributes are modified by Pyro effects, we need to take care where parameters are accessed. For example [pyro.plate](http://docs.pyro.ai/en/stable/primitives.html#pyro.primitives.plate) contexts can change the shape of sample and param sites. Consider a model with one latent variable and a batched observation statement. We see that the only difference between these two models is where the `.loc` attribute is accessed." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "class NormalModel(PyroModule):\n", + " def __init__(self):\n", + " super().__init__()\n", + " self.loc = PyroSample(dist.Normal(0, 1))\n", + "\n", + "class GlobalModel(NormalModel):\n", + " def forward(self, data):\n", + " # If .loc is accessed (for the first time) outside the plate,\n", + " # then it will have empty shape ().\n", + " loc = self.loc\n", + " assert loc.shape == ()\n", + " with pyro.plate(\"data\", len(data)):\n", + " pyro.sample(\"obs\", dist.Normal(loc, 1), obs=data)\n", + " \n", + "class LocalModel(NormalModel):\n", + " def forward(self, data):\n", + " with pyro.plate(\"data\", len(data)):\n", + " # If .loc is accessed (for the first time) inside the plate,\n", + " # then it will be expanded by the plate to shape (plate.size,).\n", + " loc = self.loc\n", + " assert loc.shape == (len(data),)\n", + " pyro.sample(\"obs\", dist.Normal(loc, 1), obs=data)\n", + "\n", + "data = torch.randn(10)\n", + "LocalModel()(data)\n", + "GlobalModel()(data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## How to create a complex nested `PyroModule` \n", + "\n", + "To perform inference with the above `BayesianLinear` module we'll need to wrap it in probabilistic model with a likelihood; that wrapper will also be a `PyroModule`." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "class Model(PyroModule):\n", + " def __init__(self, in_size, out_size):\n", + " super().__init__()\n", + " self.linear = BayesianLinear(in_size, out_size) # this is a PyroModule\n", + " self.obs_scale = PyroSample(dist.LogNormal(0, 1))\n", + "\n", + " def forward(self, input, output=None):\n", + " obs_loc = self.linear(input) # this samples linear.bias and linear.weight\n", + " obs_scale = self.obs_scale # this samples self.obs_scale\n", + " with pyro.plate(\"instances\", len(input)):\n", + " return pyro.sample(\"obs\", dist.Normal(obs_loc, obs_scale).to_event(1),\n", + " obs=output)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Whereas a usual `nn.Module` can be trained with a simple PyTorch optimizer, a Pyro model requires probabilistic inference, e.g. using [SVI](http://docs.pyro.ai/en/stable/inference_algos.html#pyro.infer.svi.SVI) and an [AutoNormal](http://docs.pyro.ai/en/stable/infer.autoguide.html#pyro.infer.autoguide.AutoNormal) guide. See the [bayesian regression tutorial](http://pyro.ai/examples/bayesian_regression.html) for details." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "step 0 loss = 7.186\n", + "step 100 loss = 2.185\n", + "step 200 loss = 1.87\n", + "step 300 loss = 1.739\n", + "step 400 loss = 1.691\n", + "step 500 loss = 1.673\n", + "CPU times: user 2.35 s, sys: 24.8 ms, total: 2.38 s\n", + "Wall time: 2.39 s\n" + ] + } + ], + "source": [ + "%%time\n", + "pyro.clear_param_store()\n", + "pyro.set_rng_seed(1)\n", + "\n", + "model = Model(5, 2)\n", + "x = torch.randn(100, 5)\n", + "y = model(x)\n", + "\n", + "guide = AutoNormal(model)\n", + "svi = SVI(model, guide, Adam({\"lr\": 0.01}), Trace_ELBO())\n", + "for step in range(2 if smoke_test else 501):\n", + " loss = svi.step(x, y) / y.numel()\n", + " if step % 100 == 0:\n", + " print(\"step {} loss = {:0.4g}\".format(step, loss))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`PyroSample` statements may also depend on other sample statements or parameters. In this case the `prior` can be a callable depending on `self`, rather than a constant distribution. For example consider the hierarchical model" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor(0.5387)" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "class Model(PyroModule):\n", + " def __init__(self):\n", + " super().__init__()\n", + " self.dof = PyroSample(dist.Gamma(3, 1))\n", + " self.loc = PyroSample(dist.Normal(0, 1))\n", + " self.scale = PyroSample(lambda self: dist.InverseGamma(self.dof, 1))\n", + " self.x = PyroSample(lambda self: dist.Normal(self.loc, self.scale))\n", + " \n", + " def forward(self):\n", + " return self.x\n", + " \n", + "Model()()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## How naming works \n", + "\n", + "In the above code we saw a `BayesianLinear` model embedded inside another `Model`. Both were `PyroModule`s. Whereas simple [pyro.sample](http://docs.pyro.ai/en/stable/primitives.html#pyro.primitives.sample) statements require name strings, `PyroModule` attributes handle naming automatically. Let's see how that works with the above `model` and `guide` (since `AutoNormal` is also a `PyroModule`).\n", + "\n", + "Let's trace executions of the model and the guide." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sample linear.bias torch.Size([2])\n", + "sample linear.weight torch.Size([5, 2])\n", + "sample obs_scale torch.Size([])\n", + "sample instances torch.Size([100])\n", + "sample obs torch.Size([100, 2])\n" + ] + } + ], + "source": [ + "with poutine.trace() as tr:\n", + " model(x)\n", + "for site in tr.trace.nodes.values():\n", + " print(site[\"type\"], site[\"name\"], site[\"value\"].shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "Observe that `model.linear.bias` corresponds to the `linear.bias` name, and similarly for the `model.linear.weight` and `model.obs_scale` attributes. The \"instances\" site corresponds to the plate, and the \"obs\" site corresponds to the likelihood. Next examine the guide:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "param AutoNormal.locs.linear.bias torch.Size([2])\n", + "param AutoNormal.scales.linear.bias torch.Size([2])\n", + "sample linear.bias_unconstrained torch.Size([2])\n", + "sample linear.bias torch.Size([2])\n", + "param AutoNormal.locs.linear.weight torch.Size([5, 2])\n", + "param AutoNormal.scales.linear.weight torch.Size([5, 2])\n", + "sample linear.weight_unconstrained torch.Size([5, 2])\n", + "sample linear.weight torch.Size([5, 2])\n", + "param AutoNormal.locs.obs_scale torch.Size([])\n", + "param AutoNormal.scales.obs_scale torch.Size([])\n", + "sample obs_scale_unconstrained torch.Size([])\n", + "sample obs_scale torch.Size([])\n" + ] + } + ], + "source": [ + "with poutine.trace() as tr:\n", + " guide(x)\n", + "for site in tr.trace.nodes.values():\n", + " print(site[\"type\"], site[\"name\"], site[\"value\"].shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We see the guide learns posteriors over three random variables: `linear.bias`, `linear.weight`, and `obs_scale`. For each of these, the guide learns a `(loc,scale)` pair of parameters, which are stored internally in nested `PyroModules`:\n", + "```python\n", + "class AutoNormal(...):\n", + " def __init__(self, ...):\n", + " self.locs = PyroModule()\n", + " self.scales = PyroModule()\n", + " ...\n", + "```\n", + "Finally, `AutoNormal` contains a `pyro.sample` statement for each unconstrained latent site followed by a [pyro.deterministic](http://docs.pyro.ai/en/stable/primitives.html#pyro.primitives.deterministic) statement to map the unconstrained sample to a constrained posterior sample." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ⚠ Caution: avoiding duplicate names \n", + "\n", + "`PyroModule`s name their attributes automatically, event for attributes nested deeply in other `PyroModule`s. However care must be taken when mixing usual `nn.Module`s with `PyroModule`s, because `nn.Module`s do not support automatic site naming.\n", + "\n", + "Within a single model (or guide):\n", + "\n", + "If there is only a single `PyroModule`, then your are safe.\n", + "```diff\n", + " class Model(nn.Module): # not a PyroModule\n", + " def __init__(self):\n", + " self.x = PyroModule()\n", + "- self.y = PyroModule() # Could lead to name conflict.\n", + "+ self.y = nn.Module() # Has no Pyro names, so avoids conflict.\n", + "```\n", + "If there are only two `PyroModule`s then one must be an attribute of the other.\n", + "```diff\n", + "class Model(PyroModule):\n", + " def __init__(self):\n", + " self.x = PyroModule() # ok\n", + "```\n", + "If you have two `PyroModule`s that are not attributes of each other, then they must be connected by attribute links through other `PyroModule`s. These can be sibling links\n", + "```diff\n", + "- class Model(nn.Module): # Could lead to name conflict.\n", + "+ class Model(PyroModule): # Ensures names are unique.\n", + " def __init__(self):\n", + " self.x = PyroModule()\n", + " self.y = PyroModule()\n", + "```\n", + "or ancestor links\n", + "```diff\n", + " class Model(PyroModule):\n", + " def __init__(self):\n", + "- self.x = nn.Module() # Could lead to name conflict.\n", + "+ self.x = PyroModule() # Ensures y is conected to root Model.\n", + " self.x.y = PyroModule()\n", + "```\n", + "\n", + "Sometimes you may want to store a `(model,guide)` pair in a single `nn.Module`, e.g. to serve them from C++. In this case it is safe to make them attributes of a container `nn.Module`, but that container should *not* be a `PyroModule`.\n", + "```python\n", + "class Container(nn.Module): # This cannot be a PyroModule.\n", + " def __init__(self, model, guide): # These may be PyroModules.\n", + " super().__init__()\n", + " self.model = model\n", + " self.guide = guide\n", + " # This is a typical trace-replay pattern seen in model serving.\n", + " def forward(self, data):\n", + " tr = poutine.trace(self.guide).get_trace(data)\n", + " return poutine.replay(model, tr)(data)\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.10" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/pyro/source/tutorial/source/mue_factor.rst b/pyro/source/tutorial/source/mue_factor.rst new file mode 100644 index 0000000000000000000000000000000000000000..d4ec19ae4b162db0f320cd5daec8b97f985f2d2b --- /dev/null +++ b/pyro/source/tutorial/source/mue_factor.rst @@ -0,0 +1,11 @@ +Example: Probabilistic PCA + MuE (FactorMuE) +============================================ + +`View FactorHMM.py on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/examples/contrib/mue/FactorMuE.py + +__ github_ + +.. literalinclude:: ../../examples/contrib/mue/FactorMuE.py + :language: python diff --git a/pyro/source/tutorial/source/mue_profile.rst b/pyro/source/tutorial/source/mue_profile.rst new file mode 100644 index 0000000000000000000000000000000000000000..41d1b704f01c341dcf2bc3148bcc2fd002c61177 --- /dev/null +++ b/pyro/source/tutorial/source/mue_profile.rst @@ -0,0 +1,11 @@ +Example: Constant + MuE (Profile HMM) +===================================== + +`View ProfileHMM.py on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/examples/contrib/mue/ProfileHMM.py + +__ github_ + +.. literalinclude:: ../../examples/contrib/mue/ProfileHMM.py + :language: python diff --git a/pyro/source/tutorial/source/neutra.rst b/pyro/source/tutorial/source/neutra.rst new file mode 100644 index 0000000000000000000000000000000000000000..9122210213ca242e7e16ddb241cf969ba3d9e802 --- /dev/null +++ b/pyro/source/tutorial/source/neutra.rst @@ -0,0 +1,12 @@ +Example: Neural MCMC with NeuTraReparam +======================================= + +`View neutra.py on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/examples/neutra.py + +__ github_ + +.. literalinclude:: ../../examples/neutra.py + :language: python + diff --git a/pyro/source/tutorial/source/normalizing_flows_intro.ipynb b/pyro/source/tutorial/source/normalizing_flows_intro.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..3617edc98e7ac9d10be4318e7658aeb7df1ad66d --- /dev/null +++ b/pyro/source/tutorial/source/normalizing_flows_intro.ipynb @@ -0,0 +1,905 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Normalizing Flows - Introduction\n", + "\n", + "This tutorial introduces Pyro's built-in normalizing flows. It is independent of most of Pyro, but users may want to read about distribution shapes in the [Tensor Shapes Tutorial](http://pyro.ai/examples/tensor_shapes.html).\n", + "\n", + "> The development of Pyro's built-in flows has stopped in favor of external libraries, such as [Zuko](https://github.com/probabilists/zuko), [nflows](https://github.com/bayesiains/nflows), [normflows](https://github.com/VincentStimper/normalizing-flows) or [FlowTorch](https://flowtorch.ai/). Some of these libraries may have interfaces that are not directly compatible with Pyro. See the [SVI with flow guide](svi_flow_guide.ipynb) and [VAE with flow prior](vae_flow_prior.ipynb) tutorials for example usages of [Zuko](https://github.com/probabilists/zuko) within Pyro.\n", + "\n", + "## Introduction\n", + "\n", + "In standard probabilistic modeling practice, we represent our beliefs over unknown continuous quantities with simple parametric distributions like the normal, exponential, and Laplacian distributions. However, using such simple forms, which are commonly symmetric and unimodal (or have a fixed number of modes when we take a mixture of them), restricts the performance and flexibility of our methods. For instance, standard variational inference in the Variational Autoencoder uses independent univariate normal distributions to represent the variational family. The true posterior is neither independent nor normally distributed, which results in suboptimal inference and simplifies the model that is learnt. In other scenarios, we are likewise restricted by not being able to model multimodal distributions and heavy or light tails.\n", + "\n", + "Normalizing Flows \\[1-4\\] are a family of methods for constructing flexible learnable probability distributions, often with neural networks, which allow us to surpass the limitations of simple parametric forms. Pyro contains state-of-the-art normalizing flow implementations, and this tutorial explains how you can use this library for learning complex models and performing flexible variational inference. We introduce the main idea of Normalizing Flows (NFs) and demonstrate learning simple univariate distributions with element-wise, multivariate, and conditional flows." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Univariate Distributions\n", + " \n", + "### Background\n", + " \n", + "Normalizing Flows are a family of methods for constructing flexible distributions. Let's first restrict our attention to representing univariate distributions. The basic idea is that a simple source of noise, for example a variable with a standard normal distribution, $X\\sim\\mathcal{N}(0,1)$, is passed through a bijective (i.e. invertible) function, $g(\\cdot)$ to produce a more complex transformed variable $Y=g(X)$.\n", + "\n", + "For a given random variable, we typically want to perform two operations: sampling and scoring. Sampling $Y$ is trivial. First, we sample $X=x$, then calculate $y=g(x)$. Scoring $Y$, or rather, evaluating the log-density $\\log p_Y(y)$, is more involved. How does the density of $Y$ relate to the density of $X$? We can use the substitution rule of integral calculus to answer this. Suppose we want to evaluate the expectation of some function of $X$. Then,\n", + "\n", + "\\begin{align}\n", + "\\mathbb{E}_{p_X(\\cdot)}\\left[f(X)\\right] &= \\int_{\\text{supp}(X)}f(x)p_X(x)dx\\\\\n", + "&= \\int_{\\text{supp}(Y)}f(g^{-1}(y))p_X(g^{-1}(y))\\left|\\frac{dx}{dy}\\right|dy\\\\\n", + "&= \\mathbb{E}_{p_Y(\\cdot)}\\left[f(g^{-1}(Y))\\right],\n", + "\\end{align}\n", + "\n", + "where $\\text{supp}(X)$ denotes the support of $X$, which in this case is $(-\\infty,\\infty)$. Crucially, we used the fact that $g$ is bijective to apply the substitution rule in going from the first to the second line. Equating the last two lines we get,\n", + "\n", + "\\begin{align}\n", + "\\log p_Y(y) & = \\log p_X(g^{-1}(y)) + \\log\\left|\\frac{dx}{dy}\\right| \\\\\n", + "& = \\log p_X(g^{-1}(y)) - \\log\\left|\\frac{dy}{dx}\\right|.\n", + "\\end{align}\n", + "\n", + "Inituitively, this equation says that the density of $Y$ is equal to the density at the corresponding point in $X$ plus a term that corrects for the warp in volume around an infinitesimally small length around $Y$ caused by the transformation.\n", + "\n", + "If $g$ is cleverly constructed (and we will see several examples shortly), we can produce distributions that are more complex than standard normal noise and yet have easy sampling and computationally tractable scoring. Moreover, we can compose such bijective transformations to produce even more complex distributions. By an inductive argument, if we have a sequence of $L$ transforms $(g_1, g_2, \\ldots, g_L)$ such that $Y = g(X) = g_L \\circ \\cdots g_2 \\circ g_1(X)$, then the log-density of $Y$ is\n", + "\n", + "\\begin{align}\n", + "\\log p_Y(y) = \\log p_X(y_0) + \\sum^{L}_{l=1} \\log \\left| \\frac{dg^{-1}_{l}(y_l)}{dy_{l}} \\right|\n", + "\\end{align}\n", + "\n", + "where $y_{l} = y$ and $y_{l-1} = g^{-1}_l(y_{l})$.\n", + "\n", + "In a latter section, we will see how to generalize this method to multivariate $X$. The field of Normalizing Flows aims to construct such $g$ for multivariate $X$ to transform simple i.i.d. standard normal noise into complex, learnable, high-dimensional distributions. The methods have been applied to such diverse applications as image modeling, text-to-speech, unsupervised language induction, data compression, and modeling molecular structures. As probability distributions are the most fundamental component of probabilistic modeling we will likely see many more exciting state-of-the-art applications in the near future." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Fixed Univariate Transforms in Pyro\n", + "\n", + "PyTorch contains classes for representing *fixed* univariate bijective transformations, and sampling/scoring from transformed distributions derived from these. Pyro extends this with a comprehensive library of *learnable* univariate and multivariate transformations using the latest developments in the field. As Pyro imports all of PyTorch's distributions and transformations, we will work solely with Pyro. We also note that the NF components in Pyro can be used independently of the probabilistic programming functionality of Pyro, which is what we will be doing in the first two tutorials.\n", + "\n", + "Let us begin by showing how to represent and manipulate a simple transformed distribution,\n", + "\n", + "\\begin{align}\n", + "X &\\sim \\mathcal{N}(0,1)\\\\\n", + "Y &= \\text{exp}(X).\n", + "\\end{align}\n", + "\n", + "You may have recognized that this is by definition, $Y\\sim\\text{LogNormal}(0,1)$.\n", + "\n", + "We begin by importing the relevant libraries:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "import pyro.distributions.transforms as T\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "import os\n", + "smoke_test = ('CI' in os.environ)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A variety of bijective transformations live in the [pyro.distributions.transforms](http://docs.pyro.ai/en/stable/distributions.html#transforms) module, and the classes to define transformed distributions live in [pyro.distributions](http://docs.pyro.ai/en/stable/distributions.html). We first create the base distribution of $X$ and the class encapsulating the transform $\\text{exp}(\\cdot)$:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dist_x = dist.Normal(torch.zeros(1), torch.ones(1))\n", + "exp_transform = T.ExpTransform()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The class [ExpTransform](https://pytorch.org/docs/master/distributions.html#torch.distributions.transforms.ExpTransform) derives from [Transform](https://pytorch.org/docs/master/distributions.html#torch.distributions.transforms.Transform) and defines the forward, inverse, and log-absolute-derivative operations for this transform,\n", + "\n", + "\\begin{align}\n", + "g(x) &= \\text{exp(x)}\\\\\n", + "g^{-1}(y) &= \\log(y)\\\\\n", + "\\log \\left|\\frac{dg}{dx}\\right| &= x.\n", + "\\end{align}\n", + "\n", + "In general, a transform class defines these three operations, from which it is sufficient to perform sampling and scoring.\n", + "\n", + "The class [TransformedDistribution](https://pytorch.org/docs/master/distributions.html#torch.distributions.transformed_distribution.TransformedDistribution) takes a base distribution of simple noise and a list of transforms, and encapsulates the distribution formed by applying these transformations in sequence. We use it as:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "dist_y = dist.TransformedDistribution(dist_x, [exp_transform])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, plotting samples from both to verify that we that have produced the log-normal distribution:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAGzCAYAAACPa3XZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nO3df1xW9f3/8SciXCDIhSA/ExGriT9SN1MkzVCZ+CPLZPaxjy1sTrcGFrBW0bf8VUlZm05DrW4ObR+dzS1tWlmmiVuiGc5KXXzUdLr0wk0FFOOHcr5/dOP6dAkYF1ycix+P++12bnGd8+ac1zlc5/T0fb3PuTwMwzAEAABgkg7uLgAAALQvhA8AAGAqwgcAADAV4QMAAJiK8AEAAExF+AAAAKYifAAAAFMRPgAAgKkIHwAAwFSEj3aoR48emj59uinbmj59unr06GHKtlqqEydOyMPDQ6tXr3Z3KWiHON/bt5b6NyF8uMjnn3+uH/3oR4qOjpaPj49uuOEG/fCHP9SyZcsc2i1cuFCbNm1yU5UtV0JCgjw8PDRx4sRay2r+5/3SSy+5oTKgNs73pklISFC/fv3cXYYkaefOnfLw8JCHh4cKCgpqLZ8+fbr8/f3dUFnbRvhwgd27d+vWW2/Vp59+qpkzZ+rll1/WT3/6U3Xo0EG//e1vHdpyMbq+LVu21HkBAFoKzve2a968ee4uod3o6O4C2oLnnntOVqtV+/btU2BgoMOys2fPuqkqc5SXl8vb21sdOjQ9x3bv3l0XL17U/Pnz9Ze//MUF1dXNlTWj/eF8b5vnzsCBA7Vlyxbt379fP/jBD5ptO5cvX1anTp2abf2tRdt7B7nBsWPH1Ldv31oXIkkKDQ21/+zh4aGysjKtWbPG3s1X81nsP//5T/3iF79Qr1695Ovrq+DgYE2ZMkUnTpxwWN/q1avl4eGhjz76SJmZmQoJCZGfn5/uuece/fvf/3ZoaxiGnn32WXXr1k2dOnXSyJEjdejQoVo1nj9/Xo8++qhuueUW+fv7KyAgQOPGjdOnn37q0K6me3L9+vV66qmndMMNN6hTp04qLS2VJG3atEn9+vWTj4+P+vXrp40bNzp1HDt37qyMjAxt3rxZ+/fv/872X375paZMmaKgoCB16tRJQ4cO1dtvv93gmmu6U0+ePKk777xT/v7+uuGGG5STkyPpm671UaNGyc/PT9HR0Vq3bl2jjhvaFs5315zvDbF8+XL17dtXFotFkZGRSk1NVXFxca12OTk56tmzp3x9fTVkyBD99a9/VUJCghISEhq8rdmzZ6tLly4N7v1oSG01Hy8VFBRoxIgR6tSpk5588kmHj5Jrau/UqZPGjBmjU6dOyTAMPfPMM+rWrZt8fX1199136/z58w7rfuuttzRhwgRFRkbKYrHoxhtv1DPPPKOrV682eJ/diZ4PF4iOjlZ+fr4OHjx43c8xf//73+unP/2phgwZolmzZkmSbrzxRknSvn37tHv3bk2dOlXdunXTiRMntGLFCiUkJOjw4cO1knLNiTJ37lydOHFCS5YsUVpamt544w17mzlz5ujZZ5/V+PHjNX78eO3fv19jxoxRZWWlw7q+/PJLbdq0SVOmTFFMTIyKior0yiuv6I477tDhw4cVGRnp0P6ZZ56Rt7e3Hn30UVVUVMjb21vvv/++kpOT1adPH2VnZ+vcuXN68MEH1a1bN6eO5SOPPKLFixdr3rx51+39KCoq0m233abLly/r4YcfVnBwsNasWaO77rpLf/rTn3TPPfd8Z82SdPXqVY0bN04jRozQokWLtHbtWqWlpcnPz0//7//9P02bNk2TJ0/WypUr9cADDyg+Pl4xMTGNOm5oGzjfXXe+X8+8efM0f/58JSYm6qGHHlJhYaFWrFihffv26aOPPpKXl5ckacWKFUpLS9Ptt9+ujIwMnThxQpMmTVKXLl2cqicgIEAZGRmaM2fOd/Z+NLQ2STp37pzGjRunqVOn6v7771dYWJh92dq1a1VZWanZs2fr/PnzWrRoke69916NGjVKO3fu1OOPP66jR49q2bJlevTRR/W73/3O/rurV6+Wv7+/MjMz5e/vrx07dmjOnDkqLS3Viy++6Myhdg8DTfb+++8bnp6ehqenpxEfH2889thjxnvvvWdUVlbWauvn52ekpKTUmn/58uVa8/Lz8w1Jxuuvv26fl5uba0gyEhMTjerqavv8jIwMw9PT0yguLjYMwzDOnj1reHt7GxMmTHBo9+STTxqSHGooLy83rl696rDt48ePGxaLxViwYIF93ocffmhIMnr27Fmr3oEDBxoRERH27dccF0lGdHR0rX271h133GH07dvXMAzDmD9/viHJKCgosNciyXjxxRft7dPT0w1Jxl//+lf7vIsXLxoxMTFGjx497PtzvZpTUlIMScbChQvt8y5cuGD4+voaHh4exvr16+3zv/jiC0OSMXfuXKePW039ubm533kc0PJxvrv2fK9Lzf6MGTPGodaXX37ZkGT87ne/MwzDMCoqKozg4GBj8ODBRlVVlb3d6tWrDUnGHXfc8Z211Oznhg0bjOLiYqNLly7GXXfdZV+ekpJi+Pn5OV1bzX5KMlauXOmwzZprQkhIiMMxzMrKMiQZAwYMcNif++67z/D29jbKy8vt8+p6D/3sZz8zOnXq5NAuJSWlQX8Ts/Gxiwv88Ic/VH5+vu666y59+umnWrRokZKSknTDDTc0eOyCr6+v/eeqqiqdO3dON910kwIDA+v8CGLWrFny8PCwv7799tt19epV/fOf/5QkffDBB/ZE/e126enptdZlsVjsn+FevXpV586dk7+/v3r16lXntlNSUhzqPXPmjA4cOKCUlBRZrVaH49KnT58G7f+3PfLII+rSpYvmz59fb5t33nlHQ4YM0fDhw+3z/P39NWvWLJ04cUKHDx++bs3f9tOf/tT+c2BgoHr16iU/Pz/de++99vm9evVSYGCgvvzyS/s8Z48b2gbOd9ee73Wp2Z/09HSH8SUzZ85UQECA/ePVTz75ROfOndPMmTPVseP/deRPmzZNXbp0cXq7VqtV6enp+stf/qK///3vTaqthsVi0YMPPljnuqZMmeJwDOPi4iRJ999/v8P+xMXFqbKyUl999ZV93rf/JhcvXtR//vMf3X777bp8+bK++OILJ/baPQgfLjJ48GC9+eabunDhgj7++GNlZWXp4sWL+tGPflTrf4R1+frrrzVnzhxFRUXJYrGoa9euCgkJUXFxsUpKSmq17969u8PrmhPtwoULkmS/KN18880O7UJCQmqdlNXV1Vq8eLFuvvlmh21/9tlndW675mOHGvVtS/rmf9rOasgF4J///Ged6+7du7dDTfXVXMPHx0chISG1tt+tWzeHi3jN/JrjKzl/3NB2cL677nyvS802rl2ft7e3evbsaV9e89+bbrrJoV3Hjh1rPdvCZrM5TF9//XWd237kkUcUGBhY79iPhtZW44YbbrB/zHuta/+uNUEkKiqqzvnfvv4cOnRI99xzj6xWqwICAhQSEqL7779fklrF9Yfw4WLe3t4aPHiwFi5cqBUrVqiqqkobNmz4zt+bPXu2nnvuOd1777364x//qPfff1/btm1TcHCwqqura7X39PSscz2GYThd88KFC5WZmakRI0bof/7nf/Tee+9p27Zt6tu3b53brq8HwZVqLgDX6/1wRn0113ccG3J8nT1uaHs431uPiIgIh+nb42W+rSH/+HHG9Y5fY68/xcXFuuOOO/Tpp59qwYIF2rx5s7Zt26YXXnhBklrF9YcBp83o1ltvlfRNN2WNa/81XeNPf/qTUlJS9Otf/9o+r7y8vM6R3Q0RHR0tSTpy5Ih69uxpn//vf//bIT3XbHvkyJFatWqVw/zi4mJ17drVqW1dq7Cw0Onapf+7AMybN08pKSl1brOuddd0N9bU1JyaetzQtnC+N/58r28bhYWFDvtTWVmp48ePKzEx0aHd0aNHNXLkSHu7K1eu6MSJE+rfv7993rZt2xy20bdv33q3n56eriVLlmj+/Pm17mpqaG3NaefOnTp37pzefPNNjRgxwj7/+PHjzb5tV6HnwwU+/PDDOv8F8s4770hy7J7z8/Or8wLj6elZax3Lli1r9G1TiYmJ8vLy0rJlyxzWu2TJkgZte8OGDQ6fL15PRESEBg4cqDVr1jh0923btq1BXdD1SU9PV2BgoBYsWFBr2fjx4/Xxxx8rPz/fPq+srEyvvvqqevTo4bLPnq+nqccNrRPne/Oc79+WmJgob29vLV261KHWVatWqaSkRBMmTJD0TeALDg7Wa6+9pitXrtjbrV27tlboSkxMdJgiIiLq3X7NP37eeustHThwoFG1NaeanpFvb7+yslLLly9v9m27Cj0fLjB79mxdvnxZ99xzj2JjY1VZWandu3frjTfeUI8ePRwGGw0aNEgffPCBfvOb3ygyMlIxMTGKi4vTnXfeqd///veyWq3q06eP8vPz9cEHHyg4OLhRNYWEhOjRRx9Vdna27rzzTo0fP15///vf9e6779b6182dd96pBQsW6MEHH9Rtt92mzz//XGvXrnVI9d8lOztbEyZM0PDhw/WTn/xE58+f17Jly9S3b19dunSpUftgtVr1yCOP1PnRyxNPPKE//OEPGjdunB5++GEFBQVpzZo1On78uP785z+b8hAkVxw3tD6c76453//973/r2WefrTU/JiZG06ZNU1ZWlubPn6+xY8fqrrvuUmFhoZYvX67BgwfbxzZ4e3tr3rx5mj17tkaNGqV7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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.subplot(1, 2, 1)\n", + "plt.hist(dist_x.sample([1000]).numpy(), bins=50)\n", + "plt.title('Standard Normal')\n", + "plt.subplot(1, 2, 2)\n", + "plt.hist(dist_y.sample([1000]).numpy(), bins=50)\n", + "plt.title('Standard Log-Normal')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our example uses a single transform. However, we can compose transforms to produce more expressive distributions. For instance, if we apply an affine transformation we can produce the general log-normal distribution,\n", + "\n", + "\\begin{align}\n", + "X &\\sim \\mathcal{N}(0,1)\\\\\n", + "Y &= \\text{exp}(\\mu+\\sigma X).\n", + "\\end{align}\n", + "\n", + "or rather, $Y\\sim\\text{LogNormal}(\\mu,\\sigma^2)$. In Pyro this is accomplished, e.g. for $\\mu=3, \\sigma=0.5$, as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAGzCAYAAACPa3XZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nO3de1xUdR7/8fcgchEEhJRLilK54qXUvBBp5YVCNFeTbG2p1HV1K7SUWotdNXVN1G3TdMlLP9dLq1m2q5WVZpq4JaKitqVlWqiUgbsaoLggwvn90c/zawRScOYMg6/n43EeD+d7vnPO54wzx7ff8z0zNsMwDAEAAFjEw9UFAACAawvhAwAAWIrwAQAALEX4AAAAliJ8AAAASxE+AACApQgfAADAUoQPAABgKcIHAACwFOHjGtSqVSuNGDHCkn2NGDFCrVq1smRfddXRo0dls9m0fPlyV5cCwIG2bdsmm82mbdu2uboUt0P4cJDPPvtM999/v1q2bCkfHx9df/31uvvuu7VgwQK7fjNnztT69etdVGXd1atXL9lsNg0cOLDSuov/eL/wwgsuqAxwP8uXL5fNZtOePXtcXYpatWolm82mcePGVVp38R/vN9980wWVwZUIHw6wY8cOde3aVZ9++qlGjx6tv/71r/rtb38rDw8PvfTSS3Z9CR8/b8OGDcrOznZ1GQAc7JVXXtGJEydcXQbqCE9XF1AfPP/88woMDNTu3bsVFBRkt+7kyZMuqsoaJSUl8vLykofH1efYyMhInTlzRtOmTdPbb7/tgOqq5siaAVxe+/btdejQIc2aNUvz58932n6Ki4vl5+fntO3DcTj7OsDXX3+t9u3bVwoektSsWTPzzzabTcXFxVqxYoVsNptsNps59+LYsWN6/PHH1aZNG/n6+iokJERDhw7V0aNH7bZ3cTj1k08+UUpKipo2bSo/Pz/dd999+s9//mPX1zAMzZgxQ82bN1ejRo3Uu3dvHThwoFKNp0+f1tNPP62bb75Z/v7+CggIUEJCgj799FO7fheHSNesWaNJkybp+uuvV6NGjVRUVCRJWr9+vTp06CAfHx916NBB69atq9Hr2LhxY02YMEHvvPOO9u7de9n+33zzjYYOHarg4GA1atRIt912m959990rrnnEiBHy9/fX8ePHde+998rf31/XX3+90tPTJf14Ka1Pnz7y8/NTy5YttXr16lq9bkBdtG/fPiUkJCggIED+/v7q27evdu7cWanfv//9b911113y9fVV8+bNNWPGDC1btkw2m63S+ak6rVq10iOPPHLFox9XUtvFc2FGRoYef/xxNWvWTM2bN5f042XcDh06mLU3atRIN910k3l5JyMjQzExMfL19VWbNm304Ycf2m37Ss/HqD1GPhygZcuWyszM1Oeff64OHTpU2+/VV1/Vb3/7W3Xv3l1jxoyRJN14442SpN27d2vHjh0aNmyYmjdvrqNHj2rhwoXq1auXDh48qEaNGtlta9y4cWrSpImee+45HT16VPPmzdPYsWP1+uuvm32mTJmiGTNmqH///urfv7/27t2re+65R+fPn7fb1jfffKP169dr6NChioqKUn5+vhYvXqy77rpLBw8eVEREhF3/P/3pT/Ly8tLTTz+t0tJSeXl56YMPPlBiYqLatWuntLQ0nTp1SiNHjjRPBlfqySef1Ny5czV16tSfHf3Iz8/X7bffrnPnzumJJ55QSEiIVqxYoV/+8pd68803dd999122ZkkqLy9XQkKC7rzzTs2ZM0erVq3S2LFj5efnpz/+8Y9KSkrSkCFDtGjRIj3yyCOKjY1VVFRUrV43oK44cOCA7rjjDgUEBGjixIlq2LChFi9erF69epn/MEvSd999p969e8tmsyk1NVV+fn76P//n/8jb27vG+/zjH/+olStXXnb040pru+jxxx9X06ZNNWXKFBUXF5vtP/zwg+69914NGzZMQ4cO1cKFCzVs2DCtWrVK48eP16OPPqpf//rX+vOf/6z7779fubm5aty4saSan49RCwau2gcffGA0aNDAaNCggREbG2tMnDjR2LRpk3H+/PlKff38/Izhw4dXaj937lyltszMTEOSsXLlSrNt2bJlhiQjLi7OqKioMNsnTJhgNGjQwCgoKDAMwzBOnjxpeHl5GQMGDLDr94c//MGQZFdDSUmJUV5ebrfvnJwcw9vb25g+fbrZ9tFHHxmSjBtuuKFSvZ06dTLCw8PN/V98XSQZLVu2rHRsl7rrrruM9u3bG4ZhGNOmTTMkGdnZ2WYtkow///nPZv/x48cbkox//etfZtuZM2eMqKgoo1WrVubx/FzNw4cPNyQZM2fONNt++OEHw9fX17DZbMaaNWvM9i+//NKQZDz33HM1ft0u1r9s2bLLvg6AI1w8T+zevbvK9YMHDza8vLyMr7/+2mw7ceKE0bhxY+POO+8028aNG2fYbDZj3759ZtupU6eM4OBgQ5KRk5Nz2VpatmxpDBgwwDAMwxg5cqTh4+NjnDhxwjCM///5XLt2bY1ru3iMPXv2NC5cuGC3z7vuusuQZKxevdpsu/gZ9vDwMHbu3Gm2b9q0qdLn80rPxxfr/+ijjy77OsAel10c4O6771ZmZqZ++ctf6tNPP9WcOXMUHx+v66+//ornLvj6+pp/Lisr06lTp3TTTTcpKCioyksQY8aMkc1mMx/fcccdKi8v17FjxyRJH374oc6fP69x48bZ9Rs/fnylbXl7e5vzH8rLy3Xq1Cn5+/urTZs2Ve57+PDhdvV+//332r9/v4YPH67AwEC716Vdu3ZXdPw/9eSTT6pJkyaaNm1atX3ee+89de/eXT179jTb/P39NWbMGB09elQHDx782Zp/6re//a3556CgILVp00Z+fn564IEHzPY2bdooKChI33zzjdlW09cNqAvKy8v1wQcfaPDgwbrhhhvM9vDwcP3617/Wxx9/bF5K3bhxo2JjY9WpUyezX3BwsJKSkmq170mTJunChQuaNWvWVdd20ejRo9WgQYNK2/L399ewYcPMxxc/w23btrUbPbn4559+tmt6PkbNET4cpFu3bvrnP/+pH374Qbt27VJqaqrOnDmj+++/v9I/hFX53//+pylTpqhFixby9vbWddddp6ZNm6qgoECFhYWV+kdGRto9btKkiaQfhxolmSGkdevWdv2aNm1q9r2ooqJCc+fOVevWre32/e9//7vKfV+87HBRdfuSfvzA11RgYKDGjx+vt99+W/v27auyz7Fjx6rcdtu2be1qqq7mi3x8fNS0adNK+2/evLldaLvYfvH1lWr+ugF1wX/+8x+dO3eu2s9PRUWFcnNzJf34Obrpppsq9bu0rbCwUHl5eeZy+vTpKvd9ww036OGHH9aSJUv0/fffX1VtF1X32a7uM9yiRYtKbZLsPts1PR+j5ggfDubl5aVu3bpp5syZWrhwocrKyrR27drLPm/cuHF6/vnn9cADD+iNN97QBx98oM2bNyskJEQVFRWV+leV9KUfJ5nW1MyZM5WSkqI777xTf//737Vp0yZt3rxZ7du3r3Lf1Y0gONKTTz6poKCgnx39qInqaq7udbyS17emrxtQXz355JMKDw83lyFDhlTb949//KMuXLig2bNnO2Tfzvhs1/R8jJpjwqkTde3aVZLsEv6lSfyiN998U8OHD9df/vIXs62kpEQFBQW12nfLli0lSYcPH7YbvvzPf/5jl/Av7rt3795aunSpXXtBQYGuu+66Gu3rUocOHapx7dL/H/2YOnWqhg8fXuU+q9r2l19+aVeTM13t6wa4QtOmTdWoUaNqPz8eHh7m6EDLli115MiRSv0ubZs4caIeeugh8/Glo6s/deONN+qhhx7S4sWLK00erUltzuTo8zEqY+TDAT766KMqRxzee+89SfaXHvz8/Kp8Azdo0KDSNhYsWKDy8vJa1RQXF6eGDRtqwYIFdtudN2/eFe177dq1+u67765oX+Hh4erUqZNWrFhhNyS5efPmK7rkVJ3x48crKChI06dPr7Suf//+2rVrlzIzM8224uJiLVmyRK1atarVXJOautrXDXCFBg0a6J577tFbb71ld+tofn6+Vq9erZ49eyogIECSFB8fr8zMTO3fv9/sd/r0aa1atcpum+3atVNcXJy5dOnS5WdrmDRpksrKyjRnzpxa1+ZMjj4fozJGPhxg3LhxOnfunO677z5FR0fr/Pnz2rFjh15//XW1atVKI0eONPt26dJFH374oV588UVFREQoKipKMTExuvfee/Xqq68qMDBQ7dq1U2Zmpj788EOFhITUqqamTZvq6aefVlpamu699171799f+/bt0/vvv1/pf+X33nuvpk+frpEjR+r222/XZ599plWrVtmNmFxOWlqaBgwYoJ49e+o3v/mNTp8+rQULFqh9+/Y6e/ZsrY4hMDBQTz75ZJWXXp599lm99tprSkhI0BNPPKHg4GCtWLFCOTk5+sc//mHJF4g54nUDnOlvf/ubNm7cWKl96tSp2rx5s3r27KnHH39cnp6eWrx4sUpLS+0CwcSJE/X3v/9dd999t8aNG2feahsZGanTp09XO5J7ORdHP1asWFFp3YwZM66oNmdy9PkYVXDZfTb1yPvvv2/85je/MaKjow1/f3/Dy8vLuOmmm4xx48YZ+fn5dn2//PJL48477zR8fX3tbnn94YcfjJEjRxrXXXed4e/vb8THxxtffvml0bJlS7vbYqu7ha6qW77Ky8uNadOmGeHh4Yavr6/Rq1cv4/PPP6+0zZKSEuOpp54y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vXr1kmEYV9z/6NGjldqCg4O1evVqB1YFoC5j5AMAAFiKkQ+4BJP1AODaxcgHAACwFOEDAABYivABAAAsRfgAAACWInwAAABLET4AAIClCB8AAMBShA8AAGApwgcAALAU4QMAAFiK8AEAACzFb7sAwCUu/e0hAI7FyAcAALAU4QMAAFiK8AEAACxF+AAAAJYifAAAAEsRPgAAgKUIHwAAwFKEDwAAYCnCBwAAsBThAwAAWIrwAQAALEX4AAAAliJ8AAAASxE+AACApQgfAADAUoQPAABgKcIHAACwlKerC0D91OrZd+0eH501wEWVAADqGkY+AACApWoUPqZOnSqbzWa3REdHm+tLSkqUnJyskJAQ+fv7KzExUfn5+Q4vGgAAuK8aj3y0b99e33//vbl8/PHH5roJEybonXfe0dq1a5WRkaETJ05oyJAhDi0YAAC4txrP+fD09FRYWFil9sLCQi1dulSrV69Wnz59JEnLli1T27ZttXPnTt12221XXy0AAHB7NR75OHz4sCIiInTDDTcoKSlJx48flyRlZ2errKxMcXFxZt/o6GhFRkYqMzOz2u2VlpaqqKjIbgEAAPVXjcJHTEyMli9fro0bN2rhwoXKycnRHXfcoTNnzigvL09eXl4KCgqye05oaKjy8vKq3WZaWpoCAwPNpUWLFrU7EgAA4BZqFD4SEhI0dOhQ3XLLLYqPj9d7772ngoICvfHGG7UuIDU1VYWFheaSm5tb620BsN727ds1cOBARUREyGazaf369ea6srIyPfPMM7r55pvl5+eniIgIPfLIIzpx4oTdNk6fPq2kpCQFBAQoKChIo0aN0tmzZ60+FAAWuapbbYOCgvSLX/xCR44cUVhYmM6fP6+CggK7Pvn5+VXOEbnI29tbAQEBdgsA91FcXKyOHTsqPT290rpz585p7969mjx5svbu3at//vOfOnTokH75y1/a9UtKStKBAwe0efNmbdiwQdu3b9eYMWOsOgQAFruqLxk7e/asvv76az388MPq0qWLGjZsqC1btigxMVGSdOjQIR0/flyxsbEOKRZA3ZOQkKCEhIQq1wUGBmrz5s12bX/961/VvXt3HT9+XJGRkfriiy+0ceNG7d69W127dpUkLViwQP3799cLL7ygiIgIpx8DAGvVaOTj6aefVkZGho4ePaodO3bovvvuU4MGDfTggw8q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usnR5w2X3+2SmpqqlJQU83FFRYVOnz6thg0bKjIyUrm5uQoICHBhhdYrKipSixYtrsljl67t468rx24Yhs6cOaOIiAiX1XA51Z07QkJCZLPZ6sxr6Soc/7V7/K469pqcNxwePq677jo1aNBA+fn5du35+fkKCwur1N/b21ve3t52bUFBQebwTUBAwDX3xrnoWj526do+/rpw7FaMeFxU0/OGVP2541J14bV0JY7/2j1+Vxz7lZ43HH63i5eXl7p06aItW7aYbRUVFdqyZYtiY2MdvTsA9QDnDeDa4pTLLikpKRo+fLi6du2q7t27a968eSouLjZnsQPApThvANeOBlOnTp3q6I126NBBQUFBev755/XCCy9IklatWqU2bdrUrLgGDdSrVy95erp8aorlruVjl67t479Wj91R542fulZfy4s4/mv3+Ov6sdsMq+6lAwAAkBO/Xh0AAKAqhA8AAGApwgcAALAU4QMAAFiK8AEAACzlduGjtLRUnTp1ks1m0/79+11djtMdPXpUo0aNUlRUlHx9fXXjjTfqueee0/nz511dmlOkp6erVatW8vHxUUxMjHbt2uXqkpwuLS1N3bp1U+PGjdWsWTMNHjxYhw4dcnVZbu9aeC9NnTpVNpvNbomOjjbXl5SUKDk5WSEhIfL391diYmKlb5F1J9u3b9fAgQMVEREhm82m9evX2603DENTpkxReHi4fH19FRcXp8OHD9v1OX36tJKSkhQQEKCgoCCNGjVKZ8+etfIwau1yxz9ixIhK74d+/frZ9akrx+924WPixIl1+vcmHO3LL79URUWFFi9erAMHDmju3LlatGiR/vCHP7i6NId7/fXXlZKSoueee0579+5Vx44dFR8fr5MnT7q6NKfKyMhQcnKydu7cqc2bN6usrEz33HOPiouLXV2a27qW3kvt27fX999/by4ff/yxuW7ChAl65513tHbtWmVkZOjEiRMaMmSIC6u9OsXFxerYsaPS09OrXD9nzhzNnz9fixYtUlZWlvz8/BQfH6+SkhKzT1JSkg4cOKDNmzdrw4YN2r59u8aMGWPVIVyVyx2/JPXr18/u/fDaa6/Zra8zx2+4kffee8+Ijo42Dhw4YEgy9u3b5+qSXGLOnDlGVFSUq8twuO7duxvJycnm4/LyciMiIsJIS0tzYVXWO3nypCHJyMjIcHUpbutaeS89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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dist_x = dist.Normal(torch.zeros(1), torch.ones(1))\n", + "affine_transform = T.AffineTransform(loc=3, scale=0.5)\n", + "exp_transform = T.ExpTransform()\n", + "dist_y = dist.TransformedDistribution(dist_x, [affine_transform, exp_transform])\n", + "\n", + "plt.subplot(1, 2, 1)\n", + "plt.hist(dist_x.sample([1000]).numpy(), bins=50)\n", + "plt.title('Standard Normal')\n", + "plt.subplot(1, 2, 2)\n", + "plt.hist(dist_y.sample([1000]).numpy(), bins=50)\n", + "plt.title('Log-Normal')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For the forward operation, transformations are applied in the order of the list that is the second argument to [TransformedDistribution](https://pytorch.org/docs/master/distributions.html#torch.distributions.transformed_distribution.TransformedDistribution). In this case, first [AffineTransform](https://pytorch.org/docs/master/distributions.html#torch.distributions.transforms.AffineTransform) is applied to the base distribution and then [ExpTransform](https://pytorch.org/docs/master/distributions.html#torch.distributions.transforms.ExpTransform)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Learnable Univariate Distributions in Pyro\n", + "\n", + "Having introduced the interface for invertible transforms and transformed distributions, we now show how to represent *learnable* transforms and use them for density estimation. Our dataset in this section and the next will comprise samples along two concentric circles. Examining the joint and marginal distributions:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkMAAAHJCAYAAACG+j24AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOy9eZhdZZXv/9njmYeaq1KpyogJSUhCKyKDA8ogjSDdDTagXhRbW4lcvX27benbKn1tHxQfh77t3P7EFi62jQPt5ToAAnKVINBhSEgCmVPUPJ757PH9/bHrnNSpIVWpVOb3k6eeJ7Vrn7Pfs8+wv2et71pLEUIIJBKJRCKRSM5Q1BO9AIlEIpFIJJITiRRDEolEIpFIzmikGJJIJBKJRHJGI8WQRCKRSCSSMxophiQSiUQikZzRSDEkkUgkEonkjEaKIYlEIpFIJGc0UgxJJBKJRCI5o5FiSCKRSCQSyRmNFEMSiUQikUjOaKQYkkgkEolEckYjxZBEIlkwvv/976MoCvv37z+ux33mmWe48MILicViKIrC888/f1yPf6y56667WL16Nb7vn+ilzItvfetbdHZ2YlnWiV6KRDItUgxJJCchW7du5brrrmPJkiWEw2Ha29u57LLL+Od//ucTvbSTDsdxuP766xkZGeErX/kK99xzD0uWLDnRy1owstksX/jCF/jbv/1bVPXU/Mh+3/veh23bfPvb3z7RS5FIpkU/0QuQSCS1PPnkk1xyySV0dnbywQ9+kNbWVrq6unjqqaf4p3/6J2677bYTvcSTij179nDgwAH+5V/+hb/4i7840ctZcL73ve/hui433njjiV7KvAmHw9x88818+ctf5rbbbkNRlBO9JImkBimGJJKTjM997nOkUimeeeYZ0ul0zd8GBgZO0KpOXirnZPK5mo5CoUAsFjvWS1pQ7r77bq655hrC4fCJXspR8a53vYu77rqLxx57jLe+9a0nejkSSQ2nZsxVIjmN2bNnD2vXrp324t7c3Fz9/4EDB7j11ltZtWoVkUiEhoYGrr/++il+nTvuuANFUXjllVd4z3veQyqVoqmpiU996lMIIejq6uKd73wnyWSS1tZWvvSlL017+507d/Kud72LZDJJQ0MDH/vYxyiXy3N6TN3d3dxyyy20tLQQCoVYu3Yt3/ve92r2yeVyfPzjH2fp0qWEQiGam5u57LLL2LJly4z3+773vY83v/nNAFx//fUoisJb3vKWmnVv376dm266ibq6Oi6++GIAnnvuOa688kqSySTxeJy3ve1tPPXUU1Pu/2jP3Uxcc801vPa1r+W+++5j48aNRCIRli5dyle+8pWa/fbt28eLL77IpZdeOuV8hsNhbrnllprtjzzyCIZh8N/+23+b0zpmYyGP89rXvpb6+nr+4z/+Y0HWJpEsKEIikZxUXH755SKRSIitW7cedr/7779fbNiwQXz6058W3/nOd8Tf/d3fibq6OrFkyRJRKBSq+33mM58RgNi4caO48cYbxTe+8Q1x1VVXCUB8+ctfFqtWrRIf+chHxDe+8Q1x0UUXCUD89re/nXL7c845R1x99dXia1/7mnjPe94jAPHe9763Zk133323AMS+ffuq2/r6+sTixYtFR0eH+J//83+Kb37zm+Kaa64RgPjKV75S3e+mm24SpmmKv/qrvxLf/e53xRe+8AVx9dVXi3vvvXfGc/Dkk0+Kv/u7vxOA+K//9b+Ke+65Rzz00EM1616zZo145zvfKb7xjW+Ir3/962Lbtm0iFouJtrY28dnPflZ8/vOfF8uWLROhUEg89dRTNfd/tOduJpYuXSqamppEXV2d+NSnPiW+9rWviY0bNwpAPPjgg9X97r33XgGIF198ccp9bNq0SRiGIfbv3y+EEGLHjh0inU6Lq6++WnieN+sa5spCHufSSy8Vr33taxdsbRLJQiHFkERykvHQQw8JTdOEpmniggsuEJ/4xCfEr3/9a2Hbds1+xWJxym03b94sAPGDH/yguq1yQf/Qhz5U3ea6rli8eLFQFEV8/vOfr24fHR0VkUhE3HzzzVNuf80119Qc69ZbbxWAeOGFF6rbphNDH/jAB0RbW5sYGhqquf0NN9wgUqlU9XGkUimxadOmOZyhWh577DEBiPvvv79me2XdN954Y832a6+9VpimKfbs2VPd1tPTIxKJhHjTm9407X3M99xNRzabFYqiiGQyKXbs2FHdPjAwICKRSM16//7v/14AIpfLTbmfV199VYRCIfGRj3xEDA0NiRUrVoiNGzeKfD5/2OMfKQt5nA996EMiEoks6PokkoVApskkkpOMyy67jM2bN3PNNdfwwgsvcNddd3HFFVfQ3t7Oz3/+8+p+kUik+n/HcRgeHmbl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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiwAAAG1CAYAAADa9q//AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdeXxU5dk38N8smZnsC9lDIIQtbCEIGm0FqaYGa1VarcjTFk2rtljetza1Wp5WoC5PEC2li4/0wQeLWpf2far1sRaU1FitUTZZhLCFhKyTDbInM5mZ8/4xc86cgWwzc2bJzO/7+eTzGSZnDmcguec6133d160SBEEAERERURBTB/oCiIiIiMbCgIWIiIiCHgMWIiIiCnoMWIiIiCjoMWAhIiKioMeAhYiIiIIeAxYiIiIKegxYiIiIKOgxYCEiIqKgx4CFiIiIgh4DFiIiIgp6DFjIr7Zs2YK8vDzYbDZFz7t9+3ZMmTIFJpNJ0fMSUXDg2EEMWMhvuru78dRTT+GRRx6BWq3sj94999wDs9mM3//+94qel4gCj2MHAQxYyI927twJi8WC1atXK35ug8GAu+++G1u3bgU3ICcKLRw7CGDAQn70wgsv4NZbb4XBYPDJ+e+8806cP38e77//vk/OT0SBwbGDAAYspIBbb70VixcvxiuvvIKCggJERkYiJycHv/rVr6RjampqcPToURQVFV32+sbGRhgMBnznO99xeX7v3r2IiIjAj370o3Fdx+LFi5GUlIS//vWv3r0hIvILjh3kFoHISzk5OUJKSoqQmJgoPProo8Lvfvc7oaCgQAAgvP3224IgCMLLL78sABCOHj067Dl+8IMfCBEREUJtba0gCIJQVVUlJCQkCLfccotgtVrHfS1FRUXC4sWLvX9TRORzHDvIHQxYyCvd3d2CSqUS4uLihKqqKun51tZWITIyUli9erUgCILw85//XAAg9PT0DHuehoYGQa/XC2vXrhXa29uF6dOnCwUFBUJvb69b13P//fcLkZGRnr8hIvILjh3kLm0gszs08R0/fhyCIOCnP/0p8vLypOdTUlIwZ84c1NfXAwA6Ojqg1WoRExMz7HmysrJw3333YceOHTh06BAGBgbwwQcfIDo62q3rSUxMxMDAAPr7+xEVFeX5GyMin+LYQe5iDQt55dixYwCAb3/728N+351B46GHHoLJZMLRo0fx1ltvISsrS/rec889hyuuuAIRERHYtGnTiOcQHFX+KpVq3H8vEfmfP8YOk8mE73znO5gyZQri4uJw9dVXo7KycthzcOwIfgxYyCuff/45kpKSMHnyZJfnBwcHceLECeTn5wMAJk2aBIvFgp6enhHP9eSTTwIALBYLkpKSXL6XkZGBTZs24fbbbx/1ei5evIioqChERkZ68naIyE/8MXZYLBbk5OTgo48+QmdnJx588EHccsst6O3tvewcHDuCHwMW8sqxY8eg0Wgue/6FF17A4OCgFGCIKd+ampphz/P000/j+eefx+9+9ztotVppABKtXLkSt956KxISEka9npqaGsyZM8eTt0JEfuSPsSM6OhobNmzAlClToFarcdddd0Gn0+HUqVOXnYdjR/BjwEJe+fzzz9HW1oYzZ85Iz7W1taGsrAzFxcUoLCwEAFxzzTUAgAMHDlx2jjfffBM//elP8fjjj+MHP/gB7r//frz44osjDlCjOXToEL7whS94+G6IyF8CMXacOXMGFy5cwIwZMy77HseOCSCwNb80kRmNRgGAkJ+fL8yaNUv49a9/LWzevFnIzs4WMjMzhcbGRpfj58+fL1X+iw4cOCBERUUJ3/72t6XnGhsbBb1eL3z3u9+97O/83ve+J2zcuHHY6zlw4IAAQNi7d6/3b46IfCYQY0d/f79w1VVXCZs2bbrsexw7JgYGLOSx9957TwAg7Nu3T7j33nuF+Ph4IS4uTli1apVQV1d32fFbt24VYmJihP7+fkEQBKG+vl7IyMgQvvjFLwqDg4Mux65du1aIiIgQzp075/L8aAHLI488IkyZMkWw2WzKvEEi8gl/jx1ms1m4+eabhX/7t38bdnzg2DExMGAhj/3qV78SNBrNZQPGSDo7O4WkpCTh+eef9/jvHClgGRwcFNLT04Vt27Z5fG4i8g9/jh1Wq1VYtWqV8NWvflUYGhq67PscOyYO1rCQx44dO4bc3Fzo9fpxHR8fH4+HH34YTz/9tNtbxFssFgwODsJqtbo8Fr3wwguIiIjA97//fbfOS0T+58+x43vf+x6am5vx5z//GVrt5a3HOHZMHCpB4PaU5JnCwkKkp6f7Zf+NTZs24Re/+IXLcy+88ALuuecen//dRKQsf40d58+fR05ODgwGg8uKpL///e9YunSp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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "from sklearn import datasets\n", + "from sklearn.preprocessing import StandardScaler\n", + "\n", + "n_samples = 1000\n", + "X, y = datasets.make_circles(n_samples=n_samples, factor=0.5, noise=0.05)\n", + "X = StandardScaler().fit_transform(X)\n", + "\n", + "plt.title(r'Samples from $p(x_1,x_2)$')\n", + "plt.xlabel(r'$x_1$')\n", + "plt.ylabel(r'$x_2$')\n", + "plt.scatter(X[:,0], X[:,1], alpha=0.5)\n", + "plt.show()\n", + "\n", + "plt.subplot(1, 2, 1)\n", + "sns.distplot(X[:,0], hist=False, kde=True,\n", + " bins=None,\n", + " hist_kws={'edgecolor':'black'},\n", + " kde_kws={'linewidth': 2})\n", + "plt.title(r'$p(x_1)$')\n", + "plt.subplot(1, 2, 2)\n", + "sns.distplot(X[:,1], hist=False, kde=True,\n", + " bins=None,\n", + " hist_kws={'edgecolor':'black'},\n", + " kde_kws={'linewidth': 2})\n", + "plt.title(r'$p(x_2)$')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Standard transforms derive from the [Transform](https://pytorch.org/docs/master/distributions.html#torch.distributions.transforms.ExpTransform) class and are not designed to contain learnable parameters. Learnable transforms, on the other hand, derive from [TransformModule](http://docs.pyro.ai/en/stable/distributions.html#pyro.distributions.TransformModule), which is a [torch.nn.Module](https://pytorch.org/docs/master/generated/torch.nn.Module.html#torch.nn.Module) and registers parameters with the object.\n", + "\n", + "We will learn the marginals of the above distribution using such a transform, [Spline](http://docs.pyro.ai/en/stable/distributions.html#pyro.distributions.transforms.Spline) \\[5,6\\], defined on a two-dimensional input:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "base_dist = dist.Normal(torch.zeros(2), torch.ones(2))\n", + "spline_transform = T.Spline(2, count_bins=16)\n", + "flow_dist = dist.TransformedDistribution(base_dist, [spline_transform])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This transform passes each dimension of its input through a *separate* monotonically increasing function known as a spline. From a high-level, a spline is a complex parametrizable curve for which we can define specific points known as knots that it passes through and the derivatives at the knots. The knots and their derivatives are parameters that can be learnt, e.g., through stochastic gradient descent on a maximum likelihood objective, as we now demonstrate:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "step: 0, loss: 2.682476758956909\n", + "step: 200, loss: 1.278384804725647\n", + "step: 400, loss: 1.2647961378097534\n", + "step: 600, loss: 1.2601449489593506\n", + "step: 800, loss: 1.2561875581741333\n", + "step: 1000, loss: 1.2545257806777954\n", + "CPU times: user 4.92 s, sys: 69.3 ms, total: 4.99 s\n", + "Wall time: 5.01 s\n" + ] + } + ], + "source": [ + "%%time\n", + "steps = 1 if smoke_test else 1001\n", + "dataset = torch.tensor(X, dtype=torch.float)\n", + "optimizer = torch.optim.Adam(spline_transform.parameters(), lr=1e-2)\n", + "for step in range(steps):\n", + " optimizer.zero_grad()\n", + " loss = -flow_dist.log_prob(dataset).mean()\n", + " loss.backward()\n", + " optimizer.step()\n", + " flow_dist.clear_cache()\n", + "\n", + " if step % 200 == 0:\n", + " print('step: {}, loss: {}'.format(step, loss.item()))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that we call `flow_dist.clear_cache()` after each optimization step to clear the transform's forward-inverse cache. This is required because `flow_dist`'s `spline_transform` is a stateful [TransformModule](http://docs.pyro.ai/en/stable/distributions.html#pyro.distributions.TransformModule) rather than a purely stateless [Transform](https://pytorch.org/docs/stable/distributions.html#torch.distributions.transforms.Transform) object. Purely functional Pyro code typically creates `Transform` objects each model execution, then discards them after `.backward()`, effectively clearing the transform caches. By contrast in this tutorial we create stateful module objects and need to manually clear their cache after update.\n", + "\n", + "Plotting samples drawn from the transformed distribution after learning:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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n48bb7yR73znOwwMDPCZz3yGH/3oR/T395+VuPr6+mbczuVyDA8Pz5itlUgkSKVSM/azbZvh4eEZ204mtsWLF9PX13fEOj67du2q3S+EODZJbISYJ9ra2li1ahXr16+f8WW7fft2nn76aW644YYz8jzTydHhX+in4uGHH+Yf/uEfuPLKK7n22muPuV8ymZxxW9d1Vq5cCVBbufhMxgXwve99b8bMonvvvRfHcbj++utr27q6unj22WePeNzhFZuTie2GG25gZGSEf/zHf6xtcxyHe+65h0gkwurVq0/p9QjxbiEL9Akxj9x5551cf/31XHnlldx6660Ui0Xuuece6urqjrreyqlYtWoVhmFwxx13kE6n8fv9fOADH6C5ufm4j3v00UeJRCLYtl1beXjz5s1ccskl/PSnPz3uYz/5yU8yOTnJBz7wATo6Oti7dy/33HMPq1atqvWenGpcx2LbNtdeey2///u/T29vL9/5zne46qqr+O3f/u0ZcX32s5/lox/9KGvWrOHVV1/lqaeemrEQ4cnG9ulPf5r77ruPdevWsW3bNpYsWcKjjz7K5s2bueuuu47biySEkMRGiDltuo9ius/igx/8IE8++SRf+9rX+OpXv4plWaxevZo77rjjpJtnj6W1tZXvfve73H777dx66624rsszzzzztgnE5z73OQACgQCNjY2sWrWKH/7wh/zhH/7h267++8d//Md873vf4zvf+Q6pVIrW1lb+4A/+gNtuu63WZHuqcR3L3//93/PQQw/x1a9+lUqlws0338y3v/3tGcNKn/rUpxgcHOQHP/gBTz75JFdffTUbNmw4ovp0MrEFg0E2btzIl7/8ZdavX08mk2H58uXcf//9R11IUAgxk6akw0yIOevb3/42X/ziF+nv76erq2u2wxFCiFknPTZCzGFbt24lHA5LQ6kQQhwiQ1FCzEH/9E//xMaNG3nooYf45Cc/iWnK/8pCCAEyFCXEnLR06VKy2Swf+chHuOuuu87ING4hhJgPJLERQgghxLwhPTZCCCGEmDcksRFCCCHEvPGu6jj0PI+hoSGi0egZX35dCCGEEGeHUopsNkt7e/sRPxB7uHdVYjM0NMTChQtnOwwhhBBCnIL9+/fT0dFx3H3eVYnN9FLk+/fvJxaLzXI0QgghhDgRmUyGhQsXntBPiryrEpvp4adYLCaJjRBC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hBBCiHcOSWzOgOl1RYQQQggxu6SsIIQQQoh5QxIbIYQQQswbktgIIYQQ71JKKT796U9TX1+PpmnE43H+/M//fLbDOi2S2AghhBDvUk8++SQPPPAATzzxBMPDw6xYsWK2Qzpt0jwshBBCvEMozzuns2wHBgZoa2vjve99LwCmOffTgjlVsbn33ntZuXIlsViMWCzGlVdeyb//+7/PdlhCCCHEacv299P33e+y61vf4s177mHXt75F33e/S7a//6w837p16/jTP/1T9u3bh6ZpLFmy5Ih9pqamuOWWW0gkEoRCIa6//nr6+vqA6jBWU1MTjz76aG3/VatW0dbWVrv93HPP4ff7KRQKZ+U1HM2cSmw6Ojr45je/ybZt23jxxRf5wAc+wE033cSOHTtmOzQhhBDilGX7+xlcv57Mjh34EgkinZ34EgkyO3YwuH79WUlu7r77bv77f//vdHR0MDw8zNatW4/YZ926dbz44ov87Gc/41e/+hVKKW644QYqlQqapnHNNdewceNGoJoE7dy5k2KxyK5duwDYtGkTV1xxBaFj/GD02TCnak433njjjNv/43/8D+69915eeOEFLrrooiP2L5fLlMvl2u1MJnPWYxRCnHnnujwvxLmkPI/hp5/GnpwksmwZmlb9NW8rGsWMRMj19TGyYQORzs4z+r6vq6sjGo1iGAatra1H3N/X18fPfvYzNm/eXBuqeuihh1i4cCH/8i//wsc+9jF6enq47777AHj22We59NJLaW1tZePGjZx//vls3LiR1atXn7GYT8ScSmzeynVdfvrTn5LP57nyyiuPus/tt9/O17/+9XMcmRDiTMr29//6Z0vKZXS/n0hXF23XXSc/WyLmheLQELmBAQJtbbWkZpqmaQTa2sj291McGjqni8Hu3LkT0zR5z3veU9vW0NDA8uXL2blzJwCrV6/mi1/8IuPj42zatImenp5aYnPrrbfy/PPP81d/9VfnLGaYY0NRAK+//jqRSAS/389nP/tZHnvsMS688MKj7vuVr3yFdDpd+2f//v3nOFohxOmYjfK8EOeak8/jlcuYxxiuMYJBPNvGyefPcWRv7+KLL6a+vp5NmzbVEpuenh42bdrE1q1bqVQqtWrPuTLnKjbLly/nlVdeIZ1O8+ijj7J27Vo2bdp01OTG7/fj9/tnIUohxOmarfK8EOeaGQ6j+/04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LC22Ro1G0zhwYgLHRuPoHo3DbJKwutE/bVfOqa0k441bEHv9FcjxMNLlfnRHVYQnosDEKFIOFzxfuwb/a1PrjLqFFoK5DO/n00pENBsE7YujyeapN954A6+88gpuv/12tLS04ODBg7jnnntwxx134KmnnprRe0QiEbjdboTDYbhOWYSN5q/JvWTSY2OFtTROtthkIxGY/X7DDDA8bbn7k+vqKF4vNE1DdmJi2mPOlpY5vVGoqoa/dI3i9U968fE/x5HNq3CYTShzmFHtsSCZVeGzK2hf04A3Dw/hYH8Yi8pP744Yi6XxYXcI8slWD4ssoaXccVogmemOz6qqXVBXzqnnPp9OIy2YINY2ILBxE5ovu/Sc3ovOxJ27aTacy/17wQSbUn7yk5/gmWeewbFjx2b0fAabhanUTX+ub+ZzodQNAMCMjulxo1BVDe93jeJPh4cxEE5CEgGLbDotoHQOR7HzL90IxTOodFtgVSQkM3kMhFPw2mR8fVklypzm8woks4k3X6L57Vzu3wumK6qUcDgM3xemEZ4qnU4jnU4X/x2JROaiLJplczk2QE9TdRPM9NhcE0UB6xYFsLa5bMoWk9mY+TMXOHiVyDgWbLDp7OzEjh07pu2G2r59O37wgx/MYVX0ZeGNZ/462+DX2Zj5Q0Q0U7r/ybtt27bCHkDTPDo6Ok57TV9fH66//nps2bIF99xzz5Tv/eijjyIcDhcfPT09X/a3Q0QlTIafS4Iu1PpsDDVE9KXRfYzNyMgIxsbGpn1OU1NTceZTf38/1q9fj6uuugrPP/88xHPojuAYGyIiooVnQY2xCQQCCAQCM3puX18fNmzYgCuuuAI7d+48p1BDRERExqd7sJmpvr4+rF+/HvX19XjqqacwMjJS/FowGNSxMiIiIpovFkywefPNN9HZ2YnOzk7UfGEQ6QKesU5ERESzaMH05Xz729+GpmklH0RERETAAgo2RERERGfDYENERESGwWBDREREhsFgQ0RERIbBYENERESGwWBDREREhsFgQ0RERIbBYENERESGwWBDREREhsFgQ0RERIbBYENERESGwWBDREREhsFgQ0RERIbBYENERESGwWBDREREhsFgQ0RERIbBYENERESGwWBDREREhsFgQ0RERIbBYENERESGwWBDREREhsFgQ0RERIbBYENERESGwWBDREREhsFgQ0RERIbBYENERESGwWBDREREhsFgQ0RERIbBYENERESGwWBDREREhsFgQ0RERIbBYENERESGwWBDREREhsFgQ0RERIbBYENERESGwWBDREREhsFgQ0RERIbBYENERESGwWBDREREhsFgQ0RERIaxoILNTTfdhLq6OlgsFlRWVuKOO+5Af3+/3mURERHRPLGggs2GDRvw6quv4siRI3j99dfR1dWF2267Te+yiIiIaJ4QNE3T9C7ifP3ud7/DLbfcgnQ6DVmWz/r8SCQCt9uNcDgMl8s1BxUSERHRhTqX+7dpjmqadaFQCC+++CLWrl07ZahJp9NIp9PFf0cikbkqj4iIiHSwoLqiAOCRRx6B3W6H3+/HiRMnsHv37imfu337drjd7uKjtrZ2DislIiKiuaZ7sNm2bRsEQZj20dHRUXz+ww8/jP3792PPnj2QJAl33nknpupNe/TRRxEOh4uPnp6eufq2aJZoqopEby8iR44g0dsLTVX1LomIiOYx3cfYjIyMYGxsbNrnNDU1QVGUM4739vaitrYW77//PtasWXPW/4tjbBaWaGcnBvbsQayrC2o6DdFshqO5GZWbN8PZ0qJ3eURENEcW1BibQCCAQCBwXq9VT/71fuo4GjKGaGcnjr/wAjKhECyVlTDZbMglEogcOoTUwAAa29sZboiI6Ay6B5uZ+uCDD/DRRx9h3bp18Hq96OrqwuOPP47m5uYZtdbQwqGpKgb27EEmFIJj0SIIggAAkJ1OmBwOxI4exeCbb8LR1ARB1L03lYiI5pEFc1ew2Wz4zW9+g40bN2Lx4sW4++67sXz5crz77rswm816l0ezKNnfj1hXFyyVlcVQM0kQBFgqKxHt7ESSizMSEdEXLJgWm2XLluHtt9/WuwyaA7l4HGo6DZPNVvLrktUKdWgIuXh8jisjIqL5bsG02NDFw2S3QzSbkUskSn49n0xCVBSY7PY5royIiOY7Bhuad6xVVXA0NyM1MHDGVH5N05AaGICzpQXWqiqdKiQiovmKwYbmHUEUUbl5MxSfD7GjR5GNRqHmcshGo4gdPQrF50Pw2ms5cJiIiM6wYMbY0MXF2dKCxvb2f61jMzQEUVHgbmtD8NprOdWbiIhKYrChecvZ0gJHUxOS/f3IxeMw2e2wVlWxpYaIiKbEYEPzmiCKsNXU6F0GEREtEPzTl4iIiAyDwYaIiIgMg8GGiIiIDIPBhoiIiAyDwYaIiIgMg8GGiIiIDIPBhoiIiAyDwYaIiIgM46JaoG9yQ8VIJKJzJURERDRTk/ftL26MXMpFFWyi0SgAoLa2VudKiIiI6FxFo1G43e5pnyNoM4k/BqGqKvr7++F0OiEIwgW/XyQSQW1tLXp6euByuWahQmPgeZkaz01pPC+l8byUxvMyNaOeG03TEI1GUVVVBfEs+wVeVC02oiii5kvYd8jlchnqApotPC9T47kpjeelNJ6X0nhepmbEc3O2lppJHDxMREREhsFgQ0RERIYhff/73/++3kUsZJIkYf369TCZLqpevbPieZkaz01pPC+l8byUxvMytYv93FxUg4eJiIjI2NgVRURERIbBYENERESGwWBDREREhsFgQ0RERIbBYENERESGwWAzS2666SbU1dXBYrGgsrISd9xxB/r7+/UuS3fd3d24++670djYCKvViubmZjzxxBPIZDJ6l6a7J598EmvXroXNZoPH49G7HN08/fTTaGhogMViwerVq/Hhhx/qXZLu3nvvPXzjG99AVVUVBEHAb3/7W71Lmhe2b9+OK6+8Ek6nE+Xl5bjllltw5MgRvcvS3TPPPIPly5cXVxtes2YN/vCHP+hdlm4YbGbJhg0b8Oqrr+LIkSN4/fXX0dXVhdtuu03vsnTX0dEBVVXx7LPP4tChQ/jpT3+Kn//853jsscf0Lk13mUwGW7Zswf333693Kbp55ZVX8NBDD+GJJ57Ap59+ihUrVuC6667D8PCw3qXpKh6PY8WKFXj66af1LmVeeffdd7F161bs27cPb775JrLZLDZv3ox4PK53abqqqanBj370I3zyySf4+OOPcc011+Dmm2/GoUOH9C5NHxp9KXbv3q0JgqBlMhm9S5l3fvzjH2uNjY16lzFv7Ny5U3O73XqXoYtVq1ZpW7duLf47n89rVVVV2vbt23Wsan4BoO3atUvvMual4eFhDYD27rvv6l3KvOP1erVf/OIXepehC7bYfAlCoRBefPFFrF27FrIs613OvBMOh+Hz+fQug3SWyWTwySefYNOmTcVjoihi06ZN+Otf/6pjZbRQhMNhAODnySny+TxefvllxONxrFmzRu9ydMFgM4seeeQR2O12+P1+nDhxArt379a7pHmns7MTO3bswL333qt3KaSz0dFR5PN5VFRUnHa8oqICg4ODOlVFC4WqqnjwwQdx9dVXo62tTe9ydPe3v/0NDocDZrMZ9913H3bt2oWlS5fqXZYuGGymsW3bNgiCMO2jo6Oj+PyHH34Y+/fvx549eyBJEu68805oBt2x4lzPDQD09fXh+uuvx5YtW3DPPffoVPmX63zOCxGdu61bt+LgwYN4+eWX9S5lXli8eDEOHDiADz74APfffz/a29tx+PBhvcvSBfeKmsbIyAjGxsamfU5TUxMURTnjeG9vL2pra/H+++8bsjnwXM9Nf38/1q9fj6uuugrPP/88RNGYmfp8rpnnn38eDz74ICYmJr7s8uaVTCYDm82G1157DbfcckvxeHt7OyYmJtjieZIgCNi1a9dp5+hi98ADD2D37t1477330NjYqHc589KmTZvQ3NyMZ599Vu9S5tzFufXnDAUCAQQCgfN6raqqAIB0Oj2bJc0b53Ju+vr6sGHDBlxxxRXYuXOnYUMNcGHXzMVGURRcccUVeOutt4o3bVVV8dZbb+GBBx7QuTqajzRNw3e/+13s2rULe/fuZaiZhqqqhr3/nA2DzSz44IMP8NFHH2HdunXwer3o6urC448/jubmZkO21pyLvr4+rF+/HvX19XjqqacwMjJS/FowGNSxMv2dOHECoVAIJ06cQD6fx4EDBwAALS0tcDgcOlc3Nx566CG0t7fjK1/5ClatWoWf/exniMfjuOuuu/QuTVexWAydnZ3Ffx8/fhwHDhyAz+dDXV2djpXpa+vWrXjppZewe/duOJ3O4lgst9sNq9Wqc3X6efTRR3HDDTegrq4O0WgUL730Evbu3Ys//vGPepemD30nZRnD559/rm3YsEHz+Xya2WzWGhoatPvuu0/r7e3VuzTd7dy5UwNQ8nGxa29vL3le3nnnHb1Lm1M7duzQ6urqNEVRtFWrVmn79u3TuyTdvfPOOyWvjfb2dr1L09VUnyU7d+7UuzRdfec739Hq6+s1RVG0QCCgbdy4UduzZ4/eZemGY2yIiIjIMIw72IGIiIguOgw2REREZBgMNkRERGQYDDZERERkGAw2REREZBgMNkRERGQYDDZERERkGAw2REREZBgMNkRERGQYDDZEtOD86le/gtVqxcDAQPHYXXfdheXLlyMcDutYGRHpjVsqENGCo2kaVq5cia9+9avYsWMHnnjiCTz33HPYt28fqqur9S6PiHTE3b2JaMERBAFPPvkkbrvtNgSDQezYsQN//vOfi6Hm1ltvxd69e7Fx40a89tprOldLRHOJLTZEtGBdfvnlOHToEPbs2YOvfe1rxeN79+5FNBrFCy+8wGBDdJHhGBsiWpDeeOMNdHR0IJ/Po6Ki4rSvrV+/Hk6nU6fKiEhPDDZEtOB8+umn+OY3v4lf/vKX2LhxIx5//HG9SyKieYJjbIhoQenu7saNN96Ixx57DLfffjuampqwZs0afPrpp7j88sv1Lo+IdMYWGyJaMEKhEK6//nrcfPPN2LZtGwBg9erVuOGGG/DYY4/pXB0RzQdssSGiBcPn86Gjo+OM47///e91qIaI5iPOiiIiw9m0aRM+++wzxONx+Hw+/PrXv8aaNWv0LouI5gCDDRERERkGx9gQERGRYTDYEBERkWEw2BAREZFhMNgQERGRYTDYEBERkWEw2BAREZFhMNgQERGRYTDYEBERkWEw2BAREZFhMNgQERGRYTDYEBERkWH8f8yXJw9qH8w7AAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "X_flow = flow_dist.sample(torch.Size([1000,])).detach().numpy()\n", + "plt.title(r'Joint Distribution')\n", + "plt.xlabel(r'$x_1$')\n", + "plt.ylabel(r'$x_2$')\n", + "plt.scatter(X[:,0], X[:,1], label='data', alpha=0.5)\n", + "plt.scatter(X_flow[:,0], X_flow[:,1], color='firebrick', label='flow', alpha=0.5)\n", + "plt.legend()\n", + "plt.show()\n", + "\n", + "plt.subplot(1, 2, 1)\n", + "sns.distplot(X[:,0], hist=False, kde=True,\n", + " bins=None,\n", + " hist_kws={'edgecolor':'black'},\n", + " kde_kws={'linewidth': 2},\n", + " label='data')\n", + "sns.distplot(X_flow[:,0], hist=False, kde=True,\n", + " bins=None, color='firebrick',\n", + " hist_kws={'edgecolor':'black'},\n", + " kde_kws={'linewidth': 2},\n", + " label='flow')\n", + "plt.title(r'$p(x_1)$')\n", + "plt.subplot(1, 2, 2)\n", + "sns.distplot(X[:,1], hist=False, kde=True,\n", + " bins=None,\n", + " hist_kws={'edgecolor':'black'},\n", + " kde_kws={'linewidth': 2},\n", + " label='data')\n", + "sns.distplot(X_flow[:,1], hist=False, kde=True,\n", + " bins=None, color='firebrick',\n", + " hist_kws={'edgecolor':'black'},\n", + " kde_kws={'linewidth': 2},\n", + " label='flow')\n", + "plt.title(r'$p(x_2)$')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we can see, we have learnt close approximations to the marginal distributions, $p(x_1),p(x_2)$. It would have been challenging to fit the irregularly shaped marginals with standard methods, e.g., a mixture of normal distributions. As expected, since there is a dependency between the two dimensions, we do not learn a good representation of the joint, $p(x_1,x_2)$. In the next section, we explain how to learn multivariate distributions whose dimensions are not independent." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Multivariate Distributions\n", + "\n", + "### Background\n", + "\n", + "The fundamental idea of normalizing flows also applies to multivariate random variables, and this is where its value is clearly seen - *representing complex high-dimensional distributions*. In this case, a simple multivariate source of noise, for example a standard i.i.d. normal distribution, $X\\sim\\mathcal{N}(\\mathbf{0},I_{D\\times D})$, is passed through a vector-valued bijection, $g:\\mathbb{R}^D\\rightarrow\\mathbb{R}^D$, to produce the more complex transformed variable $Y=g(X)$.\n", + "\n", + "Sampling $Y$ is again trivial and involves evaluation of the forward pass of $g$. We can score $Y$ using the multivariate substitution rule of integral calculus,\n", + "\n", + "\\begin{align}\n", + "\\mathbb{E}_{p_X(\\cdot)}\\left[f(X)\\right] &= \\int_{\\text{supp}(X)}f(\\mathbf{x})p_X(\\mathbf{x})d\\mathbf{x}\\\\\n", + "&= \\int_{\\text{supp}(Y)}f(g^{-1}(\\mathbf{y}))p_X(g^{-1}(\\mathbf{y}))\\left|\\det\\frac{d\\mathbf{x}}{d\\mathbf{y}}\\right|d\\mathbf{y}\\\\\n", + "&= \\mathbb{E}_{p_Y(\\cdot)}\\left[f(g^{-1}(Y))\\right],\n", + "\\end{align}\n", + "\n", + "where $\\det \\frac{d\\mathbf{x}}{d\\mathbf{y}}$ denotes the determinant of the Jacobian matrix of $g^{-1}(\\mathbf{y})$. Equating the last two lines we get,\n", + "\n", + "\\begin{align}\n", + "\\log p_Y(y) &= \\log p_X(g^{-1}(y)) + \\log\\left|\\det\\frac{d\\mathbf{x}}{d\\mathbf{y}}\\right|\\\\\n", + "&= \\log p_X(g^{-1}(y)) - \\log\\left|\\det\\frac{d\\mathbf{y}}{d\\mathbf{x}}\\right|.\n", + "\\end{align}\n", + "\n", + "Inituitively, this equation says that the density of $Y$ is equal to the density at the corresponding point in $X$ plus a term that corrects for the warp in volume around an infinitesimally small volume around $Y$ caused by the transformation. For instance, in $2$-dimensions, the geometric interpretation of the absolute value of the determinant of a Jacobian is that it represents the area of a parallelogram with edges defined by the columns of the Jacobian. In $n$-dimensions, the geometric interpretation of the absolute value of the determinant Jacobian is that is represents the hyper-volume of a parallelepiped with $n$ edges defined by the columns of the Jacobian (see a calculus reference such as \\[7\\] for more details).\n", + "\n", + "Similar to the univariate case, we can compose such bijective transformations to produce even more complex distributions. By an inductive argument, if we have a sequence of $L$ transforms $(g_1, g_2, \\ldots, g_L)$ such that $Y = g(X) = g_L \\circ \\cdots g_2 \\circ g_1(X)$, then the log-density of $Y$ is\n", + "\n", + "\\begin{align}\n", + "\\log p_Y(y) = \\log p_X(y_0) + \\sum^{L}_{l=1} \\log \\left| \\det \\frac{dg^{-1}_{l}(y_l)}{dy_{l}} \\right|\n", + "\\end{align}\n", + "\n", + "where $y_{l} = y$ and $y_{l-1} = g^{-1}_l(y_{l})$.\n", + "\n", + "The main challenge is in designing parametrizable multivariate bijections that have closed form expressions for both $g$ and $g^{-1}$, a tractable Jacobian determinant whose calculation scales with $O(D)$ rather than $O(D^3)$, and can express a flexible class of functions." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Multivariate Transforms in Pyro\n", + "\n", + "Up to this point we have used element-wise transforms in Pyro. These are indicated by having the property `transform.event_dim == 0` set on the transform object. Such element-wise transforms can only be used to represent univariate distributions and multivariate distributions whose dimensions are independent (known in variational inference as the mean-field approximation).\n", + "\n", + "The power of Normalizing Flow, however, is most apparent in their ability to model complex high-dimensional distributions with neural networks and Pyro contains several such flows for accomplishing this. Transforms that operate on vectors have the property `transform.event_dim == 1`, transforms on matrices with `transform.event_dim == 2`, and so on. In general, the `event_dim` property of a transform indicates how many dependent dimensions there are in the output of a transform.\n", + "\n", + "In this section, we show how to use [SplineCoupling](http://docs.pyro.ai/en/stable/distributions.html#pyro.distributions.transforms.SplineCoupling) to learn the bivariate toy distribution from our running example. A coupling transform \\[8, 9\\] divides the input variable into two parts and applies an element-wise bijection to the section half whose parameters are a function of the first. Optionally, an element-wise bijection is also applied to the first half. Dividing the inputs at $d$, the transform is,\n", + "\n", + "\\begin{align}\n", + "\\mathbf{y}_{1:d} &= g_\\theta(\\mathbf{x}_{1:d})\\\\\n", + "\\mathbf{y}_{(d+1):D} &= h_\\phi(\\mathbf{x}_{(d+1):D};\\mathbf{x}_{1:d}),\n", + "\\end{align}\n", + "\n", + "where $\\mathbf{x}_{1:d}$ represents the first $d$ elements of the inputs, $g_\\theta$ is either the identity function or an elementwise bijection parameters $\\theta$, and $h_\\phi$ is an element-wise bijection whose parameters are a function of $\\mathbf{x}_{1:d}$.\n", + "\n", + "This type of transform is easily invertible. We invert the first half, $\\mathbf{y}_{1:d}$, then use the resulting $\\mathbf{x}_{1:d}$ to evaluate $\\phi$ and invert the second half,\n", + "\n", + "\\begin{align}\n", + "\\mathbf{x}_{1:d} &= g_\\theta^{-1}(\\mathbf{y}_{1:d})\\\\\n", + "\\mathbf{x}_{(d+1):D} &= h_\\phi^{-1}(\\mathbf{y}_{(d+1):D};\\mathbf{x}_{1:d}).\n", + "\\end{align}\n", + "\n", + "Difference choices for $g$ and $h$ form different types of coupling transforms. When both are monotonic rational splines, the transform is the spline coupling layer of Neural Spline Flow \\[5,6\\], which is represented in Pyro by the [SplineCoupling](http://docs.pyro.ai/en/stable/distributions.html#pyro.distributions.transforms.SplineCoupling) class. As shown in the references, when we combine a sequence of coupling layers sandwiched between random permutations so we introduce dependencies between all dimensions, we can model complex multivariate distributions.\n", + "\n", + "Most of the learnable transforms in Pyro have a corresponding helper function that takes care of constructing a neural network for the transform with the correct output shape. This neural network outputs the parameters of the transform and is known as a [hypernetwork](https://arxiv.org/abs/1609.09106) \\[10\\]. The helper functions are represented by lower-case versions of the corresponding class name, and usually input at the very least the input-dimension or shape of the distribution to model. For instance, the helper function corresponding to [SplineCoupling](http://docs.pyro.ai/en/stable/distributions.html#pyro.distributions.transforms.SplineCoupling) is [spline_coupling](http://docs.pyro.ai/en/stable/distributions.html#spline-coupling). We create a bivariate flow with a single spline coupling layer as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "base_dist = dist.Normal(torch.zeros(2), torch.ones(2))\n", + "spline_transform = T.spline_coupling(2, count_bins=16)\n", + "flow_dist = dist.TransformedDistribution(base_dist, [spline_transform])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Similarly to before, we train this distribution on the toy dataset and plot the results:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "step: 0, loss: 8.446191787719727\n", + "step: 500, loss: 2.0197808742523193\n", + "step: 1000, loss: 1.794958472251892\n", + "step: 1500, loss: 1.73616361618042\n", + "step: 2000, loss: 1.7254879474639893\n", + "step: 2500, loss: 1.691617488861084\n", + "step: 3000, loss: 1.679549217224121\n", + "step: 3500, loss: 1.6967085599899292\n", + "step: 4000, loss: 1.6723777055740356\n", + "step: 4500, loss: 1.6505967378616333\n", + "step: 5000, loss: 1.8024061918258667\n", + "CPU times: user 10min 41s, sys: 14.7 s, total: 10min 56s\n", + "Wall time: 1min 39s\n" + ] + } + ], + "source": [ + "%%time\n", + "steps = 1 if smoke_test else 5001\n", + "dataset = torch.tensor(X, dtype=torch.float)\n", + "optimizer = torch.optim.Adam(spline_transform.parameters(), lr=5e-3)\n", + "for step in range(steps+1):\n", + " optimizer.zero_grad()\n", + " loss = -flow_dist.log_prob(dataset).mean()\n", + " loss.backward()\n", + " optimizer.step()\n", + " flow_dist.clear_cache()\n", + "\n", + " if step % 500 == 0:\n", + " print('step: {}, loss: {}'.format(step, loss.item()))" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "X_flow = flow_dist.sample(torch.Size([1000,])).detach().numpy()\n", + "plt.title(r'Joint Distribution')\n", + "plt.xlabel(r'$x_1$')\n", + "plt.ylabel(r'$x_2$')\n", + "plt.scatter(X[:,0], X[:,1], label='data', alpha=0.5)\n", + "plt.scatter(X_flow[:,0], X_flow[:,1], color='firebrick', label='flow', alpha=0.5)\n", + "plt.legend()\n", + "plt.show()\n", + "\n", + "plt.subplot(1, 2, 1)\n", + "sns.distplot(X[:,0], hist=False, kde=True,\n", + " bins=None,\n", + " hist_kws={'edgecolor':'black'},\n", + " kde_kws={'linewidth': 2},\n", + " label='data')\n", + "sns.distplot(X_flow[:,0], hist=False, kde=True,\n", + " bins=None, color='firebrick',\n", + " hist_kws={'edgecolor':'black'},\n", + " kde_kws={'linewidth': 2},\n", + " label='flow')\n", + "plt.title(r'$p(x_1)$')\n", + "plt.subplot(1, 2, 2)\n", + "sns.distplot(X[:,1], hist=False, kde=True,\n", + " bins=None,\n", + " hist_kws={'edgecolor':'black'},\n", + " kde_kws={'linewidth': 2},\n", + " label='data')\n", + "sns.distplot(X_flow[:,1], hist=False, kde=True,\n", + " bins=None, color='firebrick',\n", + " hist_kws={'edgecolor':'black'},\n", + " kde_kws={'linewidth': 2},\n", + " label='flow')\n", + "plt.title(r'$p(x_2)$')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We see from the output that this normalizing flow has successfully learnt both the univariate marginals *and* the bivariate distribution." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Conditional versus Joint Distributions\n", + "\n", + "### Background\n", + "\n", + "In many cases, we wish to represent conditional rather than joint distributions. For instance, in performing variational inference, the variational family is a class of conditional distributions,\n", + "\n", + "$$\n", + "\\begin{align}\n", + "\\{q_\\psi(\\mathbf{z}\\mid\\mathbf{x})\\mid\\theta\\in\\Theta\\},\n", + "\\end{align}\n", + "$$\n", + "\n", + "where $\\mathbf{z}$ is the latent variable and $\\mathbf{x}$ the observed one, that hopefully contains a member close to the true posterior of the model, $p(\\mathbf{z}\\mid\\mathbf{x})$. In other cases, we may wish to learn to generate an object $\\mathbf{x}$ conditioned on some context $\\mathbf{c}$ using $p_\\theta(\\mathbf{x}\\mid\\mathbf{c})$ and observations $\\{(\\mathbf{x}_n,\\mathbf{c}_n)\\}^N_{n=1}$. For instance, $\\mathbf{x}$ may be a spoken sentence and $\\mathbf{c}$ a number of speech features.\n", + "\n", + "The theory of Normalizing Flows is easily generalized to conditional distributions. We denote the variable to condition on by $C=\\mathbf{c}\\in\\mathbb{R}^M$. A simple multivariate source of noise, for example a standard i.i.d. normal distribution, $X\\sim\\mathcal{N}(\\mathbf{0},I_{D\\times D})$, is passed through a vector-valued bijection that also conditions on C, $g:\\mathbb{R}^D\\times\\mathbb{R}^M\\rightarrow\\mathbb{R}^D$, to produce the more complex transformed variable $Y=g(X;C=\\mathbf{c})$. In practice, this is usually accomplished by making the parameters for a known normalizing flow bijection $g$ the output of a hypernet neural network that inputs $\\mathbf{c}$.\n", + "\n", + "Sampling of conditional transforms simply involves evaluating $Y=g(X; C=\\mathbf{c})$. Conditioning the bijections on $\\mathbf{c}$, the same formula holds for scoring as for the joint multivariate case." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Conditional Transforms in Pyro\n", + "\n", + "In Pyro, most learnable transforms have a corresponding conditional version that derives from [ConditionalTransformModule](http://docs.pyro.ai/en/stable/distributions.html#conditionaltransformmodule). For instance, the conditional version of the spline transform is [ConditionalSpline](http://docs.pyro.ai/en/stable/distributions.html#conditionalspline) with helper function [conditional_spline](http://docs.pyro.ai/en/stable/distributions.html#conditional-spline).\n", + "\n", + "In this section, we will show how we can learn our toy dataset as the decomposition of the product of a conditional and a univariate distribution,\n", + "\n", + "$$\n", + "\\begin{align}\n", + "p(x_1,x_2) &= p(x_2\\mid x_1)p(x_1).\n", + "\\end{align}\n", + "$$\n", + "\n", + "First, we create the univariate distribution for $x_1$ as shown previously," + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "dist_base = dist.Normal(torch.zeros(1), torch.ones(1))\n", + "x1_transform = T.spline(1)\n", + "dist_x1 = dist.TransformedDistribution(dist_base, [x1_transform])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A conditional transformed distribution is created by passing the base distribution and list of conditional and non-conditional transforms to the [ConditionalTransformedDistribution](http://docs.pyro.ai/en/stable/distributions.html#conditionaltransformeddistribution) class:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "x2_transform = T.conditional_spline(1, context_dim=1)\n", + "dist_x2_given_x1 = dist.ConditionalTransformedDistribution(dist_base, [x2_transform])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You will notice that we pass the dimension of the context variable, $M=1$, to the conditional spline helper function.\n", + "\n", + "Until we condition on a value of $x_1$, the [ConditionalTransformedDistribution](http://docs.pyro.ai/en/stable/distributions.html#conditionaltransformeddistribution) object is merely a placeholder and cannot be used for sampling or scoring. By calling its [.condition(context)](http://docs.pyro.ai/en/stable/distributions.html#pyro.distributions.ConditionalDistribution.condition) method, we obtain a [TransformedDistribution](https://pytorch.org/docs/master/distributions.html#transformeddistribution) for which all its conditional transforms have been conditioned on `context`.\n", + "\n", + "For example, to draw a sample from $x_2\\mid x_1=1$:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tensor([-0.4529])\n" + ] + } + ], + "source": [ + "x1 = torch.ones(1)\n", + "print(dist_x2_given_x1.condition(x1).sample())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In general, the context variable may have batch dimensions and these dimensions must broadcast over the batch dimensions of the input variable.\n", + "\n", + "Now, combining the two distributions and training it on the toy dataset:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "step: 0, loss: 5.663331031799316\n", + "step: 500, loss: 2.040316581726074\n", + "step: 1000, loss: 1.9603266716003418\n", + "step: 1500, loss: 1.8922736644744873\n", + "step: 2000, loss: 1.8509924411773682\n", + "step: 2500, loss: 1.8328033685684204\n", + "step: 3000, loss: 1.9166260957717896\n", + "step: 3500, loss: 1.877435326576233\n", + "step: 4000, loss: 1.8416743278503418\n", + "step: 4500, loss: 1.8379391431808472\n", + "step: 5000, loss: 1.824593424797058\n", + "CPU times: user 9min 24s, sys: 5.93 s, total: 9min 30s\n", + "Wall time: 1min 23s\n" + ] + } + ], + "source": [ + "%%time\n", + "steps = 1 if smoke_test else 5001\n", + "modules = torch.nn.ModuleList([x1_transform, x2_transform])\n", + "optimizer = torch.optim.Adam(modules.parameters(), lr=3e-3)\n", + "x1 = dataset[:,0][:,None]\n", + "x2 = dataset[:,1][:,None]\n", + "for step in range(steps):\n", + " optimizer.zero_grad()\n", + " ln_p_x1 = dist_x1.log_prob(x1)\n", + " ln_p_x2_given_x1 = dist_x2_given_x1.condition(x1.detach()).log_prob(x2.detach())\n", + " loss = -(ln_p_x1 + ln_p_x2_given_x1).mean()\n", + " loss.backward()\n", + " optimizer.step()\n", + " dist_x1.clear_cache()\n", + " dist_x2_given_x1.clear_cache()\n", + "\n", + " if step % 500 == 0:\n", + " print('step: {}, loss: {}'.format(step, loss.item()))" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjYAAAHHCAYAAACskBIUAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdeZRcdZ3//+fda6/qfUl3tk4ICQTiACKyJIKBH3xFdNRxQIV8xXXcZpzjOc5yFL/OjDjoEWSOCC4YEdQvOIjDVyFRSRhWA0owIUt3p5NO0vtSe9Xdf38U6aFJAknIQpr345yck7r1qbrvqk5yX/lsVwnDMEQIIYQQYgZQT3QBQgghhBBHiwQbIYQQQswYEmyEEEIIMWNIsBFCCCHEjCHBRgghhBAzhgQbIYQQQswYEmyEEEIIMWNIsBFCCCHEjCHBRgghhBAzhgQbId6AfvSjH6EoCjt37jzRpRzQqlWrmDt37nE519y5c1m1atXU433fzTPPPHNczr9ixQpWrFhxXM4lxBuBBBshTmLH+yIM8MILL3DDDTcccii64YYbUBRl6lcsFmP27NlceeWV3Hnnndi2fULqOp5ez7UJMdPoJ7oAIcTx96EPfYi//uu/xrKsw37tCy+8wFe+8hVWrFhxWL0qt912G4lEAtu22bt3Lw8//DAf/vCHufnmm3nwwQfp7Oycavu9732PIAiOS13btm1DVY/t//FeqbY1a9Yc03ML8UYjwUaINyBN09A07bie873vfS+NjY1Tj7/0pS9x9913c+211/K+972Pp556auo5wzCOaS1hGFKtVolGo0cU7o4m0zRP6PmFmGlkKEqIGeb3v/89F154IfF4nEwmw1VXXcWWLVumtTnQHJu5c+fyjne8g8cee4w3v/nNRCIR5s+fz49//ONpr3vf+94HwNve9rap4aV169YdUa0f+MAH+MhHPsLTTz/N2rVrp44faI7Nz372M8466yySySSpVIqlS5dyyy23HFJd+z7bww8/zNlnn000GuX222+feu6lc2z2KZfLfPzjH6ehoYFUKsW1117L5OTktDaKonDDDTfs99qXvuer1XagOTYjIyNcf/31tLS0EIlEOPPMM1m9evW0Njt37kRRFL7xjW9wxx130NXVhWVZnHPOOWzYsOGA37cQbwQSbISYQX77299y2WWXMTIywg033MDnP/95nnjiCc4///xDmt/R09PDe9/7XlauXMk3v/lN6urqWLVqFZs3bwbgoosu4rOf/SwA//iP/8hdd93FXXfdxeLFi4+45g996EPAKw/JrF27lquvvpq6ujq+/vWvc+ONN7JixQoef/zxQ65r27ZtXH311axcuZJbbrmFZcuWvWJdn/70p9myZQs33HAD1157LXfffTfvete7CMPwsD7f4X5nlUqFFStWcNddd/GBD3yAm266iXQ6zapVq6aC3Evdc8893HTTTXz84x/nX/7lX9i5cyd/+Zd/ieu6h1WnEDNGKIQ4ad15550hEG7YsCEMwzBctmxZ2NzcHI6Pj0+12bhxY6iqanjttdfu97q+vr6pY3PmzAmB8NFHH506NjIyElqWFf793//91LF77703BMJHHnnkkGr88pe/HALh6OjoAZ+fnJwMgfDd73731LHrrrsunDNnztTjz33uc2EqlQo9zzvoeV6prn2f7aGHHjrgc9ddd93U433fzVlnnRU6jjN1/N///d9DIHzggQemjgHhl7/85Vd9z1eqbfny5eHy5cunHt98880hEP7kJz+ZOuY4TnjeeeeFiUQizOfzYRiGYV9fXwiEDQ0N4cTExFTbBx54IATC//qv/9rvXEK8EUiPjRAzxODgIM899xyrVq2ivr5+6vgZZ5zBypUr+fWvf/2q77FkyRIuvPDCqcdNTU0sWrSIHTt2HJOaARKJBACFQuGgbTKZDKVSadpw1eGaN28el1122SG3/9jHPjZtrs8nP/lJdF0/pO/xtfj1r39Na2srV1999dQxwzD47Gc/S7FYZP369dPav//976eurm7q8b6f37H8mQnxeibBRogZYteuXQAsWrRov+cWL17M2NgYpVLpFd9j9uzZ+x2rq6vbb27J0VQsFgFIJpMHbfM3f/M3nHLKKVx++eV0dHTw4Q9/mIceeuiwzjNv3rzDar9w4cJpjxOJBG1tbcd8yfauXbtYuHDhfiu19g1d7fs57/Pyn9m+kHMsf2ZCvJ5JsBFCTDnYSqnwMOeVHI5NmzYBsGDBgoO2aW5u5rnnnuNXv/oV73znO3nkkUe4/PLLue666w75PNFo9DXXeqh83z9u5zoRPzMhXs8k2AgxQ8yZMweoTZJ9ua1bt9LY2Eg8Hn/N51EU5TW/x0vdddddAK86TGSaJldeeSXf+c536O3t5eMf/zg//vGP6enpOSZ1dXd3T3tcLBYZHByctlqrrq6ObDY7rZ3jOAwODk47dji1zZkzh+7u7v328dm6devU80KIg5NgI8QM0dbWxrJly1i9evW0i+2mTZtYs2YNV1xxxVE5z75w9PIL+pG45557+P73v895553HJZdcctB24+Pj0x6rqsoZZ5wBMLVz8dGsC+COO+6YtrLotttuw/M8Lr/88qljXV1dPProo/u97uU9NodT2xVXXMHQ0BA///nPp455nsett95KIpFg+fLlR/R5hHijkA36hJhBbrrpJi6//HLOO+88rr/+eiqVCrfeeivpdPqA+60ciWXLlqFpGl//+tfJ5XJYlsXFF19Mc3PzK77uvvvuI5FI4DjO1M7Djz/+OGeeeSb33nvvK772Ix/5CBMTE1x88cV0dHSwa9cubr31VpYtWzY19+RI6zoYx3G45JJL+Ku/+iu2bdvGd77zHS644ALe+c53TqvrE5/4BO95z3tYuXIlGzdu5OGHH562EeHh1vaxj32M22+/nVWrVvHss88yd+5c7rvvPh5//HFuvvnmV5yLJISQYCPESW3fPIp98yze/va389BDD/HlL3+ZL33pSxiGwfLly/n6179+2JNnD6a1tZXvfve7fO1rX+P666/H930eeeSRVw0Qn/zkJwGIRCI0NjaybNkyfvjDH3LNNde86u6/H/zgB7njjjv4zne+QzabpbW1lfe///3ccMMNU5Nsj7Sug/mP//gP7r77br70pS/hui5XX3013/72t6cNK330ox+lr6+PH/zgBzz00ENceOGFrF27dr/ep8OpLRqNsm7dOr74xS+yevVq8vk8ixYt4s477zzgRoJCiOmUUGaYCXHS+va3v83nPvc5enp66OrqOtHlCCHECSdzbIQ4iW3YsIF4PC4TSoUQ4kUyFCXESegXv/gF69at4+677+YjH/kIui5/lYUQAmQoSoiT0rx58ygUCrz73e/m5ptvPirLuIUQYiaQYCOEEEKIGUPm2AghhBBixpBgI4QQQogZ4w014zAIAgYGBkgmk0d9+3UhhBBCHBthGFIoFGhvb9/vBrEv94YKNgMDA3R2dp7oMoQQQghxBHbv3k1HR8crtnlDBZt9W5Hv3r2bVCp1gqsRQgghxKHI5/N0dnYe0i1F3lDBZt/wUyqVkmAjhBBCnGQO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Zo376le/yte//nUOHz7c7FLWpG9961t84QtfYGlpqdmltLxrr72Wq6++mr/+678GGkNxBwcH+fznP89dd93V5OrWJkVR+P73v8/tt9/e7FLWtLm5Obq6unjqqae48cYbm13OL02u2KxxhUKBXC7X7DKEeFe5rsvPf/5zdu3atfIxVVXZtWsXzz77bBMrE6L5CoUCQMucCyTYrGEjIyPcf//9fPazn212KUK8q+bn5wmCgO7u7lM+3t3dzfT0dJOqEqL5wjDkC1/4AjfccAPbtm1rdjnnhASbFnDXXXehKMoZ3w4cOHDK50xMTHDbbbdxxx138JnPfKZJlbeWd3IchBCime6880727dvHP/3TPzW7lHOmNSZerXG///u/z6c+9akzPmdoaGjlvycnJ7n55pu5/vrr+du//dt3ubq14+0eB3H+dHR0oGkaMzMzp3x8ZmaGnp6eJlUlRHN97nOf4z/+4z94+umnGRgYaHY554wEmxbQ2dlJZ2fnWT13YmKCm2++mR07dvDAAw+gqnLR7lx5O8dBnF+mabJjxw4ee+yxlYWqYRjy2GOP8bnPfa7J1QlxfkVRxOc//3m+//3v8+STT7Jx48Zml3ROSbBZQyYmJti5cyfr16/nvvvuY25ubuUx+av1/BobGyOfzzM2NkYQBLzwwgsADA8Pk0wmm1xda/riF7/Inj17uOqqq7jmmmv4y7/8SyqVCp/+9KebXdqaUi6XGRkZWXn/yJEjvPDCC+RyOdatW9fEytaOO++8k29/+9s89NBDpFKplXVmmUyGWCzW5OrOgUisGQ888EAEnPZNnF979uw57XF44oknml1aS7v//vujdevWRaZpRtdcc0303HPPNbukNeeJJ5447c/+nj17ml3amvFm54EHHnig2aWdE9LHRgghhBAtQxZYCCGEEKJlSLARQgghRMuQYCOEEEKIliHBRgghhBAtQ4KNEEIIIVqGBBshhBBCtAwJNkIIIYRoGRJshBBCCNEyJNgIIYQQomVIsBFCrDr/+I//SCwWY2pqauVjn/70p7nssssoFApNrEwI0WwyUkEIsepEUcQVV1zBjTfeyP33388999zDN7/5TZ577jn6+/ubXZ4QoolkurcQYtVRFIUvf/nLfOxjH6Onp4f777+fH/3oRyuh5qMf/ShPPvkkt9xyC9/73veaXK0Q4nySKzZCiFXryiuvZP/+/TzyyCPcdNNNKx9/8sknKZVKPPjggxJshFhjZI2NEGJVevjhhzlw4ABBENDd3X3KYzt37iSVSjWpMiFEM0mwEUKsOnv37uU3fuM3+Pu//3tuueUWvvSlLzW7JCHEBULW2AghVpWjR4/yoQ99iLvvvpuPf/zjDA0Ncd1117F3716uvPLKZpcnhGgyuWIjhFg18vk8t912Gx/5yEe46667ALj22mv54Ac/yN13393k6oQQFwK5YiOEWDVyuRwHDhx4w8d/8IMfNKEaIcSFSHZFCSFazq5du3jxxRepVCrkcjm++93vct111zW7LCHEeSDBRgghhBAtQ9bYCCGEEKJlSLARQgghRMuQYCOEEEKIliHBRgghhBAtQ4KNEEIIIVqGBBshhBBCtAwJNkIIIYRoGRJshBBCCNEyJNgIIYQQomVIsBFCCCFEy5BgI4QQQoiW8f8BHpfiD8T6k7sAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "X = torch.cat((x1, x2), dim=-1)\n", + "x1_flow = dist_x1.sample(torch.Size([1000,]))\n", + "x2_flow = dist_x2_given_x1.condition(x1_flow).sample(torch.Size([1000,]))\n", + "X_flow = torch.cat((x1_flow, x2_flow), dim=-1)\n", + "\n", + "plt.title(r'Joint Distribution')\n", + "plt.xlabel(r'$x_1$')\n", + "plt.ylabel(r'$x_2$')\n", + "plt.scatter(X[:,0], X[:,1], label='data', alpha=0.5)\n", + "plt.scatter(X_flow[:,0], X_flow[:,1], color='firebrick', label='flow', alpha=0.5)\n", + "plt.legend()\n", + "plt.show()\n", + "\n", + "plt.subplot(1, 2, 1)\n", + "sns.distplot(X[:,0], hist=False, kde=True,\n", + " bins=None,\n", + " hist_kws={'edgecolor':'black'},\n", + " kde_kws={'linewidth': 2},\n", + " label='data')\n", + "sns.distplot(X_flow[:,0], hist=False, kde=True,\n", + " bins=None, color='firebrick',\n", + " hist_kws={'edgecolor':'black'},\n", + " kde_kws={'linewidth': 2},\n", + " label='flow')\n", + "plt.title(r'$p(x_1)$')\n", + "plt.subplot(1, 2, 2)\n", + "sns.distplot(X[:,1], hist=False, kde=True,\n", + " bins=None,\n", + " hist_kws={'edgecolor':'black'},\n", + " kde_kws={'linewidth': 2},\n", + " label='data')\n", + "sns.distplot(X_flow[:,1], hist=False, kde=True,\n", + " bins=None, color='firebrick',\n", + " hist_kws={'edgecolor':'black'},\n", + " kde_kws={'linewidth': 2},\n", + " label='flow')\n", + "plt.title(r'$p(x_2)$')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Conclusions\n", + "\n", + "In this tutorial, we have explained the basic idea behind normalizing flows and the Pyro interface to create flows to represent univariate, multivariate, and conditional distributions. It is useful to think of flows as a powerful general-purpose tool in your probabilistic modelling toolkit, and you can replace any existing distribution in your model with one to increase its flexibility and performance. We hope you have fun exploring the power of normalizing flows!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### References\n", + "\n", + "1. E.G. Tabak, Christina Turner. [*A Family of Nonparametric Density Estimation Algorithms*](https://www.math.nyu.edu/faculty/tabak/publications/Tabak-Turner.pdf). Communications on Pure and Applied Mathematics, 66(2):145–164, 2013.\n", + "2. Danilo Jimenez Rezende, Shakir Mohamed. [*Variational Inference with Normalizing Flows*](http://proceedings.mlr.press/v37/rezende15.pdf). ICML 2015.\n", + "3. Ivan Kobyzev, Simon J.D. Prince, and Marcus A. Brubaker. [*Normalizing Flows: An Introduction and Review of Current Methods*](https://arxiv.org/abs/1908.09257). \\[arXiv:1908.09257\\] 2019.\n", + "4. George Papamakarios, Eric Nalisnick, Danilo Jimenez Rezende, Shakir Mohamed, Balaji Lakshminarayanan. [*Normalizing Flows for Probabilistic Modeling and Inference*](https://arxiv.org/abs/1912.02762). \\[arXiv:1912.02762\\] 2019.\n", + "5. Conor Durkan, Artur Bekasov, Iain Murray, George Papamakarios. [*Neural Spline Flows*](https://arxiv.org/abs/1906.04032). NeurIPS 2019.\n", + "6. Hadi M. Dolatabadi, Sarah Erfani, Christopher Leckie. [*Invertible Generative Modeling using Linear Rational Splines*](https://arxiv.org/abs/2001.05168). AISTATS 2020.\n", + "7. James Stewart. [*Calculus*](https://www.stewartcalculus.com/). Cengage Learning. 9th Edition 2020.\n", + "8. Laurent Dinh, David Krueger, Yoshua Bengio. [*NICE: Non-linear Independent Components Estimation*](https://arxiv.org/abs/1410.8516). Workshop contribution at ICLR 2015.\n", + "9. Laurent Dinh, Jascha Sohl-Dickstein, Samy Bengio. [*Density estimation using Real-NVP*](https://arxiv.org/abs/1605.08803). Conference paper at ICLR 2017.\n", + "10. David Ha, Andrew Dai, Quoc V. Le. [*HyperNetworks*](https://arxiv.org/abs/1609.09106). Workshop contribution at ICLR 2017." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/predictive_deterministic.ipynb b/pyro/source/tutorial/source/predictive_deterministic.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..61269125c674105cf4e36995dc0691739933bb89 --- /dev/null +++ b/pyro/source/tutorial/source/predictive_deterministic.ipynb @@ -0,0 +1,896 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "bcc8b28e-8773-478e-9be6-87f9df0f2d77", + "metadata": {}, + "source": [ + "# Example: Utilizing Predictive and Deterministic with MCMC and SVI\n", + "\n", + "In this short tutorial we'll see how to use `deterministic` statements inside a model and inspect its samples with `Predictive` class. Additionally a `GammaPoisson` distribution will be discussed as it'll be used within our model.\n", + "\n", + "Check out other tutorials that use `Predictive` and `Deterministic`:\n", + "\n", + "- [Example: analyzing baseball stats with MCMC](http://pyro.ai/examples/baseball.html)\n", + "- [Bayesian Regression - Inference Algorithms (Part 2)](http://pyro.ai/examples/bayesian_regression_ii.html)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "35e41be6-291e-452d-b934-7e9f3a7532b1", + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "from sklearn.datasets import make_regression\n", + "import pyro.distributions as dist\n", + "from pyro.infer import MCMC, NUTS, Predictive\n", + "from pyro.infer.mcmc.util import summary\n", + "from pyro.distributions import constraints\n", + "import pyro\n", + "import torch\n", + "\n", + "pyro.set_rng_seed(101)\n", + "\n", + "%matplotlib inline\n", + "%config InlineBackend.figure_format='retina'" + ] + }, + { + "cell_type": "markdown", + "id": "49144812-c5d0-49d8-97fe-b425dda440f2", + "metadata": {}, + "source": [ + "## Data generation\n", + "\n", + "Let's generate our data with `sklearn.datasets.make_regression` method where we can determine the number of features, bias and noise power. Also we'll transform the target variable and make it a `torch` tensor." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "19fdf2d3-51af-4909-bdc7-876726633a30", + "metadata": {}, + "outputs": [], + "source": [ + "X, y = make_regression(n_features=1, bias=150., noise=5., random_state=108)\n", + "\n", + "X_ = torch.tensor(X, dtype=torch.float)\n", + "y_ = torch.tensor((y**3)/100000. + 10., dtype=torch.float)\n", + "y_.round_().clamp_(min=0);" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "f9314d98-59d3-451a-9909-3b1936aef7a7", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "image/png": { + "height": 261, + "width": 388 + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(X_, y_)\n", + "plt.ylabel('y')\n", + "plt.xlabel('x');" + ] + }, + { + "cell_type": "markdown", + "id": "407399e5-31df-4fa8-9628-ddb0fd04b038", + "metadata": {}, + "source": [ + "## Model definition\n", + "\n", + "In our model we first sample coefficient from a normal distribution with zero mean and sampled standard deviation. We use `to_event(1)` to move the expanded dimension from `batch_shape` to `event_shape` as we want to sample from a multivariate normal distribution. `deterministic` part is used to register a `name` whose `value` is fully determined by arguments passed to it. Here we use `softplus` to be sure that the resulting `rate` isn't negative. Then we use vectorized version of `plate` to record `counts` from passed dataset as they were sampled from `GammaPoisson` distribution. \n", + "\n", + "For now this model might be a little obscure but later we will dive into sampled data to better grasp it's internals." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "2f987086-f6a7-494c-a37d-5e6ba57e4867", + "metadata": {}, + "outputs": [], + "source": [ + "def model(features, counts):\n", + " N, P = features.shape\n", + " scale = pyro.sample(\"scale\", dist.LogNormal(0, 1))\n", + " coef = pyro.sample(\"coef\", dist.Normal(0, scale).expand([P]).to_event(1))\n", + " rate = pyro.deterministic(\"rate\", torch.nn.functional.softplus(coef @ features.T))\n", + " concentration = pyro.sample(\"concentration\", dist.LogNormal(0, 1))\n", + " with pyro.plate(\"bins\", N):\n", + " return pyro.sample(\"counts\", dist.GammaPoisson(concentration, rate), obs=counts)" + ] + }, + { + "cell_type": "markdown", + "id": "1985507f-746e-42e4-b059-c14a1dbf05f8", + "metadata": {}, + "source": [ + "## Inference\n", + "\n", + "Inference will be done with MCMC algorithm. IMPORTANT! Please note that only `scale` and `coef` variables are returned in samples dict. `deterministic` parts are available via `Predictive`, similarly as observed samples." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "e295c1a8-eb4e-4f66-8fe7-ca7d4ae1d2de", + "metadata": {}, + "outputs": [], + "source": [ + "nuts_kernel = NUTS(model)\n", + "mcmc = MCMC(nuts_kernel, num_samples=500)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "41598ceb-09ec-4149-a733-222d0694d2b6", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Sample: 100%|██████████| 1000/1000 [00:23, 43.11it/s, step size=6.57e-01, acc. prob=0.922]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 22.8 s, sys: 254 ms, total: 23 s\n", + "Wall time: 23.2 s\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "%%time\n", + "\n", + "mcmc.run(X_, y_);" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "134eeb75-3367-4177-9794-11319e1d696e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "coef: (500, 1)\n", + "concentration: (500,)\n", + "scale: (500,)\n" + ] + } + ], + "source": [ + "samples = mcmc.get_samples()\n", + "for k, v in samples.items():\n", + " print(f\"{k}: {tuple(v.shape)}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "e5b9d5c4-aed3-438a-88d1-4d50f249c985", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "counts: (500, 100)\n", + "rate: (500, 1, 100)\n" + ] + } + ], + "source": [ + "predictive = Predictive(model, samples)(X_, None)\n", + "for k, v in predictive.items():\n", + " print(f\"{k}: {tuple(v.shape)}\")" + ] + }, + { + "cell_type": "markdown", + "id": "772fa2a1-9336-4931-9f71-e427c96bf51f", + "metadata": {}, + "source": [ + "After sampling let's see how well our model fits the data. We compute sampled `counts` mean and standard deviation and plot it against the original data." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "3b6f72cb-8344-4abc-ba6e-b38894377ba9", + "metadata": {}, + "outputs": [], + "source": [ + "def prepare_counts_df(predictive):\n", + " counts = predictive['counts'].numpy()\n", + " counts_mean = counts.mean(axis=0)\n", + " counts_std = counts.std(axis=0)\n", + " \n", + " counts_df = pd.DataFrame({\n", + " \"feat\": X_.squeeze(),\n", + " \"mean\": counts_mean,\n", + " \"high\": counts_mean + counts_std,\n", + " \"low\": counts_mean - counts_std,\n", + " })\n", + "\n", + " return counts_df.sort_values(by=['feat'])" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "a884c08f-e4ff-4acf-95ab-35d9a0d08646", + "metadata": {}, + "outputs": [], + "source": [ + "counts_df = prepare_counts_df(predictive)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "ca56d0f9-11bd-48c0-8d4a-0162dac03071", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "image/png": { + "height": 261, + "width": 388 + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(X_, y_, c='r')\n", + "plt.ylabel('y')\n", + "plt.xlabel('x')\n", + "plt.plot(counts_df['feat'], counts_df['mean'])\n", + "plt.fill_between(counts_df['feat'], counts_df['high'], counts_df['low'], alpha=0.5);" + ] + }, + { + "cell_type": "markdown", + "id": "1a572f9a-db20-4fa4-af80-a5ac416d4bbe", + "metadata": {}, + "source": [ + "But where do these values (and uncertainty) come from? Let's find out!" + ] + }, + { + "cell_type": "markdown", + "id": "e351f4ac-bb56-4cea-9dad-8db0bd433838", + "metadata": {}, + "source": [ + "## Inspecting deterministic part\n", + "\n", + "Now let's move to the essence of this tutorial. `GammaPoisson` distribution used here and parameterized with (`concentration`, `rate`) arguments is basically an alternative parametrization of `NegativeBinomial` distribution. \n", + "\n", + "`NegativeBinomial` answers a question: How many successes will we record before seeing `r` failures (overall) if each trial wins with probability `p`? \n", + "\n", + "The reparametrization occurs as follows:\n", + "\n", + "- `concentration = r`\n", + "- `rate = 1 / (p + 1)`\n", + "\n", + "First we check sampled mean of `concentration` and `coef` variables..." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "eae492b2-3df4-462d-94cd-e60e939b0b49", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Concentration mean: 28.77524757385254\n", + "Concentration std: 0.7892239689826965\n" + ] + } + ], + "source": [ + "print('Concentration mean: ', samples['concentration'].mean().item())\n", + "print('Concentration std: ', samples['concentration'].std().item())" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "aee98f2b-0201-4de3-abee-f5598757ac43", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Coef mean: -1.2473742961883545\n", + "Coef std: 0.036095619201660156\n" + ] + } + ], + "source": [ + "print('Coef mean: ', samples['coef'].mean().item())\n", + "print('Coef std: ', samples['coef'].std().item())" + ] + }, + { + "cell_type": "markdown", + "id": "c6fd0556-a81e-4b6f-81eb-dd0877b8aafa", + "metadata": {}, + "source": [ + "...and do reparametrization (again please note that we get it from `predictive`!)." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "00a2edd1-feea-4c8f-b752-5b41a40062e0", + "metadata": {}, + "outputs": [], + "source": [ + "rates = predictive['rate'].squeeze()\n", + "rates_reparam = 1. / (rates + 1.) # here's reparametrization" + ] + }, + { + "cell_type": "markdown", + "id": "d8b889b8-845f-4929-9e6d-5694cffad010", + "metadata": {}, + "source": [ + "Now we plot reparametrized `rate`:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "0f569654-eeca-47e1-9286-ceff6792712f", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "image/png": { + "height": 277, + "width": 776 + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig, (ax1, ax2) = plt.subplots(1, 2)\n", + "fig.set_size_inches(13, 4)\n", + "\n", + "ax1.scatter(X_, rates_reparam.mean(axis=0))\n", + "ax1.set_ylabel('mean')\n", + "ax1.set_xlabel('x')\n", + "ax1.set_title('rate means')\n", + "ax2.scatter(X_, rates_reparam.std(axis=0))\n", + "ax2.set_ylabel('std')\n", + "ax2.set_xlabel('x')\n", + "ax2.set_title('rate stds');" + ] + }, + { + "cell_type": "markdown", + "id": "b5480f4e-cfdc-43f1-8e24-a0edf1268d9b", + "metadata": {}, + "source": [ + "We see that the probability of success rises with `x`. This means that it will take more and more trials before we observe those 28 failures imposed by `concentration` parameter.\n", + "\n", + "Intuitively if we want to record 28 failures where each failure occurs with probability 0.5 then it should also take 28 successes. Let's check if our model follows this logic:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "6c70bdcd-e72e-44e8-879f-6f0e69d30c42", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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1y/8ZeBFoAr4IXAYZ47h9+AM9bzeWts5ansLYK014+opD9fTiPNU10vAFTg3T9rD9byT7POZbYm4fuH/s38H/BLnKY4uYAVwG86cni8D77PWdif9hGZZ+P/nHeG3i4DfxLkGL4TLOqy1fxLethZoAVqttbXj6onp32G+SMT1M8bchzP36R6gFedJtpXA+4Ec4MfAh6y1vmSei8hCob5F/NS3iI/6FvFR32Jq6lvER32L+KhvER/1LeYQa61ec+gFPI/zpX+q133j9vl4uPyxSerchvMf6hLOcL+DOE/HuFN9vim6ho+N2z7i9QM+BfwIOAn043wBOwU8CdyQ6vNM9+u3UD9/sZ4zcFP4+j0/rvwO4CngONAL+IDzwC7g9lSfY5zXZzlOp/F8+Lxagb8BSiNsa50/ZRHrKcNJetg66vr8A7As1eeYztcPWAc8Fv5cdgJ+nE7AC8D/DWSl+hyTeO3um+b328lR29aOL5vpv8N8eSXi+gE3Av8CvI2TmM6PMx/qz4HfIfxgjF566ZWYF+pbzMY1fGzc9hGvH+pbqG8x82uovsXU10d9ixReP9S3UN8ihdcP9S1m5aWRCyIiIiIiIiIiIiIiEhPlXBARERERERERERERkZgouCAiIiIiIiIiIiIiIjFRcEFERERERERERERERGKi4IKIiIiIiIiIiIiIiMREwQUREREREREREREREYmJggsiIiIiIiIiIiIiIhITBRdERERERERERERERCQmCi6IiIiIiIiIiIiIiEhMFFwQEREREREREREREZGYKLggIiIiIiIiIiIiIiIxUXBBRERERERERERERERiouCCiIiIiIiIiIiIiIjERMEFERERERERERERERGJiYILIiIiIiIiIiIiIiISEwUXREREREREREREREQkJgouiIhIyhljfmCMscaYeyKs+3p43aOpaJuIiIiIiMwt6l+IiMwOY61NdRtERGSBM8aUAa8C1cC7rLWvhsubgGeAt4Et1trB1LVSRERERETmAvUvRERmh4ILIiKSFowx1wO7gRZgE5APvAYU43zxP5S61omIiIiIyFyi/oWISPJpWiQREUkL1toXga8ADcB3gMeBRcA9+uIvIiIiIiKxUP9CRCT5NHJBRETShjHGAD8Fbg4X/Yu19j+nsEkiIiIiIjJHqX8hIpJcGrkgIiJpwzoR76dGFf1NipoiIiIiIiJznPoXIiLJpZELIiKSNowxDcArgB9nLtRDwLXWWk9KGyYiIiIiInOO+hciIsmlkQsiIpIWjDHZwJM4idY+CnwDWIeeLhIRERERkRipfyEiknwKLoiISLr4S2Aj8P9aa38OfA3YC/yeMea3UtoyERERERGZa9S/EBFJMk2LJCIiKWeM+RDOXKj7gHdbawPh8uXAa0AGsNFaeyJljRQRERERkTlB/QsRkdmh4IKIiKSUMWYFzhd8F7DBWnty3PoPAj8A9uN0DHyz3EQREREREZkj1L8QEZk9Ci6IiIiIiIiIiIiIiEhMlHNBRERERERERERERERiouCCiIiIiIiIiIiIiIjERMEFERERERERERERERGJiYILIiIiIiIiIiIiIiISEwUXREREREREREREREQkJgouiIiIiIiIiIiIiIhITBRcEBERERERERERERGRmCi4ICIiIiIiIiIiIiIiMVFwQUREREREREREREREYqLggoiIiIiIiIiIiIiIxETBBRERERERERERERERiYmCCyIiIiIiIiIiIiIiEhMFF0REREREREREREREJCYKLoiIiIiIiIiIiIiISEwUXBARERERERERERERkZgouCAiIiIiIiIiIiIiIjFRcEFERERERERERERERGLy/wNAynA4DbtkiQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "image/png": { + "height": 277, + "width": 779 + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig, (ax1, ax2) = plt.subplots(1, 2)\n", + "fig.set_size_inches(13, 4)\n", + "\n", + "ax1.scatter(X_, y_, c='r')\n", + "ax1.plot(counts_df['feat'], counts_df['mean'])\n", + "ax1.fill_between(counts_df['feat'], counts_df['high'], counts_df['low'], alpha=0.5)\n", + "ax1.axhline(samples['concentration'].mean().item(), c='g', linestyle='dashed')\n", + "ax1.axvline(-0.46, c='g', linestyle='dashed')\n", + "ax1.set_ylabel('y')\n", + "ax1.set_xlabel('x')\n", + "ax1.set_title('fitted model')\n", + "ax2.scatter(X_, rates_reparam.mean(axis=0))\n", + "ax2.axhline(0.5, c='g', linestyle='dashed')\n", + "ax2.axvline(-0.46, c='g', linestyle='dashed')\n", + "ax2.set_ylabel('mean')\n", + "ax2.set_xlabel('x')\n", + "ax2.set_title('rate means');" + ] + }, + { + "cell_type": "markdown", + "id": "a3a7b0a7-90bb-490b-8cb9-971b9b2a7338", + "metadata": {}, + "source": [ + "It indeed does. Red lines show that 28 successes and rate 0.5 are located with the same `x` argument. " + ] + }, + { + "cell_type": "markdown", + "id": "78066438-2aaa-4706-981f-d77eba71b9d2", + "metadata": {}, + "source": [ + "## SVI approach\n", + "\n", + "`Predictive` class can also be used with the SVI method. In the next section we will use it with `AutoGuide`'s guide and manually designed one." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "3ea5009f-c82e-4bfb-aab4-2c950eb6f753", + "metadata": {}, + "outputs": [], + "source": [ + "from pyro.infer import SVI, Trace_ELBO\n", + "from pyro.optim import Adam\n", + "from pyro.infer.autoguide import AutoNormal" + ] + }, + { + "cell_type": "markdown", + "id": "f1dc46d1-cd9b-4b9d-b463-6f50ccfa1cbc", + "metadata": {}, + "source": [ + "### Manually defined guide\n", + "\n", + "First we define our guide with all `sample` sites that are present in the model and parametrize them with learnable parameters. Then we perform gradient descent with `Adam` optimizer." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "9a4339a2-c8f3-44e0-a189-82893c27b557", + "metadata": {}, + "outputs": [], + "source": [ + "def guide(features, counts):\n", + " N, P = features.shape\n", + " \n", + " scale_param = pyro.param(\"scale_param\", torch.tensor(0.1), constraint=constraints.positive)\n", + " loc_param = pyro.param(\"loc_param\", torch.tensor(0.0))\n", + " scale = pyro.sample(\"scale\", dist.Delta(scale_param))\n", + " coef = pyro.sample(\"coef\", dist.Normal(loc_param, scale).expand([P]).to_event(1))\n", + " \n", + " concentration_param = pyro.param(\"concentration_param\", torch.tensor(0.1), constraint=constraints.positive)\n", + " concentration = pyro.sample(\"concentration\", dist.Delta(concentration_param))" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "c173a362-acc5-4018-afbe-ebde64ffe273", + "metadata": {}, + "outputs": [], + "source": [ + "pyro.clear_param_store()\n", + "\n", + "adam_params = {\"lr\": 0.005, \"betas\": (0.90, 0.999)}\n", + "optimizer = Adam(adam_params)\n", + "\n", + "svi = SVI(model, guide, optimizer, loss=Trace_ELBO())" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "d453e4af-0763-4a46-a8c6-1827d5a4f439", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loss: 4509.724546432495\n", + "Loss: 410.72651755809784\n", + "Loss: 417.1552972793579\n", + "Loss: 395.92131960392\n", + "Loss: 447.41201531887054\n", + "Loss: 445.11494612693787\n", + "CPU times: user 21.2 s, sys: 73.4 ms, total: 21.2 s\n", + "Wall time: 21.3 s\n" + ] + } + ], + "source": [ + "%%time\n", + "\n", + "n_steps = 5001\n", + "\n", + "for step in range(n_steps):\n", + " loss = svi.step(X_, y_)\n", + " if step % 1000 == 0:\n", + " print('Loss: ', loss)" + ] + }, + { + "cell_type": "markdown", + "id": "0fed7b0c-ca4f-4c66-9268-858827f2aee0", + "metadata": {}, + "source": [ + "`Pyro`s parameter store is comprised of learned parameters that will be used in `Predictive` stage. Instead of providing samples we pass `guide` parameter to construct predictive distribution." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "94acd52c-8e14-4f5e-93a8-1f568bbd6bc0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[('scale_param', tensor(0.1965, grad_fn=)),\n", + " ('loc_param', tensor(-1.2427, requires_grad=True)),\n", + " ('concentration_param', tensor(29.1642, grad_fn=))]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "list(pyro.get_param_store().items())" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "006799eb-1f80-4981-b8ad-c1643497c384", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "scale: (500, 1)\n", + "coef: (500, 1, 1)\n", + "concentration: (500, 1)\n", + "counts: (500, 100)\n", + "rate: (500, 1, 100)\n" + ] + } + ], + "source": [ + "predictive_svi = Predictive(model, guide=guide, num_samples=500)(X_, None)\n", + "for k, v in predictive_svi.items():\n", + " print(f\"{k}: {tuple(v.shape)}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "d208a674-22e3-42ae-b59e-986a6fd81434", + "metadata": {}, + "outputs": [], + "source": [ + "counts_df = prepare_counts_df(predictive_svi)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "3f6b8e7d-714d-44c6-b8b2-140b161ed9e0", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAwkAAAILCAYAAACjJNAzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAABYlAAAWJQFJUiTwAAB1QklEQVR4nO39d3ik533efX+vqei97GILynYuyy6bWKRdkmtRlZIsS7He57Vl2Y4UtzhxJOfJa0uKTCWOk0eJixxbsSyLMuXHkiPFkqhCUVySuxJ7WXILyW3AYht6BwbTr/ePe4CdQR0AgynA+TkOHIO55y7XDEHyPucqP2OtRUREREREZIor1w0QEREREZH8opAgIiIiIiIpFBJERERERCSFQoKIiIiIiKRQSBARERERkRQKCSIiIiIikkIhQUREREREUigkiIiIiIhICoUEERERERFJoZAgIiIiIiIpFBJERERERCSFQoKIiIiIiKTw5LoB65ExpgOoAC7kuCkiIiIisra1AKPW2talHKSQkBsVxcXFNXv27KnJdUNEREREZO164403mJycXPJxCgm5cWHPnj01L7/8cq7bISIiIiJr2C233MIrr7xyYanHaU6CiIiIiIikUEgQEREREZEUCgkiIiIiIpJCIUFERERERFIoJIiIiIiISAqFBBERERERSaGQICIiIiIiKRQSREREREQkhUKCiIiIiIikUEgQEREREZEUCgkiIiIiIpJCIUFERERERFIoJIiIiIiISAqFBBERERERSaGQICIiIiIiKRQSREREREQkhUKCiIiIiIikUEgQEREREVlF1lqisXium7EkCgkiIiIiIqtoYCJMNG5z3YwlUUgQEREREVlF3SPBXDdhyRQSRERERERW0dXhyVw3YckUEkREREREVlH3qHoSREREREQkIRiJMTAeznUzlkwhQURERERklRTifARQSBARERERWTVXRwpvPgIoJIiIiIiIrBr1JIiIiIiIyDRrLV0KCSIiIiIiMmVgIkw4WliVlqcoJIiIiIiIrIKu4cLsRQCFBBERERGRVdFVoJOWQSFBRERERGRVFOp8BFBIEBERERHJuGAkxuBE4RVRm6KQICIiIiKSYYXciwAKCSIiIiIiGVfI8xFAIUFEREREJOMKeWUjUEgQEREREcmoeNzSPaqQICIiIiIiCYVcRG2KQoKIiIiISAYV+nwEUEgQEREREcmoQl/ZCBQSREREREQyqmtYPQkiIiIiIpIwGY4xFIjkuhkrppAgIiIiIpIha2E+AigkiIiIiIhkTPcamI8ACgkiIiIiIhlzVSFBRERERESmxOOWngIvojZFIUFEREREJAP6J0IFX0RtikKCiIiIiEgGrJX5CKCQICIiIiKSEVeHFRJERERERCRJ9xpZ/hQUEkREREREVmytFFGbopAgIiIiIrJCa6WI2hSFBBERERGRFepaQ5OWQSFBRERERGTFFBJERERERGTaWiqiNkUhQURERERkBdZSEbUpCgkiIiIiIivQtYbqI0xRSBARERERWYG1trIRKCSIiIiIiKzIWpu0DAoJIiIiIiLLFghHGV5DRdSmKCSIiIiIiCzTWuxFAIUEEREREZFluzgQyHUTVkXBhwRjzC8ZY2zi51/Os897jTFPGWNGjDHjxpjnjTG/ssh5f8UY80Ji/5HE8e9dnXchIiIiIoUmEI5y6upIrpuxKgo6JBhjtgB/CYwvsM/vAI8A1wNfB74MNAEPGWO+MM8xXwAeAjYm9v86cAPwSOJ8IiIiIrLOvdw5RCRmc92MVVGwIcEYY4CvAgPAl+bZpwX4AjAI3Gqt/W1r7e8BNwLngU8aY+6cccxdwCcTr99orf09a+1vA7ckzvOFxHlFREREZJ2aDMc4fnlt9iJAAYcE4HeB+4BfBSbm2efXAD/wl9baC1MbrbVDwB8nnv7GjGOmnv/nxH5Tx1wA/mfifL+6wraLiIiISAF75eLQmquynKwgQ4IxZg/wJ8CfW2uPLrDrfYnHR+d47Ucz9lnJMfO18+W5foDd6RwvIiIiIvknGInx6qXhXDdjVRVcSDDGeICHgYvAHyyy+67E45mZL1hru3B6IDYbY0oS5y4FNgHjiddnOpt43LmMpouIiIjIGrDWexEAPLluwDJ8FtgPvNVau1gN7MrE43wDxkaA0sR+gTT3B6hKp6HW2lvm2p7oTbg5nXOIiIiISP5YD70IUGA9CcaYt+D0Hvx3a+2zuW6PiIiIiKwvr14aJhRZ270IUEAhITHM6O9xhg59Js3Dpr75r5zn9Zk9B+nuP5zm9UVERERkjQhFYxy7OJzrZmRFwYQEoAxnLsAeIJhUQM0C/zGxz5cT2/4s8fx04nHWHAJjzEacoUaXrbUBAGvtBHAFKEu8PtOOxOOsOQ4iIiIisrYdvzxCMBLLdTOyopDmJISAr8zz2s048xR+hhMMpoYiPQHcDbwzaduUdyXtk+wJ4JcTx3w1zWNEREREZA0LR+O83Dm0+I5rRMGEhMQk5X8512vGmM/hhISvWWv/NumlrwL/HvgdY8xXp2olGGOqubYy0sxCbF/CCQl/aIz5zlSthEQBtd/GCSszw4OIiIiIrGEnrgwzGV4fvQhQQCFhOay1HcaY3wf+AnjJGPNNIAx8CNjMHBOgrbXPGGP+B/DvgOPGmG8BPuAXgRrgXycXZhMRERGRtS0Si/PShfXTiwBrPCQAWGu/aIy5AHwK+CjOPIzXgU9ba782zzGfNMacwOk5+AQQB14B/h9r7fez0nARERERyQvnescJrKNeBFgjIcFa+zngcwu8/gjwyBLP+RDw0AqaJSIiIiJrwOWhxUpzrT2FtLqRiIiIiEjWXR1WSBARERERkYRAOMrgRDjXzcg6hQQRERERkXmsx14EUEgQEREREZnXepyPAAoJIiIiIiLzujoczHUTckIhQURERERkDuFonL6xUK6bkRMKCSIiIiIic+gamSRuba6bkRMKCSIiIiIic7iyTictg0KCiIiIiMicrqzTScugkCAiIiIiMkssbukeWZ+TlkEhQURERERklp7RINH4+pyPAAoJIiIiIiKzrNcialMUEkREREREZmjvn8h1E3JKIUFEREREJMlkOKaehFw3QEREREQkn3T0T7BOyyNMU0gQEREREUnS3j+e6ybknEKCiIiIiEhCNBancyCQ62bknEKCiIiIiEjCpaFJwtF4rpuRcwoJIiIiIiIJ7X0aagQKCSIiIiIiAFhrae9b30ufTlFIEBEREREBesdCjIeiuW5GXlBIEBEREREBzmuo0TSFBBERERER4LyGGk1TSBARERGRdW9kMkL/WCjXzcgbCgkiIiIisu5pVaNUCgkiIiIisu5pVaNUCgkiIiIisq4FIzEuD03muhl5RSFBRERERNa1CwMTxK3NdTPyikKCiIiIiKxrGmo0m0KCiIiIiKxbsbilo18hYSaFBBERERFZt64MTRKOxnPdjLyjkCAiIiIi65aqLM9NIUFERERE1iVrrULCPBQSRERERGRd6hsPMRaM5roZeUkhQURERETWJa1qND+FBBERERFZlxQS5qeQICIiIiLrzlgwQs9oMNfNyFsKCSIi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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "image/png": { + "height": 261, + "width": 388 + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(X_, y_, c='r')\n", + "plt.ylabel('y')\n", + "plt.xlabel('x')\n", + "plt.plot(counts_df['feat'], counts_df['mean'])\n", + "plt.fill_between(counts_df['feat'], counts_df['high'], counts_df['low'], alpha=0.5);" + ] + }, + { + "cell_type": "markdown", + "id": "f11cf5f8-d3df-42f4-a191-8c257476c3df", + "metadata": {}, + "source": [ + "### AutoGuide\n", + "\n", + "Another approach for conducting SVI is to rely on automatic guide generation. Here we use `AutoNormal` that underneath uses a normal distribution with a diagonal covariance matrix." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "fdfb6fd3-2217-4376-95b4-04ff1c47fbf6", + "metadata": {}, + "outputs": [], + "source": [ + "pyro.clear_param_store()\n", + "\n", + "adam_params = {\"lr\": 0.005, \"betas\": (0.90, 0.999)}\n", + "optimizer = Adam(adam_params)\n", + "\n", + "auto_guide = AutoNormal(model)\n", + "\n", + "svi = SVI(model, auto_guide, optimizer, loss=Trace_ELBO())" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "5fe54144-3da1-4d55-b40e-e417b2ae0b46", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loss: 3881.8888041973114\n", + "Loss: 380.9036132991314\n", + "Loss: 375.7684025168419\n", + "Loss: 377.94497936964035\n", + "CPU times: user 18.8 s, sys: 83.8 ms, total: 18.9 s\n", + "Wall time: 19 s\n" + ] + } + ], + "source": [ + "%%time\n", + "\n", + "n_steps = 3001\n", + "\n", + "for step in range(n_steps):\n", + " loss = svi.step(X_, y_)\n", + " if step % 1000 == 0:\n", + " print('Loss: ', loss)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "3eccb4d8-e08f-4f03-842a-3e53ecdbd7b8", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'scale': tensor(1.9367, grad_fn=),\n", + " 'coef': tensor([-1.2498], grad_fn=),\n", + " 'concentration': tensor(29.5432, grad_fn=)}" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "auto_guide(X_, y_)" + ] + }, + { + "cell_type": "markdown", + "id": "13bb4ff7-060a-4079-8c81-1cd41c511622", + "metadata": {}, + "source": [ + "As we check `PARAM_STORE` we see that each `sample` site is approximated with a normal distribution. " + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "dc8f6f2c-4edd-496b-91ce-df0ba9886a20", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[('AutoNormal.locs.scale',\n", + " Parameter containing:\n", + " tensor(0.3204, requires_grad=True)),\n", + " ('AutoNormal.scales.scale', tensor(0.5149, grad_fn=)),\n", + " ('AutoNormal.locs.coef',\n", + " Parameter containing:\n", + " tensor([-1.2510], requires_grad=True)),\n", + " ('AutoNormal.scales.coef', tensor([0.0413], grad_fn=)),\n", + " ('AutoNormal.locs.concentration',\n", + " Parameter containing:\n", + " tensor(3.3640, requires_grad=True)),\n", + " ('AutoNormal.scales.concentration',\n", + " tensor(0.0299, grad_fn=))]" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "list(pyro.get_param_store().items())" + ] + }, + { + "cell_type": "markdown", + "id": "211c5936-4d5f-459c-8495-6cb925a66187", + "metadata": {}, + "source": [ + "Finally we again construct a predictive distribution and plot `counts`. For all three methods we managed to get similar results for our parameters. " + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "bcbdc495-9248-4556-98a6-4281d094f56d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "scale: (500, 1)\n", + "coef: (500, 1, 1)\n", + "concentration: (500, 1)\n", + "counts: (500, 100)\n", + "rate: (500, 1, 100)\n" + ] + } + ], + "source": [ + "predictive_svi = Predictive(model, guide=auto_guide, num_samples=500)(X_, None)\n", + "for k, v in predictive_svi.items():\n", + " print(f\"{k}: {tuple(v.shape)}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "1f663b61-a6c6-4d30-bff1-875633b56ada", + "metadata": {}, + "outputs": [], + "source": [ + "counts_df = prepare_counts_df(predictive_svi)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "e3beaa96-a387-4c3c-849f-e6dc2bc6a0d8", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "image/png": { + "height": 261, + "width": 388 + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(X_, y_, c='r')\n", + "plt.ylabel('y')\n", + "plt.xlabel('x')\n", + "plt.plot(counts_df['feat'], counts_df['mean'])\n", + "plt.fill_between(counts_df['feat'], counts_df['high'], counts_df['low'], alpha=0.5);" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/pyro/source/tutorial/source/prior_predictive.ipynb b/pyro/source/tutorial/source/prior_predictive.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..3a9e5f1e5e98b92c961c3f89149c6006ae01e455 --- /dev/null +++ b/pyro/source/tutorial/source/prior_predictive.ipynb @@ -0,0 +1,392 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "e7256d02", + "metadata": {}, + "source": [ + "# Interactive posterior predictives checks\n", + "\n", + "This notebook demonstrates how to interactively examine model priors using [ipywidgets](https://ipywidgets.readthedocs.io/en/stable/).\n", + "\n", + "⚠️ This notebook is intended to be run interactively. Please run locally or [Open in Colab](https://colab.research.google.com/github/pyro-ppl/pyro/blob/dev/tutorial/source/prior_predictive.ipynb).\n", + "\n", + "The first step in [Bayesian workflow](https://arxiv.org/abs/2011.01808) is to create a model. The second step is to check prior samples from the model. This notebook shows how to interactively check prior samples and tune parameters of the top level prior distribution while visualizing model outputs.\n", + "\n", + "#### Summary\n", + "\n", + "- Wrap your model in a plotting function.\n", + "- Use [ipywidgets.interact()](https://ipywidgets.readthedocs.io/en/stable/examples/Using%20Interact.html) to create sliders for each parameter of your prior.\n", + "- For expensive models, use a [Resampler](https://docs.pyro.ai/en/stable/infer.util.html#pyro.infer.resampler.Resampler)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "0b4f8ff1", + "metadata": {}, + "outputs": [], + "source": [ + "!pip install -q pyro-ppl # for colab" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "5184344d", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from ipywidgets import interact, FloatSlider\n", + "import matplotlib.pyplot as plt\n", + "import torch\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "import pyro.poutine as poutine\n", + "from pyro.infer.resampler import Resampler\n", + "\n", + "assert pyro.__version__.startswith('1.9.1')\n", + "smoke_test = ('CI' in os.environ) # for CI testing only" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "e10c32bf", + "metadata": {}, + "outputs": [], + "source": [ + "def model(T: int = 1000, data=None):\n", + " # Sample parameters from the prior.\n", + " df = pyro.sample(\"df\", dist.LogNormal(0, 1))\n", + " p_scale = pyro.sample(\"p_scale\", dist.LogNormal(0, 1)) # process noise\n", + " m_scale = pyro.sample(\"m_scale\", dist.LogNormal(0, 1)) # measurement noise\n", + " \n", + " # Simulate a time series.\n", + " with pyro.plate(\"dt\", T):\n", + " process_noise = pyro.sample(\"process_noise\", dist.StudentT(df, 0, p_scale))\n", + " trend = pyro.deterministic(\"trend\", process_noise.cumsum(-1))\n", + " with pyro.plate(\"t\", T):\n", + " return pyro.sample(\"obs\", dist.Normal(trend, m_scale), obs=data)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "03d29ed7", + "metadata": {}, + "outputs": [], + "source": [ + "def plot_trajectory(df=1.0, p_scale=1.0, m_scale=1.0):\n", + " pyro.set_rng_seed(12345)\n", + " data = {\n", + " \"df\": torch.as_tensor(df),\n", + " \"p_scale\": torch.as_tensor(p_scale),\n", + " \"m_scale\": torch.as_tensor(m_scale),\n", + " }\n", + " trajectory = poutine.condition(model, data)()\n", + " plt.figure(figsize=(8, 4)).patch.set_color(\"white\")\n", + " plt.plot(trajectory)\n", + " plt.xlabel(\"time\")\n", + " plt.ylabel(\"obs\")" + ] + }, + { + "cell_type": "markdown", + "id": "4b0348ce", + "metadata": {}, + "source": [ + "Now we can examine what model trajectories look like for particular values of top level latent variables." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "18c11eb3", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "ce0e5489600743b4b0c8c371ee95186c", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "interactive(children=(FloatSlider(value=1.0, description='df', max=10.0, min=0.01), FloatSlider(value=0.1, des…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "interact(\n", + " plot_trajectory,\n", + " df=FloatSlider(value=1.0, min=0.01, max=10.0),\n", + " p_scale=FloatSlider(value=0.1, min=0.01, max=1.0),\n", + " m_scale=FloatSlider(value=1.0, min=0.01, max=10.0),\n", + ");" + ] + }, + { + "cell_type": "markdown", + "id": "8b71dd6e", + "metadata": {}, + "source": [ + "But to tune the parameters of our priors, we'd like to look at an ensemble of trajectories each of whose top-level parameters is sampled from the current prior. Let's rewrite our model so we can input the prior parameters." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "776d52f5", + "metadata": {}, + "outputs": [], + "source": [ + "def model2(T: int = 1000, data=None, df0=0, df1=1, p0=0, p1=1, m0=0, m1=1):\n", + " # Sample parameters from the prior.\n", + " df = pyro.sample(\"df\", dist.LogNormal(df0, df1))\n", + " p_scale = pyro.sample(\"p_scale\", dist.LogNormal(p0, p1)) # process noise\n", + " m_scale = pyro.sample(\"m_scale\", dist.LogNormal(m0, m1)) # measurement noise\n", + " \n", + " # Simulate a time series.\n", + " with pyro.plate(\"dt\", T):\n", + " process_noise = pyro.sample(\"process_noise\", dist.StudentT(df, 0, p_scale))\n", + " trend = pyro.deterministic(\"trend\", process_noise.cumsum(-1))\n", + " with pyro.plate(\"t\", T):\n", + " return pyro.sample(\"obs\", dist.Normal(trend, m_scale), obs=data)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "2daa8449", + "metadata": {}, + "outputs": [], + "source": [ + "def plot_trajectories(**kwargs):\n", + " pyro.set_rng_seed(12345)\n", + " with pyro.plate(\"trajectories\", 20, dim=-2):\n", + " trajectories = model2(**kwargs)\n", + " plt.figure(figsize=(8, 5)).patch.set_color(\"white\")\n", + " plt.plot(trajectories.T)\n", + " plt.xlabel(\"time\")\n", + " plt.ylabel(\"obs\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "78a75ad1", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "36f97b3bc75941ebb9a00556b948e0d4", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "interactive(children=(FloatSlider(value=0.0, description='df0', max=5.0, min=-5.0), FloatSlider(value=1.0, des…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "interact(\n", + " plot_trajectories,\n", + " df0=FloatSlider(value=0.0, min=-5, max=5),\n", + " df1=FloatSlider(value=1.0, min=0.1, max=10),\n", + " p0=FloatSlider(value=0.0, min=-5, max=5),\n", + " p1=FloatSlider(value=1.0, min=0.1, max=10),\n", + " m0=FloatSlider(value=0.0, min=-5, max=5),\n", + " m1=FloatSlider(value=1.0, min=0.1, max=10),\n", + ");" + ] + }, + { + "cell_type": "markdown", + "id": "9e663568", + "metadata": {}, + "source": [ + "Yikes! It looks like our initial priors generated very weird trajectories, but we can slide to find better priors. Try increasing `df0`." + ] + }, + { + "cell_type": "markdown", + "id": "4e9bacfa", + "metadata": {}, + "source": [ + "## Resampler\n", + "\n", + "For more expensive simulations, sampling may be too slow to interactively generate samples at each change. As a computational trick we can draw many samples once from a diffuse distribution, then resample them from a modified distribution -- provided we importance sample or resample. Pyro provides an importance [Resampler](https://docs.pyro.ai/en/stable/infer.util.html#pyro.infer.resampler.Resampler) to aid in interactively visualizing expensive models.\n", + "\n", + "We'll start with our original model and create a way to make parametrized partial models with given priors. These partial models are just the top half our our model, the top level parameters." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "41b808de", + "metadata": {}, + "outputs": [], + "source": [ + "def make_partial_model(df0, df1, p0, p1, m0, m1):\n", + " def partial_model():\n", + " # Sample parameters from the prior.\n", + " pyro.sample(\"df\", dist.LogNormal(df0, df1))\n", + " pyro.sample(\"p_scale\", dist.LogNormal(p0, p1)) # process noise\n", + " pyro.sample(\"m_scale\", dist.LogNormal(m0, m1)) # measurement noise\n", + " return partial_model" + ] + }, + { + "cell_type": "markdown", + "id": "7acbde94", + "metadata": {}, + "source": [ + "Next we'll initialize the `Resampler` with a diffuse guide that covers most of our desired parameter space. This can be expensive in real simulations, so you might want to run it overnight." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "74a685c8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 940 ms, sys: 146 ms, total: 1.09 s\n", + "Wall time: 934 ms\n" + ] + } + ], + "source": [ + "%%time\n", + "partial_guide = make_partial_model(0, 10, 0, 10, 0, 10)\n", + "resampler = Resampler(partial_guide, model, num_guide_samples=10000)" + ] + }, + { + "cell_type": "markdown", + "id": "785c131c", + "metadata": {}, + "source": [ + "The `Resampler.sample()` method takes a modified partial model." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "c939c991", + "metadata": {}, + "outputs": [], + "source": [ + "def plot_resampled(df0, df1, p0, p1, m0, m1):\n", + " partial_model = make_partial_model(df0, df1, p0, p1, m0, m1)\n", + " samples = resampler.sample(partial_model, num_samples=20)\n", + " trajectories = samples[\"obs\"]\n", + " plt.figure(figsize=(8, 5)).patch.set_color(\"white\")\n", + " plt.plot(trajectories.T)\n", + " plt.xlabel(\"time\")\n", + " plt.ylabel(\"obs\")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "0fe987b4", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "3219e20ecdff4b6892b50894fc76be1b", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "interactive(children=(FloatSlider(value=0.0, description='df0', max=5.0, min=-5.0), FloatSlider(value=1.0, des…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "interact(\n", + " plot_resampled,\n", + " df0=FloatSlider(value=0.0, min=-5, max=5),\n", + " df1=FloatSlider(value=1.0, min=0.1, max=10),\n", + " p0=FloatSlider(value=0.0, min=-5, max=5),\n", + " p1=FloatSlider(value=1.0, min=0.1, max=10),\n", + " m0=FloatSlider(value=0.0, min=-5, max=5),\n", + " m1=FloatSlider(value=1.0, min=0.1, max=10),\n", + ");" + ] + }, + { + "cell_type": "markdown", + "id": "f7107e15", + "metadata": {}, + "source": [ + "After deciding on good prior parameters, we can then hard-code those into the model:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "112e9537", + "metadata": {}, + "outputs": [], + "source": [ + "def model(T: int = 1000, data=None):\n", + " df = pyro.sample(\"df\", dist.LogNormal(4, 1)) # <-- changed 0 to 4\n", + " p_scale = pyro.sample(\"p_scale\", dist.LogNormal(1, 1)) # <-- changed 0 to 1\n", + " m_scale = pyro.sample(\"m_scale\", dist.LogNormal(0, 1))\n", + "\n", + " with pyro.plate(\"dt\", T):\n", + " process_noise = pyro.sample(\"process_noise\", dist.StudentT(df, 0, p_scale))\n", + " trend = pyro.deterministic(\"trend\", process_noise.cumsum(-1))\n", + " with pyro.plate(\"t\", T):\n", + " return pyro.sample(\"obs\", dist.Normal(trend, m_scale), obs=data)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "46e4a4a6", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/pyro/source/tutorial/source/prodlda.ipynb b/pyro/source/tutorial/source/prodlda.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..2a8e06a480a89c122322f0e4540d41f1ea7e3cc9 --- /dev/null +++ b/pyro/source/tutorial/source/prodlda.ipynb @@ -0,0 +1,645 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Probabilistic Topic Modeling\n", + "\n", + "This tutorial implements the ProdLDA topic model from [Autoencoding Variational Inference For Topic Models](https://arxiv.org/abs/1703.01488) by Akash Srivastava and Charles Sutton. This model returns consistently better topics than vanilla LDA and trains much more quickly. Furthermore, it does not require a custom inference algorithm that relies on complex mathematical derivations. This tutorial also serves as an introduction to probabilistic modeling with Pyro, and is heavily inspired by [Probabilistic topic models](http://www.cs.columbia.edu/~blei/papers/Blei2012.pdf) from David Blei.\n", + "\n", + "## Introduction\n", + "Topic models are a suite of unsupervised learning algorithms that aim to discover and annotate large archives of documents with thematic information. Probabilistic topic models use statistical methods to analyze the words in each text to discover common themes, how those themes are connected to each other, and how they change over time. They enable us to organize and summarize electronic archives at a scale that would be impossible with human annotation alone. The most popular topic model is called latent Dirichlet allocation, or LDA.\n", + "\n", + "## Latent Dirichlet Allocation: Intuition\n", + "LDA is a statistical model of document collections that encodes the intuition that documents exhibit multiple topics. It is most easily described by its generative process, the idealized random process from which the model assumes the documents were generated. The figure below illustrates the intuition:\n", + "\n", + "\"image1\"\n", + "
Figure 1: The intuition behind Latent Dirichlet Allocation (Blei 2012).
\n", + "\n", + "We assume that there is a given number of “topics,” each of which is a probability distributions over words in the vocabulary (far left). Each document is assumed to be generated as follows: i) first, randomly choose a distribution over the topics (the histogram on the right); ii) then, for each word, randomly choose a topic assignment (the colored coins), and randomly choose the word from the corresponding topic. For an in-depth intuitive description, please check the excellent article from David Blei.\n", + "\n", + "The goal of topic modeling is to automatically discover the topics from a collection of documents. The documents themselves are observed, while the topic structure — the topics, per-document topic distributions, and the per-document per-word topic assignments — is **hidden**. The central computational problem for topic modeling is to **use the observed documents to infer the hidden topic structure**.\n", + "\n", + "We will now see how easy it is to implement this model in Pyro.\n", + "\n", + "## Probabilistic Modeling and the Dirichlet distribution in Pyro\n", + "LDA is part of the larger field of probabilistic modeling. If you are already familiar with probabilistic modeling and Pyro, feel free to skip to the next section: [LDA pseudocode, mathematical form, and graphical model](#LDA-pseudocode,-mathematical-form,-and-graphical-model); if not, read on!\n", + "\n", + "In generative probabilistic modeling, we treat our data as arising from a generative process that includes hidden variables. This generative process defines a joint probability distribution over both the observed and hidden random variables. We perform data analysis by using that joint distribution to compute the conditional distribution of the hidden variables given the observed variables. This conditional distribution is also called the posterior distribution.\n", + "\n", + "To understand how probabilistic modeling and Pyro work, let's imagine a very simple example. Let's say we have a dice and we want to determine whether it is loaded or fair. We cannot directly observe the dice's 'fairness'; we can only infer it by throwing the dice and observing the results. So, we throw it 30 times and observe the following results:\n", + "\n", + "$$ \\mathcal{D} = \\{5, 4, 2, 5, 6, 5, 3, 3, 1, 5, 5, 3, 5, 3, 5, 3, 5, 5, 3, 5, 5, 3, 1, 5, 3, 3, 6, 5, 5, 6\\} $$\n", + "\n", + "Counting the occurrences of each result:\n", + "\n", + "| Digit | 1 | 2 | 3 | 4 | 5 | 6 |\n", + "|-------|---|---|---|---|----|---|\n", + "| Count | 2 | 1 | 9 | 1 | 14 | 3 |\n", + "\n", + "For a fair dice, we should expect roughly 5 occurrences of each of the 6 digits in 30 throws. That is not, however, what we observed: numbers 3 and 5 are much more frequent, while 2 and 4 are especially infrequent. This is not a surprise, as we used a random number generator with the following probabilities to generate the dataset $\\mathcal{D}$:\n", + "\n", + "$$ P = \\{0.12, 0.06, 0.26, 0.12, 0.32, 0.12\\} $$\n", + "\n", + "In the general case, however, the probabilities that generated the dataset are hidden to us: they are latent random variables. We don't have access to them, only the observations $\\mathcal {D}$. The purpose of probabilistic modeling is to learn the hidden variables from the observations only.\n", + "\n", + "Suppose we observe N dice rolls, $\\mathcal{D} = \\{x_1, ..., x_n\\}$, where $x_i \\in \\{1, ..., 6\\}$. If we assume the data is independent and identically distributed (iid), the likelihood of observing this specific dataset has the form \n", + "\n", + "\\begin{equation*}\n", + "p(\\mathcal{D} | \\theta) = \\prod_{i}^{6} \\theta_{k}^{N_k}\n", + "\\label{eq:multinomial} \\tag{1}\n", + "\\end{equation*}\n", + "\n", + "where $N_k$ is the number of times we observed every digit $k$. The likelihood for the **multinomial distribution** has the same form: this is the best distribution to model this simple example. But how to model the latent random variable $\\theta$?\n", + "\n", + "$\\theta$ is a vector of dimension 6 (one for each digit) that lives in the 6-dimensional probability simplex, i.e. the probabilities are all positive real numbers that add up to 1. There is a natural distribution for such probability vectors: the **Dirichlet distribution**. Indeed the Dirichlet distribution is commonly used as a prior distribution in Bayesian statistics, since it is \"conjugate\" to the multinomial (and categorical) distributions.\n", + "\n", + "The Dirichlet distribution is parameterized by the vector $\\alpha$, which has the same number of elements as our multinomial parameter $\\theta$ (6 in our example). Although in this simple case we could compute the posterior over the hidden variables $\\theta$ and $\\alpha$ analytically, let's instead see how we can use Pyro and Markov Chain Monte Carlo (MCMC) to do inference:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "from pyro.infer import MCMC, NUTS\n", + "import torch\n", + "\n", + "assert pyro.__version__.startswith('1.9.1')\n", + "# Enable smoke test - run the notebook cells on CI.\n", + "smoke_test = 'CI' in os.environ" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Sample: 100%|██████████| 1200/1200 [00:09, 127.59it/s, step size=7.89e-01, acc. prob=0.900]\n" + ] + } + ], + "source": [ + "def model(counts):\n", + " theta = pyro.sample('theta', dist.Dirichlet(torch.ones(6)))\n", + " total_count = int(counts.sum())\n", + " pyro.sample('counts', dist.Multinomial(total_count, theta), obs=counts)\n", + "\n", + "data = torch.tensor([5, 4, 2, 5, 6, 5, 3, 3, 1, 5, 5, 3, 5, 3, 5, \\\n", + " 3, 5, 5, 3, 5, 5, 3, 1, 5, 3, 3, 6, 5, 5, 6])\n", + "counts = torch.unique(data, return_counts=True)[1].float()\n", + "\n", + "nuts_kernel = NUTS(model)\n", + "num_samples, warmup_steps = (1000, 200) if not smoke_test else (10, 10)\n", + "mcmc = MCMC(nuts_kernel, num_samples=1000, warmup_steps=200)\n", + "mcmc.run(counts)\n", + "hmc_samples = {k: v.detach().cpu().numpy() \n", + " for k, v in mcmc.get_samples().items()}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Inferred dice probabilities from the data (68% confidence intervals):\n", + "1: 0.08 ± 0.05\n", + "2: 0.05 ± 0.04\n", + "3: 0.29 ± 0.07\n", + "4: 0.05 ± 0.04\n", + "5: 0.41 ± 0.08\n", + "6: 0.11 ± 0.05\n" + ] + } + ], + "source": [ + "means = hmc_samples['theta'].mean(axis=0)\n", + "stds = hmc_samples['theta'].std(axis=0)\n", + "print('Inferred dice probabilities from the data (68% confidence intervals):')\n", + "for i in range(6):\n", + " print('%d: %.2f ± %.2f' % (i + 1, means[i], stds[i]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There we go! By conditioning the generative model on the observations, we were able to infer the hidden random variables using MCMC. We see that 3 and 5 have higher inferred probabilities, as we observed in the dataset. The inferences are well aligned with the true probabilities that generated the data.\n", + "\n", + "Before we move on, a final comment. Instead of using the `data` directly, we used the `counts`, summarizing the number of occurrences of each digit in the dataset. That's because the multinomial distribution models the probability of counts for each side of a $k$-sided dice rolled $n$ times. Alternatively, we could have used `data` directly, without summarizing. To do that, we just need to replace the multinomial distribution by the **categorical distribution**, a special case of the multinomial with $n = 1$:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Sample: 100%|██████████| 1200/1200 [00:10, 112.07it/s, step size=6.78e-01, acc. prob=0.922]\n" + ] + } + ], + "source": [ + "def model(data):\n", + " theta = pyro.sample('theta', dist.Dirichlet(torch.ones(6)))\n", + " with pyro.plate('data', len(data)):\n", + " pyro.sample('obs', dist.Categorical(theta), obs=data)\n", + "\n", + "nuts_kernel = NUTS(model)\n", + "num_samples, warmup_steps = (1000, 200) if not smoke_test else (10, 10)\n", + "mcmc = MCMC(nuts_kernel, num_samples=num_samples, warmup_steps=warmup_steps)\n", + "mcmc.run(data - 1) # -1: we need to work with indices [0, 5] instead of [1, 6]\n", + "hmc_samples = {k: v.detach().cpu().numpy() \n", + " for k, v in mcmc.get_samples().items()}" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Inferred dice probabilities from the data (68% confidence intervals):\n", + "1: 0.08 ± 0.05\n", + "2: 0.06 ± 0.04\n", + "3: 0.28 ± 0.08\n", + "4: 0.06 ± 0.04\n", + "5: 0.42 ± 0.08\n", + "6: 0.11 ± 0.05\n" + ] + } + ], + "source": [ + "means = hmc_samples['theta'].mean(axis=0)\n", + "stds = hmc_samples['theta'].std(axis=0)\n", + "print('Inferred dice probabilities from the data (68% confidence intervals):')\n", + "for i in range(6):\n", + " print('%d: %.2f ± %.2f' % (i + 1, means[i], stds[i]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As expected, this produces the same inferences as computed earlier. Now that we've had a brief introduction to probabilistic programming in Pyro and reviewed a simple application of Dirichlet and multinomial/categorical distributions, we are ready to resume our LDA tutorial. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## LDA pseudocode, mathematical form, and graphical model\n", + "\n", + "We can define LDA more formally in 3 different ways: via pseudocode, via the mathematical form of the joint distribution, and via a probabilistic graphical model. Let's start with the **pseudocode**.\n", + "\n", + "Each document of the collection is represented as a mixture of topics, where each topic $\\beta_k$ is a probability distribution over the vocabulary (see the distributions over words on the left in Figure 1). We also use $\\beta$ to denote the matrix $\\beta = (\\beta_1, ..., \\beta_k)$. The generative process is then as described in the following algorithm:\n", + "\n", + "\"image2\"\n", + "
Figure 2: Pseudocode for the generative process.
\n", + "\n", + "The topic proportions for the $d$-th document are denoted as $\\theta_d$, where $\\theta_{d, k}$ is the topic proportion\n", + "for topic $k$ in document $d$ (see the cartoon histogram in Figure 1). The topic assignments for the $d$-th document are denoted as $z_d$, where $z_{d, n}$ is the topic assignment for the $n$-th word in document $d$ (see the colored coin in Figure 1). Finally, the observed words for document $d$ are denoted as $w_d$, where $w_{d, n}$ is the $n$-th word in document $d$, which is an element from the fixed vocabulary.\n", + "\n", + "Now, let's look at the **mathematical form** of the joint distribution. Given the parameters $\\alpha$ and $\\beta$, the joint distribution of a topic mixture $\\theta$, a set of $N$ topics $\\bf z$, and a set of $N$ words $\\bf w$ is given by:\n", + "\n", + "\\begin{equation*}\n", + "p(\\theta, \\mathbf{z}, \\mathbf{w} | \\alpha, \\beta) = p(\\theta | \\alpha) \\prod_{n=1}^{N} p(z_n | \\theta) p(w_n | z_n, \\beta) ,\n", + "\\label{eq:joint1} \\tag{2}\n", + "\\end{equation*}\n", + "\n", + "where $p(z_n | \\theta)$ is simply $\\theta_i$ for the unique $i$ such that $z_n^i = 1$. Integrating over $\\theta$ and summing over $z$, we obtain the marginal distribution of a document:\n", + "\n", + "\\begin{equation*}\n", + "p(\\mathbf{w} | \\alpha, \\beta) = \\int_{\\theta} \\Bigg( \\prod_{n=1}^{N} \\sum_{z_n=1}^{k} p(w_n | z_n, \\beta) p(z_n | \\theta) \\Bigg) p(\\theta | \\alpha) d\\theta ,\n", + "\\label{eq:joint2} \\tag{3}\n", + "\\end{equation*}\n", + "\n", + "while taking the product of the marginal probabilities of single documents, we obtain the probability of a corpus:\n", + "\n", + "\\begin{equation*}\n", + "p(\\mathcal{D} | \\alpha, \\beta) = \\prod_{d=1}^{M} \\int_{\\theta} \\Bigg( \\prod_{n=1}^{N_d} \\sum_{z_{d,n}=1}^{k} p(w_{d,n} | z_{d,n}, \\beta) p(z_{d,n} | \\theta_d) \\Bigg) p(\\theta_d | \\alpha) d\\theta_d .\n", + "\\label{eq:joint3} \\tag{4}\n", + "\\end{equation*}\n", + "\n", + "Notice that this distribution specifies a number of (statistical) dependencies. For example, the topic assignment $z_{d,n}$ depends on the per-document topic proportions $\\theta_d$. As another example, the observed word $w_{d,n}$ depends on the topic assignment $z_{d,n}$ and all of the topics $\\beta$. These dependencies define the LDA model.\n", + "\n", + "Finally, let's see the 3rd representation: the **probabilistic graphical model**. Probabilistic graphical models provide a graphical language for describing families of probability distributions. The graphical model for LDA is:\n", + "\n", + "\"image2\"\n", + "
Figure 3: LDA as a graphical model.
\n", + "\n", + "Each node is a random variable and is labeled according to its role in the generative process. The hidden nodes — the topic proportions, assignments, and topics — are unshaded. The observed nodes — the words of the documents — are shaded. The rectangles denote “plate” notation, which is used to encode replication of variables. The $N$ plate denotes the collection of words within documents; the $M$ plate denotes the collection of documents within the collection.\n", + "\n", + "We now turn to the computational problem: computing the posterior distribution of the topic structure given the observed documents.\n", + "\n", + "## Autoencoding Variational Bayes in Latent Dirichlet Allocation\n", + "\n", + "Posterior inference over the hidden variables $\\theta$ and $z$ is intractable due to the coupling between the $\\theta$ and $\\beta$ under the multinomial assumption; see equation $\\eqref{eq:joint1}$. This is actually a major challenge in applying topic models and developing new models: the computational cost of computing the posterior distribution.\n", + "\n", + "To solve this challenge, there are two common approaches:\n", + "- approximate inference methods, the most popular methods being variational methods, especially mean field methods, and\n", + "- (asymptotically exact) sampling based methods, the most popular being Markov chain Monte Carlo, particularly methods based on collapsed Gibbs sampling\n", + "\n", + "Both mean-field and collapsed Gibbs have the drawback that applying them to new topic models, even if there is only a small change to the modeling assumptions, requires re-deriving the inference methods, which can be mathematically arduous and time consuming, and limits the ability of practitioners to freely explore the space of different modeling assumptions.\n", + "\n", + "Autoencoding variational Bayes (AEVB) is a particularly natural choice for topic models, because it trains an encoder network, a neural network that directly maps a document to an approximate posterior distribution, without the need to run further variational updates. However, despite some notable successes for latent Gaussian models, black box inference methods are significantly more challenging to apply to topic models. Two main challenges are: first, the Dirichlet prior is not a location scale family, which hinders reparameterization, and second, the well known problem of component collapse, in which the encoder network becomes stuck in a bad local optimum in which all topics are identical. (Note, however, that PyTorch/Pyro have included support for reparameterizable gradients for the Dirichlet distribution since 2018).\n", + "\n", + "In the paper Autoencoding Variational Inference For Topic Models from 2017, Akash Srivastava and Charles Sutton addressed both these challenges. They presented the first effective AEVB inference method for topic models, and illustrated it by introducing a new topic model called ProdLDA, which produces better topics than standard LDA, is fast and computationally efficent, and does not require complex mathematical derivations to accomodate changes to the model. Let's now understand this specific model and see how to implement it using Pyro.\n", + "\n", + "## Pre-processing Data and Vectorizing Documents\n", + "So let's get started. The first thing we need to do is to **prepare the data**. We will use the **20 newsgroups text dataset**, one of the datasets used by the authors. The 20 newsgroups dataset comprises around 18000 newsgroups posts on 20 topics. Let's fetch the data:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "from sklearn.datasets import fetch_20newsgroups\n", + "from sklearn.feature_extraction.text import CountVectorizer" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, let's vectorize the corpus. This means:\n", + "\n", + "1. Creating a dictionary where each word corresponds to an (integer) index\n", + "2. Removing rare words (words that appear in less than 20 documents) and common words (words that appear in more than 50% of the documents)\n", + "3. Counting how many times each word appears in each document\n", + "\n", + "The final data `docs` is a M x N array, where M is the number of documents, N is the number of words in the vocabulary, and the data is the total count of words. Our vocabulary is stored in the `vocab` dataframe." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "news = fetch_20newsgroups(subset='all')\n", + "vectorizer = CountVectorizer(max_df=0.5, min_df=20, stop_words='english')\n", + "docs = torch.from_numpy(vectorizer.fit_transform(news['data']).toarray())\n", + "\n", + "vocab = pd.DataFrame(columns=['word', 'index'])\n", + "vocab['word'] = vectorizer.get_feature_names_out()\n", + "vocab['index'] = vocab.index" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Dictionary size: 12722\n", + "Corpus size: torch.Size([18846, 12722])\n" + ] + } + ], + "source": [ + "print('Dictionary size: %d' % len(vocab))\n", + "print('Corpus size: {}'.format(docs.shape))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There we go! We have a dictionary of 12,722 unique words and indices for each of them! And our corpus is comprised of almost 19,000 documents, where each row represents a document, and each column represents a word in the vocabulary. The data is the count of how many times each word occurs in that specific document. Now we are ready to move to the model." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ProdLDA: Latent Dirichlet Allocation with Product of Experts\n", + "\n", + "To successfuly apply AEVB to LDA, here's how the paper's authors addressed the two challenges mentioned earlier.\n", + "\n", + "**Challenge #1: Dirichlet prior is not a location scale family.** To address this issue, they used an encoder network that approximates the Dirichlet prior $p(\\theta | \\alpha)$ with a logistic-normal distribution (more precisely, this is softmax-normal distribution). In other words, they use\n", + "\n", + "$$ p(\\theta | \\alpha) \\approx p(\\theta | \\mu, \\Sigma) = \\mathcal{LN}(\\theta | \\mu, \\Sigma) $$\n", + "\n", + "where $\\mu$ and $\\Sigma$ are the encoder network outputs. \n", + "\n", + "**Challenge #2: Component collapse (i.e. encoder network stuck in bad local optimum).** To address this isue, they used the Adam optimizer, batch normalization and dropout units in the encoder network.\n", + "\n", + "**ProdLDA vs LDA.** Finally, the only remaining difference between ProdLDA and regular LDA is that: i) $\\beta$ is unnormalized; and ii) the conditional distribution of $w_n$ is defined as $w_n | \\beta, \\theta \\sim \\text{Categorical}(\\sigma(\\beta \\theta))$.\n", + "\n", + "That's it. For further details about these particular modeling and inference choices, please see the paper. Now, let's implement this model in Pyro:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "import math\n", + "import torch.nn as nn\n", + "import torch.nn.functional as F\n", + "from pyro.infer import SVI, TraceMeanField_ELBO\n", + "from tqdm import trange" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "class Encoder(nn.Module):\n", + " # Base class for the encoder net, used in the guide\n", + " def __init__(self, vocab_size, num_topics, hidden, dropout):\n", + " super().__init__()\n", + " self.drop = nn.Dropout(dropout) # to avoid component collapse\n", + " self.fc1 = nn.Linear(vocab_size, hidden)\n", + " self.fc2 = nn.Linear(hidden, hidden)\n", + " self.fcmu = nn.Linear(hidden, num_topics)\n", + " self.fclv = nn.Linear(hidden, num_topics)\n", + " # NB: here we set `affine=False` to reduce the number of learning parameters\n", + " # See https://pytorch.org/docs/stable/generated/torch.nn.BatchNorm1d.html\n", + " # for the effect of this flag in BatchNorm1d\n", + " self.bnmu = nn.BatchNorm1d(num_topics, affine=False) # to avoid component collapse\n", + " self.bnlv = nn.BatchNorm1d(num_topics, affine=False) # to avoid component collapse\n", + "\n", + " def forward(self, inputs):\n", + " h = F.softplus(self.fc1(inputs))\n", + " h = F.softplus(self.fc2(h))\n", + " h = self.drop(h)\n", + " # μ and Σ are the outputs\n", + " logtheta_loc = self.bnmu(self.fcmu(h))\n", + " logtheta_logvar = self.bnlv(self.fclv(h))\n", + " logtheta_scale = (0.5 * logtheta_logvar).exp() # Enforces positivity\n", + " return logtheta_loc, logtheta_scale\n", + "\n", + "\n", + "class Decoder(nn.Module):\n", + " # Base class for the decoder net, used in the model\n", + " def __init__(self, vocab_size, num_topics, dropout):\n", + " super().__init__()\n", + " self.beta = nn.Linear(num_topics, vocab_size, bias=False)\n", + " self.bn = nn.BatchNorm1d(vocab_size, affine=False)\n", + " self.drop = nn.Dropout(dropout)\n", + "\n", + " def forward(self, inputs):\n", + " inputs = self.drop(inputs)\n", + " # the output is σ(βθ)\n", + " return F.softmax(self.bn(self.beta(inputs)), dim=1)\n", + "\n", + "\n", + "class ProdLDA(nn.Module):\n", + " def __init__(self, vocab_size, num_topics, hidden, dropout):\n", + " super().__init__()\n", + " self.vocab_size = vocab_size\n", + " self.num_topics = num_topics\n", + " self.encoder = Encoder(vocab_size, num_topics, hidden, dropout)\n", + " self.decoder = Decoder(vocab_size, num_topics, dropout)\n", + "\n", + " def model(self, docs):\n", + " pyro.module(\"decoder\", self.decoder)\n", + " with pyro.plate(\"documents\", docs.shape[0]):\n", + " # Dirichlet prior 𝑝(𝜃|𝛼) is replaced by a logistic-normal distribution\n", + " logtheta_loc = docs.new_zeros((docs.shape[0], self.num_topics))\n", + " logtheta_scale = docs.new_ones((docs.shape[0], self.num_topics))\n", + " logtheta = pyro.sample(\n", + " \"logtheta\", dist.Normal(logtheta_loc, logtheta_scale).to_event(1))\n", + " theta = F.softmax(logtheta, -1)\n", + "\n", + " # conditional distribution of 𝑤𝑛 is defined as \n", + " # 𝑤𝑛|𝛽,𝜃 ~ Categorical(𝜎(𝛽𝜃))\n", + " count_param = self.decoder(theta)\n", + " # Currently, PyTorch Multinomial requires `total_count` to be homogeneous.\n", + " # Because the numbers of words across documents can vary,\n", + " # we will use the maximum count accross documents here.\n", + " # This does not affect the result because Multinomial.log_prob does\n", + " # not require `total_count` to evaluate the log probability.\n", + " total_count = int(docs.sum(-1).max())\n", + " pyro.sample(\n", + " 'obs',\n", + " dist.Multinomial(total_count, count_param),\n", + " obs=docs\n", + " )\n", + "\n", + " def guide(self, docs):\n", + " pyro.module(\"encoder\", self.encoder)\n", + " with pyro.plate(\"documents\", docs.shape[0]):\n", + " # Dirichlet prior 𝑝(𝜃|𝛼) is replaced by a logistic-normal distribution,\n", + " # where μ and Σ are the encoder network outputs\n", + " logtheta_loc, logtheta_scale = self.encoder(docs)\n", + " logtheta = pyro.sample(\n", + " \"logtheta\", dist.Normal(logtheta_loc, logtheta_scale).to_event(1))\n", + "\n", + " def beta(self):\n", + " # beta matrix elements are the weights of the FC layer on the decoder\n", + " return self.decoder.beta.weight.cpu().detach().T" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we have defined our model, let's train it. We will use the following hyperparameters:\n", + "\n", + "- 20 topics\n", + "- Batch size of 32\n", + "- 1e-3 learning rate\n", + "- Train for 50 epochs\n", + "\n", + "Important: the training takes ~5 min using the above hyperparameters on a GPU system, but might take a couple of hours or more on a CPU system." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "# setting global variables\n", + "seed = 0\n", + "torch.manual_seed(seed)\n", + "pyro.set_rng_seed(seed)\n", + "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n", + "\n", + "num_topics = 20 if not smoke_test else 3\n", + "docs = docs.float().to(device)\n", + "batch_size = 32\n", + "learning_rate = 1e-3\n", + "num_epochs = 50 if not smoke_test else 1" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 50/50 [04:37<00:00, 5.55s/it, epoch_loss=3.72e+05]\n" + ] + } + ], + "source": [ + "# training\n", + "pyro.clear_param_store()\n", + "\n", + "prodLDA = ProdLDA(\n", + " vocab_size=docs.shape[1],\n", + " num_topics=num_topics,\n", + " hidden=100 if not smoke_test else 10,\n", + " dropout=0.2\n", + ")\n", + "prodLDA.to(device)\n", + "\n", + "optimizer = pyro.optim.Adam({\"lr\": learning_rate})\n", + "svi = SVI(prodLDA.model, prodLDA.guide, optimizer, loss=TraceMeanField_ELBO())\n", + "num_batches = int(math.ceil(docs.shape[0] / batch_size)) if not smoke_test else 1\n", + "\n", + "bar = trange(num_epochs)\n", + "for epoch in bar:\n", + " running_loss = 0.0\n", + " for i in range(num_batches):\n", + " batch_docs = docs[i * batch_size:(i + 1) * batch_size, :]\n", + " loss = svi.step(batch_docs)\n", + " running_loss += loss / batch_docs.size(0)\n", + "\n", + " bar.set_postfix(epoch_loss='{:.2e}'.format(running_loss))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And that's it! Now, let's visualize the results.\n", + "\n", + "## WordClouds\n", + "Let's check the word clouds for each of the 20 topics. We will use a Python package called `wordcloud`. We will visualize the top 100 words per topic, where the font size of each is proportional to its beta (i.e. the larger the word, the more important it is to the corresponding topic):" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "def plot_word_cloud(b, ax, v, n):\n", + " sorted_, indices = torch.sort(b, descending=True)\n", + " df = pd.DataFrame(indices[:100].numpy(), columns=['index'])\n", + " words = pd.merge(df, vocab[['index', 'word']], \n", + " how='left', on='index')['word'].values.tolist()\n", + " sizes = (sorted_[:100] * 1000).int().numpy().tolist()\n", + " freqs = {words[i]: sizes[i] for i in range(len(words))}\n", + " wc = WordCloud(background_color=\"white\", width=800, height=500)\n", + " wc = wc.generate_from_frequencies(freqs)\n", + " ax.set_title('Topic %d' % (n + 1))\n", + " ax.imshow(wc, interpolation='bilinear')\n", + " ax.axis(\"off\")\n", + " \n", + "if not smoke_test:\n", + " import matplotlib.pyplot as plt\n", + " from wordcloud import WordCloud\n", + "\n", + " beta = prodLDA.beta()\n", + " fig, axs = plt.subplots(7, 3, figsize=(14, 24))\n", + " for n in range(beta.shape[0]):\n", + " i, j = divmod(n, 3)\n", + " plot_word_cloud(beta[n], axs[i, j], vocab, n)\n", + " axs[-1, -1].axis('off');\n", + "\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As can be observed from the 20 word clouds above, the model successfully found several coherent topics. Highlights include:\n", + "\n", + "- Topic 1 domain: computer graphics\n", + "- Topic 3 domain: health\n", + "- Topic 5 domain: sport\n", + "- Topic 6 domain: transportation\n", + "- Topic 7 domain: sale\n", + "- Topic 8 domain: religion\n", + "- Topic 10 domain: hardware\n", + "- Topic 11 domain: numbers\n", + "- Topic 12 domain: middle east\n", + "- Topic 13 domain: electronic communication\n", + "- Topic 15 domain: space\n", + "- Topic 18 domain: medical\n", + "- Topic 20 domain: atheism \n", + "\n", + "## Conclusion\n", + "In this tutorial, we have introduced Probabilistic Topic Modeling, Latent Dirichlet Allocation, and implemented ProdLDA in Pyro: a new topic model introduced in 2017 that effectively applies the AEVB inference algorithm to latent Dirichlet allocation. We hope you have fun exploring the power of unsupervised machine learning to manage large archives of documents!\n", + "\n", + "## References\n", + "1. Akash Srivastava, & Charles Sutton. (2017). Autoencoding Variational Inference For Topic Models.\n", + "2. Blei, D. (2012). Probabilistic Topic Models. Commun. ACM, 55(4), 77–84.\n", + "3. Blei, D. M., Ng, A. Y., & Jordan, M. I. (2003). Latent dirichlet allocation. Journal of machine Learning research, 3(Jan), 993-1022." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/pyro/source/tutorial/source/reconciling_experts.ipynb b/pyro/source/tutorial/source/reconciling_experts.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..0b3749ec325dd371ee82fb3db2a112edf38a6395 --- /dev/null +++ b/pyro/source/tutorial/source/reconciling_experts.ipynb @@ -0,0 +1,655 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Example: Reconciling Expert Opinions\n", + "\n", + "This tutorial demonstrates how time dependent expert opinions can be reconciled in a Bayesian framework. We make use of the following effect handlers in order to modify model behavior:\n", + "- [poutine.reparam](http://docs.pyro.ai/en/latest/poutine.html#pyro.poutine.handlers.reparam) for splitting observations to several random variables using the [SplitReparam](https://docs.pyro.ai/en/latest/infer.reparam.html#pyro.infer.reparam.split.SplitReparam) reparameterizer.\n", + "- [poutine.condition](http://docs.pyro.ai/en/latest/poutine.html#pyro.poutine.handlers.condition) for assigning fixed values to random variables. \n", + "- [poutine.equalize](http://docs.pyro.ai/en/latest/poutine.html#pyro.poutine.handlers.equalize) for forcing random variables to have the same values.\n", + "\n", + "## Summary\n", + "- Effect handlers are useful in modifying model behavior, beyond the straightforward use of effect handlers in order to condition models on known observations. \n", + "- Directly sampling from modified models is often not possible, and one should resort to inference methods such as SVI or MCMC in order to sample from models modified by effect handlers.\n", + "- The above is true even if the models are not conditioned on known observations.\n", + "\n", + "\n", + "## Some Preliminaries\n", + "\n", + "We can view a time dependent expert opinion $x_i$ as a random walk process developing over time step $i$ such that\n", + "\n", + "$$\n", + "x_{i+1} = x_i + \\epsilon_i\n", + "$$\n", + "with the $x_i$ being the observations and the $\\epsilon_i$ being the innovations.\n", + "\n", + "We start with some imports and setup." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import torch, pyro, os\n", + "\n", + "import pyro.distributions as dist\n", + "from pyro.nn import PyroModuleList, PyroModule, PyroSample\n", + "from pyro.infer.reparam import SplitReparam\n", + "\n", + "from matplotlib import pyplot as plt\n", + "\n", + "smoke_test = ('CI' in os.environ) # for use in continuous integration testing\n", + "num_samples = 4 if smoke_test else 1000\n", + "num_svi_iter = 4 if smoke_test else 1001" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's define an expert model as a class." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# Define the innovations to observations transform\n", + "class CumSumTransform(dist.transforms.Transform):\n", + " domain = dist.constraints.independent(dist.constraints.real, 1)\n", + " codomain = dist.constraints.independent(dist.constraints.real, 1)\n", + " bijective = True\n", + "\n", + " def log_abs_det_jacobian(self, x, y):\n", + " return x.new_zeros(x.shape[:(-1)])\n", + "\n", + " def _call(self, x):\n", + " return x.cumsum(dim=-1)\n", + "\n", + " def _inverse(self, x):\n", + " return torch.diff(x, prepend=x.new_zeros(x.shape[:-1] + (1,)))\n", + "\n", + "# The expert class defines the actual distributions of the innovations and observations\n", + "class Expert(PyroModule):\n", + " def __init__(self, num_steps, scale, loc=torch.tensor(0.0)):\n", + " super().__init__()\n", + " self.scale = scale\n", + " self.loc = loc\n", + " self.num_steps = num_steps\n", + " self.obs = PyroSample(lambda self: dist.TransformedDistribution(self.innovations(), CumSumTransform()))\n", + "\n", + " def innovations(self):\n", + " eps = dist.Normal(self.loc[..., None], self.scale[..., None])\n", + " return eps.expand(eps.batch_shape[:-1] + (self.num_steps,)).to_event(1)\n", + "\n", + " def forward(self):\n", + " return self.obs\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can combine several experts into a single model class, along with Bayesian priors for the scale of the innovations." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "class Model(PyroModule):\n", + " def __init__(self, num_experts, num_steps, scale_prior_dist=pyro.distributions.LogNormal(loc=0, scale=1)):\n", + " super().__init__()\n", + " self.experts = PyroModuleList([Expert(num_steps, PyroSample(scale_prior_dist)) for expert_num in range(num_experts)])\n", + " \n", + " def forward(self):\n", + " return torch.cat([expert()[..., None] for expert in self.experts], dim=-1)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "Now let's create a model with two experts and 50 time steps." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "num_experts = 2\n", + "num_steps = 50\n", + "\n", + "model = Model(num_experts, num_steps)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As the model is Bayesian it has priors for all of its parameters and we can sample from it right away, even without any conditioning on known observations." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "seed = 42\n", + "pyro.set_rng_seed(seed)\n", + "pyro.clear_param_store()\n", + "\n", + "plt.figure()\n", + "for i in range(4):\n", + " plt.subplot(2, 2, i + 1)\n", + " plt.plot(model().detach().numpy())\n", + " plt.grid()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The two time series are independent and have different step variance. The model can be described by the directed graph shown below, where each node represents a random variable and the edges represent the dependencies between the random variables" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "experts.0.scale\n", + "\n", + "experts.0.scale\n", + "\n", + "\n", + "\n", + "experts.0.obs\n", + "\n", + "experts.0.obs\n", + "\n", + "\n", + "\n", + "experts.0.scale->experts.0.obs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "experts.1.scale\n", + "\n", + "experts.1.scale\n", + "\n", + "\n", + "\n", + "experts.1.obs\n", + "\n", + "experts.1.obs\n", + "\n", + "\n", + "\n", + "experts.1.scale->experts.1.obs\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "distribution_description_node\n", + "experts.0.scale ~ LogNormal\n", + "experts.0.obs ~ TransformedDistribution\n", + "experts.1.scale ~ LogNormal\n", + "experts.1.obs ~ TransformedDistribution\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pyro.render_model(model, render_distributions=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The directed graph describes the model's probability function which assigns a probability to each outcome of the model.\n", + "\n", + "$$\n", + "P_M \\left( x_i^{(j)}, \\epsilon_i^{(j)} \\right)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Prior Knowledge and Model Conditioning\n", + "\n", + "Model conditioning allows us to incorporate prior knowledge into the model, altering its predictions to reflect the effect of the prior knowledge.\n", + "\n", + "We mark the conditionining of the model by\n", + "\n", + "$$\n", + "P_M \\left( x_i^{(j)}, \\epsilon_i^{(j)} | \\text{condition} \\right) =\n", + "\\frac{ P_M \\left( x_i^{(j)}, \\epsilon_i^{(j)}, \\text{condition} \\right) }{ P_M \\left( \\text{condition} \\right) }\n", + "$$\n", + "\n", + "which is usually difficult to calculate and sample from. Note that index $i$ marks the time step and index $j$ marks the time series (expert).\n", + "\n", + "A very simple form of model conditioning can be setting the last observation of both time series to zero, as described in the conditioned model defined below." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "# Split the last observation time step from previous time steps\n", + "reparams = dict()\n", + "for expert_num in range(num_experts):\n", + " # The arguments to SplitReparam are, a list of section lengths,\n", + " # and the dimension over which to split the random variable into those sections.\n", + " reparams[f'experts.{expert_num}.obs'] = SplitReparam([num_steps - 1, 1], -1)\n", + "split_reparam_model = pyro.poutine.reparam(model, config=reparams)\n", + "\n", + "# Set the last observation time step to zero\n", + "zero_ultimate_model = pyro.poutine.condition(split_reparam_model, data={f\"experts.{n}.obs_split_1\":\n", + " torch.zeros(1)\n", + " for n in range(num_experts)})" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now comes the tricky part, we need a way to sample from the conditioned model. The method we choose is called Stochastic Variational Inference (SVI) but other methods like Markov Chain Monte Carlo (MCMC) will also do. SVI creates a guide which approximates the distribution of samples from the conditioned model. " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "iteration 0 loss = 189.6769256591797\n", + "iteration 100 loss = 37.504974365234375\n", + "iteration 200 loss = 20.005374908447266\n", + "iteration 300 loss = 18.326749801635742\n", + "iteration 400 loss = 16.923477172851562\n", + "iteration 500 loss = 16.572237014770508\n", + "iteration 600 loss = 16.390729904174805\n", + "iteration 700 loss = 14.698869705200195\n", + "iteration 800 loss = 15.261019706726074\n", + "iteration 900 loss = 14.944127082824707\n", + "iteration 1000 loss = 14.985832214355469\n" + ] + } + ], + "source": [ + "def fit(model, *args, **kwargs):\n", + " guide = pyro.infer.autoguide.guides.AutoMultivariateNormal(model)\n", + " optimizer = pyro.optim.Adam(dict(lr=0.01))\n", + " loss = pyro.infer.JitTrace_ELBO(num_particles=20, vectorize_particles=True, ignore_jit_warnings=True)\n", + " svi = pyro.infer.SVI(model, guide, optimizer, loss)\n", + " for count in range(num_svi_iter):\n", + " loss = svi.step(*args, **kwargs)\n", + " if count % 100 == 0:\n", + " print(f\"iteration {count} loss = {loss}\")\n", + " return guide\n", + "\n", + "pyro.set_rng_seed(seed)\n", + "pyro.clear_param_store()\n", + "\n", + "guide = fit(zero_ultimate_model)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We now sample from the conditioned model and guide, in order to show how the conditioned model behaves." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sampler = pyro.infer.Predictive(zero_ultimate_model, guide=guide,\n", + " num_samples=num_samples, parallel=True, return_sites=('_RETURN',))\n", + "samples = sampler()['_RETURN']\n", + "\n", + "plt.figure()\n", + "for i in range(4):\n", + " plt.subplot(2, 2, i + 1)\n", + " plt.plot(samples[i].detach().numpy())\n", + " plt.grid()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A more interesting conditioned model is one where both time series must converge to the same value, but not necessarily zero. This is how a panel of experts would behave, where ongoing predictions of an ultimate value, by all experts, must eventually converge to the same value.\n", + "\n", + "The model that describes such a condition is described below." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "same_ultimate_model = pyro.poutine.equalize(split_reparam_model, r\"experts\\.[0-9]+\\.obs_split_1\", keep_dist=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Sampling from this model requires creating a new guide." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "iteration 0 loss = 187.51556396484375\n", + "iteration 100 loss = 36.83899688720703\n", + "iteration 200 loss = 19.414623260498047\n", + "iteration 300 loss = 16.364402770996094\n", + "iteration 400 loss = 15.203102111816406\n", + "iteration 500 loss = 15.109318733215332\n", + "iteration 600 loss = 15.28489875793457\n", + "iteration 700 loss = 14.779726028442383\n", + "iteration 800 loss = 15.220026016235352\n", + "iteration 900 loss = 13.708727836608887\n", + "iteration 1000 loss = 14.914263725280762\n" + ] + } + ], + "source": [ + "pyro.set_rng_seed(seed)\n", + "pyro.clear_param_store()\n", + "\n", + "guide = fit(same_ultimate_model)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Equipeed with the new guide we can now sample from the same ultimate value model." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sampler = pyro.infer.Predictive(same_ultimate_model, guide=guide,\n", + " num_samples=num_samples, parallel=True, return_sites=('_RETURN',))\n", + "samples = sampler()['_RETURN']\n", + "\n", + "plt.figure()\n", + "for i in range(4):\n", + " plt.subplot(2, 2, i + 1)\n", + " plt.plot(samples[i].detach().numpy())\n", + " plt.grid()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The model exhibits the correct behavior with ultimate values of both time series converging to the same value." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Adding Observations\n", + "\n", + "Lastly, we would like to be able to take into account actual observations when working with the same ultimate model. This completes the Bayesian framework which incorporates our:\n", + "- Model.\n", + "- Prior knowledge.\n", + "- Observations.\n", + "\n", + "In order to do that we need to modify the same ultimate model so that we can observe some of the first samples." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "num_observed = int(num_steps / 2)\n", + "\n", + "# Split the observations into three parts where the first part will be conditioned by our observations\n", + "reparams = dict()\n", + "for expert_num in range(num_experts):\n", + " reparams[f'experts.{expert_num}.obs'] = SplitReparam([num_observed, num_steps - num_observed - 1, 1], -1)\n", + "split_reparam_model = pyro.poutine.reparam(model, config=reparams)\n", + "\n", + "# Ensure experts agree on last observation\n", + "same_ultimate_model = pyro.poutine.equalize(split_reparam_model, r\"experts\\.[0-9]+\\.obs_split_2\", keep_dist=True)\n", + "\n", + "# Condition by our observations\n", + "observations = samples[0][..., range(num_observed), :]\n", + "conditioned_same_ultimate_model = pyro.poutine.condition(same_ultimate_model, data={f\"experts.{n}.obs_split_0\":\n", + " observations[..., n]\n", + " for n in range(num_experts)})" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We now fit the model to the first half of the samples generated in the first sub-plot of the previous graph, by creating a new guide that enables sampling from the model combining both prior knowledge and actual observations." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "iteration 0 loss = 147.98159790039062\n", + "iteration 100 loss = 40.59894561767578\n", + "iteration 200 loss = 28.505329132080078\n", + "iteration 300 loss = 26.82405662536621\n", + "iteration 400 loss = 27.98712730407715\n", + "iteration 500 loss = 27.576807022094727\n", + "iteration 600 loss = 27.878671646118164\n", + "iteration 700 loss = 27.198638916015625\n", + "iteration 800 loss = 26.90561294555664\n", + "iteration 900 loss = 27.4914493560791\n", + "iteration 1000 loss = 26.847055435180664\n" + ] + } + ], + "source": [ + "pyro.set_rng_seed(seed)\n", + "pyro.clear_param_store()\n", + "\n", + "guide = fit(conditioned_same_ultimate_model)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We now sample from the newly created guide." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "new_sampler = pyro.infer.Predictive(conditioned_same_ultimate_model, guide=guide,\n", + " num_samples=num_samples, parallel=True, return_sites=('_RETURN',))\n", + "new_samples = new_sampler()['_RETURN']\n", + "\n", + "plt.figure()\n", + "for i in range(4):\n", + " plt.subplot(2, 2, i + 1)\n", + " plt.plot(new_samples[i].detach().numpy())\n", + " plt.ylim([-2, 2])\n", + " plt.grid()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see that all samples are comprised of the same first half of observed samples, while still maintaining the same end value for both time series (our prior knowledge).\n", + "\n", + "Overlayling many samples over each other we see that both time series (experts) tend towards each other in order to ensure agreement is achieved at the last samples." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure()\n", + "for i in range(new_samples.shape[0]):\n", + " plt.plot(new_samples[i, ..., 0].detach().numpy(), alpha=0.05, color='blue')\n", + " plt.plot(new_samples[i, ..., 1].detach().numpy(), alpha=0.05, color='orange')\n", + "plt.grid()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/scanvi.ipynb b/pyro/source/tutorial/source/scanvi.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..9b7c6c12a760460e024ec5baff33aa31c90b5cbd --- /dev/null +++ b/pyro/source/tutorial/source/scanvi.ipynb @@ -0,0 +1,976 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "s3nSo4zQPz4q" + }, + "source": [ + "# *scANVI: Deep Generative Modeling for Single Cell Data with Pyro*\n", + "\n", + "In this tutorial we show how to use Pyro to construct a semi-supervised deep generative model of transcriptomics data that can be used to propagate labels\n", + "from a small set of labeled cells to a larger set of unlabeled cells. \n", + "In particular we use a dataset of peripheral blood mononuclear cells (PBMC) from 10x Genomics and\n", + "(approximately) reproduce Figure 6 in [Probabilistic Harmonization and Annotation of Single-cell Transcriptomics Data with Deep Generative Models](https://www.embopress.org/doi/full/10.15252/msb.20209620).\n", + "\n", + "(Note that the code below is also available as a [script](https://github.com/pyro-ppl/pyro/blob/dev/examples/scanvi/scanvi.py).)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 120 + }, + "execution": { + "iopub.execute_input": "2021-11-30T23:00:30.734915Z", + "iopub.status.busy": "2021-11-30T23:00:30.734411Z", + "iopub.status.idle": "2021-11-30T23:00:35.722079Z", + "shell.execute_reply": "2021-11-30T23:00:35.722499Z" + }, + "id": "OuLXRxsavSmq", + "outputId": "bfc8e60b-8f5d-4f6a-a33e-8b9a48f0d628" + }, + "outputs": [], + "source": [ + "# setup environment\n", + "import os\n", + "smoke_test = ('CI' in os.environ) # for continuous integration tests\n", + "\n", + "if not smoke_test:\n", + " # install scanpy (used for pre-processing and UMAP)\n", + " !pip install -q scanpy==1.8.2\n", + " !pip install -q umap-learn==0.5.1\n", + " # install scvi (used to get data)\n", + " !pip install -q scvi-tools[tutorials]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "execution": { + "iopub.execute_input": "2021-11-30T23:00:35.727728Z", + "iopub.status.busy": "2021-11-30T23:00:35.725028Z", + "iopub.status.idle": "2021-11-30T23:00:36.787721Z", + "shell.execute_reply": "2021-11-30T23:00:36.788085Z" + }, + "id": "K4nC4QQYyR3e" + }, + "outputs": [], + "source": [ + "# various import statements\n", + "import numpy as np\n", + "\n", + "import torch\n", + "import torch.nn as nn\n", + "from torch.nn.functional import softplus, softmax\n", + "from torch.distributions import constraints\n", + "from torch.optim import Adam\n", + "\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "import pyro.poutine as poutine\n", + "from pyro.distributions.util import broadcast_shape\n", + "from pyro.optim import MultiStepLR\n", + "from pyro.infer import SVI, config_enumerate, TraceEnum_ELBO\n", + "from pyro.contrib.examples.scanvi_data import get_data\n", + "\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib.patches import Patch" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Data pre-processing" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "execution": { + "iopub.execute_input": "2021-11-30T23:00:36.793629Z", + "iopub.status.busy": "2021-11-30T23:00:36.793162Z", + "iopub.status.idle": "2021-11-30T23:00:51.123472Z", + "shell.execute_reply": "2021-11-30T23:00:51.123916Z" + }, + "id": "tzrivzogypm0" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "OMP: Info #271: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.\n" + ] + } + ], + "source": [ + "%%capture\n", + "# Download and pre-process data\n", + "batch_size = 100\n", + "if not smoke_test:\n", + " dataloader, num_genes, l_mean, l_scale, anndata = get_data(dataset='pbmc', cuda=True, batch_size=batch_size)\n", + "else:\n", + " dataloader, num_genes, l_mean, l_scale, anndata = get_data(dataset='mock')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Brpx7AnF8DIE" + }, + "source": [ + "The PBMC transcriptomics data are encoded as a count matrix of size N x G, with N=20,000 cells and G=21,932 genes.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "r-HHRTEf8mYi" + }, + "source": [ + "![count_matrix.png](data:image/png;base64,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vNsQghfiWG655dyuu+7qysvLE3EbVvPnz3dvv/22e33S627CKxPcu+++67755hvXpUsX17FjR8V4o402chtutKFbd5111SjYuw3hxYctMQQks3nyCDQ5AqJoE98U5RoTBY/Wy+p3yy23xH7//Xd9PxiPKKzEvQMPPDCruOr75i+//JLg86mnnkoZ56233pr4biJwzYnxJwauzrsnnXSShjK+xQDERBnXCVcfj+Hn/fv3j4nCT8Rt8U+ZMiW20047ZR3/3//+95gY40Q8NSL5QwtEwPcRSCny1LQIWA2T2uvll1/uzj77bGVglVVW0RotNVncE1Le9D61c1wYrVu3dj///LM74ogj3BNPPOH+/e9/a+3X4gtK0bVrV71cZ5113B9//KHn4XiD4YPnhOMdaslBdw8tBGj99dd3YiD0Ga2Fww47zA0aNMituuqqaVsp5m5Zb731NAw18c6dOwc/q/HR8qFVQGuB2jtE6yCbFgJunf/9739u7bXXTvANhrh8Xn75ZbfllltqfCuvvLJiC57IgazIRusLecGa7/3nP//R3+TJk90GG2yQVjaN1P8paQS8ISjp5Cs95k0xVVVVuTPOOMNdddVVDmX91VdfqTsI5fv555/XEWyZZZZRJTV37ly37rrrOqmdO6mxukceecQtueSSCaNhLxI/NGfOHDd79mx91wyLhanviHsq+I6d//TTT+7LL7/U11dYYQU9YtCkpZJQ2EEDQoDguxg2yI56UfMHvz30/fffK+/EY+/WBKn3gHI3wghMnz5djcCyyy6rWM2cOVMfY4iD9MMPP+jl8ssv77799lu30kor6bsbbrihuo+6d+/upM3lyoQnTy0LAW8IWlZ6low0999/vxoBlPrUqVNdp06d1G8+Y8YMVfA77rijQ3HhS3/nnXfceeedp7KhpAhPrfe5555zd955pzvmmGPSyo0iRRnSaujdu7f2L3Cuo4lS6DOULi0CauPU2MMKnQ/ZPY4YC1oCd9xxh9t9993dzjvvrIrbwqRiLNMzC08Y43v11VdXXjAcmd6lhg9+3bp1s2j0ePfdd+uRGj9Gwejee+91m222mbYGaAV88cUX2gK47bbbHC0qwiIbfTUY3BEjRjRyDJZ92R+LDgHJ+J48Ak2CgCgy/c5nn32mfuoVV1xRj6Kg9CiFI/biiy/GpDZfhx/e2WKLLTScKCk9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)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 51 + }, + "execution": { + "iopub.execute_input": "2021-11-30T23:00:51.128491Z", + "iopub.status.busy": "2021-11-30T23:00:51.128009Z", + "iopub.status.idle": "2021-11-30T23:00:51.137014Z", + "shell.execute_reply": "2021-11-30T23:00:51.136650Z" + }, + "id": "qJUmuX1Jyvms", + "outputId": "95c6ce16-f285-406f-bf7b-1578c8820bc8" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Count data matrix shape: torch.Size([20000, 21932])\n", + "Mean counts per cell: 1418.6\n" + ] + } + ], + "source": [ + "print(\"Count data matrix shape:\", dataloader.data_x.shape)\n", + "print(\"Mean counts per cell: {:.1f}\".format(dataloader.data_x.sum(-1).mean().item()))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "O2z-p0CkyzCw" + }, + "source": [ + "In addition 200 of the 20,000 cells have been labeled using a hand-curated list of marker genes that includes e.g. CD4 and CD8B. This annotation introduces four discrete cell types:\n", + "- CD8 Naive T cell\n", + "- CD4 Naive T cell\n", + "- CD4 Memory T cell\n", + "- CD4 Regulatory T cell" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "execution": { + "iopub.execute_input": "2021-11-30T23:00:51.140259Z", + "iopub.status.busy": "2021-11-30T23:00:51.139036Z", + "iopub.status.idle": "2021-11-30T23:00:51.142395Z", + "shell.execute_reply": "2021-11-30T23:00:51.142722Z" + }, + "id": "y0LftuRgzWHq", + "outputId": "3b82d20c-3582-4442-ce07-1cfc405b8027" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of labeled cells: 200\n" + ] + } + ], + "source": [ + "print(\"Number of labeled cells:\", dataloader.num_labeled)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Semi-supervised generative modeling" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8x1ArSpf1OBD" + }, + "source": [ + "Our high-level goal is to learn a parametric model p(**x**) that provides a good fit to the observed count data {**x**_i}. \n", + "To build a sufficiently rich and flexible model we introduce several latent variables that can capture variability in the data. In particular we introduce the following latent variables:\n", + "- two continuous latent variables **z**_1 and **z**_2 which are intended to encode things like cell state\n", + "- a scalar latent variable **ℓ** that encodes the total number of counts in a cell, and thus reflects cell size, capture efficiency, etc\n", + "- a discrete latent variable **y** that encodes the four possible cell labels\n", + "\n", + "The structure of our model can be represented as a plate diagram, with the index *i* ranging over the N cells (in other words we are modeling the count matrix row-by-row). \n", + "In particular each cell has its own copy of each of these latent variables:" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6T6m8aMVBnQU" + }, + "source": [ + "![plate.png](data:image/png;base64,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HeDxxz72sfCJT3wiTDvttInH/dwg2pj3vgAbdQBAQAADuDz66GPhvvv+Ee6+++5w2223+a9e3owfP96XYXzlK18JX/jCF8Kcc84ZWFwmqmdhmcKOhGM5Hv/nP/8Jjz0Gj+9zHt9xxx3hpptuqru4WJyz1IWFevB4rrnmClNPPXX+/mjjcV7wUXrS02BT2gHefffdcP/994drrrnGTabpBM3SeeedF/iJWN3+ne98Jyy11FIOPJJuRnqHKOUxEiGLb//85z+H3/72t+Guu+4Sixo+/vGPfwz8RGuvs3ZY/burh69//evhs5/9bC7xjHQeq/yj/dizYKMGiCTz3//+N/zlL38JJ554Yrj44ovL1hkSytJLLx0+97nPBUR4TKoZLmHxiLj/2muvBaQhjnSgP/3pTz7UUmRnn3124Af94he/CN/73vfCAgss4B2CDglJqvKLEfAn5vFbb73lUsvJJ58czj333LKl+9KXvuRgPM8884SPfvSjPhRlaApfWP0LfxliMdzC/QDSJsNa0bl/ODfwg/bYY4+w9tprh4UXXnhE81hlT0fjgHWkYWROs/yeNRZ6mf/sC+X39GzYS226YR0gUxoGEtlll12WmT+dPB/KD8fdd989M9DIHn744cwaeGZLKerKhUlI2QsvvJDZsCCzzpVZo8/jN6DKz3fbbbfsX//6Vx6n8pXf6NOTmMdmep5dffXV2Te/+c283DGPd95558wAPvvnP//pPCY8RBzwmzoyoMnsg5AZkGcvv/xy9txzz3mdwF/azQEHHJCtuuqqefy2xi4/33HHHbMHH3ww5+TEDwbaXn4jnfQMB9T+TzvttLz+br75Zs+fnlXLbE+BTZxhGy5l6667rhdq5plnzgu34YYbOgABFuVIHYm4yv14XkqAjw0dsmOOOSYzScjT+sxnPpOnecLxJ3hn4j3iLBdHaZy9eh3z+KGHHso23nhjL6dJgXl5AV8ABtAoRzbUyt5++23niUkzmUkzmSmMs+effz579tlns6effjp78skn89+jjz6ameeA7KKLLspMoslmnXVWT2uOOebI0zzqqKMy4oImftjfPC7Hs5FwT22n78Hmg4kDUgkNOS6MrTb3Brnlllu6JKIvqypPgNIIABCWn95VXBxtJiszXUVmQwNP1/x2+HGZZZbJzHNhHrSR9PKXunyixsKRMkqCmWPOOf18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)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0N1ylwGVCnCr" + }, + "source": [ + "Note that in this diagram the partial shading of **y** indicates that sometimes **y** is unobserved and sometimes it is not: this is a semi-supervised model.\n", + "\n", + "Before we write down a *complete* specification of this model in Pyro (including in particular neural networks), let's start by writing some code that illustrates the high-level structure of the model:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "execution": { + "iopub.execute_input": "2021-11-30T23:00:51.150591Z", + "iopub.status.busy": "2021-11-30T23:00:51.144888Z", + "iopub.status.idle": "2021-11-30T23:00:51.152186Z", + "shell.execute_reply": "2021-11-30T23:00:51.152541Z" + }, + "id": "KFaWbIJzDY9c" + }, + "outputs": [], + "source": [ + "def model_sketch(x, y=None):\n", + " # This gene-level parameter modulates the variance of the \n", + " # observation distribution for our vector of counts x\n", + " theta = pyro.param(\"inverse_dispersion\", 10.0 * torch.ones(num_genes),\n", + " constraint=constraints.positive)\n", + "\n", + " # The plate statement encodes that each datapoint (i.e. cell count vector x_i)\n", + " # is conditionally independent given its own latent variables.\n", + " with pyro.plate(\"batch\", len(x)):\n", + " # Define a unit Normal prior distribution for z1\n", + " z1 = pyro.sample(\"z1\", dist.Normal(0, torch.ones(latent_dim)).to_event(1))\n", + " # Define a uniform categorical prior for y.\n", + " # Note that if y is None (i.e. y is unobserved) then y will be sampled;\n", + " # otherwise y will be treated as observed. \n", + " y = pyro.sample(\"y\", dist.OneHotCategorical(logits=torch.zeros(num_labels)),\n", + " obs=y)\n", + "\n", + " # Pass z1 and y to the z2 decoder neural network\n", + " z2_loc, z2_scale = z2_decoder(z1, y) \n", + " # Define the prior distribution for z2. The parameters of this distribution\n", + " # depend on both z1 and y. \n", + " z2 = pyro.sample(\"z2\", dist.Normal(z2_loc, z2_scale).to_event(1))\n", + "\n", + " # Define a LogNormal prior distribution for the log count variable ℓ\n", + " l = pyro.sample(\"l\", dist.LogNormal(l_loc, l_scale).to_event(1))\n", + "\n", + " # We now construct the observation distribution. To do this we \n", + " # first pass z2 to the x decoder neural network. \n", + " gate_logits, mu = x_decoder(z2)\n", + " # Using the outputs of the neural network we can define the parameters\n", + " # of our ZINB observation distribution.\n", + " # Note that by construction mu is normalized (i.e. mu.sum(-1) == 1) and the\n", + " # total scale of counts for each cell is determined by the latent variable ℓ.\n", + " # That is, `l * mu` is a G-dimensional vector of mean gene counts.\n", + " nb_logits = (l * mu).log() - theta.log()\n", + " x_dist = dist.ZeroInflatedNegativeBinomial(gate_logits=gate_logits, \n", + " total_count=theta,\n", + " logits=nb_logits)\n", + " # Observe the datapoint x using the observation distribution x_dist\n", + " pyro.sample(\"x\", x_dist.to_event(1), obs=x)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "G49G_jdfFbzq" + }, + "source": [ + "## Variational inference\n", + "\n", + "Recall that in Variational Inference it's necessary to specify a variational distribution. In Pyro we call these *guides*. \n", + "While Pyro includes some machinery for constructing these automatically, for complex models it's usually necessary to build these by hand in order to get the best possible performance. Let's sketch the high-level structure of the guide we use for this model:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "execution": { + "iopub.execute_input": "2021-11-30T23:00:51.158733Z", + "iopub.status.busy": "2021-11-30T23:00:51.158284Z", + "iopub.status.idle": "2021-11-30T23:00:51.159880Z", + "shell.execute_reply": "2021-11-30T23:00:51.160241Z" + }, + "id": "yLCaRCA8F4GA" + }, + "outputs": [], + "source": [ + "# The guide specifies the variational distribution\n", + "def guide_sketch(self, x, y=None):\n", + " # This plate statement matches the plate in the model\n", + " with pyro.plate(\"batch\", len(x)):\n", + " # We pass the observed count vector x to an encoder network\n", + " # that generates the parameters we use to define the variational\n", + " # distributions for the latent variables z2 and ℓ.\n", + " z2_loc, z2_scale, l_loc, l_scale = z2l_encoder(x)\n", + " pyro.sample(\"l\", dist.LogNormal(l_loc, l_scale).to_event(1))\n", + " z2 = pyro.sample(\"z2\", dist.Normal(z2_loc, z2_scale).to_event(1))\n", + "\n", + " # We only need to specify a variational distribution over y if y is unobserved\n", + " if y is None:\n", + " # We use the `classifier` neural network to turn the latent code\n", + " # z2 into logits that we can use to specify a distribution over y.\n", + " y_logits = classifier(z2)\n", + " y_dist = dist.OneHotCategorical(logits=y_logits)\n", + " y = pyro.sample(\"y\", y_dist)\n", + "\n", + " # Finally we generate the parameters for the z1 distribution by\n", + " # passing z2 and y through an encoder neural network z1_encoder.\n", + " z1_loc, z1_scale = z1_encoder(z2, y)\n", + " pyro.sample(\"z1\", dist.Normal(z1_loc, z1_scale).to_event(1))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Define some helper functions for making fully-connected neural networks and reshaping tensors" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "cellView": "form", + "execution": { + "iopub.execute_input": "2021-11-30T23:00:51.166288Z", + "iopub.status.busy": "2021-11-30T23:00:51.165832Z", + "iopub.status.idle": "2021-11-30T23:00:51.167606Z", + "shell.execute_reply": "2021-11-30T23:00:51.168023Z" + }, + "id": "C9YE8pUO2EVU" + }, + "outputs": [], + "source": [ + "# Helper for making fully-connected neural networks\n", + "def make_fc(dims):\n", + " layers = []\n", + " for in_dim, out_dim in zip(dims, dims[1:]):\n", + " layers.append(nn.Linear(in_dim, out_dim))\n", + " layers.append(nn.BatchNorm1d(out_dim))\n", + " layers.append(nn.ReLU())\n", + " return nn.Sequential(*layers[:-1]) # Exclude final ReLU non-linearity\n", + "\n", + "# Splits a tensor in half along the final dimension\n", + "def split_in_half(t):\n", + " return t.reshape(t.shape[:-1] + (2, -1)).unbind(-2)\n", + "\n", + "# Helper for broadcasting inputs to neural net\n", + "def broadcast_inputs(input_args):\n", + " shape = broadcast_shape(*[s.shape[:-1] for s in input_args]) + (-1,)\n", + " input_args = [s.expand(shape) for s in input_args]\n", + " return input_args" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "SBhy4IxcHmMG" + }, + "source": [ + "## Neural encoders and decoders\n", + "\n", + "The main thing we need to do to complete the specification of our model and guide is define the various decoder/encoder neural networks. \n", + "Since this is largely just a matter of invoking standard PyTorch API, we do not go into great detail here. \n", + "We limit ourselves to taking a quick look at `XDecoder`, which is the decoder neural network we use to specify the observation distribution p(**x** | **z**_2) used in the model:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "execution": { + "iopub.execute_input": "2021-11-30T23:00:51.173349Z", + "iopub.status.busy": "2021-11-30T23:00:51.172883Z", + "iopub.status.idle": "2021-11-30T23:00:51.174625Z", + "shell.execute_reply": "2021-11-30T23:00:51.174950Z" + }, + "id": "E99GNCgSIUEg" + }, + "outputs": [], + "source": [ + "# Used in parameterizing p(x | z2)\n", + "class XDecoder(nn.Module):\n", + " # This __init__ statement is executed once upon construction of the neural network.\n", + " # Here we specify that the neural network has input dimension z2_dim\n", + " # and output dimension 2 * num_genes.\n", + " def __init__(self, num_genes, z2_dim, hidden_dims):\n", + " super().__init__()\n", + " dims = [z2_dim] + hidden_dims + [2 * num_genes]\n", + " self.fc = make_fc(dims)\n", + "\n", + " # This method defines the actual computation of the neural network. It takes\n", + " # z2 as input and spits out two parameters that are then used in the model\n", + " # to define the ZINB observation distribution. In particular it generates\n", + " # `gate_logits`, which controls zero-inflation, and `mu` which encodes the\n", + " # relative frequencies of different genes.\n", + " def forward(self, z2):\n", + " gate_logits, mu = split_in_half(self.fc(z2))\n", + " # Note that mu is normalized so that total count information is\n", + " # encoded by the latent variable ℓ.\n", + " mu = softmax(mu, dim=-1)\n", + " return gate_logits, mu" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "poeITj1OJGWD" + }, + "source": [ + "We now define the remaining encoder and decoder neural networks:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "execution": { + "iopub.execute_input": "2021-11-30T23:00:51.185722Z", + "iopub.status.busy": "2021-11-30T23:00:51.176920Z", + "iopub.status.idle": "2021-11-30T23:00:51.187587Z", + "shell.execute_reply": "2021-11-30T23:00:51.187125Z" + }, + "id": "hI0l8qsL6Y4_" + }, + "outputs": [], + "source": [ + "# Used in parameterizing p(z2 | z1, y)\n", + "class Z2Decoder(nn.Module):\n", + " def __init__(self, z1_dim, y_dim, z2_dim, hidden_dims):\n", + " super().__init__()\n", + " dims = [z1_dim + y_dim] + hidden_dims + [2 * z2_dim]\n", + " self.fc = make_fc(dims)\n", + "\n", + " def forward(self, z1, y):\n", + " z1_y = torch.cat([z1, y], dim=-1)\n", + " # We reshape the input to be two-dimensional so that nn.BatchNorm1d behaves correctly\n", + " _z1_y = z1_y.reshape(-1, z1_y.size(-1))\n", + " hidden = self.fc(_z1_y)\n", + " # If the input was three-dimensional we now restore the original shape\n", + " hidden = hidden.reshape(z1_y.shape[:-1] + hidden.shape[-1:])\n", + " loc, scale = split_in_half(hidden)\n", + " # Here and elsewhere softplus ensures that scale is positive. Note that we generally\n", + " # expect softplus to be more numerically stable than exp.\n", + " scale = softplus(scale)\n", + " return loc, scale\n", + "\n", + "# Used in parameterizing q(z2 | x) and q(l | x)\n", + "class Z2LEncoder(nn.Module):\n", + " def __init__(self, num_genes, z2_dim, hidden_dims):\n", + " super().__init__()\n", + " dims = [num_genes] + hidden_dims + [2 * z2_dim + 2]\n", + " self.fc = make_fc(dims)\n", + "\n", + " def forward(self, x):\n", + " # Transform the counts x to log space for increased numerical stability.\n", + " # Note that we only use this transformation here; in particular the observation\n", + " # distribution in the model is a proper count distribution.\n", + " x = torch.log(1 + x) \n", + " h1, h2 = split_in_half(self.fc(x))\n", + " z2_loc, z2_scale = h1[..., :-1], softplus(h2[..., :-1])\n", + " l_loc, l_scale = h1[..., -1:], softplus(h2[..., -1:])\n", + " return z2_loc, z2_scale, l_loc, l_scale\n", + "\n", + "# Used in parameterizing q(z1 | z2, y)\n", + "class Z1Encoder(nn.Module):\n", + " def __init__(self, num_labels, z1_dim, z2_dim, hidden_dims):\n", + " super().__init__()\n", + " dims = [num_labels + z2_dim] + hidden_dims + [2 * z1_dim]\n", + " self.fc = make_fc(dims)\n", + "\n", + " def forward(self, z2, y):\n", + " # This broadcasting is necessary since Pyro expands y during enumeration (but not z2)\n", + " z2_y = broadcast_inputs([z2, y])\n", + " z2_y = torch.cat(z2_y, dim=-1)\n", + " # We reshape the input to be two-dimensional so that nn.BatchNorm1d behaves correctly\n", + " _z2_y = z2_y.reshape(-1, z2_y.size(-1))\n", + " hidden = self.fc(_z2_y)\n", + " # If the input was three-dimensional we now restore the original shape\n", + " hidden = hidden.reshape(z2_y.shape[:-1] + hidden.shape[-1:])\n", + " loc, scale = split_in_half(hidden)\n", + " scale = softplus(scale)\n", + " return loc, scale\n", + "\n", + "# Used in parameterizing q(y | z2)\n", + "class Classifier(nn.Module):\n", + " def __init__(self, z2_dim, hidden_dims, num_labels):\n", + " super().__init__()\n", + " dims = [z2_dim] + hidden_dims + [num_labels]\n", + " self.fc = make_fc(dims)\n", + "\n", + " def forward(self, x):\n", + " logits = self.fc(x)\n", + " return logits" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "lvbYfsZhJMAs" + }, + "source": [ + "## Putting everything together\n", + "\n", + "At this juncture we can put everything together. \n", + "We will package our Pyro model and guide as a PyTorch `nn.Module`. We briefly discuss some of the more technical points that were swept under the rug in our high-level specifications `model_sketch` and `guide_sketch` introduced above:\n", + "- We use `pyro.module` statements to register the various neural networks with Pyro (this ensures their parameters get trained).\n", + "- The [semi-supervised modeling framework](https://arxiv.org/abs/1406.5298) upon which scANVI is based includes an additional term in the ELBO loss function that ensures that the `classifier` neural network learns from both labeled and unlabeled data. \n", + "This explains the presence of the `pyro.factor` statement in the guide, which essentially just adds an auxiliary cross entropy loss term.\n", + "- In defining `nb_logits` below we use a fudge factor `epsilon` to ensure numerical stability. Fitting flexible models equipped with neural networks to high-dimensional data inevitably requires paying some attention to numerical issues." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "execution": { + "iopub.execute_input": "2021-11-30T23:00:51.205951Z", + "iopub.status.busy": "2021-11-30T23:00:51.194878Z", + "iopub.status.idle": "2021-11-30T23:00:51.207424Z", + "shell.execute_reply": "2021-11-30T23:00:51.207751Z" + }, + "id": "qllGPGA-_GnG" + }, + "outputs": [], + "source": [ + "# Packages the scANVI model and guide as a PyTorch nn.Module\n", + "class SCANVI(nn.Module):\n", + " def __init__(self, num_genes, num_labels, l_loc, l_scale, \n", + " latent_dim=10, alpha=0.01, scale_factor=1.0):\n", + " self.num_genes = num_genes\n", + " self.num_labels = num_labels\n", + "\n", + " # This is the dimension of both z1 and z2\n", + " self.latent_dim = latent_dim\n", + "\n", + " # The next two hyperparameters determine the prior over the log_count latent variable `l`\n", + " self.l_loc = l_loc\n", + " self.l_scale = l_scale\n", + "\n", + " # This hyperparameter controls the strength of the auxiliary classification loss\n", + " self.alpha = alpha\n", + " self.scale_factor = scale_factor\n", + "\n", + " super().__init__()\n", + "\n", + " # Setup the various neural networks used in the model and guide\n", + " self.z2_decoder = Z2Decoder(z1_dim=self.latent_dim, y_dim=self.num_labels,\n", + " z2_dim=self.latent_dim, hidden_dims=[50])\n", + " self.x_decoder = XDecoder(num_genes=num_genes, hidden_dims=[100], z2_dim=self.latent_dim)\n", + " self.z2l_encoder = Z2LEncoder(num_genes=num_genes, z2_dim=self.latent_dim, hidden_dims=[100])\n", + " self.classifier = Classifier(z2_dim=self.latent_dim, hidden_dims=[50], num_labels=num_labels)\n", + " self.z1_encoder = Z1Encoder(num_labels=num_labels, z1_dim=self.latent_dim,\n", + " z2_dim=self.latent_dim, hidden_dims=[50])\n", + "\n", + " self.epsilon = 0.006\n", + "\n", + " def model(self, x, y=None):\n", + " # Register various nn.Modules (i.e. the decoder/encoder networks) with Pyro\n", + " pyro.module(\"scanvi\", self)\n", + "\n", + " # This gene-level parameter modulates the variance of the observation distribution\n", + " theta = pyro.param(\"inverse_dispersion\", 10.0 * x.new_ones(self.num_genes),\n", + " constraint=constraints.positive)\n", + "\n", + " # We scale all sample statements by scale_factor so that the ELBO loss function\n", + " # is normalized wrt the number of datapoints and genes. \n", + " # This helps with numerical stability during optimization.\n", + " with pyro.plate(\"batch\", len(x)), poutine.scale(scale=self.scale_factor):\n", + " z1 = pyro.sample(\"z1\", dist.Normal(0, x.new_ones(self.latent_dim)).to_event(1))\n", + " y = pyro.sample(\"y\", dist.OneHotCategorical(logits=x.new_zeros(self.num_labels)),\n", + " obs=y)\n", + "\n", + " z2_loc, z2_scale = self.z2_decoder(z1, y)\n", + " z2 = pyro.sample(\"z2\", dist.Normal(z2_loc, z2_scale).to_event(1))\n", + "\n", + " l_scale = self.l_scale * x.new_ones(1)\n", + " l = pyro.sample(\"l\", dist.LogNormal(self.l_loc, l_scale).to_event(1))\n", + "\n", + " # Note that by construction mu is normalized (i.e. mu.sum(-1) == 1) and the\n", + " # total scale of counts for each cell is determined by `l`\n", + " gate_logits, mu = self.x_decoder(z2)\n", + " nb_logits = (l * mu + self.epsilon).log() - (theta + self.epsilon).log()\n", + " x_dist = dist.ZeroInflatedNegativeBinomial(gate_logits=gate_logits, total_count=theta,\n", + " logits=nb_logits)\n", + " # Observe the datapoint x using the observation distribution x_dist\n", + " pyro.sample(\"x\", x_dist.to_event(1), obs=x)\n", + "\n", + " # The guide specifies the variational distribution\n", + " def guide(self, x, y=None):\n", + " pyro.module(\"scanvi\", self)\n", + " with pyro.plate(\"batch\", len(x)), poutine.scale(scale=self.scale_factor):\n", + " z2_loc, z2_scale, l_loc, l_scale = self.z2l_encoder(x)\n", + " pyro.sample(\"l\", dist.LogNormal(l_loc, l_scale).to_event(1))\n", + " z2 = pyro.sample(\"z2\", dist.Normal(z2_loc, z2_scale).to_event(1))\n", + "\n", + " y_logits = self.classifier(z2)\n", + " y_dist = dist.OneHotCategorical(logits=y_logits)\n", + " if y is None:\n", + " # x is unlabeled so sample y using q(y|z2)\n", + " y = pyro.sample(\"y\", y_dist)\n", + " else:\n", + " # x is labeled so add a classification loss term\n", + " # (this way q(y|z2) learns from both labeled and unlabeled data)\n", + " classification_loss = y_dist.log_prob(y)\n", + " # Note that the negative sign appears because we're adding this term in the guide\n", + " # and the guide log_prob appears in the ELBO as -log q\n", + " pyro.factor(\"classification_loss\", -self.alpha * classification_loss, has_rsample=False)\n", + "\n", + " z1_loc, z1_scale = self.z1_encoder(z2, y)\n", + " pyro.sample(\"z1\", dist.Normal(z1_loc, z1_scale).to_event(1))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jYxtIFx3KvKx" + }, + "source": [ + "## Training\n", + "\n", + "Now that we've fully specified our model and guide we can proceed to training via stochastic variational inference!" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "execution": { + "iopub.execute_input": "2021-11-30T23:00:51.214558Z", + "iopub.status.busy": "2021-11-30T23:00:51.214045Z", + "iopub.status.idle": "2021-11-30T23:09:12.584106Z", + "shell.execute_reply": "2021-11-30T23:09:12.584480Z" + }, + "id": "x_6KpAQe_NLg", + "outputId": "5aafffd1-9af6-40f5-fbba-d53adbce5957" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[Epoch 00] Loss: 0.34436\n", + "[Epoch 01] Loss: 0.21656\n", + "[Epoch 02] Loss: 0.15006\n", + "[Epoch 03] Loss: 0.12347\n", + "[Epoch 04] Loss: 0.10913\n", + "[Epoch 05] Loss: 0.10095\n", + "[Epoch 06] Loss: 0.09812\n", + "[Epoch 07] Loss: 0.09501\n", + "[Epoch 08] Loss: 0.09236\n", + "[Epoch 09] Loss: 0.09102\n", + "[Epoch 10] Loss: 0.08964\n", + "[Epoch 11] Loss: 0.08916\n", + "[Epoch 12] Loss: 0.08763\n", + "[Epoch 13] Loss: 0.08644\n", + "[Epoch 14] Loss: 0.08549\n", + "[Epoch 15] Loss: 0.08450\n", + "[Epoch 16] Loss: 0.08330\n", + "[Epoch 17] Loss: 0.08281\n", + "[Epoch 18] Loss: 0.08258\n", + "[Epoch 19] Loss: 0.08243\n", + "[Epoch 20] Loss: 0.08225\n", + "[Epoch 21] Loss: 0.08222\n", + "[Epoch 22] Loss: 0.08217\n", + "[Epoch 23] Loss: 0.08214\n", + "[Epoch 24] Loss: 0.08211\n", + "[Epoch 25] Loss: 0.08208\n", + "[Epoch 26] Loss: 0.08205\n", + "[Epoch 27] Loss: 0.08201\n", + "[Epoch 28] Loss: 0.08198\n", + "[Epoch 29] Loss: 0.08196\n", + "[Epoch 30] Loss: 0.08193\n", + "[Epoch 31] Loss: 0.08189\n", + "[Epoch 32] Loss: 0.08186\n", + "[Epoch 33] Loss: 0.08183\n", + "[Epoch 34] Loss: 0.08179\n", + "[Epoch 35] Loss: 0.08177\n", + "[Epoch 36] Loss: 0.08174\n", + "[Epoch 37] Loss: 0.08170\n", + "[Epoch 38] Loss: 0.08169\n", + "[Epoch 39] Loss: 0.08166\n", + "[Epoch 40] Loss: 0.08163\n", + "[Epoch 41] Loss: 0.08161\n", + "[Epoch 42] Loss: 0.08160\n", + "[Epoch 43] Loss: 0.08158\n", + "[Epoch 44] Loss: 0.08155\n", + "[Epoch 45] Loss: 0.08153\n", + "[Epoch 46] Loss: 0.08151\n", + "[Epoch 47] Loss: 0.08149\n", + "[Epoch 48] Loss: 0.08149\n", + "[Epoch 49] Loss: 0.08147\n", + "[Epoch 50] Loss: 0.08145\n", + "[Epoch 51] Loss: 0.08143\n", + "[Epoch 52] Loss: 0.08140\n", + "[Epoch 53] Loss: 0.08140\n", + "[Epoch 54] Loss: 0.08138\n", + "[Epoch 55] Loss: 0.08137\n", + "[Epoch 56] Loss: 0.08137\n", + "[Epoch 57] Loss: 0.08134\n", + "[Epoch 58] Loss: 0.08133\n", + "[Epoch 59] Loss: 0.08133\n", + "[Epoch 60] Loss: 0.08130\n", + "[Epoch 61] Loss: 0.08130\n", + "[Epoch 62] Loss: 0.08127\n", + "[Epoch 63] Loss: 0.08127\n", + "[Epoch 64] Loss: 0.08125\n", + "[Epoch 65] Loss: 0.08125\n", + "[Epoch 66] Loss: 0.08124\n", + "[Epoch 67] Loss: 0.08124\n", + "[Epoch 68] Loss: 0.08121\n", + "[Epoch 69] Loss: 0.08120\n", + "[Epoch 70] Loss: 0.08120\n", + "[Epoch 71] Loss: 0.08118\n", + "[Epoch 72] Loss: 0.08119\n", + "[Epoch 73] Loss: 0.08117\n", + "[Epoch 74] Loss: 0.08116\n", + "[Epoch 75] Loss: 0.08114\n", + "[Epoch 76] Loss: 0.08114\n", + "[Epoch 77] Loss: 0.08113\n", + "[Epoch 78] Loss: 0.08111\n", + "[Epoch 79] Loss: 0.08111\n", + "Finished training!\n" + ] + } + ], + "source": [ + "# Clear Pyro param store so we don't conflict with previous \n", + "# training runs in this session\n", + "pyro.clear_param_store()\n", + "# Fix random number seed\n", + "pyro.util.set_rng_seed(0)\n", + "# Enable optional validation warnings\n", + "pyro.enable_validation(True)\n", + "\n", + "# Instantiate instance of model/guide and various neural networks\n", + "scanvi = SCANVI(num_genes=num_genes, num_labels=4, \n", + " l_loc=l_mean, l_scale=l_scale,\n", + " scale_factor=1.0 / (batch_size * num_genes))\n", + "if not smoke_test:\n", + " scanvi = scanvi.cuda()\n", + "\n", + "# Setup an optimizer (Adam) and learning rate scheduler.\n", + "# We start with a moderately high learning rate (0.006) and\n", + "# reduce by a factor of 5 after 20 epochs.\n", + "scheduler = MultiStepLR({'optimizer': Adam, \n", + " 'optim_args': {'lr': 0.006}, \n", + " 'gamma': 0.2, 'milestones': [20]})\n", + "\n", + "# Tell Pyro to enumerate out y when y is unobserved.\n", + "# (By default y would be sampled from the guide)\n", + "guide = config_enumerate(scanvi.guide, \"parallel\", expand=True)\n", + "\n", + "# Setup a variational objective for gradient-based learning.\n", + "# Note we use TraceEnum_ELBO in order to leverage Pyro's machinery\n", + "# for automatic enumeration of the discrete latent variable y.\n", + "elbo = TraceEnum_ELBO(strict_enumeration_warning=False)\n", + "svi = SVI(scanvi.model, guide, scheduler, elbo)\n", + "\n", + "# Training loop.\n", + "# We train for 80 epochs, although this isn't enough to achieve full convergence.\n", + "# For optimal results it is necessary to tweak the optimization parameters.\n", + "# For our purposes, however, 80 epochs of training is sufficient.\n", + "# Training should take about 8 minutes on a GPU-equipped Colab instance.\n", + "num_epochs = 80 if not smoke_test else 1\n", + "\n", + "for epoch in range(num_epochs):\n", + " losses = []\n", + "\n", + " # Take a gradient step for each mini-batch in the dataset\n", + " for x, y in dataloader:\n", + " if y is not None:\n", + " y = y.type_as(x)\n", + " loss = svi.step(x, y)\n", + " losses.append(loss)\n", + "\n", + " # Tell the scheduler we've done one epoch.\n", + " scheduler.step()\n", + "\n", + " print(\"[Epoch %02d] Loss: %.5f\" % (epoch, np.mean(losses)))\n", + "\n", + "print(\"Finished training!\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yDuoXcaZORC9" + }, + "source": [ + "## Plotting our results\n", + "\n", + "Finally, we generate a figure that illustrates the latent representations learned by our model. \n", + "In particular we identify each cell with the 10-dimensional representation encoded in the inferred latent variable **z**_2. \n", + "Note that for a given cell with counts **x**, the inferred mean of **z**_2 can be computed by using the `z2l_encoder` that is part of our amortized guide. \n", + "\n", + "In addition we show that our `classifier` neural network can be used to label the unlabeled cells. Moreover, these labels come equipped with uncertainty estimates." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 873 + }, + "execution": { + "iopub.execute_input": "2021-11-30T23:09:12.595867Z", + "iopub.status.busy": "2021-11-30T23:09:12.595430Z", + "iopub.status.idle": "2021-11-30T23:09:41.703350Z", + "shell.execute_reply": "2021-11-30T23:09:41.703707Z" + }, + "id": "kW8DWNfgC1-z", + "outputId": "5a8cd96e-c3ea-481c-b4f9-9f4836513d5c" + }, + "outputs": [ + { + "data": { + "image/png": "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IczqokulUvUzdYMFwqXjjAg8CQ0QISkWRLE8yw8RcQkH41LFIrm9YPNg8onBsCd4xzveka1UKuqnP/1pmzw3Y8aM+PLly7uZ9BcuXBj50pe+NPxjH/vYJoC1a9e+Krdzzz2342c/+9mqyy67rPPaa69du2DBgnki/oJ84AMf6JoyZUr+N7/5Teu5556b+ctf/tLW1dVlgedSXrt2rX3yySfnHnroocZCoaC6urqsRx99tEleP2LEiPILL7yQBLjlllu2K1ozmUxo+PDhFYDrr7/ev6aGhgYnl8v535lHH3109o9//GMreHGQzc3NtZaWlu3+s1199dVbvvjFL46YOnVqfsCAAc729jEY9jbGArgLiECTL++gq1dcfBKc7ziOH+wv26R7R7FY9GPkREQEy5mIBU86cHR2dvpf+vF43Lc2ijUnk8mQSqW69S+WTFEp7SLjikQi5PP5bZnHsSRbt1Zw3SoqCvGpXju65uZm3zUpli3Jgl52/wY6FmRIDowz9t1eVrHEIEpCCOAXn5ZzB+dMxiJ9lfe2Zern4+HG9TA2Bmc2aUqlMtFolJObFO8ZAHNy8Mlhry/2LPTsZCJz9b+L8tyVi2MpxecHVrhhc42tboRPDLK4IJX1s73FElqr1fzkn+bmZn9egrS3t5NKpfyiz4KIb3EtS5ymWG+DlkCTGWzY01iWxb333rv0E5/4xIhf/vKXg6PRqB4+fHj52muvXb169erogQceOLlcLqtkMuleffXVm/77v/+7/a2c71vf+tb6yy67bOzSpUvnvvbaa7EjjzxyEkAikXBvueWW5SeffHLhnHPO6Zo8efJBra2t1YkTJxYbGxsdgC996UsbL7roorE33XTTgB25hr/4xS9u+MhHPjLmRz/60dDgPueee272pz/96ZBJkyZN/tznPrf+Rz/60boPfOADoydMmDA5Ho+7N9100w7bo5544omFZDLpXHnllcb9a9hnUMGYjP7CtGnT9IsvvrhHji19WKXzh7hARdBJORjbtv16ffl83nfFieUwHvesXrINtpUXyWaz/mOxOAULTIuwksxecQM7jkMqlfJd1cVi0bcGStKIWIli0Thb52WpVKqkRkch7Pou3mQy2a33sdaajo2drLitnbAdpdpZY9Jlw3FavFIyiUSiW8xisOuIXKvUvwu6yPeFhAUZlxDsuSxCdVeOcd6r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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "if not smoke_test:\n", + " # Now that we're done training we'll inspect the latent representations we've learned\n", + " import scanpy as sc\n", + " \n", + " # Put the neural networks in evaluation mode (needed because of batch norm)\n", + " scanvi.eval()\n", + "\n", + " # Compute latent representation (z2_loc) for each cell in the dataset\n", + " latent_rep = scanvi.z2l_encoder(dataloader.data_x)[0]\n", + "\n", + " # Compute inferred cell type probabilities for each cell\n", + " y_logits = scanvi.classifier(latent_rep)\n", + " # Convert logits to probabilities\n", + " y_probs = softmax(y_logits, dim=-1).data.cpu().numpy()\n", + "\n", + " # Use scanpy to compute 2-dimensional UMAP coordinates using our\n", + " # learned 10-dimensional latent representation z2\n", + " anndata.obsm[\"X_scANVI\"] = latent_rep.data.cpu().numpy()\n", + " sc.pp.neighbors(anndata, use_rep=\"X_scANVI\")\n", + " sc.tl.umap(anndata)\n", + " umap1, umap2 = anndata.obsm['X_umap'][:, 0], anndata.obsm['X_umap'][:, 1]\n", + "\n", + " # Construct plots; all plots are scatterplots depicting the two-dimensional UMAP embedding\n", + " # and only differ in how points are colored\n", + "\n", + " # The topmost plot depicts the 200 hand-curated seed labels in our dataset\n", + " fig, axes = plt.subplots(3, 2, figsize=(9, 12))\n", + " seed_marker_sizes = anndata.obs['seed_marker_sizes']\n", + " axes[0, 0].scatter(umap1, umap2, s=seed_marker_sizes, c=anndata.obs['seed_colors'], marker='.', alpha=0.7)\n", + " axes[0, 0].set_title('Hand-Curated Seed Labels')\n", + " axes[0, 0].set_xlabel('UMAP-1')\n", + " axes[0, 0].set_ylabel('UMAP-2')\n", + " patch1 = Patch(color='lightcoral', label='CD8-Naive')\n", + " patch2 = Patch(color='limegreen', label='CD4-Naive')\n", + " patch3 = Patch(color='deepskyblue', label='CD4-Memory')\n", + " patch4 = Patch(color='mediumorchid', label='CD4-Regulatory')\n", + " axes[0, 1].legend(loc='center left', handles=[patch1, patch2, patch3, patch4])\n", + " axes[0, 1].get_xaxis().set_visible(False)\n", + " axes[0, 1].get_yaxis().set_visible(False)\n", + " axes[0, 1].set_frame_on(False)\n", + "\n", + " # The remaining plots depict the inferred cell type probability for each of the four cell types\n", + " s10 = axes[1, 0].scatter(umap1, umap2, s=1, c=y_probs[:, 0], marker='.', alpha=0.7)\n", + " axes[1, 0].set_title('Inferred CD8-Naive probability')\n", + " fig.colorbar(s10, ax=axes[1, 0])\n", + " s11 = axes[1, 1].scatter(umap1, umap2, s=1, c=y_probs[:, 1], marker='.', alpha=0.7)\n", + " axes[1, 1].set_title('Inferred CD4-Naive probability')\n", + " fig.colorbar(s11, ax=axes[1, 1])\n", + " s20 = axes[2, 0].scatter(umap1, umap2, s=1, c=y_probs[:, 2], marker='.', alpha=0.7)\n", + " axes[2, 0].set_title('Inferred CD4-Memory probability')\n", + " fig.colorbar(s20, ax=axes[2, 0])\n", + " s21 = axes[2, 1].scatter(umap1, umap2, s=1, c=y_probs[:, 3], marker='.', alpha=0.7)\n", + " axes[2, 1].set_title('Inferred CD4-Regulatory probability')\n", + " fig.colorbar(s21, ax=axes[2, 1])\n", + "\n", + " fig.tight_layout()" + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "collapsed_sections": [], + "name": "pyro_scanvi.ipynb", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.12" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/pyro/source/tutorial/source/search_inference.py b/pyro/source/tutorial/source/search_inference.py new file mode 100644 index 0000000000000000000000000000000000000000..9dc8b6a880f30839a3a70bb9290d8b2a3263e86e --- /dev/null +++ b/pyro/source/tutorial/source/search_inference.py @@ -0,0 +1,225 @@ +# Copyright (c) 2017-2019 Uber Technologies, Inc. +# SPDX-License-Identifier: Apache-2.0 + +""" +Inference algorithms and utilities used in the RSA example models. + +Adapted from: http://dippl.org/chapters/03-enumeration.html +""" + +import collections +import functools +import queue + +import torch + +import pyro.distributions as dist +import pyro.poutine as poutine +from pyro.distributions.util import logsumexp +from pyro.infer.abstract_infer import TracePosterior +from pyro.poutine.runtime import NonlocalExit + + +def memoize(fn=None, **kwargs): + if fn is None: + return lambda _fn: memoize(_fn, **kwargs) + return functools.lru_cache(**kwargs)(fn) + + +class HashingMarginal(dist.Distribution): + """ + :param trace_dist: a TracePosterior instance representing a Monte Carlo posterior + + Marginal histogram distribution. + Turns a TracePosterior object into a Distribution + over the return values of the TracePosterior's model. + """ + + def __init__(self, trace_dist, sites=None): + assert isinstance( + trace_dist, TracePosterior + ), "trace_dist must be trace posterior distribution object" + + if sites is None: + sites = "_RETURN" + + assert isinstance(sites, (str, list)), "sites must be either '_RETURN' or list" + + self.sites = sites + super().__init__() + self.trace_dist = trace_dist + + has_enumerate_support = True + + @memoize(maxsize=10) + def _dist_and_values(self): + # XXX currently this whole object is very inefficient + values_map, logits = collections.OrderedDict(), collections.OrderedDict() + for tr, logit in zip(self.trace_dist.exec_traces, self.trace_dist.log_weights): + if isinstance(self.sites, str): + value = tr.nodes[self.sites]["value"] + else: + value = {site: tr.nodes[site]["value"] for site in self.sites} + if not torch.is_tensor(logit): + logit = torch.tensor(logit) + + if torch.is_tensor(value): + value_hash = hash(value.cpu().contiguous().numpy().tobytes()) + elif isinstance(value, dict): + value_hash = hash(self._dict_to_tuple(value)) + else: + value_hash = hash(value) + if value_hash in logits: + # Value has already been seen. + logits[value_hash] = logsumexp( + torch.stack([logits[value_hash], logit]), dim=-1 + ) + else: + logits[value_hash] = logit + values_map[value_hash] = value + + logits = torch.stack(list(logits.values())).contiguous().view(-1) + logits = logits - logsumexp(logits, dim=-1) + d = dist.Categorical(logits=logits) + return d, values_map + + def sample(self): + d, values_map = self._dist_and_values() + ix = d.sample() + return list(values_map.values())[ix] + + def log_prob(self, val): + d, values_map = self._dist_and_values() + if torch.is_tensor(val): + value_hash = hash(val.cpu().contiguous().numpy().tobytes()) + elif isinstance(val, dict): + value_hash = hash(self._dict_to_tuple(val)) + else: + value_hash = hash(val) + return d.log_prob(torch.tensor([list(values_map.keys()).index(value_hash)])) + + def enumerate_support(self): + d, values_map = self._dist_and_values() + return list(values_map.values())[:] + + def _dict_to_tuple(self, d): + """ + Recursively converts a dictionary to a list of key-value tuples + Only intended for use as a helper function inside HashingMarginal!! + May break when keys cant be sorted, but that is not an expected use-case + """ + if isinstance(d, dict): + return tuple([(k, self._dict_to_tuple(d[k])) for k in sorted(d.keys())]) + else: + return d + + def _weighted_mean(self, value, dim=0): + weights = self._log_weights.reshape([-1] + (value.dim() - 1) * [1]) + max_weight = weights.max(dim=dim)[0] + relative_probs = (weights - max_weight).exp() + return (value * relative_probs).sum(dim=dim) / relative_probs.sum(dim=dim) + + @property + def mean(self): + samples = torch.stack(list(self._dist_and_values()[1].values())) + return self._weighted_mean(samples) + + @property + def variance(self): + samples = torch.stack(list(self._dist_and_values()[1].values())) + deviation_squared = torch.pow(samples - self.mean, 2) + return self._weighted_mean(deviation_squared) + + +######################## +# Exact Search inference +######################## + + +class Search(TracePosterior): + """ + Exact inference by enumerating over all possible executions + """ + + def __init__(self, model, max_tries=int(1e6), **kwargs): + self.model = model + self.max_tries = max_tries + super().__init__(**kwargs) + + def _traces(self, *args, **kwargs): + q = queue.Queue() + q.put(poutine.Trace()) + p = poutine.trace(poutine.queue(self.model, queue=q, max_tries=self.max_tries)) + while not q.empty(): + tr = p.get_trace(*args, **kwargs) + yield tr, tr.log_prob_sum() + + +############################################### +# Best-first Search Inference +############################################### + + +def pqueue(fn, queue): + def sample_escape(tr, site): + return ( + (site["name"] not in tr) + and (site["type"] == "sample") + and (not site["is_observed"]) + ) + + def _fn(*args, **kwargs): + + for i in range(int(1e6)): + assert ( + not queue.empty() + ), "trying to get() from an empty queue will deadlock" + + priority, next_trace = queue.get() + try: + ftr = poutine.trace( + poutine.escape( + poutine.replay(fn, next_trace), + functools.partial(sample_escape, next_trace), + ) + ) + return ftr(*args, **kwargs) + except NonlocalExit as site_container: + site_container.reset_stack() + for tr in poutine.util.enum_extend( + ftr.trace.copy(), site_container.site + ): + # add a little bit of noise to the priority to break ties... + queue.put( + (tr.log_prob_sum().item() - torch.rand(1).item() * 1e-2, tr) + ) + + raise ValueError("max tries ({}) exceeded".format(str(1e6))) + + return _fn + + +class BestFirstSearch(TracePosterior): + """ + Inference by enumerating executions ordered by their probabilities. + Exact (and results equivalent to Search) if all executions are enumerated. + """ + + def __init__(self, model, num_samples=None, **kwargs): + if num_samples is None: + num_samples = 100 + self.num_samples = num_samples + self.model = model + super().__init__(**kwargs) + + def _traces(self, *args, **kwargs): + q = queue.PriorityQueue() + # add a little bit of noise to the priority to break ties... + q.put((torch.zeros(1).item() - torch.rand(1).item() * 1e-2, poutine.Trace())) + q_fn = pqueue(self.model, queue=q) + for i in range(self.num_samples): + if q.empty(): + # num_samples was too large! + break + tr = poutine.trace(q_fn).get_trace(*args, **kwargs) # XXX should block + yield tr, tr.log_prob_sum() diff --git a/pyro/source/tutorial/source/sir_hmc.rst b/pyro/source/tutorial/source/sir_hmc.rst new file mode 100644 index 0000000000000000000000000000000000000000..8a196d90f1557a84d47f04786c4d1555221e76e9 --- /dev/null +++ b/pyro/source/tutorial/source/sir_hmc.rst @@ -0,0 +1,63 @@ +.. Copyright Contributors to the Pyro project. +.. +.. SPDX-License-Identifier: Apache-2.0 + +Example: Epidemiological inference via HMC +========================================== + +This tutorial is in the form of a script (see below). + +Example Usage +------------- + +The following example +runs the script to generate outbreak data for a population of 10000 observed +for 60 days, then infer infection parameters and forecast new infections for +another 30 days. This takes about 3 minutes on my laptop. + +.. code-block:: none + + $ python examples/sir_hmc.py -p 10000 -d 60 -f 30 --plot + Generating data... + Observed 452/871 infections: + 0 0 2 1 2 0 0 3 2 0 1 3 1 3 0 1 0 6 4 3 6 4 4 3 3 3 5 3 3 3 5 1 4 6 4 2 6 8 7 4 11 8 14 9 17 13 9 14 10 15 16 22 20 22 19 20 28 25 23 21 + Running inference... + Sample: 100%|=========================| 300/300 [02:35, 1.93it/s, step size=9.67e-02, acc. prob=0.878] + + mean std median 5.0% 95.0% n_eff r_hat + R0 1.40 0.07 1.40 1.28 1.49 26.56 1.06 + rho 0.47 0.02 0.47 0.44 0.52 7.08 1.22 + S_aux[0] 9998.74 0.64 9998.75 9997.84 9999.67 28.74 1.00 + S_aux[1] 9998.37 0.72 9998.38 9997.28 9999.44 52.24 1.02 + ... + I_aux[0] 1.11 0.64 0.99 0.19 2.02 22.01 1.00 + I_aux[1] 1.55 0.74 1.65 0.05 2.47 10.05 1.10 + ... + + Number of divergences: 0 + R0: truth = 1.5, estimate = 1.4 ± 0.0654 + rho: truth = 0.5, estimate = 0.475 ± 0.023 + +.. image:: _static/img/sir_hmc/forecast.png + :alt: Forecast of new infections + +.. image:: _static/img/sir_hmc/parameters.png + :width: 30em + :alt: Posterior distribution over parameters + +.. image:: _static/img/sir_hmc/energy-trace.png + :width: 30em + :alt: Trace plot of potential energy + +Tutorial Script +--------------- + +`View sir_hmc.py on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/examples/sir_hmc.py + +__ github_ + +.. literalinclude:: ../../examples/sir_hmc.py + :language: python + diff --git a/pyro/source/tutorial/source/smcfilter.rst b/pyro/source/tutorial/source/smcfilter.rst new file mode 100644 index 0000000000000000000000000000000000000000..856578404f12f31a78f5b3c6562531588df4f222 --- /dev/null +++ b/pyro/source/tutorial/source/smcfilter.rst @@ -0,0 +1,11 @@ +Example: Sequential Monte Carlo Filtering +========================================== + +`View smcfilter.py on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/examples/smcfilter.py + +__ github_ + +.. literalinclude:: ../../examples/smcfilter.py + :language: python diff --git a/pyro/source/tutorial/source/sparse_gamma.rst b/pyro/source/tutorial/source/sparse_gamma.rst new file mode 100644 index 0000000000000000000000000000000000000000..94dfd77792ae6b288fb28c4463c1192b3fd39415 --- /dev/null +++ b/pyro/source/tutorial/source/sparse_gamma.rst @@ -0,0 +1,11 @@ +Example: Sparse Gamma Deep Exponential Family +============================================= + +`View sparse_gamma_def.py on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/examples/sparse_gamma_def.py + +__ github_ + +.. literalinclude:: ../../examples/sparse_gamma_def.py + :language: python diff --git a/pyro/source/tutorial/source/sparse_regression.rst b/pyro/source/tutorial/source/sparse_regression.rst new file mode 100644 index 0000000000000000000000000000000000000000..2bd2c0ddf9f53eeb6f1866e7ab3db651f16740c5 --- /dev/null +++ b/pyro/source/tutorial/source/sparse_regression.rst @@ -0,0 +1,11 @@ +Example: Sparse Bayesian Linear Regression +============================================= + +`View sparse_regression.py on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/examples/sparse_regression.py + +__ github_ + +.. literalinclude:: ../../examples/sparse_regression.py + :language: python diff --git a/pyro/source/tutorial/source/ss-vae.ipynb b/pyro/source/tutorial/source/ss-vae.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..39bbf5a35214a78cabf86d6d9e1e2d58d3bc6a95 --- /dev/null +++ b/pyro/source/tutorial/source/ss-vae.ipynb @@ -0,0 +1,537 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# The Semi-Supervised VAE\n", + "\n", + "## Introduction\n", + "\n", + "Most of the models we've covered in the tutorials are unsupervised:\n", + "\n", + "- [Variational Autoencoder (VAE)](vae.ipynb)\n", + "- [DMM](dmm.ipynb)\n", + "- [Attend-Infer-Repeat](air.ipynb)\n", + "\n", + "We've also covered a simple supervised model:\n", + "\n", + "- [Bayesian Regression](bayesian_regression.ipynb)\n", + "\n", + "The semi-supervised setting represents an interesting intermediate case where some of the data is labeled and some is not. It is also of great practical importance, since we often have very little labeled data and much more unlabeled data. We'd clearly like to leverage labeled data to improve our models of the unlabeled data. \n", + "\n", + "The semi-supervised setting is also well suited to generative models, where missing data can be accounted for quite naturally—at least conceptually.\n", + "As we will see, in restricting our attention to semi-supervised generative models, there will be no shortage of different model variants and possible inference strategies. \n", + "Although we'll only be able to explore a few of these variants in detail, hopefully you will come away from the tutorial with a greater appreciation for the abstractions and modularity offered by probabilistic programming.\n", + "\n", + "So let's go about building a generative model. We have a dataset \n", + "$\\mathcal{D}$ with $N$ datapoints,\n", + "\n", + "$$ \\mathcal{D} = \\{ ({\\bf x}_i, {\\bf y}_i) \\} $$\n", + "\n", + "where the $\\{ {\\bf x}_i \\}$ are always observed and the labels $\\{ {\\bf y}_i \\}$ are only observed for some subset of the data. Since we want to be able to model complex variations in the data, we're going to make this a latent variable model with a local latent variable ${\\bf z}_i$ private to each pair $({\\bf x}_i, {\\bf y}_i)$. Even with this set of choices, a number of model variants are possible: we're going to focus on the model variant depicted in Figure 1 (this is model M2 in reference [1])." + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/html" + }, + "source": [ + "
Figure 1: our semi-supervised generative model (c.f. model M2 in reference [1])
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For convenience—and since we're going to model MNIST in our experiments below—let's suppose the $\\{ {\\bf x}_i \\}$ are images and the $\\{ {\\bf y}_i \\}$ are digit labels. In this model setup, the latent random variable ${\\bf z}_i$ and the (partially observed) digit label _jointly_ generate the observed image.\n", + "The ${\\bf z}_i$ represents _everything but_ the digit label, possibly handwriting style or position.\n", + "Let's sidestep asking when we expect this particular factorization of $({\\bf x}_i, {\\bf y}_i, {\\bf z}_i)$ to be appropriate, since the answer to that question will depend in large part on the dataset in question (among other things). Let's instead highlight some of the ways that inference in this model will be challenging as well as some of the solutions that we'll be exploring in the rest of the tutorial.\n", + "\n", + "## The Challenges of Inference\n", + "\n", + "For concreteness we're going to continue to assume that the partially-observed $\\{ {\\bf y}_i \\}$ are discrete labels; we will also assume that the $\\{ {\\bf z}_i \\}$ are continuous.\n", + "\n", + "- If we apply the general recipe for stochastic variational inference to our model (see [SVI Part I](svi_part_i.ipynb)) we would be sampling the discrete (and thus non-reparameterizable) variable ${\\bf y}_i$ whenever it's unobserved. As discussed in [SVI Part III](svi_part_iii.ipynb) this will generally lead to high-variance gradient estimates. \n", + "- A common way to ameliorate this problem—and one that we'll explore below—is to forego sampling and instead sum out all ten values of the class label ${\\bf y}_i$ when we calculate the ELBO for an unlabeled datapoint ${\\bf x}_i$. This is more expensive per step, but can help us reduce the variance of our gradient estimator and thereby take fewer steps.\n", + "- Recall that the role of the guide is to 'fill in' _latent_ random variables. Concretely, one component of our guide will be a digit classifier $q_\\phi({\\bf y} | {\\bf x})$ that will randomly 'fill in' labels $\\{ {\\bf y}_i \\}$ given an image $\\{ {\\bf x}_i \\}$. Crucially, this means that the only term in the ELBO that will depend on $q_\\phi(\\cdot | {\\bf x})$ is the term that involves a sum over _unlabeled_ datapoints. This means that our classifier $q_\\phi(\\cdot | {\\bf x})$—which in many cases will be the primary object of interest—will not be learning from the labeled datapoints (at least not directly).\n", + "- This seems like a potential problem. Luckily, various fixes are possible. Below we'll follow the approach in reference [1], which involves introducing an additional objective function for the classifier to ensure that the classifier learns directly from the labeled data.\n", + "\n", + "We have our work cut out for us so let's get started!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## First Variant: Standard objective function, naive estimator\n", + "\n", + "As discussed in the introduction, we're considering the model depicted in Figure 1. In more detail, the model has the following structure:\n", + "\n", + "- $p({\\bf y}) = Cat({\\bf y}~|~{\\bf \\pi})$: multinomial (or categorical) prior for the class label \n", + "- $p({\\bf z}) = \\mathcal{N}({\\bf z}~|~{\\bf 0,I})$: unit normal prior for the latent code $\\bf z$\n", + "- $p_{\\theta}({\\bf x}~|~{\\bf z,y}) = Bernoulli\\left({\\bf x}~|~\\mu\\left({\\bf z,y}\\right)\\right)$: parameterized Bernoulli likelihood function; $\\mu\\left({\\bf z,y}\\right)$ corresponds to `decoder` in the code\n", + "\n", + "We structure the components of our guide $q_{\\phi}(.)$ as follows:\n", + "\n", + "- $q_{\\phi}({\\bf y}~|~{\\bf x}) = Cat({\\bf y}~|~{\\bf \\alpha}_{\\phi}\\left({\\bf x}\\right))$: parameterized multinomial (or categorical) distribution; ${\\bf \\alpha}_{\\phi}\\left({\\bf x}\\right)$ corresponds to `encoder_y` in the code\n", + "- $q_{\\phi}({\\bf z}~|~{\\bf x, y}) = \\mathcal{N}({\\bf z}~|~{\\bf \\mu}_{\\phi}\\left({\\bf x, y}\\right), {\\bf \\sigma^2_{\\phi}\\left(x, y\\right)})$: parameterized normal distribution; ${\\bf \\mu}_{\\phi}\\left({\\bf x, y}\\right)$ and ${\\bf \\sigma^2_{\\phi}\\left(x, y\\right)}$ correspond to the neural digit classifier `encoder_z` in the code " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These choices reproduce the structure of model M2 and its corresponding inference network in reference [1].\n", + "\n", + "We translate this model and guide pair into Pyro code below. Note that:\n", + "\n", + "- The labels `ys`, which are represented with a one-hot encoding, are only partially observed (`None` denotes unobserved values).\n", + "\n", + "- `model()` handles both the observed and unobserved case.\n", + "\n", + "- The code assumes that `xs` and `ys` are mini-batches of images and labels, respectively, with the size of each batch denoted by `batch_size`. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def model(self, xs, ys=None):\n", + " # register this pytorch module and all of its sub-modules with pyro\n", + " pyro.module(\"ss_vae\", self)\n", + " batch_size = xs.size(0)\n", + "\n", + " # inform Pyro that the variables in the batch of xs, ys are conditionally independent\n", + " with pyro.plate(\"data\"):\n", + "\n", + " # sample the handwriting style from the constant prior distribution\n", + " prior_loc = xs.new_zeros([batch_size, self.z_dim])\n", + " prior_scale = xs.new_ones([batch_size, self.z_dim])\n", + " zs = pyro.sample(\"z\", dist.Normal(prior_loc, prior_scale).to_event(1))\n", + "\n", + " # if the label y (which digit to write) is supervised, sample from the\n", + " # constant prior, otherwise, observe the value (i.e. score it against the constant prior)\n", + " alpha_prior = xs.new_ones([batch_size, self.output_size]) / (1.0 * self.output_size)\n", + " ys = pyro.sample(\"y\", dist.OneHotCategorical(alpha_prior), obs=ys)\n", + "\n", + " # finally, score the image (x) using the handwriting style (z) and\n", + " # the class label y (which digit to write) against the\n", + " # parametrized distribution p(x|y,z) = bernoulli(decoder(y,z))\n", + " # where `decoder` is a neural network\n", + " loc = self.decoder([zs, ys])\n", + " pyro.sample(\"x\", dist.Bernoulli(loc).to_event(1), obs=xs)\n", + "\n", + "def guide(self, xs, ys=None):\n", + " with pyro.plate(\"data\"):\n", + " # if the class label (the digit) is not supervised, sample\n", + " # (and score) the digit with the variational distribution\n", + " # q(y|x) = categorical(alpha(x))\n", + " if ys is None:\n", + " alpha = self.encoder_y(xs)\n", + " ys = pyro.sample(\"y\", dist.OneHotCategorical(alpha))\n", + "\n", + " # sample (and score) the latent handwriting-style with the variational\n", + " # distribution q(z|x,y) = normal(loc(x,y),scale(x,y))\n", + " loc, scale = self.encoder_z([xs, ys])\n", + " pyro.sample(\"z\", dist.Normal(loc, scale).to_event(1))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Network Definitions\n", + "\n", + "In our experiments we use the same network configurations as used in reference [1]. The encoder and decoder networks have one hidden layer with $500$ hidden units and softplus activation functions. We use softmax as the activation function for the output of `encoder_y`, sigmoid as the output activation function for `decoder` and exponentiation for the scale part of the output of `encoder_z`. The latent dimension is 50.\n", + "\n", + "\n", + "### MNIST Pre-Processing\n", + "\n", + "We normalize the pixel values to the range $[0.0, 1.0]$. We use the [MNIST data loader](http://pytorch.org/docs/master/torchvision/datasets.html#torchvision.datasets.MNIST) from the `torchvision` library. The testing set consists of $10000$ examples. The default training set consists of $60000$ examples. We use the first $50000$ examples for training (divided into supervised and un-supervised parts) and the remaining $10000$ images for validation. For our experiments, we use $4$ configurations of supervision in the training set, i.e. we consider $3000$, $1000$, $600$ and $100$ supervised examples selected randomly (while ensuring that each class is balanced)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The Objective Function\n", + "\n", + "The objective function for this model has the two terms (c.f. Eqn. 8 in reference [1]):\n", + "\n", + "$$\\mathcal{J} = \\!\\!\\sum_{({\\bf x,y}) \\in \\mathcal{D}_{supervised} } \\!\\!\\!\\!\\!\\!\\!\\!\\mathcal{L}\\big({\\bf x,y}\\big) +\\!\\!\\! \\sum_{{\\bf x} \\in \\mathcal{D}_{unsupervised}} \\!\\!\\!\\!\\!\\!\\!\\mathcal{U}\\left({\\bf x}\\right)\n", + "$$\n", + "\n", + "To implement this in Pyro, we setup a single instance of the `SVI` class. The two different terms in the objective functions will emerge automatically depending on whether we pass the `step` method labeled or unlabeled data. We will alternate taking steps with labeled and unlabeled mini-batches, with the number of steps taken for each type of mini-batch depending on the total fraction of data that is labeled. For example, if we have 1,000 labeled images and 49,000 unlabeled ones, then we'll take 49 steps with unlabeled mini-batches for each labeled mini-batch. (Note that there are different ways we could do this, but for simplicity we only consider this variant.) The code for this setup is given below:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from pyro.infer import SVI, Trace_ELBO, TraceEnum_ELBO, config_enumerate\n", + "from pyro.optim import Adam\n", + "\n", + "# setup the optimizer\n", + "adam_params = {\"lr\": 0.0003}\n", + "optimizer = Adam(adam_params)\n", + "\n", + "# setup the inference algorithm\n", + "svi = SVI(model, guide, optimizer, loss=Trace_ELBO())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When we run this inference in Pyro, the performance seen during test time is degraded by the noise inherent in the sampling of the categorical variables (see Figure 2 and Table 1 at the end of this tutorial). To deal with this we're going to need a better ELBO gradient estimator." + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/html" + }, + "source": [ + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "
\n", + " Figure 2: Variant 1 (Left) Training losses for the case with 3000 supervised examples.\n", + " (Right) Test and validation accuracies.\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Interlude: Summing Out Discrete Latents\n", + "\n", + "As highlighted in the introduction, when the discrete latent labels ${\\bf y}$ are not observed, the ELBO gradient estimates rely on sampling from $q_\\phi({\\bf y}|{\\bf x})$. These gradient estimates can be very high-variance, especially early in the learning process when the guessed labels are often incorrect. A common approach to reduce variance in this case is to sum out discrete latent variables, replacing the Monte Carlo expectation \n", + "\n", + "$$\\mathbb E_{{\\bf y}\\sim q_\\phi(\\cdot|{\\bf x})}\\nabla\\operatorname{ELBO}$$\n", + "\n", + "with an explicit sum \n", + "\n", + "$$\\sum_{\\bf y} q_\\phi({\\bf y}|{\\bf x})\\nabla\\operatorname{ELBO}$$\n", + "\n", + "This sum is usually implemented by hand, as in [1], but Pyro can automate this in many cases. To automatically sum out all discrete latent variables (here only ${\\bf y}$), we simply wrap the guide in `config_enumerate()`:\n", + "```python\n", + "svi = SVI(model, config_enumerate(guide), optimizer, loss=TraceEnum_ELBO(max_plate_nesting=1))\n", + "```\n", + "In this mode of operation, each `svi.step(...)` computes a gradient term for each of the ten latent states of $y$. Although each step is thus $10\\times$ more expensive, we'll see that the lower-variance gradient estimate outweighs the additional cost.\n", + "\n", + "Going beyond the particular model in this tutorial, Pyro supports summing over arbitrarily many discrete latent variables. Beware that the cost of summing is exponential in the number of discrete variables, but is cheap(er) if multiple independent discrete variables are packed into a single tensor (as in this tutorial, where the discrete labels for the entire mini-batch are packed into the single tensor ${\\bf y}$). To use this parallel form of `config_enumerate()`, we must inform Pyro that the items in a minibatch are indeed independent by wrapping our vectorized code in a `with pyro.plate(\"name\")` block." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Second Variant: Standard Objective Function, Better Estimator\n", + "\n", + "Now that we have the tools to sum out discrete latents, we can see if doing so helps our performance. First, as we can see from Figure 3, the test and validation accuracies now evolve much more smoothly over the course of training. More importantly, this single modification improved test accuracy from around `20%` to about `90%` for the case of $3000$ labeled examples. See Table 1 for the full results. This is great, but can we do better?" + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/html" + }, + "source": [ + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "
\n", + " Figure 3: Variant 2 (Left) Training losses for the case with 3000 supervised examples.\n", + " (Right) Test and validation accuracies.\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Third Variant: Adding a Term to the Objective\n", + "\n", + "For the two variants we've explored so far, the classifier $q_{\\phi}({\\bf y}~|~ {\\bf x})$ doesn't learn directly from labeled data. As we discussed in the introduction, this seems like a potential problem. One approach to addressing this problem is to add an extra term to the objective so that the classifier learns directly from labeled data. Note that this is exactly the approach adopted in reference [1] (see their Eqn. 9). The modified objective function is given by:\n", + "\n", + "\\begin{align}\n", + "\\mathcal{J}^{\\alpha} &= \\mathcal{J} + \\alpha \\mathop{\\mathbb{E}}_{\\tilde{p_l}({\\bf x,y})} \\big[-\\log\\big(q_{\\phi}({\\bf y}~|~ {\\bf x})\\big)\\big] \\\\\n", + "&= \\mathcal{J} + \\alpha' \\sum_{({\\bf x,y}) \\in \\mathcal{D}_{\\text{supervised}}} \\big[-\\log\\big(q_{\\phi}({\\bf y}~|~ {\\bf x})\\big)\\big]\n", + "\\end{align}\n", + "\n", + "\n", + "where $\\tilde{p_l}({\\bf x,y})$ is the empirical distribution over the labeled (or supervised) data and $\\alpha' \\equiv \\frac{\\alpha}{|\\mathcal{D}_{\\text{supervised}}|}$. Note that we've introduced an arbitrary hyperparameter $\\alpha$ that modulates the importance of the new term.\n", + "\n", + "To learn using this modified objective in Pyro we do the following: \n", + "\n", + "- We use a new model and guide pair (see the code snippet below) that corresponds to scoring the observed label ${\\bf y}$ for a given image ${\\bf x}$ against the predictive distribution $q_{\\phi}({\\bf y}~|~ {\\bf x})$ \n", + "\n", + "- We specify the scaling factor $\\alpha'$ (`aux_loss_multiplier` in the code) in the `pyro.sample` call by making use of `poutine.scale`. Note that `poutine.scale` was used to similar effect in the [Deep Markov Model](dmm.ipynb) to implement KL annealing.\n", + "\n", + "- We create a new `SVI` object and use it to take gradient steps on the new objective term" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def model_classify(self, xs, ys=None):\n", + " pyro.module(\"ss_vae\", self)\n", + " with pyro.plate(\"data\"):\n", + " # this here is the extra term to yield an auxiliary loss\n", + " # that we do gradient descent on\n", + " if ys is not None:\n", + " alpha = self.encoder_y(xs)\n", + " with pyro.poutine.scale(scale=self.aux_loss_multiplier):\n", + " pyro.sample(\"y_aux\", dist.OneHotCategorical(alpha), obs=ys)\n", + "\n", + "def guide_classify(xs, ys):\n", + " # the guide is trivial, since there are no \n", + " # latent random variables\n", + " pass\n", + "\n", + "svi_aux = SVI(model_classify, guide_classify, optimizer, loss=Trace_ELBO())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When we run inference in Pyro with the additional term in the objective, we outperform both previous inference setups. For example, the test accuracy for the case with $3000$ labeled examples improves from `90%` to `96%` (see Figure 4 below and Table 1 in the next section). Note that we used validation accuracy to select the hyperparameter $\\alpha'$. " + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/html" + }, + "source": [ + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "
\n", + " Figure 4: Variant 3 (Left) Training losses for the case with 3000 supervised examples.\n", + " (Right) Test and validation accuracies.\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Results\n", + "\n", + "| Supervised data | First variant | Second variant | Third variant | Baseline classifier | \n", + "|------------------|----------------|----------------|----------------|---------------------| \n", + "| 100 | 0.2007(0.0353) | 0.2254(0.0346) | 0.9319(0.0060) | 0.7712(0.0159) | \n", + "| 600 | 0.1791(0.0244) | 0.6939(0.0345) | 0.9437(0.0070) | 0.8716(0.0064) | \n", + "| 1000 | 0.2006(0.0295) | 0.7562(0.0235) | 0.9487(0.0038) | 0.8863(0.0025) | \n", + "| 3000 | 0.1982(0.0522) | 0.8932(0.0159) | 0.9582(0.0012) | 0.9108(0.0015) | \n", + "\n", + "\n", + "\n", + "
Table 1: Result accuracies (with 95% confidence bounds) for different inference methods
\n", + "\n", + "Table 1 collects our results from the three variants explored in the tutorial. For comparison, we also show results from a simple classifier baseline, which only makes use of the supervised data (and no latent random variables). Reported are mean accuracies (with 95% confidence bounds in parentheses) across five random selections of supervised data.\n", + "\n", + "We first note that the results for the third variant—where we summed out the discrete latent random variable $\\bf y$ and made use of the additional term in the objective function—reproduce the results reported in reference [1]. This is encouraging, since it means that the abstractions in Pyro proved flexible enough to accomodate the required modeling and inference setup. Significantly, this flexibility was evidently necessary to outperform the baseline. It's also worth emphasizing that the gap between the baseline and third variant of our generative model setup increases as the number of labeled datapoints decreases (maxing out at about 15% for the case with only 100 labeled datapoints). This is a tantalizing result because it's precisely in the regime where we have few labeled data points that semi-supervised learning is particularly attractive." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Latent Space Visualization" + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/html" + }, + "source": [ + "
\n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + "
\n", + "
\n", + " Figure 5: Latent space embedding for variant 3 with 3000 supervised examples \n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We use T-SNE to reduce the dimensionality of the latent $\\bf z$ from $50$ to $2$ and visualize the 10 digit classes in Figure 5. Note that the structure of the embedding is quite different than that in the [VAE](vae.ipynb) case, where the digits are clearly separated from one another in the embedding. This make sense, since for the semi-supervised case the latent $\\bf z$ is free to use its representational capacity to model, e.g., handwriting style, since the variation between digits is provided by the (partially observed) labels." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Conditional image generation" + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/html" + }, + "source": [ + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
\n", + " Figure 6: Conditional samples obtained by fixing the class label and varying z (for variant 3 with 3000 supervised examples) \n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We sampled $100$ images for each class label ($0$ to $9$) by sampling different values of the latent variable ${\\bf z}$. The diversity of handwriting styles exhibited by each digit is consistent with what we saw in the T-SNE visualization, suggesting that the representation learned by $\\bf z$ is disentangled from the class labels." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Final thoughts\n", + "\n", + "We've seen that generative models offer a natural approach to semi-supervised machine learning. One of the most attractive features of generative models is that we can explore a large variety of models in a single unified setting. In this tutorial we've only been able to explore a small fraction of the possible model and inference setups that are possible. There is no reason to expect that one variant is best; depending on the dataset and application, there will be reason to prefer one over another. And there are a lot of variants (see Figure 7)!" + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/html" + }, + "source": [ + "
Figure 7: A zoo of semi-supervised generative models
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Some of these variants clearly make more sense than others, but a priori it's difficult to know which ones are worth trying out. This is especially true once we open the door to more complicated setups, like the two models at the bottom of the figure, which include an always latent random variable $\\tilde{\\bf y}$ in addition to the partially observed label ${\\bf y}$. (Incidentally, this class of models—see reference [2] for similar variants—offers another potential solution to the 'no training' problem that we identified above.)\n", + "\n", + "The reader probably doesn't need any convincing that a systematic exploration of even a fraction of these options would be incredibly time-consuming and error-prone if each model and each inference procedure were coded up by scratch. It's only with the modularity and abstraction made possible by a probabilistic programming system that we can hope to explore the landscape of generative models with any kind of nimbleness—and reap any awaiting rewards.\n", + "\n", + "See the full code on [Github](https://github.com/pyro-ppl/pyro/blob/dev/examples/vae/ss_vae_M2.py).\n", + "\n", + "## References\n", + "\n", + "[1] `Semi-supervised Learning with Deep Generative Models`,
    \n", + "Diederik P. Kingma, Danilo J. Rezende, Shakir Mohamed, Max Welling\n", + "\n", + "[2] `Learning Disentangled Representations with Semi-Supervised Deep Generative Models`,\n", + "
    \n", + "N. Siddharth, Brooks Paige, Jan-Willem Van de Meent, Alban Desmaison, Frank Wood,
    \n", + "Noah D. Goodman, Pushmeet Kohli, Philip H.S. Torr" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "celltoolbar": "Raw Cell Format", + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/stable.ipynb b/pyro/source/tutorial/source/stable.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..82ae48eb36ec6f88ebceb7736a99f650a9ed0bb3 --- /dev/null +++ b/pyro/source/tutorial/source/stable.ipynb @@ -0,0 +1,742 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Levy Stable models of Stochastic Volatility\n", + "\n", + "This tutorial demonstrates inference using the Levy [Stable](http://docs.pyro.ai/en/stable/distributions.html#stable) distribution through a motivating example of a non-Gaussian stochastic volatilty model.\n", + "\n", + "Inference with stable distribution is tricky because the density `Stable.log_prob()` is very expensive. In this tutorial we demonstrate three approaches to inference: (i) using the [poutine.reparam](http://docs.pyro.ai/en/latest/poutine.html#pyro.poutine.handlers.reparam) effect to transform models in to a tractable form, (ii) using the likelihood-free loss [EnergyDistance](http://docs.pyro.ai/en/latest/inference_algos.html#pyro.infer.energy_distance.EnergyDistance) with SVI, and (iii) using `Stable.log_prob()` which has a numerically integrated log-probability calculation.\n", + "\n", + "\n", + "#### Summary\n", + "\n", + "- [Stable.log_prob()](http://docs.pyro.ai/en/stable/distributions.html#stable) is very expensive.\n", + "- Stable inference requires either reparameterization or a likelihood-free loss.\n", + "- Reparameterization:\n", + " - The [poutine.reparam()](http://docs.pyro.ai/en/latest/poutine.html#pyro.poutine.handlers.reparam) handler can transform models using various [strategies](http://docs.pyro.ai/en/latest/infer.reparam.html).\n", + " - The [StableReparam](http://docs.pyro.ai/en/latest/infer.reparam.html#pyro.infer.reparam.stable.StableReparam) strategy can be used for Stable distributions in SVI or HMC.\n", + " - The [LatentStableReparam](http://docs.pyro.ai/en/latest/infer.reparam.html#pyro.infer.reparam.stable.LatentStableReparam) strategy is a little cheaper, but cannot be used for likelihoods.\n", + " - The [DiscreteCosineReparam](http://docs.pyro.ai/en/latest/infer.reparam.html#pyro.infer.reparam.discrete_cosine.DiscreteCosine) strategy improves geometry in batched latent time series models.\n", + "- Likelihood-free loss with SVI:\n", + " - The [EnergyDistance](http://docs.pyro.ai/en/latest/inference_algos.html#pyro.infer.energy_distance.EnergyDistance) loss allows stable distributions in the guide and in model likelihoods.\n", + "\n", + "#### Table of contents\n", + "\n", + "- [Daily S&P data](#data)\n", + "- [Fitting a single distribution to log returns](#fitting) using `EnergyDistance`\n", + "- [Modeling stochastic volatility](#modeling) using:\n", + " - [Reparameterization](#reparam) with `poutine.reparam`\n", + " - [Numerically integrated log-probability](#numeric) with `Stable.log_prob()`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Daily S&P 500 data \n", + "\n", + "The following daily closing prices for the S&P 500 were loaded from [Yahoo finance](https://finance.yahoo.com/quote/%5EGSPC/history/)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import math\n", + "import os\n", + "import torch\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "from matplotlib import pyplot\n", + "from torch.distributions import constraints\n", + "\n", + "from pyro import poutine\n", + "from pyro.contrib.examples.finance import load_snp500\n", + "from pyro.infer import EnergyDistance, Predictive, SVI, Trace_ELBO\n", + "from pyro.infer.autoguide import AutoDiagonalNormal\n", + "from pyro.infer.reparam import DiscreteCosineReparam, StableReparam\n", + "from pyro.optim import ClippedAdam\n", + "from pyro.ops.tensor_utils import convolve\n", + "\n", + "%matplotlib inline\n", + "assert pyro.__version__.startswith('1.9.1')\n", + "smoke_test = ('CI' in os.environ)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([23116])" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = load_snp500()\n", + "dates = df.Date.to_numpy()\n", + "x = torch.tensor(df[\"Close\"]).float()\n", + "x.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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U6dOKd/cX716Fc+ePXulGGvXro0TJ05Iyk6dOpXvMb6+vvjxxx/x4sULWFpaAoDy7X7uz9OsWTOMGTNGWXbz5k2Vc40YMQJvvvkmPDw8UK1aNTRv3ryoH4WIqExjNyEionLG29sbx48fR0xMDB4/fqx8G69O9erV8eeffyIyMhLnzp3DwIEDJfVr1aqFTp06YeTIkTh+/DhOnz6NESNGKB/Gi2rcuHEIDw/HsmXLcP36daxevRrbtm3LtwVi4MCBMDIywvDhwxEVFYXw8HB8/vnnKp/n1KlT2LFjB65du4YZM2bg5MmTKufq2LEj7O3tMW/ePA4cJiKDxmSAiKic+fDDD2FsbAxfX184OTlJ+svn9cUXX6BixYpo1qwZunfvjo4dO6JBgwaSOuvWrYOnpydatWqF3r17491334Wzs/Mrxdi8eXN88803WLZsGQICArB9+3Z88MEHsLCw0HiMjY0N/v33X0RFReG1117D9OnT8dlnn0nqjB49Gr1790b//v3RpEkTJCQkSFoJchgZGWHo0KGQy+UYPHjwK30WIqKyTCa06YRJRERUzEaOHIkrV67g4MGDJXa9hw8f4p9//imR6xERlUYcM0BERHrx+eefo3379rC2tsa2bdvw/fffY+XKlcV+3cTERJw8eRI///wz/v7772K/HhFRacZkgIiI9OLEiRNYvHgxkpOTUbVqVXz11VcYMWJEsV+3R48eOHHiBEaNGoX27dsX+/WIiEozdhMiIiIiIjJQHEBMRERERGSgmAwQERERERkoJgNERERERAaKyQARERERkYFiMkBEREREZKCYDBARERERGSgmA0REREREBorJABERERGRgfo/kUQQpD2qgcQAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pyplot.figure(figsize=(9, 3))\n", + "pyplot.plot(x)\n", + "pyplot.yscale('log')\n", + "pyplot.ylabel(\"index\")\n", + "pyplot.xlabel(\"trading day\")\n", + "pyplot.title(\"S&P 500 from {} to {}\".format(dates[0], dates[-1]));\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Of interest are the log returns, i.e. the log ratio of price on two subsequent days." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pyplot.figure(figsize=(9, 3))\n", + "r = (x[1:] / x[:-1]).log()\n", + "pyplot.plot(r, \"k\", lw=0.1)\n", + "pyplot.title(\"daily log returns\")\n", + "pyplot.xlabel(\"trading day\");" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAwQAAAE6CAYAAACoFJUWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABDMklEQVR4nO3de1xVVf7/8fcBuQlIIsrFuzVqJGIhecu7UqilZZqX1PKSJU5DVqY5pk41kk7lfBM1u+jMmOk3TTL16628lJdEQ0uxphoMS5Q0BdRBFNbvj36cPHIR8MABzuv5eJyHnnXWXvuzF+vA+Zy91t4WY4wRAAAAAKfk4ugAAAAAADgOCQEAAADgxEgIAAAAACdGQgAAAAA4MRICAAAAwImREAAAAABOjIQAAAAAcGIkBAAAAIATIyEAAAAAnBgJAZza0qVLZbFYinxs377dIXFZLBbNnDmzRHXzj+HYsWPlEsv27dtvqC8Ki69bt27q1q1bqdpJTk7WzJkzS32c1+7r2LFjslgs+tvf/laqdq7nr3/9qxISEgqU32j/oXytWLFCbdq0kaenp0JCQhQbG6vz58+XePs33nhDLVu2lIeHh5o2bapZs2bp8uXLBeqlp6frkUceUUBAgGrWrKkOHTrok08+KbTNrVu3qkOHDqpZs6YCAgL0yCOPKD093abOgQMHFBMTo7CwMPn6+iowMFC9evXSp59+WqC9t99+WwMGDFCTJk3k5eWlW265RU888YTS0tIK3f/p06f1pz/9SU2aNJGHh4cCAwMVHR2tX3/9tcT9UhoXL17UzJkzS/UemTlzpiwWi91iqIhx8NNPPyk2NlZdu3bVTTfdJIvFoqVLlxba3rp16zRy5EiFhYXJzc2t2GP997//rYEDB6p27dqqWbOm2rVrp7Vr15Y4dkCSZAAntmTJEiPJLFmyxOzZs6fAIyMjwyFx7dmzxxw/frxEddPT082ePXtMdnZ2ucSybds2I8ls27atTNvn93FKSoq17MiRI+bIkSOlaueDDz4oUxzX7islJcVIMnPnzi1VO9fj7e1tRo0aVaA8IyPDoWMJRVu2bJmRZMaOHWs+/fRTs2jRIuPn52d69+5dou1feuklY7FYzNSpU822bdvMnDlzjLu7uxk3bpxNvezsbNOqVSvToEEDs2zZMrN582bTv39/U6NGDbN9+3abutu3bzc1atQw/fv3N5s3bzbLli0z9evXN61atbJ5jz/99NOmbdu25rXXXjOffPKJWbt2renTp4+RZP7xj3/YtBkSEmKGDx9u3nvvPbN9+3bz5ptvmgYNGpjg4GBz8uRJm7o///yzadasmWnevLl5++23zY4dO8zq1avNxIkTTVpaWmm6t8R++eUXI8nMmDGjxNvMmDHD2OsjTEWNg23btpmAgADTq1cvM3ToUOvfnsKMHj3a/OEPfzCDBw82ERERRR5rSkqK8ff3N7fddptZsWKFWbdunenbt6+xWCxm1apVpeoHODcSAji1/A+riYmJjg6l1C5evGjy8vLKfT/lkRCURWkTggsXLhRaXtEJASqnK1eumODgYBMVFWVT/t577xlJZsOGDcVuf/r0aePp6Wkee+wxm/KXX37ZWCwWmyQ0Pj7eSDK7d++2ll2+fNmEhoaaO++802b7yMhIExoaai5fvmwt27Vrl5FkFixYYC07depUocfUunVrc/PNN9uUF1Y3MTHRSDIvvviiTXn//v1N/fr1za+//lrc4duVIxOCihwHubm51v/n939RCcHVdWNiYoo81vHjxxtPT0/z008/2RzTrbfeaho2bGjTDlAcpgwBJWSxWDRx4kQtWbJELVq0kJeXl9q2bau9e/fKGKO5c+eqadOm8vHxUY8ePfT999/bbN+tWze1atVKn332mdq3by8vLy/Vr19f06dPV25uboF9XT1lKH/azebNmzV69GjVrVtXNWvW1KVLl4qcMrRx40b17NlTfn5+qlmzpm699VbNnj3b+vr+/fs1ZMgQ6zSCJk2aaOjQofrxxx/L3Ed79+5Vp06drKfdp06dWuj0icKmDC1cuFDh4eHy8fGRr6+vWrZsqeeff956/IMGDZIkde/e3TqlK/90e37f7ty5Ux07dlTNmjU1evToIvclSXl5eXr55ZfVqFEjeXp6qm3btgWmcDzyyCNq0qRJgW2vna5gsVh04cIF/eMf/7DGlr/PoqYMrV271jotxNfXV71799aePXsK3c+RI0c0dOhQ+fn5KTAwUKNHj1ZGRkaBuMoqP8bly5frueeeU3BwsHx8fHTvvffq1KlTysrK0mOPPaaAgAAFBATo0UcfLTCdwhijBQsWqE2bNvLy8lLt2rX14IMP6j//+Y9NvS1btqh///5q0KCBPD09dcstt2j8+PE6ffp0hR77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ThaLRQ8//LCuXLlirRcUFKTw8HCb6VLp6el64YUXtH79ep04ccLm29qjR48WONaSHPubb76prKys6x5fYWOqqPdISa5gU1yda1+zR93i2nj77bf18ssv6+mnn1b//v2LrJedna0HHnhAP/74oz799FP5+PhYX8v/WTRo0ECrV6+2vgc6dOigW265RXPmzNGyZcuKbLswbdq0kbu7ux577DFNmDBBnTt3VrNmzUq07YULF5SYmKgJEyYU+l79xz/+YVO/KowDe5s4caI++ugjjRw5Un/729/k7e2t+fPna/fu3ZJKN00Jzo2EANBvH3Datm173Xr+/v42z93d3Ystz87Otikv7MNbUFCQJOnMmTPX3X9wcPB16/zyyy+SfvujXpxhw4bpk08+0fTp0xUZGalatWrJYrGoT58++u9//3vd/VzrzJkz1mO5WmFl1xoxYoSuXLmit956SwMHDlReXp4iIyP10ksvqXfv3iXaf0n65npxBQUFKScnR+fPn5efn1+p2iup/J9zYfGGhIQoLy9PZ8+etUkI6tSpY1MvfzpAWX5OxSnL+Pbx8dGpU6dkjCkyOcn/AJiXl6eoqCidOHFC06dPV1hYmLy9vZWXl6f27dsXejwlOfZbbrmlwPS8wlz94Si/3TNnzhSI+9dffy1wzIXFlZ2dXSB5y98+IiLCpm5h7+/8y3jm7+vqmAqrW1RMS5Ys0fjx4/XYY49p7ty5RcZ86dIl3X///fr888+1bt06tWvXrsAxSVKvXr1sEuLg4GCFh4fryy+/LLLtotx8883aunWr5syZo5iYGF24cEHNmjXTk08+ed2pkmfPnlVeXl6Jf69U9nFQHnr27KklS5bo6aef1s033yxJCg0N1Ysvvqjnn3/eZm0BUBxSR6ACXT2XOt/JkyclFfzgU5iSfNuUv0Dv6vUC18rIyNC6des0efJkTZkyRT179lRkZKTCwsLKfK3xOnXqWI/laoWVFebRRx/V7t27lZGRofXr18sYo379+pV4kXNpv4krKlZ3d3frt6aenp66dOlSgXplWWORL//nXNg14E+cOCEXFxe7LuisCAEBAbJYLPr888+VmJhY4JG/sPLw4cM6dOiQ5s6dqz/+8Y/q1q2bIiMjSzT2i9OzZ0+5ubld95G/0Fz6fc73119/bdPWlStX9M0336hVq1bF7rOo7U+ePKnTp0/bbB8WFlag3tXb5tfN/7eouoXFtGTJEo0dO1ajRo3SokWLinwfXLp0SQMGDNC2bduUkJCgnj17FqhT2NqFfMaYMn/b3LlzZ3388cfKyMjQ3r171aFDB8XGxmrFihXFble7dm1ZLJYS/16p7OOgvIwaNUonT55UcnKyvvvuO+uaFIvFos6dO5f7/lE9cIYAqEBZWVlau3atzTSI5cuXy8XFRV26dLHLPjp27Cg/Pz8tWrRIQ4YMKfQDgsVikTGmwGK0t99+u9DF1CXRvXt3rV27VqdOnbJ+05abm6uVK1eWqh1vb29FR0crJydHAwYM0JEjR9S4cWO7fyv+4Ycfau7cudapCFlZWfr444/VuXNn67ejTZo0UXp6us0x5eTkaNOmTQXa8/DwKFFsLVq0UP369bV8+XI988wz1p/PhQsXtHr1auuVh6qSfv36KS4uTj///LMGDx5cZL38Y7123L355ps3tP+yTBVp166dgoODtXTpUj300EPW8lWrVun8+fN64IEHim3rnnvukaenp5YuXWrzTXv+Vb8GDBhgLbv//vs1YcIEffHFF9a6V65c0bJly9SuXTuFhIRIkurXr68777xTy5Yt0zPPPGMdh3v37tW3336r2NhYmxiWLl2qsWPH6uGHH9bbb79dbDJw//3369NPP9WHH36ou+++u9B67dq1U4MGDbR582abaXMnTpzQoUOHNGzYsGL75HpcXV3Vrl07tWzZUu+9956+/PJLDRkypMj3tre3t+68884i36vXquzjoDzVqFHDOsUvIyNDixcvVv/+/dW4ceMK2T+qPhICQL99c3n13Od8N998s/Ubd3uoU6eOnnjiCaWmpqp58+basGGD3nrrLT3xxBNq1KiRXfbh4+OjV199VWPHjlWvXr00btw4BQYG6vvvv9ehQ4c0f/581apVS126dNHcuXMVEBCgJk2aaMeOHXrnnXd00003lWm/f/7zn7V27Vr16NFDL7zwgmrWrKn4+HjrlYKKM27cOHl5ealTp04KDg7WyZMnNXv2bPn5+SkyMlLS79+eLl68WL6+vvL09FTTpk3L/O2yq6urevfurUmTJikvL0+vvPKKMjMzbdY7PPTQQ3rhhRc0ZMgQPfvss8rOztb//M//FJo0hYWFafv27fr4448VHBwsX19ftWjRokA9FxcXzZkzR8OHD1e/fv00fvx4Xbp0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bNjQWhYaGqqbbrpJR48elfTbt/V33nmnzXbXPi9K27Ztrf9PTk5Wdna2evfuLR8fH+vjn//8p3744YcStVea/eVr0qSJfH19rc+Dg4Ot07LCw8PVs2dPhYWFadCgQXrrrbd09uxZu8QCABWNhAAAKhFTgiknFy5cUFRUlHx8fLRs2TIlJiZaP9jn5OSUaD/u7u4aMWKElixZopycHC1fvtw6VaakcRY2teja8mvrlOT4JMnb29v6/7y8PEnS+vXrdfDgQesjOTnZuo6gKC4uLgX2Wdii4av3l8/Nzc3mucViscbi6uqqLVu26P/+7/8UGhqqN954Qy1atFBKSkqJjg8AKhMSAgCoRG655Ra5ublp79691rKzZ8/q3//+t/X5N998o9OnTysuLk6dO3dWy5YtbRYUl9TYsWO1detWLViwQJcvX9YDDzxQ4m1DQ0OVmpqq48ePW8uSk5OVkZGhW2+9VZLUokUL7du3z2a7axcyl3RfHh4eSk1N1S233GLzyD9D4e7uLknKzc212bZu3bpKS0uzPs/MzLTbh3aLxaJOnTpp1qxZSkpKkru7uzUxA4CqpIajAwAA/M7Hx0djxozRs88+qzp16igwMFDTpk2Ti8vv3980atRI7u7ueuONN/T444/r8OHDevHFF0u9r1tvvVXt27fXc889p9GjR8vLy6vE2/bq1UutW7fW8OHDNW/ePF25ckUTJkxQ165drdNv/vjHP2rcuHFq27atOnbsqJUrV+qrr75Ss2bNShWnr6+vnnnmGT311FPKy8vTXXfdpczMTO3evVs+Pj4aNWqUGjduLIvFonXr1qlPnz7y8vKSj4+PevTooaVLl+ree+9V7dq1NX36dLm6upZq/4X54osv9MknnygqKkr16tXTF198oV9++cWaDAFAVcIZAgCoZObOnasuXbrovvvuU69evXTXXXcpIiLC+nrdunW1dOlSffDBBwoNDVVcXJz+9re/lWlfY8aMUU5OTqmmC0m/fTuekJCg2rVrq0uXLurVq5eaNWumlStXWusMHz5cU6dO1TPPPKM77rjDeiUkT0/PUsf54osv6oUXXtDs2bN166236u6779bHH3+spk2bSpLq16+vWbNmacqUKQoMDNTEiRMlSVOnTlWXLl3Ur18/9enTRwMGDNDNN99c6v1fq1atWtq5c6f69Omj5s2b689//rNeffVVRUdH33DbAFDRLKakEzoBANXOyy+/rBUrVujrr7+ukP317t1bQUFB+te//lUh+wMAXB9ThgDACZ0/f15Hjx7VG2+8UabpRiVx8eJFLVq0SHfffbdcXV31/vvva+vWrdqyZUu57A8AUDZMGQIAJzRx4kTddddd6tq1a6mnC5WUxWLRhg0b1LlzZ0VEROjjjz/W6tWr1atXr3LZHwCgbJgyBAAAADgxzhAAAAAAToyEAAAAAHBiJAQAAACAEyMhAAAAAJwYCQEAAADgxEgIAAAAACdGQgAAAAA4MRICAAAAwIn9P66HXMonFts8AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pyplot.figure(figsize=(9, 3))\n", + "pyplot.hist(r.numpy(), bins=200)\n", + "pyplot.yscale('log')\n", + "pyplot.ylabel(\"count\")\n", + "pyplot.xlabel(\"daily log returns\")\n", + "pyplot.title(\"Empirical distribution. mean={:0.3g}, std={:0.3g}\".format(r.mean(), r.std()));" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Fitting a single distribution to log returns \n", + "\n", + "Log returns appear to be heavy-tailed. First let's fit a single distribution to the returns. To fit the distribution, we'll use a likelihood free statistical inference algorithm [EnergyDistance](http://docs.pyro.ai/en/latest/inference_algos.html#pyro.infer.energy_distance.EnergyDistance), which matches fractional moments of observed data and can handle data with heavy tails." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "def model():\n", + " stability = pyro.param(\"stability\", torch.tensor(1.9),\n", + " constraint=constraints.interval(0, 2))\n", + " skew = 0.\n", + " scale = pyro.param(\"scale\", torch.tensor(0.1), constraint=constraints.positive)\n", + " loc = pyro.param(\"loc\", torch.tensor(0.))\n", + " with pyro.plate(\"data\", len(r)):\n", + " return pyro.sample(\"r\", dist.Stable(stability, skew, scale, loc), obs=r)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "step 0 loss = 7.497945785522461\n", + "step 20 loss = 2.0790653228759766\n", + "step 40 loss = 1.6773109436035156\n", + "step 60 loss = 1.4146158695220947\n", + "step 80 loss = 1.306936502456665\n", + "step 100 loss = 1.2835698127746582\n", + "step 120 loss = 1.2812254428863525\n", + "step 140 loss = 1.2803162336349487\n", + "step 160 loss = 1.2787212133407593\n", + "step 180 loss = 1.265405535697937\n", + "step 200 loss = 1.2878881692886353\n", + "--------------------\n", + "loc = 0.0002415\n", + "scale = 0.008325\n", + "stability = 1.982\n", + "CPU times: total: 828 ms\n", + "Wall time: 2.93 s\n" + ] + }, + { + "data": { + "image/png": "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c8yfv97OXX/fp+F67fX1vhVCiObmZhEZGSmef/75Lo8P5+uur3sTIULvc49hIEjWrl0rMjMzhUqlErNmzQqYLpM8AHT775VXXhFCCGE2m8XSpUtFfHy8UCqVIiMjQ9x5552itLQ0uA0fJW666SaRnJwslEqlSElJEd/73vfE0aNH/fvdbrd44oknRFJSklCr1WLRokXi8OHDQWzx6PL5558LAOLEiRMB23ndBdqyZUu379M777xTCNG/68xisYgHH3xQxMbGioiICLF8+fKwOZ+9nb+ioqIePwe3bNkihBCitLRULFq0SMTGxgqVSiUmTJggVq9eLerr64P7h42A3s5df9+n4Xrt9fW+FUKIF154QURERIimpqYujw/n666vexMhQu9zTxJCiGHqdCAiIiIiolGMNQNERERERGGKYYCIiIiIKEwxDBARERERhSmGASIiIiKiMMUwQEREREQUphgGiIiIiIjCFMMAEREREVGYYhggIiIiIgpTDANERGGupqYG999/PzIyMqBWq5GUlIQrr7wSu3btgt1uh9FoxO9+97tuH/vUU0/BaDTCbrdj3bp1iI6OHnQ7JEnCxo0bB/14IiIaOIYBIqIwd8MNN+DgwYNYv349Tp48iQ8//BCLFy9GQ0MDVCoVbr/9dqxbtw7dLVj/yiuv4I477oBKpQpCy4mI6FwxDBARhbGmpibs2LEDf/rTn3DppZciMzMT8+bNw2OPPYarr74aAHDPPffg9OnT2LZtW8Bjt2/fjsLCQtxzzz39ei273Y4HH3wQycnJ0Gg0GDduHJ566ikAwLhx4wAA119/PSRJ8v8OAP/5z38we/ZsaDQajB8/Hk8++SScTqd/vyRJeP7557Fs2TJEREQgKysL77zzzjmcFSKi8MEwQEQUxnQ6HXQ6HTZu3AibzdbtMdOnT8fcuXPxyiuvBGx/+eWXMW/ePEybNq1fr/Xss8/iww8/xNtvv40TJ07g9ddf99/05+XlAfD0NFRWVvp///zzz3H77bdj9erVKCgowAsvvIB169bh97//fcBzP/744/4ejttvvx233HILjh07NpBTQUQUlhgGiIjCmEKhwLp167B+/XpER0djwYIF+J//+R8cOnQo4Li7774b7777LlpbWwEAra2teOedd/rdKwAApaWlmDhxIhYuXIjMzEwsXLgQt9xyCwAgPj4eABAdHY2kpCT/77///e/xi1/8AnfeeSfGjx+PJUuW4Le//S1eeOGFgOdesWIFVq5ciUmTJuG3v/0t5syZg7///e+DPi9EROGCYYCIKMzdcMMNqKiowIcffogrr7wSW7duxaxZs7Bu3Tr/Mbfccgvcbjc2bNgAANiwYQOEELj55pv7/Tp33XUXDhw4gMmTJ2P16tX44osv+nzMvn378Jvf/Mbfg6HT6XDvvfeisrISZrPZf1xubm7A43Jzc9kzQETUDwwDREQEjUaDJUuW4Fe/+hV27tyJu+66C0888YR/v8FgwI033ugfKvTKK6/gxhtvRFRUVL9fY9asWSgqKsJvf/tbWCwWfP/738eNN97Y62PcbjeefPJJHDhwwP/v8OHDKCwshEaj6fWxkiT1u21EROGKYYCIiLrIyclBW1tbwLZ77rkH33zzDT766CN88803Axoi5BMVFYWbbroJL774IjZs2ID33nsPDQ0NAAClUgmXyxVw/KxZs3DixAlkZ2d3+SeTtf8nbPfu3QGP2717N6ZMmTLg9hERhRtFsBtARETBU19fjxUrVuDuu+/G+eefD71ej7179+LPf/4zrrvuuoBjL7nkEmRnZ+MHP/gBsrOzsWjRogG91jPPPIPk5GRccMEFkMlkeOedd5CUlORfm2DcuHH48ssvsWDBAqjVasTExOBXv/oVli9fjvT0dKxYsQIymQyHDh3C4cOHA9Y+eOeddzBnzhwsXLgQb7zxBvbs2YOXXnrpnM8PEdFYx54BIqIwptPpMH/+fDzzzDNYtGgRpk2bhscffxz33nsv1qxZ0+X4u+++G42Njbj77rsH9Vp/+tOfMGfOHMydOxfFxcX45JNP/N/w//Wvf8WmTZuQnp6OmTNnAgCuvPJKfPTRR9i0aRPmzp2LCy+8EE8//TQyMzMDnvvJJ5/EW2+9hfPPPx/r16/HG2+8gZycnEGcESKi8CKJ7laRISIiChGSJOGDDz7Ad7/73WA3hYgo5LBngIiIiIgoTDEMEBERERGFKRYQExFRSONoVyKiwWPPABERERFRmGIYICIiIiIKUwwDRERERERhimGAiIiIiChMMQwQEREREYUphgEiIiIiojDFMEBEREREFKYYBoiIiIiIwhTDABERERFRmPr/AcmgzoV+CEGTAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%time\n", + "pyro.clear_param_store()\n", + "pyro.set_rng_seed(1234567890)\n", + "num_steps = 1 if smoke_test else 201\n", + "optim = ClippedAdam({\"lr\": 0.1, \"lrd\": 0.1 ** (1 / num_steps)})\n", + "svi = SVI(model, lambda: None, optim, EnergyDistance())\n", + "losses = []\n", + "for step in range(num_steps):\n", + " loss = svi.step()\n", + " losses.append(loss)\n", + " if step % 20 == 0:\n", + " print(\"step {} loss = {}\".format(step, loss))\n", + "\n", + "print(\"-\" * 20)\n", + "pyplot.figure(figsize=(9, 3))\n", + "pyplot.plot(losses)\n", + "pyplot.yscale(\"log\")\n", + "pyplot.ylabel(\"loss\")\n", + "pyplot.xlabel(\"SVI step\")\n", + "for name, value in sorted(pyro.get_param_store().items()):\n", + " if value.numel() == 1:\n", + " print(\"{} = {:0.4g}\".format(name, value.squeeze().item()))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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euSRR9S5c2f5+voqLCxMd911lw4fPuxQb8CAAbLZbA6vUaNGVfPZ1Kzq6rvc3Fz99a9/VWBgoHx9fXXDDTfo559/ruazqXnl7T9J+uCDDzRkyBAFBgbKZrNp165dxeow9kpWlr5j7JXOGKM5c+YoLCxM3t7eGjBggPbt2+dQpz6OvcWLF6t169by8vJSZGSkNm3adNH6GzZsUGRkpLy8vNSmTRstWbKkWJ2VK1eqY8eO8vT0VMeOHfXhhx9WV/hOV9X9t2zZsmJjzGazKScnpzpPwynK03cZGRm644471K5dO7m4uGjq1Kkl1rPS2KsUA8u57rrrTKdOnUxSUpJJSkoynTp1MsOGDSu1/okTJ8zgwYPNihUrzLfffmu2bNlievbsaSIjIx3q9e/f30yYMMFkZGTYXydOnKju06lR1dV3EydONM2aNTOJiYnm66+/NtHR0SYiIsKcP3++uk+pRpW3/4wx5s033zRz5841r776qpFkkpOTi9Vh7JWsLH3H2CvdggULjJ+fn1m5cqXZs2ePuf32203Tpk1Ndna2vU59G3vvvvuucXd3N6+++qpJSUkx999/v/H19TU//fRTifV//PFH4+PjY+6//36TkpJiXn31VePu7m7ef/99e52kpCTj6upqnn76abN//37z9NNPGzc3N7N169aaOq0aUx39t3TpUuPv7+8wxjIyMmrqlGpMefsuNTXVTJkyxbzxxhuma9eu5v777y9Wx0pjr7JICCwmJSXFSHL4Y9iyZYuRZL799tsyt7Nt2zYjyeEPtX///iX+QdYX1dV3J06cMO7u7ubdd9+11/nll1+Mi4uL+fTTT6vuBJyssv2Xmpp60YSAsVe60vqOsVd6/xUUFJjQ0FCzYMECe1lOTo4JCAgwS5YssZfVt7F39dVXm4kTJzqUtW/f3syYMaPE+tOnTzft27d3KLv33ntNr1697Nu33Xabue666xzqDBkyxIwaNaqKoq49qqP/li5dagICAqo81tqmvH13odL+Dq009iqLKUMWs2XLFgUEBKhnz572sl69eikgIEBJSUllbufkyZOy2Wxq2LChQ/k777yjwMBAXXnllXrooYd06tSpqgrd6aqr73bu3Klz584pJibGXicsLEydOnUqV7u1XVX1X2kYe+XH2Cu9/1JTU5WZmenQN56enurfv3+x99SXsZeXl6edO3c6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NWfOHPu2zWbTkiVLdOONN8rX11fz5s3TnDlz1LVrV7311ltq1aqVAgICNGrUKJ06dcr+vvfff1+dO3eWt7e3mjRposGDB+vMmTNl6jsAqE1ICACglnn44Ye1bt06ffjhh/r888+1fv167dy506FOXl6ennzySX3zzTdatWqVUlNT7V+CL6VVq1YaPHiwli5d6lC+dOlS3X333WW6qmCM0U033aTffvtNGzZsUGJiog4ePKjbb7/dXuedd97RU089pWeeeUY7d+5Uy5Yt9fLLL5cpxunTp2v+/Pnav3+/unTpokcffVRLly7Vyy+/rH379umBBx7QnXfeqQ0bNqhFixZauXKlJOm7775TRkaGXnzxxTIdp9Ds2bN14403as+ePRo7dqwk6eDBg1q1apU++eQTffLJJ9qwYYMWLFggScrIyNBf/vIXjR07Vvv379f69es1YsSIMidTAFCrGABArXHq1Cnj4eFh3n33XXtZVlaW8fb2Nvfff3+p79u2bZuRZE6dOmWMMWbdunVGkjl+/LgxxpilS5eagIAAe/0VK1aYRo0amZycHGOMMbt27TI2m82kpqaWeozw8HDz97//3RhjzOeff25cXV1Nenq6ff++ffuMJLNt2zZjjDE9e/Y08fHxDm1cc801JiIiotRjFMa9atUqe9np06eNl5eXSUpKcqg7btw485e//KXE8y0p5kIRERFm9uzZ9m1JZurUqQ51Zs+ebXx8fEx2dra97OGHHzY9e/Y0xhizc+dOI8mkpaWVei4AUFdwhQAAapGDBw8qLy9PvXv3tpc1btxY7dq1c6iXnJysG2+8UeHh4fLz89OAAQMk/TGNpyxuuukmubm56cMPP5Qkvf7664qOjlarVq3K9P79+/erRYsWatGihb2sY8eOatiwofbv3y/pj1/rr776aof3Fd0uTffu3e3/TklJUU5Ojq699lo1aNDA/nrzzTd18ODBMrVXnuMVatWqlfz8/OzbTZs2tU/LioiI0KBBg9S5c2eNHDlSr776qo4fP14lsQBATSMhAIBaxJRhysmZM2cUExOjBg0a6O2339b27dvtX+zz8vLKdBwPDw/FxcVp6dKlysvL0/Lly+1TZcoaZ0lTi4qWF61TlvOTJF9fX/u/CwoKJEmrV6/Wrl277K+UlBT7OoLSuLi4FDtmSYuGLzxeIXd3d4dtm81mj8XV1VWJiYn697//rY4dO2rRokVq166dUlNTy3R+AFCbkBAAQC1y2WWXyd3dXVu3brWXHT9+XN9//719+9tvv9WxY8e0YMEC9e3bV+3bt3dYUFxW48eP1xdffKHFixfr3LlzGjFiRJnf27FjR6Wnp+vQoUP2spSUFJ08eVIdOnSQJLVr107btm1zeF/RhcxlPZanp6fS09N12WWXObwKr1B4eHhIkvLz8x3eGxQUpIyMDPt2dnZ2lX1pt9lsuuaaazR37lwlJyfLw8PDnpgBQF3i5uwAAAB/atCggcaNG6eHH35YTZo0UUhIiGbNmiUXlz9/v2nZsqU8PDy0aNEiTZw4UXv37tWTTz5Z7mN16NBBvXr10iOPPKKxY8fK29u7zO8dPHiwunTpotGjR2vhwoU6f/68Jk2apP79+9un3/z1r3/VhAkT1L17d0VFRWnFihXavXu32rRpU644/fz89NBDD+mBBx5QQUGB+vTpo+zsbCUlJalBgwYaM2aMwsPDZbPZ9Mknn2jo0KHy9vZWgwYNNHDgQC1btkzDhw9Xo0aN9Nhjj8nV1bVcxy/JV199pbVr1yomJkbBwcH66quvdPToUXsyBAB1CVcIAKCWee6559SvXz/dcMMNGjx4sPr06aPIyEj7/qCgIC1btkz//Oc/1bFjRy1YsEB/+9vfKnSscePGKS8vr1zThaQ/fh1ftWqVGjVqpH79+mnw4MFq06aNVqxYYa8zevRozZw5Uw899JC6detmvxOSl5dXueN88skn9fjjj2v+/Pnq0KGDhgwZoo8//litW7eWJDVr1kxz587VjBkzFBISosmTJ0uSZs6cqX79+mnYsGEaOnSobrrpJrVt27bcxy/K399fGzdu1NChQ3XFFVfo0Ucf1fPPP6/Y2NhKtw0ANc1myjqhEwBQ7zz11FN69913tWfPnho53rXXXqvQ0FC99dZbNXI8AMClMWUIACzo9OnT2r9/vxYtWlSh6UZlcfbsWS1ZskRDhgyRq6ur/vGPf+iLL75QYmJitRwPAFAxTBkCAAuaPHmy+vTpo/79+5d7ulBZ2Ww2rVmzRn379lVkZKQ+/vhjrVy5UoMHD66W4wEAKoYpQwAAAICFcYUAAAAAsDASAgAAAMDCSAgAAAAACyMhAAAAACyMhAAAAACwMBICAAAAwMJICAAAAAALIyEAAAAALOz/ATJFsS8VCrFvAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "samples = poutine.uncondition(model)().detach()\n", + "pyplot.figure(figsize=(9, 3))\n", + "pyplot.hist(samples.numpy(), bins=200)\n", + "pyplot.yscale(\"log\")\n", + "pyplot.xlabel(\"daily log returns\")\n", + "pyplot.ylabel(\"count\")\n", + "pyplot.title(\"Posterior predictive distribution\");\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is a poor fit, but that was to be expected since we are mixing all time steps together: we would expect this to be a scale-mixture of distributions (Normal, or Stable), but are modeling it as a single distribution (Stable in this case)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Modeling stochastic volatility \n", + "\n", + "We'll next fit a stochastic volatility model.\n", + "Let's begin with a constant volatility model where log price $p$ follows Brownian motion\n", + "\n", + "$$\n", + " \\log p_t = \\log p_{t-1} + w_t \\sqrt h\n", + "$$\n", + "\n", + "where $w_t$ is a sequence of standard white noise. We can rewrite this model in terms of the log returns $r_t=\\log(p_t\\,/\\,p_{t-1})$:\n", + "\n", + "$$\n", + " r_t = w_t \\sqrt h\n", + "$$\n", + "\n", + "Now to account for [volatility clustering](https://en.wikipedia.org/wiki/Volatility_clustering) we can generalize to a stochastic volatility model where volatility $h$ depends on time $t$. Among the simplest such models is one where $h_t$ follows geometric Brownian motion\n", + "\n", + "$$\n", + " \\log h_t = \\log h_{t-1} + \\sigma v_t\n", + "$$\n", + "\n", + "where again $v_t$ is a sequence of standard white noise. The entire model thus consists of a geometric Brownian motion $h_t$ that determines the diffusion rate of another geometric Brownian motion $p_t$:\n", + "\n", + "$$\n", + " \\log h_t = \\log h_{t-1} + \\sigma v_t \\\\\n", + " \\log p_t = \\log p_{t-1} + w_t \\sqrt h_t\n", + "$$\n", + "\n", + "Usually $v_1$ and $w_t$ are both Gaussian. We will generalize to a Stable distribution for $w_t$, learning three parameters (stability, skew, and location), but still scaling by $\\sqrt h_t$.\n", + "\n", + "Our Pyro model will sample the increments $v_t$ and record the computation of $\\log h_t$ via [pyro.deterministic](http://docs.pyro.ai/en/stable/primitives.html#pyro.deterministic). Note that there are many ways of implementing this model in Pyro, and geometry can vary depending on implementation. The following version seems to have good geometry, when combined with reparameterizers." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "def model(data):\n", + " # Note we avoid plates because we'll later reparameterize along the time axis using\n", + " # DiscreteCosineReparam, breaking independence. This requires .unsqueeze()ing scalars.\n", + " h_0 = pyro.sample(\"h_0\", dist.Normal(0, 1)).unsqueeze(-1)\n", + " sigma = pyro.sample(\"sigma\", dist.LogNormal(0, 1)).unsqueeze(-1)\n", + " v = pyro.sample(\"v\", dist.Normal(0, 1).expand(data.shape).to_event(1))\n", + " log_h = pyro.deterministic(\"log_h\", h_0 + sigma * v.cumsum(dim=-1))\n", + " sqrt_h = log_h.mul(0.5).exp().clamp(min=1e-8, max=1e8)\n", + "\n", + " # Observed log returns, assumed to be a Stable distribution scaled by sqrt(h).\n", + " r_loc = pyro.sample(\"r_loc\", dist.Normal(0, 1e-2)).unsqueeze(-1)\n", + " r_skew = pyro.sample(\"r_skew\", dist.Uniform(-1, 1)).unsqueeze(-1)\n", + " r_stability = pyro.sample(\"r_stability\", dist.Uniform(0, 2)).unsqueeze(-1)\n", + " pyro.sample(\"r\", dist.Stable(r_stability, r_skew, sqrt_h, r_loc * sqrt_h).to_event(1),\n", + " obs=data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Fitting a Model with Reparameterization \n", + "\n", + "We use two reparameterizers: [StableReparam](http://docs.pyro.ai/en/latest/infer.reparam.html#pyro.infer.reparam.stable.StableReparam) to handle the `Stable` likelihood (since `Stable.log_prob()` is very expensive), and [DiscreteCosineReparam](http://docs.pyro.ai/en/latest/infer.reparam.html#pyro.infer.reparam.discrete_cosine.DiscreteCosineReparam) to improve geometry of the latent Gaussian process for `v`. We'll then use `reparam_model` for both inference and prediction." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "reparam_model = poutine.reparam(model, {\"v\": DiscreteCosineReparam(),\n", + " \"r\": StableReparam()})" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "step 0 loss = 2244.54\n", + "step 200 loss = -1.16091\n", + "step 400 loss = -2.96091\n", + "step 600 loss = -3.01823\n", + "step 800 loss = -3.03623\n", + "step 1000 loss = -3.04261\n", + "step 1200 loss = -3.07324\n", + "step 1400 loss = -3.06965\n", + "step 1600 loss = -3.08399\n", + "step 1800 loss = -3.08298\n", + "step 2000 loss = -3.08325\n", + "step 2200 loss = -3.09142\n", + "step 2400 loss = -3.09739\n", + "step 2600 loss = -3.10487\n", + "step 2800 loss = -3.09952\n", + "step 3000 loss = -3.10444\n", + "--------------------\n", + "h_0 = -0.2587 ± 0.00434\n", + "r_loc = 0.04707 ± 0.002965\n", + "r_skew = 0.001134 ± 0.0001323\n", + "r_stability = 1.946 ± 0.001327\n", + "sigma = 0.1359 ± 6.603e-05\n", + "CPU times: total: 19.7 s\n", + "Wall time: 2min 54s\n" + ] + }, + { + "data": { + "text/plain": [ + "(-3.119090303321589, 20.0)" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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uukm/fWvf1VdXZ0kqa6uTk899VTMvQ2StHfvXo0aNUpTp07V8OHDNXXqVF177bWSpEGDBkmSsrOzlZ+fH1r++c9/rh/96EeaPXu2TjjhBE2fPl0PPPCAHnvssbBjX3XVVbrlllt00kkn6YEHHtCECRP0P//zP13+XAAAx47gAAD93BVXXKGvvvpKzz//vC644AK9+eabGjdunJYvXx4qc+211yoYDGrVqlWSpFWrVskYo2uuuSbm89x4443avHmzTj75ZN1111169dVXo+7zwQcf6Kc//WmoZyQjI0O33nqr9u3bp4aGhlC5yZMnh+03efJkehwAoJcRHAAgCaSkpGj69On6yU9+onfeeUc33nij7r///tB2j8ejK6+8MnS70uOPP64rr7xSWVlZMZ9j3Lhx2rNnjx544AE1Njbq3/7t33TllVd2uk8wGNTChQu1efPm0Gvr1q3atWuXUlJSOt3XsqyY6wYAOH4EBwBIQqeeeqrq6+vD1t188816++239cILL+jtt98+ptuUjsjKytLVV1+t3/3ud1q1apWefvppHTp0SJLkdDoVCATCyo8bN04ff/yxRo4c2e5lsx39FbVhw4aw/TZs2KCvfe1rx1w/AEDXOfq6AgCAnlNRUaGrrrpKN910k04//XRlZmbq/fff1+LFi3XppZeGlT333HM1cuRI/fu//7tGjhypc84555jO9cgjj6igoEBnnHGGbDabnnrqKeXn54fmfhgxYoT+8Y9/6Oyzz5bb7daAAQP0k5/8RLNmzVJRUZGuuuoq2Ww2bdmyRVu3bg2bW+Kpp57ShAkTNHXqVD355JN677339Ic//OG4Px8AQOzocQCAfiwjI0OTJk3SI488onPOOUejR4/Wfffdp1tvvVVLly5tV/6mm25SZWWlbrrppi6d6xe/+IUmTJigiRMn6rPPPtNLL70U6jl4+OGHtWbNGhUVFenrX/+6JOmCCy7QCy+8oDVr1mjixIk666yztGTJEg0fPjzs2AsXLtTKlSt1+umna8WKFXryySd16qmnduETAQB0lWU6mvEHAIA4YVmWnn32WV122WV9XRUASGr0OAAAAACIiuAAAAAAICoGRwMA4hp31AJAfKDHAQAAAEBUBAcAAAAAUREcAAAAAERFcAAAAAAQFcEBAAAAQFQEBwAAAABRERwAAAAAREVwAAAAABDV/w8f1ejFG0mfeAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%time\n", + "pyro.clear_param_store()\n", + "pyro.set_rng_seed(1234567890)\n", + "\n", + "def fit_model(model):\n", + " num_steps = 1 if smoke_test else 3001\n", + " optim = ClippedAdam({\"lr\": 0.05, \"betas\": (0.9, 0.99), \"lrd\": 0.1 ** (1 / num_steps)})\n", + " guide = AutoDiagonalNormal(model)\n", + " svi = SVI(model, guide, optim, Trace_ELBO())\n", + " losses = []\n", + " stats = []\n", + " for step in range(num_steps):\n", + " loss = svi.step(r) / len(r)\n", + " losses.append(loss)\n", + " stats.append(guide.quantiles([0.325, 0.675]).items())\n", + " if step % 200 == 0:\n", + " median = guide.median()\n", + " print(\"step {} loss = {:0.6g}\".format(step, loss))\n", + "\n", + " return guide, losses, stats\n", + "\n", + "guide, losses, stats = fit_model(reparam_model)\n", + "\n", + "print(\"-\" * 20)\n", + "for name, (lb, ub) in sorted(stats[-1]):\n", + " if lb.numel() == 1:\n", + " lb = lb.squeeze().item()\n", + " ub = ub.squeeze().item()\n", + " print(\"{} = {:0.4g} ± {:0.4g}\".format(name, (lb + ub) / 2, (ub - lb) / 2))\n", + "\n", + "pyplot.figure(figsize=(9, 3))\n", + "pyplot.plot(losses)\n", + "pyplot.ylabel(\"loss\")\n", + "pyplot.xlabel(\"SVI step\")\n", + "pyplot.xlim(0, len(losses))\n", + "pyplot.ylim(min(losses), 20)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It appears the log returns exhibit very little skew, but exhibit a stability parameter slightly but significantly less than 2. This contrasts the usual Normal model corresponding to a Stable distribution with skew=0 and stability=2. We can now visualize the estimated volatility:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxUAAAHUCAYAAABMNgUyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydd3wUZf7HPzOzfdN7AgkJTUAQEBURFXsHeznOs55nOc/+uzs9FbBhxXYiVjy7KGBDsSBgAZVepJdAIIT07W1mnt8fz8zObrIJWUgIkO/79doXZHbKM7PPPM/z7QJjjIEgCIIgCIIgCGIvETu7AQRBEARBEARBHNyQUEEQBEEQBEEQxD5BQgVBEARBEARBEPsECRUEQRAEQRAEQewTJFQQBEEQBEEQBLFPkFBBEARBEARBEMQ+QUIFQRAEQRAEQRD7BAkVBEEQBEEQBEHsEyRUEARBEARBEASxT5BQQRBEh/LWW29BEIQWP/PmzWvzuSorKzF+/HgsX7682Xfjx4+HIAjt1/AkWLNmDcaPH4/y8vJ2P3db7+uaa65BaWlpp1y7M7n//vtRUlICk8mEjIyMfTrX5MmT8dZbb+3TOQRBwK233rrH/ebNm9es/yd63ieddBJOOumk6N9+vx/jx49P6r3pDJ577jlcdNFFKCsrgyAIcffQFjZs2ICLL74YmZmZcDgcGD58OD7//PM9HnfllVdCEAScd955Cb+vra3F7bffjtLSUlitVuTn5+Pss89GfX19Uu0jCKI5ps5uAEEQXYOpU6eiX79+zbYPGDCgzeeorKzEhAkTUFpaiiFDhsR999e//hVnnXXWvjZzr1izZg0mTJiAk046qd0X9m3lgQcewO23394p1+4sPvvsMzz66KP4z3/+g7PPPhtWq3Wfzjd58mTk5OTgmmuuaZ8GtsKRRx6JhQsX7rH/T548Oe5vv9+PCRMmAEDSC/X9yZQpU+B0OnHKKafgiy++SOrY8vJyjBgxAoWFhZgyZQpSUlLw8ssv44ILLsDHH3+Miy++OOFxs2bNwqeffoq0tLSE31dWVuKEE06AyWTCAw88gD59+qC2thZz585FOBxO+h4JgoiHhAqCIPYLAwcOxFFHHdVh5+/evTu6d+/eYec/0OnVq1dnN2G/s3r1agDAbbfdhry8vE5uTXKkpaXh2GOP3eN+yQjdBxJr1qyBKHJniIEDByZ17OOPPw6/349vvvkG3bp1AwCcddZZGDRoEO68805ceOGF0XPruFwu3HjjjXj44Yfx/PPPJzzvLbfcglAohMWLFyMzMzO6/aKLLkqqfQRBJIbcnwiCOGD4+OOPMXz4cKSnp8PhcKBnz5647rrrAHB3kaOPPhoAcO2110bdp8aPHw8gsetIaWkpzjvvPHz55ZcYOnQo7HY7+vfvjy+//BIAd83q378/nE4njjnmGCxevDju+MWLF+OKK65AaWkp7HY7SktL8ac//Qnbtm2L7vPWW2/h0ksvBQCcfPLJ0XbFutF8//33OPXUU5GWlgaHw4GRI0dizpw5ze5/1qxZGDJkCKxWK8rKyvD000+3+dklcn/SXXHeeecd9O/fHw6HA4MHD47e/95cmzGGyZMnY8iQIbDb7cjMzMQll1yCLVu2RPf58MMPIQgC/vvf/8YdO27cOEiShO+++67Ve1FVFU8++ST69esHq9WKvLw8XHXVVdixY0d0n9LSUtx///0AgPz8/Li+kIgtW7bgiiuuQFFRUdTt5dRTT4260pWWluKPP/7A/Pnzo7+h/jyDwSDuvvtuDBkyBOnp6cjKysKIESPw2WeftXi9V155BX379oXVasWAAQPw4Ycfxn2fyP0pEbHuT+Xl5cjNzQUATJgwIdrOa665Bj/99BMEQcAHH3zQ7Bxvv/02BEHAokWLWr1We9J00Z8Mv/zyCwYPHhwVKABAkiScffbZqKiowO+//97smLvvvhuFhYW47bbbEp6zvLwcn3/+OW644YY4gYIgiHaEEQRBdCBTp05lANivv/7KIpFI3EeW5eh+CxYsYIIgsCuuuIJ99dVX7IcffmBTp05lf/nLXxhjjLlcrui57r//frZw4UK2cOFCVlFRwRhjbNy4cazpkNajRw/WvXt3NnDgQPbBBx+wr776ig0fPpyZzWb24IMPspEjR7IZM2awmTNnsr59+7L8/Hzm9/ujx3/88cfswQcfZDNnzmTz589nH374IRs1ahTLzc1lNTU1jDHGqqur2WOPPcYAsJdeeinarurqasYYY++88w4TBIFdcMEFbMaMGeyLL75g5513HpMkiX3//ffRa33//fdMkiR2/PHHsxkzZrCPP/6YHX300aykpKTZfSXi6quvZj169IjbBoCVlpayY445hk2bNo199dVX7KSTTmImk4lt3rx5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Ng3jx49HOBzGlClTWj323XffRVlZGT766KO4ZAChUCjh/q09y0RCXnty88034/HHH8ebb76JYDAIWZZx00037fG48vJylJWVtekac+fO7fB0tldffTX+/Oc/Y+PGjTCbzejduzcmTpwIQRBwwgknAOAZphhjuPDCC5sdX1FRgczMTDz77LO44447cMQRR7R4LcbYPgWWEwTBIaGCIIgDDqvVilGjRiEjIwPffPMNli1bhhEjRkQXrW2xEuwrgiCAMZZwoawoSrP2JmrXyJEjkZGRgTVr1rRaEM1iseCYY47BjBkz8NRTT0XdkDweT9I5/pNFz3zVlmufd955ePzxx7Fz505cdtllrZ531apVuO2223DVVVfhtddew3HHHYfLL78cy5YtazX7zimnnAKAL+R1lzgAWLRoEdauXYv//Oc/e3urUfr27Yv7778f06dPj9NQx1pwYhEEARaLJU6gqKqqajH705w5c7B79+6oRUdRFHz00Ufo1avXPlsp9vQOFBYW4tJLL8XkyZMRDocxevRolJSU7PG8uvtTWzjssMPa3uB9wGQyRd0SXS4XXn31VZx//vno0aMHAJ5mVneXi+WKK65AWVkZJk6ciN69ewMAhg8fju7du+Pbb7+FoihRa0VlZSVWrFiBsWPH7pd7IohDGRIqCILYL6xevRqyLDfb3qtXL+Tm5uLBBx/Ejh07cOqpp6J79+5obGzE888/D7PZjFGjRkX3tdvteO+999C/f3+kpKSgqKgIRUVF7d7etLQ0nHjiiXjqqaeQk5OD0tJSzJ8/H2+88Uazys16Hv5XX30VqampsNlsKCsrQ3Z2Nl588UVcffXVqK+vxyWXXIK8vDzU1NRgxYoVqKmpwcsvvwwAePjhh3HWWWfh9NNPx9133w1FUfDEE0/A6XR2eLXftl575MiR+Nvf/oZrr70Wixcvxoknngin04ldu3bh559/xqBBg3DzzTfD5/PhsssuQ1lZGSZPngyLxYJp06bhyCOPxLXXXotPP/20xbYcdthh+Nvf/oYXX3wRoiji7LPPRnl5OR544AEUFxfjzjvvTPr+Vq5ciVtvvRWXXnop+vTpA4vFgh9++AErV66Ms0INGjQIH374IT766CP07NkTNpsNgwYNwnnnnYcZM2bglltuwSWXXIKKigo8/PDDKCwsxMaNG5tdLycnB6eccgoeeOAB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HLfjLliwwDidzhuO68033zQhISGmubnZWvbb3/7WSDJlZWU33O6ZZ54x3/72t633L7/8shkzZoz1fteuXaZ///7m4sWLN9wHAPgyrlQAAL6QhIQEt/fNzc164YUXNHbsWA0aNEj9+/fXyZMnrSsVlZWV6tOnj9t2o0ePvultSpI0btw46+eIiAhJsq5wVFVVadKkSW71176/VmVlpeLj49WvXz9rWWJiYqe6jRs3KiEhQUOGDFH//v21adOmTlde/v3vf6uwsFCS9Ic//EFPPvmkgoODbzonAPBFPKgNAPhCrv3g/KMf/Uh79+7VunXrNHLkSAUFBemJJ55Qa2urpP890C3975mJL8rf39/6+er2HR0d1n6v3efVY93IzdZL0o4dO/Tcc8/p1VdfVWJiogYMGKBf/vKXKioqsmrCwsKUkpKizZs3a8SIEdqzZ4/y8/NvdVoA4HMIFQCATgICAtTe3n5LtYcOHVJGRoYef/xxSdLFixdVU1NjrR8zZoza2tpUUlJiXUmoqqrS+fPnbY1x9OjRKi4udltWUlLS5TZjx47Vli1b9PnnnysoKEiSrKsN/z+fqVOn6plnnrGWffjhh532tXjxYqWmpioqKkr33XefHn744dudCgDc8bj9CQDQyfDhw1VUVKSamhp99tln1tWB6xk5cqRycnJUXl6uf/3rX0pLS3OrHzVqlGbNmqXMzEwVFRWptLRUixcvtj7U366lS5dqz549ys7OVnV1td5880298847XV4RSUtLk5+fn55++mlVVFRoz549WrduXaf5lJSUaO/evfrggw/00ksv6ejRo532NXPmTDmdTv385z/nAW0Adz1CBQCgkxUrVuiee+7R2LFjNWTIELfnCa712muvafDgwZo6dapSUlI0c+ZMPfjgg241mzdvVnR0tKZPn6558+bpu9/9rsLCwmyN8eGHH9bGjRuVnZ2t+Ph45ebm6rnnnlPfvn1vuE3//v31t7/9TRUVFZowYYJWrlypl19+2a1myZIlmjdvnubPn6/JkyeroaHB7arFVX5+fsrIyFB7e7sWLlxoay4AcKdzmFu5wRQAgDtAZmamTp48qUOHDnnteGfPntXu3bu9cjwA6K14pgIAcMdat26dZsyYoeDgYL3zzjt66623tGHDBo8ft7GxUUePHtW2bdv09ttve/x4ANDbESoAAHes4uJivfLKK2pqatKIESP061//WosXL/b4cefOnavi4mJ973vf04wZMzx+PADo7bj9CQAAAIAtPKgNAAAAwBZCBQAAAABbCBUAAAAAbCFUAAAAALCFUAEAAADAFkIFAAAAAFsIFQAAAABsIVQAAAAAsOW/1XfsnSQVWmEAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, axes = pyplot.subplots(2, figsize=(9, 5), sharex=True)\n", + "pyplot.subplots_adjust(hspace=0)\n", + "axes[1].plot(r, \"k\", lw=0.2)\n", + "axes[1].set_ylabel(\"log returns\")\n", + "axes[1].set_xlim(0, len(r))\n", + "\n", + "# We will pull out median log returns using the autoguide's .median() and poutines.\n", + "num_samples = 200\n", + "with torch.no_grad():\n", + " pred = Predictive(reparam_model, guide=guide, num_samples=num_samples, parallel=True)(r)\n", + "log_h = pred[\"log_h\"]\n", + "axes[0].plot(log_h.median(0).values, lw=1)\n", + "axes[0].fill_between(torch.arange(len(log_h[0])),\n", + " log_h.kthvalue(int(num_samples * 0.1), dim=0).values,\n", + " log_h.kthvalue(int(num_samples * 0.9), dim=0).values,\n", + " color='red', alpha=0.5)\n", + "axes[0].set_ylabel(\"log volatility\")\n", + "\n", + "stability = pred[\"r_stability\"].median(0).values.item()\n", + "axes[0].set_title(\"Estimated index of stability = {:0.4g}\".format(stability))\n", + "axes[1].set_xlabel(\"trading day\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Observe that volatility roughly follows areas of large absolute log returns. Note that the uncertainty is underestimated, since we have used an approximate `AutoDiagonalNormal` guide. For more precise uncertainty estimates, one could use [HMC](http://docs.pyro.ai/en/stable/mcmc.html#hmc) or [NUTS](http://docs.pyro.ai/en/stable/mcmc.html#nuts) inference." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Fitting a Model with Numerically Integrated Log-Probability " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We now create a model without reparameterization of the `Stable` distirbution. This model will use the `Stable.log_prob()` method in order to calculate the log-probability density." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "from functools import partial\n", + "model_with_log_prob = poutine.reparam(model, {\"v\": DiscreteCosineReparam()})" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "step 0 loss = 10.872\n", + "step 200 loss = -3.21741\n", + "step 400 loss = -3.28172\n", + "step 600 loss = -3.28264\n", + "step 800 loss = -3.28722\n", + "step 1000 loss = -3.29258\n", + "step 1200 loss = -3.28663\n", + "step 1400 loss = -3.30035\n", + "step 1600 loss = -3.29928\n", + "step 1800 loss = -3.30102\n", + "step 2000 loss = -3.30336\n", + "step 2200 loss = -3.30392\n", + "step 2400 loss = -3.30549\n", + "step 2600 loss = -3.30622\n", + "step 2800 loss = -3.30624\n", + "step 3000 loss = -3.30575\n", + "--------------------\n", + "h_0 = -0.2038 ± 0.005494\n", + "r_loc = 0.04509 ± 0.003355\n", + "r_skew = -0.09735 ± 0.02454\n", + "r_stability = 1.918 ± 0.002963\n", + "sigma = 0.1391 ± 6.794e-05\n", + "CPU times: total: 1h 20min 43s\n", + "Wall time: 1h 7s\n" + ] + }, + { + "data": { + "text/plain": [ + "(-3.3079991399111877, 20.0)" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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4e4ydUp06Ufnp+qbw8cCQpo7Xmv+cUA9O7VXVqf2+mJ/pT7/+rD6dXPrJy+t07DenfTjS7vp397fpdJKj8ZenK7ci9K0a3+VdpdVqkO7OH1ecjjoHIm+3dyKi7b0WfHhFjhbAAAAtDSfp1bfzJukw4cPy+12N/vztfngsG/fPvXq1SvcZQAAAADNoqSkRN27d2/252nzH8eakpIiSSouLm6RJIbmVVlZqczMzBYfQULzoD/bHvq0baE/2xb6s2053p87duxQRkZGizxnmw8OUd/fAOh2u7lI2pDk5GT6sw2hP9se+rRtoT/bFvqzbenWrZv//W5z45ujAQAAAARFcAAAAAAQVJsPDi6XS08++aRcLlfwxoh49GfbQn+2PfRp20J/ti30Z9sSjv5s85+qBAAAAODstfkRBwAAAABnj+AAAAAAICiCAwAAAICgCA4AAAAAgmrTweEPf/iDsrOzFR8frwEDBujjjz8Od0lowsyZM2VZVsAjLS3Nv90Yo5kzZyojI0MJCQkaOXKktm/fHnAMj8ejBx98UJ07d1b79u1144036uuvv27pU3GkVatW6YYbblBGRoYsy9KyZcsCtoeq/w4dOqQJEybI7XbL7XZrwoQJOnz4cDOfnfME689JkyY1ul6HDBkS0Ib+jBx5eXkaNGiQkpKS1LVrV918883atWtXQBuu0dbjdPqTa7R1mTdvni6++GL/l/Ll5OTo3Xff9W+PtOuzzQaHJUuWaNq0aXrssce0efNmXXHFFRozZoyKi4vDXRqacNFFF2n//v3+x7Zt2/zb5syZo7lz5yo/P18bNmxQWlqaRo0apaqqKn+badOm6Y033tDixYu1evVqVVdXa+zYsfJ6veE4HUepqalR//79lZ+f3+T2UPXfnXfeqS1btui9997Te++9py1btmjChAnNfn5OE6w/JWn06NEB1+s777wTsJ3+jByFhYV64IEHtG7dOhUUFKihoUG5ubmqqanxt+EabT1Opz8lrtHWpHv37nrmmWe0ceNGbdy4UVdffbVuuukmfziIuOvTtFGXX365mTJlSsC6888/3/z6178OU0U4mSeffNL079+/yW0+n8+kpaWZZ555xr/u6NGjxu12m//4j/8wxhhz+PBhExsbaxYvXuxv880335ioqCjz3nvvNWvtCCTJvPHGG/7lUPXfjh07jCSzbt06f5u1a9caSeaLL75o5rNyrh/2pzHGTJw40dx0000n3Yf+jGxlZWVGkiksLDTGcI22dj/sT2O4RtuCjh07mj/+8Y8ReX22yRGHuro6bdq0Sbm5uQHrc3NztWbNmjBVhVPZs2ePMjIylJ2drTvuuEP79u2TJBUVFam0tDSgL10ul0aMGOHvy02bNqm+vj6gTUZGhvr27Ut/h1mo+m/t2rVyu90aPHiwv82QIUPkdrvp4zBYuXKlunbtqnPPPVeTJ09WWVmZfxv9GdkqKiokSSkpKZK4Rlu7H/bncVyjrZPX69XixYtVU1OjnJyciLw+22RwOHDggLxer1JTUwPWp6amqrS0NExV4WQGDx6sV155Re+//75efvlllZaWaujQoSovL/f316n6srS0VHFxcerYseNJ2yA8QtV/paWl6tq1a6Pjd+3alT5uYWPGjNGiRYv04Ycf6ne/+502bNigq6++Wh6PRxL9GcmMMZo+fbqGDx+uvn37SuIabc2a6k+Ja7Q12rZtmxITE+VyuTRlyhS98cYbuvDCCyPy+ow5o9atjGVZAcvGmEbrEH5jxozx/9yvXz/l5OSoV69eWrhwoX9Cl52+pL8jRyj6r6n29HHLGzdunP/nvn37auDAgcrKytLbb7+tW2655aT70Z/hN3XqVG3dulWrV69utI1rtPU5WX9yjbY+5513nrZs2aLDhw/rtdde08SJE1VYWOjfHknXZ5sccejcubOio6MbpaiysrJGqQ2Rp3379urXr5/27Nnj/3SlU/VlWlqa6urqdOjQoZO2QXiEqv/S0tL07bffNjr+d999Rx+HWXp6urKysrRnzx5J9GekevDBB7V8+XJ99NFH6t69u38912jrdLL+bArXaOSLi4tT7969NXDgQOXl5al///76/e9/H5HXZ5sMDnFxcRowYIAKCgoC1hcUFGjo0KFhqgqny+PxaOfOnUpPT1d2drbS0tIC+rKurk6FhYX+vhwwYIBiY2MD2uzfv19///vf6e8wC1X/5eTkqKKiQp9++qm/zfr161VRUUEfh1l5eblKSkqUnp4uif6MNMYYTZ06Va+//ro+/PBDZWdnB2znGm1dgvVnU7hGWx9jjDweT2Ren2c0lboVWbx4sYmNjTV/+tOfzI4dO8y0adNM+/btzZdffhnu0vADDz/8sFm5cqXZt2+fWbdunRk7dqxJSkry99Uzzzxj3G63ef311822bdvM+PHjTXp6uqmsrPQfY8qUKaZ79+7mgw8+MJ999pm5+uqrTf/+/U1DQ0O4TssxqqqqzObNm83mzZuNJDN37lyzefNm89VXXxljQtd/o0ePNhdffLFZu3atWbt2renXr58ZO3Zsi59vW3eq/qyqqjIPP/ywWbNmjSkqKjIfffSRycnJMd26daM/I9TPf/5z43a7zcqVK83+/fv9j9raWn8brtHWI1h/co22PjNmzDCrVq0yRUVFZuvWrebRRx81UVFRZsWKFcaYyLs+22xwMMaYF1980WRlZZm4uDhz2WWXBXxcGSLHuHHjTHp6uomNjTUZGRnmlltuMdu3b/dv9/l85sknnzRpaWnG5XKZK6+80mzbti3gGEeOHDFTp041KSkpJiEhwYwdO9YUFxe39Kk40kcffWQkNXpMnDjRGBO6/isvLzc//elPTVJSkklKSjI//elPzaFDh1roLJ3jVP1ZW1trcnNzTZcuXUxsbKzp0aOHmThxYqO+oj8jR1N9KcnMnz/f34ZrtPUI1p9co63P3Xff7X+v2qVLF/OjH/3IHxqMibzr0zLGmDMbowAAAADgNG1yjgMAAACA0CI4AAAAAAiK4AAAAAAgKIIDAAAAgKAIDgAAAACCIjgAAAAACIrgAAAAACAoggMAAACAoAgOAAAAAIIiOABAG1dWVqb77rtPPXr0kMvlUlpamq699lqtXbtWdXV16ty5s3772982uW9eXp46d+6suro6LViwQB06dLBdh2VZWrZsme39AQDhRXAAgDbu1ltv1eeff66FCxdq9+7dWr58uUaOHKmDBw8qLi5Od911lxYsWCBjTKN958+frwkTJiguLi4MlQMAIgnBAQDasMOHD2v16tV69tlnddVVVykrK0uXX365ZsyYoeuvv16SdM899+gf//iHVq1aFbDvxx9/rD179uiee+45reeqq6vT1KlTlZ6ervj4ePXs2VN5eXmSpJ49e0qSfvzjH8uyLP+yJP3P//yPBgwYoPj4eJ1zzjmaNWuWGhoa/Nsty9K8efM0ZswYJSQkKDs7W0uXLj2LVwUAYAfBAQDasMTERCUmJmrZsmXyeDxNtunXr58GDRqk+fPnB6z/85//rMsvv1x9+/Y9red64YUXtHz5cv3lL3/Rrl279F//9V/+gLBhwwZJx0Yw9u/f719+//33ddddd+mhhx7Sjh079NJLL2nBggV6+umnA479+OOP+0dO7rrrLo0fP147d+48k5cCAHCWCA4A0IbFxMRowYIFWrhwoTp06KBhw4bp0Ucf1datWwPa3X333frrX/+q6upqSVJ1dbWWLl162qMNklRcXKw+ffpo+PDhysrK0vDhwzV+/HhJUpcuXSRJHTp0UFpamn/56aef1q9//WtNnDhR55xzjkaNGqWnnnpKL730UsCxb7/9dt17770699xz9dRTT2ngwIH693//d9uvCwDgzBEcAKCNu/XWW/XPf/5Ty5cv17XXXquVK1fqsssu04IFC/xtxo8fL5/PpyVLlkiSlixZImOM7rjjjtN+nkmTJmnLli0677zz9NBDD2nFihVB99m0aZN+85vf+EdGEhMTNXnyZO3fv1+1tbX+djk5OQH75eTkMOIAAC2M4AAADhAfH69Ro0bpiSee0Jo1azRp0iQ9+eST/u1ut1u33Xab/3al+fPn67bbblNycvJpP8dll12moqIiPfXUUzpy5Ih+8pOf6LbbbjvlPj6fT7NmzdKWLVv8j23btmnPnj2Kj48/5b6WZZ12bQCAs0dwAAAHuvDCC1VTUxOw7p577tEnn3yit956S5988skZ3aZ0XHJyssaNG6eXX35ZS5Ys0WuvvaaDBw9KkmJjY+X1egPaX3bZZdq1a5d69+7d6BEV9b//RK1bty5gv3Xr1un8888/4/oAAPbFhLsAAEDzKS8v1+233667775bF198sZKSkrRx40bNmTNHN910U0DbESNGqHfv3vqXf/kX9e7dW1deeeUZPddzzz2n9PR0XXLJJYqKitLSpUuVlpbm/+6Hnj176m9/+5uGDRsml8uljh076oknntDYsWOVmZmp22+/XVFRUdq6dau2bdsW8N0SS5cu1cCBAzV8+HAtWrRIn376qf70pz+d9esDADh9jDgAQBuWmJiowYMH67nnntOVV16pvn376vHHH9fkyZOVn5/fqP3dd9+tQ4cO6e6777b1XM8++6wGDhyoQYMG6csvv9Q777zjHzn43e9+p4KCAmVmZurSSy+VJF177bV66623VFBQoEGDBmnIkCGaO3eusrKyAo49a9YsLV68WBdffLEWLlyoRYsW6cILL7TxigAA7LJMU9/4AwBAhLAsS2+88YZuvvnmcJcCAI7GiAMAAACAoAgOAAAAAIJicjQAIKJxRy0ARAZGHAAAAAAERXAAAAAAEBTBAQAAAEBQBAcAAAAAQREcAAAAAARFcAAAAAAQFMEBAAAAQFAEBwAAAABB/X/mDJeJyCf6AQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%time\n", + "pyro.clear_param_store()\n", + "pyro.set_rng_seed(1234567890)\n", + "\n", + "guide_with_log_prob, losses_with_log_prob, stats_with_log_prob = fit_model(model_with_log_prob)\n", + "\n", + "print(\"-\" * 20)\n", + "for name, (lb, ub) in sorted(stats_with_log_prob[-1]):\n", + " if lb.numel() == 1:\n", + " lb = lb.squeeze().item()\n", + " ub = ub.squeeze().item()\n", + " print(\"{} = {:0.4g} ± {:0.4g}\".format(name, (lb + ub) / 2, (ub - lb) / 2))\n", + "\n", + "pyplot.figure(figsize=(9, 3))\n", + "pyplot.plot(losses_with_log_prob)\n", + "pyplot.ylabel(\"loss\")\n", + "pyplot.xlabel(\"SVI step\")\n", + "pyplot.xlim(0, len(losses_with_log_prob))\n", + "pyplot.ylim(min(losses_with_log_prob), 20)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The log returns exhibit a negative skew which was not captured by the model with reparameterization of the `Stable` distribution. The negative skew means that negative log returns have a heavier tail than the tail of positive log returns. Also the stability parameter is slightly lower than the one found using the model with reparameterization of the `Stable` distribution (lower stability means heavier tails).\n", + "\n", + "Comparing convergence of the two models (see below graphs) we can see that without `Stable` distribution reparameterization less iterations are required for the stability parameter to converge, but since per iteration running times without `Stable` distribution reparameterization is much higher, the overall running time without `Stable` distribution reparameterization is significantly higher.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "stability_with_log_prob = []\n", + "skew_with_log_prob = []\n", + "for stat in stats_with_log_prob:\n", + " stat = dict(stat)\n", + " stability_with_log_prob.append(stat['r_stability'].mean().item())\n", + " skew_with_log_prob.append(stat['r_skew'].mean().item())\n", + "\n", + "stability = []\n", + "skew = []\n", + "for stat in stats:\n", + " stat = dict(stat)\n", + " stability.append(stat['r_stability'].mean().item())\n", + " skew.append(stat['r_skew'].mean().item())" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(1.8, 2.0)" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def plot_comparison(log_prob_values, reparam_values, xlabel, ylabel):\n", + " pyplot.plot(log_prob_values, color='b', label='Log-Prob')\n", + " pyplot.plot(reparam_values, color='r', label='Reparam')\n", + " pyplot.xlabel(xlabel)\n", + " pyplot.ylabel(ylabel)\n", + " pyplot.legend(loc='best')\n", + " pyplot.grid()\n", + "\n", + "pyplot.subplot(2,1,1)\n", + "plot_comparison(stability_with_log_prob, stability, '', 'Stability')\n", + "\n", + "pyplot.subplot(2,1,2)\n", + "plot_comparison(stability_with_log_prob, stability, 'SVI step', 'Stability (Zoomed)')\n", + "pyplot.ylim(1.8, 2)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_comparison(skew_with_log_prob, skew, 'SVI step', 'Skew')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/svi_flow_guide.ipynb b/pyro/source/tutorial/source/svi_flow_guide.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..4b0fe1c89d7142eeb6e98eea6b61237b198c857c --- /dev/null +++ b/pyro/source/tutorial/source/svi_flow_guide.ipynb @@ -0,0 +1,238 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# SVI with a Normalizing Flow guide\n", + "\n", + "Thanks to their expressiveness, normalizing flows (see [normalizing flow introduction](normalizing_flows_intro.ipynb)) are great guide candidates for stochastic variational inference (SVI). This notebook demonstrates how to perform amortized SVI with a normalizing flow as guide.\n", + "\n", + "> In this notebook we use [Zuko](https://zuko.readthedocs.io/) to implement normalizing flows, but similar results can be obtained with other PyTorch-based flow libraries." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pyro\n", + "import torch\n", + "import zuko # pip install zuko\n", + "\n", + "from corner import corner, overplot_points # pip install corner\n", + "from pyro.contrib.zuko import ZukoToPyro\n", + "from pyro.optim import ClippedAdam\n", + "from pyro.infer import SVI, Trace_ELBO\n", + "from torch import Tensor" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Model\n", + "\n", + "We define a simple non-linear model $p(x | z)$ with a standard Gaussian prior $p(z)$ over the latent variables $z$." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "prior = pyro.distributions.Normal(torch.zeros(3), torch.ones(3)).to_event(1)\n", + "\n", + "def likelihood(z: Tensor):\n", + " mu = z[..., :2]\n", + " rho = z[..., 2].tanh() * 0.99\n", + "\n", + " cov = 1e-2 * torch.stack([\n", + " torch.ones_like(rho), rho,\n", + " rho, torch.ones_like(rho),\n", + " ], dim=-1).unflatten(-1, (2, 2))\n", + "\n", + " return pyro.distributions.MultivariateNormal(mu, cov)\n", + "\n", + "def model(x: Tensor):\n", + " with pyro.plate(\"data\", x.shape[1]):\n", + " z = pyro.sample(\"z\", prior)\n", + "\n", + " with pyro.plate(\"obs\", 5):\n", + " pyro.sample(\"x\", likelihood(z), obs=x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We sample 64 reference latent variables and observations $(z^*, x^*)$. In practice, $z^*$ is unknown, and $x^*$ is your data." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "z_star = prior.sample((64,))\n", + "x_star = likelihood(z_star).sample((5,))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Guide\n", + "\n", + "We define the guide $q_\\phi(z | x)$ with a normalizing flow. We choose a conditional [neural spline flow](https://arxiv.org/abs/1906.04032) borrowed from the [Zuko](https://zuko.readthedocs.io/) library. Because Zuko distributions are very similar to Pyro distributions, a thin wrapper (`ZukoToPyro`) is sufficient to make Zuko and Pyro 100% compatible." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "flow = zuko.flows.NSF(features=3, context=10, transforms=1, hidden_features=(256, 256))\n", + "flow.transform = flow.transform.inv # inverse autoregressive flow (IAF) are fast to sample from\n", + "\n", + "def guide(x: Tensor):\n", + " pyro.module(\"flow\", flow)\n", + "\n", + " with pyro.plate(\"data\", x.shape[1]): # amortized\n", + " pyro.sample(\"z\", ZukoToPyro(flow(x.transpose(0, 1).flatten(-2))))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## SVI\n", + "\n", + "We train our guide with a standard stochastic variational inference (SVI) pipeline. We use 16 particles to reduce the variance of the ELBO and clip the norm of the gradients to make training more stable." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(0) 209195.08367919922\n", + "(256) -25.225540161132812\n", + "(512) -99.09033203125\n", + "(768) -102.66302490234375\n", + "(1024) -138.8058319091797\n", + "(1280) -92.15625\n", + "(1536) -136.78167724609375\n", + "(1792) -87.76119995117188\n", + "(2048) -116.21714782714844\n", + "(2304) -162.0266571044922\n", + "(2560) -91.13175964355469\n", + "(2816) -164.86270141601562\n", + "(3072) -98.17607116699219\n", + "(3328) -102.58432006835938\n", + "(3584) -151.61912536621094\n", + "(3840) -77.94436645507812\n", + "(4096) -121.82719421386719\n" + ] + } + ], + "source": [ + "pyro.clear_param_store()\n", + "\n", + "svi = SVI(model, guide, optim=ClippedAdam({\"lr\": 1e-3, \"clip_norm\": 10.0}), loss=Trace_ELBO(num_particles=16, vectorize_particles=True))\n", + "\n", + "for step in range(4096 + 1):\n", + " elbo = svi.step(x_star)\n", + "\n", + " if step % 256 == 0:\n", + " print(f'({step})', elbo)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Posterior predictive" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "z = flow(x_star[:, 0].flatten()).sample((4096,))\n", + "x = likelihood(z).sample()\n", + "\n", + "fig = corner(x.numpy())\n", + "\n", + "overplot_points(fig, x_star[:, 0].numpy())" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "z = flow(x_star[:, 1].flatten()).sample((4096,))\n", + "x = likelihood(z).sample()\n", + "\n", + "fig = corner(x.numpy())\n", + "\n", + "overplot_points(fig, x_star[:, 1].numpy())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "pyro", + "language": "python", + "name": "pyro" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/svi_horovod.rst b/pyro/source/tutorial/source/svi_horovod.rst new file mode 100644 index 0000000000000000000000000000000000000000..6689e402976b4097bc5430ccef3211c15acab2e9 --- /dev/null +++ b/pyro/source/tutorial/source/svi_horovod.rst @@ -0,0 +1,24 @@ +Example: distributed training via Horovod +========================================= + +Unlike other examples, this example must be run under horovodrun_, for example + +.. _horovodrun: https://github.com/horovod/horovod/blob/master/docs/running.rst + +.. code-block:: none + + $ horovodrun -np 2 examples/svi_horovod.py + +The only Horovod-specific component of Pyro is the HorovodOptimizer_ class. + +.. _HorovodOptimizer: https://docs.pyro.ai/en/latest/optimization.html#pyro.optim.horovod.HorovodOptimizer + +`View svi_horovod.py on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/examples/svi_horovod.py + +__ github_ + +.. literalinclude:: ../../examples/svi_horovod.py + :language: python + diff --git a/pyro/source/tutorial/source/svi_lightning.rst b/pyro/source/tutorial/source/svi_lightning.rst new file mode 100644 index 0000000000000000000000000000000000000000..0685fb621d43f2c1fb11d03d1ce24f7ddb6f1bff --- /dev/null +++ b/pyro/source/tutorial/source/svi_lightning.rst @@ -0,0 +1,17 @@ +Example: distributed training via PyTorch Lightning +=================================================== + +This script passes argparse arguments to PyTorch Lightning ``Trainer`` automatically_, for example:: + + $ python examples/svi_lightning.py --accelerator gpu --devices 2 --max_epochs 100 --strategy ddp + +.. _automatically: https://pytorch-lightning.readthedocs.io/en/stable/common/trainer.html#trainer-in-python-scripts + +`View svi_lightning.py on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/examples/svi_lightning.py + +__ github_ + +.. literalinclude:: ../../examples/svi_lightning.py + :language: python diff --git a/pyro/source/tutorial/source/svi_part_i.ipynb b/pyro/source/tutorial/source/svi_part_i.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..dcc2b2d63d62323436c0a3a8fa01705aa15b93c7 --- /dev/null +++ b/pyro/source/tutorial/source/svi_part_i.ipynb @@ -0,0 +1,384 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# SVI Part I: An Introduction to Stochastic Variational Inference in Pyro\n", + "\n", + "Pyro has been designed with particular attention paid to supporting stochastic variational inference as a general purpose inference algorithm. Let's see how we go about doing variational inference in Pyro.\n", + "\n", + "## Setup\n", + "\n", + "We're going to assume we've already defined our model in Pyro (for more details on how this is done see [Introduction to Pyro](intro_long.ipynb)).\n", + "As a quick reminder, the model is given as a stochastic function `model(*args, **kwargs)`, which, in the general case takes arguments. The different pieces of `model()` are encoded via the mapping:\n", + "\n", + "1. observations $\\Longleftrightarrow$ `pyro.sample` with the `obs` argument\n", + "2. latent random variables $\\Longleftrightarrow$ `pyro.sample`\n", + "3. parameters $\\Longleftrightarrow$ `pyro.param`\n", + "\n", + "Now let's establish some notation. The model has observations ${\\bf x}$ and latent random variables ${\\bf z}$ as well as parameters $\\theta$. It has a joint probability density of the form \n", + "\n", + "$$p_{\\theta}({\\bf x}, {\\bf z}) = p_{\\theta}({\\bf x}|{\\bf z}) p_{\\theta}({\\bf z})$$\n", + "\n", + "We assume that the various probability distributions $p_i$ that make up $p_{\\theta}({\\bf x}, {\\bf z})$ have the following properties:\n", + "\n", + "1. we can sample from each $p_i$\n", + "2. we can compute the pointwise log pdf $\\log p_i$ \n", + "3. $p_i$ is differentiable w.r.t. the parameters $\\theta$\n", + "\n", + "\n", + "## Model Learning\n", + "\n", + "In this context our criterion for learning a good model will be maximizing the log evidence, i.e. we want to find the value of $\\theta$ given by\n", + "\n", + "$$\\theta_{\\rm{max}} = \\underset{\\theta}{\\operatorname{argmax}} \\log p_{\\theta}({\\bf x})$$\n", + "\n", + "where the log evidence $\\log p_{\\theta}({\\bf x})$ is given by\n", + "\n", + "$$\\log p_{\\theta}({\\bf x}) = \\log \\int\\! d{\\bf z}\\; p_{\\theta}({\\bf x}, {\\bf z})$$\n", + "\n", + "In the general case this is a doubly difficult problem. This is because (even for a fixed $\\theta$) the integral over the latent random variables $\\bf z$ is often intractable. Furthermore, even if we know how to calculate the log evidence for all values of $\\theta$, maximizing the log evidence as a function of $\\theta$ will in general be a difficult non-convex optimization problem. \n", + "\n", + "In addition to finding $\\theta_{\\rm{max}}$, we would like to calculate the posterior over the latent variables $\\bf z$:\n", + "\n", + "$$ p_{\\theta_{\\rm{max}}}({\\bf z} | {\\bf x}) = \\frac{p_{\\theta_{\\rm{max}}}({\\bf x} , {\\bf z})}{\n", + "\\int \\! d{\\bf z}\\; p_{\\theta_{\\rm{max}}}({\\bf x} , {\\bf z}) } $$\n", + "\n", + "Note that the denominator of this expression is the (usually intractable) evidence. Variational inference offers a scheme for finding $\\theta_{\\rm{max}}$ and computing an approximation to the posterior $p_{\\theta_{\\rm{max}}}({\\bf z} | {\\bf x})$. Let's see how that works.\n", + "\n", + "## Guide\n", + "\n", + "The basic idea is that we introduce a parameterized distribution $q_{\\phi}({\\bf z})$, where $\\phi$ are known as the variational parameters. This distribution is called the variational distribution in much of the literature, and in the context of Pyro it's called the **guide** (one syllable instead of nine!). The guide will serve as an approximation to the posterior. We can think of $\\phi$ as parameterizing a space or family of probability distributions. Our goal will be to find the (not necessarily unique) probability distribution in that space that is the best possible approximation to the posterior distribution.\n", + "\n", + "Just like the model, the guide is encoded as a stochastic function `guide()` that contains `pyro.sample` and `pyro.param` statements. It does _not_ contain observed data, since the guide needs to be a properly normalized distribution. Note that Pyro enforces that `model()` and `guide()` have the same call signature, i.e. both callables should take the same arguments. \n", + "\n", + "Since the guide is an approximation to the posterior $p_{\\theta_{\\rm{max}}}({\\bf z} | {\\bf x})$, the guide needs to provide a valid joint probability density over all the latent random variables in the model. Recall that when random variables are specified in Pyro with the primitive statement `pyro.sample()` the first argument denotes the name of the random variable. These names will be used to align the random variables in the model and guide. To be very explicit, if the model contains a random variable `z_1`\n", + "\n", + "```python\n", + "def model():\n", + " pyro.sample(\"z_1\", ...)\n", + "```\n", + "\n", + "then the guide needs to have a matching `sample` statement\n", + "\n", + "```python\n", + "def guide():\n", + " pyro.sample(\"z_1\", ...)\n", + "```\n", + "\n", + "The distributions used in the two cases can be different, but the names must line-up 1-to-1. \n", + "\n", + "Once we've specified a guide (we give some explicit examples below), we're ready to proceed to inference.\n", + "Learning will be setup as an optimization problem where each iteration of training takes a step in $\\theta-\\phi$ space that moves the guide closer to the exact posterior.\n", + "To do this we need to define an appropriate objective function. \n", + "\n", + "## ELBO\n", + "\n", + "A simple derivation (for example see reference [1]) yields what we're after: the evidence lower bound (ELBO). The ELBO, which is a function of both $\\theta$ and $\\phi$, is defined as an expectation w.r.t. to samples from the guide:\n", + "\n", + "$${\\rm ELBO} \\equiv \\mathbb{E}_{q_{\\phi}({\\bf z})} \\left [ \n", + "\\log p_{\\theta}({\\bf x}, {\\bf z}) - \\log q_{\\phi}({\\bf z})\n", + "\\right]$$\n", + "\n", + "By assumption we can compute the log probabilities inside the expectation. And since the guide is assumed to be a parametric distribution we can sample from, we can compute Monte Carlo estimates of this quantity. Crucially, the ELBO is a lower bound to the log evidence, i.e. for all choices of $\\theta$ and $\\phi$ we have that \n", + "\n", + "$$\\log p_{\\theta}({\\bf x}) \\ge {\\rm ELBO} $$\n", + "\n", + "So if we take (stochastic) gradient steps to maximize the ELBO, we will also be pushing the log evidence higher (in expectation). Furthermore, it can be shown that the gap between the ELBO and the log evidence is given by the [Kullback-Leibler divergence](https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence) (KL divergence) between the guide and the posterior:\n", + "\n", + "$$ \\log p_{\\theta}({\\bf x}) - {\\rm ELBO} = \n", + "\\rm{KL}\\!\\left( q_{\\phi}({\\bf z}) \\lVert p_{\\theta}({\\bf z} | {\\bf x}) \\right) $$\n", + "\n", + "This KL divergence is a particular (non-negative) measure of 'closeness' between two distributions. So, for a fixed $\\theta$, as we take steps in $\\phi$ space that increase the ELBO, we decrease the KL divergence between the guide and the posterior, i.e. we move the guide towards the posterior. In the general case we take gradient steps in both $\\theta$ and $\\phi$ space simultaneously so that the guide and model play chase, with the guide tracking a moving posterior $\\log p_{\\theta}({\\bf z} | {\\bf x})$. Perhaps somewhat surprisingly, despite the moving target, this optimization problem can be solved (to a suitable level of approximation) for many different problems.\n", + "\n", + "So at high level variational inference is easy: all we need to do is define a guide and compute gradients of the ELBO. Actually, computing gradients for general model and guide pairs leads to some complications (see the tutorial [SVI Part III](svi_part_iii.ipynb) for a discussion). For the purposes of this tutorial, let's consider that a solved problem and look at the support that Pyro provides for doing variational inference. \n", + "\n", + "## `SVI` Class\n", + "\n", + "In Pyro the machinery for doing variational inference is encapsulated in the [`SVI`](https://docs.pyro.ai/en/stable/inference_algos.html?highlight=svi) class.\n", + "\n", + "The user needs to provide three things: the model, the guide, and an optimizer. We've discussed the model and guide above and we'll discuss the optimizer in some detail below, so let's assume we have all three ingredients at hand. To construct an instance of `SVI` that will do optimization via the ELBO objective, the user writes\n", + "\n", + "```python\n", + "import pyro\n", + "from pyro.infer import SVI, Trace_ELBO\n", + "svi = SVI(model, guide, optimizer, loss=Trace_ELBO())\n", + "```\n", + "\n", + "The `SVI` object provides two methods, `step()` and `evaluate_loss()`, that encapsulate the logic for variational learning and evaluation:\n", + "\n", + "1. The method `step()` takes a single gradient step and returns an estimate of the loss (i.e. minus the ELBO). If provided, the arguments to `step()` are piped to `model()` and `guide()`. \n", + "\n", + "2. The method `evaluate_loss()` returns an estimate of the loss _without_ taking a gradient step. Just like for `step()`, if provided, arguments to `evaluate_loss()` are piped to `model()` and `guide()`.\n", + "\n", + "For the case where the loss is the ELBO, both methods also accept an optional argument `num_particles`, which denotes the number of samples used to compute the loss (in the case of `evaluate_loss`) and the loss and gradient (in the case of `step`). \n", + "\n", + "## Optimizers\n", + "\n", + "In Pyro, the model and guide are allowed to be arbitrary stochastic functions provided that\n", + "\n", + "1. `guide` doesn't contain `pyro.sample` statements with the `obs` argument\n", + "2. `model` and `guide` have the same call signature\n", + "\n", + "This presents some challenges because it means that different executions of `model()` and `guide()` may have quite different behavior, with e.g. certain latent random variables and parameters only appearing some of the time. Indeed parameters may be created dynamically during the course of inference. In other words the space we're doing optimization over, which is parameterized by $\\theta$ and $\\phi$, can grow and change dynamically.\n", + "\n", + "In order to support this behavior, Pyro needs to dynamically generate an optimizer for each parameter the first time it appears during learning. Luckily, PyTorch has a lightweight optimization library (see [torch.optim](http://pytorch.org/docs/master/optim.html)) that can easily be repurposed for the dynamic case. \n", + "\n", + "All of this is controlled by the [`optim.PyroOptim`](https://docs.pyro.ai/en/stable/optimization.html?highlight=optim#pyro.optim.optim.PyroOptim) class, which is basically a thin wrapper around PyTorch optimizers. `PyroOptim` takes two arguments: a constructor for PyTorch optimizers `optim_constructor` and a specification of the optimizer arguments `optim_args`. At high level, in the course of optimization, whenever a new parameter is seen `optim_constructor` is used to instantiate a new optimizer of the given type with arguments given by `optim_args`. \n", + "\n", + "Most users will probably not interact with `PyroOptim` directly and will instead interact with the aliases defined in `optim/__init__.py`. Let's see how that goes. There are two ways to specify the optimizer arguments. In the simpler case, `optim_args` is a _fixed_ dictionary that specifies the arguments used to instantiate PyTorch optimizers for _all_ the parameters:\n", + "\n", + "```python\n", + "from pyro.optim import Adam\n", + "\n", + "adam_params = {\"lr\": 0.005, \"betas\": (0.95, 0.999)}\n", + "optimizer = Adam(adam_params)\n", + "```\n", + "\n", + "The second way to specify the arguments allows for a finer level of control. Here the user must specify a callable that will be invoked by Pyro upon creation of an optimizer for a newly seen parameter. This callable must take the Pyro name of the parameter as an argument.\n", + "This gives the user the ability to, for example, customize learning rates for different parameters. For an example where this sort of level of control is useful, see the [discussion of baselines](svi_part_iii.ipynb). Here's a simple example to illustrate the API:\n", + "\n", + "```python\n", + "from pyro.optim import Adam\n", + "\n", + "def per_param_callable(param_name):\n", + " if param_name == 'my_special_parameter':\n", + " return {\"lr\": 0.010}\n", + " else:\n", + " return {\"lr\": 0.001}\n", + "\n", + "optimizer = Adam(per_param_callable)\n", + "```\n", + "\n", + "This simply tells Pyro to use a learning rate of `0.010` for the Pyro parameter `my_special_parameter` and a learning rate of `0.001` for all other parameters.\n", + "\n", + "## A simple example\n", + "\n", + "We finish with a simple example. You've been given a two-sided coin. You want to determine whether the coin is fair or not, i.e. whether it falls heads or tails with the same frequency. You have a prior belief about the likely fairness of the coin based on two observations:\n", + "\n", + "- it's a standard quarter issued by the US Mint\n", + "- it's a bit banged up from years of use\n", + "\n", + "So while you expect the coin to have been quite fair when it was first produced, you allow for its fairness to have since deviated from a perfect 1:1 ratio. So you wouldn't be surprised if it turned out that the coin preferred heads over tails at a ratio of 11:10. By contrast you would be very surprised if it turned out that the coin preferred heads over tails at a ratio of 5:1—it's not _that_ banged up.\n", + "\n", + "To turn this into a probabilistic model we encode heads and tails as `1`s and `0`s. We encode the fairness of the coin as a real number $f$, where $f$ satisfies $f \\in [0.0, 1.0]$ and $f=0.50$ corresponds to a perfectly fair coin. Our prior belief about $f$ will be encoded by a Beta distribution, specifically $\\rm{Beta}(10,10)$, which is a symmetric probability distribution on the interval $[0.0, 1.0]$ that is peaked at $f=0.5$. " + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/html" + }, + "source": [ + "
Figure 1: The distribution Beta that encodes our prior belief about the fairness of the coin.
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To learn something about the fairness of the coin that is more precise than our somewhat vague prior, we need to do an experiment and collect some data. Let's say we flip the coin 10 times and record the result of each flip. In practice we'd probably want to do more than 10 trials, but hey this is a tutorial.\n", + "\n", + "Assuming we've collected the data in a list `data`, the corresponding model is given by\n", + "\n", + "```python\n", + "import pyro.distributions as dist\n", + "\n", + "def model(data):\n", + " # define the hyperparameters that control the Beta prior\n", + " alpha0 = torch.tensor(10.0)\n", + " beta0 = torch.tensor(10.0)\n", + " # sample f from the Beta prior\n", + " f = pyro.sample(\"latent_fairness\", dist.Beta(alpha0, beta0))\n", + " # loop over the observed data\n", + " for i in range(len(data)):\n", + " # observe datapoint i using the Bernoulli \n", + " # likelihood Bernoulli(f)\n", + " pyro.sample(\"obs_{}\".format(i), dist.Bernoulli(f), obs=data[i])\n", + "```\n", + "\n", + "Here we have a single latent random variable (`'latent_fairness'`), which is distributed according to $\\rm{Beta}(10, 10)$. Conditioned on that random variable, we observe each of the datapoints using a Bernoulli likelihood. Note that each observation is assigned a unique name in Pyro.\n", + "\n", + "Our next task is to define a corresponding guide, i.e. an appropriate variational distribution for the latent random variable $f$. The only real requirement here is that $q(f)$ should be a probability distribution over the range $[0.0, 1.0]$, since $f$ doesn't make sense outside of that range. A simple choice is to use another Beta distribution parameterized by two trainable parameters $\\alpha_q$ and $\\beta_q$. Actually, in this particular case this is the 'right' choice, since conjugacy of the Bernoulli and Beta distributions means that the exact posterior is a Beta distribution. In Pyro we write:\n", + "\n", + "```python\n", + "def guide(data):\n", + " # register the two variational parameters with Pyro.\n", + " alpha_q = pyro.param(\"alpha_q\", torch.tensor(15.0), \n", + " constraint=constraints.positive)\n", + " beta_q = pyro.param(\"beta_q\", torch.tensor(15.0), \n", + " constraint=constraints.positive)\n", + " # sample latent_fairness from the distribution Beta(alpha_q, beta_q)\n", + " pyro.sample(\"latent_fairness\", dist.Beta(alpha_q, beta_q))\n", + "```\n", + "\n", + "There are a few things to note here:\n", + "\n", + "- We've taken care that the names of the random variables line up exactly between the model and guide.\n", + "- `model(data)` and `guide(data)` take the same arguments.\n", + "- The variational parameters are `torch.tensor`s. The `requires_grad` flag is automatically set to `True` by `pyro.param`.\n", + "- We use `constraint=constraints.positive` to ensure that `alpha_q` and `beta_q` remain non-negative during optimization. Under the hood an exponential transform ensures positivity.\n", + "\n", + "Now we can proceed to do stochastic variational inference. \n", + "\n", + "```python\n", + "# set up the optimizer\n", + "adam_params = {\"lr\": 0.0005, \"betas\": (0.90, 0.999)}\n", + "optimizer = Adam(adam_params)\n", + "\n", + "# setup the inference algorithm\n", + "svi = SVI(model, guide, optimizer, loss=Trace_ELBO())\n", + "\n", + "n_steps = 5000\n", + "# do gradient steps\n", + "for step in range(n_steps):\n", + " svi.step(data)\n", + "``` \n", + "\n", + "Note that in the `step()` method we pass in the data, which then get passed to the model and guide. \n", + "\n", + "The only thing we're missing at this point is some data. So let's create some data and assemble all the code snippets above into a complete script:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import math\n", + "import os\n", + "import torch\n", + "import torch.distributions.constraints as constraints\n", + "import pyro\n", + "from pyro.optim import Adam\n", + "from pyro.infer import SVI, Trace_ELBO\n", + "import pyro.distributions as dist\n", + "\n", + "# this is for running the notebook in our testing framework\n", + "smoke_test = ('CI' in os.environ)\n", + "n_steps = 2 if smoke_test else 2000\n", + "\n", + "assert pyro.__version__.startswith('1.9.1')\n", + "\n", + "# clear the param store in case we're in a REPL\n", + "pyro.clear_param_store()\n", + "\n", + "# create some data with 6 observed heads and 4 observed tails\n", + "data = []\n", + "for _ in range(6):\n", + " data.append(torch.tensor(1.0))\n", + "for _ in range(4):\n", + " data.append(torch.tensor(0.0))\n", + "\n", + "def model(data):\n", + " # define the hyperparameters that control the Beta prior\n", + " alpha0 = torch.tensor(10.0)\n", + " beta0 = torch.tensor(10.0)\n", + " # sample f from the Beta prior\n", + " f = pyro.sample(\"latent_fairness\", dist.Beta(alpha0, beta0))\n", + " # loop over the observed data\n", + " for i in range(len(data)):\n", + " # observe datapoint i using the ernoulli likelihood\n", + " pyro.sample(\"obs_{}\".format(i), dist.Bernoulli(f), obs=data[i])\n", + "\n", + "def guide(data):\n", + " # register the two variational parameters with Pyro\n", + " # - both parameters will have initial value 15.0. \n", + " # - because we invoke constraints.positive, the optimizer \n", + " # will take gradients on the unconstrained parameters\n", + " # (which are related to the constrained parameters by a log)\n", + " alpha_q = pyro.param(\"alpha_q\", torch.tensor(15.0), \n", + " constraint=constraints.positive)\n", + " beta_q = pyro.param(\"beta_q\", torch.tensor(15.0), \n", + " constraint=constraints.positive)\n", + " # sample latent_fairness from the distribution Beta(alpha_q, beta_q)\n", + " pyro.sample(\"latent_fairness\", dist.Beta(alpha_q, beta_q))\n", + "\n", + "# setup the optimizer\n", + "adam_params = {\"lr\": 0.0005, \"betas\": (0.90, 0.999)}\n", + "optimizer = Adam(adam_params)\n", + "\n", + "# setup the inference algorithm\n", + "svi = SVI(model, guide, optimizer, loss=Trace_ELBO())\n", + "\n", + "# do gradient steps\n", + "for step in range(n_steps):\n", + " svi.step(data)\n", + " if step % 100 == 0:\n", + " print('.', end='')\n", + "\n", + "# grab the learned variational parameters\n", + "alpha_q = pyro.param(\"alpha_q\").item()\n", + "beta_q = pyro.param(\"beta_q\").item()\n", + "\n", + "# here we use some facts about the Beta distribution\n", + "# compute the inferred mean of the coin's fairness\n", + "inferred_mean = alpha_q / (alpha_q + beta_q)\n", + "# compute inferred standard deviation\n", + "factor = beta_q / (alpha_q * (1.0 + alpha_q + beta_q))\n", + "inferred_std = inferred_mean * math.sqrt(factor)\n", + "\n", + "print(\"\\nBased on the data and our prior belief, the fairness \" +\n", + " \"of the coin is %.3f +- %.3f\" % (inferred_mean, inferred_std))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sample output:\n", + "\n", + "```\n", + "based on the data and our prior belief, the fairness of the coin is 0.532 +- 0.090\n", + "```\n", + "\n", + "This estimate is to be compared to the exact posterior mean, which in this case is given by $16/30 = 0.5\\bar{3}$.\n", + "Note that the final estimate of the fairness of the coin is in between the the fairness preferred by the prior (namely $0.50$) and the fairness suggested by the raw empirical frequencies ($6/10 = 0.60$). " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## References\n", + "\n", + "[1] `Automated Variational Inference in Probabilistic Programming`,\n", + "
    \n", + "David Wingate, Theo Weber\n", + "\n", + "[2] `Black Box Variational Inference`,
    \n", + "Rajesh Ranganath, Sean Gerrish, David M. Blei\n", + "\n", + "[3] `Auto-Encoding Variational Bayes`,
    \n", + "Diederik P Kingma, Max Welling\n", + "\n", + "[4] `Variational Inference: A Review for Statisticians`,
    \n", + "David M. Blei, Alp Kucukelbir, Jon D. McAuliffe" + ] + } + ], + "metadata": { + "celltoolbar": "Raw Cell Format", + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/svi_part_ii.ipynb b/pyro/source/tutorial/source/svi_part_ii.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..b442190837b09c2d8c9bc8a7edfb7373cc8b8d79 --- /dev/null +++ b/pyro/source/tutorial/source/svi_part_ii.ipynb @@ -0,0 +1,236 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# SVI Part II: Conditional Independence, Subsampling, and Amortization\n", + "\n", + "## The Goal: Scaling SVI to Large Datasets\n", + "\n", + "For a model with $N$ observations, running the `model` and `guide` and constructing the ELBO involves evaluating log pdf's whose complexity scales badly with $N$. This is a problem if we want to scale to large datasets. Luckily, the ELBO objective naturally supports subsampling provided that our model/guide have some conditional independence structure that we can take advantage of. For example, in the case that the observations are conditionally independent given the latents, the log likelihood term in the ELBO can be approximated with\n", + "\n", + "$$ \\sum_{i=1}^N \\log p({\\bf x}_i | {\\bf z}) \\approx \\frac{N}{M}\n", + "\\sum_{i\\in{\\mathcal{I}_M}} \\log p({\\bf x}_i | {\\bf z}) $$\n", + "\n", + "where $\\mathcal{I}_M$ is a mini-batch of indices of size $M$ with $M    \n", + "Matthew D. Hoffman, David M. Blei, Chong Wang, John Paisley\n", + "\n", + "[2] `Auto-Encoding Variational Bayes`,
    \n", + "Diederik P Kingma, Max Welling" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/svi_part_iii.ipynb b/pyro/source/tutorial/source/svi_part_iii.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..2964115c7867f92a54b1c7322ad52c4f9db39921 --- /dev/null +++ b/pyro/source/tutorial/source/svi_part_iii.ipynb @@ -0,0 +1,487 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# SVI Part III: ELBO Gradient Estimators\n", + "\n", + "## Setup\n", + "\n", + "We've defined a Pyro model with observations ${\\bf x}$ and latents ${\\bf z}$ of the form $p_{\\theta}({\\bf x}, {\\bf z}) = p_{\\theta}({\\bf x}|{\\bf z}) p_{\\theta}({\\bf z})$. We've also defined a Pyro guide (i.e. a variational distribution) of the form $q_{\\phi}({\\bf z})$. Here ${\\theta}$ and $\\phi$ are variational parameters for the model and guide, respectively. (In particular these are _not_ random variables that call for a Bayesian treatment).\n", + "\n", + "We'd like to maximize the log evidence $\\log p_{\\theta}({\\bf x})$ by maximizing the ELBO (the evidence lower bound) given by \n", + "\n", + "$${\\rm ELBO} \\equiv \\mathbb{E}_{q_{\\phi}({\\bf z})} \\left [ \n", + "\\log p_{\\theta}({\\bf x}, {\\bf z}) - \\log q_{\\phi}({\\bf z})\n", + "\\right]$$\n", + "\n", + "To do this we're going to take (stochastic) gradient steps on the ELBO in the parameter space $\\{ \\theta, \\phi \\}$ (see references [1,2] for early work on this approach). So we need to be able to compute unbiased estimates of \n", + "\n", + "$$\\nabla_{\\theta,\\phi} {\\rm ELBO} = \\nabla_{\\theta,\\phi}\\mathbb{E}_{q_{\\phi}({\\bf z})} \\left [ \n", + "\\log p_{\\theta}({\\bf x}, {\\bf z}) - \\log q_{\\phi}({\\bf z})\n", + "\\right]$$\n", + "\n", + "How do we do this for general stochastic functions `model()` and `guide()`? To simplify notation let's generalize our discussion a bit and ask how we can compute gradients of expectations of an arbitrary cost function $f({\\bf z})$. Let's also drop any distinction between $\\theta$ and $\\phi$. So we want to compute\n", + "\n", + "$$\\nabla_{\\phi}\\mathbb{E}_{q_{\\phi}({\\bf z})} \\left [\n", + "f_{\\phi}({\\bf z}) \\right]$$\n", + "\n", + "Let's start with the easiest case.\n", + "\n", + "## Easy Case: Reparameterizable Random Variables\n", + "\n", + "Suppose that we can reparameterize things such that \n", + "\n", + "$$\\mathbb{E}_{q_{\\phi}({\\bf z})} \\left [f_{\\phi}({\\bf z}) \\right]\n", + "=\\mathbb{E}_{q({\\bf \\epsilon})} \\left [f_{\\phi}(g_{\\phi}({\\bf \\epsilon})) \\right]$$\n", + "\n", + "Crucially we've moved all the $\\phi$ dependence inside of the expectation; $q({\\bf \\epsilon})$ is a fixed distribution with no dependence on $\\phi$. This kind of reparameterization can be done for many distributions (e.g. the normal distribution); see reference [3] for a discussion. In this case we can pass the gradient straight through the expectation to get\n", + "\n", + "$$\\nabla_{\\phi}\\mathbb{E}_{q({\\bf \\epsilon})} \\left [f_{\\phi}(g_{\\phi}({\\bf \\epsilon})) \\right]=\n", + "\\mathbb{E}_{q({\\bf \\epsilon})} \\left [\\nabla_{\\phi}f_{\\phi}(g_{\\phi}({\\bf \\epsilon})) \\right]$$\n", + "\n", + "Assuming $f(\\cdot)$ and $g(\\cdot)$ are sufficiently smooth, we can now get unbiased estimates of the gradient of interest by taking a Monte Carlo estimate of this expectation.\n", + "\n", + "## Tricky Case: Non-reparameterizable Random Variables\n", + "\n", + "What if we can't do the above reparameterization? Unfortunately this is the case for many distributions of interest, for example all discrete distributions. In this case our estimator takes a bit more complicated form.\n", + "\n", + "We begin by expanding the gradient of interest as\n", + "\n", + "$$\\nabla_{\\phi}\\mathbb{E}_{q_{\\phi}({\\bf z})} \\left [\n", + "f_{\\phi}({\\bf z}) \\right]= \n", + "\\nabla_{\\phi} \\int d{\\bf z} \\; q_{\\phi}({\\bf z}) f_{\\phi}({\\bf z})$$\n", + "\n", + "and use the chain rule to write this as \n", + "\n", + "$$ \\int d{\\bf z} \\; \\left \\{ (\\nabla_{\\phi} q_{\\phi}({\\bf z})) f_{\\phi}({\\bf z}) + q_{\\phi}({\\bf z})(\\nabla_{\\phi} f_{\\phi}({\\bf z}))\\right \\} $$\n", + "\n", + "At this point we run into a problem. We know how to generate samples from $q(\\cdot)$—we just run the guide forward—but $\\nabla_{\\phi} q_{\\phi}({\\bf z})$ isn't even a valid probability density. So we need to massage this formula so that it's in the form of an expectation w.r.t. $q(\\cdot)$. This is easily done using the identity\n", + "\n", + "$$ \\nabla_{\\phi} q_{\\phi}({\\bf z}) = \n", + "q_{\\phi}({\\bf z})\\nabla_{\\phi} \\log q_{\\phi}({\\bf z})$$\n", + "\n", + "which allows us to rewrite the gradient of interest as \n", + "\n", + "$$\\mathbb{E}_{q_{\\phi}({\\bf z})} \\left [\n", + "(\\nabla_{\\phi} \\log q_{\\phi}({\\bf z})) f_{\\phi}({\\bf z}) + \\nabla_{\\phi} f_{\\phi}({\\bf z})\\right]$$\n", + "\n", + "This form of the gradient estimator—variously known as the REINFORCE estimator or the score function estimator or the likelihood ratio estimator—is amenable to simple Monte Carlo estimation.\n", + "\n", + "Note that one way to package this result (which is convenient for implementation) is to introduce a surrogate objective function\n", + "\n", + "$${\\rm surrogate \\;objective} \\equiv\n", + "\\log q_{\\phi}({\\bf z}) \\overline{f_{\\phi}({\\bf z})} + f_{\\phi}({\\bf z})$$ \n", + "\n", + "Here the bar indicates that the term is held constant (i.e. it is not to be differentiated w.r.t. $\\phi$). To get a (single-sample) Monte Carlo gradient estimate, we sample the latent random variables, compute the surrogate objective, and differentiate. The result is an unbiased estimate of $\\nabla_{\\phi}\\mathbb{E}_{q_{\\phi}({\\bf z})} \\left [\n", + "f_{\\phi}({\\bf z}) \\right]$. In equations:\n", + "\n", + "$$\\nabla_{\\phi} {\\rm ELBO} = \\mathbb{E}_{q_{\\phi}({\\bf z})} \\left [ \n", + "\\nabla_{\\phi} ({\\rm surrogate \\; objective}) \\right]$$\n", + "\n", + "## Variance or Why I Wish I Was Doing MLE Deep Learning\n", + "\n", + "We now have a general recipe for an unbiased gradient estimator of expectations of cost functions. Unfortunately, in the more general case where our $q(\\cdot)$ includes non-reparameterizable random variables, this estimator tends to have high variance. Indeed in many cases of interest the variance is so high that the estimator is effectively unusable. So we need strategies to reduce variance (for a discussion see reference [4]). We're going to pursue two strategies. The first strategy takes advantage of the particular structure of the cost function $f(\\cdot)$. The second strategy effectively introduces a way to reduce variance by using information from previous estimates of \n", + "$\\mathbb{E}_{q_{\\phi}({\\bf z})} [ f_{\\phi}({\\bf z})]$. As such it is somewhat analogous to using momentum in stochastic gradient descent. \n", + "\n", + "### Reducing Variance via Dependency Structure\n", + "\n", + "In the above discussion we stuck to a general cost function $f_{\\phi}({\\bf z})$. We could continue in this vein (the approach we're about to discuss is applicable in the general case) but for concreteness let's zoom back in. In the case of stochastic variational inference, we're interested in a particular cost function of the form

\n", + "\n", + "$$\\log p_{\\theta}({\\bf x} | {\\rm Pa}_p ({\\bf x})) +\n", + "\\sum_i \\log p_{\\theta}({\\bf z}_i | {\\rm Pa}_p ({\\bf z}_i)) \n", + "- \\sum_i \\log q_{\\phi}({\\bf z}_i | {\\rm Pa}_q ({\\bf z}_i))$$\n", + "\n", + "where we've broken the log ratio $\\log p_{\\theta}({\\bf x}, {\\bf z})/q_{\\phi}({\\bf z})$ into an observation log likelihood piece and a sum over the different latent random variables $\\{{\\bf z}_i \\}$. We've also introduced the notation \n", + "${\\rm Pa}_p (\\cdot)$ and ${\\rm Pa}_q (\\cdot)$ to denote the parents of a given random variable in the model and in the guide, respectively. (The reader might worry what the appropriate notion of dependency would be in the case of general stochastic functions; here we simply mean regular ol' dependency within a single execution trace). The point is that different terms in the cost function have different dependencies on the random variables $\\{ {\\bf z}_i \\}$ and this is something we can leverage.\n", + "\n", + "To make a long story short, for any non-reparameterizable latent random variable ${\\bf z}_i$ the surrogate objective is going to have a term \n", + "\n", + "$$\\log q_{\\phi}({\\bf z}_i) \\overline{f_{\\phi}({\\bf z})} $$\n", + "\n", + "It turns out that we can remove some of the terms in $\\overline{f_{\\phi}({\\bf z})}$ and still get an unbiased gradient estimator; furthermore, doing so will generally decrease the variance. In particular (see reference [4] for details) we can remove any terms in $\\overline{f_{\\phi}({\\bf z})}$ that are not downstream of the latent variable ${\\bf z}_i$ (downstream w.r.t. to the dependency structure of the guide). Note that this general trick—where certain random variables are dealt with analytically to reduce variance—often goes under the name of Rao-Blackwellization.\n", + "\n", + "In Pyro, all of this logic is taken care of automatically by the `SVI` class. In particular as long as we use a `TraceGraph_ELBO` loss, Pyro will keep track of the dependency structure within the execution traces of the model and guide and construct a surrogate objective that has all the unnecessary terms removed:\n", + "\n", + "```python\n", + "svi = SVI(model, guide, optimizer, TraceGraph_ELBO())\n", + "```\n", + "\n", + "Note that leveraging this dependency information might have small computation overhead, so `TraceGraph_ELBO` should only be used in the case where your model has non-reparameterizable random variables; in most applications `Trace_ELBO` suffices." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### An Example with Rao-Blackwellization:\n", + "\n", + "Suppose we have a gaussian mixture model with $K$ components. For each data point we: (i) first sample the component distribution $k \\in [1,...,K]$; and (ii) observe the data point using the $k^{\\rm th}$ component distribution. The simplest way to write down a model of this sort is as follows:\n", + "\n", + "```python\n", + "ks = pyro.sample(\"k\", dist.Categorical(probs)\n", + " .to_event(1))\n", + "pyro.sample(\"obs\", dist.Normal(locs[ks], scale)\n", + " .to_event(1),\n", + " obs=data)\n", + "```\n", + "\n", + "Since the user hasn't taken care to mark any of the conditional independencies in the model, the gradient estimator constructed by Pyro's `SVI` class is unable to take advantage of Rao-Blackwellization, with the result that the gradient estimator will tend to suffer from high variance. To address this problem the user needs to explicitly mark the conditional independence. Happily, this is not much work:\n", + "\n", + "\n", + "```python\n", + "# mark conditional independence \n", + "# (assumed to be along the rightmost tensor dimension)\n", + "with pyro.plate(\"foo\", data.size(-1)):\n", + " ks = pyro.sample(\"k\", dist.Categorical(probs))\n", + " pyro.sample(\"obs\", dist.Normal(locs[ks], scale),\n", + " obs=data)\n", + "```\n", + "\n", + "That's all there is to it." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Aside: Dependency tracking in Pyro\n", + "\n", + "Finally, a word about dependency tracking. Pyro uses the concept of provenance for tracking dependency within a stochastic function that includes arbitrary Python code (see reference [5]). In the programming language theory, the provenance of a variable refers to the history of variables or computations that contributed to its value. The simple example below demonstrates how provenance is tracked through PyTorch ops in Pyro, where provenance is a user-defined frozenset of objects:\n", + "\n", + "```python\n", + "from pyro.ops.provenance import get_provenance, track_provenance\n", + "\n", + "a = track_provenance(torch.randn(3), frozenset({\"a\"}))\n", + "b = track_provenance(torch.randn(3), frozenset({\"b\"}))\n", + "c = torch.randn(3) # no provenance information\n", + "\n", + "# For a unary operation, the provenance of the output tensor\n", + "# equals the provenace of the input tensor\n", + "assert get_provenance(a.exp()) == frozenset({\"a\"})\n", + "# In general, the provenance of the output tensors of any op\n", + "# is the union of provenances of input tensors.\n", + "assert get_provenance(a * (b + c)) == frozenset({\"a\", \"b\"})\n", + "``` \n", + "\n", + "This concept is utilized by `TraceGraph_ELBO` to trace the fine-grained dynamic dependency information on _non-reparameterizable_ random variables through intermediate computations as they come together to form a log-likelihood. Internally, non-reparameterizable sample sites are tracked using [TrackNonReparam](https://docs.pyro.ai/en/stable/inference_algos.html#pyro.infer.tracegraph_elbo.TrackNonReparam) messenger:\n", + "\n", + "```python\n", + "def model():\n", + " probs_a = torch.tensor([0.3, 0.7])\n", + " probs_b = torch.tensor([[0.1, 0.9], [0.8, 0.2]])\n", + " probs_c = torch.tensor([[0.5, 0.5], [0.6, 0.4]])\n", + " a = pyro.sample(\"a\", dist.Categorical(probs_a))\n", + " b = pyro.sample(\"b\", dist.Categorical(probs_b[a]))\n", + " pyro.sample(\"c\", dist.Categorical(probs_c[b]), obs=torch.tensor(0))\n", + "\n", + "with TrackNonReparam():\n", + " model_tr = trace(model).get_trace()\n", + "model_tr.compute_log_prob()\n", + "\n", + "assert get_provenance(model_tr.nodes[\"a\"][\"log_prob\"]) == frozenset({'a'})\n", + "assert get_provenance(model_tr.nodes[\"b\"][\"log_prob\"]) == frozenset({'b', 'a'})\n", + "assert get_provenance(model_tr.nodes[\"c\"][\"log_prob\"]) == frozenset({'b', 'a'})\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Reducing Variance with Data-Dependent Baselines\n", + "\n", + "The second strategy for reducing variance in our ELBO gradient estimator goes under the name of baselines (see e.g. reference [6]). It actually makes use of the same bit of math that underlies the variance reduction strategy discussed above, except now instead of removing terms we're going to add terms. Basically, instead of removing terms with zero expectation that tend to _contribute_ to the variance, we're going to add specially chosen terms with zero expectation that work to _reduce_ the variance. As such, this is a control variate strategy.\n", + "\n", + "In more detail, the idea is to take advantage of the fact that for any constant $b$, the following identity holds\n", + "\n", + "$$\\mathbb{E}_{q_{\\phi}({\\bf z})} \\left [\\nabla_{\\phi}\n", + "(\\log q_{\\phi}({\\bf z}) \\times b) \\right]=0$$\n", + "\n", + "This follows since $q(\\cdot)$ is normalized:\n", + "\n", + "$$\\mathbb{E}_{q_{\\phi}({\\bf z})} \\left [\\nabla_{\\phi}\n", + "\\log q_{\\phi}({\\bf z}) \\right]=\n", + " \\int \\!d{\\bf z} \\; q_{\\phi}({\\bf z}) \\nabla_{\\phi}\n", + "\\log q_{\\phi}({\\bf z})=\n", + " \\int \\! d{\\bf z} \\; \\nabla_{\\phi} q_{\\phi}({\\bf z})=\n", + "\\nabla_{\\phi} \\int \\! d{\\bf z} \\; q_{\\phi}({\\bf z})=\\nabla_{\\phi} 1 = 0$$\n", + "\n", + "What this means is that we can replace any term\n", + "\n", + "$$\\log q_{\\phi}({\\bf z}_i) \\overline{f_{\\phi}({\\bf z})} $$\n", + "\n", + "in our surrogate objective with\n", + "\n", + "$$\\log q_{\\phi}({\\bf z}_i) \\left(\\overline{f_{\\phi}({\\bf z})}-b\\right) $$\n", + "\n", + "Doing so doesn't affect the mean of our gradient estimator but it does affect the variance. If we choose $b$ wisely, we can hope to reduce the variance. In fact, $b$ need not be a constant: it can depend on any of the random choices upstream (or sidestream) of ${\\bf z}_i$.\n", + "\n", + "#### Baselines in Pyro\n", + "\n", + "There are several ways the user can instruct Pyro to use baselines in the context of stochastic variational inference. Since baselines can be attached to any non-reparameterizable random variable, the current baseline interface is at the level of the `pyro.sample` statement. In particular the baseline interface makes use of an argument `baseline`, which is a dictionary that specifies baseline options. Note that it only makes sense to specify baselines for sample statements within the guide (and not in the model).\n", + "\n", + "##### Decaying Average Baseline\n", + "\n", + "The simplest baseline is constructed from a running average of recent samples of $\\overline{f_{\\phi}({\\bf z})}$. In Pyro this kind of baseline can be invoked as follows\n", + "\n", + "```python\n", + "z = pyro.sample(\"z\", dist.Bernoulli(...), \n", + " infer=dict(baseline={'use_decaying_avg_baseline': True,\n", + " 'baseline_beta': 0.95}))\n", + "```\n", + "\n", + "The optional argument `baseline_beta` specifies the decay rate of the decaying average (default value: `0.90`).\n", + "\n", + "#### Neural Baselines\n", + "\n", + "In some cases a decaying average baseline works well. In others using a baseline that depends on upstream randomness is crucial for getting good variance reduction. A powerful approach for constructing such a baseline is to use a neural network that can be adapted during the course of learning. Pyro provides two ways to specify such a baseline (for an extended example see the [AIR tutorial](air.ipynb)).\n", + "\n", + "First the user needs to decide what inputs the baseline is going to consume (e.g. the current datapoint under consideration or the previously sampled random variable). Then the user needs to construct a `nn.Module` that encapsulates the baseline computation. This might look something like\n", + "\n", + "```python\n", + "class BaselineNN(nn.Module):\n", + " def __init__(self, dim_input, dim_hidden):\n", + " super().__init__()\n", + " self.linear = nn.Linear(dim_input, dim_hidden)\n", + " # ... finish initialization ...\n", + "\n", + " def forward(self, x):\n", + " hidden = self.linear(x)\n", + " # ... do more computations ...\n", + " return baseline\n", + "```\n", + "\n", + "Then, assuming the BaselineNN object `baseline_module` has been initialized somewhere else, in the guide we'll have something like\n", + "\n", + "```python\n", + "def guide(x): # here x is the current mini-batch of data\n", + " pyro.module(\"my_baseline\", baseline_module)\n", + " # ... other computations ...\n", + " z = pyro.sample(\"z\", dist.Bernoulli(...), \n", + " infer=dict(baseline={'nn_baseline': baseline_module,\n", + " 'nn_baseline_input': x}))\n", + "```\n", + "\n", + "Here the argument `nn_baseline` tells Pyro which `nn.Module` to use to construct the baseline. On the backend the argument `nn_baseline_input` is fed into the forward method of the module to compute the baseline $b$. Note that the baseline module needs to be registered with Pyro with a `pyro.module` call so that Pyro is aware of the trainable parameters within the module.\n", + "\n", + "Under the hood Pyro constructs a loss of the form \n", + "\n", + "$${\\rm baseline\\; loss} \\equiv\\left(\\overline{f_{\\phi}({\\bf z})} - b \\right)^2$$\n", + "\n", + "which is used to adapt the parameters of the neural network. There's no theorem that suggests this is the optimal loss function to use in this context (it's not), but in practice it can work pretty well. Just as for the decaying average baseline, the idea is that a baseline that can track the mean $\\overline{f_{\\phi}({\\bf z})}$ will help reduce the variance. Under the hood `SVI` takes one step on the baseline loss in conjunction with a step on the ELBO. \n", + "\n", + "Note that in practice it can be important to use a different set of learning hyperparameters (e.g. a higher learning rate) for baseline parameters. In Pyro this can be done as follows:\n", + "\n", + "```python\n", + "def per_param_args(param_name):\n", + " if 'baseline' in param_name:\n", + " return {\"lr\": 0.010}\n", + " else:\n", + " return {\"lr\": 0.001}\n", + " \n", + "optimizer = optim.Adam(per_param_args)\n", + "```\n", + "\n", + "Note that in order for the overall procedure to be correct the baseline parameters should only be optimized through the baseline loss. Similarly the model and guide parameters should only be optimized through the ELBO. To ensure that this is the case under the hood `SVI` detaches the baseline $b$ that enters the ELBO from the autograd graph. Also, since the inputs to the neural baseline may depend on the parameters of the model and guide, the inputs are also detached from the autograd graph before they are fed into the neural network. \n", + "\n", + "Finally, there is an alternate way for the user to specify a neural baseline. Simply use the argument `baseline_value`:\n", + "\n", + "```python\n", + "b = # do baseline computation\n", + "z = pyro.sample(\"z\", dist.Bernoulli(...), \n", + " infer=dict(baseline={'baseline_value': b}))\n", + "```\n", + "\n", + "This works as above, except in this case it's the user's responsibility to make sure that any autograd tape connecting $b$ to the parameters of the model and guide has been cut. Or to say the same thing in language more familiar to PyTorch users, any inputs to $b$ that depend on $\\theta$ or $\\phi$ need to be detached from the autograd graph with `detach()` statements.\n", + "\n", + "#### A complete example with baselines\n", + "\n", + "Recall that in the [first SVI tutorial](svi_part_i.ipynb) we considered a bernoulli-beta model for coin flips. Because the beta random variable is non-reparameterizable (or rather not easily reparameterizable), the corresponding ELBO gradients can be quite noisy. In that context we dealt with this problem by using a Beta distribution that provides (approximate) reparameterized gradients. Here we showcase how a simple decaying average baseline can reduce the variance in the case where the Beta distribution is treated as non-reparameterized (so that the ELBO gradient estimator is of the score function type). While we're at it, we also use `plate` to write our model in a fully vectorized manner.\n", + "\n", + "Instead of directly comparing gradient variances, we're going to see how many steps it takes for SVI to converge. Recall that for this particular model (because of conjugacy) we can compute the exact posterior. So to assess the utility of baselines in this context, we setup the following simple experiment. We initialize the guide at a specified set of variational parameters. We then do SVI until the variational parameters have gotten to within a fixed tolerance of the parameters of the exact posterior. We do this both with and without the decaying average baseline. We then compare the number of gradient steps we needed in the two cases. Here's the complete code:\n", + "\n", + "(_Since apart from the use of_ `plate` _and_ `use_decaying_avg_baseline`, _this code is very similar to the code in parts I and II of the SVI tutorial, we're not going to go through the code line by line._)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import torch\n", + "import torch.distributions.constraints as constraints\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "# Pyro also has a reparameterized Beta distribution so we import\n", + "# the non-reparameterized version to make our point\n", + "from pyro.distributions.testing.fakes import NonreparameterizedBeta\n", + "import pyro.optim as optim\n", + "from pyro.infer import SVI, TraceGraph_ELBO\n", + "import sys\n", + "\n", + "assert pyro.__version__.startswith('1.9.1')\n", + "\n", + "# this is for running the notebook in our testing framework\n", + "smoke_test = ('CI' in os.environ)\n", + "max_steps = 2 if smoke_test else 10000\n", + "\n", + "\n", + "def param_abs_error(name, target):\n", + " return torch.sum(torch.abs(target - pyro.param(name))).item()\n", + "\n", + "\n", + "class BernoulliBetaExample:\n", + " def __init__(self, max_steps):\n", + " # the maximum number of inference steps we do\n", + " self.max_steps = max_steps\n", + " # the two hyperparameters for the beta prior\n", + " self.alpha0 = 10.0\n", + " self.beta0 = 10.0\n", + " # the dataset consists of six 1s and four 0s\n", + " self.data = torch.zeros(10)\n", + " self.data[0:6] = torch.ones(6)\n", + " self.n_data = self.data.size(0)\n", + " # compute the alpha parameter of the exact beta posterior\n", + " self.alpha_n = self.data.sum() + self.alpha0\n", + " # compute the beta parameter of the exact beta posterior\n", + " self.beta_n = - self.data.sum() + torch.tensor(self.beta0 + self.n_data)\n", + " # initial values of the two variational parameters\n", + " self.alpha_q_0 = 15.0\n", + " self.beta_q_0 = 15.0\n", + "\n", + " def model(self, use_decaying_avg_baseline):\n", + " # sample `latent_fairness` from the beta prior\n", + " f = pyro.sample(\"latent_fairness\", dist.Beta(self.alpha0, self.beta0))\n", + " # use plate to indicate that the observations are\n", + " # conditionally independent given f and get vectorization\n", + " with pyro.plate(\"data_plate\"):\n", + " # observe all ten datapoints using the bernoulli likelihood\n", + " pyro.sample(\"obs\", dist.Bernoulli(f), obs=self.data)\n", + "\n", + " def guide(self, use_decaying_avg_baseline):\n", + " # register the two variational parameters with pyro\n", + " alpha_q = pyro.param(\"alpha_q\", torch.tensor(self.alpha_q_0),\n", + " constraint=constraints.positive)\n", + " beta_q = pyro.param(\"beta_q\", torch.tensor(self.beta_q_0),\n", + " constraint=constraints.positive)\n", + " # sample f from the beta variational distribution\n", + " baseline_dict = {'use_decaying_avg_baseline': use_decaying_avg_baseline,\n", + " 'baseline_beta': 0.90}\n", + " # note that the baseline_dict specifies whether we're using\n", + " # decaying average baselines or not\n", + " pyro.sample(\"latent_fairness\", NonreparameterizedBeta(alpha_q, beta_q),\n", + " infer=dict(baseline=baseline_dict))\n", + "\n", + " def do_inference(self, use_decaying_avg_baseline, tolerance=0.80):\n", + " # clear the param store in case we're in a REPL\n", + " pyro.clear_param_store()\n", + " # setup the optimizer and the inference algorithm\n", + " optimizer = optim.Adam({\"lr\": .0005, \"betas\": (0.93, 0.999)})\n", + " svi = SVI(self.model, self.guide, optimizer, loss=TraceGraph_ELBO())\n", + " print(\"Doing inference with use_decaying_avg_baseline=%s\" % use_decaying_avg_baseline)\n", + "\n", + " # do up to this many steps of inference\n", + " for k in range(self.max_steps):\n", + " svi.step(use_decaying_avg_baseline)\n", + " if k % 100 == 0:\n", + " print('.', end='')\n", + " sys.stdout.flush()\n", + "\n", + " # compute the distance to the parameters of the true posterior\n", + " alpha_error = param_abs_error(\"alpha_q\", self.alpha_n)\n", + " beta_error = param_abs_error(\"beta_q\", self.beta_n)\n", + "\n", + " # stop inference early if we're close to the true posterior\n", + " if alpha_error < tolerance and beta_error < tolerance:\n", + " break\n", + "\n", + " print(\"\\nDid %d steps of inference.\" % k)\n", + " print((\"Final absolute errors for the two variational parameters \" +\n", + " \"were %.4f & %.4f\") % (alpha_error, beta_error))\n", + "\n", + "# do the experiment\n", + "bbe = BernoulliBetaExample(max_steps=max_steps)\n", + "bbe.do_inference(use_decaying_avg_baseline=True)\n", + "bbe.do_inference(use_decaying_avg_baseline=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Sample output:**\n", + "```\n", + "Doing inference with use_decaying_avg_baseline=True\n", + "....................\n", + "Did 1932 steps of inference.\n", + "Final absolute errors for the two variational parameters were 0.7997 & 0.0800\n", + "Doing inference with use_decaying_avg_baseline=False\n", + "..................................................\n", + "Did 4908 steps of inference.\n", + "Final absolute errors for the two variational parameters were 0.7991 & 0.2532\n", + "```\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For this particular run we can see that baselines roughly halved the number of steps of SVI we needed to do. The results are stochastic and will vary from run to run, but this is an encouraging result. This is a pretty contrived example, but for certain model and guide pairs, baselines can provide a substantial win. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## References\n", + "\n", + "[1] `Automated Variational Inference in Probabilistic Programming`,\n", + "
    \n", + "David Wingate, Theo Weber\n", + "\n", + "[2] `Black Box Variational Inference`,
    \n", + "Rajesh Ranganath, Sean Gerrish, David M. Blei\n", + "\n", + "[3] `Auto-Encoding Variational Bayes`,
    \n", + "Diederik P Kingma, Max Welling\n", + "\n", + "[4] `Gradient Estimation Using Stochastic Computation Graphs`,\n", + "
    \n", + " John Schulman, Nicolas Heess, Theophane Weber, Pieter Abbeel\n", + " \n", + "[5] `Nonstandard Interpretations of Probabilistic Programs for Efficient Inference`\n", + "
    \n", + "David Wingate, Noah Goodman, Andreas Stuhlmüller, Jeffrey Siskind\n", + "\n", + "[6] `Neural Variational Inference and Learning in Belief Networks`\n", + "
    \n", + "Andriy Mnih, Karol Gregor" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.16" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/svi_part_iv.ipynb b/pyro/source/tutorial/source/svi_part_iv.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..0fddd640dceadf9ef3829bb975be0e8fa24d8ae3 --- /dev/null +++ b/pyro/source/tutorial/source/svi_part_iv.ipynb @@ -0,0 +1,395 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# SVI Part IV: Tips and Tricks\n", + "\n", + "The three SVI tutorials leading up to this one ([Part I](http://pyro.ai/examples/svi_part_i.html), [Part II](http://pyro.ai/examples/svi_part_ii.html), & [Part III](http://pyro.ai/examples/svi_part_iii.html)) go through\n", + "the various steps involved in using Pyro to do variational\n", + "inference.\n", + "Along the way we defined models and guides (i.e. variational distributions),\n", + "setup variational objectives (in particular [ELBOs](https://docs.pyro.ai/en/dev/inference_algos.html?highlight=elbo#module-pyro.infer.elbo)), \n", + "and constructed optimizers ([pyro.optim](http://docs.pyro.ai/en/dev/optimization.html)). \n", + "The effect of all this machinery is to cast Bayesian inference as a *stochastic optimization problem*. \n", + "\n", + "This is all very useful, but in order to arrive at our ultimate goal—learning model parameters, inferring approximate posteriors, making predictions with the posterior predictive distribution, etc.—we need to successfully solve this optimization problem. \n", + "Depending on the details of the particular problem—for example the dimensionality of the latent space, whether we have discrete latent variables, and so on—this can be easy or hard. \n", + "In this tutorial we cover a few tips and tricks we expect to be generally useful for users doing variational inference in Pyro. *ELBO not converging!? Running into NaNs!?* Look below for possible solutions! \n", + "\n", + "#### Pyro Forum\n", + "\n", + "If you’re still having trouble with optimization after reading this tutorial, please don’t hesitate to ask a question on our [forum](https://forum.pyro.ai/)!" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Start with a small learning rate\n", + "\n", + "While large learning rates might be appropriate for some problems, it's usually good practice to start with small learning rates like $10^{-3}$\n", + "or $10^{-4}$:\n", + "```python\n", + "optimizer = pyro.optim.Adam({\"lr\": 0.001})\n", + "```\n", + "This is because ELBO gradients are *stochastic*, and potentially high variance, so large learning rates can quickly lead to regions of model/guide parameter space that are numerically unstable or otherwise undesirable.\n", + "\n", + "You can try a larger learning rate once you have achieved stable\n", + "ELBO optimization using a smaller learning rate. \n", + "This is often a good idea because excessively small learning rates can lead to poor optimization. \n", + "In particular small learning rates can lead to getting stuck in poor local optima of the ELBO." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. Use Adam or ClippedAdam by default\n", + "\n", + "Use [Adam](http://docs.pyro.ai/en/stable/optimization.html?highlight=clippedadam#pyro.optim.pytorch_optimizers.Adam)\n", + "or [ClippedAdam](http://docs.pyro.ai/en/stable/optimization.html?highlight=clippedadam#pyro.optim.optim.ClippedAdam) by default when doing Stochastic Variational Inference. Note that `ClippedAdam` is just a convenient extension of `Adam` that provides built-in support for learning rate decay and gradient clipping.\n", + "\n", + "The basic reason these optimization algorithms often do well in the context of variational inference is that the smoothing they provide via per-parameter momentum is often essential when the optimization problem is very stochastic. Note that in SVI stochasticity can come from sampling latent variables, from subsampling data, or from both. \n", + "\n", + "In addition to tuning the learning rate in some cases it may be necessary to also tune the pair of `betas` hyperparameters that controls the momentum used by `Adam`. In particular for very stochastic models it may make sense to use higher values of $\\beta_1$:\n", + "\n", + "```python\n", + "betas = (0.95, 0.999)\n", + "```\n", + "instead of \n", + "```python\n", + "betas = (0.90, 0.999)\n", + "```" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. Consider using a decaying learning rate\n", + "\n", + "While a moderately large learning rate can be useful at the beginning of optimization when you're far from the optimum and want to take large gradient steps, it's often useful to have a smaller learning rate later on so that you don't bounce around the optimum excessively without converging. \n", + "One way to do this is to use the learning rate schedulers [provided](http://docs.pyro.ai/en/stable/optimization.html?highlight=scheduler#pyro.optim.lr_scheduler.PyroLRScheduler) by Pyro. For example usage see the code snippet [here](https://github.com/pyro-ppl/pyro/blob/a106882e8ffbfe6ac96f19aef9a218026482ed51/examples/scanvi/scanvi.py#L265). \n", + "Another convenient way to do this is to use the [ClippedAdam](http://docs.pyro.ai/en/stable/optimization.html?highlight=clippedadam#pyro.optim.optim.ClippedAdam) optimizer that has built-in support for learning rate decay via the `lrd` argument:\n", + "\n", + "```python\n", + "num_steps = 1000\n", + "initial_lr = 0.001\n", + "gamma = 0.1 # final learning rate will be gamma * initial_lr\n", + "lrd = gamma ** (1 / num_steps)\n", + "optim = pyro.optim.ClippedAdam({'lr': initial_lr, 'lrd': lrd})\n", + "```" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4. Make sure your model and guide distributions have the same support\n", + "\n", + "Suppose you have a distribution in your `model` with constrained support, e.g. a LogNormal distribution, which has support on the positive real axis:\n", + "```python\n", + "def model():\n", + " pyro.sample(\"x\", dist.LogNormal(0.0, 1.0))\n", + "``` \n", + "Then you need to ensure that the accompanying `sample` site in the `guide` has the same support:\n", + "```python\n", + "def good_guide():\n", + " loc = pyro.param(\"loc\", torch.tensor(0.0))\n", + " pyro.sample(\"x\", dist.LogNormal(loc, 1.0))\n", + "``` \n", + "If you fail to do this and use for example the following inadmissable guide:\n", + "```python\n", + "def bad_guide():\n", + " loc = pyro.param(\"loc\", torch.tensor(0.0))\n", + " # Normal may sample x < 0\n", + " pyro.sample(\"x\", dist.Normal(loc, 1.0)) \n", + "```\n", + "you will likely run into NaNs very quickly. \n", + "This is because the `log_prob` of a LogNormal distribution evaluated at a sample `x` that satisfies `x<0` is undefined, and the `bad_guide` is likely to produce such samples.\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5. Constrain parameters that need to be constrained\n", + "In a similar vein, you need to make sure that the parameters used to instantiate distributions are valid; otherwise you will quickly run into NaNs. \n", + "For example the `scale` parameter of a Normal distribution needs to be positive. Thus the following `bad_guide` is problematic:\n", + "```python\n", + "def bad_guide():\n", + " scale = pyro.param(\"scale\", torch.tensor(1.0))\n", + " pyro.sample(\"x\", dist.Normal(0.0, scale))\n", + "``` \n", + "while the following `good_guide` correctly uses a constraint to ensure positivity:\n", + "```python\n", + "from pyro.distributions import constraints\n", + "\n", + "def good_guide():\n", + " scale = pyro.param(\"scale\", torch.tensor(0.05), \n", + " constraint=constraints.positive)\n", + " pyro.sample(\"x\", dist.Normal(0.0, scale))\n", + "``` " + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 6. If you are having trouble constructing a custom guide, use an AutoGuide\n", + "\n", + "In order for a model/guide pair to lead to stable optimization a number of conditions need to be satisfied, some of which we have covered above. \n", + "Sometimes it can be difficult to diagnose the reason for numerical instability or poor convergence. \n", + "Among other reasons this is because the fundamental issue could arise in a number of different places: in the model, in the guide, or in the choice of optimization algorithm or hyperparameters. \n", + "\n", + "Sometimes the problem is actually in your model even though you think it's in the guide. \n", + "Conversely, sometimes the problem is in your guide even though you think it's in the model or somewhere else. \n", + "For these reasons it can be helpful to reduce the number of moving parts while you try to identify the underlying issue.\n", + "One convenient way to do this is to replace your custom guide with a [pyro.infer.AutoGuide](http://docs.pyro.ai/en/stable/infer.autoguide.html#module-pyro.infer.autoguide). \n", + "\n", + "For example, if all the latent variables in your model are continuous, you can try a [pyro.infer.AutoNormal](http://docs.pyro.ai/en/stable/infer.autoguide.html#autonormal) guide.\n", + "Alternatively, you can use MAP inference instead of full-blown variational inference. See the [MLE/MAP](http://pyro.ai/examples/mle_map.html) tutorial for further details. Once you have MAP inference working, there's good reason to believe that your model is setup correctly (at least as far as basic numerical stability is concerned). \n", + "If you're interested in obtaining approximate posterior distributions, you can now follow-up with full-blown SVI. Indeed a natural order of operations might use the following sequence of increasingly flexible autoguides:\n", + "\n", + "[AutoDelta](http://docs.pyro.ai/en/stable/infer.autoguide.html#autodelta) → [AutoNormal](http://docs.pyro.ai/en/stable/infer.autoguide.html#autonormal) → [AutoLowRankMultivariateNormal](http://docs.pyro.ai/en/stable/infer.autoguide.html#autolowrankmultivariatenormal)\n", + "\n", + "If you find that you want a more flexible guide or that you want to take more control over how exactly the guide is defined, at this juncture you can proceed to build a custom guide. \n", + "One way to go about doing this is to leverage [easy guides](http://pyro.ai/examples/easyguide.html), which strike a balance between the control of a fully custom guide and the automation of an autoguide.\n", + "\n", + "Also note that autoguides offer several initialization strategies and it may be necessary in some cases to experiment with these in order to get good optimization performance. \n", + "One way to control initialization behavior is using the `init_loc_fn`.\n", + "For example usage of `init_loc_fn`, including example usage for the easy guide API, see [here](https://github.com/pyro-ppl/pyro/blob/a106882e8ffbfe6ac96f19aef9a218026482ed51/examples/sparse_gamma_def.py#L202)." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 7. Parameter initialization matters: initialize guide distributions to have low variance\n", + "\n", + "Initialization in optimization problems can make all the difference between finding a good solution and failing catastrophically.\n", + "It is difficult to come up with a comprehensive set of good practices for initialization, as good initialization schemes are often very problem dependent. \n", + "In the context of Stochastic Variational Inference it is generally a good idea to initialize your guide distributions so that they have **low variance**. \n", + "This is because the ELBO gradients you use to optimize the ELBO are stochastic. \n", + "If the ELBO gradients you get at the beginning of ELBO optimization exhibit high variance, you may be led into numerically unstable or otherwise undesirable regions of parameter space. \n", + "One way to guard against this potential hazard is to pay close attention to parameters in your guide that control variance. \n", + "For example we would generally expect this to be a reasonably initialized guide:\n", + "```python\n", + "from pyro.distributions import constraints\n", + "\n", + "def good_guide():\n", + " scale = pyro.param(\"scale\", torch.tensor(0.05), \n", + " constraint=constraints.positive)\n", + " pyro.sample(\"x\", dist.Normal(0.0, scale))\n", + "``` \n", + "while the following high-variance guide is very likely to lead to problems:\n", + "```python\n", + "def bad_guide():\n", + " scale = pyro.param(\"scale\", torch.tensor(12345.6), \n", + " constraint=constraints.positive)\n", + " pyro.sample(\"x\", dist.Normal(0.0, scale))\n", + "``` \n", + "\n", + "Note that the initial variance of autoguides can be controlled with the `init_scale` argument, see e.g. [here](http://docs.pyro.ai/en/stable/infer.autoguide.html?highlight=init_scale#autonormal) for `AutoNormal`." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 8. Explore trade-offs controlled by `num_particles`, mini-batch size, etc.\n", + "\n", + "Optimization can be difficult if your ELBO exhibits large variance. \n", + "One way you can try to mitigate this issue is to increase the number of particles used to compute each stochastic ELBO estimate:\n", + "\n", + "```python\n", + "elbo = pyro.infer.Trace_ELBO(num_particles=10, \n", + " vectorize_particles=True)\n", + "```\n", + "(Note that to use `vectorized_particles=True` you need to ensure your model and guide are properly vectorized; see the [tensor shapes tutorial](http://pyro.ai/examples/tensor_shapes.html) for best practices.)\n", + "This results in lower variance gradients at the cost of more compute. \n", + "If you are doing data subsampling, the mini-batch size offers a similar trade-off: larger mini-batch sizes reduce the variance at the cost of more compute. \n", + "Although what's best is problem dependent, it's usually worth taking more gradient steps with fewer particles than fewer gradient steps with more particles. \n", + "An important caveat to this is when you're running on a GPU, in which case (at least for some models) the cost of increasing `num_particles` or your mini-batch size may be sublinear, in which case increasing `num_particles` is likely more attractive.\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 9. Use `TraceMeanField_ELBO` if applicable\n", + "\n", + "The basic `ELBO` implementation in Pyro, [Trace_ELBO](http://docs.pyro.ai/en/stable/inference_algos.html?highlight=tracemeanfield#pyro.infer.trace_elbo.Trace_ELBO), uses stochastic samples to estimate the KL divergence term. \n", + "When analytic KL divergences are available, you may be able to lower ELBO variance by using analytic KL divergences instead. This functionality is provided by [TraceMeanField_ELBO](https://docs.pyro.ai/en/stable/inference_algos.html?highlight=tracemeanfield#pyro.infer.trace_mean_field_elbo.TraceMeanField_ELBO)." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 10. Consider normalizing your ELBO\n", + "\n", + "By default Pyro computes a un-normalized ELBO, i.e. it computes the quantity that is a lower bound to the log evidence computed on the full set of data that is being conditioned on. \n", + "For large datasets this can be a number of large magnitude. \n", + "Since computers use finite precision (e.g. 32-bit floats) to do arithmetic, large numbers can be problematic for numerical stability, since they can lead to loss of precision, under/overflow, etc.\n", + "For this reason it can be helpful in many cases to normalize your ELBO so that it is roughly order one. \n", + "This can also be helpful for getting a rough feeling for how good your ELBO numbers are. \n", + "For example if we have $N$ datapoints of dimension $D$ (e.g. $N$ real-valued vectors of dimension $D$) then we generally expect a reasonably well optimized ELBO to be order $N \\times D$. \n", + "Thus if we renormalize our ELBO by a factor of $N \\times D$ we expect an ELBO of order one. \n", + "While this is just a rough rule-of-thumb, if we use this kind of normalization and obtain ELBO values like $-123.4$ or $1234.5$ then something is probably wrong: perhaps our model is terribly mis-specified; perhaps our initialization is catastrophically bad, etc. \n", + "For details on how you can scale your ELBO by a normalization constant see [this tutorial](http://pyro.ai/examples/custom_objectives.html#Example:-Scaling-the-Loss)." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 11. Pay attention to scales\n", + "\n", + "Scales of numbers matter. \n", + "They matter for at least two important reasons: \n", + "i) scales can make or break a particular initialization scheme; \n", + "ii) as discussed in the previous section, scales can have an impact on numerical precision and stability.\n", + "\n", + "To make this concrete suppose you are doing linear regression, i.e.\n", + "you're learning a linear map of the form $Y = W @ X$. Often the data comes with particular units. \n", + "For example some of the components of the covariate $X$ may be in units of dollars (e.g. house prices), while others may be in units of density (e.g. residents per square mile). \n", + "Perhaps the the first covariate has typical values like $10^5$, while the second covariate has typical values like $10^2$. \n", + "You should always pay attention when you encounter numbers that range across many orders of magnitude. \n", + "In many cases it makes sense to normalize things so that they are order unity. \n", + "For example you might measure house prices in units of $100,000.\n", + "\n", + "These sorts of data transformations can have a number of benefits for downstream modeling and inference. \n", + "For example if you've normalized all of your covariates appropriately, it may be reasonable to set a simple \n", + "isotropic prior on your weights\n", + "\n", + "```python\n", + "pyro.sample(\"W\", dist.Normal(torch.zeros(2), torch.ones(2)))\n", + "```\n", + "instead of having to specify different prior covariances for different covariates\n", + "```python\n", + "prior_scale = torch.tensor([1.0e-5, 1.0e-2])\n", + "pyro.sample(\"W\", dist.Normal(torch.zeros(2), prior_scale))\n", + "```\n", + "There are other benefits too. \n", + "It now becomes easier to initialize appropriate parameters for your guide. \n", + "It is also now much more likely that the default initializations used by a [pyro.infer.AutoGuide](http://docs.pyro.ai/en/stable/infer.autoguide.html#module-pyro.infer.autoguide) will work for your problem." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 12. Keep validation enabled\n", + "\n", + "By default Pyro enables validation logic that can be helpful in debugging models and guides. \n", + "For example, validation logic will inform you when distribution parameters become invalid.\n", + "Unless you have good reason to do otherwise, keep the validation logic enabled. \n", + "Once you're satisfied with a model and inference procedure, you may wish to disable validation using [pyro.enable_validation](http://docs.pyro.ai/en/stable/primitives.html?highlight=enable_validation#pyro.primitives.enable_validation).\n", + "\n", + "Similarly in the context of `ELBOs` it is a good idea to set \n", + "```python\n", + "strict_enumeration_warning=True\n", + "```\n", + "when you are enumerating discrete latent variables." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 13. Tensor shape errors\n", + "\n", + "If you're running into tensor shape errors please make sure you have carefully read the [corresponding tutorial](http://pyro.ai/examples/tensor_shapes.html)." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 14. Enumerate discrete latent variables if possible\n", + "\n", + "If your model contains discrete latent variables it may make sense to enumerate them out exactly, since this can significantly reduce ELBO variance. \n", + "For more discussion see the [corresponding tutorial](http://pyro.ai/examples/enumeration.html)." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 15. Some complex models can benefit from KL annealing\n", + "\n", + "The particular form of the ELBO encodes a trade-off between model fit via the expected log likelihood term and a prior regularization term via the KL divergence. \n", + "In some cases the KL divergence can act as a barrier that makes it difficult to find good optima. \n", + "In these cases it can help to anneal the relevant strength of the KL divergence term during optimization. For further discussion see the [deep markov model tutorial](http://pyro.ai/examples/dmm.html#The-Black-Magic-of-Optimization).\n", + "\n", + "\n", + "\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 16. Consider clipping gradients or constraining parameters defensively\n", + "\n", + "Certain parameters in your model or guide may control distribution parameters that can be sensitive to numerical issues. \n", + "For example, the `concentration` and `rate` parameters that defines a [Gamma](http://docs.pyro.ai/en/stable/distributions.html#gamma) distribution may exhibit such sensitivity. \n", + "In these cases it may make sense to clip gradients or constrain parameters defensively. \n", + "See [this code snippet](https://github.com/pyro-ppl/pyro/blob/dev/examples/sparse_gamma_def.py#L135) for an example of gradient clipping. \n", + "For a simple example of \"defensive\" parameter constraints consider the `concentration` parameter of a `Gamma` distribution. \n", + "This parameter must be positive: `concentration` > 0.\n", + "If we want to ensure that `concentration` stays away from zero we can use a `param` statement with an appropriate constraint:\n", + "\n", + "```python\n", + "from pyro.distributions import constraints\n", + "\n", + "concentration = pyro.param(\"concentration\", torch.tensor(0.5),\n", + " constraints.greater_than(0.001))\n", + "```\n", + "These kinds of tricks can help ensure that your models and guides stay away from numerically dangerous parts of parameter space." + ] + } + ], + "metadata": { + "celltoolbar": "Raw Cell Format", + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/svi_torch.rst b/pyro/source/tutorial/source/svi_torch.rst new file mode 100644 index 0000000000000000000000000000000000000000..a0f74718fb82e227a473991c0591b465f3dcd71a --- /dev/null +++ b/pyro/source/tutorial/source/svi_torch.rst @@ -0,0 +1,15 @@ +Example: using vanilla PyTorch to perform optimization in SVI +============================================================= + +This script uses argparse arguments to construct PyTorch optimizer and dataloader, for example:: + + $ python examples/svi_torch.py --size 10000 --batch-size 100 --num-epochs 100 + +`View svi_torch.py on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/examples/svi_torch.py + +__ github_ + +.. literalinclude:: ../../examples/svi_torch.py + :language: python diff --git a/pyro/source/tutorial/source/tensor_shapes.ipynb b/pyro/source/tutorial/source/tensor_shapes.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..f57303dfd2dc2914e618d74ae9c2531e3901c274 --- /dev/null +++ b/pyro/source/tutorial/source/tensor_shapes.ipynb @@ -0,0 +1,775 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Tensor shapes in Pyro\n", + "\n", + "This tutorial introduces Pyro's organization of tensor dimensions. \n", + "Before starting, you should familiarize yourself with [PyTorch broadcasting semantics](http://pytorch.org/docs/master/notes/broadcasting.html). \n", + "After this tutorial, you may want to also read about [enumeration](http://pyro.ai/examples/enumeration.html).\n", + "\n", + "You may also find it useful to read Eric J. Ma's post [Reasoning about Shapes and Probability Distributions](https://ericmjl.github.io/blog/2019/5/29/reasoning-about-shapes-and-probability-distributions/). \n", + "While this post is specifically about TensorFlow Probability, many of the same concepts apply.\n", + "\n", + "#### Summary:\n", + "- Tensors broadcast by aligning on the right: `torch.ones(3,4,5) + torch.ones(5)`.\n", + "- Distribution `.sample().shape == batch_shape + event_shape`.\n", + "- Distribution `.log_prob(x).shape == batch_shape` (but not `event_shape`!).\n", + "- Use `.expand()` to draw a batch of samples, or rely on `plate` to expand automatically.\n", + "- Use `my_dist.to_event(1)` to declare a dimension as dependent.\n", + "- Use `with pyro.plate('name', size):` to declare a dimension as conditionally independent.\n", + "- All dimensions must be declared either dependent or conditionally independent.\n", + "- Try to support batching on the left. This lets Pyro auto-parallelize.\n", + " - use negative indices like `x.sum(-1)` rather than `x.sum(2)`\n", + " - use ellipsis notation like `pixel = image[..., i, j]`\n", + " - use [Vindex](http://docs.pyro.ai/en/dev/ops.html#pyro.ops.indexing.Vindex) if `i,j` are enumerated, `pixel = Vindex(image)[..., i, j]`\n", + "- When using `pyro.plate`'s automatic subsampling, be sure to subsample your data:\n", + " - Either manually subample by capturing the index `with pyro.plate(...) as i: ...`\n", + " - or automatically subsample via `batch = pyro.subsample(data, event_dim=...)`.\n", + "- When debugging, examine all shapes in a trace using [Trace.format_shapes()](http://docs.pyro.ai/en/dev/poutine.html#pyro.poutine.Trace.format_shapes).\n", + " \n", + "#### Table of Contents\n", + "- [Distribution shapes](#Distributions-shapes:-batch_shape-and-event_shape)\n", + " - [Examples](#Examples)\n", + " - [Reshaping distributions](#Reshaping-distributions)\n", + " - [It is always safe to assume dependence](#It-is-always-safe-to-assume-dependence)\n", + "- [Declaring independence with plate](#Declaring-independent-dims-with-plate)\n", + "- [Subsampling inside plate](#Subsampling-tensors-inside-a-plate)\n", + "- [Broadcasting to allow Parallel Enumeration](#Broadcasting-to-allow-parallel-enumeration)\n", + " - [Writing parallelizable code](#Writing-parallelizable-code)\n", + " - [Automatic broadcasting inside pyro.plate](#Automatic-broadcasting-inside-pyro-plate)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import torch\n", + "import pyro\n", + "from torch.distributions import constraints\n", + "from pyro.distributions import Bernoulli, Categorical, MultivariateNormal, Normal\n", + "from pyro.distributions.util import broadcast_shape\n", + "from pyro.infer import Trace_ELBO, TraceEnum_ELBO, config_enumerate\n", + "import pyro.poutine as poutine\n", + "from pyro.optim import Adam\n", + "\n", + "smoke_test = ('CI' in os.environ)\n", + "assert pyro.__version__.startswith('1.9.1')\n", + "\n", + "# We'll ue this helper to check our models are correct.\n", + "def test_model(model, guide, loss):\n", + " pyro.clear_param_store()\n", + " loss.loss(model, guide)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Distributions shapes: `batch_shape` and `event_shape` \n", + "\n", + "PyTorch `Tensor`s have a single `.shape` attribute, but `Distribution`s have two shape attributions with special meaning: `.batch_shape` and `.event_shape`. These two combine to define the total shape of a sample\n", + "```py\n", + "x = d.sample()\n", + "assert x.shape == d.batch_shape + d.event_shape\n", + "```\n", + "Indices over `.batch_shape` denote conditionally independent random variables, whereas indices over `.event_shape` denote dependent random variables (ie one draw from a distribution). Because the dependent random variables define probability together, the `.log_prob()` method only produces a single number for each event of shape `.event_shape`. Thus the total shape of `.log_prob()` is `.batch_shape`:\n", + "```py\n", + "assert d.log_prob(x).shape == d.batch_shape\n", + "```\n", + "Note that the `Distribution.sample()` method also takes a `sample_shape` parameter that indexes over independent identically distributed (iid) random varables, so that\n", + "```py\n", + "x2 = d.sample(sample_shape)\n", + "assert x2.shape == sample_shape + batch_shape + event_shape\n", + "```\n", + "In summary\n", + "```\n", + " | iid | independent | dependent\n", + "------+--------------+-------------+------------\n", + "shape = sample_shape + batch_shape + event_shape\n", + "```\n", + "For example univariate distributions have empty event shape (because each number is an independent event). Distributions over vectors like `MultivariateNormal` have `len(event_shape) == 1`. Distributions over matrices like `InverseWishart` have `len(event_shape) == 2`.\n", + "\n", + "### Examples \n", + "\n", + "The simplest distribution shape is a single univariate distribution." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "d = Bernoulli(0.5)\n", + "assert d.batch_shape == ()\n", + "assert d.event_shape == ()\n", + "x = d.sample()\n", + "assert x.shape == ()\n", + "assert d.log_prob(x).shape == ()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Distributions can be batched by passing in batched parameters." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "d = Bernoulli(0.5 * torch.ones(3,4))\n", + "assert d.batch_shape == (3, 4)\n", + "assert d.event_shape == ()\n", + "x = d.sample()\n", + "assert x.shape == (3, 4)\n", + "assert d.log_prob(x).shape == (3, 4)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Another way to batch distributions is via the `.expand()` method. This only works if \n", + "parameters are identical along the leftmost dimensions." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "d = Bernoulli(torch.tensor([0.1, 0.2, 0.3, 0.4])).expand([3, 4])\n", + "assert d.batch_shape == (3, 4)\n", + "assert d.event_shape == ()\n", + "x = d.sample()\n", + "assert x.shape == (3, 4)\n", + "assert d.log_prob(x).shape == (3, 4)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Multivariate distributions have nonempty `.event_shape`. For these distributions, the shapes of `.sample()` and `.log_prob(x)` differ:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "d = MultivariateNormal(torch.zeros(3), torch.eye(3, 3))\n", + "assert d.batch_shape == ()\n", + "assert d.event_shape == (3,)\n", + "x = d.sample()\n", + "assert x.shape == (3,) # == batch_shape + event_shape\n", + "assert d.log_prob(x).shape == () # == batch_shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Reshaping distributions \n", + "\n", + "In Pyro you can treat a univariate distribution as multivariate by calling the [.to_event(n)](http://docs.pyro.ai/en/dev/distributions.html#pyro.distributions.torch_distribution.TorchDistributionMixin.to_event) property where `n` is the number of batch dimensions (from the right) to declare as *dependent*." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "d = Bernoulli(0.5 * torch.ones(3,4)).to_event(1)\n", + "assert d.batch_shape == (3,)\n", + "assert d.event_shape == (4,)\n", + "x = d.sample()\n", + "assert x.shape == (3, 4)\n", + "assert d.log_prob(x).shape == (3,)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "While you work with Pyro programs, keep in mind that samples have shape `batch_shape + event_shape`, whereas `.log_prob(x)` values have shape `batch_shape`. You'll need to ensure that `batch_shape` is carefully controlled by either trimming it down with `.to_event(n)` or by declaring dimensions as independent via `pyro.plate`.\n", + "\n", + "### It is always safe to assume dependence \n", + "\n", + "Often in Pyro we'll declare some dimensions as dependent even though they are in fact independent, e.g.\n", + "```py\n", + "x = pyro.sample(\"x\", Normal(0, 1).expand([10]).to_event(1))\n", + "assert x.shape == (10,)\n", + "```\n", + "This is useful for two reasons: First it allows us to easily swap in a `MultivariateNormal` distribution later. Second it simplifies the code a bit since we don't need a `plate` (see below) as in\n", + "```py\n", + "with pyro.plate(\"x_plate\", 10):\n", + " x = pyro.sample(\"x\", Normal(0, 1)) # .expand([10]) is automatic\n", + " assert x.shape == (10,)\n", + "```\n", + "The difference between these two versions is that the second version with `plate` informs Pyro that it can make use of conditional independence information when estimating gradients, whereas in the first version Pyro must assume they are dependent (even though the normals are in fact conditionally independent). This is analogous to d-separation in graphical models: it is always safe to add edges and assume variables *may* be dependent (i.e. to widen the model class), but it is unsafe to assume independence when variables are actually dependent (i.e. narrowing the model class so the true model lies outside of the class, as in mean field). In practice Pyro's SVI inference algorithm uses reparameterized gradient estimators for `Normal` distributions so both gradient estimators have the same performance." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Declaring independent dims with `plate` \n", + "\n", + "Pyro models can use the context manager [pyro.plate](http://docs.pyro.ai/en/dev/primitives.html#pyro.plate) to declare that certain batch dimensions are independent. Inference algorithms can then take advantage of this independence to e.g. construct lower variance gradient estimators or to enumerate in linear space rather than exponential space. An example of an independent dimension is the index over data in a minibatch: each datum should be independent of all others.\n", + "\n", + "The simplest way to declare a dimension as independent is to declare the rightmost batch dimension as independent via a simple\n", + "```py\n", + "with pyro.plate(\"my_plate\"):\n", + " # within this context, batch dimension -1 is independent\n", + "```\n", + "We recommend always providing an optional size argument to aid in debugging shapes\n", + "```py\n", + "with pyro.plate(\"my_plate\", len(my_data)):\n", + " # within this context, batch dimension -1 is independent\n", + "```\n", + "Starting with Pyro 0.2 you can additionally nest `plates`, e.g. if you have per-pixel independence:\n", + "```py\n", + "with pyro.plate(\"x_axis\", 320):\n", + " # within this context, batch dimension -1 is independent\n", + " with pyro.plate(\"y_axis\", 200):\n", + " # within this context, batch dimensions -2 and -1 are independent\n", + "```\n", + "Note that we always count from the right by using negative indices like -2, -1.\n", + "\n", + "Finally if you want to mix and match `plate`s for e.g. noise that depends only on `x`, some noise that depends only on `y`, and some noise that depends on both, you can declare multiple `plates` and use them as reusable context managers. In this case Pyro cannot automatically allocate a dimension, so you need to provide a `dim` argument (again counting from the right):\n", + "```py\n", + "x_axis = pyro.plate(\"x_axis\", 3, dim=-2)\n", + "y_axis = pyro.plate(\"y_axis\", 2, dim=-3)\n", + "with x_axis:\n", + " # within this context, batch dimension -2 is independent\n", + "with y_axis:\n", + " # within this context, batch dimension -3 is independent\n", + "with x_axis, y_axis:\n", + " # within this context, batch dimensions -3 and -2 are independent\n", + "```\n", + "Let's take a closer look at batch sizes within `plate`s." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "def model1():\n", + " a = pyro.sample(\"a\", Normal(0, 1))\n", + " b = pyro.sample(\"b\", Normal(torch.zeros(2), 1).to_event(1))\n", + " with pyro.plate(\"c_plate\", 2):\n", + " c = pyro.sample(\"c\", Normal(torch.zeros(2), 1))\n", + " with pyro.plate(\"d_plate\", 3):\n", + " d = pyro.sample(\"d\", Normal(torch.zeros(3,4,5), 1).to_event(2))\n", + " assert a.shape == () # batch_shape == () event_shape == ()\n", + " assert b.shape == (2,) # batch_shape == () event_shape == (2,)\n", + " assert c.shape == (2,) # batch_shape == (2,) event_shape == ()\n", + " assert d.shape == (3,4,5) # batch_shape == (3,) event_shape == (4,5) \n", + "\n", + " x_axis = pyro.plate(\"x_axis\", 3, dim=-2)\n", + " y_axis = pyro.plate(\"y_axis\", 2, dim=-3)\n", + " with x_axis:\n", + " x = pyro.sample(\"x\", Normal(0, 1))\n", + " with y_axis:\n", + " y = pyro.sample(\"y\", Normal(0, 1))\n", + " with x_axis, y_axis:\n", + " xy = pyro.sample(\"xy\", Normal(0, 1))\n", + " z = pyro.sample(\"z\", Normal(0, 1).expand([5]).to_event(1))\n", + " assert x.shape == (3, 1) # batch_shape == (3,1) event_shape == ()\n", + " assert y.shape == (2, 1, 1) # batch_shape == (2,1,1) event_shape == ()\n", + " assert xy.shape == (2, 3, 1) # batch_shape == (2,3,1) event_shape == ()\n", + " assert z.shape == (2, 3, 1, 5) # batch_shape == (2,3,1) event_shape == (5,)\n", + " \n", + "test_model(model1, model1, Trace_ELBO())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It is helpful to visualize the `.shape`s of each sample site by aligning them at the boundary between `batch_shape` and `event_shape`: dimensions to the right will be summed out in `.log_prob()` and dimensions to the left will remain. \n", + "```\n", + "batch dims | event dims\n", + "-----------+-----------\n", + " | a = sample(\"a\", Normal(0, 1))\n", + " |2 b = sample(\"b\", Normal(zeros(2), 1)\n", + " | .to_event(1))\n", + " | with plate(\"c\", 2):\n", + " 2| c = sample(\"c\", Normal(zeros(2), 1))\n", + " | with plate(\"d\", 3):\n", + " 3|4 5 d = sample(\"d\", Normal(zeros(3,4,5), 1)\n", + " | .to_event(2))\n", + " |\n", + " | x_axis = plate(\"x\", 3, dim=-2)\n", + " | y_axis = plate(\"y\", 2, dim=-3)\n", + " | with x_axis:\n", + " 3 1| x = sample(\"x\", Normal(0, 1))\n", + " | with y_axis:\n", + " 2 1 1| y = sample(\"y\", Normal(0, 1))\n", + " | with x_axis, y_axis:\n", + " 2 3 1| xy = sample(\"xy\", Normal(0, 1))\n", + " 2 3 1|5 z = sample(\"z\", Normal(0, 1).expand([5])\n", + " | .to_event(1))\n", + "```\n", + "To examine the shapes of sample sites in a program automatically, you can trace the program and use the [Trace.format_shapes()](http://docs.pyro.ai/en/dev/poutine.html#pyro.poutine.Trace.format_shapes) method, which prints three shapes for each sample site: the distribution shape (both `site[\"fn\"].batch_shape` and `site[\"fn\"].event_shape`), the value shape (`site[\"value\"].shape`), and if log probability has been computed also the `log_prob` shape (`site[\"log_prob\"].shape`):" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Trace Shapes: \n", + " Param Sites: \n", + "Sample Sites: \n", + " a dist | \n", + " value | \n", + " log_prob | \n", + " b dist | 2 \n", + " value | 2 \n", + " log_prob | \n", + " c_plate dist | \n", + " value 2 | \n", + " log_prob | \n", + " c dist 2 | \n", + " value 2 | \n", + " log_prob 2 | \n", + " d_plate dist | \n", + " value 3 | \n", + " log_prob | \n", + " d dist 3 | 4 5\n", + " value 3 | 4 5\n", + " log_prob 3 | \n", + " x_axis dist | \n", + " value 3 | \n", + " log_prob | \n", + " y_axis dist | \n", + " value 2 | \n", + " log_prob | \n", + " x dist 3 1 | \n", + " value 3 1 | \n", + " log_prob 3 1 | \n", + " y dist 2 1 1 | \n", + " value 2 1 1 | \n", + " log_prob 2 1 1 | \n", + " xy dist 2 3 1 | \n", + " value 2 3 1 | \n", + " log_prob 2 3 1 | \n", + " z dist 2 3 1 | 5 \n", + " value 2 3 1 | 5 \n", + " log_prob 2 3 1 | \n" + ] + } + ], + "source": [ + "trace = poutine.trace(model1).get_trace()\n", + "trace.compute_log_prob() # optional, but allows printing of log_prob shapes\n", + "print(trace.format_shapes())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Subsampling tensors inside a `plate` \n", + "\n", + "One of the main uses of [plate](http://docs.pyro.ai/en/dev/primitives.html#pyro.plate) is to subsample data. This is possible within a `plate` because data are conditionally independent, so the expected value of the loss on, say, half the data should be half the expected loss on the full data.\n", + "\n", + "To subsample data, you need to inform Pyro of both the original data size and the subsample size; Pyro will then choose a random subset of data and yield the set of indices." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "data = torch.arange(100.)\n", + "\n", + "def model2():\n", + " mean = pyro.param(\"mean\", torch.zeros(len(data)))\n", + " with pyro.plate(\"data\", len(data), subsample_size=10) as ind:\n", + " assert len(ind) == 10 # ind is a LongTensor that indexes the subsample.\n", + " batch = data[ind] # Select a minibatch of data.\n", + " mean_batch = mean[ind] # Take care to select the relevant per-datum parameters.\n", + " # Do stuff with batch:\n", + " x = pyro.sample(\"x\", Normal(mean_batch, 1), obs=batch)\n", + " assert len(x) == 10\n", + " \n", + "test_model(model2, guide=lambda: None, loss=Trace_ELBO())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Broadcasting to allow parallel enumeration \n", + "\n", + "Pyro 0.2 introduces the ability to enumerate discrete latent variables in parallel. This can significantly reduce the variance of gradient estimators when learning a posterior via [SVI](http://docs.pyro.ai/en/dev/inference_algos.html#pyro.infer.svi.SVI).\n", + "\n", + "To use parallel enumeration, Pyro needs to allocate tensor dimension that it can use for enumeration. To avoid conflicting with other dimensions that we want to use for `plate`s, we need to declare a budget of the maximum number of tensor dimensions we'll use. This budget is called `max_plate_nesting` and is an argument to [SVI](http://docs.pyro.ai/en/dev/inference_algos.html) (the argument is simply passed through to [TraceEnum_ELBO](http://docs.pyro.ai/en/dev/inference_algos.html#pyro.infer.traceenum_elbo.TraceEnum_ELBO)). Usually Pyro can determine this budget on its own (it runs the `(model,guide)` pair once and record what happens), but in case of dynamic model structure you may need to declare `max_plate_nesting` manually.\n", + "\n", + "To understand `max_plate_nesting` and how Pyro allocates dimensions for enumeration, let's revisit `model1()` from above. This time we'll map out three types of dimensions:\n", + "enumeration dimensions on the left (Pyro takes control of these), batch dimensions in the middle, and event dimensions on the right." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```\n", + " max_plate_nesting = 3\n", + " |<--->|\n", + "enumeration|batch|event\n", + "-----------+-----+-----\n", + " |. . .| a = sample(\"a\", Normal(0, 1))\n", + " |. . .|2 b = sample(\"b\", Normal(zeros(2), 1)\n", + " | | .to_event(1))\n", + " | | with plate(\"c\", 2):\n", + " |. . 2| c = sample(\"c\", Normal(zeros(2), 1))\n", + " | | with plate(\"d\", 3):\n", + " |. . 3|4 5 d = sample(\"d\", Normal(zeros(3,4,5), 1)\n", + " | | .to_event(2))\n", + " | |\n", + " | | x_axis = plate(\"x\", 3, dim=-2)\n", + " | | y_axis = plate(\"y\", 2, dim=-3)\n", + " | | with x_axis:\n", + " |. 3 1| x = sample(\"x\", Normal(0, 1))\n", + " | | with y_axis:\n", + " |2 1 1| y = sample(\"y\", Normal(0, 1))\n", + " | | with x_axis, y_axis:\n", + " |2 3 1| xy = sample(\"xy\", Normal(0, 1))\n", + " |2 3 1|5 z = sample(\"z\", Normal(0, 1).expand([5]))\n", + " | | .to_event(1))\n", + "```\n", + "Note that it is safe to overprovision `max_plate_nesting=4` but we cannot underprovision `max_plate_nesting=2` (or Pyro will error). Let's see how this works in practice." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "@config_enumerate\n", + "def model3():\n", + " p = pyro.param(\"p\", torch.arange(6.) / 6)\n", + " locs = pyro.param(\"locs\", torch.tensor([-1., 1.]))\n", + "\n", + " a = pyro.sample(\"a\", Categorical(torch.ones(6) / 6))\n", + " b = pyro.sample(\"b\", Bernoulli(p[a])) # Note this depends on a.\n", + " with pyro.plate(\"c_plate\", 4):\n", + " c = pyro.sample(\"c\", Bernoulli(0.3))\n", + " with pyro.plate(\"d_plate\", 5):\n", + " d = pyro.sample(\"d\", Bernoulli(0.4))\n", + " e_loc = locs[d.long()].unsqueeze(-1)\n", + " e_scale = torch.arange(1., 8.)\n", + " e = pyro.sample(\"e\", Normal(e_loc, e_scale)\n", + " .to_event(1)) # Note this depends on d.\n", + "\n", + " # enumerated|batch|event dims\n", + " assert a.shape == ( 6, 1, 1 ) # Six enumerated values of the Categorical.\n", + " assert b.shape == ( 2, 1, 1, 1 ) # Two enumerated Bernoullis, unexpanded.\n", + " assert c.shape == ( 2, 1, 1, 1, 1 ) # Only two Bernoullis, unexpanded.\n", + " assert d.shape == (2, 1, 1, 1, 1, 1 ) # Only two Bernoullis, unexpanded.\n", + " assert e.shape == (2, 1, 1, 1, 5, 4, 7) # This is sampled and depends on d.\n", + "\n", + " assert e_loc.shape == (2, 1, 1, 1, 1, 1, 1,)\n", + " assert e_scale.shape == ( 7,)\n", + " \n", + "test_model(model3, model3, TraceEnum_ELBO(max_plate_nesting=2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's take a closer look at those dimensions. First note that Pyro allocates enumeration dims starting from the right at `max_plate_nesting`: Pyro allocates dim -3 to enumerate `a`, then dim -4 to enumerate `b`, then dim -5 to enumerate `c`, and finally dim -6 to enumerate `d`. Next note that samples only have extent (size > 1) in the new enumeration dimension. This helps keep tensors small and computation cheap. (Note that the `log_prob` shape will be broadcast up to contain both enumeratin shape and batch shape, so e.g. `trace.nodes['d']['log_prob'].shape == (2, 1, 1, 1, 5, 4)`.)\n", + "\n", + "We can draw a similar map of the tensor dimensions:\n", + "```\n", + " max_plate_nesting = 2\n", + " |<->|\n", + "enumeration batch event\n", + "------------|---|-----\n", + " 6|1 1| a = pyro.sample(\"a\", Categorical(torch.ones(6) / 6))\n", + " 2 1|1 1| b = pyro.sample(\"b\", Bernoulli(p[a]))\n", + " | | with pyro.plate(\"c_plate\", 4):\n", + " 2 1 1|1 1| c = pyro.sample(\"c\", Bernoulli(0.3))\n", + " | | with pyro.plate(\"d_plate\", 5):\n", + " 2 1 1 1|1 1| d = pyro.sample(\"d\", Bernoulli(0.4))\n", + " 2 1 1 1|1 1|1 e_loc = locs[d.long()].unsqueeze(-1)\n", + " | |7 e_scale = torch.arange(1., 8.)\n", + " 2 1 1 1|5 4|7 e = pyro.sample(\"e\", Normal(e_loc, e_scale)\n", + " | | .to_event(1))\n", + "```\n", + "To automatically examine this model with enumeration semantics, we can create an enumerated trace and then use [Trace.format_shapes()](http://docs.pyro.ai/en/dev/poutine.html#pyro.poutine.Trace.format_shapes):" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Trace Shapes: \n", + " Param Sites: \n", + " p 6 \n", + " locs 2 \n", + "Sample Sites: \n", + " a dist | \n", + " value 6 1 1 | \n", + " log_prob 6 1 1 | \n", + " b dist 6 1 1 | \n", + " value 2 1 1 1 | \n", + " log_prob 2 6 1 1 | \n", + " c_plate dist | \n", + " value 4 | \n", + " log_prob | \n", + " c dist 4 | \n", + " value 2 1 1 1 1 | \n", + " log_prob 2 1 1 1 4 | \n", + " d_plate dist | \n", + " value 5 | \n", + " log_prob | \n", + " d dist 5 4 | \n", + " value 2 1 1 1 1 1 | \n", + " log_prob 2 1 1 1 5 4 | \n", + " e dist 2 1 1 1 5 4 | 7\n", + " value 2 1 1 1 5 4 | 7\n", + " log_prob 2 1 1 1 5 4 | \n" + ] + } + ], + "source": [ + "trace = poutine.trace(poutine.enum(model3, first_available_dim=-3)).get_trace()\n", + "trace.compute_log_prob() # optional, but allows printing of log_prob shapes\n", + "print(trace.format_shapes())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Writing parallelizable code \n", + "\n", + "It can be tricky to write Pyro models that correctly handle parallelized sample sites. Two tricks help: [broadcasting](http://pytorch.org/docs/master/notes/broadcasting.html) and [ellipsis slicing](http://python-reference.readthedocs.io/en/dev/docs/brackets/ellipsis.html). Let's look at a contrived model to see how these work in practice. Our aim is to write a model that works both with and without enumeration." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "width = 8\n", + "height = 10\n", + "sparse_pixels = torch.LongTensor([[3, 2], [3, 5], [3, 9], [7, 1]])\n", + "enumerated = None # set to either True or False below\n", + "\n", + "def fun(observe):\n", + " p_x = pyro.param(\"p_x\", torch.tensor(0.1), constraint=constraints.unit_interval)\n", + " p_y = pyro.param(\"p_y\", torch.tensor(0.1), constraint=constraints.unit_interval)\n", + " x_axis = pyro.plate('x_axis', width, dim=-2)\n", + " y_axis = pyro.plate('y_axis', height, dim=-1)\n", + "\n", + " # Note that the shapes of these sites depend on whether Pyro is enumerating.\n", + " with x_axis:\n", + " x_active = pyro.sample(\"x_active\", Bernoulli(p_x))\n", + " with y_axis:\n", + " y_active = pyro.sample(\"y_active\", Bernoulli(p_y))\n", + " if enumerated:\n", + " assert x_active.shape == (2, 1, 1)\n", + " assert y_active.shape == (2, 1, 1, 1)\n", + " else:\n", + " assert x_active.shape == (width, 1)\n", + " assert y_active.shape == (height,)\n", + "\n", + " # The first trick is to broadcast. This works with or without enumeration.\n", + " p = 0.1 + 0.5 * x_active * y_active\n", + " if enumerated:\n", + " assert p.shape == (2, 2, 1, 1)\n", + " else:\n", + " assert p.shape == (width, height)\n", + " dense_pixels = p.new_zeros(broadcast_shape(p.shape, (width, height)))\n", + "\n", + " # The second trick is to index using ellipsis slicing.\n", + " # This allows Pyro to add arbitrary dimensions on the left.\n", + " for x, y in sparse_pixels:\n", + " dense_pixels[..., x, y] = 1\n", + " if enumerated:\n", + " assert dense_pixels.shape == (2, 2, width, height)\n", + " else:\n", + " assert dense_pixels.shape == (width, height)\n", + "\n", + " with x_axis, y_axis: \n", + " if observe:\n", + " pyro.sample(\"pixels\", Bernoulli(p), obs=dense_pixels)\n", + "\n", + "def model4():\n", + " fun(observe=True)\n", + "\n", + "def guide4():\n", + " fun(observe=False)\n", + "\n", + "# Test without enumeration.\n", + "enumerated = False\n", + "test_model(model4, guide4, Trace_ELBO())\n", + "\n", + "# Test with enumeration.\n", + "enumerated = True\n", + "test_model(model4, config_enumerate(guide4, \"parallel\"),\n", + " TraceEnum_ELBO(max_plate_nesting=2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Automatic broadcasting inside pyro.plate\n", + "\n", + "Note that in all our model/guide specifications, we have relied on [pyro.plate](http://docs.pyro.ai/en/dev/primitives.html#pyro.plate) to automatically expand sample shapes to satisfy the constraints on batch shape enforced by `pyro.sample` statements. However this broadcasting is equivalent to hand-annotated `.expand()` statements.\n", + "\n", + "We will demonstrate this using `model4` from the [previous section](#Writing-parallelizable-code). Note the following changes to the code from earlier:\n", + "\n", + " - For the purpose of this example, we will only consider \"parallel\" enumeration, but broadcasting should work as expected without enumeration or with \"sequential\" enumeration.\n", + " - We have separated out the sampling function which returns the tensors corresponding to the active pixels. Modularizing the model code into components is a common practice, and helps with maintainability of large models.\n", + " - We would also like to use the `pyro.plate` construct to parallelize the ELBO estimator over [num_particles](http://docs.pyro.ai/en/dev/inference_algos.html#pyro.infer.elbo.ELBO). This is done by wrapping the contents of model/guide inside an outermost `pyro.plate` context." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "num_particles = 100 # Number of samples for the ELBO estimator\n", + "width = 8\n", + "height = 10\n", + "sparse_pixels = torch.LongTensor([[3, 2], [3, 5], [3, 9], [7, 1]])\n", + "\n", + "def sample_pixel_locations_no_broadcasting(p_x, p_y, x_axis, y_axis):\n", + " with x_axis:\n", + " x_active = pyro.sample(\"x_active\", Bernoulli(p_x).expand([num_particles, width, 1]))\n", + " with y_axis:\n", + " y_active = pyro.sample(\"y_active\", Bernoulli(p_y).expand([num_particles, 1, height]))\n", + " return x_active, y_active\n", + "\n", + "def sample_pixel_locations_full_broadcasting(p_x, p_y, x_axis, y_axis):\n", + " with x_axis:\n", + " x_active = pyro.sample(\"x_active\", Bernoulli(p_x))\n", + " with y_axis:\n", + " y_active = pyro.sample(\"y_active\", Bernoulli(p_y))\n", + " return x_active, y_active \n", + "\n", + "def sample_pixel_locations_partial_broadcasting(p_x, p_y, x_axis, y_axis):\n", + " with x_axis:\n", + " x_active = pyro.sample(\"x_active\", Bernoulli(p_x).expand([width, 1]))\n", + " with y_axis:\n", + " y_active = pyro.sample(\"y_active\", Bernoulli(p_y).expand([height]))\n", + " return x_active, y_active \n", + "\n", + "def fun(observe, sample_fn):\n", + " p_x = pyro.param(\"p_x\", torch.tensor(0.1), constraint=constraints.unit_interval)\n", + " p_y = pyro.param(\"p_y\", torch.tensor(0.1), constraint=constraints.unit_interval)\n", + " x_axis = pyro.plate('x_axis', width, dim=-2)\n", + " y_axis = pyro.plate('y_axis', height, dim=-1)\n", + "\n", + " with pyro.plate(\"num_particles\", 100, dim=-3):\n", + " x_active, y_active = sample_fn(p_x, p_y, x_axis, y_axis)\n", + " # Indices corresponding to \"parallel\" enumeration are appended \n", + " # to the left of the \"num_particles\" plate dim.\n", + " assert x_active.shape == (2, 1, 1, 1)\n", + " assert y_active.shape == (2, 1, 1, 1, 1)\n", + " p = 0.1 + 0.5 * x_active * y_active\n", + " assert p.shape == (2, 2, 1, 1, 1)\n", + "\n", + " dense_pixels = p.new_zeros(broadcast_shape(p.shape, (width, height)))\n", + " for x, y in sparse_pixels:\n", + " dense_pixels[..., x, y] = 1\n", + " assert dense_pixels.shape == (2, 2, 1, width, height)\n", + "\n", + " with x_axis, y_axis: \n", + " if observe:\n", + " pyro.sample(\"pixels\", Bernoulli(p), obs=dense_pixels)\n", + "\n", + "def test_model_with_sample_fn(sample_fn):\n", + " def model():\n", + " fun(observe=True, sample_fn=sample_fn)\n", + "\n", + " @config_enumerate\n", + " def guide():\n", + " fun(observe=False, sample_fn=sample_fn)\n", + "\n", + " test_model(model, guide, TraceEnum_ELBO(max_plate_nesting=3))\n", + "\n", + "test_model_with_sample_fn(sample_pixel_locations_no_broadcasting)\n", + "test_model_with_sample_fn(sample_pixel_locations_full_broadcasting)\n", + "test_model_with_sample_fn(sample_pixel_locations_partial_broadcasting)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the first sampling function, we had to do some manual book-keeping and expand the `Bernoulli` distribution's batch shape to account for the conditionally independent dimensions added by the `pyro.plate` contexts. In particular, note how `sample_pixel_locations` needs knowledge of `num_particles`, `width` and `height` and is accessing these variables from the global scope, which is not ideal. \n", + "\n", + " - The second argument to `pyro.plate`, i.e. the optional `size` argument needs to be provided for implicit broadasting, so that it can infer the batch shape requirement for each of the sample sites. \n", + " - The existing `batch_shape` of the sample site must be broadcastable with the size of the `pyro.plate` contexts. In our particular example, `Bernoulli(p_x)` has an empty batch shape which is universally broadcastable.\n", + "\n", + "Note how simple it is to achieve parallelization via tensorized operations using `pyro.plate`! `pyro.plate` also helps in code modularization because model components can be written agnostic of the `plate` contexts in which they may subsequently get embedded in." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/timeseries.rst b/pyro/source/tutorial/source/timeseries.rst new file mode 100644 index 0000000000000000000000000000000000000000..c6ccc52bc869b0f4ed8ecac046a65197e0c9f0a4 --- /dev/null +++ b/pyro/source/tutorial/source/timeseries.rst @@ -0,0 +1,12 @@ +Example: Gaussian Process Time Series Models +============================================ + +`View gp_models.py on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/examples/contrib/timeseries/gp_models.py + +__ github_ + +.. literalinclude:: ../../examples/contrib/timeseries/gp_models.py + :language: python + diff --git a/pyro/source/tutorial/source/toy_mixture_model_discrete_enumeration.rst b/pyro/source/tutorial/source/toy_mixture_model_discrete_enumeration.rst new file mode 100644 index 0000000000000000000000000000000000000000..4049390f22419e2acba2fd29b9bbfa180eef7602 --- /dev/null +++ b/pyro/source/tutorial/source/toy_mixture_model_discrete_enumeration.rst @@ -0,0 +1,11 @@ +Example: Toy Mixture Model With Discrete Enumeration +==================================================== + +`View toy_mixture_model_discrete_enumeration.py on github`__ + +.. _github: https://github.com/pyro-ppl/pyro/blob/dev/examples/toy_mixture_model_discrete_enumeration.py + +__ github_ + +.. literalinclude:: ../../examples/toy_mixture_model_discrete_enumeration.py + :language: python diff --git a/pyro/source/tutorial/source/tracking_1d.ipynb b/pyro/source/tutorial/source/tracking_1d.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..4497fdb98c9f86f19b4f0ec3f33be2013d8e9782 --- /dev/null +++ b/pyro/source/tutorial/source/tracking_1d.ipynb @@ -0,0 +1,405 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Tracking an Unknown Number of Objects\n", + "\n", + "While SVI can be used to learn components and assignments of a mixture model, pyro.contrib.tracking provides more efficient inference algorithms to estimate assignments. This notebook demonstrates how to use the `MarginalAssignmentPersistent` inside SVI." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import math\n", + "import os\n", + "import torch\n", + "from torch.distributions import constraints\n", + "from matplotlib import pyplot\n", + "\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "import pyro.poutine as poutine\n", + "from pyro.contrib.tracking.assignment import MarginalAssignmentPersistent\n", + "from pyro.distributions.util import gather\n", + "from pyro.infer import SVI, TraceEnum_ELBO\n", + "from pyro.optim import Adam\n", + "\n", + "%matplotlib inline\n", + "assert pyro.__version__.startswith('1.9.1')\n", + "smoke_test = ('CI' in os.environ)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's consider a model with deterministic dynamics, say sinusoids with known period but unknown phase and amplitude." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def get_dynamics(num_frames):\n", + " time = torch.arange(float(num_frames)) / 4\n", + " return torch.stack([time.cos(), time.sin()], -1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It's tricky to define a fully generative model, so instead we'll separate our data generation process `generate_data()` from a factor graph `model()` that will be used in inference." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def generate_data(args):\n", + " # Object model.\n", + " num_objects = int(round(args.expected_num_objects)) # Deterministic.\n", + " states = dist.Normal(0., 1.).sample((num_objects, 2))\n", + "\n", + " # Detection model.\n", + " emitted = dist.Bernoulli(args.emission_prob).sample((args.num_frames, num_objects))\n", + " num_spurious = dist.Poisson(args.expected_num_spurious).sample((args.num_frames,))\n", + " max_num_detections = int((num_spurious + emitted.sum(-1)).max())\n", + " observations = torch.zeros(args.num_frames, max_num_detections, 1+1) # position+confidence\n", + " positions = get_dynamics(args.num_frames).mm(states.t())\n", + " noisy_positions = dist.Normal(positions, args.emission_noise_scale).sample()\n", + " for t in range(args.num_frames):\n", + " j = 0\n", + " for i, e in enumerate(emitted[t]):\n", + " if e:\n", + " observations[t, j, 0] = noisy_positions[t, i]\n", + " observations[t, j, 1] = 1\n", + " j += 1\n", + " n = int(num_spurious[t])\n", + " if n:\n", + " observations[t, j:j+n, 0] = dist.Normal(0., 1.).sample((n,))\n", + " observations[t, j:j+n, 1] = 1\n", + "\n", + " return states, positions, observations" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "def model(args, observations):\n", + " with pyro.plate(\"objects\", args.max_num_objects):\n", + " exists = pyro.sample(\"exists\",\n", + " dist.Bernoulli(args.expected_num_objects / args.max_num_objects))\n", + " with poutine.mask(mask=exists.bool()):\n", + " states = pyro.sample(\"states\", dist.Normal(0., 1.).expand([2]).to_event(1))\n", + " positions = get_dynamics(args.num_frames).mm(states.t())\n", + " with pyro.plate(\"detections\", observations.shape[1]):\n", + " with pyro.plate(\"time\", args.num_frames):\n", + " # The combinatorial part of the log prob is approximated to allow independence.\n", + " is_observed = (observations[..., -1] > 0)\n", + " with poutine.mask(mask=is_observed):\n", + " assign = pyro.sample(\"assign\",\n", + " dist.Categorical(torch.ones(args.max_num_objects + 1)))\n", + " is_spurious = (assign == args.max_num_objects)\n", + " is_real = is_observed & ~is_spurious\n", + " num_observed = is_observed.float().sum(-1, True)\n", + " pyro.sample(\"is_real\",\n", + " dist.Bernoulli(args.expected_num_objects / num_observed),\n", + " obs=is_real.float())\n", + " pyro.sample(\"is_spurious\",\n", + " dist.Bernoulli(args.expected_num_spurious / num_observed),\n", + " obs=is_spurious.float())\n", + "\n", + " # The remaining continuous part is exact.\n", + " observed_positions = observations[..., 0]\n", + " with poutine.mask(mask=is_real):\n", + " bogus_position = positions.new_zeros(args.num_frames, 1)\n", + " augmented_positions = torch.cat([positions, bogus_position], -1)\n", + " predicted_positions = gather(augmented_positions, assign, -1)\n", + " pyro.sample(\"real_observations\",\n", + " dist.Normal(predicted_positions, args.emission_noise_scale),\n", + " obs=observed_positions)\n", + " with poutine.mask(mask=is_spurious):\n", + " pyro.sample(\"spurious_observations\", dist.Normal(0., 1.),\n", + " obs=observed_positions)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This guide uses a smart assignment solver but a naive state estimator. A smarter implementation would use message passing also for state estimation, e.g. a Kalman filter-smoother." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def guide(args, observations):\n", + " # Initialize states randomly from the prior.\n", + " states_loc = pyro.param(\"states_loc\", lambda: torch.randn(args.max_num_objects, 2))\n", + " states_scale = pyro.param(\"states_scale\",\n", + " lambda: torch.ones(states_loc.shape) * args.emission_noise_scale,\n", + " constraint=constraints.positive)\n", + " positions = get_dynamics(args.num_frames).mm(states_loc.t())\n", + "\n", + " # Solve soft assignment problem.\n", + " real_dist = dist.Normal(positions.unsqueeze(-2), args.emission_noise_scale)\n", + " spurious_dist = dist.Normal(0., 1.)\n", + " is_observed = (observations[..., -1] > 0)\n", + " observed_positions = observations[..., 0].unsqueeze(-1)\n", + " assign_logits = (real_dist.log_prob(observed_positions) -\n", + " spurious_dist.log_prob(observed_positions) +\n", + " math.log(args.expected_num_objects * args.emission_prob /\n", + " args.expected_num_spurious))\n", + " assign_logits[~is_observed] = -float('inf')\n", + " exists_logits = torch.empty(args.max_num_objects).fill_(\n", + " math.log(args.max_num_objects / args.expected_num_objects))\n", + " assignment = MarginalAssignmentPersistent(exists_logits, assign_logits)\n", + "\n", + " with pyro.plate(\"objects\", args.max_num_objects):\n", + " exists = pyro.sample(\"exists\", assignment.exists_dist, infer={\"enumerate\": \"parallel\"})\n", + " with poutine.mask(mask=exists.bool()):\n", + " pyro.sample(\"states\", dist.Normal(states_loc, states_scale).to_event(1))\n", + " with pyro.plate(\"detections\", observations.shape[1]):\n", + " with poutine.mask(mask=is_observed):\n", + " with pyro.plate(\"time\", args.num_frames):\n", + " assign = pyro.sample(\"assign\", assignment.assign_dist, infer={\"enumerate\": \"parallel\"})\n", + "\n", + " return assignment" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We'll define a global config object to make it easy to port code to `argparse`." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "args = type('Args', (object,), {}) # A fake ArgumentParser.parse_args() result.\n", + "\n", + "args.num_frames = 5\n", + "args.max_num_objects = 3\n", + "args.expected_num_objects = 2.\n", + "args.expected_num_spurious = 1.\n", + "args.emission_prob = 0.8\n", + "args.emission_noise_scale = 0.1\n", + "\n", + "assert args.max_num_objects >= args.expected_num_objects" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Generate data" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "generated 16 detections from 2 objects\n" + ] + } + ], + "source": [ + "pyro.set_rng_seed(0)\n", + "true_states, true_positions, observations = generate_data(args)\n", + "true_num_objects = len(true_states)\n", + "max_num_detections = observations.shape[1]\n", + "assert true_states.shape == (true_num_objects, 2)\n", + "assert true_positions.shape == (args.num_frames, true_num_objects)\n", + "assert observations.shape == (args.num_frames, max_num_detections, 1+1)\n", + "print(\"generated {:d} detections from {:d} objects\".format(\n", + " (observations[..., -1] > 0).long().sum(), true_num_objects))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Train" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "def plot_solution(message=''):\n", + " assignment = guide(args, observations)\n", + " states_loc = pyro.param(\"states_loc\")\n", + " positions = get_dynamics(args.num_frames).mm(states_loc.t())\n", + " pyplot.figure(figsize=(12,6)).patch.set_color('white')\n", + " pyplot.plot(true_positions.numpy(), 'k--')\n", + " is_observed = (observations[..., -1] > 0)\n", + " pos = observations[..., 0]\n", + " time = torch.arange(float(args.num_frames)).unsqueeze(-1).expand_as(pos)\n", + " pyplot.scatter(time[is_observed].view(-1).numpy(),\n", + " pos[is_observed].view(-1).numpy(), color='k', marker='+',\n", + " label='observation')\n", + " for i in range(args.max_num_objects):\n", + " p_exist = assignment.exists_dist.probs[i].item()\n", + " position = positions[:, i].detach().numpy()\n", + " pyplot.plot(position, alpha=p_exist, color='C0')\n", + " pyplot.title('Truth, observations, and predicted tracks ' + message)\n", + " pyplot.plot([], 'k--', label='truth')\n", + " pyplot.plot([], color='C0', label='prediction')\n", + " pyplot.legend(loc='best')\n", + " pyplot.xlabel('time step')\n", + " pyplot.ylabel('position')\n", + " pyplot.tight_layout()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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008/ATB9sF6zZg3efvtteHl54dKlS2jXrp3V/bi6umLbtm1Yt24dfHx80KRJEylQDBw4UBoJsm3btgCAr7/+Grdv30ZUVBTc3d3xwgsvSNXZMWPGoHv37mjevDnatGlj9edoqSq/A5W9bubOnYvIyEi0bt0aHh4emDRpUplA0apVK2zatAkjRozAzz//jPT0dPTr1w8uLi7QarV48sknZV8GWBo+fDg2bdokG/0uMDAQjo6O8PPzw/Dhw7FkyRLpd+1ufme8vb2xceNGfPjhh/D09MTcuXOxefNmuLu7l3vOKjr/pVn7+ZXm5uaGuXPnom/fvvDw8MDatWsRGxtb7vNXl2effRZjxoxB586dER4eLr232draAgDS0tKQnJyMZ599tsbbQkT3RiFqutZNRFTD4uLi8NJLL6F79+513ZSHxvLly3Hu3Dmr357XJr1eD41GgwsXLsiGuab6Yfz48QgODsZrr71W1015aP35559o1aoVCgsLoVQqkZCQAK1Wi1GjRtV104ioHAxYRERUbzFg0aNo/fr1eOaZZ5CXl4eXXnoJ9vb2UjdXIqr/2EWQiIiIqB5ZsGABvLy80LhxY9jZ2WHBggV13SQiugusYBEREREREVUTVrCIiIiIiIiqifVxjR9wXl5e7KtPRERERETVJjU1tcKbjZs9lAErJCQEhw8frutmEBERERHRQyImJqZK67GLIBERERERUTVhwCIiIiIiIqomDFhERERERETV5KG8BouIiIiI6EFXXFyMK1euQKfT1XVTHil2dnYIDAyERqO5p+0ZsIiIiIiI6qErV67A2dkZISEhUCgUdd2cR4IQAjdv3sSVK1cQGhp6T/tgF0EiIiIionpIp9PB09OT4aoWKRQKeHp63lfVkAGLiIiIiKieYriqffd7zhmwiIiIiIiIqgkDFhERERERlZGVlYWFCxfe9XbLly9Henq6NB0SEoLMzMzqbFq9xoBFRERERERllBew9Hp9hduVDliPGo4iSEREREREZUyYMAHnzp1Dy5YtodFoYGdnB3d3d5w+fRo///wzYmNjcfLkSQDA7NmzkZeXh2bNmuHw4cMYMmQI7O3tsX//fgDAZ599hk2bNqG4uBjffvstmjZtWpeHVqMYsIiIiIiIHgBdu3YtM2/AgAF49dVXkZ+fj969e5dZHhcXh7i4OGRmZqJ///6yZbt3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hw41b99222267bbbvFApANQtXglY3bt311tvvaVZs2ZddN/169eradOmNVAVAAD119mzZ7Vy5UqzM/XFF1+osLBQTz31lObNm6eePXvq0UcfVXx8vGJjYxUWFubtkgGgTvJKwHI4HN54WgAATPW5c3Xw4EEzSLVv314zZ86UxWLR9OnT5e/vr9jYWN17772Kj4/XoEGDJEnNmjXTQw895OXKAaDuq9XXYFksFl199dWyWCyaNWuWZs6cWeG+ixcv1uLFiyVJR44cqakSAQDwqoKCAvn6+kqSZsyYoQ8//FDZ2dmSitebuv322zVz5kz5+/srMzNT7dq1M6+bAgB4XrUFrOHDh+vw4cNltj/22GMaN25clY6xceNGRUZG6qefftKIESPUtWtXDRkypNx9Z86caQawiq7pAgCgLiu5bqqkO7V161ZZrVbt2rVLUnGgGjp0qDkJRe/evc3FfCWpY8eO3iodABqMagtYa9euvexjREZGSpKaN2+u6667TqmpqRUGLAAA6pOS9abS0tI0ZcoUWSwW3XHHHVqyZIkkqUWLFurXr5/69etnTqX+4osverlqAECtHSJ45swZuVwuBQUF6cyZM/r444/1hz/8wdtlAQBQbb766iu99tprSk1NVVpamrne1IABA9SxY0f9+te/1ujRoxUfH6+oqCjWmwKAWsjqjSd9++23FRUVpc2bN2v06NFKSkqSJGVnZ2vUqFGSpB9//FFXXnmlevXqpfj4eI0ePVojR470RrkAAHhUTk6O1q5dq8cff1zXXXedtm3bJkn65ptv9PTTT+vEiROaMmWKlixZol27dqldu3aSioPWhAkTWMwXAGoxi2EYhreL8LSqrrIMAEB1y8/PV15enkJCQvTtt99q7Nix+uabb8z7O3furOeff14jR45Ufn6+DMNwu24KAFA7VDVj1NohggAA1DWGYSgzM9OchCI1NVVffvml5s2bp8cee0yRkZHq2rWrbr31VnO9qdDQUPPxfn5+XqweAOAJBCwAAC6BYRjmelOGYWjChAkyDEMDBgzQiRMnFBQUpNjYWN13333mEPdGjRrpnXfe8XLlAIDqRMACAOAX+Oc//6kPPvhAqampOnTokCSpT58+mjBhgqxWq/7zn/+odevW6tKlC+tNAUADRMACAOACeXl5butNZWVlacOGDbJYLEpJSVFGRoauuuoqc72pXr16mY8tmbgJANAwEbAAAA2ay+VSZmamOnXqJB8fHy1cuFC/+93vVFhYKElq2bKl+vXrp7NnzyowMFDLli2jMwUAqBABCwDQoBw4cEDvv/++MjIy9NVXXyktLU2nTp1SWlqarrjiCvXt21e/+c1vFBcXp/j4eEVGRrpNiU64AgBUhoAFAKhXXC6X9u/fr4yMDLevhx56SElJSfrmm290xx13qHHjxoqJidEtt9yi+Ph4tW3bVpI0bNgwDRs2zMuvAgBQVxGwAAB1UlFRkfbs2aOMjAylp6crLi5OI0aM0O7du9W1a1dzv/DwcDkcDrlcLknSwIED9cMPPygqKorFegEAHkfAAgDUarm5ufrmm29ktVrVq1cvFRQUqG/fvvr222/N66Qkaf78+RoxYoQ6duyoF198UQ6HQw6HQ82aNXM7XkBAgFq3bl3TLwMA0EAQsAAAtUJeXp78/f0lSY888ohSU1OVkZGhrKwsGYahcePG6Z133pGvr6/i4+M1ZswYxcTEyOFwqGvXrgoKCpIk2e12zZo1y5svBQDQgBGwAAA1rmT689LXSEVGRiotLU2SlJKSop9//ln9+vXTbbfdJofD4TYV+r/+9S9vlQ4AQKUIWAAAj3M6ndq3b59bgDp8+LA++OADSdJf/vIXvfHGGwoODpbD4dA111yjvn37mo9ft24d10cBAOokAhYA4JIVFBRo9+7dZoiaN2+e/P399cADD+jpp58292vRooUcDofy8/Pl5+enp556Ss8//7xatWpVbpAiXAEA6ioCFgDgok6fPq3MzEx17txZwcHBeuedd/TAAw9oz549cjqd5n433HCDHA6H+b3k+qiwsDC347Vv376mXwIAADWCgAUAMLlcLlmtVn3//fd64YUXzM7UDz/8IElavXq1rrnmGoWHh6t79+668cYbzSDVpUsXNWrUSJLUv39/9e/f35sv5aISExMlScnJyV6tAwBQvxCwAKABysvL04YNG9yukUpPT9cTTzyhGTNm6PTp0/rHP/4hh8OhwYMHmyEqNjZWkjR48GANHjzYy68CAIDah4AFAPVUUVGRvv/+e7cQNXjwYM2YMUO5ublKSkqSJDVp0kQxMTEaP368OnXqJEnq3r27Tp8+LavV6s2XUC1KOlcpKSlut+lkAQA8gYAFAHVcXl6evv32W2VkZMjf31/jxo2TYRhq0aKFjh07Zu4XERGh6OhoSVJYWJg2bNigzp07q3nz5mUmlaiPwQoAgJpAwAKAOuLkyZM6dOiQunTpIkm688479fHHH2vv3r1yuVySpIEDB2rcuHGyWCz6/e9/r9DQUHOiiZCQELfjNdQhfiWdKjpXAIDqQMACgFrqvffe0yeffGJeH5Wdna02bdpo3759kiRfX1/17dtXU6ZMkcPhUExMjDp37mw+fu7cud4qHQCABouABQBe8uOPP2r79u1uk0x8//332r9/v+x2u9asWaPly5fL4XBo+PDhZogq8dxzz3mx+rqPzhUAoDoQsACgGhUWFuq7775zC1HPPPOMWrRooZdfflkPPvigJKlZs2ZyOBwaN26ccnNzFRwcrIULF2rRokUsugsAQB1CwAIADzhz5oy++eYbZWRkaMiQIWrdurXefvttTZw4UUVFReZ+rVu3VnZ2tlq0aKHJkyebU6A3bdq0zDEDAgJq8iUAAAAPIGABwC9QMitfWFiYvvvuO82ZM0cZGRnmdVGStGzZMt16663q3r275s2bZ64h1bVrVzVu3Njcr3379mrfvn2NvwYAAFB9CFgAUIG8vDy99NJLSk9PN4f4/fjjj3rsscf0u9/9To0bN9bhw4c1cOBATZ8+3QxSJWtJderUSY8//riXXwUAAKhJBCwADdr333+v9PR0txCVmJioBQsWyG636ze/+Y0CAgLkcDg0atQoxcTE6KqrrpIktWzZUjt27PDyKwAAALUJAQtAvZefn28uxJuRkaHAwEDNmzdPkjR06FD98MMPkooDU0xMjCIjIyVJdrtdBw4cUNOmTZloAgAAVAkBC0C9cerUKWVmZurw4cO69tprJUmTJk3SypUrzYV4LRaLhg4dagasf/zjHwoJCZHD4VBoaGiZYzZr1qzmXgAAAKjzCFgA6pyjR4+as+4tW7ZMr776qjIyMnTgwAFJxbPvnT59WlarVQkJCercubN5fVSXLl3cZucbOXKkV14DAAConwhYAGq1zMxMffjhh+bwvoyMDP3888/6+eefFRYWph9//FHHjh1TYmKiGaIcDoc5pO+OO+7w8isAAAANCQELgFcVFRWZE02UDlFLly5Vt27dtHHjRt13330KCwtTTEyMrr/+ejkcDlmtVknS/fffr/vvv9/LrwIAAKAYAQtAjTh79qy5EG9GRobGjx+vvn376pNPPtGoUaPM/aKiouRwOFRQUCBJuvHGGzV27Fg1a9aMiSYAAECtR8AC4FE5OTnKyMhQWFiYunTpon379mnYsGHau3evDMOQJFmtVrVu3Vp9+/ZVXFycli5dai7EGxwc7Ha8kJAQb7wMAACAS0LAAvCLGYahvLw8BQQEqKioSHPnzlVGRobS09N1+PBhSdLcuXP17LPPqmXLloqLi9Ott97qthCvv7+/JKlp06aaOnWqN18OAACAx3glYM2bN0/vvfeefH191bFjRy1ZsqTc6ZHXrFmje+65R06nUzNmzND8+fO9UC3QsJw9e1aHDh1Sfn6+HA6HJOnxxx9XRkaGsrOzlZ2drYMHDyopKUkrV66U3W7Xxx9/rCZNmigpKUkxMTFyOBzq06ePJMnPz08rVqzw5ksCAACoMRajZMxODfr44481bNgw2e12PfDAA5KkJ5980m0fp9Opzp0765NPPlFUVJTi4uL0+uuvKyYm5qLHj42NVVpaWrXUDtRVBQUFOnz4sBmSCgsLddNNN0mS5syZo/Xr1ys7O1vHjx+XJMXHx2vLli2SpIEDB+rQoUOKiIgwv/r376/Jkyd77fUAAADUpKpmDK90sK6++mrz5/79++uNN94os09qaqqio6PVoUMHScWLha5atapKAQtoaI4ePaq9e/ea4Sk7O1unT5/Ws88+K0maOnWqli9f7vaYiIgIM2AFBASoU6dOSkhIMANUyf97krRp06aaezEAAAB1mNevwfrXv/5lfsgr7eDBg2rdurV5OyoqyvxrenkWL16sxYsXS5KOHDni+UKBGuZ0OmW1WmWxWLRr1y5t2rTJLUBlZ2dr8+bN8vX11SOPPKJFixaZj7VarYqIiNDChQtls9k0cuRIdezY0a0DFRERYe7/1FNPeeMlAgAA1DvVFrCGDx9uXuxe2mOPPaZx48aZP9vtdk2ZMuWyn2/mzJmaOXOmpOL2HVBbGYahn3/+WdnZ2erYsaMaNWqkzz//XMuXL3cLT4cPH9bu3bvVvn17ffDBB+Zw2ubNm5sB6cyZM/L19dW0adN09dVXm9ubN28um81mPidD+QAAAGpGtQWstWvXVnr/0qVL9f7772vdunXlrm0TGRmp/fv3m7cPHDigyMhIj9cJeIphGMrJyXELSYmJiWrbtq02btyoefPmKTs7W4cOHVJhYaEkacOGDRo8eLC+//57/fe//zUDUvfu3RUREaGAgABJ0vTp0zV58mS1bNlSPj4+ZZ67T58+5qQSAAAA8B6vDBFcs2aNnnrqKaWkpCgwMLDcfeLi4rR7927t3btXkZGRWrFihV577bUarhQoVlhYqD179pQZojdhwgQNHjxYaWlpGjx4sPLy8twe99prr6lt27YKCAhQ48aNlZiYqIiICLVq1UoRERHq2rWrpOIO069+9asKnz88PFzh4eHV+hoBAABw+bwSsO6++27l5+drxIgRkoonunjxxReVnZ2tGTNmaPXq1bLb7Vq0aJGSkpLkdDo1bdo0devWzRvloh5zuVyyWq0qKCjQW2+9VSZATZkyRb/+9a+VnZ1tTlleonHjxurWrZsGDx6s1q1b6+677y5zjVNUVJQk6YorrtAnn3xSYR3ldXEBAABQ93hlmvbqxjTtyMvL06FDh2QYhjkb3oMPPqj9+/e7Baibb75ZixYtUmFhofz8/GQYhvz9/RUZGamIiAjdfvvtuv3221VQUKCVK1e6haegoCAvv0oAAADUlFo9TTtwqUrWcjp06JCys7Pl4+OjMWPGSJJuueUWffHFF8rOztaxY8ckSWPHjtWqVaskSa+++qqk4unJY2JiNHz4cCUmJkqSfHx8lJ6erpYtWyokJKRMR8nX19cjk7EAAACgfiNgodb46aef9MMPP7h1mKxWqx5++GFJ0siRI/XRRx+5PaZv375mwLLb7YqOjtaQIUPMLlPJNU6StHfv3kqH4pXeFwAAALgUBCxUq5JrnCRp+/bt2rZtm1uAys3N1bp16yRJd911l9ui01arVd26dTMD1vjx4zVw4EC3SSJKzyy5ZMmSSmvhOifPKen8JScne7UOAACA2oaAhUtSei0nh8MhHx8frV27Vm+99ZY5fK9kLaeTJ08qICBA//73v/Xcc89Jcl/LqSSEzZ07V7fccovbWk52+/m36OzZs731cgEAAIAqIWDBjWEYOnHihFuXadSoUWratKnef/99Pf744+ZaTgUFBZKk3bt3Kzo6Wjt37jTXcmrVqpViYmIUERGhoqIiSdL999+v++67Ty1atJCvr2+Z5x40aFCNvlb8ciWdq5SUFLfbdLIAAACKEbAakIKCAu3du7fMVOTTpk1Tjx49tHr1at1www06e/as2+M+/fRTDR06VD4+PgoMDHS7xikiIkLNmjWTJN177726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jR071m2fsWPHatmyZZKkN954Q8OGDWOM7y9QlXNc+vqJd999Vw6Ho6bLrPfGjh2r5cuXyzAMff755woJCVGrVq28XVa9cvjwYXPceWpqqlwuV536JVMbGIah6dOny+Fw6L777it3H97Ll6cq55j38uU7cuSIcnJyJElnz57VJ598oq5du7rtw+eLy1OVc8zni8vzxBNP6MCBA8rKytKKFSs0bNgwvfLKK2771PX3sd3bBdRHdrtdixYtUlJSkpxOp6ZNm6Zu3brpD3/4g2JjYzV27FhNnz5dt9xyi6KjoxUWFqYVK1Z4u+w6pSrn+P/+7//07rvvym63KywsTEuXLvV22XXO5MmTlZycrKNHjyoqKkqPPPKICgsLJUmzZ8/WqFGjtHr1akVHRyswMFBLlizxcsV1z8XO8RtvvKG///3vstvtCggI0IoVK+rUL5na4LPPPtO///1v9ejRQ71795YkPf744/rhhx8k8V72hKqcY97Ll+/QoUOaOnWqnE6nXC6XJk6cqDFjxvD5woOqco75fFE96tP72GLUpSk5AAAAAKAWY4ggAAAAAHgIAQsAAAAAPISABQAAAAAeQsACAAAAAA8hYAEAAACAhxCwAAC1Wk5Ojv72t7+Zt7Ozs3XDDTfUyHNnZWXptddeq5HnAgDUDwQsAECtdmHAioiI0BtvvFEjz03AAgD8UgQsAECtNn/+fO3Zs0e9e/fWvHnzlJWVpe7du0uSli5dqvHjx2vEiBFq166dFi1apGeeeUZ9+vRR//79dezYMUnSnj17NHLkSF1xxRUaPHiwMjMzyzxPSkqKevfurd69e6tPnz46deqU5s+fr//973/q3bu3nn32WTmdTs2bN09xcXHq2bOn/vGPf0iSkpOTNWTIEI0ePVpdunTR7Nmz5XK5au4kAQBqDbu3CwAAoDILFizQ119/rS+++EJScVeptK+//lo7duxQXl6eoqOj9eSTT2rHjh269957tXz5cs2dO1czZ87Uiy++qE6dOmnLli2688479emnn7odZ+HChfrrX/+qQYMG6fTp0/L399eCBQu0cOFCvf/++5KkxYsXKyQkRFu3blV+fr4GDRqkq6++WpKUmpqq9PR0tW3bViNHjtRbb71VY0MZAQC1BwELAFCnDR06VEFBQQoKClJISIiuvfZaSVKPHj20c+dOnT59Wps2bdKNN95oPiY/P7/McQYNGqT77rtPU6ZM0fXXX6+oqKgy+3z88cfauXOnOUTxxIkT2r17t3x9fRUfH68OHTpIkiZPnqyNGzcSsACgASJgAQDqND8/P/Nnq9Vq3rZarSoqKpLL5VJoaKjZAavI/PnzNXr0aK1evVqDBg3SRx99VGYfwzD0wgsvKCkpyW17cnKyLBaL27YLbwMAGgauwQIA1GpBQUE6derUJT8+ODhY7du318qVKyUVh6Qvv/yyzH579uxRjx499MADDyguLk6ZmZllnjspKUl///vfVVhYKEn69ttvdebMGUnFQwT37t0rl8ul//znP7ryyisvuWYAQN1FwAIA1Grh4eEaNGiQunfvrnnz5l3SMV599VW9/PLL6tWrl7p166ZVq1aV2ee5555T9+7d1bNnT/n4+Oiaa65Rz549ZbPZ1KtXLz377LOaMWOGYmJi1LdvX3Xv3l2zZs1SUVGRJCkuLk533323HA6H2rdvr+uuu+6yXjcAoG6yGIZheLsIAADqsuTkZLfJMAAADRcdLAAAAADwEDpYAAAAAOAh/397dkwDAAAAIKh/a0t4QgungwUAADARWAAAABOBBQAAMBFYAAAAE4EFAAAwCY3pom9mmT5UAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pyro.set_rng_seed(1)\n", + "pyro.clear_param_store()\n", + "plot_solution('(before training)')" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch 0 loss = 89.270072937\n", + "epoch 10 loss = 85.940826416\n", + "epoch 20 loss = 86.1014556885\n", + "epoch 30 loss = 83.8865127563\n", + "epoch 40 loss = 85.354347229\n", + "epoch 50 loss = 82.01512146\n", + "epoch 60 loss = 78.1765365601\n", + "epoch 70 loss = 78.0290603638\n", + "epoch 80 loss = 74.915725708\n", + "epoch 90 loss = 74.3280792236\n", + "epoch 100 loss = 74.1109313965\n" + ] + } + ], + "source": [ + "infer = SVI(model, guide, Adam({\"lr\": 0.01}), TraceEnum_ELBO(max_plate_nesting=2))\n", + "losses = []\n", + "for epoch in range(101 if not smoke_test else 2):\n", + " loss = infer.step(args, observations)\n", + " if epoch % 10 == 0:\n", + " print(\"epoch {: >4d} loss = {}\".format(epoch, loss))\n", + " losses.append(loss)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pyplot.plot(losses);" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1gAAAGoCAYAAABbkkSYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3XlclNX+B/DP7MMyzAwM+y4gwqiQG9dQ0SxTQ02vueSGXjOXrpS/MrVyLW+ZqZV6yyW93jS7aeaSLS5pWi6pqQluoMiOLDIwDDPMcn5/jDwyMAgqsuj3/XrxgmedMw8jzmfOOd+HxxhjIIQQQgghhBDywPhN3QBCCCGEEEIIeVRQwCKEEEIIIYSQBkIBixBCCCGEEEIaCAUsQgghhBBCCGkgFLAIIYQQQgghpIFQwCKEEEIIIYSQBkIBixDSIqWkpIDH4z2Uc48ePRrz589/KOd+mMLDw3HkyJGmbkaD2L9/P4KCgprs8bt164aNGzcCAP7zn/+gX79+D/0xH+ZrujEf+4033sDKlSvrtW9OTg66desGmUyGN998s0Ee/2E4dOgQ1Gp1g+9bl8TERKxdu7ZBzkUIaTwUsAghDc7Z2Zn74vP5cHBw4JY3b958X+f08/PDoUOHGrahLZi9EHj58mV07969aRr0CBs3bhx++OGHOvd7++23kZCQ8NDa0RL+DeTm5uKrr77CxIkT67X/Z599Bh8fH5SUlOCDDz54KNewIc7Zs2dPJCUlNfi+dXnjjTewaNEimEymBjkfIaRxUMAihDQ4rVbLfQUEBGD37t3c8qhRo2rs/zi+eXgcn3NTeVyudXN4nhs2bMCAAQMglUrrtf+NGzcQGRnZYL1n93MNLBYLLBZLgzx+Q/Pz80NISAj27NnT1E0hhNwDCliEkEb39ttvY/jw4Rg5ciRkMhm+/PLLGj0yVYeIjRw5EtnZ2ejXrx+cnZ2xbNkybr9NmzbBz88P7u7ueP/99+vdhqSkJMTFxUGhUKBdu3b4/vvvbbbn5+ejd+/ekMlk6NWrFzIyMgBY34xNnz4dHh4ekMvlaN++PZKTkwEAer0eM2bMgL+/Pzw9PTF16lTo9Xqb57N48WJ4eXnhpZdeQlhYGH788UfuMSsqKuDq6orz58/DYrFg6NCh8PLygkKhQM+ePXHx4kUAwOrVq/H1119j8eLFcHZ2xuDBgwHY9nDo9XpMnz4d3t7e8PX1xYwZM1BRUWHTliVLlsDd3R0+Pj7YtGkT1449e/YgIiICMpkMfn5+WL58eb2u6a5duxAdHQ0XFxcEBARg0aJF3LbKIWi1/b50Oh3GjBkDpVIJtVqN06dP1/o4JpMJPB4Pn376KYKDg6FSqTBr1izuTfK6devQo0cPTJ8+Ha6urnj33Xe59W3atIFSqUS/fv243ykA/PjjjwgPD4dcLkdiYiIYY9y2devWoWfPntzyX3/9haeffhqurq7w8vLCkiVLsGfPHixZsgSbN2+Gs7MzOnbsCAAoLi7G+PHj4e3tDT8/P8ydO5drp9lsxmuvvQY3Nze0atXK5rVQnb1/A5XXdMOGDQgICECfPn3u+rqpvM6vvfYaAgICIJfL0aNHDxgMhhqP97///Q/BwcFITk6GTqfDiy++CDc3NygUCnTp0gUFBQV22/nDDz8gLi6OWy4sLET//v3h7u4OpVKJAQMGICsrCwAwZswYbN68mXsd3881rO13Xam2c3br1g3vvPMOunbtCicnJ6Snp2PdunXc6z4kJATr1q3jzlN9yKqfnx+WLVuGdu3aQS6XY+TIkdx1vJd9AeBf//oXvLy84Ovri7Vr14LH4yEtLY3b3rNnzxp/nwghzRwjhJCHKDAwkO3bt89m3VtvvcVEIhHbtWsXM5vNTKfTsVGjRrF58+Zx++zbt48FBgZyy76+vuyXX37hlq9evcoAsJdffpmVl5ez06dPM7FYzK5cuVJnmwwGAwsKCmIffPABq6ioYPv27WNOTk7s6tWrjDHGRo0axVxcXNjRo0eZXq9nU6dOZXFxcYwxxvbs2cM6d+7MiouLmdlsZklJSSwnJ4cxxtgrr7zCnn/+eVZUVMQ0Gg3r168fe/vtt7nnIxAI2OzZs5nBYGA6nY698847bOzYsVy7vvvuO6ZWqxljjJnNZrZhwwZWUlLCysvL2bRp01jHjh25fatfr+rXaPbs2axr167s5s2bLC8vj3Xp0oXNnz/fpi3z589nFRUVbOfOnczR0ZFpNBrGGGMqlYr99ttvjDHGCgsL2enTp+u8powxduDAAXbhwgVmNpvZ2bNnmZubG9u9e3e9fl//93//x+Li4lhRURFLS0tjERERNr//qoxGIwPAevfuze0fEhLCNmzYwBhjbO3atUwgELDVq1czk8nEdDod27ZtG2vdujW7dOkSMxqNbN68eaxbt26MMcby8vKYk5MT+/bbb1lFRQVbsmQJEwgENuer/P0XFxczDw8PtmLFCqbX65lGo2EnTpxgjFlf1+PGjbNpa3x8PJsyZQorKytjubm5rEOHDmzdunWMMcY+/fRTFhkZyTIyMlhBQQHr3r07u9t/y7X9G0hISGBlZWVMp9PV+bqZNGkSe+qpp1h2djYzmUzsyJEjrKKigjtX5fMNDQ1lqampjDHGVq5cyQYNGsR0Oh0zmUzsjz/+YKWlpXbbqFAo2JkzZ7jlmzdvsm+//ZbpdDqm0WjY4MGD2d///ndue/XX8b1eQ3u/6+rsnTM2NpYFBgay5ORkVlFRwYxGI9u1axdLTU1lFouFHThwgEmlUnbu3DnGmP2/RzExMSwnJ4cVFBSwsLAwtnbt2nved/fu3czb25slJyczrVbLRowYwQCw69evc8d//fXXrHPnznavNyGkeaKARQh5qGoLWL169bJZd78BqzLcMMbYE088wb755ps623Tw4EHm4+PDLBYLt27o0KFs0aJFXFtGjRrFbSsuLmY8Ho9lZ2ezn376iYWHh7Pjx48zs9nM7WM2m5lEImFpaWncul9//ZWFhoZyz0cikTCDwcBtv3jxInNxcWHl5eWMMcaGDRvG3nvvPbttzs/PZwCYVqu1e72qX6OAgAD2008/cdv27NnDQkJCuLY4OTkxk8nEbVcqleyPP/5gjDHm7e3N1q5dy0pKSu52Ges0bdo09vrrrzPG6v59+fv727xOVq1aVWfAqrr/xx9/zPr06cMYs77pDg4Otjnm6aefZhs3brQ5h1gsZpmZmWz9+vUsNjaW22Y2m5mXl5fdgLVp0ybWqVMnu+2q/kY+MzOTSaVSptfruXWbNm1iTz/9NGOMse7du3NvtBlj7Pvvv7+vgHXjxo1aj6n6ujGZTEwsFrMLFy7U2K/yXB9++CFTq9UsKyuL2/b555+z2NhYdv78+VofpxKPx+M+qLDnjz/+YCqViluuK2DVdQ3t/a6rqy1gLViw4K7HPffcc2zlypWMMft/j7766itu+bXXXmPTpk27533HjBnDfQjDmPVvQvWAtXfvXhYWFnbXthJCmhcaIkgIaRL+/v4Nch4vLy/uZ0dHR2i12jqPyc7ORkBAgM28j8DAQG7oUvX2yeVyyOVyZGdno0+fPpg8eTKmTJkCT09PTJ48GaWlpcjNzYXBYEBUVBQUCgUUCgXi4+Nx8+ZN7jyenp4Qi8Xccps2bRASEoLvv/8eWq0We/bswYsvvgjAOnxs5syZaNWqFVxcXBAaGgoAtQ7NsvccAwMDa31+KpUKAoHA7rXbsWMHdu3ahYCAAPTs2RMnTpyo12MeO3YMPXv2hLu7O+RyOdatW1ejvbX9vnJycmyuedW216b6/tnZ2Xa3Ada5PtOmTeN+NyqVCnw+H5mZmcjOzrbZn8/nw8/Pz+5jZmRkICQkpM62VT6mwWCAp6cn97jTpk1DXl4eANR43Po8Z3uqnuNur5u8vDxUVFTctf0ffvgh/vnPf8LHx4dbl5CQgKeffhrDhg2Dr68vZs2aVetcJ4VCgdLSUm5Zq9Vi4sSJCAgIgIuLC5566ql6v4aBuq9h9ed/L6oft2fPHsTExMDV1RUKhQI///zzXdt6L397atu3+mvA3nMpLS2FQqGo+wkRQpoNCliEkCZRfVK7k5MTdDodt5ybm3vX/R+Ej48PMjIybObZpKenw9fXl1uuOj9Ho9FAo9FwbzpfffVVnDlzBhcuXEBycjKWLVvGhafLly+juLgYxcXF3HF3ew4jR47EV199hR07diA6Opqbu7Fp0ybs3bsXBw8ehEajQUpKCgBwba7revj4+ODGjRu1Pr+7iYmJwa5du3Dz5k3Ex8djxIgR9TpuxIgR+Pvf/46MjAxoNBpMnDjR5hrfjZeXl801T09Pr/OY6vtXDQXVr4+/vz/Wr1/P/W6Ki4tRXl6OmJgYeHt725zLYrEgMzPT7mP6+/sjNTXV7jZ7j+no6IiioiLuMUtKSnD+/HkAqPG4dT3n2n7nVdff7XVT+Rqtrf0AsG/fPsyfPx/fffcdt04sFmP+/Pm4ePEijh49ih07dtRaDbR9+/a4cuUKt/zhhx/i+vXrOHnyJEpKSnDw4MF7eo51XUN7x9R1Tnvry8vLMXToUMyePRt5eXkoLi5Gnz596v36vV/e3t42r7Wqr4dKFy9eRFRU1ENtByGkYVHAIoQ0C9HR0fj+++9x69Yt5OTk4JNPPrHZ7unpiWvXrtX7fPv374dQKLS77cknn4RQKMRHH30Eo9GIgwcPYu/evRg+fDi3z+7du3Hs2DEYDAa8/fbb6N69O7y9vXHy5EmcPHkSJpMJTk5OEIvF4PP5EAgEmDhxIl599VXk5+eDMYbMzEz8/PPPd23nyJEj8cMPP2DNmjVc7xVg/dRaIpHAzc0NOp0Ob7311j1dj5EjR2LhwoUoKChAfn4+Fi1ahNGjR9d53crLy7FlyxaUlJRAJBJBJpOBz7f+V1FZXOLo0aN2jy0tLYWrqyukUimOHz+OrVu31vl4lYYNG4bFixejuLgY6enp9bqP0pIlS7j9P/nkE5vfX3WTJ0/Ge++9xxV8KC4uxrZt2wAA8fHxOHv2LHbu3Amj0Yjly5cjPz/f7nkGDhzItc9gMKCkpAQnT54EYP2dpKWlcW/K/f39ERcXh9dffx0lJSWwWCxISUnBr7/+yj3nFStWICsrC4WFhfjggw/u+nzr82/gbq8bgUCAhIQEvPrqq8jNzYXZbMZvv/0Go9HI7dO+fXt8//33ePnll7nCCgcPHsSFCxdgsVjg4uICkUjEvSaq69+/Pw4fPmzTHkdHRyiVShQWFmLhwoV1Psd7uYb1Uf2c9hgMBlRUVMDd3R0CgQB79uzBgQMH6v0Y92vYsGFYv349Ll++DJ1OZ1MYptLhw4cb5T5shJCGQwGLENIsJCQkICIiAoGBgejbt2+NXpM5c+Zg3rx5UCgUWLFiRZ3ny8jIQGxsrN1tEokEu3fvxs6dO6FSqTB9+nRs2bIFYWFh3D6jR4/G22+/DZVKhfPnz3NV9oqLi/GPf/wDCoUCQUFB8Pb2xowZMwAAH330EQIDA9GlSxfI5XL06dMHV69evWs7/fz80KlTJxw/fhzDhg3j1o8fPx4+Pj7w8fGBWq3Gk08+aXPcxIkTce7cOSiVSgwdOrTGeefNm4eoqCi0bdsW7du3R0xMDGbPnl3ndQOsN9YNDAyEi4sL1q9fjy+//BKA9ZrK5XK0bdvW7nH//ve/MXv2bMhkMixevNjm+dRlwYIF8Pb2RlBQEPr164exY8fWecyAAQMQHR2NJ554AoMHD77rvY5eeOEFzJgxAy+88AJcXFzQvn17/PTTTwCsb8C//vprvPHGG1CpVEhPT0dMTIzd88jlcuzbtw/bt2+Hp6cnWrduzQWK4cOHc5Ugu3TpAgD48ssvUVZWhsjISCiVSrzwwgtc7+yUKVPQu3dvtGvXDp07d7b7e6yqPv8G6nrdLF++HBEREejYsSNcXV0xZ86cGsGjQ4cO2L17N8aPH4+ff/4Z2dnZGDJkCFxcXKBWq/H000/bfBhQ1bhx47B7926uSt6MGTOg0Wjg5uaGJ598ss6gcK/XsD7snbM6hUKB5cuXY/DgwXB1dcW2bdsQHx9f78e4XwMGDMCUKVPQo0cPhIWFcX+zJBIJACArKwtXr17FgAEDHnpbCCENh8cedv83IYQ0gYSEBIwZMwa9e/du6qY8MjZu3IjU1FS7n7I3JpPJBJFIhOvXr9uUwybNw8yZMxEQEIBXXnmlqZvS4vz111/o0KEDDAYD+Hw+EhMToVarMWnSpKZuGiHkHlDAIoQQ0qJQwCKPkh07duC5556DVqvFmDFj4ODgwA1fJYS0TDREkBBCCCGkiaxatQoqlQqhoaGQSqVYtWpVUzeJEPKAqAeLEEIIIYQQQhoI9WARQgghhBBCSAOxX8O4hVOpVDQunxBCCCGEENJg0tLS6nWz9EcyYAUFBeHUqVNN3QxCCCGEEELII6JTp0712o+GCBJCCCGEEEJIA6GARQghhBBCCCENhAIWIYQQQgghhDSQR3IOFiGEEEIIIS2d0WhEZmYm9Hp9UzflsSKVSuHn5weRSHRfx1PAIoQQQgghpBnKzMyETCZDUFAQeDxeUzfnscAYQ2FhITIzMxEcHHxf56AhgoQQQgghhDRDer0ebm5uFK4aEY/Hg5ub2wP1GlLAIoQQQgghpJmicNX4HvSaU8AihBBCCCGEkAZCAYsQQgghhBBSQ3FxMVavXn3Px23cuBHZ2dncclBQEAoKChqyac0aBSxCCCGEEEJIDbUFLJPJdNfjqgesxw1VESSEEEIIIYTUMGvWLKSmpiI6OhoikQhSqRRKpRKXLl3Czz//jPj4eFy4cAEAsHTpUmi1WrRt2xanTp3CqFGj4ODggGPHjgEAPv30U+zevRtGoxHffPMN2rRp05RP7aGigEUIIYQQQkgL0LNnzxrrhg0bhqlTp0Kn06F///41tickJCAhIQEFBQUYOnSozbZDhw7d9fHef/99XLhwAWfPnsWhQ4fw3HPP4cKFCwgODkZaWprdY4YOHYqVK1di6dKl6NSpE7depVLhzJkzWL16NZYuXYp169bV+XxbKhoiSAghhBBCCKlTly5d7vveUEOGDAEAdOzYsdZw9qigHixCCCGEEEJagLv1ODk6Ot51u0qlqrPHqi5OTk7cz0KhEBaLhVuu675REokEACAQCOqcw9XSUcBqZMOGDUNOTg7kcjn31aFDB0ycOBEAsHv3bggEApvtrq6uNi9oQgghhBBCHjaZTIbS0lK72zw9PXHz5k0UFhbC2dkZe/bsQd++fes87nHQpAFrwoQJ2LNnDzw8PLgJclUdOnQIgwYN4roihwwZgrlz5zZ2MxuUUqnEzZs3kZWVheTkZGg0Gty8eZMLWBMnTsTNmzdtjhk+fDi2bt0KAFCr1TUCWL9+/TB69GgwxvDZZ5/ZbJPL5fDx8YGbm1ujP1dCCCGEENJyubm5ITY2Fm3btoWDgwM8PT25bSKRCHPnzkWXLl3g6+trU7QiISEBkydPtily8TjhMcZYUz34r7/+CmdnZ4wdO7bWgLV06VLs2bPnns7bqVMnnDp1qqGa2aguX76MW7duQaPRcF9BQUF45plnwBjDhAkTbLaXlJTgxRdfxMKFC6HT6ez2dM2ZMwfvvfceCgsLERwcDIVCYRPAJk6ciMGDB+PWrVt2A1qbNm3g7u7OdQPz+TR1jxBCCCHkYbt48SIiIiKauhmPJXvXvr4Zo0l7sHr06PHIT3K7V+Hh4bVu4/F42LBhQ63bpVIpsrOzbcKXRqNB69atAViD0YQJE2zCW15eHrRaLQAgOzsbc+bMqXHetWvXYuLEiTh9+jS6dOkCmUxmE8Deffdd9OrVC1euXMH69etrBLSuXbtCpVJBr9ejvLwcLi4uEAgED3ilCCGEEEIIaX6a/RysY8eOISoqCj4+Pli6dCnUarXd/dasWYM1a9YAAPLz8xuzic0Gn8+Ht7c3vL297W5XKpVYsWJFrcer1WqUl5fbBDCNRsN1+Xp6emLevHk1totEIgDAtWvX8PHHH8NgMNic98CBA3jqqaewc+dOjBgxAgDg7OzMBbCtW7eiXbt2OHz4MLZs2VIjoA0aNAguLi4oLCxESUkJ5HI5XFxcIBQ2+5cvIYQQQgh5zDTrd6gdOnTAjRs34OzsjL179+L555/H1atX7e47adIkTJo0CQBsau6TeyOVSiGVSm3G2FYKCAjA/Pnzaz22b9++0Ov1MBgMNgGssgctOjoay5cvrxHQZDIZACAtLQ07d+6ERqOxqURz7do1uLi4YO3atZg9eza33snJCXK5HOfOnYNKpcJ///tf7Nmzp0ZAmzJlCoRCIa5duwaNRmOzjUIaIYQQQghpSM363aWLiwv3c//+/TF16lQUFBRApVI1YatIXSQSCTw8PODh4WGzPjw8/K5DIMeNG4dx48YBACoqKrgA5ufnBwAYMGAAvLy8agQ0Z2dnANaey3PnznHry8vLwePxMG3aNADWm+WtXbvW5jFVKhXX47lgwQL8/vvvNQqEzJgxAwBw8uRJlJWV1QhwlT14hBBCCCGENOuAlZubC09PT/B4PJw8eRIWi4Wq4T0mxGIx3N3d4e7uzq1Tq9W1DhEFgBkzZnBhCLCGtNLSUq4oR2JiIvr3728TzsxmM7e/xWKBRqNBeno6t93T05M755w5c3DgwAGbx1Sr1VyBllGjRiElJcUmfLVr1w6JiYkAgF27dsFsNttsd3Nzg1KpfMCrRQghhBBCmosmDVgjR47EoUOHUFBQAD8/PyxYsABGoxEAMHnyZGzbtg3//ve/IRQK4eDggK1bt4LH4zVlk0kLIhaLbQJ5XQFtwYIFWLBggc26qgFs1apVyMnJsTu8EQB8fHxQWFgIjUaDzMxMrgR/ZcB69dVXcf36dZvzx8fHY/fu3QCsQyjLy8ttAtjTTz+NyZMnAwBWr14NBwcHbg6aXC6Hn59frXPuCCGEEEJI42vSMu0PS3Mt096zZ08Ad78LN3l03bhxo0YJfi8vLzzzzDMArD1seXl5Ntvj4+PxwQcfwGKxQCgUovo/1+nTp+Pjjz+GXq+HQqHgglfl1/jx4zF69GiUlZVhyZIlNYY3RkZGwtfXF2azGRUVFZBKpfQhBiGEENJMPIpl2p2dnaHVapGdnY3p06dj27Ztte67YsUKTJo0CY6OjgCsU4a2bNkChULx0NvZYsu0E/I4CQwMRGBgYK3bP/7441q38Xg8rnes6ldAQAAA6/DGxMTEGtsrKzrm5+dj4cKFNc67YsUKJCYm4vLly1Cr1RCJRDYBbMGCBYiPj0daWhqWL1/OrVcoFPDw8EBMTEyNuXaEEEIIebyYzeZ7vgWPj4/PXcMVYH2fMnr0aC5g7d27977b2JgoYDWCyp6rw4cP2yxTTxapLx6PB6VSWet8LUdHR3zwwQe1Hh8UFASTyYTS0tIaN7EGrHdqX7x4cY2AVvkHLSsrCxs3bkRpaalNL9rOnTsxcOBA/Pzzzxg/fjx8fHxsvhISEuDv74/S0lLo9Xq4ubnRjaoJIYSQFiQtLQ19+/ZFx44dcebMGajVamzatAmRkZEYPnw49u3bh5kzZ6Jz586YNm0a8vPz4ejoiLVr16JNmza4fv06XnzxRWi1WgwaNMjmvPHx8bhw4QLMZjPefPNN/Pjjj+Dz+XjppZfAGEN2djZ69eoFlUqFX375BUFBQTh16hRUKhWWLVuGL774AgAwceJEvPrqq0hLS0O/fv3QrVs3/P777/D19cXOnTvh4ODQqNeMAhYhjwmBQACFQmG3W93T09OmBH51sbGx0Gg0sFgsKC0tRXFxMfLy8hAWFgbAGtCeffZZ5OTkIC0tDb///jsKCgoQHx8Pf39/fPXVV3j55ZchEong7e3NBbBPP/0UPj4+uHz5MtLT07n1CoWChioSQgghVSzYnYTk7JIGPWekjwvmDah9fnqly5cvY/369YiNjcWECROwevVqANb//8+cOQMA6N27Nz777DOEhYXhxIkTmDp1Kg4ePIjExERMmTIFY8eOxapVq+yef82aNUhLS8PZs2chFApRVFQEV1dXLFu2DL/88kuNCuKnT5/Ghg0bcOLECTDGEBMTg7i4OCiVSly9ehVfffUV1q5di2HDhmH79u0YPXr0A16pe0MBqxFU9lRRzxVp6fh8PjdMsOpwx44dO3KfIlUyGAzcfca6deuGTz75BNnZ2dzXpUuXIBaLAQCbN2/GokWLuGOlUil8fHzw559/wsXFBXv37kVSUlKNHrKqRUYIIYQQ8nD4+/sjNjYWADB69Gh88sknAIDhw4cDALRaLX7//Xe88MIL3DGV0xR+++03bN++HQAwZswYvPnmmzXOv3//fkyePJl73+Dq6nrX9hw9ehSDBw+Gk5MTAGDIkCE4cuQIBg4ciODgYERHRwOwvj9JS0u736d93yhgEULuWX0+LJBIJNzPkZGRiIyMrHXfqVOn4plnnrEJYLm5uVyA2rlzJ9asWWNzjFQqhU6nA4/HwwcffIDz58/bhK+AgAB07dr1/p8kIYQQ0ozUp6fpYak+qqRyuTLgWCwWKBQKnD17tl7HP0xV338IBAKUl5c32mNXooDViKjnihD7vLy84OXlVev2zz//HEuXLrUJYFqtlvuDnZeXh+PHjyM7Oxt6vR4AEBYWhitXrgCwfrJ16dIl+Pr6cgGsbdu2GDVqFHe8QqGw+aNMCCGEEKv09HQcO3YMXbt2xZYtW9CtWzf8+eef3HYXFxcEBwfjm2++wQsvvADGGM6fP4+oqCjExsZi69atGD16NDZv3mz3/M888ww+//xz9OrVy2aIoEwmQ2lpaY0hgt27d0dCQgJmzZoFxhh27NiB//73vw/1GtwLmm1OCKm3nj17omfPnjh8+DAOHz7MLTcGmUyG8PBw9OrVC6NGjcLLL7/MbVu2bBlSU1Oh0+lQVFSECxcuYMuWLdz2Tp06ISIiAlqtFocOHcJHH31kM6SxR48ekEqlcHd3R1RUFPr164ePPvqI275v3z788ccfyMrKgslkapTnSwghhDQX4eHhWLVqFSIiInDr1i1MmTKlxj6bN2/G+vXrERUVBbVajZ07dwKwVkletWoV2rVrh6ysLLurSciwAAAgAElEQVTnnzhxIgICAtC+fXtERUVx/4dPmjQJffv2Ra9evWz279ChAxISEtClSxfExMRg4sSJeOKJJxr4Wd8/ug8WIaTeqlfEjIuLA9DyemctFgt0Oh2cnZ0BAF9++SWuX79u00PWrVs3LF++HIwxODk5cUMMeDwePD09MWnSJCxYsACMMSxatMimeIePjw/c3d2pYiIhhJAH0hzug1W12t/jhO6DRQhpFI9KwRY+n8+FKwB1Vhc6cuSITfjKzs5GSEgIAKC4uBjz58+vcRPot99+G4sWLcKtW7cwYcIELnhVBrGoqCh4e3s3/JMjhBBCSJOigEUIIXfB4/HQsWNHdOzY0e52pVIJg8GA3NxcmwDWqVMnANYAlpKSgl9//RVFRUXccZ9//jkmTZqE8+fPY+DAgTa9X76+vhgyZAjCwsKg1+uh1+shl8updD0hhJBGFxQU9Nj1Xj0oCliNSKMzwmAyQyjgQyjgQcS3fhfyefTGibQoLbXn6mERiUTw9/eHv79/jW3BwcH466+/AAB6vR45OTnIycnhbvIskUjQo0cPZGdnIzk5Gfv27UNJSQnatWuHsLAw7Nu3DwMHDoSDg4NNCJs/fz7atGmDzMxMpKSkcOur9swRQgghpPFRwGpEH/58CV8eT7e7Tcjn2YYuAb/mOj4foirbRAL7663H3V7Hbbvb8dZtQsHtdXc5t80xAj5Et79TYCSkblKpFMHBwQgODubWhYeHY9OmTTb7abVaiEQiAEBERAQ++ugjm96xM2fOwGw2AwB2796NqVOncsfKZDL4+Pjgxx9/RFBQEH7//XecPHnSJpx5e3s3+l3tCSGEkMcFBaxGNCjaF228XGAyW2CyMBjNDCazBUYLq7LOApOZwWSp/G67zljlu67CZHMes4XBePs4Y5VzGG+f22xpvHomFBgJuX9Ve6FCQ0MxY8aMWvcdMmQIwsPDa8wRUygUAIC9e/fivffeq3FccXEx5HI5NmzYgMOHD9e4iXNMTAy97gkhhJD7QAGrEXUOckXnoLvfmfphslisgY0Lalwoux307ISy6uHObC/w3SUw2t/v7oGxasBszoFRxOdBcI+BUcTnQXCPgVHE598+pv6BUcTn324bBcZHnaenJzw9PWvdvmjRIsyYMYMLXllZWcjNzYWLiwsA4MaNGzhw4AByc3O5EvQymQwlJSUAgFdeeQVHjx61CV8hISEYN24cAECj0cDJyQlCIf13QgghhAAUsB4rfD4PYj4P4kfk9meMsTuhr7LHr0rAqy0wmm+HuNpCZPXAWBlKqwa9ugKjycxQbjTDpK/WjloCo/l2+G0sDREYHcVCyKR3vpwloirLtj87igTg8ynUNQUejwdXV1e4urqibdu2NbbPnz8f8+fPh8ViQUFBAbKzs1FcXMxtDwkJQXp6OrKzs3H27Fnk5eUhPDycC1iDBg3CkSNH4OnpyQWwzp0745133gEAHDt2jJs/plKpmlXp+pZeDZMQQppKcyndfvbsWWRnZ6N///4AgF27diE5ORmzZs1q0nZRwCItFo/Hg1hofdPuAEETt+bBMca4Hry6AqPpHnod74REe8fcLTDanrtqYDSaLdBVmFGqN0JrMKGubMjjAc4SIVykIjhLqoSyqkFMcieYOVf52UUqgvPtfUSC5vPm/FHD5/Ph4eEBDw8Pm/WvvfYaXnvtNW7ZZDJBo9Fwy5MnT+aKdGRnZyM9Pd1mftfo0aNx7do1AIBQKIS3tzeGDBmCFStWAABWrlwJZ2dnmx4ypVJJvayEEPKYMZlM9zwa4uzZszh16hQXsAYOHIiBAwc+jObdEwpYhDQTPB4PIgEPIkHLCoyMsdthy4RSvRGlBtOdn/UmaG//XKI3QWu4s76wrAJphTpu2WCy1PlYUhEfzhIRXLiAJoTsds+Z8+3eMpdqAa16r5qDSEBv3h+AUCiEm5sbtzxixIi77r9161ZkZGTYzA+rrLbIGMPrr78Og8Fgc8ykSZPw+eefw2KxYOTIkfDy8oKvry8XwNq0aQMfH5/7fg7Vb5hNPVmEkEfJw/ibtmzZMnzxxRcAgIkTJ+L555+HyWTCqFGjcObMGajVamzatAmOjo6YNWsWdu3aBaFQiD59+mDp0qXIz8/H5MmTkZ5uLfa2YsUKxMbGYv78+UhNTcW1a9cQEBCA69evY/369VCr1dxzWbp0KSwWCxITE6HX6+Hg4IANGzYgODgYc+fORXl5OY4ePYrZs2ejvLwcp06dwsqVK5GWloYJEyagoKAA7u7u2LBhAwICApCQkAAXFxecOnUKubm5WLJkCYYOHdpg1wqggEUIeUA8Hg9OEiGcJEJ4yaX3fR6DyQwtF8JMKKkW0Epvbyu5vVy5X36p9vY+JmgrTGB19KYJ+DyuF62yV+1OQLMGMev6Oz9XH/boLBFCSL1p9dK5c2d07tzZ7jYej4dbt24hJyfHJoBFRkYCAEpLS3H+/Hn88MMPKC0t5Y6bP38+5s2bh7y8PHTv3t3mBs4+Pj549tln0bZtW5hMJhgMBjg5OTXKcyWEkEfR6dOnsWHDBpw4cQKMMcTExCAuLg6XL1/G+vXrERsbiwkTJmD16tUYP348duzYgUuXLoHH43FDzhMTE/Haa6+hW7duSE9Px7PPPouLFy8CAJKTk3H06FE4ODhg+fLl+N///ocFCxZwtzXp1KkTSkpKcOTIEQiFQuzfvx9z5szB9u3bsXDhQi5QAcDGjRu5dv/zn//EuHHjMG7cOHzxxReYPn06vvvuOwBATk4Ojh49ikuXLmHgwIEUsAghjyaJUACJswBuzpL7PofFwqCtMHGBq3qPWm3r80r1SMm/s2w01z0fzlEssBu+ZBKRTViTVduncpuLVASJkP/Y96Y5ODigVatWaNWqVY1tcrmc+w+4tLSUC2J+fn4ArMNJOnTogOzsbJw6dQpZWVkoLy+HUqlE27ZtcfbsWXTu3BkuLi42QxCXLl2KTp06ITY2FjqdDl9//XWNoZGEENLSPKze+aNHj2Lw4MHch1VDhgzBkSNH4O/vj9jYWADW4eCffPIJXn31VUilUvzjH/9AfHw84uPjAQD79+9HcnIyd86SkhJotVoA4O71CADDhg1Dnz59sGDBAvzvf//jgo9Go8G4ceNw9epV8Hg8GI3GOtt97NgxfPvttwCAMWPGYObMmdy2559/Hnw+H5GRkcjLy3ug62MPBSxCyCODz+fBRSqCi1R03+dgjMFgstwJZdWGPFZ+aQ13lktu75ej0XNBrqzCXOdjCfk8m16zmgVCqhcPqbrdeoyzRAjBY1BARCaTQSaToXXr1tw6X19fbN26lVtmjKGkpIQbw+/p6Yn333/fpnfs6NGjSEhIAGD9DzspKQleXl5wdnZGSEgIQkJCsHjxYoSHh6OwsBBarRZ+fn4QCFrOsF1CCGkM1T8g5PF4EAqFOHnyJA4cOIBt27Zh5cqVOHjwICwWC44fPw6ptOZIl6qjDHx9feHm5obz58/j66+/xmeffQYAeOedd9CrVy/s2LEDaWlpXHi8XxLJnQ9zWV1DX+4DBSxCCKmCx+NBKhJAKhLAXXb/vWlmC7P2mFUJYpWhrKTa0MfKIFeiNyGruNwmvNXndgSVQat68ZDq89Eqf+aGP1YJbhJhyw8QPB4PcrmcW/b398ebb75Z6/6//PIL/vjjD6SmpiIlJQWpqalISkriKh1u3rwZiYmJEIvFCA4O5gLY/Pnz4erqipKSEkgkEpv/qAkhpKlU9lQ19Bys7t27IyEhAbNmzQJjDDt27MB///tfJCYm4tixY+jatSu2bNmCbt26QavVQqfToX///oiNjeVGJ/Tp0weffvop3njjDQDW4hTR0dF2H2/48OFYsmQJNBoN2rdvD8D6gZivry8A22GAMpnMZgh5VU8++SS2bt2KMWPGYPPmzejevXuDXI/6oIBFCCEPgYDPg9xRBLnjg/Wm6Y0Wu0VC7tajpik3IvOWjpvDVm6suzdNLOBXCWi2xUNc7FR3dJbemadWuc1JLGxR5fjd3d25ylP2PPvss1izZg0XvlJTU3H06FH861//AmC9x9hHH30Ef39/hISEIDQ0FCEhIXj99dchEAjuqyIWIYQ0Nx06dEBCQgK6dOkCwFrkQqlUIjw8HKtWrcKECRMQGRmJKVOmQKPRYNCgQdDr9WCMYdmyZQCATz75BNOmTUP79u1hMpnQo0cPrnequqFDhyIxMZG73QcAzJw5E+PGjcO7776L5557jlvfq1cvvP/++4iOjsbs2bNtzvPpp59i/Pjx+PDDD7kiF42Fxx5Gv1gT69SpE06dOtXUzSCEkGbBaLZwBURK9DV71O583SkmYhvg7q0cv0xSfc6ZqEop/rsNiRQ1+3L8jDFuWMzhw4fxyy+/2PSAmc1mFBYWArBWWDx48CAXvEJDQ6FWqxt8MjUh5NF18eJFRERENHUzHkv2rn19MwZ9tNaIqBQwIaQpiAR8KJ3EUDqJ7/scjDGUVZhrLbtfazl+bQVu3C7HX6I3oaIe5fglQv6dkvv1KB5yp3DInfDmKH445firnjMuLg5xcXE223U6Hfdz//79IZPJkJqaisOHD2Pz5s1o3749F7D69++PnJwcLoCFhIQgKiqK+5SYEEJIy0QBixBCSJ14PB4316shyvGXVutRq60cf+Vyfqn2zn4GU52PU1mOv7KnzKXanLPK4iFyBxFUzmK4yyRQOUvgLpPAUXz//zU6OjpyP48dOxZjx47llvV6PYqKirjlyk9Cz58/j507d8JoNCI+Ph67d+8GAPTu3RsODg42PWBt27bl7iNGCCGkeaKA1QjoppaEEGLV6OX4bweyUr0ReSV6pNajHL+TWACVTAJ35zuh68532zAmFdW/OIhUKrW5QfLChQu5n81mMzIyMrjSw4wxKJVKXL16FYcOHUJZWRkAYMqUKVi9ejVMJhP69++P4OBgmx6w0NBQuu8XIY+YqkOTSeN40BlUFLAIIYS0KA1Zjl9TbkSB1oD8UutXgbbi9nfrcmq+FsevF6JYZ/+eKzKp0BrEbgcyeyFMdTuoiYW1zy0TCAQICgrilnk8HrZt28a19ebNm0hJSYFSqQQAFBcXo6SkBNu3b+fmfAHA4sWLMXv2bOTl5WHmzJk2xTdCQ0Ph6upKb9QIaUGkUikKCwvh5uZG/3YbCWMMhYWFdkvK1xcVuWhE1HNFCCEtU4XJgsIyg034qgxj+Vrb9aV6+0MYFY4ia+iqEshUMrHNsodMAlcnMYT3UOhDo9FwhTbatm2LyMhInDt3DvHx8cjMzLTZd/PmzXjxxRdx5coVbNy40abny8fHhytRTwhpHoxGIzIzM6HX65u6KY8VqVQKPz8/iES2H+RRkQtCCCGkgYiFfHjLHeAtd6hzX73RXCOEFVQLYX9lFiO/1GD3htQ8HuDqKK51WGLld3eZBEpHMeRyOTp06IAOHTpw54iKikJGRgbKy8tx/fp1LoDFxMQAAJKTk/Hhhx/CZLoTBqVSKQ4dOoSYmBicO3cOR48e5Xq/AgMDa7zRIIQ8fCKRCMHBwU3dDHKPKGA1Iuq5IoSQR59UJICf0hF+Ssc699VVmFBQWoF8rR75pRXI1xpQcLtXrPL7jfQy5JcaoDfWrMDI5wFuzjXniFUOV3R3lkDl5o9ugaF47rl47j5lzz//PMrLy5GRkcGVmE9JSeHeyP300082N2kWCAQICAjAb7/9Bm9vb5w+fRoZGRkICQlBq1ataN4XIYRUQQGLEEIIaSKOYiEC3IQIcLt7GGOMQWsw1dojxs0Zu6lFfqkBFeaaYUzI51nng1UOS+RCWSh8u6oR3UeCEkggKTfi9ddfx5gxY2zu8ZWamgqVSgUA+OKLL7B69Wru3F5eXggLC8Mvv/wCgUCAP//8EyaTCSEhIXB1dW3Yi0YIIc0czcEihBBCHiGMMZSUm2rMDbP5rjWgoLQCBVoDTHbuIC0W8O86PNGBZ4Q2Pxu3cm4g/VoKrl1LhUajwfbt2wEAAwcO5MrNK5VKhISEoHPnzlwou3jxIuRyOby9vWniPiGkxahvxqCARQghhDymLBaG4iqVFLmKitULeZQaUFRmgJ0sBqmIfyd83S7YIajQQl+cD11RLoqy05CbdhVuTiJs27oFAPDEE0/g7NmzcHBwQKtWrRASEoKnnnoKiYmJAIDs7Gx4eHhAKKSBNoSQ5oMCFgUsQgghpMGYLQxFZRW1Dk+sWlWxqKzC7jmcxAK4yyQQmfXgGUph0t6CrigXt3JuIMzfE+++/SZUzmJEtwmBpqgAgYGBXJXDZ599FgMHDgRgvWnzg5RQJoSQ+0EBiwIWIYQQ0iSMZguKyu4ErjuFOypu947puUCmKbd/jzERTBAYy2DW3kJZUS4ig/0wuF9vuIh5eHncSLg6ChHoqUTrAG+EhbRC3759bSopEkJIQ2sRAWvChAnYs2cPPDw8cOHChRrbGWNITEzE3r174ejoiI0bN9brjycFLEIIIaRlMJjMKNTa6xm7MzyxQGvAzVIDtAb79xgzl5fAXSZBeIAPpKjATzu/gaujEF4KRwR4KBHm74m+PWPRLizonu4xRgghVbWI+2AlJCTglVdewdixY+1u/+GHH3D16lVcvXoVJ06cwJQpU3DixIlGbiUhhBBCHhaJUAAfhQN8FPW7x5i9EJZ9S4vCsgrcKjfjxi0DHNo+DS1PiBQAKWbgYBrw+caL4PEuwlnEQ1lBNpwEFigdBPBSOCLQU4knIkLh7y7n5pO5Ooq5svaEEHIvmjRg9ejRA2lpabVu37lzJ8aOHQsej4e//e1vKC4uRk5ODry9vRuvkYQQQghpFqQiAfxdHeHvWvc9xsoMJhRoDci5VYbk65kwCR2hNfGRlJKOPwr00FbwccskRJpZgpMlZnxz9bLN8TxmgYPAAlcHATzl1hDm4eJQ415jKmcJFI4iqoZICOE06/I8WVlZ8Pf355b9/PyQlZVlN2CtWbMGa9asAQDk5+c3WhsJIYQQ0vw4SYRwkggR6OaEv4V63NnwTGsATwMALBYLsrKycOFyCgLD20Fr4mPnTwex48eDKCyrQInQEQVOSqQ6KZDZWo0inQlGc82ZFZX3GHOXSe5a3l7lLIGLVEhhjJBHXLMOWPdi0qRJmDRpEgDr+EhCCCGEkLvh8/nw9/e3+TC3y+SheG/yUDDGUFhYyN1keeTIZwAAc999H2v/+zWK9RYInJUQOCkglrlh0OTpKCyrQPL1LGgMDAaIYEHNICUW8rly9tZeMLHNctXvTmIBhTFCWqBmHbB8fX2RkZHBLWdmZsLX17cJW0QIIYSQxwGPx4NKpYJKpUJMTAy3ftE7s7HondkoLS3FtWvXkJqaioKCAkwaFg0AGDVqFLZu3QqLhYHvIIPASYlW6mi8v3wV8ksNOHjsFEqNWph0zriuE+NshgWFZRWwV3LMQSSos0fM4/Z3B7GgsS4NIaQOzTpgDRw4ECtXrsSIESNw4sQJ7q7vhBBCCCFNSSaTISoqClFRUTbrN2/ejA0bNiAtLQ0pKSlITU0Fn8/H809YPyD+eOpAJCUlcfuLxWL8fegL+Piz9cgvNeDrnXvBJDKIZK6wiJ1RVG6dS3a9oAx/pN2q9R5jLlIhfJWO8FU4wE/pAF+FA3yrfHdzElNvGCGNpEkD1siRI3Ho0CEUFBTAz88PCxYsgNFovR/G5MmT0b9/f+zduxehoaFwdHTEhg0bmrK5hBBCCCF1EovFaN26NVq3bl1j27lz55CVlcWFr9TUVAQEBHA9VUtf/wd0Oh0Aay+av78/Jk2ahLfeegsAsG37Drj6BMDJzRs6i/D2fcUMyNXokVVcjowiHY5fK6xR0l4q4sNH4WAngDnCV+kAT5mEStgT0kDoRsOEEEIIIc0AYwwFBQU24SslJQVxcXGYOHEiioqK4Obmxu3v4eGBkJAQJCYmYvjw4TAajbh27RpatWoFnRHILNYh61Y5sorL73y//XNhtZ4wAZ8HLxdpjZ6vqt+lIhqGSB5vLeI+WIQQQgghxIrH48Hd3R3u7u7o2rVrje0ymQxnzpyxCV+pqamo/Kw8OTkZ0dHREIvFCA8Ph1qtRmRkJEaMGIGw2Eibc5VXmJGtKa8ZwG6V4+T1IuRoymGp9hG8yllsG7wUDtywRF+lA+QOood2bQhpSagHixBCCCGkBevZsycAYNu2bfj++++RlJSE5ORkJCUlIS0tDT/++COeffZZ/PTTT3j99dcRGRnJhS+1Wo2wsDAIhbafuZvMFuSW6GvtAcsqLofBZLE5RiYRWoch2ukB81M4QOUsoZs3kxaNerAIIYQQQh4jKpUK48aNs1lXVlbGhSepVIqgoCCcOnUK33zzDdfzdeHCBajVauzfvx+//fYb1Go11Go1QkND4ae0f1NnxhgKtBXIKi5HdpXQlXn7+6m0IpTobeeBiQV8+CikVXrAHLmf/ZQO8JJLIaJ5YOQRQAGLEEIIIaQFquy5Onz4sM3yoUOHuH2cnJy4n+Pi4hAXFwfAGrwuX76MpKQkhIWFAQCOHj2KhQsXcsFLJBKhdevW+OOPP+Dg4IDk5GQAQFhYGEQiEXdj5Wh/hd32leqNNYYfZt7+/svlfOSXGmz25/MATxcpV4yjeg+Yr9IBjmJ660qaP3qVEkIIIYQ8ZpycnNChQwd06NCBWzd//nzMnDkTly5d4oYZZmVlwcHBAQAwd+5cbN++HUKhEK1bt4ZarUanTp0wc+ZMANZeraql4GVSEdp4idDGy8VuG/RGM3I0eq4HLJMLYzr8mXELe//KganaRDClo6jWHjBfhQMUjiIqR0+aHM3BIoQQQghpwez1XD0MycnJOHPmDDe/Kzk5GW5ubjh+/DgAoEePHigoKODmdqnVakRHR9stV18fZgvDzVJ9jeGHVXvEyo1mm2McxQL4Khxs5oJVLUvvIZNCQPPAyH2iOViEEEIIIaTBREZGIjLSthqh2Xwn4PTt2xcnT57EuXPnsGPHDlgsFgwePBjffvstAGDSpEnw9va2Ka4hkUhqfTwBnwdvuQO85Q7oZGc7Ywy3dEZk1whfOmQVl+N8ZjFu6Yw2x4gEPHjJpTY9YH5Vwpi3QgqJkMrRkwdDPViEEEIIIaRBlZeX4/Lly+DxeIiKioLBYED79u2RkpICi8VafVAgEGDu3LmYO3cujEYjvv32W0RGRqJ169Z3DV73osxgsgawYvsl6fNK9aj+TthDJoGv0toL5menKqJMSuXoH1fUg0UIIYQQQpqEg4MDoqOjuWWJRILLly9Dr9dzxTWSk5PRpUsXAEBKSgpGjBgBwBq8QkNDoVarkZiYiB49esBoNMJsNkMqld5TO5wkQoR5yhDmKbO7vcJkQa5GX60EvbUHLClLg31Jeagw25ajd5EKuft/+dkpSe/mJKZ5YI85CliEEEIIIaRRSKVSREVFISoqymZ9aGgozp07ZzO/KykpCaWlpQCslRKfffZZLnhVDjPs06cP3Nzc7rs9YiEfAW6OCHCzX47eYmEo0Brs9oBlFOlw/FohtAbbcvRSEf9OJUQ7FRG9XKQQUjn6RxoFLEIIIYQQ0qREIhHat2+P9u3b293u7++Pt956C0lJSUhKSsKuXbtgNptx+vRpuLm54bvvvsN//vMfm/AVHh5+zz1e1fH5PHi4SOHhIkWHAGWN7YwxlJSbqvSA6Wx6wy7mlKBAW2FzjIDPg5eLtEbwqvpdKqJ5YC0ZBSxCCCGEENKshYeHY+HChdyywWDAlStXEB4eDgAoKSnBpUuXsHv3bq7wBp/PR15eHlQqFQ4dOoTs7GxERkYiPDycKz3/oHg8HuSOIsgdRYj0qb0cffW5X5XfT14vQm6JHuZq5ehVzuI71RBr3BPMES4OQhqG2IxRkQtCCCGEEPJIMBgMuHr1KpKSkpCSkoI5c+aAx+Nh1KhR2LJlCwBr8GrVqhU6dOiAr7/+GgCQlZUFV1fXBgte98JktiC3RI/sYr11/pedsvQGk+08MGeJsNYeMD+FA1TOEvCpHH2Dq2/GoIBFCCGEEEIeaRUVFbh69arNHC+z2Yzt27cDAOLi4nDkyBG0atWKG2bYtWtXDBw4sIlbbh2GWFhWUaMH7E4A06FEbzsPTCzgw0ch5YJX1Z4wP4UjvORSiIU0D+xeUcCigEUIIYQQQuphz549OHXqFBfArly5gj59+uD7778HAPTu3RtOTk42c7zatGkDR0f7xTEaW6neaNMDVr0ox81Sg83+PB7gKZPW2gPmq3SAo5hmElVHZdoJIYQQQgiph/j4eMTHx3PLRqMRxcXFAACLxQJ3d3dcuHABP/zwA0wma2/RSy+9hDVr1sBiseCtt95CREQEIiMjERERAScnp0Ztv0wqQriXCOFe9svRG0xm5BTrucCVWaUk/Z8Zt7D3rxyYqs0DUzqK7gQvhSN8FNLbZemtN2hWOopoHlgtqAeLEEIIIYSQejAajUhJSUFSUhL8/f0RExODjIwMhISEwGg0ArAWvggKCsK7776LF198ETqdDsnJyU0SvOrLbGG4Waq33pTZTjGOrOJy6CrMNsc4igU1inBUvS+Yh0wKwSM2D4x6sAghhBBCCGlAIpEIERERiIiI4Nb5+/ujrKwMqamp3BDDpKQkeHh4AABOnTqFuLg4AEBQUBA3zPCll15CWFhYkzyP6gR8HrzlDvCWO6BjYM3tjDEU64w1im9U3pT5fGYxbumMNscI+Tx4K6RcD5g1hEm5n30UUkiEj2Y5eurBIoQQQggh5CEpLCzE4cOHbW6gfPnyZRw+fBh/+9vfsHXrVsyePZub21X5PSoqCmKxuKmbX2+6CtNde8DySvSoNgoR7jJJjblfz0R6wlve+NUc64N6sAghhBBCCGlibm5uGDJkCIYMGcKtM5lM3PwlLy8v/O1vf0NycjL279+PigrrjYnT09Ph7++Pb7/9Fr///jvUajXUajUiIiIgk0LNyQ0AACAASURBVNmfa9WUHMVChHrIEOphv21GswW5Gr3dHrCkLA32JeWhwmxBa09Zsw1Y9UUBixBCCCGEkEYkFN55C96zZ0/07NkTgDV4Xbt2DcnJyfDz8wMA/Pnnn1i5ciUMhjuVAFu1aoUrV65AIBDgxIkTAIDIyMhmGbwqiQR8+Ls6wt/VfuVFi4WhoMwAF6mokVvW8GiIICGEEEIIIc2YyWTC9evXuWGGRUVFWLp0KQDgmWeewf79+wFY54Op1Wp069YNb731FgDrPcBaylDDyqB56NChJm1HbWiIICGEEEIIIY8AoVCIsLAwhIWF4fnnn7fZ9vnnn+Ovv/6ymeNV2asFANHR0dBqtTbzuzp37ox27do19tN4bFDAIoQQQgghpIVq1aoVWrVqhUGDBtndPn78eJw7dw7Jyck4dOgQ9Ho9xo0bh40bN4IxhsGDB6NVq1Y2RTbkcnmjPofKnqvDhw/bLDfXnqy6UMAihBBCCCHkEfXGG29wP5vNZqSlpXHLGo0GGRkZ+Pnnn1FeXs6tf++99zBnzhxotVps3boVkZGRiIyMhEKhaMymt1gUsAghhBBCCHkMCAQChISEcMsKhQKnT5+G2WzGjRs3uGGG3bt3BwAkJSXhpZde4vb38fGBWq3GvHnzEBsbC51Oh4qKigcOXpU9VS2956oSBSxCCCGEEEIeYwKBgBtqOGDAAG59586dbW6gXPm9ssT83r178cILL3DBq3KY4ZAhQ+Dm5tZUT6fJUcAihBBCCCGE1MDn87ngFR8fX2N7+/btsWTJEiQlJSEpKQnr1q1DWVkZnnrqKbi5uWHDhg3YvHmzTfiKjIyEq6trEzybxkMBixBCCCGEEHLPWrdubTPHy2KxID09HQEBAQAAHo+HkpISrF+/HmVlZdw6rVYLR0dH7Nq1Czk5OVz4elRQwCKEEEIIIYQ8MD6fj6CgIG45ISEBCQkJsFgsyMjIQFJSEtLT0+HoaL3Z8MaNG7Fjx44a52npc7EoYBFCCCGEEEIeGj6fj8DAQAQGBtqs37ZtGzIyMhAfHw+dTodr1641UQsbFgUsQgghhBBCSKOrDF5//fUXgJbfc1WJAhYhhBBCCCGkUTHGUFZhRrGuAsU6I0rKjShzbQ1pSUZTN+2BUcAihBBCCCGE3BeT2QJNuRHF5UYuKBWXW0OTpvz2l866XVNuRLGugltvsrD/Z+/O46Ms7/3/v2fJTFYSEsKShS1sCaiISVgUEhBFBcHWDUsVRRpXjkt/KD22Vmtda2095fRnqRbkWLWlKrggKgrhIJYQcDsQFBQUCGjYSUIymZn7+8dk7swkE4iQZLK8no9HHsnM3Pc914wR5s3nuj5X8MUGT9P/zBoZnhfSjMIasFasWKE77rhDHo9Hs2fP1rx584IeX7RokebOnavU1FRJ0u23367Zs2eHY6gAAABAh2QYhipdntoA5AtIR82f6wcll3nckcoalbvcJ7x2nNOuhGiHEqIjFB8VoV7xXcyf46MilBDlUHzt7YToCPVOjG6lV91ywhawPB6PbrvtNr333ntKS0tTTk6Opk6dqqysrKDjrr76as2fPz9MowQAAADaB7fHq6NVbrNSdPh4TV1QCqwoBVSYDtcGpxqvt9HrRlitio+OUEJtCOrZJVKDe/iCUpdI331BoSnaoYSoCMVF2mW3WVvxHWgbwhawioqKNGDAAPXv31+SNH36dC1btqxBwAIAAAA6C8MwVFXjDaoUBU69M6tH5pS7uql3x6pPXE2Kddh9QSnaVznq0SXSDE5douoCVHyUw6woJURHKCrCJovF0krvQPsXtoC1Z88epaenm7fT0tK0fv36Bse98sorWrNmjQYNGqQ//OEPQecEWrBggRYsWCBJKisra5lBAwAAAE3g8Ro6VlUTVCk6XFk39c6sHoWYeufyNF5NslstQZWi7nFODewea06zM4NR4NS72gAV0QmrSeHQpptcXHrppbrmmmvkdDr1l7/8RTNnztQHH3wQ8tiCggIVFBRIkrKzs1tzmAAAAOigqmo8DSpF/ql3R+qvU6p97Ejt48YJrhvjsAcFogHdY2tvO+oFpYiANUoOxTioJrV1YQtYqamp2rWrrg3j7t27zWYWfklJSebPs2fP1j333NNq4wMAAEDH4PUaOlbtblApCg5KrpBT76rcnkava7VYfAGoNgQlxjjUPznWDEhBQSk6ODw57FSTOqqwBaycnBxt27ZNO3bsUGpqql5++WW9+OKLQcfs3btXvXr1kiS9/vrryszMDMdQAQAA0AZUuz3Bbb8rA6beVbnNClJwUPI95jUarydFRdjq1iFFR6hvUozi03w/d4mqa+CQEFXXDS8+OkKxDrusVqpJCBa2gGW32zV//nxNmjRJHo9Hs2bN0tChQ3X//fcrOztbU6dO1X/913/p9ddfl91uV2JiohYtWhSu4QIAAKAZGIah8mp3g2qRf++ko1W1wcmsNtUFp+M1jVeTLJI5jc7fsKFPUnTQGqSEaEfw1Lva+yMjbK33BqDDsxjGCeJ8O5Wdna3i4uJwDwMAAKDDqvFvMFtZr+13UDvwuo1l/RWnI8dr5DnBx0+HzaqutfsmBXe281eOHGY4Mps51LYEp5qEltTUjNGmm1wAAACg5RiGoQpzg1mXGYDqT7PzB6jA+ypOssGsuT9SbZUotWt03Xql2il2dUGpbuod1SS0dwQsAACAds5dW02qXyk6HNDVLmjtUkDlye1tvJoUYbOaFaSEKIdSEqKUldIlaL1SfODUu9r74iIjZKOahE6KgAUAANDGVLrcOlDu0sGKel+VLh0sd+lAhUsHK6p1qLJGB8qrT77BrNMeNJ2uZ3ykGYb8lab6m8smRDkUGWGlJTjwAxGwAAAAWpBhGDp63K0DFdU6WOEPR76vQ7XfD9QLUo21Bo+wWpUY4zC/0rpGKzHGoa7RDsVH2X2VpIDNZROiHeoSaZedDWaBVkPAAgAA+AHcHq8OVdbUBqPqoGB0qF5YOlDh0uHKxqfhRUfYlBjrUGKMU8lxTg3qEaekWF9gSvIHqViHEqN93+OcdipKQBtHwAIAAJ1aVY0nKBAdrKjWgXJfUwf/7cAq05HjNY1eKz7Kt9lsUoxDfZKidXbvBLPClFQbpJJiHOpaewwNHYCOh4AFAAA6DMMwdKzaXVdJKg+uJB2oF6QOlrtU2cjeSjaLxQxCiTEOZfXqYoajwGl6STFOdY2JUNdohyKYigd0egQsAADQZnm8hg5XunSo0mU2fQhaw1RZe195XROIGo835LWcdquSYpxmMMroFuOrLgWFpbrQxL5KAE4FAQsAALQal9sbtGbJv4bJX3EKDFIHK3wtxr2NbEob57SbwSglIUpnpMab65UCK0+JMb7pedEOPvYAaHn8SQMAAE6JYRiqdHnqBSb/mqWaet99j5U30k7carGoa3SEuV5pYI/Y2nDkVGJ0hBJjnb5GD7VhqWu0Qw470/EAtD0ELAAAIEnyeg0drapp0DK8foA6FFB9qnaHno4XYbMGVZDSE33txP3d8JLqNX6Ij2JjWgAdAwELAIAOyu3x+jam9Td7qGwYlg6W107Lqw1Onkam48U46qbjdY9zanDPuKCGD0n1Gj/E0k4cQCdFwAIAoJ2oqvGYoehARbW5XilUo4eTtRNPMNuJO9U3KUYj+nQNuXbJ/0U7cQBoGgIWAABh4G8n7gtL/qqSb81SXaOH6rrAdIJ24narRV0D1icNTYlXUoxDCdERtWHJaT6WGONQQlSE7LQTB4AWQcACAKAZ+NuJB7YRD1yvVL8JxKGKGtV4Q69firTbggJRRvfY2sAU0EY8ti44dYlkOh4AtBUELAAAQqh2e3SoosZsI+6fgtdws9raduKVLoVevSR1iYwwp9qldY3SWWnx5u2uAU0f/FP2ohxMxwOA9oqABQDoFGo8vv2Xyo5Va395tf6/+x6UJyJaV193Y1AbcX9DiHLXidqJ13bBi4nQ4B5xQWuVAtcw+ZtARDAdDwA6DQIWAKDdqnS5daDcpbLyau0/Vq0DFa667+W+IHWg3Pfz4XoNH4yMiyVJCz/c4QtEtXsr9UmMrp16F2FOwUsMCEzxURGy0k4cANAIAhYAoM0wDENHjtdof3lwQDpQXq2y2u/7y+uCVGNNH7pERqhbrENJsU4N6hGn0RlJSopxqlucQ3987Ley1VRo44er5Kk8orGjc2WR9Obq1a36WgEAHRMBCwDQoty1U/P8oelARbX2H3Npf0VddakuSLlCNn6wWixmBSk5zqk+STFKivEFqG6xDnWLdfq+4nyVJqe98TVMfz20zTeuw/skSdSiAADNiYAFAPjBqmo8tcHIPyWvui5A1QtNhxpp/uCwWWuDkUM94iI1tFe8kmIbhqak2ql7tmaalre6tlKVn58fdBsAgOZAwAIAyDAMHa1y107B8welhqHJPzWvsQYQsU67kmtDUUZyrHL7OWpDklPdYhzqFlcXmuKctBYHAHQ8BCwA6KA8XqO2M17tlLyA9UuhwpPL03BqnkUyW4d3i3PozLR4JcX4ApI/SPmm5jmVFONQZET7aS9O5QoA0BIIWADQjlS7Pdof0OwhMCQFhqb9tVPzvEbDyXkRVmtdMIp1aFCPOPPnpHpT8xKjHbLTYhwAgCYjYAFAGBmGofJqd9C6paDQVK/6dKw69NS8GIfdDEd9kqI1ok/XutAUU7umKc6pbjFOdYliah4AAC2FgAUAzczrNXSo0mWuVyqrF5YOVPhajvubQ1S7G07Nk2RuZtst1qmhqfG1P/ubQAQ3gohytJ+peQAAdGQELABoApfbqwO1bcUDN7U9UB5wX+00vYMVLnlCTM2zWSxBU/AykmPMdUy+NU51oSkxxqEIpuYBANDuELAAdFoV1e4GU/LM7nm11Sd/U4gjx2tCXiPSblO3OF8oSusapeHp8b71SzENK03xURGyNlOrcQAA0DYRsAB0GF6voSPHa3xT8I7VhaUDFa6gIOUPU8drPCGv0yUywgxFQ3p2MaflBVaf/I/HOPljFAAA1OGTAYA2rcbj1cHAgFS7bsk/LS+wOcTBCpfc3oZT86wWixJj6rrm9U2KqQtNMXXNH7rF+abqOexMzQMAAKeGgAWg1R13eUJ0zAu9qe2hSlfIazhsVnP/pZ5dIjUsJV7d4hxKrO2Yl+zf3DbWoa7RDqbmAQCAVkHAAnDaDMPQ0ePu2opSQFCqCB2eKlyhW43HOu1Krp2CN6B7rEb5G0DEOpVcOyXPH5pinbQaBwAAbQ8BC0BI/lbj+8tdKjtWfdKKU423YatxixQwNc+p4ekJZoe85Ni6KXnd4nxT9SIjaDUOAADaNwIW0Il4vEaDjWv9AaksYI2Tfz1TqFbjEVZr3aa1sQ4N6RlnBiR/kEoKaDVuY2oeAADoRAhYQDvnbwJRV2UKrjAFVp8OVrjUMDIFr2dKSYjUmWnxQUEpOc4XnJJjneoSxdQ8AACAxoQ1YK1YsUJ33HGHPB6PZs+erXnz5gU9Xl1dreuuu04bN25UUlKS/vGPf6hv377hGSzQilxub1CFaf+xhh3z/GGqsSYQkXZbbTByqHditEb06RrUXtz8Oc6pONYzAQAANIuwBSyPx6PbbrtN7733ntLS0pSTk6OpU6cqKyvLPOa5555T165dtX37dr388su699579Y9//CNcQwZOS1WNR/vrTcOrvzeT/+fGNrWNcdjNgNS/W6xy+9U1fkgODE5xTsU4bIQmAACAVha2gFVUVKQBAwaof//+kqTp06dr2bJlQQFr2bJleuCBByRJV1xxhW6//XYZhsGHRrQZ/nbjZeXVtaHJ1aDy5H+8vPrknfMG9YjVmIwkJcU4zepTtzin+XiUgyYQAAAAbVnYAtaePXuUnp5u3k5LS9P69esbPcZutys+Pl4HDhxQt27dGlxvwYIFWrBggSSprKysBUeOjswwDFW4PEEVprJyV+16pvrNIRpvNx4fFWFOwctK6dJwal5c3W065wEAAHQcHabJRUFBgQoKCiRJ2dnZYR4N2hLDMHSs2h2iwlT7c0BziLJj1apye0Jep2u0wwxFZ6YlmE0g/O3GAzvoOe2EJgAAgM4obAErNTVVu3btMm/v3r1bqampIY9JS0uT2+3WkSNHlJSU1NpDRRsUuLGtWWk6FtwEoixgrZPLc/I9mkb0jlZynH8j27oKU3Kcr914hM3a+i8UAAAA7UrYAlZOTo62bdumHTt2KDU1VS+//LJefPHFoGOmTp2q559/XqNHj9a//vUvTZgwgfVXHZjXa+jw8RqzquTfl+lAqIpThUs1IUKT1WKp248pzqmM5BglB7Qbr5ui51BitEN2QhMAAACaUdgClt1u1/z58zVp0iR5PB7NmjVLQ4cO1f3336/s7GxNnTpVN954o6699loNGDBAiYmJevnll8M1XJwij9fQoUpXyPVL++tVnw5WuOT2NtylyW61KCmmbhreoB5xIdY0+abqdY12yMrGtgAAAAgTi2EYofYdbdeys7NVXFwc7mF0WG6PVwcrXebeTP5peAcqXEGVJ//Gtt4Qv2IRVqvZIc+/gW23OEdtkPKFJ3/nvPioCEITAAAAwqqpGaPDNLnA6anxeM31S4EtxxtMz6sNTaFSudNuNStKqQlRGp4e72v6EFMXpPxhqksUG9sCAACg4yFgdWDVbk9Q0wd/xSmoEURt9elwIxvbRkXYzOl4vROjNaJP1wbT8/z7NcU6CU0AAADo3AhY7UxVjScgGNU1fThQETxdb3+5S0erQoemGIfdDEgDusdqVP+koCYQyQEtx2Oc/IoAAAAATcWn5zag0uWuW88UUG06UBG8uW1ZebXKq0NvbBvntJvT8Ib07KJusY7gduNxTnNNU5SDPZoAAACAlkDAakVvf75XH361v0H1qbIm9Ma28VERZkDKSunSYG8mfyvypBiHIiMITQAAAEC4EbBaUfE3h7T8831mx7zh6Qm+JhD+0BTQcjwpximHnT2aAAAAgPaEgNWKfjk5U7+akhXuYQAAAABoIZRIWhEd9gAAAICOjYAFAAAAAM2kSVMEy8rK9Ne//lU7d+6U213Xxe5vf/tbiw0MAAAAANqbJgWsadOmaezYsZo4caJsNrrVAQAAAEAoTQpYlZWVevzxx1t6LAAAAADQrjVpDdaUKVO0fPnylh4LAAAAALRrTQpYTz/9tKZMmaLIyEjFxcUpLi5OXbp0aemxAQAAAEC70qQpgseOHWvpcQAAAABAu9fkjYZff/11rVmzRpKUn5+vKVOmtNigAAAAAKA9atIUwXnz5unpp59WVlaWsrKy9PTTT+sXv/hFS48NAAAAANqVJlWwli9frk8++URWqy+PzZw5U2effbYeffTRFh0cAAAAALQnTapgSdLhw4fNn48cOdIigwEAAACA9qxJFaxf/OIXOvvsszV+/HgZhqE1a9bosccea+mxAQAAAEC70qSAdc011yg/P18bNmyQJD3++OPq2bNniw4MAAAAANqbE04R3Lp1qyRp06ZN2rt3r9LS0pSWlqbS0lJt2rSpVQYIAAAAAO3FCStYTz31lBYsWKCf//znDR6zWCz64IMPWmxgAAAAANDenDBgLViwQJL09ttvKzIyMuixqqqqlhsVAAAAALRDTeoiOGbMmCbdBwAAAACd2QkrWPv27dOePXt0/PhxffzxxzIMQ5J09OhRVVZWtsoAAQAAAKC9OGHAeuedd7Ro0SLt3r1bd999t3l/XFycHnnkkRYfHAAAAAC0JycMWDNnztTMmTP1yiuv6PLLL2+tMQEAAABAu3TCgPXCCy/opz/9qXbu3KmnnnqqweOBVS0AAAAA6OxOGLAqKiokSeXl5a0yGAAAAABozyyGv3NFB5Kdna3i4uJwDwMAAABAB9HUjNGkNu333HOPjh49qpqaGp1//vlKTk7WCy+8cNqDBAAAAICOpEkB691331WXLl305ptvqm/fvtq+fbt+97vftfTYAAAAAKBdaVLAcrvdkqS33npLV155peLj41t0UAAAAADQHjUpYE2ZMkVDhgzRxo0bdf7556usrEyRkZGn/KQHDx7UBRdcoIEDB+qCCy7QoUOHQh5ns9k0fPhwDR8+XFOnTj3l5wMAAACA1tDkJhcHDx5UfHy8bDabKisrdfToUfXs2fOUnvSee+5RYmKi5s2bp8cee0yHDh3S448/3uC42NjYU+pgSJMLAAAAAM2pWZtc1NTU6IUXXtDVV1+tK664Qs8995ySkpJOeXDLli3TzJkzJfk2M166dOkpXwsAAAAA2oomBaxbbrlFGzdu1K233qpbb71VmzZt0i233HLKT/rdd9+pV69ekqSePXvqu+++C3lcVVWVsrOzNWrUqJOGsAULFig7O1vZ2dkqKys75bEBAAC0J/n5+crPzw/3MADUOuFGw34bNmzQp59+at6eMGGCzjrrrBOeM3HiRO3bt6/B/Q8//HDQbYvFIovFEvIa33zzjVJTU/X1119rwoQJOuOMM5SRkRHy2IKCAhUUFEjyle8AAAAA/DCGYajGY8jl8aq6xqNqt1cutzfgu8e8Xe321H5veEyo4wPPa3BfjUcuj1f//0/PUU7fxHC/DaelSQHLZrPpq6++MsPN119/LZvNdsJzVq5c2ehjPXr00N69e9WrVy/t3btX3bt3D3lcamqqJKl///7Kz8/Xxx9/3GjAAgAA6Ez8VavCwsKg26tXrw7PgHDa3J7Gw0qjwaTBfR5V13hrA1Lt98BQVONVtacu0NQdWxuKPF41rUPDiUXYLHLYrHJG2OS0W+WwWwO+2+SwWRUTY6+9r+6YrtGO03/yMGtSwPrd736n8ePHq3///pKknTt3auHChaf8pFOnTtXzzz+vefPm6fnnn9e0adMaHHPo0CFFR0fL6XRq//79+vDDD3XPPfec8nO2BY+9vVWvbtqtCJvvF8hhsyrCblGEzeq7z2b1/TLaA2/7jnHYbLXfrXXH261y2OrOj6i97T8/8Lq++yzmeRGBz2W1ymoNXUUEAADo6DxeI0R1pn4lJkQFp35IqRdyqusFGP+x1e764cZ3n7cZgo3NagkKNE67rV64sSreESFnnDMo8DjrHdPwvEaCkv/4CKucNpucEb7Pnp35s2WTAta5556rm266Se+//74SEhI0adIkjR49+pSfdN68ebrqqqv03HPPqU+fPvrnP/8pSSouLtYzzzyjZ599ViUlJbrppptktVrl9Xo1b948ZWVlnfJztgWZveJ0fmZ3Vbu9qvEYqnF7VePx/Y/lcntV6XL77q+9r6b2fv+xLk/z/atCfXarJSB02XzBzR4Y0kIEt8DAZ28YEANDo//x4GtY6oJmwDUj6h3nv4bd1qQlgwAAdAr+SlV7rlx5vYYZTEJVZxpUZBqZWlYdIqw0CEXmYw2DkrsZko3FopMGk1inXUkxTQgr9ao6QdeqDTCREVY5AgKN/zufl8KvSW3ar7rqKnXp0kUzZsyQJL344os6fPiwlixZ0uIDPBUdvU272+M158bW+L/chlwej1xuw7zPFRjQ6gU2l9vT4BrmYx6vGf5qPEZtIAw4zmPUHut/bv99HvO5muMPqvqsFtUFrnoVOUdAaGtwX+2xzgaVvXphzt7wvqDrNgiJlpChsbE1hQAAtIRTCViGYZifE37IdLP6U8saX2dzsrU7vvtcHm+zvAc/rBITqiITXInxT23zBxen/3uI8OS/bbfyGaCja2rGaFLAysrK0pYtW056X1vR0QNWe+D1Gqrx+sNcYICruy8oIHq8crnrh7uGYc5VGyYDr1d3nRDXrT02OCTW/aXSEupPxXTUC351IdESFBgDj4uwWYMDoT10mPMHQPO6gVNO6wdPf0Ds5GV7AJB8f095DEMeryGv/7tXDe4zvwwj+JwQxwY+7v/yPaa68+tdq+4+yeP1yuNV0HObP5vH1j3uDnjO+mt3Qq/VCQ4+zcH/d5OzkdBhhpVQVZ16lRdnhC0gyISq6oQOSg6blWDTQbT1amxTM0aTpgiOGDFC//73vzVq1ChJ0vr16+nUhxOyWi1yWm1y2iU5wz2a0AzD95dTXQXQGxTwXJ666p8Z3Nwh7gsV8Nx1ATE4XNbeV7vI9FiVOyh4Nryu7y/R5mazWupCX72qXKgKYOBaP/+xVotktVhktfi7gUoW+W5brRZZVHe//1j/fdaA++uO8T3uf8ziv7aCrxd0rgLOtYQ61z++gHMlWa2NnKuAcy2NnGs+RxPO9T+HtZFzQ73e+uc2eA7xQaITO1EocHu95s+hPsjXDwWNf4BvPBQ0OCfg2JChIOQ4FBwuGg00ajyQBFzH7fXKa6jBcwePR0HXaYlZFi3FYpFsFousVotsFotsVt+fETarRTarVTar73H/P6IFBproaHttyLHVCzL+ikwjU9BChJuQIYd/sANCalLA2rhxo8aMGaPevXtLkr799lsNHjxYZ5xxhiwWiz777LMWHSTQEiyWupChNtywxuMNWJcXGPDqB7eQlb3g6aGBFcDGKns1gQHPbej48ZoGFchqt1eG4fsAY8j3IceQZBi+D1nmd6n2uLrvOH0Wf/BsNFCeLDzWu8/ayLmhnqMpgbLRwOu/LzgkW621z6sQ56re89Y/N9SYrSc4N+g5fO9nUJBoNJyoYXWiQSBpPBSECjQnCgWBlYnAUNRe+EOBLwRY6gKC1fePFf5QYK3/eMA5vtsyz3HYrQHn113HXtuoyVb7jxlmCAkKJL5j/ffZAx5vOAYFnW+1+o5v+Ny117SEfo31zwk81hr4OgPfJ/M6de8f/6CCzqCjdcRsUsBasWJFS48DQCN8f+naFBlx4q0R2gujXgDzB7LQ9wWHM0NGwxB3snPl+4Aa8lwFPkcj5xr1xnyic837/Med6PXWf20hzvWP2XuC11b7/I2eG2rM3kbOVYgxnyAsNxxzXWgIfL3e2vQd+N/Da/jCQoP/OuzcZAAAIABJREFUlqHuO9F/D9W+P42dq+Axn4g14MP8iUKBzdYwEFiDPtQ3DAWhQsTJQoEtxHM3FgrsQecq5Af4+h/0fcFEJwgkDa9V/3UEj4NQAABSEwNWnz59WnocANqR0/mXJbPaID6AofXVD2eG4Q9DTL0EgHDpCB0xAzUpYAEA0BEQ8AEALY2ABaDJOtocaQAA0HZ0lM8T7EQGAAAAAM2EChaAJutoc6QBAACaGxUsAAAAAGgmVLAA/GBUrgAAQHMxDEM7duxQRESE0tPTwz2c00YFCwAAAEBY3H777erdu7cyMjL0pz/9KdzDaRZUsAAAAAC0GMMwtHXrVhUWFmr16tXav3+/Vq5cKUk6fvy4xowZo/z8fF1wwQVhHmnzIGABAAAAaDZer7d230GL/vSnP+m3v/2tvv/+e0lSSkqKxo8fL7fbLbvdrueeey7Mo21+BCwAAAAAp8zr9erzzz/X6tWrVVhYqDVr1mj9+vXKyMhQjx49dOGFFyo/P195eXnKyMiQxdKxN3snYAEAAABoMo/HI5fLpaioKK1du1ZTp07VoUOHJEn9+vXTpZdeKq/XK0m66qqrdNVVV4VzuK2OgAUAAACgUW63W5s2bTIrVGvXrtUDDzygu+66SwMHDtSPf/xj5eXlKS8vT7179w73cMOOgAUAAADAVFNTo7KyMqWkpKi6ulo9e/bU4cOHJUmDBw/W9OnTdc4550iSevTooWeffTacw21zCFgAAABAJ1ZdXa2ioiIVFhaqsLBQ69atU25urlatWiWn06l58+apX79+GjdunHr27Bnu4bZ5BCwAAACgE6mqqtLnn3+unJwcSdKPf/xjLV++XJJ05pln6sYbb9TEiRPN4++9996wjLO9ImABAAAAHVhlZaU++ugjs0L173//WzU1NTp48KASEhJ055136mc/+5nGjh2rpKSkcA+33SNgAQAAAB1IeXm51q1bpxEjRqhbt25auHChbr/9dlmtVo0YMUJz5sxRXl6eIiMjJanDbPDbVhCwAAAAgHbs+PHjZoe/wsJCFRcXy+1264UXXtCMGTN02WWXqV+/fjr33HMVHx8f7uF2eAQsAAAAoB05fPiw1q5dq8TERI0ZM0ZlZWW65JJLFBERoZycHM2dO1f5+fkaM2aMJCk1NVWpqalhHnXnQcACAAAA2rg33nhDq1at0urVq/XJJ5/IMAxNnz5dY8aMUe/evbV69WplZ2crJiYm3EPt9AhYAAAAQBuyf/9+rVmzRvv27dOtt94qSfrVr36lrVu3avTo0fr1r3+tvLw8jRw50jwnLy8vXMNFPQQsAAAAIMxWr16tJUuWqLCwUJs3b5Ykde/eXTfffLOsVqtee+01paSkyOl0hnmkOBlruAcAAAAAdCalpaV66aWXdMstt6i8vFyStGrVKi1evFhpaWl65JFH9OGHH2rXrl2yWn0f1/v160e4aicshmEY4R5Ec8vOzlZxcXG4hwEAAABIkrZs2aKnnnpKhYWF2r59uyQpLi5Oq1at0jnnnKNjx44pKipKdjsTzNqqpmYMKlgAAABAM9q5c6eef/55zZo1S++8844kXyv1V155RZmZmXryySe1YcMGHTx4UOecc44kX9giXHUM/FcEAAAATlNlZaVuvvlmFRYW6ttvv5UkJSUladSoUZKks88+W/v375fNZgvnMNEKCFgAAABAExmGoS+//NLc1LdXr1568sknFRUVpc8//1y5ubmaO3eu8vLyNHToUHMNlf87Oj4CFgAAANAE9957rxYvXqx9+/ZJknr27Kmrr75akmSx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F4d7GACANshfuSosLJQk5eXlSaKS1RjDMGSxWLR06VLNnz/f3MRXkmJjY7Vnzx516dJFW7duVXR0tNLT09lvCkCH1NSMQQULAABI8q2bKi4uDtpvauXKlcrMzNThw4d16NAh/eQnPzGbUAwZMsTcb2rIkCFhHj0AtA1hCVhLlizRAw88oJKSEhUVFSk7OzvkcX379lVcXJxsNpvsdjtVKQDAafNXqjr7Gqzq6mp9+umnSklJUVpamt5//31NnDjRfHzgwIEaP368efv666/X9ddfH4aRAkD7EpaANWzYML366qu66aabTnrsqlWr1K1bt1YYFQAAHdfx48e1ZMkSszL1ySefqKamRk888YTmzp2rM888Uw899JByc3OVnZ2txMTEcA8ZANqlsASszMzMcDwtAACmjly52rNnjxmk+vXrp4KCAlksFt14442KjIxUdna27rrrLuXm5urcc8+VJCUnJ+uXv/xlmEcOAO1fm16DZbFYdOGFF8piseimm25SQUFBo8cuWLBACxYskCSVlZW11hABAAgrl8slh8MhSZo9e7befvttlZaWSvLtN3XDDTeooKBAkZGR2rp1q/r27WuumwIANL8WC1gTJ07Uvn37Gtz/8MMPa9q0aU26xtq1a5Wamqrvv/9eF1xwgYYMGaJx48aFPLagoMAMYI2t6QIAoD3zr5vyV6c2bNggq9WqzZs3S/IFqvHjx5tNKIYPH25u5itJGRkZ4Ro6AHQaLRawVq5cedrXSE1NlSR1795dP/rRj1RUVNRowAIAoCPx7zdVXFysGTNmyGKx6JZbbtHChQslST169NDIkSM1cuRIs5X6M888E+ZRAwDa7BTBiooKeb1excXFqaKiQu+++67uv//+cA8LAIAW8/nnn+vFF19UUVGRiouLzf2mRo8erYyMDP3sZz/T5MmTlZubq7S0NPabAoA2yBqOJ33ttdeUlpamjz76SJMnT9akSZMkSaWlpbrkkkskSd99953OO+88nXXWWcrNzdXkyZN10UUXhWO4AAA0q8OHD2vlypV65JFH9KMf/UgbN26UJH3xxRf6/e9/ryNHjmjGjBlauHChNm/erL59+0ryBa3LL7+czXwBoA2zGIZhhHsQza2puywDANDSqqurVVVVpfj4eH355ZeaOnWqvvjiC/PxQYMG6emnn9ZFF12k6upqGYYRtG4KANA2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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_solution('(after training)')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/vae.ipynb b/pyro/source/tutorial/source/vae.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..777cdccad474e9a81b05940cd372a301b4954baa --- /dev/null +++ b/pyro/source/tutorial/source/vae.ipynb @@ -0,0 +1,661 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Variational Autoencoders\n", + "\n", + "## Introduction\n", + "\n", + "The variational autoencoder (VAE) is arguably the simplest setup that realizes deep probabilistic modeling. Note that we're being careful in our choice of language here. The VAE isn't a model as such—rather the VAE is a particular setup for doing variational inference for a certain class of models. The class of models is quite broad: basically\n", + "any (unsupervised) density estimator with latent random variables. The basic structure of such a model is simple, almost deceptively so (see Fig. 1)." + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/html" + }, + "source": [ + "
Figure 1: the class of deep models we're interested in.

" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "Here we've depicted the structure of the kind of model we're interested in as a graphical model. We have $N$ observed datapoints $\\{ \\bf x_i \\}$. Each datapoint is generated by a (local) latent random variable $\\bf z_i$. There is also a parameter $\\theta$, which is global in the sense that all the datapoints depend on it (which is why it's drawn outside the rectangle). Note that since $\\theta$ is a parameter, it's not something we're being Bayesian about. Finally, what's of particular importance here is that we allow for each $\\bf x_i$ to depend on $\\bf z_i$ in a complex, non-linear way. In practice this dependency will be parameterized by a (deep) neural network with parameters $\\theta$. It's this non-linearity that makes inference for this class of models particularly challenging. \n", + "\n", + "Of course this non-linear structure is also one reason why this class of models offers a very flexible approach to modeling complex data. Indeed it's worth emphasizing that each of the components of the model can be 'reconfigured' in a variety of different ways. For example:\n", + "\n", + "- the neural network in $p_\\theta({\\bf x} | {\\bf z})$ can be varied in all the usual ways (number of layers, type of non-linearities, number of hidden units, etc.)\n", + "- we can choose observation likelihoods that suit the dataset at hand: gaussian, bernoulli, categorical, etc.\n", + "- we can choose the number of dimensions in the latent space\n", + "\n", + "The graphical model representation is a useful way to think about the structure of the model, but it can also be fruitful to look at an explicit factorization of the joint probability density:\n", + "\n", + "$$ p({\\bf x}, {\\bf z}) = \\prod_{i=1}^N p_\\theta({\\bf x}_i | {\\bf z}_i) p({\\bf z}_i) $$\n", + "\n", + "The fact that $p({\\bf x}, {\\bf z})$ breaks up into a product of terms like this makes it clear what we mean when we call $\\bf z_i$ a local random variable. For any particular $i$, only the single datapoint $\\bf x_i$ depends on $\\bf z_i$. As such the $\\{\\bf z_i\\}$ describe local structure, i.e. structure that is private to each data point. This factorized structure also means that we can do subsampling during the course of learning. As such this sort of model is amenable to the large data setting. (For more discussion on this and related topics see [SVI Part II](svi_part_ii.ipynb).)\n", + "\n", + "That's all there is to the model. Since the observations depend on the latent random variables in a complicated, non-linear way, we expect the posterior over the latents to have a complex structure. Consequently in order to do inference in this model we need to specify a flexibly family of guides (i.e. variational distributions). Since we want to be able to scale to large datasets, our guide is going to make use of amortization to keep the number of variational parameters under control (see [SVI Part II](svi_part_ii.ipynb) for a somewhat more general discussion of amortization). \n", + "\n", + "Recall that the job of the guide is to 'guess' good values for the latent random variables—good in the sense that they're true to the model prior _and_ true to the data. If we weren't making use of amortization, we would introduce variational parameters \n", + "$\\{ \\lambda_i \\}$ for _each_ datapoint $\\bf x_i$. These variational parameters would represent our belief about 'good' values of $\\bf z_i$; for example, they could encode the mean and variance of a gaussian distribution in ${\\bf z}_i$ space. Amortization means that, rather than introducing variational parameters $\\{ \\lambda_i \\}$, we instead learn a _function_ that maps each $\\bf x_i$ to an appropriate $\\lambda_i$. Since we need this function to be flexible, we parameterize it as a neural network. We thus end up with a parameterized family of distributions over the latent $\\bf z$ space that can be instantiated for all $N$ datapoint ${\\bf x}_i$ (see Fig. 2)." + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/html" + }, + "source": [ + "
Figure 2: a graphical representation of the guide.

" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that the guide $q_{\\phi}({\\bf z} | {\\bf x})$ is parameterized by a global parameter $\\phi$ shared by all the datapoints. The goal of inference will be to find 'good' values for $\\theta$ and $\\phi$ so that two conditions are satisfied:\n", + "\n", + "- the log evidence $\\log p_\\theta({\\bf x})$ is large. this means our model is a good fit to the data\n", + "- the guide $q_{\\phi}({\\bf z} | {\\bf x})$ provides a good approximation to the posterior \n", + "\n", + "(For an introduction to stochastic variational inference see [SVI Part I](svi_part_i.ipynb).)\n", + "\n", + "At this point we can zoom out and consider the high level structure of our setup. For concreteness, let's suppose the $\\{ \\bf x_i \\}$ are images so that the model is a generative model of images. Once we've learned a good value of $\\theta$ we can generate images from the model as follows:\n", + "\n", + "- sample $\\bf z$ according to the prior $p({\\bf z})$\n", + "- sample $\\bf x$ according to the likelihood $p_\\theta({\\bf x}|{\\bf z})$\n", + "\n", + "Each image is being represented by a latent code $\\bf z$ and that code gets mapped to images using the likelihood, which depends on the $\\theta$ we've learned. This is why the likelihood is often called the decoder in this context: its job is to decode $\\bf z$ into $\\bf x$. Note that since this is a probabilistic model, there is uncertainty about the $\\bf z$ that encodes a given datapoint $\\bf x$.\n", + "\n", + "Once we've learned good values for $\\theta$ and $\\phi$ we can also go through the following exercise. \n", + "\n", + "- we start with a given image $\\bf x$\n", + "- using our guide we encode it as $\\bf z$\n", + "- using the model likelihood we decode $\\bf z$ and get a reconstructed image ${\\bf x}_{\\rm reco}$\n", + "\n", + "If we've learned good values for $\\theta$ and $\\phi$, $\\bf x$ and ${\\bf x}_{\\rm reco}$ should be similar. This should clarify how the word autoencoder ended up being used to describe this setup: the model is the decoder and the guide is the encoder. Together, they can be thought of as an autoencoder.\n", + "\n", + "## VAE in Pyro\n", + "\n", + "Let's see how we implement a VAE in Pyro.\n", + "The dataset we're going to model is MNIST, a collection of images of handwritten digits.\n", + "Since this is a popular benchmark dataset, we can make use of PyTorch's convenient data loader functionalities to reduce the amount of boilerplate code we need to write:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "import numpy as np\n", + "import torch\n", + "from pyro.contrib.examples.util import MNIST\n", + "import torch.nn as nn\n", + "import torchvision.transforms as transforms\n", + "\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "import pyro.contrib.examples.util # patches torchvision\n", + "from pyro.infer import SVI, Trace_ELBO\n", + "from pyro.optim import Adam" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "assert pyro.__version__.startswith('1.9.1')\n", + "pyro.distributions.enable_validation(False)\n", + "pyro.set_rng_seed(0)\n", + "# Enable smoke test - run the notebook cells on CI.\n", + "smoke_test = 'CI' in os.environ " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# for loading and batching MNIST dataset\n", + "def setup_data_loaders(batch_size=128, use_cuda=False):\n", + " root = './data'\n", + " download = True\n", + " trans = transforms.ToTensor()\n", + " train_set = MNIST(root=root, train=True, transform=trans,\n", + " download=download)\n", + " test_set = MNIST(root=root, train=False, transform=trans)\n", + "\n", + " kwargs = {'num_workers': 1, 'pin_memory': use_cuda}\n", + " train_loader = torch.utils.data.DataLoader(dataset=train_set,\n", + " batch_size=batch_size, shuffle=True, **kwargs)\n", + " test_loader = torch.utils.data.DataLoader(dataset=test_set,\n", + " batch_size=batch_size, shuffle=False, **kwargs)\n", + " return train_loader, test_loader" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The main thing to draw attention to here is that we use `transforms.ToTensor()` to normalize the pixel intensities to the range $[0.0, 1.0]$. \n", + "\n", + "Next we define a PyTorch module that encapsulates our decoder network:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "class Decoder(nn.Module):\n", + " def __init__(self, z_dim, hidden_dim):\n", + " super().__init__()\n", + " # setup the two linear transformations used\n", + " self.fc1 = nn.Linear(z_dim, hidden_dim)\n", + " self.fc21 = nn.Linear(hidden_dim, 784)\n", + " # setup the non-linearities\n", + " self.softplus = nn.Softplus()\n", + " self.sigmoid = nn.Sigmoid()\n", + "\n", + " def forward(self, z):\n", + " # define the forward computation on the latent z\n", + " # first compute the hidden units\n", + " hidden = self.softplus(self.fc1(z))\n", + " # return the parameter for the output Bernoulli\n", + " # each is of size batch_size x 784\n", + " loc_img = self.sigmoid(self.fc21(hidden))\n", + " return loc_img" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Given a latent code $z$, the forward call of `Decoder` returns the parameters for a Bernoulli distribution in image space. Since each image is of size\n", + "$28\\times28=784$, `loc_img` is of size `batch_size` x 784.\n", + "\n", + "Next we define a PyTorch module that encapsulates our encoder network:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "class Encoder(nn.Module):\n", + " def __init__(self, z_dim, hidden_dim):\n", + " super().__init__()\n", + " # setup the three linear transformations used\n", + " self.fc1 = nn.Linear(784, hidden_dim)\n", + " self.fc21 = nn.Linear(hidden_dim, z_dim)\n", + " self.fc22 = nn.Linear(hidden_dim, z_dim)\n", + " # setup the non-linearities\n", + " self.softplus = nn.Softplus()\n", + "\n", + " def forward(self, x):\n", + " # define the forward computation on the image x\n", + " # first shape the mini-batch to have pixels in the rightmost dimension\n", + " x = x.reshape(-1, 784)\n", + " # then compute the hidden units\n", + " hidden = self.softplus(self.fc1(x))\n", + " # then return a mean vector and a (positive) square root covariance\n", + " # each of size batch_size x z_dim\n", + " z_loc = self.fc21(hidden)\n", + " z_scale = torch.exp(self.fc22(hidden))\n", + " return z_loc, z_scale" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Given an image $\\bf x$ the forward call of `Encoder` returns a mean and covariance that together parameterize a (diagonal) Gaussian distribution in latent space.\n", + "\n", + "With our encoder and decoder networks in hand, we can now write down the stochastic functions that represent our model and guide. First the model: " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# define the model p(x|z)p(z)\n", + "def model(self, x):\n", + " # register PyTorch module `decoder` with Pyro\n", + " pyro.module(\"decoder\", self.decoder)\n", + " with pyro.plate(\"data\", x.shape[0]):\n", + " # setup hyperparameters for prior p(z)\n", + " z_loc = x.new_zeros(torch.Size((x.shape[0], self.z_dim)))\n", + " z_scale = x.new_ones(torch.Size((x.shape[0], self.z_dim)))\n", + " # sample from prior (value will be sampled by guide when computing the ELBO)\n", + " z = pyro.sample(\"latent\", dist.Normal(z_loc, z_scale).to_event(1))\n", + " # decode the latent code z\n", + " loc_img = self.decoder(z)\n", + " # score against actual images\n", + " pyro.sample(\"obs\", dist.Bernoulli(loc_img).to_event(1), obs=x.reshape(-1, 784))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that `model()` is a callable that takes in a mini-batch of images `x` as input. This is a `torch.Tensor` of size `batch_size` x 784.\n", + "\n", + "The first thing we do inside of `model()` is register the (previously instantiated) decoder module with Pyro. Note that we give it an appropriate (and unique) name. This call to `pyro.module` lets Pyro know about all the parameters inside of the decoder network. \n", + "\n", + "Next we setup the hyperparameters for our prior, which is just a unit normal gaussian distribution. Note that:\n", + "- we specifically designate independence amongst the data in our mini-batch (i.e. the leftmost dimension) via `pyro.plate`. Also, note the use of `.to_event(1)` when sampling from the latent `z` - this ensures that instead of treating our sample as being generated from a univariate normal with `batch_size = z_dim`, we treat them as being generated from a multivariate normal distribution with diagonal covariance. As such, the log probabilities along each dimension is summed out when we evaluate `.log_prob` for a \"latent\" sample. Refer to the [Tensor Shapes](tensor_shapes.ipynb) tutorial for more details.\n", + "- since we're processing an entire mini-batch of images, we need the leftmost dimension of `z_loc` and `z_scale` to equal the mini-batch size\n", + "- in case we're on GPU, we use `new_zeros` and `new_ones` to ensure that newly created tensors are on the same GPU device.\n", + "\n", + "Next we sample the latent `z` from the prior, making sure to give the random variable a unique Pyro name `'latent'`. \n", + "Then we pass `z` through the decoder network, which returns `loc_img`. We then score the observed images in the mini-batch `x` against the Bernoulli likelihood parametrized by `loc_img`.\n", + "Note that we flatten `x` so that all the pixels are in the rightmost dimension.\n", + "\n", + "That's all there is to it! Note how closely the flow of Pyro primitives in `model` follows the generative story of our model, e.g. as encapsulated by Figure 1. Now we move on to the guide:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# define the guide (i.e. variational distribution) q(z|x)\n", + "def guide(self, x):\n", + " # register PyTorch module `encoder` with Pyro\n", + " pyro.module(\"encoder\", self.encoder)\n", + " with pyro.plate(\"data\", x.shape[0]):\n", + " # use the encoder to get the parameters used to define q(z|x)\n", + " z_loc, z_scale = self.encoder(x)\n", + " # sample the latent code z\n", + " pyro.sample(\"latent\", dist.Normal(z_loc, z_scale).to_event(1))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Just like in the model, we first register the PyTorch module we're using (namely `encoder`) with Pyro. We take the mini-batch of images `x` and pass it through the encoder. Then using the parameters output by the encoder network we use the normal distribution to sample a value of the latent for each image in the mini-batch. Crucially, we use the same name for the latent random variable as we did in the model: `'latent'`. Also, note the use of `pyro.plate` to designate independence of the mini-batch dimension, and `.to_event(1)` to enforce dependence on `z_dims`, exactly as we did in the model.\n", + "\n", + "Now that we've defined the full model and guide we can move on to inference. But before we do so let's see how we package the model and guide in a PyTorch module:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "class VAE(nn.Module):\n", + " # by default our latent space is 50-dimensional\n", + " # and we use 400 hidden units\n", + " def __init__(self, z_dim=50, hidden_dim=400, use_cuda=False):\n", + " super().__init__()\n", + " # create the encoder and decoder networks\n", + " self.encoder = Encoder(z_dim, hidden_dim)\n", + " self.decoder = Decoder(z_dim, hidden_dim)\n", + "\n", + " if use_cuda:\n", + " # calling cuda() here will put all the parameters of\n", + " # the encoder and decoder networks into gpu memory\n", + " self.cuda()\n", + " self.use_cuda = use_cuda\n", + " self.z_dim = z_dim\n", + "\n", + " # define the model p(x|z)p(z)\n", + " def model(self, x):\n", + " # register PyTorch module `decoder` with Pyro\n", + " pyro.module(\"decoder\", self.decoder)\n", + " with pyro.plate(\"data\", x.shape[0]):\n", + " # setup hyperparameters for prior p(z)\n", + " z_loc = x.new_zeros(torch.Size((x.shape[0], self.z_dim)))\n", + " z_scale = x.new_ones(torch.Size((x.shape[0], self.z_dim)))\n", + " # sample from prior (value will be sampled by guide when computing the ELBO)\n", + " z = pyro.sample(\"latent\", dist.Normal(z_loc, z_scale).to_event(1))\n", + " # decode the latent code z\n", + " loc_img = self.decoder(z)\n", + " # score against actual images\n", + " pyro.sample(\"obs\", dist.Bernoulli(loc_img).to_event(1), obs=x.reshape(-1, 784))\n", + "\n", + " # define the guide (i.e. variational distribution) q(z|x)\n", + " def guide(self, x):\n", + " # register PyTorch module `encoder` with Pyro\n", + " pyro.module(\"encoder\", self.encoder)\n", + " with pyro.plate(\"data\", x.shape[0]):\n", + " # use the encoder to get the parameters used to define q(z|x)\n", + " z_loc, z_scale = self.encoder(x)\n", + " # sample the latent code z\n", + " pyro.sample(\"latent\", dist.Normal(z_loc, z_scale).to_event(1))\n", + "\n", + " # define a helper function for reconstructing images\n", + " def reconstruct_img(self, x):\n", + " # encode image x\n", + " z_loc, z_scale = self.encoder(x)\n", + " # sample in latent space\n", + " z = dist.Normal(z_loc, z_scale).sample()\n", + " # decode the image (note we don't sample in image space)\n", + " loc_img = self.decoder(z)\n", + " return loc_img" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The point we'd like to make here is that the two `Module`s `encoder` and `decoder` are attributes of `VAE` (which itself inherits from `nn.Module`). This has the consequence they are both automatically registered as belonging to the `VAE` module. So, for example, when we call `parameters()` on an instance of `VAE`, PyTorch will know to return all the relevant parameters. It also means that if we're running on a GPU, the call to `cuda()` will move all the parameters of all the (sub)modules into GPU memory." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Inference\n", + "\n", + "We're now ready for inference. Refer to the full code in the next section. \n", + "\n", + "First we instantiate an instance of the `VAE` module." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "vae = VAE()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then we setup an instance of the Adam optimizer." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "optimizer = Adam({\"lr\": 1.0e-3})" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then we setup our inference algorithm, which is going to learn good parameters for the model and guide by maximizing the ELBO:\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "svi = SVI(vae.model, vae.guide, optimizer, loss=Trace_ELBO())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That's all there is to it. Now we just have to define our training loop:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def train(svi, train_loader, use_cuda=False):\n", + " # initialize loss accumulator\n", + " epoch_loss = 0.\n", + " # do a training epoch over each mini-batch x returned\n", + " # by the data loader\n", + " for x, _ in train_loader:\n", + " # if on GPU put mini-batch into CUDA memory\n", + " if use_cuda:\n", + " x = x.cuda()\n", + " # do ELBO gradient and accumulate loss\n", + " epoch_loss += svi.step(x)\n", + "\n", + " # return epoch loss\n", + " normalizer_train = len(train_loader.dataset)\n", + " total_epoch_loss_train = epoch_loss / normalizer_train\n", + " return total_epoch_loss_train" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that all the mini-batch logic is handled by the data loader. The meat of the training loop is `svi.step(x)`. There are two things we should draw attention to here:\n", + "\n", + "- any arguments to `step` are passed to the model and the guide. consequently `model` and `guide` need to have the same call signature\n", + "- `step` returns a noisy estimate of the loss (i.e. minus the ELBO). this estimate is not normalized in any way, so e.g. it scales with the size of the mini-batch\n", + "\n", + "The logic for adding evaluation logic is analogous:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def evaluate(svi, test_loader, use_cuda=False):\n", + " # initialize loss accumulator\n", + " test_loss = 0.\n", + " # compute the loss over the entire test set\n", + " for x, _ in test_loader:\n", + " # if on GPU put mini-batch into CUDA memory\n", + " if use_cuda:\n", + " x = x.cuda()\n", + " # compute ELBO estimate and accumulate loss\n", + " test_loss += svi.evaluate_loss(x)\n", + " normalizer_test = len(test_loader.dataset)\n", + " total_epoch_loss_test = test_loss / normalizer_test\n", + " return total_epoch_loss_test" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Basically the only change we need to make is that we call evaluate_loss instead of step. This function will compute an estimate of the ELBO but won't take any gradient steps.\n", + "\n", + "The final piece of code we'd like to highlight is the helper method `reconstruct_img` in the VAE class: This is just the image reconstruction experiment we described in the introduction translated into code. We take an image and pass it through the encoder. Then we sample in latent space using the gaussian distribution provided by the encoder. Finally we decode the latent code into an image: we return the mean vector `loc_img` instead of sampling with it. Note that since the `sample()` statement is stochastic, we'll get different draws of z every time we run the reconstruct_img function. If we've learned a good model and guide—in particular if we've learned a good latent representation—this plurality of z samples will correspond to different styles of digit writing, and the reconstructed images should exhibit an interesting variety of different styles." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Code and Sample results\n", + "\n", + "Training corresponds to maximizing the evidence lower bound (ELBO) over the training dataset. We train for 100 iterations and evaluate the ELBO for the test dataset, see Figure 3." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Run options\n", + "LEARNING_RATE = 1.0e-3\n", + "USE_CUDA = False\n", + "\n", + "# Run only for a single iteration for testing\n", + "NUM_EPOCHS = 1 if smoke_test else 100\n", + "TEST_FREQUENCY = 5" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train_loader, test_loader = setup_data_loaders(batch_size=256, use_cuda=USE_CUDA)\n", + "\n", + "# clear param store\n", + "pyro.clear_param_store()\n", + "\n", + "# setup the VAE\n", + "vae = VAE(use_cuda=USE_CUDA)\n", + "\n", + "# setup the optimizer\n", + "adam_args = {\"lr\": LEARNING_RATE}\n", + "optimizer = Adam(adam_args)\n", + "\n", + "# setup the inference algorithm\n", + "svi = SVI(vae.model, vae.guide, optimizer, loss=Trace_ELBO())\n", + "\n", + "train_elbo = []\n", + "test_elbo = []\n", + "# training loop\n", + "for epoch in range(NUM_EPOCHS):\n", + " total_epoch_loss_train = train(svi, train_loader, use_cuda=USE_CUDA)\n", + " train_elbo.append(-total_epoch_loss_train)\n", + " print(\"[epoch %03d] average training loss: %.4f\" % (epoch, total_epoch_loss_train))\n", + "\n", + " if epoch % TEST_FREQUENCY == 0:\n", + " # report test diagnostics\n", + " total_epoch_loss_test = evaluate(svi, test_loader, use_cuda=USE_CUDA)\n", + " test_elbo.append(-total_epoch_loss_test)\n", + " print(\"[epoch %03d] average test loss: %.4f\" % (epoch, total_epoch_loss_test))" + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/html" + }, + "source": [ + "
\n", + "
\n", + "\n", + "
\n", + "Figure 3: How the test ELBO evolves over the course of training. \n", + "
\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we show a set of randomly sampled images from the model. These are generated by drawing random samples of `z` and generating an image for each one, see Figure 4." + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/html" + }, + "source": [ + "
\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "
\n", + " Figure 4: Samples from generative model.\n", + "
\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We also study the 50-dimensional latent space of the entire test dataset by encoding all MNIST images and embedding their means into a 2-dimensional T-SNE space. We then color each embedded image by its class.\n", + "The resulting Figure 5 shows separation by class with variance within each class-cluster." + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/html" + }, + "source": [ + "
\n", + "
\n", + "\n", + "
\n", + "Figure 5: T-SNE Embedding of the latent z. The colors correspond to different classes of digits.\n", + "
\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "See the full code on [Github](https://github.com/pyro-ppl/pyro/blob/dev/examples/vae/vae.py).\n", + "\n", + "## References\n", + "\n", + "[1] `Auto-Encoding Variational Bayes`,
    \n", + "Diederik P Kingma, Max Welling\n", + "\n", + "[2] `Stochastic Backpropagation and Approximate Inference in Deep Generative Models`,\n", + "
    \n", + "Danilo Jimenez Rezende, Shakir Mohamed, Daan Wierstra" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "celltoolbar": "Raw Cell Format", + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyro/source/tutorial/source/vae_flow_prior.ipynb b/pyro/source/tutorial/source/vae_flow_prior.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..345a37d94fbf7f465e0f7ec36e1b592d4c05b544 --- /dev/null +++ b/pyro/source/tutorial/source/vae_flow_prior.ipynb @@ -0,0 +1,336 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Variational Autoencoder with a Normalizing Flow prior\n", + "\n", + "Using a normalizing flow as prior for the latent variables instead of the typical standard Gaussian is an easy way to make a variational autoencoder (VAE) more expressive. This notebook demonstrates how to implement a VAE with a normalizing flow as prior for the MNIST dataset. We strongly recommend to read [Pyro's VAE tutorial](vae.ipynb) first.\n", + "\n", + "> In this notebook we use [Zuko](https://zuko.readthedocs.io/) to implement normalizing flows, but similar results can be obtained with other PyTorch-based flow libraries." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pyro\n", + "import torch\n", + "import torch.nn as nn\n", + "import torch.utils.data as data\n", + "import zuko\n", + "\n", + "from pyro.contrib.zuko import ZukoToPyro\n", + "from pyro.optim import Adam\n", + "from pyro.infer import SVI, Trace_ELBO\n", + "from torch import Tensor\n", + "from torchvision.datasets import MNIST\n", + "from torchvision.transforms.functional import to_tensor, to_pil_image\n", + "from tqdm import tqdm" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Data\n", + "\n", + "The [MNIST](https://wikipedia.org/wiki/MNIST_database) dataset consists of 28 x 28 grayscale images representing handwritten digits (0 to 9)." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "trainset = MNIST(root='', download=True, train=True, transform=to_tensor)\n", + "trainloader = data.DataLoader(trainset, batch_size=256, shuffle=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x = [trainset[i][0] for i in range(16)]\n", + "x = torch.cat(x, dim=-1)\n", + "\n", + "to_pil_image(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Model\n", + "\n", + "As for the [previous tutorial](vae.ipynb), we choose a (diagonal) Gaussian model as encoder $q_\\psi(z | x)$ and a Bernoulli model as decoder $p_\\phi(x | z)$. " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "class GaussianEncoder(nn.Module):\n", + " def __init__(self, features: int, latent: int):\n", + " super().__init__()\n", + "\n", + " self.hyper = nn.Sequential(\n", + " nn.Linear(features, 1024),\n", + " nn.ReLU(),\n", + " nn.Linear(1024, 1024),\n", + " nn.ReLU(),\n", + " nn.Linear(1024, 2 * latent),\n", + " )\n", + "\n", + " def forward(self, x: Tensor):\n", + " phi = self.hyper(x)\n", + " mu, log_sigma = phi.chunk(2, dim=-1)\n", + "\n", + " return pyro.distributions.Normal(mu, log_sigma.exp()).to_event(1)\n", + "\n", + "\n", + "class BernoulliDecoder(nn.Module):\n", + " def __init__(self, features: int, latent: int):\n", + " super().__init__()\n", + "\n", + " self.hyper = nn.Sequential(\n", + " nn.Linear(latent, 1024),\n", + " nn.ReLU(),\n", + " nn.Linear(1024, 1024),\n", + " nn.ReLU(),\n", + " nn.Linear(1024, features),\n", + " )\n", + "\n", + " def forward(self, z: Tensor):\n", + " phi = self.hyper(z)\n", + " rho = torch.sigmoid(phi)\n", + "\n", + " return pyro.distributions.Bernoulli(rho).to_event(1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "However, we choose a [masked autoregressive flow](https://arxiv.org/abs/1705.07057) (MAF) as prior $p_\\phi(z)$ instead of the typical standard Gaussian $\\mathcal{N}(0, I)$. Instead of implementing the MAF ourselves, we borrow it from the [Zuko](https://github.com/probabilists/zuko) library. Because Zuko distributions are very similar to Pyro distributions, a thin wrapper (`ZukoToPyro`) is sufficient to make Zuko and Pyro 100% compatible." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "VAE(\n", + " (encoder): GaussianEncoder(\n", + " (hyper): Sequential(\n", + " (0): Linear(in_features=784, out_features=1024, bias=True)\n", + " (1): ReLU()\n", + " (2): Linear(in_features=1024, out_features=1024, bias=True)\n", + " (3): ReLU()\n", + " (4): Linear(in_features=1024, out_features=32, bias=True)\n", + " )\n", + " )\n", + " (decoder): BernoulliDecoder(\n", + " (hyper): Sequential(\n", + " (0): Linear(in_features=16, out_features=1024, bias=True)\n", + " (1): ReLU()\n", + " (2): Linear(in_features=1024, out_features=1024, bias=True)\n", + " (3): ReLU()\n", + " (4): Linear(in_features=1024, out_features=784, bias=True)\n", + " )\n", + " )\n", + " (prior): MAF(\n", + " (transform): LazyComposedTransform(\n", + " (0): MaskedAutoregressiveTransform(\n", + " (base): MonotonicAffineTransform()\n", + " (order): [0, 1, 2, 3, 4, ..., 11, 12, 13, 14, 15]\n", + " (hyper): MaskedMLP(\n", + " (0): MaskedLinear(in_features=16, out_features=256, bias=True)\n", + " (1): ReLU()\n", + " (2): MaskedLinear(in_features=256, out_features=256, bias=True)\n", + " (3): ReLU()\n", + " (4): MaskedLinear(in_features=256, out_features=32, bias=True)\n", + " )\n", + " )\n", + " (1): MaskedAutoregressiveTransform(\n", + " (base): MonotonicAffineTransform()\n", + " (order): [15, 14, 13, 12, 11, ..., 4, 3, 2, 1, 0]\n", + " (hyper): MaskedMLP(\n", + " (0): MaskedLinear(in_features=16, out_features=256, bias=True)\n", + " (1): ReLU()\n", + " (2): MaskedLinear(in_features=256, out_features=256, bias=True)\n", + " (3): ReLU()\n", + " (4): MaskedLinear(in_features=256, out_features=32, bias=True)\n", + " )\n", + " )\n", + " (2): MaskedAutoregressiveTransform(\n", + " (base): MonotonicAffineTransform()\n", + " (order): [0, 1, 2, 3, 4, ..., 11, 12, 13, 14, 15]\n", + " (hyper): MaskedMLP(\n", + " (0): MaskedLinear(in_features=16, out_features=256, bias=True)\n", + " (1): ReLU()\n", + " (2): MaskedLinear(in_features=256, out_features=256, bias=True)\n", + " (3): ReLU()\n", + " (4): MaskedLinear(in_features=256, out_features=32, bias=True)\n", + " )\n", + " )\n", + " )\n", + " (base): Unconditional(DiagNormal(loc: torch.Size([16]), scale: torch.Size([16])))\n", + " )\n", + ")" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "class VAE(nn.Module):\n", + " def __init__(self, features: int, latent: int = 16):\n", + " super().__init__()\n", + "\n", + " self.encoder = GaussianEncoder(features, latent)\n", + " self.decoder = BernoulliDecoder(features, latent)\n", + "\n", + " self.prior = zuko.flows.MAF(\n", + " features=latent,\n", + " transforms=3,\n", + " hidden_features=(256, 256),\n", + " )\n", + "\n", + " def model(self, x: Tensor):\n", + " pyro.module(\"prior\", self.prior)\n", + " pyro.module(\"decoder\", self.decoder)\n", + "\n", + " with pyro.plate(\"batch\", len(x)):\n", + " z = pyro.sample(\"z\", ZukoToPyro(self.prior()))\n", + " x = pyro.sample(\"x\", self.decoder(z), obs=x)\n", + "\n", + " def guide(self, x: Tensor):\n", + " pyro.module(\"encoder\", self.encoder)\n", + "\n", + " with pyro.plate(\"batch\", len(x)):\n", + " z = pyro.sample(\"z\", self.encoder(x))\n", + "\n", + "vae = VAE(784, 16).cuda()\n", + "vae" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Training\n", + "\n", + "We train our VAE with a standard stochastic variational inference (SVI) pipeline." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 96/96 [24:04<00:00, 15.05s/it, loss=63.1]\n" + ] + } + ], + "source": [ + "pyro.clear_param_store()\n", + "\n", + "svi = SVI(vae.model, vae.guide, Adam({'lr': 1e-3}), loss=Trace_ELBO())\n", + "\n", + "for epoch in (bar := tqdm(range(96))):\n", + " losses = []\n", + "\n", + " for x, _ in trainloader:\n", + " x = x.round().flatten(-3).cuda()\n", + "\n", + " losses.append(svi.step(x))\n", + "\n", + " losses = torch.tensor(losses)\n", + "\n", + " bar.set_postfix(loss=losses.sum().item() / len(trainset))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After training, we can generate MNIST images by sampling latent variables from the prior and decoding them." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "z = vae.prior().sample((16,))\n", + "x = vae.decoder(z).mean.reshape(-1, 28, 28)\n", + "\n", + "to_pil_image(x.movedim(0, 1).reshape(28, -1))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "pyro", + "language": "python", + "name": "pyro" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/pyro/source/tutorial/source/workflow.ipynb b/pyro/source/tutorial/source/workflow.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..c85f4d2bd33d3acd9e304f61d8bb01f3c9e502e6 --- /dev/null +++ b/pyro/source/tutorial/source/workflow.ipynb @@ -0,0 +1,1181 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "llE7btqvKM3m" + }, + "source": [ + "# High-dimensional Bayesian workflow, with applications to SARS-CoV-2 strains\n", + "\n", + "This tutorial describes a workflow for incrementally building pipelines to analyze high-dimensional data in Pyro. This workflow has evolved over a few years of applying Pyro to models with $10^5$ or more latent variables. We build on [Gelman et al. (2020)](https://arxiv.org/abs/2011.01808)'s concept of *Bayesian workflow*, and focus on aspects particular to high-dimensional models: approximate inference and numerical stability. While the individual components of the pipeline deserve their own tutorials, this tutorial focuses on incrementally combining those components.\n", + "\n", + "The fastest way to find a good model of your data is to quickly discard many bad models, i.e. to iterate.\n", + "In statistics we call this iterative workflow [Box's loop](http://www.cs.columbia.edu/~blei/papers/Blei2014b.pdf).\n", + "An efficient workflow allows us to discard bad models as quickly as possible.\n", + "Workflow efficiency demands that code changes to upstream components don't break previous coding effort on downstream components.\n", + "Pyro's approaches to this challenge include strategies for variational approximations ([pyro.infer.autoguide](https://docs.pyro.ai/en/stable/infer.autoguide.html)) and strategies for transforming model coordinate systems to improve geometry ([pyro.infer.reparam](https://docs.pyro.ai/en/stable/infer.reparam.html)).\n", + "\n", + "#### Summary\n", + "\n", + "- Great models can only be achieved by iterative development.\n", + "- Iterate quickly by building a pipeline that is robust to code changes.\n", + "- Start with a simple model and [mean-field inference](https://docs.pyro.ai/en/dev/infer.autoguide.html#autonormal).\n", + "- Avoid NANs by intelligently [initializing](https://docs.pyro.ai/en/dev/infer.autoguide.html#module-pyro.infer.autoguide.initialization) and [.clamp()](https://pytorch.org/docs/stable/generated/torch.clamp.html)ing.\n", + "- [Reparametrize](https://docs.pyro.ai/en/dev/infer.reparam.html) the model to improve geometry.\n", + "- Create a custom variational family by combining [AutoGuides](https://docs.pyro.ai/en/dev/infer.autoguide.html) or [EasyGuides](https://docs.pyro.ai/en/dev/contrib.easyguide.html).\n", + "\n", + "#### Table of contents\n", + "- [Overview](#Overview)\n", + "- [Running example: SARS-CoV-2 strain prediction](#Running-example)\n", + "1. [Clean the data](#Clean-the-data)\n", + "2. [Create a generative model](#Create-a-generative-model)\n", + "3. [Sanity check using mean-field inference](#Sanity-check)\n", + "4. [Create an initialization heuristic](#Create-an-initialization-heuristic)\n", + "5. [Reparametrize the model](#Reparametrize)\n", + "6. [Customize the variational family: autoguides, easyguides, custom guides](#Customize)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1Sj_aC_4KM3p" + }, + "source": [ + "## Overview \n", + "\n", + "Consider the problem of sampling from the posterior distribution of a probabilistic model with $10^5$ or more continuous latent variables, but whose data fits entirely in memory.\n", + "(For larger datasets, consider [amortized variational inference](http://pyro.ai/examples/svi_part_ii.html).) Inference in such high-dimensional models can be challenging even when posteriors are known to be [unimodal](https://en.wikipedia.org/wiki/Unimodality) or even [log-concave](https://arxiv.org/abs/1404.5886), due to correlations among latent variables.\n", + "\n", + "To perform inference in such high-dimensional models in Pyro, we have evolved a [workflow](https://arxiv.org/abs/2011.01808) to incrementally build data analysis pipelines combining variational inference, reparametrization effects, and ad-hoc initialization strategies. Our workflow is summarized as a sequence of steps, where validation after any step might suggest backtracking to change design decisions at a previous step.\n", + "\n", + "1. Clean the data.\n", + "2. Create a generative model.\n", + "3. Sanity check using MAP or mean-field inference.\n", + "4. Create an initialization heuristic.\n", + "5. Reparameterize the model, evaluating results under mean field VI.\n", + "6. Customize the variational family (autoguides, easyguides, custom guides).\n", + "\n", + "The crux of efficient workflow is to ensure changes don't break your pipeline. That is, after you build a number of pipeline stages, validate results, and decide to change one component in the pipeline, you'd like to minimize code changes needed in other components. The remainder of this tutorial describes these steps individually, then describes nuances of interactions among stages, then provides an example." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Running example: SARS-CoV-2 strain prediction \n", + "\n", + "The running example in this tutorial will be a model [(Obermeyer et al. 2022)](https://www.medrxiv.org/content/10.1101/2021.09.07.21263228v2) of the relative growth rates of different strains of the SARS-CoV-2 virus, based on [open data](https://docs.nextstrain.org/projects/ncov/en/latest/reference/remote_inputs.html) counting different [PANGO lineages](https://cov-lineages.org/) of viral genomic samples collected at different times around the world. There are about 2 million sequences in total.\n", + "\n", + "The model is a high-dimensional regression model with around 1000 coefficients, a multivariate logistic growth function (using a simple [torch.softmax()](https://pytorch.org/docs/stable/generated/torch.nn.functional.softmax.html)) and a [Multinomial](https://pytorch.org/docs/stable/distributions.html#multinomial) likelihood. While the number of coefficients is relatively small, there are about 500,000 local latent variables to estimate, and plate structure in the model should lead to an approximately block diagonal posterior covariance matrix. For an introduction to simple logistic growth models using this same dataset, see the [logistic growth tutorial](logistic-growth.html)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "id": "njvgAMszKM3q" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Using CPU\n" + ] + } + ], + "source": [ + "from collections import defaultdict\n", + "from pprint import pprint\n", + "import functools\n", + "import math\n", + "import os\n", + "import torch\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "import pyro.poutine as poutine\n", + "from pyro.distributions import constraints\n", + "from pyro.infer import SVI, Trace_ELBO\n", + "from pyro.infer.autoguide import (\n", + " AutoDelta,\n", + " AutoNormal,\n", + " AutoMultivariateNormal,\n", + " AutoLowRankMultivariateNormal,\n", + " AutoGuideList,\n", + " init_to_feasible,\n", + ")\n", + "from pyro.infer.reparam import AutoReparam, LocScaleReparam\n", + "from pyro.nn.module import PyroParam\n", + "from pyro.optim import ClippedAdam\n", + "from pyro.ops.special import sparse_multinomial_likelihood\n", + "import matplotlib.pyplot as plt\n", + "\n", + "if torch.cuda.is_available():\n", + " print(\"Using GPU\")\n", + " torch.set_default_tensor_type(\"torch.cuda.FloatTensor\")\n", + "else:\n", + " print(\"Using CPU\")\n", + "smoke_test = ('CI' in os.environ)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ZWFmW8HAKM3s" + }, + "source": [ + "## Clean the data \n", + "\n", + "Our running example will use a pre-cleaned dataset.\n", + "We started with Nextstrain's [ncov](https://docs.nextstrain.org/projects/ncov/en/latest/reference/remote_inputs.html) tool for preprocessing, followed by the Broad Institute's [pyro-cov](https://github.com/broadinstitute/pyro-cov/blob/master/scripts/preprocess_nextstrain.py) tool for aggregation, resulting in a dataset of SARS-CoV-2 lineages observed around the world through time." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "id": "DlWE50HCKM3s" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "counts: Tensor of shape (27, 202, 1316) on cpu\n", + "features: Tensor of shape (1316, 2634) on cpu\n", + "lineages: list of length 1316\n", + "locations: list of length 202\n", + "mutations: list of length 2634\n", + "sparse_counts.index: Tensor of shape (3, 57129) on cpu\n", + "sparse_counts.total: Tensor of shape (27, 202) on cpu\n", + "sparse_counts.value: Tensor of shape (57129,) on cpu\n", + "start_date: datetime\n", + "time_step_days: int\n" + ] + } + ], + "source": [ + "from pyro.contrib.examples.nextstrain import load_nextstrain_counts\n", + "dataset = load_nextstrain_counts()\n", + "\n", + "def summarize(x, name=\"\"):\n", + " if isinstance(x, dict):\n", + " for k, v in sorted(x.items()):\n", + " summarize(v, name + \".\" + k if name else k)\n", + " elif isinstance(x, torch.Tensor):\n", + " print(f\"{name}: {type(x).__name__} of shape {tuple(x.shape)} on {x.device}\")\n", + " elif isinstance(x, list):\n", + " print(f\"{name}: {type(x).__name__} of length {len(x)}\")\n", + " else:\n", + " print(f\"{name}: {type(x).__name__}\")\n", + "summarize(dataset)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6euQcq4SKM3s" + }, + "source": [ + "## Create a generative model\n", + "\n", + "The first step to using Pyro is creating a generative model, either a python function or a [pyro.nn.Module](https://docs.pyro.ai/en/dev/nn.html#pyro.nn.module.PyroModule). Start simple. Start with a shallow hierarchy and later add latent variables to share statistical strength. Start with a slice of your data then add a [plate](https://docs.pyro.ai/en/stable/primitives.html#pyro.primitives.plate) over multiple slices. Start with simple distributions like [Normal](https://docs.pyro.ai/en/stable/distributions.html#pyro.distributions.Normal), [LogNormal](https://docs.pyro.ai/en/stable/distributions.html#pyro.distributions.LogNormal), [Poisson](https://docs.pyro.ai/en/stable/distributions.html#pyro.distributions.Poisson) and [Multinomial](https://docs.pyro.ai/en/stable/distributions.html#pyro.distributions.Multinomial), then consider overdispersed versions like [StudentT](https://docs.pyro.ai/en/stable/distributions.html#pyro.distributions.StudentT), [Gamma](https://docs.pyro.ai/en/stable/distributions.html#pyro.distributions.Gamma), [GammaPoisson](https://docs.pyro.ai/en/stable/distributions.html#pyro.distributions.GammaPoisson)/[NegativeBinomial](https://docs.pyro.ai/en/stable/distributions.html#pyro.distributions.NegativeBinomial), and [DirichletMultinomial](https://docs.pyro.ai/en/stable/distributions.html#pyro.distributions.DirichletMultinomial). Keep your model simple and readable so you can share it and get feedback from domain experts. Use [weakly informative priors](http://www.stat.columbia.edu/~gelman/presentations/weakpriorstalk.pdf)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "S3XpW4EzKM3t" + }, + "source": [ + "We'll focus on a multivariate logistic growth model of competing SARS-CoV-2 strains, as described in [Obermeyer et al. (2022)](https://www.medrxiv.org/content/10.1101/2021.09.07.21263228v2). This model uses a numerically stable `logits` parameter in its multinomial likelihood, rather than a `probs` parameter. Similarly upstream variables `init`, `rate`, `rate_loc`, and `coef` are all in log-space. This will mean e.g. that a zero coefficient has multiplicative effect of 1.0, and a positive coefficient has multiplicative effect greater than 1.\n", + "\n", + "Note we scale `coef` by 1/100 because we want to model a very small number, but the automatic parts of Pyro and PyTorch work best for numbers on the order of 1.0 rather than very small numbers. When we later interpret `coef` in a volcano plot we'll need to duplicate this scaling factor." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "id": "gGdvwzs9KM3t" + }, + "outputs": [], + "source": [ + "def model(dataset):\n", + " features = dataset[\"features\"]\n", + " counts = dataset[\"counts\"]\n", + " assert features.shape[0] == counts.shape[-1]\n", + " S, M = features.shape\n", + " T, P, S = counts.shape\n", + " time = torch.arange(float(T)) * dataset[\"time_step_days\"] / 5.5\n", + " time -= time.mean()\n", + " strain_plate = pyro.plate(\"strain\", S, dim=-1)\n", + " place_plate = pyro.plate(\"place\", P, dim=-2)\n", + " time_plate = pyro.plate(\"time\", T, dim=-3)\n", + "\n", + " # Model each region as multivariate logistic growth.\n", + " rate_scale = pyro.sample(\"rate_scale\", dist.LogNormal(-4, 2))\n", + " init_scale = pyro.sample(\"init_scale\", dist.LogNormal(0, 2))\n", + " with pyro.plate(\"mutation\", M, dim=-1):\n", + " coef = pyro.sample(\"coef\", dist.Laplace(0, 0.5))\n", + " with strain_plate:\n", + " rate_loc = pyro.deterministic(\"rate_loc\", 0.01 * coef @ features.T)\n", + " with place_plate, strain_plate:\n", + " rate = pyro.sample(\"rate\", dist.Normal(rate_loc, rate_scale))\n", + " init = pyro.sample(\"init\", dist.Normal(0, init_scale))\n", + " logits = init + rate * time[:, None, None]\n", + " \n", + " # Observe sequences via a multinomial likelihood.\n", + " with time_plate, place_plate:\n", + " pyro.sample(\n", + " \"obs\",\n", + " dist.Multinomial(logits=logits.unsqueeze(-2), validate_args=False),\n", + " obs=counts.unsqueeze(-2),\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "FSwBD5tNKM3u" + }, + "source": [ + "The execution cost of this model is dominated by the multinomial likelihood over a large sparse count matrix." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "id": "Hf2Qui8UKM3u" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "counts has 57129 / 7177464 nonzero elements\n" + ] + } + ], + "source": [ + "print(\"counts has {:d} / {} nonzero elements\".format(\n", + " dataset['counts'].count_nonzero(), dataset['counts'].numel()\n", + "))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "qA0ZvbCsKM3u" + }, + "source": [ + "To speed up inference (and model iteration!) we'll replace the `pyro.sample(..., Multinomial)` likelihood with an equivalent but much cheaper `pyro.factor` statement using a helper `pyro.ops.sparse_multinomial_likelihood`. " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "id": "fCbB8bN2KM3v" + }, + "outputs": [], + "source": [ + "def model(dataset, predict=None):\n", + " features = dataset[\"features\"]\n", + " counts = dataset[\"counts\"]\n", + " sparse_counts = dataset[\"sparse_counts\"]\n", + " assert features.shape[0] == counts.shape[-1]\n", + " S, M = features.shape\n", + " T, P, S = counts.shape\n", + " time = torch.arange(float(T)) * dataset[\"time_step_days\"] / 5.5\n", + " time -= time.mean()\n", + "\n", + " # Model each region as multivariate logistic growth.\n", + " rate_scale = pyro.sample(\"rate_scale\", dist.LogNormal(-4, 2))\n", + " init_scale = pyro.sample(\"init_scale\", dist.LogNormal(0, 2))\n", + " with pyro.plate(\"mutation\", M, dim=-1):\n", + " coef = pyro.sample(\"coef\", dist.Laplace(0, 0.5))\n", + " with pyro.plate(\"strain\", S, dim=-1):\n", + " rate_loc = pyro.deterministic(\"rate_loc\", 0.01 * coef @ features.T)\n", + " with pyro.plate(\"place\", P, dim=-2):\n", + " rate = pyro.sample(\"rate\", dist.Normal(rate_loc, rate_scale))\n", + " init = pyro.sample(\"init\", dist.Normal(0, init_scale))\n", + " if predict is not None: # Exit early during evaluation.\n", + " probs = (init + rate * time[predict]).softmax(-1)\n", + " return probs\n", + " logits = (init + rate * time[:, None, None]).log_softmax(-1)\n", + "\n", + " # Observe sequences via a cheap sparse multinomial likelihood.\n", + " t, p, s = sparse_counts[\"index\"]\n", + " pyro.factor(\n", + " \"obs\",\n", + " sparse_multinomial_likelihood(\n", + " sparse_counts[\"total\"], logits[t, p, s], sparse_counts[\"value\"]\n", + " )\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "UPtf7TPSKM3v" + }, + "source": [ + "## Sanity check using mean field inference\n", + "\n", + "Mean field Normal inference is cheap and robust, and is a good way to sanity check your posterior point estimate, even if the posterior uncertainty may be implausibly narrow. We recommend starting with an [AutoNormal](https://docs.pyro.ai/en/latest/infer.autoguide.html#autonormal) guide, and possibly setting `init_scale` to a small value like `init_scale=0.01` or `init_scale=0.001`.\n", + "\n", + "Note that while MAP estimating via [AutoDelta](https://docs.pyro.ai/en/latest/infer.autoguide.html#autodelta) is even cheaper and more robust than mean-field `AutoNormal`, `AutoDelta` is coordinate-system dependent and is not invariant to reparametrization. Because in our experience most models benefit from some reparameterization, we recommend `AutoNormal` over `AutoDelta` because `AutoNormal` is less sensitive to reparametrization (`AutoDelta` can give incorrect results in some reparametrized models)." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "id": "Uhl_-vMIKM3v" + }, + "outputs": [], + "source": [ + "def fit_svi(model, guide, lr=0.01, num_steps=1001, log_every=100, plot=True):\n", + " pyro.clear_param_store()\n", + " pyro.set_rng_seed(20211205)\n", + " if smoke_test:\n", + " num_steps = 2\n", + "\n", + " # Measure model and guide complexity.\n", + " num_latents = sum(\n", + " site[\"value\"].numel()\n", + " for name, site in poutine.trace(guide).get_trace(dataset).iter_stochastic_nodes()\n", + " if not site[\"infer\"].get(\"is_auxiliary\")\n", + " )\n", + " num_params = sum(p.unconstrained().numel() for p in pyro.get_param_store().values())\n", + " print(f\"Found {num_latents} latent variables and {num_params} learnable parameters\")\n", + " \n", + " # Save gradient norms during inference.\n", + " series = defaultdict(list)\n", + " def hook(g, series):\n", + " series.append(torch.linalg.norm(g.reshape(-1), math.inf).item())\n", + " for name, value in pyro.get_param_store().named_parameters():\n", + " value.register_hook(\n", + " functools.partial(hook, series=series[name + \" grad\"])\n", + " )\n", + "\n", + " # Train the guide.\n", + " optim = ClippedAdam({\"lr\": lr, \"lrd\": 0.1 ** (1 / num_steps)})\n", + " svi = SVI(model, guide, optim, Trace_ELBO())\n", + " num_obs = int(dataset[\"counts\"].count_nonzero())\n", + " for step in range(num_steps):\n", + " loss = svi.step(dataset) / num_obs\n", + " series[\"loss\"].append(loss)\n", + " median = guide.median() # cheap for autoguides\n", + " for name, value in median.items():\n", + " if value.numel() == 1:\n", + " series[name + \" mean\"].append(float(value))\n", + " if step % log_every == 0:\n", + " print(f\"step {step: >4d} loss = {loss:0.6g}\")\n", + "\n", + " # Plot series to assess convergence.\n", + " if plot:\n", + " plt.figure(figsize=(6, 6))\n", + " for name, Y in series.items():\n", + " if name == \"loss\":\n", + " plt.plot(Y, \"k--\", label=name, zorder=0)\n", + " elif name.endswith(\" mean\"):\n", + " plt.plot(Y, label=name, zorder=-1)\n", + " else:\n", + " plt.plot(Y, label=name, alpha=0.5, lw=1, zorder=-2)\n", + " plt.xlabel(\"SVI step\")\n", + " plt.title(\"loss, scalar parameters, and gradient norms\")\n", + " plt.yscale(\"log\")\n", + " plt.xscale(\"symlog\")\n", + " plt.xlim(0, None)\n", + " plt.legend(loc=\"best\", fontsize=8)\n", + " plt.tight_layout()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "id": "-z-UBawaKM3w" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found 538452 latent variables and 1068600 learnable parameters\n", + "step 0 loss = 273.123\n", + "step 100 loss = 63.2423\n", + "step 200 loss = 44.9539\n", + "step 300 loss = 34.8813\n", + "step 400 loss = 30.4243\n", + "step 500 loss = 27.5258\n", + "step 600 loss = 25.4543\n", + "step 700 loss = 23.9134\n", + "step 800 loss = 22.7201\n", + "step 900 loss = 21.8574\n", + "step 1000 loss = 21.2031\n", + "CPU times: user 3min 4s, sys: 2min 48s, total: 5min 52s\n", + "Wall time: 1min 47s\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "%%time\n", + "guide = AutoNormal(model, init_scale=0.01)\n", + "fit_svi(model, guide)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8CB2cHfbKM3w" + }, + "source": [ + "After each change to the model or inference, you'll validate model outputs, closing [Box's loop](http://www.cs.columbia.edu/~blei/papers/Blei2014b.pdf). In our running example we'll quantitiatively evaluate using the mean average error (MAE) over the last fully-observed time step." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "id": "jzIoMBXfKM3w" + }, + "outputs": [], + "source": [ + "def mae(true_counts, pred_probs):\n", + " \"\"\"Computes mean average error between counts and predicted probabilities.\"\"\"\n", + " pred_counts = pred_probs * true_counts.sum(-1, True)\n", + " error = (true_counts - pred_counts).abs().sum(-1)\n", + " total = true_counts.sum(-1).clamp(min=1)\n", + " return (error / total).mean().item()\n", + "\n", + "def evaluate(\n", + " model, guide, num_particles=100, location=\"USA / Massachusetts\", time=-2\n", + "):\n", + " if smoke_test:\n", + " num_particles = 4\n", + " \"\"\"Evaluate posterior predictive accuracy at the last fully observed time step.\"\"\"\n", + " with torch.no_grad(), poutine.mask(mask=False): # makes computations cheaper\n", + " with pyro.plate(\"particle\", num_particles, dim=-3): # vectorizes\n", + " guide_trace = poutine.trace(guide).get_trace(dataset)\n", + " probs = poutine.replay(model, guide_trace)(dataset, predict=time)\n", + " probs = probs.squeeze().mean(0) # average over Monte Carlo samples\n", + " true_counts = dataset[\"counts\"][time]\n", + " # Compute global and local KL divergence.\n", + " global_mae = mae(true_counts, probs)\n", + " i = dataset[\"locations\"].index(location)\n", + " local_mae = mae(true_counts[i], probs[i])\n", + " return {\"MAE (global)\": global_mae, f\"MAE ({location})\": local_mae}" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "id": "LVhNFPu4KM3x" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'MAE (USA / Massachusetts)': 0.26023179292678833,\n", + " 'MAE (global)': 0.22586050629615784}\n" + ] + } + ], + "source": [ + "pprint(evaluate(model, guide))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fj--86jAYzN6" + }, + "source": [ + "We'll also qualitatively evaluate using a volcano plot showing the effect size and statistical significance of each mutation's coefficient, and labeling the mutation with the most significant positive effect. We expect:\n", + "- most mutations have very little effect (they are near zero in log space, so their multiplicative effect is near 1x)\n", + "- more mutations have positive effect than netagive effect\n", + "- effect sizes are on the order of 1.1 or 0.9." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "id": "wgQMV_DpKM3x" + }, + "outputs": [ + { + "data": { + "image/png": "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RVEUJbaoUlAURVEcVCkoiqIoDqoUFEVRFAdVCoqiKIqDKgVFURTFQZWCoigD4rXXXmP58uWUlJTwjW98g97eXubPn89VV13FZZddxssvvwzAc889x/z58ykpKWHVqlUA3HvvvUyZMoUNGzY49V1xxRV9Xq+8vJzrrruOkpISrrzySqf+Dz/8kE9/+tNcddVVPPPMM2HLrr/+epYvX84nP/lJKioqANi4cSOXXXYZy5cv5+677x7eBhrtGGNG7V9hYaEZadrq683RV14xbfX1I34tRYl36urqzPLly01LS4sxxpjvfOc75ic/+Ym5/PLLjTHGtLW1mauuusoYY8zPf/5z8/TTTwecX1VVdVa5fW4oOjs7zfLly01VVZXz/u233zbGGHPbbbeZ2tragM+HKjt27Jgxxpg//elP5hvf+IYxxphLL73UdHd3G2OMaWhoGEALjA2A3SZMv6qWQj/o+j6K8jGvvPIKn//850lLSwPg61//Oi+99JJzvKWlhe7u7rDn5+XlnVXW09PDHXfcwdKlS/nDH/4AwPe+9z0qKyt55513uPLKK53zkpOTueyyy+ju7ubDDz/ky1/+Mtdeey3vv/9+yDKA2bNnA5CUlERCQgIAra2tlJWVcebMGbKysoahZcYOqhT6QXcgG350ddXRS3V1Nfn5+c771NRUurq6qKurY8WKFcybN48HHnjAOf7973+fkpKSgLJg6urqeOSRR9i+fTvf/e53AfjHf/xHCgoKqKqqchTC66+/TklJCbfccgv19fXs37+fp556in/9139l7dq1Ictsent7efTRR/nyl78M+Fxb3//+93G73Tz11FPD2kajHVUK/aDr+ww/an2NXvLy8qiqqnLed3R0kJSUxJQpU9i+fTu/+c1vKC0tdY7ff//9lJaWOp19KHJycpg5cyZpaWnOSD7U9a6++mpKS0upqalh0qRJLFq0iClTpnD++efj9XpDltl885vf5Pbbb2fOnDkAXHrppfzud7+jvLycZ599lpaWluFonjGBKgUl6qj1NXpZtWoVzz//PK2trQA8/vjjfPazn3WOX3PNNezZs4fGxsaI62xoaKCiooK2tjZ6e3sDjl122WWUlpY6iqGnpweAiRMnkp6eTltbG5WVlWRmZoYsA3jmmWcQEW6//XanXo/H49TjcrkG3hBjmFgtna2MY2zrSxl9TJ06lQceeIDrrruOCRMmsHjxYu6//342bdrkfOa2227j5z//OdnZ2Wed/y//8i9s2rQJYwxVVVU8+OCD5Obmsm7dOt59910efPBBwBdT+PznP09BQQE//vGP+cIXvkBPTw8TJkzg3nvvBeDb3/421157LT09PTz55JNhy+69916KioooKSlhxYoVPPzww3z96193FNfNN99Menr6iLbbaEJ8gejRydKlS83u3btjLYYyANq9XqrLysgrLlaXnKLECBHZY4xZGuqYuo+UqKLxBCUSNBkhdqhSUKKKHU/Icrv1R6+ERQcPsWPcKwUdkUQXO57Q6PHoj14JiyYjxI5xH2i2RySABj+jiO7vrPSFfzKCxqGiy7hVCvaDluV2A9o5RRvNQFIiRQdu0WXcKgV90BRldKBWZXQZt0pBHzRFiS/CuYnUqowu4zbQrMtXKMrAGc7EjOC64iHjSBNPxrFSUBRl4AR33P6d6EA71OC64iHjKB4UU6wZt+4jRVEGTrDb1T82BwwoThdcVzy4idStrJaCoigDwL/jPrZ1K1lutzO6z3K7EREnoy/SuuLJhRsrmYKtrFi6sVQpKIoyYGwLodHjcTrRRo8HYwyN1gqkSuQc37aNAxs3cnzbNiC2bix1HymKMmBCuVnU9TJ4upqbaamspKu5GYhtW6qloChKxNhuDeAsN0s8uoMGQixdNskZGaQXFJCckQHEti3VUlAUJWIimfQ52palsOXtbGqi4dAhIHoTWu1rTyssJCUzMy6sLFUKiqL0y0CWhRnMagHtXq/jT5+1cmVUlYktb/aCBVFJibXb0pWby94nniDV2ozovNWrHWsllgpVlYKiKCHxH/FXl5VxorSUml27WHzffX12WIPxh1eXlXF0yxYAUjIzo5qa6i/vSHbEdnu2VFZyorSUruZmGg4dYuKUKSz56lcBBtTOI4XGFBRlHBNu8lm718u+9es5UVrqKIbktDS6W1v7zYgJ5w/vy2efV1zMnOuvZ87110fdhTKc/vvge2z0eNjx8MO+peLtjK0jRwBIO+ccElJSSM3OdjK2wrVzNOMdaikoyjgmePKZPUrNmj+f7tZWktPSnBH0wjVrOLhpU8TzEPq6VrAl4MrJYeEttwz+RmJIsEXlf48HN23ixBtvALD4vvvobGqipboagHk33cTMT34SCJzAt/i++5z6bKK5gOe4VQqj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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "def plot_volcano(guide, num_particles=100):\n", + " if smoke_test:\n", + " num_particles = 4\n", + " with torch.no_grad(), poutine.mask(mask=False): # makes computations cheaper\n", + " with pyro.plate(\"particle\", num_particles, dim=-3): # vectorizes\n", + " trace = poutine.trace(guide).get_trace(dataset)\n", + " trace = poutine.trace(poutine.replay(model, trace)).get_trace(dataset, -1)\n", + " coef = trace.nodes[\"coef\"][\"value\"].cpu()\n", + " coef = coef.squeeze() * 0.01 # Scale factor as in the model.\n", + " mean = coef.mean(0)\n", + " std = coef.std(0)\n", + " z_score = mean.abs() / std\n", + " effect_size = mean.exp().numpy()\n", + " plt.figure(figsize=(6, 3))\n", + " plt.scatter(effect_size, z_score.numpy(), lw=0, s=5, alpha=0.5, color=\"darkred\")\n", + " plt.yscale(\"symlog\")\n", + " plt.ylim(0, None)\n", + " plt.xlabel(\"$R_m/R_{wt}$\")\n", + " plt.ylabel(\"z-score\")\n", + " i = int((mean / std).max(0).indices)\n", + " plt.text(effect_size[i], z_score[i] * 1.1, dataset[\"mutations\"][i], ha=\"center\", fontsize=8)\n", + " plt.title(f\"Volcano plot of {len(mean)} mutations\")\n", + "\n", + "plot_volcano(guide)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5MY99Q-zKM3x" + }, + "source": [ + "## Create an initialization heuristic\n", + "\n", + "In high-dimensional models, convergence can be slow and NANs arise easily, even when sampling from [weakly informative priors](http://www.stat.columbia.edu/~gelman/presentations/weakpriorstalk.pdf). We recommend heuristically initializing a point estimate for each latent variable, aiming to initialize at something that is the right order of magnitude. Often you can initialize to a simple statistic of the data, e.g. a mean or standard deviation.\n", + "\n", + "Pyro's autoguides provide a number of [initialization strategies]() for initializing the location parameter of many variational families, specified as `init_loc_fn`. You can create a custom initializer by accepting a pyro sample site dict and generating a sample from `site[\"name\"]` and `site[\"fn\"]` using e.g. `site[\"fn\"].shape()`, `site[\"fn\"].support`, `site[\"fn\"].mean`, or sampling via `site[\"fn\"].sample()`." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "id": "_PzZX6fKKM3x" + }, + "outputs": [], + "source": [ + "def init_loc_fn(site):\n", + " shape = site[\"fn\"].shape()\n", + " if site[\"name\"] == \"coef\":\n", + " return torch.randn(shape).sub_(0.5).mul(0.01)\n", + " if site[\"name\"] == \"init\":\n", + " # Heuristically initialize based on data.\n", + " return dataset[\"counts\"].mean(0).add(0.01).log()\n", + " return init_to_feasible(site) # fallback" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zwlg9pV6KM3y" + }, + "source": [ + "As you evolve a model, you'll add and remove and rename latent variables. We find it useful to require inits for all latent variables, add a message to remind yourself to udpate the `init_loc_fn` whenever the model changes." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "id": "rCZI0TMGKM3y" + }, + "outputs": [], + "source": [ + "def init_loc_fn(site):\n", + " shape = site[\"fn\"].shape()\n", + " if site[\"name\"].endswith(\"_scale\"):\n", + " return torch.ones(shape)\n", + " if site[\"name\"] == \"coef\":\n", + " return torch.randn(shape).sub_(0.5).mul(0.01)\n", + " if site[\"name\"] == \"rate\":\n", + " return torch.zeros(shape)\n", + " if site[\"name\"] == \"init\":\n", + " return dataset[\"counts\"].mean(0).add(0.01).log()\n", + " raise NotImplementedError(f\"TODO initialize latent variable {site['name']}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "id": "gxbVyvhnKM3y" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found 538452 latent variables and 1068600 learnable parameters\n", + "step 0 loss = 127.475\n", + "step 100 loss = 44.9544\n", + "step 200 loss = 31.4236\n", + "step 300 loss = 24.4205\n", + "step 400 loss = 20.6802\n", + "step 500 loss = 18.6063\n", + "step 600 loss = 17.2365\n", + "step 700 loss = 16.5067\n", + "step 800 loss = 16.001\n", + "step 900 loss = 15.5123\n", + "step 1000 loss = 18.8275\n", + "{'MAE (USA / Massachusetts)': 0.29367634654045105,\n", + " 'MAE (global)': 0.2283070981502533}\n", + "CPU times: user 3min 17s, sys: 2min 51s, total: 6min 9s\n", + "Wall time: 1min 58s\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "%%time\n", + "guide = AutoNormal(model, init_loc_fn=init_loc_fn, init_scale=0.01)\n", + "fit_svi(model, guide, lr=0.02)\n", + "pprint(evaluate(model, guide))\n", + "plot_volcano(guide)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "pxeYvAlqKM3y" + }, + "source": [ + "## Reparametrize the model\n", + "\n", + "Reparametrizing a model preserves its distribution while changing its geometry. Reparametrizing is simply a change of coordinates. When reparametrizing we aim to warp a model's geometry to remove correlations and to lift inconvenient topological manifolds into simpler higher dimensional flat Euclidean space.\n", + "\n", + "Whereas many probabilistic programming languages require users to rewrite models to change coordinates, Pyro implements a library of about 15 different reparametrization effects including decentering (Gorinova et al. 2020), Haar wavelet transforms, and neural transport (Hoffman et al. 2019), as well as strategies to automatically apply effects and machinery to create custom reparametrization effects. Using these reparametrizers you can separate modeling from inference: first specify a model in a form that is natural to domain experts, then in inference code, reparametrize the model to have geometry that is more amenable to variational inference." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9Xuae9EEKM3y" + }, + "source": [ + "In our SARS-CoV-2 model, the geometry might improve if we change\n", + "```diff\n", + "- rate = pyro.sample(\"rate\", dist.Normal(rate_loc, rate_scale))\n", + "+ rate = pyro.sample(\"rate\", dist.Normal(0, 1)) * rate_scale + rate_loc\n", + "```\n", + "but that would make the model less interpretable. Instead we can reparametrize the model" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "id": "nct66uSCKM3y" + }, + "outputs": [], + "source": [ + "reparam_model = poutine.reparam(model, config={\"rate\": LocScaleReparam()})" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Kx8Snxk2KM3y" + }, + "source": [ + "or even automatically apply a set of recommended reparameterizers" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "id": "DEaRa83fKM3z" + }, + "outputs": [], + "source": [ + "reparam_model = AutoReparam()(model)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4M-04R17KM3z" + }, + "source": [ + "Let's try reparametrizing both sites \"rate\" and \"init\". Note we'll create a fresh `reparam_model` each time we train a guide, since the parameters are stored in that `reparam_model` instance. Take care to use the `reparam_model` in downstream prediction tasks like running `evaluate(reparam_model, guide)`." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "id": "6s7Rfq6pKM3z" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found 538452 latent variables and 1068602 learnable parameters\n", + "step 0 loss = 127.368\n", + "step 100 loss = 20.2831\n", + "step 200 loss = 11.0703\n", + "step 300 loss = 9.64594\n", + "step 400 loss = 9.52988\n", + "step 500 loss = 9.09012\n", + "step 600 loss = 9.25454\n", + "step 700 loss = 8.60661\n", + "step 800 loss = 8.9332\n", + "step 900 loss = 8.64206\n", + "step 1000 loss = 8.56663\n", + "{'MAE (USA / Massachusetts)': 0.1336274892091751,\n", + " 'MAE (global)': 0.1719919890165329}\n", + "CPU times: user 4min 21s, sys: 3min 9s, total: 7min 31s\n", + "Wall time: 2min 17s\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAGoCAYAAAATsnHAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAEAAElEQVR4nOz9d5xk533eiX7fEytXdVfnnu6ePBjkHEiABMEoilEWKYuUrZXWSWv72p/ru07ra8v29Uq+3rXlu/Z6rxUsK5CUSFEMEAOYAAIEQeQ4mBy6ezpXTie/+8c5VV3VYfIAA7AeoKdOnfCe94R6n/eXhZSSPvroo48++rjWoLzZHeijjz766KOPrdAnqD766KOPPq5J9Amqjz766KOPaxJ9guqjjz766OOaRJ+g+uijjz76uCbRJ6g++uijjz6uSfQJ6g2EEOK0EOJ9b3Y/rgSEEL8uhPijN7sffVw5vNnPtPv3IYT4p0KI33mz+tLHtQHtze5AH3281SGEkMA+KeXxN7svbxdIKf/XK9GOEGIncArQpZTelWizjzcOfQmqjzccQgj1rdz+lYQQ4m05SXwrPYMriZ/W675a6BPUmwQhhCmE+C0hxEL091tCCDPaNiSEeFgIURZCFIUQjwshlGjbPxJCnBVC1IQQR4QQ773A8215nBBCjdQpJ6JtzwkhpqJt/1EIMSeEqEbrHzhH+18UQiwJISpCiB8KIW7o2vb7Qoj/IoT4hhCiAbxni+MfFUL8hhDi6eh8XxVCDF5q+0KInxVCvBC1NSeE+PWu/XcKIaQQ4leibSUhxN8SQtwlhHg5uu//aUP/flUI8Xq077eFEDPR+h9Gu7wkhKgLIX4hWv8RIcSLUVtPCiFu7mrrdPQ8XgYaQgjtMp7rP+56doeEEJ/s2vY/CCGeEEL8b1G/TwkhfqZr+y4hxGPRsd8Bhs5zrn8ohFiM3te/Ft3DvZfyDKJj/ooQ4owQoiCE+F82bOtRNwoh7o3uY1kI8ZIQ4sGubY8KIf61EOJH0bU8IoRoX0v7+ZSj53PfFtf160KIPxVC/EF0/GtCiDu7th+MzlGOtn2sa9tW131aCPE/R+9SQwjxu0KIUSHEN6P2vyuEGIiOjwkh/ii6B2UhxDNCiNFzPYefKkgp+39v0B9wGnhftPyvgKeAEWAYeBL419G23wD+L0CP/h4ABHAAmAMmov12Ansu4LzbHgf8z8Ar0T4CuAXIR9t+CcgTqoL/AbAExKJtvw78Udc5fhVIAybwW8CLXdt+H6gA7yScFMW26OOjwFngRiAJ/NnltA88CNwUfb8ZWAY+0XX9MrrHMeADgAV8JXoek8AK8O5o/48Dx4GD0b34Z8CTXeeXwN6u77dFx98DqMAvR8/e7HoPXgSmgPilPtdo308BE9F1/gLQAMajbf8D4AJ/PerHrwELgIi2/xj499E9fRdQ677nG87zoej53wAkgD/qvu5LeAbXA/XovGbUD4/138evt/sSPY8C8OGorfdH34e73p0TwP7ofj4K/OaGZ62d4x7+evT8Pxzdp98Anoq26dGz/6eAATwU3acD57ju04S/7VHW36XnCd+LGPB94F9Ex/9N4OvRPVWBO4DMmz1WXSt/b3oHfpr+6CWoE8CHu7Z9EDgdLf8r4Kt0DXrR+r3Ry/4+Qp36hZ532+OAI8DHL7CdEnBLtNwZQLbYLxcNCtno++8Df3CetjuDSvT9esAB1CvU/m8B/yFabg9ak13bC8AvdH3/M+DvR8vfBP7Hrm0K0ARmou8bCeq/EE02Ntznd3e9B796uc91m+t8sf08CQnqeNe2RNTXMWCakBCSXds/d45n+nvAb2zo80aCuphn8M+BL3RtS0bPeyuC+kfAH25o69vAL3e9O/+sa9v/BHxrw7M+H0F9d8O714qWHyAkZqVr++eBX9/uuqPn+9kN79J/6fr+d4GvRMu/Sjg5vflynvvb9a+v4nvzMAGc6fp+JloH8O8IZ22PCCFOCiH+MYAMjfB/n/AHtSKE+IIQYoLz4DzHTRGS5SYIIf5fkVqrIoQoA1m2UAOJUE34m5GqqUr4A2XDvnPn6+eGfc4Qzl6HLqV9IcQ9QogfCCFWhRAV4G9t0fflruXWFt9T0fIM8B8jFUwZKBJKm5PbXMcM8A/a+0fHTLH+fHv6e6nPNbrOvyrWVYllQgm0+zqXus7TjBZTUV9KUspG177d7+NGTNB7j7d6nhfzDHrai/pR2ObcM8CnNtzP+4Hxrn2WupabrD+7C8XG42MitA9OAHNSyqBr+xl6n/1W9+JC360/JCTbL0Sq0/+vEEK/yL6/bdEnqDcPC4Q/vDamo3VIKWtSyn8gpdwNfAz4f4rIJiGl/JyU8v7oWAn82ws52TmOmwP2bNxfhPamfwh8GhiQUuYIVRlii+Y/Q6gGex8hie1sN9PdhQvo5lTX8jShemrtEtv/HPA1YEpKmSVU523V9wvBHPA3pZS5rr+4lPLJc+z/bzbsn5BSfn67/l7KcxWhHey3gb9DqJbNAa9yYde5CAwIIZJd66bPs/+Oru9TW+xzMc9gsbsNIUSCUJ28FeYIJaju+5mUUv7mOfq7XZ8uFgvAlIhswBGmCdXRl30OKaUrpfyXUsrrgXcAHwH+6qW293ZDn6DePHwe+GdCiOHIoPvPCfX6bQP7XiGEICQFHwiEEAeEEA+J0JnCIpyJBdExD4rQ3XkTznUc8DvAvxZC7BMhbhZC5AntPR6wCmhCiH8OZLa5ljRgE86AE8Clugj/khDi+miw+lfAl6SU/iW2nwaKUkpLCHE3IcldKv4v4J+IyDFDCJEVQnyqa/sysLvr+28DfyuSIIQQIilCh4H0Vo1f6nMlVItJwmeEEOJXCCWo80JKeQZ4FviXQghDCHE/8NFzHPKnwK9EDgMJ4P99Aac51zP4EvARIcT9QgiD8HlvNx79EfBRIcQHI2k6Ft2XHdvs341Vwnu5+3w7boOfEEpU/1AIoYvQOeOjwBcusb0eCCHeI4S4SYTef1XCSVlwnsN+atAnqDcP/x/CAeJlQieF56N1APuA7xIakX8M/J9Syh8QGpN/k1CqWCI06P+T6JgpQl32VjjXcf+ecPB5hPAH8ruEhuZvA98CjhKqNCy2V9P9QbTPWeAQoYH4UvCHhDr9JUJj8v/jMtr/n4B/JYSoEZL/n15in5BS/jmhRPOFSMX4KvAzXbv8OvDfI/XTp6WUzxI6JvwnQrvdcUJ70Ha4pOcqpTwE/O+E78gyoUPCjy7i0j5D6MhRBP4F4X3eElLKbwL/P+AHhNfTfgb2Odrf9hlIKV8D/jahlLVIeJ/mtzn3HKEE/U8JCWeO0LnnvONXpNb8N8CPoudz7/mO2XC8Q0hIP0P4fP5P4K9KKQ9fTDvnwBghWVeB14HHCH8HfbDuzdPHWxwijLr/opTy2292Xy4FQohHCY3i/ewBXbhWn6sQ4iAhUZuyHwDbx1XC2zJI8KcRUsq/9mb3oY8rj2vpuYowxuobhGrWfwt8vU9OfVxN9FV8ffTRx4XibxK6w58gtIv+2pvbnT7e7uir+Proo48++rgm0Zeg+uijjz76uCZxTdughoaG5M6dO9/sbvTRRx999HEZeO6559aklMMXe9w1TVA7d+7k2WeffbO70UcfffTRx2VACHGuLCXboq/i66OPPvro45pEn6D66KOPPvq4JtEnqD766KOPPq5J9Amqjz766KOPaxJ9guqjjz766OOaRJ+g+uijjz76uCbRJ6g++uijjz6uSfQJqo8++uijj2sSfYLqo48++ujjmsQblkkiKiH+2eic10sp3/FGnbuPPvroo4+3Hi5LghJC/J4QYkUI8eqG9R8SQhwRQhwXQvxjACnl41LKvwU8DPz3yzlvH3300Ucfb39crorv94EPda8QQqjAfyYskXw98ItCiOu7dvkMYZnnPvroo48++tgWl0VQUsofAsUNq+8GjkspT0opHeALwMcBhBDTQEVKWduuTSHE3xBCPCuEeHZ1dfVyutdHH3300cdbGFfDSWISmOv6Ph+tA/gfgf92roOllP9VSnmnlPLO4eGLzs7eRx999NHH2wRvaLkNKeW/uJj9Pa9Go3GcWGwKVTWvVrf6uEwEgYfrFlHVOKqaRIi3tnOolBLLWsC2F6PvASABiUSSTOzGNEff1D720cdPA64GQZ0Fprq+74jWXTSEUKnWXmV19TvoxiDx+DSJ+AymOUpo6urjzYCUAbazgtWap9WaxbaXULU0QWAT+C1ULYWmpdG1DGr0qWlpNC2DqqZQlGuvDJmUEsdZpV4/QqNxFEWJEY/vQIior0JBIEAGLC1/jWRiDwMD96Gq8Te343308TbG1RgpngH2CSF2ERLTXyZ0jLhoqGqC8bFPEAQetr1AqzXHWuFRPLdKLDZBPDFDIj6NpuUQQlzJa+ijC1JKXLdIywoJybIWUNUE8fgUmcwtxGI/25Fwg8DD92t4Xg3Xq+J5NVrWPJ4XrvO9Oooa7xCW1kVgqpZGXITWWQgVTctc1rN33Qr1+uvU60eQBKSS+xkb+ziGMbTtMdnsnZRKTzI//4cMDNxHOn1j//3ro4+rACGlvPSDhfg88CAwBCwD/0JK+btCiA8DvwWowO9JKf/NpbR/5513yq0q6vp+k1ZrjlZrllZrFhDE49PR31R/VnsF4Hm16P7O07LmEEIlHttBPD5NLDaJpqUuqV0pA3y/0UNgXvTpe3UkwQW3FfgWicRuhobec0kStWUtsLz8dZKpA6SSBzDNsYsiGttepVD4AVIGjI5+5JLvSR99vN0hhHhOSnnnRR93OQR1tbEdQXWjM7uPCMuyzqLruYisZjDNsWtSpXStwfdbtFpzWJGUFAQ2sfgU8dgU8fgUmpa95qSEILBZWX2EwLcYHf1ZVDVxwcda1iLLy19nePgDJBI7L7kPUkpW1x5B1wcZyN11ye1shO+3KJWeIggcpPQIAgvPbyADl8nJz6KqsSt2rj76uNq4VIJ6y4/cQggMI49h5Mlmb0VKH8taotU6Q7H4BK5bCtWBkXSl6/lrbqB9MxAEDpZ1tiMheW6FWGySeHwH6fRNGMbQNX+fFMVkdOQjlEo/5uzCnzA68hFM8/yen5a9FJHT+y+LnCB8/1LJ6yiVn7qiBFWrH8L1KqSSBxBCRVFMNC1FofAYLWuOVHLfFTtXH31cq3jLE9RGCKESj08Sj08C78D3LVpWKF1Vqi8ipU8iPk0sPk08NoWmJd/sLr8h6BC3NYvVmsdxVjHMEeKxKYbyD75lHU+EEAwOvgPDyLO09GXyQw+dc/C27CWWl74WkdOuK9KHeHwHKyslPK9xxd6nRuM4A7l7SSRmetYnEjtptWb7BNXHTwXedgS1EaoaI5XcRyq5Dyklnleh1Zql0ThGYe1RND0TSlexKWKxCRRFf7O7fEXQ9kprtWZpWfPY1iK6niMWnyKXu/ttda0AqdQBdD3H8vJf4DoFcrl7NkmAtr3M8tLXGBp63xUjJ4gmRYkZmq1TZNI3XnZ7rlvFc8vE4zs2bYvHp6lUX0JKec1LuH30cbl42xNUN4QQ6HoOXc+RydwcukvbS7Ras5TLP8Fx1jDNceLxKeLxmbeEmquN0BZXimxIc7SseVQ1Tjw2RSZ9I7HhD73t7RamOcrExC+wvPIwjlNgePj9KIoBgG2vsLT0VYaG3ksyufuKnzuZ2E29fuSKEFSjeYxEYs+WEq2u55HSx/Mq6Hruss/VRx/XMn6qCGojhFCIxSaIxSYYGLgX37c7TgIrK98gCGzi8ZmIsKavOS+t0NNuvqO2A4jHp0gkdpPPvwtNS7/JPXzjoWlJxsf+EoXC91lY/BJjox/F9y2Wlr/K0NBDJJN7rsp54/EZ1ta+TxA4HVK8VLTVe1tBCEEiPk2rNdsnqD7e9vipJqiNUFWTZHJPZxBz3Sqt1hmazVMUio+jqckOWcVik5c9EF0sfN/qkpDm8P1W5Po9xUDu7n48WARF0Rgaej/V6gucXfgTQJLPP0gyufeqnVNVY5jmCK3W3GWR4LnUe23E4tM0GsfIZG6+5PP00cdbAX2COgd0PYOu30Qmc1Mne0KrOUu58hzOyjdDJ4N4GCxsGCNXnBxCT7sFWtY8VmsO1y1jxkIV5Ej6QxjGcJ+QtoEQgmz2dgxjKHSMuYI2p+2QSOym2Tx5WQR1LvVeG/HYFIW1R5EyeMunleqjj3OhT1AXCCEUYuYYMXOMAe7uuGk3W2eiWJxmGDcUpWO6FPWalD62vRzFdM3hOCsYxjDx+BSDg+8iFht7S3ravZmIx6ffsHMlErspl5+5LOI4l3qvDU1LoukZbHuJWGxiy32klPh+/adSzdvH2wd9grpEKIpBIrGrMzNfz7wwR6n4oyiX23Rkw5pEUTYnuw097dawrLkoSHYBTc8Sj02Ry90Zedq9sWrEPi4dup5FVZPnJI5zwXGK51XvtRGPTWJZC9uex7LmWVr+Gjtn/lZ/UtPHWxZ9grpC0LQ06fQNpNM39Lh4V6svsrr6rUgSmiYWm8B1Sx21XUhkU6TS1zM8/IF+mqa3OBKJXTSaJy+JoErln5DJ3n5BhKJpWVy3tO32au0VZOBh2yvEYuMX3Zc++rgWcE0TlFV3OfLUIoqqoGgCtedTQVEFqiZQVKXrM1wfbguX32g7jRAC0xzBNEfI5e4kCNwoa8McxdKT6FqORHwn+cEH+iqYtxkSyd2srj5CfvD+zrp2/sFzlSKx7VUsa57hofde0Hk0LRXlodwM32/Sas6SSl+HZZ3tIah64xgxc6z/3vXxlsA1TVBGTGNsTxbfkwR+EH56Ab4vcW2PwJP4ftDz2d6v8z2QIVmpXYSmKahq+zMitC7ia5NdLwEqPaR3McSnKDqJxM7LTqvTx7UP0xglCBxct4Sm5Wg0j4c59fwmQeCiaSk0LUsmc3OPM0Wp9CS57F0XrNJVtRSeX+98932b1dVvMzBwL63WLMnkbuLxndTrh3uOKxYeJ5U6wODgO6/MBffRx1XENU1QiibIDl94AtCtIANJ4EeE5Ut8r+vTkwTBBuKzPCw/JLoeAmwftxXxaevE1UN8mugiwF7i20h2HUJUBUJ546W+Pq4MhBAkErsolZ7GdYtIJPnB+4nHd0YBtlUct0Ch8Bi2s8JA7l5sexHHLTIy8rMXfB5NTeN7tc531y1gO8ssLX0FiWRs9GNoWpq1wg86WSc8r4bvN6nXDzMwcF/fA7CPax7XNEFdCQhFoCoCVb+yP8Ye4vM2EOBGia6b+CKia69vLwfRsu8FSMk6ialbkFgPsUUSntpLfr37KZvaE0qfAK8WUskDFIo/JJe9k2RyX2eyIYSGYQxiGIPEzAlWVr7Bsv11gsBiIHfPRWXdV9UEQeAQBB6KouF5NWKxSfKDD9BoHOuUDlEUA9ctYBhDWNYCicROXK+KZc2/oR6OffRxKXjbE9TVwtUiPtgs9W1FYhvXu45P4Hs969uq0fV1620KwXlJrJcUNxLg1vsLJdqu/PRKgvH4DnZMnrtGp6YlGR//OQqFH2JZNVKp6y7qHEIIVC2F79dRlByuV+0UgMxmb1/vS+Tt1yaoWGyCGBPU64f7BNXHNY8+QV2DuJrkB6F7e5sEtyLCkNg2kKIf4Dpez3rP87Fsm5ZrYbs2wldQUFGkikK4rKlqL3kpXZKfIhCqQFHWCS6RMUjmTBJp47KlPN8PqBdtfDcgltIxkxqqeu2otYRQGRp6zyUnftXUNJ5XR9dzeF4V09hcasSMTWC15slkbsayF0mlD6KpKUqlpxka6iec7ePaRp+gfgohREQM5/BmllJi+zZ1t07NqdFwG9ScGnW3Tt2pU3frNNwGsVSMlJEioSXwpIft2zi+g+M7WJ6NCASmiGEIA0OY6EKPPg00NHSMzrIWGLiFDMunqtgtj2Q2JKtkziSVMzHi2jkHVN8PaJRsqgWL6lqLZtUhkTHQDRWr4WI3XTRDJZbUw79U+JnMmejmmxcrdKkkoWkpvMgO5blVkonNGSwS8Z2USj+m3jiG55YxjeGovpTRTzjbR4jSacjNwDU4WekT1E8p3MCl4TSoubUO4bQ/24QkhCClp0gZKdJ6mpSRYjo2TcpIkdJTJPUk2jnsJlJKPOnh+E6HuLoJzPZtbN/G8ivYvk3DbVCkyN49e9mb3kfSydGsOBTPNph9NXQ4SOVMUgMhacXTBlbdpVawqBYsGhWbRNogPRRjcn+O1EAMVVuXmGQgsVsedtPFqntYDZfKSpN62caIaaQHY6Tz4Z8Ru/Z/Gt2efF6k4tsITUsxMvxhlpa/0lPzyzCGsJ3VPkH1AS9+Hu78FUiPvdk92YRr/1fYx0UjkAENt7Gl1NP+7vpuh2jaJDSSHGGPvoekniRtpDHUy8tiIYRAFzq6opPUL6yQX82pcbR0lEcXf4BAcN3gdeyf2U9SH8GxfBolm0bZZuFYhWbVJpbUyeTjjO/Nkh6InVMtKhTRkZ6yXdowGUiaVYda0aKwUOfMqwU0QyE7nGB4Ok0ic21m89C0NK5TjOqc1baNbYrHJxke/gDIoLPOMIZwnDXoFz7sA0DKN7sHW6JPUG8xSCmxfKtH6mlLQW1CanpN4lq8QzwpPUXGzDCZmux8j2vxa9L+kDbS3DF6B7eP3M5yc5nDxcP8yZE/YSQxwoHBA+wa28XgxJWtgiwU0VElju3OImVIWKWlJkd+skQsqTMyk2ZgPIlyDXk/amqKlncmdJRQzXMWoNxYgdcwh6nXXr/aXezjrYJrcCyAPkFdc3ADNySfNgF1ST3tdapQ11VvRpqUniKfyYfLRoqklkQ9l4HpLQAhBGPJMcaSY7xz8p2cqpziSPEIj88/zp7cHg4MHGAsOXZVSFYIQTJrksyaTOzLUVpqsHK6xuxrRYanU6QGY+iGimYoaIb6pmQrgcgG5dcj6Wmzeu9cMI1his7jV6lnffRxZdAnqDcYTbdJxa5Qc7scD7rIqEf1Ftl+xpJjPd919e1Tqv1CoCs6+wf2s39gP3WnztHSUX4w9wMkkrvH7mZvbu9VIwhFEeQnUuQnUjSrDqtzNZZPVnCdAM/x8ZxQbZYbTTC+N0syuzkp8NWCqqbwvVrHxfxioGlZgsDC9623faXlPt666BPUG4Cm2+Rk5STHSscoWkUGYgOhnUdPkzNz7Ejv6NiCrlXV27WClJHi9tHbuW3kNhYaC/zo7I94rfAa90/ez1B86KqeO5ExmLkhv2m95/qsztY5+vQyiYzB+J4s6Xzsqj/HMFjXxXUK6BdJUEKIjh3qQrKn99HHBUHK0NZ5hTQ4fYK6SrB9m1OVUxwrHWO5uczOzE5uG7mNqfTUW179di1ACMFkapKf3//zHCoc4usnvs7e3F7uHr8bU33jpBgATVcZ35NldGeawtkGp19ZQzNUdhwYIDN09bLTh8G6SSxrkVTqwEUfbxjDOM5qn6D6uHI4+SjMPgXv+SdXpLk+QV1BuIHLmcoZjpWPcbZ+lsnUJAcHD/KhXR9CP4cBu49LhyIUbhy6kT25PTy9+DSff/3z3D1+NwcHD77hkqiiKgxPpxnakaKw0ODUS2vEkho7rhskmbsw0vT9AKvm0qw6KKogP5k65/6amsa2l8jl7rro/sbjU1Qqz5PN3nbRx14N1BvHSMRn+jXQ3sporF7R5voEdZnwA5+52hzHysc4Uz3DaGKUfQP7eGj6oTd8Jv/TjLgW591T7+Zg/iBPnH2CQ4VDPDD5AKPJ0Te8L0IRDO1IMTiRZHW2xtFnloklNXRT6zhWpAZMskPxTrYMz/U5e7TM6myNWEIjnjGol2xcx2dsV3bbc2laGss6i65fnIoPwgrAhcJj2PYqpjmMlD6V6otkM7dfErmvrf2AwcF3XjLBrCx/g/zQg2Qzt1zS8X28/dAnqEtAIAMW6gscLx/nZOUkA+YAe3N7eefEO0nol5d9vY/Lw0hihE/u/SRHS0f51ulvMZWe4t7xe9+U56IogtGdGYZ2pKgVLXw3wHMCXMfn7JESp19eY3gqjWaqLBwtkxtLcMtDU52sFnbT5fUnF9F0laEdW0tSmhauV9WLr+8khEI6fRPV6ksMD78P21mlWHiCmDl+SQUX6/XXyWZvvSwJyOvK0N7Hm4RXvwxjN8HQxcfISSmRSK5UQrE+QV0gpJQsN5c5Xj7OifIJ4lqcfQP7+NT+T5E2+sXfriUIITgweICd2Z08s/QMXzz6Rd4z9R6mM29MctSG2+B4+TimamKoBjE1hpEOB201+hvdN4JTC1idrVEv2+y/e3STGtBM6Oy/e4zDTy2iaoKBsc3xX6qWQtWSF5UJvRvp9A3Mz/8h+fwD2NYSQtGo1V+/aIKS0icIXILAuaR+tOF51cs6vo9LRZfEvHoEhHJJBPVarUSxsMK7rlCv+gR1Hqy11jhePs7x0nEUobBvYB8f2/MxBmIDb3bX+jgPTNXk/sn72ZXdxffOfI89uT3cM37POdMzXS4qdoWvn/h6J0bL9uxOeqe22iyQAS2vxc3DN3Pj9TduqQp2Axc/8ElkYuy/a4xjzyzje3KTJKVrGXRtexXg+aBpSWKxcZrN01j2IrnsXVSqL5AffFdP4G+5/CyaliGV2r9lO0FgR5+XS1B9CeqtjLXGAr5TumLt9QlqC1TsCsdKxzhePo7jO+wd2MsHd36QofhQ3wX8LYjJ1CSfPvBpHp17lC8f+zLvn3n/VZlglK0yXzvxNW4buY2bhm86576FVoEXVl7gj1//Y3ZmdgLgSx/HdyhZJRpug5SR4jPXfYbUgMl1941x5CdLeI7P2O51QorHp9H1za7vF4NEcg+N5glse5mB3D1Y9gLN5skez8B64yiJ+AywNUH5vgVcPkHZ1hLN5hkSiRkALGuR1bXvMrXjr1xWu328NdEnqAh1px5KSuXj1Jwae3J7ePeOd1+1bAV9vLGIaTE+uPODHCoe4s+P/zn3jN/D9YPXX7FnW2gVePjkw9w9djcH8wfPu38+nud9M++jYleYr82HLuNCRVd1BswBMkaGzx3+HEWrSD6eJ542OPiOcQ4/tQSCjuOEEOolOUh0I5nYTbHwQxAquj5AOnWQWu1Qh6B838Zx1rYs59HGlZCghKKRSd+EZc1HmdYHqTeO4DrFS26zj0vERf4upJQE59/tovFTTVAtr8XJ8kmOlY9RaBXYld3FPWP3MJmeROmXw37bQQjBDfkbGE+O890z32WuNseDOx4kpl1eJoXV5ip/cfIveMfkO9g/sLWEsR2yZpasubWKbld2FycrJ8nHQwnJTOhcd+/YeR0nLhaqmsAwR1CEHpWs381a4dFOAlrbXkAg8P3mtm0EQSRByUsnKCkDVDWB7zdoNk8Tizk49rrbsmUt4PstlpcfZmzsYyQSuy75XOdDufwsnldjaOg9V+0cb0XMWQ55XSOxoa7a4YbFw6tlLj7Y4dz4qRuFHd/hSPEID598mD9+/Y85Wz/LzcM388s3/DIPTT/EVGaqT05vcwzGBvm5fT9HSk/xp0f+lBPlE8hLzOZs+zbfOPUN3rXjXRdNTufD7uxuTlVO9axrO07MHipQWW1dsXNlM7eRSoWSn6LopJL7qNVeA0JiiMen8fzGtse3JadLlaBklIFAUQwC6eH7TXy/2SE+32+yvPIXNBrHwj7ZS5d0ngtFrfYa1erLV/Ucb0V8YbHAE6XNdsKy51+V8/1USFBu4DJbneVY+RjztXnGk+PsH9jPB2c++FOX166PEJqicf/k/ezM7OTJhSd5YeUF7pu4j8nU5EW189TCU8xkZtid233F+ziWHKPhNqjYlR4pK5Ex2H3rMKdfXuPGByevSJXgZLK32GEmcyuLS39GEDjUG0fID76LYvGJbY/3IyKRl0xQPkIoCKEjg3WCIqpfVa2+AghcrwKEBRqvJlQ1juuWr+o53ix4geSpSp37B7bxPq4vQ3Zqy01nawvMGMPApTvmXAzetqKCH/jMVmf53pnv8d9f+++8uvYq0+lpfungL/Gzu3+W/QP7++TUBzvSO/jU/k9x09BNfH/2+/zFyb9grbV2Qccu1Bc4XT3NfRP3XZW+KUJhV3bXJikKIDeSIJE1WDpeuSrnNoxBJsY/RRDYjAx/kERiD77fxLaXWVj8ElJKarVDnf0D3w6lnwskKCkl9UgaCuEjhIpQNALp4PuNkKBkODP3/Dq6lsGxV9H0DK3W6Y5jxtWAEG/fufua6/Hjcn3b7cHKMeTK1qVYFhoLnKnOXq2ubcLb6ilIKVlsLHKsdIyTlZNkjAz7BvZx78S9F1wwr4+fPrTjpvbk9vBa4TW+fuLrTGemuXvs7m1j3LzA4wdzP+CBHQ9c1Ywhu7O7eXb5WW4duXXTtukb8rz2w7Pkd6SIJTdPtqSUl+UEous5hoff3/kuhE6zNYtjr+L7dVZXv0MyuQdFMQkCC01LEwQOrdZZ4vFzS6JBYLGy8k2SO/dSKPyAbPYOECqK0PC9BlIG+H4TGRVZ9P0mihJDSh/TGCEILGx7iURi5yVf37kg5dUw+V8bcHyHo8WjsGt8y+2La2liMYXL8w29MnjLE5SUktXWasctPKbG2Duwl5/b93PbGp/76GMraIrGLcO3cN3gdbyw8gJfPPpF7hy9k5uGbto00D+3/Bz5eJ7d2Suv2uvGZGqSR848QsNtbJpkmXGNsT1Z5l4vsveOEc7WzyKRuIHLocIhVpur/OJ1v3jZTiBtqFoCqzUXkdA8AJ7XwDBMgsBG0zL4fp3FxS+xc+evnTOjRBDYICWeV6VafYVYfKqj4vO8CopiRio+garG8P0mupYDQm8/IXWkvDp2DwDJ1Wv7zUbNqVFxNqhIN7zfjneeic3LX4SxG2EktFtqVomdZ5+6kt0E3sIqvqJV5OnFp/nc4c/xnTPfQVM0Prrno/zCdb/AHaN39Mmpj0uGqZrcO34vn9z7SY6Xj/OV41+hbJU729daaxwqHOJdk1cqXn57qIrKzsxOTpZPbrl9dGeGWsHi1OoZvnvmuzy//DyvrL7CnuwedmZ28tzyc1euL2oCy14EodBsngDAjxwn/EiCcpxQPdp2O98ObZtVsxlel+uWEYQqPt+3MIw8fmAhAx9FTUQSVEh4itARioaU3gX12/NqzM79t873QuGHuJENq1J5fksHmatJfpeNIIDGhamhLwQNx7tgJ6F9pVeJtZahcBxWIhWvlOROfpeJlReuWJ/aeEsRVNWp8vzy8/zJ4T/h6ye+jhu4vH/m/Xzmus9wz/g9DMYG3+wu9vE2wkBsgE/s/QR7cnv48vEv88LKCx3V3j3j97xh+f2uG7yOV9Ze2XIQUTWF/GSKV18/wW2jt/HxvR/n43s/zsH8Qe4Zv4cjpSNU7AuzU7mBy+uF17cdrFQ1iQw84rEdNFtnADqefaEEle4K2O0lqFL5GRyn0Pke+OH2VmsORTFx3SJCKCiR7UdV4wgUAumgKvGQoKLCikJoCKFeMIk4TgHPrXb2r1ReoNk8gZQ+hcLjWNb8Jhf6a5mg/OVX4OnfvqB9657Pvzu1eM59Xp6vUGhsbzssuV6njbtWnmFyaYOkVF9BrjxPuXGCli1pXjnn0mtfxdd0mxwvH+dY6RgVp8Ke7B7u33E/E8mJfgDtNQLXDyg1wlQ+uirQVQVNFeiKgqK8tZ+RIhRuHr6ZmcwMj80/xsurL5MzcxwcPE8wru9C9SyU56AyD24DMjsgNwXZHRC7cAl/MjWJruqcrp5mVzaM/Xl26VniWpwbhm5gYEeMheeLPHTvvT3HJfQEtwzfwtNLT/P+mfdv1XQHXuDxrVPf4mz9LIZqsCe3Z9M+qhpHKBrx+BSt1iyGOYzv1Vld+x6uW0JL39zZd6OzRKNxDE1NYRj5aHtIZJ5fxzCHcJ0SCBUhIilJiSGEhgxsVDWGDDxUJbT1CaEihMbq6ndQ1WQn68R28P1wxHTdcuf8nlftkNLi4pdJpa5jZOSDXUdtJmnLWqTRPEF+8P5znm8rtMpHMNO7UNTLLyXyh2dOcsfqS5w7V0mIxspRlKBXNbzVuNk9KZH4Pd+rbRdydxunFBlQd8q4vkutLFFrV+43f00TVNku87nDn2NXZhd3jt3JjtSOfrG/NxlBICk0HJarFksVi6WqRbnpkE0YICWuL/GCANeXuH6AKgSaqqCrAk0R6JqCroQEpqkKhirQou+6quAFEj863utqa31dgBeE5wH40I1j7Bq6+g4wWTPLR3d/lOOrrzBmDiDcFmgxUCIlhNsKiag8G342ViA5EhLSjjvBSELlLKwehmPfCQlMj4VtDOyEve/bNnpfCMGtw7fy4sqL7MruYqW5EkpUSCZSE6wEK+SyKeyCJBXleC03HX50vMB9e3fzemFrj6w2mm6Tb5/+Nkk9yc/u+lkenX+U6cz0phpmqprE0Ac7g3w8tgPXLVKvHwEEup7r7LtRgvK9ekcd2L3d95vEYhPUa4fR9Ewn6W1IhioEoKhh0UdFaUtQOkK4AKwVvs904lfOeX3t/H7h+cO+Vyov4nVJTWJTfsbwWThOoXO9leoLNOrHLomgTj7yzxm69dOM7v9LF33sRvi+xYq3jWPO0iswtB+0cHvitT9jaOBe4ByJkjc4hPiJOXxli+wkT/yH7Ro4f6cvEdc0QcW1OL98wy/3i/29SZBSUrW8HjJardmkTI3RTIyxbIwbJ7MMpQy0LWJxpJT4EZm4QYAXkZbrdy+3SShcF9MVVEUPyaxLEtMigtO61q3Vbb7xyiKfunOKweRVLHLnNGD1MGLlMPvqyyGp+DZ4TkhQqgmBC5nJUDra/e5weWMYQ2YCpu4Ky2L7LnhW+Hfoq7B2FIa3r4q7J7eHpxafYrG+yONnH+cdE+/A9m0enXsUTdHYf2A3K8dWyY/FCTyXR374JKuFArtz91N36wQy2DIA3Q1c/uzYn3Hd4HXcOXonQghyZo7TldPsG+jNZq1rWUxzFF0fRFFjmOYoheLjGOYI42OfoG0xaNuR2ggCD99vdRFFs2u5haEPEgQ2AqXj3q0oZqTKU1AiyWn9UyOQ4X4XEg+1ToYtWq2znfW+t+5qXau+Sjp9AzFzrOfY+fk/Yvfuvxe245/brnYuLHkx7KbNpVQn+9Zqhffk05jKBVhkXn8YDnwIJrqLUJ5HoinPg9V7H6XYXuUnriIhbcQ1TVCmavbJ6Q1Ey/FDMqpaHVJShGA0G2MsE+PeXXlGMiYx/cKkWCFEJClBnCsv+U4NJnjn3iG+9uJZ/vLd0xfcrwuCXY8Mwa9DbRHye2DHXTC4G9ToZ9MmGt8GPbkuTZ0PQoBmhH9kYN8H4PDDMLArWrcZilC4ZfgWvnn6mwzFhzpZK06UT7DcWOJ9sSSPvLKAWXyYolAQyjTv35PihWeeIH7ApO7WyRibZ8WvF15nOD7MXWPrSWry8TzVjV5eQCq1v5PNfGjs51EDC99rkEjsQlHMUC0kFExjuEeC6jhS+A08r8bZhT9Zt/nIAFVNRbdFXScoNRZ9V1G61H7hfqEN6kLR9sgrlZ7qCb4NpNuzX636CrHhXoLqxsY0Tq5bwvdbF1Ga5NJUX6/Um9yQjjMVu/RJ2CNrFd6RS5HSVMSGftSaBnZj+5iyltfipZX1rBryEq/jUnBNE1QfVw+uH7BSs1mqWKxEpNR0/FAyysS4YSLDQ9eNkI5d2xOEGyezrNZtvvnqIh+/ZfLSbV5BENqMiieheAJa5VD1NnEb5H9+szQEG4jmMjAwA7lpOP047H3vtrsdHDzIsdIx3r3j3R07wkNTD7F05KtUl05zfPIODlUDcjtifOa+vaQNhSdmvwqLq9R21jYRlB/4vLDyAj+z62d61meNLKutzaW7Lc+i6TVxfZevnfganz3wCQAMYwgIJySx2DiGMdRDUJ5XRwgFz2/Qas2FwbddNo520cXQzTwk+TAvoBbGRrW999S2DUpfD6Q9jx26Xj9CtfISwKbMEBuzXkgCpJTMz//BllkkxAafsqWlr+K6FSYnfxHTHNm+E7WlC+nqBaNsVwm2Sc1arb1C3L2XztsqwhO/VGsyGTO4IRUn8C1iXm+qqMDbPu6rVjmDEzi8Vt/a+6HueSx7V2ec6BPUTwG2sxvlUyZjmRjT+QR37xpkMGm8dRxPPDskE9Xg3VOD/PnrNk8cX+Nd+7fPuN0D34PmWigdlU6Hf2YmlJD2vi9U0V0he+dSxeJHx9eQgCLCgSob15nIxZnMxcNJwJ6H4JnfCSuZprYe7HRV5y912zCkJDv3DFlP8urMR7h+wGemIhmeSZNNhAPGbXe+g28/eZRa4QRsSON0qHCIwdggI4ne86WNNCcqJzad/1DhEIcKh5jOTOMFHouNIgJ6spxPjP885cpz+N66vcn36xjGML7XwPPqxBM7qdcOh67igYeqtr0h1wmgLT31qPgiUgq9/drPRlCvHyEIbDKZdSeNNhqRG/tWXn9t54n1+wmLi1/aNsWR2KAibZPw2bOf76gBgVD6PvYI3Phzne+u4+M6l6Yae3XtNVpDd0EkQRWtEp6/tYu97zWw7TXORRe+30DZID0CW3tvWhXGX/ocau5Oyl77nNF+ng31Fap2BXmORMKXgz5Bvc1wuXajaxpShg4ISy+HVT8zk2GC0WaBD9sWXzg6ydBKgut35CER/cUHAQn1FagvQW05/GwWIJaD9Ng6KZlXvjKy7fl845VFbpvOkU+aSCSBhGLD5uhynUePrDKWifHxWycQOx+Ao9+G237pwqbbpx6Dyizc8hkKp2oMp012TMQ59eIaQztSCCGYGR3Eju+jevoHMHV/Rw253Fjm2eVn+fjej29qNm2kqTmbE4KutFZoek1eW3uNm4Zv4lRtjhviOzpOBG0oiokbrJfI8Pw6pjlKrfYqvl/HNEZpabMowsANyh0Ckvg0HY+nThb4wKASEhTrElR3+qH2sgBWVr4FsCVBtdVZimrie72D6EZPQ0mAZS1scaPbjfVOWLaNHaqeDd/PCLazTGC3sEu97v7+yqsExWPo131y+3MSqthCleuFe346j/1vaAc+RBC4YR7DwYOd/nZPQt1ARio7wW8/8+/55FrbRhftE/hIv8FwqzsOL7ru0hl45neR+z9wwf26WPQJ6i2OrexGQsBYNn5JdqNrEnYNll+DxUgPPn4z3P03wFwvNxH3bD66usSfPTfPYNZmrH4IGgWwKuFvLZGH1BikR2H8llBKeQNyMT52ZJWpwQS3Ta8XSGw6HhO5GHfMDBIEkj/+yRlOrTXYPXFbSL5LL4d97IaUYXBmdR5apXDZqsCtnwU9xlptjemZATL5OEKBZtUhmTVJmRq+MUY1eAmWXoKJ2/ACj2+f/jbvnnr3lrGDKSNF3alvSpW02lzl/sn7ma3OctvIbXzh8Bd46MZfQREKgQz4+omvY6om9w3t6gTium6VWu01ctk7aDRMbHuZeHya/OC7aLVmcb1Kh2yk9HlhtkxJPkTDG8HoOElsJqj2ANqmiM1eeKGE1CYhRTHxOc8sf5v0RlIGofpxg4pPKConrDijyvbOE4XVw4jGSvjF65XYSs/+HwSrRxhZPExw/99H0eO9BwdBmLi1CyvNlQswZUmeKRbJLx5nLHCQCIRv0SY4xXN418IzAPzXM6fIahoHgZfqA9zWOolrpTEdnZ2d1uCh+Z9A5vzZ+v3A7+RPvBLoE9RbCK4fsFqzQzKqbG83SpnaW0dVtx0CHwonwsG6PAvD18F1Hw6lpq2uTTMZGp/hvXfnefjICn/57neRMrWwHbhi6rqLwfGVGmfLLT57z0yYJ7Ji8eJcmdOFUP21K5/k4HiGe3fl+dGJAruGkoj9H4KX/wTy+8CIVF+zT4V/mhl6CSbyMHojDO4CPR6m+6rbDKXCgTw7kqC83CSZNTE0hZQZZy09BYsvsZi8Dk0LyWOrNE2rNZvhtImpmp2qvhDO4m3f5uDgQa7PXw+AoRpU7Sq5WI6T5ZP40qdiVyg7dfRI/VWrvUo8NkUqdT31+lFarVlULUXMHMNxiyhiXa0spR8GjGo7qFo+w7raY4MSXWq9dWraXm12Zva3O7autpR2bkgcy0M31Z7fz3qm9ZCgbGcN0xhCoPKtZZOZSoGbtxi768UWh37w77HNNvGst3n2h49TP71EzLeoV1ZZevl/Ze8d/7q3gcJxePXPUI29Hennc0e+3LvP8e+GXqbXb5aEldXDHF89jBhQuO3pXye4+1ch/W5Uq8qgFUpzP145xHsIkNF9XHMFnpdEt/QwdCJYJ5vtSpykXv2zznLTaxAPLizDx4WgT1DXKDbajZZrFqWGw2DSZCxrvjXtRheCxhosvhRKTPGBUFo6+LELdkTYO5KiULf5+ksLfOqOHWjqmyM51m2P7x9e4aO3TFBuOXz30Aq253PLVI6HrhtBSjiyXOPHJwusVC1eW6hwYqXOaCbGvmqe+He+hHnDR7hTORbejzt+GeIDtByfuNF7TU3HR0pCQibMdH72SInJ/aHUlk8mWQ1McIp8/4Vj7NmV2jI/31rd5nM/meVvv2cPGTNDzal1CGqtuUY+lu951/KxPAWrQC6W4+W1l7l15Fbma/MUrCojhJKLbS+Szd6OEALTHKXVmkVTw7g1RehRBvRwcJTSo9x0mMknqLRcRozQW2+jBNVOThu2oW3yxuugO/h0m1l92w4W7hOwOltjYCyJUMLDE2kDKQOCwOsM4mfn/ziyOUl8q4XwtpagGmdOQODhO20PuS6CevkUtpFBES7K2SX0uZOwkaCifpn+Kq67BkzzpDXJQX+us4u/+BKB00DfSFAS1OoC9oLNjHMI4hmwS9F93Kza7x5BpIg89Z74LRjYSbljepIEARiOBRHnNvz1+xoEMOasciXz6/cJ6hrAdnajpKEylo0xmolxw2SG4ZT51rMbnQ9BALWF0EmhcALsaigd3PZLkLi01FV37xpkre7w3ddX+OANo1eMwKWUlJoumZh2zucgpeSR15a4aTKHIgRfeeEs9+8d5uB4uqcvt07luHUqh+cHnC40efTICr941zSWNYz71P+fQy8/DCMNuPWz+EaaJ4+t8vyZMn/jXbt7SGotkp7abacHTVp1B9f20U2VoWSSV6oOtew08uUTzFZ34Adp/L1BTy2pk6sNAikpNhzSRpqqU2WccR6be4zl5vKmWllD8SEKrQJT6SnWWmvMpGdwfZfTpUMM6Rae12CpepRFMcntiV2Y5liU/DUkKKHoLFU9/ux7x/jQjI+qelSaLrdNDTBXaqLkVKQULFaiUhxCMD39q6hqimr1pagXbekrOGf2dn+bYotCaEi6jP+tEm5LpV6yEUKSODAC+MzO/t4WNqvwfKa3tYu2tHtLWjitLiKVgiU1RVI2oVmhETP54vGzfGrvubPA76jPE/ftDlmeqZyiUFsIK9lG3oKWb2E35ymULCxV79KDbv87+E4jVAVKGYS7t6/JqrDalTi2UjIZ9UuhJA+8WGsybQRYlkKlapKNb277ctAnqDcBlut3iOhtazfaDjIcBCidirznzkAsE8YA7XoAcjsvPJ5oGwgheP/1o/zps3M8P1vmjpmB8x+0DaqWy2yhyVyxyYnVOidWG9w6leOX7p1B3cal/ZnTJRwvYHowwVdeOMt7D46yd2T78uyaqrBnOMmLcwanCg1unMzSuPFniD/6ZXj/36Ui43zz2TnihspAUqfUdIgb6yPBWt1mKL2uwlJUhUw+TmW1ydCONJm4gVpJctgbRjt7GnvcJWHrrJ6pMbZ73fB+crVOOqaxVl8nqIpd4WTlJHeO3slEqjfeJx/Pc6R4hLVWKF2pispYcoynFp5gR1Bifv6/U3MdZovHuW30HmKxcRLxnV2u5BqVyCzj+AGK6xA3VCZyMZ48scYNg1BpBjx9ssKnb313eK+0tiNLW+oKZ/BCKEjpsrz8TYTQSGwowJgffBeqGmdx8c971itC6zhsSxmAXaN+JnQQCc1aI0jpb1PnSqIHLresvbAlOcqgzQzhGZrFas+xJS1J0oOW0DiqDmA8+R8Idv0GSmQbdd1KlzdeeM/uW/oJalCDKD60UXKRJZN/d2qRv3vy95DAj+Z/RMyqEqDQ1MxN8VsdonKaHRVecvlZSMdp1BfxWLe3HV1bz+MXyACkT+CG1+VLCeH/6+Y7GcAVTPHaJ6iriCCQlFsua3U7+nNYq9m03Lep3Wg7uK2QiEqnoHgqNKIO7IShA7Dvgz3ODlcKhqbwsVsn+MLTs+iq4MBYGlO7MMJvOT4vz5c5vFSj5fpMDyYQSHwpuWUqy3LN4juHlreUzo4t13h5vsyDB4Z5+OUF3n/9KLuHz399QgjesSfP119awNQUpkcP8tz4X2ayafKt12a5Y2aA26cH+NarS5SaDhO5dYJarTnsGOiduuZGE5QWmyQyJqYUKDLJa7MaO9NFjsUGmNyRYfF4heHpNKqm0LA9ik2H26YGWKvbZHMpThTn8KXPvoF93DS8OfNbW8W30lxhOBG6mmeMDLty+/hx8Qif2vFRXnMeodqsUrJLDMYGGRv7WNc16wTREOx6Ei+wyacM8imT/aNpFioOBAE120ePXd9z7rbnoIwGf0UxOH36v3S2NxrHe/bXtMyWsUrdAb++36sGlNFAu5V6sFB4HKRkfY4i6ZbmBCCj9qYLxzklBnsCXOPeApOtsyDAUlQgQHFO8pOv/i/c98l/C0KwtPx10o4G8WgS0fbCCySuH7YVlGtQqzO2+jKW7/OjukEtZaL5Kh3RKWKPjQG28pnfIVkOpbrh+mlIXgdODEvAqgzf2VV3XepruA2QoV33maVnyIoBvGYVObonPFPggesAVy6J8htGUEKIB4F/DbwGfEFK+egbde6rDSklTcdfJ6GIkEoNh4ShMZQ2GUoaXDeWZmjvELm4/pZPonpOBH7oDt6WkpqFsIT0wC6YvBOSQ1cuavEcyMR0Pn7rJD8+UeDxY2vM5BPsH02zayiJvoWKrthweGG2xJHlGvtG0nzoxjEyMY3Hjq6yVLH51B1TNB2fF2aLlJsOTxxf44F96zFAy1WL7x1e4aEDI3zv9RU+cMPF5QmcyMX5yC0TfP/1ZV49W+FMscU3XlngZ2+eYGow/NHnEgaVZq/NZa1uc+tUrmdddiTOwrEyJ55fYaXYoNmMsVau88DBYV6tzpLeexfpRozV2VCKOrXWYGYwyUjG5OX5MkIZ5CcnjrJzx2k+vf/TW99fM4Pt2xwtHeWW4dDrUAjBu3a8i0AGHK+epegJptJTnKme2eQxGIuN46nXYepKmPbKtRlOh7axQF3j+aUX2JMKi+qt1mym8+sDXzw+ze7df4+TJ/8jCIEijHN66YVEtIXtpcszcGOwatuEJaWP4rSQiobUQkKtVJ5HVWMgQkf2tqefZS2wOv/HTJGk2PgDHOmva9ja4UOuT8Z5GRELeow/vgyYb6zgeXW0I49gFhc53RoGE/7whRaDB18EwLFVnJYWqsd9F5BMHfoq880j+IkMZjO8D65QsFUNLdhw3VE/Tp/SeE/taVpKQCCb7CnPgq8BHu52nniBivQDZOBy2lmmJQOOl44DOiDwuj0hf/Ab8O5/dFkakcsiKCHE7wEfAVaklDd2rf8Q8B8BFfgdKeVvEt6WOhAD5i/nvG8mXD+g0EVCa3WHQt0mkDCUMhhKm0xk49y8I8tg0rjgWftbGkEQklDpdEhKlbkw/mhwF+x+T5SX7s0R1kczMT5x2yQtx+fEap1X5it89/VlduWT7BtNszOfYLFi8fxsiaWKxc07cvzyfTtJmhqn1hp8/aUF9oyk+Mw9MxiaQt32KDRc/uq9M3zxuXkShsYdMwPULJevv7TA+w6OULU89o6kLimJ7WQuzmfumeG5MyVsb4WP3TrZIy3lEjonV7uCYAMZBV33OpEYMY1b3jsVHrPa4KlvnkXN1xie3on34reIa3FGdqaZfbXA2O4sZwpNdg4lGEqZrNUc6rbKTPImPjBzC/n41rVVFaHw0PRD/MWJbzIy0yudXJ+/nm+e+ia2b3P/5P28tPoSt43c1rOPpqXxlGnSMY+mHArjqgarrDQDXq08getKTlfPkI2Has1uguppR01tSn2kqDGCrnyAoRfe5klRm6CaVYe4ucHZIWKo+fk/YuDQj3HTg1RmbkbRBCLKSOcEHnWh4vstFCXdyTEokfj1VdZ8nbFAhCNhxEZuy2XZt7GkwASk2iQcFkFIn9nZ32H3qkXr9AJyaAiCMI7vyWVIS0moV5N4jktgh9fttVphfSwZMFRfpYlGTTHYWHfR9V1+uPgsw8DcmkQX0BISP7CYbnQPyxGL+VsE9AbQqJVoajnwVTBkeKsCFVwjvNZObr/Ly9t3uaPG7wP/CfiD9goRvin/GXg/IRE9I4T4GvC4lPIxIcQo8O+Bz56v8aDhYh0roeZMtFwMob9xDgJBIKl01HPrhNSwPXIJg6GUyVDKYGc+yVDaJGmob18VXRtShrE3jTVorK7/tYpgpMN0PWM3wXUfWXeRvuCmJctVG0VAwtRI6OoVlTLjhsqNk9nQvmN7HF+p8/xsiW++skg2oXP79AAfvmm8I1nNFZt899AyH7pxrCO9BLZPrO6iS3B9ySdvn+RPn5nDUBVePlvmlqkce0fSfPOVxc4xlwJVEdy9a5DXF6uYWu87P5AwKLdKne/lpkPK1LaUCDvHZEysuMbgmE0sP4XfWsFQDNIDMTw3oFGxmS81uX/fEJmYhuMHCDckIM3fPjcdQFqZxCm+E41eNeZIYoTx5Dglq8SO9A6+N/s9Wl6LhttgKD7U2c/zJZmYxhF7nNMtiV38Ppn0fVyX38WRokGh9QLvmEjScLZxXRYKWWWMuiz2rE4kdmJbi7hu6FO2Xe6+dvxUaamBba47NTQ8HR+Fbqub8D2WjhcY3JElnjIIfIu671EVBicOf5HrbvpVpOdAYQm03SBgURtiXDRxPQU/s0Ch8CMSwT481UFRVCQKgeLQJqi2UadZtWmgU/NkyAhSMn3yy1SkRxBIPNfHWjjRIZCWB0088BSKapwYNpb06AzxVgU8h+eWnuXpRor3tlRoPgZRkmXpNkHrfWcdGYSZVhKRDTdwgNDW6aFBoIAEv16k1Zqkhw1//J+3fl4XicsiKCnlD4UQOzesvhs4LqU8CSCE+ALwcSllVH6REu2rPA9ETEOoAme2RuvVNZSEjjYQQx24soTVdDzWag5rDZu1WkhIxYZN3NAYShkMRzrxd+zJk0sY2xrH3zaQMoytaKz2klFzDVQDksOhmm5gJiwlkRi6rHx0TSd0yV6u2piaQtPxaDkBMV0hYWokDZWkqZE0NBKmGn5G6y5FXZo0NW6ZynHLVA7L9TG1zbPrpXKLG+MmwyWH5mwdv+ogA4kSU7mu5LJUaXFgPMMnbpvki8/Os3s4yZ2RM8Zy1eLOnZdfPDOmK1gb1E65hE656XaM8iu1dbVYN1qOzwtzJd6xZ4ikoWI5CkK1MXITCFlH8QRCCPKTKY6fKGFoCtl4qL4aShmMZWL88Ngav/vEKf7Jzxzc5NoeBJJvvrpEsWljKkmqlrcpb+NdI+/gTGUFXdGZTk/zp0f+lIbb4Ndu+bXO/fYDyUBSp1ZtkFJmSBkrnCifYDI1yWmlxmrQIpfQKNS3diXftfPvIB79TRqDPqTXM4Fk0jchUzewuNiO0dl6rFCEHtpOfAela4B9sjRFo7GD/V4JVVNwpQi3VhcQNpAa5vMvWwjC9760fBZugqWl08yuuuwYC3AaKofTu9ivLFOt6bT0OK9/+w+4/aF/iWbWaQfOtrrc5NspiIpLDRakiiEl75t7nGdjnwidFJChHzhgvNKRC3DVGtIXECgd1aRQXITsiucqnCBY+BGetYtWUyMmqxD13/VAaB6a0YRWnFjg4ASSIFiPOeto/WQAtTxkw76G+0SIFk/N/pDsyI0MXmCl3u1wNfQuk8Bc1/d54B4hxM8BHwRyhFLXlhBC/A3gbwBMT09j7s6FYrAv8Ws2ftHehrBMxHm83lw/oNhwWK3ZFBpOREY2vpQMpUyGU2YnFVA+9VOinnOtkHjqK71khIyIaDjMvjB2Y7i8Mdr9MnFitc73X1/hwFiaD90w1nHfDgJJy/VpOB4N26dhezQdn0rLZbFs0XA8apaH4wXsGIgzNZhgaiB+0XFh23lKWsdKjKHAQAJ9PEls/wAiroGE7HctqocKMJ5hKGUyfWCQWweSCCGwXJ+G45O/AuU/TE3Fcnt1NDFdRVUETccnaWosVS3Gspvne8+cLvL8bIk7ZwYxNAVV6Li+DYqKrScIakUYgfxkiie/c5IdB3OdY+/dnafUcJAyJPPZYpMDY71poOqOx9HlKnXb54aJDHXLg2axExrg+QHferWIpujcOg7vmXoPzy4/ywsrL+AEDmaU+NULJOmYTs1uYAQj7B3YyUurL3FD/gbedz384NQggajTdLceqtrPOuYbWD3rVeiJ99l6oBRCxTn5NNSSiK65gCtdLFeneHKe4f3TvGJnUbUkKhZCCDwpWFYyKFE+Pyk9qrVXOxRXq78OkbNE19kAgXQttIiIgu4BXIYE5VgeRuCBEASBRdJySKZOrQsoUaO11gls6aEAiuLhBBqVik4sUHGFjxCgaqHa0nZVlmYrOCKFNDxAkkgtIsS6F6fWZcMzCPvXaBnoyVDLWCmmo3vjg6fjeaApIFtp2sUKbGEAkrXmCk5rlcudpr1hhgEp5ZeBL1/Afv8V+K8Ad955Z+fpCVWg5WJouRgmWWQg8asOfsnCmavRerWAEtfQBkyUnEkjplCwvXX1XM2mZnnkkgbDkafQ7TMDDKWMt7cHXRu+G9qJOqq5iIzcVigNtcloaG/4aaSuqiOD7fk8dmSV+VKLn7lpjB0DveoFRRGh1GRqBClJyfUpuB6+69FwPCzXw/ID3p9L4Tc85opNnjtTwg8CpgYSEWElOklTLwZe0cJfaZH+8G5i+Q12JAGZm0co/uAMztk6K3mDQ5bFmG0wGjNYqdoMp8wrop6M6Qq22ytBvTBbIhvTKbdckqbGcsVi38hQzz41y+W1hSrpmE6x4TCWjSHQcH0fP/CxzSRKZQ2ARMZguelwfXKd5GbySQoNh13DCSpNl9OFBgfG0pxcrTNXavHu/cNUmi5eZP968kSBlA4Hjn4e7vhVSOaZLTYpNR1y8ZCodVXnvon7OF09Tc2pYcbD8/lBQCamU2zV2ZdKcNPwAV5afYmsmWUwM80r9RMIxaFhh5OZ3UPJTb/V518fZ9d1Kjtv/UVOnw5VSxtVekJs8x5IwWoxisvqataWFkXXRqmvTzScABp+iywmvmXxoYXH+froPWEznkOp+KOOUtBuVRFeqJprO0oECHwUmH0SNRJHAiRBW7qLXLTXZquk6qchDZ69FmrWAw/f9sARyMjN26oep7sQoQACKcIkrtHlSgmWrWPEAxKFlznhvxs5lAVfIjUIWVngb0mmEOhlXNegUuyaBAUKNU8D20eLe6HtacM8TyJo+Ar4zmXZn68GQZ0Fprq+74jWXVEIRaDlTNyERjGrs1q1WFltsnpilbVSC8MJQvXcUJKdI0nuPpgjn4u//dVzgR/lalvtJSOrGuqS20Q0cVtITLHcG+JR1425YpNHDi0zM5jgs/dOdyRVX0qKrkfB9Sg4HoWIlMquR0pVyRsaeV1jZ9zgjmyCZdvjmXqLz4wPcnA8EwY8tzzmSmHc0pMn1lAVhXftG2Lf6IUlgpVeQPO1NU5lNd6Z21paHMnH+fagzi1Hizw6bTIZN1hzQxvJcs1iNLtZ5XYpMHUVy1uXoIJA8tjRVXYPpSg1HMYyMdbqNiMbVHxPnypy42SGhu2xVg9dtxUhMJUUdbeOY8ZRK2FQpx9ISoHPsK4RBJLXl6rcMJHFqayyO1jmecY4vVZnodxivtzi1bMV3rknT9VyiWkqqzWbqcEEx0+f5gMpD+pL+PFBzhSa7B5KsVztDWJN6WGev7Ydygskg0kD27fImCkyRobPHvwsh5+rUR4UmGYaRQ3jBr/24gKfvnMHkxsmM56vUC6qDCgaQ8PvZW31e2HNqGiQzeXeg6ZtdljZvfvvsbT48PoKt8mCV2c4yq4eAGbzBlQ1ckoJPPBaNDyVtOchCQlWSjCdRVT1BgTg+/DakkaQrqESbvel5Iw+RM49TX1utqfo35oW2XikAkiqbo26OYsjJwisUJIRQOC6qPg4hC7ktr0d6a6/M76vYNkaKcPFl6BLOyRHGcWiKS5gENDLMesRXJLA7Q04bikxpBAokfpQiA3SqQS/lWXJ1bnl5S+i3vnLW/fzAnA1COoZYJ8QYhchMf1l4DOX26jXVs/V7R4vOi+QDCVNhtIG42MpbtqXJ580MFUFvxZKWH7JxnupQCumog7E0AZM1IEYivEWVuFJCVZ5s8NCsxQGvralopHrw8/4wJuSj64brh/wo+NrHF+p896Doz1ebqeaNg+vlomrCkN6SER7Eyb36EkGdQ19i4nFmKHzcq3JkabFdck4QgiyCZ1sInSGkFJyaLHKK2crF0xQ1tESVkIDJbat40FMVzHSBoeH49Tmynz41kmeaIaqnuWqdc6g3IuBqfVKUJYXpjRKGmrHgScb1zE0hZbj87mnZ7FcH10V/JV7d/LaQiUksKbJYNJEkUlKVgk1nkOpLoLTYKEuGEgZKG6YWus7h5a5bixDUF1g2j7OysAuHj+6RsOeJZswcLww60W15TEzlOD1pSrvv36UR354HGtfDLO2zH99PYZE8oHrx5gv9bp+p400dbfOD46scPvUAH4gMTSBqrpkYiExZM0sPz50jKG4yfgdDfTjf8BQ6q9zttzij38yyz/80HWb7pXthu92O41SmHkilH6OPLnCHe/1MOIapjmC3VqA2R/D7r/Xk5G8XhfYfoAtfCSCQILtSRp2SBJOdZGJejEkHKHgytB7TYoARZEgFAQS14PAVzEARUp8P3yPfKEy0CrgrraQhofnKXi+Qsz0CGQ4TxSuSqM6jyclAbLjti2QBFJuUlS2NA1HNYBt0j1FWKvp1E2DMfEat3bV+lIjgtqIQb9CELh4MkC4zU37eELBiCYAQlknRBWBDAQ4SfBshFXicnC5buafBx4EhoQQ88C/kFL+rhDi7wDfJiTl35NSvnYp7Tdsj794eZG1uk215ZJL6KH3XNrk1qkcQ2mT9DnUc1rWRMuasDOM6g5qDl7Jwl1s0Hq9iGK+BQhLSnDqmx0WGmuhPajtsDC4G6buCROJvgFZui8WSxWLb7+2xHDa5Jfunemx/bxYbfJkuc4nRwfYcRFVQ4UQvHswzSNrVfbGY2gbSEwIwe6hFI8eWSUI5JZqtzMtm5LroysCUbbxC3WKU0mUkkbD90luk8tvJG3yPcfi4xM5kofLrI0qSClZqli8c8/QlsdcLGJ6SERtNJ1wIEiYaidP42gmlJ6KTYeEofLZe6YxVAVFEeRTJmcKTcpNl535BK8XYizWV0jFs6yJYWaOfJOTxrvYM5LCarhU1HDArVsejm0RDxp87JbJKL2TzlK1xVg2xrHlGooiiOsq7zkwwoGxNMeUJT5fvZF9J9Zw1B3sGk4xkYvh+lES0ohMU3qKmlNjvpRmVz6JF0h86ZA0TJBKx/nDKp+g1UxgWE1cv8XP3jzB//7IEZSNv/WIYBxHpbzcxEhFZeeF1snhBxC88AW48SEmJn6BuZO/TaEeqqw0NcuJxgBJUWWoa6CVMpQefn/e4f7ZNUYIPdcW9WHGEPiRv4LVUrEsveOYoLpRaowoj56Cj2xLGlHWBZ8Sp4wdWA0N11MxdB/bVTANHxlIEu7m3H3vKL4YpSJav/Rm4FGPCRxVRd1AUEEgEEJSa3Sp5iTYmsaIW6DVab+rQc+nLUdJITgdTbocv5cWhQgIRNiXIBAIQtVxp89SEgiB8Irb5kC8UFyuF98vbrP+G8A3LqdtCG/d7uFkJynq5ajnhCJQsyZqZFCWgSSoO3glezNh5SLCMt9gwnJbm21EjVVAhOUhksOQmQhLMSSGQL8yqqSrCT+Q/ORUgVfmKzwYDWZtSCn5YanOsabFL44PMqBf/Os4EzfJGxov1Jrcld2sxokbKilTY62xWRVWcj2+tlLmQDKG4/rUT5QQO1IcrTTwheT3zxb42eEsO+ObnRBacZVG2eLgwTytF1ZRGy7LLQfHD8hdgt1rK4QS1PoPvOX4iEAS11XKTRdDtRiL1ImVpstAQu8h/qGUwVrdpthw2DuSpuTFeerUGul4gjnzdm5vfZeT88d5x97rsJeLlOplIEPNdmlWbKqWYEjAeCZGuenQbHrcNZrluYUCA2vPMXHbB0gYGilT4xZ9nvHbPsLXvvs9mIKP3TIRBt/6oQTwyGvLHBhLk06n+d7s92g0bWxvED+QuIFFNpbkR8fXuGUqx76RFDVXkKKG6pk4MuDYco3BpEGpsSFtTyfRq+To00vsvD3KtiBBHH4YDAnCheoCVOYRmQkCX1JthCXqs6k7eLl4iHzsDNlkCZT2sB2ONYuuglMMJQ7fF3iOgpASPwglGruuYdkamcoysSd/H0Pfhef4KIHPGW0MtSsTgwQcAl5L9krmrqfQsnRMw4fAx9wi9ghCwgRoWXqHugytga9ufj8rtRgxs7cdoXgoqtep/1RX4vjdtrpgfdkVGlUrkn7lZoIK+61SqamkNCd6DhptwltIZtApUWyucYElRLfENZ3qKGVqHBzPnH/HS4BQBGrGRM2YMJOJCMsNJaylBq3DRRRDDT0EI09BxbxCt8tzQs+5jWTkO+s2ouQwDB+IHBYuPuDzWsBa3ebbry2RNDQ+e+9MJ9s2hIXSvrFWpukHfGY8T+IykuC+ayDNFxYL3JCKb9nOeDbGYtnaRFCPFWvclU1yby5F69U1GBsgvmeQr7+0wIHxNPGsyddXytybTXJbJrHuGi0lp6THqCNRFAVtKM5AweFoqcloOnbFHG5iuord5Wbeqjvsn20Suw4qLZdAyk4GiUrLJRPvJcaUqRFIWCi3ODCW5p17B/iDRwrccTBFDUFx5v34Rx5j8u6bOfXjF0ipr3BTcg8165M0SwFFK8kup0kqpoXZ9JcaVH2doWzA2ZrDDC6mptI4W8d3XcbHJ8jrDstOK7R9JQ0CKfH8gELd5vCS5C9NzjAYG2TFrWF7Pp4vWag0mR7IoDdM6rZHo+XhCJ1AdVCcGLb0se0GmbjOUmVDYla/baMJ75Nfr4NiI4qnYelV5KTKyeIhrhsAU9GjCug6X1k6SPbEWa4fGwAkqghAb4EPQWVvJ3+dQCKtImgGjZqG5yhQLTGwusCsFIhIBZewm/hOmVZCQwahTammJLmv9DJt9wNbuqFCRGhEaey2xFhzred7rW6STjoIzQd/Q02qc7w/UvZuVYSPqvpIFCQGy3p3PJqCqgYdl3GheHj1KLZMbj5Lt1qvd0NXLr5AYa46+/YlqDcSIWEZqBljnbAaEWEtR4SlK6GENRhDzZkosYu8faUzcPw7oRNDIr9ORAO7QjWdmXnDHRauBoJA8sJciWdOl3jnniFunMz0DNoNz+fPV8oM6CqfGh3cpJq7WAwZGgeSMZ4q13kov3lCM5GLM1dscktXOqAzLZtVx+Mjwznc5QZ+xSZ5b5hWp1C3ySfz5GMGnxkf5M9Xyqy5Hu/NZ1CF4KVakx1Jk9W5Bq4foOVMBuY9jlda7M9cOak2pve6mbunK/wwLZkqWWiKoNJ0yafC2XOl5WwKDhZCkE8ZzBVb3Ls7T5I0Ox2JU0jSSrqctAbYPZwmfuqrNK0Yz+/+NB+q/AmrLRe7HuCjY5fLJM0EjYZLs+4ydnMSf7XOIhLDrVJbSzBbLhMoaRpuQCqZ4lS9yB/++Aw/d/skNcvjkUPLpGIa1ZZH01bIahN4skTL8Sk0bB5+scpY2kB1A2w3oFBpEVNcHFUgmh6nbYuXT32b24Y+gO0FvbFrQSQlyDC7gvvKN2HsdUi8L1zvO9Srq7xUvIUbplSGJyGffR9+7XGKz3+F3zLfheIOgGchM2Fi1MO1EWpKgfbwr0oHMDpu6K/NOzyQatBomexWFgBBXRpU7RgpwwERTmKklMgg9KwL69auU1I3ObWJRMren397Hz8Q+IFAkWrPkctanh7f+MtAy9JQ1YBapPoUElZbAr0959mQBFaILoISnX964V/+WPY2q91w5SAUgZo2MKczJG4ZIf3uHcRvHkZJ6bjLTRo/WaT2o7O0DhVwFhsE1jmKdHk2HPkWvP412PkA3P8P4M5fhYMfhel7Ib8HYtm3BTlVmi5fen6eE6sNfvGuaW7ake0hpzXH43OLRXbFDT48lL1scmrjHQMpDtVbFN3Nz2EiF2eha+YdSMn3izXePZhG8QKsIyViNwwh1DAnXM0Ks4UA5HSNz4wPUvcDvrRUour5PFVu8GA+w2DSZKVmo6QNBh3JXLW5ZUzSpcLUlI4EFdgelUKL+bTKcrHJQMJgJGN21N6VltsJtO3GcMokkKGnXMpPMK5CrRZOrA4v19h1/V2o9Tla2RkGEilMXadQrYMNubRFdamMKaEwVyOIq8zsH2TQ9rgp26I2Gxr8YzGQapKW45NIZSlWaqRjGo8fW8P2fA4vVhnNxEiaKocXqzx5rEa5EdBwPKotlwBJ7fAc9tlj2J5PvWoxqPs4usmZ1YBvzu1GBj5xXWB7Af/l0RMcWoxS6fgupZaH63vYJx7HiwbFNhlkzQNUqzn8YN1Z4XgRLEfF8QUrs3WQKk/HBzijJlnQRzjsbA4tgHVN1+lGknJgEASCvU5IaqeUQc6qE3jt5xURUrUeo9XSN7XVjaYVPo9KLZzcnDYmOG5Ob95xw8E19cpqVjbG1KqqHdokG+bmjV0oa6ke9WBPG5dZvLAvQV0ghAgJS00bMB3qvIOGG3oIrjaxjxZBVdYDhwdjoYRVOAFHvxVKSXf99beE3ehSIKXk1bNVfnRijbt2DnDb1MAmp4QzLZuHVys8OJjmhtSVDfhNqip3ZpP8sFjjE6MDPdsGEnpEPC7pmM5LtRYJRWFfwqT16hr6eBItFxJLqeGQ22DvNBWFT4zk+GGpxu/Nr7InEWPU1BnLmixVLCZzcYaSJsulMiNXSYJyTlc5m9FwpMdS3WZ4OIHR5dSzHUHlUwZxQyWmq/gNg0zS40hdMKSrzJdaTN11AEb/No1vLTGk6xhmjNWlCkndZ3DQYXWuysKZGI6hoCUVUmkDYbu8K1/n4WN1Zj5wkPjZJapKkpbrY6YGwJ3n+okML8yWEa5FZXGW8YmdHGvorMZt1qrQ8iQN2yeQMJhUKTZBYmO5Pi27SdJUsFSN08sBVMYJ3Baa4uN4PlgVVkpJPF8yqjQ4bteQzRiNGmQtSUo1OgPqgL4PzzuOFUjWLI8nn59ndS0kt6Nz+U7hvVo8waw+yGl9jKoiyJq1zj1cWz7AjukC0C7ZLiKBTSUIVBTFw/LWA2+DwEchTFEp6PK8E+u2rSDolYa64UX5AS1HQzO6A3nXpaX22rqIhwG+Apbq2R4Oc9yLs6F3/1p9oaIoDn5bCpKXKMu8nQmq4Hp8aalIUlVIqCoJVYmWFRJKuBxXlc2ePW8AhBCoKQM1ZWBMpXsJa62FfXgFisfQlFXUg+9Dm9mDcglOAOeCbCuyQ5ej6Hu0HKwvE6kbCICgvRweK6PPrdd3tbtpP0LHAsul1vJYqVi4MuCTUwOkKz52vQCKQKgKKPCa5/KEbfGRdIqpio9bb0TbRfipCFAFSkxDaJf2Y7gjk+T3zq4ybzk93oBCiNAOVbHQdJUny3U+PTZA0PTwizbx+9eToa7WbYa2yAKhCMGDgxl2xAzGjJAIRjMxzhRCQ3IqaeCsBSSvoCeoqSlYboBveTiLDebSKsO2zoIX8L5sAjMfjq6uH6rGUlvYSCdycXZGwcai4mOPeAyf1lgot8gljDBzh5rGEksMIjDMOPWFBsMJl8xwklMnLPbeN8j3X2pgEgZQG5pPxUqjiQbpjIm66IESp+l46Ok8RnCUmXyS506XiFVPUm3ZjM+9yrHFe5gvD9ByAwIZeukCDGVUTjlx0qZG3fZJ1qrEYjq60KhYPjnFJFY1aCw3cVwPVo5RNSu8uDCF7lapCIc13yNOisAzQahUmzZ+08Fs1akEBt9qpHhvxeGFYysYOBREC0eGKtFq4IDU8Qio14apC4gF6/fScjLIoND5HgTQaLjIaPj0Aw1kmLFBAp4fZneoWzEyrBPdfbWXwWj/ZJUeQgh8LXRgkKE9SNMCmpaBtKK9thniGs1Qksum7TBIt1tFuIXtaCOCjnpRYDub312/nQn9Atrqhm7UQAqkvXWhyAvFNU1QGU3ltkyCph/Q9ANqns+y7dIMAhrROssPMBVBUlNJKEoviW0iNPWKqZQ2okNYSR3DmENWv0tw4Hr89Ifxaj72M0sQBRejinXiaBNBmxQudH30PTp5NMivLyNCNWX4PUoJs936aBlFRPuF7QhFAS3c3HACSpZDqeVRbDmUmi6WH5BN6AxkTIZ3pNgzlERpk5gfklrgB/yo0eKIY/OpWJIBB/yWFV6HLzd9BpaH0BSUuBb+JTSUhI6Ivgt966zUALoieGAgzaPFGp8dH+zZbyIX52y5xZwm2ZcwGTZ0WicK6DtSIYlGKNSdjl1nK+xNrEtIY5kYPzkZGpIbmmAIQcUPGLzMgoud61HDQax1uoIxnmSpWOT6eIyTfotU0yM1HRJp20Fiq/sylDL50I1jSCnxyxYLuSQjKZPZqt1js2oQEEdgmjGUpksq4WDmBrn1xhrq7hzi5fnOb8c0XMruGBo1YroCigNKnJbjoyQHGdXqjCRUkoZCsVFiwbiO05U0qhu6xrsCFEXScHyklOTiCg3PIB1TKdRtkitnMdODmI5Dy2+RUDQUNwDPRXdrKLrg7NxpGMngyNC64wUBC9SY9mLsjj/IE/Ml1KUajZjFMW+AcR1qrk+rLqlHJdqbUZ65euBSrcdppfQwA4JhIoJhctG9kZ6CXVeQbRuQ7xN4XXWPuu67lGDbJgbNUM0oRafORnv+GJJIeyHaJ2IW31doNE0Gsq31DBORvNRoGhhGr2ee7yu06yLakVu9Ks9nl+qK/Wp0ZcrYkE7KdRUazc2TNdfrJTJr64r359IKXjCuaYLShWBP4twqk0BKWn5AMwgJq01cTT+g5DrhchDQ8MJPTYgOebUJLSQytZfUFAWzPWBfKKwqHHsEWiXETX8JNTuJShjiJqUMZ+xle90a2iaLiyCUkDhE7/FXEO1yIqtRnsLVms1qPUziOpw2GRo02ZnOcFfKJHueRK1eIPn2WoWaofPLo8PbxhR1Q0qJtH2CpkfQ8ghaLu5KM1r2QnVGIiKvpI45k+mRuA4mYzxXbXC4YXGwS404kYvzF4eXcWKSX9kxROD4uMtNUvf1VoktNGxu3pG7oHs1kDBouT4tx2cpCBj3BKuWy+B5JGXpywt+dkkhsOZrDD6wg8LKKu/OpVhwHBbWGuwnlPy2U+/1nLPl4QeSs+YU+0aSJJYtTL1dkE9S83xiQsEwY6ieT9JwIZHHsM+AIogZSmcWbeoupfoABnPENIGnOAglTsv10VWFj0620L06qaBKgziuMFmqmSQIWPEkjgBDh6btUfXWqPs6fqCS0hV2BAu8stLkwPX7Mda6EtC4Cr7roYuAbDpDSpfM+R6gIBH4gUcLqHs+rt3khDbEs/J+HmxFbuhIXj9lgRrHi0Z0W4qeQN1iMwVmeE8sbd3ZJkAgbAff10E4gMTfIFG06aZugWWrpKKg3SCSxBQ1JBbXM9B1B8dVcbpKqbeLI24c/NsQhCo7291+8uO3Y5i6rkl2lIqb37WWpXfscluh3tx6oraR//yuelPdiWPL1Tiedu4A4vPhmiaoC4EiQukpuTEZ1BaQUmIHMiSxDqH5NP2AVcftEFub0AJkD5ltIrHONkF8+RWUU4/B5O1w/Sc25Z8SQqAmddTktRFEK6WkHuUq7CajmuWSSxghGaVM9o6kGEqZm7JZnw9NP+AryyVSmsqnxy7cU08IgYhpW3pISimRboCMyMpdamAdLRG/Pt9z/LsH0nxrrcK+xHrw7kjK4Nlmk19N50mqKvaZMvpIYlOsW6HuMJS8MEcHRRGMZmIsVy2Wmg4TCYPVaosD6e3ta9ILaDy7BAhi1w12bF/bYbjm4U2naaoCx/cZSxik6ioLTZ89DRc1qV8QQXllm7NZjaHkBEMIPhF3eSlSsTUcH1VXEL5EGDFMKUnoIUGx9CoQuqy3s1qYmo0nMjhmjNQLv01DOwDCpOn4xHVChx+rQsKr4BsZ4ppKwdKJ6S6aKqg7IUF5gcRrnKVStiBIowqFMa3BT/Q8ZiKBbrbvjUC6Cq7toghJTBMkDBWsdhCsCMuPI5gvqDz5QsDSXo26rlNrrqvenEBCfQ5p5gCwAgHeelCs32Xo71G/AeWmxPdF+LMWkqDLJiMhmnTC2rrcxahXIpDrz6Vp6ShCJ6s7eJ5CtyTTXgzVbLJL+mhLX5vFkW4ycL1osoGkaRnn9j+PYNlXfvj3A9Fz6sWLVA1uxFueoC4GQghiqiCmKmxdgq0XbiBp+v4GQguoeD6LthuSW6tOc+Uwth8QG/0YSSNDYrXasZFtJaGZisAQFymdXQb8QFJo2KzVwlRRa5FUJAhVQMNpk535JHftvPyAaICi6/Hl5RIHEjHuH0hdsesUQiAMFQwVNWui5ePUn1rEW2uhDa2TwnTcZMTQeb7a4O5cmHZo1nHRTY0xqSB9iTNfJ3F7b5E9y/WxvYBM/MJ/FqMZk8WKxXLN4o58krMVK8znvwVkIGm9soaaCZ1oWq+sog3GMffltsxiEjg+gzUPbzzBsu1i+mFF3TQKyykFb621TlDnCQ4O6i4ndIkhVPyEykFP4YmCFebiazhk0yau7UPawJABCd0Li07aNZCSpKnhBy6W61OzKkh1gmOjD/K+xE/QS3Mg9tNyfFQhEPGQoJJuEWmkSQiFqlSIE6ArClKKzjumVAXeXANNpFGRxIRNIGPETRUjSn2kKCqBJ/AcDxXJYEygaho0fSRqmJ0hUvX5SLyWSnlZIFForZwBUuGA3yygCXqdDZrtVDyCen1kvSwTkmbCIdE0cQVYXkQQUoFApSe1qhS4noGhOx1TjecZ0Nj8TD1P8MTg7dxUfb333diQz67jeh59D1VtvftUarFOHrx6Y/uJTkereIE/wys5KvnbePddKH6qCOpioSuCrKKR3eq3HwRw9llYeBKm78OfvJOWZF3N2CWhFVyvR/3oBBJXSnQh0BWBoQhMRaALgako6KK9TonWde0nFPSu/Y1IFalGJNBy/I5ari0ZlZsOmbjeIaPbZwYYvkpFFucsh6+tlHlgIMXN6Usv2nchELpC/PpBWocKpO6d6KkP9sBAms8vFrgxncBUBD8o1njXQJqlisWEJUOPzA1VaAsN56LLdYxlYjx5ooChKkzmE7y4VNpyPykl1tESUkri1w2GyY6H4ljHyzSfXyF5z9im8zpnqrgDBpYiWGg5ZBSFuK6SCgRLKQV3qYE5k6HacpneEAPVVim3JXan7nAqFnAwlcRxAlhySMU0Ki2XUtNhIGvirnlIxWTA0MgngrDopKqB2yQT07Fdn7W6zdniKrHEjahxDS03ibb6AgKTlutjaApSz3Lk+TIpWUBPTKK3BCVfMEyYJxAEigjTGjkeyLqHISSqlNSWAywLYjENI5FCE6AoCr6Q+L6PIGAmq7LiaCB9FCEJEHiRKWc1votpsYiCRFGhHUYmo1x2lnSRPTqq3kG/Wm8PqAIrJkg0Q0eCdk4839cJMDpphwTheQNfI9CcjuTjBiZBt+rLN5CRt50rDaRUaNfPkHKDNMW6y3nneCm2JA7Z+ZSd5LjyMilGQaCco40Lab+jOrxU778IfYK6FNRX4chfgKLD7X8VEoOoQApIXWANKSkljpQ4QfQng67l9vpwXdkLwuWu/W0/oOJ4lFsuZduj6Xg4TpjLK2vqDMR0BuM6g2NxdiUyxFUVQxFIIagoAst10X0PIyK5kPxCItQvUbo7VG/xg2KNjwxnmdkiPdDVgJaPow0nsI4Wid+wHhmfNzSuS8V5slwnq6kMaCq3DMV5Zb6EY9vE9g9saqsQZT+4GIxmYxQbDvtGU4zkE5ROruAFAdoGRwlntoZfskjeOUZLSowANE0hdmCA+o8WCGpOmNUkQuD4OGfrOONJbM9n3nMY1jQMTUEJJPGkwdqyRaLpbqniq5Vt/uiFWX7twX0IRXC6YTE0GCeva5SkR2B5DGbDUurFhsNQzsRbsHGlwXBaIan5YXFKMw12jbt2DvLyfDl0nZZVzMkEQ4YJ6Ql07TkEeqTiU2m0MjSX1kiOO5jxJKblUNMUYvhoqkJbQB9MmWFAfEugK6ASgO2BUEgmdYyqiR7FEzm+i0qLj074DCcNCoEOgYOmSTwBBCJ0lhBhoHiARFUFbiT5SMAloB74JK0KQFhiQnSFzwpJy1I6+0vRK8X0PE9PIGVY+l1BdFR+4cAs8ETv8+941AlJo57r2RYEWk/A7bIyyFiweaKzsR9yE1WELB2IraWgjpPGZUBFELA5ae1GVOtX5vffJ6iLQeDDmSfh7HOw+90wfuslB9cKERKCeQETDNvz121FkZqu1XDI6ip70yb5bILBtEk2YWCaCp4EW0rcQGJHxNZebgYBZc/HjqQ4OwhwI1K0A4kbBHgSjEgNaSjrBNbzvb0cfRZcnyONFp8eG2DYeGPtbLG9OepPLeKuNtGH1yWJ+3JJ/tv8GhL4zHieOPCjZxrIwQzq4Gbnm0LdYSh9cT+stKmRNFVGMzH0hE4GQbHu9MRDeUUL50yV5F1j1ITk8wsFhnSNT44OoAiBMZHEWWgQ7yIo92wdfTiBoflYbsCi7TJshATleAE74gYr+YCxpQaVKJlrN5bX6pSCAK/uoCV1VhyPqXQMUxE4SJSETl6VnC21KDUdpgdzlFSBZRvomhvGryh6mN3ErqGr6U7ZCE06rMY1huIGZCbQ1ACEjuV4OKZGoxFDtMrkhmYYqhsoKy5eSidmhRKUoaoE0uWDN4zyxOMqOAoxPfQ+M3EYGI0Tj4fXqqfyyMDHby6j1OYhuZNAqCiqBtJCFQEeIQE0pYoaBJxxVJ5aLLN3Kk4rIigvkGhKGC3RHr2X/RYZ1eiM/O1B19cbYVY5AW68iO9u5WCQXpegkHiewHFVfO/8ExwRSIJA6UkX9Lq6k5s4BkBNJBijdAE00Ivz7d1sGTRboOvnT+DqnyMLhOiN7orWhZLXFXDc60GfoC4U1QU4/Bdh/aQ7fzUsaXGF0a5n1K2eW63ZNB2PfFTxdyhtcnAiw9BVrPgbyHVJrpvAuqW69ve6DKU7BcFnx/Mk34QqxEJTiN+QD+07WbNjz0mqKg8Mpmn6AXkjfNXHah7NA3HSW0ws1uo2e4YvrlSGEILrx7PM5MNcfcNJg+Vis0NQMpBYR4rErhvEMhS+uFjg1nSCM5bDo8UaD+Uz6OMp6j9ZJLZvAKEKZCBx5mokbhvBXKlRc8KaWLsNDUMNs0sM6BrNnE7jVB1TExgbYseKZQtUQb1ik0FgmQqDmoqpKNiBRE3pXBdTeXi5TKXl8Z4DI9RNjaaloYs6CBUUJSKoKkp8El+GajY1cDhedHlgvwmxLCIzhmnFCaK4OKupk1YDhmZu5s5SjGOzLVppA7MZYGoqMT0sSx7XVWKRdss0BKoM0H0XoYfXaeoKejyH36rgIVB0G5yAQKg4QrLarJDxFHxFEvjwmjvIgBbgeQLP8BGqQIm847zAx/UFUqwP5K4fUJE2DaN3UiIVP9oppJ/Z3DB7u0oiBYDtRy7i0TtgOwp+YKJHz6EtfamRXUwikJqFEhhYrZCgbJmiphsM0ehyKSfMFN7jQLHuqn4x2I7gXHc9SLi9z0YFYuiZd/l0s5Vzx8WgT1Dng+/Cqcdg+RDsfR+MHLwiKYna7tzdrtxrdRtDVTq2ov2jad65d4jcedy5rzSUtjMJsKlU5jUKbSCGPpbEOlIkcdN6espbuuxgfs0hr6osGzC64Xgpw3pI+dTFqfgA7t+3rlocSsdY6Uqr5MzVEDENP2/y5eUS+xMx7smluNkP+OPFAvlak1vSCdS0gbfaRB9L4i43UZI6atogVlKYq9qkFYVkRFCuH5BQBOWYSsv2yG/wRJSBpFR3ULMGtbJFSldpmQoJTSGmKlhBgJLSSdk+v3jPNIcWqmRiOrqp0Gyp6MJaL9lipsGqoiZDl+zAtQgUHTcI8/whBNz5K6jfm2NA91ir2ZipFIa2By82QlArkhyMM5hQiS0FTA7EKDsqNRccLwiTrQpIxBRUFzTPQ9F0dFUJJShFQSiRKk13CVyJFBpH6vOcng/IaA0SwLyfRAjIDOo4S+GALoVEibJ1K8jOf42o3LoEZOBTSMQic9DWVp6aMDasAb978BYSKcDzdA6rM+zlTGdru0WpRHWdAoWiF06CnlFv4LDYyV/jK2FWcQlIZQsbzzoZtmELA1M65+AQSZd7xJXDNk1ubSG7/NP3CepcKJ2GI98MS1zc9ddCo/FFIggklZZLoREWWiw0QlKqNF0GkkaHjPYMpxhOX7w7dx/rMPdkafxkCXe5gT66OU+Zc6ZKcmeWM1WLmzdsa0S1lgx8lk+eZuX0SYx4nAP3PXBRfRjNxXn5eJiNOrB9nNMVjDtG+epqhRFD4/6BcHCKqwo/NzrA5xeLxBSFobE4zkKdzEicypkKwUyaQstm3vc4ZNkMxw0ShoaiiHDwRtDwA6ysQX5DUUC/alM1BEpcp1qyGUkYtIwwVCKmiEiCMrALVZKaym3ToT1ONzVaZYUUzdD+BCFBlU6jiLAGUuC0EHroMTnUFdCsqIIH9w3x8HNnSeYM1OwefE+yIxMjr6u4Gage97nnrmn+jx8uUlkF2wtQowEvHldRbZcAhXhMD1WBemQ3VZQw7E93wJLUagIsm4yqErguTsJhpTkAiiRIuwSLADKMZY9csS3hoMuwLasr/U5MeGFRPpRNg72C5BPyOX6vtbtn/X7/FG2LkSIkgYBQhxBgeeGQ6m5R5twXOhpQCLq1L4JX1L28ru3iRW0Pv9L4xmbLkhSb5sRFkWZcFs4t44h2EPBGbH3UuWKmuo/cePR6mPGVR5+gtoJrwYnvQ/Ek7P8QDO097yFt9dxaI6y/U6jbrNUdyk2HuKExlDLIJ0N37jt3DpBPmm//8vMXgaDZpPnc86iZNNr4ONrQUJjJ4iIgVIXYDXlaL62i5nrreQWWh7vWYviWIX782lLPcTIIOHPyDPH5V3n+G8+RGxtnfN8BTjz7EwLfR7mAAOM2hnNx1lwP6QbYx0voEykes1oYQvC+fG9W90Fd46PDWX5QrNH0fKqVMuI1G8WxyXkaibKDHfjEAslOVSNuhPfDUEMbYMMPaAwYZGcruKtNrAGTtKbiFSzqCZXBpEF9sU5QdWiZYaiDrggsP0BJ6wR1p1MgEEAzFMotwYDS7JWg7BqKEqp+8SySySRTg4me2lNCEQzEDT5+/Th23cWxPXwvCD1VEwbjMxme8wNGkjoHxkxOrMGXnpsP2wT2jWgk6018aXDbVI50TGckbTIS01mwIp8y1UH6cPYk6I0k70iVeKKsYiXryPIoyAAn8ENtmAjwA4nXNUBbgY8XKBhqKJHcaSxzzMt1BuaNqYKyahYdr1NSo/O+dL9zor1OAQJ8VI6oM8wro7zXfbqznyIBYfC6MtNZ11br/US7CUfRMByPINB6XNh9z0AKBY11u5EATmuTjDRrqNp6fayT6gR7nQJSddhetLpYy9a6fcm/6CPDQpKXgz5BbcTaMTj6bcjvDaWmDcldpZTUbI9C3aHYCEmoUHcoNR1MTSEfEdGOgQS3Tg0wmDQ22Qf66IW7tET1W9/CmJnBKxRpvfoqQb2BPjaKNj6OPjGBPjqK0M/vfKFlTfTxJNbhAvGbhzuDrzNXQx9Pks7FsL2Auu2RMjUWjh5m4ejrLDYC8qOT3P7Arehm+MwXjr5OrbBGdmSjQnB7DJoaTUOhfqYCBYv5WwaZrTX4pfH8ljkjp+MmvzwZSiKtpoazWCe+bwxjKizsuFBu8cOCg+rJDiEYmoIhCcMWFBV1/wDLr63xpWGFv3twAr9kUUsq7I8b2HEVr9CiNaWTVENJxA5kGE8GSMdHRDn8dFNBugLdbIIazfJj2TAWaqWFUXeRGRvDjPPzd+zouQ5FFQSBxGl5mEmdwJd4boDvB+imhqKpCFUlsFvETQ1FQKpxhoNGgyCQDObiqKKKj8E9uwcxNIWpwQSrqTgr1cjzT/UJnDCWSGQc4paKlS6EkpNQEcKn7gQ0pIZE0vIN5twE4KMgKRomaiDR5Xp2g7hYl6aartZV2VwQFymEkDwQvBitCtAQnSwSirJZ3xWg8Lh2+/p9ETArxnhKfye/EHwNV6y/w9sN916PWl1QFSleNg7yoPNCtEZQFbmefUCyrA6yLyiHnt0CvEBFa6dZ6nJDv1RcytEt+/IcpvoE1YbTgGPfgdoSHPwoMjdNw/EpFBoUGiEJFeo2hYaDrgrySZN8ymAiG+emySyDSaNnRtnH+SGlxHr5ZZrPPkvqPQ9h7t7V2Ra0WriLS7iLCzSfegpvrYCaH0Qfn0CfGEcfH0eJb52xwdydo/H0Iu5SE2M8ifQC3IU6ybvCWKOJXIzFcothWWfx2GEO3v8gxbM2Y9lYh5wAssNjVFaWL4qgVCEYSBosnSqTOZjne+UanxobJHYBBRmNyRTeSgt9fF092c5o3nI9EpGjh64qKAG0/ICGEzA8EMMZS9J4fZFTj82RkUDeZMjQKSQ03IZLoIexcwCeDGfRSsogqLmdQpxq1SG56qHtCHpUfNKqwckKsbpL4Dvr0lUXFFUQ+AF2wyWTj2E3XXwvwPcksWR4Xj2m41bL3D41yPdfXcCbXcQQPla8hplN4EpBIEzUaEIn1Og4JZSgAt0hcAVGUsMPJHGh4egVFN/EUWNoWgxf+qgIFOFTrAQkRZxJdZFaYFCOJdADH73hIpXwtzqp1MlmHWolHTuaAHmKifCbiIxOvZ5kwl0FEcb/SKF0fLWN/5u9/w6y7DrPu9HfWmvHEzt3z/TkHDDIRCAIAkwSJUqULFlUtGRJvnIufaVbt8qs8rWqdFXWV59c5fK9DvpUvrr2p2ArmLYoiaJIgaAIggCIjJnBYHLsnul0uk8+Z4e17h97n9RhAmYQKOJBDbr7nH323ietZ7/v+7zPa5s1Cr+o35dPxNi2ICIgVoI/cb+PVtTutD+xYkMnV+hFQTeiqsZFjJEoI4lJorPLaqKz0w2Zwqz6/ZLaxG49C0BZZCmYnnGrQNyy+OLtqPTi25zo9AFBGUNz5g3aJ77KYn4/l/I/wOIZw1L9HELAaFonmsi7HNyUZzT7QZ3oTkAHAbWvPU28sszQj/4oamho4H7p+7i7dnZJy4Qh4dw80dVZWseOUf3rp5DZDP5dd+EdPoyweh9loQT+4TEar85jDbuE8w3UsIdM3RY2D/lcXqxQufAiux54iOzQMEunLnF4ujhwDsWJSS6/eRTWVKyuj4khn1Lc5lnaPDacZ9K9uatIVXDJfWS6uzBDbyZUM9D4fRFUHBs8JVkJArY5imbGwtmWZ7mQwxeSoWaTrJLMeIqmq8navaZsRwpaqZIvrgVYYz5xLUBcqxO7FrLt9ghK2USNPIgAq60xUYhaj6CkQMeGVj3CzdhYdps41OhII1NydvIZguUlxOYCJooxLRtjh4jpc7jZzybeeNjIlKA6EaerUoNgFSLQODmFrmhsJEJqQp00zsZSsW2yxeVLBiE1sU64xMJ0F/XIbrGUzRMqRRSfxAryKJV68ykP14VYGHZFmyjYESBw6R8zv1aw0F8zipHYlk6sh4QAaSN0xJZWndOFUSyR9Df9f50fIrRrWOsYrTZMBh3bqLSu5Zrghs2xnXvjvgTht9372FWfRwnNS84BPh68nG4rkEag193TnUVT3N74me8qgmqlnfClNCJaWV6kcOkprKhGedv3kClsYTTnsHeTy0jWIfMOOC18AIiWlqj85ZexN29i6Ed/9KZSd8K2cbZM42xJfISM1kRzczRefoXGy6+QeeD+AaJSBQd7S47miRK6HuIf6SntNhU9jn3rW3x0/yaGpzZjjKFUD9Y06ebHxmmUV4jCEOsmzrGDySGfF4Rmh2Nz73V8+dZ9nmrw85ZEUBolo+6FkWNJgjgmqyQr7aQ5thTF5JViNo7IZz2KoSKrJK2sRbTNJat6y5EnJW2tyfhWYsALhHMNnM05glqAafqgbEyoaR5bJCpN4BwRWPOJi7dSa5WOQiYpvrAd4XgKZSvCVkQca5SVEk0+R7u8gpweQkeaMUtTFhGM70NmhrGaHnHG6ilWBSAErlJIEiVcQ9R5tf0aQlhIFErE1CMPMCx5LidElizzCJmIu40RtJ0a202FuaFxrrYsVCjQMsSY5LkLYXBMwC+0/pTf9T8HJqkZjWcsQKDQA5GAEAnxxcKmEw7Jzsj5viXVIEAIbBPixzECQah8iGI8H8I+nrOdmHYg+Wv7YS4zyV9an+Sz0df4ivURSjJHLCL+WH6aH4v/CoChqM5gKCXozOw12kaoAB8Po62B7aoiQ8E0u3+fU5vZFc/2nXOnV2y19dLbEy/H4oMIag3aUZzWiBLFXOf3INaMZh1GMjZbWye5t/pt3Psext/9GGId1c0HuPNonTxF/ZlvkH3sMbyDB9/2foSU2Js2UfyBzxDOz9N48cUeUR06hLBt3J1F6i9eQ7oKq2/SrdsoUZ6/yuYf+RQAlWaEa8k1KVplWWSHR6gszDOyeQODvXWwyU3qPd87VrjtCxwlBUpCrR31Iqi0FyqrJJfCiIyjqLZCDuQ8jtdaTDo2w7ZFRkkaGMIxn2yttyi5qZIv5yjicnIJv9IKCTKKOOMg6hId2gTnywhbktvTpDWlkJGGMERsmOIzxJFBWhLLljSrGh2ZbgTlFou0y5cRCD6xvcb2quB1NGTGsG0bt+1jGr19CyGQEqY2ZbjYaKKFpiaXKRNSEBMoDFJGxMZOLYcEtrKSabape/gBp00tM4tqF7Adgw4UoV9GC9VNtUlpcAnTYwIGtACFwShDAFh9MnRLma4T+XBeM9fsfW5i1ABvZHIOYiW9OBCgHEnUjvEcTTWNngyCKNOGwOaCTNz1SyZRVl4To9Slh9UOKPXt12lm03noAq0tlOzV0q4ywTQz1FSvp28jz9bGuhGOodWRsd8izCoRxhm1ZcNtbwbf0atyEOkkGupKuJOfrTBmJJtEQWM5h+2jWUayDgXPQjSX4eSXQMTw2C9AduzGB/oAtw0TRdS++U3CS5cp/tAPYY2P3/hBNwl7YoLiZ1YR1f334R0+TObecYh7X5koCLj02kuMHXqAxUbMVg8W6+0N+5+GJqaozF+7JYLa7rv8/PTYHRuk2alDdcQ2buomkfUllSAm41jU6pq7fJ+T9Rbnm20OZn2ySiVKv1iT6auBuWkEJWyJCZLF81izTbNgc3hbAc80qZ/xYaxO9tFNyDcFShhCS0ArRHhrXyupJOHFCsIYpBQoS6Y1qF4E5QwNUb18IrHSCmOEsDBCgxCotCak4sGLBCEF4xNZ7AuGGMPw8DIT1/ZxZTRCGFAiiUy2Om0oFrCURAuDkhExMCQ1DXn9qa5CQCxtEGA7QAsmCh6SpGazenHvfJqGm61ke6G6AUe8ysXO9jwEje5thSEI4kE9nBYWQgwm3IQw/BfnR4nTyKwjx+h6AEYeOPAn4nv5Yf11hBFoEnI/rvaw1cwS6/SiLLVk+oZzD03h8un2i6AttOjEXPCifYgHw+PXfZ3WvG6s7yrRj5K8PUOD7wiCCmPNcj3oiRVSImoEEUMZh9Gsw2jO5e4tQ4xmHYrrDW/TGi6/AJeeh+2PwfQDSaf8B3jHEVcqVL78ZVQux9CPfw7pvjM+fWuI6pVXu0TVwYXXX2FoajPb8luZXWmydSSTDCncYMRGYWKSc6+8eMvncienPLurIruO3ZEvbOqxxrMl1SgmbymmXYcT9SaPDuXwpSBMZz1lBwgqqUEJR2HS/q9GFFESil33TkIjxCpIzPRY4sohEge2liUQzQj6RsbE1YDWWyWklOgrVez0XJUtkxpU3BdBDY2yWGvhGohbMVKobgNrx/FBSjUgfZeRxroapjJnjREaY0A1FcJohIixJBRVzLIvsWyLNgZLaeIYbKExfQTVW5J7EALGxiXqmsBxBPnJgGzJQqK7xDBQeUp/UVqjOzOYkj0xlI24pDUg2a4WsNwJrKIgLrkIEgJ0spqJa0ssZjIIYzBC4GcDGiWJYyyaMgCRphB1G9UnaNCxTQuPMsnCXxZJlHRS7eCC2sy8O0VB1yF22TzmUa/61MUQC2KSlhLpMyIlqLj7ahyzdw8Q1EY1r6+7D/JE8FL6bMU6Fbk7i/c1QZWbIf/l2fNUWxFDGZuRVDl3eHOBkax78w4L1bnE3NXy4YGfA3/4nT/5DwBAcOEC1aeewr/vfvz77r1jNT2tY668eZzs8DAjm7cM7LdDVNHCAo0XX6T+wrdxtm2lUcyzsnCNe7//hzDLLY7NVIDEJHb76NrGXoD8yCjteo2w1cL2bq/g+3bhWj2DVUgIqhWm4+nsxNi3GmvySrLFSwhqyErqp76ULIQRO/xe1NOpQQnH7kZQzVCzaDSxMSjloPI2DKfPVyoUmrYtEe0YqZKGdd0IabwyD0ogm210bLDjiLgeYtkykZn3R1B5n3bsIYIaVk0w0iigi8nxFQpjOahMNol408eo2OAhkdkxjEl6nKrtmFJgsEJFNhfiZ6sUGgUQAsexmButY4QPwiCFQfZHJwIcNyQWGlLDD8sopLBw03KhEPD379rEH10qJf6r6WItEVhGovs89IajFrM42DaEIVix7qb4XBETA9KVjHo2WS8DJHm9UGURqRrQsmATNudljIxtDBJlDNo1mKiNrx0CeuTykrofO+6Y2iYHq5gphJDkWiHCDcEIHFfyh86nsQUoWWe9NlsByH7/pxRN4fIF/wl+qvEVFuQQE3EZSJSBG6E3LXhw/7eD9zVByaDJQ9kqWw5Mkx8ZufXFLY7g4rNw9TXY9SRM3X1HbIo+QAKtY2qlJSrz8zRrFaYPHCZTSJRwRmsa336R1okTFD79aezpm0+R3cxxTz3/LHEYsnx1hsvHj7Ll4GFGp7cONPda4+MUvv/70c0mjdOnOfPlP2fa8an9xV8wsmU7cwsKYzazWGvzwPb1L1qElBTGJygvzDG2dfu627zT8GyVjqlI4ChJpRnixhosSZQaAWdSgpIIClbHj1CyEIQc7psu7KmkBiVsiQkTB/x6FKOlYCmImLCcnooPQEikiWkqgWhphGVjtKHxxiLuriIm1ogX5wgzNvZik9q3ZnEfmiIK4iSCSlOTtqOIZBbZKpNf8cn4AUzOYsnNyBhMcRMq56HbMdIYkBJpDDlp8fc+83H+xzf+B9okw/w8Y1No5NjhFxlSOYbbeY4CtrJoSw/L9CKbfnLPb2mzqRXQUiBWBHcH27gSjiEsd6BPKNaa4fY14r612zaSvKtoioAwrUFZuQM4S3MgYwQQC9VdYrKuRSX9/Se3FpkvFFisL6fvS8ymyQYLl/LYRrKtXuC8jLp1sZF2i0XXQQpBJHVSFOu8Hel5/o7zQ2gh0SrGCIEwkI0CWt5afZ7ZINa5osaJ8bCNxUlrG/ujSwB82X2EIO3Z+iv3Yf5e4ysDj6vILEO6z8FkgzCqJEfWv+Mm8b4mKN/3cOMWZ1/8FmG7TWFsnML4JMWJSTLFoesTVvkKvPUlyIwk5q5u/t078b+l6Cek8sIctdISXi5PcXwCP1/g2NNfZXr/Iaa2bKP21FOYWDP8uR9DZtePTt4OjNac+fZzmDjm4EeeREjJ8tVZrpw4xuXjbzB94DBj27YjZS8tJn2fq+06mz/5KXbcdQ/B5cu0z51jxzdf5fLCMaojhxjObtvwmMWJKcrz194zgnIt2RvXQBJBhbEmowEpqMYxuVSKPWorfnzTSDfFmFWSuSBcU4NqxTrxuEtJqqk1E57NfBAyodzBXieZpNMiRyEqBqFcgksVpKuwt+QSoYU2xL4ims6hcjZKm2QAIqBScpWWwKgMNMrYLQuRkfjag9hCxYksW/kWJoxpXSijCi5SJ+7fY4VM4jCuDQ0Vkol8DIKRIEdOJhGdQCRjToRA6ERGbYzhTGEfdioYEArGWxO0lWS/0d303Zpkf2uBPeWXuJDVNKVHO8wyETawpKA9sP4rpOio1SL6V+qyM8SQUvi6mZ5fH6TAtjeeS2VpjRVLTOwQrVOJ0KqFFqn1mtAYo9BhDkEVIWKEWJukM8iuiS2AhSTA5nV7Pxj4lnOEJTnER9pHCcTggMSazJA3DUyQX+ds1+KsNc3uaIZA3rq3ZT/e1wRlOQ67H3gIgKDZoLwwT2VhjmtnTxEFAcWJSQrjExTHJ/ELxYSwoiAxd114C/Z8Csb3fxA1vU0khFSiMj+3hpA27d1PYWwCy+l9AMe27uDUU3/FpT/+Q/Z++HFGP/bxW7Yruh6M1px56XnCdpuDH3mya0E0snma4U2bqSzMcfnNY1x58yjTBw4zvn0nUilKszNUF+a553u+H2HZuLt34+7eDZOHuPLGi0xdPYet7t3wuMWJSa6dPXXHnsetYrW60El7o0Rs0EpQjeLuHDIhBFv6RAxZ1YukOnCloBYl5CEcha6FNJXgrozHfBCBkwW776JCJsMBY9uGwCCFTftCpdv4rPIuUgkCKRF5G5lzMM0I21WE7RghBdFSE5l3UH4WXbuMiEG4iq0Le/Ba46jNEiNTgmrH6FaMsKMkktKJXNwicXqv2yEj7UQ+nY1cHMsmJiEASya3D+VDhKcwK1B2hyiEY9jGYrzpYNK+poLxiYRFqLI4DAopNMkOs9omo20WhYVvS4yRGG1w4mR7CQznLBrtmEp6Do6TqBdP54/wQxP3Mld/NtmpgM7SHqcGtJ6jsZ0k+ukazApwtWbPpM3p2Z7xcGcXIRaW6rlhKFujI8lwlKQPL8tJ3khTpBnjEIoA0y4QW22E1eKymmB7WCW7yuEmSWHeoMfT9EdyG2NBDrObmevv6ybwviaofjh+hvFtOxjftgOAdqNOeX6OysI8V0+9RRxFFHwo1k9S2LIH/4FfQLh37sr9uwFdQlpIXtfq0uIAIeXHxrGd9cUExhjM2bNsXlim8dEnObeyRHDmJJv27L8jJGWM4ewrL9JuNAbIqQMhBMWJKYoTU1QW57ly4jiX3zzK5n0HmD31Fnsf+jDKGpRHbx7J8XxxKwcuPIPResPzzBSHiMOQVr2Gl721cRx3AjtX1ccclYgkiAyxhFqsyW/gF9ghpn6C8tKRGwDCVoS1gFAJtnkOL5RrcOAz0N+/IhTomNiRLBjJsZrk72fs7rReoQRq/wjRXANPCWTGQjdCHN8ijjQYaB5bwjswjPJcdLON1B5kLERFcmD0IF7dYnLPENlxHxNoTBijmxGOLZPIqx3jaAdjYloqJqtVeuGZGL2GIhk+mPUcHDcm52qcUQWnwdUu+TiLlBBHEkSQRk5JtHVX8yWWnQkiN6JWSOqSsU5rY0ZgiBkYeivAi0KwJFktsS1BJrSo0KZlO2QzMTlPUGhliZa3s39lETLJgj4WNFhC0HZDQFAsCmypEAFsGm8x1C4wqzTUQAnYN6m5Fktm55MLiv9lfZYGPj/mn2J+JMu1ZZ8/LnwUtTLJvmCWGoZA2Lxp7WfLAOdKOtNtO1ZKrww9yVxT0vlGryYnk45rFxjQcoCROvHZxo5/dwbfMQS1Gm4my8SOXUzs2AVhk9bRL1G5fIpy/gAzcxJz9a8oTExSHE+iLC+X/6DpdhWuR0hTe/ax95HHNiSkgf3U69SeeYZ4pczwj/0YY8Ui47UqZ198nqWZy+z50KP4ubefYjXGcP7Vl2hWyxx6/GMo6/of28LYBIcen6BWWuLKW8cZ37ZzXbuiTUMeNS+PP1IkuHBxwGqpHwn5TVKen8Pb+e4T1LbRQRf9pFFXE4UxlhSUwqhbc1oNr9lAX7yIs2Oqe1vSB5WOf3Ak9WqAKyUTrsVCEBEhsfq/KzIhKKUkV1xBqSWQ44NkL4dcwis1MkqisjbhfAPHswiaEdFSEx3EmEBjxwIz4xMTg+tgGxs36xNX2mRHPKRvodsxpq3RImJqa55wsUnt29fYMneIS8zScqKElOJEk3e5uMJEOYMwYNsW45uqWO08MZps5DASpAQvfAQBlpIIKZHpGPXtrdOMhctoW6CVZrjtM2eS+oowAltqhqUHOhkKldMeSwjsQgW3KKAM0tP8dx7FtUcZateIrGEkAlsOvk7KaCZqdcaybZzGZq5hKMRWMipE+APqz8565bmCYk4TVF0aAqQxFFSMIxLTvWWVZ1zIVODeowa5iiXi2MGk0nLPFpTsSQoL87ScIsKtDW488FhBw+TJRREdNuuo/64nMb8Tq+13LEF1sXASTn8Fb2w/3md+hQnLxRhDu16nPH+NysI8l4+/AUIkZJWSlpvNftcR1vqElKMwPnlLhNSBCQIar75G843X8Q4eIv/JT3adHPxcnsNPfpKrp09y9Km/YuuhI0zt2XfLr7kxhguvv0JtucShj358TRR0PeRGRjnw4Y9ueP9o1sG1Jfkjd9E68eaGBAW9OtTkzt23dP7rIQpDpJIDdbJbQSeCaoaagm0x1w7Z6a//vnm1Km61MvC6u/0RlKOol5tk7MTtfMq1OdloDYgqEBJMjBRw1ZEEAQQZRb9HhlQitTUSyIyNboS4QhKVWkTzTaSj0EGMpQ2m4hBTx3geQtpYQy5RqYU16iN9i2ipmYg3OiNrARNqrNhFYROmJq2xNtgSlrItptINbWljKQtPKWrE5OLk8xJLg0LSEVYLkZCPkXYaTRlc46I0/MKVL3Jix49xIN2nUh1Bda9aYEvBZD5H4I9B+RoIgb+tgaqOMbGywkJxFGFWv8dJXWxPaR7LHqFk9S3ufYP9hIC73DoX0783tVq0PAiqyd9ba20Y7knzO+dkpeq/3tFWQ6CNoiE8lKgAhhE7YLZ/y9gdeOxMdg9GO/y19Vh3+sIxazdlleHx9tE1R+iHvAMU9Z1LUO0anP4K1Bfh0A/D0NbuXUIIvFwOL7eHyV17ElPSWpXKwjzluatcOvY6UsouWRUnJnEzf/vSgdcjpMnde2+ZkDowWtM6/iaNF1/Enp5m+Md/HFVY25AnhGDzvgMMb9rMmU409eAjeLmbi0KMMVw8+hqVhXkOP/GJW7IbuhkIIfjo3nG2Fqdp/MHvoev1DQUdxYkpLh1/Y6BHZyM0KmWqiwtM7lp/TMvJb30DrWMOfuRjb+s5dfqgGkFEwVdcCyKO5NefVVYIA4rx4IjvpA8qjaBsSb0RkikmC+l9hQzPr9Q5kPWIjcGRshtBASzYgrEQqp6i37mw0+4hlUBmLUxbo1aaWLWAaKWFNe5jQo0yEuKkp4nCCCJXQw25BFfrCEsgfYu4HCBshYk0phkjXZUo+4Sg0BohzhsEkoZqcW7qBMhDyXMB7JbkI9mDLDiLvGWStlkBRMSo1Rf7lofC7lafbOGzr7kZx5JYut0TThiBE7kg0t4fAXtcTc35O1Szo7jqNJU4QKUSvKFWk7YfMN7ODyzRRSMganXP9YmFWeqNMZ7bPCjSEALGrbhLUNkoQqQXZlONAC/WTJjMmuVfakVHBliIOjZONjZR9zkK4CX7ALX8g2gVMGpyzHZqY8JwXmyl5fQGOs44T0KzRIhHmKZUX7UPoWLD4/QIyhgL0CBirsnR3jnFt9fz+J1HUMbAtaNw7mnYdA8c/CzcwKZICIGfL+DnC13CalYrVObnWL46y8U3XkVZVlchWBifxM3c+nDC9xpax9SXl7uR450ipA6MMQTnz1P/1nPIbJbCZz6DPTlxw8f5+QJ3PflJZk+f5I2nvsy2w3czuXvvDRf6y8ffYOXaVQ4/8fEBMcadxF2pQWy8exetkyfJ3H//utt5uRxSKpqVMpni0Ib70zrm9AvP0qxUKExMrklt1pZLNKsVhjdN8+Y3nuLg4x+75fekQ1DNIGao6LIYx+Q3GOkyHrT5bHNl8LlISSuNoKSjaEQaP10Ad/kuX1uq8FuXF9jmOfzgxFBSgzIxNQH5uMEYkoo7+N7JrlJPIpTEv3ec9rFFGo0QE8RYIx7hXCOp6cQQoTGOAAkq7bcSnpWk+JpR0oelBLoZYQ25KUElzzEWyeiIQGpkpsUTuydZOgZurAjnG7QDC8uVEILfiaCEpiea6+uZU5KIxEtPGIPSCREKowfMVMUqF/GhMEMNsFfAF4oK8EOXfS4EJR5sTNMaeQrhPjjwGj1pbF6LmtwdbOOkqTMSBuTbg6+j0oZdS4tMRAGPlet8I61dDWufTFHjVxM5u2cSOXtxSNBJzqnIhz5j20+uWJyTFsoIIiCXlUQ1hx8szqCuDHF0xxY2C4ujgNAO2kRExuWCtbn7VB0lIcgPRHgA7SjX7Xs6bu3irtZVMHDU2czLzkH2RRdglQ/g28F3FkE1V+DUl5PRGHf/OOSnbviQ9SCEIFMokikUmdqzLyGsSpny/BxLM5c5/9rLWI5LcWIiIa3xCRz//UdYXULqREiLC3eUkPoRXrtG/dlvodstch95DHv79ltK1wkpmd5/MI2mnmNp5jK7H3x4Q9HB5TePsjRzmbue+OTACIx3Ct7Bg1S/9jT+ffdt+LyKk8n4jesR1OXjR3EyWUamt3Ll+FH2Pvxhwrl5wtkZvEOHuHr6LTbt2c/m/Qe5+PorvPk3T3Ho8Y/fUhOwJQVxpUQlcBif3sZiEGwokjDtFiIe7IvJKklkDM1YYzmSJoZsakQrheCHJoaZaQecrqdmcVJB1KYiDFNhhSFls7LKTFT0RVCQzOUafXQzbmERGWiEm7hWSJ2MS4+NxtgCLIHK2hQ+OSjzVzkH3Ygw7Rjhdsa2J/vWAl4fbXL4WoBE0zQWGhgOkuVM2wKFwGmrboUkQmOnfwVWSGi3gVX1IW2wU/+5faVvMm4E11SMy1rT6E6TrTGJW7uOJSNhi3ZDAy4524YQbJV4KQKMXm121/mRto+ijiOSiL2z9++/uEiQgS0yw1AjhkzvuJ7dc8EwAoraR9sSt5FkL1pWARmuUMzG7LBjcn2Ku6wrsLXFMjFjVydpRfX0/U7ut7RHWxu8yFA2BRyvspqT0gNLaBcwwlCROfK6ykvOoYSgSGtTBizeXvp6Nd7fBNV5hYyBmZfhwjdh68Ow9aHkS3OHIIQgUxwiUxxi0979GGNolFcSwrp8kfOvvoTtut0Iqzg++Z64ClyXkHbtYe9Dj97xxTxeWaH+/POEV6+Rffgh3AMHbkuVlykUOfKx72Hm1Ane+Osvs/3IvUzs3D2wAMy89SaLly5w+MlPvmuvs7Up6ZCPrl7F3rx53W2KE5MsXb7Ipr37172/urTI/IVz3POp70Mqi1e+9Kcsfv3riLNnsTdvZu6F55mLWzz0c/8AIQTb77mfS8de5/jfPMXhJz5x089VCIFVmaO+rNn3oV3IVX1O/dDNVmLz1QcpBJtcm5l2wA5H0RSGTN8ImUk3WcqPVVOD2TSCWkFzJCoxXPSoRIP7VOnxVV9DsZCCzM5iQjKprZLSEFoxsTAYC7Tde04duNsLONvytE6WEG2F9JNlamXrBcSpEWJhiJRAp5HOX7RGaG5X2JakAAQNi1h5eG0HQw2BIBZxlwRiqYlVCNiULYlDr+gf9c2/yCMIUysmkUYLnX1cEw8T2RpjDFbOxpTa3fs8S/HRkV2UGztRUrK56HcfLPtethVvK/lWHjBdwhOASRWJ3dex73V2RTKKvmXlAEUxtghMkxj4ZFZytrZM3R9lkzSY0OBHhraCybyilI6DKoa6Y6KRqMbXISKjLYbzSbrQdNZhocnYimYgQcRURYasqCfLdLrJm2JvbyfaQui/xSm+aGmJ2l//Jb53BZXx4L6/B9nRGz/wNiGEIDs0THZomM37DmC0pp4S1sLF85x96QXcTJbCxERXJfhOXOWvR0huNkdxfILJne8MIXWP3WzSePFF2qdO4d97L/lPfOKmxmLcDISUbDlwmJFN05z+dhpNPfAQbibL7Km3mDt/hsNPfBLHu7VRFbd1TkLgHTpI68SJ6xLUuVdeXCNJN8YQRxGnv/0cO+99AMfziZaXKV6d49LFS9zzC7+EyuVYfO6bDB07TvUP/5jCD/wA9uQE2+66B4A3n/kah574xE1HvMrERM0aRdsiZ8kNvf9MuwWrRpYDTLsOM62Qna5HCxiyB5cCRwqCzsIkLXSsqZiIYVFhbP8YR9ttjDF8danCEyN5Xqg3+JYV8PcknGu02ZVJnofKOZADE8bEjQghBKEd0lRNQkt3LY364e0bBhIJvHBirHGf9oUKOOmCiUEKSSg8ZOIVwYzTYodJjhkLQdxyCTMxgYkAm0gkcndfDTFhhVyiDgJWHMlE0tGbPtdeiswacohKGkfYRMoCYSdkHQYEbpaWF7HV28pMIyFLCUmNDWjOTeAMrf2+TNd7GYPEoDZhiM6rsN67qLQmtgRSCx6wQgo6ouRtR6fTgDfpFlfIUlQCN7V1mo/bjLau8HE1zsnROsEqEuodT3TrX1vrDWwTUc75EGXxVc/ZAkgtnpKo1Bh4Wj4GTh2ZytNDYVHTQ4nJbipR39BG/SbxviYoK+fAmb9muZbHOfIo/pZ4oH/w3YKQktzwCLnhEab3H8RoTW2lRGV+nrnzZznz4vNd4iikzcNvV3xQWy69J4TUPYcwpPn66zRfew13716Gf+qnkO9QPS5THOLIJ76H2bdO8PpX/5KR6a2U565x18c++Z7UAL39+yn9/h+Qffxx5Do1L8fzcf0M186dZmzbDmwnUYyWv/A/ufDmG4ndzNwSJcfBNBpMP/Qob81epBG0yEQui/PXOPKTP0X00suEszPYkxMIIdh21z0YrTnxjac59NGk3ma0RjeaqNz6H3jLRMRBnZwS5DeQmEMSQZl4LUFt8WyeWa4h8xkaGDLu4D5cKWh1Hiclc7EhSzIkcMS1WKrWmQsiXq82sIXgeLNFUxiqGP5yrsT/tn0Ku99jKK2RqSGHMA6pWk2+VHmayetYYAlXIdoKVXTJPjCJeiWJQhzjAIqaO4rIjoGTJRYtVlzDjskM4YXETqjltTm58yUEH0YLTSBiXGwcYWHSFOWyGzLa6kVQtu41D0nfwgjwLJcmDhI7HZaUILJjMsMFZEtg0mV+Oh6B7uyt/sU5IaHRlg+0CeOQMFxhhHHsDTISnUePBQF7ly2+MiGwRRJFtQVoSyMjyZinGSoCpd5jQ6Npxy18JQmzU2TKJfpHjSkkRmgsYLqguNpu4Io6FqbrUOFqi7CPsDNBi8CXgMI2ijjO0dYednqmMRq0RRRkIfKJMVzno3lTeF8TFCYm93P/TzLSp3X8TSp/8SVUsYh/3704O3a8ZzJxISX5kTHyI2NMHzg0IE6YO3uaM99+rttPVJiYXOO40EE/0VUW5qi8B4TUfy7tkyepP/8C9tQkxR/9Uazh4Xf8uFIqthy6i+HN08y8dZzDT3ziPVNUymwWe3oz7dOn8fsc0Pux/Z77uHb6JJeOvo5fKOC3I8zCNaJ7jnD3E59ACYkJAoTno3JZthTzXD72BiObt1AYG8fP5an7GUy798UXQrD97vu48NrLHP+bp9j78Ifh7Dnap04z/OOfW/c8lImx0EzGAZ8eKw7c1x/h6VZz3Qhqk+uwEIQEEloCsp6djET5+tfJfeIT3WbeRLWouBLChDDEwqJoWQzbFk+XKgzbFi9V6jyQ86mZMiudOo/W2H1peCEEKmfjDOWI5wSxiBDK4pqZ727zRrXBgayXKAcB6SpMOjTUGvGIMVzLX2LJ30m2rtBWBjFxMF0Hkol6IiVCK9skcCWLfgkrlITSZdEK2AIDvFG3Nc0wiSTariJWca+3p287e2QKqz5D1IwIpYsHaGXIPbwJ+afpKPgUo8qDgSm8axHEbXScKAIlimPD8/zQxQYwaMb6Y7MXueANM2w8pEjdP2QOKVwg4Psvljk2rVf5YHRe9ME/854k40jioIEIDUZGDAeaXWHIVUjH2cfdh4bEtFMjKIMhYweEnks1UDgKgjih3ZwjEUHyHhgVYWLFkhgmSHzYbwvvb4Lyh8EfQgKZ++/Dv+du2mfO0njh29Sf/Rb+vffiHdg/MO77vYCUivzoGPnRMTg46Fl39fRJTr/wLfx8gcLEJPmRsVTyPkhIEzv3sOddJKQOjDGEly5R/9a3ELZN4dPfi71pY8fidwrZoWH2PfKRd/24q+EdPETj5Zc2JKjhqc0MT21GxzGV+Wtc+YPfJ961gz0PP4azjnhiYucuZk++yaXjb3R7sqTnEq+sDGwnhGDHvQ9w7ewpjv71l8mdOc/E2Nrm4g6UjvDyeYLyCmN9x9VBwPLv/wEjf//nEEJgWm2MXktQthRMODbXgoh4R56saxEtLdE68RaZhx5CFQooAaExOFKxEAtGiNHSQknB4ZzPV5fK/J3JYZ5drnEk7/MagpV0gQuMYfVlRu7RzVSuXCUOITETEuTsXsrr2+U6k47NpJuay27KYU/qrrQ/NobF3DXO+k+SDRw2S7pKO5Mq+5KUmUC5AUZ4INKUoDWGjmu9pqH0kR1Lo1Am4hMjIlp+RCEGJToiC0G5+ACvjNzLh0/9n92puTrthLWkIBQ2nUvQnLSBYFWd/PpLdVuFeDre8H4h4OH5FsUgImPlCE1HOAJ7amUOlJu0nY2HAybyeIGlQNvN7vwqAWyKFyiOTnEkqvBW2ms11JfA0BikE1FUgorV3SFGJLL2ibygXXNoiEQxuGelwtzIOL8vf5jibTLU+5ugVkEohbd/H+6+vYQzMzRffY3GCy/gHbkL/8gRpP/u1SyuBykVhbEJCmMTbOEudBxTXVqksjDH3PkzeLkcEzt3s+dDj75nIxwAwvl56t/6FrpaI/vhR3F27fqua15eDWfHdmpf/zpRqYQ1srETs1QK5+ocWw8cpviZz2y8nVRsu+serp09TX4sGdIoPA/daq/ZVgjBpj37ca/MciE7x/lLZxnboO9K6IjM+GZqK8uMpfZfAKbZRNdqmFYLPA/daiI2EBRt8x3+plSlpgQZJYnmFwCI5udRhUK3odcRipUYCiJGi4SgDmQ9jtWabPdcdm920drgGlhJo7VAr1N5B5SliGMJQlPwivzM4Z/t3hdpQ9zfaKoEC7HmqWsr/MSmUeLuuAiBVhaRFKv6hwTCkTjjBlKj7R4dmYEp5qIzor1jqhvX0SiU6ZGEkhLH2YqIAxAClXXSx6YKvnSH25/4Z5z5078m7vee23wf2IPr0UbfrYPlmHKuTt51V8VdvRO2lWSy0RN6eAa+/0oJsJGArzWtdP8PL1yh0BZEzvUvNO9amWe4XaSUDbEtGLY0++06rzFCzoOO299kXmAcgx/EhGEIKRVvHrIIrQClJX9mfx9NEXSVlkncBZuicL1D3zS+owiqAyEEzpYtOFu2EJVKNF97jdLv/R7unj349977rqSmbgVSqUT9t47dznuBuFJJlHmXr5B56EPJiPQNZMrfbRBS4h3YT+v4m+Qe3zii040GzVdeofijP3rDfY5t28Ho1p4sX7puIl5YB3Gthj59hiM//bM887//vwjrdZx1GpuljiiMTVCbu0q0vJx85rXGBMkSF1erWEol1ex1UnwAjxRzTDg2V9uJCrC+sIDM5Qjn5nD37MFJG3rzUlHRgk0mIhY2SghsKfiZzX0NmRI8BMs6iYyCdTXKEEnJMgqEQcnB5ScyhmO1JuUo5mDqZFEK427PVowm1kmktJK3eT5rc7e2ERZYysNJnbOFLfDCGpO6nLh3+yvEcaFLZvmwxHR8jWV7jECKrkIP4MOll8DphBer5sVaklOFR1ALJYr0CCpTmCCDQ7X/yTg3l6ZecBQHKzHnd25HiDmaIqA3P/dmMbit1azjGZ8lW5Lt8EPf21F1JhHBHNvqFWrGImuGufvKGVxnExMiYLxR57COeG0ska/nHUk1VTCONRpcwgckriW7JNYWLqEwTBc1JGO0yHtwSNyeiu87fqSsNTJC/uMfZ+SnfgrpZyh/4QuU//wvCGdmevLIDwCAbrWoPfssy3/4h6hCkeG/9zP4R458QE6r4B48SPvUSUy8ccql8eKLuPv23fTF0IBs2PPQrfUJqvHtF/EOHcIeGiKXL1C+cmngfmMMweIibmWZ8VPHWfzaU1S/9jS0q/Dt3+4SlK5W0a0W0s+sm+KDJDW1L+vxxEg+mTu0sIB38GA3kvKkJNCGCEHTQNZEaGmtOxxACIEnBFXdiaDWP+ZlbXgtkwFi1CqfusgYXq82+POFle5t9SjuRlU67QwVCBq2hV10aBkLA2TVCEp0PseCPYuv8dHZb2ILhRQCQzJaY3HI5mDjOR5efoOvjQ8x5w7Whi3hMpVNIg8pepGWvSmLKjgs3fsYFxw3GWS46nU4Vzi97nPuYKrg4tqDS24tVTFu8z4EQEU2B+53bXh28sq6+9uIwjqvfCxhqmn4/qWIffNXu1TbqZcFRlITLRyZJ6PBkwV8Y5OJIrZUkxA0JE5jtATbatUk5dc/tsPA5rxivKiJ+tqbR3PwYO32IqjveILqQGazZB95mJGf/Vmc7dupfu1pVv7oj2mdOrXhF/S7BSaKaLz6Ksu///uYdsDwT/4U2UceXlep9gHAGh5GDQ0TnD+/7v3R8jLt06fJfOhDb2v/wnUx66T4dKNB+8wZMg88AEBheJTl2cHFafm//TdK/+t/MUXAgYfuwTt8mKBeIywvUL1yCt1IfAV0tYputhIFZip2uB5MHBMvl/AOHyKan8cYk5rKGspGkSfCERFIZ8NUlS9lt2F3oxRfJCWxEARK8ky9l0I1xhCuc47VWHeFcxN2jknfY/toDikknpIp7YDxJFbaL2WL/jRcclvnlE1SoqITUuju3ylE0r8l887AzWrIRVgSx7eSESD0IqhmMyGVppXOfRLrP/fR4QxjueQ7d6awzGyhOUgycm1Ca3byGPfsLrBja4HI78jsBae2ZVh9pdCwRwhUL3LrmF84BkxUIyZCpOTUsEcIZRKlZmSBjBphsXWNsllLKLmwd6GWiWN2ZhoMF/rmrSHI+R6ZvuXke6OQLY06w9Htrb1/awiqA2Hb+EfuYvhnfprMhx6kdfQYy7/7uzRefRUdXF9Z87cNxhhaJ0+x/Pu/T3hlhuIP/zD5j39sQ+nyB+jBu+suas98k/pzzxGmC3YH9W99C//++992zVO6LnqdFF9cq6EKeWRalyyOjrEy26trmCBAl8sUfuzvkrv7bjJH7iI3PkG9XObiK89SWVzA1JLoJ16eR7z2XxCunYQCN7hIi0slZD6PyueRvke8spLWoDTh2b9hLFjGMiFGbdwLl3UUUgokYoBsFoKQa+1k4QuVJBIwkxlOHCDS7eIN+LMW9yKoR3Lb+PniIbbmN+NIn7yUPdW3p8hOJO+H27eq1XI7uZY7TDJSqzcvo6CS1FMo1ydbYQksJZnIe6ghl8fHi+kjBePtJLowEsIw5Pnnn2dxqk4wuQWdn2Nkk4vMDJKNsQ25j0x3z6BhRcQd0pS9us16ZyOVoDDkEWZiOvFRtI61lRGSINMjjoa3cWbEiFWs3Ll9na7dT8ysJFuldzkK5Cqr9FgnlwrT6QXSp6KIe5aWNzz+zeI7sgZ1MxBC4O7ahbtrF+HcHM1XX6P00kt4hw7h33MP6iYNS79TEVyZof5sMigt94lP4my5cyPXvxvg7tuLKhZonz1L9ctfBiDaspW5MMSdnWXv937vjXeiNdSuJdOdhYLp+5O6hudhgmCN8axptRB9opnM0DDx5WVatRpeLoduNpGZDHEUoezkcjU7PsGVZ55haqtExzGmtoD0PczyDOh5lLWJSMrkXK6Tyo0WFrDGRuHCs6jRUeKlJdyhcVraEFavMqqGUdbo4KTdVbjv0c28cXWJgqUGIqhXKw1erzb46U2jRAhiYVh2s0iRiDB8JdaNngCqUdzXK5q8VkPeEEqskFOKy1GO1ZcJjrLpkpG0iKSLLTNJsy6AP0QuWEreouvUegTpsMg4Ysyx+LnNY4w5Fr8TR9ScFlXV6l64TOzfRmlhmcw5jZrcz1VrhWJk41kJEZYPG4QSYKAuetGzAbaMZDi++sCr/s48PAVnjqVqxUHoNLV579YhTtXBO5f4EGoBDSW6hk6rX+FK2MLFHfgMZsTghcze5RVsY6OMJh8kF1VmgwjaINhdr/ASwz1LptucDPW3lqD6YU9OYn/6e4krFZqvv87yf/tvONu34997L/bEjc1Ov5MQLS1R/9ZzxMslMo88grv3xqasH2AthBDYU1PYU1PU772X80ePMn/uPGPNBgubNsG5c+zevRvVv+gbA7U5KJ2D5YtQmQGvCMWtUL2akNW+70NIibDspF/K7RWRdavVjZ4AVCZLPptnZe4qU7m96EYD4ftEYdDtq8uNjROGAdv27mbh6vOY6gJqbAKzfAKTNah4HmQ+6Y3qe36rjxVXKihfwPlvIN0H0O122gulqV+6RH5KEeXC6xJUNp38W7QHCaqlDZ6UXAtCAgOxFMTIZOS41vhKDqj3+lGLdTfKGnh/gJwlKQdul6C6CrfhrTC0HVU6QcYaBQ2eyqKVw727RrHfKqLLfa+GjjFC4tk2YV8oF939k4hv/V/dvydcu3ukmdwS9SuaysFkwOHHtn2MTU6RK+ZpWipgpjGPHJtiZPs4F7MldjqJoGRpS42LVxe6J9tSgvq2PKSdTKFX4tmpi0wHw8xne6+1zNmcH25yeI7u2Itlu81YyyKSHjOFgxx4YiviL/uelxBc2JolGA5pLrf56JUSsVvsznTqoFebUtiZKR7hErQG1cVPXLxMw9fcKOk2rtt83CoDdyYA+K4gqA5UoUDu8cfJPPQQrePHk8bfoSEy9917y+an7zfEtTqNb79AcP48mQcewPu+T7/n/WG3BGOSQr9ywHLX5NffCzQaDS5cuECpVGLLli0cePBBLMsiDENOnjzJa6+9xuHDh/FaCzD7KiyfB8uHkZ2w5UNQ/OGe1DgK4PgXkn+HfgjpuYkUvI+gVkdQ0vfI+5mEoHbvTSOoLEEQdMd0jG3ZxoEde7DjNpE7QlxbwNp0EH15nnh8N6p6EUR+IMWn221Kv/u7jP6Df9D9zOtWC1t1aigRhGFidxTHBM0amUaVei4GuTFB+TIZbjFkKcpRxFcXy3xqrEhLaza5NsthjEagJcQoPAWLYYQj5boRlDGmO5o+PbGBsejeBv6DtlIIZTORmWCq8BhvrtQp+DZhu3cMI6DsNkDkMDpECxjO5lEIIiF56dDPcs/w9tSJafCzOED0fa+rAZpa89rMSZxtRaxxH3siQ2u210ars4ZIaFQfEcqMDWFKULl5jNIgNVqZrtXQSy9+mwWrDkicrOKffmwPnz/3FGPVbPp8kkGR+4b3ERTOoCsBRd+mPeqhdUxTxvhBTK4ZUXKhZWmcCCK3wkzrQvdcQuVf96vnpCawBtM3xGMtjElMN/QGtcibxft6BdNao7VG3oGR4f2Qrkvm/vvx77mH9pkz1J9/HvPss0nj7/73vvH3VqCDgOYrr9A8ehTv0CGGf+ZnkO6dcTB/x6A1NJd7UUV1Lok8pAIdJbOH7EyyuDvZ5HcnA3a299P2wc2Dt3YO1Z3AlStXuHDhAlu2bGHv3r3YfT6Etm1z+PBhLl++zMsvv8y9wbfJ7noEdn4U/KH1d2g5cOTH4K0/hzf+EGErdKuN6jOBWB3VCN8n5/rMLcwn1kf1RpLiC4Juik9IiZcrYBorRNlJTGMJq1jEhGUiMYrjLqAq1QGCMmGEabXR9Ua3HmlabaSf1A+kCDBhiCsl9WaVlpCMt+u0TJhcQGwAKQSHcx4jtsVr1QaRNnwKaMWa3RmXq+0wiZbSCConBV8vVbk7n2GHv3a/naGK/fWpqNNnIwTuBgQl03MZsm3eSBf+nGshV13URyoGDUoILJU4oMcYYmkR2jmEgPvzPkYPkrJAMGJl2T2+c82x1wsEdaC5+NpF2Ab3DR9g2ZS4GiyChHhPnp33j/ONFzpqzT61J6b7Z7PZhDBE4FEpCBxLUh1f4Vm7zZ5m7ztgSxuRGyZuLDCRd7nQrGCcta9TK5cj227h6ZjYxCwOuYyVw+6R1zwHoejYNblxTJUQQ8iR+UV2Rlm+uXnQmqwRxgRoGtchsZvB+3olbjabPPPMM3ieRyaTWfPPvk3z0qTxdz/uvn2EV67QfO01Gs+//xp/14OJY1pvvknj2y9ib9vK8E/8BCr/9seqv2PQGhqLUL2WkFDnp5OF3CTkN8H2R5PfO70jcQRhHYIGhOm/oJHc1lhK/65DswR3/V0Y3n5HT/ny5cvMzMzwwAMP4G/wGRBCsG3bNvKuYOGrf0x0389T3IicOpAqmV/21p9jR6+u6YUyrdbA4Efp+1ixxvEz1JZLyGYDmUlTfHZvQReug2nOEWc3QekMwnFQVkS7HOBM70VdO9ZVsoZhiIiTRUOXV7oEpVtNpFsFZSPiAB2GeFLQbNdxEAyFVUomwqjreyR+3/gQx2tNVsIYN01FtbRms+twot7CEgIjBcaAryTlKGYpiKhGg5L+ShRTjWLylqIURmiTuN11WlUF9Aiqp30AEkKTJH6DAthSv8BolKHUtRHqLcC2DsiqpGF3d8YlNIbTqZZKInDv+6mu/Q99j7aEwlWrLwQF88VL7By/e+BWHWhMSraOtHH7l11HUsy5fHTfOLNvxkT6Oi0fq3hDW5r5YpV6psV0qdmth1lFiRWWyeRdTp++gBjfPPAyGaNRwiUjMnhEaf/WBmKRrmKxR3KH5hdoOHVe3DzJaLNFTm2iLWIi2ftM3m7tqYP3NUFls1kef/xxms0mjUaDRqPBysoKs7OzNBoNpJRrSMv3fTzPu6WoSwiBs3UrztatREtLSePv7/4e7r69+Pfc875q/DXGEJw7lwwNzOco/OAPvH/qaDqG+sIgGdXnwS0ks7tyUzC2NyEj+zrkryxQxaR+cz3MvgaXX7ijBHXp0iVmZ2e599578W7C5WOYCs3JPVRrNYpDQzc+gBCw8wmsb30JXVsBenOQdLOF1fdeSs9DNxsMbdlFef4axUYDa2SEKAwHvB2l50GjDJkd6ChE6BrC84iWa3DPA6j4mW4EdezYMaaHhhBAtLKCPT0NlauYZguRrcLYLuRCiygIcKVksV5hUsfIwKBMhOzUoLSGU38J+79/TTrWEUl7a6BTJak2TLgWlSgmqyRCgGU0rkzsi07WWwSrmon/z8vzeFIy6dqUoxht4MUoR0hIRim+1/EHzWj7EKfWrRKBFPDhxaco2D7nvHuxqzsGtr279hrjUUjGSMad5LmdCRIRg4CBSd39b2HnyImzQvI8jYCGV0Gmxrtd5ecN1uqg3WLPkOTNMCSMHbxuc+vgA0WU+AQK4Pnnn++Ga3U75IQ9y8dq6ejCVA7YSd+axFuKs06NXXEGIZIUp5aDKc+NxQ+DsIzBD0PyfapojUGLHp3EOrlKuF2ael8TFICUkmw2S3bVKG5jDEEQdImr0WhQKpVoNBoEQYDv++tGXdYN0nfW6Cj5T3yC7COP0Dx6lPIXvoA1NUXmvvuwNm16T+tU4dWr1J99FhOG5J74KM62bTd+0DsJrZM03dKZpP5SXwBvqEdGEwcTMrLeoZTj5F1w4RmoLUBu/LZ3d6vkBMDyRdTITmqNxs0fyCtgCtuQc2/Aod7Vtmk1kfSiKuH7mGYLL1+gtlyi0Gggp6eJK6WBQY/CdjCNKmKkQBg75BpX0LlxWDKI3DAQJilCralWqzRdlwygy2WYOw5vfhFRE4jRCIa2IeaPpik+QRw0yMYRJgKpw14NqrUCV9+AHY+DV6D8Z39G/lOfQnoeTkocGkNgDKE2ZKQkpySLQYSUYOs4kbHDGnLqoKU1OSW7qbdvxAU8DI5IrH/cjtRadH6kxzWgUhLp1LYEhn0rz/NYq44cyfPyteQxlomwDNj9K2n6mA34L2kVTrt0T506lT6kz/3hOmtErqBwnMFm3Oeff777+xAOB6y7gTMD20gh2JO1OaFmuFvupNlsckA8xFHxItpotBQD9bB+xEuzAARCYwRsKnjMaajmIlRzicXCZhCwWLSJlE2zlUSMbRHixYZZudx9bkoFmDRCfeDq/LrHu5N43xPURhBC4LourusyvCrCiaJoIOpaWlri8uXLNJtNLMtal7hcd1BumTT+PkLm/vtpnTxJ9a+fQngumfvuw9m9+7aG9t0qouVlGmk/Tvbhh3H3739Xjz+AsJWQ0dJZKJ1N6kOje2D3xxNSst7F5l9lwfQDSRR18Adua1cXL17k2rVrt0ZOACsXsac/TmPpFggK0GP3oOaehvgnkucBiNJx1NmXYdc+cDJI30e3Wjh+hmDmcldmHi3OdUUSAMKRUDNYboZAW4jaZURhiqWLZYYzRQQhaE2z2SSOY9qtVkJQi5dBfxu2fxj75d+CwsfALSBMqyuSsKMmmSgGEaOIeu9vfTH52SyBVyCcmUnOr4+gIEnVuTIxKi1YisutIImg0F2Cuh4ySiJF4jIB4KKRQqDSGtSBkf1krAwzfe4TcZoORPRIC5MknWwp6PdkFZDOlOqdc+GuzwK9Cb7rYp27biZacHyLsfEr0E7S8bpV6wreFqfbBKUCm9N0mli1R0dJ2jLqRmZOSyAtC506+AU36POUcZOajBmxdM9svV8EImBFL9Oykojr7quvMBVt7o4SuZAvM76SQWtBn2EEAkFIQD5e2+R7u2Y+37EEdT1YlkU+nye/qiZjjKHVanWJq16vs7CwQKPRII7jdYnL9338I0eSjv0LF2i++mrSqHnPPbiHDr2jbgy60UiGBp4+jX/ffeQ/9ak7NjTwltAoJVHS0pkkYipuhdHdsOMjG4sC3i1svg9e+C1oVd62YKJDTvfcc8+tkVNzBeIAf3Qrjcuv3dIxRXEKvViEuaPJc6hew6q+hTjwJFw7CtseThwnwgDH82g3G+h6A5HJEIcBVt+8MWlpDDbKsglDG9FaIvT3cHnpDJw4wTY0hG1qUYSUklarnYQHCyfg8BOYbY+h+c+IwhS4eYRuYcIQT0qssIGPwkQtlAkRVvL5M/UFoquz2PuXMfktifAiSBYou69eUY10V21XSIcDZYTGEhpfWdRFQiHRBiuZJyVKCFqpUqKFJC8ET+4f52IUko/W1l0jY1KbIvjBTcNwWnXdHwS91NdEkAxQkqus7/buuJevXprfMBASwGqziJu2VRvZzfHJz8KlpwEI5s9BLpGgaz9D0xnBpMKCllXEWsU5YWaekWlJnXjN6n/s2LEbHv6q3UbvLcHx6xjJptFh7JfQURFRzROiMUDdGScOqr2RV5huvUmsc828oqprb7wF/K0kqI0ghEgIx/cZHR2czBuG4UC6cG5ujkajQavVwnXdHmk9+ihOvU7j1CnqL774jjT+miBIhga+/jru/v0M//RPv7uCDR1D+XJKSmchDpIoacuHYGj7uxsl3Qi2D5NH4MqLsOcTt/zwuef/mHD2NPfv3IV9ZiYRMgiZ/BveAZPrj90AYOUSDG3D9TzCMCSKohumkDsQrkuU2Q2Xvw0Th+HNL9KWu/F2PwnnvgJbH0IIgfR8bCEJGg3iRqLii8IA5fT1yCiN1hbKsWlECmEp4tw4GddDC1isNMjPz1LLDjM0NES7VEIVhzCLpzBeEdNuExbuR2x5MCWoJjoIkrRc3MYzNkbHyLiX4jMrV2ldKWHVFjHFJA4yaT2mI44oWopyFOPLQYLKiRhbJCm+jJDclfd5bqVGePkK1tQke4p5zjaSVKevJEok6T6ANpJhAaM5l0uV9b0StYFdvoPfltw3WeBizqFeiehRFOAN8X2lv0EGY2tSeZ2oa6MchUj/W++e66FarXLhwgXKcoOadjeQSc50Nn83dtZF0rO7CjMlKnYLRaKqux6iaAMF3Q241PTNpY/sNjb57kMWCpLCYmc3hrbfJmi3ARdhevZPne3r9u0Jt941ghJCHAR+GRgDnjLG/Kd369g3A9u2KRaLFIuDhXmdpkY6xFUul5PfCwWM62Jfvox6+WXy09OMHDlCfsuWWxZpdGC0pnXiRKLM2zTF0N/9u6ibKbzfCQR1zNIZzMJpzPIFtDeEHt5FvPN70P4Y2phE9l+poXUyo6fTBtDJfQ8NDa2pFb4r2PIgvPz/g+2PgX3zEZBeuUL97PNsefLnsR07cf3WcfozhNNfgZFdGws6Vi7C0HaklPi+T7PZXBO1bwTpeQQmD1YbXvs9THaCSISIsR1wyUmafUd3I3wPGUWYOCYKA05fuEDQWqXikxHGWCjLph0qkIowP4mby3PgsY8y/+J/4cLrz3PVHeXAfQ8yMzuL9P3kcbFMjGszE1DYnNQVTYgJ2thS8Jks1IUPUYylW4j04sSUrxKrcUx1Ed3uEFRyue9JybTngEmcIPw0ghppzoPx2VxoM9Oq4SmJLyQfGc7z3EqNqFRCDQ/zqdECm1ybby5XuxFUU2uUSNqCOmPw+pViH9EOs+nvsTFMORYEAlt0VH8GLToKPAFeASGqDMUr0C+cU3aXZjaqNydZsXXuE2t+GUC5XGZxcZHg6tK696/ej4lDNtv7+NCu+zjzclKTWsjupxoIhjyI202kMCANBe/tZ1bW8JWAMLP+OfYb5DZEzLLXINsu8+BVi/qITWTXoN1bA6rO7dWGb4ughBC/A/wAMG+Muavv9k8D/47krf/Pxpj/3RhzAvhHInEr/L+A9xVBbYSbEWnUy2XKJ05w9q/+irbnYSYmyE5Nkc1m16QL15PGa61pnT9P7bnnwHHxPv4x1NgYDa3R5fIaMlj973r3b3hfHGO1S7i1y7i1K1hBmYY7QSu7hXb2boiyiEWBLM0h5QJSyoF/QoiBv7XWXLx4EaUUo6OjjI6OUiwW73gP27rwhxIiufoabHvkph/WPPEVmhP34U3ftf4GldlEKbj90bX3GZNEUNsfAyCTydBoNG6aoITrJVN1t30Yzj2N2fo40vtfSW1x8/1J4+/o7sSNvNnEUYp5AaXZWUytMkBQUkaEWqGEIJBZxOgutJul+LGPJcM0C6MM33cvV0/Pc/XoK9RjgVE20lPErQhUC+l7nZ0hvAKinaZm2g208EBr7OYSxepZ0Acw5TliNQb1haThmF4EZUvBT20a5U+ulSiHEV66qE2d+p9kN/0AvgJHaDypyPR/PozB6BhPSnb4Dt9cBj+d+dSMNTmhKZP0LSXbr//ajji9Zc3qEkkaP4k0pUfCA8qEDMRKTnbDACO4eJHmG0eTx95Eiu96aT/flkxkXYLmhpsQzJ+jVBW0hg90bzv0+gXM/fth8wTGGPKLEdUbiF33TOQ5Wroz4q5+gjICanZI3RIU2wGiVAIrUfPFaZEquM2v/+1GUP8F+PckhAOAEEIB/wH4FHAFeFEI8UVjzJtCiM8C/xj43ds87nuO1SKNLTt2YOKY9unT1F55hdbJk5i9e4l8n1KpxJUrV2g0GiiVjLDuEEVUrRJcuoyIQtxt27HHRpGzs8hr165LCOvdZ1nW9YnExFjVK6jyZdTK+cS2ZtcexNgnkMPbkZZ9WypFYwy1Wo3FxUXOnj1Lq9VieHiYsbExRkZGbrtv7brY+ggc/eMkDbnBgL4BlK/QXJrBP/ATG2+z5aFkn1sfWrvP5nJCUn6SrukQ1M1Ceqlh7Pg+GN2DXllBdKYpTxyCc09Dq4xSTcTR36fYMJyKMmwdH+fMudMDKT5BhI4VykAsLbjnJwjfOo6dSXuWlE/YrlGcmGTCFlTOnCe0bHxXEtdDhNXuHRvAH8K00yvooIYRHkbH5EyV3cFbUP8QBgctc5jGMjp18yZNKQWXL+Ns3YotBWLuONPhEox/Fk+HZMM6tgBbGHb4NmPZpG64N+PxRhxDnERKbkpcSYpP0NKGnGWnBJUcrmAPvidjluIfbZ1IUoqXk9sSKXpf86sx3ejHNeukCO1Md/+r0T57luDCBYRJCapDQB059zqk1Z9mW/3dyjjqugTVwZUrvRSfig2mWgUm2FT0uFQHmYSVG8KxBJYUrJ8QZU00GAu9hqQ7txgBl/wa2YZPnPr2GUDGEV55CT0eEgs4ra7SFiF6IynkTeK2CMoY8w0hxI5VNz8EnDHGnAMQQvx34IeAN40xXwS+KIT4C+AP1tunEOKXgF8C2PZey6hvEUIpvAMHcPfvJ7x8meZrrxGdeIvJI3fh3XUXwvNop+kQajUaL75EfG2O7Ec+gn/40DujzGuVe7Wk8uWkMXZ0D+z5KGRG7qilkBCiK07ZuXMn7XabpaUl5ufnOXXqFLlcrhtd3fFUYH4SMqOJbHrT3Tfe/sI3mfd2s3nsOimI/GTyGs2fgKlVUdbKRRja1n39MpkMpVLppk9XeF5v5IaUmGazF8VYTiKhP/YF7JVX0RMHoX4C1B527dzBG9/8G/oXXSlCTCSQRqPT1TVqt7E7pKNcmuUlcqObcKRBGk1bG6QtCGstpNNEej3RhciNIoJ0tlG7nohPqhpfanw7hPPfIHY3gWiDlcMsJy4IJgwxYUj5f/0po7/0f8MRgmqrTs7UIQ7xheH7i4o3qgYbgystRtNo54cnh9lSXuAvL0ia7RXchx4CEvskJQTNWONP3wv1Bl76PdmT8fjocJ5vLCfR3g8MF8inda4OW1hCdJtMx3TSg4WBDw/leHE2IlkC+0jMyeJKyT/ZunFvoaqFMGxonz+PXlnBv//+JFpa9VW6dOkSly5donWtRd6/+VqMMYZYg9Exq5fowPa73oRTRQ9mwa8ZzA2iqF6XbkQwH3D/9mFOnlpYd9OaHXIhcxnSpuGWDFhWemCbxHg3ecKhFCzLOPFEFNAeq2IWO9u/hwS1AabpXr8ASRT1sBDiSeBHSKwKv7TRg40xvw38NsCDDz54Z9qR32UIIXC2bcPZtm1N46938BDtU6dovXUC/557yHzi44g7qQTUGqqzPdVdu5Yo7qaOJC4Gt1CjuV24rsvmzZvZvHkzcRyzvLzM0tISr7/++juTCtz2MJx5Knmu1yPelUtE1QWWnCMc6HNuWBdbHoLzf5OIJfr3uXwx8dxLkclkBq50b4TVU3V1e1UUs+VBiEPi3T+CMZKo8Q1Gs4dRQuK5LsvLy12hjzABcSSQBnR6jmHQxi8kq5axfIJmhWw2i4tGxDGBiZAZj6hUwc4WEV5fnW36PqzwTzBRhAkakJlKa3MGbBeWzhKrw8AldGEXYvGt5DhhSFyrgTHo+fM4mc1EcYhPG6JWMqrCtDik2lwQVVRfVGqMQYYhKmjTfOMoXi6PXqohVYi0srxQrnEw64PlMGQrePo34NBneXDiELsyLv/9XI1NzTNwoZmoS1NYomPQM7hUrhY5dP66dmWWNq+x/ci967xrqXjCGIQxmGYT0xchdRert3vRl+6gHcScrzpQXEtQyXZvf1kUcZu4EeMU5BoZez90n6NFSETbCynYU93bMmoEg6ZCOdl+8Cj9J/u2zxXeRZGEMebrwNffreO9X9Bp/M08/Aito29Q+dKXcHZsTyYA36koImwlRfWlM8lPN5dESfs+DfnNyTzu9xhKKcbGxhgbG9swFTgyMoJlWQO5++v9LqVkfHy8R27DOxP1XSow2BAXvsly8RAjcvzGxDi6G85+LYmYhnd0Dp7Un3Y92d3M930ajcaaERobIlX7lRYWKJXLTLfbvQgKktThge9HvvEG81euEAufnKoThwHFfI7FxcWeEtUE6EBgaU2cHjtqtXoRlOWh23Ucx8GxJCKOiMIWcnSU6Nwi1vj4YAQ1tA2hHMz5b0IUILJDqXhCw9Q9UJkhXki217kdiDPfBLkTE4boeh1hmvD6H+B8+P+BNBG+aUOURovtGptUTEGEWH3OA8QxFqCMQdg24Ztv8rnFJcLyHPX7P5w8NBXjjNjp4+oLKCEYd2z++Sf2wnP/MckY9BGULUSXMG6GNubnqzSaJzcgqO4rtGZxN32pw9XI2lmKbnHgc2FJG6dpMEuzsGtQUbyee/tGGMk5LNYGBx/qeqMrq18NqQNkGlGuHdyxMUInIK8K6HSgoRQWer0U6R3GO0FQM0C/P8iW9Lbvaqhcluyjj5J9dJ2C+63CmMHepNo1KG5LFtNdT9zYIug9xkapwFKphNZ6cDz6dX6vVCpordm0aVPnRtj6cNK4uxFBLV+EVoX53BFGRkbW32bwZGHrh+Dyiz2Caiwl00/7esBs20YpRbvdXtNL1W63mZ+fZ3p6ukuIQgjals35Y8fQSjHheUh3nejWdbmysMB0dpJ2XCYKA4byeRYXF9m7d29SZ4xbaCORUdw1Vg2DNnbHNFh56HYJ13FwXAfCkNCOU5eJZESLs6MXDSIEUWYPzL6B3vxR5KIGE2N0jBjbC3s+gf7C/0TmcxjhgTZYGTshqFoNqauYVgtbAI06Vu0qRGm02K6AkDyQ286o31uYTRwjjekSlMxkGN0zBMbQTInpWhDxM5tHmezU39ZrvIHEOT5tJBZCYIRgWiiyGzhWdPGR/43a//wfSCCcm2flj/6I8X/+z/pel/RHGkGtC3dtKu/Q6KE1t23NHMJvzEN7pXubeRvO3znXYrE2GKe0Tl/An1xfCO/LIvdO7L+lY9hOi0l/L1pYXYK6WbwfrY5eBPYKIXaSENNPAD/1DhznuwtxBOVLsJRGSjpKoqStDydedNeZ0/N+R38q8FZQKpU4c+YMU1NTPfKaOJik5CpXobCqGdEYuPAMetujLJ8rs2fvvps70ORdcP4bUF+C7GhCcuv4/3WEEqsJan5+nnPnzlEqlTh06BC2bRNFEaeDNjsnJijHMUuzs0yOr62HVbUmbLfJZ6cIy2eIgpBMNot2HMrlMsPFIiJqId1hTL2OUMngwqjdxkoJylg+ut7Atm3c8hlUu0zsZRBOEWs8Qzgzg3fw4MBxdW47+q5Po+fnk4GLUmKiEGEno8Z1o4EaGkrqTloh+wnK1CCMcYgRjRry2uUkglI2BDUQil2ZyZ4z+tO/gTnysyhjsFKCMmGIKhaIK9Vu5PR3JobY5Palw1cTVOczMPvKwM0GwbBQrC79by9s52JrJvnsGJJ2gs74kWplzXsRziZCdoFYs/IaYxjxR2Fs3+p8V3J/GNJq9ZkDG91N1TW+/SL29GaMkwoR7kRhY6N9CIESg4qKe7YO8dqVXkOt3QiSFGYyawTPa6wbHUokefXO+oDeVu5HCPHfgOeA/UKIK0KIXzTGRMA/A/4KOAH8kTHm+PX28wE2QLsGV1+HY/8DvvX/hgvfTMZNHP478Og/hf2fhrE939HkdDsYHh5GCDEoTpAqUfJdfn7tA5YvQFCn4m/F8zzcmx1LouzE7eHKt5O/Vy4kDcurkMlkkrEIq1Aul9m3bx+ZTIaXX36ZWq3GW2+9RT6TYVOxyNjYGEv9Kr4+XFlaYsqykKqIFZaI2i0s22HLli0cP36csyePEkkb4fqYWg3lukRhQNhuY3fcJmwPEzZwHAfr2itko0WioA52Bmt8HBNGA3OogC5JmChOxs8oO0klpz1hutFAFYvJNrFA+la3BqXsdFyHiXB0hGjUufrmy7RFJpn51WmEhu5qvHj+JHGlxAONSvfYwvMQjasIHZFXis3e6lrtBikqPdig+sRIgcFvSPK4zkLtZS2Gp3rpdiEEV86f4dLS3MCjVhYWebXZ6DvvweNP56b58QM/vvZ0qlWar77KxYsXu7e5F88SXb2a/mXQjQZmo7n3dwCmT+Rgoojma6/RspNMi2cNEpZba0F78BUzYh2ZoBDkrOv3OZnbTAPerorvJze4/UtcRwjxATZAZyJrJ3XXKCWF+LF9ST3JeQ+aYN/HEEKwdetWLl++POgMsukeuPitRAqeysA70RM7PkJpeeXm0nv92Hw/fPu3k5lPK5dhz6fWbNKpQ/XDGEO5XGbPnj1s2rSJfD7PK6+8QjabZdfYOCYIGNuyheO1GriDC3ClUqEVx2zVGhPYSMuivXwV5bhs2rSJkZERLr35ItdKNbLeFuJKFct1CVsttI5RHVm/lUkISoForZCXbaphA5yEoIA1M8SE7aQEFSIsC6HsbpRhggCMRuVyyej6WKB8m7AVYaI6bsagwxgHja+jxBll/iLB5ChuVB4kqLQ21apWMUGdg40lxNRY4uvn+6jFbzBR2pa8/h3oGyx6qwhqINKqXGU1hBAIv/fditotZubnaNcGo6i2MYTGpFZHffXQdvu6PU8mXnu+stnEmDasI5Cqu5MYubjm9rHMGBWxtml8OGOzffT6Y1CCfIu2BblGer5BQCzXF2dZwqOpLBxWALhS7L32EotbSdzFce2mt10P7331/LsdUQALp+CtL8Fz/x7e/NMkX7/rSXjsl5NoaerIB+S0ASYmJmg0GlSrfZ5flpuQ1OUXe7eVziWL4fhBlpaWbp2g3ByMH4BTX06iiHV8/9brheqMhemk/aampnjggQc4cuQIlu9hWi0cxyFjDOVgML9/8eJFtu7cCe12coVdnCacP5s06RqDW73M9uYxaiKHdF10tYLlerRqNWynZ35spANxgN1eBiHJiCYmahFJr0tQwveJ45gzZxLHAmEnI+mJoiSCshyMsEEqdDr5txdlgXRUkuKrriAzDlrbFIRm2CRkISqLxMojLpeov3Gu11cWJq+XDlqMmtfx2i909ys9D6M1D+U9nhzpq+10BBcLbyVzwbpII5qLzw2+B6+91p2HtRFWDv5Mb/uXXia4eGnDbUVhGsYOdA/XfP317n3rEVU0v47rt+g7XwAD/lyZoZnLLDubuZZfa7GVs3N4cm2NK+ta5NwbxBqiZ0N0I7irJzv2YfzsSabaoxvevxpBtHLT266HDwjqvUBzBa68DK//ITz3/4GZlyE7Dvf+NDz8D2HPJ5OC/M00nH6XQ0rJli1buHz58uAdWx6E+ePJoENjkvTo9sdohyHtdpvCjeTl62HLh5KLiXXSe7A+QZXL5TX2WdlsFsdxEK6HTnuhhoSg1Ow9tlKpUKlU2Dw9nUQzOobh7cRLF1ESOPoncO5prN1PMFe8H+O4xNUqlufRqlWx+tKFkZQgHWT5MozswhdNHFqEKGShgLNzJ9LzWFxc5MqVK4kS0emQT4egLIxIbY6CAOE4CCeJsnRoUF5CUKa6hByawAQRkxbcY9LZSvUltHDQ7YCoXO1FNUEdgyGulBGECBP1Unx+BozmQMZlm98X4cWdXsL5NWS0HnS9CdHGUVctux0hJOW/+Avier37HDXw9NNPr9l+NL+JyeJgj+b1Iqh4ZWXNbf2OdZ2H2tUWdrNFuLI2yutASYFn3+KyvbZFaxDphYxTWUFENxZByPD6rukDh77NNewDgnqnETahdB4uvQBvfhFe+G145b8mruCb7oFH/xnc+5OJUixzi1f1HwCATZs2USqVBus/bj5Jjc6+kkRPcQATBymVSgwPD7+9vqvceNIPNbZ33bs9zyMIAuK+lE65XGZoAz9F6fV6oYa0plStJu4iUcSbb77J3r17UUohfR+ZySCGt6Kql8hf/FIS0T34C8jJg7ieR1vJRE3n+bTqVSzH4Wpa4wiNAeUmNbihbQjLx48qtLSFEILiD3wGYVlcu3YtaRKN44EaFMpCWE6PoMIQYdsI20bX6xijkLZE12oQNpDDk+gwhjhM/ikbFVaTgXZGJnWJDkGFDXS5TOv4UbrLqJSYIEhk99r0BAVP/0ZSB4v6Fsib6jkS6xJIJ8JcGH8U3WgQnDufzMhKYYD2mTOEaQTU2YMlLJQYjFg6abzVx+mQkzaGmZNvdm9vtBsEaQ/VfHWZWn1j12/dlx3YVPRw1J25cB3ODKb4cnNX8FZu4BP4LuO7ys38HYUxiYS2OpfUkTr/olYytC83mSi/tj4MuYk76uDw3Q7btpmammJmZoY9e/b07tj6MLz2B8livuNxEIKlpaU1Tva3hEOf3fCuftPYXOpuv7KysqEjivA84qUljDE4YYiTyVCpVJiZmWF4eJiJdLqu9D1MrLGGtoIOMROHk5pk+hnyfZ+wVsOFhKBqNdqx5uTJk0xOThLGGpQHlRnY/mGMO4zbOEe7rxmz1WpRrVZxHIcoihC2Q7vZ5MLcNfbv3w/KxZCqAoMA6TgI2yYqlbCyQ0CAbjRwCg4iO4SJDSYKMFEIVgbCFSIUxkhEHA5EUImVa9ydEGiCAKFkQpI6kbjTXE62b1fg4jf7XsS+C40NJ8JKblQ3Of7ff59DhSHoLNpCgDHEpRLtt94amFrdJaH+48UxxpieUwxJraedDjTs+F/2Ng+x04GLxhgq1cqG4ULrxAm8gweRXZ/HvueiDSLeOH0p4hjTuo6fUqyTVO4qWO2QYde9XSOI28YHBPV2oHUyqK0z2rzzT6h0muxEcqW9++NJkf4DMnrHsWXLFl566SW2b9/e8/zLjiXWTu0yjO9Ha83y8jJ7964fAd0JdIQSuVyOVquF1ppMZv0CtnBcTCspWAvLZnxiglOnTiGE4P77e4Vp4fkIY3BzeS6OfZLilocGPlOe59EWAhewfY96rULLdjHS0Gw2iTBIy0/EBbkJhDsC5iytuLciLiwsMDY2RqVSSfzjLIu3Ll2itFxijxAoO61BMZji09UacqKISPtjrIydmM3aHqZRhTggzuwgKh9HKR9jwJiod/5hA5RMUphpXca0W0mEphQmCKh9/evkPp2mSVuVRO4/fT/MvHJjwcT8iRt+/wSCMI6ot5uQS1OJQhCRnFJcXRXdGLNWZq41c3NznD9/vnvbeqm9/qPeDNbvZurBOj+PXK7B9MPr3p87/TrBVQem11/q1Xw5McAd3dXbZ7MOzs2f47r7VSFtk8NRt5ek+4CgboQ4TEaZV68lOe/ateRvJ594teUm06hoMrlS/wDvCTzPY2RkhNnZWbZv76sR7fuepIdMCCrlMr7v37y8/G2gvw7VqT9t5CzRSfGZVgvpuYyNjXH58mUeeOABVF8aR2Z8MAYnkwEhB6bpQkKKVaAAWH6G9vw1mr7Ey+RpNBqEWmMrN/l8OlmkN5o0wPYRVBAEXXKNoohq0CYKAlbmrxEYQ8b20KlY24RhQlDpeYj8MMIkz1n6CpwcOD66WYc4RmenmWnk2OKOYbRMvlOdKCStEQoTgbKQw2OYVj3Zd/oaRKWl3gTfdiUZhdLpoQrrhPPzWCMjfdMuRG//p78CyMHmooM/CCf+LPnd9AbugehGZC2pmJeKKSBuJxHGKu8IABrtNgaDjuK1E237lX6sgkiWfxknaT4ThSkprNrFqjrVALRGlhvrOk9oY1g8f4YwatMIDFnXo91aZz5UbJIL7j7YzQZJNvfty94z2SqV1tT1PGxvCh8QVD/CZhIJ9afpWivgj6SR0WQSGeUmEqXYB3hfYevWrRw9epStW7f2akx9rhpvS713i8hkMiwvJ+molZWVNQKJfggvEUkkqjiffD7Phz/84TVDD2UagVmZRMnZP00XEnJe6pijZjNoHdOOIrZPTlKv1wm0xrU8yCZpKuWPog20gt6CFYYhvu9jWRZRFBEg8KVExDGtKCbjZjAkwgsTBN0a1GwYst0vIOIVkALlSXBzSV9Wsw46RLgecbyEjiOMBhVcgsUzsPdTEDUx0gZCtBZYk5tp15oYy2PxykWyJq1BBfXkvWxXk7T58A649DwmaFD++tMUPvwRnM5C/fj/Hb7xb5Lf036lOI4xqEQZ62R6BAXMnDiOT8JrHcNm3XdRYYzh5ZdfppSOEzGiZ0dUbTUSEtHxmvrTjRpuhYCpnE1cAtaRot8I+jru+QulBmG+p3B0LMnHd97PwsWbsE+/VdymY/n18N1JUJ16UW1+ME0XtZIvcX6qVy/Kjn2gpvsOQT6fJ5vNMjc317M/6kOpVHpH03uQENRs6jhQLpfXPY8OOoaxptlzE19vIq9/331AIv0WQg6M2oAkgupMnLUzWZphRGEsTy6XY3l5ORmn7o7DeGJxY7lDLOYfIaz0BAGdacAdgooFqDjGMppWHGHu+hzxXFJA12mKD9vmShhSX67yiNVA2DmkHYGTQ3YIKg7BdjFxhI5iau2QZtwm367AK7+bRELKR5owuZBXNrJ6jkZ2Hxdeeo67AUFEUFnE2EO4zVKyz6Ht8MDfp/bc7/H6m8s8/uiHk8jqgb+/qnHdAIal2hIit4ctTppu/dAvUnl1hoy8AKVEAdoOw3UXW6M1lUqFILVKik1MFAUDqUMdRWsJSseEUYRtWTdnD7HOJr0UX180Fm6stOuINYIo7jYCm/S8XcvBVn1uFlG41rIp/dNaNXNEhgE6nUG2+hUyow7UV92GQAv1QQR1Q3TqRbW5vjTdXBLK5yaTNN0H9aK/Ndi6deta+yMSEcDblpffAjppsiAIaLfbXbHEeuhGUO32oJv4KvQ30d71sU/1HCJSeJ5HO47BsrBcl1YYMjU8QjabZWZmBmIN/mbYfG/yAGPIT+7i/NIScRxx6rlvEmYLWJaFUoo4jtGuC40GyhjaYYgsjmF0j6CqxmALgSVAe1nidh3/ng+j4leSFJ+XobayRK1eo+gm/Uw6joji1F2gNp9ERtkxjOWnM60MtUDjNk7T1Dnk6GR6vjG1axdpjR5hc/N8QkBSJk3D7dSITutE4ZcdG3zxjElEFgLqVrI/rWPOvnkG/N1U/Cyd4QuxjhPVIrCorL7U1+Aifql2kVyphRdFyWqdHl+vSpW1mg2W6hV2D4+zQp/reRSta9RqWiHgIoUgxgxwWvutt3APJIMLr1fbar722prbolijr5aJcoMpyHj2AktqiELf98S1JC3Aty0gIULVbFC8co7S3g0Ge66DmeJ9iIX2jTe8Af52EVSnXtSfpqsvJF+YXBoZbX3og3rR32L02x/1q/VuS15+C3AcByEECwsLFAqF6x4v6SNK1G/9buLXQ350bM1ttm2jXBedyeBYNs0gYnRsrFsPs+MIW/b2b2LN0PgEwcWLzF+6xPLVGeQWB9u2exGU5yGqVZTWtMIQ4brd0e7tZpO3VlZ4SGssIbGzOXSoyN5/Nzz/zSTF52UI6lXiNIJCJ/L12IjE0DZKU03NZbCKhMpQHpugvrTEDqNpBQHCJBOhla5gWh6hNwHVk72LSDuDNGk9K2ont3eip7t+NLEIi9pI0wDTE6qErRYLF88zvnM3/cZ5QgiCPpFD9/Va9ff4uEIVIsKZXrrspddfZ0fqZxhemUG4DjI9T0/0vM+XrlyChWtrwhBlDGEcM5l3yG7Kc/RKGa6ewXg9VapeLdYApJCIfvO/9VwrBBDGBK0GHalgGEWEYQuzynWjQ1D96EZZHQI2MUJrzLswJeE7l6Buql50KPn5Qb3ouwYb2R+tJqx3EplMhqtXrzK+jvlrP4SUiRKuUrluBHUz8AsFvM/+IDoMCOKYkdHRbsquHoZ9o88BHVMcGSM++RYzZ04CELSDwRQfoGwbFbRoRQlBBfU69ZVlgmaT5ZUSrWYTf2oSK5MhrntJA7rWYHlIN0NcWkDrEGMnEVTrrbfIBDFaOckFY3ouRvm0bIFEYZsokU6rOCEoQJom6BgtnaS/rTOOXtlIKRAmZOHSaab77IoY6g1U6IkIRPdnEEVoHQ84THQi7uYqE9raKvGDsgRKGAYSbcZ0U7vhbDK8IUoFEP0mtY1Ked10nzIGQTL51u9OCjY4p96E7OD6FXVISAjyTp62TM7k8ptHyUchDhDXE3Pegm+h0xTf8tUrhG0fpqdZqleSWlzf+XeO2fnZebU8Jzmf7Hzy/OxmA9HQNEdWGcXeEZfbQbz/CWrdetF8cgU2UC96KHFj+KBe9F2PiYkJzp07R7VaJZ/Pvyvy8n50CGqgJ2sDSNcjXlnB2TF0W8f0fZ9WEFBZWSbnOjh+QnjZbJa6SecipTBaY3semUyWlcVFRoaKLAftLkG1Wi3CMCSbzyEjTTtIVHsrpSUWj76GVSlTLZc5f/wohfvuS1KC7SxUrxJIF0cI8LNE7QZGa4xlg9G0Ll8mzLbQCGLLR6ULp1E+LjFtJMqEaS0nTiODVIww9ZGEaDpCCQAhqLY1mDazb36b6Ud6Uun+/qi5KAJlCGU2vUtwqVRmofQVpqYeBCAQkpVmg4ZUa8YbnimXsfqd9gcW4iTHZ/TgePdku+THzPIiVmaDjE2npSr9XxRrpBA8MJ3l5VkGZdrptou1Mn6rhSKpUXWrVEFAGMc4AkwYrx0DbyBorBBFk2tOw1tZItIh1mrZvtYMZ2zqgG5VibvtAGvRDKrkLlVgz/UvzG4F72+CapTg2X/3Qb3oA9wS+u2PDh06RPldkJf3w/d9pJTku42VG0O4LnG5fNsRlOd5NJtN5hcX2bR5MzK9UMtkMiglB9cqrUFKhicmUAIsYYhagyKJKIpwikUsDEGUOEdUWw1WZmcZqVbxc3lmzp1l/2QiAomsDFSvcmF2gR1BgPRz6HY9UTGnLhc6ioi1AhSxM4SSBsI6CAtBSDFfRDYXuLaySDTcBBMTiRxt/1HOVl107Rq7796djP9IsVBpMiWPk23m0dYhqNfTQaB9AgYMcxNPMHbwAQDChQUwhnar0hUQtKRkwXIIpGSoz+6n0W4hMv7ahbJvCKKBpJ62CqV6YjYbxhH+qrVKrOOGDrDSqDNuDLOvvcqUpcn2Hdn0kYdZ53jRwgJ41zeN7d+PCMOewF5rgrCFbA6qHZwrC4hiMlstajeQcYyyNj7GnY6h3t8E5WThQ7/YHQI2NzdHaakES3PA3PUf+wG+q9Hp6n/zzTeJogjXdTlx4sS7cuw4jhkaGuJU6iJwPeg9u5NhfUEbcZPnNzIywuTk4FWw7/tcvHgRz/N54LHeRNmO719/KsvEMUIptuzdT7vdpjl7CSlihBBdggrDELtYTHp1lCIUgplWm6haxaqs4E1vTZRsUYhlO0TKR5dnCHAIwxDHz2CCBsaIxAvQGHQcEwsFwuakfYRdXgm/epFXzpwlayKQNrF0UICJOzUoAUJQWimjpYBtn4UtDyXPw5jEkdtAM4p566VXyT81w5Zf/uWeUW66ZErXZXgqiWIW/vCP0HGAVLmBhb4bifSRSaXVwDRcBi4f1u1Juv7SPBS0Keksuh0gozCt5yji5dKabeNSibijsCwME8UxUkqia9c23L/uWi2xYYSz+tRlu7XmtGW1zBoMiD96Oxd6cMKWZ0sI4E6m+t7fBGW5AxMqS6US+/btG2hi/AAfYCN0BsTFcYzruutKuN8JdOTGNzP6PS6X0a02amQYuaoBd93t45hTp06tS1CtVosdO3YM3J7P58l43uAiow1IhefYVKpVEKJb0FdKdSMoO+3h8jMZ3jx5kqYBpTWVWhU7kyGoxegwxPF8YuWjKwvEyieKIrxMDh02MQhCkhqLNoYYAcJmcaWOjBfY6kRoI5I6jVRcyj3CcDzPeHSWqBbh3ns/7Vk/IRIjUyFE8j5GUYQWFrEQSWpM+kkKSmuOPvPXHAhavZ6xvqf/jcU5KA6BGvTO67xbq2UG8RrhQa95tvvo60zrNQhW6hXCKAId4zYjUBt/Ntpnzg78vVgr49oOwxulCYGFk8nFTa3dQFgbixd0tYZZ5Zq/XK8RS40kUTiuRe9cYx0hdKJe9FYWaUwmtT4rGyJayauhanW4cSB3U/iOM4v9gJw+wM3CcZKrea31u/q5EULcFDkBiVyaXoPojbDR8+ikMCcmBgvX+Xyew7t2rSKoGCEFruvSbrcxQnYJqlODUkohC3mEZbFn5w5GR0cZTeshOo5x/AyW4xAFybahymDimNjyCcMQ6WWTvkIjCQVIbdBGE2OjlUchl6MRCWqtEGNEeuWvCLUgwEEbgx2WkflC0v+ldZdMjv/NU6wsLnDp0iWMSOcTGQhiQUMbjNYsPv8CrfIKPTLpEVEoZTey0n3E0krfg3jVe2eMpvHSSxgDrT4n72qr0Y3Arudm3v+6b4TVnxZnlWR99f4nV/3d7IuuWqtrYZ1jdLwOVxFuOwrQ0WrtXnpcJHJmcPRIrJPXwBZJo/BQxh4IzcTbaDreCN9xBPUBPsDNQkrZravcNGG82+ic122en+d5PPLII+sTmFSYuD/Fp0EpXNdNokwhuv2plmWxNDuDDgOwbfy770YC27dvJ2NZOJ6PkhLH87AdN4n+lCKSXuLEnkZQuD7GhCgkoTGolGAa1ih1/xCjxSJxfprlzC60SX1/hEIIQYykog2NSCeBj1IY0yOo8vw1Th47xsULF2i1QzAw7+/jbCvLyTBAhyFRqURc7Q3LM2ZVRNtZ4I1eM68pWk0XQiR9Tkaz0qh1b4v6CKdSWkwW/lXEMRqFjESrLJCAXPv6PULrfRpirWmmisL2scEh5TeadwUJQWWdjUZldFKiCbzFKsv+DhrOcHcLuWoUhxLJ35OFxGFEduQld7AQ9QFBvQ38zu/8zrtynAsXLvC1r33tju3vySefvGP7eif3eSdxS6Pd3wtImS7Ot0+gG/VcCSkGU1BGI6TsOpfH9BYCy7Jo1WuYKETHMcK2eg2oSuJ5GcZzQ/i5HJbjEjYbWJZFkBJUrJIISlguQmiUUETaoKTCWArtZtiUn2DL1BTSL1JS49hpyk5bGZSQxCg0EOjkCl5YNrrZIm40CIN0Am+7TW25RL1WRwjBktpCK076jb7x7Ldod17PiWTwn0itiFY30wbN6hpnhkjIAYZY886kJNRpcBUGVi5dpPnyywR9Y90BsjrGWmcf6gaEUux49PURXq3dotxcf0LteqKJt4OB89SCforo9EPpdAhl1k0vhioVZBh03SfscjkRYsQ3ni11I7y/a1DvMbTW637pf+d3fodf+IVfeEePbYzh7NmzPPXUUzz++OPdD6qTjohut9uJv5gx3Rk+/cqxWq1GEATd+40ZlMEuLS0l6Z2++x3H6dY2ZmdnaTabCCG69/u+z/T0NABnz54lCAIajQbHjydXc/l8vjtaojP4TinV/ed5XtdZodVqIaVMUklSvmMRzi2l294DJOf3zj1/IJmvtEokgZTIlKTazXr3qlcphY5jpJDdwrtOPzdCCkwc42WyKN9PxstXS0kEhU2MIFZeQnpuEYTEo0UtjpFCIF0P90MPok6exKTWSvV6HS8lqLYzjowELSkoAsJEyXgOSxFdu0YjjnjxT/8k2bZWJZyZwRfJImkQSZOqAYymKtN63vaPYPgdYmGxfPYM577+1fRFSJ7w0pWja14u03OdZT1FhOkjqEWSYSGd11enM8lulPFz4pjYmK7nn7OKYFyjGQsDGu32uhGJAILzF65/kD7IVkhYTvqz5mcT5wxxPRIGhubmWc/B1phe5CjbbfTVi7i1ABKxJqHWsDKPqVXA3bXm8beCv9UE1VlYdZpeMMZgWVaiiIkigiAYuM8Yw0svvcS/+3f/Dq01P/MzP8PXvvY1jh07htaaf//v/z2XL1/m6NGjPP744/yjf/SPyOVy/MZv/AZRFPG5z32OX/mVX0nSJEtLLKWzfl5++WV+8zd/E8uy+JVf+RV+4id+gp/7uZ/jrbfewnVdfv3Xf52TJ0/yX//rf2VkZIRSqcRv//Zv85u/+Zu8/vrrfPWrX+U//af/xH/+z/+Zt956Cyklv/qrv0q5XObXfu3XKBaLPPbYY4yPj/PHf/zHRFHEL/7iL3LPPffwhS98gT/7sz/jyJEjA7NqFhcXWVpa4l/8i39BFEXk83mefPJJfvInf5Kf//mfx3VdHn30UUqlEs8++yxBEPAbv/EbTE9P8+d//ud8/vOfZ9++fV0BAtAbc0FilNp5fTsYHR3tEtTx48cHxARKKcbGxtiyZQvGGK5du4brut1/75bA4V2HlO+o2WZyDJXYHXUQ627ty/M8ypUV7G6mUSCMIQm60kW3I0tWijgIMJaF7/soy0qur7VO0k+bHiZaTup+YRTTdifIBwvJfCkhkKlCUFoWxHH382Ihku+knQPZoCFtILmwiIWFWCdtacIQ3W6j3DQ1ZQzR4iJk8hitkwXXaEByxn4MW1isPPsszXTEPCZ5HXS4fr0med1E0jS86uZWs0l79godmUr//bpapRG0kUIw0Vev6icZRwmyrkUxbDPreEyEAa7RLIio27skgIzRNAX4OiZiUEAjAN1YZYC3zvl0j1ltJhMYgDg1M/ZshZd+rcayNsurdqfCiHUt1vswdOk05HrbtA20tb6uaORW8L7+1p87d44f+ZEfIQgCwjDk85//PJs3b6ZYLPJ/fOkYy8sr0PWsSn4ODw/huh6tVotSaa2Ec3R0FNd1aTabfM/mtSFoEAQEQcDv/u7vcvHiRbZs2YLnebzwwgv8x//4H/kP/+E/cOTIEf7kT/6EmZkZ/uk//af8m3/zb8jn8/zDf/gP+Sf/5J+Qy+WSdEecSHf/7b/9t/zWb/0Wo6OjbN++nT//8z9n+/bt/Nqv/Rpf//rX+dKXvsQDDzxANpvli1/8Iv/6X/9rXn/9dX7pl36JZ555hs9//vMcP36cZrPJ17/+dU6cOMFv/uZv8su//MvU63W+8pWvIKXkB3/wB3n66afRWvO93/u9fO5zn+OrX/0qzz//PC+99BL/6l/9q+7z3Lt3L6+++irf933fx+c//3n+8T/+x11j0/n5ed544w2UUjQaDTKZDGfOnOFXf/VX+cxnPsNv/MZv8Nxzz7G8vMzHPvaxdRtS77or8e3qRHed16Jz244dO7q3d/5ls0kjZRRFiYdcH5RSTE9PMzExQRzHlEolXNfF8zxs235fR0nXg1CqO7biHTvGqhSf0XF30Xddl1YQ4jiD/TZSiC4xdQftSYkOQrSlcByH++67j3PPPYOOQuI4pjl6F07zClEUsTx3jXN6N052J0Ec4wqJtCziKMJSSU2sQ1CRyHPef5zdxhCEIctmBKEy7BPXCHFwVSqE6EcaKSklEZjBkCWKkhGIUcSpc+e6F0JSSHQQgZCYKKRSXUC1k3mK6yFjNAmdDX62Go0agYDsqu2NMQghqDTrKCmZ2mCR9hyF19eZJlLXhuH2CpVMjj2uk7oDJkfO64iciZnte8xMaR57tZPDDSAMTEZtrtlu71mJzrmvPde3841qqDtrIfe+JqhGo8GZM2ewbTvp5ej7EP7zj+1mdna2m8LppInGUg+yDkGtvr9YLOI4Tjc91bm/869cLnP//fczPDxMoVDg13/913n66acJw5CDBw/ieUlBcHJyksnJSc6fP8+//Jf/EkjSauVymVwux/j4eNfqxvM8Hn64N1DsxIkTfPGLX+SZZ54h+v+zd97hUVTrH//MzJb0Bgkl9BIQ6b2GpQeQAKIoghRFrh3LvSqiCHoV4aq/661eLgoW7KgXQUFQgooFRZoKUgPSEwjp2TJzfn/M7mQ3uwkBEup8nidPdmbOnDlzNpl33nPe8309Hnr06EFSUhJdunRBkiSSk5Nxu93UrVuXyMhIkpKSyMjI4LvvvjPmfOrUqUNsbCwdOnQgISGB48ePs3PnTgYOHAjoRqagoIDGjRsTGRlJ9+7dAx7isiyTmZlJu3btAGjfvr1xrF27dsZk++uvv86SJUsChuFkWSYqKsq4z4rwra3x94AkSapQdshqtdKhQwecTqchuup0Oo2+LykpYb/fWL/FYiEsLIzk5GSio6ONoc9LweuSLBaUahawLTvEp4eZl3pQmqaVzi9ousSQjG6YZFkJMFCyy4UWFoaiKMTFxWELD0d43EZoelhYGE5nCdu3bsTpUVFik3C5XYTJXg9KVVEsFlBLFwYLjxvZrj/uVU1fyOMkDMWiUKTKFHvchn3Kyi8kJsyOJmQ9dYc+gWdE5Xk0lZL8fCSgSESy/dffOJGXQ31RD0nW027IiozmcoGw4LTIoR+CovQBXVRSRFRE6XIXIYQ+PO23WBf0OaJo74JrtcwckxRiqND4esocCpeCpxXK+jH+OaBqu504JZkcS8UvOvXdJUEh9P5YFAmLIvs0Yo1RpVCoauioP19vVFUk30X9H9y6dWt+/PFHY3v79u1Gfp3w8HCaNm1a7rlhYWHU9ZcnKYPNZjPmc/zxzYlYLBZyc3P56quv+Prrr1m9ejVLliwJmtPo0KED77//PpGRkfrixhBvw5JfqnFN02jRogUTJ07kwQcfBPRcPOvXrw+oVwiB1Wo11mCkpKQwePBg/v73vxvnHDp0yJgjq1mzJm3atGHVqlV62K/bjSRJ7N+/H1VV2bRpU1C7GjduzLZt2xg2bBhbt26lS5cuQOBk+7/+9S82bdrEnj17uO222wB9bq6wsJCcnByysrLK7eNzQVEUIiIiQmajjYiIoG3btpSUlFBSUkJxcbExXwaQl5fHnj17sNlsRpCExWIhKSkJq9VqGDyferfP+CqKcsl6YhUiyyHCzPXv2G6365qA3geR6nJ7BUgFQlVRbLbSuSgJyMtH+OXbsoWFobp1D8qXUyr35ElUj4qsKNgsVkqcTuIs+lCdqqrIFivCO8RntVpRXU7sNjtC02hcK5H8X1U0bFgtFrLynZw4kYtvsCy3uASXRyU8LEL3Cn3fl/c5ml9SRNGhA4QDR8O74PKuhdP18fT5VBmBVo5/IIngOSjhXcMl0F8ofN7aqaL8gNQeFYWaW4BkV4kRyu4j2VVi+EWqqpHsLCDMr4zT4ybK2xJ/o+ffepsQ2IRKjrAGuT0RmoqseYxsGErQPfqVtSkBE1N6QIogNjwuqKymFQPlG8SI7KMU2WLLPV5ZLmoDdaGJj48nKiqK/v3707ZtW2N/165dGTVqFA8++CBz5sxhxIgRCCFISEhg6dKlQfXMnTuXESNGYLfbuf322xk7diz33nsv/fv3B+C+++4LmQaidevWzJgxgxtuuIF33nmH2rVr43A4kCSJcePGMXjwYKOsLMs88MADDBgwAEmSaNWqFf/85z+ZMmUKPXv2pG/fvkH1jxo1iuuvv54hQ4YQFRUV0rh27dqV1NRUUlNTjX0PP/wwqampdOzYkdq1a59Zp1YBkiQZLxih+i08PJx69epRVFREcXGxkSW2Ro0aWK1WcnJyOHjwYNB5bdu2xWazcfjwYY4cORLkXbdu3RpFUTh27Bg5OTmGcVMUfcirdu3ayLJsDPVcLEhBQRKaka02LCwMSVbAO/HtdjlRZAkZCU3TsFitpSoFkoRFsSASEw0P2xYWbhgoj8dDREQEx0tKkK02FEUmzGbF5XSRhYRVklFVFYtF0eegvMOzxS4n9shY/aXMYsEOlEi6d5VbrBtT/0e/qmm6xp8QlMjRREHAEF+YEPoCYY+KPcxOProWYYHQyLba9DkdKfR6Mt0X803I4R1K9IWkC+TISMMQeVQVFCsRmkqecvpHqQJElvGs/FuhqsEGzu2N5kOAU9XNdLzHTaSmkmyzc6Igr8Jr1vS4OVlmjjNMqBR77z/J7eKkxWqsYy6zAswv27CO3eWi2BaOEB40TQlYR1YdmAaqDA6HwxhGk2WZ5cuXB5V5/vnnA7ZPFwreq1cvvvnmm4B9Pk+o7LUBJk+ebOz78ssvjc8zZ85k5syZAee88cYbxudhw4YxbNiwgOO33347t99+e8h22e12PvjgAywWC3fccQdNmjShUaNGAXX+97//DTovPT2d9PT0kHVeDISFhQUZTv+324SEBCIiIoyHqm8ow/fQjYqKolatWgHBM/5Gx2ewfIuAVVVF0zRjDm///v0UFBQQFhZm/ISHhxtzbOcdWQ6U4hGacS92u133hrxrXDwuFzWjIokOt+sGymZH80WLhoURkVgXt190qzUsnOLCAgpzTxEZGUl4eDhOZwkWqxVJUVAsFiQJcpCIQUKRJCSLJcCDKnG7uKp+PY7k5yAQWADhNVBFHploixTw/Xm8fY4QFFpq4lY7BRiocM1DtmLhcFEhkZH6kFuCYuGAdw2RIgQ1PG4OV/D4q+1xUWC1Qtn5LbxzTb5ybic2IXD6Dcslu0o4ZNOHowPSz58Gq2LFKlv55eDeoGP5JUXgrdPivb5VU0sNmB91PE72Q4CmYHmECY0kt5OjhNCNLEc2SUJFlgQuj6DE5eJEQQllpSNCK1KcOaaBqmJefPFFPvzwQ2N79OjRTJ8+/QK2qGKGDx9OQUEBzZo1o0ePHhe6OdWGv0dT3vCuj5iYmAoTGyYlJQUpNmha6UM/MjJSDxooLiY3NxchBGFhYUbgiC8EPzw8nIiICMLCwqo1T5UkywEqBkJVDQ/KN8TnC6LwuFx6EIOmIVRV96C8aSmUmGjsjZuQl5dX6kGFh5N/8gTH9u0lOjYOtbgIt9OJ1WJFlhUkxYJVgWJJwiNJWGU9rF6oKjVq1CA2NpZvP1tBbEwMh3P1hIhWSUKSFdyNB6IedmPzvt/XcjsJi43mWH4BCIEQ+kBdlBBk+73pKy43KLona/F+7bLkp8uHFJhDKQQ2jxt8Iwp+BqaW3coJV6lR8KWZr+VxUUOKIMxmxxfec6Y+dGK4Pp9bdv6qLL7WWIUgys9A1VBd4KduHuP9zq2VWMSrFYReXxXq2vqsn+YnXojx+QzscaUwDVQVM3369IvaIJVl1apVF7oJlwX+BsY/QEbTNGPNmo/i4mLy8vKCvLomTfQ1I7//rsdw+daO+aIVz1quyW+ITwgRECRhtVpJTEyk5IA+VORxObGFhaGpKprinYPyeFA9bhSLFUVRjCAB0D2ovKxjgMDpcrJn4/domoRbtmOxWVFiY5DyTqEoFlxAjMW7bNW7bk+W9IQRssXm9VTB5s2LZKvbjqTszZw6uB+BwCoEEXYb1kIFSQgaS+AMs+svBr5IPSFQXE4kq52iwkKiinWv1ZdEw26xIXsKy/UOAneWHfCCCIuFbKc75KmyBIkWC4eABq6S0iqq6IFdx+XkiF82ZYssk+BnoHzDh6LMu064UIkvzIIofU7eUo4FiVRViiwV/41ZPR5cFbzcBXNuN28aKBOTakSWZcLDA1NpNG/eXJ8/8Qvw8Fe7yMnJ0YVQ/d58ExMTadiwIUIITpw4wZtvvsngwYOpWTM4w26IRpQO8WkaKIELg9u2a8eGfbryusflwhYRgerxICuKvmTD5ULzRt/5jGTpHFQYHu+6H03VsAGa04lLsWCPCCdqwADkpe8SHxHGMVXFbrcheYSRWt3jdGKxKMgWxRvqLAiXJeqE2bzBSgqKJAdE1VkUPajDrulJA2VAeO8v0ePSAwHsEWiaasjvxMkSFnRJpTDFguo3/OUfNFDT4zICGRQ/LyvgMSvK7vDWE8JsyWFhaEXFwYXPAmuZi8rlzHNqZRtXZjNO9VAgW4ICJcI1lSJAUVXsngIE4WCxkV9SAOjDi1aPiiw0wsJ079LudIEtPLQZEto5G2fTQJmYXAAkSSI8PDzIeAFGQI6maUakom9I0rc8Yvz48UiSRNeuXXE4HNx8881cffXVhtGLi4srnTPzH+JT1SBhWskb2KFpqm6gwiMoyc9Hs1hQvEESPoNV1kBZve2vGxdDpw7t+fmLzxBuJ8jRxlBhlAxJ0bEcyc3BZrUhCTcel5Nv3ltCm/5D9OhJRUFoAuFVVheKHvUn+bbxKULJuoFya145cU0/oovtocTGIZ3K8Y7p6VatgasEK3CVIvODG28UH3rOLE1Q2+3kpMWKU5YJExph3kXNsZpKpMuFW9L7J9ZvHV95w3f+YrIASlz8ORmoBI8ba9k5MK9XVt6zv8jtrnB8UQKsQsMl+Qyx7lVFCI0TgEVVCVOLcaHgseih+/55ExG6cbS5nEZ0pU9dIszlQmiCErsdS0kxihx25jfth6nFZ2JykSLLMhERESQkJBgKHHa7nXr16vH9998ze/ZsJEni+eefZ+9efWL9iy++ICEhgejoaNq2bct9993Hx59+Sr73ISk0LSjrtE/lQfV48Lid2CMi0VQ9JbrFakNTA4f4fG0DsFhtyLKCzaIvphVCw6bIXm9L1/VTrFbCw8KRJIkwux1kmdyT2QC4iouwyhY9khDvGiNJRpKV0mvIkjGPolitWGUFSdNnlISqeec9dEPli1Wo6U2b7vNqNM0Xki4ZK6d8j3grArvQUMoYAkkTAW/wTazWCjUTTxbmsePw/nKPnw1Rmhpga+I8bsK9fbH9UGbIcyJUD4mFOca2HGJdlf8wnwTUdesqM3bVg7UidQ0gsrCIWq4S4twu7C4XsW4nnqLgaEJZFdis57bGzzRQZdi8eTMvv/xyucfvueceABYvXhwkPHmunDp1ig8++KDK6rsSxWGvBHye06xZs/j2228pKSlh6NChALRo0YLnnnuOqVOnUrt2bV566SVGXXcdh07oBmHpBx9w28L/8uSTT7J69WoKvJPjisWC5vEYHpSq6oERFpsNTdXQvBJFZT0oSZJIvupqImLjDMV0q6IgKxYsFoXivFzCo6Kx2W1IiozdZgVJ5pS3PfkH9iM5nUiyhCRLRrCJrMhIsozm8aDIMnU8+gPUarfri0l9BkbTkJD0IT5Jl00CsHsXafvsieoXDu0zOv72KE71kOwuqzBexnPxGTQJ7N6cS5bEROQorwJKqMWpVbzaIEZTT/vQloBwtdSTkyWZulHlrwn1J7akGIv3PhTv/FacM3BRriKE4dXJQhCpqkSF8BIjCjyEqWcyXxWMaaDK0L59e2699dZyj/vCwy+0garqa1dXnSbVj6IohmpG06ZNefDBB/nrX//KZ599xsmTJ/ly7Voae+eqsrOz2ZyZyezZsxk8eDBxcXF07doVVYDqdrN//wFOFRSgut1oqs9A6UN8/nNQ/kEh9Vu1wWK1GvM6VkVGsVqwKArF+XnYo6KI7d8fJSJSH+KTJUqKdRGhvO2/IhUUgCzr0X2apgdOyF4DpamGlWldrwlhkVHYVZWEo0d1A6N5o8mERg1NRVFkEmPi9OE7oT/gLIpiRMa1QMNWutKJhBJBQmQ5b/neeS0JUGrWJGHyJCQJ6lkVaoV55wy9EYeVpbJ5v6qdcgynVZEIt3lfQlQPcXn5hJ2DKkTY0UOnL1QBF0lvXTxkZGQY0kVt2rThpptuol27dmzevBmA3r17s2HDBjZv3syAAQN4/fXXg+rYsWOHsZ7qxRdfBODJJ5/E4XDQv39/MjMzyczMpE+fPowZM4ZOnTpx8OBBFixYwOrVq3E4HGRlZbFw4UL69OlDnz59+OmnnwBdhmjChAnMnz+f77//HofDQa9evVi0aBEAy5cvp1OnTkyZMgW3O3gdxJQpUxg4cCC33HILs2fPDqpz0aJFOBwOOnfuzGeffQbADz/8QMeOHRk7diw5OTlBdZpcvERERNA7NRWrd5hn2qRJbPzLXzh16hQrV67kkUceoWnTpoRHhKN6PMx98e+07tyVYbdM4+7HnuAvf/0b63/4QfegFIuhTF92IbIky4Y0ks1qpVmz5siKooetW6xYYmKok1iDMLvNiCqUFQslhYVYZIvXQEkIoSFLMrLfEB+ShCLLWHxzVadOYfclItRU3YMSejkkGUXSFdDx7ULiWO5J79yRd17Oq99ZXu6ilDr1A10sqTQQw1evj8Qa5WvilU3l4aO8AIfzRazHQ80QeapkSaJGZLDXE+eGiOLiALtWXjh5Wb/zXLh0gyTWzj33OvrNqPDw8ePHeeWVV9i4cSOvvvqqoVfXtWtX2rdvz5o1a0Lqvc2YMYOXXnqJli1bomkaW7du5dChQ4bQ69y5c5kxYwYFBQWsW7eOt956i6VLlzJt2jQOHDjAG2+8OucK5AAAgL9JREFUQXZ2NsuWLePLL78kJyeHW265hY8++oiDBw/yzTffEBkZyZAhQ1i2bBnR0dEMGjSI8ePHM3fuXNatW2cIufrz/fffY7fbWbNmDfPmzaPYmxrAv86ioiKmTJlCbm4u119/PYMHD+bJJ5/ko48+IiEhgYYNG557v5ucX7xh2EIIYw4qJiaGIUOGMGTIEEDPUqt6PNx87UiGjxrFF5+uYMeefcx/4QVapzRn7ISJKBYLL7zwgp4O3mqlc+fOhvqIJMt6IIXFQodBQ7FHRHJy+1Z97sqqP/BqxMbqhk2WQQisdjsFRQXEKhY/j0kgyxKSIpd6Jl4FCwBZUbwJDL1hfZp3DsqnYK5HUujl0I2TW/XgVj3EhEeWrtcp7ZzQXUbg4mAdPVTD43Zj8TskV6BGL4pDa9b5h8ZfCKwIrFrlri+AMFVgO83cVC23kxNOF4V+ijTO4qMVnHF6Ll0DdRrjUhU0a9bMECE9depUpc/Lzs6mZcuWgD4UsmPHDjIyMgKEXgFatWqFLMskJyeze/fugDr27t3Lli1bgoxMixYtDEWCLVu2GIoO2dnZZGVlVSjkum/fPiNCrH379nz77bdBda5atYoXX3wRIQTHvZlGT506ZeR5SklJqXQ/mFwcSJIEiqznS9K0kOk9FIseen11s6Z0GDqCPilNUN1umvV28PVHS1E9HiRZ5uOPP2bPnj384x//IDIykl69ejF16lRa10n0elAy9gj9b0mSZVS3G6s93GiH0IRXeknFag9DdXuwhYUZHpSmaVglPVeVvwdVI0ofhouIiUXyLsKVkLzzXnpYm+RdUyWh/9+VXepU4nL57SgV8Skr52PgZ0BOnsgy5rkCvQKBFCIIobSK0MPmF5MUVnlYZBmL92/lZP6RgGPe94AA7EZ0Y+kBV8m5aXVeugbqPFBWvNUfn5BrKA8qMTGRnTt3kpKSgqZp5Qq9ViQO27hxY7p06cL7779vnAOBY/+hhGorEnJt3Lgx69atA2Dr1q3Gfv86fR6Y0+mkV69eAMTGxnLw4EHi4+PZtWtXZbvP5CJC8grGClUNmV9JsVh1TT23G4vF6h2ecxIXH0+tGgloHg8Wm43vvvuODRs2GKlf1q5dy969e2mTXIvs7GzumvUkN+zKJD09HUlWUN1uZG+Msh7OrhlDfFa7HTQNm0UPnNC9Ct8clGLM1yQl16em0N/Ek1tejZRzikNHPtENizeooo5Q9ZxWkleKSvY9KgV142tyOCcbgUBGpjS2r3TI73SoHo/XkPnLJwCn1V2UQm5aZCV0UMVFREy4lVh7GAUlgcOUtWLsKLJEKGn0+AgrBRU7WmeEaaDOkuHDhzNq1CimTp3KmDFjAo4988wz3HbbbUiSZEgdVST06qN27dqcPHmS6667jgULFjB8+HBSU1NRFIX+/fvz+OOPB5QPJVRbkZBrt27deOmllxgwYAB169Y1vDx/rrnmGlJTU+natStxcXEAPP7446Snp5OSkmJ4UiaXGN61PLoHFfzGL1ssnDj0O2HR0UiyjOwdUlMseq4tj9uFxWZDURSSkpLo3Lmz8XcvhGDX9+s5cuQwJ3JyePDBB3nwwQdp0qA+jp49uP32P1DvKozszL62WOx2fahPsXij+BQ0t4tIezh1W7Y2DJTsZ1CdO3dR8vV675wT3ig+sHmDJSy1alPbHklC/XrkHF+NjER8RDT5xUXkFOZTI0pX2C51hCov9eDxavkFyPOJ03lDoeu2WixBa6YuNnSVj+A7sHpfOEKNUIZZFXBXXbCVVJFE/IWmc+fOomy6jauuuuoCtujSx+NNtT1v3jwaNGjAuHHjLnSTTM6Qs/k/OLFwIfE33YR66hSF335LXJmXqswtP3F453Za9EilRr36bFn9KYWnTtLjupvY8NF7xNWuQ2xSbWo2bExubm5QPq9d33+DLTyCk4d/J65Faz7++GPefHURG7dsY+0ny+k9OI33X/4vBR4P13TszK71GdTpN4Dfl31Ey7gk4q6/jm2bNuAuLqb23t+pPXIkalIimz9bQc2IGOL36uuL7CkpZG/dzPFcXU2+MDaKqNwCcj0usCiEt25Nz+vHU7x7D9++/Rq2Bg1ocjKfA9nHyC8pIiEqhkJnCSVuF7vlKOIKFVJqauQU5gfcT4s6DfjtyAEAPEBWXA2atWiKJ/sE6qlTKDVq4Ny5E0vNGtSJT+L3XdtD9rscGYlWWJqqVlJkhKoREx5JXnHojLjnjKsQik5A3Nm/THo0D4qsICGRV+Imr1h3iyQJkuP0Idsil8rJQhc1o2xkF7ioF6/v/z2nGFWR8bijschw28t/QZKkjUKIzmfaDtODOkfeeecd/v3vfxvbPXr0YO7cKgjgqCZuvfVW9u3bR2xsLO+9996Fbo7J+UKSdaUGTYMQcyaK1Up0jUQSkusBIFv0ITbJG3Bw6thR6l3VGovFEjLZpB7F50GSFRo3bqynk2nbipPZWTRv3hyAd/63jPc/Xo7NaqVj0yaMPFXAVQX5EJcUMAflnUQq9aD85syE261LvQqBLHxDfKVzUkmN9Bxxsp/0geSVOPInLCWFBjt3Yw23AKUyU7aGDXHt3x/gFVmA+lbffBgEaB0JfQ7LoljwhFAWD+bin3sC9MjKEFSm9RJgUTWqYqTPNFDnyA033MANN9xwoZtRaV599dUL3QSTC4FPsVxVkZRgA1W7SXOSGjU1HsyKYtHXEqEPsQkhiIiNK7d6I1ut3/ChLMuEWa3GEN2Tjz7CsP4OvljzOWu/+54Zc54kpU4dvp7xKJIsszLjS8KtFgbYIqgtlRooyS/XknC59KFCI8xcQ7LIUKJhtdlo1qW7UbZBvYYcRQs5BCcpCnY0rMqZDkdJwVp8QhAXEUl2fm5Q6TqJtThUGJw+o9zADJMATANlYnIFIHmj+EJJHQFYwwI102SLxTAssqIQlVCjwrkWSZZRXa6A0C5JkvQgCe/1bFYrndu2oVO9ZKal9iJmYBq7X9XXEQpJYv6/F3AqT5fMab5oEQMGD6Zr43rU7ly6zki4nN6oeW86clVDtlj09VBlrm1RFGOOyi9kz1ugMr0W6kZ9lZSNASynwvIWv1enfboEIgQri2mgTEyuBAKCJE7/AFOUQAMVm1irwvKy5F0H5edB+aL2SqP4JDS/DLEtW7akbkpz0ASSEHz82its/PFHDv+0lV9cLha/+iqFaYPo170nTrebZZs3M6RbV6xIKDVrYrFaEXm5SPYwXfXB/8Es+QLOA/eX5ss904d4OZZNhNwbfJpfu3ztOB1KTAxSeBieY8cr20gdawRE10KyWstdKHypYBooE5MrAVmqMMw8qLilNMy7ZoPGxNetd5oTdN08KcBAlRo40JXIVY9XS05ohgI5CITHQ1xMDF3atqZBzVokXTuGgogIvv3oXSTFwvd793LX669hWfIGPZo1o3vbqxnYsSMWTUWyeReGllW38PdtylqQ09gnidL5qLKIgCE+UbpoOBTl2KHTJSUEkKMi9eSSZ4NirzJPyhpiSBjQQ80roCqubkodlUPz5s15++23KyxzOj2+yZMnM2HCBGO7d+/eVda+ssyePZs1a9YE7HM4HHg8VbgooQJeeeWVar+GvwxVdZKZmcnkyZOr/TrnE0lR9IddOWHmZfGfg0pucRX2iIgKy8teqSOpzBwUlBoqSdI9KJ+kEaqGpFiIHXENlqSk0jknWQZJJi4ujviYGGRZpnfz5qx88EHu6N+f30+e5C/vf0jazFnsPnQE2WpF1crMNXlTdBhh4KUxDb4CvmLldJiExT8YxN+BUlWc3oX1wnuR8gxOeQt1i11lhWkDsdatg7Ve/Uqv0wqFVAlPuTKEWxUjQs8fu0U2IvpCYZPzCFcql6m3PEwDFYItW7bQu3dvPv744wrLVUYw9ueff+bw4cOVvvbFLthaXvvOh4GqKi72Pq4WJF1eCE2rlGCp/xxUpar3GZ8yQ3wQ6EFpqqrP4GgCPCqSxYKtUSPv2qvScvq6KLm0LbJMx8aNeTx9JF/PeJRXH5zOXenX0KhmDSSrjf9kfMW0f7zEvHnz9MXkXqMUNJQWtKzmTB/iElpJGfkiSY8qrEqsdetWgQNU/XNRodpYI8rmvbpAKk/ssJKYBioEH3zwAXfeeSdFRUU4nfqbjr/343A4ggRjt2zZQq9evejevTtvvPGGUfb222/nn//8Z0D9a9asoXv37nTv3t3wehwOBw899BATJ05k9uzZTJw4kYEDBzJp0iSeeuopunfvzpNPPgnAypUrDUHX11577bT3c+DAAfr370+vXr2YN28eAEePHmXo0KE4HA5mzJjByZMncTgc9OvXj3vvvTfg/MWLF3PDDTcwfPhwtm7dytixY+nbty+DBw8mLy+PBQsWsG3bNhwOB9u2bWP58uWkpqbSs2dPVq5cGdQel8vF8OHDcTgcjB07FoD169fTq1cvHA4H77zzDocPH6Zfv3707t2bO++8M6iOUEK6Pvbs2UO3bt0YOXIkAwYMIDMz87T3ADBr1iz69OlzUS8TOFskxackETpIoiyyooSM9iu3flkfvgsIVChroGQJzePxGigNVA+S1RJUHlk2ws4lSTai+CSL1XtYplHtWkxKG4QCYLXQqGYNkOCRRx4hJSWFToMHs3DlqqAhtrKPy/IMi+8uIuxhtKhTup5IkvRIwtIKBTUd/SCsvMR8oesP90vdHroB/mHtlxbh1sq/2JyOS3YO6l+b/3XOddzZPvjBB7Bp0ybmzJlDWloaa9asYfjw4UFlygrGpqens2TJEpKTk+ndu7cRej5w4EBuu+02Q5gV9OE4n1J4WloaAwcOBGD06NH06NGD2bNn06FDB1577TUGDx7MqFGjePzxx+ncuTOzZs0iNTWVtLQ0PB4Pffv2ZeLEiRXe57x585gzZw59+vQhLS2Nm2++mXnz5nH//fczePBgNE1j7dq1OBwOZs+eHUIkE+Li4njnnXcA3WBFRESwcOFC3nnnHaZNm8Zrr71GRkYGmqZxzz338MUXX6BpGkOHDiUtLS2grt9//53ExERWrFhhXGvGjBn873//o2bNmmiahsfjYfXq1VgsFiZMmBAgsVSekK6P5557jhdffJEuXboYAr+nu4drrrmGDRs28NVXX/Hmm28a389lg6QvEEULHWZeFsViNYb4Kle9guZxB4WZ67/9hvg0FRSLNwJPBT+pMGNI0KtKrtcrlwZZWBSEy09o1ZueQ7JYGNa2NdcO7E/DG2/mww8/ZOlbb7Hr0CEGo0f8vbr+W9rVr0uHhpHeBuu/hNAC2mC0JTrK+Bxus4O70NdIACwJ8SgJNajRuAm1Wrbi96jP4ESw7pwox1uPCgs/7TCfySVsoMozLufK7t272bZtG2lpaTidTlJSUgIMVHnKGzk5OTRq1AjQNe98QqsA48ePD0jLIUkSMTG6+KXiN4zSqVMn43Pr1q0BqFu3rvE5KioKVVXZuHEjc+bMwe128+uvv572nvbs2UPHjh0BXSR237597Ny5k6effhrQHwypqamsW7eO8ePHG0bMH1/bVFXlT3/6E9u2bSMvL4/Ro0cHlMvOzmb79u2G0T1+/Li+iNLvzbpp06a0adOG8ePH06lTJx544AGEENT05iySZZkTJ05wxx13cOrUKTIzMwOGScsT0vXhE8VVFMXou9Pdw/79+w0h3U6dOl1+Bsq7Dqq8MPOg4opyxkN8apk5qFIPymd4vBI5oEfdeY1LUHm5dGGtJMulZYwhQH3oTq8ncMiyQYMGTJ8+nTvGXMfhz1bxOx72nzjBf9d9iSoEjWrWYMBVLRkYF0cNvMEKAV6K/v8dP24crPgfYW1aQ5bf+ibj71jCUiMB2ZvpWCtnrslaqzYcKc2JJLxzwqedW7oEPafqwBziK8MHH3zAwoULWblyJWvXruXIkSNomoYQAqfTybZt24yy/uKucXFxZGZm4na72bt3L0lJpWs3JkyYwJIlS4xtTdPIy8sjLy/POB8CRVvLrunwIYRg/vz5LFy4kDVr1hh6eRXRtGlTNm7cCOjeYaNGjWjRogXfffed0R5VVXnyySdZsmQJzz//fFAdvrZt3ryZwsJCvvzyS+666y7DYPvaWLNmTdq0acPnn39ORkYGW7ZsCVo/43Q6uf/++1myZAkrV67k2LFjSJLEiRMnjPa8+eabjBo1ioyMDHr16hXwYuAT0s3IyCAjI4PVq1cH1N+4cWO2bduGqqr88ssvlbqHhg0bGt/tpk2bTtunlxq+Ib5Kh5lbrYYeX2WQfUoSUrCBMqIG/RUh0BAeNWARrmEQJcXPWMnG+cZQn1dJQhPCu/7JW7bsWi5ZRsvLo1HNmnw8/R7uHdiP+Lg4Xv5qPeMeeYwf9+tSRiFfOr0BhtaagRkByht6K29eM9zPgw+optITTOdgqc5yEisz+wR5xcEZchUZLMr5tZyXrAdVXaxYscJI6w56SoyvvvqKyZMn07t3byO1NgQKxj755JPcdNNNqKrKXXfdZeTJAQgLC6NPnz5kZGQA8MQTTzBo0CAAY17pTBg9ejQjR46kffv2QQbq6NGjvPzyy8ycOdPY99BDDzFp0iRcLhcjRowgOTmZRx55hEmTJvHnP/+Znj17kpaWxqOPPorb7Ta8n/vuuy/IWLVo0YLdu3eTlpZG/fr1SU5OBqB+/fqMGTOGp59+mgceeIABAwYgSRKtWrUKmoPbv38/t9xyC6qq0qRJE5KSkpg7dy4jRozAbrdz++23079/fyZOnBgwdOcjMTGxQiHdP/7xj4wfP56kpCTi4+MDvovy7qFOnTp06tSJPn360K5duzP+Ti56vEN8lQ0zT6hbj5iyD+cKq/cOt1U4xOfzoPQ0GZLHHXIOSpIlYyhNkmV9IS74JSHU56ZUTdU9Ma/hk70pY/Qy+pVcv/8ODZsTHxnBNe3acNuDDxDV4mrefnUx7fL05JuvrPuaVVu2kNbmaia064gzc3+I4ApfG0s9KH2/fiCUB2WzWIP2+TjtHFQZwyTZbIFzX5XhLG3JtFeX0LBGAv+dPCFgf62YsHOKKjwbTLFYk8sOnyCuqqr06tWLr7/+OmRalEuVs/k/yF2xgrCWLfFkZYMsEdm1a5W26XjmXnb/8C21m6XQpEMXAA5u/5kDP2+hx5hxSLLM4Z07yNyyEZtiIfenn+g1ZRrO7TuIvUYfQs/cvJHDu3bQPN9J/OjRWOLj+emT/9HoqtaoK1ZiSUzE4x06/9VVgGyzUbJ/Pw269SCrpBB7bBxd0nURXPfhwxz5bCW//byF9g2bs+fYIfJLiqgzcBCt067Bc/Ik6+c/g8vj5offD7MoYx27j+tzSLVionlq/nyuTogmKr4Gdbbv5ueCk9ibNUUrLqF461YsNWpgb9aU+DrJXNXbwdcvzKO4TLRuXEQUtcbewG+LXw7qr/YNm7N5f/mpayK6dkWSwLX/AO6jR7HWrYP78JFyy4dCjoxAKyw6o3MARv/jJQa1uoo7+/etVPkStxogFgtwMEf3wGwWmfH/eckUizW5eJkxY4aRHBHgjjvuqFb9wr179zJ16lQKCwu59dZbLyvjdLZIXtkfNBXJEpzS+5zr93lLAUN8ipEpV98O9DokIQLW6hgLe+12JG8WXknxDvfJUsAQoSzLpRF4sqwP75UZ0gr18u2/z5d2fUi7tnSuV4f9J06SnZDEq2+9SUbGOq6+9ho0TWPG++/xW3YW7Tt1oFOLFJLR58COnzhBfO26QMVLFzQhOFlQSE2/wIvTUTVrbE9fyfG8fGZ99DGTenWnR9MmAEZW44uB8/afK0lSE2AmECuEuO58XdfkwnO+w7ZTUlL48ssvz+s1L3q8EW9C1UpTqVdl9d4nqn/delZcxa+Mbqg0IXSVB0NJwtdE/Xj8DTcge18qZFlGtlgDDJ1xPV9SQlmGsvZBkgjPL6JpUnJ5DTbaLLz1NapZgwkTJtJZVun88Ey2Z6xm/8FDvP399xQ6nXz9q55S48O7/8DP23fy+OtvAvrf20u3TcGiKBQ5nWRmnyCldi3DWL/+zfcs+W4Di26ZSHJ8XGW71GinP2XnfH14VFXXHqzg3FDkFRezNyubPcezDQNV7Hbzv01bud2RemZtBdZu/41fDh9hVMduZ3xuKM4pSEKSpFckSTouSdLPZfanSZL0myRJuyVJegRACLFXCHHruVzPxMTkLPFKHSG0M1rfVFmCvCQwUnX4b4P3ISu8i3X9PC4j2s/vnLjadQmLjcXWpElAWU34pQ0JtfDYa4CiwytWwNDLBu+KitajbBs3qM++vzzHS3f9gQkjryGpRgLbjxylY7MmRtmdO3dSp14jMn7byzUv/ou7l7zDgRMn+b/PVtOwTTuWfLcBgCmvvMaJgkKEEDz6/vtMWriY9bv2kJWfz/H8IordbvYczwoK9tA7Tf9V5HIx5IW/88Db7xuHjubmMeyv/2TNr9uN77YkOhrJGxVbEVkFutLDb0ePBuyvjBRTKOZ+soplm7eevmAlOVcPajHwD8BYLSpJkgL8ExgEHAR+kCRpmRDi9PHQJiYm1YKkKF4PSq2U1NEZ1++3bsnY56cO4X9M+DwoynpQCiAFeAcN27QHwD54MKc+/MjYr2nCGKLzjxz0a1DIdhqKReVEyYI+P1RW3X1k/8G0UYu5/caxFP34Ixa7jS9WfsrSj5fTvXt3bFYbTy1bZpTP11SWfPd90PXH/SdwPmrOshVBZcYOG4Lt518RApYsW063Jo0Y6Uglxunk9xw9sOPnQ4c5cOIkDWokcNC7b82vO4gMCycpKpI7nv+bUd/wtq2ZPqh/adtKSli+ZRtju3QyPLLfT+aQnV9gDEPWiokmr7iE2xa/Qe3YGCb36sFfV3/Okdw8/jnhRu56421qxURzz4B+HM3Np9ClcmPXqg8uOicDJYT4UpKkRmV2dwV2CyH2AkiS9DYwEjANlInJhUKS/MLMq95ABSyy9V1SlgOG/Mp6UGVD3mVZrlA/LuiYoTxxFvMlkn88Wvnn+x7gERERkF9cek0B7du1pd8QfRF6/tq1bHvqKX4+uI+8+vVJtFh44cZxLNz8E62iImlVtzb/+uJLsgtOr0337ierAra/35vJ93szg8pNXfxGwPZP+3/np/2/B5VbsfVnVmzVB7kibDaKvNGAi74unRc+fCqXmxaUypVF2u1c968FAOQUFfHw+x8ax+56Q9coPZaXz2MflhrlRV+XDqvnFZ8i0h7Dua5kqo51UMmAfy8dBJIlSaohSdJLQAdJkmaUd7IkSdMkSfpRkqQfs7KCV2afLy4HsdizITMzM6DNVcn50OurzvaXxeFwnJfrVAX6PE3lw8zPqn5CzEGFGOLTfAaqzAJuPYNvBY8kf8MqgeINUQ99zukWwp5dEIBxmqYGhlxLEnERESRERnJ182YkxMQwoWdPtv3yC/930wR6N29GxsN/Yu38p/ls7hwOPP8Cf7p2JDOnTuH6zh2Nam4dOtj4/MS9VS9GUFTJUPW9WdnndJ373nqP2xa/zOeVEBKoiPMWJCGEOAHcXolyC4AFoIeZV3e7QuEvFnvjjTeWW27x4sVMmDAhYIFtWXxisXXr1q3UtTVNq7C+S4Hy7uGVV17hlltuuQAtOnMuh+8hAFkf4tPXDVXHHJR3LVKZdBsBqdd9xySQjDQVfh6UolS8gDXAEEnY7OEU6RfVd/lH7ZVTjVFCkoxrizIL4SuDULXA4UlJCnlRWVawe9dDWRJrYo2KQBw+RJjVytBO7bHUqUvf2GgeHXENWXmnsCTEc8uUUumyvg3qUXDgd34pKqIusOaXHew4epSxXTrxp3c/oFZMNMfy8rmuUwfe31i6wDwmKoq8Snhr1c2GfcHZhM+E6jBQh4D6ftv1vPsuGXxisc888wxOpxO73U7v3r35+uuvAf3Nef78+YZY7NSpU2nbti133nknqqpy9913G2/xPrFYn6wQ6GKxvrQRf/7znxk4cCAOh4OuXbty+PBhmjVrxt69ezl8+DDJyck0a9aMFStWMGzYMGbNmsXKlSt59tlnKSgo4N577y1Xi2/SpElkZmYiyzKff/45O3fu5Pbb9XeE0aNHc+edd5KWlobb7SYxMZF333034Pzly5czf/58PB4Ps2bNon///owePZrCwkKSkpICymdkZPDCCy8Aehj5ypUr2bx5M5qmsWTJEjZv3mwIys6cOZOYmBgefvhh3G43U6dOZcqUKdXefn9NwBMnTnDdddcRHh6O1Wrl/vvvB6jwHho0aMCCBQt45ZVX6NGjR4V/QxcdviAJLVCOqKqQyhniC9Dz8x3zaemVCZLQ02xUcohPAps3BUjlVRkgLqnixIvlUtZwlcngWxmsdeoiOQsrzKbrOZmD/xJe2R5GmNVK96taUqPIRZ3YWOPYZw8Gijr/a9ItbD16AM3pJLKbvs6taONPCI8HVdPQhMCjaYRbrbjtYRw7coSoMDt7jmcTFxFOhN3GrqPH2X7kKN2aNGL7kaMkREZSJy6WjZn7uTq5LvklJXy8aSvH8vNpkJDAvuxsrqpTh2/3hDZEd/TrH3J/ZakOA/UD0FySpMbohulG4KaqvkjW3/9xznUk3nN3yP2Xg1is2+3m4MGDrFu3ztDCmzFjBi+99BItW7ZE8+bPWb58OeHh4Tz22GN88cUXNG/eHNA9iOeeey5A9LV58+ZBIq/+uFwuQ728b9++REREsGbNGv7zn//w9NNP06ZNG0NNY8iQISxbtozo6GgGDRrE+PHjsdls1dp+fwO1cOFC/vCHP3DjjTcGqINUdA9z5szh5ZdfZv369WzYsOGSkkQqHeKrnBbfmWKoRfgZP1t4OGHeaDjwH4qTvEN8gTp4slfBvIKL+G1I2HwReiHmoMqrp/5VrX0F/Ks67XmWmjWh4KSxXVZfMsCbKi5Gzs3DlVNAzltvUfj990Q6C9EOHUaKtIOqeufhBFJxMbacU+DRkNAQZdbsWZKSSGrbjmM/bDCCQipL06vbsf3nX3F7ClBkGQWweodcw6wW6kdHYyksolZUJKrdjicqkjqxsaS2aI7k8dA9TM9ULGkaXVJSkD0e1JgYhg4djEBCjQhDs9kocXnIySumblw4ktdLl4CcozlYnecmiHtOBkqSpLcAB1BTkqSDwBNCiJclSbobWAUowCtCiF8qqOasKM+4nCuXi1is1Wpl0qRJTJgwgYYNG/LUU0+RnZ1Ny5YtAf1hUFBQwLRp0zh06BDHjh2jefPmxgM+lOhrkyZNgkRe/fEJ0gLMnz+fzz//HLfbHVL1YMuWLaSnpxvXysrKMmSTqqv9/g+Vffv2MWLECIAAxfOK7iE7O5uGDRtisVgCvqtLAllBaALhclVPmLmxDqq07qj4BJp1Ll0P4/OAdLFySZ8PKxP1d9ohPq/3VatOMnUaNeGgr0JA888+W149fmKvUpl99mbNQv5/17zrTpAkEoWbrJ07CDt6HEWWKfzfMjz2MFwHDlDy6y849x+gbu4p5OX6y2cekOeV6ooH3Nu2E+et84QkkWSxIPulZE8GVJsVseVXtLgYImrVofBkNtFJdSjZuQNJ1Yj3uJE0DRlQLQpoAnd0FIqmUXjkBDF5OUhFxYR98wMnT+ZQC9C8C53dMdGoNhu23DwUp0s3Jn4ISUIND0PIMpai4qDjodAsFiRVRQrRb3WAwujo09ZREecaxTeunP2fAJ+cS90XCp9Y7IABAwBIT08PEIv97bffjLI+sViLxWKIxSYnJ4cUix0yZIix7ROLBc5JLDY5OZmUlJSQ96GqKuPGjWPixIlMmzaNH374gcTERHbu3ElKSgqaprFq1SpSUlJ48803mTlzZsA/p0/0ddWqVSiKgtvtxuVycf/99yPLMoMHD2b8+PHUqlU6ZOJr/4kTJ8jIyOCrr75i9erVhlCu/3106NCB999/n8jISNxud5BeXnW03//6PkHZVq1asXXrVuP7qegeatasyf79+1FV9ZLynkA3CK6Dh1Dz8rDWqVMN9QeHmQeV8R/Ok2Q93UZQkERFHpSkp9xwe2jQpDnhTZsBpQrhAQaq/Eb4/9I/e39baiQYChZ6xQJycij48ktce/Zg++pr4n/4QW83cGqDnodMiojAEheHHB5OUWQ48lUtEHY7LUeMwt6sGTlvv8Mv27dSr15D8o4fQz2RTRIWThTkIurWRXWWEG4Lo+joEZTiEuyShHLwMJ79B7GqHkqyc7DknARNYFc9CFnRhWzdHpAg8tARhCRRLASRkoRqt6HVSyZu9GiO7d2Nui8TSdOw5eZhy83DFReLFheLB1DDdS9IKS7GUliEpagYhKAkqSYlSTXRLFa93z0ehMWCXOI0FllbioqxFBThlmVyhUJchFWfz5MkkOCIpqBGR3HG+kZ+mBowZbhcxGLvuusu0tPTUVWVmJgY2rRpwzPPPMNtt92GJEmMHj3aEHf98ccfiY2NNbwP0B/UZUVfp0+fHiTy+uyzzwal5oiPjycqKor+/fsbKSxAHxYdNWoUDz74IHPmzGHEiBEIIUhISGDp0qUBdeTn51d5+/1Fa6dOncqYMWNYtGgRiqJgtVpx+73NhroHi8XClClT6NmzJ337Vk6n7KJBlnEfPEj0wAFItmqQOvIpildooALG8xAeNXChrqxUbOBk2Ts8qaeNl202bI0aYalZE6kwPzC9ehlDF9mrJ/mfrwmcB8PvsxDIp06hlRSjFRRw8L77iV23Drm4WPfSAHtKCvLQIRw9cRyREE+7qX8gKr4GFu9LWv5PG8l863Uiu3Wl66ixWLzPAElR8ERHobRvi7OkEOe+TCLDY9mXn42lTh3YtQd7TCz50bqWnW/+qG7KVRzeuZ2e148n44VnqVnk5ugpPbrOoih4VFVvt9uNvWMHUnJL2HbsdzSXi8huXWkycCj7V39CcWyUYcR9KNHRqPn55fZ1ucQEe0Q+LT5LmbTweTnF2Czn5q2bYrEmVyS+5QGyLDN8+HAWLFgQMMR4MXM2/wfFmzdT8ttO4sZef8aT+0IIPFlZeI5noRUUINwu5MgolLhYrPXqIdtsOIuK2LjiQ1r0TKVGcv2Q9eRlH+fntXpqFHXrz3QcOgKhCaJ69/Iez2LX99/QafjIkOfnf7EW1759aEVFRPbsQUSnTnzz3hLqXdWaI7t3orpd9Lx+PACekyfJWfKmce7R5o04umY1A575C7LNhufUKTY++gjqsWPE5+SiZmejuLwvKBYLtnr1yI+JRGnZkqbpo7A1boylRg0O/LyF3xa/ghwZQbfpfyQqoUbp/W38ke+9BsrXDtDnyzfv30XTvv046jVQrcNj2ZaXjbWubqBSGjVn6059rVL7e+9n1/frqdu8JYd37fAzUC6OnNJT0hgGykt4u7a0OFXM1mO/o5WUUOeaEbTq04/vPngbzeWmuIzHf9YGKgRuVeNYnjNALBZ0wVibTWH8v/9tisWaXNq8+OKLfPhh6WLA0aNHM3369Gq7XkFBAcOHD8flcjFw4MBLxjidLfaWLbE1a15p46QVF5P36UryPv2Ukl9/RfXm6gpCUbA1aIC9XVtsFqB9+c+gwFxRUpCqhf9CXbWgAC0/H2QZ9VQunqwsSnbtQvJ5SZJkDOkKIVAUBbXYQ/HPv+jzQbt2UfzTJjw5OWj5+SjhYSSVlHDw7rvxHDmCc+8+YrwPeEtSEs66dShpczUthgwjvFMnLPHxfPPeEiLjEojoXHpP9Vq15jfQRTDKentn+K6v+EXkWRQFm8WKy+NGVhR6Xj+efZs3nnXdtnJT0Fc9VkUOMk4+ius3Cbm/spgGyuSiYPr06dVqkMoSExPDV199dd6ud6EJqe8WAueuXeS88y65//sfWn4+toYNierbl7CWLbEm10WOikayWtEKC1BzcnDu24fzt50UfrGWyLw8ji/7hOK+DmJGXEO0wxEwnBg4ryojVBXZYkFzOnHt2UPxb79h/fQT9vztJVz79pXbRikigpOLFqG5XMTERFNSvz7hWVlEHD1Gpm9iX1GQLBaU+HisdergiQxHPXQIz5GjWJPrEdnXwYFtW8iPsNOh3yCytvwE7dsQ7Q2q8aGUiaqTKxUBWd5LgG+/bm2stZJQL4K1StWJqGjhdSUwDZSJyRWO5nSSv2oVOe+8S/HGjUhWK9FDhhB/w1jCO3eulNflcZaw8Z9/o87JPIoy1pG/ejVKXBzRgwcTdvXVWJIScRYVYvtpM3JeAVLmfrJ/3oGam4fn6FGEd/7PYrNh7dyZ2NGjUeJiQRMosTFYEhMp+nEjxVu34j5yBFv9+tgaNuDI+q+x5udDbCwlzRrT7NqxhF3dCikyklN+Q3xFrZpz4tNP6DD3Od3AOp3sfeoJ1JLicue9OqSNwGItb75OBPeLMaV1OgMVUE1wKd/5ftMvkixVIsmhX7Wn87iqJp9HtWMaKBOTKxTn3n2cevddcj/8EDU3F2vDBiT96U/EXqsnCzwTZIsVtX4ycROnED17NoXffMOpDz8k75NPOOW3gNqX81az21Fr1kSpWZPowYMIb90aa3Iy9hYtkO2hH8Sa04kSH4/n+HGi+vQmvH17djeoTVzLq8nLOk7JiSxi0vRoTI9XQNXeIgXhdJU+9Mv+LvvZj3C/NVwhKXOeEuftszLVWevVgwqSE5aHf1bfzt36ULTxp9JjlRnykwJ+BSBHRaF6I4kvZkwDZWJyBaEVFpK3ciWnln5A8U8/gcVC9MCBxN8wlohu3c5aZcI/3YZksRCVmkpUaipCCNyHDqHm5FCSn8dvP29GrlEDdcdvXN2xK0qNGpXO7mskLvSTKfIhl9EX9Bkke9Om2Js25XdvcIYRZh5YmtiISLQalU9xrwuxB9Ziq1+PyG5dg9Kix40eBevXBpxb2Wtc8pyjasllJDZWtVwOYrEOhwNPmfDSs2HlypWsWBGcFgD0sHafjFNVi8Gawq9Vg9A0in78kcMzZ7KzTypHZj6GmpND0p/+SPOMtdT76/8R2aPHOUkgSZKEJMlBczSSJGGrV4/wNm0Ia9sWatRAslr1IAnPGcouSd6khRJBBqpuSkvqNGvhf2HjnMDt0B5UUkw8bfqXCrVWrj2nWwxcdj80atcx9LFztkYh7usiQCvHG64spoEKgb9YbEWczkBBqVhsZTldfReCtLS0kHJPALVr12bmzJnA+VErPxsuxj6tboQQFG/dyrFn57G7X3/2T7iZvE9XEjM0jYZvvkmTT1ZQ49ZbdQmfKkKSpNMs1JWMxbiSJIOmntkDVZbAt1aqzOR7fJ1kGncIEUHoNy8U0aWzn2CtVOrpnM1DvazUEaXaFBXN2dkjA9O+y1GRhLdpXc4lRMjP3j0AtEpuVF4Dy22Dj+iw0mSO9mbNTlv+QmAaqBD4xGKLiopwerWk/L0fh8PBhg0bDLHY119/nS1bttCrVy+6d+/OG2+U5mnxicX6s2bNGrp370737t0Nr8fhcPDQQw8xceJEZs+ezcSJExk4cCCTJk3iqaeeonv37sai3pUrV+JwOOjcuTOvvfYap+PAgQP079+fXr16MW/ePED3fIYOHYrD4WDGjBmcPHkSh8NBv379uPfeQBHKxYsXs3DhQjIzM+nTpw9jxoyhU6dOHDx40PByli1bZojBrl69OqgNkyZNom/fvvTr1w9N09ixYwcOhwOHw8GLL76I2+1mwIABpKamMmbMmACFDdCFX1NTU+nZs6ehlefjxIkT9OvXj2HDhjFy5EgyMjLIyMggPT2d9PR0Vq1axfTp0+nbty99+vThwIEDACxYsIDu3bsbQrGXOkLTKN66leMv/B97Bg0mc+wNnFyyhLCrr6buc8+R8tWX1H36aSI6djjjtVCV4XRKEJLhAelDdGUX6laq/nKG+EJczPsrUKkidNlKN6HMJc7QgyqnDktCjZCNSEiuR2xS7QrPt3mV0tuk6qKszeo3PqNr+7DUSAAqH+15vrhk56A2fHxuMu4AXUeEjtG/HMRi/Zk3bx5z5syhT58+pKWlcfPNNzNv3jzuv/9+Bg8ejKZprF27FofDwezZsytMOVBQUMC6det46623WLp0KSNH6osq09PTA8Rg/TGFX6sPtaCQwm/WU5CxjoJ16/T1SopCZI8e1LzzTqIHDkCJOc1kfxWhG5DyDY7Vbqdu85Yc27cHSZERqufMjIMse+c0pNOfF2ooL9RxKvZ4Kr5E2Si+03tQOqH+v4L3xdeuS3ztyqXpsdhsuMq5dtdrRvPDrzsodBYHn1gGraSkUterDBE2hbjoczN4l6yBKs+4nCuXi1isP3v27DFEUNu3b8++ffvYuXOnMXckyzKpqamsW7eO8ePHG0YsFK1atUKWZZKTk9m9e/dprw2m8GtVIoRAuN2cfO01CtZ9SdGGDQi3GzkmhqjevYnq14+oPr1RykhgnQ8sNnvQuiF/ZEWhXqvWHN+/1zvEp52ZcdBVZvXhuUp6UOUaKN9cFqDUrAkHgjPRVow4I09Jb0rF5Ss66ju3rIJEcKv8QtP9hjBtFguF5yYsfsYkRNqIjDHnoKoUn1jsypUrWbt2LUeOHAkQi922bZtR1icWCxhisW63O6RYrE8wFUrFYvPy8s5JLHbNmjVBWnyhaNq0KRs36qvSN23aRKNGjWjRogXfffed0R5VVXnyySdZsmQJzz//fLl1lW1Lecf88Qm/vvHGG2RlZQUIv/qu7xN+XbduHWPGjAkp/Pr555+TkZHBli1bQgq/AmzdutXYH0r49amnnkIIcckIvwoh0EpK8Jw4gevAAZw7duDJyuLYM3NxHzpE/IQJNHjtVVLWf03yC88TO+KaC2KcANoPHobVXpk3Zt3QCI96RlFekizrSuy+Yb5KnRS6nP/fT2S3btS8845Kt8OooxyTEur/QI6MxJIYOkrQZ1TONEzCVr8+lFGmD7Pp/V+VEnbWSiZbrQ4uWQ+qurhcxGJ9gQsADz30EJMmTcLlcjFixAiSk5N55JFHmDRpEn/+85/p2bMnaWlpPProo7jdbsNTue+++yo0VmXxF4Pt06ePsd8Ufq08QtMQJSVoxcVoRUVohYWG0KdktSJHR6PExdFs7RfVokp+LpQN9S4PSZb0uSTVc4ZBEnpwhFR2Dirks/j0ARDRjn7kf7pC98gq2faAa5bJQ2VcKsQ1w1tfXfriEKK9tkaNYNf28i8XwuDIkRFI7sD7LJsVoDysdWpDTm6lylYWyWIhrE1rijdtrro6TbFYk0udS1X4VQg9P5MoKdGNUVExWkmxsQpTsliQIyP1n6goPTxbki75/4PNn32CumMHjaLiiejalfDWV1fqvOKff8F9+BDu338nsndvwlq04Jv3lpDc4moatm0fUFYrLOTEK4uIHT0aW71kfln3ObnHjwaIuP761VpO7N5Jnyl/OKP2r/7jdGS7nb5P/BmLn5ST6nHz/YfvYgsLp/OIawPO+ea9JaR0740ky2x9fTGtI+PZVVtf2BseE0uHIdfw5SN/xOlx0+mBP5FQt17A+QXr11P80ya2/b4XVVNRZBlrSnOuckts2rODnn98hKL3lqLUSGDjT99T/9oxtOjem2+XvkWXISPY8vx8coUHrUifh4rs1hX7nkxOZh83tgu/3xDyfq116+KuRCSyHBZGeLu2Rj2S1UpExw70vH68KRZrcvFgCr8Go3tGTrSSYt0glZQgSkoQWqn4qRwejiUhATkiAik83DBIlxv6VNKZB0nIkREoMTG4qfwQX0XFJECJiiq/QAWIkHNQ5XttXUeNRbFYOHnoYNCxs7t+2R2i4m0grFUrin4sFaAtb75Q8hPiLXs1S60kPMeOB59UTZgGyqTKuZKFX4XHg3C50JxOhNOJcHo/u1z4/tElWUYKC0OJi0MKC0MOD0ey289poeylhBFurmpndM/2xo2xN25MyfYd5x4kcbpjFSDb7UgREeW2QQoROm+p5NCbt4YQdYa61hnMxVURlpqJpoEyMblYEULoRsjt1ofnXG6E24VwuhAuZ2BiOElPqieH2ZFiY5DDwpDCwpBstsvSM6o03mg8caZzUMb5VHodlO934w6dKSmomvxHYW3bAMGRhEba+9PdUlW9iCgKeAIXoYf8uyqdHAvcX8bLUuLikOw21ONZVdO+KsA0UCYmXoQQoGm6AfIZIZ8h8vtd9h9bUixIdhtydDSyzY5kt+ke0ZVuiMpBV5SQwHPmodq+8yt9ntcYRMTEEhETG3jsbNc/GWoUoY9bKlIdl/Tou/iBQyHjs7O6PoC9eXPkqEhweo2u908yYGguaJ1Wmc0yx8NapABQZBooE5Pzh/AaHXyGx/tTdlt4PBBCFkmyWPQIuvBwpJgYfW7IZiv9fYUMzVUVpZJIZyh1ZFQgV96DOluZiMo0o+xQnvdSLXulVnyeRSk35FwOD534L2hJh728NCDe8hUeLXPNM1CPqH3V1RwuLMSVmRl80BIYCSlHRqJYzmRoM0Tbzunsy5jLQSz2bDhbgdbNmzfz8ssvl3vcF7pfGf3CUPiMjOZyoRUXoxYWoubl4cnJoVe3briPHcN9+DCu33/HmZmJc88eSn7bScmv2yn59VecO3fi3LsX14EDuA8fxnP8OGpuLsLp9AYoRGCJT8BaqzbWevWwNWqEvVkzwq66irCWLbE3bcrgm2/GWrs2lho1UKKj9SE70zidMbokkv4wOysPU5I4reExhvgqKHLmV64UlooEUk9jOWwN6p+mdhHwq7J3oa/ZCl02vF3bwKjDiv6mFRlrraSAXZHddDX6gIzJFgv2lOacK6YHFQJ/sdgbb7yx3HKLFy9mwoQJAQtsy+ITi61bycVumqZVWN/FSvv27WnXrp2exlsIPTpN04zPf33mGdTcXBYtXMiNw4ZhkWWEJkDo5YzPqobQVFBVow5fneUh3G48WVn6WhZFMX7LNrv+2aJnV/X94Pvs18+Xar9fqkiK92F5Nn0uVULqyCha9WYoukYi+SeyyheLPSfTV0mDU2aBbsWxIKc31raw0J5beVhq1MBz4kT5BU6jy1hZzP/IECxdupQ77riDosJCSoqLEapK7169jGEgR9++fLd+vS4W268fr77yCps2bKBXjx5079qV1155Ba2oCOHxMG3KFP7+f/+HWlCAUFXU/HxW/e9/dOvShW5durDqf//Dc+oUfXv35o/33suEG25g1sMPM+GGGxjQty8333ADc2bMoFvnzjzx8MO4jx9n+Vtv07dnTzq1a8crf/sb7iNHUPPz8WRn4zp8GNehQ7gOHeLm668ntXt3HD17UpK5n61ffEHf7j3o2707zz/xBAW7dtGvZ096d+3K6LQ0inbuxLl/P2p+Ps7du/lwwQJ6d+lC944dWbZwIXnbtjG0r4PUrl0ZkzaUku26d1L866+sWrSIR/7wB0q2b6fNVVcxbtQo2rdrx4YVK3Dt20efvn1Z/8knbNm6lUHDhvHqf/+L5/gxPFlZqDk5aPl5PPbUUzjGXMvgceM4cvIkx/PzGXnHnaTddhtPLFiAtU4dJj72GENuv5306dNx1qypj8WHhxN29dVsycsjbdo0+k+cyJtr12KrXw9r3TpYk5JQIyMZPWECw669lpsmTuTV114jMzOTfv36cd1117F48WLmzp1L37596datm6EusXz5cjp16sSUKVMCFv+anD26B1UmDcYZVcDpPddqjOJL6d7rrM47F/wf9hEdOyCHlyqRp9Spj91vuyzCq1ZzOoMRXbOcfFgh3g3l86TveFF7UO5Dhzj00EPGW7Xnuutw7T8ACL77bLleyOg8UaYjReCxsmWBro7B3o/C+4IuQAg2fvUVM8aOpX/btnyyaBFDU1PRiosp2bEDAK2oiHaxsbRt3pzlf/87FouF6+65h5dnz6ZuUhIDJk1iVIcOaPn5pDZvzl1LlpC7YwfC6cS1fz9z5sxh2b/+BcDI228n9Y03EE4n13TtSrf27fnzv/5F24YN+e/jjzNi2jSG9+zJQ4sX0+uGG3jk5pvp0awpKxcswKOqDJ48mXEDB+prawoL0XLzQAK328PBgwf57LXX9PFrt4vH587l73Nm06JpUzSvlt2HCxcSHhbOEy88z9rvv6dZ48b6GhXFwl8XLeKzd95FExojJk6iecuWJNZK4n//93/ehfSlk9VKbCxyZCTWWrXIys3l5Zdf5qetW3lr2TK6pKUhhYXRe9Qo2v/733y2apW+4l0O1FX7fscOvt6wAVmWEUJw33338eCMRwxBW1mWefXNN4mIiGDhwoW89/HH3HbbbUYds2bNYtmyZURHRzNo0CDGjx+PzbuQ8qOPPqJnz5488sgj3HFHqazN8ePHWbNmDYqiUFRUxIwZM9i9ezdPPPEES5YsYe7cuaxbt46cnBz69et3jn/RJuB9UMpnb6AMRfSKypRerOJ2nAXlihtUxihWAZLVWqq5J0lE2ELMIfm1UYmKIrJXT5y5JwGoGR1LcYh2tuk3mG/eW0J0hw7k/fgjSmwsam6uMd8VZi2d94qvk8yxfftO29ZzFYK4qA2UpyCfUz98p7uLioIYNRLVVQJIdOk3GCPUUwJ8CseSN8+LsU/yHvI9TP3LEfRHtTszk1/37GHUvffidDpp3rQp6dePRbJasdaug0Ag2e1Y69bVfycnY7FayXU6ad69O0gSTZo351REBHJUFNbkZMZPnMi7336LFBaGvUkTlPBwEtu1A0nCGhlpeAHdR43CZrNhqVGD9j17EtayJfWaNaPjkCGEpaQQk5iItWVLfvnmG56cMQO3282OzEzCW7XCkpiIrWFDwq7SBVjDgCl33MHUJ580BFpPlpTQdsgQo38LCgq400+g9aouXbi6Xj3kyEjyIiPYsXcvw26ZAsDxnJO07NWLdt9/z5SHHqJTp0488MADRl2WhAQUr95Ys+bNiapThwZOJ3lFRShRUUiyrE8AyzKy1aoPtZXBJ8lUo0YNnn766SBBW1VV+dOf/sS2bdvIy8tj9OjRAedv2bKF9PR0QBeYzcrKMhbt7tu3z5A58heUbdeunSHY+/rrr7NkyRJkv+EJWZaJiooiKiqKxHImtk3OEF8UH+cwB+WvCVnRxM4FiKKs6J6sYaXzUz2uu4lv33+zzMkQV6viFBuVISImLqAdSlws5J4kpXZ9cosLy7bY+NRlxBhKCgv47scfkcPCiO/chaL8PFyZ+2lWqx4F3nKWxJrIYWGnVT+3VeDZVYaL2kDtraly4+QcY/uvESpK/LkPs/gMWMCYsXf7lZVLmf3iU/Rw9EBC4vabbmevcpISPOxUj7Fv1z6cePhdyUW1wn5xErtkJyw2gm8PbKNO3Tr8lrkHT6KVIlwcF3kMuGEo40ePRxMaR7VTlKgudp/6HQmJEtVFlucULuHhpJaHxWOhSCshTy3khPsUJcJFriefk84cPJqHnJIcnpn3DC/88wXqJNehc+vO5DpzcXqcFLoKyXfpYaeaqpE+Jp0x48Zwzx338NW3X5FQI4Gtv24lJSUFTdNY/slymjRrwuLXFzPrsVl4VA9uzY0mNOIS4mjdpjWffvopFosFj9uD0+nk/vvvR5ZlBg8ezPjx46lVq1Zw/1YgKOsT2LWEMFD9+/dn+PDhPPPMMyxfvtwQtB04cCCaprF582YKCwv58ssv+e9//8uhQ4cCzu/QoQPvv/8+kZGRuN3uAF0yn6DssGHD2Lp1K126dAECBXr/9a9/sWnTJvbs2aN7ZuhzU4WFheTk5JCVdfGE317KSJKEpFh8G2dTwxmvgyq3nrOhXAdKou2AtNAHvcTUTKLrqLFG+aA6LNaQmoan80T8j7dt0IykNu0Cjscm1SYv6zgR9jDDQEm24EhAa1gYbmcJYVddhRwRjqQoSBKEt21LXO9+FJw4ZrRdslqhAgPVJX3MOb8gXNQGqlFMI/47+L+62rZQicqJon60HuViKAAL4acGLLwjeyKojG87ZBm/7a/WfMUf7vwDYRbdbW5xVQu2fL+FsePHMm7oOByDHIYx6ze4H38Y/wfG3jyW6TOmc++t96JpGjdNvQlN0tvsVJ2oikqHbh3YsH4Dea48bv/T7Vx3zXUA3P3I3ZwoOYFbc5NVlIXFYqHQXcgp5ymOFR6jxF1CdlE2EYUROFUnhwsO02twL64fcz0tr25JRHQEB/MPkuvKJas4i592/cTSJUsZd+s47plwD6qqEhUdRWT9SKY+PJVbp94KEgwYNoBBIwbxwZ8/4KvvviI6JproutHsO7WPPFceu07t4rpbr6OXoxeSJNE0pSkT/jCBx+99HE3TqNewHieUE8ybNY+RY0dyIO8AJ4pPsDtnNyWeEvbl7uNQ/iEK3YUczD+IS3VxpPAIqYNSGTZiGBOmTGDk6JHIyMheAdBR6aMoKS5BQuLtd9+mT2ofpkyeYgjaPvroo+zevZu0tDTq168fJGk0Z84cRowYgRCChIQEli5dahwbNWoU119/PUOGDCEqKiqkqGbXrl1JTU0lNbU0TPjhhx8mNTWVjh07Urv2ub/ZmujRXsbD+WyDJPyMS8ighEo8GOs0S8EeceZv+BV5bFEJNU57fnmqEpG9e+EsLqrw3JrRcUQ1S+HYHm+qmzL3GdGpE57s7CDjl9SoCUmNmpD1938QGxtHARh5wsqWFUKgxEQH7JPDw/QIQ6+Bqkz/Vk7ZvmJMsdiLCH9DeqbbZ3OOb7uqDLwQAg0NTejpSTShBW+LMwsxlyQJWZJRJAVZkkN+VmQFi2RBkRV927vPV8aHx+PBYrFwxx13MHHiRHr06HFGbblYuNT/D3Z+9zXagd+pcewEsaNHYatX7/Qn+ZHz3ntE9eyJNTmZb95bQt0WrWjUtkNAGeHxkP3vl0i4eUKVpx8RmsaR3Tupm9LynOv65r0lhljsT58uo6QgP0DQ1odPLBYg8Z67+fb9txBCIyWnCOF0Ej9hPDlvLCHxnruD6u9+7Y2GV5b1938Q5XCwaccWYoucHN62hage3ekxZpxxTuGpHLas/gSAiNh4inL1Uaxuo8eyd9OPZGXupUXPVLYs/A9qfr4hNKtERxPW6ioKv9+AZLMx8Jm/GHWaYrGXAYZUiiE6eQEbU41oQuOdt9/hpZdeAnTj1rVbV2b/ebZhxFShlvvZrbmNfapWfvI2QDdisoJFtjDl2ikUFRbRpGkTWnRoQb4rH4tkwSJbDINmUv0YWnyc3RyUEh2NVM6CVr+LBP6uQiRZrhLjdEbXrI77OOM6JSP4okZyfWRZouL/vnPHNFAm5x1Zkhk3bhzjxo07feHT4PPMVKGiaqr+2/vZIzylnzUPLy99GY/mQdVUjhQcCarL54lZ5NIfq2zFptiwylasshVFPsO8QSbByBKcQ5h5TFrF8zwB9V6ma9uMka8qsFtnr/ZQ/W/QpoEyuaSRJEkf0kOBStoOn+fl0Tx4hB4Y4tE8hvFyCzdFniI8midoclqRFWyyDauiGyzfZ5tiwyab2nuVQUIqDQSoLgNynkK+zxdVOhVTpk9a9xtUydPK9mX1Tw+ZBsrkikOWZGRFxqpU/OYohMCj6QbMrblxqS7jc4mnhHwtP+DBIUkSNtmGXbFjU/Tfvs+m51WKJEuIc1gHdYZXq+b6LyzRAwYiXM6zOteanIzl8O9npCKh+AV4KPHxuHPzgsrERUaT6z67NpXFNFAmJuUgSZLuKZVjyPwNmFN14lJdOFUnJWoJea7Af1yLbCHMEkaYEqb/toRdsR6X/xxUdRmQS6pfvS85yS1aUZwf/MAv5yQA7E0aA+DJyamocEgsCQnYmzY97UtC2wFpbP18JUjQsE17ajfVVc8tNWpC5v6g8hJUKE12JlyeA7RVwOUgFutwOPD45ye6ACxcuJDOnTuzYsWKKqszMzOTyZMnV1l9Z4vPgEVYI4gPi6dWZC0axDSgeXxzrqpxFc3imlE/uj5JEUlEWiNxa26yi7M5mH+Q3Tm72XFyB/ty93Gk4AinSk7hVJ1VO5RzsSJRulBXrmbVhUvITtVq0oxG7TpWWKbmHbef+4XOsE8i/KIgFYs1OG0JYGvYAOsZRmNWBtODCoEpFlt1vPvuu3z99deEnYGk/+XQB7IkY7fYsVsCla01oelelqdE/1FLOOU8xckSXYZGkRXCLeGEW8KJsEQQbgm/7IYHJUnWk+3pGxe2MZcIRoRvOWnaz8RjCU60GHg8LCqapEZNOZ65J6DeikRwrWXXCFbR93ppPwWqiQ8++IA777yToqIinE59LNXf+3E4HGzYsEEXix0wgNdff50tW7bQq1cvunfvzhtvvGGUvf322/nnP/8ZUP+aNWvo3r073bt3N7weh8PBQw89xMSJE5k9ezYTJ05k4MCBTJo0iaeeeoru3bvz5JNPArBy5UocDgedO3fmtddeO+39HDhwgP79+9OrVy/mzZsHwNGjRxk6dCgOh4MZM2Zw8uRJHA4H/fr149577w04v7CwkOuuu46+ffsyZYouffTGG2/QvXt3evXqxZYtWwBdWDU1NZWePXuycuVK3n//fTZs2MCQIUPYvXu3Ud+ePXvo1q0bI0eOZMCAAWRmZrJ48WJuuOEGhg8fztatWxk7dix9+/Zl8ODB5OXpwx6zZs2iT58+zJ07txLf4sWJLMmEW8KJD4unTlQdGsc2pmVCS5rGNaVOVB2ibdHGou39efv5Lec39uXu41jRMQpcBWe8juxiRM8HVc1BEqUXq976L0VO0yeKxUKzLt3PU2Mq5pL1oHJXB499nimxgxqG3L9p0ybmzJlDWloaa9asYfjw4UFlunbtSvv27VmzZg0Wi4X09HSWLFlCcnIyvXv35oYbbgBg4MCB3HbbbRQXFxvnzp49m88+07NppqWlMXDgQABGjx5Njx49mD17Nh06dOC1115j8ODBjBo1iscff5zOnTsza9YsUlNTSUtLw+Px0LdvXyZOnFjhfc6bN485c+bQp08f0tLSuPnmm5k3bx7333+/IcS6du1aHA4Hs2fPDhpmWrBgAYMHD2batGm6qoeq8re//Y3169dz6NAh7r77bpYtW8Zzzz3HF198gaZpDB06lM8//5x//OMfRh/5eO6553jxxRfp0qVLgC5eXFwc77zzDqB7pz5R2HfeeYdrrrmGDRs28NVXX/Hmm28a/Xc5IEmSMS/lQ9VUij3FFLoLKXQXkl2UTTa6QsDJ4pP8e8u/6VGnB21qtrnkPKzazVJwW2yU7NhlGpBKci5Dv6efjwt93GKzExkX719RuTVYbHY8ZxmsURGXrIEqz7icK7t372bbtm2kpaXhdDpJSUkJMFDl/aHk5OTQqFEjQNd9O378uHFs/PjxvP7668a2JEnEeGVGFD/drU6dOhmfW7duDUDdunWNz1FRUaiqysaNG5kzZw5ut5tff/31tPe0Z88eOnbUx7bbt2/Pvn37goRYU1NTWbduHePHjzeMmI+dO3dy1113GWWPHj1Kw4YNsVqtNGrUiNzcXLKzs9m+fbthbI8fP15uX/mEWxVFMe7N//5DicLu37/fEHvt1KnTZWWgQqHIClG2KKJsUYBusIo8RbqxEtn8e/O/+dfmf5EQlkDv5N70rdeXnnV7GuUvZsIio5DCIyjhEgtmuAQJpUpR2ZeCziNGIyFVLMbrpWGb9uzZ+P2ZNu+0XLIGqrr44IMPWLhwIQMGDAAgPT0dTdOlepxOJ7/99ptR1l/4NC4ujszMTJKTk9m7dy9JSaVZJydMmMAQPxVxTdOMYStVLV2L7T/v4v+PW1Z8df78+SxcuJDk5GRSUlJOe09NmzZl48aNpKamsmnTJu65554gIVZVVY0hxPbt2wcYKF/Z1q1bo2kaiYmJ7N+/H7fbzaFDh4iNjaVmzZq0adOGVatWoSgKbre73IePT7i1c+fO/PLLL0H3H0oUtmHDhmzbtg3AyNV0JaHICtG2aKJt0eRE5PDVjV/xzeFvyPg9g4zfM1i2ZxkW2ULnWp1x1HcwsMFAakUGC/leNFTlOqWKvIuL3AC2dgyqOANvdVDJPpG9nrnQKpdPqjowDVQZVqxYYaQnB2jVqhVfffUVkydPpnfv3gwdOtQ4Nnz4cEaNGsXUqVN58sknuemmm1BVlbvuuitAjDQsLIw+ffqQkZEBwBNPPMGgQfriOJ9ROBNGjx7NyJEjad++PXFldMaOHj3Kyy+/zMyZM419vjQWLpeLESNGkJyczCOPPMKkSZMMIda0tDQeffRR3G634QXdd999PP/889x2221MnDiR119/naZNm/LKK69w11130adPH2RZ5p///CeyLPPAAw8wYMAAJEmiVatWQXNvPv74xz8yfvx4kpKSiI+PDxJubdGiRZAobJ06dejUqRN9+vShXbt2Ieu9koi1xzK08VCGNh6KR/Ow+fhmvjz4JRkHM3h2w7PM2zCPjrU6ktYojUENB1Ej/PQipucTqboX6gLRAwcgnUFwzoUgJjHp9IUozzhcxMa3iqJRTbFYk/OOT7RVVVV69erF119/HTL9hkloTvd/sC93HyszV7Jy30r25u5FlmS61e7GsCbDGNxwMBHWc8vRUxW4Dh4k98OPSJgyGSXq7Iclv3lvCXVTrjptePalTuE331C08SdDDPab95YAEj2vvwkAz4kT5Lz5VpBYbFmy/v4PogcP5qetP1CnWQuO7P4tQEw2FJqq8t0HbwcNF3771msUbNxIZLeuNO3UzRjis/28nVOuEgbOfc4oe7ZisWYUn8l5Z+/evaSmptK1a1cmTpxoGqcqpnFsY+5odwcfjfyIpelLubX1rRwsOMjj6x+n37v9mP3NbLZkbbmga65KPYKL2Au4iKhaqaMzLH6GQ3tV+VdlPhlMzjspKSl8+eWXF7oZlz2SJJESn0JKfAr3dLiHTcc38cGuD/hk3ycs3bWUprFNGZMyhlHNRhFtiz59hVWJT838HBfqxteuS0Jy1S8QvRQ4lzkhxWIlqkZN2P3baeuRZDl0sEVgY0o/nnWrgjENlInJFYAkSXSs1ZGOtToyo9sMVu5byQe7PmD+D/P5x6Z/MKrZKG666iYaxlRPdGwQVaTFd1WfflXQmCsLSZLoNlrP6pvYoFGV158cn0gt29kqpAdiGigTkyuMSGskY1LGMCZlDL+c+IUlvy7h3Z3v8taOt0itl8r4q8bTvU73ao3aMrT4LnHFkIuGMxkCrOZoPIuinJEAbUWYfx0mJlcwV9e4mmf6PMNnYz7jD+3+wLbsbUxbPY2xy8eyZv+a6lOuOG9q5pcHIV8W/HdVEOTgT8w1w7E1blw1jSpD92tvpPu15UvDnQ2mgSqHy0Es9mzIzMwMaPP54JNPPqFDhw68/PLLVVqvw+Go0vouZxIjErmr/V18dt1nPNnzSYo9xdyfcT9jlo1h5b6Vp81cfMacQ0Zdk2As8fHETzjNPBFgb9y4NMT/HEmok0xMeKSxLStKhdGAZ4NpoELgLxZbEaczUFAqFltZTlff5chHH33EW2+9xa233lrpc67Efjof2BU7o5uP5qORH/Fsn2fRhMafvvwTo/43ik/2flJlHpVUlQt1rwAqE8VniY8/bZmqpFmHzjRJKkcE20y3UX1cLmKxkyZNom/fvvTr1w9N09ixYwcOhwOHw8GLL76I2+1mwIABpKamMmbMmABVCwgWf3W5XAwfPhyHw8HYsWMDymqaxtSpU+nbt6+xmDnUfX7//fc4HA569erFokWL+Prrr1m2bBmTJk3i66+/Nuo7ceIE/fr1Y9iwYYwcOZKMjAwyMjJIT08nPT2dVatWMX36dPr27UufPn04cOAAoOsGdu/enfvvv78S37RJeVhkC8ObDOeD9A/4S9+/YJEtPPzVw9y4/Ea+O/LduV/AHOK79DkPyxQu2SCJtWvXnnMd/fqFjgC6HMRi3W43Bw8eZN26dQghkCSJGTNm8NJLL9GyZUs0TUOSJJYvX054eDiPPfYYX3zxBc2bNwd0g1NW/LV58+YkJiayYsWKoDe6//3vfyQlJbFw4ULDuwl1n7NmzWLZsmVER0czaNAgPvnkE9LS0njsscdo1qyZUd/ChQv5wx/+wI033hig3uFyuVi5ciUAffv2JSIigjVr1vCf//yHOXPm8PLLL7N+/Xo2bNhwRUoiVTWKrJDWKI3BDQezYu8K/rbpb9z22W30Su7F/R3vp0VCi7Or+HypmV/GVJT+4nLhkjVQ5RmXc+VyEYu1Wq1MmjSJCRMm0LBhQ5566imys7Np2bIloOveFRQUMG3aNA4dOsSxY8do3ry5YaBCib82adKENm3aMH78eDp16sQDDzxgXG/nzp307NnTqLu8+9yyZQvp6enGNbKyskK2f9++fYwYMQIgQPHcJ3oLMH/+fD7//HPcbjdXXXUV2dnZNGzYEIvFEtCXJueOLMmMaDqCwY0G89b2t1iwbQHXf3w916dcz70d7yXWHpzEriKMhIWmB2VSAebrSxl8YrErV65k7dq1HDlyJEAs1idYCqVisYAhFut2u0OKxS5ZssTY9onF5uXlnZNY7Jo1a4K0+Hyoqsq4ceN44403yMrK4ocffiAxMZGdO3cabVi1ahUpKSmsW7eOMWPGBBhfn/jr559/TkZGBlu2bMHlcnH//fezZMkSVq5cybFjx4zyPkFZX93l3WeHDh1YsWIFGRkZbNq0ieTk5JDt9wnKAmzdujWoj06cOEFGRgZfffUVTz31FEIIatasyf79+1FV1fSeqgm7Ymdy68l8eu2njL9qPEt3LeWaD6/h/Z3vn9n8lCxDNWfTvZy4KA15Oc+oquSS9aCqi8tFLPauu+4iPT0dVVWJiYmhTZs2PPPMM9x2221IksTo0aMZM2YMTz/9ND/++COxsbGG9wSEFH+dPn06t9xyC6qq0qRJE5KSknj22We5+eabSU9P5+OPPyY1NZWoqCg++eSTkPc5Z84cRowYgRCChIQEli5dGvIep06dypgxY1i0aBGKomC1WnG73cbx+Ph4oqKi6N+/v5GGw2KxMGXKFHr27Enfvn3PuF9NKk+sPZaHuz7MqGajeOb7Z5jz7Rw+2PUBs3rMomVCy9NXIMvm/NMZEHLk5kL333lQkT9vYrGSJDUBZgKxQojrKnOOKRZ75eLzwmRZZvjw4SxYsKBcb+tK42L7PxBCsGLfCp774Tlynbnc2uZWprWdhk2xlX+OplGQsY7o/qYSRGUoWL+e4p82BYjFyoqF7tfecMHapJ46xcnX32BX7XiadelBUqMmgC5IK0dGUuOWKUbZsxWLrZQHJUnSK8A1wHEhRGu//WnAi4ACLBRCPFteHUKIvcCtkiS9f6aNNLnyKCgoYPjw4bhcLgYOHGgap4sYSZK4psk19Enuw/wf5vOfrf/h8wOf82TPJ2mT2Cb0ObJsGifgVMkpDhYcJKsoC1WoRNmiUCR9vlaWZA4XHKbIXURCYS4oh7m64DB1o/TQbiEERwqOcKzoGAfyD1DsLkYgKHQXogmNkyUnUSSF+LB44sPiqRdVjzpRdcjMzaTIU8SBPD3y1SJbaBHfgi61u+DW3JSoJUa7Iq2RRFmjSAhLINYei1W2ntfhxkp5UJIkpQIFwGs+AyVJkgLsBAYBB4EfgHHoxmpumSpuEUIc9573vulBmZicPRf7/8GXB79kzrdzyC7OZtLVk7i7/d0VelOXAr5I2IrQhMZvJ39jf/5+Cl2FuDQXtSJqEWePo0lsE+LC4oy6Nh7byFs73mLt72txa+4K6y1LUkQSkSUWCkQxWSKn3HJhShhO1VmpjLiVJdYei0t1YZWtNIhIJj6rBCk8loSkZJKTGhFti+bQV58Ra4lG63g10bZoJrSaUL0elBDiS0mSGpXZ3RXY7fWMkCTpbWCkEGIuurd1VkiSNA2YBtCgQYOzrcbExOQCkVovlY9GfsTzPz7Pop8X8d3h75iXOo/GsdUjsVNVFLoL+Tn7Zw7mH+S7I9+hyAq7c3ZzqOAQhe5CWtdsTaOYRpSoJQDkOnPJKs4i15lLsacYl+pCFaEVN2RJJiU+hXaJ7dibu5cfjv5AjC2GMc3H0LNuT+LC4rApNorcRahCRdM0NDRqRdQi3BLO3u9XU7TzN471vYpfsn9h54Gt1FOSuLndFBrHNiYxIpEEewIe4SHWHouMTJQtCiF0j+qU8xR7Tu3hcOFhWsS3wK7YaRTbCItsocRTwo9Hf2TXqV3YFBs22UakNZLGsY0pchdR4C7gRMkJcp25HC08SoQ1ghJPCQdy9rFfPkKO5xgc303+4RX6zXoTBEtbvqR7ne5MaHX2yjTnEiSRDPzut30Q6FZeYUmSagBPAx0kSZrhNWRBCCEWAAtA96DOoX0mJiYXiGhbNLN7zia1XiqzvpnFDctvYEbXGYxqNuqCRaTllOSwLXsbVtlKQlgCea48ThSfYG/uXlbsXcHv+b8b3kZSeBKyLNMwuiGda3fGrtjZcGQDPx3/yRjmClPCaBbXjChrFFG2KCyShSZxTbi6hu45yJLMkcIjnCg+wfaT29l0fBPL9izTA0y6PMzo5qOJtEaeptU68REtKFILSbx6EqDPQSkWK91aj63wPEmSiLLp7asXHTotiV2xM6DhAAY0HHAGval7gq7MTDb++A3NuvQgKrk2xZ5i3AuXUBShkDx5Knbl3NLZn7coPiHECeD283U9ExOTC0//Bv25usbVzPx6JrO+mcXXh77miZ5PEGOLOav6PJqHjN8zWH94PXnOPBLCEqgfXZ/eyb1pEtckqLwQgu0nt/PWjrf4ZO8nuDRXyHq71e7GNU2voW3NttSOrE2T2CZVYkiTIvTlJv0b9Af0YUAJ6cyTAF6Emc8lScLeuDH8+A0AEdYIIqwRZCETS/g5Gyc4NwN1CKjvt13Pu++yoHnz5jz11FPceGP56ryLFy9m4sSJAeuX/Jk8eTIej8eQPurdu3eAnE9VMnv2bHr37m0srAVdPsmndFHdvPLKK9xyyy1nda7D4TBC8KuKzMxM9u7dS//+/aukvupoY3XUeTFSK7IWCwYvYNHPi/jHpn/wy4lf+EvqX8oNoCiPzcc3M+fbOew+tZsYWwwJYQmcLDlJniuPv/z4F5KjkqkdWZtYWyyHCw9zrPAYqlDJc+URbglnVLNRpDVOA3RvKtYeS83wmiRGJJ61wTxTZMlcenomnMuT6weguSRJjdEN043ATVXSqguMv1js6QzUhAkTyjVQUCoWW7duOaKKZdA0rcL6LjTlte9cDFR1kJmZyRdffFEpA1UdfX6xf4/nG1mSubXNrXSu3ZmHv3yYiZ9O5N6O93Jzq5uxyBU/hnKdufztp7/x3s73SIpI4rm+zzGwwUAUr1zS0cKjfH7gc7Yc32JEtNWKqEXbmm2NrMJpjdPOmxEyqToqG2b+FuAAakqSdBB4QgjxsiRJdwOr0CP3XhFC/FJtLT2P+MRin3nmGZxOJ3a7PcD7cTgczJ8/3xCLnTp1Km3btuXOO+9EVVXuvvtuI2WFTyz26aefNupfs2YNjz32GAB//vOfGThwIA6Hg65du3L48GGaNWvG3r17OXz4MMnJyTRr1owVK1YwbNgwZs2axcqVK3n22WcpKCjg3nvvDanF58+BAweYPHkyTqeT9PR0Hn74YY4ePcqUKVMoLi6mR48e/OlPf+Laa69FkiTatGnD3/72N+P8xYsX8+mnn1JQUMDTTz/NM888w7Fjx7Db7bz//vu8/fbbbNu2DYfDwd///nf279/P/Pnz8Xg8zJo1i7S0tKA2LViwgFdeeYUePXoY+77//nsefvhh3G43U6dOZcqUKaxfv56HHnoIq9XKHXfcwdixY7nzzjv57bffCA8P54033mDLli3MmzcPi8XCyZMnWbVqFQsWLGD9+vV8++23fP755zz55JN88cUXyLLMK6+8AsCUKVOoUaMGw4YNIykpKajNodrow+l0cv311+NyuYiLiyMtLQ2HwxFQ57Fjx1i5ciUlJSW89NJLdOjQgeXLl/PEE0/Qtm3bgIXHVwrtEtvx7oh3mf3NbF7Y+ALv/PYOt7S+hZHNRgYNCeU6c/lw14cs2LaAQnch468az90d7g6at6kdWZvxV41n/FWnTzdhcokhhLhofzp16iT8+fXXX43Pe/b89Zx/ymPEiBFCCCFeeuklsXz5ciGEEL169TKO9+3b1/jtdruNc/bt2ydcLpfo2rWrcLlcYtKkSWLXrl3C4XCIoqIio45evXqJ3NxckZubK3r06GHU9c033wghhHjiiSfECy+8IIQQYtCgQeKDDz4QQgjh64/CwkIhhBBut1v07NnTOGf16tUB9+Fr35133im+/PJLIYQQQ4YMEYcOHRL33nuvWLVqlRBCCFVVxZo1a8QTTzwhhBBC07SAehYtWiSmTZtmbPuu/9///lcsWLAgoH9UVTWu63Q6Rf/+/YP61+12i65duwq32y3Wr19v9OfgwYNFbm6u0DRNDBgwQDidTtGnTx+RlZVl1L1s2TLxzDPPCCGE+OSTT8Qzzzwj1q5dK9LT04UQQvz5z38WH330kVi7dq2YOXOmEEKILVu2GO3/9ddfxbRp08S+fftEq1athMfjCdnm8tro4+233xZz584VQghx++23i0WLFgXU6d9Pu3btEjfddJMQQoiePXuK/Px8ceDAAdG0adOgvqkM/v8Hlyqapom1B9aKm5bfJFovbi0c7zjEvA3zxGu/vCb+vfnf4p7P7xEdX+soWi9uLaZ9Nk38dvK3C93kC0rB+vXi+N/+bmyvf/cN8d0H71zAFpWy/t03xLF9e4zt43/7u8he+HJAGeBHcRY24JKVOmrSZHq11Hu5iMX6s2fPHkNktX379uzbt4+dO3caXp0sy6SmprJu3TrGjx9PWloaN998c0Advrapqsqf/vQntm3bRl5eHqNHjw4oF0pkVpRZQ1KeqGsoIVnh1djztXP79u28/fbbrFq1Co/HY3g3vj5KTk7m1KlTxMaWipfu2LGDjIwMI4FhnTp1AGjXrh2KonD8+PGgNmdlZVUoPLtv3z5DYslfzNZXJ8Drr7/OkiVLkGXZuH9ZlomKiiIqKorExMSQ39eVgCRJOOo76FuvLz8c/YGXf36Zd397F6eqp7epH12fa5tfy7XNr+WqGhfvmq/zRcjnzoWWOjoPXLIGqrrwicUOGKCHXKanpweIxf72229GWZ9YrMViMcRik5OTQ4rFDhkyxNj2iagC5yQWm5ycTEpKymnvqWnTpmzcuJHU1FQ2bdrEPffcY4i7Dhw4EE3TUFXV0Mtr3759kIHytW3z5s0UFhby5Zdf8t///pdDhw4FtNEnMrtq1SoURcHtdgdFLJUn6tqhQwfef/99IiMjcbvdWK16OO+JEyeoUaMGmqbRokULJk6cyIMPPgjoaUXWr18f1Ef+Qr4pKSkMHjyYv//978Y5hw4dMu6pvDZXJDzrE7MdNmwYW7dupUuXLgH9BPCvf/2LTZs2sWfPHm677TZA/+4LCwvJyckpV8n9SkKSJLrW6UrXOl3RhEaeM48wSxhhlrAL3bSLmpr1G2K1X/59ZM7ilmHFihVG2ggIFot9//1SpSafWOzSpUsNsdjevXuXKxbrwyeiOmjQIJ544okzbqNPLHbq1KkhxWL957sAHnroIWbNmkXPnj1xOBwkJyfzyCOP8Je//AWHw8Fjjz3Ghg0b6N27N926dTM8ifvuuy8oiWGLFi3YvXs3aWlpbNiwwdhfv359xowZw86dOw2R2X79+nHfffcFtd9f1PWDDz4w9vuEZPv162cEp8ydO9fY995775Genk5mZib9+/enf//+fPrppyH7qHXr1qxfv54bbriB9u3bU7t2bRwOB/369WPRokUBZf2FcX1tLq+NPkaNGsX69esZMmQIR48eDfi+fXTt2pXU1NSA6z388MOkpqYyZ84cateuHbLtVyqyJBMXFmcap0qQ0r03jTucsTDDJcd5E4s9G0ypI5OLGY/Hg8Vi4Y477mDixIkhgymqA/P/4MqjrFjsxcQ37y0JFouNiKDGraVRvdUqdWRici7MmDGDb7/91ti+4447jIzDlzLDhw+noKCAZs2anTfjZGJyJWEaKJNqZ+7ckKpWlzyrVq260E0wuUK4KBMWngfMOSgTExOTi5yLeSoGzIy6JiYmJiaXABGdOiJHVk4E93SYBsrExMTEpMqI9IuCPlfMIb5yaN68OW+//XaFZRYvXmykJg/F5MmTDckj0MViq4vZs2ezZs2ac64nMzMzoM1ViU9i6GzwLbKtSk6dOhUyhPxsqY42VkedJiaXCqaBCoG/WGxFnM5AQalYbGU5XX2XAuXdw7kYqOrgTAxUdXwvl8N3bXJ+MIMkTAx8YrFFRUU4nbr0ir/343A42LBhgyEW+/rrr7NlyxZ69epF9+7djfQaUCoW68+aNWvo3r073bt3N7weh8PBQw89xMSJE5k9ezYTJ05k4MCBTJo0iaeeeoru3bsbSg8rV67E4XDQuXNnXnvttXLvY9KkSfTt25d+/fqhaRo7duzA4XDgcDh48cUXcbvdDBgwgNTUVMaMGRO0KHf58uWkpqbSs2dPVq5cicvlYvjw4TgcDsaODUyUlpGRQXp6Ounp6axatYrp06fTt29f+vTpw4EDB1i2bJkhKLt69Wq+//57HA4HvXr1Clo463/9Tp06MWXKFENYdffu3QwePJi+ffvy5z//GSDovgCefPJJHA4H/fv3JzMzk8zMTPr06cOYMWPo1KkTBw8eZMGCBaxevRqHw0FWVhYLFy6kT58+9OnTh59++gnQpYsmTJjA/PnzQ7Y5VBv9mTJlCgMHDuSWW25h9uzZQXUuWrTI+C4/++wzAH744Qc6duzI2LFjyckpP6W3yZXDxR4kUW2cjYDf+fqpSCx2/t7D5/xTHpeDWKzL5TKEWn3ir6NGjRLbt28XQujCq5qmiaKiIiGEEDNnzhSfffaZ2Ldvnxg/fnxIAdXdu3eLSZMmBdTpY+3atWLIkCHGtq+Nq1evFo8++mhQH4YShi1LKGHVsWPHigMHDgghhLjxxhvF77//HnRf5YnDtm/fXqiqKt544w3x17/+1bhXIYTIysoSI0aMEJqmiRMnToiRI0cKIYRISEgQBQUF5ba5IvHX7777TvzhD38QQgjx7LPPGmK8/nX6+unUqVNi0KBBQgghrrnmGrF//36Rn58vEhISgvrlchCLNTkz8r/+OkAs9mJi/btviOOZeyssw5UmFvunxnWqpd7LRSzWarUyadIkJkyYQMOGDXnqqafIzs6mZcuWgC7vU1BQwLRp0zh06BDHjh2jefPmNG/eHAgt+tqkSRPatGnD+PHj6dSpEw888EDANX2CtADz58/n888/x+12h1Q9CCUMm5ycHFAmlLDqb7/9ZugEnjp1ikOHDgXdV3nisK1atUKWZZKTk9m9e3fAtfbu3cuWLVvo169fwP4WLVoQ6Y1ICtXmisRfywrK+hYr+9e5atUqXnzxRYQQxt/MqVOnaNCgAUCltBZNTC5XLlkDVV1cLmKxqqoybtw4Jk6cyLRp0/jhhx9ITExk586dpKSkoGkaq1atIiUlhTfffJOZM2cGGN9QAqoul4v7778fWZYZPHgw48ePp1atWkHtP3HiBBkZGXz11VesXr2aJUuWBN1HKGHYsoQSVm3RogV//etfqVOnDqqqIklS0H2VJw5bkaBs48aN6dKli6G16Buu8/9OQrW5IvHXxo0bs27dOgC2bt0a1E+gL2Jet24dTqeTXr16ARAbG8vBgweJj49n165dIb9fE5MrAdNAlWHFihXcc889xnZZsdihQ4cax3xisVOnTjXEYlVVLVcs1pfe2ycWCxjzSmeCTyy2ffv2IcViX375Ze666y7S09NRVZWYmBjatGnDM888w2233YYkSYwePZoxY8bw9NNP8+OPPxIbG2t4TxAooCpJEq1atWL69OnccsstqKpKkyZNSEpK4tlnnw1SPo+PjycqKor+/fsbHgTo4qmjRo3iwQcfNIRhhRAkJCSwdOnSoPv0Cat27NjREFZ9+umnueWWW3A6nVitVpYuXRp0X9OnTzfEYSVJYty4cQwePDio/tq1a3Py5Emuu+46FixYwPDhw0lNTUVRFPr378/jjz8eUD5Um0O10Ue3bt146aWXGDBgAHXr1jW8PH+uueYaUlNT6dq1q/FdPv7446Snp5OSkmJ4UiYmVyKmWKyJSTXiE5SdN28eDRo0YNy4cedcp/l/cOVR+M03FG386aIVi23erReJDRqVW8YUizW5pHnxxRf58MMPjW2fJ3Spc+utt7Jv3z5iY2N57733LnRzTC5RLmZHojoxDZTJRcH06dMvC4NUlldfffVCN8HE5JLFXAdlYmJiYnJRYhooExMTE5OLEtNAmZiYmJicNcktriauVu3TFzwLTANVDpeDWKzD4cDj8Zxz3StXrmTFihUhjx09epSnn34aqLzWnin8amJy+dCwbXus9rBqqds0UCEwxWIDSUtLC1DT8Kd27drMnDkTuLBisKbwq4nJ5YdpoEJwuYjF+jhw4AD9+/enV69ezJs3D9A9n6FDh+JwOJgxYwYnT57E4XDQr18/7r333oDzFy9ezMKFC0MKrvrSc5QVgy2LKfxqCr+amJwxZyPgd75+KhKLfeGz3875pzwuB7FY//bdeeed4ssvvxRCCDFkyBBx6NAhce+994pVq1YJIXSB1TVr1hhipmWFYBctWiT++9//nlZw1b+PymIKv4YWfj0bTLHYK4+LWSy2MnClicXeP6h6RDQvF7FYf/bs2WMIubZv3559+/axc+dOY+5IlmVSU1NZt24d48ePJy0tLUi+yEdFgqsVYQq/msKvJiZnyiVroKqLy0Us1p+mTZuyceNGUlNT2bRpE/fccw8tWrTgu+++Y+DAgWiahqqqxhBi+/btyzVQZdtS3rGymMKvpvCricmZYhqoMlwuYrG+wAWAhx56iEmTJuFyuRgxYgTJyck88sgjTJo0iT//+c/07NmTtLQ0Hn30Udxut5Fi47777uP555+vdLv8xWD79OkTcMwUfjWFX01MzhRTLNbEpJJUh/Dr2WD+H1x5FKxfT/FPmy5KsdjKYIrFmlw0mMKvJiYmVYFpoEyqHFP41cTEpCow10GZmJiYmFyUmAbKxMTExOSixDRQJiYmJiYXJaaBKofLQSz2bPBJF50pmzdv5uWXXy73uC90vzL6hVB9wqpVqRdYHW2cPHkymZmZVV6vicmliGmgQmCKxZ457du359Zbby33uG+hbWUNVHVRWQNlCsqamFx4TAMVgstFLHbSpEn07duXfv36oWlakBCr2+1mwIABpKamMmbMmABVC9DFU1NTU+nZsycrV67E5XIxfPhwHA4HY8eODSibkZHBY489BkCbNm246aabaNeuHZs3bzb6r2yflSWUsGpWVhbp6en069ePO++8EwgW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GigTExOTixwlJvZCN+GCYA7xmZiYmFzkhLW+mrAWKRe6Gecd04Mqw+bNm3n55ZfLPX7PPfcAusRQeVp9Z0vv3v/f3v3HVlXecRx/fzsu4MZYE4pZh7jM6ZjOsosaXIWEpS4bygScpnUhUhA2AdFoMs3WLe4foME/2AJZYS5iG6jQ0S2kFJcOK9emZrKZtRsjpEBcFxmb/FLrSCvSfPfHvS39QVsu7e05t/fz+uve55z75Hv6zek3z3PPfZ65I9qfiIwNZoZl4E9CVKD6iEajrFixYsDjW7ZsAVJToERE5LK0nOL774YNfHx0eIvFTrj1q3y+pKRfeywW47XXXmPdunXk5eWRl5fHkSNHqKioIBqNMnfuXDZt2kRzczP33nsvK1eu5NFHH+3VR0lJCQ0NDUQiESorK8nKymL58uW0t7eTn59PaWkphYWFvPfee0yYMIHq6momT57c/flDhw4NuABtLBbjhRdeYNy4cZw5c4bHH3+cHTt2MHHiRGprawFYs2YNLS0tXHfddezcuZP29naWLFnCJ598wsyZMykrKyMWi7Fx40bGjRvH+fPnqaurY9KkScP6m4qIjCSNoAZx+vRptm/fTllZGRUVFd3ts2fPJhqNUl9f3684Abz55ps0NDRw8OBBcnNzKS0t5ZlnniEWi7F+fXzbrPLyct544w0KCwupqqrq9fnnn3+empoaGhsbqays5OLFi72ORyIRampqeOCBB2hqaqK+vp5p06bR1NREbW0tN954I6+//jpr165l27Zt5OTkcODAARobG2lra+P48eMAjB8/nn379nH//fdTX18/0n8+EZFhScsR1JVGPqlw8803M3HixKQXT33uuecoLi5mypQprF+/nmPHjnUXpqysLDo7O3n22Wc5fPgwbW1tPPjgg70+P9QCtD0XhJ06dWr3667FYXfv3k1dXR2XLl0iPz+fc+fOsXr1aj744ANaW1s5depUr360OKyIhJFGUIMYbPHUSCRCZ2fnFT9XUFDAjh07uP7666mtrWXGjBm89dZbQHz7jObmZi5cuEBDQwNPPPFEv75nzZrF/v37icViNDU19SpOfeO60uKwS5cuJRaL0djYyIYNG3jllVe6t9iYM2eOFocVkbSQliOoMFiwYAGLFy9m5cqV3SuFd1m0aFH3xn979uxh3rx5FBcXs27dOu655x5KSko4ceIE8+fPZ/r06f0K0FAL0A5m4cKFPPXUUxQUFADw9NNPU1BQwNKlS9m7d+/wLlpEZBRpsViRNKP7QNKNFosNSFVVFVu3bu1+3/WUnoiIDE/aFai+u8kGraioiKKioqDDkAwR5hkPkZGWVg9JRCIROjo6gg5DJDAdHR39dm0WGavSagSVk5NDa2tr0GGIBCo3NzfoEERGRVoVqOzsbLKzs4MOQ0RERkFaTfGJiEjmUIESEZFQCvXvoMzsI6Al6DhSIAc4G3QQklLKcfCUg+B15eCL7j412Q+H/Tuolmv5cVfYmdnbY/G65DLlOHjKQfCGmwNN8YmISCipQImISCiFvUC9GHQAKTJWr0suU46DpxwEb1g5CPVDEiIikrnCPoISEZEMpQIlIiKhpAIlIiKhpAIlIiKhFMoCZWbzzazFzE6Y2Y+DjieVzOwzZlZhZr8xsyVBxyOpYWY3mdlLZlYddCyZyswWJ+6zKjP7dtDxZCIzu9XMtplZtZmtHur80BUoM/sU8CvgPuA24PtmdluwUSXHzLab2Wkz+0ef9isV3u8B1e7+A2DhqAcr1yyZPLv7O+6+IphIx64kc7A3cZ+tArTL6AhJMgdH3X0VUAjMGarv0BUoYDZwInFDXwR2A4sCjilZ5cD8ng2DFN4bgHcTp3WOYowyfOVcfZ4lNcpJPgc/SxyXkVFOEjkws4XAfuDVoToOY4GaxuV/2AAnE21pw90bgPN9mgcqvCeJFykIZz5kAEnmWVIgmRxY3EbgD+7+19GOdaxK9j5w9xp3vw8Y8isN/UMcPQMV3t8DD5nZVmBfEIHJiLpins1sipltA2aZ2U+CCS1jDHSvPQl8C3jYzFYFEVgGGeg++KaZbTazX3MVI6gwrmb+b2B6j/c3JNrGJHe/ACwPOg5JLXc/R/y7DwmIu28GNgcdRyZz9xgQu9rzwziC+gtwi5l9yczGA48ANQHHNBIyqvBmMOU5eMpB8EYkB6ErUO5+CVgL1AFHgd+6+5FgoxoRY7XwSm/Kc/CUg+CNSA5CV6AA3P1Vd/+Ku3/Z3dcHHU+yzGwX8CdghpmdNLMVY7jwZizlOXjKQfBSmQOtZi4iIqEUyhGUiIiICpSIiISSCpSIiISSCpSIiISSCpSIiISSCpSIiISSCpRIkszsp2Z2xMz+bmbNZna3mf3czEr7nBc1s6OJ161mlnOV/S8zsy+kInaRdKICJZIEM8sHvgvc4e4ziS8++i6wi/57DD2SaE/WMkAFSjJeGBeLFQmzXOCsu38M4O5nuw6Y2ftmdre7H0o0FQLfGaijxJ45LwF3AQ5sJ17s7gIqzawdyCe+n84mYBJwFljm7v8xsxjwN2Ae8Xv5MXf/8wheq0igNIISSc4fgelmdszMysxsXo9ju4iPmjCzbwDn3f34IH1FgWnufru75wEvu3s18DawxN2jwCVgC/Cwu99JvIj1XP7r04nz1iSOiYwZKlAiSXD3/wF3Aj8EzgBVZrYscbiK+F5DWVzd9N47wE1mtsXM5gNtVzhnBnA7cMDMmonvBntDj+O7EnE1AJPNLPsaLksklDTFJ5Ikd+8kvqdNzMwOA8VAubu/a2b/JD7l9hDx6bnB+nnfzL5OfBpwFfEpwcf6nGbAEXcfqK++i2lqcU0ZMzSCEkmCmc0ws1t6NEWBf/V4vwv4BfCOu58coq8cIMvdf0d8ZHRH4tBHwGcTr1uAqYmHMzCziJl9rUc3RYn2ucCH7v7hNV2YSAhpBCWSnEnAlsRU2iXgBPHpvi57iO/a+uRV9DUNeDkxJQjQtRV8ObCtx0MSDwObzexzxO/ZXwJdWxd0mFkTEKH/6EskrWm7DZE0lXiK70fu/nbQsYikgqb4REQklDSCEhGRUNIISkREQkkFSkREQkkFSkREQkkFSkREQkkFSkREQun/Hxi57gZYWXEAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "%%time\n", + "reparam_model = poutine.reparam(\n", + " model, {\"rate\": LocScaleReparam(), \"init\": LocScaleReparam()}\n", + ")\n", + "guide = AutoNormal(reparam_model, init_loc_fn=init_loc_fn, init_scale=0.01)\n", + "fit_svi(reparam_model, guide, lr=0.05)\n", + "pprint(evaluate(reparam_model, guide))\n", + "plot_volcano(guide)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "blr6l-GLKM3z" + }, + "source": [ + "## Customize the variational family\n", + "\n", + "When creating a new model, we recommend starting with mean field variational inference using an [AutoNormal]() guide. This mean field guide is good at finding the neighborhood of your model's mode, but naively it ignores correlations between latent variables. A first step in capturing correlations is to reparametrize the model as above: using a `LocScaleReparam` or `HaarReparam` (where appropriate) already allows the guide to capture some correlations among latent variables.\n", + "\n", + "The next step towards modeling uncertainty is to customize the variational family by trying other autoguides, building on [EasyGuide](), or creating a custom guide using Pyro primitives. We recommend increasing guide complexity gradually via these steps:\n", + "1. Start with an [AutoNormal]() guide.\n", + "2. Try [AutoLowRankMultivariateNormal](), which can model the principle components of correlated uncertainty. (For models with only ~100 latent variables you might also try [AutoMultivariateNormal]() or [AutoGaussian]()).\n", + "3. Try combining multiple guides using [AutoGuideList](). For example if [AutoLowRankMultivariateNormal]() is too expensive for all the latent variables, you can use [AutoGuideList]() to combine an [AutoLowRankMultivariateNormal]() guide over a few top-level global latent variables, together with a cheaper [AutoNormal]() guide over more numerous local latent variables.\n", + "4. Try using [AutoGuideList]() to combine a autoguide together with a custom guide function built using `pyro.sample`, `pyro.param`, and `pyro.plate`. Given a `partial_guide()` function that covers just a few latent variables, you can `AutoGuideList.append(partial_guide)` just as you append autoguides.\n", + "5. Consider customizing one of Pyro's autoguides that leverage model structure, e.g. [AutoStructured](https://docs.pyro.ai/en/latest/infer.autoguide.html#autostructured), [AutoNormalMessenger](https://docs.pyro.ai/en/latest/infer.autoguide.html#autonormalmessenger), [AutoHierarchicalNormalMessenger](https://docs.pyro.ai/en/latest/infer.autoguide.html#autohierarchicalnormalmessenger) [AutoRegressiveMessenger](https://docs.pyro.ai/en/latest/infer.autoguide.html#autoregressivemessenger).\n", + "6. For models with local correlations, consider building on [EasyGuide](https://docs.pyro.ai/en/latest/contrib.easyguide.html), a framework for building guides over groups of variables.\n", + "\n", + "While a fully-custom guides built from `pyro.sample` primitives offer the most flexible variational family, they are also the most brittle guides because each code change to the model or reparametrizer requires changes in the guide. The author recommends avoiding completely low-level guides and instead using `AutoGuide` or `EasyGuide` for at least some parts of the model, thereby speeding up model iteration." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zgMSoFIVKM3z" + }, + "source": [ + "Let's first try a simple `AutoLowRankMultivariateNormal` guide." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "id": "btrEBvoCKM3z" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found 538452 latent variables and 54498602 learnable parameters\n", + "step 0 loss = 128.329\n", + "step 1 loss = 126.172\n", + "step 2 loss = 124.691\n", + "step 3 loss = 123.609\n", + "step 4 loss = 123.317\n", + "step 5 loss = 121.567\n", + "step 6 loss = 120.513\n", + "step 7 loss = 121.759\n", + "step 8 loss = 120.844\n", + "step 9 loss = 121.641\n", + "CPU times: user 45.9 s, sys: 38.2 s, total: 1min 24s\n", + "Wall time: 29 s\n" + ] + } + ], + "source": [ + "%%time\n", + "reparam_model = poutine.reparam(\n", + " model, {\"rate\": LocScaleReparam(), \"init\": LocScaleReparam()}\n", + ")\n", + "guide = AutoLowRankMultivariateNormal(\n", + " reparam_model, init_loc_fn=init_loc_fn, init_scale=0.01, rank=100\n", + ")\n", + "fit_svi(reparam_model, guide, num_steps=10, log_every=1, plot=False)\n", + "# don't even bother to evaluate, since this is too slow." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BK3kgjhMT6ce" + }, + "source": [ + "Yikes! This is quite slow and sometimes runs out of memory on GPU.\n", + "\n", + "Let's make this cheaper by using `AutoGuideList` to combine an `AutoLowRankMultivariateNormal` guide over the most important variables `rate_scale`, `init_scale`, and `coef`, together with a simple cheap `AutoNormal` guide on the rest of the model (the expensive `rate` and `init` variables). The typical pattern is to create two views of the model with [poutine.block](https://docs.pyro.ai/en/stable/poutine.html#pyro.poutine.handlers.block), one exposing the target variables and the other hiding them." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "id": "_jjmgrMqTu0w" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found 538452 latent variables and 1202987 learnable parameters\n", + "step 0 loss = 832.956\n", + "step 100 loss = 11.9687\n", + "step 200 loss = 11.1152\n", + "step 300 loss = 9.60629\n", + "step 400 loss = 10.1724\n", + "step 500 loss = 9.18063\n", + "step 600 loss = 9.1669\n", + "step 700 loss = 9.06247\n", + "step 800 loss = 9.38853\n", + "step 900 loss = 9.12489\n", + "step 1000 loss = 8.93582\n", + "{'MAE (USA / Massachusetts)': 0.09685955196619034,\n", + " 'MAE (global)': 0.16698431968688965}\n", + "CPU times: user 4min 22s, sys: 3min 5s, total: 7min 28s\n", + "Wall time: 2min 15s\n" + ] + }, + { + "data": { + "image/png": "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IgKbzYbRaPSqy+FwcPXVVzNlyhRmzJjBzz//TGJiIrt27aJz5844nU6+/PJLOnfuzLvvvssDDzzglbojISGBbt268eWXXyLLMjabzW/ozfOz59+KotClSxeGDh3K+PHjAdWj+8c//sG9995LWloaAwcO1NrzPVZHR0enMdENVAiaNWtGZGQkGRkZdO/eXdveu3dvxo4dy6xZs5g7dy6XXXYZiqIQFxfHxx9/7FVHcXExo0ePxuFwEB0dTbdu3XjiiSf429/+hhCCcePGMX78eB5//HF++eUXYmJiNO8JVGP5j3/8g6FDhyKE4JxzzuE///lPjc9hxowZ/O1vf+Pll19GURSefPJJRo0axcyZMznnnHO8hiN1dHR06oOUuHBaNwurcz2iKb8p9+rVS/nll1+0z9u3bw84zKajo1Nz9N+RTkNRuGo/wigRneadFl4IsVFRlF61rU/3oOqZ+fPn87///U/7PG7cOG6//fZG7JGOjo7O6YluoOqZ22+/XTdIOjo6OvWAvlBXR0dHR6dJontQOjo6Ojr1ghxuQFjqz6zoBkpHR0dHp16I6NsK6nGtrz7E58PmzZt59dVXg+6/9dZbAVViKJhW38kycODAeq1PR0dH51QiZIGoRzUK3UD50KNHD6ZNmxZ0/4svvgg0jIHS0dHR0anitBzie3rD0+w4saNOdZwVdxb39r7Xb3tmZiarV6/mscceo1u3bnTr1o3ff/+dN954gx49ejBw4EDmzZvH5s2bGTp0KNOnT+faa6/1quP+++9n7dq1GI1G3nnnHSRJ4vrrr6e8vJx+/frx5JNPMmHCBI4dO4bZbGbp0qVER0drx//0009BBWgzMzN55plnMBgMHD9+nBtvvJG33noLi8XCihUrALj55pvZuXMnYWFhvP3225SXlzNp0iRsNhvdu3fn5ZdfJjMzk6effhqDwcCJEyf48ssviYyMrNM11dHR0alPdA8qBDk5Obz22mu8/PLLvPHGG9r23r1706NHD77++ms/4wSwfv161q5dy7fffkvLli158sknufPOO8nMzOTxxx8HVA9szZo1TJgwgQ8++MDr+Icffpjly5ezbt063nnnHaxWq9d+o9HI8uXLueyyy9i0aRNff/01ycnJbNq0iRUrVpCSksI333zDzJkzWbhwIQkJCaxatYp169ZRVFTE7t27ATCZTHz66adc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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "%%time\n", + "reparam_model = poutine.reparam(\n", + " model, {\"rate\": LocScaleReparam(), \"init\": LocScaleReparam()}\n", + ")\n", + "guide = AutoGuideList(reparam_model)\n", + "mvn_vars = [\"coef\", \"rate_scale\", \"coef_scale\"]\n", + "guide.add(\n", + " AutoLowRankMultivariateNormal(\n", + " poutine.block(reparam_model, expose=mvn_vars),\n", + " init_loc_fn=init_loc_fn,\n", + " init_scale=0.01,\n", + " )\n", + ")\n", + "guide.add(\n", + " AutoNormal(\n", + " poutine.block(reparam_model, hide=mvn_vars),\n", + " init_loc_fn=init_loc_fn,\n", + " init_scale=0.01,\n", + " )\n", + ")\n", + "fit_svi(reparam_model, guide, lr=0.1)\n", + "pprint(evaluate(reparam_model, guide))\n", + "plot_volcano(guide)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "o4TcrOWvgX_7" + }, + "source": [ + "Next let's create a custom guide for part of the model, just the `rate` and `init` parts. Since we'll want to use this with reparametrizers, we'll make the guide use the auxiliary latent variables created by `poutine.reparam`, rather than the original `rate` and `init` variables. Let's see what these variables are named:" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "id": "ole0UzqnWY37" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "rate_scale\n", + "init_scale\n", + "mutation\n", + "coef\n", + "strain\n", + "place\n", + "rate_decentered\n", + "init_decentered\n" + ] + } + ], + "source": [ + "for name, site in poutine.trace(reparam_model).get_trace(\n", + " dataset\n", + ").iter_stochastic_nodes():\n", + " print(name)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7lkacduNmnmu" + }, + "source": [ + "It looks like these new auxiliary variables are called `rate_decentered` and `init_decentered`." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "id": "r5b8-WbUibg2" + }, + "outputs": [], + "source": [ + "def local_guide(dataset):\n", + " # Create learnable parameters.\n", + " T, P, S = dataset[\"counts\"].shape\n", + " r_loc = pyro.param(\"rate_decentered_loc\", lambda: torch.zeros(P, S))\n", + " i_loc = pyro.param(\"init_decentered_loc\", lambda: torch.zeros(P, S))\n", + " skew = pyro.param(\"skew\", lambda: torch.zeros(P, S)) # allows correlation\n", + " r_scale = pyro.param(\"rate_decentered_scale\", lambda: torch.ones(P, S),\n", + " constraint=constraints.softplus_positive)\n", + " i_scale = pyro.param(\"init_decentered_scale\", lambda: torch.ones(P, S),\n", + " constraint=constraints.softplus_positive)\n", + "\n", + " # Sample local variables inside plates.\n", + " # Note plates are already created by the main guide, so we'll\n", + " # use the existing plates rather than calling pyro.plate(...).\n", + " with guide.plates[\"place\"], guide.plates[\"strain\"]:\n", + " samples = {}\n", + " samples[\"rate_decentered\"] = pyro.sample(\n", + " \"rate_decentered\", dist.Normal(r_loc, r_scale)\n", + " )\n", + " i_loc = i_loc + skew * samples[\"rate_decentered\"]\n", + " samples[\"init_decentered\"] = pyro.sample(\n", + " \"init_decentered\", dist.Normal(i_loc, i_scale)\n", + " )\n", + " return samples" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "id": "Muz3PsZ0k9az" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found 538452 latent variables and 1468870 learnable parameters\n", + "step 0 loss = 4804.42\n", + "step 100 loss = 31.7409\n", + "step 200 loss = 19.8206\n", + "step 300 loss = 15.2961\n", + "step 400 loss = 13.2222\n", + "step 500 loss = 12.1435\n", + "step 600 loss = 11.4291\n", + "step 700 loss = 10.9722\n", + "step 800 loss = 10.6209\n", + "step 900 loss = 10.3649\n", + "step 1000 loss = 10.1804\n", + "{'MAE (USA / Massachusetts)': 0.1159871369600296,\n", + " 'MAE (global)': 0.1876191794872284}\n", + "CPU times: user 4min 26s, sys: 3min 7s, total: 7min 33s\n", + "Wall time: 2min 18s\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "%%time\n", + "reparam_model = poutine.reparam(\n", + " model, {\"rate\": LocScaleReparam(), \"init\": LocScaleReparam()}\n", + ")\n", + "guide = AutoGuideList(reparam_model)\n", + "local_vars = [\"rate_decentered\", \"init_decentered\"]\n", + "guide.add(\n", + " AutoLowRankMultivariateNormal(\n", + " poutine.block(reparam_model, hide=local_vars),\n", + " init_loc_fn=init_loc_fn,\n", + " init_scale=0.01,\n", + " )\n", + ")\n", + "guide.add(local_guide)\n", + "fit_svi(reparam_model, guide, lr=0.1)\n", + "pprint(evaluate(reparam_model, guide))\n", + "plot_volcano(guide)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "eeVU75KDlICi" + }, + "source": [ + "## Conclusion\n", + "\n", + "We've seen how to use initialization, reparameterization, autoguides, and custom guides in a Bayesian workflow. For more examples of these pieces of machinery, we recommend exploring the Pyro codebase, e.g. [search for \"poutine.reparam\"](https://github.com/pyro-ppl/pyro/search?q=poutine.reparam&type=code) or [\"init_loc_fn\"](https://github.com/pyro-ppl/pyro/search?q=init_loc_fn&type=code) in the Pyro codebase." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "name": "workflow.ipynb", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.11" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/pyro/source/tutorial/source/working_memory.ipynb b/pyro/source/tutorial/source/working_memory.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..32039387920e399e1030e2a86870a2fd03b3819f --- /dev/null +++ b/pyro/source/tutorial/source/working_memory.ipynb @@ -0,0 +1,814 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Designing Adaptive Experiments to Study Working Memory\n", + "\n", + "In most of machine learning, we begin with data and go on to learn a model. In other contexts, we also have a hand in the data generation process. This gives us an exciting opportunity: we can try to obtain data that will help our model learn more effectively. This procedure is called *optimal experimental design* (OED) and Pyro supports choosing optimal designs through the `pyro.contrib.oed` module.\n", + "\n", + "When using OED, the data generation and modelling works as follows:\n", + "\n", + "1. Write down a Bayesian model involving a design parameter, an unknown latent variable and an observable.\n", + "1. Choose the optimal design (more details on this later).\n", + "1. Collect the data and fit the model, e.g. using `SVI`.\n", + "\n", + "We can also run multiple 'rounds' or iterations of experiments. When doing this, we take the learned model from step 3 and use it as our prior in step 1 for the next round. This approach can be particularly useful because it allows us to design the next experiment based on what has already been learned: the experiments are *adaptive*.\n", + "\n", + "In this tutorial, we work through a specific example of this entire OED procedure with multiple rounds. We will show how to design adaptive experiments to learn a participant's working memory capacity. The design we will be adapting is the *length of a sequence of digits that we ask a participant to remember*. Let's dive into the full details.\n", + "\n", + "\n", + "### The experiment set-up\n", + "Suppose you, the participant, are shown a sequence of digits\n", + "\n", + "$$ 1\\ 4\\ 7\\ 0\\ 9 $$\n", + "\n", + "which are then hidden. You have to to reproduce the sequence exactly from memory. In the next round, the length of the sequence may be different\n", + "\n", + "$$ 6\\ 5\\ 0\\ 2\\ 8\\ 0 .$$\n", + "\n", + "The longest sequence that you can remember is your working memory capacity. In this tutorial, we build a Bayesian model for working memory, and use it to run an adaptive sequence of experiments that very quickly learn someone's working memory capacity.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## A model of working memory\n", + "Our model for a single round of the digits experiment described above has three components: the length $l$ of the sequence that the participant has to remember, the participant's true working memory capacity $\\theta$, and the outcome of the experiment $y$ which indicates whether they were able to remember the sequence successfully ($y=1$) or not ($y=0$). We choose a prior for working memory capacity based on the (in)famous \"The magical number seven, plus or minus two\" [1].\n", + "\n", + "**Note**: $\\theta$ actually represents the point where the participant has a 50/50 chance of remembering the sequence correctly." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "\n", + "import pyro\n", + "import pyro.distributions as dist\n", + "\n", + "\n", + "sensitivity = 1.0\n", + "prior_mean = torch.tensor(7.0)\n", + "prior_sd = torch.tensor(2.0)\n", + "\n", + "\n", + "def model(l):\n", + " # Dimension -1 of `l` represents the number of rounds\n", + " # Other dimensions are batch dimensions: we indicate this with a plate_stack\n", + " with pyro.plate_stack(\"plate\", l.shape[:-1]):\n", + " theta = pyro.sample(\"theta\", dist.Normal(prior_mean, prior_sd))\n", + " # Share theta across the number of rounds of the experiment\n", + " # This represents repeatedly testing the same participant\n", + " theta = theta.unsqueeze(-1)\n", + " # This define a *logistic regression* model for y\n", + " logit_p = sensitivity * (theta - l)\n", + " # The event shape represents responses from the same participant\n", + " y = pyro.sample(\"y\", dist.Bernoulli(logits=logit_p).to_event(1))\n", + " return y" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The probability of successfully remembering the sequence is plotted below, for five random samples of $\\theta$." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "\n", + "matplotlib.rcParams.update({'font.size': 22})\n", + "\n", + "# We sample five times from the prior\n", + "theta = (prior_mean + prior_sd * torch.randn((5,1)))\n", + "l = torch.arange(1, 16, dtype=torch.float)\n", + "# This is the same as using 'logits=' in the prior above\n", + "prob = torch.sigmoid(sensitivity * (theta - l))\n", + "\n", + "plt.figure(figsize=(12, 8))\n", + "for curve in torch.unbind(prob, 0):\n", + " plt.plot(l.numpy(), curve.numpy(), marker='o')\n", + "plt.xlabel(\"Length of sequence $l$\")\n", + "plt.ylabel(\"Probability of correctly remembering\\na sequence of length $l$\")\n", + "plt.legend([\"Person {}\".format(i+1) for i in range(5)])\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Inference in the model\n", + "\n", + "With the model in hand, we quickly demonstrate variational inference in Pyro for this model. We define a Normal guide for variational inference." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "from torch.distributions.constraints import positive\n", + "\n", + "def guide(l):\n", + " # The guide is initialised at the prior\n", + " posterior_mean = pyro.param(\"posterior_mean\", prior_mean.clone())\n", + " posterior_sd = pyro.param(\"posterior_sd\", prior_sd.clone(), constraint=positive)\n", + " pyro.sample(\"theta\", dist.Normal(posterior_mean, posterior_sd))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We finally specify the following data: the participant was shown sequences of lengths 5, 7 and 9. They remembered the first two correctly, but not the third one." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "l_data = torch.tensor([5., 7., 9.])\n", + "y_data = torch.tensor([1., 1., 0.])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can now run SVI on the model." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Neg ELBO: 1.6167092323303223\n", + "Neg ELBO: 3.706324815750122\n", + "Neg ELBO: 0.9958380460739136\n", + "Neg ELBO: 1.0630500316619873\n", + "Neg ELBO: 1.1738307476043701\n", + "Neg ELBO: 1.6654635667800903\n", + "Neg ELBO: 1.296904444694519\n", + "Neg ELBO: 1.305729627609253\n", + "Neg ELBO: 1.2626266479492188\n", + "Neg ELBO: 1.3095542192459106\n" + ] + } + ], + "source": [ + "from pyro.infer import SVI, Trace_ELBO\n", + "from pyro.optim import Adam\n", + "\n", + "conditioned_model = pyro.condition(model, {\"y\": y_data})\n", + "svi = SVI(conditioned_model,\n", + " guide,\n", + " Adam({\"lr\": .001}),\n", + " loss=Trace_ELBO(),\n", + " num_samples=100)\n", + "pyro.clear_param_store()\n", + "num_iters = 5000\n", + "for i in range(num_iters):\n", + " elbo = svi.step(l_data)\n", + " if i % 500 == 0:\n", + " print(\"Neg ELBO:\", elbo)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Prior: N(7.000, 2.000)\n", + "Posterior: N(7.749, 1.282)\n" + ] + } + ], + "source": [ + "print(\"Prior: N({:.3f}, {:.3f})\".format(prior_mean, prior_sd))\n", + "print(\"Posterior: N({:.3f}, {:.3f})\".format(pyro.param(\"posterior_mean\"),\n", + " pyro.param(\"posterior_sd\")))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Under our posterior, we can see that we have an updated estimate for the participant's working memory capacity, and our uncertainty has now decreased." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Bayesian optimal experimental design\n", + "So far so standard. In the previous example, the lengths `l_data` were not chosen with a great deal of forethought. Fortunately, in a setting like this, it is possible to use a more sophisticated strategy to choose the sequence lengths to make the most of every question we ask." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We do this using Bayesian optimal experimental design (BOED). In BOED, we are interested in designing experiments that maximise the information gain, which is defined formally as\n", + "\n", + "$$ \\text{IG}(l, y) = KL(p(\\theta|y,l)||p(\\theta)) .$$\n", + "\n", + "where $KL$ represents the [Kullback-Leiber divergence](https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence).\n", + "\n", + "In words, the information gain is the KL divergence from the posterior to the prior. It therefore represents the distance we \"move\" the posterior by running an experiment with length $l$ and getting back the outcome $y$.\n", + "\n", + "Unfortunately, we will not know $y$ until we actually run the experiment. Therefore, we choose $l$ on the basis of the *expected* information gain [2]\n", + "\n", + "$$\\text{EIG}(l) = \\mathbb{E}_{y\\sim p(y|\\theta,l)} [KL(p(\\theta|y,l)||p(\\theta))]. $$\n", + "\n", + "Because it features the posterior density $p(y|\\theta,l)$, the EIG is not immediately tractable. However, we can make use of the following variational estimator for EIG [3]\n", + "\n", + "$$\\text{EIG}(l) = \\min_q \\mathbb{E}_{\\theta,y \\sim p(\\theta)p(y|\\theta,l)} \\left[ \\log \\frac{p(y|\\theta,l)}{q(y|l)} \\right].$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Optimal experimental design in Pyro\n", + "Fortunately, Pyro comes ready with tools to estimate the EIG. All we have to do is define the \"marginal guide\" $q(y|l)$ in the formula above." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "def marginal_guide(design, observation_labels, target_labels):\n", + " # This shape allows us to learn a different parameter for each candidate design l\n", + " q_logit = pyro.param(\"q_logit\", torch.zeros(design.shape[-2:]))\n", + " pyro.sample(\"y\", dist.Bernoulli(logits=q_logit).to_event(1))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is not a guide for inference, like the guides normally encountered in Pyro and used in `SVI`. Instead, this guide samples *only* the observed sample sites: in this case `\"y\"`. This makes sense because conventional guides approximate the posterior $p(\\theta|y, l)$ whereas our guide approximates the marginal $p(y|l)$." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "from pyro.contrib.oed.eig import marginal_eig\n", + "\n", + "# The shape of `candidate_designs` is (number designs, 1)\n", + "# This represents a batch of candidate designs, each design is for one round of experiment\n", + "candidate_designs = torch.arange(1, 15, dtype=torch.float).unsqueeze(-1)\n", + "pyro.clear_param_store()\n", + "num_steps, start_lr, end_lr = 1000, 0.1, 0.001\n", + "optimizer = pyro.optim.ExponentialLR({'optimizer': torch.optim.Adam,\n", + " 'optim_args': {'lr': start_lr},\n", + " 'gamma': (end_lr / start_lr) ** (1 / num_steps)})\n", + "\n", + "eig = marginal_eig(model,\n", + " candidate_designs, # design, or in this case, tensor of possible designs\n", + " \"y\", # site label of observations, could be a list\n", + " \"theta\", # site label of 'targets' (latent variables), could also be list \n", + " num_samples=100, # number of samples to draw per step in the expectation\n", + " num_steps=num_steps, # number of gradient steps\n", + " guide=marginal_guide, # guide q(y)\n", + " optim=optimizer, # optimizer with learning rate decay\n", + " final_num_samples=10000 # at the last step, we draw more samples\n", + " # for a more accurate EIG estimate\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can visualize the EIG estimates that we found." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAApMAAAFUCAYAAAB4E7dsAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3Xd4VGX6xvHvM+nUSO8dQ6+hqNh10cWCiL2v7aeou+suCmtvC8qqu666rr1jRSyoKFZQWiD03iG0IAQIpM68vz9mYDEmMIQkZ5K5P9c119k5c+bMMy6QO+c9z/uacw4RERERkdLweV2AiIiIiFReCpMiIiIiUmoKkyIiIiJSagqTIiIiIlJqCpMiIiIiUmoKkyIiIiJSagqTIiIiIlJqCpMiIiIiUmoKkyIiIiJSarFeFxBN6tWr51q1auV1GSIiIiKHNGvWrG3OufqHOk5hsgK1atWKtLQ0r8sQEREROSQzWxvOcRrmFhEREZFSU5gUERERkVJTmBQRERGRUlOYFBEREZFSU5gUERERkVJTmBQRERGRUlOYFBEREZFS0zyTIiIVZHx6BmMmLmVjVg5NkpMYPjCFwT2bel2WiMgRUZgUEakA49MzGDluPjkFfgAysnIYOW4+gAKliFRqGuYWEakAYyYu3R8k98kp8DNm4lKPKhIRKRsKkyIi5WzO+iwysnKKfW1jCftFRCoLDXOLiJSD/MIAXyzYxCs/rWHO+qwSj3PAn9+dw80ntaV9w5oVV6CISBlRmBQRKUNbd+fy9vR1vDV9HZm78wColRhLasuj+GnlL+QVBvYfG2NGwDk+Ss/go/QMBnZuyLCT29GtWbJX5YuIHDaFSRGRMjBnfRav/rSaCfM3UeB3AKQ0rMlVx7ZicM8mVIuPLbabu3fLo3j+x1W8m7aeiQu3MHHhFo5vX49hJ7ejX+s6mJnH30xE5ODMOed1DVEjNTXVpaWleV2GiJSR4oayfQandWzI1ce14pg2dcMOg1t35/LS5NW8OW0te/KDjTq9Wx7FLSe346SU+gqVIlLhzGyWcy71kMcpTFYchUmRqqGkoexL+rbg8v4taV6nWqnPnbU3n1d/XsMrP61hZ04BAB0b12LYyW05s0tjYnwKlSJSMRQmI5DCpEjlNmd9Fq/9vIbP5m0scSi7rGTnFTJ2+jqen7xqf2BtU686/3dSWwb3aEp8rCbjEJHypTAZgRQmRSqfshzKLo3cAj8fzNrAcz+sZMOO4DRCTWoncsMJbbi4bwsS42LK7bNFJLopTEYghUmRyqM8h7JLo9Af4NN5G3n2u5Us35oNQL0a8fxhQGuu6N+SmolxFVqPiFR9CpMRSGFSJPLNXZ/FqxU0lF0agYDjq0VbeOa7FczP2AlAzcRYrj62Fdcc15o61eM9rU9Eqg6FyQikMCkSmbweyi4N5xyTl2/jme9WMH31dgCS4mK4tF8Lrj++DY1qJ3pcoYhUdgqTEUhhUiSyRNpQdmmlrdnOM9+t4LulmQDExRhDezfjxhPa0qpedY+rE5HKSmEyAilMikSGSB/KLq2FG3fy7Hcr+XzBJpwLXl09u3sTbj6pHSmNtFSjiBwehckIpDAp4p3KOJRdWiszs3nu+5V8lJ5BYSD4b/zpnYJLNfZorqUaRSQ8CpMRSGFSpPwVXbLwxhNbs31PQaUfyi6NjKwcnv9hJe/MXL9/TfDj2tVl2EntOKZt1QnPIlI+FCYjkMKkSPkan57ByHHzySnwF/t6VRjKLo3M3Xm8/NNq3pi6luy8QgB6tkhm2EntOLVjA4VKESmWwmQEUpgUKV/Hjf6WjKyc3+xPjPXx8jV9qtRQdmns3FvA61PX8PJPq9mxN7hUY4dGNbn55HYUFgZ4/Otl+6/oDh+YwuCeTb0tWEQ8pTAZgRQmRcpXqxETit1vwOrRgyq2mAi2J6+QsTPW8cLkVWzZFRz6N+DAnwZJcTGMGtJVgVIkioUbJrW4q4hUeoGA45nvVpT4epPkpAqsJvJVT4jluuPb8OMdJzNqSFdifEbRywo5BX7GTFzqSX0iUrkoTIpIpbZjTz7XvjZzf/CJ9f16GDspLobhA1O8KC3iJcTGcEnfFgQCxY9QbSzmlgERkaKi5w50Ealy5qzPYthbs8nIyiG5WhxPXtSDnXsLftXNrXv/Dq1JclKx95rWr5ngQTUiUtkoTIpIpeOc4/Wpa3l4wiIK/I7uzZN59rJeNA0NZys8Hp7hA1OK7YLPyS9kxdZs2jWo4VFlIlIZaJhbRCqV7LxCbhmbzn2fLKTA77j62Fa8f+Mx+4OkHL7BPZsyakhXmiYnYUDj2om0q1+d3Xl+Ln5+Gsu27Pa6RBGJYOrmrkDq5hY5Mks37+amt2axKnMP1eNjeGxodwZ1a+x1WVVSTr6f619PY8qKbdStHs+b1/WjY+NaXpclIhVI3dwiUqV8OGsD5z4zhVWZe0hpWJNPbh2gIFmOkuJjePGqVE48uj6/7Mnn0hemsXDjTq/LEpEIpDApIhEtt8DPiA/n8Zf355JbEOD8Xs0YP+w42tbXfXzlLTEuhv9e0ZtTOjRgx94CLn1hOvM3KFCKyK8pTIpIxFr7yx6GPPsz78xcT0Ksj0fP78o/LuhGUnyM16VFjcS4GP5zeS9O69iQnTkFXPriNOasz/K6LBGJIAqTIhKRvlywmbOemsKiTbtoWbca424+lov6tIjq5RC9khAbw7OX9eKMzo3YnVvIFS9OZ9baHV6XJSIRIqLDpJldamaTzWynmWWbWZqZDTOzsOs2M5+ZHWtmD4fOtcHM8s1si5l9bmaDwzjHGWb2lZltN7O9ZrbAzO4yM03CJlLGCvwBHv5sEf/35ix25xVyRudGfHrrADo3qe11aVEtPtbHvy/tyaCujdmdV8iVL01n5prtXpclIhEgYru5zewZ4GYgF/gGKABOBWoCHwEXOOf8JZ9h/3naActDT7cDacAOoA3QJ7T/VeAPrpj/GGZ2B/Ao4Ae+D733RKA+MA041Tm3N5zvpG5ukYPbtDOHW99OJ23tDmJ9xogzO3DtgNa6GhlBCv0Bbn9vLp/M3Ui1+BheuboP/drU9bosESkHlbqb28zOJxgkNwPdnHNnOefOA9oDi4HzgFvCPJ0DvgXOBBo45wY65y52zvUFTgL2AFeHHkXrSAVGA3uB45xzpznnLiAYRH8E+gOPlPJrisgBJi/PZNBTU0hbu4NGtRJ598b+XHd8GwXJCBMb4+PJi3owpGdT9ub7ufqVmfy8YpvXZYmIhyIyTAIjQ9s7nXP7ririnNsC3BR6OiKc4W7n3Ern3KnOuS+LXsl0zv1AMCwCXF7M20cABjzqnJt+wPuygWuAAHCzmSWH+b1EpAh/wPHPScu48uUZbN+Tz/Ht6zHhtgH0blnH69KkBDE+Y8wF3Rnauxk5BX6ueXUmk5dnel2WiHgk4sKkmTUDegP5wPtFXw8FwAygEcErg0cqPbRtVqSOeIJXMwHeKqaOVcBUIB74fRnUIRJ1fsnO4+pXZvDPScHfGf90WntevaYvdWvoduRIF+MzHju/Gxf3aU5eYYBrX0vj+6VbvS5LRDwQcWES6BnaLnTO5ZRwzMwixx6J9qHtpiL7U4BqwHbn3MoKqEMkqsxau51BT01h8vJt1Kkez+t/6MufTjuaGJ+GtSsLn8/4+3ldubx/C/ILA9zw+iy+XbLF67JEpIJFYphsHdquPcgx64ocWypmVg24LfT0wxLqWEfJyqQOkWjinOPFyau46L/T2Lwrl94tj2LCbQM4vn19r0uTUvD5jIfO7cLVx7Yi3x/gxjdm8dXCzV6XJSIVKBLD5L5lLfYc5Jjs0LbmEX7WswSD4CLgeQ/rEIkKu3ILuOnN2Tw8YTGFAcf1x7fmnRv607h2ktelyREwM+47uxPXDmhNgd9x81uz+XJB0cEeEamqIjFM7hvjKtc5i8zsHuAqYCdwoXMurzzqMLMbQvNjpmVm6gZ1iV4LN+7knH9P4cuFm6mZEMtzl/firkGdiIuJxH+G5HCZGXcP6siNJ7ShMOAY9nY6E+YpUIpEg1ivCyjG7tD2YAvv7ntt90GOKZGZ3Q48SPDK4pnOuYXlVYdz7nlCVz1TU1Mjc1JPkXLknOO9tPXc8/FC8gsDdGpci2cv60WretW9Lk3KmFlwbtAYn/Hs9yu57Z10CgMBzu3R1OvSRKQcRWKYXBPatjzIMc2LHBs2M7sVeBzIAc5yzk09RB0tyqMOkWiQk+/n7vEL+HD2BgAu7tOc+8/pTGKc1tauqsyM4QNTiI3x8dQ3y/nzu3PwBxxDejU79JtFpFKKxDC5b6qezmaWVEJHd58ix4bFzIYBTxFcVeec0DRDJVlCMHDWMbO2JXR09y1NHSLRYFVmNje/NZslm3eTGOfjkcFdOb+3AkU0MDNuP/1oYsx4ctIy/vL+XAoDjgtTmx/6zSJS6UTczUrOufXAbILzN15Q9HUzO5HgnJCbCc7zGBYz+z/gaSAPGOycm3SIOvKBL0JPLyvmfG2AYwjOhzkh3DpEosFn8zZy9r+nsGTzbtrUq874YccpSEahP57WnuEDU3AO7vhgHmNnHGxyDBGprCIuTIaMCm0fDa2tDYCZNSDYgQ0w2jkXOOC1W8xsiZm9XvRkZnZ96H15wBDn3MQw6xhNsAHnTjPbdxUSM6sBvEzwv9+zzrms8L+aSNWVXxjg/k8Wcsvb6ezJ9zOoW2M+uXUAHRrV8ro08ciwk9sx8swOAIwcN583ph1s1jcRqYwicZgb59wHZvYfgksnzjezSUABcCpQCxhP8CrjgeoRnGj8VxOcmVkP4L8Eu7NXAxea2YXFfOw259xfi9Qx08xGAI8CP5vZt0AWcCLQAJgO3HUk31WkqsjIymHYW7OZsz6LuBjj7kGduPKYllpbW7jxxLbE+IyHJyzmnvEL8PsDXH2cpucVqSoiMkwCOOduNrMpwDCC4S2G4H2MLwP/OfCq5CEk879pfjqEHsVZC/y16E7n3GNmNg/4C8F7NROBVQTvvfxHMVMKiUSd75Zu5c/vziFrbwFNk5N45rJe9GiuJevlf647vg1xMT7u+2Qh93+6iMKA47rj23hdloiUAXNOs9VUlNTUVJeWluZ1GSJHbHx6BmMmLmVjVg41EmLZnVcIwMkp9Xniwh4cVT3e4wolUr05bS13j18AwMgzO3DjiW09rkhESmJms5xzqYc6LmKvTIpIZBqfnsHIcfPJKfAD7A+Sg7o24t+X9MKntbXlIC7v35JYnzHyo/mM+mJJcILzk9sd+o0iErEitQFHRCLUmIlL9wfJA81Zv1NBUsJycd8WPHZ+N8yCf57+NWm51yWJyBFQmBSRw7Ixq7ipX0veL1KcC1Kb88SF3fEZPDlpGU98tRTddiVSOSlMishhqV8zodj9TZKTKrgSqezO69mMJy/qgc/gqW9XMGaiAqVIZaQwKSJhc86RnBT3m/1JcTEMH5jiQUVS2Z3boyn/vqTX/vW8R3+xRIFSpJJRmBSRsH0+fzPLtmaTFOejce1EDGianMSoIV0Z3LOp1+VJJTWoW2OeubQnsT7jvz+u4uEJixUoRSoRdXOLSFiy8wp56LNFANxzVmcu7dfC44qkKjmjS2OevcwY9vZsXpqyGn/Acd/ZnTTpvUgloCuTIhKWf3+znM27cunerDYX9WnudTlSBf2ucyP+e0Vv4mN8vPrzGu75eAGBgK5QikQ6hUkROaRlW3bz0pTVmMFDg7sQoymApJyc0qEhz1/Zm/hYH29OW8ffPpqvQCkS4TTMLSIH5Zzj3o8XUBhwXNavBd2aaZlEKV8npTTg5av6cO1rM3ln5npWZWazISuHTVm5NElOYvjAFN2jKxJBdGVSRA7qk7kbmbZqO3Wqx6tjWyrMgPb1eOWaPsT5jBlrdrAxKxcHZGTlMHLcfManZ3hdooiEKEyKSIl25xbw8ITFAIw4owPJ1bTmtlScY9vWo3a1305FlVPgZ8zEpR5UJCLFUZgUkRI9+fVyMnfn0atFMkN7N/O6HIlCv2TnF7tfKy6JRA6FSREp1uJNu3ht6hp8oaYbrbstXihpZSWtuCQSORQmReQ39jXd+AOOK49pRecmtb0uSaLU8IEpJMXF/GpfjM90/65IBFE3t4j8xrjZGcxcs4N6NRL48+lHe12ORLF9XdtjJi5lY1YODggEHB0a1/S2MBHZT1cmReRXduYUMOqLYNPN337fgdrFrMUtUpEG92zKTyNOYfXoQVx1TEsccO/4hVpyUSRCKEyKyK888dVStmXn07dVHc7TXH4SYW7/XQp1q8czY812Pp6z0etyRASFSRE5wIKMnbwxbS0xPuPBwZ21LrJEnNpJcYw4swMAj3y+mF25BR5XJCIKkyICBO9Du+fjBQQcXH1sKzo0quV1SSLFOr9XM3q3PIrM3Xn88+vlXpcjEvUUJkUEgPdnrSd9XRYNaibwp9Pae12OSIl8PuPBczvjM3ht6hqWbN7ldUkiUU1hUkTI2pvP6C+WAHDXoI7UTFTTjUS2zk1qc0X/lvgDTs04Ih5TmBQRHpu4lB17CzimTV3O6d7E63JEwqJmHJHIoDApEuXmrs9i7Ix1xIaGDtV0I5WFmnFEIoPCpEgU84eabpyDa49vTfuGmghaKpfzezWjV4tkNeOIeEhhUiSKvTNzHfM27KRx7URuO0VNN1L5BJtxuqgZR8RDCpMiUeqX7Dwe+3IpAPec1YnqCVpdVSqnLk3VjCPiJYVJkSj12JdL2ZlTwPHt63Fml0ZelyNyRNSMI+IdhUmRKDRr7Q7eTVtPXIzxwDlqupHKT804It5RmBSJMv6A457xCwC44YQ2tKlfw+OKRMqGmnFEvKEwKRJl3py2lkWbdtE0OYlbTlbTjVQdasYR8YbCpEgUydydxz++Cjbd3Ht2J5LiYzyuSKRsdWlam8vVjCNSoRQmRaLIqC8Wszu3kJNT6vO7Tg29LkekXPzldDXjiFQkhUmRKDFj9XbGzc4gPtbH/Wq6kSqsdjU144hUJIVJkShQ6A9w78fBppubTmxLy7rVPa5IpHypGUek4ihMikSB16auZcnm3TSvk8RNJ7X1uhyRcqdmHJGKozApUsVt2ZXLk18vA+CBczqTGKemG4kOasYRqRgKkyJV3N8/X0x2XiGndWzIKR3UdCPRRc04IuVPYVKkCvt55TY+nrORhFgf953dyetyRCpc7Wpx3KlmHJFyFdFh0swuNbPJZrbTzLLNLM3MhpnZYdVtZs3N7CYze8nM5plZoZk5M/vrId53f+i4kh65R/YNRcpPgT/AvR8vBOCWk9vRvE41jysS8cZQNeOIlKtYrwsoiZk9A9wM5ALfAAXAqcDTwKlmdoFzzh/m6c4HnjyCcuYCc4rZr19xJWK9PGU1K7Zm06puNW44sY3X5Yh4Zl8zzjlPT+G1qWu4sE8zOjSq5XVZIlVGRF6ZNLPzCQbJzUA359xZzrnzgPbAYuA84JbDOOVq4F/AlUAn4I3DLGm8c+7qYh7XH+Z5RCrEpp05/Oub4BWYB87tQkKsmm4kuqkZR6T8RGSYBEaGtnc65/aPSTjntgA3hZ6OCHe42zn3sXPuT865N5xzi4FA2ZYrElke/mwxe/P9nNmlESceXd/rckQigppxRMpHxIVJM2sG9AbygfeLvu6c+wHIABoB/Su2OpHIN3l5JhPmbyIpLoZ7zlLTjcg+asYRKR8RFyaBnqHtQudcTgnHzCxybHnrZWaPmtnzZjbazM4zs/gK+myRsOUV+rkv1HRz26ntaZKc5HFFIpFFzTgiZS8Sw2Tr0HbtQY5ZV+TY8nY2cAdwPXAnMA5YaWYnVtDni4TlxcmrWbVtD23rV+faARX110Ok8tDKOCJlLxLDZI3Qds9BjskObWuWcy0rCd6/2QOoDdQHTgF+AJoBn5tZ94OdwMxuCE1plJaZmVnO5Uo027BjL//+Nnil5cFzuxAfG4l/vUW8p2YckbIViT9tLLT1/G93qGFntHNurnNul3Num3PuO+fcScCHQDXgkUOc43nnXKpzLrV+fTVCSPl56LNF5BYEOKtbY45rV8/rckQimppxRMpOJIbJ3aFtjYMcs++13Qc5prw9GNqebmZxHtYhwndLtzJx4Raqx8dw9yA13YgcStFmnN1qxhEptUgMk2tC25YHOaZ5kWO9sCS0jQd0GUg8k1vg5/5Pgk03fzrtaBrVTvS4IpHK4VfNOJPUjCNSWpEYJtND285mVlIrap8ix3qh7gH/O7vEo0TK2X9/WMXaX/ZydMMaXH1cK6/LEak0DmzGefVnNeOIlFapwqSZ1TWzoWb2iJm9aGYfmNkLoefnm1ndQ5+leM659cBsglf8Lijms08k2PyyGZha2s8pAxeGtkudc14Ot0sUW/fLXp79fgUQbLqJi4nE3w9FIpeacUSOXNg/ecws1swuMbPJwBbgXYKdzn8AhgDXhp6/B2wxsx/N7GIzK83636NC20fNrN0BNTQAng09He2cCxzw2i1mtsTMXi/F5/2GmbUws0vNLKHIfjOzKw6o8UjW/BY5Ig98upC8wgDn9WxK/zal/h1OJKqpGUfkyIQV9ELh6e9AE4Ld1lsIXhVcBGwHdgG1CA79diK4Ms0A4DjgMTP7m3PuzXCLcs59YGb/Ibh04nwzmwQUAKeGPmc88HSRt9UDUghesSxaf2PgowN2tQ1tbzWzoQfsP885tyn0v+sAbwHPmdlSgnNbxgOd+d/8lk875/4b7vcSKUuTFm3hmyVbqZkQy8jfd/C6HJFKa18zzh0fzOORzxdzascG1ExUX6VIuA4ZJs1sOpBKMEA+DrzmnFsYxvu6AFcDlwKvmdktzrmwlz90zt1sZlOAYcCJQAzBppeXgf8ceFUyDAlAv2L2twg9Djxun/XAGIL3Z7YjGCJ9BMPqu8DzzrlvD6MGkTKTW+Dn/k+Dfw1v/93RNKipphuRIzG0VzPembGO2euy+Oek5VqKVOQw2KHuDzGzjQTnUnzeOXfYcyeEps25Efibc65JqaqsIlJTU11aWprXZUgV8MRXS3nq2xV0bFyLT285jljdKylyxBZk7OScp6dgZky4bQAdGtXyuiQRT5nZLOdc6qGOC+cnUFvn3DOlCZIAzrkC59zT/G9oWUSOwJpte3juh1UAPHRuZwVJkTKiZhyR0jnkTyHnXE5ZfFBZnUckmjnnuO+TheT7Awzt3YzUVnW8LkmkSlEzjsjhO2SYNLP1ZjbOzO4ys4FHMu2PiByZiQu38MOyTGolxjLiTDXdiJQ1rYwjcvjCGR9rCgwGHgI+B7aa2Woze9/M7jSzU80suVyrFBH25hfyYKjpZvjAFOrVSDjEO0SkNIb2akZPrYwjErZwwmRd4AzgbuBjIIPgUofnE5wu6CvgFzNbbmZjzewvZnaimdUsr6JFotHT365g485cujStxaX9DrbaqIgcCZ/PeEgr44iELZx7Jnc4575yzv3dOTfEOdcCaAicBTwATCA4XU5b4CLgMeBbYIeZLSq/0kWix4qt2bwweRVm8NC5XYjxmdcliVRpasYRCV+p2kCdc5nOuc+dcw86585xzjXlf8PhjwATCU5mnlJ2pYpEJ+cc93+ykAK/4+I+zenZ4iivSxKJCmrGEQlPmc0p4pzb5Jz7xDl3r3Pu9865BkCrsjq/SLSaMH8TU1ZsI7laHMMHqulGpKKoGUckPOU6QZ1zbn15nl+kKhufnsExo77hlrfTAfhdp4bUqR7vcVUi0UXNOCKHptmORSLQ+PQMRo6bz6adufv3fTp3I+PTMzysSiT6qBlH5NDCmWfy72ZW+0g+xMxqm9nfj+QcItFkzMSl5BT4f7UvpyDAmIlLPapIJHp1aVqby/qpGUekJOFcmbwTWG1m95lZi8M5uZm1MLP7gVXAHaWoTyQqbcwqfsGokvaLSPn66+9SqKNmHJFihRMmjwNWAPcBq8xskpmNNLOTzKyhmcUCmFlc6PnJZvY3M/uWYIi8F1gOHFteX0KkqqmRGFvs/ibJSRVciYhAsBlnhJpxRIpV/E+sAzjnpgF9zexS4E/AKcDJBx5jZnnAgctx7JsEbxrwL+fcu2VTrkjVt2zLbvbkFf5mf1JcDMMHarYtEa8M7dWMsTPWkb4ui39OWs49Z3XyuiSRiBB2A45z7m3nXF+gLzAKmArkEAyOiaHtXmAK8CDQyzl3rIKkSPgK/QGGvz+XgINj2tahaXISBjRNTmLUkK4M7tnU6xJFopaacUSKd8grk0U559KAtH3PzawaUBvIcs7phi6RI/DyT6uZu2EnjWsn8vwVqdRMjPO6JBE5wL5mnDemreXe8Qt598b+mGlFKoluRzw1kHNub2jCcgVJkSOwKjObx79aBsDfh3RVkBSJUGrGEfk1zTMpEgECAceID+eTVxjg/F7NODmlgdcliUgJaleLY8QZasYR2eewh7kPFJoqqF4JL691zv1yJOcXiRZvTl/LjDXbqV8zgXvO6uh1OSJyCEN7N2PszGAzTv9R37A3z0+T5CSGD0zRvc0SdcK6Mmlmr5nZDDNLLfLSA8DMEh5jy7JQkapq/fa9jP5iCQAPD+5CcjUtmSgS6Xw+45QOwRGEPXl+HJCRlcPIcfO1UpVEnXBWwOkDXAFsDDXf/OYQYF2RRxZwajHhU0QO4Jxj5Lj57M33c1a3xgzs3MjrkkQkTO/MWP+bfTkFfq1UJVEnnGHuCwAHPFrC68451/rAHWZ2HDAZuIgDOr9F5NfeS1vPlBXbqFM9ngfO6ex1OSJyGLRSlUhQOMPcxwJbnXNTwz2pc+4ngqvfaNUbkRJs3pnLw58tBuD+czpTt0bCId4hIpGkpBWptFKVRJtwwuTRQHopzr0SaFeK94lUec457vpoPrvzCjmtY0PO7tbY65JE5DANH5hCUlzMb/Zf0q+5B9WIeCecMFkbKKkr+23g9hJeywy9V0SK+HjORr5ZspWaibE8cl4XTXosUgkN7tmUUUO67l+pal+wHDt9Pduy87wtTqQChXPPZA5Qo7gXnHNfA1+X8L7qgP42iRSRuTuP+z9dCMA9Z3WiYa1EjysSkdIa3LPp/qmAcgv8XPLCNNLXZXHTm7N467r+xMdqOmep+sL5U74ZKE1nQOfQe0WdtCGqAAAgAElEQVTkAPd9soCsvQUc374eF/Ru5nU5IlJGEuNi+O/lvWlUK5GZa3Zw78cLcM55XZZIuQsnTE4F2ppZ13BPambdCd4v+XNpCxOpij6fv4nP52+menwMo4Z01fC2SBXToFYiz1/Zm4RYH+/MXM/rU9d6XZJIuQsnTL5NcC7Jp83skMPioWP+TXA6oXeOrDyRqmPHnnzu/XgBACN+35FmR1XzuCIRKQ/dmiXz2NBuADz42SJ+WrHN44pEytchw2TovsgfgAHAJDPrVNKxZtYZ+BY4DpjinJtYVoWKVHYPfraIbdn59Gtdh8v6tvC6HBEpR+f2aMpNJ7XFH3AMe3s2a3/Z43VJIuUm3LW5LyI43H0CMN/M5hKcjDwz9Hp9IBXoTvAq5hrgwjKtVKQS+2bxFj5KzyAxzsej53fD59PwtkhV99ffpbBs826+WbKV615LY9zNx1IzMc7rskTKXFhtZs65rQTD4nsEh697ANcCI0KPa0P7AN4H+jjntpR5tSKV0M6cAv720Xwg+MOlVb3qHlckIhUhxmf88+IetGtQg+Vbs/nzu3MIBNSQI1VP2HMWOOd2OOcuBjoAfwbeAiaGHm8RnG+yg3PuIudcSfNSikSdUZ8vZsuuPHq2SOaa41of+g0iUmXUTIzjxStTqZ0Ux6TFW3n8a63bLVVPuMPc+znnVgD/KodaRKqcycszeWfmeuJjfIwZ2o0YDW+LRJ1W9arzzKW9uOqVGTzz3Uo6NKrF2d2beF2WSJnRbKoi5WRPXiEjPgwOb//xtPa0a1DT44pExCsD2tfj7kEdARj+wVzmb9jpcUUiZUdhUqScPPblEjKycujStBY3nNDG63JExGNXH9uKi1Kbk1sQ4IY30ti6O9frkkTKRDjzRp5wJB/gnPvxSN4vUhnNWL2d16auJdZnPHZ+d+Ji9HubSLQzMx4c3JkVmdnMWruD/3tjFmNv6E9CbIzXpYkckXDumfyeYAd3abgwP0Okysgt8HPnh/MAuPnkdnRqUsvjikQkUiTExvDc5b055+kpzF6Xxd0fLeCxod20GpZUauEEvXWUPkyKRJ0nv17G6m17OLphDW45uZ3X5YhIhKlfM4EXrkxl6HM/8/6sDXRsXIs/DNBMD1J5hbMCTivnXOvSPo6kODO71Mwmm9lOM8s2szQzG2ZmhzVmaGbNzewmM3vJzOaZWaGZOTP7a5jvP8PMvjKz7Wa218wWmNldZpZQum8mVdWc9Vm8MHkVPoPHhnYnPlbD2yLyW12a1uYfF3QH4OEJi/hxWeYh3iESuSL2J52ZPUNw/spUYDLwNXA08DTwgZkdzk0m5wPPAn8AugJhv9fM7gC+AE4BZgMTgAbAw8D3ZqYFlgWAvEI/d3wwl4CD649vQ4/myV6XJCIR7KxuTbjl5HYEHNzy9mxWb9OSi1I5HTJMmtkJZnb04Z7YzE4zs9tKU5SZnQ/cDGwGujnnznLOnQe0BxYD5wG3HMYpVxOcG/NKoBPwRph1pAKjgb3Acc6505xzFwBtgB+B/sAjh1GHVGHPfLuCZVuyaV2vOn8+/bD/yohIFLr99KM5vVNDduUWct1rM9mVW+B1SSKHLZwrk98Ddxb3QmjY998lvO8y4MlS1jUytL3TObd8387QEo03hZ6OCHe42zn3sXPuT865N5xzi4FAmHWMILjW+KPOuekHnC8buCZ0npvNTJegotzCjTt59vuVmMFjQ7uRGKfuTBE5NJ/PePKiHhzdsAYrM/fwp3fm4NeSi1LJhDvMXVKbWTJQpgsNm1kzoDeQT3Cd719xzv0AZACNCF4ZLBdmFg+cGXr6VjF1rAKmAvHA78urDol8Bf4Ad3wwj8KA46pjWtGnVR2vSxKRSqRGQiwvXtmH5GpxfLtkK2MmaslFqVwi8Z7JnqHtQudcTgnHzCxybHlIAaoB251zKz2sQyLc8z+uYuHGXTQ7KonhA1O8LkdEKqEWdavx7KW9iPEZz/2wkvHpGV6XJBK2SAyT+zrA1x7kmHVFji3POtYd5JiKqEMi2PItu/nXpOCdGI+e343qCZpWVURK59h29bjv7E4A3PHhPOauz/K4IpHwRGKYrBHaHqytLTu0Lc/FjsukDjO7ITSlUVpmpqZ+qEr8AcfwD+aR7w9wSd/mHNeuntcliUgld0X/llzStwX5haElF3dpyUWJfJEYJvfdn+n1HchlUodz7nnnXKpzLrV+/fplUJZEild+Ws2c9Vk0qpXIyN939LocEakCzIwHzulM31Z12LIrjxvemEVugd/rskQOKhLD5O7QtsZBjtn32u6DHFNV6pAItHrbnv03yf99SBdqJcZ5XJGIVBXxsT6evbwXTZOTmLM+i7+Nm49zXl9fESlZuDd4NTKzEw7ztUalrGlNaNvyIMc0L3Jsedh37hYe1yERJhBw3PnhPPIKAwzp2ZRTOjT0uiQRqWLq1Ujg+St7M/Q/UxmXnkHHxrW4/oQ2XpclUqxww+TA0KMod5DXSis9tO1sZkkldHT3KXJseVgC5AB1zKxtCR3dfSugDokwb01fy4zV26lXI4F7QzfLi4iUtc5NavPEhd256a3ZjPpiMe0b1uCklAZelyXyG+EMc687wsdhcc6tJ7hsYTxwQdHXzexEoBnB1XGmHu75D6OOfILLKEJwAvaidbQBjiE4H+aE8qpDIsv67XsZ9cUSAB4e3JnkavEeVyQiVdmZXRvzx1PbE3Bw69h0VmZmH/pNIhXskGHSOdfKOde6tI9S1jUqtH3UzNrt22lmDQiusQ0w2jkXOOC1W8xsiZm9XsrPLM5ogldf7zSzfVchMbMawMsE//s965zT/A1RwDnH3z6az958P4O6NuaMLo29LklEosAfT23PGZ0bsTu3kOtfS2NnjpZclMgSiQ04OOc+AP5D8L7L+Wb2qZmNA5YTXFt7PPB0kbfVIzjR+G/ucTSzxmY2bd8DGBR66dYD95vZr9KBc24mwSUVqwE/m9lXZvYesBI4EZgO3FVGX1si3PtpG5i8fBvJ1eK4/5zOXpcjIlHC5zMev7A7HRrVZNW2Pdw2Nl1LLkpEicgwCeCcu5ng8PJsgsFtILACuAU43zl3OHMlJAD9DnjsmxCwRZH9CcXU8RjBZRW/I3iv5tnANuBu4ETn3N7D/W5S+WzemctDExYBcP/Znalf8zd/VEREyk31hFheuDKVOtXj+WFZJo9+ucTrkkT2M003UHFSU1NdWlqa12XIYXLOcf3raUxavJVTOzTgxatSMStpuXoRkfIzbdUvXP7idAoDjscv6M75vZt5XZJUYWY2yzmXeqjjIvbKpEik+GTuRiYt3krNhFgeOa+rgqSIeKZ/m7o8cG7wNpuR4+Yze90OjysSUZgUOaht2Xnc/8lCAO4+qyONaid6XJGIRLvL+rXk8v4tyPcHuPGNWWzeqSUXxVsKkyIHcd8nC9mxt4AB7epxYWrzQ79BRKQC3Hd2Z/q3qUPm7jxueCNNSy6KpxQmRUrw5YJNTJi3iWrxMYwaouFtEYkccTE+nr2sN82OSmLehp2M+HCellwUzyhMihQja28+d48PDm+POLMDzetU87giEZFfq1M9nhevSqVafAzj52zkvz+u8rokiVIKkyLFePCzRWzLzqNvqzpc3u9gy8SLiHinQ6NaPHFhDwAe/XIJ3y7Z4nFFEo0UJkWK+G7JVsbNziAh1sejQ7vh82l4W0Qi1xldGnH76UfjHNw2dg4rtu72uiSJMgqTIgfYlVvA3z6aD8Bff5dC63rVPa5IROTQbj2lHYO6NiY7r5DrXktj514tuSgVR2FS5ACjPl/Cpp25dG+ezB8GlHZpeRGRimVmjLmgG50a12LNL3u5ZexsCv0Br8uSKKEwKRLy04ptjJ2xjvgYH2OGdiNGw9siUolUi4/lhatSqVs9nsnLt/H3z7XkolSMWK8LEIkEe/IKGTFuHgC3ndqOoxvW9LgiEZHD1zQ5ieeu6M2lL0zj5Z9WMy59Azv3FtAkOYnhA1MY3LOp1yVKFaQwKVFtfHoGYyYuJSMrB4AmtRO58cS2HlclIlJ6fVrVYUjPprybtoGs0L2TGVk5jBwXvB9cgVLKmoa5JWqNT89g5Lj5+4MkwC978pkwb5OHVYmIHLkpK375zb6cAj9jJi71oBqp6hQmJWqNmbiUnCJLkOUVBvSPrYhUehsP+CU5nP0iR0JhUqKW/rEVkaqqSXJSsfvr10yo4EokGihMSlRatHEXJS21XdI/wiIilcXwgSkkxcX8Zn92bgELN+70oCKpyhQmJerMWrudi5+fSsBB0dl/kuJiGD4wxZvCRETKyOCeTRk1pCtNk5Mwgs2FnRrXZG9BgEtfmM68DVlelyhViDnnvK4haqSmprq0tDSvy4hqPyzL5MY30sgtCHBG50ac1rEBT05azsasHE2dISJVWn5hgGFvz+brRVuomRjL63/oS88WR3ldlkQwM5vlnEs95HEKkxVHYdJbn83byJ/fnUOB33FB72aMGtKV2BhdnBeR6FHgD/DHd9L5fP5maiTE8uo1fUhtVcfrsiRChRsm9ZNUosLYGeu4dWw6BX7HdQNa89jQbgqSIhJ14mJ8PHVxT87u3oTsvEKufHkG01f9dhohkcOhn6ZS5T33w0pGjpuPc/DX3x3NXYM6YiV134iIVHGxMT6evLA75/Vsyt58P1e/MpOfV2zzuiypxBQmpcpyzjH6iyWM/mIJZvDQuZ255ZT2CpIiEvViY3z844LuDO3djJwCP9e8OpPJyzO9LksqKYVJqZL8AcffPlrAcz+sJNZn/POiHlxxTCuvyxIRiRgxPuOx87txSd/m5BUGuPa1NL5butXrsqQSUpiUKie/MMBt76QzdsY6EmJ9PH9lb87toQ5tEZGifD7jkcFdubx/C/ILA9z4+iwmLdridVlSyShMSpWSk+/n+tfTmDBvEzUTglNfnNKhoddliYhELJ/PeOjcLlxzXCvy/QH+781ZfLlgs9dlSSWiMClVxs6cAq54aTo/LMukbvV4xt7Qn35t6npdlohIxDMz7j2rEzec0IbCgGPY27OZMG+T12VJJRHrdQEiZSFzdx5XvjyDxZt20aR2Im9c14+29Wt4XZaISKVhZow8swOxPuPZ71dy2zvpFAYCuk1IDklhUiq99dv3csVL01nzy17a1KvOG9f1o6nW1xYROWxmxvCBKcTG+Hjqm+X8+d05+AOOIb2aeV2aRDCFSanUlm/ZzRUvzWDzrlw6N6nFa3/oS70aCV6XJSJSaZkZt59+NLE+44mvl/GX9+dS6Hdc2Ke516VJhFKYlEpr7vosrn5lBjv2FtC3dR1evCqVWolxXpclIlIl3HZqe2JjjMe+XModH86jIBDgsn4tvS5LIpDCpFRKP6/cxvWvpbEn388pHRrw7GW9SIyL8bosEZEq5eaT2hHn8/HI54u566MF+AOOKzVnrxShbm6pdL5auJmrX5nJnnw/5/Zown+v6K0gKSJSTq4/oQ33nd0JgHs/XshLU1Z7XJFEGoVJqVQ+nLWBm96aTX5hgCv6t+TJC3sQF6M/xiIi5ema41rz0OAuADz02SL++8NKjyuSSKJhbqk0XvlpNQ98ugiAW09px+2nH611tkVEKsgV/VsS6zP+9tF8Rn2xJDgf5cntvC5LIoDCpEQ85xz/+mY5/5y0HIC7B3XkuuPbeFyViEj0uaRvC2J9xh0fzmPMxKUU+AP88dT2+sU+yilMSkQLBBwPfraIV39eg89g9JBump5CRMRDF6Q2JzbG+Mt7c/nnpOUU+h1/+Z1GiqKZwqRErEJ/gDs+nMe42RnEx/h46pIenNGlsddliYhEvfN6NiPG5+PP787h6e9WUBAIMOKMDgqUUUphUiJSboGfW95OZ9LiLVSLj+H5K1IZ0L6e12WJiEjIOd2bEOszbhubzn9/WEWh33H3oI4KlFFIYVIiTnZeIde/lsbUVb9QOymOV6/pQ88WR3ldloiIFPH7ro2J8Rm3vD2bl6asxh9w3Hd2JwXKKBPRc6qY2aVmNtnMdppZtpmlmdkwMytV3WZ2hpl9ZWbbzWyvmS0ws7vMrNj198zsajNzh3g0OrJvKQfaviefS1+YxtRVv9CgZgLv3XiMgqSISAQb2LkRz13em/gYH6/+vIa7xy8gEHBelyUVKGKvTJrZM8DNQC7wDVAAnAo8DZxqZhc45/yHcb47gEcBP/A9sAM4EXgYOMvMTnXO7S3h7SuBKSW8lhNuDXJwm3bmcMVLM1ixNZsWdarx5rX9aFG3mtdliYjIIZzasSHPX9mbG96YxVvT11Hod4wa0hWfT1coo0FEhkkzO59gkNwMnOCcWx7a3xD4DjgPuAX4V5jnSwVGA3uBU5xz00P7awATgBOAR4A/l3CKKc65q0v7feTQVm/bw+UvTicjK4eUhjV549q+NKiV6HVZIiISppNSGvDyVX247vWZvJu2noJAgDFDuxOjQFnlReow98jQ9s59QRLAObcFuCn0dMRhDHePAAx4dF+QDJ0vG7gGCAA3m1nyEVcuh23Rxl1c8NxUMrJy6NkimXdv7K8gKSJSCQ1oX49Xru5LUlwM42ZncPt7cyj0B7wuS8pZxIVJM2sG9AbygfeLvu6c+wHIABoB/cM4XzxwZujpW8WcbxUwFYgHfl/qwqVU0tZs56Lnp7ItO4/j29fjzWv7kVwt3uuyRESklI5pW5fX/tCX6vExfDxnI398dw4FCpRVWsSFSaBnaLvQOVfS/Ygzixx7MClANWC7c66kxUQPdb52ZvawmT1vZv8INQbVCOOz5SC+X7qVy1+azu7cQs7s0ogXr0qlekJE3nkhIiKHoW/rOrx+bV9qJsQyYd4mbn07nfxCBcqqKhLDZOvQdu1BjllX5NhwzrfuIMcc6nzHAXcB1wN/IXiFc52ZDQ3j86UYn87dyPWvp5FbEODC1Gb8+5KeJMTGeF2WiIiUkd4t6/DGdf2olRjLlws3c/Nbs8krDLtvViqRSAyT+6747TnIMdmhbc1yPt8mgt3efYF6QDJwDPARcBTwrpkNPNiHm9kNoSmN0jIzM8Mot+p7e/o6bnsnnQK/4/rjW/Po+d2IjYnEP4oiInIkejRP5u3r+1M7KY5Ji7fwf2/MIrdAgbKqicQxxX1tX2U1SVWpz+ecmwhMLLJ7GjDEzB4HbgceL+aYA8/xPPA8QGpqalROvDU+PYMxE5eyMSuHmomx7MotBGD4wBRuPqmtJrcVEanCujStzdjr+3PZi9P4bmkm17+exgtXppIYp9GoqiISw+Tu0PZg9yTue233QY4pr/Pt8zDwR6CzmbVwzh1sGD1qjU/PYOS4+eSEfhPdFySH9m7GsJPbeVmaiIhUkE5NajH2hv5c9sJ0Ji/fxtn/nkx2np/NO3NpkpzE8IEpDO7Z1OsypZQicWxxTWjb8iDHNC9ybDjna1FG5wPAObcD2Bp6qr8BJRgzcen+IHmgqSt/8aAaERHxSodGtXjnhv7USIhh+dY9bNqZiwMysnIYOW4+49MzvC5RSikSw2R6aNvZzJJKOKZPkWMPZgnBVWrqmFnbEo7pexjnA8DMYoDaoafZBzs2mm3MKr4hv6T9IiJSdbVvWJNq8b8dFM0p8DNm4lIPKpKyEHFh0jm3HphNcN7HC4q+bmYnAs0Iro4zNYzz5QNfhJ5eVsz52hBsqsknuBpOuM4iOOXQboKBVQ7gnOO9metLfL1Jckm/J4iISFWWuTuv2P26yFB5RVyYDBkV2j5qZvtvrDOzBsCzoaejnXOBA167xcyWmNnrxZxvNMEGnDvNrO8B76kBvEzwv8OzzrmsA16rZmY3FTefpJn9Hngh9PQZ51xBqb5lFbUrt4Bbx6Zzx4fzcEBMkQabpLgYhg9M8aY4ERHxVEkXE3xmTFy4Geeisle1UovIMOmc+wD4D8FVbuab2admNg5YDnQCxgNPF3lbPYITlP/m3kjn3EyCSypWA342s6/M7D1gJXAiMJ3gPJIHiicYXDPNbLaZfWxm48xsMcErmPWBccC9ZfGdq4rZ63bw+39N5rN5m6geH8MTF3bn8Qu70zQ5CQOaJicxakhX3WgtIhKlhg9MIalIJ7cBfue48Y1ZXPPqTNZsO9hsfhJpIrGbGwDn3M1mNgUYRjDwxRAcTn4Z+M+BVyXDPN9jZjaP4KTjfYBEYBXwFPAP51zR6+57+d8ckynA0QQDZibwCfCac25cKb9elRMIOP7zw0qe+HoZ/oCja9PaPHVJT1rXqw6g8CgiIsD/fh7smzKuSXISfzm9PbtyC3n862V8vzST3634kRtOaMOwk9uRFK8phCKd6XJyxUlNTXVpaWlel1HmtuzK5fb35vDTimCH9g0ntOGvv0shPjYiL3yLiEiEytydx6NfLuGDWRuA4GjWPWd1ZGDnRpqT2ANmNss5l3rI4xQmK05VDJPfLtnCX9+fx/Y9+dSrEc8/LujOSSkNvC5LREQqsVlrt3PP+IUs2rQLgOPb1+OBczrTpv7BpoyWsqYwGYGqUpjMK/Qz+oslvPLTGiD4F/3xC7vToGait4WJiEiV4A843p6+ljETl7Irt5C4GOP649twyyntip1eSMqewmQEqiphcmVmNre+nc6iTbuI9RnDB6Zw/fFt8Pk0BCEiImVrW3Yej325hPfSgkPfTWoncvdZnTizi4a+y5vCZASq7GHSOcf7szZw38cLySnw07JuNZ66uCfdmyd7XZqIiFRxs9ft4N6PF7AgIzj0PaBdPe4/pzPtGmjou7woTEagyhwmd+UWcNdHC/h07kYABvdowkODu1AzMc7jykREJFr4A463Z6zjHxOXsjOngLgY49oBbbj1lHZUT9DQd1lTmIxAlTVMzl63g9vGprNhRw7V4mN4eHAXhvRq5nVZIiISpbbvyeexL5fwbtp6nIPGtRO5a1BHBnVtrKHvMqQwGYEqW5gsOndkl6a1+PclvfbPHSkiIuKlOeuzuPfjBczbsBOA49rV5YFzOtOuQU2PK6saFCYjUGUKk0Xnjrz++NYMH9hBc0eKiEhE8Qcc785cz2MTl5C1t4BYn/GHAa257dT21NDQ9xFRmIxAlSVMfrdkK395fy7b9+RTt3o8/7iwOydr7kgREYlgO/bkM+arpYydsQ7noGGtBO4a1Imzu2nou7QUJiNQpIfJvEI/j36xlJd/Wg1o7kgREal85m3I4p6PFzJ3fRYAx7SpywPndubohhr6PlwKkxEoksOk5o4UEZGqIhBwvJe2nke/XMKO0ND31ce24o+ntdcsJIdBYTICRWKYLDp3ZIs61Xjqkp700NyRIiJSyWXtzecfXy3lrenBoe8GNRO4a1BHzuneREPfYVCYjECRFiZ35RZw90cL+CQ0d+S5PZrwsOaOFBGRKmb+hp3c8/EC5oSGvvu1rsOD53YhpZGGvg9GYTICRVKYTF+3g9veSWf99uDckQ+d24UhvZrqNzUREamSAgHHB7M2MPrLJWzfk0+Mz7jqmFb86fT21NJFlGIpTEagSAiTgYDjuR9X8sRXyygMzR351MU9aVNfy1GJiEjVt3NvAY9/vZQ3p60l4KBejQTuGtSBwT10QaUohckI5HWY3Lorlz8fMHfkdQNaM/yMFBJiYzyrSURExAsLMnZy78cLmL0uOPTdt1UdHji3Mx0b1/K4ssihMBmBvAyTmjtSRETk1wIBx4ezNzD6iyX8Ehr6PrZtXVZszWbzzlyaJCcxfGAKg3s29bpUTyhMRiAvwmReoZ/HvlzKS1OCc0cOaFePJy7sToNamjtSREQEYGdOAU9+vYxXf17zm9eS4mIYNaRrVAbKcMOk1sarwlZlZjPk2Z95acpqYn3GiDM78Pof+ipIioiIHKB2Uhz3n9OZBjUTfvNaToGfUV8s9qCqykOLVlZBzgU71u77ZCF78zV3pIiISDgyd+cVu3/LrjyufHkGl/VrwakdGhAbo2txB1KYrCLGp2cwZuJSNmblkBgXQ06BH4BzujfhkfM0d6SIiMihNElOIiMrp9jXflyWyY/LMmlYK4GL+7Tg4r7NaVw7qYIrjEyK1lXA+PQMRo6bT0ZWDg72B8lL+jbnXxf3UJAUEREJw/CBKSTF/XqGk6S4GP5+XhfuHtSRNvWqs2VXHv/6ZjnHjf6W615L47ulW/EHorv/RFcmq4AxE5fuD5AH+nHZNs2ZJSIiEqZ9TTb7RvqKdnNfO6A101Zt563pa5m4cDOTFm9h0uItNDsqiUv6tuDC1ObUL+a+y6pO3dwVqLy6uVuPmEBx/y8asHr0oDL/PBERkWiXuTuP92et5+3p69iwIzg0HuszBnZpxGX9WnBMm7qV/oJOuN3cujJZBZR0j0eTZN3LISIiUh7q10zg5pPa8X8ntOXH5Zm8NX0d3yzewoR5m5gwbxNt6lXn0n4tOL9XM46qHu91ueVKVyYrUHldmdx3z+SBQ93RPC+WiIiIFzbtzOHdmet5Z8Z6Nu/KBSA+1sdZXRtzWf8W9GpxVKW6WqlJyyNQeU5afmA3d7TP2C8iIuKlQn+Ab5ds5a3p6/hxeSb7olaHRjW5rF8Lzu3ZlFqVoDlWYTICeb02t4iIiFSsdb/sZezMdbw3cz2/7MkHgqOH5/ZowmX9WtK1WW2PKyyZwmQEUpgUERGJTvmFASYu3Mxb09cybdX2/fu7NavNZf1acHb3JlSLj6xWFoXJCKQwKSIiIiu2ZjN2xjo+mLWBnTkFANRMiGVIr6Zc2q8lKY1qelxhkMJkBFKYFBERkX1yC/xMmLeJt6avZfa6rP37U1sexWX9W3Bml8YkFplEvSIpTEYghUkREREpzqKNu3h7xlrGp28kO68QgORqcVzQuxmX9G1Bm/o1KrzZVmEyAilMioiIyMHsySvkk7kbeXPaWhZu3LV/f/sG1Vnzy14K/P/Lbf/f3p0HyVmUcRz//jiCwRADQgokXAGMYoliElBRAoRTUZIKiDfeViIqHhpU+oMAAA0LSURBVAG88OAQIqIot6KgooVKCailgiCRw4quWCgIGkQgJgYCkSMgGsPjH91DhmF2dufN7r7vu/P7VG31zrz9vnm2a7L9bL/9dg/3MoBOJivIyaSZmZkNRkTwx388xMWL7uaKm5fx+Oon2tbbesJYbjhu32GJYbDJ5HrD8q+bmZmZWWGSeNE2E1hw2ItY9PH9+q23rM0OeCPNyaSZmZlZhT1r7IZs3c8WyVXYOtnJpJmZmVnFzT9wCmNbnuweu+H6zD9wSkkRrVWt1THNzMzM7GkaD9lUcetkJ5NmZmZmNTBrt60rkTy2qvRtbklvlHSdpIckrZLUJ+l9kgrFLekgSVdKWinpMUm3SPqEpI0GOG8PST+SdJ+kxyUtlrRAUnU31DQzMzMbAZVNJiWdBVwMTAOuA64CngucCfxQUldLwks6BvgZsC9wE/BTYCJwInCtpI37Oe8NwA3ALOCvwOXAGGA+0CdpYtc/nJmZmdkoUclkUtIcYB6wHNg1Ig6JiNnAzsBtwGzgqC6uNw04BXgM2DMi9ouIw4HJwK+BlwIntTlvEnABIGBWRLwiIo4AdgQuAXYCziv8g5qZmZnVXCWTSeBjuTw2IhY33oyIe4G5+eVxXdzuPo6UEJ4aEYuarrcKeDvwBDBP0oSW844GxgIXRcTlTef9D3gP8DAwS9Iug/7JzMzMzEaRyiWTeTRwKvBf4AetxyNiIbAU2JI0ojjQ9cYAB+eXF7e53p3Ab0i3rl/VcnhWh/MeBn7cUs/MzMysp1QumQR2y+WtEdHfsu6/a6nbyRRgY2BlRPxtsNeTNJ50O7v5+LrEYWZmZjbqVDGZ3CGXd3eoc09L3cFc754Oddpdb/tcPphHIdc1DjMzM7NRp4rJ5LhcPtqhzqpcbjKM1xuSOCS9Jy9p1LdixYqOgZqZmZnVTRUXLVcuo+TrDUkcEXE+cD6ApBWSOo24jnabA/eXHUQNud2KcbsV43Yrxu1WjNutmJFqt+0GU6mKyeQjuRzXoU7j2CMd6qzr9YY6DiJii8HUG60k9UXEtLLjqBu3WzFut2LcbsW43YpxuxVTtXar4m3uu3LZKRvepqXuYK63bZfXa3w/IT+Ms65xmJmZmY06VUwm/5DLF0ga20+d6S11O7kd+DewmaQd+6mze+v18kM3jae/pz/tjH7OMzMzM+sllUsmI2IJabvDMcDhrcclzQAmkXbH+c0grvdf0jaKAG9qc73JwMtI61r+tOVwY6HydueNB16TX/5ooDgMyHNHrWtut2LcbsW43YpxuxXjdiumUu2miKF6zmXoSDqMtGD5cuCVEXFHfn8i8CtgF+DoiDij6ZyjSFss/jYi3tpyvenAItII5T4R8dv8/jjgJ8AM4MsR8aGW87YB/gJsBMyOiCvy+xsA3wZeD1yWt3o0MzMz6zmVTCYBJJ1N2jrxceCXwGpgJjAeuAw4LCLWNNX/DPBpYGFE7N3mescApwJrgGuAB0lJ5ERSorlvRDzW5rw3kBLH9YDrgWWknXe2A+4g7fV931D8zGZmZmZ1U7nb3A0RMY90e/kmUtJ3ICl5OwqY05xIDvJ6C0jbKv6KNAfyNaTH6j8JzGiXSObzvgfsCVwBPB+YDfwP+AIwzYmkmZmZ9bLKjkxavUnaENiLtN/5nqSR3GcDK0hzXc+MiGtLC7BGJJ0MfCy/nB8Rp5UZT9XlB/feT5pzvTNp/vW9QB9pOssNJYZXSZImAccCB5BWvhCwBLgaWBARd5YYXmkkTQEOIg1ATAOeS2qbwyPihwOc+0bS3bVdgfVJD4N+EzgnIp4YzrjL1m27ub9I1uXz1nKdEe8zqrjOpI0OM4Cr8vfLgd+TdhPaBZgDzJF0QkQcX1J8tZDn+x5DWjxfA1TveZJ2AK4EdgLuAxYC/yFtj3oocDPgZLKJpN1IU38mAP8AfpEPTQPeC7xJ0oERcWNJIZZpLvDBbk+SdBYwjzRN62rWTtM6E5gp6fBu767VTLft5v4iKfR5a1ZWn1HZ29xWe08AlwJ7RcRWEXFIRBwRES8kPbi0BviUpH1KjbLCJG0EXEgaVbu8c22T9ExSh7QTcAIwKSIOjYjXRcTuwFbA98uMsaLOIiWSXwMmR8SsiJgF7AB8g7Q5wzklxlemW0hTmo4gfa4WDnSCpDmkRHI5sGv+3TebNEp+G2mq1FHDFnE1dNtu7i+Srj9vzcrsMzwyacMiIq4hjXa0O3aJpP2BdwJvJs1jtaf7HOkv89eS/jq3zj4J7Ah8q90IRkQ8ADww4lFVmKRnkJZGAzg+IlY3jkXEakmfAt4B7Cpp4/7mlo9WEfH15tfSoAZ6GrcXj42IxU3XulfSXOBa4DhJXx2tt7u7bTf3F0nBz1uz0voMj0xaWRoLvU8qNYqKkrQH8BHguxHx47LjqTpJY4B355enlBlLzawhPVAI7W+JNSbVP0paWs06yHNPp5LWLf5B6/GIWAgsBbYkrQpig+P+YgBl9xlOJq0sO+fyn6VGUUF5tOgiYCXrOH+mh0wlTdhfEhG3SXq5pJMlnSfps5JeNtAFelEeibw6v/xsfhACePKhiBPzywvCT2sOxm65vDUi+ku+f9dS1wbm/qKDKvQZvs1tI07SlsDb8stLSwylqk4CpgCvj4j7yw6mJl6Yy8WSLgSObDl+vKRLgbd06OR71Tzg56SR3YMl9eX3pwObAmcA80uKrW52yOXdHerc01LXOnB/MSil9xlOJm1E5d2DvgM8C7jat3CfStLLgaNJOytdUnY8NbJZLvciLcNyGnAuaY7kXsDZpDlED5PmAFoWEXfmz923SGvxNt9K7AN+3TyX0joal8tHO9RZlctNhjmW2nN/MbCq9Bm+zW0j7VzSEhlLSJOpLcvrI36TlPDMKzmcumn8LtuAdEt2fkT8LSIezNugziLN/ztS0uTSoqyg3BndQnp69FBgc2ALUpttClwqabQvyTJUGvNOPSVgaLi/6KBKfYaTSRsxks4gPZG3HJgZEctLDqlqTiYtUvvhiPDcoO480vT911oPRkQfae269YC9RyimypM0gbQ97SbAQRFxRUQ8EBH3R8TlpAWU/01almXnTtcyYO3ncFyHOo1jj3So0/PcXwxKZfoM3+a2ESHpi8AHSDsazGxeMsOeNJu03tqRklrn/D0vl3MlHQLcERHvGtHoqu2upu//3k+dv5MW4t5y2KOpj1eTRiGvabfLTUTcIWkRKQHfG/D/287uyuV2Heps01LXWri/GLTK9BlOJm3YSVoAfJg0f23/iPhzySFV2Xqk3SD6Mzl/TRiZcGrjpqbvG9uwtdo8l6vaHOtV2+byoQ51HszlZh3qWNJYwuYFksb287DX9Ja61sT9Rdcq0Wf4NrcNK0mnkJ4E/RfpF8PNJYdUWRGxfUSo3Rdp2QdI+6wqIl5cZqxVExFLgUX55czW45I2BV6SX/a1Hu9hy3I5tXlZoIb83tT8sr8RX8siYgnpD5sxpL3hn0LSDNIDTstJe05bE/cX3alSn+Fk0oaNpBOAY0kjG/tHhP8St+F0Ui6Pl/TkL868Bts5pCdCf4878WY/Ax4jjVB+KW/HBjy5NdtXSLdl/8XaPbuts8/n8lRJOzXelDSRtKoAwCmjdfebotxf1Ju8Dq0NB0mvZe3eoH3Arf1UvT0ivGPJAJrWTpwfEaeVHE5lSfoC8FHSDiSLSLfKdgeeQ9p5ZB/Pv3qqPNfqAtKSSstICbdII5JbAf8hrV93WWlBlkTSS1ibAELaqm4T0tzRlY03I+KlLeedDcwFHgd+CawmjZiPJz3wdFhErBnW4EvUbbu5v0iKft76udaFjGCf4TmTNlya51dNy1/tLMTb39kQiYj5km4E3k/aYWRj0iLRp5NGg9rNpexpEXGRpD+R1qp7JXBAPrSUlGSe3sPz1sYDe7R5v+OT7RExT9L1wPtI89nWB24HvgGc0wOjkt22m/uLpNDnrQo8MmlmZmZmhXnOpJmZmZkV5mTSzMzMzApzMmlmZmZmhTmZNDMzM7PCnEyamZmZWWFOJs3MzMysMCeTZmZmZlaYk0kzs5qTtJmkkLS07FjMrPc4mTQzq7/puewrNQoz60lOJs3M6q+x/ZyTSTMbcU4mzczqz8mkmZXGyaSZWf05mTSz0jiZNDOrMUkTgUnAPRGxoux4zKz3OJk0M6s3P3xjZqVyMmlmVm++xW1mpXIyaWZWb04mzaxUioiyYzAzs4IkLQO2Ap4dESvLjsfMeo9HJs3MakrSc0iJ5J1OJM2sLE4mzczqyw/fmFnpnEyamdWX50uaWemcTJqZ1ZeTSTMrnR/AMTOrKUn3AZsDm0bEQ2XHY2a9ySOTZmY1JGlbYAtgsRNJMyuTRybNzMzMrDCPTJqZmZlZYU4mzczMzKwwJ5NmZmZmVpiTSTMzMzMrzMmkmZmZmRXmZNLMzMzMCnMyaWZmZmaFOZk0MzMzs8KcTJqZmZlZYf8HhD92UO63u/0AAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(10,5))\n", + "matplotlib.rcParams.update({'font.size': 22})\n", + "plt.plot(candidate_designs.numpy(), eig.detach().numpy(), marker='o', linewidth=2)\n", + "plt.xlabel(\"$l$\")\n", + "plt.ylabel(\"EIG($l$)\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Optimal design: 7\n" + ] + } + ], + "source": [ + "best_l = 1 + torch.argmax(eig)\n", + "print(\"Optimal design:\", best_l.item())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This tells us that the first round should be run with a sequence of length 7. Note that, while we might have been able to guess this optimal design intuitively, this same framework applies equally well to more sophisticated models and experiments where finding the optimal design by intuition is more challenging." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As a side-effect of training, our marginal guide $q(y|l)$ has approximately learned the marginal distribution $p(y|l)$." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " l | q(y = 1 | l)\n", + " 1 | 0.9849993586540222\n", + " 2 | 0.9676634669303894\n", + " 3 | 0.9329487681388855\n", + " 4 | 0.871809720993042\n", + " 5 | 0.7761920690536499\n", + " 6 | 0.6436398029327393\n", + " 7 | 0.4999988079071045\n", + " 8 | 0.34875917434692383\n", + " 9 | 0.22899287939071655\n", + " 10 | 0.13036076724529266\n", + " 11 | 0.06722454726696014\n", + " 12 | 0.03191758319735527\n", + " 13 | 0.015132307074964046\n", + " 14 | 0.00795808993279934\n" + ] + } + ], + "source": [ + "q_prob = torch.sigmoid(pyro.param(\"q_logit\"))\n", + "print(\" l | q(y = 1 | l)\")\n", + "for (l, q) in zip(candidate_designs, q_prob):\n", + " print(\"{:>4} | {}\".format(int(l.item()), q.item()))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The elements of this fitted tensor represent the marginal over $y$, for each possible sequence length $l$ in `candidate_designs`. We have marginalised out the unknown $\\theta$ so this fitted tensor shows the probabilities for an 'average' participant." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The adaptive experiment\n", + "\n", + "We now have the ingredients to build an adaptive experiment to study working memory. We repeat the following steps:\n", + "\n", + "1. Use the EIG to find the optimal sequence length $l$\n", + "2. Run the test using a sequence of length $l$\n", + "3. Update the posterior distribution with the new data\n", + "\n", + "\n", + "At the first iteration, step 1 is done using the prior as above. However, for subsequent iterations, we use the posterior given all the data so far." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this notebook, the \"experiment\" is performed using the following synthesiser" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "def synthetic_person(l):\n", + " # The synthetic person can remember any sequence shorter than 6\n", + " # They cannot remember any sequence of length 6 or above\n", + " # (There is no randomness in their responses)\n", + " y = (l < 6.).float()\n", + " return y" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following code allows us to update the model as we gather more data." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "def make_model(mean, sd):\n", + " def model(l):\n", + " # Dimension -1 of `l` represents the number of rounds\n", + " # Other dimensions are batch dimensions: we indicate this with a plate_stack\n", + " with pyro.plate_stack(\"plate\", l.shape[:-1]):\n", + " theta = pyro.sample(\"theta\", dist.Normal(mean, sd))\n", + " # Share theta across the number of rounds of the experiment\n", + " # This represents repeatedly testing the same participant\n", + " theta = theta.unsqueeze(-1)\n", + " # This define a *logistic regression* model for y\n", + " logit_p = sensitivity * (theta - l)\n", + " # The event shape represents responses from the same participant\n", + " y = pyro.sample(\"y\", dist.Bernoulli(logits=logit_p).to_event(1))\n", + " return y\n", + " return model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we have everything to run a 10-step experiment using adaptive designs." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Round 1\n", + "Asking the participant to remember a sequence of length 7\n", + "Participant could not remember the sequence\n", + "Estimate of θ: 5.788 ± 1.636\n", + "\n", + "Round 2\n", + "Asking the participant to remember a sequence of length 6\n", + "Participant could not remember the sequence\n", + "Estimate of θ: 4.943 ± 1.252\n", + "\n", + "Round 3\n", + "Asking the participant to remember a sequence of length 5\n", + "Participant remembered correctly\n", + "Estimate of θ: 5.731 ± 1.043\n", + "\n", + "Round 4\n", + "Asking the participant to remember a sequence of length 6\n", + "Participant could not remember the sequence\n", + "Estimate of θ: 5.261 ± 0.928\n", + "\n", + "Round 5\n", + "Asking the participant to remember a sequence of length 5\n", + "Participant remembered correctly\n", + "Estimate of θ: 5.615 ± 0.859\n", + "\n", + "Round 6\n", + "Asking the participant to remember a sequence of length 6\n", + "Participant could not remember the sequence\n", + "Estimate of θ: 5.423 ± 0.888\n", + "\n", + "Round 7\n", + "Asking the participant to remember a sequence of length 6\n", + "Participant could not remember the sequence\n", + "Estimate of θ: 5.092 ± 0.763\n", + "\n", + "Round 8\n", + "Asking the participant to remember a sequence of length 5\n", + "Participant remembered correctly\n", + "Estimate of θ: 5.371 ± 0.717\n", + "\n", + "Round 9\n", + "Asking the participant to remember a sequence of length 5\n", + "Participant remembered correctly\n", + "Estimate of θ: 5.597 ± 0.720\n", + "\n", + "Round 10\n", + "Asking the participant to remember a sequence of length 6\n", + "Participant could not remember the sequence\n", + "Estimate of θ: 5.434 ± 0.640\n", + "\n" + ] + } + ], + "source": [ + "ys = torch.tensor([])\n", + "ls = torch.tensor([])\n", + "history = [(prior_mean, prior_sd)]\n", + "pyro.clear_param_store()\n", + "current_model = make_model(prior_mean, prior_sd)\n", + "\n", + "for experiment in range(10):\n", + " print(\"Round\", experiment + 1)\n", + " \n", + " # Step 1: compute the optimal length\n", + " optimizer = pyro.optim.ExponentialLR({'optimizer': torch.optim.Adam,\n", + " 'optim_args': {'lr': start_lr},\n", + " 'gamma': (end_lr / start_lr) ** (1 / num_steps)})\n", + " eig = marginal_eig(current_model, candidate_designs, \"y\", \"theta\", num_samples=100,\n", + " num_steps=num_steps, guide=marginal_guide, optim=optimizer,\n", + " final_num_samples=10000)\n", + " best_l = 1 + torch.argmax(eig).float().detach()\n", + " \n", + " # Step 2: run the experiment, here using the synthetic person\n", + " print(\"Asking the participant to remember a sequence of length\", int(best_l.item()))\n", + " y = synthetic_person(best_l)\n", + " if y:\n", + " print(\"Participant remembered correctly\")\n", + " else:\n", + " print(\"Participant could not remember the sequence\")\n", + " # Store the sequence length and outcome\n", + " ls = torch.cat([ls, best_l.expand(1)], dim=0)\n", + " ys = torch.cat([ys, y.expand(1)])\n", + " \n", + " # Step 3: learn the posterior using all data seen so far\n", + " conditioned_model = pyro.condition(model, {\"y\": ys})\n", + " svi = SVI(conditioned_model,\n", + " guide,\n", + " Adam({\"lr\": .005}),\n", + " loss=Trace_ELBO(),\n", + " num_samples=100)\n", + " num_iters = 2000\n", + " for i in range(num_iters):\n", + " elbo = svi.step(ls)\n", + " \n", + " history.append((pyro.param(\"posterior_mean\").detach().clone().numpy(),\n", + " pyro.param(\"posterior_sd\").detach().clone().numpy()))\n", + " current_model = make_model(pyro.param(\"posterior_mean\").detach().clone(),\n", + " pyro.param(\"posterior_sd\").detach().clone())\n", + " print(\"Estimate of \\u03b8: {:.3f} \\u00b1 {:.3f}\\n\".format(*history[-1]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's visualize the evolution of the posterior over $\\theta$:" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "from scipy.stats import norm\n", + "import matplotlib.colors as colors\n", + "import matplotlib.cm as cmx\n", + "\n", + "\n", + "matplotlib.rcParams.update({'font.size': 22})\n", + "cmap = plt.get_cmap('winter') \n", + "cNorm = colors.Normalize(vmin=0, vmax=len(history)-1)\n", + "scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=cmap)\n", + "plt.figure(figsize=(12, 6))\n", + "x = np.linspace(0, 14, 100)\n", + "for idx, (mean, sd) in enumerate(history):\n", + " color = scalarMap.to_rgba(idx)\n", + " y = norm.pdf(x, mean, sd)\n", + " plt.plot(x, y, color=color)\n", + " plt.xlabel(\"$\\\\theta$\")\n", + " plt.ylabel(\"p.d.f.\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "(Blue = prior, light green = 10 step posterior)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By contrast, suppose we use a simplistic design: try sequences of lengths 1, 2, ..., 10." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "pyro.clear_param_store()\n", + "ls = torch.arange(1, 11, dtype=torch.float)\n", + "ys = synthetic_person(ls)\n", + "conditioned_model = pyro.condition(model, {\"y\": ys})\n", + "svi = SVI(conditioned_model,\n", + " guide,\n", + " Adam({\"lr\": .005}),\n", + " loss=Trace_ELBO(),\n", + " num_samples=100)\n", + "num_iters = 2000\n", + "for i in range(num_iters):\n", + " elbo = svi.step(ls)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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YArOOvWXjTErrbU7AYwxscAbrjZ/stYWuW8wxjyAc1On7621d5bT363A/caY/7PWLnLdEwS8DHQG9gNzffieRKQh2LMSOgwERy3GPRwO6HcXLPwjHN4CsUnei08aDW+OaDckDoeDgQMH8uWXXzJgwADWrl3Lv//97wpHrivqozbXa6q8spVzFRYWAnDddddVufRiVFRFBQi1544jPj6eYcOGVdq2ZKlN27ZtWbNmDUuWLGHhwoWsWLGC7777jm+++YYXXniBv//970yYMMHjOCr6nvnr79BfAiaJt9bOMcZMByYCG40xX+PcrOlKnEtD/huYes5t0UB3nCP05/a33hjzW5wTYr8yxqwG9uHcLOo84DhwawWlOyIiTjmHnKvK9PP8B0yFLrod/vMCrPsQrn6h9v2JSClBQUEMHTqUtWvXejQi7WvnLmdZ3rV27dpV2U9CQgLbtm1j4sSJXHfddbWOy73hlSfxnRsHQFxcXLXLlRwOB0OHDmXo0KGAc3WcqVOnMnnyZO6//35uueWW4hHx8kRFRREWFsaZM2dIT08v97cIlb2fhiigPpJYaycBt+MsrUkBhgM7cY62j7LWFlazv//GuS78fKALcAPODy5vARdZa6sszRGRRm6Pa4PoDgNr31fzaGg/AHavqH1fIo2QJ5M29+517g1ZXvlLXVu/fn25S2EuXbqU/fv3Ex4e7tGkTveE0OqWCFWkb9++NG/enH379vHNN9+Uub5p0yY2bNhQ5vyAAQOIiorihx9+YOfOnbWKoXnz5jz++OO0b9+e06dPs23btkrbh4SEcMkllwDw8ccfl7men5/PP//5z1rFVN8EVBIPYK39yFo7yFrb0lrb3Frb11o7rWQZTYm2z1prjbV2cCX9LbHWXm+tjbbWhlprO1hr77XW7vbl+xCRBmLPSghpDm0v9E5/CQPg0AY4W/2NXkQauzfeeIO77rqL77//vsy1goIC3n77bebMmQPAL3/5y7oOrwxrLZMmTeL48ePF5zIzM3noIeck+XvuuYemTZtW2c8999xDQkIC7777Ls8880y568tv2rSJmTNnehRXs2bNuPvuuwHnmu8lf2tx/PhxJk2aVO4HppCQEJ5++mkKCwu58cYby/17yM3N5eOPP2bLli3F51555RXS09PLtE1NTeXgwYM4HA6PPnS5J8q+8sorpTbhKioq4qmnnir+ANdYBEw5jYhIQNqzEhKTnZs2eUNCsnPX1wM/QMfKV6QQkdLy8/OZNWsWs2bNom3btlx00UVERkZy9OhRNmzYULy6yO9//3uGDx/u52jhhhtuYNOmTXTu3JnBgwdTUFDA4sWLOXHiBP379y9errEq4eHhfPHFF1x//fU8//zzTJ06ld69e9O2bVsyMjLYtWsXu3fvJjk5mbvuusujPl944QWWLVvG2rVr6dKlC0OHDiUoKIjFixcTERHBDTfcwGeffVbmvoceeog9e/bw2muvkZycTO/evencuTNFRUWkp6ezdetW8vLymD9/PklJScXPeuyxx0hKSiIpKYmwsDDS09NZuXIlRUVFTJ48mbi4uCpjHjVqFBMmTGDGjBn079+fwYMHExMTQ2pqKunp6UycOJHp06cTGhrq0fegvgu4kXgRkYCRdxQOp3mnlMYtYYDzmL7Ke32KNBK//vWvmTt3Lvfffz8JCQls3LiR2bNn88033xAeHs64ceNYtmwZL7/8sr9DBaB169asWrWKm266iW+//Zb58+cTFRXFH/7wBxYvXkzz5s097qtXr15s2LCBl156ia5du7J27Vr+9a9/sX37dtq2bcvTTz9dvPa7J8LDw1m6dCmTJ08mMjKSL7/8klWrVnHLLbfw3Xff0bp16wrvffXVV1m6dCmjR48mOzubL774giVLlpCXl8fIkSP58MMPufzyy4vbT5s2jXHjxuFwOFi8eDFz585l//79jBw5kgULFjBlyhSP43777beZPn06PXv2ZNmyZSxYsICkpCRWrVpVPL+gqsm/DYXxpL6ssevXr5+taitfEWmAtn4Jn4yB8V96d9R8an+IPA/G1mxTGmm4tmzZUjx6KfXXrFmzuOuuuxg3bly1J4BKzQ0bNoxFixYxZ84cRo0a5e9wSqnOv21jzBprbb+q2mkkXkSkIntWQFAoxHu2m6DHEgZA+negQRQRkWpJS0srMycgPz+fF154gUWLFhETE8OIESP8FF3dUk28iEhF9qyE+H4Q0sS7/SYkww8fwJGdEN3Vu32LiDRgU6ZMYe7cufTp04f4+HiOHTvGxo0bOXDgAGFhYcyaNcujycINgZJ4EZHynDkJB9fDZb/zft8Jyc7j3lVK4kVEqmHMmDGcPHmStWvXsnbtWgoKCoiLi+POO+/k0UcfpVevXv4Osc4oiRcRKc++78EWendSq1tUV2ja2llS0+cO7/cvIn41fvx4xo8f7+8wGqTrrrvOKxteNQSqiRcRKc+elWCCfl5NxpscDuemT+ll11gWERHxhJJ4EZHy7FkJcRdCWAvf9J8wALK2OZexFBERqSYl8SIi58o/DftSfVNK4+aui9+32nfPEBGRBktJvIjIuQ6shcIz0MGHO6rG93WW66R/57tniIhIg6UkXkTkXHtWOI+Jl/juGaHNIK636uJFRKRGlMSLiJxrz0qI7QHNIn37nIRkZ9lOYb5vnyMiIg2OkngRkZIKC5yj476sh3dLGAAFp+DQRt8/S0REGhQl8SIiJR3aAGdP1lES7yrXUUmNiIhUk5J4EZGS9qx0HhPrIIlvFQ8t22tyq4iIVJuSeBGRkvashMjzoGVc3TwvYYCSeBERqTYl8SIibkVFsHdl3ZTSuCUkw4n9cHxf3T1TpAEoKirio48+4he/+AXx8fGEhYURGRlJv379ePrppzl8+LBf4urYsSPGGHbv3u2X53ti8ODBGGNYsmSJ1/ocP348xhhmzZrltT499eyzz2KM4dlnn63zZ/uTkngREbfMrXAq27frw58r0bXpk0bjRTy2b98+BgwYwO23387nn39OYmIiN998MwMHDmTXrl288MILdO7cmU8//dSrz22syaIEpmB/ByAiEjDc68PX5Uh8mwsgpJlzcusFo+ruuSL11NGjR7n88svZvXs3gwcPZsaMGXTq1Kn4en5+Pn/5y1948sknGT16NEFBQYwaVXf/thYtWkR+fj7x8fF19szG7oEHHmD06NFER0f7O5Q6pSReRMTt4DpoFg0RHerumUEhzt1b966qu2eK1GP3338/u3fvpn///syfP58mTZqUuh4SEsLkyZNp2rQpv/3tb5kwYQIpKSl1luB17ty5Tp4jP4uOjm50CTyonEZE5GcZadD2AjCmbp+bMMC5VvzZ3Lp9rkg98+OPPxaXyEybNq1MAl/Sgw8+SK9evThx4gRTp04tda1k/fa6deu48cYbiY6OplmzZvTt25eZM2eW6c8Yw3PPPQfAc889hzGm+FWyvKaimviSdegrVqzgmmuuoXXr1rRq1Yrhw4ezbt264rbvvfce/fv3Jzw8nMjISH71q19x6NChMjHl5+fz/vvvM2bMGLp3706LFi1o1qwZPXr04PHHH+fo0aNVfk+rIzc3lyeffJLOnTsTFhZGQkICkyZN4siRI1Xeu2DBAm644QbatGlDaGgocXFxjBkzho0by98n4/vvv+fWW28lPj6ekJAQWrVqRZcuXRg7diz/+c9/SrWtrMzJWstbb73FxRdfTNOmTYmJieHmm29m48aNzJo1C2MM48ePL3VPyfM5OTk89thjdOrUibCwMOLj45k4caLXv7c1oSReRASgqBAOb4HYnnX/7IRLwBbC/rV1/2yReuTzzz+nqKiInj170r9//0rbGmO48847Afjss8/KbfPdd99x6aWXsmnTJq666iouvfRS1q9fz4QJE3jwwQdLtR03bhwXXnghABdeeCHjxo0rfl100UUev4d58+aRkpJCdnY2w4cPp127dnz11VekpKSwY8cOHn30Ue6++24iIiIYPnw4oaGhfPjhhwwbNoyzZ8+W6isjI4M777yTBQsWEBUVxYgRI0hJSSEzM5M///nP9O/fn6ysLI9jq0xubi5DhgzhpZdeIisri2uvvZYBAwbwySefkJycTHZ2doX3PvTQQ1xzzTXMnz+fzp07c+ONNxIXF8cnn3zCgAED+PLLL0u1X7hwIZdddhlz5swhNjaWm266iaFDh9K6dWvmzJlTrbkO9957L/feey+bNm1i0KBBDBs2jI0bN5KcnExqamql9x4/fpxBgwYxY8YMLrroIq6++mry8vJ48803ueqqq8jP9/Nu29Zavap49e3b14pIA5e53dpnWlq79oO6f3buEeezl/5X3T9bAsrmzZv9HUJAu+OOOyxg77rrLo/aL1myxALW4XDY/Pz84vPjxo2zgAXsgw8+aAsKCoqvrVq1yrZo0cIC9osvvijV3zPPPGMB+8wzz1T4zA4dOljA7tq1q9T5lJQUC1hjjJ09e3bx+cLCQjtmzBgL2AsuuMC2adPGpqWlFV8/cuSI7datmwXse++9V6rPEydO2M8++8yePXu21Pm8vDx71113WcDed999ZWJ0x7J48eIK38e5Hn74YQvYXr162YyMjOLz2dnZduDAgcXfz5kzZ5a6b/r06RawPXv2tFu2bCl1be7cuTY4ONhGRETYo0ePFp8fMmSIBexHH31UJo6srCybmppa6lxFfy9z5861gI2IiLBr1qwpPl9YWGgfffTR4pjHjRtX6r6ZM2cWXxsxYoTNyckpvrZ//36bkJBgAfvBB57/vKjOv20g1XqQ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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(12,6))\n", + "matplotlib.rcParams.update({'font.size': 22})\n", + "y1 = norm.pdf(x, pyro.param(\"posterior_mean\").detach().numpy(),\n", + " pyro.param(\"posterior_sd\").detach().numpy())\n", + "y2 = norm.pdf(x, history[-1][0], history[-1][1])\n", + "plt.plot(x, y1)\n", + "plt.plot(x, y2)\n", + "plt.legend([\"Simple design\", \"Optimal design\"])\n", + "plt.xlabel(\"$\\\\theta$\")\n", + "plt.ylabel(\"p.d.f.\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Although both design strategies give us data, the optimal strategy ends up with a posterior distribution that is more peaked: that means we have greater confidence in our final answer, or may be able to stop experimenting earlier." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Extensions\n", + "\n", + "In this tutorial we used variational inference to fit an approximate posterior for $\\theta$. This could be substituted for an alternative posterior inference strategy, such as Hamiltonian Monte Carlo. \n", + "\n", + "The model in this tutorial is very simple and could be extended in a number of ways. For instance, it's possible that as well as measuring whether the participant did or did not remember the sequence, we might collect some other information as well. We could build a model for the number of mistakes made (e.g. the edit distance between the correct sequence and the participant's response) or jointly model the correctness and the time taken to respond. Here is an example model where we model the response time using a LogNormal distribution, as suggested by [4]." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "time_intercept = 0.5\n", + "time_scale = 0.5\n", + "\n", + "def model(l):\n", + " theta = pyro.sample(\"theta\", dist.Normal(prior_mean, prior_sd))\n", + " logit_p = sensitivity * (theta - l)\n", + " correct = pyro.sample(\"correct\", dist.Bernoulli(logits=logit_p))\n", + " mean_log_time = time_intercept + time_scale * (theta - l)\n", + " time = pyro.sample(\"time\", dist.LogNormal(mean_log_time, 1.0))\n", + " return correct, time" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It would still be possible to compute the EIG using `marginal_eig`. We would replace `\"y\"` by `[\"correct\", \"time\"]` and the marginal guide would now model a joint distribution over the two sites `\"correct\"` and `\"time\"`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our model also made a number of assumptions that we may choose to relax. For instance, we assumed that all sequences of the same length are equally easy to remember. We also fixed the `sensitivity` to be a known constant: it's likely we would need to learn this. We could also think about learning at two levels: learning global variables for population trends as well as local variables for individual level effects. The current model is an individual only model. The EIG could still be used as a means to select the optimal design in such scenarios." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## References\n", + "\n", + "[1] Miller, G.A., 1956. **The magical number seven, plus or minus two: Some limits on our capacity for processing information.** Psychological review, 63(2), p.81.\n", + "\n", + "[2] Chaloner, K. and Verdinelli, I., 1995. **Bayesian experimental design: A review.** Statistical Science, pp.273-304.\n", + "\n", + "[3] Foster, A., Jankowiak, M., Bingham, E., Horsfall, P., Teh, Y.W., Rainforth, T. and Goodman, N., 2019. **Variational Bayesian Optimal Experimental Design.** Advances in Neural Information Processing Systems 2019 (to appear).\n", + "\n", + "[4] van der Linden, W.J., 2006. **A lognormal model for response times on test items.** Journal of Educational and Behavioral Statistics, 31(2), pp.181-204." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..b2a6d84052a912515a729733bc02ee291353b310 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,9 @@ +fastmcp +fastapi +uvicorn[standard] +pydantic>=2.0.0 +numpy>=1.7 +opt_einsum>=2.3.2 +pyro-api>=0.1.1 +torch>=2.0 +tqdm>=4.36 diff --git a/run_docker.ps1 b/run_docker.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..05888bb7ed822aa52a2bd3cb977b5ff5f2852062 --- /dev/null +++ b/run_docker.ps1 @@ -0,0 +1,35 @@ +cd $PSScriptRoot + +$ErrorActionPreference = "Stop" + +$entryName = if ($env:MCP_ENTRY_NAME) { $env:MCP_ENTRY_NAME } else { "pyro" } +$entryUrl = if ($env:MCP_ENTRY_URL) { $env:MCP_ENTRY_URL } else { "http://localhost:7860/mcp" } +$imageName = if ($env:MCP_IMAGE_NAME) { $env:MCP_IMAGE_NAME } else { "pyro-mcp" } + +$mcpDir = Join-Path $env:USERPROFILE ".cursor" +$mcpPath = Join-Path $mcpDir "mcp.json" +if (!(Test-Path $mcpDir)) { New-Item -ItemType Directory -Path $mcpDir | Out-Null } + +$config = @{} +if (Test-Path $mcpPath) { + try { $config = Get-Content $mcpPath -Raw | ConvertFrom-Json } catch { $config = @{} } +} + +# Rebuild mcpServers as ordered and append the entry last +$serversOrdered = [ordered]@{} +if ($config -and ($config.PSObject.Properties.Name -contains "mcpServers") -and $config.mcpServers) { + $existing = $config.mcpServers + if ($existing -is [pscustomobject]) { + foreach ($p in $existing.PSObject.Properties) { if ($p.Name -ne $entryName) { $serversOrdered[$p.Name] = $p.Value } } + } elseif ($existing -is [System.Collections.IDictionary]) { + foreach ($k in $existing.Keys) { if ($k -ne $entryName) { $serversOrdered[$k] = $existing[$k] } } + } +} +$serversOrdered[$entryName] = @{ url = $entryUrl } +$config = @{ mcpServers = $serversOrdered } + +$config | ConvertTo-Json -Depth 10 | Set-Content -Path $mcpPath -Encoding UTF8 +Write-Host ("Updated $entryName in " + $mcpPath + " -> " + $entryUrl) + +docker build -t $imageName . +docker run --rm -p 7860:7860 $imageName diff --git a/run_docker.sh b/run_docker.sh new file mode 100644 index 0000000000000000000000000000000000000000..5ae366f49a6f2a49a12fe67493479e27cf103f97 --- /dev/null +++ b/run_docker.sh @@ -0,0 +1,82 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Switch to the directory where this script is located +cd "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" + +mcp_entry_name="${MCP_ENTRY_NAME:-pyro}" +mcp_entry_url="${MCP_ENTRY_URL:-http://localhost:7860/mcp}" +mcp_dir="${HOME}/.cursor" +mcp_path="${mcp_dir}/mcp.json" +mkdir -p "${mcp_dir}" + +if command -v python3 >/dev/null 2>&1; then +python3 - "${mcp_path}" "${mcp_entry_name}" "${mcp_entry_url}" <<'PY' +import json, os, sys +path, name, url = sys.argv[1:4] +cfg = {"mcpServers": {}} +if os.path.exists(path): + try: + with open(path, "r", encoding="utf-8") as f: + cfg = json.load(f) + except Exception: + cfg = {"mcpServers": {}} +if not isinstance(cfg, dict): + cfg = {"mcpServers": {}} +servers = cfg.get("mcpServers") +if not isinstance(servers, dict): + servers = {} +ordered = {} +for k, v in servers.items(): + if k != name: + ordered[k] = v +ordered[name] = {"url": url} +cfg = {"mcpServers": ordered} +with open(path, "w", encoding="utf-8") as f: + json.dump(cfg, f, indent=2, ensure_ascii=False) +PY +elif command -v python >/dev/null 2>&1; then +python - "${mcp_path}" "${mcp_entry_name}" "${mcp_entry_url}" <<'PY' +import json, os, sys +path, name, url = sys.argv[1:4] +cfg = {"mcpServers": {}} +if os.path.exists(path): + try: + with open(path, "r", encoding="utf-8") as f: + cfg = json.load(f) + except Exception: + cfg = {"mcpServers": {}} +if not isinstance(cfg, dict): + cfg = {"mcpServers": {}} +servers = cfg.get("mcpServers") +if not isinstance(servers, dict): + servers = {} +ordered = {} +for k, v in servers.items(): + if k != name: + ordered[k] = v +ordered[name] = {"url": url} +cfg = {"mcpServers": ordered} +with open(path, "w", encoding="utf-8") as f: + json.dump(cfg, f, indent=2, ensure_ascii=False) +PY +elif command -v jq >/dev/null 2>&1; then + name="${mcp_entry_name}"; url="${mcp_entry_url}" + if [ -f "${mcp_path}" ]; then + tmp="$(mktemp)" + jq --arg name "$name" --arg url "$url" ' + .mcpServers = (.mcpServers // {}) + | .mcpServers as $s + | ($s | with_entries(select(.key != $name))) as $base + | .mcpServers = ($base + {($name): {"url": $url}}) + ' "${mcp_path}" > "${tmp}" && mv "${tmp}" "${mcp_path}" + else + printf '{ "mcpServers": { "%s": { "url": "%s" } } } +' "$name" "$url" > "${mcp_path}" + fi +else + echo "Warning: neither python nor jq found; skipped updating ~/.cursor/mcp.json" >&2 +fi + +docker build -t pyro-mcp . +docker run --rm -p 7860:7860 pyro-mcp