क्या अगले छद्म यादृच्छिक संख्या की भविष्यवाणी करने के लिए एक तंत्रिका नेटवर्क का उपयोग किया जा सकता है?


17

क्या एक तंत्रिका नेटवर्क को यादृच्छिक संख्या जनरेटर से आउटपुट करना संभव है और उम्मीद है कि यह हैशिंग (या जनरेटर) फ़ंक्शन सीख सकता है, ताकि यह भविष्यवाणी कर सके कि अगले उत्पन्न छद्म यादृच्छिक संख्या क्या होगी ?

क्या ऐसा कुछ पहले से मौजूद है? यदि इस या पहले से संबंधित (छद्म-यादृच्छिक संख्याओं की भविष्यवाणी) पर शोध किया जाता है, तो क्या कोई मुझे सही संसाधनों की ओर इशारा कर सकता है?

वर्तमान में, मैं इस पुस्तकालय और इससे संबंधित लिंक को देख रहा हूं। https://github.com/Vict0rSch/deep_learning/tree/master/keras/recurrent


जवाबों:


13

अगर हम एक पूर्ण RNG के बारे में बात कर रहे हैं, तो उत्तर स्पष्ट नहीं है । वास्तव में यादृच्छिक संख्या की भविष्यवाणी करना असंभव है, अन्यथा यह वास्तव में यादृच्छिक नहीं होगा।

जब हम छद्म आरएनजी के बारे में बात करते हैं, तो चीजें थोड़ी बदल जाती हैं। PRNG की गुणवत्ता के आधार पर, समस्या आसान से लेकर लगभग असंभव है। एक XKCD प्रकाशित की तरह एक बहुत कमजोर PRNG निश्चित रूप से कम प्रशिक्षण के साथ एक तंत्रिका नेटवर्क द्वारा आसानी से भविष्यवाणी की जा सकती है। लेकिन वास्तविक दुनिया में चीजें अलग दिखती हैं।

तंत्रिका नेटवर्क को अगले बिट की भविष्यवाणी करने के लिए PRNG द्वारा उत्पन्न यादृच्छिक संख्याओं के इतिहास में कुछ पैटर्न खोजने के लिए प्रशिक्षित किया जा सकता है। PRNG जितना मजबूत होता है, उतना ही अधिक इनपुट न्यूरॉन्स की आवश्यकता होती है, यह मानते हुए कि आप PRNG द्वारा उत्पन्न प्रत्येक यादृच्छिक यादृच्छिकता के प्रत्येक बिट के लिए एक न्यूरॉन का उपयोग कर रहे हैं। PRNG जितना कम प्रेडिक्टेबल होगा, किसी तरह के पैटर्न को खोजने के लिए उतने ही ज्यादा डेटा की जरूरत होगी। मजबूत PRNGs के लिए यह संभव नहीं है।

एक सकारात्मक नोट पर, यह उपयोगी है कि आप तंत्रिका नेटवर्क के लिए प्रशिक्षण पैटर्न की एक मनमानी मात्रा उत्पन्न कर सकते हैं, यह मानते हुए कि आपका PRNG पर नियंत्रण है और आप जितने चाहें उतने यादृच्छिक संख्या में उत्पादन कर सकते हैं।

चूँकि आधुनिक PRNG क्रिप्टोग्राफी के लिए एक प्रमुख घटक हैं, इसलिए यह सत्यापित करने के लिए व्यापक शोध किए गए हैं कि वे इस तरह के पूर्वानुमान हमलों का सामना करने के लिए "यादृच्छिक रूप से पर्याप्त" हैं। इसलिए मुझे पूरा यकीन है कि वर्तमान में उपलब्ध कम्प्यूटेशनल संसाधनों के साथ यह संभव नहीं है कि वे क्रिप्टोग्राफी के लिए सुरक्षित माने जाने वाले PRNG पर सफलतापूर्वक हमला करने के लिए एक तंत्रिका नेटवर्क का निर्माण कर सकें।

