Dapatkah jaringan saraf digunakan untuk memprediksi nomor acak semu berikutnya?


17

Apakah mungkin untuk memberi makan jaringan saraf output dari generator angka acak dan mengharapkannya mempelajari fungsi hashing (atau generator), sehingga dapat memprediksi apa yang akan menjadi nomor pseudo-acak berikutnya yang dihasilkan ?

Apakah sesuatu seperti ini sudah ada? Jika penelitian sudah dilakukan terkait hal ini atau sesuatu (dengan prediksi angka pseudo-acak), adakah yang bisa mengarahkan saya ke sumber daya yang tepat?

Saat ini, saya melihat perpustakaan ini dan tautan terkaitnya. https://github.com/Vict0rSch/deep_learning/tree/master/keras/recurrent


Jawaban:


13

Jika kita berbicara tentang RNG yang sempurna, jawabannya adalah tidak . Tidak mungkin untuk memprediksi angka yang benar-benar acak, jika tidak maka tidak akan benar-benar acak.

Ketika kita berbicara tentang pseudo RNG, segalanya berubah sedikit. Bergantung pada kualitas PRNG, masalahnya berkisar dari yang mudah hingga yang hampir mustahil. PRNG yang sangat lemah seperti XKCD yang diterbitkan tentu saja dapat dengan mudah diprediksi oleh jaringan saraf dengan sedikit pelatihan. Tetapi di dunia nyata segalanya terlihat berbeda.

Jaringan saraf dapat dilatih untuk menemukan pola tertentu dalam sejarah bilangan acak yang dihasilkan oleh PRNG untuk memprediksi bit berikutnya. Semakin kuat PRNG, semakin banyak input neuron yang diperlukan, dengan asumsi Anda menggunakan satu neuron untuk setiap bit keacakan sebelumnya yang dihasilkan oleh PRNG. Semakin tidak dapat diprediksi PRNG, semakin banyak data yang diperlukan untuk menemukan semacam pola. Untuk PRNG yang kuat, ini tidak layak.

Pada catatan positif, akan sangat membantu jika Anda dapat menghasilkan jumlah pola pelatihan yang sewenang-wenang untuk jaringan saraf, dengan asumsi bahwa Anda memiliki kendali atas PRNG dan dapat menghasilkan angka acak sebanyak yang Anda inginkan.

Karena PRNG modern adalah komponen kunci untuk kriptografi, penelitian ekstensif telah dilakukan untuk memverifikasi bahwa mereka "cukup acak" untuk menahan serangan prediksi seperti itu. Oleh karena itu saya cukup yakin bahwa tidak mungkin dengan sumber daya komputasi yang tersedia saat ini untuk membangun jaringan saraf untuk berhasil menyerang PRNG yang dianggap aman untuk kriptografi.

Penting juga dicatat bahwa tidak perlu memprediksi dengan tepat keluaran PRNG untuk memecahkan kriptografi - mungkin cukup untuk memprediksi bit berikutnya dengan kepastian lebih dari 50% untuk melemahkan implementasi secara signifikan. Jadi jika Anda dapat membangun jaringan saraf yang memprediksi bit PRNG berikutnya (dianggap aman untuk kriptografi) dengan tingkat keberhasilan 55%, Anda mungkin akan membuat berita utama berita keamanan cukup lama.


2
Wow terima kasih atas penjelasan di balik ini. Saya mencoba untuk menganalisis polanya dan memprediksi bit berikutnya dan itu bukan RNG yang sempurna, tetapi PRNG yang agak solid. Tapi itu juga tidak canggih. Saya pikir dengan sedikit daya komputasi dan implementasi yang tepat, saya tidak dapat memperkirakannya dengan 60-70% jika tidak lebih. Jika memungkinkan, dapatkah Anda menunjukkan sumber daya di mana saya dapat membaca lebih lanjut tentang ini? Saya bukan dari latar belakang penelitian dan lebih dari seorang pengembang.
AshTyson

3

Menjadi pemula yang lengkap dalam pembelajaran mesin, saya melakukan percobaan ini (menggunakan Scikit-belajar):

  • Menghasilkan sejumlah besar (N) ekstraksi pseudo-acak, menggunakan fungsi python random.choices untuk memilih angka N dari 90.

  • Melatih classifier MLP dengan data pelatihan yang disusun sebagai berikut:

    • dengan sampel: X <- lotteryResults [i: i + 100], Y <- lotteryResults [i]

    Dalam praktiknya, saya mengarahkan ke suatu fungsi yang diberi angka N, dapat memprediksi yang berikutnya.

  • Meminta classifikator terlatih untuk memprediksi angka yang tersisa.

