เครือข่ายประสาทสามารถนำมาใช้ในการทำนายจำนวนสุ่มหลอกต่อไปได้หรือไม่


17

มันเป็นไปได้ที่จะเลี้ยงเครือข่ายประสาทที่ส่งออกจากเครื่องกำเนิดไฟฟ้าจำนวนสุ่มและคาดหวังว่ามันเรียนรู้คร่ำเครียด (หรือเครื่องกำเนิดไฟฟ้า) ฟังก์ชั่นเพื่อที่จะสามารถคาดการณ์สิ่งที่จะเป็นต่อไปสร้างตัวเลขสุ่มหลอก ?

สิ่งนี้มีอยู่แล้วใช่ไหม หากการวิจัยได้ทำไปแล้วในเรื่องนี้หรือบางสิ่งที่เกี่ยวข้อง (จากการทำนายตัวเลขสุ่มหลอก) ทุกคนสามารถชี้ให้ฉันไปยังแหล่งข้อมูลที่ถูกต้องได้หรือไม่?

ขณะนี้ฉันกำลังดูห้องสมุดนี้และลิงก์ที่เกี่ยวข้อง https://github.com/Vict0rSch/deep_learning/tree/master/keras/recurrent


คำตอบ:


13

ถ้าเราจะพูดคุยเกี่ยวกับ RNG สมบูรณ์แบบคำตอบคือมีความชัดเจนไม่มี มันเป็นไปไม่ได้ที่จะทำนายจำนวนสุ่มอย่างแท้จริงมิฉะนั้นจะไม่สุ่มอย่างแท้จริง

เมื่อเราพูดถึง RNG หลอกสิ่งต่าง ๆ เปลี่ยนไปเล็กน้อย ทั้งนี้ขึ้นอยู่กับคุณภาพของ PRNG ปัญหาช่วงจากง่ายไปไม่ได้เกือบ PRNG ที่อ่อนแอมากอย่างXKCD ที่เผยแพร่อย่างหนึ่งนั้นสามารถคาดการณ์ได้ง่ายโดยเครือข่ายประสาทเทียมที่มีการฝึกอบรมเพียงเล็กน้อย แต่ในโลกแห่งความเป็นจริงสิ่งที่ดูแตกต่าง

เครือข่ายประสาทสามารถฝึกให้ค้นหารูปแบบบางอย่างในประวัติศาสตร์ของตัวเลขสุ่มที่สร้างโดย PRNG เพื่อคาดการณ์บิตถัดไป ยิ่งเซลล์ PRNG แข็งแกร่งยิ่งจำเป็นต้องใช้เซลล์รับอินพุตมากขึ้นสมมติว่าคุณใช้เซลล์ประสาทหนึ่งเซลล์สำหรับการสุ่มแบบก่อนหน้านี้ที่สร้างโดย PRNG แต่ละบิต PRNG ที่คาดการณ์ได้น้อยกว่าก็จะยิ่งต้องการข้อมูลมากขึ้นในการค้นหารูปแบบบางอย่าง สำหรับ PRNG ที่แข็งแกร่งนี่เป็นไปไม่ได้

ในแง่บวกจะเป็นประโยชน์ที่คุณสามารถสร้างรูปแบบการฝึกอบรมสำหรับเครือข่ายประสาทโดยพลการโดยสมมติว่าคุณสามารถควบคุม PRNG และสามารถสร้างตัวเลขสุ่มได้มากเท่าที่คุณต้องการ

เนื่องจาก PRNGs ที่ทันสมัยเป็นองค์ประกอบสำคัญสำหรับการเข้ารหัสการวิจัยอย่างกว้างขวางได้ถูกดำเนินการเพื่อตรวจสอบว่าพวกเขา "สุ่มพอ" เพื่อทนต่อการโจมตีการทำนายดังกล่าว ดังนั้นฉันค่อนข้างแน่ใจว่าเป็นไปไม่ได้ที่ทรัพยากรการคำนวณที่มีอยู่ในปัจจุบันเพื่อสร้างเครือข่ายประสาทเทียมเพื่อโจมตี PRNG ที่ถือว่าปลอดภัยสำหรับการเข้ารหัส

