+ All Categories
Home > Documents > Mock Your RNGs

Mock Your RNGs

Date post: 16-Oct-2021
Category:
Upload: others
View: 3 times
Download: 0 times
Share this document with a friend
29
Mock Your RNGs Lessons in tes)ng Stan, a probabilis)c programming language IBM AI Systems Day. Oct 3, 2018. Daniel Lee Stan Development Team / Generable
Transcript
Page 1: Mock Your RNGs

Mock Your RNGsLessons in tes)ng Stan,

a probabilis)c programming language

IBM AI Systems Day. Oct 3, 2018. Daniel LeeStan Development Team / Generable

Page 2: Mock Your RNGs

Who's heard of Stan?(we usually don't run in AI circles)

Page 3: Mock Your RNGs

What is Stan?

Page 4: Mock Your RNGs

Language for Sta;s;cal Models• Goal: specify sta)s)cal models p(✓, x)

data

Page 5: Mock Your RNGs

Language for Sta;s;cal Modelsp(✓, x)

dataparameters

• Goal: specify sta)s)cal models

Page 6: Mock Your RNGs

Language for Sta;s;cal Modelsp(✓, x)

dataparametersmodel

• Goal: specify sta)s)cal models

Page 7: Mock Your RNGs

Language for Sta;s;cal Models• Goal: specify sta)s)cal models

• Probabilis)c programming language (has its own grammar)

• impera)ve, sta)cally typed

• Turing complete

• User can specify any differen'able joint probability distribu)on func)onover data and parameters

p(✓, x)dataparametersmodel

Page 8: Mock Your RNGs

Example: Hello World

Page 9: Mock Your RNGs

Example: Logis;c Regression

Page 10: Mock Your RNGs

Language defines the sta;s;cal modelp(✓, x)

Page 11: Mock Your RNGs

Inference algorithms use p(✓, x)▸ Bayesian inference; Markov Chain Monte Carlo (MCMC)

▸ Approximate Bayesian inference

▸ Op)miza)on

Page 12: Mock Your RNGs

▸ Bayesian inference; Markov Chain Monte Carlo (MCMC)

▸ approximated with

▸ Approximate Bayesian inference

▸ ex: where

▸ Op)miza)on

