Вы находитесь на странице: 1из 9

Информационная энтропия

Мы познакомились с определением количества информации для отдельных


сообщений. Но бóльшая часть информации, которая к нам поступает, имеет другой
вид – текст, изображения, видео, как правило, имеют заранее неопределённый
размер. Даже выделить «множество сообщений» (как нам было нужно для
определения количества информации в одном сообщении) для таких сообщений
сложно, не говоря уж об определении вероятности для разных сообщений. Да нам и
не нужно определять количество информации для одного изображения или текста из
заданного множества, нам нужно научиться измерять количество информации для
любого текста, «текста вообще».
Будем для удобства дальше говорить о тексте, хотя сказанное переносится на
любые другие виды информации, только «символы» нужно заменить на какие-то
другие «элементы».
Допустим, у нас есть некий источник текстовых сообщений – радиостанция,
лента новостей и т.д. Иными словами, вместо отдельных сообщений, с которыми мы
имели дело ранее, у нас есть поток, условно бесконечный, текста. Любое большое
сообщение, например, книга или, тем более, библиотека, хотя и конечное в
принципе, может рассматриваться как такой поток текста. Как нам мерить количество
информации в данном случае? На самом деле, мы не раз имели дело с подобными
задачами. Например, мы можем мерить количество энергии в батарейке (конечное),
но когда мы переходим к потреблению потока энергии из сети (лампочкой или
другими электроприборами), мы начинаем говорить вместо количества энергии о
мощности – энергии в секунду. То же и с потоком информации – вместо количества
информации для отдельного сообщения мы начинаем говорить об информации на
один символ.
Пусть источник сообщений генерирует символы независимо. Конечно, в
настоящем тексте вероятность появления символа зависит от соседних (в
английском языке за ‘q’ всегда идёт ‘u’, буквы любого языка обычно складываются в
слова и имеют свои частоты появления заданных пар, троек и т.д. букв), но сейчас
рассмотрим независимые символы. Тем более, что мы можем взять в качестве
символов не отдельные буквы, а, скажем, пятёрки, и такие символы будут уже
достаточно независимыми друг от друга.
Пусть алфавит нашего текста состоит из символов и источник текста
отправляет их с вероятностями соответственно. Допустим, мы получили
сообщение длиной символов. Каковая вероятность получить заданное сообщение
длины ? Зная такую вероятность мы сможем посчитать количество информации в
сообщении и, разделив на число символов найдём количество информации на
один символ.
Пусть количество символов в полученном сообщении равно , количество
символов - и т.д., количество символов - . Тогда вероятность получить
заданное сообщение равна

то есть,
,

а количество информации в этом сообщении

или .

По правилам работы с логарифмами

А количество информации на один символ в данном сообщении

Или
.

Как видите, в выражение для количества информации на символ в данном (!)


сообщении из символов у нас входит частота появления символов данного типа
в данном сообщении.
Нас, однако, интересует не для данного сообщения длины , а «в среднем»
по любым подобным сообщениям и кроме того, нас интересует количество
информации на символ для потока, поэтому нам нужно взять среднее от выражения
для выше и устремить к бесконечности. А согласно так называемому закону
больших чисел, средние частоты при стремятся к вероятностям, .
Так что нужная нам величина – среднее количество информации на символ
равно