นอกจากนี้ยังเป็นที่น่าสังเกตว่าไม่จำเป็นที่จะต้องทำนายผลลัพธ์ของ PRNG เพื่อทำลายการเข้ารหัส - มันอาจจะเพียงพอที่จะคาดการณ์บิตถัดไปด้วยความมั่นใจมากกว่า 50% เล็กน้อยเพื่อลดการใช้งานอย่างมีนัยสำคัญ ดังนั้นหากคุณสามารถสร้างเครือข่ายประสาทที่คาดการณ์บิตถัดไปของ PRNG (ถือว่าปลอดภัยสำหรับการเข้ารหัส) ที่มีอัตราความสำเร็จ 55% คุณอาจทำข่าวพาดหัวข่าวด้านความปลอดภัยสักระยะหนึ่ง


2
ขอบคุณมากสำหรับคำอธิบายที่อยู่เบื้องหลังนี้ ฉันพยายามวิเคราะห์รูปแบบและคาดการณ์บิตถัดไปและมันไม่ได้เป็น RNG ที่สมบูรณ์แบบ แต่ค่อนข้างแข็ง PRNG แต่มันก็ไม่ได้เป็นศิลปะอย่างใดอย่างหนึ่ง ฉันคิดว่ามีพลังในการคำนวณเพียงเล็กน้อยและการใช้งานที่เหมาะสมฉันไม่ควรคาดการณ์กับ 60-70% ถ้าไม่มาก ถ้าเป็นไปได้คุณช่วยชี้แหล่งข้อมูลที่ฉันสามารถอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ไหม ฉันไม่ได้มาจากพื้นหลังการวิจัยและนักพัฒนามากขึ้น
AshTyson

3

เป็นมือใหม่ในการเรียนรู้ของเครื่องฉันได้ทำการทดลองนี้ (โดยใช้ Scikit-Learn):

  • สร้างจำนวนมาก (N) ของการแยกแบบหลอกโดยใช้ฟังก์ชัน python random.choices เพื่อเลือกหมายเลข N จาก 90

  • การฝึกอบรมลักษณนาม MLP พร้อมข้อมูลการฝึกอบรมประกอบด้วย

    • ตัวอย่างที่มี: X <- lotteryResults [i: i + 100], Y <- lotteryResults [i]

    ในทางปฏิบัติฉันมุ่งเป้าไปที่ฟังก์ชั่นที่ให้ตัวเลข N แล้วทำนายสิ่งต่อไป

  • ขอให้ตัวจําแนกประเภทที่ผ่านการฝึกอบรมมาเพื่อคาดการณ์

