DE112016002292T5 - Stapel-verarbeitung in einem neuronalen netzwerkprozessor - Google Patents

Stapel-verarbeitung in einem neuronalen netzwerkprozessor Download PDF

Info

Publication number
DE112016002292T5
DE112016002292T5 DE112016002292.1T DE112016002292T DE112016002292T5 DE 112016002292 T5 DE112016002292 T5 DE 112016002292T5 DE 112016002292 T DE112016002292 T DE 112016002292T DE 112016002292 T5 DE112016002292 T5 DE 112016002292T5
Authority
DE
Germany
Prior art keywords
inputs
neural network
input
layer
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.)
Pending
Application number
DE112016002292.1T
Other languages
English (en)
Inventor
Reginald Clifford Young
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
Priority to US201562165020P priority Critical
Priority to US62/165,020 priority
Priority to US14/844,431 priority patent/US10083395B2/en
Priority to US14/844,431 priority
Application filed by Google LLC filed Critical Google LLC
Priority to PCT/US2016/030515 priority patent/WO2016186823A1/en
Publication of DE112016002292T5 publication Critical patent/DE112016002292T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06NCOMPUTER SYSTEMS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computer systems based on biological models
    • G06N3/02Computer systems based on biological models using neural network models
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING; 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; COUNTING
    • G06NCOMPUTER SYSTEMS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computer systems based on biological models
    • G06N3/02Computer systems based on biological models using neural network models
    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06NCOMPUTER SYSTEMS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computer systems based on biological models
    • G06N3/02Computer systems based on biological models using neural network models
    • 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; COUNTING
    • G06NCOMPUTER SYSTEMS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N5/00Computer systems using knowledge-based models
    • G06N5/04Inference methods or devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06NCOMPUTER SYSTEMS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computer systems based on biological models
    • G06N3/02Computer systems based on biological models using neural network models
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons

Abstract

