Qual è la differenza tra non determinismo e casualità?
38
Di recente ho sentito questo:
"Una macchina non deterministica non è la stessa di una macchina probabilistica. In termini rozzi, una macchina non deterministica è una macchina probabilistica in cui non sono note le probabilità di transizioni".
Mi sento come se avessi capito il punto, ma in realtà no. Qualcuno potrebbe spiegarmelo (nel contesto delle macchine o in generale)?
Modifica 1:
Giusto per chiarire, la citazione era nel contesto di un automa finito, ma la domanda è significativa anche per le macchine di Turing come altri hanno risposto.
Inoltre, sento persone dire: "... quindi scelgo l'oggetto x dall'insieme in modo non deterministico". Pensavo significassero "casualmente". Da qui la confusione.
Nell'informatica, le persone usano occasionalmente il termine "deterministico" per sottolineare che un algoritmo non è randomizzato. Da qui la confusione: deterministico significa non randomizzato, ma non deterministico non significa randomizzato.
È importante capire che gli scienziati informatici usano il termine "non deterministico" in modo diverso da come viene generalmente utilizzato in altre scienze. Una TM non deterministica è in realtà deterministica in senso fisico - vale a dire, un NTM produce sempre la stessa risposta su un dato input: o accetta sempre o rifiuta sempre. Una TM probabilistica accetterà o rifiuterà un input con una certa probabilità, quindi su una corsa potrebbe accettare e su un'altra potrebbe rifiutare.
Più in dettaglio: ad ogni passo nel calcolo eseguito da un NTM, invece di avere una singola regola di transizione, ci sono più regole che possono essere invocate. Per determinare se NTM accetta o rifiuta, si esaminano tutti i possibili rami del calcolo. (Quindi, se ci sono, per esempio, esattamente 2 transizioni tra cui scegliere ad ogni passo, e ogni ramo di calcolo ha un totale di N passi, allora ci saranno totale di salti da considerare.) Per un NTM standard, viene accettato un input se uno dei rami di calcolo accetta.2N
Quest'ultima parte della definizione può essere modificata per ottenere altri tipi correlati di macchine di Turing. Se sei interessato a problemi con una soluzione unica, puoi far accettare la TM se accetta esattamente un ramo. Se sei interessato al comportamento di maggioranza, puoi definire la TM da accettare se più della metà delle filiali accetta. E se casualmente (secondo una certa distribuzione di probabilità) scegli uno dei possibili rami e accetti o rifiuti in base a ciò che fa quel ramo, allora hai una TM probabilistica.
Kurt, puoi per favore spiegare come è arrivata la cifra 2 ^ N. Se per ogni ramo ci sono 2 possibilità e ci sono N fasi come quella per raggiungere la soluzione non la renderebbe 2 ^ (N + 1) -1. Sto cercando di pensarlo come un grafico e potrei sbagliarmi. Potresti spiegare come sei arrivato al numero 2 ^ N. Grazie.
Bene, se rappresenti il calcolo come un albero, con la radice che rappresenta la configurazione iniziale come passaggio 0, dopo N passaggi hai 2 ^ N foglie, e quello che sto chiamando un ramo è un percorso dalla radice a una foglia. È vero che avrai 2 ^ (N + 1) -1 nodi totali, che rappresentano tutte le possibili configurazioni a un certo punto del calcolo. Spero che la mia terminologia sia ok!
Tutte le scienze usano la stessa definizione di non determinismo unificata sul concetto di entropia illimitata. Risultati imprevedibili in tutte le scienze sono dovuti all'incapacità di enumerare a priori tutti i possibili output di un algoritmo (o sistema) perché accetta stati illimitati, cioè classe di complessità NP. Specificare un input particolare per osservare se si ferma e notare che il risultato è idempotente è equivalente in altre scienze a mantenere costante il resto dell'entropia dell'universo mentre si ripete lo stesso cambiamento di stato. Il calcolo consente questo isolamento entropico, mentre le scienze naturali no.
@DavidRicherby scusa David. Vai sull'altro thread e vedi che ti ho rifiutato clamorosamente. Puoi provare a confutare la logica che ti ho presentato. Affermare senza prove e spiegazioni non ti fa guadagnare alcuna verità.
Nel contesto di Turing Machines, "non deterministico" significa in realtà "parallelo". Un algoritmo randomizzato può esplorare casualmente i rami dell'albero di calcolo di una macchina di Turing non deterministica, ma una macchina di Turing non deterministica può esplorarli allo stesso tempo, che è ciò che gli dà il suo potere.
In altri contesti (non posso dire dalla tua citazione se stai parlando di Turing Machines), un algoritmo randomizzato potrebbe intenzionalmente usare la casualità, mentre un algoritmo che volevi essere deterministico potrebbe finire per mostrare non determinismo a causa di un bug ...
In risposta alla tua modifica, quando le persone dicono "scegli un elemento da un set in modo non deterministico", è possibile che significhino "casualmente". Tuttavia, è anche possibile che significhino "scegli magicamente l'elemento -right-dal set". Un modo comune per visualizzare le macchine di turing non deterministiche è che prima "indovinano" magicamente una soluzione, quindi ne verificano la correttezza. Naturalmente, puoi vedere questa ipotesi magica solo come il risultato del controllo di tutte le possibilità in parallelo.
Relativo a "scegliere magicamente l' elemento giusto ": quando la parola "non determinismo" viene usata in questo senso, a volte le persone lo qualificano con "angelico". C'è anche un non determinismo "demoniaco". (Tuttavia, come dici tu, l'essenza è che le cose accadono in parallelo.)
Esistono diversi contesti in cui "deterministico", "casuale" e "non deterministico" significano tre cose diverse. In contesti in cui vi sono più partecipanti, come sicurezza e concorrenza, l'intuizione è spesso qualcosa di simile:
deterministico significa "Posso scegliere"
non deterministico significa "qualcun altro arriva a scegliere"
random significa "nessuno può scegliere"
Alcuni esempi:
[concorrenza, casuale] Prendi in considerazione un protocollo di rete come Ethernet , in cui più nodi possono inviare un messaggio in qualsiasi momento. Se due nodi inviano un messaggio a intervalli molto ravvicinati, si verifica una collisione: i messaggi si sovrappongono e sono illeggibili. Se si verifica una collisione, entrambi i nodi devono provare a inviare nuovamente i messaggi in un secondo momento. Immagina di scrivere le specifiche di Ethernet. Come si specifica il ritardo tra i tentativi? (I ritardi dovrebbero essere diversi o ci sarà di nuovo una collisione!)
deterministico: definire un algoritmo che entrambi i nodi devono usare. Questo non viene fatto per Ethernet perché, al fine di fornire risultati diversi, l'algoritmo dovrebbe privilegiare un nodo rispetto all'altro (per ogni dato contenuto del messaggio), ed Ethernet evita di farlo.
non deterministico: lascia decidere a ciascun implementatore. Questo non va bene perché gli implementatori su entrambi i nodi possono scegliere lo stesso algoritmo.
random: ogni nodo deve selezionare un valore di delay a caso (con una distribuzione specificata). Funziona così. C'è una piccola probabilità che i due nodi scelgano lo stesso ritardo e ci sia un'altra collisione, ma la probabilità di successo aumenta asintoticamente verso 1 all'aumentare del numero di tentativi.
[concorrenza, non deterministico] Scrivi un algoritmo simultaneo. In una situazione specifica, può esserci un deadlock. Come è possibile impedire il deadlock? Dipende dal tipo di pianificazione dell'ambiente di concorrenza.
deterministico: lo scheduler passa sempre da un thread all'altro in determinati punti ben definiti, ad esempio solo quando il codice cede esplicitamente. Quindi fai semplicemente in modo che i fili non cedano nei momenti difficili.
random: lo scheduler garantisce il cambio casuale dei thread. Quindi una strategia praticabile può essere quella di rilevare il deadlock se si verifica e riavviare l'algoritmo dall'inizio.
non deterministico (la maggior parte degli scheduler è così): non sai quando lo scheduler passerà da un thread all'altro. Quindi devi davvero evitare lo stallo. Se hai provato a rilevare e riavviare come nel caso casuale, corri il rischio che lo scheduler pianifichi i tuoi thread esattamente nello stesso modo ancora e ancora.
[sicurezza, casuale] Si scrive un'applicazione con una richiesta di password. Come si modella un attaccante?
deterministico: l'attaccante cerca sempre le stesse password. Questo non è affatto un modello utile di un attaccante - gli attaccanti non sono prevedibili per definizione.
non deterministico: l'attaccante conosce in qualche modo la tua password e la inserisce. Ciò mostra la limitazione delle password: devono essere mantenute segrete. Se la tua password è segreta, questo aggressore non è realistico.
random: l'attaccante prova le password a caso. In questo caso, questo è un modello realistico di attaccante. Puoi studiare quanto tempo impiegherà l'attaccante a indovinare la tua password in base alla distribuzione casuale che usa. Una buona password è quella che richiede molto tempo per qualsiasi distribuzione realistica.
[sicurezza, non deterministico] Scrivi un'applicazione e temi che possa avere una falla nella sicurezza. Come si modella un attaccante?
deterministico: l'attaccante sa tutto quello che sai. Ancora una volta, questo non è un modello utile di un attaccante.
random: l'attaccante lancia immondizia casuale e spera di arrestare il programma. Questo può essere utile a volte ( fuzzing ), ma l'attaccante potrebbe essere più intelligente di così.
non deterministico: se c'è un buco, l'attaccante lo troverà alla fine. Quindi è meglio rafforzare la propria applicazione (aumentare il requisito di intelligenza per l'attaccante; si noti che poiché si tratta di un requisito di intelligenza piuttosto che un requisito di calcolo, questo conta come non deterministico fino a quando arriva l'IA), o meglio, dimostrare che non c'è buca di sicurezza e quindi un tale aggressore non esiste.
La correzione ruota attorno alla parola mancante dimostra nelle tue affermazioni: Deterministico è "Posso dimostrare che sto scegliendo (cioè specificando completamente il risultato che termina sul mio input nella classe di complessità P)", Non deterministico è "Non posso dimostrare che sto scegliendo (vale a dire la prova della risoluzione è indecifrabile nella classe di complessità NP) ", e casuale è" Posso dimostrare che riesco a scegliere metà del tempo (cioè la classe di complessità ZPP) ".
@ShelbyMooreIII Non capisco dove ti trovi. Il determinismo non è, in generale, nel provare che qualcosa è davvero deterministico, o nel considerare un problema in una certa classe di complessità. Inoltre, le classi di complessità non riguardano il fatto che il sistema stesso sia in grado di dimostrare qualcosa sul suo determinismo (la maggior parte dei problemi non ha nemmeno l'idea di provare all'interno del sistema!).
Il non determinismo è sempre il risultato di un'entropia illimitata, quindi un altro modo di dire questo è che non posso provare che sto scegliendo il risultato (perché non posso provare che la mia scelta finirà). Tutto quello che posso fare è provare, il che significa che devo enumerare ogni scelta che voglio fare prima di sapere se terminerà. Mentre con determinismo, posso dimostrare di aver scelto il risultato perché deve terminare. La randomizzazione è dove posso provare che posso scegliere solo una quantità casuale di tempo perché parte dell'entropia non è sotto il mio controllo. Se so che l'importo non è sotto il mio controllo, posso dimostrare con precisione le statistiche di.
D'accordo, non è la classe di complessità NP che genera il non determinismo, piuttosto NP è una dipendenza. Turing-complete è un esempio di non determinismo. Per favore, vedi il mio commento sotto la risposta di Kurt, così come la mia risposta sul thread correlato . Il mio punto è su ciò che è dimostrato e imprevedibile con precisione per i termini deterministici, non deterministici e casuali. Si tratta dell'entropia (e non del basso )
Supponi di dover scegliere una porta da aprire tra le 10000 porte (supponiamo che ci sia un premio dietro una delle porte). Scegliere casualmente significa che sceglieresti una delle 10000 porte e la inserirai. Se c'è un premio dietro una sola porta, molto probabilmente non lo troverai. Una macchina non deterministica entrerebbe simultaneamente in tutte le 10000 porte. Se c'è un premio ovunque, la macchina non deterministica lo troverà.
@RobinKothari: "In alternativa, una macchina non deterministica aprirebbe solo una porta, ma sarebbe sempre quella giusta". E "Una macchina non deterministica entrerebbe simultaneamente in tutte le 10000 porte"? - Quale è corretta?
@tan: entrambe sono interpretazioni corrette. A differenza delle macchine deterministiche e randomizzate, fisicamente realizzabili, una macchina non deterministica è un oggetto immaginario. Quindi puoi immaginarlo come preferisci, il punto è che trova sempre la porta giusta. Forse è il migliore indovino, forse qualcuno ha detto segretamente alla macchina dove era il premio, forse controlla magicamente tutte le porte, ecc.
Definizione di Macchina di Turing non deterministica : una macchina di Turing che ha più di uno stato successivo per alcune combinazioni di contenuti della cella corrente e dello stato corrente. Un input viene accettato se qualsiasi sequenza di spostamento porta all'accettazione.
Definizione di Turing Machine probabilitistica :
una macchina di Turing non deterministica (TM) che sceglie casualmente tra le transizioni disponibili in ciascun punto in base a una distribuzione di probabilità.
La Turing Machine probabilistica è una Turing Machine non deterministica che può commettere errori.
Non esiste una macchina di Turing probabilistica! Esistono solo macchine deterministiche (in ogni fase un singolo stato di follow-up possibile) e macchine non deterministiche (in ogni fase un numero costante di possibili stati di follow-up).
Il non determinismo funziona come segue: si consideri una macchina non deterministica che si ferma su ciascun input (possibile se il problema è decidibile), in cui ogni possibile calcolo utilizza lo stesso numero di passaggi e in cui ogni passaggio ha esattamente 2 possibili stati di follow-up ( entrambi non sono davvero una restrizione). Come nella definizione di NP, una macchina non deterministica accetta un input se esiste almeno un possibile calcolo di accettazione e rifiuta l'input se tutti i calcoli vengono rifiutati.
La casualità entra in gioco nel modo seguente: Puoi scegliere uniformemente a caso un singolo percorso di calcolo da una macchina non deterministica come indicato sopra. Accetti se e solo se questo percorso di calcolo scelto casualmente accetta. Questo approccio randomizzato "risolve" il tuo problema se, con enorme probabilità, questa risposta è corretta.
Quindi la differenza tra non determinismo e casualità è se stai cercando la mera esistenza di una corretta risposta Sì (e affidabile Nessuna risposta) o se sei interessato a risolvere il tuo problema "il più delle volte" .
-1 Errori nel tuo primo paragrafo. Esistono macchine probabilistiche di Turing e campionano un lancio di monete dall'entropia esterna, cfr. Classe di complessità ZPP. Il non determinismo ha un numero illimitato e non limitato di stati alternativi, cfr. La classe di complessità NP. Il determinismo è la classe di complessità P e tu l'hai capito correttamente.
Penso che tu abbia letto male la mia risposta. Sostengo che non è necessaria alcuna macchina diversa (con lancio di monete o altre capacità) rispetto a una "normale" TM non deterministica per definire le classi di complessità probabilistica. Puoi anche usare un NTM e usare una diversa definizione di accettazione, vale a dire una definizione in cui "la maggior parte dei percorsi computazionali accetta l'input", al contrario di "esiste almeno un singolo percorso di accettazione per l'input".
Per semplificare: una macchina non deterministica può scegliere in modo ottimale il risultato di ogni lancio di una moneta (se ti piace l'analogia con una macchina probabilistica). Potresti anche immaginare che esegua il calcolo per ogni risultato del lancio della moneta in parallelo.
Fare un passo indietro durante il debug come motivazione per il non determinismo
La nozione di macchina non deterministica suggerisce se stessa quando si desidera fare un passo indietro (nel tempo) attraverso un programma durante il debug. In un tipico computer, ogni passaggio modifica solo una quantità limitata di memoria. Se salvi sempre queste informazioni per i precedenti 10000 passaggi, puoi fare un passo avanti e indietro nel programma, e questa possibilità non si limita ai programmi giocattolo. Se si tenta di rimuovere l'asimmetria tra i passaggi in avanti e quelli all'indietro, si finisce con l'idea di una macchina non deterministica.
Somiglianze e differenze tra non determinismo e casualità
Mentre le macchine probabilistiche condividono alcune caratteristiche con macchine non deterministiche, questa simmetria tra passi avanti e passi indietro non è condivisa. Per vedere questo, modelliamo i passi o le transizioni di una macchina deterministica mediante funzioni (totali o parziali), le transizioni di una macchina non deterministica da relazioni (finite) e le transizioni di una macchina probabilistica da matrici (sub) stocastiche . Ad esempio, ecco le definizioni corrispondenti per gli automi finiti
Q
Σ
δ:Q×Σ→Q
Δ:Q×Σ→P(Q)
Δ⊂Q×Σ×Q
Δ:Σ→P(Q×Q)
δ:Σ→ssM(Q)
P(Q)QssM(Q)Q
Esistono molte diverse condizioni di accettazione ragionevoli
Le transizioni sono solo una parte di una macchina, sono importanti anche gli stati iniziale e finale, possibili condizioni di uscita e accettazione. Tuttavia, ci sono solo pochissime condizioni di accettazione non equivalenti per le macchine deterministiche, un certo numero di condizioni di accettazione ragionevoli per le macchine non deterministiche (NP, coNP, #P, ...) e molte possibili condizioni di accettazione per le macchine probabilistiche. Quindi questa risposta si concentra principalmente sulle transizioni.
La reversibilità non è banale per le macchine probabilistiche
PPTP≠PPBAkABk
La reversibilità è difficile anche per le macchine non deterministiche
PPTP≠PR∘Rop∘R≠RRRR∘Rop∘R=RRop∘R∘Rop=RopPQP∘Q
Queste considerazioni hanno senso anche per gli automi pushdown
Questo post suggerisce che una motivazione per il non determinismo è quella di rimuovere quell'asimmetria tra i passi avanti e quelli all'indietro. Questa simmetria del non determinismo è limitata agli automi finiti? Ecco le definizioni simmetriche corrispondenti per gli automi pushdown
Q
Σ
Γ
δ:Q×Γ×(Σ∪{ϵ})→Q×Γ{0,2}δ(q,γ,ϵ)≠ϵδ(q,γ,σ)=ϵσ∈Σ
non-deterministic: a transition function Δ:Q×Γ{0,1}×(Σ∪{ϵ})→P(Q×Γ{0,1})
non-deterministic: a transition relation Δ⊂Q×Γ{0,1}×(Σ∪{ϵ})×Q×Γ{0,1}
non-deterministic: a function Δ:Σ∪{ϵ}→P(Q×Γ{0,1}×Q×Γ{0,1})
probabilistic: a function δ:Σ∪{ϵ}→ssM(Q×Γ{0,1}) such that δ(ϵ)+δ(σ)∈ssM(Q×Γ{0,1}) for all σ∈Σ
Here ϵ is the empty string, Γ{0,2}={ϵ}∪Γ∪(Γ×Γ) and Γ{0,1}={ϵ}∪Γ. This notation is used because it is similar to Γ∗, which is used in many definitions for pushdown automata.
Diagramed verification of reversal for (non)advancing input and stack operations
An advancing input operation with b∈Σ⊂Σ∪{ϵ} gets reversed as follows
a|bc→a|bc→ab|c a|bc←ab|c←ab|c c|ba→c|ba→cb|a
A non advancing input operation with ϵ∈Σ∪{ϵ} that doesn't read any input can be reversed
a|bc→a|bc→a|bc a|bc←a|bc←a|bc cb|a→cb|a→cb|a
Here is a diagram of an advancing input operation whose reversal would look bad
a|bc→a|bc→ab|ca|bc←ab|c←ab|cc|ba→c|ba→cb|a
For a stack operation (s,t)∈Γ{0,1}×Γ{0,1}, there are the three cases (s,t)=(a,ϵ), (s,t)=(ϵ,a), and (s,t)=(a,b). The stack operation (a,ϵ) gets reversed to (ϵ,a) as follows
ab…→ab…→|b… ab…←|b…←b… b…→|b…→ab…
The stack operation (a,b) gets reversed to (b,a) as follows
ac…→ac…→bc… ac…←bc…←bc… bc…→bc…→ac…
A generalized stack operation (ab,cde)∈Γ∗×Γ∗ would be reversed to (cde,ab)
abf…→abf…→cdef… abf…←cdef…←cdef… cdef…→cdef…→abf…
Reversibility for Turing machines
A machine with more than one stack is equivalent to a Turing machine, and stack operations can easily be reversed. The motivation at the beginning also suggests that reversal (of a Turing machine) should not be difficult. A Turing machine with a typical instruction set is not so great for reversal, because the symbol under the head can influence whether the tape will move left or right. But if the instruction set is modified appropriately (without reducing the computational power of the machine), then reversal is nearly trivial again.
A reversal can also be constructed without modifying the instruction set, but it is not canonical and a bit ugly. It might seem that the existence of a reversal is just as difficult to decide as many other question pertaining to Turing machines, but a reversal is a local construction and the difficult questions often have a global flavor, so pessimism would probably be unjustified here.
The urge to switch to equivalent instruction sets (easier to reverse) shows that these questions are less obvious than they first appear. A more subtle switch happened in this post before, when total functions and stochastic matrices were replaced by partial functions and substochastic matrices. This switch is not strictly necessary, but the reversal is ugly otherwise. The switch to the substochastic matrices was actually the point where it became obvious that reversibility is not so trivial after all, and that one should write down details (as done above) instead of taking just a high level perspective (as presented in the motivation at the beginning). The questions raised by Niel de Beaudrap also contributed to the realization that the high level perspective is slightly shaky.
Conclusion
Non-deterministic machines allow a finite number of deterministic transitions at each step. For probabilistic machines, these transitions additionally have a probability. This post conveys a different perspective on non-determinism and randomness. Ignoring global acceptance conditions, it focuses on local reversibility (as a local symmetry) instead. Because randomness preserves some local symmetries which are not preserved by determinism, this perspective reveals non-trivial differences between non-deterministic and probabilistic machines.
Are you assuming that non-deterministic transitions are one-to-many relations? What if two different configurations can transition to a common configuration, among others? — It seems to me that the difference between randomness and nondeterminism is not reversibility (neither are, without further constraint), but rather how one attributes significance to branches according to the result: perfectly democratic for randomness, or preferentially sensitive to "yes" or "no" answers for nondeterminism.
@NieldeBeaudrap I assume that non-deterministic transitions are "arbitrary" relations (one for each symbol from the input alphabet). I can reverse them, swap start and end state, and get again a non-deterministic finite state machine, which accepts the reversed input string. This is what I call "run the machine backwards in time". (The machine accepts if there is at least one path from start to end state in the non-deterministic case, and this condition doesn't change when reversing time.) Please try to convince yourself that this works at least for a finite state machine.
So, you refer to the dual of the machine. For NFAs this seems a meaningful notion of reversibility. It's also clear that the dual of an NTM (with a single accept state) is another NTM, but I would hesitate to say that it is the same machine being run in reverse. Does your answer amount just to "Nondeterminism allows you to obtain closure under duals, random (and deterministic) machines aren't"?
@NieldeBeaudrap My idea is certainly to run backwards in time, but I know that this isn't satisfied perfectly (because the conditions for a generalized inverse of an inverse semigroup are not satisfied). But what I tried to convey is that random (and deterministic) machines don't always allow this sort of reversal.
In the context of Turing Machines (TMs) and automata theory, a non-deterministic machine is one in which any instantiation of the machine which accepts is fine. In this sense, it is like running multiple deterministic machines in parallel and take the output of any instances that accept the input. In fact there is a (deterministic) algorithm to transform any non-deterministic automaton (with n states) into an equivalent deterministic one (with 2n states, exponential) by considering equivalence classes of states, no matter if the algorithm implemented in the machine involves randomisation or probabilities (see below).
But if the algorithm implemented in the machine, involves randomisation or probabilities (intrinsic in the algorithm), then it is a randomised (or probabilistic) machine.
In general, it is always possible to remove non-determinism from a machine and construct a deterministic equivalent (see algorithm above), but the same cannot be done (in general) to remove randomisation (in the context of the above) because it is intrinsic to the algorithm implemented.
Note that in the light of the above, both a deterministic machine and a non-deterministic machine can be probabilistic if the algorithm (involved) uses randomisation (or probabilities) in this way.
To sum up, non-determinism in automata (in this context) refers to classes of similar automata, while randomisation or probabilistic machines refer to the (intrinsic application of randomisation in the) actual algorithms implemented by these automata.
We use cookies and other tracking technologies to improve your browsing experience on our website,
to show you personalized content and targeted ads, to analyze our website traffic,
and to understand where our visitors are coming from.
By continuing, you consent to our use of cookies and other tracking technologies and
affirm you're at least 16 years old or have consent from a parent or guardian.