7 / 24 · Konsep
Lebar akumulator, pembulatan, dan saturasi
Apakah delapan belas bit bertanda cukup untuk sembilan hasil perkalian int8 bertanda dengan bias nol?
Pelajaran dapat dibaca gratis. Daftar untuk menyimpan progres.
Akumulasi membutuhkan lebarnya sendiri
Operand delapan bit dan keluaran delapan bit tidak menyiratkan akumulator delapan bit. Kode delapan bit bertanda memiliki magnitudo maksimum 128. Dengan titik nol nol dan L suku, batas magnitudo jumlah konservatif adalah L×128×128 ditambah magnitudo bias. Pilih lebar bertanda yang nilai maksimum positifnya mencakup batas itu; bit tanda menggunakan satu bit.
Contoh perhitungan lebar
Untuk C=3 dan kernel 3×3, L=27. Ketika kedua operand −128, setiap hasil perkalian +16384 dan jumlahnya 442368. Sembilan belas bit bertanda hanya mencapai 262143. Dua puluh bit mencapai 524287 dan juga mencakup kelonggaran magnitudo bias 1000, sehingga batasnya 443368. Rentang operand lebih kecil yang telah dibuktikan dapat mengurangi lebar yang diperlukan, tetapi beberapa masukan uji biasa tidak dapat membuktikan batas.
Kode tak bertanda dengan titik nol nol dapat mencapai 255, sehingga asumsi 128 gagal. Pertama hitung A=max(abs(qmin−zx),abs(qmax−zx)) dan B yang serupa untuk bobot. Gunakan L×A×B+abs(b). Pemusatan itu sendiri dapat memerlukan lebih banyak bit daripada kode tersimpan.
Tetapkan urutan konversi keluaran
Pengalinya sx×sw/sy. Dengan pengali 0.5 dan titik nol keluaran 128, akumulator sembilan menjadi nilai tengah 4.5, dibulatkan ke empat genap, dan menghasilkan 132. Akumulator sebelas membulatkan 5.5 ke enam dan menghasilkan 134. Akumulator −3 membulatkan −1.5 ke −2. Pemotongan, pemotongan menuju nol, dan pergeseran kanan aritmetika berbeda untuk nilai negatif. Latihan menggunakan rutin khusus pembulatan ke terdekat genap, bukan fungsi pembulatan bawaan bahasa.
Untuk keluaran int8, hasil konversi 300 tersaturasi ke 127 dan −300 ke −128. Membuang bit tinggi akan membuat nilai berputar ke nilai yang tidak berkaitan. Catat nilai sebelum pemotongan dan jumlah saturasi. Sertakan posisi ReLU dan representasi nolnya dalam kontrak.
Verifikasi jumlah positif dan negatif besar, nilai tengah tepat, kedua batas saturasi, dan bias besar. Bandingkan secara sengaja acuan lebar dengan akumulator terlalu kecil untuk mengungkap overflow. Fixture yang dapat dijalankan tetap berada dalam rentang bilangan bulat JavaScript yang tepat; acuan lebih besar juga harus membenarkan presisi aritmetika bahasa yang digunakan.
Coba sendiri
Apakah delapan belas bit bertanda cukup untuk sembilan hasil perkalian int8 bertanda dengan bias nol?
Baca penjelasan
Batas positifnya 9×16384=147456, di atas maksimum delapan belas bit 131071. Sembilan belas bit bertanda mencapai 262143.