Warum brauchen wir Floats für die Nutzung neuronaler Netze?

8

Ist es möglich, ein neuronales Netzwerk zu erstellen, das nur Ganzzahlen verwendet, indem die Ein- und Ausgabe jeder Funktion auf [-INT_MAX, INT_MAX] skaliert wird? Gibt es irgendwelche Nachteile?

elimohl
quelle

Antworten:

4

TL; DR

Es ist nicht nur möglich, es wird sogar erledigt und ist im Handel erhältlich . Es ist einfach unpraktisch für eine Ware HW, die ziemlich gut in FP-Arithmetik ist.

Einzelheiten

Es ist definitiv möglich, und Sie könnten für viele Probleme etwas Geschwindigkeit bekommen.

Das Schöne am Gleitkomma ist, dass es funktioniert, ohne dass Sie den genauen Bereich kennen. Sie können Ihre Eingaben auf den Bereich (-1, +1)skalieren (eine solche Skalierung ist ziemlich üblich, da sie die Konvergenz beschleunigt) und sie mit multiplizieren 2**31, sodass sie den Bereich vorzeichenbehafteter 32-Bit-Ganzzahlen verwenden. Das ist gut.

Sie können nicht dasselbe mit Ihren Gewichten machen, da es keine Begrenzung für sie gibt. Sie können davon ausgehen, dass sie im Intervall liegen, (-128, +128)und sie entsprechend skalieren.

Wenn Ihre Annahme falsch war, erhalten Sie einen Überlauf und ein großes negatives Gewicht, wo ein großes positives Gewicht sein sollte oder umgekehrt. Auf jeden Fall eine Katastrophe.

Sie könnten nach Überlauf suchen, aber das ist zu teuer. Ihre Arithmetik wird langsamer als FP.

Sie können von Zeit zu Zeit nach möglichen Überläufen suchen und Korrekturmaßnahmen ergreifen. Die Details können kompliziert werden.

Sie könnten Sättigungsarithmetik verwenden , diese ist jedoch nur in einigen speziellen CPUs implementiert, nicht in Ihrem PC.

Jetzt gibt es eine Multiplikation. Bei Verwendung von 64-Bit-Ganzzahlen funktioniert dies gut, aber Sie müssen eine Summe (mit einem möglichen Überlauf) berechnen und die Ausgabe auf denselben vernünftigen Bereich zurückskalieren (ein weiteres Problem).

Alles in allem ist es mit der schnellen FP-Arithmetik den Aufwand nicht wert.

Es könnte eine gute Idee für einen benutzerdefinierten Chip sein, der Sättigungs-Ganzzahl-Arithmetik mit viel weniger Hardware und viel schneller als FP ausführen kann.


Abhängig davon, welche Ganzzahltypen Sie verwenden, kann es im Vergleich zum Gleitkomma zu einem Genauigkeitsverlust kommen, der möglicherweise von Bedeutung ist oder nicht. Beachten Sie, dass TPU (in AlphaZero verwendet) nur eine 8-Bit-Genauigkeit aufweist.

Maaartinus
quelle
2

Einige Leute könnten argumentieren , wir verwenden können , intstatt floatin NN wie floatleicht als eine dargestellt werden , int / kwo kein Multiplikationsfaktor sagen wir 10 ^ 9zB 0,00005 kann mit 10 ^ 9 durch Multiplikation zu 50000 umgewandelt werden ..

Aus rein theoretischer Sicht : Dies ist definitiv möglich, führt jedoch zu einem Genauigkeitsverlust, da intder INTEGERSatz in die Menge fällt, während er floatsin die REAL NUMBERMenge fällt . Das Konvertieren von reellen Zahlen in Ints führt zu einem hohen Präzisionsverlust, wenn Sie sehr hohe Genauigkeiten verwenden, z float64. Reelle Zahlen haben eine unzählige Unendlichkeit, während ganze Zahlen eine zählbare Unendlichkeit haben, und es gibt ein bekanntes Argument namens Cantors Diagonalisierungsargument, das dies beweist. Hier ist eine schöne Illustration davon. Nachdem Sie den Unterschied verstanden haben, werden Sie intuitiv verstehen, warum die Konvertierung von Ints in Float nicht haltbar ist.

