Sari la conținutul principal

Controlul propagării erorilor

Computația cuantică tolerantă la erori seamănă cu o cursă între erori și corecția erorilor. Dacă numărul de erori este suficient de mic, corecția erorilor le va corecta cu succes; dar dacă există prea multe erori, corecția erorilor va eșua.

Din acest motiv, trebuie acordată suficientă atenție modului în care sunt efectuate computațiile cuantice în implementările tolerante la erori ale circuitelor, pentru a controla propagarea erorilor. Adică, o eroare pe un qubit poate fi propagată potențial la mai mulți qubiți prin acțiunea Gate-urilor dintr-un Circuit cuantic, ceea ce poate face ca numărul de erori să crească dramatic. Aceasta este o preocupare primordială, deoarece dacă nu reușim să controlăm propagarea erorilor, eforturile noastre de corecție a erorilor vor fi rapid copleșite de erori. Dacă, pe de altă parte, suntem capabili să ținem sub control propagarea erorilor, atunci corecția erorilor are o șansă reală să țină pasul, permițând corectarea erorilor la o rată suficient de ridicată pentru a permite computației cuantice să funcționeze conform intenției.

Punctul de plecare pentru o discuție tehnică a acestei probleme este recunoașterea că Gate-urile cu doi qubiți (sau Gate-urile cu mai mulți qubiți, în general) pot propaga erori, chiar și atunci când funcționează perfect. De exemplu, consideră un Gate CNOT și presupune că o eroare XX apare pe qubitul de control chiar înainte ca Gate-ul CNOT să fie executat. Așa cum am observat deja în lecția „Corectarea erorilor cuantice", acest lucru este echivalent cu o eroare XX care apare pe ambii qubiți după ce este executat Gate-ul CNOT. Situația este similară și pentru o eroare ZZ care acționează asupra qubitul țintă în loc de cel de control, înainte ca Gate-ul CNOT să fie executat.

Reprezentări prin Circuit ale propagării erorilor de către Gate-uri CNOT

Aceasta este o propagare a erorilor, deoarece locația nefericită a unei erori XX sau ZZ înainte de Gate-ul CNOT o transformă efectiv în două erori după Gate-ul CNOT. Acest lucru se întâmplă chiar și atunci când Gate-ul CNOT este perfect, și nu trebuie să uităm că un anumit Gate CNOT poate fi el însuși zgomotos, ceea ce poate crea erori corelate pe doi qubiți.

Pe lângă aceasta, ne preocupă și faptul că Gate-urile cu doi qubiți ulterioare ar putea propaga aceste erori și mai departe, așa cum sugerează figura următoare.

Reprezentări prin Circuit ale propagării erorilor de către mai multe Gate-uri CNOT

Într-un anumit sens, nu putem evita niciodată acest lucru; atât timp cât folosim Gate-uri cu mai mulți qubiți, va exista un potențial pentru propagarea erorilor. Totuși, așa cum vom discuta în subsecțiunile ce urmează, se pot lua măsuri pentru a limita daunele cauzate de aceasta, permițând gestionarea erorilor propagate.

Implementări transversale ale Gate-urilor

Cea mai simplă metodă cunoscută pentru a atenua propagarea erorilor în circuitele cuantice tolerante la erori este implementarea Gate-urilor transversal, ceea ce înseamnă construirea de gadget-uri pentru acestea care au o formă simplă specifică. Mai concret, gadget-urile trebuie să fie un produs tensorial de operații (sau, cu alte cuvinte, un Circuit cuantic de adâncime unu), unde fiecare operație poate acționa doar pe o singură poziție de qubit în cadrul fiecărui bloc de cod pe care îl atinge. Aceasta este poate cel mai ușor de explicat prin câteva exemple.

Exemple de implementări transversale ale Gate-urilor

Consideră figura următoare, care sugerează o implementare transversală a unui Gate CNOT. (Această implementare particulară, în care Gate-urile CNOT sunt executate qubit cu qubit, funcționează doar pentru coduri CSS — dar funcționează, de fapt, pentru toate codurile CSS.)

Implementare transversală a unui Gate CNOT

