Обновление счетчиков символов
Модификация счетчиков после обработки очередного символа может быть реализована по-разному. После кодирования каждого символа естественно изменять соответствующие счетчики во всех КМ порядков 0,l,...,N, что и предлагается, в частности, делать в алгоритмах РРМА и РРМВ. Такой подход называется полным обновлением (full updates). Но в случае классического, не использующего наследование информации РРМ лучшие результаты достигаются, когда счетчики оцененного символа увеличиваются только в КМ порядков о, о+1, ..., N, где о - порядок КМ, в которой символ был закодирован. Иначе говоря, счетчик обработанного символа не увеличивается в какой-то активной КМ, если он был оценен в КМ более высокого порядка. Эта техника имеет самостоятельное название- исключение при обновлении (update exclusion).
Термин "исключение при обновлении" не следует путать с исключением (exclusion), под которым понимают сам механизм уходов с маскированием счетчиков тех символов, которые встречались в контекстах большего порядка.
Применение исключения при обновлении позволяет улучшить сжатие обычного РРМ-компрессора примерно на 1-2% по сравнению с тем случаем, когда производится обновление счетчиков символа во всех КМ. Одновременно ускоряется работа компрессора. В случае применения наследования информации, а также для алгоритма РРМ* (описание РРМ* приведено ниже) польза от исключения при обновлении не столь очевидна.
Роль контекстов-предков сравнительно небольших порядков значительно возрастает при использовании техники наследования информации, поэтому необходимо более быстрое обновление их статистики. Как показывают эксперименты, полное обновление работает все же плохо и в этом случае. Поэтому обычно следует использовать решение, промежуточное между исключением при обновлении и полным обновлением. Например, помимо увеличения с весом 1 в рамках реализации исключения при обновлении, имеет смысл инкрементировать с весом 1/(о-/'+1) счетчики символа в контекстных моделях меньших порядков /. Под КМ(<) понимаются предки той КМ(о), в которой символ был оценен. Например, в компрессоре PPMd делается модификация счетчика с весом 1/2 только в родительской КМ и только в определенных случаях. При этом основное условие выполнения такой модификации требует, чтобы счетчик оцененного символа в КМ(о) был меньше некоторого порога.
В алгоритме РРМ* применяется частичное исключение при обновлении (partial update exclusion). В этом случае производится увеличение счетчиков во всех так называемых детерминированных КМ, а если же их нет, то только в недетерминированной КМ с самым большим порядком. Под детерминированной понимается такая КМ, что в соответствующем ей контексте до данного момента встречался только один символ (любое число раз). Аналогично такой контекст называется детерминированным.
Для собственно сжатия в связке с РРМ практически всегда используется арифметическое кодирование. Увеличение значений счетчиков КМ может привести к ошибке переполнения в арифметическом кодере. Во избежание этого обычно производят деление значений пополам при достижении заданного порога. Максимальная величина порога определяется особенностя- j ми конкретной реализации арифметического кодера. С другой стороны, j масштабирование счетчиков дает побочный эффект в виде улучшения ежатия при кодировании данных с достаточно быстро меняющейся статистикой контекстных моделей. Чем нестабильнее КМ, тем чаще следует масштабировать ее счетчики, отбрасывая таким образом часть информации о поведении данной КМ в прошлом. В свете этого естественной является идея об увеличении счетчиков с неравным шагом так, чтобы недавно встреченные символы получали большие веса, чем "старые" символы. В качестве полумеры можно применять масштабирование счетчика последнего встреченного символа, которое эксплуатирует такую же особенность типичных данных (см. ниже "Масштабирование счетчика последнего встреченного символа" в подразд. "Различные способы повышения точности предсказания"). Существенному улучшению сжатия в таких случаях также способствует вторичная оценка вероятности символов (см. "Увеличение точности предсказания наиболее вероятных символов" в том же подразд.).
Использование в качестве шага прироста счетчиков величин, больших единицы, необходимо для успешной работы сложных методов обновления, а также способствует лучшей адаптации модели при масштабировании. В качестве добавки веса 1 хорошо работают 4 или 8, при этом все еще отсутствует проблема переполнения даже при использовании для счетчиков 16-битовых машинных слов. Например, если шаг прироста равен четырем, то счетчик символа может принимать значения: 4 (инициализация при первом появлении символа в контексте), 8, 12, 16... В компрессоре Dummy используется единичный шаг прироста.
- Теги:
- 262 просмотра









