接下来依次介绍这两种二值化网络,另外这里说的权重是指网络中的卷积层参数和全连接层参数,因为全连接层可以用卷积层代替,所以接下来我都用卷积层来介绍二值化操作。
Binary-Weight-Networks
首先Binary-weights的目的是将权重W的值都用二值表示,也就是W的值要么是-1,要么是1。这个替代过程贯穿整个forward和backward过程,但是在更新参数时候还是采用原来的权重W,主要是因为更新参数需要的精度比较高。
接下来详细介绍怎么实现和公式推导,公式部分虽然多,但是很简单。一个卷积层的操作可以用I*W表示,I表示输入,维度是c*win*hin,W表示卷积核(或者叫权重),维度是c*w*h。那么当我用二值卷积核B以及一个尺度参数a代替原来的卷积核W,那么就可以得到下面这个式子:
这里有个圆圈里面带加号的符号表示没有乘法的卷积计算。这里:
注意这里a默认是个正数,a和B是相对的,因为如果a和B都取相反数的话,二者相乘的结果不变。前面的B和W表示某一层的卷积操作的写法,因为每一层卷积都包含多个卷积核,因此如果具体到某一层的某个卷积操作,则可以用下面这个式子表示:
下标lk表示第l层的第k个卷积核。这里