Czy są zastosowania AI, w których generatory PRNG są wąskim gardłem?

1

Czy ktoś pracuje tutaj nad jakimiś AI? Wiem, że generatory liczb pseudolosowych są wykorzystywane w AI między innymi w cross validation, stochastic gradient descent, Monte Carlo tree search oraz w algorytmach genetycznych. Ale czy mieliście do czynienia z problemami, w których generatory PRNG były kluczowe, jeśli chodzi o jakość, szybkość, możliwość pararelizacji/brak takiej możliwości? Zwłaszcza z przypadkami, gdy algorytm nie wykonywał prawie żadnych kosztownych obliczeń, poza generowaniem liczb pseudolosowych?

Czy mieliście do czynienia z przypadkami, gdy nie wystarczyło wziąć domyślnego generatora PRNG w danym języku/środowisku, a trzeba było pomyśleć nad znalezieniem najlepszego, najszybszego, żeby uczenie/AI działało lepiej/szybciej? Generatory PRNG są używane w AI, ale czy zdarza się w ogóle, że jest to na tyle istotny czynnik, iż wymaga optymalizacji ponad domyślne rozwiązania typu Mersenne Twister?

Podejrzewam, że w przypadku takiego AlphaGo, który korzysta z Monte Carlo tree search, PRNG mógłby stanowić istotny faktor, ale, czy prędkość, jakość, możliwość pararelizacji takiego PRNG w ogóle stanowi istotny czynnik w tej metodzie?

0

A czemu w ogóle miałyby byc? Spróbuj proszę wymyśleć jakiś case, gdzie mogłyby być takim wąskim gardłem.

1

Są wykorzystywane w wielu miejscach, ale można podstawić własne algorytmy do inicjalizowania parametrów własnymi algorytmami i często tak się robi, dla różnych funkcji aktywacji można zastosować inny weight initializer, który generuje wartość losową w innym przedziale.

Model sieci też często jest losowy co sprzyja lepszemu uczeniu, dropout dla danej warstwy lub wyłączanie nawet całych bloków losowo przy nauce, ale po skończeniu się już tego nie wykonuje, ogólnie jest masa sposobów takich.

Podejmowanie decyzji też jest różne, od zwykłego epsilion greedy, gdzie się wybiera najlepszą lub losową akcję.
A tak losowość prawdopodobieństwa się generuje z rozkładu np. gaussa dla ciągłych lub dyskretnych multinomial distributions.
Dla przykładu mulinomial distributions, mając 2 prawdopodobieństwa, 0,3 i 0,7 to losujesz dla przykładu 100 razy random uniform i zliczasz ile liczb wypadło pomiędzy 0.0-0.3, a ile po między 0.3-1.0.

Monte Carlo tree search to algorytm bardziej statystyczny niż randomowy, jest tam losowość, bo jak mamy jakąś gałąź, którą nigdy nie eksplorowaliśmy, to możemy w sposób losowy wybrać jakąś gałąź.
Albo gdy upper bound confidence jest równe, to możemy losowo pomiędzy węzłami wybrać.
A tak oszacowujemy na każdym węźle wartość oczekiwaną zwycięstwa czyli to jest statystyka.

Możesz dodać swój własny algorytm losowości i sprawdzać, na szybkość wyniku sieci wpływa tyle czynników, że nie sposób sprawdzić wszystkich możliwych parametrów.

0

@dedicated: Wiem, że są wąskim gardłem w przypadku niektórych obliczeń metodą Monte Carlo, np. szacowanie wartości pi:

import numpy as np
 
nTrials = int(10E4)
radius = 1

nInside = 0
 
XrandCoords = np.random.default_rng().uniform(-1, 1, (nTrials,))
YrandCoords = np.random.default_rng().uniform(-1, 1, (nTrials,))
 
for i in range(nTrials):
    x = XrandCoords[i]
    y = YrandCoords[i]

    if x**2+y**2<=radius**2:
        nInside = nInside + 1
             
area = 4*nInside/nTrials
print("Value of Pi: ",area)

Podejrzewam, że w przypadku AI, zwłaszcza Monte Carlo tree search również mogą występować takie sytuacje, ale za mało wiem o AI i to tylko moje mgliste podejrzenia.

0

@Szalony Programista2: zmierzam do tego, że twórcy algorytmów PRNG prześcigają się w niewielkich różnicach w wydajności ich PRNG:

https://prng.di.unimi.it

Przykładowo xoroshiro128+ osiąga 0.29 cykli na bajt, a SFMT19937 (z instrukcjami SSE2) osiąga 0,54 cykli na bajt, a bez instrukcji 0,94 cykli na bajt. Czy dla osób pracujących w AI to może być istotny czynnik? Słyszałeś o przypadku, że kogoś sytuacja zmusiła do zainteresowania się czymś szybszym, a może lepszym, jeśli chodzi o jakość statystyczną? Możemy tu mieć dwukrotne różnice w wydajności, ale, czy to w ogóle ma znaczenie?

Wiem, że na pewno ma znaczenie przykładowo dla fizyków z CERN, których symulacje zdarzeń wysokiej energii konsumują ogromne ilości liczb pseudolosowych, oni też potrzebują wielu niezależnych strumieni liczb (czyli generator musi być parametryzowalny albo mieć funkcję jump-ahead, szybkiego pominięcia wielu iteracji). Ale, czy są podobne, choćby niszowe przypadki, że twórca AI musi większą uwagę przyłożyć do tego jakiego PRNG używa, bo inaczej czas oczekiwania na wyniki/uczenia wydłuży się albo wystąpi ryzyko mylnych wyników, jak w przypadku symulacji Monte Carlo, gdy użyjemy PRNG słabej jakości?

1

W AI używałem losowania do:
train/val splitu,
inicjalizacji wag,
przy generatorach (losowe embedingi na inpucie),
przy triplet/pair lossach,
przy data loaderach (sgd)

Nigdy losowanie nie było wąskim gardłem.

PS. @Tomasz_D , nie przejmuj się tym. Świat potrzebuje Twojego doktoratu.

0

A Graph Neural Network? Czy mieliście z nimi do czynienia? W tym z metodą Randomized Approximate Graph Mining? Z tego co spojrzałem na algorytm w tej publikacji:

https://arxiv.org/pdf/2005.01861.pdf

Niewiele więcej się tam robi poza samplingiem. Ale nic o tym nie wiem. Ale nie jestem pewien, czy podobnie to wygląda w Graph Neural Network.

0

Dowiedziałem się, że metoda NCE w machine learning wymaga szybkich PRNG i tam może to być wąskie gardło.

Możliwe, że wydajność jest też istotna w algorytmach probabilistic neural networks, które zajmują się np. pattern recogniction.

1 użytkowników online, w tym zalogowanych: 0, gości: 1