読書メモ | 「データ圧縮入門」 - Colt McAnleth Alex Hatch

まえがき: 私はテキストステガノグラフィー研究の分野に出会ってこの本のことを知りました。本書は「データ圧縮」の入門書ともいえる書籍で、エントロピー符号化、可変長符号化、統計符号化、適応統計符号化、辞書符号化、コンテキスト符号化などの一般的な符号化手法の定義と出典を紹介しています。さまざまなシナリオでさまざまな形式の圧縮データを対象に分析します。文体はユーモアがあります。強くお勧めします。この本は全部で 15 章ありますが、私は主に最初の 9 章を読みましたが、参考までに本書を読む途中のメモをいくつか記載します。

◆ はじめに

ロスレス方式
・重複データの除去(LZアルゴリズム)
・エントロピー圧縮(ハフマン符号化、算術符号化)

非可逆手法
• 精度の低下(切り捨てまたはダウンサンプリング)
• 画像/ビデオ圧縮
• オーディオ圧縮

◆第1章は退屈な章ではない

  • データ圧縮は、データを最もコンパクトな方法で表現することに他なりません。

  • データ圧縮アルゴリズムには、可変長コード (VLC)、統計圧縮 (統計圧縮)、辞書エンコード、コンテキスト モデリング、およびマルチコンテキスト モデリングの 5 つのカテゴリがあります。アルゴリズムの 5 つのカテゴリすべてにさまざまなバリエーションがあります。

  • シャノンは 1948 年に「コミュニケーションの数学理論」を出版し、その中で、送信者が送信する情報をどのようにエンコードして最大の効果を達成できるかについて詳細に議論し、情報理論の分野を創設しました。 。メッセージをエンコードするには多くの方法がありますが、アルファベットとモールス信号は 2 つの一般的な方法にすぎません。ただし、特定のメッセージごとに最適なエンコード方法があり、ここでの「最良」とは、メッセージの送信に使用される文字または記号 (情報の単位であるバイナリ ビットとも言えます) を指します。ここでいう「最低限」とは、メッセージに含まれる情報内容によって異なります。シャノンは、メッセージによって運ばれる情報内容を測定する方法を発明し、それを情報エントロピーと呼びました。データ圧縮は実際にはシャノンの研究成果を実際に応用したもので、 「情報を確実に復元できるようにしながらメッセージをどれだけコンパクトにできるか」という問題を研究しています。

  • データを圧縮するには通常、次の 2 つのアイデアがあります。

    • データ内の異なる記号の数を減らします (つまり、「アルファベット」をできるだけ小さくします)。
    • より一般的なシンボルをより少ないビットでエンコードします (つまり、最も一般的な「文字」は最も少ないビットを使用します)。

60 年にわたるデータ圧縮の研究は、上記の 2 つの重要なアイデアに起因しており、データ圧縮のすべてのアルゴリズムは、これら 2 つのうちの 1 つを解決することに重点を置いています。各圧縮アルゴリズムは、シンボルをシャッフルするかシンボルの数を減らすことによってデータをより圧縮しやすく変換するか、最も一般的なシンボルを最小のビット数でエンコードすることによって一部のシンボルが他のシンボルよりも一般的であるという事実を利用します。圧縮目的。

  • データ圧縮の概念は単純明快ですが、実際のアプリケーションではデータ圧縮は複雑です。その理由は、圧縮するデータの種類に応じて、上記の 2 つの考え方のそれぞれに使用できる方法が多数あるためです。したがって、実際にデータ圧縮を行う場合には、以下の要素を総合的に考慮する必要があります。

    • 本内のテキストの圧縮や浮動小数点数の圧縮など、データ処理方法はそれぞれ異なり、対応するアルゴリズムも大きく異なります。
    • 一部のデータは、より圧縮可能にするために変換する必要があります。
    • データが歪んでいる可能性があります。たとえば、夏の全体的な気温は比較的高く、これは、ゼロに近い気温よりも高温が発生する頻度の方がはるかに高いことを意味します。
  • インターネットが誕生したのは 1978 年です。

  • 長い間、Lena プロットは画像圧縮アルゴリズムをテストするために使用される標準的なテスト プロットでした。幸いなことに、それ以来、そのような物議を醸す画像のコーパスはほとんど登場していません。(著者らは Kodak の画像テスト セットを使用することを好みます。) しかし、現在でも、テスト アルゴリズムの標準として Lena プロットを使用する画像圧縮に関する論文が数多くあります。

◆第2章は見逃せない章です

  • データ圧縮は、特定のデータ セットを表すために必要なバイナリ ビットの数を最小限に抑えるだけです。

  • 情報理論によれば、値に含まれる情報内容は、セット内でこの値を一意に決定するために必要な 2 値 (はい/いいえ) の決定の数に等しくなります。

  • 任意の整数を指定すると、それをバイナリ形式に変換できます。残念ながら、整数が与えられた場合、バイナリ変換のプロセスを経ずに、必要なバイナリ ビットの数を直接知ることは困難です。変換プロセスは退屈ですが、幸いなことに数学者はこの問題に対処しやすくするために次の式を用意してくれました:
    LOG 2 ( x ) = ceil ( log ( x + 1 ) / log ( 2 ) ) LOG2(x ) = ceil(log(x+1)/log(2))ログ2 ( × ) _=ce i l ( l o g ( x+1 ) / log ( 2 )) :数値を表すために必要な 2 進数の桁

