IT202000016909A1 - Procedimento di elaborazione dati implementato su elaboratore, sistema micro-controllore e prodotto informatico corrispondenti - Google Patents

Procedimento di elaborazione dati implementato su elaboratore, sistema micro-controllore e prodotto informatico corrispondenti Download PDF

Info

Publication number
IT202000016909A1
IT202000016909A1 IT102020000016909A IT202000016909A IT202000016909A1 IT 202000016909 A1 IT202000016909 A1 IT 202000016909A1 IT 102020000016909 A IT102020000016909 A IT 102020000016909A IT 202000016909 A IT202000016909 A IT 202000016909A IT 202000016909 A1 IT202000016909 A1 IT 202000016909A1
Authority
IT
Italy
Prior art keywords
pooling
output
input
size
output buffer
Prior art date
Application number
IT102020000016909A
Other languages
English (en)
Inventor
Emanuele Plebani
Original Assignee
St Microelectronics Srl
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by St Microelectronics Srl filed Critical St Microelectronics Srl
Priority to IT102020000016909A priority Critical patent/IT202000016909A1/it
Priority to EP21182103.8A priority patent/EP3940541A1/en
Priority to US17/369,417 priority patent/US20220012569A1/en
Priority to CN202110787362.XA priority patent/CN113935478A/zh
Publication of IT202000016909A1 publication Critical patent/IT202000016909A1/it

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/047Probabilistic or stochastic networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0207Addressing or allocation; Relocation with multidimensional access, e.g. row/column, matrix
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/24Classification techniques
    • G06F18/241Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/10Interfaces, programming languages or software development kits, e.g. for simulating neural networks
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Data Mining & Analysis (AREA)
  • Health & Medical Sciences (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Artificial Intelligence (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Neurology (AREA)
  • Probability & Statistics with Applications (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Evolutionary Biology (AREA)
  • Image Processing (AREA)
  • Indexing, Searching, Synchronizing, And The Amount Of Synchronization Travel Of Record Carriers (AREA)
  • Signal Processing For Digital Recording And Reproducing (AREA)
  • Electrotherapy Devices (AREA)

Description

TRADUZIONE del testo del brevetto europeo n. dal titolo: "Procedimento di elaborazione dati implementato su elaboratore, sistema micro-controllore e prodotto informatico corrispondenti"
TESTO DELLA DESCRIZIONE
Campo tecnico
La descrizione si riferisce a procedimenti di allocazione di memoria e in particolare a sistemi e procedimenti di allocazione di memoria in circuiti di reti neurali artificiali (in breve, ANN, "Artificial Neural Network").
Una o pi? forme di attuazione si riferiscono a circuiteria di elaborazione comprendenti blocchi circuitali di memoria locale e atti a implementare tale elaborazione ANN, per esempio unit? micro-controllore (in breve, MCU, "Micro-Controller Units").
Una o pi? forme di attuazione possono essere applicate ad acceleratori hardware, per esempio per accelerare l'elaborazione in circuiti di reti neurali artificiali.
Sfondo tecnologico
I circuiti di reti neurali artificiali (ANN) comprendono schemi di elaborazione configurati per elaborare ampi dataset ("insiemi di dati").
Come qui discussa, la parola "dataset" o "matrice di dati" (?data array?) si riferisce principalmente a dati digitalizzati (per esempio, immagini digitali) che presentano una struttura di dati a matrice (in breve, matrice) comprendente una raccolta di elementi (valori o variabili) identificati da almeno un indice o chiave di matrice, in un modo di per s? noto. Una matrice lineare, anche denominata matrice monodimensionale, ? un tipo comune di struttura dati, in cui una dimensione di ingresso si pu? riferire alla lunghezza di tale matrice lineare.
Una elaborazione ANN in generale comprende due fasi: - una fase di addestramento ("training") in cui la ANN "impara" in modo adattivo a svolgere compiti considerando esempi (denominati dataset di addestramento), in generale senza essere programmata con alcuna regola specifica del compito; e
- uno stadio di inferenza, in cui la ANN addestrata pu? essere utilizzata per effettuare previsioni approssimate relative a dati di ingresso generali.
Per esempio, si consideri la classificazione se una immagine rappresenta un cane o un gatto sulla base di lunghezza e altezza dell'oggetto rappresentato nell'immagine. Un training set pu? comprendere migliaia di matrici [altezza, peso, gatto/cane], ad esempio [50, 6, gatto]. La rete neurale artificiale pu? prendere questi dati e "apprendere" complesse delimitazioni tra gatti e cani sulla base di altezza e peso. Successivamente, dato un ingresso di dati non classificati, l'algoritmo di machine learning determina se esso ? un cane o un gatto e un livello di confidenza della classificazione.
Vari modelli ANN possono essere addestrati opportunamente per l'applicazione in domini differenti, per esempio le ANN possono essere utilizzate per apprendere schemi di parole in frasi o per l'individuazione di parole chiave, per prevenire i malfunzionamenti di un utensile come nella manutenzione predittiva, per (per esempio, in sensori inerziali) elaborazione di segnali come nel riconoscimento dell'attivit? umana, per l'elaborazione di immagini e la classificazione di oggetti in immagini e anche per molti altri compiti basati sull'apprendimento.
In generale, una ANN pu? essere disposta secondo una pluralit? di "strati" e diversi tipi di operazioni di elaborazione dati possono essere effettuati presso diversi strati di ANN.
La velocit? di esecuzione di tali operazioni di elaborazione dati si pu? basare fortemente su come il codice software viene mappato sulle risorse di calcolo e di memoria impiegate.
I tipi di operazioni (o funzioni) di elaborazione dati che possono essere effettuate negli strati di ANN, applicando un opportuno operatore (o funzione) ai dati da elaborare, possono comprendere l'applicazione di operatori di pooling e/o di convoluzione.
Un operatore di pooling pu? essere applicato ai dati allo scopo di calcolare un operatore di "combinazione" su una regione dei dati di ingresso forniti.
In particolare, applicare il pooling a una matrice comprende elaborare i dati all'interno di una data "finestra (di pooling)" o "regione (di pooling)" che viene fatta muovere/scorrere progressivamente su aree/regioni dell'ingresso secondo un certo passo (?stride?) di progressione, ossia una distanza percorsa con ciascuno scorrimento, in cui un singolo valore di uscita viene calcolato come una funzione dei dati raccolti all'interno della finestra a scorrimento.
Vi sono molti tipi di strati o operatori di pooling, per esempio tipi noti sono:
- applicare un operatore di "pooling massimo" (in breve, max-pool) a una matrice di ingresso pu? produrre una matrice di uscita i cui elementi sono ottenuti rilevando il valore massimo all'interno della finestra in ciascuno stadio in cui essa viene fatta scorrere ordinatamente sulla matrice,
- applicare un operatore di "pooling medio" (in breve, avg-pool) a una matrice di ingresso pu? produrre una matrice i cui elementi sono ottenuti calcolando il valor medio dei valori di matrice all'interno della finestra in ciascuno stadio in cui essa viene fatta scorrere ordinatamente sulla matrice.
Uno strato di pooling pu? essere personalizzato facendo variare i suoi parametri, che sono di per s? noti, per esempio:
- dimensione/forma della matrice di pooling, per esempio (c)
- dimensione di riempimento (?padding?), per esempio, (p)
- dimensione di passo, per esempio, (s).
Come citato, il passo ? la lunghezza della "distanza percorsa" (in termini di indici di matrice) della finestra di pooling tra due calcoli di valori di uscita.
La dimensione di riempimento si riferisce a come i calcoli ai "margini" della matrice possono essere trattati quando si applica il pooling: per esempio se la matrice di ingresso ? una matrice lineare di una lunghezza pari, per esempio 8, e la finestra di pooling presenta dimensione (c)=3 e passo (s)=3, allora quando si muove la finestra all'ultimo blocco di dati si riscontra un problema all? "estremit?" della matrice, poich? vi ? un indice "mancante". Per ovviare a ci?, una dimensione di riempimento (p)=1 pu? aumentare l'altezza e la larghezza dell'uscita, riempiendo lo spazio in eccesso con valori nulli, assicurando che la finestra di pooling ? applicata per intero all?ingresso.
Programmare un elaboratore per effettuare operazioni di pooling pu? prevedere allocare uno spazio di memoria per ospitare dati temporanei, noto anche come dimensione di buffer.
Migliorare l'occupazione di memoria e la velocit? di calcolo delle operazioni di pooling ? un aspetto importante nell'ambito delle reti neurali artificiali, in particolare per circuiti acceleratori hardware.
Scopo e sintesi
Uno scopo di una o pi? forme di attuazione ? contribuire a fornire tale soluzione migliorata.
Secondo una o pi? forme di attuazione, tale scopo pu? essere ottenuto per mezzo di un procedimento di elaborazione dati implementato su elaboratore e/o un prodotto informatico che presenta le caratteristiche esposte nelle rivendicazioni che seguono.
Una o pi? forme di attuazione possono riferirsi a un circuito corrispondente.
Una o pi? forme di attuazione possono riferirsi a un sistema micro-controllore corrispondente.
Un circuito micro-controllore comprendente un blocco circuitale di memoria ad accesso casuale (in breve, RAM) e configurato per effettuare operazioni di pooling in un modo in cui la memoria ? allocata in modo efficiente pu? essere esemplificativo di tale sistema.
Una o pi? forme di attuazione possono comprendere un prodotto informatico caricabile nella memoria di almeno un circuito di elaborazione (per esempio, un elaboratore) e comprendente parti di codice software per eseguire le fasi del procedimento quando il prodotto viene eseguito su almeno un circuito di elaborazione. Come qui utilizzato, il riferimento a tale prodotto informatico ? inteso come equivalente al riferimento a un mezzo leggibile da elaboratore contenente istruzioni per controllare il sistema di elaborazione allo scopo di coordinare l'implementazione del procedimento secondo una o pi? forme di attuazione. Il riferimento ad "almeno un elaboratore" ? inteso a evidenziare la possibilit? per una o pi? forme di attuazione di essere implementate in forma modulare e/o distribuita.
Una o pi? forme di attuazione possono essere idonee per il caricamento nella memoria di almeno un circuito di elaborazione (per esempio, un micro-controllore) e comprendono parti di codice software per eseguire le fasi del procedimento quando il prodotto viene eseguito su almeno un circuito di elaborazione. Come qui utilizzato, il riferimento a tale rete neurale artificiale ? inteso come equivalente al riferimento a un circuito elettronico e/o a un mezzo leggibile da elaboratore contenente istruzioni per controllare il sistema di elaborazione allo scopo di coordinare l'implementazione del procedimento secondo una o pi? forme di attuazione.
Le rivendicazioni sono una parte integrante dell'insegnamento tecnico qui fornito con riferimento alle forme di attuazione.
Una o pi? forme di attuazione possono fornire una strategia per calcolare le coordinate dei risultati di pooling e utilizzare un buffer di uscita come memoria di lavoro.
Una o pi? forme di attuazione possono facilitare evitare calcoli duplicati e buffer aggiuntivi.
Una o pi? forme di attuazione possono facilitare effettuare operazioni di pooling utilizzando una dimensione e/o spazio di memoria ridotto.
Una o pi? forme di attuazione possono facilitare effettuare una elaborazione dati di rete neurale artificiale in micro-controllori che presentano risorse RAM e potenza di calcolo limitate.
Una o pi? forme di attuazione possono ridurre operazioni e vincoli di allocazione di memoria, facilitando l'utilizzo di dispositivi pi? economici per effettuare l'elaborazione di reti neurali artificiali.
Una o pi? forme di attuazione possono facilitare una singola operazione di accesso in memoria per leggere dati di ingresso memorizzati in memoria.
Una o pi? forme di attuazione possono facilitare l'integrazione di implementazioni "in pipeline" in cui le operazioni sono effettuate in un modo a cascata.
Una o pi? forme di attuazione possono facilitare fornire un prodotto informatico che presenta costi di manutenzione ridotti, per esempio facilitando la gestione di un grande numero di casi speciali con mezzi relativamente semplici ed economici.
Una o pi? forme di attuazione possono facilitare la gestione di grandi dimensioni di riempimento nell'effettuazione di (vari tipi di) elaborazione di pooling.
In una o pi? forme di attuazione, gli operatori di pooling in una rete neurale possono essere fusi da strato a strato, facilitando i risparmi di memoria.
In una o pi? forme di attuazione, i risultati del pooling possono essere calcolati in modo efficiente, evitando duplicazioni e buffer aggiuntivi per memorizzare risultati temporanei.
Una o pi? forme di attuazione prevedono l'aggiornamento dei valori di tutte le uscite influenzate da un dato ingresso ad un medesimo tempo.
Breve descrizione delle diverse viste dei disegni Una o pi? forme di attuazione verranno adesso descritte, solo a titolo di esempio non limitante, con riferimento alle figure allegate, in cui:
le figure 1 e 2 sono diagrammi esemplificativi di elaborazione di reti neurali artificiali,
la figura 3 ? un diagramma di una unit? di circuito micro-controllore secondo una o pi? forme di attuazione, la figura 4 comprende parti a), b) e c) comprendenti diagrammi di segnali presenti in un primo procedimento di pooling,
la figura 4A comprende parti a), b) e c) comprendenti diagrammi di segnali presenti in un secondo procedimento di pooling,
la figura 4B comprende parti a), b) e c) comprendenti diagrammi relativi a errori di caricamento di buffer,
la figura 5 comprende parti a), b), c), d), e) comprendenti diagrammi di principi sottostanti a una o pi? forme di attuazione,
la figura 6 ? un diagramma di un procedimento di elaborazione dati secondo la presente divulgazione,
le figure 7 a 9 comprendono diagrammi esemplificativi di principi sottostanti a una o pi? forme di attuazione, la figura 10 ? un diagramma esemplificativo di una matrice di ingresso bidimensionale,
la figura 11 ? un diagramma esemplificativo di principi sottostanti a una o pi? forme di attuazione,
la figura 12 ? un diagramma esemplificativo di una o pi? forme di attuazione di un procedimento secondo la presente divulgazione, per esempio, come applicato su immagini bidimensionali,
la figura 13 ? un diagramma esemplificativo di una o pi? forme di attuazione di un procedimento secondo la presente divulgazione,
la figura 14 ? un diagramma di principi sottostanti a una o pi? forme di attuazione,
le figure 15 e 16 sono diagrammi esemplificativi di principi sottostanti a una o pi? forme di attuazione.
Descrizione dettagliata di forme di attuazione esemplificative
Nella descrizione che segue, sono illustrati uno o pi? dettagli specifici, rivolti a fornire una comprensione approfondita di esempi di forme di attuazione di questa descrizione. Le forme di attuazione possono essere ottenute senza uno o pi? degli specifici dettagli, o con altri procedimenti, componenti, materiali, ecc. In altri casi, strutture, materiali, o operazioni noti non sono illustrati o descritti in dettaglio in modo che certi aspetti delle forme di attuazione non saranno offuscati.
Il riferimento a "una forma di attuazione" o "una sola forma di attuazione" nel quadro della presente descrizione ? inteso a indicare che una particolare configurazione, struttura, o caratteristica descritta in relazione alla forma di attuazione ? compresa in almeno una forma di attuazione. Quindi, frasi come "in una forma di attuazione" o "in una sola forma di attuazione" che possono essere presenti in uno o pi? punti della presente descrizione non si riferiscono necessariamente a una stessa e unica forma di attuazione.
Inoltre, particolari conformazioni, strutture, o caratteristiche possono essere combinate in qualsiasi modo adeguato in una o pi? forme di attuazione.
I riferimenti qui utilizzati sono forniti unicamente per comodit? e quindi non definiscono l'estensione di protezione o la portata delle rivendicazioni.
I disegni sono in una forma semplificata e non sono in una scala precisa. Per semplicit?, termini direzionali (su/gi?, ecc.) o di movimento (in avanti/all'indietro, ecc.) possono essere utilizzati rispetto ai disegni.
Il termine "accoppiare" e simili non denotano necessariamente connessioni dirette e immediate, ma comprendono anche connessioni attraverso elementi o dispositivi intermedi.
Inoltre, nel seguito, un circuito che implementa (attraverso hardware e/o software) una rete neurale, cio? un circuito di rete neurale artificiale (ANN) pu? essere indicato brevemente come una "rete neurale" per evitare di rendere inutilmente complicata la presente descrizione.
Come citata, l'elaborazione ANN 10 pu? comprendere pi? operazioni di elaborazione dati effettuate su una matrice di ingresso.
Tali operazioni di elaborazione dati possono preferibilmente essere effettuate in un modo automatizzato utilizzando almeno un circuito di elaborazione, per esempio una unit? di circuito micro-controllore.
La figura 1 illustra un possibile diagramma di una rete neurale artificiale (in breve, ANN) 100, comprendente:
uno strato di ingresso 102, che presenta un primo nodo di ingresso 110 e un secondo nodo di ingresso 120, lo strato di ingresso 102 essendo configurato per ricevere una matrice di ingresso Xin, per esempio x=(Xin(1), Xin(2))= (lunghezza, altezza), e
uno strato di uscita 104, che presenta un primo nodo di uscita 130 e un secondo nodo di uscita 140, lo strato di uscita 104 essendo configurato per fornire a circuiti utenti almeno una matrice di uscita Xout, per esempio le uscite Xout=(Xout(1),Xout(2))=(gatto, cane).
I nodi di elaborazione ANN 110, 120, 130, 140 possono comprendere delle unit? di elaborazione, per esempio "perceptron" come nella elaborazione di perceptron multistrato, e/o celle o unit? multistrato nella elaborazione di reti neurali ricorsive, e cos? via.
Nel seguito, per semplicit?, una o pi? forme di attuazione sono discusse principalmente con riferimento a unit? di elaborazione di tipo perceptron, rimanendo peraltro inteso che tale tipo di unit? di elaborazione ANN ? puramente esemplificativa e non ? in alcun modo limitante.
I nodi/unit? di elaborazione ANN 110, 120, 130, 140 possono essere configurati per elaborare dati ricevuti utilizzando rispettivi insiemi di pesi W1, W2, W3, W4 e attivazioni G1, G2, G3, G4 che sono memorizzati preferibilmente in una parte del circuito di memoria del circuito di elaborazione utilizzato per effettuare l'elaborazione ANN.
In una o pi? forme di attuazione, l'elaborazione ANN 10 pu? comprendere inoltre cosiddetti "strati nascosti" in cui vi sono perceptron accoppiati ad altri neuroni nella rete e quindi non sono direttamente accessibili dagli strati di ingresso e uscita, il che indica che l'elaborazione pu? avvenire con un numero pi? elevato e con un'architettura pi? complessa di perceptron rispetto a uno strato singolo, per esempio allo scopo di elaborare immagini bidimensionali.
Le unit? 110, 120, 130, 140 degli strati 102, 104 possono essere accoppiate a nodi di ingresso di ciascuna unit? dello strato a valle (che pu? essere indicata come una topologia "feed-forward completamente connessa") e, opzionalmente, a un nodo di ingresso di polarizzazione.
In una o pi? forme di attuazione, uno schema di elaborazione ANN 100 pu? essere modellato come un grafo aciclico diretto (in breve, DAG, "Directed Acyclic Graph").
A scopo di semplicit?, un modello DAG comprendente sei nodi sequenziali ? discusso nel seguito rispetto alla figura 2, essendo d'altra parte inteso che tale quantit? di nodi e tale topologia DAG sono puramente esemplificativi e non sono in alcun modo limitanti. Una o pi? forme di attuazione possono riferirsi a schemi di elaborazione ANN 100 che possono essere modellati come un DAG con un numero di nodi differente e topologie differenti.
In una o pi? forme di attuazione come esemplificate nella figura 2, il grafo aciclico diretto (DAG) pu? comprendere un insieme di nodi di elaborazione dati T1, L1, T2, L2, T3, in cui i nodi nell'insieme di nodi di elaborazione dati T1, L1, T2, L2, T3 possono appartenere a uno di due insiemi di nodi:
- un primo insieme di nodi di "strato" L1, L2, L3 (rappresentati utilizzando cerchi nella figura 1), che comprende operatori di elaborazione dati della rete neurale artificiale 100, e
- un secondo insieme di nodi "tensori" T1, T2, T3 (rappresentati utilizzando quadrati nella figura 1), che sono indicativi di stadi di accesso in memoria o di memorizzazione nello schema di elaborazione di rete neurale 100.
In particolare:
- qualsiasi nodo nel primo insieme di nodi di strato L1, L2 comprende almeno un operatore di elaborazione dati configurato per essere applicato ai dati in qualsiasi (unit? di) strato (di elaborazione e/o multiplo) 102, 104 di elaborazione ANN 100, e
- qualsiasi nodo nel secondo insieme di nodi T1, T2, T3 comprende almeno una operazione di memorizzazione dati collegata a un rispettivo stadio di elaborazione dati L1, L2, della rete neurale artificiale, allo scopo di caricare i pesi di perceptron W1, W2, W3, W4 e/o le attivazioni G3, G4, e memorizzare le uscite del nodo di strato di rete neurale collegato L1, L2.
Come detto, nell'esempio (non limitante) considerato di nodi di perceptron 110, 120, 130, 140, i pesi W1, W2, W3, W4 e/o le attivazioni G1, G2, G3, G4 dei perceptron ANN 110, 120, 130, 140 nei rispettivi strati ANN 102, 104 possono essere memorizzati in una parte di circuito di memoria di un circuito di elaborazione.
La figura 3 ? un diagramma esemplificativo che illustra un sistema di elaborazione informatica 10 esemplificativo, per esempio, atto a implementare una o pi? parti della ANN 100.
Tale sistema 10 pu? comprendere un circuito di elaborazione micro-controllore, per esempio, un circuito di utilizzo generale. In una o pi? forme di attuazione, l'unit? micro-controllore (in breve, MCU) 10 pu? comprendere una unit? di elaborazione 12 e un insieme di parti di circuito di memoria 14, 16. La MCU 10 pu? inoltre comprendere:
una parte di circuito 18 configurata per accoppiare la MCU ad altre unit? di elaborazione o dispositivi di attuazione, per esempio, noti come periferiche, in un modo di per s? noto;
mezzi di rete tra l'unit? di elaborazione e la memoria per scambiare dati tra di esse, per esempio attraverso bus dati (non visibili nella figura 3 per semplicit?); tali mezzi di rete possono comprendere strutture di bus qualsiasi tra diverse tipologie ben note che utilizzano una qualsiasi variet? di architetture di bus, per esempio, bus ISA (architettura standard per l'industria, "Industry Standard Architecture"), bus MCA (architettura a micro canale, "Micro Channel Architecture"), bus EISA (ISA potenziato, "Enhanced ISA"), bus locale VESA (associazione degli standard di elettronica video, "Video Electronics Standards Associate") e PCI (interconnessione di componenti periferici, "Peripheral Component Interconnect").
Vari componenti connessi al bus di sistema comprendono, ma non sono limitati a, memoria espandibile non volatile (per esempio, memorizzazione di dati basata su disco), adattatore per video/grafica, controllore di interfaccia (I/F) di ingresso di utilizzatore configurato per essere connesso a uno o pi? dispositivi di ingresso ad esempio una tastiera, controllore di interfaccia di periferica configurato per essere connesso a una o pi? periferiche esterne ad esempio una stampante, e un controllore di interfacce di rete che pu? essere accoppiato a uno o pi? dispositivi, ad esempio memorizzazione dati, un elaboratore remoto che esegue una o pi? applicazioni remote, attraverso una rete che pu? comprendere il cloud Internet, una rete in area locale (LAN, "Local Area Network"), una rete geografica (WAN, "Wide Area Network"), una rete in area di memorizzazione (SAN, "Storage Area Network").
L'unit? di elaborazione 12 pu? comprendere uno o pi? core di CPU di uso generale e opzionalmente uno o pi? core di uso speciale (per esempio, core DSP, a virgola mobile ("floating point"), GPU, e core ottimizzato per rete neurale), in cui gli uno o pi? core di uso generale eseguono codici operativi di uso generale mentre i core di uso speciale eseguono funzioni specifiche per il loro scopo.
L'insieme di blocchi circuitali di memoria 14, 16 pu? comprendere registri cache, memoria dinamica ad accesso casuale (DRAM, "Dynamic Random-Access Memory) o memoria EDO (uscita dati estesa, "Extended Data Out"), o altri tipi di memoria ad esempio ROM, RAM statica, flash, e memoria statica non volatile ad accesso casuale (NVSRAM, "Non-Volatile Static Random-Access Memory"), memoria a bolle, ecc.
Il sistema 10 pu? funzionare in un ambiente connesso in rete attraverso connessioni a uno o pi? elaboratori remoti. L'elaboratore remoto pu? comprendere un personal computer (PC), server, router, PC di rete, dispositivo peer o altro nodo comune di rete, e tipicamente comprende molti degli o tutti gli elementi discussi in precedenza.
Si nota che possono essere impiegate anche altre configurazioni di sistema di elaborazione digitale per implementare il sistema e i procedimenti della presente invenzione, e nella misura in cui una particolare configurazione di sistema ? in grado di implementare il sistema e i procedimenti della presente divulgazione.
In una o pi? forme di attuazione, l'insieme di parti del circuito di memoria 14, 16 pu? comprendere una prima parte di circuito di memoria 14 configurata per fornire dati a circuiti di utilizzatore con una prima velocit? di accesso in memoria, per esempio una memoria di tipo RAM, e una seconda parte di circuito di memoria 16 configurata per fornire dati a circuiti di utilizzatore con una seconda velocit? di accesso in memoria differente dalla prima, per esempio una memoria di tipo flash.
In una o pi? forme di attuazione, la prima parte di memoria 14 pu? comprendere una pluralit? di registri o buffer, per esempio:
- un primo sottoinsieme di buffer 140 configurati per memorizzare parti di dati specifici di applicazione, per esempio un dataset di ingresso per la ANN,
- un secondo sottoinsieme di buffer 142 configurati per memorizzare parti di codice di elaborazione ANN, e
- un terzo sottoinsieme di buffer 140 configurati per memorizzare attivazioni G1, G2, G3, G4 di nodi di perceptron ANN 110, 120, 130, 140 di rispettivi strati di elaborazione ANN 102, 104, in cui un'attivazione ? una uscita di uno strato.
In una o pi? forme di attuazione, la seconda parte di memoria 16 pu? comprendere una ulteriore pluralit? di registri o buffer 160 che possono essere configurati per memorizzare i valori dei pesi W1, W2, W3, W4 dei nodi di perceptron ANN 110, 120, 130, 140 dei rispettivi strati di elaborazione ANN 102, 104.
In una o pi? forme di attuazione, le attivazioni possono essere calcolate al volo durante l?esecuzione dell'elaborazione dati.
Allo scopo di accelerare l'esecuzione delle operazioni ANN e le prestazioni del sistema MCU 10, prima del run-time della ANN 100 pu? essere pre-allocato un buffer, per esempio prima che i dati da elaborare sia forniti ai nodi dello strato di ingresso della ANN.
La domanda di brevetto italiano N. 102019000012609 depositata il 22 luglio 2019 dal richiedente discute un procedimento di allocazione di memoria implementato su elaboratore che pu? essere idoneo per l'utilizzo in una o pi? forme di attuazione per migliorare le prestazioni del sistema MCU 10 nell'applicazione dell'elaborazione ANN 100 a matrici di ingresso Xin.
Tale procedimento implementato su elaboratore pu? comprendere:
- fornire una circuiteria di elaborazione dati per il circuito di rete neurale artificiale 100, la circuiteria di elaborazione dati comprendendo buffer di dati T1, T2, T3, in una circuiteria di memoria,
- accoppiare i buffer di dati T1, T2, T3 nella circuiteria di memoria a rispettivi strati di elaborazione L1, L2, L3 nel circuito di rete neurale artificiale 100 e ottenere una sequenza di visita ordinata di strati della rete neurale artificiale 100,
- produrre, in funzione della sequenza ordinata di visita di strati della rete neurale artificiale 100, una programmazione di allocazione di memoria (virtuale), la programmazione di allocazione di memoria A comprendendo un insieme di istruzioni per operazioni di allocazione e deallocazione di memoria applicabili ai buffer di dati T1, T2, T3 nella circuiteria di memoria 14, 16 accoppiata a strati di elaborazione del circuito di rete neurale artificiale 100,
- calcolare, in funzione della programmazione di allocazione di memoria, una struttura di dati di configurazione di memoria (fisica) per il circuito di rete neurale artificiale 100, il dataset di configurazione di memoria fisica (o virtuale) comprendendo dimensioni e indirizzi di locazioni di memoria fisica per il circuito di rete neurale artificiale 100.
In una o pi? forme di attuazione, fondere operatori di due strati pu? fornire ulteriori risparmi di memoria, come risultato, per esempio, della rimozione di un buffer intermedio.
Come citato, ? qui discusso un procedimento di (ulteriore) miglioramento della applicazione di elaborazione di una rete neurale artificiale 100, in particolare quando si utilizzano circuiti MCU 10, allo scopo di razionalizzare l'elaborazione e ridurre i tempi di accesso in memoria.
Per scopo di semplicit?, i principi sottostanti a una o pi? forme di attuazione sono discussi con riferimento a un caso esemplificativo, in cui:
- una matrice di ingresso Xin, per esempio una matrice lineare di ingresso che presenta una data dimensione di lunghezza L, per esempio, L=9; per semplicit?, la matrice di ingresso considerata Xin ? considerata comprendente un vettore unitario, cio? un vettore i cui elementi sono tutti valori unitari, per esempio Xin=[A,B,C,D,E,F,G,H,I]=[1,1,1,1,1,1,1,1,1];
- la matrice di ingresso Xin ? elaborata utilizzando un operatore di elaborazione di pooling PF che presenta una data finestra di pooling PW con una dimensione di finestra di pooling c e presenta una dimensione di passo di pooling s, per esempio, c(PF)=6, s(PF)=1,
- almeno un buffer ? associato all'operatore di pooling PF ed ? configurato per memorizzare ingressi e/o uscite dell'operatore di pooling, come discusso nel seguito,
- un segnale di uscita Xout fornisce valori dell'operatore di pooling quando ? calcolato su una parte dei dati di ingresso che presentano una dimensione uguale alla finestra di pooling PW, l'operatore di pooling essendo un operatore di pooling di "somma", cio? l'uscita di PF ? la somma di tutti gli elementi all'interno di una finestra di pooling (per esempio, un operatore di pooling medio pu? essere ottenuto dividendo l'uscita dell'operatore di pooling di somma per il valore di lunghezza d'ingresso L);
- le operazioni di lettura/scrittura/somma di dati possono essere sincronizzate attraverso un segnale di temporizzazione CK per esempio, un segnale di clock fisico o un indice di anello/ciclo) e i dati caricati in un ciclo sono disponibili nel successivo ciclo discreto, in un modo di per s? noto, in cui tali cicli possono essere indicati come "epoche" (?epochs?).
In un primo metodo "naif" di applicazione del pooling alla matrice di ingresso Xin, come esemplificato nella figura 4, un primo buffer B1(1) che presenta allocato uno spazio di buffer minimo, per esempio, di una unit? di memoria, pu? essere utilizzato per effettuare il pooling. Tale soluzione pu? prevedere tuttavia costi di calcolo elevati in termini di dimensione di memoria RAM e di latenza di calcolo, come discusso nel seguito.
Una prima implementazione "naif" di pooling pu? prevedere l'elaborazione di un valore di uscita di pooling appena tutti i valori di ingresso all'interno di una finestra di pooling sono disponibili per l'accumulazione.
Come esemplificato nella figura 4, applicare l'operatore di pooling PF della prima implementazione "naif" pu? comprendere:
- come esemplificato nella parte a) della figura 4, applicare la finestra di pooling ai dati di ingresso Xin in finestre successive PW1, PW2, PW3, PW4, in cui ciascuna finestra ? separata dalla successiva da una distanza di indice-elemento uguale alla dimensione di passo, per esempio distanza di un elemento,
- le rispettive finestre di dati sono "scansionate" e ciascun valore compreso in ciascuna finestra ? accumulato nella memoria B1(1), i cui possibili valori memorizzati nel tempo sono esemplificati nella parte b) della figura 4, - un segnale di uscita Xout ? fornito alla fine di ciascun ciclo di accumulazione, come nella parte c) della figura 4.
Come esemplificato nella figura 4, con questo primo procedimento "naif", occorre un numero di cicli di clock uguale alla dimensione della finestra di pooling c per fornire un singolo valore di uscita dell'operatore di pooling PF. I valori di uscita totali dell'operatore di pooling PF richiedono un certo numero di cicli di clock per essere emessi. Tale numero di cicli di clock pu? essere un multiplo della dimensione di finestra di pooling secondo un fattore che dipende dalla quantit? di sovrapposizione tra finestre di pooling successive PW1, PW2, PW3, PW4. Per esempio, nell'esempio considerato, la latenza di calcolo totale per l'applicazione dell'operatore di pooling PF ? 4*c=24 cicli di clock.
Un secondo procedimento per applicare l'operatore di pooling come esemplificato nella figura 4A, che pu? essere indicato come "implementazione di pooling a strisce" SF, pu? comprendere allocare un buffer temporaneo B2, che presenta una dimensione uguale a una larghezza della immagine/matrice (che nel caso monodimensionale esemplificativo considerato ? uguale alla dimensione c della finestra di pooling PW, per esempio, size(B2)=c), il buffer B2 essendo configurato per memorizzare dati all'interno delle finestre di pooling PW1, PW2, PW3, PW4. Tale buffer di striscia B2 pu? essere utilizzato come buffer temporaneo per memorizzare una riga/colonna di una finestra di pooling PW dei dati di ingresso Xin.
Come esemplificato nella figura 4A, applicare un operatore di pooling a strisce SF dell'implementazione di pooling a strisce pu? comprendere:
- come esemplificato nella parte a) della figura 4A, applicare la finestra di pooling ai dati di ingresso Xin in finestre successive PW1, PW2, PW3, PW4, in cui ciascuna finestra ? separata dalla successiva da una distanza indiceelemento uguale alla dimensione di passo s, per esempio distanza di un elemento, e
- le rispettive finestre di dati sono "scansionate", i valori compresi nella prima finestra PW1 sono sequenzialmente caricati nelle successive parti di memoria indicizzate B2(i) del buffer a striscia temporaneo B2, come esemplificato nella parte b) della figura 4A che illustra possibili diagrammi temporali di valori memorizzati in una i-esima parte di memoria B2(i) del buffer a striscia temporaneo B2,
- un segnale di uscita Xout ? fornito ogni volta che tutti i dati che appartengono a una rispettiva finestra di pooling PW1, PW2, PW3, PW4 sono caricati e sono disponibili per essere accumulati in una successiva unit? di buffer B1, calcolando l'operatore di pooling alla fine di ciascun ciclo di accumulazione, come esemplificato nella parte c) della figura 4A.
In una o pi? forme di attuazione, i valori di uscita Xout possono essere disponibili per una ulteriore elaborazione in un istante linearmente proporzionale al valore della dimensione del pool, per esempio, all'istante c+3.
In una o pi? forme di attuazione, la striscia ? trattata come un buffer circolare di righe per evitare copie.
Tale implementazione a strisce pu? essere limitata in quanto non tutti i valori di parametro dell'operatore di pooling possono essere utilizzati in modo idoneo, cosicch? una messa a punto dei valori di parametro dell'operatore di pooling pu? essere imperativa. Possono insorgere problemi quando si effettua il pooling dei dati di immagine nei "bordi" dell'immagine, quando pu? rimanere una striscia parziale di dati di ingresso per la memorizzazione nel buffer a striscia B2, B2'.
Come esemplificato nella figura 4A, con questo secondo metodo a "strisce", occorre un numero di cicli di clock uguale alla dimensione di finestra di pooling c per fornire un primo valore di uscita dell'operatore di pooling PF. I valori di uscita totali dell'operatore di pooling PF richiedono un numero totale di cicli di clock per essere emessi che ? proporzionale a un rapporto della dimensione di ingresso sulla dimensione di passo. Per esempio, nell'esempio considerato, la latenza di calcolo totale dell'applicazione dell'operatore di pooling PF ? c+3=9 cicli di clock, il che facilita una riduzione del costo di calcolo.
Sostanzialmente, tra l'istante c e l'istante c+1 almeno un elemento ? sostituito nel buffer a striscia B2. In particolare, l'elemento A ? sostituito con l'elemento G. Analogamente, tra l'istante c+1 e l'istante c+2, l'elemento B ? sostituito con l'elemento H del buffer a striscia B2. Di conseguenza, l'elemento C ? sostituito con l'elemento I nel buffer a striscia B2.
Quindi, mentre l'implementazione naif presenta, almeno, lo svantaggio di utilizzare valutazioni ripetute degli ingressi, l'implementazione a strisce presenta, almeno, lo svantaggio di utilizzare una memoria temporanea per i valori di ingresso.
Altri svantaggi dell'implementazione a striscia possono essere:
- impiego di una quantit? di memoria temporanea, per esempio, RAM, che ? proporzionale alla larghezza dell'ingresso per ospitare il buffer temporaneo B2,
- nel caso di regioni di pooling parziale, cio? nei casi in cui la dimensione della finestra di pooling e la dimensione dei dati di ingresso non sono multipli tra di loro (con riempimento opzionale non nullo), lo stato della striscia dipende dal passo, riempimento, e dimensione della regione di pooling, portando a diversi casi "speciali" da gestire, portando a una implementazione "soggetta a bug".
Alcuni esempi di configurazioni che prevedono scenari di regione di pooling parziale nel buffer a striscia sono esemplificati nella figura 4B, in cui un buffer a striscia esemplificativo B2' ? trattato come un buffer circolare di righe per evitare copie.
Come detto, possono nascere problemi nell'applicazione dell'elaborazione dati di pooling per esempio quando si elaborano dati di immagine quando l'applicazione ? effettuata nei bordi dell'immagine, in cui pu? rimanere una striscia parziale di dati.
Come esemplificato nella parte a) della figura 4B, in un primo caso esemplificativo la dimensione di ingresso e la dimensione di passo possono non avere un dividendo/multiplo comune. Per esempio, questo pu? essere il caso in cui:
la dimensione di ingresso L pu? presentare un primo valore di ingresso, per esempio, L=8,
la dimensione di pooling pu? presentare un primo valore di dimensione di pool, per esempio, c=3,
la dimensione di passo pu? presentare un primo valore di passo, per esempio, s=3.
In tale primo esempio come esemplificato nella parte a) della figura 4B, una ultima regione di pooling da elaborare quando si applica l'elaborazione di pooling (a strisce) SF (con dimensione di pool 3 e dimensione di passo 3) ai dati di ingresso Xin (con dimensione di ingresso 8) ? riempita parzialmente con dati poich? il rapporto di dimensione di dati di ingresso su dimensione di pool non ? un intero, per esempio 8 mod 3 = 2. In tale scenario esemplificativo, il buffer di striscia B2 memorizzerebbe solo parzialmente dati "validi", e quando si applica il pooling SF, PF pu? nascere un problema quando si calcola il valore di uscita Xout come somma di valori validi con un valore non valido.
Come esemplificato nella parte b) della figura 4B, in un secondo caso esemplificativo, la dimensione di passo pu? essere pi? piccola della dimensione di pool; per esempio, questo pu? essere il caso in cui:
la dimensione di ingresso L pu? presentare un secondo valore di ingresso, per esempio, L=6,
la dimensione di pool pu? presentare uno stesso valore di dimensione di pool, per esempio, c=3,
la dimensione di passo pu? presentare un secondo valore di passo, per esempio, s=2.
In tale secondo esempio come esemplificato nella parte b) della figura 4B, quando si effettua l'applicazione di pooling SF, PF alla prima regione di pooling, il buffer di striscia B2' pu? presentare una regione parzialmente riempita comprendente valori non validi che si pu? trovare in qualsiasi parte del buffer di striscia B2', per esempio in un primo elemento B2?(1) del buffer di striscia B2', per esempio, B2?(1) uguale a un valore precedentemente scritto o a un valore evidentemente errato ad esempio B2?(1)=NaN.
Come esemplificato nella parte c) della figura 4B, in un terzo caso esemplificativo, la dimensione di passo pu? essere molto pi? piccola della dimensione di pool; per esempio, ci? pu? avvenire quando:
la dimensione di ingresso L pu? presentare un secondo valore di ingresso, per esempio, L=7,
la dimensione di pool pu? presentare uno stesso valore di dimensione di pool, per esempio, c=5,
la dimensione di passo pu? presentare una seconda dimensione di passo, per esempio, s=3.
In tale secondo esempio come esemplificato nella parte b) della figura 4B, l'ultima regione di pooling pu? essere riempita a partire dal centro e pu? avvolgersi intorno al buffer, ma un elemento centrale B2?(j) del buffer B2' pu? ancora comprendere dati non validi a causa di un riempimento parziale.
Il pooling a strisce SF pu? utilizzare un codice specifico per gestire ciascuno di questi "casi speciali" utilizzando parti di codice software specifico, fornendo un prodotto informatico con costi di manutenzione elevati.
In conclusione, i procedimenti di allocazione di memoria discussi in precedenza presentano svantaggi di:
- ripetere calcoli quando le regioni di pooling sono sovrapposte, aumentando latenza e inefficienza, o
- utilizzare una striscia (buffer che copre diverse righe) per accantonare risultati, con il problema di gestire diversi casi di bordo a seconda del contenuto del buffer.
Una o pi? forme di attuazione possono essere basate sull'osservazione che l'operazione di pooling pu? essere migliorata quando pu? essere stabilita una relazione tra gli elementi dei dati di ingresso Xin e gli elementi dei dati di uscita Xout, trovando elementi di uscita influenzati da un dato elemento di valore d'ingresso, facilitando l'ottenimento di un accesso singolo ai dati di ingresso Xin e una striscia di elementi di uscita "attivi" (per esempio, indici o coordinate di matrice di uscita) invece di elementi di ingresso attivi (per esempio, indici o coordinate di matrice di ingresso).
Una o pi? forme di attuazione possono comprendere fornire un buffer di uscita B3 che presenta una dimensione
che pu? essere calcolata "offline" o "a priori" in
funzione dei parametri c, s dell'operatore di pooling VF. Di conseguenza, come detto, l'operatore di pooling VF calcola solamente i valori della regione di uscita dedotta.
In una o pi? forme di attuazione, la dimensione del buffer di uscita pu? essere calcolata in un modo selezionabile tra differenti opzioni, per esempio effettuando una elaborazione di inferenza della forma di uscita comprendente l'elaborazione di parametri di pooling.
Per esempio, tali differenti opzioni selezionabili possono comprendere:
- una prima dimensione del buffer di uscita pu? essere calcolata effettuando una specie di "strategia di pianerottolo" (?floor strategy?), che pu? essere espressa come:
in cui
c: dimensione finestra di pooling,
s: dimensione passo,
pleft = dimensione di riempimento sul lato sinistro pright = dimensione di riempimento sul lato destro di = dimensione di lunghezza della matrice di ingresso - una seconda dimensione di buffer di uscita pu? essere calcolata utilizzando una specie di "approssimazione di tetto" (?ceiling approximation?), che pu? essere particolarmente adatta per dimensione di riempimento non nulla e che pu? essere espressa come:
- una terza dimensione di buffer di uscita pu? essere calcolata quando non si prevede nessun riempimento e la dimensione di riempimento ? nulla, che pu? essere espressa come:
In particolare, l?inventore ha osservato che un valore condiviso da regioni di pooling multiple (sovrapposte) ? combinato con il valore di ciascuna regione di pooling.
Qualsiasi elemento di ingresso j-esimo Xin(j) contribuisce al calcolo di certi i-esimi elementi di uscita Xout(i). Tali indici degli elementi i-esimi Xout(i) "influenzati" da un ingresso che ricade all'interno di una finestra di pooling possono essere calcolati preliminarmente per l'attuazione del pooling (poich? i loro valori sono una regione di pooling) e i valori di ingresso sono "riutilizzati" o "ripiegati" in ciascun ciclo di calcolo.
Tale soluzione facilita la riduzione delle operazioni di caricamento degli ingressi, per esempio fino a visitarli solo una volta, fornendo una modalit? di elaborazione semplificata.
Come esemplificato nella figura 5, applicare tale procedimento 50 di realizzare un operatore di pooling "inverso" DF della implementazione del pooling a strisce pu? comprendere:
- come esemplificato nella parte a) della figura 5, applicare la finestra di pooling PW ai dati di ingresso Xin in finestre successive PW1, PW2, PW3, PW4, in cui ciascuna finestra ? separata dalla successiva da una distanza indiceelemento uguale alla dimensione di passo s, per esempio distanza di un elemento, e
- le rispettive finestre di dati sono "scansionate", in cui i valori compresi nella prima finestra PW1 sono accumulati simultaneamente in parti di memoria indicizzata successive B3(i) del buffer temporaneo di striscia B3, come esemplificato nelle parti b) a e) della figura 5 che illustrano possibili diagrammi temporali di valori memorizzati in un buffer di uscita B3 configurato per memorizzare quattro elementi B3(1),B3(2),B3(3),B3(4),
- un segnale di uscita Xout(i) ? fornito ogni volta che i dati che appartengono a una rispettiva finestra di pooling PW1, PW2, PW3, PW4 sono stati accumulati nel buffer di uscita B3, per esempio, completamente accumulati dopo una finalizzazione opzionale, calcolando l'operatore di pooling in modo concorrente con il caricamento dei dati come esemplificato nelle parti b) a e) della figura 5 come discusso nel seguito.
In particolare, nell'esempio considerato come esemplificato nelle parti b) a e) della figura 5, per esempio:
- durante un primo ciclo di clock, un primo valore A di un primo elemento dei dati di ingresso Xin all'interno di una prima finestra di pooling PW1 pu? essere caricato in un primo elemento B3(1) del buffer di uscita B3,
- in un successivo secondo ciclo di clock, un secondo elemento B dei dati di ingresso Xin all'interno della prima finestra di pooling PW1 pu? essere accumulato nel primo elemento B3(1), che ? aggiunto al primo valore A memorizzato nel primo elemento B3(1), e caricato in un secondo elemento B3(2) del buffer di uscita B3,
- in un successivo terzo ciclo di clock, un terzo elemento C dei dati di ingresso Xin all'interno della prima finestra di pooling PW1 pu? essere accumulato simultaneamente nel primo elemento B3(1), accumulato nel secondo elemento B3(2) e caricato in un terzo elemento B3(3) del buffer di uscita B3,
- in un successivo quarto ciclo di clock, un quarto elemento D dei dati di ingresso Xin all'interno della prima finestra di pooling PW1 pu? essere simultaneamente accumulato nel primo B3(1), secondo B3(2) e terzo elemento B3(3), mentre viene caricato in un quarto elemento B3(4) del buffer di uscita B3,
- nel successivo quinto ciclo di clock, un quinto elemento E dei dati di ingresso Xin all'interno della prima finestra di pooling PW1 pu? essere simultaneamente accumulato nel primo elemento B3(1), secondo elemento B3(2), terzo elemento B3(3) e un quarto elemento B3(4) del buffer di uscita B3,
- infine, in un sesto ciclo di clock, un sesto elemento F dei dati di ingresso Xin all'interno della prima finestra di pooling PW1 pu? essere simultaneamente accumulato nel primo elemento B3(1), nel secondo elemento B3(2), nel terzo elemento B3(3) e in un quarto elemento B3(4) del buffer di uscita B3, il primo elemento B3(1) essendo configurato per fornire ai circuiti di utilizzatore il risultato accumulato come un valore di uscita Xout(1).
Come esemplificato nella parte c) della figura 5, in un settimo ciclo di clock un secondo valore di uscita Xout(2) pu? essere fornito come risultato dell'accumulazione di dati all'interno della seconda finestra di pooling che viene completata nel secondo elemento del buffer di uscita B3(2).
Come esemplificato nella parte d) della figura 5, in un ottavo ciclo di clock un terzo valore di uscita Xout(3) pu? essere fornito come risultato dell'accumulazione di dati all'interno della seconda finestra di pooling che viene completata nel terzo elemento del buffer di uscita B3(3).
Come esemplificato nella parte e) della figura 5, in un nono ciclo di clock un quarto valore di uscita Xout(4) pu? essere fornito come risultato dell'accumulazione di dati all'interno della seconda finestra di pooling che viene completata nel quarto elemento del buffer di uscita B3(4).
Va notato che gli esempi discussi in precedenza sono puramente esemplificativi e non sono in alcun modo limitanti. Come detto, i valori numerici utilizzati sono unicamente a scopo di semplicit?, essendo d'altra parte inteso che qualsiasi dimensione di finestra di pooling, dimensione di passo e dimensione di ingresso/uscita pu? essere utilizzata in una o pi? forme di attuazione.
Come detto, in generale gli operatori di pooling condividono propriet? di combinazione con operatori di somma poich? sono commutativi e presentano un elemento di "assorbimento": se un elemento ? combinato con l'elemento di assorbimento, l'elemento non cambia.
In una o pi? forme di attuazione come esemplificate nella figura 6, un procedimento 50 per effettuare una elaborazione di pooling VF pu? comprendere:
- fornire dati di ingresso Xin comprendenti almeno una matrice Xin che presenta una dimensione di ingresso,
- fornire un un operatore di pooling PF che presenta un valore di elemento di assorbimento e un insieme di parametri di pooling c, s, p comprendenti dimensione di finestra di pooling, dimensione di passo di pooling e dimensione di riempimento di pooling, per esempio un operatore di pooling selezionato tra operatori di pooling noti ad esempio pooling massimo, pooling medio e pooling lineare,
- calcolare 500 una dimensione di buffer doc, dof, dop di un buffer di uscita B3 in funzione di detto insieme di parametri di pooling c, s, p, per esempio come risultato di effettuare un'elaborazione di inferenza di forma di uscita, come discussa in precedenza;
- fornire 502 almeno una un buffer di uscita B3 che presenta la dimensione di buffer calcolata doc, dof, dop, il buffer di uscita B3 presentando un numero di elementi di buffer B3(1), B3(2), B3(3), B3(4) che sono funzione della dimensione di buffer calcolata;
- inizializzare 502 gli elementi di buffer B3(1), B3(2), B3(3), B3(4) del buffer di uscita B3 per presentare il valore dell'elemento di assorbimento dell'operatore di pooling selezionato PF.
Per esempio:
- quando ? impiegato un operatore di pooling "massimo" PF per effettuare un pooling inverso VF, l'elemento di assorbimento pu? presentare un valore rispettivo, per esempio, e la normalizzazione pu? non essere effettuata,
- quando ? impiegato un operatore di pooling "medio" PF per effettuare un pooling inverso VF, l'elemento di assorbimento pu? presentare un rispettivo valore, per esempio, e la normalizzazione pu? comprendere dividere l'uscita Xout per la dimensione di ingresso della finestra di riempimento.
In una o pi? forme di attuazione, il procedimento 50 pu? inoltre comprendere:
- effettuare una selezione della regione di pooling 504 che pu? comprendere determinare, in funzione dei parametri di pooling c, s, quali elementi di ingresso influenzano quale elemento di uscita
In una o pi? forme di attuazione, effettuare una selezione di regione 504 pu? comprendere calcolare valori limite di campo, per esempio comprendenti un indice di inizio xstart e un indice di fine xend, in cui iniziare e terminare il calcolo un indice di elemento di uscita j-esimo xo, in cui gli elementi iniziale e finale sono determinati utilizzando le seguenti espressioni:
in cui xi ? l'indice dello i-esimo elemento della matrice di ingresso Xin.
In una o pi? forme di attuazione, il procedimento 50 pu? inoltre comprendere:
- applicare una combinazione (lineare) 506 dei rispettivi elementi B3(1), B3(2), B3(3), B3(4) del buffer di uscita B3 con tutti gli ingressi che lo influenzano per una rispettiva finestra di pooling PW;
- iterare l'effettuazione della selezione della regione di pooling 504 per tutti gli elementi della matrice di ingresso Xin e combinare 506 ripetutamente elementi di uscita con elementi di ingresso,
- opzionalmente 508, applicare un operatore di normalizzazione g,
- fornire 510 a un circuito di utilizzatore i risultati di uscita Xout memorizzati nel buffer di uscita B3.
Una o pi? forme di attuazione che inizializzano l'uscita facilitano la combinazione di un valore di uscita (esistente) con l'ingresso. Tale operazione pu? rivelarsi particolarmente vantaggiosa in un caso in cui si applica l'elaborazione di pooling che presenta una dimensione di riempimento "grande", per esempio quando la dimensione di riempimento ? maggiore della dimensione di finestra p > c. In tali casi, come citato, alcuni valori di uscita non dipendono dall'ingresso e possono non essere utilizzati.
In tale scenario come esemplificato nella figura 9, il procedimento 50 facilita evitare lo spreco di risorse di calcolo su valori di caricamento che ricadono in un intervallo vuoto nel confine di riempimento. Per esempio, il tempo di elaborazione di pooling pu? essere ridotto se ? rilevato un intervallo vuoto, favorendo una efficienza migliorata.
Una normalizzazione finale opzionale facilita fornire un procedimento flessibile e modificabile per qualsiasi funzione di pooling che ? possibile utilizzare in applicazioni differenti.
Le figure 7 a 9 comprendono diagrammi esemplificativi di principi sottostanti a effettuare una selezione di regione 504, determinare quali elementi di ingresso Xin(i) influenzano quale elemento di uscita Xout(j) in funzione dei parametri di pooling c, s dell'operatore di pooling PF utilizzato nel pooling inverso VF.
Il calcolo del j-esimo indice di uscita pu? comprendere scorrere attraverso tutti gli elementi indicizzati della matrice di ingresso Xin e selezionare quelli che presentano indici all'interno dei limiti di campo dell'intervallo calcolato, ed effettuare una combinazione (lineare) del valore di ingresso con i loro valori di uscita correnti.
Tale operazione pu? essere espressa come:
out(xo)=f(in(xi), out(xo))
In un primo scenario esemplificativo come esemplificato nella parte a) della figura 7, il parametro di pooling pu? non presentare alcun riempimento, per esempio, p=0, e la dimensione di passo uguale alla dimensione di finestra di pooling, per esempio, s=c. Come risultato, l'applicazione della elaborazione di pooling PF pu? comprendere calcolare la funzione di pooling selezionata (massimo, medio, ecc.) su elementi della matrice di ingresso Xin che ricadono all'interno di regioni di pooling non sovrapposte PW1, PW2. Tale intervallo pu? essere espresso come:
xi?[xo?s, (xo+1)?s-1]
Come risultato, le regioni di pooling 504 selezionate PW1, PW2 possono essere adiacenti tra di loro. Lo i-esimo elemento di ingresso nell'indice contribuisce solamente a un valore di elemento di indice del j-esimo indice di elemento di uscita. Per esempio, questo indice pu? essere espresso come: dove ? un ?ndice/coordinata di elemento di ingresso e ? un indice/coordinata di elemento di uscita.
Come esemplificato nella parte b) della figura 7, in tale scenario esemplificativo, nell'ipotesi di avere una dimensione di ingresso effettuare un pooling inverso VF pu? comprendere fornire 502 un buffer di uscita B3 che presenta una rispettiva dimensione di buffer di uscita che pu? essere calcolata come:
In un secondo scenario esemplificativo come esemplificato nella parte a) della figura 8, i parametri di pooling possono differire da quelli discussi rispetto alle parti a), b) della figura 7 per il fatto che la dimensione di passo pu? essere pi? piccola della dimensione della finestra di pooling, per esempio, s<c. Come risultato, applicare un'elaborazione di pooling PF pu? comprendere regioni sovrapposte OW. Di conseguenza, lo i-esimo elemento di ingresso nell'indice contribuisce al valore del j-esimo elemento di uscita nell'indice espresso come:
In altre parole, l'uscita "guarda all'indietro" in misura di un numero di elementi pari a "dimensione di pool" per trovare ingressi che contribuiscono a esso ma avanza solamente in misura di un numero di elementi pari a "passo" per ciascuna uscita, come esemplificato nella parte b) della figura 8.
In un terzo scenario esemplificativo come esemplificato nella parte a) della figura 9, i parametri di pooling possono differire da quelli discussi rispetto alle parti a), b) delle figure 7 e 8 per il fatto che la dimensione di passo pu? essere maggiore della dimensione della finestra di pooling, per esempio, s>c. Come risultato, applicare un'elaborazione di pooling PF pu? comprendere regioni vuote EW. Di conseguenza, lo i-esimo elemento di ingresso nell'indice
contribuisce al valore del j-esimo elemento di uscita nell'indice espresso come:
sebbene a volte l'intervallo pu? essere vuoto, portando alla presenza di regioni "disconnesse". Per esempio, se
allora lo i-esimo elemento di ingresso
nell'indice non contribuisce all'uscita nell'indice
In un caso pi? generale, comprendente una dimensione di riempimento non nulla, per esempio, p?0, un riempimento a sinistra pleft pu? contribuire a uno scorrimento per un i-esimo elemento di ingresso nell'indice mentre un riempimento a destra pright pu? essere implicitamente tenuto in conto dalla determinazione della dimensione di uscita 504, come discussa in precedenza. In tali scenari, degli intervalli possono essere bloccati all'indice iniziale, per esempio xstart = 0, e all'indice finale, per esempio, xend = (size-1).
Come citato, mentre sono discusse principalmente rispetto a matrici di ingresso che presentano una forma di matrice lineare, una o pi? forme di attuazione possono essere idonee per elaborare qualsiasi tipo di dati di ingresso, per esempio una matrice di immagine bidimensionale 1000.
La figura 10 ? un diagramma esemplificativo di una matrice di ingresso bidimensionale Sin i cui elementi o pixel possono essere elaborati come una matrice di elementi che presentano coordinate cartesiane Xin, Yin e i cui elementi possono essere indicati come xi, yi. Di conseguenza, l'elaborazione di pooling inverso VF pu? essere applicata agli elementi sia nel piano orizzontale che verticale, portando a rispettivi indici di valori di uscita xo, yo.
La figura 11 ? un ulteriore diagramma esemplificativo di principi sottostanti a una o pi? forme di attuazione, in cui un operatore di pooling inverso bidimensionale VF' pu? essere applicato per elaborare matrici di ingresso Xin, Yin, in cui muovendo la finestra di pooling PW? dati differenti possono influenzare rispettivi valori di uscita nell'uscita Sout.
In una o pi? forme di attuazione come esemplificate nella figura 11, una matrice di uscita bidimensionale Sout pu? essere ottenuta come risultato dell'applicazione di una elaborazione di pooling inverso VF' all'immagine Sin.
La figura 12 ? esemplificativa delle operazioni di un procedimento 50' per effettuare un pooling inverso bidimensionale VF', comprendente:
- fornire una matrice di ingresso Sin comprendente almeno una prima, per esempio, orizzontale, matrice di coordinate Xin, che presenta una prima dimensione di ingresso Lx e una seconda, per esempio, verticale, matrice di coordinate Yin che presenta una seconda dimensione di ingresso Ly;
- fornire un operatore di pooling PF che presenta un valore di elemento di assorbimento e un insieme di parametri di pooling c, s, p comprendenti dimensione di finestra di pooling, dimensione di passo di pooling e dimensione di riempimento di pooling, per esempio un operatore di pooling selezionato tra operatori di pooling noti ad esempio di pooling massimo, pooling medio e pooling lineare;
- calcolare 500' un insieme di dimensioni di buffer doc, dof, dop di un buffer di uscita B3 in funzione di detto insieme di parametri di pooling c, s, p, per esempio come risultato di effettuare una elaborazione di inferenza di forma di uscita, come discussa in precedenza; in particolare, per una immagine bidimensionale calcolare una dimensione di buffer pu? comprendere calcolare una prima dimensione orizzontale di buffer e una seconda dimensione verticale di buffer, il buffer essendo rappresentabile come una matrice di elementi a colonna e a riga.
In una o pi? forme di attuazione, il procedimento 50' pu? inoltre comprendere:
- fornire 502 almeno un buffer di uscita B3 che presenta la dimensione/le dimensioni di buffer calcolate doc, dof, dop, il buffer di uscita B3 presentando un numero di elementi di buffer B3(i,j) che ? funzione della dimensione di buffer calcolata;
- inizializzare 504 gli elementi di buffer B3(i,j) del buffer di uscita B3 per presentare il valore dell'elemento di assorbimento dell'operatore di pool in selezionato PF; - effettuare una selezione della regione di pooling 504' che pu? comprendere determinare, in funzione dei parametri di pooling c, s, quali indici di elemento di ingresso Xin(i), Yin(i) influenzano quale elemento del buffer di uscita B3(i,j).
In una o pi? forme di attuazione, effettuare una selezione di regione 504' pu? comprendere calcolare valori limite di campo, cio? un insieme di indici di inizio xstart, ystart e un insieme di indici di fine xend, yend configurati per innescare l'inizio la fine del calcolo di un j-esimo valore di elemento di uscita nell'indice xo, in cui gli indici di inizio e fine sono determinati utilizzando le seguenti espressioni:
in cui xi ? lo i-esimo elemento di indice/coordinata della prima matrice di ingresso Xin e xi ? lo i-esimo elemento di indice/coordinata della seconda matrice di ingresso Yin.
In una o pi? forme di attuazione, il procedimento 50 pu? inoltre comprendere:
- applicare una combinazione (lineare) 506' dei rispettivi elementi B3(1), B3(2), B3(3), B3(4) del buffer di uscita B3 con tutti gli ingressi che lo influenzano per una rispettiva finestra di pooling PW; in particolare, tale combinazione pu? essere espressa come:
- iterare l'effettuazione della selezione di regione di pooling 504' per tutti gli elementi della matrice di ingresso Xin e combinare ripetutamente 506' gli elementi di uscita con elementi di ingresso,
- opzionalmente 508, applicare un operatore di normalizzazione g,
- fornire 510 a un circuito di utilizzatore il risultato memorizzato nel buffer di uscita B3.
In una o pi? forme di attuazione come esemplificate nella figura 13, l'elaborazione di pooling inverso VF pu? essere applicata in una modalit? di "flusso" ("streaming"), in cui l'elaborazione di pooling inverso VF pu? essere applicata "al volo" ai dati come in una logica di elaborazione "arrivato prima servito prima".
Per esempio, come esemplificato nella figura 13, i dati possono essere impacchettati in modo da essere strutturati come segue:
- una prima riga "frontale" SL pu? essere aggiunta a una prima estremit?, per esempio, estremit? inferiore dell'ingresso e pu? essere utilizzata per memorizzare valori di inizializzazione dell'operatore di pooling selezionato PF;
- una seconda riga "frontale" SU pu? essere aggiunta a una seconda estremit?, per esempio, estremit? superiore, opposta alla prima estremit?, e utilizzata per memorizzare valori finali (normalizzati) che possono essere ottenuti, per esempio, dopo una normalizzazione opzionale;
- i valori della matrice di uscita Xout possono essere interposti tra la prima e la seconda estremit? della struttura dati.
Utilizzando tale struttura dati, pu? essere ottenuta una matrice di streaming S0, facilitando il calcolo sequenziale delle operazioni di pooling.
Per esempio, una volta che l'inizializzazione viene effettuata sulla riga inferiore SL il pooling pu? essere calcolato nelle righe centrali, utilizzando come dimensione per il buffer di uscita B3 come discusso in precedenza che pu? essere dedotto utilizzando l'intervallo di pool. Nell'esempio considerato, una normalizzazione finale opzionale pu? essere effettuata e memorizzata utilizzando la fila superiore SU.
Una o pi? forme di attuazione possono cos? facilitare ottenere un comportamento di "fronte di fiamma", in cui l'ingresso Sin ? progressivamente consumato dalla cima al fondo.
In una o pi? forme di attuazione, ulteriori operazioni aggiuntive/opzionali (per esempio, non linearit?, quantizzazione) possono essere fuse con la fase di normalizzazione, migliorando l'efficienza.
In una o pi? forme di attuazione, i valori normalizzati possono essere memorizzati in un secondo buffer o striscia di uscita per elaborare operazioni in pipeline, per esempio strati di una convoluzione successiva, contribuendo a risparmiare memoria.
In una o pi? forme di attuazione, i valori limite di campo possono comprendere inizializzare i valori di indice/coordinata della striscia SL a un valore k, per esempio x=k.
Per esempio,
in una o pi? forme di attuazione, mentre x soddisfa una data condizione, per esempio, x < s, esso pu? essere incrementato e i valori limite di intervallo xstart, xend calcolati (si veda, per esempio, figura 10). Per esempio, tali valori limite di intervallo possono essere vantaggiosamente calcolati come in cui i valori che contribuiscono all'uscita possono modificare i valori solo dopo che ? stato incrementato s volte.
Una o pi? forme di attuazione possono facilitare una implementazione veloce, utilizzando stadi di incremento, confronto e azzeramento.
Per ciascun valore in i suoi indici di posizione di accesso in memoria possono essere generati e l'uscita calcolata, iterando il calcolo incrementando nuovamente il valore finch? la condizione impostata ? soddisfatta.
Una o pi? forme di attuazione possono riferirsi a una corrispondente implementazione hardware, in cui:
una operazione di verifica che x soddisfa una data condizione, per esempio, x < s, pu? comprendere fornire un registro configurato per memorizzare un valore di soglia ed effettuare un confronto (veloce) tra il valore di x e la soglia memorizzata;
iterare il calcolo pu? comprendere fornire un semplice azzeramento di registro,
- gli accessi in memoria possono essere risolti da un componente DMA che converte coordinate in indirizzi di memoria.
Una o pi? forme di attuazione, vantaggiosamente, possono presentare un consumo di memoria confrontabile con l'impronta di consumo di memoria trovata utilizzando l'approccio ingenuo, in particolare quando si utilizza l'elaborazione semplificata come esemplificata nella figura 13 in cui l'uscita ? aggiornata al volo.
Una o pi? forme di attuazione possono presentare un'efficienza confrontabile con quella dell'approccio a strisce, in particolare quando la dimensione di passo s ? pi? piccola della dimensione di pool c.
La tabella I seguente riassume i risultati sperimentali indicativi delle prestazioni vantaggiose dell'applicazione del procedimento implementato su elaboratore come qui discusso. In particolare, gli esperimenti sono effettuati utilizzando i seguenti parametri:
- dimensione di riempimento nulla, p=0;
- dimensione di finestra di pooling fissa c=5,
- dimensione di passo variabile s=5 o s=2,
- immagine di ingresso Sin che presenta una dimensione Lx=25 e Ly=25.
Nell'esperimento considerato, il pooling ? stato effettuato seguendo uno strato Conv2D utilizzando un filtro 3x3, 8 canali di ingresso e 8 canali di uscita, e riempimento = 1.
Come illustrato nella tabella I, utilizzando un approccio come qui esemplificato la complessit? pu? essere ridotta rispetto al pooling ingenuo PF, e il consumo di memoria pu? essere ridotto rispetto al pooling a strisce SF.
Tabella I: sintesi degli esperimenti
Una o pi? forme di attuazione possono essere idonee per essere utilizzate anche per migliorare l'effettuazione delle operazioni di convoluzione.
Applicare l'operatore di convoluzione CF pu? essere visto come applicare una forma "pesata" di pooling.
In particolare, il pooling medio senza regioni di pooling parziale ? una convoluzione in cui i pesi presentano tutti uno stesso valore inversamente proporzionale al valore di dimensione della finestra, per esempio, peso w0=w1=w2=1/c.
Per esempio, una convoluzione trasposta con passo=1 pu? essere equivalente a una convoluzione, in cui essa ? implementata pesando l'ingresso con il filtro e accumulandolo nell'uscita.
In una o pi? forme di attuazione, utilizzare il procedimento 50 per applicare un operatore di convoluzione CF come esemplificato nella figura 14 pu? comprendere moltiplicare un valore di ingresso per rispettivi coefficienti di peso (di filtro)
Come qui esemplificato, applicare l'operatore di convoluzione CF pu? comprendere:
accedere ai coefficienti di peso ?2?,?1?,?0??, per esempio, in ordine inverso, utilizzando un indice relativo di uscita che pu? essere espresso come:
dove
? l'indice del j-esimo elemento di uscita, e
? l'indice dell'elemento di ingresso considerato.
Se il j-esimo elemento di uscita nell'indice xo ? all'esterno di un intervallo di indici di uscita validi, un indice relativo di uscita calcolato xr pu? essere scartato.
Nel caso di dimensione di passo s > 1, l'indice relativo di uscita pu? essere espresso come:
In una o pi? forme di attuazione, possono essere utilizzati pi? indici relativi di uscita, per esempio un primo indice relativo di uscita xr e un secondo indice relativo di uscita yr possono essere calcolati e utilizzati per accedere a corrispondenti coefficienti di filtro (bidimensionali).
Per esempio, come esemplificato nelle figure 15 e 16, per applicare la convoluzione di un filtro W avente pesi
per esempio W=(?0,?1,?2)=(1,2,3), corrispondente a
una dimensione di finestra di pooling c=3, si effettua la convoluzion
esempio,
l'applicazione della convoluzione prevedendo una dimensione di passo s=1.
Come esemplificato nelle figure 15 e 16, effettuando la convoluzione di Xin, W pu? dar luogo a un vettore di uscita
Per esempio, come esemplificato nella figura 15:
il primo valore di ingresso influenza le uscite con indici con il primo valore di ingresso moltiplicato per il primo valore di peso
il secondo valore di ingresso influenza
il secondo valore di ingresso
contribuendo al primo valore di uscita quando ? moltiplicato per il secondo valore di peso?1?e contribuendo al secondo valore di uscita quando ? moltiplicato per il primo peso
il terzo valore di ingresso influenza gli elementi di uscita con il contributo alla prima e seconda uscita gi? calcolato, cosicch? adesso presenta il valore finale e pu? essere emesso dal buffer,
<i>l quarto ingresso pu? influenzare gli indici ma l'uscita presenta dimensione c=3 cosicch? solo sono influenzati mentre ? scartato; vi ? contributo rispettivamente solo per e cosicch? presenta il valore finale;
il quinto ingresso influenza solo fornendo il valore di uscita finale per
In una o pi? forme di attuazione, l'inversione dell'ordine nei coefficienti di filtro W pu? facilitare la velocizzazione del calcolo poich? gli indici di uscita inferiori sono i primi da visitare, e quindi quelli per cui il calcolo dell'uscita filtrata ? completato per primo.
Come esemplificato nella figura 16, applicare tale procedimento 50 per realizzare un operatore di convoluzione "inversa" CF della implementazione di pooling a strisce pu? comprendere:
- come esemplificato nella parte a) della figura 16, applicare la finestra di convoluzione CW ai dati di ingresso Xin in finestre successive CW1, CW2, CW3, in cui ciascuna finestra ? separata dalla successiva da una distanza indiceelemento uguale alla dimensione di passo s, per esempio distanza s=1, e
- le rispettive finestre di dati sono "scansionate", in cui i valori compresi nella prima finestra CW1 sono simultaneamente accumulati in posizioni di memoria indicizzate successive B4(i) del buffer temporaneo B4, come esemplificato nelle parti b) a d) della figura 16 che illustrano possibili diagrammi temporali di valori memorizzati in un buffer di uscita B3 configurato per memorizzare quattro elementi B4(1), B4(2), B4(3),
- un segnale di uscita Xout(i) ? fornito ogni volta che i dati che appartengono a una rispettiva finestra di convoluzione CW1, CW2, CW3, CW4 sono stati accumulati nel buffer di uscita B4, per esempio, completamente accumulati dopo una finalizzazione opzionale, calcolando l'operatore di pooling in modo concorrente con il caricamento dei dati come esemplificato nelle parti b) a d) della figura 16 e come discusso nel seguito.
In particolare, nell'esempio considerato come esemplificato nelle parti b) a d) nella figura 16, per esempio:
- durante un primo ciclo di clock, un primo valore Xin(0) di un primo elemento dei dati di ingresso Xin all'interno di una prima finestra CW1 pu? essere caricato moltiplicato per un primo peso w0 in un primo elemento B4(1) del buffer di uscita B4,
- in un successivo secondo ciclo di clock, un secondo elemento Xin(1) dei dati di ingresso Xin all'interno della prima finestra CW1 pu? essere accumulato, pesato con w2, nel primo elemento B4(1), che ? aggiunto al primo valore Xin(0)w0 memorizzato nel primo elemento B4(1), e caricato, pesato con w1, in un secondo elemento B4(2) del buffer di uscita B4, - in un successivo terzo ciclo di clock, un terzo elemento Xin(2) dei dati di ingresso Xin all'interno della prima finestra CW1 pu? essere simultaneamente accumulato, pesato con w2, nel primo elemento B4(1), accumulato, pesato con w1, nel secondo elemento B4(2) e caricato, pesato con w0, in un terzo elemento B4(3) del buffer di uscita B4, - in un successivo quarto ciclo di clock, un quarto elemento Xin(3) dei dati di ingresso Xin all'interno della prima finestra CW1 pu? essere simultaneamente accumulato, pesato con w1, nel secondo elemento B4(2) e, pesato con w0, nel terzo elemento B4(3) del buffer di uscita B4,
- in un successivo quinto ciclo di clock, un quinto elemento Xin(4) dei dati di ingresso Xin all'interno della prima finestra CW1 pu? essere accumulato, pesato con w2, nel terzo elemento B4(3) del buffer di uscita B4.
Come esemplificato nella parte a), b) e c) della figura 16, fornire il risultato della convoluzione pu? impiegare un numero possibilmente ridotto di cicli di clock.
Va notato, nuovamente, che gli esempi discussi in precedenza sono puramente esemplificativi e non sono in alcun modo limitanti. Come citato, i valori numerici utilizzati sono unicamente a scopo di semplicit?, essendo d'altra parte compreso che qualsiasi dimensione di finestra di pool, dimensione di passo e dimensione di ingresso/uscita pu? essere utilizzata in una o pi? forme di attuazione.
Come qui esemplificato, un procedimento implementato su elaboratore (per esempio, 50), comprende:
fornire una matrice di ingresso (per esempio, Sin; Xin) che presenta una dimensione di matrice e comprendente un insieme di elementi indicizzati ordinati che presentano rispettivi indici di elemento,
fornire almeno uno di un operatore di pooling (per esempio, PF) che presenta un valore di elemento di assorbimento e un insieme di parametri di pooling (per esempio, c, s) comprendente almeno una di una dimensione di finestra di pooling (per esempio, c), una dimensione di passo di pooling (per esempio, s) e una dimensione di riempimento di pooling (per esempio, pleft, pright), l'operatore di pooling (per esempio, PF, VF; VF?) essendo selezionato all'interno di un insieme di operatori di pooling,
applicare detto operatore di pooling a detta matrice di ingresso mediante:
- effettuare una elaborazione di inferenza di forma di uscita comprendente calcolare (per esempio, 500) una dimensione di buffer di uscita di un buffer di uscita (per esempio, B3) in funzione di detto insieme di parametri di pooling,
- fornire (per esempio, 502; 502') almeno un buffer di uscita (per esempio, B3) che presenta una dimensione di buffer uguale alla dimensione calcolata del buffer di uscita e assegnare un valore iniziare agli elementi di buffer (per esempio, B3(1), B3(2), B3(3), B3(4)) del buffer di uscita, il valore iniziale uguale a detto elemento di assorbimento dell'operatore di pooling selezionato (per esempio, PF), - effettuare una selezione di regione di pooling (per esempio, 504) comprendente determinare, in funzione dei parametri di pooling, quali elementi di ingresso della matrice di ingresso (per esempio, Xin) influenzano quale elemento di uscita del buffer di uscita (per esempio, B3, Xout),
- calcolare una combinazione (per esempio, 506) dei rispettivi elementi del buffer di uscita (per esempio, B3) con gli elementi di ingresso che lo influenzano per una rispettiva finestra di pooling (per esempio, PW);
- iterare effettuare una selezione di regione di pooling (per esempio, 504) e calcolare una combinazione lineare (per esempio, 506) per tutti gli elementi della matrice di ingresso,
- fornire (per esempio, 510) a un circuito di utilizzatore il risultato di uscita calcolato (per esempio, Xout) memorizzato nel buffer di uscita.
Come qui esemplificato, detto insieme di operatori di pooling comprende almeno uno di:
- un operatore di pooling massimo, che presenta un elemento di assorbimento che tende verso un estremo inferiore minimo di un intervallo di rappresentazione numerica, e
- un operatore di pooling medio, che presenta un elemento di assorbimento e un fattore di normalizzazione uguale alla dimensione della matrice di ingresso.
Come qui esemplificato, il procedimento comprende applicare (per esempio, 508) un operatore di normalizzazione (per esempio, g) a detto risultato memorizzato nel buffer di uscita.
Come qui esemplificato, effettuare la selezione di regione (per esempio, 504) comprende calcolare i valori limite di campo comprendenti un indice di inizio e un indice di fine, configurati per iniziare e terminare il calcolo di un valore di elemento di uscita, in cui l'indice di inizio xstart e l'indice di fine xend sono espressi come:
in cui xi ? lo i-esimo indice della matrice di ingresso. Come qui esemplificato, effettuare una elaborazione di inferenza di forma di uscita comprende calcolare (per esempio, 500) una dimensione di buffer di uscita di un buffer di uscita in funzione di detto insieme di parametri di pooling, in cui detto calcolo ? selezionabile tra almeno uno di:
- una prima dimensione del buffer di uscita espressa come:
- una seconda dimensione di buffer di uscita espressa come:
- una terza dimensione di buffer di uscita espressa come:
Come qui esemplificato, fornire un operatore di pooling comprende:
applicare una elaborazione di rete neurale artificiale a detta matrice di ingresso, la rete neurale artificiale comprendendo almeno uno strato di elaborazione dati di pooling o di convoluzione.
Come qui esemplificato, un sistema micro-controllore comprende:
- un blocco circuitale di memoria, comprendente parti di memoria configurate per essere allocate o de-allocate per ospitare dei buffer di dati, e
- almeno un circuito di elaborazione accoppiato a detto blocco circuitale di memoria e configurato per effettuare attuazioni del procedimento implementato su elaboratore.
Come qui esemplificato, un prodotto informatico comprende parti di codice software che, quando eseguite in almeno un circuito di elaborazione, configurano tale almeno un circuito di elaborazione per effettuare attuazioni del procedimento implementato su elaboratore (per esempio, 50).
D'altra parte si comprender? che le varie opzioni individuali di implementazione esemplificate in tutte le figure che accompagnano questa descrizione non sono necessariamente intese per essere adottate nelle stesse combinazioni esemplificate nelle figure. Una o pi? forme di attuazione possono cos? adottare queste opzioni (d'altronde non imperative) individualmente e/o in combinazioni differenti rispetto alla combinazione esemplificata nelle figure allegate.
Senza pregiudizio per i principi sottostanti, i dettagli e le forme di attuazione possono variare, anche significativamente, rispetto a ci? che ? stato descritto solo a titolo di esempio, senza allontanarsi dall'estensione di protezione. L'estensione di protezione ? definita nelle rivendicazioni allegate.

