084、NPU的随机计算(Stochastic Computing):低精度高鲁棒性
084、NPU的随机计算(Stochastic Computing):低精度高鲁棒性昨晚调试一块边缘NPU板子,跑一个轻量级目标检测模型,死活精度掉到0.3以下。查了三天,最后发现是温度漂移导致模拟计算单元的输出噪声被放大了——这让我想起几年前在FPGA上试过的随机计算方案。当时觉得这玩意儿太“玄学”,现在回头看,某些场景下它反而是最靠谱的解法。从比特流到概率传统NPU里,数据是二进制补码,8位就是8位,每一位权重固定。随机计算(Stochastic Computing,SC)完全换了个思路:用一串随机比特流表示数值,数值大小由比特流中“1”出现的概率决定。比如要表示0.6,就生成一串比特流,其中60%是1,40%是0。这串比特流可以是“1011010011”,也可以是“1100101101”,只要1的比例接近60%就行。这里有个坑:比特流长度决定了精度。10个比特只能表示10%的步进,100个比特能到1%。实际工程中常用1024或4096比特的序列,对应约0.1%的精度分辨率。乘法器:一个与门搞定传统NPU里一个8位乘法器要几百个逻辑门,功耗和面积都大。SC的乘法器就是一个与门——两个比特流做与运算,输出比特流中1的概率等于两个输入概率的乘积。// 随机计算乘法器 - 就一个与门 // 别写复杂了,真的就一个门 wire a, b; // 两个随机比特流 wire product = a b;