DE202016107436U1 - Neuronaler Netzwerkprozessor - Google Patents

Neuronaler Netzwerkprozessor Download PDF

Info

Publication number
DE202016107436U1
DE202016107436U1 DE202016107436.3U DE202016107436U DE202016107436U1 DE 202016107436 U1 DE202016107436 U1 DE 202016107436U1 DE 202016107436 U DE202016107436 U DE 202016107436U DE 202016107436 U1 DE202016107436 U1 DE 202016107436U1
Authority
DE
Germany
Prior art keywords
circuit
activation
inputs
weight
neural network
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
DE202016107436.3U
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
Priority to US201562164931P priority Critical
Priority to US62/164,931 priority
Priority to US14/844,524 priority
Priority to US14/844,524 priority patent/US9747546B2/en
Application filed by Google LLC filed Critical Google LLC
Publication of DE202016107436U1 publication Critical patent/DE202016107436U1/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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
    • 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

Abstract

Eine Schaltung für die Durchführung neuronaler Netzwerkberechnungen für ein neuronales Netzwerk, umfassend eine Vielzahl neuronaler Netzwerkschichten, die Schaltung umfassend: eine Matrixberechnungseinheit, so konfiguriert, dass sie für jede der Vielzahl der neuronalen Netzwerkschichten: eine Vielzahl von Gewichtseingaben und eine Vielzahl von Aktivierungseingaben für die neuronale Netzwerkschicht empfängt, eine Vielzahl akkumulierter Werte auf Basis der Vielzahl der Gewichtseingaben und der Vielzahl der Aktivierungseingaben erzeugt; und eine Vektorberechnungseinheit, kommunikativ gekoppelt mit der Matrixberechnungseinheit und so konfiguriert, dass sie für jede der Vielzahl der neuronalen Netzwerkschichten: eine Aktivierungsfunktion auf jeden akkumulierten Wert anwendet, der von der Matrixberechnungseinheit erzeugt wurde, um eine Vielzahl aktivierter Werte für die neuronale Netzwerkschicht zu erzeugen.

