TTQ

Trained Ternary Quantization

0 我的总结
  1. 3元组
  2. 3元非对称,除0外均是训练得到
  3. 转换3元时,其阈值是变动的,由max_weight绝对值决定
  4. 探讨了三元中稀疏性对精度的影响,趋近于0(趋紧二元)不好,30~50%较好
1 简介

本文使用了2个全精度尺度系数 W l p W^p_l Wlp W l n W^n_l Wln,把权重全部量化为三元组 { − W l n , 0 , + W l p } \{-W_l^n, 0, +W^p_l\} {Wln,0,+Wlp},而非传统的 { − 1 , 0 , + 1 } \{-1, 0, +1\} {1,0,+1}或者 { − E , 0 , + E } \{-E,0,+E\} {E,0,+E}。后者是固定的而非学习所得到。该论文采用的 W l p W^p_l Wlp W l n W^n_l Wln是通过训练所得到的,和权重一起更新。训练的时候,隐权重的全精度性仍然保留,在测试的时候把全精度权重弃置不用,以此达到压缩、加速之效果。

2 动机

传统方法是把32bit变成1或者2bit,虽然压缩率高,但是这种方法在精确度上表现上不甚优秀。因而考虑采用三元组来使压缩后的精度损失降低一下。

3 相关工作
3.1 BNN

讲的是2015.Lin的工作,使用的是概率方法来把32bits权重变成二值或者三值的权重,具体是这样:
w b ∼ B e r n o u l l i ( w ~ + 1 2 ) × 2 − 1 w^b \sim Bernoulli(\frac{\tilde{w}+1}{2})×2-1 wbBernoulli(2w~+1)×21
w t ∼ B e r n o u l l i ( ∣ w ~ ∣ ) × s i g n ( w ~ ) w^t \sim Bernoulli(|\widetilde{w}|)×sign(\tilde{w}) wtBernoulli(w )×sign(w~)

w ~ \tilde{w} w~这里是表示全精度的权重

BP的时候,因为以上这种表示法造成 w b , w t w^b,w^t wb,wt不能求导,所以就计算伯努利分布的期望的导数。

∂ L ∂ w ~ = ∂ L ∂ w b = ∂ L ∂ w t \frac{\partial L}{\partial \tilde{w}}=\frac{\partial L}{\partial w^b}=\frac{\partial L}{\partial w^t} w~L=wbL=wtL

L代表loss值
Binary表示,可以缩小32倍

3.2 DOREFA-NET

也是binary网络,但是它们的二值化更为简单。
w b = E ( ∣ w ~ ∣ ) × s i g n ( w ~ ) w^b = E(|\tilde w|) \times sign(\tilde w) wb=E(w~)×sign(w~)
梯度算法和上面一样。

3.3 Ternary weight networks (2016 nips)

Li&liu 2016年的论文TWN,通过引入一个0作为第三个量化值,减少了二值化带来的精度损失。使用了对称的阈值 ± △ l ±\triangle_l ±l,来产生一个尺度因数 W l W_l Wl,由 { − W l , 0 , + W l } \{ -W_l,0,+W_l\} {Wl,0,+Wl}来给第 l l l层的权值做量化。

w l t = { W l : w ~ l &gt; △ l 0 : ∣ w ~ l ∣ ≤ △ l − W l : w ~ l &lt; − △ l w_l^t=\left\{ \begin{aligned} W_l: \tilde w_l &gt; \triangle_l \\ 0: |\tilde w_l| ≤ \triangle_l \\ -W_l: \tilde w_l &lt; -\triangle_l \end{aligned} \right. wlt=Wl:w~l>l0:w~llWl:w~l<l

可以看出,其量化精度的重点在于Li的这个方法是怎么确定 W l W_l Wl ± △ l ±\triangle_l ±l的。该方法是通过求解优化问题,使全精度权重与ternary权重的L2距离最小化,从而得出 W l W_l Wl ± △ l ±\triangle_l ±l。具体地:
± △ l = 0.7 × E ( ∣ w ~ l ∣ ) ±\triangle_l=0.7 \times E(|\tilde w_l|) ±l=0.7×E(w~l)
W l = E ( ∣ w ~ l ∣ ) W_l = E(|\tilde w_l|) Wl=E(w~l)
其中这个 i ∈ { i ∣ ∣ w ~ l ∣ &gt; △ } i∈\{ i | |\tilde w_l| &gt; \triangle\} i{iw~l>} (这里TTQ这个论文好像少打了一个|吧)
也是使用等式2去计算梯度的。
这种ternary的方法虽然要比binary多消耗一个bit去进行权重压缩,但是TWN得到了一个非常接近与全精度网络的优秀验证结果(论文声称)。

3.4 Deep compression 深度压缩

2015年Han提出了一个深度压缩方法,通过裁剪网络,kmeans聚类权重,Huffman编码来减少权重的精度。通过一个预先训练好的网络框架,进行fine-tuned来得到低精度的权重。每个权重的assignment(就是类索引标号)建立之后就保持不变,而每个类的centroid值在fine-tuning中进行更新。

4 method
4.1

在这里插入图片描述
方式如图。

  1. 权重除以max_weight,把weight归一化到[-1,1];
  2. 规定阈值 t t t,从而把[-1,1]之间的值变成三元组{-1,0,1}中的一个值。t是个层不变的超参数,设为0.05。
  3. 最后,通过BP两个梯度来进行学习性的量化。BP梯度1是以更新全精度权值的,梯度2更新尺度系数 W l p W^p_l Wlp W l n W^n_l Wln。就是说,前者学习ternary assignments(更新全精度权重的值,从而类别标号的分配会变动,比如原来是-1,后来变成1),后者学ternary values(类别值)。

+1和-1分别是 W l p W^p_l Wlp W l n W^n_l Wln的索引。0就是0。那么就可以这么写:

w l t = { W l p : w ~ l &gt; △ l 0 : ∣ w ~ l ∣ ≤ △ l − W l n : w ~ l &lt; − △ l w_l^t=\left\{ \begin{aligned} W_l^p: \tilde w_l &gt; \triangle_l \\ 0: |\tilde w_l| ≤ \triangle_l \\ -W_l^n: \tilde w_l &lt; -\triangle_l \end{aligned} \right. wlt=Wlp:w~l>l0:w~llWln:w~l<l

这篇paper所谓之创新就在于此处了,其他的paper所定义的quantized weights都是32bit的全精度weight中直接求出来的。而这篇里面是通过学习得到的,是和其他参数一起训练得到的。
至于 w ~ l \tilde w_l w~l以及 W l p W^p_l Wlp W l n W^n_l Wln梯度的求取问题:
梯度2
在这里插入图片描述
梯度1
在这里插入图片描述

4.2

1) △ l = t × m a x ( ∣ w ~ ∣ ) \triangle_l = t \times max(|\tilde w|) l=t×max(w~)
其中对于CIFAR-10上的测试,设t=0.05,层不变
2)对于所有层,维持一个恒定的sparsity r r r(max值的-5%到+5%都变成0)。
通过调整 r r r就可以调整ternary weight network的多种稀疏性。论文通过设定不同的 r r r进行Imagenet里的训练,来探寻这种稀疏性的影响。
实验开展所使用的是TF和Caffe。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值