Aus praktischer Sicht: Die bekannteste Aktivierungsaktivierungsfunktion ist die Sigmoidaktivierung (Tanh ist ebenfalls sehr ähnlich). Die Haupteigenschaft dieser Aktivierungen ist, dass sie Zahlen zwischen 0 and 1oder quetschen -1 and 1. Wenn Sie Gleitkomma durch Multiplikation mit einem großen Faktor in eine Ganzzahl konvertieren, was fast immer zu einer großen Zahl führt, und diese an eine solche Funktion übergeben, ist die resultierende Ausgabe immer fast eines der Extremitäten (dh 1 or 0).

Bei Algorithmen können Algorithmen, die der Backpropagation mit Impuls ähneln, nicht ausgeführt werden int. Dies liegt daran, dass Sie sich das Ergebnis vorstellen können, wenn Sie das intauf eine große Anzahl skalieren und Impulsalgorithmen normalerweise eine Art von momentum_factor^nFormeln verwenden, wobei ndie Anzahl der bereits iterierten Beispiele ist momentum_factor = 100 and n = 10.

Der einzig mögliche Ort, an dem die Skalierung funktionieren könnte, ist die reluAktivierung. Die Probleme bei diesem Ansatz bestehen darin, dass relativ hohe Fehler auftreten, wenn die Daten wahrscheinlich nicht sehr gut in dieses Modell passen.

Schließlich: Alles, was NNs tun, ist eine ungefähre real valuedFunktion. Sie können versuchen, diese Funktion zu vergrößern, indem Sie sie mit einem Faktor multiplizieren. Wenn Sie jedoch von einer reellen Funktion zu einer ganzen Zahl wechseln, stellen Sie die Funktion im Grunde genommen als eine Reihe von dar steps. So etwas passiert (Bild nur zu Darstellungszwecken): Geben Sie hier die Bildbeschreibung ein

Sie können das Problem hier deutlich sehen, jede Binärzahl stellt einen Schritt dar. Um eine bessere Genauigkeit zu erzielen, müssen Sie die Binärschritte innerhalb einer bestimmten Länge erhöhen, was in Ihrem Problem zu einem sehr hohen Grenzwert führt [-INT_MAX, INT_MAX]. .

DuttaA
quelle
2
+1 für Cantors Diagonalisierungsreferenz
Andrew Butler
1
@ AndrewButler -1 aus dem gleichen Grund. Es ist ein interessanter Beweis, hat aber absolut nichts mit Computerarithmetik zu tun (die sich nur mit endlichen Mengen befasst, selbst im Fall von FP).
Maaartinus
Beachten Sie, dass Gleitkommazahlen einige Bits für den Exponenten verwenden, was bedeutet, dass ein 32-Bit floatviel weniger genau ist als ein 32-Bit int(der Quantisierungsfehler in Ihrem Bild ist für Float 256-mal größer). Das einzige Problem bei der Skalierung ist, dass es für viele Zwischenergebnisse keine gute Skalierung gibt. Sie verschwenden also entweder Bits oder riskieren einen Überlauf (der das Lernen völlig schädigt) oder verhindern oder prüfen auf Überlauf (verlieren zu viel Zeit).
Maaartinus
@maaartinus Obwohl der Benutzer 'float' erwähnte, nahm ich es als reelle Zahl an, da es nirgendwo in der Frage erwähnt wird. Das Bild diente nur zu Darstellungszwecken, und wenn man über float64 hinausgeht, gibt es decimal128 und es gibt keine Hardware Einschränkungen, die uns davon
abhalten
@DuttaA Mein Punkt ist, dass wir nur mit einer Annäherung an eine reelle Zahl arbeiten können, und das ist alles, was wir brauchen. Sehr oft reichen ein paar Bits Präzision aus, Googles TPU hat nur 8 Bits und ist eine ganze Zahl. Sie können also eine beliebige Genauigkeit wählen, aber wenn keine HW-Unterstützung für etwas anderes als erweitertes Double (80 Bit) vorhanden ist, wird es viel langsamer. Und wenn Sie möchten, können Sie auch beliebig lange Ganzzahlen verwenden. +++Für mich scheint das Bild einen Fehler nahezulegen, der spezifisch für die Verwendung von Ganzzahlen ist und irreführend ist. +++Ich verstehe nicht, dass Sie darüber streiten gradient_history^n. Der Umgang mit 100**10ist falsch.
Maaartinus
2