Данная величина называется энтропией источника сообщений (например,


«энтропией английского языка» для произвольных текстов на английском языке). Её
также называют «информационной энтропией» и «энтропией Шеннона» в честь
Клода Шеннона, который ввёл данное выражение для количества информации и по
сути создал основу теории информации.
Энтропией, «энтропией сообщения», также называют количество информации в
отдельном сообщении, , о котором мы говорили ранее.
Вы уже сталкивались с понятием «энтропии» в другой области – в физике.
Такой переход термина в область теории информации имеет причину. Хотя
изначально энтропия в физике выражалась через величины вроде количества
теплоты и температуры, ещё в XIX веке Больцман показал, что она связана со
статистическими, вероятностными свойствами системы.
Положите в банку немного крупы одного вида и немного другого и встряхните.
Крупы перемешаются. Почему крупинки перемешиваются, а не остаются лежать
отдельными группами? Почему если долго трясти, крупинки много раз поменяются
местами, но не разделятся? Чем расположение крупинок вперемешку отличается от
расположения их отдельными группами? Ничем! Все расположения равноправны,
просто количество комбинаций, где крупинки вперемешку гораздо больше
количества комбинаций, где крупинки лежат отдельно. Количество
структурированных, упорядоченных состояний гораздо меньше, чем количество
неупорядоченных, поэтому при случайных процессах упорядоченные структуры
будут переходить в неупорядоченные, практически необратимо (время ожидания
возвращения системы в упорядоченное состояние для сколь-либо крупных систем
больше времени жизни вселенной). В этом и состоит закон неубывания энтропии, о
котором вы наверняка слышали.
Если мы не следим за расположением крупинок в смеси или их расположением
в отдельных группах, а только за тем, смешаны они или разделены на группы, то мы
можем назвать «смешанное» состояние и «в группах» - «макросостояниями», а
конкретное расположение крупинок – «микросостояниями». Количество
микросостояний, при которых реализуется данное макросостояние называется
«статистическим весом» состояния, обозначается . Статистический вес
смешанных состояний, как вы уже поняли, гораздо больше стат. веса
структурированного макросостояния. Больцман открыл, что известная физическая
энтропия равна

( - натуральный логарифм, - просто постоянный множитель, как вы помните, мы


говорили, что основание логарифма, а тем более множитель, определяет просто
единицы измерения).
Статистический вес состояния определяет по сути вероятность состояния
при случайном переборе, так что формула практически совпадает с формулой для
количества информации – только с обратным знаком.
Количество информации связано с увеличением структурированности системы,
а количество энтропии, наоборот, с уменьшением структурированности,
увеличением разупорядоченности. Так что увеличение количества информации на
означает уменьшение физической энтропии на (с коэффициентом,
связанным с единицами измерения), что вполне согласуется с тем, что количество
информации мы определяли как , а выражение для энтропии

содержит логарифм с плюсом. Да и формула у нас появилась потому что


мы изначально определяли количество информации как меру уменьшения
неопределённости. Поэтому количество информации ещё могут называть
«отрицательной энтропией». Но часто называют и просто «энтропия».
А вот приведенная здесь выше информационная энтропия, энтропия Шеннона
– характеристика источника сообщений – определяет именно степень
неопределённости источника.
Отметим, что количество информации (измеряемое в битах) в сообщении не
равно количеству битов в смысле двоичных единиц в сообщении в памяти
компьютера или на диске. Нужно отличать количество информации и объём
данных. Например, пусть мы пишем текст на английском языке, т.е. используем
нижнюю половину таблицы ASCII. Тогда старший бит каждого байта будет равен
нулю и его можно выбросить. Количество информации на символ (забудем пока о
разной вероятности символов в реальном тексте) у нас будет равно 7 бит на символ,
а количество данных, двоичных единиц, на символ – 8.
Далее я буду говорить о количестве информации «бит», а о количестве
данных – «двоичная единица».
Пусть мы подбрасываем монетку и передаём результат одной буквой.
Количество информации на символ у нас будет 1 бит, количество данных, как и
выше – 8 двоичных единиц на символ (при обычном кодировании).
Если мы передаём не равновероятные символы, например, текст из трёх
символов, один встречается с вероятностью , два других с вероятностью , то
энтропия, среднее количество информации на символ, согласно формулам выше,
будет равно

полтора бита на символ. А количество данных будет, как и ранее, 8 двоичных


единиц на символ при обычном кодировании. Но даже если мы скажем, что для
кодирования трёх символов достаточно двух двоичных единиц (4 возможные
комбинации – 00, 01, 10, 11), мы получим 2 двоичных единицы на символ (а
количество информации – полтора бита) и у нас будет лишняя комбинация.
Мы можем закодировать символы эффективнее. Давайте вспомним, что
количество информации в отдельном символе равно , т.е. количество

информации при поступлении первого символа будет равно бит, при

поступлении любого из двух других – , два бита. Мы можем так и