▸ (only holds when there's a single op)ma)

p(✓ |x) {✓(1), ✓(2), . . . , ✓(N)}<latexit sha1_base64="FpPnCNZqoMHXD02O4ilwteaVslg=">AAACHHicbVDLSgMxFM3UV62vqks3wSK0IGWmFNRdwU1XUsHaQmcsmTRtQzMPkjtCGeZH3PgrblyouHEh+Dem00G09UDg3HPu5eYeNxRcgWl+GbmV1bX1jfxmYWt7Z3evuH9wq4JIUtamgQhk1yWKCe6zNnAQrBtKRjxXsI47uZz5nXsmFQ/8G5iGzPHIyOdDTgloqV+s27ENYwbkLi5bleQU/1S1tBKDANQv9aqS2Em/WDKrZgq8TKyMlFCGVr/4YQ8CGnnMByqIUj3LDMGJiQROBUsKdqRYSOiEjFhPU594TDlxel2CT7QywMNA6ucDTtXfEzHxlJp6ru70CIzVojcT//N6EQzPnZj7YQTMp/NFw0hgCPAsKjzgklEQU00IlVz/FdMxkYSCDrSgQ7AWT14m7Vr1ompe10uNZpZGHh2hY1RGFjpDDdRELdRGFD2gJ/SCXo1H49l4M97nrTkjmzlEf2B8fgOhkKCe</latexit><latexit sha1_base64="FpPnCNZqoMHXD02O4ilwteaVslg=">AAACHHicbVDLSgMxFM3UV62vqks3wSK0IGWmFNRdwU1XUsHaQmcsmTRtQzMPkjtCGeZH3PgrblyouHEh+Dem00G09UDg3HPu5eYeNxRcgWl+GbmV1bX1jfxmYWt7Z3evuH9wq4JIUtamgQhk1yWKCe6zNnAQrBtKRjxXsI47uZz5nXsmFQ/8G5iGzPHIyOdDTgloqV+s27ENYwbkLi5bleQU/1S1tBKDANQv9aqS2Em/WDKrZgq8TKyMlFCGVr/4YQ8CGnnMByqIUj3LDMGJiQROBUsKdqRYSOiEjFhPU594TDlxel2CT7QywMNA6ucDTtXfEzHxlJp6ru70CIzVojcT//N6EQzPnZj7YQTMp/NFw0hgCPAsKjzgklEQU00IlVz/FdMxkYSCDrSgQ7AWT14m7Vr1ompe10uNZpZGHh2hY1RGFjpDDdRELdRGFD2gJ/SCXo1H49l4M97nrTkjmzlEf2B8fgOhkKCe</latexit><latexit sha1_base64="FpPnCNZqoMHXD02O4ilwteaVslg=">AAACHHicbVDLSgMxFM3UV62vqks3wSK0IGWmFNRdwU1XUsHaQmcsmTRtQzMPkjtCGeZH3PgrblyouHEh+Dem00G09UDg3HPu5eYeNxRcgWl+GbmV1bX1jfxmYWt7Z3evuH9wq4JIUtamgQhk1yWKCe6zNnAQrBtKRjxXsI47uZz5nXsmFQ/8G5iGzPHIyOdDTgloqV+s27ENYwbkLi5bleQU/1S1tBKDANQv9aqS2Em/WDKrZgq8TKyMlFCGVr/4YQ8CGnnMByqIUj3LDMGJiQROBUsKdqRYSOiEjFhPU594TDlxel2CT7QywMNA6ucDTtXfEzHxlJp6ru70CIzVojcT//N6EQzPnZj7YQTMp/NFw0hgCPAsKjzgklEQU00IlVz/FdMxkYSCDrSgQ7AWT14m7Vr1ompe10uNZpZGHh2hY1RGFjpDDdRELdRGFD2gJ/SCXo1H49l4M97nrTkjmzlEf2B8fgOhkKCe</latexit>

p̂(✓ |x) ⇡ q(�̂)

✓̂ = argmax✓

p(✓, x)

Inference algorithms use p(✓, x)

�̂ = argmin�

DKL (q(✓ |�) || p(✓, x))<latexit sha1_base64="YU71ZQxTrmorMb2/OGsQFcXUFYA=">AAACZ3icbVBtaxQxEM5uq9arL1urRfBL9BCuUI69UrAVhIJ+EFqkgmcLl+PI5mZvQ5PsNpkVj72l/7Hf/AF+8VeYvS6irQMZHp5nZjLzJIWSDuP4RxCurN65e2/tfmf9wcNHj6ONJ19dXloBQ5Gr3J4l3IGSBoYoUcFZYYHrRMFpcv6+0U+/gXUyN19wXsBY85mRqRQcPTWJLlnGsWJFJmv6jrLSTH0xtEzFNMfM6orbmZamrikD4wougH6Y/BGPjuuaKUixd9FjmAFytkMX1KdmyDZlb+li0eSilXfod89aOctwexJ14368DHobDFrQJW2cTKIrNs1FqcGgUNy50SAucOw3RCkU1B1WOvAbnvMZjDw0XIMbV0ujavraM1Oa5tY/g3TJ/t1Rce3cXCe+sjnO3dQa8n/aqMR0f1xJU5QIRlx/lJaKYk4b1+lUWhCo5h5wYaXflYqMWy7Q293xJgxunnwbDHf7B/3481738FPrxhp5QV6RHhmQN+SQfCQnZEgE+RmsB0+DZ8GvMAq3wufXpWHQ9mySfyJ8+RtxYri0</latexit><latexit sha1_base64="YU71ZQxTrmorMb2/OGsQFcXUFYA=">AAACZ3icbVBtaxQxEM5uq9arL1urRfBL9BCuUI69UrAVhIJ+EFqkgmcLl+PI5mZvQ5PsNpkVj72l/7Hf/AF+8VeYvS6irQMZHp5nZjLzJIWSDuP4RxCurN65e2/tfmf9wcNHj6ONJ19dXloBQ5Gr3J4l3IGSBoYoUcFZYYHrRMFpcv6+0U+/gXUyN19wXsBY85mRqRQcPTWJLlnGsWJFJmv6jrLSTH0xtEzFNMfM6orbmZamrikD4wougH6Y/BGPjuuaKUixd9FjmAFytkMX1KdmyDZlb+li0eSilXfod89aOctwexJ14368DHobDFrQJW2cTKIrNs1FqcGgUNy50SAucOw3RCkU1B1WOvAbnvMZjDw0XIMbV0ujavraM1Oa5tY/g3TJ/t1Rce3cXCe+sjnO3dQa8n/aqMR0f1xJU5QIRlx/lJaKYk4b1+lUWhCo5h5wYaXflYqMWy7Q293xJgxunnwbDHf7B/3481738FPrxhp5QV6RHhmQN+SQfCQnZEgE+RmsB0+DZ8GvMAq3wufXpWHQ9mySfyJ8+RtxYri0</latexit><latexit sha1_base64="YU71ZQxTrmorMb2/OGsQFcXUFYA=">AAACZ3icbVBtaxQxEM5uq9arL1urRfBL9BCuUI69UrAVhIJ+EFqkgmcLl+PI5mZvQ5PsNpkVj72l/7Hf/AF+8VeYvS6irQMZHp5nZjLzJIWSDuP4RxCurN65e2/tfmf9wcNHj6ONJ19dXloBQ5Gr3J4l3IGSBoYoUcFZYYHrRMFpcv6+0U+/gXUyN19wXsBY85mRqRQcPTWJLlnGsWJFJmv6jrLSTH0xtEzFNMfM6orbmZamrikD4wougH6Y/BGPjuuaKUixd9FjmAFytkMX1KdmyDZlb+li0eSilXfod89aOctwexJ14368DHobDFrQJW2cTKIrNs1FqcGgUNy50SAucOw3RCkU1B1WOvAbnvMZjDw0XIMbV0ujavraM1Oa5tY/g3TJ/t1Rce3cXCe+sjnO3dQa8n/aqMR0f1xJU5QIRlx/lJaKYk4b1+lUWhCo5h5wYaXflYqMWy7Q293xJgxunnwbDHf7B/3481738FPrxhp5QV6RHhmQN+SQfCQnZEgE+RmsB0+DZ8GvMAq3wufXpWHQ9mySfyJ8+RtxYri0</latexit>

Page 13: Mock Your RNGs

▸ Bayesian inference; Markov Chain Monte Carlo (MCMC)

▸ approximated with

▸ Approximate Bayesian inference

▸ ex: where

▸ Op)miza)on