Gleitkomma-Hardware

Es gibt drei gebräuchliche Gleitkommaformate, die verwendet werden, um reelle Zahlen zu approximieren, die in digitalen arithmetischen Schaltungen verwendet werden. Diese sind in IEEE 754 definiert, einem Standard, der 1985 mit einer Überarbeitung im Jahr 2008 übernommen wurde. Diese Zuordnungen von reellen Zahlendarstellungen für bitweise Layouts werden in CPUs, FPUs, DSPs und GPUs entweder in Hardware, Firmware oder auf Gate-Ebene entworfen Bibliotheken 1 .

  • Binär 32 hat eine 24-Bit-Mantisse und einen 8-Bit-Exponenten
  • Binär 64 hat eine 53-Bit-Mantisse und einen 11-Bit-Exponenten
  • Binär 128 hat eine 113-Bit-Mantisse und einen 15-Bit-Exponenten 2

Faktoren bei der Auswahl numerischer Darstellungen

Jedes dieser Signale kann Signale in der Signalverarbeitung darstellen, und alle wurden in der KI für verschiedene Zwecke in Bezug auf drei Dinge experimentiert:

  • Wertebereich - kein Problem bei ML-Anwendungen, bei denen das Signal richtig normalisiert ist
  • Abwenden der Sättigung des Signals mit Rundungsrauschen - ein zentrales Problem bei der Parametereinstellung
  • Zeit, die erforderlich ist, um einen Algorithmus auf einer bestimmten Zielarchitektur auszuführen

Das Gleichgewicht in der am besten gestalteten KI liegt zwischen diesen beiden letzten Elementen. Im Fall der Rückausbreitung in neuronalen Netzen darf das gradientenbasierte Signal, das sich der gewünschten Korrekturmaßnahme annähert, um auf die Dämpfungsparameter jeder Schicht anzuwenden, nicht mit Rundungsrauschen gesättigt werden. 3

Hardware-Trends bevorzugen Gleitkomma

Aufgrund der Nachfrage bestimmter Märkte und allgemeiner Verwendungen können Skalar-, Vektor- oder Matrixoperationen, die diese Standards verwenden, in bestimmten Fällen schneller sein als Ganzzahlarithmetik. Diese Märkte umfassen ...

  • Regelung (Pilotierung, Zielerfassung, Gegenmaßnahmen)
  • Code-Breaking (Fourier, endlich, Konvergenz, fraktal)
  • Video-Rendering (Filmwiedergabe, Animation, Spiele, VR)
  • Wissenschaftliches Rechnen (Teilchenphysik, Astrodynamik)

Transformationen ersten Grades in Ganzzahlen

Am entgegengesetzten Ende des numerischen Bereichs können Signale als Ganzzahlen (vorzeichenbehaftet) oder nicht negative Ganzzahlen (vorzeichenlos) dargestellt werden.

In diesem Fall ist die Transformation zwischen der Menge von reellen Zahlen, Vektoren, Matrizen, Würfeln und Hyperwürfeln in der Welt von Kalkül 4 und den sie annähernden ganzen Zahlen ein Polynom ersten Grades.

Das Polynom kann dargestellt werden als n=r(eins+b), wo ein0, n ist die Binärzahlnäherung, s ist der Skalar real, und rist die Funktion, die reelle Zahlen auf die nächste ganze Zahl rundet. Dies definiert eine Supermenge des Konzepts der Festkomma-Arithmetik wegenb.

Ganzzahlige Berechnungen wurden auch für viele AI-Anwendungen experimentell untersucht. Dies gibt mehr Optionen:

  • Zweierkomplement 16-Bit-Ganzzahl
  • Nicht negative 16-Bit-Ganzzahl
  • Zweierkomplement 32-Bit-Ganzzahl
  • Nicht negative 32-Bit-Ganzzahl
  • Zweierkomplement 64-Bit-Ganzzahl
  • Nicht negative 64-Bit-Ganzzahl
  • Zweierkomplement 128-Bit-Ganzzahl
  • Nicht negative 128-Bit-Ganzzahl

Beispielfall