ここに画像の説明を挿入します

  • 任意の 10 進整数が与えられた場合、対応する LOG2 関数の値を計算することで、この数値を 2 進数で表現するために必要な 2 進数のビットの最小数を知ることができます。シャノンは、変数に対応する LOG2 関数の値をそのエントロピーとして定義しました。これは、数値を 2 進数で表すために必要な 2 進数の最小数です。

  • 値の LOG2 表現は効率的ではありますが、コンピューター コンポーネントの製造方法には実用的ではありません。これの問題は、数値を表すために最小数の 2 進数を使用すると、対応するバイナリ文字列をデコードするときに混乱が生じることです (数値に対応する LOG2 の長さがわからないため)。ハードウェアの実行パフォーマンスは相反しており、この 2 つのバランスを取ることはできません。現代のコンピューターは、さまざまなサイズの整数を表すために固定長の 2 進数を使用するという妥協策を採用しています。最も基本的な記憶単位はバイトであり、8 つのバイナリ ビットで構成されます。最新のプログラミング言語で一般的に使用できる整数の格納タイプには、2 進数 16 桁の short integer、2 進数 32 桁の integer、および 2 進数 64 桁の long integer があります。したがって、10 進数 10 の場合、対応する 2 進数は ですが1010、実際の記憶域では短整数であり、コンピュータでの実際の表現は です0000000000001010明らかに、これでは多くのビットが無駄になります。

◆第3章 エントロピーの突破

  • シャノン博士は、数値に対応する LOG2 関数の値を数値のエントロピーと呼びます。これは、数値を表すために必要な 2 進数の最小数です。彼はさらに、エントロピーの概念 (この用語が提案されたのですから、再利用してはいかがでしょうか...) をデータ セット全体、つまりデータ セット全体を表すために必要な 2 進数の最小数に拡張しました。彼はすべての計算を行い、集合のエントロピーを計算するための次のような洗練された式を思いつきました。H ( S ) = − ∑ i = 1 npi ⋅ lb ( pi ) , lb ( pi ) = log ( pi ) / log ( 2 ) ) H(S) = -\sum_{i=1}^{n}{p_{i}} · {lb(p_{i})}, lb(p_{i}) = log(p_{i })/log(2))H ( S )=i = 1p私はl b ( p私はl b ( p私は)=l o g ( p私は) / log ( 2 ) ) _

ここに画像の説明を挿入します

  • https://rosettacode.org/wiki/Entropyエントロピーのさまざまな言語実装。

  • 特定のデータ セットを表すために必要なビット数を最小限に抑えるために、データ セット内の各シンボルに平均して必要な最小ビット数はエントロピーです。

  • 基本的に、シャノンによって定義されたエントロピーは、逆ソート方式によるデータ ストリーム内の各シンボルの発生確率の推定に基づいています。
    一般に、シンボルの出現頻度が高くなるほど、データ セット全体に含まれる情報内容への寄与が少なくなるというのは、完全に直観に反するように思えるかもしれません。

  • データセットには全体的な情報がほとんど含まれていないため、対応するエントロピー値も非常に小さくなります。

  • エントロピーを突破する鍵は、データセットの構造情報を利用して、ソース情報よりもエントロピーが小さい新しい表現に変換することです。

  • エントロピーは、データ ストリームをエンコードするために必要なシンボルあたりの最小ビット数を定義するだけであることに留意してください。これは、一部のシンボルはエントロピーよりも少ないビンを必要とし、一部のシンボルはエントロピーよりも多くのビンを必要とすることを意味します。

  • コルモゴロフの複雑度は、オブジェクトを決定するために必要な計算リソースを測定します。

◆第4章 VLC

  • モールス信号は、英語での出現確率に基づいて各記号にドットとダッシュを割り当てます。シンボルが頻繁に出現するほど、それに対応するコードは短くなります。19 世紀に遡っても、これはシンボル割り当て可変長コード (VLC) の最初の実装の 1 つであり、情報の送信に必要な全体的な労力を削減することを目的としていました。

  • データ圧縮の場合、私たちの目標は単純です。データ セット内の特定のシンボルに対して、最も可能性の高いシンボルに最短のエンコーディングを割り当てるということです。

  • VLC セットのコードワードを設計するときは、2 つの原則を考慮する必要があります: 第 1 に、シンボルが頻繁に出現するほど、それに対応するコードワードは短くなります。第 2 に、コードワードはプレフィックス プロパティを満たす必要があります。

