7 / 24 · Concetto
Larghezza dell'accumulatore, arrotondamento e saturazione
Diciotto bit con segno sono sufficienti per nove prodotti int8 con segno e bias zero?
Le lezioni sono gratuite. Iscriviti per salvare i progressi.
L'accumulo richiede una propria larghezza
Operandi a otto bit e uscita a otto bit non implicano un accumulatore a otto bit. I codici con segno a otto bit hanno valore assoluto massimo 128. Con punti zero zero e L termini, un limite conservativo del valore assoluto della somma è L×128×128, più il valore assoluto del bias. Scegli una larghezza con segno il cui massimo positivo copra quel limite; il bit di segno occupa un bit.
Calcolo svolto della larghezza
Per C=3 e un kernel 3×3, L=27. Quando entrambi gli operandi sono −128, ogni prodotto è +16384 e la somma è 442368. Diciannove bit con segno arrivano soltanto a 262143. Venti bit arrivano a 524287 e coprono anche una disponibilità di 1000 per il valore assoluto del bias, dando limite 443368. Intervalli degli operandi dimostrati più piccoli possono ridurre la larghezza richiesta, ma pochi ingressi di prova ordinari non possono dimostrare un limite.
I codici senza segno con punto zero zero possono raggiungere 255, quindi l'ipotesi 128 fallisce. Calcola prima A=max(abs(qmin−zx),abs(qmax−zx)) e l'analogo B per i pesi. Usa L×A×B+abs(b). Anche il centramento può richiedere più bit del codice memorizzato.
Fissa l'ordine di conversione dell'uscita
Il moltiplicatore è sx×sw/sy. Con moltiplicatore 0.5 e punto zero di uscita 128, l'accumulatore nove diventa il caso equidistante 4.5, si arrotonda al pari quattro e produce 132. L'accumulatore undici arrotonda 5.5 a sei e produce 134. L'accumulatore −3 arrotonda −1.5 a −2. Troncamento, troncamento verso zero e scorrimento aritmetico a destra differiscono per valori negativi. Gli esercizi usano una routine dedicata di arrotondamento al pari anziché la funzione predefinita del linguaggio.
Per uscita int8, il valore convertito 300 satura a 127 e −300 a −128. Eliminare i bit più alti produrrebbe valori modulari non correlati. Registra i valori prima della limitazione e il numero di saturazioni. Includi nel contratto la posizione di ReLU e la sua rappresentazione dello zero.
Verifica somme grandi positive e negative, equidistanze esatte, entrambi i limiti di saturazione e bias grandi. Confronta intenzionalmente un riferimento esteso con un accumulatore sottodimensionato per rivelare l'overflow. I nostri casi eseguibili rimangono nell'intervallo intero esatto di JavaScript; un riferimento più grande deve anche giustificare la precisione dell'aritmetica dell'ambiente.
Prova tu
Diciotto bit con segno sono sufficienti per nove prodotti int8 con segno e bias zero?
Leggi la spiegazione
Il limite positivo è 9×16384=147456, superiore al massimo a diciotto bit 131071. Diciannove bit con segno arrivano a 262143.