前言
昨天介绍的BinaryConnect提出将浮点权重量化到1bit,提出了完整的量化权重训练/测试流程,并且从带噪声权重的角度来解释了量化权重。但这种方法还有一个缺点,即并没有对激活函数进行量化,所以Bengio大神在2016年发表了这篇Binary Neural Network,论文原文和代码链接见附录。
BNN算法
二值化的方法
二值化方法主要有两种,确定式二值化和随机式二值化。二值化将float类型权重转换为两个值,一个非常简单直接的二值化操作基于符号函数:
其中 w b w_b wb是二值化权重, w w w是实值权重。这是一个确定式的二值化操作,另外一种方案是随机二值化,即以一定的概率更新值:
其中 σ ( x ) = c l i p ( x + 1 2 , 0 , 1 ) = m a x ( 0 , m i n ( 1 , x + 1 2 ) ) \sigma(x)=clip(\frac{x+1}{2},0,1)=max(0,min(1,\frac{x+1}{2})) σ(x)=clip(