首先来一段keras dalao Francois Chollet的鸡汤:
make it possible
make it work
make it efficient
make it dependable and invisible
move on to next layer and think about it again
这段鸡汤已经把8-bit量化的需求和阶段已经说得很清楚了:提升算法效率
What is 8 bit
目前DL中大部分都是用32bit float类型进行计算的,bit位数的多少直接限制了数据类型能够表达的数据范围,比如float 32的数据是由1bit表示符号,8bit表示整数部,23位表示分数部组成。
num bits
Min value
Max value
8 bit
-128 (-2^7)
128 (x^7)
16 bit
-32768 (-2^15)
32768(2^15)
32 bit
–2147483648 (-2^31)
–2147483648 (2^31)
用更低位的数值类型意味着更小的数据表示范围和更稀疏的数值,量化的时候就会造成数值精度损失。比如要把float数值量化到int类型,那么首先小数部分会损失,而那些超过int类型能够表达的范围的值也会被压缩到int能够表达的最大或最小值。
Why 8 bit?
那么既然会有精度损失那