закодировать, например, первый символ – нулём, а два других (чтобы отличать от
первого) – комбинациями начинающимися с единицы – 10 и 11.
Мы построили код, при котором число двоичных единиц, кодирующих данный
символ, в точности рано количеству информации (в битах) при получении данного
символа. То есть, каждая двоичная единица сообщения несёт ровно 1 бит
информации.
Это наиболее эффективное кодирование.
Обратите внимание, мы получили неравномерный код – разные символы
кодируются разным количеством двоичных единиц. В общем случае кодирование «1
байт на символ» или «два байта на символ» – равномерное кодирование, одно и то
же число двоичных единиц на символ для всех символов – не самый эффективный
способ кодирования. Самый технически простой, так что ввод-вывод технически
удобнее всего производить с таким кодированием, но не самый эффективный в
смысле объёма занимаемого пространства в памяти или занимаемого канала при
передаче.
«Лишнее» количество двоичных единиц называется «избыточностью» текста.
Например, при кодировании двумя двоичными единицами трёх символов в примере
выше избыточность равна бита на символ («символ» здесь - 2-битная
комбинация).
Вообще, избыточность равна

где - энтропия текста, – максимальная энтропия для заданного набора


символов. Для символов – комбинаций из двоичных единиц максимальная
энтропия рана .

Можем ли мы так же эффективно как в примере выше закодировать символы


текста в общем случае - символов с вероятностями ?
Идея следующая. Мы хотим построить максимально эффективные код – так,
чтобы каждая двоичная единица кода несла 1 бит информации. Как вы помните, 1
бит информации мы получаем, когда получаем сообщение, вероятность которого
равна ( ). Давайте поступим следующим образом. Разобьём наши

символы с вероятностями на две группы так, чтобы сумма вероятностей в


каждой группе была равна (или хотя бы примерно равна) . Коды символов
первой группы будем начинать с 0, второй группы с 1. Тогда при получении 0 мы
получим информацию о событии «символ будет из первой группы», а при получении
1 – «символ будет из второй группы». Поскольку мы разбили символы на группы так,
что вероятность каждого из этих событий равна , то мы получим 1 бит
информации. Далее разобьём каждую группу снова на две подгруппы, так чтобы
сумма вероятностей в каждой подгруппе была одинаковой. И вторую двоичную
единицу кода для символов одной подгруппы назначим 0, другой подгруппы – 1. И
так далее, пока не дойдём до отдельных символов.
Пример. Пусть мы передаём текст, состоящий из 6 символов с

вероятностями . Разобьём их на две группы: с вероятностями

(в сумме ) и с вероятностями (в сумме ). Коды первой

группы будем начинать с 0, второй с 1. Далее рассмотрим символы первой группы.


Разобьём их на две подгруппы – символ с вероятностью и символы с
вероятностями - в сумме столько же, . Второй двоичной единицей кода
первой из этих подгрупп выберем 0, другой подгруппы – 1. Поскольку первая
подгруппа у нас уже состоит из одного символа, мы получили его код: код символа
есть . Подгруппа состоит из двух символов, так что снова разбиваем её
на две и одной назначаем 0, другой 1, так что код символа есть , код
символа есть . Действуя аналогично с группой . Получим код - ,
код - и код - .

(сплошная линия показывает первое деление на группы, пунктирная второе,


точечная – третье).
Данный код называется кодом Шеннона-Фано.
Отметим, что в примере выше мы могли разбить символы на группы и
и получить коды (для символов в том же порядке) . Но
когда вероятности равны степеням двойки, это не слишком важно – коды символов
могут измениться, но получатся для каждого символа той же длины, так что
эффективность кода не изменится.
А вот например, символы с вероятностями , , и можно разбить
как на группы и (суммы вероятностей и ) и получить коды
, так и на группы и (суммы вероятностей те же, и
, выбрать, какое разбиение лучше, на первом этапе нельзя) и получить коды
. Изменились длины кодов. Правда, среднее число двоичных единиц
на символ и в первом случае равно , и во втором случае равно
, так что эффективность кода не поменялась. Но
бывают наборы вероятностей, при которых в зависимости от первых разбиений (с
одинаковыми суммами), изменится средняя длина кода.
Данного недостатка нет у другого алгоритма. Код Шеннона-Фано строится
«сверху вниз», от всего набора символов к отдельным. Можно строить код снизу
вверх.
Будем строить дерево символов. Выберем из всех символов два с
наименьшими вероятностями, дадим одному из этих символов последнюю цифру
кода – 0, другому 1 и соединим эти два «листа» будущего «дерева» в один узел,
которому припишем вероятность, равную сумме их вероятностей. Теперь у нас есть
новый набор символов – те же, что раньше, только вместо двух выбранных – один
«объединённый узел», с вероятностью, равной сумме.
Повторим процедуру – снова выберем в этом, новом множестве два символа
(будь то конечный символ или «объединённый») с наименьшими вероятностями,
дадим им последние цифры кода 0 и 1 и объединим в общий узел.
И так, пока не построим корень дерева.
Например, для данных выше символов с вероятностями
код будет строиться следующим образом. Выберем два символа из тех, вероятность
которых наименьшая (в данном случае у нас есть варианты выбора), например, и
, дадим им последние цифры кода – 0 и 1 соответственно и соединим в общий