Claims (8)

  1. RIVENDICAZIONI 1. Procedimento implementato su elaboratore (50), comprendente: fornire una matrice di ingresso (Sin; Xin) che presenta una dimensione di matrice e comprendente un insieme di elementi indicizzati ordinati che presentano rispettivi indici di elemento, fornire almeno uno di un operatore di pooling (PF) che presenta un valore di elemento di assorbimento e un insieme di parametri di pooling (c, s) comprendente almeno una di una dimensione di finestra di pooling (c), una dimensione di passo di pooling (s) e una dimensione di riempimento di pooling (pleft, pright), l'operatore di pooling (PF, VF; VF?) essendo selezionato all'interno di un insieme di operatori di pooling, applicare detto operatore di pooling (PF, VF; VF?) a detta matrice di ingresso (Sin; Xin) mediante: - effettuare una elaborazione di inferenza di forma di uscita comprendente calcolare (501) una dimensione di buffer di uscita di un buffer di uscita (B3) in funzione di detto insieme di parametri di pooling (c, s), - fornire (502; 502?) almeno un buffer di uscita (B3) che presenta una dimensione di buffer uguale alla dimensione calcolata di buffer di uscita e assegnare un valore iniziale agli elementi di buffer (B3(1), B3(2), B3(3), B3(4)) del buffer di uscita (B3), il valore iniziale uguale a detto elemento di assorbimento dell'operatore di pooling selezionato (PF), - effettuare una selezione di regione di pooling (504) comprendente determinare, in funzione dei parametri di pooling (c, s), quali elementi di ingresso della matrice di ingresso (Xin) influenzano quale elemento di uscita del buffer di uscita (B3, Xout), - calcolare una combinazione (506) dei rispettivi elementi del buffer di uscita (B3) con gli elementi di ingresso che lo influenzano per una rispettiva finestra di pooling (PW); - iterare effettuare una selezione di regione di pooling (504) e calcolare una combinazione lineare (506) per tutti gli elementi della matrice di ingresso (Xin), - fornire (510) a un circuito di utilizzatore il risultato di uscita calcolato (Xout) memorizzato nel buffer di uscita (B3). 2. Il procedimento secondo la rivendicazione 1, in cui detto insieme di operatori di pooling comprende almeno uno di: un operatore di pooling massimo, che presenta un elemento di assorbimento che tende verso un estremo inferiore minimo di un intervallo di rappresentazione numerica, e un operatore di pooling medio, che presenta un elemento di assorbimento e un fattore di normalizzazione uguale alla dimensione della matrice di ingresso. 3. Il procedimento secondo una qualsiasi delle rivendicazioni 1 o 2, comprendente applicare (508) un operatore di normalizzazione (g) a detto risultato (Xout) memorizzato nel buffer di uscita (B3). 4. Il procedimento secondo una qualsiasi delle precedenti rivendicazioni, in cui effettuare una selezione di regione (504) comprende calcolare valori limite di campo comprendenti un indice di inizio e un indice di fine, configurati per iniziare e terminare il calcolo di un valore di indice di uscita, in cui l'indice di inizio xstart e l'indice di fine xend sono espressi come:
  2. in cui xi ? lo i-esimo indice della matrice di ingresso (Xin, Sin). 5. Il procedimento secondo una qualsiasi delle precedenti rivendicazioni, in cui effettuare una elaborazione di inferenza di forma di uscita comprende calcolare (500) una dimensione di buffer di uscita di un buffer di uscita (B3) in funzione di detto insieme di parametri di pooling (c, s) in cui detto calcolo (500) ? selezionabile tra almeno uno di: - una prima dimensione di buffer di uscita espressa come:
  3. - una seconda dimensione di buffer di uscita
  4. espressa come:
  5. - una terza dimensione di buffer di uscita quando la dimensione di riempimento ? nulla, espressa come:
  6. 6. Il procedimento secondo una qualsiasi delle precedenti rivendicazioni, in cui fornire un operatore di pooling comprende: applicare una elaborazione di rete neurale artificiale a detta matrice di ingresso, la rete neurale artificiale comprendendo almeno uno di uno strato di elaborazione dati di pooling e/o uno strato di elaborazione di dati di convoluzione.
  7. 7. Sistema micro-controllore, comprendente: - un blocco circuitale di memoria, comprendente parti di memoria configurate per essere allocate o de-allocate per ospitare dei buffer di dati, e - almeno un circuito di elaborazione accoppiato a detto blocco circuitale di memoria e configurato per effettuare attuazioni del procedimento implementato su elaboratore secondo una qualsiasi delle rivendicazioni 1 a 6.
  8. 8. Prodotto informatico comprendente parti di codice software che, quando eseguite in almeno un circuito di elaborazione, configurano tale almeno un circuito di elaborazione per effettuare attuazioni del procedimento implementato su elaboratore (50) secondo una qualsiasi delle rivendicazioni 1 a 6.