ผล:

  • แน่นอนตัวแยกประเภทได้รับคะแนนชนะเทียบเคียงกับหนึ่งในการคาดเดาแบบสุ่มหรือของเทคนิคอื่น ๆ ที่ไม่ได้ขึ้นอยู่กับเครือข่ายประสาท

  • อย่างไรก็ตามถ้าฉันสร้างลอตเตอรีแบบสุ่มโดยใช้ฟังก์ชันการแจกแจงแบบลอตเตอรี่แล้วตัวเลขที่ทำนายโดยเครือข่ายประสาทจะถูกสร้างขึ้นอย่างคร่าวๆด้วยเส้นโค้งการแจกแจงแบบเดียวกัน (ถ้าคุณวางแผนการสุ่มตัวเลข คุณจะเห็นว่าทั้งสองมีแนวโน้มเดียวกันแม้ว่าใน predicytions curve มี spikes มากมายดังนั้นบางทีโครงข่ายประสาทเทียมสามารถเรียนรู้เกี่ยวกับการแจกแจงแบบหลอกหลอก

  • ถ้าฉันลดขนาดของชุดการฝึกอบรมภายใต้ขีด จำกัด บางอย่างฉันเห็นว่าตัวจําแนกเริ่มพยากรณ์ตัวเลขไม่กี่ตัวที่เหมือนกันเสมอซึ่งเป็นกลุ่มที่พบบ่อยที่สุดในการสุ่มหลอก น่าแปลกที่พอ (หรืออาจจะไม่) พฤติกรรมนี้ดูเหมือนจะเพิ่มคะแนนชนะเล็กน้อย


3

คำถามเก่า แต่ฉันคิดว่ามันคุ้มค่าคำตอบจริง ฉันเกิดขึ้นเพื่อสะดุดเมื่อมันขวาหลังจากดูคู่มือของวิธีการสร้างเครือข่ายประสาทดังกล่าวแสดงให้เห็นถึงเสียงสะท้อนของ randint หลามเป็นตัวอย่าง นี่คือรหัสสุดท้ายโดยไม่มีคำอธิบายโดยละเอียดยังค่อนข้างง่ายและมีประโยชน์ในกรณีที่ลิงก์ออฟไลน์:

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 ของ 5 ตัวอย่างเช่นถ้า X = [15, 33, 44, 30, 3], y = 30 LSTM กำลังเรียนรู้ที่จะสะท้อนตัวอย่างที่ 4
thinkski

ใช่จุดดี ฉันยังพบว่ามันเป็นตัวอย่างการใช้งานที่น่าสนใจมากของการใช้ LSTM หากคุณรู้วิธีการเรียนรู้บางอย่างเช่น Mersenne Twister จากเมล็ดพันธุ์ที่ให้ไว้เป็นข้อมูลเท่านั้นโปรดโพสต์ไว้ที่นี่เพราะฉันสนใจที่จะดูจริงๆ ดูเหมือนเป็นไปได้ด้วยตัวอย่างที่เพียงพอ แต่ฉันอาจผิดอย่างสมบูรณ์
isp-zax

2

หากตัวสร้างตัวเลขสุ่ม psuedo กำลังขว้างหมายเลขออกจากนั้นในการวิเคราะห์ตัวเลขเหล่านี้คุณจะสามารถกำหนดอัลกอริทึมที่สร้างขึ้นมาได้เนื่องจากตัวเลขที่ไม่ได้สุ่มจะถูกกำหนดโดยอัลกอริทึมนั้นและไม่มีโอกาส หากโลกถูกสร้างขึ้นจากกฎทางกายภาพที่สามารถเข้าใจและทำซ้ำได้มากกว่าการสุ่มตัวอย่างที่ชัดเจนที่เราสังเกตเห็นในเหตุการณ์นั้นเป็นไปตามกฎหมายทางกายภาพเหล่านั้น และเครื่องกำเนิดไฟฟ้า psuedo จะไม่มีอีกต่อไปและเป็นแบบสุ่มที่เกิดขึ้นจริงซึ่งจากคำจำกัดความของมันไม่สามารถระบุได้และนำเสนอความขัดแย้ง กฎจะสร้างสุ่มได้อย่างไรตามนิยามแน่นอนว่าการรับรู้ที่ชัดเจนของเราเกี่ยวกับเหตุการณ์ที่เราสังเกตเห็นนั้นเป็นการพาดพิงและเป็นความแน่นอนที่เราไม่สามารถคาดการณ์ได้


1
จริง ปรัชญาค่อนข้างมาก คาดหวังคำตอบทางเทคนิคบ้าง ขอขอบคุณ :) :)
AshTyson

2

นอกจากสิ่งที่ Demento กล่าวแล้วขอบเขตของการสุ่มในอัลกอริธึมการสร้างเลขสุ่มเป็นประเด็นสำคัญ ต่อไปนี้คือการออกแบบบางอย่างที่สามารถทำให้ RNG อ่อนแอ:
ซี
เควนซ์ที่ปกปิดสมมติว่านี่เป็นลำดับของตัวละครที่สร้างขึ้นก่อนหน้านี้: (ตัวอย่างเช่นสำหรับการใช้งานจริงในช่วงที่กว้างขึ้น)

lwjVJA
Ls3Ajg
xpKr+A
XleXYg
9hyCzA
jeFuNg
JaZZoA