Există două blocuri de cod în această figură, fiecare reprezentat ca fiind compus din cinci qubiți (deși ar putea fi mai mulți, așa cum a fost deja sugerat). Circuitul din dreapta are adâncimea unu, iar fiecare dintre Gate-urile CNOT acționează pe o singură poziție de qubit în cadrul fiecărui bloc: atât controlul cât și ținta pentru primul CNOT sunt qubitul de sus (adică qubitul 0, folosind convenția de numerotare Qiskit), atât controlul cât și ținta pentru al doilea CNOT sunt al doilea qubit de sus (adică qubitul 1), și tot așa. Prin urmare, acesta este un gadget transversal.

Pentru un al doilea exemplu — de fapt o clasă de exemple — consideră orice Gate Pauli. Gate-urile Pauli pot fi întotdeauna implementate transversal, pentru orice cod Stabilizer, prin construirea de gadget-uri compuse din operații Pauli. În particular, orice operație Pauli pe un qubit logic codificat printr-un cod Stabilizer poate fi implementată transversal prin alegerea unei operații Pauli corespunzătoare pe qubiții fizici folosiți pentru codificare. Acest lucru este consistent cu un fapt menționat în treacăt în lecția „Formalismul Stabilizer": cu excepția unei faze globale, operațiile Pauli care comută cu fiecare generator de Stabilizer al unui cod Stabilizer acționează ca operații Pauli pe qubitul sau qubiții codificați de acel cod.

Ca exemplu specific, consideră codul Shor cu 99 qubiți, pentru care stările din baza standard ar putea fi codificate astfel.

0122(000+111)(000+111)(000+111)1122(000111)(000111)(000111)\begin{aligned} \vert 0\rangle & \:\mapsto\: \frac{1}{2\sqrt{2}} (\vert 000\rangle + \vert 111\rangle) \otimes (\vert 000\rangle + \vert 111\rangle) \otimes (\vert 000\rangle + \vert 111\rangle) \\[3mm] \vert 1\rangle & \:\mapsto\: \frac{1}{2\sqrt{2}} (\vert 000\rangle - \vert 111\rangle) \otimes (\vert 000\rangle - \vert 111\rangle) \otimes (\vert 000\rangle - \vert 111\rangle) \end{aligned}

Un Gate XX pe qubitul logic codificat de acest cod poate fi implementat transversal prin operația Pauli cu 99 qubiți

ZIIZIIZIIZ \otimes \mathbb{I} \otimes \mathbb{I} \otimes Z \otimes \mathbb{I} \otimes \mathbb{I} \otimes Z \otimes \mathbb{I} \otimes \mathbb{I}

în timp ce un Gate ZZ pe qubitul logic poate fi implementat transversal prin operația Pauli cu 99 qubiți

XXXIIIIII.X \otimes X \otimes X \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I}.

Ambele aceste operații Pauli au greutatea 3,3, care este greutatea minimă necesară. (Codul Shor cu 99 qubiți are distanța 3,3, deci orice operație Pauli non-identitate de greutate 22 sau mai mică este detectată ca eroare.)

Și, pentru un al treilea exemplu, codul Steane cu 77 qubiți (și într-adevăr orice cod de culoare) permite o implementare transversală a tuturor Gate-urilor Clifford. Am văzut deja cum sunt implementate transversal Gate-urile CNOT pentru orice cod CSS, deci rămâne să luăm în considerare Gate-urile HH și SS. Un Gate Hadamard aplicat tuturor celor 77 qubiți ai codului Steane este echivalent cu aplicarea lui HH pe qubitul logic pe care îl codifică, în timp ce un Gate SS^{\dagger} (în loc de un Gate SS) aplicat tuturor celor 77 qubiți este echivalent cu un Gate SS logic.

Propagarea erorilor pentru gadget-uri transversale

Acum că știm ce sunt implementările transversale ale Gate-urilor, să discutăm legătura lor cu propagarea erorilor.

