Сжатие данных Руководитель: Жерздев С.В. Участники: Рябикин Н.М. Осокин Д.В. Капралов Е.И. Белоусов С.О. Цель проекта Цель минимум: получить знания и опыт работы в этой области. Цель максимум: добиться практически интересных результатов (лучше PPM по сжатию, лучше PAQ по производительности). 2/53 Основные задачи Изучить основные подходы к сжатию данных (особенно статистические методы) и используемые в современных системах стат.модели: в порядке возрастания сложности адаптивные - контекстные переменной длины (PPM) - составные (PAQ); Предложить, реализовать и опробовать собственные подходы к построению составных моделей. 3/53 Немного о сжатии данных методом контекстного моделирования 4/53 Контекстное моделирование – оценка вероятности появления символа в зависимости от непосредственно ему предшествующих, или контекста. Контекст – последовательность символов, непосредственно примыкающих к текущему символу слева. Например, для последнего символа «о» последовательности «…молоко…» контекстом является «…молок». В дальнейшем нас будут интересовать контексты конечной длины. 5/53 Процесс сжатия состоит из двух самостоятельных частей: Моделирование Кодирование Моделирование – построение модели информационного источника, породившего сжимаемые данные. Кодирование – отображение обрабатываемых данных в сжатую форму представления на основании результатов моделирования. 6/53 Схема процесса сжатия данных Кодер источника (компрессор) Источник данных Моделировщик Сжимаемые данные обновить модель кодировать символ на основании его вероятности Данные в компактном представлении Кодировщик Кодировщик создает выходной поток, являющийся компактной формой представления обрабатываемой последовательности, на основании информации, поставляемой ему моделировщиком. 7/53 Теорема Шеннона Элемент si, вероятность появления которого равняется p(si), выгоднее всего представить log2(si) битами. Средняя длина кодов будет равна следующей величине: H p( si ) log 2 p( si ) i Есть реализация кодера (арифметический кодер), который позволяет максимально приблизиться к теоретическому результату. Чем точнее оценка вероятностей появления символов, тем лучше сжатие. 8/53 Проблемы контекстного моделирования Как выбирать контекст? Текущий символ может точнее предсказываться контекстом длины 2, нежели длины 1. Возможное решение: идея смешивания. Рост ресурсов с ростом длины контекста. Как оценивать вероятность символов, имеющих нулевую частоту? 9/53 Классификация стратегий моделирования Статическое Полуадаптивное Адаптивное (динамическое) Блочно-адаптивное 10/53 Алгоритмы PPM PPM – Prediction by partial matching Моделирование: адаптивное Контексты: фиксированной длины 11/53 Алгоритмы PAQ Модификация алгоритма PPM Основная идея – смешивание контекстов Вторичная оценка символа 12/53 Контексты n-граммы 0..7 Словарные n-граммы Разреженные Аналоговые Двумерные Специальные Match для длинных 13/53 Комбинирование моделей (смешивание) Смешивание контекстов — это техника, тесно связанная с алгоритмом PPM, но отличие состоит в том, что вероятность появления следующего символа вычисляется на основе взвешенной комбинации большого числа моделей, зависящих от разных контекстов, не обязательно следующих друг за другом. С помощью технологии смешивания можно существенно увеличить точность предсказания. 14/53 Вторичная оценка символа Адаптивная корректировка оценки вероятности по короткому контексту 15/53 Главный плюс PAQ Обеспечивается максимальная компрессия из всех существующих ныне алгоритмов. Есть и минусы: Потеря устойчивости оценки, если данные «зашумлены» Большие вычислительные расходы на обновление модели Большие расходы оперативной памяти Локальная цель: Добиться «золотой середины» 16/53 Модели 17/53 Контекстное моделирование В случае адаптивной модели оценки вероятностей строятся на основании обычных счётчиков частот, связанных с текущим контекстом Проблема символов с “нулевой” частотой. 18/53 Пример Используем контекстное моделирование порядка 1, контекст - ‘a’: б аб рака даб р а ? Частоты появления букв в контексте: б р к д 1 2 0 0 0 1 0 1 Вероятность: 1 21 1234 0 0 11 23 0 4 0134 Частота контекста: а 4 2 3 1 0 19/53 Состояния → вероятности В PAQ используется более сложная модель получения вероятностей: он преобразует состояния модели в вероятности по таблице. Переходы между состояниями заданы в зависимости от входных данных. Плюсы: состояние теперь описывается 1 байтом, можно более гибко соотносить состояние модели и оценку вероятности. 20/53 Модели PAQ MatchModel (совпадающие контексты) picModel (двухцветное CCITT bitmap изображение) wordModel (английский текст и колонки) recordModel (двумерные данные с фиксированной длиной записи) sparseModel (контексты порядка 1-2 с пустыми местами) bmpModel (24 битное несжатое изображение .bmp или .tiff) jpegModel (только стандартное и 8 битное расширение) exeModel (x86 код) 21/53 Преимущества моделей PAQ Позволяет быстро менять вероятности появления битов, Упрощается реализация модели и кодера, Снимается проблема нулевых счётчиков, т.к. модель меняется очень быстро, В качестве контекста придётся брать не только предыдущие закодированные символы, но и закодированные биты текущего символа. 22/53 Созданные модели Двухбайтовая (16 предыдущих бит + закодированные биты текущего байта) Две однобайтовые (применено смешивание предсказаний) 23/53 Двухбайтовая модель Вероятность символа будем оценивать как отношение числа предсказанных контекстом единиц к числу его появления в данных. Плюсы: модель быстро изменяется, для хранения статистики требуется всего один массив, простота реализации. 24/53 Две однобайтовые модели Контексты: предыдущий байт и через байт + закодированные биты текущего. К2 К1 + закодированные биты текущего 25/53 Две однобайтовые модели Полученные вероятности смешиваются в зависимости от значимости, затем нормируются. … double w1 = log((double)(pr1+1)/(4096-pr1)/4096); double w2 = log((double)(pr2+1)/(4096-pr2)/4096); if (w1+w2<0.005) w1=w2=1.0; int pr=(pr1*w1+pr2*w2)/(w1+w2); … 26/53 Две однобайтовые модели Плюсы: малый размер массивов для хранения статистики, возможность улучшения (корректировки) предсказания. 27/53 Сравнение Архиватор Размер файла (МБ) Наш PAQ2b Наш PAQ1b 100 Время сжатия (с) Расход памяти (МБ) Коэфф. сжатия 607 128 2.82 337 1 1.32 28/53 Миксер 29/53 Что такое миксер? Миксер – это объект, который комбинирует результаты разных моделей. Ранние версии PAQ использовали примитивные миксеры с четко заданными весами. С PAQ6 получили применение адаптивные, обучаемые модели. В PAQ8 для смешивания используются нейронные сети. 30/53 Кратко о нейронных сетях Нейронные сети – вычислительные системы, способные к обучению путем анализа положительных и отрицательных воздействий Использование: распознавание речи и рукописного ввода, апроксимация функций, прогноз поведения функций и многое другое 31/53 wi Искусственный нейрон i веса ( умножители) сумматор s wi xi b f – нелинейная функция от s (функция активации) 32/53 Функция активации Наиболее популярной является сигмоид: 1 f (s) 1 e s 33/53 Смешивание моделей Смешивание моделей позволяет лучше угадывать следующий символ, поскольку с ростом статистики точность предсказания увеличивается 34/53 Разные веса Как правило, чем длиннее контекст, тем точнее он угадывает. Поэтому с первой версии PAQ модели имеют разный вес: длинные больший, короткие меньший. 35/53 Корректировка весов Корректировка весов – это изменение весов моделей на каждой итерации. Чем лучше модель предсказывает следующий символ, тем сильнее увеличивается ее вес. Если же она не угадывает, вес уменьшается. 36/53 Миксер с нейронными сетями Нелинейное преобразование обладает свойством усиливать слабые сигналы лучше, чем большие, и предотвращает насыщение от больших сигналов 37/53 Нейросеть в PAQ8 Входы сети подвергаются растяжению, чтобы увеличить значимость более «уверенных» моделей 38/53 Миксер в PAQ8 Миксер использует М нейронных сетей по N входов в каждой, в итоге может быть выбрано S. Если S = 1, то предсказание этой модели идет на выход. Если S > 1, то произойдет смешивание через еще одну нейронную сеть. 39/53 Наш миксер Нелинейное смешивание без обучения pi wi ln 1 pi pw p w i i i i i 40/53 Вторичная оценка символа (SSE) 41/53 После того, как ContextModel2() выдает вероятность единицы, для корректировки последующих предсказаний используется Вторичная оценка ошибки, реализованная в виде класса AMP. Класс APM представляет собой карту (таблицу), комбинирующую в себе контексты и вероятности заданных длин. В PAQ используется одна карта длиной 1 байт и 3 карты по 2 байта. 42/53 Class APM class APM { int index; // last p, context const int N; // number of contexts Array<U16> t; // [N][33]: p, context -> p public: APM(int n); int p(int pr=2048, int cxt=0, int rate=8) { assert(pr>=0 && pr<4096 && cxt>=0 && cxt<N && rate>0 && rate<32); pr=stretch(pr); int g=(y<<16)+(y<<rate)-y-y; t[index] += g-t[index] >> rate; t[index+1] += g-t[index+1] >> rate; const int w=pr&127; // interpolation weight (33 points) index=(pr+2048>>7)+cxt*33; return t[index]*(128-w)+t[index+1]*w >> 11; } }; // maps p, cxt -> p initially APM::APM(int n): index(0), N(n), t(n*33) { for (int i=0; i<N; ++i) for (int j=0; j<33; ++j) t[i*33+j] = i==0 ? squash((j-16)*128)*16 : t[j]; } 43/53 Структура APM p Масштабировать p в отрезок [-8,8] p p ln 1 p Вычислить степень размытия ошибки Размыть ошибку между двумя соседними контекстами Вычислить новую вероятность p p 44/53 Корректировка предсказания от ContextModel c помощью APM Predictor::update() использует 4 карты вторичной оценки с различной длинной контекста символа для корректировки предсказания, полученного от ContextModel2() В качестве предсказания возвращает взвешенную сумму всех скорректированных предсказаний. 45/53 Корректировка предсказания от ContextModel c помощью APM pr=contextModel2(); pr=a1.p(pr, c0)*3+pr>>2; int pr2=a2.p(pr, c0+256*buf(1)); int pr3=a3.p(pr, c0^hash(buf(1), buf(2))&0xffff); int pr4=a4.p(pr, c0^hash(buf(1), buf(2), buf(3))&0xffff); pr=pr2+pr3*2+pr4+2>>2; 46/53 APM::p предсказание с размытием ошибки На входе эта функция получает 3 параметра: int pr – искомое предсказание int cxt – контекст в котором было сделанно это предсказание int rate – норма корректировки (определяет скорость корректировки, чем rate меньше тем скорость быстрее. значение по умолчанию 8) В процессе работы вероятность масштабируется в интервал [0, 4095] и делится на 32 отрезка для объединения с другими контекстами. Выходные вероятности интерполируются между двумя квантуемыми значениями. На выходе возвращает новую вероятность с учетом корректировки. 47/53 APM::p предсказание с размытием ошибки int p(int pr=2048, int cxt=0, int rate=8) { assert(pr>=0 && pr<4096 && cxt>=0 && cxt<N && rate>0 && rate<32); pr=stretch(pr); int g=(y<<16)+(y<<rate)-y-y; t[index] += g-t[index] >> rate; t[index+1] += g-t[index+1] >> rate; const int w=pr&127; index=(pr+2048>>7)+cxt*33; return t[index]*(128-w)+t[index+1]*w >> 11; } 48/53 Сравнение степени сжатия с APM и без неё Версия Ключ -0 PAQ8a -5 -0 -5 -0 PAQ8a (без APM) -5 -0 -5 Размер файла TXT, RU (МБ) 1 3 1 3 Сжат (КБ) Время (с) 301 19,23 268 72,61 1016 68,69 878 260,85 304 27,13 271 119,45 1032 96,45 888 422,77 49/53 Выводы APM обеспечивает 5-7% к проценту сжатия Разница в скорости сжатия с “родным” предсказателем с APM и без почти не заметна При использовании предсказателя по формуле Байеса или по Статичным таблицам APM ощутимо “тормозит” процесс сжатия Использование APM оправданно только при необходимости максимально сжать данные 50/53 Результаты Архиватор Время сжатия (с) Расход памяти (МБ) Коэфф. сжатия Наш PAQ2b 607 128 2.82 Наш PAQ1b 337 1 1.32 6,5 ч 2 200 5.67 LPAQ 230 1 500 5.06 7-zip 101 250 4.01 PAQ8a Размер файла (МБ) 100 51/53 Итоги эксперимента На текстовых данных лучше себя показала двухбайтовая модель. Большее значение имеет контекст в два предыдущих байта, чем два контекста в предыдущий байт и через байт. Более того, две однобайтовые модели ведут себя хуже, нежели простая контекстная модель порядка один. 52/53 Список ресурсов http://www.compression.ru Ватолин Д., Ратушняк А., Смирнов М., Юкин В. Методы сжатия данных. Устройство архиваторов, сжатие изображений и видео. - М.: ДИАЛОГ-МИФИ, 2002. - 384 с. http://ru.wikipedia.org/wiki/PAQ - описание PAQ http://www.cs.fit.edu/~mmahoney/compression/ - официальный сайт PAQ M. Mahoney, Adaptive Weighing of Context Models for Lossless Data Compression, Florida Tech. Technical Report CS-2005-16, 2005. http://www.cs.fit.edu/~mmahoney/compression/paq.html - история версий и исходники PAQ Круглов В.В., Дли М.И., Голунов Р.Ю. Нечеткая логика и искусственные нейронные сети. М.: Физматлит, 2001. 221с. 53/53