IT102020000016909A 2020-07-13 2020-07-13 Procedimento di elaborazione dati implementato su elaboratore, sistema micro-controllore e prodotto informatico corrispondenti IT202000016909A1 (it)

Priority Applications (4)

Application Number Priority Date Filing Date Title
IT102020000016909A IT202000016909A1 (it) 2020-07-13 2020-07-13 Procedimento di elaborazione dati implementato su elaboratore, sistema micro-controllore e prodotto informatico corrispondenti
EP21182103.8A EP3940541A1 (en) 2020-07-13 2021-06-28 A computer-implemented data processing method, micro-controller system and computer program product
US17/369,417 US20220012569A1 (en) 2020-07-13 2021-07-07 Computer-implemented data processing method, micro-controller system and computer program product
CN202110787362.XA CN113935478A (zh) 2020-07-13 2021-07-12 数据处理方法、微控制器系统和计算机程序产品

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
IT102020000016909A IT202000016909A1 (it) 2020-07-13 2020-07-13 Procedimento di elaborazione dati implementato su elaboratore, sistema micro-controllore e prodotto informatico corrispondenti

Publications (1)

Publication Number Publication Date
IT202000016909A1 true IT202000016909A1 (it) 2022-01-13

Family

ID=72644754

Family Applications (1)

