数据率失真理论(Rate distortion theory)或称信息率-失真理论(information rate-distortion theory)是信息论的主要分支,其的基本问题可以归结如下:对于一个给定的信源(source, input signal)分布与失真度量,在特定的码率下能达到的最小期望失真是多少;或者为了满足一定的失真限制,可允许的最大码率为何, D D D 定义为失真的符号。

要完全避免失真几乎不可能。处理信号时必须允许有限度的失真﹐可减小所必需的信息率。1959年﹐Claude Shannon 首先发表《逼真度准则下的离散信源编码定理》一文,提出了率失真函数的概念。

我们通常都通过一个失真度量(distortion measure)来衡量一个随机变量以及它的表示(representation)之间的距离。下面以一个例子为开始,介绍具体的率失真理论中的一些定义与定理。


1. 一个例子

假设一个随机变量 X X X,其一个表示定义为 X ^ ( X ) \hat{X}(X) X^(X),若我们使用 R R R个比特(bit)来表示 X X X,每个比特的数值为 0 0 0 1 1 1,那么函数 X ^ \hat{X} X^可以有 2 R 2^R 2R中不同取值,那么我们现在的问题是找到一个 X ^ \hat{X} X^的最优值集(称为再生点(reproduction points)或码点(code points)),而目的是通过最小化定义的一个失真度量得到。

