Tiefe neuronale Netzwerk, das die Genauigkeit für die Bilderkennung, float oder double?
Neural networks for image recognition) können sehr groß werden.
Es kann Tausende von ein - /hidden-Neuronen, Millionen von verbindungen, welche
kann bis eine Menge von computer-Ressourcen.
Während float allgemein 32bit und Doppel 64bit in c++, Sie haben nicht viel performance-Unterschied in der Geschwindigkeit noch mit Schwimmern können sparen Sie Speicherplatz.
Dass ein neuronales Netz, was ist mit Sigma als Aktivierungs-Funktion,
wenn wir wählen könnten, die Variablen im neuronalen Netzwerk, float oder double
die konnte float zu speichern bis Speicher ohne neuronale Netzwerk nicht in der Lage zu führen?
Während Eingänge und Ausgänge für training/Testdaten können auf jeden Fall schwimmt
da Sie nicht verlangen, double precision, da die Farben im Bild können
nur im Bereich von 0-255 und wenn die normalisierte 0.0-1.0 Skala Einheit Wert wäre
1 /255 = 0.0039~
1. was ist mit verborgenen Neuronen output-Präzision,
wäre es sicher, um Sie schweben zu?
verborgenen neuron die Ausgabe bekommt den Wert von der Summe der vorherigen Schicht neuron die Ausgabe * die Verbindung Gewicht derzeit der Berechnung neuron und dann die Summe, die übergeben wird, in der Aktivierung-Funktion(derzeit Sigma), um die neue Ausgabe. Variable Summe könnte sich verdoppeln, denn Sie könnte sich eine wirklich große Zahl, wenn das Netzwerk groß ist.
2. was über die Verbindung zu gewichten, könnten Sie schwimmt?
während Eingänge und neuron die Ausgänge sind auf den Bereich von 0-1.0 weil von Sigma,
GEWICHTE sind erlaubt, um größer zu sein als das.
Stochastic gradient descent RÜCKFÜHRUNG leidet auf vanishing gradient problem wegen der Aktivierung der Funktion die Ableitung, habe ich beschlossen, nicht zu setzen, dies als eine Frage, was Präzision sollte der Verlauf variabler sein, das Gefühl, zu schweben, einfach nicht genau genug sein, speziell, wenn das Netzwerk ist tief.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit
float32
überall ist in der Regel der sichere erste Wahl für die meisten der neuronale Netzwerk-Anwendungen. GPUs unterstützen derzeit nurfloat32
, so viele Praktizierende stick zufloat32
überall. Für viele Anwendungen, auch 16-bit-floating-point-Werte ausreichend sein könnte. Einige extreme Beispiele zeigen, dass eine hohe Genauigkeit Netze können trainiert werden, mit nur weniger als 2 bits pro Gewicht (https://arxiv.org/abs/1610.00324).Die Komplexität der tief-Netzwerke ist in der Regel begrenzt, nicht durch die Rechenzeit, aber durch die Menge an RAM auf einem single-GPU und den Durchsatz des Speicher-bus. Auch wenn Sie die Arbeit auf die CPU, mit einem kleineren Datentyp noch hilft, den cache effizienter zu gestalten. Sie sind selten begrenzt durch die Maschine Datentyp Präzision.
Du machst es falsch. Sie zwingen das Netzwerk zu lernen, die Größe der input-Daten, wenn es bereits bekannt ist (es sei denn, Sie verwenden eine benutzerdefinierte Gewicht-Initialisierung-Prozedur). Die besten Ergebnisse werden meist erzielt, wenn die input-Daten normalisiert auf den Bereich (-1, 1) oder (0, 1) und die GEWICHTE initialisiert werden, um die Durchschnittliche Leistung der Ebene auf der gleichen Skala. Dies ist eine beliebte Initialisierung Technik: http://andyljones.tumblr.com/post/110998971763/an-explanation-of-xavier-initialization
Wenn die Eingaben im Bereich [0, 255], dann mit einer durchschnittlichen input-als ~ 100, und die GEWICHTE als ~ 1, wird der Aktivierungs-potential (das argument der Aktivierungsfunktion) wird zu ~ 100×N, wo N ist die Anzahl von Schicht-Eingänge, die wahrscheinlich weit Weg in der "flachen" Teil der sigmoid. Also entweder Sie initialisieren Sie Ihre GEWICHTE auf ~ 1/(100×N), oder Sie skalieren Sie Ihre Daten und verwenden alle gängigen Initialisierungs-Methode. Ansonsten ist das Netz haben zu verbringen viel training, Zeit, nur um bringen Sie die GEWICHTE in dieser Größenordnung.
Es ist viel weniger eine Frage der Maschine arithmetische Präzision, aber der Umfang der Ausgaben für jede der Schichten. In der Praxis:
Dieses video sollte hilfreich sein, zu lernen, diese Konzepte, wenn Sie nicht vertraut mit Ihnen.
float32
Werte.Vom wenigsten bits benötigt, für einzelne neuron:
Folgende Unterlagen studiert haben, diese Frage (absteigender chronologischer Reihenfolge):
Matthieu Courbariaux, Itay Hubara, Daniel Soudry, Ran El-Yaniv, Yoshua Bengio
arxiv: http://arxiv.org/abs/1602.02830
Tiefe Lernen mit Begrenzten Numerischen Genauigkeit https://arxiv.org/abs/1502.02551
Beispiel aus Tiefe Lernen mit Begrenzten Numerischen Genauigkeit: