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