Введение

Смешивание контекста — это тип алгоритма сжатия данных, в котором предсказания следующего символа двух или более статистических моделей комбинируются для получения предсказания, которое часто оказывается более точным, чем любое из отдельных предсказаний. Например, один из простых методов (не обязательно наилучший) — это усреднение вероятностей, присвоенных каждой моделью. Случайный лес — это другой метод: он выдает предсказание, которое является модой предсказаний, выдаваемых отдельными моделями. Комбинирование моделей — это активно развивающаяся область исследований в машинном обучении. Семейство программ сжатия данных PAQ использует смешивание контекста для назначения вероятностей отдельным битам входных данных.

Применение к сжатию данных

Предположим, что нам даны две условные вероятности, P(X|Y) и P(X|Z), и мы хотим оценить P(X|Y, Z) – вероятность события X при обоих условиях Y и Z. Теория вероятностей не предоставляет решения при недостатке информации. Фактически, можно построить сценарии, в которых результат может быть любым. Однако интуитивно мы ожидаем, что результат будет представлять собой некое среднее между этими двумя вероятностями. Эта проблема важна для сжатия данных. В этом контексте Y и Z являются контекстами, X – это событие, заключающееся в том, что следующий бит или символ сжимаемых данных имеет определенное значение, а P(X|Y) и P(X|Z) – оценки вероятности, полученные двумя независимыми моделями. Коэффициент сжатия зависит от того, насколько близко оценочная вероятность приближается к истинной, но неизвестной вероятности события X. Часто контексты Y и Z встречаются достаточно часто, чтобы точно оценить P(X|Y) и P(X|Z) путем подсчета случаев X в каждом контексте, но эти два контекста либо не встречаются вместе достаточно часто, либо недостаточно вычислительных ресурсов (времени и памяти) для сбора статистики для объединенного случая. Например, предположим, что мы сжимаем текстовый файл. Мы хотим предсказать, будет ли следующий символ символом новой строки, учитывая, что предыдущий символ был точкой (контекст Y) и что последний символ новой строки был 72 символа назад (контекст Z). Предположим, что символ новой строки ранее встречался после 1 из последних 5 точек и в 5 из последних 10 строк в 72-й колонке. Как следует объединить эти прогнозы? Используются два основных подхода: линейное и логистическое смешивание. Линейное смешивание использует средневзвешенное значение прогнозов, где веса определяются степенью достоверности. В этом примере P(X|Y) получает больший вес, чем P(X|Z), поскольку основано на большем количестве наблюдений. Более старые версии PAQ используют этот подход. Новые версии используют логистическое (или нейросетевое) смешивание, сначала преобразуя прогнозы в логистическую область, log(p/(1-p)), прежде чем усреднять. Это эффективно придает больший вес прогнозам, близким к 0 или 1. В обоих случаях дополнительный вес может быть присвоен каждой из входных моделей и адаптирован для предпочтения моделей, которые в прошлом давали наиболее точные прогнозы. Все версии PAQ, кроме самых старых, используют адаптивное взвешивание. Большинство компрессоров, использующих смешивание контекстов, предсказывают по одному биту входных данных за раз. Вероятность выходного сигнала – это просто вероятность того, что следующий бит будет равен 1.

Список компрессоров для смешивания контекста

Все версии используют логистическое смешивание, если не указано иное. Все версии PAQ (Matt Mahoney, Serge Osnach, Alexander Ratushnyak, Przemysław Skibiński, Jan Ondrus и другие), PAQAR и версии до PAQ7 использовали линейное смешивание. В более поздних версиях использовалось логистическое смешивание. Все версии LPAQ (Matt Mahoney, Alexander Ratushnyak), ZPAQ (Matt Mahoney), WinRK 3.0.3 (Malcolm Taylor) в режиме максимального сжатия PWCM. Версия 3.0.2 была основана на линейном смешивании. NanoZip (Sami Runsas) в режиме максимального сжатия (опция cc), xwrt 3.2 (Przemysław Skibiński) в режиме максимального сжатия (опции i10–i14) в качестве бэк-энда кодировщика словаря. cmm1–cmm4, M1 и M1X2 (Christopher Mattern) используют небольшое количество контекстов для высокой скорости. M1 и M1X2 используют генетический алгоритм для выбора двухбитных маскированных контекстов в отдельном проходе оптимизации. ccm (Christian Martelock), bit (Osman Turan), pimple, pimple2, tc и px (Ilia Muraviev), enc (Serge Osnach) пробует несколько методов, основанных на PPM и (линейном) контекстном смешивании, и выбирает лучший из них. fpaq2 (Nania Francesco Antonio) с использованием усреднения с фиксированным весом для высокой скорости. cmix (Byron Knoll) смешивает множество моделей и в настоящее время занимает первое место в эталонном тесте сжатия больших текстов, а также в корпусе Silesia и превзошёл победителя премии Hutter Prize, хотя не имеет права на участие из-за использования слишком большого объема памяти.