понимание семени ByteTensor в PyTorch - PullRequest
0 голосов
/ 23 ноября 2018

Я понимаю, что начальное число - это число, используемое для инициализации генератора псевдослучайных чисел.в pytorch документация torch.get_rng_state гласит следующее: «Возвращает состояние генератора случайных чисел в виде факела. ByteTensor.».и когда я его печатаю, я получаю 1-й тензор размером 5048, значения которого как показано ниже

тензор ([80, 78, 248, ..., 0, 0, 0],dtype = torch.uint8)

, почему у семени есть значения 5048 и как это отличается от обычного семени, которое мы можем получить, используя torch.initial_seed

1 Ответ

0 голосов
/ 24 ноября 2018

Звучит так, будто вы думаете о семени и состоянии как о эквивалентных.Для более старых генераторов псевдослучайных чисел (PRNG) это было верно, но с более современными PRNG, как правило, работают, как описано здесь .(Ответ в ссылке был написан относительно Мерсенна Твистера, но концепции в равной степени применимы и к другим генераторам.)

Почему не рекомендуется иметь 32- или 64-битное пространство состояний и отчетсостояние как выход генератора?Потому что, если вы сделаете это, как только вы увидите какое-либо значение повтора, вся последовательность повторится.PRNG были разработаны для «полного цикла», т. Е. Для повторения максимально возможного количества значений перед повторением. Эта статья показала, что проблема дня рождения может быстро (O (sqrt (длина цикла)) идентифицировать такие PRNG как неслучайные. Это означает, например, что с 32-битнымцелые числа, вы не должны использовать более ~ 50000 значений, прежде чем статистик сможет вызвать вас с уверенностью выше 99%. Решение, используемое многими современными PRNG, состоит в том, чтобы иметь большее пространство состояний и свернуть его для вывода32- или 64-битный результат. Поскольку несколько состояний могут создавать один и тот же вывод, в выходном потоке будут возникать дубликаты без репликации всего потока. Похоже, именно это делает PyTorch.

Учитывая большийпространство состояний, зачем разрешать заполнение одним целым числом? Удобство. Например, Mersenne Twister имеет пространство состояний 19 937 бит, но большинство людей не хотят вводить столько информации, чтобы запустить его. Вы можете, если хотите,но большинство людей используют интерфейс, который заполняет все пространство состояний из одного целочисленного ввода.

...