Anteprima
Vedrai una selezione di 4 pagine su 15
Relazione del Progetto di architetture e progettazione di sistemi di elaborazione Pag. 1 Relazione del Progetto di architetture e progettazione di sistemi di elaborazione Pag. 2
Anteprima di 4 pagg. su 15.
Scarica il documento per vederlo tutto.
Relazione del Progetto di architetture e progettazione di sistemi di elaborazione Pag. 6
Anteprima di 4 pagg. su 15.
Scarica il documento per vederlo tutto.
Relazione del Progetto di architetture e progettazione di sistemi di elaborazione Pag. 11
1 su 15
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Corso di Laurea Magistrale in Ingegneria Informatica

Relazione del Progetto di Architetture e Progettazione di Sistemi di Elaborazione:

“Polynomial Regression and Stochastic Gradient Descent”

Professori: Studenti:

Anno Accademico 2020/2021

1 DESCRIZIONE DEL PROBLEMA

.

2.PROGETTAZIONE E IMPLEMENTAZIONE

DELL’ALGORITMO IN C

Il progetto è stato diviso in due sezioni:

1. Conversione del dataset

2. Regressione Polinomiale (SGD BATCH, ADAGRAD)

2.1 CONVERSIONE DEL DATASET

Il primo problema affrontato è stato determinare la dimensione di x* (dataset convertito) e del vettore

theta per rendere il programma generico rispetto all’input (aumentando così la robustezza).

Abbiamo scritto il primo metodo di supporto chiamato dimXast() che sfrutta la formula matematica

delle combinazioni con ripetizioni:

La formula per raggiungere il risultato finale viene chiamata g-1 volte se il grado è uguale a g.

Per evitare il problema della dimensione dei fattoriali che restituivano un numero molto elevato che

non sarebbe stato rappresentabile, abbiamo effettuato delle semplificazioni su di essi.

Il metodo come si può vedere in Figura 1 ha come parametri il grado e la dimensione che vengono

passati rispettivamente dall’utente. Figura 1

Una volta ottenuta la dimensione di x* e theta, abbiamo sfruttato il principio di località spaziale visto

a lezione per allocare nella maniera più ottimizzata possibile i nostri dati in memoria.

Sia i dati di x* (dataset convertito) che di theta sono stati allocati rispettivamente in due vettori distinti

da ridurre notevolmente i tempi d’accesso rispetto all’utilizzo di

in modo tale un puntatore di

puntatore. Quindi abbiamo deciso di rappresentare a livello logico secondo Row Major Order che

codifica gli elementi per riga. Il metodo che ha calcolato gli elementi da inserire nel vettore x* si

chiama convert(). Figura 2

un vettore d’appoggio per calcolare le combinazioni risalendo

Il metodo convert() sfrutta tramite gli

indici alle corrette posizioni delle x nelle colonne di ogni riga del dataset ed effettuando poi il prodotto

di quest’ultime. Grazie all’algoritmo implementato siamo riusciti ad evitare le combinazioni ripetute

utilizzando solo un vettore di dimensioni pari al grado. Viene utilizzata una lunghezza del vettore di

appoggio pari al grado corrente.

Il metodo principale convert() utilizza dei metodi di supporto che sono:

• inizializzaGradoUno()

• ripristinaVetZero()

• calcoloXastGradoMaggioreDue()

• tuttiX()

inizializzaGradoUno() permette di calcolare gli elementi di x* relativi al grado 1 che concretamente

si basa su una copia degli elementi per ridurre i tempi di esecuzione dell’algoritmo.

utilizzati durante l’esecuzione

ripristinaVetZero() inizializza a 0 gli elementi del vettore di appoggio

dell’algoritmo per uno specifico grado. Si effettua quando si deve passare al calcolo delle

combinazioni per il grado successivo.

permette di calcolare l’elemento corretto del vettore x* in base al

calcoloXastGradoMaggioreDue()

vettore degli indici v.

permette di impostare i valori utilizzati nel vettore d’appoggio alla prossima combinazione

tuttiX()

di indici quando un indice arriva a dimensione-1.

2.2 SGD BATCH

In questa sezione è stato affrontato il problema principale del progetto che riguarda il calcolo dei theta

ottimi tramite il metodo sgdBatch(). Figura 3

come si può vedere in Figura 3, il metodo riceve tutta la struttura d’input e procede ad eseguire

Da

alcune funzioni. La prima è la fase di inizializzazione dei dati a zero sia per il vettore risultato che

per i theta.

Abbiamo scelto in seguito (Figura 4) di suddividere il codice in due porzioni in base al numero di

righe. Se il numero di righe è multiplo del batch viene eseguita una sezione altrimenti se non è

ne viene eseguita un’altra. Grazie a ciò

multiplo abbiamo evitato alcuni calcoli ripetuti.

Figura 4

Il metodo principale sgdBatch() utilizza dei metodi di supporto che sono:

• prodottoErrorexEtaxXast()

• calcoloPTheta()

prodottoErrorexEtaxXast() ci permette di calcolare e salvare in un vettore risultato i dati parziali

della formula sottostante:

calcoloPTheta() ci permette di aggiornare i valori di Theta ad ogni blocco di batch:

2.3 SGD ADAGRAD prima descritto con l’aggiunta dell’accelerazione

In questa sezione è stato affrontato il problema

adagrad. A differenza del metodo sgdBatch il nuovo metodo sgdAdagrad dovrebbe convergere

all’ottimo più velocemente. Figura 5

Come prima il metodo riceve tutta la struttura d’input e si occupa di inizializzare le strutture di

supporto a 0. Tra queste abbiamo Gj, il vettore dei theta e un vettore risultato.

Anche qui il codice è stato suddiviso in due sezioni in base al numero di righe in input per evitare la

ripetizione di alcune operazioni (Figura 6). Figura 6

Il metodo principale sgdAdagrad() utilizza dei metodi di supporto che sono:

• calcoloParziale()

• calcoloPThetaAdagrad()

calcoloParziale() permette di calcolare il vettore Gj considerando i valori delle operazioni precedenti.

dove verrà cumulato l’intero blocco per

Inoltre, permette di calcolare un vettore di appoggio risultato

ogni batch.

calcoloPThetaAdagrad() ci permette di aggiornare i valori di theta ad ogni blocco di batch:

Dettagli
Publisher
A.A. 2020-2021
15 pagine
SSD Ingegneria industriale e dell'informazione ING-INF/05 Sistemi di elaborazione delle informazioni

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher antonio199696 di informazioni apprese con la frequenza delle lezioni di Architetture e progettazione di sistemi di elaborazione e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università della Calabria o del prof Fassetti Fabio.