khurata’s blog

khurata’s blog

情報量・ビット・バイト

(もともと「Yahoo!知恵袋」の「知恵ノート」だったものを転載しています)
(最終更新日時:2016/4/18)投稿日:2012/4/11 

はじめに

 ビットバイトキロバイトガバイト等々……「記憶容量」を表す言葉として、我々は普段なんとなくビットやバイトという言葉を使っています。 ビットというのは情報量を表す単位なのですが、では「情報量」とは何でしょうか。

 本ノートでは、高校生でも分かるように、その辺りを説明してみようと思います。

 

情報量とは何か

 我々は、普段の生活で、販促チラシを見て「情報量が多いね」とか、レポートを見て「情報量が少ない」なんて言いますが、そう言っている時の我々は、一体、「何を見て」いるのでしょう。

 ずばり言います。 情報量とは、「起こりにくさを表した値」です。 「発生確率の、別の表現」とも言えます。

 チラシやレポートでは例が複雑なので、もっと単純なたとえ話をしましょう。

 あなたの知人さんと電話がつながっていて、知人さんにサイコロを振ってもらい、出た目を電話で教えてもらう、という状況を思い浮かべてください。

 あなたは、「次に出る目」を予想しようとしても、なかなか難しいはずですね。 普通に考えて、予想が当たる確率は6分の1。
 ……ところが、どうも、妙だ……さっきも「3」だったし、今も「3」。 たまたまか? それとも知人がイカサマをしているのか……?

 知人が振っているサイコロが、どういうものか、こちらでは分かりません。 もし、知人の振っているサイコロの6面全てに「3」が刻まれているのだとしたら……? 1回目だろうが2回目だろうが1億回目だろうが、常に「3」の目が出てくるでしょう。

 さて……電話の向こうで振ってもらって100回目(笑)。 今まで「3」しか出ていません。 こうなると、あなたは、もはや「知人のサイコロは、全ての面が3だ」という事を疑わないでしょう。 3の目は100パーセント。 きっと101回目も「3」だ。

 こういう状況の事を、「電話の向こうのサイコロ」という事象の情報量はゼロである、と言います。 いくら振っても、その事象が何回続いても、何も新しい情報が得られないからです。 「確実にこうなると分かっている事象は、情報量が無い」のです。

 宿題をしなければ怒られる、雨の中を歩けば濡れる、コーラを飲んだらゲップが出る、これらは全て、情報量がゼロです。 「当然のこと」「超つまらない出来事」とも言えます。

 では、情報量が「有る」と言える事象のうち、もっとも情報量が小さいのは、どういう事象でしょうか。 「電話の向こうのサイコロ」の例を、少し変えて説明しましょう。

 今度は、知人からの電話を聞いていると、どうも、「3」か「5」しか出ていない……またもや100回振ってもらったが、「3」と「5」以外は聞いていない。 どうやら、知人が使っているサイコロの目は、3と5しか無いようだ……。

 さて、「次の目」は、何が出るでしょう?
 「3」か「5」か、どちらかだ、と考えられますね。 どちらかしか無く、しかし、どちらであるかは、分かりません。

 「結果が2通りしか無く、どちらも同確率」の事象……これが、「ゼロではない最小の情報量」を持つ事象です。

 「情報量」とは言ってみたものの、「量」と言うからには、数値化したいものです。 小さい、大きい、では話になりません(汗)。

 そこで数学者達は、情報量の算出式を考え出しました。 それは、「発生確率の逆数の対数」というものです。 つまり、発生確率が p ならば、log( 1÷p ) が情報量です。

 この式の意味するところは、「確率の低い事ほど大きな値になる」、です。 log( 1÷p ) は、-log( p ) と同じなので、情報量は「確率の対数の負数」とも言えます。 対数の底は何でも良いのですが、情報量の単位としてビット(bit、Binary digit)を使う場合、底は2とします。

 すなわち、情報量ビットは、「発生確率の『2を底とした対数』の負数」である、という事になります。

 「3」か「5」しか無いサイコロは、どちらも確率は50パーセント、つまり0.5です(両方とも3面ずつの場合)。 確率0.5を、上記の式に当てはめて計算すると、-log2( 0.5 ) = 1(ビット)となります。

 この情報量「1ビット」が、「3と5が同じように出るサイコロ」の情報量、すなわち「同じ確率の選択肢が2つしか無い、そのいずれか」の情報量……ゼロではない最小の情報量です。

 関数電卓では、常用対数(10 を底とした対数)しか計算出来ないものがあります。 こういう場合、高校で習う log2( x ) = log10( x ) ÷ log10( 2 ) を利用して計算します。

 -log2( 0.5 ) = -( log10( 0.5 ) ÷ log10( 2 ) ) = -( -0.30102999… ÷ 0.30102999… ) = -( -1 ) = 1

 いちおう、「3しか出ないサイコロ」の情報量も、計算してみましょう。 確率1ですから、次の計算になります。
 -log2( 1 ) = -( log10( 1 ) ÷ log10( 2 ) ) = -( 0 ÷ 0.30102999… ) = -( 0 ) = 0

 というわけで、やはりゼロでした。 「つまらなさ」が見事に数値化された、とも言えます(笑)。

 