यह भी ध्यान देने योग्य है कि क्रिप्टोग्राफी को तोड़ने के लिए एक PRNG के उत्पादन की सटीक भविष्यवाणी करना आवश्यक नहीं है - कार्यान्वयन को कमजोर करने के लिए 50% से अधिक की निश्चितता के साथ अगले बिट की भविष्यवाणी करने के लिए पर्याप्त हो सकता है। इसलिए यदि आप एक तंत्रिका नेटवर्क बनाने में सक्षम हैं जो 55% सफलता दर के साथ PRNG (क्रिप्टोग्राफी के लिए सुरक्षित माना जाता है) के अगले बिट की भविष्यवाणी करता है, तो आप शायद सुरक्षा समाचार को काफी समय के लिए सुर्खियों में बना देंगे।


2
इसके पीछे की व्याख्या के लिए वाह धन्यवाद। मैं पैटर्न का विश्लेषण करने और अगले बिट की भविष्यवाणी करने की कोशिश कर रहा हूं और यह एक सही आरएनजी नहीं है, लेकिन कुछ हद तक ठोस PRNG है। लेकिन यह कला की स्थिति नहीं है। मुझे लगता है कि थोड़ा कम्प्यूटेशनल शक्ति और उचित कार्यान्वयन के साथ मैं cnould 60-70% के साथ यह भविष्यवाणी करता हूं यदि अधिक नहीं। यदि संभव हो, तो क्या आप किसी भी संसाधन को इंगित कर सकते हैं जहां मैं इस बारे में अधिक पढ़ सकता हूं। मैं एक शोध पृष्ठभूमि से नहीं हूं और एक डेवलपर से अधिक हूं।
AshTyson

3

मशीन सीखने में एक पूर्ण नौसिखिया होने के नाते, मैंने यह प्रयोग किया (Scikit-learn का उपयोग करके):

  • एक बड़ी संख्या (एन) के छद्म यादृच्छिक अर्क उत्पन्न, 90 से बाहर एन संख्या का चयन करने के लिए अजगर random.choices समारोह का उपयोग कर।

  • प्रशिक्षण डेटा के साथ एक एमएलपी क्लासिफायर का पालन करें:

    • ith नमूना: X <- लॉटरी लॉटरी। [i: i + 100], Y <- लॉटरी लॉटरी [i]

    व्यवहार में, मैंने एक फ़ंक्शन का उद्देश्य दिया जो एन नंबर दिया, अगले एक पर कौड भविष्यवाणी करता है।

  • बचे हुए नंबरों की भविष्यवाणी करने के लिए प्रशिक्षित क्लासशिक्षक से पूछा।

परिणाम:

  • बेशक, क्लासिकेटर ने एक अनुमान लगाने के साथ एक जीतने वाला स्कोर प्राप्त किया जो कि यादृच्छिक नेटवर्क के आधार पर या तंत्रिका नेटवर्क पर आधारित नहीं है (मैंने स्कोर-लाईट लाइब्रेरी में उपलब्ध कई क्लासिफायर के साथ परिणामों की तुलना की है)

  • हालाँकि, यदि मैं एक विशिष्ट वितरण फ़ंक्शन के साथ छद्म यादृच्छिक लॉटरी अर्क उत्पन्न करता हूं, तो तंत्रिका नेटवर्क द्वारा अनुमानित संख्याएं समान वितरण वक्र के साथ उत्पन्न होती हैं (यदि आप यादृच्छिक संख्याओं की घटनाओं और तंत्रिका संबंधी भविष्यवाणियों की साजिश करते हैं,) आप देख सकते हैं कि दोनों का रुझान एक ही है, भले ही भविष्यवाणियों में वक्र कई स्पाइक्स हों। तो शायद तंत्रिका नेटवर्क छद्म यादृच्छिक संख्या वितरण के बारे में जानने में सक्षम है?

  • अगर मैं एक निश्चित सीमा के तहत निर्धारित प्रशिक्षण के आकार को कम करता हूं, तो मैं देखता हूं कि क्लासिफायर हमेशा कुछ समान संख्याओं की भविष्यवाणी करना शुरू करता है, जो छद्म यादृच्छिक पीढ़ी में सबसे अधिक बार होते हैं। अजीब तरह से पर्याप्त (या शायद नहीं) यह व्यवहार जीतने वाले स्कोर को थोड़ा बढ़ाने के लिए लगता है।


3

