前回の練習問題 2元ハフマン符号を構成せよ 平均符号長を求めよ 1.000 0.637 0.359 0.278 0.185 0.135 0.066 0.363 A 0.174 B 0.143 C 0.098 D 0.087 E 0.069 F 0.045 G 0.021 H 0 100 110 1010 1011 1110 11110 11111 0.363 ×1+0.174 ×3+...+0.021×5= 2.660 A B C D E F G H 確率 0.363 0.174 0.143 0.098 0.087 0.069 0.045 0.021 0 1
前回の練習問題 4元ハフマン符号を構成せよ 確率の小さな4つの木を併合すれば良い? ⇒  4個未満の子を持つ節点が存在するかも ⇒  確率  0  のダミー通報を入れて考える ? 次数  a   の完全木 ... 葉の数は  ( a  – 1) k  + 1 ⇒  2  個のダミーを加え,通報数を 10 = (4 – 1)3 +1 に 0.363 A 0.174 B 0.143 C 0.098 D 0.087 E 0.069 F 0.045 G 0.021 H a b c da db dc dda ddb 0 * 0 * 0.066 0.320 1.000 a b c d A B C D E F G H 確率 0.363 0.174 0.143 0.098 0.087 0.069 0.045 0.021
本日の講義 ハフマン符号の性能と限界 ハフマン符号化の拡張 ブロック符号化と平均符号長 情報源符号化定理 情報源符号化の限界 非等長ブロックハフマン符号化 ランレングス符号化
平均符号長について 情報源符号化に求められる性質: 瞬時復号可能であること(自動的に一意復号可能となる) 平均符号長ができるだけ小さいこと ⇒  ハフマン符号が有力候補 ハフマン符号は,どれくらい 「良い」符号なのか? ⇒  平均符号長の限界定理 瞬時復号可能な 符号のクラス 一意復号可能な 符号のクラス ハフマン符号
平均符号長の限界定理 定常情報源  S   から発生する 通報を一個ずつ , 瞬時復号可能な符号 C により 符号化 することを考える 通報は  M   通り,各通報の発生確率は  p 1 , ...,  p M [ 定理 ] 任意の符号について, 平均符号長は必ず  L      H 1 ( S )  となる ... どんなに効率的でも,平均符号長は1次エントロピー以下 平均符号長が  L   <  H 1 ( S ) + 1 となる符号を構成できる ... 平均符号長が1次エントロピーに迫る符号を作ることが可能
シャノンの補助定理 定理の証明にあたり,補助定理(補題)をひとつ導入 ( シャノンの補助定理 , Shannon’s lemma ) [ 補題 ]  q 1  + ... +  q M     1  を満たす任意の正数  q 1 , ...,  q M   に対し, 等号成立は, p 1  =  q 1 , ...,  p M  =  q M のとき,かつそのときのみ.
シャノンの補助定理の証明 証明:不等式の左辺– 右辺を考えると, (証明終了) y  =  x  – 1 1 O y  = log e x
符号長限界定理の証明(前半) C の符号語長を l 1 , ...,  l M   とし, q i  = 2 – li とおく.クラフトの不等式より l i  = – log 2 q i  なので,平均符号長は シャノンの補助定理を用いて, 等号成立は, p 1  =  q 1 , ...,  p M  =  q M のとき,かつそのときのみ (前半証明終了)
符号長限界定理の証明(後半) 以下の不等式を満たすよう,整数  l i   を定める. これより  2 – li     2 log  pi  =p i   であり, したがって  l 1 , ...,  l M   はクラフトの不等式を満足し, この符号長を持つ(瞬時に復号可能な)符号を構成可能. この符号の平均符号長は (後半証明終了)
符号長限界定理とハフマン符号 [定理](再掲) 任意の符号について, 平均符号長は必ず  L      H 1 ( S )  となる 平均符号長が  L   <  H 1 ( S ) + 1 となる符号を構成できる ハフマン符号では, 平均符号長が,必ず L   <  H 1 ( S ) + 1 となる ... 実際には,もっと強い証明が可能 ハフマン符号よりも平均符号長の小さな瞬時符号は存在しない (ハフマン符号は コンパクト符号  ( compact code ) である) 証明は,符号木の大きさに関する帰納法による(以下略).
ハフマン符号とブロック化 ハフマン符号... 一個の通報を,一個の符号語に 変換する 平均符号長は,かならず1以上となる 2元情報源の符号化には向かない 複数の通報をまとめて符号化 ( ブロック符号化 )すると ... 通報あたりの平均符号長を1以下にできるかも 2元情報源の符号化にも利用可能 A B 10 A C C 1101 A 01 A 0 B 10 A 0 C 11 C 11 A 0 通報 A B 平均符号長 確率 0.8 0.2 C 1 0 1 1.0 C 2 1 0 1.0
ブロック符号化の例(1) 左表のとおりハフマン符号化をすると, 平均符号長は 0.6 ×1 + 0.3×2 + 0.1×2 =  1.4 長さ2のブロックを考える AA の発生確率  = 0.6 ×0.6=0.36 .... 左表のとおりハフマン符号化をすると, 平均符号長は 0.36 ×1 + 0.18×3 + ... + 0.01×6 = 2.67 通報一個当たりでは, 2.67 / 2 =  1.335 ⇒  少し効率が良くなった A B C 確率 0.6 0.3 0.1 符号語 0 10 11 AA AB AC BA BB BC CA CB CC 確率 0.36 0.18 0.06 0.18 0.09 0.03 0.06 0.03 0.01 符号語 0 100 1100 101 1110 11110 1101 111110 111111
ブロック符号化の例(2-1) 平均符号長は 0.8×1 + 0. 2×1 = 1.0 長さ2のブロックを考える AA の発生確率  = 0.8 ×0.8=0.64 .... 平均符号長は 0.64 ×1 + 0.16×2 + ... + 0.04×3 = 1.56 通報一個当たりでは, 1.56 / 2 =  0.78 ⇒  2元情報源でも,効率改善 A B 確率 0.8 0.2 符号語 0 1 AA AB BA BB 確率 0.64 0.16 0.16 0.04 符号語 0 10 110 111
ブロック符号化の例(2-2) 長さ3のブロックを考える AAA の発生確率  = 0.8 3 =0.512 .... 平均符号長は 0.512 ×1 +... + 0.008×5 = 2.184 通報一個当たりでは, 2.184 / 3 =  0.728 ブロック長を大きくすると, 一通報あたり平均符号長は 小さくなる(効率が良くなる) AAA AAB ABA ABB BAA BAB BBA BBB 確率 0.512 0.128 0.128 0.032 0.128 0.032 0.032 0.008 符号語 0 100 101 11100 110 11101 11110 11111 ブロック長 1 2 3 : 一通報あたり平均符号長 1.0 0.78 0.728 :
ブロック符号の平均符号長 ブロック長を大きくすると,一通報あたり平均符号長は小さくなる ⇒  どこまで小さくなるのか? n 個単位でブロック化された通報= n   次拡大情報源 S n の通報1個 ⇒  平均符号長の限界定理が適用できる! ブロック符号の平均符号長を L n とすると, H 1 ( S n )     L n  <  H 1 ( S n )+1 . 一通報当たりの平均符号長に換算すると ...
シャノンの情報源符号化定理 H 1 ( S n ) /  n  は,情報源  S  の  n  次拡大エントロピー n  -> ∞のとき, H 1 ( S n ) /  n  ->  H ( S )...情報源  S  の極限エントロピー 1 /  n  -> 0 [ シャノンの情報源符号化定理 ] 情報源 S から発生する通報は,一通報あたりの平均符号長が H ( S )     L  <  H ( S ) +    である瞬時復号可能な符号に符号化可能
情報源符号化定理の意味するところ 情報源 S から発生する通報は,一通報あたりの平均符号長が H ( S )     L  <  H ( S ) +    である瞬時復号可能な符号に符号化可能 ブロック長を長くしてハフマン符号を使えば,効率的にはベスト どれだけ頑張っても,極限エントロピーの壁は越えられない ブロック長 1 2 3 : : 一通報あたり平均符号長 1.0 0.78 0.728 : : 0.723 +   H ( S ) = 0.723 A B 確率 0.8 0.2 符号語 0 1
ブロック符号化法の実用性 効率面からは,ハフマンブロック符号化法が最良な方法 ブロック長を大きくすれば,いくらでも理論限界値に近づける 実用面から考えると,ハフマンブロック符号化法にも問題あり 通報の 発生確率を,あらかじめ知っておく必要がある (⇒ 次回講義で触れる予定) 符号の 定義(通報と符号語の対応表)が巨大 になる 対応表1行を記憶するのに1バイト必要だとすると ... ブロック長  8...256 バイト ブロック長  16...64 キロバイト ブロック長  32...4 ギガバイト
非等長ブロック符号化 ここまでのブロック符号化:符号化対象のパターンは同じ長さ ⇒ 発生確率の非常に小さなパターンにも符号語定義が必要 ⇒ 対応表の巨大化 符号化対象のパターンが,異なる長さを持つことを許す ⇒  非等長  ( unequal-length ) ブロック化.ただし 各パターンの 発生確率が,ある程度均衡 すること 任意の通報系列が,パターンにブロック化できる こと ...どのようにパターンを定義するかが鍵となる A  B  A  A  B  A  B  A A  B  A  A  B  A  B  A
パターンの定義方法について パターン定義の戦略1:頻出パターンの細分化 長さ1のパターンを用意する 発生頻度の高いパターンを細分化し,分割する 所望のパターン数になるまで 2 を繰り返す 例:P(A) = 0.8, P(B) = 0.2,所望パターン数4のとき 任意の系列を, {AAA, AAB, AB, B}  にブロック化可能 A B 0.8 0.2 AA AB B 0.64 0.16 0.2 AAA AAB AB B 0.512 0.128 0.16 0.2
非等長ブロック化時の平均符号長 前スライドのパターンに対し, ハフマン符号を定義(右表) n 個のブロックがあったとすると ... 符号語系列の長さ は 0.512 n ×1 + 0.128 n ×3 + 0.16 n ×3 + 0.2 n ×1 = 1.776 n 通報系列の長さ は 0.512 n ×3 + 0.128 n ×3 + 0.16 n ×2 + 0.2 n ×1 = 2.44 n 一通報あたりの符号長は, 1.776 n  / 2.44 n   = 0.728 ... ブロック長3(対応表8行)のときと同程度の効率   (cf. p.14)  パターン AAA AAB AB B 確率 0.512 0.128 0.16 0.2 符号語 0 100 101 11
パターンの定義方法について:ラン長の利用 パターン定義の戦略2:記号の ラン によりパターン定義 (主として,2元の情報源を想定) 記号の ラン ( run ):系列中の,同一記号からなる部分系列 特定記号のランの長さだけ与えられれば,元の系列を復元可能 ⇒  ランの長さを符号化しよう! A  B B  A A A A A  B  A A A  B 長さ 1 の A のラン 長さ 5 の A のラン 長さ 3 の A のラン 長さ 0 の A のラン
ラン長の上限 非常に長いランが発生することも ... ⇒ ランの長さに上限を設け,上限以上のランは短く分割して表現 ABBAAAAABAAAB  を表現する: A が 1個 発生し,Bが発生 A が 0個 発生し,Bが発生 A が 3個以上 発生 A が 2個 発生し,Bが発生 A が 3個以上 発生 A が 0個 発生し,Bが発生 上限を3とした場合 ラン長 0 1 2 3 4 5 6 7 : 表現方法 0 1 2 3+0 3+1 3+1 3+3+0 3+3+1 :
ランレングスハフマン符号 ランレングスハフマン符号  ( run-length Huffman code ) 通報系列中の特定記号のラン長を符号化したハフマン符号 ⇒  通報の発生頻度に偏りがある場合,非常に有効 p(A) = 0.9, p(B) = 0.1  のとき ABBAAAAABAAAB: 1, 0, 3+, 2, 3+, 0 ⇒ 110 10 0 111 0 10 AAAABAAAAABAAB: 3+, 1, 3+, 2, 2 ⇒ 0 110 0 111 111 AAABAAAAAAAAB: 3+, 0, 3+, 3+, 2 ⇒ 0 10 0 0 111 ラン長 0 1 2 3 以上 符号化されるパターン B AB AAB AAA 発生確率 0.1 0.09 0.081 0.729 符号語 10 110 111 0
符号化例 S :  記憶のない2元定常情報源, p(A) = 0.9, p(B) = 0.1 エントロピーは  H ( S ) = –0.9log 2 0.9 – 0.1log 2 0.1 =  0.469 単純なハフマン符号化: 平均符号長は 1 等長ハフマンブロック符号化  ( n  = 3) 平均符号長  1.661,  一通報あたりの平均符号長  1.661 / 3 =  0.55 通報 A B 確率 0.9 0.1 符号語 0 1 通報 AAA AAB ABA ABB 確率 0.729 0.081 0.081 0.009 符号語 0 100 110 1010 通報 BAA BAB BBA BBB 確率 0.081 0.009 0.009 0.009 符号語 1110 1011 11110 11111
符号化例(続) ランレングスハフマン符号化(符号語数を8に設定) n ブロックでは ... 符号語系列  0.1 n ×3+...+0.478 n ×1= 2.466 n 通報系列  0.1 n ×1+...+0.053×7+0.478×7= 5.216 n (ラン長  k  ⇒  k  個の A と一個の B  なので通報数では  k +1 ) 一通報あたりの平均符号長は  2.466 n  / 5.216 n  =  0.47 ラン長 0 1 2 3 確率 0.1 0.09 0.081 0.073 符号語 110 1000 1001 1010 ラン長 4 5 6 7+ 確率 0.066 0.059 0.053 0.478 符号語 1011 1110 1111 0
本日のまとめ 平均符号長の限界定理 シャノンの情報源符号化定理 ハフマン符号の拡張的利用法 ブロック符号化 非等長ブロック符号化 ランレングス符号化
練習問題 通報とその発生確率を入力すれば,ハフマン符号を構成するプログラムを作成せよ ブロック符号が構成できるよう,上記プログラムを改造せよ 適当な通報と発生確率を定め,一通報あたりの平均符号長がブロック長によりどう変化するか,プログラム実験を行え

4 Info Theory