Description

  • ALLGEMEINER STAND DER TECHNIK
  • Diese Beschreibung bezieht sich auf die Datenverarbeitung neuronaler Netzwerk-Inferenzen in Hardware.
  • Neuronale Netzwerke sind Maschinenlernprogramme, bestehend aus einer oder mehreren Schichten, zum Erzeugen einer Ausgabe, z. B. eine Klassifikation für eine empfangene Eingabe. Einige neuronale Netzwerke umfassen zusätzlich zu einer Außenschicht eine oder mehrere ausgeblendete Schichten. Der Ausgang jeder ausgeblendeten Schicht wird als Eingang 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 einen Ausgang von einem empfangenen Eingang.
  • KURZDARSTELLUNG
  • Im Allgemeinen beschreibt diese Spezifikation eine spezielle Hardware-Schaltung, die neuronale Netzwerkinferenzen berechnet.
  • Im Allgemeinen kann ein innovativer Aspekt des Gegenstands in dieser Spezifikation in einer Schaltung für die Durchführung neuronaler Netzwerkberechnungen für ein neuronales Netzwerk verkörpert sein, das eine Vielzahl neuronaler Netzwerkschichten umfasst, die Schaltung umfassend: eine Matrixberechnungseinheit, konfiguriert, um für jede der Vielzahl der Netzwerkschichten: eine Vielzahl von Gewichtseingaben und eine Vielzahl akkumulierter Werte zu empfangen, die auf der Vielzahl der Gewichtseingaben und der Vielzahl der Aktivierungseingaben basieren; und eine Vektorberechnungseinheit, die kommunikativ mit der Matrixberechnungseinheit gekoppelt und so konfiguriert ist, dass sie für jede der Vielzahl der neuronale Netzwerkschichten: eine Aktivierungsfunktion für jeden akkumulierten Wert anwendet, der von der Matrixberechnungseinheit erzeugt wird, um eine Vielzahl aktivierter Werte für die neuronale Netzwerkschicht zu erzeugen.
  • Implementierungen können eines oder mehrere der folgenden Merkmale beinhalten. Ein vereinheitlichter Puffer, der kommunikativ mit der Matrixberechnungseinheit und der Vektorberechnungseinheit gekoppelt ist, wobei der vereinheitlichte Puffer so konfiguriert ist, dass er die Ausgabe von der Vektorberechnungseinheit empfängt und speichert, und der vereinheitlichte Puffer so konfiguriert ist, dass er die empfangene Ausgabe als Eingabe zur Matrixberechnungseinheit sendet. Ein Sequenzer, der so konfiguriert ist, dass er Anweisungen von einem Hostgerät empfängt und eine Vielzahl von Steuersignalen aus den Anweisungen erzeugt, wobei die Vielzahl der Steuersignale den Datenfluss durch die Schaltung steuern; und eine Speicherdirektzugriffs-Engine, die kommunikativ mit dem vereinheitlichten Puffer und dem Sequenzer gekoppelt ist, wobei die Speicherdirektzugriffs-Engine so konfiguriert ist, dass sie die Vielzahl der Aktivierungseingaben zum vereinheitlichten Puffer sendet, wobei der Puffer so konfiguriert ist, dass er die Vielzahl der Aktivierungseingaben zur Matrixberechnungseinheit sendet und wobei die Speicherdirektzugriffs-Engine so konfiguriert ist, dass sie Ergebnisdaten aus dem vereinheitlichten Puffer liest. Eine Speichereinheit, so konfiguriert, dass sie die Vielzahl von Gewichtseingaben zur Maxtrixberechnungseinheit sendet, und wobei die Speicherdirektzugriffs-Engine so konfiguriert ist, dass sie die Vielzahl der Gewichtseingaben zur Speichereinheit sendet. Die Matrixberechnungseinheit ist als zweidimensionales systolisches Array konfiguriert, das eine Vielzahl von Zellen umfasst. Die Vielzahl der Gewichtseingaben wird durch eine erste Vielzahl von Zellen entlang einer ersten Dimension des systolischen Arrays verschoben, und wobei die Vielzahl der Aktivierungseingaben durch eine zweite Vielzahl der Zellen entlangeiner zweiten Dimension des systolischen Arrays verschoben wird. Für eine bestimmte Schicht in der Vielzahl von Schichten ist eine Zahl der Vielzahl der Aktivierungseingaben größer als eine Größe der zweiten Dimension des systolischen Arrays, und wobei das systolische Array so konfiguriert ist, dass es: die Vielzahl der Aktivierungseingaben in teile aufteilt, wobei jeder Teil eine Größer kleiner oder gleich der Größe der zweiten Dimension hat; Erzeugung eines jeweiligen Teils derakkumulierten Werte für jeden Teil; und Kombination jedes Teils der akkumulierten Werte, um einen Vektor akkumulierter Werte für die bestimmte Schicht zu erzeugen. Für eine bestimmte Schicht in der Vielzahl von Schichten ist eine Zahl der Vielzahl der Gewichtseingaben größer als eine Größe der ersten Dimension des systolischen Arrays, und wobei das systolische Array so konfiguriert ist, dass es: die Vielzahl der Gewichtseingaben in Teile aufteilt, wobei jeder Teil eine Größer kleiner oder gleich der Größe der ersten Dimension hat; Erzeugung eines jeweiligen Teils derakkumulierten Werte für jeden Teil; und Kombination jedes Teils der akkumulierten Werte, um einen Vektor akkumulierter Werte für die bestimmte Schicht zu erzeugen. Jede Zelle in der Vielzahl der Zellen umfasst: ein Gewichtsregister, so konfiguriert, dass es eine Gewichtseingabe speichert; ein Aktivierungsregister, so konfiguriert, dass es eine Aktivierungseingabe speichert, und so konfiguriert, dass es die Aktivierungseingabe an ein anderes Aktivierungsregister in einer ersten benachbarten Zelle entlang der zweiten Dimension sendet, ein Summenregister, so konfiguriert, dass es einen vorher summierten Wert speichert; eine Multiplikationsschaltung, kommunikativ mit dem Gewichtsregister und dem Aktivierungsregister gekoppelt, wobei die Multiplikationsschaltung so konfiguriert ist, dass sie ein Produkt der Gewichtseingabe und der Aktivierungseingabe ausgibt; und ein Summierungsschaltung, die kommunikativ mit der Multiplikationsschaltung und dem Summenregister gekoppelt ist, wobei Die Summierungsschaltung so konfiguriert ist, dass sie eine Summe des Produkts und des vorher summierten Wertes ausgibt, und wobei die Summierungsschaltung so konfiguriert ist, dass sie die Summe zu einem anderen Summenregister in einer zweiten benachbarten Zelle entlang der ersten Dimension sendet. Eine oder mehrere Zellen in der Vielzahl von Zellen sind jeweils so konfiguriert, dass sie die jeweilige Summe in einer jeweiligen Akkumulatoreinheit speichern, wobei die jeweilige Summe ein akkumulierter Wert ist. Die erste Dimension des systolischen Arrays entspricht den Spalten des systolischen Arrays, während die zweite Dimension des systolischen Arrays den Zeilen des systolischen Arrays entspricht. Die Vektorberechnungseinheit normalisiert jeden aktivierten Wert, um eine Vielzahl normalisierter Werte zu erzeugen. Die Vektorberechnungseinheit fasst einen oder mehrere aktivierte Werte in einem Pool zusammen, um eine Vielzahl gepoolter Werte zu erzeugen.
  • Bestimmte Ausführungsformen des in dieser Spezifikation beschriebenen Gegenstands können so implementiert werden, dass sie einen oder mehrere der folgenden Vorteile verwirklichen. Die Implementierung eines neuronalen Netzwerkprozessors in Hardware verbessert die Effizienz, erhöht z. B. Geschwindigkeit und Durchsatz und verringert Energie und Kosten über Implementierungen der Software. Dies kann für Inferenzanwendungen nützlich sein. Die Integration von Komponenten des neuronalen Netzwerkprozessors in eine Schaltung ermöglicht die Berechnung von Interferenzen ohne die Nachteile der chipexternen Kommunikation. Außerdem kann die Schaltung neuronale Netzwerkschichten verarbeiten, die eine Reihe von Eingaben haben, z. B. eine Reihe von Gewichtseingaben oder eine Reihe von Aktivierungseingaben, die größer als eine Größe einer Dimension einer Matrixberechnungseinheit in der Schaltung sind. Die Schaltung kann zum Beispiel eine große Anzahl von Gewichtseingaben pro Neuron des neuronalen Netzwerks verarbeiten.
  • 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 beispielhaften Verfahrens zum Durchführen einer Berechnung für eine gegebene Schicht eines neuronalen Netzes.
  • 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 zeigt eine Beispielarchitektur einer Vektor-Recheneinheit.
  • 6 ist ein Ablaufdiagramm eines anderen Beispielprozesses für die Durchführung der Berechnung einer bestimmten neuronalen Netzwerkschicht mithilfe eines systolischen Arrays, die mehr Aktivierungseingaben als Zeilen im systolischen Array hat.
  • Entsprechende Referenznummern und Kennzeichnungen in den verschiedenen Zeichnungen zeigen entsprechende Elemente an.
  • 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 sind in einer Reihe mit jeweils einem Gewichtssatz in einer Sequenz angeordnet sein. Insbesondere die Schichten des neuronalen Netzes sind mit jeweils einem entsprechenden Satz von Gewichten in einer Sequenz angeordnet. Jede Schicht empfängt eine Eingabe und verarbeitet die Eingabe entsprechend den Gewichtssätzen für die Schicht, um eine Ausgabe zu erzeugen.
  • Daher empfängt das neuronale Netzwerk die Eingabe und verarbeitet diese zum Erzeugen der Inferenz in der Sequenz durch jede der neuronalen Netzwerkschichten, wobei der Ausgang einer Netzwerkschicht als Eingang für die nächste neuronale Netzwerkschicht vorgesehen ist. Dateneingaben zu einer neuronalen Netzwerkschicht, z. B. können entweder als Eingabe für das neuronale Netzwerk oder als Ausgang 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 einem gerichteten Graph angeordnet. Das heißt, jede spezielle Schicht kann mehrere Eingänge, mehrere Ausgänge oder beide empfangen. Die Schichten des neuronalen Netzes können auch so angeordnet sein, dass ein Ausgang einer Schicht als Eingang in eine vorhergehende Schicht zurückgesendet werden kann.
  • 1 ist ein Ablaufdiagramm eines Beispielprozesses 100 für die Durchführung einer Berechnung einer bestimmten Schicht eines neuronalen Netzwerks mithilfe einer Spezial-Hardwareschaltung. Der Einfachheit halber wird das Verfahren 100 in Bezug auf ein System beschrieben, mit einer oder mehreren Schaltungen, die das Verfahren 100 ausführen. Das Verfahren 100 kann für jede Schicht des neuronalen Netzwerks ausgeführt werden, um eine Inferenz aus einem empfangenen Eingang zu berechnen. Das System empfängt Sätze von Gewichtseingaben (Schritt 102) und Sätze von Aktivierungseingaben (Schritt 104) für die bestimmte Schicht. Die Gewichtseingangssätze und der 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 Gewichtseingangssätze und den Aktivierungseingaben. Das heißt, für einen Satz von Gewichtungen, kann das System jede Gewichtseingabe mit jedem Aktivierungseingang 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 weiter unten in Bezug auf 5 beschrieben wird. Der Ausgang der Schicht 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 den empfangenen Eingang zu erzeugen, wenn ein empfangener Eingang 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 Parameter für eine neuronale Netzwerkberechnung umfassen. Die Parameter können eines oder mehrere der folgenden Elemente beinhalten: wieviele Schichten verarbeitet werden sollen, entsprechende Sätze von Gewichtseingaben für jede Schicht der Schicht, ein anfänglicher Satz von Aktivierungseingaben, d. h. die Eingabe für das neuronale Netzwerk, aus der die Inferenz berechnet wird, entsprechende Eingabe- und Ausgabegrößen jeder Schicht, ein Schrittwert für die neuronale Netzwerkberechnung und eine Art der zu verarbeitenden Schicht, z. B. eine Faltungsschicht oder eine vollständig verbundene Schicht.
  • 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 Gewichtseingangssätze und die Aktivierungseingangssä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 Gewichtseingangssä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 Ausgängen der Vektor-Recheneinheit 214 zu speichern. Die Vektor-Recheneinheit wird nachfolgend unter Bezugnahme auf 5, näher beschrieben. Das direkte Speicherzugriffsprogramm 204 kann auch die Ausgänge der Vektor-Recheneinheit 214 aus dem einheitlichen Puffer 208 lesen.
  • Der dynamische Speicher 210 und der vereinheitlichte Puffer 208 können Sätze von Gewichts- bzw. Sätze von Aktivierungseingaben zur Matrixberechnungseinheit 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 Ausgangsvektor verarbeiten und einen Vektor von verarbeiteten Ausgängen zum einheitlichen Puffer 208 speichern. Der Vektor von verarbeiteten Ausgängen kann als Aktivierungseingang für die Matrix-Recheneinheit 212 verwendet werden, z. B. zur Verwendung in einer nachfolgenden Schicht in dem neuronalen Netzwerk. Die Matrix-Recheneinheit 212 und die Vektor-Recheneinheit 214 werden nachfolgend unter Bezugnahme auf 3 und 5, näher beschrieben.
  • 3 zeigt eine Beispielarchitektur 300 mit einer Matrix-Recheneinheit. Die Matrixberechnungseinheit ist ein zweidimensionales systolisches Array 306. Das zweidimensionale systolische Array 306 kann ein quadratisches Array sein. Das Array 306 enthält 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 Aktivierungseingänge an Zeilen des Arrays 306 und eine Gewichtsabrufschnittstelle 308 sendet Gewichtseingänge an Spalten des Arrays 306. Bei einigen anderen Implementierungen werden jedoch Aktivierungseingänge zu den Spalten übertragen und Gewichtseingänge zu den Zeilen des Arrays 306.
  • Die Wertlader 302 können die Aktivierungseingänge von einem einheitlichen Puffer, z. B. dem einheitlichen Puffer 208 von 2 empfangen. Jeder Wertlader kann einen entsprechenden Aktivierungseingang 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 einen Aktivierungseingang zur Zelle 314 senden. Der Wertlader kann auch den Aktivierungseingang an einen benachbarten Wertlader senden und der Aktivierungseingang kann an einer anderen am weitesten links liegenden Zelle des Arrays 306 verwendet werden. Dies ermöglicht, dass Aktivierungseingänge 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 einen entsprechenden Gewichtseingang 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 Aktivierungseingänge über das gesamte Array 306 entlang einer Dimension, z. B. nach rechts verschieben, während die Gewichtseingänge entlang des gesamten Arrays 306 entlang einer anderen Dimension, z. B. nach unten, verschoben werden können. So kann beispielsweise der Aktivierungseingang 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 einen gegebenen Gewichtseingang und einen gegebenen Aktivierungseingang verarbeiten. Die kumulierte Ausgabe kann auch an die benachbarte Zelle entlang der gleichen Dimension wie die gegebene Gewichtseingabe weitergegeben werden. Nachfolgend weiter unten 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 In 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 zu einer Vektor-Recheneinheit übertragen werden, z. B. der Vektor-Recheneinheit 502 aus 5. 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 Beispielarchitektur 400 Einer Zelle innerhalb eines systolischen Arrays, z. B. des systolischen Arrays 306 von 3.
  • Die Zelle kann ein Aktivierungsregister 406 umfassen, das einen Aktivierungseingang 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 einen Gewichtseingang speichert. Der Gewichtseingang 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 des Aktivierungseingangs einen oder mehrere Taktzyklen. Das Steuersignal kann weiterhin bestimmen, ob die Aktivierungseingabe 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, bleibt die Gewichtseingabe innerhalb der Zelle und wird nicht zu einer benachbarten Zelle übertragen. Die Gewichtseingabe kann daher auf mehrere Aktivierungseingaben angewendet werden, z. B. unter Verwendung der Multiplikationsschaltung 408, und entsprechende akkumulierte Werte können zu einer benachbarten Zelle übertragen werden.
  • 5 zeigt eine Beispielarchitektur 500 einer Vektor-Recheneinheit 502. Die Vektor-Recheneinheit 502 kann von der Matrix-Recheneinheit einen kumulierten Vektorwert empfangen, z. B. die Matrix-Recheneinheit unter Bezugnahme auf 2.
  • Die Vektor-Recheneinheit 502 kann den kumulierten Vektorwert an der Aktivitätseinheit 404 verarbeiten. Bei einigen Implementierungen beinhaltet die Aktivitätseinheit Schaltungen, die auf jeden kumulierten Wert eine nichtlineare Funktion anwenden, um Aktivierungswerte zu erzeugen. Die nichtlineare Funktion kann zum Beispiel tanh(x) sein, wobei x ein akkumulierter Wert ist.
  • Optional kann die Vektorberechnungseinheit 502 die Aktivierungswerte in einer Normalisierungseinheit 506 normalisieren, die normalisierte Werte aus den Aktivierungswerten erzeugt.
  • Ebenfalls optional kann die Vektorberechnungseinheit 502 Werte, entweder Aktivierungswerte oder Normalisierungswerte, mithilfe einer Poolingeinheit 508 in einem Pool zusammenfassen. Die Poolingeinheit 508 kann eine Aggregationsfunktion auf einen oder mehrere der normalisierten Werte anwenden, um gepoolte Werte zu erzeugen. In einigen Implementierungen sind Aggregationsfunktionen Funktionen, die einen maximalen, minimalen oder durchschnittlichen normierten Wert oder eine Teilmenge der normierten Werte zurückgeben.
  • Steuersignale 510 können übertragen werden, z. B. über die Ablaufsteuerung 206 aus 2, und kann steuern, wie die Vektor-Recheneinheit 502 den kumulierten Vektorwert verarbeitet. Das heißt, die Steuersignale 510 können steuern, ob die Aktivierungswerte gebündelt, normiert oder beides sind. Die Steuersignale 510 können auch die Aktivierungs-, Normierungs- oder Bündelfunktionen sowie andere Parameter für die Normierung und das Bündeln, z. B. einen Schrittwert, festlegen.
  • Die Vektor-Recheneinheit 502 kann Werte, z. B. Aktivierungswerte, normierte Werte oder gebündelte Werte zu einem einheitlichen Zwischenspeicher, z. B. dem einheitlichen Zwischenspeicher 208 aus 2, senden.
  • In einigen Implementierungen empfängt die Poolingeinheit 508 die Aktivierungswerte statt der Normalisierungseinheit 506 und die Poolingeinheit 508 sendet die gepoolten Werte zur Normalisierungseinheit 506, die normalisierte Werte für die Speicherung im vereinheitlichten Puffer erzeugt.
  • 6 ist ein Ablaufdiagramm eines Beispielprozesses für die Durchführung der Berechnung einer bestimmten neuronalen Netzwerkschicht mithilfe eines systolischen Arrays, die mehr Aktivierungseingaben als Zeilen im systolischen Array hat. Zur Vereinfachung wird der Prozess 600 in Bezug auf ein System beschrieben, das den Prozess 600 ausführt. In einigen Implementierungen führt eine Hostschnittstelle oder ein Sequenzer den Prozess 600 durch, z. B. die Hostschnittstelle 202 bzw. der Sequenzer 206 aus 2. In einigen anderen Implementierungen empfängt die Hostschnittstelle Anweisungen von einem externen Prozessor, der den Prozess 600 durchführt.
  • Wie oben beschrieben, kann jede Schicht mehrere Sätze von Aktivierungseingaben haben und jeder Satz von Gewichtseingaben kann zu Zellen in verschiedenen Zeilen des Arrays übertragen werden. In einigen Implementierungen haben einige Schichten des neuronalen Netzwerks mehr Sätze von Aktivierungseingaben als es Zeilen des Arrays gibt.
  • Das System kann zum Beispiel mithilfe eines Komparators ermitteln, wo es mehr Sätze von Aktivierungseingaben für die bestimmte neuronale Netzwerkschicht als Zeilen im systolischen Array gibt. In einigen Implementierungen führt das System die Ermittlung bei der Kompilierung durch. Ein Satz von Aktivierungseingaben kann den Aktivierungseingaben entsprechen, die für eine einzelne Zeile des Arrays bereitgestellt werden.
  • Wenn es mehr Zeilen als Sätze von Aktivierungseingaben (Schritt 602) gibt, kann das Systemakkumulierte Werte erzeugen, wie oben im systolischen Array 306 von 3 (Schritt 604) beschrieben.
  • Wenn es mehr Sätze von Aktivierungseingaben für die Verarbeitung als Zeilen im Array gibt (Schritt 602), kann das System die Sätze von Aktivierungseingaben in Teile aufteilen, sodass jeder Teil eine Größe kleiner oder gleich einer Anzahl von Zeilen im Array hat (Schritt 606).
  • Das System kann dann für jeden Teil der Aktivierungseingaben einen Teil der akkumulierten Werte erzeugen (Schritt 608). Ein akkumulierter Wert kann eine Summe der Produkte der Aktivierungs- und Gewichtseingaben in Zellen entlang einer bestimmten Spalte sein, wie z. B. beschrieben im systolischen Array 306 von 3. Jeder Teil der akkumulierten Werte kann in einem Puffer gespeichert werden, bis alle Teile der Aktivierungseingaben bearbeitet wurden. Der Puffer kann ein Puffer in Akkumulatoreinheiten 310 von 3 sein, ein Puffer im systolischen Array oder der vereinheitlichte Puffer 208 von 2.
  • Das System kann dann alle Teile der akkumulierten Werte in einem Vektor der akkumulierten Werte kombinieren (Schritt 610). Insbesondere kann das System auf den Puffer vorher gespeicherter Teile akkumulierter Werte zugreifen und zum Beispiel mithilfe von Akkumulatoreinheiten 310 von 3 die akkumulierten Werte akkumulieren, um einen Vektor der akkumulierten Werte zu erzeugen. Das System kann den Vektor der akkumulierten Werte zu einer Vektorberechnungseinheit schicken, z. B. der Vektorberechnungseinheit 214 aus 2.
  • Wenn es zum Beispiel 256 Zeilen im Array gibt und es 300 Sätze von Aktivierungseingaben zur Verarbeitung auf einer bestimmten Schicht gibt, kann das System 256 endgültige akkumulierte Werte aus 256 Sätzen von Aktivierungseingaben für die vollständige Nutzung des systolischen Arrays erzeugen und die 256 endgültigen akkumulierten Werte in einem Puffer speichern. Das System kann dann 44 endgültige akkumulierte Werte aus den 44 restlichen Sätzen der Aktivierungseingaben erzeugen. Und schließlich kann das System alle 300 endgültigen akkumulierten Werte kombinieren, um einen Vektor zu bilden, und den Vektor an die Vektorberechnungseinheit senden.
  • Wenn es mehr Sätze von Gewichtseingaben als Spalten im Array gibt, kann das System ähnliche Vorgänge durchführen. Das heißt, das System kann die Sätze von Gewichtseingaben in Teile mit weniger Sätzen von Gewichtseingaben als die Anzahl der Spalten im Array aufteilen, akkumulierte Werte für jeden Teil erzeugen und die akkumulierten Werte in einen Vektor für die Verwendung in der Vektorberechnungseinheit kombinieren. In einigen Implementierungen kann das System, statt die Anzahl der Sätze von Gewichtseingaben mit der Anzahl der Sätze der Spalten im Array zu vergleichen, die Anzahl der akkumulierten Werte mit der Anzahl der Spalten im Array vergleichen.
  • Auch wenn das System mit Gewichtseingaben beschrieben wurde, die in Spalten des Arrays übertragen werden, und Aktivierungseingaben, die in Zeilen des Arrays übertragen werden, werden in einigen Implementierungen die Gewichtseingaben in Zeilen des Arrays übertragen und die Aktivierungseingaben in Spalten des Arrays übertragen.
  • Auch wenn die Hardware für die Berechnung für Inferenzen beschrieben wird, kann die Hardware für eine oder mehrere der folgenden Aufgaben verwendet werden: Training von Faltungs- oder vollständig verbundener neuronaler Netzwerke, lineare oder logistische Regression, Clustering, z. B. K-Means-Clustering, Videokodierung und Bildverarbeitung.
  • Ausführungsformen des Gegenstands und die in dieser Spezifikation beschriebenen funktionalen Tätigkeiten 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 enthält 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 an einem Standort angeordnet sind oder über mehrere Standorte verteilt sind und über ein Kommunikationsnetz verbunden sind. Die in dieser Beschreibung dargestellten Prozesse und Logikabläufe können durch einen oder mehrere programmierbare Computer 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 Sonderzweckschaltungen 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 Tätigkeiten gemäß Anweisungen und ein oder mehr Speichergeräte für das Speichern von Anweisungen und Daten. Im Allgemeinen beinhaltet ein Computer eine oder mehrere Massenspeichergeräte für das Speichern von Daten, z. B. Magnet-, magnetooptische oder optische Disketten, um Daten zu empfangen 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 Nutzer 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 von dem Nutzer 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 der 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 der 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 enthält diese Spezifikation viele spezifische Implementierungsdetails, jedoch sollten diese nicht als Beschränkungen des Umfangs oder des Anspruchs ausgelegt werden, sondern vielmehr als Beschreibungen 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 Tätigkeiten in den Zeichnungen zwar in einer bestimmten Reihenfolge dargestellt, aber dies sollte nicht als Anfordernis verstanden werden, dass solche Tätigkeiten in der bestimmten gezeigten Reihenfolge oder in einer aufeinanderfolgenden Reihenfolge ausgeführt werden müssen oder dass alle dargestellten Tätigkeiten 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 (14)

  1. Eine Schaltung für die Durchführung neuronaler Netzwerkberechnungen für ein neuronales Netzwerk, umfassend eine Vielzahl neuronaler Netzwerkschichten, die Schaltung umfassend: eine Matrixberechnungseinheit, so konfiguriert, dass sie für jede der Vielzahl der neuronalen Netzwerkschichten: eine Vielzahl von Gewichtseingaben und eine Vielzahl von Aktivierungseingaben für die neuronale Netzwerkschicht empfängt, eine Vielzahl akkumulierter Werte auf Basis der Vielzahl der Gewichtseingaben und der Vielzahl der Aktivierungseingaben erzeugt; und eine Vektorberechnungseinheit, kommunikativ gekoppelt mit der Matrixberechnungseinheit und so konfiguriert, dass sie für jede der Vielzahl der neuronalen Netzwerkschichten: eine Aktivierungsfunktion auf jeden akkumulierten Wert anwendet, der von der Matrixberechnungseinheit erzeugt wurde, um eine Vielzahl aktivierter Werte für die neuronale Netzwerkschicht zu erzeugen.
  2. Schaltung nach Anspruch 1, des Weiteren umfassend: einen vereinheitlichen Puffer, der kommunikativ mit der Matrixberechnungseinheit und der Vektorberechnungseinheit gekoppelt ist, wobei der vereinheitlichte Puffer so konfiguriert ist, dass er die Ausgabe von der Vektorberechnungseinheit empfängt und speichert, und der vereinheitlichte Puffer so konfiguriert ist, dass er die empfangene Ausgabe als Eingabe zur Matrixberechnungseinheit sendet.
  3. Schaltung nach Anspruch 2, des Weiteren umfassend: einen Sequenzer, so konfiguriert, dass er Anweisungen von einem Hostgerät empfängt und eine Vielzahl von Steuersignalen aus den Anweisungen erzeugt, wobei die Vielzahl der Steuersignale den Datenfluss durch die Schaltung steuern; und eine Direktspeicherzugriffs-Engine, die mit dem vereinheitlichten Puffer und dem Sequenzer kommunikativ gekoppelt ist, wobei die Direktspeicherzugriffs-Engine so konfiguriert ist, dass sie die Vielzahl von Aktivierungseingaben zum vereinheitlichten Puffer sendet, wobei der vereinheitlichte Puffer so konfiguriert ist, dass er die Vielzahl von Aktivierungseingaben zur Matrixberechnungseinheit sendet, und wobei die Direktspeicherzugriffs-Engine so konfiguriert ist, dass sie Ergebnisdaten aus dem vereinheitlichten Puffer liest.
  4. Schaltung nach Anspruch 3, des Weiteren umfassend: eine Speichereinheit, so konfiguriert, dass sie die Vielzahl von Gewichtseingaben zur Maxtrixberechnungseinheit sendet, und wobei die Speicherdirektzugriffs-Engine so konfiguriert ist, dass sie die Vielzahl der Gewichtseingaben zur Speichereinheit sendet.
  5. Schaltung aus einem der vorstehenden Ansprüche, wobei die Matrixberechnungseinheit als zweidimensionales systolisches Array konfiguriert ist, das eine Vielzahl von Zellen umfasst.
  6. Schaltung nach Anspruch 5, wobei das zweidimensionale systolische Array ein quadratisches Array ist.
  7. Schaltung nach Anspruch 5 oder 6, wobei die Vielzahl der Gewichtseingaben durch eine erste Vielzahl von Zellen entlang einer ersten Dimension des systolischen Arrays verschoben wird, und wobei die Vielzahl der Aktivierungseingaben durch eine zweite Vielzahl der Zellen entlang einer zweiten Dimension des systolischen Arrays verschoben wird.
  8. Schaltung nach Anspruch 7, wobei für eine bestimmte Schicht in der Vielzahl von Schichten eine Zahl der Vielzahl der Aktivierungseingaben größer ist als die Größe der zweiten Dimension des systolischen Arrays, und wobei das systolische Array so konfiguriert ist, dass es: die Vielzahl der Aktivierungseingaben in Teile aufteilt, wobei jeder Teil eine Größe kleiner oder gleich der Größe der zweiten Dimension hat; für jeden Teil einen jeweiligen Teil der akkumulierten Werte erzeugt und jeden Teil der akkumulierten Werte kombiniert, um einen Vektor der akkumulierten Werte für die bestimmte Schicht zu erzeugen.
  9. Schaltung nach Anspruch 7 oder 8, wobei für eine bestimmte Schicht in der Vielzahl von Schichten eine Zahl der Vielzahl der Gewichtseingaben größer ist als die Größe der ersten Dimension des systolischen Arrays, und wobei das systolische Array so konfiguriert ist, dass es: die Vielzahl der Gewichtseingaben in Teile aufteilt, wobei jeder Teil eine Größe kleiner oder gleich der Größe der ersten Dimension hat; für jeden Teil einen jeweiligen Teil der akkumulierten Werte erzeugt und jeden Teil der akkumulierten Werte kombiniert, um einen Vektor der akkumulierten Werte für die bestimmte Schicht zu erzeugen.
  10. Schaltung nach einem der Ansprüche 7 bis 9, wobei jede Zelle in der Vielzahl der Zellen Folgendes umfasst: ein Gewichtsregister, für das Speichern einer Gewichtseingabe konfiguriert; ein Aktivierungsregister, für das Speichern einer Aktivierungseingabe konfiguriert und so konfiguriert, dass es die Aktivierungseingabe zu einem anderen Register in einer ersten benachbarten Zelle entlang der zweiten Dimension sendet; ein Summenregister, das so konfiguriert ist, dass es einen vorher summierten Wert speichert; eine Multiplikationsschaltung, kommunikativ mit dem Gewichtsregister und dem Aktivierungsregister gekoppelt, wobei die Multiplikationsschaltung so konfiguriert ist, dass sie ein Produkt der Gewichtseingabe und der Aktivierungseingabe ausgibt; und ein Summierungsschaltung, die kommunikativ mit der Multiplikationsschaltung und dem Summenregister gekoppelt ist, wobei die Summierungsschaltung so konfiguriert ist, dass sie eine Summe des Produkts und des vorher summierten Wertes ausgibt, und wobei die Summierungsschaltung so konfiguriert ist, dass sie die Summe zu einem anderen Summenregister in einer zweiten benachbarten Zelle entlang der ersten Dimension sendet.
  11. Schaltung nach Anspruch 10, wobei die eine oder mehreren Zellen in der Vielzahl von Zellen jeweils so konfiguriert sind, dass sie die jeweilige Summe in einer jeweiligen Akkumulatoreinheit speichern, wobei die jeweilige Summe ein akkumulierter Wert ist.
  12. Schaltung nach einem der Ansprüche 7 bis 11, wobei die erste Dimension des systolischen Arrays den Spalten des systolischen Arrays entspricht, während die zweite Dimension des systolischen Arrays den Zeilen des systolischen Arrays entspricht.
  13. Schaltung nach einem der vorstehenden Ansprüche, wobei die Vektorberechnungseinheit jeden aktivierten Wert normalisiert, um eine Vielzahl normalisierter Werte zu erzeugen.
  14. Schaltung nach einem der vorstehenden Ansprüche, wobei die Vektorberechnungseinheit einen oder mehrere der aktivierten Werte in Pools zusammenfasst, um eine Vielzahl gepoolter Werte zu erzeugen.
