6 Info Theory

1,186 views

Published on

Published in: Technology, Art & Photos
  • Be the first to comment

  • Be the first to like this

6 Info Theory

  1. 1. 前回の練習問題 <ul><li>ABACABADACABADを,LZ77法により符号化せよ </li></ul>A B A C ABA D ACABAD 2 文字前 長さ1 4 文字前 長さ 3 6 文字前 長さ 6 符号語系列は (0, 0, A), (0, 0, B), (2, 1, C), (4, 3, D), (6, 6, *) <ul><li>上記問題により得られた符号語系列を復号せよ </li></ul><ul><li>符号化と逆の手順を行えばよい </li></ul>A B A C ABA D ACABAD 2 文字前 長さ1 4 文字前 長さ 3 6 文字前 長さ 6
  2. 2. 前回の練習問題 <ul><li>LZWアルゴリズムの特許に関し,どのような問題が </li></ul><ul><li>発生したか調べよ </li></ul><ul><ul><li>UNISYS社が特許権を保有していた </li></ul></ul><ul><ul><li>当初は特許権の行使をしないと言明 ⇒ 後に方針転換 </li></ul></ul><ul><ul><li>GIF 画像を扱うソフトウェアの取り扱いに混乱 </li></ul></ul><ul><ul><li>2003年に米国,2004年に日本での特許失効 </li></ul></ul><ul><li>非可逆符号化を実現するアルゴリズムにはどのような </li></ul><ul><li>ものがあるか調べよ </li></ul><ul><li>(アルゴリズムとデータフォーマットの区別が明確でないが) </li></ul><ul><li>JPEG, MPEG, GIF 等 </li></ul>
  3. 3. 本日の講義 <ul><li>乱数,擬似乱数について ... 「情報理論」からは少し寄り道 </li></ul><ul><li>乱数,擬似乱数 </li></ul><ul><ul><li>Kolmogorov による乱数の定義 </li></ul></ul><ul><li>擬似乱数の統計的検定 </li></ul><ul><ul><li>x 2 検定 </li></ul></ul><ul><li>擬似乱数の生成法 </li></ul>
  4. 4. 乱数とは <ul><li>乱数,乱数系列 ( random numbers, random sequence ) </li></ul><ul><li>広辞苑による記述: </li></ul><ul><li>0から9までの数字から 無作為復元抽出を繰り返して得られる数 </li></ul><ul><li>の列. 完全に無秩序 で,かつ全体としては出現の頻度が等しい. </li></ul><ul><li>工学の立場からは,上記の記述では不十分 </li></ul><ul><li>「0から9までの数字」というのは本質的でない </li></ul><ul><li>⇒ 0 と 1 だけからなる乱数を考える場合も多い </li></ul><ul><li>「完全に無秩序」が,どのような状態を示すのか明確でない </li></ul>
  5. 5. 「無秩序さ」の定式化 <ul><li>計算機の出現により,「無秩序さ」の定式化に新たなアプローチ </li></ul><ul><li>0 と 1 からなる有限系列 x を考える </li></ul><ul><li>x を出力する プログラムの集合 を  ( x ) とする </li></ul><ul><ul><li>プログラム ... 入力なしの決定性プログラム(毎回同じ動作) </li></ul></ul><ul><ul><li>プログラムの p  の 記述長 を | p | と書く </li></ul></ul><ul><li>x の コルモゴロフ複雑さ ( Kolmogorov complexity ) </li></ul>( x を出力する 最小のプログラム のサイズ)
  6. 6. コルモゴロフ複雑さの例(1) <ul><li>x 1 = “0101010101010101010101010101010101010101”... 40 文字 </li></ul><ul><li>x 1 を出力するプログラム </li></ul><ul><ul><li>プログラム p 1 : printf(“010101...01”); ...51 文字 </li></ul></ul><ul><ul><li>プログラム p 2 : for(i=0;i<20;i++)printf(“01”); ...30 文字 </li></ul></ul><ul><li>⇒ K ( x 1 )  30 < 40 </li></ul><ul><li>x 2 = “0110100010101101001011010110100100100010”... 40 文字 </li></ul><ul><li>x 2 を出力するプログラム </li></ul><ul><ul><li>プログラム p 1 : printf(“011010...10”); ...51 文字 </li></ul></ul><ul><ul><li>プログラム p 2 : 存在する ? </li></ul></ul><ul><li>⇒ K ( x 2 )  51 </li></ul>
  7. 7. コルモゴロフ複雑さの例(2) <ul><li>x 3 = “11235813213455891442333776109871597...”... 100 万文字 </li></ul><ul><li>x 3 を出力するプログラム </li></ul><ul><ul><li>プログラム p 1 : printf(“1123...”); ...100 万 +11 文字 </li></ul></ul><ul><ul><li>プログラム p 2 : </li></ul></ul><ul><ul><li>フィボナッチ数列を計算して出力 ⇒ 数百文字で十分 </li></ul></ul><ul><li>⇒ K ( x 3 ) は数百文字以下 </li></ul><ul><li>「プログラム」は広義に解釈しても良い </li></ul><ul><li>⇒ 「 XXX という本の YY ページから抜き出す」というのもOK </li></ul>
  8. 8. コルモゴロフ複雑さと無秩序さ <ul><li>コルモゴロフ複雑さが大きいほど「無秩序」である </li></ul><ul><ul><li>ただし,コルモゴロフ複雑さを実際に計算することは困難 </li></ul></ul><ul><ul><li>「無秩序さ」を定式化するための概念的なもの </li></ul></ul><ul><li>エントロピーとの違いは? </li></ul><ul><ul><li>エントロピーは,記号発生の 統計的側面 だけに着目 </li></ul></ul><ul><ul><li>コルモゴロフ複雑さは,記号発生の メカニズム も考慮に </li></ul></ul>
  9. 9. コルモゴロフ的な乱数の定義 <ul><li>コルモゴロフ複雑さに基づく乱数の定義: </li></ul><ul><li>系列 x について, K ( x )  x のとき, x を 乱数(系列)という </li></ul><ul><ul><li>x を記述するには, x を「ベタ書き」するしかない </li></ul></ul><ul><ul><li>x をコンパクトに表現することができない( 圧縮不能 ) </li></ul></ul><ul><li>プログラムも2進系列で表現すると考えると ... </li></ul><ul><li>長さ n の2進系列 ...2 n 個存在 </li></ul><ul><li>長さ n 未満 の2進系列 ...2 n – 1 個しか存在しない </li></ul><ul><li>⇒ 必ず, K ( x )  x である系列(圧縮不能な系列)が存在 する </li></ul><ul><li>⇒ 任意の長さの乱数が,必ず存在する </li></ul>
  10. 10. 乱数の存在確率 <ul><li>V n :長さ n の2進系列集合, | V n | = 2 n, | V 1 |+ | V 2 |+...+| V n –1 | = 2 n –1 </li></ul><ul><li>もし, V n に属する系列のうち 2 n – 1 個が圧縮可能だとすると, </li></ul><ul><li>V 1 , ..., V n –1 に属する系列はいずれも圧縮不能ということになる </li></ul>⇒ ほとんどすべての系列は圧縮不能(乱数である) ことを導ける 1 n –2 n –1 n サイズ n 未満のプログラムはすべて,長さ n の系列を出力 n+ α 長さ n 未満の系列は,サイズ n 以上のプログラムでしか作れない
  11. 11. 乱数の計算可能性 <ul><li>ほとんどすべての系列は乱数である: </li></ul><ul><li>乱数の 存在は保証 しているが,具体的な 作り方は不明 </li></ul><ul><li>サイコロを振る,無作為に生成されるデータを利用 etc. </li></ul><ul><ul><li>十分に無秩序で良い乱数を得ることができるが ... </li></ul></ul><ul><ul><li>大量の乱数を得るには効率が悪い </li></ul></ul><ul><li>専用の乱数生成装置を利用 </li></ul><ul><ul><li>大量の乱数を効率よく生成できる </li></ul></ul><ul><ul><li>特殊なハードウェアが必要でコスト高 </li></ul></ul><ul><li>真の乱数(真性乱数)を,大量かつ安価に生成するのは困難 </li></ul>
  12. 12. 擬似乱数 <ul><li>擬似乱数 ( pseudorandom numbers ): </li></ul><ul><li>ある種の規則性にしたがって生成される「乱数のようなもの」 </li></ul><ul><ul><li>コルモゴロフ的な意味での乱数ではない </li></ul></ul><ul><li>コンピュータプログラム等により,大量かつ安価に生成可能 </li></ul><ul><li>⇒ 各種の実験やシミュレーション等の実施に有益 </li></ul><ul><li>擬似乱数にも良いものと悪いものがある </li></ul><ul><li>⇒ 各種の検定により, 擬似乱数の品質を評価 することが必要 </li></ul><ul><li>(検定法を頭に入れた後で,具体的な擬似乱数生成法を学ぶ) </li></ul>
  13. 13. 統計的検定 <ul><li>擬似乱数の評価尺度: </li></ul><ul><li>予測が困難か? </li></ul><ul><ul><li>暗号等の用途では重要だが,評価が難しい </li></ul></ul><ul><li>十分に無秩序か? </li></ul><ul><ul><li>数列の統計的性質 を検定すれば良い...比較的容易 </li></ul></ul><ul><li>本講義では,統計的検定法について紹介 </li></ul><ul><ul><li>「あるプログラムから生成された十分長い系列が, </li></ul></ul><ul><ul><li>どれだけ真性乱数に近い統計的性質を有するか」を議論 </li></ul></ul><ul><ul><li>「特定の系列が乱数か否か」を判定する問題ではない </li></ul></ul>
  14. 14. 復習:確率,確率密度関数 <ul><li>確率変数:ある試行にともなって,なんらかの値を取る変数 </li></ul><ul><li>確率分布: </li></ul><ul><li>確率変数が,どの確率でどの値を取るかをあらわしたモノ </li></ul><ul><li>確率変数が離散的な場合,確率分布は表の形で与えられる </li></ul><ul><li>確率変数が連続的な場合,確率分布は 関数 により与えられる </li></ul>確率密度関数 晴 曇 雨 雪 0.3 0.4 0.2 0.1
  15. 15. 確率密度関数について <ul><li>確率密度関数 ( probability density function , pdf ) </li></ul><ul><li>連続的な確率変数の確率分布を表現する関数 </li></ul><ul><li>確率変数が x 以上 y 未満の値を取る確率= </li></ul>= x y ここの面積 x -> 最小値, y -> 最大値とすると,面積=1
  16. 16. x 2 値の定義 <ul><li>確率変数 X の取る値を, 有限個のクラス C 1 , C 2 , ..., C l に分割する </li></ul><ul><li>たとえば X が 0 から 100 の値を取る場合 ... </li></ul><ul><li>C 1 = [0, 10), C 2 = [10, 30), C 3 = {30 以上の偶数 }, C 4 = その他 </li></ul><ul><li>理想的なケース において, X が C i に属する確率は p i とする </li></ul><ul><li>実際に観測された値の系列を a = a 1 , a 2 , ... a n とする </li></ul><ul><li>系列 a が,どれだけ理想に近いか評価したい </li></ul><ul><li>⇒ 以下の x 2 値 ( x 2 value, Chi square value )を評価すれば良い </li></ul>n i ... 系列 a において C i に属する値の個数 (カイ2乗値)
  17. 17. x 2 値の解釈 <ul><li>n i ... 系列 a において C i に属する値の個数 </li></ul><ul><li>np i ... 長さ n の理想的系列における n i の期待値 </li></ul>系列 a が 理想的な系列に近ければ ... ⇒ 分子部分は 0 に近づく ⇒ x 2 値も 0 に近づく
  18. 18. x 2 値の計算例 <ul><li>1, 2, ...6 からなる42文字の系列( n = 42 )を考える </li></ul><ul><ul><li>これが真性乱数なら, p i = 1/6 ⇒ np i = 7 </li></ul></ul><ul><li>a 1 = 145325415432115341662126421535631153154363 </li></ul><ul><ul><li>n 1 = 10, n 2 = 5, n 3 = 8, n 4 = 6, n 5 =8, n 6 = 5 </li></ul></ul><ul><ul><li>x 2 = 3 2 /7 + 2 2 /7 + 1 2 /7 + 1 2 /7 + 1 2 /7 + 2 2 /7 = 20/7 </li></ul></ul><ul><li>a 2 = 112111421115331111544111544111134411151114 </li></ul><ul><ul><li>n 1 = 25, n 2 = 2, n 3 = 3, n 4 = 8, n 5 =4, n 6 = 0 </li></ul></ul><ul><ul><li>x 2 = 18 2 /7 + 5 2 /7 + 4 2 /7 + 1 2 /7 + 3 2 /7 + 7 2 /7 = 424/7 </li></ul></ul><ul><li>a 1 のほうが a 2 よりも理想的なケースに近い </li></ul>
  19. 19. x 2 値の計算例(続) <ul><li>a 3 = 111111111111222222...666666 (長さ 72 ) </li></ul><ul><ul><li>n 1 = 12, n 2 = 12, n 3 = 12, n 4 = 12, n 5 =12, n 6 = 12 </li></ul></ul><ul><ul><li>x 2 = 0 2 /12 + 0 2 /12 + 0 2 /12 + 0 2 /12 + 0 2 /12 + 0 2 /12 = 0/12 </li></ul></ul><ul><ul><li>理想的な乱数? 当然 no </li></ul></ul><ul><li>長さ2のブロック化を考える ... n = 36 ブロック </li></ul><ul><ul><li>理想は,“ 11”, ... “66” が 1/36 の確率で発生, np i = 1 </li></ul></ul><ul><ul><li>n 11 = 6, n 12 = 0, ..., n 22 = 6, ... </li></ul></ul><ul><ul><li>x 2 = (6 – 1) 2 /1 + (0 – 1) 2 /1 + ... = 180 ⇒ かなり大きい </li></ul></ul><ul><li>様々なクラス分割により,多面的に評価する必要がある </li></ul>
  20. 20. x 2 値の評価 <ul><li>理想的な系列であっても, x 2 値が必ず0になるとは限らない </li></ul><ul><li>理想的系列における x 2 値の分布と,実測値とを比較すべき </li></ul><ul><li>[定理] </li></ul><ul><li>分割クラス数が l のとき,理想的系列における x 2 値の分布は, </li></ul><ul><li>自由度が l – 1 の x 2 分布 ( Chi square distribution )にしたがう </li></ul>自由度 2 自由度 4 自由度 6 x 2 O
  21. 21. x 2 値の比較 <ul><li>a 3 = 111111111111222222...666666 (長さ 72 ) </li></ul><ul><ul><li>x 2 = 0 2 /12 + 0 2 /12 + 0 2 /12 + 0 2 /12 + 0 2 /12 + 0 2 /12 = 0/12 </li></ul></ul><ul><ul><li>クラス数が 6 ⇒ 自由度が 5 の x 2 分布に従うはず </li></ul></ul>理想系列では, x 2 値が 0 になる確率はきわめて小さい 観測系列の x 2 値が 0 ⇒ 理想系列では考えにくい振る舞い x 2 値の大小だけでなく,理想的な x 2 分布と比較することが重要 x 2 O 自由度 5
  22. 22. x 2 値検定の実施例 <ul><li>x 2 値の大小だけでなく,理想的な x 2 分布と比較することが重要 </li></ul><ul><li>実際には ... </li></ul><ul><li>元のデータをいくつかに分割 </li></ul><ul><li>各データセットに対して x 2 値を計算 </li></ul><ul><li>得られた x 2 値の集合の妥当性を検証 </li></ul><ul><ul><li>再び統計的検定を行う </li></ul></ul><ul><ul><li>上下パーセント点 と比較する </li></ul></ul><ul><ul><ul><li>上側 1% 点 ... </li></ul></ul></ul><ul><ul><ul><li>100 回に 1 回くらいは,この値を超えるかもという点 </li></ul></ul></ul>
  23. 23. その他の統計的検定手法 <ul><li>KS 検定 (Kolmogorov-Smirnov 検定) </li></ul><ul><ul><li>x 2 検定の連続変数バージョン(クラス分割不要) </li></ul></ul><ul><li>ラン長検定 </li></ul><ul><ul><li>長さ k のラン発生確率 = 0.5 × 長さ k – 1 のラン発生確率 </li></ul></ul><ul><ul><li>(2元の無記憶定常情報源で,通報発生が等確率のとき) </li></ul></ul><ul><ul><li>ランの発生個数について, x 2 検定を行う手法 </li></ul></ul><ul><li>ポーカー検定,衝突検定,間隔検定 etc. </li></ul><ul><li>いずれの方法も, 十分長い系列に対して行う必要がある </li></ul><ul><li>(短い系列では,統計的性質が出現しにくい) </li></ul>
  24. 24. 擬似乱数生成アルゴリズムについて <ul><li>様々な擬似乱数生成アルゴリズムが提案されている </li></ul><ul><li>その多くが,少量の乱数の 種 ( シード , seed )から,多量の </li></ul><ul><li>擬似乱数系列を生成するもの </li></ul><ul><li>線形合同法 ( linear congruent method ) </li></ul><ul><li>漸化式に基づいて擬似乱数を生成する方式 </li></ul><ul><li>i 番目の値が X i のとき, X i +1 = aX i + c mod M とする </li></ul><ul><ul><li>a , c , M は適当なパラメータ(選び方にはコツがある) </li></ul></ul><ul><li>得られる値は 0 から M – 1 の整数値 </li></ul>
  25. 25. 線形合同法の性質について <ul><li>得られる 擬似乱数列の周期は,必ず M 以下 となる </li></ul><ul><ul><li>M は,ある程度大きな値にすべき </li></ul></ul><ul><li>M の選択がまずいと, X i の下位ビットのランダム性が悪化 する </li></ul><ul><ul><li>M は素数にするのが良い </li></ul></ul><ul><ul><li>処理を簡便にするため, M = 2 e とする実装もある </li></ul></ul><ul><li>パラメータ a や c の選択についても,ある程度の規則が存在 </li></ul>
  26. 26. 線形合同法の問題点 <ul><li>( X i , X i +1 ) で与えられる2次元平面上の点を考える </li></ul><ul><li>( X i , X i +1 ) の点が, 平面全体に広がることが理想的 </li></ul><ul><li>線形合同法では, X i が決まれば X i +1 が一意に決まる </li></ul><ul><li>⇒ 直線 x = a 上には,高々一個の点しか配置されない </li></ul>X i +1 = 5 X i + 1 mod 7 のとき ... 1 2 3 4 5 6 O 1 6 5 4 3 2 平面上の点を一個選んで ... という用途には使えない (初期値が 5 のとき)
  27. 27. M系列法 <ul><li>M 系列法 ( M-sequence method ) </li></ul><ul><li>線形フィードバックシフトレジスタを利用して擬似乱数を生成 </li></ul><ul><li>p 段シフトレジスタ ⇒ 状態数は 2 p 通り存在する </li></ul><ul><li>結線方法によっては, 周期 2 p –1 の擬似乱数系列 が生成可能 </li></ul><ul><ul><li>特異点(全ゼロ状態)以外のすべての状態を経由 </li></ul></ul><ul><ul><li>⇒ 2 p –1 という周期は,レジスタ数 p 段では最大値( M ax) </li></ul></ul>X i X i –1 X i – p X i – p +1 X i – p +2 結線 or 断線
  28. 28. M系列法について <ul><li>結線方法は,原始多項式の係数にしたがって決定(省略) </li></ul><ul><li>生成される系列は,非常に優れた統計的性質を持つ </li></ul><ul><li>レジスタの初期値の違い ⇒ 生成される系列の位相の違い </li></ul><ul><li>シフト加法性 </li></ul><ul><li>高い自己相関性を持つ ⇒ CDMA などの通信方式でも利用 </li></ul>
  29. 29. その他の擬似乱数生成法 <ul><li>メルセンヌ・ツイスタ法 ( MT 法, Mersenne Twister method ) </li></ul><ul><ul><li>松本眞氏(現広島大),西村拓士氏(現山形大)により提案 </li></ul></ul><ul><ul><li>メルセンヌ素数を使い,シフトレジスタ法を一捻りした方 </li></ul></ul><ul><ul><li>高品質の擬似乱数を高速に生成することが可能 </li></ul></ul><ul><li>予測不能な 擬似乱数生成法 </li></ul><ul><ul><li>いわゆる「記憶のない」乱数生成 ⇒ 暗号的用途に向く </li></ul></ul><ul><ul><li>Blum 法など </li></ul></ul><ul><ul><li>線形合同法,M系列法,MT法は,暗号用途には使えない </li></ul></ul>
  30. 30. まとめ <ul><li>コルモゴロフ的な乱数の定式化 </li></ul><ul><li>擬似乱数の統計的検定 </li></ul><ul><ul><li>x 2 検定 </li></ul></ul><ul><li>具体的な擬似乱数生成アルゴリズム </li></ul><ul><ul><li>線形合同法,M系列法 </li></ul></ul>
  31. 31. 練習問題 <ul><li>a = 110010111110001000110100101011101100とする(| a |=36) </li></ul><ul><ul><li>a を長さ2のブロックに区切り, x 2 値を計算せよ </li></ul></ul><ul><ul><li>長さ3,4のブロックに区切り,それぞれ x 2 値を計算せよ </li></ul></ul><ul><li>線形合同法を実装し,擬似乱数を生成せよ </li></ul><ul><li>上記で生成した擬似乱数を,2次元平面にプロットせよ </li></ul><ul><li>(スライドの26ページ参照) </li></ul>

×