Application Number Title Priority Date Filing Date
IT102020000016909A IT202000016909A1 (it) 2020-07-13 2020-07-13 Procedimento di elaborazione dati implementato su elaboratore, sistema micro-controllore e prodotto informatico corrispondenti

Country Status (4)

Country Link
US (1) US20220012569A1 (it)
EP (1) EP3940541A1 (it)
CN (1) CN113935478A (it)
IT (1) IT202000016909A1 (it)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2023041348A (ja) * 2021-09-13 2023-03-24 トヨタ自動車株式会社 情報処理装置
CN115841140B (zh) * 2022-04-20 2023-08-11 北京爱芯科技有限公司 一种反最大池化运算方法、装置、电子设备及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018103736A1 (en) * 2016-12-09 2018-06-14 Beijing Horizon Information Technology Co., Ltd. Systems and methods for data management
US20200090023A1 (en) * 2018-09-14 2020-03-19 Huawei Technologies Co., Ltd. System and method for cascaded max pooling in neural networks
US20200090046A1 (en) * 2018-09-14 2020-03-19 Huawei Technologies Co., Ltd. System and method for cascaded dynamic max pooling in neural networks

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
IT201900012609A1 (it) 2019-07-22 2021-01-22 St Microelectronics Srl Procedimento automatico di gestione della memoria, unità microcontrollore e prodotto informatico corrispondenti

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018103736A1 (en) * 2016-12-09 2018-06-14 Beijing Horizon Information Technology Co., Ltd. Systems and methods for data management
US20200090023A1 (en) * 2018-09-14 2020-03-19 Huawei Technologies Co., Ltd. System and method for cascaded max pooling in neural networks
US20200090046A1 (en) * 2018-09-14 2020-03-19 Huawei Technologies Co., Ltd. System and method for cascaded dynamic max pooling in neural networks

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
TIANSHI CHEN ET AL: "DianNao: A Small-Footprint High-Throughput Accelerator for Ubiquitous Machine-Learning", 5 March 2019 (2019-03-05), XP055572858, Retrieved from the Internet <URL:http://novel.ict.ac.cn/ychen/pdf/DianNao.pdf> [retrieved on 20190321], DOI: 10.1145/http://dx.doi.org/10.1145/2541940.2541967 *

