Markus Leopoldseder (Direttore della Conoscenza - Global Manufacturing e Supply Chain Practice presso McKinsey) ha sollevato due domande rilevanti riguardo all’applicabilità della Programmazione Differenziabile (DP) per scopi di supply chain. In questo post abbastanza tecnico, cercheremo di fornire alcuni spunti su come vengono gestiti rispettivamente i vincoli degli interi e l’incertezza nella DP. Questo è solo un primo sguardo all’approccio di Lokad. Abbiamo in programma di pubblicare in seguito ricette estese su docs.lokad.com.

Come si applica la DP alle variabili intere? Infatti, se la funzione obiettivo prende in input numeri interi, potrebbe non essere differenziabile.

Da una prospettiva di supply chain, la maggior parte delle decisioni sono discrete: non possiamo ordinare 4,2 unità di un prodotto, è o 4 o 5. Pertanto, stiamo cercando - sia da un punto di vista di apprendimento che di ottimizzazione - metodi che funzionino bene con gli interi. Come ha acutamente sottolineato il nostro lettore, i parametri nella DP sono numeri e quei parametri non possono essere vincolati agli interi, perché questa prospettiva non è compatibile con la discesa del gradiente stocastico che è alla base della DP.

Ci sono diversi modi per ottenere decisioni discrete e le relative funzioni obiettivo discrete attraverso la DP, che vanno da naive ma semplici, a complicati ma senza pari per quanto riguarda l’ottimizzazione numerica.

Integers e incertezza nella programmazione differenziabile

L’approccio più semplice consiste nell’interpolare la funzione obiettivo durante il training e arrotondare i risultati durante la valutazione. Ad esempio, se cerchiamo una quantità di ordine di acquisto - prevista come un numero intero - la funzione obiettivo può essere estesa a numeri arbitrari attraverso l’interpolazione. Questo funziona bene quando si considerano sistemi che, sebbene siano discreti, mostrano comportamenti abbastanza lineari. Tuttavia, quando si affronta una forte non linearità come un vincolo di MOQ (quantità minima d’ordine), questo approccio non funziona così bene.

Per affrontare tali situazioni, la funzione obiettivo può essere sostituita da una funzione surrogata, una funzione che approssima la funzione obiettivo originale, ma in modo liscio e differenziabile. Ad esempio, la funzione a gradino tipicamente associata al costo di penalità di un vincolo MOQ può essere sostituita da una funzione sigmoide. Epoca dopo epoca, la funzione surrogata viene progressivamente deformata per avvicinarsi numericamente alla funzione obiettivo originale.

Da una prospettiva di supply chain, nella nostra esperienza, le funzioni surrogata funzionano sorprendentemente bene. Infatti, le situazioni in cui non è possibile iterare in modo fluido verso buone soluzioni sono rare. I problemi di supply chain non sono enigmi crittografici in cui cambiare un singolo bit da una soluzione fa deragliare completamente la soluzione. Ad esempio, se effettuare un ordine di acquisto di 490 unità è redditizio mentre c’è un MOQ a 500, è molto probabile che l’ordine di acquisto di 500 unità sia redditizio anche.

Poi, ci sono approcci più sofisticati ispirati agli autoencoder variazionali: le uscite frazionarie di uno strato (come nei “livelli di deep learning”) vengono convertite in un deviato intero casuale ottenuto da una distribuzione arbitraria, ad esempio una distribuzione di Poisson. Attraverso questo meccanismo, il programma, pur operando solo con parametri frazionari, produce output interi che possono poi essere iniettati nelle funzioni obiettivo. La discesa del gradiente stocastico ripete il processo un gran numero di volte, ala Monte-Carlo, garantendo che le “leggi” che governano la generazione di deviati interi casuali siano adeguatamente tarate.

Infine, gli approcci più complessi, come AlphaZero, si basano sull’introduzione di una lista complessa di strati (ad esempio, una rete computazionale “profonda”) che termina tipicamente con uno strato simile a Softmax al fine di generare decisioni discrete. Questi approcci offrono risultati all’avanguardia su problemi di ottimizzazione altamente non lineari, come dimostrato dalla vittoria di AlphaGo (successivamente ridefinito come AlphaZero) contro Lee Sedol. DP può anche trarre vantaggio da questi metodi - semplicemente riducendo la profondità e la complessità della rete per mantenere sotto controllo il carico computazionale. Fortunatamente, nella pratica, sebbene risolvere un problema MOQ sia relativamente difficile, non è affatto difficile come battere un campione del mondo a Go per quanto riguarda i problemi di ottimizzazione, e le reti “superficiali” (secondo gli standard del deep learning) già ottengono molto.

