Altifigence Academy

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?

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.

q=clip⁡(roundEven⁡(x/s)+z,qmin,qmax)q=\operatorname{clip}(\operatorname{roundEven}(x/s)+z,q_{min},q_{max})

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.

Deine Auswahl gilt für diesen Browser. Du kannst sie jederzeit in der Fußzeile ändern.