CALCOLO QUANTISTICO Vogliamo simulare le reti neurali quantistiche utilizzando un computer classico. Per fare questo utilizzeremo il calcolo quantistico. Esso è basato su tre concetti quantistici: - sovrapposizione - entanglement - interferenza. Cercheremo di esprimere la rete da rappresentare come un algoritmo, rappresentato da una funzione di input f : {0,1}n ->{0,1}m e dal problema costituito dalla ricerca di una certa proprietà per f. L’input sarà una funzione da una stringa binaria ad una stringa binaria. La funzione f viene codificata in un operatore matrice unitaria Uf . Una matrice quadrata Uf nel campo complesso è unitaria sse la sua matrice inversa coincide con la sua trasposta coniugata: Uf-1 = Uf+ . Una volta generato, l’operatore Uf viene incapsulato in un quantum gate G, che è la chiave dell’algoritmo quantistico. Il quantum gate agisce su una base canonica iniziale per generare come output una combinazione lineare complessa (sovrapposizione) dei vettori della base. Una volta giunti alla sovrapposizione, ha luogo la misura in modo da poter estrarre l’informazione. In meccanica quantistica la misura è un’operazione non deterministica che produce come output solo uno dei vettori della base nella sovrapposizione. A probabilità di ciascun vettore di base di essere l’output della misura dipende dai suoi coefficienti complessi (ampiezza di probabilità) . Si dice quantum block l’insieme delle azioni quantum gate/misura. Il quantum block viene ripetuto k volte in modo da produrre k vettori di base, che non saranno necessariamente identici. Ciascuno di loro conterrà una parte della soluzione cercata. CODIFICA Per prima cosa dunque dobbiamo codificare la funzione f in Uf. La tabella che costituisce f viene trasformata nella funzione iniettiva F: {0,1}n+m ->{0,1}n+m t.c. F(x0,…,xn-1,y0,….,ym-1) = (x0,….,xn-1,f(x0,….,xn-1) (y0,….,ym-1)) In modo che f possa sempre essere calcolata da F. è l’operatore XOR. XOR fra due stringhe binarie p e q di lunghezza m è una stringa di lunghezza m t.c. la i-esima cifra di s è calcolata come un OR esclusivo fra la iesima cifra di p e q: p=(p0,…,pn-1) q=(q0,…,qn-1) s = p q = ((p0 + q0) mod 2,…,(pn-1+qn-1) mod 2)) . A questo punto la funzione F viene trasformata in una tabella Uf, nel seguente modo: Uf[(s)] = ([F(s)] Dove : {0,1}n+m -> C 2n+m C 2n+m (spazio di Hilbert) t.c. Ciò significa che mappa valori di bit in vettori complessi di dimensione 2 che appartengono alla base canonica di C2. Usando il prodotto tensoriale, mappa lo stato di una stringa binaria di dimensione n in un vettore di dimensione 2n. Ogni stato espresso in bit viene trasformato nel corrispondente vettore bidimensionle della base e successivamente lo stato espresso in stringa viene mappato nel corrispondente vettore della base 2n dimensionale componendo tutti i vettori bit con il prodotto tensoriale. Prodotto tensoriale: Esempi: Se un componente di un vettore complesso è interpretato come l’ampiezza di probabilità del sistema di essere in un certo stato, il prodotto tensoriale fra due vettori descrive la probabilità congiunta dei due sistemi di essere in uno stato congiunto. I vettori della base sono denotati con la notazione ket |i>. Allora essendo [Uf]ij=1 Uf |j> = |i> Visto che |i> e |j> sono vettori colonna. Di fatto quindi Uf definisce una mappa di permutazione delle righe della matrice identità. L’intelligenza dell’algoritmo da costruire consisterà nell’estrarre l’informazione necessaria per trovare la proprietà richiesta di f ed immagazzinarla nei vettori di output.