情報量の多い事象

 しつこいようですが、もう1度、「電話の向こうのサイコロ」の例を、少し変えて使います。

 今度は、知人は普通のサイコロを使っているらしく、「1」から「6」までが、まんべん無く出ています。 さて、次の目は何か……どの目も、確率は6分の1です。
 このサイコロの情報量は、「3だけのサイコロ」や、「3と5だけのサイコロ」より、多い……ということは、わざわざ計算しなくても直感的に分かりますね。

 具体的に、どれほどの情報量か、計算してみましょう。 6分の1は、だいたい、0.16666667 とか、電卓で扱うなら、そんなもんですね。 これを、さっきの式に当てはめてみます。

 -log2( 0.16666667 ) = -( log10( 0.16666667 ) ÷ log10( 2 ) ) = -( -0.77815124… ÷ 0.30102999… ) = -( -2.5849625… ) = 2.5849625…

 約 2.5849625ビット、これが、6面ある普通のサイコロの情報量です。
 「3と5だけのサイコロ」の情報量は1ビットでしたが、それよりも多いです。 「多くの結果に成り得る事象は、より多くの情報量を持つ」のです。 我々の感覚と、なんとなく合致しているのではないでしょうか。

 原稿用紙400字には、1マス1マス毎に、数千~数万通りの字が入り得ます。 それが400個も並ぶのですから、それが表す「最大の情報量」は、「サイコロ1個を1回振る」の比ではありません。 広告チラシとか、新聞とか、ウェブページも、「掲載出来る情報量」はかなり大きいわけです。

 でも、いくら「掲載可能な情報量」が多くても、もし、今日の新聞が昨日と全く同じ内容だったら、つまり100%前回と同じ内容だったら、今日の新聞の情報量は、ゼロです。 全ての字が変わらない、それは「常に3が出るサイコロ」と同様です。 昨日の新聞と、今日の新聞は、違っているからこそ、そこに「情報量が有る」のです。
 昨日と今日で1文字しか違わないのだとしたら、情報量はゼロではありませんが、かなり小さいですね。 変化の小さいものは、「全体的に同じである確率」が高いと言えるので、情報量も小さいのです。

 「掲載可能な情報量」とは、情報を入れる「器の大きさ」です。 その器に、どれだけの情報が入っているか・入れられるか、それは、新聞を作る人達の努力によって決まるわけです。
 「広い紙面で、30ページあるけども、連日のように似た内容の新聞」と、「小さな紙面で1ページしかないが毎日違う事が載っているチラシ」とでは、「情報の器」は前者が大きいですが、実際の情報量は、後者の方がはるかに大きいわけです。 これはまさに、我々の普段の感覚と合致していますね。

 「つまらなさ」は、「実際の情報量÷情報量の器の大きさ」で決まる、とも言えそうです(笑)。

 繰り返しになりますが、情報量が多い事象は、それだけ「起こりにくい事」です。 「3と5だけのサイコロで3が出る」よりも、「普通のサイコロで3が出る」ほうが、「起こりにくい事」なので、情報量も大きくなるのです。 次の日に何が載っているか、予想しにくい新聞・チラシほど、情報量は大きいのです。
 つまり「意外な事ほど、情報量は大きい」という事であり、面白さと情報量は、相関がありそうな感じがします。

 

ビット―情報量の最小単位

 よく聞く言葉ですね、「ビットは情報量の最小単位」とか、1ビットは0か1である、とか、1ビットはtrue)かfalse)かである、とか……。
 これらはいずれも正しい話なのですが、「0か1か」と「真か偽か」は、全然違うじゃないか!と憤慨していた方もいらっしゃるのではないでしょうか。

 でも、さっきの「3と5だけのサイコロ」のたとえ話や、情報量ビットの算出方法をすでに知っている我々は、それが「0と1」であっても、「真と偽」であっても、情報量としては同じだ、と理解出来ます。

 この、「どちらかしかない」情報量「1」―ゼロではない最小の情報量です―を格納する「最小の器」、それを、ビット bit と名付けて呼んでいます。

 「昨日と同じ新聞」のたとえで分かるように、同量の情報量を格納できる器は、いろいろな大きさが有り得ます。 ですから、「最小の器」を考えて、それを「情報量の最小単位」だ、としたのです。

 「3と5」であろうが「0と1」であろうが「真と偽」であろうが「生と死」であろうが、どれも情報量を計算すれば1ビットであり、これが最小の情報量だ、というわけです。

 2進数は、数字が0と1しかないので、2進数の1桁は、1ビットで表すことが出来ます

 ここは気を付けてください。 情報量1ビットは、2進数の1桁とイコールではありません。 2進数の1桁は0か1ですが、1ビットは「3と5」を表すことも出来るのです。 かたや数字、かたや情報量です。 混同してはいけません。
 ただ、bit は binary digit(2進数の数字)から出来た言葉でもあり、2進数1桁のことを1ビットと呼ぶ慣例も定着しています。 情報量ビットと2進数ビットの使い分けを心がけましょう。

 

コンピュータと2進数

 コンピュータは2進数で動く、とか、0と1しか処理出来ない、なんて事を聞いた事があると思います。 でも、なぜ2進数なのでしょう。 我々が使い慣れている10進数では、都合が悪いのでしょうか。

 足し算の回路を作ることを考えてみましょう。 10進数の足し算のルールは、100通りあります。
 0+0=0、0+1=1、0+2=2、0+3=3、……
 1+0=1、1+1=2、1+2=3、1+3=4、……
 ……
 9+0=9、9+1=10、9+2=11、9+3=12、……

 つまり10進数の足し算回路とは、「10通りの入力が2つと、100通りの動作パターンを持つ回路」だ、という事になります。

 2進数の足し算だと、どうなるでしょう。 2進数の足し算のルールは、わずか4通りです。

 0+0=0
 0+1=1
 1+0=1
 1+1=10

 これで全てです。 2進数の足し算回路とは、「2通りの入力が2つと、4通りの動作パターンを持つ回路」に過ぎません。

 機械に詳しくなくても、どっちが作りやすいかは、はっきりとお分かりいただけるでしょう。

 2進数1桁は、0か1かだけしか表せませんが、たくさん並べれば、望むだけ大きな数を扱う事が出来ます。 2進数ならば、0を1に、1を0に、桁反転させる事も簡単です。 これによって、「補数を使った引き算」も、簡単に実現できます。 足し算と引き算さえ出来れば、理屈の上では、どんな数値計算でも出来ます。
(補数については右記ノートを参照 https://khurata.hatenablog.com/entry/2019/04/04/021054

 というわけで、2進数だと、回路がとても作りやすいので、コンピュータは2進数を使うのです。

 また、2進数1桁は、「0と1のうち、いずれか2分の1」の情報量を持つので、きっかり1ビットの情報量を表現するのにも使い勝手が良いのです。
 10進数1桁は「0~9のうち、いずれか10分の1」の情報量を持ちますから、-log2( 0.1 ) = 3.3219281…(ビット)という、半端な情報量になります。

 

ディジタル・データ―「有限の立場」と標本化

 ディジタル digital は、「離散的」なんて、難しそうな訳語が当てられてますが、そんなに難しい話ではありません。

 この語源はディジット digit(指)です。 数を数える時、指を折って数える事がありますけれども、1、2、3……と数えていく時、次の指を途中まで曲げて「3.14159」とかを表したりはしません
 指折り数える時、3の次は4になり、その間は使いません。 つまり飛び飛びなので、これを離散的と言います。 「連続的 analog」の対語です。

 ディジタル・データとは、「有限個の数字や文字で表せるデータである」とも言えます。 しかしディジタル・データでは、ありふれたスピード・メーターの針の位置―これは連続量(アナログ・データ)です―を「正確に」書き表す事は出来ません。 目盛りの間をどれだけ細かく区切っていっても、その桁は永遠に続くからです。 連続量は「有限個の数字や文字」では表せないのです。

 スピード・メーターの他にも、円周率や、目に見える色彩、音、気圧、重さなど、連続量っぽいものは、世の中にたくさんあります。 我々の感覚する自然の中には、むしろ離散量の方が見出しにくいでしょう。
 でも我々は、時速55キロだ、とは言っても、時速55.587604キロだ、なんて、普段は言いません。 どこかでブッた切っちゃいますね。
 理屈として、スピード・メーターの針は「無限の桁数」を表せると知っていても、話をする時には、有限の桁数に切り捨てるわけです。

 なぜ我々は、無限の連続量を、有限の離散量に「切り捨てる」のでしょう。

 それは、文字や言葉を使って、「正しいやりとり」をしたり、「正しい答え」を出すためです。

 我々が使う言葉は、有限種類の文字を、有限個数だけ組み合わせたものです。 どんなに文字の種類が多くても、漢字は十数万種類しかなく、世界中の書物の文字数を全部足しても、無限にはなりません。 ですから、文字や言葉で連続量を書き表す事は出来ません。

 しかし、有限だからこそ、その全てを伝えきる事が出来ます。 もし、この知恵ノートの文字数が無限だったら、誰も読み終える事が出来ません。 「クラスの生徒の中で、一番背の高い生徒を1人選び出す」という課題がある時、もし生徒の人数が無限だったら、正しい答えは出せません。

 この世界が無限の連続量で出来ているのだとしても、話を伝えたり、課題を解決して何らかの答えを出すために、それを「有限に切り捨てて」離散量に当てはめる……こうした考え方を、「有限の立場」と呼びます。 そして、この切り捨て処理を、標本化サンプリング sampling)と呼びます。

 コンピュータにスピード・メーターの針を「読ませる」時、どんなに精密に、小数点以下100桁、1万桁まで精度良く読ませたとしても、どこかで桁を打ち切らなければなりません。
 コンピュータで色彩豊かな画像を扱う時も、それが1億色だろうが1兆色だろうが、どこかで上限を決めなければなりません。
 「有限個の文字や数字や言葉でしか表せないもの」だけを扱うことによって、我々やコンピュータは正しい動作が出来るのです。

 

そのデータは何ビット?―記憶容量と符号化

 我々が今見ているコンピュータ上の文字も、ディジタル・データです。 ここでは、「ディジタル・データ」という文字の並びは、どれだけの情報量か、実際に計算してみようと思います。

 計算するには、「それは何文字か」、そして「1文字あたりの情報量」が必要です。 もちろん、どちらも有限(の離散量)でなければなりません。

 「ディジタル・データ」は9文字ですが、問題はその後です。 1文字あたりの情報量を、どうにかして決めねばなりません。

 英語圏では、扱う文字は大文字・小文字で52種類、数字が10種類、よく使う記号などを入れても、せいぜい100種類前後です。
 仮に、きっかり100種類だとすると、1文字は「100種類のうち、100分の1のどれか」ですから、1文字あたりの情報量は -log2( 1÷100 ) =約 6.6438563 ビットです。

 -log2( 0.01 ) = -( log10( 0.01 ) ÷ log10( 2 ) ) = -( -2 ÷ 0.30102999… ) = -( -6.6438563… ) = 6.6438563…

 コンピュータでは、2進数1桁、つまり1ビット分を「情報の器」として使っていますから、上記をコンピュータで扱うには、小数点以下を切り上げて、7ビットの記憶容量があればOKです。
 「digital data」という文字の並びは、7ビット×12文字=84ビットの「器」(情報容量)があれば表現出来るわけです。

 英語圏では、「1文字は7ビットで充分」「いや9ビットは必要だろう」など、過去様々な議論がありまして、現在は、1文字あたり7ビットか8ビットで落ち着いています。
 そして、このような「1文字を表すのに都合がよいビット容量」を1つの単位として、これをバイト byte と名付けました。 英語圏の1文字は、おおむね1バイトで表せるわけです。
 ですので、実は、1バイトは8ビットだったり、7ビットだったり、9ビットだったり、まちまちです。 もっとも、それでは不便なので、便宜上、単に1バイトと言った時は、それは8ビットの事だ、という話になっています。

 1文字あたりの容量を8ビットと決めたら、次に、それぞれの文字をどんな2進数の並びに対応させるか、という話も必要です。 それを勝手にやっちゃうと、違うコンピュータの間で文字データを相互にやりとり出来なくなってしまいます。
 そこで、たとえば A は 01000001、B は 01000010、…という約束事を決めました。
 このような「どの文字をどういう2進数並びに対応させるか」という約束事を、「文字符号化文字エンコーディング character encoding」と呼びます。

  たとえば「3と5だけのサイコロ」を「1ビットに符号化」するなら、「3」を 0、「5」を 1 と決めれば良いわけです。 しかし、もし逆の取り決めをしているコンピュータがあると、情報のやりとりが正しく出来ないので、符号化方式はなるべく統一する事が求められます。
 コンピュータで扱うディジタル・データは、文字・数字だけでなく、画像・動画、音声などがありますが、これらについても、「どういう2進数の並びにするか」という符号化方式が決められています。
 様々な符号化方式を決めてあるおかげで、「コンピュータは2進数しか使えない」にもかかわらず、様々なデータを扱えるのです。
(参考 https://blogs.yahoo.co.jp/khurata/66296823.html


 さて、「ディジタル・データ」という文字の並びは日本語です。 日本語には、英字・数字・漢字・仮名など、たくさんの種類の文字があります。
 日常的に使うものだけでも数千種類、たまにしか使わないものを含めれば数万種類の文字があるでしょう。 1文字8ビットでは、到底足りません。
 そこで、「シフトJIS」という符号化方式では、1文字を最大16ビットにしよう、と決めました。 16ビットあれば、2の16乗=65536種類の文字が格納出来るので、充分だろう、というわけです(シフトJIS 以外の符号化方式では、1文字3バイトや4バイトになる場合もあります)。

 これでやっと「ディジタル・データ」の情報容量が計算出来ます。 9文字×16ビット=144ビット、もしくは、16ビットを2バイトとして、9文字×2バイト=18バイトです。

 「ディジタル・データ」という文字並びを記憶・保持したければ、最低でも18バイト分の記憶容量が必要なのです。
 より多くの記憶容量があれば、より多くの情報が扱えます。 「知恵ノート」は日本語で最大1万文字書き込めますから、知恵ノート1つあたりの記憶容量は2万バイト必要です。

 

情報の圧縮

(字数がギリギリでしたので、別ノート「情報の圧縮」 https://khurata.hatenablog.com/entry/2019/04/04/045011 へ移項しました、あわせてご覧頂ければと思います)

 

まとめ

  • 情報量とは、「事象の起こりにくさ、確率」を表した値である
  • 情報量の最小単位はビット
  • 1ビットを格納するための器は2進数1桁で足りる
  • コンピュータは2進数を処理するように作られている
  • 無限の連続量(アナログ・データ)は標本化により、有限の離散量(ディジタル・データ)に写し取れる
  • ディジタル・データは符号化により、2進数の並びになる
  • ディジタル・データの情報量や容量はビット、バイトで表せる
  • 1バイトは、おおむね8ビット

 

 ……いかがでしたか? これらの説明には、本来、色々な数学が必要なのですが、難しい言葉や理論を持ち出さなくても、なんとなく分かっていただけたのではないでしょうか。
(転載以上)