Cómo probar y depurar código, código de optimización numérica y / o modelos de aprendizaje automático

Primero, debe usar pruebas unitarias para asegurarse de que el código que ha pasado una prueba se pruebe constantemente para que al solucionar un problema no introduzca otro.

En segundo lugar, muchos de estos problemas se reducen a verificar si ha calculado correctamente un gradiente. La mejor manera de hacerlo es tomar su código, que implementa una actualización basada en una derivada analítica y compararlo con una actualización basada en derivadas numéricas. Puede conectar muchos valores diferentes y asegurarse de que su código proporcione la misma actualización (precisión numérica del módulo).

Para los algoritmos estocásticos (como el muestreo de Gibbs), me aseguro de que mi código esté escrito para que el generador de números aleatorios se pueda apagar. Para las pruebas, desea reemplazar el generador de números aleatorios con algo determinista (es decir, tomar puntos de corte predefinidos, seleccionar el modo condicional, etc.) y escribir sus pruebas en función de este generador de números aleatorios.

Finalmente, para la inferencia probabilística con variables latentes, debe muestrear un conjunto de variables de una distribución conjunta completamente especificada y asegurarse de que su inferencia pueda recuperar (identificabilidad del módulo) las variables latentes verdaderas.