◆第5章 統計的コーディング

  • 統計的コーディング アルゴリズムは、データ セット内のシンボルの出現確率を使用して、結果をエントロピーにできるだけ近づけてエンコードします。

  • ハフマン符号化:ここに画像の説明を挿入します

  • 算術符号化:
    ここに画像の説明を挿入します

  • 主流の統計符号化方式にはハフマン符号化や算術符号化がありますが、ANS (非対称数値体系符号化) はすべてを変えます。データ圧縮の分野では長い間存在していませんが、過去 20 年間主流であったハフマン符号化と算術符号化に取って代わり始めています。たとえば、ZHuff、LZTurbo、LZA、Oodle、LZNA などの圧縮ツールは ANS を使用し始めています。その速度とパフォーマンスを考慮すると、ANS が主要なエンコード方式になるのは時間の問題と思われます。実際、2013 年に、有限状態エントロピー (FSE) と呼ばれる、このアルゴリズムのよりパフォーマンス指向のバージョンが登場しました。これは、加算、マスキング、シフト演算のみを使用し、ANS を開発により適したものにし、人々の魅力を高めました。そのパフォーマンスは非常に強力であるため、LZFSE と呼ばれる GZIP の亜種が Apple の次期バージョンの iOS のコア API として 2015 年にリリースされました。

◆第6章 適応統計符号化

  • データには常に、特定のシンボル、アイデア、または単語がデータ セットの特定の部分範囲に集中する、局所性に依存したある種の偏りが存在します。

◆ 第 7 章 辞書エンコーディング

  • 情報理論は 1940 年代に確立され、ハフマン符号化は 1950 年代に提案され、インターネットは 1970 年代に登場しましたが、データ圧縮が人々の関心を本格的に呼び起こしたのは 1980 年代になってからです。インターネットの急速な発展に伴い、人々が共有するコンテンツはもはやテキストに限定されず、テキストよりもはるかに大きな写真やその他の形式のデータが共有されるようになりました。同時に、この共有は、ネットワーク帯域幅が制限され、ストレージが高価な時期に発生するため、データ圧縮がこれらのボトルネックを軽減する鍵となります。VLC は常に便利ですが、エントロピーと結びついているという事実により、将来のデータ圧縮の開発も制限されます。したがって、ほとんどの研究者がより効率的な VLC 技術を見つけようとしている一方で、少数の研究者は別の道を選択し、統計的圧縮をより効果的に行うことができるデータを前処理する新しい方法を見つけました。「辞書変換」と呼ばれることが多いこの新しいアプローチは、データ圧縮に対する人々の考え方を完全に変えます。突然、圧縮はあらゆる種類のデータに役立つアルゴリズムになりました。その適用範囲は非常に広く、実際、今日の主流の圧縮アルゴリズム (GZIP や 7-Zip など) はすべて、コア変換ステップで辞書変換を使用します。

ここに画像の説明を挿入します

  • 辞書エンコードの鍵は、最小のエントロピーを生成する単語を見つけることです。1977 年、2 人の研究者、Abraham Lempel と Jacob Ziv が、「理想的な単語の分割」問題を解決するためのいくつかの方法を提案しました。これらのアルゴリズムは、提案された年に応じてそれぞれ LZ77 および LZ78 と名付けられており、最適な単語分割を見つけるのに非常に効率的であるため、30 年以上他のアルゴリズムに取って代わることはできません。
    LZ アルゴリズムのバリアント

◆ 第 8 章 コンテキストデータ変換

  • 隣接するシンボルのセットが与えられた場合、それらを圧縮しやすくするために何らかの方法で変換します。このような変換は、データがどのように理想的にエンコードされるべきかを考える際に、近くのシンボルの影響を考慮するため、このような変換を「コンテキスト変換」と呼ぶことがよくあります。
    これらの変換の目的は同じです。つまり、この情報を何らかの方法で変換することにより、統計的コーディング アルゴリズムは情報をより効率的に圧縮できます。

  • データを変換するには多くの方法がありますが、そのうちの 3 つは最新のデータ圧縮にとって最も重要です。それは、ランレングス エンコード (RLE)、デルタ コーディング (デルタ コーディング)、およびバロウズ ウィーラー変換 (バロウズ ウィーラー変換、BWT) です

  • インクリメンタル コーディングの目的は、データ セット内の変更の範囲を減らすことです。むしろ、データセット内の各値を表すために必要なビット数を減らすことです。

◆ 第 9 章 データモデリング

  • LZ、RLE、インクリメンタル コーディング、BWT などのアルゴリズムはすべて、データの連続性が最適なエンコーディング方法に関連しているという前提に基づいています。

(このうち、データに冗長部分が多い場合にはRun-Length Encodingが適しています)

◆ 第 13 章 シリアル化されたデータ

  • シリアル化は、高レベルのデータ オブジェクトをバイナリ文字列に変換するプロセスです (逆のプロセスは逆シリアル化と呼ばれます)。

関連情報

  1. [メモ] データ圧縮入門 (圧縮を理解する) | Fu Zhe のブログ (fuzhe1989.github.io)
  2. LZW圧縮アルゴリズムの原理解析 - 個人記事 - SegmentFault Sifu

おすすめ

転載: blog.csdn.net/qq_36332660/article/details/133526263