पुराना सवाल है, लेकिन मुझे लगा कि यह एक व्यावहारिक जवाब के लायक है। मैं एक उदाहरण के रूप में अजगर के रैंडिंट की गूंज का प्रदर्शन करते हुए, इस तरह के तंत्रिका नेटवर्क का निर्माण करने के एक गाइड को देखने के बाद सही तरीके से ठोकर खाने के लिए हुआ । विस्तृत विवरण के बिना अंतिम कोड यहां दिया गया है, फिर भी लिंक ऑफ़लाइन होने की स्थिति में काफी सरल और उपयोगी है:

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))

मैंने अभी कोशिश की है और यह वास्तव में काफी अच्छी तरह से काम करता है! मेरे पुराने धीमे नेटबुक पर बस कुछ मिनट ले लिया। यहां मेरा अपना स्वयं का आउटपुट है, ऊपर दिए गए लिंक से अलग है और आप देख सकते हैं कि मैच बिल्कुल सही नहीं है, इसलिए मुझे लगता है कि निकास मानदंड थोड़ा बहुत अधिक है:

...
 - 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]

यह यादृच्छिक अनुक्रम की भविष्यवाणी करना नहीं सीख रहा है - यह इसे प्रतिध्वनित करना सीख रहा है। इसके विपरीत, प्रशिक्षण के नमूने, X, में 5 यादृच्छिक पूर्णांक होते हैं, और आउटपुट, y, 4 का पूर्णांक होता है। उदाहरण के लिए, यदि X = [15, 33, 44, 30, 3], y = 30। LSTM 4 के नमूने को प्रतिध्वनित करना सीख रहा है।
थिंकस्की

हाँ, अच्छी बात है। मुझे अभी भी यह LSTM उपयोग का एक बहुत ही दिलचस्प व्यावहारिक उदाहरण लगता है। यदि आप जानते हैं कि केवल इनपुट के रूप में दिए गए बीज से मेरसेन ट्विस्टर जैसा कुछ सीखना है, तो कृपया इसे यहाँ पोस्ट करें क्योंकि मैं वास्तव में देखना चाहूंगा। पर्याप्त नमूनों के साथ संभव लगता है, लेकिन मैं पूरी तरह से गलत हो सकता है।
isp-zax

2

यदि एक psuedo यादृच्छिक संख्या जनरेटर संख्याओं को बाहर निकाल रहा है तो इन संख्याओं के विश्लेषण में आप उन एल्गोरिदम को निर्धारित करने में सक्षम होंगे जो उन्हें उत्पन्न करते हैं क्योंकि संख्याएं यादृच्छिक रूप से उस एल्गोरिथ्म द्वारा निर्धारित नहीं की जाती हैं और मौका नहीं है। अगर दुनिया उन भौतिक कानूनों से बनी है, जिन्हें हम स्पष्टता से समझने और समझने में सक्षम हैं, तो हम उन भौतिक नियमों से कमतर हैं। और प्यूसीडो जनरेटर अब नहीं है, और वास्तविक यादृच्छिकता है जो इसकी परिभाषा से अपरिहार्य है, और एक विरोधाभास प्रस्तुत करता है। नियम कैसे परिभाषा के द्वारा यादृच्छिकता पैदा कर सकते हैं निश्चित रूप से हमारे द्वारा देखी गई घटनाओं की यादृच्छिकता की हमारी स्पष्ट धारणा एक भ्रम है और वास्तव में एक निश्चितता है जिसकी हम भविष्यवाणी करने में असमर्थ हैं।


1
सच। काफी दार्शनिक हालांकि। कुछ तकनीकी उत्तर की उम्मीद है। फिर भी धन्यवाद :)
एशटसन

2

डिमेंटो ने जो कहा, उसे जोड़ते हुए, रैंडम नंबर जनरेशन एल्गोरिथम में यादृच्छिकता की सीमा प्रमुख मुद्दा है। निम्नलिखित कुछ डिज़ाइन हैं जो RNG को कमज़ोर बना सकते हैं:
छुपा हुआ अनुक्रम
मान लीजिए कि इससे उत्पन्न वर्णों के पिछले कुछ क्रम हैं: (बस एक उदाहरण, व्यावहारिक उपयोग के लिए बड़ी रेंज का उपयोग किया जाता है)