现在我们假设 X ∼ N ( 0 , σ 2 ) X \sim \mathcal{N}\left(0, \sigma^{2}\right) XN(0,σ2),同时假设一个平方误差的失真度量。目的则要通过最小化 E ( X − X ^ ( X ) ) 2 E(X-\hat{X}(X))^{2} E(XX^(X))2 2 R 2^R 2R个不同值中找到最优的 X ^ \hat{X} X^。举一个简单的例子,假设我们现在只能用一个比特来表示,那么 X ^ \hat{X} X^可以有两个不同的取值。由于分布是关于 0 0 0对称的,因此我们将是否 X > 0 X>0 X>0作为两种不同取值的划分标准。为使平方误差达到最小,函数 X ^ \hat{X} X^应该取其所在区域上 X X X的条件均值。将正态分布截断的分布称为半正态分布(Half-normal distribution),其期望为: 2 / π σ {\sqrt {2/\pi}} \sigma 2/π σ,因此有:
X ^ ( x ) = { 2 π σ  if  x ≥ 0 , − 2 π σ  if  x < 0. \hat{X}(x)= \begin{cases}\sqrt{\frac{2}{\pi}} \sigma & \text { if } x \geq 0, \\ -\sqrt{\frac{2}{\pi}} \sigma & \text { if } x<0 .\end{cases} X^(x)=π2 σπ2 σ if x0, if x<0.
而当比特数提升到两个甚至更多之后,区域的划分方法就不再这么简单了,需要将实轴划分为多个区域。但这些区域该如何划分,再生点应该怎样选取?为此,引入关于最优区域划分和再生点选取的两个性质:

  • 给定一个再生点的集合 { X ^ ( w ) } \{\hat{X}(w)\} {X^(w)},通过将源随机变量 X X X映射到最接近它的表示 X ^ ( w ) \hat{X}(w) X^(w)来最小化失真。由这个映射定义的 X X X的区域集称为由再生点定义的Voronoi或Dirichlet划分(partition)。
  • 再生点应该在各自划分到的区域上使条件期望失真最小化。

由上述两个性质可以得到一个简单算法:

  1. 首先从某个再生点集合开始,找到最优的再生区域集(在失真度量下的最邻近的区域);
  2. 再确定出这些区域的相应最优再生点。

迭代重复上述两个步骤,直到算法收敛于失真的一个局部极小值。


2. 一些定义

前面的例子中假设需要量化的是单个随机变量,而通常实际情况中,我们通常假设 n n n个独立同分布的随机变量集合,共需要 n R nR nR比特来表示。

假设某信号源产生的序列(信源序列) X 1 , X 2 , ⋯   , X n ∼ i . i . d . p ( x ) X_1, X_2, \cdots, X_n \stackrel{i.i.d.}{\sim}p(x) X1,X2,,Xni.i.d.p(x),信源序列 X n X^n Xn的编码用 f n ( X n ) ∈ { 1 , 2 , … , 2 n R } f_{n}\left(X^{n}\right) \in\left\{1,2, \ldots, 2^{n R}\right\} fn(Xn){1,2,,2nR}进行表示, X n X^n Xn的译码则用估计形式 X ^ n \hat{X}^n X^n表示。具体如下图所示:

失真函数/度量: 失真函数(distortion function)或失真度量(distortion measure)指从信源空间与再生空间的乘积空间到非负实数集上的映射:
d : X × X ^ → R + d: \mathcal{X} \times \hat{\mathcal{X}} \rightarrow \mathcal{R}^{+} d:X×X^R+
失真函数 d ( x , x ^ ) d(x,\hat{x}) d(x,x^)是用来刻画使用 x ^ \hat{x} x^表示 x x x时的代价度量。

常用的失真函数

  1. 汉明(Hamming)失真
    d ( x , x ^ ) = { 0  当  x = x ^ 1  当  x ≠ x ^ , d(x, \hat{x})= \begin{cases}0 & \text { 当 } x=\hat{x} \\ 1 & \text { 当 } x \neq \hat{x},\end{cases} d(x,x^)={01  x=x^  x=x^,
    其期望 E d ( x , x ^ ) = Pr ( X ≠ X ^ ) Ed(x, \hat{x})=\text{Pr}(X\neq \hat{X}) Ed(x,x^)=Pr(X=X^)。直观上来理解,就是我们只关注原始字母与恢复字母是否相等,若相等,则失真为 0 0 0,若不相等,则失真为 1 1 1(无论多不相等均为 1 1 1)。

  2. 绝对值失真
    d ( x , x ^ ) = ∣ x − x ^ ∣ d(x, \hat{x})=\left|x-\hat{x}\right| d(x,x^)=xx^

  3. 平方误差失真
    d ( x , x ^ ) = ( x − x ^ ) 2 d(x, \hat{x})=(x-\hat{x})^{2} d(x,x^)=(xx^)2
    平方误差失真为最常用的一种失真函数(前面简单例子中所使用的度量)。其优点在于简单,且与最小二乘法联系紧密。但在某些如图像或语音编码等应用中,其并非是一个合适的度量,例如在很多图像与语音的编码中,两个图像或者语音人工看起来是一致的,但实际的平方误差相差会比较大。

序列失真: 序列 x n x^{n} xn x ^ n \hat{x}^{n} x^n的失真定义为:
d ( x n , x ^ n ) = 1 n ∑ i = 1 n d ( x i , x ^ i ) d\left(x^{n}, \hat{x}^{n}\right)=\frac{1}{n} \sum_{i=1}^{n} d\left(x_{i}, \hat{x}_{i}\right) d(xn,x^n)=n1i=1nd(xi,x^i)
这种定义是一种平均值的定义,此外也可以定义为每个字符失真的最大值。

操作意义下信源的率失真码:一个 ( 2 n R , n ) (2^{nR},n) (2nR,n)率失真码(rate distortion code)包括一个编码函数:
f n : X n → { 1 , 2 , … , 2 n R } f_{n}: \mathcal{X}^{n} \rightarrow\left\{1,2, \ldots, 2^{n R}\right\} fn:Xn{1,2,,2nR}
和一个译码(再生)函数:
g n : { 1 , 2 , … , 2 n R } → χ ^ n g_{n}:\left\{1,2, \ldots, 2^{n R}\right\} \rightarrow \hat{\chi}^{n} gn:{1,2,,2nR}χ^n
这个 ( 2 n R , n ) (2^{nR},n) (2nR,n)码的失真定义为
D = E ⁡ d ( X n , g n ( f n ( X n ) ) ) D=\operatorname{E}d\left(X^{n}, g_{n}\left(f_{n}\left(X^{n}\right)\right)\right) D=Ed(Xn,gn(fn(Xn)))
其中所取的期望是针对 X X X的概率分布而言,有:
D = ∑ x n p ( x n ) d ( x n , g n ( f n ( x n ) ) ) D=\sum_{x^{n}} p\left(x^{n}\right) d\left(x^{n}, g_{n}\left(f_{n}\left(x^{n}\right)\right)\right) D=xnp(xn)d(xn,gn(fn(xn)))
n n n元组 g n ( 1 ) , g n ( 2 ) , … , g n ( 2 n R ) g_{n}(1), g_{n}(2), \ldots, g_{n}\left(2^{n R}\right) gn(1),gn(2),,gn(2nR) 定义为 X ^ n ( 1 ) , … , X ^ n ( 2 n R ) \hat{X}^{n}(1), \ldots, \hat{X}^{n}(2^{n R}) X^n(1),,X^n(2nR),称为码簿(codebook), f n − 1 ( 1 ) , … , f n − 1 ( 2 n R ) f_{n}^{-1}(1), \ldots, f_{n}^{-1}\left(2^{n R}\right) fn1(1),,fn1(2nR)为分配区域(assignment regions),

下面为了刻画如何尽可能优的进行传输,提出了几个概念:

  • 若存在一组率失真编码 ( 2 n R , n ) (2^{nR}, n) (2nR,n),使得
    lim ⁡ n → ∞ E d ( X n , g n ( f n ( X n ) ) ) ⩽ D \lim _{n \rightarrow \infty} E d\left(X^{n}, g_{n}\left(f_{n}\left(X^{n}\right)\right)\right) \leqslant D nlimEd(Xn,gn(fn(Xn)))D
    则称率失真对 ( R , D ) (R, D) (R,D)可达的

  • 信源的率失真区域是所有可达率失真对 ( R , D ) (R, D) (R,D)的闭包(Closure)。

  • 率失真函数(rate distortion function):对于给定的一个失真度 D D D,率失真函数 R ( D ) R(D) R(D)定义为:
    R ( D ) = inf ⁡ { R : ( R , D ) ∈  率失真区域  } , R(D)=\inf \{R:(R, D) \in \text { 率失真区域 }\}, R(D)=inf{R:(R,D) 率失真区域 },
    直观上理解就是在信源序列与再生序列的失真不超过 D D D的前提下,最小可能的码率(信源最大可能的压缩率)。

  • 失真率函数(distortion rate function):给定一个码率 R R R,定义失真率函数 D ( R ) D(R) D(R)为:
    D ( R ) = inf ⁡ { D : ( R , D ) ∈  率失真区域  } , D(R)=\inf \{D:(R, D) \in \text { 率失真区域 }\}, D(R)=inf{D:(R,D) 率失真区域 },
    含义为:在给定码率(压缩率) R R R条件下所能达到的最小失真。


下面我们通过引入互信息的概念,给出一种可计算形式的表达。互信息 I ( X ; X ^ ) I(X;\hat{X}) I(X;X^)的含义是 x ^ \hat{x} x^究竟代表了多少 x x x中的信息,定义如下:
I ( X ; X ^ ) = ∑ x ∈ X , x ^ ∈ X ^ p ( x , x ^ ) log ⁡ ( p ( x , x ^ ) p ( x )   p ( x ^ ) ) I(X;\hat{X})=\sum _{x\in \mathcal{X}, \hat{x}\in \mathcal{\hat{X}}}p(x,\hat{x})\log {\left({\frac {p(x,\hat{x})}{p(x)\,p(\hat{x})}}\right)} I(X;X^)=xX,x^X^p(x,x^)log(p(x)p(x^)p(x,x^))

而后我们将编码器与解码器看做一个整体,称为熵压缩编码器(类似信道的设置),其转移概率记为 q ( x ^ ∣ x ) q(\hat{x}|x) q(x^x),对一个给定的信源随机变量 X X X,服从概率分布 p ( x ) p(x) p(x),此时输入与输出的平均失真可以记为
E d ( X , X ^ ) = ∑ x ∈ X , x ^ ∈ X ^ p ( x , x ^ ) d ( x , x ^ ) = ∑ x ∈ X , x ^ ∈ X ^ p ( x ) q ( x ^ ∣ x ) d ( x , x ^ ) ⩽ D E d(X, \hat{X})=\sum_{x \in \mathcal{X}, \hat{x} \in \hat{\mathcal{X}}} p(x, \hat{x}) d(x, \hat{x}) = \sum_{x \in \mathcal{X}, \hat{x} \in \hat{\mathcal{X}}} p(x) q(\hat{x}|x) d(x, \hat{x}) \leqslant D Ed(X,X^)=xX,x^X^p(x,x^)d(x,x^)=xX,x^X^p(x)q(x^x)d(x,x^)D
其中 p ( x , x ^ ) p(x, \hat{x}) p(x,x^) x x x x ^ \hat{x} x^的联合概率分布。

在分析信道容量的时候,是希望最大化 I ( X ; X ^ ) I(X;\hat{X}) I(X;X^),而在这里,我们是希望最小化 I ( X ; X ^ ) I(X;\hat{X}) I(X;X^),这样就可以使得通过熵压缩编码器的信息量尽可能小,以此来实现所需要使用的比特数尽可能的低。但是有一个前提约束,就是限制失真度量的最大值,而后再最小化这个互信息才有意义(不然 X ^ \hat{X} X^会为一个常数)。

下面给出信息论意义下的率失真函数的定义(一个数学上的最优值):
R ( I ) ( D ) = min ⁡ q ( x ^ ∣ x ) : ∑ ( x , x ^ ) p ( x ) q ( x ^ ∣ x ) d ( x , x ^ ) ≤ D I ( X ; X ^ ) R^{(I)}(D)=\min _{q(\hat{x} \mid x): \sum_{(x, \hat{x})} p(x) q(\hat{x} \mid x) d(x, \hat{x}) \leq D} I(X ; \hat{X}) R(I)(D)=q(x^x):(x,x^)p(x)q(x^x)d(x,x^)DminI(X;X^)
需要注意信源压缩编码理论里面的一个基本设置是:信源的密度函数 p ( x ) p(x) p(x)是给定的,而一般我们能够调整的是 q ( x ^ ∣ x ) q(\hat{x} \mid x) q(x^x)


率失真编码定理(Shannon第三定理)
给定具有独立同分布 p ( x ) p(x) p(x)的信源 X X X和有界的失真度量 d ( x , x ^ ) d(x,\hat{x}) d(x,x^),操作意义下的率失真函数等于信息论意义下的率失真函数,即:
R ( D ) = R ( I ) ( D ) = min ⁡ q ( x ^ ∣ x ) : ∑ ( x , x ^ ) p ( x ) q ( x ^ ∣ x ) d ( x , x ^ ) ≤ D I ( X ; X ^ ) R(D)=R^{(I)}(D)=\min _{q(\hat{x} \mid x): \sum_{(x, \hat{x})} p(x) q(\hat{x} \mid x) d(x, \hat{x}) \leq D} I(X ; \hat{X}) R(D)=R(I)(D)=q(x^x):(x,x^)p(x)q(x^x)d(x,x^)DminI(X;X^)
是在失真约束 D D D下可以达到的最小信息传输速率。


3. 率失真函数的性质

  • R ( I ) ( D ) R^{(I)}(D) R(I)(D)是非增函数。当我们能够容忍的失真度逐渐增加时,率失真函数也就是传输的信息会逐步减小(或不变)。

  • R ( I ) ( D ) R^{(I)}(D) R(I)(D)的定义域为 ( D m i n , + ∞ ) (D_{min}, +\infty) (Dmin,+),且存在 D m a x D_{max} Dmax,当 D ≥ D m a x D \geq D_{max} DDmax时, R ( I ) ( D ) = 0 R^{(I)}(D)=0 R(I)(D)=0。也就是说,当我们能够容忍的失真到达一个程度后,就可以什么都不需要传了。

  • R ( D ) R(D) R(D) D D D的下凸函数。本质上是 I ( p , q ) I(p,q) I(p,q) q q q上是下凸的性质。


4. 率失真函数的两个常见例子

  • B e r n o u l l i ( p ) Bernoulli(p) Bernoulli(p)信源在汉明失真度量下的率失真函数为:
    R ( D ) = { H ( p ) − H ( D ) , 0 ⩽ D ⩽ min ⁡ { p , 1 − p } 0 , D > min ⁡ { p , 1 − p ∣ R(D)= \begin{cases}H(p)-H(D), & 0 \leqslant D \leqslant \min \{p, 1-p\} \\ 0, & D>\min \{p, 1-p \mid\end{cases} R(D)={H(p)H(D),0,0Dmin{p,1p}D>min{p,1p

  • 一个 N ( 0 , σ 2 ) \mathcal{N}\left(0, \sigma^{2}\right) N(0,σ2)高斯信源在平方误差失真度量下的率失真函数为:
    R ( D ) = { 1 2 log ⁡ σ 2 D , 0 ⩽ D ⩽ σ 2 0 , D > σ 2 R(D)= \begin{cases}\frac{1}{2} \log \frac{\sigma^{2}}{D}, & 0 \leqslant D \leqslant \sigma^{2} \\ 0, & D>\sigma^{2}\end{cases} R(D)={21logDσ2,0,0Dσ2D>σ2

针对高斯信源,我们先将 R ( D ) R(D) R(D)写成 D ( R ) D(R) D(R)
R ( D ) = 1 2 log ⁡ σ 2 D R(D)= \frac{1}{2} \log \frac{\sigma^{2}}{D} R(D)=21logDσ2可变为 D ( R ) = σ 2 2 − 2 R D(R)=\sigma^{2}2^{-2R} D(R)=σ222R。(注意,这里的 log ⁡ \log log均是以 2 2 2为底的)。那么 1 1 1比特的失真为 0.25 σ 2 0.25\sigma^2 0.25σ2

这是有一个非常有趣的观察:在最开始的第一个例子,我们用 1 1 1比特量化 N ( 0 , σ 2 ) \mathcal{N}\left(0, \sigma^{2}\right) N(0,σ2)高斯分布的连续随机变量时,平均失真为 D = ∫ − ∞ ∞ ( x − X ^ ( x ) ) 2 p ( x ) d x = π − 2 π σ 2 ≈ 0.3633 σ 2 D=\int_{-\infty}^{\infty}\left( x - \hat{X}(x) \right)^2 p(x) dx = \frac{\pi-2}{\pi} \sigma^{2} \approx 0.3633 \sigma^{2} D=(xX^(x))2p(x)dx=ππ2σ20.3633σ2,这并不是最优的。因此,这表明我们如果将几个失真的问题结合在一起考虑,则可获得比单个分开考虑时更低的失真。(即使我们量化的是独立随机变量)


参考

  1. Wiki: Rate–distortion theory
  2. Thomas M. Cover, Joy A. Thomas (2006). Elements of Information Theory. John Wiley & Sons, New York.
  3. 信息论基础(2017),叶中行
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