Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Costruzione del modello lineare

Proseguiamo nell'implementazione della nostra classe Java per la Regressione costruendo un modello lineare e specificando l'algoritmo di addestramento
Proseguiamo nell'implementazione della nostra classe Java per la Regressione costruendo un modello lineare e specificando l'algoritmo di addestramento
Link copiato negli appunti

All'interno della classe Regression implementata nella lezione precedente, inseriamo il metodo per la realizzazione del nostro modello lineare:

public MultiLayerNetwork getModel(double learningRate){
        MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
                .seed(SEED)
                .weightInit(WeightInit.XAVIER)
                .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)
                .updater(new Nesterovs(learningRate, 0.9))
                .l2(0.0001)
                .list()
                .layer(0,new OutputLayer.Builder(LossFunctions.LossFunction.MSE)
                        .activation(Activation.IDENTITY)
                        .nIn(ATTRIBUTES).nOut(1).build())
                .build();
        return new MultiLayerNetwork(conf);
    }

Si tratta di una rete con un solo nodo lineare più una funzione d'identità. Questa combinazione realizza esattamente il nostro modello. In sequenza dobbiamo specificare la modalità di inizializzazione dei pesi. Se non si hanno informazioni particolari sui dati, possiamo utilizzare una distribuzione gaussiana (XAVIER).

L'algoritmo di addestramento

Specifichiamo successivamente l'algoritmo di addestramento attraverso il valore STOCHASTIC_GRADIENT_DESCENT. In poche parole utilizziamo la discesa stocastica del gradiente per minimizzare la funzione d'errore definita successivamente.

Lo step di discesa lungo il gradiente delle funzione d'errore è definito da un parametro denominato learning rate, sempre minore di 1. Più è alto questo parametro più è rapida la discesa. Valori tipici sono 0.01, 0.001, 0.0001 ma è possibile anche variare il suo valore durante la fase di training utilizzando particolari funzioni.

Durante il tentativo di minimizzazione della funzione d'errore, può accadere di rimanere bloccati in un minimo locale. Il nostro obiettivo è individuare il minimo assoluto. Per evitare di rimanere bloccati in un minimo locale si utilizza una tecnica denominata momentum.

Momentum e layer di output

Il momentum è un particolare valore aggiunto alla formula di aggiornamento dei pesi dell'algoritmo di discesa lungo il gradiente. Nel nostro caso scegliamo il valore 0.9 che andiamo ad utilizzare con il learning rate nella definizione dell'ottimizzatore nesterov.

Successivamente, per evitare overfitting, aggiungiamo un regolarizzazione L2 con un valore tipico. La regolarizzazione L2 impedisce che i valori dei pesi diventino troppo grandi.

Aggiungiamo infine un singolo layer di output che riceverà in input gli attributi del nostro dataset è produrrà in output la previsione da confrontare con il relativo dato atteso.

Per un layer di output, dobbiamo specificare la funzione d'errore da minimizzare. Scegliamo di utilizzare la funzione MSE (Mean Squared Error), definita come la somma del quadrato delle differenze tra valori attesi e valori in output del modello, divisa per il numero di dati utilizzati nel batch corrente.

In altre parole sottoponiamo progressivamente al modello un pacchetto di dati (batch) estratto dal totale dei dati di traininig e ricaviamo i relativi output. Successivamente calcoliamo la funzione d'errore confrontando i dati di ouptut con quelli attesi, attraverso la funzione MSE. Il termine di errore sarà utilizzato dall'algoritmo per aggiustare i pesi del modello.

Ti consigliamo anche