"Jag tror att jag säkert kan säga att ingen förstår kvantmekanik." - Richard Feynman
Ämnet quantum computing har alltid fascinerat tekniska författare och journalister. Dess beräkningspotential och komplexitet gav den en viss mystisk aura. Alltför ofta beskriver featureartiklar och infografik i detalj de olika utsikterna för denna bransch, samtidigt som de knappt berör dess praktiska tillämpning: detta kan vilseleda den mindre uppmärksamma läsaren.
Populärvetenskapliga artiklar utelämnar beskrivningar av kvantsystem och gör påståenden som:
En vanlig bit kan vara en 1 eller en 0, men en qubit kan vara en 1 och en 0 samtidigt.
Om du har mycket tur (vilket jag inte är säker på), kommer du att få veta att:
Qubiten är i en superposition mellan "1" och "0".
Ingen av dessa förklaringar verkar rimliga, eftersom vi försöker formulera ett kvantmekaniskt fenomen med hjälp av språk som utvecklats i en mycket traditionell värld. För att tydligt förklara principerna för kvantberäkning är det nödvändigt att använda ett annat språk - matematiskt.
I den här handledningen kommer jag att täcka de matematiska verktyg som behövs för att modellera och förstå kvantberäkningssystem, samt hur man illustrerar och tillämpar kvantberäkningens logik. Dessutom kommer jag att ge ett exempel på en kvantalgoritm och berätta vad dess fördel är jämfört med en traditionell dator.
Jag ska göra mitt bästa för att förklara allt detta i ett tydligt språk, men jag hoppas ändå att läsarna av den här artikeln har en grundläggande förståelse för linjär algebra och digital logik (linjär algebra täcks av
Låt oss först gå igenom principerna för digital logik. Den är baserad på användningen av elektriska kretsar för att utföra beräkningar. För att göra vår beskrivning mer abstrakt, låt oss förenkla tillståndet för den elektriska ledningen till "1" eller "0", vilket kommer att motsvara tillstånden "på" eller "av". Genom att arrangera transistorer i en viss sekvens kommer vi att skapa så kallade logiska element som tar ett eller flera insignalvärden och omvandlar dem till en utsignal baserad på vissa regler för boolesk logik.
Vanliga logiska grindar och deras tillståndstabeller
Baserat på kedjorna av sådana grundläggande element kan mer komplexa element skapas, och baserat på kedjorna av mer komplexa element kan vi i slutändan, med en stor grad av abstraktion, förvänta oss att få en analog till den centrala processorn.
Som jag nämnde tidigare behöver vi ett sätt att representera digital logik matematiskt. Låt oss först introducera matematisk traditionell logik. Med hjälp av linjär algebra kan de klassiska bitarna med värdena "1" och "0" representeras som två kolumnvektorer:
där siffrorna till vänster är
Identitet | Identitetsförvandling |
negation | Negation |
Konstant-0 | Beräkning av konstanten "0" |
Konstant-1 | Beräkning av konstanten "1" |
Baserat på vår föreslagna nya representation av en bit är det ganska enkelt att utföra operationer på motsvarande bit med hjälp av en vektortransformation:
Innan vi går vidare, låt oss titta på konceptet
Med
Nu när vi har nästan alla nödvändiga matematiska begrepp, låt oss gå vidare till vår första kvantlogikport. Det här är operatören
Denna operator kan representeras som följande transformationsvektor:
För att demonstrera allt vi har täckt hittills ska jag visa dig hur du använder CNOT-elementet på flera bitar:
För att sammanfatta det som redan har sagts: i det första exemplet bryter vi ner |10⟩ i delar av dess tensorprodukt och använder CNOT-matrisen för att erhålla ett nytt motsvarande tillstånd för produkten; vi faktoriserar det sedan till |11⟩ enligt tabellen med CNOT-värden som gavs tidigare.
Så vi har kommit ihåg alla matematiska regler som hjälper oss att förstå traditionell beräkning och vanliga bitar, och vi kan äntligen gå vidare till modern kvantberäkning och qubits.
Om du har läst så här långt, så har jag goda nyheter för dig: qubits kan enkelt uttryckas matematiskt. I allmänhet, om en klassisk bit (cbit) kan sättas till |1⟩ eller |0⟩, är qubiten helt enkelt i överlagring och kan vara både |0⟩ och |1⟩ före mätning. Efter mätning kollapsar den till |0⟩ eller |1⟩. Med andra ord kan en qubit representeras som en linjär kombination av |0⟩ och |1⟩ enligt formeln nedan:
där a₀ и a₁ representerar amplituderna |0⟩ respektive |1⟩. Dessa kan ses som "kvantsannolikheter", som representerar sannolikheten för att en qubit kollapsar till ett av tillstånden efter att den har mätts, eftersom ett objekt i superposition kollapsar till ett av tillstånden efter att ha fixerats i kvantmekaniken. Låt oss utöka detta uttryck och få följande:
För att förenkla min förklaring är det här representationen jag kommer att använda i den här artikeln.
För denna qubit, chansen att kollapsa till värdet a₀ efter mätning är lika med |a₀|², och chansen att kollapsa till värdet a₁ är lika med |a₁|². Till exempel för följande qubit:
chansen att kollapsa till "1" är lika med |1/ √2|², eller ½, det vill säga 50/50.
Eftersom i det klassiska systemet alla sannolikheter måste läggas till ett (för en fullständig sannolikhetsfördelning), kan vi dra slutsatsen att kvadraterna av absolutvärdena för amplituderna |0⟩ och |1⟩ måste läggas till ett. Baserat på denna information kan vi formulera följande ekvation:
Om du är bekant med trigonometri kommer du att märka att denna ekvation motsvarar Pythagoras sats (a²+b²=c²), det vill säga vi kan grafiskt representera qubitens möjliga tillstånd som punkter på enhetscirkeln, nämligen:
Logiska operatorer och element appliceras på qubits på samma sätt som i situationen med klassiska bitar - baserat på en matristransformation. Alla de inverterbara matrisoperatorerna som vi har återkallat hittills, särskilt CNOT, kan användas för att arbeta med qubits. Sådana matrisoperatorer låter dig använda var och en av amplituderna för qubiten utan att mäta och kollapsa den. Låt mig ge dig ett exempel på hur du använder negationsoperatorn på en qubit:
Innan vi fortsätter, låt mig påminna dig om att amplitudvärdena a₀ och a₁ är faktiskt
Men för att förenkla förklaringen kommer vi här att begränsa oss till reella tal.
Det verkar vara dags att diskutera några logiska element som är vettiga enbart i samband med kvantberäkning.
En av de viktigaste operatorerna är "Hadamard-elementet": det tar lite i ett "0" eller "1" tillstånd och sätter det i lämplig överlagring med en 50% chans att kollapsa till en "1" eller "0" efter mätning.
Lägg märke till att det finns ett negativt tal i den nedre högra sidan av Hadamard-operatören. Detta beror på det faktum att resultatet av att tillämpa operatorn beror på värdet på insignalen: - |1⟩ eller |0⟩, och därför är beräkningen reversibel.
En annan viktig punkt med Hadamard-elementet är dess reversibilitet, vilket betyder att det kan ta en qubit i lämplig överlagring och omvandla den till |0⟩ eller |1⟩.
Detta är mycket viktigt eftersom det ger oss förmågan att transformera från ett kvanttillstånd utan att bestämma qubitens tillstånd - och följaktligen utan att kollapsa den. Således kan vi strukturera kvantberäkningar baserat på en deterministisk snarare än en probabilistisk princip.
Kvantoperatorer som bara innehåller reella tal är deras egen motsats, så vi kan representera resultatet av att tillämpa operatorn på en qubit som en transformation inom enhetscirkeln i form av en tillståndsmaskin:
Således omvandlas qubiten, vars tillstånd presenteras i diagrammet ovan, efter att ha tillämpat Hadamard-operationen, till det tillstånd som indikeras av motsvarande pil. På samma sätt kan vi konstruera en annan tillståndsmaskin som kommer att illustrera transformationen av en qubit med hjälp av negationsoperatorn som visas ovan (även känd som Pauli-negationsoperatorn, eller bitinversion), som visas nedan:
För att utföra mer komplexa operationer på vår qubit kan vi kedja flera operatorer eller applicera element flera gånger. Exempel på serietransformation baserat på
Det vill säga, om vi börjar med bit |0⟩, applicerar en bitinversion, och sedan en Hadamard-operation, sedan ytterligare en bitinversion, och igen en Hadamard-operation, följt av en sista bitinversion, slutar vi med vektorn som ges av on höger sida av kedjan. Genom att lägga olika tillståndsmaskiner ovanpå varandra kan vi börja vid |0⟩ och spåra de färgade pilarna som motsvarar var och en av transformationerna för att förstå hur det hela fungerar.
Eftersom vi har kommit så långt är det dags att överväga en av typerna av kvantalgoritmer, nämligen -
Låt oss föreställa oss att du har en svart låda som innehåller en funktion/operator på en bit (kom ihåg - med en bit kan endast fyra operationer utföras: identitetsomvandling, negation, utvärdering av konstanten "0" och utvärdering av konstanten "1" "). Exakt vilken funktion utförs i lådan? Du vet inte vilken, men du kan gå igenom så många varianter av ingångsvärden som du vill och utvärdera utdataresultaten.
Hur många ingångar och utgångar måste du köra genom den svarta rutan för att ta reda på vilken funktion som används? Tänk på det här en sekund.
När det gäller en klassisk dator måste du göra 2 frågor för att avgöra vilken funktion som ska användas. Till exempel, om ingången "1" ger en "0"-utgång, blir det tydligt att antingen funktionen att beräkna konstanten "0" eller negationsfunktionen används, varefter du måste ändra värdet på insignalen till "0" och se vad som händer vid utgången.
I fallet med en kvantdator kommer två frågor också att krävas, eftersom du fortfarande behöver två olika utdatavärden för att exakt definiera funktionen som ska tillämpas på ingångsvärdet. Men om man formulerar om frågan lite så visar det sig att kvantdatorer fortfarande har en allvarlig fördel: om man ville veta om funktionen som används är konstant eller variabel, skulle kvantdatorer ha fördelen.
Funktionen som används i rutan är variabel om olika värden på insignalen ger olika resultat vid utgången (till exempel identitetsomvandling och bitinversion), och om utgångsvärdet inte ändras oavsett ingångsvärdet, då funktionen är konstant (till exempel beräkna en konstant "1" eller beräkna konstanten "0").
Med hjälp av en kvantalgoritm kan du avgöra om en funktion i en svart låda är konstant eller variabel baserat på bara en fråga. Men innan vi tittar på hur man gör detta i detalj, måste vi hitta ett sätt att strukturera var och en av dessa funktioner på en kvantdator. Eftersom alla kvantoperatorer måste vara inverterbara står vi genast inför ett problem: funktionerna för att beräkna konstanterna "1" och "0" är det inte.
En vanlig lösning som används vid kvantberäkning är att lägga till en extra utdata-qubit som returnerar vilket ingångsvärde funktionen än tar emot.
Innan: | efter: |
På detta sätt kan vi bestämma ingångsvärdena enbart baserat på utgångsvärdet, och funktionen blir inverterbar. Strukturen hos kvantkretsar skapar behovet av en extra ingångsbit. För att utveckla motsvarande operatorer kommer vi att anta att den extra inmatade qubiten är satt till |0⟩.
Med hjälp av samma kvantkretsrepresentation som vi använde tidigare, låt oss se hur vart och ett av de fyra elementen (identitetstransformation, negation, utvärdering av konstanten "0" och utvärdering av konstanten "1") kan implementeras med hjälp av kvantoperatorer.
Så här kan du till exempel implementera funktionen för att beräkna konstanten "0":
Beräkning av konstanten "0":
Här behöver vi inga operatörer alls. Den första ingångsqubiten (som vi antog vara |0⟩) returnerar med samma värde, och det andra ingångsvärdet returnerar sig själv - som vanligt.
Med funktionen för att beräkna konstanten "1" är situationen lite annorlunda:
Beräkning av konstanten "1":
Eftersom vi har antagit att den första ingångsqubiten alltid är satt till |0⟩, är resultatet av att tillämpa bitinversionsoperatorn att den alltid producerar en etta vid utgången. Och som vanligt ger den andra qubiten sitt eget värde vid utgången.
När man kartlägger identitetstransformationsoperatören börjar uppgiften bli mer komplicerad. Så här gör du:
Identisk transformation:
Symbolen som används här betecknar CNOT-elementet: den översta raden anger kontrollbiten och den nedre raden anger kontrollbiten. Låt mig påminna dig om att när du använder CNOT-operatorn ändras värdet på kontrollbiten om kontrollbiten är lika med |1⟩, men förblir oförändrad om kontrollbiten är lika med |0⟩. Eftersom vi antog att värdet på den översta raden alltid är lika med |0⟩, tilldelas dess värde alltid den nedersta raden.
Vi fortsätter på liknande sätt med negationsoperatorn:
Negation:
Vi inverterar helt enkelt biten i slutet av utgångslinjen.
Nu när vi har fått den preliminära förståelsen ur vägen, låt oss titta på de specifika fördelarna med en kvantdator jämfört med en traditionell dator när det gäller att bestämma konstantheten eller variabiliteten för en funktion gömd i en svart låda med bara en fråga.
För att lösa detta problem med hjälp av kvantberäkning i en enda begäran är det nödvändigt att lägga in de ingående qubits i en superposition innan de skickas till funktionen, som visas nedan:
Hadamard-elementet återappliceras på resultatet av funktionen för att bryta qubits ur superposition och göra algoritmen deterministisk. Vi startar systemet i tillståndet |00⟩ och, av skäl som jag ska förklara snart, får vi resultatet |11⟩ om den tillämpade funktionen är konstant. Om funktionen inuti den svarta rutan är variabel, returnerar systemet resultatet |01⟩ efter mätning.
För att förstå resten av artikeln, låt oss titta på illustrationen jag visade tidigare:
Genom att använda bitinversionsoperatorn och sedan tillämpa Hadamard-elementet på båda ingångsvärdena lika med |0⟩, säkerställer vi att de översätts till samma överlagring av |0⟩ och |1⟩, enligt följande:
Genom att använda exemplet med att skicka detta värde till en svart låda-funktion är det lätt att visa att båda konstantvärdesfunktionerna matar ut |11⟩.
Beräkning av konstanten "0":
På liknande sätt ser vi att funktionen för att beräkna konstanten "1" också producerar |11⟩ som en utdata, det vill säga:
Beräkning av konstanten "1":
Observera att utgången blir |1⟩, eftersom -1² = 1.
Med samma princip kan vi bevisa att när vi använder båda variabelfunktionerna kommer vi alltid att få |01⟩ vid utgången (förutsatt att vi använder samma metod), även om allt är lite mer komplicerat.
Identisk transformation:
Eftersom CNOT är en två-qubit-operator, kan den inte representeras som en enkel tillståndsmaskin, och därför är det nödvändigt att definiera två utsignaler baserade på tensorprodukten av både ingående qubits och multiplikation med CNOT-matrisen som beskrivits tidigare:
Med denna metod kan vi också bekräfta att utmatningsvärdet |01⟩ tas emot om negationsfunktionen är gömd i den svarta rutan:
Negation:
Således har vi just visat en situation där en kvantdator är klart mer effektiv än en konventionell dator.
Vad härnäst?
Jag föreslår att vi slutar här. Vi har redan gjort ett bra jobb. Om du har förstått allt jag har täckt tror jag att du nu har en god förståelse för grunderna i kvantberäkning och kvantlogik, och varför kvantalgoritmer kan vara effektivare än traditionell beräkning i vissa situationer.
Min beskrivning kan knappast kallas en fullfjädrad guide till kvantberäkning och algoritmer - snarare är det en kort introduktion till matematik och notation, utformad för att skingra läsarnas idéer om ämnet som påtvingats av populärvetenskapliga källor (allvarligt, många kan verkligen inte förstå situationen!). Jag hann inte beröra många viktiga ämnen, som t.ex
Om du vill systematisera och strukturera dina kunskaper om kvantdatorer, starkt Jag rekommenderar dig att läsa
Källa: will.com