数据压缩及模型量化

compression / bit reduction

考量: 压缩比 / 压缩速度 / 解码速度 / 数据失真 (lossy)

机器学习

压缩过程

基于词典的构建办法

词典大小 + 编码后数据 » 原始数据 才值得

词典/编码表 = 领域知识, 可以随数据传输, 也可以认为是传输双方前都明晰的预信息

数据分布假设: 生成/训练时习得的分布和后续应用的分布需一致, 压缩问题不用考虑, 就是要过拟合, 模型问题需考虑.

编码视角

已经给定了词典以及对应词频

编码长度和出现频次负相关

观察: 越是常用词, 越是短语

熵 / H(X): 最优编码的平均输出位宽 (香农第一定理: 无损压缩输出位宽不能低于熵)

哈夫曼(huffman)码: 最优前缀编码 (Kraft不等式)

DEMO TIME

其他编码: 算数编码, 直接编码为一个浮点数, 可理解为词频的CDF数值

entropy encoding

编码理论, 主要考虑通信带宽/纠错等相关问题, 不光考虑最小数据传输

通讯/带宽面向比特(bit), 计算/数据面向字节(byte)

最优词典构建

编码时已知词典加词频, 如何构造词典?

n-gram的所有可行分割后, 找最优编码表

Q: 100层楼梯, 一次迈1~N步, 一共多少中迈法?

所有分法中, 找最小词典大小用于定长编码, 或最小H(X)

DEMO TIME

计算上一般不可行, 如何解决: 分块之, 贪心之

文本可见的数据编码方式 / binary2text

这里提一嘴的目的是, 编码目的不一定是压缩, 也可能是为了表达, 或者冗余纠错

数据压缩算法

方法

压缩算法/格式

其他方法

文件格式

数据库字段压缩手段

列式存储数据库: 减少数据存储量, 此外通过减少IO优化查询速度 (因为IO远慢于解码)

数据块压缩, 同通用压缩方法

图像/视频压缩

图像 = 像素(色彩) * 长 * 宽

色彩

色彩表达

图像压缩算法

常见图像/视频/音频格式

拟合问题 / 模型学习

拟合问题

f / 先验编码表

压缩 / 模型学习 的信念是相信数据一定基于一段代码生成出来的, 逆向的过程

编码器-解码器结构 模型视角

存在合理性 / 信念:

模型压缩手段

数据压缩, 通过增加计算减少存储开销, 模型压缩主要目的一般是计算加速

有损压缩

单减少存储大小角度, 常规压缩办法均可, 尤其对于结构确定, 模型全是参数数值场景, 不过模型参数存储减少本身无太大意义

手段

Quantization:

量化拆解

按照训练时是否感知量化区分

TODO PyTorch DEMO

代码压缩

重构: 压缩, 稳定逻辑流程提取固化复用, 减少代码量, 识别容易变更处, 识别业务模式, 以期修改更灵活, 泛化性更好, 以适应新的功能需求. 领域特化的代码库.

Reference

HOME