https://www.youtube.com/watch?v=eZdOkDtYMoo&list=PLf7L7Kg8_FNxHATtLwDceyh72QQL9pvpQ&index=16
斯坦福大学-计算机视觉
目录
- 推理算法
- 训练算法
- 推理硬件
- 训练硬件
1 推理算法
- 剪枝
- 权值共享
- 量化
- 低秩估计
- 二元/三元网络
- Winograd变形
1.1 剪枝
- 剪去无用的权值连接
- 步骤:
S1:训练连接
S2:循环(剪枝——恢复精度),达到剪枝率或极限点。
1.2 权重共享
pass
1.3 量化
核心思想:将精确表示转化为仅两位的表示方法。eg:2.09,2.12,1.92,1.87——>2.0。
步骤:
S1:聚类权重
S2:生成映射表
S3:循环(根据映射表来量化权重——更新映射表)
S1&S2:
例如:蓝色方块 2.09, 1.87, 2.12, 1.92使用如kmeans聚类成2.00,用3来映射2.00,并填入cluster index中。可以节省16倍的时间。
Q:如何解决训练问题?
将梯度按组分类,组内相加,再按index填入表中。相加后的梯度再乘上学习率,用于更新之前的映射表。
Q2:权重变化?
量化后权重仅剩16个离散的值,仅用4位就可以表示了。
Q3:可以量化到多少位?(精度明显下降的临界点)
- 卷积层:4位
- 完全连接层:2位
Q4:量化和剪枝在一起用更好吗?
效果:量化+剪枝>剪枝≈量化>SVD
剪枝+量化+sharing+哈夫曼编码可以实现80-90的压缩率!Amazing…(貌似是和全连接的形式一起比较的?)
Q5: 在压缩之前还有什么方法可以形成更紧凑的网络?
A5:SqueezeNet
首先应用1X1的卷积层,融合Input3个通道。
1.4 低秩估计
核心:将复杂的问题分解为子问题。
步骤:原本一步计算,分解成两步,即一层变两层。
S1:用d’个k×k×c的滤波器。(融合感受野内的信息)
S2:再用d个1×1×c的滤波器。(融合不同通道信息)
1.6 二元或三元
思想:训练时,权重使用全精度;推理时,权重量化到3个数;
1.7 winograd变形
思想:将传统的滑动点积的方式变成winograd变形。将卷积核变成和特征图一样大小的,同样也是点积,然后再缩小成输出特征图。这样就理论减少了2.25倍的计算量。
Q疑惑:卷积核是如何扩大,如何等效计算的?
A猜想:难不成是特征图是pad=1,s=3。