reduce_log_sum_exp function, aka reduce_sum for mixtures

Abierto
#841 23 comentarios 5 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
25/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
ocaml
Área
compilers

Línea de trabajo

Comienza rastreando los puntos de entrada existentes de reduce_sum y map_rect en stanc3, y luego inspecciona cómo se representa y se diferencia log_sum_exp. El issue no menciona archivos ni tests, así que identifica las rutas relevantes del compilador y añade cobertura que demuestre que reduce_log_sum_exp marginaliza los términos de las variables discretas y contribuye correctamente a target.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

feature

I have a situation where I'd like use something like reduce_sum, but it's for marginalizing out a discrete variable, so the reduction is log-sum-exp rather than just sum.

The general pattern for marginalizing out a discrete variable is this:

vector[K] lp;
for (z in 1:K)
  lp[z] = log p(z) + log p(y | z, x, theta);
target += log_sum_exp(lp);

It'd be nice to have a reduce_log_sum_exp function that works just like reduce_sum, only with log_sum_exp rather than sum as the final reduction before adding to target.

The log-sum-exp gradient itself can be done analytically as part of the reduction, which will save a whole bunch of storage relative to just using map_rect and doing the log-sum-exp on the result.

Lenguaje dominante
OCaml
Estrellas
162
Forks
60
Merge medio
2 d 22 h
PR fusionados (30 d)
14

Preparar el entorno

  • Sin Dockerfile ni archivo de Docker Compose
  • Tiene una plantilla de pull request
  • Sin guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de stan-dev/stanc3

Todos los issues de stan-dev/stanc3

Issues similares

Más issues de Compilers

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.