Московский государственный университет имени М.В.Ломоносова
Опубликован: 10.10.2007 | Доступ: свободный | Студентов: 1478 / 158 | Оценка: 4.36 / 4.18 | Длительность: 14:22:00
Специальности: Программист
Лекция 3:

Методы контекстного моделирования

Аннотация: В лекции рассматриваются основные термины методов контекстного моделирования, приводятся классификация и краткое содержание стратегий моделирования, описываются основные понятия, виды и механизмы контекстного моделирования, приводится пример его практической применимости. Большое внимание в лекции уделяется алгоритму PPM, в частности рассматривается пример его работы, а также пример реализации PPM-компрессора. Описываются механизмы оценки вероятности ухода априорными, адаптивными методами, а также методом Z
Ключевые слова: парадигма, v-model, AND, отображение, поток, кодирование, моделирование, теорема Шеннона, вероятность, средняя длина кода, ПО, входной, статистика, входная строка, predictor, символ алфавита, энтропия, формула Шеннона, декодирование, декомпозиция, кодер, длина, пункт, источник данных, адаптация, структура данных, потоки данных, опыт, устойчивость, робастность, ущерб, гибридные схемы, очередной символ, блок данных, распределение вероятности, значение, пробел, анализ, улучшение, объектный файл, finite, context, конкатенация, мегабайт, pure, blending, кодирование символов, альтернатива, escape, predict, matching, значимость, ppm, универсальный алгоритм, группа, алгоритм, strategy, длина блока, очередь, код символа, вероятности перехода, контекст, инкремент, оценивание, алфавит, ESC, Указатель стека, SP, глобальные переменные, encode, dummy, тестовый набор, compression, вычитание, тип файла, secondary, estimated

Применение методов контекстного моделирования для сжатия данных опирается на парадигму сжатия с помощью "универсальных моделирования и кодирования" (universal modelling and coding), предложенную Риссаненом (Rissanen) и Лэнгдоном (Langdon) в 1981 году [3.12]. В соответствии с данной идеей процесс сжатия состоит из двух самостоятельных частей:

  • моделирование;
  • кодирование.

Под моделированием понимается построение модели информационного источника, породившего сжимаемые данные, а под кодированием - отображение обрабатываемых данных в сжатую форму представления на основании результатов моделирования (рис. 3.1). "Кодировщик" создает выходной поток, являющийся компактной формой представления обрабатываемой последовательности, на основании информации, поставляемой ему "моделировщиком".

Схема процесса сжатия данных в соответствии с концепцией универсальных моделирования и кодирования представлена на рис. 3.1

Схема процесса сжатия данных в соответствии с концепцией универсальных моделирования и кодирования

Рис. 3.1. Схема процесса сжатия данных в соответствии с концепцией универсальных моделирования и кодирования

Следует заметить, что понятие "кодирование" часто используют в широком смысле для обозначения всего процесса сжатия, т.е. включая моделирование в данном нами определении. Таким образом, необходимо различать понятия кодирования в широком смысле (весь процесс) и в узком (генерация потока кодов на основании информации модели). Понятие "статистическое кодирование" также используется, зачастую с сомнительной корректностью, для обозначения того или иного уровня кодирования. Во избежание путаницы ряд авторов применяет термин "энтропийное кодирование" для кодирования в узком смысле. Это наименование далеко от совершенства и встречает вполне обоснованную критику. Далее в этой главе процесс кодирования в широком смысле будем именовать "кодированием", а в узком смысле - "статистическим кодированием", или "собственно кодированием".

Из теоремы Шеннона о кодировании источника [3.13] известно, что символ s_i, вероятность появления которого равняется p(s_i ), выгоднее всего представлять - \log _2 p(s_i ) битами, при этом средняя длина кодов может быть вычислена по приводившейся ранее формуле (1). Практически всегда истинная структура источника скрыта, поэтому необходимо строить модель источника, которая позволила бы нам в каждой позиции входной последовательности найти оценку q(s_i ) вероятности появления каждого символа s_i алфавита входной последовательности.

Оценка вероятностей символов при моделировании производится на основании известной статистики и, возможно, априорных предположений, поэтому часто говорят о задаче статистического моделирования. Можно сказать, что моделировщик предсказывает вероятность появления каждого символа в каждой позиции входной строки, отсюда еще одно наименование этого компонента - "предсказатель", или "предиктор" (от "predictor"). На этапе статистического кодирования выполняется замещение символа s_i с оценкой вероятности появления q(s_i) кодом длиной - \log _2 q(s_i) битов.

Рассмотрим пример. Предположим, что мы сжимаем последовательность символов алфавита {'0','1'}, порожденную источником без памяти, и вероятности генерации символов следующие: p('0') = 0.4, p('1') = 0.6. Пусть наша модель дает такие оценки вероятностей: q('0') = 0.35, q('1') = 0.65. Энтропия H источника равна

&  - p('0')\log _2 p('0') - p('1')\log _2 p('1') =\\ 
    =  - 0.4\log _2 0.4 - 0.6\log _2 0.6 \approx 0.971\;бита.

Если подходить формально, то "энтропия" модели получается равной &  - q('0')\log _2 q('0') - q('1')\log _2 q('1') = \\
  &  =  - 0.35\log _2 0.35 - 0.65\log _2 0.65 \approx 0.934\;бита.

Казалось бы, что модель обеспечивает лучшее сжатие, чем это позволет формула Шеннона. Но истинные вероятности появления символов не изменились! Если исходить из вероятностей p, то '0' следует кодировать {\rm{ - log}}_{\rm{2}} {\rm{0}}{\rm{.4}} \approx 1.332, а для '1' нужно отводить {\rm{ - log}}_{\rm{2}} {\rm{0}}{\rm{.6}} \approx 0.737 бита. Для оценок вероятностей q мы имеем {\rm{ - log}}_{\rm{2}} {\rm{0}}{\rm{.35}} \approx 1.515 бита и {\rm{ - log}}_{\rm{2}} {\rm{0}}{\rm{.65}} \approx 0.621 бита соответственно. При каждом кодировании на основании информации модели в случае '0' мы будем терять 1.515 - 1.322 = 0.193 бита, а в случае '1' выигрывать 0.737 - 0.621 = 0.116 бита. С учетом вероятностей появления символов средний проигрыш при каждом кодировании составит 0.4·0.193 - 0.6·0.116 = 0.008 бита.

Вывод: Чем точнее оценка вероятностей появления символов, тем больше коды соответствуют оптимальным, тем лучше сжатие

Правильность декодирования обеспечивается использованием точно такой же модели, что была применена при кодировании. Следовательно, при моделировании для сжатия данных нельзя пользоваться информацией, которая неизвестна декодеру.

Осознание двойственной природы процесса сжатия позволяет осуществлять декомпозицию задач компрессии данных со сложной структурой и нетривиальными взаимозависимостями, обеспечивать определенную самостоятельность процедур, решающих частные проблемы, сосредотачивать больше внимания на деталях реализации конкретного элемента.

Задача статистического кодирования была в целом успешно решена к началу 1980-х годов. Арифметический кодер позволяет сгенерировать сжатую последовательность, длина которой обычно всего лишь на десятые доли процента превышает теоретическую длину, рассчитанную с помощью формулы (1) (см. пункт "Арифметическое сжатие" главы 1). Более того, применение современной модификации арифметического кодера - интервального кодера - позволяет осуществлять собственно кодирование очень быстро. Скорость статистического кодирования составляет миллионы символов в секунду на современных ПК.

В свете вышесказанного, повышение точности моделей является, фактически, единственным способом существенного улучшения сжатия.