Altifigence Academy

6 / 24 · Concetto

Scala e punto zero

Per sx=0.25,zx=128, quali sono il codice di riempimento e il valore reale di q=132? Quale codice del bias rappresenta 0.75 con sw=0.5?

Il codice per lo zero reale

La quantizzazione affine usa una scala positiva s e un punto zero intero z. Il nostro contratto intero arrotonda x/s all'intero più vicino, sceglie l'intero pari in caso di equidistanza esatta, aggiunge z, poi satura all'intervallo di memoria. La dequantizzazione interpreta un codice approssimativamente come s(q−z). Associare valori reali a una griglia intera perde generalmente informazioni.

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

Per ingresso uint8 con s=0.25,z=128, lo zero reale è il codice 128. I codici 130 e 126 rappresentano 0.5 e −0.5. Il codice grezzo zero di riempimento rappresenterebbe invece −32. Un buffer che memorizza codici grezzi deve inserire z per il riempimento. Un buffer che memorizza codici già centrati inserisce l'intero zero. Segna quel punto di conversione nel percorso dati.

Prodotto scalare svolto

Centra i codici di ingresso [130,126] sottraendo 128, ottenendo [2,−2]. I pesi [3,−2] usano scala 0.5 e punto zero zero. Accumula 2×3+(−2)×(−2)=10. La scala reale dell'accumulatore è 0.25×0.5=0.125, quindi il risultato reale è 1.25. Con scala di uscita 0.25 e punto zero 128, diventa codice 133. Anche i punti zero dei pesi diversi da zero devono essere sottratti prima di moltiplicare.

La quantizzazione per tensore condivide una scala. La quantizzazione dei pesi per canale richiede bias e conversione di uscita specifici per canale. Se due canali di uscita hanno scale dei pesi 0.5 e 0.25, il codice dieci dell'accumulatore rappresenta rispettivamente 1.25 e 0.625. La flessibilità software non attesta il supporto hardware per nessuna delle due configurazioni.

Quantizzare 0.625 con scala 0.25 dà il caso equidistante 2.5, che si arrotonda a due e al codice 130. La dequantizzazione dà 0.5, con errore −0.125. Anche l'ingresso 0.375 corrisponde a quel codice. L'errore della griglia di quantizzazione differisce da quello di saturazione: limitare un ingresso fuori intervallo può superare metà passo della scala. Confronta le regole intere con ONNX QuantizeLinear. I nostri esercizi implementano deliberatamente soltanto un piccolo sottoinsieme int8/uint8.

Prova tu

Per sx=0.25,zx=128, quali sono il codice di riempimento e il valore reale di q=132? Quale codice del bias rappresenta 0.75 con sw=0.5?

Leggi la spiegazione

Il riempimento grezzo è codice 128 e q=132 rappresenta uno. La scala dell'accumulatore è 0.125, quindi il codice del bias è 0.75/0.125=6.

La scelta vale per questo browser. Puoi modificarla in qualsiasi momento dal piè di pagina.