Markus Leopoldseder (Director of Knowledge - Global Manufacturing and Supply Chain Practice at McKinsey) planteó dos preguntas relevantes sobre la aplicabilidad de Differentiable Programming (DP) para fines de supply chain. En este post bastante técnico, intentaremos proporcionar algunas ideas sobre cómo se abordan, respectivamente, las restricciones de enteros y la uncertainty en DP. Esto es solo una primera mirada al enfoque de Lokad. Estamos planeando publicar, en una fecha posterior, recetas extendidas en docs.lokad.com.

¿Cómo se aplica DP a las variables enteras? De hecho, si la función objetivo recibe enteros como entradas, podría no ser diferenciable.

Desde una perspectiva de supply chain, la mayoría de las decisiones son discretas: no podemos ordenar 4.2 unidades de un producto, son o 4 o 5. Por ello, buscamos —tanto desde una perspectiva de aprendizaje como de optimización— métodos que funcionen bien con enteros. Tal como señaló agudamente nuestro lector, los parámetros en DP son números y esos parámetros no pueden ser restringidos a enteros, ya que esta perspectiva no es compatible con el descenso de gradiente estocástico que se encuentra en el núcleo de DP.

Existen varias formas de obtener decisiones discretas y sus correspondientes funciones objetivo discretas mediante DP, que van desde enfoques ingenuos pero directos, hasta métodos sumamente complicados pero inigualables en lo que respecta a la optimización numérica.

Enteros e incertidumbre en la programación diferenciable

El enfoque más sencillo consiste en interpolar la función objetivo durante el entrenamiento y redondear los resultados en tiempo de evaluación. Por ejemplo, si buscamos una cantidad de pedido de compra —que se espera sea un entero— la función objetivo puede ser extendida a números arbitrarios mediante interpolación. Esto funciona bien al considerar sistemas que, a pesar de ser discretos, exhiben comportamientos bastante lineales. Sin embargo, al enfrentar una fuerte no linealidad, como una restricción de MOQ (cantidad mínima de pedido), esto no funciona tan bien.

Para lidiar con tales situaciones, la función objetivo puede ser reemplazada por una función sustituta, una función que aproxima la función objetivo original, pero de manera suave y diferenciable. Por ejemplo, la función escalón típicamente asociada al costo de penalidad de una restricción de MOQ puede ser reemplazada por una función sigmoide. Época tras época, la función sustituta se deforma progresivamente para volverse numéricamente más cercana a la función objetivo original.

Desde una perspectiva de supply chain, según nuestra experiencia, las funciones sustitutas funcionan sorprendentemente bien. De hecho, las situaciones en las que no es posible iterar de manera suave hacia buenas soluciones son raras. Los problemas de supply chain no son enigmas criptográficos en los que cambiar un solo bit de una solución descarrila completamente la solución. Por ejemplo, si realizar un pedido de 490 unidades resulta rentable mientras existe un MOQ de 500, es muy probable que el pedido de 500 unidades también sea rentable.

Luego, existen enfoques más sofisticados inspirados en los autoencoders variacionales: las salidas fraccionarias de una capa (como en las “deep learning layers”) se convierten en un valor entero aleatorio obtenido de una distribución arbitraria, por ejemplo, una distribución de Poisson. A través de este mecanismo, el programa, mientras opera únicamente con parámetros fraccionarios, produce salidas enteras que pueden ser inyectadas en la función objetivo. El descenso de gradiente estocástico repite el proceso un gran número de veces, al estilo Monte-Carlo, asegurando que las leyes que rigen la generación de valores enteros aleatorios estén adecuadamente calibradas.

Finalmente, los enfoques más complejos, como AlphaZero, se basan en la introducción de una lista compleja de capas (por ejemplo, una red computacional “deep”) que típicamente termina con una capa similar a Softmax para generar decisiones discretas. Estos enfoques ofrecen resultados de última generación en problemas de optimización altamente no lineales, como lo demuestra la victoria de AlphaGo (posteriormente redefinido como AlphaZero) contra Lee Sedol. DP también puede aprovechar estos métodos, simplemente reduciendo la profundidad y la complejidad de la red para mantener el costo computacional bajo control. Afortunadamente, en la práctica, mientras resolver un problema de MOQ es relativamente difícil, no es tan complicado como vencer a un campeón mundial en Go en lo que respecta a problemas de optimización, y las redes “shallow” (según los estándares del deep learning) ya logran mucho.

