Имитация вероятности 1 из 2 ^ N с менее чем N случайными битами

31

Скажем, мне нужно смоделировать следующее дискретное распределение:

P(X=k)={12N,if k=1112N,if k=0

Наиболее очевидный способ - нарисовать случайных битов и проверить, все ли они равны 0 (или 1 ). Тем не менее, теория информации говоритN01

S=iPilogPi=12Nlog12N(112N)log(112N)=12Nlog2N+(112N)log2N2N10

Таким образом, минимальное количество битов , требуемых случайных фактически уменьшается , как N идет большой. Как это возможно?

Пожалуйста, предположим, что мы работаем на компьютере, где биты - ваш единственный источник случайности, поэтому вы не можете просто подбросить необъективную монету.

nalzok
источник
Это тесно связано с теорией кодирования и сложностью Колмогорова, если вы ищете ключевые слова, чтобы копать глубже. Техника подсчета повторяющихся серий одного и того же бита, о которой упоминает Д. У., встречается очень часто
Брайан Гордон,

Ответы:

28

Вау, отличный вопрос! Позвольте мне попытаться объяснить решение. Это займет три четких шага.

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

В вашей процедуре выборки максимальное количество случайных битов, необходимых для каждого отрисовки, составляет битов, но среднее количество необходимых битов составляет 2 бита (среднее геометрического распределения с ) - это потому, что существует Вероятность что вам нужен только 1 бит (если первый бит оказывается равным 1), вероятность что вам нужно только 2 бита (если первые два бита оказываются равным 01), вероятность того, что вам нужно только 3 бита (если первые три бита окажутся 001), и так далее.Np=1/21/21/41/8

Второе, на что следует обратить внимание, - это то, что энтропия на самом деле не фиксирует среднее количество бит, необходимое для одного розыгрыша. Вместо этого, энтропия захватывает амортизируется число бит , необходимых для выборки IID извлекает из этого распределения. Предположим, нам нужно бит для выборки отрисовок; тогда энтропия является пределом как .mf(m)mf(m)/mm

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

Но оказывается, что есть способ сэмплировать из дро с использованием менее 2 битов. В это трудно поверить, но это правда!m2m

Позвольте мне дать вам интуицию. Предположим, вы записали результат выборки розыгрышей, где действительно велико. Тогда результат может быть указан в виде битной строки. Эта битная строка будет в основном 0, с несколькими 1: в частности, в среднем она будет иметь около 1 (может быть больше или меньше, но если достаточно велико, обычно номер будет близок к этому). Длина промежутков между единицами случайна, но, как правило, будет где-то расплывчато в окрестности (легко может быть вдвое больше или вдвое больше или даже больше, но такого порядка). Конечно, вместо записи всегоmmmmm/2Nm2Nm-битная строка, мы могли бы записать ее более кратко, записав список длин пропусков, который несет всю ту же информацию, в более сжатом формате. Насколько более кратким? Ну, нам обычно потребуется около бит для представления длины каждого промежутка; и будет около пробелов; поэтому нам нужно всего около битов (может быть немного больше, может быть немного меньше, но если достаточно велико, оно обычно будет близко к этому). Это намного короче, чем строка бита.Nm/2NmN/2Nmm

И если есть способ записать строку так кратко, возможно, это не будет слишком удивительно, если это означает, что есть способ генерировать строку с числом случайных битов, сопоставимых с длиной строки. В частности, вы случайным образом генерируете длину каждого разрыва; это выборка из геометрического распределения с , и это можно сделать с примерно случайных битов в среднем (не ). Вам понадобится примерно iid-отрисовок из этого геометрического распределения, так что вам понадобится всего примерно случайных битов. (Это может быть небольшой постоянный коэффициент больше, но не слишком большой.) И обратите внимание, что это намного меньше, чем бит.p=1/2NN2Nm/2NNm/2N2m

Таким образом, мы можем попробовать н.о.р. розыгрышей от вашего дистрибутива, используя только случайных битов (примерно). Напомним, что энтропия равна . Таким образом , это означает , что вы должны ожидать , что энтропия будет (примерно) . Это немного, потому что приведенный выше расчет был отрывочным и грубым - но, надеюсь, он даст вам некоторое представление о том, почему энтропия такая, какая она есть, и почему все последовательно и разумно.mf(m)Nm/2Nlimmf(m)/mN/2N

DW
источник
Вау, отличный ответ! Но не могли бы вы пояснить, почему выборка из геометрического распределения с занимает в среднем битов? Я знаю, что такая случайная переменная будет иметь среднее значение , поэтому для ее хранения требуется в среднем битов, но я предполагаю, что это не означает, что вы можете сгенерировать ее с битами. p=12NN2NNN
Нальзок
@nalzok, честный вопрос! Не могли бы вы задать это как отдельный вопрос? Я понимаю, как это сделать, но набрать текст сейчас довольно сложно. Если вы спросите, возможно, кто-то ответит быстрее, чем я. Подход, о котором я думаю, похож на арифметическое кодирование. Определите (где - геометрическое rv), затем сгенерируйте случайное число в интервале и найдите такой, что . Если вы записываете биты двоичного расхода одному, обычно после записи битов , будет полностью определено.qi=Pr[Xi]Xr[0,1)iqir<qi+1rN+O(1)ri
DW
1
Таким образом, вы в основном используете метод обратного CDF для преобразования равномерно распределенной случайной величины в произвольное распределение в сочетании с идеей, аналогичной бинарному поиску? Мне нужно проанализировать квантильную функцию геометрического распределения, чтобы убедиться, но этого нам достаточно. Благодарность!
Нальзок
1
@nalzok, ах, да, это хороший способ думать об этом - прекрасно. Спасибо, что предложили это. Да, это то, что я имел в виду.
DW
2

Вы можете думать об этом задом наперед: рассмотрите проблему двоичного кодирования вместо генерации. Предположим, что у вас есть источник, который испускает символы с , . Например, если , мы получаем . Итак, (говорит нам Шеннон), существует уникально декодируемое двоичное кодирование , где (биты данных), так что нам нужно в среднем около битов данных для каждого исходного символа .X{A,B}p(A)=2Np(B)=12NN=3H(X)0.54356XYY{0,1}0.54356X

(В случае, если вам интересно, как такое кодирование может существовать, учитывая, что у нас есть только два исходных символа, и кажется, что мы не можем сделать лучше, чем тривиальное кодирование, , , с одним битом на символ, Вы должны понимать, что для аппроксимации границы Шеннона нам нужно взять «расширения» источника, то есть кодировать последовательности входов в целом (см., в частности, арифметическое кодирование).A0B1

Как только вышеприведенное ясно, если мы предположим, что у нас есть обратимое отображение , и отметим, что в пределе Шеннона должен иметь максимальную энтропию (1 бит информации на бит данных), т.е. , имеет статистику честной монеты, тогда у нас есть схема генерации: нарисуйте случайных битов (здесь не имеет отношения к ) с честной монетой, интерпретируйте ее как вывод кодера и декодировать из него. Таким образом, будет иметь желаемое распределение вероятностей, и нам нужно (в среднем) монеты , чтобы генерировать каждое значение .XnYnYnYnnnNYnXnXnH(X)<1X

leonbloy
источник