Pentru o implementare transversală a unui Gate cu un singur qubit, avem pur și simplu un produs tensorial de Gate-uri cu un singur qubit în gadget-ul nostru, care acționează pe un bloc de cod de qubiți fizici pentru codul ales de corecție a erorilor cuantice. Deși oricare dintre aceste Gate-uri ar putea eșua și introduce o eroare, nu va exista nicio propagare a erorilor deoarece nu sunt implicate Gate-uri cu mai mulți qubiți. Imediat după aplicarea gadget-ului, se efectuează corecția erorilor; și dacă numărul de erori introduse de gadget (sau în timp ce gadget-ul este executat) este suficient de mic, erorile vor fi corectate. Deci, dacă rata erorilor introduse de Gate-uri defecte este suficient de mică, corecția erorilor are o șansă bună de succes.

Pentru o implementare transversală a unui Gate cu doi qubiți, pe de altă parte, există potențialul pentru propagarea erorilor — pur și simplu nu există nicio modalitate de a evita acest lucru, așa cum am observat deja. Punctul esențial, totuși, este că un gadget transversal nu poate cauza niciodată o propagare a erorilor în cadrul unui singur bloc de cod.

De exemplu, luând în considerare implementarea transversală a unui Gate CNOT pentru un cod CSS descrisă mai sus, o eroare XX ar putea apărea pe qubitul de sus al blocului de cod superior chiar înainte ca gadget-ul să fie executat, iar primul CNOT din cadrul gadget-ului va propaga acea eroare la qubitul de sus din blocul inferior. Totuși, cele două erori rezultante se află acum în blocuri de cod separate. Deci, presupunând că codul nostru poate corecta o eroare XX, pașii de corecție a erorilor care au loc după gadget vor corecta individual cele două erori XX — deoarece apare doar o singură eroare în fiecare bloc de cod. În contrast, dacă propagarea erorilor ar avea loc în interiorul aceluiași bloc de cod, ar putea transforma o eroare de greutate mică într-una de greutate mare pe care codul nu o poate gestiona.

Non-universalitatea Gate-urilor transversale

Pentru două coduri Stabilizer diferite, se poate întâmpla ca un anumit Gate să poată fi implementat transversal cu un cod, dar nu cu celălalt. De exemplu, deși nu este posibil să implementezi un Gate TT transversal folosind codul Steane cu 77 qubiți, există alte coduri pentru care acest lucru este posibil.

Din nefericire, nu este niciodată posibil, pentru niciun cod de corecție a erorilor cuantice non-trivial, să implementezi transversal un set universal de Gate-uri. Acest fapt este cunoscut sub numele de teorema Eastin-Knill.

Teoremă

Teorema Eastin-Knill: Pentru orice cod de corecție a erorilor cuantice cu distanța de cel puțin 2, mulțimea de Gate-uri logice care pot fi implementate transversal generează o mulțime de operații care (cu excepția unei faze globale) este discretă și, prin urmare, nu este universală.

Demonstrația acestei teoreme nu va fi explicată aici. (Nu este o demonstrație complicată, dar necesită cunoștințe de bază despre grupuri Lie și algebre Lie, care nu se numără printre cerințele preliminare ale seriei.) Ideea de bază, totuși, poate fi transmisă în termeni intuitivi: Familiile infinite de operații transversale nu pot rămâne în spațiul de cod al unui cod non-trivial deoarece diferențele minuscule dintre operațiile transversale sunt bine aproximate de operații Pauli de greutate mică, pe care codul le detectează ca erori.

Pe scurt, gadget-urile transversale oferă o implementare simplă și inerent tolerantă la erori a Gate-urilor — dar pentru orice alegere rezonabilă a unui cod de corecție a erorilor cuantice, nu va exista niciodată un set universal de Gate-uri care să poată fi implementat în acest mod, ceea ce necesită utilizarea unor gadget-uri alternative.

Stări magice

Dat fiind că nu este posibil, pentru nicio alegere non-trivială a unui cod de corecție a erorilor cuantice, să implementezi transversal un set universal de Gate-uri cuantice, trebuie să luăm în considerare alte metode pentru a implementa Gate-uri în mod tolerant la erori. O metodă bine-cunoscută se bazează pe noțiunea de stări magice, care sunt stări cuantice ale qubiților ce permit implementări tolerante la erori ale anumitor Gate-uri.

Implementarea Gate-urilor cu stări magice

