Introduzione

 

 

Nell'ambito della teoria del controllo ottimo, sono assai rari i casi in cui sia possibile trovare per via analitica le funzioni di controllo che risolvono le equazioni relative al problema in esame. Si rende perciò necessario sviluppare tecniche di soluzione approssimate che siano allo stesso tempo efficaci e computazionalmente vantaggiose.
Recenti studi hanno mostrato come le reti approssimanti, funzioni a struttura fissata e parametri da determinare, rappresentino un valido strumento per l'approssimazione di funzioni multivariabile, quali che possono essere ad esempio funzioni di costo o di controllo ottimo.
La complessità di uno schema di approssimazione, misurabile in termini computazionali e di ingombro di memoria, è quantificabile considerando la dimensione del vettore dei parametri. Il rate di approssimazione mette in relazione l'accuratezza dell'approssimazione ricavabile di uno schema approssimante proprio con la sua complessità.
Utilizzando questi strumenti di confronto, si arriva a constatare che gli approssimatori non lineari, dove le funzioni base sono parametrizzate, mostrano un notevole vantaggio computazionale rispetto a quelli lineari tradizionali, solitamente con funzioni base polinomiali o trigonometriche, che richiedono per una buona approssimazione un numero elevato di funzioni base. La bontà di uno schema approssimante dipende anche dal tipo di funzione per il quale questo è stato realizzato, sebbene per certe classi di funzioni multivariabili il rate degli approssimatori non lineari è da considerarsi migliore di quello che si otterrebbe da un qualunque schema lineare.
Si è poi dimostrato sempre in recenti studi che le multilayer feedforward networks, appartenenti alla classe degli approssimatori non lineari e nella cui struttura compaiono più trati (solitamente due) di neuroni, sono in grado di risolvere qualunque problema di "mappatura" fra spazi a dimensione finita e ciò, fermo restando una certa complessità di realizzazione anche dovuta alle scelte implementative, ha contribuito alla loro popolarità.
Il nostro obiettivo principale, viste le grandi potenzialità delle reti approssimanti in problemi di controllo ottimo, è dunque quello di sviluppare un ambiente software per la gestione di quest'ultima classe di reti appena introdotta, ovvero le multilayer feedforward networks, che sappia successivamente definire e risolvere tali problemi. Oltre a fornire tutte quelle procedure necessarie all'intero ciclo di vita di una rete neurale (costruzione, inizializzazione e addestramento), questo ambiente dovrebbe essere in grado di sposare l'efficienza di calcolo con la facilità di utilizzo da parte dell'utente.
Per tale scopo abbiamo fatto ricorso a due "filosofie" di programmazione opposte: Matlab e C. Matlab è stato scelto per la facilità e l'immediatezza con la quale si possono esprimere problemi complessi, C invece per la sua potenza/efficienza di calcolo. Inoltre si è deciso di partire "da zero" in quanto il software preesistente non permetteva quella flessibilità nell'utilizzo dell'algoritmo della "back propagation" necessaria alle nostre applicazioni (come ad esempio il problema del controllo ottimo a N stadi), dove resta essenziale la presenza del gradiente stocastico.
Sempre a proposito della realizzazione dell'ambiente per la gestione delle reti neurali e della successiva implementazione del metodo del sistema aggiunto esteso, oltre alla necessaria rispondenza ai requisiti funzionali, nel lungo processo di sviluppo abbiamo cercato di porre particolare attenzione ad alcune qualità direttamente apprezzabili dall'utente che un buon prodotto software dovrebbe possedere e che qui brevemente riassumiamo:
- correttezza (grado di conformità del programma alle specifiche)
- robustezza (capacità del software di reagire in modo appropriato a situazioni non previste, o a stimoli anomali)
- estendibilità (facilità di adattabilità a cambiamenti di specifiche)
- efficienza (capacità di un programma di svolgere in tempi ragionevoli i compiti per cui è stato realizzato, usando il minor numero di risorse)
- portabilità (facilità con cui si trasporta un software in un altro ambiente, come ad esempio da MS-DOS a UNIX)
- facilità d'uso (si raggiunge quando più persone, anche con conoscenze molto diverse, possono imparare facilmente come utilizzare un determinato software grazie alla sua semplicità).
Nel nostro caso non è stato possibile massimizzare allo stesso tempo tutte queste qualità e si è dovuto così scendere a qualche compromesso: ad esempio, per migliorare la portabilità, abbiamo rinunciato ad ottimizzare alcune specifiche che avrebbero potuto influire positivamente sull'efficienza.
Alla luce di quanto detto, nel primo capitolo daremo una definizione delle reti approssimanti, funzioni a struttura fissata e parametri da determinare, delle quali nel seguito ci serviremo per approssimare funzioni di costo e di controllo ottimo, soffermandoci poi su una loro caratteristica in particolare, il rate dell'approssimazione (relazione fra l'accuratezza dell'approssimazione ricavabile da un dato schema approssimante e la complessità di quest'ultimo).
Vedremo che approssimatori non lineari di questo tipo, quali le reti neurali Multilayer Feedforward e le Radial Basis Function, mostrano un notevole vantaggio in termini computazionali e di ingombro di memoria rispetto a quelli lineari tradizionali. Questo ci indurrà a considerarne l'utilizzo nella soluzione di problemi di controllo ottimo, limitandoci però da subito alle sole multilayer feedforward neural networks, per via della loro popolarità e del buon numero di risultati teorici disponibili.
Nel secondo capitolo, partendo dalla consapevolezza che il processo di addestramento di una rete approssimante può essere espresso attraverso un problema di programmazione non lineare (dove si vuole minimizzare una data funzione di costo rispetto ad un vettore di parametri liberi), analizzeremo le principali tecniche risolutive di tali problemi, classificandole poi a seconda del tipo di informazioni a disposizione sulla funzione da minimizzare.
Dal confronto quindi sulla loro complessità in termini computazionali e di "ingombro" di memoria, due aspetti questi determinanti per un problema di minimizzazione essendo spesso in gioco numerose variabili, emergeranno le motivazioni della scelta del metodo del gradiente stocastico quale algoritmo di addestramento per le reti approssimanti implementato.
Ciò porterà, nel caso più specifico delle reti neurali, alla nota backpropagation, tecnica che consente di realizzare l'importante concetto del calcolo distribuito: l'aggiornamento del singolo peso viene eseguito solo sulla base di informazioni locali attraverso alcune "derivazioni" a catena, con una notevole riduzione della complessità computazionale.
Nel terzo capitolo, una volta introdotti i motivi che ci hanno spinto da una parte verso la realizzazione "ex novo" di un ambiente software per la gestione delle reti neurali e dall'altra verso la scelta di Matlab e del C quali "filosofie" d programmazione, partendo dall'analisi dei requisiti minimi che una struttura dati rete neurale deve soddisfare, saranno presentate le scelte implementative fatte nei due linguaggi di programmazione.
Saranno quindi descritte in dettaglio le funzioni "codificate" per la costruzione, l'inizializzazione e l'addestramento delle reti neurali, specificandone i paradigmi principali, oltre alla eventuale presenza di "software di contorno" indispensabile al nostro modello e delle librerie con esso realizzate, a disposizione dell'utente finale.
Nel quarto capitolo, infine, verrà proposta un'architettura di controllo basata su reti neurali feedforward, ovvero il metodo del sistema aggiunto esteso, in grado di definire e risolvere il problema del controllo ottimo a N stadi, cioè quello della guida di un sistema dinamico verso uno stato finale desiderato, a partire da un qualsiasi stato iniziale appartenente al dominio del problema. Il dispositivo di controllo così realizzato consentirà anche la formulazione dei problemi in un contesto non deterministico, caratterizzato dalla presenza di variabili aleatorie che agiscono da disturbo sul sistema.
Successivamente, sulla base delle strutture dati e delle funzioni già implementate per le reti neurali, presenteremo due modelli paralleli, rispettivamente in Matlab e in C, capaci di realizzare tale architettura. Su questi verrà quindi effettuato un confronto in merito ai tempi di sviluppo del modello (strutture dati e funzioni), alla facilità d'uso e di scrittura/debugging, all'efficienza computazionale, fattore quest'ultimo determinante per i nostri scopi, in quanto consentirà di valutare sia l'utilizzo efficiente delle risorse del sistema sia i tempi effettivi di addestramento.

 


Ringraziamenti, Introduzione, Capitolo 1, Capitolo 2, Capitolo 3, Capitolo 4, Bibliografia