Zum Beispiel, wenn Ihre Theorie die Notwendigkeit anzeigt, die reellen Zahlen im Bereich darzustellen [- -π,π]] In einigen Algorithmen können Sie diesen Bereich als nicht negative 64-Bit-Ganzzahl darstellen (wenn dies aus einem algorithmischen und möglicherweise hardwarespezifischen Grund zum Vorteil der Geschwindigkeitsoptimierung funktioniert).

Du weißt, dass [- -π,π]] in der geschlossenen Form (algebraische Beziehung), die aus dem Kalkül entwickelt wurde, muss im Bereich dargestellt werden [0,264- -1]], also in n=r(eins+b), ein=261 und b=260. Wählenein=264π würde wahrscheinlich die Notwendigkeit für mehr verlorene Zyklen bei der Multiplikation schaffen, wenn eine einfache Manipulation des Exponenten der Basis zwei viel effizienter ist.

Der Wertebereich für diese reelle Zahl wäre dann [0, 1100,1001,0000,1111,1101,1010,1010,0010,0010,0001,0110,1000,1100,0010,0011,0101] und die Anzahl von Bits, die verschwendet werden, indem die Beziehung basierend auf Zweierpotenzen beibehalten wird, werden Log24- -lÖG2πDas sind ungefähr 0,3485 Bit. Das ist besser als eine 99% ige Erhaltung der Informationen.

Zurück zur Frage

Die Frage ist gut und hängt von der Hardware und der Domäne ab.

Wie oben erwähnt, entwickelt sich die Hardware kontinuierlich in die Richtung, um mit IEEE-Gleitkomma-Vektor- und Matrix-Arithmetik zu arbeiten, insbesondere bei der 32- und 64-Bit-Gleitkomma-Multiplikation. Für einige Domänen und Ausführungsziele (Hardware, Busarchitektur, Firmware und Kernel) kann die Gleitkomma-Arithmetik die Leistungssteigerungen, die in CPUs des 20. Jahrhunderts durch Anwendung der obigen Polynomtransformation ersten Grades erzielt werden können, erheblich übertreffen.

Warum die Frage relevant ist

Wenn im Vertrag der Herstellungspreis des Produkts, der Stromverbrauch sowie die Größe und das Gewicht der Leiterplatte niedrig gehalten werden müssen, um in bestimmte Verbraucher-, Luftfahrt- und Industriemärkte einzutreten, können die kostengünstigen CPUs verlangt werden. Diese kleineren CPU-Architekturen verfügen standardmäßig nicht über DSPs, und die FPU-Funktionen verfügen normalerweise nicht über eine Hardware-Realisierung der 64-Bit-Gleitkomma-Multiplikation. 5

Umgang mit Nummernkreisen

Wie bereits erwähnt, ist Sorgfalt bei der Normalisierung von Signalen und der Auswahl der richtigen Werte für a und b wichtiger als beim Gleitkomma, bei dem die Verringerung des Exponenten viele Fälle beseitigen kann, in denen die Sättigung bei ganzen Zahlen 6 ein Problem darstellen würde . Eine Vergrößerung des Exponenten kann natürlich auch einen Überlauf automatisch verhindern, natürlich bis zu einem gewissen Punkt.

Bei beiden Arten der numerischen Darstellung ist die Normalisierung ohnehin ein Teil dessen, was die Konvergenzrate und die Zuverlässigkeit verbessert. Daher sollte immer darauf eingegangen werden.

Die einzige Möglichkeit, mit der Sättigung in Anwendungen umzugehen, die kleine Signale erfordern (z. B. mit Gradientenabfall bei der Rückausbreitung, insbesondere wenn die Datensatzbereiche über einer Größenordnung liegen), besteht darin, die Mathematik sorgfältig zu erarbeiten, um dies zu vermeiden.

Dies ist eine Wissenschaft für sich, und nur wenige Menschen verfügen über den Wissensumfang, um Hardware-Manipulationen auf Schaltkreis- und Assemblersprachenebene zusammen mit der linearen Algebra, dem Kalkül und dem Verständnis des maschinellen Lernens zu handhaben. Die interdisziplinären Fähigkeiten sind selten und wertvoll.


Anmerkungen

[1] Bibliotheken für Hardwareoperationen auf niedriger Ebene wie die 128-Bit-Multiplikation werden in Assembler-übergreifender Sprache oder in C mit aktivierter Option -S geschrieben, damit der Entwickler die Maschinenanweisungen überprüfen kann.

