6 / 24 · Konsep
Skala dan titik nol
Untuk sx=0.25,zx=128, berapa kode padding dan nilai riil q=132? Kode bias apa yang mewakili 0.75 dengan sw=0.5?
Pelajaran dapat dibaca gratis. Daftar untuk menyimpan progres.
Kode untuk nol riil
Kuantisasi afin menggunakan skala positif s dan titik nol bilangan bulat z. Kontrak bilangan bulat kita membulatkan x/s ke bilangan bulat terdekat, memilih bilangan genap ketika tepat di tengah, menambahkan z, lalu melakukan saturasi ke rentang penyimpanan. Dekuantisasi menafsirkan kode sebagai sekitar s(q−z). Pemetaan nilai riil ke kisi bilangan bulat umumnya menghilangkan informasi.
Untuk masukan uint8 dengan s=0.25,z=128, nol riil adalah kode 128. Kode 130 dan 126 mewakili 0.5 dan −0.5. Kode padding mentah nol justru mewakili −32. Penyangga yang menyimpan kode mentah harus menyisipkan z untuk padding. Penyangga yang menyimpan kode yang sudah dipusatkan menyisipkan nol bilangan bulat. Tandai titik konversi itu pada jalur data.
Contoh hasil kali titik
Pusatkan kode masukan [130,126] dengan mengurangkan 128, sehingga memperoleh [2,−2]. Bobot [3,−2] menggunakan skala 0.5 dan titik nol nol. Akumulasikan 2×3+(−2)×(−2)=10. Skala riil akumulator adalah 0.25×0.5=0.125, sehingga hasil riilnya 1.25. Dengan skala keluaran 0.25 dan titik nol 128, hasil menjadi kode 133. Titik nol bobot yang bukan nol juga harus dikurangkan sebelum perkalian.
Kuantisasi per tensor berbagi satu skala. Kuantisasi bobot per kanal membutuhkan bias dan konversi keluaran khusus kanal. Jika dua kanal keluaran memiliki skala bobot 0.5 dan 0.25, kode akumulator sepuluh masing-masing mewakili 1.25 dan 0.625. Fleksibilitas perangkat lunak tidak membuktikan dukungan perangkat keras untuk salah satunya.
Kuantisasi 0.625 pada skala 0.25 memberikan nilai tengah 2.5, yang dibulatkan ke dua dan kode 130. Dekuantisasi menghasilkan 0.5, kesalahan −0.125. Masukan 0.375 juga dipetakan ke kode itu. Kesalahan kisi kuantisasi berbeda dari kesalahan saturasi: pemotongan masukan di luar rentang dapat melebihi setengah langkah skala. Bandingkan aturan bilangan bulat dengan ONNX QuantizeLinear. Latihan kita sengaja hanya mengimplementasikan subset kecil int8/uint8.
Coba sendiri
Untuk sx=0.25,zx=128, berapa kode padding dan nilai riil q=132? Kode bias apa yang mewakili 0.75 dengan sw=0.5?
Baca penjelasan
Padding mentah adalah kode 128 dan q=132 mewakili satu. Skala akumulator adalah 0.125, jadi kode bias adalah 0.75/0.125=6.