DE202016107436.3U 2015-05-21 2016-04-26 Neuronaler Netzwerkprozessor Active DE202016107436U1 (de)

Priority Applications (4)

Application Number Priority Date Filing Date Title
US201562164931P true 2015-05-21 2015-05-21
US62/164,931 2015-05-21
US14/844,524 2015-09-03
US14/844,524 US9747546B2 (en) 2015-05-21 2015-09-03 Neural network processor

Publications (1)

Publication Number Publication Date
DE202016107436U1 true DE202016107436U1 (de) 2017-01-16

Family

ID=56081541

Family Applications (1)

Application Number Title Priority Date Filing Date
DE202016107436.3U Active DE202016107436U1 (de) 2015-05-21 2016-04-26 Neuronaler Netzwerkprozessor

Country Status (4)

Country Link
US (6) US9747546B2 (de)
DE (1) DE202016107436U1 (de)
TW (1) TWI627592B (de)
WO (1) WO2016186801A1 (de)

Families Citing this family (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10275394B2 (en) * 2015-10-08 2019-04-30 Via Alliance Semiconductor Co., Ltd. Processor with architectural neural network execution unit
US10616314B1 (en) 2015-12-29 2020-04-07 Amazon Technologies, Inc. Dynamic source routing for data transfer
US10482380B2 (en) * 2015-12-30 2019-11-19 Amazon Technologies, Inc. Conditional parallel processing in fully-connected neural networks
US10417560B2 (en) * 2016-12-01 2019-09-17 Via Alliance Semiconductor Co., Ltd. Neural network unit that performs efficient 3-dimensional convolutions
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
US10824934B2 (en) 2017-01-12 2020-11-03 Texas Instruments Incorporated Methods and apparatus for matrix processing in a convolutional neural network
US10062378B1 (en) * 2017-02-24 2018-08-28 International Business Machines Corporation Sound identification utilizing periodic indications
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
US10241972B2 (en) * 2017-03-16 2019-03-26 International Business Machines Corporation Matrix multiplication on a systolic array
US10387298B2 (en) 2017-04-04 2019-08-20 Hailo Technologies Ltd Artificial neural network incorporating emphasis and focus techniques
CN109937416A (zh) 2017-05-17 2019-06-25 谷歌有限责任公司 低时延矩阵乘法部件
KR20190111132A (ko) * 2017-05-17 2019-10-01 구글 엘엘씨 특수 목적 뉴럴 네트워크 트레이닝 칩
CN107146616B (zh) * 2017-06-13 2020-05-08 Oppo广东移动通信有限公司 设备控制方法及相关产品
CN112214727A (en) * 2017-07-07 2021-01-12 华为技术有限公司 Operation accelerator
US10671349B2 (en) * 2017-07-24 2020-06-02 Tesla, Inc. Accelerated mathematical engine
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 삼성전자주식회사 병렬 연산 처리를 수행하는 메모리 장치 및 이를 포함하는 메모리 모듈
CN109977071A (zh) * 2017-12-27 2019-07-05 北京中科寒武纪科技有限公司 神经网络处理器板卡及相关产品
US10416899B2 (en) * 2018-02-13 2019-09-17 Tesla, Inc. Systems and methods for low latency hardware memory management
TWI659324B (zh) * 2018-02-14 2019-05-11 倍加科技股份有限公司 電路規劃結果產生方法與系統
US20190266111A1 (en) * 2018-02-27 2019-08-29 Goke Us Research Laboratory Method and apparatus for high speed data processing
US10452871B2 (en) 2018-02-27 2019-10-22 Goke Us Research Laboratory Method and apparatus for data encryption using a standardized data storage and retrieval protocol
US10509698B2 (en) 2018-02-27 2019-12-17 Goke Us Research Laboratory Method and apparatus for data encoding and decoding using a standardized data storage and retrieval protocol
US10509600B2 (en) 2018-02-27 2019-12-17 Goke Us Research Laboratory Method and apparatus for data compression and decompression using a standardized data storage and retrieval protocol
CN110222833A (zh) 2018-03-01 2019-09-10 华为技术有限公司 一种用于神经网络的数据处理电路
US10621489B2 (en) 2018-03-30 2020-04-14 International Business Machines Corporation Massively parallel neural inference computing elements
TWI673614B (zh) * 2018-03-30 2019-10-01 倍加科技股份有限公司 壓縮資料識別模型的方法及電腦裝置、電腦可讀取的記錄媒體
WO2019199392A1 (en) 2018-04-12 2019-10-17 Google Llc Augmented reality microscope for pathology with overlay of quantitative biomarker data
US10387122B1 (en) 2018-05-04 2019-08-20 Olsen Ip Reserve, Llc Residue number matrix multiplier
US10832133B2 (en) 2018-05-31 2020-11-10 Neuralmagic Inc. System and method of executing neural networks
US20190392287A1 (en) * 2018-06-22 2019-12-26 Samsung Electronics Co., Ltd. Neural processor
KR20200064264A (ko) 2018-11-28 2020-06-08 삼성전자주식회사 반도체 메모리 장치 및 반도체 메모리 장치의 동작 방법
US10867399B2 (en) 2018-12-02 2020-12-15 Himax Technologies Limited Image processing circuit for convolutional neural network
CN109657788A (zh) * 2018-12-18 2019-04-19 北京中科寒武纪科技有限公司 数据处理方法、装置及相关产品
CN110163338A (zh) * 2019-01-31 2019-08-23 腾讯科技(深圳)有限公司 具有运算阵列的芯片运算方法、装置、终端及芯片

Family Cites Families (31)

* 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
EP0484506A4 (de) 1990-05-22 1994-03-23 International Business Machines Corporation
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
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
US5892962A (en) 1996-11-12 1999-04-06 Lucent Technologies Inc. FPGA-based processor
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
US8417758B1 (en) 2009-09-01 2013-04-09 Xilinx, Inc. Left and right matrix multiplication using a systolic array
TWI417797B (zh) 2010-02-04 2013-12-01 Univ Nat Taipei Technology A Parallel Learning Architecture and Its Method for Transferred Neural Network
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 具自由回饋節點的高速硬體倒傳遞及回饋型類神經網路
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
US20170103313A1 (en) 2017-04-13
TW201830296A (zh) 2018-08-16
US20190354862A1 (en) 2019-11-21
WO2016186801A1 (en) 2016-11-24
TWI627592B (zh) 2018-06-21
US20180046907A1 (en) 2018-02-15
US9747546B2 (en) 2017-08-29
US9710748B2 (en) 2017-07-18
US10699188B2 (en) 2020-06-30
US20160342891A1 (en) 2016-11-24
TW201710959A (zh) 2017-03-16
US20200218981A1 (en) 2020-07-09
US20200057942A1 (en) 2020-02-20

Similar Documents

Publication Publication Date Title
Farhi et al. Classification with quantum neural networks on near term processors
US9842293B2 (en) Batch processing in a neural network processor
DE102017113733A1 (de) Faltendes neuronales Netzwerk auf programmierbarem zweidimensionalem Bildprozessor
DE112016002185T5 (de) Sprachaktivitätserkennung
DE202017105829U1 (de) System für kommunikationseffizientes gemeinschaftliches Lernen
US10402700B2 (en) Generating images using neural networks
EP1360579B1 (de) Verfahren und vorrichtung zum modularen multiplizieren und rechenwerk zum modularen multiplizieren
DE60122317T2 (de) Iteratives aufbauen von verschiebungsabbildungen zur verzerrung von bildern
DE112012005030T5 (de) Dynamisch konfigurierbare Platzierungs-Engine
US20170103313A1 (en) Neural Network Processor
DE102017120452A1 (de) Auswerten von Eingangsdatenseltenheit in Berechnungseinheiten eines neuronalen Netzes
DE202015009254U1 (de) Automatisch erzeugende ausführungssequenzen für workflows
DE102013221057A1 (de) System und Verfahren für Batch-Auswertungs-Programme
DE102018132069A1 (de) Äquivariante Orientierungspunkt-Transformation für Orientierungspunkt-Lokalisierung
US10733505B2 (en) Performing kernel striding in hardware
DE112010003595T5 (de) Verfahren, System und maschinenverarbeitbares Medium zur Bereitstellung einer verteiltenPrädikatvorhersage
DE4414172A1 (de) Gleit-Komma-Arithmetikeinheit zur Division und Quadratwurzelberechnung, die eine modifizierte Newton-Raphson Technik verwendet
DE102016013985A1 (de) Vorrichtung für maschinelles Lernen und Verfahren zum Optimieren der Laufruhe des Vorschubs der Vorschubachse einer Maschine und eine die Vorrichtung für maschinelles Lernen umfassende Motorsteuervorrichtung
DE102013207049A1 (de) Überwachen der Datenstrompufferung zur Optimierung der Operatorverarbeitung
DE102004046237A1 (de) Verfahren und System für die gemischte rigide Registrierung von medizinischen 2D/3D-Bildern
DE102017120588A1 (de) Befehlssatzarchitektur für neuronale Netze
DE112015007176T5 (de) Visuelle Erkennung unter Verwendung von Deep Learning-Attributen
EP3373210B1 (de) Transponieren neuronaler netzwerkmatrizen in hardware
CN106982359B (zh) 一种双目视频监控方法、系统和计算机可读存储介质
EP2564049B1 (de) STEUERGERÄT UND VERFAHREN ZUR BERECHNUNG EINER AUSGANGSGRÖßE FÜR EINE STEUERUNG

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