extensible so ware for hierarchical modeling using the
play

Extensibleso,warefor hierarchicalmodeling: - PowerPoint PPT Presentation

Extensibleso,warefor hierarchicalmodeling: usingtheNIMBLEpla>ormto exploremodelsandalgorithms


  1. Extensible
so,ware
for
 hierarchical
modeling:


 using
the
NIMBLE
pla>orm
to
 explore
models
and
algorithms
 Perry
de
Valpine
(PI)






UC
Berkeley
Environmental
Science,
Policy
and
Managem’t
 Daniel
Turek




















UC
Berkeley
StaRsRcs
and
ESPM
 Christopher
Paciorek




UC
Berkeley
Sta4s4cs
 Ras
Bodík

























UC
Berkeley
Electrical
Engineering
and
Computer
Science
 Duncan
Temple
Lang





UC
Davis
StaRsRcs
 MCMSki
2014,
Chamonix
 January,
2014


  2. Background
and
Goals
 • So,ware
for
fiWng
Bayesian
models
has
opened
their
 use
to
a
wide
variety
of
communiRes
 • Most
so,ware
for
fiWng
hierarchical
models
is
either
 model‐specific
or
algorithm‐specific
 • So,ware
is
o,en
a
black
box
and
hard
to
extend
 • Our
goal
is
to
divorce
model
specificaRon
from
 algorithm,
while
 – Retaining
BUGS
compaRbility
 – Providing
a
variety
of
standard
algorithms
 – Allowing
developers
to
add
new
algorithms
(including
 modular
combinaRon
of
algorithms)
 – Allowing
users
to
operate
within
R
 – Providing
speed
via
compilaRon
to
C++,
with
R
wrappers
 NIMBLE:
extensible
so,ware
for
 2
 hierarchical
models


  3. Divorcing
Model
SpecificaRon

 from
Algorithm
 MCMC
Flavor
1
 Your
new
method
 Y(1)
 Y(2)
 Y(3)
 MCMC
Flavor
2
 Data
cloning
 X(1)
 X(2)
 X(3)
 ParRcle
Filter
 MCEM
 Quadrature
 Importance
Sampler
 Unscented
KF
 NIMBLE:
extensible
so,ware
for
 3
 hierarchical
models


  4. NIMBLE
Design
 • 
 High‐level
processing
in
R
(as
much
as
possible)
 • 
 Process
BUGS
language
for
declaring
models
(with
some
extensions)
 • 
Process
model
structure
(node
dependencies,
conjugate
relaRonships,
 etc.)
 • 
Generate
and
customize
algorithm
specificaRons
 • 
Generate
model‐specific
C++
code
to
be
compiled
on
the
fly

 • 
Provide
matching
implementaRon
in
R
for
prototyping
/
debugging
/
 tesRng
 • 
Some
high‐level
algorithm
control
possible
in
R
(adapRng
tuning
 parameters,
monitoring
convergence,
high
levels
of
iteraRon)
 

 • 
Low‐level
processing
in
C++
 • 
 Model
and
algorithm
computaRons
 • 
“Run‐Rme”
parameters
allow
some
modificaRon
of
behavior
without
 recompiling
 NIMBLE:
extensible
so,ware
for
 4
 hierarchical
models


  5. User
Experience:
Processing
a
BUGS
Model
 likersModelCode
