基于Pytorch三值化网络TWN的构建

本文介绍了三值化网络TWN的原理和实现,包括权值分布、阈值计算和代码实战。TWN通过三值权重提升网络泛化能力,实现模型压缩,并通过阈值和scale参数调整降低计算复杂度。实验证明TWN在Cifar10上的性能,并探讨了可能的优化方向。
摘要由CSDN通过智能技术生成

1. 前言

三是化网络是2016年由Fengfu Li在论文《Ternary Weight Networks》中提出来的,它相比二值化网络具有更好的效果。论文地址如下:https://arxiv.org/abs/1605.04711 。

2. 出发点

首先,论文提出多权值比二值化具有更好的网络泛化能力。论文中提到,在VGG,GoogLeNet 和残留网络等最新的网络体系结构中,最常用的卷积滤波器大小为,如果使用上一节提到的二值权重,有个模板,但如果使用三值权重就有个模板,它的表达能力比二值权重强很多。

另外,在TWN中,每一个权重单元只需要2比特的存储空间。因此,和浮点数相比,TWN实现了高达16倍的模型压缩率。在计算能力方面,和二值化网络相比,TWN拥有额外的零值,但是零值不增加任何的乘法运算。因此,TWN中的乘法累加操作次数和二值化网络相比保持不变。

3. 三值化网络的原理

3.1 问题引入

首先,论文认为权值的分布接近于一个正态分布和一个均匀分布的组合。然后,论文提出使用一个scale参数去最小化三值化前的权值和三值化之后的权值的L2距离。

参数三值化的公式如下:

参数三值化公式

即我们选取一个阈值,大于这个阈值的权重就变成1,小于这个阈值的权重就变成-1,中间的为0。然后这个阈值是根据权重分布的先验知识计算出来的。这篇论文最核心的部分就是阈值和scale参数alpha的推导过程。

在参数三值化后,论文使用了一个scale参数(用表示)让三值化后的参数更接近三值化之前的参数,具体如下:

评估三值化后的参数和三值化之前的参数的差距

其中,表示卷积核的数量,权重估计。

然后,三维网络的前向传播过程如下:

三值网络的前向传播过程

其中,是输入的矩阵块,是卷积运算或者内积运算,是非线性激活函数,是积或卷积运算,无任何乘法。是输出的矩阵块。

前向传播过程

可以看到,在把乘到前面以后,我们就可以把复杂的乘法运算变成了简单的加法运算,从而加快了整个训练速度。

3.2 基于阈值的三值函数近似解

现在我们的目标是求解等式(1),然后我们容易知道上面的等式不仅仅和有关,还和有关,而是根据等式三来控制的,即:

给定一个就能确定一组参数,有了等式(3)之后原始的问题即等价于:

其中并且表示在里面的元素个数。是一个只和有关的一个独立常量。因此,对于任意的给定的,可选参数可以表示为如下式子:

通过将带入到等式4中,我们获得了一个独立的等式,可以表示为:

由于这个式子需要迭代才能得到解(即不断的调和),会造成训练速度过慢,所以如果可以提前预测权重的分布,就可以通过权重分布大大减少阈值计算的计算量。文中推导了正态

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值