6 / 24 · Konzept
Skalierung und Nullpunkt
Welche Auffüllkodierung und welchen reellen Wert von q=132 erhalten Sie bei sx=0.25,zx=128? Welcher Biascode stellt 0.75 bei sw=0.5 dar?
Lektionen sind frei lesbar. Schreibe dich ein, um deinen Fortschritt zu speichern.
Der Code für reelle Null
Affine Quantisierung verwendet eine positive Skalierung s und einen ganzzahligen Nullpunkt z. Unsere Ganzzahlregeln runden x/s auf die nächste Ganzzahl, wählen bei exaktem Gleichstand die gerade Ganzzahl, addieren z und sättigen dann auf den Speicherbereich. Dequantisierung interpretiert einen Code näherungsweise als s(q−z). Die Abbildung reeller Werte auf ein Ganzzahlgitter verliert im Allgemeinen Informationen.
Bei uint8-Eingabe mit s=0.25,z=128 ist reelle Null Code 128. Codes 130 und 126 stellen 0.5 und −0.5 dar. Der rohe Auffüllcode Null würde dagegen −32 darstellen. Ein Puffer mit rohen Codes muss zum Auffüllen z einsetzen. Ein Puffer mit bereits zentrierten Codes setzt ganzzahlige Null ein. Markieren Sie diesen Umwandlungspunkt im Datenpfad.
Durchgerechnetes Skalarprodukt
Zentrieren Sie Eingabecodes [130,126] durch Subtraktion von 128 zu [2,−2]. Gewichte [3,−2] nutzen Skalierung 0.5 und Nullpunkt Null. Akkumulieren Sie 2×3+(−2)×(−2)=10. Die reelle Akkumulatorskalierung ist 0.25×0.5=0.125, also ist das reelle Ergebnis 1.25. Bei Ausgabeskalierung 0.25 und Nullpunkt 128 wird daraus Code 133. Auch von Null verschiedene Gewichtsnullpunkte müssen vor der Multiplikation subtrahiert werden.
Quantisierung pro Tensor teilt eine Skalierung. Gewichtquantisierung pro Kanal benötigt kanalspezifischen Bias und Ausgabeumwandlung. Haben zwei Ausgabekanäle Gewichtsskalierungen 0.5 und 0.25, stellt Akkumulatorcode zehn jeweils 1.25 und 0.625 dar. Softwareflexibilität belegt keine Hardwareunterstützung für eine dieser Anordnungen.
Quantisierung von 0.625 bei Skalierung 0.25 ergibt den Gleichstand 2.5, der zu zwei und Code 130 gerundet wird. Dequantisierung ergibt 0.5, einen Fehler von −0.125. Auch Eingabe 0.375 wird auf diesen Code abgebildet. Quantisierungsgitterfehler und Sättigungsfehler unterscheiden sich: Begrenzung einer Eingabe außerhalb des Bereichs kann eine halbe Skalierungsstufe überschreiten. Vergleichen Sie die Ganzzahlregeln mit ONNX QuantizeLinear. Unsere Übungen implementieren bewusst nur eine kleine int8/uint8-Teilmenge.
Selbst ausprobieren
Welche Auffüllkodierung und welchen reellen Wert von q=132 erhalten Sie bei sx=0.25,zx=128? Welcher Biascode stellt 0.75 bei sw=0.5 dar?
Erklärung lesen
Rohe Auffüllung ist Code 128 und q=132 stellt eins dar. Die Akkumulatorskalierung beträgt 0.125, also ist der Biascode 0.75/0.125=6.