5 info theory
TRANSCRIPT
1
前回の練習問題通報とその発生確率を入力すれば,ハフマン符号を構成するプログラムを作成せよブロック符号が構成できるよう,上記プログラムを改造せよ適当な通報と発生確率を定め,一通報あたりの平均符号長がブロック長によりどう変化するか,プログラム実験を行え
回答例は省略:「優先度付きキュー」の典型的な応用例「優先度付データを登録」「優先度最大データを取り出す」木を「データ」,確率を「優先度」とする「木を二つ取出し,併合して一つにして再登録」を繰返す残った木にラベル付けして完成
2
前回の復習シャノンの情報源符号化定理
一記号あたりの平均符号長は,必ず H1(S) 以上下限を超えない範囲で, H1(S)+1 まで縮めることが可能
ブロック符号化通報を複数まとめてブロック化することで,効率が向上効率 = 一記号あたりの平均符号長 ... 圧縮率に相当
3
前回の補足(1)ブロック化すると,どうして効率が良くなるか?
理想的な符号語長は実数値となるP(A)=0.8, P(B)=0.2 の場合,理想的符号長は ...
322.22.0log
322.08.0log
22
21
l
l
現実には,符号語は記号系列 ... 符号語長は整数値しかダメ理想的な値と現実の値とのあいだにギャップが存在ブロック長大⇒ ギャップが相対的に小さくなる ⇒ 最適値に近づく
最適な平均符号長との乖離は,ある種の近似誤差によるもの
Kraft;122
min,2.08.0
21
21
ll
ll
4
前回の補足(2)ブロック符号化の運用について
有限長の通報系列は,末尾部分でブロック化できない場合も長さ 10 の等長ブロック化
⇒ 25 個の通報だと, 5 つの通報が端数となるランレングス符号化
⇒ 最後のランを終端する記号がない場合も
通常は,運用で問題を回避最終ブロックだけ別扱いパディング(埋め草,詰物)の利用 + 通報数の伝達
5
本日の講義ハフマン符号以外の符号化法について考える
装置化が簡単で効率が良い符号化法算術符号化法
通報の発生確率が事前にわからない場合の符号化法Lempel-Ziv 法
許容範囲内での情報劣化と引き換えに,効率を稼ぐ符号化法
画像や音声の符号化法について
ある程度独立した3つの話題の紹介
6
算術符号化法装置化が簡単で効率が良い符号化法
7
ハフマン符号化と装置化の容易さについてハフマン符号:通報と符号語とを一対一に対応付け⇒ 符号化器,復号器の内部で,対応表を記録する必要アリ⇒ 効率をよくするためには,対応表も大きくなりがち
算術符号( arithmetic code) :対応表を使わず, on-the-fly で符号化・復号を行う方式⇒ よりコンパクトな実装が可能となる
通報(またはブロック)を一個ずつ符号化するのではなく,通報系列全体を,ひとつの符号化系列に変換する (「通報系列全体で1ブロック」という考え方も ... )
8
算術符号:基本的な考え方記憶のない2元定常情報源: P(A) = p, P(B) = 1 – p
長さ n の通報系列の符号化を考える ⇒ 2n 通りの通報系列
p = 0.7, n = 3 の場合番号
01234567
wi
AAAAABABAABBBAABABBBABBB
S(wi)0.3430.1470.1470.0630.1470.0630.0630.027
L(wi)0
0.3430.4900.6370.7000.8470.9100.973
8通りの系列 w0,..., w7
辞書式に並んでいること
系列発生確率 S(wi) を求め,
累積発生確率 L(wi) を計算する
)()()()( 11
1
0
ii
i
jji wSwLwSwL
9
アイデア:系列と区間
番号01234567
wi
AAAAABABAABBBAABABBBABBB
S(wi)0.3430.1470.1470.0630.1470.0630.0630.027
L(wi)0
0.3430.4900.6370.7000.8470.9100.973
0.343 0.147 0.147 0.063 0.147 0.0630.063
0 0.5 1.0
0.027
AAA AAB ABA ABB BAA BAB BAB BBB
各系列に対し, [0,1] の部分区間を対応付け可能
系列 wj ... 区間 Ij=[L(wj), L(wj+1))
系列 wj を,区間 Ij 内の代表点
x Ij (実数値)により表現する
区間と x の対応関係をどう計算?実数値 x をどう表現?
区間の左端区間のサイズ
10
区間の木表現と累積確率計算系列と実数値の対応付け:二方向への計算により実現
系列から,対応する区間を求める実数値から,対応する系列を求める
⇒ 区間の木構造表現を利用して計算すれば良い
0.343 0.147 0.147 0.063 0.147 0.0630.063 0.027
AAA AAB ABA ABB BAA BAB BAB BBB
AA AB BA AB
A B
11
系列から,対応する区間を求める根節点を定義し, S() = 1, L() = 0 とする子節点の S( ), L( ) の値は,必要に応じて再帰的に計算する
S(wB) = S(w)(1 – p)L(wB) = L(w) + S(w)p
S(wA) = S(w)pL(wA) = L(w)
w S(w), L(w)
wA wB
S() = 1L() = 0
S(A)=0.7L(A) = 0
L(B) = 0.7A B
AA AB S(AB)=0.21L(AB) = 0.49
ABA ABB S(ABB)=0.063L(ABB) = 0.637
ABB の区間は0.637~ 0.700
着目節点の L( ) 値
着目節点の直右の L( ) 値を記憶しておく
ABB の区間は?
P(A) = p...
12
実数値から,対応する系列を求める前スライドと同じく, S( ), L( ) の値を再帰計算目標値 x に応じて,左に進むか右に進むか二者択一
x が L(wB) 以下 ⇒ 左の子へx が L(wB) より大 ⇒ 右の子へ
S() = 1L() = 0
S(A)=0.7L(A) = 0
L(B) = 0.7A B
AA AB S(AB)=0.21L(AB) = 0.49
S(ABA)=0.147L(ABA) = 0.49
ABA ABBL(ABB) = 0.637
0.600 に対応する系列は?
0.600 は系列 ABA に対応
対応関係の計算に,対応表は不要
13
実数値 x の表現について実数値 x の(2進数)表現が,実質的な符号語となる
x の表現長は,短ければ短いほど良い該当する区間内で,表現長が最小のものを選びたい
L(wj+1) の小数点以下 – log2S(wj) ビットを x にする
平均符号長は
nVjw
jj
nVjw
jj
wSwSn
wSwSn
)(log)(1
))(log)((1
2
2
= H(S)
ハフマン符号と同程度の効率を達成可能
L(wi)+ S(wi)
L(wi+1)
0.aa...aaa...a+ 0.00...0bb...b
0.aa...acc...c
x = aa...ac
L(wj)+ S(wj)
L(wj+1)
0.aa...aaa...a+ 0.00...0bb...b
0.aa...acc...c
– log2S(wj)
0.aa...aaa...a 0.aa...acc...c
0.aa...ac
14
算術符号化について:まとめ算術符号:
大きな対応表を用いることなく,ハフマン符号並の性能を発揮計算は on-the-fly で行うことが可能であり,装置化も容易
長い系列になると,精度の高い乗算を繰り返し行う必要アリ⇒ 乗算を用いない(近似)計算法も研究されている若干の復号遅延が発生してしまう
15
Lempel-Ziv 法通報の発生確率が事前にわからない場合の符号化法
16
通報の発生確率についてここまでの議論 ...
通報の発生確率が,あらかじめわかる場合を想定
現実世界の通報系列 ...
各通報の発生確率がわからないケースも多い単純な解決法として,2スキャン方式がある
1回目のスキャンで各記号の発生確率を測定2回目のスキャンで符号化
⇒ 符号化遅延の発生,対応表を添付する必要性が生じる
17
Lempel-Ziv 法通報の発生確率が不明でも,効率よい符号化を実現する方
式:LZ77 法
lha, gzip, zip, zoo 等の圧縮ツールで採用LZ78 法
compress, arc, stuffit 等の圧縮ツールで採用LZW 法
GIF, TIFF 等の画像フォーマットで採用
どのような情報源に対しても効率が良い⇒ ユニバーサル符号化 ( universal coding)
18
LZ77 方式A. Lempel, J. Ziv により, 1977 年に提案された方式通報の部分系列を,過去に出現したパターンとの最長一致により表現していく
アルゴリズム概要適応的にブロックの分割を行う一つのブロックを, (i, l, x) の3項組で表現
「 i 文字前から始まる長さ l の系列に x を追加したもの」
x0–1–i+l–i l–1 l
符号化の完了した系列
19
LZ77 の符号化例ABCBCDBDCBCD を符号化する
記号ABCBCDBDCBCD
状況初出現初出現初出現2文字前と同一2文字前と同一2文字前とは異なる3文字前と同一3文字前とは異なる6文字前と同一6文字前と同一6文字前と同一6文字前と同一
符号語(0, 0, A)(0, 0, B)(0, 0, C)
(2, 2, D)
(3, 1, D)
(6, 4, *)
20
LZ77 の復号例(0, 0, A), (0, 0, B), (0, 0, C), (2, 2, D), (3, 1, D), (6, 4, *) を復号得られた符号語から,もとの通報系列を逐次構成していく
問題点 ... 整数値の表現をどうする?大きな整数は,それなりに大きな表現長となってしまう表現長を超えるようなブロックは,分割して表現する必要あり ⇒ LZ78 法に比べると,若干の効率ロスがある
21
LZ78 方式A. Lempel, J. Ziv により, 1978 年に提案された方式パターンを, (i, l, x) の3項組ではなく, (b, x) の2項組で表現
「 b 個前のブロックに,文字 x を追加したもの」
符号化の完了した系列
x
0–1–b
22
LZ78 の符号化例ABCBCBCDBCDE を符号化する
記号ABCBCBCDBCDE
状況初出現初出現初出現2つ前のブロックと同一
1つ前のブロックと同一
1つ前のブロックと同一
符号語(0, A)(0, B)(0, C)
(2, C)
(1, D)
(1, E)
ブロック番号123
4
5
6
23
LZ78 の復号例(0, A), (0, B), (0, C), (2, C), (1, D), (1, E) を復号得られた符号語から,もとの通報系列を逐次構成していく
LZ77 法より,符号語がコンパクト一符号語が表現するブロックサイズに,上限がない ⇒ LZ77 法よりも,若干優れた効率を発揮
24
ユニバーサル符号化について:まとめLZ 法では,適応的にパターン・符号語の対応表を構成する通報の発生確率がわからなくても,高い性能を発揮記憶のある情報源から発生する通報にも,自然に対応可能
LZW 法には, UNISYS社が主張する特許問題が存在した ⇒ 2004 年に特許期限が切れ,自由に利用可能に
25
画像や音声の符号化法について許容範囲内での情報劣化と引き換えに,効率を稼ぐ符号化法
26
符号化の可逆性ここまでで考えてきた符号化法 ...
符号化したものを復号すれば,元の情報と完全に同一の通報系列が得られる⇒ 可逆符号化,無歪み符号化 (reversible, lossless coding)
可逆性に関する条件を緩めれば,さらに効率が改善できるかも⇒ 非可逆符号化,有歪み符号化 ( non-reversible, lossy coding)
画像や音声等,最終的に人間が受容する情報の符号化を念頭本講義では,個々の符号化方式については述べない(それぞれ専門の講義科目を履修のこと)
27
非可逆符号化へのアプローチ非可逆符号化では,2つのアプローチを活用して効率を改善:
予測符号化( predictive coding )通報の間には,非常に強い相関関係がある一部の通報を故意に割愛し,欠損部分を,前後の通報等から予測して復元する
変換符号化( transform coding )表現法の変換により,コンパクトな表現になる場合がある
離散フーリエ変換,離散コサイン変換等
28
非可逆符号化と情報量可逆符号:
符号語を受け取ると,元の情報を完全に復元可能元の通報に関するエントロピーが 0 になる可逆符号の符号語は,大きな情報量を担う
非可逆符号:符号語を受け取っても,元の情報に関する曖昧さが残る元の通報に関するエントロピーは 0 にならない非可逆符号の符号語は,比較的小さな情報量を担う
29
情報源符号化定理ふたたびシャノンの情報源符号化定理 ...解釈次第では「 H(S) の情報量を担う符号語は,サイズ H(S) 以上とな
る」
非可逆符号についても,類似の上界・下界を導きことが可能
⇒ 「有歪み符号に対する情報源符号化定理」が存在
「より大きな歪みを許容できるのであれば,より高い圧縮率を
達成することができる」ことを数学的に説明できる
30
本日のまとめ前回までとは異なる方向性を持つ符号化方式の紹介算術符号化
通報と符号語の対応表を必要としないLZ 符号化
通報に関する統計的性質を必要としない非可逆符号化
情報劣化と引き換えに効率を稼ぐ
31
練習問題ABACABADACABAD を, LZ77 法により符号化せよ
上記問題により得られた符号語系列を復号せよ
LZW アルゴリズムの特許に関し,どのような問題が発生したか調べよ
非可逆符号化を実現するアルゴリズムにはどのようなものがあるか調べよ