▸ (only holds when there's a single op)ma)

p(✓ |x) {✓(1), ✓(2), . . . , ✓(N)}<latexit sha1_base64="FpPnCNZqoMHXD02O4ilwteaVslg=">AAACHHicbVDLSgMxFM3UV62vqks3wSK0IGWmFNRdwU1XUsHaQmcsmTRtQzMPkjtCGeZH3PgrblyouHEh+Dem00G09UDg3HPu5eYeNxRcgWl+GbmV1bX1jfxmYWt7Z3evuH9wq4JIUtamgQhk1yWKCe6zNnAQrBtKRjxXsI47uZz5nXsmFQ/8G5iGzPHIyOdDTgloqV+s27ENYwbkLi5bleQU/1S1tBKDANQv9aqS2Em/WDKrZgq8TKyMlFCGVr/4YQ8CGnnMByqIUj3LDMGJiQROBUsKdqRYSOiEjFhPU594TDlxel2CT7QywMNA6ucDTtXfEzHxlJp6ru70CIzVojcT//N6EQzPnZj7YQTMp/NFw0hgCPAsKjzgklEQU00IlVz/FdMxkYSCDrSgQ7AWT14m7Vr1ompe10uNZpZGHh2hY1RGFjpDDdRELdRGFD2gJ/SCXo1H49l4M97nrTkjmzlEf2B8fgOhkKCe</latexit><latexit sha1_base64="FpPnCNZqoMHXD02O4ilwteaVslg=">AAACHHicbVDLSgMxFM3UV62vqks3wSK0IGWmFNRdwU1XUsHaQmcsmTRtQzMPkjtCGeZH3PgrblyouHEh+Dem00G09UDg3HPu5eYeNxRcgWl+GbmV1bX1jfxmYWt7Z3evuH9wq4JIUtamgQhk1yWKCe6zNnAQrBtKRjxXsI47uZz5nXsmFQ/8G5iGzPHIyOdDTgloqV+s27ENYwbkLi5bleQU/1S1tBKDANQv9aqS2Em/WDKrZgq8TKyMlFCGVr/4YQ8CGnnMByqIUj3LDMGJiQROBUsKdqRYSOiEjFhPU594TDlxel2CT7QywMNA6ucDTtXfEzHxlJp6ru70CIzVojcT//N6EQzPnZj7YQTMp/NFw0hgCPAsKjzgklEQU00IlVz/FdMxkYSCDrSgQ7AWT14m7Vr1ompe10uNZpZGHh2hY1RGFjpDDdRELdRGFD2gJ/SCXo1H49l4M97nrTkjmzlEf2B8fgOhkKCe</latexit><latexit sha1_base64="FpPnCNZqoMHXD02O4ilwteaVslg=">AAACHHicbVDLSgMxFM3UV62vqks3wSK0IGWmFNRdwU1XUsHaQmcsmTRtQzMPkjtCGeZH3PgrblyouHEh+Dem00G09UDg3HPu5eYeNxRcgWl+GbmV1bX1jfxmYWt7Z3evuH9wq4JIUtamgQhk1yWKCe6zNnAQrBtKRjxXsI47uZz5nXsmFQ/8G5iGzPHIyOdDTgloqV+s27ENYwbkLi5bleQU/1S1tBKDANQv9aqS2Em/WDKrZgq8TKyMlFCGVr/4YQ8CGnnMByqIUj3LDMGJiQROBUsKdqRYSOiEjFhPU594TDlxel2CT7QywMNA6ucDTtXfEzHxlJp6ru70CIzVojcT//N6EQzPnZj7YQTMp/NFw0hgCPAsKjzgklEQU00IlVz/FdMxkYSCDrSgQ7AWT14m7Vr1ompe10uNZpZGHh2hY1RGFjpDDdRELdRGFD2gJ/SCXo1H49l4M97nrTkjmzlEf2B8fgOhkKCe</latexit>

p̂(✓ |x) ⇡ q(�̂)

✓̂ = argmax✓

p(✓, x)

Inference algorithms use p(✓, x)

�̂ = argmin�

DKL (q(✓ |�) || p(✓, x))<latexit sha1_base64="YU71ZQxTrmorMb2/OGsQFcXUFYA=">AAACZ3icbVBtaxQxEM5uq9arL1urRfBL9BCuUI69UrAVhIJ+EFqkgmcLl+PI5mZvQ5PsNpkVj72l/7Hf/AF+8VeYvS6irQMZHp5nZjLzJIWSDuP4RxCurN65e2/tfmf9wcNHj6ONJ19dXloBQ5Gr3J4l3IGSBoYoUcFZYYHrRMFpcv6+0U+/gXUyN19wXsBY85mRqRQcPTWJLlnGsWJFJmv6jrLSTH0xtEzFNMfM6orbmZamrikD4wougH6Y/BGPjuuaKUixd9FjmAFytkMX1KdmyDZlb+li0eSilXfod89aOctwexJ14368DHobDFrQJW2cTKIrNs1FqcGgUNy50SAucOw3RCkU1B1WOvAbnvMZjDw0XIMbV0ujavraM1Oa5tY/g3TJ/t1Rce3cXCe+sjnO3dQa8n/aqMR0f1xJU5QIRlx/lJaKYk4b1+lUWhCo5h5wYaXflYqMWy7Q293xJgxunnwbDHf7B/3481738FPrxhp5QV6RHhmQN+SQfCQnZEgE+RmsB0+DZ8GvMAq3wufXpWHQ9mySfyJ8+RtxYri0</latexit><latexit sha1_base64="YU71ZQxTrmorMb2/OGsQFcXUFYA=">AAACZ3icbVBtaxQxEM5uq9arL1urRfBL9BCuUI69UrAVhIJ+EFqkgmcLl+PI5mZvQ5PsNpkVj72l/7Hf/AF+8VeYvS6irQMZHp5nZjLzJIWSDuP4RxCurN65e2/tfmf9wcNHj6ONJ19dXloBQ5Gr3J4l3IGSBoYoUcFZYYHrRMFpcv6+0U+/gXUyN19wXsBY85mRqRQcPTWJLlnGsWJFJmv6jrLSTH0xtEzFNMfM6orbmZamrikD4wougH6Y/BGPjuuaKUixd9FjmAFytkMX1KdmyDZlb+li0eSilXfod89aOctwexJ14368DHobDFrQJW2cTKIrNs1FqcGgUNy50SAucOw3RCkU1B1WOvAbnvMZjDw0XIMbV0ujavraM1Oa5tY/g3TJ/t1Rce3cXCe+sjnO3dQa8n/aqMR0f1xJU5QIRlx/lJaKYk4b1+lUWhCo5h5wYaXflYqMWy7Q293xJgxunnwbDHf7B/3481738FPrxhp5QV6RHhmQN+SQfCQnZEgE+RmsB0+DZ8GvMAq3wufXpWHQ9mySfyJ8+RtxYri0</latexit><latexit sha1_base64="YU71ZQxTrmorMb2/OGsQFcXUFYA=">AAACZ3icbVBtaxQxEM5uq9arL1urRfBL9BCuUI69UrAVhIJ+EFqkgmcLl+PI5mZvQ5PsNpkVj72l/7Hf/AF+8VeYvS6irQMZHp5nZjLzJIWSDuP4RxCurN65e2/tfmf9wcNHj6ONJ19dXloBQ5Gr3J4l3IGSBoYoUcFZYYHrRMFpcv6+0U+/gXUyN19wXsBY85mRqRQcPTWJLlnGsWJFJmv6jrLSTH0xtEzFNMfM6orbmZamrikD4wougH6Y/BGPjuuaKUixd9FjmAFytkMX1KdmyDZlb+li0eSilXfod89aOctwexJ14368DHobDFrQJW2cTKIrNs1FqcGgUNy50SAucOw3RCkU1B1WOvAbnvMZjDw0XIMbV0ujavraM1Oa5tY/g3TJ/t1Rce3cXCe+sjnO3dQa8n/aqMR0f1xJU5QIRlx/lJaKYk4b1+lUWhCo5h5wYaXflYqMWy7Q293xJgxunnwbDHf7B/3481738FPrxhp5QV6RHhmQN+SQfCQnZEgE+RmsB0+DZ8GvMAq3wufXpWHQ9mySfyJ8+RtxYri0</latexit>

Page 14: Mock Your RNGs

Interfaces• CmdStan, RStan, PyStan

• C++ API

• C++ automa)c differen)a)on library

