8. 情報のデジタル化(誤り検出・誤り訂正、情報圧縮)

8-1. 誤り検出と誤り訂正

【この世はノイズだらけ、間違えだらけ】

デジタル技術(特に微細で大規模な回路技術)が進展するに従い、「大量のデータ」を扱う時代に変化してきました。ところでそのデータを「保存したり、伝送したり」するとき、間違えなく正しく保存・読み出し、送信・受信することができるのでしょうか? 技術が進展すればするほど、「機械は間違ったり、故障したりする」と言う当たり前の原則が、重くのしかかってきます。現在の人類には「必ず正しく動く機械を作る」技術はありません。

情報機器も、1回に1000個くらい(K:キロ)の情報を扱う時代なら、1つ1つの部品が99.999%くらい正しく動けば、まあ100回に1回くらいしか誤りが生じませんが、1回に1000,000個(M:メガ)くらいの情報を扱えば「毎回、平均10個くらいの誤りがある」ことになり、それは「常に誤りがある」と言う状態になってしまいます。この問題が強く意識さればじめたのが「アポロ計画(元祖:ムーンショット計画)」です。「99.99999%大丈夫」の技術では、それ以上の部品を使うアポロ計画は「必ず失敗する」ことになります。人類を月に送ると言う計画は「高い信頼性を如何に実現するか」と言う「高信頼性技術」を生み出すきっかけになりました。

