熵编码

详细梳理熵编码

熵编码即编码过程中按熵原理不丢失任何信息的无损编码方式,同时在有损编码中的出现,作为编码器的最后一个流程。
信息熵为信源的平均信息量(不确定性的度量)。常见的熵编码有:香农(Shannon)编码、哈夫曼(Huffman)编码,指数哥伦布编码(Exp-Golomb)和算术编码(arithmetic coding)。
熵编码利用信息论中的熵概念来设计编码方案,以实现更高效的数据表示。虽然深度学习在许多领域都取得了显著的成功,但在熵编码方面,目前并没有广泛采用深度学习的趋势。
原因在于:熵编码方法通常采用较简单的数学模型,例如霍夫曼编码、算术编码等。这些方法在理论上能够接近信息论的极限。

假设有一个随机变量x,它一共有八个可能取值,记为a,b,c,d,e,f,g,h 。当需要将x的取值传输给其它人时,首先需要对x的取值进行二进制编码。例如,可以将这八个状态如下编码:
a:000 b:001 c:010 d:011
e:100 f:101 g:110 h:111
我们用3bits编码了x 的所有取值。这意味着当把x的任意取值发送给其它人时,每次需要3bits来储存信息。
如果x各值均匀分布,则x的熵为:
H(x)=8(18log218)=3
似乎很合理
但如果其概率分布不均匀呢?比如随机变量y的分布为:
12,14,18,116,164,164,164,164
那么发送一千次y,按照原始方法,还需要1000*3bits嘛?能否对数据进行压缩呢?
可以计算y的熵,H(y)=2
通过使用哈夫曼编码:
a:0,b:10,c:110,d:1110,e:111100,f:111101,g:111110,h:111111
这样平均长度为:
avelen=112+...+6164=2
通过哈夫曼编码 发送一千次y只需要2000bits。
此时哈夫曼编码的性能已交达到了理论极限。

我们所优化的Loss=R+λD中R一般也直接用熵来近似比特率。
R(y^)=E(log(py^(y^))
当变换、量化操作结束时,得到的符号及其概率分布已经确定,其熵也确定了,那么它bits rate也确定了,影响损失函数的就只有重构效果(或者说取决于我们所提取的特征以及我们估计的概率分布)。
也就是说取决于 熵模型

posted @   浪矢-CL  阅读(232)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示