Verfahren, Systeme und Vorrichtungen, einschließlich auf Computerspeichermedien codierte Computerprogramme zum Erzeugen einer jeweiligen neuronalen Netzwerkausgabe für jeden einer Vielzahl von Eingaben, wobei das Verfahren für jede der neuronalen Netzwerkschichten Folgendes umfasst: Empfangen einer Vielzahl von Eingaben, die auf der neuronalen Netzwerkschicht zu verarbeiten sind; Bilden eines oder mehrerer Stapel an Eingaben 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 einen oder mehreren Stapeln der zu verarbeitenden Eingaben, wobei die Zahl der Eingaben in der Anzahl des einen oder der mehreren Stapel größer, kleiner oder gleich zu der entsprechenden zugeordneten Stapelgröße einer nachfolgenden Schicht in der Sequenz ist; und Verarbeiten der Anzahl von einen oder mehreren Eingabestapeln, um die jeweilige 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 (27)

  1. Verfahren zum Erzeugen einer entsprechenden neuronalen Netzwerkausgabe für jede einer Vielzahl von Eingaben, wobei das Erzeugen die Verarbeitung jeder Eingabe durch jede der Vielzahl von neuronalen Netzwerkschichten umfasst, um die entsprechende neuronale Netzwerkausgabe für die Eingabe zu erzeugen, wobei die neuronalen Netzwerkschichten in einer gerichteten Graphenstruktur angeordnet sind und wobei jede neuronale Netzwerkschicht eine entsprechende Stapelgröße aufweist, und 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 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 ist; Auswählen einer Anzahl einer oder mehrerer Eingangsstapel aus den zu verarbeiteten Eingaben, wobei die Zahl der Eingaben in der Anzahl des einen oder der mehreren Stapel größer, kleiner oder gleich zu der entsprechenden zugeordneten Stapelgröße einer nachfolgenden Schicht in der gerichteten Graphstruktur ist; und; Verarbeiten der Anzahl des einen oder mehreren Eingabestapel, um die entsprechende neuronale Netzwerkschichtausgabe zu erzeugen.
  2. Verfahren 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. Verfahren nach Anspruch 2, wobei der Gewichtswiederverwendungswert mindestens auf einer Taktrate des Speichers basiert, der die Gewichtseingaben speichert.
  4. Verfahren 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. Verfahren 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. Verfahren nach einem der vorhergehenden Ansprüche, wobei jede Eingabe einer bestimmten Bildressource entspricht.
  7. Verfahren nach einem der Ansprüche 1 bis 5, wobei jede Eingabe einer Audioprobe entspricht.
  8. Verfahren nach einem der vorhergehenden Ansprüche, ferner umfassend, das Bilden eines Stapels aus der einen oder mehreren Schichtausgaben zur Verarbeitung an der nachfolgenden Schicht.
  9. Verfahren nach einem der vorhergehenden Ansprüche, ferner umfassend, das Erzeugen einer entsprechenden Inferenz für jede Ausgabe.
  10. 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.
  11. Das System 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. System nach Anspruch 11, wobei der Gewichtswiederverwendungswert mindestens auf einer Taktrate des Speichers für die Gewichtseingaben basiert.
  13. System 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. System 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. System nach einem der Ansprüche 10 bis 14, wobei jede Eingabe einer bestimmten Bildressource entspricht.
  16. System nach einem der Ansprüche 10 bis 14, wobei jede Eingabe einer Audioprobe entspricht.
  17. System 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. System nach einem der vorhergehenden Ansprüche 10 bis 17, ferner umfassend, das Erzeugen einer entsprechenden Inferenz für jede Ausgabe.
  19. 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.
  20. Das computerlesbare Medium nach Anspruch 19, 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.
  21. Das computerlesbare Medium nach Anspruch 20, wobei der Gewichtswiederverwendungswert mindestens auf einer Taktrate des Speichers für die Gewichtseingaben basiert.
  22. Das computerlesbare Medium nach Anspruch 20 oder 21, 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.
  23. Das computerlesbare Medium nach einem der Ansprüche 20 bis 22, 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.
  24. Das computerlesbare Medium nach einem der Ansprüche 19 bis 23, wobei jede Eingabe einer bestimmten Bildressource entspricht.
  25. Das computerlesbare Medium nach einem der Ansprüche 19 bis 23, wobei jede Eingabe einer Audioprobe entspricht.
  26. Das computerlesbare Medium nach einem der Ansprüche 19 bis 25, ferner umfassend, das Bilden eines Stapels aus einer oder mehreren Schichtausgaben zur Verarbeitung an der nachfolgenden Schicht.
  27. Das computerlesbare Medium nach einem der der Ansprüche 19 bis 26, ferner umfassend, das Erzeugen einer entsprechenden Inferenz für jede Ausgabe.
DE112016002292.1T 2015-05-21 2016-05-03 Stapel-verarbeitung in einem neuronalen netzwerkprozessor Pending DE112016002292T5 (de)

Priority Applications (5)

Application Number Priority Date Filing Date Title
US201562165020P true 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
PCT/US2016/030515 WO2016186823A1 (en) 2015-05-21 2016-05-03 Batch processing in a neural network processor

Publications (1)

Publication Number Publication Date
DE112016002292T5 true DE112016002292T5 (de) 2018-02-15

Family

ID=55967450

Family Applications (2)

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

Family Applications After (1)

Application Number Title Priority Date Filing Date
DE202016107476.2U Active DE202016107476U1 (de) 2015-05-21 2016-05-03 Stapel-Verarbeitung in einem neuronalen Netzwerkprozessor

Country Status (10)

