resource:github上备份的包括ipad标注的pdf版本。
作者是DJI的Xiaofan Lin、Cong Zhao和Wei Pan,这篇文章也算是BNN领域的开创性&代表性作品了。
Summary:BNN领域非常具有代表性的作品,提出使用线性组合的weights&activations来近似FP counterpart,在早期就取得了非常高的成绩(~65),但是代价是比较显著地增加了运算数和存储空间消耗。值得注意的是,这里对activation的量化就已经出现了zero point shifting的思想。此外,这篇文章中还出现了BN merge的思想,将训练后的BN和sign函数组合在一起(所以昨天读的boolnet不是第一篇提出这种设计思想的工作啊0 0)
rating:3.6/5.0
comprehension:4.3/5.0
文章的贡献有:
It is known that binary activation can use spiking response for event-based computation and communication
(consuming energy only when necessary) and therefore is energy-efficient
说对每层的weight有两种近似方法,一种是layerwise,一种是channel-wise,但是后者额外的计算/存储/能量开销太大了,所以本文用的是layerwise的方法。
用这种方法来近似FP weights(公式太难打了,偷懒截图了乌乌):
公式(1)用数值方法也能求解出来base和\alpha,但是这样就不能用反向传播(没有深究)更新W了,所以用了下面这种手工定义的方法得到weight base:
其中\(u_i\)既可以是训练的,也可以是定义的(这篇文章里用了人工定义的方式)。得到base之后用求解的方法求出来\(\alpha\)(这里和那篇binarySR一模一样啊,真就硬抄呗/不对,人家还改了加权的东西呢,hh)。
这里似乎没说alpha的取值,但显然是FP的,这不算作弊?
在量化activation之前要clip一下,这里的量化出现了zero point shifting!,而且shift parameter是个可学习的参数:
但是和weights不一样的是,尽管activations的组合也可以用线性回归,但是输入的统计特性在不断变化(因此不能构建之前那种依赖statistics的base),解决的方法是在sign之前先过BN,这样将feature map normalize(有问题诶,训练之后不就不能改变statistics了吗)。而且这里采用可训练的加权系数也是为了"静态"适应变化的输入:
之后用可训练的sign函数以及加权系数把它们串起来。
最后组合之后的样子大概是这样的:
一些技术细节:
QuickAnswer:因为部分利用了幅度信息。
大概可以总结如下:
有一些op可以merge起来进一步减少资源消耗(对!说的就是BN!)。
下面就是把activation的shift和BN中的偏移结合起来的: