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?
Le lezioni sono gratuite. Iscriviti per salvare i progressi.
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.
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.