Offrire modi più diretti e pratici per affrontare situazioni discrete, come comunemente si trovano nelle situazioni di supply chain, è stato uno dei motivi principali che ci ha spinto in Lokad a progettare la nostra propria stack software DP anziché piegare un framework esistente; proprio per avere maggiore libertà di introdurre costrutti speciali progettati per adattarsi a quelle situazioni.

Alcuni di questi costrutti non sono altro che una libreria “standard” di funzioni scritte attraverso il linguaggio DP stesso - come modo per mitigare compiti ripetitivi ed evitare classi di errori. Alcuni di questi costrutti, tuttavia, sono più sottili e intrecciati con la discesa del gradiente stocastico al fine di offrire capacità specializzate che non avrebbero potuto essere implementate attraverso una differenziazione automatica “pura”.

Come affronti l’incertezza con DP? Infatti, DP può ottimizzare qualsiasi funzione obiettivo complessa regolando i parametri utilizzando una discesa del gradiente stocastica che ottimizza una rete neurale che non è altro che una funzione speciale. Come vengono considerate le distribuzioni di probabilità?

L’approccio dominante che adottiamo per affrontare l’incertezza in DP consiste nella generazione di “traiettorie” - serie temporali generate che riflettono flussi di eventi futuri - da distribuzioni di probabilità sottostanti, e quindi lasciare che la funzione obiettivo operi seguendo un modello Monte Carlo. Questo approccio offre la possibilità di modellare interazioni discrete complesse all’interno di un sistema - come la conseguenza di distinte base (BOM) in cascata, anche se le distribuzioni di probabilità - utilizzate come input - erano disponibili solo per la domanda futura di prodotti “finiti”.

Questo approccio non è nuovo. Gli autoencoder variazionali - sebbene progettati da una prospettiva piuttosto diversa - utilizzano una strategia simile, prendendo la parametrizzazione di una distribuzione (una Gaussiana per VAE) come input e producendo deviati come output. Come discusso in precedenza quando abbiamo già menzionato gli autoencoder variazionali, utilizziamo frequentemente distribuzioni di “conteggio” che producono deviati interi, anziché distribuzioni continue come le Gaussiane.

Questo approccio generativo - in cui le distribuzioni vengono trasformate in osservazioni (ossia traiettorie) - può anche essere completamente internalizzato all’interno del processo DP. Invece di prendere distribuzioni di probabilità come input e ottimizzare decisioni da esse, le distribuzioni stesse possono essere apprese mentre l’ottimizzazione viene eseguita contemporaneamente. Ad esempio, la “previsione della domanda” può essere eseguita insieme all’ottimizzazione dei prezzi, poiché la strategia di pricing ha un forte impatto sulla domanda, i due aspetti non possono essere analizzati in modo isolato l’uno dall’altro.

La parte generativa della ricetta menzionata in precedenza si trova già nelle reti generative avversariali che hanno avuto un enorme successo nella generazione di immagini fotorealistiche. Considerando le serie temporali, LSTM e GRU (un equivalente più semplice e moderno delle LSTM) offrono modi per generare serie temporali complesse che non avrebbero potuto essere esplicitamente modellate attraverso distribuzioni di probabilità.

DP offre maggiore flessibilità per sfruttare tali capacità da una prospettiva di “supply chain” mentre si gestiscono oggetti più eterogenei (grafici, serie temporali, dati relazionali) rispetto agli scenari di solito considerati da una prospettiva di deep learning. Ancora una volta, la maggior parte degli sforzi di ingegneria di Lokad si è concentrata sulla prospettiva di “supply chain”, al fine di garantire che gli strumenti fossero allineati con i requisiti specifici che sorgono durante l’ottimizzazione di scorte, prezzi, acquisti, produzioni, assortimenti, ecc. invece di concentrarsi su immagini, voci e elaborazione del linguaggio naturale.