Also Published As

Publication number Publication date
CN113935478A (zh) 2022-01-14
US20220012569A1 (en) 2022-01-13
EP3940541A1 (en) 2022-01-19

Similar Documents

Publication Publication Date Title
JP6983154B2 (ja) 計算グラフの処理
US20200151088A1 (en) Systems and methods for configuring programmable logic devices for deep learning networks
JP5249969B2 (ja) 知識ベースの選択的な視覚分析のための人工視覚システムおよび方法
Escande et al. Hierarchical quadratic programming: Fast online humanoid-robot motion generation
IT202000016909A1 (it) Procedimento di elaborazione dati implementato su elaboratore, sistema micro-controllore e prodotto informatico corrispondenti
KR20190068616A (ko) 신경 네트워크 명령어 세트 아키텍처
US11321607B2 (en) Machine learning network implemented by statically scheduled instructions, with compiler
US20210232897A1 (en) Device and method for calculating convolution in a convolutional neural network
CN112348163A (zh) 具有平衡求解器的深度神经网络
EP2774037A1 (en) Method and system for workitem synchronization
WO2013181412A1 (en) Method and system for synchronization of workitems with divergent control flow
Chrétien et al. GPU robot motion planning using semi-infinite nonlinear programming
US20200218969A1 (en) Scheduling heterogenous execution on heterogeneous hardware
JP7492555B2 (ja) 複数の入力データセットのための処理
WO2020218314A1 (ja) 特徴ベクトルを生成するシステム
US11461142B2 (en) Automatic memory management method, corresponding micro-controller unit and computer program product
US20200117978A1 (en) Systems and methods for efficiently mapping neural networks to programmable logic devices
EP3907679B1 (en) Enhanced robot fleet navigation and sequencing
US20190050514A1 (en) Fault injection using hybrid simulation model
JP7265965B2 (ja) 機械学習装置および機械学習方法
JP2020184341A (ja) 機械学習システム、並びに、機械学習システムを構成する方法、コンピュータプログラム及び装置
CN101523381A (zh) 具有分层处理器组织的多处理器架构
RU2530270C2 (ru) Виртуальная потоковая вычислительная система, основанная на информационной модели искусственной нейросети и нейрона
US20210110234A1 (en) Method and system for executing neural network
KR20220116745A (ko) 뉴럴 네트워크 기반 작업 계획 생성 방법 및 장치