Să începem prin a lua în considerare Gate-urile SS și TT, care au descrierile matriciale următoare.

S=(100i)=(100eiπ/2)andT=(1001+i2)=(100eiπ/4)S = \begin{pmatrix} 1 & 0\\ 0 & i \end{pmatrix} = \begin{pmatrix} 1 & 0\\ 0 & e^{i\pi/2} \end{pmatrix} \qquad\text{and}\qquad T = \begin{pmatrix} 1 & 0\\ 0 & \frac{1+i}{\sqrt{2}} \end{pmatrix} = \begin{pmatrix} 1 & 0\\ 0 & e^{i\pi/4} \end{pmatrix}

Prin definiție, SS este o operație Clifford, în timp ce TT nu este; nu este posibil să implementezi un Gate TT cu un Circuit compus din Gate-uri Clifford (Gate-uri HH, Gate-uri SS și Gate-uri CNOT).

Totuși, este posibil să implementezi un Gate TT (cu excepția unei faze globale) cu un Circuit compus din Gate-uri Clifford dacă, în plus, avem o copie a stării

T+=120+eiπ/421,T\vert {+} \rangle = \frac{1}{\sqrt{2}} \vert 0 \rangle + \frac{e^{i\pi/4}}{\sqrt{2}} \vert 1\rangle,

și permitem măsurători în baza standard și Gate-uri controlate clasic. În particular, Circuitul următor arată o modalitate de a face acest lucru. Fenomenul ilustrat aici este un exemplu oarecum simplificat de teleportare cuantică a Gate-urilor.

Un Circuit care ilustrează injecția de stări magice

Pentru a verifica că acest Circuit funcționează corect, putem calcula mai întâi acțiunea Gate-ului CNOT asupra intrării.

T+ψCNOT120Tψ+1+i21TψT \vert {+} \rangle \otimes \vert\psi\rangle \stackrel{\text{CNOT}}{\longmapsto} \frac{1}{\sqrt{2}} \vert 0\rangle \otimes T \vert \psi\rangle + \frac{1+i}{2} \vert 1\rangle \otimes T^{\dagger} \vert \psi\rangle

Măsurătoarea oferă prin urmare rezultatele 00 și 11 cu probabilitate egală. Dacă rezultatul este 0,0, Gate-ul SS nu este executat, iar starea de ieșire este Tψ;T\vert\psi\rangle; și dacă rezultatul este 1,1, Gate-ul SS este executat, iar starea de ieșire este STψ=Tψ.ST^{\dagger}\vert\psi\rangle = T\vert \psi\rangle.

Starea T+T\vert {+}\rangle este numită stare magică în acest context, deși nu este unică în această privință: și alte stări sunt numite stări magice atunci când pot fi folosite în mod similar (pentru Gate-uri posibil diferite și folosind Circuite diferite). De exemplu, înlocuind starea T+T\vert{+}\rangle cu starea S+S\vert{+}\rangle și înlocuind Gate-ul SS din Circuitul de mai sus cu un Gate ZZ se implementează un Gate SS — ceea ce este potențial util pentru computația cuantică tolerantă la erori folosind un cod pentru care Gate-urile SS nu pot fi implementate transversal.

Gadget-uri tolerante la erori din stări magice

S-ar putea să nu fie clar că utilizarea stărilor magice pentru implementarea Gate-urilor este utilă pentru toleranța la erori. Pentru implementarea Gate-ului TT descrisă mai sus, de exemplu, se pare că tot avem nevoie să aplicăm un Gate TT pe o stare +\vert{+}\rangle pentru a obține o stare magică, pe care o folosim apoi pentru a implementa un Gate TT. Deci care este avantajul utilizării acestei abordări pentru toleranța la erori?

Iată trei puncte cheie care oferă un răspuns la această întrebare.

  1. Crearea stărilor magice nu necesită aplicarea Gate-ului pe care încercăm să îl implementăm pe o anumită stare. De exemplu, aplicarea unui Gate TT pe o stare +\vert {+} \rangle nu este singura modalitate de a obține o stare T+T\vert{+}\rangle.

  2. Crearea stărilor magice poate fi realizată separat de computația în care sunt utilizate. Aceasta înseamnă că erorile care apar în procesul de creare a stărilor magice nu se vor propaga la computația propriu-zisă care este efectuată.

  3. Dacă Gate-urile individuale din Circuitul care implementează un Gate ales folosind o stare magică pot fi implementate tolerant la erori, și presupunem disponibilitatea stărilor magice, obținem o implementare tolerantă la erori a Gate-ului ales.