узел . Получили набор символов с вероятностями .

Повторяем процедуру – даём символам и (теперь выбор однозначен)


последние цифры кода 0 и 1 и получаем новое множество символов с

вероятностями . Теперь выберем символ и «символ» дадим им

последние цифры 0 и 1. Что это значит? Значит, получит последнюю цифру 0, а


символы и получат предпоследнюю цифру кода – 1. И объединим их в общий

узел с вероятностью И так далее:


Данный код называется кодом Хаффмана.
Такой код однозначен (с точностью до символов с одинаковой вероятностью) и
является оптимальным кодом для заданного набора символов с заданными
вероятностями.

Оба данных кода сопоставляют каждому символу свой код. Отметим, что при
этом, даже в оптимальном случае, например, средняя длина кода Шеннона-Фано
для упомянутого выше набора символов с вероятностями , , и , как
было сказано, равна 2 двоичные цифры на символ, а энтропия
, т.е. меньше 2, меньше, чем среднее
число двоичных цифр на символ, можно закодировать более эффективно!
Однако, посимвольные коды – которые сопоставляют каждому символу свой
код – так не могут. Чтобы добиться более эффективного кодирования, нужно
кодировать не отдельные символы, а текст в целом. Для независимых символов
такой код даёт арифметическое кодирование.
Помните, как мы водили количество информации на примере единичного
отрезка, разбитого на интервалы ? Арифметическое кодирование
рассматривает весь текст, который нужно передать, как одно большое число.
Берётся единичный отрезок, берётся первый символ текста (допустим, это символ
, вероятность которого ) и считается, что число, представляющее наш текст лежит
в отрезке внутри единичного отрезка. Далее этот отрезок снова разбивается в
пропорции , берётся второй символ текста, допустим, , и считается, что
число, представляющее текст лежит в под-интервале внутри отрезка и т.д. С
каждым символом отрезок «сжимается», уточняется, нужное количество цифр после
запятой для описания числа растёт - что соответствует обычной записи текста (чем
больше символов, тем длиннее код текста). Арифметическое кодирование позволяет
сколь угодно приблизиться к оптимальному кодированию, когда среднее число
двоичных единиц на символ равно энтропии.

Задачи

1. Источник передаёт текст, состоящий из двух символов с вероятностями и

. Найти энтропию источника.

2. Источник передаёт текст, состоящий из двух символов с вероятностями и


. Найти при котором достигается максимум энтропии. Чему равна эта
максимальная энтропия? Если данные два символа – 0 и 1, т.е. двоичные цифры,
что можно сказать о максимально возможном среднем количестве информации на
двоичную цифру? Как вы считаете, по аналогии с полученным ответом, каким
должен быть набор вероятностей для символов, чтобы энтропия источника текста
из этих символов была максимальна?

3. Построить код Шеннона-Фано для набора символов с

вероятностями соответственно . Записать последовательные шаги


алгоритма - указать для каждого шага разбиение на подгруппы и назначаемые
подгруппам двоичные единицы кода, в конце указать коды полученные символов.

4. Построить код Хаффмана для набора символов с вероятностями

соответственно . Записать последовательные шаги алгоритма - указать для


каждого шага объединяемые в общий узел символы (обычные символы или
объединённые узлы) и назначаемые символам (узлам) двоичные единицы кода, в
конце указать коды полученные символов.

5. Если текст задач 3 и 4 передаётся с помощью равномерного кода из 4


двоичных единиц на символ, какова избыточность такого текста? Во сколько раз
можно сжать такой текст (во сколько раз уменьшится количество двоичных единиц
на символ), если использовать коды, найденные в задачах 3, 4?

Вам также может понравиться