Это звучит почти глупо — обучить нейронную сеть генерировать случайные числа — но у этого есть больше практических применений, чем вы можете себе представить.
Интеллектуальные системы плохо генерируют случайные числа. Они вполне могут быть детекторами паттернов, но они также часто видят паттерны там, где их нет. 123456 более или менее случайный, чем 324516? В конце концов, они оба имеют одинаковую вероятность быть сгенерированными истинным генератором случайных чисел! Когда людей просят сгенерировать случайное число, они обычно пытаются найти что-то, что кажется неупорядоченным, и, как правило, не учитывают упорядоченные последовательности, которые были бы в истинном генераторе случайных чисел.
В вычислениях мы стараемся не использовать физические источники истинных случайных чисел. Вместо этого мы используем генераторы псевдослучайных чисел или ГПСЧ. Это математические функции, которые создают последовательности чисел, которые не только выглядят случайными, но и проходят статистические тесты, чтобы убедиться, что каждая последовательность чисел встречается одинаково часто.
Вы могли догадаться, что построить хороший ГПСЧ непросто, а тот, который прошел достаточно тестов, чтобы считаться безопасным, то есть криптографический ГПСЧ, еще сложнее. Хорошие PRNG важны для всех видов статистических методов, но, в частности, они важны в приложениях безопасности.
Учитывая, что нейронная сеть может рассматриваться как аппроксиматор больших функций, почему бы просто не обучить нейронную сеть генерировать выходные данные ГПСЧ? Это звучит как хорошая идея, но тогда вы получите только нейронную сеть, которая была бы так же хороша, как ГПСЧ, который использовался для ее обучения. Идея с использованием реальных случайных чисел была опробована и оказалась не особенно эффективной.
Гораздо лучшая идея — использовать генерирующую состязательную сеть, или GAN, или модификацию GAN в пару сетей генератор / предсказатель. Что происходит, так это то, что генераторная часть сети — стандартная сеть с прямой связью — генерирует последовательность из n битов, а сети прогнозирования дается n-1 бит и пытается предсказать последний бит. Генератор пытается максимизировать вероятность того, что предсказатель ошибается, а предсказатель пытается сделать это правильно. Итак, идея состоит в том, что генератор должен превзойти предсказатель, поскольку он все лучше и лучше предсказывает псевдослучайную последовательность.
Вы действительно можете думать об этом как о соревновании между двумя людьми: один пытается создать случайные цифры, а другой пытается их угадать. Фактически, это очень похоже на настоящие соревнования, включающие игру в камень, ножницы, бумагу, где в основном один игрок пытается создать неугадываемую последовательность, а другой пытается ее угадать. Конечно, мы не говорим о человеческих мозгах, находящихся в конфликте, а просто о паре или относительно небольших нейронных сетях.
Это сработало?
«Мы демонстрируем, что GAN может эффективно обучать даже небольшую полностью связанную нейронную сеть с прямой связью для создания псевдослучайных числовых последовательностей с хорошими статистическими характеристиками. В лучшем случае, после прохождения набора тестов NIST, обученный генератор прошел около 99% тестов. экземпляров и 98% общих тестов, превосходя ряд стандартных некриптографических ГПСЧ ».
Так что еще не до криптографических ГПСЧ, но удивительно, что случайность может быть изучена. Учитывая, что сети имеют только прямую связь, и почти все функции PRNG включают некоторую обратную связь, может потребоваться какая-то повторяющаяся сеть. После некоторой дополнительной работы возможно, что созданные вручную ГПСЧ уйдут в прошлое, и ИИ сделает другую, хотя и нишевую, область человеческих усилий излишней.