DE202018101330U1 - Transportieren von Matrizen neuronaler Netze in Hardware - Google Patents

Transportieren von Matrizen neuronaler Netze in Hardware Download PDF

Info

Publication number
DE202018101330U1
DE202018101330U1 DE202018101330.0U DE202018101330U DE202018101330U1 DE 202018101330 U1 DE202018101330 U1 DE 202018101330U1 DE 202018101330 U DE202018101330 U DE 202018101330U DE 202018101330 U1 DE202018101330 U1 DE 202018101330U1
Authority
DE
Germany
Prior art keywords
matrix
neural network
current
operations
neural net
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
DE202018101330.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
Application filed by Google LLC filed Critical Google LLC
Publication of DE202018101330U1 publication Critical patent/DE202018101330U1/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/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • G06F7/78Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data for changing the order of data flow, e.g. matrix transposition or LIFO buffers; Overflow or underflow handling therefor
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/48Indexing scheme relating to groups G06F7/48 - G06F7/575
    • G06F2207/4802Special implementations
    • G06F2207/4818Threshold devices
    • G06F2207/4824Neural networks
    • 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/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Physics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • Software Systems (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Artificial Intelligence (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Neurology (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Complex Calculations (AREA)

Abstract

System, das einen oder mehrere Computer und eine oder mehrere Speichervorrichtungen, die Befehle speichern, die, wenn sie von dem einen oder den mehreren Computern ausgeführt werden, betreibbar sind, um zu veranlassen, dass der eine oder die mehreren Computer Operationen ausführen, die umfassen:Empfangen einer Anforderung, Berechnungen für ein neuronales Netz auf einer Hardwareschaltung mit einer Matrizenrechnungseinheit durchzuführen, wobei die Anforderung eine Transponieroperation spezifiziert, die an einer ersten Neuronalnetz-Matrix, die dem neuronalen Netz zugeordnet ist, durchgeführt werden soll; undErzeugen von Befehlen, die bei Ausführung durch die Hardwareschaltung veranlassen, dass die Hardwareschaltung die erste Neuronalnetz-Matrix durch Ausführen erster Operationen transponiert, wobei die ersten Operationen ein wiederholtes Durchführen der folgenden zweiten Operationen umfassen:für eine aktuelle Unterteilung der ersten Neuronalnetz-Matrix, die die erste Neuronalnetz-Matrix in eine oder mehrere aktuelle Untermatrizen unterteilt:Aktualisieren der ersten Neuronalnetz-Matrix durch Vertauschen eines oberen rechten Quadranten und eines unteren linken Quadranten jeder aktuellen Untermatrix in der aktuellen Unterteilung unter Verwendung der Matrizenrechnungseinheit, undUnterteilen jeder aktuellen Untermatrix in der aktuellen Unterteilung in jeweilige mehrere neue Untermatrizen, um die aktuelle Unterteilung zu aktualisieren, wobei jede der jeweiligen mehreren neuen Untermatrizen ein jeweiliger Quadrant der aktuellen Untermatrix ist.

Description

  • Hintergrund
  • Diese Anmeldung bezieht sich auf das Transponieren von Matrizen neuronaler Netze in Hardware.
  • Neuronale Netze sind Maschinenlernmodelle, die eine oder mehrere Schichten verwenden, um eine Ausgabe, z. B. eine Klassifizierung, für eine empfangene Eingabe zu erzeugen. Einige neuronale Netze enthalten zusätzlich zu einer Ausgabeschicht eine oder mehrere verborgene Schichten. Die Ausgabe jeder verborgenen Schicht wird als Eingabe für eine weitere Schicht in dem Netz, z. B. die nächste verborgene Schicht oder die Ausgabeschicht des Netzes, verwendet. Jede Schicht des Netzes erzeugt in Übereinstimmung mit aktuellen Werten eines jeweiligen Satzes von Parametern eine Ausgabe aus einer empfangenen Eingabe.
  • Als Gebrauchsmuster und Gegenstand des Gebrauchsmusters sollen gemäß den Anforderungen des Gebrauchsmustergesetzes nur Vorrichtungen, wie sie in den beigefügten Ansprüchen definiert sind, aber keine Verfahren geschützt werden. Wenn in der Anmeldung auf Verfahren Bezug genommen wird, dienen diese Bezugnahmen lediglich zur Veranschaulichung der Vorrichtung oder Vorrichtungen, für die mit den beigefügten Ansprüchen Schutz angestrebt wird
  • Zusammenfassung
  • Im Allgemeinen beschreibt diese Anmeldung eine spezielle Hardwareschaltung, die Inferenzen neuronaler Netze berechnet.
  • Ein erfinderischer Aspekt des in dieser Anmeldung beschriebenen Gegenstands kann in Verfahren verkörpert sein, die die folgenden Aktionen umfassen: Empfangen einer Anforderung, Berechnungen für ein neuronales Netz auf einer Hardwareschaltung mit einer Matrizenrechnungseinheit durchzuführen, wobei die Anforderung eine Transponieroperation spezifiziert, die an einer ersten Neuronalnetz-Matrix, die dem neuronalen Netz zugeordnet ist, durchgeführt werden soll; und Erzeugen von Befehlen, die bei Ausführung durch die Hardwareschaltung veranlassen, dass die Hardwareschaltung die erste Neuronalnetz-Matrix durch Ausführen erster Operationen transponiert, wobei die ersten Operationen ein wiederholtes Durchführen der folgenden zweiten Operationen umfassen: für eine aktuelle Unterteilung der ersten Neuronalnetz-Matrix, die die erste Neuronalnetz-Matrix in eine oder mehrere aktuelle Untermatrizen unterteilt, Aktualisieren der ersten Neuronalnetz-Matrix durch Vertauschen eines oberen rechten Quadranten und eines unteren linken Quadranten jeder aktuellen Untermatrix in der aktuellen Unterteilung unter Verwendung der Matrizenrechnungseinheit, und Unterteilen jeder aktuellen Untermatrix in der aktuellen Unterteilung in jeweilige mehrere neue Untermatrizen, um die aktuelle Unterteilung zu aktualisieren, wobei jede der jeweiligen mehreren neuen Untermatrizen ein jeweiliger Quadrant der aktuellen Untermatrix ist.
  • Andere Ausführungsformen dieses Aspekts umfassen entsprechende Computersysteme, Vorrichtungen und auf einer oder mehreren Computerspeichervorrichtungen aufgezeichnete Computerprogramme, die jeweils dazu ausgelegt sind, die Aktionen der Verfahren auszuführen. Ein System von einem oder mehreren Computern kann dazu ausgelegt sein, bestimmte Operationen oder Aktionen mit Hilfe von Software, Firmware, Hardware oder einer beliebigen Kombination davon, die in dem System installiert ist, auszuführen, die im Betrieb veranlassen können, dass das System die Aktionen ausführt. Ein oder mehrere Computerprogramme können dazu ausgelegt sein, bestimmte Operationen oder Aktionen auszuführen, indem sie Befehle enthalten, die, wenn sie von einer Datenverarbeitungsvorrichtung ausgeführt werden, veranlassen, dass die Vorrichtung die Aktionen ausführt.
  • Die Ausführungsformen dieses Aspekts können eines oder mehrere der folgenden optionalen Merkmale umfassen. In einigen Implementierungen umfassen die ersten Operationen: Bestimmen, dass die erste Neuronalnetz-Matrix keine i x i-Matrix ist, wobei i ein Vektorlängenwert für die Hardwareschaltung ist; als Antwort darauf, Aktualisieren der ersten Neuronalnetz-Matrix, um durch Auffüllen der ersten Neuronalnetz-Matrix mit Nullen eine i x i-Matrix zu erzeugen, bevor alle Iterationen der zweiten Operationen ausgeführt werden; und nach dem Durchführen aller Iterationen der zweiten Operationen, Konvertieren der ersten Neuronalnetz-Matrix in ihren Zustand vor der Aktualisierung durch Entfernen der während der Aktualisierung aufgefüllten Nullen. In einigen Implementierungen umfassen die ersten Operationen ferner: Erhalten von Daten, die angeben, dass ein oder mehrere Werte der ersten Neuronalnetz-Matrix Nullwerte sind; und das Aktualisieren der ersten Neuronalnetz-Matrix umfasst ein Verhindern, dass die Matrizenrechnungseinheit irgendeine Operation an einer Menge von Werten ausführt, der mindestens einen der Werte der ersten Neuronalnetz-Matrix enthält, die Nullwerte sind. In einigen Implementierungen umfasst das Vertauschen des oberen rechten Quadranten der aktuellen Untermatrix und des unteren linken Quadranten jeder aktuellen Untermatrix ein Multiplizieren jeder Zeile der ersten Neuronalnetz-Matrix mit einer oder mehreren partiellen Einheitsmatrizen, um einen oder mehrere Vektoren, die jeweils einen Abschnitt der jeweiligen Zeile enthalten, zu erzeugen, bei denen die Elemente des oberen rechten Quadranten und des unteren linken Quadranten jeder jeweiligen aktuellen Untermatrix vertauscht sind; für jede Zeile der ersten Neuronalnetz-Matrix, Kombinieren der Vektoren, die einem Abschnitt der jeweiligen Zeile der ersten Neuronalnetz-Matrix entsprechen und bei denen die Elemente des oberen rechten Quadranten und des unteren linken Quadranten jeder jeweiligen aktuellen Untermatrix vertauscht sind; und Erzeugen der aktualisierten ersten Neuronalnetz-Matrix durch Kombinieren jeder jeweiligen Zeile. In einigen Implementierungen führt die Matrizenrechnungseinheit eine Matrixmultiplikationsoperation als eine Reihe von Vektormultiplikationsoperationen aus. In einigen Implementierungen umfassen die zweiten Operationen ferner: Erzeugen einer anfänglichen aktuellen Unterteilung der ersten Neuronalnetz-Matrix, wobei die anfängliche aktuelle Unterteilung eine anfängliche Untermatrix enthält, die die erste Neuronalnetz-Matrix ist. In einigen Implementierungen umfassen die ersten Operationen ferner: Übertragen der Befehle an die Hardwareschaltung.
  • Bestimmte Ausführungsformen des in dieser Anmeldung beschriebenen Gegenstands können so implementiert werden, dass sie einen oder mehrere der folgenden Vorteile verwirklichen. Eine Transponieroperation an einer Matrix kann in Hardware durch eine Spezial-Hardwareschaltung selbst dann durchgeführt werden, wenn die Hardwareschaltung eine Matrixtransponieroperation nicht direkt durchführen kann. Durch Durchführen der Transponieroperation unter Verwendung der Spezial-Hardwareschaltung kann die Verarbeitung einer Neuronalnetz-Operation oder einer anderen Operation, die eine Transponieroperation spezifiziert, durchgeführt werden, ohne Daten an einen Hostcomputer zurückzuleiten, d. h. ohne zumindest einen Teil der Berechnung außerhalb des Chips durchzuführen, obwohl die Spezial-Hardwareschaltung diese Verarbeitung nicht direkt unterstützt. Dies ermöglicht ein Durchführen einer Transponieroperation an einer Matrix, ohne die Hardwarearchitektur der Spezial-Hardwareschaltung zu modifizieren. Das heißt, Verarbeitungsverzögerungen, die sich aus dem Durchführen eines Teils der Verarbeitung außerhalb des Chips, in Software oder beidem ergeben, werden vermieden.
  • Die Einzelheiten einer oder mehrerer Ausführungsformen des Gegenstands dieser Anmeldung sind in den beigefügten Zeichnungen und der nachfolgenden Beschreibung dargelegt. Andere Merkmale, Aspekte und Vorteile des Gegenstandes werden aus der Beschreibung, den Zeichnungen und den Ansprüchen ersichtlich
  • Figurenliste
    • 1 zeigt ein beispielhaftes Verarbeitungssystem für neuronale Netze.
    • 2 ist ein Ablaufdiagramm eines beispielhaften Verfahrens zum Durchführen einer Berechnung für eine gegebene Schicht eines neuronalen Netzes.
    • 3 zeigt ein beispielhaftes Verarbeitungssystem für neuronale Netze.
    • 4 zeigt eine beispielhafte Architektur, die eine Matrizenrechnungseinheit umfasst.
    • 5 zeigt eine beispielhafte Architektur einer Zelle innerhalb einer systolischen Anordnung.
    • 6 zeigt eine beispielhafte Architektur einer Vektorrechnungseinheit.
    • 7 ist ein Ablaufdiagramm eines beispielhaften Prozesses zum Implementieren eines neuronalen Netzes, das eine Transponieroperation an einer Matrix spezifiziert.
    • 8 ist ein Ablaufdiagramm eines beispielhaften Prozesses zum Vertauschen des oberen rechten und unteren linken Quadranten einer Untermatrix unter Verwendung einer Matrizenrechnungseinheit.
    • 9 ist ein Beispiel einer Berechnung zum Durchführen einer Transponieroperation an einer Neuronalnetz-Matrix.
  • Gleiche Bezugsziffern und Bezeichnungen geben in den verschiedenen Zeichnungen auf gleiche Elemente an.
  • Genaue Beschreibung
  • Ein neuronales Netz mit mehreren Schichten kann verwendet werden, um Inferenzen zu berechnen. Zum Beispiel kann das neuronale Netz bei einer Eingabe eine Inferenz für die Eingabe berechnen. Das neuronale Netz berechnet diese Inferenz durch Verarbeiten der Eingabe durch jede der Schichten des neuronalen Netzes. Jede Schicht empfängt eine Eingabe und verarbeitet die Eingabe gemäß des Satzes von Gewichtungen für die Schicht, um eine Ausgabe zu erzeugen.
  • Um eine Inferenz aus einer empfangenen Eingabe zu berechnen, empfängt das neuronale Netz daher die Eingabe und verarbeitet sie durch jede der Schichten des neuronalen Netzes, um die Inferenz zu erzeugen, wobei die Ausgabe von einer Schicht des neuronalen Netzes als Eingabe für die nächste Schicht des neuronalen Netzes bereitgestellt wird. Dateneingaben in eine Schicht des neuronalen Netzes, z. B. entweder die Eingabe in das neuronale Netz oder die Ausgaben der Schicht unterhalb der Schicht in der Sequenz, können als Aktivierungseingaben in die Schicht bezeichnet werden.
  • In einigen Implementierungen sind die Schichten des neuronalen Netzes in einer Sequenz angeordnet. In einigen anderen Implementierungen sind die Schichten als gerichteter Graph angeordnet. Das heißt, jede bestimmte 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 an eine vorherige Schicht zurückgesendet werden kann.
  • 1 zeigt ein beispielhaftes Verarbeitungssystem für neuronale Netze 100. Das Verarbeitungssystem für neuronale Netze 100 ist ein Beispiel eines Systems, das als ein oder mehrere Computer an einer oder mehreren Standorten implementiert ist, auf denen die unten beschriebenen Systeme, Komponenten und Techniken implementiert werden können.
  • Das Verarbeitungssystem für neuronale Netze 100 ist ein System, das Neuronalnetzberechnungen unter Verwendung einer Spezial-Hardwareschaltung 110 durchführt. Die Hardwareschaltung 110 ist eine integrierte Schaltung zum Durchführen von Neuronalnetzberechnungen und umfasst eine Matrizenrechnungseinheit 120, die Vektor-Matrix-Multiplikationen in Hardware durchführt. Eine beispielhafte Spezial-Hardwareschaltung 120 ist im Folgenden unter Bezugnahme auf 4 ausführlicher beschrieben.
  • Insbesondere empfängt das Verarbeitungssystem für neuronale Netze 100 Anforderungen, neuronale Netze in der Spezial-Hardwareschaltung 110 zu implementieren, implementiert die neuronalen Netze in der Spezial-Hardwareschaltung 110 und verarbeitet, sobald ein gegebenes neuronales Netz implementiert ist, Eingaben in das neuronale Netz unter Verwendung der speziellen integrierten Schaltung 110, um Neuronalnetz-Inferenzen zu erzeugen.
  • Das heißt, das Verarbeitungssystem für neuronale Netze 100 kann eine Anforderung empfangen, die eine Neuronalnetz-Architektur für ein neuronales Netz spezifiziert, das verwendet werden soll, um Eingaben zu verarbeiten. Die Neuronalnetz-Architektur definiert die Anzahl und Konfiguration von Schichten in dem neuronalen Netz und Werte der Parameter für jede der Schichten, die Parameter aufweisen.
  • Um ein neuronales Netz auf der speziellen integrierten Schaltung 110 zu implementieren, umfasst das Verarbeitungssystem für neuronale Netze 100 eine Maschine zur Implementierung von neuronalen Netzen 150, die als eines oder mehrere Computerprogramme auf einem oder mehreren Computern an einem oder mehreren physischen Standorten implementiert ist.
  • Die Maschine zur Implementierung von neuronalen Netzen 150 erzeugt Befehle, die, wenn sie von der Spezial-Hardwareschaltung 110 ausgeführt werden, die Hardwareschaltung 110 dazu veranlassen, die durch das neuronale Netz spezifizierten Operationen auszuführen, um eine Neuronalnetz-Ausgabe aus einer empfangenen Neuronalnetz-Eingabe zu erzeugen.
  • Sobald die Befehle durch die Maschine zur Implementierung von neuronalen Netzen 150 erzeugt und an die Hardwareschaltung 110 geliefert wurden, kann das Verarbeitungssystem für neuronale Netze 100 Neuronalnetz-Eingaben empfangen und kann die Neuronalnetz-Eingaben unter Verwendung des neuronalen Netzes verarbeiten, indem es die Hardwareschaltung 110 dazu veranlasst, die erzeugten Befehle auszuführen.
  • Einige neuronale Netze spezifizieren eine Transponieroperation auf einer Neuronalnetz-Matrix, z. B. einer Neuronalnetz-Matrix, die die Gewichtungswerte für eine Schicht des neuronalen Netzes enthält. Zum Beispiel können einige neuronale Netze eine Transponieroperation an Matrizen spezifizieren, die in ihren ersten Spalten dichtbesetzter sind (d. h. mehr bedeutungsvolle Werte haben) als in nachfolgenden Spalten, um die Verarbeitung der bedeutungsvollen Werte solcher Matrizen zu beschleunigen. Einige Trainingsalgorithmen für neuronale Netze können das Transponieren von Neuronalnetz-Matrizen erfordern (z. B. während der Rückpropagierung). Einige neuronale Netze erfordern möglicherweise eine Transponierung von Matrizen als Teil eines Übergangs von Faltungsschichten zu vollständig verbundenen Schichten oder umgekehrt.
  • Die Haupthardwareeinheit, die Matrixoperationen auf der Hardwareschaltung 110 durchführt, ist die Matrizenrechnungseinheit 120, die Matrixtransponieroperationen nicht direkt durchführen kann. Aufgrund dessen kann die integrierte Schaltung eine Transponieroperation an einer Matrix nicht direkt durchführen. Um ein neuronales Netz zu implementieren, das eine Transponieroperation an einer Matrix spezifiziert, erzeugt die Maschine zur Implementierung von neuronalen Netzen 150 Befehle, die, wenn sie von der Spezial-Hardwareschaltung 110 während der Verarbeitung einer Neuronalnetz-Eingabe durch das neuronale Netz ausgeführt werden, veranlassen, dass die Hardwareschaltung 110 eine Matrixtransponieroperation an einer Matrix unter Verwendung der Matrizenrechnungseinheit 120 und der Vektorrechnungseinheit 140 durchführt. Diese Befehle und andere Operationen sind nachstehend unter Bezugnahme auf 6-9 genauer beschrieben.
  • 2 ist ein Ablaufdiagramm eines beispielhaften Prozesses 200 zum Durchführen einer Berechnung für eine gegebene Schicht eines neuronalen Netzes unter Verwendung einer Spezial-Hardwareschaltung. Der Einfachheit halber wird das Verfahren 200 in Bezug auf ein System beschrieben, das eine oder mehrere Schaltungen aufweist, die das Verfahren 200 durchführen. Das Verfahren 200 kann für jede Schicht des neuronalen Netzes durchgeführt werden, um eine Inferenz aus einer empfangenen Eingabe zu berechnen.
  • Das System empfängt Mengen von Gewichtungseingaben (Schritt 202) und Mengen von Aktivierungseingaben (Schritt 204) für die gegebene Schicht. Die Mengen von Gewichtungseingaben und die Mengen von Aktivierungseingaben können von einem dynamischen Speicher bzw. einem vereinheitlichten Puffer der Spezial-Hardwareschaltung empfangen werden. In einigen Implementierungen können sowohl die Mengen von Gewichtungseingaben als auch die Mengen von Aktivierungseingaben aus dem vereinheitlichten Puffer empfangen werden.
  • Das System erzeugt kumulierte Werte aus den Gewichtungseingaben und den Aktivierungseingaben unter Verwendung einer Matrixmultiplikationseinheit der Spezial-Hardwareschaltung (Schritt 206). In einigen Implementierungen sind die kumulierten Werte Skalarprodukte der Mengen von Gewichtungseingaben und der Mengen von Aktivierungseingaben. Das heißt, für eine Menge von Gewichtungen, der eine Teilmenge aller Gewichtungen in der Schicht ist, kann das System jede Gewichtungseingabe mit jeder Aktivierungseingabe multiplizieren und die Produkte zusammenaddieren, um einen kumulierten Wert zu bilden. Das System kann dann Skalarprodukte einer anderen Menge von Gewichtungen mit anderen Mengen von Aktivierungseingaben berechnen.
  • Das System kann unter Verwendung einer Vektorrechnungseinheit der Spezial-Hardwareschaltung aus den Kumulationswerten eine Schichtausgabe erzeugen (Schritt 208). In einigen Implementierungen wendet die Vektorrechnungseinheit eine Aktivierungsfunktion auf die kumulierten Werte an, die weiter unten unter Bezugnahme auf 5 beschrieben ist. Die Ausgabe der Schicht kann in dem vereinheitlichten Puffer zur Verwendung als eine Eingabe in eine nachfolgende Schicht in dem neuronalen Netz gespeichert werden oder kann verwendet werden, um die Inferenz zu bestimmen. Das System beendet die Verarbeitung des neuronalen Netzes, wenn eine empfangene Eingabe durch jede Schicht des neuronalen Netzes verarbeitet wurde, um die Inferenz für die empfangene Eingabe zu erzeugen.
  • 3 zeigt eine beispielhafte Spezial-Hardwareschaltung 300 zum Durchführen von Neuronalnetz-Berechnungen. Das System 300 enthält eine Hostschnittstelle 302. Die Hostschnittstelle 302 kann Befehle empfangen, die Parameter für eine Neuronalnetz-Berechnung enthalten. Die Parameter können einen oder mehrere der folgenden umfassen: wie viele Schichten sollten verarbeitet werden, entsprechende Mengen von Gewichtungseingaben für jede Schicht des Modells, eine Anfangsmenge von Aktivierungseingaben, d. h. die Eingabe in das neuronale Netz, aus der die Inferenz berechnet werden soll, entsprechende Eingabe- und Ausgabegrößen jeder Schicht, ein Schrittwert für die Neuronalnetz-Berechnung und eine Art der zu verarbeitenden Schicht, z. B. eine Faltungsschicht oder eine vollständig verbundene Schicht.
  • Die Hostschnittstelle 302 kann die Befehle an eine Ablaufsteuerung 306 senden, die die Befehle in Steuersignale niedriger Ebene umwandelt, die die Schaltung steuern, um die Neuronalnetz-Berechnungen durchzuführen. In einigen Implementierungen regeln die Steuersignale einen Datenfluss in der Schaltung, z. B. wie die Mengen von Gewichtungseingaben und die Mengen von Aktivierungseingaben durch die Schaltung strömen. Die Ablaufsteuerung 306 kann die Steuersignale an einen vereinheitlichten Puffer 308, eine Matrizenrechnungseinheit 312 und eine Vektorrechnungseinheit 314 senden. In einigen Implementierungen sendet die Ablaufsteuerung 306 zudem Steuersignale an eine Direktspeicherzugriffsmaschine 304 und einen dynamischen Speicher 310. In einigen Implementierungen ist die Ablaufsteuerung 306 ein Prozessor, der Steuersignale erzeugt. Die Ablaufsteuerung 306 kann die Zeitvorgabe der Steuersignale verwenden, um zu geeigneten Zeiten die Steuersignale an jede Komponente der Schaltung 300 zu senden. In einigen anderen Implementierungen speist die Hostschnittstelle 302 ein Steuersignal von einem externen Prozessor ein.
  • Die Hostschnittstelle 302 kann die Mengen von Gewichtungseingaben und die Anfangsmenge von Aktivierungseingaben an die Direktspeicherzugriffsmaschine 304 senden. Die Direktspeicherzugriffsmaschine 304 kann die Mengen von Aktivierungseingaben in dem vereinheitlichten Puffer 308 speichern. In einigen Implementierungen speichert der Direktspeicherzugriff die Mengen von Gewichtungen in dem dynamischen Speicher 310, der eine Speichereinheit sein kann. In einigen Implementierungen befindet sich der dynamische Speicher 310 außerhalb der Schaltung.
  • Der vereinheitlichte Puffer 308 ist ein Speicherpuffer. Er kann verwendet werden, um die Menge von Aktivierungseingaben aus der Direktspeicherzugriffsmaschine 304 und Ausgaben der Vektorrechnungseinheit 314 zu speichern. Die Vektorrechnungseinheit 314 wird nachstehend unter Bezugnahme auf 4 ausführlicher beschrieben. Die Direktspeicherzugriffsmaschine 304 kann auch die Ausgaben der Vektorrechnungseinheit 314 aus dem vereinheitlichten Puffer 308 lesen.
  • Der dynamische Speicher 310 und der vereinheitlichte Puffer 308 können die Sätze von Gewichtungseingaben bzw. die Sätze von Aktivierungseingaben an die Matrizenrechnungseinheit 312 senden. In einigen Implementierungen ist die Matrizenrechnungseinheit 312 eine zweidimensionale systolische Anordnung. Die Matrizenrechnungseinheit 312 kann auch eine eindimensionale systolische Anordnung oder eine andere Schaltung sein, die mathematische Operationen, z. B. Multiplikation und Addition, ausführen kann. In einigen Implementierungen ist die Matrizenrechnungseinheit 312 ein Allzweck-Matrixprozessor. Die Spezial-Hardwareschaltung 300 kann die Matrizenrechnungseinheit 312 verwenden, um eine Matrixtransponieroperation durchzuführen. Das Ausführen einer Matrixtransponieroperation unter Verwendung der Matrizenrechnungseinheit 312 ist nachstehend unter Bezugnahme auf 8-10 ausführlicher beschrieben.
  • Die Matrizenrechnungseinheit 312 kann die Gewichtungseingaben und die Aktivierungseingaben verarbeiten und einen Vektor von Ausgaben an die Vektorrechnungseinheit 314 liefern. In einigen Implementierungen sendet die Matrizenrechnungseinheit 312 den Vektor von Ausgaben an den vereinheitlichten Puffer 308, der den Vektor von Ausgaben an die Vektorrechnungseinheit 314 sendet. Die Vektorrechnungseinheit 314 kann den Vektor von Ausgaben verarbeiten und einen Vektor von verarbeiteten Ausgaben in dem vereinheitlichten Puffer 308 speichern. Der Vektor von verarbeiteten Ausgaben kann als Aktivierungseingaben in die Matrizenrechnungseinheit verwendet werden, z. B. zur Verwendung in einer nachfolgenden Schicht in dem neuronalen Netz. Die Matrizenrechnungseinheit 312 und die Vektorrechnungseinheit 314 sind nachstehend unter Bezugnahme auf 4 bzw. 6 genauer beschrieben.
  • 4 zeigt eine beispielhafte Architektur 400 mit einer Matrizenrechnungseinheit. Die Matrizenrechnungseinheit ist eine zweidimensionale systolische Anordnung 406. Die Anordnung 406 enthält mehrere Zellen 404. In einigen Implementierungen entspricht eine erste Dimension 420 der systolischen Anordnung 406 Spalten von Zellen und eine zweite Dimension 422 der systolischen Anordnung 406 Zeilen von Zellen. Die systolische Anordnung kann mehr Zeilen als Spalten, mehr Spalten als Zeilen oder die gleiche Anzahl von Spalten und Zeilen aufweisen.
  • In dem veranschaulichten Beispiel senden Wertelader 402 Aktivierungseingaben an Zeilen der Anordnung 406 senden und eine Gewichtungsabrufschnittstelle 408 sendet Gewichtungseingaben an Spalten der Anordnung 406. In einigen anderen Implementierungen werden jedoch Aktivierungseingaben an die Spalten und Gewichtungseingaben an die Zeilen der Anordnung 406 gesendet.
  • Die Wertelader 402 können die Aktivierungseingaben von einem vereinheitlichten Puffer, z. B. dem vereinheitlichten Puffer 308 von 3, empfangen. Jeder Wertelader kann eine entsprechende Aktivierungseingabe an eine am weitesten linke Zelle der Anordnung 406 senden. Zum Beispiel kann der Wertelader 412 eine Aktivierungseingabe an die Zelle 414 senden.
  • Die Gewichtungsabrufschnittstelle 408 kann die Gewichtungseingabe von einer Speichereinheit, z. B. dem dynamischen Speicher 310 von 3, empfangen. Die Gewichtungsabrufschnittstelle 408 kann eine entsprechende Gewichtungseingabe an eine unterschiedene oberste Zelle der Anordnung 406 senden. Zum Beispiel kann die Gewichtungsabrufschnittstelle 408 Gewichtungseingaben an die Zellen 414 und 416 senden. Die Gewichtungsabrufschnittstelle 408 ist kann ferner mehrere Gewichtungen von der Speichereinheit, z. B. dem dynamischen Speicher 310, empfangen und die mehreren Gewichtungen parallel an unterschiedene oberste Zellen der Anordnung 406 senden. Zum Beispiel kann die Gewichtungsabrufschnittstelle 408 unterschiedliche Gewichtungen gleichzeitig an die Zellen 414 und 416 senden.
  • In einigen Implementierungen kann eine Hostschnittstelle, z. B. die HostSchnittstelle 302 von 3, Aktivierungseingaben durch die gesamte Anordnung 406 entlang einer Dimension, beispielsweise nach rechts, verschieben, während sie Gewichtungseingaben durch die Anordnung 406 entlang einer anderen Dimension, beispielsweise nach unten, verschiebt. Zum Beispiel kann die Aktivierungseingabe in der Zelle 414 über einen Taktzyklus hinweg zu einem Aktivierungsregister in der Zelle 416 verschoben werden, das rechts von der Zelle 414 liegt. In ähnlicher Weise kann die in der Zelle 416 eingegebene Gewichtung in ein Gewichtungsregister in der Zelle 418 verschoben werden, die unter der Zelle 414 liegt.
  • Bei jedem Taktzyklus kann jede Zelle eine gegebene Gewichtungseingabe, eine gegebene Aktivierungseingabe und eine kumulierte Ausgabe aus einer benachbarten Zelle verarbeiten, um eine kumulierte Ausgabe zu erzeugen. Die kumulierte Ausgabe kann auch entlang der gleichen Dimension wie die gegebene Gewichtungseingabe zu der benachbarten Zelle weitergeleitet werden. Jede Zelle kann auch eine gegebene Gewichtungseingabe und eine gegebene Aktivierungseingabe verarbeiten, ohne eine kumulierte Ausgabe aus einer benachbarten Zelle zu verarbeiten, um eine Ausgabe zu erzeugen. Die Ausgabe kann an benachbarte Zellen entlang der gleichen Dimensionen wie die gegebene Gewichtungseingabe und ausgegeben werden, ohne kumuliert zu werden. Eine einzelne Zelle ist weiter unten unter Bezugnahme auf 5 beschrieben.
  • Die kumulierte Ausgabe kann entlang der gleichen Spalte wie die Gewichtungseingabe weitergegeben werden, z. B. in Richtung des unteren Endes der Spalte in der Anordnung 406. In einigen Implementierungen kann die Anordnung 406 am Boden jeder Spalte Akkumulatoreinheiten 410 enthalten, die jede kumulierte Ausgabe aus jeder Spalte speichern und kumulieren, wenn Berechnungen mit Schichten durchgeführt werden, die mehr Aktivierungseingaben als Zeilen haben. In einigen Implementierungen speichert jede Akkumulatoreinheit mehrere parallele Kumulationen. Die Akkumulatoreinheiten 410 können jede kumulierte Ausgabe kumulieren, um einen endgültigen kumulierten Wert zu erzeugen. Der endgültige kumulierte Wert kann an eine Vektorrechnungseinheit, z. B. die Vektorrechnungseinheit von 6, übertragen werden. In einigen anderen Implementierungen leiten die Akkumulatoreinheiten 410 die kumulierten Werte an die Vektorrechnungseinheit weiter, ohne Kumulationen durchzuführen, wenn Schichten verarbeitet werden, die weniger Aktivierungseingaben als Zeilen aufweisen.
  • 5 zeigt eine beispielhafte Architektur 700 einer Zelle innerhalb einer systolischen Anordnung, z. B. der systolischen Anordnung 406 von 4.
  • Die Zelle kann ein Aktivierungsregister 506 enthalten, das eine Aktivierungseingabe speichert. Das Aktivierungsregister kann die Aktivierungseingabe abhängig von der Position der Zelle innerhalb der systolischen Anordnung aus einer linken benachbarten Zelle, d. h. einer benachbarten Zelle, die links von der gegebenen Zelle angeordnet ist, oder von einem vereinheitlichten Puffer empfangen. Die Zelle kann ein Gewichtungsregister 502 enthalten, das eine Gewichtungseingabe speichert. Die Gewichtungseingabe kann abhängig von der Position der Zelle innerhalb der systolischen Matrix von einer oberen benachbarten Zelle oder aus einer Gewichtungsabrufschnittstelle übertragen werden. Die Zelle kann auch ein Summeneingangsregister 504 enthalten. Das Summeneingangsregister 504 kann einen kumulierten Wert aus der oberen benachbarten Zelle speichern. Die Multiplikationsschaltung 508 kann verwendet werden, um die Gewichtungseingabe aus dem Gewichtungsregister 502 mit der Aktivierungseingabe aus dem Aktivierungsregister 506 zu multiplizieren. Die Multiplikationsschaltung 508 kann das Produkt an die Summierungsschaltung 510 ausgeben.
  • Die Summierungsschaltung 510 kann das Produkt und den kumulierte Wert aus dem Summeneingangsregister 504 summieren, um einen neuen kumulierten Wert zu erzeugen. Die Summierungsschaltung 510 kann dann den neuen kumulierten Wert zu einem anderen Summeneingangsregister senden, das in einer unteren benachbarten Zelle angeordnet ist. Der neue kumulierte Wert kann als ein Operand für eine Summierung in der unteren benachbarten Zelle verwendet werden. Die Summierungsschaltung 510 kann auch einen Wert aus dem Summeneingangsregister 504 annehmen und den Wert aus dem Summeneingangsregister 504 an eine untere benachbarte Zelle senden, ohne den Wert aus dem Summeneingangsregister 504 mit dem Produkt aus der Multiplikationsschaltung 508 zu summieren.
  • Die Zelle kann zudem die Gewichtungseingabe und die Aktivierungseingabe zu benachbarten Zellen zur Verarbeitung verschieben. Zum Beispiel kann das Gewichtungspfadregister 512 die Gewichtungseingabe an ein anderes Gewichtungsregister in der unteren benachbarten Zelle senden. Das Aktivierungsregister 506 kann die Aktivierungseingabe an ein anderes Aktivierungsregister in der rechten benachbarten Zelle senden. Sowohl die Gewichtungseingabe als auch die Aktivierungseingabe können daher in einem nachfolgenden Taktzyklus durch andere Zellen in der Anordnung wiederverwendet werden.
  • In einigen Implementierungen umfasst die Zelle auch ein Steuerregister. Das Steuerregister kann ein Steuersignal speichern, das bestimmt, ob die Zelle entweder die Gewichtungseingabe oder die Aktivierungseingabe in benachbarte Zellen verschieben soll. In einigen Implementierungen benötigt das Verschieben der Gewichtungseingabe oder der Aktivierungseingabe einen oder mehrere Taktzyklen. Das Steuersignal kann auch bestimmen, ob die Aktivierungseingabe oder Gewichtungseingaben an die Multiplikationsschaltung 508 übertragen werden, oder bestimmen, ob die Multiplikationsschaltung 508 die Aktivierungs- und Gewichtungseingaben bearbeitet. Das Steuersignal kann auch an eine oder mehrere benachbarte Zellen weitergeleitet werden, z. B. unter Verwendung eines Drahts.
  • In einigen Implementierungen werden Gewichtungen in ein Gewichtungspfadregister 512 vorverschoben. Das Gewichtungspfadregister 512 kann die Gewichteingabe beispielsweise aus einer oberen benachbarten Zelle empfangen und die Gewichtungseingabe basierend auf dem Steuersignal an das Gewichtungsregister 502 übertragen. Das Gewichtungsregister 502 kann die Gewichtungseingabe statisch speichern, so dass dann, wenn Aktivierungseingaben beispielsweise über das Aktivierungsregister 506 über mehrere Taktzyklen an die Zelle übertragen werden, die Gewichtungseingabe innerhalb der Zelle verbleibt und nicht an eine benachbarte Zelle übertragen wird. Daher kann die Gewichtungseingabe auf mehrere Aktivierungseingaben angewendet werden, z. B. unter Verwendung der Multiplikationsschaltung 508, und jeweilige kumulierte Werte können an eine benachbarte Zelle übertragen werden.
  • 6 zeigt eine beispielhafte Architektur 700 einer Vektorrechnungseinheit 602. Die Vektorrechnungseinheit 602 kann einen Vektor von kumulierten Werten aus einer Matrizenrechnungseinheit, z. B. der Matrizenrechnungseinheit 312, die in Bezug auf 3 beschrieben ist, oder den Akkumulatoren 410 der Matrizenrechnungseinheit von 4 empfangen.
  • Die Vektorrechnungseinheit 602 kann den Vektor von kumulierten Werten an der Aktivierungseinheit 604 verarbeiten. In einigen Implementierungen umfasst die Aktivierungseinheit eine Schaltung, die auf jeden kumulierten Wert eine nichtlineare Funktion anwendet, um Aktivierungswerte zu erzeugen. Zum Beispiel kann die nichtlineare Funktion tanh(x) sein, wobei x ein kumulierter Wert ist.
  • Optional kann die Vektorrechnungseinheit 602 Werte, z. B. Aktivierungswerte, unter Verwendung der Bündelungsschaltung 608 bündeln (engl. pooling). Die Bündelungsschaltung 608 kann eine Aggregationsfunktion auf einen oder mehrere der Werte anwenden, um gebündelte Werte zu erzeugen. In einigen Implementierungen sind die Aggregationsfunktionen Funktionen, die ein Maximum, Minimum oder Mittel der Werte oder einer Teilmenge der Werte zurückgeben.
  • Die Steuersignale 610 können beispielsweise durch die Ablaufsteuerung 306 von 3 übertragen werden und können regulieren, wie die Vektorrechnungseinheit 602 den Vektor von kumulierten Werten verarbeitet. Das heißt, die Steuersignale 610 können regulieren, ob die Aktivierungswerte gebündelt werden, wo die Aktivierungswerte gespeichert werden, z. B. in dem vereinheitlichten Puffer 308, oder anderweitig den Umgang mit den Aktivierungswerten regulieren. Die Steuersignale 610 können auch die Aktivierungs- oder Bündelungsfunktionen sowie andere Parameter zum Verarbeiten der Aktivierungswerte oder der Bündelungswerte, z. B. einen Schrittwert, spezifizieren.
  • Die Vektorberechnungseinheit 602 kann Werte, z. B. Aktivierungswerte oder gebündelte Werte, an einen vereinheitlichten Puffer, z. B. den vereinheitlichten Puffer 308 von 3, senden. In einigen Implementierungen empfängt die Bündelungsschaltung 608 die Aktivierungswerte oder gebündelten Werte und speichert die Aktivierungswerte oder gebündelten Werte in dem vereinheitlichten Puffer.
  • 7 ist ein Ablaufdiagramm eines beispielhaften Prozesses 700 zum Implementieren eines neuronalen Netzes, das eine Transponieroperation an einer Matrix spezifiziert. Im Allgemeinen wird der Prozess 700 durch ein System aus einem oder mehreren Computern durchgeführt, das eine Spezial-Hardwareschaltung (z. B. die Spezial-Hardwareschaltung 110 von 1) umfasst.
  • Das System empfängt eine Anforderung, ein neuronales Netz in der Spezial-Hardwareschaltung zu implementieren (Schritt 702). Insbesondere enthält das neuronale Netz eine Anzahl von Neuronalnetz-Matrizen und spezifiziert eine Transponieroperation an einer ersten Neuronalnetz-Matrix der Neuronalnetz-Matrizen.
  • Das System erzeugt Befehle, die, wenn sie von der Spezial-Hardwareschaltung ausgeführt werden, veranlassen, dass die Spezial-Hardwareschaltung die erste Neuronalnetz-Matrix transponiert (Schritt 704). Die Befehle veranlassen, dass die Spezial-Hardwareschaltung die Matrix iterativ transponiert, indem sie jede Untermatrix einer aktuellen Unterteilung der Matrix während jeder Iteration aktualisiert. Das Aktualisieren jeder Untermatrix der aktuellen Unterteilung umfasst ein Austauschen eines oberen rechten Quadranten der aktuellen Untermatrix und eines unteren linken Quadranten der Untermatrix unter Verwendung einer Matrizenrechnungseinheit in der Spezial-Hardwareschaltung. Das Aktualisieren von Untermatrizen einer aktuellen Unterteilung während jeder Iteration ist nachstehend unter Bezugnahme auf 8 ausführlicher beschrieben.
  • Eine Unterteilung einer Matrix ist eine Teilung der Matrix in eine oder mehrere Untermatrizen. Bei jeder Iteration veranlassen die Befehle, dass die Spezial-Hardwareschaltung die Matrix in eine oder mehrere (z. B. vier) Untermatrizen aufteilt, um eine aktuelle Unterteilung der Matrix zu erzeugen. Zum Beispiel veranlassen die Befehle in der ersten Iteration, dass die Spezial-Hardwareschaltung 110 eine anfängliche aktuelle Unterteilung erzeugt, die nur eine aktuelle Untermatrix enthält. Mit anderen Worten umfasst die aktuelle Untermatrix der ersten Iteration die gesamte erste Neuronalnetz-Matrix als die einzige Untermatrix. Bei jeder nachfolgenden Iteration veranlassen die Befehle, dass die Spezial-Hardwareschaltung eine aktualisierte aktuelle Unterteilung erzeugt, indem sie jede Unterteilung in der aktuellen Unterteilung in eine oder mehrere (z. B. vier) Unterteilungen teilt.
  • In einigen Implementierungen ist die erste Neuronalnetz-Matrix eine 2i * 2i-Matrix, wobei i eine nichtnegative ganze Zahl ist, und das Aktualisieren der Matrix bei jeder Iteration umfasst ein Aufteilen der ersten Neuronalnetz-Matrix in Untermatrizen der Größe 2j * 2j und das Austauschen jeder bestimmten Untermatrix durch eine entsprechende Untermatrix, die nicht vertikal oder horizontal benachbart zu der bestimmten Untermatrix ist, sondern diagonal benachbart zu der bestimmten Untermatrix ist. In einigen dieser Implementierungen ist der Wert von j in der ersten Iteration (i - 1 ) und wird in jeder Iteration dekrementiert.
  • Die Iterationen setzen sich fort, bis eine Untermatrix der aktuellen Unterteilung ein einzelner Wert innerhalb der ersten neuronalen Netzmatrix ist. Da an dieser Stelle ein einzelner Wert nicht mehr in weitere Untermatrizen unterteilt werden kann, enden die Iterationen.
  • In einigen Implementierungen führt das System eine Matrixmultiplikationsoperation als eine Kombination von Vektormultiplikationen an Vektoren mit einer maximalen Vektorlänge durch. Die maximale Vektorlänge ist die maximale Länge eines Vektors, der durch die Matrizenrechnungseinheit in einem Durchgang mit einer Matrix multipliziert werden kann, d. h. ohne den Vektor in mehrere Eingaben in die Matrizenrechnungseinheit aufzuteilen. Wenn beispielsweise die Matrizenrechnungseinheit eine eindimensionale oder zweidimensionale systolische Anordnung ist, ist die maximale Vektorlänge gleich der Anzahl von Spalten in der Einheit oder der Anzahl von Zeilen in der Einheit.
  • In einigen dieser Implementierungen erhält das System Informationen, die angeben, dass der Neuronalnetz-Matrix Nullwerte hinzugefügt wurden, um die Dimensionen der Matrix so anzupassen, dass die Matrix in Vektoren mit der maximalen Vektorlänge teilbar ist. Mit anderen Worten ist die Neuronalnetz-Matrix wurde mit Nullen aufgefüllt worden, um sie an die architektonische Konfiguration des Systems anzupassen. Als Antwort auf diese Informationen kann das System die Durchführung von wertweisen Multiplikationsoperationen vermeiden, bei denen Werte involviert sind, die als Ergebnis der Auffüllung mit Nullen hinzugefügt worden sind, da solche Operationen immer einen Wert von Null zurückgeben. Als Ergebnis kann das System die Anzahl von wertweisen Multiplikationsoperationen reduzieren, die benötigt werden, um solche Vektormultiplikationen durchzuführen.
  • Das System überträgt die Befehle an die Spezial-Hardwareschaltung (Schritt 706).
  • Zum Beispiel kann die Maschine zur Implementierung von neuronalen Netzen 150 die Befehle an die Spezial-Hardwareschaltung 110 liefern und die Spezial-Hardwareschaltung 110 kann die Befehle vorzugsweise an der Hostschnittstelle 302 von 3 empfangen. Die Maschine zur Implementierung von neuronalen Netzen 150 kann auch andere Befehle und/oder Parameter für die Neuronalnetz-Berechnung liefern, die auch von der Hostschnittstelle 302 empfangen werden können.
  • 8 ist ein Ablaufdiagramm eines beispielhaften Prozesses 800 zum Aktualisieren einer Untermatrix einer aktuellen Unterteilung einer Neuronalnetz-Matrix unter Verwendung einer Spezial-Hardwareschaltung. Zum Beispiel kann der Prozess 800 durch die Spezial-Hardwareschaltung 110 von 1 ausgeführt werden. Die Spezial-Hardwareschaltung aktualisiert eine Untermatrix einer aktuellen Unterteilung durch Austauschen eines oberen rechten Quadranten der Untermatrix und eines unteren linken Quadranten der Untermatrix unter Verwendung einer Matrizenrechnungseinheit in der Spezial-Hardwareschaltung 110.
  • Die Spezial-Hardwareschaltung 110 erzeugt einen Vektor für jede Zeile der Neuronalnetz-Matrix (802).
  • Die Spezial-Hardwareschaltung 110 erhält für jeden Wert der vertauschten Untermatrix, die die Schaltung 110 zu erzeugen versucht, eine partielle Einheitsmatrix (804). Die Schaltung 110 kann dieselbe partielle Einheitsmatrix verwenden, um zwei oder mehr Werte der vertauschten Untermatrix zu erzeugen.
  • Eine partielle Einheitsmatrix ist eine Matrix, die nur Werte von „0“ und „1“ enthält. Die „1“-Werte in einer partiellen Einheitsmatrix sind strategisch so angeordnet, dass, wenn sie mit einem Vektor multipliziert wird, der die Werte in einer Zeile der ersten Neuronalnetz-Matrix enthält, die Ausgabe der Multiplikation bestimmte Werte des Vektors beibehält und gleichzeitig andere Werte annulliert (d. h. „0“ ausgibt).
  • In einigen Implementierungen ist dann, wenn der Vektor, der Werte für eine Zeile der Neuronalnetz-Matrix enthält, eine Dimension d aufweist, eine partielle Einheitsmatrix, die, wenn sie mit dem Vektor multipliziert wird, den i-ten und (i + 1)-ten Wert des Vektors in der Matrix bei dem j-ten und (j + 1)-ten Wert eines resultierenden Vektors zurückgibt, jeweils eine d * d-Matrix, die einen Wert von 1 an den Positionen [i,j)- und [i + 1 und j + 1] und Nullen an anderen Stellen aufweist.
  • Die Spezial-Hardwareschaltung 110 multipliziert jede Zeile der Neuronalnetz-Matrix mit einer oder mehreren partiellen Einheitsmatrizen, um die Werte aus der Zeile zu erhalten, die benötigt werden, um die Neuronalnetz-Matrix zu aktualisieren, um die oberen rechten und unteren linken Quadranten jeder Untermatrix in der aktuellen Unterteilung zu vertauschen (806).
  • Zum Beispiel kann der Vektor V1 = [A B] zwei Werte der ersten Zeile einer Neuronalnetz-Matrix enthalten. Um den ersten Wert des Vektors zu extrahieren, multipliziert die Spezial-Hardwareschaltung V1 mit der folgenden partiellen Einheitsmatrix I1:
    1 0
    0 0
  • Die Ausgabe von V1 * I1 = [A 0]. Daher wird der Wert von A beibehalten, während der Wert von B annulliert wird.
  • Die Spezial-Hardwareschaltung 110 kombiniert die Vektoren, die Abschnitte einer jeweiligen Zeile der aktualisierten Neuronalnetz-Matrix enthalten, um diese Zeile zu erzeugen (908). Zum Beispiel kann V1 die erste Zeile einer Neuronalnetz-Matrix M1 sein:
    A B
    C D
  • Die erste Zeile der aktualisierten Matrix S1, die der Matrix M1 entspricht, enthält das erste Element von V1 und das erste Element des Vektors V2 = [CD], der die Werte der zweiten Zeile der Matrix M1 enthält.
  • Mit anderen Worten sind die zwei Vektoren, die Abschnitte der ersten Zeile der aktualisierten Matrix S1 enthalten, die Ausgabe von V1 * I1 und die Ausgabe von V2 * I1. Die Spezial-Hardwareschaltung 110 kann diese beiden Vektoren kombinieren, um die erste Zeile der vertauschten Teilmatrix S1 zu erzeugen.
  • Die Spezial-Hardwareschaltung 110 kombiniert jede Zeile der Neuronalnetz-Matrix, um die aktualisierte Neuronalnetz-Matrix (810) zu erzeugen.
  • Da das Vertauschen des oberen rechten und unteren linken Quadranten jeder Untermatrix unter Verwendung der Matrixmultiplikationseinheit durchgeführt werden kann (z. B. unter Verwendung einer Reihe von Matrix-Vektor-Multiplikationen und -Additionen, wie es weiter unten beschrieben ist), kann die Spezial-Hardwareschaltung 110 eine Transponieroperation an einer Matrix durchführen, ohne die Fähigkeiten für eine direkte Matrixtransponieroperation zu besitzen. Somit kann die Maschine zur Implementierung von neuronalen Netzen 150 eine inkompatible Schicht, die die Transponierte einer Matrix spezifiziert, unter Verwendung der Hardwareschaltung 110 verarbeiten.
  • 9 ist ein Beispiel einer Berechnung zum Ausführen einer Transponierungsoperation an einer neuronalen Netzwerkmatrix. Das Beispiel von 9 kann unter Verwendung des Prozesses von 9 durchgeführt werden. 7 und die Spezial-Hardwareschaltung 300 von 2.
  • In Teil (a) von 9 bildet die Spezial-Hardwareschaltung eine aktuelle Unterteilung einer 4 × 4-Matrix durch Erzeugen einer Untermatrix, die die gesamte Matrix enthält. Die Schaltung erzeugt einen Vektor, der die Werte jeder Zeile der Neuronalnetz-Matrix enthält. Zum Beispiel erzeugt die Schaltung einen Vektor Eingabe[0], der die Werte der ersten Zeile der Matrix enthält.
  • Teil (b) von 9 zeigt vier partielle Einheitsmatrizen. Jede partielle Einheitsmatrix hat eine Struktur, die durch den Ort von „1“-Werten innerhalb der Matrix definiert ist. Die Struktur jeder partiellen Einheitsmatrix ist strategisch dazu ausgelegt, bestimmte Werte aus Vektoren, die in Teil (a) gezeigt sind, zu extrahieren, während andere Werte in diesen Vektoren annulliert werden. Zum Beispiel verwendet die Spezial-Hardwareschaltung die partielle Einheitsmatrix W1, um den ersten und zweiten Wert eines Vektors zu extrahieren.
  • In Teil (c) von Fig. 9 führt die Spezial-Hardwareschaltung vier Sätze von Berechnungen unter Verwendung der Vektoren, die in Teil (a) dargestellt sind, und partiellen Einheitsmatrizen, die in Teil (b) dargestellt sind, aus. Die Schaltung verwendet jeden Satz von Berechnungen, um eine Zeile einer aktualisierten Neuronalnetz-Matrix zu erzeugen, die das Element der Neuronalnetz-Matrix, die in Teil (a) dargestellt ist, enthält, wobei aber der obere rechten und untere linke Quadrant jeder Untermatrix vertauscht ist. Zum Beispiel verwendet die Schaltung den ersten Satz von Berechnungen, um [A B I J] zu erzeugen, was die erste Zeile der Neuronalnetz-Untermatrix ist, wobei der obere rechten und untere linke Quadrant jeder Untermatrix vertauscht sind.
  • Teil (d) von 9 zeigt die Ausgabe des Aktualisierens der Neuronalnetz-Matrix, die in Teil (a) dargestellt ist, durch Vertauschen des oberen rechten und unteren linken Quadranten jeder Untermatrix in der Neuronalnetz-Matrix.
  • In Teil (e) teilt die Spezial-Hardwareschaltung die aktualisierte Neuronalnetz-Matrix, die in Teil (d) dargestellt ist, in Zeilen.
  • Teil (f) von 9 zeigt vier partielle Einheitsmatrizen. Die Struktur jeder partiellen Einheitsmatrix, die in Teil (f) dargestellt ist, ist strategisch so ausgelegt, dass bestimmte Werte aus den in Teil (d) gezeigten Vektoren extrahiert werden, während andere Werte in diesen Vektoren annulliert werden.
  • In Teil (g) führt die Spezial-Hardwareschaltung vier Sätze von Berechnungen unter Verwendung der Vektoren, die in Teil (e) dargestellt sind, und partiellen Einheitsmatrizen, die in Teil (f) dargestellt sind, aus. Wenn sie an der in Teil (e) gezeigten Neuronalnetz-Matrix ausgeführt werden, resultieren die Berechnungen in einer Aktualisierung der in Teil (e) dargestellten Neuronalnetz-Matrix, um den oberen rechten und den unteren linken Quadranten jeder Untermatrix in einer neuen Unterteilung der Neuronalnetz-Matrix in vier Untermatrizen zu vertauschen. Die aktualisierte Matrix, die in Teil (h) gezeigt ist, ist eine Transponierte der in Teil (a) gezeigten Matrix.
  • Operationen, die in den Teilen (d)-(g) von 9 durchgeführt werden, sind eine Wiederholung von Operationen, die in den Teilen (a)-(c) von 9 durchgeführt werden. Nach Teil (g) sind jedoch neue Untermatrizen, die aus den in Teil (e) dargestellten Untermatrizen gebildet wurden, einzelne Werte, die nicht mehr weiter in Quadranten unterteilt werden können. Daher werden die Operationen nicht mehr wiederholt.
  • Ausführungsformen des Gegenstands und der funktionalen Operationen, die in dieser Anmeldung beschrieben sind, können in digitalen elektronischen Schaltungen, in konkret verkörperter Computersoftware oder Firmware, in Computerhardware einschließlich der in dieser Anmeldung offenbarten Strukturen und ihrer strukturellen Äquivalente oder in Kombinationen von einem oder mehreren davon implementiert werden. Ausführungsformen des in dieser Anmeldung beschriebenen Gegenstands können als ein oder mehrere Computerprogramme, d. h. ein oder mehrere Module von Computerprogrammbefehlen, die auf einem Computerspeichermedium codiert sind, das beispielsweise ein konkretes nicht transitorisches Computerspeichermedium sein kann, implementiert werden, um von Datenverarbeitungsvorrichtungen ausgeführt zu werden oder deren Betrieb zu steuern. Alternativ oder zusätzlich können die Programmbefehle auf einem künstlich erzeugten sich ausbreitenden Signal, z. B. einem maschinell erzeugten elektrischen, optischen oder elektromagnetischen Signal, codiert werden, das zum Codieren von Information zur Übertragung an eine geeignete Empfängervorrichtung zur Ausführung durch eine Datenverarbeitungsvorrichtung erzeugt wird. Das Computerspeichermedium kann eine maschinenlesbare Speichervorrichtung, ein maschinenlesbares Speichersubstrat, eine Speichervorrichtung mit wahlfreiem oder seriellem Zugriff oder eine Kombination aus einem oder mehreren davon sein.
  • Der Begriff „Datenverarbeitungsvorrichtung“ umfasst alle Arten von Vorrichtungen, Einrichtungen und Maschinen zum Verarbeiten von Daten, einschließlich beispielsweise eines programmierbaren Prozessors, eines Computers, einer Spezialschaltung oder mehrerer Prozessoren oder Computer. Die Vorrichtung kann eine spezielle Logikschaltung umfassen, z. B. eine FPGA (feldprogrammierbare Gatteranordnung) oder eine ASIC (anwendungsspezifische integrierte Schaltung). Die Vorrichtung kann zusätzlich zu der Hardware auch Code enthalten, der eine Ausführungsumgebung für das fragliche Computerprogramm erzeugt, z. B. Code, der Prozessor-Firmware, einen Protokollstapel, ein Datenbankverwaltungssystem, ein Betriebssystem oder eine Kombination von einem oder mehr davon bildet.
  • Ein Computerprogramm (auch bezeichnet als Programm, Software, Softwareanwendung, Script oder Code) kann in einer beliebigen Form von Programmiersprache geschrieben sein, einschließlich kompilierter Sprachen, interpretierter Sprachen, deklarativer Sprachen und verfahrensorientierter Sprachen, und das Computerprogramm kann in jeder beliebigen Form eingesetzt werden, darunter als unabhängiges Programm oder als ein Modul, eine Komponente, eine Subroutine, ein Objekt oder eine andere Einheit, die zur Verwendung in einer Rechenumgebung geeignet ist. Ein Computerprogramm kann, muss aber nicht, einer Datei in einem Dateisystem entsprechen. Ein Programm kann in einem Teil einer Datei, die andere Programme oder Daten enthält, wie z. B. ein oder mehrere Scripts, die in einem Dokument in Auszeichnungssprache gespeichert sind, in einer einzelnen Datei speziell für das betreffende Programm oder in mehreren koordinierten Dateien, wie z. B. Dateien, die ein oder mehrere Module, Bibliotheken, Unterprogramme oder Teile von Code speichern, gespeichert sein. Ein Computerprogramm kann auf einem Computer oder mehreren Computern, die an einem Standort angeordnet sind oder über mehrere Standorte verteilt sind und über ein Kommunikationsnetz verbunden sind, eingesetzt oder ausgeführt werden
  • Die Prozesse und Logikabläufe, die in dieser Anmeldung beschrieben sind, können von einem oder mehreren programmierbaren Prozessoren durchgeführt werden, die ein oder mehrere Computerprogramme ausführen, um Aktionen durch Bearbeiten von Eingabedaten und Erzeugen einer Ausgabe durchzuführen. Die Prozesse und Logikabläufe können auch von Spezial-Logikschaltungen durchgeführt werden und die Vorrichtung kann als eine solche Spezial-Logikschaltung wie etwa als feldprogrammierbare Gatteranordnung (FPGA) oder anwendungsspezifische integrierte Schaltung (ASIC) implementiert sein.
  • Computer, die für die Ausführung eines Computerprogramms geeignet sind, können beispielsweise auf allgemeinen oder speziellen Mikroprozessoren oder auf beiden oder auf irgendeiner anderen Art von zentraler Verarbeitungseinheit basieren. Im Allgemeinen empfängt eine zentrale Verarbeitungseinheit Befehle und Daten aus einem Nur-Lese-Speicher oder einem Direktzugriffsspeicher oder aus beiden. Die wesentlichen Elemente eines Computers sind eine zentrale Verarbeitungseinheit zum Durchführen oder Ausführen von Befehlen und eine oder mehrere Speichervorrichtungen zum Speichern von Befehlen und Daten. Die zentrale Verarbeitungseinheit und der Speicher können durch spezielle Logikschaltungen ergänzt oder in diese integriert sein. Im Allgemeinen wird ein Computer auch eine oder mehrere Massenspeichervorrichtungen zum Speichern von Daten, z. B. Magnetplatten, magnetooptische Platten oder optische Platten, umfassen oder betriebstechnisch mit diesen gekoppelt sein, um Daten von diesen zu empfangen oder an diese zu senden oder beides. Ein Computer muss jedoch nicht über solche Vorrichtungen verfügen. Darüber hinaus kann ein Computer in eine andere Vorrichtung eingebettet sein, z. B. ein Mobiltelefon, einen persönlichen digitalen Assistenten (PDA), einen mobilen Audio- oder Videospieler, eine Spielekonsole, einen Empfänger für das globale Positionsbestimmungssystem (GPS-Empfänger) oder eine tragbare Speichervorrichtung, z. B. ein USB-Flashlaufwerk, um nur einige zu nennen.
  • Computerlesbare Medien, die zum Speichern von Computerprogrammbefehlen und Daten geeignet sind, umfassen alle Formen von nichtflüchtigen Speichern, Medien und Speichervorrichtungen, einschließlich beispielsweise Halbleiterspeichervorrichtungen, z. B. EPROM, EEPROM und Flash-Speichervorrichtungen; Magnetplatten, z. B. interne Festplatten oder Wechselplatten; magnetooptische Platten; und CD-ROM- und DVD-ROM-Disks. Der Prozessor und der Speicher können durch Spezial-Logikschaltungen ergänzt sein oder in diese integriert sein.
  • Um eine Interaktion mit einem Anwender zu ermöglichen, können Ausführungsformen des in dieser Anmeldung beschriebenen Gegenstands auf einem Computer implementiert sein, der eine Anzeigevorrichtung, z. B. eine CRT (Kathodenstrahlröhre) oder einen LCD-Monitor (Flüssigkristallanzeigen-Monitor), um Informationen für den Anwender anzuzeigen, und eine Tastatur und ein Zeigevorrichtung, z. B. eine Maus oder einen Trackball, durch die der Anwender Eingaben an dem Computer vornehmen kann, aufweist. Andere Arten von Vorrichtungen können auch für die Interaktion mit einem Anwender verwendet werden; zum Beispiel kann eine Rückmeldung, die für den Anwender bereitgestellt wird, irgendeine Form von sensorischer Rückmeldung sein, z. B. eine visuelle Rückmeldung, akustische Rückmeldung oder taktile Rückmeldung; und die Eingabe von dem Anwender kann in irgendeiner Form einschließlich akustischer, sprachlicher oder taktiler Eingaben empfangen werden. Darüber hinaus kann ein Computer mit einem Anwender interagieren, indem er Ressourcen an eine Vorrichtung sendet und von einer Vorrichtung empfängt, die von einem Anwender verwendet wird, und zwar z. B. durch Senden von Webseiten an einen Webbrowser auf der Vorrichtung eines Anwenders als Antwort auf von dem Webbrowser empfangene Anforderungen.
  • Ausführungsformen des in dieser Anmeldung beschriebenen Gegenstands können auf einem Rechensystem implementiert sein, das eine Backend-Komponente, z. B. als Datenserver, oder eine Middleware-Komponente, z. B. einen Anwendungsserver, oder eine Frontend-Komponente, z. B. einen Clientcomputer mit einer grafischen Anwenderoberfläche oder einem Webbrowser, über den ein Anwender mit einer Implementierung des in dieser Anmeldung beschriebenen Gegenstands interagieren kann, oder eine beliebige Kombination aus einer oder mehreren solchen Backend-, Middleware- oder Frontend-Komponenten enthält. Die Komponenten des Systems können über jede Form oder jedes Medium der digitalen Datenkommunikation, z. B. ein Kommunikationsnetz, miteinander verbunden sein. Beispiele von Kommunikationsnetzen umfassen ein lokales Netz (LAN) und ein Weitbereichsnetz (WAN), z. B. das Internet.
  • Das Rechensystem 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 durch Computerprogramme, die auf den jeweiligen Computern laufen und eine Client-Server-Beziehung zueinander haben.
  • Obwohl diese Patentschrift viele spezifische Implementierungsdetails enthält, sollten diese nicht als Einschränkungen des Umfangs einer Erfindung oder des Beanspruchbaren ausgelegt werden, sondern vielmehr als Beschreibungen von Merkmalen, die für bestimmte Ausführungsformen spezifisch sein können. Bestimmte Merkmale, die in dieser Anmeldung im Zusammenhang mit getrennten Ausführungsformen beschrieben sind, können auch in Kombination in einer einzelnen Ausführungsform implementiert werden. Umgekehrt können verschiedene Merkmale, die im Zusammenhang mit einer einzelnen Ausführungsform beschrieben sind, auch in mehreren Ausführungsformen getrennt oder in jeder geeigneten Unterkombination implementiert werden. Obwohl darüber hinaus Merkmale oben so beschrieben sein können, dass sie in bestimmten Kombinationen agieren und sogar anfänglich derart beansprucht werden, können ein oder mehrere Merkmale aus einer beanspruchten Kombination in einigen Fällen aus der Kombination herausgenommen werden und die beanspruchte Kombination kann auf eine Unterkombination oder Variation einer Unterkombination ausgerichtet werden.
  • Obwohl Operationen in den Zeichnungen in einer bestimmten Reihenfolge dargestellt sind, sollte dies ebenfalls nicht dahingehend verstanden werden, dass es erforderlich ist, solche Operationen in der gezeigten Reihenfolge oder in sequentieller Reihenfolge auszuführen oder alle dargestellten Operationen durchzuführen, um wünschenswerte Ergebnisse zu erzielen. Unter bestimmten Umständen können Multitasking und Parallelverarbeitung vorteilhaft sein. Darüber hinaus sollte die Trennung verschiedener Systemmodule und Komponenten in den oben 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 zusammen in einem einzigen Softwareprodukt integriert werden können oder in mehreren Softwareprodukten verpackt werden können.
  • Spezielle Ausführungsformen des Gegenstands sind beschrieben worden. Andere Ausführungsformen liegen innerhalb des Umfangs der folgenden Ansprüche. Zum Beispiel können die in den Ansprüchen aufgeführten Aktionen in einer anderen Reihenfolge ausgeführt werden und dennoch wünschenswerte Ergebnisse erzielen. Als Beispiel erfordern die in den begleitenden Figuren dargestellten Prozesse nicht notwendigerweise die bestimmte gezeigte Reihenfolge oder sequentielle Reihenfolge, um wünschenswerte Ergebnisse zu erzielen. In einigen Fällen können Multitasking und Parallelverarbeitung vorteilhaft sein.
  • Was beansprucht wird ist:

Claims (14)

  1. System, das einen oder mehrere Computer und eine oder mehrere Speichervorrichtungen, die Befehle speichern, die, wenn sie von dem einen oder den mehreren Computern ausgeführt werden, betreibbar sind, um zu veranlassen, dass der eine oder die mehreren Computer Operationen ausführen, die umfassen: Empfangen einer Anforderung, Berechnungen für ein neuronales Netz auf einer Hardwareschaltung mit einer Matrizenrechnungseinheit durchzuführen, wobei die Anforderung eine Transponieroperation spezifiziert, die an einer ersten Neuronalnetz-Matrix, die dem neuronalen Netz zugeordnet ist, durchgeführt werden soll; und Erzeugen von Befehlen, die bei Ausführung durch die Hardwareschaltung veranlassen, dass die Hardwareschaltung die erste Neuronalnetz-Matrix durch Ausführen erster Operationen transponiert, wobei die ersten Operationen ein wiederholtes Durchführen der folgenden zweiten Operationen umfassen: für eine aktuelle Unterteilung der ersten Neuronalnetz-Matrix, die die erste Neuronalnetz-Matrix in eine oder mehrere aktuelle Untermatrizen unterteilt: Aktualisieren der ersten Neuronalnetz-Matrix durch Vertauschen eines oberen rechten Quadranten und eines unteren linken Quadranten jeder aktuellen Untermatrix in der aktuellen Unterteilung unter Verwendung der Matrizenrechnungseinheit, und Unterteilen jeder aktuellen Untermatrix in der aktuellen Unterteilung in jeweilige mehrere neue Untermatrizen, um die aktuelle Unterteilung zu aktualisieren, wobei jede der jeweiligen mehreren neuen Untermatrizen ein jeweiliger Quadrant der aktuellen Untermatrix ist.
  2. System nach Anspruch 1, wobei die ersten Operationen ferner umfassen: Bestimmen, dass die erste Neuronalnetz-Matrix keine i x i-Matrix ist, wobei i ein Vektorlängenwert für die Hardwareschaltung ist; als Antwort darauf, Aktualisieren der ersten Neuronalnetz-Matrix, um durch Auffüllen der ersten Neuronalnetz-Matrix mit Nullen eine i x i-Matrix zu erzeugen, bevor alle Iterationen der zweiten Operationen ausgeführt werden; und nach dem Durchführen aller Iterationen der zweiten Operationen, Konvertieren der ersten Neuronalnetz-Matrix in ihren Zustand vor der Aktualisierung durch Entfernen der während der Aktualisierung aufgefüllten Nullen.
  3. System nach Anspruch 1 oder 2, wobei: die ersten Operationen ferner ein Erhalten von Daten, die angeben, dass ein oder mehrere Werte der ersten Neuronalnetz-Matrix Nullwerte sind, umfassen; und das Aktualisieren der ersten Neuronalnetz-Matrix ein Verhindern, dass die Matrizenrechnungseinheit irgendeine Operation an einer Menge von Werten ausführt, die mindestens einen der Werte der ersten Neuronalnetz-Matrix enthält, die Nullwerte sind, umfasst.
  4. System nach einem der Ansprüche 1 bis 3, wobei das Vertauschen des oberen rechten Quadranten der aktuellen Untermatrix und des unteren linken Quadranten jeder aktuellen Untermatrix umfasst: Multiplizieren jeder Zeile der ersten Neuronalnetz-Matrix mit einer oder mehreren partiellen Einheitsmatrizen, um einen oder mehrere Vektoren, die jeweils einen Abschnitt der jeweiligen Zeile enthalten, zu erzeugen, bei denen die Elemente des oberen rechten Quadranten und des unteren linken Quadranten jeder jeweiligen aktuellen Untermatrix vertauscht sind; für jede Zeile der ersten Neuronalnetz-Matrix, Kombinieren der Vektoren, die einem Abschnitt der jeweiligen Zeile der ersten Neuronalnetz-Matrix entsprechen und bei denen die Elemente des oberen rechten Quadranten und des unteren linken Quadranten jeder jeweiligen aktuellen Untermatrix vertauscht sind; und Erzeugen der aktualisierten ersten Neuronalnetz-Matrix durch Kombinieren jeder jeweiligen Zeile.
  5. System nach einem der Ansprüche 1 bis 4, wobei die Matrizenrechnungseinheit eine Matrixmultiplikationsoperation als eine Reihe von Vektormultiplikationsoperationen ausführt.
  6. System nach einem der Ansprüche 1 bis 5, wobei die zweiten Operationen ferner umfassen: Erzeugen einer anfänglichen aktuellen Unterteilung der ersten Neuronalnetz-Matrix, wobei die anfängliche aktuelle Unterteilung eine anfängliche Untermatrix enthält, die die erste Neuronalnetz-Matrix ist.
  7. System nach einem der Ansprüche 1 bis 6, wobei die ersten Operationen ferner umfassen: Übertragen der Befehle an die Hardwareschaltung.
  8. Computerspeichermedium, das mit Befehlen codiert ist, die, wenn sie von einem oder mehreren Computern ausgeführt werden, veranlassen, dass der eine oder die mehreren Computer Operationen durchführen, die umfassen: Empfangen einer Anforderung, Berechnungen für ein neuronales Netz auf einer Hardwareschaltung mit einer Matrizenrechnungseinheit durchzuführen, wobei die Anforderung eine Transponieroperation spezifiziert, die an einer ersten Neuronalnetz-Matrix, die dem neuronalen Netz zugeordnet ist, durchgeführt werden soll; und Erzeugen von Befehlen, die bei Ausführung durch die Hardwareschaltung veranlassen, dass die Hardwareschaltung die erste Neuronalnetz-Matrix durch Ausführen erster Operationen transponiert, wobei die ersten Operationen ein wiederholtes Durchführen der folgenden zweiten Operationen umfassen: für eine aktuelle Unterteilung der ersten Neuronalnetz-Matrix, die die erste Neuronalnetz-Matrix in eine oder mehrere aktuelle Untermatrizen unterteilt: Aktualisieren der ersten Neuronalnetz-Matrix durch Vertauschen eines oberen rechten Quadranten und eines unteren linken Quadranten jeder aktuellen Untermatrix in der aktuellen Unterteilung unter Verwendung der Matrizenrechnungseinheit, und Unterteilen jeder aktuellen Untermatrix in der aktuellen Unterteilung in jeweilige mehrere neue Untermatrizen, um die aktuelle Unterteilung zu aktualisieren, wobei jede der jeweiligen mehreren neuen Untermatrizen ein jeweiliger Quadrant der aktuellen Untermatrix ist.
  9. Computerspeichermedium nach Anspruch 8, wobei die ersten Operationen ferner umfassen: Bestimmen, dass die erste Neuronalnetz-Matrix keine i x i-Matrix ist, wobei i ein Vektorlängenwert für die Hardwareschaltung ist; als Antwort darauf, Aktualisieren der ersten Neuronalnetz-Matrix, um durch Auffüllen der ersten Neuronalnetz-Matrix mit Nullen eine i x i-Matrix zu erzeugen, bevor alle Iterationen der zweiten Operationen ausgeführt werden; und nach dem Durchführen aller Iterationen der zweiten Operationen, Konvertieren der ersten Neuronalnetz-Matrix in ihren Zustand vor der Aktualisierung durch Entfernen der während der Aktualisierung aufgefüllten Nullen.
  10. Computerspeichermedium nach Anspruch 8 oder 9, wobei: die ersten Operationen ferner ein Erhalten von Daten, die angeben, dass ein oder mehrere Werte der ersten Neuronalnetz-Matrix Nullwerte sind, umfassen; und das Aktualisieren der ersten Neuronalnetz-Matrix ein Verhindern, dass die Matrizenrechnungseinheit irgendeine Operation an einer Menge von Werten ausführt, die mindestens einen der Werte der ersten Neuronalnetz-Matrix enthält, die Nullwerte sind, umfasst.
  11. Computerspeichermedium nach einem der Ansprüche 8 bis 10, wobei das Vertauschen des oberen rechten Quadranten der aktuellen Untermatrix und des unteren linken Quadranten jeder aktuellen Untermatrix umfasst: Multiplizieren jeder Zeile der ersten Neuronalnetz-Matrix mit einer oder mehreren partiellen Einheitsmatrizen, um einen oder mehrere Vektoren, die jeweils einen Abschnitt der jeweiligen Zeile enthalten, zu erzeugen, bei denen die Elemente des oberen rechten Quadranten und des unteren linken Quadranten jeder jeweiligen aktuellen Untermatrix vertauscht sind; für jede Zeile der ersten Neuronalnetz-Matrix, Kombinieren der Vektoren, die einem Abschnitt der jeweiligen Zeile der ersten Neuronalnetz-Matrix entsprechen und bei denen die Elemente des oberen rechten Quadranten und des unteren linken Quadranten jeder jeweiligen aktuellen Untermatrix vertauscht sind; und Erzeugen der aktualisierten ersten Neuronalnetz-Matrix durch Kombinieren jeder jeweiligen Zeile.
  12. Computerspeichermedium nach einem der Ansprüche 8 bis 11, wobei die Matrizenrechnungseinheit eine Matrixmultiplikationsoperation als eine Reihe von Vektormultiplikationsoperationen ausführt.
  13. Computerspeichermedium nach einem der Ansprüche 8 bis 12, wobei die zweiten Operationen ferner umfassen: Erzeugen einer anfänglichen aktuellen Unterteilung der ersten Neuronalnetz-Matrix, wobei die anfängliche aktuelle Unterteilung eine anfängliche Untermatrix enthält, die die erste Neuronalnetz-Matrix ist.
  14. Computerspeichermedium nach einem der Ansprüche 8 bis 13, wobei die ersten Operationen ferner umfassen: Übertragen der Befehle an die Hardwareschaltung.
DE202018101330.0U 2017-03-09 2018-03-09 Transportieren von Matrizen neuronaler Netze in Hardware Active DE202018101330U1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/455,024 US10909447B2 (en) 2017-03-09 2017-03-09 Transposing neural network matrices in hardware
US15/455,024 2017-03-09

Publications (1)

Publication Number Publication Date
DE202018101330U1 true DE202018101330U1 (de) 2018-06-18

Family

ID=61768515

Family Applications (2)

Application Number Title Priority Date Filing Date
DE202018101330.0U Active DE202018101330U1 (de) 2017-03-09 2018-03-09 Transportieren von Matrizen neuronaler Netze in Hardware
DE102018105457.2A Pending DE102018105457A1 (de) 2017-03-09 2018-03-09 Transponieren von Matrizen neuronaler Netze in Hardware

Family Applications After (1)

Application Number Title Priority Date Filing Date
DE102018105457.2A Pending DE102018105457A1 (de) 2017-03-09 2018-03-09 Transponieren von Matrizen neuronaler Netze in Hardware

Country Status (8)

Country Link
US (3) US10909447B2 (de)
EP (2) EP3373210B1 (de)
CN (2) CN108573304B (de)
DE (2) DE202018101330U1 (de)
DK (1) DK3373210T3 (de)
GB (1) GB2562572A (de)
TW (2) TWI765168B (de)
WO (1) WO2018165514A1 (de)

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10402628B2 (en) * 2016-10-10 2019-09-03 Gyrfalcon Technology Inc. Image classification systems based on CNN based IC and light-weight classifier
US10795836B2 (en) 2017-04-17 2020-10-06 Microsoft Technology Licensing, Llc Data processing performance enhancement for neural networks using a virtualized data iterator
JP6907700B2 (ja) * 2017-05-23 2021-07-21 富士通株式会社 情報処理装置、マルチスレッド行列演算方法、およびマルチスレッド行列演算プログラム
US20180350351A1 (en) * 2017-05-31 2018-12-06 Intel Corporation Feature extraction using neural network accelerator
US11507429B2 (en) * 2017-09-14 2022-11-22 Electronics And Telecommunications Research Institute Neural network accelerator including bidirectional processing element array
US10796198B2 (en) 2018-02-08 2020-10-06 Western Digital Technologies, Inc. Adjusting enhancement coefficients for neural network engine
US11741346B2 (en) 2018-02-08 2023-08-29 Western Digital Technologies, Inc. Systolic neural network engine with crossover connection optimization
US10990650B1 (en) * 2018-03-22 2021-04-27 Amazon Technologies, Inc. Reducing computations for data including padding
US10621489B2 (en) 2018-03-30 2020-04-14 International Business Machines Corporation Massively parallel neural inference computing elements
US11315020B2 (en) * 2018-09-24 2022-04-26 International Business Machines Corporation Optimized partitioning of multi-layer networks in core-based neurosynaptic architectures
CN111199275B (zh) * 2018-11-20 2023-04-28 上海登临科技有限公司 用于神经网络的片上系统
CN109919321A (zh) * 2019-02-01 2019-06-21 京微齐力(北京)科技有限公司 单元具有本地累加功能的人工智能模块及系统芯片
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
US11783176B2 (en) 2019-03-25 2023-10-10 Western Digital Technologies, Inc. Enhanced storage device memory architecture for machine learning
US10929058B2 (en) 2019-03-25 2021-02-23 Western Digital Technologies, Inc. Enhanced memory device architecture for machine learning
US10990397B2 (en) * 2019-03-30 2021-04-27 Intel Corporation Apparatuses, methods, and systems for transpose instructions of a matrix operations accelerator
CN111914831B (zh) * 2019-05-10 2023-06-02 杭州海康威视数字技术股份有限公司 目标检测方法、装置及存储介质
US11620358B2 (en) 2019-05-14 2023-04-04 Intel Corporation Technologies for performing macro operations in memory
CN112149049A (zh) * 2019-06-26 2020-12-29 北京百度网讯科技有限公司 用于变换矩阵的装置和方法、数据处理系统
US10884707B1 (en) * 2019-06-27 2021-01-05 Amazon Technologies, Inc. Transpose operations using processing element array
CN110210615B (zh) * 2019-07-08 2024-05-28 中昊芯英(杭州)科技有限公司 一种用于执行神经网络计算的脉动阵列系统
KR20220041926A (ko) * 2019-08-16 2022-04-01 구글 엘엘씨 온-칩 연산의 명시적 스케줄링
EP4000229A1 (de) * 2019-08-22 2022-05-25 Google LLC Initialisierung von operationen auf einem chip
US20220092382A1 (en) * 2020-09-23 2022-03-24 The Governing Council Of The University Of Toronto Quantization for neural network computation
US11748251B2 (en) 2021-01-08 2023-09-05 Microsoft Technology Licensing, Llc Storing tensors in memory based on depth
TWI766777B (zh) * 2021-07-27 2022-06-01 鴻海精密工業股份有限公司 神經網路劃分的方法、電子設備及存儲介質
CN113626769B (zh) * 2021-10-12 2022-01-21 中国人民解放军国防科技大学 面向向量处理器的低位宽数据矩阵向量化转置方法及系统
TWI808000B (zh) * 2022-09-20 2023-07-01 創鑫智慧股份有限公司 矩陣裝置及其操作方法

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5073752A (en) * 1990-04-19 1991-12-17 Picker International, Inc. Discrete fourier transform imaging
US5644517A (en) * 1992-10-22 1997-07-01 International Business Machines Corporation Method for performing matrix transposition on a mesh multiprocessor architecture having multiple processor with concurrent execution of the multiple processors
AU2002243602A1 (en) * 2001-01-19 2002-07-30 U.S. Army Medical Research And Materiel Command A method and apparatus for generating two-dimensional images of cervical tissue from three-dimensional hyperspectral cubes
US6877020B1 (en) * 2001-12-31 2005-04-05 Apple Computer, Inc. Method and apparatus for matrix transposition
US7564933B2 (en) * 2004-11-30 2009-07-21 The Regents Of The University Of California Method and system for near optimal iterative detection of the 2-dimensional ISI channel
US20060190517A1 (en) * 2005-02-02 2006-08-24 Guerrero Miguel A Techniques for transposition of a matrix arranged in a memory as multiple items per word
US7395251B2 (en) * 2005-07-01 2008-07-01 International Business Machines Corporation Neural networks for prediction and control
US8031954B2 (en) * 2007-04-26 2011-10-04 Canon Kabushiki Kaisha Image encoding apparatus and control method thereof using prediction encoding and pixel classification
US8812285B2 (en) * 2010-08-31 2014-08-19 The Regents Of The University Of California Designing digital processors using a flexibility metric
CN102437858B (zh) * 2011-08-31 2013-11-06 北京理工大学 一种卷积码编码器结构的改进方法
EP3035249B1 (de) 2014-12-19 2019-11-27 Intel Corporation Verfahren und Vorrichtung für verteilte und kooperative Berechnung in künstlichen neuronalen Netzen
US10049322B2 (en) 2015-05-21 2018-08-14 Google Llc Prefetching weights for use in a neural network processor
US10083395B2 (en) 2015-05-21 2018-09-25 Google Llc Batch processing in a neural network processor
US10438117B1 (en) 2015-05-21 2019-10-08 Google Llc Computing convolutions using a neural network processor
US9747546B2 (en) 2015-05-21 2017-08-29 Google Inc. Neural network processor
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
CN105068546B (zh) 2015-07-31 2017-06-16 哈尔滨工业大学 一种卫星编队相对轨道自适应神经网络构形包含控制方法
US10325006B2 (en) * 2015-09-29 2019-06-18 International Business Machines Corporation Scalable architecture for analog matrix operations with resistive devices
CN105913117A (zh) * 2016-04-04 2016-08-31 北京工业大学 一种计算机智能识别的相关神经网络方法
CN106021188B (zh) * 2016-05-11 2019-04-12 广州广电运通金融电子股份有限公司 浮点矩阵求逆的并行硬件架构和并行计算方法
CN106022468B (zh) * 2016-05-17 2018-06-01 成都启英泰伦科技有限公司 人工神经网络处理器集成电路及该集成电路的设计方法

Also Published As

Publication number Publication date
US20210224641A1 (en) 2021-07-22
TW201945983A (zh) 2019-12-01
GB2562572A (en) 2018-11-21
EP3761235B1 (de) 2024-05-01
WO2018165514A1 (en) 2018-09-13
US20240152740A1 (en) 2024-05-09
TWI765168B (zh) 2022-05-21
CN115271049A (zh) 2022-11-01
EP3373210A1 (de) 2018-09-12
DK3373210T3 (da) 2020-08-17
TWI671688B (zh) 2019-09-11
EP3373210B1 (de) 2020-06-17
DE102018105457A1 (de) 2018-09-13
US10909447B2 (en) 2021-02-02
EP3761235A1 (de) 2021-01-06
US11704547B2 (en) 2023-07-18
CN108573304A (zh) 2018-09-25
US20180260690A1 (en) 2018-09-13
TW201837792A (zh) 2018-10-16
CN108573304B (zh) 2022-07-26
GB201803806D0 (en) 2018-04-25

Similar Documents

Publication Publication Date Title
DE202018101330U1 (de) Transportieren von Matrizen neuronaler Netze in Hardware
DE102017121887A1 (de) Ausführen von Kerndurchschreiten in Hardware
DE102017121257A1 (de) Ausführen von Mittelwert-Poolbildung in Hardware
DE112016002296T5 (de) Vektor-recheneinheit in einem neuronalen netzwerkprozessor
DE112016002292T5 (de) Stapel-verarbeitung in einem neuronalen netzwerkprozessor
DE102017125049A1 (de) Transponieren in einem Matrix-Vektor-Prozessor
DE112016002298T5 (de) Vorabruf von gewichten zur verwendung in einem neuronalen netzwerkprozessor
DE202016107436U1 (de) Neuronaler Netzwerkprozessor
DE102018105198A1 (de) Tiefenverkettung unter Verwendung einer Matrixberechnungseinheit
DE102020101187A1 (de) Winograd-transformationsfaltungsoperation für neuronale netze
DE202016107446U1 (de) Rotation von Daten für Berechnungen in neuronalen Netzwerken
DE202016107443U1 (de) Berechnen von Faltungen mithilfe eines neuronalen Netzwerkprozessors
DE112019000336T5 (de) Massiv parallele neuronale inferenz-datenverarbeitungselemente
DE102017115519A1 (de) Superpixel-Verfahren für faltende neuronale Netze
DE202017007641U1 (de) Training von maschinellen Lernmodellen auf mehrere maschinelle Lernaufgaben
DE112018006189T5 (de) Robuste gradienten-gewichtskomprimierungsschemata für deep-learning-anwendungen
DE202017105403U1 (de) Befehlssatzarchitektur für neuronale Netze
DE202018100938U1 (de) Parallelverarbeitung von Reduktions- und Rundsendeoperationen an großen Datensätzen nichtskalarer Daten
DE112019002981T5 (de) Parallelberechnungsarchitektur mit rekonfigurierbarer kernebenen- und vektorebenen-parallelität
DE102020210965A1 (de) Neuronales graph-transformer-netz-kraftfeld für die vorhersage atomarer kräfte und energien bei moleküldynamiksimulationen
DE112019000676T5 (de) Zentraler scheduler und anweisungszuteiler für einen neuronalen inferenzprozessor
DE102019126719A1 (de) Energieeffiziente Speichersysteme und Verfahren
DE112017008040T5 (de) Rechenoperationsschaltung, rechenoperationsverfahren und programm
DE112020007010T5 (de) Inferenzmaschinen-schaltungsarchitektur
DE102022100920A1 (de) Compute-in-memory-akkumulator

Legal Events

Date Code Title Description
R207 Utility model specification
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