Country Link
US (3) US10083395B2 (de)
EP (1) EP3298547A1 (de)
JP (2) JP6640243B2 (de)
KR (2) KR102106144B1 (de)
CN (1) CN107454965B (de)
DE (2) DE112016002292T5 (de)
GB (1) GB2553053A (de)
HK (1) HK1245463A1 (de)
TW (2) TWI591549B (de)
WO (1) WO2016186823A1 (de)

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US9691019B1 (en) * 2017-03-07 2017-06-27 Google Inc. Depth concatenation using a matrix computation unit
US10896367B2 (en) * 2017-03-07 2021-01-19 Google Llc 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 中国科学院计算技术研究所 一种基于高效复用数据流的神经网络处理器及设计方法
US10019668B1 (en) * 2017-05-19 2018-07-10 Google Llc Scheduling neural network processing
CN109034381A (zh) * 2017-06-09 2018-12-18 宏达国际电子股份有限公司 训练任务优化系统、方法及其非暂态电脑可读媒体
CN107146616B (zh) * 2017-06-13 2020-05-08 Oppo广东移动通信有限公司 设备控制方法及相关产品
CN107608715B (zh) * 2017-07-20 2020-07-03 上海寒武纪信息科技有限公司 用于执行人工神经网络正向运算的装置及方法
US10671349B2 (en) 2017-07-24 2020-06-02 Tesla, Inc. Accelerated mathematical engine
WO2019032870A1 (en) * 2017-08-09 2019-02-14 Google Llc ACCELERATION OF NEURAL NETWORKS IN MATERIAL USING INTERCONNECTED CROSSBARS
CN107818367B (en) * 2017-10-30 2020-12-29 中国科学院计算技术研究所 Processing system and processing method for neural network
KR20190048347A (ko) * 2017-10-31 2019-05-09 삼성전자주식회사 프로세서 및 그 제어 방법
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 삼성전자주식회사 뉴럴 네트워크의 디컨벌루션 연산을 수행하는 장치 및 방법
KR20190055608A (ko) 2017-11-15 2019-05-23 삼성전자주식회사 병렬 연산 처리를 수행하는 메모리 장치 및 이를 포함하는 메모리 모듈
CN108345934B (zh) * 2018-01-16 2020-11-03 中国科学院计算技术研究所 一种用于神经网络处理器的激活装置及方法
KR20190099931A (ko) * 2018-02-20 2019-08-28 삼성전자주식회사 시스톨릭 배열(Systolic Array)을 이용하여 딥 러닝(Deep Learning) 연산을 수행하는 방법 및 장치
CN108777153B (en) * 2018-05-25 2021-01-26 华中科技大学 Multi-terminal input synapse device and plasticity modulation method thereof
US10832133B2 (en) 2018-05-31 2020-11-10 Neuralmagic Inc. System and method of executing neural networks
DE102018115902A1 (de) 2018-07-01 2020-01-02 Oliver Bartels SIMD-Prozessor mit CAM zur Operandenauswahl nach Mustererkennung
US20200026991A1 (en) * 2018-07-17 2020-01-23 Macronix International Co., Ltd. In-Memory Computing Devices for Neural Networks
EP3757896A1 (de) * 2018-08-28 2020-12-30 Cambricon Technologies Corporation Limited Vorbehandlungsverfahren und -vorrichtung für daten in einem neuronalen netz
WO2020073925A1 (zh) * 2018-10-09 2020-04-16 上海寒武纪信息科技有限公司 运算方法、装置、计算机设备和存储介质
WO2020073923A1 (zh) * 2018-10-09 2020-04-16 上海寒武纪信息科技有限公司 运算方法、装置、计算机设备和存储介质

Family Cites Families (29)

* 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
US5146543A (en) 1990-05-22 1992-09-08 International Business Machines Corp. Scalable neural array processor
JPH04290155A (en) 1991-03-19 1992-10-14 Fujitsu Ltd Parallel data processing system
US5337395A (en) 1991-04-08 1994-08-09 International Business Machines Corporation SPIN: a sequential pipeline neurocomputer
US5903454A (en) 1991-12-23 1999-05-11 Hoffberg; Linda Irene Human-factored interface corporating adaptive pattern recognition based controller apparatus
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
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
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
US8103606B2 (en) 2006-12-08 2012-01-24 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 キヤノン株式会社 コンボリューション演算回路、階層的コンボリューション演算回路及び物体認識装置
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
US8924455B1 (en) 2011-02-25 2014-12-30 Xilinx, Inc. Multiplication of matrices using systolic arrays
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
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
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