[2] Es sei denn, Sie berechnen die Anzahl der Atome im Universum, die Anzahl der Permutationen im möglichen Spielverlauf für das Spiel Go, den Kurs zu einem Landeplatz in einem Krater auf dem Mars oder die Entfernung in Metern, um ein potenzielles Ziel zu erreichen Wenn Sie einen bewohnbaren Planeten um Proxima Centauri drehen, benötigen Sie wahrscheinlich keine größeren Darstellungen als die drei gängigen IEEE-Gleitkomma-Darstellungen.

[3] Rundungsrauschen entsteht natürlich, wenn sich digitale Signale Null nähern und die Rundung des niedrigstwertigen Bits in der digitalen Darstellung beginnt, chaotisches Rauschen mit einer Größe zu erzeugen, die sich der des Signals nähert. In diesem Fall ist das Signal in diesem Rauschen gesättigt und kann nicht zur zuverlässigen Kommunikation des Signals verwendet werden.

[4] Die geschlossenen Formen (algebraische Formeln), die in softwaregesteuerten Algorithmen realisiert werden sollen, ergeben sich aus der Lösung von Gleichungen, die normalerweise Differentiale beinhalten.

[5] Tochterplatinen mit GPUs sind in nicht-terrestrischen Märkten und Verbrauchermärkten oft zu teuer, stromhungrig, heiß, schwer und / oder verpackungsunfreundlich.

[6] Das Nullstellen von Rückkopplungen wird in dieser Antwort übersprungen, da es auf eines von zwei Dingen hinweist: (A) Perfekte Konvergenz oder (B) Schlecht aufgelöste Mathematik.

Douglas Daseeco
quelle
0

Dies ist im Prinzip möglich, aber am Ende emulieren Sie Gleitkomma-Arithmetik mit Ganzzahlen an mehreren Stellen, sodass es für den allgemeinen Gebrauch unwahrscheinlich ist, dass es effizient ist. Training ist wahrscheinlich ein Problem.

Wenn die Ausgabe einer Ebene auf [-INT_MAX, INT_MAX] skaliert ist, müssen Sie diese Werte mit Gewichten multiplizieren (wobei Sie auch Ganzzahlen mit einem Bereich sein müssen, der groß genug ist, damit das Lernen reibungslos verläuft) und sie zusammenfassen. und dann in eine nichtlineare Funktion einspeisen.

Wenn Sie sich nur auf Ganzzahloperationen beschränken, müssen Sie mehrere Ganzzahlen verarbeiten, um High / Low-Wörter in einem größeren Int-Typ darzustellen, den Sie dann skalieren müssen (wodurch eine Ganzzahldivision mit mehreren Wörtern eingeführt wird). Wenn Sie dies getan haben, ist es unwahrscheinlich, dass die Verwendung von Ganzzahlarithmetik von großem Nutzen ist. Obwohl es vielleicht immer noch möglich ist, abhängig vom Problem, der Netzwerkarchitektur und Ihrer Ziel-CPU / GPU usw.

Es gibt Fälle von funktionierenden neuronalen Netzen, die in der Bildverarbeitung mit nur 8-Bit-Gleitkomma verwendet werden (nach dem Training heruntergerechnet) . Es ist also definitiv möglich, einige NNs zu vereinfachen und zu approximieren. Ein ganzzahliger NN, der von einem vorab trainierten 32-Bit-fp abgeleitet ist, kann in bestimmten eingebetteten Umgebungen möglicherweise eine gute Leistung bieten. Ich fand dieses Experiment auf einem PC-AMD-Chip, der selbst bei der PC-Architektur eine geringfügige Verbesserung zeigte. Auf Geräten ohne dedizierte fp-Verarbeitung sollte die relative Verbesserung noch besser sein.

Neil Slater
quelle
Eine Ganzzahldivision mit mehreren Wörtern würde sicherlich die Leistung beeinträchtigen, aber niemand sollte jemals etwas dagegen unternehmen. Eine solche Skalierung erfolgt einfach durch Bitverschiebung, die möglicherweise zwei Größenordnungen schneller ist.
Maaartinus
Hallo Neil! Haben Sie Zeit, um eine Antwort auf diese Frage zu geben: ai.stackexchange.com/questions/20871/… ?
4.