เริ่มแรกคุณไม่สามารถสังเกตรูปแบบใด ๆ ในรุ่น แต่เปลี่ยนเป็นการเข้ารหัส Base64 แล้วเปลี่ยนเป็น hex เราจะได้สิ่งต่อไปนี้:

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

ตอนนี้ถ้าเราลบตัวเลขแต่ละตัวจากตัวเลขก่อนหน้าเราจะได้อันนี้:

FF97C4EB6A
97C4EB6A
FF97C4EB6A
97C4EB6A
FF97C4EB6A
FF97C4EB6A

สิ่งนี้บ่งชี้ว่าอัลกอริทึมเพิ่งเพิ่ม 0x97C4EB6A ให้กับค่าก่อนหน้านี้ตัดผลลัพธ์ให้เป็นตัวเลข 32 บิตและเข้ารหัสฐานข้อมูล 64
ด้านบนเป็นตัวอย่างพื้นฐาน อัลกอริธึมและระบบ ML ในปัจจุบันมีความสามารถเพียงพอที่จะเรียนรู้และทำนายรูปแบบที่ซับซ้อนมากขึ้น

การพึ่งพาเวลา
อัลกอริธึม RNG บางตัวใช้เวลาเป็นอินพุตหลักในการสร้างตัวเลขสุ่มโดยเฉพาะอย่างยิ่งสิ่งที่สร้างโดยนักพัฒนาเองเพื่อใช้ภายในแอปพลิเคชันของพวกเขา

เมื่อใดก็ตามที่อัลกอริทึม RNG อ่อนนำมาใช้ซึ่งดูเหมือนจะสุ่มพวกเขาสามารถคาดการณ์ไปข้างหน้าหรือข้างหลังด้วยความแม่นยำที่สมบูรณ์แบบในกรณีที่มีชุดข้อมูลที่เพียงพอ


คุณเพิ่งแสดงให้ฉันเห็นถึงความคิดในใจของฉันระหว่างปริมาณและการสื่อสารของมันซึ่งเป็นวิธีการกำหนดรูปแบบที่ฉันรู้ว่าฉันไม่ได้อยู่ห่างจากสัญชาตญาณของฉัน :)
Bobs

แต่มันก็ยังคงเป็นคำถามที่แยกกันไม่ออกจากการสุ่มว่าเป็น "ผลิตภัณฑ์" ซึ่งไม่ได้ถูกอ้างถึงจากเหตุผลเมื่อเราพยายามที่จะอธิบายจากฟังก์ชั่นของภาษาที่เราใช้ซึ่งได้มาจากความอ่อนน้อมถ่อมตนในการรักษากระบวนการวิวัฒนาการ ฮ่า ๆ.
บ็อบ

การรับรู้แบบสุ่มหรือการรับรู้เป็นความแตกต่างระหว่างความเป็นจริงและการรับรู้ของมนุษย์และเนื่องจากความไม่ต่อเนื่องของมันเพียงส่วนที่เหลือของการรับรู้ทางอารมณ์ตัดสินภาพแต่ละภาพและทุกคนที่เราทุกคนสังเกตและเพิ่มขึ้น
บ็อบ

คุณจะวิเคราะห์บางสิ่งโดยไม่มีพื้นฐานเพื่อเริ่มการวิเคราะห์ของคุณได้อย่างไรถ้าคุณพยายามวิเคราะห์แบบสุ่มแน่นอนว่ามันมาจากพื้นฐานของความเชื่อมั่นที่แน่นอน ego enteric lol
Bobs

Pseudo Randomness เป็นสมบัติของคนพลาสติกที่ปลอมตัวเป็นจริงตามคุณสมบัติของโลกที่พวกเขามีความเฉื่อยชาเกินกว่าความจริงและการ preocupation ที่ไม่บริสุทธิ์หรือมนุษย์ด้วย ความมุ่งมั่นนำไปสู่ศรัทธาและความมั่นใจในการประกอบอาชีพและการสื่อสารที่เป็นประโยชน์ของผลิตภัณฑ์แห่งชีวิตที่ดีโดยไม่ต้องเผชิญกับปัญหาความสมดุลของความยากลำบาก
Bobs
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.