Also Published As

Publication number Publication date
US20170103317A1 (en) 2017-04-13
TWI591549B (zh) 2017-07-11
HK1245463A1 (zh) 2018-08-24
TW201701199A (zh) 2017-01-01
TW201723934A (zh) 2017-07-01
DE202016107476U1 (de) 2017-01-23
US20190122107A1 (en) 2019-04-25
GB2553053A (en) 2018-02-21
JP6640243B2 (ja) 2020-02-05
EP3298547A1 (de) 2018-03-28
US9842293B2 (en) 2017-12-12
KR102106144B1 (ko) 2020-04-29
GB201715438D0 (en) 2017-11-08
CN107454965B (zh) 2020-12-01
TWI622939B (zh) 2018-05-01
JP2018518730A (ja) 2018-07-12
US20160342890A1 (en) 2016-11-24
KR20200045017A (ko) 2020-04-29
JP2020064657A (ja) 2020-04-23
KR20170133364A (ko) 2017-12-05
WO2016186823A1 (en) 2016-11-24
US10083395B2 (en) 2018-09-25
CN107454965A (zh) 2017-12-08

Similar Documents

Publication Publication Date Title
Ahn et al. Fast, accurate, and lightweight super-resolution with cascading residual network
DE202017103694U1 (de) Faltendes neuronales Netzwerk auf programmierbarem zweidimensionalem Bildprozessor
DE202017105708U1 (de) Rechenkachel für neuronale Netze
Keuper et al. Distributed training of deep neural networks: Theoretical and practical limits of parallel scalability
DE202017105829U1 (de) System für kommunikationseffizientes gemeinschaftliches Lernen
US10402700B2 (en) Generating images using neural networks
US9842293B2 (en) Batch processing in a neural network processor
KR20190084088A (ko) 하드웨어에서의 커널 스트라이딩 수행
EP0875031B1 (de) Prozessor zur bildverarbeitung
DE112016003245T5 (de) Resistive Verarbeitungseinheit
DE602004011890T2 (de) Verfahren zur Neuverteilung von Objekten an Recheneinheiten
DE60211452T2 (de) DMA-Übertragung von Daten und Prüfinformation zu und von einem Datenspeicherungsgerät
DE60035171T2 (de) Verfahren und Schaltungen zum schnellen Auffinden des minimalen / maximalen Wertes in einer Menge von Zahlen
DE102013221057A1 (de) System und Verfahren für Batch-Auswertungs-Programme
DE202017103725U1 (de) Blockoperationen für einen Bildprozessor mit einer zweidimensionalen Ausführungsbahnmatrix und einem zweidimensionalen Schieberegister
DE2724125C2 (de)
DE102018108324A1 (de) System und Verfahren zur Schätzung eines optischen Flusses
DE69831507T2 (de) Simulationssystem mit auflösung von bedingungen
DE102016009106A1 (de) Mit Steuerung ausgerüstete Bearbeitungsvorrichtung mit Bearbeitungszeit- Messfunktion und Messfunktion auf der Maschine
EP2564049B1 (de) STEUERGERÄT UND VERFAHREN ZUR BERECHNUNG EINER AUSGANGSGRÖßE FÜR EINE STEUERUNG
DE102008034519A1 (de) Aufgeteilte Datenstruktur, und Verfahren zum Laden einer Partikel-basierten Simulation unter Verwendung der aufgeteilten Datenstruktur in GPU, usw.
DE202017106132U1 (de) Neuronale Netze zum Auswählen von durch einen Roboteragenten auszuführenden Aktionen
EP3179415A1 (de) Systeme und verfahren für ein optimiertes mehradriges rekurrentes neuronales netzwerk
DE112015007176T5 (de) Visuelle Erkennung unter Verwendung von Deep Learning-Attributen
DE102017103764A1 (de) Compilerverwalteter speicher für bildprozessor

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

Representative=s name: BETTEN & RESCH PATENT- UND RECHTSANWAELTE PART, DE