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