Altifigence Academy

6 / 24 · Concept

Échelle et point zéro

Pour sx=0.25, zx=128, quels sont le code de remplissage et la valeur réelle de q=132 ? Quel code de biais représente 0.75 avec sw=0.5 ?

Le code du zéro réel

La quantification affine utilise une échelle positive s et un point zéro entier z. Notre contrat entier arrondit x/s à l’entier le plus proche, choisit l’entier pair en cas d’égalité exacte, ajoute z, puis sature à la plage de stockage. La déquantification interprète un code comme approximativement s(q−z). Projeter des valeurs réelles sur une grille entière perd généralement de l’information.

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

Pour une entrée uint8 avec s=0.25, z=128, le zéro réel est le code 128. Les codes 130 et 126 représentent 0.5 et −0.5. Le code brut de remplissage zéro représenterait au contraire −32. Un tampon stockant des codes bruts doit insérer z pour le remplissage. Un tampon stockant des codes déjà centrés insère l’entier zéro. Repérez ce point de conversion dans le chemin de données.

Produit scalaire détaillé

Centrez les codes d’entrée [130, 126] en soustrayant 128 pour obtenir [2, −2]. Les poids [3, −2] utilisent l’échelle 0.5 et le point zéro zéro. Accumulez 2×3+(−2)×(−2)=10. L’échelle réelle de l’accumulateur est 0.25×0.5=0.125 : le résultat réel vaut donc 1.25. Avec une échelle de sortie 0.25 et un point zéro 128, il devient le code 133. Les points zéro non nuls des poids doivent aussi être soustraits avant la multiplication.

La quantification par tenseur partage une échelle. La quantification des poids par canal nécessite un biais et une conversion de sortie propres à chaque canal. Si deux canaux de sortie ont des échelles de poids 0.5 et 0.25, le code d’accumulateur dix représente respectivement 1.25 et 0.625. La flexibilité logicielle n’établit pas la prise en charge matérielle de l’une ou l’autre configuration.

Quantifier 0.625 à l’échelle 0.25 donne la valeur à mi-chemin 2.5, arrondie à deux, puis au code 130. La déquantification donne 0.5, soit une erreur de −0.125. L’entrée 0.375 correspond aussi à ce code. L’erreur de grille de quantification diffère de l’erreur de saturation : écrêter une entrée hors plage peut dépasser un demi-pas d’échelle. Comparez les règles entières à QuantizeLinear d’ONNX. Nos exercices implémentent volontairement un petit sous-ensemble int8/uint8.

Essayez vous-même

Pour sx=0.25, zx=128, quels sont le code de remplissage et la valeur réelle de q=132 ? Quel code de biais représente 0.75 avec sw=0.5 ?

Lire l’explication

Le remplissage brut est le code 128 et q=132 représente un. L’échelle d’accumulateur vaut 0.125 : le code du biais est donc 0.75/0.125=6.

Votre choix s’applique à ce navigateur. Modifiez-le à tout moment en bas de page.