Ofrecer formas más directas y prácticas de abordar situaciones discretas, comúnmente encontradas en escenarios de supply chain, fue una de las razones principales que nos llevó en Lokad a desarrollar nuestro propio stack de software DP en lugar de adaptar un framework existente; precisamente para tener mayor margen de maniobra para introducir construcciones especiales diseñadas para adecuarse a esas situaciones.

Algunas de esas construcciones no son más que una biblioteca “standard” de funciones escritas con el propio lenguaje DP, como forma de mitigar tareas repetitivas y evitar clases de errores. Sin embargo, algunas de esas construcciones son más sutiles y están intercaladas con el descenso de gradiente estocástico para ofrecer capacidades especializadas que no podrían haber sido implementadas mediante una diferenciación automática “pura”.

¿Cómo se maneja la incertidumbre con DP? De hecho, DP puede optimizar cualquier función objetivo compleja afinando parámetros mediante un descenso de gradiente estocástico que optimiza una red neuronal, que no es otra cosa que una función especial. ¿Cómo se consideran las distribuciones de probabilidad?

El enfoque dominante que adoptamos para lidiar con la incertidumbre en DP consiste en generar trayectorias —series de tiempo time-series que reflejan flujos de eventos futuros— a partir de distribuciones de probabilidad subyacentes, y luego dejar que la función objetivo opere siguiendo un patrón Monte Carlo. Este enfoque ofrece la posibilidad de modelar interacciones discretas complejas dentro de un sistema —como la consecuencia de cascadas de BOMs (listas de materiales)— incluso si las distribuciones de probabilidad, utilizadas como entradas, estaban disponibles únicamente para la futura demanda de productos terminados.

Este enfoque no es novedoso. Los autoencoders variacionales —aunque diseñados desde una perspectiva bastante diferente— emplean una estrategia similar, tomando la parametrización de una distribución (una Gaussiana para VAE) como entrada y produciendo desviaciones como salidas. Como se mencionó anteriormente cuando ya hablamos de autoencoders variacionales, con frecuencia usamos distribuciones de conteo que producen desviaciones enteras, en lugar de distribuciones continuas como las gaussianas.

Este enfoque generativo —donde las distribuciones se transforman en observaciones (es decir, trayectorias)— también puede ser completamente internalizado dentro del proceso DP. En lugar de tomar distribuciones de probabilidad como entradas y optimizar decisiones a partir de ellas, las propias distribuciones pueden aprenderse mientras se realiza la optimización al mismo tiempo. Por ejemplo, el forecasting demand puede llevarse a cabo conjuntamente con la pricing optimization, ya que la estrategia de precios tiene un fuerte impacto en la demanda, y ambos aspectos no pueden analizarse en aislamiento uno del otro.

La parte generativa de la receta mencionada anteriormente ya se encuentra en las redes generativas antagónicas que han tenido un éxito tremendo generando imágenes fotorrealistas. Al considerar series de tiempo, el LSTM y el GRU (un equivalente más sencillo y moderno del LSTM) ofrecen formas de generar series de tiempo complejas que no podrían haber sido modeladas explícitamente mediante distribuciones de probabilidad.

DP ofrece mayor flexibilidad para aprovechar esas capacidades desde una perspectiva de supply chain mientras se gestionan objetos más heterogéneos (gráficos, series de tiempo, datos relacionales) en comparación con los escenarios generalmente considerados desde una perspectiva de deep learning. Nuevamente, la mayoría de los esfuerzos de ingeniería de Lokad se han concentrado en la perspectiva de supply chain, para asegurarse de que las herramientas estén alineadas con los requisitos específicos que surgen al optimizar stocks, precios, compras, producciones, surtidos, etc., en lugar de enfocarse en imágenes, voces y procesamiento de lenguaje natural.