• RStanArm, brms, prophet, …

Page 15: Mock Your RNGs

Stan: mc-stan.org• Language

• Inference algorithms

• Interfaces

• Open Source:

• BSD: lang, math, CmdStan

• GPL: RStan, PyStan

• github.com/stan-dev

Page 16: Mock Your RNGs

If you can't remember anything else in this talk…

Page 17: Mock Your RNGs

Mock your random number generators

Page 18: Mock Your RNGs

Tes;ng challenges in Stan• Inference algorithms are randomized algorithms

Markov chain Monte Carlo (MCMC)

• Run the same input with a different seed, the output changes

• These algorithms have nice asympto)c proper)es,but… we don't have asympto)c )me

Page 19: Mock Your RNGs

Tes;ng challenges in Stan• Inference algorithms are randomized algorithms

Markov chain Monte Carlo (MCMC)

• Run the same input with a different seed, the output changes

• These algorithms have nice asympto)c proper)es,but… we don't have asympto)c )me

• Stan is pre\y complex (~100k sloc, ~250k test sloc)

• Stan programs transpiled to C++

• automa)c differen)a)on library: heavily templated C++

• custom deriva)ves for speed

Page 20: Mock Your RNGs

Tes;ng is…• Tes)ng so_ware: tough

Page 21: Mock Your RNGs