<‐
quote({
 y[2] 

for(j
in
1:G)
{
 y[1] y[3] 



for(I
in
1:N)
{
 
r[i,
j]
~
dbin(p[i,
j],
n[i,
j]);
 muBlock[1] 
p[i,
j]
~
dbeta(a[j],
b[j]);
 




}
 y[6] 




mu[j]
<‐
a[j]/(a[j]
+
b[j]);
 mu 




theta[j]
<‐
1.0/(a[j]
+
b[j]);
 muBlock[2] y[9] 




a[j]
~
dgamma(1,
0.001);
 y[4] muBlock[3] 




b[j]
~
dgamma(1,
0.001);
 
})
 y[8] y[5] y[7] Parse
and
process
BUGS
code
(R
 1
 parse()
).
 Collect
informaRon
in

model
object.
 Use
igraph
plot
method.
 
 
 >
likersModel
<‐
BUGSmodel(likersModelCode,
setupData
=
list(N
=
16,
G
=
2,
n
=
data))
 Provides
variables
and
funcRons
for
 algorithms
to
use. 
 NIMBLE:
extensible
so,ware
for
 5
 hierarchical
models


  6. User
Experience:
Specializing
an
Algorithm
to
a
Model
 likersModelCode
<‐
quote({
 updater.RW.Normal
<‐
nimbleFuncRon(
 

for(j
in
1:G)
{
 

….
 



for(I
in
1:N)
{
 



origValue
<‐
model[[targetNode]]
 
r[i,
j]
~
dbin(p[i,
j],
n[i,
j]);
 



logProbCurrent
<‐
getLogProb(model,
calcNodes)





 
p[i,
j]
~
dbeta(a[j],
b[j]);
 



propValue
<‐
rnorm(1,
mean
=
origValue,
sd
=
scale)



 




}
 



model[[targetNode]]
<‐
propValue
 




mu[j]
<‐
a[j]/(a[j]
+
b[j]);
 



logProbProposed
<‐
calculate(model,
calcNodes)
 




theta[j]
<‐
1.0/(a[j]
+
b[j]);
 



logProbProposal
<‐
dnorm(propValue,
mean
=
origValue,
sd
=
scale,
 




a[j]
~
dgamma(1,
0.001);
 log
=
TRUE)
 




b[j]
~
dgamma(1,
0.001);
 



…
 
})
 >
likersMCMCspec
<‐
MCMCspec(likersModel,
adaptInterval
=
100)
 >
getUpdaters(likersMCMCspec)
 Updater
for
nodes:
b[1]
 type:
RW
 rwInfo
(list):
 
‐‐>
'scale'
(numeric):
0.1
 
‐‐>
'adapt'
(logical):
TRUE
 
‐‐>
'propCov'
(character):
idenRty
 
[...snip...]

 >
addUpdater(likersMCMCspec,
updater(c(‘a[1]’,
‘b[1]’),
‘Rwblock’,
rwInfo
=
list(scale
=
0.1))
 >
addMonitor(likersMCMCspec,
‘a’);
addMonitor(likersMCMCspec,
‘b’)
 >
likersMCMC
<‐
buildMCMC(likersMCMCspec)
 >
likersMCMC_Cpp
<‐
compileNIMBLE(likersModel,
likersMCMC)
 
 >
likersMCMC_Cpp$likersMCMC(20000)
 NIMBLE:
extensible
so,ware
for
 6
 hierarchical
models


  7. User
Experience:
Specializing
an
Algorithm
to
a
Model
(2)
 likersModelCode
<‐
quote({
 buildMCEM
<‐
nimbleFuncRon(
 

for(j
in
1:G)
{
 

while(runRme(converged
==
0))
{
 



for(I
in
1:N)
{
 

….
 
r[i,
j]
~
dbin(p[i,
j],
n[i,
j]);
 





calculate(model,
paramDepDetermNodes)
 
p[i,
j]
~
dbeta(a[j],
b[j]);
 





mcmcFun(mcmc.its,
iniRalize
=
FALSE)
 




}
 





currentParamVals[1:nParamNodes]
<‐
getValues(model,paramNodes)






 




mu[j]
<‐
a[j]/(a[j]
+
b[j]);
 





op
<‐
opRm(currentParamVals,
objFun,
maximum
=
TRUE)
 




theta[j]
<‐
1.0/(a[j]
+
b[j]);
 





newParamVals
<‐
op$maximum

 




a[j]
~
dgamma(1,
0.001);
 …..
 




b[j]
~
dgamma(1,
0.001);
 
})
 >
likersMCEM
<‐
buildMCEM(likersModel,
paramNodes
=
c(‘a’,
‘b’),
latentNodes
=
‘p’)
 
 >
likersMCEM_Cpp
<‐
compileNIMBLE(likersModel,
likersMCEM)
 
 >
set.seed(0)
 >
likersMCEM_Cpp$likersMCEM(init
=
c(1000,
10,
100,
1),
mcmcIts
=
1000,
tol
=
1e‐6)
 Modularity:
 One
can
plug
any
MCMC
sampler
into
the
MCEM,
with
user
control
of
the
sampling
strategy,
in
place
 of
the
default
MCMC.
 NIMBLE:
extensible
so,ware
for
 7
 hierarchical
models


  8. Programmer
Experience:
NIMBLE
Algorithm
DSL
 • 
 BUGS
is
a
Domain‐Specific
Language
(DSL)
for
models
 • 
NIMBLE
provides
a
DSL
for
algorithms
 • 
The
DSL
is
a
modified
subset
of
R.
 • 
We
provide
 • 
Basic
types
(double,
boolean)
 • 
Basic
(vectorized)
math
and
distribuRon/probability
calculaRons
 • 
Basic
data
storage
classes
(“modelValues”)
 • 
Control
structures
–
for
loops
and
if‐then‐else
 • 
FuncRons
 • 
Linear
algebra
(via
the
Eigen
package)

 • 
FuncRon
definiRons
in
the
DSL
include
code
for
two
steps:
 • 
A
general
funcRon
is
wriken
for
any
model
structure
 • 
When
a
model
is
provided,
a
set
of
one‐Rme
(compile‐Rme)
processing
is
 executed
based
on
the
model
structure
 • 
Run‐Rme
code
can
use
informaRon
determined
from
the
compile‐Rme
 processing
 • 
Compile‐Rme
processing
is
executed
in
R.

Run‐Rme
processing
can
be
 compiled
to
C++
 NIMBLE:
extensible
so,ware
for
 8
 hierarchical
models


  9. Programmer
Experience:
CreaRng
an
Algorithm
 myAlgorithmGenerator
<‐
nimbleFuncRon
(
 
 

compileArgs
=
list(model,
…),
 
 

runTimeArgs
=
list(…),
 


 

setupCode
=
{
 
 



#
code
that
does
the
specializaRon
of
algorithm
to
model
 
 5
secRons
to
a
 

},
 NIMBLE
funcRon.
 


 
 

runTimeCode
=
{
 
 



#
code
that
carries
out
the
generic
algorithm

 
 

},
 


 

returnType
=
double()
 )
 


Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend