川村渇真の「知性の泉」

画期的な劣化なし圧縮は大ウソ


大ウソを真面目に取り上げるメディア

 米国のZeoSyncという会社が、劣化なしにデータを1/100以下に圧縮できる新技術を発表したというニュースを読んだ。最初にハッキリと言ってしまうが、これは大ウソである。
 記事の内容で一番驚いたのは、発表された新技術の扱い方だ。圧縮技術の専門家が「不可能だ」と断言し、「誰も信じていない」と書きながら、本当かもしれないというニュアンスの記事になっている。専門家の意見を正しく理解し、もっとハッキリ「大ウソだ」と書くべきである。
 こうした記事になってしまう理由は、技術的な知識の不足も一因だろう。しかし、もっと大きな理由は、論理的な思考能力の低さだ。双方の意見が食い違っているとき、どちらの言っている内容が正しいのか、論理的に分析して判断すべきである。それをやらないで記事を書くから、誤解を与える記事になってしまう。
 今回の場合は、劣化なしの圧縮技術とは、どのような特徴があるのか、正しく理解していない点が問題である。それが理解できると、大ウソであることが分かるからだ。というわけで、劣化なしの圧縮とはどのような特徴を持つのか、簡単に解説してみよう。

劣化なしの圧縮技術の真実を知ることが必須

 劣化なしの圧縮というのは、圧縮前のデータを圧縮し、それを復元したとき、圧縮前と同じデータに戻せることを意味する。これを達成するためには、圧縮前のデータが少しでも異なる場合、圧縮したデータも、違うデータに変換されなければならない。つまり、「圧縮前のデータ個数と、圧縮後のデータ個数は等しい」のだ。もし異なるデータを圧縮して、同じデータになるなら、完全に復元できないことを意味するからである。この点こそ、劣化なしの圧縮の普遍的な特徴といえる。
 この特徴をもとにして数学的に検討すれば、圧縮技術の真実が見えてくる。話を分かりやすくするために、コンピュータ上のデータを考えよう。コンピュータでは通常、データを1バイト単位で扱うため、圧縮前のデータも1バイトが単位となり、それが複数連なったデータとして捉えられる。連なった個数が長さで、10個連なれば10バイトだ。
 次に、データの個数を数えてみよう。1バイトでは256種類を表現できるので、長さが1バイトのデータは256個ある。同様に2バイトの長さのデータは、256×256=6万5536個ある。これ以降も同じようにして、データの全体個数が計算でき、存在するデータの個数は決まっている。
 話を単純にするために、長さが2バイトまでの集合を扱おう。256個+6万5536個=6万5792個だ。これを圧縮するとき、圧縮アルゴリズムをブラックボックスとして捉え、圧縮結果のデータが出てくるとする。劣化なしの圧縮では、圧縮前と圧縮後のデータ数が同じであるから、圧縮したデータの集合の個数も6万5792個になる。ここまでは、誰もが正しく理解できたとだろう。
 面白いのは、この続きだ。ある2バイトのデータを圧縮したとき、1バイトのデータに変換されたとしよう。これは、データの長さが短くなったので、圧縮できた例といえる。では、他のデータでは、どうなるだろうか。圧縮前の集合も、圧縮後の集合も、1バイトの長さを持つデータの数は256個しかない。ある2バイトのデータを圧縮したとき1バイトになったということは、圧縮後の1バイトのデータが1つ使われたことを意味する。残りは255個だ。圧縮前の1バイトのデータは、まだ256個あるので、その全部を圧縮したとき、全部が1バイトにはならない。圧縮後の1バイトのデータは、すでに1つ使われているからだ。ということで、圧縮前の1バイトのデータの少なくとも1つは、2バイト以上のデータとなってしまう(3バイトもあり得るということ)。
 ここまでの説明で、ピンと来ただろう。圧縮前も圧縮後も、ある長さのデータ個数は、同じなのである。特定のデータが圧縮されたとすれば、その影響として、別なデータを圧縮したとき圧縮前よりも長くなってしまう。圧縮アルゴリズムは、圧縮前のデータと、圧縮後のデータを1つずつ結んだペアの作成に等しい。たとえば、圧縮前の長さ2バイトの1つのデータを、圧縮後の長さ1バイトの1つのデータに結びつけるという具合に。そして、圧縮前よりも短くなるペアができると、その影響によって、圧縮前よりも長くなるペアが生まれるというわけだ。
 以上の説明のように、劣化なしの場合、圧縮のアルゴリズムがどんなものであれ、この法則を打ち破ることは絶対にできない。これこそ、劣化なしの圧縮の制限である。

劣化なしの圧縮技術は、得意分野が必ずある

 それでは、なぜ圧縮できるのだろうか。実際のデータは、何らかの特徴を持っている。テキストだけしか含まれていないとか、特定の値に偏っている、などが代表例な特徴だ。他に、直前の値と近い値が並ぶとか、同じ値が続きやすいといった特徴がある。こうした特徴を見付けて、それを前提として圧縮アルゴリズムを見付け、圧縮できるように設計する。
 実際のデータの多くは、事前に設定した特徴を満たすので、このような設計でも多くのデータが圧縮できてしまう。これを長さで考えると、圧縮前のデータの長さよりも、圧縮後のデータの長さが短くなる変換だ。圧縮によって短くなったデータがあるため、逆に長くなるデータも生んでしまう。こちらの方は苦手なデータだが、現実に存在する数が少ないので、大きな問題とならない。
 以上のことから分かるように、どのような圧縮アルゴリズムでも、圧縮できるデータの特徴があって、それを満たしたデータだけが圧縮できる。それ以外のデータでは、圧縮前よりも長くなることも起こる。これこそ、劣化なしの圧縮技術の普遍的な特徴である。
 というわけで、劣化なしの圧縮では、どのようなデータなら圧縮できるのか、条件を示す必要がある。それが判明すれば、圧縮できない不得意分野も推測できる。どんなデータでも圧縮できるなんて考えるのは、何も知らない素人だけだ。

劣化なしで1/100以下が意味すること

 例の圧縮技術では「劣化なしで1/100以下」を実現する言っている。この圧縮率が意味する内容を理解するために、劣化なしの圧縮における別な特徴も取り上げよう。
 1/100という圧縮率を、ここまでの話と同じように、データの個数で考えてみよう。話を単純にするために、もっとも簡単な集合を考える。圧縮率が1/100なので、100バイトのデータが1バイトになる集合だ。1バイトの長さのデータ数は、たった256個しかない。では、100バイトのデータは何個あるだろうか。(256の100乗)なので、とんでもない数である。そんな多くのデータ数の中から、たった256個だけしか1/100に圧縮できない。圧縮できるデータの構成比率を計算すると、256/(256の100乗)=1/(256の99乗)となる。ごくごく一部のデータしか達成できない、極めて低い比率だと分かる。
 同じように、200バイトのデータを圧縮して、2バイトに変換する場合を考えよう。200バイトのデータ数は(256の200乗)個で、2バイトのデータ数は(256の2乗)個だ。圧縮後のデータ数は増えたが、それ以上に圧縮前のデータ数が増えている。1バイトのときと同じように、1/100の圧縮が達成できるデータの構成比率を計算すると、(256の2乗)/(256の200乗)=1/(256の198乗)となる。1バイトの場合よりも、格段に少ない比率のデータしか、1/100の圧縮が実現できない。この構成比率は、圧縮前のデータが長くなるほど小さくなり、どんどんとゼロに近づく。
 実は、1/100に圧縮できるデータの構成比率は、もっと少ない。圧縮前のデータには、長さ199バイトのデータが(256の199乗)個、長さ198バイトのデータが(256の198乗)個という具合に、間の長さのデータもあるからだ。これらも全部含めて計算し、1/100に圧縮できるデータの構成比率を求めなければならない。当然ながら、比率はさらに下がってしまう。
 こうした全データの個数だけでは理解できない人のために、英文テキストの圧縮で考えてみよう。英文テキストで使う文字は、大文字小文字の英字が52個、数字が10個、タブや改行や記号は計算しやすいように18個とすると、合計で80個。これがたった2バイトの長さになるだけでも、80×80=1600個に達する。圧縮後の1バイトは256個しかないので、2バイトの長さですら、全部を1バイトに圧縮できない。80個の文字が長さ100バイトになったら、(80の100乗)個もあるので、1バイトに圧縮するのは絶対に不可能。圧縮前が200バイトになったら、圧縮できるデータの構成比率はさらに下がる。  ここまでの話で、劣化なしで1/100以下に圧縮するということが、どういう意味なのか理解できただろう。どんな圧縮アルゴリズムであっても、圧縮率が大きいほど、ごくごく一部のデータしか、その圧縮率を達成できないわけだ。これも、劣化なしの圧縮の特徴である。

専門家の意見を正しく評価すべき

 例の新圧縮技術は、どのような方法を用いているのだろうか。記事によると、「圧縮後のデータを数式で表すので、1/100以下の高圧縮が可能になった」ように説明してある。一見すると、数式から長いデータを生み出す方法なので、何となく可能な印象を受ける。でも、だまされてはいけない。劣化なしの圧縮では、圧縮前と圧縮後の個数が同じになるという普遍的な法則があるのだ。
 圧縮後のデータを数式で表したとしても、圧縮前の全データを変換したとき、圧縮後のデータも別々な値にならなければ復元できないので、同じ個数が必要となる。1バイトなら256個、2バイトなら6万5536個しかないので、同じように制約を受ける。いくら数式で表そうが、圧縮後のデータ個数を減らすことはできない。つまり、圧縮できるデータもあるが、逆に圧縮前より長くなるデータも発生する。
 しかも、1/100以下という圧縮率なので、ごくごく一部のデータだけしか、その圧縮率を達成できない。ということは、高圧縮率を達成できる条件が非常に狭いことを意味する。当然、もし達成できたとしても、一般のデータに広く適用できるような圧縮アルゴリズムにはならない。劣化なしの圧縮の特徴から考えて、これほどの高圧縮率では、何にでも利用できる圧縮方法になるはずがないのだ。

 ここまでの説明で、劣化なしの圧縮が持つ特徴を理解できたと思う。それを適用して、例の新技術を評価すれば、大ウソだと分かるだろう。
 にもかかわらず、もしかして実現できるかもしれないと報道する行為は、それを信じて投資する人を生む可能性がある。かなり問題のある行為といえる。こうした行為を防ぐためには、専門家の主張する内容を理解しようと努力し、どちらが正しいか論理的に評価する必要がある。もし1回聞いて分からなければ、分かるまで説明してもらうとか、もっと分かりやすく説明してくれる人を見付けるとか、何らかの対処方法があるだろう。
 また、専門家の説明を少しでも理解できるようになるためには、論理的な思考能力を高める必要がある。これも大事な点だ。

今回の方法:対象物の1つの特性でウソか調べる

 今回の分析では、圧縮前と圧縮後のデータ個数を用いながら、ウソを見極めてみた。この思考方法は、対象物が持つ特性の1つを用いて、ウソかどうか調べる方法といえる。1つの特性しか見ないので、ウソかウソでないかの判断はできるが、本当だとの判断はできない。また、この方法でウソだと見抜ける対象は、それほど多くはない。

(2002年2月27日)


下の飾り