Pentru a simplifica discuția care urmează, să ne concentrăm pe Gate-urile TT în mod specific — ținând minte că metodologia poate fi extinsă la alte Gate-uri. O implementare tolerantă la erori a unui Gate TT folosind stări magice are forma sugerată de figura următoare.

Un Circuit care ilustrează injecția de stări magice pe un qubit codificat

Qubiții din Circuitul original cu Gate-ul TT corespund qubiților logici din această diagramă, care sunt codificați de orice cod pe care îl folosim pentru toleranța la erori. Intrările și ieșirile din diagramă trebuie prin urmare înțelese ca codificări ale acestor stări. Aceasta înseamnă, în particular, că de fapt nu avem nevoie doar de stări magice — avem nevoie de stări magice codificate. Gate-urile din Circuitul original cu Gate-ul TT sunt înlocuite aici de gadget-uri, pe care le presupunem tolerante la erori.

Această figură particulară sugerează astfel că avem deja gadget-uri tolerante la erori pentru Gate-uri CNOT și Gate-uri SS. Pentru un cod de culoare, aceste gadget-uri ar putea fi transversale; pentru un cod de suprafață (sau orice alt cod CSS), CNOT-ul poate fi executat transversal, în timp ce gadget-ul pentru Gate-ul SS ar putea fi el însuși implementat folosind stări magice, așa cum a fost sugerat anterior că este posibil. (Figura sugerează, de asemenea, că avem un gadget tolerant la erori pentru efectuarea unei măsurători în baza standard, pe care l-am ignorat până acum. Aceasta ar putea fi de fapt o provocare pentru unele coduri selectate să o facă astfel, dar pentru un cod CSS este o chestiune de a măsura fiecare qubit fizic urmată de post-procesare clasică.)

Implementarea este prin urmare tolerantă la erori, presupunând că avem o codificare a unei stări magice T+.T\vert{+}\rangle. Dar, tot nu am abordat problema cum obținem o codificare a acestei stări. O modalitate de a obține stări magice codificate (sau, poate mai precis, de a le îmbunătăți) este printr-un proces cunoscut sub numele de distilare a stărilor magice. Diagrama următoare ilustrează cum arată acest proces la cel mai înalt nivel.

Un Circuit care reprezintă distilarea stărilor magice codificate

Cu alte cuvinte, o colecție de stări magice codificate zgomotoase este introdusă într-un tip special de Circuit cunoscut sub numele de distilator. Toate blocurile de ieșire cu excepția unuia sunt măsurate — ceea ce înseamnă că qubiții logici sunt măsurați cu măsurători în baza standard. Dacă vreunul dintre rezultatele măsurătorilor este 1,1, procesul a eșuat și trebuie reluat. Dacă, totuși, fiecare rezultat al măsurătorii este 0,0, starea rezultantă a blocului de cod de sus va fi o stare magică codificată mai puțin zgomotoasă. Această stare ar putea apoi să se alăture altor patru ca intrări într-un alt distilator, sau să fie folosită pentru a implementa un Gate TT dacă este considerată suficient de apropiată de o adevărată stare magică codificată. Desigur, procesul trebuie să înceapă undeva, o posibilitate fiind pregătirea lor în mod non-tolerant la erori.

Există diferite moduri cunoscute de a construi distilator-ul în sine, dar acestea nu vor fi explicate sau analizate aici. La un nivel logic, abordarea tipică — remarcabil și oarecum coincidental — este să rulezi un Circuit de codificare pentru un cod Stabilizer în sens invers! Acesta ar putea fi, de fapt, un cod Stabilizer diferit de cel folosit pentru corecția erorilor. De exemplu, s-ar putea folosi un cod de suprafață sau un cod de culoare pentru corecția erorilor, dar rula un codificator pentru codul cu 55 qubiți în sens invers în scopul distilării stărilor magice. Circuitele de codificare pentru codurile Stabilizer necesită doar Gate-uri Clifford, ceea ce simplifică implementarea tolerantă la erori a unui distilator. În realitate, detaliile depind de codurile care sunt utilizate.