lwjVJA
Ls3Ajg
xpKr+A
XleXYg
9hyCzA
jeFuNg
JaZZoA

प्रारंभ में, आप पीढ़ियों में किसी भी पैटर्न का निरीक्षण नहीं कर सकते हैं, लेकिन उन्हें बेस 64 एन्कोडिंग और फिर हेक्स में बदलते हुए, हम निम्नलिखित प्राप्त करते हैं:

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

अब यदि हम प्रत्येक संख्या को पिछले वाले से घटाते हैं, तो हमें यह मिलता है:

FF97C4EB6A
97C4EB6A
FF97C4EB6A
97C4EB6A
FF97C4EB6A
FF97C4EB6A

यह इंगित करता है कि एल्गोरिथ्म सिर्फ पिछले मूल्य में 0x97C4EB6A जोड़ता है, परिणाम को 32-बिट संख्या में विभाजित करता है, और बेस 64-डेटा को एन्कोड करता है।
ऊपर एक बुनियादी उदाहरण है। आज के एमएल एल्गोरिदम और सिस्टम अधिक जटिल पैटर्न सीखने और भविष्यवाणी करने में सक्षम हैं।

समय निर्भरता
कुछ RNG एल्गोरिदम यादृच्छिक संख्याओं को उत्पन्न करने के लिए प्रमुख इनपुट के रूप में समय का उपयोग करते हैं, विशेष रूप से डेवलपर्स द्वारा खुद को उनके आवेदन के भीतर उपयोग किए जाने के लिए।

जब भी कमजोर RNG एल्गोरिदम को लागू किया जाता है जो स्टोचस्टिक प्रतीत होता है, तो उन्हें पर्याप्त सटीकता के साथ आगे या पीछे की तरफ एक्सट्रपलेशन किया जा सकता है , जब पर्याप्त डेटासेट उपलब्ध हो।


आपने मुझे केवल मात्रा और उसके संचार के बीच अपने स्वयं के मन में एक गर्भाधान का प्रदर्शन किया है, एक पैटर्न निर्धारित करने का एक तरीका जिसे मैं जानता था कि मैं अपने अंतर्ज्ञान से बहुत दूर नहीं था :)
बोब्स

लेकिन यह अभी भी यादृच्छिकता का एक अविभाज्य प्रश्न है, "तर्कसंगतता" से उत्पन्न "उत्पाद" जब हम उस भाषा के एक फ़ंक्शन से इसका वर्णन करने का प्रयास करते हैं जो हम उपयोग करते हैं जो विकासवादी प्रक्रिया को बनाए रखने में एक विनम्रता से उत्पन्न होती है और यह मानव विवेक को बनाए रखने की विधि है। जबरदस्त हंसी।
बोब्स

क्या यादृच्छिकता या इसकी धारणा वास्तविकता और मानव धारणा के बीच का अंतर है और इसकी असंगति के कारण केवल भावुक धारणा का एक अवशेष प्रत्येक के चित्र का निर्णय करता है जिसे हम सभी निरीक्षण करते हैं और वैचारिक वितरण में मनुष्यों की बौद्धिक असहमति के कारण संचार योग्य यादृच्छिकता तक कहते हैं।
बोब्स

कैसे आप कभी भी अपने विश्लेषण शुरू करने के लिए एक आधार के बिना कुछ विश्लेषण कर सकते हैं यदि आपके अनियमितता का विश्लेषण करने के तो निश्चित रूप से यह निश्चित है अहंकार आंतों का lol के आधार से है की कोशिश कर रहा से
बॉब्स

छद्म यादृच्छिकता प्लास्टिक के लोगों की एक संपत्ति है जो वास्तविक रूप से पृथ्वी के गुणों के रूप में सामने आती है कि उनके पास एक अपवित्र अवहेलना और एक अपवित्र या मानव शिकार है। दृढ़ विश्वास विश्वास की ओर जाता है और एक अच्छा जीवन के उत्पाद के कब्जे और पूर्ण संचार की एक निश्चितता कठिनाई के संतुलन की समस्याओं को नहीं समझती है।
बोब्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.