現在では、(一般家庭でも)G(ギガ)やT(テラ)は当たり前で、そろそろP(ペタ)の時代に入りつつあります(現在のスーパーコンピュータの世界がP(ペタ)~E(エクサ)の世界です)。ですから、それらを支える部品などは「99.9999999999999%大丈夫」と言う超高信頼性技術が「必要」になります(必要だからと言って存在するとは言ってないことに注意(^^;)。

身近な例では「CDの開発」などでも同じ問題がありました。皆さん「CDは、表面に小さな穴があり、穴の有る無しで0、1を記録している(記録は強いレーザー光による破壊あるいは相転移、読み出しは弱いレーザー光による反射の有無)」と言うことを知っていると思います。そして、その穴の間隔は、およそ1μmくらいです。ところで「髪の毛の太さ」はおよそ0.1mm(=100μm)くらいで、埃の大きさは... 大体10μm(PM10)程度。なお、PM2.5 とか言う言葉を聞いたことあるかもしれませんが、これは埃などの「粒子の大きさ」をμmの単位で表したものですから、PM2.5は2.5μmの大きさの小さな埃、と言う意味です。しかし、PM2.5ですら「CDの穴の大きさや間隔よりずっと大きい」のです。つまり「CDに記録されているデータを誤りなく読み出す」には、埃に邪魔されないよう、PM0.5以上の大きさの埃は、完全に除去する必要があるり、これは「クリーンルーム」でも作らないと無理です。

でも、実際には、普通にそこらでCD聞けますよね(^^) 何ででしょ? それがこれから紹介する「誤り検出」と「誤り訂正」の技術です。

同じことは「通信」についても言えます。線で繋いで電気信号を送る場合「ノイズ(雑音など)」が入ることがあります。無線なら尚更で、そこら中にいろいろな電磁波がありますから、それも一緒に受信すれば、必ずそれがノイズになります。無線で「ノイズ無しにデータを送受信する」ことは、周りに他の電磁波がない場合... つまり無線が発明される前にでも行かなければ無理じゃないかと思われます(なお、余談ですが、1964年にそこらに自然にある電磁波の解析をして、想定されるあらゆるノイズを除去しても、まだ(ノイズのような)電磁波があることを見つけ... それが「ビッグバン(宇宙ができた時)の信号=宇宙背景輻射(宇宙のあらゆる方向から地球にふりそそく電磁波)」であり、そのノイズが存在することが「ビッグバンが実際にあったことの決定的証拠」となりました。そのくらい「ノイズ」はそこら中にありますので、原始時代に行っても無理で、ビッグバン以前=この世が生まれる前にでも行かないと...)。


【アナログとデジタル】

アナログは「連続量」デジタルは「離散量」です。すると... 実は「ノイズや誤り」の意味が、アナログとデジタルで、ちょっと変わってきます

アナログの場合には「ちょっと違う」と言うことが普通に起こります。1と1.000000000000001はちょっと違います。ところが、もし「整数の世界」だとどうでしょう? 1の次は2です。1.5と言う「整数」はありません。つまりデジタル(離散量)の世界では「ちょっと違う」と言う現象が無いのです。もし、0と1しか無い世界であれば、0が0あるいは1が1なら「正しい」です。もし0が1あるいは1が0となればそれが「誤り」です。つまり「正しい」か「誤り」かの2種類しかなく「似てるけどちょっと違う」と言うのは「0と1だけの世界」には無いです。0が1あるいは1が0のことを「ビット反転」と言います。つまりデジタルの世界では、「正しい」あるいは「誤り=ビット反転」のどちらかしかありません。これが「デジタルデータで、誤りを自動的に見つけたり、自動的に訂正したるする仕組み」の原理につながります。


【誤り検出の最も単純な方法=パリティチェック】

デジタルデータの場合、「誤り」はビット反転(0が1、1が0になること)です。これ以外の「ちょっと違う(劣化)」は存在しません。そこで、データに「誤りを見つけるための仕組み」を仕込んでみましょう。例えば、1010 と言うデータがあったとします。このデータ内に「1は2個」あります。このデータに「誤り」を生じさせてみます。例えば一番右のビットが正しくは0ですが、仮にこれを間違えた場合1011になります。この「間違えた場合」には「1は3個」あります。「誤りはビット反転」ですから、0を1に間違えても1を0と間違えても、「1ビット間違えた時には必ず、1の個数が1つ変化」します。偶数が1つ変化すると奇数に、奇数が1つ変化すると偶数になりますから、1ビット誤ると、「1の個数が偶数個か奇数個かが変化する」ことになります。「奇数か偶数か」を英語でparity(パリティ)と言います。なお英語で、奇数はodd, 偶数はeven と言います(even, odd, parityは、英語圏なら小学校で習う言葉でしょう )。

1の個数は「偶数個か奇数個」の2つに1つですから、この情報を0、1で表し「データに付加する」ことにします。このビットを「パリティビット」と呼びます。なお「データの意味する情報」は変わらないので、パリティビットは「冗長データ」と位置付けられます。

すると、先の例では、1010は1の個数は偶数ですから、0を(右でも左でも良いですが、ここでは右につければ)1010 0 になります。この場合、パリティビットまで含めた1の個数は「偶数」になります。ここでもし先ほどの「1ビットの誤り」があると1011 0 となりますから「1の個数が奇数」になります。別の例を考えましょう。1110 が正しいデータだったとします。1の個数が奇数ですからパリティビット1を付け、1110 1とします。この場合、パリティビットまで含めた1の個数は「偶数」になります。ここでもし先ほどの「1ビットの誤り」があると1111 1 となりますから「1の個数が奇数」になります。

つまり「1の個数が偶数になるように、パリティビットを付加する」ことにより、「1ビットの誤り」は(1の個数が奇数に変わったとして)「検出」することが可能になりました。このように「元データに、冗長データを加えて、データに規則性(1の個数が偶数)を与える」ことにより「誤りを検出する」ことが可能になります。この技術を「誤り検出」と呼んでいます。

なお、今の「パリティビット」の方法では「2ビットの誤り」は(1の個数が偶数に戻るため)検出できません。ですから「1ビットの誤り検出」は可能であり、それ以上の誤りは必ずしも検出できるとは限らない(検出不可能)となります。まあ、もし1ビット間違う確率が1/1000なら、2ビット間違う確率は(各ビット間違うという事象が独立事象であれば)1/1000×1/1000=1/1000000ですから、ずっと小さくなります。


【誤りの特定=誤り訂正】

先ほどの例では、1010 0 のパリティ(1の個数)が奇数であれば「このデータの中に(少なくとも)1つ誤りがある」ことがわかります。でも「どのビットが誤りか」までは分かりません。でももし「誤りのビットを特定する」ことができたら、どうでしょう? 「誤りはビット反転」ですから、その誤っているビットを「さらにビット反転すれば、元に戻る」ことが分かります。これが「誤り訂正」です。つまりデジタルの世界では「誤りの場所を特定すれば、そのビットを反転することにより、誤りを訂正することが可能」になります。ではどのようにして「誤りの場所」を特定すれば良いでしょう? ここで「もっと長いデータ」を考えます。それを(説明のため)4ビットずつ区切って並べていきましょう。例えば、16個の0か1があったとします(正しいデータ)。

 1011

 1010

 1100

 1110


これにパリティビットを加えます。ここでは「横向きにも縦向きにも、1の個数が偶数」になるように、パリティビットを付加します。


 1011 1

 1010 0

 1100 0

 0111 1

 1010 0

   

太字がパリティビットです。どの行もどの列も1の個数は偶数になっています。ここで1ビット間違えたとします(データの部分でも、パリティビットの部分でも、どこでも良いです)。

 1011 1

 1010 0

 1110 0

 0111 1

 1010 0

では間違え探しです(^^; どこが違うか分かりますか? 一番上の行から「1の個数が偶数かどうか」見ていきます。もし「奇数個」なら、その行に誤りがあります。すると... 上から3行が「1の個数が奇数」ですね。つまり「誤りは3行目の中にある」ことが分かります。今度は列を見ていきましょう。左の列から順に「1の個数」を見てみると... 3列目が「1の個数が奇数」ですね。つまり「誤りは3列目の中にある」ことが分かります。2つの情報を組み合わせると「誤りは3行目の3列目」にあることが分かります。つまり「誤りビットの位置を特定」することができました。なら、このデータ列の「3行目も3列目」のビットを反転します(0なら1に、1なら0にします)。すると....

 1011 1

 1010 0

 1100

 0111 1

 1010 0

となり、「元の正しいデータ」が復元されます。これが「誤り訂正」です。

ここで紹介した方法は、最も簡単な「誤り検出、誤り訂正」の方法で、縦横組み合わせると「1ビットの誤りは、訂正できる」「2ビットまでの誤りは検出できる」というものになっています。これは「実際のコンピュータのメモリ回路(主記憶)にも、用いられている方法」で、メモリーチップ内の記憶素子に故障があっても、それがわずかであればこの方法で自動的に誤りを検出・訂正し、正しく動作する、ようになっています。この機能を持たないと、メモリチップ内にある、数十億個(数G個)の記憶素子のうち、1つでも故障したら、(半導体素子内を修理することは不可能なので)メモリを全部交換しなければなりません。

さらに誤りが多そうな場合(1ビットの誤りでは済みそうに無い)場合には、もうちょっと複雑で巧妙な方法(ハミング符号やCIRCなど)が用いられますが、原理は似たようなものです。


【身の回りの「誤り検出」や「誤り訂正」技術】

ここまで「最も単純な」誤り検出・訂正技術の原理を紹介しましたが、結構身近なところでこの「冗長データを付加して、誤り検出を行う」という方法がいろいろ使われています。まず皆さんが使ったことがあると思われる「センター試験の受験番号」。これは「1文字の誤りを検出する」ことができるようになってます。受験番号の末尾に「アルファベット1文字」がついていたと思います。これが(10進数における)パリティビットと同じような働きをし、「受験番号1文字の誤り検出」ができるようになっています(チェックディジットと呼ばれます)。そのため、うっかり間違っても「他人の番号と解釈されることはなく、誤りと解釈される」ようになっています。また皆さんが演習室PCを使う時などに使う「大学アカウント」。学生さんの場合には、sから始まり次に学籍番号ですが、これも末尾にアルファベットが1文字ついていますね?これも同じ仕組みの「誤り検出」です。

また、CDには「強力な誤り訂正」技術が使われています。そのため、記録ブロック内にいくつか誤りがあっても、それほど多くなければ誤りを全て訂正し、正しい音のデータを取り出します。だから、かなりホコリがついていても、問題なく再生できます。ただし1ブロック内の大量のデータが破壊されると訂正能力を超えますので、その時は読み出せなくなります。CDを円を描くように拭くと1ブロック全部傷つける可能性がありますので注意しましょう(ディスクは中心から外周に放射状に拭きます)。

「デジタル放送」も同じく「誤り訂正」を行います。ですから1ブロック内の「多少のノイズ」は全て訂正し、正しい映像信号で表示します。ただし1ブロック内の大量のデータが破壊されると訂正能力を超えますので、その場合には「映らない」とい現象がおきます。

デジタル(=離散=途中が無い)という性質をうまく使うと、ある程度までなら、このように「ノイズや誤りを除去する」ことが可能です。なおそのような技術を使った場合、「ちょっと」ということはありませんので、例えばデジタルテレビは「映るか映らないか」となります。アナログの場合には「微かにだが映る」ということがありますが、デジタルではそれがありません。

なお、宇宙船(探査衛星)などからのデータは「簡単だけど超強力な誤り訂正」技術が使われています。宇宙船では大量の電力は使えませんから、できるだけ簡単な仕組みで、しかも遥か彼方から(場合によっては、太陽系の端から)電波を送りますので、地球では「とても弱くなっており、ほとんどノイズだらけの電気信号」として受信されます。そこで例えば「はやぶさ」などの場合、1を送る時には「100個の1を連続で送る」0を送る時には「100個の0を連続して送る」という方法が使われました。地球で受診した場合、ノイズだらけですが、「100個の(0か1かの)データを受診し、もし1の個数が0の個数より多ければ1、もし1の個数が0の個数より少なければ0」と解釈することにより(多数決判定)、「ほとんどノイズだらけの信号通信」であっても、比較的正しく0か1かを判別できます。このような、強力な「誤り訂正」の結果、他の惑星付近から撮影した「鮮明な画像」を得ています。

なお、衛星放送やGPS信号なども、この強力な「誤り訂正」技術を使って、極めて微弱なノイズだらけの電波信号から、正しいデジタルデータを復元しています。アナログ通信では衛星通信のために「巨大なパラボラアンテナ」が必要でしたが、衛星デジタル放送の受信には「小さなパラボラアンテナ」で十分ですし、またGPSアンテナは「スマートフォンの中に入るくらい小さい」ものであっても、ちゃんと「宇宙にあるGPS衛星からの微弱な電波」で、正しいデジタル信号を受信できます。これらは全て、強力な「誤り訂正」の技術によって、可能になったことです。

ここで紹介した以外にも、様々な誤り検出や誤り訂正の技術があり、様々な場所で使われていますので、興味のある方は、Webで調べてみてください。


8-2. データ量と情報量

様々な情報をビット列(0と1の並び)で表現することが「情報のデジタル化」でした。元々の情報の種類やデジタル化の方法により、データ量が膨れ上がる場合があります。たとえば24bitフルカラー・フルハイビジョン、60fps,1時間だと、24*1980*1080*60*3600=1.1e13=11Tbit=1TByteになります。簡単にTByte(テラ・バイト)と書きましたが、文字数でいえば1000,000,000,000文字です。本1冊に記載されている文字数が10万文字程度ですから、本(文字データ)なら10,000,000冊。およそ国立国会図書館の全館に収納されている図書全部(の文字データ)と同じ程度です(^^;

では、「24bitフルカラー・フルハイビジョン、60fps,1時間のアニメ」と「国立国会図書館の全館に収納されている図書全部の文字データ」のデータ量は、ほぼ同じになりますが、そこに含まれている「情報の量」は同じと言えるでしょうか?(^^;

このような「データの量」と「情報の量」の問題を、1948年に最初に考えたのが、クロード・シャノンで、彼の考えた「情報理論」が現代の情報技術(符号化、暗号化、誤り訂正などの)の根幹になりました。詳しく知りたい方は「シャノンの情報理論」で調べてみてください。ただ、完全に数学の話ですから、かなりハードルが高いと思います。そこで、ここではそのエッセンスのみ、簡単に紹介します。

データ量は普通、「ビット列の長さ(bit数)=データ長」で表します(bit:bと略記)。8bit(8桁のビット)を纏めてバイト(Byte:Bと略記)で表すこともあります。例えば、1時間のアニメなら「データ量」はおよそ10Tb(テラ・ビット),あるいはおよそ1TB(テラ・バイト)です。なお、国立国会図書館の全書籍の内容を文字で表せば、これもおよそ1TBの「データ量」です。しかし、そこに含まれている「情報」の質と量は圧倒的に違うように思われます。では情報の質や量(情報量)はどのように定義するのが妥当でしょうか?


【情報量の定義】

情報量は「確率」により定義されています。あることが起きる確率を\(P\)とおき、そのことが起こったことを知った時に得た情報の量を、\( S=- \log_{2} P\)で定義し、この量を「情報量」と呼びます。

定義はこれだけですが、確率や対数が出てきたりして、(数学が理解できないと)なんかイメージ掴みにくいですね。そこで、この「情報量」の意味(イメージ)を簡単に解説しておきましょう。


・「0と1が同等に起こり得そうなとき(確率1/2のとき)0か1を知る」ことを、1bitの「情報量」と呼びます。


これだけです(^^; 

「情報量」の単位にもbitを用いますが「データ量(データ長)とは違う」ので注意してください。言い方を変えると、「確率1/2のことを知る=1bitの情報量」とも言えます。同じ0か1でも「1であるということを既に知っている(確率1)、あるいは多分1であるということを既に知っている(確率>1/2)」のときは、1であることを知ってもその情報量は1bitありません。また逆に「大抵の場合0である(1である確率<1/2)」の時に1であることを知ったら、その情報量は1bitより多くなります。同様に、「確率1/4のことを知る=2bitの情報量」、「確率1/8のことを知る=3bitの情報量」、「確率1/16のことを知る=4bitの情報量」... と言います。つまり、「n個の0か1の組が、全て同じ確率で起こるとき、n個の並びを全て知る(確率\(1/2^n\)の事を知る)ときの情報量 = n bitの情報量」と言います(これを式で短く書くと、\(S = -\log_2 P \)となります)。つまり「全ての組み合わせが同じ確率で起こるときには、データ量と情報量は等しい」と思っていただいたらよいと思います。逆に言えばビット列に何らかの規則性があり、全ての組み合わせが同じ確率で起こるとは言えない場合には、データ量と情報量は一般に異なります。いくつかの例を挙げると、例えば100個のビットからなるデータ(100bit のデータ=データ量(データ長)100bit)があり、

・「各ビット全て、確率1/2で0あるいは1になる場合」に、全てのビットが0か1かを知ったときの情報量

 情報量は 100 bit で、(データ長は100bitなので)「データ量=情報量」


・「既に、各ビット全て0であると知っている」時に、全てのビットが、それぞれ0か1かを全部知ったときの情報量

 そのことが起こる確率が1なので... 「情報量」=0bit (データ量は100bit)


・「全て0、あるいは全て1、のどちらかである、と知っている」時に、全てのビットが0か1かを知ったときの情報量

 そのことが起こる確率が1/2なので... 「情報量」=1bit (データ量は100bit)

...

このように「データはランダムで事前に何も知らない」場合にはデータ量と情報量は等しく、「データについて何かを知っている、あるいは0と1の確率が1/2でない」ときには、データ量と情報量は等しくありません。特に... 白い紙に細いペンで文字を書き、その画像をビットマップとして(白を0黒を1と)デジタル化すれば、殆どが0で、たまに1、というデータ列になります(もし0と1が確率1/2でランダムなら、いわゆる「砂の嵐」の画像になり、文字は読み取れません)。

そのようなデータの場合には、「データ量」>「情報量」です。データ量と情報量の差を「冗長性」と呼びます。同じ情報を表現する場合、冗長性が少ない方が、無駄が無く効率的になります。


# 余談。「同等に」と「同時に」は全く意味が違います。高校数学の確率で「同等に確からしい=確率が同じ」ということを学んでいないと、見た目似ている全く違う単語と呼んでしまう人もいるようですので、要注意。


【情報の質と情報の量】

同じ「1bit」の情報量でも、そのビットの「意味」により、情報の「価値」が変わります。たとえば「金額」を2進法で表すとき、10000001円と表現されたデータがあったとします。データ量も情報量も(全ての金額が同等にあり得るなら)全部で8bit です。ところで、一番右の1bit と一番左の1ビット、データ量としても情報量としてはどちらも1bitのデータですがその「価値」はどうでしょう?一番右の1bitは1円を意味しますし、一番左の1bitは、(十進数でいえば)128円を意味します。「価値」は金額にして100倍違いますね。

このように、同じ情報量であっても、それが「何を意味しているか」により価値は違います。情報量と異なり、(主観や情報の活用の仕方によりますから)情報の価値を一般に定式化する方法はありませんが、情報を活用する場面で、データの量や情報の量と「情報の価値」は別物であることを意識し、必要があれば、たとえば先ほど紹介したように(金額などで)ある程度客観的に定量化し、評価することが必要でしょう。

このように、「データ量(データ長)」「情報量」「情報の価値(情報の質)」は、一般には違うものですので、混同しないように、注意が必要です。



8-3. 冗長性の排除=情報圧縮

では次に「冗長性のあるデータ」について考えていきます。まず具体例から行きましょう。


「冗長性」のある表現(元データ)

1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1110 1111 1111 1111 1111 1111 1011

このデータ列、圧倒的に1が多いですね?例えば次のビット0になるか1になるか? もちろん正解は分かりませんが、可能性として「1が来る方がありえそう」で「0が来ることは、あまり、ありえなそう」に思えます。つまり0か1かは「確率1/2ではない」ように思えます(もしそうならデータ量>情報量で、冗長性がある)。

では、同じ情報を、例えば「1が43個(次が0)1が21個(次が0)1が2個」と表現すると、だいぶ短くなりますね。十進表現になっていることが気になるなら、たとえば1の個数を2進8桁で表現するなら(256個以上1が並ぶことが無いデータであれば)、0010 1011 0001 0101 0000 0010 のように表現することもできます(だいぶ短いですよね。それと0と1の出現頻度が最初より半々に近くなっています)。方法はいろいろありますが、データの表現方法を変えることにより、表現の無駄(冗長性)を省きとにより,同じ情報の表現を短くすることができる場合があります。これを「データ圧縮」と呼びます。また、圧縮されたデータから元のビット列に戻すことを「解凍(展開) 」と呼びます。もちろん冗長性のないデータ(データ長=情報量であるデータ)の場合には圧縮できません。



8-4. 情報圧縮の方法

では、実際にどのような方法で「圧縮」がなされるのか、を簡単に紹介します。汎用的に用いられる方法は、「元データをブロック化し、固定長コードを可変長コードに変換する」という方法です。なお、データ長が最もデータ長が短くなるような可変長コードの作り方も知られており「ハフマン法」と呼ばれています。現在汎用的に使われる圧縮方法はほぼ全てハフマン法を使いますので(1人しかいなければ名前はいらないでしょうから)名前を覚える必要はありません(^^;


【 実際の圧縮例(ハフマン法:理論的に最大の可逆圧縮効率)】

まず最初に、

  元データ: 11111111 11111111 10011111 11111111 11111111 11101111

を、例えば8bitずつ区切ります(=ブロック化と呼びます)。なお、区切る長さ(ブロック長)は実際にはもっと長いですが(普通は1024bit以上、例えば524160bit程度)、ここでは説明のために8bitの場合で説明します。元データの中に出現するブロック(8bitデータ)の頻度分布を表にまとめます。そして「出現頻度が高いビット列は、短いコード(可変長コード)」で表現し、「出現頻度が低いビット列は、長いコード(可変長コード)」で表現します。可変長コードとはたとえばモールス信号のようなもので「1つの情報(文字など)を、長さが固定されていない0と1の組み合わせ」で表現するもので、「可変長コードとして定義されていないビット列になったら、そこで「コードが切れる(文字が決まる)」という方法で、符号化する方法です。

「変換表」

  固定長コード 可変長コード

  11111111   1 (出現頻度の高いものは短く)

  10011111   00

  11101111   010

  11100111   000010 ... (出現頻度の低いものは長く)

  10101101   1110010101001101101010 (全く出現しないものはいくら長くなっても良い)


たとえばこのコードを使うと、元データは、

 1 1 00 1 1 010

と表現され、だいぶ短く圧縮)されることが分かります。ブロック長をもっと長くし、可変長コード化を「変換後のデータの0と1の出現率がなるべく1/2に近なるようにする」と最大の圧縮が実現でき、これを具体的に行う方法(アルゴリズム)が、ハフマン法です。

このようにして「圧縮されたデータ」と「変換表」があれば、圧縮されたデータは完全に元に戻す(解凍)することができます。

なお、完全に元に戻せるような圧縮法を「可逆圧縮」と呼びます。「え? それって当たり前じゃないの?元に戻らないならデータを壊しているだけでそんなもの使えないのでは?」と思うかもしれませんね(^^;




8-5. 非可逆圧縮(可逆でない圧縮)

【可逆圧縮と非可逆圧縮 】

現在使われている圧縮技術は大きく2つ(可逆圧縮、非可逆圧縮)あります。


・可逆圧縮:圧縮したデータを解凍すると「完全に元に戻る」方法(最大の圧縮法は先に述べたハフマン法です。)

・非可逆圧縮:圧縮したデータを解凍すると似ているけど完全は元に戻らない方法」


【非可逆圧縮(可逆でない圧縮)】

ではまず、先ほどの例と同じ例で「非可逆圧縮(可逆でない圧縮)の例」から見ていきましょう。

 元データ:11111111 11111111 10011111 11111111 11111111 11101111

 「変換表」

   固定長コード 可変長コード

   11111111   1 (出現頻度の高いものは短く)

   10011111   00

   11101111   010

   11100111   000010 ... (出現頻度の低いものは長く)

この変換表を使うと

   1 1 00 1 1 010 (可逆圧縮)
となり、このまま解凍すると当然、元データと同じになります。ここで、「出現頻度が少ないもの」を「他のコードで代用」してみましょう。たとえば、可変長コード010の代わりに00を利用すると、

   1 1 00 1 1 00 (非可逆圧縮)

となり、さっきより1bit短くなりました。これを解凍すると、

  11111111 11111111 10011111 11111111 11111111 10011111 (圧縮-->解凍) 

  11111111 11111111 10011111 11111111 11111111 11101111 (元データ)

となりますから、「元のデータとは異なる」けど、十分に「似ている」データになります(非可逆圧縮=可逆でない圧縮)。

この「似ているけど完全には元に戻らない」というところが非可逆圧縮のミソです。「完全に元に戻る」という条件を少し緩めることにより(情報量を僅かに減らすことにより)、圧縮率を(可逆圧縮の)限界以上に上げられます。この例ではわずか1bitですが、実際にはもっと長いブロック長を用いるため、「出現頻度が極めて低く、そのため長い可変長コードでコード化されたものを、極端に短い可変長コードで代用する」ことができれば、飛躍的に圧縮率が高くなります。


【非可逆圧縮の利用法】

「しかし、元に戻らないのでは使えないんじゃ?」と思うかもしれませんが、それば「データや情報の質」と関係します。機械で処理するデータなど(プログラムなど)は、元と違えば全く利用価値はありませんが「人が感じる情報」では、「感じ取れない差」はあまり価値がありません。つまり、データはデジタルでも「人間の感覚がアナログ」、だから「似ている」と言うことが起こることを利用します。

人は何を知覚でき(感じ取ることができ)、何を知覚できない(感じ取ることができない)のか? 古くは心理学(実験心理学)のテーマとして研究されていましたが、現在では、脳は基本的に「神経回路のネットワーク(ニューラルネットワーク)」の仕組みで情報解析をしているという知見が得られてきたことと、MRI等の機械の発明により「生きたまま脳の活動をモニターできる」技術を得たことにより、「脳科学」の一分野として、飛躍的な進展を遂げています。音声や画像等のデータで「人間の感覚と して区別できなければ」,実質上データの品質をさほど落とさずに,「大きな圧縮」が可能になります。ですから「人が知覚できない情報」を明らかにし、「人が知覚できる部分は同じ」でありながら、「人が知覚できない部分は違っても良い」と条件を緩めることにより、大きな圧縮率を実現すれば、「人にとっての品質は殆ど変わらず、データは飛躍的に少なくする」ことが可能になります。

たとえば、 実際の非可逆圧縮技術(修正離散コサイン変換) を使うMP3等の「音声圧縮」では、音質は殆ど劣化させずに、1/10程度に音声データを圧縮することができます。なお、これは「大きな音と一緒に、ほとんど同じ高さ(ちょっと違う)の小さな音が鳴っているとき、人は(単独なら聞こえるはずの)小さな音が聞こえなくなる」という現象を利用した圧縮法です。また、画像なども「木に茂っている葉っぱの色が1枚だけちょっと違っていても気が付かない」ということを利用し、小さなパレットで色を表現することで、大幅な画像圧縮ができますし、さらに「砂の嵐の画像の、砂の位置が多少ずれていても気が付かない」ということを利用した圧縮方法もあります。



9-5. 様々なデータ(音声、画像、動画)の圧縮形式

人が知覚するためのデータ、音、画像、動画などは、人が違いを知覚できないほど「十分に似ている」場合には、正確に元データと一致しなくても、それで十分実用的です(ただし人が知覚するのではなく、それを機械に分析させる場合には不十分な場合もあります)。そこで、これらのデータは通常「非可逆圧縮」をして、データ量を抑えます(場合によっては数十分の1~数百分の1に圧縮します)。逆に言えば、これらの情報は「非可逆圧縮の技術の進展により、実用的になった」と思っていただいても良いと思います。

例えば音の場合、CD1枚で約40分の音楽が入ります(圧縮していません)。CD1枚はおよそ640MBです。例えば6.4GB のストレージがあったとしたら、CD10枚分、6.7時間程度になります。皆さんがデジタルプレーヤー(MP3プレーヤーやスマートフォン)で音楽を聴く場合... 6.4GBもあれば、CD数百枚分(70時間以上)音楽入れられませんか?それが「非可逆圧縮」です。現在ではmp3よりもさらに実質的な圧縮率の高いAACが使われることも多いです。「圧縮したのち、1秒当たり何ビットになるか」をビットレートと呼びます。ビットレートが高ければ落としている情報量が少ないため音質が良く、ヒットレートが低ければデータは小さくなりますが落としている情報量が増えるため、音質が劣化します。そのため「必要な音質(=自分の耳で聴き分けられる、装置で再現できる限界程度)」が確保される最小のビットレートを選択することにより、実用上音質の劣化がほとんどなく(感じられず)、その範囲でデータ量を最小にすることができます。

画像も同様に、jpg等の非可逆圧縮のデータ形式が良く使われます。目的によって「画像が劣化しない可逆圧縮」も良く使いますので、必要に応じて使い分けると良いでしょう。

また、一般にぱらぱら漫画方式の「動画データ」は、一般に「冗長データだらけ」になります。理由は仮に「静止画」であったとしても、同じデータを各時刻(各フレーム)毎に、画素数分だけデジタル化するからです。静止画であれば、意味ある情報は「一枚の画像データ」で表現できるものだけのはずです。一般に人が見る(鑑賞する)映像は「動く部分が少ない」ですから、各ピクセルデータを「まず時間方向に」一定時間分並べ、それを画素順に並べることにより、「データの偏り」が大きくなります(静止画なら時間方向には、全て同じですから)。そこで、画面を適当な大きさの四角(ブロック)に区切り、そのブロック内のデータを、時間・x・yの順番に並べ替え、それを圧縮する、という手続きが取られます。ですから、解凍する(再生する)ときには「1塊にした時間分のデータを全て解凍して並べ替え、それからフレームごとに表示する」ことが必要になります。これが「デジタル画像が遅れる(地デジの時報は正確ではない)」理由です。また、非可逆圧縮しすぎて情報量が欠落しすぎている場合に、その塊の表示がおかしくなる「ブロックノイズ」が発生する原因です。動画圧縮については、まだまだ「何が見えて何が見えないのか」の研究が進んでいる最中ですし、使い方も「動画から静止画を切り出すか否か」とかの使い方にもかかわってきますので、現在でも様々な圧縮方式が存在しており、発展を続けています。

音声、画像、動画等のファイル形式は、「デジタル化の方法と圧縮方法(コーディック)」「入れ物の規格(コンテナ)」が組み合わさって決まりますので、様々な「拡張子」のファイル形式や圧縮形式等を調べておくと、適切な使い分けができると思います。皆さんが今までに使っていた(使っている)拡張子のファイルが、どのようなものか、Webで全て調べてください。



8-6. まとめ

多様な内容がありましたので、簡単にまとめておきましょう。


【誤り検出とパリティビット】

1の個数が偶数(あるいは奇数)になるように冗長ビット(パリティビット)を付加して「1ビットの誤りを検出する」仕組みを、パリティチェックと言います。誤りの検出方法は他にもいろいろあり、例えば前回学んだハッシュデータの付加も誤り(改ざん)検出の方法の1つです。そのうち、「パリティ」の手法は最も簡便に1ビットの誤りを確実に検出する(しかし2ビット以上の誤りは一般には検出できない)方法です。誤りの確率が小さく(例えば1/1000)、複数の誤りは「独立」に起こる場合であれば、1ビットの誤る確率に比べ、2ビット誤る確率はその2乗(1/1000000)ですから、確率の低い機器の故障などによる誤りを検出する場合には十分であることが多く、仕組みが簡単なため、随所に組み込まれます。なお、パリティと似た方法ですが文字データの場合には最後に「チェックデジット」と呼ばれる文字を付加して誤りが検出できます。皆さんの学籍番号や入試の受験番号等にもチェックデジッドが使われており、番号の入力を間違えても他の(学籍番号や受験番号の)人と区別がつくように(誤りであることが検出できるように)しています。


【誤りの特定=誤り訂正】

記録をビットを2次元的に配置し「縦にも横にもパリティビットを付加する」ことにより、このブロック内の1ビットの誤りの位置(縦横)を特定することができます。「デジタル(0,1だけの世界)」の場合、「誤りは、ビット反転(0 <--> 1)しかない」ですから、誤りの位置が特定されれば、そのビットを反転することにより、「誤りの訂正」が可能になります。

単純にパリティビットを縦横に付加する場合には、「1ビットの誤りは、訂正可能」になり「2ビットの誤りは検出可能」になりますが、一般には2ビット以上の誤りは訂正できず、3ビット以上の誤りは検出できないことがあります。なお、パリティを利用した誤り訂正の仕組みは、誤りの確率が小さく(例えば1/1000)、複数の誤りは「独立」に起こる場合であれば、1ビットの誤る確率に比べ、2ビット誤る確率はその2乗(1/1000000)ですから、確率の低い機器の故障などによる誤りを検出する場合には十分であることが多く、仕組みが簡単なため、随所に(例えば主記憶装置等に)組み込まれます。なお、誤りの検出と訂正には、パリティだけでなく様々な仕組みがあり、検出・訂正のための冗長ビットを増やすことにより、複数の誤りを訂正できる強力な誤り訂正の機能を組み込むことも可能になります。衛星通信とか探査衛星からの通信など、電波が極めて微弱なため「ノイズだらけである電波信号」の場合でも、強力な誤り訂正の機能を組み込むことにより(冗長性は著しく増えるが)正しい情報を送受信する仕組みが作れ、実際にそのような技術を使っているため、太陽系の遥か彼方から、鮮明な画像などを地球に送ることや、人工衛星を用いた通信が、実用的に使えるようになっています。


【情報量の定義】

・情報量は「確率」により定義されています。確率\(P\)のことが起こったことを知った時に得た情報の量を、\(S=-\log_2{P} \)で定義し、この量を「情報量」と呼びます。

同じことですが、

・「0と1が同等に起こり得そうなとき(確率1/2のとき)0か1を知る」ことを、1bitの「情報量」と呼ぶ、と理解しても良いです。


なお、データ量と情報量は一般には同じではありません。データ量と情報量の差を「冗長性」と言います。


【情報圧縮と解凍(展開)】

データに含まれる情報を「情報量を落とさずに、冗長性を排して」小さくすることを「情報圧縮」と呼びます。圧縮したものから元のデータに復元することを「解凍(展開)」と呼びます。


【可逆圧縮と非可逆圧縮】

圧縮したデータを解凍した時、完全に元に戻るものを「可逆圧縮」と呼び、似ているが完全に元には戻らないものを「非可逆圧縮」と呼びます。非可逆圧縮は主に「人が知覚するための情報(音、画像、映像など)」に用いられます。人が「何を知覚でき、なにが知覚できないか」の研究は現在も急速に進展中であり「知覚できない部分が多く分かればわかるほど、それを利用できるので」非可逆圧縮に技術はまだまだ進展中であり、それにともない新しいファイル形式も生まれています。「未圧縮あるいは可逆圧縮」=劣化無し、「非可逆圧縮」=劣化あり(ビットレートが高いほど劣化が少ない)であるので、必要に応じて使い分けます。

  音: .wav, ....., .mp3, .aac, .....

 画像: .png, .bmp, ... , .gif, .jpg, ....

 動画: .avi, .mp4, ....

それぞれ、どのようなファイル形式(拡張子)のものがあるか、Webで調べておくと良いでしょう(拡張子を全部覚える必要はない。必要な時に即座にファイル形式の情報を引き出せるよう、一度は調べておくこと)。


今回で、「情報のデジタル化」シリーズは終わりにします。数値や文字のデジタル化の話から始まり、音や絵や動画などのデジタル化、認証(証明)暗号化(機密)等のデジタル化、そして、デジタル化された情報を「誤りなく伝達、保存する」技術や、デジタル化された情報を「小さく圧縮して、補完・伝達する」技術等を学びました。細かい理論は既に皆さんが使う機器の中に実装されていますので、知らなくても自然に使っていますが、これらの技術について「大まかに」でも知っておくと、より効率的にデジタル機器を使えると思います。逆に言えば、何も知らないと、上司から言われたからと言って PPAP のような無意味な習慣を顧客に強要してしまったり、普通に文字で表現すれば簡単でデータ量も少ない情報を、印刷した時の見栄えの為だけにエクセル原稿用紙に再利用困難な形での入力を強要したり(神(紙)エクセル)、また、見かけだけのデジタル化の為に文書(少ない文字情報)を印刷した印刷物を(大きなデータ量の)画像データ(ビットマップ)に変換して、しかも文字情報であれば検索できるのに画像として表現しているために検索などの再利用ができないとか、そういう「合理化・効率化と真逆な方向の誤ったデジタル化」に気が付くことも多くなると思います(特に日本の場合、行政機関などが「誤ったデジタル化」を(国民や民間企業などに)強要しているという実態があります)。なお、「間違った命令でも上司の命令に従うべきか、従わないべきか」は、その人の価値観です。ちなみにウクライナ戦争では「上司の命令に従い、民間人を虐殺したロシア兵は、戦争犯罪人として有罪(終身刑)」となりましたが、一方でもしこのロシア兵が「上司の命令に背いていたら、多分上司により命を奪われていた可能性が高い」と思います。戦争はこういう理不尽が多くありますし、現実の「普通の生活」にも理不尽なことは多くあります。しかし、その理不尽さに「気が付いて、矛盾に葛藤しながらも自分の判断で生きていく人」と「何も考えずに、上司の命令を信じて盲目的に行動する人」では、実際に行える行動は似ていても、本質的に違うと思います。なお「軍隊教育・奴隷教育・職業教育」は後者の傾向が高くなり「自由(市民)教育、指導者教育、創造性が必要な職業教育」等は、前者の比率が高いです。自分がどちらを目指すかは、平和な日本でしたら、皆さん自身です。

では、今日は、このへんで終わりにし、次回から、「人工知能(AI)」の話に進みましょう。