Hasil:

  • tentu saja, pengklasifikasi memperoleh skor kemenangan yang sebanding dengan salah satu tebakan acak atau teknik lain yang tidak didasarkan pada jaringan saraf (saya membandingkan hasil dengan beberapa pengklasifikasi yang tersedia di perpustakaan scikit-learning)

  • namun, jika saya menghasilkan ekstraksi lotre pseudo-acak dengan fungsi distribusi tertentu, maka angka yang diprediksi oleh jaringan saraf secara kasar dihasilkan dengan kurva distribusi yang sama (jika Anda memetakan kejadian angka acak dan prediksi jaringan saraf, Anda dapat melihat bahwa keduanya memiliki tren yang sama, bahkan jika dalam kurva prediseksi ada banyak lonjakan, jadi mungkin jaringan saraf dapat belajar tentang distribusi angka pseudo-acak?

  • Jika saya mengurangi ukuran pelatihan yang ditetapkan di bawah batas tertentu, saya melihat bahwa classifier mulai memprediksi selalu beberapa angka yang sama, yang merupakan yang paling sering dalam generasi pseudo-acak. Anehnya (atau mungkin tidak) perilaku ini tampaknya sedikit meningkatkan skor kemenangan.


3

Pertanyaan lama, tapi saya pikir itu layak untuk satu jawaban praktis. Saya kebetulan menemukannya tepat setelah melihat panduan bagaimana membangun jaringan saraf seperti itu, menunjukkan gema randint python sebagai contoh . Ini adalah kode terakhir tanpa penjelasan terperinci, masih cukup sederhana dan bermanfaat jika tautannya offline:

from random import randint
from numpy import array
from numpy import argmax
from pandas import concat
from pandas import DataFrame
from keras.models import Sequential
from keras.layers import LSTM
from keras.layers import Dense

# generate a sequence of random numbers in [0, 99]
def generate_sequence(length=25):
    return [randint(0, 99) for _ in range(length)]

# one hot encode sequence
def one_hot_encode(sequence, n_unique=100):
    encoding = list()
    for value in sequence:
        vector = [0 for _ in range(n_unique)]
        vector[value] = 1
        encoding.append(vector)
    return array(encoding)

# decode a one hot encoded string
def one_hot_decode(encoded_seq):
    return [argmax(vector) for vector in encoded_seq]

# generate data for the lstm
def generate_data():
    # generate sequence
    sequence = generate_sequence()
    # one hot encode
    encoded = one_hot_encode(sequence)
    # create lag inputs
    df = DataFrame(encoded)
    df = concat([df.shift(4), df.shift(3), df.shift(2), df.shift(1), df], axis=1)
    # remove non-viable rows
    values = df.values
    values = values[5:,:]
    # convert to 3d for input
    X = values.reshape(len(values), 5, 100)
    # drop last value from y
    y = encoded[4:-1,:]
    return X, y

# define model
model = Sequential()
model.add(LSTM(50, batch_input_shape=(5, 5, 100), stateful=True))
model.add(Dense(100, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['acc'])
# fit model
for i in range(2000):
    X, y = generate_data()
    model.fit(X, y, epochs=1, batch_size=5, verbose=2, shuffle=False)
    model.reset_states()
# evaluate model on new data
X, y = generate_data()
yhat = model.predict(X, batch_size=5)
print('Expected:  %s' % one_hot_decode(y))
print('Predicted: %s' % one_hot_decode(yhat))

Saya baru saja mencoba dan itu memang bekerja dengan cukup baik! Butuh hanya beberapa menit di netbook lama saya yang lambat. Ini hasil saya sendiri, berbeda dari tautan di atas dan Anda dapat melihat kecocokan tidak sempurna, jadi saya kira kriteria keluar agak terlalu permisif:

...
 - 0s - loss: 0.2545 - acc: 1.0000
Epoch 1/1
 - 0s - loss: 0.1845 - acc: 1.0000
Epoch 1/1
 - 0s - loss: 0.3113 - acc: 0.9500
Expected:  [14, 37, 0, 65, 30, 7, 11, 6, 16, 19, 68, 4, 25, 2, 79, 45, 95, 92, 32, 33]
Predicted: [14, 37, 0, 65, 30, 7, 11, 6, 16, 19, 68, 4, 25, 2, 95, 45, 95, 92, 32, 33]

Ini bukan belajar untuk memprediksi urutan acak - ini belajar untuk menggemakannya. Secara konkret, sampel pelatihan, X, terdiri dari 5 bilangan bulat acak, dan output, y, adalah bilangan bulat ke-4 dari 5. Misalnya, jika X = [15, 33, 44, 30, 3], y = 30. LSTM sedang belajar menggaungkan sampel ke-4.
thinkski

Ya, poin bagus. Saya masih menganggapnya sebagai contoh praktis yang sangat menarik dari penggunaan LSTM. Jika Anda tahu cara belajar sesuatu seperti Mersenne Twister dari seed hanya diberikan sebagai input, silakan posting di sini karena saya akan sangat tertarik untuk melihatnya. Tampaknya mungkin dengan sampel yang cukup, tetapi saya mungkin benar-benar salah.
isp-zax

2

Jika generator angka acak psuedo mengeluarkan angka maka dalam analisis angka-angka ini Anda akan dapat menentukan algoritma yang menghasilkannya karena angka-angka tidak acak mereka ditentukan oleh algoritma itu dan bukan kebetulan. Jika dunia terdiri dari hukum-hukum fisik yang dapat dipahami dan direplikasi daripada keacakan yang kita amati dalam peristiwa-peristiwa itu tergantung pada hukum-hukum fisik itu. dan generator psuedo tidak lagi, dan merupakan keacakan aktual yang dari definisinya tidak dapat ditentukan, dan menyajikan sebuah paradoks. Bagaimana aturan dapat menciptakan keacakan berdasarkan definisi tentu persepsi kita tentang keacakan peristiwa yang kita amati adalah kiasan dan sebenarnya kepastian yang tidak dapat kita prediksi.


1
Benar. Cukup filosofis. Diharapkan dari jawaban teknis.
Bagaimanapun

2

Menambah apa yang dikatakan Demento, tingkat keacakan dalam Algoritma Generasi Angka Acak adalah masalah utama. Berikut ini adalah beberapa desain yang dapat membuat RNG lemah:
Urutan Tersembunyi
Misalkan ini adalah beberapa urutan karakter yang dihasilkan sebelumnya: (Sebagai contoh, untuk penggunaan praktis rentang yang lebih besar, digunakan)

lwjVJA
Ls3Ajg
xpKr+A
XleXYg
9hyCzA
jeFuNg
JaZZoA

Awalnya, Anda tidak dapat mengamati pola apa pun di dalam generasi tetapi mengubahnya menjadi pengkodean Base64 dan kemudian ke hex, kami mendapatkan yang berikut ini:

9708D524
2ECDC08E
C692ABF8
5E579762
F61C82CC
8DE16E36
25A659A0

Sekarang jika kita kurangi setiap angka dari yang sebelumnya, kita dapatkan ini:

FF97C4EB6A
97C4EB6A
FF97C4EB6A
97C4EB6A
FF97C4EB6A
FF97C4EB6A

Ini menunjukkan bahwa algoritma hanya menambahkan 0x97C4EB6A ke nilai sebelumnya, memotong hasilnya ke angka 32-bit, dan Base64-mengkodekan data.
Di atas adalah contoh dasar. Algoritma dan sistem ML saat ini cukup mampu untuk mempelajari dan memprediksi pola yang lebih kompleks.

Ketergantungan Waktu
Beberapa algoritma RNG menggunakan waktu sebagai input utama untuk menghasilkan angka acak, terutama yang dibuat oleh pengembang sendiri untuk digunakan dalam aplikasi mereka.

Setiap kali algoritma RNG yang lemah diimplementasikan yang tampaknya bersifat stokastik, mereka dapat diekstrapolasi ke depan atau ke belakang dengan akurasi sempurna jika tersedia data yang memadai.


Anda baru saja menunjukkan kepada saya konsepsi dalam pikiran saya sendiri antara kuantitas dan komunikasinya menjadi metode untuk menentukan pola yang saya tahu saya tidak jauh dari intuisi saya :)
Bobs

Tapi itu masih menimbulkan pertanyaan yang tidak terpisahkan dari keacakan menjadi "produk" yang diputus dari rasionalitas ketika kita mencoba menggambarkannya dari fungsi bahasa yang kita gunakan yang berasal dari kerendahan hati dalam mempertahankan proses evolusi dan itu menilai metode menjaga kewarasan manusia. lol.
Bobs

Apakah keacakan atau persepsinya merupakan keterputusan antara realitas dan persepsi manusia dan karena keterputusannya hanya residu persepsi orang yang menentukan masing-masing dan semua orang gambar yang kita semua amati dan tambahkan ke keacakan yang dapat dikomunikasikan karena disjointness intelektual pada faktor konsentris manusia dalam distribusi konseptual.
Bobs

Bagaimana Anda bisa menganalisis sesuatu tanpa dasar untuk memulai analisis Anda dari jika Anda mencoba untuk menganalisis keacakan maka pasti itu dari dasar kepastian ego enteric lol
Bobs

Keacakan pseudo adalah properti orang plastik yang menyamar sebagai kualitas nyata turun ke bumi bahwa mereka memiliki pengabaian berlebihan untuk dan preokupasi yang tidak suci atau manusia dengan. Tekad mengarah pada iman dan kepastian pekerjaan dan komunikasi yang sehat dari produk kehidupan yang baik tidak tahan terhadap masalah keseimbangan kesulitan.
Bobs
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.