Una nuova era (neurale) per i database?


Per chi osserva la rapida crescita dell'intelligenza artificiale, ed in particolar modo del deep learning, la domanda da un milione di euro (letteralmente) è una sola: quali saranno le prossime applicazioni?

Prima del 2012, applicare una rete convolutiva al riconoscimento di immagini era visto (quantomeno) con un certo sospetto. Oggi, è difficile concepire un solo aspetto della computer vision che non tragga beneficio da queste tecniche, così come è difficile immaginare un'azienda nel campo che non investa in maniera massiccia nel deep learning, o una conferenza che tralasci questi aspetti. Non capire l'effetto che questo tecniche potranno avere in futuro in altri campi vuol dire lasciarsi potenzialmente fuori da un mercato in incredibile crescita, valutato nell'ordine dei trilioni di dollari nei prossimi anni.

Già oggi alcuni campi, primo fra tutti la medicina, sembrano enormemente promettenti, vuoi per la grande disponibilità di dati a disposizione dei ricercatori, vuoi per la mole di problemi - potenzialmente rivoluzionari - dove il deep learning potrebbe essere di enorme aiuto. In questo senso, un preprint caricato pochi giorni fa su arXiv potrebbe aprire ulteriori strade inaspettate, ed avvicinare il deep learning a quella che oggi è una vera e propria roccaforte della computer science: i database.

A prima vista, non sembra esserci nulla di più distante dall'eleganza teorica degli algoritmi di information retrieval studiati in tutte le università, se confrontati con le reti neurali usate oggi, un misto di ingegneria ed arte, dove la teoria spesso insegue a rilento gli avanzamenti pratici. Eppure, tra gli autori dell'articolo troviamo Tim Kraska (oggi Associate Professor al MIT), e Jeffrey Dean, il leggendario computer scientist di Google, che si spingono fino a dire che

we believe that the idea of replacing core components of a data management system through learned models has far reaching implications for future systems designs and that this work just provides a glimpse of what might be possible. [crediamo che l'idea di rimpiazzare componenti chiave di un sistema di data management con modelli appresi dai dati ha implicazioni enormi per il design dei sistemi futuri, e che questo lavoro rappresenti solo uno sguardo in quello che potrebbe essere possibile nel futuro.]

Ma in sostanza, di cosa stiamo parlando?

Gli indici come modelli

Come esempio pratico, consideriamo un B-tree index, una struttura ad albero comunemente usata per cercare un intervallo di dati in un insieme ordinato di elementi. L'idea di partenza è che possiamo vedere questo indice come un modello di regressione, che a partire dalla chiave dell'elemento, 'predice' la posizione in cui si trova l'elemento stesso (diagramma sulla sinistra):

Per ragioni di efficienza, infatti, è comune indicizzare solo elementi ad intervalli regolari piuttosto che tutti gli elementi del database. La 'predizione' del B-tree avrà quindi un errore medio che dipende dalla grandezza di questo campionamento: se indicizziamo un elemento ogni 5, potremmo dover navigare fino a quattro elementi nel database per trovare quello che cercavamo a partire dall'elemento indicato dal B-tree. Ma se il B-tree è un modello di regressione, si apre la prospettiva immediata di sostituirlo con altri modelli di regressione, come le reti neurali o dei semplici modelli lineari (a destra nella figura sopra).

Il vantaggio di questa scelta è che le reti neurali, come tutti i modelli di machine learning, possono adattarsi alla reale distribuzione dei dati, mentre modelli statici come il B-tree sono ottimizzati per adattarsi a qualsiasi distribuzione possibile. L'articolo pone l'esempio di un sistema che usa come chiavi numeri interi sequenziali: in quel caso è possibile usare la chiave direttamente come offset, sostituendo l'intero B-tree con un sistema molto più efficiente. È concepibile che anche in altri casi la distribuzione dei dati possa essere usata per ottenere un miglioramento rispetto ad un indice come il B-tree, come avviene già oggi in alcuni sistemi estremamente ottimizzati. Ed è proprio su questo punto che le reti neurali potrebbero portare benefici, out-of-the-box, in tutti i sistemi.

Come è possibile?

Supponiamo quindi di prendere il nostro B-tree e sostituirlo con una rete neurale, allenata a predire l'offset a partire dalla chiave. Al di là degli aspetti puramente computazionali (su cui torniamo tra pochissimo), sembra esserci un difetto evidente: le reti neurali non danno nessuna garanzia! Nulla garantisce che una specifica predizione di una rete neurale, a prescindere dalla sua accuratezza media, non sia completamente errata: ed una cosa del genere è inaccettabile nella progettazione di un database, che si fonda tra le altre cose sull'analisi essenziale di un worst-case scenario. Eppure, a rifletterci meglio potrebbe trattarsi di un non-problema: assumendo una situazione statica, i dati che vogliamo predire sono esattamente quelli su cui abbiamo allenato la rete neurale, da cui si deduce che l'errore massimo che potremo compiere sarà l'errore massimo compiuto in fase di training. Dal punto di vista teorico, quindi, l'idea rimane in piedi.

Gli aspetti computazionali sono invece più interessanti: è ovvio a tutti che l'architettura di una rete neuale può diventare rapidamente troppo pesante per una situazione in cui il throughput e l'efficienza sono essenziali. L'idea in questo caso è di utilizzare modelli gerarchici, in cui l'offset del dato viene calcolato ricorsivamente dividendo lo spazio dei valori, idea che gli autori dell'articolo chiamano recursive model index:

Ciascuno dei modelli nello schema sopra può essere una piccola rete neurale, oppure qualcosa di enormemente più semplice (come un regressore lineare), se non addirittura un B-tree stesso! In quest'ultimo caso, la performance di questo indice non potrà mai essere significativamente peggiore di un singolo B-tree, anche nel caso di distribuzioni senza nessuna regolarità.

Ma... funziona?

L'aspetto paradossale è che un indice appreso in questo modo non solo può essere enormemente più preciso, ma addirittura risparmiare memoria ed essere più veloce. Questo perché le reti neurali possono avvantaggiarsi dell'enorme miglioramento nel potere di calcolo delle GPU (e delle TPU), mentre i database tradizionali rimangono legati all'ormai morente legge di Moore. Una figura in questo caso vale più di mille parole:

Lo stesso discorso (e risultati simili) si applicano anche ad altre forme di indicizzazione, e si possono estendere a situazioni non solamente read-only, in cui i dati vengano modificati di rado o di frequente. Invitiamo per questo a leggere l'articolo originale, che si dilunga molto sulle giustificazioni e sui possibili casi d'uso.

I database sono morti, lunga vita ai database

Potete quindi buttare tutte le vostre copie di algoritmi e strutture dati per lasciare più spazio ai libri di deep learning? Ovviamente non crediamo sia così. Come sottolineano gli autori dell'articolo, non si tratta di una tecnica nata per sostituire algoritmi ottimizzati da decenni, ma di un modo nuovo di vedere problemi vecchi, che può aprire strade finora chiuse e rinvigorire un campo che si situa al centro dell'informatica stesso. Ed, aggiungiamo noi, che quando Jeffrey Dean parla, è da ingenui non prestare ascolto.

Articolo di riferimento:

Kraska, T., Beutel, A., Chi, E.H., Dean, J. and Polyzotis, N., 2017. The Case for Learned Index Structures. arXiv preprint arXiv:1712.01208.


Se questo articolo ti è piaciuto e vuoi tenerti aggiornato sulle nostre attività, ricordati che l'iscrizione all'Italian Association for Machine Learning è gratuita! Puoi seguirci anche su Facebook e su LinkedIn.

Previous Post Next Post