DE202017105528U1 - Ausführen von Mittelwert-Poolbildung in Hardware - Google Patents

Ausführen von Mittelwert-Poolbildung in Hardware Download PDF

Info

Publication number
DE202017105528U1
DE202017105528U1 DE202017105528.0U DE202017105528U DE202017105528U1 DE 202017105528 U1 DE202017105528 U1 DE 202017105528U1 DE 202017105528 U DE202017105528 U DE 202017105528U DE 202017105528 U1 DE202017105528 U1 DE 202017105528U1
Authority
DE
Germany
Prior art keywords
tensor
elements
neural network
sensor
input
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
DE202017105528.0U
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 claimed from US15/377,196 external-priority patent/US10032110B2/en
Application filed by Google LLC filed Critical Google LLC
Publication of DE202017105528U1 publication Critical patent/DE202017105528U1/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/0464Convolutional networks [CNN, ConvNet]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N5/00Computing arrangements using knowledge-based models
    • G06N5/04Inference or reasoning models

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Mathematical Physics (AREA)
  • Artificial Intelligence (AREA)
  • Evolutionary Computation (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Neurology (AREA)
  • Image Analysis (AREA)
  • Complex Calculations (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Advance Control (AREA)

Abstract

System, das umfasst:
eine Hardware-Schaltung; und
eine oder mehrere Speichervorrichtungen, die Anweisungen speichern, die arbeiten, wenn sie durch die Hardware-Schaltung ausgeführt werden, um zu bewirken, dass die Hardware-Schaltung Operationen ausführt, die umfassen:
Ausführen einer Faltung eines Eingabetensors für die Mittelwert-Poolbildungsschicht des neuronalen Netzes und eines Kerns mit einer Größe gleich einem Fenster der Poolbildungsschicht des neuronalen Netzes, der aus Elementen besteht, die jeweils eine Einheitsmatrix sind, um einen ersten Tensor zu erzeugen; und
Ausführen von Operationen, um zu bewirken, dass jedes Element des ersten Tensors durch eine Anzahl von Elementen in dem Fenster der Mittelwert-Poolbildungsschicht des neuronalen Netzes dividiert wird, um einen initialen Ausgabetensor zu erzeugen.

Description

  • Hintergrund
  • Diese Anmeldung bezieht sich auf das Berechnen von Inferenzen in neuronalen Netzen in Hardware.
  • Neuronale Netze sind Modelle zum maschinellen Lernen, die eine oder mehrere Schichten einsetzen, um eine Ausgabe, z. B. eine Klassifizierung, für eine empfangene Eingabe zu erzeugen. Einige neuronale Netze enthalten eine oder mehrere verdeckte Schichten zusätzlich zu einer Ausgabeschicht. Die Ausgabe jeder verdeckten Schicht wird als Eingabe für die nächste Schicht in dem Netz, d. h. die nächste verdeckte Schicht oder die Ausgabeschicht des Netzes, verwendet. Jede Schicht des Netzes erzeugt eine Ausgabe aus einer empfangenen Eingabe in Übereinstimmung mit aktuellen Werten einer jeweiligen Parametermenge.
  • Zusammenfassung
  • Zu schützen durch das Gebrauchsmuster und Gegenstand des Gebrauchsmusters sind in Übereinstimmung mit den Anforderungen des Gebrauchsmustergesetzes nur Einrichtungen, wie sie in den beigefügten Ansprüchen definiert sind, jedoch keine Verfahren. In dem Fall, in dem die Beschreibung sich auf Verfahren bezieht, dienen diese Bezugnahmen lediglich dazu, die Einrichtung oder Einrichtungen zu veranschaulichen, für die Schutz mit den beigefügten Ansprüchen gesucht wird.
  • Im Allgemeinen beschreibt diese Anmeldung eine Spezial-Hardware-Schaltung, die Inferenzen in neuronalen Netzen berechnet.
  • Im Allgemeinen enthält ein innovativer Aspekt des Gegenstands, der in dieser Anmeldung beschrieben ist, Systeme und Verfahren zum Empfangen einer Anforderung, ein neuronales Netz auf einer Hardware-Schaltung zu verarbeiten, wobei das neuronale Netz eine Mittelwert-Poolbildungsschicht des neuronalen Netzes umfasst, und in Reaktion darauf Erzeugen von Anweisungen, die dann, wenn sie durch die Hardware-Schaltung ausgeführt werden, bewirken, dass die Hardware-Schaltung während der Verarbeitung einer Netzeingabe durch das neuronale Netz einen Schichtausgabetensor erzeugt, der einer Ausgabe der Mittelwert-Poolbildungsschicht des neuronalen Netzes äquivalent ist, durch Ausführen von Operationen, die umfassen: Ausführen einer Faltung eines Eingabetensors für die Mittelwert-Poolbildungsschicht des neuronalen Netzes und eines Kerns mit einer Größe gleich einem Fenster der Mittelwert-Poolbildungsschicht des neuronalen Netzes, der aus Elementen besteht, von denen jedes eine Einheitsmatrix ist, um einen ersten Tensor zu erzeugen, und Ausführen von Operationen, um zu bewirken, dass jedes Element aus dem ersten Tensor durch eine Anzahl von Elementen in dem Fenster der Mittelwert-Poolbildungsschicht des neuronalen Netzes dividiert wird, um einen initialen Ausgabetensor zu erzeugen.
  • Implementierungen können eines oder mehrere aus den folgenden Merkmalen enthalten. In einigen Implementierungen enthalten innovative Aspekte des Gegenstands Neuskalieren von Randelementen des initialen Ausgabetensors durch einen ersten Skalierungsfaktor und Neuskalieren von Eckelementen des initialen Ausgabetensors durch einen zweiten Skalierungsfaktor, um einen Ausgabetensor zu erzeugen. Der erste Skalierungsfaktor basiert auf einer Anzahl von Elementen des Eingabetensors, die mit Elementen des Kerns bei dem Ausführen der Faltung multipliziert werden, um ein Randelement des ersten Tensors zu erzeugen, und der zweite Skalierungsfaktor basiert auf einer Anzahl von Elementen in dem Eingabetensor, die mit Elementen des Kerns bei dem Ausführen der Faltung multipliziert werden, um ein Eckelement des ersten Tensors zu erzeugen. In einigen Implementierungen enthalten innovative Aspekte Neuskalieren von dem Rand benachbarten Elementen des ersten Tensors mit einem dritten Skalierungsfaktor und Neuskalieren von einer Ecke benachbarten Elementen des ersten Tensors mit einem vierten Skalierungsfaktor, um den Ausgabetensor zu erzeugen.
  • Implementierungen können ferner eines oder mehrere aus den folgenden Merkmalen enthalten. Ausführen der Faltung des Eingabetensors und des Kerns, um den ersten Tensor zu erzeugen, umfasst Auffüllen des Eingabetensors mit Nullen, um einen mit Nullen aufgefüllten Eingabetensor zu erzeugen, und Ausführen einer Faltung des mit Nullen aufgefüllten Eingabetensors und des Kerns, um den ersten Tensor zu erzeugen. Ausführen der Operationen, um zu bewirken, dass jedes Element des ersten Tensors durch eine Anzahl von Elementen in dem Fenster der Mittelwert-Poolbildungsschicht des neuronalen Netzes dividiert werden, um den initialen Ausgabetensor zu erzeugen, umfasst Ausführen einer ersten Multiplikation jedes Elements des ersten Tensors mit einem ersten Faktor, wobei der erste Faktor ein kleinster gemeinsamer Nenner (i) einer Anzahl von Elementen eines Eingabetensors, die multipliziert sind mit Elementen eines Kerns mit einer Größe gleich dem Fenster der Mittelwert-Poolbildungsschicht des neuronalen Netzes zum Ausführen einer Faltung, um ein Eckelement eines Ausgabetensors zu erzeugen, (ii) einer Anzahl von Elementen eines Eingabetensors, die multipliziert sind mit Elementen eines Kerns mit einer Größe gleich dem Fenster der Mittelwert-Poolbildungsschicht des neuronalen Netzes zum Ausführen einer Faltung, um ein Randelement eines Ausgabetensors zu erzeugen, und (iii) der Anzahl von Elementen in dem Fenster der Mittelwert-Poolbildungsschicht des neuronalen Netzes, und Ausführen einer zweiten Multiplikation jedes Elements des ersten Tensors mit einem oder mehreren zweiten Faktoren, wobei jeder zweite Faktor auf einer Anzahl von Elementen in dem Eingabetensor basiert, die multipliziert sind mit Elementen des Kerns zum Ausführen der Faltung, um das jeweilige Element des ersten Tensors zu erzeugen. Elemente eines Ergebnisses des Ausführens der ersten Multiplikation weisen eine höhere Bitauflösung als eine Bitauflösung der Elemente des ersten Tensors auf.
  • Implementierungen können ferner eines oder mehrere aus den folgenden Merkmalen enthalten. Das Ausführen der Operationen, um zu bewirken, dass jedes Element des ersten Tensors durch eine Anzahl von Elementen in dem Fenster der Mittelwert-Poolbildungsschicht eines neuronalen Netzes dividiert wird, um den initialen Ausgabetensor zu erzeugen, umfasst Erzeugen eines Maskierungstensors, wobei eine Größe des Maskierungstensors durch eine Größe des Eingabetensors bestimmt wird und wobei Elemente des Maskierungstensors durch eine Größe des Fensters der Mittelwert-Poolbildungsschicht des neuronalen Netzes bestimmt werden, und Ausführen elementweiser Multiplikation jedes Elements des ersten Tensors und jedes entsprechenden Elements des Maskierungstensors. Das Erzeugen des Maskierungstensors umfasst Kacheln eines oder mehrerer Maskierungstensorfragmente, die im Speicher gespeichert sind. Der Eingabetensor wird in einem Einheitspuffer der Hardware-Schaltung gespeichert, und der Maskierungstensor wird in einem dynamischen Speicher der Hardware-Schaltung gespeichert, und wobei das Ausführen der Operationen, um zu bewirken, dass jedes Element des ersten Tensors durch eine Anzahl von Elementen in dem Fenster der Mittelwert-Poolbildungsschicht des neuronalen Netzes dividiert wird, um den initialen Ausgabetensor zu erzeugen, Senden des Eingabetensors aus dem Einheitspuffer zu einer Matrixberechnungseinheit der Hardware-Schaltung, die in Hardware-Schaltung implementiert ist, Senden des Maskierungstensors aus dem dynamischen Speicher zu der Matrixberechnungseinheit der Hardware-Schaltung und Ausführen durch die Matrixberechnungseinheit der Hardware-Schaltung von elementweiser Multiplikation des Eingabetensors und des Maskierungstensors, um den ersten Tensor zu erzeugen, umfasst.
  • Implementierungen können ferner eines oder mehrere aus den folgenden Merkmalen enthalten. Der Eingabetensor wird in einem Einheitspuffer der Hardware-Schaltung gespeichert, und der Kern wird in einem dynamischen Speicher der Hardware-Schaltung gespeichert, wobei das Ausführen der Faltung des Eingabetensors und des Kerns, um den ersten Tensor zu erzeugen, Senden des Eingabetensors aus dem Einheitspuffer zu einer Matrixberechnungseinheit der Hardware-Schaltung, die in Hardware implementiert ist, Senden des Kerns aus dem dynamischen Speicher zu der Matrixberechnungseinheit der Hardware-Schaltung und Ausführen durch die Matrixberechnungseinheit der Hardware-Schaltung der Faltung des Eingabetensors und des Kerns, um den ersten Tensor zu erzeugen, umfasst. Das Ausführen der Faltung und das Ausführen der Operationen, um zu bewirken, dass jedes Element des ersten Tensors dividiert wird, werden als Festkommaoperationen auf Werten, die in Ganzzahlregistern gespeichert sind, ausgeführt.
  • Spezielle Ausführungsformen des in dieser Anmeldung beschriebenen Gegenstands können so implementiert sein, dass sie eine oder mehrere aus den folgenden Vorteilen realisieren. Ein Ausgabetensor, der einer Mittelwert-Poolbildungsschicht des neuronalen Netzes entspricht, kann in Hardware durch eine Spezial-Hardware-Schaltung erzeugt werden, selbst wenn die Hardware-Schaltung einen Eingabetensor nicht direkt verarbeiten kann, um Mittelwert-Poolbildung auszuführen. Durch Erzeugen der geeigneten Ausgabe unter Verwendung der Spezial-Hardware-Schaltung kann die Verarbeitung einer Mittelwert-Poolbildungsschicht des neuronalen Netzes ausgeführt werden, ohne Daten zurück zu einem Host-Computer zu leiten, d. h. ohne Ausführen wenigstens eines Teils der Berechnung außerhalb des Chips, selbst wenn die Spezial-Hardware-Schaltung die Mittelwert-Poolbildung nicht direkt unterstützt. Das ermöglicht es, dass eine Inferenz eines neuronalen Netzes, das eine Mittelwert-Poolbildungsschicht enthält, ohne Modifizieren der Hardware-Architektur der Spezial-Hardware-Schaltung effizient bestimmt wird. Das heißt, Verarbeitungsverzögerungen, die vom Ausführen eines Teils der Verarbeitung außerhalb des Chips, in Software oder beidem herrühren, werden vermieden.
  • Der in dieser Anmeldung beschriebene Gegenstand bezieht sich auch auf ein Bilderkennungs- oder Klassifizierungsverfahren und System, die die offenbarten Verfahren und Hardware zum effizienten Ausführen von Mittelwert-Poolbildung in Berechnung eines neuronalen Netzes verwenden.
  • Die Einzelheiten einer oder mehrerer Ausführungsformen des Gegenstands dieser Anmeldung sind in den begleitenden Zeichnungen und der nachstehenden Beschreibung dargelegt. Andere Merkmale, Aspekte und Vorteile des Gegenstands werden aus der Beschreibung, den Zeichnungen und den Ansprüchen offensichtlich.
  • Kurzbeschreibung der Zeichnungen
  • 1 zeigt ein beispielhaftes Verarbeitungssystem eines neuronalen Netzes.
  • 2 ist ein Ablaufdiagramm eines Beispielverfahrens zum Ausführen einer Berechnung für eine gegebene Schicht eines neuronalen Netzes.
  • 3 zeigt ein beispielhaftes Verarbeitungssystem eines neuronalen Netzes.
  • 4 zeigt eine Beispielarchitektur, die eine Matrixberechnungseinheit enthält.
  • 5 zeigt eine Beispielarchitektur einer Zelle innerhalb eines systolischen Array.
  • 6 ist ein Ablaufdiagramm eines Beispielverfahrens zum Anweisen eines Verarbeitungssystems eines neuronalen Netzes, eine Berechnung für eine Mittelwert-Poolbildungsschicht eines neuronalen Netzes auszuführen.
  • 7 ist ein Ablaufdiagramm eines Beispielverfahrens zum Ausführen einer Berechnung für eine Mittelwert-Poolbildungsschicht eines neuronalen Netzes.
  • 8 ist ein Beispiel einer Berechnung für eine Mittelwert-Poolbildungsschicht eines neuronalen Netzes.
  • 9 ist ein Beispiel einer Berechnung zum Neuskalieren von Randelementen in einer Mittelwert-Poolbildungsschicht eines neuronalen Netzes.
  • Gleiche Bezugszeichen und Bezeichnungen in den verschiedenen Zeichnungen geben gleiche Elemente an.
  • Ausführliche Beschreibung
  • Ein neuronales Netz, das mehrere Schichten aufweist, kann verwendet werden, um Inferenzen zu berechnen. Beispielsweise kann bei einer gegebenen Eingabe das neuronale Netz eine Inferenz für die Eingabe berechnen. Das neuronale Netz berechnet diese Inferenz durch Verarbeiten der Eingabe über jede aus den Schichten des neuronalen Netzes. Jede Schicht empfängt eine Eingabe und verarbeitet die Eingabe in Übereinstimmung mit der Menge von Gewichten für die Schicht, um eine Ausgabe zu erzeugen.
  • Deshalb empfängt das neuronale Netz, um eine Inferenz aus einer empfangenen Eingabe zu berechnen, die Eingabe und verarbeitet sie über jede aus den Schichten des neuronalen Netzes, um die Inferenz zu erzeugen, wobei die Ausgabe aus einer Schicht des neuronalen Netzes als Eingabe für die nächste Schicht des neuronalen Netzes bereitgestellt wird. Dateneingaben in eine Schicht eines neuronalen Netzes, z. B. entweder die Eingabe für das neuronale Netz oder die Ausgaben der Schicht unterhalb der Schicht in der Folge in eine Schicht eines neuronalen Netzes, können als Aktivierungseingaben für die Schicht bezeichnet werden.
  • In einigen Implementierungen sind die Schichten des neuronalen Netzes in einer Folge angeordnet. In einigen anderen Implementierungen sind die Schichten als gerichtete Graphen 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 eine Eingabe zu einer früheren Schicht zurückgesendet werden kann.
  • Einige neuronale Netze bündeln [engl.: pool] Ausgaben aus einer oder mehreren Schichten des neuronalen Netzes, um gebündelte Werte zu erzeugen, die als Eingabe für nachfolgende Schicht des neuronalen Netzes verwendet werden. In einigen Implementierungen bündelt das neuronale Netz eine Gruppe von Ausgaben durch Bestimmen eines Maximums, eines Minimums oder eines Mittelwerts der Gruppe von Ausgaben und Verwenden des Maximums, Minimums oder Mittelwerts als die gebündelte Ausgabe für die Gruppe. Bündeln [engl.: Pooling] der Ausgabe kann einige räumliche Invarianz erhalten, so dass die Ausgaben, die in verschiedenen Konfigurationen angeordnet sind, so verarbeitet werden können, dass sie die gleiche Inferenz aufweisen. In einigen Implementierungen kann die Poolbildung für die Ausgaben auch die Größe oder Dimensionalität von Eingaben, die an den nachfolgenden Schicht des neuronalen Netzes empfangen werden, reduzieren, während es gewünschte Eigenschaften der Ausgaben vor der Poolbildung erhält, was die Effizienz verbessern kann, ohne einen wesentlichen Kompromiss für die Qualität von Inferenzen, die durch die neuronalen Netze erzeugt werden, einzugehen.
  • Diese Anmeldung beschreibt die Spezial-Hardware-Schaltungsanordnung, die Schichten eines neuronalen Netzes verarbeitet und optional Poolbildung auf Ausgaben einer oder mehrere Schichten des neuronalen Netzes ausführt.
  • 1 zeigt ein beispielhaftes Verarbeitungssystem 100 eines neuronalen Netzes. Das Verarbeitungssystem 100 des neuronalen Netzes ist ein Beispiel eines Systems, das als ein oder mehrere Computer an einem oder mehreren Orten implementiert ist, in denen Systeme, Komponenten und Techniken, die nachstehend beschreiben sind, implementiert sein können.
  • Das Verarbeitungssystem 100 des neuronalen Netzes ist ein System, das Berechnungen des neuronalen Netzes unter Verwendung einer Spezial-Hardware-Schaltung 110 ausführt. Die Hardware-Schaltung 110 ist eine integrierte Schaltung zum Ausführen von Berechnungen des neuronalen Netzes und enthält eine Matrixberechnungseinheit 120, die Vektor-Matrixmultiplikationen in Hardware ausführt. Die Hardware-Schaltung 110 enthält außerdem eine Vektorberechnungseinheit 140. Eine beispielhafte Spezial-Hardware-Schaltung 120 ist nachstehend mit Bezug auf 3 genauer beschrieben.
  • Insbesondere empfängt das Verarbeitungssystem 100 des neuronalen Netzes Anforderungen, neuronale Netze auf der Spezial-Hardware-Schaltung 110 zu implementieren, implementiert die neuronalen Netze auf der Spezial-Hardware-Schaltung 110 und verarbeitet, sobald ein gegebenes neuronales Netz implementiert ist, Eingaben in das neuronale Netz unter Verwendung der Spezial-Hardware-Schaltung 110, um Inferenzen des neuronalen Netzes zu erzeugen.
  • Das heißt, das Verarbeitungssystem 100 des neuronalen Netzes kann eine Anforderung empfangen, die eine Architektur eines neuronalen Netzes für ein neuronales Netz spezifiziert, das verwendet werden soll, um Eingaben zu verarbeiten. Die Architektur des neuronalen Netzes definiert die Anzahl und Konfiguration von Schichten in dem neuronalen Netz und Werte der Parameter für jede aus den Schichten, die Parameter aufweist.
  • Um ein neuronales Netz auf der integrierten Spezialschaltung 110 zu implementieren, enthält das Verarbeitungssystem 100 des neuronalen Netzes eine Implementierungs-Engine 150 für ein neuronales Netz, die als ein oder mehrere Computerprogramme auf einem oder mehreren Computern an einem oder mehreren physikalischen Orten implementiert ist.
  • Die Implementierungs-Engine 150 für das neuronale Netz erzeugt Anweisungen, die dann, wenn sie durch die Spezial-Hardware-Schaltung 110 ausgeführt werden, bewirken, dass die Hardware-Schaltung 110 die Operationen ausführt, die durch das neuronale Netz spezifiziert sind, um eine Ausgabe des neuronalen Netzes aus einer empfangenen Eingabe des neuronalen Netzes zu erzeugen.
  • Sobald die Anweisungen durch die Implementierungs-Engine 150 für das neuronale Netz erzeugt worden und der Hardware-Schaltung 110 zur Verfügung gestellt worden sind, kann das Verarbeitungssystem 100 des neuronalen Netzes Eingaben des neuronalen Netzes empfangen und kann die Eingaben des neuronalen Netzes unter Verwendung des neuronalen Netzes durch Bewirken, dass die Hardware-Schaltung 110 die erzeugten Anweisungen ausführt, verarbeiten.
  • Einige neuronale Netze enthalten jedoch eine oder mehrere inkompatible Schichten des neuronalen Netzes. Der Begriff inkompatible Schicht des neuronalen Netzes, wie er in dieser Anmeldung verwendet ist, bezieht sich auf eine Schicht des neuronalen Netzes, die eine Operation spezifiziert, die nicht direkt in Hardware durch die Spezial-Hardware-Schaltung 110 ausgeführt werden kann. Um diese neuronalen Netze auf der Hardware-Schaltung 110 zu implementieren, erzeugt die Implementierungs-Engine 150 für das neuronale Netz Anweisungen, die dann, wenn sie durch die Hardware-Schaltung 110 ausgeführt werden, bewirken, dass die Hardware-Schaltung 110 eine Ausgabe für die inkompatible Schicht des neuronalen Netzes erzeugt durch Ausführen von Operationen in Hardware, die von denen, die durch die Schicht des neuronalen Netzes spezifiziert sind, verschieden sind, die jedoch dazu führen, dass eine Schichtausgabe erzeugt wird, die die Anmeldung der inkompatiblen Schicht des neuronalen Netzes erfüllt, d. h. eine Schichtausgabe, der die gleiche ist wie eine Ausgabe, der durch direktes Ausführen der spezifizierten Operationen durch die Schicht erzeugt worden wäre.
  • Insbesondere enthalten einige neuronale Netze eine Mittelwert-Poolbildungsschicht. Eine solche Schicht eines neuronalen Netzes definiert ein Fenster zum Ausführen der Mittelwert-Poolbildung. Konzeptionell wird, um ein Element eines Ausgabetensors der Mittelwert-Poolbildungsschicht zu erzeugen, ein Bereich eines Eingabetensors identifiziert, der die Dimensionen des Fensters aufweist, und ein Mittelwert der Elemente innerhalb des Bereichs wird bestimmt. Das Fenster wird über den Eingabetensor verschoben, d. h. mit einer Schrittweite von eins, um den Ausgabetensor zu erzeugen. In einem solchen Szenario wird der Ausgabetensor Dimensionen aufweisen, die mit denjenigen des Eingabetensors übereinstimmen. Der Ausgabetensor kann dann als eine Inferenz des neuronalen Netzes oder als ein Eingabetensor für eine nachfolgende Schicht des neuronalen Netzes bereitgestellt werden.
  • Einige neuronale Netze können andere Typen von Poolbildungsschichten enthalten, die allgemein einen Tensor produzieren, in dem jedes Element das Ergebnis einer Operation ist, z. B. einer algebraischen Operation, die auf Teilmengen von Elementen eines Eingabetensors angewandt wird. Beispielsweise kann eine Maximum-Poolbildungsschicht oder eine Minimum-Poolbildungsschicht ein Fenster für Maximum- oder Minimum-Poolbildung spezifizieren, wobei jedes Element in einem Ausgabetensor, der durch die Poolbildungsschicht erzeugt wird, ein jeweiliges Maximum oder Minimum eines entsprechenden Bereichs von Elementen des Eingabetensors ist.
  • Weil die Haupt-Hardware-Einheit, die Matrixoperationen auf der Spezial-Hardware-Schaltung 110 ausführt, die Matrixberechnungseinheit 120 ist und obwohl die Spezial-Hardware-Schaltung 110 eine andere Schaltungsanordnung enthalten kann, die andere Operationen des neuronalen Netzes in Hardware ausführt, kann die Spezial-Hardware-Schaltung 110 eine Ausgabe einer Mittelwert-Poolbildungsschicht nicht direkt berechnen. Um ein neuronales Netz zu implementieren, das eine Mittelwert-Poolbildungsschicht enthält, erzeugt die Implementierungs-Engine 150 für das neuronale Netz Anweisungen, die dann, wenn sie durch die Spezial-Hardware-Schaltung 110 während der Verarbeitung der Eingabe zu dem neuronalen Netz durch das neuronale Netz ausgeführt werden, bewirken, dass die Spezial-Hardware-Schaltung 110 andere Operationen in der Hardware ausführt, um einen Ausgabetensor zu erzeugen, der die Anmeldung der Mittelwert-Poolbildungsschicht des neuronalen Netzes erfüllt. Insbesondere können die Anweisungen verwendet werden, um Steuersignale zum Steuern der Matrixmultiplikationseinheit 120 und der Vektorberechnungseinheit 140 zu erzeugen, um Operationen auszuführen, die zu der Ausgabe eines Tensors führen, der die Anmeldung der Mittelwert-Poolbildungsschicht erfüllt. Diese Anweisungen und andere Operationen sind nachstehend genauer mit Bezug auf die 610 beschrieben.
  • 2 ist ein Ablaufdiagramm eines Beispielprozesses 200 zum Ausführen einer Berechnung für eine gegebene Schicht eines neuronalen Netzes unter Verwendung einer Spezial-Hardware-Schaltung. Zur Vereinfachung wird das Verfahren 200 mit Bezug auf ein System beschrieben, das eine oder mehrere Schaltungen aufweist, die das Verfahren 200 ausführen. Das Verfahren 200 kann für jede Schicht des neuronalen Netzes ausgeführt werden, um eine Inferenz aus einer empfangenen Eingabe zu berechnen.
  • Das System empfängt Mengen von Gewichtseingaben (Schritt 202) und Mengen von Aktivierungseingaben (Schritt 204) für eine gegebene Schicht. Die Mengen der Gewichtseingaben und die Mengen der Aktivierungseingaben können aus dem dynamischen Speicher bzw. einem Einheitspuffer der Spezial-Hardware-Schaltung empfangen werden. In einigen Implementierungen können sowohl die Mengen der Gewichtseingaben als auch die Mengen der Aktivierungseingaben aus dem Einheitspuffer empfangen werden.
  • Das System erzeugt akkumulierte Werte aus den Gewichtseingaben und den Aktivierungseingaben unter Verwendung einer Matrixmultiplikationseinheit der Spezial-Hardware-Schaltung (Schritt 206). In einigen Implementierungen sind die akkumulierten Werte innere Produkte der Mengen von Gewichtseingaben und der Mengen von Aktivierungseingaben. Das heißt, für eine Menge von Gewichten, die eine Teilmenge aller Gewichte in der Schicht ist, kann das System jede Gewichtseingabe mit jeder Aktivierungseingabe multiplizieren und die Produkte zusammen addieren, um einen akkumulierten Wert zu bilden. Das System kann dann innere Produkte anderer Mengen von Gewichten mit anderen Menschen von Aktivierungseingaben berechnen.
  • Das System kann eine Schichtausgabe aus den Akkumulierungswerten unter Verwendung einer Vektorberechnungseinheit der Spezial-Hardware-Schaltung erzeugen (Schritt 208). In einigen Implementierungen wendet die Vektorberechnungseinheit eine Aktivierungsfunktion auf die akkumulierten Werte an, was nachstehend mit Bezug auf 5 weiter beschrieben wird. Die Ausgabe der Schicht kann in dem Einheitspuffer gespeichert werden zum Gebrauch als eine Eingabe für eine nachfolgende Schicht in dem neuronalen Netz oder kann verwendet werden, um die Inferenz des neuronalen Netzes zu bestimmen. In einigen Implementierungen kann die Schicht des neuronalen Netzes eine Mittelwert-Poolbildungsschicht sein, und das System kann zusätzliche Verarbeitung auf den Akkumulierungswerten ausführen, um einen Ausgabetensor für die Schicht zu erhalten, der äquivalent einer Ausgabe der Mittelwert-Poolbildungsschicht ist. Das System beendet die Verarbeitung des neuronalen Netzes, wenn eine empfangene Eingabe über jede Schicht des neuronalen Netzes verarbeitet worden ist, um die Inferenz für die empfangene Eingabe zu erzeugen.
  • 3 zeigt eine beispielhafte Spezial-Hardware-Schaltung 300 zum Ausführen von Berechnungen des neuronalen Netzes. Die Schaltung 300 enthält eine Host-Schnittstelle 302. Die Host-Schnittstelle 302 kann Anweisungen empfangen, beispielsweise von einem Host-Computer oder einem externen Prozessor, die Parameter für eine Berechnung des neuronalen Netzes enthalten. Die Parameter können eines oder mehrere aus dem Folgenden enthalten: wie viele Schichten verarbeitet werden sollten, entsprechende Mengen von Gewichtseingaben für jede Schicht des Modells, eine initiale Menge von Aktivierungseingaben, d. h. die Eingabe zu dem neuronalen Netz, aus der die Inferenz berechnet werden soll, entsprechende Eingabe- und Ausgabegrößen jeder Schicht, einen Schrittwert für die Berechnung des neuronalen Netzes und einen Typ der Schicht, die verarbeitet werden soll, z. B. eine Faltungsschicht, eine Poolbildungsschicht oder eine vollständig verbundene Schicht.
  • Die Host-Schnittstelle 302 kann die Anweisungen zu einem Sequenzer 306 senden, der die Anweisungen in Steuersignale auf niedriger Ebene umsetzt, die die Schaltung steuern, um die Berechnungen des neuronalen Netzes auszuführen. In einigen Implementierungen regulieren die Steuersignale den Datenfluss in der Schaltung, z. B. wie die Mengen von Gewichtseingaben und die Mengen von Aktivierungseingaben durch die Schaltung fließen. Mit anderen Worten spezifizieren die Steuersignale, wie Elemente eines Eingabetensors als Eingaben bereitzustellen sind, beispielsweise für die Matrixberechnungseinheit 312, die die Mittelwert-Poolbildungsberechnungen ausführt, und wo die resultierende Ausgabe gespeichert wird. Der Sequenzer 306 kann die Steuersignale zu einem Einheitspuffer 308, einer Matrixberechnungseinheit 312 und einer Vektorberechnungseinheit 314 senden. In einigen Implementierungen sendet der Sequenzer 306 Steuersignale auch zu einer Speicherdirektzugriffs-Engine 304 und einem dynamischen Speicher 310. In einigen Implementierungen ist der Sequenzer 306 ein Prozessor, der Steuersignale erzeugt. Der Sequenzer 306 kann das Timing der Steuersignale verwenden, um zu geeigneten Zeiten die Steuersignale zu jeder Komponente der Schaltung 300 zu senden. In einigen anderen Implementierungen leitet die Host-Schnittstelle 302 ein Steuersignal von einem externen Prozessor ein.
  • Die Host-Schnittstelle 302 kann die Mengen von Gewichtseingaben und die initiale Menge von Aktivierungseingaben zu der Speicherdirektzugriffs-Engine 304 senden. Die Speicherdirektzugriffs-Engine 304 kann die Mengen von Aktivierungseingaben in dem Einheitspuffer 308 speichern. In einigen Implementierungen speichert der Direktspeicherzugriff die Mengen von Gewichten in dem dynamischen Speicher 310, der eine Speichereinheit sein kann. In einigen Implementierungen befindet sich der dynamische Speicher außerhalb der Schaltung.
  • Der Einheitspuffer 308 ist ein Speicherpuffer, z. B. ein Speicherpufferregister, das Daten speichert, die durch die Spezial-Hardware-Schaltung 300 verarbeitet werden, die Daten enthalten, die von dem dynamischen Speicher 310 empfangen werden oder in ihm gespeichert werden sollen. Er kann verwendet werden, um die Menge von Aktivierungseingaben aus der Speicherdirektzugriffs-Engine 304 und Ausgaben aus der Vektorberechnungseinheit 314 zu speichern. Die Speicherdirektzugriffs-Engine 304 kann außerdem die Ausgaben der Vektorberechnungseinheit 314 aus dem Einheitspuffer 308 lesen.
  • Der dynamische Speicher 310 und der Einheitspuffer 308 können die Mengen von Gewichtseingaben bzw. die Mengen von Aktivierungseingaben zu der Matrixberechnungseinheit 312 senden. In einigen Implementierungen ist die Matrixberechnungseinheit 312 ein zweidimensionales systolisches Array. Die Matrixberechnungseinheit 312 kann auch ein eindimensionales systolisches Array oder eine andere Schaltungsanordnung sein, die mathematische Operationen, z. B. Multiplikation und Addition, ausführen kann. In einigen Implementierungen ist die Matrixberechnungseinheit 312 ein Allzweck-Matrixprozessor.
  • Die Matrixberechnungseinheit 312 kann die Gewichtseingaben und die Aktivierungseingaben verarbeiten und einen Vektor von Ausgaben für die Vektorberechnungseinheit 314 bereitstellen. In einigen Implementierungen sendet die Matrixberechnungseinheit 312 den Vektor von Ausgaben zu der Vektorberechnungseinheit 314, die den Vektor von Ausgaben zu dem Einheitspuffer 308 sendet. Die Vektorberechnungseinheit 314 kann den Vektor von Ausgaben verarbeiten und einen Vektor von verarbeiteten Ausgaben in den Einheitspuffer 308 speichern. Der Vektor von verarbeiteten Ausgaben kann als Aktivierungseingaben für die Matrixberechnungseinheit 312 verwendet werden, z. B. zum Gebrauch in einer nachfolgenden Schicht in dem neuronalen Netz. Die Matrixberechnungseinheit 312 wird nachstehend mit Bezug auf 4 genauer beschrieben.
  • Um einen Vektor, z. B. einen Vektor von Ausgaben, der von der Matrixberechnungseinheit 312 empfangen wird, zu berechnen, kann die Vektorberechnungseinheit 314 eine oder mehrere aus einer Aktivierungseinheit, einer Normalisierungseinheit oder anderen Einheiten enthalten. Eine Aktivierungseinheit der Vektorberechnungseinheit 314 kann eine Schaltungsanordnung enthalten, die eine nichtlineare Funktion, z. B. tanh(x), auf akkumulierte Werte, die von der Matrixberechnungseinheit 312 empfangen werden, anwendet, wobei x ein akkumulierter Wert ist. Die Aktivierungseinheit kann Ganzzahlregister oder Puffer enthalten, die eine Breite von 8 oder 16 Bits aufweisen. Eine Normalisierungseinheit der Vektorberechnungseinheit 314 kann eine Schaltungsanordnung zum Beschränken akkumulierter Werte, die von der Matrixberechnungseinheit 312 empfangen werden, enthalten, um Berechnungsfehler zu vermeiden, die durch Durchleiten nicht normalisierter akkumulierter Werte durch aufeinanderfolgende Schichten des neuronalen Netzes eingeführt werden können. Eine Schaltungsanordnung zum Ausführen anderer Operationen auf akkumulierten Werten kann ebenfalls in der Vektorberechnungseinheit 314 enthalten sein.
  • 4 zeigt eine Beispielarchitektur 400, die eine Matrixberechnungseinheit enthält. Die Matrixberechnungseinheit ist ein zweidimensionales systolisches Array 406. Das Array 406 enthält mehrere Zellen 404. In einigen Implementierungen entspricht eine erste Dimension 420 des systolischen Array 406 Spalten von Zellen, und eine zweite Dimension 422 des systolischen Array 4116 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 Wertelader 402 Aktivierungseingaben zu Zeilen des Array 406, und eine Gewichtsabholungsschnittstelle 408 sendet Gewichtseingaben zu Spalten des Array 406. In einigen anderen Implementierungen werden jedoch Aktivierungseingaben in die Spalten übertragen, und Gewichtseingaben werden in die Zeilen des Array 406 übertragen.
  • Die Wertelader 402 können die Aktivierungseingaben von einem Einheitspuffer empfangen, z. B. dem Einheitspuffer 308 von 3. Jeder Wertelader kann eine entsprechende Aktivierungseingabe zu einer unterschiedlichen am weitesten links gelegenen Zelle des Array 406 senden. Beispielsweise kann der Wertelader 412 eine Aktivierungseingabe zu der Zelle 414 senden. Der Wertelader kann außerdem die Aktivierungseingabe zu einem benachbarten Wertelader senden, und die Aktivierungseingabe kann in einer weiteren am weitesten links gelegenen Zelle des Array 406 verwendet werden. Das ermöglicht es, dass Aktivierungseingaben zum Gebrauch in einer weiteren speziellen Zelle des Array 406 verschoben werden.
  • Die Gewichtsabholungsschnittstelle 408 kann die Gewichtseingabe aus einer Speichereinheit empfangen, z. B. dem dynamischen Speicher 310 von 2. Die Gewichtsabholungsschnittstelle 408 kann eine entsprechende Gewichtseingabe zu einer unterschiedlichen am weitesten oben gelegenen Zelle des Array 406 senden. Beispielsweise kann die Gewichtsabholungsschnittstelle 408 Gewichtseingaben zu den Zellen 414 und 416 senden.
  • In einigen Implementierungen verschiebt eine Host-Schnittstelle, z. B. die Host-Schnittstelle 302 von 3, Aktivierungseingaben durch das Array 406 entlang einer Dimension, z. B. nach rechts, während das sie Gewichtseingaben durch das Array 406 entlang einer weiteren Dimension, z. B. nach unten, verschiebt. Beispielsweise kann über einem Taktzyklus die Aktivierungseingabe an der Zelle 414 zu einem Aktivierungsregister in der Zelle 416, die rechts von Zelle 414 ist, verschoben werden. Ähnlich kann die Gewichtseingabe an der Zelle 416 zum einem Gewichtsregister an der Zelle 418, die unterhalb von Zelle 414 ist, verschoben werden.
  • An jedem Taktzyklus kann jede Zelle eine gegebene Gewichtseingabe, eine gegebene Aktivierungseingabe und eine akkumulierte Ausgabe aus einer benachbarten Zelle verarbeiten, um eine akkumulierte Ausgabe zu erzeugen. Die akkumulierte Ausgabe kann auch zu der benachbarten Zelle entlang der gleichen Dimension wie die gegebene Gewichtseingabe weitergeleitet werden. Jede Zelle kann auch eine gegebene Gewichtseingabe und eine gegebene Aktivierungseingabe verarbeiten, um eine Ausgabe zu erzeugen, ohne eine akkumulierte Ausgabe aus einer benachbarten Zelle zu verarbeiten. Die Ausgabe kann zu benachbarten Zellen entlang den gleichen Dimensionen wie die gegebene Gewichtseingabe weitergeleitet und ausgegeben werden, ohne akkumuliert zu sein, z. B. um elementweise Multiplikation einer Gruppe von Gewichten und Aktivierungseingaben auszuführen. Eine einzelne Zelle ist nachstehend mit Bezug auf 5 weiter beschrieben.
  • In einigen Implementierungen kann eine Einheitsmatrix, d. h. eine Matrix, die auf der Hauptdiagonalen Einsen und überall sonst Nullen aufweist, zu dem Array 406 weitergeleitet werden und dadurch die Eingaben, die an den Werteladern 402 bereitgestellt sind, ohne Modifikation zu den Akkumulatoren weiterleiten. Das kann verwendet werden, um elementweise Multiplikation von zwei Eingaben auszuführen, wobei eine erste Ausgabe an den Akkumulatoren als Ausgabe = MatMul(Eingabe1, Identität) repräsentiert sein kann, wobei MatMul eine Anweisung für die Matrixberechnungseinheit ist, Matrixmultiplikation auszuführen, und eine zweite Ausgabe, die der elementweisen Multiplikation entspricht, als Ausgabe *= MatMul(Eingabe2, Identität) repräsentiert ist.
  • In einigen Implementierungen erfordert eine Matrixmultiplikation zwischen einer Eingabe und einer Einheitsmatrix keine Multiplikation mit der vollständigen Einheitsmatrix, da viele der Werte in der Einheitsmatrix Nullen sind. Beispielsweise kann, um eine Matrixmultiplikation einer 768×768-Matrix mit einer entsprechenden 768×768-Einheitsmatrix auszuführen, die 768×768-Einheitsmatrix durch die Matrixberechnungseinheit als 9 Kacheln von 256×256-Matrizen verarbeitet werden. In einem solchen Fall würde nur 3 aus den 256×256-Matrizen andere Werte als Null enthalten, d. h. diejenigen Kacheln, die die Hauptdiagonale der 768-768-Einheitsmatrix enthalten, und die anderen 6 Kacheln sind Matrizen, die nur Nullen enthalten. Um die Anforderungen für die Verarbeitung zu reduzieren, kann die Matrixmultiplikationseinheit Matrixmultiplikation unter Verwendung nur der 3 Kacheln, die Matrizen mit Werten ungleich null enthalten, ausführen, um das korrekte Multiplikationsergebnis zu erhalten.
  • Die akkumulierte Ausgabe kann entlang derselben Spalte wie die Gewichtseingabe weitergeleitet werden, z. B. zum unteren Ende der Spalte in dem Array 406 hin. In einigen Implementierungen kann das Array 406 unten an jeder Spalte Akkumulatoreinheiten 410 enthalten, die jede akkumulierte Ausgabe aus jeder Spalte speichern und akkumulieren, wenn Berechnungen mit Schichten ausgeführt werden, die mehr Aktivierungseingaben als Zeilen aufweisen. Die Akkumulatoreinheiten können 32-Bit-Ganzzahlregister oder Puffer enthalten, die Ausgaben der Zellen 404 speichern. In einigen Implementierungen speichert jede Akkumulatoreinheit mehrere parallele Akkumulierungen. Die Akkumulatoreinheiten 410 können jede akkumulierte Ausgabe akkumulieren, um einen akkumulierten Endwert zu erzeugen. Der akkumulierte Endwert kann zu einer Vektorberechnungseinheit übertragen werden, z. B. zu der Vektorberechnungseinheit von 3. In einigen anderen Implementierungen leiten die Akkumulatoreinheiten 410 die akkumulierten Werte zu der Vektorberechnungseinheit weiter, ohne irgendwelche Akkumulierungen auszuführen, wenn die Schichten verarbeitet werden, wenn die Schichten weniger Aktivierungseingaben als Zeilen aufweisen.
  • 5 zeigt eine Beispiel-Architektur 500 einer Zelle innerhalb eines systolischen Array, z. B. in dem systolischen Array 406 von 4.
  • Die Zelle kann ein Aktivierungsregister 506 enthalten, das eine Aktivierungseingabe speichert. Das Aktivierungsregister kann eine Aktivierungseingabe von einer links benachbarten Zelle empfangen, d. h. einer benachbarten Zelle, die sich links von der gegebenen Zelle befindet, oder aus einem Einheitspuffer, abhängig von der Position der Zelle innerhalb des systolischen Array. Die Zelle kann ein Gewichtsregister 502 enthalten, das eine Gewichtseingabe speichert. Die Gewichtseingabe kann von einer oben benachbarten Zelle oder aus einer Gewichtsabholungsschnittstelle übertragen werden, abhängig von der Position der Zelle innerhalb des systolischen Array. Die Zelle kann außerdem ein Summeneingangsregister 504 enthalten. Das Summeneingangsregister 504 kann einen akkumulierten Wert von der oben benachbarten Zelle speichern. Eine Multiplikations-Schaltungsanordnung 508 kann verwendet werden, um die Gewichtseingabe aus dem Gewichtsregister 502 mit der Aktivierungseingabe aus dem Aktivierungsregister 506 zu multiplizieren. Die Multiplikations-Schaltungsanordnung 508 kann das Produkt zu der Summierungs-Schaltungsanordnung 510 ausgeben.
  • Die Summierungs-Schaltungsanordnung 510 kann das Produkt und den akkumulierten Wert aus dem Summeneingangsregister 504 summieren, um einen neuen akkumulierten Wert zu erzeugen. Die Summierungs-Schaltungsanordnung 510 kann den neuen akkumulierten Wert zu einem weiteren Summeneingangsregister senden, das sich in einer unten benachbarten Zelle befindet. Der neue akkumulierte Wert kann als ein Operand für eine Summation in der unteren benachbarten Zelle verwendet werden.
  • Die Summierungs-Schaltungsanordnung 510 kann auch einen Wert aus dem Summeneingangsregister 504 annehmen und den Wert aus dem Summeneingangsregister 504 zu einer unten benachbarten Zelle senden, ohne den Wert aus dem Summeneingangsregister 504 mit dem Produkt aus der Multiplikations-Schaltungsanordnung 508 zu summieren. Beispielsweise kann eine Zelle, um elementweise Multiplikation auszuführen, einen Wert in dem Summeneingangsregister 504 empfangen, und der empfangene Wert kann zu einer benachbarten Zelle ausgegeben werden, d. h. ohne dass die Summierungs-Schaltungsanordnung 510 das Produkt zu dem empfangenen Wert addiert. Die Zelle kann außerdem das Produkt, das durch die Multiplikations-Schaltungsanordnung 508 produziert wird, das einer elementweisen Multiplikation durch die Zelle entspricht, für eine benachbarten Zelle bereitstellen, ohne das Produkt und einen Wert, der in dem Summeneingangsregister 504 empfangen wird, zu summieren. Das Ergebnis ist, dass das systolische Array 406 Ausgabevektoren bereitstellen kann, die der elementweisen Multiplikation von Aktivierungseingaben und Gewichten entsprechen.
  • Die Zelle kann außerdem die Gewichtseingabe und die Aktivierungseingabe zu benachbarten Zellen zur Verarbeitung verschieben. Beispielsweise kann das Gewichtsregister 502 die Gewichtseingabe zu einem weiteren Gewichtsregister in der unten benachbarten Zelle senden. Das Aktivierungsregister 506 kann die Aktivierungseingabe zu einem weiteren Aktivierungsregister in der rechts benachbarten Zelle senden. Sowohl die Gewichtseingabe als auch die Aktivierungseingabe können deshalb durch andere Zellen in dem Array in einem nachfolgenden Taktzyklus wiederverwendet werden.
  • In einigen Implementierungen enthält die Zelle außerdem ein Steuerungsregister. Das Steuerungsregister kann ein Steuersignal speichern, das bestimmt, ob die Zelle entweder die Gewichtseingabe oder die Aktivierungseingabe zu benachbarten Zellen verschieben sollte. In einigen Implementierungen dauert das Verschieben der Gewichtseingabe oder der Aktivierungseingabe einen oder mehrere Taktzyklen. Das Steuersignal kann außerdem bestimmen, ob die Aktivierungseingabe oder Gewichtseingaben zu der Multiplikations-Schaltungsanordnung 508 übertragen werden, oder kann bestimmen, ob die Multiplikations-Schaltungsanordnung 508 auf den Aktivierungs- und Gewichtseingaben arbeitet. Das Steuersignal kann außerdem zu einer oder mehreren benachbarten Zellen weitergeleitet werden, z. B. unter Verwendung einer Leitung.
  • In einigen Implementierungen werden Gewichte in ein Gewichtspfadregister 512 vorverschoben. Das Gewichtspfadregister 512 kann die Gewichtseingabe empfangen, z. B. von einer oben benachbarten Zelle, und die Gewichtseingabe zu dem Gewichtsregister 502 basierend auf dem Steuersignal übertragen. Das Gewichtsregister 502 kann die Gewichtseingabe statisch speichern, so dass, wenn Aktivierungseingaben über mehrere Taktzyklen zu der Zelle übertragen werden, z. B. über das Aktivierungsregister 506, die Gewichtseingabe innerhalb der Zelle bleibt und nicht zu einer benachbarten Zelle übertragen wird. Deshalb kann die Gewichtseingabe auf mehrere Aktivierungseingaben angewandt werden, z. B. unter Verwendung der Multiplikations-Schaltungsanordnung 508, und jeweilige akkumulierte Werte können zu einer benachbarten Zelle übertragen werden.
  • 6 ist ein Ablaufplan eines Beispielprozesses 600 zum Ausführen einer Berechnung für eine Mittelwert-Poolbildungsschicht eines neuronalen Netzes. Im Allgemeinen wird der Prozess 600 durch ein System aus einem oder mehreren Computern ausgeführt, das eine Spezial-Hardware-Schaltung enthält, beispielsweise das System von 1.
  • Das System empfängt eine Anforderung, ein neuronales Netz auf der Spezial-Hardware-Schaltung (602) zu implementieren. Insbesondere enthält das neuronale Netz eine Mittelwert-Poolbildungsschicht. Die Anforderung kann Parameter zum Implementieren des neuronalen Netzes spezifizieren, wie z. B. Netzeingabe zum Verarbeiten unter Verwendung des neuronalen Netzes, einen Ort zum Speichern einer Inferenz, die durch das Verarbeiten der Netzeingabe unter Verwendung des neuronalen Netzes erzeugt wird, und andere Parameter. Einige der Parameter können für die Mittelwert-Poolbildungsschicht des neuronalen Netzes spezifisch sein, wie z. B. ein Parameter, der Fensterdimensionen definiert, über die die Mittelwert-Poolbildung angewandt werden sollte.
  • Das System erzeugt Berechnungstensoren basierend auf der Anforderung, die zur Verarbeitung der Mittelwert-Poolbildungsschicht des neuronalen Netzes verwendet werden (604). Beispielsweise erzeugt das System, basierend auf dem Empfangen der Anforderung, das neuronale Netz zu implementieren, die eine Netzeingabe in das neuronale Netz und ein Fenster der Mittelwert-Poolbildungsschicht des neuronalen Netzes spezifiziert, einen Poolbildungs-Kern, einen mit Nullen aufgefüllten Eingabetensor zum Verarbeiten der Mittelwert-Poolbildungsschicht, einen Maskierungstensor zum Verarbeiten der Mittelwert-Poolbildungsschicht und einen optionalen dritten Tensor zum Verarbeiten der Mittelwert-Poolbildungsschicht.
  • Ein erster Berechnungstensor, der bei der Berechnung der Mittelwert-Poolbildungsschicht verwendet wird, ist ein Poolbildungs-Kern. Im Allgemeinen ist ein Kern eine Matrix, die in Berechnungen mit einer Eingabematrix verwendet wird, die typischerweise kleinere Dimensionen aufweist als die Eingabematrix. Der Poolbildungs-Kern besteht aus Einheitsmatrizen und weist Dimensionen auf, die mit dem Mittelwert-Poolbildungsfenster, das für die Mittelwert-Poolbildungsschicht spezifiziert ist, übereinstimmen. Für ein 3×3-Fenster wird beispielsweise der Kern ein 3×3-Kern sein, wobei jedes Element des Kern eine Einheitsmatrix ist, die Dimensionen von D × D aufweist, wobei D die Tiefe des Eingabetensors ist, der durch die Mittelwert-Poolbildungsschicht des neuronalen Netzes verarbeitet wird. Jede Einheitsmatrix besteht aus Werten, z. B. Einsen und Nullen, so dass eine Faltung des Poolbildungs-Kerns und eines Bereichs eines Eingabetensors zu einem Element führen wird, das einen Wert aufweist, der gleich einer Summe der Elemente innerhalb des Bereichs an einer speziellen Tiefe ist.
  • Beispielsweise wenn die Tiefe des Eingabetensors eins ist, d. h. der Eingabetensor ist ein zweidimensionaler Eingabetensor, wird die Einheitsmatrix eine 1×1-Matrix aus Einsen sein, d. h. ein skalares Element mit einem Wert von Eins. Somit wird der Poolbildungs-Kern eine zweidimensionale Matrix sein, die aus Einsen besteht, da jedes Element des Poolbildungs-Kerns eine 1×1-Matrix aus Einsen, d. h. ein skalarer Wert mit einem Wert von Eins, ist. Falls jedoch der Eingabetensor eine Tiefe von drei aufweist, wird der Poolbildungs-Kern ein zweidimensionaler Tensor sein, der die spezifizierte Größe des Mittelwert-Poolbildungsfensters aufweist, wobei jedes Element des Poolbildungs-Kerns eine 3×3-Einheitsmatrix ist, die Einsen auf der Hauptdiagonalen und Nullen überall sonst aufweist. Somit können mehrere Dimensionen des Eingabetensors parallel verarbeitet werden.
  • Die Berechnungseinheit 150 für das neuronale Netz kann die Einheitsmatrizen und den Poolbildungs-Kern, der aus Einheitsmatrizen besteht, erzeugen und kann die Einheitsmatrizen und/oder den Poolbildungs-Kern an einem Ort speichern, der durch die Spezial-Hardware-Schaltung 110 zugänglich ist, z. B. in dem dynamischen Speicher 310. Alternativ kann die Berechnungs-Engine 150 für das neuronale Netz die Einheitsmatrizen und/oder den Poolbildungs-Kern für die Spezial-Hardware-Schaltung 110 bereitstellen oder kann Anweisungen zum Erzeugen des Poolbildungs-Kerns für die Spezial-Hardware-Schaltung 110 bereitstellen, wobei z. B. der Poolbildungs-Kern oder die Anweisungen zum Erzeugen des Poolbildungs-Kerns durch die Host-Schnittstelle 302 empfangen werden können.
  • Ein zweiter Berechnungstensor, der zum Berechnen der Mittelwert-Poolbildungsschicht verwendet wird, kann ein mit Nullen aufgefüllter Eingabetensor sein. Beispielsweise kann das System eine Anforderung empfangen, ein neuronales Netz, das eine Mittelwert-Poolbildungsschicht enthält, zu implementieren, und basierend auf der Anforderung kann das System einen Netz-Eingabetensor, der durch die Anforderung spezifiziert ist, oder einen Eingabetensor für die Mittelwert-Poolbildungsschicht mit Nullen auffüllen, um einen mit Nullen aufgefüllten Eingabetensor zu erzeugen. Der mit Nullen aufgefüllte Eingabetensor kann basierend auf einem Fenster erzeugt werden, das für die Mittelwert-Poolbildungsschicht des neuronalen Netzes spezifiziert ist. In einigen Implementierungen kann die Implementierungs-Engine 150 für das neuronale Netz des Systems den Eingabetensor mit Nullen auffüllen und kann den mit Nullen aufgefüllten Eingabetensorfürdie Spezial-Hardware-Schaltung 110 bereitstellen. Alternativ kann die Implementierungs-Engine 150 für das neuronale Netz Anweisungen erzeugen zum Steuern der Spezial-Hardware-Schaltung 110, den mit Nullen aufgefüllten Eingabetensor zu erzeugen. Die Anweisungen und der Eingabetensor können durch die Host-Schnittstelle 302 der Spezial-Hardware-Schaltung empfangen werden, und Steuersignale basierend auf den empfangenen Anweisungen können die Vektorberechnungseinheit 314, die Speicherdirektzugriffs-Engine 304 oder eine weitere Komponente der Spezial-Hardware-Schaltung steuern, eine mit Nullen aufgefüllte Version des Eingabetensors in dem Einheitspuffer 308 zu speichern.
  • In einigen Implementierungen, in denen das Auffüllen mit Nullen durch die Spezial-Hardware-Schaltung 110 ausgeführt wird, wird das Auffüllen mit Nullen erreicht durch zuerst Kopieren des Eingabetensors in die geeigneten Teile der Ausgabe, z. B. in den Einheitspuffer 308, und dann Schreiben von Nullen an den geeigneten Positionen in dem Speicher, um einen mit Nullen aufgefüllten Eingabetensor zu erhalten. Beispielsweise für einen 8×8-Eingabetensor und ein 3×3-Fenster für eine Mittelwert-Poolbildungsschicht wäre ein mit Nullen aufgefüllter Eingabetensor ein 10×10-Tensor. Unter der Annahme einer Rasterabtast-Anordnung der Daten für sowohl Eingabe als auch Ausgaben des Auffüllens mit Nullen wäre der mit Nullen aufgefüllte Ausgabetensor strukturiert als anfangs 10 Nullen, die einer ersten Zeile des Auffüllens mit Nullen der Eingabematrix entsprechen, gefolgt von 8 Zeilen, von denen jede aus einer Null zum Auffüllen links, acht Werten aus einer Zeile des Eingabetensors und einer weiteren Null zum Auffüllen rechts, besteht, gefolgt von weiteren 10 Nullen, die einer letzten Zeile des Auffüllens mit Nullen entsprechen.
  • Um dieses Auffüllen mit Nullen zu erreichen, kann der Eingabetensor aus dem Einheitspuffer 308 in die Matrixberechnungseinheit 312 geladen werden, z. B. basierend auf Steuersignalen die aus Anweisungen aus der Implementierungs-Engine 150 für das neuronale Netz erzeugt werden. Die Multiplikation des Eingabetensors und einer Einheitsmatrix wird in der Matrixberechnungseinheit 312 ausgeführt, um die Aktivierungswerte des Eingabetensors in die Akkumulatoren zu laden, wo sie dann an den geeigneten Plätzen in dem Einheitspuffer 308 für den mit Nullen aufgefüllten Eingabetensor gespeichert werden können. Die Vektorberechnungseinheit 314 kann dann die geeigneten Nullen in dem Einheitspuffer 308 schreiben, um den mit Nullen aufgefüllten Eingabetensor zu erzeugen.
  • In einigen Implementierungen kann das System außerdem einen dritten Berechnungstensor zum Verarbeiten der Mittelwert-Poolbildungsschicht des neuronalen Netzes erzeugen. Der dritte Tensor besteht aus Elementen, von denen jedes gleich einer Inversen der Anzahl von Elementen in dem Fenster der Mittelwert-Poolbildungsschicht eines neuronalen Netzes ist. Die Implementierung 150 für das neuronale Netz kann den dritten Tensor basierend auf der empfangenen Anforderung, das neuronale Netz zu implementieren, erzeugen. Beispielsweise kann die Implementierungs-Engine 150 für das neuronale Netz einen dritten Tensor erzeugen, der die gleiche Größe aufweist wie ein Eingabetensor für die Mittelwert-Poolbildungsschicht des neuronalen Netzes, und kann den Tensor mit Werten füllen gleich einer Inversen der Anzahl von Elementen in dem Fenster, das für die Mittelwert-Poolbildungsschicht spezifiziert ist. Der erzeugte dritte Tensor kann in einem Speicherort gespeichert werden, der durch die Spezial-Hardware-Schaltung 110 zugänglich ist, oder kann für die Spezial-Hardware-Schaltung 110 zum Gebrauch bei der Berechnung der Mittelwert-Poolbildungsschicht bereitgestellt werden. Alternativ kann die Spezial-Hardware-Schaltung 110 den dritten Tensor basierend auf Anweisungen, die von der Implementierungs-Engine 150 für das neuronale Netz empfangen werden, erzeugen.
  • In einigen Implementierungen ist ein vierter Berechnungstensor, der durch das System erzeugt wird, ein Maskierungstensor. Im Allgemeinen besteht der Maskierungstensor aus Werten zum Ausführen von Neuskalierungsoperationen bei der Berechnung der Mittelwert-Poolbildungsschicht des neuronalen Netzes. Insbesondere können die Werte des Maskierungstensors basierend auf den Dimensionen des Eingabetensors für die Mittelwert-Poolbildungsschicht und des Fensters, das für die Mittelwert-Poolbildungsschicht spezifiziert ist, bestimmt werden, so dass jeder Wert die Anzahl von Eingabetensorwerten widerspiegelt, die gemittelt sind, um den entsprechenden Wert des Ausgabetensors zu erzeugen.
  • Eine Größe des Maskierungstensors kann basierend auf Dimensionen der spezifizierten Netzeingabe oder einer erwarteten Größe eines Eingabetensors für die Mittelwert-Poolbildungsschicht des neuronalen Netzes bestimmt werden. Die Werte von Elementen in dem Maskierungstensor können basierend auf dem spezifizierten Fenster der Mittelwert-Poolbildungsschicht und den Dimensionen der Netzeingabe oder des Eingabetensors für die Mittelwert-Poolbildungsschicht bestimmt werden. Die Elemente des Maskierungstensors sind so eingestellt, dass sie das Neuskalieren von Elementen, die bei der Ausführung von Mittelwert-Poolbildungsberechnungen produziert werden, erlauben, z. B. um Rand- und Eckelemente eines initialen Eingabetensors, der während der Verarbeitung der Mittelwert-Poolbildungsschicht produziert wird, neu zu skalieren. Falls ein neuronales Netz mehr als eine Mittelwert-Poolbildungsschicht enthält, kann das System einen Maskierungstensor für jede aus den Mittelwert-Poolbildungsschichten erzeugen. In einigen Implementierungen erzeugt das System den Maskierungstensor durch Kacheln eines oder mehrerer Maskierungstensorfragmente, die in dem Speicher gespeichert sind. Beispielsweise können Zeilen von Elementen oder Segmente von Zeilen von Elementen gekachelt werden, um den Maskierungstensor zu erzeugen, z. B. angeordnet, um einen größeren Maskierungsvektor oder eine Matrix, die aus Maskierungstensorfragmenten besteht, zu bilden. In einigen Implementierungen kann das System eine Bibliothek von Maskierungsmatrizen speichern, z. B. in einem Speicher, und kann eine Maskierungsmatrix aus der Bibliothek auswählen.
  • Der Maskierungstensor kann durch die Implementierungs-Engine 150 für das neuronale Netz erzeugt werden, oder es können Anweisungen erzeugt werden zum Steuern der Spezial-Hardware-Schaltung 110, den Maskierungstensor zu erzeugen. Beispielsweise kann die Implementierungs-Engine 150 für das neuronale Netz den Maskierungstensor basierend auf der Anforderung, das neuronale Netz zu implementieren, erzeugen und den Maskierungstensor in einem Speicherort speichern, der für die Spezial-Hardware-Schaltung 110 zugänglich ist, z. B. in dem dynamischen Speicher 310. Um den Maskierungstensor zu erzeugen, kann die Implementierungs-Engine 150 für das neuronale Netz auf Tensorfragmente zugreifen und kann die Tensorfragmente kompilieren, um den Maskierungstensor in dem Speicher zu erzeugen. Alternativ kann die Implementierungs-Engine 150 für das neuronale Netz den Maskierungstensor erzeugen und den Maskierungstensor für die Spezial-Hardware-Schaltung 110 bereitstellen, wo er durch die Host-Schnittstelle 302 empfangen werden kann. In anderen Implementierungen kann die Implementierungs-Engine 150 für das neuronale Netz Anweisungen für die Spezial-Hardware-Schaltung 110 zum Steuern der Spezial-Hardware-Schaltung 110, den Maskierungstensor zu erzeugen, bereitstellen. Beispielsweise können die Anweisungen die Spezial-Hardware-Schaltung 110 steuern, den Maskierungstensor zu erzeugen, z. B. aus Tensorfragmenten, die in dem dynamischen Speicher 110 zugänglich sind, und den Maskierungstensor zu speichern, z. B. in dem dynamischen Speicher 110.
  • Das System erzeugt Anweisungen, die dann, wenn sie durch die Spezial-Hardware-Schaltung des Systems ausgeführt werden, bewirken, dass die Spezial-Hardware-Schaltung während der Verarbeitung einer Netzeingabe für das neuronale Netz einen Schichtausgabetensor erzeugt, der einer Ausgabe der Mittelwert-Poolbildungsschicht eines neuronalen Netzes äquivalent ist (606). Beispielsweise erzeugt in Reaktion auf die Anforderung die Implementierungs-Engine 150 für das neuronale Netz des Systems von 1 Anweisungen, die die Spezial-Hardware-Schaltung 110 anweisen oder steuern, einen Ausgabetensor zu erzeugen, d. h. einen Ausgabevektor, der einer Ausgabe äquivalent ist, die die Spezial-Hardware-Schaltung 110 erzeugen würde, falls sie einen Eingabetensor durch Ausführen von Mittelwert-Poolbildung auf dem Eingabetensor verarbeiten würde.
  • Das System überträgt die Anweisungen und die Berechnungstensoren zu der Spezial-Hardware-Schaltung (608). Beispielsweise kann die Implementierungs-Engine 150 für das neuronale Netz die Anweisungen für die Spezial-Hardware-Schaltung 110 des Systems von 1 bereitstellen, und die Spezial-Hardware-Schaltung 110 kann die Anweisungen empfangen, z. B. an der Host-Schnittstelle 302 der Spezial-Hardware-Schaltung. Die Implementierungs-Engine 150 für das neuronale Netz kann außerdem die Berechnungstensoren für die Spezial-Hardware-Schaltung 110 bereitstellen, z. B. wo sie durch die Host-Schnittstelle 302 empfangen werden können. Alternativ können die Anweisungen, die für die Spezial-Hardware-Schaltung 110 bereitgestellt werden, der Spezial-Hardware-Schaltung 110 ermöglichen, die Berechnungstensoren zum Berechnen der Mittelwert-Poolbildungsschicht zu erzeugen oder auf sie zuzugreifen, z. B. in dem Speicher. Die Implementierungs-Engine 150 für das neuronale Netz kann außerdem andere Anweisungen und/oder Parameter für die Berechnung des neuronalen Netzes bereitstellen, die durch die Spezial-Hardware-Schaltung 110 empfangen werden können. Durch Bereitstellen der Anweisungen, Maskierungstensoren und/oder Parameter für die Spezial-Hardware-Schaltung 110 kann die Spezial-Hardware-Schaltung 110 eine Mittelwert-Poolbildungsschicht eines neuronalen Netzes mit sehr geringer Latenz berechnen, um die Verzögerung nachfolgender Berechnungen von Schichten des neuronalen Netzes zu reduzieren.
  • 7 ist ein Ablaufplan eines Beispielprozesses 700 zum Berechnen einer Mittelwert-Poolbildungsschicht eines neuronalen Netzes. In einigen Implementierungen kann der Prozess 700 durch die Spezial-Hardware-Schaltung 110 des Systems von 1 basierend auf Anweisungen, die von der Implementierungs-Engine 150 für das neuronale Netz empfangen werden, ausgeführt werden.
  • Beispielsweise kann die Spezial-Hardware-Schaltung 110 mit den Anweisungen versorgt werden, die durch die Implementierungs-Engine 150 für das neuronale Netz erzeugt werden, wie in 6 beschrieben ist, und kann den Prozess 700 basierend auf den Anweisungen ausführen. Die Anweisungen können durch die Host-Schnittstelle 302 der Spezial-Hardware-Schaltung empfangen werden und zu dem Sequenzer 306 der Spezial-Hardware-Schaltung gesendet werden, wobei der Sequenzer 306 die Anweisungen in Steuersignale niedriger Ebene umsetzen kann, die Komponenten der Spezial-Hardware-Schaltung steuern, die Berechnung der Mittelwert-Poolbildungsschicht auszuführen.
  • Basierend auf den empfangenen Anweisungen führt die Spezial-Hardware-Schaltung eine Faltung eines Eingabetensors für die Mittelwert-Poolbildungsschicht des neuronalen Netzes und eines Kerns, der ein Poolbildungs-Kern mit einer Größe gleich einem Fenster der Mittelwert-Poolbildungsschicht des neuronalen Netzes ist, aus, um einen summierten Ausgabetensor zu erzeugen (702). Beispielsweise steuern die Steuersignale, die basierend auf den empfangenen Anweisungen erzeugt werden, die Spezial-Hardware-Schaltung, eine Faltung eines Eingabetensors für die Mittelwert-Poolbildungsschicht des neuronalen Netzes, z. B. einer Netzeingabe oder einer Ausgabe einer vorhergehenden Schicht des neuronalen Netzes, und eines Poolbildungs-Kerns auszuführen. Falls die Mittelwert-Poolbildungsschicht des neuronalen Netzes eine erste Schicht in dem neuronalen Netz ist, dann würde die Mittelwert-Poolbildungsschicht eine Netzeingabe in das neuronale Netz verarbeiten, z. B. eine Eingabe, die ein Digitalbild repräsentiert, die Element umfasst, die Pixeln des digitalen Bilds entsprechen. Andernfalls, falls die Mittelwert-Poolbildungsschicht des neuronalen Netzes nicht eine erste Schicht in dem neuronalen Netz ist, dann kann der Eingabetensor ein Ausgabetensor einer vorhergehenden Schicht des neuronalem Netzes sein.
  • Um die Faltung auszuführen, kann sich der Eingabetensor in dem Einheitspuffer 308 befinden, z. B. falls der Eingabetensor eine Ausgabe einer vorhergehenden Schicht des neuronalen Netzes ist, oder kann empfangen und in dem Einheitspuffer 308 gespeichert werden, z. B. falls der Eingabetensor eine Netzeingabe ist. Der Eingabetensor kann dann aus dem Einheitspuffer 308 zu der Matrixberechnungseinheit 312 gesendet werden. Zusätzlich kann ein Poolbildungs-Kern, d. h. eine Matrix, die Einheitsmatrizen als ihre Elemente aufweist, erzeugt oder empfangen werden, wie in 6 diskutiert ist, und in dem dynamischen Speicher 310 gespeichert werden. Die Größe der Poolbildungs-Kerns wird basierend auf dem Fenster der Mittelwert-Poolbildungsschicht bestimmt. Beispielsweise wenn die Mittelwert-Poolbildungsschicht ein 3×3-Fenster für Mittelwert-Poolbildung spezifiziert, dann kann ein 3×3-Poolbildungs-Kern empfangen werden, z. B. an der Host-Schnittstelle 302, und zu den dynamischen Speicher 310 gesendet werden, oder kann in dem dynamischen Speicher 310 identifiziert werden, z. B. wenn der dynamische Speicher 310 eine Menge von Poolbildungs-Kernen unterschiedlicher Dimensionen speichert. Die Elemente, d. h. Einheitsmatrizen, des Poolbildungs-Kerns werden aus dem dynamischen Speicher 310 zu der Matrixberechnungseinheit 312 gesendet.
  • Die Matrixberechnungseinheit 312 führt eine Faltung des Eingabetensors und des Poolbildungs-Kerns aus, um einen summierten Ausgabetensor zu erzeugen. Das Falten des Eingabetensors mit dem Poolbildungs-Kern führt zu einem summierten Ausgabetensor mit einer Größe, die derjenigen des Eingabetensors entspricht. In einigen Implementierungen kann die Faltung ausgeführt werden unter Verwendung von Techniken, die in der PCT-Anmeldung mit der Veröffentlichungs-Nr. WO 2016/186811 offenbart ist, die hierdurch durch Bezugnahme vollständig mit aufgenommen ist. Jedes Element des summierten Ausgabetensors ist einer Summe von Elementen des Eingabetensors innerhalb eines Bereichs des Eingabetensors, der durch das Fenster definiert ist, wenn es auf ein entsprechendes Element des Eingabetensors angewandt wird, äquivalent. Wenn der Eingabetensor eine Tiefe D größer als 1 aufweist, so dass die Elemente des Poolbildungs-Kerns jeweils eine D×D-Einheitsmatrix sind, ist die Faltung des Eingabetensors und des Poolbildungs-Kerns so, dass unterschiedliche Tiefen des Eingabetensors parallel verarbeitet werden können, um den summierten Ausgabetensor zu erzeugen. Auf diese Weise kann die Latenz der Berechnung des summierten Ausgabetensors reduziert werden. Der summierte Ausgabetensor kann in dem Einheitspuffer 308 gespeichert werden. In einigen Beispielen kann die Matrixberechnungseinheit 312 den summierten Ausgabetensor für die Vektorberechnungseinheit 314 bereitstellen, und die Vektorberechnungseinheit 314 speichert den summierten Ausgabetensor in dem Einheitspuffer 308.
  • In einigen Implementierungen beinhaltet das Ausführen der Faltung des Eingabetensors und des Poolbildungs-Kerns Ausführen einer Faltung eines mit Nullen aufgefüllten Eingabetensors und des Poolbildungs-Kerns. Beispielsweise, wie mit Bezug auf 6 diskutiert ist, kann eine mit Nullen aufgefüllte Version eines Eingabetensors erzeugt werden, und der mit Nullen aufgefüllte Eingabetensor und der Poolbildungs-Kern können gefaltet werden, um den summierten Ausgabetensor zu erzeugen. Um die Faltung auszuführen, kann der mit Nullen aufgefüllte Eingabetensor erzeugt und in dem Einheitspuffer 308 gespeichert werden. Ein Faltungsprozess ähnlich dem vorstehend beschriebenen kann dann ausgeführt werden, um einen summierten Ausgabetensor zu erzeugen, der die gleiche Größe wie der Eingabetensor aufweist. Beispielsweise können der mit Nullen aufgefüllte Eingabetensor und der Poolbildungs-Kern für die Matrixberechnungseinheit 312 bereitgestellt werden, wobei die Matrixberechnungseinheit 312 die Faltungsoperation ausführen kann und die resultierenden Werte zu dem Einheitspuffer 308 senden kann, damit sie als der summierte Ausgabetensor gespeichert werden.
  • In einigen Implementierungen benutzen die Faltungsoperationen Festkommaarithmetik. Um die Auflösung beizubehalten, können die Ergebnisse der Faltung in den Akkumulatoren 410 der Matrixberechnungseinheit gehalten werden. Weil in einigen Implementierungen die Akkumulatoren jeweils 32 Bit breit sind, werden die Ergebnisse der Faltung, d. h. die Summen der Elemente des Eingabetensors, die innerhalb des Poolbildungsfensters sind, die Akkumulatoren 410 nicht zum Überlauf bringen. Somit kann die Auflösung an diesem Schritt der Mittelwert-Poolbildungsberechnung beibehalten werden.
  • Basierend auf den empfangenen Anweisungen führt die Spezial-Hardware Operationen aus, um zu bewirken, dass jedes Element des summierten Ausgabetensors durch eine Anzahl von Elementen in dem Fenster der Mittelwert-Poolbildungsschicht des neuronalen Netzes dividiert wird, um einen initialen Ausgabetensor zu erzeugen (704). Beispielsweise können Steuersignale durch den Sequenzer 306 basierend auf Anweisungen, die an der Host-Schnittstelle 302 von der Implementierungs-Engine für das neuronale Netz empfangen werden, zum Multiplizieren jedes Elements des summierten Ausgabetensors mit einem Faktor gleich einer Inversen der Anzahl von Elementen in dem Fenster der Mittelwert-Poolbildungsschicht des neuronalen Netzes erzeugt werden.
  • In einigen Implementierungen bewirken die Steuersignale, dass die Spezial-Hardware-Schaltung den initialen Ausgabetensor erzeugt durch Ausführen einer elementweisen Multiplikation des summierten Ausgabetensors und eines Tensors, der aus Elementen besteht, von denen jedes gleich einer Inversen der Anzahl von Elementen in dem Fenster der Mittelwert-Poolbildungsschicht des neuronalen Netzes ist. Wie mit Bezug auf 6 diskutiert ist, kann die Spezial-Hardware-Schaltung eine solche Matrix empfangen, z. B. an der Host-Schnittstelle 302, und kann die Matrix in dem dynamischen Speicher 310 speichern. Alternativ kann die Spezial-Hardware-Schaltung Operationen ausführen, um die Matrix zu erzeugen und die Matrix in dem dynamischen Speicher 310 zu speichern. Die Matrix kann eine Größe aufweisen, die mit derjenigen des summierten Ausgabetensors übereinstimmt, die außerdem mit dem der Eingabetensors übereinstimmt. Beispielsweise falls eine Mittelwert-Poolbildungsschicht so spezifiziert ist, dass sie ein 3×3-Fenster aufweist, d. h. ein Fenster aus 9 Elementen, dann kann eine Matrix aus Elementen, die Werte von 1/9 (oder ungefähr 0,11) aufweist und Dimensionen des summierten Ausgabetensors aufweist, durch die Host-Schnittstelle 302 der Spezial-Hardware-Schaltung empfangen werden. Die Matrix kann in dem dynamischen Speicher 310 gespeichert werden. Alternativ kann eine solche Matrix bereits in dem dynamischen Speicher 310 gespeichert sein und kann durch die Spezial-Hardware-Schaltung identifiziert werden.
  • Um elementweise Multiplikation des summierten Ausgabetensors und der Matrix auszuführen, kann der summierte Ausgabevektor aus dem Einheitspuffer 308 für die Matrixberechnungseinheit 312 bereitgestellt werden, und die andere Matrix kann aus dem dynamischen Speicher 310 für die Matrixberechnungseinheit 312 bereitgestellt werden. Die elementweise Multiplikation der Matrizen kann ausgeführt werden, und eine Ausgabe der elementweisen Multiplikation kann in dem Einheitspuffer 308 gespeichert werden. Beispielsweise kann die Matrixberechnungseinheit 312 die elementweise Multiplikation basierend auf empfangenen Steuersignalen ausführen und den resultierenden initialen Ausgabetensor für die Vektorberechnungseinheit 314 bereitstellen, die dann den initialen Ausgabetensor in dem Einheitspuffer 308 speichern kann.
  • Alternativ kann die Multiplikation der Elemente des summierten Ausgabevektors mit dem Faktor gleich der Inversen der Anzahl von Elementen in dem Fenster durch Ausführen von Skalarmultiplikation des summierten Ausgabevektors mit dem Faktor erreicht werden. Beispielsweise kann der summierte Ausgabevektor aus der Matrixberechnungseinheit 312 für die Vektorberechnungseinheit 314 bereitgestellt werden, und die Vektorberechnungseinheit 314 kann eine Funktion auf den summierten Ausgabevektor anwenden, um die Elemente des summierten Ausgabevektors mit dem Faktor zu multiplizieren, um den initialen Ausgabevektor zu erzeugen. Die Vektorberechnungseinheit 314 kann dann den initialen Ausgabevektor in dem Einheitspuffer 308 speichern.
  • Obwohl hier als durch Multiplikation ausgeführt diskutiert, können in einigen Implementierungen andere Operationen ausgeführt werden, um den initialen Ausgabevektor zu erhalten. Somit kann die Spezial-Hardware-Schaltung Operationen ausführen, um Elemente des summierten Ausgabevektors durch der Anzahl von Elementen in dem spezifizierten Fenster der Mittelwert-Poolbildungsschicht zu dividieren, um den initialen Ausgabevektor zu erhalten, anstatt dass die Spezial-Hardware-Schaltung die Elemente des summierten Ausgabevektors mit einer Inversen der Anzahl von Elementen des spezifizierten Fensters der Mittelwert-Poolbildungsschicht multipliziert, d. h. in denen die Spezial-Hardware-Schaltung zum Ausführen von Division fähig ist.
  • Obwohl das Ausführen der Schritte 702 und 704 der Spezial-Hardware-Schaltung ermöglicht, eine Ausgabe für die Mittelwert-Poolbildungsschicht bereitzustellen, die weitgehend genau ist, wird die Ausgabe spezielle Elemente aufweisen, die nicht korrekte Mittelwerte sind. Beispielsweise wenn eine Mittelwert-Poolbildungsschicht mit einem 3×3-Fenster auf ein Eckelement eines Eingabetensors angewandt wird, wäre ein Werte eines entsprechenden Eckelements eines Ausgabetensors ein Mittelwert nur des entsprechenden Eckelements des Eingabetensors und der 3 benachbarten Elemente in dem Eingabetensor, d. h. ein Mittelwert von nur 4 Elementen. Durch Multiplizieren des Eckelements des summierten Ausgabevektors mit einer Inversen der Anzahl von Elementen des 3×3-Fensters, d. h. Multiplizieren mit 1/9, ist es wahrscheinlich, dass der berechnete Mittelwert in dem initialen Ausgabevektor für dieses Element nicht korrekt ist.
  • Um dieses Problem zu adressieren, kann das System Elemente des initialen Ausgabetensors neu skalieren, um einen Ausgabetensor zu erzeugen (706). Um das Neuskalieren auszuführen, kann die Spezial-Hardware-Schaltung 110 einen Maskierungstensor empfangen oder erzeugen, wie mit Bezug auf Schritt 604 von 6 diskutiert ist. Der Maskierungstensor kann für die Spezial-Hardware-Schaltung zugänglich sein, z. B. in dem dynamischen Speicher 310, und kann für die Matrixberechnungseinheit 312 bereitgestellt werden. Der initiale Ausgabetensor kann für die Matrixberechnungseinheit 312 aus dem Einheitspuffer 308 bereitgestellt werden. Die elementweise Multiplikation des initialen Ausgabetensors und des Maskierungstensors kann ausgeführt werden, um einen Ausgabetensor zu erzeugen, der einer Ausgabe der Mittelwert-Poolbildungsschicht des neuronale Netzes entspricht. Der Ausgabetensor kann in dem Einheitspuffer 308 gespeichert werden, z. B. durch die Vektorberechnungseinheit 314.
  • Wie mit Bezug auf Schritt 604 des Prozesses 600 diskutiert ist, kann der Maskierungstensor von einer Größe sein, die der Größe des Eingabetensors entspricht, die außerdem der Größe des summierten Ausgabetensors und des initialen Ausgabetensors entspricht. Die Werte des Maskierungstensors können basierend auf den Dimensionen des Eingabetensors und des Fensters, das für die Mittelwert-Poolbildungsschicht des neuronalen Netzes spezifiziert ist, bestimmt werden, so dass jeder Wert die Anzahl von Eingabetensorwerten widerspiegelt, die gemittelt sind, um den entsprechenden Wert des Ausgabetensors zu erzeugen. Beispielsweise wird für ein 3×3-Mittelwertfenster und einen zweidimensionalen Eingabetensor der Größe 3×3 oder größer der Maskierungstensor die Faktoren von 9/4 für Eckelemente und 9/6 für Randelemente enthalten, wobei die restlichen Werte des Maskierungstensors Einsen sind. Somit wird nach der Multiplikation mit dem Faktor gleich der Inversen der Anzahl von Elementen in dem Fenster, d. h. 1/9, das Neuskalieren von Eckelementen mit einer Skalierung von 9/4 dazu führen, dass der Eckwert des summierten Ausgabetensors durch 4 dividiert wird, was geeignet ist, da das Anwenden des 3×3-Poolbildungs-Kerns auf Eckelemente des Eingabetensors dazu führt, dass 4 Elemente des Eingabetensors summiert werden, um ein Eckelement des summierten Ausgabetensors zu produzieren.
  • In anderen Implementierungen kann das System, anstatt Operationen auszuführen, um zu bewirken, dass die Elemente des summierten Ausgabetensors durch eine Anzahl von Elementen in dem Fenster der Mittelwert-Poolbildungsschicht dividiert werden, zuerst einen kleinsten gemeinsamen Nenner für die Anzahl von Aktivierungswerten des Eingabetensor bestimmen, die summiert sind, um jeden Wert des summierten Ausgabetensors zu erzeugen. Somit werden für das 3×3-Fenster und einen 3×3- oder größeren zweidimensionalen Eingabetensor 4 Elemente des Eingabetensors summiert, um ein Eckelement des summierten Ausgabetensors zu erzeugen, 6 Elemente des Eingabetensors werden summiert, um ein Randelement des summierten Ausgabetensors zu erzeugen, und 9 Elemente des Eingabetensors werden summiert, um die anderen Elemente des Eingabetensors zu erzeugen. Somit wäre der kleinste gemeinsame Nenner 36. Um die richtigen Werte für die Mittelwert-Poolbildungsschicht zu erzeugen, kann ein Maskierungstensor bestimmt werden, der Neunen in den Eckelementen, Sechsen in den Randelementen und Vieren überall sonst aufweist. Das Ausführen von Operationen, um zu bewirken, dass jedes Element des summierten Ausgabetensors durch den kleinsten gemeinsamen Nenner dividiert wird, gefolgt von Neuskalieren unter Verwendung des Maskierungstensors, würde dann zu einem Ausgabetensor führen, der eine genaue Ausgabe für die Mittelwert-Poolbildungsschicht ist. Das heißt, das Ausführen von elementweiser Multiplikation des summierten Ausgabetensors mit einer Matrix, die aus einer Inversen des kleinsten gemeinsamen Nenners besteht, d. h. 1/36 oder ungefähr 0,03, kombiniert mit elementweiser Multiplikation mit dem Maskierungstensor würde zu einem Ausgabetensor führen, der eine genaue Ausgabe für die Mittelwert-Poolbildungsschicht des neuronalen Netzes ist.
  • Eine solche Technik, in der Multiplikation mit einer Ganzzahl statt Multiplikation mit einem Bruch ausgeführt wird, wird in speziellen Implementierungen eingesetzt, um die Auflösung der produzierten Werte in den Berechnungen durchgehend zu erhalten. Wie diskutiert sind in einigen Implementierungen die Akkumulatoren 410 der Matrixberechnungseinheit 312 32 Bit breit, während Aktivierungen, z. B. in der Aktivierungseinheit der Vektorberechnungseinheit 314, entweder 8 Bit oder 16 Bit breit sind. Das System kann Festkommaarithmetik unter Verwendung der 32-Bit-, 8-Bit- oder 16-Bit-Register ausführen, um Berechnungen zum Produzieren einer Ausgabe der Mittelwert-Poolbildungsschicht auszuführen. Nur die Aktivierungen sind jedoch zum Ausführen von Bruch-Operationen imstande. Weil die Aktivierungen eine geringere Auflösung aufweisen, d. h. 8 oder 16 Bit gegenüber 32 Bit, ist es wünschenswert, Ganzzahlberechnungen auszuführen, um die Auflösung wenn möglich zu erhalten. Sobald Aktivierungsoperationen, z. B. durch die Aktivierungseinheit der Vektorberechnungseinheit 314, auf Werten ausgeführt werden, die in den 32-Bit-Akkumulatoren gespeichert sind, wird die Auflösung der resultierenden Werte verlorengehen.
  • Somit können bei Ausführen von elementweiser Multiplikation unter Verwendung von Ganzzahlen die Ergebnisse in den Akkumulatoren mit einer höheren Auflösung beibehalten werden als dann, wenn elementweise Multiplikation unter Verwendung von Brüchen in den Aktivierungen ausgeführt würde. Wo die Mittelwert-Poolbildungsoperationen unter Verwendung von nur Ganzzahlarithmetik, d. h. ohne Verwendung von Multiplikation mit Brüchen, ausgeführt werden kann, kann eine höchste Auflösung beibehalten werden. Wo wenigstens einige Bruchzahlarithmetik ausgeführt werden muss, kann das Reduzieren der Anzahl von Bruchzahlarithmetikoperationen, die in den Aktivierungen ausgeführt werden, die Quantisierungsartefakte, die durch Verwenden der Aktivierungen mit niedrigerer Auflösung produziert werden, reduzieren.
  • 8 bildet ein Beispiel einer Berechnung für eine Mittelwert-Poolbildungsschicht eines neuronalen Netzes ab. Das Beispiel von 8 kann unter Verwendung der Prozesse von 7 durch die Spezial-Hardware-Schaltung von 3 ausgeführt werden. Zur Veranschaulichung wendet das Beispiel von 8 eine Mittelwert-Poolbildungsschicht auf ein zweidimensionales 8×8-Array von Aktivierungswerten an. Die Mittelwert-Poolbildungsschicht des neuronalen Netzes kann ein 3×3-Fenster aufweisen, z. B. kann eine Anforderung, das neuronale Netz zu implementieren, spezifizieren, dass die Mittelwert-Poolbildungsschicht ein 3×3-Fenster aufweist, was bedeutet, dass jedes Element einer Ausgabe der Mittelwert-Poolbildungsschicht ein numerischer Mittelwert des entsprechenden Elements eines Eingabetensors und der 8 Elemente des Eingabetensors, die dem entsprechenden Element des Eingabetensors benachbart sind, sein wird. Der 8×8-Eingabetensor, der in 8 gezeigt ist, kann einen 8×8-Abschnitt eines Bilds repräsentieren, das in das neuronale Netz als eine Netzeingabe eingegeben wird, oder kann einen 8×8-Abschnitt eines weiteren Eingabetensors repräsentieren, z. B. eines Eingabetensors, der einer Ausgabe einer vorhergehenden Schicht des neuronalen Netzes entspricht.
  • In Teil (a) von 8 wird eine Faltung des 8×8-Eingabetensors und des Poolbildungs-Kerns ausgeführt, um einen summierten Ausgabetensor zu erzeugen. Wie gezeigt ist der Poolbildungs-Kern ein 3×3-Kern aus Einsen. Das liegt daran, dass der Eingabetensor zweidimensional ist, d. h. eine Tiefe von Eins aufweist, so dass jedes Element des Poolbildungs-Kerns eine 1×1-Einheitsmatrix ist, das heißt ein skalarer Wert von Eins. Die Faltung des Eingabetensors und des Poolbildungs-Kerns führt zu dem summierten Ausgabetensor, wobei jedes Element des summierten Ausgabetensors einer Summe eines entsprechenden Elements des Eingabetensors und der acht Elementen benachbart dem entsprechenden Element des Eingabetensors ist, d. h. der 8 Elemente, die bei Schreibung in Matrixformat das entsprechende Element des Eingabetensors umgeben. Weil der Eingabetensor im Speicher, d. h. in dem Einheitspuffer 308, in Rasterabtastreihenfolge gespeichert sein kann, können im Speicher die Elemente des Eingabetensors, die summiert werden, um ein Element des summierten Ausgabetensors zu erzeugen, nicht benachbart sein. Obwohl in 8 nicht gezeigt kann der Eingabetensor auch ein mit Nullen aufgefüllter Eingabetensor sein, wie mit Bezug auf den Prozess 700 von 7 beschrieben ist.
  • Für das in Teil (a) von 8 gezeigte spezifische Beispiel wird der 3×3-Poolbildungs-Kern auf den Eingabetensor angewandt, um ein Element des summierten Ausgabetensors zu erzeugen, das einer (1,1)-Position des summierten Ausgabetensors entspricht. Somit ist das (1,1)-Element des summierten Ausgabetensors eine Summierung von Elemente, die den (0,0)-, (1,0)-, (2,0)-, (1,0)-, (1,1)-, (1,2)-, (2,0)-, (2,1)- und (2,2)-Matrixpositionen des Eingabetensors entsprechen. Somit ist für die in Teil (a) gezeigten Werte das Element, das der (1,1)-Position des summierten Ausgabetensors entspricht, gleich 36. Andere Elemente des summierten Ausgabetensors würden ähnlich berechnet, sind jedoch in dem Beispiel von 8 nicht gezeigt.
  • In Teil (b) von 8 werden die Elemente des summierten Ausgabetensors mit einem Faktor multipliziert, der einer Inversen der Anzahl von Elementen in dem Fenster der Mittelwert-Poolbildungsschicht des neuronalen Netzes äquivalent ist, um einen initialen Ausgabetensor zu erzeugen. Um die Multiplikation auszuführen, wird ein Maskierungstensor erzeugt, der eine Größe äquivalent der Größe des summierten Ausgabetensors aufweist, die auch gleich der Größe des Eingabetensors ist. Elemente des Maskierungstensors sind gleich einer Inversen der Anzahl von Elementen in dem Fenster der Mittelwert-Poolbildungsschicht des neuronalen Netzes. Somit ist, wie in 8 gezeigt ist, der Maskierungstensor ein 8×8-Array von Werten, von denen jeder gleich 1/9 ist, wie in 8 genähert als 0,11 gezeigt ist.
  • Die elementweise Multiplikation des summierten Ausgabetensors und des Maskierungstensors führt zu einem initialen Ausgabetensor, wobei jedes Element des initialen Ausgabetensors gleich dem Produkt eines entsprechenden Elements des summierten Ausgabetensors und einem entsprechenden Element des Maskierungstensors ist. Somit ist das Element, das sich an der (1,1)-Position des initialen Ausgabetensors befindet, gleich 4, basierend auf 36·(1/9) = 4. Andere Elemente des initialen Ausgabetensors würden ähnlich berechnet, sind jedoch in 8 nicht gezeigt. Zusätzlich kann, obwohl in 8 als durch elementweise Multiplikation ausgeführt gezeigt, in einigen Implementierungen der initiale Ausgabetensor durch Ausführen von skalarer Multiplikation des summierten Ausgabetensors und eines Faktors äquivalent der Inversen der Anzahl von Elementen in dem Fenster der Mittelwert-Poolbildungsschicht erreicht werden. Somit würde für das in 8 gezeigte Beispiel die skalare Multiplikation des summierten Ausgabetensors und 1/9, z. B. durch die Vektorberechnungseinheit 314 ausgeführt, zu dem initialen Ausgabetensor führen.
  • In Teil (c) von 8 werden Elemente des initialen Ausgabetensors neu skaliert, um einen Ausgabetensor für die Mittelwert-Poolbildungsschicht des neuronalen Netzes zu erzeugen. Um die Neuskalierung auszuführen, wird elementweise Multiplikation zwischen dem initialen Ausgabetensor und einem zweiten Maskierungstensor ausgeführt. Eine Größe des zweiten Maskierungstensors stimmt mit der Größe des initialen Ausgabetensors überein, die auch gleich der Größe sowohl des summierten Ausgabetensors als auch des Eingabetensors ist. Die Elemente des zweiten Maskierungstensors werden basierend auf einer Anzahl von Elementen des Eingabetensors bestimmt, die bei der Ausführung der Faltung in Teil (a) von 8 mit Elementen des Poolbildungs-Kerns multipliziert werden. Somit führt in dem Beispiel von 8 das Anwenden der 3×3-Gewichtsmatrix auf ein Eckelement des Eingabetensors dazu, dass 4 aus den 9 Elementen des Poolbildungs-Kerns mit Elementen des Eingabetensors multipliziert werden, und das Anwenden des 3×3-Poolbildungs-Kerns auf ein Randelement des Eingabetensors führt dazu, dass 6 aus den 9 Elementen des Poolbildungs-Kerns mit Elementen des Eingabetensors multipliziert werden. Für alle anderen Elemente des Eingabetensors führt das Anwenden des 3×3-Poolbildungs-Kerns dazu, dass alle 9 Elemente des Poolbildungs-Kerns mit einem Element des Eingabetensors multipliziert werden.
  • Die Elemente des zweiten Maskierungstensors sind deshalb so einstellt, dass die erste Multiplikation mit der Anzahl von Elementen des Fensters der Mittelwert-Poolbildungsschicht und die zweite Multiplikation mit dem Neuskalierungsfaktor dazu führen, dass die richtige Mittelwertberechnung für jedes Element des Ausgabetensors angewandt wird. Somit führt für ein Eckelement des Eingabetensors, wo nur 4 Elemente des Eingabetensors gemittelt werden, wenn der Poolbildungs-Kern auf das Eckelement angewandt wird, die Multiplikation des entsprechenden Elements mit dem summierten Ausgabetensor zuerst mit 1/9, d. h. 0,11 wie in Teil (b) gezeigt, und dann mit 9/4 zu einer effektiven Division des Eckelements des summierten Ausgabevektors durch 4. Mit anderen Worten wird der Neuskalierungsfaktor beispielsweise auf der Basis der Anzahl von Summanden, die zu einem speziellen Element in dem initialen Ausgabetensor beitragen, bestimmt.
  • In einigen Implementierungen werden der Maskierungstensor von Teil (b) und der zweite Maskierungstensor von Teil (c) durch die Implementierungs-Engine 150 für das neuronale Netz von 1 erzeugt und für die Spezial-Hardware-Schaltung 110 bereitgestellt. Die Spezial-Hardware-Schaltung 110 kann die erzeugten Maskierungstensoren empfangen, z. B. an der Host-Schnittstelle 302, und kann die Maskierungstensoren zum Gebrauch in den Berechnungen der Mittelwert-Poolbildungsschicht speichern, z. B. durch Speichern der Maskierungstensoren in dem dynamischen Speicher 310. Alternativ kann die Implementierungs-Engine 150 für das neuronale Netz Anweisungen für die Spezial-Hardware-Schaltung 110 bereitstellen, die bewirken, dass die Spezial-Hardware-Schaltung die Maskierungstensoren erzeugt und/oder in dem dynamischen Speicher 310 speichert, z. B. durch Bewirken, dass die Spezial-Hardware-Schaltung 110 Tensorfragmente kachelt, um die Maskierungstensoren zu erzeugen, und die erzeugten Maskierungstensoren in dem dynamischen Speicher 310 speichert.
  • Die elementweise Multiplikation des initialen Ausgabetensors und des zweiten Maskierungstensors führt zu dem Ausgabetensor, der dann in dem Einheitspuffer 308 als die Ausgabe der Mittelwert-Poolbildungsschicht des neuronalen Netzes gespeichert werden kann. Für das in 8 gezeigte Beispiel werden alle Elemente des Poolbildungs-Kerns auf das Element des Eingabetensors angewandt, das die Position (1,1) aufweist, und somit ist der entsprechende Faktor des zweiten Maskierungstensors gleich 1. Somit ist das Element an der (1,1)-Position des Ausgabetensors gleich dem entsprechenden Element des initialen Ausgabetensors, das einen Wert von 4 aufweist. Die gleiche elementweise Multiplikation kann für alle anderen Elemente des initialen Ausgabetensors ausgeführt werden, um den Ausgabetensor zu erzeugen.
  • In einigen Fällen werden die elementweisen Multiplikationen, die in 8 gezeigt sind, des summierten Ausgabetensors und des Maskierungstensors und des initialen Ausgabetensors und des zweiten Maskierungstensors in den Aktivierungen ausgeführt, z. B. in der Aktivierungseinheit der Vektorberechnungseinheit 314. Das kann stattfinden, wenn die Operationen für elementweise Multiplikation sowohl Bruch- als auch Festkomma-Arithmetikoperationen sind, die in einigen Implementierungen durch die Aktivierungen gehandhabt werden können, jedoch nicht durch die Akkumulatoren.
  • 9 bildet ein weiteres Beispiel einer Berechnung einer Mittelwert-Poolbildungsschicht eines neuronalen Netzes ab. Das Beispiel von 9 kann unter Verwendung des Prozesses von 7 durch die Spezial-Hardware-Schaltung von 3 ausgeführt werden. Zur Veranschaulichung wendet das Beispiel von 9 eine Mittelwert-Poolbildungsschicht auf ein 8×8-Array von Aktivierungswerten an. Die Mittelwert-Poolbildungsschicht des neuronalen Netzes kann ein 3×3-Fenster aufweisen, z. B. kann eine Anforderung, das neuronale Netz zu implementieren, spezifizieren, dass die Mittelwert-Poolbildungsschicht ein 3×3-Fenster aufweist, was bedeutet, dass jedes Element einer Ausgabe der Mittelwert-Poolbildungsschicht ein numerischer Mittelwert des entsprechenden Elements eines Eingabetensors und der 8 benachbarten Elemente des entsprechenden Element des Eingabetensors sein wird. Der 8×8-Eingabetensor, der in 9 gezeigt ist, kann einen 8×8-Abschnitt eines Bilds repräsentieren, das in das neuronale Netz als eine Netzeingabe eingegeben wird, oder kann einen 8×8-Abschnitt eines weiteren Eingabetensors repräsentieren, z. B. eines Eingabetensors, der einer Ausgabe einer vorhergehenden Schicht des neuronalen Netzes entspricht.
  • In Teil (a) von 9 ist ein Eingabetensor für die Mittelwert-Poolbildungsschicht des neuronalen Netzes mit Nullen aufgefüllt worden, um einen mit Nullen aufgefüllten Eingabetensor zu erzeugen. Anweisungen, die für die Spezial-Hardware-Schaltung bereitgestellt werden, können verwendet werden, um Steuersignale zum Steuern der Spezial-Hardware-Schaltung, einen Eingabetensor mit Nullen aufzufüllen, zu erzeugen. Das Auffüllen mit Nullen kann beispielsweise erreicht werden durch Bereitstellen des Eingabetensors aus dem Einheitspuffer 308 für die Matrixberechnungseinheit 312, Multiplizieren der Eingabematrix mit einer Eingabematrix in der Matrixberechnungseinheit 312, Speichern der Ausgabe in dem Einheitspuffer 308 und dann Ausführen von Aktivierungsoperationen z. B. durch die Vektorberechnungseinheit 314, um Nullen in die geeigneten Plätze in dem Einheitspuffer 308 zu schreiben, um den mit Nullen aufgefüllten Eingabetensor zu erzeugen. Der resultierende mit Nullen aufgefüllte Eingabetensor ist eine 10×10-Matrix, die eine erste Zeile aus 10 Nullen, 8 Zeilen, von denen jede eine erste Null, 8 Werte aus einer Zeile des Eingabetensors und eine zweite Null an dem Ende der Zeile aufweist, und eine Endzeile aus 10 Nullen aufweist.
  • Der mit Nullen aufgefüllte Eingabetensor wird mit einem Kern gefaltet, der ein Poolbildungs-Kern ist, der die gleiche Größe aufweist wie ein Fenster, das für die Mittelwert-Poolbildungsschicht des neuronalen Netzes spezifiziert ist. Somit wird für das Beispiel, das in 9 gezeigt ist, ein 3×3-Kern, der aus 1×1-Einheitsmatrizen, d. h. Einsen, besteht, mit dem mit Nullen aufgefüllten Eingabetensor gefaltet, um einen summierten Ausgabetensor zu erzeugen. Wie gezeigt erzeugt das Falten des mit Nullen aufgefüllten Eingabetensors mit dem Poolbildungs-Kern den summierten Ausgabetensor, in dem jedes Element des summierten Ausgabetensors gleich einer Summe des entsprechenden Elements des mit Null aufgefüllten Eingabetensors und der 8 Elemente ist, die benachbart dem entsprechenden Element des mit Nullen aufgefüllten Eingabetensors gezeigt sind. Somit ist das (0,0)-Element des summierten Ausgabetensors, der in 9 gezeigt ist, gleich 8, d. h. der Summe 0 + 0 + 0 + 0 + 0 + 1 + 0 + 3 + 4 = 8. Ein ähnlicher Prozess kann ausgeführt werden, um jedes aus deren anderen Elementen des summierten Ausgabetensors zu erhalten, in 9 nicht gezeigt.
  • Bei Teil (b) von 9 wird die elementweise Multiplikation des summierten Ausgabetensors und eines Maskierungstensors ausgeführt. Der Maskierungstensor von 9 kann durch zuerst Bestimmen eines kleinsten gemeinsamen Nenners der Anzahl von Elementen in dem Fenster, das für die Mittelwert-Poolbildungsschicht des neuronalen Netzes spezifiziert ist, und einer Anzahl von Elementen des Eingabetensors, die verwendet werden zum Erzeugen jedes Elements des summierten Ausgabetensors, bestimmt werden. Für das Beispiel von 9 wird der kleinste gemeinsame Nenner deshalb 36 sein, d. h. der kleinste gemeinsame Nenner von 9, d. h. der Anzahl von Elementen in dem 3×3-Fenster, 4, d. h. der Anzahl von Elementen des Eingabetensors, die summiert sind, um Eckelemente des summierten Ausgabetensors zu erzeugen, und 6, d. h. der Anzahl von Elementen des Eingabetensors, die summiert sind, um Randelemente des summierten Ausgabetensors zu erzeugen.
  • Die Faktoren des Maskierungstensors werden dann basierend auf dem kleinsten gemeinsamen Nenner und der Anzahl von Elementen des Eingabetensors, die summiert sind, um ein entsprechendes Element des summierten Ausgabetensors zu erzeugen, bestimmt. Die Faktoren werden ermöglichen, dass die Multiplikation eines Elements des summierten Ausgabetensors mit einer Inversen des kleinsten gemeinsamen Nenners und die Multiplikation mit dem Faktor zu einem Wert führen, der der Wert des Elements des summierten Ausgabetensors dividiert durch die Anzahl von Elementen des Eingabetensors ist, die summiert sind, um den Wert des summierten Ausgabetensors zu erzeugen. Somit sind die Eckelemente des Maskierungstensors Neunen, d. h. da die Multiplikation des Eckelements des summierten Ausgabetensors mit 9 und mit 1/36 zu der geeigneten Division des Eckelements durch 4 führen wird. Die Randelemente des Maskierungstensors sind Sechsen, d. h. da die Multiplikation des Randelements des summierten Ausgabetensors mit 6 und mit 1/36 zu der geeigneten Division des Eckelements durch 6 führen wird. Andere Elemente des Maskierungstensors sind Vieren, d. h. da die Multiplikation des entsprechenden Elements des summierten Ausgabevektors mit 4 und mit 1/36 zu der geeigneten Division durch 9 führen wird.
  • Die elementweise Multiplikation des summierten Ausgabetensors und des Maskierungstensors führt zu dem initialen Ausgabetensor, der in Teil (b) von 9 gezeigt ist. Beispielsweise kann der summierte Ausgabetensor für die Matrixberechnungseinheit 312 aus dem Einheitspuffer 308 bereitgestellt werden, und der Maskierungstensor, der empfangen oder durch die Spezial-Hardware-Schaltung erzeugt wird, kann für die Matrixberechnungseinheit 312 aus dem dynamischen Speicher 310 bereitgestellt werden. Die Matrixberechnungseinheit 312 führt elementweise Multiplikation aus, um den initialen Ausgabetensor zu erzeugen. Beispielsweise führt die elementweise Multiplikation des Eckelements des summierten Ausgabetensors gleich 8 und des entsprechenden Elements des Maskierungstensors mit einem Wert von 9 zu dem Eckelement des initialen Ausgabetensors mit einem Wort von 72. Ein ähnlicher Prozess wird ausgeführt, um die anderen Elemente des initialen Ausgabetensors zu erzeugen, die in 9 aus Gründen der Einfachheit nicht gezeigt sind.
  • Bei Teil (c) von 9 wird der initialen Ausgabetensor mit einem zweiten Maskierungstensor multipliziert, um einen Ausgabetensor zu erzeugen. Der zweite Maskierungstensor ist eine Matrix, die die gleiche Größe aufweist wie der initiale Ausgabetensor und aus Elementen besteht, von denen jedes gleich einer Inversen des bestimmten kleinsten gemeinsamen Nenners ist, d. h. 1/36 oder ungefähr 0,03. Die elementweise Multiplikation des initialen Ausgabetensors und des zweiten Maskierungstensors wird ausgeführt, um den Ausgabetensor zu erzeugen. Beispielsweise kann der initiale Ausgabetensor in dem Einheitspuffer 308 gespeichert sein und kann aus dem Einheitspuffer 308 für die Matrixberechnungseinheit 312 bereitgestellt werden. Der zweite Maskierungstensor kann in dem dynamischen Speicher 310 gespeichert sein und ebenfalls für die Matrixberechnungseinheit 312 bereitgestellt werden, wo elementweise Multiplikation ausgeführt wird, um den Ausgabetensor zu erzeugen. Beispielsweise führt die elementweise Multiplikation des Eckelements des initialen Ausgabetensors mit einem Wert von 72 und des entsprechenden Element des zweiten Maskierungstensors mit einem Wert von 1/36 zu dem entsprechenden Eckelement des Ausgabetensors mit einem Wert von 2. Die elementweise Multiplikation kann ausgeführt werden, um die anderen Elemente des Ausgabetensors zu erzeugen, die in 9 nicht gezeigt sind. Alternativ kann eine Skalarmultiplikationsfunktion auf den initialen Ausgabetensor angewandt werden, z. B. durch die Vektorberechnungseinheit 314. Der resultierende Ausgabetensor kann in dem Einheitspuffer 308 gespeichert werden.
  • Insbesondere können die in 9 ausgeführten Berechnungen das Auftreten von Quantisierungsfehlern begrenzen. Durch Ausführen von elementweiser Multiplikation, die in Teil (b) gezeigt ist, unter Verwendung von Ganzzahlen können die Berechnungen in den Akkumulatoren anstatt in den Aktivierungen ausgeführt werden. Somit kann, wo die Akkumulatoren eine höhere Auflösung aufweisen als die Aktivierungen, die Ausgabe von Berechnungen in Teil (b) an einer höheren Auflösung gehalten werden. Diese erhöhte Auflösung in den Berechnungen bei Teil (b) würde folglich die Genauigkeit des Ausgabetensors erhöhen, der aus den Berechnungen in Teil (c) resultiert. Ausführungsformen der Gegenstands und der funktionalen Operationen, die in dieser Anmeldung beschrieben sind, können in einer digitalen elektronischen Schaltungsanordnung, in materiell ausgeführter Computer-Software oder Firmware, in Computer-Hardware, die die Strukturen enthalten, die in dieser Anmeldung offenbart sind, und ihre strukturellen Äquivalente enthalten, oder in Kombinationen aus einem oder mehreren daraus implementiert sein. Ausführungsformen des Gegenstands, der in dieser Anmeldung beschrieben ist, können als ein oder mehrere Computerprogramme implementiert sein, d. h. ein oder mehrere Module aus Computerprogrammanweisungen, die auf einem materiellen nichttransitorischen Programmträger zur Ausführung durch oder zur Steuerung des Betriebs einer Datenverarbeitungseinrichtung codiert sind. Alternativ oder zusätzlich können die Programmanweisungen auf einem künstlich erzeugten verbreiteten Signal codiert sein, z. B. einem maschinenerzeugten elektrischen, optischen oder elektromagnetischen Signal, das erzeugt wird, um Informationen zur Übertragung zu geeigneten Empfängereinrichtungen zur Ausführung durch eine Datenverarbeitungseinrichtung zu codieren. Das Computerspeichermedium kann eine maschinenlesbare Speichervorrichtung, ein maschinenlesbares Speichersubstrat, eine Speichervorrichtung für Direktzugriff oder seriellen Zugriff oder eine Kombination aus einem oder mehreren daraus sein.
  • Der Begriff ”Datenverarbeitungseinrichtung” umfasst alle Arten von Einrichtungen, Vorrichtungen und Maschinen zur Verarbeitung von Daten, die als Beispiel einen programmierbaren Prozessor, einen Computer oder mehrere Prozessoren oder Computer enthalten. Die Einrichtung kann Spezial-Logikschaltungsanordnung, z. B. ein FGPA (feldprogrammierbares Gatterfeld) oder eine ASIC (anwendungsspezifische integrierte Schaltung), enthalten. Die Einrichtung kann außerdem zusätzlich zu Hardware Code enthalten, der eine Ausführungsumgebung für das fragliche Computerprogramm erzeugt, z. B. Code, der Prozessor-Firmware, einen Protokollstack, ein Datenbankmanagementsystem, ein Betriebssystem oder eine Kombination aus einem oder mehreren davon bildet.
  • Ein Computerprogramm (das auch als Programm, Software, eine Software-Anwendung, ein Modul, ein Software-Modul, ein Skript oder Code bezeichnet oder beschrieben sein kann) kann in irgendeiner Form einer Programmiersprache geschrieben sein, die kompilierte oder interpretierte Sprachen oder deklarative oder prozedurale Sprachen enthält, und es kann in irgendeiner Form verteilt werden, die als ein eigenständiges Programm oder als ein Modul, eine Komponente, eine Subroutine oder eine andere Einheit, die zum Gebrauch in einer Berechnungsumgebung geeignet ist, enthält. Ein Computerprogramm kann, muss jedoch nicht, einer Datei in einem Dateisystem entsprechen. Ein Programm kann in einem Abschnitt einer Datei, die andere Programme oder Daten enthält, z. B. ein oder mehrere Skripte, die in einem Auszeichnungssprachen-Dokument gespeichert sind, in einer einzelnen Datei, die für das fragliche Programm dediziert ist, oder in mehreren koordinierten Dateien, z. B. Dateien, die ein oder mehrere Module, Unterprogramme oder Code-Abschnitte speichern, gespeichert sein. Ein Computerprogramm kann verteilt werden, um auf einem Computer oder auf mehreren Computern, die sich an einem Standort oder verteilt über mehrere Standorte befinden und durch ein Kommunikationsnetz miteinander verbunden sind, ausgeführt zu werden.
  • Die Prozesse und Logikabläufe, die in dieser Anmeldung beschrieben sind, können durch einen oder mehrere programmierbare Computer ausgeführt werden, die ein oder mehrere Computerprogramme ablaufen lassen, um durch Arbeiten auf Eingabedaten und Erzeugen einer Ausgabe Funktionen auszuführen. Die Prozesse und Logikabläufe können auch durch eine Spezial-Logikschaltungsanordnung, z. B. ein FGPA (feldprogrammierbares Gatterfeld) oder eine ASIC (anwendungsspezifische integrierte Schaltung) ausgeführt werden, und die Einrichtung kann dadurch implementiert sein.
  • Computer, die für die Ausführung eines Computerprogramms geeignet sind, können als Beispiel auf Allzweck- oder Spezial-Mikroprozessoren oder beiden oder irgendeiner anderen Art von zentraler Verarbeitungseinheit basieren. Allgemein wird eine zentrale Verarbeitungseinheit Anweisungen und Daten von einem Festwertspeicher oder einem Direktzugriffsspeicher oder beiden empfangen. Die wesentlichen Elemente eines Computers sind eine zentrale Verarbeitungseinheit zum Ausführen oder Durchführen von Anweisungen und eine oder mehrere Speichervorrichtungen zum Speichern von Anweisungen und Daten. Allgemein wird ein Computer auch eine oder mehrere Massenspeichervorrichtungen zum Speichern von Daten, z. B. magnetische, magneto-optische Platten oder optische Platten, enthalten oder betriebstechnisch damit gekoppelt sein, um Daten von ihnen zu empfangen, zu ihnen zu übertragen oder beides. Ein Computer muss jedoch solche Vorrichtungen nicht aufweisen. Außerdem kann ein Computer in eine weitere Vorrichtung eingebettet sein, z. B. in ein Mobiltelefon, einen persönlichen digitalen Assistenten (PDA), ein mobiles Audio- oder Videoabspielgerät, eine Spielkonsole, einen Empfänger des globalen Positionierungssystems (GPS-Empfänger) oder eine tragbare Speichervorrichtung, z. B. ein Flashlaufwerk über den universellen seriellen Bus (USB-Flashlaufwerk, um nur einige wenige zu nennen.
  • Computerlesbare Medien, die zum Speicher von Computerprogrammanweisungen und Daten geeignet sind, enthalten alle Formen von nichtflüchtigem Speicher, Medien und Speichervorrichtungen, die als Beispiel Halbleiterspeichervorrichtungen, z. B. EPROM, EEPROM und Flash-Speichervorrichtungen enthalten; Magnetplatten, z. B. interne Festplatten oder herausnehmbare Platten; magneto-optische Platten; und CD ROM und DVD-ROM-Platten. Der Prozessor und der Speicher können durch eine Spezial-Logikschaltungsanordnung ergänzt oder darin integriert sein.
  • Um die Interaktion mit einem Anwender zu senden, können Ausführungsformen des in dieser Anmeldung beschriebenen Gegenstands auf einem Computer implementiert sein, der eine Anzeigevorrichtung, z. B. einen CRT- (Kathodenstrahlröhren-) oder LCD-Monitor (Flüssigkristallanzeige-Monitor) zum Anzeigen von Informationen für den Anwender und eine Tastatur und eine Zeigevorrichtung, z. B. eine Maus oder einen Trackball, durch die der Anwender Eingaben für den Computer senden kann, aufweist. Andere Arten von Vorrichtungen können verwendet werden, um ebenfalls Interaktion mit einem Anwender zu senden; beispielsweise kann eine für den Anwender bereitgestellte Rückmeldung irgendeine Form sensorischer Rückmeldung sein, z. B. visuelle Rückmeldung, hörbare Rückmeldung oder tastbare Rückmeldung; und eine Eingabe von dem Anwender kann in irgendeiner Form empfangen werden, die akustische, Sprach- oder tastbare Eingabe enthält. Zusätzlich kann ein Computer mit einem Anwender durch Senden von Dokumenten zu einer Vorrichtung und Empfangen von Dokumenten von einer Vorrichtung, die durch den Anwender verwendet wird, interagieren; beispielsweise durch Senden von Web-Seiten zu einem Web-Browser auf einer Clientvorrichtung eines Anwenders in Reaktion auf Anforderungen, die von dem Web-Browser empfangen werden.
  • Ausführungsformen des in dieser Anmeldung beschriebenen Gegenstands können in einem Berechnungssystem implementiert sein, das eine Backend-Komponente, z. B. als einen Daten-Server, enthält oder das eine Middleware-Komponente, z. B. einen Anwendungsserver, enthält, oder der eine Frontend-Komponente, z. B. einen Client-Computer, enthält, der eine grafische Anwenderschnittstelle oder einen Web-Browser aufweist, über den ein Anwender mit einer Implementierung des in dieser Anmeldung beschriebenen Gegenstands interagieren kann, oder irgendeine Kombination einer oder mehrerer solcher Backend-, Middleware- oder Frontend-Komponenten. Die Komponenten des Systems können durch irgendeine Form oder irgendein Medium zur digitalen Datenkommunikation, z. B. ein Kommunikationsnetz, miteinander verbunden sein. Beispiele für Kommunikationsnetze enthalten ein lokales Netz (”LAN”) und ein Weitbereichsnetz (”WAN”), z. B. das Internet.
  • Das Berechnungssystem kann Clients und Server enthalten. Ein Client und ein Server sind im Allgemeinen voneinander entfernt und interagieren typischerweise über ein Kommunikationsnetz. Die Beziehung von Client und Server entsteht aufgrund der Computerprogramme, die auf den jeweiligen Computern laufen und eine Client-Server-Beziehung miteinander aufweisen.
  • Obwohl diese Anmeldung viele spezifische Implementierungseinzelheiten beinhaltet, sollten diese nicht als Einschränkungen für den Schutzbereich irgendeiner Erfindung oder dessen, das beansprucht sein kann, gedeutet werden, sondern vielmehr als Beschreibungen der Merkmale, die für spezielle Ausführungsformen der speziellen Erfindungen spezifisch sein können. Spezielle Merkmale, die in dieser Anmeldung im Kontext getrennter Ausführungsformen beschrieben sind, können auch in Kombination in einer einzigen Ausführungsform implementiert sein. Umgekehrt können verschiedene Merkmale, die im Kontext einer einzigen Ausführungsform beschrieben sind, auch in mehreren Ausführungsformen getrennt oder in irgendeiner geeigneten Unterkombination implementiert sein. Außerdem können, obwohl Merkmale vorstehend als in speziellen Kombinationen arbeitend beschrieben und anfangs sogar als solche beansprucht sind, ein oder mehrere Merkmale aus einer beanspruchten Kombination in einigen Fällen aus der Kombination herausgenommen sein, und die beanspruchte Kombination kann sich auf eine Unterkombination oder eine Variation einer Unterkombination richten.
  • Ähnlich sollte, obwohl Operationen in den Zeichnungen in einer speziellen Reihenfolge abgebildet sind, das nicht so verstanden werden, dass es erforderlich ist, dass solche Operationen in der speziellen gezeigten Reihenfolge oder in sequentieller Reihenfolge ausgeführt werden oder dass alle dargestellten Operationen ausgeführt werden, um wünschenswerte Ergebnisse zu erreichen. Unter speziellen Umständen können Multitasking und Parallelverarbeitung vorteilhaft sein. Außerdem sollte die Trennung verschiedener Systemmodule und Komponenten in den vorstehend beschriebenen Ausführungsformen nicht so verstanden werden, dass eine solche Trennung in allen Ausführungsformen erforderlich ist, und es sollte verstanden werden, dass die beschriebenen Programmkomponenten und Systeme im Allgemeinen gemeinsam in einem einzigen Software-Produkt oder in mehrere Software-Produkte paketiert integriert sein können.
  • Gemäß Implementierungen dieser Offenbarung sind Verfahren und Systeme bereitstellt zum Empfangen einer Anforderung, ein neuronales Netz, das eine Mittelwert-Poolbildungsschicht auf einer Hardware-Schaltung umfasst, zu implementieren, und in Reaktion darauf Erzeugen von Anweisungen, die dann, wenn sie durch die Hardware-Schaltung ausgeführt werden, bewirken, dass die Hardware-Schaltung während des Verarbeiten einer Netzeingabe durch das neuronale Netz einen Schicht-Ausgabetensor erzeugt, der einer Ausgabe der Mittelwert-Poolbildungsschicht des neuronalen Netzes äquivalent ist, durch Ausführen einer Faltung eines Eingabetensors für die Mittelwert-Poolbildungsschicht des neuronalen Netzes und eines Kerns mit einer Größe gleich einem Fenster der Mittelwert-Poolbildungsschicht des neuronalen Netzes und bestehend aus Elementen, die jeweils eine Einheitsmatrix sind, um einen ersten Tensor zu erzeugen, und Ausführen von Operationen, um zu bewirken, dass jedes Element des ersten Tensors durch eine Anzahl von Elementen in dem Fenster der Mittelwert-Poolbildungsschicht des neuronalen Netzes dividiert wird, um einen initialen Ausgabetensor zu erzeugen.
  • Gemäß Implementierungen dieser Offenbarung sind Systeme bereitgestellt zum Empfangen einer Anforderung, ein neuronales Netz zu implementieren, das eine Mittelwert-Poolbildungsschicht auf einer Hardware-Schaltung umfasst, und in Reaktion darauf Erzeugen von Anweisungen, die dann, wen sie durch die Hardware-Schaltung ausgeführt werden, bewirken, dass die Hardware-Schaltung während des Verarbeiten einer Netzeingabe durch das neuronale Netz einen Schicht-Ausgabetensor erzeugt, der einer Ausgabe der Mittelwert-Poolbildungsschicht des neuronalen Netzes äquivalent ist, durch Ausführen einer Faltung eines Eingabetensors für die Mittelwert-Poolbildungsschicht des neuronalen Netzes und eines Kerns mit einer Größe gleich einem Fenster der Mittelwert-Poolbildungsschicht des neuronalen Netzes und bestehend aus Elementen, die jeweils eine Einheitsmatrix sind, um einen ersten Tensor zu erzeugen, und Ausführen von Operationen, um zu bewirken, dass jedes Element des ersten Tensors durch eine Anzahl von Elementen in dem Fenster der Mittelwert-Poolbildungsschicht des neuronalen Netzes dividiert wird, um einen initialen Ausgabetensor zu erzeugen.
  • Spezielle Ausführungsformen des Gegenstands sind beschrieben worden. Andere Ausführungsformen sind innerhalb des Schutzbereichs der folgenden Ansprüche. Beispielsweise können die Aktionen, die in den Ansprüchen vorgetragen sind, in einer anderen Reihenfolge ausgeführt werden und immer noch wünschenswerte Ergebnisse erreichen. Als ein Beispiel erfordern die in den begleitenden Figuren abgebildeten Prozesse nicht notwendigerweise die spezielle gezeigte Reihenfolge oder sequentielle Reihenfolge, um wünschenswerte Ergebnisse zu erreichen. In speziellen Implementierungen können Multitasking und Parallelverarbeitung vorteilhaft sein.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • WO 2016/186811 [0085]

Claims (12)

  1. System, das umfasst: eine Hardware-Schaltung; und eine oder mehrere Speichervorrichtungen, die Anweisungen speichern, die arbeiten, wenn sie durch die Hardware-Schaltung ausgeführt werden, um zu bewirken, dass die Hardware-Schaltung Operationen ausführt, die umfassen: Ausführen einer Faltung eines Eingabetensors für die Mittelwert-Poolbildungsschicht des neuronalen Netzes und eines Kerns mit einer Größe gleich einem Fenster der Poolbildungsschicht des neuronalen Netzes, der aus Elementen besteht, die jeweils eine Einheitsmatrix sind, um einen ersten Tensor zu erzeugen; und Ausführen von Operationen, um zu bewirken, dass jedes Element des ersten Tensors durch eine Anzahl von Elementen in dem Fenster der Mittelwert-Poolbildungsschicht des neuronalen Netzes dividiert wird, um einen initialen Ausgabetensor zu erzeugen.
  2. System nach Anspruch 1, wobei die Operationen ferner umfassen: Neuskalieren von Randelementen des initialen Ausgabetensors durch einen ersten Skalierungsfaktor und Neuskalieren von Eckelementen des initialen Ausgabetensors durch einen zweiten Skalierungsfaktor, um einen Ausgabetensor zu erzeugen.
  3. System nach Anspruch 2, wobei erste Skalierungsfaktor auf einer Anzahl von Elementen des Eingabetensors basiert, die mit Elementen des Kern bei dem Ausführen der Faltung multipliziert werden, um ein Randelement des ersten Tensors zu erzeugen, und der zweite Skalierungsfaktor auf einer Anzahl von Elementen in dem Eingabetensor basiert, die mit Elemente des Kerns bei dem Ausführen der Faltung multipliziert werden, um ein Eckelement des ersten Tensors zu erzeugen.
  4. System nach einem der vorhergehenden Ansprüche, wobei die Operationen ferner umfassen: Neuskalieren von dem Rand benachbarten Elementen des ersten Tensors durch einen dritten Skalierungsfaktor und Neuskalieren von einer Ecke benachbarten Elementen des ersten Tensors durch einen vierten Skalierungsfaktor, um den Ausgabetensor zu erzeugen.
  5. System nach einem der vorhergehenden Ansprüche, wobei das Ausführen der Faltung des Eingabetensors und des Kerns, um den ersten Tensor zu erzeugen, umfasst: Auffüllen mit Nullen des Eingabetensors, um einen mit Nullen aufgefüllten Eingabetensor zu erzeugen; und Ausführen einer Faltung des mit Nullen aufgefüllten Eingabetensors und des Kerns, um den ersten Tensor zu erzeugen.
  6. System nach einem der vorhergehenden Ansprüche, wobei das Ausführen der Operationen, um zu bewirken, dass jedes Element des ersten Tensors durch eine Anzahl von Elementen in dem Fenster der Poolbildungsschicht des neuronalen Netzes dividiert wird, um den initialen Ausgabetensor zu erzeugen, umfasst: Ausführen einer ersten Multiplikation jedes Elements des ersten Tensors mit einem ersten Faktor, wobei der erste Faktor ein kleinster gemeinsamer Nenner (i) einer Anzahl von Elementen eines Eingangstensors, die multipliziert sind mit Elementen eines Kerns mit einer Größe gleich dem Fenster der Mittelwert-Poolbildungsschicht des neuronalen Netzes zum Ausführen einer Faltung, um ein Eckelement eines Ausgangstensors zu erzeugen, (ii) einer Anzahl von Elementen eines Eingangstensors, die multipliziert sind mit Elementen eines Kerns mit einer Größe gleich dem Fenster der Mittelwert-Poolbildungsschicht eines neuronalen Netzes zum Ausführen einer Faltung, um ein Randelement eines Ausgangstensors zu erzeugen, und (iii) der Anzahl von Elementen in dem Fenster der Mittelwert-Poolbildungsschicht des neuronalen Netzes, und Ausführen einer zweiten Multiplikation jedes Elements des ersten Tensors mit einem oder mehreren zweiten Faktoren, wobei jeder zweite Faktor auf einer Anzahl von Elementen in dem Eingangstensor basiert, die multipliziert sind mit Elementen des Kerns zum Ausführen der ersten Faltung, um das jeweilige Element des ersten Tensors zu erzeugen.
  7. System nach Anspruch 6, wobei Elemente eines Ergebnisses des Ausführens der ersten Multiplikation eine höhere Bitauflösung als eine Bitauflösung der Elemente des ersten Tensors aufweisen.
  8. System nach einem der vorhergehenden Ansprüche, wobei das Ausführen der Operationen, um zu bewirken, dass jedes Element des ersten Tensors durch eine Anzahl von Elementen in dem Fenster der Mittelwert-Poolbildungsschicht des neuronalen Netzes dividiert wird, um den initialen Ausgabetensor zu erzeugen, umfasst: Erzeugen eines Maskierungstensors, wobei eine Größe des Maskierungstensors durch eine Größe des Eingabetensors bestimmt wird und wobei Elemente des Maskierungstensors durch eine Größe des Fensters der Mittelwert-Poolbildungsschicht des neuronalen Netzes bestimmt werden; und Ausführen von elementweiser Multiplikation jedes Elements des ersten Tensors und jedes entsprechenden Elements des Maskierungstensors.
  9. System nach Anspruch 8, wobei das Erzeugen des Maskierungstensors Kacheln eines oder mehrerer Maskierungstensorfragmente, die in dem Speicher gespeichert sind, umfasst.
  10. System nach Anspruch 8, wobei der Eingabetensor in einem Einheitspuffer der Hardware-Schaltung gespeichert ist und der Maskierungstensor in einem dynamischen Speicher der Hardware-Schaltung gespeichert ist, und wobei das Ausführen der Operationen, um zu bewirken, dass jedes Element des ersten Tensors durch eine Anzahl von Elementen in dem Fenster der Mittelwert-Poolbildungsschicht des neuronalen Netzes dividiert wird, um den initialen Ausgabetensor zu erzeugen, umfasst: Senden des Eingabetensors aus dem Einheitspuffer zu einer Matrixberechnungseinheit der Hardware-Schaltung, die in Hardware implementiert ist; Senden des Maskierungstensors aus dem dynamischen Speicher zu der Matrixberechnungseinheit der Hardware-Schaltung; und Ausführen durch die Matrixberechnungseinheit der Hardware-Schaltung von elementweiser Multiplikation des Eingabetensors und des Maskierungstensors, um den ersten Tensor zu erzeugen.
  11. System nach einem der vorhergehenden Ansprüche, wobei der Eingabetensor in einem Einheitspuffer der Hardware-Schaltung gespeichert ist und der Kern in einem dynamischen Speicher der Hardware-Schaltung gespeichert ist, und wobei das Ausführen der Faltung des Eingabetensors und des Kerns, um den ersten Tensor zu erzeugen, umfasst: Senden des Eingabetensors aus dem Einheitspuffer zu einer Matrixberechnungseinheit der Hardware-Schaltung, die in Hardware implementiert ist; Senden des Kerns aus dem dynamischen Speicher zu der Matrixberechnungseinheit der Hardware-Schaltung; und Ausführen durch die Matrixberechnungseinheit der Hardware-Schaltung der Faltung des Eingabetensors und des Kerns, um den ersten Tensor zu erzeugen.
  12. System nach einem der vorhergehenden Ansprüche, wobei das Ausführen der Faltung und das Ausführen der Operationen, um zu bewirken, dass jedes Element des ersten Tensors dividiert wird, werden als Festkommaoperationen auf Werten, die in Ganzzahlregistern gespeichert sind, ausgeführt werden.
DE202017105528.0U 2016-12-13 2017-09-12 Ausführen von Mittelwert-Poolbildung in Hardware Active DE202017105528U1 (de)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US15/377,196 US10032110B2 (en) 2016-12-13 2016-12-13 Performing average pooling in hardware
US15/377,196 2016-12-13
US15/467,294 2017-03-23
US15/467,294 US10037490B2 (en) 2016-12-13 2017-03-23 Performing average pooling in hardware

Publications (1)

Publication Number Publication Date
DE202017105528U1 true DE202017105528U1 (de) 2017-12-18

Family

ID=59746363

Family Applications (2)

Application Number Title Priority Date Filing Date
DE202017105528.0U Active DE202017105528U1 (de) 2016-12-13 2017-09-12 Ausführen von Mittelwert-Poolbildung in Hardware
DE102017121257.4A Pending DE102017121257A1 (de) 2016-12-13 2017-09-13 Ausführen von Mittelwert-Poolbildung in Hardware

Family Applications After (1)

Application Number Title Priority Date Filing Date
DE102017121257.4A Pending DE102017121257A1 (de) 2016-12-13 2017-09-13 Ausführen von Mittelwert-Poolbildung in Hardware

Country Status (12)

Country Link
US (3) US10037490B2 (de)
EP (2) EP3555814B1 (de)
JP (1) JP6900487B2 (de)
KR (2) KR102370563B1 (de)
CN (2) CN108615072B (de)
DE (2) DE202017105528U1 (de)
DK (1) DK3555814T3 (de)
FI (1) FI3555814T3 (de)
GB (1) GB2557703B (de)
IE (3) IE20180231A1 (de)
SG (2) SG10201805259XA (de)
WO (1) WO2018111357A1 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11449739B2 (en) * 2019-08-22 2022-09-20 Google Llc General padding support for convolution on systolic arrays

Families Citing this family (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10360163B2 (en) 2016-10-27 2019-07-23 Google Llc Exploiting input data sparsity in neural network compute units
US9959498B1 (en) 2016-10-27 2018-05-01 Google Llc Neural network instruction set architecture
US10175980B2 (en) 2016-10-27 2019-01-08 Google Llc Neural network compute tile
US10037490B2 (en) 2016-12-13 2018-07-31 Google Llc Performing average pooling in hardware
EP3596660A1 (de) * 2017-03-24 2020-01-22 Huawei Technologies Co., Ltd. Vorrichtung und verfahren zur verarbeitung der daten eines neuronalen netzes
US11551067B2 (en) * 2017-04-06 2023-01-10 Shanghai Cambricon Information Technology Co., Ltd Neural network processor and neural network computation method
US10795836B2 (en) * 2017-04-17 2020-10-06 Microsoft Technology Licensing, Llc Data processing performance enhancement for neural networks using a virtualized data iterator
CN107146616B (zh) * 2017-06-13 2020-05-08 Oppo广东移动通信有限公司 设备控制方法及相关产品
US11328037B2 (en) * 2017-07-07 2022-05-10 Intel Corporation Memory-size- and bandwidth-efficient method for feeding systolic array matrix multipliers
US10740607B2 (en) * 2017-08-18 2020-08-11 Autel Robotics Co., Ltd. Method for determining target through intelligent following of unmanned aerial vehicle, unmanned aerial vehicle and remote control
CN107633295B (zh) * 2017-09-25 2020-04-28 南京地平线机器人技术有限公司 用于适配神经网络的参数的方法和装置
US11010666B1 (en) * 2017-10-24 2021-05-18 Tunnel Technologies Inc. Systems and methods for generation and use of tensor networks
US20190205738A1 (en) * 2018-01-04 2019-07-04 Tesla, Inc. Systems and methods for hardware-based pooling
US11494620B2 (en) 2018-02-08 2022-11-08 Western Digital Technologies, Inc. Systolic neural network engine capable of backpropagation
US11769042B2 (en) 2018-02-08 2023-09-26 Western Digital Technologies, Inc. Reconfigurable systolic neural network engine
CN110096309B (zh) * 2018-11-14 2020-04-14 上海寒武纪信息科技有限公司 运算方法、装置、计算机设备和存储介质
US11636325B2 (en) * 2018-10-24 2023-04-25 Macronix International Co., Ltd. In-memory data pooling for machine learning
CN111126558B (zh) * 2018-10-31 2024-04-02 嘉楠明芯(北京)科技有限公司 一种卷积神经网络计算加速方法及装置、设备、介质
CN111160516B (zh) * 2018-11-07 2023-09-05 杭州海康威视数字技术股份有限公司 一种深度神经网络的卷积层稀疏化方法及装置
JP7315317B2 (ja) 2018-11-09 2023-07-26 株式会社Preferred Networks プロセッサおよびプロセッサのデータ転送方法
US10963746B1 (en) * 2019-01-14 2021-03-30 Xilinx, Inc. Average pooling in a neural network
US11556764B2 (en) * 2019-03-01 2023-01-17 Microsoft Technology Licensing, Llc Deriving a concordant software neural network layer from a quantized firmware neural network layer
US10929058B2 (en) 2019-03-25 2021-02-23 Western Digital Technologies, Inc. Enhanced memory device architecture for machine learning
US11783176B2 (en) 2019-03-25 2023-10-10 Western Digital Technologies, Inc. Enhanced storage device memory architecture for machine learning
KR20200116268A (ko) * 2019-04-01 2020-10-12 에스케이하이닉스 주식회사 버퍼 메모리, 이를 이용하는 연산 장치 및 시스템
CN110059805B (zh) * 2019-04-15 2021-08-31 广州异构智能科技有限公司 用于二值阵列张量处理器的方法
CN110033085B (zh) * 2019-04-15 2021-08-31 广州异构智能科技有限公司 张量处理器
CN110046705B (zh) * 2019-04-15 2022-03-22 广州异构智能科技有限公司 用于卷积神经网络的装置
CN110188795B (zh) * 2019-04-24 2023-05-09 华为技术有限公司 图像分类方法、数据处理方法和装置
US11593637B2 (en) 2019-04-30 2023-02-28 Samsung Electronics Co., Ltd. Convolution streaming engine for deep neural networks
KR20210014902A (ko) 2019-07-31 2021-02-10 삼성전자주식회사 프로세서 및 그 제어 방법
US20210103803A1 (en) * 2019-10-08 2021-04-08 Apple Inc. Multi-Mode Planar Engine For Neural Processor
CN112766471B (zh) * 2019-11-01 2024-03-29 中科寒武纪科技股份有限公司 运算装置及相关产品
US11513799B2 (en) * 2019-11-04 2022-11-29 Apple Inc. Chained buffers in neural network processor
CN111191780B (zh) * 2020-01-03 2024-03-19 珠海亿智电子科技有限公司 均值池化累加电路、装置以及方法
US11630991B2 (en) 2020-02-04 2023-04-18 Apple Inc. Broadcasting mode of planar engine for neural processor
KR20210126398A (ko) * 2020-04-10 2021-10-20 에스케이하이닉스 주식회사 시스톨릭 어레이를 갖는 신경망 연산 장치
US11507817B2 (en) 2020-04-17 2022-11-22 Samsung Electronics Co., Ltd. System and method for performing computations for deep neural networks
KR20210156554A (ko) * 2020-06-18 2021-12-27 삼성전자주식회사 텐서 처리 방법, 가속기 및 이를 포함한 전자 장치
KR20220001821A (ko) * 2020-06-30 2022-01-06 삼성전자주식회사 텐서 처리 방법, 가속기 및 이를 포함한 가속기 시스템
JP2022018997A (ja) * 2020-07-17 2022-01-27 ソニーセミコンダクタソリューションズ株式会社 固体撮像素子、撮像装置、および、情報処理システム
GB2604142B (en) * 2021-02-25 2023-02-22 Imagination Tech Ltd Implementation of softmax and exponential in hardware
US11797270B2 (en) * 2021-06-17 2023-10-24 International Business Machines Corporation Single function to perform multiple operations with distinct operation parameter validation
KR102361249B1 (ko) * 2021-08-02 2022-02-14 오픈엣지테크놀로지 주식회사 브로드캐스팅 멀티플라이 최적화 방법 및 이를 이용한 하드웨어 가속기, 이를 이용한 컴퓨팅 장치
US11657864B1 (en) * 2021-12-17 2023-05-23 Winbond Electronics Corp. In-memory computing apparatus and computing method having a memory array includes a shifted weight storage, shift information storage and shift restoration circuit to restore a weigh shifted amount of shifted sum-of-products to generate multiple restored sum-of-products

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016186811A1 (en) 2015-05-21 2016-11-24 Google Inc. Computing convolutions using a neural network processor

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US1003749A (en) 1910-04-05 1911-09-19 Gustav Jaennert Razor.
US1003211A (en) 1910-04-11 1911-09-12 William S Levings Valve-locking device.
JP3373874B2 (ja) * 1992-11-24 2003-02-04 株式会社リコー 画像処理装置
US6389441B1 (en) 1999-05-28 2002-05-14 Eastman Kodak Company Two dimensional moving average filter
JP4573769B2 (ja) 2005-12-20 2010-11-04 富士通セミコンダクター株式会社 画像処理回路および画像処理方法
GB2436377B (en) 2006-03-23 2011-02-23 Cambridge Display Tech Ltd Data processing hardware
KR100793285B1 (ko) 2007-05-11 2008-01-10 주식회사 코아로직 필터 매트릭스에 의한 영상 노이즈 제거 시스템, 방법 및그 기록매체
JP2009230494A (ja) 2008-03-24 2009-10-08 Nec Corp Fpgaを用いた並列周辺画素加算モジュール、その方法及びそのプログラム
US8133287B2 (en) * 2010-08-04 2012-03-13 Tesla Motors, Inc. Method of controlled cell-level fusing within a battery pack
US10078620B2 (en) 2011-05-27 2018-09-18 New York University Runtime reconfigurable dataflow processor with multi-port memory access module
US8886533B2 (en) 2011-10-25 2014-11-11 At&T Intellectual Property I, L.P. System and method for combining frame and segment level processing, via temporal pooling, for phonetic classification
JP5935435B2 (ja) 2012-03-26 2016-06-15 富士通株式会社 画像処理装置、画像処理方法
WO2014055874A1 (en) 2012-10-05 2014-04-10 Raytheon BBN Technologies, Corp. Fast computation of kernel descriptors
US20150104102A1 (en) 2013-10-11 2015-04-16 Universidade De Coimbra Semantic segmentation method with second-order pooling
US9978014B2 (en) * 2013-12-18 2018-05-22 Intel Corporation Reconfigurable processing unit
US9424492B2 (en) 2013-12-27 2016-08-23 Xerox Corporation Weighting scheme for pooling image descriptors
CN106796647B (zh) 2014-09-05 2018-09-14 北京市商汤科技开发有限公司 场景文本检测系统和方法
US10192162B2 (en) * 2015-05-21 2019-01-29 Google Llc Vector computation unit in a neural network processor
US9805303B2 (en) * 2015-05-21 2017-10-31 Google Inc. Rotating data for neural network computations
US10083395B2 (en) 2015-05-21 2018-09-25 Google Llc Batch processing in a neural network processor
US9747546B2 (en) 2015-05-21 2017-08-29 Google Inc. Neural network processor
US20160358069A1 (en) * 2015-06-03 2016-12-08 Samsung Electronics Co., Ltd. Neural network suppression
US9792492B2 (en) * 2015-07-07 2017-10-17 Xerox Corporation Extracting gradient features from neural networks
JP2017068608A (ja) * 2015-09-30 2017-04-06 株式会社東芝 演算装置、方法及びプログラム
US10353860B2 (en) * 2015-10-08 2019-07-16 Via Alliance Semiconductor Co., Ltd. Neural network unit with neural processing units dynamically configurable to process multiple data sizes
US10228911B2 (en) * 2015-10-08 2019-03-12 Via Alliance Semiconductor Co., Ltd. Apparatus employing user-specified binary point fixed point arithmetic
JP6750203B2 (ja) * 2015-10-20 2020-09-02 富士通株式会社 畳み込みニューラルネットワークの演算方法及び演算プログラム、情報処理装置
US9904874B2 (en) * 2015-11-05 2018-02-27 Microsoft Technology Licensing, Llc Hardware-efficient deep convolutional neural networks
CN105488656A (zh) 2015-11-20 2016-04-13 贵州电网有限责任公司遵义供电局 一种电网分县局继电保护管理系统功能模块动态配置技术
US10552119B2 (en) * 2016-04-29 2020-02-04 Intel Corporation Dynamic management of numerical representation in a distributed matrix processor architecture
US10037490B2 (en) 2016-12-13 2018-07-31 Google Llc Performing average pooling in hardware

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016186811A1 (en) 2015-05-21 2016-11-24 Google Inc. Computing convolutions using a neural network processor

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11449739B2 (en) * 2019-08-22 2022-09-20 Google Llc General padding support for convolution on systolic arrays
US11763142B2 (en) 2019-08-22 2023-09-19 Google Llc General padding support for convolution on systolic arrays

Also Published As

Publication number Publication date
FI3555814T3 (fi) 2024-03-18
KR102370563B1 (ko) 2022-03-03
CN114239797A (zh) 2022-03-25
KR102315346B1 (ko) 2021-10-19
IE20180231A1 (en) 2018-10-17
KR20210127813A (ko) 2021-10-22
US11232351B2 (en) 2022-01-25
US10679127B2 (en) 2020-06-09
IE20190119A1 (en) 2020-09-30
GB2557703B (en) 2021-03-31
EP4369255A1 (de) 2024-05-15
GB2557703A (en) 2018-06-27
EP3555814A1 (de) 2019-10-23
JP6900487B2 (ja) 2021-07-07
SG10201805259XA (en) 2018-07-30
SG10201707701PA (en) 2018-07-30
EP3555814B1 (de) 2023-12-27
GB201715180D0 (en) 2017-11-01
US20180165577A1 (en) 2018-06-14
DE102017121257A1 (de) 2018-06-14
JP2020506454A (ja) 2020-02-27
KR20190089204A (ko) 2019-07-30
US10037490B2 (en) 2018-07-31
WO2018111357A1 (en) 2018-06-21
IE20170187A1 (en) 2018-06-27
CN108615072A (zh) 2018-10-02
CN108615072B (zh) 2021-12-07
US20190354863A1 (en) 2019-11-21
US20180300628A1 (en) 2018-10-18
DK3555814T3 (da) 2024-03-18

Similar Documents

Publication Publication Date Title
DE202017105528U1 (de) Ausführen von Mittelwert-Poolbildung in Hardware
DE102017121887A1 (de) Ausführen von Kerndurchschreiten in Hardware
DE102018105457A1 (de) Transponieren von Matrizen neuronaler Netze in Hardware
DE112016002296T5 (de) Vektor-recheneinheit in einem neuronalen netzwerkprozessor
DE102018105198A1 (de) Tiefenverkettung unter Verwendung einer Matrixberechnungseinheit
DE202016107436U1 (de) Neuronaler Netzwerkprozessor
DE202017104127U1 (de) Superpixel für faltende neuronale Netze
DE102020105535A1 (de) Neuronale Netzwerkvorrichtung und Verfahren zum Quantisieren von Parametern eines neuronalen Netzwerks
DE112016002298T5 (de) Vorabruf von gewichten zur verwendung in einem neuronalen netzwerkprozessor
DE102017125049A1 (de) Transponieren in einem Matrix-Vektor-Prozessor
DE112016002292T5 (de) Stapel-verarbeitung in einem neuronalen netzwerkprozessor
DE112019000336T5 (de) Massiv parallele neuronale inferenz-datenverarbeitungselemente
DE102017113232A1 (de) Tensorverarbeitung unter verwendung eines formats mit geringer genauigkeit
DE102018130084A1 (de) Dynamische Quantisierung neuronaler Netzwerke
DE202016008658U1 (de) Bildklassifikationsneuronalnetze
DE102018100239A1 (de) Schleifen- und Bibliotheksfusion
DE112020003128T5 (de) Dilatierte faltung mit systolischem array
DE112019000676T5 (de) Zentraler scheduler und anweisungszuteiler für einen neuronalen inferenzprozessor
DE102019126719A1 (de) Energieeffiziente Speichersysteme und Verfahren
DE112020007010T5 (de) Inferenzmaschinen-schaltungsarchitektur
DE102021200012A1 (de) Optimierte quantisierung für neuronale netze mit verringerter auflösung
DE102022103358A1 (de) Training für maschinelles lernen im logarithmischen zahlensystem
DE102017117381A1 (de) Beschleuniger für dünnbesetzte faltende neuronale Netze
DE102014225039A1 (de) Verfahren und Vorrichtung zum Bereitstellen von spärlichen Gauß-Prozess-Modellen zur Berechnung in einem Motorsteuergerät
DE102019113874A1 (de) Hochpräzises niedrigbit-convolutional-neural-network

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: BETTEN & RESCH PATENT- UND RECHTSANWAELTE PART, DE

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