Pe scurt, această secțiune a urmărit să ofere doar o discuție la nivel foarte înalt a stărilor magice, cu intenția de a oferi doar o idee de bază despre cum funcționează. Uneori se susține că costul utilizării stărilor magice pentru a implementa Gate-uri tolerant la erori în acest mod ar fi extrem de ridicat, cu marea majoritate a muncii mergând în procesul de distilare. Totuși, acest lucru nu este de fapt atât de clar — există multe modalități potențiale de a optimiza aceste procese. Există, de asemenea, abordări alternative pentru construirea de gadget-uri tolerante la erori pentru Gate-uri care nu pot fi implementate transversal. De exemplu, deformarea codului și comutarea codului sunt cuvinte cheie asociate cu unele dintre aceste scheme — și continuă să fie dezvoltate și rafinate metode noi.

Corecția tolerantă la erori a erorilor

Pe lângă implementarea diverselor gadget-uri necesare pentru o implementare tolerantă la erori a unui Circuit cuantic dat, există o altă problemă importantă care trebuie recunoscută: implementarea pașilor de corecție a erorilor înșiși. Aceasta revine la ideea că orice implică informație cuantică este susceptibil la erori — inclusiv Circuitele care sunt ele însele menite să corecteze erorile.

Consideră, de exemplu, tipul de Circuit descris în lecția „Formalismul Stabilizer" pentru măsurarea generatorilor de Stabilizer în mod non-distructiv folosind estimarea fazei. Aceste Circuite nu sunt în mod clar tolerante la erori deoarece pot cauza propagarea erorilor în cadrul blocului de cod pe care operează. Aceasta ar putea părea destul de problematică, dar există mai multe modalități cunoscute de a efectua corecția erorilor tolerant la erori într-un mod care nu cauzează propagarea erorilor în cadrul blocurilor de cod corectate.

O metodă este cunoscută sub numele de corecția erorilor Shor, deoarece a fost descoperită prima dată de Peter Shor. Ideea este de a efectua măsurătorile sindromului folosind o așa-numită stare cat, care este o stare cu nn qubiți de forma

120n+121n,\frac{1}{\sqrt{2}} \vert 0^n \rangle + \frac{1}{\sqrt{2}} \vert 1^n \rangle,

unde 0n0^n și 1n1^n se referă la șirurile de lungime nn formate numai din zerouri, respectiv numai din unu. De exemplu, aceasta este o stare ϕ+\vert\phi^+\rangle când n=2n=2 și o stare GHZ când n=3,n=3, dar în general, corecția erorilor Shor necesită o stare de acest tip pentru nn egal cu greutatea generatorului de Stabilizer care este măsurat.

Ca exemplu, Circuitul prezentat aici măsoară un generator de Stabilizer de forma P2P1P0.P_2\otimes P_1 \otimes P_0.

Un Circuit de detecție a erorilor Shor

Aceasta necesită construirea stării cat în sine, și pentru a o face să funcționeze în mod fiabil în prezența erorilor și a Gate-urilor potențial defecte, metoda necesită de fapt rularea repetată a unor Circuite ca acesta pentru a trage concluzii despre locul în care s-ar putea fi produs diferite erori în timpul procesului.

O metodă alternativă este cunoscută sub numele de corecția erorilor Steane. Această metodă funcționează diferit și funcționează numai pentru coduri CSS. Ideea este că nu efectuăm de fapt măsurătorile sindromului pe stările cuantice codificate din Circuitul pe care încercăm să îl rulăm, ci în schimb intenționat propagăm erorile la un sistem de spațiu de lucru, apoi măsurăm acel sistem și detectăm erorile clasic. Diagramele de Circuit următoare ilustrează cum poate fi realizat acest lucru pentru detectarea erorilor XX, respectiv ZZ.

Un Circuit de detecție a erorilor Steane