网络压缩-1、低秩分解

网络压缩(network compression)
1、低秩近似 (低秩分解 Low Rank Expansion)

上图展示了低秩分解的基本思想:
将原来大的权重矩阵分解成多个小的矩阵,
右边的小矩阵的计算量都比原来大矩阵的计算量要小,
这是低秩分解的基本出发点。

奇异值分解SVD、CP分解、Tucker分解、Tensor Train分解和Block Term分解 用低秩矩阵近似原有权重矩阵。
例如,可以用SVD得到原矩阵的最优低秩近似, 或用Toeplitz矩阵配合Krylov分解近似原矩阵。

SVD分解:
全连接层的权重矩阵记作 W∈Rm×n ,首先对 W 进行 SVD 分解,如下:

W=USV转置
为了能够用两个较小的矩阵来表示 W ,我们可以取奇异值的前 K 个分量。
于是,W可以通过下式重建:

W^=U^S^V^T,其中U^∈Rm×kV^∈Rn×k
我们唯一需要保存的就是3个比较小的矩阵 U,S,V ,我们可以简单算一下压缩比为 mn/k(m+n+1)

矩阵的秩概念上就是线性独立的纵列(或者横列)的最大数目。 行秩和列秩在线性代数中可以证明是相等的,例如:
3*3的矩阵如下,则 行秩 == 列秩 == 秩 ==3
1 2 3
4 5 6
7 8 9

1*3的矩阵如下,则 行秩== 列址 == 秩 ==1
[1 2 3] 
3*1的矩阵如下,则 行秩== 列址 == 秩 ==1
[1] [2] [3] 
 低秩分解,这个名字虽然唬人, 实际上就是把较大的卷积核分解为两个级联的行卷积核和列卷积核。 常见的就是一个3*3的卷积层,替换为一个3*1的卷积层加上一个1*3的卷积核。 容易计算得,

一个特征图1010,经过33卷积核后得到88的特征图输出, 而替换为低秩后, 则先得到108的特征图然后再得到8*8的特征图。

另外现在越来越多网络中采用1×1的卷积, 而这种小的卷积使用矩阵分解的方法很难实现网络加速和压缩。

a、奇异值分解svd
b、Tucker分解 解决SVD分解中输入的通道S大的问题
c、CP分解加速神经网络的方法
d、块分解
LBCNN 局部二值卷积 卷积稀疏滤波器

猜你喜欢

转载自blog.csdn.net/J_Boom/article/details/87932650