Antworten:
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.
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.
Einige Leute könnten argumentieren , wir verwenden können , int
statt float
in NN wie float
leicht als eine dargestellt werden , int / k
wo k
ein Multiplikationsfaktor sagen wir 10 ^ 9
zB 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 int
der INTEGER
Satz in die Menge fällt, während er floats
in die REAL NUMBER
Menge 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 1
oder 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 int
auf eine große Anzahl skalieren und Impulsalgorithmen normalerweise eine Art von momentum_factor^n
Formeln verwenden, wobei n
die 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 relu
Aktivierung. 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 valued
Funktion. 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):
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]. .
float
viel 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).
+++
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**10
ist falsch.
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 .
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:
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 ...
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 , wo , ist die Binärzahlnäherung, ist der Skalar real, und ist die Funktion, die reelle Zahlen auf die nächste ganze Zahl rundet. Dies definiert eine Supermenge des Konzepts der Festkomma-Arithmetik wegen.
Ganzzahlige Berechnungen wurden auch für viele AI-Anwendungen experimentell untersucht. Dies gibt mehr Optionen:
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 , also in , und . Wählen 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 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.
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.