Tes;ng is…• Tes)ng so_ware: tough

• Tes)ng a programming language: tougher

Page 22: Mock Your RNGs

Tes;ng is…• Tes)ng so_ware: tough

• Tes)ng a programming language: tougher

• Tes)ng randomized algorithms that operate on a programming language… priceless

Page 23: Mock Your RNGs

Things we know• Computers aren't random

(either hardware failure or unsafe memory access)

• use of pseudo random number generators

• So_ware: modularity combats complexity

• How do we extend this to tes)ngrandomized algorithms?

Page 24: Mock Your RNGs

Mock your RNGs• Mock your random number generators

• Test the randomized algorithm with a known sequence of (not so random any more) random numbers

• Reproducible, easier to break down code

• Acts like any other unit test

• (Beware… IEEE sfloa)ng point behavior can s)ll get you)

• (Also test asympto)c proper)es for correctness)

Page 26: Mock Your RNGs

Breakthroughs in stats compu;ng• Inference algorithms

• Autodiff

Page 27: Mock Your RNGs

250 dimensional Normal distribu;on

Hoffman and Gelman. "The No-U-Turn Sampler." JLMR. 2014.

2d projection

1000 draws

Page 28: Mock Your RNGs

Quick aside: HMC is not enough• Hamiltonian Monte Carlo isn't enough

Hoffman and Gelman. "The No-U-Turn Sampler." JLMR. 2014.

Page 29: Mock Your RNGs

Autodiff comparison• For open-source C++ packages: Stan is fastest (for gradients),

most general (func)ons supported), and most easily extensible (simple OO)


Recommended