• Non ci sono risultati.

Il successo del Reservoir Computing ha portato allo sviluppo di alcune librerie finaliz- zate al suo utilizzo per i vari task. La libreria pi`u conosciuta in questo senso `e OrGanic Environment for Reservoir computing (Oger) [54], la cui ultima versione risale al 2012. Scritto in Python sulla base del toolbox Modular toolkit for Data Processing (MDP) [55], Oger consente di costruire, addestrare e valutare delle architetture modulari di ap- prendimento; in particolare una ESN pu`o essere creata tramite dei nodi MDP; inoltre Oger implementa l’algoritmo di apprendimento offline di base addestrando dunque la matrice di output tramite ridge regression; infine include alcune funzionalit`a accelerate grazie alla GPU.

Un’altra libreria importante per il Reservoir Computing `e Reservoir Computing Tool- box (RCT) [56], sviluppata in Matlab; in modo simile a Oger, RCT consente di sfruttare il Reservoir Computing per una variet`a di task offrendo varie modalit`a di utilizzo: in- fatti si pu`o creare una ESN, impostare gli iper-parametri e addestrarla con uno dei vari metodi di base offerti dalla libreria, oppure creare in Matlab dei metodi di addestra- mento o una matrice dei pesi di reservoir desiderata con l’obiettivo di personalizzare la ESN. Ci`o che non include questa libreria `e l’accelerazione GPU.

Altre librerie per il Reservoir Computing sono aureservoir [57] sviluppato in C++ e ESNJava che sostanzialmente forniscono delle semplici ESN consentendo un loro uti- lizzo di base.

Naturalmente esistono molte pi`u librerie e framework pi`u generici che oltre a implemen- tare modelli ricorrenti come le RNN3 (come ad esempio Encog [58]), focalizzano la loro

attenzione sul Deep Learning. Questi framework sono in continua crescita. Un esempio molto importante e noto `e Microsoft Cognitive Toolkit (noto soprattutto come Com- putational Network ToolKit (CNTK)) [59], basato sulla Computational Network (CN); questo framework consente di addestrare e valutare le Deep Neural Network (DNN), oltre a vari tipi di RNN (quali le LSTM), consentendo l’uso di pi`u GPU contempora- neamente.

Altri esempi noti sono Torch7 [60], Keras [61], Caffe [62], Lasagne [63] e Blocks [64]. Questi framework si appoggiano a loro volta su dei compilatori e ottimizzatori di espres- sioni matematiche (ad esempio Theano [65]) o su strutture di computazione come i dataflow graph (ad esempio TensorFlow [66]); una delle loro caratteristiche `e quella di sfruttare a pieno il potenziale dei moderni calcolatori (in particolare la GPU) per aumentare il pi`u possibile la velocit`a delle loro esecuzioni, soprattutto in caso di grandi

3Un framework che consente di creare una RNN, consente indirettamente, ma non esplicitamente,

quantit`a di dati. Framework RNN RC Speedup Oger X X RCT X ESNJava X aureservoir X Encog X X CNTK X X TensorFlow X X Torch7 X X Keras X X Lasagne X

Blocks and Fuel X

Caffe X X

Tabella 2.1: Possibilit`a offerte dai framework citati di gestire una RNN e/o un modello RC, e di utilizzare la GPU per aumentare la velocit`a di calcolo

La Tabella 2.1 riassume le caratteristiche dei framework citati. Dato l’interesse della tesi verso i modelli ricorrenti in generale e le ESN in particolare, ciascuna riga specifica la possibilit`a del rispettivo framework di gestire le RNN e le ESN.

Siccome si `e interessati anche alla possibilit`a di ottimizzare le prestazioni tramite GPU e architetture multi/many-core a memoria condivisa, la Tabella 2.1 indica anche tale possibilit`a per ogni framework, con una colonna indicata per semplicit`a con Speedup. In questa Tabella sono state distinte due attivit`a, rispettivamente abbreviate con RNN e RC; ci`o che si vuole enfatizzare infatti `e la possibilit`a da parte di ciascun framework di gestire:

• in generale una RNN e • in particolare una ESN.

Infatti anche un framework che consenta di sperimentare un approccio standard RNN pu`o essere considerato importante in questo senso, perch´e consente di creare seppur indirettamente una sua specializzazione come la ESN.

Tuttavia, data la particolare natura del Reservoir Computing la cui definizione ed evoluzione negli anni hanno consentito a quest’ultimo di distinguersi in modo netto dall’approccio RNN standard, `e chiaro che gestire una ESN in modo diretto e non parziale `e la via percorribile per chiunque volesse testare il Reservoir Computing per il proprio task.

I framework sul Deep Learning citati, che non costituiscono la totalit`a dei framework esistenti4, offrono la possibilit`a di creare una RNN ma, non essendo dedicate (e non fa-

cendo esplicito riferimento) al Reservoir Computing non consentono di applicare tutte le linee guida di base per la creazione della ESN, n`e tanto meno consentono di estendere la metodologia di base con tecniche extra, presenti nell’attuale stato dell’arte, alcune delle quali proposte nelle varie sezioni di questo Capitolo. Con la colonna RC della Tabella 2.1 si vogliono enfatizzare proprio questi due aspetti.

Oger e RCT si completano per quanto riguarda rispettivamente la possibilit`a di usare la GPU e di estendere la metodologia di base. Ma ciascuno dei due non copre un ra- gionevole range di tecniche nello stato dell’arte riguardanti la costruzione del modello e il suo apprendimento.

In definitiva, innanzitutto `e preferibile avere un framework completamente dedicato al Reservoir Computing invece che un framework che ne catturi solo in modo parziale e/o indiretto le proprie potenzialit`a. In questo modo si avrebbe anche la possibilit`a di estendere l’idea di base con tecniche specifiche, raggruppando tutti i metodi sul Reservoir Computing in un unico strumento e garantendo infine per quest’ultimo una pre-disposizione ad essere evoluto, data l’evoluzione continua e veloce dello stato del- l’arte.

Infine, seguendo la tendenza degli attuali framework sul Deep Learning, `e desiderabile che queste tecniche possano essere eseguite anche sulla GPU.