DE202016107476U1 - Stapel-Verarbeitung in einem neuronalen Netzwerkprozessor - Google Patents

Stapel-Verarbeitung in einem neuronalen Netzwerkprozessor Download PDF

Info

Publication number
DE202016107476U1
DE202016107476U1 DE202016107476.2U DE202016107476U DE202016107476U1 DE 202016107476 U1 DE202016107476 U1 DE 202016107476U1 DE 202016107476 U DE202016107476 U DE 202016107476U DE 202016107476 U1 DE202016107476 U1 DE 202016107476U1
Authority
DE
Germany
Prior art keywords
inputs
neural network
layer
input
weight
Prior art date
Legal status (The legal status 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 status listed.)
Active
Application number
DE202016107476.2U
Other languages
English (en)
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
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 Google LLC filed Critical Google LLC
Publication of DE202016107476U1 publication Critical patent/DE202016107476U1/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8046Systolic arrays
    • 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/048Activation functions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N5/00Computing arrangements using knowledge-based models
    • G06N5/04Inference or reasoning models
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Mathematical Physics (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Neurology (AREA)
  • Computer Hardware Design (AREA)
  • Image Analysis (AREA)
  • Design And Manufacture Of Integrated Circuits (AREA)
  • Complex Calculations (AREA)
  • Image Processing (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

Ein System zum Erzeugen einer entsprechenden neuronalen Netzwerkausgabe für jede der Vielzahl von Eingaben, wobei das Erzeugen die Verarbeitung jeder Eingabe durch jede Vielzahl von neuronalen Netzwerkschichten umfasst, um die entsprechende neuronale Netzwerkausgabe für die Eingabe zu erzeugen, wobei die neuronalen Netzwerkschichten in einer ausgerichteten Graphenstruktur angeordnet sind und wobei jede neuronale Netzwerkschicht eine entsprechende Stapelgröße aufweist, wobei das System umfasst: einen oder mehrere Computer; und ein computerlesbares Medium, das mit einem oder mehreren Comptern gekoppelt ist und darauf gespeicherte Anweisungen beinhaltet, die, wenn sie durch den einen oder mehrere Computer ausgeführt werden bewirken, dass der eine oder die mehreren Computer für die Operationen jeder neuronalen Netzwerkschicht folgendes umfasst: Empfangen einer Vielzahl von Eingaben, die auf der neuronalen Netzwerkschicht zu verarbeiten sind; Bilden eines oder mehrerer Eingabestapel aus der Vielzahl von Eingaben, wobei jeder Stapel eine Anzahl von Eingaben aufweist, die gleich der entsprechenden Stapelgröße für die neuronale Netzwerkschicht sind; Auswählen einer Anzahl einer oder mehrerer Stapel aus den zu verarbeiteten Eingaben, wobei eine Zählung der Eingaben in der Anzahl einer oder mehrerer Stapel größer, kleiner oder gleich zu der entsprechenden zugeordneten Stapelgröße einer nachfolgenden Schicht in der ausgerichteten Graphstruktur ist; und; Verarbeiten der Anzahl einer oder mehrerer Eingabestapel, um die entsprechende neuronale Netzwerkschichtausgabe zu erzeugen.

Description

  • HINTERGRUND
  • Diese Patentschrift bezieht sich auf die Datenverarbeitung neuronaler Netzwerk-Inferenzen in Hardware.
  • Neuronale Netzwerke sind Maschinenlernprogramme, die eine oder mehrere Schichten von Neuronen verwenden, um eine Ausgabe, z. B. eine Klassifizierung für eine empfangene Eingabe zu erzeugen. Einige neuronale Netzwerke umfassen zusätzlich zu einer Außenschicht eine oder mehrere ausgeblendete Schichten. Die Ausgabe jeder ausgeblendeten Schicht wird als Eingabe zur nächsten Schicht im Netzwerk verwendet, z.B. die nächste ausgeblendete Schicht oder die Ausgangsschicht des Netzwerks. Jede Schicht des Netzwerks erzeugt in Übereinstimmung mit aktuellen Werten eines jeweiligen Satzes von Parametern eine Ausgabe von einer empfangenen Eingabe.
  • Ursprünglich berechnen einige neuronale Netzwerksysteme Inferenzen seriell. Das heißt, wenn Inferenzen für mehrere Eingaben berechnet werden, kann das neuronale Netzwerksystem jede Eingabe durch jede der Schichten des neuronalen Netzwerks verarbeiten, um die Ausgabe für die Eingabe zu erzeugen, bevor die nächste Eingabe verarbeitet wird.
  • KURZDARSTELLUNG
  • Im Allgemeinen beschreibt diese Spezifikation eine spezielle Hardware-Schaltung, die neuronale Netzwerkinferenzen berechnet.
  • Im Allgemeinen kann ein innovativer Aspekt des in dieser Spezifikation beschriebenen Gegenstandes in Verfahren implementiert werden, jeweils eine neuronale Netzwerkausgabe für jede einer Vielzahl von Eingaben umfassen, wobei das Erzeugen die Verarbeitung jeder Eingabe durch jede einer Vielzahl von neuronalen Netzwerkschichten umfasst, um die jeweilige neuronale Netzwerkausgabe für die Eingabe zu erzeugen, wobei die neuronalen Netzwerkschichten in einer Sequenz angeordnet sind und wobei jede neuronale Netzwerkschicht eine jeweilige Stapelgröße aufweist, wobei das Verfahren für jede der neuronalen Netzwerkschichten umfasst: empfangen einer Vielzahl von Eingaben, die auf der neuronalen Netzwerkschicht zu verarbeiten sind; bilden eines oder mehrerer Eingabesignale von der Vielzahl von Eingaben, wobei jeder Stapel eine Anzahl von Eingaben bis zu der jeweiligen Stapelgröße für die neuronale Netzwerkschicht aufweist; auswählen einer Reihe von einem oder mehreren Stapeln der zu verarbeitenden Eingaben, wobei eine Zählung der Eingaben in der Anzahl der einen oder mehreren Stapeln größer oder gleich der jeweils zugeordneten Stapelgröße einer nachfolgenden Schicht in der Sequenz ist; und verarbeiten der Anzahl von einem oder mehreren Stapeln von Eingaben, um die jeweilige neuronale Netzwerkschichtausgabe zu erzeugen.
  • Implementierungen können eines oder mehrere der folgenden Merkmale beinhalten. Die jeweilige Stapelgröße basiert auf mindestens einem Gewichtswiederverwendungswert, wobei der Gewichtswiederverwendungswert die Anzahl der benötigten Gewichtsdateneingaben für eine Berechnungszeit von Ergebnisdaten anzeigt, die für Gewichtsdateneingaben bei einer Matrixberechnungseinheit länger ist als die Speicherzeit der Gewichtsdateneingaben aus dem Speicher. Wobei der Gewichtswiederverwendungswert mindestens auf einem Taktwert des Speichers für die Gewichtsdateneingaben basiert. Jede Stapelgröße basiert mindestens auf dem Quotienten des Gewichtwiederverwendungswerts mit der Anzahl der Einzelfälle, in denen Gewichtsdateneingaben für die entsprechende Schicht wiederverwendet werden. Die Vielzahl von neuronalen Netzwerkschichten wird an einer Matrix-Recheneinheit verarbeitet, wobei das Verarbeiten mindestens eines Eingabestapels die Berechnung der angehäuften Werte für jede Eingabe umfasst, die die Matrix-Recheneinheit nutzen. Der Gewichtswiederverwendungswert basiert auf einer Anzahl von Arithmetikeinheiten innerhalb der Matrix-Recheneinheit. Jede Eingabe entspricht einer eindeutigen Bildquelle. Bilden eines Stapels aus einer oder mehreren Schichtausgaben zur Verarbeitung an der nachfolgenden Schicht. Erzeugen einer korrespondierenden Inferenz für jede Ausgabe.
  • Bestimmte Ausführungsformen des in dieser Spezifikation beschriebenen Gegenstands können so implementiert werden, dass sie einen oder mehrere der folgenden Vorteile verwirklichen. Die spezielle Hardware-Schaltung kann die Berechnung für ein neuronales Netzwerk mit mehreren Schichten durch Wiederverwendung von Gewichtseingaben für eine gegebene Schicht auf mehreren unabhängigen Eingaben effizient durchführen. Die Gewichtseingaben werden insbesondere mehrmals wiederverwendet, sodass eine Berechnungszeit der der Wiedergewinnung der Gewichtseingaben mehrfach größer ist als eine Abrufzeit des Zugriffs auf neue Gewichtseingabe aus dem Speicher, wodurch der Durchsatz in der Schaltung maximiert und ein Abwürgen der Schaltung vermieden wird. Die Schaltung kann die Berechnung effizient durchführen, selbst wenn Gewichtseingaben in jeder Schicht unterschiedlich oft wiederverwendet werden.
  • Die Details einer oder mehrerer Ausführungen eines Gegenstands dieser Spezifikation sind in den begleiteten Bildern und der Beschreibung unten veranschaulicht. Andere Merkmale, Aspekte und Vorteile des Gegenstands werden aus der Beschreibung, den Zeichnungen und den Ansprüchen deutlich.
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • 1 ist ein Flussdiagramm eines exemplarischen Verfahrens zum Durchführen einer Berechnung für eine gegebene Schicht eines neuronalen Netzwerks.
  • 2 zeigt ein Beispiel eines neuronalen Netzwerkverarbeitungssystems.
  • 3 zeigt eine Beispielarchitektur mit einer Matrix-Recheneinheit.
  • 4 zeigt eine Beispielarchitektur einer Zelle innerhalb eines systolischen Arrays.
  • 5 ist ein Flussdiagramm eines exemplarischen Verfahrens, um neuronale Netzwerkberechnungen für mehrere Schichten durchzuführen.
  • 6 veranschaulicht ein exemplarisches neuronales Netzwerk mit mehreren Schichten und Stapelgrößen für jede Schicht.
  • Gleiche Referenznummern und Kennzeichnungen in den verschiedenen Zeichnungen bezeichnen gleiche Elemente.
  • DETAILLIERTE BESCHREIBUNG
  • Ein neuronales Netzwerk mit mehreren Schichten kann verwendet werden, um Inferenzen zu berechnen. So kann das neuronale Netzwerk beispielsweise bei einer Eingabe, eine Inferenz für die Eingabe berechnen. Insbesondere können die Schichten des neuronalen Netzwerks in einer Reihe mit jeweils einem Gewichtssatz in einer Sequenz angeordnet sein. Jede Schicht empfängt eine Eingabe und verarbeitet die Eingabe entsprechend den Gewichtssätzen für die Schicht, um eine Ausgabe zu erzeugen. Die Ausgabe kann in der nächsten neuronalen Netzwerkschicht als Eingang verwendet werden.
  • Daher empfängt das neuronale Netzwerk die Eingabe und verarbeitet diese zum Erzeugen der Inferenz in der Sequenz durch jede der neuronalen Netzwerkschichten, wobei die Ausgabe einer Netzwerkschicht als Eingabe für die nächste neuronale Netzwerkschicht vorgesehen ist. Dateneingaben zu einer neuronalen Netzwerkschicht, können z. B. entweder als Eingabe für das neuronale Netzwerk oder als Ausgabesignale der Schicht der darunterliegenden Schicht in der Sequenz zu einer neuronalen Netzwerkschicht als Aktivierungseingaben für die Schicht bezeichnet werden.
  • Bei einigen Implementierungen sind die Schichten des neuronalen Netzwerks in einer ausgerichteten Graphenstruktur angeordnet. Das heißt, jede spezielle Schicht kann mehrere Eingaben, mehrere Ausgaben oder beides empfangen. Die Schichten des neuronalen Netzes können auch so angeordnet sein, dass eine Ausgabe einer Schicht als Eingabe in eine vorhergehende Schicht zurückgesendet werden kann.
  • 1 ist ein Flussdiagramm eines exemplarischen Prozesses 100 zum Durchführen einer Berechnung für eine gegebene Schicht eines neuronalen Netzwerks mithilfe einer speziellen Hardwareschaltung. Der Einfachheit halber wird das Verfahren 100 in Bezug auf ein System mit einer oder mehreren Schaltungen beschrieben, die das Verfahren 100 ausführen. Das Verfahren 100 kann für jede Schicht des neuronalen Netzwerks ausgeführt werden, um eine Inferenz aus einer empfangenen Eingabe zu berechnen.
  • Das System empfängt für die gegebene Schicht Gewichtseingabesätze (Schritt 102) und Aktivierungseingabesätze (Schritt 104). Die Gewichtseingabesätze und die Aktivierungseingaben können entsprechend der speziellen Hardwareschaltung vom dynamischen Speicher und einem einheitlichen Puffer empfangen werden. Bei einigen Implementierungen können sowohl die Gewichtseingaben als auch die Aktivierungseingaben von dem einheitlichen Puffer empfangen werden.
  • Das System erzeugt aus den Gewichtseingaben und den Aktivierungseingaben mithilfe einer Matrixmultiplikationseinheit der speziellen Hardwareschaltung (Schritt 106) kumulierte Werte. Bei einigen Implementierungen sind die kumulierten Werte Punktprodukte der Gewichtseingabesätze und den Aktivierungseingaben. Das heißt, für einen Satz von Gewichtungen, kann das System jede Gewichtseingabe mit jeder Aktivierungseingabe multiplizieren und die Produkte zusammenaddieren, um einen kumulierten Wert zu bilden. Dann kann das System Punktprodukte eines anderen Satzes von Gewichtungen mit anderen Sätzen von Aktivierungseingaben berechnen.
  • Das System kann unter Verwendung einer Vektor-Recheneinheit der speziellen Hardware-Schaltung eine Schichtausgabe von den kumulierten Werten (Schritt 108) erzeugen. Bei einigen Implementierungen wendet die Vektor-Recheneinheit eine Aktivierungsfunktion auf die kumulierten Werte an. Die Schichtausgabe kann zur Verwendung als eine Eingabe in eine nachfolgende Schicht in dem neuronalen Netzwerk in dem einheitlichen Puffer gespeichert werden oder kann verwendet werden, um die Inferenz zu bestimmen. Das System beendet die Verarbeitung des neuronalen Netzwerks, um die Inferenz für die empfangene Eingabe zu erzeugen, wenn eine empfangene Eingabe durch jede Schicht des neuronalen Netzwerks verarbeitet worden ist.
  • 2 zeigt ein Beispiel einer speziellen integrierten Schaltung 200 zum Durchführen neuronaler Netzwerkberechnungen. Das System 200 verfügt über eine Host-Schnittstelle 202. Die Host-Schnittstelle 202 kann Anweisungen empfangen, die Konfigurationsinformationen für eine neuronale Netzwerkberechnung umfassen. Die Konfigurationsinformationen können mindestens eine oder mehrere der folgenden umfassen: wie viele Schichten, entsprechende Sätze von Gewichtseingaben für jede Schicht des Modells, einen anfänglichen Satz von Aktivierungseingaben, d.h. die Eingabe für das neuronale Netzwerk, aus der die Interferenz, die entsprechenden Eingabe- und Ausgabegrößen jeder Schicht, einen Schrittwert für die neuronale Netzwerkberechnung und einen Typ der zu verarbeitenden Schicht, z.B. eine Faltungsschicht oder eine vollständig verbundene Schicht, verarbeitet werden sollen.
  • Die Host-Schnittstelle 202 kann die Anweisungen an einen Sequenzer 206 senden, der die Anweisungen in Steuersignale mit niedrigem Pegel umwandelt, die die Schaltung zur Durchführung der neuronalen Netzwerkberechnungen steuern. In einigen Implementierungen regeln die Steuersignale den Datenfluss in der Schaltung, z.B. wie die Gewichtseingabesätze und die Aktivierungseingabesätze durch die Schaltung fließen. Der Sequenzer 206 kann die Steuersignale zu einem einheitlichen Puffer 208, einer Matrix-Recheneinheit 212 und einer Vektor-Recheneinheit 214 senden. Bei einigen Implementierungen sendet der Sequenzer 206 auch Steuersignale an ein direktes Speicherzugriffsprogramm 204 und einen dynamischen Speicher 210. Bei einigen Implementierungen ist der Sequenzer 206 ein Prozessor, der Taktsignale erzeugt. Der Sequenzer 206 kann die Zeitsteuerung der Taktsignale verwenden, um zu gegebener Zeit die Steuersignale an jede Komponente der Schaltung 200 zu übermitteln. Bei einigen anderen Implementierungen übergibt die Host-Schnittstelle 202 von einem externen Prozessor in ein Taktsignal.
  • Die Host-Schnittstelle 202 kann Gewichtseingabesätze und den anfänglichen Satz von Aktivierungseingaben an ein direktes Speicherzugriffsprogramm 204 senden. Das direkte Speicherzugriffsprogramm 204 kann die Sätze von Aktivierungseingaben an dem einheitlichen Puffer 208 speichern. Bei einigen Implementierungen speichert der direkte Speicherzugriff die Gewichtungssätze in den dynamischen Speicher 210, der eine Speichereinheit sein kann. Bei einigen Implementierungen befindet sich der dynamische Speicher außerhalb der Schaltung.
  • Die einheitliche Puffer 208 ist ein Speicherpuffer. Er kann verwendet werden, um den Satz von Aktivierungseingaben von dem direkten Speicherzugriffsprogramm 204 und Ausgaben der Vektor-Recheneinheit 214 zu speichern. Das direkte Speicherzugriffsprogramm 204 kann auch die Ausgaben der Vektor-Recheneinheit 214 aus dem einheitlichen Puffer 208 lesen.
  • Der dynamische Speicher 210 und der einheitliche Puffer 208 können die Gewichtseingabesätze und die Sätze von Aktivierungseingaben jeweils an die Matrix-Recheneinheit 212 senden. Bei einigen Implementierungen ist die Matrix-Recheneinheit 212 eine zweidimensionale systolische Matrix. Die Matrix-Recheneinheit 212 kann auch ein eindimensionales systolisches Array oder eine andere Schaltung sein, die mathematische Operationen durchführen kann, z. B. Multiplikation und Addition. Bei einigen Implementierungen ist die Matrix-Recheneinheit 212 ein Allzweck-Matrixprozessor.
  • Die Matrix-Recheneinheit 212 kann die Gewichtseingaben und die Aktivierungseingaben verarbeiten und einen Ausgangsvektor an die Vektorberechnungseinheit 214 bereitstellen. Bei einigen Implementierungen sendet die Matrix-Recheneinheit den Ausgangsvektor an den einheitlichen Puffer 208, der den Ausgangsvektor an die Vektor-Recheneinheit 214 sendet. Die Vektor-Recheneinheit kann den Ausgabevektor verarbeiten und einen Vektor von verarbeiteten Ausgaben zum einheitlichen Puffer 208 speichern. So kann beispielsweise die Vektor-Recheneinheit 214 eine nichtlineare Funktion auf Ausgaben der Matrix-Recheneinheit, z.B. einen Vektor von kumulierten Werten anwenden, um aktivierte Werte zu erzeugen. Bei einigen Implementierungen erzeugt die Vektor-Recheneinheit 214 normierte Werte, gebündelte Werte oder beides. Der Vektor von verarbeiteten Ausgaben kann als Aktivierungseingabe für die Matrix-Recheneinheit 212 verwendet werden, z. B. zur Verwendung in einer nachfolgenden Schicht in dem neuronalen Netzwerk. Die Vektor-Recheneinheit 212 wird nachfolgend unter Bezugnahme auf 3 und 4 näher beschrieben.
  • 3 zeigt eine exemplarische Architektur 300 mit einer Matrix-Recheneinheit. Die Matrix-Recheneinheit ist ein zweidimensionales systolisches Array 306. Das Array 306 beinhaltet mehrere Zellen 304. Bei einigen Implementierungen entspricht eine erste Dimension 320 des systolischen Arrays 306 Spalten von Zellen und eine zweite Dimension 322 des systolischen Arrays 306 entspricht Zeilen von Zellen. Das systolische Array kann mehr Zeilen als Spalten, mehr Spalten als Zeilen oder eine gleiche Anzahl von Spalten und Zeilen aufweisen.
  • In dem dargestellten Beispiel senden die Wertlader 302 Aktivierungseingaben an Zeilen des Arrays 306 und eine Gewichtsabrufschnittstelle 308 sendet Gewichtseingaben an Spalten des Arrays 306. Bei einigen anderen Implementierungen werden jedoch Aktivierungseingaben zu den Spalten übertragen und Gewichtseingaben zu den Zeilen des Arrays 306.
  • Die Wertlader 302 können die Aktivierungseingaben von einem einheitlichen Puffer, z.B. dem einheitlichen Puffer 208 von 2 empfangen. Jeder Wertlader kann eine entsprechende Aktivierungseingabe zu einer am weitesten links liegenden Zelle des Arrays 306 senden. Die am weitesten links liegende Zelle kann eine Zelle entlang einer äußerst linken Spalte des Arrays 306 sein. So kann beispielsweise der Wertlader 312 eine Aktivierungseingabe zur Zelle 314 senden. Der Wertlader kann auch die Aktivierungseingabe an einen benachbarten Wertlader senden und die Aktivierungseingabe kann an einer anderen am weitesten links liegenden Zelle des Arrays 306 verwendet werden. Dies ermöglicht, dass Aktivierungseingaben zur Verwendung in einer anderen bestimmten Zelle des Arrays 306 verschoben werden.
  • Die Gewichtsabrufschnittstelle 308 kann die Gewichtseingabe von einer Speichereinheit, z.B. dem dynamischen Speicher 210 von 2 empfangen. Jede Gewichtsabrufschnittstelle 308 kann eine entsprechende Gewichtseingabe zu einer obersten Zelle des Arrays 306 senden. Die oberste Zelle kann eine Zelle entlang einer obersten Zeile des Arrays 306 sein. Die Gewichtsabrufschnittstelle 308 kann beispielsweise Gewichtseingaben an die Zellen 314 und 316 übermitteln.
  • Bei einigen Implementierungen kann eine Hostschnittstelle, z. B. die Hostschnittstelle 202 von 2, die Aktivierungseingaben über das gesamte Array 306 entlang einer Dimension, z.B. nach rechts verschieben, während die Gewichtseingaben entlang des gesamten Arrays 306 entlang einer anderen Dimension, z. B. nach unten, verschoben werden können. So kann beispielsweise die Aktivierungseingabe an der Zelle 314 über einen Taktzyklus zu einem Aktivierungsregister in der Zelle 316, die rechts von der Zelle 314 liegt, verschieben. In ähnlicher Weise kann die Gewichtseingabe an der Zelle 316 zu einem Gewichtsregister in der Zelle 318 verschoben werden, die unterhalb der Zelle 314 liegt.
  • Um eine kumulierte Ausgabe zu erzeugen, kann bei jedem Taktzyklus jede Zelle eine gegebene Gewichtseingabe und eine gegebene Aktivierungseingabe verarbeiten. Die kumulierte Ausgabe kann auch an die benachbarte Zelle entlang der gleichen Dimension wie die gegebene Gewichtseingabe weitergegeben werden. Nachfolgend wird unter Bezugnahme auf 4 eine Einzelzelle beschrieben.
  • Die kumulierte Ausgabe kann entlang der gleichen Spalte wie die Gewichtseingabe, z. B. in Richtung des Bodens der Spalte in dem Array 306, verschoben werden. Bei einigen Implementierungen kann das Array 306 unterhalb jeder Spalte Akkumulationseinheiten 310 beinhalten, die jede Ausgabe von jeder Spalte speichert und kumuliert, wenn Berechnungen mit Schichten durchgeführt werden, die mehr Aktivierungseingaben als Zeilen aufweisen. Bei einigen Implementierungen speichert jede Akkumulatoreinheit mehrere parallele Akkumulationen. Dies wird weiter unten unter Bezugnahme auf 6 beschrieben. Die Akkumulatoreinheiten 310 können jede kumulierte Ausgabe kumulieren, um einen endgültigen kumulierten Wert zu erzeugen. Der endgültige kumulierte Wert kann auf eine Vektor-Recheneinheit übertragen werden. Bei einigen anderen Implementierungen übergeben die Akkumulationseinheiten 310 die kumulierten Werte zu der Vektor-Recheneinheit, ohne irgendwelche Ansammlungen auszuführen, wenn Schichten mit weniger Gewichtseingaben verarbeitet werden als Spalten oder Schichten mit weniger Aktivierungseingaben als Zeilen.
  • 4 zeigt eine exemplarische Architektur 400 einer Zelle innerhalb eines systolischen Arrays, z. B. des systolischen Arrays 306 von 3.
  • Die Zelle kann ein Aktivierungsregister 406 umfassen, das eine Aktivierungseingabe speichert. Das Aktivierungsregister kann die Aktivierungseingabe von einer linken benachbarten Zelle, d.h. eine benachbarte Zelle, die links von der gegebenen Zelle angeordnet ist, oder von einem einheitlichen Puffer, abhängig von der Position der Zelle, innerhalb des systolischen Arrays empfangen. Die Zelle kann ein Aktivierungsregister 402 umfassen, das eine Gewichtseingabe speichert. Die Gewichtseingabe kann, abhängig von der Position der Zelle innerhalb des systolischen Arrays, von einer oberen benachbarten Zelle oder von einer Gewichtsabrufschnittstelle übertragen werden. Die Zelle kann auch eine Summe im Register 404 beinhalten Die Summe im Register 404 kann einen kumulierten Wert von der obersten benachbarten Zelle speichern. Die Multiplikationsschaltung 408 kann verwendet werden, um die Gewichtseingabe von dem Gewichtsregister 402 mit der Aktivierungseingabe von dem Aktivierungsregister 406 zu multiplizieren. Die Multiplikationsschaltung 408 kann das Produkt an die Summierungsschaltung 410 ausgeben.
  • Die Summierungsschaltung kann das Produkt und den kumulierten Wert aus der Summe im Register 404 summieren, um einen neuen kumulierten Wert zu erzeugen. Die Summierungsschaltung 410 kann dann den neuen kumulierten Wert an eine andere Summe im Register senden, die sich in einer unteren angrenzenden Zelle befindet. Der neue kumulierte Wert kann in der unteren benachbarten Zelle für eine Summierung als Operand verwendet werden.
  • Die Zelle kann auch die Gewichtseingabe und die Aktivierungseingabe zur Verarbeitung zu benachbarten Zellen verschieben. So kann beispielsweise das Gewichtsregister 402 die Gewichtseingabe zu einem anderen Gewichtsregister in der untersten benachbarten Zelle senden. Das Aktivierungsregister 406 kann die Gewichtseingabe zu einem anderen Aktivierungsregister in der rechten benachbarten Zelle senden. Daher können sowohl die Gewichtseingabe als auch die Aktivierungseingabe von anderen Zellen in dem Array bei einem nachfolgenden Taktzyklus wiederverwendet werden.
  • Bei einigen Implementierungen enthält die Zelle auch ein Steuerregister. Das Steuerregister kann ein Steuersignal speichern, das bestimmt, ob die Zelle entweder die Gewichtseingabe oder die Aktivierungseingabe zu benachbarten Zellen verschieben soll. Bei einigen Implementierungen erfordert das Verschieben der Gewichtseingabe oder der Aktivierungseingabe einen oder mehrere Taktzyklen. Das Steuersignal kann weiterhin bestimmen, ob die Aktivierungseingaben oder Gewichtseingaben an die Multiplikationsschaltung 408 übertragen werden, oder ob die Multiplikationsschaltung 408 auf den Aktivierungs- und Gewichtseingaben arbeitet. Das Steuersignal kann auch an eine oder mehrere benachbarte Zellen geleitet werden, z.B. mithilfe eines Drahtes.
  • Bei einigen Implementierungen werden die Gewichte in ein Gewichtspfadregister 412 verschoben. Das Gewichtspfadregister 412 kann die Gewichtseingabe, z. B. von einer oberen benachbarten Zelle empfangen und die Gewichtseingabe auf das Gewichtsregister 402 auf der Grundlage des Steuersignals übertragen. Das Gewichtsregister 402 kann die Gewichtseingabe statisch speichern, sodass, wenn Aktivierungseingaben über mehrere Taktzyklen in die Zelle übertragen werden, z. B. durch das Aktivierungsregister 406 über mehrere Taktzyklen hinweg, die Gewichtseingabe innerhalb der Zelle bleibt und nicht zu einer benachbarten Zelle übertragen wird. Die Gewichtseingabe kann daher auf mehrere Aktivierungseingaben angewendet werden, z. B. unter Verwendung der Multiplikationsschaltung 408 und entsprechende kumulierte Werte können zu einer benachbarten Zelle übertragen werden.
  • Bei einigen Implementierungen wird eine neuronale Netzwerkeingabe durch jede der Schichten des neuronalen Netzwerks verarbeitet, um eine neuronale Netzwerkausgabe für die neuronale Netzwerkeingabe zu erzeugen. Bei einigen Implementierungen verarbeitet die Schaltung jedoch mehrere neuronale Netzwerkeingaben durch die Schichten des neuronalen Netzwerks gleichzeitig, um neuronale Netzwerkausgaben für die Eingaben zu erzeugen, wodurch die Auslastung der Schaltung erhöht wird.
  • Eine Eingabe zu einer bestimmten Schicht des neuronalen Netzwerks kann als ein Satz von Aktivierungseingaben bezeichnet werden. Daher kann eine neuronale Netzwerkeingabe ein Satz von Aktivierungseingaben zu einer ersten Schicht sein. Die erste Schicht kann eine Ausgabe erzeugen, die durch eine zweite Schicht verarbeitet wird und die Ausgabe kann als ein Satz von Aktivierungseingaben zu der zweiten Schicht bezeichnet werden.
  • Bei einigen Implementierungen kann die Schaltung, die einen Satz von Aktivierungseingaben verarbeitet, durch die Aktivierungseingaben von einer ersten Schicht bis zu einer letzten Schicht des neuronalen Netzwerks gesendet werden, um eine Inferenz zu erzeugen, mehrere Sätze von Aktivierungseingaben an einer ersten Schicht verarbeiten, z. B. kumulierte Werte für jeden Satz von Aktivierungseingaben erzeugen, wie oben in 3 beschrieben, dann mehrere Sätze von Aktivierungseingaben an einer zweiten Schicht verarbeiten, und so weiter. Mehrere Sätze von Aktivierungseingaben an einer gegebenen Schicht können eine oder mehrere Eingabestapel bilden. Bei einigen Implementierungen werden, bevor die Schaltung Stapel einer nachfolgenden Schicht verarbeitet, Stapel für eine gegebene Schicht verarbeitet. Die Schaltung kann durch Erzeugen kumulierter Werte einen Stapel für jede Eingabe, der ein unabhängiger Satz von Aktivierungseingaben sein kann, im Stapel verarbeiten.
  • Bei einigen Implementierungen kann, um den Durchsatz während der Berechnungen für eine gegebene neuronale Netzwerkschicht zu maximieren, die Schaltung veranlasst werden mehrere unabhängige Aktivierungseingaben zu verarbeiten, während die Gewichtseingaben für die gegebene neuronale Netzwerkschicht in das systolische Array geladen werden. Das heißt, die Gewichtseingaben können mit mehreren Aktivierungseingaben wiederverwendet werden. Insbesondere verwendet die Schaltung Gewichtseingaben durch Berechnen von kumulierten Werten unter Verwendung der Gewichtseingaben und verschiedener Aktivierungseingaben, z. B. unter Verwendung der Matrix-Recheneinheit 212 von 2. Zur Veranschaulichung können die Aktivierungseingaben aus mehreren unterschiedlichen Bildressourcen oder mehreren Audioproben bestehen. Dies wird ferner weiter unten unter Bezugnahme auf 6 beschrieben.
  • Die Schaltung hat eine Verarbeitungsgeschwindigkeit und eine Geschwindigkeit, mit der sie auf den Speicher zugreifen kann. Im Allgemeinen ist die Verarbeitungsgeschwindigkeit schneller als die Speicherzugriffsgeschwindigkeit. Durch Wiederverwendung von Gewichten und wodurch die Verarbeitungsgeschwindigkeit der Schaltung genutzt wird, kann die Schaltung die Zellen des systolischen Arrays, die in nachfolgenden Berechnungen verwendet werden sollen, verwenden, während sie parallel Zugriff auf Gewichtseingaben aus dem Speicher hat.
  • Die Schaltung kann für jede Schicht des neuronalen Netzwerks bestimmen, wie oft Gewichte aus einem Gewichtwiederverwendungswert für die Schaltung wiederverwendet werden. Dies kann durch eine Software, die für die Hardware oder durch die Hardware kompiliert ist, auf der Schaltung bestimmt werden. Bei einigen Implementierungen ist der Gewichtswiederverwendungswert die Anzahl, wie oft die Schaltung Gewichtseingaben wiederverwenden kann, bevor eine Berechnungszeit der Wiederverwendung der Gewichtseingaben mit verschiedenen Aktivierungseingaben größer oder gleich einer Abrufzeit des Zugriffs auf neue Gewichtseingaben aus dem Speicher erfolgt. Daher kann der Gewichtswiederverwendungswert angeben, wie oft die Schaltung die Gewichtseingaben wiederverwenden kann, um die Auslastung zu maximieren und die Speicherzugriffswartezeit zu minimieren.
  • Der Gewichtswiederverwendungswert kann auf einem oder mehreren der folgenden Werte basieren: Eine Taktrate des Speichers der die Gewichtseingaben speichert, z. B. den dynamischen Speicher 210 von 2, eine Anzahl von Arithmetikeinheiten innerhalb der Schaltung, z. B. die Innenmatrix-Recheneinheit 212 von 2, und eine Anzahl von Kanälen im Speicher, z. B. einen einheitlichen Puffer 208 und einen dynamischer Speicher 210 von 2. Der Gewichtwiederverwendungswert kann verwendet werden, um eine entsprechende Stapelgröße für jede Schicht des neuronalen Netzwerks zu bestimmen. Die Stapelgröße kann als eine effektive Stapelgröße bezeichnet werden, d.h. eine Stapelgröße die es einer Schicht ermöglicht in einer Weise zu arbeiten, um die effizienteste Menge an Gewichtwiederverwendung zu erzeugen. Die Stapelgröße ist eine Anzahl von Eingaben, die in einer Schicht so verarbeitet werden sollen, dass das systolische Array in der Schaltung maximiert wird. Bei einigen Implementierungen ist eine Stapelgröße die Obergrenze des Gewichtswiederverwendungswerts für eine gegebene Schicht, dividiert durch die Anzahl der Wiederholungen der Gewichtseingaben an der Schicht. Die Anzahl der Wiederholungen der Gewichtseingaben kann direkt der Anzahl von Aktivierungseingaben entsprechen, die in den Zellen eines systolischen Arrays der Schaltung gespeichert sind, wenn eine Akkumulationsberechnung durchgeführt wird. Dies liegt daran, dass die Gewichtseingaben in den Zellen verbleiben können, d.h. während neue Sätze von Aktivierungseingaben geladen werden „pausieren“. Wenn neue Sätze von Aktivierungseingaben geladen werden, wobei die Gewichtseingabe eingefroren ist, kann die Schaltung die Gewichtseingabe wiederverwenden, um die Windungen mit den neuen Sätzen von Aktivierungseingaben zu berechnen. Ein Beispiel wird ferner unten unter Bezugnahme auf 6 beschrieben.
  • 5 ist ein Flussdiagramm 500 eines exemplarischen Verfahrens, um neuronale Netzwerkberechnungen für mehrere Schichten durchzuführen. Das Verfahren kann durch eine spezielle Hardware-Schaltung durchgeführt werden, z.B. unter Verwendung des Hosts 202 von 2, oder durch einen oder mehrere Prozessoren, Firmware, Off-Chip-Prozesse oder durch einen anderen Softwareprozess, der zur Steuerung der Schaltung konfiguriert ist.
  • Die Schaltung kann zur Verarbeitung durch die Schicht, während der Verarbeitung an jeder neuronalen Netzwerkschicht, einen Satz von Schichteingaben empfangen. (Schritt 502). Der Satz von Schichteingaben kann aus dem Speicher bestehen, z. B. dem einheitlichen Puffer 208 von 2, oder von einer vorherigen Schicht, d.h. der Satz von Eingaben sind Ausgaben, die von der vorhergehenden Schicht in dem Netzwerk erzeugt wurden, und das Verwenden der Ausgaben als die Menge der Eingaben kann durch den Host 202 verwaltet werden, wie vorstehend unter Bezugnahme auf 2 beschrieben. Jede Eingabe kann ein Satz von Aktivierungseingaben sein und von einer unabhängigen neuronalen Netzwerkeingabe erzeugt werden
  • Das System kann für eine gegebene neuronale Netzwerkschicht aus dem Satz von Eingaben einen oder mehrere Eingabestapel bilden (Schritt 504). Wie oben beschrieben, hat jede neuronale Netzwerkschicht eine zugeordnete Stapelgröße. Jeder an der Schicht gebildete Stapel beinhaltet eine Anzahl von Eingaben, die die Stapelgröße der Schicht nicht überschreitet. Die Stapelgröße für jede neuronale Netzwerkschicht kann als eine Konfiguration des neuronalen Netzwerks bestimmt werden. Bei einigen Implementierungen wird die Stapelgröße für jede neuronale Netzwerkschicht berechnet, wenn für die Ausführung ein neuronales Netzwerkmodell auf der Schaltung kompiliert wird. Da die Stapelgröße für eine gegebene Schicht berechnet werden kann bevor die Verarbeitung an einer Schicht beginnt, kann die Anzahl der Eingabe innerhalb eines Stapels basierend auf der Stapelgröße der gegebenen Schicht gebildet werden.
  • Wenn beispielsweise 24 Bilder von einem neuronalen Netzwerk verarbeitet werden müssen und eine erste Schicht des neuronalen Netzwerks eine Stapelgröße von 8 aufweist, kann die Schaltung 3 Stapel von 8 Bildern bilden, d.h. die 24 Bilder in 3 Stapel von 8 Eingaben aufteilen. Für jeden Stapel kann die Schaltung die 8 verschiedenen Bilder in dem Stapel verarbeiten, indem ein bestimmter Satz von Gewichtseingaben für die Schicht wiederverwendet wird. Die Schaltung kann dann entweder (1) eine oder mehrere Stapel auf einer nachfolgenden Schicht oder (2) unter Verwendung des bestimmten Satzes von Gewichtseingaben einen anderen Satz von 8 verschiedenen Bildressourcen auf der Schicht verarbeiten. Die Schaltung bestimmt, ob auf der Grundlage von Stapelgrößen anderer Schichten in dem neuronalen Netzwerk, mit (1) oder (2) fortgefahren wird, wie nachfolgend unter Bezugnahme 506 auf 6 beschrieben wird.
  • Die Schaltung kann für eine gegebene neuronale Netzwerkschicht eine Anzahl einer oder mehrerer Eingabestapel auswählen, die verarbeitet werden sollen (Schritt 506). Bei einigen Implementierungen ist die Anzahl so gewählt, dass eine Zählung der Eingaben in der Anzahl einer oder mehrerer Stapel größer oder gleich der entsprechenden Stapelgröße einer nachfolgenden Schicht ist. So kann beispielsweise, wenn eine aktuelle Schicht 3 Stapel mit jeweils 5 Eingaben und einer darauffolgenden Schicht als Stapelgröße von 10 verarbeiten muss, die Schaltung 2 der 3 Stapel zur Verarbeitung auswählen. Die 2 ausgewählten Stapel haben insgesamt 10 Eingaben, d.h. 2·5, was gleich zu der entsprechenden Stapelgröße der nachfolgenden Schicht ist, d.h. 10. Bei einigen Implementierungen wird der verbleibende dritte Stapel bei einem nachfolgenden Durchlauf des systolischen Arrays in der Schaltung verarbeitet. Ein weiteres Beispiel wird nachfolgend unter Bezugnahme auf 6 beschrieben.
  • Die Schaltung kann z. B. unter Verwendung eines systolischen Arrays die ausgewählte Anzahl von Eingabestapel verarbeiten, um einen entsprechenden Schichtausgang für jede Eingabe in den ausgewählten Stapeln zu erzeugen (Schritt 508). Die Schaltung kann durch Wiederverwendung von Gewichtseingaben bei der Berechnung von kumulierten Werten für jede Eingabe, jeden ausgewählten Eingabestapel verarbeiten. Wie vorstehend beschrieben, werden die Gewichtseingaben, während neue Sätze von Aktivierungseingaben geladen werden, auf mehrere unabhängige Eingaben angewendet, da die Gewichtseingaben in den Zellen verbleiben können, d.h. „pausieren“.
  • Zur Veranschaulichung kann ein Stapel zwei Eingaben aufweisen – einen Satz von Aktivierungseingaben A1 und einen Satz von Aktivierungseingaben A2. Die Schaltung kann einen Satz von Gewichtseingaben W1 wiederverwenden, indem der Satz W1 auf beide Sätze A1 und A2 angewendet wird, bevor ein Satz W2 von Gewichtseingaben aus dem Speicher abgerufen wird, wobei der Satz W2 ein Gewichtssatz für eine nachfolgende Schicht ist oder, falls die Schicht mehrere Gewichte aufweist, die von einem systolischen Array der Schaltung zu verarbeiten sind, eine nächste Teilmenge von Gewichten für die Schicht. Wenn beispielsweise 8 Stapel mit jeweils 5 Eingaben verarbeitet werden, d.h. insgesamt 40 Eingaben und die Schaltung 4 Stapel zur Verarbeitung auswählt, kann die Schaltung die Eingaben innerhalb der 4 Stapel verarbeiten, d.h. insgesamt 20 Eingaben, um entsprechende Schichtausgaben zu erzeugen, d.h. insgesamt 20 Schichtausgaben. Dies wird ferner weiter unten unter Bezugnahme auf 6 beschrieben.
  • Nach dem Verarbeiten der ausgewählten Anzahl von Stapeln kann die Schaltung entweder eine zweite Anzahl von Stapeln an der Schicht verarbeiten oder fortfahren, um eine oder mehrere Eingabestapel an einer nachfolgenden Schicht zu verarbeiten. Dies wird ferner weiter unten unter Bezugnahme auf 6 beschrieben.
  • Obwohl dieses Verfahren als Schaltung zur Verarbeitung eines neuronalen Netzwerks beschrieben wurde, kann dieses Verfahren auch auf einem Prozessor, z. B. einer zentralen Verarbeitungseinheit (CPU) oder einem Grafikprozessor (GPU) implementiert werden. So kann beispielsweise, während Gewichte aus dem Speicher abgerufen werden, der Prozessor einen Gewichtswert mehrere Male wiederverwenden, z. B. dynamischer Direktzugriffsspeicher (DRAM).
  • 6 veranschaulicht ein Beispiel eines neuronalen Netzwerks 600 mit mehreren Schichten und einer Stapelgröße für jede Schicht. Wie vorstehend beschrieben, ist eine Stapelgröße die Obergrenze des Gewichtswiederverwendungswerts für eine gegebene Schicht, dividiert durch die Anzahl der Wiederholungen der Gewichtseingaben an der Schicht. Die Funktion der Obergrenze kann eine Anzahl verarbeiten und den kleinsten ganzzahligen Wert, der nicht kleiner als die Anzahl selbst ist, zurückgeben. Die Anzahl der Wiederholungen der Gewichtseingaben kann direkt der Anzahl von Aktivierungseingaben entsprechen, die in den Zellen eines systolischen Arrays der Schaltung gespeichert sind. Ein Gewicht-Wiederverwendungswert kann zum Beispiel ein Wert für die Schaltung 1500 sein. Die Schicht 1 602 verarbeitet eine Eingabe von 170 × 170. Jede der 170 × 170 Aktivierungseingaben kann in einer Zelle des systolischen Arrays gespeichert werden. Daher ist die Stapelgröße für die Schicht 1 602 CEIL (1500/(170·170)) = 1. Die Stapelgröße für die Schicht 2 604 CEIL (1500/(28·28)) = 2. Unter Verwendung der gleichen Berechnung haben die Schichten 3–5 606610 eine Stapelgröße von 8 und die Schicht 6 612 hat eine Stapelgröße von 32. Bei einigen Implementierungen wird die Stapelgröße auf die nächste Potenz von 2 abgerundet.
  • Zur Veranschaulichung hat Schicht 1 eine Stapelgröße von 1 Eingabe und Schicht 2 hat eine Stapelgröße von 2 Eingaben. So kann die Schaltung beispielsweise zehn Eingaben zur Verarbeitung an der Schicht 1 empfangen, z.B. insgesamt 10 verschiedene Bilder.
  • Die Schaltung kann festlegen, dass zwei von zehn Stapeln an der Schicht 1 verarbeitet werden, d.h. für insgesamt 2 Eingaben. Bei einigen Implementierungen legt die Schaltung diese Zahl durch Dividieren der Stapelgröße in Schicht 2 mit der Stapelgröße von Schicht 1 fest, d.h. 2/1 = 2. Durch die Verarbeitung von zwei Stapeln einer Einzeleingabe, kann die Schaltung zwei Eingaben verarbeiten, die einer Stapelgröße der Schicht 2 entspricht, d.h. 2. Um zwei Schichtausgaben von den zwei Eingaben zu erzeugen, kann die Schaltung beide Stapel verarbeiten, z.B. durch Berechnen von zwei Vektoren von kumulierten Werten – einer von jedem Bild. Jede Schichtausgabe kann eine Eingabe für eine nachfolgende Ebene sein. Jede Schaltung kann einen Stapel von zwei Eingaben bilden, z. B. die beiden Vektoren der kumulierten Werte zur Verarbeitung an der Schicht 2. Die Stapel können im einheitlichen Puffer gespeichert werden.
  • Die Schaltung kann festlegen, dass auf Schicht 2 vier Stapel verarbeitet werden sollen. Durch die Verarbeitung von vier Stapeln der Größe zwei, kann die Schaltung acht Eingaben verarbeiten, die einer Stapelgröße der Schicht 3 entspricht, d.h. 8. Um von den acht Eingaben acht Schichtausgaben zu erzeugen, kann die Schaltung vier Stapel verarbeiten. So kann die Schaltung einen Stapel von acht Eingaben für die Verarbeitung an der Schicht 3 bilden.
  • Die Schaltung kann fortfahren, bis die Eingaben an allen Schichten des neuronalen Netzwerks verarbeitet worden sind. Da die Schichten 3–5 beispielsweise eine Stapelgröße von 8 aufweisen, kann die Schaltung festlegen, dass ein Stapel von acht Eingaben an jeder der Schichten 3–5 verarbeitet werden soll. Ebenso kann die Schaltung festlegen, dass vier Stapel mit jeweils acht Eingaben an der Schicht 5 verarbeitet werden sollten, wodurch ein Stapel von 32 Eingaben gebildet wird, der in der Schicht 6 verarbeitet werden kann. Für jede Eingabe kann Schicht 6 einen oder mehrere Schichtausgaben erzeugen, die für Inferenzen verwendet werden können.
  • Bei einigen Implementierungen berechnet die Schaltung ein kleinstes gemeinsames Vielfaches von Stapelgrößen über alle Schichten in dem neuronalen Netzwerk, z. B. unter Verwendung von arithmetischen Schaltungen. Somit kann die Schaltung, bevor die nachfolgenden Schichten verarbeitet werden, eine minimale Anzahl von Eingaben verarbeiten, die gleich oder größer als das kleinste gemeinsame Vielfache an jeder Schicht sind. Mit anderen Worten kann die Schaltung festlegen, ob (1) einen Stapel an einer nachfolgenden Schicht oder (2) einen weiteren Stapel auf einer aktuellen Schicht auf der Grundlage des kleinsten gemeinsamen Vielfachen, verarbeitet. So ist beispielsweise das kleinste gemeinsame Vielfache der Stapelgröße für die Schichten 1–6 602612, 32. Nach der Verarbeitung eines Stapels an der Schicht 1 kann die Schaltung festlegen, dass die Schicht 1 nur eine Ausgabe erzeugt. Bei einigen Implementierungen berechnet die Schaltung ein kleinstes gemeinsames Vielfaches von Stapelgrößen über alle Schichten in dem neuronalen Netzwerk, z. B. unter Verwendung von arithmetischen Schaltungen. Die Schaltung kann daher festlegen, in Schicht 1 einen anderen Stapel zu verarbeiten, wobei an diesem Punkt insgesamt 2 Ausgaben erzeugt wurden. Die Schaltung kann mit dem Erzeugen von 32 Ausgaben fortfahren, d.h. das kleinste gemeinsame Vielfache wurde an Schicht 1 erzeugt. Somit kann die Schaltung fortfahren, einen Stapel an einer nachfolgenden Schicht zu verarbeiten. Bei einigen Implementierungen wird jede Schichtausgabe in einem einheitlichen Puffer gespeichert, z.B. einem einheitlichen Puffer 208 aus 2.
  • Zur Veranschaulichung kann die Schaltung für die Verarbeitung 32 Stapel auswählen, was 32 Eingaben in Schicht 1 umfasst. Dann kann die Schaltung 16 Stapel mit insgesamt 32 Eingaben in Schicht 2 auswählen und 4 Stapel für die Verarbeitung von insgesamt 32 Eingaben in Schicht 3 und 4 Stapel für die Verarbeitung von insgesamt 32 Eingaben in Schicht 4 und 4 Stapel für die Verarbeitung von insgesamt 32 Eingaben in Schicht 5 und dann schließlich 1 Stapel für die Verarbeitung von insgesamt 32 Eingaben auf Schicht 6.
  • Bei einigen Implementierungen verarbeitet die Schaltung an einer bestimmten Schicht eine Anzahl von Eingaben, die größer als das kleinste gemeinsame Vielfache auf Basis eines Systemparameters sind, z. B. einen Parameter, der von einem Nutzer zur Verfügung gestellt wird. Bei einigen Implementierungen verarbeitet die Schaltung eine Anzahl von Eingaben, die durch die Stapelgröße der nachfolgenden Schicht teilbar ist. Bei einigen anderen Implementierungen empfängt die Schaltung Anweisungen, um eine große Anzahl von Eingaben zu verarbeiten, und die Schaltung verarbeitet Eingabestapel, um so, bevor mit dem Verfahren zum Erzeugen von Ausgaben einer nachfolgenden Anzahl fortgefahren wird, eine Anzahl von erzeugten Ausgaben in einer bestimmten Schicht zu maximieren. Die Schaltung kann die Anzahl der an der festgelegten Schicht erzeugten Ausgaben einschränken, sodass die Anzahl der erzeugten Ausgaben durch die Stapelgröße einer nachfolgenden Schicht teilbar ist.
  • Ausführungsformen des Gegenstands und die in dieser Spezifikation beschriebenen funktionalen Operationen können in digitalen elektronischen Schaltungen oder in einer konkret darin verkörperten Computer-Software, Firmware in die Hardware implementiert werden, einschließlich der in dieser Spezifikation offenbarten Strukturen und ihrer strukturellen Entsprechungen oder in Kombinationen von einer oder mehrerer von ihnen. Ausführungsformen des in dieser Spezifikation beschriebenen Gegenstands können als ein oder mehrere Computerprogramme, d.h. als ein oder mehrere Module von Computerprogrammanweisungen implementiert werden, die auf einem Computer-Speichermedium für die Durchführung durch oder die Steuerung der Operation des datenverarbeitenden Apparats kodiert werden. Alternativ oder zusätzlich können die Programmanweisungen auf einem erzeugten propagierten Signal, z. B. einem maschinell erzeugten elektrischen, optischen oder elektromagnetischen Signal künstlich kodiert werden, das erzeugt wird, um Informationen für die Übertragung auf einen geeigneten Empfängerapparat für die Durchführung durch einen datenverarbeitenden Apparat zu kodieren. Bei einem Computer-Speichermedium kann es sich um ein maschinell lesbares Speichergerät, einen maschinell lesbaren Speicherträger, ein zufälliges oder serielles Speicher-Array oder Speichergerät oder um eine Kombination aus einem oder mehreren dieser Geräte handeln oder in ihnen enthalten sein.
  • Der Begriff „Datenverarbeitungsvorrichtung“ umfasst alle Arten von Vorrichtungen, Geräten und Maschinen zum Verarbeiten von Daten, einschließlich beispielsweise eines programmierbaren Prozessors, eines Rechners oder mehrerer Prozessoren oder Rechner. Die Vorrichtung kann spezielle Logikschaltungen umfassen, z. B. ein FPGA (Field Programmable Gate Array-programmierbare Hardware-Logik) oder ein ASIC (anwendungsspezifische integrierte Schaltung). Der Apparat kann neben der Hardware auch einen Code einschließen, der eine Durchführungsumgebung für das betreffende Computerprogramm in der Frage erstellt, z. B. einen Code, der Prozessor-Firmware, einen Protokollstapel, ein Datenbankverwaltungssystem, ein Betriebssystem, oder eine Kombination einer oder mehrerer der genannten.
  • Ein Computerprogramm (auch bezeichnet als Programm, Software, Softwareanwendung, Script oder Code) kann in einer beliebigen Form von Programmiersprache geschrieben sein, einschließlich kompilierter oder interpretierter Sprachen, deklarativer oder verfahrensorientierter Sprachen, und das Programm kann in jeder beliebigen Form eingesetzt sein, darunter als unabhängiges Programm oder als ein Modul, eine Komponente, eine Subroutine, ein Objekt oder eine andere Einheit, die zur Benutzung in einer Rechenumgebung geeignet ist. Ein Computerprogramm kann, muss aber nicht, einer Datei in einem Dateisystem entsprechen. Ein Programm kann in einem Teil einer Datei gespeichert sein, die andere Programme oder Daten beinhaltet z. B. ein oder mehrere Scripts, die in einem Dokument in Markup-Sprache gespeichert sind), in einer einzelnen Datei speziell für das betreffende Programm oder in mehreren koordinierten Dateien z. B. Dateien, die ein oder mehrere Module, Unterprogramme oder Teile von Code speichern. Ein Computerprogramm kann auf einem Computer oder mehreren Computern eingerichtet sein oder ausgeführt werden, die einem Standort angeordnet sind oder über mehrere Standorte verteilt sind und über ein Kommunikationsnetz verbunden sind.
  • Die in dieser Spezifikation dargestellten Prozesse und Logik-Abläufe können durch einen oder mehrere programmierbare Prozessoren durchgeführt werden, die ein oder mehrere Computerprogramme ausführen, um Funktionen durch das Arbeiten mit Eingabedaten und das Erzeugen von Ausgaben auszuführen. Die Prozesse und die logischen Abläufe können auch durch logische Sonderzweckschaltungen durchgeführt werden, und der Apparat kann als Sonderzweckschaltung implementiert werden, z. B. ein FPGA (Field Programmable Gate Array) oder eine ASIC (anwendungsspezifische integrierte Schaltung).
  • Computer, die zur Ausführung eines Datenverarbeitungsprogramms geeignet sind, können beispielsweise allgemeine oder spezielle Mikroprozessoren oder beides oder jede andere Art einer Zentraleinheit beinhalten. Ganz allgemein nimmt eine zentrale Recheneinheit Anweisungen und Daten von einem Festwertspeicher oder einem Arbeitsspeicher oder von beiden entgegen. Die wesentlichen Elemente eines Computers sind eine zentrale Recheneinheit für das Durchführen von Operationen gemäß Anweisungen und ein oder mehr Speichergeräte für das Speichern von Anweisungen und Daten. Ganz allgemein gehören zu einem Computer auch ein oder mehrere Massenspeichergeräte für das Speichern von Daten, z. B. Magnet-, magnetooptische oder optische Disketten, um Daten entgegenzunehmen und/oder zu übertragen. Jedoch muss ein Computer solche Geräte nicht haben. Ferner kann ein Computer in einem anderen Gerät eingebettet sein, z. B. in einem Mobiltelefon, einem Organizer (PDA), einem mobilen Audio- oder Videoplayer, einer Spielkonsole, einem Funknavigationsempfänger (GPS) oder einem tragbaren Speichergerät, z. B. in einem USB-Stick, um nur einige zu nennen.
  • Computerlesbare Medien, die für das Speichern von Computerprogrammanweisungen und -daten geeignet sind, schließen alle Formen von Permanentspeichern, Medien- und Speichergeräten ein, einschließlich beispielsweise Halbleiter-Speichergeräte, z. B. EPROM, EEPROM und USB-Flash-Speicher; Magnetdisketten, z. B. interne Festplatten oder herausnehmbare Disketten; magnetooptische Disketten; und CD-ROMs und DVD-ROMs. Der Prozessor und der Speicher können durch logische Sonderzweckschaltungen ergänzt werden oder darin eingebaut sein.
  • Um die Interaktion mit einem Benutzer zu ermöglichen, können in dieser Spezifikation beschriebene Ausführungsformen des Gegenstands auf einem Computer mit einem Anzeigegerät implementiert werden, z. B. einem CRT-(Kathodenstrahlröhre) oder LCD-(Flüssigkristallanzeige)Monitor, mit welchem dem Benutzer Informationen angezeigt werden sowie einer Tastatur und einem Anzeigegerät, z. B. einer Maus oder einem Trackball, mit denen der Benutzer Eingaben in den Computer vornehmen kann. Es können auch andere Arten von Einrichtungen verwendet werden, um für eine Interaktion mit einem Benutzer zu sorgen; beispielsweise kann eine dem Benutzer gelieferte Rückkopplung beliebiger Form von sensorischer Rückkopplung vorliegen, z. B. eine visuelle Rückkopplung, auditive Rückkopplung oder taktile Rückkopplung; und die Eingabe vom Benutzer kann in beliebiger Form empfangen werden, einschließlich akustischer, Sprach- oder taktiler Eingabe. Darüber hinaus kann ein Computer über das Senden von Dokumenten an und das Empfangen von Dokumenten von einer Einrichtung, die vom Benutzer verwendet wird, mit einem Benutzer interagieren; beispielsweise über das Senden von Webpages an einen Webbrowser auf dem Clientgerät des Benutzers als Antwort auf die vom Webbrowser empfangenen Aufforderungen.
  • Ausführungsformen des in dieser Spezifikation betrachteten Gegenstands können in ein Computersystem implementiert werden, das eine Backend-Komponente (z.B. einen Datenserver), oder eine Middleware-Komponente (z.B. einen Anwendungsserver), oder eine Frontend-Komponente (z.B. einen Client-Computer mit graphischem Benutzerinterface oder Webbrowser) umfasst, worüber der Benutzer mit einer Implementierung des in dieser Spezifikation betrachteten Gegenstands interagieren kann, oder eine beliebige Kombination aus solchen Backend, Middleware- oder Frontend-Komponenten. Die Komponenten des Systems können durch eine beliebige Form oder ein beliebiges Medium digitaler Datenkommunikation miteinander verbunden sein, z. B. ein Kommunikationsnetz. So beinhalten beispielsweise Kommunikationsnetzwerke ein lokales Netzwerk („LAN“), ein Fernnetz („WAN“), z.B. das Internet.
  • Das Rechensystem kann Client und Server beinhalten. Ein Client und Server befinden sich im Allgemeinen ortsfern voneinander und interagieren typischerweise über ein Kommunikationsnetz. Die Beziehung zwischen Client und Server entsteht aufgrund von Computerprogrammen, die auf den jeweiligen Computern laufen und die eine Client-Server-Beziehung zueinander haben.
  • Zwar beinhaltet diese Spezifikation viele spezifische Implementierungsdetails, jedoch sollten diese nicht als Beschränkungen des Umfangs oder des Anspruchs ausgelegt werden, sondern vielmehr als Beschreibung spezifischer Merkmale bestimmter Ausführungsformen bestimmter Erfindungen. Bestimmte Merkmale, die in dieser Spezifikation im Kontext der unterschiedlichen Ausführungsformen beschrieben werden, können auch in Kombination in einer einzelnen Ausführungsform implementiert werden. Andererseits können verschiedene Merkmale, die im Kontext einer einzelnen Ausführungsform beschrieben werden, in mehreren Ausführungsformen oder in jeder geeigneten Unterkombination implementiert werden. Außerdem können ein oder mehrere Merkmale einer beanspruchten Kombination in einigen Fällen aus der Kombination herausgelöst werden, auch wenn die Merkmale vorstehend als in gewissen Kombinationen funktionierend beschrieben oder gar als eine Kombination beansprucht werden, und die beanspruchte Kombination kann an eine Unterkombination oder eine Variation einer Unterkombination verwiesen werden.
  • Ebenso werden Operationen in den Zeichnungen zwar in einer bestimmten Reihenfolge dargestellt, aber dies sollte nicht als Anfordernis verstanden werden, dass solche Operationen in der bestimmten gezeigten Reihenfolge oder in einer aufeinanderfolgenden Reihenfolge ausgeführt werden müssen oder dass alle dargestellten Operationen ausgeführt werden müssen, um erwünschte Ergebnisse zu erzielen. Unter bestimmten Umständen können Multitasking und eine Parallelbearbeitung vorteilhaft sein. Darüber hinaus sollte die Trennung verschiedener Systemkomponenten in den vorstehend beschriebenen Ausführungsformen nicht in allen Ausführungsformen erforderlich aufgefasst werden, und es versteht sich, dass die beschriebenen Programmkomponenten und Systeme im Allgemeinen zusammen in ein einziges Softwareprodukt integriert oder zu mehreren Softwareprodukten verkapselt werden können.
  • Folglich wurden bestimmte Ausführungsformen des Gegenstands beschrieben. Weitere Ausführungsformen gehören zum Umfang der folgenden Ansprüche. Die in den Ansprüchen ausgeführten Vorgänge können beispielsweise in einer anderen Reihenfolge ausgeführt werden und dennoch gewünschte Ergebnisse erzielen. Die in den beigefügten Figuren dargestellten Verfahren erfordern beispielsweise nicht notwendigerweise die gezeigte Reihenfolge oder sequentielle Reihenfolge, um erwünschte Ergebnisse zu erzielen. Bei bestimmten Implementierungen können Multitasking und eine Parallelbearbeitung vorteilhaft sein.

Claims (18)

  1. Ein System zum Erzeugen einer entsprechenden neuronalen Netzwerkausgabe für jede der Vielzahl von Eingaben, wobei das Erzeugen die Verarbeitung jeder Eingabe durch jede Vielzahl von neuronalen Netzwerkschichten umfasst, um die entsprechende neuronale Netzwerkausgabe für die Eingabe zu erzeugen, wobei die neuronalen Netzwerkschichten in einer ausgerichteten Graphenstruktur angeordnet sind und wobei jede neuronale Netzwerkschicht eine entsprechende Stapelgröße aufweist, wobei das System umfasst: einen oder mehrere Computer; und ein computerlesbares Medium, das mit einem oder mehreren Comptern gekoppelt ist und darauf gespeicherte Anweisungen beinhaltet, die, wenn sie durch den einen oder mehrere Computer ausgeführt werden bewirken, dass der eine oder die mehreren Computer für die Operationen jeder neuronalen Netzwerkschicht folgendes umfasst: Empfangen einer Vielzahl von Eingaben, die auf der neuronalen Netzwerkschicht zu verarbeiten sind; Bilden eines oder mehrerer Eingabestapel aus der Vielzahl von Eingaben, wobei jeder Stapel eine Anzahl von Eingaben aufweist, die gleich der entsprechenden Stapelgröße für die neuronale Netzwerkschicht sind; Auswählen einer Anzahl einer oder mehrerer Stapel aus den zu verarbeiteten Eingaben, wobei eine Zählung der Eingaben in der Anzahl einer oder mehrerer Stapel größer, kleiner oder gleich zu der entsprechenden zugeordneten Stapelgröße einer nachfolgenden Schicht in der ausgerichteten Graphstruktur ist; und; Verarbeiten der Anzahl einer oder mehrerer Eingabestapel, um die entsprechende neuronale Netzwerkschichtausgabe zu erzeugen.
  2. Das System nach Anspruch 1, wobei die jeweilige Stapelgröße auf mindestens einem Gewichtswiederverwendungswert basiert, wobei der Gewichtswiederverwendungswert die Anzahl der benötigten Gewichtsdateneingaben für eine Berechnungszeit von Ausgabewerten anzeigt, die für Gewichtsdateneingaben bei einer Matrix-Recheneinheit länger ist als die Ladezeit der Gewichtsdateneingaben aus dem Speicher
  3. System nach Anspruch 2, wobei der Gewichtswiederverwendungswert mindestens auf einer Taktrate des Speichers für die Gewichtseingaben basiert.
  4. System nach Anspruch 2 oder 3, wobei jede Stapelgröße auf mindestens dem Quotienten des Gewichtswiederverwendungswerts mit der Anzahl der Einzelfälle basiert, in denen Gewichtseingaben für die entsprechende Schicht wiederverwendet werden.
  5. System nach einem der Ansprüche 2 bis 4, wobei die Vielzahl von neuronalen Netzwerkschichten an einer Matrix-Recheneinheit verarbeitet wird, wobei das Verarbeiten mindestens eines Eingabestapels die Berechnung der kumulierten Werte für jede Eingabe umfasst, die die Matrix-Recheneinheit nutzen.
  6. System nach einem der Ansprüche 1 bis 5, wobei jede Eingabe einer bestimmten Bildressource entspricht.
  7. System nach einem der Ansprüche 1 bis 5, wobei jede Eingabe einer Audioprobe entspricht.
  8. System nach einem der Ansprüche 1 bis 7, ferner umfassend, das Bilden eines Stapels aus einer oder mehreren Schichtausgaben zur Verarbeitung an der nachfolgenden Schicht.
  9. System nach einem der vorhergehenden Ansprüche 1 bis 8, ferner umfassend, das Erzeugen einer entsprechenden Inferenz für jede Ausgabe.
  10. Ein computerlesbares Medium mit darauf gespeicherten Anweisungen, die, wenn sie von einem oder mehreren Computern ausgeführt werden bewirken, dass der eine oder mehrere Computer Operationen zum Erzeugen einer entsprechenden neuronalen Netzwerkausgabe für jede der Vielzahl von Eingaben ausführen, wobei das Erzeugen jeweils die Verarbeitung jeder Eingabe durch jede Vielzahl von neuronalen Netzwerkschichten umfasst, um die jeweilige neuronale Netzwerkausgabe für die Eingabe zu erzeugen, wobei die neuronalen Netzwerkschichten in einer ausgerichteten Graphenstruktur angeordnet sind und wobei jede neuronale Netzwerkschicht für jede der neuronalen Netzwerkschichten eine entsprechende Stapelgröße umfasst: Empfangen einer Vielzahl von Eingaben, die auf der neuronalen Netzwerkschicht zu verarbeiten sind; Bilden eines oder mehrerer Eingabestapel aus der Vielzahl von Eingaben, wobei jeder Stapel eine Anzahl von Eingaben aufweist, die gleich der entsprechenden Stapelgröße für die neuronale Netzwerkschicht sind; Auswählen einer Anzahl einer oder mehrerer Stapel aus den zu verarbeiteten Eingaben, wobei eine Zählung der Eingaben in der Anzahl einer oder mehrerer Stapel größer, kleiner oder gleich zu der entsprechenden zugeordneten Stapelgröße einer nachfolgenden Schicht in der ausgerichteten Graphstruktur ist; und Verarbeiten der Anzahl einer oder mehrerer Eingabestapel, um die entsprechende neuronale Netzwerkschichtausgabe zu erzeugen.
  11. Das computerlesbare Medium nach Anspruch 10, wobei die jeweilige Stapelgröße auf mindestens einem Gewichtswiederverwendungswert basiert, wobei der Gewichtswiederverwendungswert die Anzahl der benötigten Gewichtsdateneingaben für eine Berechnungszeit von Ausgabewerten anzeigt, die für Gewichtsdateneingaben bei einer Matrix-Recheneinheit länger ist als die Ladezeit der Gewichtsdateneingaben aus dem Speicher.
  12. Das computerlesbare Medium nach Anspruch 11, wobei der Gewichtswiederverwendungswert mindestens auf einer Taktrate des Speichers für die Gewichtseingaben basiert.
  13. Das computerlesbare Medium nach Anspruch 11 oder 12, wobei jede Stapelgröße auf mindestens dem Quotienten des Gewichtswiederverwendungswerts mit der Anzahl der Einzelfälle basiert, in denen Gewichtseingaben für die entsprechende Schicht wiederverwendet werden.
  14. Das computerlesbare Medium nach einem der Ansprüche 11 bis 13, wobei die Vielzahl von neuronalen Netzwerkschichten an einer Matrix-Recheneinheit verarbeitet wird, wobei das Verarbeiten mindestens eines Eingabestapels die Berechnung der kumulierten Werte für jede Eingabe umfasst, die die Matrix-Recheneinheit nutzen.
  15. Das computerlesbare Medium nach einem der Ansprüche 10 bis 14, wobei jede Eingabe einer bestimmten Bildressource entspricht.
  16. Das computerlesbare Medium nach einem der Ansprüche 10 bis 14, wobei jede Eingabe einer Audioprobe entspricht.
  17. Das computerlesbare Medium nach einem der Ansprüche 10 bis 16, ferner umfassend, das Bilden eines Stapels aus einer oder mehreren Schichtausgaben zur Verarbeitung an der nachfolgenden Schicht.
  18. Das computerlesbare Medium nach einem der der Ansprüche 10 bis 17, ferner umfassend, das Erzeugen einer entsprechenden Inferenz für jede Ausgabe.
DE202016107476.2U 2015-05-21 2016-05-03 Stapel-Verarbeitung in einem neuronalen Netzwerkprozessor Active DE202016107476U1 (de)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201562165020P 2015-05-21 2015-05-21
US62/165,020 2015-05-21
US14/844,431 US10083395B2 (en) 2015-05-21 2015-09-03 Batch processing in a neural network processor
US14/844,431 2015-09-03

Publications (1)

Publication Number Publication Date
DE202016107476U1 true DE202016107476U1 (de) 2017-01-23

Family

ID=55967450

Family Applications (2)

Application Number Title Priority Date Filing Date
DE202016107476.2U Active DE202016107476U1 (de) 2015-05-21 2016-05-03 Stapel-Verarbeitung in einem neuronalen Netzwerkprozessor
DE112016002292.1T Withdrawn DE112016002292T5 (de) 2015-05-21 2016-05-03 Stapel-verarbeitung in einem neuronalen netzwerkprozessor

Family Applications After (1)

Application Number Title Priority Date Filing Date
DE112016002292.1T Withdrawn DE112016002292T5 (de) 2015-05-21 2016-05-03 Stapel-verarbeitung in einem neuronalen netzwerkprozessor

Country Status (11)

Country Link
US (5) US10083395B2 (de)
EP (2) EP4235449A3 (de)
JP (5) JP6640243B2 (de)
KR (6) KR20230165890A (de)
CN (2) CN107454965B (de)
DE (2) DE202016107476U1 (de)
DK (1) DK3298547T3 (de)
GB (2) GB2553053B (de)
HK (1) HK1245463A1 (de)
TW (2) TWI591549B (de)
WO (1) WO2016186823A1 (de)

Families Citing this family (131)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10083395B2 (en) * 2015-05-21 2018-09-25 Google Llc Batch processing in a neural network processor
US10417555B2 (en) * 2015-05-29 2019-09-17 Samsung Electronics Co., Ltd. Data-optimized neural network traversal
US20170153892A1 (en) * 2015-11-30 2017-06-01 Intel Corporation Instruction And Logic For Programmable Fabric Hierarchy And Cache
US10037490B2 (en) 2016-12-13 2018-07-31 Google Llc Performing average pooling in hardware
US10521488B1 (en) 2016-12-30 2019-12-31 X Development Llc Dynamic partitioning
US10248613B2 (en) * 2017-01-10 2019-04-02 Qualcomm Incorporated Data bus activation in an electronic device
US10824934B2 (en) * 2017-01-12 2020-11-03 Texas Instruments Incorporated Methods and apparatus for matrix processing in a convolutional neural network
US10896367B2 (en) * 2017-03-07 2021-01-19 Google Llc Depth concatenation using a matrix computation unit
US9691019B1 (en) * 2017-03-07 2017-06-27 Google Inc. Depth concatenation using a matrix computation unit
US10909447B2 (en) 2017-03-09 2021-02-02 Google Llc Transposing neural network matrices in hardware
CN107085562B (zh) * 2017-03-23 2020-11-03 中国科学院计算技术研究所 一种基于高效复用数据流的神经网络处理器及设计方法
KR102414583B1 (ko) * 2017-03-23 2022-06-29 삼성전자주식회사 머신 러닝을 수행하는 전자 장치 및 머신 러닝 수행 방법
US10387298B2 (en) * 2017-04-04 2019-08-20 Hailo Technologies Ltd Artificial neural network incorporating emphasis and focus techniques
US10795836B2 (en) * 2017-04-17 2020-10-06 Microsoft Technology Licensing, Llc Data processing performance enhancement for neural networks using a virtualized data iterator
US10019668B1 (en) 2017-05-19 2018-07-10 Google Llc Scheduling neural network processing
US11144828B2 (en) 2017-06-09 2021-10-12 Htc Corporation Training task optimization system, training task optimization method and non-transitory computer readable medium for operating the same
CN107146616B (zh) * 2017-06-13 2020-05-08 Oppo广东移动通信有限公司 设备控制方法及相关产品
CN107729990B (zh) * 2017-07-20 2021-06-08 上海寒武纪信息科技有限公司 支持离散数据表示的用于执行正向运算的装置及方法
US11893393B2 (en) 2017-07-24 2024-02-06 Tesla, Inc. Computational array microprocessor system with hardware arbiter managing memory requests
US11157287B2 (en) 2017-07-24 2021-10-26 Tesla, Inc. Computational array microprocessor system with variable latency memory access
US11409692B2 (en) 2017-07-24 2022-08-09 Tesla, Inc. Vector computational unit
US10671349B2 (en) 2017-07-24 2020-06-02 Tesla, Inc. Accelerated mathematical engine
US11157441B2 (en) 2017-07-24 2021-10-26 Tesla, Inc. Computational array microprocessor system using non-consecutive data formatting
US11966833B2 (en) 2017-08-09 2024-04-23 Google Llc Accelerating neural networks in hardware using interconnected crossbars
US10839286B2 (en) * 2017-09-14 2020-11-17 Xilinx, Inc. System and method for implementing neural networks in integrated circuits
US11437032B2 (en) 2017-09-29 2022-09-06 Shanghai Cambricon Information Technology Co., Ltd Image processing apparatus and method
US11620490B2 (en) * 2017-10-17 2023-04-04 Xilinx, Inc. Multi-layer neural network processing by a neural network accelerator using host communicated merged weights and a package of per-layer instructions
CN111279362B (zh) 2017-10-27 2024-03-08 谷歌有限责任公司 胶囊神经网络
CN107818367B (zh) * 2017-10-30 2020-12-29 中国科学院计算技术研究所 用于神经网络的处理系统和处理方法
KR102586173B1 (ko) * 2017-10-31 2023-10-10 삼성전자주식회사 프로세서 및 그 제어 방법
WO2019087500A1 (ja) * 2017-11-02 2019-05-09 Tdk株式会社 ニューロモルフィック素子を含むアレイ装置およびニューラルネットワークシステム
WO2019090325A1 (en) * 2017-11-06 2019-05-09 Neuralmagic, Inc. Methods and systems for improved transforms in convolutional neural networks
KR20190051697A (ko) 2017-11-07 2019-05-15 삼성전자주식회사 뉴럴 네트워크의 디컨벌루션 연산을 수행하는 장치 및 방법
KR102424962B1 (ko) 2017-11-15 2022-07-25 삼성전자주식회사 병렬 연산 처리를 수행하는 메모리 장치 및 이를 포함하는 메모리 모듈
US20190156214A1 (en) 2017-11-18 2019-05-23 Neuralmagic Inc. Systems and methods for exchange of data in distributed training of machine learning algorithms
JP7179853B2 (ja) * 2017-12-12 2022-11-29 アマゾン テクノロジーズ インコーポレイテッド オンチップの計算ネットワーク
US10803379B2 (en) 2017-12-12 2020-10-13 Amazon Technologies, Inc. Multi-memory on-chip computational network
EP3729340A4 (de) * 2017-12-18 2021-12-29 Mythic, Inc. Systeme und verfahren zur zuordnung von matrixberechnungen zu einem matrixmultiplikationsbeschleuniger
CN107844828B (zh) * 2017-12-18 2021-07-30 南京地平线机器人技术有限公司 神经网络中的卷积计算方法和电子设备
CN108108811B (zh) * 2017-12-18 2021-07-30 南京地平线机器人技术有限公司 神经网络中的卷积计算方法和电子设备
CN108345934B (zh) * 2018-01-16 2020-11-03 中国科学院计算技术研究所 一种用于神经网络处理器的激活装置及方法
CN111630505B (zh) * 2018-01-24 2024-06-28 阿里巴巴集团控股有限公司 深度学习加速器系统及其方法
US11561791B2 (en) 2018-02-01 2023-01-24 Tesla, Inc. Vector computational unit receiving data elements in parallel from a last row of a computational array
US10796198B2 (en) 2018-02-08 2020-10-06 Western Digital Technologies, Inc. Adjusting enhancement coefficients for neural network engine
US11164072B2 (en) 2018-02-08 2021-11-02 Western Digital Technologies, Inc. Convolution engines for systolic neural network processor
US11423300B1 (en) * 2018-02-09 2022-08-23 Deepmind Technologies Limited Selecting actions by reverting to previous learned action selection policies
US11630666B2 (en) 2018-02-13 2023-04-18 Shanghai Cambricon Information Technology Co., Ltd Computing device and method
KR102252137B1 (ko) 2018-02-13 2021-05-13 상하이 캠브리콘 인포메이션 테크놀로지 컴퍼니 리미티드 계산 장치 및 방법
CN108364061B (zh) * 2018-02-13 2020-05-05 北京旷视科技有限公司 运算装置、运算执行设备及运算执行方法
US11663002B2 (en) 2018-02-13 2023-05-30 Shanghai Cambricon Information Technology Co., Ltd Computing device and method
CN116991226A (zh) 2018-02-14 2023-11-03 上海寒武纪信息科技有限公司 处理器的控制装置、方法及设备
KR102487535B1 (ko) * 2018-02-20 2023-01-12 삼성전자주식회사 시스톨릭 배열(Systolic Array)을 이용하여 딥 러닝(Deep Learning) 연산을 수행하는 방법 및 장치
US12008466B1 (en) * 2018-03-23 2024-06-11 Amazon Technologies, Inc. Processor with control flow
US11188814B2 (en) * 2018-04-05 2021-11-30 Arm Limited Systolic convolutional neural network
CN108628799B (zh) * 2018-04-17 2021-09-14 上海交通大学 可重构的单指令多数据脉动阵列结构、处理器及电子终端
US11783174B2 (en) * 2018-05-04 2023-10-10 Apple Inc. Splitting of input data for processing in neural network processor
WO2019218896A1 (zh) 2018-05-18 2019-11-21 上海寒武纪信息科技有限公司 计算方法以及相关产品
CN108777153B (zh) * 2018-05-25 2021-01-26 华中科技大学 一种多端输入突触器件及其可塑性调制方法
US10832133B2 (en) 2018-05-31 2020-11-10 Neuralmagic Inc. System and method of executing neural networks
US10963787B2 (en) 2018-05-31 2021-03-30 Neuralmagic Inc. Systems and methods for generation of sparse code for convolutional neural networks
US11449363B2 (en) 2018-05-31 2022-09-20 Neuralmagic Inc. Systems and methods for improved neural network execution
US11216732B2 (en) 2018-05-31 2022-01-04 Neuralmagic Inc. Systems and methods for generation of sparse code for convolutional neural networks
JP2021527287A (ja) * 2018-06-05 2021-10-11 ライテリジェンス・インコーポレイテッド 光電子コンピューティングシステム
US10698392B2 (en) * 2018-06-22 2020-06-30 Applied Materials, Inc. Using graphics processing unit for substrate routing and throughput modeling
WO2020001438A1 (zh) 2018-06-27 2020-01-02 上海寒武纪信息科技有限公司 片上代码断点调试方法、片上处理器及芯片断点调试系统
DE102018115902A1 (de) 2018-07-01 2020-01-02 Oliver Bartels SIMD-Prozessor mit CAM zur Operandenauswahl nach Mustererkennung
US11138497B2 (en) * 2018-07-17 2021-10-05 Macronix International Co., Ltd In-memory computing devices for neural networks
CN109002879B (zh) * 2018-07-23 2021-09-03 山东浪潮科学研究院有限公司 神经网络模型的可视化建模方法和装置
JP6867518B2 (ja) 2018-08-28 2021-04-28 カンブリコン テクノロジーズ コーポレイション リミティド データ前処理方法、装置、コンピュータ機器及び記憶媒体
CN112732601B (zh) * 2018-08-28 2024-06-18 中科寒武纪科技股份有限公司 数据预处理方法、装置、计算机设备和存储介质
US11010313B2 (en) * 2018-08-29 2021-05-18 Qualcomm Incorporated Method, apparatus, and system for an architecture for machine learning acceleration
EP3859488A4 (de) 2018-09-28 2022-06-29 Shanghai Cambricon Information Technology Co., Ltd Signalverarbeitungsvorrichtung, signalverarbeitungsverfahren und zugehöriges produkt
CN112789627B (zh) * 2018-09-30 2023-08-22 华为技术有限公司 一种神经网络处理器、数据处理方法及相关设备
WO2020072274A1 (en) 2018-10-01 2020-04-09 Neuralmagic Inc. Systems and methods for neural network pruning with accuracy preservation
WO2020073925A1 (zh) * 2018-10-09 2020-04-16 上海寒武纪信息科技有限公司 运算方法、装置、计算机设备和存储介质
WO2020073923A1 (zh) * 2018-10-09 2020-04-16 上海寒武纪信息科技有限公司 运算方法、装置、计算机设备和存储介质
KR20200043169A (ko) 2018-10-17 2020-04-27 삼성전자주식회사 뉴럴 네트워크의 파라미터를 양자화하는 방법 및 장치
KR20200051278A (ko) 2018-11-05 2020-05-13 삼성전자주식회사 인공 신경망에서의 작업 관리 방법 및 이를 포함하는 시스템
JP7315317B2 (ja) 2018-11-09 2023-07-26 株式会社Preferred Networks プロセッサおよびプロセッサのデータ転送方法
KR102451519B1 (ko) * 2018-11-20 2022-10-07 삼성전자주식회사 룩업 테이블 기반의 비트-시리얼 처리 요소를 포함하는 심층 신경망 가속기
KR20200061164A (ko) * 2018-11-23 2020-06-02 삼성전자주식회사 뉴럴 네트워크 연산 수행을 위한 뉴럴 네트워크 장치, 뉴럴 네트워크 장치의 동작 방법 및 뉴럴 네트워크 장치를 포함하는 애플리케이션 프로세서
KR20200066953A (ko) 2018-12-03 2020-06-11 삼성전자주식회사 Pim을 채용하는 반도체 메모리 장치 및 그 동작 방법
US10990525B2 (en) * 2018-12-12 2021-04-27 Mipsology SAS Caching data in artificial neural network computations
CN113196233A (zh) * 2018-12-19 2021-07-30 ams有限公司 用模拟神经元的单个物理层实现多层神经网络
CN111385462A (zh) 2018-12-28 2020-07-07 上海寒武纪信息科技有限公司 信号处理装置、信号处理方法及相关产品
US11544559B2 (en) 2019-01-08 2023-01-03 Neuralmagic Inc. System and method for executing convolution in a neural network
US10789510B2 (en) * 2019-01-11 2020-09-29 Google Llc Dynamic minibatch sizes
US11461653B2 (en) * 2019-01-23 2022-10-04 StradVision, Inc. Learning method and learning device for CNN using 1xK or Kx1 convolution to be used for hardware optimization, and testing method and testing device using the same
CN109919321A (zh) * 2019-02-01 2019-06-21 京微齐力(北京)科技有限公司 单元具有本地累加功能的人工智能模块及系统芯片
US10929058B2 (en) 2019-03-25 2021-02-23 Western Digital Technologies, Inc. Enhanced memory device architecture for machine learning
US11783176B2 (en) 2019-03-25 2023-10-10 Western Digital Technologies, Inc. Enhanced storage device memory architecture for machine learning
CN111832739B (zh) 2019-04-18 2024-01-09 中科寒武纪科技股份有限公司 一种数据处理方法及相关产品
US20200334522A1 (en) 2019-04-18 2020-10-22 Cambricon Technologies Corporation Limited Data processing method and related products
US11645512B2 (en) * 2019-04-30 2023-05-09 Baidu Usa Llc Memory layouts and conversion to improve neural network inference performance
EP3772022A1 (de) 2019-06-12 2021-02-03 Shanghai Cambricon Information Technology Co., Ltd Verfahren zur bestimmung von quantisierungsparametern in einem neuronalen netzwerk und zugehörige produkte
US11676029B2 (en) 2019-06-12 2023-06-13 Shanghai Cambricon Information Technology Co., Ltd Neural network quantization parameter determination method and related products
US11195095B2 (en) 2019-08-08 2021-12-07 Neuralmagic Inc. System and method of accelerating execution of a neural network
EP4020321A4 (de) 2019-08-23 2024-01-17 Anhui Cambricon Information Technology Co., Ltd. Datenverarbeitungsverfahren, vorrichtung, computervorrichtung und speichermedium
KR20210030653A (ko) * 2019-09-10 2021-03-18 주식회사 모빌린트 복수 개의 코어를 갖는 연산 장치
US11842169B1 (en) 2019-09-25 2023-12-12 Amazon Technologies, Inc. Systolic multiply delayed accumulate processor architecture
TWI765336B (zh) * 2019-10-08 2022-05-21 國立清華大學 適用於卷積神經網路之記憶體優化實現之區塊式推論方法及其系統
US12026604B2 (en) 2019-11-11 2024-07-02 NextVPU (Shanghai) Co., Ltd. Memory pre-allocation for forward calculation in a neural network
CN112783640B (zh) * 2019-11-11 2023-04-04 上海肇观电子科技有限公司 预先分配内存的方法与设备、电路、电子设备及介质
US11861485B2 (en) * 2019-11-22 2024-01-02 Baidu Usa Llc Data format transform method to improve AI engine MAC utilization
US11467806B2 (en) 2019-11-27 2022-10-11 Amazon Technologies, Inc. Systolic array including fused multiply accumulate with efficient prenormalization and extended dynamic range
TWI727521B (zh) * 2019-11-27 2021-05-11 瑞昱半導體股份有限公司 動態語音辨識方法及其裝置
US11816446B2 (en) 2019-11-27 2023-11-14 Amazon Technologies, Inc. Systolic array component combining multiple integer and floating-point data types
US11586932B2 (en) * 2020-03-10 2023-02-21 International Business Machines Corporation Model training with variable batch sizing and gradient checkpoint segments
US11620830B2 (en) * 2020-03-31 2023-04-04 Ford Global Technologies, Llc Context dependent transfer learning adaptation to achieve fast performance in inference and update
WO2021237755A1 (zh) * 2020-05-29 2021-12-02 华为技术有限公司 神经网络调度方法及装置
WO2021243489A1 (zh) * 2020-05-30 2021-12-09 华为技术有限公司 一种神经网络的数据处理方法及装置
US11422773B1 (en) 2020-06-29 2022-08-23 Amazon Technologies, Inc. Multiple busses within a systolic array processing element
US11308027B1 (en) 2020-06-29 2022-04-19 Amazon Technologies, Inc. Multiple accumulate busses in a systolic array
US11308026B1 (en) * 2020-06-29 2022-04-19 Amazon Technologies, Inc. Multiple busses interleaved in a systolic array
US11823018B1 (en) * 2020-06-30 2023-11-21 Cadence Design Systems, Inc. Method, product, and apparatus for a machine learning process using weight sharing within a systolic array having reduced memory bandwidth
US11687831B1 (en) 2020-06-30 2023-06-27 Cadence Design Systems, Inc. Method, product, and apparatus for a multidimensional processing array for hardware acceleration of convolutional neural network inference
US11676068B1 (en) 2020-06-30 2023-06-13 Cadence Design Systems, Inc. Method, product, and apparatus for a machine learning process leveraging input sparsity on a pixel by pixel basis
US11651283B1 (en) 2020-06-30 2023-05-16 Cadence Design Systems, Inc. Method, product, and apparatus for a machine learning process using dynamic rearrangement of sparse data and corresponding weights
US11615320B1 (en) 2020-06-30 2023-03-28 Cadence Design Systems, Inc. Method, product, and apparatus for variable precision weight management for neural networks
US20220036163A1 (en) * 2020-07-29 2022-02-03 Apple Inc. Chained neural engine write-back architecture
CN111898698B (zh) * 2020-08-10 2021-07-27 腾讯科技(深圳)有限公司 对象的处理方法及装置、存储介质和电子设备
JP7358312B2 (ja) * 2020-08-25 2023-10-10 株式会社東芝 記憶装置およびニューラルネットワーク装置
KR20220027500A (ko) * 2020-08-27 2022-03-08 에스케이하이닉스 주식회사 가속 장치, 데이터 저장 장치, 데이터 처리 시스템 및 가속 장치의 동작방법
US11556757B1 (en) 2020-12-10 2023-01-17 Neuralmagic Ltd. System and method of executing deep tensor columns in neural networks
KR20220090104A (ko) 2020-12-22 2022-06-29 삼성전자주식회사 컨벌루션 연산을 위한 데이터 전송 방법, 페처 및 컨벌루션 연산 장치
US20220318013A1 (en) * 2021-03-25 2022-10-06 Intel Corporation Supporting 8-bit floating point format operands in a computing architecture
CN115204355A (zh) * 2021-04-14 2022-10-18 蒂普爱可斯有限公司 能够重新使用数据的神经处理单元及其方法
US11880682B2 (en) 2021-06-30 2024-01-23 Amazon Technologies, Inc. Systolic array with efficient input reduction and extended array performance
KR102590993B1 (ko) * 2021-09-03 2023-10-19 한국전자기술연구원 적응형 배치 프로세싱 방법 및 시스템
US11714556B2 (en) * 2021-09-14 2023-08-01 quadric.io, Inc. Systems and methods for accelerating memory transfers and computation efficiency using a computation-informed partitioning of an on-chip data buffer and implementing computation-aware data transfer operations to the on-chip data buffer
US11960982B1 (en) 2021-10-21 2024-04-16 Neuralmagic, Inc. System and method of determining and executing deep tensor columns in neural networks

Family Cites Families (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5014235A (en) 1987-12-15 1991-05-07 Steven G. Morton Convolution memory
US5136717A (en) 1988-11-23 1992-08-04 Flavors Technology Inc. Realtime systolic, multiple-instruction, single-data parallel computer system
US5138695A (en) 1989-10-10 1992-08-11 Hnc, Inc. Systolic array image processing system
US5337395A (en) 1991-04-08 1994-08-09 International Business Machines Corporation SPIN: a sequential pipeline neurocomputer
US5146543A (en) 1990-05-22 1992-09-08 International Business Machines Corp. Scalable neural array processor
JPH04290155A (ja) 1991-03-19 1992-10-14 Fujitsu Ltd 並列データ処理方式
US5903454A (en) 1991-12-23 1999-05-11 Hoffberg; Linda Irene Human-factored interface corporating adaptive pattern recognition based controller apparatus
US5278945A (en) * 1992-01-10 1994-01-11 American Neuralogical, Inc. Neural processor apparatus
JPH0652132A (ja) * 1992-07-28 1994-02-25 Mitsubishi Electric Corp 並列演算半導体集積回路装置およびそれを用いたシステム
JPH06203005A (ja) * 1992-10-27 1994-07-22 Eastman Kodak Co 高速区分化ニューラルネットワーク及びその構築方法
US5517667A (en) * 1993-06-14 1996-05-14 Motorola, Inc. Neural network that does not require repetitive training
US5583964A (en) * 1994-05-02 1996-12-10 Motorola, Inc. Computer utilizing neural network and method of using same
US5799134A (en) 1995-03-13 1998-08-25 Industrial Technology Research Institute One dimensional systolic array architecture for neural network
KR0152710B1 (ko) * 1995-12-21 1998-10-15 양승택 AT-Bus에 장착하기 위한 병렬 신경망 보드의 제어회로
US5812993A (en) 1996-03-07 1998-09-22 Technion Research And Development Foundation Ltd. Digital hardware architecture for realizing neural network
US6038337A (en) 1996-03-29 2000-03-14 Nec Research Institute, Inc. Method and apparatus for object recognition
JPH11177399A (ja) 1997-12-15 1999-07-02 Mitsubishi Electric Corp クロック遅延回路およびこれを用いた発振回路、位相同期回路、クロック生成回路
GB9902115D0 (en) 1999-02-01 1999-03-24 Axeon Limited Neural networks
US6917703B1 (en) * 2001-02-28 2005-07-12 Nevengineering, Inc. Method and apparatus for image analysis of a gabor-wavelet transformed image using a neural network
US20020143720A1 (en) * 2001-04-03 2002-10-03 Anderson Robert Lee Data structure for improved software implementation of a neural network
JP4314017B2 (ja) * 2002-11-06 2009-08-12 キヤノン株式会社 階層処理装置
US7245767B2 (en) 2003-08-21 2007-07-17 Hewlett-Packard Development Company, L.P. Method and apparatus for object identification, classification or verification
US7634137B2 (en) 2005-10-14 2009-12-15 Microsoft Corporation Unfolded convolution for fast feature extraction
WO2008067676A1 (en) 2006-12-08 2008-06-12 Medhat Moussa Architecture, system and method for artificial neural network implementation
US8184696B1 (en) 2007-09-11 2012-05-22 Xilinx, Inc. Method and apparatus for an adaptive systolic array structure
JP5376920B2 (ja) 2008-12-04 2013-12-25 キヤノン株式会社 コンボリューション演算回路、階層的コンボリューション演算回路及び物体認識装置
KR101108987B1 (ko) * 2009-03-05 2012-01-31 한국전자통신연구원 공간 분할을 이용한 게임 캐릭터의 패턴 학습 장치 및 방법
US8442927B2 (en) 2009-07-30 2013-05-14 Nec Laboratories America, Inc. Dynamically configurable, multi-ported co-processor for convolutional neural networks
TWI525558B (zh) 2011-01-17 2016-03-11 Univ Nat Taipei Technology Resilient high - speed hardware reverse transfer and feedback type neural network system
SG182933A1 (en) * 2011-01-19 2012-08-30 Agency Science Tech & Res A data structure and a method for using the data structure
US8924455B1 (en) 2011-02-25 2014-12-30 Xilinx, Inc. Multiplication of matrices using systolic arrays
US9147155B2 (en) * 2011-08-16 2015-09-29 Qualcomm Incorporated Method and apparatus for neural temporal coding, learning and recognition
US9443190B2 (en) * 2011-11-09 2016-09-13 Qualcomm Incorporated Methods and apparatus for neural pattern sequence completion and neural pattern hierarchical replay by invoking replay of a referenced neural pattern
JP5906061B2 (ja) * 2011-11-15 2016-04-20 Kddi株式会社 学習装置、学習方法、プログラム
TW201331855A (zh) 2012-01-19 2013-08-01 Univ Nat Taipei Technology 具自由回饋節點的高速硬體倒傳遞及回饋型類神經網路
US9524730B2 (en) 2012-03-30 2016-12-20 Ohio State Innovation Foundation Monaural speech filter
US9477925B2 (en) 2012-11-20 2016-10-25 Microsoft Technology Licensing, Llc Deep neural networks training for speech and pattern recognition
US9418334B2 (en) * 2012-12-06 2016-08-16 Nuance Communications, Inc. Hybrid pre-training of deep belief networks
US9811775B2 (en) 2012-12-24 2017-11-07 Google Inc. Parallelizing neural networks during training
US9190053B2 (en) 2013-03-25 2015-11-17 The Governing Council Of The Univeristy Of Toronto System and method for applying a convolutional neural network to speech recognition
CN104143327B (zh) * 2013-07-10 2015-12-09 腾讯科技(深圳)有限公司 一种声学模型训练方法和装置
KR20150016089A (ko) * 2013-08-02 2015-02-11 안병익 신경망 컴퓨팅 장치 및 시스템과 그 방법
US10019985B2 (en) * 2013-11-04 2018-07-10 Google Llc Asynchronous optimization for sequence training of neural networks
JP6203005B2 (ja) 2013-11-14 2017-09-27 三菱電機株式会社 通信装置
CN104035751B (zh) 2014-06-20 2016-10-12 深圳市腾讯计算机系统有限公司 基于多图形处理器的数据并行处理方法及装置
EP3064130A1 (de) 2015-03-02 2016-09-07 MindMaze SA Hirnaktivitätsmessung und Rückkopplungssystem
US20160267111A1 (en) 2015-03-11 2016-09-15 Microsoft Technology Licensing, Llc Two-stage vector reduction using two-dimensional and one-dimensional systolic arrays
US10083395B2 (en) * 2015-05-21 2018-09-25 Google Llc Batch processing in a neural network processor

Also Published As

Publication number Publication date
US20190122107A1 (en) 2019-04-25
CN112465131A (zh) 2021-03-09
GB201715438D0 (en) 2017-11-08
KR20230165890A (ko) 2023-12-05
KR20200045017A (ko) 2020-04-29
US11216726B2 (en) 2022-01-04
HK1245463A1 (zh) 2018-08-24
EP3298547B1 (de) 2023-07-05
TWI591549B (zh) 2017-07-11
US20220138577A1 (en) 2022-05-05
JP6640243B2 (ja) 2020-02-05
TWI622939B (zh) 2018-05-01
GB202118188D0 (en) 2022-01-26
GB2553053B (en) 2022-02-09
JP2022071015A (ja) 2022-05-13
TW201701199A (zh) 2017-01-01
EP4235449A2 (de) 2023-08-30
TW201723934A (zh) 2017-07-01
KR20220025158A (ko) 2022-03-03
KR20230016716A (ko) 2023-02-02
CN107454965A (zh) 2017-12-08
US20160342890A1 (en) 2016-11-24
JP2021093181A (ja) 2021-06-17
GB2600031A (en) 2022-04-20
KR20170133364A (ko) 2017-12-05
GB2553053A (en) 2018-02-21
JP7031033B2 (ja) 2022-03-07
EP3298547A1 (de) 2018-03-28
JP2018518730A (ja) 2018-07-12
KR102540114B1 (ko) 2023-06-02
CN107454965B (zh) 2020-12-01
US11227216B2 (en) 2022-01-18
KR102493196B1 (ko) 2023-01-27
WO2016186823A1 (en) 2016-11-24
KR102362157B1 (ko) 2022-02-14
DE112016002292T5 (de) 2018-02-15
EP4235449A3 (de) 2023-09-13
JP2020064657A (ja) 2020-04-23
DK3298547T3 (da) 2023-10-02
GB2600031B (en) 2022-08-24
KR20230080510A (ko) 2023-06-07
KR102106144B1 (ko) 2020-04-29
KR102610083B1 (ko) 2023-12-04
JP2023109933A (ja) 2023-08-08
US20210224654A1 (en) 2021-07-22
US20170103317A1 (en) 2017-04-13
JP6840827B2 (ja) 2021-03-10
US10083395B2 (en) 2018-09-25
US9842293B2 (en) 2017-12-12
JP7286829B2 (ja) 2023-06-05

Similar Documents

Publication Publication Date Title
DE202016107476U1 (de) Stapel-Verarbeitung in einem neuronalen Netzwerkprozessor
DE202016107436U1 (de) Neuronaler Netzwerkprozessor
DE202016107439U1 (de) Vorabruf von Gewichten zur Verwendung in einem neuralen Netzwerkprozessor
DE112016002296T5 (de) Vektor-recheneinheit in einem neuronalen netzwerkprozessor
DE202016107446U1 (de) Rotation von Daten für Berechnungen in neuronalen Netzwerken
DE102018105457A1 (de) Transponieren von Matrizen neuronaler Netze in Hardware
DE202016107443U1 (de) Berechnen von Faltungen mithilfe eines neuronalen Netzwerkprozessors
DE202017105729U1 (de) Kerndurchschreiten in Hardware
DE112019000336T5 (de) Massiv parallele neuronale inferenz-datenverarbeitungselemente
DE202017105528U1 (de) Ausführen von Mittelwert-Poolbildung in Hardware
DE102018111905A1 (de) Domänenspezifische Sprache zur Erzeugung rekurrenter neuronaler Netzarchitekturen
DE102020101187A1 (de) Winograd-transformationsfaltungsoperation für neuronale netze
DE202016008658U1 (de) Bildklassifikationsneuronalnetze
DE112017000855B4 (de) Energiesparender zeitlich gemultiplexter neurosynaptischer Kern zum Implementieren neuronaler Netze
DE102018100239A1 (de) Schleifen- und Bibliotheksfusion
DE112019002981T5 (de) Parallelberechnungsarchitektur mit rekonfigurierbarer kernebenen- und vektorebenen-parallelität
DE202017105403U1 (de) Befehlssatzarchitektur für neuronale Netze
DE102017125049A1 (de) Transponieren in einem Matrix-Vektor-Prozessor
DE102018105198A1 (de) Tiefenverkettung unter Verwendung einer Matrixberechnungseinheit
DE112019003529T5 (de) Datendarstellung für dynamische Genauigkeit in Kernen neuronaler Netze
EP3590078B1 (de) Neuronalnetzsystem
DE112019000676T5 (de) Zentraler scheduler und anweisungszuteiler für einen neuronalen inferenzprozessor
DE102019126719A1 (de) Energieeffiziente Speichersysteme und Verfahren
DE112021002239T5 (de) Deep learning-beschleuniger und direktzugriffsspeicher mit einer kameraschnittstelle
DE102019109631A1 (de) Tiefes komprimiertes netzwerk

Legal Events

Date Code Title Description
R207 Utility model specification
R081 Change of applicant/patentee

Owner name: GOOGLE LLC (N.D.GES.D. STAATES DELAWARE), MOUN, US

Free format text: FORMER OWNER: GOOGLE INC., MOUNTAIN VIEW, CALIF., US

R082 Change of representative

Representative=s name: MAIKOWSKI & NINNEMANN PATENTANWAELTE PARTNERSC, DE

R150 Utility model maintained after payment of first maintenance fee after three years
R151 Utility model maintained after payment of second maintenance fee after six years
R152 Utility model maintained after payment of third maintenance fee after eight years