# Apprendimento per rinforzo

L'apprendimento per rinforzo (o reinforcement learning) è una tecnica di apprendimento automatico che punta a realizzare agenti autonomi in grado di scegliere azioni da compiere per il conseguimento di determinati obiettivi tramite interazione con l'ambiente in cui sono immersi.
L'apprendimento per rinforzo è uno dei tre paradigmi principali dell'apprendimento automatico, insieme all'apprendimento supervisionato e a quello non supervisionato. A differenza degli altri due, questo paradigma si occupa di problemi di decisioni sequenziali, in cui l'azione da compiere dipende dallo stato attuale del sistema e ne determina quello futuro.
La qualità di un'azione è data da un valore numerico di "ricompensa", ispirata al concetto di rinforzo, che ha lo scopo di incoraggiare comportamenti corretti dell'agente. Questo tipo di apprendimento è solitamente modellizzato tramite i processi decisionali di Markov e può essere effettuato con diverse tipologie di algoritmi, classificabili in base all'utilizzo di un modello che descriva l'ambiente, alle modalità di raccolta dell'esperienza (in prima persona o da parte di terzi), al tipo di rappresentazione degli stati del sistema e delle azioni da compiere (discreti o continui).

## Descrizione

Questa tecnica si basa sul presupposto che all'interno di un sistema si possano predisporre:
* un meccanismo logico A in grado di scegliere degli output sulla base degli input ricevuti.
* un meccanismo logico B in grado di valutare l'efficacia degli output rispetto ad un preciso parametro di riferimento.
* un meccanismo logico C capace di cambiare il meccanismo A per massimizzare la valutazione di efficacia effettuata da B.
Il modo in cui questi meccanismi dovrebbero collaborare è descritto dai seguenti punti:
* Se il meccanismo A effettua una scelta efficace allora il meccanismo B manda in output un premio proporzionale all'efficacia della scelta di A.
* Se il meccanismo A effettua una scelta inefficace allora il meccanismo B manda in output una penalità proporzionale all'inefficacia della scelta di A.
* Il meccanismo C, osservando l'agire di A e B, cerca di modificare la funzione matematica che regola il comportamento di A in modo da massimizzare la quantità e la qualità dei "premi".
I meccanismi B e C sono quelli che vanno a costituire il metodo di rinforzo proprio di questa metodica di apprendimento.
Per attuare i meccanismi ed i comportamenti descritti nelle righe precedenti, dal punto di vista logico, si necessita delle seguenti componenti:
* Insieme di Input: rappresenta i possibili input che il sistema può ricevere (servono per determinare lo stato del sistema).
* Funzione valore di stato: questa funzione associa un parametro di valutazione ad ogni stato del sistema.
* Funzione valore di azione: questa funzione associa un parametro di valutazione ad ogni possibile coppia stato-azione.
* Tecnica di rinforzo: consiste in una funzione di rinforzo che, a seconda delle prestazioni attuali e dell'esperienza passata, fornisce delle direttive con cui cambiare la funzione di valore di stato e la funzione di valore d'azione.
* Insieme di Output: rappresenta le possibili decisioni che il sistema può intraprendere.

### Input

Gli input al sistema possono provenire dai più svariati sensori. Ad esempio, nel caso di un robot che deve imparare a muoversi all'interno di un percorso, gli input potrebbero essere forniti da dei sensori di prossimità che dovrebbero essere poi rimappati in opportuni stati che nel caso dell'esempio potrebbero essere "ostacolo di fronte", "strada libera", "muro sul lato" ecc. Per mappare i valori dei sensori a particolari stati si sono rivelate particolarmente efficaci le tecniche basate su controllori fuzzy.

### Funzione di valore di stato

La funzione valore di stato è quella che ad ogni stato identificato dal sistema e determinato sulla base degli input, associa un valore relativo al grado di bontà della situazione. Viene generalmente espressa nella seguente forma:
$V:S\longrightarrow {\mathfrak {R}}$

### Funzione di valore di azione

La funzione di valore di azione è quella che ad ogni coppia composta da stato e azione associa un valore relativo al grado di bontà della combinazione. Viene generalmente espressa nella forma:
$Q:S\times A\longrightarrow {\mathfrak {R}}$

### Tecnica di rinforzo

A seconda di come si progetta e si decide di implementare il sistema di apprendimento, possono essere utilizzate diverse funzioni di rinforzo per cambiare la funzione di valore di stato e diverse politiche per determinare premi e penalità.
Dal punto di vista modellistico tutte le funzioni di rinforzo possono essere ricondotte alla seguente formula base:
$v_{t+1}=(1-\alpha )v_{t}(s)+\alpha \Delta _{t+1}$
dove $0\;<\alpha \leq 1$
e $\Delta _{t+1}$ è il "premio" o la "penalità" che è stata associata alla corrente azione da parte della funzione di azione.
Questa funzione, come si può intuire dalla formula, altera la funzione di valore di stato a partire dal prossimo istante in cui verrà richiamata e in base alla valutazione dell'azione corrente effettuata dalla politica di premio (o di penalità).
Le più diffuse politiche di premio (o di penalità) sono:
* Rinforzo con premio ad orizzonte infinito: il rinforzo ha sempre la stessa intensità ed è valutato per tutti gli istanti temporali. $E\left[\sum _{k=0}^{\infty }r_{t+k+1}\right]$
* Rinforzo con premio ad orizzonte finito: il rinforzo ha sempre la stessa intensità ed è valutato per un periodo di tempo limitato. $E\left[\sum _{k=0}^{T}r_{t+k+1}\right]$
* Rinforzo con premio medio: il rinforzo ha intensità via via decrescente ma viene valutato per tutti gli istanti temporali. In pratica man mano che il tempo passa, i valori di rinforzo vengono attenuati dando più importanza alle valutazioni effettuate negli istanti iniziali. $E\left[\lim _{n\to \infty }\sum _{k=0}^{n}r_{t+k+1}\right]$
* Rinforzo con premio scontato: il rinforzo è distribuito per tutti gli istanti temporali ma aumenta a seconda di un parametro legato agli istanti temporali in cui viene applicato. $E\left[\sum _{k=0}^{\infty }{\gamma ^{k}\cdot r_{t+k+1}}\right]$

### Output

L'output consiste in una delle azioni che il sistema può intraprendere. La scelta è effettuata in modo da massimizzare il valore della funzione di valore di azione ed è strettamente dipendente dal rinforzo distribuito durante gli istanti passati.

## Algoritmi di apprendimento per rinforzo

* Q-learning: è uno degli algoritmi di apprendimento con rinforzo più diffusi ed utilizzati. Fa utilizzo di un rinforzo con premio scontato e costituisce una variante della funzione di rinforzo di "base" presentata nei paragrafi precedenti.